<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/ext/date/date_strftime.c, branch v2_4_0_preview2</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>date_strftime.c: check precision</title>
<updated>2016-06-14T13:07:27+00:00</updated>
<author>
<name>nobu</name>
<email>nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2016-06-14T13:07:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=58e8c9c895cc21473d6e46978666016a6e627d5f'/>
<id>58e8c9c895cc21473d6e46978666016a6e627d5f</id>
<content type='text'>
* ext/date/date_strftime.c (date_strftime_with_tmx): reject too
  large precision to get rid of buffer overflow.
  reported by Guido Vranken &lt;guido AT guidovranken.nl&gt;.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55410 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* ext/date/date_strftime.c (date_strftime_with_tmx): reject too
  large precision to get rid of buffer overflow.
  reported by Guido Vranken &lt;guido AT guidovranken.nl&gt;.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55410 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>* configure.in: check struct timeval exist or not.</title>
<updated>2013-03-16T05:06:47+00:00</updated>
<author>
<name>kosaki</name>
<email>kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2013-03-16T05:06:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=798ff850e41752834bd27081c2e85f874b2cc4aa'/>
<id>798ff850e41752834bd27081c2e85f874b2cc4aa</id>
<content type='text'>
* include/ruby/missing.h (struct timeval): check HAVE_STRUCT_TIMEVAL
  properly. and don't include sys/time.h if struct timeval exist.

* file.c: include sys/time.h explicitly.
* random.c: ditto.
* thread_pthread.c: ditto.
* time.c: ditto.
* ext/date/date_strftime.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* include/ruby/missing.h (struct timeval): check HAVE_STRUCT_TIMEVAL
  properly. and don't include sys/time.h if struct timeval exist.

* file.c: include sys/time.h explicitly.
* random.c: ditto.
* thread_pthread.c: ditto.
* time.c: ditto.
* ext/date/date_strftime.c: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39772 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed warning for implicit conversion from size_t to int</title>
<updated>2012-08-20T23:59:35+00:00</updated>
<author>
<name>ryan</name>
<email>ryan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2012-08-20T23:59:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=ed720d55054c1c7167cd3da97b683e868351f9b8'/>
<id>ed720d55054c1c7167cd3da97b683e868351f9b8</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36744 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@36744 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>	* ext/date/date_{core,strftime}.c: [ruby-core:46990].</title>
<updated>2012-08-04T21:57:48+00:00</updated>
<author>
<name>tadf</name>
<email>tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2012-08-04T21:57:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=ab67ba64ca4729725ae57ed4eda232851674e645'/>
<id>ab67ba64ca4729725ae57ed4eda232851674e645</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36620 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@36620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>	* ext/date/date_tmx.h: offset in struct tmx_funcs is now int.</title>
<updated>2012-06-16T09:49:17+00:00</updated>
<author>
<name>tadf</name>
<email>tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2012-06-16T09:49:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=f5b033cd4ee66a2fe3123573478eedf5612ffb33'/>
<id>f5b033cd4ee66a2fe3123573478eedf5612ffb33</id>
<content type='text'>
	* ext/date/date_strftime.c: ditto.
	* ext/date/date_core.c: ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36114 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	* ext/date/date_strftime.c: ditto.
	* ext/date/date_core.c: ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36114 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>	* ext/date/date_strftime.c: allows %Ok and %Ol.</title>
<updated>2012-05-27T01:04:41+00:00</updated>
<author>
<name>tadf</name>
<email>tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2012-05-27T01:04:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=83d8d057c2df674138187718eb2c9423506fa758'/>
<id>83d8d057c2df674138187718eb2c9423506fa758</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35815 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@35815 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>	* ext/date/date_strftime.c: reduced the code.</title>
<updated>2012-05-26T09:16:26+00:00</updated>
<author>
<name>tadf</name>
<email>tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2012-05-26T09:16:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=2199c85dd6eb6f912bf4502ceca27da1933e9d71'/>
<id>2199c85dd6eb6f912bf4502ceca27da1933e9d71</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35809 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@35809 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>	* ext/date/date_strftime.c: should also be aware of flags on</title>
<updated>2012-05-15T22:03:37+00:00</updated>
<author>
<name>tadf</name>
<email>tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2012-05-15T22:03:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=00fd38644d905c9ce17f32ab6873ba8eeac57cd1'/>
<id>00fd38644d905c9ce17f32ab6873ba8eeac57cd1</id>
<content type='text'>
	  complex specifier.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
	  complex specifier.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>trivial changes</title>
<updated>2012-05-14T21:39:25+00:00</updated>
<author>
<name>tadf</name>
<email>tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2012-05-14T21:39:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=b6de661b54b00e92f175afb52c022d4f608f60cc'/>
<id>b6de661b54b00e92f175afb52c022d4f608f60cc</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35647 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@35647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
<entry>
<title>trivial changes</title>
<updated>2012-05-13T22:39:13+00:00</updated>
<author>
<name>tadf</name>
<email>tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e</email>
</author>
<published>2012-05-13T22:39:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=c80308119b134e63fbc776aca077118ce3e7db4c'/>
<id>c80308119b134e63fbc776aca077118ce3e7db4c</id>
<content type='text'>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35641 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@35641 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
</pre>
</div>
</content>
</entry>
</feed>
'upd'><a href='/ruby.git/diff/Makefile.in?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>Makefile.in</a></td><td class='right'>358</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='del'><a href='/ruby.git/diff/NEWS?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>NEWS</a></td><td class='right'>629</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='upd'><a href='/ruby.git/diff/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>README</a></td><td class='right'>141</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='del'><a href='/ruby.git/diff/README.EXT?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>README.EXT</a></td><td class='right'>1164</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/README.EXT.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>README.EXT.ja</a></td><td class='right'>1264</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/README.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>README.ja</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='upd'><a href='/ruby.git/diff/ToDo?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ToDo</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='upd'><a href='/ruby.git/diff/array.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>array.c</a></td><td class='right'>4020</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 14.6%;'/><td class='none' style='width: 83.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/bcc32/Makefile.sub?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/Makefile.sub</a></td><td class='right'>549</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/bcc32/README.bcc32?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/README.bcc32</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/bcc32/configure.bat?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/configure.bat</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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/bcc32/mkexports.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/mkexports.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/bcc32/setup.mak?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/setup.mak</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='upd'><a href='/ruby.git/diff/bignum.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bignum.c</a></td><td class='right'>2485</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.5%;'/><td class='rem' style='width: 7.7%;'/><td class='none' style='width: 89.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/bin/erb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bin/erb</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/bin/irb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bin/irb</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/bin/rdoc?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>class.c</a></td><td class='right'>1089</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 3.6%;'/><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/common.mk?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>common.mk</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='upd'><a href='/ruby.git/diff/compar.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>compar.c</a></td><td class='right'>250</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 0.8%;'/><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/config.guess?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>config.guess</a></td><td class='right'>1459</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.0%;'/><td class='none' style='width: 94.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/config.sub?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>config.sub</a></td><td class='right'>1537</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.3%;'/><td class='none' style='width: 93.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/configure.in?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>configure.in</a></td><td class='right'>1855</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 7.4%;'/><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/cygwin/GNUmakefile.in?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>cygwin/GNUmakefile.in</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='add'><a href='/ruby.git/diff/dbm.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dbm.c</a></td><td class='right'>388</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.6%;'/><td class='rem' style='width: 0.0%;'/><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/defines.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>defines.h</a></td><td class='right'>267</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='add'><a href='/ruby.git/diff/dict.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dict.c</a></td><td class='right'>536</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 0.0%;'/><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/dir.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dir.c</a></td><td class='right'>1993</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.5%;'/><td class='rem' style='width: 7.7%;'/><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/distruby.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/djgpp/GNUmakefile.in?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/GNUmakefile.in</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/djgpp/README.djgpp?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/README.djgpp</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/djgpp/config.hin?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/config.hin</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/djgpp/config.sed?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/config.sed</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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/djgpp/configure.bat?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/configure.bat</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/djgpp/mkver.sed?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/mkver.sed</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/dln.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dln.c</a></td><td class='right'>1420</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.3%;'/><td class='rem' style='width: 4.5%;'/><td class='none' style='width: 94.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/dln.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dln.h</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/dmydln.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/dmyext.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dmyext.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='del'><a href='/ruby.git/diff/doc/ChangeLog-1.8.0?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/doc/NEWS-1.8.0?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/NEWS-1.8.0</a></td><td class='right'>837</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/doc/forwardable.rd?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/forwardable.rd</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/doc/forwardable.rd.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/forwardable.rd.ja</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/doc/irb/irb-tools.rd.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/irb/irb-tools.rd.ja</a></td><td class='right'>185</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/doc/irb/irb.rd?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/irb/irb.rd</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/doc/irb/irb.rd.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/irb/irb.rd.ja</a></td><td class='right'>413</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/doc/shell.rd?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/shell.rd</a></td><td class='right'>348</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/doc/shell.rd.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/shell.rd.ja</a></td><td class='right'>336</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='upd'><a href='/ruby.git/diff/enum.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>enum.c</a></td><td class='right'>1884</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 7.1%;'/><td class='none' style='width: 92.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/enumerator.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>enumerator.c</a></td><td class='right'>450</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='upd'><a href='/ruby.git/diff/env.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>env.h</a></td><td class='right'>60</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/error.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>error.c</a></td><td class='right'>1581</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 6.1%;'/><td class='none' style='width: 93.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/etc.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>etc.c</a></td><td class='right'>190</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.0%;'/><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/eval.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>eval.c</a></td><td class='right'>14070</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 4.8%;'/><td class='rem' style='width: 52.9%;'/><td class='none' style='width: 42.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/.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/.document?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/Setup?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup</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/Setup.atheos?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.atheos</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/Setup.dj?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.dj</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/Setup.emx?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.emx</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/Setup.nt?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.nt</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/Setup.x68?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.x68</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/Win32API/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/.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/Win32API/Win32API.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/Win32API.c</a></td><td class='right'>215</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/Win32API/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/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/Win32API/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/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='del'><a href='/ruby.git/diff/ext/Win32API/getch.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/getch.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/Win32API/lib/win32/registry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/lib/win32/registry.rb</a></td><td class='right'>831</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/Win32API/lib/win32/resolv.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/Win32API/point.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/point.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/bigdecimal/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/bigdecimal/bigdecimal.c</a></td><td class='right'>4700</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/bigdecimal/bigdecimal_en.html</a></td><td class='right'>796</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/bigdecimal/bigdecimal_ja.html</a></td><td class='right'>799</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/bigdecimal/extconf.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/bigdecimal/lib/bigdecimal/jacobian.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/curses/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/.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/curses/curses.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/curses.c</a></td><td class='right'>2101</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 8.6%;'/><td class='none' style='width: 91.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/curses/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/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/curses/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/extconf.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/curses/hello.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/hello.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/curses/mouse.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/mouse.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/curses/rain.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/rain.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/curses/view.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/view.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/curses/view2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/view2.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/dbm/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dbm/.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/dbm/dbm.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dbm/dbm.c</a></td><td class='right'>818</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/dbm/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dbm/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/dbm/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dbm/extconf.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/digest/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/.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/digest/bubblebabble/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/bubblebabble/.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/digest/bubblebabble/bubblebabble.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/bubblebabble/bubblebabble.c</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/digest/bubblebabble/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/bubblebabble/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='del'><a href='/ruby.git/diff/ext/digest/bubblebabble/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/bubblebabble/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='del'><a href='/ruby.git/diff/ext/digest/defs.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/defs.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/digest/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/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='del'><a href='/ruby.git/diff/ext/digest/digest.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/digest.c</a></td><td class='right'>642</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/digest/digest.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/digest.h</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/digest/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/extconf.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/digest/lib/digest.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/lib/digest.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/digest/lib/md5.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/lib/md5.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/digest/lib/sha1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/lib/sha1.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/digest/md5/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/.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/digest/md5/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/depend</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/digest/md5/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/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='del'><a href='/ruby.git/diff/ext/digest/md5/md5.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5.c</a></td><td class='right'>420</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/digest/md5/md5.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5.h</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/digest/md5/md5init.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5init.c</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/digest/md5/md5ossl.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5ossl.c</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/digest/md5/md5ossl.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5ossl.h</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/digest/rmd160/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/.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/digest/rmd160/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/depend</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/digest/rmd160/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/extconf.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/digest/rmd160/rmd160.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160.c</a></td><td class='right'>457</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/digest/rmd160/rmd160.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160.h</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/digest/rmd160/rmd160init.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160init.c</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/digest/rmd160/rmd160ossl.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160ossl.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='del'><a href='/ruby.git/diff/ext/digest/rmd160/rmd160ossl.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160ossl.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/digest/sha1/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/.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/digest/sha1/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/depend</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/digest/sha1/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/extconf.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/digest/sha1/sha1.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1.c</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/digest/sha1/sha1.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1.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.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/digest/sha1/sha1init.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1init.c</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/digest/sha1/sha1ossl.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1ossl.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='del'><a href='/ruby.git/diff/ext/digest/sha1/sha1ossl.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1ossl.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/digest/sha2/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/.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/digest/sha2/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/depend</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/digest/sha2/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/extconf.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/digest/sha2/lib/sha2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/lib/sha2.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/digest/sha2/sha2.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/sha2.c</a></td><td class='right'>919</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/digest/sha2/sha2.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/sha2.h</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/ext/digest/sha2/sha2init.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/sha2init.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/ext/digest/test.sh?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/test.sh</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/dl/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/.cvsignore</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/dl/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/depend</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/dl/dl.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/dl.c</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/ext/dl/dl.def?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/dl.def</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/dl/dl.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/dl.h</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/dl/doc/dl.txt?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/doc/dl.txt</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/ext/dl/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/extconf.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/ext/dl/h2rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/h2rb</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/dl/handle.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/handle.c</a></td><td class='right'>215</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/dl/install.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/install.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/dl/lib/dl/import.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/lib/dl/import.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/dl/lib/dl/struct.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/lib/dl/struct.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/dl/lib/dl/types.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/lib/dl/types.rb</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='del'><a href='/ruby.git/diff/ext/dl/lib/dl/win32.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/lib/dl/win32.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/dl/mkcall.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/mkcall.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/dl/mkcallback.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/mkcallback.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/dl/mkcbtable.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/mkcbtable.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/dl/ptr.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/ptr.c</a></td><td class='right'>1058</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/dl/sample/c++sample.C?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/c++sample.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='del'><a href='/ruby.git/diff/ext/dl/sample/c++sample.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/c++sample.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/dl/sample/drives.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/drives.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/dl/sample/getch.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/getch.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/dl/sample/libc.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/libc.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/dl/sample/msgbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/msgbox.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/dl/sample/msgbox2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/msgbox2.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/dl/sample/stream.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/stream.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/dl/sym.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sym.c</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='del'><a href='/ruby.git/diff/ext/dl/test/libtest.def?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/test/libtest.def</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/dl/test/test.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/test/test.c</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/ext/dl/test/test.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/test/test.rb</a></td><td class='right'>306</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/dl/type.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/type.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/etc/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/.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/etc/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/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/etc/etc.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/etc.c</a></td><td class='right'>561</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/etc/etc.txt?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/etc.txt</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/etc/etc.txt.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/etc.txt.ja</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/etc/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/extconf.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/extmk.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/extmk.rb</a></td><td class='right'>567</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/fcntl/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/fcntl/.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/fcntl/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/fcntl/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/fcntl/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/fcntl/fcntl.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/fcntl/fcntl.c</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/gdbm/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/.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/gdbm/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/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/ext/gdbm/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/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/gdbm/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/extconf.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/gdbm/gdbm.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/gdbm.c</a></td><td class='right'>1358</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.6%;'/><td class='none' style='width: 94.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/iconv/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/iconv/.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/iconv/charset_alias.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/iconv/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/iconv/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='del'><a href='/ruby.git/diff/ext/iconv/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/iconv/extconf.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/iconv/iconv.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/iconv/iconv.c</a></td><td class='right'>913</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/io/wait/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/nkf/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/.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/nkf/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/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/nkf/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/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/nkf/lib/kconv.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/lib/kconv.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/ext/nkf/nkf-utf8/config.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/nkf-utf8/nkf.c</a></td><td class='right'>6040</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 24.8%;'/><td class='none' style='width: 75.2%;'/></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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/nkf/nkf.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/nkf.c</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/openssl/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/extconf.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/openssl/lib/net/ftptls.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/net/ftptls.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/openssl/lib/net/telnets.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/net/telnets.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/ext/openssl/lib/openssl.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl.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/openssl/lib/openssl/bn.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl/cipher.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/openssl/lib/openssl/digest.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl/digest.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/openssl/lib/openssl/pkcs7.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl/pkcs7.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/openssl/lib/openssl/ssl.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl/ssl.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/ext/openssl/lib/openssl/x509.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/openssl_missing.c</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/ext/openssl/openssl_missing.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/openssl_missing.h</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/openssl/ossl.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl.c</a></td><td class='right'>496</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl.h</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/openssl/ossl_asn1.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_asn1.c</a></td><td class='right'>1170</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_bio.c</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/openssl/ossl_bio.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_bn.c</a></td><td class='right'>852</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='del'><a href='/ruby.git/diff/ext/openssl/ossl_bn.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_bn.h</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/openssl/ossl_cipher.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_cipher.c</a></td><td class='right'>567</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/openssl/ossl_cipher.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_cipher.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_config.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_digest.c</a></td><td class='right'>259</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_digest.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_digest.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_engine.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_hmac.c</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/openssl/ossl_hmac.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_ns_spki.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/openssl/ossl_ns_spki.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs12.c</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/openssl/ossl_pkcs12.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs12.h</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/openssl/ossl_pkcs5.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs5.c</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/openssl/ossl_pkcs5.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs7.c</a></td><td class='right'>1019</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/ext/openssl/ossl_pkcs7.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs7.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_pkey.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey.c</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/ext/openssl/ossl_pkey.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey.h</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/ext/openssl/ossl_pkey_dh.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey_dh.c</a></td><td class='right'>532</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_pkey_dsa.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey_dsa.c</a></td><td class='right'>484</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_pkey_ec.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey_ec.c</a></td><td class='right'>1582</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.5%;'/><td class='none' style='width: 93.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_rsa.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey_rsa.c</a></td><td class='right'>593</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/ext/openssl/ossl_rand.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_rand.c</a></td><td class='right'>202</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/openssl/ossl_rand.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_ssl.c</a></td><td class='right'>1476</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/openssl/ossl_ssl.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_ssl.h</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/openssl/ossl_ssl_session.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_ssl_session.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/openssl/ossl_version.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_x509attr.c</a></td><td class='right'>273</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_x509cert.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_x509cert.c</a></td><td class='right'>764</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/openssl/ossl_x509crl.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_x509name.c</a></td><td class='right'>372</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/openssl/ossl_x509req.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_x509store.c</a></td><td class='right'>624</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/openssl/ruby_missing.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ruby_missing.h</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/pty/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/.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/pty/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/README</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/pty/README.expect?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/README.expect</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/pty/README.expect.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/README.expect.ja</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/pty/README.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/README.ja</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/pty/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/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/pty/expect_sample.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/expect_sample.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/pty/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/extconf.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/pty/lib/expect.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/lib/expect.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/pty/pty.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/pty.c</a></td><td class='right'>485</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/pty/script.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/script.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/ext/pty/shl.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/shl.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/purelib.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/purelib.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/racc/cparse/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/racc/cparse/.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/racc/cparse/cparse.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/racc/cparse/cparse.c</a></td><td class='right'>828</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/racc/cparse/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/racc/cparse/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/racc/cparse/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/racc/cparse/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/readline/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/.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/readline/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/README</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/readline/README.ja?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/README.ja</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/readline/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/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/readline/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/extconf.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/readline/readline.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/readline.c</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/sdbm/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/.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/sdbm/_sdbm.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/_sdbm.c</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/sdbm/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/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='del'><a href='/ruby.git/diff/ext/sdbm/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/extconf.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/sdbm/init.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/init.c</a></td><td class='right'>788</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/sdbm/sdbm.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/sdbm.h</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/socket/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/.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/socket/addrinfo.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/addrinfo.h</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/ext/socket/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/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='del'><a href='/ruby.git/diff/ext/socket/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/extconf.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/ext/socket/getaddrinfo.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/getaddrinfo.c</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/ext/socket/getnameinfo.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/getnameinfo.c</a></td><td class='right'>265</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/socket/socket.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/socket.c</a></td><td class='right'>4721</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 19.4%;'/><td class='none' style='width: 80.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/socket/sockport.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/sockport.h</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/stringio/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/stringio/.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/stringio/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/stringio/README</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/stringio/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/stringio/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='del'><a href='/ruby.git/diff/ext/stringio/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/stringio/stringio.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/stringio/stringio.c</a></td><td class='right'>1371</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.6%;'/><td class='none' style='width: 94.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/strscan/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/strscan/.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/strscan/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/strscan/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/strscan/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/strscan/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/strscan/strscan.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/strscan/strscan.c</a></td><td class='right'>1320</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/syck/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/syslog/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/.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/syslog/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/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='del'><a href='/ruby.git/diff/ext/syslog/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/extconf.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/syslog/syslog.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/syslog.c</a></td><td class='right'>397</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/syslog/syslog.txt?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/syslog.txt</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/syslog/test.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/test.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/thread/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/thread/extconf.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/thread/lib/thread.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/thread/lib/thread.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/thread/thread.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/thread/thread.c</a></td><td class='right'>1182</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.9%;'/><td class='none' style='width: 95.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/.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/tk/ChangeLog.tkextlib?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/ChangeLog.tkextlib</a></td><td class='right'>924</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/MANUAL_tcltklib.eng?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/MANUAL_tcltklib.eng</a></td><td class='right'>469</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/MANUAL_tcltklib.eucj?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/MANUAL_tcltklib.eucj</a></td><td class='right'>579</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/ext/tk/README.1st?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/README.1st</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/README.ActiveTcl?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/README.tcltklib</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/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/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='del'><a href='/ruby.git/diff/ext/tk/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/extconf.rb</a></td><td class='right'>412</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/lib/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/README</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/multi-tk.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/multi-tk.rb</a></td><td class='right'>3377</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 13.9%;'/><td class='none' style='width: 86.1%;'/></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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/tk/lib/tcltk.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tcltk.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/ext/tk/lib/tk.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk.rb</a></td><td class='right'>5485</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 22.5%;'/><td class='none' style='width: 77.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/after.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/autoload.rb</a></td><td class='right'>414</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/lib/tk/bgerror.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/bindtag.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/ext/tk/lib/tk/button.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/button.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/tk/canvas.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/canvas.rb</a></td><td class='right'>789</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/tk/canvastag.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/canvastag.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/tk/checkbutton.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/checkbutton.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/tk/clipboard.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/composite.rb</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/tk/lib/tk/console.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/encodedstr.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/tk/entry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/entry.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/tk/event.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/event.rb</a></td><td class='right'>542</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/tk/font.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/font.rb</a></td><td class='right'>2344</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 9.6%;'/><td class='none' style='width: 90.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/frame.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/frame.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/grid.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/grid.rb</a></td><td class='right'>265</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/image.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/image.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/ext/tk/lib/tk/itemconfig.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/itemconfig.rb</a></td><td class='right'>1215</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.0%;'/><td class='none' style='width: 95.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/itemfont.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/itemfont.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/ext/tk/lib/tk/kinput.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/label.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/tk/labelframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/labelframe.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/listbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/listbox.rb</a></td><td class='right'>282</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/macpkg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/macpkg.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/tk/menu.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/menu.rb</a></td><td class='right'>681</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/tk/lib/tk/menubar.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/menuspec.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/ext/tk/lib/tk/message.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/message.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/tk/mngfocus.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/msgcat.rb</a></td><td class='right'>296</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/namespace.rb</a></td><td class='right'>551</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/lib/tk/optiondb.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/optiondb.rb</a></td><td class='right'>377</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/pack.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/tk/package.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/package.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/palette.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/panedwindow.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/ext/tk/lib/tk/place.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/radiobutton.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/root.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/root.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/tk/scale.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/scale.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/scrollable.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/scrollable.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/scrollbar.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/scrollbar.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/ext/tk/lib/tk/scrollbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/scrollbox.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/selection.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/spinbox.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/tk/tagfont.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/text.rb</a></td><td class='right'>1596</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.6%;'/><td class='none' style='width: 93.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/textimage.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/textimage.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/lib/tk/textmark.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/textmark.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/lib/tk/texttag.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/texttag.rb</a></td><td class='right'>318</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/textwindow.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/textwindow.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/tk/lib/tk/timer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/timer.rb</a></td><td class='right'>669</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/lib/tk/toplevel.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/toplevel.rb</a></td><td class='right'>262</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/ttk_selector.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/ttk_selector.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/lib/tk/txtwin_abst.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/validation.rb</a></td><td class='right'>397</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/variable.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/variable.rb</a></td><td class='right'>1765</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/virtevent.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/virtevent.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/winfo.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/winpkg.rb</a></td><td class='right'>153</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/wm.rb</a></td><td class='right'>552</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/lib/tk/xim.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/tk/lib/tkafter.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkafter.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/lib/tkbgerror.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkbgerror.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/lib/tkcanvas.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkcanvas.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/lib/tkclass.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkclass.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/lib/tkconsole.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/tk/lib/tkdialog.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkdialog.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/lib/tkentry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkentry.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/lib/tkextlib/ICONS.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/bitmap.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/blt/busy.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/component.rb</a></td><td class='right'>2145</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 8.8%;'/><td class='none' style='width: 91.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/container.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/dragdrop.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/ext/tk/lib/tkextlib/blt/eps.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/htext.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/tkextlib/blt/setup.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/table.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/ext/tk/lib/tkextlib/blt/tabnotebook.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/tabset.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/lib/tkextlib/blt/ted.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/ted.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/blt/tile.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/tree.rb</a></td><td class='right'>1058</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/tkextlib/blt/treeview.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/treeview.rb</a></td><td class='right'>1272</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/ext/tk/lib/tkextlib/blt/unix_dnd.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/unix_dnd.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/lib/tkextlib/blt/vector.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/vector.rb</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/tk/lib/tkextlib/blt/watch.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/watch.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/ext/tk/lib/tkextlib/blt/win_printer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/buttonbox.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/bwidget/combobox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/combobox.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/dialog.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/dialog.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/lib/tkextlib/bwidget/dragsite.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/dynamichelp.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/lib/tkextlib/bwidget/entry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/labelframe.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/tkextlib/bwidget/listbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/listbox.rb</a></td><td class='right'>358</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/tkextlib/bwidget/mainframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/mainframe.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/tkextlib/bwidget/messagedlg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/messagedlg.rb</a></td><td class='right'>192</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/bwidget/notebook.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/notebook.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/bwidget/pagesmanager.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/pagesmanager.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/bwidget/panedwindow.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/panedwindow.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/ext/tk/lib/tkextlib/bwidget/panelframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/panelframe.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/bwidget/passwddlg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/progressdlg.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/bwidget/scrollableframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/scrollableframe.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/bwidget/scrolledwindow.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/scrolledwindow.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/bwidget/scrollview.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/selectcolor.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/bwidget/selectfont.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/selectfont.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/tkextlib/bwidget/separator.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/statusbar.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/tkextlib/bwidget/titleframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/titleframe.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/bwidget/tree.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/tree.rb</a></td><td class='right'>453</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/lib/tkextlib/bwidget/widget.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/widget.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/itcl.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/itcl/incr_tcl.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/itcl/setup.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/itk/incr_tk.rb</a></td><td class='right'>446</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/buttonbox.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/lib/tkextlib/iwidgets/calendar.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/calendar.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/lib/tkextlib/iwidgets/canvasprintbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/checkbox.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/iwidgets/combobox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/dialogshell.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/lib/tkextlib/iwidgets/disjointlistbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/entryfield.rb</a></td><td class='right'>185</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/iwidgets/extbutton.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/hierarchy.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/ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/menubar.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/lib/tkextlib/iwidgets/messagebox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/messagebox.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/messagedialog.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/notebook.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/lib/tkextlib/iwidgets/optionmenu.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/panedwindow.rb</a></td><td class='right'>133</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/radiobox.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/lib/tkextlib/iwidgets/scopedobject.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb</a></td><td class='right'>353</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb</a></td><td class='right'>564</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/lib/tkextlib/iwidgets/scrolledwidget.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/spinner.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/spintime.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/tabnotebook.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/lib/tkextlib/iwidgets/tabset.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/tabset.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/lib/tkextlib/iwidgets/timeentry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/getstring.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/lib/tkextlib/tcllib/history.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/ico.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/tcllib/ip_entry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/plotchart.rb</a></td><td class='right'>886</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/swaplist.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/tcllib/tablelist.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/tablelist_core.rb</a></td><td class='right'>782</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/tkpiechart.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/ext/tk/lib/tkextlib/tcllib/tooltip.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile.rb</a></td><td class='right'>419</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/lib/tkextlib/tile/dialog.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/dialog.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/lib/tkextlib/tile/setup.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/sizegrip.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/sizegrip.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/tkextlib/tile/style.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/style.rb</a></td><td class='right'>316</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/tile/tbutton.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tbutton.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/tile/tcheckbutton.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tcheckbutton.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/tile/tcombobox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tcombobox.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/tile/tentry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tentry.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/tile/tframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tframe.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/tile/tlabel.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tlabel.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/tile/tlabelframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tlabelframe.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/tile/tmenubutton.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tmenubutton.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/tile/tnotebook.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tnotebook.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/tkextlib/tile/tpaned.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tpaned.rb</a></td><td class='right'>231</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/tprogressbar.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tprogressbar.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/tile/tradiobutton.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tradiobutton.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/tile/treeview.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/treeview.rb</a></td><td class='right'>1238</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/tk/lib/tkextlib/tile/tscale.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tscale.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/tscrollbar.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tscrollbar.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/tile/tseparator.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tseparator.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/tile/tsquare.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tkDND/shape.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/lib/tkextlib/tkDND/tkdnd.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tkDND/tkdnd.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/lib/tkextlib/tkHTML.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb</a></td><td class='right'>453</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/lib/tkextlib/tkHTML/setup.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tktable/tktable.rb</a></td><td class='right'>957</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/lib/tkextlib/tktrans.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/treectrl/tktreectrl.rb</a></td><td class='right'>2461</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 10.1%;'/><td class='none' style='width: 89.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.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/version.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/version.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/tkextlib/vu.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/vu/pie.rb</a></td><td class='right'>282</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/vu/setup.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/winico/winico.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/lib/tkfont.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkfont.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/lib/tkmacpkg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/tk/lib/tkmenubar.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkmenubar.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/lib/tkmngfocus.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkmngfocus.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/lib/tkpalette.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkpalette.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/lib/tkscrollbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkscrollbox.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/lib/tktext.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tktext.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/lib/tkvirtevent.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkvirtevent.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/lib/tkwinpkg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/old-README.tcltklib.eucj?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/old-README.tcltklib.eucj</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/24hr_clock.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/binstr_usage.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/btn_with_frame.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/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-en/aniwave.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/aniwave.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/demos-en/arrow.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/arrow.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/ext/tk/sample/demos-en/bind.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/bind.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/demos-en/bitmap.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/bitmap.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-en/browse1?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/check.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/sample/demos-en/check2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/check2.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/ext/tk/sample/demos-en/clrpick.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/clrpick.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/demos-en/colors.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/colors.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/demos-en/combo.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/combo.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-en/cscroll.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/cscroll.rb</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/ctext.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ctext.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/sample/demos-en/dialog1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/entry1.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-en/entry2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/entry2.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/entry3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/entry3.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/sample/demos-en/filebox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/filebox.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-en/floor.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/floor.rb</a></td><td class='right'>1723</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/floor2.rb</a></td><td class='right'>1722</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/form.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/demos-en/goldberg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/goldberg.rb</a></td><td class='right'>2006</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/hscale.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-en/icon.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/icon.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/image1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/image1.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-en/image2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/image2.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/image3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/image3.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-en/items.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/items.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-en/ixset?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/knightstour.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/knightstour.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/ext/tk/sample/demos-en/label.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/label.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/sample/demos-en/labelframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/labelframe.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/sample/demos-en/mclist.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/mclist.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-en/menu.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/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-en/menu84.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/menu84.rb</a></td><td class='right'>215</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/menubu.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/demos-en/msgbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/msgbox.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/demos-en/msgbox2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/msgbox2.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/paned1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/paned1.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/demos-en/paned2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/paned2.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/sample/demos-en/pendulum.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/pendulum.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/ext/tk/sample/demos-en/plot.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/plot.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/demos-en/puzzle.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/puzzle.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/radio.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/radio.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-en/radio2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/radio2.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/ext/tk/sample/demos-en/radio3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/radio3.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-en/rmt?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/ruler.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ruler.rb</a></td><td class='right'>205</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/sayings.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/search.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/search.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/sample/demos-en/spin.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/spin.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-en/square?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/states.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/sample/demos-en/style.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/style.rb</a></td><td class='right'>231</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/text.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/textpeer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/textpeer.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/demos-en/timer?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/toolbar.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/toolbar.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/demos-en/tree.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/tree.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-en/ttkbut.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttkbut.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/sample/demos-en/ttkmenu.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttkmenu.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/sample/demos-en/ttknote.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttknote.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/demos-en/ttkpane.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttkpane.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/ttkprogress.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttkprogress.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/sample/demos-en/twind.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/twind.rb</a></td><td class='right'>291</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/twind2.rb</a></td><td class='right'>384</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/unicodeout.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/vscale.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/vscale.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/sample/demos-en/widget?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/widget</a></td><td class='right'>1084</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/ext/tk/sample/demos-jp/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/anilabel.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/ext/tk/sample/demos-jp/aniwave.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/aniwave.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-jp/arrow.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/arrow.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/ext/tk/sample/demos-jp/bind.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/bitmap.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-jp/browse1?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/button.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/demos-jp/check.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/check2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/check2.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/sample/demos-jp/clrpick.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/clrpick.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-jp/colors.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/colors.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/ext/tk/sample/demos-jp/combo.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/combo.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/cscroll.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/ctext.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ctext.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/dialog1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/dialog1.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/demos-jp/dialog2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/dialog2.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/sample/demos-jp/doc.org/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/entry1.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-jp/entry2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/entry3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/entry3.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/demos-jp/filebox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/filebox.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/floor.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/floor2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/floor2.rb</a></td><td class='right'>1719</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/form.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/form.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/sample/demos-jp/goldberg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/goldberg.rb</a></td><td class='right'>2011</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 8.3%;'/><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/ext/tk/sample/demos-jp/hello?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/hello</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/demos-jp/hscale.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/hscale.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/icon.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/icon.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/demos-jp/image1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/image1.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/demos-jp/image2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/image2.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-jp/image3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/image3.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/demos-jp/items.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/items.rb</a></td><td class='right'>379</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/ixset?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ixset2</a></td><td class='right'>369</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/knightstour.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/knightstour.rb</a></td><td class='right'>273</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/label.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/labelframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/labelframe.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/mclist.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/mclist.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/ext/tk/sample/demos-jp/menu.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/menu.rb</a></td><td class='right'>201</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/menu8x.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/menu8x.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/ext/tk/sample/demos-jp/menubu.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/menubu.rb</a></td><td class='right'>238</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/msgbox.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/demos-jp/msgbox2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/msgbox2.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/demos-jp/paned1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/paned1.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/sample/demos-jp/paned2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/paned2.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/pendulum.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/pendulum.rb</a></td><td class='right'>242</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/plot.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/plot.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-jp/puzzle.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/puzzle.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/radio.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/radio2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/radio2.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-jp/radio3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/radio3.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/rmt?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/rolodex-j</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/sample/demos-jp/ruler.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/sayings.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/sayings.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/demos-jp/search.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/search.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/sample/demos-jp/spin.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/spin.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/square?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/states.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-jp/style.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/style.rb</a></td><td class='right'>270</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/tcolor?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/tcolor</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/ext/tk/sample/demos-jp/text.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/text.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-jp/textpeer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/textpeer.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/demos-jp/timer?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/toolbar.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/toolbar.rb</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/tree.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/tree.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-jp/ttkbut.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttkbut.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/ext/tk/sample/demos-jp/ttkmenu.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttkmenu.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-jp/ttknote.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttknote.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-jp/ttkpane.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttkpane.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/ext/tk/sample/demos-jp/ttkprogress.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttkprogress.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/twind.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/twind.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/sample/demos-jp/twind2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/twind2.rb</a></td><td class='right'>384</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/unicodeout.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/vscale.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/vscale.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/sample/demos-jp/widget?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/widget</a></td><td class='right'>1125</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.6%;'/><td class='none' style='width: 95.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/editable_listbox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/editable_listbox.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/encstr_usage.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/encstr_usage.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/figmemo_sample.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/figmemo_sample.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/ext/tk/sample/images/earth.gif?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/teapot.ppm</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/sample/irbtk.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/irbtkw.rbw?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/irbtkw.rbw</a></td><td class='right'>146</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/iso2022-kr.txt?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/batsu.gif?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/batsu.gif</a></td><td class='right'>bin</td><td class='graph'>538 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tcltklib/lines0.tcl?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/lines0.tcl</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/tcltklib/lines1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/lines1.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/sample/tcltklib/lines2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/lines2.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/lines3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/maru.gif?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/maru.gif</a></td><td class='right'>bin</td><td class='graph'>481 -> 0 bytes<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/sample/tcltklib/safeTk.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/sample0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/sample0.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/tcltklib/sample1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/sample1.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/sample/tcltklib/sample2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/tk/sample/tkbiff.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkbiff.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/ext/tk/sample/tkbrowse.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkbrowse.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/sample/tkcombobox.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/tk/sample/tkdialog.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkdialog.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/sample/tkextlib/ICONS/Orig_LICENSE.txt?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/demo.rb</a></td><td class='right'>983</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc.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/ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/demo.rb</a></td><td class='right'>1311</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/canvSticker2.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/vu/dial_demo.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/tk/sample/tkfrom.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkfrom.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/sample/tkhello.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkhello.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/tkline.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkline.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/tkmenubutton.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkrttimer.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/tksleep_sample.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tksleep_sample.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/tktextframe.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktextio.rb</a></td><td class='right'>1060</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='del'><a href='/ruby.git/diff/ext/tk/sample/tktimer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktimer.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/sample/tktimer2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/sample/ttk_wrapper.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/ttk_wrapper.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/tk/stubs.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/stubs.c</a></td><td class='right'>564</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/stubs.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tcltklib.c</a></td><td class='right'>10258</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 42.1%;'/><td class='none' style='width: 57.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/tk/tkutil/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tkutil/.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/tk/tkutil/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tkutil/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.1%;'/><td class='none' 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/tkutil/tkutil.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tkutil/tkutil.c</a></td><td class='right'>1799</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.4%;'/><td class='none' style='width: 92.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/win32ole/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/.cvsignore</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/win32ole/depend?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/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/win32ole/doc/win32ole.rd?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/doc/win32ole.rd</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/win32ole/extconf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/extconf.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/win32ole/lib/win32ole/property.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/lib/win32ole/property.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/win32ole/sample/excel1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/excel1.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/win32ole/sample/excel2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/excel2.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/win32ole/sample/excel3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/excel3.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/win32ole/sample/ie.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/ie.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/win32ole/sample/ieconst.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/ieconst.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/win32ole/sample/ienavi.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/ienavi.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/win32ole/sample/oledirs.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/oledirs.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/win32ole/sample/olegen.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/olegen.rb</a></td><td class='right'>348</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/win32ole/sample/xml.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/xml.rb</a></td><td class='right'>7306</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 30.0%;'/><td class='none' style='width: 70.0%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/win32ole/tests/oleserver.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/oleserver.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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/win32ole/tests/testOLEMETHOD.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testOLEMETHOD.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/win32ole/tests/testOLEPARAM.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testOLEPARAM.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/win32ole/tests/testOLETYPE.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testOLETYPE.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/win32ole/tests/testOLEVARIABLE.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testOLEVARIABLE.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/win32ole/tests/testVARIANT.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testVARIANT.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/win32ole/tests/testWIN32OLE.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testWIN32OLE.rb</a></td><td class='right'>373</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/win32ole/tests/test_ole_methods.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_win32ole_event.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/test_win32ole_event.rb</a></td><td class='right'>133</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/win32ole/tests/test_word.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/ext/win32ole/tests/testall.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testall.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/win32ole/win32ole.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/win32ole.c</a></td><td class='right'>6452</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 26.5%;'/><td class='none' style='width: 73.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ext/zlib/.cvsignore?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/zlib/zlib.c</a></td><td class='right'>3554</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>file.c</a></td><td class='right'>4760</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.2%;'/><td class='rem' style='width: 17.3%;'/><td class='none' style='width: 80.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/gc.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>gc.c</a></td><td class='right'>2195</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 7.6%;'/><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/hash.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>hash.c</a></td><td class='right'>2755</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 11.3%;'/><td class='none' style='width: 88.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/ia64.s?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ia64.s</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='add'><a href='/ruby.git/diff/ident.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ident.h</a></td><td class='right'>25</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/inits.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>inits.c</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='del'><a href='/ruby.git/diff/install-sh?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>install-sh</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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/instruby.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>instruby.rb</a></td><td class='right'>411</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/intern.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>intern.h</a></td><td class='right'>530</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/io.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>io.c</a></td><td class='right'>6121</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.6%;'/><td class='rem' style='width: 22.5%;'/><td class='none' style='width: 74.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/io.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>io.h</a></td><td class='right'>47</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/keywords?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>keywords</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/lex.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lex.c</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/lib/.document?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/.document</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/lib/English.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/English.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/Env.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/Env.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/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/README</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/abbrev.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/base64.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/base64.rb</a></td><td class='right'>133</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/benchmark.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/benchmark.rb</a></td><td class='right'>572</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/cgi-lib.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/cgi-lib.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/lib/cgi.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/cgi.rb</a></td><td class='right'>2308</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/lib/cgi/.document?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/cgi/session.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/cgi/session.rb</a></td><td class='right'>498</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/cgi/session/pstore.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/complex.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/complex.rb</a></td><td class='right'>663</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/lib/csv.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/date.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/date.rb</a></td><td class='right'>1767</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.3%;'/><td class='none' style='width: 92.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/date/format.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/date/format.rb</a></td><td class='right'>1190</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.9%;'/><td class='none' style='width: 95.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/date2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/date2.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/lib/debug.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/debug.rb</a></td><td class='right'>947</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/delegate.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/delegate.rb</a></td><td class='right'>337</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/drb.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/acl.rb</a></td><td class='right'>146</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/drb.rb</a></td><td class='right'>1782</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.3%;'/><td class='none' style='width: 92.7%;'/></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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/extservm.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/lib/drb/gw.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/e2mmap.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/e2mmap.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/lib/erb.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/erb.rb</a></td><td class='right'>883</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/lib/eregex.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/eregex.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/fileutils.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/fileutils.rb</a></td><td class='right'>1591</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.5%;'/><td class='none' style='width: 93.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/finalize.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/finalize.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/find.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/find.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/forwardable.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/forwardable.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/lib/ftools.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/ftools.rb</a></td><td class='right'>261</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/generator.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/generator.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/getoptlong.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/getoptlong.rb</a></td><td class='right'>621</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/lib/getopts.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/getopts.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/gserver.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/importenv.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/importenv.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/ipaddr.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/ipaddr.rb</a></td><td class='right'>814</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/irb.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb.rb</a></td><td class='right'>346</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/irb/cmd/chws.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/chws.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/irb/cmd/fork.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/fork.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/irb/cmd/help.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/irb/cmd/load.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/load.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/irb/cmd/nop.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/nop.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/irb/cmd/pushws.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/pushws.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/irb/cmd/subirb.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/subirb.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/irb/completion.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/completion.rb</a></td><td class='right'>205</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/irb/context.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/context.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/irb/ext/change-ws.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/change-ws.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/irb/ext/history.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/history.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/lib/irb/ext/loader.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/loader.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/lib/irb/ext/math-mode.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/math-mode.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/irb/ext/multi-irb.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/multi-irb.rb</a></td><td class='right'>241</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/irb/ext/save-history.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/irb/ext/tracer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/tracer.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/irb/ext/use-loader.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/use-loader.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/irb/ext/workspaces.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/workspaces.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/irb/extend-command.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/extend-command.rb</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/lib/irb/frame.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/frame.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/irb/help.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/help.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/irb/init.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/init.rb</a></td><td class='right'>259</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/irb/input-method.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/input-method.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/lib/irb/lc/error.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/lc/error.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/irb/lc/help-message?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/lc/help-message</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/irb/lc/ja/error.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/lc/ja/error.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/irb/lc/ja/help-message?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/lc/ja/help-message</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/irb/locale.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/locale.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/lib/irb/notifier.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/irb/ruby-lex.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ruby-lex.rb</a></td><td class='right'>1149</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/lib/irb/ruby-token.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ruby-token.rb</a></td><td class='right'>273</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/irb/slex.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/slex.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/lib/irb/version.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/version.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/irb/workspace.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/workspace.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/irb/ws-for-case-2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ws-for-case-2.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/irb/xmp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/xmp.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/jcode.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/jcode.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/lib/logger.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/mailread.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/mailread.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/mathn.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/mathn.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/lib/matrix.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/matrix.rb</a></td><td class='right'>1278</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/mkmf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/mkmf.rb</a></td><td class='right'>1811</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.4%;'/><td class='none' style='width: 92.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/monitor.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/monitor.rb</a></td><td class='right'>352</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/mutex_m.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/mutex_m.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/net/ftp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/ftp.rb</a></td><td class='right'>924</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/lib/net/http.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/http.rb</a></td><td class='right'>2277</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 9.4%;'/><td class='none' style='width: 90.6%;'/></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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/net/imap.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/imap.rb</a></td><td class='right'>3371</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 13.8%;'/><td class='none' style='width: 86.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/net/pop.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/pop.rb</a></td><td class='right'>999</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/lib/net/protocol.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/protocol.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/lib/net/smtp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/smtp.rb</a></td><td class='right'>1014</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/net/telnet.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/telnet.rb</a></td><td class='right'>756</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/observer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/observer.rb</a></td><td class='right'>192</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/open-uri.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/open-uri.rb</a></td><td class='right'>678</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/open3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/open3.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/optparse.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse.rb</a></td><td class='right'>1790</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 7.4%;'/><td class='none' style='width: 92.6%;'/></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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/optparse/shellwords.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse/shellwords.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/lib/optparse/time.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse/time.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/optparse/uri.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse/uri.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/lib/optparse/version.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/ostruct.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/ostruct.rb</a></td><td class='right'>146</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/parsearg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/parsearg.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/parsedate.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/parsedate.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/lib/pathname.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/ping.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/ping.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/pp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/pp.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/lib/prettyprint.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/prettyprint.rb</a></td><td class='right'>896</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/lib/profile.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/profile.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/lib/profiler.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/profiler.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/pstore.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/pstore.rb</a></td><td class='right'>395</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/racc/parser.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/racc/parser.rb</a></td><td class='right'>442</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/rational.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rational.rb</a></td><td class='right'>564</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/rdoc/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/options.rb</a></td><td class='right'>586</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/parsers/parse_c.rb</a></td><td class='right'>773</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/rdoc/parsers/parse_f95.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/parsers/parse_rb.rb</a></td><td class='right'>2609</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/rdoc.rb</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/lib/rdoc/ri/ri_cache.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_formatter.rb</a></td><td class='right'>672</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_options.rb</a></td><td class='right'>319</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_paths.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/rdoc/ri/ri_reader.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/readbytes.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/readbytes.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/resolv-replace.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/resolv-replace.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/resolv.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/resolv.rb</a></td><td class='right'>2210</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/lib/rexml/attlistdecl.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/attribute.rb</a></td><td class='right'>185</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/cdata.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/cdata.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/rexml/child.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/comment.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/rexml/doctype.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/doctype.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/rexml/document.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/document.rb</a></td><td class='right'>208</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/rexml/dtd/attlistdecl.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/element.rb</a></td><td class='right'>1227</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 5.0%;'/><td class='none' style='width: 95.0%;'/></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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encoding.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/rexml/encodings/CP-1252.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/CP-1252.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/lib/rexml/encodings/EUC-JP.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/ISO-8859-15.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/encodings/SHIFT-JIS.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/UTF-16.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/UTF-8.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/entity.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/rexml/formatters/default.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/formatters/default.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/lib/rexml/formatters/pretty.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/formatters/pretty.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'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/rexml/formatters/transitive.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/formatters/transitive.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/functions.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/functions.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/lib/rexml/instruction.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/instruction.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/rexml/light/node.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/node.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/rexml/output.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/baseparser.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/rexml/parsers/lightparser.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/sax2parser.rb</a></td><td class='right'>238</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/treeparser.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/parsers/ultralightparser.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/xpathparser.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/lib/rexml/quickpath.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/rexml.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/rexml/sax2listener.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/source.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/rexml/streamlistener.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/text.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/lib/rexml/undefinednamespaceexception.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/undefinednamespaceexception.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/lib/rexml/validation/relaxng.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/xmldecl.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/rexml/xmltokens.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/xpath_parser.rb</a></td><td class='right'>792</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/rinda/rinda.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rinda/tuplespace.rb</a></td><td class='right'>642</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/lib/rss.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss.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/rss/0.9.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/0.9.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/lib/rss/1.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/1.0.rb</a></td><td class='right'>452</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/atom.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/atom.rb</a></td><td class='right'>749</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/rss/content.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/content.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/lib/rss/content/1.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/content/1.0.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/rss/content/2.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/content/2.0.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/rss/converter.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/converter.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/rss/dublincore.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/dublincore.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/rss/dublincore/1.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/dublincore/1.0.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/rss/dublincore/2.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/dublincore/2.0.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/rss/dublincore/atom.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/dublincore/atom.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/rss/image.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/itunes.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/itunes.rb</a></td><td class='right'>410</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/maker.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker.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/rss/maker/0.9.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/0.9.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/lib/rss/maker/1.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/1.0.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/lib/rss/maker/2.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/2.0.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/lib/rss/maker/atom.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/atom.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/lib/rss/maker/base.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/base.rb</a></td><td class='right'>868</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/lib/rss/maker/content.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/content.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/lib/rss/maker/dublincore.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/dublincore.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/lib/rss/maker/entry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/entry.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/rss/maker/feed.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/feed.rb</a></td><td class='right'>429</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/rss/maker/image.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/image.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/maker/itunes.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/itunes.rb</a></td><td class='right'>242</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/rss/maker/slash.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/slash.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/rss/maker/syndication.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/syndication.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/rss/maker/taxonomy.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/taxonomy.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/lib/rss/maker/trackback.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/trackback.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/rss/parser.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/parser.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/rss/rexmlparser.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/rss.rb</a></td><td class='right'>1312</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/lib/rss/slash.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/slash.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/rss/syndication.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/syndication.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/rss/taxonomy.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/utils.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/xml-stylesheet.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/xml-stylesheet.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/lib/rss/xml.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/xml.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/rss/xmlparser.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/rubyunit.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rubyunit.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/lib/runit/assert.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/runit/assert.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/runit/cui/testrunner.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/runit/cui/testrunner.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/runit/error.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/runit/error.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/runit/testcase.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/runit/testcase.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/runit/testresult.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/runit/testresult.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/runit/testsuite.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/runit/testsuite.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/lib/runit/topublic.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/runit/topublic.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/lib/scanf.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/securerandom.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/securerandom.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'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/set.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/set.rb</a></td><td class='right'>1259</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/shell.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shell.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/lib/shell/builtin-command.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shell/builtin-command.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/shell/command-processor.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shell/command-processor.rb</a></td><td class='right'>592</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/shell/error.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shell/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/lib/shell/filter.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shell/filter.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/lib/shell/process-controller.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shell/process-controller.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/shell/system-command.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shell/system-command.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/shell/version.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shell/version.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/shellwords.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/shellwords.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/lib/singleton.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/singleton.rb</a></td><td class='right'>359</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/attachment.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/sync.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/sync.rb</a></td><td class='right'>311</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/tempfile.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/tempfile.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/lib/test/unit.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit.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/test/unit/assertionfailederror.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/assertionfailederror.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/test/unit/assertions.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/assertions.rb</a></td><td class='right'>622</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/lib/test/unit/autorunner.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/autorunner.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/lib/test/unit/collector.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/collector/dir.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/test/unit/collector/objectspace.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/test/unit/error.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/error.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/test/unit/failure.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/failure.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/test/unit/testcase.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/testcase.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/lib/test/unit/testresult.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/testresult.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/test/unit/testsuite.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/testsuite.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/test/unit/ui/console/testrunner.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/ui/console/testrunner.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/test/unit/ui/fox/testrunner.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/ui/fox/testrunner.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/test/unit/ui/gtk/testrunner.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/ui/gtk/testrunner.rb</a></td><td class='right'>416</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/test/unit/ui/gtk2/testrunner.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/test/unit/ui/testrunnermediator.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/ui/testrunnermediator.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/lib/test/unit/ui/testrunnerutilities.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/ui/testrunnerutilities.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/test/unit/ui/tk/testrunner.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/test/unit/util/observable.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/util/observable.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/lib/test/unit/util/procwrapper.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/test/unit/util/procwrapper.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/lib/thread.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/thread.rb</a></td><td class='right'>479</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/thwait.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/thwait.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/time.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/time.rb</a></td><td class='right'>799</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/timeout.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/timeout.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/tmpdir.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/tmpdir.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'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/tracer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/tracer.rb</a></td><td class='right'>167</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/tsort.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/tsort.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/un.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/lib/uri.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/uri.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/uri/common.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/uri/common.rb</a></td><td class='right'>611</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/uri/ftp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/uri/ftp.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/lib/uri/generic.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/uri/generic.rb</a></td><td class='right'>1122</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.6%;'/><td class='none' style='width: 95.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/lib/uri/http.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/uri/http.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/uri/https.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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.0%;'/><td class='rem' style='width: 0.1%;'/><td class='none' 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/uri/ldap.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/uri/ldap.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/uri/ldaps.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/uri/ldaps.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/uri/mailto.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/uri/mailto.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/weakref.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/weakref.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.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/webrick/cookie.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/lib/webrick/htmlutils.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/webrick/httpservlet/cgi_runner.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/webrick/httpservlet/cgihandler.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/webrick/httpservlet/cgihandler.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/webrick/httpservlet/erbhandler.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/webrick/httpservlet/filehandler.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/webrick/httpservlet/prochandler.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/xmlrpc/client.rb</a></td><td class='right'>624</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/lib/xmlrpc/config.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/yaml.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/lib/yaml/baseemitter.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/yaml/store.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/yaml/stream.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/yaml/types.rb</a></td><td class='right'>192</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/main.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>main.c</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/marshal.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>marshal.c</a></td><td class='right'>1537</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 6.3%;'/><td class='none' style='width: 93.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/math.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>math.c</a></td><td class='right'>525</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 1.9%;'/><td class='none' style='width: 97.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/mdoc2man.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>mdoc2man.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='add'><a href='/ruby.git/diff/methods.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>methods.c</a></td><td class='right'>152</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='add'><a href='/ruby.git/diff/methods.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>methods.h</a></td><td class='right'>22</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/misc/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>misc/README</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/misc/inf-ruby.el?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>misc/inf-ruby.el</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/misc/ruby-electric.el?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/misc/ruby-mode.el?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>misc/ruby-mode.el</a></td><td class='right'>1202</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.9%;'/><td class='none' style='width: 95.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/misc/ruby-style.el?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>misc/ruby-style.el</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/misc/rubydb2x.el?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>misc/rubydb2x.el</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/misc/rubydb3x.el?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>misc/rubydb3x.el</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='add'><a href='/ruby.git/diff/missing.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing.c</a></td><td class='right'>67</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/missing.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing.h</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='add'><a href='/ruby.git/diff/missing/CVS/Entries?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/CVS/Entries</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='add'><a href='/ruby.git/diff/missing/CVS/Repository?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/CVS/Repository</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/missing/acosh.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/acosh.c</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/missing/alloca.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/alloca.c</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/missing/crypt.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/crypt.c</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='del'><a href='/ruby.git/diff/missing/dup2.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/dup2.c</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/missing/erf.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/missing/file.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/file.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/missing/fileblocks.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/fileblocks.c</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/missing/finite.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/finite.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='del'><a href='/ruby.git/diff/missing/flock.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/flock.c</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='add'><a href='/ruby.git/diff/missing/getopt.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/getopt.c</a></td><td class='right'>662</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='add'><a href='/ruby.git/diff/missing/getopt.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/getopt.h</a></td><td class='right'>128</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='add'><a href='/ruby.git/diff/missing/getopt1.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/getopt1.c</a></td><td class='right'>162</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.7%;'/><td class='rem' style='width: 0.0%;'/><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/missing/hypot.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/hypot.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.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/missing/isinf.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/isinf.c</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/missing/isnan.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/isnan.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.1%;'/><td class='none' style='width: 99.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/missing/memcmp.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/memcmp.c</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='upd'><a href='/ruby.git/diff/missing/memmove.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/memmove.c</a></td><td class='right'>38</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='add'><a href='/ruby.git/diff/missing/mkdir.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/mkdir.c</a></td><td class='right'>103</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='del'><a href='/ruby.git/diff/missing/os2.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/os2.c</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/missing/strcasecmp.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/strcasecmp.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='del'><a href='/ruby.git/diff/missing/strchr.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/strchr.c</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/missing/strerror.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/strerror.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/missing/strftime.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/strftime.c</a></td><td class='right'>1128</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.1%;'/><td class='rem' style='width: 2.6%;'/><td class='none' style='width: 95.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/missing/strncasecmp.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/strncasecmp.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/missing/strstr.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/strstr.c</a></td><td class='right'>83</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.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/missing/strtod.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/strtod.c</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='upd'><a href='/ruby.git/diff/missing/strtol.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/strtol.c</a></td><td class='right'>89</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='del'><a href='/ruby.git/diff/missing/vsnprintf.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/vsnprintf.c</a></td><td class='right'>1135</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/missing/x68.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>missing/x68.c</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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/mkconfig.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>mkconfig.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'>-rwxr-xr-x</td><td class='add'><a href='/ruby.git/diff/newver.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>newver.rb</a></td><td class='right'>14</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/node.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>node.h</a></td><td class='right'>465</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.4%;'/><td class='rem' style='width: 1.5%;'/><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/numeric.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>numeric.c</a></td><td class='right'>3228</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.0%;'/><td class='rem' style='width: 11.2%;'/><td class='none' style='width: 86.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/object.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>object.c</a></td><td class='right'>2981</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.1%;'/><td class='rem' style='width: 11.1%;'/><td class='none' style='width: 87.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/pack.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>pack.c</a></td><td class='right'>1960</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.4%;'/><td class='rem' style='width: 6.6%;'/><td class='none' style='width: 91.9%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/parse.y?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>parse.y</a></td><td class='right'>7165</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 7.2%;'/><td class='rem' style='width: 22.2%;'/><td class='none' style='width: 70.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/prec.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>prec.c</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='upd'><a href='/ruby.git/diff/process.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>process.c</a></td><td class='right'>4003</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.3%;'/><td class='rem' style='width: 14.2%;'/><td class='none' style='width: 83.6%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/random.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>random.c</a></td><td class='right'>508</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.2%;'/><td class='rem' style='width: 1.9%;'/><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/range.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>range.c</a></td><td class='right'>715</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.3%;'/><td class='rem' style='width: 2.6%;'/><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.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>re.c</a></td><td class='right'>2408</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 8.9%;'/><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/re.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>re.h</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.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/regex.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>regex.c</a></td><td class='right'>6256</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 9.9%;'/><td class='rem' style='width: 15.8%;'/><td class='none' style='width: 74.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/regex.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>regex.h</a></td><td class='right'>319</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.8%;'/><td class='rem' style='width: 0.5%;'/><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/ruby.1?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ruby.1</a></td><td class='right'>559</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 1.4%;'/><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/ruby.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ruby.c</a></td><td class='right'>1376</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 4.6%;'/><td class='none' style='width: 94.3%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/ruby.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ruby.h</a></td><td class='right'>794</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 2.7%;'/><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/rubyio.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>rubyio.h</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/rubysig.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>rubysig.h</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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/rubytest.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>rubytest.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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/runruby.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>runruby.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='add'><a href='/ruby.git/diff/sample/Artistic?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/Artistic</a></td><td class='right'>117</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='del'><a href='/ruby.git/diff/sample/README?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/README</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='add'><a href='/ruby.git/diff/sample/aset.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/aset.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/sample/attr.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/attr.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/sample/biorhythm.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/biorhythm.rb</a></td><td class='right'>255</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><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='del'><a href='/ruby.git/diff/sample/cal.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/cal.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='add'><a href='/ruby.git/diff/sample/caller.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/caller.rb</a></td><td class='right'>15</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/sample/case.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/case.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='add'><a href='/ruby.git/diff/sample/cat.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/cat.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/sample/cbreak.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/cbreak.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/sample/clnt.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/clnt.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='add'><a href='/ruby.git/diff/sample/clone.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/clone.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='add'><a href='/ruby.git/diff/sample/const.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/const.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='add'><a href='/ruby.git/diff/sample/dbm.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/dbm.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/dbmtest.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/dbmtest.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/sample/dir.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/dir.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/sample/drb/README.rd?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/sample/dualstack-fetch.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/dualstack-fetch.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/dualstack-httpd.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/dualstack-httpd.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/sample/erb/erb4html.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/erb/erb4html.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/eval.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/eval.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='add'><a href='/ruby.git/diff/sample/evaldef.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/evaldef.rb</a></td><td class='right'>21</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/sample/export.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/export.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/sample/exyacc.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/exyacc.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/fact.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/fact.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/sample/fib.pl?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/fib.pl</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.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/sample/fib.py?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/fib.py</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/sample/fib.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/fib.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/sample/fib.scm?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/fib.scm</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/freq.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/freq.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.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/sample/from.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/from.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='add'><a href='/ruby.git/diff/sample/fullpath.pl?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/fullpath.pl</a></td><td class='right'>22</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/sample/fullpath.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/fullpath.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.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/sample/gctest.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/gctest.rb</a></td><td class='right'>66</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='add'><a href='/ruby.git/diff/sample/getopts.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/getopts.rb</a></td><td class='right'>111</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'>-rwxr-xr-x<span class='modechange'>[-rw-r--r--]</span></td><td class='upd'><a href='/ruby.git/diff/sample/getopts.test?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/getopts.test</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='add'><a href='/ruby.git/diff/sample/hash.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/hash.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='add'><a href='/ruby.git/diff/sample/io.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/io.rb</a></td><td class='right'>40</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'>-rwxr-xr-x<span class='modechange'>[-rw-r--r--]</span></td><td class='upd'><a href='/ruby.git/diff/sample/less.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/less.rb</a></td><td class='right'>19</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/sample/list.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/list.rb</a></td><td class='right'>61</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/sample/list2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/list2.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/list3.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/list3.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/logger/app.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='add'><a href='/ruby.git/diff/sample/math.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/math.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/sample/mine.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/mine.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/sample/mkproto.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/mkproto.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'>-rwxr-xr-x<span class='modechange'>[-rw-r--r--]</span></td><td class='upd'><a href='/ruby.git/diff/sample/mpart.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/mpart.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/mrshtest.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/mrshtest.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/observ.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/observ.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/sample/occur.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/occur.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/sample/occur2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/occur2.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/openssl/c_rehash.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='add'><a href='/ruby.git/diff/sample/opt_s.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/opt_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='add'><a href='/ruby.git/diff/sample/opt_x.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/opt_x.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/optparse/opttest.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/sample/parsearg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/parsearg.rb</a></td><td class='right'>69</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='add'><a href='/ruby.git/diff/sample/perror.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/perror.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/philos.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/philos.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/sample/pi.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/pi.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='upd'><a href='/ruby.git/diff/sample/rcs.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/rcs.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='add'><a href='/ruby.git/diff/sample/reach.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/reach.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/sample/regx.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/regx.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='add'><a href='/ruby.git/diff/sample/resp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/resp.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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/rss/blend.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/rss/blend.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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/rss/convert.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/rss/list_description.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/rss/list_description.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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/rss/re_read.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/sample/rss/rss_recent.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/rss/rss_recent.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='add'><a href='/ruby.git/diff/sample/ruby-mode.el?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/ruby-mode.el</a></td><td class='right'>296</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.2%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 98.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/sample/samp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/samp.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/sieve.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/sieve.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='add'><a href='/ruby.git/diff/sample/split.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/split.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='add'><a href='/ruby.git/diff/sample/struct.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/struct.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/sample/svr.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/svr.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='add'><a href='/ruby.git/diff/sample/system.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/system.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='add'><a href='/ruby.git/diff/sample/t1.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/t1.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='add'><a href='/ruby.git/diff/sample/t2.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/t2.rb</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/sample/test.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/test.rb</a></td><td class='right'>2096</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 8.6%;'/><td class='none' style='width: 91.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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/time.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/time.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='add'><a href='/ruby.git/diff/sample/trap.pl?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/trap.pl</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/sample/trap.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/trap.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/sample/trojan.pl?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/trojan.pl</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/sample/trojan.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/trojan.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='del'><a href='/ruby.git/diff/sample/tsvr.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/tsvr.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/sample/tt.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/tt.rb</a></td><td class='right'>103</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='del'><a href='/ruby.git/diff/sample/uumerge.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sample/uumerge.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/webrick/demo-app.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/signal.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>signal.c</a></td><td class='right'>1129</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 4.6%;'/><td class='none' style='width: 95.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/socket.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>socket.c</a></td><td class='right'>709</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 2.9%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 97.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='add'><a href='/ruby.git/diff/spec?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>spec</a></td><td class='right'>3240</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 13.3%;'/><td class='rem' style='width: 0.0%;'/><td class='none' style='width: 86.7%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/sprintf.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>sprintf.c</a></td><td class='right'>856</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 2.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/st.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>st.c</a></td><td class='right'>604</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.5%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/st.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>st.h</a></td><td class='right'>79</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/string.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>string.c</a></td><td class='right'>5311</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 3.7%;'/><td class='rem' style='width: 18.1%;'/><td class='none' style='width: 78.2%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/struct.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>struct.c</a></td><td class='right'>970</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.6%;'/><td class='rem' style='width: 3.3%;'/><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/csv/test_csv.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/hello.erb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/erb/hello.erb</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/erb/test_erb.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/erb/test_erb.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/fileutils/fileasserts.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/iconv/test_basic.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/iconv/test_basic.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/iconv/test_option.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/iconv/test_option.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/iconv/test_partial.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/iconv/test_partial.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/iconv/utils.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/iconv/utils.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/io/nonblock/test_flush.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/net/http/test_https_proxy.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/net/imap/test_imap.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/net/imap/test_imap.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/nkf/test_kconv.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_ec.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/openssl/test_ec.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/openssl/test_hmac.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/openssl/test_ssl.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/openssl/test_x509cert.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_getopts.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/optparse/test_getopts.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/optparse/test_noarg.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/pathname/test_pathname.rb</a></td><td class='right'>478</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/rdoc/parsers/test_parse_c.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rdoc/parsers/test_parse_c.rb</a></td><td class='right'>261</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/readline/test_readline.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rinda/test_rinda.rb</a></td><td class='right'>542</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/rss-assertions.rb</a></td><td class='right'>2074</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 8.5%;'/><td class='none' style='width: 91.5%;'/></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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/rss-testcase.rb</a></td><td class='right'>478</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/rss/test_1.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_1.0.rb</a></td><td class='right'>296</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_2.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_2.0.rb</a></td><td class='right'>410</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/rss/test_accessor.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_atom.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_atom.rb</a></td><td class='right'>688</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/rss/test_content.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_content.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/rss/test_dublincore.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_dublincore.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/test/rss/test_image.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_image.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/rss/test_inherit.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_inherit.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/rss/test_itunes.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_itunes.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/test/rss/test_maker_0.9.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_0.9.rb</a></td><td class='right'>438</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_1.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_1.0.rb</a></td><td class='right'>484</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/rss/test_maker_2.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_2.0.rb</a></td><td class='right'>705</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/rss/test_maker_atom_entry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_atom_entry.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/test/rss/test_maker_atom_feed.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_atom_feed.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/rss/test_maker_content.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_content.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/rss/test_maker_dc.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_dc.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/test/rss/test_maker_image.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_itunes.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_itunes.rb</a></td><td class='right'>471</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/rss/test_maker_slash.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_slash.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/rss/test_maker_sy.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_sy.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/rss/test_maker_taxo.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_maker_xml-stylesheet.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/rss/test_parser.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_parser.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_parser_1.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_parser_1.0.rb</a></td><td class='right'>511</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_parser_atom_entry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_parser_atom_entry.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/test/rss/test_parser_atom_feed.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_parser_atom_feed.rb</a></td><td class='right'>276</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/rss/test_setup_maker_0.9.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_setup_maker_0.9.rb</a></td><td class='right'>246</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_setup_maker_1.0.rb</a></td><td class='right'>550</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/rss/test_setup_maker_2.0.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_setup_maker_atom_entry.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_setup_maker_atom_entry.rb</a></td><td class='right'>409</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/rss/test_setup_maker_atom_feed.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_setup_maker_atom_feed.rb</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/test/rss/test_setup_maker_itunes.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_setup_maker_itunes.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/rss/test_setup_maker_slash.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_setup_maker_slash.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/rss/test_slash.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_slash.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/rss/test_syndication.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_syndication.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/test/rss/test_taxonomy.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_taxonomy.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/test/rss/test_to_s.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/rss/test_to_s.rb</a></td><td class='right'>670</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/rss/test_trackback.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/suicide.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/suicide.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/test/ruby/test_alias.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_array.rb</a></td><td class='right'>1272</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/test/ruby/test_assignment.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_beginendblock.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/ruby/test_bignum.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_bignum.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/test/ruby/test_call.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_enum.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_enum.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/test/ruby/test_enumerator.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_enumerator.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/test/ruby/test_env.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_fixnum.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_fixnum.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/ruby/test_float.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_float.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/test/ruby/test_gc.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_hash.rb</a></td><td class='right'>641</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/test/ruby/test_ifunless.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_integer.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_integer.rb</a></td><td class='right'>653</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/ruby/test_io.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_iterator.rb</a></td><td class='right'>477</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_marshal.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_marshal.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_math.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_proc.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/ruby/test_process.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_super.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/test/ruby/test_symbol.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_symbol.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/ruby/test_system.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_system.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/ruby/test_time.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/ruby/test_time.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/ruby/test_trace.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/sdbm/test_sdbm.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/sdbm/test_sdbm.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/soap/asp.net/hello.wsdl?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/strscan/test_stringscanner.rb</a></td><td class='right'>571</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/testunit/collector/test_dir.rb</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/test/testunit/collector/test_objectspace.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/test/thread/lbtest.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/thread/lbtest.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/thread/test_thread.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/thread/test_thread.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/uri/test_common.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/uri/test_common.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/uri/test_ftp.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/uri/test_ftp.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/uri/test_generic.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/uri/test_generic.rb</a></td><td class='right'>704</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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/.htaccess?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/webrick/.htaccess</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/webrick/test_cgi.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/webrick/test_cgi.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/webrick/test_cookie.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/webrick/test_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/test/webrick/test_filehandler.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/webrick/test_filehandler.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/test/webrick/test_httpauth.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/webrick/utils.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/webrick/webrick.cgi?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/webrick/webrick_long_filename.cgi?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/webrick/webrick_long_filename.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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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_cookie.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/xmlrpc/test_cookie.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/xmlrpc/test_datetime.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/yaml/test_yaml.rb</a></td><td class='right'>1292</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/yaml/test_yamlstore.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>test/yaml/test_yamlstore.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/zlib/test_zlib.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>time.c</a></td><td class='right'>2085</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 1.0%;'/><td class='rem' style='width: 7.6%;'/><td class='none' style='width: 91.4%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/util.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>util.c</a></td><td class='right'>3867</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 15.9%;'/><td class='none' style='width: 84.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/util.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>util.h</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/variable.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>variable.c</a></td><td class='right'>2004</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.9%;'/><td class='rem' style='width: 7.3%;'/><td class='none' style='width: 91.8%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='upd'><a href='/ruby.git/diff/version.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>version.c</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.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/version.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>version.h</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/vms/config.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/vms/vms.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>vms/vms.h</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/vms/vmsruby_private.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/win32/Makefile.sub?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/Makefile.sub</a></td><td class='right'>683</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/win32/README.win32?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/README.win32</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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/win32/configure.bat?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/configure.bat</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/win32/dir.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/dir.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.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/win32/ifchange.bat?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/win32/mkexports.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/mkexports.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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/win32/resource.rb?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/resource.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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/win32/rm.bat?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/win32/setup.mak?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/setup.mak</a></td><td class='right'>183</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/win32/win32.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/win32.c</a></td><td class='right'>4116</td><td class='graph'><table summary='file diffstat' width='100%'><tr><td class='add' style='width: 0.0%;'/><td class='rem' style='width: 16.9%;'/><td class='none' style='width: 83.1%;'/></tr></table></td></tr>
<tr><td class='mode'>-rw-r--r--</td><td class='del'><a href='/ruby.git/diff/win32/win32.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/win32.h</a></td><td class='right'>556</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/win32/winmain.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>win32/winmain.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='del'><a href='/ruby.git/diff/wince/Makefile.sub?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/Makefile.sub</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/wince/README.wince?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/README.wince</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/wince/assert.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/wince/assert.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/assert.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'>-rwxr-xr-x</td><td class='del'><a href='/ruby.git/diff/wince/configure.bat?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/configure.bat</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/wince/direct.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/direct.c</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/wince/direct.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/direct.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/wince/errno.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/errno.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='del'><a href='/ruby.git/diff/wince/errno.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/errno.h</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/wince/fcntl.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/fcntl.h</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/wince/io.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/io.h</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/wince/io_wce.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/io_wce.c</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/wince/process.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/process.h</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/wince/process_wce.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/process_wce.c</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/wince/setup.mak?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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='del'><a href='/ruby.git/diff/wince/signal.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/signal.h</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/wince/signal_wce.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/signal_wce.c</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/wince/stddef.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/stddef.h</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/wince/stdio.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/stdio.c</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/wince/stdlib.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/stdlib.c</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/wince/string_wce.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/string_wce.c</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/wince/sys/stat.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/sys/stat.c</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/wince/sys/stat.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/sys/stat.h</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/wince/sys/timeb.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/sys/timeb.c</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/wince/sys/timeb.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/sys/timeb.h</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/wince/sys/types.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/sys/types.h</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/wince/sys/utime.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/sys/utime.c</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/wince/sys/utime.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/sys/utime.h</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/wince/time.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/time.h</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/wince/time_wce.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/time_wce.c</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/wince/varargs.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/varargs.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='del'><a href='/ruby.git/diff/wince/wince.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/wince.c</a></td><td class='right'>583</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/wince/wince.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/wince.h</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/wince/wincemain.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/wincemain.c</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/wincon.h?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/wincon.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='del'><a href='/ruby.git/diff/wince/winsock2.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>wince/winsock2.c</a></td><td class='right'>338</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/x68/_dtos18.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>x68/_dtos18.c</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/x68/_round.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>x68/_round.c</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/x68/fconvert.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>x68/fconvert.c</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/x68/select.c?h=v0_50&amp;id2=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>x68/select.c</a></td><td class='right'>167</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>
</table><div class='diffstat-summary'>2608 files changed, 23464 insertions, 611639 deletions</div><table summary='diff' class='diff'><tr><td><div class='head'>diff --git a/.cvsignore b/.cvsignore<br/>deleted file mode 100644<br/>index a72211d03f..0000000000<br/>--- a/<a href='/ruby.git/tree/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,48 +0,0 @@</div><div class='del'>-*.bak</div><div class='del'>-*.orig</div><div class='del'>-*.rej</div><div class='del'>-*.sav</div><div class='del'>-*~</div><div class='del'>-.*.list</div><div class='del'>-.*.time</div><div class='del'>-.ccmalloc</div><div class='del'>-.ppack</div><div class='del'>-.ext</div><div class='del'>-.git</div><div class='del'>-.svn</div><div class='del'>-.pc</div><div class='del'>-COPYING.LIB</div><div class='del'>-ChangeLog.pre-alpha</div><div class='del'>-ChangeLog.pre1_1</div><div class='del'>-Makefile</div><div class='del'>-README.fat-patch</div><div class='del'>-README.v6</div><div class='del'>-README.atheos</div><div class='del'>-archive</div><div class='del'>-autom4te*.cache</div><div class='del'>-automake</div><div class='del'>-beos</div><div class='del'>-config.cache</div><div class='del'>-config.h</div><div class='del'>-config.h.in</div><div class='del'>-config.log</div><div class='del'>-config.status</div><div class='del'>-configure</div><div class='del'>-libruby.so.*</div><div class='del'>-miniruby</div><div class='del'>-newdate.rb</div><div class='del'>-newver.rb</div><div class='del'>-parse.c</div><div class='del'>-patches</div><div class='del'>-ppack</div><div class='del'>-preview</div><div class='del'>-rbconfig.rb</div><div class='del'>-repack</div><div class='del'>-riscos</div><div class='del'>-rubicon</div><div class='del'>-ruby</div><div class='del'>-ruby-man.rd.gz</div><div class='del'>-tmp</div><div class='del'>-web</div><div class='del'>-y.output</div><div class='del'>-y.tab.c</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>.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/C-IF b/C-IF<br/>new file mode 100644<br/>index 0000000000..de50de0eed<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/C-IF?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>C-IF</a></div><div class='hunk'>@@ -0,0 +1,168 @@</div><div class='add'>+.\" C-IF -  -*- Text -*- created at: Tue Oct 12 14:15:00 JST 1993</div><div class='add'>+</div><div class='add'>+Ruby-C ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹</div><div class='add'>+</div><div class='add'>+·¿</div><div class='add'>+</div><div class='add'>+ VALUE</div><div class='add'>+</div><div class='add'>+   Ruby¥ª¥Ö¥¸¥§¥¯¥È¤òÉ½¸½¤¹¤ë·¿. É¬Í×¤Ë±þ¤¸¤Æ¥­¥ã¥¹¥È¤·¤ÆÍÑ¤¤¤ë. ÁÈ¤ß</div><div class='add'>+   ¹þ¤ß·¿¤òÉ½¸½¤¹¤ëC¤Î·¿¤Ïruby.h¤Ëµ­½Ò¤·¤Æ¤¢¤ëR¤Ç»Ï¤Þ¤ë¹½Â¤ÂÎ¤Ç¤¢¤ë.</div><div class='add'>+   VALUE·¿¤ò¤³¤ì¤é¤Ë¥­¥ã¥¹¥È¤¹¤ë¤¿¤á¤ËR¤Ç»Ï¤Þ¤ë¹½Â¤ÂÎÌ¾¤òÁ´¤ÆÂçÊ¸»ú¤Ë</div><div class='add'>+   ¤·¤¿Ì¾Á°¤Î¥Þ¥¯¥í¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë.</div><div class='add'>+</div><div class='add'>+ÊÑ¿ô¡¦Äê¿ô</div><div class='add'>+</div><div class='add'>+ Qnil</div><div class='add'>+</div><div class='add'>+   Äê¿ô: nil¥ª¥Ö¥¸¥§¥¯¥È</div><div class='add'>+</div><div class='add'>+ Qself</div><div class='add'>+</div><div class='add'>+   ÊÑ¿ô: ¸½ºß¤Îself¥ª¥Ö¥¸¥§¥¯¥È¤ÎÃÍ. °ìÈÌ¤Ë¥á¥½¥Ã¥É¤Ë¤Ïself¤ò»Ø¤¹°ú¿ô</div><div class='add'>+   ¤¬Í¿¤¨¤é¤ì¤ë¤Î¤Ç, ¤³¤ÎÊÑ¿ô¤Ë¥¢¥¯¥»¥¹¤¹¤ëÉ¬Í×¤Ï¤Ê¤¤. ¤³¤ÎÊÑ¿ô¤ÎÃÍ¤ò</div><div class='add'>+   ÊÑ¹¹¤¹¤ë»þ¤Ï°Ê¸å¤Îself¤ÎÃÍ¤½¤Î¤â¤Î¤¬ÊÑ¤ï¤Ã¤Æ¤·¤Þ¤¦¤Î¤Ç, ¿µ½Å¤Ë¹Ô¤Ê</div><div class='add'>+   ¤¦¤³¤È.</div><div class='add'>+</div><div class='add'>+¥¯¥é¥¹¡¦¥â¥¸¥å¡¼¥ëÄêµÁ</div><div class='add'>+</div><div class='add'>+ VALUE rb_define_class(char *name, VALUE super)</div><div class='add'>+</div><div class='add'>+   super¤Î¥µ¥Ö¥¯¥é¥¹¤È¤·¤Æ¿·¤·¤¤Ruby¥¯¥é¥¹¤òÄêµÁ¤¹¤ë.</div><div class='add'>+</div><div class='add'>+ VALUE rb_define_module(char *name)</div><div class='add'>+</div><div class='add'>+   Ruby¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤¹¤ë.</div><div class='add'>+</div><div class='add'>+ void rb_include_module(VALUE class, VALUE module)</div><div class='add'>+</div><div class='add'>+   ¥â¥¸¥å¡¼¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë. class¤¬¤¹¤Ç¤Ëmodule¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ</div><div class='add'>+   ¤¤¤ë»þ¤Ë¤Ï²¿¤â¤·¤Ê¤¤(Â¿½Å¥¤¥ó¥¯¥ë¡¼¥É¤Î¶Ø»ß).</div><div class='add'>+</div><div class='add'>+Âç°èÊÑ¿ô</div><div class='add'>+</div><div class='add'>+ void rb_define_variable(char *name, VALUE *var,</div><div class='add'>+			 VALUE (*get_hook), VALUE (*set_hook)())</div><div class='add'>+</div><div class='add'>+   Ruby¤ÈC¤È¤Ç¶¦Í­¤¹¤ë¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÄêµÁ¤¹¤ë. get_hook¤¬Qnil¤Ç¤Ê¤¤»þ, </div><div class='add'>+   ÊÑ¿ô»²¾È¤ÎºÝ¤Ëget_hook¤Ë¥»¥Ã¥È¤µ¤ì¤¿´Ø¿ô¤¬¸Æ¤Ð¤ì¤ë. set_hook¤¬Qnil</div><div class='add'>+   ¤Ç¤Ê¤¤»þ¤Ë¤ÏÂåÆþ¤Î»þ¤Ëset_hook¤¬¸Æ¤Ð¤ì¤ë.</div><div class='add'>+</div><div class='add'>+   ÊÑ¿ôÌ¾¤¬`$'¤Ç»Ï¤Þ¤é¤Ê¤¤»þ¤Ë¤Ï¼«Æ°Åª¤ËÄÉ²Ã¤µ¤ì¤ë. ÊÑ¿ôÌ¾¤È¤·¤Æruby¤Î</div><div class='add'>+   ¼±ÊÌ»Ò¤È¤·¤Æµö¤µ¤ì¤Ê¤¤Ê¸»ú(Îã¤¨¤Ð` ')¤ò´Þ¤à¾ì¹ç¤Ë¤Ïruby¥×¥í¥°¥é¥à¤«</div><div class='add'>+   ¤é¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¯¤Ê¤ë.</div><div class='add'>+</div><div class='add'>+ void rb_global_variable(VALUE *var)</div><div class='add'>+</div><div class='add'>+   GC¤ËRuby¤«¤é¤Ï¥¢¥¯¥»¥¹¤µ¤ì¤Ê¤¤¤¬, Ruby¥ª¥Ö¥¸¥§¥¯¥È¤ò´Þ¤àÂç°èÊÑ¿ô¤ò</div><div class='add'>+   ¥Þ¡¼¥¯¤¹¤ë.</div><div class='add'>+</div><div class='add'>+ void rb_read_only_hook()</div><div class='add'>+</div><div class='add'>+   ÆÉ¤ß½Ð¤·ÀìÍÑ¤ÎÊÑ¿ô¤Î¤¿¤á¤Îset_hook´Ø¿ô. ÃÍ¤òÀßÄê¤·¤è¤¦¤È¤¹¤ë¤ÈÎã³°</div><div class='add'>+   ¤òÈ¯À¸¤µ¤»¤ë.</div><div class='add'>+</div><div class='add'>+¥¯¥é¥¹Äê¿ô</div><div class='add'>+</div><div class='add'>+ void rb_define_const(VALUE class, char *name, VALUE val)</div><div class='add'>+</div><div class='add'>+   ¥¯¥é¥¹Äê¿ô¤òÄêµÁ¤¹¤ë.</div><div class='add'>+</div><div class='add'>+¥á¥½¥Ã¥ÉÄêµÁ</div><div class='add'>+</div><div class='add'>+ rb_define_method(VALUE class, char *name, VALUE (*func)(), int argc)</div><div class='add'>+</div><div class='add'>+   ¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë. argc¤Ïself¤ò½ü¤¯°ú¿ô¤Î¿ô. argc¤¬-1¤Î»þ, °ú¿ô¤Ï </div><div class='add'>+   argc, argv·Á¼°¤ÇÍ¿¤¨¤é¤ì¤ë.  argc¤¬-2¤Î»þ, °ú¿ô¤Ïself, args(args¤Ï</div><div class='add'>+   °ú¿ô¤ò´Þ¤àruby¤ÎÇÛÎó)¤È¤¤¤¦·Á¼°¤ÇÍ¿¤¨¤é¤ì¤ë.</div><div class='add'>+</div><div class='add'>+ rb_define_single_method(VALUE class, char *name, VALUE (*func)(), int argc)</div><div class='add'>+</div><div class='add'>+   ÆÃ°Û¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë. °ú¿ô¤Ïrb_define_method()¤ÈÆ±¤¸.</div><div class='add'>+</div><div class='add'>+ rb_scan_args(VALUE args, char *fmt, ...)</div><div class='add'>+</div><div class='add'>+   args·Á¼°¤ÇÍ¿¤¨¤é¤ì¤¿°ú¿ô¤òÊ¬²ò¤¹¤ë. fmt¤ÏÉ¬¿Ü°ú¿ô¤Î¿ô, ÉÕ²Ã°ú¿ô¤Î¿ô, </div><div class='add'>+   »Ä¤ê¤Î°ú¿ô¤¬¤¢¤ë¤«¤ò»ØÄê¤¹¤ëÊ¸»úÎó¤Ç, "¿ô»ú¿ô»ú*"¤È¤¤¤¦·Á¼°¤Ç¤¢¤ë. </div><div class='add'>+   2 ÈÖÌÜ¤Î¿ô»ú¤È"*"¤Ï¾ÊÎ¬²ÄÇ½¤Ç¤¢¤ë. Âè3°ú¿ô°Ê¹ß¤ÏÊÑ¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç, </div><div class='add'>+   ³ºÅö¤¹¤ëÍ×ÁÇ¤¬¤½¤ÎÊÑ¿ô¤Ë³ÊÇ¼¤µ¤ì¤ë. ÉÕ²Ã°ú¿ô¤¬Í¿¤¨¤é¤ì¤Ê¤¤¾ì¹ç¤ÏÊÑ</div><div class='add'>+   ¿ô¤Ë Qnil¤¬ÂåÆþ¤µ¤ì¤ë.</div><div class='add'>+</div><div class='add'>+Ruby¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·</div><div class='add'>+</div><div class='add'>+ VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)</div><div class='add'>+</div><div class='add'>+   ¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·. Ê¸»úÎó¤«¤émid¤òÆÀ¤ë¤¿¤á¤Ë¤Ïrb_intern()¤ò»È¤¦.</div><div class='add'>+</div><div class='add'>+ rb_call_super(VALUE args)</div><div class='add'>+</div><div class='add'>+   ¥¹¡¼¥Ñ¡¼¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹. args¤Ï°ú¿ô¥ê¥¹¥È¤È¤Ê¤ëÇÛÎó. </div><div class='add'>+   args ¤¬Qnil¤Î»þ¤Ï¸½ºß¤Î¥á¥½¥Ã¥É¤Î°ú¿ô¤ò¤½¤Î¤Þ¤Þ°ú¤­·Ñ¤°.</div><div class='add'>+</div><div class='add'>+Ê¸»úÎó &lt;-&gt; IDÊÑ´¹</div><div class='add'>+</div><div class='add'>+ ID rb_intern(char *name)</div><div class='add'>+</div><div class='add'>+   Ê¸»úÎó¤ËÂÐ±þ¤¹¤ëID¤òÊÖ¤¹.</div><div class='add'>+</div><div class='add'>+ char *rb_id2name(ID id)</div><div class='add'>+</div><div class='add'>+   ID¤ËÂÐ±þ¤¹¤ëÊ¸»úÎó¤òÊÖ¤¹(¥Ç¥Ð¥Ã¥°ÍÑ).</div><div class='add'>+</div><div class='add'>+¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô</div><div class='add'>+</div><div class='add'>+ VALUE rb_iv_get(VALUE obj, char *name)</div><div class='add'>+</div><div class='add'>+   obj¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ÎÃÍ¤òÆÀ¤ë. `@'¤Ç»Ï¤Þ¤é¤Ê¤¤¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤Ï </div><div class='add'>+   Ruby¥×¥í¥°¥é¥à¤«¤é¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤.</div><div class='add'>+</div><div class='add'>+ VALUE rb_iv_set(VALUE obj, char *name, VALUE val)</div><div class='add'>+</div><div class='add'>+   obj¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤òval¤Ë¥»¥Ã¥È¤¹¤ë.</div><div class='add'>+</div><div class='add'>+À©¸æ¹½Â¤</div><div class='add'>+</div><div class='add'>+ VALUE rb_iterate(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2)</div><div class='add'>+</div><div class='add'>+   func2¤ò¥Ö¥í¥Ã¥¯¤È¤·¤ÆÀßÄê¤·, func1¤ò¥¤¥Æ¥ì¡¼¥¿¤È¤·¤Æ¸Æ¤Ö.  func1¤Ë</div><div class='add'>+   ¤Ï arg1¤¬°ú¿ô¤È¤·¤ÆÅÏ¤µ¤ì, func2¤Ë¤ÏÂè1°ú¿ô¤Ë¥¤¥Æ¥ì¡¼¥¿¤È¤·¤ÆÍ¿¤¨¤é</div><div class='add'>+   ¤ì¤¿ÃÍ, Âè2°ú¿ô¤Ëarg2¤¬ÅÏ¤µ¤ì¤ë.</div><div class='add'>+ </div><div class='add'>+ VALUE rb_yield(VALUE val)</div><div class='add'>+</div><div class='add'>+   val¤òÃÍ¤È¤·¤Æ¥¤¥Æ¥ì¡¼¥¿¥Ö¥í¥Ã¥¯¤ò¸Æ¤Ó½Ð¤¹.</div><div class='add'>+</div><div class='add'>+ VALUE rb_resque(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2)</div><div class='add'>+</div><div class='add'>+   ´Ø¿ôfunc1¤òarg1¤ò°ú¿ô¤Ë¸Æ¤Ó½Ð¤¹. func1¤Î¼Â¹ÔÃæ¤ËÎã³°¤¬È¯À¸¤·¤¿»þ¤Ë</div><div class='add'>+   ¤Ï func2¤òarg2¤ò°ú¿ô¤È¤·¤Æ¸Æ¤Ö. Ìá¤êÃÍ¤ÏÎã³°¤¬È¯À¸¤·¤Ê¤«¤Ã¤¿»þ¤Ï</div><div class='add'>+   func1¤ÎÌá¤êÃÍ, Îã³°¤¬È¯À¸¤·¤¿»þ¤Ë¤Ïfunc2¤ÎÌá¤êÃÍ¤Ç¤¢¤ë.</div><div class='add'>+</div><div class='add'>+ VALUE rb_ensure(VALUE (*func1)(), char *arg1, VALUE (*func2)(), char *arg2)</div><div class='add'>+</div><div class='add'>+   ´Ø¿ôfunc1¤òarg1¤ò°ú¿ô¤È¤·¤Æ¼Â¹Ô¤·, ¼Â¹Ô½ªÎ»¸å(¤¿¤È¤¨Îã³°¤¬È¯À¸¤·¤Æ</div><div class='add'>+   ¤â) func2¤òarg2¤ò°ú¿ô¤È¤·¤Æ¼Â¹Ô¤¹¤ë. Ìá¤êÃÍ¤Ïfunc1¤ÎÌá¤êÃÍ¤Ç¤¢¤ë(Îã</div><div class='add'>+   ³°¤¬È¯À¸¤·¤¿»þ¤Ïnil).</div><div class='add'>+</div><div class='add'>+Îã³°¡¦¥¨¥é¡¼</div><div class='add'>+</div><div class='add'>+ void Fail(char *fmt, ...)</div><div class='add'>+</div><div class='add'>+   Îã³°¤òÈ¯À¸¤µ¤»¤ë. °ú¿ô¤Ïprintf()¤ÈÆ±¤¸.</div><div class='add'>+</div><div class='add'>+ void Fatal(char *fmt, ...)</div><div class='add'>+</div><div class='add'>+   Ã×Ì¿ÅªÎã³°¤òÈ¯À¸¤µ¤»¤ë. ÄÌ¾ï¤ÎÎã³°½èÍý¤Ï¹Ô¤Ê¤ï¤ì¤º, ¥¤¥ó¥¿¡¼¥×¥ê¥¿</div><div class='add'>+   ¤¬½ªÎ»¤¹¤ë(¤¿¤À¤·ensure¤Ç»ØÄê¤µ¤ì¤¿¥³¡¼¥É¤Ï½ªÎ»Á°¤Ë¼Â¹Ô¤µ¤ì¤ë).</div><div class='add'>+</div><div class='add'>+ void Bug(char *fmt, ...)</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'>+ * Local variables:</div><div class='add'>+ * fill-column: 70</div><div class='add'>+ * end:</div><div class='add'>+ */</div><div class='head'>diff --git a/COPYING b/COPYING<br/>deleted file mode 100644<br/>index 9043404a83..0000000000<br/>--- a/<a href='/ruby.git/tree/COPYING?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>COPYING</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-Ruby is copyrighted free software by Yukihiro Matsumoto &lt;matz@netlab.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'>-version 2 (see the file GPL), 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) give non-standard binaries 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'>-  3. You may distribute the software in object code or binary form,</div><div class='del'>-     provided that you do at least ONE of the following:</div><div class='del'>-</div><div class='del'>-       a) distribute the binaries 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 binaries 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).  But some files in the distribution</div><div class='del'>-     are not written by the author, so that they are not under these terms.</div><div class='del'>-</div><div class='del'>-     For the list of those files and their copying conditions, see the</div><div class='del'>-     file LEGAL.</div><div class='del'>-</div><div class='del'>-  5. The scripts and library files supplied as input to or produced as </div><div class='del'>-     output from the software do not automatically fall under the</div><div class='del'>-     copyright of the software, but belong to whomever generated them, </div><div class='del'>-     and may be sold commercially, and may be aggregated with this</div><div class='del'>-     software.</div><div class='del'>-</div><div class='del'>-  6. 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 MERCHANTABILITY AND FITNESS FOR A PARTICULAR</div><div class='del'>-     PURPOSE.</div><div class='head'>diff --git a/COPYING.ja b/COPYING.ja<br/>deleted file mode 100644<br/>index 933cc7cb9a..0000000000<br/>--- a/<a href='/ruby.git/tree/COPYING.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>COPYING.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-$BK\%W%m%0%i%`$O%U%j!&lt;%=%U%H%&amp;%'%"$G$9!%(BGPL(the GNU General</div><div class='del'>-Public License)$B$^$?$O0J2&lt;$K&lt;($9&gt;r7o$GK\%W%m%0%i%`$r:FG[I[$G(B</div><div class='del'>-$B$-$^$9!%(BGPL$B$K$D$$$F$O(BGPL$B%U%!%$%k$r;2&gt;H$7$F2&lt;$5$$!%(B</div><div class='del'>-</div><div class='del'>-  1. $BJ#@=$O@)8B$J$/&lt;+M3$G$9!%(B</div><div class='del'>-</div><div class='del'>-  2. $B0J2&lt;$N&gt;r7o$N$$$:$l$+$rK~$?$9;~$KK\%W%m%0%i%`$N%=!&lt;%9$r(B</div><div class='del'>-     $B&lt;+M3$KJQ99$G$-$^$9!%(B</div><div class='del'>-</div><div class='del'>-     (a) $B%M%C%H%K%e!&lt;%:$K%]%9%H$7$?$j!$:n&lt;T$KJQ99$rAwIU$9$k(B</div><div class='del'>-         $B$J$I$NJ}K!$G!$JQ99$r8x3+$9$k!%(B</div><div class='del'>-</div><div class='del'>-     (b) $BJQ99$7$?K\%W%m%0%i%`$r&lt;+J,$N=jB0$9$kAH?%FbIt$@$1$G(B</div><div class='del'>-         $B;H$&amp;!%(B</div><div class='del'>-</div><div class='del'>-     (c) $BJQ99E@$rL@&lt;($7$?$&amp;$(!$%=%U%H%&amp;%'%"$NL&gt;A0$rJQ99$9$k!%(B</div><div class='del'>-         $B$=$N%=%U%H%&amp;%'%"$rG[I[$9$k;~$K$OJQ99A0$NK\%W%m%0%i(B</div><div class='del'>-         $B%`$bF1;~$KG[I[$9$k!%$^$?$OJQ99A0$NK\%W%m%0%i%`$N%=!&lt;(B</div><div class='del'>-         $B%9$NF~&lt;jK!$rL@&lt;($9$k!%(B</div><div class='del'>-</div><div class='del'>-     (d) $B$=$NB&gt;$NJQ99&gt;r7o$r:n&lt;T$H9g0U$9$k!%(B</div><div class='del'>-</div><div class='del'>-  3. $B0J2&lt;$N&gt;r7o$N$$$:$l$+$rK~$?$9;~$KK\%W%m%0%i%`$r%3%s%Q%$(B</div><div class='del'>-     $B%k$7$?%*%V%8%'%/%H%3!&lt;%I$d&lt;B9T7A&lt;0$G$bG[I[$G$-$^$9!%(B</div><div class='del'>-</div><div class='del'>-     (a) $B%P%$%J%j$r&lt;u$1&lt;h$C$??M$,%=!&lt;%9$rF~&lt;j$G$-$k$h$&amp;$K!$(B</div><div class='del'>-         $B%=!&lt;%9$NF~&lt;jK!$rL@&lt;($9$k!%(B</div><div class='del'>-</div><div class='del'>-     (b) $B5!3#2DFI$J%=!&lt;%9%3!&lt;%I$rE:IU$9$k!%(B</div><div class='del'>-</div><div class='del'>-     (c) $BJQ99$r9T$C$?%P%$%J%j$OL&gt;A0$rJQ99$7$?$&amp;$(!$%*%j%8%J(B</div><div class='del'>-         $B%k$N%=!&lt;%9%3!&lt;%I$NF~&lt;jK!$rL@&lt;($9$k!%(B</div><div class='del'>-</div><div class='del'>-     (d) $B$=$NB&gt;$NG[I[&gt;r7o$r:n&lt;T$H9g0U$9$k!%(B</div><div class='del'>-</div><div class='del'>-  4. $BB&gt;$N%W%m%0%i%`$X$N0zMQ$O$$$+$J$kL\E*$G$"$l&lt;+M3$G$9!%$?(B</div><div class='del'>-     $B$@$7!$K\%W%m%0%i%`$K4^$^$l$kB&gt;$N:n&lt;T$K$h$k%3!&lt;%I$O!$$=(B</div><div class='del'>-     $B$l$&gt;$l$N:n&lt;T$N0U8~$K$h$k@)8B$,2C$($i$l$k&gt;l9g$,$"$j$^$9!%(B</div><div class='del'>-</div><div class='del'>-     $B$=$l$i%U%!%$%k$N0lMw$H$=$l$&gt;$l$NG[I[&gt;r7o$J$I$KIU$$$F$O(B</div><div class='del'>-     LEGAL$B%U%!%$%k$r;2&gt;H$7$F$/$@$5$$!%(B</div><div class='del'>-</div><div class='del'>-  5. $BK\%W%m%0%i%`$X$NF~NO$H$J$k%9%/%j%W%H$*$h$S!$K\%W%m%0%i(B</div><div class='del'>-     $B%`$+$i$N=PNO$N8"Mx$OK\%W%m%0%i%`$N:n&lt;T$G$O$J$/!$$=$l$&gt;(B</div><div class='del'>-     $B$l$NF~=PNO$r@8@.$7$??M$KB0$7$^$9!%$^$?!$K\%W%m%0%i%`$K(B</div><div class='del'>-     $BAH$_9~$^$l$k$?$a$N3HD%%i%$%V%i%j$K$D$$$F$bF1MM$G$9!%(B</div><div class='del'>-</div><div class='del'>-  6. $BK\%W%m%0%i%`$OL5J]&gt;Z$G$9!%:n&lt;T$OK\%W%m%0%i%`$r%5%]!&lt;%H(B</div><div class='del'>-     $B$9$k0U;V$O$"$j$^$9$,!$%W%m%0%i%`&lt;+?H$N%P%0$"$k$$$OK\%W(B</div><div class='del'>-     $B%m%0%i%`$N&lt;B9T$J$I$+$iH/@8$9$k$$$+$J$kB;32$KBP$7$F$b@U(B</div><div class='del'>-     $BG$$r;}$A$^$;$s!%(B</div><div class='head'>diff --git a/ChangeLog b/ChangeLog<br/>index 4a8b1f5999..73803d128e 100644<br/>--- a/<a href='/ruby.git/tree/ChangeLog?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ChangeLog</a><br/>+++ b/<a href='/ruby.git/tree/ChangeLog?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>ChangeLog</a></div><div class='hunk'>@@ -1,23276 +1,871 @@</div><div class='del'>-Thu Jul 10 18:40:22 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Wed Aug 10 15:54:46 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* lib/net/ftp.rb (Net::FTP#sendport): use divmod.  [ruby-core:17557]</div><div class='add'>+	* variable.c: -v¥ª¥×¥·¥ç¥ó¤¬»ØÄê¤µ¤ì¤Æ¤¤¤ë»þ¤Ï½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤, </div><div class='add'>+	  Âç°èÊÑ¿ô, ¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô, ¥í¡¼¥«¥ëÊÑ¿ô¤ò»²¾È¤·¤¿»þÅÀ¤Çwarning</div><div class='add'>+	  ¤ò½Ð¤¹¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Thu Jul 10 18:36:53 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+Tue Aug  9 11:50:48 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* ruby.c: Mac OS X needs origargc times of '\0' in</div><div class='del'>-	  origargv. [ruby-dev:35308]</div><div class='add'>+	* bignum.c: ÑÑ¾è¤Ë´Ø¤·¤Æ¤âÂ¿ÇÜÄ¹±é»»¤ò¹Ô¤Ê¤¦¤è¤¦¤Ë. ÆÃ¤ËÉâÆ°¾®¿ôÅÀ</div><div class='add'>+	  ¿ô¤ÎÈÏ°Ï¤ò±Û¤¨¤¿»þ¤Î½èÍý¤òÅª³Î¤Ë¹Ô¤Ê¤¦¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-Thu Jul 10 13:53:08 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* eval.c: ¥á¥½¥Ã¥ÉÄêµÁ¸å¤Ï¹½Ê¸ÌÚ¤«¤é, ¥á¥½¥Ã¥ÉÄêµÁÉôÊ¬¤ò³°¤¹. ÌµÂÌ</div><div class='add'>+	  ¤ÊºÆÄêµÁ¤¬µ¯¤³¤é¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤¿¤á¤È2½Å¤Ëfree()¤µ¤ì¤Ê¤¤¤¿¤á.</div><div class='ctx'> </div><div class='del'>-	* include/ruby/ruby.h (POSFIXABLE): use FIXNUM_MAX+1 instead of</div><div class='del'>-	  FIXNUM_MAX to make it possible to convert to double accurately.</div><div class='del'>-	  It assumes FLT_RADIX is 2.</div><div class='del'>-	  fix RubyForge bug #14102.</div><div class='del'>-	  backported from 1.9.</div><div class='add'>+	* array.c(Fary_aref): °ú¿ô¤¬1¤Ä¤ÇFixnum¤Î»þ, Range check¤ò¹Ô¤Ê¤ï¤Ê</div><div class='add'>+	  ¤¤¤è¤¦¤Ë½¤Àµ.</div><div class='ctx'> </div><div class='del'>-Mon Jul  7 16:21:38 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* eval.c: °ú¿ô¤Î¿ô¤ò¥³¥ó¥Ñ¥¤¥ë»þ¤Ë·×»»¤·¤Æ¼ã´³¤Î¹âÂ®²½.</div><div class='ctx'> </div><div class='del'>-	* lib/net/smtp.rb (Net::SMTP::start): use 'localhost' instead of</div><div class='del'>-	  'localhost.localdomain'.  [ruby-dev:35333]</div><div class='add'>+Mon Aug  8 13:06:24 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* lib/net/smtp.rb (Net::SMTP::SMTP.start): ditto.</div><div class='add'>+	* object.c: nil¤Ë¤è¤ëÈæ³ÓÏ¢º¿¤ò¤Ê¤¯¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Mon Jul  7 15:02:13 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: bit±é»»»Ò¤ÎÍ¥Àè½ç°Ì¤òÈæ³Ó±é»»»Ò¤è¤ê¤â¶¯¤¯¤·¤¿.  C¤È¤Ï°Û</div><div class='add'>+	  ¤Ê¤ë¤³¤È¤Ë¤Ê¤ë¤¬, Ä¾´Ñ¤Ë¤Ï¹çÃ×¤¹¤ë.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_longjmp): duplicate the thrown exception to set backtrace</div><div class='del'>-	  if it was frozen.  clear all raised flags.</div><div class='add'>+	* gc.c: ¥¯¥é¥¹¤ò²òÊü¤¹¤ë»þ, ¸Ä¡¹¤Î¥á¥½¥Ã¥ÉËè¤Ë¥­¥ã¥Ã¥·¥å¤ò¥¯¥ê¥¢¤¹</div><div class='add'>+	  ¤ë¤Î¤Ç¤Ï¤Ê¤¯, ¥¯¥é¥¹Ã±°Ì¤Ç¥¯¥ê¥¢¤¹¤ë¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-	* eval.c (stack_check): leave clearing flag to rb_longjmp.</div><div class='add'>+Thu Aug  4 18:45:09 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_set_raised, rb_thread_reset_raised): use generic</div><div class='del'>-	  flags.</div><div class='add'>+	* methods.c(method_free): ²òÊü¤µ¤ì¤¿¥á¥½¥Ã¥É¤Ë´Ø¤·¤Æ¥­¥ã¥Ã¥·¥å¤ò¥¯</div><div class='add'>+	  ¥ê¥¢¤·¤Æ¤ª¤¯É¬Í×¤¬¤¢¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_Proc), gc.c (Init_GC): freeze preallocated special exceptions.</div><div class='add'>+	* gc.c: Data¥¯¥é¥¹¤Î¥Ç¡¼¥¿ÉôÊ¬¤òfree()¤·Ëº¤ì¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-	* gc.c (rb_memerror): use thread raised flag instead of static flag,</div><div class='del'>-	  and raise nomem_error without backtrace if failed to make backtrace.</div><div class='del'>-	  [ruby-dev:34724]</div><div class='add'>+Wed Aug  3 09:58:14 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* gc.c (ruby_xmalloc): increase malloc_increase only if malloc</div><div class='del'>-	  succeeds.  failed malloc size can be huge.  it may increase</div><div class='del'>-	  malloc_limit too big which cause less GC and memory full.</div><div class='del'>-	  (ruby_xrealloc): ditto.</div><div class='add'>+	* parse.y: def func .. end·Á¼°¤Ë¤è¤ë´Ø¿ô¥á¥½¥Ã¥É¤ÎÄêµÁ¤Ï¤Ê¤¯¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-Mon Jul  7 12:23:05 2008  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* methods.c: func·Á¼°¤Î¥á¥½¥Ã¥É¤ò¤Ê¤¯¤·¤¿. ¤¢¤Ã¤Æ¤â, ¤¢¤Þ¤ê°ÕÌ£¤¬</div><div class='add'>+	  ¤Ê¤¤¤Î¤Ç.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c: avoid creating Ruby object during</div><div class='del'>-	  GC. thanks to arton &lt;artonx AT yahoo.co.jp&gt;. [ruby-dev:35313]</div><div class='add'>+	* eval.c: $0¤Ø¤ÎÂåÆþ¤Çps(1)¤Î½ÐÎÏ¤¬ÊÑ²½¤¹¤ë¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests: add test_win32ole_event.rb, remove</div><div class='del'>-	  testOLEEVENT.rb</div><div class='add'>+	* io.c(Fsyscall): syscall()¤ò¼Â¸½.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/tests/testWIN32OLE.rb(test_convert_bignum):</div><div class='del'>-	  fix test.</div><div class='add'>+Mon Aug  1 13:41:11 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Mon Jul  7 12:23:05 2008  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* parse.y: ¥À¥Ö¥ë¥¯¥©¡¼¥È¤Ç°Ï¤Þ¤ì¤¿Ê¸»úÎó¤äÀµµ¬É½¸½Ãæ¤Ç"#{ÊÑ¿ôÌ¾}"</div><div class='add'>+	  ¤Þ¤¿¤Ï"#ÊÑ¿ôÌ¾"¤È¤¤¤¦·Á¼°¤ÇÊÑ¿ô¤ÎÆâÍÆ¤òËä¤á¹þ¤à¤³¤È¤¬¤Ç¤­¤ë¤è¤¦</div><div class='add'>+	  ¤Ë¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* gc.c: add rb_during_gc(). based on a patch from arton &lt;artonx AT</div><div class='del'>-	  yahoo.co.jp&gt; at [ruby-dev:35313].   </div><div class='add'>+	* io.c: ´Ø¿ô¥á¥½¥Ã¥Ésystem2()¤Ï¤Ê¤¯¤Ê¤Ã¤¿. º£¤Ï¥Ð¥Ã¥¯¥¯¥©¡¼¥È¤¬¤¢</div><div class='add'>+	  ¤ë¤«¤é¤Í.</div><div class='ctx'> </div><div class='del'>-	* intern.h: ditto.</div><div class='add'>+	* parse.y: `cmd`¤Ë¤è¤Ã¤Æ¥³¥Þ¥ó¥É¤òÊ¸»úÎó¤ËÅ¸³«¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦</div><div class='add'>+	  ¤Ë¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-Thu Jul  3 20:13:20 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: __FILE__, __LINE__¤òÄÉ²Ã. ¤½¤ì¤¾¤ì¥Õ¥¡¥¤¥ëÌ¾(Ê¸»úÎó), </div><div class='add'>+	  ¹ÔÈÖ¹æ(À°¿ô)¤òÃÍ¤È¤¹¤ëµ¿»÷ÊÑ¿ô.</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object, marshal_dump, r_object0, marshal_load): search</div><div class='del'>-	  public methods only.  [ruby-core:17283]</div><div class='add'>+Fri Jul 29 13:16:07 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* object.c (convert_type): ditto.</div><div class='add'>+	* methods.h: ¥á¥½¥Ã¥É¤ò¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ°·¤¦¤Î¤ò¤ä¤á¤ë. ¥á¥½¥Ã¥É</div><div class='add'>+	  ¤Î¥á¥â¥ê´ÉÍý¤Ë¤Ï¥ê¥Õ¥¡¥ì¥ó¥¹¥«¥¦¥ó¥È¤ò»È¤¦¤³¤È¤Ë¤·¤¿. ¤³¤ì¤Ç¥ª¥Ö</div><div class='add'>+	  ¥¸¥§¥¯¥È¤Î¿ô¤¬¸º¤Ã¤Æ¤Û¤ó¤Î¾¯¤·¤À¤±GC¤¬Â®¤¯¤Ê¤ë(¤«¤Ê).</div><div class='ctx'> </div><div class='del'>-	* lib/singleton.rb (Singleton#_dump): conversion method should be</div><div class='del'>-	  public.</div><div class='add'>+	* purify¤Ë¤è¤Ã¤Æ¥á¥â¥ê´Ø·¸¤Î¥Ð¥°¤ò¸¡ºº¤·¤¿(¸«¤Ä¤«¤ë,¸«¤Ä¤«¤ë¡Ä).</div><div class='ctx'> </div><div class='del'>-Wed Jul  2 19:06:43 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c: GC¤ò¥×¥í¥°¥é¥Þ¤¬ÊÑ¿ô¤ò¥Þ¡¼¥¯¤¹¤ë·Á¼°¤«¤é, ¥¹¥¿¥Ã¥¯¤È¥ì¥¸¥¹</div><div class='add'>+	  ¥¿¤«¤é¥Þ¡¼¥¯¤¹¤ëÊýË¡¤ËÊÑ¹¹. °Ü¿¢À­¤¬²¼¤¬¤ë¤è¤¦¤Êµ¤¤â¤¹¤ë¤¬, siod</div><div class='add'>+	  ¤äscm¤Ç¤âºÎÍÑ¤µ¤ì¤Æ¤¤¤ë¤«¤éÂ¿Ê¬Âç¾æÉ×¤À¤í¤¦. Linux on i486¤Ç¤âÆ°</div><div class='add'>+	  ºî¤ò³ÎÇ§¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension.read_multipart): blanks inside</div><div class='del'>-	  double quotes are allowed.  [ruby-list:45140]</div><div class='add'>+Wed Jul 27 16:13:13 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Wed Jul  2 19:03:37 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* eval.c(Eval): ¥È¥Ã¥×¥ì¥Ù¥ë¤Ç¤Ï¹½Â¤ÌÚ¤òfree¤·¤Ê¤¤¤è¤¦¤Ë. ¤É¤¦¤»²ò</div><div class='add'>+	  Êü¤µ¤ì¤ë¤«¤é»þ´Ö¤ÎÌµÂÌ¤Ç¤¢¤ë.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (num_coerce): call rb_Float(x) first.  don't depend on</div><div class='del'>-	  evaluation order of function arguments.</div><div class='add'>+	* array.c, dict.c: "=="¤ò¹½Â¤°ìÃ×¤ËÊÑ¹¹.</div><div class='ctx'> </div><div class='del'>-Wed Jul  2 18:57:19 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+Fri Jul 22 10:14:09 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* ext/syslog/syslog.c (syslog_write): syslog operations should be</div><div class='del'>-	  protected from $SAFE level 4.  a patch from Keita Yamaguchi</div><div class='del'>-	  &lt;keita.yamaguchi at gmail.com&gt;.</div><div class='add'>+	* error.c: ÁÈ¤ß¹þ¤ß¥¿¥¤¥×¤ÎÌ¾Á°¤òÅÐÏ¿¤·Ëº¤ì¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/syslog/syslog.c (mSyslog_close): ditto.</div><div class='add'>+Thu Jul 21 14:06:48 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* ext/syslog/syslog.c (mSyslog_set_mask): ditto.</div><div class='add'>+	* parse.y(freenode),eval.c(Eval): ²òÀÏÌÚ¤ò²òÊü¤·Ëº¤ì¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-Wed Jul  2 18:26:20 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+Mon Jul 18 10:19:15 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* math.c (domain_check): fix preprocess condition.</div><div class='add'>+	* parse.y: Â¿½ÅÂåÆþ¤ò½èÍý¤¹¤ë¥ë¡¼¥ë¤Ë¥Ð¥°¤¬¤¢¤Ã¤Æ, 3Í×ÁÇ°Ê¾å¤ÎÂ¿½Å</div><div class='add'>+	  ÂåÆþ¤Ë¼ºÇÔ¤·¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-Wed Jul  2 18:22:52 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c(rb_eval): Â¿½ÅÂåÆþ¤Ç, ±¦ÊÕ¤¬ÇÛÎó¤Ç¤Ê¤¤»þ¤Ë¤Ï`to_a'¥á¥½¥Ã</div><div class='add'>+	  ¥É¤ÇÇÛÎó¤ËÊÑ´¹¤·¤ÆÂåÆþ¤¹¤ë¤è¤¦¤Ë¤·¤¿. º£¤Þ¤Ç¤Î»ÅÍÍ¤À¤È±¦ÊÕÃÍ¤¬Âè</div><div class='add'>+	  1Í×ÁÇ¤Ë¤½¤Î¤Þ¤ÞÂåÆþ¤µ¤ì¤Æ¤¤¤¿¤¬, struct¤Ê¤ÉÇÛÎó¤ËÊÑ´¹¤Ç¤­¤ë¤â¤Î</div><div class='add'>+	  ¤ÏÊÑ´¹¤·¤¿Êý¤¬´ò¤·¤¤µ¤¤¬¤¹¤ë. </div><div class='ctx'> </div><div class='del'>-	* lib/tmpdir.rb (@@systmpdir): prior LOCAL_APPDATA if possible, and</div><div class='del'>-	  should be clean.  based on a patch from arton &lt;artonx AT</div><div class='del'>-	  yahoo.co.jp&gt; at [ruby-dev:35269]</div><div class='add'>+	* dbm.c,dict.c(delete_if): ¥á¥½¥Ã¥ÉÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-Wed Jul  2 18:16:19 2008  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* process.c(wait,waitpid): ¥·¥¹¥Æ¥à¥³¡¼¥ëwaitpid¤Þ¤¿¤Ïwait4¤¬¤¢¤ë</div><div class='add'>+	  »þ¤Ï¤½¤Á¤é¤ò»È¤¦¤è¤¦¤Ë. configure¤â¤½¤ì¤é¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤ËÊÑ¹¹.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (date2time_str): fix the overflow in</div><div class='del'>-	  some situation. [ruby-bugs-20793]</div><div class='add'>+	* dbm.c, dict.c(clear): ¥á¥½¥Ã¥ÉÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-Tue Jul  1 15:11:14 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Jul 18 10:19:15 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): check if beg is too big.</div><div class='add'>+	* parse.y: Â¿½ÅÂåÆþ¤ò½èÍý¤¹¤ë¥ë¡¼¥ë¤Ë¥Ð¥°¤¬¤¢¤Ã¤Æ, 3Í×ÁÇ°Ê¾å¤ÎÂ¿½Å</div><div class='add'>+	  ÂåÆþ¤Ë¼ºÇÔ¤·¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-Mon Jun 30 20:35:32 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c(rb_eval): Â¿½ÅÂåÆþ¤Ç, ±¦ÊÕ¤¬ÇÛÎó¤Ç¤Ê¤¤»þ¤Ë¤Ï`to_a'¥á¥½¥Ã</div><div class='add'>+	  ¥É¤ÇÇÛÎó¤ËÊÑ´¹¤·¤ÆÂåÆþ¤¹¤ë¤è¤¦¤Ë¤·¤¿. º£¤Þ¤Ç¤Î»ÅÍÍ¤À¤È±¦ÊÕÃÍ¤¬Âè</div><div class='add'>+	  1Í×ÁÇ¤Ë¤½¤Î¤Þ¤ÞÂåÆþ¤µ¤ì¤Æ¤¤¤¿¤¬, struct¤Ê¤ÉÇÛÎó¤ËÊÑ´¹¤Ç¤­¤ë¤â¤Î</div><div class='add'>+	  ¤ÏÊÑ´¹¤·¤¿Êý¤¬´ò¤·¤¤µ¤¤¬¤¹¤ë. </div><div class='ctx'> </div><div class='del'>-	* string.c (str_buf_cat): check for self concatenation.</div><div class='add'>+	* dbm.c,dict.c(delete_if): ¥á¥½¥Ã¥ÉÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 21:39:54 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* process.c(wait,waitpid): ¥·¥¹¥Æ¥à¥³¡¼¥ëwaitpid¤Þ¤¿¤Ïwait4¤¬¤¢¤ë</div><div class='add'>+	  »þ¤Ï¤½¤Á¤é¤ò»È¤¦¤è¤¦¤Ë. configure¤â¤½¤ì¤é¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤ËÊÑ¹¹.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_obj_respond_to): use RTEST to test the result of</div><div class='del'>-	  respond_to? method.</div><div class='add'>+	* dbm.c, dict.c(clear): ¥á¥½¥Ã¥ÉÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 21:20:17 2008  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+Fri Jul 15 10:54:45 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): (compatibility) do not raise</div><div class='del'>-	  ArgumentError on negative length.  This behaviour shall change</div><div class='del'>-	  in a future release.</div><div class='add'>+	* array.c(Fary_fill,Fary_clear): ¥á¥½¥Ã¥É¤òÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 20:08:11 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* string.c(Fstr_split): $;¤ÎÃÍ¤¬Ä¹¤µ1¤ÎÊ¸»úÎó¤Ç¤¢¤ë»þ, ¤³¤ì¤òÀµµ¬</div><div class='add'>+	  É½¸½²½¤·¤Ê¤¤¤Ç, Ã±¤Ê¤ëÊ¸»ú¤È¤·¤ÆÊ¬³ä¤¹¤ë.</div><div class='ctx'> </div><div class='del'>-	* time.c (time_timeval): fix rounding negative float.</div><div class='add'>+	* string.c(Fstr_aset/Fstr_aref): ¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬Ê¸»úÎó¤ÎÈÏ°Ï³°¤À¤Ã</div><div class='add'>+	  ¤¿»þ¤ÎÆ°ºî¤òArray¤ò»²¹Í¤Ë½¤Àµ¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 19:19:08 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* array.c(astore,Fary_aset): ÎÎ°è¤òrealloc¤·¤¿¸å, ¥¼¥í¤Ç¥¯¥ê¥¢¤¹¤ë</div><div class='add'>+	  ¤è¤¦¤Ë. º£¤Þ¤ÇÇÛÎó¤Ë¥´¥ß¤¬Æþ¤Ã¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-	* test/inlinetest.rb (InlineTest.in_progname): workaround for frozen</div><div class='del'>-	  $0.  [ruby-dev:35261]</div><div class='add'>+	* array.c: []/[]=¤Ç¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹´Ø·¸¤òÀ°Íý. ´ðËÜÅª¤ËÉé¤Î¥¤¥ó¥Ç¥Ã</div><div class='add'>+	  ¥¯¥¹¤ËÂåÆþ¤·¤Ê¤¤¸Â¤êÎã³°¤Ïµ¯¤­¤Ê¤¤¤è¤¦¤ËÊÑ¹¹¤·¤¿. É¬Í×¤Ë±þ¤¸¤ÆÅ¬</div><div class='add'>+	  Åö¤Ë²ò¼á¤·¤Æ, É¬Í×¤Ê¤é¤ÐÎÎ°è¤ò³ÈÄ¥¤¹¤ë¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-	* lib/test/unit/ui/console/testrunner.rb (TestRunner#finished): ditto.</div><div class='add'>+Thu Jul 14 11:18:07 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 19:19:08 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c: ¥á¥½¥Ã¥É¤¬Â¸ºß¤·¤Ê¤¤»þ¤Ë¤ÏKernel:_undefined(id)¤¬¸Æ¤Ð¤ì</div><div class='add'>+	  ¤ë¤è¤¦¤Ë.  ¤·¤«¤·, ruby¤Ç¤Ï¸Ä¡¹¤Î¥á¥½¥Ã¥ÉËè¤Î½èÍý¤è¤ê¤â, ¥¯¥é¥¹</div><div class='add'>+	  Ã±°Ì¤Î½èÍý¤¬É¬Í×¤Êµ¤¤â¤¹¤ë¤Ê¤¢.</div><div class='ctx'> </div><div class='del'>-	* ruby.c (set_arg0, ruby_prog_init): freeze $0.  a patch from Keita</div><div class='del'>-	  Yamaguchi &lt;keita.yamaguchi at gmail.com&gt;.</div><div class='add'>+	* autoexec.c: ºï½ü. autoload´Ø·¸¤Îµ¡Ç½¤Ïº£¸å¸¡Æ¤¤·¤è¤¦.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 18:33:33 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* dict.c: ¼­½ñ¥¯¥é¥¹¤ÎÀµ¼°Ì¾¾Î¤òDict¤ËÊÑ¹¹¤·¤¿. ÊÌÌ¾¤È¤·¤ÆHash¤òÍÑ</div><div class='add'>+	  °Õ¤·¤¿. º£¤Þ¤ÇDictionary¤Ê¤É¤ÈÄ¹¤¤Ì¾Á°¤Ë¤·¤Æ¤¤¤¿¤¬Ã¯¤â»È¤Ã¤Æ¤¤¤Ê</div><div class='add'>+	  ¤«¤Ã¤¿¤·¤Í. *BACKWARD INCOMPATIBILITY*</div><div class='ctx'> </div><div class='del'>-	* process.c: include sys/resource.h if HAVE_SYS_RESOURCE_H is defined.</div><div class='del'>-	  pointed by TOYOFUKU Chikanobu.  [ruby-dev:35258]</div><div class='add'>+	* parse.y: Dict¤òÀ¸À®¤¹¤ë¹½Ê¸¤òÄÉ²Ã. ¤³¤Á¤é¤ò{..}¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 18:26:01 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: ÇÛÎó¤òÀ¸À®¤¹¤ë¹½Ê¸¤ò[..]¤ËÊÑ¹¹¤·¤¿. ²áµî¤ÎRuby¥¹¥¯¥ê¥×</div><div class='add'>+	  ¥È¤È¤Î¸ß´¹À­¤¬ÊÝ¤Æ¤Ê¤¤¤¬, Dict¤òÀ¸À®¤¹¤ë¹½Ê¸¤òÆ³Æþ¤¹¤ë¤ËÅö¤¿¤ê,</div><div class='add'>+	  perl5¤Ë¹ç¤ï¤»¤Æ(°Õ¼±¤·¤Æ), ÊÑ¹¹¤¹¤ë»þ´ü¤Ïº£¤·¤«¤Ê¤¤¤È¹Í¤¨¤¿. </div><div class='add'>+	  *BACKWARD INCOMPATIBILITY*</div><div class='ctx'> </div><div class='del'>-	* variable.c (rb_f_trace_var): should not be allowed at safe level 4.  </div><div class='del'>-	  a patch from Keita Yamaguchi &lt;keita.yamaguchi at gmail.com&gt;.</div><div class='add'>+	* eval.c(Feval): eval()¤Ç¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë»þ, ÄêµÁ¤µ¤ì¤ë¥¯¥é¥¹¤ò</div><div class='add'>+	  ¥á¥½¥Ã¥É¤Î½êÂ°¤¹¤ë¥¯¥é¥¹¤Ë¤·¤¿. º£¤Þ¤Ç¤ÏObject¥¯¥é¥¹¤ËÄêµÁ¤µ¤ì¤Æ</div><div class='add'>+	  ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): wrong condition to check insecure method.</div><div class='del'>-	  a patch from Keita Yamaguchi &lt;keita.yamaguchi at gmail.com&gt;.</div><div class='add'>+	* parse.y: ¥í¡¼¥«¥ë°ú¿ô¤¬¤Ê¤¤»þ¤Îeval()¤ÇÍî¤Á¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 18:22:52 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Tue Jul 12 09:41:28 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_fill): not depend on unspecified behavior at integer</div><div class='del'>-	  overflow.  reported by Vincenzo Iozzo &lt;snagg AT openssl.it&gt;.</div><div class='add'>+	* pack.c: uuencode·Á¼°¤Î¥µ¥Ý¡¼¥È.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 18:22:06 2008  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='add'>+	* `-0'¤ò`-R'¤Ë. ½ÐÎÏ¥ì¥³¡¼¥É¥»¥Ñ¥ì¡¼¥¿¤ò¥³¥Þ¥ó¥É¥é¥¤¥ó¤«¤é»ØÄê¤¹¤ë</div><div class='add'>+	  ÊýË¡¤Ï¤Ê¤¯¤Ê¤Ã¤¿. ¤É¤¦¤â, »ÅÍÍ¤¬¤æ¤ì¤ë¤Ê¤¢.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c(ole_invoke): fix memory leak.</div><div class='del'>-	  [ruby-bugs-20792]</div><div class='add'>+Mon Jul 11 09:51:24 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 18:19:11 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* ruby.c: `-r'¥ª¥×¥·¥ç¥ó¤Ï`-0'¥ª¥×¥·¥ç¥ó¤Ë¤Ê¤Ã¤¿. ÅöÌÌ¤Ï`-r'¤âÍ­¸ú</div><div class='add'>+	  ¤À¤¬ÊÑ¹¹¤µ¤ì¤ë²ÄÇ½À­¤¬¤¢¤ë. `-R'¤ÏÅöÌÌ¤Ï¤½¤Î¤Þ¤Þ.</div><div class='ctx'> </div><div class='del'>-	* eval.c (PUSH_FRAME, PUSH_CLASS): Add volatile to avoid a</div><div class='del'>-	  possible optimization bug on OS X/PPC.  This at least makes</div><div class='del'>-	  build with gcc -O1 and `make test' pass.</div><div class='add'>+	* version.c: versionÉ½¼¨¤ËÆüÉÕ¤ò´Þ¤á¤¿.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 17:24:43 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: private method¤ÎÉü³è. Ruby¤Îprivate¥á¥½¥Ã¥É¤ÏC++¤Ë¤ª¤±</div><div class='add'>+	  ¤ëprotected method¤Ë³ºÅö¤¹¤ë¤â¤Î¤Ç, `@'¤Ç»Ï¤Þ¤ëÌ¾Á°¤ò»ý¤Ä.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb (RDoc#collect_first_comment): skip</div><div class='del'>-	  magic comment.</div><div class='add'>+	* env.h: struct ENVIRON¤ÎÄêµÁ¤òÊ¬Î¥.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 17:22:09 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: `\$var', `\@var', `%var'¤âµö¤¹¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_each, strio_readlines): IO#each and</div><div class='del'>-	  IO#readlines do not affect $_.  [ruby-core:17277]</div><div class='add'>+	* variable.c(Fdefined): id¤â°ú¿ô¤È¤·¤Æ¼õ¤±ÉÕ¤±¤ë¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 17:19:59 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* parse.y: ifÊ¸/unlessÊ¸¤Ë¥­¡¼¥ï¡¼¥Éthen¤òÄÉ²Ã. then¤Ê¤·¤È¤¤¤¦¤Î¤Ï, </div><div class='add'>+	  °Õ³°¤È´Ö°ã¤¤¤¬Â¿¤¤¤Î¤Ç. ¤â¤Á¤í¤ó¾ÊÎ¬¤Ç¤­¤ë.</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_readline, strio_each)</div><div class='del'>-	  (strio_readlines): set lastline.  [ruby-core:17257]</div><div class='add'>+Sat Jul  9 02:16:04 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 17:15:49 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* eval.c(rb_eval): class/module¤ÎÉ¾²Á¤Ç¿·¤·¤¤¥¹¥³¡¼¥×¤ò³ä¤êÅö¤Æ¤Æ</div><div class='add'>+	  ¤¤¤Ê¤«¤Ã¤¿. ¥¹¥³¡¼¥×³ä¤êÅö¤ÆÉôÊ¬¤òrb_call()¤«¤érb_eval()¤Ë°Ü¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: include winsock.h if USE_WINSOCK2 is not defined.</div><div class='del'>-	  a patch from arton &lt;artonx at yahoo.co.jp&gt; in [ruby-dev:35078]</div><div class='add'>+	* eval.c(rb_call): realloc()¤ËÅÏ¤µ¤ì¤ë»ö¤Î¤¢¤ë, ¥í¡¼¥«¥ëÊÑ¿ôÍÑ¤ÎÎÎ</div><div class='add'>+	  °è¤òalloca()¤·¤Æ¤¤¤¿. ¤¿¤Þ¤ËÍî¤Á¤ë¤ï¤±¤À.</div><div class='ctx'> </div><div class='del'>-Sun Jun 29 17:09:48 2008  wanabe  &lt;s.wanabe@gmail.com&gt;</div><div class='add'>+	* string.c(Fstr_times): ³ä¤êÅö¤Æ¤¿ÎÎ°è¤ò±Û¤¨¤¿ÉôÊ¬¤òÊÑ¹¹¤·¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod): ruby_strtod don't allow a trailing</div><div class='del'>-	  decimal point like "7.". [ruby-dev:34835] [ruby-dev:35009]</div><div class='add'>+Wed Jul  6 15:52:42 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Sat Jun 28 19:23:40 2008  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+	* socket.c: Socket -&gt; BasicSocket, RawSocket -&gt; Socket ¤Ë²þÌ¾.</div><div class='ctx'> </div><div class='del'>-	* class.c (clone_method): use rb_copy_node_scope.</div><div class='del'>-	  fixed [ruby-list:45102]</div><div class='del'>-	  fixed [ruby-core:17393]</div><div class='add'>+	* string.c(ucfirst,lcfirst): ºÇ½é¤Î1Ê¸»ú¤À¤±¤ÎÂçÊ¸»ú/¾®Ê¸»úÊÑ´¹.</div><div class='ctx'> </div><div class='del'>-Sat Jun 28 18:49:50 2008  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c(chr): À°¿ô¤ÎÊ¸»úÎó²½¥á¥½¥Ã¥É.</div><div class='ctx'> </div><div class='del'>-	* class.c: revert to r15855.</div><div class='add'>+	* inits.c, dbm.c: DBM¤¬»È¤¨¤Ê¤¤»þ¤Ï¥¯¥é¥¹¤½¤Î¤â¤Î¤òÄêµÁ¤·¤Ê¤¤¤è¤¦</div><div class='add'>+	  ¤Ë¤·¤¿.  ÍøÍÑ¤Ç¤­¤Ê¤¤¥¯¥é¥¹¤Ïnil¤È¤¹¤ë¤³¤È¤òº£¸å¤Î¥Ý¥ê¥·¡¼¤È¤·¤è</div><div class='add'>+	  ¤¦(¤¤¤Þ¤Þ¤Ç¤Ï¥¢¥¯¥»¥¹¤·¤¿»þÅÀ¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤¤¤¿). autoexec()</div><div class='add'>+	  ¤Î¤¢¤êÊý¤â¸¡Æ¤¤¬É¬Í×¤Ë¤Ê¤ê¤½¤¦¤À.</div><div class='ctx'> </div><div class='del'>-Fri Jun 20 18:25:18 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* bignum.c(bigadd): ¥Ð¥°½¤Àµ.</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_buf_append): should infect.</div><div class='add'>+Thu Jul  7 11:12:18 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Fri Jun 20 16:33:09 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* eval.c(Fload,Feval): eval_tree¤ò¥¯¥ê¥¢¤·Ëº¤ì¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_store, rb_ary_splice): not depend on unspecified</div><div class='del'>-	  behavior at integer overflow.</div><div class='add'>+	* _inspect: ¥ª¥Ö¥¸¥§¥¯¥È¤ò²ÄÆÉ·Á¼°¤ÎÊ¸»úÎó¤ËÊÑ´¹¤¹¤ë(¼ç¤Ë¥Ç¥Ð¥Ã¥°</div><div class='add'>+	  ½ÐÎÏÍÑ).</div><div class='ctx'> </div><div class='del'>-	* string.c (str_buf_cat): ditto.</div><div class='add'>+Wed Jul  6 00:57:18 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-Wed Jun 18 22:24:46 2008  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='add'>+	* numeric.c, bignum.c: À°¿ô¤ËÂÐ¤¹¤ë`[]'±é»»»Ò. n¥Ó¥Ã¥ÈÌÜ¤¬¥»¥Ã¥È¤µ</div><div class='add'>+	  ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤òÊÖ¤¹.</div><div class='ctx'> </div><div class='del'>-	* array.c (ary_new, rb_ary_initialize, rb_ary_store,</div><div class='del'>-	  rb_ary_aplice, rb_ary_times): integer overflows should be</div><div class='del'>-	  checked. based on patches from Drew Yao &lt;ayao at apple.com&gt;</div><div class='del'>-	  fixed CVE-2008-2726</div><div class='add'>+Tue Jul  5 12:48:39 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_buf_append): fixed unsafe use of alloca,</div><div class='del'>-	  which led memory corruption. based on a patch from Drew Yao</div><div class='del'>-	  &lt;ayao at apple.com&gt; fixed CVE-2008-2726</div><div class='add'>+	* io.c(Feof): ÄÉ²Ã. ¥³¥Þ¥ó¥É¥é¥¤¥ó¤«¤é¤Ê¤ë²¾ÁÛ¥Õ¥¡¥¤¥ë¤Ë¤Ä¤¤¤Æ¤â</div><div class='add'>+	  EOF¤¬¸¡½Ð¤Ç¤­¤ë¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-	* sprintf.c (rb_str_format): backported from trunk.</div><div class='add'>+	* ruby.c: -l/-r/-R/-X¥ª¥×¥·¥ç¥ó¤ÎÄÉ²Ã.</div><div class='add'>+	</div><div class='add'>+	* ruby.c: -n/-p¥ª¥×¥·¥ç¥ó¤Îloop¤ÎÉÕ²Ã¤Ê¤É¤ò¥á¥¤¥ó¥ë¡¼¥Á¥ó¤Ë°ÜÆ°¤·</div><div class='add'>+	  ¤¿. ¤³¤ì¤Ç, ¥ª¥×¥·¥ç¥ó¤Î²òÀÏÅÓÃæ¤Ç(`-c'¥ª¥×¥·¥ç¥ó¤Î¤»¤¤¤Ç)½ªÎ»¤Ê</div><div class='add'>+	  ¤É¤È¤¤¤Ã¤¿¤³¤È¤Ï¤Ê¤¤.</div><div class='ctx'> </div><div class='del'>-	* intern.h: ditto.</div><div class='add'>+	* io.c(Fgets): ¹âÂ®²½. ¶Å¤Ã¤¿¤³¤È¤ò¤·¤Ê¤¤Êý¤¬Â®¤«¤Ã¤¿. µõ¤·¤¤.</div><div class='ctx'> </div><div class='del'>-Tue Jun 17 15:09:46 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Mon Jul  4 15:55:48 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* file.c (file_expand_path): no need to expand root path which has no</div><div class='del'>-	  short file name.  [ruby-dev:35095]</div><div class='add'>+	* Socket:getsockname/getpeername - ¤è¤¦¤ä¤¯»ÅÍÍ¤¬°ÂÄê¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Sun Jun 15 19:27:40 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* io.c(Fgets): each¤Çgets¤òµ­½Ò¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯, gets¤Çeach¤òµ­½Ò¤¹</div><div class='add'>+	  ¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* configure.in: Fix $LOAD_PATH.  Properly expand vendor_ruby</div><div class='del'>-	  directories; submitted by Takahiro Kambe &lt;taca at</div><div class='del'>-	  back-street.net&gt; in [ruby-dev:35099].</div><div class='add'>+Fri Jul  1 10:35:49 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Mon Jun  9 17:56:30 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* $ENV[env] = nil/$ENV.delete(env)¤Ç´Ä¶­ÊÑ¿ô¤òºï½ü¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã</div><div class='add'>+	  ¤¿. $ENV.delete¤Ï´Ä¶­ÊÑ¿ô¤Î°ÊÁ°¤ÎÃÍ¤òÊÖ¤¹.</div><div class='ctx'> </div><div class='del'>-	* lib/set.rb (Set#delete_if): Call to_a.</div><div class='del'>-	  (SortedSet#delete_if, TC_SortedSet#test_sortedset): Use super to</div><div class='del'>-	  yield elements in sorted order; [ruby-core:17144] by Arthur</div><div class='del'>-	  Schreiber.</div><div class='del'>-	  (SortedSet#each, SortedSet#each, TC_Set#test_each)</div><div class='del'>-	  (TC_SortedSet#test_sortedset): Return self; [ruby-dev:35002] by</div><div class='del'>-	  Arthur Schreiber.</div><div class='add'>+	* !~¤ÎÄêµÁ¤¬´Ö°ã¤Ã¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-Mon Jun  9 03:28:05 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* Dict,DBM:[]= - nil¤ÎÂåÆþ¤Ë¤è¤Ã¤ÆÍ×ÁÇ¤òºï½ü¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿. ¤³</div><div class='add'>+	  ¤ì¤Ë¤È¤â¤Ê¤¤nil¤ÏDict¤ÎÍ×ÁÇ¤Ë¤Ê¤ì¤Ê¤¯¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/zlib.c (rb_deflate_initialize, Init_zlib): Fix up</div><div class='del'>-	  initialize_copy; [ruby-list:45016], [ruby-list:45018].</div><div class='add'>+	* ¥½¡¼¥¹¤ÎÀ°Íý. ÌÕÄ²¤Î¤è¤¦¤Ê»È¤ï¤ì¤Æ¤¤¤Ê¤¤¥³¡¼¥É¤ò¤Ê¤¯¤·¤¿¤ê, ÊÑ¿ô</div><div class='add'>+	  Ì¾¤òÉÕ¤±ÊÑ¤¨¤¿¤ê¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Mon Jun  9 03:26:03 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+Fri Jul  1 00:21:29 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-	* NEWS: Mention new constants.</div><div class='add'>+	* Array:join() - Í×ÁÇ¿ô0¤ÎÇÛÎó¤ËÂÐ¤·¤Æ¶õÊ¸»úÎó¤òÊÖ¤¹.</div><div class='ctx'> </div><div class='del'>-Mon Jun  9 03:24:18 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* RawSocket:open(),socketpair() - Ê¸»úÎó¤Ç»ØÄê¤Ç¤­¤ë¥É¥á¥¤¥ó¤È¥¿¥¤</div><div class='add'>+	  ¥×¤ò¤¤¤¯¤Ä¤«ÄÉ²Ã¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* hash.c (hash_i): make Hash#hash order insensitive.</div><div class='add'>+Thu Jun 30 13:51:29 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Mon Jun  9 03:22:43 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* -f¥ª¥×¥·¥ç¥ó¤ò¤Ê¤¯¤·¤¿. ÀÎ(load¤Î¤Ê¤«¤Ã¤¿º¢)¤ÎÌ¾»Ä¤Ê¤Î¤Ç, º£¤È¤Ê¤Ã</div><div class='add'>+	  ¤Æ¤ÏÉ¬Í×¤Ê¤¤¤À¤í¤¦.</div><div class='ctx'> </div><div class='del'>-	* configure.in (VENDOR_DIR): use LIBDIR instead of PREFIX as well as</div><div class='del'>-	  SITE_DIR.  a patch from Richard Brown &lt;rbrown AT exherbo.org&gt; in</div><div class='del'>-	  [ruby-core:17129].</div><div class='add'>+	* -s¥ª¥×¥·¥ç¥ó¤òÄÉ²Ã. perl¤Î-s¥ª¥×¥·¥ç¥ó¤ÈÆ±¤¸Æ°¤­¤ò¤¹¤ë.</div><div class='ctx'> </div><div class='del'>-Mon Jun  9 03:21:20 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='add'>+	* RawSocket¥¯¥é¥¹¤òÄó¶¡¤¹¤ë. Socket¤ËÂÐ¤¹¤ë¥·¥¹¥Æ¥à¥³¡¼¥ë¥ì¥Ù¥ë¤Î</div><div class='add'>+	  ¥¢¥¯¥»¥¹¤¬²ÄÇ½¤Ë¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* gc.c (os_obj_of): assure to not free the scanning heap.</div><div class='add'>+Thu Jun 30 00:27:19 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-Mon Jun  9 03:20:12 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* Socket - bug fixes.</div><div class='ctx'> </div><div class='del'>-	* io.c (rb_open_file, rb_io_s_sysopen): fmode should be unsigned int.</div><div class='del'>-	  fixed [ruby-dev:34979]</div><div class='add'>+	* linux¤Ç¤Ïsyscall(SYS_select)¤¬Àµ¾ï¤ËÆ°ºî¤·¤Ê¤¤.</div><div class='ctx'> </div><div class='del'>-Fri Jun  6 21:16:55 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+	* Socket:addr,peeraddr - ÇÛÎó¤È¤·¤Æsockaddr¤Î¾ðÊó¤òÊÖ¤¹.</div><div class='ctx'> </div><div class='del'>-	* win32/Makefile.sub (COMMON_HEADERS): include ws2tcpip.h.</div><div class='add'>+Wed Jun 29 00:14:20 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-	* ext/socket/addrinfo.h (addrinfo, getaddrinfo, getnameinfo,</div><div class='del'>-	  freehostent, freeaddrinfo): undef before define because these are</div><div class='del'>-	  macros in some versions of Windows SDK.</div><div class='add'>+	* Socket:setopt,getopt - setsockopt(2), getsockopt(2)¤Ø¤Î¥¢¥¯¥»¥¹</div><div class='add'>+	  ¤ò¼Â¸½.</div><div class='ctx'> </div><div class='del'>-	* win32/setup.mak: maybe commit miss.</div><div class='add'>+	* sprintf() - ruby¤Ë¤Ïunsigned¤ÏÌµ¤¤¤Î¤Ç, %u¤ò¼è¤ê½ü¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-Fri Jun  6 19:34:22 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* sprintf() - %b, %x, %o¤Ç¤Ï2¤ÎÊä¿ôÉ½¸½, %B, %X, %O¤Ç¤ÏÉä¹æÉÕ¤­É½</div><div class='add'>+	  ¸½¤Ç½ÐÎÏ¤¹¤ë¤è¤¦¤Ë. ¤³¤³¿ôÆü¤Çsprintf()¤Î»ÅÍÍ¤¬¤æ¤é¤¤¤Ç¤¤¤¿¤¬, </div><div class='add'>+	  ¤³¤ì¤ÇÍî¤ÁÃå¤­¤½¤¦¤À.</div><div class='ctx'> </div><div class='del'>-	* mkconfig.rb: hide build path from rbconfig.rb.</div><div class='add'>+Tue Jun 28 14:42:03 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* util.c (ruby_strtod, dtoa): initialize more variables for error</div><div class='del'>-	  handling.</div><div class='add'>+	* Bignum:&lt;&lt;,&gt;&gt; - 2¤ÎÊä¿ô¤ò¤È¤ë½èÍý¤ò½ü¤¤¤¿. ¥·¥Õ¥È±é»»¤Ë¤Ï´Ø·¸¤Ê¤¤</div><div class='add'>+	  ½èÍý¤À¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* io.c (rscheck), marshal.c (w_nbyte, w_bytes, w_unique),</div><div class='del'>-	  (path2class, path2module): constified.</div><div class='add'>+	* Bignum:^ - bug fix. Éä¹ç¤¬È¿ÂÐ¤À¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* pack.c (pack_unpack), process.c (rb_syswait): suppress warnings.</div><div class='add'>+	* sprintf() - 2¿Ê½ÐÎÏ»Ò"%b"¤òÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-	* suppress warnings on cygwin, mingw and mswin.</div><div class='add'>+	* sprintf() - %x, %o¤ÇFixnum¤ò½ÐÎÏ¤¹¤ë»þ, 2¤ÎÊä¿ôÉ½¼¨¤ò¹Ô¤Ê¤ï¤Ê¤¤.</div><div class='ctx'> </div><div class='del'>-Fri Jun  6 19:23:53 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* sprintf() - %x, %o¤Ï¤ä¤Ï¤êÉé¤Î¿ô¤Î»þ¤Ï`-'¤ò½ÐÎÏ¤¹¤ë¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-	* file.c (file_expand_path): fix for non-existent files and SFN of</div><div class='del'>-	  symlinks.  [ruby-talk:303736]</div><div class='add'>+Mon Jun 27 14:56:13 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Fri Jun  6 18:25:43 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* sprintf() - Bignum¤Ë¤Ä¤¤¤Æ¤â%d, %o¤Ï(2¤ÎÊä¿ôÉ½¸½¤ËÊÑ´¹¤·¤Æ)Àµ¤Î</div><div class='add'>+	  À°¿ô¤òÉ½¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* test/iconv: Tests fixed.</div><div class='add'>+	* Bignum¤ËÂÐ¤¹¤ëÏÀÍý±é»»¤ÎÄêµÁ¤ò½¤Àµ¤·¤¿. Éé¤Î¿ô¤Ï2¤ÎÊä¿ôÉ½¸½¤Ç¤¢</div><div class='add'>+	  ¤ë¤È¤ß¤Ê¤·, ¤«¤Ä²¾ÁÛÅª¤Ëº¸Â¦¤ËÌµ¸Â¤Ë1¤¬Ï¢Â³¤·¤Æ¤¤¤ë¤è¤¦¤Ê±é»»·ë</div><div class='add'>+	  ²Ì¤òÆÀ¤ë.</div><div class='ctx'> </div><div class='del'>-Fri Jun  6 17:04:56 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* Fixnum:&lt;&lt;,&gt;&gt; - Éä¹çÉÕ¥·¥Õ¥È¤ËÊÑ¹¹.</div><div class='ctx'> </div><div class='del'>-	* win32/win32.h: include ws2tcpip.h. fixed [ruby-Bugs-20528]</div><div class='add'>+	* Bignum:&gt;&gt; - Éé¤ÎÀ°¿ô¤Î¥·¥Õ¥È¤ËÂÐ±þ¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* lib/time.rb (Time.xmlschema): don't use float.  fix</div><div class='del'>-	  http://rubyforge.org/tracker/index.php?func=detail&amp;group_id=426&amp;atid=1698&amp;aid=20504</div><div class='add'>+	* __END__, ^D, ^Z¤Ç¥¹¥¯¥ê¥×¥È¤ò½ªÎ»¤Ç¤­¤ë.</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_obj_alloc): RDoc updated.  a patch from Gaston</div><div class='del'>-	  Ramos &lt;ramos.gaston at gmail.com&gt; in [ruby-core:17073].</div><div class='add'>+	* -x¥ª¥×¥·¥ç¥ó¤òÄÉ²Ã. #! ..ruby¤Ê¤ë¹Ô¤Þ¤ÇÆÉ¤ßÈô¤Ð¤¹.</div><div class='ctx'> </div><div class='del'>-	* lib/rdoc.rb: massive spelling correction patch from Evan Farrar</div><div class='del'>-	  &lt;evanfarrar at gmail.com&gt; in [ruby-doc:1382] applied.</div><div class='add'>+	* -c¥ª¥×¥·¥ç¥ó¤òÄÉ²Ã. ¥³¥ó¥Ñ¥¤¥ë¤Î¤ß¤ò¹Ô¤¦.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl_session.c (ossl_ssl_session_initialize):</div><div class='del'>-	  Add a null check for ssl; submitted by akira yamada</div><div class='del'>-	  in [ruby-dev:34950].</div><div class='add'>+Sat Jun 25 01:37:21 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_ssl.c (Init_ossl_ssl): Define OP_NO_TICKET if</div><div class='del'>-	  SSL_OP_NO_TICKET is present; submitted by akira yamada</div><div class='del'>-	  in [ruby-dev:34944].</div><div class='add'>+	* Fixnum:&lt;&lt; - É¬Í×¤Ë±þ¤¸¤ÆBignum¤Ë³ÈÄ¥¤·¤Æº¸¥·¥Õ¥È¤¹¤ë¤è¤¦¤Ë. ¤è¤Ã</div><div class='add'>+	  ¤Æ, ¥·¥Õ¥ÈÉý¤¬32¤ò±Û¤¨¤ë¤ÈC¤äPerl¤È¤Ï°ã¤Ã¤¿ÃÍ¤òÊÖ¤¹.</div><div class='ctx'> </div><div class='del'>-	* test/openssl/test_ssl.rb (OpenSSL#test_server_session): Add a</div><div class='del'>-	  workaround for the case where OpenSSL is configured with</div><div class='del'>-	  --enable-tlsext; submitted by akira yamada in [ruby-dev:34944].</div><div class='add'>+Fri Jun 24 10:01:28 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Fri Jun  6 16:58:23 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* ioctl()/fcntl() - ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò¸Æ¤Ó½Ð¤¹Á°¤Ë¥Ð¥Ã¥Õ¥¡¤ÎÂç¤­¤µ¤ò</div><div class='add'>+	  Ä´Àá¤¹¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/iconv/iconv.c (iconv_iconv): fix for length argument and now</div><div class='del'>-	  allows range.  [ruby-core:17092] [ruby-core:17115]</div><div class='add'>+	* String:toupper/tolower - Ê¸»úÎó¤òÃÖ¤­´¹¤¨¤¿¥³¥Ô¡¼¤òºî¤ë¤Î¤Ç¤Ï¤Ê</div><div class='add'>+	  ¤¯, ¸µ¤ÎÊ¸»úÎó¤ÎÆâÍÆ¤òÊÑ¹¹¤¹¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Wed Jun  4 17:22:30 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* inplace edit¤ò¼Â¸½¤·¤¿. perl¤ÈÆ±¤¸¤è¤¦¤Ë`-i'¥ª¥×¥·¥ç¥ó¤Ç»ØÄê¤¹¤ë.</div><div class='add'>+	  ¤â¤Ã¤È¤â, ¤³¤Á¤é¤ÏMS-DOS¤Î¤³¤È¤È¤«¹Í¤¨¤Æ¤Ê¤¤¤±¤É.</div><div class='ctx'> </div><div class='del'>-	* NEWS: Fix typos and move misplaced entries.</div><div class='del'>-	  NEWS: Somehow optflags and warnflags were not actually included</div><div class='del'>-	  in this release.</div><div class='add'>+	* ¥Ç¥Õ¥©¥ë¥È¤Î½ÐÎÏÀè¤òÄÉ²Ã¤·¤¿. º£¤Þ¤Ç¤Ï$stdout¤ËÂåÆþ¤¹¤ë¤·¤«ÊýË¡</div><div class='add'>+	  ¤Ï¤Ê¤«¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-Tue Jun  3 19:33:22 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Fri Jun 17 10:55:08 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* enumerator.c (enumerator_init_copy): Take care of</div><div class='del'>-	  initialize_copy as well as initialize.</div><div class='add'>+	* ´Ä¶­ÊÑ¿ô¤Ë¥¢¥¯¥»¥¹¤¹¤ëÊýË¡¤È¤·¤Ægetenv()/setenv()°Ê³°¤Ë$ENV¤òÍÑ</div><div class='add'>+	  °Õ¤·¤¿. $ENV¤ÏÊ¸»úÎó-Ê¸»úÎó¤Î¼­½ñ¤Ç¤¢¤ë¤«¤Î¤è¤¦¤ËÆ°ºî¤¹¤ëEnvDict</div><div class='add'>+	  ¥ª¥Ö¥¸¥§¥¯¥È¤¬ÂåÆþ¤µ¤ì¤Æ¤¤¤ë(each¤Ïassoc¤òÍ¿¤¨¤ë).</div><div class='ctx'> </div><div class='del'>-	* test/ruby/test_enumerator.rb: Pull in the test suite for</div><div class='del'>-	  enumerator from trunk.</div><div class='add'>+	* nil¤ËÂåÆþ¤¹¤ë¤Ècore dump¤·¤¿. ¥³¥ó¥Ñ¥¤¥ë»þ¤Î¥Á¥§¥Ã¥¯¤ò¶¯²½.</div><div class='ctx'> </div><div class='del'>-Tue Jun  3 12:51:57 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* Struct: struct_new()¤Î°ú¿ô¤òGC¥×¥í¥Æ¥¯¥È¤¹¤ëÉ¬Í×¤¬¤¢¤ë. ¤»¤á¤Æ¥¹</div><div class='add'>+	  ¥¿¥Ã¥¯ÎÎ°è¤À¤±¤Ç¤â¥¹¥­¥ã¥ó¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤¤ó¤À¤í¤¦</div><div class='add'>+	  ¤«? ¤Ç¤â, °Ü¿¢À­¤¬¤Ê¤¢.</div><div class='ctx'> </div><div class='del'>-	* enumerator.c (enumerator_allocate, enumerator_ptr): Properly</div><div class='del'>-	  detect if the object is initialized and raise error when</div><div class='del'>-	  appropriate.</div><div class='del'>-	  (enumerator_initialize): Fix a typo in rdoc. [ruby-core:17052]</div><div class='add'>+Fri Jun 17 01:01:46 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-Tue Jun  3 10:16:40 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* Time::asctime() - ÆüÉÕ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ÇÆü¤¬Íî¤Á¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-	* lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Fix a bug</div><div class='del'>-	  where tokens are not yilelded one by one.</div><div class='del'>-	  (ERB::Compiler::TrimScanner#explicit_trim_line): Fix without-</div><div class='del'>-	  strscan problems. [ruby_core:17028].</div><div class='add'>+	* Stat: Stat¤ÏEtc¤Ê¤É¤ÈÆ±ÍÍ¤ËStruct¤Ç¼Â¸½¤·¤¿¤Î¤Ç, Stat¥¯¥é¥¹¤ÏÌµ</div><div class='add'>+	  ¤¯¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* test/erb/test_erb.rb (TestERBCore#_test_01)</div><div class='del'>-	  (TestERBCore#test_02_safe_04): The expected value should come</div><div class='del'>-	  first for assert_equal().</div><div class='del'>-	  (TestERBCoreWOStrScan): Add test class for without-strscan.</div><div class='add'>+Thu Jun 16 10:32:23 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Mon Jun  2 19:47:16 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* bignum.c: ¤¤¤¯¤Ä¤«¤Î¥Ð¥°¤ò½¤Àµ¤·¤¿. Fixnum¤òÅÏ¤¹¤Ù¤­¤È¤³¤í¤ÇÉáÄÌ</div><div class='add'>+	  ¤Îint¤òÅÏ¤·¤Æ¤¤¤¿. ¼ºÇÔ.</div><div class='ctx'> </div><div class='del'>-	* lib/delegate.rb (DelegateClass, Delegator#respond_to?):</div><div class='del'>-	  respond_to? must take optional second argument.  This was a</div><div class='del'>-	  latent bug exposed by a recent internal change of marshal.c to</div><div class='del'>-	  call respond_to? with a second argument; submitted by Jeremy</div><div class='del'>-	  Kemper &lt;jeremy at bitsweat.net&gt; in [ruby-core:17045].</div><div class='add'>+	* big2str() - 1·å¤º¤Äbase¤Ç³ä¤ëÂå¤ï¤ê¤Ë, 4·å¤º¤Ä³ä»»¤ò¹Ô¤Ê¤¦¤è¤¦¤Ë</div><div class='add'>+	  ¤·¤¿. ¤³¤ì¤ÇÂ¿ÇÜÄ¹³ä»»¤Î²ó¿ô¤¬1/4¤Ë¤Ê¤ë. ¤µ¤é¤ËÀ°¿ô-&gt;¿ô(Ê¸»ú)¤Ø</div><div class='add'>+	  ¤ÎÊÑ´¹¤ò¥Æ¡¼¥Ö¥ë¤òÍÑ¤¤¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Sat May 31 23:53:35 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* rb_ivar_get_1() - ¤¹¤Ç¤Ë²¿¤é¤«¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ò»ý¤Ä¥ª¥Ö¥¸¥§¥¯</div><div class='add'>+	  ¥È¤Ç¤Ï, Ì¤ÄêµÁ¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ÎÃÍ¤¬ÉÔÄêÃÍ¤Ë¤Ê¤Ã¤Æ¤¤¤¿.</div><div class='ctx'> </div><div class='del'>-	* .: Release as Ruby 1.8.7.</div><div class='add'>+	* yylex() - ¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ÎÇ§¼±¤Ë¼ºÇÔ¤·¤Æ¤¤¤¿. attr()¤ÏÀµ¤·¤¯Æ°</div><div class='add'>+	  ºî¤·¤Æ¤¤¤¿¤Î¤Ç, º®ÍÑ¤¹¤ë¤ÈÆ°ºî¤·¤Ê¤«¤Ã¤¿. Á´Éô°ã¤Ã¤Æ¤¤¤¿¤«¤éÆ°¤¤</div><div class='add'>+	  ¤Æ¤¤¤¿¤Î¤Í.</div><div class='ctx'> </div><div class='del'>-Sat May 31 23:33:34 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* Object:attr() - ¤¹¤Ç¤Ë¥¢¥¯¥»¥¹¥á¥½¥Ã¥É¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë»þ¤Ë¤Ï¥Ç¥Õ¥©</div><div class='add'>+	  ¥ë¥È¤Î¥¢¥¯¥»¥¹¥á¥½¥Ã¥É¤òÄêµÁ¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿. ¤â¤Ã¤È¤â¥¢¥¯¥»¥¹¥á</div><div class='add'>+	  ¥½¥Ã¥É¤ÈÆ±Ì¾¤Î¥á¥½¥Ã¥É¤Î¶èÊÌ¤ÏRuby¤Ë¤ÏÂ¸ºß¤·¤Ê¤¤¤±¤É, ¤½¤ì¤Ï»ÅÊý</div><div class='add'>+	  ¤¬¤Ê¤¤¤è¤Í.</div><div class='ctx'> </div><div class='del'>-	* README, README.ja: Add a note about default C flags.</div><div class='add'>+	* pack.c: ¥¨¥ó¥Ç¥£¥¢¥ó¤òautoconf¤ÇÈ½Äê¤¹¤ë¤è¤¦¤Ë¤·¤¿¤Î¤Ç, v/V¤¬»È</div><div class='add'>+	  ¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿. ¤Þ¤¿ntoh?()/hton?()¤â¼«Á°¤ÇÍÑ°Õ¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Sat May 31 22:11:15 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='add'>+	* Stat: st_rdev¤ò¥¢¥¯¥»¥¹¤¹¤ë¥á¥½¥Ã¥É¤òÄÉ²Ã. ¤µ¤é¤Ë¥·¥¹¥Æ¥à¤¬stat </div><div class='add'>+	  ¹½Â¤ÂÎ¤Ëst_blksize, st_block¤ò»ý¤Ã¤Æ¤¤¤ë¤«¤òautoconf¤Ç¥Á¥§¥Ã¥¯¤¹</div><div class='add'>+	  ¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* version.c (ruby_description, ruby_copyright): backported from</div><div class='del'>-	  1.9. bug#19002, [ruby-dev:34883]</div><div class='add'>+	* ¥É¥­¥å¥á¥ó¥È¤ò¾¯¤·À°È÷¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* error.c (report_bug): uses ruby_description.</div><div class='add'>+	* INT2FIX()¤Î¤¦¤Á, 31bitÉý¤¬ÊÝ¾Ú¤Ç¤­¤Ê¤¤¤â¤Î¤Ï, int2inum()¤ËÃÖ¤­´¹</div><div class='add'>+	  ¤¨¤¿.</div><div class='ctx'> </div><div class='del'>-Sat May 31 20:56:04 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Wed Jun 15 10:18:27 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_delete_if): should return enumerator if no block</div><div class='del'>-	  is given.  [ruby-dev:34901]</div><div class='add'>+	* sprintf() - bignum¤Î½ÐÎÏ¤Î»þ, ½ÐÎÏÉý¤òÀµ¤·¤¯·×»»¤¹¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Sat May 31 18:28:17 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* str2inum() - base¤¬0¤Î»þ, base¤ò¼«Æ°È½Äê¤¹¤ë¤è¤¦¤Ë(0x¤Ç»Ï¤Þ¤ë»þ</div><div class='add'>+	  16 ¿Ê, 0¤Ç»Ï¤Þ¤ë»þ8¿Ê).</div><div class='ctx'> </div><div class='del'>-	* suppress warnings with -Wwrite-string.</div><div class='add'>+Tue Jun 14 16:08:42 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Sat May 31 15:58:08 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* gc.c: Bignum¤òÄÉ²Ã¤¹¤ë¤Î¤òËº¤ì¤Æ¤¤¤¿. ÁÈ¤ß¹þ¤ß·¿¤òÄÉ²Ã¤·¤¿»þ¤Ë¤Ï</div><div class='add'>+	  É¬¤ºmark()¤Èsweep()¤Ë¤½¤Î·¿¤Ë´Ø¤¹¤ë½èÍý¤òÄÉ²Ã¤¹¤ëÉ¬Í×¤¬¤¢¤ë.</div><div class='ctx'> </div><div class='del'>-	* Makefile.in, configure.in (warnflags): defaulted to -Wall</div><div class='del'>-	  -Wno-parentheses with gcc.  [ruby-dev:34810]</div><div class='add'>+	* bignum: ³ä»»¤âÆ°¤¤¤¿¤è¤¦¤Êµ¤¤¬¤¹¤ë. ¥¢¥ë¥´¥ê¥º¥à¤òÍý²ò¤·¤Æ¤¤¤Ê¤¤</div><div class='add'>+	  ¤Î¤Ç, ¼«¿®¤¬¤Ê¤¤.</div><div class='ctx'> </div><div class='del'>-Fri May 30 05:28:18 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='add'>+Mon Jun 13 14:36:55 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* enum.c (count_i, count_iter_i, count_all_i): add prototypes for VC.</div><div class='add'>+	* ¤Þ¤À¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥á¥½¥Ã¥É¤Ê¤É¤¬¤¢¤ë¤¬, ¶Ê¤¬¤ê¤Ê¤ê¤Ë¤âBignum</div><div class='add'>+	  ¤¬»È¤¨¤ë¤è¤¦¤Ë¤Ê¤ë. ¤³¤ì¤Çioctl¤â»È¤¨¤ë.</div><div class='ctx'> </div><div class='del'>-Fri May 30 04:32:07 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Fri Jun 10 17:26:42 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* enum.c (count_i, count_iter_i): Sync with trunk.</div><div class='del'>-	  enum.c (enum_count, count_all_i, Init_Enumerable),</div><div class='del'>-	  array.c (rb_ary_count): Sync with trunk.  If no argument or</div><div class='del'>-	  block is given, count the number of all elements.</div><div class='add'>+	* Comparable: ´ðÁÃ¤È¤Ê¤ë¥á¥½¥Ã¥É¤ò`=='¤È`&gt;'¤«¤é`&lt;=&gt;'¤ËÊÑ¹¹¤·¤¿. º£</div><div class='add'>+	  ¸åComparable¤Î¥µ¥Ö¥¯¥é¥¹¤Ï`&lt;=&gt;'¤À¤±¤òÄêµÁ¤¹¤ëÉ¬Í×¤¬¤¢¤ë.</div><div class='ctx'> </div><div class='del'>-Fri May 30 03:12:18 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Wed Jun  8 13:12:18 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_bn.c (ossl_bn_s_rand, ossl_bn_s_pseudo_rand):</div><div class='del'>-	  Int should be enough here.</div><div class='add'>+	* Need_Fixnum()¤ò¤Û¤È¤ó¤É¤Ê¤¯¤·¤Æ, NUM2INT()¤ÇÄ¾ÀÜint¤ËÊÑ´¹¤¹¤ë¤³</div><div class='add'>+	  ¤È¤Ë¤·¤¿. ¤³¤ì¤Ç31bit¤Ë´Ý¤á¤Æ·åÍî¤Á¤ò¤ª¤³¤¹ÌäÂê¤¬¤Ê¤¯¤Ê¤ë.</div><div class='ctx'> </div><div class='del'>-Fri May 30 02:35:00 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Tue Jun  7 09:45:31 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_bn.c (ossl_bn_s_rand, ossl_bn_s_pseudo_rand),</div><div class='del'>-	  ext/openssl/ossl_pkey_dh.c (ossl_dh_s_generate)</div><div class='del'>-	  (ossl_dh_initialize),</div><div class='del'>-	  ext/openssl/ossl_pkey_dsa.c (ossl_dsa_s_generate),</div><div class='del'>-	  ext/openssl/ossl_rand.c (ossl_rand_bytes)</div><div class='del'>-	  (ossl_rand_pseudo_bytes, ossl_rand_egd_bytes),</div><div class='del'>-	  ext/openssl/ossl_x509store.c (ossl_x509stctx_set_error): Do not</div><div class='del'>-	  use FIX2INT() without checking the value type.  Use NUM2INT()</div><div class='del'>-	  instead; found by akr in [ruby-dev:34890].</div><div class='add'>+	* ruby.h: ¥Þ¥¯¥íFIXABLE(n)¤òÄÉ²Ã. ¤Ä¤¤¤Ç¤ËFIXNUM¼þ¤ê¤ÎÄêµÁ¤òÊÑ¹¹¤·</div><div class='add'>+	  ¤Æ, °Ü¿¢À­¤ò¹â¤á¤¿(¤Ä¤â¤ê).</div><div class='ctx'> </div><div class='del'>-Thu May 29 20:07:45 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* C++¤ÎÍ½Ìó¸ì¤Ç¤¢¤ënew¤òºï½ü¤·¤¿. ¤·¤«¤·, ¤â¤¦¤Ò¤È¤Ä¤ÎÍ½Ìó¸ì¤Ç¤¢¤ë</div><div class='add'>+	  class¤Ë´Ø¤·¤Æ¤Ï, ÃÖ¤­´¹¤¨¤ëÃ±¸ì¤¬»×¤¤¤Ä¤«¤Ê¤¤¤³¤È¤â¤¢¤Ã¤Æ¤½¤Î¤Þ</div><div class='add'>+	  ¤Þ¤Ë¤Ê¤Ã¤Æ¤¤¤ë.</div><div class='ctx'> </div><div class='del'>-	* configure.in, win32/Makefile.sub, mkconfig.rb, instruby.rb,</div><div class='del'>-	  ruby.c, lib/mkmf.rb, README.EXT, README.EXT.ja: Backport the</div><div class='del'>-	  vendor_ruby directory support.</div><div class='add'>+	* 31bit¤ò±Û¤¨¤½¤¦¤ÊINT2FIX()¤ò´Ø¿ô¸Æ¤Ó½Ð¤·¤ËÊÑ¤¨¤¿. ¾­Íèbignum¤¬Æ³</div><div class='add'>+	  Æþ¤µ¤ì¤¿»þ¤Ë¤Ï¼«Æ°Åª¤Ëbignum¤òÊÖ¤¹¤è¤¦¤Ë¤¹¤ë.</div><div class='ctx'> </div><div class='del'>-Thu May 29 17:52:31 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+	* readline() - °ú¿ô¤Î`-'¤ÏÉ¸½àÆþÎÏ¤ò°ÕÌ£¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/zlib/extconf.rb: search zlib1, and regard mswin32 later than VC6</div><div class='del'>-	  as WIN32.  [ruby-core:16984]</div><div class='add'>+	* ruby.h: ±¦¥·¥Õ¥È¤¬ÏÀÍý¥·¥Õ¥È¤«»»½Ñ¥·¥Õ¥È¤«¤Ï½èÍý·Ï°ÍÂ¸¤Î¤è¤¦¤Ê¤Î</div><div class='add'>+	  ¤Ç, ruby.h¤Çcpp¤ò»È¤Ã¤Æ¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿. ¤³¤ì¤Ç¤¦¤Þ¤¯¤¤¤¯</div><div class='add'>+	  ¤È»×¤¦¤Î¤À¤¬, ¼ê¸µ¤ËÉä¹çÉÕint¤òÏÀÍý¥·¥Õ¥È¤¹¤ë½èÍý·Ï¤¬¤Ê¤¤¤Î¤Ç³Î</div><div class='add'>+	  Ç§¤Ç¤­¤Ê¤¤. NEWS-OS¤ÎCC¤Ï³Î¤«±¦¥·¥Õ¥È¤Ï¤¤¤Ä¤âÏÀÍý¥·¥Õ¥È¤À¤Ã¤¿¤è</div><div class='add'>+	  ¤¦¤Êµ¤¤¬¤¹¤ë¤ó¤À¤±¤É¡Ä.</div><div class='ctx'> </div><div class='del'>-Wed May 28 17:54:29 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+Mon Jun  6 10:10:22 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_start_with): Remove an unused variable.</div><div class='del'>-	  (rb_str_upto_m): Fix a prototype.</div><div class='add'>+	* FIX2INT()¤ÎÄêµÁ¤òÊÑ¹¹¤·¤¿. ¤É¤¦¤·¤ÆÀÎ¤Ï¤¦¤Þ¤¯Æ°¤«¤Ê¤«¤Ã¤¿¤ó¤À¤í</div><div class='add'>+	  ¤¦¤«? ¤â¤·¤«¤·¤Æ, ±¦¥·¥Õ¥È¤ÎÉä¹æ³ÈÄ¥¤Ï½èÍý·Ï°ÍÂ¸?</div><div class='ctx'> </div><div class='del'>-Wed May 28 17:48:28 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* FIX2INT()¤ÈFIX2UINT()¤ò»È¤¤Ê¬¤±¤ë¤è¤¦¤Ë¤·¤¿. ¤â¤Ã¤È¤âfixnum¤Ï31</div><div class='add'>+	  ¥Ó¥Ã¥È¤·¤«¤Ê¤¤¤Î¤Ç, ËÜ¼ÁÅª¤Ê²ò·è¤Ë¤Ï¤Ê¤é¤Ê¤¤¤Î¤À¤¬(ioctl¤¬ÁÈ¤ß¹þ</div><div class='add'>+	  ¤ß¤¿¤«¤Ã¤¿).</div><div class='ctx'> </div><div class='del'>-	* range.c (range_step): Fix brokenness when a non-integer numeric</div><div class='del'>-	  value is specified as step. [rubyspec]</div><div class='del'>-	  (range_step): Make use of String#step internally if a string (or</div><div class='del'>-	  string-alike) range is given.</div><div class='add'>+	* print¤ò´Ø¿ôÅª¥á¥½¥Ã¥É¤«¤éÄÌ¾ï¥á¥½¥Ã¥É¤ËÊÑ¹¹. °ú¿ô¤¬Í¿¤¨¤é¤ì¤Ê¤¤</div><div class='add'>+	  »þ¤Ë¤Ï¥ì¥·¡¼¥Ð¤ò¥×¥ê¥ó¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿. ¤³¤ì¤Çprint¤ò¥á¥Ã¥»¡¼¥¸</div><div class='add'>+	  ·Á¼°¤Ç¤â¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿. Îã:</div><div class='ctx'> </div><div class='del'>-	* string.c (rb_str_upto_m, Init_String): Add an optional second</div><div class='del'>-	  argument to specify if the last value should be included.</div><div class='add'>+		ruby -e 'readlines().sort.print'</div><div class='ctx'> </div><div class='del'>-Wed May 28 16:53:39 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	  ¾å¤Î¥¹¥¯¥ê¥×¥È¤Ï, °ú¿ô¤È¤·¤ÆÍ¿¤¨¤é¤ì¤¿(¤¢¤ë¤¤¤ÏÉ¸½àÆþÎÏ¤«¤éÆÉ¤ß</div><div class='add'>+	  ¹þ¤Þ¤ì¤¿)Ê¸»úÎó¤ò³Æ¹ÔËè¤Ë¥½¡¼¥È¤·¤ÆÉ½¼¨¤¹¤ë.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_slice_bang): Call rb_ary_modify_check() at the</div><div class='del'>-	  beginning. [rubyspec]</div><div class='add'>+	* eval.c: argc,argv¥Ñ¥¿¡¼¥ó¤Ç°ú¿ô¤ò¼õ¤±¤ë¥á¥½¥Ã¥É¤Ë°ú¿ô¤¬°ì¤Ä¤âÍ¿</div><div class='add'>+	  ¤¨¤é¤ì¤Ê¤¤»þ, argv¤¬nil¤Ë¤Ê¤Ã¤Æ¤¤¤¿(argv[0]¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤ÈÍî¤Á</div><div class='add'>+	  ¤Æ¤·¤Þ¤¦).</div><div class='ctx'> </div><div class='del'>-Wed May 28 16:12:44 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* _exit()¤òÄÉ²Ã. ¤³¤Á¤é¤ÏÎã³°½èÍý¤Ê¤É¹Ô¤Ê¤ï¤Ê¤¤.</div><div class='ctx'> </div><div class='del'>-	* lib/webrick/httpservlet/cgihandler.rb (WEBrick::HTTPServlet::CGIHandler#do_GET):</div><div class='del'>-	  Set the HTTP status code to 302 if a Location header field is</div><div class='del'>-	  present and the status code is not valid as a client</div><div class='del'>-	  redirection.  cf. RFC 3875 6.2.3, 6.2.4.</div><div class='add'>+	* dbm¥¯¥é¥¹: ¥¯¥é¥¹Ì¾¾Î¤òDBM(ÂçÊ¸»ú)¤ËÅý°ì¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Wed May 28 15:18:16 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Sat Jun  4 00:51:04 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-	* lib/singleton.rb (SingletonClassMethods): _load should be public.</div><div class='add'>+	* ¥ë¡¼¥×ÊÑ¿ô¤Ë¤âÂ°À­¤äÇÛÎóÍ×ÁÇ¤ò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-Wed May 28 12:52:41 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='add'>+Fri Jun  3 09:49:48 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object, marshal_dump, r_object0, marshal_load): search</div><div class='del'>-	  private methods too.  [ruby-dev:34671]</div><div class='add'>+	* Â¿½ÅÂåÆþ¤Ë¤ª¤¤¤Æ, Â°À­ÂåÆþ, ÇÛÎóÍ×ÁÇ¤Ø¤ÎÂåÆþ¤â¹Ô¤Ê¤¨¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* object.c (convert_type): ditto.</div><div class='add'>+	* Need_Fixnum(): nil¤ò0¤ËÊÑ´¹¤¹¤ë¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-Tue May 27 23:26:49 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='add'>+	* Enumerable:min, max, index, includes - ÄÉ²Ã. min, max¤ÏÍ×ÁÇ¤¬</div><div class='add'>+	  `&lt;=&gt;'¥á¥½¥Ã¥É¤ò»ý¤Ä¤³¤È¤ò²¾Äê¤·¤Æ¤¤¤ë.</div><div class='ctx'> </div><div class='del'>-	* error.c (rb_bug): description from rb_bug() should include</div><div class='del'>-	  patchlevel.  [ruby-dev:34826]</div><div class='add'>+	* Dict/Dbm:length - Í×ÁÇ¿ô¤òÊÖ¤¹¥á¥½¥Ã¥É.</div><div class='ctx'> </div><div class='del'>-Tue May 27 20:19:22 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* Dbm¥¯¥é¥¹¤Ëto_a¥á¥½¥Ã¥É¤òÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-	* array.c (rb_ary_slice_bang): Return an empty array instead of</div><div class='del'>-	  nil when pos is valid and len is adjusted from a valid value to</div><div class='del'>-	  zero; caught by RubySpec.</div><div class='add'>+	* Sun¤Ë¤ª¤±¤ësort¤Î¸íÆ°ºî¤Î·ï, ºòÆü¤Î½¤Àµ¤Çfix¤µ¤ì¤¿. ¤·¤«¤·, ¤½¤ì</div><div class='add'>+	  ¤Ç¤Ê¤¼Æ°¤«¤Ê¤«¤Ã¤¿¤Î¤«¤ÏÌÀ¤é¤«¤Ç¤Ï¤Ê¤¤¤¬¡Ä. Èæ³Ó´Ø¿ô¤¬¤É¤ó¤ÊÃÍ¤ò</div><div class='add'>+	  ÊÖ¤·¤Æ¤â»ØÄê¤·¤¿ÎÎ°è³°¤ò¥¢¥¯¥»¥¹¤¹¤ë¤Î¤Ï¥Ð¥°¤Ç¤Ï¤Ê¤¤¤«.</div><div class='ctx'> </div><div class='del'>-Tue May 27 19:45:20 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* ¥Õ¥¡¥¤¥ë¤ÎÁ´ÆâÍÆ¤òÆÉ¤ó¤Ç, ³Æ¹Ô¤òÇÛÎó¤È¤·¤ÆÊÖ¤¹¥á¥½¥Ã¥É¤Ïpython¤ò</div><div class='add'>+	  »²¹Í¤Ë¤·¤Æ`readlines'¤È¤¤¤¦Ì¾Á°¤Ë¤·¤¿. ¤½¤ì¤Ë¤È¤â¤Ê¤¤gets¤ËÂÐ¤·</div><div class='add'>+	  ¤Æreadline¤È¤¤¤¦ÊÌÌ¾¤òÍÑ°Õ¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* numeric.c (flo_divmod): Revert the behavior change; do not</div><div class='del'>-	  suppress an exception when div is NaN or Inf. [ruby-dev:34857]</div><div class='add'>+Fri Jun  3 00:08:38 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-Tue May 27 19:24:40 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* Array:sort - È½ÊÌ´Ø¿ô¤ÎÌá¤êÃÍ¤ÏFixnum¤Ç¤Ï¤Ê¤¯, Int¤Ç¤¢¤ë¤Ù¤­¤À¤Ã</div><div class='add'>+	  ¤¿. ´Ö°ã¤¤. Sun¤ÇÆ°ºî¤¬¤ª¤«¤·¤«¤Ã¤¿¤Î¤Ï¤³¤Î¤»¤¤¤«¤âÃÎ¤ì¤Ê¤¤.</div><div class='ctx'> </div><div class='del'>-	* enum.c (enum_to_a): Pass arguments through to #each().</div><div class='del'>-	  (enum_sort): Follow the enum_to_a signature change.</div><div class='del'>-	  (enum_reverse_each): Add #reverse_each().</div><div class='add'>+Thu Jun  2 11:48:37 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-Tue May 27 18:54:02 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='add'>+	* IO:read_all() - ¥¹¥È¥ê¡¼¥à¤ÎºÇ¸å¤Þ¤ÇÆþÎÏ¤·¤Æ, ³Æ¹Ô¤òÍ×ÁÇ¤È¤¹¤ëÇÛ</div><div class='add'>+	  Îó¤òÊÖ¤¹¥á¥½¥Ã¥É¤òÄÉ²Ã. ¤Þ¤¿´Ø¿ô¥á¥½¥Ã¥É read_all()¤âÄÉ²Ã¤·¤¿.</div><div class='add'>+  	  ¤³¤ì¤Ï°ú¿ô¤Î¥Õ¥¡¥¤¥ë¤«¤éÆÉ¤ß¹þ¤ó¤Ç³Æ¹Ô¤òÍ×ÁÇ¤È¤¹¤ëÇÛÎó¤òÊÖ¤¹. °Õ</div><div class='add'>+	  Ì£Åª¤Ë¤Ï</div><div class='ctx'> </div><div class='del'>-	* ext/stringio/stringio.c (strio_each_char, Init_stringio): Add</div><div class='del'>-	  StringIO#{each_char,chars}.</div><div class='del'>-</div><div class='del'>-Tue May 27 17:59:34 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_each): Return an enumerator if no</div><div class='del'>-	  block is given.</div><div class='del'>-	  (strio_each_byte): Return an enumerator if no block is given,</div><div class='del'>-	  and return self if one is given as the rdoc says.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_each_byte): Fix rdoc.  IO#each_byte returns self,</div><div class='del'>-	  not nil.</div><div class='del'>-</div><div class='del'>-Tue May 27 16:02:58 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_module_exec, Init_eval): Add</div><div class='del'>-	  Module#{module_exec,class_exec}.</div><div class='del'>-</div><div class='del'>-Tue May 27 15:36:37 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_each_char, argf_each_char, Init_IO):</div><div class='del'>-	  Add {IO#,ARGF.}{each_char,chars}.</div><div class='del'>-</div><div class='del'>-Tue May 27 13:46:52 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (Init_stringio): Define</div><div class='del'>-	  StringIO#{getbyte,readbyte}.</div><div class='del'>-</div><div class='del'>-Tue May 27 13:38:51 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (Init_IO): Define {IO#,ARGF.}{getbyte,readbyte}.</div><div class='del'>-</div><div class='del'>-Tue May 27 13:26:15 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (Init_stringio): Define #bytes and</div><div class='del'>-	  #lines.</div><div class='del'>-</div><div class='del'>-Tue May 27 13:20:35 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c: (rb_io_lines, rb_io_bytes, Init_IO): Define</div><div class='del'>-	  IO#{lines,bytes} and ARGF.{lines,bytes}.</div><div class='del'>-</div><div class='del'>-Tue May 27 12:13:17 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (BUFCHECK): wrong condition. [ruby-core:16921]</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_buf): shouldn't use buflen for length of string.</div><div class='del'>-</div><div class='del'>-Mon May 26 18:24:48 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (BUFCHECK): no resize if enough room.</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): use BUFCHECK.</div><div class='del'>-</div><div class='del'>-Mon May 26 16:46:19 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (ntfs_tail): filename which starts with '.' is valid.</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): cygwin symlink support.</div><div class='del'>-</div><div class='del'>-Mon May 26 12:16:43 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* .: Release as Ruby 1.8.7-preview4.</div><div class='del'>-</div><div class='del'>-Mon May 26 12:12:26 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (dump_ensure, load_ensure): should return values.</div><div class='del'>-</div><div class='del'>-	* eval.c (yield_under, yield_under_i, yield_args_under_i)</div><div class='del'>-	  (specific_eval, rb_obj_instance_exec, Init_eval): Implement</div><div class='del'>-	  Object#instance_exec(), a 1.9 feature.</div><div class='del'>-</div><div class='del'>-Mon May 26 11:53:21 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0, proc_invoke, proc_arity): allow passing a</div><div class='del'>-	  block to a Proc.  [ruby-dev:23533]; by nobu; backported from</div><div class='del'>-	  1.9.  This implementation in current shape is known to be</div><div class='del'>-	  buggy/broken, especially with nested block invocation.  Take</div><div class='del'>-	  this as an experimental feature.</div><div class='del'>-</div><div class='del'>-	* parse.y (block_par, block_var): ditto.</div><div class='del'>-</div><div class='del'>-Mon May 26 08:00:52 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0, Init_marshal): Fix the garbled s_call</div><div class='del'>-	  definition; fixes [ruby-dev:34843].</div><div class='del'>-</div><div class='del'>-Mon May 26 03:16:20 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_default): Fix rdoc.</div><div class='del'>-	  (rb_hash_each, env_each_value, env_each_pair): Return an</div><div class='del'>-	  enumerator if no block is given.</div><div class='del'>-	  (rb_hash_update): Update rdoc.</div><div class='del'>-	  (envix): Conditionalize the definition itself.</div><div class='del'>-	  (rb_f_getenv, env_fetch, env_keys, env_values, env_values_at)</div><div class='del'>-	  (env_select, env_inspect, env_to_a, env_empty_p, env_has_key)</div><div class='del'>-	  (env_has_value, env_index, env_indexes, env_to_hash, env_shift)</div><div class='del'>-	  (env_update): Require secure level 4.</div><div class='del'>-	  (env_each_value, env_each_i): Delay variable initialization.</div><div class='del'>-	  (env_each_key, env_each_value, env_reject_bang)</div><div class='del'>-	  (env_clear, env_replace): Omit duplicated secure level check.</div><div class='del'>-	  (env_has_value): Do to_str conversion.</div><div class='del'>-</div><div class='del'>-Sun May 25 19:48:12 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_delete_if): Return an enumerator if no block is</div><div class='del'>-	  given.</div><div class='del'>-	  (env_each_key): Delay a variable initialization after</div><div class='del'>-	  RETURN_ENUMERATOR().</div><div class='del'>-</div><div class='del'>-Sun May 25 05:07:19 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_slice_bang): Be consistent with Array#slice()</div><div class='del'>-	  and String#slice!().  Just return nil when a negative length or</div><div class='del'>-	  out of boundary index is given instead of raising an exception</div><div class='del'>-	  via internal functions.</div><div class='del'>-	  (rb_ary_slice_bang): should not use rb_ary_subseq() which shares</div><div class='del'>-	  internal pointer.  splice modifies the receiver right after</div><div class='del'>-	  subseq.  [ruby-dev:34005]</div><div class='del'>-	  (rb_ary_slice_bang): should adjust length before making</div><div class='del'>-	  sub-array.</div><div class='del'>-</div><div class='del'>-	* enumerator.c (Init_Enumerator): Override</div><div class='del'>-	  Enumerable::Enumerator#each_with_index with #with_index.</div><div class='del'>-</div><div class='del'>-Sun May 25 03:13:09 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Thread): Initialize recursive_key.</div><div class='del'>-</div><div class='del'>-Sun May 25 02:45:49 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_eqq): Use en.</div><div class='del'>-</div><div class='del'>-Sat May 24 22:32:49 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_cstr_to_dbl): should clear errno before calling</div><div class='del'>-	  strtod(3).  [ruby-dev:34834]</div><div class='del'>-</div><div class='del'>-Sat May 24 22:27:44 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (marshal_load): should initialize arg.data used for</div><div class='del'>-	  reentrant check.  [ruby-dev:34837]</div><div class='del'>-</div><div class='del'>-Sat May 24 00:34:59 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rational.rb (Rational#to_i): fix rdoc.  Rational(-7,4).to_i</div><div class='del'>-	  should be -1.</div><div class='del'>-</div><div class='del'>-Fri May 23 20:22:44 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (reentrant_check): check reentrance via callcc.</div><div class='del'>-	  [ruby-dev:34802]</div><div class='del'>-</div><div class='del'>-Fri May 23 16:46:28 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enumerator.c (proc_call): Remove an unused static function.</div><div class='del'>-</div><div class='del'>-Fri May 23 13:46:09 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (cflags): commit miss.</div><div class='del'>-</div><div class='del'>-Fri May 23 09:52:21 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (MINIRUBY), common.mk (RUBYOPT): add purelib.rb.</div><div class='del'>-	  [ruby-core:16642]</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: load purelib.rb only when not cross compiling.</div><div class='del'>-</div><div class='del'>-Fri May 23 08:47:02 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_eqq): === should be able to handle delegated</div><div class='del'>-	  objects as well.</div><div class='del'>-</div><div class='del'>-Fri May 23 04:22:19 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: fix memory leak.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: avoid trouble when finalize TclTkIp.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb, ext/tk/lib/tk/*: help to fix troubles when</div><div class='del'>-	  use Ttk widgets on old Tk scripts.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/*: update and add demo scripts. some of them are</div><div class='del'>-	  introduction about new features of Tcl/Tk8.5.</div><div class='del'>-</div><div class='del'>-Fri May 23 03:48:10 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (clone_method): Just use ruby_cref as cref.</div><div class='del'>-</div><div class='del'>-Fri May 23 01:03:23 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_singleton_class_clone): Pass Qnil, not 0.</div><div class='del'>-</div><div class='del'>-Fri May 23 00:51:48 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (clone_method): Totally revamp the previous fix which</div><div class='del'>-	  was incorrect.</div><div class='del'>-	  (rb_mod_init_copy): Ditto.</div><div class='del'>-	  (singleton_class_clone_int): Ditto.</div><div class='del'>-</div><div class='del'>-Fri May 23 00:48:10 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_copy_node_scope), node.h: Rename from copy_node_scope</div><div class='del'>-	  and export.</div><div class='del'>-</div><div class='del'>-Thu May 22 21:24:15 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (top_local_setup): fixed memory leak bug based on a</div><div class='del'>-	  patch from Roger Pack &lt;rogerpack2005 at gmail.com&gt; in</div><div class='del'>-	  [ruby-core:16610].</div><div class='del'>-</div><div class='del'>-Thu May 22 14:20:54 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (flatten): check if reentered.  [ruby-dev:34798]</div><div class='del'>-</div><div class='del'>-Thu May 22 08:28:49 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (flatten): free memo hash table before raising exception.</div><div class='del'>-	  [ruby-dev:34789]</div><div class='del'>-</div><div class='del'>-Thu May 22 06:30:10 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (flatten): fix memory leak.</div><div class='del'>-</div><div class='del'>-Thu May 22 05:45:30 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* proc.c (proc_dup): should copy safe_level from src proc</div><div class='del'>-	  properly.  a patch from Keita Yamaguchi</div><div class='del'>-	  &lt;keita.yamaguchi at gmail.com&gt;</div><div class='del'>-</div><div class='del'>-Wed May 21 23:31:44 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_get_method_body, rb_alias, rb_eval): should not cache</div><div class='del'>-	  uninitialized value, since search_method doesn't set origin if the</div><div class='del'>-	  method wasn't found.</div><div class='del'>-</div><div class='del'>-	* eval.c (search_method, remove_method, error_print, rb_alias)</div><div class='del'>-	  (rb_eval, rb_rescue2, search_required, Init_eval, rb_thread_create),</div><div class='del'>-	  gc.c (rb_source_filename, Init_stack), io.c (rb_io_getline),</div><div class='del'>-	  parse.y (rb_id2name, rb_parser_free): suppress warnings.</div><div class='del'>-</div><div class='del'>-Wed May 21 12:34:51 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_delete): rdoc fix based on a patch from Gaston Ramos</div><div class='del'>-	  &lt;ramos.gaston AT gmail.com&gt;.  [ruby-core:16825]</div><div class='del'>-</div><div class='del'>-Tue May 20 13:15:46 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (lchmod_internal): Remove a compiler warning.</div><div class='del'>-</div><div class='del'>-Mon May 19 18:22:35 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkcs5.c (ossl_pkcs5_pbkdf2_hmac): Fix the type</div><div class='del'>-	  of md; pointed out by Takahiro Kambe &lt;taca at back-street.net&gt;</div><div class='del'>-	  in [ruby-dev:34748].</div><div class='del'>-</div><div class='del'>-Mon May 19 14:20:13 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): fixed SEGV on win32 with "% 0e" % 1.0/0.0.</div><div class='del'>-</div><div class='del'>-Mon May 19 13:29:58 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_system): set last_status when status == -1 because</div><div class='del'>-	  there is no path to set it on win32. this patch is derived from</div><div class='del'>-	  [ruby-core:16787], submitted by Luis Lavena &lt;luislavena at gmail.com&gt;</div><div class='del'>-</div><div class='del'>-Mon May 19 13:01:05 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk ({MSPEC,RUBYSPEC}_GIT_URL): moved from Makefine.in.</div><div class='del'>-</div><div class='del'>-	* {win32,bcc32}/Makefile.sub (update-rubyspec): added.</div><div class='del'>-</div><div class='del'>-Mon May 19 11:53:45 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/openssl_missing.c (HMAC_CTX_copy): adopted</div><div class='del'>-	  prototype change in openssl bundled with newer OpenBSD.</div><div class='del'>-	  a patch from Takahiro Kambe &lt;taca at back-street.net&gt; in</div><div class='del'>-	  [ruby-dev:34691].</div><div class='del'>-</div><div class='del'>-Mon May 19 06:36:37 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* .: Release as Ruby 1.8.7-preview3.</div><div class='del'>-</div><div class='del'>-Sun May 18 22:26:51 2008  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb: should normalize path</div><div class='del'>-	  name in path_info to prevent script disclosure vulnerability on</div><div class='del'>-	  DOSISH filesystems. (fix: CVE-2008-1891)</div><div class='del'>-	  Note: NTFS/FAT filesystem should not be published by the platforms</div><div class='del'>-	  other than Windows. Pathname interpretation (including short</div><div class='del'>-	  filename) is less than perfect.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpservlet/abstract.rb</div><div class='del'>-	  (WEBrick::HTTPServlet::AbstracServlet#redirect_to_directory_uri):</div><div class='del'>-	  should escape the value of Location: header.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpservlet/cgi_runner.rb: accept interpreter</div><div class='del'>-	  command line arguments.</div><div class='del'>-</div><div class='del'>-Sat May 17 23:53:57 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): fix for short file name on Cygwin.</div><div class='del'>-</div><div class='del'>-Sat May 17 11:29:11 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_extname): first dot is not an extension name.</div><div class='del'>-</div><div class='del'>-Sat May 17 10:18:44 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): need to free allocated buffer in re_register.</div><div class='del'>-</div><div class='del'>-Fri May 16 17:01:44 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (test-rubyspec): added.</div><div class='del'>-</div><div class='del'>-Fri May 16 16:22:40 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: sometimes freeze when receive Interrupt signal.</div><div class='del'>-</div><div class='del'>-Fri May 16 14:54:56 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (update-rubyspec): move rubyspec to srcdir. </div><div class='del'>-	  (test-rubyspec): ditto.</div><div class='del'>-</div><div class='del'>-Fri May 16 14:25:22 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (test-rubyspec): use RUNRUBY.  suggested by nobu.</div><div class='del'>-</div><div class='del'>-Fri May 16 13:01:43 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (update-rubyspec): new target to download rubyspec.</div><div class='del'>-	  (test-rubyspec): new target to run rubyspec.  this doesn't work</div><div class='del'>-	  before install.</div><div class='del'>-</div><div class='del'>-Fri May 16 08:15:52 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: fix memory (object) leak bug.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/aniwave.rb, ext/tk/sample/demos-en/aniwave.rb:</div><div class='del'>-	  bug fix.</div><div class='del'>-</div><div class='del'>-Thu May 15 17:00:22 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (Init_String): Define #bytesize as an alias for #size</div><div class='del'>-	  for compatibility with 1.9.</div><div class='del'>-</div><div class='del'>-Thu May 15 15:33:59 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): support for alternative data stream</div><div class='del'>-	  and ignored trailing garbages of NTFS.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_basename): ditto.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_extname): ditto.</div><div class='del'>-</div><div class='del'>-Wed May 14 19:24:59 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_count): Override Enumerable#count for better</div><div class='del'>-	  performance.</div><div class='del'>-	  (rb_ary_nitems): Undo the backport.  Use #count {} instead.</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_iter_i): Remove an unused function.</div><div class='del'>-	  (enumerator_with_index, enumerator_each): Remove unused</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-Wed May 14 17:15:11 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil/extronf.rb: check stdndup() because it's not standard</div><div class='del'>-	  function of C.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil/tkutil.c (cbsubst_table_setup): use malloc() and</div><div class='del'>-	  strncpy() instead of strndup() if not available.</div><div class='del'>-</div><div class='del'>-Wed May 14 09:52:02 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil/tkutil.c: improve handling callback-subst-keys. </div><div class='del'>-	  Now, support longnam-keys (e.g. '%CTT' on tkdnd-2.0; however, still</div><div class='del'>-	  not support tkdnd-2.0 on tkextlib), and symbols of parameters (e.g. </div><div class='del'>-	  :widget=&gt;'%W', :keycode=&gt;'%k', '%x'=&gt;:x, '%X'=&gt;:root_x, and so on; </div><div class='del'>-	  those are attributes of event object). It means that Ruby/Tk accepts</div><div class='del'>-	  not only "widget.bind(ev, '%W', '%k', ...){|w, k, ...| ... }", but </div><div class='del'>-	  also "widget.bind(ev, :widget, :keycode, ...){|w, k, ...| ... }". </div><div class='del'>-	  It is potentially incompatible, when user passes symbols to the</div><div class='del'>-	  arguments of the callback block (the block receives the symbols as</div><div class='del'>-	  strings). I think that is very rare case (probably, used by Ruby/Tk</div><div class='del'>-	  experts only). When causes such trouble, please give strings instead</div><div class='del'>-	  of such symbol parameters (e.g. call Symbol#to_s method).</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/event.rb, ext/tk/lib/tk/validation.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/blt/treeview.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/winico/winico.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil/tkutil.c: strings are available on subst_tables on </div><div class='del'>-	  TkUtil::CallbackSubst class (it is useful on Ruby 1.9). </div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tkextlib/iwidgets/hierarchy.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/iwidgets/spinner.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/iwidgets/entryfield.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/iwidgets/calendar.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/blt/dragdrop.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/tkDND/tkdnd.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/treectrl/tktreectrl.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/tktable/tktable.rb: disable code piece became </div><div class='del'>-	  unnecessary by reason of the changes of ext/tk/tkutil/tkutil.c.</div><div class='del'>-</div><div class='del'>-Tue May 13 15:10:50 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enumerator.c: Update rdoc.</div><div class='del'>-	  (enumerator_initialize): Discourage the use.</div><div class='del'>-	  (enum_each_slice, enum_each_cons, enumerator_each)</div><div class='del'>-	  (enumerator_with_index): Add a note about a call without a block.</div><div class='del'>-</div><div class='del'>-	* NEWS: Intentionally omit enum_slice and enum_cons, which are</div><div class='del'>-	  removed in 1.9.</div><div class='del'>-</div><div class='del'>-Tue May 13 07:56:36 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_cat): fixed buffer overrun reported by</div><div class='del'>-	  Christopher Thompson &lt;cthompson at nexopia.com&gt; in [ruby-core:16746]</div><div class='del'>-</div><div class='del'>-Mon May 12 13:57:19 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): add NODE_OP_ASGN_{OR,AND}.  "defined?(a||=1)"</div><div class='del'>-	  should not operate assignment.  [ruby-dev:34645]</div><div class='del'>-</div><div class='del'>-Mon May 12 12:59:23 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/wm.rb: Wm#overrideredirect overwrites arguemnt to</div><div class='del'>-	  an invalid value.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/ttk_wrapper.rb: support "if __FILE__ == $0" idiom.</div><div class='del'>-</div><div class='del'>-Mon May 12 12:36:55 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_select): backport from trunk.</div><div class='del'>-	  [ruby-talk:300743]</div><div class='del'>-</div><div class='del'>-Mon May 12 12:33:21 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (RUBYLIB, RUBYOPT): clear.</div><div class='del'>-</div><div class='del'>-Mon May 12 10:41:10 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (SimpleDelegator::dup): removed needless argument.</div><div class='del'>-	  [ruby-list:44910]</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (clone, dup): keep relationship with the target</div><div class='del'>-	  object.</div><div class='del'>-</div><div class='del'>-Sun May 11 23:19:39 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (all_iter_i, any_iter_i): reduced duplicated code.</div><div class='del'>-</div><div class='del'>-Sun May 11 17:57:36 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (MINIRUBY): should not include extension library path.</div><div class='del'>-</div><div class='del'>-Sun May 11 10:36:10 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_name, method_owner): New methods; backported</div><div class='del'>-	  from 1.9. (UnboundMethod#name, UnboundMethod#owner)</div><div class='del'>-</div><div class='del'>-Sun May 11 02:48:13 2008    &lt;nagai@orca16.orcabay.ddo.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/pack.rb, ext/tk/lib/tk/grid.rb: fail to do pack/grid </div><div class='del'>-	  without options.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkWindow#grid_anchor, grid_column, grid_row.</div><div class='del'>-</div><div class='del'>-Sat May 10 18:19:16 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line): RDoc updated.  [ruby-dev:34586]</div><div class='del'>-</div><div class='del'>-Sat May 10 13:17:56 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/pack.rb, ext/tk/lib/tk/grid.rb: increase supported</div><div class='del'>-	  parameter patterns of configure method.</div><div class='del'>-</div><div class='del'>-Sat May 10 09:16:13 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strtod): backported from 1.9.  a patch from Satoshi</div><div class='del'>-	  Nakagawa &lt;psychs at limechat.net&gt; in [ruby-dev:34625]. </div><div class='del'>-	  fixed: [ruby-dev:34623]</div><div class='del'>-</div><div class='del'>-Fri May  9 23:33:25 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/wm.rb: methods of Tk::Wm_for_General module cannot</div><div class='del'>-	  pass the given block to methods of Tk::Wm module.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/grid.rb: lack of module-method definitions.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb: lack of autoload definitions.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/tnotebook.rb: cannot use kanji (not UTF-8) </div><div class='del'>-	  characters for headings.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: maybe a little more stable about @encoding value </div><div class='del'>-	  of TclTkIp object.</div><div class='del'>-</div><div class='del'>-Wed May  7 08:46:44 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_s_def): to_str should be called only once.</div><div class='del'>-	  [ruby-core:16647]</div><div class='del'>-</div><div class='del'>-Wed May  7 00:54:25 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c (gzreader_gets): may cause infinite loop.</div><div class='del'>-	  a patch from Kouya &lt;kouyataifu4 at gmail.com&gt; in</div><div class='del'>-	  [ruby-reference-manual:762].</div><div class='del'>-</div><div class='del'>-Sun May  4 09:35:51 2008  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/erb/erb4html.rb (ERB4Html) : add example of ERB#set_eoutvar.</div><div class='del'>-	  ERB4Html is an auto-quote ERB.</div><div class='del'>-</div><div class='del'>-Sat May  3 22:52:48 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb, ext/tk/lib/tkextlib/tile/style.rb, </div><div class='del'>-	  ext/tk/sample/ttk_wrapper.rb: improve treating and control themes. </div><div class='del'>-	  add Tk::Tile.themes and Tk::Tile.set_theme(theme).</div><div class='del'>-</div><div class='del'>-Fri May  2 14:52:33 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el: move fontifying code from hook.  a patch from</div><div class='del'>-	  Phil Hagelberg &lt;phil at hagelb.org&gt; in [ruby-core:16636].</div><div class='del'>-</div><div class='del'>-Fri May  2 13:47:51 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_select): restore previous behavior of MatchData#select.</div><div class='del'>-	  RDoc updated as well, mentioning the plan to remove this method</div><div class='del'>-	  in the future.  [ruby-dev:34556]</div><div class='del'>-</div><div class='del'>-Fri May  2 13:04:04 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (Init_dbm): defines DBM::VERSION even when</div><div class='del'>-	  DB_VERSION_STRING is not available.  [ruby-dev:34569]</div><div class='del'>-</div><div class='del'>-Thu May  1 23:57:06 2008  James Edward Gray II  &lt;jeg2@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	Merged 16257 from trunk.</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb:  This patch from Brian Candler adds a FailEOF mode which</div><div class='del'>-	  can be activated to have net/telnet raise EOFError exceptions when the </div><div class='del'>-	  remote connection is closed.  The default behavior remains unchanged though.</div><div class='del'>-</div><div class='del'>-Thu May  1 23:43:21 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): check if step can be converted to an integer.</div><div class='del'>-	  [ruby-dev:34558]</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): allow float step bigger than zero but less</div><div class='del'>-	  than one.  [ruby-dev:34557]</div><div class='del'>-</div><div class='del'>-Wed Apr 30 20:22:40 2008  James Edward Gray II  &lt;jeg2@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	Merged 16241 from trunk.</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb:  Fixing a bug where line endings would not be properly</div><div class='del'>-	  escaped when the two character ending was broken up into separate TCP</div><div class='del'>-	  packets.  Issue reported and patched by Brian Candler.</div><div class='del'>-</div><div class='del'>-Wed Apr 30 17:47:21 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_search): use local variable.  a patch from wanabe</div><div class='del'>-	  &lt;s.wanabe AT gmail.com&gt; in [ruby-dev:34537].  [ruby-dev:34492]</div><div class='del'>-</div><div class='del'>-Sat Apr 26 19:40:34 2008  Guy Decoux  &lt;decoux@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (struct clone_method_data): Add cref.</div><div class='del'>-	  (clone_method): Properly handle NODE_BMETHOD and NODE_DMETHOD.</div><div class='del'>-	  (rb_singleton_class_clone, singleton_class_clone_int): Set a</div><div class='del'>-	  proper value to klass and propagate cref. [ruby-core:16238]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_block_dup, rb_method_dup), intern.h: Add duplicator</div><div class='del'>-	  methods for use from class.c#clone_method().</div><div class='del'>-</div><div class='del'>-Fri Apr 25 15:46:37 2008  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/tk/scrollbar.rb, ext/tk/lib/tk/scale.rb:</div><div class='del'>-	  improve unknonw-option check when create a widget. </div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt/unix_dnd.rb, ext/tk/lib/tkextlib/blt/ted.rb,</div><div class='del'>-	  ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: bug fix on 'cget'.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menuspec.rb: option check will fail when </div><div class='del'>-	  TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__ is true.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/palette.rb: bug fix.</div><div class='del'>-</div><div class='del'>-Fri Apr 25 12:37:54 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (flatten): returns an instance of same class.</div><div class='del'>-	  [ruby-core:16554]</div><div class='del'>-</div><div class='del'>-Thu Apr 24 23:47:50 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: backported from 1.9. bug#19003</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb: set_params; backported from 1.9.</div><div class='del'>-	  bug#19552, [ruby-dev:34402]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c: ditto.</div><div class='del'>-</div><div class='del'>-	* test/openssl/test_ssl.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Apr 24 17:06:34 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (THREAD_SAVE_CONTEXT): remove unnecessary</div><div class='del'>-	  FLUSH_REGISTER_WINDOWS before calling setjmp().  [ruby-core:16285]</div><div class='del'>-</div><div class='del'>-Thu Apr 24 14:15:11 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_find_1): prior files with extensions to files sans</div><div class='del'>-	  extensions.  [ruby-core:16517]</div><div class='del'>-</div><div class='del'>-Wed Apr 23 15:39:31 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (bind_eval): Add Binding#eval, a shorthand method for</div><div class='del'>-	  eval(str, binding, ..); backported from 1.9.</div><div class='del'>-</div><div class='del'>-Wed Apr 23 15:28:52 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_no_create): failed</div><div class='del'>-	  notice moved from comment to assertion message. [ruby-dev:29127]</div><div class='del'>-</div><div class='del'>-Wed Apr 23 14:00:05 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): Add a missing dependency on the</div><div class='del'>-	  target directory for each .rb file.  This will hopefully fix</div><div class='del'>-	  parallel make (-jN).  Tested on FreeBSD.</div><div class='del'>-</div><div class='del'>-Wed Apr 23 11:49:54 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb (Set#each, SortedSet#each, TC_Set#test_each): Return</div><div class='del'>-	  an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-Wed Apr 23 00:42:49 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): show full stack grace except SystemStackError.</div><div class='del'>-	  backport from 1.9.  [ruby-dev:31014]</div><div class='del'>-</div><div class='del'>-Wed Apr 23 00:18:45 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_symbol.rb (TestSymbol#test_to_proc): Improve</div><div class='del'>-	  tests of Symbol#to_proc.</div><div class='del'>-</div><div class='del'>-Tue Apr 22 22:43:05 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_proc_new, YIELD_FUNC_LAMBDA): Add a new nd_state</div><div class='del'>-	  YIELD_FUNC_LAMBDA which avoids automatic `avalue' conversion for</div><div class='del'>-	  arguments.  This fixes a bug where [1,[2,3]].map(&amp;:object_id)</div><div class='del'>-	  fails.</div><div class='del'>-</div><div class='del'>-	* intern.h, object.c: Hide rb_proc_new() from intern.h.  It should</div><div class='del'>-	  not be considered an official API function yet.</div><div class='del'>-</div><div class='del'>-Tue Apr 22 21:24:32 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_proc_new): Turn the BLOCK_LAMBDA flag on.</div><div class='del'>-</div><div class='del'>-	* object.c (sym_to_proc), test/ruby/test_symbol.rb: Add back</div><div class='del'>-	  Symbol#to_proc, now that it passes the tests.</div><div class='del'>-</div><div class='del'>-Tue Apr 22 19:35:03 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_initialize): Remove an undocumented</div><div class='del'>-	  feature (passing a block to the constructor) that's broken.</div><div class='del'>-	  This is not what I intended.</div><div class='del'>-</div><div class='del'>-Tue Apr 22 17:49:46 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): should protect temporary string from</div><div class='del'>-	  GC.   [ruby-dev:34480]</div><div class='del'>-</div><div class='del'>-Tue Apr 22 17:12:05 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (re_search): string might be NULL.  [ruby-core:16478]</div><div class='del'>-</div><div class='del'>-Tue Apr 22 16:44:00 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_tap): Correct documentation; pointed out by</div><div class='del'>-	  okkez in [ruby-dev:34472].</div><div class='del'>-</div><div class='del'>-Tue Apr 22 10:05:51 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (eaccess): workaround for recent msvcrt's behavior.</div><div class='del'>-	  [ruby-core:16460]</div><div class='del'>-</div><div class='del'>-Mon Apr 21 16:06:47 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_init): preserve the method name in ID.</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_each): need not to call rb_to_id().</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_with_index): ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr 21 17:19:52 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_method_name): New gloval function: __method__;</div><div class='del'>-	  backported from matzruby / 1.9.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_frame_this_func), intern.h: New internal function.</div><div class='del'>-</div><div class='del'>-	* intern.h (RETURN_ENUMERATOR): Use rb_frame_this_func() instead</div><div class='del'>-	  of rb_frame_last_func(), to accommodate the behavior to that of</div><div class='del'>-	  1.9.</div><div class='del'>-</div><div class='del'>-Mon Apr 21 15:54:48 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb (Tempfile::_close): check @data before modifying</div><div class='del'>-	  it; backported from 1.9.  [ruby-dev:34094]</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb (Tempfile::close): clear @data and @tmpname.</div><div class='del'>-</div><div class='del'>-Mon Apr 21 10:17:17 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c: should include &lt;errno.h&gt; to refer errno.</div><div class='del'>-</div><div class='del'>-Mon Apr 21 10:02:43 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (recursive_hash): prototype.</div><div class='del'>-</div><div class='del'>-Mon Apr 21 10:00:51 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (rb_strftime): check errno to detect strftime(3)'s error.</div><div class='del'>-	  this is workaround for recent version of MSVCRT.</div><div class='del'>-	  [ruby-dev:34456]</div><div class='del'>-</div><div class='del'>-Sun Apr 20 21:10:04 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* .: Release as Ruby 1.8.7-preview2.</div><div class='del'>-</div><div class='del'>-Sun Apr 20 21:02:06 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enumerator.c: Resolve the method every time an enumeration</div><div class='del'>-	  method is run, not once when the enumerator is initialized as it</div><div class='del'>-	  was before, so that method_missing() and method (re)definition</div><div class='del'>-	  afterwards are both in effect; pointed out in: [ruby-core:16441]</div><div class='del'>-</div><div class='del'>-Sun Apr 20 17:59:25 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c, NEWS, test/ruby/test_symbol.rb: Revert Symbol#to_proc</div><div class='del'>-	  since it does not pass the tests.</div><div class='del'>-</div><div class='del'>-Sun Apr 20 14:29:35 2008  Technorama Ltd.  &lt;oss-ruby@technorama.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c: initialize session class.</div><div class='del'>-</div><div class='del'>-Sat Apr 19 20:54:42 2008  akira yamada  &lt;akira@arika.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/ftp.rb, lib/uri/generic.rb, test/uri/test_common.rb,</div><div class='del'>-	  test/uri/test_ftp.rb, test/uri/test_generic.rb: backported from 1.9.</div><div class='del'>-	  [ruby-dev:31318]</div><div class='del'>-</div><div class='del'>-Sat Apr 19 20:35:02 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/baseemitter.rb, lib/yaml/encoding.rb: performance</div><div class='del'>-	  tuning around String#gsub.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/tag.rb: Replace nodoc with stopdoc so Module methods get</div><div class='del'>-	  documented.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/store.rb (YAML::load): modified to support empty</div><div class='del'>-	  database.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/store.rb (YAML::Store::marshal_dump_supports_canonical_option?):</div><div class='del'>-	  add a method to support faster PStore.</div><div class='del'>-</div><div class='del'>-Sat Apr 19 20:16:52 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/types.rb: Likewise, pass self to YAML::quick_emit;</div><div class='del'>-	  merged from 1.9.</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb (quick_emit): use combination of object_id and hash to</div><div class='del'>-	  identify repeated object references, since GC will reuse memory of</div><div class='del'>-	  objects during output of YAML. [ruby-Bugs-8548] [ruby-Bugs-3698];</div><div class='del'>-	  merged from 1.9.</div><div class='del'>-</div><div class='del'>-Sat Apr 19 20:05:39 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_equal, rb_ary_eql, rb_ary_hash, rb_ary_cmp):</div><div class='del'>-	  Make Array#eql?, #hash, #== and #&lt;=&gt; use rb_exec_recursive() and</div><div class='del'>-	  handle recursive data properly.</div><div class='del'>-</div><div class='del'>-	* hash.c (hash_equal, rb_hash_hash): Make Hash#eql?, #hash and #==</div><div class='del'>-	  use rb_exec_recursive() and handle recursive data properly.</div><div class='del'>-</div><div class='del'>-Sat Apr 19 19:26:09 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h, eval.c (rb_exec_recursive): New internal function to</div><div class='del'>-	  help perform recursive operation; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Sat Apr 19 18:42:04 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h, hash.c (rb_hash_lookup): New internal function to</div><div class='del'>-	  check if a key exists in a hash, ignoring #default; backported</div><div class='del'>-	  from 1.9.</div><div class='del'>-</div><div class='del'>-Fri Apr 18 18:56:57 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_genericresolver_node_import): should</div><div class='del'>-	  not set instance variable "@kind" before initializing it.</div><div class='del'>-	  [ruby-dev:32677]</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_resolver_initialize,</div><div class='del'>-	  syck_resolver_detect_implicit, syck_emitter_emit): remove unused</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-Fri Apr 18 18:54:57 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: Node#value defined twice.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/: several method redefinitions causing warnings.</div><div class='del'>-</div><div class='del'>-Fri Apr 18 16:36:16 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/node.rb (REXML::Node::indent): should initialize rv</div><div class='del'>-	  variable.  a patch from Tadayoshi Funaba &lt;tadf AT dotrb.org&gt; in </div><div class='del'>-	  [ruby-dev:32783].</div><div class='del'>-</div><div class='del'>-Fri Apr 18 16:01:37 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml: Merge fixes since 1.8.6 made solely on the ruby_1_8_6</div><div class='del'>-	  branch.</div><div class='del'>-</div><div class='del'>-Wed Apr 16 06:11:49 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_settracefunc.rb (TestSetTraceFunc#test_event):</div><div class='del'>-	  Fix tests to reflect the following changes: r15833, r15759.</div><div class='del'>-</div><div class='del'>-Wed Apr 16 05:03:48 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* .: Release as Ruby 1.8.7-preview1.</div><div class='del'>-</div><div class='del'>-Wed Apr 16 02:09:14 2008  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403]</div><div class='del'>-</div><div class='del'>-	* test/xmlrpc/test_cookie.rb: add a test for the above fix.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 23:48:28 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* version.h: Branch off ruby_1_8_7 from ruby_1_8 in preparation</div><div class='del'>-	  for the forthcoming 1.8.7 release.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 23:40:39 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (rb_syck_mktime): Avoid buffer overflow.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 20:32:03 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_inspect): backported from 1.9.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 19:03:28 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_receiver, method_name, method_owner): New</div><div class='del'>-	  methods; backported from 1.9. bug#19007</div><div class='del'>-</div><div class='del'>-Tue Apr 15 18:39:14 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri.rb, lib/uri/ldaps.rb: added LDAPS</div><div class='del'>-	  scheme; backported from 1.9. bug#19015, [ruby-dev:31896]</div><div class='del'>-</div><div class='del'>-Tue Apr 15 17:45:43 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: backported from 1.9. bug#19003</div><div class='del'>-</div><div class='del'>-Tue Apr 15 17:06:12 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_symbol.rb (TestSymbol#test_to_proc): add tests.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 16:58:55 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menuspec.rb: option check will fail when </div><div class='del'>-	  TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__ is true.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/palette.rb: bug fix.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 16:47:48 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c, gc.c: New methods: GC.stress, GC.stress=;</div><div class='del'>-	  backported from 1.9. a patch from Tadashi Saito</div><div class='del'>-	  in [ruby-dev:34394] and bug#19000</div><div class='del'>-</div><div class='del'>-Tue Apr 15 12:35:44 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* rubyio.h (rb_io_t): renamed from OpenFile.</div><div class='del'>-</div><div class='del'>-	* ruby.h (struct RHash), file.c, gc.c, io.c, ext/dl/dl.c,</div><div class='del'>-	  ext/io/wait/wait.c, ext/pty/pty.c, ext/readline/readline.c,</div><div class='del'>-	  ext/socket/socket.c: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: removed workaround for OpenFile.</div><div class='del'>-</div><div class='del'>-Tue Apr 15 00:15:29 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: typo. call a wrong method.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/ttk_wrapper.rb: bug fix.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tktextio.rb: add binding for 'Ctrl-u' at console mode.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb, ext/tk/lib/tk/itemfont.rb, ext/tk/lib/font.rb: </div><div class='del'>-	  support __IGNORE_UNKNOWN_CONFIGURE_OPTION__ about font options.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb, </div><div class='del'>-	  ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: bug fix. </div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/tpaned.rb: improve TPaned#add.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: add TkTimer#at_end(proc) to register the </div><div class='del'>-	  procedure which called at end of the timer.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 19:54:21 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_flatten, rb_ary_flatten_bang): Take an optional</div><div class='del'>-	  argument that determines the level of recursion to flatten;</div><div class='del'>-	  backported from 1.9.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_shuffle_bang, rb_ary_shuffle, rb_ary_choice,</div><div class='del'>-	  rb_ary_cycle, rb_ary_permutation, rb_ary_combination,</div><div class='del'>-	  rb_ary_product, rb_ary_take, rb_ary_take_while, rb_ary_drop,</div><div class='del'>-	  rb_ary_drop_while): New methods: Array#shuffle, #shuffle!,</div><div class='del'>-	  #choice, #cycle, #permutation, #combination, #product, #take,</div><div class='del'>-	  #take_while, #drop, #drop_while; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 19:52:35 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: New macro: RB_GC_GUARD().</div><div class='del'>-</div><div class='del'>-Mon Apr 14 19:49:35 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (rb_genrand_int32, rb_genrand_real), intern.h: Export.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_tmp_new), intern.h: New function.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 19:18:55 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (inject_i, inject_op_i): prototype.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 19:10:47 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c New methods: Enumerable#take, #take_while, #drop and</div><div class='del'>-	  #drop_while; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 18:50:15 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c: New methods: Enumerable#one?, #none?, #minmax, #min_by,</div><div class='del'>-	  #max_by, #minmax_by and #cycle; backported from 1.9.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_find_index): Add support for find_index(obj);</div><div class='del'>-	  [ruby-dev:34313]; backported from 1.9.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_inject): Add support for Enumerable#inject(:binop);</div><div class='del'>-	  backported from 1.9.</div><div class='del'>-</div><div class='del'>-	* enum.c: Alias Enumerable#reject to #inject; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 18:14:19 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_find, enum_reject): Return an enumerator if no</div><div class='del'>-	  block is given; backported from 1.9.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_each_line, rb_io_each_byte, rb_io_s_foreach,</div><div class='del'>-	  argf_each_line, argf_each_byte): Ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (str_gsub): Ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 18:10:05 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (find_index_i, find_index_iter_i): add prototype for VC.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 17:55:30 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_collect_bang, rb_ary_select): Return an</div><div class='del'>-	  enumerator if no block is given; backported from 1.9.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_each, dir_foreach): Ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_partition, enum_sort_by): Ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (os_each_obj): Ditto.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_delete_if, rb_hash_reject_bang, rb_hash_select,</div><div class='del'>-	  rb_hash_each_value, rb_hash_each_key, rb_hash_each_pair,</div><div class='del'>-	  env_each_key, env_each_value, env_each, env_each_pair,</div><div class='del'>-	  env_reject_bang, env_delete_if, env_select): Ditto.</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_step, int_upto, int_downto, int_dotimes): Ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 16:42:53 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (rb_block_call_func): Fix prototype.</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_iter_i, enumerator_each_i): Ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 15:49:05 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_count, enum_find_index): New methods:</div><div class='del'>-	  Enumerable#count and #find_index; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 14:16:08 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_mark, enumerator_iter_i, enumerator_each_i,</div><div class='del'>-	  enumerator_allocate): add prototype.</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_each_i): declare unused two arguments.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 13:58:32 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_char): New methods: String#chars and</div><div class='del'>-	  #each_char; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 13:42:20 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_each_line, rb_str_each_byte): Reflect</div><div class='del'>-	  enumerator integration.  #lines and #bytes are now aliases to</div><div class='del'>-	  #each_line and #each_byte, respectively.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 13:19:36 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_each, range_step): Return an enumerator if no</div><div class='del'>-	  block is given; backported from 1.9.</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_each, rb_struct_each_pair): Ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr 14 13:07:59 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_partition, rb_str_rpartition,</div><div class='del'>-	  rb_str_start_with, rb_str_end_with): New methods:</div><div class='del'>-	  String#partition, #rpartition, #start_with? and #end_with?;</div><div class='del'>-	  backported from 1.9.  These methods are $KCODE aware unlike</div><div class='del'>-	  #index, #rindex and #include?.</div><div class='del'>-</div><div class='del'>-Sun Apr 13 15:55:52 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (sym_to_proc): new method Symbol#to_proc; backported</div><div class='del'>-	  from 1.9. bug#19012</div><div class='del'>-</div><div class='del'>-Fri Apr 11 19:14:30 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_tap): new method Object#tap; backported from</div><div class='del'>-	  1.9. bug#19008</div><div class='del'>-</div><div class='del'>-Fri Apr 11 18:58:09 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: new method Process.exec; backported from 1.9. bug#19006</div><div class='del'>-</div><div class='del'>-Fri Apr 11 12:43:56 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb, ext/tk/lib/tkextlib/tile/style.rb, </div><div class='del'>-	  ext/tk/sample/tkextlib/tile/demo.rb: previous patch is not complete.</div><div class='del'>-</div><div class='del'>-Fri Apr 11 10:22:54 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb:</div><div class='del'>-	  __define_LoadImages_proc_for_compatibility__! do nothing when the </div><div class='del'>-	  Tcl command exists.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/style.rb:</div><div class='del'>-	  __define_wrapper_proc_for_compatibility__! do nothing when the Tcl</div><div class='del'>-	  command exists.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkextlib/tile/demo.rb: don't create 'step' theme if </div><div class='del'>-	  it already exists.</div><div class='del'>-</div><div class='del'>-Fri Apr 11 08:05:12 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): add volatile to avoid potential GC bug.  a</div><div class='del'>-	  patch from Tomoyuki Chikanaga &lt;chikanag at nippon-control-system.co.jp&gt;</div><div class='del'>-	  in [ruby-dev:34311].</div><div class='del'>-</div><div class='del'>-Thu Apr 10 20:29:13 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/rdebug.el, misc/README: Remove rdebug.el as per request</div><div class='del'>-	  from the maintainer and mention the ruby-debug project at</div><div class='del'>-	  RubyForge in README; bug#19043.</div><div class='del'>-</div><div class='del'>-Thu Apr 10 20:08:37 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_first, enum_group_by): New methods:</div><div class='del'>-	  Enumerable#first and #group_by; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Thu Apr 10 19:49:10 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enumerator.c (rb_eStopIteration), eval.c (rb_f_loop), ruby.h:</div><div class='del'>-	  Add a new exception class StopIteration, which breaks Kernel#loop</div><div class='del'>-	  iteration when raised; backported from 1.9.</div><div class='del'>-</div><div class='del'>-	* enumerator.c (enumerator_next, enumerator_rewind): Implement</div><div class='del'>-	  #next and #rewind using the "generator" library.</div><div class='del'>-</div><div class='del'>-	* lib/generator.rb: Implement Enumerable::Enumerator#next and</div><div class='del'>-	  #rewind.</div><div class='del'>-</div><div class='del'>-Thu Apr 10 19:29:48 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_first, rb_ary_last): Return a shared array when</div><div class='del'>-	  possible.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_pop, rb_ary_pop_m, rb_ary_shift, rb_ary_shift_m):</div><div class='del'>-	  Array#pop and Array#shift can take an optional argument</div><div class='del'>-	  specifying the number of elements to remove and return;</div><div class='del'>-	  backported from 1.9.</div><div class='del'>-</div><div class='del'>-Thu Apr 10 14:00:44 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb (Resolv::DNS#each_address): backport from 1.9 for</div><div class='del'>-	  CNAME.  [ruby-dev:34200]</div><div class='del'>-</div><div class='del'>-Thu Apr 10 01:42:25 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (iterate_method): add prototype to avoid warning on VC++.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 23:12:41 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: SEGV when tcltk-stubs is enabled.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: avoid error on a shared object.</div><div class='del'>-</div><div class='del'>-	* ext/tk/extconf.rb: support --with-tcltkversion</div><div class='del'>-</div><div class='del'>-	* ext/tk/README.tcltklib: add document about --with-tcltkversion</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget, </div><div class='del'>-	  ext/tk/sample/demos-jp/style.rb, ext/tk/sample/demos-en/style.rb, </div><div class='del'>-	  ext/tk/sample/demos-jp/bind.rb, ext/tk/sample/demos-en/bind.rb: </div><div class='del'>-	  bug fix.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 21:54:45 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_pop): Do not reallocate too often; backported</div><div class='del'>-	  from 1.9.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 21:13:05 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_each, rb_ary_each_index, rb_ary_reverse_each,</div><div class='del'>-	  rb_ary_reject, rb_ary_reject_bang): Array#each, #each_index,</div><div class='del'>-	  #reverse_each, #reject, #reject! and #delete_if return an</div><div class='del'>-	  enumerator if no block is given; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 20:47:16 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_index, rb_ary_index): Array#index and #rindex</div><div class='del'>-	  can take a block instead of an argument; backported from 1.9.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 19:58:31 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* enumerator.c, inits.c (rb_call_inits), ruby.h, intern.h,</div><div class='del'>-	  ext/enumerator, common.mk (OBJS, enumerator.$(OBJEXT)): Make the</div><div class='del'>-	  enumerator module built-in.</div><div class='del'>-</div><div class='del'>-	* enumerator.c: New method: Enumerable::Enumerator#with_index.</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_each_with_index): Enumerable#each_with_index now</div><div class='del'>-	  returns an enumerator instead of raising an exception if no</div><div class='del'>-	  block is given.  Enumerable#enum_with_index, formerly defined in</div><div class='del'>-	  the enumerator module, is kept as an alias to each_with_index</div><div class='del'>-	  for backward compatibility.</div><div class='del'>-</div><div class='del'>-Wed Apr  9 19:43:51 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_obj_method, rb_proc_call), intern.h: Export.</div><div class='del'>-</div><div class='del'>-Tue Apr  8 11:11:28 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (EXEC_TAG): remove unnecessary FLUSH_REGISTER_WINDOWS for</div><div class='del'>-	  better performance on SPARC.  [ruby-core:16159]</div><div class='del'>-</div><div class='del'>-Tue Apr  8 10:49:54 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_quote): should always copy the quoting string.</div><div class='del'>-	  [ruby-core:16235]</div><div class='del'>-</div><div class='del'>-Mon Apr  7 21:35:08 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_nitems): Backport Array#nitems with a block;</div><div class='del'>-	  suggested by Bertram Scharpf &lt;lists@bertram-scharpf.de&gt; in</div><div class='del'>-	  [ruby-talk:134083].</div><div class='del'>-</div><div class='del'>-Sun Apr  6 09:45:00 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_tell): check if closed.  [ruby-core:16223]</div><div class='del'>-</div><div class='del'>-Sat Apr  5 10:05:00 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_check_to_integer): backported for range_step.</div><div class='del'>-</div><div class='del'>-Fri Apr  4 05:57:11 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (Net::POP3::do_finish): clear @n_mails and</div><div class='del'>-	  @n_bytes as well.  [ruby-core:16144]</div><div class='del'>-</div><div class='del'>-Fri Apr  4 02:17:06 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): should not round step into integer if</div><div class='del'>-	  begin and end are numeric.  [ruby-core:15990]</div><div class='del'>-</div><div class='del'>-Tue Apr  1 14:43:38 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: get rid of empty expansion.</div><div class='del'>-</div><div class='del'>-	* {bcc,win}32/Makefile (config.h): need to define RUBY_SETJMP, etc.</div><div class='del'>-</div><div class='del'>-Tue Apr  1 11:36:19 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: _setjmp is available but _longjmp is not on mingw.</div><div class='del'>-</div><div class='del'>-Tue Apr  1 03:20:40 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_SETJMP, RUBY_LONGJMP, RUBY_JMP_BUF): prefers</div><div class='del'>-	  _setjmp over setjmp and sigsetjmp.  [ruby-core:16023]</div><div class='del'>-	  __builtin_setjmp cannot handle a variable.</div><div class='del'>-</div><div class='del'>-	* configure.in (--with-setjmp-type): new option to override the</div><div class='del'>-	  default rule in the above.</div><div class='del'>-</div><div class='del'>-	* eval_intern.h (ruby_setjmp, ruby_longjmp), gc.c (rb_setjmp),</div><div class='del'>-	  vm_core.h (rb_jmpbuf_t): use RUBY_SETJMP, RUBY_LONGJMP and</div><div class='del'>-	  RUBY_JMP_BUF.</div><div class='del'>-</div><div class='del'>-Tue Apr  1 01:55:52 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb (Resolv::Config.default_config_hash): requires</div><div class='del'>-	  win32/resolv to use Win32::Resolv.  [ruby-dev:34138]</div><div class='del'>-</div><div class='del'>-Mon Mar 31 14:51:11 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_div): Bignum#div should return integer for</div><div class='del'>-	  floating number operand.</div><div class='del'>-</div><div class='del'>-Sun Mar 30 07:00:32 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: rb_hash_lookup has not been backported yet.</div><div class='del'>-</div><div class='del'>-Sat Mar 29 14:18:41 2008  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/*: full update Ruby/Tk to support Ruby(1.9|1.8) and Tc/Tk8.5.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb: [incompatible] remove TileWidgets' </div><div class='del'>-	  instate/state/identify method to avoid the conflict with standard</div><div class='del'>-	  widget options. Those methods are renamed to ttk_instate/ttk_state/</div><div class='del'>-	  ttk_identify (tile_instate/tile_state/tile_identify are available </div><div class='del'>-	  too). Although I don't recommend, if you realy need old methods, </div><div class='del'>-	  please define "Tk::USE_OBSOLETE_TILE_STATE_METHOD = true" before </div><div class='del'>-	  "require 'tkextlib/tile'".</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb: "Tk::Tile::__Import_Tile_Widgets__!"</div><div class='del'>-	  is obsolete. It outputs warning. To control default widget set, </div><div class='del'>-	  use "Tk.default_widget_set = :Ttk".</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ method and </div><div class='del'>-	  __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method are defind </div><div class='del'>-	  as module methods of TkConfigMethod. It may help users to wrap old </div><div class='del'>-	  Ruby/Tk scripts (use standard widgets) to force to use Ttk widgets.</div><div class='del'>-	  Ttk widgets don't have some options of standard widgets which are </div><div class='del'>-	  control the view of widgets. When set ignore-mode true, configure </div><div class='del'>-	  method tries to ignoure such unknown options with no exception. </div><div class='del'>-	  Of course, it may raise other troubles on the GUI design. </div><div class='del'>-	  So, those are a little danger methods. </div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ </div><div class='del'>-	  method and __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method </div><div class='del'>-	  are defind as module methods of TkItemConfigMethod as the same </div><div class='del'>-	  purpose as TkConfigMethod's ones.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/ttk_wrapper.rb: A new example. This is a tool for </div><div class='del'>-	  wrapping old Ruby/Tk scripts (which use standard widgets) to use </div><div class='del'>-	  Ttk (Tile) widgets as default.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkextlib/tile/demo.rb: use ttk_instate/ttk_state </div><div class='del'>-	  method instead of instate/state method.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/root, ext/tk/lib/tk/namespace.rb,</div><div class='del'>-	  ext/tk/lib/tk/text.rb, ext/tk/lib/tkextlib/*: some 'instance_eval's  </div><div class='del'>-	  are replaced to "instance_exec(self)".</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/event.rb: bug fix on KEY_TBL and PROC_TBL (?x is not </div><div class='del'>-	  a character code on Ruby1.9).</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: support new style of operation argument </div><div class='del'>-	  on Tcl/Tk's 'trace' command for variables. </div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/sammple/demos-jp/textpeer.rb, </div><div class='del'>-	  ext/tk/sammple/demos-en/textpeer.rb: new widget demo.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: decrase SEGV troubles (probably)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: remove Thread.critical access if Ruby1.9</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/multi-tk.rb: support Ruby1.9 (probably)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb: add method to define Tcl/Tk command </div><div class='del'>-	  to make Tcl/Tk theme sources (based on different version of Tile </div><div class='del'>-	  extension) available. </div><div class='del'>-	  (Tk::Tile::__define_LoadImages_proc_for_comaptibility__)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb, ext/tk/lib/tk/wm.rb: support dockable frames</div><div class='del'>-	  (Tcl/Tk8.5 feature). 'wm' command can treat many kinds of widgets </div><div class='del'>-	  as toplevel widgets.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/style.rb: ditto.</div><div class='del'>-	  (Tk::Tile::Style.__define_wrapper_proc_for_compatibility__)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/font.rb: add actual_hash and metrics_hash to get </div><div class='del'>-	  properties as a hash. metrics_hash method returns a boolean value </div><div class='del'>-	  for 'fixed' option. But metrics method returns numeric value </div><div class='del'>-	  (0 or 1) for 'fixed' option, because of backward compatibility. </div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: somtimes fail to set callback procedure.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.sleep and Tk.wakeup method. Tk.sleep </div><div class='del'>-	  doesn't block the eventloop. It will be better to use the method </div><div class='del'>-	  in event callbacks.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tksleep_sample.rb: sample script about Tk.sleep.</div><div class='del'>-</div><div class='del'>-Sat Mar 29 04:08:59 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (clone_method): should copy cref as well.</div><div class='del'>-	  [ruby-core:15833]</div><div class='del'>-</div><div class='del'>-Mon Mar 24 20:07:42 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): Call trace hook for if expression after the</div><div class='del'>-	  condition has been evaluated, not before; submitted by Rocky</div><div class='del'>-	  Bernstein in #18722.</div><div class='del'>-</div><div class='del'>-Mon Mar 24 19:44:53 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): Always prepare a new array for each file's</div><div class='del'>-	  SCRIPT_LINES__ storage, instead of appending source lines every</div><div class='del'>-	  time a file is re-loaded; submitted by Rocky Bernstein in</div><div class='del'>-	  #18517.</div><div class='del'>-</div><div class='del'>-Mon Mar 24 10:25:54 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: sitearch should use target_cpu.  [ruby-core:15986]</div><div class='del'>-</div><div class='del'>-Mon Mar 24 01:24:24 2008  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/erb.rb (result): use proc instead of Thread. [ruby-dev:33692]</div><div class='del'>-</div><div class='del'>-Fri Mar 21 21:26:52 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb (Resolv::Hosts): should not use win32/resolv on cygwin.</div><div class='del'>-	  [ruby-dev:29945], [ruby-dev:34095]</div><div class='del'>-</div><div class='del'>-	* lib/win32/registry.rb (Win32::Registry.expand_environ): try upcased</div><div class='del'>-	  name too for cygwin.  [ruby-dev:29945]</div><div class='del'>-</div><div class='del'>-	* lib/win32/resolv.rb (Win32::Resolv.get_hosts_path): use expand_path.</div><div class='del'>-</div><div class='del'>-Fri Mar 21 21:10:00 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb: Say that I am the current maintainer.</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: Ditto.</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb: Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syslog/syslog.txt: Ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 21 09:24:28 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb (open_for_install): write block result and rewrite only</div><div class='del'>-	  if changed from existing file.</div><div class='del'>-</div><div class='del'>-Wed Mar 19 21:01:08 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_inspect, dir_path, dir_tell): check for frozen and closed</div><div class='del'>-	  is not needed.  [ruby-dev:32640]</div><div class='del'>-</div><div class='del'>-Wed Mar 19 20:25:40 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (Init_Dir): define inspect method.  [ruby-core:15960]</div><div class='del'>-</div><div class='del'>-Wed Mar 19 14:59:12 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-style.el (ruby-style-{case,label}-indent): fix for labels</div><div class='del'>-	  inside blocks in switch and function top level.</div><div class='del'>-</div><div class='del'>-Wed Mar 19 14:36:40 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): treat successive underscores as</div><div class='del'>-	  nondigit.  [ruby-dev:34089]</div><div class='del'>-</div><div class='del'>-Wed Mar 19 00:01:23 2008  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/erb.rb (ERB::Compiler): Make some minor code optimization.</div><div class='del'>-</div><div class='del'>-Mon Mar 17 17:11:13 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-mode): should use `run-mode-hooks' instead</div><div class='del'>-	  of calling `run-hooks' directly to run the mode hook.  patch from</div><div class='del'>-	  Chiyuan Zhang &lt;pluskid AT gmail.com&gt; in [ruby-core:15915]</div><div class='del'>-</div><div class='del'>-Mon Mar 17 16:41:08 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: unset GREP_OPTIONS.  [ruby-core:15918]</div><div class='del'>-</div><div class='del'>-Fri Mar 14 16:59:23 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_LIB_PREFIX): fix for prefix.</div><div class='del'>-</div><div class='del'>-Fri Mar 14 16:35:11 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::Cookie::initialize): performance patch from</div><div class='del'>-	  Makoto Kuwata &lt;kwa@kuwata-lab.com&gt; in [ruby-dev:34048].</div><div class='del'>-</div><div class='del'>-Fri Mar 14 15:49:05 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_LIB_PREFIX): use libdir.</div><div class='del'>-</div><div class='del'>-Fri Mar 14 10:12:29 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_CHECK_VARTYPE): should not indent preprocessor</div><div class='del'>-	  directives.</div><div class='del'>-</div><div class='del'>-Thu Mar 13 00:37:20 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): yields the last executed node line number at</div><div class='del'>-	  return event.  [ruby-core:15855]</div><div class='del'>-</div><div class='del'>-Wed Mar 12 02:12:20 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb: check $@ to avoid NoMethodError.</div><div class='del'>-</div><div class='del'>-Tue Mar 11 19:48:09 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_coerce): try conversion before type check.</div><div class='del'>-	  [ruby-core:15838]</div><div class='del'>-</div><div class='del'>-Tue Mar 11 17:03:23 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (Delegator#initialize, DelegateClass): skip correct</div><div class='del'>-	  backtrace.  [ruby-dev:34019]</div><div class='del'>-</div><div class='del'>-Tue Mar 11 16:43:53 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_cmdvector): terminate shrunken command line.</div><div class='del'>-</div><div class='del'>-Tue Mar 11 12:39:03 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (clean-local): removes MINOBJS.</div><div class='del'>-</div><div class='del'>-Sat Mar  8 18:50:57 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (isdirsep): backslash is valid path separator on cygwin too.</div><div class='del'>-</div><div class='del'>-Fri Mar  7 19:56:10 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: rdoc added.  [ruby-Patches-9762]</div><div class='del'>-</div><div class='del'>-Thu Mar  6 15:10:21 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32}/Makefile.sub (RUNRUBY): use $(PROGRAM) instead of</div><div class='del'>-	  ruby$(EXEEXT).</div><div class='del'>-	  suggested by KIMURA Koichi &lt;kimura.koichi at canon.co.jp&gt;.</div><div class='del'>-	  [ruby-dev:34000]</div><div class='del'>-</div><div class='del'>-Thu Mar  6 12:15:06 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (opt_block_param): command can start just after block param</div><div class='del'>-	  definition.  [ruby-list:44479]</div><div class='del'>-</div><div class='del'>-Thu Mar  6 00:34:11 2008  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/erb.rb: update RDoc. Thanks Makoto Kuwata [ruby-dev:33702]</div><div class='del'>-</div><div class='del'>-Mon Mar  3 23:28:34 2008  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb: should normalize path</div><div class='del'>-	  separators in path_info to prevent directory traversal attacks</div><div class='del'>-	  on DOSISH platforms.</div><div class='del'>-	  reported by Digital Security Research Group [DSECRG-08-026].</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb: pathnames which have</div><div class='del'>-	  not to be published should be checked case-insensitively.</div><div class='del'>-</div><div class='del'>-Mon Mar  3 16:14:24 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_any_hash): shrinks all results in Fixnum range.</div><div class='del'>-	  [ruby-core:15713]</div><div class='del'>-</div><div class='del'>-Sat Mar  1 02:35:08 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (big2str_find_n1): check integer overflow.</div><div class='del'>-</div><div class='del'>-Tue Feb 26 16:06:00 2008  Technorama Ltd.  &lt;oss-ruby@technorama.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey_{ec,dh,dsa,rsa}.c: Remove useless warnings.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.c: Simplify code.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl_session.c Fix compiler warnings.</div><div class='del'>-	  Undefine #id if SSL_SESSION_get_id is not supported.</div><div class='del'>-</div><div class='del'>-Tue Feb 26 15:43:42 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (tokadd_escape): refactored.  [ruby-core:15657]</div><div class='del'>-</div><div class='del'>-Mon Feb 25 17:30:29 2008  Technorama Ltd.  &lt;oss-ruby@technorama.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/digest.c ext/openssl/lib/openssl/digest.rb:</div><div class='del'>-	  Commit patch #9280 from Akinori MUSHA.</div><div class='del'>-	  Simplify the OpenSSL::Digest class and make use of the</div><div class='del'>-	  existing Digest framework.</div><div class='del'>-	  Enhance performance.</div><div class='del'>-</div><div class='del'>-Mon Feb 25 13:40:03 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (Init_process): share bignum objects for RLIM_INFINITY,</div><div class='del'>-	  RLIM_SAVED_MAX and RLIM_SAVED_CUR if they are equal.</div><div class='del'>-</div><div class='del'>-Sun Feb 24 23:29:48 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk, {bcc,win}32/Makefile.sub (clean-local): remove</div><div class='del'>-	  intermediate files.</div><div class='del'>-</div><div class='del'>-Sun Feb 24 03:52:58 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (valid_filename): use O_EXCL to get rid of clobbering</div><div class='del'>-	  existing files in race conditions.</div><div class='del'>-</div><div class='del'>-Fri Feb 22 19:50:19 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (BIGZEROP): fix for longer Bignum zeros.  [ruby-Bugs-17454]</div><div class='del'>-</div><div class='del'>-Fri Feb 22 16:09:53 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_lshift, rb_big_rshift, rb_big_aref): removed excess</div><div class='del'>-	  arguments.</div><div class='del'>-</div><div class='del'>-Thu Feb 21 00:01:34 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RPATHFLAG): -R option of HP-UX ld is not for runtime</div><div class='del'>-	  load path.  [ruby-list:44600]</div><div class='del'>-</div><div class='del'>-Wed Feb 20 23:55:19 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_map_errno): exported.</div><div class='del'>-</div><div class='del'>-Wed Feb 20 13:08:52 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb (parse_args): added --dir-mode, --script-mode and</div><div class='del'>-	  --cmd-type options.  [ruby-dev:33816]</div><div class='del'>-</div><div class='del'>-	* instruby.rb (parse_args): added bin-arch and bin-comm to install</div><div class='del'>-	  type, for compiled files and script files.</div><div class='del'>-</div><div class='del'>-	* instruby.rb (parse_args): deal with make style command line macros,</div><div class='del'>-	  and count as long syle options if prefixed with INSTALL_.</div><div class='del'>-</div><div class='del'>-	* instruby.rb (makedirs): use $dir_mode.  [ruby-dev:33805]</div><div class='del'>-</div><div class='del'>-	* instruby.rb (open_for_install): set file mode, which is now</div><div class='del'>-	  permission mode instead of access mode.</div><div class='del'>-</div><div class='del'>-	* instruby.rb (bin-comm): installs scripts with replacing shebang</div><div class='del'>-	  lines.</div><div class='del'>-</div><div class='del'>-Tue Feb 19 18:34:32 2008  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (STACK_LENGTH) [SPARC] : 0x80 offset removed.  [ruby-dev:33857]</div><div class='del'>-</div><div class='del'>-Tue Feb 19 14:27:32 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c (readline_event): prevent polling.  based on</div><div class='del'>-	  a patch from error errorsson in [ruby-Bugs-17675].</div><div class='del'>-</div><div class='del'>-Tue Feb 19 12:08:29 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): clear ruby_eval_tree_begin if parse failed.</div><div class='del'>-</div><div class='del'>-Mon Feb 18 16:23:45 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yycompile): clear ruby_eval_tree_begin too before parse.</div><div class='del'>-</div><div class='del'>-Mon Feb 18 10:17:42 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/pty/lib/expect.rb (IO#expect): check if peer is closed.</div><div class='del'>-	  [ruby-Bugs-17940]</div><div class='del'>-</div><div class='del'>-Fri Feb 15 20:37:06 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rational.rb (floor, ceil, truncate, round): do not use</div><div class='del'>-	  definitions of Numeric.</div><div class='del'>-</div><div class='del'>-	* lib/rational.rb (to_i): should returns truncated self.</div><div class='del'>-</div><div class='del'>-	* lib/complex.rb (numerator): requires</div><div class='del'>-	  Integer#{numerator,denominator}.</div><div class='del'>-</div><div class='del'>-	* lib/complex.rb (quo): do not use definition of Numeric.</div><div class='del'>-</div><div class='del'>-	* lib/complex.rb (div, divmod, floor, ceil, truncate, round):</div><div class='del'>-	  undef'ed.</div><div class='del'>-</div><div class='del'>-Fri Feb 15 15:23:12 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_convert): check upper bound.  a patch from</div><div class='del'>-	  Daniel Luz at [ruby-Bugs-17910].</div><div class='del'>-</div><div class='del'>-Fri Feb 15 02:42:25 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (ftruncate): check if available.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_truncate): check if ftruncate instead of truncate.</div><div class='del'>-</div><div class='del'>-Fri Feb 15 02:40:54 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (sigsetmask): check when signal semantics is not POSIX.</div><div class='del'>-</div><div class='del'>-	* signal.c (USE_TRAP_MASK): set true if sigprocmask or sigsetmask is</div><div class='del'>-	  available.</div><div class='del'>-</div><div class='del'>-Thu Feb 14 17:44:32 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c (dlmem_each_i): typo fixed.  a patch from IKOMA</div><div class='del'>-	  Yoshiki &lt;ikoma AT mb.i-chubu.ne.jp&gt; in [ruby-dev:33776].</div><div class='del'>-</div><div class='del'>-Thu Feb 14 16:02:51 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_utime): inhibits with secure level 2 or higher.</div><div class='del'>-</div><div class='del'>-Thu Feb 14 01:43:16 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/timeout.rb (Timeout::timeout): made sensitive to location on the</div><div class='del'>-	  stack.  [ruby-core:15458]</div><div class='del'>-</div><div class='del'>-Thu Feb 14 00:49:53 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (INSTRUBY_ARGS): pass mode to install.  [ruby-dev:33766]</div><div class='del'>-</div><div class='del'>-	* instruby.rb (parse_args): added --data-mode and --prog-mode options.</div><div class='del'>-</div><div class='del'>-Tue Feb 12 11:33:26 2008  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* test/erb/test_erb.rb(TestERBCore): import from erb-2.0.4.</div><div class='del'>-</div><div class='del'>-	* test/erb/hello.erb: ditto</div><div class='del'>-</div><div class='del'>-Mon Feb 11 17:25:21 2008  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb (RSS::VERSION), test/rss/test_version.rb, NEWS:</div><div class='del'>-	  0.2.3 -&gt; 0.2.4.</div><div class='del'>-</div><div class='del'>-	* lib/rss/maker.rb, lib/rss/maker/, test/rss/test_maker_2.0.rb:</div><div class='del'>-	  fixed a bug that RSS::Maker.make("0.9")'s item doesn't make some</div><div class='del'>-	  elements if description is missed.</div><div class='del'>-	  Reported by Michael Auzenne. Thanks!!!</div><div class='del'>-</div><div class='del'>-	* lib/rss/maker/0.9.rb, test/rss/test_maker_0.9.rb:</div><div class='del'>-	  RSS::Maker.make("0.9") generates RSS 0.92 not RSS 0.91.</div><div class='del'>-</div><div class='del'>-Mon Feb 11 16:57:00 2008  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* ChangeLog: format-time-string under C locale. [ruby-dev:33261]</div><div class='del'>-</div><div class='del'>-Mon Feb 11 16:31:47 2008  URABE Shyouhei  &lt;shyouhei@ice.uec.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_newobj): prohibit call of rb_newobj() during gc.</div><div class='del'>-	  Submitted by Sylvain Joyeux [ruby-core:12099].</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c: do not use LONG2NUM() inside dlptr_free().</div><div class='del'>-	  Slightly modified fix bassed on a patch by Sylvain Joyeux</div><div class='del'>-	  [ruby-core:12099] [ ruby-bugs-11859 ] [ ruby-bugs-11882 ]</div><div class='del'>-	  [ ruby-patches-13151 ].</div><div class='del'>-</div><div class='del'>-Mon Feb 11 00:22:55 2008  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/benchmark.rb (Job::Benchmark#item): fix typo.</div><div class='del'>-</div><div class='del'>-Sat Feb  9 23:22:52 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/extconf.rb: simplified the condition.</div><div class='del'>-</div><div class='del'>-Sat Feb  9 17:51:24 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): use strtod() for more</div><div class='del'>-	  precision.  [ruby-talk:290296]</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (BASE_FIG): made constant.</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/extconf.rb: ditto.  [ruby-dev:33658]</div><div class='del'>-</div><div class='del'>-Sat Feb  9 00:44:52 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb.rb (IRB::Irb::eval_input): rescues Interrupt and other than</div><div class='del'>-	  SystemExit and SignalException.  [ruby-core:15359]</div><div class='del'>-</div><div class='del'>-Fri Feb  8 15:09:21 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (xsystem): expand macros like as make.</div><div class='del'>-</div><div class='del'>-Tue Feb  5 11:14:11 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (INSTALL_DIRS, install_dirs): added BINDIR.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (install_files): rejects files matching to</div><div class='del'>-	  $NONINSTALLFILES.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): defaults $NONINSTALLFILES to backup and</div><div class='del'>-	  temporary filse.</div><div class='del'>-</div><div class='del'>-Mon Feb  4 16:44:24 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (darwin): NSIG is not defined if _XOPEN_SOURCE &gt; 500L.</div><div class='del'>-	  [ruby-dev:33584]</div><div class='del'>-</div><div class='del'>-Sat Feb  2 20:06:42 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/benchmark.rb (Benchmark::realtime): make Benchmark#realtime</div><div class='del'>-	  a bit faster.  a patch from Alexander Dymo &lt;dymo AT ukrpost.ua&gt; in</div><div class='del'>-	  [ruby-core:15337].</div><div class='del'>-</div><div class='del'>-Sat Feb  2 09:53:39 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (darwin): disabled fat-binary support which confuses</div><div class='del'>-	  configure much, since ``universal'' implies hidden cross-compiling.</div><div class='del'>-	  TODO: ruby and libruby.bundle might be possible to bound with `lipo'</div><div class='del'>-	  after builds for each archs.  Anyway, config.h and rbconfig.rb must</div><div class='del'>-	  be separated definitely at least.</div><div class='del'>-</div><div class='del'>-Fri Feb  1 21:42:37 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (darwin): _XOPEN_SOURCE is necessary to make ucontext_t</div><div class='del'>-	  consistent with the library implementation of MacOS X 10.5.</div><div class='del'>-	  [ruby-dev:33461]</div><div class='del'>-</div><div class='del'>-	* configure.in (darwin): ucontext on PowerPC MacOS X 10.5 is broken.</div><div class='del'>-</div><div class='del'>-Thu Jan 31 08:31:19 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (ext/extmk.rb, instruby.rb): inlined $(MAKE) so that can</div><div class='del'>-	  be executed even with -n.</div><div class='del'>-</div><div class='del'>-Thu Jan 31 07:00:19 2008  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb (bin_for_find): should find a symbol by</div><div class='del'>-	  Symbol class.</div><div class='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb (test_symbol_tuple): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jan 30 22:07:58 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb: refined deprecated methods.</div><div class='del'>-</div><div class='del'>-Wed Jan 30 22:06:54 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): '0_2' is a valid representation.</div><div class='del'>-</div><div class='del'>-Tue Jan 29 22:40:12 2008  Yusuke Endoh  &lt;mame@tsg.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (step_i): rb_funcall receives VALUE as an argument.</div><div class='del'>-</div><div class='del'>-Tue Jan 29 11:53:05 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: rm largefile.h.</div><div class='del'>-</div><div class='del'>-Mon Jan 28 01:21:15 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_open_file): should check NUL in path.</div><div class='del'>-	  &lt;http://www.rubyist.net/~matz/20080125.html#c01&gt;.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_popen): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (next_argv): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_foreach): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_readlines): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_s_read): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jan 25 22:33:38 2008  Yusuke Endoh  &lt;mame@tsg.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* math.c: fix comment.  [ruby-dev:33276]</div><div class='del'>-</div><div class='del'>-Fri Jan 25 10:31:58 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* */*.bat: set svn:mime-type to text/batch.</div><div class='del'>-</div><div class='del'>-Thu Jan 24 19:36:22 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb (URI::Generic::inspect): use Kernel#to_s instead</div><div class='del'>-	  object_id with printf.  [ruby-dev:33347]</div><div class='del'>-</div><div class='del'>-Tue Jan 22 11:22:47 2008  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/setup.mak ($(ARCH)): if a macro is appended by $(APPEND),</div><div class='del'>-	  a space will be inserted on the top of the line.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (MKFILES): stop make process if Makefile is</div><div class='del'>-	  updated.</div><div class='del'>-</div><div class='del'>-Mon Jan 21 17:34:41 2008  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_mode_flags, rb_io_mode_modenum): Ignore encoding</div><div class='del'>-	  options for forward compatibility.</div><div class='del'>-</div><div class='del'>-Mon Jan 21 12:50:02 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c, gc.c (setjmp): sigsetjmp is a macro on cygwin.</div><div class='del'>-</div><div class='del'>-Sat Jan 19 11:21:53 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (sigsetjmp): check if available.</div><div class='del'>-</div><div class='del'>-	* eval.c, gc.c (setjmp): do not use _setjmp if sigsetjmp is available.</div><div class='del'>-</div><div class='del'>-Sat Jan 19 11:10:11 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: Remove wrong assumptions about Cygwin.  a patch from</div><div class='del'>-	  Corinna Vinschen in [ruby-Bugs-17018].</div><div class='del'>-</div><div class='del'>-Thu Jan 17 21:06:01 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb (Date::Infinity#&lt;=&gt;): didn't work.  A patch from</div><div class='del'>-	  Dirkjan Bussink &lt;d.bussink AT gmail.com&gt; [ruby-core:15098].</div><div class='del'>-	  This is a bug obviously.  However it didn't affect the library's</div><div class='del'>-	  functions.</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: some trivial changes.</div><div class='del'>-</div><div class='del'>-Tue Jan 15 15:09:28 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/setup.mak: strip out empty lines from CPP output.</div><div class='del'>-</div><div class='del'>-Tue Jan 15 03:41:42 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): check if backtrace is empty.  [ruby-core:15040]</div><div class='del'>-</div><div class='del'>-Tue Jan 15 01:28:47 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk: simplified dummy objects dependencies.</div><div class='del'>-</div><div class='del'>-Mon Jan 14 16:12:58 2008  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb: scape should be an alias to shellescape.  a</div><div class='del'>-	  patch from Masahiro Kawato &lt;m-kawato AT mwb.biglobe.ne.jp&gt; in</div><div class='del'>-	  [ruby-dev:33060].</div><div class='del'>-</div><div class='del'>-Mon Jan 14 09:32:40 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/time.rb: do not reference Time directly from the inside of</div><div class='del'>-	  definitions. [ruby-dev:33059]</div><div class='del'>-</div><div class='del'>-Sat Jan 12 18:27:41 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_define_alloc_func, rb_undef_alloc_func): should</div><div class='del'>-	  define/undef on a signleton class.  [ruby-core:09959]</div><div class='del'>-</div><div class='del'>-Sat Jan 12 12:04:14 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: tuning for performance.</div><div class='del'>-</div><div class='del'>-Fri Jan 11 12:35:56 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: moved broken syscall checks from process.c etc.</div><div class='del'>-</div><div class='del'>-	* defines.h (WORDS_BIGENDIAN): honor __BIG_ENDIAN__ than the result of</div><div class='del'>-	  configure.</div><div class='del'>-</div><div class='del'>-	* dln.c: use dlopen on Mac OS X 10.3 or later.  backport from trunk.</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/options.rb (check_diagram): more precise check, darwin</div><div class='del'>-	  is not Windows but minwg is on it.</div><div class='del'>-</div><div class='del'>-Thu Jan 10 10:53:50 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_open_osfhandle): reverted to old definition.</div><div class='del'>-	  [ ruby-Bugs-16948 ]</div><div class='del'>-</div><div class='del'>-Tue Jan  8 20:02:08 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win{32,ce}/Makefile.sub: merged.</div><div class='del'>-</div><div class='del'>-Sun Jan  6 09:39:02 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: introduced some constants</div><div class='del'>-	  (for internal use).</div><div class='del'>-</div><div class='del'>-	* sample/cal.rb: trivial adjustments.</div><div class='del'>-</div><div class='del'>-Fri Jan  4 23:08:48 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_arg): use converted object.  [ruby-core:14759]</div><div class='del'>-</div><div class='del'>-Fri Jan  4 01:20:21 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32.h: only VC6 needs extern "C++" for math.h.  [ruby-talk:285660]</div><div class='del'>-</div><div class='del'>-Thu Jan  3 11:28:58 2008  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): clear errno first.  [ruby-talk:284492]</div><div class='del'>-</div><div class='del'>-Wed Jan  2 10:18:56 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/time.rb: use Process.times instead of Time.times.</div><div class='del'>-</div><div class='del'>-Wed Jan  2 09:18:11 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/goodfriday.rb: examples for date are enough.  retired.</div><div class='del'>-</div><div class='del'>-Wed Jan  2 09:06:55 2008  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/cal.rb: just updated with the newest version.</div><div class='del'>-</div><div class='del'>-Mon Dec 31 06:50:38 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* trunk/common.mk: not use -I$(srcdir)/lib with $(MINIRUBY) for cross</div><div class='del'>-	  compiling.</div><div class='del'>-</div><div class='del'>-	* configure.in, {win,bcc}32/Makefile.sub (MINIRUBY): -I$(srcdir)/lib</div><div class='del'>-	  moved.</div><div class='del'>-</div><div class='del'>-Sun Dec 30 22:48:37 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb (_valid_time?): I'm not sure to recommend such an</div><div class='del'>-	  expression.  but anyway it is acceptable now.  [ruby-core:14580]</div><div class='del'>-</div><div class='del'>-Fri Dec 28 16:36:33 2007  NARUSE, Yui  &lt;naruse@airemix.com&gt;</div><div class='del'>-</div><div class='del'>-       * lib/resolv.rb (Resolv::DNS#each_address): now returns IPv6 address.</div><div class='del'>-</div><div class='del'>-Fri Dec 28 13:21:32 2007  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb, test/rss/test_version.rb, NEWS: 0.2.2 -&gt; 0.2.3.</div><div class='del'>-</div><div class='del'>-	* lib/rss/parser.rb, test/rss/test_parser.rb: supported "-" in tag name.</div><div class='del'>-	  Reported by Ray Chen. Thanks.</div><div class='del'>-</div><div class='del'>-Thu Dec 27 23:56:01 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: should not use the libraries under the source directory</div><div class='del'>-	  at cross compiling.</div><div class='del'>-</div><div class='del'>-Thu Dec 27 11:02:45 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h, string.c (rb_str_set_len): added for upgrading path from</div><div class='del'>-	  1.8 to 1.9. [ruby-dev:32807]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_lines, rb_str_bytes): ditto.</div><div class='del'>-</div><div class='del'>-Thu Dec 27 10:47:32 2007  Technorama Ltd.  &lt;oss-ruby@technorama.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c: Only show a warning if the default</div><div class='del'>-	  DH callback is actually used.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_rand.c: New method: random_add().</div><div class='del'>-</div><div class='del'>-Wed Dec 26 22:27:45 2007  NARUSE, Yui &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::Name.==): fix for other is array of</div><div class='del'>-	  Resolv::DNS::Label::Str.</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb (Resolv::DNS::MessageEncoder#put_label): String#string</div><div class='del'>-	  is not defined, so replace to_s.</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb (Resolv::IPv6#to_name): ip6.int is obsoleted by</div><div class='del'>-	  int.arpa.</div><div class='del'>-</div><div class='del'>-Mon Dec 24 16:18:57 2007  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/ri/ri_options.rb:  Fix ri --help listing of gem ri paths.</div><div class='del'>-	  Merge of r14567 and r14569 from trunk.</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/ri/ri_paths.rb:  Fix duplication of ri data for multiple</div><div class='del'>-	  gems.  Merge of r14567 from trunk</div><div class='del'>-</div><div class='del'>-Mon Dec 24 12:35:03 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win{32,ce}/Makefile.sub (MFLAGS): defaulted to -l.</div><div class='del'>-</div><div class='del'>-Mon Dec 24 11:56:31 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc32,win{32,ce}}/Makefile.sub (SET_MAKE): set MFLAGS which is not</div><div class='del'>-	  set by default, to get rid of chaotic situation of MFLAGS/MAKEFLAGS.</div><div class='del'>-</div><div class='del'>-Sat Dec 22 14:49:46 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb: don't freeze nil even if 1.8 will not be aware of</div><div class='del'>-	  the issue. [ruby-dev:32677]</div><div class='del'>-</div><div class='del'>-Wed Dec 19 13:57:43 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (TIMEZONE_VOID): check whether timezone requires zero</div><div class='del'>-	  arguments.  [ruby-dev:32631]</div><div class='del'>-</div><div class='del'>-Wed Dec 19 12:01:42 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (f_rest_arg): check if duplicated.  [ruby-core:14140]</div><div class='del'>-</div><div class='del'>-Wed Dec 19 10:52:29 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): an underscore succeeding after octal</div><div class='del'>-	  prefix is allowed.  [ruby-core:14139]</div><div class='del'>-</div><div class='del'>-Mon Dec 17 13:43:15 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (stack_end_address): use local variable address instead of</div><div class='del'>-	  __builtin_frame_address(0) to avoid SEGV on SunOS 5.11 on x86 with</div><div class='del'>-	  gcc (GCC) 3.4.3 (csl-sol210-3_4-20050802).</div><div class='del'>-	  stack_end_address returned a frame address of garbage_collect</div><div class='del'>-	  since stack_end_address doesn't create its own frame.</div><div class='del'>-	  So a VALUE stored in a callee saved register, %edi, pushed into</div><div class='del'>-	  the stack at the beginning of garbage_collect was not marked.</div><div class='del'>-</div><div class='del'>-Mon Dec 17 12:21:25 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (RUNRUBY): added RUNRUBYOPT.</div><div class='del'>-</div><div class='del'>-Fri Dec 14 12:36:35 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RUBY_CHECK_VARTYPE): check if a variable is defined</div><div class='del'>-	  and its type.</div><div class='del'>-</div><div class='del'>-	* configure.in (timezone, altzone): check for recent cygwin.</div><div class='del'>-</div><div class='del'>-	* missing/strftime.c (strftime): fix for timezone.  [ruby-dev:32536]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_var): should fail for functions.</div><div class='del'>-</div><div class='del'>-	* ext/readline/extconf.rb: should use have_func for functions instead</div><div class='del'>-	  of have_var.</div><div class='del'>-</div><div class='del'>-Tue Dec 11 00:04:05 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_slice_bang): If an invalid negative index (&lt;</div><div class='del'>-	  -size) is given, do not raise an exception but return nil just</div><div class='del'>-	  like slice() does.</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_array.rb (TestArray::test_slice,</div><div class='del'>-	  TestArray::test_slice!): Pull in test cases from trunk.</div><div class='del'>-</div><div class='del'>-Mon Dec 10 21:47:53 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* transcode.c (str_transcode): allow non-registered encodings.</div><div class='del'>-	  [ruby-dev:32520]</div><div class='del'>-</div><div class='del'>-Mon Dec 10 21:00:30 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_slice_bang): should return nil if position out</div><div class='del'>-	  of range.  a patch from Akinori MUSHA &lt;knu AT iDaemons.org&gt;.</div><div class='del'>-	  [ruby-dev:32518]</div><div class='del'>-</div><div class='del'>-Mon Dec 10 18:28:06 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/common.rb (URI::REGEXP::PATTERN): typo in REG_NAME</div><div class='del'>-	  regular expression.  a patch from Ueda Satoshi</div><div class='del'>-	  &lt;s-ueda AT livedoor.jp&gt;.  [ruby-dev:32514]</div><div class='del'>-</div><div class='del'>-Sun Dec  9 12:39:01 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (read_multipart): exclude blanks from header values.</div><div class='del'>-	  [ruby-list:44327]</div><div class='del'>-</div><div class='del'>-Wed Dec  5 23:38:50 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_each): followed step_i change.</div><div class='del'>-</div><div class='del'>-Wed Dec  5 18:08:45 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_odd_p): new method Integer#odd?.</div><div class='del'>-	  (int_even_p): new method Integer#even?.</div><div class='del'>-	  (int_pred): new method Integer#pred.</div><div class='del'>-	  (fix_odd_p): new method Fixnum#odd?.</div><div class='del'>-	  (fix_even_p): new method Fixnum#even?.</div><div class='del'>-</div><div class='del'>-Wed Dec  5 15:15:21 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (step_i, range_step): support non-fixnum steps.</div><div class='del'>-	  [ruby-talk:282100]</div><div class='del'>-</div><div class='del'>-Tue Dec  4 11:23:50 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): trailing spaces may exist at sqeezing</div><div class='del'>-	  preceeding 0s.  [ruby-core:13873]</div><div class='del'>-</div><div class='del'>-Sun Dec  2 22:43:45 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): put newline unless multiple line message ends</div><div class='del'>-	  with a newline.  [ruby-dev:32429]</div><div class='del'>-</div><div class='del'>-Sun Dec  2 15:49:20 2007  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb, test/rss/test_version.rb, NEWS: 0.2.1 -&gt; 0.2.2.</div><div class='del'>-</div><div class='del'>-	* lib/rss/maker/itunes.rb: fixed new_itunes_category.</div><div class='del'>-	* lib/rss/maker/taxonomy.rb: new_taxo_topic -&gt; new_topic because</div><div class='del'>-	  of consistency.</div><div class='del'>-</div><div class='del'>-	* test/rss/test_maker_itunes.rb, test/rss/test_itunes.rb: removed</div><div class='del'>-	  needless UTF-8 characters.</div><div class='del'>-</div><div class='del'>-Sun Dec  2 01:12:15 2007  James Edward Gray II  &lt;jeg2@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	Merged 14070 from trunk.</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/server.rb (XMLRPC::Server#server): Improve signal handling so</div><div class='del'>-	  pressing control-c in the controlling terminal or sending SIGTERM stops</div><div class='del'>-	  the XML-RPC server.</div><div class='del'>-</div><div class='del'>-Sat Dec  1 15:13:33 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv.rb: documentation update.  backported from 1.9.</div><div class='del'>-	  [ruby-core:13273]</div><div class='del'>-</div><div class='del'>-Sat Dec  1 03:30:47 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (newline_node): set line from outermost node before removing</div><div class='del'>-	  NODE_BEGIN.  [ruby-dev:32406]</div><div class='del'>-</div><div class='del'>-Fri Nov 30 21:53:28 2007  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb, test/rss/test_version.rb: 0.2.0 -&gt; 0.2.1.</div><div class='del'>-</div><div class='del'>-	* lib/rss/content.rb, lib/rss/content/1.0.rb,</div><div class='del'>-	  lib/rss/content/2.0.rb, lib/rss/maker/content.rb,</div><div class='del'>-	  test/rss/rss-testcase.rb, test/rss/test_content.rb,</div><div class='del'>-	  test/rss/test_maker_content.rb: supported content:encoded with RSS</div><div class='del'>-	  2.0.</div><div class='del'>-	  Suggested by Sam Lown. Thanks.</div><div class='del'>-</div><div class='del'>-	* NEWS: added the above changes.</div><div class='del'>-</div><div class='del'>-Thu Nov 29 16:59:10 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): remove unnecessary NODE_BEGIN.  [ruby-core:13814]</div><div class='del'>-</div><div class='del'>-Wed Nov 28 14:43:14 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extract_makefile): use dldflags instead of DLDFLAGS to</div><div class='del'>-	  get rid of mixing $LDFLAGS and $ARCH_FLAG.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): support for extensions which has no</div><div class='del'>-	  shared object.</div><div class='del'>-</div><div class='del'>-Wed Nov 28 09:51:42 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2str0): do not clobber space for sign.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (remove_sign_bits): extends sign bit first.</div><div class='del'>-</div><div class='del'>-Wed Nov 21 01:04:12 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (nil_plus): remove unused function.  [ruby-core:13737]</div><div class='del'>-</div><div class='del'>-Sun Nov 18 14:03:44 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_alias): do not call hook functions until initialization</div><div class='del'>-	  finishes.  [ruby-talk:279538]</div><div class='del'>-</div><div class='del'>-Sun Nov 18 09:09:48 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (String#tr_cpp): make preprocessor identifiers.</div><div class='del'>-</div><div class='del'>-Sat Nov 17 13:58:11 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ole_invoke): bug fix. [ruby-talk:279100]</div><div class='del'>-</div><div class='del'>-Fri Nov 16 17:41:34 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (Document-class): moved the simplest example to</div><div class='del'>-	  the top.</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_s_iconv): Document-method: needs class</div><div class='del'>-	  prefix for class method.  [ruby-core:13542]</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_iconv): also instance method needs to be</div><div class='del'>-	  qualified.</div><div class='del'>-</div><div class='del'>-Fri Nov 16 11:16:41 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb (String#is_binary_data?): use Integer#fdiv.</div><div class='del'>-</div><div class='del'>-Thu Nov 15 19:50:46 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/extconf.rb: check macro if cannot find func.</div><div class='del'>-	  [ruby-list:44224]</div><div class='del'>-</div><div class='del'>-Thu Nov 15 12:19:14 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi/session.rb (CGI::Session::FileStore::restore): use</div><div class='del'>-	  lockfile for exclusive locks.  a patch from &lt;tommy AT tmtm.org&gt;.</div><div class='del'>-	  [ruby-dev:32296]</div><div class='del'>-</div><div class='del'>-Wed Nov 14 01:52:59 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing/isinf.c (isinf): don't define if the macro is defined.</div><div class='del'>-</div><div class='del'>-Wed Nov 14 01:34:42 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (round): fallback definition.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_divmod, flo_round): use round() always.</div><div class='del'>-	  [ruby-dev:32269]</div><div class='del'>-</div><div class='del'>-Tue Nov 13 22:02:23 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: remove Thread.exclusive.</div><div class='del'>-</div><div class='del'>-	* lib/drb/extservm.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov 13 16:33:07 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flodivmod): work around for infinity.</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_divmod): work around for platforms have no round().</div><div class='del'>-	  [ruby-dev:32247]</div><div class='del'>-</div><div class='del'>-Tue Nov 13 13:58:51 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (numeric.c): Integer#ord implemented.  [ruby-dev:32206]</div><div class='del'>-</div><div class='del'>-Tue Nov 13 02:57:04 2007  URABE Shyouhei  &lt;shyouhei@ice.uec.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_divmod): round to the nearest integer.</div><div class='del'>-	  [ ruby-Bugs-14540 ]</div><div class='del'>-</div><div class='del'>-Mon Nov 12 16:52:29 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): rdoc about srcprefix.  a patch from</div><div class='del'>-	  Daniel Berger &lt;djberg96 AT gmail.com&gt; in [ruby-core:13378].</div><div class='del'>-</div><div class='del'>-Mon Nov 12 13:53:06 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): handle stringified</div><div class='del'>-	  symbols properly using ruby-forward-string.</div><div class='del'>-</div><div class='del'>-Mon Nov 12 12:38:31 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (lex.c): don't remove lex.c at first.</div><div class='del'>-</div><div class='del'>-Fri Nov  9 07:26:04 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* random.c: update MT URL.[ruby-core:13305].</div><div class='del'>-</div><div class='del'>-Wed Nov  7 03:32:38 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/encodings/SHIFT-JIS.rb (REXML::Encoding): place -x for</div><div class='del'>-	  nkf conversion.  a patch from &lt;moonwolf AT moonwolf.com&gt;.</div><div class='del'>-	  [ruby-dev:32183]</div><div class='del'>-</div><div class='del'>-Mon Nov  5 05:17:04 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch::summarize): fix for long form</div><div class='del'>-	  option with very long argument.  a patch from Kobayashi Noritada</div><div class='del'>-	  &lt;nori1 AT dolphin.c.u-tokyo.ac.jp&gt; in [ruby-list:44179].</div><div class='del'>-</div><div class='del'>-Mon Nov  5 01:20:33 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (call_args): remove "parenthesize argument(s) for future</div><div class='del'>-	  version" warning.  when I added this warning, I had a plan to</div><div class='del'>-	  reimplement the parser that is simpler than the current one.</div><div class='del'>-	  since we abandoned the plan, warning no longer required.</div><div class='del'>-</div><div class='del'>-Fri Nov  2 00:13:51 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_assoc): check and convert inner arrays (assocs)</div><div class='del'>-	  using #to_ary.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_s_create): check and convert argument hash</div><div class='del'>-	  using #to_hash.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_s_create): Hash#[] now takes assocs as source of</div><div class='del'>-	  hash conversion.</div><div class='del'>-</div><div class='del'>-Thu Nov  1 23:47:43 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb (DRbTCPSocket): Improving with multiple network</div><div class='del'>-	  interface.</div><div class='del'>-</div><div class='del'>-	* test/drb/drbtest.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Oct 26 17:14:14 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_pow): returns 1.0 for 0**0.0.</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_pow): returns infinity for 0**-1.  [ruby-dev:32084]</div><div class='del'>-</div><div class='del'>-Wed Oct 25 07:18:09 2007  James Edward Gray II  &lt;jeg2@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	Merged 13781 from trunk.</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb (Net::Telnet#login): Allowing "passphrase" in</div><div class='del'>-	  addition to "password" for Telnet login prompts. [ruby-Bugs-10746]</div><div class='del'>-</div><div class='del'>-Wed Oct 25 06:46:21 2007  James Edward Gray II  &lt;jeg2@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	Merged 13779 from trunk.</div><div class='del'>-</div><div class='del'>-	* lib/net/telnet.rb (Net::Telnet#login): Making the password prompt</div><div class='del'>-	  pattern case insensitive. [ruby-Bugs-10746]</div><div class='del'>-</div><div class='del'>-Thu Oct 25 14:19:33 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_tell, rb_io_seek): check errno too.  [ruby-dev:32093]</div><div class='del'>-</div><div class='del'>-Wed Oct 25 08:03:53 2007  James Edward Gray II  &lt;jeg2@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	Merged 13767, 13768, 13769, and 13770 from trunk.</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/parser.rb (XMLRPC::Convert::dateTime): Fixing a bug that</div><div class='del'>-	  caused time zone conversion to fail for some ISO 8601 date formats.</div><div class='del'>-	  [ruby-Bugs-12677]</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/client.rb (XMLRPC::Client#do_rpc): Explicitly start</div><div class='del'>-	  the HTTP connection to support keepalive requests. [ruby-Bugs-9353]</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/client.rb (XMLRPC::Client#do_rpc): Improving the error</div><div class='del'>-	  message for Content-Type check failures. [ruby-core:12163]</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/utils.rb (XMLRPC::ParseContentType#parse_content_type):</div><div class='del'>-	  Making Content-Type checks case insensitive. [ruby-Bugs-3367]</div><div class='del'>-</div><div class='del'>-Sun Oct 21 21:16:43 2007  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss.rb, lib/rss/, test/rss/, sample/rss/: merged from trunk.</div><div class='del'>-	- 0.1.6 -&gt; 2.0.0.</div><div class='del'>-	- fixed image module URI. Thanks to Dmitry Borodaenko.</div><div class='del'>-	- supported Atom.</div><div class='del'>-	- supported ITunes module.</div><div class='del'>-	- supported Slash module.</div><div class='del'>-</div><div class='del'>-	* NEWS: added an entry for RSS Parser.</div><div class='del'>-</div><div class='del'>-Thu Oct 18 10:57:06 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (RCLASS_IV_TBL): defined.</div><div class='del'>-	  (RCLASS_M_TBL): ditto.</div><div class='del'>-	  (RCLASS_SUPER): ditto.</div><div class='del'>-	  (RMODULE_IV_TBL): ditto.</div><div class='del'>-	  (RMODULE_M_TBL): ditto.</div><div class='del'>-	  (RMODULE_SUPER): ditto.</div><div class='del'>-</div><div class='del'>-Mon Oct 15 22:08:55 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* NEWS: Merge some of the sub-sections, as the differences were</div><div class='del'>-	  unclear.</div><div class='del'>-</div><div class='del'>-Mon Oct 15 21:57:07 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* NEWS: Mention ipaddr enhancements.</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb (in_addr, in6_addr, addr_mask): Make some minor</div><div class='del'>-	  code optimization.</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb (&lt;=&gt;): Implement IPAddr#&lt;=&gt; and make IPAddr</div><div class='del'>-	  comparable.</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb (succ): Implement IPAddr#succ.  You can now create</div><div class='del'>-	  a range between two IPAddr's, which (Range) object is</div><div class='del'>-	  enumerable.</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb (to_range): A new method to create a Range object</div><div class='del'>-	  for the (network) address.</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb (coerce_other): Support type coercion and make &amp;,</div><div class='del'>-	  |, == and include? accept a string or an integer instead of an</div><div class='del'>-	  IPAddr object as the argument.</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb (initialize): Give better error messages.</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb: Improve documentation.</div><div class='del'>-</div><div class='del'>-Mon Oct 15 21:24:25 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* NEWS: Mention shellwords and tempfile enhancements.</div><div class='del'>-</div><div class='del'>-	* NEWS: Move the entry about Tk::X_Scrollable to a better section.</div><div class='del'>-</div><div class='del'>-Mon Oct 15 17:28:20 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb (read, readpartial): revert</div><div class='del'>-	  r12496. handling EOF is a little differnt in ruby 1.8 and ruby 1.9.</div><div class='del'>-	  [ruby-dev:31979]</div><div class='del'>-</div><div class='del'>-Mon Oct 15 11:45:12 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_bytes0): refined length check.  [ruby-dev:32059]</div><div class='del'>-</div><div class='del'>-Mon Oct 15 09:58:07 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_bytes0): check if source has enough data.</div><div class='del'>-	  [ruby-dev:32054]</div><div class='del'>-</div><div class='del'>-Mon Oct 15 01:15:09 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_accept_nonblock): make accepted fd</div><div class='del'>-	  nonblocking.  [ruby-talk:274079]</div><div class='del'>-</div><div class='del'>-Sun Oct 14 04:08:34 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_SYS_LARGEFILE): keep results also in command</div><div class='del'>-	  options, to vail out of mismatch.  [ruby-list:44114]</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb, lib/mkmf.rb (configuration): add DEFS.</div><div class='del'>-</div><div class='del'>-Sun Oct 14 03:55:52 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/mkexports.rb: deal with __fastcall name decorations.</div><div class='del'>-	  [ruby-list:44111]</div><div class='del'>-</div><div class='del'>-Sat Oct 13 09:02:16 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc,win}32/mkexports.rb: explicit data.  [ruby-list:44108]</div><div class='del'>-</div><div class='del'>-Sat Oct 13 00:35:03 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/source.rb (REXML::SourceFactory::SourceFactory): typo</div><div class='del'>-	  fixed.  [ruby-list:44099]</div><div class='del'>-</div><div class='del'>-Fri Oct 12 11:22:15 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (match_values_at): make #select to be alias to #values_at</div><div class='del'>-	  to adapt RDoc description.  [ruby-core:12588]</div><div class='del'>-</div><div class='del'>-Thu Oct 11 14:32:46 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32}/Makefile.sub (COMMON_MACROS): workaround for old SDK's</div><div class='del'>-	  bug. [ruby-core:12584]</div><div class='del'>-</div><div class='del'>-Wed Oct 10 23:34:45 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/securerandom.rb: new file.  [ruby-dev:31928]</div><div class='del'>-</div><div class='del'>-	* lib/cgi/session.rb (create_new_id): use securerandom if available.</div><div class='del'>-</div><div class='del'>-Tue Oct  9 01:01:55 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_union_m): Regexp.union accepts single</div><div class='del'>-	  argument which is an array of patterns.  [ruby-list:44084]</div><div class='del'>-</div><div class='del'>-Mon Oct  8 20:06:23 2007  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb, lib/open-uri.rb: remove</div><div class='del'>-	  Net::HTTP#enable_post_connection_check.  [ruby-dev:31960]</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: hostname should be verified against server's</div><div class='del'>-	  indentity as persented in the server's certificate. [ruby-dev:31960]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/net/telnets.rb, ext/openssl/lib/net/ftptls.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct  6 23:14:54 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_to_i): update RDoc since base can be any value</div><div class='del'>-	  between 2 and 36.  [ruby-talk:272879]</div><div class='del'>-</div><div class='del'>-Fri Oct  5 15:44:50 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb: Add shellescape() and shelljoin().</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb: Rename shellwords() to shellsplit() and make</div><div class='del'>-	  the former an alias to the latter.</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb: Add escape(), split(), join() as class</div><div class='del'>-	  methods, which are aliases to their respective long names</div><div class='del'>-	  prefixed with `shell'.</div><div class='del'>-</div><div class='del'>-	* lib/shellwords.rb: Add String#shellescape(), String#shellsplit()</div><div class='del'>-	  and Array#shelljoin() for convenience.</div><div class='del'>-</div><div class='del'>-Fri Oct  5 15:40:04 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb (Tempfile::make_tmpname): Allow to specify a</div><div class='del'>-	  suffix for a temporary file name.</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb (Tempfile::make_tmpname): Make temporary file</div><div class='del'>-	  names less predictable by including a random string.</div><div class='del'>-	  [inspired by: akr]</div><div class='del'>-</div><div class='del'>-Tue Oct  2 21:20:14 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (make_cmdvector): adjust escaped successive</div><div class='del'>-	  double-quote handling. (merge from trunk)</div><div class='del'>-</div><div class='del'>-Tue Oct  2 20:35:24 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (init_env): initialize HOME and USER environment</div><div class='del'>-	  variables unless set. [ruby-core:12328] (merge from trunk)</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtInitialize, getlogin): ditto.</div><div class='del'>-</div><div class='del'>-	* configure.in, win32/Makefile.sub (LIBS): need to link shell32</div><div class='del'>-	  library for SH* functions on mswin32 and mingw32.</div><div class='del'>-</div><div class='del'>-Mon Oct  1 12:50:59 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (id2ref): valid id should not refer T_VALUE nor T_ICLASS.</div><div class='del'>-	  [ruby-dev:31911]</div><div class='del'>-</div><div class='del'>-Wed Sep 26 23:54:37 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake), lib/mkmf.rb (configuration): top_srcdir</div><div class='del'>-	  should not prefixed with DESTDIR.</div><div class='del'>-</div><div class='del'>-Wed Sep 26 08:36:31 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (ext/extinit.o): use $(OUTFLAG) as well as other</div><div class='del'>-	  objects.  [ruby-Bugs-14228]</div><div class='del'>-</div><div class='del'>-Wed Sep 26 05:12:17 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (yyerror): limit error message length.  [ruby-dev:31848]</div><div class='del'>-</div><div class='del'>-	* regex.c (re_mbc_startpos): separated from re_adjust_startpos.</div><div class='del'>-</div><div class='del'>-Tue Sep 25 13:47:38 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (remove_method): should not remove undef place holder.</div><div class='del'>-	  [ruby-dev:31817]</div><div class='del'>-</div><div class='del'>-Mon Sep 24 16:52:11 2007  Urabe Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: fix typo.</div><div class='del'>-</div><div class='del'>-Sun Sep 23 21:57:25 2007  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: an SSL verification (the server hostname should</div><div class='del'>-	  be matched with its certificate's commonName) is added.</div><div class='del'>-	  this verification can be skipped by</div><div class='del'>-	  "Net::HTTP#enable_post_connection_check=(false)".</div><div class='del'>-	  suggested by Chris Clark &lt;cclark at isecpartners.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/open-uri.rb: use Net::HTTP#enable_post_connection_check to</div><div class='del'>-	  perform SSL post connection check.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/ssl.c</div><div class='del'>-	  (OpenSSL::SSL::SSLSocket#post_connection_check): refine error message.</div><div class='del'>-</div><div class='del'>-Sun Sep 23 09:05:05 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (os_obj_of, os_each_obj): hide objects to be finalized.</div><div class='del'>-	  [ruby-dev:31810]</div><div class='del'>-</div><div class='del'>-Sun Sep 23 08:58:01 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval_method.ci (rb_attr): should not use alloca for unknowen size</div><div class='del'>-	  input.  [ruby-dev:31816]</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_intern_str): prevent str from optimization.</div><div class='del'>-</div><div class='del'>-Sun Sep 23 05:42:35 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/options.rb (Options::check_diagram): dot -V output</div><div class='del'>-	  changed. [ ruby-Bugs-11978 ], Thanks Florian Frank.</div><div class='del'>-</div><div class='del'>-Sat Sep 22 06:02:11 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::List::summarize): use each_line if</div><div class='del'>-	  defined rather than each.  [ruby-Patches-14096]</div><div class='del'>-</div><div class='del'>-Sat Sep 22 05:19:49 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_init): separate from strio_initialize</div><div class='del'>-	  to share with strio_reopen properly.  [ruby-Bugs-13919]</div><div class='del'>-</div><div class='del'>-Fri Sep 21 15:46:20 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (struct rb_exec_arg): proc should be a VALUE.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_exec): suppress a warning.</div><div class='del'>-</div><div class='del'>-Fri Sep 21 03:05:35 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c, intern.h, ext/thread/thread.c: should not free queue while</div><div class='del'>-	  any live threads are waiting.  [ruby-dev:30653]</div><div class='del'>-</div><div class='del'>-Thu Sep 20 17:24:59 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_detach_process): cast for the platforms where size of</div><div class='del'>-	  pointer differs from size of int.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_exec, rb_f_system): should not exceptions after</div><div class='del'>-	  fork.  [ruby-core:08262]</div><div class='del'>-</div><div class='del'>-Fri Sep 14 00:34:25 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/extservm.rb (invoke_service): use Thread.exclusive instead of</div><div class='del'>-	  Thread.critical</div><div class='del'>-</div><div class='del'>-Wed Sep 12 23:12:22 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): -W should be allowed in RUBYOPT</div><div class='del'>-	  environment variable.  [ruby-core:12118]</div><div class='del'>-</div><div class='del'>-Mon Sep 10 01:05:25 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step): fixed integer overflow.  [ruby-dev:31763]</div><div class='del'>-</div><div class='del'>-Sun Sep  9 09:14:45 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (_strptime): now also attaches an element</div><div class='del'>-	  which denotes leftover substring if exists.</div><div class='del'>-</div><div class='del'>-Sat Sep  8 10:22:20 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_s_members): should raise TypeError instead</div><div class='del'>-	  of call rb_bug().  [ruby-dev:31709]</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0): no nil check require any more.</div><div class='del'>-</div><div class='del'>-Sat Sep  8 09:38:19 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (str[fp]time): now check specifications more</div><div class='del'>-	  strictly.</div><div class='del'>-</div><div class='del'>-Fri Sep  7 05:36:19 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb (MockClock): correct synchronous problems</div><div class='del'>-	  of the MultiThreading. [ruby-dev:31692]</div><div class='del'>-</div><div class='del'>-Wed Sep  5 22:02:27 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_subseq): need integer overflow check.</div><div class='del'>-	  [ruby-dev:31736]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_splice): ditto.  [ruby-dev:31737]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fill): ditto.  [ruby-dev:31738]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_splice): integer overflow for length.</div><div class='del'>-	  [ruby-dev:31739]</div><div class='del'>-</div><div class='del'>-Sun Sep  2 00:48:15 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (_parse): improved parsing of ordinal dates.</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (_parse): use named character classes in some</div><div class='del'>-	  regular expressions.</div><div class='del'>-</div><div class='del'>-Sat Sep  1 08:13:36 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c: add WIN32OLE#ole_activex_initialize.</div><div class='del'>-</div><div class='del'>-Thu Aug 30 13:13:13 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_const, have_const): check for a const is defined.</div><div class='del'>-	  [ruby-core:04422]</div><div class='del'>-</div><div class='del'>-Thu Aug 30 13:10:57 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (group_member): check if presents.</div><div class='del'>-</div><div class='del'>-	* configure.in (XCFLAGS): add _GNU_SOURCE on linux.</div><div class='del'>-</div><div class='del'>-	* file.c (group_member): use system routine if available.</div><div class='del'>-</div><div class='del'>-Thu Aug 30 08:24:18 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (RHASH_TBL): defined for compatibility to 1.9.</div><div class='del'>-	* (RHASH_ITER_LEV): ditto.</div><div class='del'>-	* (RHASH_IFNONE): ditto.</div><div class='del'>-	* (RHASH_SIZE): ditto.</div><div class='del'>-	* (RHASH_EMPTY_P): ditto.</div><div class='del'>-</div><div class='del'>-Wed Aug 29 13:05:59 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* include/ruby/defines.h (flush_register_windows): call "ta 0x03"</div><div class='del'>-	  even on Linux/Sparc.  [ruby-dev:31674]</div><div class='del'>-</div><div class='del'>-Tue Aug 28 23:26:12 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ole_type_progid, reg_enum_key,</div><div class='del'>-	  reg_get_val, ole_wc2mb): fix the bug. Thanks, arton.</div><div class='del'>-	  [ruby-dev:31576]</div><div class='del'>-</div><div class='del'>-Mon Aug 27 19:10:50 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (etc_getlogin): update documentation to note</div><div class='del'>-	  security issue.  [ruby-Bugs-11821]</div><div class='del'>-</div><div class='del'>-Tue Aug 21 21:09:48 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tmpdir.rb (Dir.mktmpdir): make directory suffix specifiable.</div><div class='del'>-</div><div class='del'>-Tue Aug 21 13:57:04 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (st_foreach_func, rb_foreach_func): typedefed.</div><div class='del'>-</div><div class='del'>-Mon Aug 20 17:25:33 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (mnew): should preserve noex as safe_level.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): tighten security check condition..</div><div class='del'>-</div><div class='del'>-Sat Aug 18 21:32:20 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tmpdir.rb (Dir.mktmpdir): new method.</div><div class='del'>-	  [ruby-dev:31462]</div><div class='del'>-</div><div class='del'>-Sat Aug 18 17:44:42 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c (Init_tcltklib): use rb_set_end_proc().</div><div class='del'>-</div><div class='del'>-Sat Aug 18 15:59:52 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (detach_process_watcher): should not pass the pointer</div><div class='del'>-	  to an auto variable to the thread to be created.  pointed and</div><div class='del'>-	  fix by KUBO Takehiro &lt;kubo at jiubao.org&gt;  [ruby-dev:30618]</div><div class='del'>-</div><div class='del'>-Sat Aug 18 12:24:30 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/test.rb, test/ruby/test_system.rb(valid_syntax?): keep</div><div class='del'>-	  comment lines first.</div><div class='del'>-</div><div class='del'>-Thu Aug 16 20:40:50 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigtrunc): RBIGNUM(x)-&gt;len may be zero.  out of bound</div><div class='del'>-	  access.  [ruby-dev:31404]</div><div class='del'>-</div><div class='del'>-Thu Aug 16 16:46:07 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (aix): enable shared by default.</div><div class='del'>-</div><div class='del'>-	* configure.in (aix): for 64bit-mode AIX.  [ruby-dev:31401]</div><div class='del'>-	  + use CC for LDSHARED if non-gcc,</div><div class='del'>-	  + moved -G option from *LDFLAGS to LDSHARED,</div><div class='del'>-	  + set -brtl only in XLDFLAGS.</div><div class='del'>-</div><div class='del'>-Thu Aug 16 13:06:08 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (big_lshift): make shift offset long type.</div><div class='del'>-	  (big_rshift): ditto.</div><div class='del'>-	  (rb_big_lshift): ditto.</div><div class='del'>-	  (big_rshift): ditto.</div><div class='del'>-	  [ruby-dev:31434]</div><div class='del'>-</div><div class='del'>-Thu Aug 16 04:09:19 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb (Rinda::TupleSpace#start_keeper): improve</div><div class='del'>-	  keeper thread.</div><div class='del'>-</div><div class='del'>-Wed Aug 15 13:50:10 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_delete_key): delete the entry without calling block.</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_shift): should consider iter_lev too.</div><div class='del'>-</div><div class='del'>-	* hash.c (delete_if_i): use rb_hash_delete_key() so that the block</div><div class='del'>-	  isn't called twice.  [ruby-core:11556]</div><div class='del'>-</div><div class='del'>-Sun Arg 12 03:56:30 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb: fix Rinda::TupleSpace keeper thread bug.</div><div class='del'>-	  the thread is started too early. [ruby-talk:264062]</div><div class='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Aug 11 07:34:10 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: reverted some wrongly erased "o" options</div><div class='del'>-	  (pointed out by nobu).</div><div class='del'>-</div><div class='del'>-Tue Aug  7 14:58:39 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (establishShell): handshaking before close slave</div><div class='del'>-	  device.  [ruby-talk:263410]</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (MasterDevice, SlaveDevice, deviceNo): constified.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (SlaveName): removed static buffer.</div><div class='del'>-</div><div class='del'>-	* ext/pty/expect_sample.rb: support for autologin.</div><div class='del'>-</div><div class='del'>-Tue Aug  7 12:45:13 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (ac_cv_func_isinf): set yes also on OpenSolaris.</div><div class='del'>-	  [ruby-Bugs-12859]</div><div class='del'>-</div><div class='del'>-Mon Aug  6 17:36:29 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/encodings/{ISO-8859-15,CP-1252}.rb: fixed invalid syntax.</div><div class='del'>-</div><div class='del'>-Fri Aug  3 11:05:54 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): save all CONFIG values.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): remove mkmf.log at clean, and extconf.h at</div><div class='del'>-	  distclean, respectively.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: remove rdoc at clean, and installed list file at</div><div class='del'>-	  distclean, respectively.</div><div class='del'>-</div><div class='del'>-Fri Aug  3 07:09:05 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: more verbose message.  [ruby-Bugs-12766]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_type): suppress a warning with -Wall.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (find_type): new method.</div><div class='del'>-</div><div class='del'>-Thu Aug  2 13:46:39 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): should not check positional number as</div><div class='del'>-	  width.  [ruby-core:11838]</div><div class='del'>-</div><div class='del'>-Mon Jul 30 11:16:40 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_aref): check for Bignum index range.</div><div class='del'>-	  [ruby-dev:31271]</div><div class='del'>-</div><div class='del'>-Sat Jul 28 09:35:41 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/digest.rb (Digest::self.const_missing): avoid</div><div class='del'>-	  infinite recursive const_missing call.  [ruby-talk:262193]</div><div class='del'>-</div><div class='del'>-Thu Jul 26 13:57:45 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (load_1, dln_find_1): constified.</div><div class='del'>-</div><div class='del'>-	* dln.c (conv_to_posix_path): removed.</div><div class='del'>-</div><div class='del'>-	* ruby.c (usage): constified.</div><div class='del'>-</div><div class='del'>-	* ruby.c (rubylib_mangled_path, rubylib_mangled_path2): return</div><div class='del'>-	  VALUE instead of a pointer to static buffer.</div><div class='del'>-</div><div class='del'>-	* ruby.c (push_include_cygwin): fixed buffer overflow.</div><div class='del'>-	  [ruby-dev:31297]</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_init_loadpath): not convert built-in paths.</div><div class='del'>-</div><div class='del'>-Sun Jul 22 16:07:12 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul 22 14:33:40 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* intern.h (is_ruby_native_thread): prototype.</div><div class='del'>-</div><div class='del'>-	* missing/strftime.c (strftime): fix printf format and actual</div><div class='del'>-	  arguments.</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c (ip_finalize): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c (rb_dlptr_inspect): ditto.  [ruby-dev:31268]</div><div class='del'>-</div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_inspect): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/getnameinfo.c: include stdio.h always.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 21 17:48:26 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* bcc32/{Makefile.sub,configure.bat,setup.mak: configure_args</div><div class='del'>-	  support.</div><div class='del'>-</div><div class='del'>-	* bcc32/setup.mak: check runtime version.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_open_osfhandle): prototype has changed</div><div class='del'>-	  in bcc 5.82.</div><div class='del'>-</div><div class='del'>-	* {win32,wince,bcc32}/setup.mak (-version-): no RUBY_EXTERN magic.</div><div class='del'>-</div><div class='del'>-	* win32/resource.rb: include patchlevel number.</div><div class='del'>-</div><div class='del'>-Sat Jul 21 12:06:48 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): should remove mkmf.log too.</div><div class='del'>-</div><div class='del'>-Sat Jul 21 01:53:17 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (Date._parse): completes calendar week based year.</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (Date._parse): detects year of ordinal date in</div><div class='del'>-	  extended format.</div><div class='del'>-</div><div class='del'>-Fri Jul 20 15:22:51 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 19 19:24:14 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 19 14:38:45 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* numeric.c (rb_fix_lshift, rb_fix_rshift): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jul 18 16:57:41 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_pow): refine overflow check.  [ruby-dev:31242]</div><div class='del'>-</div><div class='del'>-Wed Jul 18 08:47:09 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 17 00:50:53 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_fixnum.rb (TestFixnum::test_pow): update test</div><div class='del'>-	  suite.  pow(-3, 2^64) gives NaN when pow(3, 2^64) gives Inf.</div><div class='del'>-</div><div class='del'>-Mon Jul 16 23:07:51 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 16 18:29:33 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_rindex_m): accept string-like object convertible</div><div class='del'>-	  with #to_str method, as well as rb_str_index_m.  [ruby-core:11692]</div><div class='del'>-</div><div class='del'>-Mon Jul 16 05:45:53 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 16 00:26:10 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_pow): removed invariant variable.  [ruby-dev:31236]</div><div class='del'>-</div><div class='del'>-Sun Jul 15 23:59:57 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_neg): SIGNED_VALUE isn't in 1.8.</div><div class='del'>-</div><div class='del'>-Sun Jul 15 22:24:49 2007  pegacorn  &lt;subscriber.jp AT gmail.com&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (rb_digest_instance_update,</div><div class='del'>-	  rb_digest_instance_finish, rb_digest_instance_reset,</div><div class='del'>-	  rb_digest_instance_block_length): %s in rb_raise() expects char*.</div><div class='del'>-	  [ruby-dev:31222]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.h: include ossl_pkcs5.h.  [ruby-dev:31231]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkcs5.h: new file for PKCS5.  [ruby-dev:31231]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/sdbm/_sdbm.c: DOSISH platforms need io.h.  [ruby-dev:31232]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* win32/win32.c: include mbstring.h for _mbspbrk().  [ruby-dev:31232]</div><div class='del'>-</div><div class='del'>-	* win32.h (rb_w32_getcwd): prototype added.  [ruby-dev:31232]</div><div class='del'>-</div><div class='del'>-Sun Jul 15 21:07:43 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (bigtrunc): do not empty Bignum.  [ruby-dev:31229]</div><div class='del'>-</div><div class='del'>-Sun Jul 15 19:05:28 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_cstr_to_inum): check leading non-digits.</div><div class='del'>-	  [ruby-core:11691]</div><div class='del'>-</div><div class='del'>-Sun Jul 15 04:42:20 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (get2comp): do nothing for empty Bignum.  [ruby-dev:31225]</div><div class='del'>-</div><div class='del'>-Sat Jul 14 14:04:06 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (sort_by_cmp): check if reentered.  [ruby-dev:24291]</div><div class='del'>-</div><div class='del'>-Sat Jul 14 12:44:14 2007  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/openssl/test_pkcs7.rb: reverted the previous patch.  it should</div><div class='del'>-	  be as it was to check interface compatibility.  sorry for bothering</div><div class='del'>-	  with this.</div><div class='del'>-</div><div class='del'>-Sat Jul 14 12:16:17 2007  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/openssl/test_pkcs7.rb: follow the library change.  applied a</div><div class='del'>-	  patch from &lt;zn at mbf.nifty.com&gt; [ruby-dev:31214].</div><div class='del'>-	  NOTE: r12496 imports the latest openssl libs from trunk to ruby_1_8</div><div class='del'>-	  though its's not ChangeLog-ed.  maintainer should aware that.</div><div class='del'>-</div><div class='del'>-Sat Jul 14 02:51:52 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 14 02:25:48 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_pow): wrong overflow detection.  [ruby-dev:31213]</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_pow): wrong overflow detection.  [ruby-dev:31215]</div><div class='del'>-</div><div class='del'>-Fri Jul 13 16:10:00 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): use ENV.to_hash to access</div><div class='del'>-	  http_proxy environment variable to avoid case insensitive</div><div class='del'>-	  environment search.</div><div class='del'>-</div><div class='del'>-Fri Jul 13 15:02:15 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 13 10:10:46 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 12 17:03:15 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_init_copy): disallow changing the size.</div><div class='del'>-	  [ruby-dev:31168]</div><div class='del'>-</div><div class='del'>-Wed Jul 11 23:38:14 2007  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 10 14:50:01 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/{Makefile.sub,setup.mak}: remove surplus slash from srcdir.</div><div class='del'>-</div><div class='del'>-Fri Jul  6 15:22:58 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_interrupt): suppress a gcc's officious warning.</div><div class='del'>-</div><div class='del'>-Thu Jul  5 16:44:28 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_pow): fix previous nubu's commit.</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_fixnum.rb: new test.</div><div class='del'>-</div><div class='del'>-Thu Jul  5 15:56:06 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_pow): even number multiplication never be negative.</div><div class='del'>-</div><div class='del'>-Mon Jul  2 14:34:43 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jun 30 16:05:41 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jun 30 00:17:00 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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 Yusuke ENDOH</div><div class='del'>-	  &lt;mame AT tsg.ne.jp&gt;.  [ruby-dev:31095]</div><div class='del'>-</div><div class='del'>-Fri Jun 29 11:23:09 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (dsym): return non-null NODE even if yyerror().  based on a</div><div class='del'>-	  patch from Yusuke ENDOH &lt;mame AT tsg.ne.jp&gt;.  [ruby-dev:31085]</div><div class='del'>-</div><div class='del'>-Tue Jun 26 16:35:21 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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'>-</div><div class='del'>-	* process.c (proc_exec_v, rb_proc_exec): preserve errno.</div><div class='del'>-</div><div class='del'>-Sat Jun 23 00:37:46 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_select): remove unnecessary varargs for</div><div class='del'>-	  rb_hash_select.  a patch from Daniel Berger</div><div class='del'>-	  &lt;Daniel.Berger at qwest.com&gt;.   [ruby-core:11527]</div><div class='del'>-</div><div class='del'>-	* hash.c: ditto.</div><div class='del'>-</div><div class='del'>-Mon Jun 18 08:47:54 2007  Technorama Ltd.  &lt;oss-ruby@technorama.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/{extconf.rb,ossl_ssl_session.c}:</div><div class='del'>-	  Fix ruby-Bugs-11513.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey_ec.c</div><div class='del'>-	  New methods EC::Point.[eql,make_affine!,invert!,on_curve?,infinity?]</div><div class='del'>-	  By default output the same key form as the openssl command.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_rand.c</div><div class='del'>-	  New method Random.status?</div><div class='del'>-</div><div class='del'>-Mon Jun 18 13:54:36 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): return EXIT_FAILURE if any exceptions occured</div><div class='del'>-	  in at_exit blocks.  [ruby-core:11263]</div><div class='del'>-</div><div class='del'>-Mon Jun 18 01:14:10 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* variable.c (rb_global_entry, rb_f_untrace_var, rb_alias_variable,</div><div class='del'>-	  rb_generic_ivar_table, generic_ivar_get, generic_ivar_set,</div><div class='del'>-	  generic_ivar_defined, generic_ivar_remove, rb_mark_generic_ivar,</div><div class='del'>-	  rb_free_generic_ivar, rb_copy_generic_ivar,</div><div class='del'>-	  rb_obj_instance_variables): suppress warnings.</div><div class='del'>-</div><div class='del'>-Fri Jun 15 22:33:29 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (realclean): separate local and ext.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: not remove unrelated directories.</div><div class='del'>-</div><div class='del'>-Fri Jun 15 17:01:20 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 14 17:09:48 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 13 06:05:12 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (darwin): prohibit loading extension libraries to</div><div class='del'>-	  miniruby.</div><div class='del'>-</div><div class='del'>-Wed Jun 13 05:47:58 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_kill_thread): renamed in order to get rid of conflict</div><div class='del'>-	  with a BeOS system function.  [ruby-core:10830]</div><div class='del'>-</div><div class='del'>-Tue Jun 12 14:53:51 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (Logging.quiet, Logging.message): added quiet flag and</div><div class='del'>-	  use it.  [ruby-core:10909]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (find_header): use header names in the message.</div><div class='del'>-</div><div class='del'>-Sun Jun 10 13:47:36 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_beginendblock.rb (test_should_propagate_signaled):</div><div class='del'>-	  get rid of invoking shell.  [ruby-dev:30942]</div><div class='del'>-</div><div class='del'>-Thu Jun  7 19:02:48 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: call original "method" method instead of redefined one.</div><div class='del'>-</div><div class='del'>-Mon Jun  4 11:11:12 2007  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (ResponseParser#next_token): fixed</div><div class='del'>-	  error message. (backported from HEAD)</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 31 17:27:53 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/benchmark.rb (Benchmark::Job::item): avoid modifying the</div><div class='del'>-	  argument unintentionally.  [ruby-talk:253676]</div><div class='del'>-</div><div class='del'>-Thu May 31 02:12:32 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb (Rinda::TupleBag): create index on tuple bag</div><div class='del'>-	  by first column.</div><div class='del'>-</div><div class='del'>-Wed May 30 13:27:40 2007  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/ftp.rb (Net::FTP#transfercmd): skip 2XX</div><div class='del'>-	  responses for some FTP servers. (backported from HEAD)</div><div class='del'>-</div><div class='del'>-Wed May 30 05:17:55 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): get rid of SEGV at ZSUPER in a block</div><div class='del'>-	  [ruby-dev:30836]</div><div class='del'>-</div><div class='del'>-Wed May 30 04:29:43 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_timer): timer thread should not receive any</div><div class='del'>-	  signals.  submitted by Sylvain Joyeux.  [ruby-core:08546]</div><div class='del'>-</div><div class='del'>-Wed May 30 04:18:37 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_cmd): just return if no exceptions.</div><div class='del'>-	  [ruby-dev:30820]</div><div class='del'>-</div><div class='del'>-Tue May 29 11:01:06 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_opendir): store attributes of the second</div><div class='del'>-	  entries or later too.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_opendir, rb_w32_readdir): eliminate magic</div><div class='del'>-	  numbers.</div><div class='del'>-</div><div class='del'>-Mon May 28 02:54:05 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb (Rinda::TupleBag#delete): use rindex and</div><div class='del'>-	  delete_at instead of delete for little improvement.</div><div class='del'>-</div><div class='del'>-Sat May 26 00:05:22 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_beginendblock.rb (test_should_propagate_signaled):</div><div class='del'>-	  skip tests for exitstatus and termsig on the platforms where</div><div class='del'>-	  signals not supported.</div><div class='del'>-</div><div class='del'>-Wed May 23 06:51:46 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 23 05:49:49 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb, ext/purelib.rb, lib/mkmf.rb, runruby.rb: clear default</div><div class='del'>-	  load path to get rid of load pre-installed extensions/libraries.</div><div class='del'>-	  [ruby-core:11017]</div><div class='del'>-</div><div class='del'>-Sat May 19 10:29:18 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (Date._parse): detects some OFX dates</div><div class='del'>-	  (Of course not fully).</div><div class='del'>-</div><div class='del'>-Fri May 18 23:07:33 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_first): call rb_ary_subseq() instead of pushing</div><div class='del'>-	  values by itself.  [ruby-talk:252062]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_first): add negative length check.</div><div class='del'>-</div><div class='del'>-Fri May 18 17:10:31 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May 18 03:02:40 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/mkexports.rb: preserve prefixed underscores for WINAPI</div><div class='del'>-	  symbols.</div><div class='del'>-</div><div class='del'>-	* wince/mkconfig_wce.rb, wince/mkexports.rb: obsolete.</div><div class='del'>-</div><div class='del'>-Thu May 17 17:03:11 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-style.el (ruby-style-label-indent): for yacc rules.</div><div class='del'>-</div><div class='del'>-Tue May 15 14:54:07 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon May 14 13:28:03 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (wait_list): supress a warning.</div><div class='del'>-</div><div class='del'>-Thu May 10 15:21:51 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_s_conv): rdoc fix.</div><div class='del'>-</div><div class='del'>-Thu May 10 10:14:14 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_priority): rdoc fix; the initial value is</div><div class='del'>-	  inherited from the creating thread.  [ruby-core:10607]</div><div class='del'>-</div><div class='del'>-Wed May  9 12:28:57 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (Init_Bignum), numeric.c (Init_Numeric): added fdiv as</div><div class='del'>-	  aliases of quo.  [ruby-dev:30771]</div><div class='del'>-</div><div class='del'>-Wed May  9 11:55:15 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_quo): now calculate in integer.  [ruby-dev:30753]</div><div class='del'>-</div><div class='del'>-Wed May  9 11:51:06 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_pow): reduce multiplying for even number.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_pow): truncate all zero BDIGITs. [ruby-dev:30733]</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_pow): improvement by calculating from MSB and using</div><div class='del'>-	  factorization.  &lt;http://yowaken.dip.jp/tdiary/20070426.html#p01&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (int_pow): calculate power in Fixnum as possible.</div><div class='del'>-	  [ruby-dev:30726]</div><div class='del'>-</div><div class='del'>-Tue May  8 23:42:51 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (Date._parse): revised treatment of</div><div class='del'>-	  hyphened/separatorless dates.</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: some trivial adjustments.</div><div class='del'>-</div><div class='del'>-Tue May  8 20:25:05 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: reverted.</div><div class='del'>-</div><div class='del'>-Sat May  5 16:26:33 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (Format::Bag#method_missing): get rid of</div><div class='del'>-	  modifying orginal argument.  [ruby-core:11090]</div><div class='del'>-</div><div class='del'>-Mon Apr 30 01:17:51 2007  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb (TupleSpace#create_entry, TupleBag#push,</div><div class='del'>-	  delete): extract method, and rename parameter.</div><div class='del'>-</div><div class='del'>-Fri Apr 27 02:00:17 2007  Ryan Davis  &lt;ryand-ruby@zenspider.com&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c: Fixed backwards compatibility for 'raise Interrupt'.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/tag.rb: Running rdoc over the 1.8.6 tree skips</div><div class='del'>-	  Module. Patch from James Britt</div><div class='del'>-</div><div class='del'>-Thu Apr 26 13:54:51 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-style.el: new file.  C/C++ style for ruby source code.</div><div class='del'>-</div><div class='del'>-Wed Apr 25 19:49:16 2007  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (unix_send_io, unix_recv_io): use CMSG_DATA to</div><div class='del'>-	  align file descriptor appropriately.</div><div class='del'>-</div><div class='del'>-Tue Apr 24 09:33:57 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (do_stat, do_lstat, do_opendir): should not warn ENOTDIR.</div><div class='del'>-	  [ruby-talk:248288]</div><div class='del'>-</div><div class='del'>-Mon Apr 23 22:14:42 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb ($ruby): add extout directory to include path.</div><div class='del'>-	  [ruby-core:11003]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (libpathflag): not to append RPATHFLAG to current</div><div class='del'>-	  directory.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): add current directory to default</div><div class='del'>-	  library path with highest priority.  [ruby-core:10960]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (LINK_SO): LIBPATH to be placed before DLDFLAGS.</div><div class='del'>-</div><div class='del'>-Fri Apr 20 16:05:22 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBPATHFLAG, RPATHFLAG): no needs to be quoted,</div><div class='del'>-	  it is done by libpathflag in mkmf.rb.</div><div class='del'>-</div><div class='del'>-Fri Apr 20 12:27:04 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb: fix to override conv proc.</div><div class='del'>-</div><div class='del'>-Fri Apr 20 12:17:05 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): inversed the order of errinfos.</div><div class='del'>-</div><div class='del'>-Thu Apr 19 14:53:32 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 18 10:41:21 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strtod): exponent is radix 10.  [ruby-talk:248272]</div><div class='del'>-</div><div class='del'>-Wed Apr 18 02:30:24 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (LDFLAGS): prepend -L. instead appending it to</div><div class='del'>-	  XLDFLAGS.  [ruby-core:10933]</div><div class='del'>-</div><div class='del'>-	* configure.in (Makefile): remove $U for automake from MISSING.</div><div class='del'>-	  [ruby-talk:248171]</div><div class='del'>-</div><div class='del'>-Tue Apr 17 16:46:46 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Apr 16 22:56:01 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/pty/expect_sample.rb: avoid symbolic link representation for</div><div class='del'>-	  expect.  a patch from Kazuhiro NISHIYAMA &lt;zn at mbf.nifty.com&gt;.</div><div class='del'>-	  [ruby-dev:30714]</div><div class='del'>-</div><div class='del'>-Mon Apr 16 22:51:11 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample: replace TRUE, FALSE with true, false respectively.</div><div class='del'>-	  a patch from Kazuhiro NISHIYAMA &lt;zn at mbf.nifty.com&gt;.</div><div class='del'>-	  [ruby-dev:30713]</div><div class='del'>-</div><div class='del'>-Mon Apr 16 17:08:02 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (make_switch): do not clobber converter if pattern</div><div class='del'>-	  has no convert method.  reported by sheepman in [ruby-dev:30709].</div><div class='del'>-</div><div class='del'>-Mon Apr 16 16:49:32 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_seek): consistent behavior with</div><div class='del'>-	  IO#seek.  patch by sheepman in [ruby-dev:30710].</div><div class='del'>-</div><div class='del'>-Mon Apr 16 16:34:08 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parser_yylex): should set command_start after block</div><div class='del'>-	  starting "do"s and braces.  [ruby-core:10916]</div><div class='del'>-</div><div class='del'>-Sun Apr 15 09:19:57 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: added some zone names.</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (_parse): now interprets doted numerical</div><div class='del'>-	  dates as a big endian (except dd.mm.yyyy).</div><div class='del'>-</div><div class='del'>-Tue Apr 10 17:37:36 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr  9 09:30:44 2007  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (disconnect): call shutdown for</div><div class='del'>-	  SSLSocket. Thanks, Technorama Ltd.</div><div class='del'>-</div><div class='del'>-Thu Apr  5 00:42:48 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr  4 17:09:17 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_open): refined the message of NotImplementedError.</div><div class='del'>-	  [ruby-dev:30685]</div><div class='del'>-</div><div class='del'>-Wed Apr  4 10:18:04 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Apr  3 15:45:41 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar 24 23:40:29 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (struct rb_thread.locals): explicit as struct.</div><div class='del'>-	  [ruby-core:10585]</div><div class='del'>-</div><div class='del'>-	* eval.c, node.h (enum rb_thread_status, struct rb_thread,</div><div class='del'>-	  rb_curr_thread, rb_main_thread): prefixed.  [ruby-core:10586]</div><div class='del'>-</div><div class='del'>-	* file.c (chompdirsep): made an unprefixed name static.</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): ditto.</div><div class='del'>-</div><div class='del'>-Sat Mar 24 01:54:03 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): exit by SystemExit and SignalException in END</div><div class='del'>-	  block.  [ruby-core:10609]</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_beginendblock.rb (test_should_propagate_exit_code):</div><div class='del'>-	  test for exit in END block.  [ruby-core:10760]</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_beginendblock.rb (test_should_propagate_signaled):</div><div class='del'>-	  test for signal in END block.</div><div class='del'>-</div><div class='del'>-Thu Mar 22 23:13:17 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provided): check for extension library if SOEXT is</div><div class='del'>-	  explicitly given.  [ruby-dev:30657]</div><div class='del'>-</div><div class='del'>-Thu Mar 22 10:29:25 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_bignum.rb (test_to_s): add tests for Bignum#to_s.</div><div class='del'>-</div><div class='del'>-Wed Mar 21 17:04:30 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2str0): round up for the most significant digit.</div><div class='del'>-	  [ruby-core:10686]</div><div class='del'>-</div><div class='del'>-Wed Mar 21 07:21:24 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (remove_one): Preserve List invariants;</div><div class='del'>-	  submitted by: MenTaLguY &lt;mental AT rydia.net&gt;</div><div class='del'>-	  in [ruby-core:10598] and [ruby-bugs:PR#9388].</div><div class='del'>-</div><div class='del'>-Tue Mar 20 22:54:50 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar 20 15:37:24 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* distruby.rb: Add zip generation.</div><div class='del'>-</div><div class='del'>-Tue Mar 20 11:28:41 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/matrix.rb (Matrix::inverse_from): adding partial pivoting to</div><div class='del'>-	  the Gauss-Jordan algorithm, making it stable.  a patch from</div><div class='del'>-	  Peter Vanbroekhoven.  [ruby-core:10641]</div><div class='del'>-</div><div class='del'>-Mon Mar 19 11:39:29 2007  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb (rbuf_read): extend buffer size for speed.</div><div class='del'>-</div><div class='del'>-Sun Mar 18 04:23:52 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* NEWS: Add a note about the new `date' library defining</div><div class='del'>-	  Time#to_date and Time#to_datetime private methods.</div><div class='del'>-</div><div class='del'>-	* NEWS: Inform that the old `thread' library is considered to be</div><div class='del'>-	  stable.</div><div class='del'>-</div><div class='del'>-	* NEWS: Sort library entries in alphabetical order.</div><div class='del'>-</div><div class='del'>-Fri Mar 16 21:48:11 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Mar 16 18:28:06 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Mar 16 16:33:58 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (unlock_mutex_inner): Make sure that the</div><div class='del'>-	  given mutex is actually owned by the caller; submitted by:</div><div class='del'>-	  Sylvain Joyeux &lt;sylvain.joyeux AT m4x.org&gt; in [ruby-core:10598].</div><div class='del'>-</div><div class='del'>-Fri Mar 16 16:21:35 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (wait_condvar, lock_mutex): Fix a problem in</div><div class='del'>-	  ConditionVariable#wait that occurs when two threads that are</div><div class='del'>-	  trying to access the condition variable are also in concurrence</div><div class='del'>-	  for the given mutex; submitted by: Sylvain Joyeux</div><div class='del'>-	  &lt;sylvain.joyeux AT m4x.org&gt; and MenTaLguY &lt;mental AT rydia.net&gt;</div><div class='del'>-	  in [ruby-core:10598].</div><div class='del'>-</div><div class='del'>-Fri Mar 16 16:17:27 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/thread/test_thread.rb: Add a test script for the `thread'</div><div class='del'>-	  library.  This should result in failure as of now with</div><div class='del'>-	  ext/thread; submitted by: Sylvain Joyeux &lt;sylvain.joyeux AT</div><div class='del'>-	  m4x.org&gt; in [ruby-core:10598].</div><div class='del'>-</div><div class='del'>-Wed Mar 14 12:30:00 2007  Shigeo Kobayashi  &lt;shigeo@tinyforest.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar 13 09:25:10 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (clear-installed-list): separated from install-prereq.</div><div class='del'>-</div><div class='del'>-Tue Mar 13 06:38:43 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* NEWS: Reword and improve entries.</div><div class='del'>-</div><div class='del'>-Tue Mar 13 06:03:46 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.8.6 released from the ruby_1_8_6 branch.</div><div class='del'>-</div><div class='del'>-Tue Mar 13 03:24:07 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* runruby.rb: added --pure (turned on by default) and --debugger</div><div class='del'>-	  options.</div><div class='del'>-</div><div class='del'>-Tue Mar 13 02:50:28 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar 12 11:07:44 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.c (Init_ossl_asn1): Let rdoc know about</div><div class='del'>-	  externally defined modules; submitted by Technorama</div><div class='del'>-	  Ltd. &lt;oss-ruby AT technorama.net&gt; in [ruby-bugs:PR#4704].</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_bn.c (Init_ossl_bn): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_cipher.c (Init_ossl_cipher): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_digest.c (Init_ossl_digest): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_hmac.c (Init_ossl_hmac): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey.c (Init_ossl_pkey): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey_dh.c (Init_ossl_dh): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey_dsa.c (Init_ossl_dsa): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey_rsa.c (Init_ossl_rsa): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_rand.c (Init_ossl_rand): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (Init_ossl_ssl): Ditto.</div><div class='del'>-</div><div class='del'>-Mon Mar 12 01:05:17 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_inspect): Use "0x%x" rather for pointers.</div><div class='del'>-	  This might not be very right but it is commonly used in other</div><div class='del'>-	  parts of the code; submitted by sheepman &lt;sheepman AT</div><div class='del'>-	  sheepman.sakura.ne.jp&gt; in [ruby-dev:30532].</div><div class='del'>-</div><div class='del'>-	* ext/dl/ptr.c (rb_dlptr_inspect): Ditto.</div><div class='del'>-</div><div class='del'>-Mon Mar 12 00:59:19 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/lib/dl/import.rb (DL::Importable::Internal::import,</div><div class='del'>-	  DL::Importable::Internal::callback): Avoid race condition for an</div><div class='del'>-	  instance variable; submitted by sheepman &lt;sheepman AT</div><div class='del'>-	  sheepman.sakura.ne.jp&gt; in [ruby-dev:30530].</div><div class='del'>-</div><div class='del'>-Sun Mar 11 18:57:50 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/README: Add a note about ruby-electric.el.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* misc/inf-ruby.el: Synchronize the comment section with trunk.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Mar 11 17:45:51 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Mar 11 12:09:37 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_handle): no message when exiting by signal.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): re-send signal.  [ruby-dev:30516]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_interrupt): instantiate SignalException.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_signal_raise): now takes signal number instead</div><div class='del'>-	  of signal name.</div><div class='del'>-</div><div class='del'>-	* intern.h (rb_thread_signal_raise, ruby_default_signal): prototypes.</div><div class='del'>-</div><div class='del'>-	* signal.c (esignal_init): takes a signal number and an optional</div><div class='del'>-	  signal name.</div><div class='del'>-</div><div class='del'>-	* signal.c (interrupt_init): pass SIGINT always.</div><div class='del'>-</div><div class='del'>-	* signal.c (ruby_default_signal): invoke system default signal</div><div class='del'>-	  handler.</div><div class='del'>-</div><div class='del'>-	* signal.c (rb_signal_exec, trap): handle SIGTERM.  [ruby-dev:30505]</div><div class='del'>-</div><div class='del'>-Tue Mar  6 19:08:46 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/md5.rb (MD5::new, MD5::md5): Do not modify</div><div class='del'>-	  Digest::MD5.</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/sha1.rb (SHA1::new, SHA1::sha1): Ditto.</div><div class='del'>-</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'>-Tue Mar  6 18:44:26 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/md5.rb (MD5::new, MD5::md5): Catch up with</div><div class='del'>-	  Digest's API changes; noted by: Kazuhiro Yoshida &lt;moriq AT</div><div class='del'>-	  moriq.com&gt; in [ruby-dev:30500].</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/sha1.rb (SHA1::new, SHA1::sha1): Ditto.</div><div class='del'>-</div><div class='del'>-Tue Mar  6 18:24:19 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_to_s): Back out the format changes; discussed</div><div class='del'>-	  in [ruby-dev:30495].</div><div class='del'>-</div><div class='del'>-Tue Mar  6 11:53:25 2007  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/irbtkw.rbw: fails to exit process.</div><div class='del'>-</div><div class='del'>-Mon Mar  5 20:14:49 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_to_s): Correct the wrong format which did not</div><div class='del'>-	  really conform to RFC 2822; pointed out by: OHARA Shigeki &lt;os at</div><div class='del'>-	  iij.ad.jp&gt; in [ruby-dev:30487].</div><div class='del'>-</div><div class='del'>-Sun Mar  4 23:38:07 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_s_utime): fixed a commit miss for the platforms</div><div class='del'>-	  where utimes() does not exist.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (touch): ditto.</div><div class='del'>-</div><div class='del'>-Sun Mar  4 14:46:56 2007  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (push_element): should return a int value.</div><div class='del'>-</div><div class='del'>-Sun Mar  4 01:05:57 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb (Set#^, Set#&amp;): Correct documentation.  Those methods</div><div class='del'>-	  return sets, not arrays; noted by Oliver Frank Wittich &lt;nietz AT</div><div class='del'>-	  mangabrain.de&gt;.</div><div class='del'>-</div><div class='del'>-Sat Mar  3 23:01:07 2007  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar  3 22:57:11 2007  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (touch): last commit causes error if :mtime</div><div class='del'>-	  option was not given.</div><div class='del'>-</div><div class='del'>-Sat Mar  3 22:37:02 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_utime): allow nil to set the current time.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (touch): ditto, and added :mtime and :nocreate</div><div class='del'>-	  options.  fixed: [ruby-talk:219037]</div><div class='del'>-</div><div class='del'>-Sat Mar  3 21:17:35 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar  3 19:05:31 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (push_list): Use ALLOC().</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (rb_mutex_alloc): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (rb_condvar_alloc): Ditto.</div><div class='del'>-</div><div class='del'>-Sat Mar  3 18:53:11 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* NEWS: Add a note for String#intern.</div><div class='del'>-</div><div class='del'>-Sat Mar  3 16:23:13 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (proc_invoke): Ditto.</div><div class='del'>-</div><div class='del'>-	* gc.c (obj_free): Ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (top_local_setup_gen): Ditto.</div><div class='del'>-</div><div class='del'>-Sat Mar  3 16:07:02 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_ivar_set): RDoc updated according to a</div><div class='del'>-	  suggestion from Brian Candler &lt;B.Candler AT pobox.com&gt;.</div><div class='del'>-	  [ruby-core:10469]</div><div class='del'>-</div><div class='del'>-Thu Mar  1 21:38:07 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt, arg): should not omit lhs of OP_ASGN1 even if</div><div class='del'>-	  empty.  [ruby-dev:30455]</div><div class='del'>-</div><div class='del'>-Thu Mar  1 08:55:38 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_feature_p): check loading_tbl if the given ext is</div><div class='del'>-	  empty.  [ruby-dev:30452]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_feature_p): fix possible buffer overrun.</div><div class='del'>-</div><div class='del'>-Thu Mar  1 03:30:21 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (get_digest_base_metadata): Allow inheriting</div><div class='del'>-	  Digest::Base subclasses, which was unintentionally made</div><div class='del'>-	  impossible while restructuring Digest classes.</div><div class='del'>-</div><div class='del'>-Thu Mar  1 02:05:17 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb (patchlevel): read from version.h.</div><div class='del'>-</div><div class='del'>-Thu Mar  1 00:09:39 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_provided): return true only for features loaded from</div><div class='del'>-	  .rb files, and not search actual library type.  [ruby-dev:30414]</div><div class='del'>-</div><div class='del'>-Wed Feb 28 21:15:00 2007  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (ac_cv_func_fcntl): fcntl support for MinGW.</div><div class='del'>-</div><div class='del'>-	* missing/flock.c: workaround for MinGW.</div><div class='del'>-</div><div class='del'>-Wed Feb 28 20:51:32 2007  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb 28 18:59:57 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* NEWS: Add NEWS, a document file to keep user visible feature</div><div class='del'>-	  changes between releases.</div><div class='del'>-</div><div class='del'>-Wed Feb 28 18:35:50 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: no need to check unistd.h and sys/time.h.</div><div class='del'>-	  they are already checked at configure.</div><div class='del'>-	  reported by KOBAYASHI Yasuhiro [ruby-list:43225]</div><div class='del'>-</div><div class='del'>-Wed Feb 28 18:34:48 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb ($DEFLIBPATH): default library paths ($(topdir), etc)</div><div class='del'>-	  should be the first elements of library paths list.</div><div class='del'>-	  reported by KOBAYASHI Yasuhiro [ruby-list:43225]</div><div class='del'>-</div><div class='del'>-Wed Feb 28 18:31:32 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* doc/NEWS-1.8.0: Rename NEWS to NEWS-1.8.0.  This is way too old</div><div class='del'>-	  NEWS.</div><div class='del'>-</div><div class='del'>-Wed Feb 28 01:22:58 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/{dbm,gdbm}/test_{dbm,gdbm}.rb: shouldn't use host_os. use</div><div class='del'>-	  target_os instead. reported by KOBAYASHI Yasuhiro [ruby-list:43225]</div><div class='del'>-</div><div class='del'>-Wed Feb 28 00:08:11 2007  URABE Shyouhei  &lt;shyouhei@ice.uec.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb (RbConfig): add CONFIG['PATCHLEVEL']</div><div class='del'>-</div><div class='del'>-	* common.mk: new target dist</div><div class='del'>-</div><div class='del'>-	* distruby.rb: new file</div><div class='del'>-</div><div class='del'>-Tue Feb 27 22:18:45 2007  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (--enable-auto-image-base): avoid the neccessity to</div><div class='del'>-	  rebase the shared libs as much as possible;</div><div class='del'>-	  submitted by Corinna Vinschen &lt;spam at vinschen.de&gt; in</div><div class='del'>-	  [ruby-talk:240964].</div><div class='del'>-</div><div class='del'>-Tue Feb 27 21:36:47 2007  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (__crt0_glob_function): use ruby_glob() instead of rb_globi().</div><div class='del'>-</div><div class='del'>-Tue Feb 27 21:33:04 2007  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (ac_cv_func_setrlimit): workaround for djgpp.</div><div class='del'>-</div><div class='del'>-Tue Feb 27 19:38:52 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/base64.rb (Base64::b64encode): Fix documentation; submitted</div><div class='del'>-	  by David Symonds &lt;dsymonds@gmail.com&gt; in [ruby-core:10432].</div><div class='del'>-</div><div class='del'>-Tue Feb 27 19:36:57 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (calculate_must_string, slow_search, re_search): Silence</div><div class='del'>-	  warnings regarding char * vs. unsigned char * mismatch;</div><div class='del'>-	  submitted by Lyle Johnson &lt;lyle.johnson@gmail.com&gt;</div><div class='del'>-	  in [ruby-core:10416].</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (BigDecimal_load): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha1/sha1ossl.c (SHA1_Finish): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/rmd160/rmd160ossl.c (RMD160_Finish): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (rb_digest_base_finish,</div><div class='del'>-	  rb_digest_base_update): Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c (rb_str_resize, rb_nkf_kconv, rb_nkf_guess1,</div><div class='del'>-	  rb_nkf_guess2): Ditto.</div><div class='del'>-</div><div class='del'>-Tue Feb 27 03:40:09 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (wait_list_cleanup, rb_mutex_try_lock):</div><div class='del'>-	  Eliminate rb_thread_critical switching where unnecessary;</div><div class='del'>-	  implied by shugo in [ruby-dev:30412].</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (set_critical): Merge in</div><div class='del'>-	  thread_exclusive_ensure().</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c: Consistently use 0 and 1 for</div><div class='del'>-	  rb_thread_critical values.</div><div class='del'>-</div><div class='del'>-Mon Feb 26 15:18:23 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c: Use xmalloc()/xfree() instead of</div><div class='del'>-	  malloc()/free(); pointed out by shugo in [ruby-dev:30412].</div><div class='del'>-</div><div class='del'>-Sun Feb 25 23:02:55 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::initialize):</div><div class='del'>-	  Initialize @workdir properly to silence a warning under -w.</div><div class='del'>-	  Submitted by &lt;tommy at tmtm.org&gt; in [ruby-dev:30400].</div><div class='del'>-</div><div class='del'>-Sun Feb 25 02:47:43 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb 24 10:42:01 2007  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c (cparse_params_mark): remove useless</div><div class='del'>-	  rb_gc_mark.  Thanks Tomoyuki Chikanaga. [ruby-dev:30405]</div><div class='del'>-</div><div class='del'>-Fri Feb 23 15:10:46 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/win32.c (NtInitialize): call above function.</div><div class='del'>-</div><div class='del'>-Fri Feb 23 14:19:40 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (sighandler): need to tell to be interrupted to main</div><div class='del'>-	  context when handler is installed.</div><div class='del'>-</div><div class='del'>-	* win32/win32.[ch] (rb_win32_interrupted): new function to listen</div><div class='del'>-	  interrupt.</div><div class='del'>-</div><div class='del'>-Fri Feb 23 13:02:17 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_cmp, fix_equal): Remove FIX2LONG() to optimize.</div><div class='del'>-	  suggested in</div><div class='del'>-	  http://t-a-w.blogspot.com/2007/02/making-ruby-faster.html.</div><div class='del'>-	  [ruby-talk:240223]</div><div class='del'>-</div><div class='del'>-Fri Feb 23 12:43:17 2007  James Edward Gray II  &lt;james@grayproductions.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/client.rb (XMLRPC::Client::do_rpc): Make the</div><div class='del'>-	  Content-Length parameter optional for responses in</div><div class='del'>-	  xmlrpc/client.rb; suggested by Daniel Berger</div><div class='del'>-	  &lt;Daniel.Berger@qwest.com&gt; and approved by the maintainer.</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/create.rb (XMLRPC::Create::conv2value): Add DateTime</div><div class='del'>-	  support to xmlrpc; approved by the maintainer.</div><div class='del'>-</div><div class='del'>-Mon Feb 19 18:22:52 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, defines.h, eval.c (rb_feature_p, rb_provided,</div><div class='del'>-	  load_wait, search_required, rb_require_safe), ext/extmk.rb: Fix</div><div class='del'>-	  a bug where a statically linked extension cannot be autoloaded.</div><div class='del'>-	  [ruby-dev:30023] / [ruby-dev:30239]</div><div class='del'>-</div><div class='del'>-Mon Feb 19 17:14:28 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (unix_peeraddr): wrong syscall name in error</div><div class='del'>-	  message for #peeraddr. a patch from Sam Roberts</div><div class='del'>-	  &lt;sroberts at uniserve.com&gt;.  [ruby-core:10366]</div><div class='del'>-</div><div class='del'>-Sun Feb 18 19:35:21 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: updated based on date2 4.0.3.</div><div class='del'>-</div><div class='del'>-Fri Feb 16 11:18:21 2007  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/.document: Apply patch for irb, e2mmap and README by Hugh Sasse</div><div class='del'>-	  &lt;hgs at dmu.ac.uk&gt; from [ruby-core:10135]</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb: Suppress RDoc for PrettyPrint test suite.</div><div class='del'>-</div><div class='del'>-Thu Feb 15 20:26:30 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/ftp.rb: Revert the previous change pending discussion.</div><div class='del'>-</div><div class='del'>-Thu Feb 15 18:08:17 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): Fix the function declaration.</div><div class='del'>-</div><div class='del'>-Thu Feb 15 17:13:32 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* version.h: Welcome to the post-1.8.6 world.  Radical changes are</div><div class='del'>-	  inhibited in the ruby_1_8 branch until the 1.8.6 final release</div><div class='del'>-	  goes out of the door.</div><div class='del'>-</div><div class='del'>-Thu Feb 15 16:44:14 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb (URI::Generic::userinfo): Considering how</div><div class='del'>-	  `scheme://user:@...', `scheme://:password@...' and</div><div class='del'>-	  `scheme://:@...' are parsed, an empty user name or password</div><div class='del'>-	  should be allowed and represented as it is.</div><div class='del'>-</div><div class='del'>-Thu Feb 15 11:46:05 2007  KIMURA Koichi  &lt;hogemuta@gmail.com&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c, win32/win32.c, win32/dir.h, ruby.h, intern.h: Bring</div><div class='del'>-	  encoding aware globbing support in from trunk.  Dir.[] and</div><div class='del'>-	  Dir.glob() can now take many patterns in an array.  Minor fixes</div><div class='del'>-	  will follow.</div><div class='del'>-</div><div class='del'>-Thu Feb 15 11:00:26 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb (URI::Generic::userinfo): should support</div><div class='del'>-	  empty password.  [ruby-core:10290]</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb (URI::Generic::set_password): password can be</div><div class='del'>-	  cleared by nil.  [ruby-core:10290]</div><div class='del'>-</div><div class='del'>-	* lib/uri/common.rb (escape): regard second string argument as a</div><div class='del'>-	  character set properly. [ruby-dev:27692]</div><div class='del'>-</div><div class='del'>-	* lib/uri/ftp.rb: Attempt to conform to RFC 1738 with regard to</div><div class='del'>-	  relative/absolute paths.</div><div class='del'>-</div><div class='del'>-	* lib/uri: Lovely RDOC patches from mathew (metaATpoboxDOTcom).</div><div class='del'>-</div><div class='del'>-Thu Feb 15 10:57:38 2007  Tietew  &lt;tietew@tietew.net&gt;&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::unescapeHTML): invalid decoding for single</div><div class='del'>-	  unescaped ampersand.  a patch from Tietew</div><div class='del'>-	  &lt;tietew+ruby-dev at tietew.net&gt; in [ruby-dev:30292].</div><div class='del'>-	  fixed: [ruby-dev:30289]</div><div class='del'>-</div><div class='del'>-Thu Feb 15 10:48:40 2007  MenTaLguY  &lt;mental@rydia.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c: Handle interrupted waits correctly.</div><div class='del'>-	  [ruby-bugs:PR#8663]</div><div class='del'>-</div><div class='del'>-Wed Feb 14 19:22:15 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/digest.rb (Digest::self.const_missing): Drop</div><div class='del'>-	  autoloads for sha2 classes in favor of handling in</div><div class='del'>-	  const_missing(), to work around a problem exposed on OS X.</div><div class='del'>-</div><div class='del'>-Tue Feb 13 02:21:12 2007  Sam Roberts  &lt;sroberts@uniserve.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb 11 07:46:45 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::read_multipart): Properly parse</div><div class='del'>-	  a quoted-string in a Content-Disposition value.</div><div class='del'>-</div><div class='del'>-Sun Feb 11 06:27:54 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, ext/thread/extconf.rb, lib/thread.rb: Add a</div><div class='del'>-	  configure option `--disable-fastthread', to choose the original,</div><div class='del'>-	  pure ruby version of the "thread" library instead of the new,</div><div class='del'>-	  much faster implementation in ext/thread.</div><div class='del'>-</div><div class='del'>-Sun Feb 11 06:22:20 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Setup: Add thread except for platforms without threads</div><div class='del'>-	  support.</div><div class='del'>-</div><div class='del'>-Sun Feb 11 06:15:16 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/lib/thread.rb: Add a replacement of thread.rb that</div><div class='del'>-	  loads this extension.</div><div class='del'>-</div><div class='del'>-Sun Feb 11 05:39:47 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/thread.rb: Remove an ineffective part of the code.</div><div class='del'>-</div><div class='del'>-Sun Feb 11 05:32:54 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (rb_thread_exclusive): Implement</div><div class='del'>-	  Thread.exclusive.</div><div class='del'>-</div><div class='del'>-Sun Feb 11 05:26:51 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c: Get rid of use of a dummy function.</div><div class='del'>-</div><div class='del'>-Sun Feb 11 01:45:31 2007  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread/thread.c (Init_thread): Define missing aliases:</div><div class='del'>-	  Queue#enq and SizedQueue#enq.</div><div class='del'>-</div><div class='del'>-Sat Feb 10 09:27:35 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ole_variant2val): fix compile error</div><div class='del'>-	  on VC++.</div><div class='del'>-</div><div class='del'>-Sat Feb 10 07:41:52 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb 10 00:13:11 2007  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: fix typo (TkConfigMethod::__confinfo_cmd,</div><div class='del'>-	  __conv_keyonly_opts).</div><div class='del'>-</div><div class='del'>-Fri Feb  9 20:44:53 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread: Make style fixes (mostly de-K&amp;R'ism) to match the</div><div class='del'>-	  rest of the source code.</div><div class='del'>-</div><div class='del'>-	* ext/thread: Make USE_MEM_POOLS an extconf option.</div><div class='del'>-</div><div class='del'>-Fri Feb  9 20:43:01 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/thread: Import the "fastthread" implementation by MenTaLguY</div><div class='del'>-	  in the original form.  This module is not hooked into the build</div><div class='del'>-	  yet since it needs some style fixes and adjustments.</div><div class='del'>-</div><div class='del'>-Fri Feb  9 15:46:09 2007  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal: Synchronize with trunk.  Better function</div><div class='del'>-	  prototypes, removal of a useless method `!=', and document</div><div class='del'>-	  updates.</div><div class='del'>-</div><div class='del'>-Tue Feb 06 22:06:45 2007  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf-utf8/{nkf.c,utf8tbl.c}:</div><div class='del'>-	  imported nkf 2007-01-28.</div><div class='del'>-	  * Fixed: can't decode MIME encode JIS string.</div><div class='del'>-	  * Fixed: Fullwitdh-halfwidth conversion.</div><div class='del'>-	  * Support DoCoMo's and Softbank's EMOJI</div><div class='del'>-	  * Support CP932, CP5022x, eucJP-ms UDC</div><div class='del'>-	  * Support UTF-32 encoding</div><div class='del'>-	  * Support beyond BMP</div><div class='del'>-	  [ruby-dev:29700] [ruby-dev:29922] [ruby-dev:30144]</div><div class='del'>-</div><div class='del'>-Wed Jan 31 14:52:09 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_iterate): need to PUSH_ITER in proper order.</div><div class='del'>-	  [ruby-core:10125]</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_iterator.rb (TestIterator::test_block_given_within_iterator):</div><div class='del'>-	  add new test.  [ruby-core:10125]</div><div class='del'>-</div><div class='del'>-Tue Jan 30 14:58:51 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 30 12:05:35 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: autoconf 2.61 support.  [ruby-core:10016]</div><div class='del'>-</div><div class='del'>-Sat Jan 27 15:20:11 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* parse.y (dyna_init): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jan 26 12:03:39 2007  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb (TkConfigMethod#__confinfo_cmd,</div><div class='del'>-	  __conv_keyonly_optkeys): make them private [ruby-dev:30074].</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/txtwin_abst.rb: fix typo [ruby-dev:30073].</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvas.rb (TkCanvas#scan_dragto): lack of an argument.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: clarify the including module name</div><div class='del'>-	  [ruby-dev:30080].</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/scrollable.rb: change primary name of modules</div><div class='del'>-	  [ruby-dev:30080].</div><div class='del'>-</div><div class='del'>-Wed Jan 24 18:05:39 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 23 11:02:33 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httprequest.rb (WEBrick::HTTPRequest::read_line):</div><div class='del'>-</div><div class='del'>-Tue Jan 23 18:26:12 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::read_multipart): use == instead</div><div class='del'>-	  of ===.  [ruby-dev:30176]</div><div class='del'>-</div><div class='del'>-Tue Jan 23 10:48:17 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c: added documentation for Hash about how it uses eql? and</div><div class='del'>-	  hash methods for the keys.  [ruby-core:09995]</div><div class='del'>-</div><div class='del'>-Mon Jan 22 14:57:25 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: fix errors in socket sample code.</div><div class='del'>-	  [ruby-core:09992]</div><div class='del'>-</div><div class='del'>-Sat Jan 13 23:54:48 2007  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan 12 11:13:55 2007  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (etc_getpwuid, etc_getgrgid): fix to correctly</div><div class='del'>-	  convert uid/gid from VALUE. (backport of r11521)</div><div class='del'>-</div><div class='del'>-Wed Jan 10 18:57:57 2007  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c (strscan_do_scan): should set kcode option</div><div class='del'>-	  before match. [ruby-dev:29914]</div><div class='del'>-</div><div class='del'>-	* test/strscan/test_stringscanner.rb: test it.</div><div class='del'>-</div><div class='del'>-	* re.c: export kcode_set_option and kcode_reset_option (with "rb_"</div><div class='del'>-	  prefix).</div><div class='del'>-</div><div class='del'>-	* intern.h: ditto.</div><div class='del'>-</div><div class='del'>-Tue Jan  9 17:45:17 2007  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_find_file): should not call fpath_check() with NULL.</div><div class='del'>-	  fixed: [ruby-core:09867]</div><div class='del'>-</div><div class='del'>-Tue Jan  9 03:54:38 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_upto): String#upto from empty string makes</div><div class='del'>-	  inifinite loop.  [ruby-core:09864]</div><div class='del'>-</div><div class='del'>-Sun Jan  7 12:13:26 2007  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#find_class_comment):</div><div class='del'>-	  Look for class and module comments above rb_define_class and</div><div class='del'>-	  rb_define_module.  Patch by Daniel Berger &lt;djberg96 at gmail.com&gt;</div><div class='del'>-</div><div class='del'>-Sun Jan  7 10:32:12 2007  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constants):</div><div class='del'>-	  Properly handle escaping of : in comments.</div><div class='del'>-	* test/rdoc/parsers/test_parse_c.rb:</div><div class='del'>-	  Test RDoc::C_Parser#do_classes and Rdoc::C_Parser#find_class_comment.</div><div class='del'>-</div><div class='del'>-Sun Jan  7 09:33:02 2007  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: updated based on date2 4.0.1.</div><div class='del'>-</div><div class='del'>-Wed Jan  3 11:36:51 2007  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (ruby_dup): start GC on ENOMEM as well.</div><div class='del'>-</div><div class='del'>-Mon Jan  1 06:13:11 2007  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/c_parser.rb: Make Rdoc accessible.  Update constant</div><div class='del'>-	  value information.</div><div class='del'>-</div><div class='del'>-Mon Jan  1 06:13:11 2007  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: Update constant comments to provide</div><div class='del'>-	  values for RDoc.</div><div class='del'>-</div><div class='del'>-Mon Jan  1 06:05:55 2007  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constansts):</div><div class='del'>-	  Allow RDoc comment to give friendly value for rb_define_const.  Patch</div><div class='del'>-	  by Daniel Berger &lt;djberg96 at gmail.com&gt;, [ruby-patches-7499].</div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constansts): Fix</div><div class='del'>-	  whitespace handling in constant comments.</div><div class='del'>-</div><div class='del'>-Sun Dec 31 00:31:16 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: updated based on date2 4.0.</div><div class='del'>-</div><div class='del'>-Thu Dec 14 18:29:13 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: NetBSD editline does not have</div><div class='del'>-	  rl_username_completion_function() and rl_completion_matches().</div><div class='del'>-	  a patch from Takahiro Kambe &lt;taca at back-street.net&gt;.</div><div class='del'>-	  [ruby-dev:30008]</div><div class='del'>-</div><div class='del'>-Thu Dec 14 18:20:43 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/locale.rb (IRB::Locale::puts): typo fixed.  a patch from</div><div class='del'>-	  NAKAMURA Usaku &lt;usa@ruby-lang.org&gt;.  [ruby-dev:30012]</div><div class='del'>-</div><div class='del'>-Mon Dec 11 11:58:36 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/sha2/lib/sha2.rb: Moved one level up from under</div><div class='del'>-	  the superfluous subdirectory digest/.</div><div class='del'>-</div><div class='del'>-Mon Dec 11 11:46:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_define_const): typo fixed.</div><div class='del'>-</div><div class='del'>-Mon Dec 11 09:36:29 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_aset): index double decode problem.</div><div class='del'>-	  [ruby-core:09695]</div><div class='del'>-</div><div class='del'>-Sat Dec  9 21:39:24 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): keep the exception till after END blocks.</div><div class='del'>-	  [ruby-core:09675]</div><div class='del'>-</div><div class='del'>-Sat Dec  9 11:22:00 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/locale.rb (IRB::Locale::search_file): ues File.exist?</div><div class='del'>-	  instead of File.exists?.  a patch from Yutaka Kanemoto</div><div class='del'>-	  &lt;kinpoco at gmail.com&gt; in [ruby-dev:30000].</div><div class='del'>-</div><div class='del'>-Thu Dec  7 09:29:02 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/weakref.rb (WeakRef::__setobj__): should support</div><div class='del'>-	  marshaling.  [ruby-talk:228508]</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (Delegator::marshal_load): need to call</div><div class='del'>-	  __setobj__.</div><div class='del'>-</div><div class='del'>-Wed Dec  6 23:56:14 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, common.mk (NULLCMD): moved for platforms that empty</div><div class='del'>-	  command does not run.  fixed: [ruby-dev:29994]</div><div class='del'>-</div><div class='del'>-Wed Dec  6 17:17:26 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec  5 00:59:05 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): need to parse "/=" as</div><div class='del'>-	  self assignment operator, not regex.  [ruby-talk:227324]</div><div class='del'>-</div><div class='del'>-Mon Dec  4 10:48:03 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (OFFT2NUM): use LONG2NUM() if sizeof(long) equals to</div><div class='del'>-	  sizeof(off_t).</div><div class='del'>-</div><div class='del'>-Mon Dec  4 10:43:46 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec  4 08:32:49 2006  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::QueryExtension::read_multipart): should quote</div><div class='del'>-	  boundary. JVN#84798830</div><div class='del'>-</div><div class='del'>-Sat Dec  2 07:09:04 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ocsp.c: OpenSSL::OCSP::OSCPError should be</div><div class='del'>-	  subclass of OpenSSL::OpenSSLError. [ruby-dev:29980]</div><div class='del'>-</div><div class='del'>-Fri Dec  1 17:01:49 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (ruby_init_stack): decrease "stack level too deep" in Windows.</div><div class='del'>-	  merge from trunk.</div><div class='del'>-</div><div class='del'>-Fri Dec  1 16:31:53 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 27 17:18:27 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): need not to truncate string if no</div><div class='del'>-	  width specifier given for %s.  [ruby-dev:29952]</div><div class='del'>-</div><div class='del'>-Sun Nov 26 16:36:46 2006  URABE Shyouhei  &lt;shyouhei@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* version.h: addition of RUBY_PATCHLEVEL.</div><div class='del'>-	* version.c: ditto.</div><div class='del'>-</div><div class='del'>-Fri Nov 24 10:17:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 23 10:38:40 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_mod_define_method): set implicit visibility only when</div><div class='del'>-	  it's called for the target class (ruby_cbase).</div><div class='del'>-</div><div class='del'>-Wed Nov 22 16:00:49 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/extconf.rb: support --with-X11/--without-X11 option.</div><div class='del'>-</div><div class='del'>-	* ext/tk/README.tcltklib: add description about --with-X11-* option</div><div class='del'>-	  [ruby-talk:225166] and --with-X11/--without-X11 option.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil/extconf.rb: able to be called manually</div><div class='del'>-	  [ruby-talk:225950].</div><div class='del'>-</div><div class='del'>-Wed Nov 15 23:22:54 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (test_grpowned, rb_stat_grpowned): should honor</div><div class='del'>-	  supplementary group IDs.  [ruby-core:09546]</div><div class='del'>-</div><div class='del'>-Thu Nov  9 03:15:22 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (BEGIN_CALLARGS): ruby_block may be NULL even when</div><div class='del'>-	  ITER_PRE.</div><div class='del'>-</div><div class='del'>-Tue Nov  7 18:34:34 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/digest/hmac.rb: Keep this out of the 1.8 tree</div><div class='del'>-	  until we reach a consensus that HMAC should be put under Digest.</div><div class='del'>-</div><div class='del'>-Tue Nov  7 18:05:01 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: minor bug fix.</div><div class='del'>-</div><div class='del'>-Mon Nov  6 20:11:20 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/0.9.rb (RSS::Rss): removed needless include.</div><div class='del'>-</div><div class='del'>-Mon Nov  6 15:41:55 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: ext/tk/lib/tk/itemconfig.rb: bug</div><div class='del'>-	  fix on 'itemconfiginfo' method, and modify to make it easy to</div><div class='del'>-	  override 'itemconfiginfo' method.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/treeview.rb : support Tile 0.7.8.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/version.rb : [new] add Tk::Tkextlib_RELEASE_DATE</div><div class='del'>-	  to get the information from scripts.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: load 'tkextlib/version.rb', and update RELEASE_DATE</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/SUPPORT_STATUS: update.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/editable_listbox.rb: [new] the listbox with editable</div><div class='del'>-	  items. It's one of the example about usage of Place geometry manager.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tktextio.rb: improve the functions of TkTextIO class.</div><div class='del'>-	  Those are required by 'irbtkw.rbw'.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/irbtkw.rbw: [new] IRB on Ruby/Tk. It doesn't need any</div><div class='del'>-	  real console. IRB works on a text widget without I/O blocking. That</div><div class='del'>-	  is, thread switching on IRB will work properly, even if on Windows.</div><div class='del'>-</div><div class='del'>-Sun Nov  5 19:53:49 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb: updated based on date2 3.9.7.</div><div class='del'>-</div><div class='del'>-Sat Nov  4 13:13:57 2006  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: accept NOMODSEQ. [ruby-core:9002]</div><div class='del'>-	  (backported from HEAD)</div><div class='del'>-</div><div class='del'>-Fri Nov  3 00:16:37 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_getnameinfo__aix): AF_INET6 workaround</div><div class='del'>-	  for AIX.  a patch from Yutaka Kanemoto &lt;kinpoco AT gmail.com&gt;.</div><div class='del'>-	  [ruby-dev:29744]</div><div class='del'>-</div><div class='del'>-Thu Nov  2 15:43:39 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov  2 14:48:30 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb (Set#^): Fix XOR operation against a container that</div><div class='del'>-	  holds duplicate values. [issue: #6444]</div><div class='del'>-</div><div class='del'>-Wed Nov  1 02:41:38 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/digest/hmac.rb (Digest::HMAC::update): Minor</div><div class='del'>-	  optimization.</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (rb_digest_instance_equal): Allow comparing</div><div class='del'>-	  a digest instance with another of a different class.</div><div class='del'>-</div><div class='del'>-Wed Nov  1 01:05:13 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): fixed bug of zsuper with both of opt and rest.</div><div class='del'>-	  fixed: [ruby-list:42928]</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_super.rb: add tests to check above bug.</div><div class='del'>-</div><div class='del'>-Tue Oct 31 17:03:21 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_dup): duplicate the class of original time.</div><div class='del'>-	  [ruby-core:09357]</div><div class='del'>-</div><div class='del'>-	* lib/time.rb (Time::make_time, Time::rfc2822, Time::httpdate):</div><div class='del'>-	  should respect subclasses.  [ruby-core:09357]</div><div class='del'>-</div><div class='del'>-Mon Oct 30 23:40:52 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (miniruby): add XLDFLAGS.</div><div class='del'>-</div><div class='del'>-	* configure.in (aix): use -bE option for miniruby.  [ruby-dev:29698]</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): get rid of possible memory leak.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 30 19:29:20 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2str0): use better approximation.</div><div class='del'>-</div><div class='del'>-Mon Oct 30 18:35:33 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2str0): wrong allocation length.  a patch from</div><div class='del'>-	  U.Nakamura &lt;usa at garbagecollect.jp&gt; [ruby-dev:29710]</div><div class='del'>-</div><div class='del'>-Mon Oct 30 12:34:02 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): fix commit miss.  [ruby-dev:29707]</div><div class='del'>-</div><div class='del'>-Mon Oct 30 12:20:58 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2str0): a bug in length adjustment.</div><div class='del'>-</div><div class='del'>-Mon Oct 30 11:15:40 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_str_format): should preserve leading zero</div><div class='del'>-	  information for negative %b and %x.  [ruby-talk:221347]</div><div class='del'>-</div><div class='del'>-Thu Oct 26 21:05:58 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkcs7.c (ossl_pkcs7_verify): should clear error.</div><div class='del'>-	  (fix http://bugs.debian.org/394336)</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ns_spki.c (ossl_spki_initialize): ditto.</div><div class='del'>-</div><div class='del'>-Thu Oct 26 15:21:10 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (Init_digest): typo.</div><div class='del'>-</div><div class='del'>-Wed Oct 25 17:23:28 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest, test/digest/test_digest.rb: Merge from trunk:</div><div class='del'>-	  - Introduce versioning in Digest::Base API, and prefix C</div><div class='del'>-	    constants with RUBY_ and C type names with rb_ to avoid name</div><div class='del'>-	    clash in writing extensions.</div><div class='del'>-	  - Introduce Digest::Class and Digest::Instance for ease of</div><div class='del'>-	    implementing subclasses and add-ons.</div><div class='del'>-	  - Digest::Instance module requires and assumes that any instance</div><div class='del'>-	    be resettable and clonable.  An instance method #new() is</div><div class='del'>-	    added so digest instances work just like digest classes.</div><div class='del'>-	  - The constructor does no longer take an initial string to feed;</div><div class='del'>-	    digest() and hexdigest() now do, instead.  This allows digest</div><div class='del'>-	    classes to take their own hashing parameters.</div><div class='del'>-	  - Make some changes to digest() and hexdigest() class methods,</div><div class='del'>-	    which now take extra arguments, which are passed through to</div><div class='del'>-	    the constructor in an internal call.</div><div class='del'>-	  - Add #digest_length/size/length() and #block_length(),</div><div class='del'>-	  - Add the Digest::SHA2 class to wrap up SHA2 variants: SHA256,</div><div class='del'>-	    SHA384 and SHA512, hoping this module would make a decent</div><div class='del'>-	    example of a digest subclass written in Ruby.</div><div class='del'>-	  - Rip BubbleBabble support out of the base class and have a</div><div class='del'>-	    separate module named digest/bubblebabble.</div><div class='del'>-	  - Remove RD documents in favor of newly written and embedded</div><div class='del'>-	    RDoc documentation.</div><div class='del'>-</div><div class='del'>-Wed Oct 25 08:03:23 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: updated based on date2 3.9.6.</div><div class='del'>-	  [ruby-core:09323]</div><div class='del'>-</div><div class='del'>-Sun Oct 22 14:48:31 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* signal.c (Init_signal): avoid duplicated installation of SIGCHLD</div><div class='del'>-	  handler.</div><div class='del'>-</div><div class='del'>-Sun Oct 22 16:47:56 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_substr): should be infected with only original</div><div class='del'>-	  string, but not the shared string.  fixed: [ruby-core:09152]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_new4): keep shared string untainted when orignal</div><div class='del'>-	  string is tainted.  fixed: [ruby-dev:29672]</div><div class='del'>-</div><div class='del'>-Sun Oct 22 05:20:34 2006  URABE Shyouhei  &lt;shyouhei@ice.uec.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: alloca is broken; use C_ALLOCA instead.</div><div class='del'>-	  [ruby-dev:29416]</div><div class='del'>-</div><div class='del'>-Fri Oct 20 10:47:43 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: fixed the bug of handling COMMON_MACROS.</div><div class='del'>-</div><div class='del'>-Fri Oct 20 08:42:38 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (NULLCMD): dummy command.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (post-install-*): Borland make cannot ignore</div><div class='del'>-	  command-less double-colon rules.  [ruby-dev:29676]</div><div class='del'>-</div><div class='del'>-Fri Oct 20 00:37:07 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub ($(LIBRUBY_SO)): execute pre-link hook.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: workaround for Borland make.</div><div class='del'>-</div><div class='del'>-Wed Oct 18 23:02:40 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_shift): shorten copy size.  fixed: [ruby-list:42907]</div><div class='del'>-</div><div class='del'>-	* signal.c (Init_signal): handle SIGTERM.  fixed: [ruby-list:42895]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_utime): allow NULL to set the current time.</div><div class='del'>-	  [ruby-talk:219248]</div><div class='del'>-</div><div class='del'>-Wed Oct 18 00:55:33 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parser_yylex): use particular enums.  [ruby-core:09221]</div><div class='del'>-</div><div class='del'>-Mon Oct 16 08:30:43 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: *OBJS are not needed for extension libraries.</div><div class='del'>-</div><div class='del'>-	* {bcc32,wince,win32}/Makefile.sub (config.status): fixed typo,</div><div class='del'>-	  missing comma.</div><div class='del'>-</div><div class='del'>-Sun Oct 15 01:03:08 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/dir.rb (Collector::Dir#collect): append base</div><div class='del'>-	  directory but not prepend.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/dir.rb (Collector::Dir#collect_file): do not</div><div class='del'>-	  join with dot.  fixed: [ruby-core:09179]</div><div class='del'>-</div><div class='del'>-Sat Oct 14 23:39:50 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (singleton): no need to re-create NODE_SELF() again.</div><div class='del'>-	  [ruby-core:09177]</div><div class='del'>-</div><div class='del'>-Sat Oct 14 23:25:31 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parser_warning, parser_warn): some error message may</div><div class='del'>-	  contain format specifiers.  a patch from Akinori MUSHA &lt;knu at</div><div class='del'>-	  iDaemons.org&gt;.  [ruby-dev:29657]</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (VpException): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dl/handle.c (rb_dlhandle_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c (rb_gdbm_fatal): ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct 14 08:24:45 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/lib/digest/hmac: Back out the addition of digest/hmac</div><div class='del'>-	  for now because the API is too premature for a stable branch.</div><div class='del'>-</div><div class='del'>-Sat Oct 14 00:55:08 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (post-install-ext): no longer needed.</div><div class='del'>-</div><div class='del'>-	* bcc32/configure.bat: get rid of a quirk of Borland make, which</div><div class='del'>-	  sets empty macro in command line to "1".</div><div class='del'>-</div><div class='del'>-Fri Oct 13 22:50:43 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb: updated based on date2 3.9.5.</div><div class='del'>-</div><div class='del'>-Fri Oct 13 22:33:28 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (FileUtils.cp_r): dereference_root=true is</div><div class='del'>-	  default in Ruby 1.8.  This line is wrongly removed in last commit.</div><div class='del'>-</div><div class='del'>-Fri Oct 13 18:19:31 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c: Class#inherited RDoc added.  a patch from Daniel</div><div class='del'>-	  Berger &lt;djberg96 at gmail.com&gt;  [ruby-core:08942]</div><div class='del'>-</div><div class='del'>-Fri Oct 13 02:30:12 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/dir.rb (Collector::Dir#collect): prepend</div><div class='del'>-	  base directory to load path.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/dir.rb (Collector::Dir#collect_file): should</div><div class='del'>-	  use the given File-like interface, but not File directly.</div><div class='del'>-</div><div class='del'>-	* test/testunit/collector/test_dir.rb (TestDir::FileSystem): implement</div><div class='del'>-	  File-like methods correctly.</div><div class='del'>-</div><div class='del'>-Fri Oct 13 01:48:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb (Date::self.complete_hash): need to check if g is</div><div class='del'>-	  nil before dereference.  [ruby-core:09116]</div><div class='del'>-</div><div class='del'>-Fri Oct 13 00:34:26 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_cvar_defined): wrong id check.  a patch from</div><div class='del'>-	  Mauricio Fernandez &lt;mfp at acm.org&gt;.  [ruby-core:09158]</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_cvar_get): typo fixed.  [ruby-core:09168]</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_cvar_set): ditto.</div><div class='del'>-</div><div class='del'>-Wed Oct 11 22:21:41 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest: Merge from trunk; metadata location changed,</div><div class='del'>-	  Digest::Base#reset() added, Digest::Base#equal() changed, and</div><div class='del'>-	  digest/hmac added with some modifications made for ruby 1.8.</div><div class='del'>-</div><div class='del'>-Tue Oct 10 17:24:12 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (config.status): shouldn't use</div><div class='del'>-	  copy command instead of install. use -run install.</div><div class='del'>-</div><div class='del'>-Tue Oct 10 16:49:16 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c (hexdigest_str_new, bubblebabble_str_new):</div><div class='del'>-	  Perform StringValue() checks properly.</div><div class='del'>-</div><div class='del'>-	* ext/digest/digest.c: Use RSTRING_{PTR,LEN} macros.</div><div class='del'>-</div><div class='del'>-Tue Oct 10 13:49:53 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest: Merge from trunk; apply all changes since the</div><div class='del'>-	  initial import, except for the removal of compatibility stub</div><div class='del'>-	  libraries (md5.rb and sha1.rb).</div><div class='del'>-</div><div class='del'>-Mon Oct  9 23:46:29 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/parsedate.rb: documentation patch from Konrad Meyer</div><div class='del'>-	  &lt;konrad.meyer@gmail.com&gt;.  [ruby-doc:1238]</div><div class='del'>-</div><div class='del'>-	* lib/open3.rb, lib/ping.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Oct  9 22:56:12 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/encoding.rb (REXML::Encoding::check_encoding): spaces</div><div class='del'>-	  are allowed around equal sign.  [ruby-core:09032]</div><div class='del'>-</div><div class='del'>-	* lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser): ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct  7 23:53:08 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_scan): small documentation fix.</div><div class='del'>-	  [ruby-core:09007]</div><div class='del'>-</div><div class='del'>-Sat Oct  7 23:44:33 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_rshift): a bug in right shift of negative</div><div class='del'>-	  bignums.  [ruby-core:09020]</div><div class='del'>-</div><div class='del'>-Sat Oct  7 00:27:58 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_include_module): remove unnecessary check.</div><div class='del'>-	  [ruby-talk:218402]</div><div class='del'>-</div><div class='del'>-Fri Oct  6 04:30:30 2006  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/openssl/c_rehash.rb: Use digest/md5 instead of obsolete md5.</div><div class='del'>-</div><div class='del'>-Wed Oct  4 18:47:25 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*: bugfix and update</div><div class='del'>-	  (see ext/tk/ChangeLog.tkextlib).</div><div class='del'>-</div><div class='del'>-Wed Oct  4 17:25:14 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call): check protected visibility based on real self,</div><div class='del'>-	  not ruby_frame-&gt;self.  [ruby-talk:217822]</div><div class='del'>-</div><div class='del'>-Wed Oct  4 08:52:30 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/optparse/test_getopts.rb: changed the class name of test case</div><div class='del'>-	  to get rid of conflict with test_optparse.rb.</div><div class='del'>-</div><div class='del'>-Tue Oct  3 23:32:27 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/testcase.rb (Test::Unit::TestCase.suite): test name</div><div class='del'>-	  must be string.  fixed: [ruby-core:08978]</div><div class='del'>-</div><div class='del'>-Mon Oct  2 23:47:55 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::COLLECTORS):</div><div class='del'>-	  base directory should be lower precedence.  fixed: [ruby-dev:29622]</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb (Test::Unit::AutoRunner#options): typo.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):</div><div class='del'>-	  load expanded path.  fixed: [ruby-dev:29621]</div><div class='del'>-</div><div class='del'>-Mon Oct  2 15:49:19 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: batfile should be CRLF'ed.</div><div class='del'>-</div><div class='del'>-Mon Oct  2 01:24:26 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (test-all): separate directory where running test cases</div><div class='del'>-	  from source tree.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb (options): added --basedir, --workdir</div><div class='del'>-	  and --load-path options.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/dir.rb (recursive_collect, collect_file):</div><div class='del'>-	  base directory support.</div><div class='del'>-</div><div class='del'>-Sun Oct  1 23:56:52 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, common.mk, ext/extmk.rb, win{32,ce}/Makefile.in: keep</div><div class='del'>-	  LIBRUBY_SO unless need to be removed.</div><div class='del'>-</div><div class='del'>-Sun Oct  1 23:12:19 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser#make_switch): pass arguments directly.</div><div class='del'>-</div><div class='del'>-Sat Sep 30 15:12:25 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: updated based on date2 3.9.4.</div><div class='del'>-</div><div class='del'>-Fri Sep 29 12:11:04 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* jcode.rb (succ!): call original succ! if $KCODE == 'n'.</div><div class='del'>-	  fixed: [ruby-talk:216845]</div><div class='del'>-</div><div class='del'>-Fri Sep 29 11:43:40 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_func): revert fallback checking undeclared function.</div><div class='del'>-	  fixed: [ruby-core:08949]</div><div class='del'>-</div><div class='del'>-Fri Sep 29 09:56:56 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: extout is needed for also clean.</div><div class='del'>-	  fixed: [ruby-core:08944]</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Switch#conv_arg): unsplat by</div><div class='del'>-	  Proc#call if no conversion is given.</div><div class='del'>-</div><div class='del'>-Thu Sep 28 23:59:31 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (struct thread): declare win32_exception_list on cygwin and</div><div class='del'>-	  win32 regardless if it is implemented.  Provisional fix for</div><div class='del'>-	  [ruby-core:08917].</div><div class='del'>-</div><div class='del'>-Thu Sep 28 20:53:16 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tmpdir.rb: use return value of getdir.call for length.</div><div class='del'>-</div><div class='del'>-Wed Sep 27 01:04:49 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_func): check function pointer first and macro next.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_type): simplified with typedef and sizeof.</div><div class='del'>-</div><div class='del'>-Tue Sep 26 23:57:03 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser#getopts): use strings as key.</div><div class='del'>-	  fixed: [ruby-dev:29614]</div><div class='del'>-</div><div class='del'>-Tue Sep 26 15:31:26 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {win32,wince}/Makefile.sub (CPP): check predefined value.</div><div class='del'>-</div><div class='del'>-Tue Sep 26 07:55:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_shift): should not move memory region if array</div><div class='del'>-	  body is shared.  a patch from Kent Sibilev &lt;ksruby at gmail.com&gt;.</div><div class='del'>-	  [ruby-core:08922]</div><div class='del'>-</div><div class='del'>-Mon Sep 25 22:26:26 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_path_end): skip root directory.  fixed: [ruby-core:08913]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): set default $LDFLAGS.  Patch by Michal</div><div class='del'>-	  Suchanek &lt;hramrach at centrum.cz&gt;.  [ruby-talk:216256]</div><div class='del'>-</div><div class='del'>-Mon Sep 25 08:14:43 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_shift): should clear shifting top element.</div><div class='del'>-	  [ruby-talk:216055]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_shift): avoid creating shared object if array</div><div class='del'>-	  size is small.</div><div class='del'>-</div><div class='del'>-Mon Sep 25 08:11:35 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (rb_f_rand): RDoc typo fix.  a patch from Frederick</div><div class='del'>-	  Cheung &lt;fred at 82ask.com&gt;.  [ruby-talk:216047]</div><div class='del'>-</div><div class='del'>-Sun Sep 24 22:28:20 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* runruby.rb: extension library scripts moved into common directory.</div><div class='del'>-</div><div class='del'>-Sun Sep 24 14:59:50 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (struct thread): ia64 support is broken by sandbox patch.</div><div class='del'>-</div><div class='del'>-Sun Sep 24 12:11:16 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: updated based on date2 3.9.3.</div><div class='del'>-</div><div class='del'>-Sat Sep 23 23:24:57 2006  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_save_context, rb_thread_restore_context):</div><div class='del'>-	  sandbox hook to save and restore sandbox state.</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_no_ensure): added THREAD_NO_ENSURE thread flag.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_kill_bang): Thread#kill! uses the above flag</div><div class='del'>-	  to circumvent ensure, in order to prevent endless loops.</div><div class='del'>-	  [ruby-core:08768]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_kill): fix Thread#kill docs, which returns</div><div class='del'>-	  the thread object in all cases.</div><div class='del'>-</div><div class='del'>-	* node.h: expose the rb_jmpbuf_t and rb_thread_t structs, along</div><div class='del'>-	  with the thread flags.  used by the sandbox extension.</div><div class='del'>-</div><div class='del'>-	* ruby.h: extern rb_eThreadError, so sandbox can swap it.</div><div class='del'>-</div><div class='del'>-Sat Sep 23 21:34:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Sep 23 08:35:53 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/ri/ri_options.rb: prevent NameError.  [ruby-dev:29597]</div><div class='del'>-</div><div class='del'>-Sat Sep 23 01:04:20 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: updated based on date2 3.9.2.</div><div class='del'>-</div><div class='del'>-Fri Sep 22 02:06:26 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* .cvsignore: ignore timestamp files and installed list file.</div><div class='del'>-</div><div class='del'>-Fri Sep 22 01:36:34 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: include FileUtils unconditionally.</div><div class='del'>-</div><div class='del'>-Thu Sep 21 22:56:20 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (no-install): not install rdoc actually.</div><div class='del'>-</div><div class='del'>-	* common.mk (install-doc, no-install-doc): use instruby.rb.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: rdoc installation.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: expand ruby executable names.</div><div class='del'>-</div><div class='del'>-Thu Sep 21 13:55:07 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (etc_getpwuid): uid integer should be wraped in</div><div class='del'>-	  uid_t value.  [ruby-core:08897]</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (etc_getpwuid): uid_t may be bigger than plain</div><div class='del'>-	  'int' type.</div><div class='del'>-</div><div class='del'>-Wed Sep 20 23:17:41 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (pre-install-doc): create data directory before install.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (dir_re): fixed typo.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (install_dirs): remove extra slash.</div><div class='del'>-</div><div class='del'>-Wed Sep 20 09:53:38 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (INSTALLED_LIST): need to define</div><div class='del'>-	  this macro to install.</div><div class='del'>-</div><div class='del'>-Wed Sep 20 09:43:10 2006  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb: allow extra spaces in responses.</div><div class='del'>-	  Thanks, Tom Soderlund. (backported from HEAD)</div><div class='del'>-</div><div class='del'>-Wed Sep 20 09:25:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c: add RDoc documentation. a patch from Peter</div><div class='del'>-	  Adolphs &lt;futzilogik at users dot sourceforge dot net&gt;.</div><div class='del'>-	  [ruby-doc:1223]</div><div class='del'>-</div><div class='del'>-Tue Sep 19 01:28:00 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: backport from HEAD (rev 1.71).</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (FileUtils.cp_r): new option</div><div class='del'>-	  :remove_destination.</div><div class='del'>-</div><div class='del'>-Tue Sep 19 00:42:15 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_ivar_defined, rb_mod_cvar_defined): new methods,</div><div class='del'>-	  Kernel#instance_variable_defined? and Module#class_variable_defined?.</div><div class='del'>-	  [ruby-dev:29587]</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (Date::Bag#method_missing): use new method,</div><div class='del'>-	  instance_variable_defined? to check if an instance variable is</div><div class='del'>-	  defined.  fixed: [ruby-dev:29554]</div><div class='del'>-	  -- This didn't fix anything.</div><div class='del'>-</div><div class='del'>-Sun Sep 17 23:44:58 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/rdoc.rb (RDoc::RDoc#document): scan only files modified</div><div class='del'>-	  after the previous generation.</div><div class='del'>-</div><div class='del'>-Sun Sep 17 17:42:13 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (install-doc): reverted.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: stores file name list without destdir prefix.</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/ri_generator.rb: do not chdir twice.</div><div class='del'>-</div><div class='del'>-Sat Sep 16 23:14:29 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (establishShell): remove remaining unused line.</div><div class='del'>-</div><div class='del'>-Sat Sep 16 16:40:44 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, common.in, instruby.rb, ext/extmk.rb, lib/mkmf.rb:</div><div class='del'>-	  use instruby.rb to install extensions instead of ext/extmk.rb.</div><div class='del'>-</div><div class='del'>-	* instruby.rb: store installed list into the file.</div><div class='del'>-</div><div class='del'>-	* ext/dbm/extconf.rb: allow multiple candidates for dbm-type.</div><div class='del'>-</div><div class='del'>-	* ext/io/wait/extconf.rb: suspicious checking_for.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (establishShell): parent pid is not used.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (freeDevice): not used.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (get_device_once): removed garbage right brace.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (checking_for): improved the messages.</div><div class='del'>-</div><div class='del'>-Thu Sep 14 16:11:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_intern): raise SecurityError only when $SAFE</div><div class='del'>-	  level is greater than zero.  [ruby-core:08862]</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_interned_p): new function to check if a string is</div><div class='del'>-	  already interned.</div><div class='del'>-</div><div class='del'>-	* object.c (str_to_id): use rb_str_intern().</div><div class='del'>-</div><div class='del'>-Wed Sep 13 18:43:05 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* README.EXT: English adjustment.  [ruby-core:08851] and</div><div class='del'>-	  [ruby-core:08852]</div><div class='del'>-</div><div class='del'>-Wed Sep 13 18:25:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-parse-partial): better here-doc support.</div><div class='del'>-	  a patch from Marshall T. Vandegrift &lt;llasram at gmail.com&gt;.</div><div class='del'>-	  [ruby-core:08804]</div><div class='del'>-</div><div class='del'>-Wed Sep 13 16:43:36 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_intern): prohibit interning tainted string.</div><div class='del'>-</div><div class='del'>-Wed Sep 13 01:14:21 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser#getopts): works with pre-registered</div><div class='del'>-	  options.  [ruby-core:08826]</div><div class='del'>-</div><div class='del'>-Sun Sep 10 20:27:13 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: updated based on date2 3.9.1.</div><div class='del'>-</div><div class='del'>-Tue Jan 10 09:18:03 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (stack_extend): fixed prototype.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_require_safe): prevent extension from loading twice.</div><div class='del'>-	  fixed: [ruby-dev:29523]</div><div class='del'>-</div><div class='del'>-Sat Sep  9 23:50:38 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_mul0): bignum multiplication without</div><div class='del'>-	  normalization.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_pow): use rb_big_mul0().  [ruby-dev:29547]</div><div class='del'>-</div><div class='del'>-Sat Sep  9 14:08:38 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/testcase.rb (Test::Unit::TestCase#run): Rescue</div><div class='del'>-	  Exception in Test::Unit::TestCase#run.  [ruby-core:08783]</div><div class='del'>-</div><div class='del'>-Sat Sep  9 04:55:59 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pstore.rb: open all in binary mode, and get rid of the quirk of</div><div class='del'>-	  msvcrt.  fixed: [ruby-dev:29518]</div><div class='del'>-</div><div class='del'>-Sat Sep  9 04:54:42 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, win32/Makefile.sub (MINIRUBY): append MINIRUBYOPT.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb, ext/extmk.rb, lib/mkmf.rb, win32/mkexports.rb: suppress</div><div class='del'>-	  warnings with $VERBOSE.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: Proc#call does not pass the block in 1.8.</div><div class='del'>-</div><div class='del'>-	* win32/resource.rb: add more info.</div><div class='del'>-</div><div class='del'>-Fri Sep  8 10:03:59 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/cookie.rb (WEBrick::Cookie.parse_set_cookies): new</div><div class='del'>-	  method to parse multiple cookies per Set-Cookie header.</div><div class='del'>-	  Thanks to Aaron Patterson &lt;aaron_patterson at speakeasy.net&gt;.</div><div class='del'>-	  [ruby-core:08802]</div><div class='del'>-</div><div class='del'>-Fri Sep  8 08:59:30 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub, win32/configure.bat win32/setup.mak: program</div><div class='del'>-	  name transform.</div><div class='del'>-</div><div class='del'>-Fri Sep  8 01:33:08 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (RSTRING_PTR): add migration macro.</div><div class='del'>-</div><div class='del'>-	* ruby.h (RARRAY_PTR): ditto.</div><div class='del'>-</div><div class='del'>-Thu Sep  7 23:27:05 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_0, fpath_check): disable path check on cygwin.</div><div class='del'>-	  [ruby-talk:213074]</div><div class='del'>-</div><div class='del'>-Wed Sep 06 12:05:19 2006  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/lib/kconv.rb (Kconv::RegexpEucjp): fix regexp for euc-jp</div><div class='del'>-	  [ruby-dev:29344]</div><div class='del'>-</div><div class='del'>-	* ext/nkf/lib/kconv.rb (Kconv::toeuc): remove -m0 [ruby-dev:29505]</div><div class='del'>-</div><div class='del'>-Tue Sep  5 06:47:22 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_to_s): variable declaration after an execution</div><div class='del'>-	  statement.</div><div class='del'>-</div><div class='del'>-Tue Sep  5 05:56:51 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_hash): improve collision.  fixed: [ruby-dev:29352]</div><div class='del'>-</div><div class='del'>-Tue Sep  5 05:49:41 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_0): check if sticky bit is set on parent</div><div class='del'>-	  directories for executable path.  fixed: [ruby-dev:29415]</div><div class='del'>-</div><div class='del'>-Tue Sep  5 05:03:46 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_plus): addition in Fixnum will never overflow</div><div class='del'>-	  long.  a patch from Ondrej Bilka &lt;neleai at seznam.cz&gt;.</div><div class='del'>-	  [ruby-core:08794]</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_minus): ditto.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_pow): eagerly truncate resulting bignum.</div><div class='del'>-	  [ruby-core:08794]</div><div class='del'>-</div><div class='del'>-Mon Sep  4 23:15:34 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_to_s): make it conform to RFC2822 date format.</div><div class='del'>-	  [ruby-dev:29467]</div><div class='del'>-</div><div class='del'>-Mon Sep  4 21:43:57 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  4 21:42:35 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: updated based on date2 3.9.</div><div class='del'>-</div><div class='del'>-Mon Sep  4 21:14:20 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_strftime): include nul character.  fixed: [ruby-dev:29422]</div><div class='del'>-</div><div class='del'>-Mon Sep  4 16:29:33 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::out): specify -m0 -x option for nkf.</div><div class='del'>-	  [ruby-dev:29284]</div><div class='del'>-</div><div class='del'>-Mon Sep  4 16:13:23 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_open): command name should not contain null bytes.</div><div class='del'>-	  [ruby-dev:29421]</div><div class='del'>-</div><div class='del'>-	* process.c (proc_spawn): ditto.</div><div class='del'>-</div><div class='del'>-	* process.c (proc_spawn_n): ditto.</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_system): ditto.</div><div class='del'>-</div><div class='del'>-Sun Sep  3 15:32:44 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: get rid of nil.to_s.</div><div class='del'>-</div><div class='del'>-Sun Sep  3 06:24:38 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ruby_connect): sockerrlen should be socklen_t.</div><div class='del'>-</div><div class='del'>-Sun Sep  3 04:40:42 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: check arpa/inet.h for ntohs.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: include arpa/inet.h if available.</div><div class='del'>-</div><div class='del'>-Sun Sep  3 02:34:55 2006  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/unix.rb (DRbUNIXSocket#close): don't get path if client mode.</div><div class='del'>-	  [ruby-dev:29417]</div><div class='del'>-</div><div class='del'>-Sun Sep  3 01:45:17 2006  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/acl.rb (ACLEntry#initialize): examine whether '*' is</div><div class='del'>-	  included before IPAddr.new. [ruby-dev:29406]</div><div class='del'>-</div><div class='del'>-Sat Sep  2 13:23:01 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (ia64.o): use the compiler driver to assemble ia64.s</div><div class='del'>-	  to use appropriate ABI.</div><div class='del'>-</div><div class='del'>-Sat Sep  2 03:36:22 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk, configure.in, defines.h, eval.c, gc.c, main.c,</div><div class='del'>-	  numeric.c, ruby.h, ia64.s: backport IA64 HP-UX support.</div><div class='del'>-</div><div class='del'>-Fri Sep  1 13:52:57 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/font.rb: TkFont#current_configinfo() doesn't work</div><div class='del'>-	  on Tcl/Tk8.x.</div><div class='del'>-</div><div class='del'>-Thu Aug 31 12:46:55 2006  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_init): rename top_cref to ruby_top_cref and export,</div><div class='del'>-	  along with ruby_cref, for use by the sandbox. [ruby-core:08762]</div><div class='del'>-</div><div class='del'>-	* node.h: ditto.</div><div class='del'>-</div><div class='del'>-Tue Aug 29 19:10:10 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug 28 11:36:02 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Fix typo.  Submitted by</div><div class='del'>-	  &lt;calamitas at gmail.com&gt;.  [ruby-core:08724]</div><div class='del'>-</div><div class='del'>-Mon Aug 28 07:53:44 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/ri/ri_formatter.rb: Don't unescape HTML in HtmlFormatter.</div><div class='del'>-	  Submitted by Kent Sibilev &lt;ksruby at gmail.com&gt;.  [ruby-core:08392].</div><div class='del'>-</div><div class='del'>-Mon Aug 28 07:25:45 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (File#size?): Fix documentation submitted by Rick Ohnemus.</div><div class='del'>-	  ruby-Bugs-5529.  [ruby-core:08725]</div><div class='del'>-</div><div class='del'>-Sat Aug 26 08:07:13 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb, lib/date/format.rb: updated based on date2 3.8.2.</div><div class='del'>-</div><div class='del'>-Fri Aug 25 22:32:04 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/source.rb (REXML::IOSource#initialize): encoding have to</div><div class='del'>-	  be set with the accessor.  fixed: [ruby-list:42737]</div><div class='del'>-</div><div class='del'>-Fri Aug 25 17:15:17 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.8.5 released.</div><div class='del'>-</div><div class='del'>-Fri Aug 25 17:02:06 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): typo fixed.</div><div class='del'>-</div><div class='del'>-Tue Aug 22 18:47:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 19 14:15:02 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 19 11:28:08 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 19 11:09:23 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (then): remove semicolon warning.  [ruby-dev:29299]</div><div class='del'>-</div><div class='del'>-Thu Aug 17 19:15:16 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_[rRwWxX]): check for super user.</div><div class='del'>-	  fixed: [ruby-core:08616]</div><div class='del'>-</div><div class='del'>-Thu Aug 17 14:47:06 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: added rdoc by Daniel Berger.  [ruby-core:08177]</div><div class='del'>-</div><div class='del'>-Thu Aug 17 00:39:05 2006  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 16 11:45:36 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 15 19:10:18 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 16 11:09:26 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 16 11:08:00 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: removed an excess macro.  fixed: [ruby-dev:29258]</div><div class='del'>-</div><div class='del'>-Tue Aug  8 23:49:06 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug  8 11:32:54 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug  7 17:56:59 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug  7 15:55:08 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug  7 14:37:48 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/socket/socket.c: AIX socket support.  [ruby-dev:29190]</div><div class='del'>-</div><div class='del'>-Mon Aug  7 12:05:28 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Aug  6 20:40:41 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (str[fp]time): %[EO]U didn't denote %U.</div><div class='del'>-</div><div class='del'>-Sat Aug  5 17:07:43 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug  5 13:54:03 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb (str[fp]time): "%\n" means "\n".</div><div class='del'>-</div><div class='del'>-Fri Aug  4 15:21:00 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Aug  4 19:13:41 2006  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Aug  4 14:02:14 2006  James Edward Gray II  &lt;james@grayproductions.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Aug  4 13:56:51 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug  1 17:44:03 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (init_stdhandle): assign standard file handles.</div><div class='del'>-</div><div class='del'>-Tue Aug  1 12:24:58 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Binding): fix old commit miss.</div><div class='del'>-</div><div class='del'>-Mon Jul 31 17:08:20 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (exit_handler): new function; release winsock and</div><div class='del'>-	  environment work area.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NTInitialize): setup exit_handler.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (StartSockets): use exit_handler.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 31 16:15:13 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 31 13:38:22 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 31 09:22:12 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul 30 23:26:22 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Jul 29 06:12:06 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: freeze ip_name for security reason.</div><div class='del'>-</div><div class='del'>-Sat Jul 29 01:23:52 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 27 22:21:52 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_to_s): fixed format mismatch.</div><div class='del'>-</div><div class='del'>-Thu Jul 27 21:19:54 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* math.c (math_sqrt): fix documentation flaw.</div><div class='del'>-</div><div class='del'>-Thu Jul 27 18:12:12 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c: need to declare time_utc_offset.</div><div class='del'>-</div><div class='del'>-Thu Jul 27 17:01:01 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 27 16:49:01 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 27 16:41:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 26 22:20:59 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add support for as and ASFLAGS.  [ruby-dev:29138]</div><div class='del'>-</div><div class='del'>-Wed Jul 26 22:13:45 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: sync with HEAD (rev 1.132).</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Jul 26 18:35:38 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: sync with HEAD (rev 1.25).</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 26 18:14:19 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 26 17:28:16 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 26 16:39:07 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_scan): add string modification check.</div><div class='del'>-	  [ruby-core:7216]</div><div class='del'>-</div><div class='del'>-Wed Jul 26 16:06:03 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 26 01:02:59 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: suppress warnings by automake 1.8 or later.</div><div class='del'>-</div><div class='del'>-Tue Jul 25 00:30:06 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb: RD to RDoc conversion by Hugh Sasse.</div><div class='del'>-</div><div class='del'>-Tue Jul 25 14:49:51 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration): typo.</div><div class='del'>-</div><div class='del'>-Tue Jul 25 13:14:32 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 24 22:03:40 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (backtrace): skip frames successive on node and method name.</div><div class='del'>-</div><div class='del'>-Mon Jul 24 17:55:55 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (rb_f_system): add security check.  [ruby-talk:202947]</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 24 15:51:52 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 24 15:19:55 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): revert last change.  [ruby-dev:29112]</div><div class='del'>-	  [ruby-core:08374]</div><div class='del'>-</div><div class='del'>-Sun Jul 23 22:59:49 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 21 21:21:08 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 21 12:11:00 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 20 15:07:14 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: export classes/modules to implement sandbox.</div><div class='del'>-	  [ruby-core:08283]</div><div class='del'>-</div><div class='del'>-Thu Jul 20 00:06:29 2006  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/completion.rb: support for completion of numeric</div><div class='del'>-	  number. [ruby-dev: 29038]</div><div class='del'>-</div><div class='del'>-Wed Jul 19 23:53:05 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/parser.rb, lib/rss/utils.rb: added documents.</div><div class='del'>-</div><div class='del'>-Tue Jul 18 22:10:13 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 18 23:12:14 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (open_ifs_socket): should not use plain malloc.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_opendir): should not use plain realloc.</div><div class='del'>-</div><div class='del'>-Tue Jul 18 18:05:49 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 18 15:49:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): propagate association array to copied</div><div class='del'>-	  string.  [ruby-core:08223]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* pack.c (pack_pack): taint 'p' packed strings.</div><div class='del'>-</div><div class='del'>-Tue Jul 18 14:03:02 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 18 10:53:37 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_cstr_to_dbl): limit out-of-range message.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 18 00:43:05 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 18 00:01:27 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: remove LIBRUBY_SO if static linked extensions exist.</div><div class='del'>-</div><div class='del'>-Mon Jul 17 23:30:46 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 17 13:43:05 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (define_swapx): should not use plain malloc.</div><div class='del'>-</div><div class='del'>-Mon Jul 17 12:58:41 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: should use ac_cv_lib_dl_dlopen=no on MinGW.</div><div class='del'>-</div><div class='del'>-Sat Jul 15 23:50:12 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 15 01:27:13 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 15 01:09:22 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* gc.c (rb_memerror): should not raise empty nomem_error.</div><div class='del'>-</div><div class='del'>-Fri Jul 14 13:08:13 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add methods for new features of latest Tcl/Tk8.5.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul 14 02:30:12 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 14 01:09:46 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (then): error in warning action.</div><div class='del'>-</div><div class='del'>-Fri Jul 14 00:10:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 13 22:23:56 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 13 20:32:19 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 12 13:54:09 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 11 20:58:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: export rb_cMethod.  [ruby-talk:201259]</div><div class='del'>-</div><div class='del'>-Tue Jul 11 19:13:33 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 11 18:00:57 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: security fix.</div><div class='del'>-</div><div class='del'>-Tue Jul 11 17:33:39 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dump): need to extend len for \b.</div><div class='del'>-</div><div class='del'>-Mon Jul 10 22:00:00 2006  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: Allows '_' to appear within</div><div class='del'>-	  digits.  [ruby-dev:28872]</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 10 19:22:19 2006  Tanaka Akira  &lt;akr@fsij.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 10 18:59:34 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/font.rb: sorry. mistaken to patch.</div><div class='del'>-</div><div class='del'>-Mon Jul 10 18:46:52 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: make SEGV risk lower at exit.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: a little change for the pseudo-toplevel strategy.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/font.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/msgcat.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/itk/incr_tk.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/widget: ditto.</div><div class='del'>-</div><div class='del'>-Mon Jul 10 13:58:40 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ruby.h (HAVE_NATIVETHREAD_KILL): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_native_thread_kill): ditto.</div><div class='del'>-</div><div class='del'>-Mon Jul 10 10:54:14 2006  Ryan Davis  &lt;ryand@zenspider.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rdoc/diagram.rb: diagrams are now cached.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb: private comment (--/++) support in</div><div class='del'>-	  C-file rdoc.</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb: minor clarification in help.</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: minor clarification on exception.</div><div class='del'>-</div><div class='del'>-Mon Jul 10 09:29:12 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 10 01:48:38 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul  9 18:06:47 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (try_constant): fix for value 1 at cross compiling.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul  9 00:54:34 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (next_jump): deal with destination of next.</div><div class='del'>-	  fixed: [ruby-core:08169]</div><div class='del'>-</div><div class='del'>-Fri Jul  7 00:38:49 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul  7 00:29:10 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul  6 22:21:57 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul  6 22:17:21 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c: sync with original code, rev 1.8.</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c: should mark CparseParams objects.</div><div class='del'>-</div><div class='del'>-	* lib/racc/parser.rb: sync with original code, rev 1.8.</div><div class='del'>-</div><div class='del'>-	* lib/racc/parser.rb: update coding style.</div><div class='del'>-</div><div class='del'>-Mon Jul  3 19:04:38 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: lack of Tk.callback_return.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menu.rb: improve creating clone menus.</div><div class='del'>-</div><div class='del'>-Mon Jul  3 14:42:06 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul  3 01:14:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_inspect): encode \b (\010) for escape.</div><div class='del'>-	  [ruby-dev:28927]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_dump): ditto.</div><div class='del'>-</div><div class='del'>-Sun Jul  2 19:17:56 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c: sync with original code (rev 1.7).</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul  1 15:15:49 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jun 30 23:46:23 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jun 29 18:58:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (BigDecimal_version): fix patch</div><div class='del'>-	  failure.</div><div class='del'>-</div><div class='del'>-Thu Jun 29 18:00:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 28 15:47:14 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 28 19:04:34 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/socket/test_unix.rb: test_seqpacket_pair removed.</div><div class='del'>-	  [ruby-dev:28846]</div><div class='del'>-</div><div class='del'>-Tue Jun 27 23:03:49 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 27 22:47:18 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: forgot to update TCLTKLIB_RELEASE_DATE.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 27 16:04:05 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: define isascii on MinGW for msvcrt compatibility.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 27 11:36:02 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jun 26 13:37:27 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc: Merge from HEAD.</div><div class='del'>-	  Add options to limit the ri search path.</div><div class='del'>-</div><div class='del'>-Tue Jun 27 00:54:08 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (powersOf10): constified.</div><div class='del'>-</div><div class='del'>-Mon Jun 26 18:37:44 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jun 26 10:47:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jun 26 09:56:22 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.[ch] (rb_w32_send, rb_w32_sendto): constified.</div><div class='del'>-</div><div class='del'>-Sun Jun 25 23:02:12 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, mkconfig.rb: catch-up for latest autoconf.</div><div class='del'>-</div><div class='del'>-Sat Jun 24 06:35:00 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c: revert last change.</div><div class='del'>-</div><div class='del'>-	* ruby.h: ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c: ditto.</div><div class='del'>-</div><div class='del'>-Thu Jun 22 11:52:02 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 22 05:15:58 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 21 21:28:32 2006  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 21 17:32:31 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ruby.h (HAVE_NATIVETHREAD_KILL): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_native_thread_kill): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jun 21 08:39:54 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 21 01:40:25 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 21 01:12:46 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: RSS::Element.def_corresponded_attr_writer</div><div class='del'>-	  supported date type.</div><div class='del'>-</div><div class='del'>-Tue Jun 20 22:08:36 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 20 21:19:06 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: provided default RSS::Element#children.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 20 21:04:33 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: provided default RSS::Element#_tags.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 20 20:47:07 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Jun 20 20:18:05 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for OBJ_NAME_do_all_sorted.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/digest.rb: reimplement without eval().</div><div class='del'>-</div><div class='del'>-	* test/openssl/test_cipher.rb, test_digest: fix about reimplemented</div><div class='del'>-	  features.</div><div class='del'>-</div><div class='del'>-	* sample/openssl/cipher.rb: rewrite all.</div><div class='del'>-</div><div class='del'>-Sat Jun 19 11:21:46 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/assertions.rb: Merge RDoc from HEAD.</div><div class='del'>-</div><div class='del'>-Tue Jun 20 01:06:57 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Jun 19 23:40:59 2006  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/lib/kconv.rb: remove default -m0 and fix document.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jun 19 22:31:59 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/2.0.rb: removed #other_element.</div><div class='del'>-</div><div class='del'>-Mon Jun 19 22:09:16 2006  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/win32ole/tests/test_word.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/tests/testall.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Jun 19 00:02:17 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: automatically detected attributes.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/parser.rb: followed new internal API.</div><div class='del'>-</div><div class='del'>-Mon Jun 19 00:00:17 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix bug: initialize improper tables.</div><div class='del'>-</div><div class='del'>-Sun Jun 18 22:36:13 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/parser.rb: user initial attributes to initialize</div><div class='del'>-	  RSS::Element.</div><div class='del'>-</div><div class='del'>-Sun Jun 18 18:24:42 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/converter.rb: use NKF for Uconv fallback.</div><div class='del'>-</div><div class='del'>-Sun Jun 18 18:22:04 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/rss/test_image.rb: shared name space configuration.</div><div class='del'>-</div><div class='del'>-Sun Jun 18 18:13:25 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Jun 18 18:08:36 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jun 18 18:03:50 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/parser.rb: removed a guard for requiring open-uri.</div><div class='del'>-</div><div class='del'>-Sun Jun 18 18:01:26 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jun 18 17:52:39 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Jun 18 00:49:11 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jun 17 22:17:17 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mathn.rb (Integer::prime_division): raise ZeroDivisionError</div><div class='del'>-	  on zeros.  [ruby-dev:28739]</div><div class='del'>-</div><div class='del'>-Sat Jun 17 14:53:32 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb: backport from 1.9.</div><div class='del'>-	  (Kernel#Pathname): new method.</div><div class='del'>-</div><div class='del'>-Sat Jun 17 10:30:41 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb (Hash#merge, Enumerable#sort_by): removed.</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb (RSS::RootElementMixin#to_xml): added.</div><div class='del'>-	  [ruby-talk:197284]</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* sample/rss/convert.rb: added a sample script to convert RSS format.</div><div class='del'>-</div><div class='del'>-Sat Jun 17 10:23:22 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/rss/test_*maker*.rb: used new recommended style.</div><div class='del'>-</div><div class='del'>-Sat Jun 17 09:03:47 2006  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss, test/rss: backported from trunk. (2005-11-16 - now)</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/trackback.rb: added TrackBack prefix.</div><div class='del'>-	* lib/rss/maker/trackback.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb : removed needless argument 'prefix'.</div><div class='del'>-	* lib/rss/parser.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/rss/1.0.rb: added rdf:Bag.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* sample/rss/blend.rb: followed new API.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/rss/test_taxonomy.rb: use #reject directory.</div><div class='del'>-</div><div class='del'>-	* lib/rss/: use #__send__ instead of #send.</div><div class='del'>-	* test/rss/: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/xmlscanner.rb: more robust entity handling.</div><div class='del'>-</div><div class='del'>-	* test/rss/test_parser.rb: added an entity handling test.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/image.rb: added Image prefix.</div><div class='del'>-	* lib/rss/maker/image.rb: ditto.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/rss/test_maker_1.0.rb: use assert instead of assert_equal.</div><div class='del'>-</div><div class='del'>-	* test/rss/rss-assertions.rb: improved type conversion assertions.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jun 17 02:01:00 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb (Kernel#pretty_inspect): defined for pretty printed</div><div class='del'>-	  string.</div><div class='del'>-</div><div class='del'>-Sat Jun 17 00:23:58 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (reswords): kDO_BLOCK was missing.  fixed: [ruby-core:7995]</div><div class='del'>-</div><div class='del'>-Sat Jun 17 00:02:15 2006  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ole_propertyput): support</div><div class='del'>-	  PROPERTYPUTREF. [ruby-talk:183042]</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/tests/test_propertyputref.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Jun 15 23:02:47 2006  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/win32ole/tests/test_ole_methods.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/tests/testall.rb : ditto.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 18:23:28 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_any): Documentation typo.</div><div class='del'>-</div><div class='del'>-Wed Jun 14 15:01:09 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 14 23:03:53 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: check sizeof(rlim_t).</div><div class='del'>-	  check setrlimit.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ruby.h (NUM2ULL): new macro.</div><div class='del'>-</div><div class='del'>-Mon Jun 12 22:25:09 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jun 11 23:20:07 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Arguable#getopts): pass self to the</div><div class='del'>-	  parser.</div><div class='del'>-</div><div class='del'>-Sun Jun 11 10:00:57 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h (write): not need to define on bcc.</div><div class='del'>-</div><div class='del'>-Sun Jun 11 08:30:33 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser#getopts): new methods.</div><div class='del'>-</div><div class='del'>-Sat Jun 10 18:02:40 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun  8 14:19:17 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun  7 16:22:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun  7 14:53:04 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (errmap): add some winsock errors.</div><div class='del'>-</div><div class='del'>-Wed Jun  7 11:34:38 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add new configure option `--with-winsock2' for mingw.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Jun  7 10:45:10 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/win32.c (StartSockets): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (open_ifs_socket): new function.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun  7 09:14:44 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Jun  5 18:12:12 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jun  4 20:40:19 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: fix sockaddr_un handling.</div><div class='del'>-	  [ruby-dev:28677]</div><div class='del'>-</div><div class='del'>-Fri Jun  2 22:08:17 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jun  2 19:02:09 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: use create_header.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.h, ext/openssl/openssl_missing.h:</div><div class='del'>-	  include RUBY_EXTCONF_H.</div><div class='del'>-</div><div class='del'>-Fri Jun  2 17:16:52 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (CLEANINGS): remove extconf.h by distclean if created.</div><div class='del'>-</div><div class='del'>-Fri Jun  2 00:11:19 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun  1 19:12:37 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun  1 16:14:41 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun  1 11:29:14 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May 27 11:29:46 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): remove extinit files if no statically linked</div><div class='del'>-	  extensions.</div><div class='del'>-</div><div class='del'>-Fri May 26 09:05:11 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/extmk.rb (extract_makefile, extmk): made RUBY_EXTCONF_H and</div><div class='del'>-	  EXTSTATIC permanent.</div><div class='del'>-</div><div class='del'>-	* ext/{dbm,digest/*,socket,zlib}/extconf.rb: used $defs and $INCFLAGS.</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (COMPILE_C, COMPILE_CXX): added</div><div class='del'>-	  $(INCFLAGS).</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration): add $defs unless extconf.h was created.</div><div class='del'>-</div><div class='del'>-Thu May 25 01:52:07 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (pkg_config): particular config commands support.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: deal with $static set in extconf.rb.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: merge multiple entries to an entry with multiple lines.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: allow a series of commands to link.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: embed manifests.</div><div class='del'>-</div><div class='del'>-	* win32/setup.mak: suffix OS name by runtime version.</div><div class='del'>-</div><div class='del'>-Wed May 24 23:52:11 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (ac_install_sh): ignore dummy install-sh.</div><div class='del'>-	  [ruby-talk:193876]</div><div class='del'>-</div><div class='del'>-Wed May 24 03:10:48 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb</div><div class='del'>-	  (OpenSSL::SSL::SocketForwarder#setsockopt,getsockopt): typo fixed.</div><div class='del'>-</div><div class='del'>-Mon May 22 17:54:12 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon May 22 17:30:04 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* rubyio.h (rb_io_set_nonblock): declared.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	  [ruby-core:7917]</div><div class='del'>-</div><div class='del'>-Mon May 22 15:57:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (umethod_bind): should not update original class.</div><div class='del'>-	  [ruby-dev:28636]</div><div class='del'>-</div><div class='del'>-Mon May 22 13:38:57 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 18 17:51:32 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_timeval): should round for usec floating</div><div class='del'>-	  number.  [ruby-core:07896]</div><div class='del'>-</div><div class='del'>-	* time.c (time_add): ditto.</div><div class='del'>-</div><div class='del'>-Thu May 18 17:11:45 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 18 00:42:12 2006  nobuyoshi nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb, lib/mkmf.rb: use BUILD_FILE_SEPARATOR in Makefiles.</div><div class='del'>-</div><div class='del'>-Wed May 17 17:55:26 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 17 08:17:15 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 16 15:34:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 16 09:20:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* re.c (rb_memcmp): type change from char* to const void*.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_close): should not close untainted dir stream.</div><div class='del'>-</div><div class='del'>-	* dir.c (GetDIR): add tainted/frozen check for each dir operation.</div><div class='del'>-</div><div class='del'>-Mon May 15 17:42:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May 13 16:14:05 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 11 19:57:00 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strtod): differ addition to minimize error.</div><div class='del'>-	  [ruby-dev:28619]</div><div class='del'>-</div><div class='del'>-Fri Aug 11 15:39:25 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/tag.rb: Replace nodoc with stopdoc so Module methods get</div><div class='del'>-	  documented.</div><div class='del'>-</div><div class='del'>-Thu May 11 18:10:43 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May  7 03:09:51 2006  Stephan Maka  &lt;stephan@spaceboyz.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May  6 00:38:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May  4 02:24:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed May  3 02:12:07 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon May  1 12:23:19 2006    &lt;sinara@blade.nagaokaut.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (num_div): use floor rather than rb_Integer().</div><div class='del'>-	  [ruby-dev:28589]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_float.rb: add tests for divmod, div, modulo and remainder.</div><div class='del'>-</div><div class='del'>-Sat Apr 29 22:42:08 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 28 10:53:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* util.c (ruby_strtod): fixed wrong conversion.</div><div class='del'>-</div><div class='del'>-Thu Apr 27 01:38:10 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 26 16:59:24 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Apr 25 18:00:05 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Apr 25 07:55:31 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Apr 25 00:08:24 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 21 15:19:13 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 21 12:14:52 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 19 13:55:27 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): too much NEW_LIST()</div><div class='del'>-</div><div class='del'>-	* eval.c (SETUP_ARGS0): remove unnecessary access to nd_alen.</div><div class='del'>-</div><div class='del'>-Wed Apr 19 11:57:04 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): use ARGSCAT for NODE_OP_ASGN1.</div><div class='del'>-	  [ruby-dev:28585]</div><div class='del'>-</div><div class='del'>-	* parse.y (list_concat): revert last change.</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): use NODE_ARGSCAT for placeholder.</div><div class='del'>-</div><div class='del'>-Wed Apr 19 11:13:17 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 19 10:13:27 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 19 09:49:36 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Apr 18 17:40:37 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add a binding to a container for a slave IP.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: update RELEASE_DATE.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: forget to reset a Tcl interpreter.</div><div class='del'>-</div><div class='del'>-	* ext/tk/stubs.c: fix potential bugs about handling rb_argv0.</div><div class='del'>-</div><div class='del'>-Tue Apr 18 00:11:21 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: block_unique should be 1, not frame_unique.</div><div class='del'>-	  [ruby-dev:28577]</div><div class='del'>-</div><div class='del'>-Fri Aug 11 15:39:25 2006  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr 10 01:03:10 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Apr  8 02:34:34 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Apr  8 02:12:38 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* README.EXT: update symbol description.  [ruby-talk:188104]</div><div class='del'>-</div><div class='del'>-Thu Apr  6 23:28:47 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* COPYING: explicitly note GPLv2.  [ruby-talk:187922]</div><div class='del'>-</div><div class='del'>-Thu Apr  6 11:18:37 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/panedwindow.rb: lack of arguments. [ruby-core:7681]</div><div class='del'>-</div><div class='del'>-Thu Apr  6 01:04:47 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: fix SEGV at exit. [ruby-talk:186489]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: remove warning about redefinition of methods.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: remove warning about unseting Tcl</div><div class='del'>-	  variables.</div><div class='del'>-</div><div class='del'>-Wed Mar 29 20:54:44 2006  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (fole_getproperty): WIN32OLE#[] should accept</div><div class='del'>-	  multi arguments.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/tests/testWIN32OLE.rb (test_setproperty_bracket): ditto.</div><div class='del'>-</div><div class='del'>-Wed Mar 29 10:07:44 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar 29 06:48:40 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar 27 22:19:09 2006  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/nkf/nkf.c (nkf_split_options): added for parse option string.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar 27 03:17:21 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Mar 24 23:14:30 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Mar 24 17:20:03 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 23 10:47:03 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_missing): should support argument splat in</div><div class='del'>-	  super.  [ruby-talk:185438]</div><div class='del'>-</div><div class='del'>-Mon Mar 20 12:05:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar 20 09:40:23 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: remove enable_rpath=no for Solaris.</div><div class='del'>-	  [ruby-dev:28440]</div><div class='del'>-</div><div class='del'>-Fri Mar 17 19:08:49 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar 15 16:54:21 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): support libraries without *.so.</div><div class='del'>-</div><div class='del'>-Wed Mar 15 16:35:43 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar 11 14:24:06 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Mar  4 15:26:40 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (id2ref): fix symbol test.</div><div class='del'>-</div><div class='del'>-Sat Mar  4 01:08:07 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar  2 19:44:18 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar  2 18:58:18 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar  2 17:57:49 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar  2 12:59:14 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar  2 08:02:42 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar  1 00:24:31 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 28 09:32:17 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb 27 00:19:16 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h (SYM2ID): should not cast to signed long.</div><div class='del'>-	  [ruby-core:07414]</div><div class='del'>-</div><div class='del'>-Fri Feb 24 20:07:23 2006  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb 24 12:11:08 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb 24 11:33:52 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (HAVE_HYPOT): bcc32 has hypot().</div><div class='del'>-</div><div class='del'>-Fri Feb 24 11:19:58 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_new_internal): add prototype to tell the compiler</div><div class='del'>-	  arugments types.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (NtInitialize): need to set a handler for VC++8.</div><div class='del'>-</div><div class='del'>-Fri Feb 24 08:19:16 2006  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test.rb: Removed.  Obsolete by test/nkf.</div><div class='del'>-</div><div class='del'>-	* ext/.document: enabled documents in nkf and kconv</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c ext/nkf/lib/kconv.rb: Add rdoc.</div><div class='del'>-</div><div class='del'>-Thu Feb 23 22:39:59 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 23 13:20:28 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (SETUP_ARGS0): fixed memory corruption. [ruby-dev:28360]</div><div class='del'>-</div><div class='del'>-Tue Feb 21 02:18:46 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (mingw): have link.  [ruby-list:41838]</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.h): ditto.</div><div class='del'>-</div><div class='del'>-Tue Feb 21 02:07:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb 20 17:37:26 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: alias RbConfig for Config.</div><div class='del'>-</div><div class='del'>-Mon Feb 20 12:27:53 2006  Kent Sibilev  &lt;ksruby@gmail.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rational.rb (Integer::gcd): small typo fix.</div><div class='del'>-	  [ruby-core:07395]</div><div class='del'>-</div><div class='del'>-Mon Feb 20 01:05:27 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb 20 00:57:02 2006  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.h (OSSL_Debug): should not use __func__.</div><div class='del'>-	  [ruby-dev:28339]</div><div class='del'>-</div><div class='del'>-Sun Feb 19 04:46:29 2006  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: initial value for block_unique must be 1.</div><div class='del'>-	  [ruby-talk:180420]</div><div class='del'>-</div><div class='del'>-Sat Feb 18 23:58:26 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* sample/rtags.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Feb 18 12:18:26 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (FileUtils::fu_world_writable): make it</div><div class='del'>-	  private.  [ruby-core:07383]</div><div class='del'>-</div><div class='del'>-Sat Feb 18 00:22:39 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb 17 11:18:42 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strtod): Float("1e") should fail. [ruby-core:7330]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* pack.c (pack_unpack): fixed integer overflow on template "w".</div><div class='del'>-	  [ruby-talk:180126]</div><div class='del'>-</div><div class='del'>-Fri Feb 17 09:39:29 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 16 01:10:48 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb 15 16:52:52 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* parse.y (arg): avoid unnecessary extra argument.</div><div class='del'>-	  [ruby-core:07366]</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb 15 10:09:51 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb 15 09:20:35 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 14 18:48:33 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (DMETHOD_P): accessing wrong frame.  [ruby-dev:28181]</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): preserve FRAME_DMETH flag.</div><div class='del'>-</div><div class='del'>-Tue Feb 14 15:13:51 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c: supress warning on test/zlib. [ruby-dev:28323]</div><div class='del'>-</div><div class='del'>-Tue Feb 14 14:01:17 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (search_time_t): support non 32bit time_t environments.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.h): VC++8 has ``long long'' type.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (config.h): VC++8's time_t is 64bit value.</div><div class='del'>-</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='del'>-</div><div class='del'>-	  all changes are backported from CVS HEAD.</div><div class='del'>-</div><div class='del'>-Tue Feb 14 11:21:38 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_forward): should not use frame-&gt;argv.</div><div class='del'>-	  [ruby-core:07358]</div><div class='del'>-</div><div class='del'>-Mon Feb 13 18:08:12 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): argument update propagation.  [ruby-dev:28044]</div><div class='del'>-</div><div class='del'>-	* env.h: remove argv member from struct FRAME.</div><div class='del'>-</div><div class='del'>-Mon Feb 13 13:27:00 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): should push class from binding if supplied.</div><div class='del'>-	  [ruby-core:07347]</div><div class='del'>-</div><div class='del'>-Mon Feb 13 00:04:00 2006  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb 11 02:04:11 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): no need to push ruby_class.  [ruby-dev:28176]</div><div class='del'>-</div><div class='del'>-Sat Feb 11 01:57:44 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb  7 23:03:24 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb  6 16:02:51 2006  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb  6 00:41:08 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb  5 21:05:34 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb  5 18:55:08 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: imported from trunk, rev 1.129</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/net/https.rb: imported from trunk, rev 1.3.</div><div class='del'>-</div><div class='del'>-	* lib/net/https.rb: #use_ssl? definition moved from net/http.rb.</div><div class='del'>-</div><div class='del'>-Sun Feb  5 14:22:15 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/pstore.rb: should raise PStore::Error if not in transaction.</div><div class='del'>-</div><div class='del'>-Sat Feb  4 22:51:43 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: apply the FreeBSD getcontext/setcontext workaround</div><div class='del'>-	  only before FreeBSD 7-CURRENT.</div><div class='del'>-</div><div class='del'>-Sat Feb  4 21:19:23 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb  4 15:56:37 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb  3 15:06:50 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb  2 23:51:18 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb  2 16:01:24 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): need not to protect $SAFE value.</div><div class='del'>-	  [ruby-core:07177]</div><div class='del'>-</div><div class='del'>-Thu Feb  2 14:45:53 2006  Ville Mattila  &lt;ville.mattila@stonesoft.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb  1 22:01:47 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Jan 31 14:46:28 2006  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (rb_struct_select): update RDoc description.</div><div class='del'>-	  [ruby-core:7254]</div><div class='del'>-</div><div class='del'>-Tue Jan 31 11:58:51 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add MultiTkIp#eval and bg_eval.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 31 00:10:26 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan 28 07:56:57 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan 25 22:29:04 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jan 22 23:27:13 2006  Go Noguchi  &lt;gonoguti@yahoo.co.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jan 22 22:09:52 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jan 22 20:03:35 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan 21 00:36:47 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan 19 22:21:23 2006  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (mv): should remove file after copying.</div><div class='del'>-	  [ruby-dev:28223]</div><div class='del'>-</div><div class='del'>-Wed Jan 18 23:37:06 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 17 11:32:46 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/setup.mak (MAKE): workaround for nmake 8.</div><div class='del'>-</div><div class='del'>-Tue Jan 17 11:10:21 2006  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/{Makefile.sub,setup.mak}: invoke .bat via shell. workaround</div><div class='del'>-	  for nmake 8.</div><div class='del'>-</div><div class='del'>-Mon Jan 16 10:26:23 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan 14 05:37:06 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan 14 03:43:24 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_chmod): avoid warning where sizeof(int) !=</div><div class='del'>-	  sizeof(void*).</div><div class='del'>-</div><div class='del'>-Fri Jan 13 19:14:56 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	  based on Paul Duncan's patch &lt;pabs@pablotron.org&gt; [ruby-core:7028]</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan 12 11:53:08 2006  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan 11 15:00:00 2006  Ville Mattila  &lt;mulperi@iki.fi&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 10 19:42:33 2006  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 10 13:30:34 2006  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 10 12:47:41 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Jan 10 12:00:48 2006  Aaron Schrab  &lt;aaron @nospam@ schrab.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan  9 19:54:35 2006  arton  &lt;artonx@yahoo.co.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan  9 14:17:12 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan  9 14:17:12 2006  Kero van Gelder  &lt;rubyforge @nospam@ kero.tmfweb.nl&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb: fixed typo. [ruby-core:7075]</div><div class='del'>-</div><div class='del'>-Sat Jan  7 15:40:07 2006  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan  6 10:16:20 2006  Steven Lumos  &lt;steven@lumos.us&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jan  1 17:07:59 2006  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_dir.rb: added.</div><div class='del'>-</div><div class='del'>-Sat Dec 31 22:57:00 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec 30 18:22:42 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (garbage_collect): mark objects refered from aborting threads.</div><div class='del'>-	  [ruby-dev:28190]</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: VC++8 support.</div><div class='del'>-</div><div class='del'>-Fri Dec 30 14:24:53 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): do not use TRUE for djgpp.</div><div class='del'>-</div><div class='del'>-Fri Dec 30 04:54:40 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (eaccess): workaround for VC++8 runtime.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (ioinfo): VC++8 support.</div><div class='del'>-</div><div class='del'>-Thu Dec 29 23:59:37 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Dec 29 17:02:07 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 27 16:59:52 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 27 08:29:18 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 26 22:32:47 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 26 08:50:36 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (ev_const_defined): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec 24 18:58:14 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.8.4 released.</div><div class='del'>-</div><div class='del'>-Fri Dec 23 10:30:23 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 21 16:53:06 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 21 14:53:26 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb (test_kernel_open): use File.identical?.</div><div class='del'>-	  [ruby-talk:171804]</div><div class='del'>-</div><div class='del'>-Tue Dec 20 22:41:17 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Dec 20 13:11:59 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Dec 20 12:53:23 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 20 01:46:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 19 23:32:39 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (rb_symname_p): fixed wrong validation.  [ruby-dev:28047]</div><div class='del'>-</div><div class='del'>-Sat Dec 17 03:57:01 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec 17 03:30:23 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec 16 00:54:06 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (Init_signal): revert C++ style comment.</div><div class='del'>-	  [ruby-dev:28041]</div><div class='del'>-</div><div class='del'>-Thu Dec 15 12:35:14 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 15 01:33:31 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 14 12:11:46 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 14 12:01:26 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 13 12:23:47 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 13 01:44:16 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 13 00:08:09 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_str_format): fix a GC problem.</div><div class='del'>-	  [ruby-dev:28001]</div><div class='del'>-</div><div class='del'>-Mon Dec 12 15:54:56 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 12 00:33:56 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Dec  9 23:31:02 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  8 02:07:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (umethod_bind): adjust invoking class for module method.</div><div class='del'>-	  [ruby-dev:27964]</div><div class='del'>-</div><div class='del'>-Thu Dec  8 00:40:52 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec  7 17:10:27 2005  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): [ruby-dev:27967]</div><div class='del'>-</div><div class='del'>-Wed Dec  7 15:31:35 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_str_format): integer overflow check added.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (GETASTER): ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec  7 01:02:04 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/image3.rb: [bug fix] wrong argument.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/image3.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/menu.rb: fix message for MacOS X.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/menu8x.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/menu.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec  6 16:37:57 2005  Yuya Nishida  &lt;yuya@j96.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (exec_under): avoid accessing ruby_frame-&gt;prev.</div><div class='del'>-	  [ruby-dev:27948]</div><div class='del'>-</div><div class='del'>-Thu Dec  1 00:50:33 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_funcall2): allow to call protected methods.</div><div class='del'>-	  fixed: [ruby-dev:27890]</div><div class='del'>-</div><div class='del'>-Wed Nov 30 23:52:17 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 30 13:43:07 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 28 18:55:43 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 28 13:08:54 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 28 09:21:49 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov 27 00:56:13 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/wsdl/xmlSchema/complexContent.rb: missing</div><div class='del'>-	  ComplexContent#elementformdefault method.</div><div class='del'>-</div><div class='del'>-Sat Nov 26 19:57:45 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dln.c (conv_to_posix_path): should initialize posix.</div><div class='del'>-</div><div class='del'>-Thu Nov 24 21:05:58 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_CHECK_FUNCS): need to check link().</div><div class='del'>-	  fixed: [ruby-dev:27814]</div><div class='del'>-</div><div class='del'>-Thu Nov 24 01:22:25 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 23 20:59:01 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/virtevent.rb: add TkNamedVirtualEvent.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/autoload.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 23 18:55:31 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (w32_io_info): should not call GetFileInformationByHandle</div><div class='del'>-	  for pipe.</div><div class='del'>-</div><div class='del'>-	* file.c (w32_io_info): checks return value from rb_w32_get_osfhandle.</div><div class='del'>-</div><div class='del'>-	* file.c (w32_io_info): now can identify directory on WinNT.</div><div class='del'>-</div><div class='del'>-Wed Nov 23 03:40:49 2005  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 23 11:01:33 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h, file.c: failed to compile on windows.</div><div class='del'>-</div><div class='del'>-Wed Nov 23 07:26:44 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: check for X509V3_EXT_nconf_nid.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/test_x509ext.rb: new file.</div><div class='del'>-</div><div class='del'>-Wed Nov 23 01:22:57 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (test_identical): test if two files are identical.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32.h, win32.c (rb_w32_osid): check the running platform.</div><div class='del'>-</div><div class='del'>-Tue Nov 22 23:52:06 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 22 18:36:11 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (winnt_stat): set mapped errno instead of ENOENT.</div><div class='del'>-</div><div class='del'>-Tue Nov 22 14:46:57 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_basename): skip slashes just after UNC top slashes.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 22 13:18:32 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 22 02:31:53 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 22 01:45:21 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 21 22:50:48 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* parse.y (dsym): prohibit empty symbol literal by interpolation.</div><div class='del'>-	  fixed: [ruby-talk:166529]</div><div class='del'>-</div><div class='del'>-Mon Nov 21 16:03:48 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/setup.mk: findstr doesn't exist on win9x.</div><div class='del'>-	  fixed: [ruby-dev:27756]</div><div class='del'>-</div><div class='del'>-Sun Nov 20 22:34:06 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 19 19:57:54 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (FileUtils::ln): ln documentation fix.</div><div class='del'>-	  [ruby-core:06661]</div><div class='del'>-</div><div class='del'>-Sat Nov 19 07:34:32 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/ICONS/icons.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkextlib/treectrl/demo.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Nov 18 17:57:08 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 18 17:35:09 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: add restriction to manipulate.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix on handling of Tcl's namespaces.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Nov 18 17:26:06 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_path.rb (test_dirname): added tests for above</div><div class='del'>-	  patterns.</div><div class='del'>-</div><div class='del'>-Fri Nov 18 12:18:02 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 16 23:24:17 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (static-ruby): overridable.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/extmk.rb (RUBY, RUBYW): overridable.</div><div class='del'>-</div><div class='del'>-Tue Nov 15 23:46:35 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 15 16:23:26 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fill): previous commit disabled this usage:</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Nov 15 16:04:10 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_array.rb (test_fill): added.</div><div class='del'>-</div><div class='del'>-Tue Nov 15 14:39:16 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 14 23:49:57 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 14 17:36:22 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 11 10:31:44 2005  Zach Dennis  &lt;zdennis@mktec.com&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: Socket Documentation. [ruby-core:6552]</div><div class='del'>-</div><div class='del'>-Fri Nov 11 08:20:56 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (OUTFLAG): keep trailing spaces.  [ruby-dev:27666]</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: substitution refereces added.</div><div class='del'>-</div><div class='del'>-Fri Nov 11 07:44:18 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* file.c (rb_file_s_link): checks HAVE_LINK.</div><div class='del'>-</div><div class='del'>-Tue Nov  8 15:32:27 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov  7 13:43:51 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: reduce warnings.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil/tkutil.c: ditto.</div><div class='del'>-</div><div class='del'>-Mon Nov  7 00:06:58 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: removed :nodoc: to generate Kernel doc. [ruby-core:6324]</div><div class='del'>-</div><div class='del'>-Sun Nov  6 23:39:13 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov  6 21:46:59 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov  6 20:13:27 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov  2 20:25:28 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov  2 20:14:53 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib: merge into ext/tk and remove.</div><div class='del'>-</div><div class='del'>-Wed Nov  2 19:03:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/tkutil.c: use rb_obj_respond_to() instead of rb_respond_to().</div><div class='del'>-</div><div class='del'>-Tue Nov  1 14:20:11 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (exec_under): frame during eval should preserve external</div><div class='del'>-	  information.</div><div class='del'>-</div><div class='del'>-Tue Nov  1 10:50:17 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: should check ERR_peek_last_error().</div><div class='del'>-	  [ruby-dev:27597]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c (ossl_raise): ditto.</div><div class='del'>-</div><div class='del'>-Mon Oct 31 17:34:46 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 31 11:27:22 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 31 05:49:23 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/test_cipher.rb: add test for Cipher#update("").</div><div class='del'>-</div><div class='del'>-Mon Oct 31 05:37:20 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Oct 31 03:19:36 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c (readline_readline): type check.</div><div class='del'>-	  [ruby-core:6089]</div><div class='del'>-</div><div class='del'>-	* numeric.c (fix_rshift): RDoc fix.  [ruby-core:6351]</div><div class='del'>-</div><div class='del'>-	* util.h (strtod): add #undef for platforms defines strtod()</div><div class='del'>-	  macro.   [ruby-dev:27563]</div><div class='del'>-</div><div class='del'>-Mon Oct 31 02:35:59 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct 29 01:58:25 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/fcntl/fcntl.c: ditto.</div><div class='del'>-</div><div class='del'>-Thu Oct 27 16:45:31 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (scan_once): wrong condition to use mbclen2().</div><div class='del'>-	  [ruby-dev:27535]</div><div class='del'>-</div><div class='del'>-Wed Oct 26 09:27:27 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 26 09:04:51 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 26 01:58:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* defines.h, {bcc32,win32,wince}/Makefile.sub (RUBY_EXTERN): moved to</div><div class='del'>-	  configuration pass.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): RUBY_EXTERN for static linked extensions.</div><div class='del'>-</div><div class='del'>-Tue Oct 25 15:32:00 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Oct 25 02:12:08 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 25 00:27:35 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/*: RDoc documentation from Eric Hodel</div><div class='del'>-	  &lt;drbrain@segment7.net&gt; added.</div><div class='del'>-</div><div class='del'>-Mon Oct 24 21:14:29 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 24 20:49:45 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 24 07:57:56 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Oct 23 21:50:15 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Oct 23 07:11:11 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: improve messages [ruby-core:06325].</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*: update to support ActiveTcl8.4.11.2.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/trofs/*: support Trofs 0.4.3.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/*: support Tile 0.7.2.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/vu/*: support vu 2.3.0.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tcllib/*: support Tcllib 1.8 (Tklib 0.3).</div><div class='del'>-</div><div class='del'>-Sat Oct 22 23:54:07 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct 22 13:26:57 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_symbol.rb: tests for [ruby-core:03573].</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 21 19:21:56 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* rubysig.h (CHECK_INTS): fixed typo. (I believe bit-or is improper)</div><div class='del'>-</div><div class='del'>-Fri Oct 21 17:49:32 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bin/erb (ERB::Main::run): typo fixed.  [ruby-core:06337]</div><div class='del'>-</div><div class='del'>-Fri Oct 21 15:27:17 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* time.c: should use LONG_LONG instead of `long long'.</div><div class='del'>-</div><div class='del'>-Thu Oct 20 09:37:15 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 20 07:55:09 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 20 00:13:18 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* rubysig.h (CHECK_INTS): fix typo.</div><div class='del'>-</div><div class='del'>-Wed Oct 19 23:58:03 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 19 19:26:15 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 19 08:28:32 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 19 02:34:33 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c, gc.c, time.c: made internal symbols static.  [ruby-dev:27435]</div><div class='del'>-</div><div class='del'>-Wed Oct 19 01:27:07 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 17 21:18:50 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parser_heap): byacc never free parser stack.</div><div class='del'>-	  fixed: [ruby-dev:27428]</div><div class='del'>-</div><div class='del'>-Mon Oct 17 16:04:47 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (chmod_internal, lchmod_internal): fixed type of 2nd argument.</div><div class='del'>-</div><div class='del'>-Sun Oct 16 22:16:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: omit non-existing directories.</div><div class='del'>-</div><div class='del'>-Sun Oct 16 14:30:05 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb: test it.</div><div class='del'>-</div><div class='del'>-Sun Oct 16 03:38:07 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_thread_schedule): clear rb_thread_critical.</div><div class='del'>-	  [ruby-core:04039]</div><div class='del'>-</div><div class='del'>-Sat Oct 15 19:56:38 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bin/erb: typo fixed, again. thanks, Doug Kearns.</div><div class='del'>-</div><div class='del'>-Fri Oct 14 22:08:26 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (ioctl): should set errno.</div><div class='del'>-</div><div class='del'>-Fri Oct 14 16:57:32 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 13 23:29:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (HEAPCNT): bison allocates indivisible size.</div><div class='del'>-	  fixed: [ruby-core:06261]</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 12 12:52:57 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c (Init_openssl): should call</div><div class='del'>-	  OpenSSL_add_ssl_algorithms().</div><div class='del'>-</div><div class='del'>-Wed Oct 12 11:08:54 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_f_test): typo in RDoc comments.</div><div class='del'>-</div><div class='del'>-Tue Oct 11 21:41:58 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_respond_to): conform to Object#respond_to?.  [ruby-dev:27411]</div><div class='del'>-</div><div class='del'>-Tue Oct 11 00:01:21 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct  8 20:04:40 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Binding): add Binding#dup method.  [yarv-dev:666]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/iconv/charset_alias.rb: parse config.charset_alias file directly.</div><div class='del'>-</div><div class='del'>-Fri Oct  7 09:54:00 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  6 20:12:16 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct  5 04:42:38 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/server.rb (XMLRPC::Server#initialize): should mount the</div><div class='del'>-	  servlet on "/".</div><div class='del'>-</div><div class='del'>-Wed Oct  5 03:59:09 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/server.rb (XMLRPC::Server#serve): delete wrong call</div><div class='del'>-	  of "join".</div><div class='del'>-</div><div class='del'>-Mon Oct  3 00:04:00 2005  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (EXTEND16): [ruby-dev:27383]</div><div class='del'>-</div><div class='del'>-Thu Sep 29 10:26:18 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 29 07:22:05 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 29 00:57:35 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Sep 28 23:42:15 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (apply2files): add prototype.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_stat_inspect): constified.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 28 23:09:23 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 28 15:14:19 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/webrick/httprequest.rb (WEBrick::HTTPRequest#query_string=):</div><div class='del'>-	  add new method.</div><div class='del'>-</div><div class='del'>-Wed Sep 28 10:45:44 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 28 08:12:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (read_buffered_data): check if reached EOF.  fixed: [ruby-dev:27334]</div><div class='del'>-</div><div class='del'>-Wed Sep 28 07:56:52 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/yaml/tag.rb (Module#yaml_as): suppress warnings.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/types.rb (YAML::PrivateType, YAML::DomainType): ditto.</div><div class='del'>-</div><div class='del'>-Wed Sep 28 03:23:35 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 26 22:32:13 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Sep 25 12:05:10 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bin/erb: typo fixed.</div><div class='del'>-</div><div class='del'>-Sun Sep 25 01:46:43 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Sep 25 00:42:11 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Sep 25 00:18:11 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (unknown_node): show more information.  [ruby-dev:26196]</div><div class='del'>-</div><div class='del'>-Sat Sep 24 08:56:01 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Sep 24 08:38:07 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/fileutils/test_nowrite.rb: test it.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_dryrun.rb: new file.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_verbose.rb: new file.</div><div class='del'>-</div><div class='del'>-Sat Sep 24 02:40:20 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 22 23:36:24 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 22 16:33:12 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 21 23:30:44 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration): generalized nmake dependent code.</div><div class='del'>-</div><div class='del'>-Wed Sep 21 09:07:55 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.8.3 released.</div><div class='del'>-</div><div class='del'>-Wed Sep 21 08:52:25 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 21 08:20:24 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* README.EXT, README.EXT.ja: add new features.</div><div class='del'>-</div><div class='del'>-Wed Sep 21 07:43:58 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 21 02:44:09 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* file.c (fpath_check): typo fixed.</div><div class='del'>-</div><div class='del'>-Tue Sep 20 22:29:49 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 20 21:26:23 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 20 18:23:04 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_mark): mark th-&gt;last_status.  [ruby-dev:27179]</div><div class='del'>-</div><div class='del'>-Tue Sep 20 18:20:33 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: require 'yaml/constants'.  [ruby-core:5776]</div><div class='del'>-</div><div class='del'>-Tue Sep 20 17:48:34 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/xmlrpc/server.rb (CGIServer::serve): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/server.rb (ModRubyServer::serve): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/server.rb (WEBrickServlet::service): ditto.</div><div class='del'>-</div><div class='del'>-Tue Sep 20 17:34:46 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 20 17:10:38 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 20 17:08:31 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 20 16:53:53 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 20 15:39:40 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/syck.h: version 0.60.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/basenode.rb (YAML::BaseNode#at): transform keys during</div><div class='del'>-	  key searches.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 20 05:50:22 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 20 00:34:07 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 19 19:09:08 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 19 18:35:13 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 19 14:17:04 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 19 13:44:03 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c: avoid core dump with WIN32OLE_EVENT.</div><div class='del'>-	  [ruby-dev:27133]</div><div class='del'>-</div><div class='del'>-Mon Sep 19 10:36:06 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_cp_r): test it.</div><div class='del'>-</div><div class='del'>-Mon Sep 19 09:57:39 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 19 07:45:37 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_engine.c: (ossl_engine_load_privkey): set private</div><div class='del'>-	  key flag.</div><div class='del'>-</div><div class='del'>-Mon Sep 19 06:41:32 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: backported from trunk (rev 1.65):</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (rm_r): new option :secure.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (rm_rf): new option :secure.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method #remove_entry_secure.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (cd): remove option :noop.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (cp_r): new option :dereference_root.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (cp_r): new option :dereference_root.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method #remove_entry.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method #chmod_R.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method #chown.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method #chown_R.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method .commands.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method .options.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method .have_option?.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method .options_of.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new method .collect_method.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: use module_function instead of single extend.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: backported from trunk (1.36).</div><div class='del'>-</div><div class='del'>-Mon Sep 19 03:17:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Sep 19 03:02:08 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Sep 18 02:10:47 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_reset): emit headless</div><div class='del'>-	  documents always.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/yaml/test_yaml.rb: remove outdated tests.</div><div class='del'>-</div><div class='del'>-Sat Sep 17 23:25:04 2005  sheepman  &lt;sheepman@sheepman.sakura.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mathn.rb (Rational::inspect): should preserve original</div><div class='del'>-	  operand.  [ruby-core:05806]</div><div class='del'>-</div><div class='del'>-Sat Sep 17 23:20:27 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Sep 17 10:42:13 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Sep 17 09:45:26 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Sep 17 08:35:39 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/rss/test_maker_1.0.rb (RSS::TestMaker10#test_items): ditto.</div><div class='del'>-</div><div class='del'>-Fri Sep 16 23:09:20 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/win32ole/win32ole/tests/testOLEEVENT.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Sep 16 22:41:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Sep 16 18:34:01 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep 16 14:48:48 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix typo on MultiTkIp#bg_eval_string</div><div class='del'>-</div><div class='del'>-Fri Sep 16 12:02:12 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep 16 00:14:14 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/logger/test_logger.rb: unintentionally overwritten changes by</div><div class='del'>-	  Usa.  reverted.</div><div class='del'>-</div><div class='del'>-Fri Sep 16 00:06:18 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/cgi.rb (WEBrick::CGI::Socket#initialize): should set</div><div class='del'>-	  $stdout.binmode.</div><div class='del'>-</div><div class='del'>-Thu Sep 15 23:25:21 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.5.</div><div class='del'>-</div><div class='del'>-	  #nnn is a ticket number at http://dev.ctor.org/soap4r</div><div class='del'>-</div><div class='del'>-	  * SOAP</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	    * add iso-8859-1 external CES support. (#106)</div><div class='del'>-</div><div class='del'>-	    * fixed illegal 'qualified' handling of elements.  it caused</div><div class='del'>-	      ASP.NET inteoperability problem. (#144)</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	    * out parameter of rpc operation did not work.  (#132)</div><div class='del'>-</div><div class='del'>-	    * follow HTTP redirect only if using http-access2.  (#125) (#145)</div><div class='del'>-</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='del'>-</div><div class='del'>-	  * WSDL</div><div class='del'>-</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='del'>-</div><div class='del'>-	    * rpc/literal support. (#118)</div><div class='del'>-</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='del'>-</div><div class='del'>-	    * Array of an element which has simpleType causes a crash. (#128)</div><div class='del'>-</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='del'>-</div><div class='del'>-	  * Samples</div><div class='del'>-</div><div class='del'>-	    * added !BasicAuth client sample. (#117)</div><div class='del'>-</div><div class='del'>-	    * added Base64 client/server sample.</div><div class='del'>-</div><div class='del'>-	    * added Flickr SOAP interface client sample. (#122)</div><div class='del'>-</div><div class='del'>-	    * added !SalesForce client sample. (#135)</div><div class='del'>-</div><div class='del'>-	    * updated Thawte CA certificate for !GoogleAdWords sample.</div><div class='del'>-</div><div class='del'>-	    * updated a client script with the newer version made by Johan.</div><div class='del'>-	      thanks!</div><div class='del'>-</div><div class='del'>-	    * shortened long file names. (#120)</div><div class='del'>-</div><div class='del'>-	    * fixed typo in authheader sample. (#129)</div><div class='del'>-</div><div class='del'>-	    * updated deprecated method usage.  (#138)</div><div class='del'>-</div><div class='del'>-Thu Sep 15 23:02:57 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h (rb_w32_stat): added prototype.</div><div class='del'>-</div><div class='del'>-Thu Sep 15 22:35:55 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 15 11:39:18 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 15 01:39:19 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 15 00:18:24 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 14 22:40:26 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (ruby_glob): glob function not using ruby exception system.</div><div class='del'>-</div><div class='del'>-Wed Sep 14 01:26:03 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/lib/net/https.rb: removed.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/net/protocols.rb: removed.</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: #use_ssl?, #use_ssl are moved from net/https.</div><div class='del'>-</div><div class='del'>-Tue Sep 13 22:09:40 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/logger.rb (Logger): added VERSION constant.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/logger/test_logger.rb: added tests.</div><div class='del'>-</div><div class='del'>-Tue Sep 13 21:47:17 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (BEGIN_CALLARGS): pop halfly pushed status.</div><div class='del'>-	  fixed: [ruby-dev:26881]</div><div class='del'>-</div><div class='del'>-Tue Sep 13 16:26:45 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/net/protocol.rb: backported from trunk, rev 1.78.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/net/smtp.rb: use #old_open.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Sep 13 12:33:05 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: reworking YAML::Stream to use the new</div><div class='del'>-	  emitter.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/stream.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: added Object#yaml_new.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/implicit.re: were 'y' and 'n' seriously omitted??</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/gram.c: headless documents of any kind allowed.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/syck.h: reflect block_styles and new node functions.</div><div class='del'>-</div><div class='del'>-Mon Sep 12 20:53:06 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 12 14:03:33 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 12 10:45:58 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Sep 11 22:05:51 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Sep 10 10:17:03 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Sep 10 10:09:47 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.c (asn1str_to_str): new function.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/test_pkcs7.rb: new file.</div><div class='del'>-</div><div class='del'>-Sat Sep 10 10:05:51 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_ns_pki.c (ossl_spki_to_der): new method.</div><div class='del'>-</div><div class='del'>-	* test/openssl/test_ns_spki.rb: add new file.</div><div class='del'>-</div><div class='del'>-Sat Sep 10 09:56:24 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/test_digest.rb: add test for new digests.</div><div class='del'>-</div><div class='del'>-Sat Sep 10 09:51:30 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl.c (ossl_get_errors): new method for debugging</div><div class='del'>-	  this library.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_set_ciphers): fix error message.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/test_x509store.rb: add test for errors.</div><div class='del'>-</div><div class='del'>-Fri Sep  9 22:13:19 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): prohibit calling tainted method (&gt;2) when</div><div class='del'>-	  $SAFE == 0.</div><div class='del'>-</div><div class='del'>-Fri Sep  9 16:45:25 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Sep  8 14:58:11 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep  7 12:55:08 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep  7 10:45:15 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_thread_terminated): show backtrace before propagate</div><div class='del'>-	  exceptions to main thread.</div><div class='del'>-</div><div class='del'>-Wed Sep  7 08:35:04 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* missing/vsnprintf.c: ANSI compiler supports const keyword.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb (what_type?): guesstimate type.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep  7 08:32:47 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Sep  5 17:03:07 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  5 07:01:12 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep  2 23:51:54 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib: do not use __send__ to access private methods.  [ruby-dev:26935]</div><div class='del'>-</div><div class='del'>-Fri Sep  2 03:29:00 2005  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Sep  1 17:11:25 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): wrong condition for $SAFE restoration.</div><div class='del'>-</div><div class='del'>-Thu Sep  1 14:12:45 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Aug 31 14:43:15 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 31 11:35:43 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/gdbm/test_gdbm.rb (teardown): should remove GDBM temporary</div><div class='del'>-	  file.</div><div class='del'>-</div><div class='del'>-Wed Aug 31 10:30:56 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 30 23:20:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_rescue2): initialization miss.  fixed: [ruby-dev:26917]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (xsystem, xpopen): no longer expand by Config.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb (libpathflag): quote paths.</div><div class='del'>-</div><div class='del'>-Tue Aug 30 19:34:27 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug 29 19:54:21 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/usage.rb: improper exceptions. [ruby-dev:26870]</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug 29 17:48:17 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_arity): should return proper arity value.</div><div class='del'>-	  [ruby-dev:26390]</div><div class='del'>-</div><div class='del'>-Mon Aug 29 01:19:57 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 27 20:20:01 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c ({curses,window}_clrtoeol): added. suggested</div><div class='del'>-	  by Reyn Vlietstra.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/curses/view.rb: String =~ String is deprecated.</div><div class='del'>-</div><div class='del'>-Wed Aug 24 10:53:28 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-	  file.</div><div class='del'>-</div><div class='del'>-Sun Aug 21 00:13:27 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 20 22:37:13 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/logger/test_logger.rb: tests.</div><div class='del'>-</div><div class='del'>-Fri Aug 19 18:13:39 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Aug 18 12:46:28 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/win32.h: include winsock2.h instead of winsock.h. (bcc32)</div><div class='del'>-</div><div class='del'>-Wed Aug 17 23:58:05 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_to_integer): argument constified.</div><div class='del'>-</div><div class='del'>-	* eval.c (terminate_process): take String message.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 17 00:05:46 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_call0): restore preserved safe level in the method</div><div class='del'>-	  execution.</div><div class='del'>-</div><div class='del'>-Mon Aug 15 00:38:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* range.c (range_check, range_init): reduce useless exceptions.</div><div class='del'>-</div><div class='del'>-Sat Aug 13 18:51:26 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Aug 11 23:29:03 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c: keep holding string after closed.</div><div class='del'>-</div><div class='del'>-Thu Aug 11 13:01:48 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss: fixed sort bug. [ruby-list:41018]</div><div class='del'>-</div><div class='del'>-	* lib/rss/1.0.rb (RSS::RDF::Channel#setup_maker_attributes):</div><div class='del'>-	  removed self.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Aug 10 10:29:40 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: fix bug on handling __ruby2val_optkeys().</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: fix bug on handling</div><div class='del'>-	  __item_ruby2val_optkeys().</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: didn't check __item_ruby2val_optkeys().</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt/component.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Aug  9 15:12:04 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: remove dangerous 'rb_jump_tag's.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/composite.rb: clarify the arguments of super().</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/validation.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*: support to treat tkvariable-type</div><div class='del'>-	  configure options.</div><div class='del'>-</div><div class='del'>-Tue Aug  9 20:30:19 2005  Tadashi Saito  &lt;shiba@mail2.accsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_coerce): allow bignum x bignum coercing.</div><div class='del'>-	  [ruby-dev:26778]</div><div class='del'>-</div><div class='del'>-Mon Aug  8 20:43:02 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_method.rb: added.  [ruby-dev:26761]</div><div class='del'>-</div><div class='del'>-Sun Aug  7 23:50:14 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_super.rb: added from HEAD. [ruby-dev:26743]</div><div class='del'>-</div><div class='del'>-Sun Aug  7 01:31:15 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/win32ole/tests/testOLEEVENT.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/tests/testOLEPARAM.rb: remove re-defined</div><div class='del'>-	  test_ole_type_detail method.</div><div class='del'>-</div><div class='del'>-Sat Aug  6 12:35:24 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/{label,radiobutton}.rb: removed its own</div><div class='del'>-	  {variable,textvariable} function.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: retains backward conpatibility.</div><div class='del'>-</div><div class='del'>-Fri Aug  5 12:50:32 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Aug  5 12:42:57 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Aug  5 00:27:04 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Aug  5 00:19:33 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* extmk.rb (extmake): needs to be wrapped in an Array.</div><div class='del'>-</div><div class='del'>-Thu Aug  4 18:38:36 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: cannot compile for Tcl7.6/Tk4.2.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add nativethread consistency check.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/stubs.c: ditto.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/root.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/toplevel.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/SUPPRT_STATUS: update RELEASE_DATE</div><div class='del'>-</div><div class='del'>-Thu Aug  4 08:03:39 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): should not modify $mflags for each</div><div class='del'>-	  extentions.</div><div class='del'>-</div><div class='del'>-Thu Aug  4 00:25:48 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk, Makefile.in, {bcc32,win32,wince}/Makefile.sub: integrated</div><div class='del'>-	  macro definitions.</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: LIBRUBY_SO should use DLDOBJS, not EXTOBJS.</div><div class='del'>-</div><div class='del'>-	* {win32,wince}/Makefile.sub: separate config.h for compiler versions.</div><div class='del'>-</div><div class='del'>-Wed Aug  3 21:59:16 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug  3 08:22:13 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug  2 10:20:54 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: replaced Tcl_Panic with rb_bug.</div><div class='del'>-</div><div class='del'>-Tue Aug  2 01:41:28 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ping.rb (Ping.pingecho): should rescue StandardError.</div><div class='del'>-	  [ruby-dev:26677]</div><div class='del'>-</div><div class='del'>-Mon Aug  1 19:09:41 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug  1 18:45:07 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug  1 13:57:35 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (deleted_ip): refactoring - interpreter</div><div class='del'>-	  deletion check. [ruby-dev:26664]</div><div class='del'>-</div><div class='del'>-Mon Aug  1 01:17:40 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/drb/drbtest.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/drb/ut_drb.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Aug  1 00:07:32 2005  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/context.rb: fix `irb --readline` option. [ruby-list:40955]</div><div class='del'>-</div><div class='del'>-Fri Jul 29 09:59:38 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 28 18:09:55 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: Show friendly error messages for errors</div><div class='del'>-	  on initialization.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/tkutil.c (ary2list, ary2list2): bug fix on handling of</div><div class='del'>-	  encoding.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Jul 27 23:23:54 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 27 22:11:37 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 27 10:59:02 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_each): rewinddir(3) before iteration.</div><div class='del'>-	  [ruby-talk:149628]</div><div class='del'>-</div><div class='del'>-Tue Jul 26 12:57:49 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 25 21:30:46 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub: moved CPPFLAGS only for ruby</div><div class='del'>-	  source to XCFLAGS.</div><div class='del'>-</div><div class='del'>-Mon Jul 25 13:45:18 2005  NAJIMA Hiroki  &lt;najima@mickey.ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 25 14:10:02 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix en-bugged part in the last commit.</div><div class='del'>-</div><div class='del'>-Sat Jul 23 16:49:04 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 22 21:06:08 2005  Tadashi Saito  &lt;shiba@mail2.accsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_eq): reduce isnan().  [ruby-dev:26600]</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le): ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul 22 15:02:39 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: moved copyright description to lib/rss.rb.</div><div class='del'>-</div><div class='del'>-	* lib/rss.rb: added for convenience.</div><div class='del'>-</div><div class='del'>-	* sample/rss/re_read.rb: added #to_s sample.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* sample/rss/tdiary-plugin/rss-recent.rb: 0.0.6 -&gt; 0.0.7.</div><div class='del'>-</div><div class='del'>-Fri Jul 22 14:37:43 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/rss/test_parser.rb (RSS::TestParser#test_parse): test</div><div class='del'>-	  for the above.</div><div class='del'>-</div><div class='del'>-Fri Jul 22 07:01:42 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: RemoteTkIp doesn't need to include TkUtil.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add TclTkIp#has_mainwindow? method.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.has_mainwindow? method.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add MultiTkIp#has_mainwindow? method.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: add RemoteTkIp#has_mainwindow? method.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: slave IP fail to exit itself when $SAFE==4.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Jul 20 19:20:37 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (S_ISREG): need to define S_ISREG before it is used first.</div><div class='del'>-</div><div class='del'>-Wed Jul 20 18:40:50 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 20 18:07:11 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 20 10:04:51 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 20 04:01:55 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: sorry, BeOS also uses HAVE_CLOSESOCKET,</div><div class='del'>-	  so reverted.</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: should not define HAVE_CLOSESOCKET</div><div class='del'>-	  on windows.</div><div class='del'>-</div><div class='del'>-Wed Jul 20 03:16:43 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 20 00:48:16 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 19 22:47:29 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 19 16:39:46 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 19 14:08:22 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: rbtk_eventloop_depth is used as int.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Jul 19 13:19:46 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 18 21:40:20 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 18 14:32:21 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 18 12:23:27 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/io/wait/wait.c: wrong backport from trunk.  fixed: [ruby-dev:26562]</div><div class='del'>-</div><div class='del'>-Mon Jul 18 09:36:25 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* rubyio.h (FMODE_WSPLIT, FMODE_WSPLIT_INITIALIZED): new constant.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul 17 13:46:54 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/io/wait/extconf.rb, ext/io/wait/wait.c: Win32 platforms support.</div><div class='del'>-</div><div class='del'>-Fri Jul 15 23:59:03 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb (find_body): allow macros as methods.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 15 18:00:01 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 15 07:58:56 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/webrick/utils.rb (WEBrick::Utils.set_non_blocking): new method.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 14 18:27:16 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jul 14 00:45:42 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* LEGAL (ext/nkf/nkf-utf8): updated from nkf1.7 to nkf-utf8.</div><div class='del'>-</div><div class='del'>-Wed Jul 13 19:37:47 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Jul 13 12:40:00 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: TclTkLib.do_one_event doesn't work.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: Tk.thread_update is available.</div><div class='del'>-</div><div class='del'>-Tue Jul 12 23:32:11 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: keep curdir unexpanded.</div><div class='del'>-</div><div class='del'>-Mon Jul 11 08:31:29 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul 11 02:53:00 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul 10 23:58:04 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul 11 05:18:17 2005  Michael Neumann  &lt;mneumann@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul 10 12:47:01 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul  9 21:28:46 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ole_invoke2): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/test/testWIN32OLE.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/test/testOLEMETHOD.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Jul  8 15:45:04 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb (RSS::VERSION): 0.1.4 -&gt; 0.1.5.</div><div class='del'>-</div><div class='del'>-	* test/rss/test_version.rb (RSS::TestVersion#test_version):</div><div class='del'>-	  ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/rss/test_parser.rb (RSS::TestParser#test_category20):</div><div class='del'>-	  adjusted test case.</div><div class='del'>-</div><div class='del'>-Tue Jul  5 23:44:06 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* instruby.rb: expand source library path.</div><div class='del'>-</div><div class='del'>-Tue Jul  5 23:27:14 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Jul  5 15:15:10 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c: fix typo.</div><div class='del'>-</div><div class='del'>-Tue Jul  5 14:51:35 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: bug fix on treating Unicode strings.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add methods to treat encoding mode.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/MANUAL.euc: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: 2nd arg of _{to|from}UTF8 is omissible.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/optiondb.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/validation.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul  4 14:35:52 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul  4 13:25:21 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jul  4 11:15:37 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul  3 23:26:30 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul  2 22:41:04 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul  2 17:06:23 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (flush_register_windows): new function.</div><div class='del'>-</div><div class='del'>-Fri Jul  1 17:48:52 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul  1 15:50:12 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing/erf.c: need to include some headers for some platforms.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul  1 15:37:42 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* missing/erf.c: ditto.  code from &lt;exp.c&gt; merged.</div><div class='del'>-</div><div class='del'>-Fri Jul  1 12:44:56 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb (OpenURI.open_http): refine post_connection_check</div><div class='del'>-	  call.</div><div class='del'>-</div><div class='del'>-Fri Jul  1 11:34:08 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing/crypt.c: replaced with 4.4BSD version.</div><div class='del'>-</div><div class='del'>-	* missing/erf.c: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul  1 01:45:21 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul  1 00:18:40 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 30 19:00:21 2005  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 30 17:28:10 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 30 15:13:16 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 30 09:53:56 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 28 21:59:29 2005  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jun 25 17:15:23 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jun 25 23:30:51 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jun 25 15:49:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_min, enum_max): do not ignore nil as the first element.</div><div class='del'>-</div><div class='del'>-Sat Jun 25 14:40:17 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jun 25 05:06:47 2005  Michael Neumann  &lt;mneumann@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/*, test/xmlrpc/*: backported changes from HEAD into 1.8</div><div class='del'>-</div><div class='del'>-Fri Jun 24 17:00:00 2005  Shigeo Kobayashi  &lt;shigeo@tinyforest.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jun 24 13:06:45 2005  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jun 24 12:23:19 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: fix typo on Tk.grid_propagate.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jun 23 23:55:59 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* runruby.rb: should load built rbconfig.rb.</div><div class='del'>-</div><div class='del'>-Thu Jun 23 16:53:15 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Jun 20 18:44:04 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jun 20 16:48:36 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_closed): new method DBM#closed?</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c (fgdbm_closed): new method GDBM#closed?</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (fsdbm_closed): new method SDBM#closed?</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Jun 20 02:15:35 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jun 20 01:26:49 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jun 19 14:09:07 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (run_final): reduce unnecessary object allocation during</div><div class='del'>-	  finalization.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jun 17 13:01:40 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 16 15:06:55 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_rb_threadVwaitCommand): Tcl_Release</div><div class='del'>-	  was missing.</div><div class='del'>-</div><div class='del'>-Thu Jun 16 13:34:48 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 16 12:53:24 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 16 08:29:22 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 15 18:26:39 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: support "tk inactive" sub-command [for Tcl/Tk8.5a3]</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 14 02:02:43 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/event.rb: use _define_attribute_aliases().</div><div class='del'>-</div><div class='del'>-Mon Jun 13 13:01:05 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (ruby_setenv): fixed SEGV. [ruby-dev:26186]</div><div class='del'>-</div><div class='del'>-Mon Jun 13 01:54:20 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_thread_switch): exit status should be retrieved from</div><div class='del'>-	  ruby_errinfo.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_exit): ensure exit(0) should call</div><div class='del'>-	  exit(EXIT_SUCCESS).</div><div class='del'>-</div><div class='del'>-Mon Jun 13 01:20:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jun 10 23:35:34 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing/mkdir.c: remove. [ruby-core:05177]</div><div class='del'>-</div><div class='del'>-Fri Jun 10 22:54:26 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing.h: fd_set stuffs need sys/types.h.  fixed: [ruby-core:05179]</div><div class='del'>-</div><div class='del'>-Thu Jun  9 23:58:12 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/Win32API/Win32API.c (Win32API_Call): disable global</div><div class='del'>-	  optimization. fixed: [ruby-core:05143]</div><div class='del'>-</div><div class='del'>-Thu Jun  9 23:35:22 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun  9 19:55:41 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* gc.c (Init_stack): remove IA64_MAGIC_STACK_LIMIT.</div><div class='del'>-</div><div class='del'>-Thu Jun  9 11:55:34 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (SimpleDelegator::__setobj__): need check for</div><div class='del'>-	  recursive delegation.  [ruby-core:04940]</div><div class='del'>-</div><div class='del'>-Wed Jun  8 18:47:10 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el (ruby-expr-beg): fix looking point drift.</div><div class='del'>-</div><div class='del'>-Wed Jun  8 11:11:34 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun  8 08:33:10 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_need_block): ensure a block is given.</div><div class='del'>-</div><div class='del'>-	* eval.c (backtrace): skip successive frames sharing same node.</div><div class='del'>-</div><div class='del'>-Wed Jun  8 00:15:08 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun  8 00:09:01 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb (Hash::to_yaml): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jun  8 00:00:01 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun  7 19:34:15 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun  7 18:39:31 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun  7 18:30:04 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun  7 17:39:54 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* object.c (rb_mod_cvar_set): Module#class_variable_set().</div><div class='del'>-	  [ruby-talk:144741]</div><div class='del'>-</div><div class='del'>-Tue Jun  7 16:32:53 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun  7 10:30:49 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jun  5 23:00:35 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/console.rb: create console when required</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkextlib/tile/demo.rb: fix TypeError &amp; create Console</div><div class='del'>-</div><div class='del'>-Sat Jun  4 14:55:18 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/dbm/test_dbm.rb: merged from ext/dbm/testdbm.rb.</div><div class='del'>-</div><div class='del'>-	* test/gdbm/test_gdbm.rb: merged from ext/gdbm/testgdbm.rb.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jun  3 14:06:12 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix typo.</div><div class='del'>-</div><div class='del'>-Wed Jun  1 11:32:42 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: can use single quote character in DESTDIR.</div><div class='del'>-	  [ruby-dev:26205]</div><div class='del'>-</div><div class='del'>-Mon May 30 23:48:29 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/msgcat.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/winpkg.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*: ditto.</div><div class='del'>-</div><div class='del'>-Sat May 28 16:40:15 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May 28 05:15:51 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May 28 02:00:11 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May 27 16:32:04 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 26 06:08:11 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add shortcut-methods of tk_call + tk_split_list</div><div class='del'>-</div><div class='del'>-Wed May 25 22:52:42 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 25 21:55:40 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: supported libedit. (backported from HEAD)</div><div class='del'>-</div><div class='del'>-	* ext/readline/extconf.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/readline/test_readline.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed May 25 20:06:27 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: modify to attend encoding.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/listbox.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/panedwindow.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/textmark.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/winfo.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: ditto.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed May 25 12:59:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 24 23:42:16 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 24 16:57:24 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 24 11:56:25 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/getopts.rb: should warn only if verbose mode.</div><div class='del'>-	  fixed: [ruby-dev:26201]</div><div class='del'>-</div><div class='del'>-Tue May 24 06:45:31 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 24 00:34:32 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon May 23 16:24:05 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: Framework support on MacOS X Tiger.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/README.1st: add description of Framework support options.</div><div class='del'>-</div><div class='del'>-Mon May 23 12:21:37 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May 22 21:54:06 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.4.</div><div class='del'>-</div><div class='del'>-	  == SOAP client and server ==</div><div class='del'>-</div><div class='del'>-	  === for both client side and server side ===</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	  === client side ===</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	  === server side ===</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	  * allow to return a SOAPFault object to respond customized SOAP fault.</div><div class='del'>-</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='del'>-</div><div class='del'>-	  == WSDL ==</div><div class='del'>-</div><div class='del'>-	  === WSDL definition ===</div><div class='del'>-</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='del'>-</div><div class='del'>-	  * reduced "unknown element/attribute" warnings (warn only 1 time for</div><div class='del'>-	    each QName).</div><div class='del'>-</div><div class='del'>-	  * importing XSD file at schemaLocation with xsd:import.</div><div class='del'>-</div><div class='del'>-	  === code generation from WSDL ===</div><div class='del'>-</div><div class='del'>-	  * generator crashed when there's '-' in defined element/attribute</div><div class='del'>-	    name.</div><div class='del'>-</div><div class='del'>-	  * added ApacheMap WSDL definition.</div><div class='del'>-</div><div class='del'>-	* sample/{soap,wsdl}: removed.</div><div class='del'>-</div><div class='del'>-Sun May 22 19:11:35 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_setup): add session id support.</div><div class='del'>-</div><div class='del'>-Sat May 21 10:24:21 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 19 19:04:29 2005  speakillof  &lt;speakillof@yahoo.co.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 18 23:42:25 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 18 23:39:09 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): get rid of using String.  [ruby-dev:26180]</div><div class='del'>-</div><div class='del'>-	* dir.c (push_braces): should skip balanced braces.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 17 15:31:31 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 17 11:52:18 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon May 16 22:28:43 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon May 16 08:52:29 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.{h,c}: define rb_[pgu]id_t.</div><div class='del'>-</div><div class='del'>-Mon May 16 00:21:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May 15 22:11:33 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb (DRbObject#method_missing): use raise(exception).</div><div class='del'>-	  [ruby-dev:26164]</div><div class='del'>-</div><div class='del'>-Sun May 15 18:56:35 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May 15 14:35:46 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May 15 09:57:30 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (unixtime_to_filetime): deal with DST.</div><div class='del'>-	  [ruby-talk:141817]</div><div class='del'>-</div><div class='del'>-Sat May 14 23:59:11 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May 14 23:57:26 2005  Erik Huelsmann  &lt;ehuels@gmail.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* defines.h: Remove pid_t typedef.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/pty/pty.c: Change pid_t to rb_pid_t.</div><div class='del'>-</div><div class='del'>-	* vms/config.h: Define HAVE_{P,G,U}ID_T to 1.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: Remove #define for {g,u}id_t.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: Change pid_t to rb_pid_t.</div><div class='del'>-</div><div class='del'>-	* wince/Makefile.sub: Remove #define for {g,u}id_t.</div><div class='del'>-</div><div class='del'>-	* wince/sys/types.h: Remove definitions of {p,g,u}id_t.</div><div class='del'>-</div><div class='del'>-Fri May 13 23:44:22 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: keep srcdir unexpanded.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri May 13 17:54:39 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May 13 12:28:43 2005  Daniel Berger  &lt;djberge@qwest.com&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_select): can remove argc check. [ruby-core:4911]</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_array.rb: add test for find_all.</div><div class='del'>-</div><div class='del'>-Fri May 13 11:29:00 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (unknown_node): add volatile directive to prototype.</div><div class='del'>-</div><div class='del'>-Thu May 12 17:08:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu May 12 16:52:20 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 12 16:31:00 2005  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: follow nkf 2.0.5</div><div class='del'>-</div><div class='del'>-Thu May 12 16:15:01 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 12 15:56:20 2005  Tilman Sauerbeck  &lt;tilman@code-monkey.de&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 12 13:47:56 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 12 09:53:57 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* version.c (ruby_show_version): flush for non-tty stdout.</div><div class='del'>-</div><div class='del'>-Thu May 12 09:07:07 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 12 01:23:55 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed May 11 16:20:01 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed May 11 15:58:39 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (break_jump): break should not cross functions.</div><div class='del'>-	  [ruby-list:40818]</div><div class='del'>-</div><div class='del'>-Wed May 11 10:39:37 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tempfile.rb (Tempfile#unlink): fixed typo.</div><div class='del'>-</div><div class='del'>-Wed May 11 01:03:36 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May  8 23:17:47 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: fix typo.</div><div class='del'>-</div><div class='del'>-Sun May  8 16:52:56 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May  7 22:58:00 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_var): no libs argument is given.</div><div class='del'>-</div><div class='del'>-Sun May  1 09:58:11 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (process_sflag): replace '-' in variable names with '_'.</div><div class='del'>-	  [ruby-dev:26107]</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 27 23:42:22 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (OPTFLAGS): default global optimization to</div><div class='del'>-	  disabled only for VC++6.</div><div class='del'>-</div><div class='del'>-Tue Apr 26 22:58:00 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr 25 01:18:43 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c: declare rb_warn to have variadic argument.  [ruby-core:4751]</div><div class='del'>-</div><div class='del'>-Sat Apr 23 19:45:59 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 22 16:41:50 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_set_exc_message): fixed memory leak.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: eTkCallbackReturn was not initialized.</div><div class='del'>-</div><div class='del'>-Thu Apr 21 00:07:50 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): support platforms have file separator</div><div class='del'>-	  other than /.</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (BUILD_FILE_SEPARATOR): separator</div><div class='del'>-	  of building platform.</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (CP, INSTALL): use COPY command.</div><div class='del'>-</div><div class='del'>-Wed Apr 20 23:22:39 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in, common.mk: miniruby depens on MINIOBJS.</div><div class='del'>-</div><div class='del'>-	* dmydln.c (dln_load): dummy function to raise LoadError.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 20 23:01:35 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/ifchange.bat: delete testing files.</div><div class='del'>-</div><div class='del'>-Wed Apr 20 07:27:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/configure.bat, {bcc32,win32,wince}/setup.mak:</div><div class='del'>-	  add extout option.</div><div class='del'>-</div><div class='del'>-	* bcc32/setup.mak: make configuration variables overridable.</div><div class='del'>-</div><div class='del'>-Wed Apr 20 04:15:27 2005  Keiju Ishitsuka  &lt;keiju@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb.rb lib/irb/* doc/irb: IRB 0.9.5</div><div class='del'>-</div><div class='del'>-Tue Apr 19 23:37:09 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (File.safe_unlink): do not modify a symlinked file.</div><div class='del'>-</div><div class='del'>-Tue Apr 19 00:06:20 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: expand path for ext/**/extconf.rb.</div><div class='del'>-</div><div class='del'>-Mon Apr 18 11:25:14 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c (zstream_run): fixed SEGV. [ruby-core:4712]</div><div class='del'>-</div><div class='del'>-Sun Apr 17 23:57:49 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake, parse_args): do not expand destdir.</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (relative_from): treat mere drive letter as an absolute</div><div class='del'>-	  path.</div><div class='del'>-</div><div class='del'>-Sat Apr 16 17:01:16 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Apr 16 15:27:03 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* mkconfig.rb: purge autoconf value variables.</div><div class='del'>-</div><div class='del'>-Sat Apr 16 10:36:01 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: quick hack... prepend DESTDIR.</div><div class='del'>-	  still have restriction on DESTDIR ("", "/", "e:")</div><div class='del'>-</div><div class='del'>-Sat Apr 16 03:59:42 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: check for OPENSSL_cleanse.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/openssl_missing.h: ditto.</div><div class='del'>-</div><div class='del'>-Thu Apr 14 19:18:30 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (remove_file): ignore exceptions caused by</div><div class='del'>-	  chmod.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Apr 14 16:57:40 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: failed to remove debug information files.</div><div class='del'>-	  fixed: [ruby-dev:26034]</div><div class='del'>-</div><div class='del'>-Wed Apr 13 23:40:21 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb (RSS::VERSION): 0.1.3 -&gt; 0.1.4.</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb (RSS::Element#converter): fixed converter</div><div class='del'>-	  transmission bug.</div><div class='del'>-</div><div class='del'>-Wed Apr 13 21:20:35 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (mingw32): extract msvcr*.dll from objdump result.</div><div class='del'>-</div><div class='del'>-Wed Apr 13 20:24:30 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/Makefile.sub, win32/setup.mak: ditto.</div><div class='del'>-</div><div class='del'>-Tue Apr 12 15:33:09 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Apr 12 12:38:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Apr 12 02:21:55 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr 11 23:47:21 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/drb/test_drb.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Apr 11 22:18:23 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c, file.c (lstat): avoid warnings for mingw.</div><div class='del'>-</div><div class='del'>-Mon Apr 11 20:11:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr 11 15:26:25 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration): shouldn't output hdrdir twice.</div><div class='del'>-</div><div class='del'>-Mon Apr 11 12:09:05 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: defaulted install-nodoc. [ruby-dev:26011]</div><div class='del'>-</div><div class='del'>-Sun Apr 10 10:12:42 2005  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c(ole_invoke): retry after converting Qnil</div><div class='del'>-	  to VT_EMPTY.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole/tests/testWIN32OLE.rb: correct error</div><div class='del'>-	  message string "Unknown" =&gt; "unknown".</div><div class='del'>-</div><div class='del'>-Sat Apr  9 18:20:31 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menu.rb: use TkCommandNames on create_self()</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/root.rb: TkRoot.to_eval() returns '.'.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/: add demo and update support status.</div><div class='del'>-</div><div class='del'>-Sat Apr  9 14:42:29 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb: supported configuration</div><div class='del'>-	  via Web browser.</div><div class='del'>-</div><div class='del'>-Sat Apr  9 11:59:57 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss: backoported from HEAD.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/parser.rb: @@setter -&gt; @@setters.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/maker/image.rb: supproted new Dublin Core API.</div><div class='del'>-</div><div class='del'>-	* lib/rss/maker/base.rb: added default current_element implementation.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/rss/rss.rb (Hash#merge): added for ruby 1.6.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/test_setup_maker_1.0.rb: fixed swapped actual and expected</div><div class='del'>-	  values.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Apr  8 20:17:48 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): hdrdir needs to be defined also in</div><div class='del'>-	  Config::CONFIG.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration, create_makefile): get rid of recursive</div><div class='del'>-	  macro reference.</div><div class='del'>-</div><div class='del'>-Fri Apr  8 18:26:56 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey_dh.c: add default DH parameters.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey.h: ditto.</div><div class='del'>-</div><div class='del'>-Fri Apr  8 01:55:20 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Apr  7 23:58:40 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): keep directory names in Makefile as macros.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration, create_makefile): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (CXX_EXT): separate C++ extensions.</div><div class='del'>-</div><div class='del'>-Thu Apr  7 17:43:25 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr  4 23:17:52 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Apr  4 10:26:48 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: fixed typo.</div><div class='del'>-</div><div class='del'>-Sun Apr  3 17:16:33 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Apr  2 23:38:54 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (CP, INSTALL): get rid of less portable options.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration, create_makefile): correct configuration</div><div class='del'>-	  variable.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Apr  2 16:59:46 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: forgot to update RELEASE_DATE</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: fix namespace trouble when autoloading</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/palette.rb: define Tcl variable 'tkPalette' as global</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/autoload.rb: add autoload entry 'TkDialogObj' and</div><div class='del'>-	  'TkWarningObj'</div><div class='del'>-</div><div class='del'>-Sat Apr  2 02:19:11 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Mar 31 22:23:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* README.EXT, README.EXT.ja (Appendix C): utility functions.</div><div class='del'>-</div><div class='del'>-Thu Mar 31 14:15:44 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 31 08:25:50 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* common.mk (RUBYOPT): clear for the environment RubyGems installed.</div><div class='del'>-</div><div class='del'>-	* common.mk (clean-local): keep $(PREP) files till distclean.</div><div class='del'>-</div><div class='del'>-	* common.mk (check): do all tests.</div><div class='del'>-</div><div class='del'>-Thu Mar 31 06:00:20 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 31 00:18:27 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* win32/ifchange.bat, win32/rm.bat: backported from HEAD.</div><div class='del'>-</div><div class='del'>-Wed Mar 30 23:44:50 2005  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar 30 17:41:48 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: support TclTkIp#_create_console() method.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/console.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: update RELEASE_DATE</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demo-*/check2.rb: use 'return' in the Proc object.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkextlib/**: ditto.</div><div class='del'>-</div><div class='del'>-Tue Mar 29 22:11:56 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar 28 23:40:40 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/drb/gw.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Mar 28 20:43:34 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: get rid of warnings caused by a bug of VC.</div><div class='del'>-</div><div class='del'>-Mon Mar 28 08:39:49 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar 26 22:51:33 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb (after_cancel): add Tk.after_cancel(afterID) method.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb (configinfo): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/itemconfig.rb (itemconfiginfo): ditto.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: add :variable, :window and :procedure</div><div class='del'>-	  type.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: improve treatment of array-type</div><div class='del'>-	  tkvariable.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt.rb: add commands for zooming.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt/*: bug fix.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/sample/tkextlib/blt/*: new sample scripts.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkextlib/treectrl/*: ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar 25 10:53:16 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 24 23:10:44 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb (check_sizeof): refine logging messages.</div><div class='del'>-</div><div class='del'>-Thu Mar 24 03:57:48 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Mar 23 00:35:10 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar 22 22:40:18 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): check event_hooks instead of trace_func.</div><div class='del'>-</div><div class='del'>-Tue Mar 22 17:30:44 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Mar 20 22:51:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (mkmf_failed): check if Makefile is created without</div><div class='del'>-	  create_makefile.</div><div class='del'>-</div><div class='del'>-Sat Mar 19 23:48:10 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar 19 00:41:02 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Mar 17 17:42:13 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (make_struct): allow non local-id field</div><div class='del'>-	  names. [ruby-core:04575]</div><div class='del'>-</div><div class='del'>-	* struct.c (inspect_struct): ditto.</div><div class='del'>-</div><div class='del'>-Wed Mar 16 23:36:02 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): call_cfunc() should be protected.</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_settracefunc.rb: added test for c-return.</div><div class='del'>-</div><div class='del'>-Wed Mar 16 22:20:25 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (str_to_id): fixed typo.</div><div class='del'>-</div><div class='del'>-Wed Mar 16 18:08:32 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_call0): reorganize "return" event post.</div><div class='del'>-</div><div class='del'>-Tue Mar 15 23:49:19 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (Init_iconv): InvalidEncoding also should include</div><div class='del'>-	  Iconv::Failure.</div><div class='del'>-</div><div class='del'>-Tue Mar 15 16:38:11 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c (ary2list): give wrong arguments to hash2kv()</div><div class='del'>-</div><div class='del'>-Mon Mar 14 19:39:33 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/sample/cd_timer.rb: new sample of TkRTTimer</div><div class='del'>-</div><div class='del'>-Mon Mar 14 12:21:03 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar 14 08:14:56 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (str_to_id): warn for NUL containing strings.</div><div class='del'>-</div><div class='del'>-Mon Mar 14 00:13:49 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/bind.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/tcolor: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/widget: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/bind.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/tcolor: ditto.</div><div class='del'>-</div><div class='del'>-Sun Mar 13 10:04:17 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb: remove test_gc. [ruby-dev:25871]</div><div class='del'>-</div><div class='del'>-Thu Mar 10 19:12:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/sample/tkrttimer.rb: sample of TkRTTimer class</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/textmark.rb: move  TkTextMark#+ and TkTextMark#- to</div><div class='del'>-	  TkText::IndexModMethods</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Mar 10 08:10:11 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar  9 20:25:58 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/cipher.rb: fix typo. [ruby-dev:24285]</div><div class='del'>-</div><div class='del'>-Wed Mar  9 15:46:35 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar  9 13:37:57 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar  8 18:16:55 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar  8 13:54:40 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: workaround for some of 4.4BSD-Lite derived OSs.</div><div class='del'>-</div><div class='del'>-Tue Mar  8 12:36:17 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar  8 01:27:00 2005  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar  7 21:35:02 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/webrick/httpsd.rb: fix typo in comment. suggested by</div><div class='del'>-	  Kazuhiko Shiozaki.</div><div class='del'>-</div><div class='del'>-Mon Mar  7 14:55:43 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb 16 02:55:21 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: get rid of GNUmakefile generation.</div><div class='del'>-</div><div class='del'>-	* text/openssl/test_pair.rb: test for IO like methods.</div><div class='del'>-</div><div class='del'>-	* test/ruby/ut_eof.rb: test about empty file.</div><div class='del'>-</div><div class='del'>-Mon Mar  7 10:22:06 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/un.rb: should use OptionParser. (backported form HEAD)</div><div class='del'>-</div><div class='del'>-Mon Mar  7 09:18:42 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar  7 01:22:14 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar  7 00:01:04 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: fail to call TclTkLib.mainloop when $SAFE==4</div><div class='del'>-</div><div class='del'>-Sun Mar  6 16:41:33 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/net/http/test_httpheader.rb: new file.</div><div class='del'>-</div><div class='del'>-Sun Mar  6 11:47:10 2005  Sam Roberts  &lt;sroberts@uniserve.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: rdoced.  [ruby-core:4490]</div><div class='del'>-</div><div class='del'>-Sun Mar  6 11:36:37 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar  5 18:06:21 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/win32.c (NtInitialize): ditto. (by numeric.c 1.101.2.14)</div><div class='del'>-</div><div class='del'>-Sat Mar  5 16:29:26 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: freeze callback-entry objects</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile.rb: support tile-0.6</div><div class='del'>-</div><div class='del'>-Fri Mar  4 19:39:28 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/iconv/iconv.c: backport Iconv::InvalidEncoding from CVS HEAD.</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: moved misplaced rdoc.</div><div class='del'>-</div><div class='del'>-Fri Mar  4 15:58:12 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Mar  4 11:17:06 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_rb_threadUpdateCommand): ditto.</div><div class='del'>-</div><div class='del'>-Fri Mar  4 10:15:30 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Mar  4 07:07:00 2005  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: follow nkf 1.63</div><div class='del'>-</div><div class='del'>-Thu Mar  3 23:49:00 2005  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: follow nkf 1.62</div><div class='del'>-</div><div class='del'>-Thu Mar  3 11:49:51 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb: added site information.</div><div class='del'>-</div><div class='del'>-Wed Mar  2 19:53:07 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar  2 17:14:18 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_eventloop_core): fix typo</div><div class='del'>-</div><div class='del'>-Wed Mar  2 16:00:02 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: enforce exception-handling.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: catch IRB_EXIT to work on irb.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/tcltklib.c: add TclTkLib.mainloop_thread?</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: (bug fix) callback returns a value.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvas.rb (delete): bug fix when multiple arguments.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/clock.rb: fix 'no method error'.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/clock.rb (self.clicks): accept a Symbol argument.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/sample/irbtk.rb: irb with Ruby/Tk.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-*/anilabel.rb: bug fix on 'show code'</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-*/aniwave.rb: new Ruby/Tk animation demo.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-*/pendulum.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-*/goldberg.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-*/widget: add entries of animation demos.</div><div class='del'>-</div><div class='del'>-Tue Mar  1 00:47:43 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar  1 00:34:24 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb (Rinda::TupleSpace): improved keeper thread.</div><div class='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Feb 28 11:42:23 2005  Ian Macdonald  &lt;ian@caliban.org&gt;</div><div class='del'>-</div><div class='del'>-	* exception error messages updated.  [ruby-core:04497]</div><div class='del'>-</div><div class='del'>-Mon Feb 28 09:03:09 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb 23 15:04:32 2005  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb 23 08:00:18 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* array.c (rb_ary_unshift_m): ditto.</div><div class='del'>-</div><div class='del'>-Wed Feb 23 01:57:46 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 22 07:25:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (parser_yylex): identfier after dot must not be a variable.</div><div class='del'>-</div><div class='del'>-Mon Feb 21 10:04:49 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (config.h): add fcntl.</div><div class='del'>-</div><div class='del'>-	* win32/win32.[ch] (fcntl): ditto.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_connect): support nonblocking mode.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb 20 00:48:48 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb 19 18:11:47 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb (DRbObject#respond_to?): take two arguments.</div><div class='del'>-	  [ruby-dev:25722]</div><div class='del'>-</div><div class='del'>-	* test/drb/drbtest.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Feb 19 13:52:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb 19 01:32:03 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/newton.rb: resolved LoadError.</div><div class='del'>-	  [ruby-dev:25685]</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/sample/linear.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/sample/nlsolve.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb 18 17:14:00 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 17 20:11:18 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb (DRbServer.default_safe_level): fix typo.</div><div class='del'>-</div><div class='del'>-Thu Feb 17 20:11:18 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 17 11:54:00 2005  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/runner.rb: adjusted for new AutoRunner semantics.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Feb 17 04:21:47 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 17 00:09:45 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/drb/test_drb.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/drb/test_drbssl.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/drb/test_drbunix.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/drb/ut_drb.rb: reduce sleep.</div><div class='del'>-</div><div class='del'>-Thu Feb 17 00:02:27 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): NODE_IASGN is an assignment.</div><div class='del'>-</div><div class='del'>-Wed Feb 16 23:34:30 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: add lazy stop_service. ([druby-ja:109])</div><div class='del'>-</div><div class='del'>-	* lib/drb/extserv.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Feb 16 17:07:57 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb 14 23:58:17 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/parser.rb (RSS::ListenerMixin::tag_end):</div><div class='del'>-	  fixed invalid namespace handling bug.</div><div class='del'>-</div><div class='del'>-Mon Feb 14 13:12:38 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb 14 00:40:49 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb (InvokeMethod.perform): pass DRb info to sub thread.</div><div class='del'>-</div><div class='del'>-	* test/drb/test_drb.rb (test_01_safe1_safe4_eval): fix test case.</div><div class='del'>-</div><div class='del'>-Sun Feb 13 23:13:46 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/dublincore.rb (RSS::DublicCoreModel#date{,=}): added</div><div class='del'>-	  convenient methods.</div><div class='del'>-</div><div class='del'>-	* lib/rss/0.9.rb (RSS::Rss::Channel#date{,=}): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/rss/2.0.rb (RSS::Rss::Channel::Item#date{,=}): ditto.</div><div class='del'>-</div><div class='del'>-	* test/rss/: added tests for the convenient methods.</div><div class='del'>-</div><div class='del'>-Sun Feb 13 22:43:03 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/drb/test_drb.rb, ut_eval.rb, ut_safe1.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sun Feb 13 16:56:52 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb 13 00:52:33 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/erb.rb (ERB::Util.h, u): make it module_function.</div><div class='del'>-</div><div class='del'>-Sat Feb 12 17:29:19 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb 12 15:07:23 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (rand_init): suppress warning.</div><div class='del'>-</div><div class='del'>-Sat Feb 12 13:54:03 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb: support https if the platform provides CA</div><div class='del'>-	  certificates.</div><div class='del'>-</div><div class='del'>-Sat Feb 12 06:18:28 2005  URABE Shyouhei  &lt;shyouhei@ice.uec.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb 11 17:40:42 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb 11 11:33:53 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb 11 06:30:07 2005  George Ogata  &lt;g_ogata@optushome.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* misc/ruby-mode.el: ignore parenthesis inside heredoc.</div><div class='del'>-	  [ruby-core:04415]</div><div class='del'>-</div><div class='del'>-Fri Feb 11 04:54:13 2005  Tilman Sauerbeck  &lt;tilman@code-monkey.de&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: [ruby-core:04412]</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/ri_generator.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Feb 10 11:14:17 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (COMMON_HEADERS): shouldn't include winsock2.h.</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb (sockaddr_storage): remove workaround for</div><div class='del'>-	  mswin32.</div><div class='del'>-</div><div class='del'>-Thu Feb 10 10:29:16 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 10 00:47:25 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (make_struct): fixed: [ruby-core:04402]</div><div class='del'>-</div><div class='del'>-Wed Feb  9 08:07:08 2005  Paul Duncan  &lt;pabs@pablotron.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/curses/curses.c (window_color_set): [ruby-core:04393]</div><div class='del'>-</div><div class='del'>-Tue Feb  8 23:51:47 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb  8 13:06:12 2005  Sam Roberts  &lt;sroberts@uniserve.com&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (Init_socket): SO_REUSEPORT added.</div><div class='del'>-	  [ruby-talk:130092]</div><div class='del'>-</div><div class='del'>-Tue Feb  8 09:30:01 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::Cookie): [ruby-talk:130040]</div><div class='del'>-</div><div class='del'>-Tue Feb  8 00:19:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb  7 10:06:30 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c: [ruby-doc:818]</div><div class='del'>-</div><div class='del'>-Mon Feb  7 01:56:20 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): should support header files in</div><div class='del'>-	  depend file.</div><div class='del'>-</div><div class='del'>-Mon Feb  7 01:21:50 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb ($extmk): check if under ext directory.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (Logging.postpone): allow recursive operation.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_macro, have_var, byte_order): new functions.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (find_library): allow directory list with separators.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (arg_config): manage provided configuration options.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (dir_config): accept arrays of directory names as</div><div class='del'>-	  default values.</div><div class='del'>-</div><div class='del'>-	* mkconfig.rb: no longer embed srcdir and compile_dir into</div><div class='del'>-	  rbconfig.rb.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_makefile): fix unbalanced parens.</div><div class='del'>-</div><div class='del'>-Sun Feb  6 19:23:01 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb  6 14:14:26 2005  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb (new_with_hash): changed messages of exception.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb  6 12:20:11 2005  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2ulong_pack): One too many arguments are passed</div><div class='del'>-	  to big2ulong().</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb  6 03:24:20 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb  4 00:30:45 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb  3 23:42:36 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Feb  2 23:52:53 2005  sheepman  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb  2 21:56:01 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb (RSS::Element#convert): added.</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: convert -&gt; need_convert.</div><div class='del'>-</div><div class='del'>-	* lib/rss/1.0.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/rss/0.9.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/rss/2.0.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/rss/trackback.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Feb  1 22:48:48 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb (DRb::DRbObject#respond_to?): check marshal_dump and</div><div class='del'>-	  _dump.</div><div class='del'>-</div><div class='del'>-Tue Feb  1 00:20:23 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (aix): fix linker flags on AIX.  [ruby-talk:125460]</div><div class='del'>-</div><div class='del'>-Mon Jan 31 13:33:21 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add invalid namespace check</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add invalid_namespace? method</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto</div><div class='del'>-</div><div class='del'>-Mon Jan 31 10:29:18 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/context.rb (IRB::Context::initialize): [ruby-core:04330]</div><div class='del'>-</div><div class='del'>-Sat Jan 29 09:42:12 2005  Sam Roberts  &lt;sroberts@uniserve.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan 28 17:16:55 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan 27 13:18:03 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* st.c (st_foreach): report success/failure by return value.</div><div class='del'>-	  [ruby-Bugs-1396]</div><div class='del'>-</div><div class='del'>-Thu Jan 27 00:15:29 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Jan 26 23:09:11 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan 26 10:51:50 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 25 17:11:51 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c (proc_options): correct -T option in RUBYOPT. (backported</div><div class='del'>-	  from CVS HEAD)</div><div class='del'>-</div><div class='del'>-Tue Jan 25 14:05:52 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: add yet another native-thread check</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: avoid warning for deleted safeTk ip frame</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menu.rb: bug on treating arguments [ruby-dev:25479]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/*.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/anilabel.rb: new demo script</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/anilabel.rb: ditto</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan 24 15:44:25 2005  Tilman Sauerbeck  &lt;tilman@code-monkey.de&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Jan 24 15:44:25 2005  Charles Mills  &lt;cmills@freeshell.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan 24 15:44:25 2005  Florian Gro  &lt;florgro@gmail.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan 24 15:44:25 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jan 23 12:41:16 2005  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	  define capitalized method as well under that circumstance.</div><div class='del'>-</div><div class='del'>-Sun Jan 23 05:24:42 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan 22 23:09:47 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/ssl.rb (accept): rescue SSLError. [druby-ja:110]</div><div class='del'>-</div><div class='del'>-Sat Jan 22 22:35:03 2005  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/unix.rb: fail if UNIXFileOwner is set. [druby-ja:111]</div><div class='del'>-</div><div class='del'>-Fri Jan 21 23:58:42 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_set_pos): clear EOF flag.</div><div class='del'>-	  [ruby-talk:127511]</div><div class='del'>-</div><div class='del'>-Fri Jan 21 20:07:02 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan 21 16:58:10 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_push_glob): should work for NUL delimited patterns.</div><div class='del'>-</div><div class='del'>-Fri Jan 21 13:58:37 2005  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan 21 09:30:16 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* rubyio.h (rb_eof_error): should mark as NORETURN. (backported</div><div class='del'>-	  from CVS HEAD)</div><div class='del'>-</div><div class='del'>-Fri Jan 21 00:31:36 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan 20 19:03:24 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (extmake): shouldn't set $extflags on mswin32.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan 20 11:42:02 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_new4): should propagate taintedness.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* time.c (time_strftime): protect from format modification from GC</div><div class='del'>-	  finalizers.</div><div class='del'>-</div><div class='del'>-Wed Jan 19 18:06:40 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan 19 01:16:30 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 18 15:03:05 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/webrick/*, sample/webrick/httpproxy.rb: add new file.</div><div class='del'>-</div><div class='del'>-Mon Jan 17 23:33:46 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (aix): fix typo.  [ruby-talk:126401]</div><div class='del'>-</div><div class='del'>-Mon Jan 17 07:08:51 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: suppress warnings.</div><div class='del'>-</div><div class='del'>-	* lib/irb/extend-command.rb (IRB::ContextExtender.def_extend_command):</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-	* lib/irb/ext/history.rb (IRB::Context::set_last_value): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/irb/ext/history.rb (IRB::Context::eval_history): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/irb/locale.rb (IRB::Locale::real_load): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/irb/slex.rb (SLex::Node::create_subnode): remove garbage.</div><div class='del'>-</div><div class='del'>-Mon Jan 17 00:09:42 2005  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/common.rb (PORT): typo fix. fixed: [ruby-core:04256]</div><div class='del'>-</div><div class='del'>-Sat Jan 15 14:57:22 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan 15 13:35:16 2005  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb (RSS::VERSION): 0.1.2 -&gt; 0.1.3.</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: accept inheritance. [ruby-talk:126104]</div><div class='del'>-</div><div class='del'>-Thu Jan 13 04:48:53 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): don't warn nonblocking behavior by default.</div><div class='del'>-</div><div class='del'>-Wed Jan 12 00:36:29 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 11 09:44:40 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 11 03:10:10 2005  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (copy_entry): could not copy symbolic link.</div><div class='del'>-	  [ruby-talk:125733]</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (copy_stream): use read/write instead of</div><div class='del'>-	  sysread/syswrite.</div><div class='del'>-</div><div class='del'>-Mon Jan 10 23:08:15 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan 10 01:22:55 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_data_object_alloc): klass may be NULL.</div><div class='del'>-	  [ruby-list:40498]</div><div class='del'>-</div><div class='del'>-Sun Jan  9 03:12:58 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): warn nonblocking behavior.</div><div class='del'>-	  (io_readpartial): new method IO#readpartial.</div><div class='del'>-</div><div class='del'>-Sat Jan  8 04:38:47 2005  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: Kernel#y requires an argument.</div><div class='del'>-</div><div class='del'>-Fri Jan  7 21:12:29 2005  TAMURA Takashi  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan  7 18:03:35 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (mark_locations_array): avoid core dump with -O3.</div><div class='del'>-	  [ruby-dev:25424]</div><div class='del'>-</div><div class='del'>-Thu Jan  6 20:31:07 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c (zstream_end): should return value. (backported</div><div class='del'>-	  from CVS HEAD)</div><div class='del'>-</div><div class='del'>-Thu Jan  6 19:55:13 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jan  6 17:14:31 2005  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan  6 13:45:35 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/time.rb: recognize +00:00 and GMT as a localtime.</div><div class='del'>-</div><div class='del'>-Thu Jan  6 07:58:28 2005  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan  5 20:16:32 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* random.c (random_seed): refined.</div><div class='del'>-</div><div class='del'>-Wed Jan  5 12:49:39 2005  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan  5 10:48:16 2005  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* win32/win32.[ch] (rb_w32_rmdir): new function. (backported from CVS</div><div class='del'>-	  HEAD)</div><div class='del'>-</div><div class='del'>-Wed Jan  5 02:30:11 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan  4 23:25:29 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_rand): should return positive random number.</div><div class='del'>-	  [ruby-dev:25401]</div><div class='del'>-</div><div class='del'>-Tue Jan  4 11:15:29 2005  TAMURA Takashi  &lt;sheepman@tcn.zaq.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan  3 14:01:54 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan  3 11:37:42 2005  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* random.c (random_seed): use /dev/urandom if available.</div><div class='del'>-	  [ruby-dev:25392]</div><div class='del'>-</div><div class='del'>-Mon Jan  3 07:46:42 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/webrick/test_httpauth.rb: new file.</div><div class='del'>-</div><div class='del'>-Sat Jan  1 04:20:23 2005  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan  1 01:13:28 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* variable.c (rb_autoload): [ruby-dev:25373]</div><div class='del'>-</div><div class='del'>-Fri Dec 31 14:10:43 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 30 00:41:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (svalue_to_avalue): [ruby-dev:25366]</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_justify): [ruby-dev:25367]</div><div class='del'>-</div><div class='del'>-Wed Dec 29 11:07:07 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/template/html/kilmer.rb: Update to use new</div><div class='del'>-	  sections.</div><div class='del'>-</div><div class='del'>-Tue Dec 28 22:31:46 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 28 15:41:48 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 28 15:25:20 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/lib/kconv.rb (Kconv::RegexpEucjp): second byte is up to</div><div class='del'>-	  0xfe.</div><div class='del'>-</div><div class='del'>-	* ext/nkf/lib/kconv.rb (Kconv#kconv): should handle UTF8 and UTF16</div><div class='del'>-	  properly.</div><div class='del'>-</div><div class='del'>-Tue Dec 28 13:35:20 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/zlib/zlib.c (rb_deflate_init_copy): replace rb_deflate_clone.</div><div class='del'>-</div><div class='del'>-Tue Dec 28 12:26:45 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/configure.bat (--enable-install-doc, --disable-install-doc):</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-Mon Dec 27 20:02:14 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix SEGV bug when deleting Tk interp</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto</div><div class='del'>-</div><div class='del'>-Mon Dec 27 16:55:17 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 27 16:29:56 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_justify): [ruby-dev:25341]</div><div class='del'>-</div><div class='del'>-Mon Dec 27 15:47:48 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* test/fileutils/fileasserts.rb: sync with HEAD.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_nowrite.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Dec 27 15:21:07 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Dec 25 11:11:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.8.2 released.</div><div class='del'>-</div><div class='del'>-Sat Dec 25 04:23:49 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Dec 25 01:28:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c: cancel io_reopen() change on Dec. 24th.</div><div class='del'>-</div><div class='del'>-	* dln.c: use &lt;dlfcn.h&gt; for NetBSD.  [ruby-dev:25313]</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_select): IO list could be altered.  [ruby-dev:25312]</div><div class='del'>-</div><div class='del'>-Fri Dec 24 23:51:48 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/win32.[ch]: ditto.</div><div class='del'>-</div><div class='del'>-Fri Dec 24 23:27:18 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/image.rb: TkPhotoImage#cget bug fix</div><div class='del'>-</div><div class='del'>-Fri Dec 24 18:39:25 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec 24 02:52:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec 24 02:22:53 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (rb_syck_io_str_read): [ruby-core:03973]</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_loader_transfer): check type conversion.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_parser_s_alloc, syck_parser_initialize):</div><div class='del'>-	  allocation framework.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_s_alloc, syck_emitter_initialize):</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-Fri Dec 24 01:21:00 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt.rb: add BLT extension support</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt/*.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt/tile/*.rb: ditto</div><div class='del'>-</div><div class='del'>-Thu Dec 23 23:36:28 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 23 13:13:33 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: define TclTkLib::COMPILE_INFO and</div><div class='del'>-	  RELEASE_DATE</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c: define TkUtil::RELEASE_DATE</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: define Tk::RELEASE_DATE</div><div class='del'>-</div><div class='del'>-Thu Dec 23 09:38:31 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): restore exact mode.  fixed: [ruby-core:04003]</div><div class='del'>-</div><div class='del'>-Thu Dec 23 00:16:32 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (bsdi): use $(CC) for LDSHARED.  fixed [ruby-dev:25270]</div><div class='del'>-</div><div class='del'>-Wed Dec 22 11:14:55 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 22 08:34:32 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 22 00:08:01 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/*, test/soap/*, sample/soap/authheader/*: eval cleanup.</div><div class='del'>-</div><div class='del'>-Tue Dec 21 22:07:33 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 21 14:40:02 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/test_asn1.rb: add tests for OpenSSL::ASN1.</div><div class='del'>-</div><div class='del'>-Tue Dec 21 12:22:40 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 21 12:10:04 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/grid.rb: rescue bug of 'grid configure' on Tcl/Tk8.3-</div><div class='del'>-</div><div class='del'>-Tue Dec 21 00:53:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_traverse): [ruby-dev:25261]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_decode): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.c (ossl_asn1_decode_all): ditto.</div><div class='del'>-</div><div class='del'>-Mon Dec 20 23:22:26 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/mapping/wsdl*.rb</div><div class='del'>-	  * lib/wsdl/soap/element.rb</div><div class='del'>-	  * lib/wsdl/xmlSchema/simpleContent.rb</div><div class='del'>-</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='del'>-</div><div class='del'>-	* summary</div><div class='del'>-	  * imported from the soap4r repository.  Version: 1.5.3-ruby1.8.2</div><div class='del'>-</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='del'>-</div><div class='del'>-	  * HTTP client connection/send/receive timeout support.</div><div class='del'>-</div><div class='del'>-	  * HTTP client/server gzipped content encoding support.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 20 22:56:39 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 20 14:07:02 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: supports new features of Tcl/Tk8.5a2</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/clock.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/panedwindow.rb: ditto</div><div class='del'>-</div><div class='del'>-Mon Dec 20 12:47:13 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 20 12:42:17 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fwrite): workaround for MSVCRT's bug.</div><div class='del'>-	  fixed: [ruby-core:03982]</div><div class='del'>-</div><div class='del'>-Mon Dec 20 11:21:04 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 20 03:30:40 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 20 01:51:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (make_struct): [ruby-dev:25249]</div><div class='del'>-</div><div class='del'>-Mon Dec 20 00:28:20 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/encodings/SHIFT-JIS.rb: backported from CVS HEAD.</div><div class='del'>-</div><div class='del'>-	* lib/rexml/encodings/SHIFT_JIS.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sun Dec 19 17:19:48 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/ossl_x509store.rb: test certificate validity times.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/ossl_x509name.rb: add tests about RFC2253 DN.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* all changes in this entry are backport from 1.9.</div><div class='del'>-</div><div class='del'>-Sun Dec 19 17:24:59 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 19 11:01:25 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: use standalone runner for -e.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#recursive_collect):</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-Sat Dec 18 16:36:23 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec 18 15:16:41 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec 18 10:51:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_open_dir): new function.  [ruby-dev:25242]</div><div class='del'>-</div><div class='del'>-Fri Dec 17 18:07:01 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec 17 16:28:12 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: fix bug on setting up system encoding</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/event.rb: fix error on require process</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/font.rb: fix abnormal termination error on Windows</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/virtevent.rb: TkVirtualEvent::PreDefVirtEvent.new()</div><div class='del'>-	  accepts event-sequence arguments</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: fail to dump embedded images</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: use TkText::IndexModMethods module</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/textmark.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/textimage.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/textwindow.rb: ditto</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Dec 17 13:50:00 2004  Akiyoshi, Masamichi  &lt;akiyoshi@hp.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (ruby_init): change to call VMS private intialization routine.</div><div class='del'>-</div><div class='del'>-Fri Dec 17 13:33:58 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 16 23:25:25 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/drb/test_drb.rb: adjust and reduce sleep (backported from</div><div class='del'>-	  CVS HEAD.)</div><div class='del'>-</div><div class='del'>-Thu Dec 16 18:44:58 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/webrick/config.rb (WEBrick::Config::FileHandler):</div><div class='del'>-	  default value of :NondisclosureName is [".ht*", "*~"].</div><div class='del'>-</div><div class='del'>-Thu Dec 16 18:36:52 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c (ossl_raise): refine message format.</div><div class='del'>-</div><div class='del'>-Thu Dec 16 16:29:44 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/widget: modify version check for</div><div class='del'>-	  supporting features</div><div class='del'>-</div><div class='del'>-Thu Dec 16 16:03:50 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/bindtag.rb: bug fix [ruby-talk: 123667]</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: accept :idle for the interval argument</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add TkComm._callback_entry?()</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: add MultiTkIp.cb_entry_class</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: use TkComm._callback_entry?()</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvastag.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/dialog.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/optiondb.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/textwindow.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/validation.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*: ditto</div><div class='del'>-</div><div class='del'>-Thu Dec 16 03:14:28 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 16 00:33:37 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (Init_Hash): remove custom "hash" and "eql?".</div><div class='del'>-</div><div class='del'>-Wed Dec 15 18:57:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb (Set::eql): wrong definition.  [ruby-dev:25207]</div><div class='del'>-</div><div class='del'>-Wed Dec 15 18:48:42 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 15 17:03:50 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 15 15:39:32 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 15 16:10:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_obj_id_obsolete): warn always.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_enable_super): ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec 15 15:31:02 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb (Set#==): [ruby-dev:25206]</div><div class='del'>-</div><div class='del'>-Wed Dec 15 14:22:10 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 15 10:30:37 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_digest.c (ossl_digest_initialize): [ruby-dev:25198]</div><div class='del'>-</div><div class='del'>-Tue Dec 14 17:10:09 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_close): need to reset osfhnd().</div><div class='del'>-</div><div class='del'>-Tue Dec 14 14:03:57 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c (ossl_raise): avoid buffer overrun.</div><div class='del'>-	  [ruby-dev:25187]</div><div class='del'>-</div><div class='del'>-Tue Dec 14 12:36:04 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 13 18:13:52 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 13 00:58:02 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 12 20:06:38 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: backported from CVS HEAD.</div><div class='del'>-</div><div class='del'>-Sun Dec 12 10:35:10 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 12 10:14:03 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 11 23:54:07 2005  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/sample/scrollframe.rb: add a new sample.</div><div class='del'>-</div><div class='del'>-Sat Dec 11 20:12:21 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: add DRbRemoteError. [ruby-list:40348],</div><div class='del'>-	  [ruby-list:40390]</div><div class='del'>-</div><div class='del'>-	* test/drb/drbtest.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/drb/ut_drb.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Dec 11 15:38:14 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/jcode.rb (String::succ): [ruby-dev:25156]</div><div class='del'>-</div><div class='del'>-Sat Dec 11 12:41:55 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (run_trap_eval): prototype; avoid VC++ warnings.</div><div class='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c: fix typo. fixed: [ruby-core:03947]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c: need to include dln.h.</div><div class='del'>-</div><div class='del'>-Sat Dec 11 00:10:18 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_reopen): [ruby-dev:25150]</div><div class='del'>-</div><div class='del'>-Fri Dec 10 08:39:27 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  9 17:00:00 2004  Akiyoshi, Masamichi  &lt;akiyoshi@hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c, ext/socket/getaddrinfo.c: port to VMS</div><div class='del'>-</div><div class='del'>-Thu Dec  9 16:31:02 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (GetDBM): typo.</div><div class='del'>-</div><div class='del'>-Thu Dec  9 16:05:00 2004  Akiyoshi, Masamichi  &lt;akiyoshi@hp.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  9 14:38:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* string.c (rb_str_dump): not escape # which isn't a substitution.</div><div class='del'>-</div><div class='del'>-Thu Dec  9 10:54:36 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dbm/dbm.c (fdbm_select): [ruby-dev:25132]</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/gdbm/gdbm.c: ditto.</div><div class='del'>-</div><div class='del'>-Thu Dec  9 03:08:36 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: add find_library("#{lib}#{ver}",..) for</div><div class='del'>-	  stub libs</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menu.rb: add TkMenu.new_menuspec</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menu.rb: add alias (TkMenuButton = TkMenubutton,</div><div class='del'>-	  TkOptionMenuButton = TkOptionMenubutton)</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/font.rb: configinfo returns proper types of values</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bind methods accept subst_args + block</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvastag.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/frame.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/toplevel.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*: ditto and bug fix</div><div class='del'>-</div><div class='del'>-Wed Dec  8 23:54:29 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec  8 21:56:31 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss, test/rss, sample/rss: backported from CVS HEAD.</div><div class='del'>-</div><div class='del'>-Wed Dec  8 14:31:36 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fwrite): change dereference for cosmetic reason.</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): [ruby-dev:25104]</div><div class='del'>-</div><div class='del'>-Tue Dec  7 19:08:00 2004  Akiyoshi, Masamichi  &lt;akiyoshi@hp.com&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fwrite): fix offset incrementation (for VMS and Human68k)</div><div class='del'>-</div><div class='del'>-Tue Dec  7 00:27:37 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_setgroups): [ruby-dev:25081]</div><div class='del'>-</div><div class='del'>-Mon Dec  6 18:08:10 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_eqq): document fix.  [ruby-talk:122541]</div><div class='del'>-</div><div class='del'>-Mon Dec  6 17:19:13 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec  6 10:18:17 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec  6 09:59:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_connect): use rb_str_new4().</div><div class='del'>-	  [ruby-dev:25052]</div><div class='del'>-</div><div class='del'>-Mon Dec  6 01:42:08 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/openssl/test_pkey_rsa.rb: new file.</div><div class='del'>-</div><div class='del'>-Sun Dec  5 19:39:17 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Completion#complete): new parameter</div><div class='del'>-	  to direct case insensitiveness.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec  4 22:54:15 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): remove rb_str_locktmp().  [ruby-dev:25050]</div><div class='del'>-</div><div class='del'>-	* io.c (io_fwrite): takes VALUE string as an argument.</div><div class='del'>-	  [ruby-dev:25050]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_connect): remove rb_str_locktmp().</div><div class='del'>-	  [ruby-dev:25050]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (udp_connect): [ruby-dev:25045]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (udp_bind): 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/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'>-	* hash.c (rb_hash_hash): should provide "hash" method where "eql?"</div><div class='del'>-	  is redefined.  [ruby-talk:122482]</div><div class='del'>-</div><div class='del'>-Sat Dec  4 14:54:52 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): use volatile `tmp' rather than `args'.</div><div class='del'>-	  [ruby-core:03882]</div><div class='del'>-</div><div class='del'>-Sat Dec  4 14:28:56 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec  4 03:33:45 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/readline/readline.c: check $SAFE. (backported from CVS HEAD)</div><div class='del'>-</div><div class='del'>-	* test/readline/test_readline.rb: added tests for readline.</div><div class='del'>-	  (backported from CVS HEAD)</div><div class='del'>-</div><div class='del'>-Sat Dec  4 02:24:00 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c: add constant NKF::VERSION</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf.c(guess): this becomes an alias of guess2</div><div class='del'>-</div><div class='del'>-	* ext/nkf/test.rb(mime_out2): add --no-cp932</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: original nkf2 revision 1.47</div><div class='del'>-</div><div class='del'>-Sat Dec  4 00:35:08 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (bsock_setsockopt): [ruby-dev:25039]</div><div class='del'>-</div><div class='del'>-Fri Dec  3 18:57:03 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ostruct.rb: 1.9 marshaling support back-ported.</div><div class='del'>-	  [ruby-core:03871]</div><div class='del'>-</div><div class='del'>-Fri Dec  3 13:45:20 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): copy arguments to frame.argv.</div><div class='del'>-	  [ruby-core:03861]</div><div class='del'>-</div><div class='del'>-Fri Dec  3 12:25:41 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* st.h: fix prototypes.</div><div class='del'>-</div><div class='del'>-Fri Dec  3 00:21:05 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (convert_type): use rb_respond_to() again.</div><div class='del'>-	  [ruby-dev:25021]</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec  3 01:55:24 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/font.rb: TkFont#replace accepts only one font argument.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/radiobutton.rb: add TkRadiobutton#value and</div><div class='del'>-	  TkRadiobutton#value=(val).</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb: callback substitution support on</div><div class='del'>-	  command option.</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-en/widget: bug fix (wrong image height)</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/demos-jp/widget: ditto.</div><div class='del'>-</div><div class='del'>-Fri Dec  3 00:11:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_file_initialize): [ruby-dev:25032]</div><div class='del'>-</div><div class='del'>-Thu Dec  2 16:41:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Dec  2 09:57:24 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ostruct.rb (OpenStruct::Marshaler): OpenStruct can be</div><div class='del'>-	  marshaled again.  [ruby-core:03862]</div><div class='del'>-</div><div class='del'>-Thu Dec  2 09:30:06 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_mark): mark thread group.  [ruby-dev:25020]</div><div class='del'>-</div><div class='del'>-	* eval.c (thgroup_add): check whether the argument is really a Thread.</div><div class='del'>-</div><div class='del'>-Thu Dec  2 07:57:16 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_ctl): [ruby-dev:25019]</div><div class='del'>-</div><div class='del'>-Wed Dec  1 02:21:02 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (sighandler): call handler immediately only for default</div><div class='del'>-	  handlers.  [ruby-dev:25003]</div><div class='del'>-</div><div class='del'>-Tue Nov 30 23:38:18 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): need not to null terminate.  [ruby-dev:24998]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* io.c (io_readpartial): ditto.</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov 30 16:18:50 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_fread): need not to null terminate.  [ruby-dev:24998]</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): remove unnecessary rb_str_resize().</div><div class='del'>-	  [ruby-dev:24996]</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov 30 00:49:08 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_sysread): use temporary lock.  [ruby-dev:24992]</div><div class='del'>-</div><div class='del'>-Mon Nov 29 16:06:04 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 29 15:59:05 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ostruct.rb (OpenStruct::method_missing): check method</div><div class='del'>-	  duplication for -d.</div><div class='del'>-</div><div class='del'>-	* lib/ostruct.rb (OpenStruct::initialize): ditto.</div><div class='del'>-</div><div class='del'>-Mon Nov 29 15:22:28 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 29 03:08:30 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_funcall_rescue): new function.</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Array): avoid using rb_respond_to().</div><div class='del'>-</div><div class='del'>-	* object.c (rb_Integer): ditto.</div><div class='del'>-</div><div class='del'>-	* parse.y (reduce_nodes): empty body should return nil.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 29 13:57:38 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 29 13:37:54 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): must not use FILE after fclose().</div><div class='del'>-	  [ruby-dev:24985]</div><div class='del'>-</div><div class='del'>-Mon Nov 29 13:16:31 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 29 01:18:18 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 27 21:43:39 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 27 14:44:15 2004  Kent Sibilev  &lt;ksibilev@bellsouth.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 27 09:41:21 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 26 18:02:44 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: Tk.destroy uses TkWindow#epath</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/image.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/wm.rb: add 'iconphoto' method(Windows only)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/*: some methods uses TkWindow#epath</div><div class='del'>-</div><div class='del'>-Fri Nov 26 13:49:06 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/erb.rb: add RDoc by James Edward Gray II.  [ruby-core:03786]</div><div class='del'>-</div><div class='del'>-Fri Nov 26 13:29:02 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 26 00:17:40 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): move StringValue() check before GetOpenFile().</div><div class='del'>-	  [ruby-dev:24959]</div><div class='del'>-</div><div class='del'>-Thu Nov 25 20:14:57 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 25 10:14:26 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (push_braces): do not reuse buffer strings.  [ruby-core:03806]</div><div class='del'>-</div><div class='del'>-Thu Nov 25 07:59:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 24 01:01:31 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* configure.in, io.c: cancel [ ruby-Patches-1074 ].</div><div class='del'>-</div><div class='del'>-Tue Nov 23 08:09:50 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menu.rb: improve usability of TkOptionMenubutton</div><div class='del'>-</div><div class='del'>-Tue Nov 23 02:00:21 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 23 00:10:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* file.c (rb_file_truncate): ditto.</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_s_truncate): ditto.</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_seek): use NUM2OFFT().</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 22 22:33:02 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 22 00:13:35 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (dir_seek): should retrieve dir_data after NUM2INT().</div><div class='del'>-	  [ruby-dev:24941]</div><div class='del'>-</div><div class='del'>-Sat Nov 20 23:57:33 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 20 23:56:54 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 20 23:55:19 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 20 13:26:03 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf-utf8/utf8tbl.c: original revision 1.7</div><div class='del'>-</div><div class='del'>-Sat Nov 20 05:34:24 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf/nkf-utf8/nkf.c: original nkf.c rev:1.40</div><div class='del'>-</div><div class='del'>-	* ext/nkf/test.rb: add test for mime encode/decode</div><div class='del'>-</div><div class='del'>-Sat Nov 20 01:37:34 2004  Johan Holmberg  &lt;holmberg@iar.se&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): nicer traceback at interrupt.</div><div class='del'>-	  [ruby-core:03774]</div><div class='del'>-</div><div class='del'>-Sat Nov 20 00:07:16 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 19 01:20:22 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 19 00:59:31 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 18 18:41:08 2004  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_stringchar.rb (test_bang): added.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 18 00:21:15 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (proc_getpgrp): prohibit for $SAFE=2.</div><div class='del'>-	  [ruby-dev:24899]</div><div class='del'>-</div><div class='del'>-	* process.c (get_pid): ditto.  [ruby-dev:24904]</div><div class='del'>-</div><div class='del'>-	* process.c (get_ppid): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 18 10:10:14 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c, rubyio.h (rb_io_modenum_flags): exported.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 17 23:42:40 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_settracefunc.rb: added.  [ruby-dev:24884]</div><div class='del'>-</div><div class='del'>-Wed Nov 17 13:56:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (newline_node): should not use FL_SET. [ruby-dev:24874]</div><div class='del'>-</div><div class='del'>-	* parse.y (string_content): should not use FL_UNSET.</div><div class='del'>-</div><div class='del'>-	* node.h (NODE_NEWLINE): remove unused bit to utilize flag field</div><div class='del'>-	  in nodes.</div><div class='del'>-</div><div class='del'>-Wed Nov 17 13:09:40 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 17 04:33:01 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c: all features are backport from 1.9. [ruby-dev:24826]</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big2ulong_pack): new function to pack Bignums.</div><div class='del'>-</div><div class='del'>-Wed Nov 17 03:42:45 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 16 23:45:07 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 16 16:30:21 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 16 16:20:45 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 16 11:19:07 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::options): use</div><div class='del'>-	  Regexp conversion.</div><div class='del'>-</div><div class='del'>-Tue Nov 16 01:41:31 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_mod_check): frozen check should be separated.</div><div class='del'>-	  [ruby-core:3742]</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 15 13:50:52 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_justify): typo fixed.  [ruby-dev:24851]</div><div class='del'>-</div><div class='del'>-Mon Nov 15 11:50:32 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov 14 13:27:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov 14 08:51:04 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 12 15:03:26 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32.{c,h} (rb_w32_cmdvector): rename make_cmdvector() and</div><div class='del'>-	  export it.</div><div class='del'>-</div><div class='del'>-Fri Nov 12 14:08:01 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/event.rb: remove $LOADED_FEATURES trick</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: ditto</div><div class='del'>-</div><div class='del'>-Fri Nov 12 00:31:05 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 11 17:36:12 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 11 16:47:21 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 11 09:41:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (push_braces): was confusing VALUE and char*.</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_push_glob): Dir.glob should have called its block.</div><div class='del'>-</div><div class='del'>-Thu Nov 11 01:52:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_initialize): use stringified object.</div><div class='del'>-	  [ruby-dev:24768]</div><div class='del'>-</div><div class='del'>-Wed Nov 10 22:49:01 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (SimpleDelegator::dup): wrong number of</div><div class='del'>-	  arguments.</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (DelegateClass::dup): ditto.</div><div class='del'>-</div><div class='del'>-Wed Nov 10 12:31:21 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* README.EXT (Example): extconf.rb is indispensable now.</div><div class='del'>-</div><div class='del'>-Wed Nov 10 03:33:36 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/style.rb: bug fix</div><div class='del'>-</div><div class='del'>-Tue Nov  9 14:27:18 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Officious): moved from DefaultList.</div><div class='del'>-</div><div class='del'>-Tue Nov  9 01:05:04 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* dir.c (join_path): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* dir.c (fnmatch): p or s may be NULL.  [ruby-dev:24749]</div><div class='del'>-</div><div class='del'>-Tue Nov  9 00:53:53 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* regex.c (slow_match): avoid GCC 3.4.x warnings.</div><div class='del'>-</div><div class='del'>-Tue Nov  9 00:50:06 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/rdoc.rb: Change version numbering of RDoc and ri</div><div class='del'>-</div><div class='del'>-Mon Nov  8 23:38:35 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/extservm.rb: add DRb::ExtServManager#uri=.</div><div class='del'>-	  [ruby-dev:24743]</div><div class='del'>-</div><div class='del'>-Mon Nov  8 22:20:19 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov  8 00:14:13 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add setup for mignw32 cross compiling.</div><div class='del'>-	  [ruby-talk:119413]</div><div class='del'>-</div><div class='del'>-Sun Nov  7 23:49:26 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bind-event methods accept multi substitution</div><div class='del'>-	  arguments.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvas.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/canvastag.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/texttag.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib: ditto.</div><div class='del'>-</div><div class='del'>-Sat Nov  6 14:58:44 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov  6 11:31:04 2004  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date.rb (_parse): checks whether zone was given.</div><div class='del'>-</div><div class='del'>-Sat Nov  6 00:46:27 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov  5 18:12:42 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/entry.rb: include X_Scrollable instead of Scrollable</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov  5 16:05:32 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: TkComm._at() supprts both of "@x,y" and "@x"</div><div class='del'>-</div><div class='del'>-Fri Nov  5 13:22:58 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: sorry. bug fix again.</div><div class='del'>-</div><div class='del'>-Fri Nov  5 13:17:54 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: bug fix</div><div class='del'>-</div><div class='del'>-Fri Nov  5 08:52:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark): stricter GC stack check.</div><div class='del'>-</div><div class='del'>-Fri Nov  5 08:52:48 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark): stricter GC stack check.</div><div class='del'>-</div><div class='del'>-Fri Nov  5 08:34:43 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov  4 21:25:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov  4 19:27:46 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_open): fix typo.</div><div class='del'>-</div><div class='del'>-Thu Nov  4 15:02:14 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov  4 09:11:35 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_mark): enable GC stack checking.</div><div class='del'>-</div><div class='del'>-Thu Nov  4 03:11:33 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_gsub): lock strings temporarily.  [ruby-dev:24687]</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (s_recvfrom): tmplock input buffer.</div><div class='del'>-	  [ruby-dev:24705]</div><div class='del'>-</div><div class='del'>-Wed Nov  3 22:32:12 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: On NetBSD don't use setruid() and setrgid().</div><div class='del'>-</div><div class='del'>-Wed Nov  3 22:24:17 2004  Daigo Moriwaki  &lt;techml@sgtpepper.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpauth/digestauth.rb: use Base64.encode64 to</div><div class='del'>-	  avoid warnings.</div><div class='del'>-</div><div class='del'>-Wed Nov  3 17:19:59 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* array.c (rb_ary_and): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_or): ditto.</div><div class='del'>-</div><div class='del'>-Wed Nov  3 17:13:02 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (pipe_open): fix compile error</div><div class='del'>-</div><div class='del'>-Wed Nov  3 16:58:07 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/font.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/itemfont.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/extconf.rb: install SUPPORT_STATUS</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib: some bug fixes (see ext/tk/ChangeLog.tkextlib)</div><div class='del'>-</div><div class='del'>-Wed Nov  3 16:30:41 2004  NARUSE, Yui  &lt;naruse@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/nkf: follow nkf 2.0.4</div><div class='del'>-</div><div class='del'>-Wed Nov  3 15:53:34 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/rss/test_maker_*.rb: added tests for RSS Maker.</div><div class='del'>-</div><div class='del'>-	* lib/rss/maker.rb: added RSS Maker.</div><div class='del'>-</div><div class='del'>-	* lib/rss/maker/*.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov  2 16:35:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov  2 16:05:21 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov  2 01:20:09 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov  1 13:59:28 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb (MANIFEST): do not use anymore, use extconf.rb instead.</div><div class='del'>-</div><div class='del'>-	* ext/enumerator/extconf.rb, ext/fcntl/extconf.rb,</div><div class='del'>-	  ext/stringio/extconf.rb: added.</div><div class='del'>-</div><div class='del'>-	* MANIFEST, ext/**/MANIFEST: removed.</div><div class='del'>-</div><div class='del'>-	* README.EXT, README.EXT.ja: remove MANIFEST stuff.</div><div class='del'>-</div><div class='del'>-Mon Nov  1 01:14:52 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_f_open): create copy of popen specifier.  [ruby-dev:24656]</div><div class='del'>-</div><div class='del'>-Mon Nov  1 00:36:48 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* main.c (_stklen): move to gc.c.</div><div class='del'>-</div><div class='del'>-Sun Oct 31 00:22:28 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_locktmp): lock string temporarily.</div><div class='del'>-</div><div class='del'>-	* string.c (str_independent): add tmplock check.</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): lock output string temporarily.</div><div class='del'>-	  [ruby-dev:24649]</div><div class='del'>-</div><div class='del'>-	* io.c (io_write): use rb_str_locktmp().</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct 30 06:53:24 2004  Peter Vanbroekhoven  &lt;peter.vanbroekhoven@cs.kuleuven.ac.be&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_XSTR should pass copy of literal string.</div><div class='del'>-</div><div class='del'>-Sat Oct 30 00:19:40 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (enum_sort_by): protect continuation jump in.</div><div class='del'>-	  [ruby-dev:24642]</div><div class='del'>-</div><div class='del'>-Fri Oct 29 21:27:51 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* file.c (rb_file_path), io.c (rb_io_closed): check if initialized.</div><div class='del'>-</div><div class='del'>-Fri Oct 29 10:00:30 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Oct 28 08:42:02 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 28 23:32:54 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 28 23:19:31 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: prefer relative path.  [ruby-talk:93037]</div><div class='del'>-</div><div class='del'>-Wed Oct 27 18:49:11 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 27 17:27:45 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (gc_sweep): recover ruby_in_compile variable.</div><div class='del'>-</div><div class='del'>-Wed Oct 27 09:17:30 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 26 23:52:32 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_getline): rs modification check should not interfere in the loop.</div><div class='del'>-</div><div class='del'>-Tue Oct 26 23:30:39 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 26 18:21:29 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 26 11:33:26 2004  David G. Andersen  &lt;dga@lcs.mit.edu&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 26 10:56:55 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 26 11:33:26 2004  David G. Andersen  &lt;dga@lcs.mit.edu&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 26 10:56:55 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 25 18:35:39 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (isUNCRoot): should check NUL after '.'.</div><div class='del'>-	  [ruby-dev:24590]</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (isUNCRoot): fixed buffer overrun.</div><div class='del'>-</div><div class='del'>-Mon Oct 25 08:03:26 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (get_backtrace): ignore illegal backtrace.  [ruby-dev:24587]</div><div class='del'>-</div><div class='del'>-Sun Oct 24 00:41:09 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct 23 22:18:32 2004  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct 23 00:20:55 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Oct 22 12:02:28 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_alias): was warning for wrong condition.</div><div class='del'>-	  [ruby-dev:24565]</div><div class='del'>-</div><div class='del'>-Fri Oct 22 10:36:37 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 22 00:22:31 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 22 00:20:33 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 21 21:32:30 2004  IWATSUKI Hiroyuki  &lt;don@na.rim.or.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 21 19:06:15 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 21 00:36:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_alias): should warn on method discarding.</div><div class='del'>-	  [ruby-dev:24546]</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 20 19:45:13 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (str_gsub): 	reentrant check.  [ruby-dev:24432]</div><div class='del'>-</div><div class='del'>-	* backport all SEGV bug fixes from CVS HEAD.  [ruby-dev:24536]</div><div class='del'>-</div><div class='del'>-Wed Oct 20 04:17:55 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/sdbm/init.c (fsdbm_delete_if): ditto.</div><div class='del'>-</div><div class='del'>-Wed Oct 20 01:37:18 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* eval.c (proc_dup): provide Proc#dup as well.  [ruby-talk:116915]</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 19 22:43:12 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 19 20:41:37 2004  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 19 17:24:11 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Oct 19 16:12:18 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c: backport from CVS HEAD</div><div class='del'>-</div><div class='del'>-Tue Oct 19 08:54:26 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h, object.c (rb_class_inherited_p): export.</div><div class='del'>-</div><div class='del'>-Tue Oct 19 08:46:57 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_upto): method result must be checked.  [ruby-dev:24504]</div><div class='del'>-</div><div class='del'>-	* eval.c (error_print): ditto.  [ruby-dev:24519]</div><div class='del'>-</div><div class='del'>-Mon Oct 18 23:37:05 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0): check inheritance by the internal function.</div><div class='del'>-	  [ruby-dev:24515]</div><div class='del'>-</div><div class='del'>-Mon Oct 18 15:58:01 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* range.c (range_step, range_each): need cast.</div><div class='del'>-</div><div class='del'>-Fri Oct 29 16:34:19 2004  Daiki Ueno  &lt;ueno@unixuser.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 18 07:26:21 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_file_truncate): discard read buffer before truncation.</div><div class='del'>-	  [ruby-dev:24197]</div><div class='del'>-</div><div class='del'>-Mon Oct 18 02:11:21 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Oct 18 02:04:11 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Oct 18 00:42:45 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Oct 17 23:03:48 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: TkTimer#start and restart accept a block</div><div class='del'>-</div><div class='del'>-Sun Oct 17 13:05:04 2004  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct 16 14:45:28 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/0.9.rb (RSS::Rss#to_s): removed garbage.</div><div class='del'>-</div><div class='del'>-Sat Oct 16 13:42:49 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct 16 13:34:56 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 15 18:04:35 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 15 12:43:09 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 14 14:34:01 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (MODE_BINMODE, MODE_BINARY): fixed reversed condition.</div><div class='del'>-</div><div class='del'>-Thu Oct 14 13:33:59 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: added link to Tutorial.</div><div class='del'>-</div><div class='del'>-Mon Oct 11 13:48:20 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/*: untabify</div><div class='del'>-</div><div class='del'>-Sun Oct 10 12:32:08 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct  9 21:23:37 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rss/converter.rb: changed to try to use Iconv for default</div><div class='del'>-	  conversion.</div><div class='del'>-</div><div class='del'>-	* lib/rss/rss.rb: 0.0.9 -&gt; 0.1.0.</div><div class='del'>-</div><div class='del'>-Sat Oct  9 19:50:36 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct  8 09:49:32 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): pointer modification check before each</div><div class='del'>-	  iteration.  [ruby-dev:24445]</div><div class='del'>-</div><div class='del'>-Fri Oct  8 01:13:05 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/optiondb.rb: make it more secure</div><div class='del'>-</div><div class='del'>-Thu Oct  7 23:47:57 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  7 17:36:25 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  7 12:55:04 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Oct  7 02:56:43 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c: use FMODE_APPEND.</div><div class='del'>-</div><div class='del'>-Thu Oct  7 01:05:33 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.errorInfo and Tk.errorCode</div><div class='del'>-</div><div class='del'>-Thu Oct  7 00:08:37 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct  6 09:21:00 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_mode_flags): preserve append mode flag.</div><div class='del'>-	  [ruby-dev:24436]</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_modenum_mode): do not use external output buffer.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* range.c (member_i): use RANGE_EACH_BREAK. [ruby-talk:114959]</div><div class='del'>-</div><div class='del'>-Mon Oct  4 14:04:14 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct  4 12:53:45 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/optiondb.rb: support definition of command</div><div class='del'>-	  resources on widgets</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/image.rb: bug fix</div><div class='del'>-</div><div class='del'>-Sun Oct  3 21:20:03 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/net/imap.rb (RTEXT_REGEXP): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (CTEXT_REGEXP): ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct  2 20:34:22 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (NEW_DVAR): extra semicolon.</div><div class='del'>-</div><div class='del'>-Sat Oct  2 00:42:20 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* marshal.c (r_bytes0): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (sort_by_i): re-entrance check added.  [ruby-dev:24399]</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): should freeze all reading buffer.</div><div class='del'>-	  [ruby-dev:24400]</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* string.c (rb_str_sum): wrong cast caused wrong result.</div><div class='del'>-	  [ruby-dev:24385]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* string.c (rb_str_sum): string may be altered.  [ruby-dev:24381]</div><div class='del'>-</div><div class='del'>-Mon Oct 11 17:51:34 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* io.c (rb_io_getline): add check for RS modification.</div><div class='del'>-	  [ruby-dev:24461]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Oct  1 11:40:14 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Oct  1 11:25:20 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/grid.rb: revive TkGrid.grid</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/pack.rb: revive TkPack.pack</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/place.rb: revive TkPlace.place</div><div class='del'>-</div><div class='del'>-Thu Sep 30 00:50:44 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_init): bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c (get_eval_string_core): accept a Regexp object</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: fix bug on 'exit' operation</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 29 10:58:07 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 27 13:46:45 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* marshal.c (w_object, r_object0): use accessors.</div><div class='del'>-</div><div class='del'>-Mon Sep 27 09:14:03 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep 24 16:09:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep 24 08:29:45 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* array.c (rb_ary_replace): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (ary_make_shared): freeze shared array. [ruby-dev:24325]</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 23 09:29:14 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Sep 22 13:38:12 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (rb_hash_rehash): add iteration check.  [ruby-dev:24301]</div><div class='del'>-</div><div class='del'>-	* st.c (st_foreach): add deep check.</div><div class='del'>-</div><div class='del'>-Wed Sep 22 13:06:14 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 22 00:11:12 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: Add documentation for fork()</div><div class='del'>-</div><div class='del'>-Wed Sep 22 09:04:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* array.c (rb_ary_reject_bang): ditto. [ruby-dev:24300]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_eql): ditto. [ruby-dev:24300]</div><div class='del'>-</div><div class='del'>-Tue Sep 21 18:29:49 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_equal): merge miss.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 20 00:24:19 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* enum.c (enum_sort_by): pedantic type check added.</div><div class='del'>-	  [ruby-dev:24291]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* array.c (rb_ary_or): ditto. [ruby-dev:24292]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_equal): wrong fix. [ruby-dev:24286]</div><div class='del'>-</div><div class='del'>-Sat Sep 18 15:02:22 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* array.c (rb_ary_diff): ditto. [ruby-dev:24274]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_select): ditto. [ruby-dev:24278]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_delete): ditto. [ruby-dev:24283]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_rindex): ditto. [ruby-dev:24275]</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Sep 18 14:10:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep 17 20:20:27 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (mkdir_p): backport from CVS HEAD 1.45. [ruby-core:03420]</div><div class='del'>-</div><div class='del'>-Fri Sep 17 17:11:08 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Sep 17 16:07:09 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: improve exit operation</div><div class='del'>-</div><div class='del'>-Fri Sep 17 15:01:57 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix SEGV when (thread_)vwait or</div><div class='del'>-	  (thread_)tkwait</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add alias wait_window to wait_destroy</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: follow the changes of ext/tk/lib/multi-tk.rb</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/remote-ip_sample2.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkoptdb-safeTk.rb: ditto</div><div class='del'>-</div><div class='del'>-Thu Sep 16 18:12:32 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Sep 16 15:49:28 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_intern): protect string argument from GC.</div><div class='del'>-	  [ruby-core:03411]</div><div class='del'>-</div><div class='del'>-Wed Sep 15 20:22:23 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 14 23:54:11 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 14 23:45:44 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 14 16:59:37 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix SEGV</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: improve safe-level handling of argument proc</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/multi-ip_sample.rb: rename of old 'safe-tk.rb'</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/safe-tk.rb: new sample script</div><div class='del'>-</div><div class='del'>-Tue Sep 14 00:15:15 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c: backported from HEAD.</div><div class='del'>-</div><div class='del'>-Mon Sep 13 19:16:33 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (blk_copy_prev): need frame_dup().  [ruby-dev:24103]</div><div class='del'>-</div><div class='del'>-Mon Sep 13 16:23:27 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 13 10:20:45 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (nil_inspect): fix typo.</div><div class='del'>-</div><div class='del'>-Mon Sep 13 01:03:02 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: improve control of preserv/release tcltkip</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: store original 'exit' command</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c: fix(?) SEGV</div><div class='del'>-</div><div class='del'>-Sun Sep 12 23:46:23 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_strdup): remove unnecessary code. (xmalloc never</div><div class='del'>-	  returns NULL.)</div><div class='del'>-</div><div class='del'>-	* util.c (ruby_getcwd): fix memory leak on failure.</div><div class='del'>-</div><div class='del'>-Sun Sep 12 02:41:58 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add TclTkIp#allow_ruby_exit? and</div><div class='del'>-	  allow_ruby_exit=</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/MANUAL.euc: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/MANUAL.eng: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix some reasons of SEGV</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/timer.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Sep 11 16:09:46 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Fix up cross-file class merging.</div><div class='del'>-</div><div class='del'>-Fri Sep 10 20:20:53 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_merge_tklist): fix suspicious</div><div class='del'>-	  pointer conversion.</div><div class='del'>-</div><div class='del'>-Fri Sep 10 02:43:54 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/template/kilmer.rb: James Buck's</div><div class='del'>-	  patch for call-seq.</div><div class='del'>-</div><div class='del'>-Thu Sep  9 13:58:56 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: follow changes of multi-tk.rb</div><div class='del'>-</div><div class='del'>-Thu Sep  9 11:46:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep  8 18:44:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep  8 15:19:49 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_init): cannot create a IP at level 4</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: allow a trusted slave IP to create slave IPs</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/listbox.rb: add TkListbox#value, value=, clear,	and</div><div class='del'>-	  erase</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: add TkText#clear and erase</div><div class='del'>-</div><div class='del'>-Tue Sep  7 15:17:49 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  6 11:08:50 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menu.rb(TkOptionMenubutton#insert): call correct method</div><div class='del'>-</div><div class='del'>-Mon Sep  6 11:00:47 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  6 07:51:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (cvar_cbase): singletons should refer outer cvar scope.</div><div class='del'>-	  [ruby-dev:24223]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): should preserve previous ruby_wrapper value.</div><div class='del'>-	  [ruby-dev:24226]</div><div class='del'>-</div><div class='del'>-Sat Sep  4 01:14:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep  3 17:47:58 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (make_struct): remove redefining constant when</div><div class='del'>-	  conflict.  [ruby-dev:24210]</div><div class='del'>-</div><div class='del'>-Fri Sep  3 11:31:44 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep  3 02:12:48 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix typo [ruby-talk:111266]</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: fix typo</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: improve safe-level treatment on slave IPs</div><div class='del'>-</div><div class='del'>-Fri Sep  3 01:54:20 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/extmk.rb: already built-in libraries satisfy dependencies.</div><div class='del'>-	  [ruby-dev:24028]</div><div class='del'>-</div><div class='del'>-Thu Sep  2 11:36:20 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_obj_instance_eval): backported from HEAD.</div><div class='del'>-</div><div class='del'>-Wed Sep  1 21:18:25 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/spinbox.rb: fix typo</div><div class='del'>-</div><div class='del'>-Tue Aug 31 18:24:04 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c (cbsubst_init): fix memory leak</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c (cbsubst_get_all_subst_keys): fix SEGV</div><div class='del'>-</div><div class='del'>-Tue Aug 31 16:04:22 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 31 12:30:36 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (del_root): fix SEGV</div><div class='del'>-</div><div class='del'>-Mon Aug 30 23:11:06 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug 30 22:40:30 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: 'restart' method accepts arguments</div><div class='del'>-</div><div class='del'>-Mon Aug 30 21:50:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* object.c: Add RDoc for Module.included.</div><div class='del'>-</div><div class='del'>-Mon Aug 30 15:10:46 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (GNU/k*BSD): fixed FTBFS on GNU/k*BSD. [ruby-dev:24051]</div><div class='del'>-</div><div class='del'>-Mon Aug 30 11:29:35 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (CreateChild): strip trailing spaces. [ruby-dev:24143]</div><div class='del'>-	  merge from HEAD.</div><div class='del'>-</div><div class='del'>-Sun Aug 29 14:08:56 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: compile error on bcc32 [ruby-dev:24081]</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string does not work</div><div class='del'>-</div><div class='del'>-Sat Aug 28 23:04:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_and): protect parameters from GC.</div><div class='del'>-	  [ruby-talk:110664]</div><div class='del'>-</div><div class='del'>-Thu Aug 26 04:38:29 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 24 17:30:00 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/cgi/session/pstore.rb (CGI::Session::PStore#initialize): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 24 14:40:16 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 24 09:09:01 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_initialize): ditto.</div><div class='del'>-</div><div class='del'>-Mon Aug 23 14:04:51 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_pending): new method</div><div class='del'>-	  OpenSSL::SSL#pending.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb: should not use select.</div><div class='del'>-</div><div class='del'>-Mon Aug 23 12:40:56 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Aug 22 01:15:31 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 21 06:41:16 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb (find_tcl, find_tk): find stub library.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Aug 19 16:29:45 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: Fail to treat a hash value of 'font' option.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bindinfo cannot return '%' substiturion infomation.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/menu.rb: typo bug.</div><div class='del'>-</div><div class='del'>-Thu Aug 19 15:15:24 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (free_dir): fix memory leak.  reported by yamamoto</div><div class='del'>-	  madoka.</div><div class='del'>-</div><div class='del'>-Thu Aug 19 11:00:00 2004  Akiyoshi, Masamichi  &lt;masamichi.akiyoshi@hp.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Aug 19 06:07:45 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Aug 18 23:41:33 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 18 17:10:12 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 18 12:52:55 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 17 17:20:59 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 17 01:36:32 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 14 13:09:10 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: backport from CVS HEAD (rev1.44).</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: cp_r should copy symlink itself, except cp_r</div><div class='del'>-	  root.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new option mv :force.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: new module FileUtils::DryRun.</div><div class='del'>-</div><div class='del'>-Sat Aug 14 02:48:16 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Aug 13 13:23:17 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/xmlrpc/server.rb: refine example code.</div><div class='del'>-</div><div class='del'>-Wed Aug 11 17:17:50 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (RPATHFLAG): stop setting RPATHFLAG on Interix.</div><div class='del'>-</div><div class='del'>-Sun Aug  8 00:43:31 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/implicit.c: added sexagecimal float#base60.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (yaml_org_handler): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug  7 00:50:01 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c: Zlib::GzipReader#read(0) returns "" instead of nil.</div><div class='del'>-</div><div class='del'>-Tue Aug  3 13:49:20 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/namespace.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: add Tk::TreeCtrl.loupe</div><div class='del'>-</div><div class='del'>-Mon Aug  2 18:04:21 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug  2 11:53:06 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Aug  2 11:48:29 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 31 17:40:16 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 31 05:47:37 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb (YAML::load_file, YAML::parse_file): added.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Jul 30 16:10:54 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_toUTF8_core): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb (Tk::Encoding.encoding_convertfrom): bug fix.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb (Tk::Encoding.encoding_convertto): ditto.</div><div class='del'>-</div><div class='del'>-Wed Jul 28 18:59:17 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jul 28 01:04:44 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (run_final): wrong order of data. [ruby-dev:23984]</div><div class='del'>-</div><div class='del'>-Tue Jul 27 07:05:04 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): copy on write for argument local variable</div><div class='del'>-	  assignment.</div><div class='del'>-</div><div class='del'>-	* eval.c (assign): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* object.c (Init_Object): "===" calls rb_obj_equal() directly.</div><div class='del'>-	  [ruby-list:39937]</div><div class='del'>-</div><div class='del'>-Mon Jul 26 11:22:55 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick::HTTPUtils.escape): should</div><div class='del'>-	  escape space.</div><div class='del'>-</div><div class='del'>-Sun Jul 25 11:05:21 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 24 13:32:47 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 23 16:40:25 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 23 09:03:16 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (disconnected?): new method. (backported from HEAD)</div><div class='del'>-</div><div class='del'>-Thu Jul 22 16:41:54 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/cgi/session/pstore.rb (CGI::Session::Pstore#initialize):</div><div class='del'>-	  ditto.</div><div class='del'>-</div><div class='del'>-Thu Jul 22 00:02:21 2004  Masahiro Kitajima  &lt;katonbo@katontech.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 20 09:15:17 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: File.link raises EINVAL on BeOS.</div><div class='del'>-</div><div class='del'>-Mon Jul 19 01:15:07 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Jul 18 16:14:29 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jul 18 08:13:58 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sprintf.c (rb_f_sprintf): remove extra sign digit.</div><div class='del'>-</div><div class='del'>-Sun Jul 18 03:21:42 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (range): use NULL instead of 0.</div><div class='del'>-</div><div class='del'>-	* dir.c (range): get rid of a gcc 3.4 warning.</div><div class='del'>-</div><div class='del'>-Sun Jul 18 03:12:11 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 17 23:54:59 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/variable.rb: TkVariable#ref returns a TkVariable object</div><div class='del'>-</div><div class='del'>-Sat Jul 17 22:04:44 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/ldap.rb: method hierarchical? should be in URI::LDAP.</div><div class='del'>-</div><div class='del'>-Sat Jul 17 18:29:07 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): not to show same error messages twice.</div><div class='del'>-</div><div class='del'>-Sat Jul 17 13:13:32 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 17 05:26:27 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/diagram.rb: Incorporate Micheal Neuman's</div><div class='del'>-	  client-side imagemao patch</div><div class='del'>-</div><div class='del'>-Sat Jul 17 01:57:03 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 16 22:30:28 2004  Michael Neumann  &lt;mneumann@ntecs.de&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 16 15:23:53 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Jul 16 11:31:49 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 16 11:20:00 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul 16 11:17:38 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* error.c (exit_initialize): use EXIT_SUCCESS instead of 0.</div><div class='del'>-	  [ruby-dev:23913]</div><div class='del'>-</div><div class='del'>-	* error.c (exit_success_p): new method SystemExit#success?.</div><div class='del'>-	  [ruby-dev:23912]</div><div class='del'>-</div><div class='del'>-	* error.c (syserr_initialize): initialization for subclasses.</div><div class='del'>-	  [ruby-dev:23912]</div><div class='del'>-</div><div class='del'>-Thu Jul 15 23:53:38 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 15 22:59:48 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 15 20:29:15 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul 15 10:15:04 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/, ext/tcltklib/: bug fix</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb (_genobj_for_tkwidget): support autoload Tk ext</div><div class='del'>-	  classes</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/: add Iwidget and TkTable extension support</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkextlib/: add samples of Iwidget and TkTable</div><div class='del'>-</div><div class='del'>-Wed Jul 14 18:08:37 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Jul 14 12:29:07 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_float.rb (test_strtod): add test for bug fix.</div><div class='del'>-</div><div class='del'>-Wed Jul 14 00:31:15 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jul 13 19:39:12 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/uri/test_generic.rb (TestGeneric#test_merge): added tests.</div><div class='del'>-</div><div class='del'>-Tue Jul 13 15:51:45 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Jul 13 00:50:48 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Support call-seq: for Ruby files.</div><div class='del'>-</div><div class='del'>-Mon Jul 12 21:20:36 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 10 09:30:24 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jul 10 04:21:56 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Jul  9 22:36:36 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* numeric.c: rdoc patch.</div><div class='del'>-</div><div class='del'>-Fri Jul  9 19:26:39 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul  9 14:28:54 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jul  9 01:47:08 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul  8 22:52:19 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jul  1 18:36:08 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tcltklib : bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk : bug fix and add Tcl/Tk extension support libraries</div><div class='del'>-</div><div class='del'>-Thu Jul  1 11:59:45 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/openssl_missing.c (EVP_CIPHER_CTX_copy): new function.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jul  1 04:08:30 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jul  1 03:33:55 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkey_rsa.c (ossl_rsa_initialize): ditto.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jul  1 03:16:09 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/opnessl/lib/openssl/ssl.rb</div><div class='del'>-	  (OpenSSL::SSL::SocketForwarder#listen): fix typo.</div><div class='del'>-</div><div class='del'>-Wed Jun 30 11:38:51 2004  Mikael Brockman  &lt;phubuh@phubuh.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): should not be NULL.  [ruby-core:03098]</div><div class='del'>-</div><div class='del'>-Wed Jun 30 02:53:24 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jun 29 10:31:19 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval_cmd, rb_thread_trap_eval): restore safe level.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Jun 28 14:57:56 2004  Jeff Mitchell  &lt;quixoticsycophant@yahoo.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jun 28 00:30:19 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/drb/*.rb: using 'DRb.thread.join' instead of 'gets'</div><div class='del'>-</div><div class='del'>-Sun Jun 27 22:39:51 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/rss/tdiary_plugin/rss-recent.rb: supported Hiki.</div><div class='del'>-</div><div class='del'>-Sun Jun 27 12:19:46 2004  Kouhei Sutou  &lt;kou@cozmixng.org&gt;</div><div class='del'>-</div><div class='del'>-	* {lib,sample,test}/rss: added RSS Parser. [ruby-dev:23780]</div><div class='del'>-</div><div class='del'>-Sat Jun 26 11:07:30 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb (dir_config): quote directory names if necessary.</div><div class='del'>-	  [ruby-talk:104505]</div><div class='del'>-</div><div class='del'>-Fri Jun 25 15:33:19 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/extconf.rb: check stricter.  [ruby-talk:104501]</div><div class='del'>-</div><div class='del'>-	* ext/iconv/extconf.rb: include iconv.h for libiconv.  [ruby-dev:22715]</div><div class='del'>-</div><div class='del'>-Fri Jun 25 08:31:29 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_atfork): remove "fork terminates thread"</div><div class='del'>-	  warning.  [ruby-dev:23768]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Jun 25 02:04:23 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 24 14:23:29 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 24 01:32:43 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 23 22:23:37 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 23 01:45:27 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 23 00:20:20 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 23 00:00:25 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_initialize): should check fcntl result.  [ruby-dev:23742]</div><div class='del'>-</div><div class='del'>-Tue Jun 22 21:11:36 2004  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (OLE_FREE): should not call CoFreeUnuse-</div><div class='del'>-	  dLibraries().</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ole_event_free): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (ole_hresult2msg): truncate error message</div><div class='del'>-	  before CR.</div><div class='del'>-</div><div class='del'>-Tue Jun 22 16:47:42 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jun 21 10:19:23 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jun 19 13:24:15 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_call): allow changing $SAFE.  [ruby-dev:23713]</div><div class='del'>-</div><div class='del'>-Fri Jun 18 23:12:22 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 16 23:05:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* object.c (rb_mod_freeze): prepare string representation before</div><div class='del'>-	  freezing. [ruby-talk:103646]</div><div class='del'>-</div><div class='del'>-Wed Jun 16 16:04:40 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun 16 16:01:17 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (stack_grow_direction): memoize the direction.</div><div class='del'>-</div><div class='del'>-	* gc.c (Init_stack): should always move to end of VALUE.</div><div class='del'>-</div><div class='del'>-Tue Jun 15 12:10:04 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: bug fix (TkWindow#grab)</div><div class='del'>-</div><div class='del'>-Mon Jun 14 18:23:27 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/remote-tk.rb: bug fix</div><div class='del'>-</div><div class='del'>-Sun Jun 13 00:23:04 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/extconf.rb: [EXPERIMENTAL] MacOS X (darwin) support</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menubar.rb: improve supported menu_spec</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/menuspec.rb: [add] menu_spec support library</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/root.rb: add menu_spec support</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/text.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk/toplevel.rb: add menu_spec support</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/menubar?.rb: [add] sample of menu_spec usage</div><div class='del'>-</div><div class='del'>-Sat Jun 12 11:15:53 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (target_os): strip -gnu suffix on Linux.</div><div class='del'>-</div><div class='del'>-Fri Jun 11 17:08:21 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* config.guess: Restore a wrongly removed hyphen.</div><div class='del'>-</div><div class='del'>-Fri Jun 11 14:30:08 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* config.guess: Attempt to avoid system name change on</div><div class='del'>-	  Darwin platforms also.</div><div class='del'>-</div><div class='del'>-Fri Jun 11 14:22:45 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jun 10 19:19:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/sdbm/init.c (fsdbm_store): sdbm should use StringValue().</div><div class='del'>-	  [ruby-talk:103062]</div><div class='del'>-</div><div class='del'>-Wed Jun  9 18:04:14 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Jun  9 17:39:37 2004  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* configure.in: Add support for DragonFly BSD.</div><div class='del'>-</div><div class='del'>-Wed Jun  2 20:16:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jun  2 12:41:53 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May 28 11:20:31 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): bad influence on frame node.</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): reverted wrongly removed condition.  [ruby-dev:23638]</div><div class='del'>-</div><div class='del'>-Thu May 27 23:15:18 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/logger.rb: leading 0 padding of timestamp usec part.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	    must be just;</div><div class='del'>-</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='add'>+		def read_all()</div><div class='add'>+	  	  ary = {}</div><div class='add'>+	  	  while gets()</div><div class='add'>+		    ary.push($_)</div><div class='ctx'> 		  end</div><div class='ctx'> 		end</div><div class='del'>-	      end</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	  setting mode properly is user's responsibility now.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/csv/test_csv.rb: updated.</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_float.rb: added test_strtod to test Float("0").</div><div class='del'>-</div><div class='del'>-Thu May 27 21:37:50 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb (Pathname#initialize): refine pathname initialization</div><div class='del'>-	  by pathname.</div><div class='del'>-</div><div class='del'>-Thu May 27 20:22:05 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_fwrite): check all case errno != 0 [ruby-dev:23648]</div><div class='del'>-</div><div class='del'>-Thu May 27 14:53:13 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 26 14:19:42 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 26 13:59:17 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 26 13:56:03 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 26 13:14:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_init_copy): copy also positions.  [ruby-talk:100910]</div><div class='del'>-</div><div class='del'>-Wed May 26 00:00:00 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/yaml/baseemitter.rb (indent_text): simpler flow block code.</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: added rdoc to beginning of lib.</div><div class='del'>-</div><div class='del'>-Mon May 24 10:46:26 2004  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/template/html/html.rb: SYSTEM identifiers</div><div class='del'>-	  must be absolute URIs</div><div class='del'>-</div><div class='del'>-Sat May 22 12:00:04 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add new encodings in rexml.</div><div class='del'>-</div><div class='del'>-	* ext/tk/MANIFEST: add recent files.</div><div class='del'>-</div><div class='del'>-Sat May 22 05:37:11 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May 21 09:22:05 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 20 17:02:03 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (check_sizeof): define result size.  [ruby-core:02911]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_header): macro name should not include equal</div><div class='del'>-	  sign.</div><div class='del'>-</div><div class='del'>-Thu May 20 15:59:50 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c: fix SEGV. [ruby-dev:23550]</div><div class='del'>-</div><div class='del'>-Thu May 20 14:35:52 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 20 12:38:06 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c (flo_eq): always check if operands are NaN.</div><div class='del'>-	  [ruby-list:39685]</div><div class='del'>-</div><div class='del'>-Thu May 20 12:34:39 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 20 12:22:13 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 19 11:09:00 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue May 18 14:00:46 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* node.h (NEW_DSTR): adjust list length.</div><div class='del'>-</div><div class='del'>-	* parse.y (literal_concat): ditto.</div><div class='del'>-</div><div class='del'>-Mon May 17 16:14:25 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon May 17 10:13:33 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_getnameinfo): ditto.</div><div class='del'>-</div><div class='del'>-Mon May 17 01:15:23 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb: removed fallback to pure Ruby parser.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/yaml/baseemitter.rb (node_text): rewriting folded scalars.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/syck.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/node.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/rubyext.c (yaml_org_handler): symbols loaded only</div><div class='del'>-	  if scalar style is plain.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon May 17 00:03:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: Cosmetic documentation changes.</div><div class='del'>-</div><div class='del'>-Sun May 16 22:36:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May 16 20:55:49 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May 16 13:10:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May 15 01:41:34 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat May 15 01:33:12 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May 14 22:08:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May 14 18:39:25 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May 14 12:11:43 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 13 15:47:30 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 13 14:23:45 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu May 13 13:01:30 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/mailto.rb (URI::MailTo::to_s): should include fragment.</div><div class='del'>-</div><div class='del'>-Thu May 13 11:04:08 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): always add with null for 'Z'.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): terminated by null for 'Z'.  [ruby-talk:98281]</div><div class='del'>-</div><div class='del'>-Wed May 12 19:59:43 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_type, check_sizeof): replace unusable characters.</div><div class='del'>-	  [ruby-talk:99788]</div><div class='del'>-</div><div class='del'>-Wed May 12 17:41:42 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 12 14:37:27 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 12 13:20:19 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May 12 11:51:08 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_obj_singleton_methods): fix rdoc</div><div class='del'>-</div><div class='del'>-Mon May 10 21:44:42 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon May 10 16:45:21 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): warning during eval should not cause deadlock.</div><div class='del'>-	  [ruby-talk:98651]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): raise TypeError exception for superclass</div><div class='del'>-	  mismatch.  [ruby-list:39567]</div><div class='del'>-</div><div class='del'>-Mon May 10 12:11:37 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon May 10 12:11:37 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May  9 22:37:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May  7 21:50:21 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May  7 21:31:56 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (fu_list): Array() breaks pathes including "\n".</div><div class='del'>-	  [ruby-core:02843]</div><div class='del'>-</div><div class='del'>-Fri May  7 11:25:53 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri May  7 10:00:05 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/tkutil.c (get_eval_string_core): bug fix. [ruby-dev:23466]</div><div class='del'>-</div><div class='del'>-Thu May  6 22:13:17 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (ippaddr): use NUMERICHOST if can not resolve</div><div class='del'>-	  hostname.</div><div class='del'>-</div><div class='del'>-Thu May  6 14:22:29 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/yaml.rb (YAML::object_maker): now uses Object.allocate.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: fixed transfer methods on structs, broke it</div><div class='del'>-	  last commit.</div><div class='del'>-</div><div class='del'>-Thu May  6 11:40:28 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (string): accept NIL.</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (body_type_basic): allow body-fields omissions.</div><div class='del'>-</div><div class='del'>-Thu May  6 01:59:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed May  5 03:40:29 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/ring.rb: use recv instead of recvfrom.</div><div class='del'>-</div><div class='del'>-Tue May  4 23:52:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* lib/gserver.rb: documented</div><div class='del'>-</div><div class='del'>-Tue May  4 23:46:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* lib/xmlrpc/README.txt: introduced for documentation purposes</div><div class='del'>-</div><div class='del'>-Mon May  3 09:47:24 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun May  2 01:04:38 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib, ext/tk: renewal Ruby/Tk</div><div class='del'>-</div><div class='del'>-Fri Apr 30 20:08:41 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (SIZEOF_TIME_T): support SIZEOF_TIME_T == SIZEOF_INT.</div><div class='del'>-</div><div class='del'>-Tue Apr 27 13:12:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): too many line trace call. (ruby-bugs PR#1320)</div><div class='del'>-</div><div class='del'>-Tue Apr 27 08:41:28 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: passing Range tests.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h: version 0.44.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/token.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c: fixed segfault if an anchor has been released already.</div><div class='del'>-</div><div class='del'>-	* ext/syck/node.c (syck_free_members): organized order of free'd nodes.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* README.EXT, README.EXT.ja: fixed wrong function signature.</div><div class='del'>-	  [ruby-talk:98349]</div><div class='del'>-</div><div class='del'>-Mon Apr 26 21:40:09 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Apr 24 10:38:31 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 23 23:26:13 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* version.c (ruby_show_copyright): obtain copyright year from</div><div class='del'>-	  RUBY_RELEASE_YEAR.</div><div class='del'>-</div><div class='del'>-	* win32/resource.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/resource.rb: include winver.h for older WindowsCE.</div><div class='del'>-</div><div class='del'>-Fri Apr 23 16:38:46 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 23 14:52:08 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 23 14:14:38 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Apr 22 04:15:36 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (aref_args): should pass expanded list.  [ruby-core:02793]</div><div class='del'>-</div><div class='del'>-Thu Apr 22 01:12:57 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Apr 21 22:57:27 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/rinda.rb, test/rinda/test_rinda.rb: check Hash tuple size.</div><div class='del'>-</div><div class='del'>-Wed Apr 21 20:05:00 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr 19 18:11:15 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Apr 19 08:19:58 2004  Doug Kearns  &lt;djkea2@mugca.its.monash.edu.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr 19 08:14:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 16 22:33:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c: nearly finished RDoc comments.</div><div class='del'>-</div><div class='del'>-Fri Apr 16 17:04:07 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr 16 08:27:02 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Apr 15 23:21:52 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (pst_success_p): new method Process::Status#success?.</div><div class='del'>-	  [ruby-dev:23385]</div><div class='del'>-</div><div class='del'>-Thu Apr 15 17:12:13 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 14 11:29:56 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 14 13:06:35 2004  Doug Kearns  &lt;djkea2@mugca.its.monash.edu.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 14 11:06:38 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr 14 11:03:22 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h: include &lt;net/socket.h&gt; to get fd_set definition in BeOS.</div><div class='del'>-</div><div class='del'>-Tue Apr 13 23:06:30 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Apr 13 19:54:29 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: should not overwrite HTTP request header.</div><div class='del'>-	  [ruby-list:39543]</div><div class='del'>-</div><div class='del'>-Tue Apr 13 01:30:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr 12 19:11:29 2004  Eric Hodel  &lt;drbrain@segment7.net&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (rb_gc_copy_finalizer): typo.  [ruby-core:02774]</div><div class='del'>-</div><div class='del'>-Mon Apr 12 18:52:32 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_init_i): should return</div><div class='del'>-	  a value.</div><div class='del'>-</div><div class='del'>-Mon Apr 12 10:43:47 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Apr 12 10:27:37 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: backport SIZEOF_TIME_T definition from 1.9.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-	* wince/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-Sun Apr 11 19:12:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Apr 11 10:47:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Apr 10 23:51:13 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Apr 10 00:00:19 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Apr  7 00:19:50 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/rinda.rb: fix hash tuple bug.</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb</div><div class='del'>-</div><div class='del'>-Tue Apr  6 18:24:18 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_reopen): should use rb_io_check_io().</div><div class='del'>-</div><div class='del'>-Tue Apr  6 16:46:09 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: check the size of time_t.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Apr  6 13:21:30 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (make_hostent): must return value.</div><div class='del'>-</div><div class='del'>-Tue Apr  6 00:05:30 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/rinda.rb: add require 'drb/drb'</div><div class='del'>-</div><div class='del'>-Mon Apr  5 08:18:23 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Apr  4 20:33:42 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_load): make $LOADED_FEATURES built-in.</div><div class='del'>-	  [ruby-dev:23299]</div><div class='del'>-</div><div class='del'>-	* ruby.c (ruby_prog_init): make $PROGRAM_NAME built-in.</div><div class='del'>-</div><div class='del'>-	* lib/English.rb: remove $LOADED_FEATURES and $PROGRAM_NAME.</div><div class='del'>-</div><div class='del'>-Sun Apr  4 14:01:20 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Apr  3 17:11:05 2004  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h: version 0.43.</div><div class='del'>-</div><div class='del'>-	* ext/syck/lib/gram.c: allow root-level inline collections.</div><div class='del'>-	 [ruby-talk:94922]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/bytecode.c: turn off default implicit typing.</div><div class='del'>-</div><div class='del'>-	* ext/syck/implicit.c: detect base60 integers.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr  2 17:27:17 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr  2 15:13:44 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr  2 14:35:26 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Apr  2 07:31:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Apr  1 22:55:33 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_rb.rb: Allow rdoc comments in</div><div class='del'>-	  =begin rdoc/=end</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Apr  1 22:55:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/ri/ri_options.rb: Fix undefined variable warning.</div><div class='del'>-</div><div class='del'>-Thu Apr  1 19:58:37 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Mar 31 19:06:23 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar 31 12:04:04 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* intern.h: provide proper prototypes.  [ruby-core:02724]</div><div class='del'>-</div><div class='del'>-	* ruby.h: missing.h is now prerequisite to intern.h.</div><div class='del'>-</div><div class='del'>-Tue Mar 30 20:25:34 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Mar 28 14:16:59 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (auth): failed when account/password include "%".</div><div class='del'>-	  [ruby-talk:95933]</div><div class='del'>-</div><div class='del'>-Sat Mar 27 21:40:41 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb: permit extra semicolon in content-type field.</div><div class='del'>-</div><div class='del'>-Sat Mar 27 10:40:48 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 25 23:28:52 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 25 23:15:24 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/ri/ri_options.rb (RI::Options::show_version):</div><div class='del'>-	  Add --version option</div><div class='del'>-</div><div class='del'>-Thu Mar 25 04:16:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 25 03:57:47 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 25 02:00:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar 24 21:17:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar 24 18:48:26 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb (init_mkmf): $INCFLAGS also should be lazy-evaluated.</div><div class='del'>-</div><div class='del'>-Wed Mar 24 12:32:56 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Mar 24 11:11:26 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar 22 16:19:57 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.1: add -width option to .Bl for old groff.</div><div class='del'>-</div><div class='del'>-Sun Mar 21 21:11:16 2004  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/shell/*: bug fix for Shell#system(command_line_string).</div><div class='del'>-</div><div class='del'>-Sat Mar 20 20:57:10 2004  David Black  &lt;dblack@wobblini.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/scanf.rb: Backported 1.9 branch</div><div class='del'>-	  modifications/corrections to 1.8 branch</div><div class='del'>-</div><div class='del'>-Sat Mar 20 23:51:03 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_require_safe): preserve old ruby_errinfo.</div><div class='del'>-	  [ruby-talk:95409]</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar 20 15:25:36 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar 20 09:52:33 2004  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Mar 19 01:55:57 2004  Mauricio Fernandez  &lt;batsman.geo@yahoo.com&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (rb_io_sync): need not to check writable. [ruby-core:02674]</div><div class='del'>-</div><div class='del'>-Thu Mar 18 21:44:38 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: backport drb.rb 1.16.</div><div class='del'>-</div><div class='del'>-Fri Mar 18 17:49:51 2005  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c (make_struct): allow const_id for accessor names.</div><div class='del'>-	  [ruby-core:04585]</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Mar 18 16:22:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar 17 14:44:43 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (range): fix possible "\0" overrun. (in case of "\0-")</div><div class='del'>-</div><div class='del'>-Mon Mar 15 07:39:13 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Mar 13 14:28:16 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* test/drb/test_drbssl.rb: rescue LoadError. (Barkport from main</div><div class='del'>-	  trunk)</div><div class='del'>-</div><div class='del'>-	* test/drb/test_drbunix.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Mar 10 22:28:09 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Mar 10 16:28:42 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (break_jump): break innermost loop (or thread or proc).</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): set exit_value for block break.</div><div class='del'>-</div><div class='del'>-Wed Mar 10 15:58:43 2004  Ryan Davis  &lt;ryand@zenspider.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar  9 13:04:26 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar  8 19:32:28 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar  8 15:31:41 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (range): treat incomplete '[' as ordinary character (like</div><div class='del'>-	  has_magic does).</div><div class='del'>-</div><div class='del'>-	* dir.c (range):  Cancel above change. More discussion is needed.</div><div class='del'>-</div><div class='del'>-Sun Mar  7 22:37:46 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* test/drb/ut_drb.rb: use 'druby://localhost:0'. [ruby-dev:23078]</div><div class='del'>-</div><div class='del'>-	* test/drb/ut_eval.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/drb/ut_large.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/drb/ut_safe1.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/drb/ut_drb_drbssl.rb: use 'drbssl://localhost:0'.</div><div class='del'>-</div><div class='del'>-Sun Mar  7 16:22:26 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (lex.c): use $? instead of $&lt;.</div><div class='del'>-</div><div class='del'>-Fri Mar  5 00:54:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Mar  2 12:32:59 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Mar  1 12:24:10 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb 29 23:14:53 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb 28 10:58:49 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add test_erb.rb</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb 27 01:00:09 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb, test/drb/drbtest.rb: require drb/eq.rb by default</div><div class='del'>-</div><div class='del'>-Wed Feb 25 21:16:25 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* instruby.rb: use path name expansion of cmd.exe.</div><div class='del'>-</div><div class='del'>-Wed Feb 25 09:35:22 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 18:59:37 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 13:22:21 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 07:23:30 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 06:40:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 06:40:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 06:32:27 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 06:16:22 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 06:08:47 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 24 06:08:25 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Escape contant values.</div><div class='del'>-</div><div class='del'>-Tue Feb 24 03:45:06 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_config.c (Init_ossl_config): include Enumerable.</div><div class='del'>-</div><div class='del'>-Mon Feb 23 09:16:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb 22 09:54:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* re.c: corrected documentation format (again)</div><div class='del'>-</div><div class='del'>-Sun Feb 22 09:43:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* re.c: corrected documentation format (rb_reg_initialize_m)</div><div class='del'>-</div><div class='del'>-Sat Feb 21 22:36:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* ext/zlib/zlib.c: documented, but needs more effort.</div><div class='del'>-</div><div class='del'>-Sat Feb 21 11:12:15 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing/os2.c, missing/x68.c: typo fix.  pointed out by greentea.</div><div class='del'>-</div><div class='del'>-Fri Feb 20 18:59:47 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 19 23:24:16 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 19 23:24:16 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 19 22:39:04 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 19 22:19:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ostruct.rb: documented</div><div class='del'>-</div><div class='del'>-Thu Feb 19 21:28:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: improved documentation</div><div class='del'>-</div><div class='del'>-Thu Feb 19 03:10:52 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: synchronized with main trunk (rev 1.11).</div><div class='del'>-</div><div class='del'>-Thu Feb 19 02:30:34 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: documentation checked.</div><div class='del'>-</div><div class='del'>-Thu Feb 19 00:11:05 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Feb 18 22:52:00 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/unix.rb: remove O_NONBLOCK, thanks \ay</div><div class='del'>-</div><div class='del'>-Wed Feb 18 22:47:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: documented</div><div class='del'>-</div><div class='del'>-Wed Feb 18 22:03:11 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/*: should not depend on $KCODE.</div><div class='del'>-</div><div class='del'>-Wed Feb 18 17:18:01 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c: need to include &lt;olectl.h&gt; on Cygwin.</div><div class='del'>-</div><div class='del'>-Wed Feb 18 10:40:38 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 17 23:40:34 2004  Guy Decoux  &lt;ts@moulon.inra.fr&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 17 23:28:45 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/marshaltestlib.rb: common marshal testcase added.</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_marshal.rb: use above testsuite.</div><div class='del'>-</div><div class='del'>-	* test/soap/marshal/test_marshal.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/soap/marshal/cmarshal.rb: removed (not used).</div><div class='del'>-</div><div class='del'>-Tue Feb 17 10:51:23 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_emitter_end_object): takes only one arg.</div><div class='del'>-</div><div class='del'>-Tue Feb 17 01:35:28 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb 17 01:24:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (config.h): add newer checks.</div><div class='del'>-</div><div class='del'>-	* wince/Makefile.sub (config.h): define NEED_IO_SEEK_BETWEEN_RW.</div><div class='del'>-</div><div class='del'>-Tue Feb 17 00:38:10 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb: TupleSpace#initialize, stop doubling timeout</div><div class='del'>-</div><div class='del'>-Tue Feb 17 00:18:03 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* test/rinda/test_rinda.rb: import test_rinda.rb</div><div class='del'>-</div><div class='del'>-Tue Feb 17 00:14:30 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: avoid warning "Redefinition of macro</div><div class='del'>-	  'HAVE_GETLOGIN'".</div><div class='del'>-</div><div class='del'>-	* vms/config.h_in: ditto.</div><div class='del'>-</div><div class='del'>-Mon Feb 16 23:28:14 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/csv.rb: document reduction.  [ruby-core:02429]</div><div class='del'>-</div><div class='del'>-Mon Feb 16 22:08:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Feb 16 20:41:32 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: show more warnings. (refering to mingw)</div><div class='del'>-</div><div class='del'>-	* bcc32/setup.mak: ditto.</div><div class='del'>-</div><div class='del'>-Mon Feb 16 13:39:44 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (rb_glob, rb_globi): add const.</div><div class='del'>-</div><div class='del'>-	* ruby.h: ditto.</div><div class='del'>-</div><div class='del'>-Mon Feb 16 02:16:33 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub: should warn suspicious pointer conversion.</div><div class='del'>-</div><div class='del'>-	* bcc32/setup.mak: ditto.</div><div class='del'>-</div><div class='del'>-Sun Feb 15 19:06:42 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/tuplespace.rb: TupleSpace#read(tpl, 0), raise</div><div class='del'>-	  RequestExpiredError if not found.</div><div class='del'>-</div><div class='del'>-Sun Feb 15 15:56:46 2004  Masaki Suketa  &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c: add IDispatch wrapper in val2variant.</div><div class='del'>-	  Thanks, arton.</div><div class='del'>-</div><div class='del'>-Sun Feb 15 01:46:05 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Feb 14 11:29:41 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/drb/*: import lib/drb/sample</div><div class='del'>-</div><div class='del'>-Sat Feb 14 11:08:23 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: add pretty_print, thanks gotoken.</div><div class='del'>-</div><div class='del'>-Fri Feb 13 12:35:08 2004  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 12 21:45:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb: documented</div><div class='del'>-</div><div class='del'>-Thu Feb 12 21:25:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* lib/base64.rb: backported from HEAD (modularised and documented)</div><div class='del'>-</div><div class='del'>-Thu Feb 12 20:31:48 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Feb 12 02:23:56 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb: use assert_raise instead of assert_raises.</div><div class='del'>-</div><div class='del'>-	* lib/pp.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'>-	  use TSortHash and TSortArray instead of Hash and Array in test.</div><div class='del'>-</div><div class='del'>-Wed Feb 11 20:01:12 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Feb 10 16:43:56 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (umethod_bind): purge unused check.  [ruby-dev:22850]</div><div class='del'>-</div><div class='del'>-Mon Feb  9 17:16:00 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/parsers/parse_c.rb: escape '{' and '}' to avoid warnings.</div><div class='del'>-</div><div class='del'>-Mon Feb  9 13:00:55 2004  Hirokazu Yamamoto  &lt;ocean@m2.ccsnet.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (fnmatch): File.fnmatch('*?', 'a') should return true.</div><div class='del'>-	  [ruby-dev:22815]</div><div class='del'>-</div><div class='del'>-	* dir.c (fnmatch): File.fnmatch('\[1\]' , '[1]') should return true.</div><div class='del'>-	  [ruby-dev:22819]</div><div class='del'>-</div><div class='del'>-Sun Feb  8 16:46:13 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb  6 22:48:16 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/html_generator.rb (gen_url): Support</div><div class='del'>-	  https in RDoc hyperlinks</div><div class='del'>-</div><div class='del'>-Fri Feb  6 22:41:22 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb  6 22:22:50 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Feb  6 00:48:37 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb (PrettyPrint#first?): obsoleted.</div><div class='del'>-</div><div class='del'>-Thu Feb  5 23:56:55 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb (PrettyPrint#seplist): added.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/set.rb (Set#pretty_print): use seplist.</div><div class='del'>-</div><div class='del'>-Wed Feb  4 02:12:06 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Feb  3 08:04:57 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb (Struct#pretty_print_cycle): follow 1.8 style.</div><div class='del'>-</div><div class='del'>-Mon Feb  2 19:33:49 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: backport from 1.9 for Interix.</div><div class='del'>-</div><div class='del'>-	* dln.c (dln_load): ditto.</div><div class='del'>-</div><div class='del'>-Mon Feb  2 13:31:51 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (canonical_each): fix merge miss.</div><div class='del'>-</div><div class='del'>-Mon Feb  2 01:54:00 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): return nil on loopback</div><div class='del'>-	  address.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb  1 18:17:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: merged coding style changes from HEAD.</div><div class='del'>-</div><div class='del'>-Sun Feb  1 16:15:00 2004  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Feb  1 05:30:06 2004  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan 31 09:20:32 2004  NAKAMURA, Hiroshi  &lt;nakahiro@sairon.co.jp&gt;</div><div class='del'>-</div><div class='del'>-	* sample/openssl/gen_csr.rb: wrong usage string.</div><div class='del'>-</div><div class='del'>-Sat Jan 31 01:00:32 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/soap/mapping/factory.rb: deleted unused methods.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/wsdl/soap/{soapbodyparts.wsdl,test_soapbodyparts.wsdl}: new</div><div class='del'>-	  files.</div><div class='del'>-</div><div class='del'>-Thu Jan 29 23:56:00 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* util.c (mblen): fix overrun.  [ruby-dev:22672]</div><div class='del'>-</div><div class='del'>-Thu Jan 29 22:41:53 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan 29 15:33:23 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* sample/openssl/gen_csr.rb: use OpenSSL::X509::Name.parse.</div><div class='del'>-</div><div class='del'>-Wed Jan 28 04:29:41 2004  Eric Schwartz  &lt;emschwar@fc.hp.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 27 11:09:29 2004  FUKUMOTO Atsushi  &lt;fukumoto@nospam.imasy.or.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 27 10:35:18 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/win32ole.c (set_argv): fix condition.</div><div class='del'>-</div><div class='del'>-Tue Jan 27 02:26:31 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httputils.rb (WEBrick:HTTPUtils::parse_header):</div><div class='del'>-	  refine regex for header-name.</div><div class='del'>-</div><div class='del'>-Tue Jan 27 00:30:11 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub: rollback.</div><div class='del'>-</div><div class='del'>-Mon Jan 26 22:53:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* io.c: Remove documentation references to $defout.</div><div class='del'>-</div><div class='del'>-Mon Jan 26 15:11:47 2004  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/exyacc.rb: escape '}' to avoid warning.</div><div class='del'>-</div><div class='del'>-Mon Jan 26 14:41:46 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/delegate.rb (Delegator::initialize): preserve</div><div class='del'>-	  singleton_method_added method [ruby-dev:22685]</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan 26 12:47:17 2004  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: define CONST84 when TCL_MAJOR_VERSION == 7</div><div class='del'>-</div><div class='del'>-Mon Jan 26 11:35:23 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jan 22 22:54:53 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan 22 16:21:33 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan 21 21:55:51 2004  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan 21 17:57:56 2004  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan 21 16:44:20 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (merge_libs): squeeze successive same libraries.</div><div class='del'>-	  [ruby-dev:22652]</div><div class='del'>-</div><div class='del'>-Wed Jan 21 16:01:37 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/digest/rmd160/extconf.rb: have_library appends found library.</div><div class='del'>-</div><div class='del'>-Wed Jan 21 11:36:00 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 20 14:48:13 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 20 14:43:17 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/base64.rb: Add RDoc</div><div class='del'>-</div><div class='del'>-Tue Jan 20 14:25:51 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/abbrev.rb: Add RDoc</div><div class='del'>-</div><div class='del'>-Tue Jan 20 13:22:39 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/generators/html_generator.rb: Document aliases at</div><div class='del'>-	  top-most level.</div><div class='del'>-</div><div class='del'>-	* lib/English.rb: Document English.rb.</div><div class='del'>-</div><div class='del'>-Tue Jan 20 02:49:22 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for OpenSSL version.</div><div class='del'>-	  [ruby-list:39054]</div><div class='del'>-</div><div class='del'>-Tue Jan 20 02:38:13 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_class): should not dump singleton class.</div><div class='del'>-	  [ruby-dev:22631]</div><div class='del'>-</div><div class='del'>-Tue Jan 20 01:31:36 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (lineno): typo fix(FIX2INT -&gt; INT2FIX).</div><div class='del'>-</div><div class='del'>-Mon Jan 19 21:53:38 2004  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c, re.c, string.c, time.c: fixed up positions of RDocs.</div><div class='del'>-</div><div class='del'>-Mon Jan 19 07:09:20 2004  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* sample/cal.rb: added a class, anyway.</div><div class='del'>-</div><div class='del'>-Sun Jan 18 20:47:35 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.c: use translate_char() on Cygwin.</div><div class='del'>-</div><div class='del'>-Sun Jan 18 02:33:26 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h (_WIN32): undef _WIN32 on Cygwin before defining DOSISH.</div><div class='del'>-</div><div class='del'>-Sun Jan 18 00:23:55 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan 16 14:33:35 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (class2path): get class path and check referable.</div><div class='del'>-	  [ruby-dev:22588]</div><div class='del'>-</div><div class='del'>-Fri Jan 16 09:52:23 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan 15 13:03:10 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_read): do not append EOF.  (ruby-bugs-ja:PR#585)</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan 14 13:31:06 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/extconf.rb: wrapper iconv.rb is dependent on platform.</div><div class='del'>-</div><div class='del'>-Tue Jan 13 18:54:28 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Jan 13 14:27:13 2004  Kazuhiro NISHIYAMA  &lt;zn@mbf.nifty.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 13 04:29:52 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan 13 01:04:37 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan 12 23:27:19 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (primary): fix position after FCALL.  [ruby-dev:22574]</div><div class='del'>-</div><div class='del'>-Mon Jan 12 12:07:22 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* object.c: Remove spurious space in TrueClass documentation.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Jan 12 11:46:30 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (LIBPATHFLAG, RPATHFLAG): enclose paths with single</div><div class='del'>-	  quotes.  [ruby-dev:22564]</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (libpathflag): do not enclose with quotes always.</div><div class='del'>-</div><div class='del'>-	* {bcc32,win32,wince}/Makefile.sub (LIBPATHFLAG): quoted.</div><div class='del'>-</div><div class='del'>-Mon Jan 12 02:24:07 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Jan 12 02:24:07 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jan 11 02:07:47 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Jan 11 02:07:47 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Jan 10 21:27:41 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (eval): need to add message delimiter. [ruby-dev:22561]</div><div class='del'>-</div><div class='del'>-Sat Jan 10 01:54:50 2004  Eric Sunshine  &lt;sunshine@sunshineco.com&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Jan  9 10:05:14 2004  Siena.  &lt;siena@faculty.chiba-u.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (libpathflag): use single quotes.  [ruby-dev:22440]</div><div class='del'>-</div><div class='del'>-Thu Jan  8 23:49:21 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan  8 21:29:43 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Jan  8 16:51:04 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Jan  8 11:20:01 2004  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c, object.c, process.c, re.c: don't use C++ style comments.</div><div class='del'>-</div><div class='del'>-Thu Jan  8 04:36:21 2004  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* sample/webrick/*: new files.</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add sample/webrick/*</div><div class='del'>-</div><div class='del'>-Wed Jan  7 13:00:18 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Jan  7 12:35:41 2004  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb: revert command parse regexps.  [ruby-list:39014] by</div><div class='del'>-	  Shirai,Kaoru.</div><div class='del'>-</div><div class='del'>-Wed Jan  7 08:21:04 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan  6 22:13:34 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan  6 21:55:02 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (fptr_finalize): should save errno just after failure.</div><div class='del'>-	  [ruby-dev:22492]</div><div class='del'>-</div><div class='del'>-Tue Jan  6 14:53:14 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Jan  6 06:37:53 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* bin/rdoc: Add --ri-system switch</div><div class='del'>-</div><div class='del'>-	* lib/.document: Update with list of files that seem to have</div><div class='del'>-	  documentation</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: Reorder comment to make it RDoc friendly.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Jan  6 00:04:40 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan  2 14:54:11 2004  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* bin/rdoc: Add statistics.</div><div class='del'>-</div><div class='del'>-	* process.c: (MG) Added Process documentation</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Jan  2 01:50:13 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 31 17:25:17 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (argf_each_byte): should return self.  [ruby-dev:22465]</div><div class='del'>-</div><div class='del'>-Wed Dec 31 11:20:34 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 31 11:17:37 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 31 01:33:05 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 30 19:39:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* io.c: should initialize lineno by zero. [ruby-dev:22460]</div><div class='del'>-</div><div class='del'>-Tue Dec 30 12:30:30 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 30 08:32:32 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	  def each_entry(&amp;b) Dir.foreach(@path) {|f| yield P.new(f) } end</div><div class='del'>-</div><div class='del'>-Tue Dec 30 08:32:32 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	    def each_entry(&amp;block) Dir.foreach(@path) {|f| yield Pathname.new(f) } end</div><div class='del'>-</div><div class='del'>-Mon Dec 29 12:51:02 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: Add RDoc for Kernel global functions.</div><div class='del'>-</div><div class='del'>-Mon Dec 29 11:00:16 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* array.c: Tidy up RDoc loose ends.</div><div class='del'>-</div><div class='del'>-Mon Dec 29 05:05:51 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* struct.c, random: Add RDoc comments</div><div class='del'>-</div><div class='del'>-Mon Dec 29 02:20:54 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: Add RDoc for class Proc, Method, UnboundMethod</div><div class='del'>-</div><div class='del'>-Mon Dec 29 00:41:44 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* math.c: Add RDoc comments</div><div class='del'>-</div><div class='del'>-Sun Dec 28 20:19:11 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_sysread): StringIO.new.sysread didn't</div><div class='del'>-	  raise EOFError.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 28 15:25:08 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 28 11:55:29 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/csv/{bom.csv,mac.csv}: removed.</div><div class='del'>-</div><div class='del'>-Sun Dec 28 08:56:51 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c: Thead[Group] RDoc (thanks to MG)</div><div class='del'>-</div><div class='del'>-Sun Dec 28 03:50:05 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 28 01:46:02 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 28 01:35:35 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 28 01:05:31 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c, signal.c: RDoc collemts added by Elliott Hughes</div><div class='del'>-</div><div class='del'>-Sun Dec 28 00:48:47 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec 27 23:41:46 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: fix "test: too many arguments" error.</div><div class='del'>-</div><div class='del'>-Sat Dec 27 15:32:19 2003  Dave Thomas  &lt;dave@wireless_3.local.thomases.com&gt;</div><div class='del'>-</div><div class='del'>-	* time.c: RDoc comments added</div><div class='del'>-</div><div class='del'>-Sat Dec 27 15:07:57 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* object.c: Add RDoc comments for Symbol class.</div><div class='del'>-</div><div class='del'>-Sat Dec 27 14:42:30 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* numeric.c: Add RDoc comments.</div><div class='del'>-</div><div class='del'>-Sat Dec 27 00:44:00 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (next_argv): warn always for stdin on inplace edit mode.</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): need to check string value.</div><div class='del'>-</div><div class='del'>-	* io.c (argf_read): allow ARGF.read(nil).  [ruby-dev:22433]</div><div class='del'>-</div><div class='del'>-Fri Dec 26 23:02:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Dec 26 18:50:59 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: check if getcontext and setcontext are available.</div><div class='del'>-</div><div class='del'>-	* eval.c: use presence of getcontext/setcontext.</div><div class='del'>-</div><div class='del'>-Fri Dec 26 16:40:53 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb (PathnameTest#test_plus): add 2 assertions.</div><div class='del'>-</div><div class='del'>-Fri Dec 26 09:26:58 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* bignum.c (rb_quad_pack): add range check for 'quad int'.</div><div class='del'>-</div><div class='del'>-Thu Dec 25 22:39:59 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_update): don't return any value.</div><div class='del'>-</div><div class='del'>-Thu Dec 25 15:30:17 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_update): call rb_str_modify().</div><div class='del'>-</div><div class='del'>-Thu Dec 25 05:08:09 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (search_required): search actual file name once when no</div><div class='del'>-	  extension specified.</div><div class='del'>-</div><div class='del'>-Thu Dec 25 04:00:44 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* stable version 1.8.1 released.</div><div class='del'>-</div><div class='del'>-Thu Dec 25 00:17:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: check for nanosleep, -lrt if required.</div><div class='del'>-	  [ruby-core:02059]</div><div class='del'>-</div><div class='del'>-	* eval.c (thread_timer): use select(2) if nanosleep(2) is not</div><div class='del'>-	  available.</div><div class='del'>-</div><div class='del'>-	* eval.c: check __stub_getcontext for glibc on some platforms.</div><div class='del'>-	  [ruby-list:38984]</div><div class='del'>-</div><div class='del'>-Wed Dec 24 23:48:04 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 24 23:29:30 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tsort.rb (test_orphaned_break): removed.</div><div class='del'>-</div><div class='del'>-Wed Dec 24 20:53:06 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkmulticolumnlist.rb: new sample</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkmultilistframe.rb: bug fix</div><div class='del'>-</div><div class='del'>-Wed Dec 24 20:37:37 2003  Eric Sunshine  &lt;sunshine@sunshineco.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 24 17:51:18 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (rb_thread_flock): enable thread support again.</div><div class='del'>-</div><div class='del'>-Wed Dec 24 16:46:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (thread_timer): do not post signal unless it is</div><div class='del'>-	  absolutely necessary.</div><div class='del'>-</div><div class='del'>-	* rubysig.h (TRAP_END): add CHECK_INTS to switch thread.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (umethod_bind): remove method overridden check.</div><div class='del'>-	  [ruby-dev:22366]</div><div class='del'>-</div><div class='del'>-Wed Dec 24 16:13:05 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_write): ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec 24 14:23:27 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Dec 24 14:07:55 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/assertions.rb: Modules are allowed to rescue.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb: show output_level in order.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Dec 24 13:43:34 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/imap.rb (authenticate): remove "\n" from base64 encoded</div><div class='del'>-	  strings.</div><div class='del'>-</div><div class='del'>-Wed Dec 24 11:26:41 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 24 10:29:53 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_read): support second</div><div class='del'>-	  argument.  [ruby-dev:22350]</div><div class='del'>-</div><div class='del'>-Wed Dec 24 09:38:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (arg): should return 0 after error.  [ruby-dev:22360]</div><div class='del'>-</div><div class='del'>-Wed Dec 24 00:56:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_thread_join): dup exception before re-raising it.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* pack.c (OFF16): get offset for big endian machines.</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): use OFF16 instead of OFF16B.</div><div class='del'>-	  [ruby-dev:22344]</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_unpack): ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec 23 22:47:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* io.c (rb_io_check_writable): clear FMODE_RBUF before writing</div><div class='del'>-	  something.</div><div class='del'>-</div><div class='del'>-Tue Dec 23 22:25:00 2003  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 23 19:44:47 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 23 19:42:59 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_system.rb (test_syntax): glob relatively from</div><div class='del'>-	  __FILE__.</div><div class='del'>-</div><div class='del'>-Tue Dec 23 18:09:40 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* pack.c (pack_pack): remove unnecessary negative value check.</div><div class='del'>-	  [ruby-dev:22329]</div><div class='del'>-</div><div class='del'>-Tue Dec 23 17:26:55 2003  KONISHI Hiromasa  &lt;konishih@fd6.so-net.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub (config.h): bcc has finite(). [ruby-list:38940]</div><div class='del'>-</div><div class='del'>-Tue Dec 23 16:08:16 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/encodings/US-ASCII.rb: typo.  [ruby-talk:88650]</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_system.rb: num of asserts depended on running dir.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 23 14:13:51 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/uri/test_generic.rb (TestGeneric::test_set_component):</div><div class='del'>-	  added tets.</div><div class='del'>-</div><div class='del'>-Tue Dec 23 11:08:34 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 23 06:10:31 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/cgi.rb (CGI): add support for mod_ruby.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Dec 22 23:00:05 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/generic.rb (URI::Generic::check_opaque): fixed typo.</div><div class='del'>-</div><div class='del'>-Mon Dec 22 21:59:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (map_charset): always ensure code is a String.</div><div class='del'>-</div><div class='del'>-Mon Dec 22 21:15:29 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_mod_init_copy): always copy singleton class.</div><div class='del'>-	  [ruby-dev:22325]</div><div class='del'>-</div><div class='del'>-Mon Dec 22 20:44:36 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/uri/test_generic.rb (TestGeneric::test_route): added a test.</div><div class='del'>-</div><div class='del'>-Mon Dec 22 20:38:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb: reduce eval.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 22 20:09:31 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/soap/test_property.rb: remove duplicated test method.</div><div class='del'>-</div><div class='del'>-Mon Dec 22 18:22:04 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 22 17:23:42 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (ac_cv_func_setitimer): moved from defines.h</div><div class='del'>-</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='del'>-</div><div class='del'>-	* configure.in (intrinsics.h): check if present.</div><div class='del'>-</div><div class='del'>-	* ruby.h: include intrinsics.h if available.</div><div class='del'>-</div><div class='del'>-	* bignum.c, marshal.c: include ieeefp.h if available.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 22 17:07:31 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (mingw): set isnan, finite and isinf to yes.</div><div class='del'>-</div><div class='del'>-Mon Dec 22 13:40:19 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/property.rb: passing block by reference.</div><div class='del'>-</div><div class='del'>-Mon Dec 22 00:32:43 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Dec 21 17:29:00 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c (rb_check_inheritable): new function.  [ruby-dev:22316]</div><div class='del'>-</div><div class='del'>-	* intern.h: add prototype.</div><div class='del'>-</div><div class='del'>-	* eval.c (superclass): use rb_check_inheritable().</div><div class='del'>-</div><div class='del'>-	* object.c (rb_class_initialize): check argument validity.</div><div class='del'>-</div><div class='del'>-Sun Dec 21 16:25:10 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 21 00:12:37 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add new methods (TkScrollbar#assign, assign_list)</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkmultilistframe.rb: use TkScrollbar#assign method</div><div class='del'>-</div><div class='del'>-Sat Dec 20 21:59:03 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httprequest.rb (HTTPRequest#meta_vars): refine regexp.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/webrick/cgi.rb (CGI::Socket): refine some coditions.</div><div class='del'>-</div><div class='del'>-Sat Dec 20 16:07:14 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::make_switch): [no-] prefix was</div><div class='del'>-	  missing.</div><div class='del'>-</div><div class='del'>-Sat Dec 20 11:40:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml.rb (YAML::YAML): adjust Marshal version.</div><div class='del'>-</div><div class='del'>-Sat Dec 20 03:56:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec 20 02:41:02 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/cgi.rb: add file. (yet another CGI library)</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add lib/webrick/cgi.rb.</div><div class='del'>-</div><div class='del'>-Sat Dec 20 02:18:31 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec 19 21:24:22 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Dec 19 22:56:46 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/soap/test_property.rb: add test.</div><div class='del'>-</div><div class='del'>-Fri Dec 19 19:21:49 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec 19 17:36:49 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkmultilistbox.rb: bug fix</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkmultilistframe.rb: new sample script</div><div class='del'>-</div><div class='del'>-Fri Dec 19 03:44:27 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 18 21:47:35 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 18 21:44:21 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (stack_extend): ignore inline optimization on VC7.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub (OS, RT): can override.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 18 16:38:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (fnmatch): unlike find_dirsep(), rb_path_next() never</div><div class='del'>-	  return NULL.</div><div class='del'>-</div><div class='del'>-Thu Dec 18 15:27:59 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ipaddr.rb (IPSocket::getaddress): merge usa's patch.</div><div class='del'>-	  [ruby-dev:21678]</div><div class='del'>-</div><div class='del'>-Wed Dec 17 15:15:30 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/delegate.rb: avoid using common instance name as "@obj".</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/curses/extconf.rb: restore function check for init_color.</div><div class='del'>-	  [ruby-list:38905]</div><div class='del'>-</div><div class='del'>-	* Makefile.in: need to specify $(MAINLIBS) for the miniruby</div><div class='del'>-	  generation rule.</div><div class='del'>-</div><div class='del'>-	* configure.in: better FreeBSD -lc_r support.</div><div class='del'>-</div><div class='del'>-Wed Dec 17 00:16:14 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: new method</div><div class='del'>-	  StringScanner#beginning_of_line? (alias #bol?)</div><div class='del'>-</div><div class='del'>-	* ext/strscan/strscan.c: new method StringScanner#concat and #&lt;&lt;.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/strscan/test_stringscanner.rb: test new methods above.</div><div class='del'>-</div><div class='del'>-	* test/strscan/test_stringscanner.rb: test destructive string</div><div class='del'>-	  modification.</div><div class='del'>-</div><div class='del'>-Tue Dec 16 21:20:47 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pp.rb: don't use local variable `pp'.</div><div class='del'>-</div><div class='del'>-	* lib/prettyprint.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec 16 13:20:43 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec 16 03:17:29 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: comments in strings. [ruby-talk:88012]</div><div class='del'>-</div><div class='del'>-	* test/yaml/test_yaml.rb: add test.</div><div class='del'>-</div><div class='del'>-Tue Dec 16 01:14:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (catch_timer): check rb_thread_crtical in main native</div><div class='del'>-	  thread.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec 15 13:32:22 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Dec 15 09:27:46 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec 14 18:46:48 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Dec 13 18:55:16 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/charset_alias.rb: preserve original order.</div><div class='del'>-</div><div class='del'>-	* ext/iconv/extconf.rb: remove wrapper file at clean.</div><div class='del'>-</div><div class='del'>-Sat Dec 13 18:09:42 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* gc.c (Init_stack): no stack adjustment for THREAD_SAFE.</div><div class='del'>-</div><div class='del'>-Sat Dec 13 17:17:59 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec 13 09:01:23 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: check ucontext.h.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec 13 03:09:14 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: anonymous struct fix. [ruby-core:01946]</div><div class='del'>-</div><div class='del'>-	* test/yaml/test_yaml.rb: add test.</div><div class='del'>-</div><div class='del'>-Fri Dec 12 22:36:44 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/csv/test_csv.rb: add tests.</div><div class='del'>-</div><div class='del'>-Fri Dec 12 19:33:06 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (mkdir): remove trailing `/' from pathes.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (rmdir): ditto. [ruby-dev:22238]</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (rmdir_r): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec 12 06:06:09 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 11 21:24:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkcs12.[ch]: new files. add OpenSSL::PKCS12.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.[ch]: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/MANIFEST: add ossl_pkcs12.[ch].</div><div class='del'>-</div><div class='del'>-Thu Dec 11 20:54:28 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/fileutils.rb (fu_list): call to_str for all arguments.</div><div class='del'>-</div><div class='del'>-Thu Dec 11 20:07:01 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ftools.rb (makedirs): sync with fileutils.</div><div class='del'>-</div><div class='del'>-Thu Dec 11 19:53:03 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 11 19:08:02 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec 11 18:49:30 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: def m( arg ) -&gt; def m(arg).</div><div class='del'>-</div><div class='del'>-Thu Dec 11 11:39:43 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* file.c (rb_stat_inspect): adjust format specifier.</div><div class='del'>-</div><div class='del'>-	* parse.c (arg_prepend): nodetype() is for debug use.</div><div class='del'>-</div><div class='del'>-	* ruby.h (ISASCII, etc): cast to int to get rid of warning.</div><div class='del'>-</div><div class='del'>-	* ruby.h (alloca.h): include even in GCC.  [ruby-core:01925]</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (GetVpValue): adjust format</div><div class='del'>-	  specifier.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c (BigDecimal_split): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_guardcall): guard itself should be</div><div class='del'>-	  volatile.</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_convert): ensure actual parameter with</div><div class='del'>-	  format specifier.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (MasterDevice, SlaveDevice, deviceNo): do not</div><div class='del'>-	  define unless used.</div><div class='del'>-</div><div class='del'>-	* ext/pty/pty.c (getDevice): get rid of warning.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/socket/socket.c (init_inetsock_internal): uninitialized</div><div class='del'>-	  variable.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c (syck_parser_assign_io): add prototype.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 10 19:28:56 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 10 18:07:25 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/erb.rb: new method ERB#filename(=). [ruby-dev:22208]</div><div class='del'>-</div><div class='del'>-Wed Dec 10 17:54:51 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 10 17:17:18 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 10 17:16:06 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/ut_eof.rb (TestEOF::Seek): test behaviors at reading</div><div class='del'>-	  beyond EOF.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Dec 10 15:01:19 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/monitor/test_monitor.rb (test_cond): use Queue#deq</div><div class='del'>-	  instead of sleep.</div><div class='del'>-</div><div class='del'>-Wed Dec 10 14:45:39 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/pty/pty.c (establishShell): should close descriptors if fork</div><div class='del'>-	  failed.</div><div class='del'>-</div><div class='del'>-Wed Dec 10 12:53:05 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: define execv() using do_aspawn().</div><div class='del'>-</div><div class='del'>-	* process.c (proc_exec_v): remove #ifdef's which stopped needing.</div><div class='del'>-</div><div class='del'>-Tue Dec  9 23:32:23 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/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='del'>-</div><div class='del'>-Tue Dec  9 19:53:02 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/uri/test_generic.rb (test_route): added tests for the above</div><div class='del'>-	  change.</div><div class='del'>-</div><div class='del'>-Tue Dec  9 14:10:48 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Dec  9 02:53:55 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkalignbox.rb: new sample script</div><div class='del'>-</div><div class='del'>-Tue Dec  9 00:45:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec  9 00:07:35 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Dec  8 22:48:03 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/test/unit/ui/testrunnerutilities.rb: moved output level</div><div class='del'>-	  constants from Console.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/ui/console/testrunner.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec  8 15:03:30 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c (syck_io_str_read): get rid of buffer overflow.</div><div class='del'>-</div><div class='del'>-Mon Dec  8 13:02:11 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/common.rb: new method URI.regexp. [ruby-dev:22121]</div><div class='del'>-</div><div class='del'>-	* test/uri/test_common.rb: add test for URI.regexp.</div><div class='del'>-</div><div class='del'>-Mon Dec  8 12:44:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Dec  7 20:54:17 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Dec  6 22:58:03 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_connect): call ossl_start_ssl.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_accept): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_ssl_read): allow signal traps.</div><div class='del'>-</div><div class='del'>-Sat Dec  6 21:45:10 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (flush_before_seek): flush before seek on any platform.</div><div class='del'>-</div><div class='del'>-	* configure.in: ditto.</div><div class='del'>-</div><div class='del'>-Sat Dec  6 17:23:00 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/soap/netHttpClient.rb(SOAP::NetHttpClient#proxy=): check URI.</div><div class='del'>-</div><div class='del'>-Fri Dec  5 23:22:30 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Dec  5 22:23:04 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/netHttpClient.rb: proxy support did not work.  fixed.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/soap/test_property.rb, test/soap/test_streamhandler.rb: new file.</div><div class='del'>-</div><div class='del'>-Fri Dec  5 17:26:23 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_exec_end_proc): maintain tmp_end_procs.</div><div class='del'>-	  [ruby-dev:22154]</div><div class='del'>-</div><div class='del'>-Fri Dec  5 13:36:59 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* object.c (Init_Object): Module#extended defined.</div><div class='del'>-</div><div class='del'>-Fri Dec  5 13:17:30 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_pipe.rb: use IO.pipe instead of IO.popen.</div><div class='del'>-</div><div class='del'>-Fri Dec  5 11:54:45 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_read): follow IO#read.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Dec  5 02:49:35 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 23:54:00 2003  Rick Ohnemus  &lt;rick.ohnemus@systemware.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 23:32:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (read_all): do not depend on lseek position.</div><div class='del'>-	  [ruby-dev:22026]</div><div class='del'>-</div><div class='del'>-Thu Dec  4 22:37:26 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 21:50:07 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 16:41:17 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (exc_list): allow expanding list.  [ruby-dev:22134]</div><div class='del'>-</div><div class='del'>-Thu Dec  4 14:09:24 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 13:24:13 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/monitor.rb: use Object#__send__ instead of Object#send.</div><div class='del'>-</div><div class='del'>-Thu Dec  4 13:17:45 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/streamHandler.rb: support latest released version of</div><div class='del'>-	  http-access2.</div><div class='del'>-</div><div class='del'>-Thu Dec  4 13:04:44 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/soap/property.rb: property implementation.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 10:43:58 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/dl/sym.c (rb_dlsym_guardcall): __declspec(noinline) is VC7</div><div class='del'>-	  feature.</div><div class='del'>-</div><div class='del'>-Thu Dec  4 10:27:12 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: update hyperlink to the Japanese document.</div><div class='del'>-</div><div class='del'>-Thu Dec  4 09:12:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 08:29:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 03:48:59 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Dec  4 01:45:24 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Dec  3 19:38:36 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: correct fcntl parameter. [ruby-dev:22120]</div><div class='del'>-</div><div class='del'>-Wed Dec  3 13:49:07 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: 'format'==&gt;'Kernel.format' (avoid override trouble)</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkcanvas.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkdialog.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tktext.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Dec  3 13:28:13 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/extmk.rb (MTIMES): let makefiles depend to mkmf.rb.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration): DLDFLAGS was duplicated.</div><div class='del'>-</div><div class='del'>-Tue Dec  2 23:18:12 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb: wrote the warning about HTTP_PROXY environment</div><div class='del'>-	  variable.</div><div class='del'>-</div><div class='del'>-Tue Dec  2 21:31:42 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bin/testrb: new test runner.  [ruby-core:01845]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/test/unit.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: exit with the test result.</div><div class='del'>-</div><div class='del'>-Tue Dec  2 20:18:48 2003  Eric Sunshine  &lt;sunshine@sunshineco.com&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Dec  2 20:03:20 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: check if Pathnames are usable</div><div class='del'>-	  for arguments.</div><div class='del'>-</div><div class='del'>-Tue Dec  2 04:22:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/assertions.rb: fixed #assert_no_match message.</div><div class='del'>-</div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Dec  2 00:43:00 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec  1 21:33:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec  1 17:33:47 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Dec  1 17:14:34 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* sample/optparse/opttest.rb: added.</div><div class='del'>-</div><div class='del'>-Mon Dec  1 16:10:52 2003  Dave Thomas  &lt;dave@pragprog.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rdoc/rdoc.rb: (etc) initial merge into main tree.</div><div class='del'>-</div><div class='del'>-Mon Dec  1 14:17:49 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: does much strict test on</div><div class='del'>-	  "same" files detecting.</div><div class='del'>-</div><div class='del'>-Mon Dec  1 09:28:14 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'>-	  (XCFLAGS): re-export $(XCFLAGS).</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Dec  1 01:03:27 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov 30 20:18:07 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: keep ARCH_FLAG separate. export ARCH_FLAG.</div><div class='del'>-	  [ruby-core:01819]</div><div class='del'>-</div><div class='del'>-	* Makefile.in: add ARCH_FLAG to CFLAGS.</div><div class='del'>-</div><div class='del'>-	* Makefile.in: add @CPPFLAGS@ to CPPFLAGS.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (link_command, cc_command): use ARCH_FLAG.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (configuration): add ARCH_FLAG to DLDFLAGS.</div><div class='del'>-</div><div class='del'>-	* Makefile.in: add ARCH_FLAG to DLDFLAGS.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov 30 18:22:48 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: do not override CCDLDFLAGS, LDFLAGS, XLDFLAGS,</div><div class='del'>-	  DLDFLAGS and LDSHARED.</div><div class='del'>-</div><div class='del'>-	* configure.in: XCFLAGS for compiling ruby itself.  ARCH_FLAG is</div><div class='del'>-	  reflected in CFLAGS.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb: ditto.  do not import XCFLAGS from config.status.</div><div class='del'>-</div><div class='del'>-Sun Nov 30 17:37:36 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 [ruby-talk:86746]</div><div class='del'>-</div><div class='del'>-Sun Nov 30 13:02:00 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/encodingstyle/soapHandler.rb: refactoring - Simplifying</div><div class='del'>-	  Conditional Expressions.</div><div class='del'>-</div><div class='del'>-	* lib/wsdl/soap/definitions.rb: refactoring - Move Method.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Nov 30 09:35:14 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 28 23:19:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 28 22:49:56 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rinda/rinda.rb: fix TupleSpaceProxy#read, read_all.</div><div class='del'>-</div><div class='del'>-Fri Nov 28 21:44:40 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 28 19:37:56 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* hash.c (env_has_value, env_index): must match exactly.</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_env.rb (test_has_value, test_index): condition for</div><div class='del'>-	  aboves.</div><div class='del'>-</div><div class='del'>-Fri Nov 28 17:59:20 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_env.rb: add tests for ENV.</div><div class='del'>-</div><div class='del'>-Fri Nov 28 17:47:46 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb (DRbMessage#load): rescue Errno::* and raise</div><div class='del'>-	  DRbConnError.</div><div class='del'>-</div><div class='del'>-Fri Nov 28 15:41:15 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb (Pathname#realpath): obsolete the force_absolute</div><div class='del'>-	  argument.</div><div class='del'>-</div><div class='del'>-Fri Nov 28 14:41:52 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/streamHandler.rb: drop unused http parameters.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/wsdl/raa/*: add tests.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/soap/test_basetype.rb, test/xsd/test_xsd.rb: add tests.</div><div class='del'>-</div><div class='del'>-Fri Nov 28 04:15:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (method_arity): used wrong Proc object.  [ruby-talk:86504]</div><div class='del'>-</div><div class='del'>-Fri Nov 28 00:47:29 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Nov 27 22:05:48 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 27 17:36:42 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 27 16:58:48 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (rb_w32_stat): remove _fullpath() for NUL: device.</div><div class='del'>-</div><div class='del'>-Wed Nov 26 15:38:47 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 26 04:48:42 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: dynamic changing of buffer size.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h: default buffer size of 4k.</div><div class='del'>-</div><div class='del'>-Wed Nov 26 00:55:30 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpresponse.rb: add HTTPResponse#keep_alive=.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 25 21:41:35 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* defines.h (ENV_IGNORECASE): should define when DOSISH without</div><div class='del'>-	  human68k. [ruby-dev:22047]</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 25 21:39:37 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (path_check_1): honor sticky bits always.</div><div class='del'>-	  [ruby-talk:86273]</div><div class='del'>-</div><div class='del'>-Tue Nov 25 20:02:14 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: do test in more deep</div><div class='del'>-	  directory.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_nowrite.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov 25 19:04:23 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/open-uri.rb (URI::Generic#find_proxy): ENV case sensitivity test</div><div class='del'>-	  refined.</div><div class='del'>-</div><div class='del'>-Tue Nov 25 18:13:30 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/fileutils/test_nowrite.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Nov 25 17:52:11 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 25 16:41:33 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 25 16:24:42 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/soap/marshal.rb: raise error if parse fails.</div><div class='del'>-</div><div class='del'>-	* lib/soap/netHttpClient.rb: add https support.  Patched by</div><div class='del'>-	  Oliver M. Bolzer.</div><div class='del'>-</div><div class='del'>-	* lib/soap/netHttpClient.rb: dump HTTP response message body by itself.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/soap/rpc/element.rb: fixed illegal parameter order.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/wsdl/soap/complexType.rb: support WSDL array definition with</div><div class='del'>-	  maxOccures="unbound".</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/wsdl/emptycomplextype.wsdl, test/wsdl/test_emptycomplextype.rb:</div><div class='del'>-	  simplify the test case.</div><div class='del'>-</div><div class='del'>-	* test/wsdl/axisArray/*: add tests for axis's array encoding.</div><div class='del'>-</div><div class='del'>-Tue Nov 25 16:15:29 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: don't treat Cygwin as Windows.</div><div class='del'>-</div><div class='del'>-Tue Nov 25 15:18:28 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: change default value of --enable-pthread (default: no)</div><div class='del'>-</div><div class='del'>-Tue Nov 25 07:31:16 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 24 23:32:06 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 24 19:59:48 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 24 19:32:55 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/etc/etc.c: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/Setup.dj: support for curses, etc, zlib.</div><div class='del'>-</div><div class='del'>-Mon Nov 24 17:00:00 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 24 14:53:10 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'>-	  (XCFLAGS): output empty value instead of `-DRUBY_EXPORT'.</div><div class='del'>-</div><div class='del'>-Sat Nov 22 23:09:45 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: set enable_pthread to no on MinGW.</div><div class='del'>-</div><div class='del'>-Sat Nov 22 22:56:20 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: add --enable-pthread option (default: yes)</div><div class='del'>-</div><div class='del'>-Sat Nov 22 22:48:46 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: add Tk.grab_release and fix bug of TkComposite</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkafter.rb: bug fix of TkAfter#start</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkcombobox.rb: new sample script</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: add native thread check</div><div class='del'>-</div><div class='del'>-Sat Nov 22 18:49:47 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 22 17:36:36 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'>-	  (HAVE_GETCWD): output to config.h.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 22 13:10:10 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (have_st_ino?): djgpp has valid st_ino.</div><div class='del'>-</div><div class='del'>-Sat Nov 22 11:28:48 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 22 07:30:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/util/test_backtracefilter.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Nov 21 16:44:18 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: fix bug on {pack|grid}_propagate() method</div><div class='del'>-</div><div class='del'>-Fri Nov 21 16:12:11 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.1: Fix markups and grammar.</div><div class='del'>-</div><div class='del'>-Fri Nov 21 14:49:42 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.1: wrote about ruby related environment variables.</div><div class='del'>-</div><div class='del'>-Fri Nov 21 12:28:03 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov 21 01:40:00 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: check &lt;pthread.h&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c: undef is_ruby_native() function when not HAVE_NATIVETHREAD</div><div class='del'>-</div><div class='del'>-Fri Nov 21 00:43:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/assertions.rb: use #__send__ instead of #send.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/testcase.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Nov 20 19:19:22 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: don't find the Cygwin's pthread library on MinGW.</div><div class='del'>-</div><div class='del'>-Thu Nov 20 19:15:50 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: windows? -&gt;</div><div class='del'>-	  have_drive_letter?, have_file_perm?</div><div class='del'>-</div><div class='del'>-Thu Nov 20 17:50:58 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkballoonhelp.rb: new sample script</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tkmultilistbox.rb: ditto</div><div class='del'>-</div><div class='del'>-	* ext/tk/sample/tktextframe.rb: ditto</div><div class='del'>-</div><div class='del'>-Thu Nov 20 13:37:34 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ruby.h: define is_ruby_native_thread() for no native thread</div><div class='del'>-	  environment</div><div class='del'>-</div><div class='del'>-	* eval.c: ditto</div><div class='del'>-</div><div class='del'>-Thu Nov 20 12:42:47 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: always check existence of the pthread library</div><div class='del'>-</div><div class='del'>-	* ruby.h: define macros for ruby's native thread check</div><div class='del'>-</div><div class='del'>-	* eval.c: add ruby's native thread check</div><div class='del'>-</div><div class='del'>-	* gc.c: ditto</div><div class='del'>-</div><div class='del'>-Wed Nov 19 14:45:18 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (to_ary): print more friendly warning message.</div><div class='del'>-</div><div class='del'>-Wed Nov 19 14:32:08 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (fu_same?): add djgpp and wince.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (cannot_overwrite_file?): add wince.</div><div class='del'>-</div><div class='del'>-Wed Nov 19 11:04:47 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 19 07:54:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: do not run tests if $! is set.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 18 23:31:36 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing/memmove.c (memmove): take void *, not char *.</div><div class='del'>-</div><div class='del'>-	* missing.h (memmove): ditto.</div><div class='del'>-</div><div class='del'>-	* missing.h (strchr, strrchr): return char *, not int.</div><div class='del'>-</div><div class='del'>-Tue Nov 18 22:20:10 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb (fu_same?): temporal fix for windows.</div><div class='del'>-</div><div class='del'>-Tue Nov 18 19:05:04 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/fileutils.rb: did not create correctly looped symlinks.</div><div class='del'>-</div><div class='del'>-Tue Nov 18 18:23:05 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_getc, strio_getline): set EOF flag.</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_rewind, strio_seek, strio_ungetc):</div><div class='del'>-	  clear EOF flag.</div><div class='del'>-</div><div class='del'>-	* test/stringio/test_stringio.rb: imported from [ruby-dev:21941].</div><div class='del'>-</div><div class='del'>-Tue Nov 18 14:06:35 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/fileutils.rb: FileTest -&gt; File.</div><div class='del'>-</div><div class='del'>-	* lib/fileutils.rb: put parentheses for arguments of File.xxxx?</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_cp): test "cp a a".</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_mv): test "mv a a".</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_ln): test "ln a a".</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_ln_s): test "ln_s a a".</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb (test_install): test "install a a".</div><div class='del'>-</div><div class='del'>-	* test/fileutils/fileasserts.rb: new method assert_symlink.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/fileasserts.rb: assert_is_directory -&gt; assert_directory.</div><div class='del'>-</div><div class='del'>-Mon Nov 17 19:38:49 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (getcwdofdrv): avoid using getcwd() directly, use</div><div class='del'>-	  my_getcwd() instead.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 17 10:50:27 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 17 09:41:38 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/test/unit/ui/gtk2/testrunner.rb: imported from rough.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb (keyword_display): sort keywords.</div><div class='del'>-</div><div class='del'>-Sun Nov 16 18:10:57 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov 16 13:26:07 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Nov 16 12:16:10 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/protocol.rb: logging response body. [experimental]</div><div class='del'>-	  [ruby-list:38800]</div><div class='del'>-</div><div class='del'>-Sun Nov 16 10:49:38 2003  Gavin Sinclair  &lt;gsinclair@soyabean.com.au&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov 16 09:45:23 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov 16 04:41:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Nov 15 22:16:42 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* /ext/openssl/ossl_x509ext.c (ossl_x509extfactory_create_ext):</div><div class='del'>-	  refine error message.</div><div class='del'>-</div><div class='del'>-Sat Nov 15 10:05:40 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov 15 07:40:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_method_node): new API to retrieve method body.</div><div class='del'>-</div><div class='del'>-Fri Nov 14 13:21:30 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c: fix (en-bugged at 2003/11/07)</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 13 20:53:35 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 13 19:17:00 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/ui/tk/testrunner.rb: use grid and panedwindow</div><div class='del'>-	  (if available)</div><div class='del'>-</div><div class='del'>-Thu Nov 13 17:56:41 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 13 16:45:53 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov 13 11:31:14 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser::Completion#complete): prior shorter</div><div class='del'>-	  name to containing longer name.</div><div class='del'>-</div><div class='del'>-Thu Nov 13 06:08:54 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: stop freezing some classes</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: ditto.</div><div class='del'>-</div><div class='del'>-Wed Nov 12 17:32:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/test/unit/ui/tk/testrunner.rb (setup_ui): "expand" is not</div><div class='del'>-	  necessary.</div><div class='del'>-</div><div class='del'>-Wed Nov 12 14:09:43 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/monitor/test_monitor.rb: fix the timing problem by Queue.</div><div class='del'>-</div><div class='del'>-Wed Nov 12 12:59:44 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/monitor/test_monitor.rb: added.</div><div class='del'>-</div><div class='del'>-Wed Nov 12 10:14:28 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/monitor.rb: refactored. Thanks, Gennady Bystritsky.</div><div class='del'>-</div><div class='del'>-Wed Nov 12 06:11:39 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl.h: add prototypes.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov 12 00:47:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/ui/testrunnermediator.rb: should require 'test/unit'.</div><div class='del'>-</div><div class='del'>-Tue Nov 11 23:54:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 11 22:44:08 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 11 10:42:41 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Nov 11 03:30:43 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Nov 10 11:40:29 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov 10 00:07:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Nov  9 02:05:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/tc_assertions.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Nov  8 18:50:20 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/wsdl/raa/*: add new testcase for WSDL loading, parsing and</div><div class='del'>-	  reading.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Nov  8 13:49:50 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in: improvement of pthread check</div><div class='del'>-</div><div class='del'>-Sat Nov  8 13:28:46 2003  Takaaki Tateishi  &lt;ttate@ttsky.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov  8 06:19:38 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/README.1st: edit the description of '--with-pthread-ext'</div><div class='del'>-</div><div class='del'>-Fri Nov  7 23:23:04 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov  7 10:23:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov  7 04:08:05 2003  UENO Katsuhiro  &lt;katsu@blue.sky.or.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Nov  7 01:03:16 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): save and restore rb_prohibit_interrupt.</div><div class='del'>-	  [ruby-dev:21857]</div><div class='del'>-</div><div class='del'>-Thu Nov  6 18:05:07 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Nov  6 11:42:07 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_set_string, strio_reopen): check</div><div class='del'>-	  tainted.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (strio_path): just nil.  [ruby-dev:21846]</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Nov  5 23:49:45 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov  5 22:55:16 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/README.1st: add the description of '--with-pthread-ext'</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Nov  5 17:33:45 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_load): allow interrupt during loaded program</div><div class='del'>-	  evaluation.  [ruby-dev:21834]</div><div class='del'>-</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='del'>-</div><div class='del'>-	* hash.c (env_fetch): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fetch): ditto.</div><div class='del'>-</div><div class='del'>-Wed Nov  5 19:08:47 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/optparse: added.</div><div class='del'>-</div><div class='del'>-Wed Nov  5 17:05:18 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/ui/gtk/testrunner.rb: typo.</div><div class='del'>-</div><div class='del'>-Wed Nov  5 11:13:32 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* string.c: add #include "version.h". this file still depends on it.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Nov  5 09:14:23 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/monitor.rb: revert to the previous revision.</div><div class='del'>-</div><div class='del'>-Wed Nov  5 08:39:51 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/https.rb (HTTPRequest#parse): set @client_cert_chain.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Nov  4 23:44:48 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'>-	  remove needless version.h dependency.</div><div class='del'>-</div><div class='del'>-Tue Nov  4 23:38:43 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* class.c, hash.c, string.c: remove #include "version.h".</div><div class='del'>-</div><div class='del'>-	* Makefile.in: remove needless version.h dependency.</div><div class='del'>-</div><div class='del'>-Tue Nov  4 06:54:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* io.c (io_read): ditto.</div><div class='del'>-</div><div class='del'>-	* string.c (get_pat): remove 1.8.0 warning code.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match): extend warning until 1.8.2.</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_match2): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* class.c (rb_obj_singleton_methods): ditto.</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_select): remove select with block.</div><div class='del'>-	  [ruby-dev:21824]</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'>-Mon Nov  3 22:53:21 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/racc/parser.rb: synchronize with Racc 1.4.4.</div><div class='del'>-</div><div class='del'>-	* ext/racc/cparse/cparse.c: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Nov  3 08:50:47 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (check_uid_switch): remove duplicated error messages.</div><div class='del'>-</div><div class='del'>-	* process.c (check_gid_switch): ditto.</div><div class='del'>-</div><div class='del'>-Sun Nov  2 02:28:33 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/ssl.rb: new option :SSLExtraChainCert.</div><div class='del'>-</div><div class='del'>-Sun Nov  2 01:02:04 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* st.c (strhash): Ditto.</div><div class='del'>-</div><div class='del'>-Sat Nov  1 18:21:09 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509req.c (GetX509ReqPtr): new function</div><div class='del'>-	  which returns underlying X509_REQ.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Nov  1 01:49:03 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/soap/marshal/test_marshal.rb: add tests for self referencing</div><div class='del'>-	  immutable objects.</div><div class='del'>-</div><div class='del'>-	* test/soap/calc/test_calc_cgi.rb: fix test name.</div><div class='del'>-</div><div class='del'>-Fri Oct 31 22:26:29 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/string_wce.c (strrchr): should decrement pointer.</div><div class='del'>-</div><div class='del'>-	* wince/Makefile.sub: correct a range of isdigit().</div><div class='del'>-</div><div class='del'>-Fri Oct 31 12:55:24 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in, lib/mkmf.rb: add RPATHFLAG for NetBSD.</div><div class='del'>-	  [ruby-dev:21791]</div><div class='del'>-</div><div class='del'>-	* bcc32/Makefile.sub, win32/Makefile.sub, win32/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-Fri Oct 31 01:38:14 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 31 01:02:24 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Oct 30 23:41:04 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: add DRbArray</div><div class='del'>-</div><div class='del'>-	* lib/drb/invokemethod.rb: fix Hash#each problem. [ruby-dev:21773]</div><div class='del'>-</div><div class='del'>-	* lib/drb/unix.rb: add LoadError. [ruby-dev:21743]</div><div class='del'>-</div><div class='del'>-Thu Oct 30 23:19:11 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/generator.rb: better XML pretty printing.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Oct 30 22:59:39 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/yaml2byte.c: HASH const too long.  Thanks, matz.</div><div class='del'>-</div><div class='del'>-Thu Oct 30 19:13:53 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/MANIFEST: Add yamlbyte.h.</div><div class='del'>-</div><div class='del'>-Thu Oct 30 14:25:31 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* io.c (READ_DATA_BUFFERED): new macro to detect whether stdio</div><div class='del'>-	  buffer filled.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 30 13:23:39 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (logop): left may be NULL. [ruby-talk:84539]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): NODE_CASE nd_head may be NULL.</div><div class='del'>-</div><div class='del'>-Thu Oct 30 10:14:51 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb: make fox runner work.</div><div class='del'>-</div><div class='del'>-Thu Oct 30 09:32:26 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 30 02:46:35 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 30 02:25:48 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_ssl.c (ossl_sslctx_initialize): call super.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 29 22:02:04 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 29 19:58:59 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (VwaitVarProc, WaitVariableProc,</div><div class='del'>-	  rb_threadVwaitProc): use CONST84 instead of CONST.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_rbTkWaitCommand,</div><div class='del'>-	  ip_rb_threadTkWaitCommand): use CONST84 always.</div><div class='del'>-</div><div class='del'>-Wed Oct 29 17:27:05 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_reg_s_union, Init_Regexp): new method `Regexp.union'.</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb (realpath): examine Dir.pwd because it may have</div><div class='del'>-	  symlinks.</div><div class='del'>-</div><div class='del'>-Wed Oct 29 17:16:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_longjmp): must not disturb original jump.</div><div class='del'>-	  [ruby-dev:21733]</div><div class='del'>-</div><div class='del'>-Wed Oct 29 15:28:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (Init_Proc): taint preallocated exception object</div><div class='del'>-	  sysstack_error. [ruby-talk:84534]</div><div class='del'>-</div><div class='del'>-Wed Oct 29 11:27:39 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (ret_args): node may be NULL. [ruby-talk:84530]</div><div class='del'>-</div><div class='del'>-Tue Oct 28 15:20:12 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 27 19:19:55 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_longjmp): ignore reentering error while warning.</div><div class='del'>-	  [ruby-dev:21730]</div><div class='del'>-</div><div class='del'>-Mon Oct 27 00:23:50 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct 25 09:18:04 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 24 23:26:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* hash.c (env_each): ditto for ENV.each.</div><div class='del'>-</div><div class='del'>-Thu Oct 23 20:25:32 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 23 17:59:36 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): initialize stack bottom for embedding.</div><div class='del'>-	  [ruby-dev:21686]</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 23 13:44:00 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y: integrate operations for stack_type.  [ruby-dev:21681]</div><div class='del'>-</div><div class='del'>-Thu Oct 23 00:41:45 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/soap/calc/*, test/soap/helloworld/*: set logging threshold</div><div class='del'>-	  to ERROR.</div><div class='del'>-</div><div class='del'>-Wed Oct 22 12:53:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Oct 22 02:31:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 21 23:16:26 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): call finalizers and exit procs before</div><div class='del'>-	  terminating threads.</div><div class='del'>-</div><div class='del'>-	* eval.c (ruby_cleanup): preserve ruby_errinfo before ruby_finalize_0().</div><div class='del'>-</div><div class='del'>-Tue Oct 21 15:57:11 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 21 15:08:53 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Tue Oct 21 00:35:02 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 21 00:22:57 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* test/drb/*: import drb/runit.</div><div class='del'>-</div><div class='del'>-Mon Oct 20 23:55:47 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): set current node after arguments evaluation.</div><div class='del'>-	  [ruby-dev:21632]</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): set current node and keep it at local jump.</div><div class='del'>-</div><div class='del'>-Mon Oct 20 22:01:18 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 20 18:28:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_catch): backout.</div><div class='del'>-</div><div class='del'>-Mon Oct 20 17:31:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (PUSH_FRAME): generate unique number to be TAG_JUMP()</div><div class='del'>-	  destination.</div><div class='del'>-</div><div class='del'>-	* eval.c (localjump_destination): use unique number in ruby_frame</div><div class='del'>-	  for localjump destination.</div><div class='del'>-</div><div class='del'>-Mon Oct 20 11:31:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_signal.rb (test_signal): restore old trap.</div><div class='del'>-</div><div class='del'>-Mon Oct 20 11:00:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Oct 20 09:45:12 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/debug.rb (debug_command): remove debug print.</div><div class='del'>-</div><div class='del'>-Wed Oct 20 00:25:41 2004  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Oct 19 13:12:30 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb (foreachline, dir_foreach): add obsolete warning.</div><div class='del'>-</div><div class='del'>-Sun Oct 19 00:14:22 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/soap/calc/*, test/soap/helloworkd/*: changed port# of test</div><div class='del'>-	  server. (17171)</div><div class='del'>-</div><div class='del'>-Sat Oct 18 23:01:32 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* missing/acosh.c (DBL_MANT_DIG): typo fix(ifdef -&gt; ifndef).</div><div class='del'>-</div><div class='del'>-Sat Oct 18 05:48:59 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: YAML::Syck::compile method.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.c: Buffer edge bug.</div><div class='del'>-</div><div class='del'>-	* ext/syck/yaml2byte.c: YAML to bytecode converter.</div><div class='del'>-</div><div class='del'>-	* ext/syck/yamlbyte.h: Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/bytecode.c: Bytecode parser fixes to empty collections</div><div class='del'>-	  and empty strings.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: Ditto.</div><div class='del'>-</div><div class='del'>-Fri Oct 17 23:07:38 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 17 23:00:30 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/generator.rb: Add rdoc documentation.</div><div class='del'>-</div><div class='del'>-Fri Oct 17 22:16:42 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/set.rb: Reword and fix Overview.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct 17 11:15:22 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_range.rb: added.</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add test/ruby/test_range.rb.</div><div class='del'>-</div><div class='del'>-Fri Oct 17 03:21:23 2003  William Sobel  &lt;will.sobel@barra.com&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_gethostbyaddr): ditto.</div><div class='del'>-</div><div class='del'>-Fri Oct 17 00:12:41 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) instance variable @frame was used</div><div class='del'>-	  without initializing on TkComposite module.</div><div class='del'>-</div><div class='del'>-Thu Oct 16 23:51:04 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 16 17:09:19 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 16 16:54:57 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct 16 16:40:51 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/sample/{demos-en,demos-jp}/widget</div><div class='del'>-	  add entries for 'unicodeout.rb'</div><div class='del'>-</div><div class='del'>-Thu Oct 16 08:38:06 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/digest/test_digest.rb (test_eq): show failed class.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 20:22:31 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 17:24:45 2003  URABE Shyouhei  &lt;root@mput.dip.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/cgi.rb (CGI::Cookie): tiny typo fix.</div><div class='del'>-</div><div class='del'>-Wed Oct 15 15:00:54 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 13:17:02 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 11:23:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): dump extended modules as well.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 09:30:34 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/enumerator/enumerator.c (enumerator_each): avoid VC++ warning.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h: include stdio.h for definition of FILE.</div><div class='del'>-</div><div class='del'>-Wed Oct 15 08:09:07 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/bytecode.c: Checkin of YAML bytecode support.</div><div class='del'>-</div><div class='del'>-	* ext/syck/gram.c: Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.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/handler.c: Ditto.</div><div class='del'>-</div><div class='del'>-	* ext/syck/handler.c: Now using 'tag' rather than 'taguri' in type URIs.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: Ditto (on both counts).</div><div class='del'>-</div><div class='del'>-Wed Oct 15 05:05:53 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 04:31:51 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 04:31:47 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/digest/test_digest.rb: Moved from ext/digest/test.rb.</div><div class='del'>-</div><div class='del'>-Wed Oct 15 03:53:20 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 00:25:00 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 00:20:15 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb: support TclTkIp._thread_vwait and</div><div class='del'>-	  _thread_tkwait.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: improve of accessing Tcl/Tk's special variables.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct 15 00:10:24 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/xsd/datatypes.rb: DateTime#of is obsoleted.  Use DateTime#offset.</div><div class='del'>-</div><div class='del'>-	* test/wsdl/emptycomplextype.wsdl, test/xsd/xmlschema.xml: Avoid</div><div class='del'>-	  useless warning.</div><div class='del'>-</div><div class='del'>-Tue Oct 14 19:09:35 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 14 11:53:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* intern.h (ruby_stop): never return.</div><div class='del'>-</div><div class='del'>-	* ruby.h (ruby_run): ditto.</div><div class='del'>-</div><div class='del'>-Tue Oct 14 04:43:55 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct 14 02:29:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_require_safe): segfault after loading .so.</div><div class='del'>-</div><div class='del'>-Tue Oct 14 02:05:23 2003  Akinori MUSHA  &lt;knu@iDaemons.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct 13 23:55:59 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/envutil.rb: use Config::CONFIG["ruby_install_name"],</div><div class='del'>-	  not "ruby".</div><div class='del'>-</div><div class='del'>-Mon Oct 13 23:57:29 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_feature_p): match by classified suffix.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_require_safe): require library in the specified safe</div><div class='del'>-	  level.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* intern.h: prototypes; rb_require_safe.</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: accept non-option arguments.</div><div class='del'>-</div><div class='del'>-Mon Oct 13 20:49:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* string.c (rb_str_new4): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c: use EXIT_SUCCESS and EXIT_FAILURE for exit values.</div><div class='del'>-</div><div class='del'>-	* process.c: ditto. [ruby-list:38521]</div><div class='del'>-</div><div class='del'>-Mon Oct 13 19:51:02 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Oct 12 14:45:03 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/extconf.rb: check "windows.h", not "windows".</div><div class='del'>-	  [ruby-talk:84051]</div><div class='del'>-</div><div class='del'>-Sat Oct 11 20:41:03 2003  Corinna Vinschen  &lt;corinna@vinschen.de&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (eaccess): Use access(2) on Cygwin.</div><div class='del'>-</div><div class='del'>-Sat Oct 11 17:09:21 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rexml/quickpath.rb (REXML::QuickPath::match):</div><div class='del'>-	  escape '[' to avoid warning.</div><div class='del'>-</div><div class='del'>-Sat Oct 11 16:08:41 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb (realpath): check existence of the file.</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb (realpath): re-implemented.</div><div class='del'>-	  (realpath_root?, realpath_rec): removed</div><div class='del'>-</div><div class='del'>-Sat Oct 11 10:19:39 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/monitor.rb: handle exceptions correctly. Thanks, Gennady</div><div class='del'>-	  Bystritsky.</div><div class='del'>-</div><div class='del'>-Fri Oct 10 07:50:54 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (is_defined): inheritance line adjustment as like as</div><div class='del'>-	  rb_call_super().</div><div class='del'>-</div><div class='del'>-Fri Oct 10 01:19:00 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/x509.rb (X509::Name::parse): ditto.</div><div class='del'>-</div><div class='del'>-Thu Oct  9 23:50:21 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): prevent thread from GC.</div><div class='del'>-	  [ruby-dev:21572]</div><div class='del'>-</div><div class='del'>-Thu Oct  9 19:11:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_start_0): non-volatile should be restored from</div><div class='del'>-	  volatile.</div><div class='del'>-</div><div class='del'>-Thu Oct  9 17:43:36 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  9 16:33:23 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0): remove unnecessary iv restoration for</div><div class='del'>-	  USRMARSHAL. [ruby-dev:21582]</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): dump generic instance variables from</div><div class='del'>-	  a string from '_dump'.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* bignum.c (rb_big2ulong): add range check to ensure round trip.</div><div class='del'>-</div><div class='del'>-Thu Oct  9 15:45:27 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  9 14:05:38 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  9 10:51:04 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): no error if block is empty.</div><div class='del'>-</div><div class='del'>-Thu Oct  9 06:43:33 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (localjump_error): id should be ID.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): nd_rval is set in copy_node_scope().</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): unused variable.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): nothing to do for empty node.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Oct  9 12:05:46 2003  Eric Sunshine  &lt;sunshine@sunshineco.com&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Oct  8 22:19:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: removed installation instructions.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/test/unit.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: extracted the running code in to AutoRunner.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/autorunner.rb: added.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/test/unit/collector.rb: ditto; added.</div><div class='del'>-</div><div class='del'>-	* test/testunit/collector/test_objectspace.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/collector/test_dir.rb: added.</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: simplified to use the new capabilities.</div><div class='del'>-</div><div class='del'>-Tue Oct  7 15:23:09 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_beginendblock.rb: add tests for nested BEGIN/END.</div><div class='del'>-</div><div class='del'>-	* test/ruby/beginmainend.rb: add tests for nested BEGIN/END.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct  7 12:23:47 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/fcntl/fcntl.c (Init_fcntl): define Fcntl::O_ACCMODE.</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: useless assignment removed.</div><div class='del'>-</div><div class='del'>-Tue Oct  7 09:13:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_beginendblock.rb (test_endinmethod): END{} is now</div><div class='del'>-	  allowed in eval.</div><div class='del'>-</div><div class='del'>-Tue Oct  7 04:15:25 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): should not expand mrhs if lhs is solely starred.</div><div class='del'>-</div><div class='del'>-Tue Oct  7 02:57:53 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Oct  7 01:42:34 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Mon Oct  6 22:59:46 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/csv/test_csv.rb: add tests for above change.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 23:27:09 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/socket/extconf.rb: check recvmsg even if sendmsg is exists.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (thread_read_select): restored.</div><div class='del'>-</div><div class='del'>-Mon Oct  6 16:23:38 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): wrong method name in the message.</div><div class='del'>-</div><div class='del'>-Mon Oct  6 16:02:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (stmt): END in method should cause warning.</div><div class='del'>-	  [ruby-dev:21519]</div><div class='del'>-</div><div class='del'>-Mon Oct  6 15:17:23 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct  6 11:57:06 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Oct  6 09:19:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sun Oct  5 23:27:09 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb: version information is added in document.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 23:07:03 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_f_END): block should be given.  [ruby-dev:21497]</div><div class='del'>-</div><div class='del'>-Sun Oct  5 22:51:23 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/ext/openssl/ossl_engine.c: ditto.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 17:56:30 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_eval): fix evaluation order.  [ruby-list:38431]</div><div class='del'>-</div><div class='del'>-Sun Oct  5 15:05:06 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/uri/*: translated RUNIT to Test::Unit.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 14:37:39 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/xsd/datatypes.rb: Rational -&gt; Decimal string bug fix.</div><div class='del'>-</div><div class='del'>-	* test/soap/marshal/test_marshal.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/soap/calc/test_calc_cgi.rb: add Config::CONFIG["EXEEXT"] to</div><div class='del'>-	  RUBYBIN.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 13:47:22 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Oct  5 11:54:29 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/envutil.rb: added.  split "rubybin" from test_system.rb.</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_system.rb: use envutil.rb</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_beginendblock.rb: added.</div><div class='del'>-</div><div class='del'>-	* test/ruby/beginmainend.rb: added.  used in test_beginendblock.rb.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 11:23:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/testunit/runit/test_testresult.rb: removed some unnecessary</div><div class='del'>-	  cruft.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 11:14:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/rubyunit.rb: aliasing TestCase into the top level is</div><div class='del'>-	  problematic.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/runit/*: added.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 10:55:29 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Oct  5 09:52:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/test_assertions.rb: made a small change to exception</div><div class='del'>-	  formatting.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 07:42:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/testunit/util/test_procwrapper.rb: use #assert instead of</div><div class='del'>-	  #assert_not_nil.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 04:10:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/assertions.rb: refactored message building.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 03:40:22 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.h: global symbols should be declared</div><div class='del'>-	  as external.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 03:03:20 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_exception.rb (test_else): added.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 02:12:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sun Oct  5 02:12:00 2003  Masatoshi SEKI  &lt;m_seki@mva.biglobe.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/drb/acl.rb, lib/drb/ssl.rb: added.</div><div class='del'>-</div><div class='del'>-	* lib/drb/drb.rb: exit from a thread using 'break'.</div><div class='del'>-</div><div class='del'>-Sat Oct  4 21:49:14 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct  4 17:52:59 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/soap/rpc/cgistub.rb: return "Status: XXX MMM" line.</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: give testsuite name.</div><div class='del'>-</div><div class='del'>-Sat Oct  4 15:16:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* parse.y (f_args): should allow unparenthesized block argument.</div><div class='del'>-</div><div class='del'>-	* parse.y (f_rest_arg): should allow unparenthesized rest</div><div class='del'>-	  argument.</div><div class='del'>-</div><div class='del'>-Sat Oct  4 14:59:51 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct  4 12:58:48 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/uri/* (6 files): added.</div><div class='del'>-</div><div class='del'>-Sat Oct  4 12:44:45 2003  akira yamada  &lt;akira@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/uri/ftp.rb, lib/uri/mailto.rb: renamed to #to_s from #to_str.</div><div class='del'>-</div><div class='del'>-Sat Oct  4 07:33:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/test_testsuite.rb: ditto. Also slightly refactored</div><div class='del'>-	  #test_size.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/objectspace.rb: collector now preserves the</div><div class='del'>-	  hierarchy of suites.</div><div class='del'>-</div><div class='del'>-	* test/testunit/collector/test_objectspace.rb: ditto.</div><div class='del'>-</div><div class='del'>-Sat Oct  4 04:48:49 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: default keys handled.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h: lowered default buffer size to 16k for increased</div><div class='del'>-	  performance.</div><div class='del'>-</div><div class='del'>-	* test/yaml: checkin of basic unit tests.</div><div class='del'>-</div><div class='del'>-Sat Oct  4 04:24:19 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for X509V3_set_nconf.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct  4 02:12:44 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* sample/wsdl/amazon/*: update schema ver2 to ver3.</div><div class='del'>-</div><div class='del'>-Sat Oct  4 01:33:46 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct  3 16:13:19 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.c: add DER encoder and decoder.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.h: add OpenSSL::ASN1 module.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c (Init_openssl): call Init_ossl_asn1.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: check if X509_ATTRIBUTE has field "single".</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Oct  3 13:02:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: refactored to use optparse.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/collector/test_objectspace.rb: ditto.</div><div class='del'>-</div><div class='del'>-Fri Oct  3 08:14:32 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Oct  3 08:01:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/testunit/test_failure.rb: ditto (added).</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/testcase.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* test/testunit/test_testcase.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/util/backtracefilter.rb: added.</div><div class='del'>-</div><div class='del'>-	* test/testunit/util/test_backtracefilter.rb: added.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/error.rb: changed to use BacktraceFilter and improved</div><div class='del'>-	  output.</div><div class='del'>-</div><div class='del'>-	* test/testunit/test_error.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Oct  2 20:33:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (iconv_failure_initialize): conform with</div><div class='del'>-	  orthodox initialization method.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  2 18:20:27 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (Init_Time): define initialize.  [ruby-dev:21469]</div><div class='del'>-</div><div class='del'>-Thu Oct  2 17:39:38 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_engine.h: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/MANIFEST: add ossl_engine.c and ossl_engine.h.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for openssl/engine.h.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c: call Init_ossl_engine().</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.h: include openssl/engine.h.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  2 17:22:37 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  2 14:19:15 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Oct  2 12:00:18 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_defined.rb (TestDefined::test_defined): test for</div><div class='del'>-	  constants.</div><div class='del'>-</div><div class='del'>-Thu Oct  2 11:17:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/assertions.rb: should not capture an</div><div class='del'>-	  AssertionFailedError unless explicitly requested.</div><div class='del'>-</div><div class='del'>-	* test/testunit/test_assertions.rb: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/test/unit/testcase.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/testsuite.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/objectspace.rb: ditto.</div><div class='del'>-</div><div class='del'>-Thu Oct  2 03:25:01 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_raise): prototype; avoid VC++ warning.</div><div class='del'>-</div><div class='del'>-Thu Oct  2 01:37:34 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* time.c (time_mdump): new marshal dumper. _dump is still</div><div class='del'>-	  available for compatibility.</div><div class='del'>-</div><div class='del'>-	* time.c (time_mload): new marshal loader.</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_object): preserve instance variables for objects</div><div class='del'>-	  with marshal_dump.</div><div class='del'>-</div><div class='del'>-	* marshal.c (r_object0): restore instance variables before calling</div><div class='del'>-	  marshal_load.</div><div class='del'>-</div><div class='del'>-	* error.c (rb_warn_m): always return nil.</div><div class='del'>-</div><div class='del'>-Thu Oct  2 01:32:46 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (rb_block_given_p): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Oct  2 01:02:35 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Oct  2 00:21:11 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* test/xsd/test_xsd.rb, test/soap/test_basetype.rb: follow above change.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Oct  2 00:42:20 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* marshal.c (r_bytes0): ditto.</div><div class='del'>-</div><div class='del'>-	* enum.c (sort_by_i): re-entrance check added.  [ruby-dev:24399]</div><div class='del'>-</div><div class='del'>-	* io.c (io_read): should freeze all reading buffer.</div><div class='del'>-	  [ruby-dev:24400]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* string.c (rb_str_sum): wrong cast caused wrong result.</div><div class='del'>-	  [ruby-dev:24385]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* string.c (rb_str_sum): string may be altered.  [ruby-dev:24381]</div><div class='del'>-</div><div class='del'>-Thu Oct  2 00:25:21 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* signal.c (ruby_signal_name): adjust to the prototype.</div><div class='del'>-</div><div class='del'>-	* process.c (pst_inspect): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c (etc_getgrent, Init_etc): typo.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 20:49:41 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* gc.c (heaps): manage slots and limits together.  [ruby-dev:21453]</div><div class='del'>-</div><div class='del'>-	* gc.c (add_heap): should not clear heaps slot even if realloc()</div><div class='del'>-	  failed.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 20:36:49 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add wince/mkconfig_wce.rb.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 17:22:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/etc/etc.c: add new functions: setpwent, getpwent, endpwent,</div><div class='del'>-	  setgrent, getgrent, endgrent.</div><div class='del'>-</div><div class='del'>-	* ext/socket/socket.c (sock_s_gethostbyname): do not reverse lookup.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 17:01:30 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Oct  1 14:09:53 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/mkconfig_wce.rb: sorry, forget to commit.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 10:08:42 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/setup.mak: add sigmarionIII SDK support.</div><div class='del'>-</div><div class='del'>-	* wince/Makefile.sub: ditto.</div><div class='del'>-</div><div class='del'>-	* wince/mkexports.rb: fix linker error in SH4.</div><div class='del'>-</div><div class='del'>-	* wince/mkconfig_wce.rb: camouflage RUBY_PLATFORM for compiling ext.</div><div class='del'>-</div><div class='del'>-Wed Oct  1 08:02:52 2003  Takaaki Uematsu  &lt;uema2x@jcom.home.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-	* wince/time_wce.c (time): add zero check.</div><div class='del'>-</div><div class='del'>-Tue Sep 30 16:11:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 30 11:29:23 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (pst_inspect): describe stopped process "stopped".</div><div class='del'>-</div><div class='del'>-Tue Sep 30 09:31:56 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: glob for directories.</div><div class='del'>-</div><div class='del'>-Tue Sep 30 09:11:43 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 30 03:12:02 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/net/http.rb (finish): revert to 1.93.</div><div class='del'>-</div><div class='del'>-	* lib/net/pop.rb (finish): revert to 1.60.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb (finish): revert to 1.67.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/net/pop.rb (do_start): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb (do_start): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb: SMTP#started? wrongly returned false always.</div><div class='del'>-</div><div class='del'>-Tue Sep 30 02:54:49 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_iterator.rb: new test</div><div class='del'>-	  test_break__nested_loop[123].</div><div class='del'>-</div><div class='del'>-Mon Sep 29 23:39:13 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/net/pop.rb (finish): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/net/smtp.rb (finish): ditto.</div><div class='del'>-</div><div class='del'>-Mon Sep 29 19:06:51 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/win32ole/extconf.rb: add windows.h checking.</div><div class='del'>-	  (ruby-bugs:PR#1185)</div><div class='del'>-</div><div class='del'>-Mon Sep 29 16:18:30 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* lib/wsdl/xmlSchema/data.rb: wrong constant reference.</div><div class='del'>-</div><div class='del'>-Mon Sep 29 16:11:23 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 29 11:16:55 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_atfork): wrong format specifier.</div><div class='del'>-	  [ruby-dev:21428]</div><div class='del'>-</div><div class='del'>-	* process.c (pst_inspect): better description.</div><div class='del'>-</div><div class='del'>-Mon Sep 29 02:31:44 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Sep 28 11:14:19 2003  Koji Arai  &lt;jca02266@nifty.ne.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/stringio/stringio.c (Init_stringio): ditto.</div><div class='del'>-</div><div class='del'>-Sat Sep 27 18:25:13 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/xsd/test_xsd.rb: add tests for above fix.</div><div class='del'>-</div><div class='del'>-Sat Sep 27 15:58:50 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/rpc/cgistub.rb: make logging severity threshold higher.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/soap/calc/test_*, test/soap/helloworld/test_helloworld.rb: run</div><div class='del'>-	  silent.</div><div class='del'>-</div><div class='del'>-Sat Sep 27 09:44:18 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: clear all errors on Windows.</div><div class='del'>-	  [ruby-dev:21417]</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_nowrite.rb: ditto.</div><div class='del'>-</div><div class='del'>-Mon Sep 27 09:14:03 2004  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_delete): comparison may change the capacity.</div><div class='del'>-	  [ruby-dev:24348]</div><div class='del'>-</div><div class='del'>-	* array.c (rb_ary_fill): fill should honor length argument.</div><div class='del'>-	  [ruby-dev:24346]</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Sep 27 04:57:07 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Sat Sep 27 03:32:37 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Sep 27 01:30:59 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep 26 18:35:40 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/resolv-replace.rb: 1.8 compliance.  [ruby-talk:82946]</div><div class='del'>-</div><div class='del'>-Fri Sep 26 17:39:27 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_marshal.rb: add test for ruby's objects.</div><div class='del'>-</div><div class='del'>-Fri Sep 26 09:52:44 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/mkmf.rb (xsystem): use system directly to honor shell meta</div><div class='del'>-	  charaters.</div><div class='del'>-</div><div class='del'>-Fri Sep 26 00:10:13 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/README: updated.</div><div class='del'>-</div><div class='del'>-Thu Sep 25 17:48:10 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_hmac.c (ossl_hmac_digest): should return meaningful</div><div class='del'>-	  value.</div><div class='del'>-</div><div class='del'>-Thu Sep 25 09:00:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ostruct.rb: Added OpenStruct#==.</div><div class='del'>-</div><div class='del'>-	* test/ostruct/test_ostruct.rb: Added.</div><div class='del'>-</div><div class='del'>-Thu Sep 25 07:55:26 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 25 00:23:22 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add SOAP4R.</div><div class='del'>-</div><div class='del'>-Thu Sep 25 00:13:15 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/soap/* (29 files): SOAP4R added.</div><div class='del'>-</div><div class='del'>-	* lib/wsdl/* (42 files): WSDL4R added.</div><div class='del'>-</div><div class='del'>-	* lib/xsd/* (12 files): XSD4R added.</div><div class='del'>-</div><div class='del'>-	* test/soap/* (16 files): added.</div><div class='del'>-</div><div class='del'>-	* test/wsdl/* (2 files): added.</div><div class='del'>-</div><div class='del'>-	* test/xsd/* (3 files): added.</div><div class='del'>-</div><div class='del'>-	* sample/soap/* (27 files): added.</div><div class='del'>-</div><div class='del'>-	* sample/wsdl/* (13 files): added.</div><div class='del'>-</div><div class='del'>-Wed Sep 24 02:08:11 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 23 23:10:16 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/logger/test_logger.rb: ditto.</div><div class='del'>-</div><div class='del'>-Tue Sep 23 20:47:51 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep 22 21:28:57 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: updated.</div><div class='del'>-</div><div class='del'>-Mon Sep 22 19:22:26 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* configure.in (AC_CHECK_FUNCS): add setuid and setgid.</div><div class='del'>-</div><div class='del'>-Mon Sep 22 12:34:55 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Sep 21 04:12:36 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_ocsp.c (ossl_ocspres_initialize): ditt.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): ditto.</div><div class='del'>-</div><div class='del'>-Sat Sep 20 11:49:05 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/logger.rb: typo fixed.</div><div class='del'>-</div><div class='del'>-	* test/logger/test_logger.rb: new file.</div><div class='del'>-</div><div class='del'>-Fri Sep 19 11:39:00 2003  Nathaniel Talbott  &lt;ntalbott@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/testunit/*: Added.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: Documentation update.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/ui/console/testrunner.rb (TestRunner#initialize):</div><div class='del'>-	  Ditto.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit.rb: Factored out an ObjectSpace collector.</div><div class='del'>-</div><div class='del'>-	* lib/test/unit/collector/objectspace.rb: Ditto.</div><div class='del'>-</div><div class='del'>-	* sample/testunit/*: Added.</div><div class='del'>-</div><div class='del'>-Fri Sep 19 01:00:48 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/log.rb (BasicLog#log): get rid of as ineffectual</div><div class='del'>-	  condition.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/log.rb (BasicLog#format): add "\n" to message.</div><div class='del'>-</div><div class='del'>-Thu Sep 18 22:43:20 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): should push PROT_PCALL tag for orphans.</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): should update "result" for orphans.</div><div class='del'>-</div><div class='del'>-Thu Sep 18 20:33:03 2003  Tietew  &lt;tietew-ml-ruby-list@tietew.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep 18 20:30:17 2003  Tanaka Akira  &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/pathname.rb: update document.</div><div class='del'>-</div><div class='del'>-Thu Sep 18 15:27:05 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/logger.rb: new file.  Logger, formerly called devel-logger or</div><div class='del'>-	  Devel::Logger.</div><div class='del'>-</div><div class='del'>-	* sample/logger/*: new file.  samples of logger.rb.</div><div class='del'>-</div><div class='del'>-Wed Sep 17 23:41:45 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Wed Sep 17 20:34:00 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 17 18:52:36 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* test/fileutils/fileassertions.rb: new file.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_fileutils.rb: new file.</div><div class='del'>-</div><div class='del'>-	* test/fileutils/test_nowrite.rb: new file.</div><div class='del'>-</div><div class='del'>-Wed Sep 17 18:51:02 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* test/strscan/test_stringscanner.rb: require test/unit.</div><div class='del'>-</div><div class='del'>-Wed Sep 17 18:35:34 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</div><div class='del'>-	* test/strscan/test_stringscanner.rb: new file.</div><div class='del'>-</div><div class='del'>-Wed Sep 17 18:03:30 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl: all files are reviewed to simplify and avoid memory leak.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb: add check for assert.h.</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl.h: ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_bio.h: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_pkcs7.c (ossl_pkcs7_to_der): add for "to_der".</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509name.c (ossl_x509name_to_der): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509ext_to_der): ditto.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/x509.c (X509::Attribute): get rid off</div><div class='del'>-	  unused code.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/x509.c (X509::ExtensionFactory): refine all.</div><div class='del'>-</div><div class='del'>-Tue Sep 16 22:25:06 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/csv/test_csv.rb: add negative tests of row_sep.</div><div class='del'>-</div><div class='del'>-Tue Sep 16 18:02:36 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep 16 16:47:56 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* MANIFEST: add test/csv/mac.csv.</div><div class='del'>-</div><div class='del'>-	* win32/Makefile.sub, bcc32/Makefile.sub (test): add phony NUL target.</div><div class='del'>-</div><div class='del'>-Mon Sep 15 19:02:52 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/csv/test_csv.rb: add tests for above feature.</div><div class='del'>-</div><div class='del'>-	* test/csv/mac.csv: added.  Sample CR separated CSV file.</div><div class='del'>-</div><div class='del'>-Fri Sep 12 22:41:48 2003  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c: move ASN.1 stuff to ossl_asn1.[ch]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.c: move BIO stuff to ossl_bio.[ch]</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_asn1.[ch]: new files</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_bio.[ch]: new files</div><div class='del'>-</div><div class='del'>-Fri Sep 12 12:30:41 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep 12 12:09:54 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_and): convert argument using 'to_int'.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_or): ditto.</div><div class='del'>-</div><div class='del'>-	* bignum.c (rb_big_xor): ditto.</div><div class='del'>-</div><div class='del'>-Fri Sep 12 07:06:14 2003  David Black  &lt;dblack@superlink.net&gt;</div><div class='del'>-</div><div class='del'>-	* lib/scanf.rb: Took out useless @matched_item variable; some small</div><div class='del'>-	  refactoring.</div><div class='del'>-</div><div class='del'>-Thu Sep 11 08:43:44 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::stream):</div><div class='del'>-	  Supports StringIO.</div><div class='del'>-</div><div class='del'>-Wed Sep 10 22:47:30 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_config.c (ossl_config_initialize): ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_config.c (ossl_config_add_value): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep 10 22:41:54 2003  Tietew  &lt;tietew@tietew.net&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (win32_get_exception_list): avoid VC7 warning.</div><div class='del'>-	  [ruby-win32:577]</div><div class='del'>-</div><div class='del'>-Tue Sep  9 10:39:51 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (struct tag): dst should be VALUE.</div><div class='del'>-</div><div class='del'>-Tue Sep  9 10:39:51 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep  9 05:17:04 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_config.rb: avoid compile error in OpenSSL-0.9.6.</div><div class='del'>-</div><div class='del'>-Tue Sep  9 02:41:35 2003  Michal Rokos  &lt;m.rokos@sh.cvut.cz&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_config.c: Refine compatibility.</div><div class='del'>-</div><div class='del'>-Tue Sep  9 01:50:45 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpserver.rb (HTTPServer#access_log): add "\n" to</div><div class='del'>-	  the message.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/log.rb (BasicLog#log): add "\n" only if needed.</div><div class='del'>-</div><div class='del'>-Mon Sep  8 22:15:33 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  8 20:00:12 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb, lib/optparse/version.rb: search also all</div><div class='del'>-	  capital versions.</div><div class='del'>-</div><div class='del'>-Mon Sep  8 19:26:33 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl.h: include openssl/conf.h and openssl/conf_api.h.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_config.c: refine all with backward compatibility.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_config.h: export GetConfigPtr() and DupConfigPtr().</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (ossl_x509_set_config): add for config=.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  8 18:26:41 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/webrick/httprequest.rb (HTTPRequest#meta_vars): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpservlet/filehandler.rb (FileHandler#dir_list): ditto.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/config.rb: :Listen option never be used.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/webrick/log.rb (BasicLog#&lt;&lt;): shortcut of log(INFO, ...).</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpserver.rb (HTTPServer#accesslog): use &lt;&lt; for logging.</div><div class='del'>-</div><div class='del'>-Sun Sep  7 16:08:28 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (lib_mainloop_core): fixed signal-trap bug</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/*.rb : Ruby/Tk works at $SAFE == 4</div><div class='del'>-</div><div class='del'>-Sat Sep  6 02:26:34 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_*.rb: assert_same, assert_match, and so on.</div><div class='del'>-</div><div class='del'>-Sat Sep  6 18:45:46 2003  Mauricio Fernandez  &lt;batsman.geo@yahoo.com&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (assignable): call rb_compile_error(), not rb_bug().</div><div class='del'>-	  [ruby-core:01523]</div><div class='del'>-</div><div class='del'>-Sat Sep  6 17:40:41 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (X509::Extension.new): new method.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (X509::Extension#oid=): new method.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (X509::Extension#value=): new method.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_x509ext.c (X509::Extension#critical=): new method.</div><div class='del'>-</div><div class='del'>-Sat Sep  6 01:23:22 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (CreateChild): need to quote cmd if RUBYSHELL is set.</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (CreateChild): fix condition about whether to call</div><div class='del'>-	  shell or not.</div><div class='del'>-</div><div class='del'>-Sat Sep  6 00:36:20 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</div><div class='del'>-	* Makefile.in (test): phony target.</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (have_library, find_library): configure by library</div><div class='del'>-	  name.</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (OptionParser#order, #permute, #parse): allow an</div><div class='del'>-	  array as argument.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* win32/win32.c (isInternalCmd): distinguish command.com and</div><div class='del'>-	  cmd.exe.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep  5 20:27:08 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_*.rb: replace 'assert(a == b)' with assert_equal(a, b)'</div><div class='del'>-</div><div class='del'>-Fri Sep  5 18:00:51 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/x509.rb: new method X509::Name::parse.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_digest.c: add ossl_digest_new().</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_digest.h: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_cipher.c: add ossl_cipher_new().</div><div class='del'>-</div><div class='del'>-	* ext/openssl/ossl_cipher.h: ditto.</div><div class='del'>-</div><div class='del'>-Fri Sep  5 15:32:04 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep  5 13:32:48 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: arguments should be keys.</div><div class='del'>-</div><div class='del'>-Fri Sep  5 12:09:55 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby/test_system.rb (test_system): check existence of ruby</div><div class='del'>-	  interpreter.</div><div class='del'>-</div><div class='del'>-Fri Sep  5 11:32:17 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/optparse.rb (--version): fix assignment/reference order.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/optparse/version.rb (OptionParser#show_version): hide Object.</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: fix optparse usage.</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: glob all testsuits if no tests given.</div><div class='del'>-</div><div class='del'>-Fri Sep  5 10:42:58 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/runner.rb: added.  gets testcases from command line and runs it.</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep  5 09:28:59 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Sep  5 03:00:04 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/ruby/test_iterator.rb (test_ljump): uncomment LocalJumpError</div><div class='del'>-	  test.</div><div class='del'>-</div><div class='del'>-Fri Sep  5 01:10:11 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/ruby: tests for ruby itself.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Fri Sep  5 01:03:59 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep  4 23:59:40 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep  4 19:38:25 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/io/wait/.cvsignore: added.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/.cvsignore: added.</div><div class='del'>-</div><div class='del'>-Thu Sep  4 19:28:24 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/sample/*: removed.  move to sample/openssl/*.</div><div class='del'>-</div><div class='del'>-Thu Sep  4 18:02:15 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Thu Sep  4 17:41:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Sep  4 15:40:07 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* test/csv/test_csv.rb: run on test/unit original layer.</div><div class='del'>-</div><div class='del'>-Thu Sep  4 12:54:50 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: headerless documents with root-level spacing now</div><div class='del'>-	  honored.</div><div class='del'>-</div><div class='del'>-Thu Sep  4 00:06:14 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Sep  3 21:33:20 2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* test/csv/*: add testcase for lib/csv.rb.</div><div class='del'>-</div><div class='del'>-Wed Sep  3 01:37:09 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep  2 20:37:15 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep  2 23:36:57 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (proc_invoke): should retrieve retval when pcall is true.</div><div class='del'>-</div><div class='del'>-Tue Sep  2 14:09:20 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/socket/getaddrinfo.c (getaddrinfo): should use in6_addr8 on</div><div class='del'>-	  some platforms.</div><div class='del'>-</div><div class='del'>-	* ext/socket/getnameinfo.c (getnameinfo): ditto.</div><div class='del'>-</div><div class='del'>-Tue Sep  2 14:02:19 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c (ip_invoke): fixed bug on passing a exception</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep  2 09:51:36 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Sep  2 00:44:37 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* re.c (rb_memsearch): fix overrun.  [ruby-talk:80759]</div><div class='del'>-</div><div class='del'>-Tue Sep  2 00:41:27 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/iconv/iconv.c (map_charset): use lower case keys.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* ext/iconv/charset_alias.rb (charset_alias): optional third</div><div class='del'>-	  argument.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  1 18:34:25 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  1 18:00:02 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (aref_args): forgot to call NEW_SPLAT(). reported by</div><div class='del'>-	  Dave Butcher.</div><div class='del'>-</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='del'>-</div><div class='del'>-Mon Sep  1 16:59:10 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_thread_switch): add RESTORE_EXIT; exit by another</div><div class='del'>-	  thread termination.</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Aug 31 22:46:55 2003  WATANABE Hirofumi  &lt;eban@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (TAG_DST()): take no argument.</div><div class='del'>-</div><div class='del'>-	* process.c (p_gid_sw_ensure): return VALUE.</div><div class='del'>-</div><div class='del'>-Sun Aug 31 22:27:10 2003  Hidetoshi NAGAI  &lt;nagai@dumbo.ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c (p_gid_sw_ensure): lack of function type</div><div class='del'>-</div><div class='del'>-Sun Aug 31 12:25:06 2003  Nobuyoshi Nakada  &lt;nobu.nokada@softhome.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sun Aug 31 10:17:02 2003  Tadayoshi Funaba  &lt;tadf@dotrb.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/date/format.rb: yyyy/mm is not an acceptable format.</div><div class='del'>-</div><div class='del'>-	* lib/time.rb: follow above.</div><div class='del'>-</div><div class='del'>-Sat Aug 30 14:25:43 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_iter_break): should not call TAG_JUMP directly.</div><div class='del'>-</div><div class='del'>-Sat Aug 30 03:58:21 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (struct BLOCK): remove BLOCKTAG, use scope instead.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* eval.c (localjump_destination): new function to cast</div><div class='del'>-	  return/break local jump.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_0): stop TAG_RETURN/TAG_BREAK escaping.</div><div class='del'>-</div><div class='del'>-Fri Aug 29 22:35:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Fri Aug 29 17:30:15 2003  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* process.c: bug fix</div><div class='del'>-</div><div class='del'>-	* process.c: add rb_secure(2) to methods of Process::{UID,GID,Sys}</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c : some methods have no effect if on slave-IP</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c : can create a interpreter without Tk</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/tcltklib.c : bug fix on handling exceptions</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/MANUAL.euc : modify</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb : freeze some core modules</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/multi-tk.rb : more secure</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tk.rb: improve accessibility of TkVariable object</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/tk/lib/tkfont.rb TkFont.new() accepts compound fonts</div><div class='del'>-</div><div class='del'>-Thu Aug 28 22:07:12 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-	* eval.c (is_defined): forgot to check NODE_COLON3.</div><div class='del'>-</div><div class='del'>-Thu Aug 28 17:30:24 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-Thu Aug 28 05:02:52 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* parse.y (singleton): typo fixed (ruby-bugs-ja:PR#562)</div><div class='del'>-</div><div class='del'>-Thu Aug 28 02:37:45 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* node.h: merge NODE_RESTARY to NODE_SPLAT.</div><div class='del'>-</div><div class='del'>-	* parse.y: rules simplified a bit by removing NODE_RESTARY.</div><div class='del'>-</div><div class='del'>-	* sample/test.rb: updated for new assignment behavior.</div><div class='del'>-</div><div class='del'>-Wed Aug 27 22:33:24 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 27 15:07:57 2003  Minero Aoki  &lt;aamine@loveruby.net&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 27 05:10:15 2003  NAKAMURA Usaku  &lt;usa@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* win32/win32.c (map_errno): support winsock error.</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):</div><div class='del'>-	  pass errno to map_errno().</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): use map_errno().</div><div class='del'>-</div><div class='del'>-	* win32/win32.h: add winsock errors.</div><div class='del'>-</div><div class='del'>-Tue Aug 26 23:53:23 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/ostruct.rb (OpenStruct::method_missing): prohibit modifying</div><div class='del'>-	  frozen OpenStruct. [ruby-talk:80214]</div><div class='del'>-</div><div class='del'>-Tue Aug 26 20:03:50 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/mkmf.rb (create_tmpsrc): add the hook for source.</div><div class='del'>-	  [ruby-list:38122]</div><div class='del'>-</div><div class='del'>-Tue Aug 26 15:59:53 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* implicit.c (syck_type_id_to_taguri): corrected detection of</div><div class='del'>-	  x-private types.</div><div class='del'>-</div><div class='del'>-Sun Aug 24 01:02:48 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* file.c (file_expand_path): performance improvement.</div><div class='del'>-	  [ruby-talk:79748]</div><div class='del'>-</div><div class='del'>-Sat Aug 23 23:41:16 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 23 18:56:53 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 23 16:48:41 2003  Keiju Ishitsuka  &lt;keiju@ishitsuka.com&gt;</div><div class='del'>-</div><div class='del'>-	* lib/irb/ruby-lex.rb: bug fix for "foo" !~ /bar/. [ruby-talk:79942]</div><div class='del'>-</div><div class='del'>-Sat Aug 23 15:59:58 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 23 02:32:33 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_splat): should check if "values" is array.</div><div class='del'>-</div><div class='del'>-	* enum.c (each_with_index_i): typo.</div><div class='del'>-</div><div class='del'>-Fri Aug 22 17:07:05 2003  Yukihiro Matsumoto  &lt;matz@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* enum.c (inject_i): use rb_yield_values.</div><div class='del'>-</div><div class='del'>-	* enum.c (each_with_index_i): ditto.</div><div class='del'>-</div><div class='del'>-	* eval.c (rb_yield_splat): new function to call "yield *values".</div><div class='del'>-</div><div class='del'>-	* string.c (rb_str_scan): use rb_yield_splat().</div><div class='del'>-</div><div class='del'>-Fri Aug 22 06:13:22 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/yaml/rubytypes.rb: removed handling of builtins from</div><div class='del'>-	  Ruby library.</div><div class='del'>-</div><div class='del'>-	* ext/syck/token.c: quoted and block scalars are now implicit !str</div><div class='del'>-</div><div class='del'>-	* ext/syck/implicit.c: empty string detected as !null.</div><div class='del'>-</div><div class='del'>-Fri Aug 22 01:00:31 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* eval.c (block_pass): improve passing current block.</div><div class='del'>-</div><div class='del'>-Fri Aug 22 00:13:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 20 16:44:49 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Wed Aug 20 01:31:17 2003  why the lucky stiff  &lt;why@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.h: Parser definition problems on HP-UX.</div><div class='del'>-	  [ruby-talk:79389]</div><div class='del'>-</div><div class='del'>-	* ext/syck/handler.c (syck_hdlr_get_anchor): Memory leak.</div><div class='del'>-</div><div class='del'>-	* ext/syck/syck.s (syck_io_file_read): Bad arguments to fread.</div><div class='del'>-</div><div class='del'>-	* ext/syck/rubyext.c: Tainting issues.</div><div class='del'>-</div><div class='del'>-Tue Aug 19 23:20:00 2003  Shigeo Kobayashi  &lt;shigek@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/bigdecimal.c .h .html: to_s("+") implemented.</div><div class='del'>-</div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/math.rb: E implemented.</div><div class='del'>-</div><div class='del'>-Tue Aug 19 07:47:09 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</div><div class='del'>-	* lib/webrick/ssl.rb: new file; SSL/TLS enhancement for GenericServer.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/https.rb: SSLSocket handling is moved to webrick/ssl.rb.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/compat.rb (File::fnmatch): remove old migration code.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/httpserver.rb (HTTPServer#run): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* lib/webrick/utils.rb (Utils::create_lisnteners): new method.</div><div class='del'>-</div><div class='del'>-	* lib/webrick/server.rb (GenericServer#start): should rescue</div><div class='del'>-	  unknown errors. and refine comments.</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 19 11:19:33 2003  Shugo Maeda  &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Tue Aug 19 07:47:09 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb (Buffering#close): ditto.</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/ssl.rb: new class OpenSSL::SSL::SSLServer.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): use sync_close.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/sample/echo_svr.rb: use SSLServer.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/sample/echo_cli.rb: add example of SSLSocket#sync_close.</div><div class='del'>-</div><div class='del'>-Tue Aug 19 01:24:34 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/curses/extconf.rb: check if _XOPEN_SOURCE_EXTENDED breaks.</div><div class='del'>-</div><div class='del'>-	* ext/tcltklib/stubs.c: Status macro in X11/Xthreads.h bothers</div><div class='del'>-	  winspool.h</div><div class='del'>-</div><div class='del'>-	* instruby.rb: make list at first instead of iterator.</div><div class='del'>-	  [ruby-talk:79347]</div><div class='del'>-</div><div class='del'>-Mon Aug 18 11:23:11 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* dir.c (glob_helper): preserve raw order for **.</div><div class='del'>-</div><div class='del'>-Sun Aug 17 23:39:55 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* ext/openssl/extconf.rb (HAVE_VA_ARGS_MACRO): need to compile.</div><div class='del'>-</div><div class='del'>-Sun Aug 17 17:10:03 2003  GOTOU Yuuzou  &lt;gotoyuzo@notwork.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-	* ext/openssl/lib/openssl/buffering.rb: add forwarders to</div><div class='del'>-	  setsockopt, getsockopt and fcntl.</div><div class='del'>-</div><div class='del'>-	* ext/openssl/lib/net/protocols.rb: enable sync for SSLSocket.</div><div class='del'>-</div><div class='del'>-Sun Aug 17 11:32:04 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</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='del'>-</div><div class='del'>-Sat Aug 16 23:58:18 2003  Nobuyoshi Nakada  &lt;nobu@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-	* marshal.c (w_symbol, w_object): get rid of warnings.</div><div class='del'>-</div><div class='del'>-	* re.c (rb_memsearch): ditto.</div><div class='del'>-</div><div class='del'>-	* time.c (time_dump): ditto.</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'>+	  ¤È¤Û¤ÜÅù²Á¤Ç¤¢¤ë.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/extconf.rb: check __VA_ARGS__ macro more precisely.</div><div class='add'>+	* String:atoi¥á¥½¥Ã¥É¤òºï½ü. to_a¥á¥½¥Ã¥É¤«¤éa¤¬ÇÛÎó¤Ç¤¢¤ë¤È¤ÎÏ¢ÁÛ</div><div class='add'>+	  ¤ò¸Æ¤ó¤Ç, º®Íð¤ò¾·¤«¤Ê¤¤¤¿¤á. Âå¤ï¤ê¤Ëto_i¥á¥½¥Ã¥É¤ò»È¤¦¤³¤È.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl.h: remove version.h dependency.</div><div class='add'>+	* ÇÛÎó¤Ø¤ÎÊÑ´¹¥á¥½¥Ã¥Éto_a¤òÆ³Æþ¤·¤¿. ÄÌ¾ï¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï¼«Ê¬¼«¿È</div><div class='add'>+	  ¤òÍ£°ì¤ÎÍ×ÁÇ¤È¤¹¤ëÄ¹¤µ1¤ÎÇÛÎó¤òÊÖ¤¹. ÇÛÎó¤Ï¼«Ê¬¼«¿È¤ò, ¼­½ñ¤Ï¥­¡¼</div><div class='add'>+	  ¤ÈÃÍ¤Î¥Ú¥¢¤ÎÇÛÎó¤òÊÖ¤¹. Enumerated¤òinclude¤·¤¿¥¯¥é¥¹¤Ï, each¤¬</div><div class='add'>+	  ÊÖ¤¹³ÆÍ×ÁÇ¤ò´Þ¤àÇÛÎó¤òÊÖ¤¹.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ruby_missing.h: ditto.</div><div class='add'>+	* file.c: ÉÔÄê¸Ä¤Î°ú¿ô¤ò¼õ¤±¤È¤ë¥á¥½¥Ã¥É(chmod,chown,utimes)¤ò½ñ¤­</div><div class='add'>+	  ´¹¤¨¤Æ, À°Íý¤·¤¿. ¤½¤ì¤ËÈ¼¤¤, ºÇ½é¤ËÁ´¤Æ¤Î°ú¿ô¤Î·¿¥Á¥§¥Ã¥¯¤ò¹Ô¤Ê</div><div class='add'>+	  ¤¦¤è¤¦¤Ë¤·¤¿. ·¿¥Á¥§¥Ã¥¯¤Ë¼ºÇÔ¤¹¤ë¤È½èÍý¤ò¹Ô¤Ê¤ï¤º¤ËÎã³°¤òÈ¯À¸¤µ</div><div class='add'>+	  ¤»¤ë.</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'>+	* configure.in: ÉÔÉ¬Í×¤Ê¥Æ¥¹¥È¤ò¹Ô¤Ê¤ï¤Ê¤¤¤è¤¦¤Ë½¤Àµ¤·¤¿.</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'>+Tue May 31 10:41:08 1994  Yukihiro Matsumoto  (matz@ix-02)</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'>+	* String:pack(): 2¿Ê¿ô¤ÎÊ¸»úÎóÊÑ´¹(B,b)¤Ç0¤È1¤¬µÕ¤À¤Ã¤¿.</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'>+	* Math.c: ¼Â¿ô·Ï¤Î¥á¥½¥Ã¥É¤Ë°ú¿ô¤È¤·¤ÆÀ°¿ô¤¬ÅÏ¤µ¤ì¤¿»þ¤Ë¼«Æ°Åª¤ËÊÑ</div><div class='add'>+	  ´¹¤¹¤ë¤è¤¦¤Ë¤·¤¿.</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'>+	* toupper(), tolower(): Ê¸»úÎó¤ÎÈ½Äê¥ß¥¹¤ÇÊÑ´¹¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/math.rb: atan() &amp; sqrt() added.</div><div class='add'>+	* getopt_long()¤Î»ÅÍÍ¤Ë¤è¤Ã¤Æ, ¥¹¥¯¥ê¥×¥È¤Ø¤Î°ú¿ô¤¬¥¤¥ó¥¿¥×¥ê¥¿¤Î</div><div class='add'>+	  °ú¿ô¤À¤È²ò¼á¤µ¤ì¤Æ¤¤¤¿. °ú¿ô¥Ñ¥¿¡¼¥óÊ¸»úÎó¤ÎÀèÆ¬¤Ë`+'¤òÄÉ²Ã.</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'>+	* config.h¤òºï½ü¤·¤¿. DEFINE¤ÏMakefile¤ÇÍ¿¤¨¤é¤ì¤ë.</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'>+	* sprintf(): "%d"¤ËÊ¸»úÎó¤¬Í¿¤¨¤é¤ì¤¿»þ¤Ë¤Ï¥¢¥É¥ì¥¹¤Ç¤Ï¤Ê¤¯ÆâÍÆ¤ò</div><div class='add'>+	  À°¿ô¤ËÊÑ´¹¤¹¤ë¤è¤¦¤Ë¤·¤¿. ¤Ä¤¤¤Ç¤ËÉâÆ°¾®¿ôÅÀ¿ô¤âÊÑ´¹¤¹¤ë¤è¤¦¤ËÊÑ</div><div class='add'>+	  ¹¹¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* error.c (syserr_eqq): errno might exceed Fixnum limit.</div><div class='add'>+	* regexp.c: ruby¤Î³ÈÄ¥Àµµ¬É½¸½(\d, \D, \s, \S)¤Î½èÍý¤Ç³ä¤êÅö¤Æ¤¿ÎÎ</div><div class='add'>+	  °è¤ò±Û¤¨¤Æ¥Ð¥Ã¥Õ¥¡¤Ë½ñ¤­¹þ¤ó¤Ç¤¤¤¿. ½èÍýÁ°¤Ë¥Ð¥Ã¥Õ¥¡¤ò¤­¤Á¤ó¤È³È</div><div class='add'>+	  Ä¥¤¹¤ë¤è¤¦¤Ë¤·¤¿. ¤³¤ì¤ÇºòÆüÌäÂê¤Ë¤·¤Æ¤¤¤¿¥á¥â¥ê¤ÎÌäÂê¤Ï²ò·è¤Ç¤­</div><div class='add'>+	  ¤¿¤È»×¤¦.</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'>+	* yylex(): ¥À¥Ö¥ë¥¯¥©¡¼¥ÈÊ¸»úÎóÃæ¤Ç¥À¥Ö¥ë¥¯¥©¡¼¥È¤òÉ½¸½¤¹¤ë¤¿¤á</div><div class='add'>+	  ¤Î¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥åÉ½¸½¤¬¤Ç¤­¤Ê¤«¤Ã¤¿.</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'>+Mon May 30 10:07:42 1994  Yukihiro Matsumoto  (matz@ix-02)</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'>+	* ±é»»»Ò`!'¤Î±¦ÊÕ¤â¾ò·ï¼°¤Ç¤¢¤ë¤È¤·¤¿. ¤³¤ì¤Ë¤è¤Ã¤Æ, ¤³¤Î±é»»»Ò¤ò</div><div class='add'>+	  ºÆÄêµÁ¤¹¤ë¿Í¤Ïº®Íð¤¹¤ë¤«¤âÃÎ¤ì¤Ê¤¤¤¬, ÂçÂ¿¿ô¤Î¤³¤Î±é»»»Ò¤ò»È¤¦¿Í</div><div class='add'>+	  ¤Ïº®Íð¤òÈò¤±¤ë¤³¤È¤¬¤Ç¤­¤ë¤È»×¤¦.</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'>+	* autoconf¤ò»È¤Ã¤Æ, ¼«Æ°Åª¤ËMakefile, config.h¤òÀ¸À®¤¹¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='add'>+	  ¤³¤ì¤Ç, ÂçÄñ¤Î¥Þ¥·¥ó¤Ç¤Ï`configure'¤ò¼Â¹Ô¤·¤¿¸å, `make'°ìÈ¯¤Ç¥³</div><div class='add'>+	  ¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤È»×¤¦.</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'>+	* clone: ¥µ¥Ö¥¯¥é¥¹¤ËÂÐ¤·¤ÆÍÑ¤¤¤é¤ì¤¿¾ì¹ç, ¸µ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ÈÆ±¤¸</div><div class='add'>+	  ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÊÖ¤¹¤è¤¦¤Ë(°ÊÁ°¤Ï¥Ó¥ë¥È¥¤¥ó¥¯¥é¥¹¤Î¾ì¹ç¤ò</div><div class='add'>+	  ¹Í¤¨¤Æ¤Ê¤«¤Ã¤¿).</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'>+	* ¥Ó¥ë¥È¥¤¥ó¥¯¥é¥¹¤Î¥µ¥Ö¥¯¥é¥¹¤âºî¤ì¤ë¤è¤¦¤Ë, ¥ê¥Æ¥é¥ë¤Î¤¢¤ë¥¯¥é¥¹</div><div class='add'>+	  ¤Ë¤ânew¥á¥½¥Ã¥É¤òÄÉ²Ã¤·¤¿.</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'>+	* malloc()¤ÇÍî¤Á¤ë. purify¤¬É¬Í×¤«¤âÃÎ¤ì¤Ê¤¤.</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'>+	* re.c: rb_global_variable()¤Î¸Æ¤Ó¤À¤··Á¼°¤Î´Ö°ã¤¤. ÊÑ¿ô¤Ø¤Î¥Ý¥¤¥ó</div><div class='add'>+	  ¥¿¤òÅÏ¤µ¤Ê¤±¤ì¤Ð¤¤¤±¤Ê¤¤.</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'>+	* parse.y: ¥í¡¼¥«¥ëÊÑ¿ô¤Î°·¤¤¤Ë°ú¿ô¤ÎÉ¾²Á½ç¤Ë°ÍÂ¸¤¹¤ë°Ü¿¢À­¤Î¤Ê¤¤</div><div class='add'>+	  ÉôÊ¬¤¬¤¢¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey.c: move generate_cb here</div><div class='add'>+	* attr(): Â°À­ÀßÄê¤Î¥Ð¥°¤òÄ¾¤·¤¿. ¤¤¤ÄÆâÉô»ÅÍÍ¤¬ÊÑ¤ï¤Ã¤¿¤ó¤À¤í¤¦¡Ä?</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_pkey_{dh|dsa|rsa}.c: adapt to this cb</div><div class='add'>+Sat May 28 23:08:18 1994  Yukihiro Matsumoto  (matz@dyna)</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'>+	* Àµµ¬É½¸½¥­¥ã¥Ã¥·¥å¤ÎÊ¸»úÎó°ìÃ×È½Äê¤ò¥Ý¥¤¥ó¥¿°ìÃ×¤«¤éÆâÍÆ°ìÃ×¤ËÊÑ</div><div class='add'>+	  ¹¹¤·¤¿. ¤½¤¦¤¤¤¨¤ÐÊ¸»úÎó¥ê¥Æ¥é¥ë¤Ï°ì²óËè¤Ë¿·¤·¤¯¥ª¥Ö¥¸¥§¥¯¥È¤¬À¸</div><div class='add'>+	  À®¤µ¤ì¤ë¤Î¤À¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/openssl/ossl_bn.c: use supplied funcs from openssl_missing.c</div><div class='add'>+Fri May 27 11:42:00 1994  Yukihiro Matsumoto  (matz@ix-02)</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'>+	* tr¤«¤éÊ¸»úºï½ü(delete), Ê¸»ú°µ½Ì(squeeze)¤òÊ¬Î¥¤·¤¿. ¤½¤ì¤Ë¤È¤â</div><div class='add'>+	  ¤Ê¤¤tr¤Î¥ª¥×¥·¥ç¥ó°ú¿ô¤Ï¤Ê¤¯¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/bigdecimal.c: Bug in div method fixed.</div><div class='add'>+Thu May 26 10:32:55 1994  Yukihiro Matsumoto  (matz@ix-02)</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/lib/bigdecimal/math.rb: Newly added.</div><div class='add'>+	* ¥¹¥¯¥ê¥×¥ÈÆÉ¤ß¹þ¤ß¥ë¡¼¥Á¥ó¤ò½ñ¤­Ä¾¤·¤Æ, ÄÌ¾ï¥Õ¥¡¥¤¥ë°Ê³°¤Î¥Õ¥¡¥¤</div><div class='add'>+	  ¥ëÌ¾¤ä¶õÊ¸»úÎó¤¬¥¹¥¯¥ê¥×¥È¤È¤·¤ÆÍ¿¤¨¤é¤ì¤¿¾ì¹ç¤ËÂÐ±þ¤·¤¿. ¤Þ¤¿, </div><div class='add'>+	  É¸½àÆþÎÏ¤«¤é¥¹¥¯¥ê¥×¥È¤òÆÉ¤ß¹þ¤à»þ¤Ë, °ì»þ¥Õ¥¡¥¤¥ë¤¬/tmp¤Ë»Ä¤é¤Ê</div><div class='add'>+	  ¤¤¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/bigdecimal/sample/pi.rb: Changed so as to use math.rb.</div><div class='add'>+	* Fixnum:id2name - ID¤«¤éÊ¸»úÎó¤ËÌá¤¹´Ø¿ô. String:intern¤ÎµÕ.</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'>+	* Array: ÇÛÎó¤ÎÈÏ°Ï³°¤ÎÍ×ÁÇ¤ò¥¢¥¯¥»¥¹¤·¤¿»þ¤ËÎã³°¤òÈ¯À¸¤µ¤»¤º¤Ë,</div><div class='add'>+	  nil¤òÊÖ¤¹¤è¤¦¤Ë¤·¤¿. ÇÛÎó¤Ï¼«Æ°Åª¤Ë³ÈÄ¥¤µ¤ì¤ë.</div><div class='ctx'> </div><div class='del'>-	* eval.c (Init_Thread): Continuation#[] added.  [ruby-talk:79028]</div><div class='add'>+	* string:strip¤òÄÉ²Ã.</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'>+	* -n¥ª¥×¥·¥ç¥ó¤¬-e¥ª¥×¥·¥ç¥ó¤òÊ£¿ô»ØÄê¤·¤¿»þ¤âÆ°ºî¤¹¤ë¤è¤¦¤Ë.</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'>+	* parse.y¤Ç&lt;sys/types.h&gt;¤â¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë¤è¤¦¤Ë¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/win32ole/win32ole.c (ole_event_free): ditto.</div><div class='add'>+	* fname¼þ¤ê¤ÎºÙ¤«¤¤bug¤ò½¤Àµ.</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'>+Wed May 26 11:45:10 1994  Yukihiro Matsumoto  (matz@dyna)</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'>+	* Äê¿ô¤ò¥­¥ã¥Ã¥·¥å¤¹¤ë¤è¤¦¤Ë¤·¤¿. ·«¤êÊÖ¤·¤¬Â¿¤¤¾ì¹ç¤Ë¤ÏÍ­¸ú¤Î¤Ï¤º</div><div class='add'>+	  ¤À¤¬, °ìÅÙ¤·¤«¥¢¥¯¥»¥¹¤·¤Ê¤¤¾ì¹ç¤ÏÃÙ¤¯¤Ê¤ë¤Ê¤¢.</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'>+Wed May 25 00:42:24 1994  Yukihiro Matsumoto  (matz@dyna)</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'>+	* Â¿½ÅÂåÆþÊ¸(foo, bar = 1, 2)¤ÎºÎÍÑ.</div><div class='ctx'> </div><div class='del'>-	* parse.y (mlhs_node): should allow "::Foo" (colon3) as lhs.</div><div class='add'>+	* ¾ò·ï¼°Éô¤ËÊ¸»úÎó¤¢¤ë¤¤¤ÏÀµµ¬É½¸½¥ê¥Æ¥é¥ë¤ò¤ª¤¯¤È`=~'±é»»»Ò¤Ë¤è¤Ã</div><div class='add'>+	  ¤Æ`$_'¤ÈÈæ³Ó¤µ¤ì¤ë. ¹¹¤Ë`...'¤ÎÎ¾ÊÕ¤Ç¤ÏÀ°¿ô¥ê¥Æ¥é¥ë¤¬`$.'¤ÈÈæ³Ó</div><div class='add'>+	  ¤µ¤ì¤ë.</div><div class='ctx'> </div><div class='del'>-	* parse.y (lhs): ditto.</div><div class='add'>+Mon May 23 23:27:03 1994  Yukihiro Matsumoto  (matz@dyna)</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'>+	* &amp;¼° ·Á¼°¤Ï¤Ê¤¯¤Ê¤Ã¤¿. Âå¤ï¤ê¤Ëkernel:apply(id, args..)¤òÆ³Æþ.</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'>+	* def op () ..·Á¼°¤ÎÆ³Æþ. op¤ÏºÆÄêµÁ²ÄÇ½¤Ê±é»»»Ò.</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'>+	* constant¤ÎÂåÆþ»þ¥Á¥§¥Ã¥¯. ´û¤Ë½é´ü²½¤µ¤ì¤Æ¤¤¤ëÄê¿ô¤ËÂåÆþ¤·¤¿¾ì¹ç</div><div class='add'>+	  ¤ÏÎã³°¤¬È¯À¸¤¹¤ë.</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'>+	* Â¿½ÅÂåÆþÊ¸.</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'>+Thu May 19 22:57:07 1994  Yukihiro Matsumoto  (matz@dyna)</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'>+	* Ê£¹çÊ¸¤Ç¤âvoid value¤Î¥Á¥§¥Ã¥¯¤ò¹Ô¤¦¤è¤¦¤Ë¤·¤¿.</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'>+	* until¤ÎÆ°ºî¤Î½¤Àµ(do..until·¿¤À¤Ã¤¿). </div><div class='ctx'> </div><div class='del'>-	* eval.c (POP_BLOCK): turn on BLOCK_LEFT flag when leaving block.</div><div class='add'>+Wed May 18 01:06:25 1994  Yukihiro Matsumoto  (matz@dyna)</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'>+	* °Ü¿¢¤Ë´Ø¤¹¤ë¼ã´³¤ÎÌäÂê¤ò½¤Àµ.</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'>+	* ÊÌÌ¾¤Î¹½Ê¸¤ò¡Ödef a b¡×¤Ë¤·¤¿.</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'>+	* until/unless: ±é»»»Ò¤«¤éÀ©¸æÊ¸¤Ø. Îã³°¤òÊáÂª¤¹¤ëµ¡Ç½¤Ï¤½¤Î¤Þ¤Þ.</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'>+	* ÁªÂò²ÄÇ½¤Êµ¡Ç½¤òconfig.h¤«¤édefines.h¤Ë°ÜÆ°.</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'>+Fri May 13 23:20:21 1994  Yukihiro Matsumoto  (matz@dyna)</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'>+	* -y¥ª¥×¥·¥ç¥ó¤ò¿·Àß. -d¥ª¥×¥·¥ç¥ó¤«¤é¥³¥ó¥Ñ¥¤¥é¤Î¥Ç¥Ð¥Ã¥°ÉôÊ¬¤òÊ¬</div><div class='add'>+	  Î¥¤·¤¿.</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'>+Tue Apr 25 20:17:33 1994  Yukihiro Matsumoto  (matz@dyna)</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): sort extension library initialization order.</div><div class='add'>+	* ¥Þ¥ë¥Á¥Ð¥¤¥ÈÊ¸»úÎó¤ò¼±ÊÌ»Ò¤Ë»È¤¨¤ë¤è¤¦¤Ë. ¸Ä¿ÍÅª¤Ë¤Ï»È¤¤¤¿¤¯¤ÏÌµ</div><div class='add'>+	  ¤¤¤±¤É¤Ê¤¢.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): compact $extlibs.</div><div class='add'>+	* `-v'¥Õ¥é¥°¤Î¾õÂÖ¤ò$verbose¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤ë¤è¤¦¤Ë.</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'>+	* CVS¤ÎÆ³Æþ¤ËÈ¼¤¤, ¥Ð¡¼¥¸¥ç¥ó´ÉÍý¤ÎÊýË¡¤òÊÑ¹¹.</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'>+	* ¿¿ÌÌÌÜ¤ËChangeLog¤ò¤Ä¤±¤ë»ö¤Ë¤·¤¿.</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'>+Tue Mar  8 10:09:25 1994  Yukihiro Matsumoto  (matz at nws119)</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_mark): mark IA64 backing store region.</div><div class='add'>+	* %ÊÑ¿ôÌ¾ ¤Ë¤è¤ë¥¯¥é¥¹Äê¿ô¤òÆ³Æþ.</div><div class='ctx'> </div><div class='del'>-	* eval.c (thread_free): free saved IA64 backing store.</div><div class='add'>+	* undef ¥á¥½¥Ã¥É ¤Ë¤è¤ë¥á¥½¥Ã¥ÉÄêµÁ¤Î¼è¤ê¾Ã¤·¤òÆ³Æþ.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_save_context): save IA64 backing store as well.</div><div class='add'>+	* rb_get_method_body¤Ç¤Ïthe_env¤òÊÑ¹¹¤»¤º, rb_call()¤ÇÌÀ¼¨Åª¤ËÊÑ¹¹</div><div class='add'>+	  ¤¹¤ë¤è¤¦¤Ë. ¤³¤ì¤Çresponds_to¤Ê¤É¤Ç´Ä¶­¤¬ÇË²õ¤µ¤ì¤Ê¤¤.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_thread_restore_context): restore IA64 backing store.</div><div class='add'>+Mon Mar  7 17:46:15 1994  Yukihiro Matsumoto  (matz at nws119)</div><div class='ctx'> </div><div class='del'>-	* eval.c (THREAD_ALLOC): initialize IA64 members.</div><div class='add'>+	* ¡Ö&amp;Ê¸»úÎó¡×·Á¼°. ¡Ö¼°.Ê¸»úÎó¡×·¿¤Î¥á¥Ã¥»¡¼¥¸¥»¥ó¥É¤Ï¤Ê¤¯¤Ê¤Ã¤¿.</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='add'>+	* ¼«¸ÊÂåÆþ·Á¼°(+=. -=, ...)</div><div class='ctx'> </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'>+	* obj.attr = expr·Á¼°¤ÎºÎÍÑ.</div><div class='ctx'> </div><div class='del'>-	* lib/debug.rb(debug_command): incomplete regexp.</div><div class='add'>+Thu Feb 24 16:23:28 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* toint, tofloat, print_string¤ò¤½¤ì¤¾¤ìto_i, to_f, to_s¤ËÊÑ¹¹.</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'>+	* String:clone - Copy on Write¤Î¼Â¸½.</div><div class='ctx'> </div><div class='del'>-	* eval.c (BEGIN_CALLARGS): push ITER_NOT only when ITER_PRE.</div><div class='add'>+Tue Feb 22 11:11:44 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* re.c: ¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó¤ÎÊÝÂ¸¤Ë¼ºÇÔ¤·¤Æ¤¤¤¿.</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'>+	* trap: ²ÄÇ½¤Ê¤é¤Ð½èÍý¤Ë»þ´Ö¤Î¤«¤«¤ë¥·¥¹¥Æ¥à¥³¡¼¥ë(read, wait,</div><div class='add'>+	  sigpause, select)¤ò¥Õ¥Ã¥¯¤·¤Æ³ä¤ê¹þ¤ß½èÍý¤ÎÂ¨ÅúÀ­¤ò¹â¤á¤ë(DOS¤Ê</div><div class='add'>+	  ¤É¤Ç¤ÏÌµÍý¤À¤Ê¤¢).</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'>+	* trap: ³ä¤ê¹þ¤ß¤ò¤½¤Î¾ì¤Ç½èÍý¤¹¤ë¤«(¿×Â®¤À¤¬´í¸±), °ÂÁ´¤Ê¥¿¥¤¥ß¥ó</div><div class='add'>+	  ¥°¤Ç½èÍý¤¹¤ë¤«¤òÁªÂò¤Ç¤­¤ë¤è¤¦¤Ë.</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'>+Tue Feb 17 11:11:12 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* trap: ³ä¤ê¹þ¤ß¥Ï¥ó¥É¥é.</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'>+Wed Feb 16 12:29:12 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* String:crypt: °Å¹æ²½¥ë¡¼¥Á¥ó</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'>+	* "::"±é»»»Ò¤ÎÄÉ²Ã. a::b ¤Ï {a, b}¤ÈÆ±µÁ. a::b::c ¤Ï {a, {b, c}}¤È</div><div class='add'>+	  Æ±µÁ(±¦·ë¹ç). Æ±µÁ¤È¤Ï¤¤¤¦¤â¤Î¤Î, "::"±é»»»Ò¤ò»È¤Ã¤¿Êý¤¬¾¯¤·¤À¤±</div><div class='add'>+	  ¥á¥â¥ê¸úÎ¨¤¬ÎÉ¤¤.</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'>+	* Dir.rmdir(), File.unlink(), File.utime() -- ³Æ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ø¤Î</div><div class='add'>+	  ¥¤¥ó¥¿¥Õ¥§¡¼¥¹.</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'>+	* kill -- kill(2) I/F</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'>+	* select(): read¤Î¥Á¥§¥Ã¥¯¤Ç¤Ïstdio¤Ë¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ë¤«¤É</div><div class='add'>+	  ¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë.</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'>+Tue Feb 15 15:08:31 1994  Yukihiro Matsumoto  (matz at nws119)</div><div class='ctx'> </div><div class='del'>-	* marshal.c (w_object): should set `c_arg' at first.</div><div class='add'>+	* file.c: stat¤ò¥­¥ã¥Ã¥·¥å¤¹¤ë¤è¤¦¤Ë.</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'>+	* File:utime()¤òÄÉ²Ã.</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'>+	* unliteralize(): ¥Õ¥é¥°¤òÇË²õ¤·¤Æ¤¤¤¿.</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'>+	* Bug(): core¤òÅÇ¤¯¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-	* cygwin/GNUmakefile: better --disbale-shared option support.</div><div class='add'>+	* String:tr -- tr(1)¸ß´¹. °ú¿ô¥Ñ¥¿¡¼¥ó¤¬¤Á¤ç¤Ã¤È°ã¤¦¤±¤É¡Ä.</div><div class='ctx'> </div><div class='del'>-	* cygwin/GNUmakefile: add forwarding DLL target for cygwin.</div><div class='add'>+Mon Feb 14 18:24:13 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* unless, until¤¬Îã³°¤âµ¶¤È¸«¤Ê¤¹¤è¤¦¤Ë.</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'>+	* select() -- select(2) I/F</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'>+	* Array:pack, String:unpack: perl¤Îpack/unpack¤ÎÆ±ÅùÉÊ</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'>+Tue Feb  8 17:11:10 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* setenv()¤Î¤Ê¤¤¥·¥¹¥Æ¥à¤Î¤¿¤á¤Ëputenv()¤ò»È¤Ã¤¿¥³¡¼¥É¤âÍÑ°Õ¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_call0): forgot to pop ruby_class.</div><div class='add'>+Mon Feb  7 09:52:44 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* °ú¿ô¤Î°ìÈÖºÇ¸å¤Ë`*'¤òÃÖ¤±¤ë¤è¤¦¤Ë¤·¤¿. ¤³¤ì¤Çrest°ú¿ô¤Î¥ê¥¹¥È¤ò</div><div class='add'>+	  Áàºî¤¹¤ëÉ¬Í×¤¬¾¯¤Ê¤¯¤Ê¤ë.</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'>+Fri Feb  4 18:23:26 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* ruby-mode.el¤ò½ñ¤­Ä¾¤¹. ¤º¤¤¤Ö¤ó¤Þ¤·¤Ë¤Ê¤Ã¤¿¤È»×¤¦.</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'>+	* Ê¸»úÎó¥ê¥Æ¥é¥ë¤ÎCopy on Write¤ò¼Â¸½. ¤³¤ì¤ÇÊ¸»úÎó¤¬¥ê¥Æ¥é¥ë¤Ç¤¢</div><div class='add'>+	  ¤ë¤«¤é¤È¤¤¤Ã¤Æ¤¤¤Á¤¤¤Áclone¤·¤Ê¤¯¤Æ¤âºÑ¤à.</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'>+Tue Feb  1 09:21:09 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* sub(), gsub()¤Ç, ¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó¤ò$&amp;, $1..$9¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤ë¤è</div><div class='add'>+	  ¤¦¤Ë¤·¤¿. Æ±»þ¤Ë¥Þ¥Ã¥Á¤·¤¿ÉôÊ¬Ê¸»úÎó¤ò¥³¥Ô¡¼¤·¤Æ¤ª¤¯¤è¤¦¤Ë(¸µ¤Î</div><div class='add'>+	  Ê¸»úÎó¤¬ÊÑ¹¹¤µ¤ì¤Æ¤â¾õÂÖ¤òÊÝÂ¸¤¹¤ë¤¿¤á).</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'>+Mon Jan 31 15:16:58 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* ¥×¥é¥¤¥Ù¡¼¥È¥á¥½¥Ã¥É¤Î»ÅÍÍ¤òÊÑ¹¹. º£¤Þ¤Ç¤ÏÆ±¤¸¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤«</div><div class='add'>+	  ¤é¤·¤«¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤«¤Ã¤¿¤¬, ¥µ¥Ö¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤«¤é¤â¥¢¥¯¥»¥¹</div><div class='add'>+	  ¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿(C++¤Ë¤ª¤±¤ëprotected ¥á¥ó¥Ð´Ø¿ô).</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'>+	* ¥á¥½¥Ã¥É¥µ¡¼¥Á¤Î¥¢¥ë¥´¥ê¥º¥à¤ò²þÁ±¤·, 10%ÄøÅÙ¤Î¹âÂ®²½¤ò¹Ô¤Ê¤Ã¤¿.</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'>+	* ¹âÂ®²½. C¤Çµ­½Ò¤µ¤ì¤¿¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹»þ¤Ë¤Ïsetjmp¤ò¸Æ¤Ð¤Ê¤¤¤è</div><div class='add'>+	  ¤¦¤Ë¤·¤¿. ¤³¤ì¤ÇC¥á¥½¥Ã¥É¤òÂ¿ÍÑ¤¹¤ë¾ì¹ç¤Ë¤Ï3ÇÜÄøÅÙ¹âÂ®¤Ë¤Ê¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/extmk.rb (extmake): pass LIBPATH to make ruby.  [ruby-dev:21137]</div><div class='add'>+Fri Jan 28 15:44:04 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* sh-mode¤ò¸µ¤Ëruby-mode.el¤òºî¤ë. ±é»»»Ò¤Ç½ª¤ë, 2¹Ô¤ËÅÏ¤ëÊ¸¤Ë¤ÏÂÐ</div><div class='add'>+	  ±þ¤·¤Æ¤¤¤Ê¤¤¤±¤É¡Ä.</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'>+Thu Jan 27 11:35:19 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* freenode(): NODE_NIL¤Î²òÊüËº¤ì.</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'>+	* »ú¶ç²òÀÏÉô¤Î¥Ð¥°½¤Àµ(¥³¥á¥ó¥È¤Î¸å¤Î¾õÂÖ¤òÌá¤·Ëº¤ì).</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'>+	* protect .. end¤Î¥Ð¥°½¤Àµ. GC_LINK¤Î¥Í¥¹¥È¤¬ÉÔÀµ¤À¤Ã¤¿.</div><div class='ctx'> </div><div class='del'>-	* ext/io/wait/extconf.rb: check DOSISH macro instead of platform.</div><div class='add'>+	* join¤Î¥Ð¥°½¤Àµ(»È¤Ã¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤òfree¤·¤Æ¤¤¤¿).</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'>+	* split¤Î¥Ð¥°½¤Àµ(¥¢¥ë¥´¥ê¥º¥à¤¬¤ª¤«¤·¤«¤Ã¤¿).</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'>+	* fork()¤òÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-	* eval.c: initialize /* OK */ variables by Qnil to stop warnings.</div><div class='add'>+Wed Jan 26 17:09:56 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* ¥Õ¥¡¥¤¥ë¥Æ¥¹¥È¥á¥½¥Ã¥É¤ÎÄÉ²Ã.</div><div class='ctx'> </div><div class='del'>-	* ext/Setup*: add io/wait and openssl.</div><div class='add'>+	* rb_autoexec(): ¥¯¥é¥¹¤ò½é¤á¤Æ¥¢¥¯¥»¥¹¤·¤¿»þ¤ÎµóÆ°¤òÀ©¸æ¤Ç¤­¤ë¤è</div><div class='add'>+	  ¤¦¤Ë¤·¤¿. ¤³¤ì¤Çautoload¤â¼Â¸½¤Ç¤­¤ë. ¤³¤ì¤Ë¤È¤â¤Ê¤¤¥á¥½¥Ã¥É</div><div class='add'>+	  unknown¤Ï¤Ê¤¯¤Ê¤Ã¤¿.</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'>+Tue Jan 25 15:51:36 1994  Yukihiro Matsumoto  (matz at nws119)</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_autoload): use ruby_cbase instead of ruby_class.</div><div class='add'>+	* Dbm¥¯¥é¥¹, Math¥â¥¸¥å¡¼¥ë¤òºîÀ®.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_f_autoload_p): ditto.</div><div class='add'>+	* -I¥ª¥×¥·¥ç¥ó¤Ç¥µ¡¼¥Á¥Ñ¥¹¤ËÄÉ²Ã¤Ç¤­¤ë¤è¤¦¤Ë.</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'>+	* ¥µ¡¼¥Á¥Ñ¥¹¤òÊÑ¿ô$load_path¤ËÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë.</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'>+	* load(): ¥À¥¤¥Ê¥ß¥Ã¥¯¥í¡¼¥É¤ò»È¤¨¤ë¤è¤¦¤Ë¤·¤¿.</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'>+Tue Jan 18 14:14:01 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* Comparable:"&lt;=&gt;"</div><div class='ctx'> </div><div class='del'>-	* object.c (rb_class_superclass): check uninitialized class.</div><div class='add'>+	* Float,Fixnum:"**"</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'>+	* Array:sort</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'>+Fri Jan 14 16:53:37 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* version 0.07</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'>+	* ¥á¥½¥Ã¥É¤Ë´Ø¤¹¤ë¥É¥­¥å¥á¥ó¥È¤ò½¼¼Â¤µ¤»¤¿.</div><div class='ctx'> </div><div class='del'>-	* lib/net/http.rb: update document.</div><div class='add'>+	* String:index(): °ú¿ôposition¤òÁý¤ä¤·¤¿.</div><div class='ctx'> </div><div class='del'>-	* lib/net/pop.rb: ditto.</div><div class='add'>+Thu Jan 13 15:13:52 1994  Yukihiro Matsumoto  (matz at nws119)</div><div class='ctx'> </div><div class='del'>-	* lib/net/protocol.rb: ditto.</div><div class='add'>+	* Ì¤½é´ü²½¤ÎÊÑ¿ô¥¢¥¯¥»¥¹¤ò¤Ê¤¯¤·¤¿.</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'>+	* ÌµÂÌ¤Êhash table¤Î¥¢¥í¥±¡¼¥·¥ç¥ó¤òºï½ü.</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'>+	* Purify'd(on Sun)</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'>+	* ~RE ¤È ~STR¤Î¥³¥ó¥Ñ¥¤¥ë»þÅ¸³«¤ÎÍÞÀ©.</div><div class='ctx'> </div><div class='del'>-	* lib/fileutils.rb (install): should preserve timestamp only.</div><div class='add'>+	* Sun¤Ø°Ü¿¢. signal()¤ÎÌá¤êÃÍ. RData¤Îbug½¤Àµ.</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'>+	* parse.y: nls¥ë¡¼¥ë¤òºï½ü.</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'>+	* yylex(): ²þ¹Ô¤ÈÉä¹ç¤Î²òÀÏÉôÊ¬¤òÊÑ¹¹.</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'>+	* missing/strftime.c: °Ü¿¢ÍÑ.</div><div class='ctx'> </div><div class='del'>-	* eval.c (rb_load): should preserve current source file/line.</div><div class='add'>+	* Time:strftime: ¤½¤ÎÂ¾¤Î¥á¥½¥Ã¥É¤âstrftime¤òÍøÍÑ¤¹¤ë¤è¤¦¤Ë.</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'>+	* ¥á¥½¥Ã¥ÉºÆÄêµÁ»þ¤Ë¥á¥½¥Ã¥É¥­¥ã¥Ã¥·¥å¤ò¥¯¥ê¥¢¤¹¤ë.</div><div class='ctx'> </div><div class='del'>-	* string.c (str_new4): ptr may refer null_str.</div><div class='add'>+Fri Jan  7 15:23:20 1994  Yukihiro Matsumoto  (matz at nws119)</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'>+	* Float:coerce(): Fixnum¤ÈFloat°Ê³°¤Î°ú¿ô¤òÍ¿¤¨¤é¤ì¤ë¤¿»þ¤Ë¤ÏÎã³°</div><div class='add'>+	  ¤òÈ¯À¸¤¹¤ë¤è¤¦¤Ë.</div><div class='ctx'> </div><div class='del'>-	* stable version 1.8.0 released.</div><div class='add'>+	* Stat: stat¹½Â¤ÂÎ¤ÎÁ´¤Æ¤Î¥á¥ó¥Ð¤ËÂÐ¤¹¤ë¥¢¥¯¥»¥¹¥á¥½¥Ã¥É¤òÍÑ°Õ.</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'>+	* Ì¤ÄêµÁ¤Î¥¯¥é¥¹/¥â¥¸¥å¡¼¥ë¤Ø¤Î»²¾È¤¬unknown¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤è¤¦</div><div class='add'>+	  ¤Ë¤·¤¿.</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'>-	 (system-time-locale "C")</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'>+	* baseline - version 0.06.</div><div class='head'>diff --git a/FAQ b/FAQ<br/>new file mode 100644<br/>index 0000000000..eaa9c86056<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/FAQ?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>FAQ</a></div><div class='hunk'>@@ -0,0 +1,65 @@</div><div class='add'>+.\" FAQ -  -*- Indented-Text -*- created at: Tue Jan  4 12:48:12 JST 1994</div><div class='add'>+¤³¤ì¤ÏRuby¤Ë´Ø¤¹¤ëFAQ(Frequently Asked Question)¤ò¤Þ¤È¤á¤¿¤â¤Î¤Ç¤¹.</div><div class='add'>+Emacs¤Ç¤³¤Î¥Õ¥¡¥¤¥ë¤ò¸«¤Æ¤¤¤ë¾ì¹ç¤Ë¤ÏM-2 C-x $¤Ç¼ÁÌä¤ÎÉôÊ¬¤À¤±¤òÆÉ¤à¤³</div><div class='add'>+¤È¤¬¤Ç¤­¤Þ¤¹. C-x $¤ÇÁ´¤Æ¤òÆÉ¤à¾õÂÖ¤ËÌá¤»¤Þ¤¹.</div><div class='add'>+------------------------------</div><div class='add'>+1) Ruby¤ÎÌ¾¾Î¤ÎÍ³Íè¤Ï</div><div class='add'>+    </div><div class='add'>+    Ruby¤Ï²¿¤«¤ÎÎ¬¾Î¤Ç¤Ï¤Ê¤¯, ÀÖ¤¤ÊõÀÐ¤ÎÌ¾Á°¤ò¤È¤Ã¤ÆÌ¾ÉÕ¤±¤é¤ì¤Þ¤·¤¿. </div><div class='add'>+    perl(pearl¤Ï6·î¤ÎÃÂÀ¸ÀÐ)¤Î¼¡¤òÌÜ»Ø¤¹(Ruby¤Ï7·î¤ÎÃÂÀ¸ÀÐ)¤È¤¤¤¦°ÕÌ£</div><div class='add'>+    ¤¬¤¢¤ê¤Þ¤¹. ¹¹¤ËÈþ¤·¤¯²ÁÃÍ¤¢¤ë¤â¤Î¤Ç¤¢¤Ã¤ÆÍß¤·¤¤¤È¤¤¤¦´ê¤¤¤â´Þ¤Þ¤ì</div><div class='add'>+    ¤Æ¤¤¤Þ¤¹.</div><div class='add'>+------------------------------</div><div class='add'>+2) Ruby¤¬±Æ¶Á¤ò¼õ¤±¤¿¸À¸ì¤Ï?</div><div class='add'>+   </div><div class='add'>+    Ruby¤Î¸À¸ì»ÅÍÍ¤ÏC, Perl, Eiffel¤Î³Æ¸À¸ì¤Ë¤³¤Î½ç¤Ë±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤Þ</div><div class='add'>+    ¤¹. ¤½¤ÎÂ¾¤Ë±Æ¶Á¤ò¼õ¤±¤¿¸À¸ì¤È¤·¤Æ¤Ïtcl, AWK, bourne shell, CLU,</div><div class='add'>+    Icon, Sather, Smalltalk, Emacs Lisp¤Ê¤É¤¬¤¢¤ê¤Þ¤¹.</div><div class='add'>+------------------------------</div><div class='add'>+3) Ruby¤ÎÆÃÄ§¤Ï?</div><div class='add'>+    </div><div class='add'>+    °Ê²¼¤Ë²Õ¾ò½ñ¤Ë¤·¤Þ¤¹.</div><div class='add'>+    </div><div class='add'>+      + ¥¤¥ó¥¿¥×¥ê¥¿¤Ç¤¢¤ê, ¼ê·Ú¤Ë¥×¥í¥°¥é¥à¤Ç¤­¤ë.</div><div class='add'>+      + ÊÑ¿ôÀë¸À¤¬Í×¤é¤Ê¤¤.</div><div class='add'>+      + ¥Õ¥¡¥¤¥ë¤ä¥¹¥È¥ê¡¼¥à¤Ê¤É¤Ø¤ÎUNIXÅª¤ÊÁàºî¤¬´ÊÃ±¤Ë¤Ç¤­¤ë.</div><div class='add'>+      + ¥Ð¥¤¥Ê¥ê¥Õ¥¡¥¤¥ë¤â°·¤¨¤ë.</div><div class='add'>+      + ¤­¤Á¤ó¤È¤·¤¿¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¸À¸ì¤Ç¤¢¤ë.</div><div class='add'>+      + ÆÃ°Û¥á¥½¥Ã¥É¤Îµ¡Ç½¤¬Äó¶¡¤µ¤ì¤Æ¤¤¤ë.</div><div class='add'>+      + ¥â¥¸¥å¡¼¥ë¤Ë¤è¤ëµ¡Ç½¤Î¶¦Í­¤¬¤Ç¤­¤ë.</div><div class='add'>+      + Îã³°½èÍýµ¡Ç½¤¬¤¢¤ë.</div><div class='add'>+      + GC¤¬¤¢¤ë¤Î¤Ç¥á¥â¥ê´ÉÍý¤òµ¤¤Ë¤·¤Ê¤¯¤ÆºÑ¤à.</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'>+      - È¯Å¸ÅÓ¾å¤Çµ¡Ç½¤¬¾¯¤Ê¤¤.</div><div class='add'>+      - ¥Ç¥Ð¥Ã¥¬¤¬(¤Þ¤À)¤Ê¤¤.</div><div class='add'>+      - ÃÙ¤¤.</div><div class='add'>+      </div><div class='add'>+    ¤³¤È¤Ç¤·¤ç¤¦¤«.</div><div class='add'>+------------------------------</div><div class='add'>+4) Ruby¤ËÊÑ¿ôÀë¸À¤¬¤Ê¤¤¤³¤È¤Î¥á¥ê¥Ã¥È¤Ï?</div><div class='add'>+    </div><div class='add'>+    ¤¢¤ëÊÑ¿ô¤¬¤É¤Î¥¹¥³¡¼¥×¤ËÂ°¤¹¤ë¤«¤¬°ìÌÜ¤ÇÊ¬¤«¤ë¤Î¤Ç, ¥×¥í¥°¥é¥à¤ÎÆÉ¤ß</div><div class='add'>+    °×¤µ, Íý²ò¤·°×¤µ¤¬Áý¤¹¤³¤È¤¬ºÇÂç¤Î¥á¥ê¥Ã¥È¤Ç¤¹. ¤Þ¤¿¥È¡¼¥¿¥ë¤Î¥¿¥¤¥×</div><div class='add'>+    ÎÌ¤¬¸º¤ë¤Î¤Ç½ñ¤­°×¤µ, ¼ê·Ú¤µ¤Ë¤â¹×¸¥¤·¤Þ¤¹.</div><div class='add'>+------------------------------</div><div class='add'>+5) Ruby¤ÈPerl¤Î°ã¤¤¤Ï?</div><div class='add'>+    </div><div class='add'>+    Ruby¤ÈPerl¤Ï¥Æ¥­¥¹¥ÈÁàºî¤ËÍ¥¤ì¤¿¥¹¥¯¥ê¥×¥È¸À¸ì¤Ç¤¢¤ë¤È¤¤¤¦ÅÀ¤Ç, ¥«</div><div class='add'>+    ¥Ð¡¼¤¹¤ëÈÏ°Ï¤¬¶á¤¯, °ì¸«¤¹¤ë¤È¥é¥¤¥Ð¥ë¤Ë¸«¤¨¤Þ¤¹. ³Î¤«¤ËRuby¤ÎÀß·×</div><div class='add'>+    ¤Ë¤ª¤¤¤Æ¡ÖPerl¤Ë¤Ç¤­¤ë¤³¤È¤Ï¤Ç¤­¤ë¤è¤¦¤Ë¡×¤È¤¤¤¦¤³¤È¤Ï, °ì¤Ä¤Î½ÅÍ×</div><div class='add'>+    ¤ÊÌÜÉ¸¤Ç¤·¤¿. ¤·¤«¤·, Ruby¤Î¿¿¤ÎÌÜÅª¤Ï¤¢¤¯¤Þ¤Ç¤â¡Ö¼ê·Ú¤Ê¥ª¥Ö¥¸¥§¥¯</div><div class='add'>+    ¥È»Ø¸þ¸À¸ì¡×¤Ç¤¢¤ê, ¤Þ¤¿, RubyÀß·×¤Î3ÂçÌÜÉ¸¤Ç¤¢¤ë, µ¡Ç½À­¡¦°ì´ÓÀ­¡¦</div><div class='add'>+    ³ÈÄ¥À­¤Î·ë²Ì¤È¤·¤Æ, Ruby¤ÏPerl¤È¤Ï°Û¤Ê¤ë¸À¸ì¤Ë¤Ê¤ê¤Þ¤·¤¿.</div><div class='add'>+    </div><div class='add'>+    Ruby¤ÏPerl¤Û¤É¡Ö²¿¤Ç¤â¤¢¤ê¡×¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤·, ¤Û¤È¤ó¤É¤Î¾ì¹çPerl¤è</div><div class='add'>+    ¤ê½èÍýÂ®ÅÙ¤¬ÃÙ¤¤¤Ç¤¹. ¤·¤«¤·, Ruby¤Î¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þµ¡Ç½¤ÏPerl¤Ç¤Ï</div><div class='add'>+    ËþÂ­¤Ç¤­¤Ê¤¤¿Í¤¿¤Á¤Ë¥¢¥Ô¡¼¥ë¤¹¤ë¤È»×¤¤¤Þ¤¹.</div><div class='add'>+------------------------------</div><div class='add'>+Local variables:</div><div class='add'>+fill-column: 70</div><div class='add'>+end:</div><div class='head'>diff --git a/GPL b/GPL<br/>deleted file mode 100644<br/>index 5b6e7c66c2..0000000000<br/>--- a/<a href='/ruby.git/tree/GPL?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>GPL</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,340 +0,0 @@</div><div class='del'>-		    GNU GENERAL PUBLIC LICENSE</div><div class='del'>-		       Version 2, June 1991</div><div class='del'>-</div><div class='del'>- Copyright (C) 1989, 1991 Free Software Foundation, Inc.</div><div class='del'>-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</div><div class='del'>- Everyone is permitted to copy and distribute verbatim copies</div><div class='del'>- of this license document, but changing it is not allowed.</div><div class='del'>-</div><div class='del'>-			    Preamble</div><div class='del'>-</div><div class='del'>-  The licenses for most software are designed to take away your</div><div class='del'>-freedom to share and change it.  By contrast, the GNU General Public</div><div class='del'>-License is intended to guarantee your freedom to share and change free</div><div class='del'>-software--to make sure the software is free for all its users.  This</div><div class='del'>-General Public License applies to most of the Free Software</div><div class='del'>-Foundation's software and to any other program whose authors commit to</div><div class='del'>-using it.  (Some other Free Software Foundation software is covered by</div><div class='del'>-the GNU Library General Public License instead.)  You can apply it to</div><div class='del'>-your programs, too.</div><div class='del'>-</div><div class='del'>-  When we speak of free software, we are referring to freedom, not</div><div class='del'>-price.  Our General Public Licenses are designed to make sure that you</div><div class='del'>-have the freedom to distribute copies of free software (and charge for</div><div class='del'>-this service if you wish), that you receive source code or can get it</div><div class='del'>-if you want it, that you can change the software or use pieces of it</div><div class='del'>-in new free programs; and that you know you can do these things.</div><div class='del'>-</div><div class='del'>-  To protect your rights, we need to make restrictions that forbid</div><div class='del'>-anyone to deny you these rights or to ask you to surrender the rights.</div><div class='del'>-These restrictions translate to certain responsibilities for you if you</div><div class='del'>-distribute copies of the software, or if you modify it.</div><div class='del'>-</div><div class='del'>-  For example, if you distribute copies of such a program, whether</div><div class='del'>-gratis or for a fee, you must give the recipients all the rights that</div><div class='del'>-you have.  You must make sure that they, too, receive or can get the</div><div class='del'>-source code.  And you must show them these terms so they know their</div><div class='del'>-rights.</div><div class='del'>-</div><div class='del'>-  We protect your rights with two steps: (1) copyright the software, and</div><div class='del'>-(2) offer you this license which gives you legal permission to copy,</div><div class='del'>-distribute and/or modify the software.</div><div class='del'>-</div><div class='del'>-  Also, for each author's protection and ours, we want to make certain</div><div class='del'>-that everyone understands that there is no warranty for this free</div><div class='del'>-software.  If the software is modified by someone else and passed on, we</div><div class='del'>-want its recipients to know that what they have is not the original, so</div><div class='del'>-that any problems introduced by others will not reflect on the original</div><div class='del'>-authors' reputations.</div><div class='del'>-</div><div class='del'>-  Finally, any free program is threatened constantly by software</div><div class='del'>-patents.  We wish to avoid the danger that redistributors of a free</div><div class='del'>-program will individually obtain patent licenses, in effect making the</div><div class='del'>-program proprietary.  To prevent this, we have made it clear that any</div><div class='del'>-patent must be licensed for everyone's free use or not licensed at all.</div><div class='del'>-</div><div class='del'>-  The precise terms and conditions for copying, distribution and</div><div class='del'>-modification follow.</div><div class='del'>-</div><div class='del'>-		    GNU GENERAL PUBLIC LICENSE</div><div class='del'>-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</div><div class='del'>-</div><div class='del'>-  0. This License applies to any program or other work which contains</div><div class='del'>-a notice placed by the copyright holder saying it may be distributed</div><div class='del'>-under the terms of this General Public License.  The "Program", below,</div><div class='del'>-refers to any such program or work, and a "work based on the Program"</div><div class='del'>-means either the Program or any derivative work under copyright law:</div><div class='del'>-that is to say, a work containing the Program or a portion of it,</div><div class='del'>-either verbatim or with modifications and/or translated into another</div><div class='del'>-language.  (Hereinafter, translation is included without limitation in</div><div class='del'>-the term "modification".)  Each licensee is addressed as "you".</div><div class='del'>-</div><div class='del'>-Activities other than copying, distribution and modification are not</div><div class='del'>-covered by this License; they are outside its scope.  The act of</div><div class='del'>-running the Program is not restricted, and the output from the Program</div><div class='del'>-is covered only if its contents constitute a work based on the</div><div class='del'>-Program (independent of having been made by running the Program).</div><div class='del'>-Whether that is true depends on what the Program does.</div><div class='del'>-</div><div class='del'>-  1. You may copy and distribute verbatim copies of the Program's</div><div class='del'>-source code as you receive it, in any medium, provided that you</div><div class='del'>-conspicuously and appropriately publish on each copy an appropriate</div><div class='del'>-copyright notice and disclaimer of warranty; keep intact all the</div><div class='del'>-notices that refer to this License and to the absence of any warranty;</div><div class='del'>-and give any other recipients of the Program a copy of this License</div><div class='del'>-along with the Program.</div><div class='del'>-</div><div class='del'>-You may charge a fee for the physical act of transferring a copy, and</div><div class='del'>-you may at your option offer warranty protection in exchange for a fee.</div><div class='del'>-</div><div class='del'>-  2. You may modify your copy or copies of the Program or any portion</div><div class='del'>-of it, thus forming a work based on the Program, and copy and</div><div class='del'>-distribute such modifications or work under the terms of Section 1</div><div class='del'>-above, provided that you also meet all of these conditions:</div><div class='del'>-</div><div class='del'>-    a) You must cause the modified files to carry prominent notices</div><div class='del'>-    stating that you changed the files and the date of any change.</div><div class='del'>-</div><div class='del'>-    b) You must cause any work that you distribute or publish, that in</div><div class='del'>-    whole or in part contains or is derived from the Program or any</div><div class='del'>-    part thereof, to be licensed as a whole at no charge to all third</div><div class='del'>-    parties under the terms of this License.</div><div class='del'>-</div><div class='del'>-    c) If the modified program normally reads commands interactively</div><div class='del'>-    when run, you must cause it, when started running for such</div><div class='del'>-    interactive use in the most ordinary way, to print or display an</div><div class='del'>-    announcement including an appropriate copyright notice and a</div><div class='del'>-    notice that there is no warranty (or else, saying that you provide</div><div class='del'>-    a warranty) and that users may redistribute the program under</div><div class='del'>-    these conditions, and telling the user how to view a copy of this</div><div class='del'>-    License.  (Exception: if the Program itself is interactive but</div><div class='del'>-    does not normally print such an announcement, your work based on</div><div class='del'>-    the Program is not required to print an announcement.)</div><div class='del'>-</div><div class='del'>-These requirements apply to the modified work as a whole.  If</div><div class='del'>-identifiable sections of that work are not derived from the Program,</div><div class='del'>-and can be reasonably considered independent and separate works in</div><div class='del'>-themselves, then this License, and its terms, do not apply to those</div><div class='del'>-sections when you distribute them as separate works.  But when you</div><div class='del'>-distribute the same sections as part of a whole which is a work based</div><div class='del'>-on the Program, the distribution of the whole must be on the terms of</div><div class='del'>-this License, whose permissions for other licensees extend to the</div><div class='del'>-entire whole, and thus to each and every part regardless of who wrote it.</div><div class='del'>-</div><div class='del'>-Thus, it is not the intent of this section to claim rights or contest</div><div class='del'>-your rights to work written entirely by you; rather, the intent is to</div><div class='del'>-exercise the right to control the distribution of derivative or</div><div class='del'>-collective works based on the Program.</div><div class='del'>-</div><div class='del'>-In addition, mere aggregation of another work not based on the Program</div><div class='del'>-with the Program (or with a work based on the Program) on a volume of</div><div class='del'>-a storage or distribution medium does not bring the other work under</div><div class='del'>-the scope of this License.</div><div class='del'>-</div><div class='del'>-  3. You may copy and distribute the Program (or a work based on it,</div><div class='del'>-under Section 2) in object code or executable form under the terms of</div><div class='del'>-Sections 1 and 2 above provided that you also do one of the following:</div><div class='del'>-</div><div class='del'>-    a) Accompany it with the complete corresponding machine-readable</div><div class='del'>-    source code, which must be distributed under the terms of Sections</div><div class='del'>-    1 and 2 above on a medium customarily used for software interchange; or,</div><div class='del'>-</div><div class='del'>-    b) Accompany it with a written offer, valid for at least three</div><div class='del'>-    years, to give any third party, for a charge no more than your</div><div class='del'>-    cost of physically performing source distribution, a complete</div><div class='del'>-    machine-readable copy of the corresponding source code, to be</div><div class='del'>-    distributed under the terms of Sections 1 and 2 above on a medium</div><div class='del'>-    customarily used for software interchange; or,</div><div class='del'>-</div><div class='del'>-    c) Accompany it with the information you received as to the offer</div><div class='del'>-    to distribute corresponding source code.  (This alternative is</div><div class='del'>-    allowed only for noncommercial distribution and only if you</div><div class='del'>-    received the program in object code or executable form with such</div><div class='del'>-    an offer, in accord with Subsection b above.)</div><div class='del'>-</div><div class='del'>-The source code for a work means the preferred form of the work for</div><div class='del'>-making modifications to it.  For an executable work, complete source</div><div class='del'>-code means all the source code for all modules it contains, plus any</div><div class='del'>-associated interface definition files, plus the scripts used to</div><div class='del'>-control compilation and installation of the executable.  However, as a</div><div class='del'>-special exception, the source code distributed need not include</div><div class='del'>-anything that is normally distributed (in either source or binary</div><div class='del'>-form) with the major components (compiler, kernel, and so on) of the</div><div class='del'>-operating system on which the executable runs, unless that component</div><div class='del'>-itself accompanies the executable.</div><div class='del'>-</div><div class='del'>-If distribution of executable or object code is made by offering</div><div class='del'>-access to copy from a designated place, then offering equivalent</div><div class='del'>-access to copy the source code from the same place counts as</div><div class='del'>-distribution of the source code, even though third parties are not</div><div class='del'>-compelled to copy the source along with the object code.</div><div class='del'>-</div><div class='del'>-  4. You may not copy, modify, sublicense, or distribute the Program</div><div class='del'>-except as expressly provided under this License.  Any attempt</div><div class='del'>-otherwise to copy, modify, sublicense or distribute the Program is</div><div class='del'>-void, and will automatically terminate your rights under this License.</div><div class='del'>-However, parties who have received copies, or rights, from you under</div><div class='del'>-this License will not have their licenses terminated so long as such</div><div class='del'>-parties remain in full compliance.</div><div class='del'>-</div><div class='del'>-  5. You are not required to accept this License, since you have not</div><div class='del'>-signed it.  However, nothing else grants you permission to modify or</div><div class='del'>-distribute the Program or its derivative works.  These actions are</div><div class='del'>-prohibited by law if you do not accept this License.  Therefore, by</div><div class='del'>-modifying or distributing the Program (or any work based on the</div><div class='del'>-Program), you indicate your acceptance of this License to do so, and</div><div class='del'>-all its terms and conditions for copying, distributing or modifying</div><div class='del'>-the Program or works based on it.</div><div class='del'>-</div><div class='del'>-  6. Each time you redistribute the Program (or any work based on the</div><div class='del'>-Program), the recipient automatically receives a license from the</div><div class='del'>-original licensor to copy, distribute or modify the Program subject to</div><div class='del'>-these terms and conditions.  You may not impose any further</div><div class='del'>-restrictions on the recipients' exercise of the rights granted herein.</div><div class='del'>-You are not responsible for enforcing compliance by third parties to</div><div class='del'>-this License.</div><div class='del'>-</div><div class='del'>-  7. If, as a consequence of a court judgment or allegation of patent</div><div class='del'>-infringement or for any other reason (not limited to patent issues),</div><div class='del'>-conditions are imposed on you (whether by court order, agreement or</div><div class='del'>-otherwise) that contradict the conditions of this License, they do not</div><div class='del'>-excuse you from the conditions of this License.  If you cannot</div><div class='del'>-distribute so as to satisfy simultaneously your obligations under this</div><div class='del'>-License and any other pertinent obligations, then as a consequence you</div><div class='del'>-may not distribute the Program at all.  For example, if a patent</div><div class='del'>-license would not permit royalty-free redistribution of the Program by</div><div class='del'>-all those who receive copies directly or indirectly through you, then</div><div class='del'>-the only way you could satisfy both it and this License would be to</div><div class='del'>-refrain entirely from distribution of the Program.</div><div class='del'>-</div><div class='del'>-If any portion of this section is held invalid or unenforceable under</div><div class='del'>-any particular circumstance, the balance of the section is intended to</div><div class='del'>-apply and the section as a whole is intended to apply in other</div><div class='del'>-circumstances.</div><div class='del'>-</div><div class='del'>-It is not the purpose of this section to induce you to infringe any</div><div class='del'>-patents or other property right claims or to contest validity of any</div><div class='del'>-such claims; this section has the sole purpose of protecting the</div><div class='del'>-integrity of the free software distribution system, which is</div><div class='del'>-implemented by public license practices.  Many people have made</div><div class='del'>-generous contributions to the wide range of software distributed</div><div class='del'>-through that system in reliance on consistent application of that</div><div class='del'>-system; it is up to the author/donor to decide if he or she is willing</div><div class='del'>-to distribute software through any other system and a licensee cannot</div><div class='del'>-impose that choice.</div><div class='del'>-</div><div class='del'>-This section is intended to make thoroughly clear what is believed to</div><div class='del'>-be a consequence of the rest of this License.</div><div class='del'>-</div><div class='del'>-  8. If the distribution and/or use of the Program is restricted in</div><div class='del'>-certain countries either by patents or by copyrighted interfaces, the</div><div class='del'>-original copyright holder who places the Program under this License</div><div class='del'>-may add an explicit geographical distribution limitation excluding</div><div class='del'>-those countries, so that distribution is permitted only in or among</div><div class='del'>-countries not thus excluded.  In such case, this License incorporates</div><div class='del'>-the limitation as if written in the body of this License.</div><div class='del'>-</div><div class='del'>-  9. The Free Software Foundation may publish revised and/or new versions</div><div class='del'>-of the General Public License from time to time.  Such new versions will</div><div class='del'>-be similar in spirit to the present version, but may differ in detail to</div><div class='del'>-address new problems or concerns.</div><div class='del'>-</div><div class='del'>-Each version is given a distinguishing version number.  If the Program</div><div class='del'>-specifies a version number of this License which applies to it and "any</div><div class='del'>-later version", you have the option of following the terms and conditions</div><div class='del'>-either of that version or of any later version published by the Free</div><div class='del'>-Software Foundation.  If the Program does not specify a version number of</div><div class='del'>-this License, you may choose any version ever published by the Free Software</div><div class='del'>-Foundation.</div><div class='del'>-</div><div class='del'>-  10. If you wish to incorporate parts of the Program into other free</div><div class='del'>-programs whose distribution conditions are different, write to the author</div><div class='del'>-to ask for permission.  For software which is copyrighted by the Free</div><div class='del'>-Software Foundation, write to the Free Software Foundation; we sometimes</div><div class='del'>-make exceptions for this.  Our decision will be guided by the two goals</div><div class='del'>-of preserving the free status of all derivatives of our free software and</div><div class='del'>-of promoting the sharing and reuse of software generally.</div><div class='del'>-</div><div class='del'>-			    NO WARRANTY</div><div class='del'>-</div><div class='del'>-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY</div><div class='del'>-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN</div><div class='del'>-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES</div><div class='del'>-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED</div><div class='del'>-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</div><div class='del'>-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS</div><div class='del'>-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE</div><div class='del'>-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,</div><div class='del'>-REPAIR OR CORRECTION.</div><div class='del'>-</div><div class='del'>-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING</div><div class='del'>-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR</div><div class='del'>-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,</div><div class='del'>-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING</div><div class='del'>-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED</div><div class='del'>-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY</div><div class='del'>-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER</div><div class='del'>-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE</div><div class='del'>-POSSIBILITY OF SUCH DAMAGES.</div><div class='del'>-</div><div class='del'>-		     END OF TERMS AND CONDITIONS</div><div class='del'>-</div><div class='del'>-	    How to Apply These Terms to Your New Programs</div><div class='del'>-</div><div class='del'>-  If you develop a new program, and you want it to be of the greatest</div><div class='del'>-possible use to the public, the best way to achieve this is to make it</div><div class='del'>-free software which everyone can redistribute and change under these terms.</div><div class='del'>-</div><div class='del'>-  To do so, attach the following notices to the program.  It is safest</div><div class='del'>-to attach them to the start of each source file to most effectively</div><div class='del'>-convey the exclusion of warranty; and each file should have at least</div><div class='del'>-the "copyright" line and a pointer to where the full notice is found.</div><div class='del'>-</div><div class='del'>-    &lt;one line to give the program's name and a brief idea of what it does.&gt;</div><div class='del'>-    Copyright (C) &lt;year&gt;  &lt;name of author&gt;</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 of the License, or</div><div class='del'>-    (at your option) 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, Boston, MA  02111-1307  USA</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Also add information on how to contact you by electronic and paper mail.</div><div class='del'>-</div><div class='del'>-If the program is interactive, make it output a short notice like this</div><div class='del'>-when it starts in an interactive mode:</div><div class='del'>-</div><div class='del'>-    Gnomovision version 69, Copyright (C) year name of author</div><div class='del'>-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.</div><div class='del'>-    This is free software, and you are welcome to redistribute it</div><div class='del'>-    under certain conditions; type `show c' for details.</div><div class='del'>-</div><div class='del'>-The hypothetical commands `show w' and `show c' should show the appropriate</div><div class='del'>-parts of the General Public License.  Of course, the commands you use may</div><div class='del'>-be called something other than `show w' and `show c'; they could even be</div><div class='del'>-mouse-clicks or menu items--whatever suits your program.</div><div class='del'>-</div><div class='del'>-You should also get your employer (if you work as a programmer) or your</div><div class='del'>-school, if any, to sign a "copyright disclaimer" for the program, if</div><div class='del'>-necessary.  Here is a sample; alter the names:</div><div class='del'>-</div><div class='del'>-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program</div><div class='del'>-  `Gnomovision' (which makes passes at compilers) written by James Hacker.</div><div class='del'>-</div><div class='del'>-  &lt;signature of Ty Coon&gt;, 1 April 1989</div><div class='del'>-  Ty Coon, President of Vice</div><div class='del'>-</div><div class='del'>-This General Public License does not permit incorporating your program into</div><div class='del'>-proprietary programs.  If your program is a subroutine library, you may</div><div class='del'>-consider it more useful to permit linking proprietary applications with the</div><div class='del'>-library.  If this is what you want to do, use the GNU Library General</div><div class='del'>-Public License instead of this License.</div><div class='head'>diff --git a/LEGAL b/LEGAL<br/>deleted file mode 100644<br/>index 908eb270f5..0000000000<br/>--- a/<a href='/ruby.git/tree/LEGAL?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>LEGAL</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,370 +0,0 @@</div><div class='del'>-LEGAL NOTICE INFORMATION</div><div class='del'>-------------------------</div><div class='del'>-</div><div class='del'>-All the files in this distribution are covered under either the Ruby's</div><div class='del'>-license (see the file COPYING) or public-domain except some files</div><div class='del'>-mentioned below.</div><div class='del'>-</div><div class='del'>-regex.[ch]:</div><div class='del'>-</div><div class='del'>-  These files are under LGPL.  Treat them as LGPL says. (See the file</div><div class='del'>-  LGPL for details)</div><div class='del'>-</div><div class='del'>-    Extended regular expression matching and search library.</div><div class='del'>-    Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc.</div><div class='del'>-</div><div class='del'>-    The GNU C Library is free software; you can redistribute it and/or</div><div class='del'>-    modify it under the terms of the GNU Library General Public License as</div><div class='del'>-    published by the Free Software Foundation; either version 2 of the</div><div class='del'>-    License, or (at your option) any later version.</div><div class='del'>-</div><div class='del'>-    The GNU C Library 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 GNU</div><div class='del'>-    Library General Public License for more details.</div><div class='del'>-</div><div class='del'>-    You should have received a copy of the GNU Library General Public</div><div class='del'>-    License along with the GNU C Library; see the file LGPL.  If not,</div><div class='del'>-    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,</div><div class='del'>-    Boston, MA 02111-1307, USA.  */</div><div class='del'>-</div><div class='del'>-    Multi-byte extension added May, 1993 by t^2 (Takahiro Tanimoto)</div><div class='del'>-    Last change: May 21, 1993 by t^2</div><div class='del'>-    removed gapped buffer support, multiple syntax support by matz &lt;matz@nts.co.jp&gt;</div><div class='del'>-    Perl5 extension added by matz &lt;matz@caelum.co.jp&gt;</div><div class='del'>-    UTF-8 extension added Jan 16 1999 by Yoshida Masato  &lt;yoshidam@tau.bekkoame.ne.jp&gt;</div><div class='del'>-</div><div class='del'>-configure:</div><div class='del'>-</div><div class='del'>-  This file is free software.</div><div class='del'>-</div><div class='del'>-    Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.</div><div class='del'>-</div><div class='del'>-    This configure script is free software; the Free Software Foundation</div><div class='del'>-    gives unlimited permission to copy, distribute and modify it.</div><div class='del'>-</div><div class='del'>-config.guess:</div><div class='del'>-config.sub:</div><div class='del'>-parse.c:</div><div class='del'>-</div><div class='del'>-  As long as you distribute these files with the file configure, they</div><div class='del'>-  are covered under the Ruby's license.</div><div class='del'>-</div><div class='del'>-      Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999</div><div class='del'>-      Free Software Foundation, Inc.</div><div class='del'>-</div><div class='del'>-    This file is free software; you can redistribute it and/or modify it</div><div class='del'>-    under the terms of the GNU General Public License as published by</div><div class='del'>-    the Free Software Foundation; either version 2 of the License, or</div><div class='del'>-    (at your option) any later version.</div><div class='del'>-</div><div class='del'>-    This program is distributed in the hope that it will be useful, but</div><div class='del'>-    WITHOUT ANY WARRANTY; without even the implied warranty of</div><div class='del'>-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</div><div class='del'>-    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, Boston, MA 02111-1307, USA.</div><div class='del'>-</div><div class='del'>-    As a special exception to the GNU General Public License, if you</div><div class='del'>-    distribute this file as part of a program that contains a</div><div class='del'>-    configuration script generated by Autoconf, you may include it under</div><div class='del'>-    the same distribution terms that you use for the rest of that program.</div><div class='del'>-</div><div class='del'>-util.c (partly):</div><div class='del'>-win32/win32.[ch]:</div><div class='del'>-</div><div class='del'>-  You can apply the Artistic License to these files. (or GPL,</div><div class='del'>-  alternatively)</div><div class='del'>-</div><div class='del'>-    Copyright (c) 1993, Intergraph Corporation</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 perl README file.</div><div class='del'>-</div><div class='del'>-random.c</div><div class='del'>-</div><div class='del'>-  This file is under the new-style BSD license.</div><div class='del'>-</div><div class='del'>-    A C-program for MT19937, with initialization improved 2002/2/10.</div><div class='del'>-    Coded by Takuji Nishimura and Makoto Matsumoto.</div><div class='del'>-    This is a faster version by taking Shawn Cokus's optimization,</div><div class='del'>-    Matthe Bellew's simplification, Isaku Wada's real version.</div><div class='del'>-</div><div class='del'>-    Before using, initialize the state by using init_genrand(seed) </div><div class='del'>-    or init_by_array(init_key, key_length).</div><div class='del'>-</div><div class='del'>-    Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,</div><div class='del'>-    All rights reserved.                          </div><div class='del'>-</div><div class='del'>-    Redistribution and use in source and binary forms, with or without</div><div class='del'>-    modification, are permitted provided that the following conditions</div><div class='del'>-    are met:</div><div class='del'>-</div><div class='del'>-      1. Redistributions of source code must retain the above copyright</div><div class='del'>-	 notice, this list of conditions and the following disclaimer.</div><div class='del'>-</div><div class='del'>-      2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>-	 notice, this list of conditions and the following disclaimer in the</div><div class='del'>-	 documentation and/or other materials provided with the distribution.</div><div class='del'>-</div><div class='del'>-      3. The names of its contributors may not be used to endorse or promote </div><div class='del'>-	 products derived from this software without specific prior written </div><div class='del'>-	 permission.</div><div class='del'>-</div><div class='del'>-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</div><div class='del'>-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</div><div class='del'>-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</div><div class='del'>-    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR</div><div class='del'>-    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,</div><div class='del'>-    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,</div><div class='del'>-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR</div><div class='del'>-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF</div><div class='del'>-    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</div><div class='del'>-    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</div><div class='del'>-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    Any feedback is very welcome.</div><div class='del'>-    http://www.math.keio.ac.jp/matumoto/emt.html</div><div class='del'>-    email: matumoto@math.keio.ac.jp</div><div class='del'>-</div><div class='del'>-st.[ch]:</div><div class='del'>-x68/*:</div><div class='del'>-missing/alloca.c:</div><div class='del'>-missing/dup2.c:</div><div class='del'>-missing/finite.c:</div><div class='del'>-missing/hypot.c:</div><div class='del'>-missing/isinf.c:</div><div class='del'>-missing/isnan.c:</div><div class='del'>-missing/memcmp.c:</div><div class='del'>-missing/memmove.c:</div><div class='del'>-missing/strcasecmp.c:</div><div class='del'>-missing/strchr.c:</div><div class='del'>-missing/streror.c:</div><div class='del'>-missing/strftime.c:</div><div class='del'>-missing/strncasecmp.c:</div><div class='del'>-missing/strstr.c:</div><div class='del'>-missing/strtol.c:</div><div class='del'>-ext/digest/sha1/sha1.[ch]:</div><div class='del'>-</div><div class='del'>-  These files are all under public domain.</div><div class='del'>-</div><div class='del'>-missing/strtod.c:</div><div class='del'>-</div><div class='del'>-  This file will not be used on most platforms depending on how the</div><div class='del'>-  configure script results.  In any case you must not receive any fee</div><div class='del'>-  with the file itself.</div><div class='del'>-</div><div class='del'>-    Copyright (c) 1988-1993 The Regents of the University of California.</div><div class='del'>-    Copyright (c) 1994 Sun Microsystems, Inc.</div><div class='del'>-</div><div class='del'>-    Permission to use, copy, modify, and distribute this</div><div class='del'>-    software and its documentation for any purpose and without</div><div class='del'>-    fee is hereby granted, provided that the above copyright</div><div class='del'>-    notice appear in all copies.  The University of California</div><div class='del'>-    makes no representations about the suitability of this</div><div class='del'>-    software for any purpose.  It is provided "as is" without</div><div class='del'>-    express or implied warranty.</div><div class='del'>-</div><div class='del'>-missing/strtoul.c:</div><div class='del'>-</div><div class='del'>-  This file will not be used on most platforms depending on how the</div><div class='del'>-  configure script results.  In any case you must not receive any fee</div><div class='del'>-  with the file itself.</div><div class='del'>-</div><div class='del'>-    Copyright 1988 Regents of the University of California</div><div class='del'>-</div><div class='del'>-    Permission to use, copy, modify, and distribute this</div><div class='del'>-    software and its documentation for any purpose and without</div><div class='del'>-    fee is hereby granted, provided that the above copyright</div><div class='del'>-    notice appear in all copies.  The University of California</div><div class='del'>-    makes no representations about the suitability of this</div><div class='del'>-    software for any purpose.  It is provided "as is" without</div><div class='del'>-    express or implied warranty.</div><div class='del'>-</div><div class='del'>-missing/erf.c:</div><div class='del'>-missing/crypt.c:</div><div class='del'>-missing/vsnprintf.c:</div><div class='del'>-</div><div class='del'>-  This file is under the old-style BSD license.  Note that the</div><div class='del'>-  paragraph 3 below is now null and void.</div><div class='del'>-</div><div class='del'>-    Copyright (c) 1990, 1993</div><div class='del'>-         The Regents of the University of California.  All rights reserved.</div><div class='del'>-</div><div class='del'>-    This code is derived from software contributed to Berkeley by</div><div class='del'>-    Chris Torek.</div><div class='del'>-</div><div class='del'>-    Redistribution and use in source and binary forms, with or without</div><div class='del'>-    modification, are permitted provided that the following conditions</div><div class='del'>-    are met:</div><div class='del'>-    1. Redistributions of source code must retain the above copyright</div><div class='del'>-       notice, this list of conditions and the following disclaimer.</div><div class='del'>-    2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>-       notice, this list of conditions and the following disclaimer in the</div><div class='del'>-       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='del'>-       may be used to endorse or promote products derived from this software</div><div class='del'>-       without specific prior written permission.</div><div class='del'>-</div><div class='del'>-    THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND</div><div class='del'>-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</div><div class='del'>-    ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE</div><div class='del'>-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</div><div class='del'>-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</div><div class='del'>-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</div><div class='del'>-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</div><div class='del'>-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</div><div class='del'>-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='del'>-    SUCH DAMAGE.</div><div class='del'>-</div><div class='del'>-    IMPORTANT NOTE:</div><div class='del'>-    --------------</div><div class='del'>-    From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change</div><div class='del'>-    paragraph 3 above is now null and void.</div><div class='del'>-</div><div class='del'>-ext/digest/md5/md5.[ch]:</div><div class='del'>-</div><div class='del'>-  These files are under the following license.  Ruby uses modified</div><div class='del'>-  versions of them.</div><div class='del'>-</div><div class='del'>-    Copyright (C) 1999, 2000 Aladdin Enterprises.  All rights reserved.</div><div class='del'>-</div><div class='del'>-    This software is provided 'as-is', without any express or implied</div><div class='del'>-    warranty.  In no event will the authors be held liable for any damages</div><div class='del'>-    arising from the use of this software.</div><div class='del'>-</div><div class='del'>-    Permission is granted to anyone to use this software for any purpose,</div><div class='del'>-    including commercial applications, and to alter it and redistribute it</div><div class='del'>-    freely, subject to the following restrictions:</div><div class='del'>-</div><div class='del'>-    1. The origin of this software must not be misrepresented; you must not</div><div class='del'>-       claim that you wrote the original software. If you use this software</div><div class='del'>-       in a product, an acknowledgment in the product documentation would be</div><div class='del'>-       appreciated but is not required.</div><div class='del'>-    2. Altered source versions must be plainly marked as such, and must not be</div><div class='del'>-       misrepresented as being the original software.</div><div class='del'>-    3. This notice may not be removed or altered from any source distribution.</div><div class='del'>-</div><div class='del'>-    L. Peter Deutsch</div><div class='del'>-    ghost@aladdin.com</div><div class='del'>-</div><div class='del'>-ext/digest/rmd160/rmd160.[ch]:</div><div class='del'>-</div><div class='del'>-  These files have the following copyright information, and by the</div><div class='del'>-  author we are allowed to use it under the new-style BSD license.</div><div class='del'>-</div><div class='del'>-    AUTHOR:   Antoon Bosselaers, ESAT-COSIC</div><div class='del'>-              (Arranged for libc by Todd C. Miller)</div><div class='del'>-    DATE:     1 March 1996</div><div class='del'>-</div><div class='del'>-    Copyright (c) Katholieke Universiteit Leuven</div><div class='del'>-    1996, All Rights Reserved</div><div class='del'>-</div><div class='del'>-ext/digest/rmd160/rmd160hl.c:</div><div class='del'>-ext/digest/sha1/sha1hl.c:</div><div class='del'>-</div><div class='del'>-  These files are under the beer-ware license.</div><div class='del'>-</div><div class='del'>-    "THE BEER-WARE LICENSE" (Revision 42):</div><div class='del'>-    &lt;phk@login.dkuug.dk&gt; wrote this file.  As long as you retain this notice you</div><div class='del'>-    can do whatever you want with this stuff. If we meet some day, and you think</div><div class='del'>-    this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp</div><div class='del'>-</div><div class='del'>-ext/digest/sha2/sha2.[ch]:</div><div class='del'>-ext/digest/sha2/sha2hl.c:</div><div class='del'>-</div><div class='del'>-  These files are under the new-style BSD license.</div><div class='del'>-</div><div class='del'>-    Copyright 2000 Aaron D. Gifford.  All rights reserved.</div><div class='del'>-</div><div class='del'>-    Redistribution and use in source and binary forms, with or without</div><div class='del'>-    modification, are permitted provided that the following conditions</div><div class='del'>-    are met:</div><div class='del'>-    1. Redistributions of source code must retain the above copyright</div><div class='del'>-       notice, this list of conditions and the following disclaimer.</div><div class='del'>-    2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>-       notice, this list of conditions and the following disclaimer in the</div><div class='del'>-       documentation and/or other materials provided with the distribution.</div><div class='del'>-    3. Neither the name of the copyright holder nor the names of contributors</div><div class='del'>-       may be used to endorse or promote products derived from this software</div><div class='del'>-       without specific prior written permission.</div><div class='del'>-</div><div class='del'>-    THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND</div><div class='del'>-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</div><div class='del'>-    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE</div><div class='del'>-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</div><div class='del'>-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</div><div class='del'>-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</div><div class='del'>-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</div><div class='del'>-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</div><div class='del'>-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='del'>-    SUCH DAMAGE.</div><div class='del'>-</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='del'>-</div><div class='del'>-  These files are under the following license.  So to speak, it is</div><div class='del'>-  copyrighted semi-public-domain software.</div><div class='del'>-</div><div class='del'>-    Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)</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'>-ext/socket/addrinfo.h:</div><div class='del'>-ext/socket/getaddrinfo.c:</div><div class='del'>-ext/socket/getnameinfo.c:</div><div class='del'>-</div><div class='del'>-  These files are under the new-style BSD license.</div><div class='del'>-</div><div class='del'>-    Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.</div><div class='del'>-    All rights reserved.</div><div class='del'>-</div><div class='del'>-    Redistribution and use in source and binary forms, with or without</div><div class='del'>-    modification, are permitted provided that the following conditions</div><div class='del'>-    are met:</div><div class='del'>-    1. Redistributions of source code must retain the above copyright</div><div class='del'>-       notice, this list of conditions and the following disclaimer.</div><div class='del'>-    2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>-       notice, this list of conditions and the following disclaimer in the</div><div class='del'>-       documentation and/or other materials provided with the distribution.</div><div class='del'>-    3. Neither the name of the project nor the names of its contributors</div><div class='del'>-       may be used to endorse or promote products derived from this software</div><div class='del'>-       without specific prior written permission.</div><div class='del'>-</div><div class='del'>-    THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND</div><div class='del'>-    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</div><div class='del'>-    ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE</div><div class='del'>-    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</div><div class='del'>-    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</div><div class='del'>-    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</div><div class='del'>-    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</div><div class='del'>-    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</div><div class='del'>-    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='del'>-    SUCH DAMAGE.</div><div class='del'>-</div><div class='del'>-ext/win32ole/win32ole.c:</div><div class='del'>-</div><div class='del'>-  You can apply the Artistic License to this file. (or GPL,</div><div class='del'>-  alternatively)</div><div class='del'>-</div><div class='del'>-    (c) 1995 Microsoft Corporation. All rights reserved.</div><div class='del'>-    Developed by ActiveWare Internet Corp., http://www.ActiveWare.com</div><div class='del'>-</div><div class='del'>-    Other modifications Copyright (c) 1997, 1998 by Gurusamy Sarathy</div><div class='del'>-    &lt;gsar@umich.edu&gt; and Jan Dubois &lt;jan.dubois@ibm.net&gt;</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 the Perl distribution.</div><div class='head'>diff --git a/LGPL b/LGPL<br/>deleted file mode 100644<br/>index b1e3f5a263..0000000000<br/>--- a/<a href='/ruby.git/tree/LGPL?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>LGPL</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,504 +0,0 @@</div><div class='del'>-		  GNU LESSER GENERAL PUBLIC LICENSE</div><div class='del'>-		       Version 2.1, February 1999</div><div class='del'>-</div><div class='del'>- Copyright (C) 1991, 1999 Free Software Foundation, Inc.</div><div class='del'>-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</div><div class='del'>- Everyone is permitted to copy and distribute verbatim copies</div><div class='del'>- of this license document, but changing it is not allowed.</div><div class='del'>-</div><div class='del'>-[This is the first released version of the Lesser GPL.  It also counts</div><div class='del'>- as the successor of the GNU Library Public License, version 2, hence</div><div class='del'>- the version number 2.1.]</div><div class='del'>-</div><div class='del'>-			    Preamble</div><div class='del'>-</div><div class='del'>-  The licenses for most software are designed to take away your</div><div class='del'>-freedom to share and change it.  By contrast, the GNU General Public</div><div class='del'>-Licenses are intended to guarantee your freedom to share and change</div><div class='del'>-free software--to make sure the software is free for all its users.</div><div class='del'>-</div><div class='del'>-  This license, the Lesser General Public License, applies to some</div><div class='del'>-specially designated software packages--typically libraries--of the</div><div class='del'>-Free Software Foundation and other authors who decide to use it.  You</div><div class='del'>-can use it too, but we suggest you first think carefully about whether</div><div class='del'>-this license or the ordinary General Public License is the better</div><div class='del'>-strategy to use in any particular case, based on the explanations below.</div><div class='del'>-</div><div class='del'>-  When we speak of free software, we are referring to freedom of use,</div><div class='del'>-not price.  Our General Public Licenses are designed to make sure that</div><div class='del'>-you have the freedom to distribute copies of free software (and charge</div><div class='del'>-for this service if you wish); that you receive source code or can get</div><div class='del'>-it if you want it; that you can change the software and use pieces of</div><div class='del'>-it in new free programs; and that you are informed that you can do</div><div class='del'>-these things.</div><div class='del'>-</div><div class='del'>-  To protect your rights, we need to make restrictions that forbid</div><div class='del'>-distributors to deny you these rights or to ask you to surrender these</div><div class='del'>-rights.  These restrictions translate to certain responsibilities for</div><div class='del'>-you if you distribute copies of the library or if you modify it.</div><div class='del'>-</div><div class='del'>-  For example, if you distribute copies of the library, whether gratis</div><div class='del'>-or for a fee, you must give the recipients all the rights that we gave</div><div class='del'>-you.  You must make sure that they, too, receive or can get the source</div><div class='del'>-code.  If you link other code with the library, you must provide</div><div class='del'>-complete object files to the recipients, so that they can relink them</div><div class='del'>-with the library after making changes to the library and recompiling</div><div class='del'>-it.  And you must show them these terms so they know their rights.</div><div class='del'>-</div><div class='del'>-  We protect your rights with a two-step method: (1) we copyright the</div><div class='del'>-library, and (2) we offer you this license, which gives you legal</div><div class='del'>-permission to copy, distribute and/or modify the library.</div><div class='del'>-</div><div class='del'>-  To protect each distributor, we want to make it very clear that</div><div class='del'>-there is no warranty for the free library.  Also, if the library is</div><div class='del'>-modified by someone else and passed on, the recipients should know</div><div class='del'>-that what they have is not the original version, so that the original</div><div class='del'>-author's reputation will not be affected by problems that might be</div><div class='del'>-introduced by others.</div><div class='del'>-</div><div class='del'>-  Finally, software patents pose a constant threat to the existence of</div><div class='del'>-any free program.  We wish to make sure that a company cannot</div><div class='del'>-effectively restrict the users of a free program by obtaining a</div><div class='del'>-restrictive license from a patent holder.  Therefore, we insist that</div><div class='del'>-any patent license obtained for a version of the library must be</div><div class='del'>-consistent with the full freedom of use specified in this license.</div><div class='del'>-</div><div class='del'>-  Most GNU software, including some libraries, is covered by the</div><div class='del'>-ordinary GNU General Public License.  This license, the GNU Lesser</div><div class='del'>-General Public License, applies to certain designated libraries, and</div><div class='del'>-is quite different from the ordinary General Public License.  We use</div><div class='del'>-this license for certain libraries in order to permit linking those</div><div class='del'>-libraries into non-free programs.</div><div class='del'>-</div><div class='del'>-  When a program is linked with a library, whether statically or using</div><div class='del'>-a shared library, the combination of the two is legally speaking a</div><div class='del'>-combined work, a derivative of the original library.  The ordinary</div><div class='del'>-General Public License therefore permits such linking only if the</div><div class='del'>-entire combination fits its criteria of freedom.  The Lesser General</div><div class='del'>-Public License permits more lax criteria for linking other code with</div><div class='del'>-the library.</div><div class='del'>-</div><div class='del'>-  We call this license the "Lesser" General Public License because it</div><div class='del'>-does Less to protect the user's freedom than the ordinary General</div><div class='del'>-Public License.  It also provides other free software developers Less</div><div class='del'>-of an advantage over competing non-free programs.  These disadvantages</div><div class='del'>-are the reason we use the ordinary General Public License for many</div><div class='del'>-libraries.  However, the Lesser license provides advantages in certain</div><div class='del'>-special circumstances.</div><div class='del'>-</div><div class='del'>-  For example, on rare occasions, there may be a special need to</div><div class='del'>-encourage the widest possible use of a certain library, so that it becomes</div><div class='del'>-a de-facto standard.  To achieve this, non-free programs must be</div><div class='del'>-allowed to use the library.  A more frequent case is that a free</div><div class='del'>-library does the same job as widely used non-free libraries.  In this</div><div class='del'>-case, there is little to gain by limiting the free library to free</div><div class='del'>-software only, so we use the Lesser General Public License.</div><div class='del'>-</div><div class='del'>-  In other cases, permission to use a particular library in non-free</div><div class='del'>-programs enables a greater number of people to use a large body of</div><div class='del'>-free software.  For example, permission to use the GNU C Library in</div><div class='del'>-non-free programs enables many more people to use the whole GNU</div><div class='del'>-operating system, as well as its variant, the GNU/Linux operating</div><div class='del'>-system.</div><div class='del'>-</div><div class='del'>-  Although the Lesser General Public License is Less protective of the</div><div class='del'>-users' freedom, it does ensure that the user of a program that is</div><div class='del'>-linked with the Library has the freedom and the wherewithal to run</div><div class='del'>-that program using a modified version of the Library.</div><div class='del'>-</div><div class='del'>-  The precise terms and conditions for copying, distribution and</div><div class='del'>-modification follow.  Pay close attention to the difference between a</div><div class='del'>-"work based on the library" and a "work that uses the library".  The</div><div class='del'>-former contains code derived from the library, whereas the latter must</div><div class='del'>-be combined with the library in order to run.</div><div class='del'>-</div><div class='del'>-		  GNU LESSER GENERAL PUBLIC LICENSE</div><div class='del'>-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</div><div class='del'>-</div><div class='del'>-  0. This License Agreement applies to any software library or other</div><div class='del'>-program which contains a notice placed by the copyright holder or</div><div class='del'>-other authorized party saying it may be distributed under the terms of</div><div class='del'>-this Lesser General Public License (also called "this License").</div><div class='del'>-Each licensee is addressed as "you".</div><div class='del'>-</div><div class='del'>-  A "library" means a collection of software functions and/or data</div><div class='del'>-prepared so as to be conveniently linked with application programs</div><div class='del'>-(which use some of those functions and data) to form executables.</div><div class='del'>-</div><div class='del'>-  The "Library", below, refers to any such software library or work</div><div class='del'>-which has been distributed under these terms.  A "work based on the</div><div class='del'>-Library" means either the Library or any derivative work under</div><div class='del'>-copyright law: that is to say, a work containing the Library or a</div><div class='del'>-portion of it, either verbatim or with modifications and/or translated</div><div class='del'>-straightforwardly into another language.  (Hereinafter, translation is</div><div class='del'>-included without limitation in the term "modification".)</div><div class='del'>-</div><div class='del'>-  "Source code" for a work means the preferred form of the work for</div><div class='del'>-making modifications to it.  For a library, complete source code means</div><div class='del'>-all the source code for all modules it contains, plus any associated</div><div class='del'>-interface definition files, plus the scripts used to control compilation</div><div class='del'>-and installation of the library.</div><div class='del'>-</div><div class='del'>-  Activities other than copying, distribution and modification are not</div><div class='del'>-covered by this License; they are outside its scope.  The act of</div><div class='del'>-running a program using the Library is not restricted, and output from</div><div class='del'>-such a program is covered only if its contents constitute a work based</div><div class='del'>-on the Library (independent of the use of the Library in a tool for</div><div class='del'>-writing it).  Whether that is true depends on what the Library does</div><div class='del'>-and what the program that uses the Library does.</div><div class='del'>-  </div><div class='del'>-  1. You may copy and distribute verbatim copies of the Library's</div><div class='del'>-complete source code as you receive it, in any medium, provided that</div><div class='del'>-you conspicuously and appropriately publish on each copy an</div><div class='del'>-appropriate copyright notice and disclaimer of warranty; keep intact</div><div class='del'>-all the notices that refer to this License and to the absence of any</div><div class='del'>-warranty; and distribute a copy of this License along with the</div><div class='del'>-Library.</div><div class='del'>-</div><div class='del'>-  You may charge a fee for the physical act of transferring a copy,</div><div class='del'>-and you may at your option offer warranty protection in exchange for a</div><div class='del'>-fee.</div><div class='del'>-</div><div class='del'>-  2. You may modify your copy or copies of the Library or any portion</div><div class='del'>-of it, thus forming a work based on the Library, and copy and</div><div class='del'>-distribute such modifications or work under the terms of Section 1</div><div class='del'>-above, provided that you also meet all of these conditions:</div><div class='del'>-</div><div class='del'>-    a) The modified work must itself be a software library.</div><div class='del'>-</div><div class='del'>-    b) You must cause the files modified to carry prominent notices</div><div class='del'>-    stating that you changed the files and the date of any change.</div><div class='del'>-</div><div class='del'>-    c) You must cause the whole of the work to be licensed at no</div><div class='del'>-    charge to all third parties under the terms of this License.</div><div class='del'>-</div><div class='del'>-    d) If a facility in the modified Library refers to a function or a</div><div class='del'>-    table of data to be supplied by an application program that uses</div><div class='del'>-    the facility, other than as an argument passed when the facility</div><div class='del'>-    is invoked, then you must make a good faith effort to ensure that,</div><div class='del'>-    in the event an application does not supply such function or</div><div class='del'>-    table, the facility still operates, and performs whatever part of</div><div class='del'>-    its purpose remains meaningful.</div><div class='del'>-</div><div class='del'>-    (For example, a function in a library to compute square roots has</div><div class='del'>-    a purpose that is entirely well-defined independent of the</div><div class='del'>-    application.  Therefore, Subsection 2d requires that any</div><div class='del'>-    application-supplied function or table used by this function must</div><div class='del'>-    be optional: if the application does not supply it, the square</div><div class='del'>-    root function must still compute square roots.)</div><div class='del'>-</div><div class='del'>-These requirements apply to the modified work as a whole.  If</div><div class='del'>-identifiable sections of that work are not derived from the Library,</div><div class='del'>-and can be reasonably considered independent and separate works in</div><div class='del'>-themselves, then this License, and its terms, do not apply to those</div><div class='del'>-sections when you distribute them as separate works.  But when you</div><div class='del'>-distribute the same sections as part of a whole which is a work based</div><div class='del'>-on the Library, the distribution of the whole must be on the terms of</div><div class='del'>-this License, whose permissions for other licensees extend to the</div><div class='del'>-entire whole, and thus to each and every part regardless of who wrote</div><div class='del'>-it.</div><div class='del'>-</div><div class='del'>-Thus, it is not the intent of this section to claim rights or contest</div><div class='del'>-your rights to work written entirely by you; rather, the intent is to</div><div class='del'>-exercise the right to control the distribution of derivative or</div><div class='del'>-collective works based on the Library.</div><div class='del'>-</div><div class='del'>-In addition, mere aggregation of another work not based on the Library</div><div class='del'>-with the Library (or with a work based on the Library) on a volume of</div><div class='del'>-a storage or distribution medium does not bring the other work under</div><div class='del'>-the scope of this License.</div><div class='del'>-</div><div class='del'>-  3. You may opt to apply the terms of the ordinary GNU General Public</div><div class='del'>-License instead of this License to a given copy of the Library.  To do</div><div class='del'>-this, you must alter all the notices that refer to this License, so</div><div class='del'>-that they refer to the ordinary GNU General Public License, version 2,</div><div class='del'>-instead of to this License.  (If a newer version than version 2 of the</div><div class='del'>-ordinary GNU General Public License has appeared, then you can specify</div><div class='del'>-that version instead if you wish.)  Do not make any other change in</div><div class='del'>-these notices.</div><div class='del'>-</div><div class='del'>-  Once this change is made in a given copy, it is irreversible for</div><div class='del'>-that copy, so the ordinary GNU General Public License applies to all</div><div class='del'>-subsequent copies and derivative works made from that copy.</div><div class='del'>-</div><div class='del'>-  This option is useful when you wish to copy part of the code of</div><div class='del'>-the Library into a program that is not a library.</div><div class='del'>-</div><div class='del'>-  4. You may copy and distribute the Library (or a portion or</div><div class='del'>-derivative of it, under Section 2) in object code or executable form</div><div class='del'>-under the terms of Sections 1 and 2 above provided that you accompany</div><div class='del'>-it with the complete corresponding machine-readable source code, which</div><div class='del'>-must be distributed under the terms of Sections 1 and 2 above on a</div><div class='del'>-medium customarily used for software interchange.</div><div class='del'>-</div><div class='del'>-  If distribution of object code is made by offering access to copy</div><div class='del'>-from a designated place, then offering equivalent access to copy the</div><div class='del'>-source code from the same place satisfies the requirement to</div><div class='del'>-distribute the source code, even though third parties are not</div><div class='del'>-compelled to copy the source along with the object code.</div><div class='del'>-</div><div class='del'>-  5. A program that contains no derivative of any portion of the</div><div class='del'>-Library, but is designed to work with the Library by being compiled or</div><div class='del'>-linked with it, is called a "work that uses the Library".  Such a</div><div class='del'>-work, in isolation, is not a derivative work of the Library, and</div><div class='del'>-therefore falls outside the scope of this License.</div><div class='del'>-</div><div class='del'>-  However, linking a "work that uses the Library" with the Library</div><div class='del'>-creates an executable that is a derivative of the Library (because it</div><div class='del'>-contains portions of the Library), rather than a "work that uses the</div><div class='del'>-library".  The executable is therefore covered by this License.</div><div class='del'>-Section 6 states terms for distribution of such executables.</div><div class='del'>-</div><div class='del'>-  When a "work that uses the Library" uses material from a header file</div><div class='del'>-that is part of the Library, the object code for the work may be a</div><div class='del'>-derivative work of the Library even though the source code is not.</div><div class='del'>-Whether this is true is especially significant if the work can be</div><div class='del'>-linked without the Library, or if the work is itself a library.  The</div><div class='del'>-threshold for this to be true is not precisely defined by law.</div><div class='del'>-</div><div class='del'>-  If such an object file uses only numerical parameters, data</div><div class='del'>-structure layouts and accessors, and small macros and small inline</div><div class='del'>-functions (ten lines or less in length), then the use of the object</div><div class='del'>-file is unrestricted, regardless of whether it is legally a derivative</div><div class='del'>-work.  (Executables containing this object code plus portions of the</div><div class='del'>-Library will still fall under Section 6.)</div><div class='del'>-</div><div class='del'>-  Otherwise, if the work is a derivative of the Library, you may</div><div class='del'>-distribute the object code for the work under the terms of Section 6.</div><div class='del'>-Any executables containing that work also fall under Section 6,</div><div class='del'>-whether or not they are linked directly with the Library itself.</div><div class='del'>-</div><div class='del'>-  6. As an exception to the Sections above, you may also combine or</div><div class='del'>-link a "work that uses the Library" with the Library to produce a</div><div class='del'>-work containing portions of the Library, and distribute that work</div><div class='del'>-under terms of your choice, provided that the terms permit</div><div class='del'>-modification of the work for the customer's own use and reverse</div><div class='del'>-engineering for debugging such modifications.</div><div class='del'>-</div><div class='del'>-  You must give prominent notice with each copy of the work that the</div><div class='del'>-Library is used in it and that the Library and its use are covered by</div><div class='del'>-this License.  You must supply a copy of this License.  If the work</div><div class='del'>-during execution displays copyright notices, you must include the</div><div class='del'>-copyright notice for the Library among them, as well as a reference</div><div class='del'>-directing the user to the copy of this License.  Also, you must do one</div><div class='del'>-of these things:</div><div class='del'>-</div><div class='del'>-    a) Accompany the work with the complete corresponding</div><div class='del'>-    machine-readable source code for the Library including whatever</div><div class='del'>-    changes were used in the work (which must be distributed under</div><div class='del'>-    Sections 1 and 2 above); and, if the work is an executable linked</div><div class='del'>-    with the Library, with the complete machine-readable "work that</div><div class='del'>-    uses the Library", as object code and/or source code, so that the</div><div class='del'>-    user can modify the Library and then relink to produce a modified</div><div class='del'>-    executable containing the modified Library.  (It is understood</div><div class='del'>-    that the user who changes the contents of definitions files in the</div><div class='del'>-    Library will not necessarily be able to recompile the application</div><div class='del'>-    to use the modified definitions.)</div><div class='del'>-</div><div class='del'>-    b) Use a suitable shared library mechanism for linking with the</div><div class='del'>-    Library.  A suitable mechanism is one that (1) uses at run time a</div><div class='del'>-    copy of the library already present on the user's computer system,</div><div class='del'>-    rather than copying library functions into the executable, and (2)</div><div class='del'>-    will operate properly with a modified version of the library, if</div><div class='del'>-    the user installs one, as long as the modified version is</div><div class='del'>-    interface-compatible with the version that the work was made with.</div><div class='del'>-</div><div class='del'>-    c) Accompany the work with a written offer, valid for at</div><div class='del'>-    least three years, to give the same user the materials</div><div class='del'>-    specified in Subsection 6a, above, for a charge no more</div><div class='del'>-    than the cost of performing this distribution.</div><div class='del'>-</div><div class='del'>-    d) If distribution of the work is made by offering access to copy</div><div class='del'>-    from a designated place, offer equivalent access to copy the above</div><div class='del'>-    specified materials from the same place.</div><div class='del'>-</div><div class='del'>-    e) Verify that the user has already received a copy of these</div><div class='del'>-    materials or that you have already sent this user a copy.</div><div class='del'>-</div><div class='del'>-  For an executable, the required form of the "work that uses the</div><div class='del'>-Library" must include any data and utility programs needed for</div><div class='del'>-reproducing the executable from it.  However, as a special exception,</div><div class='del'>-the materials to be distributed need not include anything that is</div><div class='del'>-normally distributed (in either source or binary form) with the major</div><div class='del'>-components (compiler, kernel, and so on) of the operating system on</div><div class='del'>-which the executable runs, unless that component itself accompanies</div><div class='del'>-the executable.</div><div class='del'>-</div><div class='del'>-  It may happen that this requirement contradicts the license</div><div class='del'>-restrictions of other proprietary libraries that do not normally</div><div class='del'>-accompany the operating system.  Such a contradiction means you cannot</div><div class='del'>-use both them and the Library together in an executable that you</div><div class='del'>-distribute.</div><div class='del'>-</div><div class='del'>-  7. You may place library facilities that are a work based on the</div><div class='del'>-Library side-by-side in a single library together with other library</div><div class='del'>-facilities not covered by this License, and distribute such a combined</div><div class='del'>-library, provided that the separate distribution of the work based on</div><div class='del'>-the Library and of the other library facilities is otherwise</div><div class='del'>-permitted, and provided that you do these two things:</div><div class='del'>-</div><div class='del'>-    a) Accompany the combined library with a copy of the same work</div><div class='del'>-    based on the Library, uncombined with any other library</div><div class='del'>-    facilities.  This must be distributed under the terms of the</div><div class='del'>-    Sections above.</div><div class='del'>-</div><div class='del'>-    b) Give prominent notice with the combined library of the fact</div><div class='del'>-    that part of it is a work based on the Library, and explaining</div><div class='del'>-    where to find the accompanying uncombined form of the same work.</div><div class='del'>-</div><div class='del'>-  8. You may not copy, modify, sublicense, link with, or distribute</div><div class='del'>-the Library except as expressly provided under this License.  Any</div><div class='del'>-attempt otherwise to copy, modify, sublicense, link with, or</div><div class='del'>-distribute the Library is void, and will automatically terminate your</div><div class='del'>-rights under this License.  However, parties who have received copies,</div><div class='del'>-or rights, from you under this License will not have their licenses</div><div class='del'>-terminated so long as such parties remain in full compliance.</div><div class='del'>-</div><div class='del'>-  9. You are not required to accept this License, since you have not</div><div class='del'>-signed it.  However, nothing else grants you permission to modify or</div><div class='del'>-distribute the Library or its derivative works.  These actions are</div><div class='del'>-prohibited by law if you do not accept this License.  Therefore, by</div><div class='del'>-modifying or distributing the Library (or any work based on the</div><div class='del'>-Library), you indicate your acceptance of this License to do so, and</div><div class='del'>-all its terms and conditions for copying, distributing or modifying</div><div class='del'>-the Library or works based on it.</div><div class='del'>-</div><div class='del'>-  10. Each time you redistribute the Library (or any work based on the</div><div class='del'>-Library), the recipient automatically receives a license from the</div><div class='del'>-original licensor to copy, distribute, link with or modify the Library</div><div class='del'>-subject to these terms and conditions.  You may not impose any further</div><div class='del'>-restrictions on the recipients' exercise of the rights granted herein.</div><div class='del'>-You are not responsible for enforcing compliance by third parties with</div><div class='del'>-this License.</div><div class='del'>-</div><div class='del'>-  11. If, as a consequence of a court judgment or allegation of patent</div><div class='del'>-infringement or for any other reason (not limited to patent issues),</div><div class='del'>-conditions are imposed on you (whether by court order, agreement or</div><div class='del'>-otherwise) that contradict the conditions of this License, they do not</div><div class='del'>-excuse you from the conditions of this License.  If you cannot</div><div class='del'>-distribute so as to satisfy simultaneously your obligations under this</div><div class='del'>-License and any other pertinent obligations, then as a consequence you</div><div class='del'>-may not distribute the Library at all.  For example, if a patent</div><div class='del'>-license would not permit royalty-free redistribution of the Library by</div><div class='del'>-all those who receive copies directly or indirectly through you, then</div><div class='del'>-the only way you could satisfy both it and this License would be to</div><div class='del'>-refrain entirely from distribution of the Library.</div><div class='del'>-</div><div class='del'>-If any portion of this section is held invalid or unenforceable under any</div><div class='del'>-particular circumstance, the balance of the section is intended to apply,</div><div class='del'>-and the section as a whole is intended to apply in other circumstances.</div><div class='del'>-</div><div class='del'>-It is not the purpose of this section to induce you to infringe any</div><div class='del'>-patents or other property right claims or to contest validity of any</div><div class='del'>-such claims; this section has the sole purpose of protecting the</div><div class='del'>-integrity of the free software distribution system which is</div><div class='del'>-implemented by public license practices.  Many people have made</div><div class='del'>-generous contributions to the wide range of software distributed</div><div class='del'>-through that system in reliance on consistent application of that</div><div class='del'>-system; it is up to the author/donor to decide if he or she is willing</div><div class='del'>-to distribute software through any other system and a licensee cannot</div><div class='del'>-impose that choice.</div><div class='del'>-</div><div class='del'>-This section is intended to make thoroughly clear what is believed to</div><div class='del'>-be a consequence of the rest of this License.</div><div class='del'>-</div><div class='del'>-  12. If the distribution and/or use of the Library is restricted in</div><div class='del'>-certain countries either by patents or by copyrighted interfaces, the</div><div class='del'>-original copyright holder who places the Library under this License may add</div><div class='del'>-an explicit geographical distribution limitation excluding those countries,</div><div class='del'>-so that distribution is permitted only in or among countries not thus</div><div class='del'>-excluded.  In such case, this License incorporates the limitation as if</div><div class='del'>-written in the body of this License.</div><div class='del'>-</div><div class='del'>-  13. The Free Software Foundation may publish revised and/or new</div><div class='del'>-versions of the Lesser General Public License from time to time.</div><div class='del'>-Such new versions will be similar in spirit to the present version,</div><div class='del'>-but may differ in detail to address new problems or concerns.</div><div class='del'>-</div><div class='del'>-Each version is given a distinguishing version number.  If the Library</div><div class='del'>-specifies a version number of this License which applies to it and</div><div class='del'>-"any later version", you have the option of following the terms and</div><div class='del'>-conditions either of that version or of any later version published by</div><div class='del'>-the Free Software Foundation.  If the Library does not specify a</div><div class='del'>-license version number, you may choose any version ever published by</div><div class='del'>-the Free Software Foundation.</div><div class='del'>-</div><div class='del'>-  14. If you wish to incorporate parts of the Library into other free</div><div class='del'>-programs whose distribution conditions are incompatible with these,</div><div class='del'>-write to the author to ask for permission.  For software which is</div><div class='del'>-copyrighted by the Free Software Foundation, write to the Free</div><div class='del'>-Software Foundation; we sometimes make exceptions for this.  Our</div><div class='del'>-decision will be guided by the two goals of preserving the free status</div><div class='del'>-of all derivatives of our free software and of promoting the sharing</div><div class='del'>-and reuse of software generally.</div><div class='del'>-</div><div class='del'>-			    NO WARRANTY</div><div class='del'>-</div><div class='del'>-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO</div><div class='del'>-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.</div><div class='del'>-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR</div><div class='del'>-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY</div><div class='del'>-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR</div><div class='del'>-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE</div><div class='del'>-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME</div><div class='del'>-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</div><div class='del'>-</div><div class='del'>-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN</div><div class='del'>-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY</div><div class='del'>-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU</div><div class='del'>-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR</div><div class='del'>-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE</div><div class='del'>-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING</div><div class='del'>-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A</div><div class='del'>-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF</div><div class='del'>-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH</div><div class='del'>-DAMAGES.</div><div class='del'>-</div><div class='del'>-		     END OF TERMS AND CONDITIONS</div><div class='del'>-</div><div class='del'>-           How to Apply These Terms to Your New Libraries</div><div class='del'>-</div><div class='del'>-  If you develop a new library, and you want it to be of the greatest</div><div class='del'>-possible use to the public, we recommend making it free software that</div><div class='del'>-everyone can redistribute and change.  You can do so by permitting</div><div class='del'>-redistribution under these terms (or, alternatively, under the terms of the</div><div class='del'>-ordinary General Public License).</div><div class='del'>-</div><div class='del'>-  To apply these terms, attach the following notices to the library.  It is</div><div class='del'>-safest to attach them to the start of each source file to most effectively</div><div class='del'>-convey the exclusion of warranty; and each file should have at least the</div><div class='del'>-"copyright" line and a pointer to where the full notice is found.</div><div class='del'>-</div><div class='del'>-    &lt;one line to give the library's name and a brief idea of what it does.&gt;</div><div class='del'>-    Copyright (C) &lt;year&gt;  &lt;name of author&gt;</div><div class='del'>-</div><div class='del'>-    This library is free software; you can redistribute it and/or</div><div class='del'>-    modify it under the terms of the GNU Lesser General Public</div><div class='del'>-    License as published by the Free Software Foundation; either</div><div class='del'>-    version 2.1 of the License, or (at your option) any later version.</div><div class='del'>-</div><div class='del'>-    This library 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 GNU</div><div class='del'>-    Lesser General Public License for more details.</div><div class='del'>-</div><div class='del'>-    You should have received a copy of the GNU Lesser General Public</div><div class='del'>-    License along with this library; if not, write to the Free Software</div><div class='del'>-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</div><div class='del'>-</div><div class='del'>-Also add information on how to contact you by electronic and paper mail.</div><div class='del'>-</div><div class='del'>-You should also get your employer (if you work as a programmer) or your</div><div class='del'>-school, if any, to sign a "copyright disclaimer" for the library, if</div><div class='del'>-necessary.  Here is a sample; alter the names:</div><div class='del'>-</div><div class='del'>-  Yoyodyne, Inc., hereby disclaims all copyright interest in the</div><div class='del'>-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.</div><div class='del'>-</div><div class='del'>-  &lt;signature of Ty Coon&gt;, 1 April 1990</div><div class='del'>-  Ty Coon, President of Vice</div><div class='del'>-</div><div class='del'>-That's all there is to it!</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/Makefile b/Makefile<br/>new file mode 100644<br/>index 0000000000..0908d49776<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/Makefile?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>Makefile</a></div><div class='hunk'>@@ -0,0 +1,6 @@</div><div class='add'>+#</div><div class='add'>+# Makefile -</div><div class='add'>+#</div><div class='add'>+#  created at: Wed Aug 10 15:21:29 JST 1994</div><div class='add'>+</div><div class='add'>+all:; @echo "You must run configure first."</div><div class='head'>diff --git a/Makefile.in b/Makefile.in<br/>index a37bcf65fb..66b3689260 100644<br/>--- a/<a href='/ruby.git/tree/Makefile.in?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>Makefile.in</a><br/>+++ b/<a href='/ruby.git/tree/Makefile.in?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>Makefile.in</a></div><div class='hunk'>@@ -1,202 +1,184 @@</div><div class='ctx'> SHELL = /bin/sh</div><div class='del'>-NULLCMD = :</div><div class='ctx'> </div><div class='ctx'> #### Start of system configuration section. ####</div><div class='ctx'> </div><div class='ctx'> srcdir = @srcdir@</div><div class='del'>-VPATH = $(srcdir):$(srcdir)/missing</div><div class='add'>+VPATH = @srcdir@</div><div class='ctx'> </div><div class='ctx'> CC = @CC@</div><div class='add'>+DBM = @DBM@</div><div class='ctx'> YACC = @YACC@</div><div class='del'>-PURIFY =</div><div class='del'>-AUTOCONF = autoconf</div><div class='del'>-@SET_MAKE@</div><div class='del'>-MKFILES = @MAKEFILES@</div><div class='del'>-</div><div class='del'>-prefix = @prefix@</div><div class='del'>-exec_prefix = @exec_prefix@</div><div class='del'>-bindir = @bindir@</div><div class='del'>-sbindir = @sbindir@</div><div class='del'>-libdir = @libdir@</div><div class='del'>-libexecdir = @libexecdir@</div><div class='del'>-datarootdir = @datarootdir@</div><div class='del'>-datadir = @datadir@</div><div class='del'>-arch = @arch@</div><div class='del'>-sitearch = @sitearch@</div><div class='del'>-sitedir = @sitedir@</div><div class='del'>-</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'>-cflags = @cflags@</div><div class='del'>-optflags = @optflags@</div><div class='del'>-debugflags = @debugflags@</div><div class='del'>-CPPFLAGS = -I. -I$(srcdir) @CPPFLAGS@</div><div class='del'>-LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@</div><div class='del'>-EXTLDFLAGS = </div><div class='del'>-XLDFLAGS = @XLDFLAGS@ $(EXTLDFLAGS)</div><div class='del'>-EXTLIBS = </div><div class='del'>-LIBS = @LIBS@ $(EXTLIBS)</div><div class='del'>-MISSING = @LIBOBJS@ @ALLOCA@</div><div class='del'>-LDSHARED = @LIBRUBY_LDSHARED@</div><div class='del'>-DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(EXTLDFLAGS) @ARCH_FLAG@</div><div class='del'>-SOLIBS = @SOLIBS@</div><div class='del'>-MAINLIBS = @MAINLIBS@</div><div class='del'>-MINIOBJS = @MINIOBJS@</div><div class='del'>-</div><div class='del'>-RUBY_INSTALL_NAME=@RUBY_INSTALL_NAME@</div><div class='del'>-RUBY_SO_NAME=@RUBY_SO_NAME@</div><div class='del'>-EXEEXT = @EXEEXT@</div><div class='del'>-PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)</div><div class='del'>-RUBY = $(RUBY_INSTALL_NAME)</div><div class='del'>-MINIRUBY = @MINIRUBY@ $(MINIRUBYOPT)</div><div class='del'>-RUNRUBY = @RUNRUBY@ $(RUNRUBYOPT) --</div><div class='add'>+INSTALL = @INSTALL@</div><div class='add'>+INSTALL_PROGRAM = @INSTALL_PROGRAM@</div><div class='add'>+INSTALL_DATA = @INSTALL_DATA@</div><div class='add'>+MAKEINFO = makeinfo</div><div class='add'>+</div><div class='add'>+CFLAGS = -g</div><div class='add'>+LDFLAGS = @STATIC@ $(CFLAGS)</div><div class='add'>+LIBS = @LIBS@</div><div class='add'>+DEFS = @DEFS@</div><div class='add'>+</div><div class='add'>+prefix = /usr/local</div><div class='add'>+binprefix = </div><div class='add'>+exec_prefix = $(prefix)</div><div class='add'>+bindir = $(exec_prefix)/bin</div><div class='add'>+infodir = $(prefix)/info</div><div class='ctx'> </div><div class='ctx'> #### End of system configuration section. ####</div><div class='ctx'> </div><div class='del'>-MAJOR=	@MAJOR@</div><div class='del'>-MINOR=	@MINOR@</div><div class='del'>-TEENY=	@TEENY@</div><div class='del'>-</div><div class='del'>-LIBRUBY_A     = @LIBRUBY_A@</div><div class='del'>-LIBRUBY_SO    = @LIBRUBY_SO@</div><div class='del'>-LIBRUBY_ALIASES= @LIBRUBY_ALIASES@</div><div class='del'>-LIBRUBY	      = @LIBRUBY@</div><div class='del'>-LIBRUBYARG    = @LIBRUBYARG@</div><div class='del'>-LIBRUBYARG_STATIC = @LIBRUBYARG_STATIC@</div><div class='del'>-LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@</div><div class='del'>-</div><div class='del'>-PREP          = @PREP@</div><div class='del'>-ARCHFILE      = @ARCHFILE@</div><div class='del'>-SETUP         =</div><div class='del'>-EXTSTATIC     = @EXTSTATIC@</div><div class='del'>-</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='del'>-</div><div class='del'>-OBJEXT        = @OBJEXT@</div><div class='del'>-MANTYPE	      = @MANTYPE@</div><div class='del'>-</div><div class='del'>-INSTALLED_LIST= .installed.list</div><div class='del'>-#### End of variables</div><div class='del'>-</div><div class='del'>-all:</div><div class='del'>-</div><div class='del'>-.DEFAULT: all</div><div class='add'>+.c.o:</div><div class='add'>+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(DEFS) -I$(srcdir) -I$(srcdir)/lib $&lt;</div><div class='add'>+</div><div class='add'>+HDRS          = defines.h \</div><div class='add'>+		dln.h \</div><div class='add'>+		ident.h \</div><div class='add'>+		io.h \</div><div class='add'>+		node.h \</div><div class='add'>+		re.h \</div><div class='add'>+		regex.h \</div><div class='add'>+		ruby.h \</div><div class='add'>+		st.h \</div><div class='add'>+		version.h</div><div class='add'>+</div><div class='add'>+SRCS          = array.c \</div><div class='add'>+		bignum.c \</div><div class='add'>+		class.c \</div><div class='add'>+		compar.c \</div><div class='add'>+		dbm.c \</div><div class='add'>+		dict.c \</div><div class='add'>+		dir.c \</div><div class='add'>+		dln.c \</div><div class='add'>+		enum.c \</div><div class='add'>+		error.c \</div><div class='add'>+		etc.c \</div><div class='add'>+		eval.c \</div><div class='add'>+		file.c \</div><div class='add'>+		gc.c \</div><div class='add'>+		inits.c \</div><div class='add'>+		io.c \</div><div class='add'>+		math.c \</div><div class='add'>+		methods.c \</div><div class='add'>+		missing.c \</div><div class='add'>+		numeric.c \</div><div class='add'>+		object.c \</div><div class='add'>+		pack.c \</div><div class='add'>+		parse.y \</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'>+		regex.c \</div><div class='add'>+		ruby.c \</div><div class='add'>+		socket.c \</div><div class='add'>+		sprintf.c \</div><div class='add'>+		st.c \</div><div class='add'>+		string.c \</div><div class='add'>+		struct.c \</div><div class='add'>+		time.c \</div><div class='add'>+		variable.c \</div><div class='add'>+		version.c</div><div class='add'>+</div><div class='add'>+OBJS	      = array.o \</div><div class='add'>+		bignum.o \</div><div class='add'>+		class.o \</div><div class='add'>+		compar.o \</div><div class='add'>+		dbm.o \</div><div class='add'>+		dict.o \</div><div class='add'>+		dir.o \</div><div class='add'>+		dln.o \</div><div class='add'>+		enum.o \</div><div class='add'>+		error.o \</div><div class='add'>+		etc.o \</div><div class='add'>+		eval.o \</div><div class='add'>+		file.o \</div><div class='add'>+		gc.o \</div><div class='add'>+		inits.o \</div><div class='add'>+		io.o \</div><div class='add'>+		math.o \</div><div class='add'>+		methods.o \</div><div class='add'>+		missing.o \</div><div class='add'>+		numeric.o \</div><div class='add'>+		object.o \</div><div class='add'>+		pack.o \</div><div class='add'>+		parse.o \</div><div class='add'>+		process.o \</div><div class='add'>+		random.o \</div><div class='add'>+		range.o \</div><div class='add'>+		re.o \</div><div class='add'>+		regex.o \</div><div class='add'>+		ruby.o \</div><div class='add'>+		socket.o \</div><div class='add'>+		sprintf.o \</div><div class='add'>+		st.o \</div><div class='add'>+		string.o \</div><div class='add'>+		struct.o \</div><div class='add'>+		time.o \</div><div class='add'>+		variable.o \</div><div class='add'>+		version.o</div><div class='add'>+</div><div class='add'>+DISTFILES = README NEWS TODO THANKS COPYING INSTALL \</div><div class='add'>+ChangeLog Makefile.in configure.in \</div><div class='add'>+$(HDRS) $(SRCS) configure</div><div class='add'>+</div><div class='add'>+PROGRAM	      = ruby</div><div class='add'>+</div><div class='add'>+all:		$(PROGRAM)</div><div class='add'>+</div><div class='add'>+$(PROGRAM):     $(OBJS)</div><div class='add'>+		@rm -f $(PROGRAM)</div><div class='add'>+		$(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROGRAM)</div><div class='add'>+</div><div class='add'>+install: $(PROGMAM)</div><div class='add'>+	$(INSTALL_PROGRAM) $(PROGRAM) $(bindir)/$(PROGRAM)</div><div class='add'>+</div><div class='add'>+clean:;		@rm -f $(OBJS)</div><div class='add'>+</div><div class='add'>+realclean:;	@rm -f $(OBJS)</div><div class='add'>+		@rm -f core ruby *~</div><div class='add'>+</div><div class='add'>+dbm.o:dbm.c</div><div class='add'>+	$(CC) -c $(DBM) $(CFLAGS) $(CPPFLAGS) $(DEFS) -I$(srcdir) -I$(srcdir)/lib dbm.c</div><div class='ctx'> </div><div class='ctx'> # Prevent GNU make v3 from overflowing arg limit on SysV.</div><div class='ctx'> .NOEXPORT:</div><div class='del'>-</div><div class='del'>-miniruby$(EXEEXT):</div><div class='del'>-		@$(RM) $@</div><div class='del'>-		$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) $(OUTFLAG)$@</div><div class='del'>-</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'>-		@-$(PRE_LIBRUBY_UPDATE)</div><div class='del'>-		$(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) $(OUTFLAG)$@</div><div class='del'>-		@-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link if File.exist? link; \</div><div class='del'>-						  File.symlink "$(LIBRUBY_SO)", link}' \</div><div class='del'>-				$(LIBRUBY_ALIASES) || true</div><div class='del'>-</div><div class='del'>-fake.rb:	Makefile</div><div class='del'>-		@echo ' \</div><div class='del'>-		class Object; \</div><div class='del'>-		  CROSS_COMPILING = RUBY_PLATFORM; \</div><div class='del'>-		  remove_const :RUBY_PLATFORM; \</div><div class='del'>-		  remove_const :RUBY_VERSION; \</div><div class='del'>-		  RUBY_PLATFORM = "@arch@"; \</div><div class='del'>-		  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='del'>-		' &gt; $@</div><div class='del'>-</div><div class='del'>-Makefile:	$(srcdir)/Makefile.in</div><div class='del'>-</div><div class='del'>-$(MKFILES): config.status $(srcdir)/common.mk</div><div class='del'>-		MAKE=$(MAKE) $(SHELL) ./config.status</div><div class='del'>-		@{ \</div><div class='del'>-		    echo "all:; -@rm -f conftest.mk"; \</div><div class='del'>-		    echo "conftest.mk: .force; @echo AUTO_REMAKE"; \</div><div class='del'>-		    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='del'>-		{ echo "Makefile updated, restart."; exit 1; }</div><div class='del'>-</div><div class='del'>-config.status:	$(srcdir)/configure</div><div class='del'>-		MINIRUBY="$(MINIRUBY)" $(SHELL) ./config.status --recheck</div><div class='del'>-</div><div class='del'>-$(srcdir)/configure: $(srcdir)/configure.in</div><div class='del'>-		cd $(srcdir) &amp;&amp; $(AUTOCONF)</div><div class='del'>-</div><div class='del'>-lex.c: keywords</div><div class='del'>-	( gperf -C -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? &gt; $@.tmp &amp;&amp; mv $@.tmp $@ ) || \</div><div class='del'>-	if test -f $@; then \</div><div class='del'>-	  touch $@ &amp;&amp; echo $@ touched.; \</div><div class='del'>-	else \</div><div class='del'>-	  cp $(srcdir)/lex.c $@ &amp;&amp; echo $@ copied.; \</div><div class='del'>-	fi</div><div class='del'>-</div><div class='del'>-.y.c:</div><div class='del'>-	$(YACC) $&lt;</div><div class='del'>-	sed '/^#/s|y\.tab\.c|$@|' y.tab.c &gt; $@</div><div class='del'>-	rm -f y.tab.c</div><div class='del'>-</div><div class='del'>-.c.@OBJEXT@:</div><div class='del'>-	$(CC) $(CFLAGS) $(CPPFLAGS) -c $&lt;</div><div class='del'>-</div><div class='del'>-.s.@OBJEXT@:</div><div class='del'>-	$(AS) $(ASFLAGS) -o $@ $&lt;</div><div class='del'>-</div><div class='del'>-clean-local::</div><div class='del'>-	@$(RM) ext/extinit.c ext/extinit.$(OBJEXT)</div><div class='del'>-</div><div class='del'>-distclean-local::</div><div class='del'>-	@$(RM) ext/config.cache $(RBCONFIG)</div><div class='del'>-</div><div class='del'>-ext/extinit.$(OBJEXT): ext/extinit.c $(SETUP)</div><div class='del'>-	$(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(OUTFLAG)$@ -c ext/extinit.c</div><div class='del'>-</div><div class='del'>-update-rubyspec: </div><div class='del'>-	if [ -d $(srcdir)/rubyspec ]; then \</div><div class='del'>-	  cd $(srcdir)/rubyspec/mspec; \</div><div class='del'>-	  git pull; \</div><div class='del'>-	  cd ../spec/rubyspec; \</div><div class='del'>-	  git pull; \</div><div class='del'>-	else \</div><div class='del'>-	  git clone $(MSPEC_GIT_URL) $(srcdir)/rubyspec/mspec; \</div><div class='del'>-	  git clone $(RUBYSPEC_GIT_URL) $(srcdir)/rubyspec/spec/rubyspec; \</div><div class='del'>-	fi</div><div class='del'>-</div><div class='del'>-test-rubyspec:</div><div class='del'>-	@if [ ! -d $(srcdir)/rubyspec ]; then echo No rubyspec here.  make update-rubyspec first.; exit 1; fi</div><div class='del'>-	$(RUNRUBY) $(srcdir)/rubyspec/mspec/bin/mspec -r$(srcdir)/ext/purelib.rb $(srcdir)/rubyspec/spec/rubyspec/$(MAJOR).$(MINOR)</div><div class='del'>-</div><div class='add'>+###</div><div class='add'>+parse.o : parse.y ruby.h defines.h env.h ident.h node.h st.h regex.h </div><div class='add'>+###</div><div class='add'>+array.o : array.c ruby.h defines.h </div><div class='add'>+bignum.o : bignum.c ruby.h defines.h </div><div class='add'>+class.o : class.c ruby.h defines.h env.h node.h st.h methods.h </div><div class='add'>+compar.o : compar.c ruby.h defines.h </div><div class='add'>+dbm.o : dbm.c ruby.h defines.h </div><div class='add'>+dict.o : dict.c ruby.h defines.h st.h </div><div class='add'>+dir.o : dir.c ruby.h defines.h </div><div class='add'>+dln.o : dln.c defines.h dln.h </div><div class='add'>+enum.o : enum.c ruby.h defines.h </div><div class='add'>+error.o : error.c ruby.h defines.h env.h </div><div class='add'>+etc.o : etc.c ruby.h defines.h </div><div class='add'>+eval.o : eval.c ruby.h defines.h env.h node.h ident.h st.h </div><div class='add'>+file.o : file.c ruby.h defines.h io.h </div><div class='add'>+gc.o : gc.c ruby.h defines.h env.h st.h </div><div class='add'>+inits.o : inits.c ruby.h defines.h </div><div class='add'>+io.o : io.c ruby.h defines.h io.h </div><div class='add'>+math.o : math.c ruby.h defines.h </div><div class='add'>+methods.o : methods.c ruby.h defines.h ident.h env.h node.h methods.h </div><div class='add'>+missing.o : missing.c ruby.h defines.h missing/memmove.c missing/strerror.c \</div><div class='add'>+  missing/strtoul.c missing/strftime.c missing/strstr.c missing/getopt.h missing/getopt.c \</div><div class='add'>+  missing/getopt1.c missing/mkdir.c </div><div class='add'>+numeric.o : numeric.c ruby.h defines.h env.h </div><div class='add'>+object.o : object.c ruby.h defines.h env.h node.h st.h </div><div class='add'>+pack.o : pack.c ruby.h defines.h </div><div class='add'>+process.o : process.c ruby.h defines.h st.h </div><div class='add'>+random.o : random.c ruby.h defines.h </div><div class='add'>+range.o : range.c ruby.h defines.h </div><div class='add'>+re.o : re.c ruby.h defines.h re.h regex.h </div><div class='add'>+regex.o : regex.c regex.h </div><div class='add'>+ruby.o : ruby.c ruby.h defines.h re.h regex.h missing/getopt.h </div><div class='add'>+socket.o : socket.c ruby.h defines.h </div><div class='add'>+sprintf.o : sprintf.c ruby.h defines.h </div><div class='add'>+st.o : st.c st.h </div><div class='add'>+string.o : string.c ruby.h defines.h re.h regex.h </div><div class='add'>+struct.o : struct.c ruby.h defines.h env.h </div><div class='add'>+time.o : time.c ruby.h defines.h </div><div class='add'>+variable.o : variable.c ruby.h defines.h env.h node.h ident.h st.h </div><div class='add'>+version.o : version.c ruby.h defines.h version.h </div><div class='head'>diff --git a/NEWS b/NEWS<br/>deleted file mode 100644<br/>index 61373187e5..0000000000<br/>--- a/<a href='/ruby.git/tree/NEWS?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>NEWS</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,629 +0,0 @@</div><div class='del'>-= NEWS</div><div class='del'>-</div><div class='del'>-This document is a list of user visible feature changes made between</div><div class='del'>-releases except for bug fixes.</div><div class='del'>-</div><div class='del'>-Note that each entry is kept so brief that no reason behind or</div><div class='del'>-reference information is supplied with.  For a full list of changes</div><div class='del'>-with all sufficient information, see the ChangeLog file.</div><div class='del'>-</div><div class='del'>-== Changes since the 1.8.6 release</div><div class='del'>-</div><div class='del'>-=== Configuration changes</div><div class='del'>-</div><div class='del'>-* vendor_ruby directory</div><div class='del'>-</div><div class='del'>-  A new library directory named `vendor_ruby' is introduced in</div><div class='del'>-  addition to `site_ruby'.  The idea is to separate libraries</div><div class='del'>-  installed by the package system (`vendor') from manually (`site')</div><div class='del'>-  installed libraries preventing the former from getting overwritten</div><div class='del'>-  by the latter, while preserving the user option to override vendor</div><div class='del'>-  libraries with site libraries. (`site_ruby' takes precedence over</div><div class='del'>-  `vendor_ruby')</div><div class='del'>-</div><div class='del'>-  If you are a package maintainer, make each library package configure</div><div class='del'>-  the library passing the `--vendor' option to `extconf.rb' so that</div><div class='del'>-  the library files will get installed under `vendor_ruby'.</div><div class='del'>-</div><div class='del'>-  You can change the directory locations using configure options such</div><div class='del'>-  as `--with-sitedir=DIR' and `--with-vendordir=DIR'.</div><div class='del'>-</div><div class='del'>-=== Global constants</div><div class='del'>-</div><div class='del'>-* new constants</div><div class='del'>-</div><div class='del'>-  * RUBY_COPYRIGHT</div><div class='del'>-  * RUBY_DESCRIPTION</div><div class='del'>-</div><div class='del'>-=== Library updates (outstanding ones only)</div><div class='del'>-</div><div class='del'>-* new library</div><div class='del'>-</div><div class='del'>-  * securerandom</div><div class='del'>-</div><div class='del'>-* builtin classes</div><div class='del'>-</div><div class='del'>-  * Array#flatten</div><div class='del'>-  * Array#flatten!</div><div class='del'>-</div><div class='del'>-    Takes an optional argument that determines the level of recursion</div><div class='del'>-    to flatten.</div><div class='del'>-</div><div class='del'>-  * Array#eql?</div><div class='del'>-  * Array#hash</div><div class='del'>-  * Array#==</div><div class='del'>-  * Array#&lt;=&gt;</div><div class='del'>-</div><div class='del'>-    Handle recursive data properly.</div><div class='del'>-</div><div class='del'>-  * Array#index</div><div class='del'>-  * Array#rindex</div><div class='del'>-</div><div class='del'>-    Take a block instead of an argument.</div><div class='del'>-</div><div class='del'>-  * Array#collect!</div><div class='del'>-  * Array#map!</div><div class='del'>-  * Array#each</div><div class='del'>-  * Array#each_index</div><div class='del'>-  * Array#reverse_each</div><div class='del'>-  * Array#reject</div><div class='del'>-  * Array#reject!</div><div class='del'>-  * Array#delete_if</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-    Note that #map and #collect still return an array unlike Ruby 1.9</div><div class='del'>-    to keep compatibility.</div><div class='del'>-</div><div class='del'>-  * Array#pop</div><div class='del'>-  * Array#shift</div><div class='del'>-</div><div class='del'>-    Take an optional argument specifying the number of elements to</div><div class='del'>-    remove.</div><div class='del'>-</div><div class='del'>-  * Array#choice</div><div class='del'>-  * Array#combination</div><div class='del'>-  * Array#cycle</div><div class='del'>-  * Array#drop</div><div class='del'>-  * Array#drop_while</div><div class='del'>-  * Array#permutation</div><div class='del'>-  * Array#product</div><div class='del'>-  * Array#shuffle</div><div class='del'>-  * Array#shuffle!</div><div class='del'>-  * Array#take,</div><div class='del'>-  * Array#take_while</div><div class='del'>-</div><div class='del'>-    New methods.</div><div class='del'>-</div><div class='del'>-  * Binding#eval</div><div class='del'>-</div><div class='del'>-    New method.</div><div class='del'>-</div><div class='del'>-  * Dir#each</div><div class='del'>-  * Dir#foreach</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * Enumerable::Enumerator</div><div class='del'>-</div><div class='del'>-    New class for various enumeration defined by the enumerator library.</div><div class='del'>-</div><div class='del'>-  * Enumerable#each_slice</div><div class='del'>-  * Enumerable#each_cons</div><div class='del'>-  * Object#to_enum</div><div class='del'>-  * Object#enum_for</div><div class='del'>-</div><div class='del'>-    New methods for various enumeration defined by the enumerator library.</div><div class='del'>-</div><div class='del'>-  * Enumerable#count</div><div class='del'>-  * Enumerable#cycle</div><div class='del'>-  * Enumerable#drop</div><div class='del'>-  * Enumerable#drop_while</div><div class='del'>-  * Enumerable#find_index</div><div class='del'>-  * Enumerable#first</div><div class='del'>-  * Enumerable#group_by</div><div class='del'>-  * Enumerable#max_by</div><div class='del'>-  * Enumerable#min_by</div><div class='del'>-  * Enumerable#minmax</div><div class='del'>-  * Enumerable#minmax_by</div><div class='del'>-  * Enumerable#none?</div><div class='del'>-  * Enumerable#one?</div><div class='del'>-  * Enumerable#take</div><div class='del'>-  * Enumerable#take_while</div><div class='del'>-</div><div class='del'>-    New methods.</div><div class='del'>-</div><div class='del'>-  * Enumerable#find</div><div class='del'>-  * Enumerable#find_all</div><div class='del'>-  * Enumerable#partition</div><div class='del'>-  * Enumerable#reject</div><div class='del'>-  * Enumerable#select</div><div class='del'>-  * Enumerable#sort_by</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-    Note that #map and #collect still return an array unlike Ruby 1.9</div><div class='del'>-    to keep compatibility.</div><div class='del'>-</div><div class='del'>-  * Enumerable#inject</div><div class='del'>-</div><div class='del'>-    Accepts a binary operator instead of a block.</div><div class='del'>-</div><div class='del'>-  * Enumerable#reduce</div><div class='del'>-</div><div class='del'>-    New alias to #inject.</div><div class='del'>-</div><div class='del'>-  * Hash#eql?</div><div class='del'>-  * Hash#hash</div><div class='del'>-  * Hash#==</div><div class='del'>-</div><div class='del'>-    Handle recursive data properly.</div><div class='del'>-</div><div class='del'>-  * Hash#delete_if</div><div class='del'>-  * Hash#each</div><div class='del'>-  * Hash#each_key</div><div class='del'>-  * Hash#each_pair</div><div class='del'>-  * Hash#each_value</div><div class='del'>-  * Hash#reject!</div><div class='del'>-  * Hash#select</div><div class='del'>-  * ENV.delete_if</div><div class='del'>-  * ENV.each</div><div class='del'>-  * ENV.each_key</div><div class='del'>-  * ENV.each_pair</div><div class='del'>-  * ENV.each_value</div><div class='del'>-  * ENV.reject!</div><div class='del'>-  * ENV.select</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * GC.stress</div><div class='del'>-  * GC.stress=</div><div class='del'>-</div><div class='del'>-    New methods.</div><div class='del'>-</div><div class='del'>-  * Integer#ord</div><div class='del'>-  * Integer#odd?</div><div class='del'>-  * Integer#even?</div><div class='del'>-  * Integer#pred</div><div class='del'>-</div><div class='del'>-    New methods.</div><div class='del'>-</div><div class='del'>-  * Integer#downto</div><div class='del'>-  * Integer#times</div><div class='del'>-  * Integer#upto</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * IO#each</div><div class='del'>-  * IO#each_line</div><div class='del'>-  * IO#each_byte</div><div class='del'>-  * IO.foreach</div><div class='del'>-  * ARGF.each</div><div class='del'>-  * ARGF.each_line</div><div class='del'>-  * ARGF.each_byte</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * IO#bytes</div><div class='del'>-  * IO#chars</div><div class='del'>-  * IO#each_char</div><div class='del'>-  * IO#getbyte</div><div class='del'>-  * IO#lines</div><div class='del'>-  * IO#readbyte</div><div class='del'>-  * ARGF.bytes</div><div class='del'>-  * ARGF.chars</div><div class='del'>-  * ARGF.each_char</div><div class='del'>-  * ARGF.getbyte</div><div class='del'>-  * ARGF.lines</div><div class='del'>-  * ARGF.readbyte</div><div class='del'>-</div><div class='del'>-    New methods. </div><div class='del'>-</div><div class='del'>-  * Method#name</div><div class='del'>-  * Method#owner</div><div class='del'>-  * Method#receiver</div><div class='del'>-  * UnboundMethod#name</div><div class='del'>-  * UnboundMethod#owner</div><div class='del'>-</div><div class='del'>-    New methods.</div><div class='del'>-</div><div class='del'>-  * Module#class_exec</div><div class='del'>-  * Module#module_exec</div><div class='del'>-</div><div class='del'>-    New methods.</div><div class='del'>-</div><div class='del'>-  * Numeric#step</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * Object#instance_exec</div><div class='del'>-  * Object#tap</div><div class='del'>-</div><div class='del'>-    New methods.</div><div class='del'>-</div><div class='del'>-  * ObjectSpace.each_object</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * Process.exec implemented.</div><div class='del'>-</div><div class='del'>-  * Range#each</div><div class='del'>-  * Range#step</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * Regexp.union accepts an array of patterns.</div><div class='del'>-</div><div class='del'>-  * String#bytesize</div><div class='del'>-</div><div class='del'>-    New method, returning the size in bytes. (alias length and size)</div><div class='del'>-</div><div class='del'>-  * String#chars</div><div class='del'>-  * String#each_char</div><div class='del'>-  * String#partition</div><div class='del'>-  * String#rpartition</div><div class='del'>-  * String#start_with?</div><div class='del'>-  * String#end_with?</div><div class='del'>-</div><div class='del'>-    New methods.  These are $KCODE aware unlike #index, #rindex and</div><div class='del'>-    #include?.</div><div class='del'>-</div><div class='del'>-  * String#each_byte</div><div class='del'>-  * String#each</div><div class='del'>-  * String#each_line</div><div class='del'>-  * String#gsub(pattern)</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * String#upto</div><div class='del'>-</div><div class='del'>-    An optional second argument is added to specify if the last value</div><div class='del'>-    should be included.</div><div class='del'>-</div><div class='del'>-  * StopIteration</div><div class='del'>-</div><div class='del'>-    New exception class that causes Kernel#loop to stop iteration when</div><div class='del'>-    raised.</div><div class='del'>-</div><div class='del'>-  * Struct#each</div><div class='del'>-  * Struct#each_pair</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-  * Symbol#to_proc</div><div class='del'>-</div><div class='del'>-    New method.</div><div class='del'>-</div><div class='del'>-  * __method__</div><div class='del'>-</div><div class='del'>-    New global function that returns the name of the current method as</div><div class='del'>-    a Symbol.</div><div class='del'>-</div><div class='del'>-* enumerator</div><div class='del'>-</div><div class='del'>-  * Enumerator is now a built-in module.  The #next and #rewind</div><div class='del'>-    methods are implemented using the "generator" library.  Use with</div><div class='del'>-    care and be aware of the performance loss.</div><div class='del'>-</div><div class='del'>-* ipaddr</div><div class='del'>-</div><div class='del'>-  * New methods</div><div class='del'>-    * IPAddr#&lt;=&gt;</div><div class='del'>-    * IPAddr#succ</div><div class='del'>-</div><div class='del'>-      IPAddr objects are now comparable and enumerable having these</div><div class='del'>-      methods.  This also means that it is possible to have a Range</div><div class='del'>-      object between two IPAddr objects.</div><div class='del'>-</div><div class='del'>-    * IPAddr#to_range</div><div class='del'>-</div><div class='del'>-      A new method to create a Range object for the (network) address.</div><div class='del'>-</div><div class='del'>-  * Type coercion support</div><div class='del'>-    * IPAddr#&amp;</div><div class='del'>-    * IPAddr#|</div><div class='del'>-    * IPAddr#==</div><div class='del'>-    * IPAddr#include?</div><div class='del'>-</div><div class='del'>-      These methods now accept a string or an integer instead of an</div><div class='del'>-      IPAddr object as the argument.</div><div class='del'>-</div><div class='del'>-* net/smtp</div><div class='del'>-</div><div class='del'>-  * Support SSL/TLS.</div><div class='del'>-</div><div class='del'>-* openssl</div><div class='del'>-</div><div class='del'>-  * New classes</div><div class='del'>-    * OpenSSL::PKey::EC</div><div class='del'>-    * OpenSSL::PKey::EC::Group</div><div class='del'>-    * OpenSSL::PKey::EC::Point</div><div class='del'>-    * OpenSSL::PKey::PKCS5</div><div class='del'>-    * OpenSSL::SSL::Session</div><div class='del'>-</div><div class='del'>-  * Documentation!</div><div class='del'>-</div><div class='del'>-  * Various new methods (see documentation).</div><div class='del'>-</div><div class='del'>-  * Remove redundant module namespace in Cipher, Digest, PKCS7, PKCS12.</div><div class='del'>-    Compatibility classes are provided which will be removed in Ruby 1.9.</div><div class='del'>-</div><div class='del'>-* shellwords</div><div class='del'>-</div><div class='del'>-  * Add methods for escaping shell-unsafe characters:</div><div class='del'>-    * Shellwords.join</div><div class='del'>-    * Shellwords.escape</div><div class='del'>-    * Array#shelljoin</div><div class='del'>-    * String#shellescape</div><div class='del'>-</div><div class='del'>-  * Add shorthand methods:</div><div class='del'>-    * Shellwords.split (alias shellwords)</div><div class='del'>-    * String#shellsplit</div><div class='del'>-</div><div class='del'>-* stringio</div><div class='del'>-</div><div class='del'>-  * StringIO#getbyte</div><div class='del'>-  * StringIO#readbyte</div><div class='del'>-</div><div class='del'>-    New methods. (aliases for compatibility with 1.9)</div><div class='del'>-</div><div class='del'>-  * StringIO#each_char</div><div class='del'>-  * StringIO#chars</div><div class='del'>-</div><div class='del'>-    New methods.</div><div class='del'>-</div><div class='del'>-  * StringIO#each</div><div class='del'>-  * StringIO#each_line</div><div class='del'>-  * StringIO#each_byte</div><div class='del'>-</div><div class='del'>-    Return an enumerator if no block is given.</div><div class='del'>-</div><div class='del'>-* tempfile</div><div class='del'>-</div><div class='del'>-  * Tempfile.open and Tempfile.new now accept a suffix for the</div><div class='del'>-    temporary file to be created.  To specify a suffix, pass an array</div><div class='del'>-    of [basename, suffix] as the first argument.</div><div class='del'>-</div><div class='del'>-      Tempfile.open(['image', 'jpg']) { |tempfile| ... }</div><div class='del'>-</div><div class='del'>-* tmpdir</div><div class='del'>-</div><div class='del'>-  * New method:</div><div class='del'>-</div><div class='del'>-    * Dir.mktmpdir</div><div class='del'>-</div><div class='del'>-* uri</div><div class='del'>-</div><div class='del'>-  * added LDAPS scheme.</div><div class='del'>-  * Change for RFC3986:</div><div class='del'>-    * FTP</div><div class='del'>-      * URI('ftp://example.com/foo').path #=&gt; 'foo'</div><div class='del'>-      * URI('ftp://example.com/%2Ffoo').path #=&gt; '/foo'</div><div class='del'>-      * URI::FTP.build([nil, 'example.com', nil, '/foo', 'i').to_s #=&gt; 'ftp://example.com/%2Ffoo;type=i'</div><div class='del'>-    * URI merge</div><div class='del'>-      * URI('http://a/b/c/d;p?q').merge('?y') == URI('http://a/b/c/d;p?y')</div><div class='del'>-      * URI('http://a/b/c/d;p?q').merge('/./g') == URI('http://a/g')</div><div class='del'>-      * URI('http://a/b/c/d;p?q').merge('/../g') == URI('http://a/g')</div><div class='del'>-      * URI('http://a/b/c/d;p?q').merge('../../../g') == URI('http://a/g')</div><div class='del'>-      * URI('http://a/b/c/d;p?q').merge('../../../../g') == URI('http://a/g')</div><div class='del'>-</div><div class='del'>-* rss</div><div class='del'>-</div><div class='del'>-  * 0.1.6 -&gt; 0.2.4</div><div class='del'>-</div><div class='del'>-  * Fix image module URI</div><div class='del'>-</div><div class='del'>-  * Atom support</div><div class='del'>-</div><div class='del'>-  * ITunes module support</div><div class='del'>-</div><div class='del'>-  * Slash module support</div><div class='del'>-</div><div class='del'>-  * content:encoded with RSS 2.0 support</div><div class='del'>-</div><div class='del'>-=== Interpreter Implementation</div><div class='del'>-</div><div class='del'>-* passing a block to a Proc [experimental]</div><div class='del'>-</div><div class='del'>-  This implementation in current shape is known to be buggy/broken,</div><div class='del'>-  especially with nested block invocation.  Take this as an</div><div class='del'>-  experimental feature.</div><div class='del'>-</div><div class='del'>-* stack trace</div><div class='del'>-</div><div class='del'>-  On non-SystemStackError exception, full stack trace is shown.</div><div class='del'>-</div><div class='del'>-=== Compatibility issues (excluding feature bug fixes)</div><div class='del'>-</div><div class='del'>-* String#slice! had some unintentional bugs and they have been fixed</div><div class='del'>-  because either they disagreed with documentation or their respective</div><div class='del'>-  behavior of #slice.  Unfortunately, this causes some</div><div class='del'>-  incompatibilities in the following (somewhat rare) cases.</div><div class='del'>-</div><div class='del'>-  * #slice! no longer expands the array when an out-of-boundary value</div><div class='del'>-    is given.</div><div class='del'>-</div><div class='del'>-      # Ruby 1.8.6</div><div class='del'>-      a = [1,2]</div><div class='del'>-      a.slice!(4,0)   #=&gt; nil</div><div class='del'>-      a               #=&gt; [1,2,nil,nil]</div><div class='del'>-</div><div class='del'>-      # Ruby 1.8.7</div><div class='del'>-      a = [1,2]</div><div class='del'>-      a.slice!(4,0)   #=&gt; nil</div><div class='del'>-      a               #=&gt; [1,2]</div><div class='del'>-</div><div class='del'>-  * #slice! no longer raises an exception but returns nil when a</div><div class='del'>-    negative length or out-of-boundary negative position is given.</div><div class='del'>-</div><div class='del'>-      # Ruby 1.8.6</div><div class='del'>-      a = [1,2]</div><div class='del'>-      a.slice!(1,-1)  #=&gt; (raises IndexError)</div><div class='del'>-      a.slice!(-5,1)  #=&gt; (raises IndexError)</div><div class='del'>-</div><div class='del'>-      # Ruby 1.8.7</div><div class='del'>-      a = [1,2]</div><div class='del'>-      a.slice!(1,-1)  #=&gt; nil</div><div class='del'>-      a.slice!(-5,1)  #=&gt; nil</div><div class='del'>-</div><div class='del'>-* String#to_i, String#hex and String#oct no longer accept a sequence</div><div class='del'>-  of underscores (`__') as part of a number.</div><div class='del'>-</div><div class='del'>-    # Ruby 1.8.6</div><div class='del'>-    '1__0'.to_i     #=&gt; 10</div><div class='del'>-    '1__0'.to_i(2)  #=&gt; 2  # 0b10</div><div class='del'>-    '1__0'.oct      #=&gt; 8  # 010</div><div class='del'>-    '1__0'.hex      #=&gt; 16 # 0x10</div><div class='del'>-</div><div class='del'>-    # Ruby 1.8.7</div><div class='del'>-    '1__0'.to_i     #=&gt; 1</div><div class='del'>-    '1__0'.to_i(2)  #=&gt; 1</div><div class='del'>-    '1__0'.oct      #=&gt; 1</div><div class='del'>-    '1__0'.hex      #=&gt; 1</div><div class='del'>-</div><div class='del'>-  The old behavior was inconsistent with Ruby syntax and considered as</div><div class='del'>-  a bug.</div><div class='del'>-</div><div class='del'>-* date</div><div class='del'>-</div><div class='del'>-  * Date.parse</div><div class='del'>-</div><div class='del'>-    '##.##.##' (where each '#' is a digit) is now taken as 'YY.MM.DD'</div><div class='del'>-    instead of 'MM.DD.YY'.  While the change may confuse you, you can</div><div class='del'>-    always use Date.strptime() when you know what you are dealing</div><div class='del'>-    with.</div><div class='del'>-</div><div class='del'>-* stringio</div><div class='del'>-</div><div class='del'>-  * StringIO#each_byte</div><div class='del'>-</div><div class='del'>-    The return value changed from nil to self.  This is what the</div><div class='del'>-    document says and the same as each_line() does.</div><div class='del'>-</div><div class='del'>-* tempfile</div><div class='del'>-</div><div class='del'>-  * The file name format has changed.  No dots are included by default</div><div class='del'>-    in temporary file names any more.  See above for how to specify a</div><div class='del'>-    suffix.</div><div class='del'>-</div><div class='del'>-* uri</div><div class='del'>-</div><div class='del'>-  * See above for details.</div><div class='del'>-</div><div class='del'>-== Changes since the 1.8.5 release</div><div class='del'>-</div><div class='del'>-=== New platforms/build tools support</div><div class='del'>-</div><div class='del'>-* IA64 HP-UX</div><div class='del'>-</div><div class='del'>-* Visual C++ 8 SP1</div><div class='del'>-</div><div class='del'>-* autoconf 2.6x</div><div class='del'>-</div><div class='del'>-=== Global constants</div><div class='del'>-</div><div class='del'>-* RUBY_PATCHLEVEL</div><div class='del'>-</div><div class='del'>-  New constant since 1.8.5-p1.</div><div class='del'>-</div><div class='del'>-=== Library updates (outstanding ones only)</div><div class='del'>-</div><div class='del'>-* builtin classes</div><div class='del'>-</div><div class='del'>-  * New method: Kernel#instance_variable_defined?</div><div class='del'>-</div><div class='del'>-  * New method: Module#class_variable_defined?</div><div class='del'>-</div><div class='del'>-  * New feature: Dir::glob() can now take an array of glob patterns.</div><div class='del'>-</div><div class='del'>-* date</div><div class='del'>-</div><div class='del'>-  * Updated based on date2 4.0.3.</div><div class='del'>-</div><div class='del'>-* digest</div><div class='del'>-</div><div class='del'>-  * New internal APIs for C and Ruby.</div><div class='del'>-</div><div class='del'>-  * Support for autoloading.</div><div class='del'>-</div><div class='del'>-      require 'digest'</div><div class='del'>-</div><div class='del'>-      # autoloads digest/md5</div><div class='del'>-      md = Digest::MD5.digest("string")</div><div class='del'>-</div><div class='del'>-  * New digest class methods: file</div><div class='del'>-</div><div class='del'>-  * New digest instance methods: clone, reset, new, inspect,</div><div class='del'>-    digest_length (alias size or length), block_length()</div><div class='del'>-</div><div class='del'>-  * New library: digest/bubblebabble</div><div class='del'>-</div><div class='del'>-  * New function: Digest(name)</div><div class='del'>-</div><div class='del'>-* fileutils</div><div class='del'>-</div><div class='del'>-  * New option for FileUtils.cp_r(): :remove_destination</div><div class='del'>-</div><div class='del'>-* nkf</div><div class='del'>-</div><div class='del'>-  * Updated based on nkf as of 2007-01-28.</div><div class='del'>-</div><div class='del'>-* thread</div><div class='del'>-</div><div class='del'>-  * Replaced with much faster mutex implementation in C.  The former</div><div class='del'>-    implementation, which is slow but considered to be stable, is</div><div class='del'>-    available with a configure option `--disable-fastthread'.</div><div class='del'>-</div><div class='del'>-* tk</div><div class='del'>-</div><div class='del'>-  * Updated Tile extension support based on Tile 0.7.8.</div><div class='del'>-</div><div class='del'>-  * Support --without-X11 configure option for non-X11 versions of</div><div class='del'>-    Tcl/Tk (e.g. Tcl/Tk Aqua).</div><div class='del'>-</div><div class='del'>-  * New sample script: irbtkw.rbw -- IRB on Ruby/Tk. It has no trouble</div><div class='del'>-    about STDIN blocking on Windows.</div><div class='del'>-</div><div class='del'>-* webrick</div><div class='del'>-</div><div class='del'>-  * New method: WEBrick::Cookie.parse_set_cookies()</div><div class='del'>-</div><div class='del'>-=== Compatibility issues (excluding feature bug fixes)</div><div class='del'>-</div><div class='del'>-* builtin classes</div><div class='del'>-</div><div class='del'>-  * String#intern now raises SecurityError when $SAFE level is greater</div><div class='del'>-    than zero.</div><div class='del'>-</div><div class='del'>-* date</div><div class='del'>-</div><div class='del'>-  * Time#to_date and Time#to_datetime are added as private methods.</div><div class='del'>-    They cause name conflict error in ActiveSupport 1.4.1 and prior,</div><div class='del'>-    which comes with Rails 1.2.2 and prior.  Updating ActiveSupport</div><div class='del'>-    and/or Rails to the latest versions fixes the problem.</div><div class='del'>-</div><div class='del'>-* digest</div><div class='del'>-</div><div class='del'>-  * The constructor does no longer take an initial string to feed.</div><div class='del'>-    The following examples show how to migrate:</div><div class='del'>-</div><div class='del'>-      # Before</div><div class='del'>-      md = Digest::MD5.new("string")</div><div class='del'>-      # After (works with any version)</div><div class='del'>-      md = Digest::MD5.new.update("string")</div><div class='del'>-        </div><div class='del'>-      # Before</div><div class='del'>-      hd = Digest::MD5.new("string").hexdigest</div><div class='del'>-      # After (works with any version)</div><div class='del'>-      hd = Digest::MD5.hexdigest("string")</div><div class='del'>-</div><div class='del'>-* fileutils</div><div class='del'>-</div><div class='del'>-  * A minor implementation change breaks Rake &lt;=0.7.1.</div><div class='del'>-    Updating Rake to 0.7.2 or higher fixes the problem.</div><div class='del'>-</div><div class='del'>-* tk</div><div class='del'>-</div><div class='del'>-  * Tk::X_Scrollable (Y_Scrollable) is renamed to Tk::XScrollable</div><div class='del'>-    (YScrollable). Tk::X_Scrollable (Y_Scrollable) is still available,</div><div class='del'>-    but it is an alias name.</div><div class='head'>diff --git a/README b/README<br/>index 1b79781367..3ca523bdde 100644<br/>--- a/<a href='/ruby.git/tree/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>README</a><br/>+++ b/<a href='/ruby.git/tree/README?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>README</a></div><div class='hunk'>@@ -1,118 +1,51 @@</div><div class='del'>-* What's Ruby</div><div class='add'>+.\" README -  -*- Text -*- created at: Wed Aug  3 11:57:36 JST 1994</div><div class='ctx'> </div><div class='del'>-Ruby is the interpreted scripting language for quick and</div><div class='del'>-easy object-oriented programming.  It has many features to</div><div class='del'>-process text files and to do system management tasks (as in</div><div class='del'>-Perl).  It is simple, straight-forward, and extensible.</div><div class='add'>+¥³¥ó¥Ñ¥¤¥ë¡¦¥¤¥ó¥¹¥È¡¼¥ë</div><div class='ctx'> </div><div class='add'>+  1. configure¤ò¼Â¹Ô¤·¤ÆMakefile¤òÀ¸À®¤¹¤ë.</div><div class='add'>+  2. (É¬Í×¤Ê¤é¤Ð)defines.h¤òÊÔ½¸¤¹¤ë.</div><div class='add'>+  3. make¤ò¼Â¹Ô¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë</div><div class='add'>+  4. make install</div><div class='ctx'> </div><div class='del'>-* Features of Ruby</div><div class='add'>+  ¤â¤·, ¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¤Ï¥¨¥é¡¼¤Î¥í¥°¤È¥Þ</div><div class='add'>+  ¥·¥ó, OS¤Î¼ïÎà¤ò´Þ¤à¤Ç¤­¤ë¤À¤±¾Ü¤·¤¤¥ì¥Ý¡¼¥È¤òºî¼Ô¤ËÁ÷¤Ã¤Æ¤¤</div><div class='add'>+  ¤¿¤À¤­¤¿¤¤.</div><div class='ctx'> </div><div class='del'>-  + Simple Syntax</div><div class='del'>-  + *Normal* Object-Oriented features(ex. class, method calls)</div><div class='del'>-  + *Advanced* Object-Oriented features(ex. Mix-in, Singleton-method)</div><div class='del'>-  + Operator Overloading</div><div class='del'>-  + Exception Handling</div><div class='del'>-  + Iterators and Closures</div><div class='del'>-  + Garbage Collection</div><div class='del'>-  + Dynamic Loading of Object files(on some architecture)</div><div class='del'>-  + Highly Portable(works on many UNIX machines, and on DOS,</div><div class='del'>-    Windows, Mac, BeOS etc.)</div><div class='add'>+µ¡Ç½ÄÉ²Ã</div><div class='ctx'> </div><div class='add'>+  C¥³¡¼¥É¤ò½ñ¤¯¤³¤È¤Ë¤è¤Ã¤Æ, ´ÊÃ±¤Ëruby¤Ëµ¡Ç½¤òÄÉ²Ã¤Ç¤­¤ë. </div><div class='add'>+  ¤½¤Î¤ª¤ª¤Þ¤«¤Ê¼ê½ç¤Ï°Ê²¼¤ÎÄÌ¤ê¤Ç¤¢¤ë.</div><div class='ctx'> </div><div class='del'>-* How to get Ruby</div><div class='add'>+  * ´Ø¿ôÅª¥á¥½¥Ã¥É¤òÄÉ²Ã¤¹¤ë¾ì¹ç</div><div class='ctx'> </div><div class='del'>-The Ruby distribution files can be found in the following FTP site:</div><div class='add'>+    (1) C¤Ç´Ø¿ô¤ò½ñ¤¯</div><div class='add'>+    (2) rb_define_method()¤Ç¥«¡¼¥Í¥ë¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤È¤·¤Æ´Ø</div><div class='add'>+	¿ô¤òruby¤ËÅÐÏ¿¤¹¤ë´Ø¿ô¤ò½ñ¤¯</div><div class='add'>+    (3) init.c¤òÊÔ½¸¤·¤Æ, ÅÐÏ¿¤¹¤ë´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹</div><div class='ctx'> </div><div class='del'>-  ftp://ftp.ruby-lang.org/pub/ruby/</div><div class='add'>+  * ¥¯¥é¥¹¤òÄÉ²Ã¤¹¤ë¾ì¹ç</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'>+    (1) ¥¯¥é¥¹¤òÀß·×¤¹¤ë</div><div class='add'>+    (2) ¥á¥½¥Ã¥É¤òC¤Çµ­½Ò¤¹¤ë</div><div class='add'>+    (3) rb_define_class()¤Ç¥¯¥é¥¹¤òÀ¸À®¤¹¤ë¥³¡¼¥É¤ò½ñ¤¯</div><div class='add'>+    (4) rb_define_method()¤Ç¥á¥½¥Ã¥É¤òÅÐÏ¿¤¹¤ë¥³¡¼¥É¤ò½ñ¤¯</div><div class='add'>+    (5) init.c¤òÊÔ½¸¤·¤Æ, ½é´ü²½¤¹¤ë´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹</div><div class='ctx'> </div><div class='del'>-  $ svn co http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8/</div><div class='add'>+  ¾Ü¤·¤¯¤ÏC-IF¤ò»²¾È.</div><div class='ctx'> </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='add'>+°Ü¿¢</div><div class='ctx'> </div><div class='del'>-  $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby</div><div class='add'>+  UNIX¤Ç¤¢¤ì¤Ðconfigure¤¬¤Û¤È¤ó¤É¤Îº¹°Û¤òµÛ¼ý¤·¤Æ¤¯¤ì¤ë¤Ï¤º</div><div class='add'>+  ¤À¤¬, »×¤ï¤Ì¸«Íî¤È¤·¤¬¤¢¤Ã¤¿¾ì¹ç(¤¢¤ë¤Ë°ã¤¤¤Ê¤¤), ºî¼Ô¤Ë¥ì</div><div class='add'>+  ¥Ý¡¼¥È¤¹¤ì¤Ð, ²ò·è¤Ç¤­¤ë¤«¤âÃÎ¤ì¤Ê¤¤.</div><div class='ctx'> </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='add'>+  ¥¢¡¼¥¯¥Æ¥¯¥Á¥ã¤Ë¤â¤Ã¤È¤â°ÍÂ¸¤¹¤ë¤Î¤ÏGCÉô¤Ç¤¢¤ë. ruby¤ÎGC¤Ï</div><div class='add'>+  ÂÐ¾Ý¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤¬setjmp()¤Ë¤è¤Ã¤Æ, Á´¤Æ¤Î¥ì¥¸¥¹¥¿¤ò </div><div class='add'>+  jmp_buf¤Ë³ÊÇ¼¤¹¤ë¤³¤È¤È, jmp_buf¤È¥¹¥¿¥Ã¥¯¤¬32bit¥¢¥é¥¤¥ó</div><div class='add'>+  ¥á¥ó¥È¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò²¾Äê¤·¤Æ¤¤¤ë. Á°¼Ô¤¬¿¿¼Â¤Ç¤Ê¤¤¾ì¹ç¤Î</div><div class='add'>+  °Ü¿¢¤Ïº¤Æñ¤ò¶Ë¤á¤ë¤À¤í¤¦. ¸å¼Ô¤Ï³ä¤È´ÊÃ±¤Ë²ò·è¤Ç¤­¤ë. gc.c</div><div class='add'>+  ¤Î¥¹¥¿¥Ã¥¯¤ò¥Þ¡¼¥¯¤¹¤ëÉôÊ¬¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤Î¥Ð¥¤¥È¿ô¤À¤±¤º</div><div class='add'>+  ¤é¤·¤Æ¥Þ¡¼¥¯¤¹¤ë¥³¡¼¥É¤òÄÉ²Ã¤¹¤ë¤À¤±¤ÇºÑ¤à.</div><div class='ctx'> </div><div class='del'>-  $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-* Ruby home-page</div><div class='del'>-</div><div class='del'>-The URL of the Ruby home-page is:</div><div class='del'>-</div><div class='del'>-   http://www.ruby-lang.org/</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-* Mailing list</div><div class='del'>-</div><div class='del'>-There is a mailing list to talk about Ruby.</div><div class='del'>-To subscribe this list, please send the following phrase</div><div class='del'>-</div><div class='del'>-	subscribe YourFirstName YourFamilyName</div><div class='del'>-e.g.</div><div class='del'>-        subscribe Joseph Smith</div><div class='del'>-</div><div class='del'>-in the mail body (not subject) to the address &lt;ruby-talk-ctl@ruby-lang.org&gt;.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-* How to compile and install</div><div class='del'>-</div><div class='del'>-This is what you need to do to compile and install Ruby:</div><div class='del'>-</div><div class='del'>-  1. If ./configure does not exist or is older than configure.in,</div><div class='del'>-     run autoconf to (re)generate configure.</div><div class='del'>-</div><div class='del'>-  2. Run ./configure, which will generate config.h and Makefile.</div><div class='del'>-</div><div class='del'>-     Some C compiler flags may be added by default depending on your</div><div class='del'>-     environment.  Specify optflags=.. and warnflags=.. as necessary</div><div class='del'>-     to override them.</div><div class='del'>-</div><div class='del'>-  3. Edit defines.h if you need.  Usually this step will not be needed.</div><div class='del'>-</div><div class='del'>-  4. Remove comment mark(#) before the module names from ext/Setup (or</div><div class='del'>-     add module names if not present), if you want to link modules</div><div class='del'>-     statically.</div><div class='del'>-</div><div class='del'>-     If you don't want to compile non static extension modules</div><div class='del'>-     (probably on architectures which does not allow dynamic loading),</div><div class='del'>-     remove comment mark from the line "#option nodynamic" in</div><div class='del'>-     ext/Setup.</div><div class='del'>-</div><div class='del'>-  5. Run make.</div><div class='del'>-</div><div class='del'>-  6. Optionally, run 'make test' to check whether the compiled Ruby</div><div class='del'>-     interpreter works well.  If you see the message "test succeeded",</div><div class='del'>-     your ruby works as it should (hopefully).</div><div class='del'>-</div><div class='del'>-  7. Run 'make install'</div><div class='del'>-</div><div class='del'>-     You may have to be a super user to install ruby.</div><div class='del'>-</div><div class='del'>-If you fail to compile ruby, please send the detailed error report with</div><div class='del'>-the error log and machine/OS type, to help others.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-* Copying</div><div class='del'>-</div><div class='del'>-See the file COPYING.</div><div class='del'>-</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'>-  matz@netlab.jp</div><div class='del'>-</div><div class='del'>--------------------------------------------------------</div><div class='del'>-created at: Thu Aug  3 11:57:36 JST 1995</div><div class='del'>-Local variables:</div><div class='del'>-mode: indented-text</div><div class='del'>-end:</div><div class='add'>+  sparc°Ê³°¤Î¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¤ò»ý¤ÄCPU¤Ç¤Ï, ¥ì¥¸¥¹¥¿¥¦¥£¥ó</div><div class='add'>+  ¥É¥¦¤ò¥Õ¥é¥Ã¥·¥å¤¹¤ë¥³¡¼¥É¤òÄÉ²Ã¤¹¤ëÉ¬Í×¤¬¤¢¤ë¤«¤âÃÎ¤ì¤Ê¤¤.</div><div class='head'>diff --git a/README.EXT b/README.EXT<br/>deleted file mode 100644<br/>index 637b19d25b..0000000000<br/>--- a/<a href='/ruby.git/tree/README.EXT?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>README.EXT</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1164 +0,0 @@</div><div class='del'>-.\" README.EXT -  -*- Text -*- created at: Mon Aug  7 16:45:54 JST 1995</div><div class='del'>-</div><div class='del'>-This document explains how to make extension libraries for Ruby.</div><div class='del'>-</div><div class='del'>-1. Basic knowledge</div><div class='del'>-</div><div class='del'>-In C, variables have types and data do not have types.  In contrast,</div><div class='del'>-Ruby variables do not have a static type, and data themselves have</div><div class='del'>-types, so data will need to be converted between the languages.</div><div class='del'>-</div><div class='del'>-Data in Ruby are represented by the C type `VALUE'.  Each VALUE data</div><div class='del'>-has its data-type.</div><div class='del'>-</div><div class='del'>-To retrieve C data from a VALUE, you need to:</div><div class='del'>-</div><div class='del'>- (1) Identify the VALUE's data type</div><div class='del'>- (2) Convert the VALUE into C data</div><div class='del'>-</div><div class='del'>-Converting to the wrong data type may cause serious problems.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-1.1 Data-types</div><div class='del'>-</div><div class='del'>-The Ruby interpreter has the following data types:</div><div class='del'>-</div><div class='del'>-	T_NIL		nil</div><div class='del'>-	T_OBJECT	ordinary object</div><div class='del'>-	T_CLASS		class</div><div class='del'>-	T_MODULE	module</div><div class='del'>-	T_FLOAT		floating point number</div><div class='del'>-	T_STRING	string</div><div class='del'>-	T_REGEXP	regular expression</div><div class='del'>-	T_ARRAY		array</div><div class='del'>-	T_FIXNUM	Fixnum(31bit integer)</div><div class='del'>-	T_HASH		associative array</div><div class='del'>-	T_STRUCT	(Ruby) structure</div><div class='del'>-	T_BIGNUM	multi precision integer</div><div class='del'>-	T_FILE		IO</div><div class='del'>-	T_TRUE		true</div><div class='del'>-	T_FALSE		false</div><div class='del'>-	T_DATA		data</div><div class='del'>-	T_SYMBOL        symbol</div><div class='del'>-</div><div class='del'>-In addition, there are several other types used internally:</div><div class='del'>-</div><div class='del'>-	T_ICLASS</div><div class='del'>-	T_MATCH</div><div class='del'>-	T_UNDEF</div><div class='del'>-	T_VARMAP</div><div class='del'>-	T_SCOPE</div><div class='del'>-	T_NODE</div><div class='del'>-</div><div class='del'>-Most of the types are represented by C structures.</div><div class='del'>-</div><div class='del'>-1.2 Check Data Type of the VALUE</div><div class='del'>-</div><div class='del'>-The macro TYPE() defined in ruby.h shows the data type of the VALUE.</div><div class='del'>-TYPE() returns the constant number T_XXXX described above.  To handle</div><div class='del'>-data types, your code will look something like this:</div><div class='del'>-</div><div class='del'>-  switch (TYPE(obj)) {</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-      /* process Fixnum */</div><div class='del'>-      break;</div><div class='del'>-    case T_STRING:</div><div class='del'>-      /* process String */</div><div class='del'>-      break;</div><div class='del'>-    case T_ARRAY:</div><div class='del'>-      /* process Array */</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      /* raise exception */</div><div class='del'>-      rb_raise(rb_eTypeError, "not valid value");</div><div class='del'>-      break;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-There is the data-type check function</div><div class='del'>-</div><div class='del'>-  void Check_Type(VALUE value, int type)</div><div class='del'>-</div><div class='del'>-which raises an exception if the VALUE does not have the type specified.</div><div class='del'>-</div><div class='del'>-There are also faster check macros for fixnums and nil.</div><div class='del'>-</div><div class='del'>-  FIXNUM_P(obj)</div><div class='del'>-  NIL_P(obj)</div><div class='del'>-</div><div class='del'>-1.3 Convert VALUE into C data</div><div class='del'>-</div><div class='del'>-The data for type T_NIL, T_FALSE, T_TRUE are nil, true, false</div><div class='del'>-respectively.  They are singletons for the data type.</div><div class='del'>-</div><div class='del'>-The T_FIXNUM data is a 31bit length fixed integer (63bit length on</div><div class='del'>-some machines), which can be converted to a C integer by using the</div><div class='del'>-FIX2INT() macro.  There is also NUM2INT() which converts any Ruby</div><div class='del'>-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 the same way.</div><div class='del'>-</div><div class='del'>-In version 1.7 or later it is recommended that you use the new macros</div><div class='del'>-StringValue() and StringValuePtr() to get a char* from a VALUE.</div><div class='del'>-StringValue(var) replaces var's value with the result of "var.to_str()".</div><div class='del'>-StringValuePtr(var) does same replacement and returns char*</div><div class='del'>-representation of var.  These macros will skip the replacement if var is</div><div class='del'>-a String.  Notice that the macros take only the lvalue as their</div><div class='del'>-argument, to change the value of var in place.</div><div class='del'>-</div><div class='del'>-In version 1.6 or earlier, STR2CSTR() was used to do the same thing</div><div class='del'>-but now it is deprecated in version 1.7, because STR2CSTR() has a risk</div><div class='del'>-of a dangling pointer problem in the to_str() impliclit conversion.</div><div class='del'>-</div><div class='del'>-Other data types have corresponding C structures, e.g. struct RArray</div><div class='del'>-for T_ARRAY etc. The VALUE of the type which has the corresponding structure</div><div class='del'>-can be cast to retrieve the pointer to the struct.  The casting macro</div><div class='del'>-will be of the form RXXXX for each data type; for instance, RARRAY(obj). </div><div class='del'>-See "ruby.h".</div><div class='del'>-</div><div class='del'>-For example, `RSTRING(str)-&gt;len' is the way to get the size of the</div><div class='del'>-Ruby String object.  The allocated region can be accessed by</div><div class='del'>-`RSTRING(str)-&gt;ptr'.  For arrays, use `RARRAY(ary)-&gt;len' and</div><div class='del'>-`RARRAY(ary)-&gt;ptr' respectively.</div><div class='del'>-</div><div class='del'>-Notice: Do not change the value of the structure directly, unless you</div><div class='del'>-are responsible for the result.  This ends up being the cause of interesting</div><div class='del'>-bugs.</div><div class='del'>-</div><div class='del'>-1.4 Convert C data into VALUE</div><div class='del'>-</div><div class='del'>-To convert C data to Ruby values:</div><div class='del'>-</div><div class='del'>-  * FIXNUM</div><div class='del'>-</div><div class='del'>-    left shift 1 bit, and turn on LSB.</div><div class='del'>-</div><div class='del'>-  * Other pointer values</div><div class='del'>-</div><div class='del'>-    cast to VALUE.</div><div class='del'>-</div><div class='del'>-You can determine whether a VALUE is pointer or not by checking its LSB.  </div><div class='del'>-</div><div class='del'>-Notice Ruby does not allow arbitrary pointer values to be a VALUE.  They</div><div class='del'>-should be pointers to the structures which Ruby knows about.  The known</div><div class='del'>-structures are defined in &lt;ruby.h&gt;.</div><div class='del'>-</div><div class='del'>-To convert C numbers to Ruby values, use these macros.</div><div class='del'>-</div><div class='del'>-  INT2FIX()	for integers within 31bits.</div><div class='del'>-  INT2NUM()	for arbitrary sized integer.</div><div class='del'>-</div><div class='del'>-INT2NUM() converts an integer into a Bignum if it is out of the FIXNUM</div><div class='del'>-range, but is a bit slower.</div><div class='del'>-</div><div class='del'>-1.5 Manipulating Ruby data</div><div class='del'>-</div><div class='del'>-As I already mentioned, it is not recommended to modify an object's internal</div><div class='del'>-structure.  To manipulate objects, use the functions supplied by the Ruby</div><div class='del'>-interpreter. Some (not all) of the useful functions are listed below:</div><div class='del'>-</div><div class='del'>- String functions</div><div class='del'>-</div><div class='del'>-  rb_str_new(const char *ptr, long len)</div><div class='del'>-</div><div class='del'>-    Creates a new Ruby string.</div><div class='del'>-</div><div class='del'>-  rb_str_new2(const char *ptr)</div><div class='del'>-</div><div class='del'>-    Creates a new Ruby string from a C string.  This is equivalent to</div><div class='del'>-    rb_str_new(ptr, strlen(ptr)).</div><div class='del'>-</div><div class='del'>-  rb_tainted_str_new(const char *ptr, long len)</div><div class='del'>-</div><div class='del'>-    Creates a new tainted Ruby string.  Strings from external data</div><div class='del'>-    sources should be tainted.</div><div class='del'>-</div><div class='del'>-  rb_tainted_str_new2(const char *ptr)</div><div class='del'>-</div><div class='del'>-    Creates a new tainted Ruby string from a C string.</div><div class='del'>-</div><div class='del'>-  rb_str_cat(VALUE str, const char *ptr, long len)</div><div class='del'>-</div><div class='del'>-    Appends len bytes of data from ptr to the Ruby string.</div><div class='del'>-</div><div class='del'>- Array functions</div><div class='del'>-</div><div class='del'>-  rb_ary_new()</div><div class='del'>-</div><div class='del'>-    Creates an array with no elements.</div><div class='del'>-</div><div class='del'>-  rb_ary_new2(long len)</div><div class='del'>-</div><div class='del'>-    Creates an array with no elements, allocating internal buffer</div><div class='del'>-    for len elements.</div><div class='del'>-</div><div class='del'>-  rb_ary_new3(long n, ...)</div><div class='del'>-</div><div class='del'>-    Creates an n-element array from the arguments.</div><div class='del'>-</div><div class='del'>-  rb_ary_new4(long n, VALUE *elts)</div><div class='del'>-</div><div class='del'>-    Creates an n-element array from a C array.</div><div class='del'>-</div><div class='del'>-  rb_ary_push(VALUE ary, VALUE val)</div><div class='del'>-  rb_ary_pop(VALUE ary)</div><div class='del'>-  rb_ary_shift(VALUE ary)</div><div class='del'>-  rb_ary_unshift(VALUE ary, VALUE val)</div><div class='del'>-</div><div class='del'>-    Array operations.  The first argument to each functions must be an </div><div class='del'>-    array.  They may dump core if other types are given.</div><div class='del'>-</div><div class='del'>-2. Extending Ruby with C</div><div class='del'>-</div><div class='del'>-2.1 Addding new features to Ruby</div><div class='del'>-</div><div class='del'>-You can add new features (classes, methods, etc.) to the Ruby</div><div class='del'>-interpreter.  Ruby provides APIs for defining the following things:</div><div class='del'>-</div><div class='del'>- * Classes, Modules</div><div class='del'>- * Methods, Singleton Methods</div><div class='del'>- * Constants</div><div class='del'>-</div><div class='del'>-2.1.1 Class/module definition</div><div class='del'>-</div><div class='del'>-To define a class or module, use the functions below:</div><div class='del'>-</div><div class='del'>-  VALUE rb_define_class(const char *name, VALUE super)</div><div class='del'>-  VALUE rb_define_module(const char *name)</div><div class='del'>-</div><div class='del'>-These functions return the newly created class or module.  You may</div><div class='del'>-want to save this reference into a variable to use later.</div><div class='del'>-</div><div class='del'>-To define nested classes or modules, use the functions below:</div><div class='del'>-</div><div class='del'>-  VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)</div><div class='del'>-  VALUE rb_define_module_under(VALUE outer, const char *name)</div><div class='del'>-</div><div class='del'>-2.1.2 Method/singleton method definition</div><div class='del'>-</div><div class='del'>-To define methods or singleton methods, use these functions:</div><div class='del'>-</div><div class='del'>-  void rb_define_method(VALUE klass, const char *name, </div><div class='del'>-		        VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-  void rb_define_singleton_method(VALUE object, const char *name, </div><div class='del'>-			          VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-The `argc' represents the number of the arguments to the C function,</div><div class='del'>-which must be less than 17.  But I doubt you'll need that many.</div><div class='del'>-</div><div class='del'>-If `argc' is negative, it specifies the calling sequence, not number of</div><div class='del'>-the arguments.  </div><div class='del'>-</div><div class='del'>-If argc is -1, the function will be called as:</div><div class='del'>-</div><div class='del'>-  VALUE func(int argc, VALUE *argv, VALUE obj)</div><div class='del'>-</div><div class='del'>-where argc is the actual number of arguments, argv is the C array of</div><div class='del'>-the arguments, and obj is the receiver.</div><div class='del'>-</div><div class='del'>-If argc is -2, the arguments are passed in a Ruby array. The function</div><div class='del'>-will be called like:</div><div class='del'>-</div><div class='del'>-  VALUE func(VALUE obj, VALUE args)</div><div class='del'>-</div><div class='del'>-where obj is the receiver, and args is the Ruby array containing</div><div class='del'>-actual arguments.</div><div class='del'>-</div><div class='del'>-There are two more functions to define methods.  One is to define</div><div class='del'>-private methods:</div><div class='del'>-</div><div class='del'>-  void rb_define_private_method(VALUE klass, const char *name, </div><div class='del'>-			        VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-The other is to define module functions, which are private AND singleton</div><div class='del'>-methods of the module.  For example, sqrt is the module function</div><div class='del'>-defined in Math module.  It can be called in the following way:</div><div class='del'>-</div><div class='del'>-  Math.sqrt(4)</div><div class='del'>-</div><div class='del'>-or</div><div class='del'>-</div><div class='del'>-  include Math</div><div class='del'>-  sqrt(4)</div><div class='del'>-</div><div class='del'>-To define module functions, use:</div><div class='del'>-</div><div class='del'>-  void rb_define_module_function(VALUE module, const char *name, </div><div class='del'>-				 VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-Oh, in addition, function-like methods, which are private methods defined</div><div class='del'>-in the Kernel module, can be defined using:</div><div class='del'>-</div><div class='del'>-  void rb_define_global_function(const char *name, VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-To define an alias for the method,</div><div class='del'>-</div><div class='del'>-  void rb_define_alias(VALUE module, const char* new, const char* old);</div><div class='del'>-</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='del'>-2.1.3 Constant definition</div><div class='del'>-</div><div class='del'>-We have 2 functions to define constants:</div><div class='del'>-</div><div class='del'>-  void rb_define_const(VALUE klass, const char *name, VALUE val)</div><div class='del'>-  void rb_define_global_const(const char *name, VALUE val)</div><div class='del'>-</div><div class='del'>-The former is to define a constant under specified class/module.  The</div><div class='del'>-latter is to define a global constant.</div><div class='del'>-</div><div class='del'>-2.2 Use Ruby features from C</div><div class='del'>-</div><div class='del'>-There are several ways to invoke Ruby's features from C code.</div><div class='del'>-</div><div class='del'>-2.2.1 Evaluate Ruby Programs in a String</div><div class='del'>-</div><div class='del'>-The easiest way to use Ruby's functionality from a C program is to</div><div class='del'>-evaluate the string as Ruby program.  This function will do the job:</div><div class='del'>-</div><div class='del'>-  VALUE rb_eval_string(const char *str)</div><div class='del'>-</div><div class='del'>-Evaluation is done under the current context, thus current local variables</div><div class='del'>-of the innermost method (which is defined by Ruby) can be accessed.</div><div class='del'>-</div><div class='del'>-2.2.2 ID or Symbol</div><div class='del'>-</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='del'>-</div><div class='del'>- :Identifier</div><div class='del'>-</div><div class='del'>-You can get the ID value from a string within C code by using</div><div class='del'>-</div><div class='del'>-  rb_intern(const char *name)</div><div class='del'>-</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='del'>-2.2.3 Invoke Ruby method from C</div><div class='del'>-</div><div class='del'>-To invoke methods directly, you can use the function below</div><div class='del'>-</div><div class='del'>-  VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)</div><div class='del'>-</div><div class='del'>-This function invokes a method on the recv, with the method name</div><div class='del'>-specified by the symbol mid.</div><div class='del'>-</div><div class='del'>-2.2.4 Accessing the variables and constants</div><div class='del'>-</div><div class='del'>-You can access class variables and instance variables using access</div><div class='del'>-functions.  Also, global variables can be shared between both environments.</div><div class='del'>-There's no way to access Ruby's local variables.</div><div class='del'>-</div><div class='del'>-The functions to access/modify instance variables are below:</div><div class='del'>-</div><div class='del'>-  VALUE rb_ivar_get(VALUE obj, ID id)</div><div class='del'>-  VALUE rb_ivar_set(VALUE obj, ID id, VALUE val)</div><div class='del'>-</div><div class='del'>-id must be the symbol, which can be retrieved by rb_intern().</div><div class='del'>-</div><div class='del'>-To access the constants of the class/module:</div><div class='del'>-</div><div class='del'>-  VALUE rb_const_get(VALUE obj, ID id)</div><div class='del'>-</div><div class='del'>-See 2.1.3 for defining new constant.</div><div class='del'>-</div><div class='del'>-3. Information sharing between Ruby and C</div><div class='del'>-</div><div class='del'>-3.1 Ruby constants that C can be accessed from C</div><div class='del'>-</div><div class='del'>-The following Ruby constants can be referred from C.</div><div class='del'>-</div><div class='del'>-  Qtrue</div><div class='del'>-  Qfalse</div><div class='del'>-</div><div class='del'>-Boolean values.  Qfalse is false in C also (i.e. 0).</div><div class='del'>-</div><div class='del'>-  Qnil</div><div class='del'>-</div><div class='del'>-Ruby nil in C scope.</div><div class='del'>-</div><div class='del'>-3.2 Global variables shared between C and Ruby</div><div class='del'>-</div><div class='del'>-Information can be shared between the two environments using shared global</div><div class='del'>-variables.  To define them, you can use functions listed below:</div><div class='del'>-</div><div class='del'>-  void rb_define_variable(const char *name, VALUE *var)</div><div class='del'>-</div><div class='del'>-This function defines the variable which is shared by both environments.</div><div class='del'>-The value of the global variable pointed to by `var' can be accessed</div><div class='del'>-through Ruby's global variable named `name'.</div><div class='del'>-</div><div class='del'>-You can define read-only (from Ruby, of course) variables using the</div><div class='del'>-function below.</div><div class='del'>-</div><div class='del'>-  void rb_define_readonly_variable(const char *name, VALUE *var)</div><div class='del'>-</div><div class='del'>-You can defined hooked variables.  The accessor functions (getter and</div><div class='del'>-setter) are called on access to the hooked variables.</div><div class='del'>-</div><div class='del'>-  void rb_define_hooked_variable(constchar *name, VALUE *var,</div><div class='del'>-				 VALUE (*getter)(), void (*setter)())</div><div class='del'>-</div><div class='del'>-If you need to supply either setter or getter, just supply 0 for the</div><div class='del'>-hook you don't need.  If both hooks are 0, rb_define_hooked_variable()</div><div class='del'>-works just like rb_define_variable().</div><div class='del'>-</div><div class='del'>-  void rb_define_virtual_variable(const char *name,</div><div class='del'>-				  VALUE (*getter)(), void (*setter)())</div><div class='del'>-</div><div class='del'>-This function defines a Ruby global variable without a corresponding C</div><div class='del'>-variable.  The value of the variable will be set/get only by hooks.</div><div class='del'>-</div><div class='del'>-The prototypes of the getter and setter functions are as follows:</div><div class='del'>-</div><div class='del'>-  (*getter)(ID id, void *data, struct global_entry* entry);</div><div class='del'>-  (*setter)(VALUE val, ID id, void *data, struct global_entry* entry);</div><div class='del'>-</div><div class='del'>-3.3 Encapsulate C data into a Ruby object</div><div class='del'>-</div><div class='del'>-To wrap and objectify a C pointer as a Ruby object (so called</div><div class='del'>-DATA), use Data_Wrap_Struct().</div><div class='del'>-</div><div class='del'>-  Data_Wrap_Struct(klass, mark, free, ptr)</div><div class='del'>-</div><div class='del'>-Data_Wrap_Struct() returns a created DATA object.  The klass argument</div><div class='del'>-is the class for the DATA object.  The mark argument is the function</div><div class='del'>-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='del'>-</div><div class='del'>-You can allocate and wrap the structure in one step.</div><div class='del'>-</div><div class='del'>-  Data_Make_Struct(klass, type, mark, free, sval)</div><div class='del'>-</div><div class='del'>-This macro returns an allocated Data object, wrapping the pointer to</div><div class='del'>-the structure, which is also allocated.  This macro works like:</div><div class='del'>-</div><div class='del'>-  (sval = ALLOC(type), Data_Wrap_Struct(klass, mark, free, sval))</div><div class='del'>-</div><div class='del'>-Arguments klass, mark, and free work like their counterparts in</div><div class='del'>-Data_Wrap_Struct().  A pointer to the allocated structure will be</div><div class='del'>-assigned to sval, which should be a pointer of the type specified.</div><div class='del'>-</div><div class='del'>-To retrieve the C pointer from the Data object, use the macro</div><div class='del'>-Data_Get_Struct().</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(obj, type, sval)</div><div class='del'>-</div><div class='del'>-A pointer to the structure will be assigned to the variable sval.</div><div class='del'>-</div><div class='del'>-See the example below for details. </div><div class='del'>-</div><div class='del'>-4. Example - Creating dbm extension</div><div class='del'>-</div><div class='del'>-OK, here's the example of making an extension library.  This is the</div><div class='del'>-extension to access DBMs.  The full source is included in the ext/</div><div class='del'>-directory in the Ruby's source tree.</div><div class='del'>-</div><div class='del'>-(1) make the directory</div><div class='del'>-</div><div class='del'>-  % mkdir ext/dbm</div><div class='del'>-</div><div class='del'>-Make a directory for the extension library under ext directory.</div><div class='del'>-</div><div class='del'>-(2) design the library</div><div class='del'>-</div><div class='del'>-You need to design the library features, before making it.</div><div class='del'>-</div><div class='del'>-(3) write C code.</div><div class='del'>-</div><div class='del'>-You need to write C code for your extension library.  If your library</div><div class='del'>-has only one source file, choosing ``LIBRARY.c'' as a file name is</div><div class='del'>-preferred.  On the other hand, in case your library has multiple source</div><div class='del'>-files, avoid choosing ``LIBRARY.c'' for a file name.  It may conflict</div><div class='del'>-with an intermediate file ``LIBRARY.o'' on some platforms.</div><div class='del'>-</div><div class='del'>-Ruby will execute the initializing function named ``Init_LIBRARY'' in</div><div class='del'>-the library.  For example, ``Init_dbm()'' will be executed when loading</div><div class='del'>-the library.</div><div class='del'>-</div><div class='del'>-Here's the example of an initializing function.</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-Init_dbm()</div><div class='del'>-{</div><div class='del'>-    /* define DBM class */</div><div class='del'>-    cDBM = rb_define_class("DBM", rb_cObject);</div><div class='del'>-    /* DBM includes Enumerate module */</div><div class='del'>-    rb_include_module(cDBM, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    /* DBM has class method open(): arguments are received as C array */</div><div class='del'>-    rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);</div><div class='del'>-</div><div class='del'>-    /* DBM instance method close(): no args */</div><div class='del'>-    rb_define_method(cDBM, "close", fdbm_close, 0);</div><div class='del'>-    /* DBM instance method []: 1 argument */</div><div class='del'>-    rb_define_method(cDBM, "[]", fdbm_fetch, 1);</div><div class='del'>-		:</div><div class='del'>-</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='del'>-}</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-The dbm extension wraps the dbm struct in the C environment using </div><div class='del'>-Data_Make_Struct.</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-struct dbmdata {</div><div class='del'>-    int  di_size;</div><div class='del'>-    DBM *di_dbm;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp);</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-This code wraps the dbmdata structure into a Ruby object.  We avoid wrapping</div><div class='del'>-DBM* directly, because we want to cache size information.</div><div class='del'>-</div><div class='del'>-To retrieve the dbmdata structure from a Ruby object, we define the</div><div class='del'>-following macro:</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-#define GetDBM(obj, dbmp) {\</div><div class='del'>-    Data_Get_Struct(obj, struct dbmdata, dbmp);\</div><div class='del'>-    if (dbmp-&gt;di_dbm == 0) closed_dbm();\</div><div class='del'>-}</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-This sort of complicated macro does the retrieving and close checking for</div><div class='del'>-the DBM.</div><div class='del'>-</div><div class='del'>-There are three kinds of way to receive method arguments.  First,</div><div class='del'>-methods with a fixed number of arguments receive arguments like this:</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_delete(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-	:</div><div class='del'>-}</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-The first argument of the C function is the self, the rest are the</div><div class='del'>-arguments to the method.</div><div class='del'>-</div><div class='del'>-Second, methods with an arbitrary number of arguments receive</div><div class='del'>-arguments like this:</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-	:</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;file, &amp;vmode) == 1) {</div><div class='del'>-	mode = 0666;		/* default value */</div><div class='del'>-    }</div><div class='del'>-	:</div><div class='del'>-}</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-The first argument is the number of method arguments, the second</div><div class='del'>-argument is the C array of the method arguments, and the third</div><div class='del'>-argument is the receiver of the method.</div><div class='del'>-</div><div class='del'>-You can use the function rb_scan_args() to check and retrieve the</div><div class='del'>-arguments.  For example, "11" means that the method requires at least one</div><div class='del'>-argument, and at most receives two arguments.</div><div class='del'>-</div><div class='del'>-Methods with an arbitrary number of arguments can receive arguments</div><div class='del'>-by Ruby's array, like this:</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_indexes(obj, args)</div><div class='del'>-    VALUE obj, args;</div><div class='del'>-{</div><div class='del'>-	:</div><div class='del'>-}</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-The first argument is the receiver, the second one is the Ruby array</div><div class='del'>-which contains the arguments to the method.</div><div class='del'>-</div><div class='del'>-** Notice</div><div class='del'>-</div><div class='del'>-GC should know about global variables which refer to Ruby's objects, but</div><div class='del'>-are not exported to the Ruby world.  You need to protect them by</div><div class='del'>-</div><div class='del'>-  void rb_global_variable(VALUE *var)</div><div class='del'>-</div><div class='del'>-(4) prepare extconf.rb</div><div class='del'>-</div><div class='del'>-If the file named extconf.rb exists, it will be executed to generate</div><div class='del'>-Makefile.</div><div class='del'>-</div><div class='del'>-extconf.rb is the file for checking compilation conditions etc.  You</div><div class='del'>-need to put</div><div class='del'>-</div><div class='del'>-  require 'mkmf'</div><div class='del'>-</div><div class='del'>-at the top of the file.  You can use the functions below to check</div><div class='del'>-various conditions.</div><div class='del'>-</div><div class='del'>-  have_library(lib, func): check whether library containing function exists.</div><div class='del'>-  have_func(func, header): check whether function exists</div><div class='del'>-  have_header(header): check whether header file exists</div><div class='del'>-  create_makefile(target): generate Makefile</div><div class='del'>-</div><div class='del'>-The value of the variables below will affect the Makefile.</div><div class='del'>-</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='del'>-  $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'>-Normally, the object files list is automatically generated by searching</div><div class='del'>-source files, but you must define them explicitly if any sources will</div><div class='del'>-be generated while building.</div><div class='del'>-</div><div class='del'>-If a compilation condition is not fulfilled, you should not call</div><div class='del'>-``create_makefile''.  The Makefile will not be generated, compilation will</div><div class='del'>-not be done.</div><div class='del'>-</div><div class='del'>-(5) prepare depend (optional)</div><div class='del'>-</div><div class='del'>-If the file named depend exists, Makefile will include that file to</div><div class='del'>-check dependencies.  You can make this file by invoking</div><div class='del'>-</div><div class='del'>-  % gcc -MM *.c &gt; depend</div><div class='del'>-</div><div class='del'>-It's harmless.  Prepare it.</div><div class='del'>-</div><div class='del'>-(6) generate Makefile</div><div class='del'>-</div><div class='del'>-Try generating the Makefile by:</div><div class='del'>-</div><div class='del'>-  ruby extconf.rb</div><div class='del'>-</div><div class='del'>-If the library should be installed under vendor_ruby directory</div><div class='del'>-instead of site_ruby directory, use --vendor option as follows.</div><div class='del'>-</div><div class='del'>-  ruby extconf.rb --vendor</div><div class='del'>-</div><div class='del'>-You don't need this step if you put the extension library under the ext</div><div class='del'>-directory of the ruby source tree.  In that case, compilation of the</div><div class='del'>-interpreter will do this step for you.</div><div class='del'>-</div><div class='del'>-(7) make</div><div class='del'>-</div><div class='del'>-Type</div><div class='del'>-</div><div class='del'>-  make</div><div class='del'>-</div><div class='del'>-to compile your extension.  You don't need this step either if you have</div><div class='del'>-put the extension library under the ext directory of the ruby source tree.</div><div class='del'>-</div><div class='del'>-(8) debug</div><div class='del'>-</div><div class='del'>-You may need to rb_debug the extension.  Extensions can be linked</div><div class='del'>-statically by adding the directory name in the ext/Setup file so that</div><div class='del'>-you can inspect the extension with the debugger.</div><div class='del'>-</div><div class='del'>-(9) done, now you have the extension library</div><div class='del'>-</div><div class='del'>-You can do anything you want with your library.  The author of Ruby</div><div class='del'>-will not claim any restrictions on your code depending on the Ruby API.</div><div class='del'>-Feel free to use, modify, distribute or sell your program.</div><div class='del'>-</div><div class='del'>-Appendix A. Ruby source files overview</div><div class='del'>-</div><div class='del'>-ruby language core</div><div class='del'>-</div><div class='del'>-  class.c</div><div class='del'>-  error.c</div><div class='del'>-  eval.c</div><div class='del'>-  gc.c</div><div class='del'>-  object.c</div><div class='del'>-  parse.y</div><div class='del'>-  variable.c</div><div class='del'>-</div><div class='del'>-utility functions</div><div class='del'>-</div><div class='del'>-  dln.c</div><div class='del'>-  regex.c</div><div class='del'>-  st.c</div><div class='del'>-  util.c</div><div class='del'>-</div><div class='del'>-ruby interpreter implementation</div><div class='del'>-</div><div class='del'>-  dmyext.c</div><div class='del'>-  inits.c</div><div class='del'>-  main.c</div><div class='del'>-  ruby.c</div><div class='del'>-  version.c</div><div class='del'>-</div><div class='del'>-class library</div><div class='del'>-</div><div class='del'>-  array.c</div><div class='del'>-  bignum.c</div><div class='del'>-  compar.c</div><div class='del'>-  dir.c</div><div class='del'>-  enum.c</div><div class='del'>-  file.c</div><div class='del'>-  hash.c</div><div class='del'>-  io.c</div><div class='del'>-  marshal.c</div><div class='del'>-  math.c</div><div class='del'>-  numeric.c</div><div class='del'>-  pack.c</div><div class='del'>-  prec.c</div><div class='del'>-  process.c</div><div class='del'>-  random.c</div><div class='del'>-  range.c</div><div class='del'>-  re.c</div><div class='del'>-  signal.c</div><div class='del'>-  sprintf.c</div><div class='del'>-  string.c</div><div class='del'>-  struct.c</div><div class='del'>-  time.c</div><div class='del'>-</div><div class='del'>-Appendix B. Ruby extension API reference</div><div class='del'>-</div><div class='del'>-** Types</div><div class='del'>-</div><div class='del'>- VALUE</div><div class='del'>-</div><div class='del'>-The type for the Ruby object.  Actual structures are defined in ruby.h,</div><div class='del'>-such as struct RString, etc.  To refer the values in structures, use</div><div class='del'>-casting macros like RSTRING(obj).</div><div class='del'>-</div><div class='del'>-** Variables and constants</div><div class='del'>-</div><div class='del'>- Qnil</div><div class='del'>-</div><div class='del'>-const: nil object</div><div class='del'>-</div><div class='del'>- Qtrue</div><div class='del'>-</div><div class='del'>-const: true object(default true value)</div><div class='del'>-</div><div class='del'>- Qfalse</div><div class='del'>-</div><div class='del'>-const: false object</div><div class='del'>-</div><div class='del'>-** C pointer wrapping</div><div class='del'>-</div><div class='del'>- Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval)</div><div class='del'>-</div><div class='del'>-Wrap a C pointer into a Ruby object.  If object has references to other</div><div class='del'>-Ruby objects, they should be marked by using the mark function during</div><div class='del'>-the GC process.  Otherwise, mark should be 0.  When this object is no</div><div class='del'>-longer referred by anywhere, the pointer will be discarded by free</div><div class='del'>-function.</div><div class='del'>-</div><div class='del'>- Data_Make_Struct(klass, type, mark, free, sval)</div><div class='del'>-</div><div class='del'>-This macro allocates memory using malloc(), assigns it to the variable</div><div class='del'>-sval, and returns the DATA encapsulating the pointer to memory region.</div><div class='del'>-</div><div class='del'>- Data_Get_Struct(data, type, sval)</div><div class='del'>-</div><div class='del'>-This macro retrieves the pointer value from DATA, and assigns it to</div><div class='del'>-the variable sval. </div><div class='del'>-</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='del'>-** defining class/module</div><div class='del'>-</div><div class='del'>- VALUE rb_define_class(const char *name, VALUE super)</div><div class='del'>-</div><div class='del'>-Defines a new Ruby class as a subclass of super.</div><div class='del'>-</div><div class='del'>- VALUE rb_define_class_under(VALUE module, const char *name, VALUE super)</div><div class='del'>-</div><div class='del'>-Creates a new Ruby class as a subclass of super, under the module's</div><div class='del'>-namespace.</div><div class='del'>-</div><div class='del'>- VALUE rb_define_module(const char *name)</div><div class='del'>-</div><div class='del'>-Defines a new Ruby module.</div><div class='del'>-</div><div class='del'>- VALUE rb_define_module_under(VALUE module, const char *name)</div><div class='del'>-</div><div class='del'>-Defines a new Ruby module under the module's namespace.</div><div class='del'>-</div><div class='del'>- void rb_include_module(VALUE klass, VALUE module)</div><div class='del'>-</div><div class='del'>-Includes module into class.  If class already includes it, just</div><div class='del'>-ignored.</div><div class='del'>-</div><div class='del'>- void rb_extend_object(VALUE object, VALUE module)</div><div class='del'>-</div><div class='del'>-Extend the object with the module's attributes.</div><div class='del'>-</div><div class='del'>-** Defining Global Variables</div><div class='del'>-</div><div class='del'>- void rb_define_variable(const char *name, VALUE *var)</div><div class='del'>-</div><div class='del'>-Defines a global variable which is shared between C and Ruby.  If name</div><div class='del'>-contains a character which is not allowed to be part of the symbol,</div><div class='del'>-it can't be seen from Ruby programs.</div><div class='del'>-</div><div class='del'>- void rb_define_readonly_variable(const char *name, VALUE *var)</div><div class='del'>-</div><div class='del'>-Defines a read-only global variable.  Works just like</div><div class='del'>-rb_define_variable(), except the defined variable is read-only.</div><div class='del'>-</div><div class='del'>- void rb_define_virtual_variable(const char *name,</div><div class='del'>-				 VALUE (*getter)(), VALUE (*setter)())</div><div class='del'>-</div><div class='del'>-Defines a virtual variable, whose behavior is defined by a pair of C</div><div class='del'>-functions.  The getter function is called when the variable is</div><div class='del'>-referenced.  The setter function is called when the variable is set to a</div><div class='del'>-value.  The prototype for getter/setter functions are:</div><div class='del'>-</div><div class='del'>-	VALUE getter(ID id)</div><div class='del'>-	void setter(VALUE val, ID id)</div><div class='del'>-</div><div class='del'>-The getter function must return the value for the access.</div><div class='del'>-</div><div class='del'>- void rb_define_hooked_variable(const char *name, VALUE *var,</div><div class='del'>-				VALUE (*getter)(), VALUE (*setter)())</div><div class='del'>-</div><div class='del'>-Defines hooked variable.  It's a virtual variable with a C variable.  </div><div class='del'>-The getter is called as</div><div class='del'>-</div><div class='del'>-	VALUE getter(ID id, VALUE *var)</div><div class='del'>-</div><div class='del'>-returning a new value.  The setter is called as</div><div class='del'>-</div><div class='del'>-	void setter(VALUE val, ID id, VALUE *var)</div><div class='del'>-</div><div class='del'>-GC requires C global variables which hold Ruby values to be marked.</div><div class='del'>-</div><div class='del'>- void rb_global_variable(VALUE *var)</div><div class='del'>-</div><div class='del'>-Tells GC to protect these variables.</div><div class='del'>-</div><div class='del'>-** Constant Definition</div><div class='del'>-</div><div class='del'>- void rb_define_const(VALUE klass, const char *name, VALUE val)</div><div class='del'>-</div><div class='del'>-Defines a new constant under the class/module.</div><div class='del'>-</div><div class='del'>- void rb_define_global_const(const char *name, VALUE val)</div><div class='del'>-</div><div class='del'>-Defines a global constant.  This is just the same as</div><div class='del'>-</div><div class='del'>-     rb_define_const(cKernal, name, val)</div><div class='del'>-</div><div class='del'>-** Method Definition</div><div class='del'>-</div><div class='del'>- rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-Defines a method for the class.  func is the function pointer.  argc</div><div class='del'>-is the number of arguments.  if argc is -1, the function will receive</div><div class='del'>-3 arguments: argc, argv, and self.  if argc is -2, the function will</div><div class='del'>-receive 2 arguments, self and args, where args is a Ruby array of</div><div class='del'>-the method arguments.</div><div class='del'>-</div><div class='del'>- rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-Defines a private method for the class.  Arguments are same as</div><div class='del'>-rb_define_method().</div><div class='del'>-</div><div class='del'>- rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-Defines a singleton method.  Arguments are same as rb_define_method().</div><div class='del'>-</div><div class='del'>- rb_scan_args(int argc, VALUE *argv, const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-Retrieve argument from argc, argv.  The fmt is the format string for</div><div class='del'>-the arguments, such as "12" for 1 non-optional argument, 2 optional</div><div class='del'>-arguments.  If `*' appears at the end of fmt, it means the rest of</div><div class='del'>-the arguments are assigned to the corresponding variable, packed in</div><div class='del'>-an array.</div><div class='del'>-</div><div class='del'>-** Invoking Ruby method</div><div class='del'>-</div><div class='del'>- VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)</div><div class='del'>-</div><div class='del'>-Invokes a method.  To retrieve mid from a method name, use rb_intern().</div><div class='del'>-</div><div class='del'>- VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)</div><div class='del'>-</div><div class='del'>-Invokes a method, passing arguments by an array of values.</div><div class='del'>-</div><div class='del'>- VALUE rb_eval_string(const char *str)</div><div class='del'>-</div><div class='del'>-Compiles and executes the string as a Ruby program.</div><div class='del'>-</div><div class='del'>- ID rb_intern(const char *name)</div><div class='del'>-</div><div class='del'>-Returns ID corresponding to the name.</div><div class='del'>-</div><div class='del'>- char *rb_id2name(ID id)</div><div class='del'>-</div><div class='del'>-Returns the name corresponding ID.</div><div class='del'>-</div><div class='del'>- char *rb_class2name(VALUE klass)</div><div class='del'>-</div><div class='del'>-Returns the name of the class.</div><div class='del'>-</div><div class='del'>- int rb_respond_to(VALUE object, ID id)</div><div class='del'>-</div><div class='del'>-Returns true if the object responds to the message specified by id.</div><div class='del'>-</div><div class='del'>-** Instance Variables</div><div class='del'>-</div><div class='del'>- VALUE rb_iv_get(VALUE obj, const char *name)</div><div class='del'>-</div><div class='del'>-Retrieve the value of the instance variable.  If the name is not</div><div class='del'>-prefixed by `@', that variable shall be inaccessible from Ruby.</div><div class='del'>-</div><div class='del'>- VALUE rb_iv_set(VALUE obj, const char *name, VALUE val)</div><div class='del'>-</div><div class='del'>-Sets the value of the instance variable.</div><div class='del'>-</div><div class='del'>-** Control Structure</div><div class='del'>-</div><div class='del'>- VALUE rb_iterate(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2)</div><div class='del'>-</div><div class='del'>-Calls the function func1, supplying func2 as the block.  func1 will be</div><div class='del'>-called with the argument arg1.  func2 receives the value from yield as</div><div class='del'>-the first argument, arg2 as the second argument.</div><div class='del'>- </div><div class='del'>- VALUE rb_yield(VALUE val)</div><div class='del'>-</div><div class='del'>-Evaluates the block with value val.</div><div class='del'>-</div><div class='del'>- VALUE rb_rescue(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2)</div><div class='del'>-</div><div class='del'>-Calls the function func1, with arg1 as the argument.  If an exception</div><div class='del'>-occurs during func1, it calls func2 with arg2 as the argument.  The</div><div class='del'>-return value of rb_rescue() is the return value from func1 if no</div><div class='del'>-exception occurs, from func2 otherwise.</div><div class='del'>-</div><div class='del'>- VALUE rb_ensure(VALUE (*func1)(), void *arg1, void (*func2)(), void *arg2)</div><div class='del'>-</div><div class='del'>-Calls the function func1 with arg1 as the argument, then calls func2</div><div class='del'>-with arg2 if execution terminated.  The return value from</div><div class='del'>-rb_ensure() is that of func1.</div><div class='del'>-</div><div class='del'>-** Exceptions and Errors</div><div class='del'>-</div><div class='del'>- void rb_warn(const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-Prints a warning message according to a printf-like format.</div><div class='del'>-</div><div class='del'>- void rb_warning(const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-Prints a warning message according to a printf-like format, if</div><div class='del'>-$VERBOSE is true.</div><div class='del'>-</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='del'>- void rb_raise(VALUE exception, const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-Raises a class exception.  The fmt is a format string just like printf().</div><div class='del'>-</div><div class='del'>- void rb_fatal(const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-Raises a fatal error, terminates the interpreter.  No exception handling</div><div class='del'>-will be done for fatal errors, but ensure blocks will be executed.</div><div class='del'>-</div><div class='del'>- void rb_bug(const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-Terminates the interpreter immediately.  This function should be</div><div class='del'>-called under the situation caused by the bug in the interpreter.  No</div><div class='del'>-exception handling nor ensure execution will be done.</div><div class='del'>-</div><div class='del'>-** Initialize and Start the Interpreter</div><div class='del'>-</div><div class='del'>-The embedding API functions are below (not needed for extension libraries):</div><div class='del'>-</div><div class='del'>- void ruby_init()</div><div class='del'>-</div><div class='del'>-Initializes the interpreter.</div><div class='del'>-</div><div class='del'>- void ruby_options(int argc, char **argv)</div><div class='del'>-</div><div class='del'>-Process command line arguments for the interpreter.</div><div class='del'>-</div><div class='del'>- void ruby_run()</div><div class='del'>-</div><div class='del'>-Starts execution of the interpreter.</div><div class='del'>-</div><div class='del'>- void ruby_script(char *name)</div><div class='del'>-</div><div class='del'>-Specifies the name of the script ($0).</div><div class='del'>-</div><div class='del'>-** Hooks for the Interpreter Events</div><div class='del'>-</div><div class='del'>- void rb_add_event_hook(rb_event_hook_func_t func, rb_event_t events)</div><div class='del'>-</div><div class='del'>-Adds a hook function for the specified interpreter events.</div><div class='del'>-events should be Or'ed value of:</div><div class='del'>-</div><div class='del'>-	RUBY_EVENT_LINE</div><div class='del'>-	RUBY_EVENT_CLASS</div><div class='del'>-	RUBY_EVENT_END</div><div class='del'>-	RUBY_EVENT_CALL</div><div class='del'>-	RUBY_EVENT_RETURN</div><div class='del'>-	RUBY_EVENT_C_CALL</div><div class='del'>-	RUBY_EVENT_C_RETURN</div><div class='del'>-	RUBY_EVENT_RAISE</div><div class='del'>-	RUBY_EVENT_ALL</div><div class='del'>-</div><div class='del'>-The definition of rb_event_hook_func_t is below:</div><div class='del'>-</div><div class='del'>- typedef void (*rb_event_hook_func_t)(rb_event_t event, NODE *node,</div><div class='del'>- 				      VALUE self, ID id, VALUE klass)</div><div class='del'>-</div><div class='del'>- int rb_remove_event_hook(rb_event_hook_func_t func)</div><div class='del'>-</div><div class='del'>-Removes the specified hook function.</div><div class='del'>-</div><div class='del'>-Appendix C. Functions Available in extconf.rb</div><div class='del'>-</div><div class='del'>-These functions are available in extconf.rb:</div><div class='del'>-</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='del'>- have_library(lib, func)</div><div class='del'>-</div><div class='del'>-Checks whether the library exists, containing the specified function.</div><div class='del'>-Returns true if the library exists.</div><div class='del'>-</div><div class='del'>- find_library(lib, func, path...)</div><div class='del'>-</div><div class='del'>-Checks whether a library which contains the specified function exists in</div><div class='del'>-path.  Returns true if the library exists.</div><div class='del'>-</div><div class='del'>- have_func(func, header)</div><div class='del'>-</div><div class='del'>-Checks whether func exists with header.  Returns true if the function</div><div class='del'>-exists.  To check functions 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='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='del'>- have_header(header)</div><div class='del'>-</div><div class='del'>-Checks whether header exists.  Returns true if the header file exists.</div><div class='del'>-</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='del'>- create_makefile(target)</div><div class='del'>-</div><div class='del'>-Generates the Makefile for the extension library.  If you don't invoke</div><div class='del'>-this method, the compilation will not be done.</div><div class='del'>-</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='del'>- with_config(withval[, default=nil])</div><div class='del'>-</div><div class='del'>-Parses the command line options and returns the value specified by</div><div class='del'>---with-&lt;withval&gt;.</div><div class='del'>-</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='del'>- dir_config(target[, default_dir])</div><div class='del'>- dir_config(target[, default_include, default_lib])</div><div class='del'>-</div><div class='del'>-Parses the command line options and adds the directories specified by</div><div class='del'>---with-&lt;target&gt;-dir, --with-&lt;target&gt;-include, and/or --with-&lt;target&gt;-lib</div><div class='del'>-to $CFLAGS and/or $LDFLAGS.  --with-&lt;target&gt;-dir=/path is equivalent to</div><div class='del'>---with-&lt;target&gt;-include=/path/include --with-&lt;target&gt;-lib=/path/lib.</div><div class='del'>-Returns an array of the added directories ([include_dir, lib_dir]).</div><div class='del'>-</div><div class='del'>- pkg_config(pkg)</div><div class='del'>-</div><div class='del'>-Obtains the information for 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='del'>-/*</div><div class='del'>- * Local variables:</div><div class='del'>- * fill-column: 70</div><div class='del'>- * end:</div><div class='del'>- */</div><div class='head'>diff --git a/README.EXT.ja b/README.EXT.ja<br/>deleted file mode 100644<br/>index 73425c2cdb..0000000000<br/>--- a/<a href='/ruby.git/tree/README.EXT.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>README.EXT.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1264 +0,0 @@</div><div class='del'>-.\" README.EXT.ja -  -*- Text -*- created at: Mon Aug  7 16:45:54 JST 1995</div><div class='del'>-</div><div class='del'>-Ruby¤Î³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Îºî¤êÊý¤òÀâÌÀ¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-1¡¥´ðÁÃÃÎ¼±</div><div class='del'>-</div><div class='del'>-C¤ÎÊÑ¿ô¤Ë¤Ï·¿¤¬¤¢¤ê¡¤¥Ç¡¼¥¿¤Ë¤Ï·¿¤¬¤¢¤ê¤Þ¤»¤ó¡¥¤Ç¤¹¤«¤é¡¤¤¿</div><div class='del'>-¤È¤¨¤Ð¥Ý¥¤¥ó¥¿¤òint¤ÎÊÑ¿ô¤ËÂåÆþ¤¹¤ë¤È¡¤¤½¤ÎÃÍ¤ÏÀ°¿ô¤È¤·¤Æ¼è</div><div class='del'>-¤ê°·¤ï¤ì¤Þ¤¹¡¥µÕ¤ËRuby¤ÎÊÑ¿ô¤Ë¤Ï·¿¤¬¤Ê¤¯¡¤¥Ç¡¼¥¿¤Ë·¿¤¬¤¢¤ê¤Þ</div><div class='del'>-¤¹¡¥¤³¤Î°ã¤¤¤Î¤¿¤á¡¤C¤ÈRuby¤ÏÁê¸ß¤ËÊÑ´¹¤·¤Ê¤±¤ì¤Ð¡¤¤ª¸ß¤¤¤Î</div><div class='del'>-¥Ç¡¼¥¿¤ò¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-Ruby¤Î¥Ç¡¼¥¿¤ÏVALUE¤È¤¤¤¦C¤Î·¿¤ÇÉ½¸½¤µ¤ì¤Þ¤¹¡¥VALUE·¿¤Î¥Ç¡¼</div><div class='del'>-¥¿¤Ï¤½¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤ò¼«Ê¬¤ÇÃÎ¤Ã¤Æ¤¤¤Þ¤¹¡¥¤³¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤È</div><div class='del'>-¤¤¤¦¤Î¤Ï¥Ç¡¼¥¿(¥ª¥Ö¥¸¥§¥¯¥È)¤Î¼ÂºÝ¤Î¹½Â¤¤ò°ÕÌ£¤·¤Æ¤¤¤Æ¡¤Ruby</div><div class='del'>-¤Î¥¯¥é¥¹¤È¤Ï¤Þ¤¿°ã¤Ã¤¿¤â¤Î¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-VALUE¤«¤éC¤Ë¤È¤Ã¤Æ°ÕÌ£¤Î¤¢¤ë¥Ç¡¼¥¿¤ò¼è¤ê½Ð¤¹¤¿¤á¤Ë¤Ï</div><div class='del'>-</div><div class='del'>- (1) VALUE¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤òÃÎ¤ë</div><div class='del'>- (2) VALUE¤òC¤Î¥Ç¡¼¥¿¤ËÊÑ´¹¤¹¤ë</div><div class='del'>-</div><div class='del'>-¤ÎÎ¾Êý¤¬É¬Í×¤Ç¤¹¡¥(1)¤òËº¤ì¤ë¤È´Ö°ã¤Ã¤¿¥Ç¡¼¥¿¤ÎÊÑ´¹¤¬¹Ô¤ï¤ì</div><div class='del'>-¤Æ¡¤ºÇ°­¥×¥í¥°¥é¥à¤¬core dump¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-1.1 ¥Ç¡¼¥¿¥¿¥¤¥×</div><div class='del'>-</div><div class='del'>-Ruby¤Ë¤Ï¥æ¡¼¥¶¤¬»È¤¦²ÄÇ½À­¤Î¤¢¤ë°Ê²¼¤Î¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-	T_NIL		nil</div><div class='del'>-	T_OBJECT	ÄÌ¾ï¤Î¥ª¥Ö¥¸¥§¥¯¥È</div><div class='del'>-	T_CLASS		¥¯¥é¥¹</div><div class='del'>-	T_MODULE	¥â¥¸¥å¡¼¥ë</div><div class='del'>-	T_FLOAT		ÉâÆ°¾®¿ôÅÀ¿ô</div><div class='del'>-	T_STRING	Ê¸»úÎó</div><div class='del'>-	T_REGEXP	Àµµ¬É½¸½</div><div class='del'>-	T_ARRAY		ÇÛÎó</div><div class='del'>-	T_FIXNUM	Fixnum(31bitÄ¹À°¿ô)</div><div class='del'>-	T_HASH		Ï¢ÁÛÇÛÎó</div><div class='del'>-	T_STRUCT	(Ruby¤Î)¹½Â¤ÂÎ</div><div class='del'>-	T_BIGNUM	Â¿ÇÜÄ¹À°¿ô</div><div class='del'>-	T_FILE		Æþ½ÐÎÏ</div><div class='del'>-	T_TRUE		¿¿</div><div class='del'>-	T_FALSE		µ¶</div><div class='del'>-	T_DATA		¥Ç¡¼¥¿</div><div class='del'>-	T_SYMBOL	¥·¥ó¥Ü¥ë</div><div class='del'>-</div><div class='del'>-¤½¤ÎÂ¾¤ËÆâÉô¤ÇÍøÍÑ¤µ¤ì¤Æ¤¤¤ë°Ê²¼¤Î¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-	T_ICLASS</div><div class='del'>-	T_MATCH</div><div class='del'>-	T_UNDEF</div><div class='del'>-	T_VARMAP</div><div class='del'>-	T_SCOPE</div><div class='del'>-	T_NODE</div><div class='del'>-</div><div class='del'>-¤Û¤È¤ó¤É¤Î¥¿¥¤¥×¤ÏC¤Î¹½Â¤ÂÎ¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-1.2 VALUE¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤ò¥Á¥§¥Ã¥¯¤¹¤ë</div><div class='del'>-</div><div class='del'>-ruby.h¤Ç¤ÏTYPE()¤È¤¤¤¦¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Æ¡¤VALUE¤Î¥Ç¡¼¥¿</div><div class='del'>-¥¿¥¤¥×¤òÃÎ¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥TYPE()¥Þ¥¯¥í¤Ï¾å¤Ç¾Ò²ð¤·¤¿T_XXXX</div><div class='del'>-¤Î·Á¼°¤ÎÄê¿ô¤òÊÖ¤·¤Þ¤¹¡¥VALUE¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤Ë±þ¤¸¤Æ½èÍý¤¹¤ë</div><div class='del'>-¾ì¹ç¤Ë¤Ï¡¤TYPE()¤ÎÃÍ¤ÇÊ¬´ô¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  switch (TYPE(obj)) {</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-      /* FIXNUM¤Î½èÍý */</div><div class='del'>-      break;</div><div class='del'>-    case T_STRING:</div><div class='del'>-      /* Ê¸»úÎó¤Î½èÍý */</div><div class='del'>-      break;</div><div class='del'>-    case T_ARRAY:</div><div class='del'>-      /* ÇÛÎó¤Î½èÍý */</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      /* Îã³°¤òÈ¯À¸¤µ¤»¤ë */</div><div class='del'>-      rb_raise(rb_eTypeError, "not valid value");</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'>-  void Check_Type(VALUE value, int type)</div><div class='del'>-</div><div class='del'>-¤³¤Î´Ø¿ô¤Ïvalue¤¬type¤ÇÌµ¤±¤ì¤Ð¡¤Îã³°¤òÈ¯À¸¤µ¤»¤Þ¤¹¡¥°ú¿ô¤È</div><div class='del'>-¤·¤ÆÍ¿¤¨¤é¤ì¤¿VALUE¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤¬Àµ¤·¤¤¤«¤É¤¦¤«¥Á¥§¥Ã¥¯¤¹</div><div class='del'>-¤ë¤¿¤á¤Ë¤Ï¡¤¤³¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-FIXNUM¤ÈNIL¤Ë´Ø¤·¤Æ¤Ï¤è¤ê¹âÂ®¤ÊÈ½ÊÌ¥Þ¥¯¥í¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  FIXNUM_P(obj)</div><div class='del'>-  NIL_P(obj)</div><div class='del'>-</div><div class='del'>-1.3 VALUE¤òC¤Î¥Ç¡¼¥¿¤ËÊÑ´¹¤¹¤ë</div><div class='del'>-</div><div class='del'>-¥Ç¡¼¥¿¥¿¥¤¥×¤¬T_NIL, T_FALSE, T_TRUE¤Ç¤¢¤ë»þ¡¤¥Ç¡¼¥¿¤Ï¤½¤ì¤¾</div><div class='del'>-¤ìnil, false, true¤Ç¤¹¡¥¤³¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï¤Ò¤È</div><div class='del'>-¤Ä¤º¤Ä¤·¤«Â¸ºß¤·¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-¥Ç¡¼¥¿¥¿¥¤¥×¤¬T_FIXNUM¤Î»þ¡¤¤³¤ì¤Ï31bit¤Î¥µ¥¤¥º¤ò»ý¤ÄÀ°¿ô¤Ç</div><div class='del'>-¤¹¡¥FIXNUM¤òC¤ÎÀ°¿ô¤ËÊÑ´¹¤¹¤ë¤¿¤á¤Ë¤Ï¥Þ¥¯¥í¡ÖFIX2INT()¡×¤ò»È</div><div class='del'>-¤¤¤Þ¤¹¡¥¤½¤ì¤«¤é¡¤FIXNUM¤Ë¸Â¤é¤ºRuby¤Î¥Ç¡¼¥¿¤òÀ°¿ô¤ËÊÑ´¹¤¹¤ë</div><div class='del'>-¡ÖNUM2INT()¡×¤È¤¤¤¦¥Þ¥¯¥í¤¬¤¢¤ê¤Þ¤¹¡¥¤³¤Î¥Þ¥¯¥í¤Ï¥Ç¡¼¥¿¥¿¥¤</div><div class='del'>-¥×¤Î¥Á¥§¥Ã¥¯Ìµ¤·¤Ç»È¤¨¤Þ¤¹(À°¿ô¤ËÊÑ´¹¤Ç¤­¤Ê¤¤¾ì¹ç¤Ë¤ÏÎã³°¤¬</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='del'>-</div><div class='del'>-¤½¤ì°Ê³°¤Î¥Ç¡¼¥¿¥¿¥¤¥×¤ÏÂÐ±þ¤¹¤ëC¤Î¹½Â¤ÂÎ¤¬¤¢¤ê¤Þ¤¹¡¥ÂÐ±þ¤¹</div><div class='del'>-¤ë¹½Â¤ÂÎ¤Î¤¢¤ëVALUE¤Ï¤½¤Î¤Þ¤Þ¥­¥ã¥¹¥È(·¿ÊÑ´¹)¤¹¤ì¤Ð¹½Â¤ÂÎ¤Î</div><div class='del'>-¥Ý¥¤¥ó¥¿¤ËÊÑ´¹¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¹½Â¤ÂÎ¤Ï¡Östruct RXxxxx¡×¤È¤¤¤¦Ì¾Á°¤Çruby.h¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ</div><div class='del'>-¤¹¡¥Îã¤¨¤ÐÊ¸»úÎó¤Ï¡Östruct RString¡×¤Ç¤¹¡¥¼ÂºÝ¤Ë»È¤¦²ÄÇ½À­¤¬</div><div class='del'>-¤¢¤ë¤Î¤ÏÊ¸»úÎó¤ÈÇÛÎó¤¯¤é¤¤¤À¤È»×¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-ruby.h¤Ç¤Ï¹½Â¤ÂÎ¤Ø¥­¥ã¥¹¥È¤¹¤ë¥Þ¥¯¥í¤â¡ÖRXXXXX()¡×(Á´ÉôÂçÊ¸</div><div class='del'>-»ú¤Ë¤·¤¿¤â¤Î)¤È¤¤¤¦Ì¾Á°¤ÇÄó¶¡¤µ¤ì¤Æ¤¤¤Þ¤¹(Îã: RSTRING())¡¥</div><div class='del'>-</div><div class='del'>-Îã¤¨¤Ð¡¤Ê¸»úÎóstr¤ÎÄ¹¤µ¤òÆÀ¤ë¤¿¤á¤Ë¤Ï¡ÖRSTRING(str)-&gt;len¡×¤È</div><div class='del'>-¤·¡¤Ê¸»úÎóstr¤òchar*¤È¤·¤ÆÆÀ¤ë¤¿¤á¤Ë¤Ï¡ÖRSTRING(str)-&gt;ptr¡×</div><div class='del'>-¤È¤·¤Þ¤¹¡¥ÇÛÎó¤Î¾ì¹ç¤Ë¤Ï¡¤¤½¤ì¤¾¤ì¡ÖRARRAY(ary)-&gt;len¡×¡¤</div><div class='del'>-¡ÖRARRAY(ary)-&gt;ptr¡×¤È¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-Ruby¤Î¹½Â¤ÂÎ¤òÄ¾ÀÜ¥¢¥¯¥»¥¹¤¹¤ë»þ¤Ëµ¤¤ò¤Ä¤±¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³</div><div class='del'>-¤È¤Ï¡¤ÇÛÎó¤äÊ¸»úÎó¤Î¹½Â¤ÂÎ¤ÎÃæ¿È¤Ï»²¾È¤¹¤ë¤À¤±¤Ç¡¤Ä¾ÀÜÊÑ¹¹¤·</div><div class='del'>-¤Ê¤¤¤³¤È¤Ç¤¹¡¥Ä¾ÀÜÊÑ¹¹¤·¤¿¾ì¹ç¡¤¥ª¥Ö¥¸¥§¥¯¥È¤ÎÆâÍÆ¤ÎÀ°¹çÀ­¤¬</div><div class='del'>-¤È¤ì¤Ê¤¯¤Ê¤Ã¤Æ¡¤»×¤ï¤Ì¥Ð¥°¤Î¸¶°ø¤Ë¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-1.4 C¤Î¥Ç¡¼¥¿¤òVALUE¤ËÊÑ´¹¤¹¤ë</div><div class='del'>-</div><div class='del'>-VALUE¤Î¼ÂºÝ¤Î¹½Â¤¤Ï</div><div class='del'>-</div><div class='del'>-  * FIXNUM¤Î¾ì¹ç</div><div class='del'>-</div><div class='del'>-    1bitº¸¥·¥Õ¥È¤·¤Æ¡¤LSB¤òÎ©¤Æ¤ë¡¥</div><div class='del'>-</div><div class='del'>-  * ¤½¤ÎÂ¾¤Î¥Ý¥¤¥ó¥¿¤Î¾ì¹ç</div><div class='del'>-</div><div class='del'>-    ¤½¤Î¤Þ¤ÞVALUE¤Ë¥­¥ã¥¹¥È¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥¤è¤Ã¤Æ¡¤LSB¤ò¥Á¥§¥Ã¥¯¤¹¤ì¤ÐVALUE¤¬FIXNUM¤«¤É</div><div class='del'>-¤¦¤«¤ï¤«¤ë¤ï¤±¤Ç¤¹(¥Ý¥¤¥ó¥¿¤ÎLSB¤¬Î©¤Ã¤Æ¤¤¤Ê¤¤¤³¤È¤ò²¾Äê¤·¤Æ</div><div class='del'>-¤¤¤ë)¡¥</div><div class='del'>-</div><div class='del'>-¤Ç¤¹¤«¤é¡¤FIXNUM°Ê³°¤ÎRuby¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤ÂÎ¤ÏÃ±¤ËVALUE</div><div class='del'>-¤Ë¥­¥ã¥¹¥È¤¹¤ë¤À¤±¤ÇVALUE¤ËÊÑ´¹½ÐÍè¤Þ¤¹¡¥¤¿¤À¤·¡¤Ç¤°Õ¤Î¹½Â¤</div><div class='del'>-ÂÎ¤¬VALUE¤Ë¥­¥ã¥¹¥È½ÐÍè¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥¥­¥ã¥¹¥È¤¹¤ë¤Î</div><div class='del'>-¤ÏRuby¤ÎÃÎ¤Ã¤Æ¤¤¤ë¹½Â¤ÂÎ(ruby.h¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ëstruct RXxxx</div><div class='del'>-¤Î¤â¤Î)¤À¤±¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-FIXNUM¤Ë´Ø¤·¤Æ¤ÏÊÑ´¹¥Þ¥¯¥í¤ò·ÐÍ³¤¹¤ëÉ¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥C¤ÎÀ°¿ô</div><div class='del'>-¤«¤éVALUE¤ËÊÑ´¹¤¹¤ë¥Þ¥¯¥í¤Ï°Ê²¼¤Î¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡¥É¬Í×¤Ë±þ¤¸</div><div class='del'>-¤Æ»È¤¤Ê¬¤±¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-  INT2FIX()	¤â¤È¤ÎÀ°¿ô¤¬31bit°ÊÆâ¤Ë¼ý¤Þ¤ë¼«¿®¤¬¤¢¤ë»þ</div><div class='del'>-  INT2NUM()	Ç¤°Õ¤ÎÀ°¿ô¤«¤éVALUE¤Ø</div><div class='del'>-</div><div class='del'>-INT2NUM()¤ÏÀ°¿ô¤¬FIXNUM¤ÎÈÏ°Ï¤Ë¼ý¤Þ¤é¤Ê¤¤¾ì¹ç¡¤Bignum¤ËÊÑ´¹</div><div class='del'>-¤·¤Æ¤¯¤ì¤Þ¤¹(¤¬¡¤¾¯¤·ÃÙ¤¤)¡¥</div><div class='del'>-</div><div class='del'>-1.5 Ruby¤Î¥Ç¡¼¥¿¤òÁàºî¤¹¤ë</div><div class='del'>-</div><div class='del'>-ÀèÄø¤â½Ò¤Ù¤¿ÄÌ¤ê¡¤Ruby¤Î¹½Â¤ÂÎ¤ò¥¢¥¯¥»¥¹¤¹¤ë»þ¤ËÆâÍÆ¤Î¹¹¿·¤ò</div><div class='del'>-¹Ô¤¦¤³¤È¤Ï´«¤á¤é¤ì¤Þ¤»¤ó¡¥¤Ç¡¤Ruby¤Î¥Ç¡¼¥¿¤òÁàºî¤¹¤ë»þ¤Ë¤Ï</div><div class='del'>-Ruby¤¬ÍÑ°Õ¤·¤Æ¤¤¤ë´Ø¿ô¤òÍÑ¤¤¤Æ¤¯¤À¤µ¤¤¡¥</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'>-  rb_str_new(const char *ptr, long len)</div><div class='del'>-</div><div class='del'>-    ¿·¤·¤¤Ruby¤ÎÊ¸»úÎó¤òÀ¸À®¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-  rb_str_new2(const char *ptr)</div><div class='del'>-</div><div class='del'>-    C¤ÎÊ¸»úÎó¤«¤éRuby¤ÎÊ¸»úÎó¤òÀ¸À®¤¹¤ë¡¥¤³¤Î´Ø¿ô¤Îµ¡Ç½¤Ï</div><div class='del'>-    rb_str_new(ptr, strlen(ptr))¤ÈÆ±Åù¤Ç¤¢¤ë¡¥</div><div class='del'>-</div><div class='del'>-  rb_tainted_str_new(const char *ptr, long len)</div><div class='del'>-</div><div class='del'>-    ±øÀ÷¥Þ¡¼¥¯¤¬ÉÕ²Ã¤µ¤ì¤¿¿·¤·¤¤Ruby¤ÎÊ¸»úÎó¤òÀ¸À®¤¹¤ë¡¥³°Éô</div><div class='del'>-    ¤«¤é¤Î¥Ç¡¼¥¿¤Ë´ð¤Å¤¯Ê¸»úÎó¤Ë¤Ï±øÀ÷¥Þ¡¼¥¯¤¬ÉÕ²Ã¤µ¤ì¤ë¤Ù¤­</div><div class='del'>-    ¤Ç¤¢¤ë¡¥</div><div class='del'>-</div><div class='del'>-  rb_tainted_str_new2(const char *ptr)</div><div class='del'>-</div><div class='del'>-    C¤ÎÊ¸»úÎó¤«¤é±øÀ÷¥Þ¡¼¥¯¤¬ÉÕ²Ã¤µ¤ì¤¿Ruby¤ÎÊ¸»úÎó¤òÀ¸À®¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-  rb_str_cat(VALUE str, const char *ptr, long len)</div><div class='del'>-</div><div class='del'>-    Ruby¤ÎÊ¸»úÎóstr¤Ëlen¥Ð¥¤¥È¤ÎÊ¸»úÎóptr¤òÄÉ²Ã¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>- ÇÛÎó¤ËÂÐ¤¹¤ë´Ø¿ô</div><div class='del'>-</div><div class='del'>-  rb_ary_new()</div><div class='del'>-</div><div class='del'>-    Í×ÁÇ¤¬0¤ÎÇÛÎó¤òÀ¸À®¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-  rb_ary_new2(long len)</div><div class='del'>-</div><div class='del'>-    Í×ÁÇ¤¬0¤ÎÇÛÎó¤òÀ¸À®¤¹¤ë¡¥lenÍ×ÁÇÊ¬¤ÎÎÎ°è¤ò¤¢¤é¤«¤¸¤á³ä¤ê</div><div class='del'>-    Åö¤Æ¤Æ¤ª¤¯¡¥</div><div class='del'>-</div><div class='del'>-  rb_ary_new3(long n, ...)</div><div class='del'>-</div><div class='del'>-    °ú¿ô¤Ç»ØÄê¤·¤¿nÍ×ÁÇ¤ò´Þ¤àÇÛÎó¤òÀ¸À®¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-  rb_ary_new4(long n, VALUE *elts)</div><div class='del'>-</div><div class='del'>-    ÇÛÎó¤ÇÍ¿¤¨¤¿nÍ×ÁÇ¤ÎÇÛÎó¤òÀ¸À®¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-  rb_ary_push(VALUE ary, VALUE val)</div><div class='del'>-  rb_ary_pop(VALUE ary)</div><div class='del'>-  rb_ary_shift(VALUE ary)</div><div class='del'>-  rb_ary_unshift(VALUE ary, VALUE val)</div><div class='del'>-</div><div class='del'>-    Array¤ÎÆ±Ì¾¤Î¥á¥½¥Ã¥É¤ÈÆ±¤¸Æ¯¤­¤ò¤¹¤ë´Ø¿ô¡¥Âè1°ú¿ô¤ÏÉ¬¤º</div><div class='del'>-    ÇÛÎó¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡¥</div><div class='del'>-</div><div class='del'>-2¡¥Ruby¤Îµ¡Ç½¤ò»È¤¦</div><div class='del'>-</div><div class='del'>-¸¶ÍýÅª¤ËRuby¤Ç½ñ¤±¤ë¤³¤È¤ÏC¤Ç¤â½ñ¤±¤Þ¤¹¡¥Ruby¤½¤Î¤â¤Î¤¬C¤Çµ­</div><div class='del'>-½Ò¤µ¤ì¤Æ¤¤¤ë¤ó¤Ç¤¹¤«¤é¡¤ÅöÁ³¤È¤¤¤¨¤ÐÅöÁ³¤Ê¤ó¤Ç¤¹¤±¤É¡¥¤³¤³¤Ç</div><div class='del'>-¤ÏRuby¤Î³ÈÄ¥¤Ë»È¤¦¤³¤È¤¬Â¿¤¤¤À¤í¤¦¤ÈÍ½Â¬¤µ¤ì¤ëµ¡Ç½¤òÃæ¿´¤Ë¾Ò</div><div class='del'>-²ð¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-2.1 Ruby¤Ëµ¡Ç½¤òÄÉ²Ã¤¹¤ë</div><div class='del'>-</div><div class='del'>-Ruby¤ÇÄó¶¡¤µ¤ì¤Æ¤¤¤ë´Ø¿ô¤ò»È¤¨¤ÐRuby¥¤¥ó¥¿¥×¥ê¥¿¤Ë¿·¤·¤¤µ¡Ç½</div><div class='del'>-¤òÄÉ²Ã¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥Ruby¤Ç¤Ï°Ê²¼¤Îµ¡Ç½¤òÄÉ²Ã¤¹¤ë´Ø¿ô¤¬</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'>-</div><div class='del'>-2.1.1 ¥¯¥é¥¹/¥â¥¸¥å¡¼¥ëÄêµÁ</div><div class='del'>-</div><div class='del'>-¥¯¥é¥¹¤ä¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤¹¤ë¤¿¤á¤Ë¤Ï¡¤°Ê²¼¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  VALUE rb_define_class(const char *name, VALUE super)</div><div class='del'>-  VALUE rb_define_module(const char *name)</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'>-</div><div class='del'>-  VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)</div><div class='del'>-  VALUE rb_define_module_under(VALUE outer, const char *name)</div><div class='del'>-</div><div class='del'>-2.1.2 ¥á¥½¥Ã¥É/ÆÃ°Û¥á¥½¥Ã¥ÉÄêµÁ</div><div class='del'>-</div><div class='del'>-¥á¥½¥Ã¥É¤äÆÃ°Û¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¤Ë¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_method(VALUE klass, const char *name, </div><div class='del'>-		        VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-  void rb_define_singleton_method(VALUE object, const char *name, </div><div class='del'>-			          VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Ç°¤Î¤¿¤áÀâÌÀ¤¹¤ë¤È¡ÖÆÃ°Û¥á¥½¥Ã¥É¡×¤È¤Ï¡¤¤½¤ÎÆÃÄê¤Î¥ª¥Ö¥¸¥§¥¯</div><div class='del'>-¥È¤ËÂÐ¤·¤Æ¤À¤±Í­¸ú¤Ê¥á¥½¥Ã¥É¤Ç¤¹¡¥Ruby¤Ç¤Ï¤è¤¯Smalltalk¤Ë¤ª</div><div class='del'>-¤±¤ë¥¯¥é¥¹¥á¥½¥Ã¥É¤È¤·¤Æ¡¤¥¯¥é¥¹¤ËÂÐ¤¹¤ëÆÃ°Û¥á¥½¥Ã¥É¤¬»È¤ï¤ì</div><div class='del'>-¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¤³¤ì¤é¤Î´Ø¿ô¤Î argc¤È¤¤¤¦°ú¿ô¤ÏC¤Î´Ø¿ô¤ØÅÏ¤µ¤ì¤ë°ú¿ô¤Î¿ô(¤È</div><div class='del'>-·Á¼°)¤ò·è¤á¤Þ¤¹¡¥argc¤¬0°Ê¾å¤Î»þ¤Ï´Ø¿ô¤Ë°ú¤­ÅÏ¤¹°ú¿ô¤Î¿ô¤ò°Õ</div><div class='del'>-Ì£¤·¤Þ¤¹¡¥16¸Ä°Ê¾å¤Î°ú¿ô¤Ï»È¤¨¤Þ¤»¤ó(¤¬¡¤Í×¤ê¤Þ¤»¤ó¤è¤Í¡¤¤½</div><div class='del'>-¤ó¤Ê¤Ë)¡¥¼ÂºÝ¤Î´Ø¿ô¤Ë¤ÏÀèÆ¬¤Î°ú¿ô¤È¤·¤Æself¤¬Í¿¤¨¤é¤ì¤Þ¤¹¤Î</div><div class='del'>-¤Ç¡¤»ØÄê¤·¤¿¿ô¤è¤ê1Â¿¤¤°ú¿ô¤ò»ý¤Ä¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-argc¤¬Éé¤Î»þ¤Ï°ú¿ô¤Î¿ô¤Ç¤Ï¤Ê¤¯¡¤·Á¼°¤ò»ØÄê¤·¤¿¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-argc¤¬-1¤Î»þ¤Ï°ú¿ô¤òÇÛÎó¤ËÆþ¤ì¤ÆÅÏ¤µ¤ì¤Þ¤¹¡¥argc¤¬-2¤Î»þ¤Ï°ú</div><div class='del'>-¿ô¤ÏRuby¤ÎÇÛÎó¤È¤·¤ÆÅÏ¤µ¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë´Ø¿ô¤Ï¤â¤¦Æó¤Ä¤¢¤ê¤Þ¤¹¡¥¤Ò¤È¤Ä¤Ïprivate¥á</div><div class='del'>-¥½¥Ã¥É¤òÄêµÁ¤¹¤ë´Ø¿ô¤Ç¡¤°ú¿ô¤Ïrb_define_method()¤ÈÆ±¤¸¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_private_method(VALUE klass, const char *name, </div><div class='del'>-				VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-private¥á¥½¥Ã¥É¤È¤Ï´Ø¿ô·Á¼°¤Ç¤·¤«¸Æ¤Ó½Ð¤¹¤³¤È¤Î½ÐÍè¤Ê¤¤¥á¥½¥Ã</div><div class='del'>-¥É¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-¤â¤¦¤Ò¤È¤Ä¤Ï¥â¥¸¥å¡¼¥ë´Ø¿ô¤òÄêµÁ¤¹¤ë¤â¤Î¤Ç¤¹¡¥¥â¥¸¥å¡¼¥ë´Ø¿ô</div><div class='del'>-¤È¤Ï¥â¥¸¥å¡¼¥ë¤ÎÆÃ°Û¥á¥½¥Ã¥É¤Ç¤¢¤ê¡¤Æ±»þ¤Ëprivate¥á¥½¥Ã¥É¤Ç</div><div class='del'>-¤â¤¢¤ë¤â¤Î¤Ç¤¹¡¥Îã¤ò¤¢¤²¤ë¤ÈMath¥â¥¸¥å¡¼¥ë¤Îsqrt()¤Ê¤É¤¬¤¢¤²</div><div class='del'>-¤é¤ì¤Þ¤¹¡¥¤³¤Î¥á¥½¥Ã¥É¤Ï</div><div class='del'>-</div><div class='del'>-  Math.sqrt(4)</div><div class='del'>-</div><div class='del'>-¤È¤¤¤¦·Á¼°¤Ç¤â</div><div class='del'>-</div><div class='del'>-  include Math</div><div class='del'>-  sqrt(4)</div><div class='del'>-</div><div class='del'>-¤È¤¤¤¦·Á¼°¤Ç¤â»È¤¨¤Þ¤¹¡¥¥â¥¸¥å¡¼¥ë´Ø¿ô¤òÄêµÁ¤¹¤ë´Ø¿ô¤Ï°Ê²¼¤Î</div><div class='del'>-ÄÌ¤ê¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_module_function(VALUE module, const char *name, </div><div class='del'>-		                 VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-´Ø¿ôÅª¥á¥½¥Ã¥É(Kernel¥â¥¸¥å¡¼¥ë¤Îprivate method)¤òÄêµÁ¤¹¤ë¤¿</div><div class='del'>-¤á¤Î´Ø¿ô¤Ï°Ê²¼¤ÎÄÌ¤ê¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_global_function(const char *name, VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-¥á¥½¥Ã¥É¤ÎÊÌÌ¾¤òÄêµÁ¤¹¤ë¤¿¤á¤Î´Ø¿ô¤Ï°Ê²¼¤ÎÄÌ¤ê¤Ç¤¹¡£</div><div class='del'>-</div><div class='del'>-  void rb_define_alias(VALUE module, const char* new, const char* old);</div><div class='del'>-</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='del'>-2.1.3 Äê¿ôÄêµÁ</div><div class='del'>-</div><div class='del'>-³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤¬É¬Í×¤ÊÄê¿ô¤Ï¤¢¤é¤«¤¸¤áÄêµÁ¤·¤Æ¤ª¤¤¤¿Êý¤¬ÎÉ¤¤</div><div class='del'>-¤Ç¤·¤ç¤¦¡¥Äê¿ô¤òÄêµÁ¤¹¤ë´Ø¿ô¤ÏÆó¤Ä¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_const(VALUE klass, const char *name, VALUE val)</div><div class='del'>-  void rb_define_global_const(const char *name, VALUE val)</div><div class='del'>-</div><div class='del'>-Á°¼Ô¤ÏÆÃÄê¤Î¥¯¥é¥¹/¥â¥¸¥å¡¼¥ë¤ËÂ°¤¹¤ëÄê¿ô¤òÄêµÁ¤¹¤ë¤â¤Î¡¤¸å</div><div class='del'>-¼Ô¤Ï¥°¥í¡¼¥Ð¥ë¤ÊÄê¿ô¤òÄêµÁ¤¹¤ë¤â¤Î¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-2.2 Ruby¤Îµ¡Ç½¤òC¤«¤é¸Æ¤Ó½Ð¤¹</div><div class='del'>-</div><div class='del'>-´û¤Ë¡Ø1.5 Ruby¤Î¥Ç¡¼¥¿¤òÁàºî¤¹¤ë¡Ù¤Ç°ìÉô¾Ò²ð¤·¤¿¤è¤¦¤Ê´Ø¿ô¤ò</div><div class='del'>-»È¤¨¤Ð¡¤Ruby¤Îµ¡Ç½¤ò¼Â¸½¤·¤Æ¤¤¤ë´Ø¿ô¤òÄ¾ÀÜ¸Æ¤Ó½Ð¤¹¤³¤È¤¬½ÐÍè</div><div class='del'>-¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-# ¤³¤Î¤è¤¦¤Ê´Ø¿ô¤Î°ìÍ÷É½¤Ï¤¤¤Þ¤Î¤È¤³¤í¤¢¤ê¤Þ¤»¤ó¡¥¥½¡¼¥¹¤ò¸«</div><div class='del'>-# ¤ë¤·¤«¤Ê¤¤¤Ç¤¹¤Í¡¥</div><div class='del'>-</div><div class='del'>-¤½¤ì°Ê³°¤Ë¤âRuby¤Îµ¡Ç½¤ò¸Æ¤Ó½Ð¤¹ÊýË¡¤Ï¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-2.2.1 Ruby¤Î¥×¥í¥°¥é¥à¤òeval¤¹¤ë</div><div class='del'>-</div><div class='del'>-C¤«¤éRuby¤Îµ¡Ç½¤ò¸Æ¤Ó½Ð¤¹¤â¤Ã¤È¤â´ÊÃ±¤ÊÊýË¡¤È¤·¤Æ¡¤Ê¸»úÎó¤Ç</div><div class='del'>-Í¿¤¨¤é¤ì¤¿Ruby¤Î¥×¥í¥°¥é¥à¤òÉ¾²Á¤¹¤ë°Ê²¼¤Î´Ø¿ô¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  VALUE rb_eval_string(const char *str)</div><div class='del'>-</div><div class='del'>-¤³¤ÎÉ¾²Á¤Ï¸½ºß¤Î´Ä¶­¤Ç¹Ô¤ï¤ì¤Þ¤¹¡¥¤Ä¤Þ¤ê¡¤¸½ºß¤Î¥í¡¼¥«¥ëÊÑ¿ô</div><div class='del'>-¤Ê¤É¤ò¼õ¤±·Ñ¤®¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-2.2.2 ID¤Þ¤¿¤Ï¥·¥ó¥Ü¥ë</div><div class='del'>-</div><div class='del'>-C¤«¤éÊ¸»úÎó¤ò·ÐÍ³¤»¤º¤ËRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤â¤Ç¤­¤Þ</div><div class='del'>-¤¹¡¥¤½¤ÎÁ°¤Ë¡¤Ruby¥¤¥ó¥¿¥×¥ê¥¿Æâ¤Ç¥á¥½¥Ã¥É¤äÊÑ¿ôÌ¾¤ò»ØÄê¤¹¤ë</div><div class='del'>-»þ¤Ë»È¤ï¤ì¤Æ¤¤¤ëID¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡¥</div><div class='del'>-</div><div class='del'>-ID¤È¤ÏÊÑ¿ôÌ¾¡¤¥á¥½¥Ã¥ÉÌ¾¤òÉ½¤¹À°¿ô¤Ç¤¹¡¥Ruby¤Ç¤ÏID¤ËÂÐ±þ¤¹¤ë</div><div class='del'>-¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ¥·¥ó¥Ü¥ë(Symbol)¤¬¤¢¤ê¡¤</div><div class='del'>-</div><div class='del'>- :¼±ÊÌ»Ò</div><div class='del'>-</div><div class='del'>-¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤¹¡¥C¤«¤é¤³¤ÎÀ°¿ô¤òÆÀ¤ë¤¿¤á¤Ë¤Ï´Ø¿ô</div><div class='del'>-</div><div class='del'>-  rb_intern(const char *name)</div><div class='del'>-</div><div class='del'>-¤ò»È¤¤¤Þ¤¹¡¥Ruby¤«¤é°ú¿ô¤È¤·¤ÆÍ¿¤¨¤é¤ì¤¿¥·¥ó¥Ü¥ë(¤Þ¤¿¤ÏÊ¸»ú</div><div class='del'>-Îó)¤òID¤ËÊÑ´¹¤¹¤ë¤Ë¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  rb_to_id(VALUE symbol)</div><div class='del'>-</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='del'>-2.2.3 C¤«¤éRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹</div><div class='del'>-</div><div class='del'>-C¤«¤éÊ¸»úÎó¤ò·ÐÍ³¤»¤º¤ËRuby¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤¿¤á¤Ë¤Ï°Ê²¼</div><div class='del'>-¤Î´Ø¿ô¤ò»È¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)</div><div class='del'>-</div><div class='del'>-¤³¤Î´Ø¿ô¤Ï¥ª¥Ö¥¸¥§¥¯¥Èrecv¤Îmid¤Ç»ØÄê¤µ¤ì¤ë¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð</div><div class='del'>-¤·¤Þ¤¹¡¥¤½¤ÎÂ¾¤Ë°ú¿ô¤Î»ØÄê¤Î»ÅÊý¤¬°ã¤¦°Ê²¼¤Î´Ø¿ô¤â¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)</div><div class='del'>-  VALUE rb_apply(VALUE recv, ID mid, VALUE args)</div><div class='del'>-</div><div class='del'>-apply¤Ë¤Ï°ú¿ô¤È¤·¤ÆRuby¤ÎÇÛÎó¤òÍ¿¤¨¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-2.2.4 ÊÑ¿ô/Äê¿ô¤ò»²¾È/¹¹¿·¤¹¤ë</div><div class='del'>-</div><div class='del'>-C¤«¤é´Ø¿ô¤ò»È¤Ã¤Æ»²¾È¡¦¹¹¿·¤Ç¤­¤ë¤Î¤Ï¡¤Äê¿ô¡¤¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ</div><div class='del'>-¿ô¤Ç¤¹¡¥Âç°èÊÑ¿ô¤Ï°ìÉô¤Î¤â¤Î¤ÏC¤ÎÂç°èÊÑ¿ô¤È¤·¤Æ¥¢¥¯¥»¥¹¤Ç¤­</div><div class='del'>-¤Þ¤¹¡¥¥í¡¼¥«¥ëÊÑ¿ô¤ò»²¾È¤¹¤ëÊýË¡¤Ï¸ø³«¤·¤Æ¤¤¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ò»²¾È¡¦¹¹¿·¤¹¤ë´Ø¿ô¤Ï°Ê²¼¤ÎÄÌ</div><div class='del'>-¤ê¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-  VALUE rb_ivar_get(VALUE obj, ID id)</div><div class='del'>-  VALUE rb_ivar_set(VALUE obj, ID id, VALUE val)</div><div class='del'>-</div><div class='del'>-id¤Ïrb_intern()¤ÇÆÀ¤é¤ì¤ë¤â¤Î¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-Äê¿ô¤ò»²¾È¤¹¤ë¤Ë¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-  VALUE rb_const_get(VALUE obj, ID id)</div><div class='del'>-</div><div class='del'>-Äê¿ô¤ò¿·¤·¤¯ÄêµÁ¤¹¤ë¤¿¤á¤Ë¤Ï¡Ø2.1.3 Äê¿ôÄêµÁ¡Ù¤Ç¾Ò²ð¤µ</div><div class='del'>-¤ì¤Æ¤¤¤ë´Ø¿ô¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-3¡¥Ruby¤ÈC¤È¤Î¾ðÊó¶¦Í­</div><div class='del'>-</div><div class='del'>-C¸À¸ì¤ÈRuby¤Î´Ö¤Ç¾ðÊó¤ò¶¦Í­¤¹¤ëÊýË¡¤Ë¤Ä¤¤¤Æ²òÀâ¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-3.1 C¤«¤é»²¾È¤Ç¤­¤ëRuby¤ÎÄê¿ô</div><div class='del'>-</div><div class='del'>-°Ê²¼¤ÎRuby¤ÎÄê¿ô¤ÏC¤Î¥ì¥Ù¥ë¤«¤é»²¾È¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  Qtrue</div><div class='del'>-  Qfalse</div><div class='del'>-</div><div class='del'>-    ¿¿µ¶ÃÍ¡¥Qfalse¤ÏC¸À¸ì¤Ç¤âµ¶¤È¤ß¤Ê¤µ¤ì¤Þ¤¹(¤Ä¤Þ¤ê0)¡¥</div><div class='del'>-</div><div class='del'>-  Qnil</div><div class='del'>-</div><div class='del'>-    C¸À¸ì¤«¤é¸«¤¿¡Önil¡×¡¥</div><div class='del'>-</div><div class='del'>-3.2 C¤ÈRuby¤Ç¶¦Í­¤µ¤ì¤ëÂç°èÊÑ¿ô</div><div class='del'>-</div><div class='del'>-C¤ÈRuby¤ÇÂç°èÊÑ¿ô¤ò»È¤Ã¤Æ¾ðÊó¤ò¶¦Í­¤Ç¤­¤Þ¤¹¡¥¶¦Í­¤Ç¤­¤ëÂç°è</div><div class='del'>-ÊÑ¿ô¤Ë¤Ï¤¤¤¯¤Ä¤«¤Î¼ïÎà¤¬¤¢¤ê¤Þ¤¹¡¥¤½¤Î¤Ê¤«¤Ç¤â¤Ã¤È¤âÎÉ¤¯»È¤ï</div><div class='del'>-¤ì¤ë¤È»×¤ï¤ì¤ë¤Î¤Ïrb_define_variable()¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_variable(const char *name, VALUE *var)</div><div class='del'>-</div><div class='del'>-¤³¤Î´Ø¿ô¤ÏRuby¤ÈC¤È¤Ç¶¦Í­¤¹¤ëÂç°èÊÑ¿ô¤òÄêµÁ¤·¤Þ¤¹¡¥ÊÑ¿ôÌ¾¤¬</div><div class='del'>-`$'¤Ç»Ï¤Þ¤é¤Ê¤¤»þ¤Ë¤Ï¼«Æ°Åª¤ËÄÉ²Ã¤µ¤ì¤Þ¤¹¡¥¤³¤ÎÊÑ¿ô¤ÎÃÍ¤òÊÑ</div><div class='del'>-¹¹¤¹¤ë¤È¼«Æ°Åª¤ËRuby¤ÎÂÐ±þ¤¹¤ëÊÑ¿ô¤ÎÃÍ¤âÊÑ¤ï¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¤Þ¤¿RubyÂ¦¤«¤é¤Ï¹¹¿·¤Ç¤­¤Ê¤¤ÊÑ¿ô¤â¤¢¤ê¤Þ¤¹¡¥¤³¤Îread only¤Î</div><div class='del'>-ÊÑ¿ô¤Ï°Ê²¼¤Î´Ø¿ô¤ÇÄêµÁ¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_readonly_variable(const char *name, VALUE *var)</div><div class='del'>-</div><div class='del'>-¤³¤ì¤éÊÑ¿ô¤ÎÂ¾¤Ëhook¤ò¤Ä¤±¤¿Âç°èÊÑ¿ô¤òÄêµÁ¤Ç¤­¤Þ¤¹¡¥hookÉÕ¤­</div><div class='del'>-¤ÎÂç°èÊÑ¿ô¤Ï°Ê²¼¤Î´Ø¿ô¤òÍÑ¤¤¤ÆÄêµÁ¤·¤Þ¤¹¡¥hookÉÕ¤­Âç°èÊÑ¿ô¤Î</div><div class='del'>-ÃÍ¤Î»²¾È¤äÀßÄê¤Ïhook¤Ç¹Ô¤¦É¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_hooked_variable(const char *name, VALUE *var,</div><div class='del'>-				 VALUE (*getter)(), void (*setter)())</div><div class='del'>-</div><div class='del'>-¤³¤Î´Ø¿ô¤ÏC¤Î´Ø¿ô¤Ë¤è¤Ã¤Æhook¤Î¤Ä¤±¤é¤ì¤¿Âç°èÊÑ¿ô¤òÄêµÁ¤·¤Þ</div><div class='del'>-¤¹¡¥ÊÑ¿ô¤¬»²¾È¤µ¤ì¤¿»þ¤Ë¤Ï´Ø¿ôgetter¤¬¡¤ÊÑ¿ô¤ËÃÍ¤¬¥»¥Ã¥È¤µ¤ì</div><div class='del'>-¤¿»þ¤Ë¤Ï´Ø¿ôsetter¤¬¸Æ¤Ð¤ì¤ë¡¥hook¤ò»ØÄê¤·¤Ê¤¤¾ì¹ç¤Ïgetter¤ä</div><div class='del'>-setter¤Ë0¤ò»ØÄê¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-# getter¤âsetter¤â0¤Ê¤é¤Ðrb_define_variable()¤ÈÆ±¤¸¤Ë¤Ê¤ë¡¥</div><div class='del'>-</div><div class='del'>-¤½¤ì¤«¤é¡¤C¤Î´Ø¿ô¤Ë¤è¤Ã¤Æ¼Â¸½¤µ¤ì¤ëRuby¤ÎÂç°èÊÑ¿ô¤òÄêµÁ¤¹¤ë</div><div class='del'>-´Ø¿ô¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_define_virtual_variable(const char *name,</div><div class='del'>-				  VALUE (*getter)(), void (*setter)())</div><div class='del'>-</div><div class='del'>-¤³¤Î´Ø¿ô¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤¿Ruby¤ÎÂç°èÊÑ¿ô¤¬»²¾È¤µ¤ì¤¿»þ¤Ë¤Ï</div><div class='del'>-getter¤¬¡¤ÊÑ¿ô¤ËÃÍ¤¬¥»¥Ã¥È¤µ¤ì¤¿»þ¤Ë¤Ïsetter¤¬¸Æ¤Ð¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-getter¤Èsetter¤Î»ÅÍÍ¤Ï°Ê²¼¤ÎÄÌ¤ê¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-  (*getter)(ID id, void *data, struct global_entry* entry);</div><div class='del'>-  (*setter)(VALUE val, ID id, void *data, struct global_entry* entry);</div><div class='del'>-</div><div class='del'>-3.3 C¤Î¥Ç¡¼¥¿¤òRuby¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤¹¤ë</div><div class='del'>-</div><div class='del'>-C¤ÎÀ¤³¦¤ÇÄêµÁ¤µ¤ì¤¿¥Ç¡¼¥¿(¹½Â¤ÂÎ)¤òRuby¤Î¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ</div><div class='del'>-¼è¤ê°·¤¤¤¿¤¤¾ì¹ç¤¬¤¢¤ê¤¨¤Þ¤¹¡¥¤³¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¡¤Data¤È¤¤¤¦</div><div class='del'>-Ruby¥ª¥Ö¥¸¥§¥¯¥È¤ËC¤Î¹½Â¤ÂÎ(¤Ø¤Î¥Ý¥¤¥ó¥¿)¤ò¤¯¤ë¤à¤³¤È¤ÇRuby</div><div class='del'>-¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ¼è¤ê°·¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-Data¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Æ¹½Â¤ÂÎ¤òRuby¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥«¥×¥»¥ë</div><div class='del'>-²½¤¹¤ë¤¿¤á¤Ë¤Ï¡¤°Ê²¼¤Î¥Þ¥¯¥í¤ò»È¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  Data_Wrap_Struct(klass, mark, free, ptr)</div><div class='del'>-</div><div class='del'>-¤³¤Î¥Þ¥¯¥í¤ÎÌá¤êÃÍ¤ÏÀ¸À®¤µ¤ì¤¿Data¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-klass¤Ï¤³¤ÎData¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¯¥é¥¹¤Ç¤¹¡¥ptr¤Ï¥«¥×¥»¥ë²½¤¹¤ë</div><div class='del'>-C¤Î¹½Â¤ÂÎ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¹¡¥mark¤Ï¤³¤Î¹½Â¤ÂÎ¤¬Ruby¤Î¥ª¥Ö¥¸¥§</div><div class='del'>-¥¯¥È¤Ø¤Î»²¾È¤¬¤¢¤ë»þ¤Ë»È¤¦´Ø¿ô¤Ç¤¹¡¥¤½¤Î¤è¤¦¤Ê»²¾È¤ò´Þ¤Þ¤Ê¤¤</div><div class='del'>-»þ¤Ë¤Ï0¤ò»ØÄê¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-# ¤½¤Î¤è¤¦¤Ê»²¾È¤Ï´«¤á¤é¤ì¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-free¤Ï¤³¤Î¹½Â¤ÂÎ¤¬¤â¤¦ÉÔÍ×¤Ë¤Ê¤Ã¤¿»þ¤Ë¸Æ¤Ð¤ì¤ë´Ø¿ô¤Ç¤¹¡¥¤³¤Î</div><div class='del'>-´Ø¿ô¤¬¥¬¡¼¥Ù¡¼¥¸¥³¥ì¥¯¥¿¤«¤é¸Æ¤Ð¤ì¤Þ¤¹¡¥¤³¤ì¤¬-1¤Î¾ì¹ç¤Ï¡¤Ã±</div><div class='del'>-½ã¤Ë³«Êü¤µ¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-C¤Î¹½Â¤ÂÎ¤Î³äÅö¤ÈData¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸À®¤òÆ±»þ¤Ë¹Ô¤¦¥Þ¥¯¥í¤È</div><div class='del'>-¤·¤Æ°Ê²¼¤Î¤â¤Î¤¬Äó¶¡¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  Data_Make_Struct(klass, type, mark, free, sval)</div><div class='del'>-</div><div class='del'>-¤³¤Î¥Þ¥¯¥í¤ÎÌá¤êÃÍ¤ÏÀ¸À®¤µ¤ì¤¿Data¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-klass, mark, free¤ÏData_Wrap_Struct¤ÈÆ±¤¸Æ¯¤­¤ò¤·¤Þ¤¹¡¥type</div><div class='del'>-¤Ï³ä¤êÅö¤Æ¤ëC¹½Â¤ÂÎ¤Î·¿¤Ç¤¹¡¥³ä¤êÅö¤Æ¤é¤ì¤¿¹½Â¤ÂÎ¤ÏÊÑ¿ôsval</div><div class='del'>-¤ËÂåÆþ¤µ¤ì¤Þ¤¹¡¥¤³¤ÎÊÑ¿ô¤Î·¿¤Ï (type*) ¤Ç¤¢¤ëÉ¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-Data¥ª¥Ö¥¸¥§¥¯¥È¤«¤é¥Ý¥¤¥ó¥¿¤ò¼è¤ê½Ð¤¹¤Î¤Ï°Ê²¼¤Î¥Þ¥¯¥í¤òÍÑ¤¤</div><div class='del'>-¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(obj, type, sval)</div><div class='del'>-</div><div class='del'>-C¤Î¹½Â¤ÂÎ¤Ø¤Î¥Ý¥¤¥ó¥¿¤ÏÊÑ¿ôsval¤ËÂåÆþ¤µ¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¤³¤ì¤é¤ÎData¤Î»È¤¤Êý¤Ï¤Á¤ç¤Ã¤ÈÊ¬¤«¤ê¤Ë¤¯¤¤¤Î¤Ç¡¤¸å¤ÇÀâÌÀ¤¹¤ë</div><div class='del'>-ÎãÂê¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-4¡¥ÎãÂê - dbm¥Ñ¥Ã¥±¡¼¥¸¤òºî¤ë</div><div class='del'>-</div><div class='del'>-¤³¤³¤Þ¤Ç¤ÎÀâÌÀ¤Ç¤È¤ê¤¢¤¨¤º³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ïºî¤ì¤ë¤Ï¤º¤Ç¤¹¡¥</div><div class='del'>-Ruby¤Îext¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¹¤Ç¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ëdbm¥é¥¤¥Ö¥é¥ê¤òÎã¤Ë</div><div class='del'>-¤·¤ÆÃÊ³¬Åª¤ËÀâÌÀ¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-(1) ¥Ç¥£¥ì¥¯¥È¥ê¤òºî¤ë</div><div class='del'>-</div><div class='del'>-  % mkdir ext/dbm</div><div class='del'>-</div><div class='del'>-Ruby 1.1¤«¤é¤ÏÇ¤°Õ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç¥À¥¤¥Ê¥ß¥Ã¥¯¥é¥¤¥Ö¥é¥ê¤òºî</div><div class='del'>-¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡¥Ruby¤ËÀÅÅª¤Ë¥ê¥ó¥¯¤¹¤ë¾ì¹ç¤Ë</div><div class='del'>-¤ÏRuby¤òÅ¸³«¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¡¤ext¥Ç¥£¥ì¥¯¥È¥ê¤ÎÃæ¤Ë³ÈÄ¥</div><div class='del'>-¥é¥¤¥Ö¥é¥êÍÑ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òºî¤ëÉ¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥Ì¾Á°¤ÏÅ¬Åö¤Ë</div><div class='del'>-Áª¤ó¤Ç¹½¤¤¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-(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'>-</div><div class='del'>-(3) C¥³¡¼¥É¤ò½ñ¤¯</div><div class='del'>-</div><div class='del'>-³ÈÄ¥¥é¥¤¥Ö¥é¥êËÜÂÎ¤È¤Ê¤ëC¸À¸ì¤Î¥½¡¼¥¹¤ò½ñ¤­¤Þ¤¹¡¥C¸À¸ì¤Î¥½¡¼</div><div class='del'>-¥¹¤¬¤Ò¤È¤Ä¤Î»þ¤Ë¤Ï¡Ö¥é¥¤¥Ö¥é¥êÌ¾.c¡×¤òÁª¤Ö¤ÈÎÉ¤¤¤Ç¤·¤ç¤¦¡¥C</div><div class='del'>-¸À¸ì¤Î¥½¡¼¥¹¤¬Ê£¿ô¤Î¾ì¹ç¤Ë¤ÏµÕ¤Ë¡Ö¥é¥¤¥Ö¥é¥êÌ¾.c¡×¤È¤¤¤¦¥Õ¥¡</div><div class='del'>-¥¤¥ëÌ¾¤ÏÈò¤±¤ëÉ¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥¥ª¥Ö¥¸¥§¥¯¥È¥Õ¥¡¥¤¥ë¤È¥â¥¸¥å¡¼</div><div class='del'>-¥ëÀ¸À®»þ¤ËÃæ´ÖÅª¤ËÀ¸À®¤µ¤ì¤ë¡Ö¥é¥¤¥Ö¥é¥êÌ¾.o¡×¤È¤¤¤¦¥Õ¥¡¥¤¥ë</div><div class='del'>-¤È¤¬¾×ÆÍ¤¹¤ë¤«¤é¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-Ruby¤Ï³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤¹¤ë»þ¤Ë¡ÖInit_¥é¥¤¥Ö¥é¥êÌ¾¡×¤È</div><div class='del'>-¤¤¤¦´Ø¿ô¤ò¼«Æ°Åª¤Ë¼Â¹Ô¤·¤Þ¤¹¡¥dbm¥é¥¤¥Ö¥é¥ê¤Î¾ì¹ç¡ÖInit_dbm¡×</div><div class='del'>-¤Ç¤¹¡¥¤³¤Î´Ø¿ô¤ÎÃæ¤Ç¥¯¥é¥¹¡¤¥â¥¸¥å¡¼¥ë¡¤¥á¥½¥Ã¥É¡¤Äê¿ô¤Ê¤É¤Î</div><div class='del'>-ÄêµÁ¤ò¹Ô¤¤¤Þ¤¹¡¥dbm.c¤«¤é°ìÉô°úÍÑ¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-Init_dbm()</div><div class='del'>-{</div><div class='del'>-    /* DBM¥¯¥é¥¹¤òÄêµÁ¤¹¤ë */</div><div class='del'>-    cDBM = rb_define_class("DBM", rb_cObject);</div><div class='del'>-    /* DBM¤ÏEnumerate¥â¥¸¥å¡¼¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë */</div><div class='del'>-    rb_include_module(cDBM, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    /* DBM¥¯¥é¥¹¤Î¥¯¥é¥¹¥á¥½¥Ã¥Éopen(): °ú¿ô¤ÏC¤ÎÇÛÎó¤Ç¼õ¤±¤ë */</div><div class='del'>-    rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);</div><div class='del'>-</div><div class='del'>-    /* DBM¥¯¥é¥¹¤Î¥á¥½¥Ã¥Éclose(): °ú¿ô¤Ï¤Ê¤· */</div><div class='del'>-    rb_define_method(cDBM, "close", fdbm_close, 0);</div><div class='del'>-    /* DBM¥¯¥é¥¹¤Î¥á¥½¥Ã¥É[]: °ú¿ô¤Ï1¸Ä */</div><div class='del'>-    rb_define_method(cDBM, "[]", fdbm_fetch, 1);</div><div class='del'>-		:</div><div class='del'>-</div><div class='del'>-    /* DBM¥Ç¡¼¥¿¤ò³ÊÇ¼¤¹¤ë¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ôÌ¾¤Î¤¿¤á¤ÎID */</div><div class='del'>-    id_dbm = rb_intern("dbm");</div><div class='del'>-}</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-DBM¥é¥¤¥Ö¥é¥ê¤Ïdbm¤Î¥Ç¡¼¥¿¤ÈÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ê¤ë¤Ï¤º¤Ç</div><div class='del'>-¤¹¤«¤é¡¤C¤ÎÀ¤³¦¤Îdbm¤òRuby¤ÎÀ¤³¦¤Ë¼è¤ê¹þ¤àÉ¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-dbm.c¤Ç¤ÏData_Make_Struct¤ò°Ê²¼¤Î¤è¤¦¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-struct dbmdata {</div><div class='del'>-    int  di_size;</div><div class='del'>-    DBM *di_dbm;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp);</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-¤³¤³¤Ç¤Ïdbmstruct¹½Â¤ÂÎ¤Ø¤Î¥Ý¥¤¥ó¥¿¤òData¤Ë¥«¥×¥»¥ë²½¤·¤Æ¤¤</div><div class='del'>-¤Þ¤¹¡¥DBM*¤òÄ¾ÀÜ¥«¥×¥»¥ë²½¤·¤Ê¤¤¤Î¤Ïclose()¤·¤¿»þ¤Î½èÍý¤ò¹Í</div><div class='del'>-¤¨¤Æ¤Î¤³¤È¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-Data¥ª¥Ö¥¸¥§¥¯¥È¤«¤édbmstruct¹½Â¤ÂÎ¤Î¥Ý¥¤¥ó¥¿¤ò¼è¤ê½Ð¤¹¤¿¤á</div><div class='del'>-¤Ë°Ê²¼¤Î¥Þ¥¯¥í¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-#define GetDBM(obj, dbmp) {\</div><div class='del'>-    Data_Get_Struct(obj, struct dbmdata, dbmp);\</div><div class='del'>-    if (dbmp-&gt;di_dbm == 0) closed_dbm();\</div><div class='del'>-}</div><div class='del'>---</div><div class='del'>-</div><div class='del'>-¤Á¤ç¤Ã¤ÈÊ£»¨¤Ê¥Þ¥¯¥í¤Ç¤¹¤¬¡¤Í×¤¹¤ë¤Ëdbmdata¹½Â¤ÂÎ¤Î¥Ý¥¤¥ó¥¿</div><div class='del'>-¤Î¼è¤ê½Ð¤·¤È¡¤close¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤Î¥Á¥§¥Ã¥¯¤ò¤Þ¤È¤á¤Æ¤¤</div><div class='del'>-¤ë¤À¤±¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-DBM¥¯¥é¥¹¤Ë¤Ï¤¿¤¯¤µ¤ó¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¤¬¡¤Ê¬Îà¤¹¤ë¤È3¼ïÎà¤Î</div><div class='del'>-°ú¿ô¤Î¼õ¤±Êý¤¬¤¢¤ê¤Þ¤¹¡¥¤Ò¤È¤Ä¤Ï°ú¿ô¤Î¿ô¤¬¸ÇÄê¤Î¤â¤Î¤Ç¡¤Îã¤È</div><div class='del'>-¤·¤Æ¤Ïdelete¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¡¥delete¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Æ¤¤¤ë</div><div class='del'>-fdbm_delete()¤Ï¤³¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_delete(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</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°ú¿ô¤¬self¡¤Âè2°ú¿ô°Ê¹ß¤¬¥á¥½¥Ã¥É</div><div class='del'>-¤Î°ú¿ô¤È¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-°ú¿ô¤Î¿ô¤¬ÉÔÄê¤Î¤â¤Î¤ÏC¤ÎÇÛÎó¤Ç¼õ¤±¤ë¤â¤Î¤ÈRuby¤ÎÇÛÎó¤Ç¼õ¤±</div><div class='del'>-¤ë¤â¤Î¤È¤¬¤¢¤ê¤Þ¤¹¡¥dbm¥é¥¤¥Ö¥é¥ê¤ÎÃæ¤Ç¡¤C¤ÎÇÛÎó¤Ç¼õ¤±¤ë¤â¤Î</div><div class='del'>-¤ÏDBM¤Î¥¯¥é¥¹¥á¥½¥Ã¥É¤Ç¤¢¤ëopen()¤Ç¤¹¡¥¤³¤ì¤ò¼ÂÁõ¤·¤Æ¤¤¤ë´Ø</div><div class='del'>-¿ôfdbm_s_open()¤Ï¤³¤¦¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-	:</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;file, &amp;vmode) == 1) {</div><div class='del'>-	mode = 0666;		/* default value */</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°ú¿ô¤¬Í¿¤¨¤é¤ì¤¿°ú¿ô¤Î¿ô¡¤Âè2°ú¿ô¤¬Í¿¤¨</div><div class='del'>-¤é¤ì¤¿°ú¿ô¤ÎÆþ¤Ã¤Æ¤¤¤ëÇÛÎó¤Ë¤Ê¤ê¤Þ¤¹¡¥self¤ÏÂè3°ú¿ô¤È¤·¤ÆÍ¿</div><div class='del'>-¤¨¤é¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-¤³¤ÎÇÛÎó¤ÇÍ¿¤¨¤é¤ì¤¿°ú¿ô¤ò²òÀÏ¤¹¤ë¤¿¤á¤Î´Ø¿ô¤¬open()¤Ç¤â»È¤ï</div><div class='del'>-¤ì¤Æ¤¤¤ërb_scan_args()¤Ç¤¹¡¥Âè3°ú¿ô¤Ë»ØÄê¤·¤¿¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë</div><div class='del'>-½¾¤¤¡¤Âè4ÊÑ¿ô°Ê¹ß¤Ë»ØÄê¤·¤¿ÊÑ¿ô¤ËÃÍ¤òÂåÆþ¤·¤Æ¤¯¤ì¤Þ¤¹¡¥¤³¤Î</div><div class='del'>-¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï¡¤Âè1Ê¸»úÌÜ¤¬¾ÊÎ¬¤Ç¤­¤Ê¤¤°ú¿ô¤Î¿ô¡¤Âè2Ê¸»úÌÜ¤¬</div><div class='del'>-¾ÊÎ¬¤Ç¤­¤ë°ú¿ô¤Î¿ô¡¤Âè3Ê¸»úÌÜ¤¬ÂÐ±þ¤¹¤ëÁê¼ê¤¬Ìµ¤¤¤¢¤Þ¤ê¤Î°ú</div><div class='del'>-¿ô¤¬¤¢¤ë¤«¤É¤¦¤«¤ò¼¨¤¹"*"¤Ç¤¹¡¥2Ê¸»úÌÜ¤È3Ê¸»úÌÜ¤Ï¾ÊÎ¬¤Ç¤­¤Þ</div><div class='del'>-¤¹¡¥dbm.c¤ÎÎã¤Ç¤Ï¡¤¥Õ¥©¡¼¥Þ¥Ã¥È¤Ï"11"¤Ç¤¹¤«¤é¡¤°ú¿ô¤ÏºÇÄã1¤Ä</div><div class='del'>-¤Ç¡¤2¤Ä¤Þ¤Çµö¤µ¤ì¤ë¤È¤¤¤¦°ÕÌ£¤Ë¤Ê¤ê¤Þ¤¹¡¥¾ÊÎ¬¤µ¤ì¤Æ¤¤¤ë»þ¤Î</div><div class='del'>-ÊÑ¿ô¤ÎÃÍ¤Ïnil(C¸À¸ì¤Î¥ì¥Ù¥ë¤Ç¤ÏQnil)¤Ë¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-Ruby¤ÎÇÛÎó¤Ç°ú¿ô¤ò¼õ¤±¼è¤ë¤â¤Î¤Ïindexes¤¬¤¢¤ê¤Þ¤¹¡¥¼ÂÁõ¤Ï¤³</div><div class='del'>-¤¦¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>---</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_indexes(obj, args)</div><div class='del'>-    VALUE obj, args;</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°ú¿ô¤Ïself¡¤Âè2°ú¿ô¤ÏRuby¤ÎÇÛÎó¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-** Ãí°Õ»ö¹à</div><div class='del'>-</div><div class='del'>-Ruby¤È¶¦Í­¤Ï¤·¤Ê¤¤¤¬Ruby¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò³ÊÇ¼¤¹¤ë²ÄÇ½À­¤Î¤¢¤ë</div><div class='del'>-C¤ÎÂç°èÊÑ¿ô¤Ï°Ê²¼¤Î´Ø¿ô¤ò»È¤Ã¤ÆRuby¥¤¥ó¥¿¥×¥ê¥¿¤ËÊÑ¿ô¤ÎÂ¸ºß</div><div class='del'>-¤ò¶µ¤¨¤Æ¤¢¤²¤Æ¤¯¤À¤µ¤¤¡¥¤Ç¤Ê¤¤¤ÈGC¤Ç¥È¥é¥Ö¥ë¤òµ¯¤³¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  void rb_global_variable(VALUE *var)</div><div class='del'>-</div><div class='del'>-(4) extconf.rb¤òÍÑ°Õ¤¹¤ë</div><div class='del'>-</div><div class='del'>-Makefile¤òºî¤ë¾ì¹ç¤Î¿÷·¿¤Ë¤Ê¤ëextconf.rb¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºî¤ê</div><div class='del'>-¤Þ¤¹¡¥extconf.rb¤Ï¥é¥¤¥Ö¥é¥ê¤Î¥³¥ó¥Ñ¥¤¥ë¤ËÉ¬Í×¤Ê¾ò·ï¤Î¥Á¥§¥Ã</div><div class='del'>-¥¯¤Ê¤É¤ò¹Ô¤¦¤³¤È¤¬ÌÜÅª¤Ç¤¹¡¥¤Þ¤º¡¤</div><div class='del'>-</div><div class='del'>-  require 'mkmf'</div><div class='del'>-</div><div class='del'>-¤òextconf.rb¤ÎÀèÆ¬¤ËÃÖ¤­¤Þ¤¹¡¥extconf.rb¤ÎÃæ¤Ç¤Ï°Ê²¼¤ÎRuby´Ø</div><div class='del'>-¿ô¤ò»È¤¦¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  have_library(lib, func): ¥é¥¤¥Ö¥é¥ê¤ÎÂ¸ºß¥Á¥§¥Ã¥¯</div><div class='del'>-  have_func(func, header): ´Ø¿ô¤ÎÂ¸ºß¥Á¥§¥Ã¥¯</div><div class='del'>-  have_header(header): ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ÎÂ¸ºß¥Á¥§¥Ã¥¯</div><div class='del'>-  create_makefile(target): Makefile¤ÎÀ¸À®</div><div class='del'>-</div><div class='del'>-°Ê²¼¤ÎÊÑ¿ô¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  $CFLAGS: ¥³¥ó¥Ñ¥¤¥ë»þ¤ËÄÉ²ÃÅª¤Ë»ØÄê¤¹¤ë¥Õ¥é¥°(-O¤Ê¤É)</div><div class='del'>-  $CPPFLAGS: ¥×¥ê¥×¥í¥»¥Ã¥µ¤ËÄÉ²ÃÅª¤Ë»ØÄê¤¹¤ë¥Õ¥é¥°(-I¤ä-D¤Ê¤É)</div><div class='del'>-  $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='del'>-</div><div class='del'>-¥é¥¤¥Ö¥é¥ê¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¾ò·ï¤¬Â·¤ï¤º¡¤¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥³¥ó</div><div class='del'>-¥Ñ¥¤¥ë¤·¤Ê¤¤»þ¤Ë¤Ïcreate_makefile¤ò¸Æ¤Ð¤Ê¤±¤ì¤ÐMakefile¤ÏÀ¸</div><div class='del'>-À®¤µ¤ì¤º¡¤¥³¥ó¥Ñ¥¤¥ë¤â¹Ô¤ï¤ì¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-(5) depend¤òÍÑ°Õ¤¹¤ë</div><div class='del'>-</div><div class='del'>-¤â¤·¡¤¥Ç¥£¥ì¥¯¥È¥ê¤Ëdepend¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹¤ì¤Ð¡¤</div><div class='del'>-Makefile¤¬°ÍÂ¸´Ø·¸¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  % gcc -MM *.c &gt; depend</div><div class='del'>-</div><div class='del'>-¤Ê¤É¤Çºî¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥¤¢¤Ã¤ÆÂ»¤ÏÌµ¤¤¤Ç¤·¤ç¤¦¡¥</div><div class='del'>-</div><div class='del'>-(6) Makefile¤òÀ¸À®¤¹¤ë</div><div class='del'>-</div><div class='del'>-Makefile¤ò¼ÂºÝ¤ËÀ¸À®¤¹¤ë¤¿¤á¤Ë¤Ï</div><div class='del'>-</div><div class='del'>-  ruby extconf.rb</div><div class='del'>-</div><div class='del'>-¤È¤·¤Þ¤¹¡¥extconf.rb¤Ë require 'mkmf' ¤Î¹Ô¤¬¤Ê¤¤¾ì¹ç¤Ë¤Ï¥¨¥é¡¼</div><div class='del'>-¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¤°ú¿ô¤òÄÉ²Ã¤·¤Æ</div><div class='del'>-</div><div class='del'>-  ruby -r mkmf extconf.rb</div><div class='del'>-</div><div class='del'>-¤È¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-site_ruby ¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤Ê¤¯¡¢</div><div class='del'>-vendor_ruby ¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¾ì¹ç¤Ë¤Ï</div><div class='del'>-°Ê²¼¤Î¤è¤¦¤Ë --vendor ¥ª¥×¥·¥ç¥ó¤ò²Ã¤¨¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-  ruby extconf.rb --vendor</div><div class='del'>-</div><div class='del'>-¥Ç¥£¥ì¥¯¥È¥ê¤òext°Ê²¼¤ËÍÑ°Õ¤·¤¿¾ì¹ç¤Ë¤ÏRubyÁ´ÂÎ¤Îmake¤Î»þ¤Ë</div><div class='del'>-¼«Æ°Åª¤ËMakefile¤¬À¸À®¤µ¤ì¤Þ¤¹¤Î¤Ç¡¤¤³¤Î¥¹¥Æ¥Ã¥×¤ÏÉÔÍ×¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-(7) make¤¹¤ë</div><div class='del'>-</div><div class='del'>-Æ°Åª¥ê¥ó¥¯¥é¥¤¥Ö¥é¥ê¤òÀ¸À®¤¹¤ë¾ì¹ç¤Ë¤Ï¤½¤Î¾ì¤Çmake¤·¤Æ¤¯¤À¤µ</div><div class='del'>-¤¤¡¥É¬Í×¤Ç¤¢¤ì¤Ð make install ¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-ext°Ê²¼¤Ë¥Ç¥£¥ì¥¯¥È¥ê¤òÍÑ°Õ¤·¤¿¾ì¹ç¤Ï¡¤Ruby¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ç</div><div class='del'>-make¤ò¼Â¹Ô¤¹¤ë¤ÈMakefile¤òÀ¸À®¤«¤émake¡¤É¬Í×¤Ë¤è¤Ã¤Æ¤Ï¤½¤Î¥â</div><div class='del'>-¥¸¥å¡¼¥ë¤ÎRuby¤Ø¤Î¥ê¥ó¥¯¤Þ¤Ç¼«Æ°Åª¤Ë¼Â¹Ô¤·¤Æ¤¯¤ì¤Þ¤¹¡¥</div><div class='del'>-extconf.rb¤ò½ñ¤­´¹¤¨¤ë¤Ê¤É¤·¤ÆMakefile¤ÎºÆÀ¸À®¤¬É¬Í×¤Ê»þ¤Ï¤Þ</div><div class='del'>-¤¿Ruby¥Ç¥£¥ì¥¯¥È¥ê¤Çmake¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ïmake install¤ÇRuby¥é¥¤¥Ö¥é¥ê¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î</div><div class='del'>-²¼¤Ë¥³¥Ô¡¼¤µ¤ì¤Þ¤¹¡¥¤â¤·³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤È¶¨Ä´¤·¤Æ»È¤¦Ruby¤Çµ­</div><div class='del'>-½Ò¤µ¤ì¤¿¥×¥í¥°¥é¥à¤¬¤¢¤ê¡¤Ruby¥é¥¤¥Ö¥é¥ê¤ËÃÖ¤­¤¿¤¤¾ì¹ç¤Ë¤Ï¡¤</div><div class='del'>-³ÈÄ¥¥é¥¤¥Ö¥é¥êÍÑ¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Î²¼¤Ë lib ¤È¤¤¤¦¥Ç¥£¥ì¥¯¥È¥ê</div><div class='del'>-¤òºî¤ê¡¤¤½¤³¤Ë ³ÈÄ¥»Ò .rb ¤Î¥Õ¥¡¥¤¥ë¤òÃÖ¤¤¤Æ¤ª¤±¤ÐÆ±»þ¤Ë¥¤¥ó</div><div class='del'>-¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-(8) ¥Ç¥Ð¥Ã¥°</div><div class='del'>-</div><div class='del'>-¤Þ¤¢¡¤¥Ç¥Ð¥Ã¥°¤·¤Ê¤¤¤ÈÆ°¤«¤Ê¤¤¤Ç¤·¤ç¤¦¤Í¡¥ext/Setup¤Ë¥Ç¥£¥ì</div><div class='del'>-¥¯¥È¥êÌ¾¤ò½ñ¤¯¤ÈÀÅÅª¤Ë¥ê¥ó¥¯¤¹¤ë¤Î¤Ç¥Ç¥Ð¥Ã¥¬¤¬»È¤¨¤ë¤è¤¦¤Ë¤Ê</div><div class='del'>-¤ê¤Þ¤¹¡¥¤½¤ÎÊ¬¥³¥ó¥Ñ¥¤¥ë¤¬ÃÙ¤¯¤Ê¤ê¤Þ¤¹¤±¤É¡¥</div><div class='del'>-</div><div class='del'>-(9) ¤Ç¤­¤¢¤¬¤ê</div><div class='del'>-</div><div class='del'>-¸å¤Ï¤³¤Ã¤½¤ê»È¤¦¤Ê¤ê¡¤¹­¤¯¸ø³«¤¹¤ë¤Ê¤ê¡¤Çä¤ë¤Ê¤ê¡¤¤´¼«Í³¤Ë¤ª</div><div class='del'>-»È¤¤¤¯¤À¤µ¤¤¡¥Ruby¤Îºî¼Ô¤Ï³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ë´Ø¤·¤Æ°ìÀÚ¤Î¸¢Íø¤ò</div><div class='del'>-¼çÄ¥¤·¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-Appendix A. Ruby¤Î¥½¡¼¥¹¥³¡¼¥É¤ÎÊ¬Îà</div><div class='del'>-</div><div class='del'>-Ruby¤Î¥½¡¼¥¹¤Ï¤¤¤¯¤Ä¤«¤ËÊ¬Îà¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡¥¤³¤Î¤¦¤Á¥¯¥é</div><div class='del'>-¥¹¥é¥¤¥Ö¥é¥ê¤ÎÉôÊ¬¤Ï´ðËÜÅª¤Ë³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤ÈÆ±¤¸ºî¤êÊý¤Ë¤Ê¤Ã</div><div class='del'>-¤Æ¤¤¤Þ¤¹¡¥¤³¤ì¤é¤Î¥½¡¼¥¹¤Ïº£¤Þ¤Ç¤ÎÀâÌÀ¤Ç¤Û¤È¤ó¤ÉÍý²ò¤Ç¤­¤ë¤È</div><div class='del'>-»×¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-Ruby¸À¸ì¤Î¥³¥¢</div><div class='del'>-</div><div class='del'>-  class.c</div><div class='del'>-  error.c</div><div class='del'>-  eval.c</div><div class='del'>-  gc.c</div><div class='del'>-  object.c</div><div class='del'>-  parse.y</div><div class='del'>-  variable.c</div><div class='del'>-</div><div class='del'>-¥æ¡¼¥Æ¥£¥ê¥Æ¥£´Ø¿ô</div><div class='del'>-</div><div class='del'>-  dln.c</div><div class='del'>-  regex.c</div><div class='del'>-  st.c</div><div class='del'>-  util.c</div><div class='del'>-</div><div class='del'>-Ruby¥³¥Þ¥ó¥É¤Î¼ÂÁõ</div><div class='del'>-</div><div class='del'>-  dmyext.c</div><div class='del'>-  inits.c</div><div class='del'>-  main.c</div><div class='del'>-  ruby.c</div><div class='del'>-  version.c</div><div class='del'>-</div><div class='del'>-¥¯¥é¥¹¥é¥¤¥Ö¥é¥ê</div><div class='del'>-</div><div class='del'>-  array.c</div><div class='del'>-  bignum.c</div><div class='del'>-  compar.c</div><div class='del'>-  dir.c</div><div class='del'>-  enum.c</div><div class='del'>-  file.c</div><div class='del'>-  hash.c</div><div class='del'>-  io.c</div><div class='del'>-  marshal.c</div><div class='del'>-  math.c</div><div class='del'>-  numeric.c</div><div class='del'>-  pack.c</div><div class='del'>-  prec.c</div><div class='del'>-  process.c</div><div class='del'>-  random.c</div><div class='del'>-  range.c</div><div class='del'>-  re.c</div><div class='del'>-  signal.c</div><div class='del'>-  sprintf.c</div><div class='del'>-  string.c</div><div class='del'>-  struct.c</div><div class='del'>-  time.c</div><div class='del'>-</div><div class='del'>-Appendix B. ³ÈÄ¥ÍÑ´Ø¿ô¥ê¥Õ¥¡¥ì¥ó¥¹</div><div class='del'>-</div><div class='del'>-C¸À¸ì¤«¤éRuby¤Îµ¡Ç½¤òÍøÍÑ¤¹¤ëAPI¤Ï°Ê²¼¤ÎÄÌ¤ê¤Ç¤¢¤ë¡¥</div><div class='del'>-</div><div class='del'>-** ·¿</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-</div><div class='del'>-  Ruby¥ª¥Ö¥¸¥§¥¯¥È¤òÉ½¸½¤¹¤ë·¿¡¥É¬Í×¤Ë±þ¤¸¤Æ¥­¥ã¥¹¥È¤·¤ÆÍÑ¤¤¤ë¡¥</div><div class='del'>-  ÁÈ¤ß¹þ¤ß·¿¤òÉ½¸½¤¹¤ëC¤Î·¿¤Ïruby.h¤Ëµ­½Ò¤·¤Æ¤¢¤ëR¤Ç»Ï¤Þ¤ë¹½Â¤</div><div class='del'>-  ÂÎ¤Ç¤¢¤ë¡¥VALUE·¿¤ò¤³¤ì¤é¤Ë¥­¥ã¥¹¥È¤¹¤ë¤¿¤á¤ËR¤Ç»Ï¤Þ¤ë¹½Â¤ÂÎ</div><div class='del'>-  Ì¾¤òÁ´¤ÆÂçÊ¸»ú¤Ë¤·¤¿Ì¾Á°¤Î¥Þ¥¯¥í¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¡¥</div><div class='del'>-</div><div class='del'>-** ÊÑ¿ô¡¦Äê¿ô</div><div class='del'>-</div><div class='del'>-Qnil</div><div class='del'>-</div><div class='del'>-  Äê¿ô: nil¥ª¥Ö¥¸¥§¥¯¥È</div><div class='del'>-</div><div class='del'>-Qtrue</div><div class='del'>-</div><div class='del'>-  Äê¿ô: true¥ª¥Ö¥¸¥§¥¯¥È(¿¿¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ)</div><div class='del'>-</div><div class='del'>-Qfalse</div><div class='del'>-</div><div class='del'>-  Äê¿ô: false¥ª¥Ö¥¸¥§¥¯¥È</div><div class='del'>-</div><div class='del'>-** C¥Ç¡¼¥¿¤Î¥«¥×¥»¥ë²½</div><div class='del'>-</div><div class='del'>-Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval)</div><div class='del'>-</div><div class='del'>-  C¤ÎÇ¤°Õ¤Î¥Ý¥¤¥ó¥¿¤ò¥«¥×¥»¥ë²½¤·¤¿Ruby¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¡¥¤³</div><div class='del'>-  ¤Î¥Ý¥¤¥ó¥¿¤¬Ruby¤«¤é¥¢¥¯¥»¥¹¤µ¤ì¤Ê¤¯¤Ê¤Ã¤¿»þ¡¤free¤Ç»ØÄê¤·¤¿</div><div class='del'>-  ´Ø¿ô¤¬¸Æ¤Ð¤ì¤ë¡¥¤Þ¤¿¡¤¤³¤Î¥Ý¥¤¥ó¥¿¤Î»Ø¤¹¥Ç¡¼¥¿¤¬Â¾¤ÎRuby¥ª¥Ö</div><div class='del'>-  ¥¸¥§¥¯¥È¤ò»Ø¤·¤Æ¤¤¤ë¾ì¹ç¡¤mark¤Ë»ØÄê¤¹¤ë´Ø¿ô¤Ç¥Þ¡¼¥¯¤¹¤ëÉ¬Í×</div><div class='del'>-  ¤¬¤¢¤ë¡¥</div><div class='del'>-</div><div class='del'>-Data_Make_Struct(klass, type, mark, free, sval)</div><div class='del'>-</div><div class='del'>-  type·¿¤Î¥á¥â¥ê¤òmalloc¤·¡¤ÊÑ¿ôsval¤ËÂåÆþ¤·¤¿¸å¡¤¤½¤ì¤ò¥«¥×¥»</div><div class='del'>-  ¥ë²½¤·¤¿¥Ç¡¼¥¿¤òÊÖ¤¹¥Þ¥¯¥í¡¥</div><div class='del'>-</div><div class='del'>-Data_Get_Struct(data, type, sval)</div><div class='del'>-</div><div class='del'>-  data¤«¤étype·¿¤Î¥Ý¥¤¥ó¥¿¤ò¼è¤ê½Ð¤·ÊÑ¿ôsval¤ËÂåÆþ¤¹¤ë¥Þ¥¯¥í¡¥</div><div class='del'>-</div><div class='del'>-** ·¿¥Á¥§¥Ã¥¯</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'>-** ·¿ÊÑ´¹</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='del'>-** ¥¯¥é¥¹/¥â¥¸¥å¡¼¥ëÄêµÁ</div><div class='del'>-</div><div class='del'>-VALUE rb_define_class(const char *name, VALUE super)</div><div class='del'>-</div><div class='del'>-  super¤Î¥µ¥Ö¥¯¥é¥¹¤È¤·¤Æ¿·¤·¤¤Ruby¥¯¥é¥¹¤òÄêµÁ¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-VALUE rb_define_class_under(VALUE module, const char *name, VALUE super)</div><div class='del'>-</div><div class='del'>-  super¤Î¥µ¥Ö¥¯¥é¥¹¤È¤·¤Æ¿·¤·¤¤Ruby¥¯¥é¥¹¤òÄêµÁ¤·¡¤module¤Î</div><div class='del'>-  Äê¿ô¤È¤·¤ÆÄêµÁ¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-VALUE rb_define_module(const char *name)</div><div class='del'>-</div><div class='del'>-  ¿·¤·¤¤Ruby¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-VALUE rb_define_module_under(VALUE module, const char *name)</div><div class='del'>-</div><div class='del'>-  ¿·¤·¤¤Ruby¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤·¡¤module¤ÎÄê¿ô¤È¤·¤ÆÄêµÁ¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-void rb_include_module(VALUE klass, VALUE module)</div><div class='del'>-</div><div class='del'>-  ¥â¥¸¥å¡¼¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë¡¥class¤¬¤¹¤Ç¤Ëmodule¤ò¥¤¥ó¥¯</div><div class='del'>-  ¥ë¡¼¥É¤·¤Æ¤¤¤ë»þ¤Ë¤Ï²¿¤â¤·¤Ê¤¤(Â¿½Å¥¤¥ó¥¯¥ë¡¼¥É¤Î¶Ø»ß)¡¥</div><div class='del'>-</div><div class='del'>-void rb_extend_object(VALUE object, VALUE module)</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 rb_define_variable(const char *name, VALUE *var)</div><div class='del'>-</div><div class='del'>-  Ruby¤ÈC¤È¤Ç¶¦Í­¤¹¤ë¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÄêµÁ¤¹¤ë¡¥ÊÑ¿ôÌ¾¤¬`$'¤Ç</div><div class='del'>-  »Ï¤Þ¤é¤Ê¤¤»þ¤Ë¤Ï¼«Æ°Åª¤ËÄÉ²Ã¤µ¤ì¤ë¡¥name¤È¤·¤ÆRuby¤Î¼±ÊÌ»Ò</div><div class='del'>-  ¤È¤·¤Æµö¤µ¤ì¤Ê¤¤Ê¸»ú(Îã¤¨¤Ð` ')¤ò´Þ¤à¾ì¹ç¤Ë¤ÏRuby¥×¥í¥°¥é</div><div class='del'>-  ¥à¤«¤é¤Ï¸«¤¨¤Ê¤¯¤Ê¤ë¡¥</div><div class='del'>-</div><div class='del'>-void rb_define_readonly_variable(const char *name, VALUE *var)</div><div class='del'>-</div><div class='del'>-  Ruby¤ÈC¤È¤Ç¶¦Í­¤¹¤ëread only¤Î¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÄêµÁ¤¹¤ë¡¥</div><div class='del'>-  read only¤Ç¤¢¤ë¤³¤È°Ê³°¤Ïrb_define_variable()¤ÈÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-void rb_define_virtual_variable(const char *name,</div><div class='del'>-				VALUE (*getter)(), void (*setter)())</div><div class='del'>-</div><div class='del'>-  ´Ø¿ô¤Ë¤è¤Ã¤Æ¼Â¸½¤µ¤ì¤ëRubyÊÑ¿ô¤òÄêµÁ¤¹¤ë¡¥ÊÑ¿ô¤¬»²¾È¤µ¤ì¤¿</div><div class='del'>-  »þ¤Ë¤Ïgetter¤¬¡¤ÊÑ¿ô¤ËÃÍ¤¬¥»¥Ã¥È¤µ¤ì¤¿»þ¤Ë¤Ïsetter¤¬¸Æ¤Ð¤ì</div><div class='del'>-  ¤ë¡¥</div><div class='del'>-</div><div class='del'>-void rb_define_hooked_variable(const char *name, VALUE *var,</div><div class='del'>-			       VALUE (*getter)(), void (*setter)())</div><div class='del'>-</div><div class='del'>-  ´Ø¿ô¤Ë¤è¤Ã¤Æhook¤Î¤Ä¤±¤é¤ì¤¿¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤òÄêµÁ¤¹¤ë¡¥ÊÑ¿ô</div><div class='del'>-  ¤¬»²¾È¤µ¤ì¤¿»þ¤Ë¤Ïgetter¤¬¡¤´Ø¿ô¤ËÃÍ¤¬¥»¥Ã¥È¤µ¤ì¤¿»þ¤Ë¤Ï</div><div class='del'>-  setter¤¬¸Æ¤Ð¤ì¤ë¡¥getter¤äsetter¤Ë0¤ò»ØÄê¤·¤¿»þ¤Ë¤Ïhook¤ò</div><div class='del'>-  »ØÄê¤·¤Ê¤¤¤Î¤ÈÆ±¤¸»ö¤Ë¤Ê¤ë¡¥</div><div class='del'>-</div><div class='del'>-void rb_global_variable(VALUE *var)</div><div class='del'>-</div><div class='del'>-  GC¤Î¤¿¤á¡¤Ruby¥×¥í¥°¥é¥à¤«¤é¤Ï¥¢¥¯¥»¥¹¤µ¤ì¤Ê¤¤¤¬, Ruby¥ª¥Ö</div><div class='del'>-  ¥¸¥§¥¯¥È¤ò´Þ¤àÂç°èÊÑ¿ô¤ò¥Þ¡¼¥¯¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-** Äê¿ô</div><div class='del'>-</div><div class='del'>-void rb_define_const(VALUE klass, const char *name, VALUE val)</div><div class='del'>-</div><div class='del'>-  Äê¿ô¤òÄêµÁ¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-void rb_define_global_const(const char *name, VALUE val)</div><div class='del'>-</div><div class='del'>-  Âç°èÄê¿ô¤òÄêµÁ¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-     rb_define_const(rb_cObject, name, val)</div><div class='del'>-</div><div class='del'>-  ¤ÈÆ±¤¸°ÕÌ£¡¥</div><div class='del'>-</div><div class='del'>-** ¥á¥½¥Ã¥ÉÄêµÁ</div><div class='del'>-</div><div class='del'>-rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-  ¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¡¥argc¤Ïself¤ò½ü¤¯°ú¿ô¤Î¿ô¡¥argc¤¬-1¤Î»þ, </div><div class='del'>-  ´Ø¿ô¤Ë¤Ï°ú¿ô¤Î¿ô(self¤ò´Þ¤Þ¤Ê¤¤)¤òÂè1°ú¿ô, °ú¿ô¤ÎÇÛÎó¤òÂè2</div><div class='del'>-  °ú¿ô¤È¤¹¤ë·Á¼°¤ÇÍ¿¤¨¤é¤ì¤ë(Âè3°ú¿ô¤Ïself)¡¥argc¤¬-2¤Î»þ, </div><div class='del'>-  Âè1°ú¿ô¤¬self, Âè2°ú¿ô¤¬args(args¤Ï°ú¿ô¤ò´Þ¤àRuby¤ÎÇÛÎó)¤È</div><div class='del'>-  ¤¤¤¦·Á¼°¤ÇÍ¿¤¨¤é¤ì¤ë¡¥</div><div class='del'>- </div><div class='del'>-rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-  private¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¡¥°ú¿ô¤Ïrb_define_method()¤ÈÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc)</div><div class='del'>-</div><div class='del'>-  ÆÃ°Û¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¡¥°ú¿ô¤Ïrb_define_method()¤ÈÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-rb_scan_args(int argc, VALUE *argv, const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-  argc, argv·Á¼°¤ÇÍ¿¤¨¤é¤ì¤¿°ú¿ô¤òÊ¬²ò¤¹¤ë¡¥fmt¤ÏÉ¬¿Ü°ú¿ô¤Î¿ô, </div><div class='del'>-  ÉÕ²Ã°ú¿ô¤Î¿ô, »Ä¤ê¤Î°ú¿ô¤¬¤¢¤ë¤«¤ò»ØÄê¤¹¤ëÊ¸»úÎó¤Ç, "¿ô»ú</div><div class='del'>-  ¿ô»ú*"¤È¤¤¤¦·Á¼°¤Ç¤¢¤ë¡¥ 2 ÈÖÌÜ¤Î¿ô»ú¤È"*"¤Ï¤½¤ì¤¾¤ì¾ÊÎ¬²Ä</div><div class='del'>-  Ç½¤Ç¤¢¤ë¡¥É¬¿Ü°ú¿ô¤¬°ì¤Ä¤â¤Ê¤¤¾ì¹ç¤Ï0¤ò»ØÄê¤¹¤ë¡¥Âè3°ú¿ô°Ê</div><div class='del'>-  ¹ß¤ÏÊÑ¿ô¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç, ³ºÅö¤¹¤ëÍ×ÁÇ¤¬¤½¤ÎÊÑ¿ô¤Ë³ÊÇ¼¤µ¤ì¤ë¡¥</div><div class='del'>-  ÉÕ²Ã°ú¿ô¤ËÂÐ±þ¤¹¤ë°ú¿ô¤¬Í¿¤¨¤é¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤ÏÊÑ¿ô¤ËQnil¤¬</div><div class='del'>-  ÂåÆþ¤µ¤ì¤ë¡¥</div><div class='del'>-</div><div class='del'>-** Ruby¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·</div><div class='del'>-</div><div class='del'>-VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)</div><div class='del'>-</div><div class='del'>-  ¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·¡¥Ê¸»úÎó¤«¤émid¤òÆÀ¤ë¤¿¤á¤Ë¤Ïrb_intern()¤ò</div><div class='del'>-  »È¤¦¡¥</div><div class='del'>-</div><div class='del'>-VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)</div><div class='del'>-</div><div class='del'>-  ¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·¡¥°ú¿ô¤òargc, argv·Á¼°¤ÇÅÏ¤¹¡¥</div><div class='del'>-</div><div class='del'>-VALUE rb_eval_string(const char *str)</div><div class='del'>-</div><div class='del'>-  Ê¸»úÎó¤òRuby¥¹¥¯¥ê¥×¥È¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¡¦¼Â¹Ô¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-ID rb_intern(const char *name)</div><div class='del'>-</div><div class='del'>-  Ê¸»úÎó¤ËÂÐ±þ¤¹¤ëID¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-char *rb_id2name(ID id)</div><div class='del'>-</div><div class='del'>-  ID¤ËÂÐ±þ¤¹¤ëÊ¸»úÎó¤òÊÖ¤¹(¥Ç¥Ð¥Ã¥°ÍÑ)¡¥</div><div class='del'>-</div><div class='del'>-char *rb_class2name(VALUE klass)</div><div class='del'>-</div><div class='del'>-  ¥¯¥é¥¹¤ÎÌ¾Á°¤òÊÖ¤¹(¥Ç¥Ð¥Ã¥°ÍÑ)¡¥¥¯¥é¥¹¤¬Ì¾Á°¤ò»ý¤¿¤Ê¤¤»þ¤Ë¤Ï, </div><div class='del'>-  ÁÄÀè¤òÁÌ¤Ã¤ÆÌ¾Á°¤ò»ý¤Ä¥¯¥é¥¹¤ÎÌ¾Á°¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-int rb_respond_to(VALUE obj, ID id)</div><div class='del'>-</div><div class='del'>-  obj¤¬id¤Ç¼¨¤µ¤ì¤ë¥á¥½¥Ã¥É¤ò»ý¤Ä¤«¤É¤¦¤«¤òÊÖ¤¹¡£</div><div class='del'>-</div><div class='del'>-** ¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô</div><div class='del'>-</div><div class='del'>-VALUE rb_iv_get(VALUE obj, const char *name)</div><div class='del'>-</div><div class='del'>-  obj¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ÎÃÍ¤òÆÀ¤ë¡¥`@'¤Ç»Ï¤Þ¤é¤Ê¤¤¥¤¥ó¥¹¥¿¥ó</div><div class='del'>-  ¥¹ÊÑ¿ô¤Ï Ruby¥×¥í¥°¥é¥à¤«¤é¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤¡Ö±£¤ì¤¿¡×¥¤¥ó</div><div class='del'>-  ¥¹¥¿¥ó¥¹ÊÑ¿ô¤Ë¤Ê¤ë¡¥Äê¿ô¤ÏÂçÊ¸»ú¤ÎÌ¾Á°¤ò»ý¤Ä¥¯¥é¥¹(¤Þ¤¿¤Ï</div><div class='del'>-  ¥â¥¸¥å¡¼¥ë)¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤È¤·¤Æ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡¥</div><div class='del'>-</div><div class='del'>-VALUE rb_iv_set(VALUE obj, const char *name, VALUE val)</div><div class='del'>-</div><div class='del'>-  obj¤Î¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤òval¤Ë¥»¥Ã¥È¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-** À©¸æ¹½Â¤</div><div class='del'>-</div><div class='del'>-VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)</div><div class='del'>-</div><div class='del'>-  func2¤ò¥Ö¥í¥Ã¥¯¤È¤·¤ÆÀßÄê¤·, func1¤ò¥¤¥Æ¥ì¡¼¥¿¤È¤·¤Æ¸Æ¤Ö¡¥ </div><div class='del'>-  func1¤Ë¤Ï arg1¤¬°ú¿ô¤È¤·¤ÆÅÏ¤µ¤ì, func2¤Ë¤ÏÂè1°ú¿ô¤Ë¥¤¥Æ¥ì¡¼</div><div class='del'>-  ¥¿¤«¤éÍ¿¤¨¤é¤ì¤¿ÃÍ, Âè2°ú¿ô¤Ëarg2¤¬ÅÏ¤µ¤ì¤ë¡¥</div><div class='del'>- </div><div class='del'>-VALUE rb_yield(VALUE val)</div><div class='del'>-</div><div class='del'>-  val¤òÃÍ¤È¤·¤Æ¥¤¥Æ¥ì¡¼¥¿¥Ö¥í¥Ã¥¯¤ò¸Æ¤Ó½Ð¤¹¡¥</div><div class='del'>-</div><div class='del'>-VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)</div><div class='del'>-</div><div class='del'>-  ´Ø¿ôfunc1¤òarg1¤ò°ú¿ô¤Ë¸Æ¤Ó½Ð¤¹¡¥func1¤Î¼Â¹ÔÃæ¤ËÎã³°¤¬È¯À¸</div><div class='del'>-  ¤·¤¿»þ¤Ë¤Ï func2¤òarg2¤ò°ú¿ô¤È¤·¤Æ¸Æ¤Ö¡¥Ìá¤êÃÍ¤ÏÎã³°¤¬È¯À¸</div><div class='del'>-  ¤·¤Ê¤«¤Ã¤¿»þ¤Ïfunc1¤ÎÌá¤êÃÍ, Îã³°¤¬È¯À¸¤·¤¿»þ¤Ë¤Ïfunc2¤ÎÌá</div><div class='del'>-  ¤êÃÍ¤Ç¤¢¤ë¡¥</div><div class='del'>-</div><div class='del'>-VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, void (*func2)(), VALUE arg2)</div><div class='del'>-</div><div class='del'>-  ´Ø¿ôfunc1¤òarg1¤ò°ú¿ô¤È¤·¤Æ¼Â¹Ô¤·, ¼Â¹Ô½ªÎ»¸å(¤¿¤È¤¨Îã³°¤¬</div><div class='del'>-  È¯À¸¤·¤Æ¤â) func2¤òarg2¤ò°ú¿ô¤È¤·¤Æ¼Â¹Ô¤¹¤ë¡¥Ìá¤êÃÍ¤Ïfunc1</div><div class='del'>-  ¤ÎÌá¤êÃÍ¤Ç¤¢¤ë(Îã³°¤¬È¯À¸¤·¤¿»þ¤ÏÌá¤é¤Ê¤¤)¡¥</div><div class='del'>-</div><div class='del'>-** Îã³°¡¦¥¨¥é¡¼</div><div class='del'>-</div><div class='del'>-void rb_warning(const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-  rb_verbose»þ¤ËÉ¸½à¥¨¥é¡¼½ÐÎÏ¤Ë·Ù¹ð¾ðÊó¤òÉ½¼¨¤¹¤ë¡¥°ú¿ô¤Ï</div><div class='del'>-  printf()¤ÈÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-void rb_raise(rb_eRuntimeError, const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-  RuntimeErrorÎã³°¤òÈ¯À¸¤µ¤»¤ë¡¥°ú¿ô¤Ïprintf()¤ÈÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-void rb_raise(VALUE exception, const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-  exception¤Ç»ØÄê¤·¤¿Îã³°¤òÈ¯À¸¤µ¤»¤ë¡¥fmt°Ê²¼¤Î°ú¿ô¤Ï</div><div class='del'>-  printf()¤ÈÆ±¤¸¡¥</div><div class='del'>-</div><div class='del'>-void rb_fatal(const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-  Ã×Ì¿ÅªÎã³°¤òÈ¯À¸¤µ¤»¤ë¡¥ÄÌ¾ï¤ÎÎã³°½èÍý¤Ï¹Ô¤Ê¤ï¤ì¤º, ¥¤¥ó¥¿¡¼</div><div class='del'>-  ¥×¥ê¥¿¤¬½ªÎ»¤¹¤ë(¤¿¤À¤·ensure¤Ç»ØÄê¤µ¤ì¤¿¥³¡¼¥É¤Ï½ªÎ»Á°¤Ë</div><div class='del'>-  ¼Â¹Ô¤µ¤ì¤ë)¡¥</div><div class='del'>-</div><div class='del'>-void rb_bug(const char *fmt, ...)</div><div class='del'>-</div><div class='del'>-  ¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ê¤É¥×¥í¥°¥é¥à¤Î¥Ð¥°¤Ç¤·¤«È¯À¸¤¹¤ë¤Ï¤º¤Î¤Ê¤¤</div><div class='del'>-  ¾õ¶·¤Î»þ¸Æ¤Ö¡¥¥¤¥ó¥¿¡¼¥×¥ê¥¿¤Ï¥³¥¢¥À¥ó¥×¤·Ä¾¤Á¤Ë½ªÎ»¤¹¤ë¡¥</div><div class='del'>-  Îã³°½èÍý¤Ï°ìÀÚ¹Ô¤Ê¤ï¤ì¤Ê¤¤¡¥</div><div class='del'>-</div><div class='del'>-** Ruby¤Î½é´ü²½¡¦¼Â¹Ô</div><div class='del'>-</div><div class='del'>-Ruby¤ò¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËËä¤á¹þ¤à¾ì¹ç¤Ë¤Ï°Ê²¼¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹</div><div class='del'>-¤ò»È¤¦¡¥ÄÌ¾ï¤Î³ÈÄ¥¥é¥¤¥Ö¥é¥ê¤Ë¤ÏÉ¬Í×¤Ê¤¤¡¥</div><div class='del'>-</div><div class='del'>-void ruby_init()</div><div class='del'>-</div><div class='del'>-  Ruby¥¤¥ó¥¿¥×¥ê¥¿¤Î½é´ü²½¤ò¹Ô¤Ê¤¦¡¥</div><div class='del'>-</div><div class='del'>-void ruby_options(int argc, char **argv)</div><div class='del'>-</div><div class='del'>-  Ruby¥¤¥ó¥¿¥×¥ê¥¿¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤Î½èÍý¤ò¹Ô¤Ê¤¦¡¥</div><div class='del'>-</div><div class='del'>-void ruby_run()</div><div class='del'>-</div><div class='del'>-  Ruby¥¤¥ó¥¿¥×¥ê¥¿¤ò¼Â¹Ô¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-void ruby_script(char *name)</div><div class='del'>-</div><div class='del'>-  Ruby¤Î¥¹¥¯¥ê¥×¥ÈÌ¾($0)¤òÀßÄê¤¹¤ë¡¥</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Appendix C. extconf.rb¤Ç»È¤¨¤ë´Ø¿ô¤¿¤Á</div><div class='del'>-</div><div class='del'>-extconf.rb¤ÎÃæ¤Ç¤ÏÍøÍÑ²ÄÇ½¤Ê¥³¥ó¥Ñ¥¤¥ë¾ò·ï¥Á¥§¥Ã¥¯¤Î´Ø¿ô¤Ï°Ê</div><div class='del'>-²¼¤ÎÄÌ¤ê¤Ç¤¢¤ë¡¥</div><div class='del'>-</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='del'>-have_library(lib, func)</div><div class='del'>-</div><div class='del'>-  ´Ø¿ôfunc¤òÄêµÁ¤·¤Æ¤¤¤ë¥é¥¤¥Ö¥é¥êlib¤ÎÂ¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥</div><div class='del'>-  ¥é¥¤¥Ö¥é¥ê¤¬Â¸ºß¤¹¤ë»þ¡¤true¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-find_library(lib, func, path...)</div><div class='del'>-</div><div class='del'>-  ´Ø¿ôfunc¤òÄêµÁ¤·¤Æ¤¤¤ë¥é¥¤¥Ö¥é¥êlib¤ÎÂ¸ºß¤ò -Lpath ¤òÄÉ²Ã</div><div class='del'>-  ¤·¤Ê¤¬¤é¥Á¥§¥Ã¥¯¤¹¤ë¡¥¥é¥¤¥Ö¥é¥ê¤¬¸«ÉÕ¤«¤Ã¤¿»þ¡¤true¤òÊÖ¤¹¡¥</div><div class='del'>-</div><div class='del'>-have_func(func, header)</div><div class='del'>-</div><div class='del'>-  ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ëheader¤ò¥¤¥ó¥¯¥ë¡¼¥É¤·¤Æ´Ø¿ôfunc¤ÎÂ¸ºß¤ò¥Á¥§¥Ã</div><div class='del'>-  ¥¯¤¹¤ë¡¥func¤¬É¸½à¤Ç¤Ï¥ê¥ó¥¯¤µ¤ì¤Ê¤¤¥é¥¤¥Ö¥é¥êÆâ¤Î¤â¤Î¤Ç¤¢</div><div class='del'>-  ¤ë»þ¤Ë¤ÏÀè¤Ëhave_library¤Ç¤½¤Î¥é¥¤¥Ö¥é¥ê¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤ª¤¯</div><div class='del'>-  »ö¡¥´Ø¿ô¤¬Â¸ºß¤¹¤ë»þtrue¤òÊÖ¤¹¡¥</div><div class='del'>-</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='del'>-have_header(header)</div><div class='del'>-</div><div class='del'>-  ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤ÎÂ¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡¥¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤¹</div><div class='del'>-  ¤ë»þtrue¤òÊÖ¤¹¡¥</div><div class='del'>-</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='del'>-create_makefile(target)</div><div class='del'>-</div><div class='del'>-  ³ÈÄ¥¥é¥¤¥Ö¥é¥êÍÑ¤ÎMakefile¤òÀ¸À®¤¹¤ë¡¥¤³¤Î´Ø¿ô¤ò¸Æ¤Ð¤Ê¤±¤ì</div><div class='del'>-  ¤Ð¤½¤Î¥é¥¤¥Ö¥é¥ê¤Ï¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Ê¤¤¡¥target¤Ï¥â¥¸¥å¡¼¥ëÌ¾</div><div class='del'>-  ¤òÉ½¤¹¡¥</div><div class='del'>-</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='del'>-with_config(withval[, default=nil])</div><div class='del'>-</div><div class='del'>-  ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Î--with-&lt;withval&gt;¤Ç»ØÄê¤µ¤ì¤¿¥ª¥×¥·¥ç¥óÃÍ¤òÆÀ¤ë¡¥</div><div class='del'>-</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='del'>-dir_config(target[, default_dir])</div><div class='del'>-dir_config(target[, default_include, default_lib])</div><div class='del'>-</div><div class='del'>-  ¥³¥Þ¥ó¥É¥é¥¤¥ó¾å¤Î--with-&lt;target&gt;-dir, --with-&lt;target&gt;-include,</div><div class='del'>-  --with-&lt;target&gt;-lib¤Î¤¤¤º¤ì¤«¤Ç»ØÄê¤µ¤ì¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò</div><div class='del'>-  $CFLAGS ¤ä $LDFLAGS ¤ËÄÉ²Ã¤¹¤ë¡¥--with-&lt;target&gt;-dir=/path¤Ï</div><div class='del'>-  --with-&lt;target&gt;-include=/path/include --with-&lt;target&gt;-lib=/path/lib</div><div class='del'>-  ¤ÈÅù²Á¤Ç¤¢¤ë¡¥ÄÉ²Ã¤µ¤ì¤¿ include ¥Ç¥£¥ì¥¯¥È¥ê¤È lib ¥Ç¥£¥ì¥¯¥È¥ê¤Î</div><div class='del'>-  ÇÛÎó¤òÊÖ¤¹¡¥ ([include_dir, lib_dir])</div><div class='del'>-</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='del'>-/*</div><div class='del'>- * Local variables:</div><div class='del'>- * fill-column: 60</div><div class='del'>- * end:</div><div class='del'>- */</div><div class='head'>diff --git a/README.ja b/README.ja<br/>deleted file mode 100644<br/>index 71ce4ee12c..0000000000<br/>--- a/<a href='/ruby.git/tree/README.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>README.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,164 +0,0 @@</div><div class='del'>-* Ruby¤È¤Ï</div><div class='del'>-</div><div class='del'>-Ruby¤Ï¥·¥ó¥×¥ë¤«¤Ä¶¯ÎÏ¤Ê¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¥¹¥¯¥ê¥×¥È¸À¸ì¤Ç¤¹¡¥</div><div class='del'>-Ruby¤ÏºÇ½é¤«¤é½ã¿è¤Ê¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¸À¸ì¤È¤·¤ÆÀß·×¤µ¤ì¤Æ¤¤¤Þ</div><div class='del'>-¤¹¤«¤é¡¤¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¥×¥í¥°¥é¥ß¥ó¥°¤ò¼ê·Ú¤Ë¹Ô¤¦»ö¤¬½ÐÍè¤Þ</div><div class='del'>-¤¹¡¥¤â¤Á¤í¤óÄÌ¾ï¤Î¼êÂ³¤­·¿¤Î¥×¥í¥°¥é¥ß¥ó¥°¤â²ÄÇ½¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-Ruby¤Ï¥Æ¥­¥¹¥È½èÍý´Ø·¸¤ÎÇ½ÎÏ¤Ê¤É¤ËÍ¥¤ì¡¤Perl¤ÈÆ±¤¸¤¯¤é¤¤¶¯ÎÏ</div><div class='del'>-¤Ç¤¹¡¥¤µ¤é¤Ë¥·¥ó¥×¥ë¤ÊÊ¸Ë¡¤È¡¤Îã³°½èÍý¤ä¥¤¥Æ¥ì¡¼¥¿¤Ê¤É¤Îµ¡¹½</div><div class='del'>-¤Ë¤è¤Ã¤Æ¡¤¤è¤êÊ¬¤«¤ê¤ä¤¹¤¤¥×¥í¥°¥é¥ß¥ó¥°¤¬½ÐÍè¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-* Ruby¤ÎÆÃÄ¹</div><div class='del'>-</div><div class='del'>-  + ¥·¥ó¥×¥ë¤ÊÊ¸Ë¡</div><div class='del'>-  + ÉáÄÌ¤Î¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þµ¡Ç½(¥¯¥é¥¹¡¤¥á¥½¥Ã¥É¥³¡¼¥ë¤Ê¤É)</div><div class='del'>-  + ÆÃ¼ì¤Ê¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þµ¡Ç½(Mixin, ÆÃ°Û¥á¥½¥Ã¥É¤Ê¤É)</div><div class='del'>-  + ±é»»»Ò¥ª¡¼¥Ð¡¼¥í¡¼¥É</div><div class='del'>-  + Îã³°½èÍýµ¡Ç½</div><div class='del'>-  + ¥¤¥Æ¥ì¡¼¥¿¤È¥¯¥í¡¼¥¸¥ã</div><div class='del'>-  + ¥¬¡¼¥Ù¡¼¥¸¥³¥ì¥¯¥¿</div><div class='del'>-  + ¥À¥¤¥Ê¥ß¥Ã¥¯¥í¡¼¥Ç¥£¥ó¥° (¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¤è¤ë)</div><div class='del'>-  + °Ü¿¢À­¤¬¹â¤¤¡¥Â¿¤¯¤ÎUNIX¾å¤ÇÆ°¤¯¤À¤±¤Ç¤Ê¤¯¡¤DOS¤äWindows¡¤</div><div class='del'>-    Mac¡¤BeOS¤Ê¤É¤Î¾å¤Ç¤âÆ°¤¯</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-* Æþ¼êË¡</div><div class='del'>-</div><div class='del'>-** FTP¤Ç</div><div class='del'>-</div><div class='del'>-°Ê²¼¤Î¾ì½ê¤Ë¤ª¤¤¤Æ¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  ftp://ftp.ruby-lang.org/pub/ruby/</div><div class='del'>-</div><div class='del'>-** Subversion¤Ç</div><div class='del'>-</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/</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='del'>-</div><div class='del'>-</div><div class='del'>-* ¥Û¡¼¥à¥Ú¡¼¥¸</div><div class='del'>-</div><div class='del'>-Ruby¤Î¥Û¡¼¥à¥Ú¡¼¥¸¤ÎURL¤Ï</div><div class='del'>-</div><div class='del'>-   http://www.ruby-lang.org/</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'>-Ruby¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤¬¤¢¤ê¤Þ¤¹¡£»²²Ã´õË¾¤ÎÊý¤Ï</div><div class='del'>-</div><div class='del'>-   ruby-list-ctl@ruby-lang.org</div><div class='del'>-</div><div class='del'>-¤Þ¤ÇËÜÊ¸¤Ë</div><div class='del'>-</div><div class='del'>-   subscribe YourFirstName YourFamilyName</div><div class='del'>-   </div><div class='del'>-¤È½ñ¤¤¤ÆÁ÷¤Ã¤Æ²¼¤µ¤¤¡£ </div><div class='del'>-</div><div class='del'>-Ruby³«È¯¼Ô¸þ¤±¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤â¤¢¤ê¤Þ¤¹¡£¤³¤Á¤é¤Ç¤Ïruby¤Î¥Ð</div><div class='del'>-¥°¡¢¾­Íè¤Î»ÅÍÍ³ÈÄ¥¤Ê¤É¼ÂÁõ¾å¤ÎÌäÂê¤Ë¤Ä¤¤¤ÆµÄÏÀ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</div><div class='del'>-»²²Ã´õË¾¤ÎÊý¤Ï</div><div class='del'>-</div><div class='del'>-   ruby-dev-ctl@ruby-lang.org</div><div class='del'>-</div><div class='del'>-¤Þ¤Çruby-list¤ÈÆ±ÍÍ¤ÎÊýË¡¤Ç¥á¡¼¥ë¤·¤Æ¤¯¤À¤µ¤¤¡£ </div><div class='del'>-</div><div class='del'>-Ruby³ÈÄ¥¥â¥¸¥å¡¼¥ë¤Ë¤Ä¤¤¤ÆÏÃ¤·¹ç¤¦ruby-ext¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤È</div><div class='del'>-¿ô³Ø´Ø·¸¤ÎÏÃÂê¤Ë¤Ä¤¤¤ÆÏÃ¤·¹ç¤¦ruby-math¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤È</div><div class='del'>-±Ñ¸ì¤ÇÏÃ¤·¹ç¤¦ruby-talk¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤â¤¢¤ê¤Þ¤¹¡£»²²ÃÊýË¡</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'>-  1. ¤â¤·configure¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤é¤Ê¤¤¡¢¤â¤·¤¯¤Ï</div><div class='del'>-     configure.in¤è¤ê¸Å¤¤¤è¤¦¤Ê¤é¡¢autoconf¤ò¼Â¹Ô¤·¤Æ</div><div class='del'>-     ¿·¤·¤¯configure¤òÀ¸À®¤¹¤ë</div><div class='del'>-</div><div class='del'>-  2. configure¤ò¼Â¹Ô¤·¤ÆMakefile¤Ê¤É¤òÀ¸À®¤¹¤ë</div><div class='del'>-</div><div class='del'>-     ´Ä¶­¤Ë¤è¤Ã¤Æ¤Ï¥Ç¥Õ¥©¥ë¥È¤ÎC¥³¥ó¥Ñ¥¤¥éÍÑ¥ª¥×¥·¥ç¥ó¤¬ÉÕ¤­</div><div class='del'>-     ¤Þ¤¹¡¥configure¥ª¥×¥·¥ç¥ó¤Ç optflags=.. warnflags=.. Åù</div><div class='del'>-     ¤Ç¾å½ñ¤­¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  3. (É¬Í×¤Ê¤é¤Ð)defines.h¤òÊÔ½¸¤¹¤ë</div><div class='del'>-</div><div class='del'>-     Â¿Ê¬¡¤É¬Í×Ìµ¤¤¤È»×¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  4. (É¬Í×¤Ê¤é¤Ð)ext/Setup¤ËÀÅÅª¤Ë¥ê¥ó¥¯¤¹¤ë³ÈÄ¥¥â¥¸¥å¡¼¥ë¤ò</div><div class='del'>-     »ØÄê¤¹¤ë</div><div class='del'>-</div><div class='del'>-     ext/Setup¤Ëµ­½Ò¤·¤¿¥â¥¸¥å¡¼¥ë¤ÏÀÅÅª¤Ë¥ê¥ó¥¯¤µ¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-     ¥À¥¤¥Ê¥ß¥Ã¥¯¥í¡¼¥Ç¥£¥ó¥°¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥¢¡¼¥­¥Æ¥¯</div><div class='del'>-     ¥Á¥ã¤Ç¤ÏSetup¤Î1¹ÔÌÜ¤Î¡Öoption nodynamic¡×¤È¤¤¤¦¹Ô¤Î¥³</div><div class='del'>-     ¥á¥ó¥È¤ò³°¤¹É¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥¤Þ¤¿¡¤¤³¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ç</div><div class='del'>-     ³ÈÄ¥¥â¥¸¥å¡¼¥ë¤òÍøÍÑ¤¹¤ë¤¿¤á¤Ë¤Ï¡¤¤¢¤é¤«¤¸¤áÀÅÅª¤Ë¥ê¥ó</div><div class='del'>-     ¥¯¤·¤Æ¤ª¤¯É¬Í×¤¬¤¢¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  5. make¤ò¼Â¹Ô¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë</div><div class='del'>-</div><div class='del'>-  6. make test¤Ç¥Æ¥¹¥È¤ò¹Ô¤¦¡¥</div><div class='del'>-</div><div class='del'>-     ¡Ötest succeeded¡×¤ÈÉ½¼¨¤µ¤ì¤ì¤ÐÀ®¸ù¤Ç¤¹¡¥¤¿¤À¤·¥Æ¥¹¥È</div><div class='del'>-     ¤ËÀ®¸ù¤·¤Æ¤â´°àú¤À¤ÈÊÝ¾Ú¤µ¤ì¤Æ¤¤¤ëÌõ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-  7. make install</div><div class='del'>-</div><div class='del'>-     root¤Çºî¶È¤¹¤ëÉ¬Í×¤¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-¤â¤·¡¤¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¤Ë¤Ï¥¨¥é¡¼¤Î¥í¥°¤È¥Þ</div><div class='del'>-¥·¥ó¡¤OS¤Î¼ïÎà¤ò´Þ¤à¤Ç¤­¤ë¤À¤±¾Ü¤·¤¤¥ì¥Ý¡¼¥È¤òºî¼Ô¤ËÁ÷¤Ã¤Æ¤¯</div><div class='del'>-¤À¤µ¤ë¤ÈÂ¾¤ÎÊý¤Î¤¿¤á¤Ë¤â¤Ê¤ê¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-* °Ü¿¢</div><div class='del'>-</div><div class='del'>-UNIX¤Ç¤¢¤ì¤Ðconfigure¤¬¤Û¤È¤ó¤É¤Îº¹°Û¤òµÛ¼ý¤·¤Æ¤¯¤ì¤ë¤Ï¤º¤Ç</div><div class='del'>-¤¹¤¬¡¤»×¤ï¤Ì¸«Íî¤È¤·¤¬¤¢¤Ã¤¿¾ì¹ç(¤¢¤ë¤Ë°ã¤¤¤Ê¤¤)¡¤ºî¼Ô¤Ë¤½¤Î</div><div class='del'>-¤³¤È¤ò¥ì¥Ý¡¼¥È¤¹¤ì¤Ð¡¤²ò·è¤Ç¤­¤ë¤«¤âÃÎ¤ì¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¤â¤Ã¤È¤â°ÍÂ¸¤¹¤ë¤Î¤ÏGCÉô¤Ç¤¹¡¥Ruby¤ÎGC¤ÏÂÐ¾Ý</div><div class='del'>-¤Î¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤¬setjmp()¤Ë¤è¤Ã¤ÆÁ´¤Æ¤Î¥ì¥¸¥¹¥¿¤ò jmp_buf¤Ë</div><div class='del'>-³ÊÇ¼¤¹¤ë¤³¤È¤È¡¤jmp_buf¤È¥¹¥¿¥Ã¥¯¤¬32bit¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Æ</div><div class='del'>-¤¤¤ë¤³¤È¤ò²¾Äê¤·¤Æ¤¤¤Þ¤¹¡¥ÆÃ¤ËÁ°¼Ô¤¬À®Î©¤·¤Ê¤¤¾ì¹ç¤ÎÂÐ±þ¤ÏÈó</div><div class='del'>-¾ï¤Ëº¤Æñ¤Ç¤·¤ç¤¦¡¥¸å¼Ô¤Î²ò·è¤ÏÈæ³ÓÅª´ÊÃ±¤Ç¡¤gc.c¤Ç¥¹¥¿¥Ã¥¯¤ò</div><div class='del'>-¥Þ¡¼¥¯¤·¤Æ¤¤¤ëÉôÊ¬¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤Î¥Ð¥¤¥È¿ô¤À¤±¤º¤é¤·¤Æ¥Þ¡¼</div><div class='del'>-¥¯¤¹¤ë¥³¡¼¥É¤òÄÉ²Ã¤¹¤ë¤À¤±¤ÇºÑ¤ß¤Þ¤¹¡¥¡Ödefined(THINK_C)¡×¤Ç</div><div class='del'>-³ç¤é¤ì¤Æ¤¤¤ëÉôÊ¬¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤</div><div class='del'>-</div><div class='del'>-# ¼ÂºÝ¤Ë¤ÏRuby¤ÏThink C¤Ç¤Ï¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¤ò»ý¤ÄCPU¤Ç¤Ï¡¤¥ì¥¸¥¹¥¿¥¦¥£¥ó¥É¥¦¤ò¥¹¥¿¥Ã</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'>-COPYING.ja¥Õ¥¡¥¤¥ë¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-* Ãø¼Ô</div><div class='del'>-</div><div class='del'>-¥³¥á¥ó¥È¡¤¥Ð¥°¥ì¥Ý¡¼¥È¤½¤ÎÂ¾¤Ï matz@netlab.jp ¤Þ¤Ç¡¥</div><div class='del'>--------------------------------------------------------</div><div class='del'>-created at: Thu Aug  3 11:57:36 JST 1995</div><div class='del'>-Local variables:</div><div class='del'>-mode: indented-text</div><div class='del'>-end:</div><div class='head'>diff --git a/ToDo b/ToDo<br/>index b55e399edf..ed9c6d06b7 100644<br/>--- a/<a href='/ruby.git/tree/ToDo?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ToDo</a><br/>+++ b/<a href='/ruby.git/tree/ToDo?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>ToDo</a></div><div class='hunk'>@@ -1,126 +1,4 @@</div><div class='del'>-Language Spec.</div><div class='del'>-</div><div class='del'>-- Class#allocate - basicNew</div><div class='del'>-- class Foo::Bar&lt;Baz .. end, module Boo::Bar .. end</div><div class='del'>-* operator !! for rescue. ???</div><div class='del'>-* objectify characters</div><div class='del'>-* ../... outside condition invokes operator method too.</div><div class='del'>-* ... inside condition turns off just before right condition.???</div><div class='del'>-* package or access control for global variables??</div><div class='del'>-* named arguments like foo(nation:="german") or foo(nation: "german").</div><div class='del'>-* method to retrieve argument information (needs new C API)</div><div class='del'>-* multiple return values, yield values.  maybe incompatible ???</div><div class='del'>-* cascading method invocation ???</div><div class='del'>-* def Class#method .. end ??</div><div class='del'>-* def Foo::Bar::baz() .. end ??</div><div class='del'>-* I18N (or M17N) script/string/regexp</div><div class='del'>-* Fixnum 0 as false ????</div><div class='del'>-* discourage use of symbol variables (e.g. $/, etc.) in manual</div><div class='del'>-* discourage use of Perlish features by giving warnings.</div><div class='del'>-* non confusing in-block local variable (is it possible?)</div><div class='del'>-  + remove scope by block</div><div class='del'>-  + variables appears within block may have independent values.</div><div class='del'>-* Regexp: make /o thread safe.</div><div class='del'>-* decide whether begin with rescue or ensure make do..while loop.</div><div class='del'>-* a +1 to be a+1, not a(+1).</div><div class='del'>-* unify == and eql? again</div><div class='del'>-* to_i returns nil if str contains no digit.</div><div class='del'>-* raise exception by `` error</div><div class='del'>-* jar like combined library package. -&gt; RubyGems?</div><div class='del'>-* resumable Exception via Exception#resume.</div><div class='del'>-* method combination, e.g. before, after, around, etc.</div><div class='del'>-* .. or something like defadvice in Emacs.</div><div class='del'>-* property - for methods, or for objects in general.</div><div class='del'>-* "in" modifier, to annotate, or to encourage assertion.</div><div class='del'>-* selector namespace - something like generic-flet in CLOS, to help RubyBehavior</div><div class='del'>-* private instance variable (as in Python?) @_foo in class Foo =&gt; @_Foo_foo</div><div class='del'>-* warn/error "bare word" method, like "foo",  you should type "foo()"</div><div class='del'>-* clarify evaluation order of operator argument (=~, .., ...)</div><div class='del'>-* :symbol =&gt; value hash in the form of {symbol: value, ...} ??</div><div class='del'>-</div><div class='del'>-Hacking Interpreter</div><div class='del'>-</div><div class='del'>-- generational GC</div><div class='del'>-* non-blocking open (e.g. for named pipe) for thread</div><div class='del'>-* avoid blocking with gethostbyname/gethostbyaddr (use fork ???)</div><div class='del'>-* objectify interpreters ???</div><div class='del'>-* remove rb_eval() recursions</div><div class='del'>-* syntax tree -&gt; bytecode ???</div><div class='del'>-* scrambled script, or script filter</div><div class='del'>-* setuid ruby</div><div class='del'>-* performance tune for in-block (dynamic) local variables.</div><div class='del'>-* give warnings to assign magic variables.</div><div class='del'>-* export rb_io_{addstr,printf,puts,print}</div><div class='del'>-* autoload should work with threads [ruby-talk:4589]</div><div class='del'>-* remove stdio dependency from IOs.</div><div class='del'>-* warn for inconsistent local variable usage (lv m and method m at the same time). </div><div class='del'>-* MicroRuby</div><div class='del'>-* Built-in Interactive Ruby.</div><div class='del'>-* Parser API</div><div class='del'>-* trap every method invocation, which can be enabled by e.g. trap_call :method.</div><div class='del'>-* unify Errno exceptions of same errno, or new exception comparison scheme.</div><div class='del'>-* 2.times{|i| if i==0 then a = 15 else puts eval("a") end} should print nil.</div><div class='del'>-* Thread#max_stack_size attribute (possible??)</div><div class='del'>-</div><div class='del'>-Standard Libraries</div><div class='del'>-</div><div class='del'>-- Module#define_method which takes a name and a body (block, proc or method).</div><div class='del'>-- Enume#inject</div><div class='del'>-- Array#fetch</div><div class='del'>-- IO::for_fd</div><div class='del'>-- Process::waitall [ruby-talk:4557]</div><div class='del'>-- Process::Status</div><div class='del'>-- File::lchown, File::lchmod; xxx - still need work for non existing platforms</div><div class='del'>-- move Time::times to Process.</div><div class='del'>-- Enumerable#sort_by for Schwartzian transformation</div><div class='del'>-- fork_and_kill_other_threads.</div><div class='del'>-- signal list (Signal::trap, Signal::list).</div><div class='del'>-- move NameError under StandardError.</div><div class='del'>-- Integer#to_s(base)</div><div class='del'>-- Hash::new{default}</div><div class='del'>-- hash etc. should handle self referenceing array/hash</div><div class='del'>-- Array#select(n1,n2...) works like Array#indexes(n1,n2...)</div><div class='del'>-- 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='del'>-* String#scanf(?)</div><div class='del'>-* Object#fmt(?)</div><div class='del'>-* Time::strptime</div><div class='del'>-* Integer[num], Float[num];  Fixnum[num]?</div><div class='del'>-* method to retrieve non-number trailer for to_i/to_f.</div><div class='del'>-* Stream or Port, abstract superclass of IO ?</div><div class='del'>-* String#{pred,prev}, String#downto</div><div class='del'>-* optional stepsize argument for succ()</div><div class='del'>-* Ruby module -- Ruby::Version, Ruby::Interpreter</div><div class='del'>-* introduce Boolean class; super of TrueClass, FalseClass</div><div class='del'>-* synchronized method - synchronized{...}, synchronized :foo, :bar</div><div class='del'>-* Array#&amp;, Array#| to allow duplication. ???</div><div class='del'>-* way to specify immortal (fork endurance) thread;</div><div class='del'>-* or raise ForkException to every thread but fork caller.</div><div class='del'>-* new user-defined marshal scheme. _dump(dumper), _load(restorer)</div><div class='del'>-* library to load per-user profile seeking .ruby_profile or ruby.ini file.</div><div class='del'>-* warning framework (warn, warning for Ruby level)</div><div class='del'>-* marshal should not depend on sprintf (works bad with locale).</div><div class='del'>-* ternary arg pow: a.pow(b,c) == a**b%c</div><div class='del'>-* new caller(), e.g. call_stack; needs better name.</div><div class='del'>-* pointer share mechanism similar to one in String for Array.</div><div class='del'>-* require "1.6" etc. by /usr/lib/ruby/1.6/1.6.rb ;-)</div><div class='del'>-* save both "feature names" and "normalized path" in $"</div><div class='del'>-* implement Mutex_m (or MutexMixin) using Mutex.</div><div class='del'>-</div><div class='del'>-Extension Libraries</div><div class='del'>-</div><div class='del'>-* ptk.rb pTk wrapper that is compatible to tk.rb</div><div class='del'>-* Berkeley DB extension</div><div class='del'>-* BitVector</div><div class='del'>-* thread-safe fcgi</div><div class='del'>-</div><div class='del'>-Ruby Libraries</div><div class='del'>-</div><div class='del'>-* urllib.rb, nttplib.rb, etc.</div><div class='del'>-* format like perl's</div><div class='del'>-</div><div class='del'>-Tools</div><div class='del'>-</div><div class='del'>-* freeze or undump to bundle everything</div><div class='del'>-* bundle using zlib</div><div class='add'>+* ruby¤ÇÄêµÁ¤¹¤ëÊÑ¿ôhook¤Î¼Â¸½</div><div class='add'>+* write debugger for ruby</div><div class='add'>+* re-write regex code for speeding</div><div class='add'>+* byte code interpretor</div><div class='head'>diff --git a/array.c b/array.c<br/>index 7e8c12b683..d71edd2edf 100644<br/>--- a/<a href='/ruby.git/tree/array.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>array.c</a><br/>+++ b/<a href='/ruby.git/tree/array.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>array.c</a></div><div class='hunk'>@@ -1,3868 +1,800 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   array.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/27 15:48:20 $</div><div class='ctx'>   created at: Fri Aug  6 09:46:12 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-  Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "util.h"</div><div class='del'>-#include "st.h"</div><div class='ctx'> </div><div class='del'>-VALUE rb_cArray;</div><div class='del'>-static ID id_cmp;</div><div class='add'>+VALUE C_Array;</div><div class='ctx'> </div><div class='del'>-#define ARY_DEFAULT_SIZE 16</div><div class='del'>-#define ARY_MAX_SIZE (LONG_MAX / sizeof(VALUE))</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_mem_clear(mem, size)</div><div class='del'>-    register VALUE *mem;</div><div class='del'>-    register long size;</div><div class='del'>-{</div><div class='del'>-    while (size--) {</div><div class='del'>-	*mem++ = Qnil;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static inline void</div><div class='del'>-memfill(mem, size, val)</div><div class='del'>-    register VALUE *mem;</div><div class='del'>-    register long size;</div><div class='del'>-    register VALUE val;</div><div class='del'>-{</div><div class='del'>-    while (size--) {</div><div class='del'>-	*mem++ = val;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define ARY_TMPLOCK  FL_USER1</div><div class='del'>-</div><div class='del'>-static inline void</div><div class='del'>-rb_ary_modify_check(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    if (OBJ_FROZEN(ary)) rb_error_frozen("array");</div><div class='del'>-    if (FL_TEST(ary, ARY_TMPLOCK))</div><div class='del'>-	rb_raise(rb_eRuntimeError, "can't modify array during iteration");</div><div class='del'>-    if (!OBJ_TAINTED(ary) &amp;&amp; rb_safe_level() &gt;= 4)</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't modify array");</div><div class='del'>-}</div><div class='add'>+static ID eq;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-rb_ary_modify(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE *ptr;</div><div class='del'>-</div><div class='del'>-    rb_ary_modify_check(ary);</div><div class='del'>-    if (FL_TEST(ary, ELTS_SHARED)) {</div><div class='del'>-	ptr = ALLOC_N(VALUE, RARRAY(ary)-&gt;len);</div><div class='del'>-	FL_UNSET(ary, ELTS_SHARED);</div><div class='del'>-	RARRAY(ary)-&gt;aux.capa = RARRAY(ary)-&gt;len;</div><div class='del'>-	MEMCPY(ptr, RARRAY(ary)-&gt;ptr, VALUE, RARRAY(ary)-&gt;len);</div><div class='del'>-	RARRAY(ary)-&gt;ptr = ptr;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='add'>+#define ARY_DEFAULT_SIZE 16</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_ary_freeze(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return rb_obj_freeze(ary);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_frozen_p(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</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='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ary_alloc _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-ary_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='add'>+ary_new2(len)</div><div class='ctx'> {</div><div class='ctx'>     NEWOBJ(ary, struct RArray);</div><div class='del'>-    OBJSETUP(ary, klass, T_ARRAY);</div><div class='add'>+    OBJSETUP(ary, C_Array, T_ARRAY);</div><div class='ctx'> </div><div class='ctx'>     ary-&gt;len = 0;</div><div class='del'>-    ary-&gt;ptr = 0;</div><div class='del'>-    ary-&gt;aux.capa = 0;</div><div class='add'>+    ary-&gt;capa = len;</div><div class='add'>+    ary-&gt;ptr = ALLOC_N(VALUE, len);</div><div class='ctx'> </div><div class='ctx'>     return (VALUE)ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-ary_new(klass, len)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    long len;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = ary_alloc(klass);</div><div class='del'>-</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "negative array size (or size too big)");</div><div class='del'>-    }</div><div class='del'>-    if (len &gt; ARY_MAX_SIZE) {</div><div class='del'>-	rb_raise(rb_eArgError, "array size too big");</div><div class='del'>-    }</div><div class='del'>-    if (len == 0) len++;</div><div class='del'>-    RARRAY(ary)-&gt;ptr = ALLOC_N(VALUE, len);</div><div class='del'>-    RARRAY(ary)-&gt;aux.capa = len;</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='del'>-rb_ary_new2(len)</div><div class='del'>-    long len;</div><div class='add'>+ary_new()</div><div class='ctx'> {</div><div class='del'>-    return ary_new(rb_cArray, len);</div><div class='add'>+    return ary_new2(ARY_DEFAULT_SIZE);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_ary_new()</div><div class='del'>-{</div><div class='del'>-    return rb_ary_new2(ARY_DEFAULT_SIZE);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-#include &lt;stdarg.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a,b)</div><div class='del'>-#else</div><div class='ctx'> #include &lt;varargs.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a)</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_ary_new3(long n, ...)</div><div class='del'>-#else</div><div class='del'>-rb_ary_new3(n, va_alist)</div><div class='del'>-    long n;</div><div class='add'>+ary_new3(n, va_alist)</div><div class='add'>+    int n;</div><div class='ctx'>     va_dcl</div><div class='del'>-#endif</div><div class='ctx'> {</div><div class='ctx'>     va_list ar;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long i;</div><div class='add'>+    struct RArray* ary;</div><div class='add'>+    int len, i;</div><div class='ctx'> </div><div class='del'>-    ary = rb_ary_new2(n);</div><div class='add'>+    if (n &lt; 0) {</div><div class='add'>+	Fail("Negative number of items(%d)", n);</div><div class='add'>+    }</div><div class='add'>+    ary = (struct RArray*)ary_new2(n&lt;ARY_DEFAULT_SIZE?ARY_DEFAULT_SIZE:n);</div><div class='ctx'> </div><div class='del'>-    va_init_list(ar, n);</div><div class='add'>+    va_start(ar);</div><div class='ctx'>     for (i=0; i&lt;n; i++) {</div><div class='del'>-	RARRAY(ary)-&gt;ptr[i] = va_arg(ar, VALUE);</div><div class='add'>+	ary-&gt;ptr[i] = va_arg(ar, VALUE);</div><div class='ctx'>     }</div><div class='ctx'>     va_end(ar);</div><div class='ctx'> </div><div class='del'>-    RARRAY(ary)-&gt;len = n;</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_ary_new4(n, elts)</div><div class='del'>-    long n;</div><div class='del'>-    const VALUE *elts;</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new2(n);</div><div class='del'>-    if (n &gt; 0 &amp;&amp; elts) {</div><div class='del'>-	MEMCPY(RARRAY(ary)-&gt;ptr, elts, VALUE, n);</div><div class='del'>-    }</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='del'>-    RARRAY(ary)-&gt;len = n;</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'>-ary_make_shared(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    if (!FL_TEST(ary, ELTS_SHARED)) {</div><div class='del'>-	NEWOBJ(shared, struct RArray);</div><div class='del'>-	OBJSETUP(shared, rb_cArray, T_ARRAY);</div><div class='del'>-</div><div class='del'>-	shared-&gt;len = RARRAY(ary)-&gt;len;</div><div class='del'>-	shared-&gt;ptr = RARRAY(ary)-&gt;ptr;</div><div class='del'>-	shared-&gt;aux.capa = RARRAY(ary)-&gt;aux.capa;</div><div class='del'>-	RARRAY(ary)-&gt;aux.shared = (VALUE)shared;</div><div class='del'>-	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='del'>-    }</div><div class='add'>+    ary-&gt;len = n;</div><div class='add'>+    return (VALUE)ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_assoc_new(car, cdr)</div><div class='del'>-    VALUE car, cdr;</div><div class='add'>+ary_new4(n, elts)</div><div class='add'>+    int n;</div><div class='add'>+    VALUE *elts;</div><div class='ctx'> {</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new2(2);</div><div class='del'>-    RARRAY(ary)-&gt;ptr[0] = car;</div><div class='del'>-    RARRAY(ary)-&gt;ptr[1] = cdr;</div><div class='del'>-    RARRAY(ary)-&gt;len = 2;</div><div class='add'>+    struct RArray* ary;</div><div class='ctx'> </div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='add'>+    ary = (struct RArray*)ary_new2(n);</div><div class='add'>+    memcpy(ary-&gt;ptr, elts, sizeof(VALUE)*n);</div><div class='add'>+    ary-&gt;len = n;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-to_ary(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return rb_convert_type(ary, T_ARRAY, "Array", "to_ary");</div><div class='add'>+    return (VALUE)ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_check_array_type(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+assoc_new(elm1, elm2)</div><div class='add'>+    VALUE elm1, elm2;</div><div class='ctx'> {</div><div class='del'>-    return rb_check_convert_type(ary, T_ARRAY, "Array", "to_ary");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE rb_ary_replace _((VALUE, VALUE));</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_initialize(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long len;</div><div class='del'>-    VALUE size, val;</div><div class='del'>-</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    if (rb_scan_args(argc, argv, "02", &amp;size, &amp;val) == 0) {</div><div class='del'>-	RARRAY(ary)-&gt;len = 0;</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    rb_warning("given block not used");</div><div class='del'>-	}</div><div class='del'>-	return ary;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (argc == 1 &amp;&amp; !FIXNUM_P(size)) {</div><div class='del'>-	val = rb_check_array_type(size);</div><div class='del'>-	if (!NIL_P(val)) {</div><div class='del'>-	    rb_ary_replace(ary, val);</div><div class='del'>-	    return ary;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    len = NUM2LONG(size);</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "negative array size");</div><div class='del'>-    }</div><div class='del'>-    if (len &gt; ARY_MAX_SIZE) {</div><div class='del'>-	rb_raise(rb_eArgError, "array size too big");</div><div class='del'>-    }</div><div class='del'>-    if (len &gt; RARRAY(ary)-&gt;aux.capa) {</div><div class='del'>-	REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, len);</div><div class='del'>-	RARRAY(ary)-&gt;aux.capa = len;</div><div class='del'>-    }</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	long i;</div><div class='add'>+    struct RArray *ary;</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='del'>-	}</div><div class='del'>-	for (i=0; i&lt;len; i++) {</div><div class='del'>-	    rb_ary_store(ary, i, rb_yield(LONG2NUM(i)));</div><div class='del'>-	    RARRAY(ary)-&gt;len = i + 1;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	memfill(RARRAY(ary)-&gt;ptr, len, val);</div><div class='del'>-	RARRAY(ary)-&gt;len = len;</div><div class='del'>-    }</div><div class='add'>+    ary = (struct RArray*)ary_new2(2);</div><div class='add'>+    ary-&gt;ptr[0] = elm1;</div><div class='add'>+    ary-&gt;ptr[1] = elm2;</div><div class='add'>+    ary-&gt;len = 2;</div><div class='ctx'> </div><div class='del'>-    return ary;</div><div class='add'>+    return (VALUE)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='del'>-rb_ary_s_create(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='add'>+Fary_new(class)</div><div class='add'>+    VALUE class;</div><div class='ctx'> {</div><div class='del'>-    VALUE ary = ary_alloc(klass);</div><div class='add'>+    NEWOBJ(ary, struct RArray);</div><div class='add'>+    OBJSETUP(ary, class, T_ARRAY);</div><div class='ctx'> </div><div class='del'>-    if (argc &gt; 0) {</div><div class='del'>-	RARRAY(ary)-&gt;ptr = ALLOC_N(VALUE, argc);</div><div class='del'>-	MEMCPY(RARRAY(ary)-&gt;ptr, argv, VALUE, argc);</div><div class='del'>-    }</div><div class='del'>-    RARRAY(ary)-&gt;len = RARRAY(ary)-&gt;aux.capa = argc;</div><div class='add'>+    ary-&gt;len = 0;</div><div class='add'>+    ary-&gt;capa = ARY_DEFAULT_SIZE;</div><div class='add'>+    ary-&gt;ptr = ALLOC_N(VALUE, ARY_DEFAULT_SIZE);</div><div class='ctx'> </div><div class='del'>-    return ary;</div><div class='add'>+    return (VALUE)ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_ary_store(ary, idx, val)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long idx;</div><div class='add'>+static void</div><div class='add'>+astore(ary, idx, val)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    int idx;</div><div class='ctx'>     VALUE val;</div><div class='ctx'> {</div><div class='add'>+    int max;</div><div class='add'>+</div><div class='ctx'>     if (idx &lt; 0) {</div><div class='del'>-	idx += RARRAY(ary)-&gt;len;</div><div class='del'>-	if (idx &lt; 0) {</div><div class='del'>-	    rb_raise(rb_eIndexError, "index %ld out of array",</div><div class='del'>-		    idx - RARRAY(ary)-&gt;len);</div><div class='del'>-	}</div><div class='add'>+	Fail("negative index for array");</div><div class='ctx'>     }</div><div class='del'>-    else if (idx &gt;= ARY_MAX_SIZE) {</div><div class='del'>-	rb_raise(rb_eIndexError, "index %ld too big", idx);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    if (idx &gt;= RARRAY(ary)-&gt;aux.capa) {</div><div class='del'>-	long new_capa = RARRAY(ary)-&gt;aux.capa / 2;</div><div class='ctx'> </div><div class='del'>-	if (new_capa &lt; ARY_DEFAULT_SIZE) {</div><div class='del'>-	    new_capa = ARY_DEFAULT_SIZE;</div><div class='del'>-	}</div><div class='del'>-	if (new_capa &gt;= ARY_MAX_SIZE - idx) {</div><div class='del'>-	    new_capa = (ARY_MAX_SIZE - idx) / 2;</div><div class='del'>-	}</div><div class='del'>-	new_capa += idx;</div><div class='del'>-	REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, new_capa);</div><div class='del'>-	RARRAY(ary)-&gt;aux.capa = new_capa;</div><div class='add'>+    max = idx + 1;</div><div class='add'>+    if (idx &gt;= ary-&gt;capa) {</div><div class='add'>+	ary-&gt;capa = max;</div><div class='add'>+	REALLOC_N(ary-&gt;ptr, VALUE, max);</div><div class='ctx'>     }</div><div class='del'>-    if (idx &gt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	rb_mem_clear(RARRAY(ary)-&gt;ptr + RARRAY(ary)-&gt;len,</div><div class='del'>-		     idx-RARRAY(ary)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (idx &gt;= RARRAY(ary)-&gt;len) {</div><div class='del'>-	RARRAY(ary)-&gt;len = idx + 1;</div><div class='add'>+    if (idx &gt;= ary-&gt;len) {</div><div class='add'>+	bzero(ary-&gt;ptr+ary-&gt;len, sizeof(VALUE)*(max-ary-&gt;len));</div><div class='ctx'>     }</div><div class='del'>-    RARRAY(ary)-&gt;ptr[idx] = val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ary_shared_array(klass, ary)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE val = ary_alloc(klass);</div><div class='del'>-</div><div class='del'>-    ary_make_shared(ary);</div><div class='del'>-    RARRAY(val)-&gt;ptr = RARRAY(ary)-&gt;ptr;</div><div class='del'>-    RARRAY(val)-&gt;len = RARRAY(ary)-&gt;len;</div><div class='del'>-    RARRAY(val)-&gt;aux.shared = RARRAY(ary)-&gt;aux.shared;</div><div class='del'>-    FL_SET(val, ELTS_SHARED);</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-ary_shared_first(argc, argv, ary, last)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    int last;</div><div class='del'>-{</div><div class='del'>-    VALUE nv, result;</div><div class='del'>-    long n;</div><div class='del'>-    long offset = 0;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "1", &amp;nv);</div><div class='del'>-    n = NUM2LONG(nv);</div><div class='del'>-    if (n &gt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	n = RARRAY(ary)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    else if (n &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "negative array size");</div><div class='del'>-    }</div><div class='del'>-    if (last) {</div><div class='del'>-	offset = RARRAY(ary)-&gt;len - n;</div><div class='add'>+    if (idx &gt;= ary-&gt;len) {</div><div class='add'>+	ary-&gt;len = idx + 1;</div><div class='ctx'>     }</div><div class='del'>-    result = ary_shared_array(rb_cArray, ary);</div><div class='del'>-    RARRAY(result)-&gt;ptr += offset;</div><div class='del'>-    RARRAY(result)-&gt;len = n;</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='add'>+    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='del'>-rb_ary_push(ary, item)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_push(ary, item)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'>     VALUE item;</div><div class='ctx'> {</div><div class='del'>-    rb_ary_store(ary, RARRAY(ary)-&gt;len, item);</div><div class='del'>-    return ary;</div><div class='add'>+    astore(ary, ary-&gt;len, item);</div><div class='add'>+    return item;</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='del'>-rb_ary_push_m(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_append(ary, item)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    VALUE item;</div><div class='ctx'> {</div><div class='del'>-    while (argc--) {</div><div class='del'>-	rb_ary_push(ary, *argv++);</div><div class='del'>-    }</div><div class='del'>-    return ary;</div><div class='add'>+    astore(ary, ary-&gt;len, item);</div><div class='add'>+    return (VALUE)ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_ary_pop(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_pop(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    rb_ary_modify_check(ary);</div><div class='del'>-    if (RARRAY(ary)-&gt;len == 0) return Qnil;</div><div class='del'>-    if (!FL_TEST(ary, ELTS_SHARED) &amp;&amp;</div><div class='del'>-	    RARRAY(ary)-&gt;len * 3 &lt; RARRAY(ary)-&gt;aux.capa &amp;&amp;</div><div class='del'>-	    RARRAY(ary)-&gt;aux.capa &gt; ARY_DEFAULT_SIZE) {</div><div class='del'>-	RARRAY(ary)-&gt;aux.capa = RARRAY(ary)-&gt;len * 2;</div><div class='del'>-	REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, RARRAY(ary)-&gt;aux.capa);</div><div class='del'>-    }</div><div class='del'>-    return RARRAY(ary)-&gt;ptr[--RARRAY(ary)-&gt;len];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.pop    -&gt; obj or nil</div><div class='del'>- *     array.pop(n) -&gt; array</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'>- *  If a number _n_ is given, returns an array of the last n elements</div><div class='del'>- *  (or less) just like &lt;code&gt;array.slice!(-n, n)&lt;/code&gt; does.</div><div class='del'>- *     </div><div class='del'>- *     a = [ "a", "b", "c", "d" ]</div><div class='del'>- *     a.pop     #=&gt; "d"</div><div class='del'>- *     a.pop(2)  #=&gt; ["b", "c"]</div><div class='del'>- *     a         #=&gt; ["a"]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_pop_m(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	return rb_ary_pop(ary);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_ary_modify_check(ary);</div><div class='del'>-    result = ary_shared_first(argc, argv, ary, Qtrue);</div><div class='del'>-    RARRAY(ary)-&gt;len -= RARRAY(result)-&gt;len;</div><div class='del'>-    return result;</div><div class='add'>+    if (ary-&gt;len == 0) return Qnil;</div><div class='add'>+    return ary-&gt;ptr[--ary-&gt;len];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_ary_shift(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_shift(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='ctx'>     VALUE top;</div><div class='ctx'> </div><div class='del'>-    rb_ary_modify_check(ary);</div><div class='del'>-    if (RARRAY(ary)-&gt;len == 0) return Qnil;</div><div class='del'>-    top = RARRAY(ary)-&gt;ptr[0];</div><div class='del'>-    if (!FL_TEST(ary, ELTS_SHARED)) {</div><div class='del'>-        if (RARRAY(ary)-&gt;len &lt; ARY_DEFAULT_SIZE) {</div><div class='del'>-            MEMMOVE(RARRAY(ary)-&gt;ptr, RARRAY(ary)-&gt;ptr+1, VALUE, RARRAY(ary)-&gt;len-1);</div><div class='del'>-	    RARRAY(ary)-&gt;len--;</div><div class='del'>-            return top;</div><div class='del'>-        }</div><div class='del'>-        RARRAY(ary)-&gt;ptr[0] = Qnil;</div><div class='del'>-	ary_make_shared(ary);</div><div class='del'>-    }</div><div class='del'>-    RARRAY(ary)-&gt;ptr++;		/* shift ptr */</div><div class='del'>-    RARRAY(ary)-&gt;len--;</div><div class='del'>-</div><div class='del'>-    return top;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.shift    -&gt; obj or nil</div><div class='del'>- *     array.shift(n) -&gt; array</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'>- *  If a number _n_ is given, returns an array of the first n elements</div><div class='del'>- *  (or less) just like &lt;code&gt;array.slice!(0, n)&lt;/code&gt; does.</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'>- *     args = [ "-m", "-q", "filename" ]</div><div class='del'>- *     args.shift(2)  #=&gt; ["-m", "-q"]</div><div class='del'>- *     args           #=&gt; ["filename"]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_shift_m(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-    long n;</div><div class='add'>+    if (ary-&gt;len == 0) return Qnil;</div><div class='ctx'> </div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	return rb_ary_shift(ary);</div><div class='del'>-    }</div><div class='add'>+    top = ary-&gt;ptr[0];</div><div class='add'>+    ary-&gt;len--;</div><div class='ctx'> </div><div class='del'>-    rb_ary_modify_check(ary);</div><div class='del'>-    result = ary_shared_first(argc, argv, ary, Qfalse);</div><div class='del'>-    n = RARRAY(result)-&gt;len;</div><div class='del'>-    if (FL_TEST(ary, ELTS_SHARED)) {</div><div class='del'>-	RARRAY(ary)-&gt;ptr += n;</div><div class='del'>-	RARRAY(ary)-&gt;len -= n;</div><div class='del'>-	}</div><div class='del'>-    else {</div><div class='del'>-	MEMMOVE(RARRAY(ary)-&gt;ptr, RARRAY(ary)-&gt;ptr+n, VALUE, RARRAY(ary)-&gt;len-n);</div><div class='del'>-	RARRAY(ary)-&gt;len -= n;</div><div class='del'>-    }</div><div class='add'>+    /* sliding items */</div><div class='add'>+    memmove(ary-&gt;ptr, ary-&gt;ptr+1, sizeof(VALUE)*(ary-&gt;len));</div><div class='ctx'> </div><div class='del'>-    return result;</div><div class='add'>+    return top;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_ary_unshift(ary, item)</div><div class='del'>-    VALUE ary, item;</div><div class='add'>+Fary_unshift(ary, item)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    if (RARRAY(ary)-&gt;len == RARRAY(ary)-&gt;aux.capa) {</div><div class='del'>-	long capa_inc = RARRAY(ary)-&gt;aux.capa / 2;</div><div class='del'>-	if (capa_inc &lt; ARY_DEFAULT_SIZE) {</div><div class='del'>-	    capa_inc = ARY_DEFAULT_SIZE;</div><div class='del'>-	}</div><div class='del'>-	RARRAY(ary)-&gt;aux.capa += capa_inc;</div><div class='del'>-	REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, RARRAY(ary)-&gt;aux.capa);</div><div class='add'>+    VALUE top;</div><div class='add'>+</div><div class='add'>+    if (ary-&gt;len &gt;= ary-&gt;capa) {</div><div class='add'>+	ary-&gt;capa+=ARY_DEFAULT_SIZE;</div><div class='add'>+	REALLOC_N(ary-&gt;ptr, VALUE, ary-&gt;capa);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     /* sliding items */</div><div class='del'>-    MEMMOVE(RARRAY(ary)-&gt;ptr + 1, RARRAY(ary)-&gt;ptr, VALUE, RARRAY(ary)-&gt;len);</div><div class='del'>-</div><div class='del'>-    RARRAY(ary)-&gt;len++;</div><div class='del'>-    RARRAY(ary)-&gt;ptr[0] = item;</div><div class='add'>+    memmove(ary-&gt;ptr+1, ary-&gt;ptr, sizeof(VALUE)*(ary-&gt;len));</div><div class='ctx'> </div><div class='del'>-    return ary;</div><div class='add'>+    ary-&gt;len++;</div><div class='add'>+    return ary-&gt;ptr[0] = item;</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='del'>-static VALUE</div><div class='del'>-rb_ary_unshift_m(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='add'>+VALUE</div><div class='add'>+ary_entry(ary, offset)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    int offset;</div><div class='ctx'> {</div><div class='del'>-    long len = RARRAY(ary)-&gt;len;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) return ary;</div><div class='del'>-</div><div class='del'>-    /* make rooms by setting the last item */</div><div class='del'>-    rb_ary_store(ary, len + argc - 1, Qnil);</div><div class='del'>-</div><div class='del'>-    /* sliding items */</div><div class='del'>-    MEMMOVE(RARRAY(ary)-&gt;ptr + argc, RARRAY(ary)-&gt;ptr, VALUE, len);</div><div class='del'>-    MEMCPY(RARRAY(ary)-&gt;ptr, argv, VALUE, argc);</div><div class='del'>-    </div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='add'>+    if (ary-&gt;len == 0) return Qnil;</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='add'>+    if (offset &lt; 0) {</div><div class='add'>+	offset = ary-&gt;len + offset;</div><div class='add'>+    }</div><div class='add'>+    if (offset &lt; 0 || ary-&gt;len &lt;= offset) {</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='del'>-    return RARRAY(ary)-&gt;ptr[offset];</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_ary_entry(ary, offset)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long offset;</div><div class='del'>-{</div><div class='del'>-    if (offset &lt; 0) {</div><div class='del'>-	offset += RARRAY(ary)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    return rb_ary_elt(ary, offset);</div><div class='add'>+    return ary-&gt;ptr[offset];</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_ary_subseq(ary, beg, len)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long beg, len;</div><div class='add'>+ary_subseq(ary, beg, len)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    int beg, len;</div><div class='ctx'> {</div><div class='del'>-    VALUE klass, ary2, shared;</div><div class='add'>+    struct RArray *ary2;</div><div class='ctx'>     VALUE *ptr;</div><div class='ctx'> </div><div class='del'>-    if (beg &gt; RARRAY(ary)-&gt;len) return Qnil;</div><div class='del'>-    if (beg &lt; 0 || len &lt; 0) return Qnil;</div><div class='del'>-</div><div class='del'>-    if (RARRAY(ary)-&gt;len &lt; len || RARRAY(ary)-&gt;len &lt; beg + len) {</div><div class='del'>-	len = RARRAY(ary)-&gt;len - beg;</div><div class='del'>-	if (len &lt; 0)</div><div class='del'>-	    len = 0;</div><div class='del'>-    }</div><div class='del'>-    klass = rb_obj_class(ary);</div><div class='del'>-    if (len == 0) return ary_new(klass, 0);</div><div class='del'>-</div><div class='del'>-    shared = ary_make_shared(ary);</div><div class='del'>-    ptr = RARRAY(ary)-&gt;ptr;</div><div class='del'>-    ary2 = ary_alloc(klass);</div><div class='del'>-    RARRAY(ary2)-&gt;ptr = ptr + beg;</div><div class='del'>-    RARRAY(ary2)-&gt;len = len;</div><div class='del'>-    RARRAY(ary2)-&gt;aux.shared = shared;</div><div class='del'>-    FL_SET(ary2, ELTS_SHARED);</div><div class='del'>-</div><div class='del'>-    return ary2;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_ary_aref(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE arg;</div><div class='del'>-    long beg, len;</div><div class='del'>-</div><div class='del'>-    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='del'>-	beg = NUM2LONG(argv[0]);</div><div class='del'>-	len = NUM2LONG(argv[1]);</div><div class='del'>-	if (beg &lt; 0) {</div><div class='del'>-	    beg += RARRAY(ary)-&gt;len;</div><div class='del'>-	}</div><div class='del'>-	return rb_ary_subseq(ary, beg, len);</div><div class='del'>-    }</div><div class='del'>-    if (argc != 1) {</div><div class='del'>-	rb_scan_args(argc, argv, "11", 0, 0);</div><div class='add'>+    if (beg &lt; 0) {</div><div class='add'>+	beg = ary-&gt;len + beg;</div><div class='add'>+	if (beg &lt; 0) beg = 0;</div><div class='ctx'>     }</div><div class='del'>-    arg = argv[0];</div><div class='del'>-    /* special case - speeding up */</div><div class='del'>-    if (FIXNUM_P(arg)) {</div><div class='del'>-	return rb_ary_entry(ary, FIX2LONG(arg));</div><div class='add'>+    if (len &lt; 0) {</div><div class='add'>+	Fail("negative length for sub-array(size: %d)", ary-&gt;len);</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='add'>+    if (len == 0) {</div><div class='add'>+	return ary_new();</div><div class='ctx'>     }</div><div class='del'>-    /* check if idx is Range */</div><div class='del'>-    switch (rb_range_beg_len(arg, &amp;beg, &amp;len, RARRAY(ary)-&gt;len, 0)) {</div><div class='del'>-      case Qfalse:</div><div class='del'>-	break;</div><div class='del'>-      case Qnil:</div><div class='del'>-	return Qnil;</div><div class='del'>-      default:</div><div class='del'>-	return rb_ary_subseq(ary, beg, len);</div><div class='add'>+    if (beg + len &gt; ary-&gt;len) {</div><div class='add'>+	len = ary-&gt;len - beg;</div><div class='ctx'>     }</div><div class='del'>-    return rb_ary_entry(ary, NUM2LONG(arg));</div><div class='del'>-}</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='add'>+    ary2 = (struct RArray*)ary_new2(len);</div><div class='add'>+    memmove(ary2-&gt;ptr, ary-&gt;ptr+beg, sizeof(VALUE)*len);</div><div class='add'>+    ary2-&gt;len = len;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_at(ary, pos)</div><div class='del'>-    VALUE ary, pos;</div><div class='del'>-{</div><div class='del'>-    return rb_ary_entry(ary, NUM2LONG(pos));</div><div class='add'>+    return (VALUE)ary2;</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='add'>+extern VALUE C_Range;</div><div class='ctx'> </div><div class='del'>-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='del'>-    VALUE ary;</div><div class='add'>+static void</div><div class='add'>+range_beg_end(range, begp, lenp, len)</div><div class='add'>+    VALUE range;</div><div class='add'>+    int *begp, *lenp;</div><div class='add'>+    int len;</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'>-	return ary_shared_first(argc, argv, ary, 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'>- *     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='add'>+    int beg, end;</div><div class='ctx'> </div><div class='del'>-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='del'>-    VALUE ary;</div><div class='del'>-{</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='add'>+    beg = rb_iv_get(range, "start"); beg = NUM2INT(beg);</div><div class='add'>+    end = rb_iv_get(range, "end");   end = NUM2INT(end);</div><div class='add'>+    if (beg &lt; 0) {</div><div class='add'>+	beg = len + beg;</div><div class='add'>+	if (beg &lt; 0) beg = 0;</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	return ary_shared_first(argc, argv, ary, Qtrue);</div><div class='add'>+    if (end &lt; 0) {</div><div class='add'>+	end = len + end;</div><div class='add'>+	if (end &lt; 0) end = 0;</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='add'>+    if (beg &gt; end) {</div><div class='add'>+	int tmp;</div><div class='ctx'> </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='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_fetch(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE pos, ifnone;</div><div class='del'>-    long block_given;</div><div class='del'>-    long idx;</div><div class='del'>-</div><div class='del'>-    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='del'>-    idx = NUM2LONG(pos);</div><div class='del'>-</div><div class='del'>-    if (idx &lt; 0) {</div><div class='del'>-	idx +=  RARRAY(ary)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    if (idx &lt; 0 || RARRAY(ary)-&gt;len &lt;= idx) {</div><div class='del'>-	if (block_given) return rb_yield(pos);</div><div class='del'>-	if (argc == 1) {</div><div class='del'>-	    rb_raise(rb_eIndexError, "index %ld out of array", idx);</div><div class='add'>+	if (verbose) {</div><div class='add'>+	    Warning("start %d is bigger than end %d", beg, end);</div><div class='ctx'> 	}</div><div class='del'>-	return ifnone;</div><div class='add'>+	tmp = beg; beg = end; end = tmp;</div><div class='ctx'>     }</div><div class='del'>-    return RARRAY(ary)-&gt;ptr[idx];</div><div class='add'>+    *begp = beg; *lenp = end - beg + 1;</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'>- *     array.index {|item| block} -&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;. If a block is given instead of an</div><div class='del'>- *  argument, returns first object for which &lt;em&gt;block&lt;/em&gt; is true.</div><div class='del'>- *  Returns &lt;code&gt;nil&lt;/code&gt; if 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'>- *     a.index{|x|x=="b"}  #=&gt; 1</div><div class='del'>- *</div><div class='del'>- *  This is an alias of &lt;code&gt;#find_index&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_ary_index(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_aref(ary, args)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    VALUE args;</div><div class='ctx'> {</div><div class='del'>-    VALUE val;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    if (argc  == 0) {</div><div class='del'>-	RETURN_ENUMERATOR(ary, 0, 0);</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'>-		return LONG2NUM(i);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;val);</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	if (rb_equal(RARRAY(ary)-&gt;ptr[i], val))</div><div class='del'>-	    return LONG2NUM(i);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='add'>+    VALUE arg1, arg2;</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;. If a block is given instead of an</div><div class='del'>- *  argument, returns first object for which &lt;em&gt;block&lt;/em&gt; is</div><div class='del'>- *  true. Returns &lt;code&gt;nil&lt;/code&gt; if 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'>- *     a.rindex{|x|x=="b"}  #=&gt; 3</div><div class='del'>- */</div><div class='add'>+    if (rb_scan_args(args, "11", &amp;arg1, &amp;arg2) == 2) {</div><div class='add'>+	int beg, len;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_rindex(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE val;</div><div class='del'>-    long i = RARRAY(ary)-&gt;len;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	RETURN_ENUMERATOR(ary, 0, 0);</div><div class='del'>-	while (i--) {</div><div class='del'>-	    if (RTEST(rb_yield(RARRAY(ary)-&gt;ptr[i])))</div><div class='del'>-		return LONG2NUM(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'>-	    }</div><div class='del'>-	}</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;val);</div><div class='del'>-    while (i--) {</div><div class='del'>-	if (rb_equal(RARRAY(ary)-&gt;ptr[i], val))</div><div class='del'>-	    return LONG2NUM(i);</div><div class='del'>-	if (i &gt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	    i = RARRAY(ary)-&gt;len;</div><div class='add'>+	beg = NUM2INT(arg1);</div><div class='add'>+	len = NUM2INT(arg2);</div><div class='add'>+	if (len &lt;= 0) {</div><div class='add'>+	    return ary_new();</div><div class='ctx'> 	}</div><div class='add'>+	return ary_subseq(ary, beg, len);</div><div class='ctx'>     }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</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='add'>+    /* special case - speeding up */</div><div class='add'>+    if (FIXNUM_P(arg1)) {</div><div class='add'>+	return ary_entry(ary, NUM2INT(arg1));</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_indexes(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE new_ary;</div><div class='del'>-    long i;</div><div class='add'>+    /* check if idx is Range */</div><div class='add'>+    if (obj_is_kind_of(arg1, C_Range)) {</div><div class='add'>+	int beg, len;</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='del'>-    new_ary = rb_ary_new2(argc);</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	rb_ary_push(new_ary, rb_ary_aref(1, argv+i, ary));</div><div class='add'>+	range_beg_end(arg1, &amp;beg, &amp;len, ary-&gt;len);</div><div class='add'>+	return ary_subseq(ary, beg, len);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return new_ary;</div><div class='add'>+    return ary_entry(ary, NUM2INT(arg1));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_ary_to_ary(obj)</div><div class='del'>-    VALUE obj;</div><div class='add'>+static VALUE</div><div class='add'>+Fary_aset(ary, args)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    VALUE args;</div><div class='ctx'> {</div><div class='del'>-    if (TYPE(obj) == T_ARRAY) {</div><div class='del'>-	return obj;</div><div class='del'>-    }</div><div class='del'>-    if (rb_respond_to(obj, rb_intern("to_ary"))) {</div><div class='del'>-	return rb_convert_type(obj, T_ARRAY, "Array", "to_ary");</div><div class='del'>-    }</div><div class='del'>-    return rb_ary_new3(1, obj);</div><div class='del'>-}</div><div class='add'>+    VALUE arg1, arg2;</div><div class='add'>+    struct RArray *arg3;</div><div class='add'>+    int offset;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-rb_ary_splice(ary, beg, len, rpl)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long beg, len;</div><div class='del'>-    VALUE rpl;</div><div class='del'>-{</div><div class='del'>-    long rlen;</div><div class='add'>+    if (rb_scan_args(args, "21", &amp;arg1, &amp;arg2, &amp;arg3) == 3) {</div><div class='add'>+	int beg, len;</div><div class='ctx'> </div><div class='del'>-    if (len &lt; 0) rb_raise(rb_eIndexError, "negative length (%ld)", len);</div><div class='del'>-    if (beg &lt; 0) {</div><div class='del'>-	beg += RARRAY(ary)-&gt;len;</div><div class='add'>+	beg = NUM2INT(arg1);</div><div class='add'>+	Check_Type(arg3, T_ARRAY);</div><div class='ctx'> 	if (beg &lt; 0) {</div><div class='del'>-	    beg -= RARRAY(ary)-&gt;len;</div><div class='del'>-	    rb_raise(rb_eIndexError, "index %ld out of array", beg);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (RARRAY(ary)-&gt;len &lt; len || RARRAY(ary)-&gt;len &lt; beg + len) {</div><div class='del'>-	len = RARRAY(ary)-&gt;len - beg;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (NIL_P(rpl)) {</div><div class='del'>-	rlen = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rpl = rb_ary_to_ary(rpl);</div><div class='del'>-	rlen = RARRAY(rpl)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-</div><div class='del'>-    if (beg &gt;= RARRAY(ary)-&gt;len) {</div><div class='del'>-	if (beg &gt; ARY_MAX_SIZE - rlen) {</div><div class='del'>-	    rb_raise(rb_eIndexError, "index %ld too big", beg);</div><div class='del'>-	}</div><div class='del'>-	len = beg + rlen;</div><div class='del'>-	if (len &gt;= RARRAY(ary)-&gt;aux.capa) {</div><div class='del'>-	    REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, len);</div><div class='del'>-	    RARRAY(ary)-&gt;aux.capa = len;</div><div class='add'>+	    beg = ary-&gt;len + beg;</div><div class='add'>+	    if (beg &lt; 0) {</div><div class='add'>+		Fail("negative index for array(size: %d)", ary-&gt;len);</div><div class='add'>+	    }</div><div class='ctx'> 	}</div><div class='del'>-	rb_mem_clear(RARRAY(ary)-&gt;ptr + RARRAY(ary)-&gt;len, beg - RARRAY(ary)-&gt;len);</div><div class='del'>-	if (rlen &gt; 0) {</div><div class='del'>-	    MEMCPY(RARRAY(ary)-&gt;ptr + beg, RARRAY(rpl)-&gt;ptr, VALUE, rlen);</div><div class='add'>+	if (beg &gt;= ary-&gt;len) {</div><div class='add'>+	    len = beg + arg3-&gt;len;</div><div class='add'>+	    if (len &gt;= ary-&gt;capa) {</div><div class='add'>+		ary-&gt;capa=len;</div><div class='add'>+		REALLOC_N(ary-&gt;ptr, VALUE, ary-&gt;capa);</div><div class='add'>+	    }</div><div class='add'>+	    bzero(ary-&gt;ptr+ary-&gt;len, sizeof(VALUE)*(beg-ary-&gt;len));</div><div class='add'>+	    memcpy(ary-&gt;ptr+beg, arg3-&gt;ptr, sizeof(VALUE)*arg3-&gt;len);</div><div class='add'>+	    ary-&gt;len = len;</div><div class='ctx'> 	}</div><div class='del'>-	RARRAY(ary)-&gt;len = len;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	long alen;</div><div class='add'>+	else {</div><div class='add'>+	    int alen;</div><div class='ctx'> </div><div class='del'>-	if (beg + len &gt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	    len = RARRAY(ary)-&gt;len - beg;</div><div class='del'>-	}</div><div class='add'>+	    len = NUM2INT(arg2);</div><div class='add'>+	    if (beg + len &gt; ary-&gt;len) {</div><div class='add'>+		len = ary-&gt;len - beg;</div><div class='add'>+	    }</div><div class='add'>+	    if (len &lt; 0) {</div><div class='add'>+		Fail("negative length for sub-array(size: %d)", ary-&gt;len);</div><div class='add'>+	    }</div><div class='ctx'> </div><div class='del'>-	alen = RARRAY(ary)-&gt;len + rlen - len;</div><div class='del'>-	if (alen &gt;= RARRAY(ary)-&gt;aux.capa) {</div><div class='del'>-	    REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, alen);</div><div class='del'>-	    RARRAY(ary)-&gt;aux.capa = alen;</div><div class='del'>-	}</div><div class='add'>+	    alen = ary-&gt;len + arg3-&gt;len - len;</div><div class='add'>+	    if (alen &gt;= ary-&gt;capa) {</div><div class='add'>+		ary-&gt;capa=alen;</div><div class='add'>+		REALLOC_N(ary-&gt;ptr, VALUE, ary-&gt;capa);</div><div class='add'>+	    }</div><div class='ctx'> </div><div class='del'>-	if (len != rlen) {</div><div class='del'>-	    MEMMOVE(RARRAY(ary)-&gt;ptr + beg + rlen, RARRAY(ary)-&gt;ptr + beg + len,</div><div class='del'>-		    VALUE, RARRAY(ary)-&gt;len - (beg + len));</div><div class='del'>-	    RARRAY(ary)-&gt;len = alen;</div><div class='del'>-	}</div><div class='del'>-	if (rlen &gt; 0) {</div><div class='del'>-	    MEMMOVE(RARRAY(ary)-&gt;ptr + beg, RARRAY(rpl)-&gt;ptr, VALUE, rlen);</div><div class='add'>+	    memmove(ary-&gt;ptr+beg+arg3-&gt;len, ary-&gt;ptr+beg+len,</div><div class='add'>+		    sizeof(VALUE)*(ary-&gt;len-(beg+len)));</div><div class='add'>+	    memmove(ary-&gt;ptr+beg, arg3-&gt;ptr, sizeof(VALUE)*arg3-&gt;len);</div><div class='add'>+	    ary-&gt;len = alen;</div><div class='ctx'> 	}</div><div class='add'>+	return (VALUE)arg3;</div><div class='ctx'>     }</div><div class='del'>-}</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='del'>-static VALUE</div><div class='del'>-rb_ary_aset(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long offset, beg, len;</div><div class='add'>+    /* check if idx is Range */</div><div class='add'>+    if (obj_is_kind_of(arg1, C_Range)) {</div><div class='add'>+	int beg, len;</div><div class='add'>+</div><div class='add'>+	Check_Type(arg2, T_ARRAY);</div><div class='add'>+	range_beg_end(arg1, &amp;beg, &amp;len, ary-&gt;len);</div><div class='add'>+	if (ary-&gt;len &lt; beg) {</div><div class='add'>+	    len = beg + RARRAY(arg2)-&gt;len;</div><div class='add'>+	    if (len &gt;= ary-&gt;capa) {</div><div class='add'>+		ary-&gt;capa=len;</div><div class='add'>+		REALLOC_N(ary-&gt;ptr, VALUE, ary-&gt;capa);</div><div class='add'>+	    }</div><div class='add'>+	    bzero(ary-&gt;ptr+ary-&gt;len, sizeof(VALUE)*(beg-ary-&gt;len));</div><div class='add'>+	    memcpy(ary-&gt;ptr+beg, RARRAY(arg2)-&gt;ptr,</div><div class='add'>+		   sizeof(VALUE)*RARRAY(arg2)-&gt;len);</div><div class='add'>+	    ary-&gt;len = len;</div><div class='add'>+	}</div><div class='add'>+	else {</div><div class='add'>+	    int alen;</div><div class='add'>+</div><div class='add'>+	    alen = ary-&gt;len + RARRAY(arg2)-&gt;len - len;</div><div class='add'>+	    if (alen &gt;= ary-&gt;capa) {</div><div class='add'>+		ary-&gt;capa=alen;</div><div class='add'>+		REALLOC_N(ary-&gt;ptr, VALUE, ary-&gt;capa);</div><div class='add'>+	    }</div><div class='ctx'> </div><div class='del'>-    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='add'>+	    memmove(ary-&gt;ptr+beg+RARRAY(arg2)-&gt;len, ary-&gt;ptr+beg+len,</div><div class='add'>+		    sizeof(VALUE)*(ary-&gt;len-(beg+len)));</div><div class='add'>+	    memmove(ary-&gt;ptr+beg, RARRAY(arg2)-&gt;ptr,</div><div class='add'>+		    sizeof(VALUE)*RARRAY(arg2)-&gt;len);</div><div class='add'>+	    ary-&gt;len = alen;</div><div class='ctx'> 	}</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='del'>-	return argv[2];</div><div class='del'>-    }</div><div class='del'>-    if (argc != 2) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc);</div><div class='del'>-    }</div><div class='del'>-    if (FIXNUM_P(argv[0])) {</div><div class='del'>-	offset = FIX2LONG(argv[0]);</div><div class='del'>-	goto fixnum;</div><div class='del'>-    }</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 (rb_range_beg_len(argv[0], &amp;beg, &amp;len, RARRAY(ary)-&gt;len, 1)) {</div><div class='del'>-	/* check if idx is Range */</div><div class='del'>-	rb_ary_splice(ary, beg, len, argv[1]);</div><div class='del'>-	return argv[1];</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    offset = NUM2LONG(argv[0]);</div><div class='del'>-fixnum:</div><div class='del'>-    rb_ary_store(ary, offset, argv[1]);</div><div class='del'>-    return argv[1];</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_insert(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long pos;</div><div class='del'>-</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='del'>-    }</div><div class='del'>-    pos = NUM2LONG(argv[0]);</div><div class='del'>-    if (pos == -1) {</div><div class='del'>-	pos = RARRAY(ary)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    if (pos &lt; 0) {</div><div class='del'>-	pos++;</div><div class='add'>+	return arg2;</div><div class='ctx'>     }</div><div class='del'>-    rb_ary_splice(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1));</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_ary_each(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	rb_yield(RARRAY(ary)-&gt;ptr[i]);</div><div class='add'>+    offset = NUM2INT(arg1);</div><div class='add'>+    if (offset &lt; 0) {</div><div class='add'>+	offset = ary-&gt;len + offset;</div><div class='ctx'>     }</div><div class='del'>-    return ary;</div><div class='add'>+    astore(ary, offset, arg2);</div><div class='add'>+    return arg2;</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='del'>-rb_ary_each_index(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_each(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	rb_yield(LONG2NUM(i));</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'>- *  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='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_reverse_each(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</div><div class='del'>-    len = RARRAY(ary)-&gt;len;</div><div class='del'>-    while (len--) {</div><div class='del'>-	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='add'>+    if (iterator_p()) {</div><div class='add'>+	for (i=0; i&lt;ary-&gt;len; i++) {</div><div class='add'>+	    rb_yield(ary-&gt;ptr[i]);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    return ary;</div><div class='add'>+    else {</div><div class='add'>+	return (VALUE)ary;</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'>- *     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='del'>-rb_ary_length(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_length(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    return LONG2NUM(RARRAY(ary)-&gt;len);</div><div class='add'>+    return INT2FIX(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='del'>-rb_ary_empty_p(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_clone(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    if (RARRAY(ary)-&gt;len == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='add'>+    VALUE ary2 = ary_new2(ary-&gt;len);</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_ary_dup(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE dup = rb_ary_new2(RARRAY(ary)-&gt;len);</div><div class='del'>-</div><div class='del'>-    DUPSETUP(dup, ary);</div><div class='del'>-    MEMCPY(RARRAY(dup)-&gt;ptr, RARRAY(ary)-&gt;ptr, VALUE, RARRAY(ary)-&gt;len);</div><div class='del'>-    RARRAY(dup)-&gt;len = RARRAY(ary)-&gt;len;</div><div class='del'>-    return dup;</div><div class='add'>+    CLONESETUP(ary2, ary);</div><div class='add'>+    memcpy(RARRAY(ary2)-&gt;ptr, ary-&gt;ptr, sizeof(VALUE)*ary-&gt;len);</div><div class='add'>+    RARRAY(ary2)-&gt;len = ary-&gt;len;</div><div class='add'>+    return ary2;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-extern VALUE rb_output_fs;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-inspect_join(ary, arg)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE *arg;</div><div class='del'>-{</div><div class='del'>-    return rb_ary_join(arg[0], arg[1]);</div><div class='del'>-}</div><div class='add'>+extern VALUE OFS;</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_ary_join(ary, sep)</div><div class='del'>-    VALUE ary, sep;</div><div class='add'>+ary_join(ary, sep)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    struct RString *sep;</div><div class='ctx'> {</div><div class='del'>-    long len = 1, i;</div><div class='del'>-    int taint = Qfalse;</div><div class='add'>+    int i;</div><div class='ctx'>     VALUE result, tmp;</div><div class='add'>+    if (ary-&gt;len == 0) return str_new(0, 0);</div><div class='ctx'> </div><div class='del'>-    if (RARRAY(ary)-&gt;len == 0) return rb_str_new(0, 0);</div><div class='del'>-    if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = Qtrue;</div><div class='add'>+    if (TYPE(ary-&gt;ptr[0]) == T_STRING)</div><div class='add'>+	result = Fstr_clone(ary-&gt;ptr[0]);</div><div class='add'>+    else</div><div class='add'>+	result = obj_as_string(ary-&gt;ptr[0]);</div><div class='ctx'> </div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	tmp = rb_check_string_type(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	len += NIL_P(tmp) ? 10 : RSTRING(tmp)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(sep)) {</div><div class='del'>-	StringValue(sep);</div><div class='del'>-	len += RSTRING(sep)-&gt;len * (RARRAY(ary)-&gt;len - 1);</div><div class='del'>-    }</div><div class='del'>-    result = rb_str_buf_new(len);</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	tmp = RARRAY(ary)-&gt;ptr[i];</div><div class='add'>+    for (i=1; i&lt;ary-&gt;len; i++) {</div><div class='add'>+	int need_free = 1;</div><div class='add'>+	tmp = ary-&gt;ptr[i];</div><div class='ctx'> 	switch (TYPE(tmp)) {</div><div class='ctx'> 	  case T_STRING:</div><div class='add'>+	    need_free = 0;</div><div class='ctx'> 	    break;</div><div class='ctx'> 	  case T_ARRAY:</div><div class='del'>-	    if (rb_inspecting_p(tmp)) {</div><div class='del'>-		tmp = rb_str_new2("[...]");</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		VALUE args[2];</div><div class='del'>-</div><div class='del'>-		args[0] = tmp;</div><div class='del'>-		args[1] = sep;</div><div class='del'>-		tmp = rb_protect_inspect(inspect_join, ary, (VALUE)args);</div><div class='del'>-	    }</div><div class='add'>+	    tmp = ary_join(tmp, sep);</div><div class='ctx'> 	    break;</div><div class='ctx'> 	  default:</div><div class='del'>-	    tmp = rb_obj_as_string(tmp);</div><div class='add'>+	    tmp = obj_as_string(tmp);</div><div class='ctx'> 	}</div><div class='del'>-	if (i &gt; 0 &amp;&amp; !NIL_P(sep))</div><div class='del'>-	    rb_str_buf_append(result, sep);</div><div class='del'>-	rb_str_buf_append(result, tmp);</div><div class='del'>-	if (OBJ_TAINTED(tmp)) taint = Qtrue;</div><div class='add'>+	if (sep) str_cat(result, sep-&gt;ptr, sep-&gt;len);</div><div class='add'>+	str_cat(result, RSTRING(tmp)-&gt;ptr, RSTRING(tmp)-&gt;len);</div><div class='add'>+	if (need_free == 1) obj_free(tmp);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (taint) OBJ_TAINT(result);</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='del'>-rb_ary_join_m(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_join(ary, args)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    VALUE args;</div><div class='ctx'> {</div><div class='ctx'>     VALUE sep;</div><div class='ctx'> </div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;sep);</div><div class='del'>-    if (NIL_P(sep)) sep = rb_output_fs;</div><div class='del'>-    </div><div class='del'>-    return rb_ary_join(ary, sep);</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_ary_to_s(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    if (RARRAY(ary)-&gt;len == 0) return rb_str_new(0, 0);</div><div class='del'>-    </div><div class='del'>-    return rb_ary_join(ary, rb_output_fs);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ID inspect_key;</div><div class='del'>-</div><div class='del'>-struct inspect_arg {</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    VALUE arg1, arg2;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-inspect_call(arg)</div><div class='del'>-    struct inspect_arg *arg;</div><div class='del'>-{</div><div class='del'>-    return (*arg-&gt;func)(arg-&gt;arg1, arg-&gt;arg2);</div><div class='del'>-}</div><div class='add'>+    rb_scan_args(args, "01", &amp;sep);</div><div class='add'>+    if (sep == Qnil) sep = OFS;</div><div class='ctx'> </div><div class='del'>-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='del'>-inspect_ensure(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE inspect_tbl;</div><div class='del'>-</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='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_protect_inspect(func, obj, arg)</div><div class='del'>-    VALUE (*func)(ANYARGS);</div><div class='del'>-    VALUE obj, arg;</div><div class='del'>-{</div><div class='del'>-    struct inspect_arg iarg;</div><div class='del'>-    VALUE inspect_tbl;</div><div class='del'>-    VALUE id;</div><div class='del'>-</div><div class='del'>-    inspect_tbl = get_inspect_tbl(Qtrue);</div><div class='del'>-    id = rb_obj_id(obj);</div><div class='del'>-    if (rb_ary_includes(inspect_tbl, id)) {</div><div class='del'>-	return (*func)(obj, arg);</div><div class='del'>-    }</div><div class='del'>-    rb_ary_push(inspect_tbl, id);</div><div class='del'>-    iarg.func = func;</div><div class='del'>-    iarg.arg1 = obj;</div><div class='del'>-    iarg.arg2 = arg;</div><div class='add'>+    if (sep != Qnil)</div><div class='add'>+	Check_Type(sep, T_STRING);</div><div class='ctx'> </div><div class='del'>-    return rb_ensure(inspect_call, (VALUE)&amp;iarg, inspect_ensure, obj);</div><div class='add'>+    return ary_join(ary, sep);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_inspecting_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE inspect_tbl;</div><div class='del'>-</div><div class='del'>-    inspect_tbl = get_inspect_tbl(Qfalse);</div><div class='del'>-    if (NIL_P(inspect_tbl)) return Qfalse;</div><div class='del'>-    return rb_ary_includes(inspect_tbl, rb_obj_id(obj));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-inspect_ary(ary)</div><div class='add'>+Fary_to_s(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    int tainted = OBJ_TAINTED(ary);</div><div class='del'>-    long i;</div><div class='del'>-    VALUE s, str;</div><div class='del'>-</div><div class='del'>-    str = rb_str_buf_new2("[");</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	s = rb_inspect(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	if (OBJ_TAINTED(s)) tainted = Qtrue;</div><div class='del'>-	if (i &gt; 0) rb_str_buf_cat2(str, ", ");</div><div class='del'>-	rb_str_buf_append(str, s);</div><div class='del'>-    }</div><div class='del'>-    rb_str_buf_cat2(str, "]");</div><div class='del'>-    if (tainted) OBJ_TAINT(str);</div><div class='add'>+    VALUE str = ary_join(ary, OFS);</div><div class='add'>+    if (str == Qnil) return str_new(0, 0);</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='del'>-rb_ary_inspect(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_inspect(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    if (RARRAY(ary)-&gt;len == 0) return rb_str_new2("[]");</div><div class='del'>-    if (rb_inspecting_p(ary)) return rb_str_new2("[...]");</div><div class='del'>-    return rb_protect_inspect(inspect_ary, ary, 0);</div><div class='del'>-}</div><div class='add'>+    int i, len;</div><div class='add'>+    VALUE str;</div><div class='add'>+    char *p;</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='add'>+    ary = (struct RArray*)Fary_clone(ary);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_to_a(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    if (rb_obj_class(ary) != rb_cArray) {</div><div class='del'>-	VALUE dup = rb_ary_new2(RARRAY(ary)-&gt;len);</div><div class='del'>-	rb_ary_replace(dup, ary);</div><div class='del'>-	return dup;</div><div class='add'>+    len = ary-&gt;len;</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='add'>+	ary-&gt;ptr[i] = rb_funcall(ary-&gt;ptr[i], rb_intern("_inspect"), 0, Qnil);</div><div class='ctx'>     }</div><div class='del'>-    return ary;</div><div class='del'>-}</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='add'>+    str = str_new2(", ");</div><div class='add'>+    str = ary_join(ary, str);</div><div class='add'>+    if (str == Qnil) return str_new2("[]");</div><div class='add'>+    len = RSTRING(str)-&gt;len;</div><div class='add'>+    str_grow(str, len+2);</div><div class='add'>+    p = RSTRING(str)-&gt;ptr;</div><div class='add'>+    memmove(p+1, p, len);</div><div class='add'>+    p[0] = '[';</div><div class='add'>+    p[len+1] = ']';</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_to_ary_m(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return ary;</div><div class='add'>+    return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_ary_reverse(ary)</div><div class='add'>+static VALUE</div><div class='add'>+Fary_to_a(ary)</div><div class='ctx'>     VALUE ary;</div><div class='ctx'> {</div><div class='del'>-    VALUE *p1, *p2;</div><div class='del'>-    VALUE tmp;</div><div class='del'>-</div><div class='del'>-    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='del'>-    }</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='del'>-rb_ary_reverse_bang(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_reverse(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    return rb_ary_reverse(ary);</div><div class='del'>-}</div><div class='add'>+    VALUE ary2 = ary_new2(ary-&gt;len);</div><div class='add'>+    int i, j;</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='add'>+    for (i=ary-&gt;len-1, j=0; i &gt;=0; i--, j++) {</div><div class='add'>+	RARRAY(ary2)-&gt;ptr[j] = ary-&gt;ptr[i];</div><div class='add'>+    }</div><div class='add'>+    RARRAY(ary2)-&gt;len = ary-&gt;len;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_reverse_m(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return rb_ary_reverse(rb_ary_dup(ary));</div><div class='add'>+    return ary2;</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='add'>+static ID cmp;</div><div class='ctx'> </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(assoc_new(*a, *b));</div><div class='add'>+    return NUM2INT(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='del'>-    VALUE *ap, *bp;</div><div class='del'>-    struct ary_sort_data *data;</div><div class='del'>-{</div><div class='del'>-    VALUE retval;</div><div class='del'>-    VALUE a = *ap, b = *bp;</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    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='del'>-	return 0;</div><div class='del'>-    }</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='del'>-    }</div><div class='del'>-</div><div class='del'>-    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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sort_internal(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</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='del'>-    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='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sort_unlock(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    FL_UNSET(ary, ARY_TMPLOCK);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_ary_sort_bang(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    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='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_ary_sort(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    ary = rb_ary_dup(ary);</div><div class='del'>-    rb_ary_sort_bang(ary);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_collect(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    VALUE collect;</div><div class='del'>-</div><div class='del'>-    if (!rb_block_given_p()) {</div><div class='del'>-	return rb_ary_new4(RARRAY(ary)-&gt;len, RARRAY(ary)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-</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='del'>-	rb_ary_push(collect, rb_yield(RARRAY(ary)-&gt;ptr[i]));</div><div class='del'>-    }</div><div class='del'>-    return collect;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_collect_bang(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+sort_2(a, b)</div><div class='add'>+    VALUE *a, *b;</div><div class='ctx'> {</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    return ary;</div><div class='add'>+    VALUE retval = rb_funcall(*a, cmp, 1, *b);</div><div class='add'>+    return NUM2INT(retval);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> 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='add'>+Fary_sort(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</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='del'>-static VALUE</div><div class='del'>-rb_ary_values_at(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return rb_values_at(ary, RARRAY(ary)-&gt;len, argc, argv, rb_ary_entry);</div><div class='add'>+    qsort(ary-&gt;ptr, ary-&gt;len, sizeof(VALUE), iterator_p()?sort_1:sort_2);</div><div class='add'>+    return (VALUE)ary;</div><div class='ctx'> }</div><div class='ctx'> </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='ctx'> static VALUE</div><div class='del'>-rb_ary_select(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</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='del'>-	}</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.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='del'>-VALUE</div><div class='del'>-rb_ary_delete(ary, item)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_delete(ary, item)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'>     VALUE item;</div><div class='ctx'> {</div><div class='del'>-    long i1, i2;</div><div class='del'>-</div><div class='del'>-    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='add'>+    int i1, i2;</div><div class='ctx'> </div><div class='del'>-	if (rb_equal(e, item)) continue;</div><div class='add'>+    for (i1 = i2 = 0; i1 &lt; ary-&gt;len; i1++) {</div><div class='add'>+	if (rb_funcall(ary-&gt;ptr[i1], eq, 1, item)) continue;</div><div class='ctx'> 	if (i1 != i2) {</div><div class='del'>-	    rb_ary_store(ary, i2, e);</div><div class='add'>+	    ary-&gt;ptr[i2] = ary-&gt;ptr[i1];</div><div class='ctx'> 	}</div><div class='ctx'> 	i2++;</div><div class='ctx'>     }</div><div class='del'>-    if (RARRAY(ary)-&gt;len == i2) {</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    return rb_yield(item);</div><div class='del'>-	}</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</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='del'>-	    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='del'>-    }</div><div class='del'>-</div><div class='del'>-    return item;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_ary_delete_at(ary, pos)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long pos;</div><div class='del'>-{</div><div class='del'>-    long i, len = RARRAY(ary)-&gt;len;</div><div class='del'>-    VALUE del;</div><div class='del'>-</div><div class='del'>-    if (pos &gt;= len) return Qnil;</div><div class='del'>-    if (pos &lt; 0) {</div><div class='del'>-	pos += len;</div><div class='del'>-	if (pos &lt; 0) return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    del = RARRAY(ary)-&gt;ptr[pos];</div><div class='del'>-    for (i = pos + 1; i &lt; len; i++, pos++) {</div><div class='del'>-	RARRAY(ary)-&gt;ptr[pos] = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-    }</div><div class='del'>-    RARRAY(ary)-&gt;len = pos;</div><div class='del'>-</div><div class='del'>-    return del;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_delete_at_m(ary, pos)</div><div class='del'>-    VALUE ary, pos;</div><div class='del'>-{</div><div class='del'>-    return rb_ary_delete_at(ary, NUM2LONG(pos));</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_slice_bang(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE arg1, arg2;</div><div class='del'>-    long pos, len, orig_len;</div><div class='del'>-</div><div class='del'>-    rb_ary_modify_check(ary);</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;arg1, &amp;arg2) == 2) {</div><div class='del'>-	pos = NUM2LONG(arg1);</div><div class='del'>-	len = NUM2LONG(arg2);</div><div class='del'>-      delete_pos_len:</div><div class='del'>-	if (len &lt; 0) return Qnil;</div><div class='del'>-	orig_len = RARRAY_LEN(ary);</div><div class='del'>-	if (pos &lt; 0) {</div><div class='del'>-	    pos += orig_len;</div><div class='del'>-	    if (pos &lt; 0) return Qnil;</div><div class='del'>-	}</div><div class='del'>-	else if (orig_len &lt; pos) return Qnil;</div><div class='del'>-	if (orig_len &lt; pos + len) {</div><div class='del'>-	    len = orig_len - pos;</div><div class='del'>-	}</div><div class='del'>-	if (len == 0) return rb_ary_new2(0);</div><div class='del'>-	arg2 = rb_ary_new4(len, RARRAY_PTR(ary)+pos);</div><div class='del'>-	RBASIC(arg2)-&gt;klass = rb_obj_class(ary);</div><div class='del'>-	rb_ary_splice(ary, pos, len, Qnil);	/* Qundef in 1.9 */</div><div class='del'>-	return arg2;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!FIXNUM_P(arg1)) {</div><div class='del'>-	switch (rb_range_beg_len(arg1, &amp;pos, &amp;len, RARRAY_LEN(ary), 0)) {</div><div class='del'>-	  case Qtrue:</div><div class='del'>-	    /* valid range */</div><div class='del'>-	    goto delete_pos_len;</div><div class='del'>-	  case Qnil:</div><div class='del'>-	    /* invalid range */</div><div class='del'>-	    return Qnil;</div><div class='del'>-	  default:</div><div class='del'>-	    /* not a range */</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='add'>+    ary-&gt;len = i2;</div><div class='ctx'> </div><div class='del'>-    return rb_ary_delete_at(ary, NUM2LONG(arg1));</div><div class='add'>+    return (VALUE)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; 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='del'>-rb_ary_reject_bang(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_delete_if(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    long i1, i2;</div><div class='add'>+    int i1, i2;</div><div class='ctx'> </div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    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'>+    for (i1 = i2 = 0; i1 &lt; ary-&gt;len; i1++) {</div><div class='add'>+	if (rb_yield(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'>+	    ary-&gt;ptr[i2] = ary-&gt;ptr[i1];</div><div class='ctx'> 	}</div><div class='ctx'> 	i2++;</div><div class='ctx'>     }</div><div class='del'>-    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='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_reject(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</div><div class='del'>-    ary = rb_ary_dup(ary);</div><div class='del'>-    rb_ary_reject_bang(ary);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_delete_if(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</div><div class='del'>-    rb_ary_reject_bang(ary);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_zip(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    int i, j;</div><div class='del'>-    long len;</div><div class='del'>-    VALUE result;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	argv[i] = to_ary(argv[i]);</div><div class='del'>-    }</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	    VALUE tmp = rb_ary_new2(argc+1);</div><div class='del'>-</div><div class='del'>-	    rb_ary_push(tmp, rb_ary_elt(ary, i));</div><div class='del'>-	    for (j=0; j&lt;argc; j++) {</div><div class='del'>-		rb_ary_push(tmp, rb_ary_elt(argv[j], i));</div><div class='del'>-	    }</div><div class='del'>-	    rb_yield(tmp);</div><div class='del'>-	}</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    len = RARRAY(ary)-&gt;len;</div><div class='del'>-    result = rb_ary_new2(len);</div><div class='del'>-    for (i=0; i&lt;len; i++) {</div><div class='del'>-	VALUE tmp = rb_ary_new2(argc+1);</div><div class='add'>+    ary-&gt;len = i2;</div><div class='ctx'> </div><div class='del'>-	rb_ary_push(tmp, rb_ary_elt(ary, i));</div><div class='del'>-	for (j=0; j&lt;argc; j++) {</div><div class='del'>-	    rb_ary_push(tmp, rb_ary_elt(argv[j], i));</div><div class='del'>-	}</div><div class='del'>-	rb_ary_push(result, tmp);</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.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='del'>-static VALUE</div><div class='del'>-rb_ary_transpose(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long elen = -1, alen, i, j;</div><div class='del'>-    VALUE tmp, result = 0;</div><div class='del'>-</div><div class='del'>-    alen = RARRAY(ary)-&gt;len;</div><div class='del'>-    if (alen == 0) return rb_ary_dup(ary);</div><div class='del'>-    for (i=0; i&lt;alen; i++) {</div><div class='del'>-	tmp = to_ary(rb_ary_elt(ary, i));</div><div class='del'>-	if (elen &lt; 0) {		/* first element */</div><div class='del'>-	    elen = RARRAY(tmp)-&gt;len;</div><div class='del'>-	    result = rb_ary_new2(elen);</div><div class='del'>-	    for (j=0; j&lt;elen; j++) {</div><div class='del'>-		rb_ary_store(result, j, rb_ary_new2(alen));</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	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='del'>-		     RARRAY(tmp)-&gt;len, elen);</div><div class='del'>-	}</div><div class='del'>-	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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return result;</div><div class='add'>+    return (VALUE)ary;</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='del'>-rb_ary_replace(copy, orig)</div><div class='del'>-    VALUE copy, orig;</div><div class='add'>+Fary_clear(ary)</div><div class='add'>+    struct RArray *ary;</div><div class='ctx'> {</div><div class='del'>-    VALUE shared;</div><div class='del'>-</div><div class='del'>-    rb_ary_modify(copy);</div><div class='del'>-    orig = to_ary(orig);</div><div class='del'>-    if (copy == orig) return copy;</div><div class='del'>-    shared = ary_make_shared(orig);</div><div class='del'>-    if (RARRAY(copy)-&gt;ptr &amp;&amp; !FL_TEST(copy, ELTS_SHARED))</div><div class='del'>-	free(RARRAY(copy)-&gt;ptr);</div><div class='del'>-    RARRAY(copy)-&gt;ptr = RARRAY(orig)-&gt;ptr;</div><div class='del'>-    RARRAY(copy)-&gt;len = RARRAY(orig)-&gt;len;</div><div class='del'>-    RARRAY(copy)-&gt;aux.shared = shared;</div><div class='del'>-    FL_SET(copy, ELTS_SHARED);</div><div class='del'>-</div><div class='del'>-    return copy;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_ary_clear(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    RARRAY(ary)-&gt;len = 0;</div><div class='del'>-    if (ARY_DEFAULT_SIZE * 2 &lt; RARRAY(ary)-&gt;aux.capa) {</div><div class='del'>-	REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, ARY_DEFAULT_SIZE * 2);</div><div class='del'>-	RARRAY(ary)-&gt;aux.capa = ARY_DEFAULT_SIZE * 2;</div><div class='del'>-    }</div><div class='del'>-    return ary;</div><div class='add'>+    ary-&gt;len = 0;</div><div class='add'>+    return (VALUE)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='del'>-rb_ary_fill(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_fill(ary, args)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    VALUE args;</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'>+    int beg, len, end;</div><div class='ctx'>     VALUE *p, *pend;</div><div class='del'>-    int block_p = Qfalse;</div><div class='ctx'> </div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	block_p = Qtrue;</div><div class='del'>-	rb_scan_args(argc, argv, "02", &amp;arg1, &amp;arg2);</div><div class='del'>-	argc += 1;		/* hackish */</div><div class='add'>+    rb_scan_args(args, "12", &amp;item, &amp;arg1, &amp;arg2);</div><div class='add'>+    if (arg2 == Qnil &amp;&amp; obj_is_kind_of(arg1, C_Range)) {</div><div class='add'>+	range_beg_end(arg1, &amp;beg, &amp;len, ary-&gt;len);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_scan_args(argc, argv, "12", &amp;item, &amp;arg1, &amp;arg2);</div><div class='del'>-    }</div><div class='del'>-    switch (argc) {</div><div class='del'>-      case 1:</div><div class='del'>-	beg = 0;</div><div class='del'>-	len = RARRAY(ary)-&gt;len;</div><div class='del'>-	break;</div><div class='del'>-      case 2:</div><div class='del'>-	if (rb_range_beg_len(arg1, &amp;beg, &amp;len, RARRAY(ary)-&gt;len, 1)) {</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	/* fall through */</div><div class='del'>-      case 3:</div><div class='del'>-	beg = NIL_P(arg1) ? 0 : NUM2LONG(arg1);</div><div class='add'>+	beg = NUM2INT(arg1);</div><div class='ctx'> 	if (beg &lt; 0) {</div><div class='del'>-	    beg = RARRAY(ary)-&gt;len + beg;</div><div class='add'>+	    beg = ary-&gt;len + beg;</div><div class='ctx'> 	    if (beg &lt; 0) beg = 0;</div><div class='ctx'> 	}</div><div class='del'>-	len = NIL_P(arg2) ? RARRAY(ary)-&gt;len - beg : NUM2LONG(arg2);</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-        return ary;</div><div class='del'>-    }</div><div class='del'>-    if (beg &gt;= ARY_MAX_SIZE || len &gt; ARY_MAX_SIZE - beg) {</div><div class='del'>-	rb_raise(rb_eArgError, "argument too big");</div><div class='del'>-    }</div><div class='del'>-    end = beg + len;</div><div class='del'>-    if (end &gt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	if (end &gt;= RARRAY(ary)-&gt;aux.capa) {</div><div class='del'>-	    REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, end);</div><div class='del'>-	    RARRAY(ary)-&gt;aux.capa = end;</div><div class='add'>+	if (arg2) {</div><div class='add'>+	    len = NUM2INT(arg2);</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='del'>-	RARRAY(ary)-&gt;len = end;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    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'>+	else {</div><div class='add'>+	    len = ary-&gt;len - beg;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	p = RARRAY(ary)-&gt;ptr + beg;</div><div class='del'>-	pend = p + len;</div><div class='del'>-	while (p &lt; pend) {</div><div class='del'>-	    *p++ = item;</div><div class='add'>+    end = beg + len;</div><div class='add'>+    if (end &gt; ary-&gt;len) {</div><div class='add'>+	if (end &gt;= ary-&gt;capa) {</div><div class='add'>+	    ary-&gt;capa=end;</div><div class='add'>+	    REALLOC_N(ary-&gt;ptr, VALUE, ary-&gt;capa);</div><div class='ctx'> 	}</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'>- *  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='del'>-VALUE</div><div class='del'>-rb_ary_plus(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    VALUE z;</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    y = to_ary(y);</div><div class='del'>-    len = RARRAY(x)-&gt;len + RARRAY(y)-&gt;len;</div><div class='del'>-    z = rb_ary_new2(len);</div><div class='del'>-    MEMCPY(RARRAY(z)-&gt;ptr, RARRAY(x)-&gt;ptr, VALUE, RARRAY(x)-&gt;len);</div><div class='del'>-    MEMCPY(RARRAY(z)-&gt;ptr + RARRAY(x)-&gt;len, RARRAY(y)-&gt;ptr, VALUE, RARRAY(y)-&gt;len);</div><div class='del'>-    RARRAY(z)-&gt;len = len;</div><div class='del'>-    return z;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_ary_concat(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    y = to_ary(y);</div><div class='del'>-    if (RARRAY(y)-&gt;len &gt; 0) {</div><div class='del'>-	rb_ary_splice(x, RARRAY(x)-&gt;len, 0, y);</div><div class='del'>-    }</div><div class='del'>-    return x;</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 * 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='del'>-static VALUE</div><div class='del'>-rb_ary_times(ary, times)</div><div class='del'>-    VALUE ary, times;</div><div class='del'>-{</div><div class='del'>-    VALUE ary2, tmp;</div><div class='del'>-    long i, len;</div><div class='del'>-</div><div class='del'>-    tmp = rb_check_string_type(times);</div><div class='del'>-    if (!NIL_P(tmp)) {</div><div class='del'>-	return rb_ary_join(ary, tmp);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    len = NUM2LONG(times);</div><div class='del'>-    if (len == 0) return ary_new(rb_obj_class(ary), 0);</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "negative argument");</div><div class='del'>-    }</div><div class='del'>-    if (ARY_MAX_SIZE/len &lt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	rb_raise(rb_eArgError, "argument too big");</div><div class='del'>-    }</div><div class='del'>-    len *= RARRAY(ary)-&gt;len;</div><div class='del'>-</div><div class='del'>-    ary2 = ary_new(rb_obj_class(ary), len);</div><div class='del'>-    RARRAY(ary2)-&gt;len = len;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;len; i+=RARRAY(ary)-&gt;len) {</div><div class='del'>-	MEMCPY(RARRAY(ary2)-&gt;ptr+i, RARRAY(ary)-&gt;ptr, VALUE, RARRAY(ary)-&gt;len);</div><div class='del'>-    }</div><div class='del'>-    OBJ_INFECT(ary2, ary);</div><div class='del'>-</div><div class='del'>-    return ary2;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_ary_assoc(ary, key)</div><div class='del'>-    VALUE ary, key;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    VALUE v;</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; ++i) {</div><div class='del'>-	v = rb_check_array_type(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	if (!NIL_P(v) &amp;&amp; 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='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'>- *     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='del'>-VALUE</div><div class='del'>-rb_ary_rassoc(ary, value)</div><div class='del'>-    VALUE ary, value;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    VALUE v;</div><div class='del'>-</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='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE recursive_equal _((VALUE, VALUE, int));</div><div class='del'>-static VALUE</div><div class='del'>-recursive_equal(ary1, ary2, recur)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-    int recur;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    if (recur) return Qfalse;</div><div class='del'>-    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='del'>-	    return Qfalse;</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'>- *  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='del'>-static VALUE</div><div class='del'>-rb_ary_equal(ary1, ary2)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-{</div><div class='del'>-    if (ary1 == ary2) return Qtrue;</div><div class='del'>-    if (TYPE(ary2) != T_ARRAY) {</div><div class='del'>-	if (!rb_respond_to(ary2, rb_intern("to_ary"))) {</div><div class='del'>-	    return Qfalse;</div><div class='add'>+	if (beg &gt; ary-&gt;len) {</div><div class='add'>+	    bzero(ary-&gt;ptr+ary-&gt;len, sizeof(VALUE)*(end-ary-&gt;len));</div><div class='ctx'> 	}</div><div class='del'>-	return rb_equal(ary2, ary1);</div><div class='add'>+	ary-&gt;len = end;</div><div class='ctx'>     }</div><div class='del'>-    if (RARRAY(ary1)-&gt;len != RARRAY(ary2)-&gt;len) return Qfalse;</div><div class='del'>-    return rb_exec_recursive(recursive_equal, ary1, ary2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE recursive_eql _((VALUE, VALUE, int));</div><div class='del'>-static VALUE</div><div class='del'>-recursive_eql(ary1, ary2, recur)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-    int recur;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='add'>+    p = ary-&gt;ptr + beg; pend = p + len;</div><div class='ctx'> </div><div class='del'>-    if (recur) return Qfalse;</div><div class='del'>-    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='del'>-	    return Qfalse;</div><div class='add'>+    while (p &lt; pend) {</div><div class='add'>+	*p++ = item;</div><div class='ctx'>     }</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_ary_eql(ary1, ary2)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-{</div><div class='del'>-    if (ary1 == ary2) return Qtrue;</div><div class='del'>-    if (TYPE(ary2) != T_ARRAY) return Qfalse;</div><div class='del'>-    if (RARRAY(ary1)-&gt;len != RARRAY(ary2)-&gt;len) return Qfalse;</div><div class='del'>-    return rb_exec_recursive(recursive_eql, ary1, ary2);</div><div class='add'>+    return (VALUE)ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE recursive_hash _((VALUE, VALUE, int));</div><div class='ctx'> static VALUE</div><div class='del'>-recursive_hash(ary, dummy, recur)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE dummy;</div><div class='del'>-    int recur;</div><div class='add'>+Fary_plus(x, y)</div><div class='add'>+    struct RArray *x, *y;</div><div class='ctx'> {</div><div class='del'>-    long i, h;</div><div class='del'>-    VALUE n;</div><div class='add'>+    struct RArray *z;</div><div class='ctx'> </div><div class='del'>-    if (recur) {</div><div class='del'>-	return LONG2FIX(0);</div><div class='del'>-    }</div><div class='add'>+    switch (TYPE(y)) {</div><div class='add'>+      case T_ARRAY:</div><div class='add'>+	z = (struct RArray*)ary_new2(x-&gt;len + y-&gt;len);</div><div class='add'>+	memcpy(z-&gt;ptr, x-&gt;ptr, x-&gt;len*sizeof(VALUE));</div><div class='add'>+	memcpy(z-&gt;ptr+x-&gt;len, y-&gt;ptr, y-&gt;len*sizeof(VALUE));</div><div class='add'>+	z-&gt;len = x-&gt;len + RARRAY(y)-&gt;len;</div><div class='add'>+	break;</div><div class='ctx'> </div><div class='del'>-    h = RARRAY(ary)-&gt;len;</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	h = (h &lt;&lt; 1) | (h&lt;0 ? 1 : 0);</div><div class='del'>-	n = rb_hash(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	h ^= NUM2LONG(n);</div><div class='add'>+      default:</div><div class='add'>+	z = (struct RArray*)Fary_clone(x);</div><div class='add'>+	Fary_push(z, y);</div><div class='add'>+	break;</div><div class='ctx'>     }</div><div class='del'>-    return LONG2FIX(h);</div><div class='add'>+    return (VALUE)z;</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='del'>-rb_ary_hash(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_times(ary, times)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    VALUE times;</div><div class='ctx'> {</div><div class='del'>-    return rb_exec_recursive(recursive_hash, ary, 0);</div><div class='del'>-}</div><div class='add'>+    struct RArray *ary2;</div><div class='add'>+    int i, len;</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='add'>+    len = NUM2INT(times) * ary-&gt;len;</div><div class='add'>+    ary2 = (struct RArray*)ary_new2(len);</div><div class='add'>+    ary2-&gt;len = len;</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_ary_includes(ary, item)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE item;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    </div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	if (rb_equal(RARRAY(ary)-&gt;ptr[i], item)) {</div><div class='del'>-	    return Qtrue;</div><div class='del'>-	}</div><div class='add'>+    for (i=0; i&lt;len; i+=ary-&gt;len) {</div><div class='add'>+	memcpy(ary2-&gt;ptr+i, ary-&gt;ptr, ary-&gt;len*sizeof(VALUE));</div><div class='ctx'>     }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE recursive_cmp _((VALUE, VALUE, int));</div><div class='del'>-static VALUE</div><div class='del'>-recursive_cmp(ary1, ary2, recur)</div><div class='del'>-    VALUE ary1;</div><div class='del'>-    VALUE ary2;</div><div class='del'>-    int recur;</div><div class='del'>-{</div><div class='del'>-    long i, len;</div><div class='ctx'> </div><div class='del'>-    if (recur) return Qnil;</div><div class='del'>-    len = RARRAY(ary1)-&gt;len;</div><div class='del'>-    if (len &gt; RARRAY(ary2)-&gt;len) {</div><div class='del'>-	len = RARRAY(ary2)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    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='del'>-	if (v != INT2FIX(0)) {</div><div class='del'>-	    return v;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return Qundef;</div><div class='add'>+    return (VALUE)ary2;</div><div class='ctx'> }</div><div class='ctx'> </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='del'>-rb_ary_cmp(ary1, ary2)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-{</div><div class='del'>-    long len;</div><div class='del'>-    VALUE v;</div><div class='del'>-</div><div class='del'>-    ary2 = to_ary(ary2);</div><div class='del'>-    if (ary1 == ary2) return INT2FIX(0);</div><div class='del'>-    v = rb_exec_recursive(recursive_cmp, ary1, ary2);</div><div class='del'>-    if (v != Qundef) return v;</div><div class='del'>-    len = RARRAY(ary1)-&gt;len - RARRAY(ary2)-&gt;len;</div><div class='del'>-    if (len == 0) return INT2FIX(0);</div><div class='del'>-    if (len &gt; 0) return INT2FIX(1);</div><div class='del'>-    return INT2FIX(-1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ary_make_hash(ary1, ary2)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-{</div><div class='del'>-    VALUE hash = rb_hash_new();</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary1)-&gt;len; i++) {</div><div class='del'>-	rb_hash_aset(hash, RARRAY(ary1)-&gt;ptr[i], Qtrue);</div><div class='del'>-    }</div><div class='del'>-    if (ary2) {</div><div class='del'>-	for (i=0; i&lt;RARRAY(ary2)-&gt;len; i++) {</div><div class='del'>-	    rb_hash_aset(hash, RARRAY(ary2)-&gt;ptr[i], Qtrue);</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'>-/* </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='del'>-static VALUE</div><div class='del'>-rb_ary_diff(ary1, ary2)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-{</div><div class='del'>-    VALUE ary3;</div><div class='del'>-    volatile VALUE hash;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    hash = ary_make_hash(to_ary(ary2), 0);</div><div class='del'>-    ary3 = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary1)-&gt;len; i++) {</div><div class='del'>-	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='del'>-    }</div><div class='del'>-    return ary3;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_and(ary1, ary2)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-{</div><div class='del'>-    VALUE hash, ary3, v, vv;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    ary2 = to_ary(ary2);</div><div class='del'>-    ary3 = rb_ary_new2(RARRAY(ary1)-&gt;len &lt; RARRAY(ary2)-&gt;len ?</div><div class='del'>-	    RARRAY(ary1)-&gt;len : RARRAY(ary2)-&gt;len);</div><div class='del'>-    hash = ary_make_hash(ary2, 0);</div><div class='del'>-</div><div class='del'>-    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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ary3;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_or(ary1, ary2)</div><div class='del'>-    VALUE ary1, ary2;</div><div class='del'>-{</div><div class='del'>-    VALUE hash, ary3;</div><div class='del'>-    VALUE v, vv;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    ary2 = to_ary(ary2);</div><div class='del'>-    ary3 = rb_ary_new2(RARRAY(ary1)-&gt;len+RARRAY(ary2)-&gt;len);</div><div class='del'>-    hash = ary_make_hash(ary1, ary2);</div><div class='del'>-</div><div class='del'>-    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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return ary3;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_uniq_bang(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE hash, v, vv;</div><div class='del'>-    long i, j;</div><div class='del'>-</div><div class='del'>-    hash = ary_make_hash(ary, 0);</div><div class='del'>-</div><div class='del'>-    if (RARRAY(ary)-&gt;len == RHASH(hash)-&gt;tbl-&gt;num_entries) {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    RARRAY(ary)-&gt;len = j;</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'>- *  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='del'>-static VALUE</div><div class='del'>-rb_ary_uniq(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    ary = rb_ary_dup(ary);</div><div class='del'>-    rb_ary_uniq_bang(ary);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_ary_compact_bang(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE *p, *t, *end;</div><div class='del'>-</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    p = t = RARRAY(ary)-&gt;ptr;</div><div class='del'>-    end = p + RARRAY(ary)-&gt;len;</div><div class='del'>-    </div><div class='del'>-    while (t &lt; end) {</div><div class='del'>-	if (NIL_P(*t)) t++;</div><div class='del'>-	else *p++ = *t++;</div><div class='del'>-    }</div><div class='del'>-    if (RARRAY(ary)-&gt;len == (p - RARRAY(ary)-&gt;ptr)) {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    RARRAY(ary)-&gt;len = RARRAY(ary)-&gt;aux.capa = (p - RARRAY(ary)-&gt;ptr);</div><div class='del'>-    REALLOC_N(RARRAY(ary)-&gt;ptr, VALUE, RARRAY(ary)-&gt;len);</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'>- *  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='del'>-static VALUE</div><div class='del'>-rb_ary_compact(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    ary = rb_ary_dup(ary);</div><div class='del'>-    rb_ary_compact_bang(ary);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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'>- *</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='del'>-static VALUE</div><div class='del'>-rb_ary_nitems(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_assoc(ary, key)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    VALUE key;</div><div class='ctx'> {</div><div class='del'>-    long n = 0;</div><div class='ctx'>     VALUE *p, *pend;</div><div class='ctx'> </div><div class='del'>-    for (p = RARRAY(ary)-&gt;ptr, pend = p + RARRAY(ary)-&gt;len; p &lt; pend; p++) {</div><div class='del'>-	if (!NIL_P(*p)) n++;</div><div class='del'>-    }</div><div class='del'>-    return LONG2NUM(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.count      -&gt; int</div><div class='del'>- *     array.count(obj) -&gt; int</div><div class='del'>- *     array.count { |item| block }  -&gt; int</div><div class='del'>- *  </div><div class='del'>- *  Returns the number of elements.  If an argument is given, counts</div><div class='del'>- *  the number of elements which equals to &lt;i&gt;obj&lt;/i&gt;.  If a block is</div><div class='del'>- *  given, counts the number of elements yielding a true value.</div><div class='del'>- *</div><div class='del'>- *     ary = [1, 2, 4, 2]</div><div class='del'>- *     ary.count             # =&gt; 4</div><div class='del'>- *     ary.count(2)          # =&gt; 2</div><div class='del'>- *     ary.count{|x|x%2==0}  # =&gt; 3</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_count(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long n = 0;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	VALUE *p, *pend;</div><div class='del'>-</div><div class='del'>-	if (!rb_block_given_p())</div><div class='del'>-	    return LONG2NUM(RARRAY_LEN(ary));</div><div class='del'>-</div><div class='del'>-	for (p = RARRAY_PTR(ary), pend = p + RARRAY_LEN(ary); p &lt; pend; p++) {</div><div class='del'>-	    if (RTEST(rb_yield(*p))) n++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE obj, *p, *pend;</div><div class='del'>-</div><div class='del'>-	rb_scan_args(argc, argv, "1", &amp;obj);</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    rb_warn("given block not used");</div><div class='del'>-	}</div><div class='del'>-	for (p = RARRAY_PTR(ary), pend = p + RARRAY_LEN(ary); p &lt; pend; p++) {</div><div class='del'>-	    if (rb_equal(*p, obj)) n++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return LONG2NUM(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-flatten(ary, level, modified)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    int level;</div><div class='del'>-    int *modified;</div><div class='del'>-{</div><div class='del'>-    long i = 0;</div><div class='del'>-    VALUE stack, result, tmp, elt;</div><div class='del'>-    st_table *memo;</div><div class='del'>-    st_data_t id;</div><div class='del'>-</div><div class='del'>-    stack = ary_new(0, ARY_DEFAULT_SIZE);</div><div class='del'>-    result = ary_new(0, RARRAY_LEN(ary));</div><div class='del'>-    memo = st_init_numtable();</div><div class='del'>-    st_insert(memo, (st_data_t)ary, (st_data_t)Qtrue);</div><div class='del'>-    *modified = 0;</div><div class='del'>-</div><div class='del'>-    while (1) {</div><div class='del'>-	while (i &lt; RARRAY(ary)-&gt;len) {</div><div class='del'>-	    elt = RARRAY(ary)-&gt;ptr[i++];</div><div class='del'>-	    tmp = rb_check_array_type(elt);</div><div class='del'>-	    if (RBASIC(result)-&gt;klass) {</div><div class='del'>-		rb_raise(rb_eRuntimeError, "flatten reentered");</div><div class='del'>-	    }</div><div class='del'>-	    if (NIL_P(tmp) || (level &gt;= 0 &amp;&amp; RARRAY(stack)-&gt;len / 2 &gt;= level)) {</div><div class='del'>-		rb_ary_push(result, elt);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		*modified = 1;</div><div class='del'>-		id = (st_data_t)tmp;</div><div class='del'>-		if (st_lookup(memo, id, 0)) {</div><div class='del'>-		    st_free_table(memo);</div><div class='del'>-		    rb_raise(rb_eArgError, "tried to flatten recursive array");</div><div class='del'>-		}</div><div class='del'>-		st_insert(memo, id, (st_data_t)Qtrue);</div><div class='del'>-		rb_ary_push(stack, ary);</div><div class='del'>-		rb_ary_push(stack, LONG2NUM(i));</div><div class='del'>-		ary = tmp;</div><div class='del'>-		i = 0;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	if (RARRAY(stack)-&gt;len == 0) {</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	id = (st_data_t)ary;</div><div class='del'>-	st_delete(memo, &amp;id, 0);</div><div class='del'>-	tmp = rb_ary_pop(stack);</div><div class='del'>-	i = NUM2LONG(tmp);</div><div class='del'>-	ary = rb_ary_pop(stack);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    st_free_table(memo);</div><div class='del'>-</div><div class='del'>-    RBASIC(result)-&gt;klass = rb_class_of(ary);</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.flatten! -&gt; array or nil</div><div class='del'>- *     array.flatten!(level) -&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.)  If the optional &lt;i&gt;level&lt;/i&gt;</div><div class='del'>- *  argument determines the level of recursion to flatten.</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'>- *     a = [ 1, 2, [3, [4, 5] ] ]</div><div class='del'>- *     a.flatten!(1) #=&gt; [1, 2, 3, [4, 5]]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_flatten_bang(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    int mod = 0, level = -1;</div><div class='del'>-    VALUE result, lv;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;lv);</div><div class='del'>-    if (!NIL_P(lv)) level = NUM2INT(lv);</div><div class='del'>-    if (level == 0) return ary;</div><div class='del'>-</div><div class='del'>-    result = flatten(ary, level, &amp;mod);</div><div class='del'>-    if (mod == 0) return Qnil;</div><div class='del'>-    rb_ary_replace(ary, result);</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'>- *  call-seq:</div><div class='del'>- *     array.flatten -&gt; an_array</div><div class='del'>- *     array.flatten(level) -&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.  If the optional</div><div class='del'>- *  &lt;i&gt;level&lt;/i&gt; argument determines the level of recursion to flatten.</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'>- *     a = [ 1, 2, [3, [4, 5] ] ]</div><div class='del'>- *     a.flatten(1)              #=&gt; [1, 2, 3, [4, 5]]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_flatten(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    int mod = 0, level = -1;</div><div class='del'>-    VALUE result, lv;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;lv);</div><div class='del'>-    if (!NIL_P(lv)) level = NUM2INT(lv);</div><div class='del'>-    if (level == 0) return ary;</div><div class='del'>-</div><div class='del'>-    result = flatten(ary, level, &amp;mod);</div><div class='del'>-    if (OBJ_TAINTED(ary)) OBJ_TAINT(result);</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.shuffle!        -&gt; array or nil</div><div class='del'>- *  </div><div class='del'>- *  Shuffles elements in _self_ in place.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_shuffle_bang(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long i = RARRAY(ary)-&gt;len;</div><div class='del'>-</div><div class='del'>-    rb_ary_modify(ary);</div><div class='del'>-    while (i) {</div><div class='del'>-	long j = rb_genrand_real()*i;</div><div class='del'>-	VALUE tmp = RARRAY(ary)-&gt;ptr[--i];</div><div class='del'>-	RARRAY(ary)-&gt;ptr[i] = RARRAY(ary)-&gt;ptr[j];</div><div class='del'>-	RARRAY(ary)-&gt;ptr[j] = tmp;</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     array.shuffle -&gt; an_array</div><div class='del'>- *  </div><div class='del'>- *  Returns a new array with elements of this array shuffled.</div><div class='del'>- *     </div><div class='del'>- *     a = [ 1, 2, 3 ]           #=&gt; [1, 2, 3]</div><div class='del'>- *     a.shuffle                 #=&gt; [2, 3, 1]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_shuffle(VALUE ary)</div><div class='del'>-{</div><div class='del'>-    ary = rb_ary_dup(ary);</div><div class='del'>-    rb_ary_shuffle_bang(ary);</div><div class='del'>-    return ary;</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.choice        -&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Choose a random element from an array.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_choice(ary)</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long i, j;</div><div class='del'>-</div><div class='del'>-    i = RARRAY(ary)-&gt;len;</div><div class='del'>-    if (i == 0) return Qnil;</div><div class='del'>-    j = rb_genrand_real()*i;</div><div class='del'>-    return RARRAY(ary)-&gt;ptr[j];</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'>- *     ary.cycle {|obj| block }</div><div class='del'>- *     ary.cycle(n) {|obj| block }</div><div class='del'>- *  </div><div class='del'>- *  Calls &lt;i&gt;block&lt;/i&gt; for each element repeatedly _n_ times or</div><div class='del'>- *  forever if none or nil is given.  If a non-positive number is</div><div class='del'>- *  given or the array is empty, does nothing.  Returns nil if the</div><div class='del'>- *  loop has finished without getting interrupted.</div><div class='del'>- *     </div><div class='del'>- *     a = ["a", "b", "c"]</div><div class='del'>- *     a.cycle {|x| puts x }  # print, a, b, c, a, b, c,.. forever.</div><div class='del'>- *     a.cycle(2) {|x| puts x }  # print, a, b, c, a, b, c.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_cycle(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    long n, i;</div><div class='del'>-    VALUE nv = Qnil;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;nv);</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ary, argc, argv);</div><div class='del'>-    if (NIL_P(nv)) {</div><div class='del'>-        n = -1;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        n = NUM2LONG(nv);</div><div class='del'>-        if (n &lt;= 0) return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while (RARRAY(ary)-&gt;len &gt; 0 &amp;&amp; (n &lt; 0 || 0 &lt; n--)) {</div><div class='del'>-        for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-            rb_yield(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-        }</div><div class='add'>+    p = ary-&gt;ptr; pend = p + ary-&gt;len;</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 == 2</div><div class='add'>+	    &amp;&amp; rb_funcall(RARRAY(*p)-&gt;ptr[0], eq, 1, key))</div><div class='add'>+	    return *p;</div><div class='ctx'>     }</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define tmpbuf(n, size) rb_str_tmp_new((n)*(size))</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Recursively compute permutations of r elements of the set [0..n-1].</div><div class='del'>- * When we have a complete permutation of array indexes, copy the values</div><div class='del'>- * at those indexes into a new array and yield that array. </div><div class='del'>- *</div><div class='del'>- * n: the size of the set </div><div class='del'>- * r: the number of elements in each permutation</div><div class='del'>- * p: the array (of size r) that we're filling in</div><div class='del'>- * index: what index we're filling in now</div><div class='del'>- * used: an array of booleans: whether a given index is already used</div><div class='del'>- * values: the Ruby array that holds the actual values to permute</div><div class='del'>- */</div><div class='del'>-static void</div><div class='del'>-permute0(n, r, p, index, used, values)</div><div class='del'>-    long n, r, *p, index;</div><div class='del'>-    int *used;</div><div class='del'>-    VALUE values;</div><div class='del'>-{</div><div class='del'>-    long i,j;</div><div class='del'>-    for (i = 0; i &lt; n; i++) {</div><div class='del'>-	if (used[i] == 0) {</div><div class='del'>-	    p[index] = i;</div><div class='del'>-	    if (index &lt; r-1) {             /* if not done yet */</div><div class='del'>-		used[i] = 1;               /* mark index used */</div><div class='del'>-		permute0(n, r, p, index+1, /* recurse */</div><div class='del'>-			 used, values);  </div><div class='del'>-		used[i] = 0;               /* index unused */</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		/* We have a complete permutation of array indexes */</div><div class='del'>-		/* Build a ruby array of the corresponding values */</div><div class='del'>-		/* And yield it to the associated block */</div><div class='del'>-		VALUE result = rb_ary_new2(r);</div><div class='del'>-		VALUE *result_array = RARRAY(result)-&gt;ptr;</div><div class='del'>-		const VALUE *values_array = RARRAY(values)-&gt;ptr;</div><div class='del'>-</div><div class='del'>-		for (j = 0; j &lt; r; j++) result_array[j] = values_array[p[j]];</div><div class='del'>-		RARRAY(result)-&gt;len = r;</div><div class='del'>-		rb_yield(result);</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'>- *  call-seq:</div><div class='del'>- *     ary.permutation { |p| block }          -&gt; array</div><div class='del'>- *     ary.permutation                        -&gt; enumerator</div><div class='del'>- *     ary.permutation(n) { |p| block }       -&gt; array</div><div class='del'>- *     ary.permutation(n)                     -&gt; enumerator</div><div class='del'>- *  </div><div class='del'>- * When invoked with a block, yield all permutations of length &lt;i&gt;n&lt;/i&gt;</div><div class='del'>- * of the elements of &lt;i&gt;ary&lt;/i&gt;, then return the array itself.</div><div class='del'>- * If &lt;i&gt;n&lt;/i&gt; is not specified, yield all permutations of all elements.</div><div class='del'>- * The implementation makes no guarantees about the order in which </div><div class='del'>- * the permutations are yielded.</div><div class='del'>- *</div><div class='del'>- * When invoked without a block, return an enumerator object instead.</div><div class='del'>- * </div><div class='del'>- * Examples:</div><div class='del'>- *</div><div class='del'>- *     a = [1, 2, 3]</div><div class='del'>- *     a.permutation.to_a     #=&gt; [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]</div><div class='del'>- *     a.permutation(1).to_a  #=&gt; [[1],[2],[3]]</div><div class='del'>- *     a.permutation(2).to_a  #=&gt; [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]</div><div class='del'>- *     a.permutation(3).to_a  #=&gt; [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]</div><div class='del'>- *     a.permutation(0).to_a  #=&gt; [[]] # one permutation of length 0</div><div class='del'>- *     a.permutation(4).to_a  #=&gt; []   # no permutations of length 4</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_permutation(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    VALUE num;</div><div class='del'>-    long r, n, i;</div><div class='del'>-</div><div class='del'>-    n = RARRAY(ary)-&gt;len;                  /* Array length */</div><div class='del'>-    RETURN_ENUMERATOR(ary, argc, argv);   /* Return enumerator if no block */</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;num);</div><div class='del'>-    r = NIL_P(num) ? n : NUM2LONG(num);   /* Permutation size from argument */</div><div class='del'>-</div><div class='del'>-    if (r &lt; 0 || n &lt; r) { </div><div class='del'>-	/* no permutations: yield nothing */</div><div class='del'>-    }</div><div class='del'>-    else if (r == 0) { /* exactly one permutation: the zero-length array */</div><div class='del'>-	rb_yield(rb_ary_new2(0));</div><div class='del'>-    }</div><div class='del'>-    else if (r == 1) { /* this is a special, easy case */</div><div class='del'>-	for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	    rb_yield(rb_ary_new3(1, RARRAY(ary)-&gt;ptr[i]));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {             /* this is the general case */</div><div class='del'>-	volatile VALUE t0 = tmpbuf(n,sizeof(long));</div><div class='del'>-	long *p = (long*)RSTRING(t0)-&gt;ptr;</div><div class='del'>-	volatile VALUE t1 = tmpbuf(n,sizeof(int));</div><div class='del'>-	int *used = (int*)RSTRING(t1)-&gt;ptr;</div><div class='del'>-	VALUE ary0 = ary_make_shared(ary); /* private defensive copy of ary */</div><div class='del'>-</div><div class='del'>-	for (i = 0; i &lt; n; i++) used[i] = 0; /* initialize array */</div><div class='del'>-</div><div class='del'>-	permute0(n, r, p, 0, used, ary0); /* compute and yield permutations */</div><div class='del'>-	RB_GC_GUARD(t0);</div><div class='del'>-	RB_GC_GUARD(t1);</div><div class='del'>-    }</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static long</div><div class='del'>-combi_len(n, k)</div><div class='del'>-    long n, k;</div><div class='del'>-{</div><div class='del'>-    long i, val = 1;</div><div class='del'>-</div><div class='del'>-    if (k*2 &gt; n) k = n-k;</div><div class='del'>-    if (k == 0) return 1;</div><div class='del'>-    if (k &lt; 0) return 0;</div><div class='del'>-    val = 1;</div><div class='del'>-    for (i=1; i &lt;= k; i++,n--) {</div><div class='del'>-	long m = val;</div><div class='del'>-	val *= n;</div><div class='del'>-	if (val &lt; m) {</div><div class='del'>-	    rb_raise(rb_eRangeError, "too big for combination");</div><div class='del'>-	}</div><div class='del'>-	val /= i;</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'>- *  call-seq:</div><div class='del'>- *     ary.combination(n) { |c| block }    -&gt; ary</div><div class='del'>- *     ary.combination(n)                  -&gt; enumerator</div><div class='del'>- *  </div><div class='del'>- * When invoked with a block, yields all combinations of length &lt;i&gt;n&lt;/i&gt; </div><div class='del'>- * of elements from &lt;i&gt;ary&lt;/i&gt; and then returns &lt;i&gt;ary&lt;/i&gt; itself.</div><div class='del'>- * The implementation makes no guarantees about the order in which </div><div class='del'>- * the combinations are yielded.</div><div class='del'>- *</div><div class='del'>- * When invoked without a block, returns an enumerator object instead.</div><div class='del'>- *     </div><div class='del'>- * Examples:</div><div class='del'>- *</div><div class='del'>- *     a = [1, 2, 3, 4]</div><div class='del'>- *     a.combination(1).to_a  #=&gt; [[1],[2],[3],[4]]</div><div class='del'>- *     a.combination(2).to_a  #=&gt; [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]</div><div class='del'>- *     a.combination(3).to_a  #=&gt; [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]</div><div class='del'>- *     a.combination(4).to_a  #=&gt; [[1,2,3,4]]</div><div class='del'>- *     a.combination(0).to_a  #=&gt; [[]] # one combination of length 0</div><div class='del'>- *     a.combination(5).to_a  #=&gt; []   # no combinations of length 5</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_combination(ary, num)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE num;</div><div class='del'>-{</div><div class='del'>-    long n, i, len;</div><div class='del'>-</div><div class='del'>-    n = NUM2LONG(num);</div><div class='del'>-    RETURN_ENUMERATOR(ary, 1, &amp;num);</div><div class='del'>-    len = RARRAY(ary)-&gt;len;</div><div class='del'>-    if (n &lt; 0 || len &lt; n) {</div><div class='del'>-	/* yield nothing */</div><div class='del'>-    }</div><div class='del'>-    else if (n == 0) {</div><div class='del'>-	rb_yield(rb_ary_new2(0));</div><div class='del'>-    }</div><div class='del'>-    else if (n == 1) {</div><div class='del'>-	for (i = 0; i &lt; len; i++) {</div><div class='del'>-	    rb_yield(rb_ary_new3(1, RARRAY(ary)-&gt;ptr[i]));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	volatile VALUE t0 = tmpbuf(n+1, sizeof(long));</div><div class='del'>-	long *stack = (long*)RSTRING(t0)-&gt;ptr;</div><div class='del'>-	long nlen = combi_len(len, n);</div><div class='del'>-	volatile VALUE cc = rb_ary_new2(n);</div><div class='del'>-	VALUE *chosen = RARRAY(cc)-&gt;ptr;</div><div class='del'>-	long lev = 0;</div><div class='del'>-</div><div class='del'>-	RBASIC(cc)-&gt;klass = 0;</div><div class='del'>-	MEMZERO(stack, long, n);</div><div class='del'>-	stack[0] = -1;</div><div class='del'>-	for (i = 0; i &lt; nlen; i++) {</div><div class='del'>-	    chosen[lev] = RARRAY(ary)-&gt;ptr[stack[lev+1]];</div><div class='del'>-	    for (lev++; lev &lt; n; lev++) {</div><div class='del'>-		chosen[lev] = RARRAY(ary)-&gt;ptr[stack[lev+1] = stack[lev]+1];</div><div class='del'>-	    }</div><div class='del'>-	    rb_yield(rb_ary_new4(n, chosen));</div><div class='del'>-	    do {</div><div class='del'>-		stack[lev--]++;</div><div class='del'>-	    } while (lev &amp;&amp; (stack[lev+1]+n == len+lev+1));</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'>- *  call-seq:</div><div class='del'>- *     ary.product(other_ary, ...)</div><div class='del'>- *  </div><div class='del'>- *  Returns an array of all combinations of elements from all arrays.</div><div class='del'>- *  The length of the returned array is the product of the length</div><div class='del'>- *  of ary and the argument arrays</div><div class='del'>- *     </div><div class='del'>- *     [1,2,3].product([4,5])     # =&gt; [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]</div><div class='del'>- *     [1,2].product([1,2])       # =&gt; [[1,1],[1,2],[2,1],[2,2]]</div><div class='del'>- *     [1,2].product([3,4],[5,6]) # =&gt; [[1,3,5],[1,3,6],[1,4,5],[1,4,6],</div><div class='del'>- *                                #     [2,3,5],[2,3,6],[2,4,5],[2,4,6]]</div><div class='del'>- *     [1,2].product()            # =&gt; [[1],[2]]</div><div class='del'>- *     [1,2].product([])          # =&gt; []</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_product(argc, argv, ary)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    int n = argc+1;    /* How many arrays we're operating on */</div><div class='del'>-    volatile VALUE t0 = tmpbuf(n, sizeof(VALUE));</div><div class='del'>-    volatile VALUE t1 = tmpbuf(n, sizeof(int));</div><div class='del'>-    VALUE *arrays = (VALUE*)RSTRING(t0)-&gt;ptr; /* The arrays we're computing the product of */</div><div class='del'>-    int *counters = (int*)RSTRING(t1)-&gt;ptr; /* The current position in each one */</div><div class='del'>-    VALUE result;      /* The array we'll be returning */</div><div class='del'>-    long i,j;</div><div class='del'>-    long resultlen = 1;</div><div class='del'>-</div><div class='del'>-    RBASIC(t0)-&gt;klass = 0;</div><div class='del'>-    RBASIC(t1)-&gt;klass = 0;</div><div class='del'>-</div><div class='del'>-    /* initialize the arrays of arrays */</div><div class='del'>-    arrays[0] = ary;</div><div class='del'>-    for (i = 1; i &lt; n; i++) arrays[i] = to_ary(argv[i-1]);</div><div class='del'>-    </div><div class='del'>-    /* initialize the counters for the arrays */</div><div class='del'>-    for (i = 0; i &lt; n; i++) counters[i] = 0;</div><div class='del'>-</div><div class='del'>-    /* Compute the length of the result array; return [] if any is empty */</div><div class='del'>-    for (i = 0; i &lt; n; i++) {</div><div class='del'>-	long k = RARRAY(arrays[i])-&gt;len, l = resultlen;</div><div class='del'>-	if (k == 0) return rb_ary_new2(0);</div><div class='del'>-	resultlen *= k;</div><div class='del'>-	if (resultlen &lt; k || resultlen &lt; l || resultlen / k != l) {</div><div class='del'>-	    rb_raise(rb_eRangeError, "too big to product");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Otherwise, allocate and fill in an array of results */</div><div class='del'>-    result = rb_ary_new2(resultlen);</div><div class='del'>-    for (i = 0; i &lt; resultlen; i++) {</div><div class='del'>-	int m;</div><div class='del'>-	/* fill in one subarray */</div><div class='del'>-	VALUE subarray = rb_ary_new2(n);</div><div class='del'>-	for (j = 0; j &lt; n; j++) {</div><div class='del'>-	    rb_ary_push(subarray, rb_ary_entry(arrays[j], counters[j]));</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* put it on the result array */</div><div class='del'>-	rb_ary_push(result, subarray);</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * Increment the last counter.  If it overflows, reset to 0</div><div class='del'>-	 * and increment the one before it.</div><div class='del'>-	 */</div><div class='del'>-	m = n-1;</div><div class='del'>-	counters[m]++;</div><div class='del'>-	while (m &gt; 0 &amp;&amp; counters[m] == RARRAY(arrays[m])-&gt;len) {</div><div class='del'>-	    counters[m] = 0;</div><div class='del'>-	    m--;</div><div class='del'>-	    counters[m]++;</div><div class='del'>-	}</div><div class='del'>-    }</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'>- *     ary.take(n)               =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns first n elements from &lt;i&gt;ary&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = [1, 2, 3, 4, 5, 0]</div><div class='del'>- *     a.take(3)             # =&gt; [1, 2, 3]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_take(obj, n)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE n;</div><div class='del'>-{</div><div class='del'>-    long len = NUM2LONG(n);</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "attempt to take negative size");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_ary_subseq(obj, 0, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ary.take_while {|arr| block }   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Passes elements to the block until the block returns nil or false,</div><div class='del'>- *  then stops iterating and returns an array of all prior elements.</div><div class='del'>- *     </div><div class='del'>- *     a = [1, 2, 3, 4, 5, 0]</div><div class='del'>- *     a.take_while {|i| i &lt; 3 }   # =&gt; [1, 2]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_take_while(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+VALUE</div><div class='add'>+Fary_rassoc(ary, value)</div><div class='add'>+    struct RArray *ary;</div><div class='add'>+    VALUE value;</div><div class='ctx'> {</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</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]))) break;</div><div class='del'>-    }</div><div class='del'>-    return rb_ary_take(ary, LONG2FIX(i));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ary.drop(n)               =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Drops first n elements from &lt;i&gt;ary&lt;/i&gt;, and returns rest elements</div><div class='del'>- *  in an array.</div><div class='del'>- *     </div><div class='del'>- *     a = [1, 2, 3, 4, 5, 0]</div><div class='del'>- *     a.drop(3)             # =&gt; [4, 5, 0]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='add'>+    VALUE *p, *pend;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_ary_drop(ary, n)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE n;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-    long pos = NUM2LONG(n);</div><div class='del'>-    if (pos &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "attempt to drop negative size");</div><div class='add'>+    p = ary-&gt;ptr; pend = p + ary-&gt;len;</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 == 2</div><div class='add'>+	    &amp;&amp; rb_funcall(RARRAY(*p)-&gt;ptr[1], eq, 1, value))</div><div class='add'>+	    return *p;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    result = rb_ary_subseq(ary, pos, RARRAY(ary)-&gt;len);</div><div class='del'>-    if (result == Qnil) result = rb_ary_new();</div><div class='del'>-    return result;</div><div class='add'>+    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ary.drop_while {|arr| block }   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Drops elements up to, but not including, the first element for</div><div class='del'>- *  which the block returns nil or false and returns an array</div><div class='del'>- *  containing the remaining elements.</div><div class='del'>- *     </div><div class='del'>- *     a = [1, 2, 3, 4, 5, 0]</div><div class='del'>- *     a.drop_while {|i| i &lt; 3 }   # =&gt; [3, 4, 5, 0]</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_ary_drop_while(ary)</div><div class='del'>-    VALUE ary;</div><div class='add'>+Fary_equal(ary1, ary2)</div><div class='add'>+    struct RArray *ary1, *ary2;</div><div class='ctx'> {</div><div class='del'>-    long i;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-    RETURN_ENUMERATOR(ary, 0, 0);</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]))) break;</div><div class='add'>+    if (TYPE(ary2) != T_ARRAY) return FALSE;</div><div class='add'>+    if (ary1-&gt;len != ary2-&gt;len) return FALSE;</div><div class='add'>+    for (i=0; i&lt;ary1-&gt;len; i++) {</div><div class='add'>+	if (!rb_funcall(ary1-&gt;ptr[i], eq, 1, ary2-&gt;ptr[i]))</div><div class='add'>+	    return FALSE;</div><div class='ctx'>     }</div><div class='del'>-    return rb_ary_drop(ary, LONG2FIX(i));</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+extern VALUE C_Kernel;</div><div class='add'>+extern VALUE M_Enumerable;</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='del'>-void</div><div class='ctx'> Init_Array()</div><div class='ctx'> {</div><div class='del'>-    rb_cArray  = rb_define_class("Array", rb_cObject);</div><div class='del'>-    rb_include_module(rb_cArray, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cArray, ary_alloc);</div><div class='del'>-    rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cArray, "to_s", rb_ary_to_s, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "inspect", rb_ary_inspect, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "to_a", rb_ary_to_a, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "to_ary", rb_ary_to_ary_m, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "frozen?",  rb_ary_frozen_p, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cArray, "==", rb_ary_equal, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "eql?", rb_ary_eql, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "hash", rb_ary_hash, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cArray, "[]", rb_ary_aref, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "[]=", rb_ary_aset, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "at", rb_ary_at, 1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cArray, "concat", rb_ary_concat, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "&lt;&lt;", rb_ary_push, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "push", rb_ary_push_m, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "pop", rb_ary_pop_m, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "shift", rb_ary_shift_m, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "unshift", rb_ary_unshift_m, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "insert", rb_ary_insert, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "each", rb_ary_each, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "each_index", rb_ary_each_index, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "reverse_each", rb_ary_reverse_each, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "length", rb_ary_length, 0);</div><div class='del'>-    rb_define_alias(rb_cArray,  "size", "length");</div><div class='del'>-    rb_define_method(rb_cArray, "empty?", rb_ary_empty_p, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "find_index", rb_ary_index, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "index", rb_ary_index, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "rindex", rb_ary_rindex, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "indexes", rb_ary_indexes, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "indices", rb_ary_indexes, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "join", rb_ary_join_m, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "reverse", rb_ary_reverse_m, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "reverse!", rb_ary_reverse_bang, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "sort", rb_ary_sort, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "sort!", rb_ary_sort_bang, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "collect", rb_ary_collect, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "collect!", rb_ary_collect_bang, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "map", rb_ary_collect, 0);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cArray, "delete", rb_ary_delete, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "delete_at", rb_ary_delete_at_m, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "delete_if", rb_ary_delete_if, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "reject", rb_ary_reject, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "reject!", rb_ary_reject_bang, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "zip", rb_ary_zip, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "transpose", rb_ary_transpose, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "replace", rb_ary_replace, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "clear", rb_ary_clear, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "fill", rb_ary_fill, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "include?", rb_ary_includes, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "&lt;=&gt;", rb_ary_cmp, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cArray, "slice", rb_ary_aref, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "slice!", rb_ary_slice_bang, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cArray, "assoc", rb_ary_assoc, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "rassoc", rb_ary_rassoc, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cArray, "+", rb_ary_plus, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "*", rb_ary_times, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cArray, "-", rb_ary_diff, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "&amp;", rb_ary_and, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "|", rb_ary_or, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cArray, "uniq", rb_ary_uniq, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "uniq!", rb_ary_uniq_bang, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "compact", rb_ary_compact, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "compact!", rb_ary_compact_bang, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "flatten", rb_ary_flatten, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "flatten!", rb_ary_flatten_bang, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "nitems", rb_ary_nitems, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "count", rb_ary_count, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "shuffle!", rb_ary_shuffle_bang, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "shuffle", rb_ary_shuffle, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "choice", rb_ary_choice, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "cycle", rb_ary_cycle, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "permutation", rb_ary_permutation, -1);</div><div class='del'>-    rb_define_method(rb_cArray, "combination", rb_ary_combination, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "product", rb_ary_product, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cArray, "take", rb_ary_take, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "take_while", rb_ary_take_while, 0);</div><div class='del'>-    rb_define_method(rb_cArray, "drop", rb_ary_drop, 1);</div><div class='del'>-    rb_define_method(rb_cArray, "drop_while", rb_ary_drop_while, 0);</div><div class='del'>-</div><div class='del'>-    id_cmp = rb_intern("&lt;=&gt;");</div><div class='del'>-    inspect_key = rb_intern("__inspect_key__");</div><div class='add'>+    C_Array  = rb_define_class("Array", C_Object);</div><div class='add'>+    rb_include_module(C_Array, M_Enumerable);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_Array, "new", Fary_new, 0);</div><div class='add'>+    rb_define_method(C_Array, "to_s", Fary_to_s, 0);</div><div class='add'>+    rb_define_method(C_Array, "_inspect", Fary_inspect, 0);</div><div class='add'>+    rb_define_method(C_Array, "to_a", Fary_to_a, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Array, "==", Fary_equal, 1);</div><div class='add'>+    rb_define_method(C_Array, "[]", Fary_aref, -2);</div><div class='add'>+    rb_define_method(C_Array, "[]=", Fary_aset, -2);</div><div class='add'>+    rb_define_method(C_Array, "&lt;&lt;", Fary_append, 1);</div><div class='add'>+    rb_define_method(C_Array, "push", Fary_push, 1);</div><div class='add'>+    rb_define_method(C_Array, "pop", Fary_pop, 0);</div><div class='add'>+    rb_define_method(C_Array, "shift", Fary_shift, 0);</div><div class='add'>+    rb_define_method(C_Array, "unshift", Fary_unshift, 1);</div><div class='add'>+    rb_define_method(C_Array, "each", Fary_each, 0);</div><div class='add'>+    rb_define_method(C_Array, "length", Fary_length, 0);</div><div class='add'>+    rb_define_method(C_Array, "clone", Fary_clone, 0);</div><div class='add'>+    rb_define_method(C_Array, "join", Fary_join, -2);</div><div class='add'>+    rb_define_method(C_Array, "reverse", Fary_reverse, 0);</div><div class='add'>+    rb_define_method(C_Array, "sort", Fary_sort, 0);</div><div class='add'>+    rb_define_method(C_Array, "delete", Fary_delete, 1);</div><div class='add'>+    rb_define_method(C_Array, "delete_if", Fary_delete_if, 0);</div><div class='add'>+    rb_define_method(C_Array, "clear", Fary_clear, 0);</div><div class='add'>+    rb_define_method(C_Array, "fill", Fary_fill, -2);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Array, "assoc", Fary_assoc, 1);</div><div class='add'>+    rb_define_method(C_Array, "rassoc", Fary_rassoc, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Array, "+", Fary_plus, 1);</div><div class='add'>+    rb_define_method(C_Array, "*", Fary_times, 1);</div><div class='add'>+</div><div class='add'>+    cmp = rb_intern("&lt;=&gt;");</div><div class='add'>+    eq = rb_intern("==");</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Kernel, "::", assoc_new, 1);</div><div class='ctx'> }</div><div class='head'>diff --git a/bcc32/Makefile.sub b/bcc32/Makefile.sub<br/>deleted file mode 100644<br/>index 713b5c69df..0000000000<br/>--- a/<a href='/ruby.git/tree/bcc32/Makefile.sub?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/Makefile.sub</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,549 +0,0 @@</div><div class='del'>-# -*- makefile -*-</div><div class='del'>-</div><div class='del'>-SHELL = $(COMSPEC)</div><div class='del'>-MKFILES = Makefile</div><div class='del'>-</div><div class='del'>-#### Start of system configuration section. ####</div><div class='del'>-!ifndef OS</div><div class='del'>-OS = bccwin32</div><div class='del'>-!endif</div><div class='del'>-!if !defined(RT)</div><div class='del'>-!error RT not defined.  Retry from configure pass.</div><div class='del'>-!endif</div><div class='del'>-</div><div class='del'>-## variables may be overridden by $(compile_dir)/Makefile</div><div class='del'>-!ifndef srcdir</div><div class='del'>-srcdir = ..</div><div class='del'>-!endif</div><div class='del'>-!ifndef RUBY_INSTALL_NAME</div><div class='del'>-RUBY_INSTALL_NAME = ruby</div><div class='del'>-!endif</div><div class='del'>-!ifndef RUBYW_INSTALL_NAME</div><div class='del'>-RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME:ruby=rubyw)</div><div class='del'>-!elif "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"</div><div class='del'>-RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME:ruby=rubyw)</div><div class='del'>-!endif</div><div class='del'>-!if "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"</div><div class='del'>-RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME)w</div><div class='del'>-!endif</div><div class='del'>-!ifndef RUBY_SO_NAME</div><div class='del'>-RUBY_SO_NAME = $(RT)-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)</div><div class='del'>-!endif</div><div class='del'>-!ifndef icondirs</div><div class='del'>-!ifdef ICONDIRS</div><div class='del'>-icondirs=$(ICONDIRS)</div><div class='del'>-!endif</div><div class='del'>-!endif</div><div class='del'>-!ifdef icondirs</div><div class='del'>-icondirs=$(icondirs:\=/)</div><div class='del'>-iconinc=-I$(icondirs: = -I)</div><div class='del'>-!endif</div><div class='del'>-###############</div><div class='del'>-</div><div class='del'>-VPATH = $(srcdir):$(srcdir)/missing</div><div class='del'>-.SUFFIXES: .y</div><div class='del'>-</div><div class='del'>-!ifndef CC</div><div class='del'>-CC = bcc32</div><div class='del'>-!endif</div><div class='del'>-!ifndef CPP</div><div class='del'>-CPP = cpp32</div><div class='del'>-!endif</div><div class='del'>-!ifndef RC</div><div class='del'>-RC = brcc32</div><div class='del'>-!endif</div><div class='del'>-!ifndef YACC</div><div class='del'>-YACC = byacc</div><div class='del'>-!endif</div><div class='del'>-!ifndef AR</div><div class='del'>-AR = tlib</div><div class='del'>-!endif</div><div class='del'>-</div><div class='del'>-PURIFY =</div><div class='del'>-AUTOCONF = autoconf</div><div class='del'>-RM = $(srcdir:/=\)\win32\rm.bat</div><div class='del'>-</div><div class='del'>-!if !defined(PROCESSOR_ARCHITECTURE)</div><div class='del'>-PROCESSOR_ARCHITECTURE = x86</div><div class='del'>-!endif</div><div class='del'>-MACHINE = $(PROCESSOR_ARCHITECTURE)</div><div class='del'>-!if "$(PROCESSOR_ARCHITECTURE)" == "x86"</div><div class='del'>-!ifndef PROCESSOR_LEVEL</div><div class='del'>-PROCESSOR_LEVEL = 5</div><div class='del'>-!endif</div><div class='del'>-!if 6 &lt; $(PROCESSOR_LEVEL)</div><div class='del'>-PROCESSOR_LEVEL = 6</div><div class='del'>-!endif</div><div class='del'>-PROCESSOR_FLAG = -$(PROCESSOR_LEVEL)</div><div class='del'>-CPU = i$(PROCESSOR_LEVEL)86</div><div class='del'>-ARCH = i386</div><div class='del'>-!else</div><div class='del'>-CPU = $(PROCESSOR_ARCHITECTURE)</div><div class='del'>-ARCH = $(PROCESSOR_ARCHITECTURE)</div><div class='del'>-!endif</div><div class='del'>-!ifndef DEBUGFLAGS</div><div class='del'>-DEBUGFLAGS = </div><div class='del'>-!endif</div><div class='del'>-!ifndef OPTFLAGS</div><div class='del'>-OPTFLAGS = -O</div><div class='del'>-!endif</div><div class='del'>-</div><div class='del'>-!ifndef prefix</div><div class='del'>-prefix = /usr</div><div class='del'>-!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='del'>-!endif</div><div class='del'>-</div><div class='del'>-OUTFLAG       = -o</div><div class='del'>-!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='del'>-!endif</div><div class='del'>-!ifndef LDFLAGS</div><div class='del'>-LDFLAGS = -S:$(STACK)</div><div class='del'>-!endif</div><div class='del'>-!ifndef RFLAGS</div><div class='del'>-RFLAGS = $(iconinc)</div><div class='del'>-!endif</div><div class='del'>-!ifndef EXTLIBS</div><div class='del'>-EXTLIBS =</div><div class='del'>-!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='del'>-</div><div class='del'>-!ifndef STACK</div><div class='del'>-STACK = 0x2000000</div><div class='del'>-!endif</div><div class='del'>-</div><div class='del'>-XCFLAGS = -DRUBY_EXPORT -I. -I$(srcdir) -I$(srcdir)/missing</div><div class='del'>-</div><div class='del'>-ARFLAGS = /a /p32</div><div class='del'>-LD = ilink32 -q -Gn</div><div class='del'>-LDSHARED  = $(LD)</div><div class='del'>-XLDFLAGS  = -Tpe c0x32.obj</div><div class='del'>-WLDFLAGS  = -aa -Tpe c0w32.obj</div><div class='del'>-DLDFLAGS  = -Tpd c0d32.obj</div><div class='del'>-LIBRUBY_LDSHARED = $(LDSHARED)</div><div class='del'>-LIBRUBY_DLDFLAGS = -Gi $(DLDFLAGS) $(EXTLDFLAGS)</div><div class='del'>-LDOBJECTS = $(MAINOBJ)</div><div class='del'>-</div><div class='del'>-SOLIBS = </div><div class='del'>-</div><div class='del'>-EXEEXT = .exe</div><div class='del'>-PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)</div><div class='del'>-WPROGRAM=$(RUBYW_INSTALL_NAME)$(EXEEXT)</div><div class='del'>-RUBYDEF = $(RUBY_SO_NAME).def</div><div class='del'>-MINIRUBY = .\miniruby$(EXEEXT) -I$(srcdir)/lib $(MINIRUBYOPT)</div><div class='del'>-RUNRUBY = .\$(PROGRAM) "$(srcdir)/runruby.rb" --extout="$(EXTOUT)" --</div><div class='del'>-</div><div class='del'>-ORGLIBPATH = $(LIB)</div><div class='del'>-</div><div class='del'>-#### End of system configuration section. ####</div><div class='del'>-</div><div class='del'>-LIBRUBY_A     = $(RUBY_SO_NAME)-static.lib</div><div class='del'>-LIBRUBY_SO    = $(RUBY_SO_NAME).dll</div><div class='del'>-LIBRUBY       = $(RUBY_SO_NAME).lib</div><div class='del'>-LIBRUBYARG    = $(LIBRUBY)</div><div class='del'>-</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'>-INSTALLED_LIST= .installed.list</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='del'>-</div><div class='del'>-ruby: $(PROGRAM)</div><div class='del'>-rubyw: $(WPROGRAM)</div><div class='del'>-</div><div class='del'>-!include $(srcdir)/common.mk</div><div class='del'>-</div><div class='del'>-$(MKFILES): $(srcdir)/bcc32/Makefile.sub $(srcdir)/bcc32/configure.bat $(srcdir)/bcc32/setup.mak</div><div class='del'>-	$(COMSPEC) /C $(srcdir:/=\)\bcc32\configure.bat $(configure_args)</div><div class='del'>-	@echo $(MKFILES) should be updated, re-run $(MAKE).</div><div class='del'>-	@$(MAKE) &gt; nul -q -f &amp;&amp;|</div><div class='del'>-PHONY: nul</div><div class='del'>-	@exit</div><div class='del'>-|</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='del'>-</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='del'>-\#define HAVE_PROTOTYPES 1</div><div class='del'>-\#define TOKEN_PASTE(x,y) x\#\#y</div><div class='del'>-\#define HAVE_STDARG_PROTOTYPES 1</div><div class='del'>-\#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='del'>-\#define HAVE_LIMITS_H 1</div><div class='del'>-\#define HAVE_FCNTL_H 1</div><div class='del'>-\#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='del'>-\#define HAVE_ST_RDEV 1</div><div class='del'>-\#define GETGROUPS_T int</div><div class='del'>-\#define RETSIGTYPE void</div><div class='del'>-\#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_VSNPRINTF 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='del'>-\#define HAVE_FMOD 1</div><div class='del'>-\#define HAVE_WAITPID 1</div><div class='del'>-\#define HAVE_FSYNC 1</div><div class='del'>-\#define HAVE_GETCWD 1</div><div class='del'>-\#define HAVE_CHSIZE 1</div><div class='del'>-\#define HAVE_TIMES 1</div><div class='del'>-\#define HAVE_FCNTL 1</div><div class='del'>-\#define HAVE_LINK 1</div><div class='del'>-\#define HAVE_TELLDIR 1</div><div class='del'>-\#define HAVE_SEEKDIR 1</div><div class='del'>-\#define HAVE_COSH 1</div><div class='del'>-\#define HAVE_SINH 1</div><div class='del'>-\#define HAVE_TANH 1</div><div class='del'>-\#define RSHIFT(x,y) ((x)&gt;&gt;(int)y)</div><div class='del'>-\#define FILE_COUNT level</div><div class='del'>-\#define FILE_READPTR curp</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'>-\#define RUBY_JMP_BUF jmp_buf</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='del'>-\#define DEFAULT_KCODE KCODE_NONE</div><div class='del'>-\#define DLEXT ".so"</div><div class='del'>-\#define RUBY_LIB "/lib/ruby/$(MAJOR).$(MINOR)"</div><div class='del'>-\#define RUBY_SITE_LIB "/lib/ruby/site_ruby"</div><div class='del'>-\#define RUBY_SITE_LIB2 "/lib/ruby/site_ruby/$(MAJOR).$(MINOR)"</div><div class='del'>-\#define RUBY_VENDOR_LIB "/lib/ruby/vendor_ruby"</div><div class='del'>-\#define RUBY_VENDOR_LIB2 "/lib/ruby/vendor_ruby/$(MAJOR).$(MINOR)"</div><div class='del'>-\#define RUBY_PLATFORM "$(ARCH)-$(OS)"</div><div class='del'>-\#define RUBY_ARCHLIB "/lib/ruby/$(MAJOR).$(MINOR)/$(ARCH)-$(OS)"</div><div class='del'>-\#define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/$(MAJOR).$(MINOR)/$(ARCH)-$(OS)"</div><div class='del'>-\#define RUBY_VENDOR_ARCHLIB "/lib/ruby/vendor_ruby/$(MAJOR).$(MINOR)/$(ARCH)-$(OS)"</div><div class='del'>-|</div><div class='del'>-	@exit &gt; $@</div><div class='del'>-</div><div class='del'>-config.status: $(MKFILES) $(srcdir)/bcc32/Makefile.sub $(srcdir)/common.mk</div><div class='del'>-	@echo Creating $@</div><div class='del'>-	@type &gt; $@ &amp;&amp;|</div><div class='del'>-# Generated automatically by Makefile.sub.</div><div class='del'>-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='del'>-s,@CFLAGS@,$(CFLAGS),;t t</div><div class='del'>-s,@CPPFLAGS@,$(CPPFLAGS),;t t</div><div class='del'>-s,@CXXFLAGS@,$(CXXFLAGS),;t t</div><div class='del'>-s,@FFLAGS@,$(FFLAGS),;t t</div><div class='del'>-s,@LDFLAGS@,,;t t</div><div class='del'>-s,@LIBS@,$(LIBS),;t t</div><div class='del'>-s,@exec_prefix@,$${prefix},;t t</div><div class='del'>-s,@prefix@,,;t t</div><div class='del'>-s,@program_transform_name@,s,,,,;t t</div><div class='del'>-s,@bindir@,$${exec_prefix}/bin,;t t</div><div class='del'>-s,@sbindir@,$${exec_prefix}/sbin,;t t</div><div class='del'>-s,@libexecdir@,$${exec_prefix}/libexec,;t t</div><div class='del'>-s,@datadir@,$${prefix}/share,;t t</div><div class='del'>-s,@sysconfdir@,$${prefix}/etc,;t t</div><div class='del'>-s,@sharedstatedir@,/etc,;t t</div><div class='del'>-s,@localstatedir@,/var,;t t</div><div class='del'>-s,@libdir@,$${exec_prefix}/lib,;t t</div><div class='del'>-s,@includedir@,$${prefix}/include,;t t</div><div class='del'>-s,@oldincludedir@,/usr/include,;t t</div><div class='del'>-s,@infodir@,$${prefix}/info,;t t</div><div class='del'>-s,@mandir@,$${prefix}/man,;t t</div><div class='del'>-s,@build@,$(CPU)-pc-$(OS),;t t</div><div class='del'>-s,@build_alias@,$(CPU)-$(OS),;t t</div><div class='del'>-s,@build_cpu@,$(CPU),;t t</div><div class='del'>-s,@build_vendor@,pc,;t t</div><div class='del'>-s,@build_os@,$(OS),;t t</div><div class='del'>-s,@host@,$(CPU)-pc-$(OS),;t t</div><div class='del'>-s,@host_alias@,$(CPU)-$(OS),;t t</div><div class='del'>-s,@host_cpu@,$(CPU),;t t</div><div class='del'>-s,@host_vendor@,pc,;t t</div><div class='del'>-s,@host_os@,$(OS),;t t</div><div class='del'>-s,@target@,$(ARCH)-pc-$(OS),;t t</div><div class='del'>-s,@target_alias@,$(ARCH)-$(OS),;t t</div><div class='del'>-s,@target_cpu@,$(ARCH),;t t</div><div class='del'>-s,@target_vendor@,pc,;t t</div><div class='del'>-s,@target_os@,$(OS),;t t</div><div class='del'>-s,@CC@,$(CC),;t t</div><div class='del'>-s,@CPP@,cpp32,;t t</div><div class='del'>-s,@YACC@,$(YACC),;t t</div><div class='del'>-s,@RANLIB@,,;t t</div><div class='del'>-s,@AR@,$(AR),;t t</div><div class='del'>-s,@ARFLAGS@,$(ARFLAGS) ,;t t</div><div class='del'>-s,@LN_S@,$(LN_S),;t t</div><div class='del'>-s,@SET_MAKE@,MFLAGS = -$$(MAKEFLAGS),;t t</div><div class='del'>-s,@CP@,copy &gt; nul,;t t</div><div class='del'>-s,@LIBOBJS@, acosh.obj crypt.obj erf.obj win32.obj,;t t</div><div class='del'>-s,@ALLOCA@,$(ALLOCA),;t t</div><div class='del'>-s,@DEFAULT_KCODE@,$(DEFAULT_KCODE),;t t</div><div class='del'>-s,@EXEEXT@,.exe,;t t</div><div class='del'>-s,@OBJEXT@,obj,;t t</div><div class='del'>-s,@XCFLAGS@,$(XCFLAGS),;t t</div><div class='del'>-s,@XLDFLAGS@,$(XLDFLAGS),;t t</div><div class='del'>-s,@DLDFLAGS@,$(DLDFLAGS),;t t</div><div class='del'>-s,@ARCH_FLAG@,$(ARCH_FLAG),;t t</div><div class='del'>-s,@STATIC@,$(STATIC),;t t</div><div class='del'>-s,@CCDLFLAGS@,,;t t</div><div class='del'>-s,@LDSHARED@,$(LDSHARED),;t t</div><div class='del'>-s,@DLEXT@,so,;t t</div><div class='del'>-s,@LIBEXT@,lib,;t t</div><div class='del'>-s,@STRIP@,$(STRIP),;t t</div><div class='del'>-s,@EXTSTATIC@,$(EXTSTATIC),;t t</div><div class='del'>-s,@setup@,Setup,;t t</div><div class='del'>-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='del'>-s,@LIBRUBY_LDSHARED@,$$(LDSHARED),;t t</div><div class='del'>-s,@LIBRUBY_DLDFLAGS@,-Gi $$(DLDFLAGS),;t t</div><div class='del'>-s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),;t t</div><div class='del'>-s,@rubyw_install_name@,$(RUBYW_INSTALL_NAME),;t t</div><div class='del'>-s,@RUBYW_INSTALL_NAME@,$(RUBYW_INSTALL_NAME),;t t</div><div class='del'>-s,@RUBY_SO_NAME@,$(RUBY_SO_NAME),;t t</div><div class='del'>-s,@LIBRUBY_A@,$$(RUBY_SO_NAME)-static.lib,;t t</div><div class='del'>-s,@LIBRUBY_SO@,$$(RUBY_SO_NAME).dll,;t t</div><div class='del'>-s,@LIBRUBY_ALIASES@,$(LIBRUBY_ALIASES),;t t</div><div class='del'>-s,@LIBRUBY@,$$(RUBY_SO_NAME).lib,;t t</div><div class='del'>-s,@LIBRUBYARG@,$$(LIBRUBYARG_SHARED),;t t</div><div class='del'>-s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A),;t t</div><div class='del'>-s,@LIBRUBYARG_SHARED@,$$(LIBRUBY),;t t</div><div class='del'>-s,@SOLIBS@,$(SOLIBS),;t t</div><div class='del'>-s,@DLDLIBS@,$(DLDLIBS),;t t</div><div class='del'>-s,@ENABLE_SHARED@,yes,;t t</div><div class='del'>-s,@OUTFLAG@,$(OUTFLAG),;t t</div><div class='del'>-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='del'>-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='del'>-s,@COMMON_MACROS@,WIN32_LEAN_AND_MEAN WIN32,;t t</div><div class='del'>-s,@COMMON_HEADERS@,winsock2.h windows.h,;t t</div><div class='del'>-s,@TRY_LINK@,$$(CC) -oconftest $$(INCFLAGS) -I$$(hdrdir) $$(CPPFLAGS) $$(CFLAGS) $$(LIBPATH) $$(LDFLAGS) $$(src) $$(LOCAL_LIBS) $$(LIBS),;t t</div><div class='del'>-s,@EXPORT_PREFIX@,_,;t t</div><div class='del'>-s,@arch@,$(ARCH)-$(OS),;t t</div><div class='del'>-s,@sitearch@,$(ARCH)-$(OS),;t t</div><div class='del'>-s,@sitedir@,$${prefix}/lib/ruby/site_ruby,;t t</div><div class='del'>-s,@vendordir@,$${prefix}/lib/ruby/vendor_ruby,;t t</div><div class='del'>-s,@configure_args@,--enable-shared $(configure_args),;t t</div><div class='del'>-s,@configure_input@,$$configure_input,;t t</div><div class='del'>-s,@srcdir@,$(srcdir),;t t</div><div class='del'>-s,@top_srcdir@,$(srcdir),;t t</div><div class='del'>-|</div><div class='del'>-</div><div class='del'>-miniruby$(EXEEXT):</div><div class='del'>-		@echo $(LIBS)</div><div class='del'>-		$(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(MINIOBJS),$@,nul,$(LIBRUBY_A) $(LIBS)</div><div class='del'>-</div><div class='del'>-$(PROGRAM):	$(MAINOBJ) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res</div><div class='del'>-		$(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ),$@,nul,$(LIBRUBYARG) $(LIBS),,$(RUBY_INSTALL_NAME).res</div><div class='del'>-</div><div class='del'>-$(WPROGRAM):	$(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_SO) $(RUBYW_INSTALL_NAME).res</div><div class='del'>-		$(LD) $(LDFLAGS) $(WLDFLAGS) $(MAINOBJ) $(WINMAINOBJ),$@,nul,$(LIBRUBYARG) $(LIBS),,$(RUBYW_INSTALL_NAME).res</div><div class='del'>-</div><div class='del'>-$(LIBRUBY_A):	$(OBJS) $(DMYEXT)</div><div class='del'>-		@-if exist $@ del $@</div><div class='del'>-		$(AR) $(ARFLAGS) "$@" $(OBJS) $(DMYEXT)</div><div class='del'>-</div><div class='del'>-# $(LIBRUBY):	$(LIBRUBY_SO)</div><div class='del'>-#		implib $@ $(LIBRUBY_SO)</div><div class='del'>-</div><div class='del'>-$(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $(RUBYDEF) $(RUBY_SO_NAME).res</div><div class='del'>-		@echo $(DLDOBJS)</div><div class='del'>-		@$(PRE_LIBRUBY_UPDATE)</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='del'>-</div><div class='del'>-$(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='del'>-			-ruby_name=$(RUBY_INSTALL_NAME) \</div><div class='del'>-			-rubyw_name=$(RUBYW_INSTALL_NAME) \</div><div class='del'>-			-so_name=$(RUBY_SO_NAME) \</div><div class='del'>-			. $(icondirs) $(srcdir)/win32</div><div class='del'>-</div><div class='del'>-post-install-bin::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-post-install-lib::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-post-install-ext-comm::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-post-install-ext-arch::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-post-install-man::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-post-install-doc::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-clean-local::</div><div class='del'>-		@$(RM) $(WINMAINOBJ) 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='del'>-		@$(RM) *.map *.pdb *.ilk *.exp $(RUBYDEF)</div><div class='del'>-</div><div class='del'>-distclean-local::</div><div class='del'>-		@$(RM) ext\config.cache $(RBCONFIG:/=\)</div><div class='del'>-		@$(RM) $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc</div><div class='del'>-</div><div class='del'>-update-rubyspec:</div><div class='del'>-	@echo SPEC_EXISTS=0 &gt; $@.mk</div><div class='del'>-	@if exist $(srcdir:/=\)\rubyspec\nul echo SPEC_EXISTS=1 &gt;&gt; $@.mk</div><div class='del'>-	@type &gt;&gt; $@.mk &amp;&amp;|</div><div class='del'>-$()update-rubyspec:</div><div class='del'>-$()	@del $@.mk</div><div class='del'>-$()!if $$(SPEC_EXISTS)</div><div class='del'>-$()	cd $(srcdir:/=\)\rubyspec\mspec</div><div class='del'>-$()	git pull</div><div class='del'>-$()	cd ..\spec\rubyspec</div><div class='del'>-$()	git pull</div><div class='del'>-$()!else</div><div class='del'>-$()	git clone $(MSPEC_GIT_URL) $(srcdir)/rubyspec/mspec</div><div class='del'>-$()	git clone $(RUBYSPEC_GIT_URL) $(srcdir)/rubyspec/spec/rubyspec</div><div class='del'>-$()!endif</div><div class='del'>-|</div><div class='del'>-	@$(MAKE) -$(MAKEFLAGS)$(MFLAGS) -f $@.mk</div><div class='del'>-</div><div class='del'>-test-rubyspec:</div><div class='del'>-	@echo SPEC_EXISTS=0 &gt; $@.mk</div><div class='del'>-	@if exist $(srcdir:/=\)\rubyspec\nul echo SPEC_EXISTS=1 &gt;&gt; $@.mk</div><div class='del'>-	@type &gt;&gt; $@.mk &amp;&amp;|</div><div class='del'>-$()test-rubyspec:</div><div class='del'>-$()!if $$(SPEC_EXISTS)</div><div class='del'>-$()	$(RUNRUBY) $(srcdir)/rubyspec/mspec/bin/mspec -r$(srcdir)/ext/purelib.rb $(srcdir)/rubyspec/spec/rubyspec/$(MAJOR).$(MINOR)</div><div class='del'>-$()!else</div><div class='del'>-$()	@echo No rubyspec here.  put rubyspec to srcdir first.</div><div class='del'>-$()	@cd $(srcdir:/=\)\rubyspec</div><div class='del'>-$()!endif</div><div class='del'>-|</div><div class='del'>-	@$(MAKE) -$(MAKEFLAGS) -f $@.mk</div><div class='del'>-</div><div class='del'>-ext/extinit.obj: ext/extinit.c $(SETUP)</div><div class='del'>-	$(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -o$@ -c ext/extinit.c</div><div class='del'>-</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='head'>diff --git a/bcc32/README.bcc32 b/bcc32/README.bcc32<br/>deleted file mode 100644<br/>index c27a1261f1..0000000000<br/>--- a/<a href='/ruby.git/tree/bcc32/README.bcc32?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/README.bcc32</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,137 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= How to build ruby using Borland C++</div><div class='del'>-</div><div class='del'>-== Requirement</div><div class='del'>-</div><div class='del'>-(1) Borland C++ 5.0 or later.</div><div class='del'>-</div><div class='del'>-(2) Please set environment variable (({PATH}))</div><div class='del'>-    to run required commands properly from the command line.</div><div class='del'>-</div><div class='del'>-    Note: building ruby requires following commands.</div><div class='del'>-     * make</div><div class='del'>-     * bcc32</div><div class='del'>-     * 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='del'>-</div><div class='del'>-== How to compile and install</div><div class='del'>-</div><div class='del'>-(1) Execute bcc32\configure.bat on your build directory.</div><div class='del'>-     ex. c:\ruby-1.6.7&gt;bcc32\configure.bat</div><div class='del'>-     </div><div class='del'>-(2) Change ((|RUBY_INSTALL_NAME|)) and ((|RUBY_SO_NAME|)) in (({Makefile}))</div><div class='del'>-    if you want to change the name of the executable files. </div><div class='del'>-    And add ((|RUBYW_INSTALL_NAME|)) to change the name of the</div><div class='del'>-    executable without console window if also you want.</div><div class='del'>-</div><div class='del'>-(3) Run `((%make%))'</div><div class='del'>-</div><div class='del'>-(4) Run `((%make test%))'</div><div class='del'>-</div><div class='del'>-(5) Run `((%make DESTDIR=&lt;install_directory&gt; install%))'</div><div class='del'>-</div><div class='del'>-    This command will create following directories and install files onto them.</div><div class='del'>-      * &lt;install_directory&gt;\bin</div><div class='del'>-      * &lt;install_directory&gt;\lib</div><div class='del'>-      * &lt;install_directory&gt;\lib\ruby</div><div class='del'>-      * &lt;install_directory&gt;\lib\ruby\&lt;MAJOR&gt;.&lt;MINOR&gt;</div><div class='del'>-      * &lt;install_directory&gt;\lib\ruby\&lt;MAJOR&gt;.&lt;MINOR&gt;\&lt;PLATFORM&gt;</div><div class='del'>-      * &lt;install_directory&gt;\lib\ruby\site_ruby</div><div class='del'>-      * &lt;install_directory&gt;\lib\ruby\site_ruby\&lt;MAJOR&gt;.&lt;MINOR&gt;</div><div class='del'>-      * &lt;install_directory&gt;\lib\ruby\site_ruby\&lt;MAJOR&gt;.&lt;MINOR&gt;\&lt;PLATFORM&gt;</div><div class='del'>-      * &lt;install_directory&gt;\man\man1</div><div class='del'>-    If Ruby's version is `x.y.z', the ((|&lt;MAJOR&gt;|)) is `x' and the ((|&lt;MINOR&gt;|)) is `y'.</div><div class='del'>-    The ((|&lt;PLATFORM&gt;|)) is usually `(({i586-bccwin32}))'.</div><div class='del'>-</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='del'>-== Icons</div><div class='del'>-</div><div class='del'>-Any icon files(*.ico) in the build directory, directories specified with</div><div class='del'>-((|icondirs|)) make variable and (({win32})) directory under the ruby</div><div class='del'>-source directory will be included in DLL or executable files, according</div><div class='del'>-to their base names.</div><div class='del'>-    $(RUBY_INSTALL_NAME).ico or ruby.ico   --&gt; $(RUBY_INSTALL_NAME).exe</div><div class='del'>-    $(RUBYW_INSTALL_NAME).ico or rubyw.ico --&gt; $(RUBYW_INSTALL_NAME).exe</div><div class='del'>-    the others                             --&gt; $(RUBY_SO_NAME).dll</div><div class='del'>-</div><div class='del'>-Although no icons are distributed with the ruby source or in the official </div><div class='del'>-site, you can use anything you like. For example, followings are written </div><div class='del'>-in Japanese, but you can download at least.</div><div class='del'>-</div><div class='del'>-* ((&lt;URL:http://member.nifty.ne.jp/ueivu/rubyico.html&gt;)) or</div><div class='del'>-  ((&lt;zipped icons|URL:http://member.nifty.ne.jp/ueivu/Ruby_ico.zip&gt;))</div><div class='del'>-* ((&lt;URL:http://homepage1.nifty.com/a_nakata/ruby/&gt;)) or</div><div class='del'>-  ((&lt;icon itself|URL:http://homepage1.nifty.com/a_nakata/ruby/RubyIcon.ico&gt;))</div><div class='del'>-</div><div class='del'>-== Build examples</div><div class='del'>-</div><div class='del'>-* Build on the ruby source directory.</div><div class='del'>-</div><div class='del'>-  ex.)</div><div class='del'>-    ruby source directory:  C:\ruby</div><div class='del'>-    build directory:        C:\ruby</div><div class='del'>-    install directory:      C:\usr\local</div><div class='del'>-</div><div class='del'>-    C:</div><div class='del'>-    cd \ruby</div><div class='del'>-    bcc32\configure</div><div class='del'>-    make</div><div class='del'>-    make test</div><div class='del'>-    make DESTDIR=/usr/local install</div><div class='del'>-</div><div class='del'>-* Build on the relative directory from the ruby source directory and CPU type </div><div class='del'>-  i386.</div><div class='del'>-</div><div class='del'>-  ex.)</div><div class='del'>-    ruby source directory:  C:\ruby</div><div class='del'>-    build directory:        C:\ruby\bccwin32</div><div class='del'>-    install directory:      C:\usr\local</div><div class='del'>-    CPU                     i386</div><div class='del'>-    </div><div class='del'>-    C:</div><div class='del'>-    cd \ruby</div><div class='del'>-    mkdir bccwin32</div><div class='del'>-    cd bccwin32</div><div class='del'>-    ..\bcc32\configure target i386-bccwin32</div><div class='del'>-    make</div><div class='del'>-    make test</div><div class='del'>-    make DESTDIR=/usr/local install</div><div class='del'>-</div><div class='del'>-* Build on the different drive.</div><div class='del'>-</div><div class='del'>-  ex.)</div><div class='del'>-    ruby source directory:  C:\src\ruby</div><div class='del'>-    build directory:        D:\build\ruby</div><div class='del'>-    install directory:      C:\usr\local</div><div class='del'>-</div><div class='del'>-    D:</div><div class='del'>-    cd D:\build\ruby</div><div class='del'>-    C:\src\ruby\bcc32\configure</div><div class='del'>-    make</div><div class='del'>-    make test</div><div class='del'>-    make DESTDIR=C:/usr/local install</div><div class='del'>-</div><div class='del'>-== Bugs</div><div class='del'>-</div><div class='del'>-You can ((*NOT*)) use a path name contains any white space characters as</div><div class='del'>-the ruby source directory, this restriction comes from the behavior of</div><div class='del'>-(({!INCLUDE})) directives of (({MAKE})).</div><div class='del'>-((- you may call it a bug. -))</div><div class='del'>-</div><div class='del'>-=end</div><div class='head'>diff --git a/bcc32/configure.bat b/bcc32/configure.bat<br/>deleted file mode 100755<br/>index 95575cbc60..0000000000<br/>--- a/<a href='/ruby.git/tree/bcc32/configure.bat?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/configure.bat</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,152 +0,0 @@</div><div class='del'>-@echo off</div><div class='del'>-::: Don't set environment variable in batch file other than autoexec.bat</div><div class='del'>-::: to avoid "Out of environment space" problem on Windows 95/98.</div><div class='del'>-::: set TMPMAKE=~tmp~.mak</div><div class='del'>-</div><div class='del'>-echo&gt; ~tmp~.mak ####</div><div class='del'>-echo&gt;&gt; ~tmp~.mak conf = %0</div><div class='del'>-echo&gt;&gt; ~tmp~.mak $(conf:\=/): nul</div><div class='del'>-echo&gt;&gt; ~tmp~.mak 	@del ~setup~.mak</div><div class='del'>-echo&gt;&gt; ~tmp~.mak 	@-$(MAKE) -l$(MAKEFLAGS) -f $(@D)setup.mak \</div><div class='del'>-if exist pathlist.tmp del pathlist.tmp</div><div class='del'>-if exist confargs.mk del confargs.mk</div><div class='del'>-:loop</div><div class='del'>-if "%1" == "" goto :end</div><div class='del'>-if "%1" == "--prefix" goto :prefix</div><div class='del'>-if "%1" == "prefix" goto :prefix</div><div class='del'>-if "%1" == "--srcdir" goto :srcdir</div><div class='del'>-if "%1" == "srcdir" goto :srcdir</div><div class='del'>-if "%1" == "--target" goto :target</div><div class='del'>-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" == "RUBY_SUFFIX" goto :suffix</div><div class='del'>-if "%1" == "--program-name" goto :installname</div><div class='del'>-if "%1" == "--install-name" goto :installname</div><div class='del'>-if "%1" == "RUBY_INSTALL_NAME" goto :installname</div><div class='del'>-if "%1" == "--so-name" goto :soname</div><div class='del'>-if "%1" == "RUBY_SO_NAME" goto :soname</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" == "EXTOUT" goto :extout</div><div class='del'>-if "%1" == "--path" goto :path</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;confargs.tmp 	%1 \</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:srcdir</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	-Dsrcdir=%2 \</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	--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 	-Dprefix=%2 \</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1=%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;confargs.mk !ifndef RUBY_SUFFIX</div><div class='del'>-  echo&gt;&gt;confargs.mk RUBY_SUFFIX = %2</div><div class='del'>-  echo&gt;&gt;confargs.mk !endif</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1=%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;confargs.mk !ifndef RUBY_INSTALL_NAME</div><div class='del'>-  echo&gt;&gt;confargs.mk RUBY_INSTALL_NAME = %2</div><div class='del'>-  echo&gt;&gt;confargs.mk !endif</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1=%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;confargs.mk !ifndef RUBY_SO_NAME</div><div class='del'>-  echo&gt;&gt;confargs.mk RUBY_SO_NAME = %2</div><div class='del'>-  echo&gt;&gt;confargs.mk !endif</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1=%2 \</div><div class='del'>-  shift</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:target</div><div class='del'>-  echo&gt;&gt; ~tmp~.mak 	%2 \</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	--target=%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;confargs.mk !ifndef EXTSTATIC</div><div class='del'>-  echo&gt;&gt;confargs.mk EXTSTATIC = static</div><div class='del'>-  echo&gt;&gt;confargs.mk !endif</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1 \</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:enable-rdoc</div><div class='del'>-  echo&gt;&gt;confargs.mk !ifndef RDOCTARGET</div><div class='del'>-  echo&gt;&gt;confargs.mk RDOCTARGET = install-doc</div><div class='del'>-  echo&gt;&gt;confargs.mk !endif</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1 \</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:disable-rdoc</div><div class='del'>-  echo&gt;&gt;confargs.mk !ifndef RDOCTARGET</div><div class='del'>-  echo&gt;&gt;confargs.mk RDOCTARGET = install-nodoc</div><div class='del'>-  echo&gt;&gt;confargs.mk !endif</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1 \</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:extout</div><div class='del'>-  echo&gt;&gt;confargs.mk !ifndef EXTOUT</div><div class='del'>-  echo&gt;&gt;confargs.mk EXTOUT = %2</div><div class='del'>-  echo&gt;&gt;confargs.mk !endif</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1=%2 \</div><div class='del'>-  shift</div><div class='del'>-  shift</div><div class='del'>-goto :loop</div><div class='del'>-:path</div><div class='del'>-  echo&gt;&gt;pathlist.tmp %2;\</div><div class='del'>-  echo&gt;&gt;confargs.tmp 	%1=%2 \</div><div class='del'>-  shift</div><div class='del'>-  shift</div><div class='del'>-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   --disable-install-doc   install rdoc indexes during install</div><div class='del'>-  del *.tmp</div><div class='del'>-  del ~tmp~.mak</div><div class='del'>-goto :exit</div><div class='del'>-:end</div><div class='del'>-echo&gt;&gt; ~tmp~.mak 	-Dbcc32dir=$(@D)</div><div class='del'>-if not exist confargs.tmp goto :noconfargs</div><div class='del'>-    echo&gt;&gt;confargs.mk configure_args = \</div><div class='del'>-    type&gt;&gt;confargs.mk confargs.tmp</div><div class='del'>-    echo.&gt;&gt;confargs.mk</div><div class='del'>-    echo&gt;&gt;confargs.mk ####</div><div class='del'>-:noconfargs</div><div class='del'>-if not exist pathlist.tmp goto :nopathlist</div><div class='del'>-    echo&gt;&gt;confargs.mk pathlist = \</div><div class='del'>-    type&gt;&gt;confargs.mk pathlist.tmp</div><div class='del'>-    echo.&gt;&gt;confargs.mk</div><div class='del'>-    echo&gt;&gt;confargs.mk ####</div><div class='del'>-    echo&gt;&gt;confargs.mk PATH = $(pathlist:;=/bin;)$(PATH)</div><div class='del'>-    echo&gt;&gt;confargs.mk INCLUDE = $(pathlist:;=/include;)</div><div class='del'>-    echo&gt;&gt;confargs.mk LIB = $(pathlist:;=/lib;)</div><div class='del'>-:nopathlist</div><div class='del'>-if exist confargs.mk copy confargs.mk ~setup~.mak &gt; nul</div><div class='del'>-type&gt;&gt;~setup~.mak ~tmp~.mak</div><div class='del'>-del *.tmp &gt; nul</div><div class='del'>-del ~tmp~.mak &gt; nul</div><div class='del'>-make -s -f ~setup~.mak</div><div class='del'>-:exit</div><div class='head'>diff --git a/bcc32/mkexports.rb b/bcc32/mkexports.rb<br/>deleted file mode 100755<br/>index dc523e2541..0000000000<br/>--- a/<a href='/ruby.git/tree/bcc32/mkexports.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/mkexports.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#!./miniruby -s</div><div class='del'>-</div><div class='del'>-$name = $library = $description = nil</div><div class='del'>-</div><div class='del'>-SYM = {}</div><div class='del'>-STDIN.reopen(open("nul"))</div><div class='del'>-ARGV.each do |obj|</div><div class='del'>-  IO.foreach("|tdump -q -oiPUBDEF -oiPUBD32 #{obj.tr('/', '\\')}") do |l|</div><div class='del'>-    next unless /(?:PUBDEF|PUBD32)/ =~ l</div><div class='del'>-    SYM[$1] = true if /'(.*?)'/ =~ l</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-exports = []</div><div class='del'>-if $name</div><div class='del'>-  exports &lt;&lt; "Name " + $name</div><div class='del'>-elsif $library</div><div class='del'>-  exports &lt;&lt; "Library " + $library</div><div class='del'>-end</div><div class='del'>-exports &lt;&lt; "Description " + $description.dump if $description</div><div class='del'>-exports &lt;&lt; "EXPORTS" &lt;&lt; SYM.keys.sort</div><div class='del'>-</div><div class='del'>-if $output</div><div class='del'>-  open($output, 'w') {|f| f.puts exports.join("\n")}</div><div class='del'>-else</div><div class='del'>-  puts exports.join("\n")</div><div class='del'>-end</div><div class='head'>diff --git a/bcc32/setup.mak b/bcc32/setup.mak<br/>deleted file mode 100644<br/>index 483292ed51..0000000000<br/>--- a/<a href='/ruby.git/tree/bcc32/setup.mak?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bcc32/setup.mak</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,163 +0,0 @@</div><div class='del'>-# -*- makefile -*-</div><div class='del'>-</div><div class='del'>-!if "$(srcdir)" != ""</div><div class='del'>-bcc32dir = $(srcdir)/bcc32</div><div class='del'>-!elseif "$(bcc32dir)" == "bcc32/"</div><div class='del'>-srcdir = .</div><div class='del'>-!elseif "$(bcc32dir:/bcc32/=)/bcc32/" == "$(bcc32dir)"</div><div class='del'>-srcdir = $(bcc32dir:/bcc32/=)</div><div class='del'>-!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='del'>-!endif</div><div class='del'>-OS = bccwin32</div><div class='del'>-RT = $(OS)</div><div class='del'>-BANG = !</div><div class='del'>-APPEND = echo&gt;&gt;$(MAKEFILE)</div><div class='del'>-!ifdef MAKEFILE</div><div class='del'>-MAKE = $(MAKE) -f $(MAKEFILE)</div><div class='del'>-!else</div><div class='del'>-MAKEFILE = Makefile</div><div class='del'>-!endif</div><div class='del'>-</div><div class='del'>-all: Makefile</div><div class='del'>-Makefile: -prologue- -generic- -epilogue-</div><div class='del'>-i386-$(OS): -prologue- -i386- -epilogue-</div><div class='del'>-i486-$(OS): -prologue- -i486- -epilogue-</div><div class='del'>-i586-$(OS): -prologue- -i586- -epilogue-</div><div class='del'>-i686-$(OS): -prologue- -i686- -epilogue-</div><div class='del'>-alpha-$(OS): -prologue- -alpha- -epilogue-</div><div class='del'>-</div><div class='del'>--prologue-: -basic-vars- -version- -system-vars-</div><div class='del'>-</div><div class='del'>--basic-vars-: nul</div><div class='del'>-	@echo Creating $(MAKEFILE)</div><div class='del'>-	@type &gt; $(MAKEFILE) &amp;&amp;|</div><div class='del'>-\#\#\# Makefile for ruby $(OS) \#\#\#</div><div class='del'>-$(BANG)ifndef srcdir</div><div class='del'>-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'>-|</div><div class='del'>-!if exist(confargs.mk)</div><div class='del'>-	@type confargs.mk &gt;&gt; $(MAKEFILE)</div><div class='del'>-	@del confargs.mk</div><div class='del'>-!endif</div><div class='del'>-</div><div class='del'>--system-vars-: -runtime- -bormm-</div><div class='del'>-</div><div class='del'>--bormm-: nul</div><div class='del'>-	@-ilink32 -q -Gn -x usebormm.lib &gt; nul</div><div class='del'>-	@-if exist usebormm.tds $(APPEND) MEMLIB = usebormm.lib</div><div class='del'>-	@if exist usebormm.* del usebormm.*</div><div class='del'>-</div><div class='del'>--osname-: nul</div><div class='del'>-	@echo OS =  &gt;&gt;$(MAKEFILE)</div><div class='del'>-</div><div class='del'>--runtime-: nul</div><div class='del'>-	type &gt; conftest.c &amp;&amp;|</div><div class='del'>-\#include &lt;stdio.h&gt;</div><div class='del'>-int main(){printf("");return 0;}</div><div class='del'>-|</div><div class='del'>-	bcc32 conftest.c cw32i.lib &gt; nul</div><div class='del'>-	tdump conftest.exe &lt; nul &gt; conftest.i</div><div class='del'>-	grep "^Imports from CC" conftest.i &gt; conftest.c</div><div class='del'>-	cpp32 -P- -DFile=\# -DImports=RTNAME -Dfrom== conftest.c &gt; nul</div><div class='del'>-	$(MAKE) &gt; nul -DBANG=$(BANG) -f &amp;&amp;|</div><div class='del'>--runtime-: nul</div><div class='del'>-$(BANG)include conftest.i</div><div class='del'>-RT = $$(RTNAME:.DLL=)</div><div class='del'>-OS = $$(RT:CC32=)</div><div class='del'>--runtime-:</div><div class='del'>-	del conftest.*</div><div class='del'>-$(BANG)if "$$(OS)" == "50"</div><div class='del'>-	echo OS = bccwin32 &gt;&gt; $(MAKEFILE)</div><div class='del'>-$(BANG)else</div><div class='del'>-	echo OS = bccwin32_$$(OS) &gt;&gt; $(MAKEFILE)</div><div class='del'>-$(BANG)endif</div><div class='del'>-|</div><div class='del'>-	@echo RT = $$(OS) &gt;&gt; $(MAKEFILE)</div><div class='del'>-</div><div class='del'>--version-: nul</div><div class='del'>-	@cpp32 -I$(srcdir) -P- -o$(MAKEFILE) &gt; nul &amp;&amp;|</div><div class='del'>-\#include "version.h"</div><div class='del'>-MAJOR = RUBY_VERSION_MAJOR</div><div class='del'>-MINOR = RUBY_VERSION_MINOR</div><div class='del'>-TEENY = RUBY_VERSION_TEENY</div><div class='del'>-</div><div class='del'>-BORLANDC = __BORLANDC__</div><div class='del'>-|</div><div class='del'>-	@$(MAKE) &gt; nul -DBANG=$(BANG) -f &amp;&amp;,</div><div class='del'>--version-: nul</div><div class='del'>-$(BANG)include $(MAKEFILE)</div><div class='del'>-$(BANG)include $(MAKEFILE).i</div><div class='del'>--version-:</div><div class='del'>-	@del $(MAKEFILE).i</div><div class='del'>-	@type &gt;&gt; $(MAKEFILE) &amp;&amp;|</div><div class='del'>-MAJOR = $$(MAJOR)</div><div class='del'>-MINOR = $$(MINOR)</div><div class='del'>-TEENY = $$(TEENY)</div><div class='del'>-BORLANDC = $$(BORLANDC)</div><div class='del'>-|</div><div class='del'>-,</div><div class='del'>-</div><div class='del'>--generic-: nul</div><div class='del'>-!if defined(PROCESSOR_ARCHITECTURE) ||  defined(PROCESSOR_LEVEL)</div><div class='del'>-	@type &gt;&gt; $(MAKEFILE) &amp;&amp;|</div><div class='del'>-!if defined(PROCESSOR_ARCHITECTURE)</div><div class='del'>-$(BANG)ifndef PROCESSOR_ARCHITECTURE</div><div class='del'>-PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)</div><div class='del'>-$(BANG)endif</div><div class='del'>-!endif</div><div class='del'>-!if defined(PROCESSOR_LEVEL)</div><div class='del'>-$(BANG)ifndef PROCESSOR_LEVEL</div><div class='del'>-PROCESSOR_LEVEL = $(PROCESSOR_LEVEL)</div><div class='del'>-$(BANG)endif</div><div class='del'>-!endif</div><div class='del'>-|</div><div class='del'>-!endif</div><div class='del'>-</div><div class='del'>--alpha-: nul</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_ARCHITECTURE</div><div class='del'>-	@$(APPEND) PROCESSOR_ARCHITECTURE = alpha</div><div class='del'>-	@$(APPEND) !endif</div><div class='del'>--ix86-: nul</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_ARCHITECTURE</div><div class='del'>-	@$(APPEND) PROCESSOR_ARCHITECTURE = x86</div><div class='del'>-	@$(APPEND) !endif</div><div class='del'>-</div><div class='del'>--i386-: -ix86-</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_LEVEL</div><div class='del'>-	@$(APPEND) PROCESSOR_LEVEL = 3</div><div class='del'>-	@$(APPEND) !endif</div><div class='del'>--i486-: -ix86-</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_LEVEL</div><div class='del'>-	@$(APPEND) PROCESSOR_LEVEL = 4</div><div class='del'>-	@$(APPEND) !endif</div><div class='del'>--i586-: -ix86-</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_LEVEL</div><div class='del'>-	@$(APPEND) PROCESSOR_LEVEL = 5</div><div class='del'>-	@$(APPEND) !endif</div><div class='del'>--i686-: -ix86-</div><div class='del'>-	@$(APPEND) !ifndef PROCESSOR_LEVEL</div><div class='del'>-	@$(APPEND) PROCESSOR_LEVEL = 6</div><div class='del'>-	@$(APPEND) !endif</div><div class='del'>-</div><div class='del'>--epilogue-: nul</div><div class='del'>-	@type &gt;&gt; $(MAKEFILE) &amp;&amp;|</div><div class='del'>-</div><div class='del'>-\# RUBY_INSTALL_NAME = ruby</div><div class='del'>-\# 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='del'>-\# STACK = 0x2000000</div><div class='del'>-\# LDFLAGS = -S:$$(STACK)</div><div class='del'>-\# RFLAGS = $$(iconinc)</div><div class='del'>-\# EXTLIBS = cw32.lib import32.lib user32.lib kernel32.lib</div><div class='del'>-$(BANG)include $$(srcdir)/bcc32/Makefile.sub</div><div class='del'>-|</div><div class='del'>-	@echo type "`$(MAKE)'" to make ruby for $(OS).</div><div class='head'>diff --git a/bignum.c b/bignum.c<br/>index be287032ce..c14924205b 100644<br/>--- a/<a href='/ruby.git/tree/bignum.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bignum.c</a><br/>+++ b/<a href='/ruby.git/tree/bignum.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>bignum.c</a></div><div class='hunk'>@@ -1,534 +1,241 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   bignum.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/27 15:48:21 $</div><div class='ctx'>   created at: Fri Jun 10 00:48:55 JST 1994</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-</div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-</div><div class='del'>-#include &lt;math.h&gt;</div><div class='del'>-#include &lt;float.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='del'>-</div><div class='del'>-VALUE rb_cBignum;</div><div class='del'>-</div><div class='del'>-#if defined __MINGW32__</div><div class='del'>-#define USHORT _USHORT</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define BDIGITS(x) ((BDIGIT*)RBIGNUM(x)-&gt;digits)</div><div class='del'>-#define BITSPERDIG (SIZEOF_BDIGITS*CHAR_BIT)</div><div class='del'>-#define BIGRAD ((BDIGIT_DBL)1 &lt;&lt; BITSPERDIG)</div><div class='del'>-#define DIGSPERLONG ((unsigned int)(SIZEOF_LONG/SIZEOF_BDIGITS))</div><div class='del'>-#if HAVE_LONG_LONG</div><div class='del'>-# define DIGSPERLL ((unsigned int)(SIZEOF_LONG_LONG/SIZEOF_BDIGITS))</div><div class='del'>-#endif</div><div class='del'>-#define BIGUP(x) ((BDIGIT_DBL)(x) &lt;&lt; BITSPERDIG)</div><div class='del'>-#define BIGDN(x) RSHIFT(x,BITSPERDIG)</div><div class='del'>-#define BIGLO(x) ((BDIGIT)((x) &amp; (BIGRAD-1)))</div><div class='del'>-#define BDIGMAX ((BDIGIT)-1)</div><div class='del'>-</div><div class='del'>-#define BIGZEROP(x) (RBIGNUM(x)-&gt;len == 0 || \</div><div class='del'>-		     (BDIGITS(x)[0] == 0 &amp;&amp; \</div><div class='del'>-		      (RBIGNUM(x)-&gt;len == 1 || bigzero_p(x))))</div><div class='del'>-</div><div class='del'>-static int bigzero_p(VALUE);</div><div class='del'>-static int</div><div class='del'>-bigzero_p(x)</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    for (i = 0; i &lt; RBIGNUM(x)-&gt;len; ++i) {</div><div class='del'>-	if (BDIGITS(x)[i]) return 0;</div><div class='del'>-    }</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='add'>+#include &lt;math.h&gt;</div><div class='add'>+</div><div class='add'>+extern VALUE C_Integer;</div><div class='add'>+VALUE C_Bignum;</div><div class='add'>+</div><div class='add'>+#define BDIGITS(x) RBIGNUM(x)-&gt;digits</div><div class='add'>+#define BITSPERDIG (sizeof(USHORT)*CHAR_BIT)</div><div class='add'>+#define BIGRAD (1L &lt;&lt; BITSPERDIG)</div><div class='add'>+#define DIGSPERLONG ((UINT)(sizeof(long)/sizeof(USHORT)))</div><div class='add'>+#define BIGUP(x) ((unsigned long)(x) &lt;&lt; BITSPERDIG)</div><div class='add'>+#define BIGDN(x) ((x) &gt;&gt; BITSPERDIG)</div><div class='add'>+#define BIGLO(x) ((x) &amp; (BIGRAD-1))</div><div class='add'>+</div><div class='add'>+#define MAX(a,b) ((a)&gt;(b)?(a):(b))</div><div class='add'>+#define MIN(a,b) ((a)&lt;(b)?(a):(b))</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-bignew_1(klass, len, sign)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    long len;</div><div class='del'>-    int sign;</div><div class='add'>+bignew_1(class, len, sign)</div><div class='add'>+    VALUE class;</div><div class='add'>+    UINT len;</div><div class='add'>+    char sign;</div><div class='ctx'> {</div><div class='ctx'>     NEWOBJ(big, struct RBignum);</div><div class='del'>-    OBJSETUP(big, klass, T_BIGNUM);</div><div class='del'>-    big-&gt;sign = sign?1:0;</div><div class='add'>+    OBJSETUP(big, C_Bignum, T_BIGNUM);</div><div class='add'>+    big-&gt;sign = sign;</div><div class='ctx'>     big-&gt;len = len;</div><div class='del'>-    big-&gt;digits = ALLOC_N(BDIGIT, len);</div><div class='add'>+    BDIGITS(big) = ALLOC_N(USHORT, len);</div><div class='ctx'> </div><div class='ctx'>     return (VALUE)big;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define bignew(len,sign) bignew_1(rb_cBignum,len,sign)</div><div class='add'>+#define bignew(len,sign) bignew_1(C_Bignum,len,sign)</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fbig_new(class, y)</div><div class='add'>+    VALUE class;</div><div class='add'>+    struct RBignum *y;</div><div class='add'>+{</div><div class='add'>+    Check_Type(y, T_BIGNUM);</div><div class='add'>+    return bignew_1(class, y-&gt;len, y-&gt;sign);</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_big_clone(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+Fbig_clone(x)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    VALUE z = bignew_1(CLASS_OF(x), RBIGNUM(x)-&gt;len, RBIGNUM(x)-&gt;sign);</div><div class='add'>+    VALUE z = bignew_1(CLASS_OF(x), x-&gt;len, x-&gt;sign);</div><div class='ctx'> </div><div class='del'>-    MEMCPY(BDIGITS(z), BDIGITS(x), BDIGIT, RBIGNUM(x)-&gt;len);</div><div class='del'>-    return z;</div><div class='add'>+    bcopy(BDIGITS(x), BDIGITS(z), x-&gt;len*sizeof(USHORT));</div><div class='add'>+    return (VALUE)z;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* modify a bignum by 2's complement */</div><div class='del'>-static void</div><div class='del'>-get2comp(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+void</div><div class='add'>+big_2comp(x)			/* get 2's complement */</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    long i = RBIGNUM(x)-&gt;len;</div><div class='del'>-    BDIGIT *ds = BDIGITS(x);</div><div class='del'>-    BDIGIT_DBL num;</div><div class='add'>+    UINT i = x-&gt;len;</div><div class='add'>+    USHORT *ds = BDIGITS(x);</div><div class='add'>+    long 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='del'>-	num += ds[i];</div><div class='add'>+	num += (long)ds[i];</div><div class='ctx'> 	ds[i++] = BIGLO(num);</div><div class='ctx'> 	num = BIGDN(num);</div><div class='del'>-    } while (i &lt; RBIGNUM(x)-&gt;len);</div><div class='del'>-    if (num != 0) {</div><div class='del'>-	REALLOC_N(RBIGNUM(x)-&gt;digits, BDIGIT, ++RBIGNUM(x)-&gt;len);</div><div class='del'>-	ds = BDIGITS(x);</div><div class='del'>-	ds[RBIGNUM(x)-&gt;len-1] = RBIGNUM(x)-&gt;sign ? ~0 : 1;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_big_2comp(x)			/* get 2's complement */</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    get2comp(x);</div><div class='add'>+    } while (i &lt; x-&gt;len);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-bigtrunc(x)</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    long len = RBIGNUM(x)-&gt;len;</div><div class='del'>-    BDIGIT *ds = BDIGITS(x);</div><div class='del'>-</div><div class='del'>-    if (len == 0) return x;</div><div class='del'>-    while (--len &amp;&amp; !ds[len]);</div><div class='del'>-    RBIGNUM(x)-&gt;len = ++len;</div><div class='del'>-    return x;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bigfixize(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+VALUE</div><div class='add'>+bignorm(x)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    long len = RBIGNUM(x)-&gt;len;</div><div class='del'>-    BDIGIT *ds = BDIGITS(x);</div><div class='add'>+    UINT len = x-&gt;len;</div><div class='add'>+    USHORT *ds = BDIGITS(x);</div><div class='ctx'> </div><div class='del'>-    if (len*SIZEOF_BDIGITS &lt;= sizeof(VALUE)) {</div><div class='add'>+    while (len-- &amp;&amp; !ds[len]) ;</div><div class='add'>+    x-&gt;len = ++len;</div><div class='add'>+    </div><div class='add'>+    if (len*sizeof(USHORT) &lt; sizeof(VALUE) ||</div><div class='add'>+	(len*sizeof(USHORT) == sizeof(VALUE) &amp;&amp;</div><div class='add'>+	 ds[sizeof(VALUE)/sizeof(USHORT)-1] &lt;= 0x3fff)) {</div><div class='ctx'> 	long num = 0;</div><div class='ctx'> 	while (len--) {</div><div class='ctx'> 	    num = BIGUP(num) + ds[len];</div><div class='ctx'> 	}</div><div class='del'>-	if (num &gt;= 0) {</div><div class='del'>-	    if (RBIGNUM(x)-&gt;sign) {</div><div class='del'>-		if (POSFIXABLE(num)) return LONG2FIX(num);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		if (NEGFIXABLE(-(long)num)) return LONG2FIX(-(long)num);</div><div class='del'>-	    }</div><div class='add'>+	if (x-&gt;sign) {</div><div class='add'>+	    if (POSFIXABLE(num)) return INT2FIX(num);</div><div class='ctx'> 	}</div><div class='add'>+	else if (NEGFIXABLE(-num)) return INT2FIX(-num);</div><div class='ctx'>     }</div><div class='del'>-    return x;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bignorm(x)</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    if (!FIXNUM_P(x) &amp;&amp; TYPE(x) == T_BIGNUM) {</div><div class='del'>-	x = bigfixize(bigtrunc(x));</div><div class='del'>-    }</div><div class='del'>-    return x;</div><div class='add'>+    return (VALUE)x;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_big_norm(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+uint2big(n)</div><div class='add'>+    UINT n;</div><div class='ctx'> {</div><div class='del'>-    return bignorm(x);</div><div class='del'>-}</div><div class='add'>+    UINT i = 0;</div><div class='add'>+    USHORT *digits;</div><div class='add'>+    struct RBignum *big;</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_uint2big(n)</div><div class='del'>-    unsigned long n;</div><div class='del'>-{</div><div class='del'>-    BDIGIT_DBL num = n;</div><div class='del'>-    long i = 0;</div><div class='del'>-    BDIGIT *digits;</div><div class='del'>-    VALUE big;</div><div class='del'>-</div><div class='del'>-    big = bignew(DIGSPERLONG, 1);</div><div class='add'>+    i = 0;</div><div class='add'>+    big = (struct RBignum*)bignew(DIGSPERLONG, 1);</div><div class='ctx'>     digits = BDIGITS(big);</div><div class='ctx'>     while (i &lt; DIGSPERLONG) {</div><div class='del'>-	digits[i++] = BIGLO(num);</div><div class='del'>-	num = BIGDN(num);</div><div class='add'>+	digits[i++] = BIGLO(n);</div><div class='add'>+	n = BIGDN(n);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     i = DIGSPERLONG;</div><div class='del'>-    while (--i &amp;&amp; !digits[i]) ;</div><div class='del'>-    RBIGNUM(big)-&gt;len = i+1;</div><div class='del'>-    return big;</div><div class='add'>+    while (i-- &amp;&amp; !digits[i]) ;</div><div class='add'>+    big-&gt;len = i+1;</div><div class='add'>+    return (VALUE)big;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_int2big(n)</div><div class='del'>-    long n;</div><div class='add'>+int2big(n)</div><div class='add'>+    int n;</div><div class='ctx'> {</div><div class='del'>-    long neg = 0;</div><div class='del'>-    VALUE big;</div><div class='add'>+    int neg = 0;</div><div class='add'>+    struct RBignum *big;</div><div class='ctx'> </div><div class='ctx'>     if (n &lt; 0) {</div><div class='ctx'> 	n = -n;</div><div class='ctx'> 	neg = 1;</div><div class='ctx'>     }</div><div class='del'>-    big = rb_uint2big(n);</div><div class='add'>+    big = (struct RBignum*)uint2big(n);</div><div class='ctx'>     if (neg) {</div><div class='del'>-	RBIGNUM(big)-&gt;sign = 0;</div><div class='del'>-    }</div><div class='del'>-    return big;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_uint2inum(n)</div><div class='del'>-    unsigned long n;</div><div class='del'>-{</div><div class='del'>-    if (POSFIXABLE(n)) return LONG2FIX(n);</div><div class='del'>-    return rb_uint2big(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_int2inum(n)</div><div class='del'>-    long n;</div><div class='del'>-{</div><div class='del'>-    if (FIXABLE(n)) return LONG2FIX(n);</div><div class='del'>-    return rb_int2big(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_LONG_LONG</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_quad_pack(buf, val)</div><div class='del'>-    char *buf;</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    LONG_LONG q;</div><div class='del'>-</div><div class='del'>-    val = rb_to_int(val);</div><div class='del'>-    if (FIXNUM_P(val)) {</div><div class='del'>-	q = FIX2LONG(val);</div><div class='add'>+	big-&gt;sign = FALSE;</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	long len = RBIGNUM(val)-&gt;len;</div><div class='del'>-	BDIGIT *ds;</div><div class='del'>-</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='del'>-	ds = BDIGITS(val);</div><div class='del'>-	q = 0;</div><div class='del'>-	while (len--) {</div><div class='del'>-	    q = BIGUP(q);</div><div class='del'>-	    q += ds[len];</div><div class='del'>-	}</div><div class='del'>-	if (!RBIGNUM(val)-&gt;sign) q = -q;</div><div class='del'>-    }</div><div class='del'>-    memcpy(buf, (char*)&amp;q, SIZEOF_LONG_LONG);</div><div class='add'>+    return (VALUE)big;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_quad_unpack(buf, sign)</div><div class='del'>-    const char *buf;</div><div class='del'>-    int sign;</div><div class='del'>-{</div><div class='del'>-    unsigned LONG_LONG q;</div><div class='del'>-    long neg = 0;</div><div class='del'>-    long i;</div><div class='del'>-    BDIGIT *digits;</div><div class='del'>-    VALUE big;</div><div class='del'>-</div><div class='del'>-    memcpy(&amp;q, buf, SIZEOF_LONG_LONG);</div><div class='del'>-    if (sign) {</div><div class='del'>-	if (FIXABLE((LONG_LONG)q)) return LONG2FIX((LONG_LONG)q);</div><div class='del'>-	if ((LONG_LONG)q &lt; 0) {</div><div class='del'>-	    q = -(LONG_LONG)q;</div><div class='del'>-	    neg = 1;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (POSFIXABLE(q)) return LONG2FIX(q);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    i = 0;</div><div class='del'>-    big = bignew(DIGSPERLL, 1);</div><div class='del'>-    digits = BDIGITS(big);</div><div class='del'>-    while (i &lt; DIGSPERLL) {</div><div class='del'>-	digits[i++] = BIGLO(q);</div><div class='del'>-	q = BIGDN(q);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    i = DIGSPERLL;</div><div class='del'>-    while (i-- &amp;&amp; !digits[i]) ;</div><div class='del'>-    RBIGNUM(big)-&gt;len = i+1;</div><div class='del'>-</div><div class='del'>-    if (neg) {</div><div class='del'>-	RBIGNUM(big)-&gt;sign = 0;</div><div class='del'>-    }</div><div class='del'>-    return bignorm(big);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else</div><div class='del'>-</div><div class='del'>-#define QUAD_SIZE 8</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_quad_pack(buf, val)</div><div class='del'>-    char *buf;</div><div class='del'>-    VALUE val;</div><div class='add'>+uint2inum(n)</div><div class='add'>+    UINT n;</div><div class='ctx'> {</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    memset(buf, 0, QUAD_SIZE);</div><div class='del'>-    val = rb_to_int(val);</div><div class='del'>-    if (FIXNUM_P(val)) {</div><div class='del'>-	val = rb_int2big(FIX2LONG(val));</div><div class='del'>-    }</div><div class='del'>-    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='del'>-    memcpy(buf, (char*)BDIGITS(val), len);</div><div class='del'>-    if (!RBIGNUM(val)-&gt;sign) {</div><div class='del'>-	len = QUAD_SIZE;</div><div class='del'>-	while (len--) {</div><div class='del'>-	    *buf = ~*buf;</div><div class='del'>-	    buf++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='add'>+    if (POSFIXABLE(n)) return INT2FIX(n);</div><div class='add'>+    return uint2big(n);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define BNEG(b) (RSHIFT(((BDIGIT*)b)[QUAD_SIZE/SIZEOF_BDIGITS-1],BITSPERDIG-1) != 0)</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='del'>-rb_quad_unpack(buf, sign)</div><div class='del'>-    const char *buf;</div><div class='del'>-    int sign;</div><div class='add'>+int2inum(n)</div><div class='add'>+    int n;</div><div class='ctx'> {</div><div class='del'>-    VALUE big = bignew(QUAD_SIZE/SIZEOF_BDIGITS, 1);</div><div class='del'>-</div><div class='del'>-    memcpy((char*)BDIGITS(big), buf, QUAD_SIZE);</div><div class='del'>-    if (sign &amp;&amp; BNEG(buf)) {</div><div class='del'>-	long len = QUAD_SIZE;</div><div class='del'>-	char *tmp = (char*)BDIGITS(big);</div><div class='del'>-</div><div class='del'>-	RBIGNUM(big)-&gt;sign = 0;</div><div class='del'>-	while (len--) {</div><div class='del'>-	    *tmp = ~*tmp;</div><div class='del'>-	    tmp++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return bignorm(big);</div><div class='add'>+    if (FIXABLE(n)) return INT2FIX(n);</div><div class='add'>+    return int2big(n);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='del'>-rb_cstr_to_inum(str, base, badcheck)</div><div class='del'>-    const char *str;</div><div class='add'>+str2inum(str, base)</div><div class='add'>+    char *str;</div><div class='ctx'>     int base;</div><div class='del'>-    int badcheck;</div><div class='ctx'> {</div><div class='del'>-    const char *s = str;</div><div class='del'>-    char *end;</div><div class='del'>-    char sign = 1, nondigit = 0;</div><div class='del'>-    int c;</div><div class='del'>-    BDIGIT_DBL num;</div><div class='del'>-    long len, blen = 1;</div><div class='del'>-    long i;</div><div class='add'>+    char sign = 1, c;</div><div class='add'>+    unsigned long num;</div><div class='add'>+    UINT len, blen = 1, i;</div><div class='ctx'>     VALUE z;</div><div class='del'>-    BDIGIT *zds;</div><div class='del'>-</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='del'>-    if (!str) {</div><div class='del'>-	if (badcheck) goto bad;</div><div class='del'>-	return INT2FIX(0);</div><div class='del'>-    }</div><div class='del'>-    if (badcheck) {</div><div class='del'>-	while (ISSPACE(*str)) str++;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	while (ISSPACE(*str) || *str == '_') str++;</div><div class='del'>-    }</div><div class='add'>+    USHORT *zds;</div><div class='ctx'> </div><div class='del'>-    if (str[0] == '+') {</div><div class='del'>-	str++;</div><div class='del'>-    }</div><div class='del'>-    else if (str[0] == '-') {</div><div class='add'>+    while (isspace(*str)) str++;</div><div class='add'>+    if (*str == '-') {</div><div class='ctx'> 	str++;</div><div class='ctx'> 	sign = 0;</div><div class='ctx'>     }</div><div class='del'>-    if (str[0] == '+' || str[0] == '-') {</div><div class='del'>-	if (badcheck) goto bad;</div><div class='del'>-	return INT2FIX(0);</div><div class='del'>-    }</div><div class='del'>-    if (base &lt;= 0) {</div><div class='del'>-	if (str[0] == '0') {</div><div class='del'>-	    switch (str[1]) {</div><div class='del'>-	      case 'x': case 'X':</div><div class='add'>+    if (base == 0) {</div><div class='add'>+	if (*str == '0') {</div><div class='add'>+	    str++;</div><div class='add'>+	    if (*str == 'x' || *str == 'X') {</div><div class='add'>+		str++;</div><div class='ctx'> 		base = 16;</div><div class='del'>-		break;</div><div class='del'>-	      case 'b': case 'B':</div><div class='del'>-		base = 2;</div><div class='del'>-		break;</div><div class='del'>-	      case 'o': case 'O':</div><div class='del'>-		base = 8;</div><div class='del'>-		break;</div><div class='del'>-	      case 'd': case 'D':</div><div class='del'>-		base = 10;</div><div class='del'>-		break;</div><div class='del'>-	      default:</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='ctx'> 		base = 8;</div><div class='ctx'> 	    }</div><div class='del'>-	}</div><div class='del'>-	else if (base &lt; -1) {</div><div class='del'>-	    base = -base;</div><div class='add'>+	    if (*str == '\0') return INT2FIX(0);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    base = 10;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    switch (base) {</div><div class='del'>-      case 2:</div><div class='del'>-	len = 1;</div><div class='del'>-	if (str[0] == '0' &amp;&amp; (str[1] == 'b'||str[1] == 'B')) {</div><div class='del'>-	    str += 2;</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-      case 3:</div><div class='del'>-	len = 2;</div><div class='del'>-	break;</div><div class='del'>-      case 8:</div><div class='del'>-	if (str[0] == '0' &amp;&amp; (str[1] == 'o'||str[1] == 'O')) {</div><div class='del'>-	    str += 2;</div><div class='del'>-	}</div><div class='del'>-      case 4: case 5: case 6: case 7:</div><div class='del'>-	len = 3;</div><div class='del'>-	break;</div><div class='del'>-      case 10:</div><div class='del'>-	if (str[0] == '0' &amp;&amp; (str[1] == 'd'||str[1] == 'D')) {</div><div class='del'>-	    str += 2;</div><div class='del'>-	}</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='del'>-	break;</div><div class='del'>-      case 16:</div><div class='del'>-	len = 4;</div><div class='del'>-	if (str[0] == '0' &amp;&amp; (str[1] == 'x'||str[1] == 'X')) {</div><div class='del'>-	    str += 2;</div><div class='del'>-	}</div><div class='del'>-	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='del'>-    }</div><div class='del'>-    if (*str == '0') {		/* squeeze preceeding 0s */</div><div class='del'>-	int us = 0;</div><div class='del'>-	while ((c = *++str) == '0' || c == '_') {</div><div class='del'>-	    if (c == '_') {</div><div class='del'>-		if (++us &gt;= 2)</div><div class='del'>-		    break;</div><div class='del'>-	    } else</div><div class='del'>-		us = 0;</div><div class='del'>-	}</div><div class='del'>-	if (!(c = *str) || ISSPACE(c)) --str;</div><div class='add'>+    len = strlen(str);</div><div class='add'>+    if (base == 8) {</div><div class='add'>+	len = 3*len*sizeof(char);</div><div class='ctx'>     }</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'>+    else {			/* base == 10 or 16 */</div><div class='add'>+	len = 4*len*sizeof(char);</div><div class='ctx'>     }</div><div class='del'>-    len *= strlen(str)*sizeof(char);</div><div class='ctx'> </div><div class='ctx'>     if (len &lt;= (sizeof(VALUE)*CHAR_BIT)) {</div><div class='del'>-	unsigned long val = strtoul((char*)str, &amp;end, base);</div><div class='add'>+	int result = strtoul(str, Qnil, base);</div><div class='ctx'> </div><div class='del'>-	if (*end == '_') goto bigparse;</div><div class='del'>-	if (badcheck) {</div><div class='del'>-	    if (end == str) goto bad; /* no number */</div><div class='del'>-	    while (*end &amp;&amp; ISSPACE(*end)) end++;</div><div class='del'>-	    if (*end) goto bad;	      /* trailing garbage */</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (POSFIXABLE(val)) {</div><div class='del'>-	    if (sign) return LONG2FIX(val);</div><div class='del'>-	    else {</div><div class='del'>-		long result = -(long)val;</div><div class='del'>-		return LONG2FIX(result);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    VALUE big = rb_uint2big(val);</div><div class='del'>-	    RBIGNUM(big)-&gt;sign = sign;</div><div class='del'>-	    return bignorm(big);</div><div class='del'>-	}</div><div class='add'>+	if (!sign) result = -result;</div><div class='add'>+	if (FIXABLE(result)) return INT2FIX(result);</div><div class='add'>+	return int2big(result);</div><div class='ctx'>     }</div><div class='del'>-  bigparse:</div><div class='del'>-    len = (len/BITSPERDIG)+1;</div><div class='del'>-    if (badcheck &amp;&amp; *str == '_') goto bad;</div><div class='add'>+    len = (len/(sizeof(USHORT)*CHAR_BIT))+1;</div><div class='ctx'> </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='del'>-	    if (nondigit) {</div><div class='del'>-		if (badcheck) goto bad;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	    nondigit = c;</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	else if ((c = conv_digit(c)) &lt; 0) {</div><div class='add'>+    while (c = *str++) {</div><div class='add'>+	switch (c) {</div><div class='add'>+	  case '0': case '1': case '2': case '3': case '4':</div><div class='add'>+	  case '5': case '6': case '7': case '8': case '9':</div><div class='add'>+	    c = c - '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 = c - 'a' + 10;</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 = c - 'A' + 10;</div><div class='add'>+	    break;</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='ctx'> 	    while (i&lt;blen) {</div><div class='del'>-		num += (BDIGIT_DBL)zds[i]*base;</div><div class='add'>+		num += zds[i]*base;</div><div class='ctx'> 		zds[i++] = BIGLO(num);</div><div class='ctx'> 		num = BIGDN(num);</div><div class='ctx'> 	    }</div><div class='hunk'>@@ -539,904 +246,401 @@ rb_cstr_to_inum(str, base, badcheck)</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    if (badcheck) {</div><div class='del'>-	str--;</div><div class='del'>-	if (s+1 &lt; str &amp;&amp; str[-1] == '_') goto bad;</div><div class='del'>-	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='del'>-    }</div><div class='del'>-</div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static char hexmap[] = "0123456789abcdef";</div><div class='ctx'> VALUE</div><div class='del'>-rb_str_to_inum(str, base, badcheck)</div><div class='del'>-    VALUE str;</div><div class='add'>+big2str(x, base)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'>     int base;</div><div class='del'>-    int badcheck;</div><div class='ctx'> {</div><div class='del'>-    char *s;</div><div class='del'>-    long len;</div><div class='add'>+    VALUE t;</div><div class='add'>+    USHORT *ds;</div><div class='add'>+    UINT i, j, hbase;</div><div class='add'>+    VALUE ss;</div><div class='add'>+    char *s, c;</div><div class='ctx'> </div><div class='del'>-    StringValue(str);</div><div class='del'>-    if (badcheck) {</div><div class='del'>-	s = StringValueCStr(str);</div><div class='add'>+    if (FIXNUM_P(x)) {</div><div class='add'>+	return fix2str(x, base);</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	s = RSTRING(str)-&gt;ptr;</div><div class='add'>+    i = x-&gt;len;</div><div class='add'>+    if (x-&gt;len == 0) return str_new2("0");</div><div class='add'>+    if (base == 10) {</div><div class='add'>+	j = (sizeof(USHORT)/sizeof(char)*CHAR_BIT*i*241L)/800+2;</div><div class='add'>+	hbase = 10000;</div><div class='ctx'>     }</div><div class='del'>-    if (s) {</div><div class='del'>-	len = RSTRING(str)-&gt;len;</div><div class='del'>-	if (s[len]) {		/* no sentinel somehow */</div><div class='del'>-	    char *p = ALLOCA_N(char, len+1);</div><div class='del'>-</div><div class='del'>-	    MEMCPY(p, s, char, len);</div><div class='del'>-	    p[len] = '\0';</div><div class='del'>-	    s = p;</div><div class='del'>-	}</div><div class='add'>+    else if (base == 16) {</div><div class='add'>+	j = (sizeof(USHORT)/sizeof(char)*CHAR_BIT*i)/4+2;</div><div class='add'>+	hbase = 0x10000;</div><div class='ctx'>     }</div><div class='del'>-    return rb_cstr_to_inum(s, base, badcheck);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if HAVE_LONG_LONG</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_ull2big(n)</div><div class='del'>-    unsigned LONG_LONG n;</div><div class='del'>-{</div><div class='del'>-    BDIGIT_DBL num = n;</div><div class='del'>-    long i = 0;</div><div class='del'>-    BDIGIT *digits;</div><div class='del'>-    VALUE big;</div><div class='del'>-</div><div class='del'>-    big = bignew(DIGSPERLL, 1);</div><div class='del'>-    digits = BDIGITS(big);</div><div class='del'>-    while (i &lt; DIGSPERLL) {</div><div class='del'>-	digits[i++] = BIGLO(num);</div><div class='del'>-	num = BIGDN(num);</div><div class='add'>+    else if (base == 8) {</div><div class='add'>+	j = (sizeof(USHORT)/sizeof(char)*CHAR_BIT*i)+2;</div><div class='add'>+	hbase = 010000;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    i = DIGSPERLL;</div><div class='del'>-    while (i-- &amp;&amp; !digits[i]) ;</div><div class='del'>-    RBIGNUM(big)-&gt;len = i+1;</div><div class='del'>-    return big;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_ll2big(n)</div><div class='del'>-    LONG_LONG n;</div><div class='del'>-{</div><div class='del'>-    long neg = 0;</div><div class='del'>-    VALUE big;</div><div class='del'>-</div><div class='del'>-    if (n &lt; 0) {</div><div class='del'>-	n = -n;</div><div class='del'>-	neg = 1;</div><div class='add'>+    else if (base == 2) {</div><div class='add'>+	j = (sizeof(USHORT)*CHAR_BIT*i)+2;</div><div class='add'>+	hbase = 020;</div><div class='ctx'>     }</div><div class='del'>-    big = rb_ull2big(n);</div><div class='del'>-    if (neg) {</div><div class='del'>-	RBIGNUM(big)-&gt;sign = 0;</div><div class='add'>+    else {</div><div class='add'>+	Fail("bignum cannot treat base %d", base);</div><div class='ctx'>     }</div><div class='del'>-    return big;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_ull2inum(n)</div><div class='del'>-    unsigned LONG_LONG n;</div><div class='del'>-{</div><div class='del'>-    if (POSFIXABLE(n)) return LONG2FIX(n);</div><div class='del'>-    return rb_ull2big(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_ll2inum(n)</div><div class='del'>-    LONG_LONG n;</div><div class='del'>-{</div><div class='del'>-    if (FIXABLE(n)) return LONG2FIX(n);</div><div class='del'>-    return rb_ll2big(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif  /* HAVE_LONG_LONG */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_cstr2inum(str, base)</div><div class='del'>-    const char *str;</div><div class='del'>-    int base;</div><div class='del'>-{</div><div class='del'>-    return rb_cstr_to_inum(str, base, base==0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_str2inum(str, base)</div><div class='del'>-    VALUE str;</div><div class='del'>-    int base;</div><div class='del'>-{</div><div class='del'>-    return rb_str_to_inum(str, base, base==0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";</div><div class='del'>-VALUE</div><div class='del'>-rb_big2str0(x, base, trim)</div><div class='del'>-    VALUE x;</div><div class='del'>-    int base;</div><div class='del'>-    int trim;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE t;</div><div class='del'>-    BDIGIT *ds;</div><div class='del'>-    long i, j, hbase;</div><div class='del'>-    VALUE ss;</div><div class='del'>-    char *s;</div><div class='del'>-</div><div class='del'>-    if (FIXNUM_P(x)) {</div><div class='del'>-	return rb_fix2str(x, base);</div><div class='del'>-    }</div><div class='del'>-    i = RBIGNUM(x)-&gt;len;</div><div class='del'>-    if (BIGZEROP(x)) {</div><div class='del'>-	return rb_str_new2("0");</div><div class='del'>-    }</div><div class='del'>-    if (i &gt;= LONG_MAX/SIZEOF_BDIGITS/CHAR_BIT) {</div><div class='del'>-	rb_raise(rb_eRangeError, "bignum too big to convert into `string'");</div><div class='del'>-    }</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 * 53L / 84 + 1;</div><div class='del'>-	break;</div><div class='del'>-      case 4: case 5: case 6: case 7:</div><div class='del'>-	j = (j + 1) / 2;</div><div class='del'>-	break;</div><div class='del'>-      case 8: case 9:</div><div class='del'>-	j = (j + 2) / 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 * 28L / 93 + 1;</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 = (j + 3) / 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 = (j + 4) / 5;</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	rb_raise(rb_eArgError, "illegal radix %d", base);</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    j++;			/* space for sign */</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='del'>-</div><div class='del'>-    t = rb_big_clone(x);</div><div class='add'>+    t = Fbig_clone(x);</div><div class='ctx'>     ds = BDIGITS(t);</div><div class='del'>-    ss = rb_str_new(0, j+1);</div><div class='add'>+    ss = str_new(0, j);</div><div class='ctx'>     s = RSTRING(ss)-&gt;ptr;</div><div class='ctx'> </div><div class='del'>-    s[0] = RBIGNUM(x)-&gt;sign ? '+' : '-';</div><div class='del'>-    while (i &amp;&amp; j &gt; 1) {</div><div class='del'>-	long k = i;</div><div class='del'>-	BDIGIT_DBL num = 0;</div><div class='del'>-</div><div class='add'>+    s[0] = x-&gt;sign ? '+' : '-';</div><div class='add'>+    while (i &amp;&amp; j) {</div><div class='add'>+	int k = i;</div><div class='add'>+	unsigned long num = 0;</div><div class='ctx'> 	while (k--) {</div><div class='ctx'> 	    num = BIGUP(num) + ds[k];</div><div class='del'>-	    ds[k] = (BDIGIT)(num / hbase);</div><div class='add'>+	    ds[k] = num / hbase;</div><div class='ctx'> 	    num %= hbase;</div><div class='ctx'> 	}</div><div class='del'>-	if (trim &amp;&amp; ds[i-1] == 0) i--;</div><div class='del'>-	k = SIZEOF_BDIGITS;</div><div class='add'>+	if (ds[i-1] == 0) i--;</div><div class='add'>+	k = 4;</div><div class='ctx'> 	while (k--) {</div><div class='del'>-	    s[--j] = ruby_digitmap[num % base];</div><div class='add'>+	    c = num % base;</div><div class='add'>+	    s[--j] = hexmap[(int)c];</div><div class='ctx'> 	    num /= base;</div><div class='del'>-	    if (!trim &amp;&amp; j &lt;= 1) break;</div><div class='del'>-	    if (trim &amp;&amp; i == 0 &amp;&amp; num == 0) break;</div><div class='add'>+	    if (i == 0 &amp;&amp; num == 0) break;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    if (trim) {while (s[j] == '0') j++;}</div><div class='del'>-    i = RSTRING(ss)-&gt;len - j;</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	memmove(s, s+j, i);</div><div class='del'>-	RSTRING(ss)-&gt;len = i-1;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	memmove(s+1, s+j, i);</div><div class='del'>-	RSTRING(ss)-&gt;len = i;</div><div class='del'>-    }</div><div class='add'>+    while (s[j] == '0') j++;</div><div class='add'>+    RSTRING(ss)-&gt;len -= x-&gt;sign?j:j-1;</div><div class='add'>+    memmove(x-&gt;sign?s:s+1, s+j, RSTRING(ss)-&gt;len);</div><div class='ctx'>     s[RSTRING(ss)-&gt;len] = '\0';</div><div class='ctx'> </div><div class='ctx'>     return ss;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_big2str(VALUE x, int base)</div><div class='del'>-{</div><div class='del'>-    return rb_big2str0(x, base, Qtrue);</div><div class='del'>-}</div><div class='del'>-</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='del'>-rb_big_to_s(argc, argv, x)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    VALUE b;</div><div class='del'>-    int base;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;b);</div><div class='del'>-    if (argc == 0) base = 10;</div><div class='del'>-    else base = NUM2INT(b);</div><div class='del'>-    return rb_big2str(x, base);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static unsigned long</div><div class='del'>-big2ulong(x, type)</div><div class='del'>-    VALUE x;</div><div class='del'>-    char *type;</div><div class='del'>-{</div><div class='del'>-    long len = RBIGNUM(x)-&gt;len;</div><div class='del'>-    BDIGIT_DBL num;</div><div class='del'>-    BDIGIT *ds;</div><div class='del'>-</div><div class='del'>-    if (len &gt; SIZEOF_LONG/SIZEOF_BDIGITS)</div><div class='del'>-	rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);</div><div class='del'>-    ds = BDIGITS(x);</div><div class='del'>-    num = 0;</div><div class='del'>-    while (len--) {</div><div class='del'>-	num = BIGUP(num);</div><div class='del'>-	num += ds[len];</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='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='del'>-rb_big2ulong(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'>-</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='del'>-    return num;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-rb_big2long(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+Fbig_to_s(x)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    unsigned long num = big2ulong(x, "long");</div><div class='del'>-</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) return -(long)num;</div><div class='del'>-    return num;</div><div class='add'>+    return big2str(x, 10);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if HAVE_LONG_LONG</div><div class='del'>-</div><div class='del'>-static unsigned LONG_LONG</div><div class='del'>-big2ull(x, type)</div><div class='del'>-    VALUE x;</div><div class='del'>-    char *type;</div><div class='add'>+int</div><div class='add'>+big2int(x)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    long len = RBIGNUM(x)-&gt;len;</div><div class='del'>-    BDIGIT_DBL num;</div><div class='del'>-    BDIGIT *ds;</div><div class='add'>+    unsigned long num;</div><div class='add'>+    UINT len = x-&gt;len;</div><div class='add'>+    USHORT *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 `%s'", type);</div><div class='add'>+    if (len &gt; sizeof(long)/sizeof(USHORT))</div><div class='add'>+	Fail("Bignum too big to convert into fixnum");</div><div class='ctx'>     ds = BDIGITS(x);</div><div class='ctx'>     num = 0;</div><div class='ctx'>     while (len--) {</div><div class='ctx'> 	num = BIGUP(num);</div><div class='ctx'> 	num += ds[len];</div><div class='ctx'>     }</div><div class='add'>+    if (!x-&gt;sign) return -num;</div><div class='ctx'>     return num;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-unsigned LONG_LONG</div><div class='del'>-rb_big2ull(x)</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    unsigned LONG_LONG num = big2ull(x, "unsigned long long");</div><div class='del'>-</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) return -num;</div><div class='del'>-    return num;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-LONG_LONG</div><div class='del'>-rb_big2ll(x)</div><div class='add'>+VALUE</div><div class='add'>+Fbig_to_i(x)</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='del'>-    unsigned LONG_LONG num = big2ull(x, "long long");</div><div class='add'>+    int v = big2int(x);</div><div class='ctx'> </div><div class='del'>-    if ((LONG_LONG)num &lt; 0 &amp;&amp; (RBIGNUM(x)-&gt;sign</div><div class='del'>-			       || (LONG_LONG)num != LLONG_MIN)) {</div><div class='del'>-	rb_raise(rb_eRangeError, "bignum too big to convert into `long long'");</div><div class='add'>+    if (FIXABLE(v)) {</div><div class='add'>+	return INT2FIX(v);</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) return -(LONG_LONG)num;</div><div class='del'>-    return num;</div><div class='add'>+    return x;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#endif  /* HAVE_LONG_LONG */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='add'>+VALUE</div><div class='ctx'> dbl2big(d)</div><div class='ctx'>     double d;</div><div class='ctx'> {</div><div class='del'>-    long i = 0;</div><div class='del'>-    BDIGIT c;</div><div class='del'>-    BDIGIT *digits;</div><div class='add'>+    UINT i = 0;</div><div class='add'>+    long c;</div><div class='add'>+    USHORT *digits;</div><div class='ctx'>     VALUE z;</div><div class='ctx'>     double u = (d &lt; 0)?-d:d;</div><div class='ctx'> </div><div class='del'>-    if (isinf(d)) {</div><div class='del'>-	rb_raise(rb_eFloatDomainError, d &lt; 0 ? "-Infinity" : "Infinity");</div><div class='del'>-    }</div><div class='del'>-    if (isnan(d)) {</div><div class='del'>-	rb_raise(rb_eFloatDomainError, "NaN");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while (!POSFIXABLE(u) || 0 != (long)u) {</div><div class='del'>-	u /= (double)(BIGRAD);</div><div class='add'>+    while (0 != (long)u) {</div><div class='add'>+	u /= BIGRAD;</div><div class='ctx'> 	i++;</div><div class='ctx'>     }</div><div class='ctx'>     z = bignew(i, d&gt;=0);</div><div class='ctx'>     digits = BDIGITS(z);</div><div class='ctx'>     while (i--) {</div><div class='ctx'> 	u *= BIGRAD;</div><div class='del'>-	c = (BDIGIT)u;</div><div class='add'>+	c = (long)u;</div><div class='ctx'> 	u -= c;</div><div class='ctx'> 	digits[i] = c;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return z;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dbl2big(d)</div><div class='del'>-    double d;</div><div class='del'>-{</div><div class='del'>-    return bignorm(dbl2big(d));</div><div class='add'>+    return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static double</div><div class='add'>+double</div><div class='ctx'> big2dbl(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='ctx'>     double d = 0.0;</div><div class='del'>-    long i = RBIGNUM(x)-&gt;len;</div><div class='del'>-    BDIGIT *ds = BDIGITS(x);</div><div class='add'>+    UINT i = x-&gt;len;</div><div class='add'>+    USHORT *ds = BDIGITS(x);</div><div class='ctx'> </div><div class='del'>-    while (i--) {</div><div class='del'>-	d = ds[i] + BIGRAD*d;</div><div class='del'>-    }</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) d = -d;</div><div class='add'>+    while (i--) d = ds[i] + BIGRAD*d;</div><div class='add'>+    if (!x-&gt;sign) d = -d;</div><div class='ctx'>     return d;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-double</div><div class='del'>-rb_big2dbl(x)</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    double d = big2dbl(x);</div><div class='del'>-</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='del'>-    return d;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_big_to_f(x)</div><div class='add'>+VALUE</div><div class='add'>+Fbig_to_f(x)</div><div class='ctx'>     VALUE x;</div><div class='ctx'> {</div><div class='del'>-    return rb_float_new(rb_big2dbl(x));</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_big_cmp(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    long xlen = RBIGNUM(x)-&gt;len;</div><div class='del'>-</div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_FLOAT:</div><div class='del'>-	return rb_dbl_cmp(rb_big2dbl(x), RFLOAT(y)-&gt;value);</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_cmp(x, y);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign &gt; RBIGNUM(y)-&gt;sign) return INT2FIX(1);</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign &lt; RBIGNUM(y)-&gt;sign) return INT2FIX(-1);</div><div class='del'>-    if (xlen &lt; RBIGNUM(y)-&gt;len)</div><div class='del'>-	return (RBIGNUM(x)-&gt;sign) ? INT2FIX(-1) : INT2FIX(1);</div><div class='del'>-    if (xlen &gt; RBIGNUM(y)-&gt;len)</div><div class='del'>-	return (RBIGNUM(x)-&gt;sign) ? INT2FIX(1) : INT2FIX(-1);</div><div class='del'>-</div><div class='del'>-    while(xlen-- &amp;&amp; (BDIGITS(x)[xlen]==BDIGITS(y)[xlen]));</div><div class='del'>-    if (-1 == xlen) return INT2FIX(0);</div><div class='del'>-    return (BDIGITS(x)[xlen] &gt; BDIGITS(y)[xlen]) ?</div><div class='del'>-	(RBIGNUM(x)-&gt;sign ? INT2FIX(1) : INT2FIX(-1)) :</div><div class='del'>-	    (RBIGNUM(x)-&gt;sign ? INT2FIX(-1) : INT2FIX(1));</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_big_eq(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	break;</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	break;</div><div class='del'>-      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='del'>-      default:</div><div class='del'>-	return rb_equal(y, x);</div><div class='del'>-    }</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign != RBIGNUM(y)-&gt;sign) return Qfalse;</div><div class='del'>-    if (RBIGNUM(x)-&gt;len != RBIGNUM(y)-&gt;len) return Qfalse;</div><div class='del'>-    if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,RBIGNUM(y)-&gt;len) != 0) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='add'>+    return float_new(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.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='del'>-rb_big_eql(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    if (TYPE(y) != T_BIGNUM) return Qfalse;</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign != RBIGNUM(y)-&gt;sign) return Qfalse;</div><div class='del'>-    if (RBIGNUM(x)-&gt;len != RBIGNUM(y)-&gt;len) return Qfalse;</div><div class='del'>-    if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,RBIGNUM(y)-&gt;len) != 0) return Qfalse;</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'>- *    -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='del'>-static VALUE</div><div class='del'>-rb_big_uminus(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+Fbig_uminus(x)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    VALUE z = rb_big_clone(x);</div><div class='add'>+    VALUE z = Fbig_clone(x);</div><div class='ctx'> </div><div class='del'>-    RBIGNUM(z)-&gt;sign = !RBIGNUM(x)-&gt;sign;</div><div class='add'>+    RBIGNUM(z)-&gt;sign = !x-&gt;sign;</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  =&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='del'>-rb_big_neg(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+bigadd(x, y, sign)</div><div class='add'>+    struct RBignum *x, *y;</div><div class='add'>+    char sign;</div><div class='ctx'> {</div><div class='del'>-    VALUE z = rb_big_clone(x);</div><div class='del'>-    long i;</div><div class='del'>-    BDIGIT *ds;</div><div class='del'>-</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='del'>-    while (i--) ds[i] = ~ds[i];</div><div class='del'>-    RBIGNUM(z)-&gt;sign = !RBIGNUM(z)-&gt;sign;</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign) get2comp(z);</div><div class='add'>+    struct RBignum *z;</div><div class='add'>+    USHORT *zds;</div><div class='add'>+    long num;</div><div class='add'>+    UINT i, len;</div><div class='ctx'> </div><div class='del'>-    return bignorm(z);</div><div class='del'>-}</div><div class='add'>+    len = MAX(x-&gt;len, y-&gt;len) + 1;</div><div class='add'>+    z = (struct RBignum*)bignew(len, sign==y-&gt;sign);</div><div class='add'>+    zds = BDIGITS(z);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-bigsub(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    VALUE z = 0;</div><div class='del'>-    BDIGIT *zds;</div><div class='del'>-    BDIGIT_DBL_SIGNED num;</div><div class='del'>-    long i = RBIGNUM(x)-&gt;len;</div><div class='del'>-</div><div class='del'>-    /* if x is larger than y, swap */</div><div class='del'>-    if (RBIGNUM(x)-&gt;len &lt; RBIGNUM(y)-&gt;len) {</div><div class='del'>-	z = x; x = y; y = z;	/* swap x y */</div><div class='del'>-    }</div><div class='del'>-    else if (RBIGNUM(x)-&gt;len == RBIGNUM(y)-&gt;len) {</div><div class='del'>-	while (i &gt; 0) {</div><div class='del'>-	    i--;</div><div class='del'>-	    if (BDIGITS(x)[i] &gt; BDIGITS(y)[i]) {</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	    if (BDIGITS(x)[i] &lt; BDIGITS(y)[i]) {</div><div class='del'>-		z = x; x = y; y = z;	/* swap x y */</div><div class='del'>-		break;</div><div class='add'>+    i = len;</div><div class='add'>+    while (i--) zds[i] = 0;</div><div class='add'>+    i = y-&gt;len;</div><div class='add'>+    while (i--) zds[i] = BDIGITS(y)[i];</div><div class='add'>+</div><div class='add'>+    i = 0; num = 0;</div><div class='add'>+    if (x-&gt;sign == z-&gt;sign) {</div><div class='add'>+	do {</div><div class='add'>+	    num += (long)zds[i] + BDIGITS(x)[i];</div><div class='add'>+	    zds[i++] = BIGLO(num);</div><div class='add'>+	    num = BIGDN(num);</div><div class='add'>+	} while (i &lt; x-&gt;len);</div><div class='add'>+	if (num) {</div><div class='add'>+	    while (i &lt; y-&gt;len) {</div><div class='add'>+		num += zds[i];</div><div class='add'>+		zds[i++] = BIGLO(num);</div><div class='add'>+		num = BIGDN(num);</div><div class='ctx'> 	    }</div><div class='add'>+	    BDIGITS(z)[i] = num;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    z = bignew(RBIGNUM(x)-&gt;len, z==0);</div><div class='del'>-    zds = BDIGITS(z);</div><div class='del'>-</div><div class='del'>-    for (i = 0, num = 0; i &lt; RBIGNUM(y)-&gt;len; i++) {</div><div class='del'>-	num += (BDIGIT_DBL_SIGNED)BDIGITS(x)[i] - BDIGITS(y)[i];</div><div class='del'>-	zds[i] = BIGLO(num);</div><div class='del'>-	num = BIGDN(num);</div><div class='del'>-    }</div><div class='del'>-    while (num &amp;&amp; i &lt; RBIGNUM(x)-&gt;len) {</div><div class='del'>-	num += BDIGITS(x)[i];</div><div class='del'>-	zds[i++] = BIGLO(num);</div><div class='del'>-	num = BIGDN(num);</div><div class='del'>-    }</div><div class='del'>-    while (i &lt; RBIGNUM(x)-&gt;len) {</div><div class='del'>-	zds[i] = BDIGITS(x)[i];</div><div class='del'>-	i++;</div><div class='add'>+    else {</div><div class='add'>+	do {</div><div class='add'>+	    num += (long)zds[i] - BDIGITS(x)[i];</div><div class='add'>+	    if (num &lt; 0) {</div><div class='add'>+		zds[i] = num + BIGRAD;</div><div class='add'>+		num = -1;</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='add'>+		zds[i] = BIGLO(num);</div><div class='add'>+		num = 0;</div><div class='add'>+	    }</div><div class='add'>+	} while (++i &lt; x-&gt;len);</div><div class='add'>+	if (num &amp;&amp; x-&gt;len == y-&gt;len) {</div><div class='add'>+	    num = 1; i = 0;</div><div class='add'>+	    z-&gt;sign = 1;</div><div class='add'>+	    do {</div><div class='add'>+		num += (BIGRAD-1) - zds[i];</div><div class='add'>+		zds[i++] = BIGLO(num);</div><div class='add'>+		num = BIGDN(num);</div><div class='add'>+	    } while (i &lt; y-&gt;len);</div><div class='add'>+	}</div><div class='add'>+	else while (i &lt; y-&gt;len) {</div><div class='add'>+	    num += zds[i];</div><div class='add'>+	    if (num &lt; 0) {</div><div class='add'>+		zds[i++] = num + BIGRAD;</div><div class='add'>+		num = -1;</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='add'>+		zds[i++] = BIGLO(num);</div><div class='add'>+		num = 0;</div><div class='add'>+	    }</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return z;</div><div class='add'>+    return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-bigadd(x, y, sign)</div><div class='add'>+VALUE</div><div class='add'>+Fbig_plus(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='del'>-    int sign;</div><div class='ctx'> {</div><div class='ctx'>     VALUE z;</div><div class='del'>-    BDIGIT_DBL num;</div><div class='del'>-    long i, len;</div><div class='ctx'> </div><div class='del'>-    sign = (sign == RBIGNUM(y)-&gt;sign);</div><div class='del'>-    if (RBIGNUM(x)-&gt;sign != sign) {</div><div class='del'>-	if (sign) return bigsub(y, x);</div><div class='del'>-	return bigsub(x, y);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RBIGNUM(x)-&gt;len &gt; RBIGNUM(y)-&gt;len) {</div><div class='del'>-	len = RBIGNUM(x)-&gt;len + 1;</div><div class='del'>-        z = x; x = y; y = z;</div><div class='del'>-    }</div><div class='add'>+    if (FIXNUM_P(y)) y = int2big(FIX2INT(y));</div><div class='ctx'>     else {</div><div class='del'>-	len = RBIGNUM(y)-&gt;len + 1;</div><div class='add'>+	Check_Type(x, T_BIGNUM);</div><div class='ctx'>     }</div><div class='del'>-    z = bignew(len, sign);</div><div class='del'>-</div><div class='del'>-    len = RBIGNUM(x)-&gt;len;</div><div class='del'>-    for (i = 0, num = 0; i &lt; len; i++) {</div><div class='del'>-	num += (BDIGIT_DBL)BDIGITS(x)[i] + BDIGITS(y)[i];</div><div class='del'>-	BDIGITS(z)[i] = BIGLO(num);</div><div class='del'>-	num = BIGDN(num);</div><div class='del'>-    }</div><div class='del'>-    len = RBIGNUM(y)-&gt;len;</div><div class='del'>-    while (num &amp;&amp; i &lt; len) {</div><div class='del'>-	num += BDIGITS(y)[i];</div><div class='del'>-	BDIGITS(z)[i++] = BIGLO(num);</div><div class='del'>-	num = BIGDN(num);</div><div class='del'>-    }</div><div class='del'>-    while (i &lt; len) {</div><div class='del'>-	BDIGITS(z)[i] = BDIGITS(y)[i];</div><div class='del'>-	i++;</div><div class='del'>-    }</div><div class='del'>-    BDIGITS(z)[i] = (BDIGIT)num;</div><div class='add'>+    z = bigadd(x, y, 1);</div><div class='ctx'> </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='del'>-rb_big_plus(x, y)</div><div class='add'>+Fbig_minus(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	/* fall through */</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	return bignorm(bigadd(x, y, 1));</div><div class='del'>-</div><div class='del'>-      case T_FLOAT:</div><div class='del'>-	return rb_float_new(rb_big2dbl(x) + RFLOAT(y)-&gt;value);</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='add'>+    if (FIXNUM_P(y)) y = int2big(FIX2INT(y));</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_big_minus(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	/* fall through */</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	return bignorm(bigadd(x, y, 0));</div><div class='del'>-</div><div class='del'>-      case T_FLOAT:</div><div class='del'>-	return rb_float_new(rb_big2dbl(x) - RFLOAT(y)-&gt;value);</div><div class='add'>+    x = bigadd(x, y, 0);</div><div class='ctx'> </div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='del'>-    }</div><div class='add'>+    return x;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_big_mul0(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='add'>+Fbig_mul(x, y)</div><div class='add'>+    struct RBignum *x, *y;</div><div class='ctx'> {</div><div class='del'>-    long i, j;</div><div class='del'>-    BDIGIT_DBL n = 0;</div><div class='add'>+    UINT i = 0, j;</div><div class='add'>+    unsigned long n = 0;</div><div class='ctx'>     VALUE z;</div><div class='del'>-    BDIGIT *zds;</div><div class='del'>-</div><div class='del'>-    if (FIXNUM_P(x)) x = rb_int2big(FIX2LONG(x));</div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	break;</div><div class='add'>+    USHORT *zds;</div><div class='ctx'> </div><div class='del'>-      case T_FLOAT:</div><div class='del'>-	return rb_float_new(rb_big2dbl(x) * RFLOAT(y)-&gt;value);</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='add'>+    if (FIXNUM_P(x)) x = (struct RBignum*)int2big(FIX2INT(x));</div><div class='add'>+    if (FIXNUM_P(y)) y = (struct RBignum*)int2big(FIX2INT(y));</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    j = RBIGNUM(x)-&gt;len + RBIGNUM(y)-&gt;len + 1;</div><div class='del'>-    z = bignew(j, RBIGNUM(x)-&gt;sign==RBIGNUM(y)-&gt;sign);</div><div class='add'>+    j = x-&gt;len + y-&gt;len + 1;</div><div class='add'>+    z = bignew(j, x-&gt;sign==y-&gt;sign);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'>     while (j--) zds[j] = 0;</div><div class='del'>-    for (i = 0; i &lt; RBIGNUM(x)-&gt;len; i++) {</div><div class='del'>-	BDIGIT_DBL dd = BDIGITS(x)[i];</div><div class='del'>-	if (dd == 0) continue;</div><div class='del'>-	n = 0;</div><div class='del'>-	for (j = 0; j &lt; RBIGNUM(y)-&gt;len; j++) {</div><div class='del'>-	    BDIGIT_DBL ee = n + (BDIGIT_DBL)dd * BDIGITS(y)[j];</div><div class='del'>-	    n = zds[i + j] + ee;</div><div class='del'>-	    if (ee) zds[i + j] = BIGLO(n);</div><div class='del'>-	    n = BIGDN(n);</div><div class='del'>-	}</div><div class='del'>-	if (n) {</div><div class='del'>-	    zds[i + j] = n;</div><div class='add'>+    do {</div><div class='add'>+	j = 0;</div><div class='add'>+	if (BDIGITS(x)[i]) {</div><div class='add'>+	    do {</div><div class='add'>+		n += zds[i + j] + ((unsigned long)BDIGITS(x)[i]*BDIGITS(y)[j]);</div><div class='add'>+		zds[i + j++] = BIGLO(n);</div><div class='add'>+		n = BIGDN(n);</div><div class='add'>+	    } while (j &lt; y-&gt;len);</div><div class='add'>+	    if (n) {</div><div class='add'>+		zds[i + j] = n;</div><div class='add'>+		n = 0;</div><div class='add'>+	    }</div><div class='ctx'> 	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return z;</div><div class='del'>-}</div><div class='del'>-</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='add'>+    } while (++i &lt; x-&gt;len);</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_big_mul(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    return bignorm(rb_big_mul0(x, y));</div><div class='add'>+    return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-bigdivrem(x, y, divp, modp)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-    VALUE *divp, *modp;</div><div class='add'>+bigdivmod(x, y, div, mod)</div><div class='add'>+    struct RBignum *x, *y;</div><div class='add'>+    VALUE *div, *mod;</div><div class='ctx'> {</div><div class='del'>-    long nx = RBIGNUM(x)-&gt;len, ny = RBIGNUM(y)-&gt;len;</div><div class='del'>-    long i, j;</div><div class='del'>-    VALUE yy, z;</div><div class='del'>-    BDIGIT *xds, *yds, *zds, *tds;</div><div class='del'>-    BDIGIT_DBL t2;</div><div class='del'>-    BDIGIT_DBL_SIGNED num;</div><div class='del'>-    BDIGIT dd, q;</div><div class='del'>-</div><div class='del'>-    if (BIGZEROP(y)) rb_num_zerodiv();</div><div class='add'>+    UINT nx = x-&gt;len, ny = y-&gt;len, i, j;</div><div class='add'>+    VALUE z;</div><div class='add'>+    USHORT *xds, *yds, *zds, *tds;</div><div class='add'>+    unsigned long t2;</div><div class='add'>+    long num;</div><div class='add'>+    USHORT dd, q;</div><div class='add'>+</div><div class='ctx'>     yds = BDIGITS(y);</div><div class='del'>-    if (nx &lt; ny || (nx == ny &amp;&amp; BDIGITS(x)[nx - 1] &lt; BDIGITS(y)[ny - 1])) {</div><div class='del'>-	if (divp) *divp = rb_int2big(0);</div><div class='del'>-	if (modp) *modp = x;</div><div class='add'>+    if (ny == 0 &amp;&amp; yds[0] == 0) Fail("divided by 0");</div><div class='add'>+    if (nx &lt; ny) {</div><div class='add'>+	if (div) *div = INT2FIX(0);</div><div class='add'>+	if (mod) *mod = bignorm(x);</div><div class='ctx'> 	return;</div><div class='ctx'>     }</div><div class='ctx'>     xds = BDIGITS(x);</div><div class='ctx'>     if (ny == 1) {</div><div class='ctx'> 	dd = yds[0];</div><div class='del'>-	z = rb_big_clone(x);</div><div class='add'>+	z = Fbig_clone(x);</div><div class='ctx'> 	zds = BDIGITS(z);</div><div class='ctx'> 	t2 = 0; i = nx;</div><div class='del'>-	while (i--) {</div><div class='add'>+	while(i--) {</div><div class='ctx'> 	    t2 = BIGUP(t2) + zds[i];</div><div class='del'>-	    zds[i] = (BDIGIT)(t2 / dd);</div><div class='add'>+	    zds[i] = t2 / dd;</div><div class='ctx'> 	    t2 %= dd;</div><div class='ctx'> 	}</div><div class='del'>-	RBIGNUM(z)-&gt;sign = RBIGNUM(x)-&gt;sign==RBIGNUM(y)-&gt;sign;</div><div class='del'>-	if (modp) {</div><div class='del'>-	    *modp = rb_uint2big((unsigned long)t2);</div><div class='del'>-	    RBIGNUM(*modp)-&gt;sign = RBIGNUM(x)-&gt;sign;</div><div class='add'>+	if (div) *div = bignorm(z);</div><div class='add'>+	if (mod) {</div><div class='add'>+	    if (!y-&gt;sign) t2 = -t2;</div><div class='add'>+	    *mod = FIX2INT(t2);</div><div class='ctx'> 	}</div><div class='del'>-	if (divp) *divp = z;</div><div class='ctx'> 	return;</div><div class='ctx'>     }</div><div class='del'>-    z = bignew(nx==ny?nx+2:nx+1, RBIGNUM(x)-&gt;sign==RBIGNUM(y)-&gt;sign);</div><div class='add'>+    z = bignew(nx==ny?nx+2:nx+1, x-&gt;sign==y-&gt;sign);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'>     if (nx==ny) zds[nx+1] = 0;</div><div class='ctx'>     while (!yds[ny-1]) ny--;</div><div class='del'>-</div><div class='del'>-    dd = 0;</div><div class='del'>-    q = yds[ny-1];</div><div class='del'>-    while ((q &amp; (1U&lt;&lt;(BITSPERDIG-1))) == 0) {</div><div class='del'>-	q &lt;&lt;= 1;</div><div class='del'>-	dd++;</div><div class='del'>-    }</div><div class='del'>-    if (dd) {</div><div class='del'>-	yy = rb_big_clone(y);</div><div class='del'>-	tds = BDIGITS(yy);</div><div class='add'>+    if ((dd = BIGRAD/(yds[ny-1]+1)) != 1) {</div><div class='add'>+	y = (struct RBignum*)Fbig_clone(y);</div><div class='add'>+	tds = BDIGITS(y);</div><div class='ctx'> 	j = 0;</div><div class='del'>-	t2 = 0;</div><div class='add'>+	num = 0;</div><div class='ctx'> 	while (j&lt;ny) {</div><div class='del'>-	    t2 += (BDIGIT_DBL)yds[j]&lt;&lt;dd;</div><div class='del'>-	    tds[j++] = BIGLO(t2);</div><div class='del'>-	    t2 = BIGDN(t2);</div><div class='add'>+	    num += (unsigned long)yds[j]*dd;</div><div class='add'>+	    tds[j++] = BIGLO(num);</div><div class='add'>+	    num = BIGDN(num);</div><div class='ctx'> 	}</div><div class='ctx'> 	yds = tds;</div><div class='ctx'> 	j = 0;</div><div class='del'>-	t2 = 0;</div><div class='add'>+	num = 0;</div><div class='ctx'> 	while (j&lt;nx) {</div><div class='del'>-	    t2 += (BDIGIT_DBL)xds[j]&lt;&lt;dd;</div><div class='del'>-	    zds[j++] = BIGLO(t2);</div><div class='del'>-	    t2 = BIGDN(t2);</div><div class='add'>+	    num += (unsigned long)xds[j]*dd;</div><div class='add'>+	    zds[j++] = BIGLO(num);</div><div class='add'>+	    num = BIGDN(num);</div><div class='ctx'> 	}</div><div class='del'>-	zds[j] = (BDIGIT)t2;</div><div class='add'>+	zds[j] = num;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='ctx'> 	zds[nx] = 0;</div><div class='ctx'> 	j = nx;</div><div class='ctx'> 	while (j--) zds[j] = xds[j];</div><div class='ctx'>     }</div><div class='del'>-</div><div class='ctx'>     j = nx==ny?nx+1:nx;</div><div class='ctx'>     do {</div><div class='ctx'> 	if (zds[j] ==  yds[ny-1]) q = BIGRAD-1;</div><div class='del'>-	else q = (BDIGIT)((BIGUP(zds[j]) + zds[j-1])/yds[ny-1]);</div><div class='add'>+	else q = (BIGUP(zds[j]) + zds[j-1])/yds[ny-1];</div><div class='ctx'> 	if (q) {</div><div class='ctx'> 	    i = 0; num = 0; t2 = 0;</div><div class='ctx'> 	    do {			/* multiply and subtract */</div><div class='del'>-		BDIGIT_DBL ee;</div><div class='del'>-		t2 += (BDIGIT_DBL)yds[i] * q;</div><div class='del'>-		ee = num - BIGLO(t2);</div><div class='del'>-		num = (BDIGIT_DBL)zds[j - ny + i] + ee;</div><div class='del'>-		if (ee) zds[j - ny + i] = BIGLO(num);</div><div class='del'>-		num = BIGDN(num);</div><div class='add'>+		t2 += (unsigned long)yds[i] * q;</div><div class='add'>+		num += zds[j - ny + i] - BIGLO(t2);</div><div class='add'>+		if (num &lt; 0) {</div><div class='add'>+		    zds[j - ny + i] = num + BIGRAD;</div><div class='add'>+		    num = -1;</div><div class='add'>+		}</div><div class='add'>+		else {</div><div class='add'>+		    zds[j - ny + i] = num;</div><div class='add'>+		    num = 0;</div><div class='add'>+		}</div><div class='ctx'> 		t2 = BIGDN(t2);</div><div class='ctx'> 	    } while (++i &lt; ny);</div><div class='del'>-	    num += zds[j - ny + i] - t2;/* borrow from high digit; don't update */</div><div class='add'>+	    num += zds[j - ny + i] - t2; /* borrow from high digit; don't update */</div><div class='ctx'> 	    while (num) {		/* "add back" required */</div><div class='ctx'> 		i = 0; num = 0; q--;</div><div class='ctx'> 		do {</div><div class='del'>-		    BDIGIT_DBL ee = num + yds[i];</div><div class='del'>-		    num = (BDIGIT_DBL)zds[j - ny + i] + ee;</div><div class='del'>-		    if (ee) zds[j - ny + i] = BIGLO(num);</div><div class='add'>+		    num += (long) zds[j - ny + i] + yds[i];</div><div class='add'>+		    zds[j - ny + i] = BIGLO(num);</div><div class='ctx'> 		    num = BIGDN(num);</div><div class='ctx'> 		} while (++i &lt; ny);</div><div class='ctx'> 		num--;</div><div class='hunk'>@@ -1444,421 +648,143 @@ bigdivrem(x, y, divp, modp)</div><div class='ctx'> 	}</div><div class='ctx'> 	zds[j] = q;</div><div class='ctx'>     } while (--j &gt;= ny);</div><div class='del'>-    if (divp) {			/* move quotient down in z */</div><div class='del'>-	*divp = rb_big_clone(z);</div><div class='del'>-	zds = BDIGITS(*divp);</div><div class='add'>+    if (div) {			/* move quotient down in z */</div><div class='add'>+	*div = Fbig_clone(z);</div><div class='add'>+	zds = BDIGITS(*div);</div><div class='ctx'> 	j = (nx==ny ? nx+2 : nx+1) - ny;</div><div class='ctx'> 	for (i = 0;i &lt; j;i++) zds[i] = zds[i+ny];</div><div class='del'>-	RBIGNUM(*divp)-&gt;len = i;</div><div class='add'>+	RBIGNUM(*div)-&gt;len = i;</div><div class='add'>+	*div = bignorm(*div);</div><div class='ctx'>     }</div><div class='del'>-    if (modp) {			/* normalize remainder */</div><div class='del'>-	*modp = rb_big_clone(z);</div><div class='del'>-	zds = BDIGITS(*modp);</div><div class='del'>-	while (--ny &amp;&amp; !zds[ny]); ++ny;</div><div class='add'>+    if (mod) {			/* just normalize remainder */</div><div class='add'>+	*mod = Fbig_clone(z);</div><div class='ctx'> 	if (dd) {</div><div class='add'>+	    zds = BDIGITS(*mod);</div><div class='ctx'> 	    t2 = 0; i = ny;</div><div class='ctx'> 	    while(i--) {</div><div class='del'>-		t2 = (t2 | zds[i]) &gt;&gt; dd;</div><div class='del'>-		q = zds[i];</div><div class='del'>-		zds[i] = BIGLO(t2);</div><div class='del'>-		t2 = BIGUP(q);</div><div class='add'>+		t2 = BIGUP(t2) + zds[i];</div><div class='add'>+		zds[i] = t2 / dd;</div><div class='add'>+		t2 %= dd;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='del'>-	RBIGNUM(*modp)-&gt;len = ny;</div><div class='del'>-	RBIGNUM(*modp)-&gt;sign = RBIGNUM(x)-&gt;sign;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-bigdivmod(x, y, divp, modp)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-    VALUE *divp, *modp;</div><div class='del'>-{</div><div class='del'>-    VALUE mod;</div><div class='del'>-</div><div class='del'>-    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='del'>-	if (divp) *divp = bigadd(*divp, rb_int2big(1), 0);</div><div class='del'>-	if (modp) *modp = bigadd(mod, y, 1);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (divp) *divp = *divp;</div><div class='del'>-	if (modp) *modp = mod;</div><div class='add'>+	RBIGNUM(*mod)-&gt;len = ny;</div><div class='add'>+	RBIGNUM(*mod)-&gt;sign = y-&gt;sign;</div><div class='add'>+	*mod = bignorm(*mod);</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='del'>-rb_big_div(x, y)</div><div class='add'>+Fbig_div(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='ctx'>     VALUE z;</div><div class='ctx'> </div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='add'>+    if (FIXNUM_P(y)) y = int2big(FIX2INT(y));</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='ctx'>     }</div><div class='del'>-    bigdivmod(x, y, &amp;z, 0);</div><div class='add'>+    bigdivmod(x, y, &amp;z, Qnil);</div><div class='ctx'> </div><div class='del'>-    return bignorm(z);</div><div class='add'>+    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'>- *     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='del'>-rb_big_modulo(x, y)</div><div class='add'>+Fbig_mod(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='ctx'>     VALUE z;</div><div class='ctx'> </div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='add'>+    if (FIXNUM_P(y)) y = int2big(FIX2INT(y));</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='ctx'>     }</div><div class='del'>-    bigdivmod(x, y, 0, &amp;z);</div><div class='add'>+    bigdivmod(x, y, Qnil, &amp;z);</div><div class='ctx'> </div><div class='del'>-    return bignorm(z);</div><div class='add'>+    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.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='del'>-rb_big_remainder(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    VALUE z;</div><div class='del'>-</div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='del'>-    }</div><div class='del'>-    bigdivrem(x, y, 0, &amp;z);</div><div class='del'>-</div><div class='del'>-    return bignorm(z);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-bdigbitsize(BDIGIT x)</div><div class='del'>-{</div><div class='del'>-    int size = 1;</div><div class='del'>-    int nb = BITSPERDIG / 2;</div><div class='del'>-    BDIGIT bits = (~0 &lt;&lt; nb);</div><div class='del'>-</div><div class='del'>-    if (!x) return 0;</div><div class='del'>-    while (x &gt; 1) {</div><div class='del'>-	if (x &amp; bits) {</div><div class='del'>-	    size += nb;</div><div class='del'>-	    x &gt;&gt;= nb;</div><div class='del'>-	}</div><div class='del'>-	x &amp;= ~bits;</div><div class='del'>-	nb /= 2;</div><div class='del'>-	bits &gt;&gt;= nb;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return size;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE big_lshift _((VALUE, unsigned long));</div><div class='del'>-static VALUE big_rshift _((VALUE, unsigned long));</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='del'>-VALUE</div><div class='del'>-rb_big_divmod(x, y)</div><div class='add'>+Fbig_divmod(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='ctx'>     VALUE div, mod;</div><div class='ctx'> </div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='add'>+    if (FIXNUM_P(y)) y = int2big(FIX2INT(y));</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='ctx'>     }</div><div class='ctx'>     bigdivmod(x, y, &amp;div, &amp;mod);</div><div class='ctx'> </div><div class='del'>-    return rb_assoc_new(bignorm(div), bignorm(mod));</div><div class='add'>+    return assoc_new(div, 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'>- *     big.fdiv(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='del'>-static VALUE</div><div class='del'>-rb_big_quo(x, y)</div><div class='add'>+VALUE</div><div class='add'>+Fbig_pow(x, y)</div><div class='ctx'>     VALUE x, y;</div><div class='ctx'> {</div><div class='del'>-    double dx = big2dbl(x);</div><div class='del'>-    double dy;</div><div class='del'>-</div><div class='del'>-    if (isinf(dx)) {</div><div class='del'>-#define DBL_BIGDIG ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG)</div><div class='del'>-	VALUE z;</div><div class='del'>-	int ex, ey;</div><div class='del'>-</div><div class='del'>-	ex = (RBIGNUM(bigtrunc(x))-&gt;len - 1) * BITSPERDIG;</div><div class='del'>-	ex += bdigbitsize(BDIGITS(x)[RBIGNUM(x)-&gt;len - 1]);</div><div class='del'>-	ex -= 2 * DBL_BIGDIG * BITSPERDIG;</div><div class='del'>-	if (ex) x = big_shift(x, ex);</div><div class='del'>-</div><div class='del'>-	switch (TYPE(y)) {</div><div class='del'>-	  case T_FIXNUM:</div><div class='del'>-	    y = rb_int2big(FIX2LONG(y));</div><div class='del'>-	  case T_BIGNUM: {</div><div class='del'>-	    ey = (RBIGNUM(bigtrunc(y))-&gt;len - 1) * BITSPERDIG;</div><div class='del'>-	    ey += bdigbitsize(BDIGITS(y)[RBIGNUM(y)-&gt;len - 1]);</div><div class='del'>-	    ey -= DBL_BIGDIG * BITSPERDIG;</div><div class='del'>-	    if (ey) y = big_shift(y, ey);</div><div class='del'>-	  bignum:</div><div class='del'>-	    bigdivrem(x, y, &amp;z, 0);</div><div class='del'>-	    return rb_float_new(ldexp(big2dbl(z), ex - ey));</div><div class='del'>-	  }</div><div class='del'>-	  case T_FLOAT:</div><div class='del'>-	    y = dbl2big(ldexp(frexp(RFLOAT(y)-&gt;value, &amp;ey), DBL_MANT_DIG));</div><div class='del'>-	    ey -= DBL_MANT_DIG;</div><div class='del'>-	    goto bignum;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	dy = (double)FIX2LONG(y);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	dy = rb_big2dbl(y);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_FLOAT:</div><div class='del'>-	dy = RFLOAT(y)-&gt;value;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='del'>-    }</div><div class='del'>-    return rb_float_new(dx / dy);</div><div class='del'>-}</div><div class='add'>+    double d1, d2;</div><div class='add'>+    VALUE z;</div><div class='add'>+    int n;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-bigsqr(x)</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    long len = RBIGNUM(x)-&gt;len, k = len / 2, i;</div><div class='del'>-    VALUE a, b, a2, z;</div><div class='del'>-    BDIGIT_DBL num;</div><div class='del'>-</div><div class='del'>-    if (len &lt; 4000 / BITSPERDIG) {</div><div class='del'>-	return rb_big_mul0(x, x);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    a = bignew(len - k, 1);</div><div class='del'>-    MEMCPY(BDIGITS(a), BDIGITS(x) + k, BDIGIT, len - k);</div><div class='del'>-    b = bignew(k, 1);</div><div class='del'>-    MEMCPY(BDIGITS(b), BDIGITS(x), BDIGIT, k);</div><div class='del'>-</div><div class='del'>-    a2 = bigtrunc(bigsqr(a));</div><div class='del'>-    z = bigsqr(b);</div><div class='del'>-    REALLOC_N(RBIGNUM(z)-&gt;digits, BDIGIT, (len = 2 * k + RBIGNUM(a2)-&gt;len) + 1);</div><div class='del'>-    while (RBIGNUM(z)-&gt;len &lt; 2 * k) BDIGITS(z)[RBIGNUM(z)-&gt;len++] = 0;</div><div class='del'>-    MEMCPY(BDIGITS(z) + 2 * k, BDIGITS(a2), BDIGIT, RBIGNUM(a2)-&gt;len);</div><div class='del'>-    RBIGNUM(z)-&gt;len = len;</div><div class='del'>-    a2 = bigtrunc(rb_big_mul0(a, b));</div><div class='del'>-    len = RBIGNUM(a2)-&gt;len;</div><div class='del'>-    for (i = 0, num = 0; i &lt; len; i++) {</div><div class='del'>-	num += (BDIGIT_DBL)BDIGITS(z)[i + k] + ((BDIGIT_DBL)BDIGITS(a2)[i] &lt;&lt; 1);</div><div class='del'>-	BDIGITS(z)[i + k] = BIGLO(num);</div><div class='del'>-	num = BIGDN(num);</div><div class='add'>+    if (TYPE(y) == T_FLOAT) {</div><div class='add'>+	return float_new(pow(big2dbl(x), RFLOAT(y)-&gt;value));</div><div class='ctx'>     }</div><div class='del'>-    if (num) {</div><div class='del'>-	len = RBIGNUM(z)-&gt;len;</div><div class='del'>-	for (i += k; i &lt; len &amp;&amp; num; ++i) {</div><div class='del'>-	    num += (BDIGIT_DBL)BDIGITS(z)[i];</div><div class='del'>-	    BDIGITS(z)[i] = BIGLO(num);</div><div class='del'>-	    num = BIGDN(num);</div><div class='del'>-	}</div><div class='del'>-	if (num) {</div><div class='del'>-	    BDIGITS(z)[RBIGNUM(z)-&gt;len++] = BIGLO(num);</div><div class='del'>-	}</div><div class='add'>+    n = NUM2INT(y);</div><div class='add'>+    if (n == 0) return INT2FIX(1);</div><div class='add'>+    if (n &lt; 0) {</div><div class='add'>+	return float_new(pow(big2dbl(x), (double)n));</div><div class='ctx'>     }</div><div class='del'>-    return bigtrunc(z);</div><div class='del'>-}</div><div class='del'>-</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='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_big_pow(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    double d;</div><div class='del'>-    long yy;</div><div class='del'>-</div><div class='del'>-    if (y == INT2FIX(0)) return INT2FIX(1);</div><div class='del'>-    switch (TYPE(y)) {</div><div class='del'>-      case T_FLOAT:</div><div class='del'>-	d = RFLOAT(y)-&gt;value;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	rb_warn("in a**b, b may be too big");</div><div class='del'>-	d = rb_big2dbl(y);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	yy = FIX2LONG(y);</div><div class='del'>-	if (yy &gt; 0) {</div><div class='del'>-	    VALUE z = 0;</div><div class='del'>-	    long mask;</div><div class='del'>-	    const long BIGLEN_LIMIT = 1024*1024 / SIZEOF_BDIGITS;</div><div class='del'>-</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='del'>-	    for (mask = FIXNUM_MAX + 1; mask; mask &gt;&gt;= 1) {</div><div class='del'>-		if (z) z = bigtrunc(bigsqr(z));</div><div class='del'>-		if (yy &amp; mask) {</div><div class='del'>-		    z = z ? bigtrunc(rb_big_mul0(z, x)) : x;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    return bignorm(z);</div><div class='add'>+    z = x;</div><div class='add'>+    while (--n) {</div><div class='add'>+	while (!(n % 2)) {</div><div class='add'>+	    n = n /2;</div><div class='add'>+	    x = Fbig_mul(x, x);</div><div class='ctx'> 	}</div><div class='del'>-	d = (double)yy;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return rb_num_coerce_bin(x, y);</div><div class='add'>+	z = Fbig_mul(z, x);</div><div class='ctx'>     }</div><div class='del'>-    return rb_float_new(pow(rb_big2dbl(x), d));</div><div class='add'>+    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 &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'>+Fbig_and(x, y)</div><div class='add'>+    struct RBignum *x, *y;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE x, y, z;</div><div class='del'>-    BDIGIT *ds1, *ds2, *zds;</div><div class='del'>-    long i, l1, l2;</div><div class='add'>+    VALUE z;</div><div class='add'>+    USHORT *ds1, *ds2, *zds;</div><div class='add'>+    UINT 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='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='add'>+	y = (struct RBignum*)int2big(FIX2INT(y));</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(y)-&gt;sign) {</div><div class='del'>-	y = rb_big_clone(y);</div><div class='del'>-	get2comp(y);</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	x = rb_big_clone(x);</div><div class='del'>-	get2comp(x);</div><div class='add'>+</div><div class='add'>+    if (!y-&gt;sign) {</div><div class='add'>+	y = (struct RBignum*)Fbig_clone(y);</div><div class='add'>+	big_2comp(y);</div><div class='add'>+    }</div><div class='add'>+    if (!x-&gt;sign) {</div><div class='add'>+	x = (struct RBignum*)Fbig_clone(x);</div><div class='add'>+	big_2comp(x);</div><div class='ctx'>     }</div><div class='del'>-    if (RBIGNUM(x)-&gt;len &gt; RBIGNUM(y)-&gt;len) {</div><div class='del'>-	l1 = RBIGNUM(y)-&gt;len;</div><div class='del'>-	l2 = RBIGNUM(x)-&gt;len;</div><div class='add'>+    if (x-&gt;len &gt; y-&gt;len) {</div><div class='add'>+	l1 = y-&gt;len;</div><div class='add'>+	l2 = x-&gt;len;</div><div class='ctx'> 	ds1 = BDIGITS(y);</div><div class='ctx'> 	ds2 = BDIGITS(x);</div><div class='del'>-	sign = RBIGNUM(y)-&gt;sign;</div><div class='add'>+	sign = y-&gt;sign;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	l1 = RBIGNUM(x)-&gt;len;</div><div class='del'>-	l2 = RBIGNUM(y)-&gt;len;</div><div class='add'>+	l1 = x-&gt;len;</div><div class='add'>+	l2 = y-&gt;len;</div><div class='ctx'> 	ds1 = BDIGITS(x);</div><div class='ctx'> 	ds2 = BDIGITS(y);</div><div class='del'>-	sign = RBIGNUM(x)-&gt;sign;</div><div class='add'>+	sign = x-&gt;sign;</div><div class='ctx'>     }</div><div class='del'>-    z = bignew(l2, RBIGNUM(x)-&gt;sign || RBIGNUM(y)-&gt;sign);</div><div class='add'>+    z = bignew(l2, x-&gt;sign &amp;&amp; y-&gt;sign);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'> </div><div class='ctx'>     for (i=0; i&lt;l1; i++) {</div><div class='hunk'>@@ -1867,54 +793,49 @@ 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) big_2comp(z);</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'>+Fbig_or(x, y)</div><div class='add'>+    struct RBignum *x, *y;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE x, y, z;</div><div class='del'>-    BDIGIT *ds1, *ds2, *zds;</div><div class='del'>-    long i, l1, l2;</div><div class='add'>+    VALUE z;</div><div class='add'>+    USHORT *ds1, *ds2, *zds;</div><div class='add'>+    UINT 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='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='add'>+	y = (struct RBignum*)int2big(FIX2INT(y));</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(y)-&gt;sign) {</div><div class='del'>-	y = rb_big_clone(y);</div><div class='del'>-	get2comp(y);</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	x = rb_big_clone(x);</div><div class='del'>-	get2comp(x);</div><div class='add'>+</div><div class='add'>+    if (!y-&gt;sign) {</div><div class='add'>+	y = (struct RBignum*)Fbig_clone(y);</div><div class='add'>+	big_2comp(y);</div><div class='add'>+    }</div><div class='add'>+    if (!x-&gt;sign) {</div><div class='add'>+	x = (struct RBignum*)Fbig_clone(x);</div><div class='add'>+	big_2comp(x);</div><div class='ctx'>     }</div><div class='del'>-    if (RBIGNUM(x)-&gt;len &gt; RBIGNUM(y)-&gt;len) {</div><div class='del'>-	l1 = RBIGNUM(y)-&gt;len;</div><div class='del'>-	l2 = RBIGNUM(x)-&gt;len;</div><div class='add'>+    if (x-&gt;len &gt; y-&gt;len) {</div><div class='add'>+	l1 = y-&gt;len;</div><div class='add'>+	l2 = x-&gt;len;</div><div class='ctx'> 	ds1 = BDIGITS(y);</div><div class='ctx'> 	ds2 = BDIGITS(x);</div><div class='del'>-	sign = RBIGNUM(y)-&gt;sign;</div><div class='add'>+	sign = y-&gt;sign;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	l1 = RBIGNUM(x)-&gt;len;</div><div class='del'>-	l2 = RBIGNUM(y)-&gt;len;</div><div class='add'>+	l1 = x-&gt;len;</div><div class='add'>+	l2 = y-&gt;len;</div><div class='ctx'> 	ds1 = BDIGITS(x);</div><div class='ctx'> 	ds2 = BDIGITS(y);</div><div class='del'>-	sign = RBIGNUM(x)-&gt;sign;</div><div class='add'>+	sign = x-&gt;sign;</div><div class='ctx'>     }</div><div class='del'>-    z = bignew(l2, RBIGNUM(x)-&gt;sign &amp;&amp; RBIGNUM(y)-&gt;sign);</div><div class='add'>+    z = bignew(l2, x-&gt;sign || y-&gt;sign);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'> </div><div class='ctx'>     for (i=0; i&lt;l1; i++) {</div><div class='hunk'>@@ -1923,58 +844,52 @@ 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) big_2comp(z);</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'>+Fbig_xor(x, y)</div><div class='add'>+    struct RBignum *x, *y;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE x, y;</div><div class='ctx'>     VALUE z;</div><div class='del'>-    BDIGIT *ds1, *ds2, *zds;</div><div class='del'>-    long i, l1, l2;</div><div class='add'>+    USHORT *ds1, *ds2, *zds;</div><div class='add'>+    UINT 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='del'>-	y = rb_int2big(FIX2LONG(y));</div><div class='add'>+	y = (struct RBignum*)int2big(FIX2INT(y));</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(y)-&gt;sign) {</div><div class='del'>-	y = rb_big_clone(y);</div><div class='del'>-	get2comp(y);</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(y, T_BIGNUM);</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	x = rb_big_clone(x);</div><div class='del'>-	get2comp(x);</div><div class='add'>+</div><div class='add'>+    if (!y-&gt;sign) {</div><div class='add'>+	y = (struct RBignum*)Fbig_clone(y);</div><div class='add'>+	big_2comp(y);</div><div class='add'>+    }</div><div class='add'>+    if (!x-&gt;sign) {</div><div class='add'>+	x = (struct RBignum*)Fbig_clone(x);</div><div class='add'>+	big_2comp(x);</div><div class='ctx'>     }</div><div class='del'>-    if (RBIGNUM(x)-&gt;len &gt; RBIGNUM(y)-&gt;len) {</div><div class='del'>-	l1 = RBIGNUM(y)-&gt;len;</div><div class='del'>-	l2 = RBIGNUM(x)-&gt;len;</div><div class='add'>+    if (x-&gt;len &gt; y-&gt;len) {</div><div class='add'>+	l1 = y-&gt;len;</div><div class='add'>+	l2 = x-&gt;len;</div><div class='ctx'> 	ds1 = BDIGITS(y);</div><div class='ctx'> 	ds2 = BDIGITS(x);</div><div class='del'>-	sign = RBIGNUM(y)-&gt;sign;</div><div class='add'>+	sign = y-&gt;sign;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	l1 = RBIGNUM(x)-&gt;len;</div><div class='del'>-	l2 = RBIGNUM(y)-&gt;len;</div><div class='add'>+	l1 = x-&gt;len;</div><div class='add'>+	l2 = y-&gt;len;</div><div class='ctx'> 	ds1 = BDIGITS(x);</div><div class='ctx'> 	ds2 = BDIGITS(y);</div><div class='del'>-	sign = RBIGNUM(x)-&gt;sign;</div><div class='add'>+	sign = x-&gt;sign;</div><div class='ctx'>     }</div><div class='del'>-    RBIGNUM(x)-&gt;sign = RBIGNUM(x)-&gt;sign?1:0;</div><div class='del'>-    RBIGNUM(y)-&gt;sign = RBIGNUM(y)-&gt;sign?1:0;</div><div class='del'>-    z = bignew(l2, !(RBIGNUM(x)-&gt;sign ^ RBIGNUM(y)-&gt;sign));</div><div class='add'>+    x-&gt;sign = x-&gt;sign?1:0;</div><div class='add'>+    y-&gt;sign = y-&gt;sign?1:0;</div><div class='add'>+    z = bignew(l2, !(x-&gt;sign ^ y-&gt;sign));</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'> </div><div class='ctx'>     for (i=0; i&lt;l1; i++) {</div><div class='hunk'>@@ -1983,81 +898,52 @@ 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) big_2comp(z);</div><div class='ctx'> </div><div class='ctx'>     return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> 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='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_big_lshift(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='add'>+Fbig_neg(x)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    long shift;</div><div class='del'>-    int neg = 0;</div><div class='add'>+    VALUE z = Fbig_clone(x);</div><div class='add'>+    UINT i = x-&gt;len;</div><div class='add'>+    USHORT *ds = BDIGITS(z);</div><div class='ctx'> </div><div class='del'>-    for (;;) {</div><div class='del'>-	if (FIXNUM_P(y)) {</div><div class='del'>-	    shift = FIX2LONG(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");</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='add'>+    if (!x-&gt;sign) big_2comp(z);</div><div class='add'>+    while (i--) ds[i] = ~ds[i];</div><div class='add'>+    if (x-&gt;sign) big_2comp(z);</div><div class='add'>+    RBIGNUM(z)-&gt;sign = !RBIGNUM(z)-&gt;sign;</div><div class='ctx'> </div><div class='del'>-    if (neg) return big_rshift(x, shift);</div><div class='del'>-    return big_lshift(x, shift);</div><div class='add'>+    return bignorm(z);</div><div class='ctx'> }</div><div class='ctx'> </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 long shift;</div><div class='del'>-{</div><div class='del'>-    BDIGIT *xds, *zds;</div><div class='del'>-    long s1 = shift/BITSPERDIG;</div><div class='del'>-    int s2 = shift%BITSPERDIG;</div><div class='add'>+static VALUE Fbig_rshift();</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+Fbig_lshift(x, y)</div><div class='add'>+    struct RBignum *x;</div><div class='add'>+    VALUE y;</div><div class='add'>+{</div><div class='add'>+    USHORT *xds, *zds;</div><div class='add'>+    UINT shift = NUM2INT(y);</div><div class='add'>+    UINT s1 = shift/(sizeof(USHORT)*CHAR_BIT);</div><div class='add'>+    UINT s2 = shift%(sizeof(USHORT)*CHAR_BIT);</div><div class='ctx'>     VALUE z;</div><div class='del'>-    BDIGIT_DBL num = 0;</div><div class='del'>-    long len, i;</div><div class='add'>+    unsigned long num = 0;</div><div class='add'>+    UINT len, i;</div><div class='ctx'> </div><div class='del'>-    len = RBIGNUM(x)-&gt;len;</div><div class='del'>-    z = bignew(len+s1+1, RBIGNUM(x)-&gt;sign);</div><div class='add'>+    if (shift &lt; 0) return Fbig_rshift(x, INT2FIX(-shift));</div><div class='add'>+    xds = BDIGITS(x);</div><div class='add'>+    len = x-&gt;len;</div><div class='add'>+    z = bignew(len+s1+1, x-&gt;sign);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'>     for (i=0; i&lt;s1; i++) {</div><div class='ctx'> 	*zds++ = 0;</div><div class='ctx'>     }</div><div class='del'>-    xds = BDIGITS(x);</div><div class='ctx'>     for (i=0; i&lt;len; i++) {</div><div class='del'>-	num = num | (BDIGIT_DBL)*xds++&lt;&lt;s2;</div><div class='add'>+	num = num | *xds++&lt;&lt;s2;</div><div class='ctx'> 	*zds++ = BIGLO(num);</div><div class='ctx'> 	num = BIGDN(num);</div><div class='ctx'>     }</div><div class='hunk'>@@ -2065,307 +951,152 @@ 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='del'>-rb_big_rshift(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    long 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 = FIX2LONG(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");</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='ctx'> static VALUE</div><div class='del'>-big_rshift(x, shift)</div><div class='del'>-    VALUE x;</div><div class='del'>-    unsigned long shift;</div><div class='del'>-{</div><div class='del'>-    BDIGIT *xds, *zds;</div><div class='del'>-    long s1 = shift/BITSPERDIG;</div><div class='del'>-    int s2 = shift%BITSPERDIG;</div><div class='add'>+Fbig_rshift(x, y)</div><div class='add'>+    struct RBignum *x;</div><div class='add'>+    VALUE y;</div><div class='add'>+{</div><div class='add'>+    USHORT *xds, *zds;</div><div class='add'>+    UINT shift = NUM2INT(y);</div><div class='add'>+    UINT s1 = shift/(sizeof(USHORT)*CHAR_BIT);</div><div class='add'>+    UINT s2 = shift%(sizeof(USHORT)*CHAR_BIT);</div><div class='ctx'>     VALUE z;</div><div class='del'>-    BDIGIT_DBL num = 0;</div><div class='del'>-    long i, j;</div><div class='del'>-    volatile VALUE save_x;</div><div class='add'>+    unsigned long num = 0;</div><div class='add'>+    UINT i = x-&gt;len, j;</div><div class='ctx'> </div><div class='del'>-    if (s1 &gt; RBIGNUM(x)-&gt;len) {</div><div class='del'>-	if (RBIGNUM(x)-&gt;sign)</div><div class='add'>+    if (shift &lt; 0) return Fbig_lshift(x, INT2FIX(-shift));</div><div class='add'>+    if (s1 &gt; x-&gt;len) {</div><div class='add'>+	if (x-&gt;sign)</div><div class='ctx'> 	    return INT2FIX(0);</div><div class='ctx'> 	else</div><div class='ctx'> 	    return INT2FIX(-1);</div><div class='ctx'>     }</div><div class='del'>-    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='del'>-    }</div><div class='ctx'>     xds = BDIGITS(x);</div><div class='del'>-    i = RBIGNUM(x)-&gt;len; j = i - s1;</div><div class='del'>-    if (j == 0) {</div><div class='del'>-	if (RBIGNUM(x)-&gt;sign) return INT2FIX(0);</div><div class='del'>-	else return INT2FIX(-1);</div><div class='del'>-    }</div><div class='del'>-    z = bignew(j, RBIGNUM(x)-&gt;sign);</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	num = ((BDIGIT_DBL)~0) &lt;&lt; BITSPERDIG;</div><div class='del'>-    }</div><div class='add'>+    i = x-&gt;len; j = i - s1;</div><div class='add'>+    z = bignew(j, x-&gt;sign);</div><div class='ctx'>     zds = BDIGITS(z);</div><div class='ctx'>     while (i--, j--) {</div><div class='ctx'> 	num = (num | xds[i]) &gt;&gt; s2;</div><div class='ctx'> 	zds[j] = BIGLO(num);</div><div class='ctx'> 	num = BIGUP(xds[i]);</div><div class='ctx'>     }</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	get2comp(z);</div><div class='del'>-    }</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='del'>-rb_big_aref(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='add'>+Fbig_aref(x, y)</div><div class='add'>+    struct RBignum *x;</div><div class='add'>+    VALUE y;</div><div class='ctx'> {</div><div class='del'>-    BDIGIT *xds;</div><div class='del'>-    BDIGIT_DBL num;</div><div class='del'>-    unsigned long shift;</div><div class='del'>-    long i, s1, s2;</div><div class='add'>+    USHORT *xds;</div><div class='add'>+    int shift = NUM2INT(y);</div><div class='add'>+    UINT s1, s2;</div><div class='ctx'> </div><div class='del'>-    if (TYPE(y) == T_BIGNUM) {</div><div class='del'>-	if (!RBIGNUM(y)-&gt;sign)</div><div class='del'>-	    return INT2FIX(0);</div><div class='del'>-	if (RBIGNUM(bigtrunc(y))-&gt;len &gt; SIZEOF_LONG/SIZEOF_BDIGITS) {</div><div class='del'>-	  out_of_range:</div><div class='del'>-	    return RBIGNUM(x)-&gt;sign ? INT2FIX(0) : INT2FIX(1);</div><div class='del'>-	}</div><div class='del'>-	shift = big2ulong(y, "long");</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	i = NUM2LONG(y);</div><div class='del'>-	if (i &lt; 0) return INT2FIX(0);</div><div class='del'>-	shift = (VALUE)i;</div><div class='del'>-    }</div><div class='del'>-    s1 = shift/BITSPERDIG;</div><div class='del'>-    s2 = shift%BITSPERDIG;</div><div class='del'>-</div><div class='del'>-    if (s1 &gt;= RBIGNUM(x)-&gt;len) goto out_of_range;</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	xds = BDIGITS(x);</div><div class='del'>-	i = 0; num = 1;</div><div class='del'>-	while (num += ~xds[i], ++i &lt;= s1) {</div><div class='del'>-	    num = BIGDN(num);</div><div class='del'>-	}</div><div class='add'>+    if (shift &lt; 0) return INT2FIX(0);</div><div class='add'>+    s1 = shift/(sizeof(USHORT)*CHAR_BIT);</div><div class='add'>+    s2 = shift%(sizeof(USHORT)*CHAR_BIT);</div><div class='add'>+</div><div class='add'>+    if (!x-&gt;sign) {</div><div class='add'>+	if (s1 &gt;= x-&gt;len) return INT2FIX(1);</div><div class='add'>+	x = (struct RBignum*)Fbig_clone(x);</div><div class='add'>+	big_2comp(x);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	num = BDIGITS(x)[s1];</div><div class='add'>+	if (s1 &gt;= x-&gt;len) return INT2FIX(0);</div><div class='ctx'>     }</div><div class='del'>-    if (num &amp; ((BDIGIT_DBL)1&lt;&lt;s2))</div><div class='add'>+    xds = BDIGITS(x);</div><div class='add'>+    if (xds[s1] &amp; (1&lt;&lt;s2))</div><div class='ctx'> 	return INT2FIX(1);</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='add'>+static VALUE</div><div class='add'>+Fbig_cmp(x, y)</div><div class='add'>+    struct RBignum *x, *y;</div><div class='add'>+{</div><div class='add'>+    int xlen = x-&gt;len;</div><div class='add'>+</div><div class='add'>+    Check_Type(x, T_BIGNUM);</div><div class='add'>+    if (x-&gt;sign &gt; y-&gt;sign) return INT2FIX(1);</div><div class='add'>+    if (x-&gt;sign &lt; y-&gt;sign) return INT2FIX(-1);</div><div class='add'>+    if (xlen &lt; y-&gt;len)</div><div class='add'>+	return (x-&gt;sign) ? INT2FIX(-1) : INT2FIX(1);</div><div class='add'>+    if (xlen &gt; y-&gt;len)</div><div class='add'>+	return (x-&gt;sign) ? INT2FIX(1) : INT2FIX(-1);</div><div class='add'>+</div><div class='add'>+    while(xlen-- &amp;&amp; (BDIGITS(x)[xlen]==BDIGITS(y)[xlen]));</div><div class='add'>+    if (-1 == xlen) return INT2FIX(0);</div><div class='add'>+    return (BDIGITS(x)[xlen] &lt; BDIGITS(y)[xlen]) ?</div><div class='add'>+	(x-&gt;sign ? INT2FIX(1) : INT2FIX(-1)) :</div><div class='add'>+	    (x-&gt;sign ? INT2FIX(-1) : INT2FIX(1));</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_big_hash(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+Fbig_hash(x)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    long i, len, key;</div><div class='del'>-    BDIGIT *digits;</div><div class='add'>+    int i, len, key;</div><div class='add'>+    USHORT *digits;</div><div class='ctx'> </div><div class='del'>-    key = 0; digits = BDIGITS(x); len = RBIGNUM(x)-&gt;len;</div><div class='del'>-    for (i=0; i&lt;len; i++) {</div><div class='add'>+    key = 0; digits = BDIGITS(x);</div><div class='add'>+    for (i=0,len=x-&gt;len; i&lt;x-&gt;len; i++) {</div><div class='ctx'> 	key ^= *digits++;</div><div class='ctx'>     }</div><div class='del'>-    return LONG2FIX(key);</div><div class='add'>+    return INT2FIX(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='del'>-rb_big_coerce(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='add'>+Fbig_coerce(x, y)</div><div class='add'>+    struct RBignum *x;</div><div class='add'>+    VALUE y;</div><div class='ctx'> {</div><div class='ctx'>     if (FIXNUM_P(y)) {</div><div class='del'>-	return rb_assoc_new(rb_int2big(FIX2LONG(y)), x);</div><div class='del'>-    }</div><div class='del'>-    else if (TYPE(y) == T_BIGNUM) {</div><div class='del'>-       return rb_assoc_new(y, x);</div><div class='add'>+	return int2big(FIX2INT(y));</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_raise(rb_eTypeError, "can't coerce %s to Bignum",</div><div class='del'>-		 rb_obj_classname(y));</div><div class='add'>+	Fail("can't coerce %s to Bignum", rb_class2name(CLASS_OF(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='del'>-rb_big_abs(x)</div><div class='del'>-    VALUE x;</div><div class='add'>+Fbig_abs(x)</div><div class='add'>+    struct RBignum *x;</div><div class='ctx'> {</div><div class='del'>-    if (!RBIGNUM(x)-&gt;sign) {</div><div class='del'>-	x = rb_big_clone(x);</div><div class='del'>-	RBIGNUM(x)-&gt;sign = 1;</div><div class='del'>-    }</div><div class='del'>-    return x;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_big_rand(max, rand_buf)</div><div class='del'>-    VALUE max;</div><div class='del'>-    double *rand_buf;</div><div class='del'>-{</div><div class='del'>-    VALUE v;</div><div class='del'>-    long len = RBIGNUM(max)-&gt;len;</div><div class='del'>-</div><div class='del'>-    if (BIGZEROP(max)) {</div><div class='del'>-	return rb_float_new(rand_buf[0]);</div><div class='del'>-    }</div><div class='del'>-    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='del'>-    while (len--) {</div><div class='del'>-	BDIGITS(v)[len] = ((BDIGIT)~0) * rand_buf[len];</div><div class='add'>+    if (!x-&gt;sign) {</div><div class='add'>+	x = (struct RBignum*)Fbig_clone(x);</div><div class='add'>+	x-&gt;sign = 1;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return v;</div><div class='add'>+    return (VALUE)x;</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='del'>-static VALUE</div><div class='del'>-rb_big_size(big)</div><div class='del'>-    VALUE big;</div><div class='del'>-{</div><div class='del'>-    return LONG2FIX(RBIGNUM(big)-&gt;len*SIZEOF_BDIGITS);</div><div class='del'>-}</div><div class='del'>-</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='del'>-void</div><div class='ctx'> Init_Bignum()</div><div class='ctx'> {</div><div class='del'>-    rb_cBignum = rb_define_class("Bignum", rb_cInteger);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cBignum, "to_s", rb_big_to_s, -1);</div><div class='del'>-    rb_define_method(rb_cBignum, "coerce", rb_big_coerce, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "-@", rb_big_uminus, 0);</div><div class='del'>-    rb_define_method(rb_cBignum, "+", rb_big_plus, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "-", rb_big_minus, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "*", rb_big_mul, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "/", rb_big_div, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "%", rb_big_modulo, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "div", rb_big_div, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "divmod", rb_big_divmod, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "modulo", rb_big_modulo, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "remainder", rb_big_remainder, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "quo", rb_big_quo, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "fdiv", rb_big_quo, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "**", rb_big_pow, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "&amp;", rb_big_and, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "|", rb_big_or, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "^", rb_big_xor, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "~", rb_big_neg, 0);</div><div class='del'>-    rb_define_method(rb_cBignum, "&lt;&lt;", rb_big_lshift, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "&gt;&gt;", rb_big_rshift, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "[]", rb_big_aref, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cBignum, "&lt;=&gt;", rb_big_cmp, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "==", rb_big_eq, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "eql?", rb_big_eql, 1);</div><div class='del'>-    rb_define_method(rb_cBignum, "hash", rb_big_hash, 0);</div><div class='del'>-    rb_define_method(rb_cBignum, "to_f", rb_big_to_f, 0);</div><div class='del'>-    rb_define_method(rb_cBignum, "abs", rb_big_abs, 0);</div><div class='del'>-    rb_define_method(rb_cBignum, "size", rb_big_size, 0);</div><div class='add'>+    C_Bignum = rb_define_class("Bignum", C_Integer);</div><div class='add'>+    rb_define_single_method(C_Bignum, "new", Fbig_new, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "clone", Fbig_clone, 0);</div><div class='add'>+    rb_define_method(C_Bignum, "to_s", Fbig_to_s, 0);</div><div class='add'>+    rb_define_method(C_Bignum, "coerce", Fbig_coerce, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "-@", Fbig_uminus, 0);</div><div class='add'>+    rb_define_method(C_Bignum, "+", Fbig_plus, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "-", Fbig_minus, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "*", Fbig_mul, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "/", Fbig_div, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "%", Fbig_mod, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "divmod", Fbig_divmod, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "**", Fbig_pow, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "&amp;", Fbig_and, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "|", Fbig_or, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "^", Fbig_xor, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "~", Fbig_neg, 0);</div><div class='add'>+    rb_define_method(C_Bignum, "&lt;&lt;", Fbig_lshift, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "&gt;&gt;", Fbig_rshift, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "[]", Fbig_aref, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Bignum, "&lt;=&gt;", Fbig_cmp, 1);</div><div class='add'>+    rb_define_method(C_Bignum, "hash", Fbig_hash, 0);</div><div class='add'>+    rb_define_method(C_Bignum, "to_i", Fbig_to_i, 0);</div><div class='add'>+    rb_define_method(C_Bignum, "to_f", Fbig_to_f, 0);</div><div class='add'>+    rb_define_method(C_Bignum, "abs_f", Fbig_abs, 0);</div><div class='ctx'> }</div><div class='head'>diff --git a/bin/erb b/bin/erb<br/>deleted file mode 100755<br/>index a6fcd5370c..0000000000<br/>--- a/<a href='/ruby.git/tree/bin/erb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bin/erb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,141 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# Tiny eRuby --- ERB2</div><div class='del'>-# Copyright (c) 1999-2000,2002 Masatoshi SEKI </div><div class='del'>-# You can redistribute it and/or modify it under the same terms as Ruby.</div><div class='del'>-</div><div class='del'>-require 'erb'</div><div class='del'>-</div><div class='del'>-class ERB</div><div class='del'>-  module Main</div><div class='del'>-    def ARGV.switch</div><div class='del'>-      return nil if self.empty?</div><div class='del'>-      arg = self.shift</div><div class='del'>-      return nil if arg == '--'</div><div class='del'>-      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='del'>-      else</div><div class='del'>-        self.unshift arg</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def ARGV.req_arg</div><div class='del'>-      self.shift || raise('missing argument')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def trim_mode_opt(trim_mode, disable_percent)</div><div class='del'>-      return trim_mode if disable_percent</div><div class='del'>-      case trim_mode</div><div class='del'>-      when 0</div><div class='del'>-        return '%'</div><div class='del'>-      when 1</div><div class='del'>-        return '%&gt;'</div><div class='del'>-      when 2</div><div class='del'>-        return '%&lt;&gt;'</div><div class='del'>-      when '-'</div><div class='del'>-        return '%-'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    module_function :trim_mode_opt</div><div class='del'>-</div><div class='del'>-    def run(factory=ERB)</div><div class='del'>-      trim_mode = 0</div><div class='del'>-      disable_percent = false</div><div class='del'>-      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='del'>-  -x               print ruby script</div><div class='del'>-  -n               print ruby script with line number</div><div class='del'>-  -v               enable verbose mode</div><div class='del'>-  -d               set $DEBUG to true</div><div class='del'>-  -r [library]     load a library</div><div class='del'>-  -K [kcode]       specify KANJI code-set</div><div class='del'>-  -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='del'>-EOU</div><div class='del'>-        exit 1</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      src = $&lt;.read</div><div class='del'>-      filename = $FILENAME</div><div class='del'>-      exit 2 unless src</div><div class='del'>-      trim = trim_mode_opt(trim_mode, disable_percent)</div><div class='del'>-      erb = factory.new(src.untaint, safe_level, trim)</div><div class='del'>-      erb.filename = filename</div><div class='del'>-      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='del'>-      else</div><div class='del'>-        erb.run(TOPLEVEL_BINDING.taint)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    module_function :run</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  ERB::Main.run</div><div class='del'>-end</div><div class='head'>diff --git a/bin/irb b/bin/irb<br/>deleted file mode 100644<br/>index f277bc4b69..0000000000<br/>--- a/<a href='/ruby.git/tree/bin/irb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>bin/irb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#   irb.rb - intaractive ruby</div><div class='del'>-#   	$Release Version: 0.9.5 $</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "irb"</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  IRB.start(__FILE__)</div><div class='del'>-else</div><div class='del'>-  # check -e option</div><div class='del'>-  if /^-e$/ =~ $0</div><div class='del'>-    IRB.start(__FILE__)</div><div class='del'>-  else</div><div class='del'>-    IRB.setup(__FILE__)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/bin/rdoc b/bin/rdoc<br/>deleted file mode 100644<br/>index fe619137fd..0000000000<br/>--- a/<a href='/ruby.git/tree/bin/rdoc?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 096c7fbdf1..867a2ac039 100644<br/>--- a/<a href='/ruby.git/tree/class.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>class.c</a><br/>+++ b/<a href='/ruby.git/tree/class.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>class.c</a></div><div class='hunk'>@@ -1,1000 +1,336 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   class.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='ctx'>   created at: Tue Aug 10 15:05:44 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "rubysig.h"</div><div class='add'>+#include "env.h"</div><div class='ctx'> #include "node.h"</div><div class='ctx'> #include "st.h"</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-</div><div class='del'>-extern st_table *rb_class_tbl;</div><div class='add'>+#include "methods.h"</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_class_boot(super)</div><div class='del'>-    VALUE super;</div><div class='del'>-{</div><div class='del'>-    NEWOBJ(klass, struct RClass);</div><div class='del'>-    OBJSETUP(klass, rb_cClass, T_CLASS);</div><div class='add'>+struct st_table *new_idhash();</div><div class='ctx'> </div><div class='del'>-    klass-&gt;super = super;</div><div class='del'>-    klass-&gt;iv_tbl = 0;</div><div class='del'>-    klass-&gt;m_tbl = 0;		/* safe GC */</div><div class='del'>-    klass-&gt;m_tbl = st_init_numtable();</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(klass, super);</div><div class='del'>-    return (VALUE)klass;</div><div class='del'>-}</div><div class='add'>+extern VALUE C_Class;</div><div class='add'>+extern VALUE C_Module;</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_class_new(super)</div><div class='del'>-    VALUE super;</div><div class='add'>+class_new(super)</div><div class='add'>+    struct RClass *super;</div><div class='ctx'> {</div><div class='del'>-    Check_Type(super, T_CLASS);</div><div class='del'>-    if (super == rb_cClass) {</div><div class='del'>-	rb_raise(rb_eTypeError, "can't make subclass of Class");</div><div class='del'>-    }</div><div class='del'>-    if (FL_TEST(super, 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'>-    return rb_class_boot(super);</div><div class='del'>-}</div><div class='add'>+    NEWOBJ(cls, struct RClass);</div><div class='add'>+    OBJSETUP(cls, C_Class, T_CLASS);</div><div class='ctx'> </div><div class='del'>-struct clone_method_data {</div><div class='del'>-    st_table *tbl;</div><div class='del'>-    VALUE klass;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-clone_method(mid, body, data)</div><div class='del'>-    ID mid;</div><div class='del'>-    NODE *body;</div><div class='del'>-    struct clone_method_data *data;</div><div class='del'>-{</div><div class='del'>-    NODE *fbody = body-&gt;nd_body;</div><div class='add'>+    cls-&gt;super = super;</div><div class='add'>+    cls-&gt;m_tbl = new_idhash();</div><div class='add'>+    cls-&gt;c_tbl = Qnil;</div><div class='ctx'> </div><div class='del'>-    if (fbody &amp;&amp; nd_type(fbody) == NODE_SCOPE) {</div><div class='del'>-	fbody = rb_copy_node_scope(fbody, ruby_cref);</div><div class='del'>-    }</div><div class='del'>-    st_insert(data-&gt;tbl, mid, (st_data_t)NEW_METHOD(fbody, body-&gt;nd_noex));</div><div class='del'>-    return ST_CONTINUE;</div><div class='add'>+    return (VALUE)cls;</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='del'>-{</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 = RBASIC(orig)-&gt;klass;</div><div class='del'>-	RBASIC(clone)-&gt;klass = rb_singleton_class_clone(clone);</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='del'>-	ID id;</div><div class='del'>-</div><div class='del'>-	RCLASS(clone)-&gt;iv_tbl = st_copy(RCLASS(orig)-&gt;iv_tbl);</div><div class='del'>-	id = rb_intern("__classpath__");</div><div class='del'>-	st_delete(RCLASS(clone)-&gt;iv_tbl, (st_data_t*)&amp;id, 0);</div><div class='del'>-	id = rb_intern("__classid__");</div><div class='del'>-	st_delete(RCLASS(clone)-&gt;iv_tbl, (st_data_t*)&amp;id, 0);</div><div class='del'>-    }</div><div class='del'>-    if (RCLASS(orig)-&gt;m_tbl) {</div><div class='del'>-	struct clone_method_data data;</div><div class='del'>-</div><div class='del'>-	data.tbl = RCLASS(clone)-&gt;m_tbl = st_init_numtable();</div><div class='del'>-	data.klass = (VALUE)clone;</div><div class='del'>-</div><div class='del'>-	st_foreach(RCLASS(orig)-&gt;m_tbl, clone_method, (st_data_t)&amp;data);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return clone;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-VALUE</div><div class='del'>-rb_class_init_copy(clone, orig)</div><div class='del'>-    VALUE clone, orig;</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_singleton_class_clone(obj)</div><div class='del'>-    VALUE obj;</div><div class='add'>+single_class_new(super)</div><div class='add'>+    struct RClass *super;</div><div class='ctx'> {</div><div class='del'>-    VALUE klass = RBASIC(obj)-&gt;klass;</div><div class='add'>+    struct RClass *cls = (struct RClass*)class_new(super);</div><div class='ctx'> </div><div class='del'>-    if (!FL_TEST(klass, FL_SINGLETON))</div><div class='del'>-	return klass;</div><div class='del'>-    else {</div><div class='del'>-	/* copy singleton(unnamed) class */</div><div class='del'>-	NEWOBJ(clone, struct RClass);</div><div class='del'>-	OBJSETUP(clone, 0, RBASIC(klass)-&gt;flags);</div><div class='del'>-</div><div class='del'>-	if (BUILTIN_TYPE(obj) == T_CLASS) {</div><div class='del'>-	    RBASIC(clone)-&gt;klass = (VALUE)clone;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    RBASIC(clone)-&gt;klass = rb_singleton_class_clone(klass);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	clone-&gt;super = RCLASS(klass)-&gt;super;</div><div class='del'>-	clone-&gt;iv_tbl = 0;</div><div class='del'>-	clone-&gt;m_tbl = 0;</div><div class='del'>-	if (RCLASS(klass)-&gt;iv_tbl) {</div><div class='del'>-	    clone-&gt;iv_tbl = st_copy(RCLASS(klass)-&gt;iv_tbl);</div><div class='del'>-	}</div><div class='del'>-	{</div><div class='del'>-	    struct clone_method_data data;</div><div class='del'>-</div><div class='del'>-	    data.tbl = clone-&gt;m_tbl = st_init_numtable();</div><div class='del'>-	    switch (TYPE(obj)) {</div><div class='del'>-	      case T_CLASS:</div><div class='del'>-	      case T_MODULE:</div><div class='del'>-		data.klass = obj;</div><div class='del'>-		break;</div><div class='del'>-	      default:</div><div class='del'>-		data.klass = 0;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='add'>+    FL_SET(cls, FL_SINGLE);</div><div class='ctx'> </div><div class='del'>-	    st_foreach(RCLASS(klass)-&gt;m_tbl, clone_method, (st_data_t)&amp;data);</div><div class='del'>-	}</div><div class='del'>-	rb_singleton_class_attached(RBASIC(clone)-&gt;klass, (VALUE)clone);</div><div class='del'>-	FL_SET(clone, FL_SINGLETON);</div><div class='del'>-	return (VALUE)clone;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_singleton_class_attached(klass, obj)</div><div class='del'>-    VALUE klass, obj;</div><div class='del'>-{</div><div class='del'>-    if (FL_TEST(klass, FL_SINGLETON)) {</div><div class='del'>-	if (!RCLASS(klass)-&gt;iv_tbl) {</div><div class='del'>-	    RCLASS(klass)-&gt;iv_tbl = st_init_numtable();</div><div class='del'>-	}</div><div class='del'>-	st_insert(RCLASS(klass)-&gt;iv_tbl, rb_intern("__attached__"), obj);</div><div class='del'>-    }</div><div class='add'>+    return (VALUE)cls;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_make_metaclass(obj, super)</div><div class='del'>-    VALUE obj, super;</div><div class='add'>+single_class_clone(class)</div><div class='add'>+    struct RClass *class;</div><div class='ctx'> {</div><div class='del'>-    VALUE klass = rb_class_boot(super);</div><div class='del'>-    FL_SET(klass, FL_SINGLETON);</div><div class='del'>-    RBASIC(obj)-&gt;klass = klass;</div><div class='del'>-    rb_singleton_class_attached(klass, obj);</div><div class='del'>-    if (BUILTIN_TYPE(obj) == T_CLASS &amp;&amp; FL_TEST(obj, FL_SINGLETON)) {</div><div class='del'>-	RBASIC(klass)-&gt;klass = klass;</div><div class='del'>-	RCLASS(klass)-&gt;super = RBASIC(rb_class_real(RCLASS(obj)-&gt;super))-&gt;klass;</div><div class='del'>-    }</div><div class='add'>+    if (!FL_TEST(class, FL_SINGLE))</div><div class='add'>+	return (VALUE)class;</div><div class='ctx'>     else {</div><div class='del'>-	VALUE metasuper = RBASIC(rb_class_real(super))-&gt;klass;</div><div class='add'>+	/* copy single(unnamed) class */</div><div class='add'>+	NEWOBJ(cls, struct RClass);</div><div class='add'>+	CLONESETUP(cls, class);</div><div class='ctx'> </div><div class='del'>-	/* metaclass of a superclass may be NULL at boot time */</div><div class='del'>-	if (metasuper) {</div><div class='del'>-	    RBASIC(klass)-&gt;klass = metasuper;</div><div class='del'>-	}</div><div class='add'>+	cls-&gt;super = class-&gt;super;</div><div class='add'>+	cls-&gt;m_tbl = st_copy(class-&gt;m_tbl);</div><div class='add'>+	cls-&gt;c_tbl = Qnil;</div><div class='add'>+	FL_SET(cls, FL_SINGLE);</div><div class='add'>+	return (VALUE)cls;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return klass;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='add'>+VALUE </div><div class='ctx'> rb_define_class_id(id, super)</div><div class='ctx'>     ID id;</div><div class='del'>-    VALUE super;</div><div class='add'>+    struct RBasic *super;</div><div class='ctx'> {</div><div class='del'>-    VALUE klass;</div><div class='del'>-</div><div class='del'>-    if (!super) super = rb_cObject;</div><div class='del'>-    klass = rb_class_new(super);</div><div class='del'>-    rb_make_metaclass(klass, RBASIC(super)-&gt;klass);</div><div class='add'>+    struct RClass *cls = (struct RClass*)class_new(super);</div><div class='ctx'> </div><div class='del'>-    return klass;</div><div class='del'>-}</div><div class='add'>+    rb_name_class(cls, id);</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='add'>+    /* make metaclass */</div><div class='add'>+    RBASIC(cls)-&gt;class = single_class_new(super?super-&gt;class:C_Class);</div><div class='add'>+    literalize(RBASIC(cls)-&gt;class);</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_class_inherited(super, klass)</div><div class='del'>-    VALUE super, klass;</div><div class='del'>-{</div><div class='del'>-    if (!super) super = rb_cObject;</div><div class='del'>-    return rb_funcall(super, rb_intern("inherited"), 1, klass);</div><div class='add'>+    return (VALUE)cls;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='add'>+VALUE </div><div class='ctx'> rb_define_class(name, super)</div><div class='del'>-    const char *name;</div><div class='add'>+    char *name;</div><div class='ctx'>     VALUE super;</div><div class='ctx'> {</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID id;</div><div class='del'>-</div><div class='del'>-    id = rb_intern(name);</div><div class='del'>-    if (rb_const_defined(rb_cObject, id)) {</div><div class='del'>-	klass = rb_const_get(rb_cObject, id);</div><div class='del'>-	if (TYPE(klass) != T_CLASS) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "%s is not a class", name);</div><div class='del'>-	}</div><div class='del'>-	if (rb_class_real(RCLASS(klass)-&gt;super) != super) {</div><div class='del'>-	    rb_name_error(id, "%s is already defined", name);</div><div class='del'>-	}</div><div class='del'>-	return klass;</div><div class='del'>-    }</div><div class='del'>-    if (!super) {</div><div class='del'>-	rb_warn("no super class for `%s', Object assumed", name);</div><div class='del'>-    }</div><div class='del'>-    klass = rb_define_class_id(id, super);</div><div class='del'>-    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='del'>-    rb_class_inherited(super, klass);</div><div class='del'>-</div><div class='del'>-    return klass;</div><div class='add'>+    return rb_define_class_id(rb_intern(name), super);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_define_class_under(outer, name, super)</div><div class='del'>-    VALUE outer;</div><div class='del'>-    const char *name;</div><div class='del'>-    VALUE super;</div><div class='del'>-{</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID id;</div><div class='del'>-</div><div class='del'>-    id = rb_intern(name);</div><div class='del'>-    if (rb_const_defined_at(outer, id)) {</div><div class='del'>-	klass = rb_const_get_at(outer, id);</div><div class='del'>-	if (TYPE(klass) != T_CLASS) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "%s is not a class", name);</div><div class='del'>-	}</div><div class='del'>-	if (rb_class_real(RCLASS(klass)-&gt;super) != super) {</div><div class='del'>-	    rb_name_error(id, "%s is already defined", name);</div><div class='del'>-	}</div><div class='del'>-	return klass;</div><div class='del'>-    }</div><div class='del'>-    if (!super) {</div><div class='del'>-	rb_warn("no super class for `%s::%s', Object assumed",</div><div class='del'>-		rb_class2name(outer), name);</div><div class='del'>-    }</div><div class='del'>-    klass = rb_define_class_id(id, super);</div><div class='del'>-    rb_set_class_path(klass, outer, name);</div><div class='del'>-    rb_const_set(outer, id, klass);</div><div class='del'>-    rb_class_inherited(super, klass);</div><div class='del'>-</div><div class='del'>-    return klass;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_module_new()</div><div class='add'>+module_new()</div><div class='ctx'> {</div><div class='ctx'>     NEWOBJ(mdl, struct RClass);</div><div class='del'>-    OBJSETUP(mdl, rb_cModule, T_MODULE);</div><div class='add'>+    OBJSETUP(mdl, C_Module, T_MODULE);</div><div class='ctx'> </div><div class='del'>-    mdl-&gt;super = 0;</div><div class='del'>-    mdl-&gt;iv_tbl = 0;</div><div class='del'>-    mdl-&gt;m_tbl = 0;</div><div class='del'>-    mdl-&gt;m_tbl = st_init_numtable();</div><div class='add'>+    mdl-&gt;super = Qnil;</div><div class='add'>+    mdl-&gt;m_tbl = new_idhash();</div><div class='add'>+    mdl-&gt;c_tbl = Qnil;</div><div class='ctx'> </div><div class='ctx'>     return (VALUE)mdl;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='add'>+VALUE </div><div class='ctx'> rb_define_module_id(id)</div><div class='ctx'>     ID id;</div><div class='ctx'> {</div><div class='del'>-    VALUE mdl;</div><div class='add'>+    struct RClass *mdl = (struct RClass*)module_new();</div><div class='ctx'> </div><div class='del'>-    mdl = rb_module_new();</div><div class='ctx'>     rb_name_class(mdl, id);</div><div class='del'>-</div><div class='del'>-    return mdl;</div><div class='add'>+    return (VALUE)mdl;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='add'>+VALUE </div><div class='ctx'> rb_define_module(name)</div><div class='del'>-    const char *name;</div><div class='del'>-{</div><div class='del'>-    VALUE module;</div><div class='del'>-    ID id;</div><div class='del'>-</div><div class='del'>-    id = rb_intern(name);</div><div class='del'>-    if (rb_const_defined(rb_cObject, id)) {</div><div class='del'>-	module = rb_const_get(rb_cObject, id);</div><div class='del'>-	if (TYPE(module) == T_MODULE)</div><div class='del'>-	    return module;</div><div class='del'>-	rb_raise(rb_eTypeError, "%s is not a module", rb_obj_classname(module));</div><div class='del'>-    }</div><div class='del'>-    module = rb_define_module_id(id);</div><div class='del'>-    st_add_direct(rb_class_tbl, id, module);</div><div class='del'>-    rb_const_set(rb_cObject, id, module);</div><div class='del'>-</div><div class='del'>-    return module;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_define_module_under(outer, name)</div><div class='del'>-    VALUE outer;</div><div class='del'>-    const char *name;</div><div class='add'>+    char *name;</div><div class='ctx'> {</div><div class='del'>-    VALUE module;</div><div class='del'>-    ID id;</div><div class='del'>-</div><div class='del'>-    id = rb_intern(name);</div><div class='del'>-    if (rb_const_defined_at(outer, id)) {</div><div class='del'>-	module = rb_const_get_at(outer, id);</div><div class='del'>-	if (TYPE(module) == T_MODULE)</div><div class='del'>-	    return module;</div><div class='del'>-	rb_raise(rb_eTypeError, "%s::%s is not a module",</div><div class='del'>-		 rb_class2name(outer), rb_obj_classname(module));</div><div class='del'>-    }</div><div class='del'>-    module = rb_define_module_id(id);</div><div class='del'>-    rb_const_set(outer, id, module);</div><div class='del'>-    rb_set_class_path(module, outer, name);</div><div class='del'>-</div><div class='del'>-    return module;</div><div class='add'>+    return rb_define_module_id(rb_intern(name));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='add'>+static struct RClass *</div><div class='ctx'> include_class_new(module, super)</div><div class='del'>-    VALUE module, super;</div><div class='add'>+    struct RClass *module, *super;</div><div class='ctx'> {</div><div class='del'>-    NEWOBJ(klass, struct RClass);</div><div class='del'>-    OBJSETUP(klass, rb_cClass, T_ICLASS);</div><div class='add'>+    struct RClass *p;</div><div class='ctx'> </div><div class='del'>-    if (BUILTIN_TYPE(module) == T_ICLASS) {</div><div class='del'>-	module = RBASIC(module)-&gt;klass;</div><div class='del'>-    }</div><div class='del'>-    if (!RCLASS(module)-&gt;iv_tbl) {</div><div class='del'>-	RCLASS(module)-&gt;iv_tbl = st_init_numtable();</div><div class='del'>-    }</div><div class='del'>-    klass-&gt;iv_tbl = RCLASS(module)-&gt;iv_tbl;</div><div class='del'>-    klass-&gt;m_tbl = RCLASS(module)-&gt;m_tbl;</div><div class='del'>-    klass-&gt;super = super;</div><div class='del'>-    if (TYPE(module) == T_ICLASS) {</div><div class='del'>-	RBASIC(klass)-&gt;klass = RBASIC(module)-&gt;klass;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	RBASIC(klass)-&gt;klass = module;</div><div class='del'>-    }</div><div class='del'>-    OBJ_INFECT(klass, module);</div><div class='del'>-    OBJ_INFECT(klass, super);</div><div class='add'>+    NEWOBJ(cls, struct RClass);</div><div class='add'>+    OBJSETUP(cls, C_Class, T_ICLASS);</div><div class='ctx'> </div><div class='del'>-    return (VALUE)klass;</div><div class='add'>+    cls-&gt;m_tbl = module-&gt;m_tbl;</div><div class='add'>+    cls-&gt;c_tbl = module-&gt;c_tbl;</div><div class='add'>+    cls-&gt;super = super;</div><div class='add'>+</div><div class='add'>+    return cls;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_include_module(klass, module)</div><div class='del'>-    VALUE klass, module;</div><div class='add'>+rb_include_module(class, module)</div><div class='add'>+    struct RClass *class, *module;</div><div class='ctx'> {</div><div class='del'>-    VALUE p, c;</div><div class='del'>-    int changed = 0;</div><div class='add'>+    struct RClass *p;</div><div class='add'>+    int added = FALSE;</div><div class='ctx'> </div><div class='del'>-    rb_frozen_class_p(klass);</div><div class='del'>-    if (!OBJ_TAINTED(klass)) {</div><div class='del'>-	rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    if (TYPE(module) != T_MODULE) {</div><div class='del'>-	Check_Type(module, T_MODULE);</div><div class='del'>-    }</div><div class='add'>+    Check_Type(module, T_MODULE);</div><div class='ctx'> </div><div class='del'>-    OBJ_INFECT(klass, module);</div><div class='del'>-    c = klass;</div><div class='ctx'>     while (module) {</div><div class='del'>-	int superclass_seen = Qfalse;</div><div class='del'>-</div><div class='del'>-	if (RCLASS(klass)-&gt;m_tbl == RCLASS(module)-&gt;m_tbl)</div><div class='del'>-	    rb_raise(rb_eArgError, "cyclic include detected");</div><div class='del'>-	/* ignore if the module included already in superclasses */</div><div class='del'>-	for (p = RCLASS(klass)-&gt;super; p; p = RCLASS(p)-&gt;super) {</div><div class='del'>-	    switch (BUILTIN_TYPE(p)) {</div><div class='del'>-	      case T_ICLASS:</div><div class='del'>-		if (RCLASS(p)-&gt;m_tbl == RCLASS(module)-&gt;m_tbl) {</div><div class='del'>-		    if (!superclass_seen) {</div><div class='del'>-			c = p;	/* move insertion point */</div><div class='del'>-		    }</div><div class='del'>-		    goto skip;</div><div class='del'>-		}</div><div class='del'>-		break;</div><div class='del'>-	      case T_CLASS:</div><div class='del'>-		superclass_seen = Qtrue;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	c = RCLASS(c)-&gt;super = include_class_new(module, RCLASS(c)-&gt;super);</div><div class='del'>-	changed = 1;</div><div class='del'>-      skip:</div><div class='del'>-	module = RCLASS(module)-&gt;super;</div><div class='del'>-    }</div><div class='del'>-    if (changed) rb_clear_cache();</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_mod_included_modules(mod)</div><div class='del'>-    VALUE mod;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='del'>-    VALUE p;</div><div class='del'>-</div><div class='del'>-    for (p = RCLASS(mod)-&gt;super; p; p = RCLASS(p)-&gt;super) {</div><div class='del'>-	if (BUILTIN_TYPE(p) == T_ICLASS) {</div><div class='del'>-	    rb_ary_push(ary, RBASIC(p)-&gt;klass);</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'>- *  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='del'>-VALUE</div><div class='del'>-rb_mod_include_p(mod, mod2)</div><div class='del'>-    VALUE mod;</div><div class='del'>-    VALUE mod2;</div><div class='del'>-{</div><div class='del'>-    VALUE p;</div><div class='del'>-</div><div class='del'>-    Check_Type(mod2, T_MODULE);</div><div class='del'>-    for (p = RCLASS(mod)-&gt;super; p; p = RCLASS(p)-&gt;super) {</div><div class='del'>-	if (BUILTIN_TYPE(p) == T_ICLASS) {</div><div class='del'>-	    if (RBASIC(p)-&gt;klass == mod2) 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'>- *  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='del'>-VALUE</div><div class='del'>-rb_mod_ancestors(mod)</div><div class='del'>-    VALUE mod;</div><div class='del'>-{</div><div class='del'>-    VALUE p, ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    for (p = mod; p; p = RCLASS(p)-&gt;super) {</div><div class='del'>-	if (FL_TEST(p, FL_SINGLETON))</div><div class='del'>-	    continue;</div><div class='del'>-	if (BUILTIN_TYPE(p) == T_ICLASS) {</div><div class='del'>-	    rb_ary_push(ary, RBASIC(p)-&gt;klass);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_ary_push(ary, p);</div><div class='add'>+	/* ignore if module included already in superclasses */</div><div class='add'>+	for (p = class-&gt;super; p; p = p-&gt;super) {</div><div class='add'>+	    if (BUILTIN_TYPE(p) == T_ICLASS &amp;&amp; p-&gt;m_tbl == module-&gt;m_tbl)</div><div class='add'>+		goto ignore_module;</div><div class='ctx'> 	}</div><div class='del'>-    }</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-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='del'>-    VALUE ary;</div><div class='del'>-    long visi;</div><div class='del'>-{</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='del'>-    }</div><div class='del'>-    if (visi) {</div><div class='del'>-	rb_ary_push(ary, rb_str_new2(rb_id2name(name)));</div><div class='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-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='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return ins_methods_push(name, type, ary, -1); /* everything but private */</div><div class='del'>-}</div><div class='del'>-</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='del'>-}</div><div class='del'>-</div><div class='del'>-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='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    return ins_methods_push(name, type, ary, NOEX_PRIVATE);</div><div class='del'>-}</div><div class='del'>-</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='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-method_entry(key, body, list)</div><div class='del'>-    ID key;</div><div class='del'>-    NODE *body;</div><div class='del'>-    st_table *list;</div><div class='del'>-{</div><div class='del'>-    long type;</div><div class='del'>-</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-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='del'>-    VALUE mod;</div><div class='del'>-    int (*func) _((ID, long, VALUE));</div><div class='del'>-{</div><div class='del'>-    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='add'>+	class-&gt;super = include_class_new(module, class-&gt;super);</div><div class='add'>+	added = TRUE;</div><div class='add'>+	class = class-&gt;super;</div><div class='add'>+      ignore_module:</div><div class='add'>+	module = module-&gt;super;</div><div class='ctx'>     }</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='add'>+    if (added) {</div><div class='add'>+	rb_clear_cache2(class);</div><div class='ctx'>     }</div><div class='del'>-</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='del'>-    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='del'>-    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='del'>-VALUE</div><div class='del'>-rb_class_instance_methods(argc, argv, mod)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='del'>-{</div><div class='del'>-    return class_instance_method_list(argc, argv, mod, ins_methods_i);</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_class_protected_instance_methods(argc, argv, mod)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='del'>-{</div><div class='del'>-    return class_instance_method_list(argc, argv, mod, ins_methods_prot_i);</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_class_private_instance_methods(argc, argv, mod)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='del'>-{</div><div class='del'>-    return class_instance_method_list(argc, argv, mod, ins_methods_priv_i);</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_class_public_instance_methods(argc, argv, mod)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='del'>-{</div><div class='del'>-    return class_instance_method_list(argc, argv, mod, ins_methods_pub_i);</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_obj_singleton_methods(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='add'>+void</div><div class='add'>+rb_add_method(class, mid, node, undef)</div><div class='add'>+    struct RClass *class;</div><div class='add'>+    ID mid;</div><div class='add'>+    NODE *node;</div><div class='add'>+    int undef;</div><div class='ctx'> {</div><div class='del'>-    VALUE recur, ary, klass;</div><div class='del'>-    st_table *list;</div><div class='add'>+    struct SMethod *body;</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='del'>-    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='del'>-	klass = RCLASS(klass)-&gt;super;</div><div class='del'>-    }</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='del'>-	    klass = RCLASS(klass)-&gt;super;</div><div class='add'>+    if (class == Qnil) class = (struct RClass*)C_Object;</div><div class='add'>+    if (st_lookup(class-&gt;m_tbl, mid, &amp;body)) {</div><div class='add'>+	if (verbose) {</div><div class='add'>+	    Warning("redefine %s", rb_id2name(mid));</div><div class='ctx'> 	}</div><div class='add'>+	rb_clear_cache(body);</div><div class='add'>+	method_free(body);</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='del'>-</div><div class='del'>-    return ary;</div><div class='add'>+    body = ALLOC(struct SMethod);</div><div class='add'>+    body-&gt;node = node;</div><div class='add'>+    if (BUILTIN_TYPE(class) == T_MODULE)</div><div class='add'>+	body-&gt;origin = Qnil;</div><div class='add'>+    else</div><div class='add'>+	body-&gt;origin = class;</div><div class='add'>+    body-&gt;id = mid;</div><div class='add'>+    body-&gt;undef = undef;</div><div class='add'>+    body-&gt;count = 1;</div><div class='add'>+    st_insert(class-&gt;m_tbl, mid, body);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_define_method_id(klass, name, func, argc)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID name;</div><div class='add'>+rb_define_method(class, name, func, argc)</div><div class='add'>+    struct RClass *class;</div><div class='add'>+    char *name;</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='del'>-}</div><div class='add'>+    NODE *temp = NEW_CFUNC(func, argc);</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_define_method(klass, name, func, argc)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name;</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    int argc;</div><div class='del'>-{</div><div class='del'>-    ID id = rb_intern(name);</div><div class='del'>-    int ex = NOEX_PUBLIC;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    rb_add_method(klass, id, NEW_CFUNC(func, argc), ex);</div><div class='add'>+    rb_add_method(class, rb_intern(name), temp, FALSE);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_define_protected_method(klass, name, func, argc)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name;</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    int argc;</div><div class='add'>+rb_undef_method(class, name)</div><div class='add'>+    struct RClass *class;</div><div class='add'>+    char *name;</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(class, rb_intern(name), Qnil, TRUE);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_define_private_method(klass, name, func, argc)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name;</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    int argc;</div><div class='del'>-{</div><div class='del'>-    rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_undef_method(klass, name)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name;</div><div class='del'>-{</div><div class='del'>-    rb_add_method(klass, rb_intern(name), 0, NOEX_UNDEF);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define SPECIAL_SINGLETON(x,c) do {\</div><div class='del'>-    if (obj == (x)) {\</div><div class='del'>-	return c;\</div><div class='del'>-    }\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='del'>-rb_singleton_class(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE klass;</div><div class='del'>-</div><div class='del'>-    if (FIXNUM_P(obj) || SYMBOL_P(obj)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "can't define singleton");</div><div class='del'>-    }</div><div class='del'>-    if (rb_special_const_p(obj)) {</div><div class='del'>-	SPECIAL_SINGLETON(Qnil, rb_cNilClass);</div><div class='del'>-	SPECIAL_SINGLETON(Qfalse, rb_cFalseClass);</div><div class='del'>-	SPECIAL_SINGLETON(Qtrue, rb_cTrueClass);</div><div class='del'>-	rb_bug("unknown immediate %ld", obj);</div><div class='add'>+rb_single_class(obj)</div><div class='add'>+    struct RBasic *obj;</div><div class='add'>+{</div><div class='add'>+    switch (TYPE(obj)) {</div><div class='add'>+      case T_OBJECT:</div><div class='add'>+      case T_CLASS:</div><div class='add'>+      case T_MODULE:</div><div class='add'>+      case T_STRUCT:</div><div class='add'>+	break;</div><div class='add'>+      default:</div><div class='add'>+	Fail("can't define single method for built-in classes");</div><div class='add'>+	break;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    DEFER_INTS;</div><div class='del'>-    if (FL_TEST(RBASIC(obj)-&gt;klass, FL_SINGLETON) &amp;&amp;</div><div class='del'>-	rb_iv_get(RBASIC(obj)-&gt;klass, "__attached__") == obj) {</div><div class='del'>-	klass = RBASIC(obj)-&gt;klass;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	klass = rb_make_metaclass(obj, RBASIC(obj)-&gt;klass);</div><div class='add'>+    if (FL_TEST(obj-&gt;class, FL_SINGLE)) {</div><div class='add'>+	return (VALUE)obj-&gt;class;</div><div class='ctx'>     }</div><div class='del'>-    if (OBJ_TAINTED(obj)) {</div><div class='del'>-	OBJ_TAINT(klass);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	FL_UNSET(klass, FL_TAINT);</div><div class='del'>-    }</div><div class='del'>-    if (OBJ_FROZEN(obj)) OBJ_FREEZE(klass);</div><div class='del'>-    ALLOW_INTS;</div><div class='del'>-</div><div class='del'>-    return klass;</div><div class='add'>+    return obj-&gt;class = single_class_new(obj-&gt;class);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_define_singleton_method(obj, name, func, argc)</div><div class='add'>+rb_define_single_method(obj, name, func, argc)</div><div class='ctx'>     VALUE obj;</div><div class='del'>-    const char *name;</div><div class='add'>+    char *name;</div><div class='ctx'>     VALUE (*func)();</div><div class='ctx'>     int argc;</div><div class='ctx'> {</div><div class='del'>-    rb_define_method(rb_singleton_class(obj), name, func, argc);</div><div class='add'>+    rb_define_method(rb_single_class(obj), name, func, argc, FALSE);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_define_module_function(module, name, func, argc)</div><div class='del'>-    VALUE module;</div><div class='del'>-    const char *name;</div><div class='add'>+rb_define_mfunc(class, name, func, argc)</div><div class='add'>+    struct RClass *class;</div><div class='add'>+    char *name;</div><div class='ctx'>     VALUE (*func)();</div><div class='ctx'>     int argc;</div><div class='ctx'> {</div><div class='del'>-    rb_define_private_method(module, name, func, argc);</div><div class='del'>-    rb_define_singleton_method(module, name, func, argc);</div><div class='add'>+    rb_define_method(class, name, func, argc);</div><div class='add'>+    rb_define_single_method(class, name, func, argc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_define_global_function(name, func, argc)</div><div class='del'>-    const char *name;</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    int argc;</div><div class='add'>+rb_define_alias(class, name1, name2)</div><div class='add'>+    struct RClass *class;</div><div class='add'>+    char *name1, *name2;</div><div class='ctx'> {</div><div class='del'>-    rb_define_module_function(rb_mKernel, name, func, argc);</div><div class='add'>+    rb_alias(class, rb_intern(name1), rb_intern(name2));</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_define_alias(klass, name1, name2)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name1, *name2;</div><div class='add'>+rb_define_attr(class, name, pub)</div><div class='add'>+    struct RClass *class;</div><div class='add'>+    char *name;</div><div class='add'>+    int pub;</div><div class='ctx'> {</div><div class='del'>-    rb_alias(klass, rb_intern(name1), rb_intern(name2));</div><div class='add'>+    char *buf;</div><div class='add'>+    ID attr, attreq, attriv;</div><div class='add'>+</div><div class='add'>+    attr = rb_intern(name);</div><div class='add'>+    buf = (char*)alloca(strlen(name) + 2);</div><div class='add'>+    sprintf(buf, "%s=", name);</div><div class='add'>+    attreq = rb_intern(buf);</div><div class='add'>+    sprintf(buf, "@%s", name);</div><div class='add'>+    attriv = rb_intern(buf);</div><div class='add'>+    if (rb_get_method_body(class, attr, 0) == Qnil) {</div><div class='add'>+	rb_add_method(class, attr, NEW_IVAR(attriv), TRUE);</div><div class='add'>+    }</div><div class='add'>+    if (pub &amp;&amp; rb_get_method_body(class, attreq, 0) == Qnil) {</div><div class='add'>+	rb_add_method(class, attreq, NEW_ATTRSET(attriv), TRUE);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_define_attr(klass, name, read, write)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name;</div><div class='del'>-    int read, write;</div><div class='add'>+rb_define_single_attr(obj, name, pub)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    char *name;</div><div class='add'>+    int pub;</div><div class='ctx'> {</div><div class='del'>-    rb_attr(klass, rb_intern(name), read, write, Qfalse);</div><div class='add'>+    rb_define_attr(rb_single_class(obj), name, pub);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-#include &lt;stdarg.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a,b)</div><div class='del'>-#else</div><div class='ctx'> #include &lt;varargs.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a)</div><div class='del'>-#endif</div><div class='add'>+#include &lt;ctype.h&gt;</div><div class='ctx'> </div><div class='ctx'> int</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_scan_args(argc, argv, fmt, va_alist)</div><div class='del'>-    int argc;</div><div class='del'>-    const VALUE *argv;</div><div class='del'>-    const char *fmt;</div><div class='add'>+rb_scan_args(args, fmt, va_alist)</div><div class='add'>+    VALUE args;</div><div class='add'>+    char *fmt;</div><div class='ctx'>     va_dcl</div><div class='del'>-#endif</div><div class='ctx'> {</div><div class='del'>-    int n, i = 0;</div><div class='del'>-    const char *p = fmt;</div><div class='add'>+    int n, i, len;</div><div class='add'>+    char *p = fmt;</div><div class='ctx'>     VALUE *var;</div><div class='ctx'>     va_list vargs;</div><div class='ctx'> </div><div class='del'>-    va_init_list(vargs, fmt);</div><div class='add'>+    if (NIL_P(args)) {</div><div class='add'>+	len = 0;</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(args, T_ARRAY);</div><div class='add'>+	len = RARRAY(args)-&gt;len;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    va_start(vargs);</div><div class='ctx'> </div><div class='del'>-    if (*p == '*') goto rest_arg;</div><div class='add'>+    if (*p == '*') {</div><div class='add'>+	var = va_arg(vargs, VALUE*);</div><div class='add'>+	*var = args;</div><div class='add'>+	return len;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-    if (ISDIGIT(*p)) {</div><div class='add'>+    if (isdigit(*p)) {</div><div class='ctx'> 	n = *p - '0';</div><div class='del'>-	if (n &gt; argc)</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, n);</div><div class='add'>+	if (n &gt; len)</div><div class='add'>+	    Fail("Wrong number of arguments for %s",</div><div class='add'>+		 rb_id2name(the_env-&gt;last_func));</div><div class='ctx'> 	for (i=0; i&lt;n; i++) {</div><div class='ctx'> 	    var = va_arg(vargs, VALUE*);</div><div class='del'>-	    if (var) *var = argv[i];</div><div class='add'>+	    *var = ary_entry(args, i);</div><div class='ctx'> 	}</div><div class='ctx'> 	p++;</div><div class='ctx'>     }</div><div class='hunk'>@@ -1002,56 +338,41 @@ rb_scan_args(argc, argv, fmt, va_alist)</div><div class='ctx'> 	goto error;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (ISDIGIT(*p)) {</div><div class='add'>+    if (isdigit(*p)) {</div><div class='ctx'> 	n = i + *p - '0';</div><div class='ctx'> 	for (; i&lt;n; i++) {</div><div class='ctx'> 	    var = va_arg(vargs, VALUE*);</div><div class='del'>-	    if (argc &gt; i) {</div><div class='del'>-		if (var) *var = argv[i];</div><div class='add'>+	    if (len &gt; i) {</div><div class='add'>+		*var = ary_entry(args, i);</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='del'>-		if (var) *var = Qnil;</div><div class='add'>+		*var = Qnil;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'> 	p++;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if(*p == '*') {</div><div class='del'>-      rest_arg:</div><div class='ctx'> 	var = va_arg(vargs, VALUE*);</div><div class='del'>-	if (argc &gt; i) {</div><div class='del'>-	    if (var) *var = rb_ary_new4(argc-i, argv+i);</div><div class='del'>-	    i = argc;</div><div class='add'>+	if (len &gt; i) {</div><div class='add'>+	    *var = ary_new4(RARRAY(args)-&gt;len-i, RARRAY(args)-&gt;ptr+i);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='del'>-	    if (var) *var = rb_ary_new();</div><div class='add'>+	    *var = ary_new();</div><div class='ctx'> 	}</div><div class='del'>-	p++;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    if (*p == '&amp;') {</div><div class='del'>-	var = va_arg(vargs, VALUE*);</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    *var = rb_block_proc();</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    *var = Qnil;</div><div class='add'>+    else if (*p == '\0') {</div><div class='add'>+	if (len &gt; i) {</div><div class='add'>+	    Fail("Wrong # of arguments(%d for %d)", len, i);</div><div class='ctx'> 	}</div><div class='del'>-	p++;</div><div class='ctx'>     }</div><div class='del'>-    va_end(vargs);</div><div class='del'>-</div><div class='del'>-    if (*p != '\0') {</div><div class='add'>+    else {</div><div class='ctx'> 	goto error;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (argc &gt; i) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, i);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return argc;</div><div class='add'>+    va_end(vargs);</div><div class='add'>+    return len;</div><div class='ctx'> </div><div class='ctx'>   error:</div><div class='del'>-    rb_fatal("bad scan arg format: %s", fmt);</div><div class='del'>-    return 0;</div><div class='add'>+    Fail("bad scan arg format: %s", fmt);</div><div class='ctx'> }</div><div class='head'>diff --git a/common.mk b/common.mk<br/>deleted file mode 100644<br/>index 7b861f845c..0000000000<br/>--- a/<a href='/ruby.git/tree/common.mk?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>common.mk</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,467 +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'>-RUBYLIB       = -</div><div class='del'>-RUBYOPT       = -</div><div class='del'>-</div><div class='del'>-SPEC_GIT_BASE = git://github.com/brixen</div><div class='del'>-MSPEC_GIT_URL = $(SPEC_GIT_BASE)/mspec.git</div><div class='del'>-RUBYSPEC_GIT_URL = $(SPEC_GIT_BASE)/rubyspec.git</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'>-LIBRUBY_EXTS  = ./.libruby-with-ext.time</div><div class='del'>-RDOCOUT       = $(EXTOUT)/rdoc</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'>-		enumerator.$(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'>-		--extout="$(EXTOUT)" \</div><div class='del'>-		--mflags="$(MFLAGS)" \</div><div class='del'>-		--make-flags="$(MAKEFLAGS)"</div><div class='del'>-EXTMK_ARGS    =	$(SCRIPT_ARGS) --extension $(EXTS) --extstatic $(EXTSTATIC) --</div><div class='del'>-INSTRUBY_ARGS =	$(SCRIPT_ARGS) \</div><div class='del'>-		--data-mode=$(INSTALL_DATA_MODE) \</div><div class='del'>-		--prog-mode=$(INSTALL_PROG_MODE) \</div><div class='del'>-		--installed-list $(INSTALLED_LIST)</div><div class='del'>-INSTALL_PROG_MODE = 0755</div><div class='del'>-INSTALL_DATA_MODE = 0644</div><div class='del'>-</div><div class='del'>-PRE_LIBRUBY_UPDATE = $(MINIRUBY) -e 'ARGV[1] or File.unlink(ARGV[0]) rescue nil' -- \</div><div class='del'>-			$(LIBRUBY_EXTS) $(LIBRUBY_SO_UPDATE)</div><div class='del'>-</div><div class='del'>-TESTSDIR      = $(srcdir)/test</div><div class='del'>-TESTWORKDIR   = testwork</div><div class='del'>-</div><div class='del'>-all: $(MKFILES) $(PREP) $(RBCONFIG) $(LIBRUBY)</div><div class='del'>-	@$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" $(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) $(LIBRUBY_SO_UPDATE)</div><div class='del'>-</div><div class='del'>-$(LIBRUBY_EXTS):</div><div class='del'>-	@exit &gt; $@</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: pre-install-nodoc do-install-nodoc post-install-nodoc</div><div class='del'>-pre-install-nodoc:: pre-install-local pre-install-ext</div><div class='del'>-do-install-nodoc: </div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --mantype="$(MANTYPE)"</div><div class='del'>-post-install-nodoc:: post-install-local post-install-ext</div><div class='del'>-</div><div class='del'>-install-local: pre-install-local do-install-local post-install-local</div><div class='del'>-pre-install-local:: pre-install-bin pre-install-lib pre-install-man</div><div class='del'>-do-install-local:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=local --mantype="$(MANTYPE)"</div><div class='del'>-loadpath: $(PREP)</div><div class='del'>-	$(MINIRUBY) -e 'p $$:'</div><div class='del'>-</div><div class='del'>-post-install-local:: post-install-bin post-install-lib post-install-man</div><div class='del'>-</div><div class='del'>-install-ext: pre-install-ext do-install-ext post-install-ext</div><div class='del'>-pre-install-ext:: pre-install-ext-arch pre-install-ext-comm</div><div class='del'>-do-install-ext:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext</div><div class='del'>-post-install-ext:: post-install-ext-arch post-install-ext-comm</div><div class='del'>-</div><div class='del'>-install-arch: pre-install-arch do-install-arch post-install-arch</div><div class='del'>-pre-install-arch:: pre-install-bin pre-install-ext-arch</div><div class='del'>-do-install-arch:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin --install=ext-arch</div><div class='del'>-post-install-arch:: post-install-bin post-install-ext-arch</div><div class='del'>-</div><div class='del'>-install-comm: pre-install-comm do-install-comm post-install-comm</div><div class='del'>-pre-install-comm:: pre-install-lib pre-install-ext-comm pre-install-man</div><div class='del'>-do-install-comm:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=lib --install=ext-comm --install=man</div><div class='del'>-post-install-comm:: post-install-lib post-install-ext-comm post-install-man</div><div class='del'>-</div><div class='del'>-install-bin: pre-install-bin do-install-bin post-install-bin</div><div class='del'>-pre-install-bin:: install-prereq</div><div class='del'>-do-install-bin:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin</div><div class='del'>-post-install-bin::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-install-lib: pre-install-lib do-install-lib post-install-lib</div><div class='del'>-pre-install-lib:: install-prereq</div><div class='del'>-do-install-lib:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=lib</div><div class='del'>-post-install-lib::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-install-ext-comm: pre-install-ext-comm do-install-ext-comm post-install-ext-comm</div><div class='del'>-pre-install-ext-comm:: install-prereq</div><div class='del'>-do-install-ext-comm:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-comm</div><div class='del'>-post-install-ext-comm::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-install-ext-arch: pre-install-ext-arch do-install-ext-arch post-install-ext-arch</div><div class='del'>-pre-install-ext-arch:: install-prereq</div><div class='del'>-do-install-ext-arch:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-arch</div><div class='del'>-post-install-ext-arch::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-install-man: pre-install-man do-install-man post-install-man</div><div class='del'>-pre-install-man:: install-prereq</div><div class='del'>-do-install-man:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=man --mantype="$(MANTYPE)"</div><div class='del'>-post-install-man::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-what-where: no-install</div><div class='del'>-no-install: no-install-nodoc no-install-doc</div><div class='del'>-what-where-all: no-install-all</div><div class='del'>-no-install-all: no-install-nodoc</div><div class='del'>-</div><div class='del'>-what-where-nodoc: no-install-nodoc</div><div class='del'>-no-install-nodoc: pre-no-install-nodoc dont-install-nodoc post-no-install-nodoc</div><div class='del'>-pre-no-install-nodoc:: pre-no-install-local pre-no-install-ext</div><div class='del'>-dont-install-nodoc: </div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --mantype="$(MANTYPE)"</div><div class='del'>-post-no-install-nodoc:: post-no-install-local post-no-install-ext</div><div class='del'>-</div><div class='del'>-what-where-local: no-install-local</div><div class='del'>-no-install-local: pre-no-install-local dont-install-local post-no-install-local</div><div class='del'>-pre-no-install-local:: pre-no-install-bin pre-no-install-lib pre-no-install-man</div><div class='del'>-dont-install-local:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=local --mantype="$(MANTYPE)"</div><div class='del'>-post-no-install-local:: post-no-install-bin post-no-install-lib post-no-install-man</div><div class='del'>-</div><div class='del'>-what-where-ext: no-install-ext</div><div class='del'>-no-install-ext: pre-no-install-ext dont-install-ext post-no-install-ext</div><div class='del'>-pre-no-install-ext:: pre-no-install-ext-arch pre-no-install-ext-comm</div><div class='del'>-dont-install-ext:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext</div><div class='del'>-post-no-install-ext:: post-no-install-ext-arch post-no-install-ext-comm</div><div class='del'>-</div><div class='del'>-what-where-arch: no-install-arch</div><div class='del'>-no-install-arch: pre-no-install-arch dont-install-arch post-no-install-arch</div><div class='del'>-pre-no-install-arch:: pre-no-install-bin pre-no-install-ext-arch</div><div class='del'>-dont-install-arch:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin --install=ext-arch</div><div class='del'>-post-no-install-arch:: post-no-install-lib post-no-install-man post-no-install-ext-arch</div><div class='del'>-</div><div class='del'>-what-where-comm: no-install-comm</div><div class='del'>-no-install-comm: pre-no-install-comm dont-install-comm post-no-install-comm</div><div class='del'>-pre-no-install-comm:: pre-no-install-lib pre-no-install-ext-comm pre-no-install-man</div><div class='del'>-dont-install-comm:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=lib --install=ext-comm --install=man</div><div class='del'>-post-no-install-comm:: post-no-install-lib post-no-install-ext-comm post-no-install-man</div><div class='del'>-</div><div class='del'>-what-where-bin: no-install-bin</div><div class='del'>-no-install-bin: pre-no-install-bin dont-install-bin post-no-install-bin</div><div class='del'>-pre-no-install-bin:: install-prereq</div><div class='del'>-dont-install-bin:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin</div><div class='del'>-post-no-install-bin::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-what-where-lib: no-install-lib</div><div class='del'>-no-install-lib: pre-no-install-lib dont-install-lib post-no-install-lib</div><div class='del'>-pre-no-install-lib:: install-prereq</div><div class='del'>-dont-install-lib:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=lib</div><div class='del'>-post-no-install-lib::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-what-where-ext-comm: no-install-ext-comm</div><div class='del'>-no-install-ext-comm: pre-no-install-ext-comm dont-install-ext-comm post-no-install-ext-comm</div><div class='del'>-pre-no-install-ext-comm:: install-prereq</div><div class='del'>-dont-install-ext-comm:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-comm</div><div class='del'>-post-no-install-ext-comm::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-what-where-ext-arch: no-install-ext-arch</div><div class='del'>-no-install-ext-arch: pre-no-install-ext-arch dont-install-ext-arch post-no-install-ext-arch</div><div class='del'>-pre-no-install-ext-arch:: install-prereq</div><div class='del'>-dont-install-ext-arch:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-arch</div><div class='del'>-post-no-install-ext-arch::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-what-where-man: no-install-man</div><div class='del'>-no-install-man: pre-no-install-man dont-install-man post-no-install-man</div><div class='del'>-pre-no-install-man:: install-prereq</div><div class='del'>-dont-install-man:</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=man --mantype="$(MANTYPE)"</div><div class='del'>-post-no-install-man::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-install-doc: rdoc pre-install-doc do-install-doc post-install-doc</div><div class='del'>-pre-install-doc:: install-prereq</div><div class='del'>-do-install-doc: $(PROGRAM)</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb --make="$(MAKE)" $(INSTRUBY_ARGS) --install=rdoc --rdoc-output="$(RDOCOUT)"</div><div class='del'>-post-install-doc::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-rdoc: $(PROGRAM) PHONY</div><div class='del'>-	@echo Generating RDoc documentation</div><div class='del'>-	$(RUNRUBY) "$(srcdir)/bin/rdoc" --all --ri --op "$(RDOCOUT)" "$(srcdir)"</div><div class='del'>-</div><div class='del'>-what-where-doc: no-install-doc</div><div class='del'>-no-install-doc: pre-no-install-doc dont-install-doc post-no-install-doc</div><div class='del'>-pre-no-install-doc:: install-prereq</div><div class='del'>-dont-install-doc::</div><div class='del'>-	$(MINIRUBY) $(srcdir)/instruby.rb -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=rdoc --rdoc-output="$(RDOCOUT)"</div><div class='del'>-post-no-install-doc::</div><div class='del'>-	@$(NULLCMD)</div><div class='del'>-</div><div class='del'>-CLEAR_INSTALLED_LIST = clear-installed-list</div><div class='del'>-</div><div class='del'>-install-prereq: $(CLEAR_INSTALLED_LIST)</div><div class='del'>-</div><div class='del'>-clear-installed-list:</div><div class='del'>-	@exit &gt; $(INSTALLED_LIST)</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) $(MINIOBJS) $(MAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY) $(LIBRUBY_ALIASES)</div><div class='del'>-	@$(RM) $(PROGRAM) $(WPROGRAM) miniruby$(EXEEXT) dmyext.$(OBJEXT) $(ARCHFILE) .*.time</div><div class='del'>-	@$(RM) y.tab.c y.output</div><div class='del'>-clean-ext:</div><div class='del'>-	@-$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" $(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 $(PREP)</div><div class='del'>-distclean-ext:</div><div class='del'>-	@-$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" $(EXTMK_ARGS) distclean</div><div class='del'>-</div><div class='del'>-realclean:: realclean-ext realclean-local</div><div class='del'>-realclean-local:: distclean-local</div><div class='del'>-	@$(RM) parse.c lex.c</div><div class='del'>-realclean-ext::</div><div class='del'>-	@-$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" $(EXTMK_ARGS) realclean</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) "$(srcdir)/test/runner.rb" --basedir="$(TESTSDIR)" --runner=$(TESTUI) $(TESTS)</div><div class='del'>-</div><div class='del'>-extconf:</div><div class='del'>-	$(MINIRUBY) -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'>-ia64.$(OBJEXT): {$(VPATH)}ia64.s</div><div class='del'>-	$(CC) $(CFLAGS) -c $&lt;</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 dln.$(OBJEXT)</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'>-enumerator.$(OBJEXT): {$(VPATH)}enumerator.c {$(VPATH)}ruby.h config.h \</div><div class='del'>-  {$(VPATH)}defines.h {$(VPATH)}intern.h {$(VPATH)}missing.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 1488b2c65d..84b2583ce5 100644<br/>--- a/<a href='/ruby.git/tree/compar.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>compar.c</a><br/>+++ b/<a href='/ruby.git/tree/compar.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>compar.c</a></div><div class='hunk'>@@ -1,243 +1,99 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   compar.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='ctx'>   created at: Thu Aug 26 14:39:48 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> </div><div class='del'>-VALUE rb_mComparable;</div><div class='add'>+VALUE M_Comparable;</div><div class='ctx'> </div><div class='ctx'> static ID cmp;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-rb_cmpint(val, a, b)</div><div class='del'>-    VALUE val, a, b;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(val)) {</div><div class='del'>-	rb_cmperr(a, b);</div><div class='del'>-    }</div><div class='del'>-    if (FIXNUM_P(val)) return FIX2INT(val);</div><div class='del'>-    if (TYPE(val) == T_BIGNUM) {</div><div class='del'>-	if (RBIGNUM(val)-&gt;sign) return 1;</div><div class='del'>-	return -1;</div><div class='del'>-    }</div><div class='del'>-    if (RTEST(rb_funcall(val, '&gt;', 1, INT2FIX(0)))) return 1;</div><div class='del'>-    if (RTEST(rb_funcall(val, '&lt;', 1, INT2FIX(0)))) return -1;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</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='ctx'> static VALUE</div><div class='del'>-cmp_failed()</div><div class='add'>+Fcmp_eq(this, other)</div><div class='add'>+    VALUE this, other;</div><div class='ctx'> {</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='del'>-static VALUE</div><div class='del'>-cmp_equal(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='del'>-{</div><div class='del'>-    VALUE a[2];</div><div class='del'>-</div><div class='del'>-    if (x == y) return Qtrue;</div><div class='add'>+    VALUE c = rb_funcall(this, cmp, 1, other);</div><div class='add'>+    int t = NUM2INT(c);</div><div class='ctx'> </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'>+    if (t == 0) return TRUE;</div><div class='add'>+    return FALSE;</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='del'>-cmp_gt(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='add'>+Fcmp_gt(this, other)</div><div class='add'>+    VALUE this, other;</div><div class='ctx'> {</div><div class='del'>-    VALUE c = rb_funcall(x, cmp, 1, y);</div><div class='add'>+    VALUE c = rb_funcall(this, cmp, 1, other);</div><div class='add'>+    int t = NUM2INT(c);</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='del'>-    return Qfalse;</div><div class='add'>+    if (t &gt; 0) return other;</div><div class='add'>+    return FALSE;</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='del'>-cmp_ge(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='add'>+Fcmp_ge(this, other)</div><div class='add'>+    VALUE this, other;</div><div class='ctx'> {</div><div class='del'>-    VALUE c = rb_funcall(x, cmp, 1, y);</div><div class='add'>+    VALUE c = rb_funcall(this, cmp, 1, other);</div><div class='add'>+    int t = NUM2INT(c);</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='del'>-    return Qfalse;</div><div class='add'>+    if (t &gt;= 0) return other;</div><div class='add'>+    return FALSE;</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='del'>-cmp_lt(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='add'>+Fcmp_lt(this, other)</div><div class='add'>+    VALUE this, other;</div><div class='ctx'> {</div><div class='del'>-    VALUE c = rb_funcall(x, cmp, 1, y);</div><div class='add'>+    VALUE c = rb_funcall(this, cmp, 1, other);</div><div class='add'>+    int t = NUM2INT(c);</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='del'>-    return Qfalse;</div><div class='add'>+    if (t &lt; 0) return other;</div><div class='add'>+    return FALSE;</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='del'>-cmp_le(x, y)</div><div class='del'>-    VALUE x, y;</div><div class='add'>+Fcmp_le(this, other)</div><div class='add'>+    VALUE this, other;</div><div class='ctx'> {</div><div class='del'>-    VALUE c = rb_funcall(x, cmp, 1, y);</div><div class='add'>+    VALUE c = rb_funcall(this, cmp, 1, other);</div><div class='add'>+    int t = NUM2INT(c);</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='del'>-    return Qfalse;</div><div class='add'>+    if (t &lt;= 0) return other;</div><div class='add'>+    return FALSE;</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='del'>-cmp_between(x, min, max)</div><div class='del'>-    VALUE x, min, max;</div><div class='add'>+Fcmp_between(this, min, max)</div><div class='add'>+    VALUE this, min, max;</div><div class='ctx'> {</div><div class='del'>-    if (RTEST(cmp_lt(x, min))) return Qfalse;</div><div class='del'>-    if (RTEST(cmp_gt(x, max))) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='add'>+    VALUE c = rb_funcall(this, cmp, 1, min);</div><div class='add'>+    int t = NUM2INT(c);</div><div class='add'>+    if (t &lt; 0) return FALSE;</div><div class='add'>+</div><div class='add'>+    c = rb_funcall(this, cmp, 1, min);</div><div class='add'>+    t = NUM2INT(c);</div><div class='add'>+    if (t &gt; 0) return FALSE;</div><div class='add'>+    return TRUE;</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='del'>-void</div><div class='ctx'> Init_Comparable()</div><div class='ctx'> {</div><div class='del'>-    rb_mComparable = rb_define_module("Comparable");</div><div class='del'>-    rb_define_method(rb_mComparable, "==", cmp_equal, 1);</div><div class='del'>-    rb_define_method(rb_mComparable, "&gt;", cmp_gt, 1);</div><div class='del'>-    rb_define_method(rb_mComparable, "&gt;=", cmp_ge, 1);</div><div class='del'>-    rb_define_method(rb_mComparable, "&lt;", cmp_lt, 1);</div><div class='del'>-    rb_define_method(rb_mComparable, "&lt;=", cmp_le, 1);</div><div class='del'>-    rb_define_method(rb_mComparable, "between?", cmp_between, 2);</div><div class='add'>+    M_Comparable = rb_define_module("Comparable");</div><div class='add'>+    rb_define_method(M_Comparable, "==", Fcmp_eq, 1);</div><div class='add'>+    rb_define_method(M_Comparable, "&gt;", Fcmp_gt, 1);</div><div class='add'>+    rb_define_method(M_Comparable, "&gt;=", Fcmp_ge, 1);</div><div class='add'>+    rb_define_method(M_Comparable, "&lt;", Fcmp_lt, 1);</div><div class='add'>+    rb_define_method(M_Comparable, "&lt;=", Fcmp_le, 1);</div><div class='add'>+    rb_define_method(M_Comparable, "between", Fcmp_between, 2);</div><div class='ctx'> </div><div class='ctx'>     cmp = rb_intern("&lt;=&gt;");</div><div class='ctx'> }</div><div class='head'>diff --git a/config.guess b/config.guess<br/>deleted file mode 100644<br/>index dd1688b7b5..0000000000<br/>--- a/<a href='/ruby.git/tree/config.guess?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>config.guess</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1459 +0,0 @@</div><div class='del'>-#! /bin/sh</div><div class='del'>-# 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='del'>-</div><div class='del'>-timestamp='2004-06-11'</div><div class='del'>-</div><div class='del'>-# This file is free software; you can redistribute it and/or modify it</div><div class='del'>-# under the terms of the GNU General Public License as published by</div><div class='del'>-# the Free Software Foundation; either version 2 of the License, or</div><div class='del'>-# (at your option) any later version.</div><div class='del'>-#</div><div class='del'>-# This program is distributed in the hope that it will be useful, but</div><div class='del'>-# WITHOUT ANY WARRANTY; without even the implied warranty of</div><div class='del'>-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</div><div class='del'>-# 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, Boston, MA 02111-1307, USA.</div><div class='del'>-#</div><div class='del'>-# As a special exception to the GNU General Public License, if you</div><div class='del'>-# distribute this file as part of a program that contains a</div><div class='del'>-# configuration script generated by Autoconf, you may include it under</div><div class='del'>-# the same distribution terms that you use for the rest of that program.</div><div class='del'>-</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='del'>-#</div><div class='del'>-# This script attempts to guess a canonical system name similar to</div><div class='del'>-# config.sub.  If it succeeds, it prints the system name on stdout, and</div><div class='del'>-# exits with 0.  Otherwise, it exits with 1.</div><div class='del'>-#</div><div class='del'>-# The plan is that this can be called by configure scripts if you</div><div class='del'>-# don't specify an explicit build system type.</div><div class='del'>-</div><div class='del'>-me=`echo "$0" | sed -e 's,.*/,,'`</div><div class='del'>-</div><div class='del'>-usage="\</div><div class='del'>-Usage: $0 [OPTION]</div><div class='del'>-</div><div class='del'>-Output the configuration name of the system \`$me' is run on.</div><div class='del'>-</div><div class='del'>-Operation modes:</div><div class='del'>-  -h, --help         print this help, then exit</div><div class='del'>-  -t, --time-stamp   print date of last modification, then exit</div><div class='del'>-  -v, --version      print version number, then exit</div><div class='del'>-</div><div class='del'>-Report bugs and patches to &lt;config-patches@gnu.org&gt;."</div><div class='del'>-</div><div class='del'>-version="\</div><div class='del'>-GNU config.guess ($timestamp)</div><div class='del'>-</div><div class='del'>-Originally written by Per Bothner.</div><div class='del'>-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001</div><div class='del'>-Free Software Foundation, Inc.</div><div class='del'>-</div><div class='del'>-This is free software; see the source for copying conditions.  There is NO</div><div class='del'>-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."</div><div class='del'>-</div><div class='del'>-help="</div><div class='del'>-Try \`$me --help' for more information."</div><div class='del'>-</div><div class='del'>-# Parse command line</div><div class='del'>-while test $# -gt 0 ; do</div><div class='del'>-  case $1 in</div><div class='del'>-    --time-stamp | --time* | -t )</div><div class='del'>-       echo "$timestamp" ; exit 0 ;;</div><div class='del'>-    --version | -v )</div><div class='del'>-       echo "$version" ; exit 0 ;;</div><div class='del'>-    --help | --h* | -h )</div><div class='del'>-       echo "$usage"; exit 0 ;;</div><div class='del'>-    -- )     # Stop option processing</div><div class='del'>-       shift; break ;;</div><div class='del'>-    - )	# Use stdin as input.</div><div class='del'>-       break ;;</div><div class='del'>-    -* )</div><div class='del'>-       echo "$me: invalid option $1$help" &gt;&amp;2</div><div class='del'>-       exit 1 ;;</div><div class='del'>-    * )</div><div class='del'>-       break ;;</div><div class='del'>-  esac</div><div class='del'>-done</div><div class='del'>-</div><div class='del'>-if test $# != 0; then</div><div class='del'>-  echo "$me: too many arguments$help" &gt;&amp;2</div><div class='del'>-  exit 1</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-trap 'exit 1' 1 2 15</div><div class='del'>-</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='del'>-</div><div class='del'>-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still</div><div class='del'>-# use `HOST_CC' if defined, but it is deprecated.</div><div class='del'>-</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='del'>-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='del'>-	if test x"$CC_FOR_BUILD" = x ; then</div><div class='del'>-	  CC_FOR_BUILD=no_compiler_found ;</div><div class='del'>-	fi</div><div class='del'>-	;;</div><div class='del'>- ,,*)   CC_FOR_BUILD=$CC ;;</div><div class='del'>- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;</div><div class='del'>-esac ;'</div><div class='del'>-</div><div class='del'>-# 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='del'>-if (test -f /.attbin/uname) &gt;/dev/null 2&gt;&amp;1 ; then</div><div class='del'>-	PATH=$PATH:/.attbin ; export PATH</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-UNAME_MACHINE=`(uname -m) 2&gt;/dev/null` || UNAME_MACHINE=unknown</div><div class='del'>-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='del'>-UNAME_VERSION=`(uname -v) 2&gt;/dev/null` || UNAME_VERSION=unknown</div><div class='del'>-</div><div class='del'>-# Note: order is significant - the case branches are not exclusive.</div><div class='del'>-</div><div class='del'>-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in</div><div class='del'>-    *:NetBSD:*:*)</div><div class='del'>-	# NetBSD (nbsd) targets should (where applicable) match one or</div><div class='del'>-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,</div><div class='del'>-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently</div><div class='del'>-	# switched to ELF, *-*-netbsd* would select the old</div><div class='del'>-	# object file format.  This provides both forward</div><div class='del'>-	# compatibility and a consistent mechanism for selecting the</div><div class='del'>-	# 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='del'>-	esac</div><div class='del'>-	# The Operating System including object format, if it has switched</div><div class='del'>-	# 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='del'>-		if echo __ELF__ | $CC_FOR_BUILD -E - 2&gt;/dev/null \</div><div class='del'>-			| grep __ELF__ &gt;/dev/null</div><div class='del'>-		then</div><div class='del'>-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).</div><div class='del'>-		    # Return netbsd for either.  FIX?</div><div class='del'>-		    os=netbsd</div><div class='del'>-		else</div><div class='del'>-		    os=netbsdelf</div><div class='del'>-		fi</div><div class='del'>-		;;</div><div class='del'>-	    *)</div><div class='del'>-	        os=netbsd</div><div class='del'>-		;;</div><div class='del'>-	esac</div><div class='del'>-	# 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='del'>-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:</div><div class='del'>-	# contains redundant information, the shorter form:</div><div class='del'>-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.</div><div class='del'>-	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='del'>-    alpha:OSF1:*:*)</div><div class='del'>-	case $UNAME_RELEASE in</div><div class='del'>-	*4.0)</div><div class='del'>-		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='del'>-	# A Vn.n version is a released version.</div><div class='del'>-	# A Tn.n version is a released field test version.</div><div class='del'>-	# A Xn.n version is an unreleased experimental baselevel.</div><div class='del'>-	# 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='del'>-	exit 0 ;;</div><div class='del'>-    Alpha\ *:Windows_NT*:*)</div><div class='del'>-	# How do we know it's Interix rather than the generic POSIX subsystem?</div><div class='del'>-	# Should we change UNAME_MACHINE based on the output of uname instead</div><div class='del'>-	# of the specific Alpha model?</div><div class='del'>-	echo alpha-pc-interix</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    21064:Windows_NT:50:3)</div><div class='del'>-	echo alpha-dec-winnt3.5</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    Amiga*:UNIX_System_V:4.0:*)</div><div class='del'>-	echo m68k-unknown-sysv4</div><div class='del'>-	exit 0;;</div><div class='del'>-    *:[Aa]miga[Oo][Ss]:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-amigaos</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:[Mm]orph[Oo][Ss]:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-morphos</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:OS/390:*:*)</div><div class='del'>-	echo i370-ibm-openedition</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:OS400:*:*)</div><div class='del'>-        echo powerpc-ibm-os400</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)</div><div class='del'>-	echo arm-acorn-riscix${UNAME_RELEASE}</div><div class='del'>-	exit 0;;</div><div class='del'>-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)</div><div class='del'>-	echo hppa1.1-hitachi-hiuxmpp</div><div class='del'>-	exit 0;;</div><div class='del'>-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)</div><div class='del'>-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.</div><div class='del'>-	if test "`(/bin/universe) 2&gt;/dev/null`" = att ; then</div><div class='del'>-		echo pyramid-pyramid-sysv3</div><div class='del'>-	else</div><div class='del'>-		echo pyramid-pyramid-bsd</div><div class='del'>-	fi</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    NILE*:*:*:dcosx)</div><div class='del'>-	echo pyramid-pyramid-svr4</div><div class='del'>-	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='del'>-    sun4H:SunOS:5.*:*)</div><div class='del'>-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)</div><div class='del'>-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i86pc:SunOS:5.*:*)</div><div class='del'>-	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    sun4*:SunOS:6*:*)</div><div class='del'>-	# According to config.sub, this is the proper way to canonicalize</div><div class='del'>-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but</div><div class='del'>-	# it's likely to be more like Solaris than SunOS4.</div><div class='del'>-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    sun4*:SunOS:*:*)</div><div class='del'>-	case "`/usr/bin/arch -k`" in</div><div class='del'>-	    Series*|S4*)</div><div class='del'>-		UNAME_RELEASE=`uname -v`</div><div class='del'>-		;;</div><div class='del'>-	esac</div><div class='del'>-	# Japanese Language versions have a version number like `4.1.3-JL'.</div><div class='del'>-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    sun3*:SunOS:*:*)</div><div class='del'>-	echo m68k-sun-sunos${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    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='del'>-	test "x${UNAME_RELEASE}" = "x" &amp;&amp; UNAME_RELEASE=3</div><div class='del'>-	case "`/bin/arch`" in</div><div class='del'>-	    sun3)</div><div class='del'>-		echo m68k-sun-sunos${UNAME_RELEASE}</div><div class='del'>-		;;</div><div class='del'>-	    sun4)</div><div class='del'>-		echo sparc-sun-sunos${UNAME_RELEASE}</div><div class='del'>-		;;</div><div class='del'>-	esac</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    aushp:SunOS:*:*)</div><div class='del'>-	echo sparc-auspex-sunos${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    # The situation for MiNT is a little confusing.  The machine name</div><div class='del'>-    # can be virtually everything (everything which is not</div><div class='del'>-    # "atarist" or "atariste" at least should have a processor</div><div class='del'>-    # &gt; m68000).  The system name ranges from "MiNT" over "FreeMiNT"</div><div class='del'>-    # to the lowercase version "mint" (or "freemint").  Finally</div><div class='del'>-    # the system name "TOS" denotes a system which is actually not</div><div class='del'>-    # MiNT.  But MiNT is downward compatible to TOS, so this should</div><div class='del'>-    # be no problem.</div><div class='del'>-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)</div><div class='del'>-        echo m68k-atari-mint${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)</div><div class='del'>-	echo m68k-atari-mint${UNAME_RELEASE}</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)</div><div class='del'>-        echo m68k-atari-mint${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)</div><div class='del'>-        echo m68k-milan-mint${UNAME_RELEASE}</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)</div><div class='del'>-        echo m68k-hades-mint${UNAME_RELEASE}</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)</div><div class='del'>-        echo m68k-unknown-mint${UNAME_RELEASE}</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    m68k:machten:*:*)</div><div class='del'>-	echo m68k-apple-machten${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    powerpc:machten:*:*)</div><div class='del'>-	echo powerpc-apple-machten${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    RISC*:Mach:*:*)</div><div class='del'>-	echo mips-dec-mach_bsd4.3</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    RISC*:ULTRIX:*:*)</div><div class='del'>-	echo mips-dec-ultrix${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    VAX*:ULTRIX*:*:*)</div><div class='del'>-	echo vax-dec-ultrix${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    2020:CLIX:*:* | 2430:CLIX:*:*)</div><div class='del'>-	echo clipper-intergraph-clix${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    mips:*:*:UMIPS | mips:*:*:RISCos)</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'>-#ifdef __cplusplus</div><div class='del'>-#include &lt;stdio.h&gt;  /* for printf() prototype */</div><div class='del'>-	int main (int argc, char *argv[]) {</div><div class='del'>-#else</div><div class='del'>-	int main (argc, argv) int argc; char *argv[]; {</div><div class='del'>-#endif</div><div class='del'>-	#if defined (host_mips) &amp;&amp; defined (MIPSEB)</div><div class='del'>-	#if defined (SYSTYPE_SYSV)</div><div class='del'>-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);</div><div class='del'>-	#endif</div><div class='del'>-	#if defined (SYSTYPE_SVR4)</div><div class='del'>-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);</div><div class='del'>-	#endif</div><div class='del'>-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)</div><div class='del'>-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);</div><div class='del'>-	#endif</div><div class='del'>-	#endif</div><div class='del'>-	  exit (-1);</div><div class='del'>-	}</div><div class='del'>-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='del'>-	echo mips-mips-riscos${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    Motorola:PowerMAX_OS:*:*)</div><div class='del'>-	echo powerpc-motorola-powermax</div><div class='del'>-	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='del'>-    Night_Hawk:Power_UNIX:*:*)</div><div class='del'>-	echo powerpc-harris-powerunix</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    m88k:CX/UX:7*:*)</div><div class='del'>-	echo m88k-harris-cxux7</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    m88k:*:4*:R4*)</div><div class='del'>-	echo m88k-motorola-sysv4</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    m88k:*:3*:R3*)</div><div class='del'>-	echo m88k-motorola-sysv3</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    AViiON:dgux:*:*)</div><div class='del'>-        # DG/UX returns AViiON for all architectures</div><div class='del'>-        UNAME_PROCESSOR=`/usr/bin/uname -p`</div><div class='del'>-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]</div><div class='del'>-	then</div><div class='del'>-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \</div><div class='del'>-	       [ ${TARGET_BINARY_INTERFACE}x = x ]</div><div class='del'>-	    then</div><div class='del'>-		echo m88k-dg-dgux${UNAME_RELEASE}</div><div class='del'>-	    else</div><div class='del'>-		echo m88k-dg-dguxbcs${UNAME_RELEASE}</div><div class='del'>-	    fi</div><div class='del'>-	else</div><div class='del'>-	    echo i586-dg-dgux${UNAME_RELEASE}</div><div class='del'>-	fi</div><div class='del'>- 	exit 0 ;;</div><div class='del'>-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)</div><div class='del'>-	echo m88k-dolphin-sysv3</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    M88*:*:R3*:*)</div><div class='del'>-	# Delta 88k system running SVR3</div><div class='del'>-	echo m88k-motorola-sysv3</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)</div><div class='del'>-	echo m88k-tektronix-sysv3</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)</div><div class='del'>-	echo m68k-tektronix-bsd</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:IRIX*:*:*)</div><div class='del'>-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.</div><div class='del'>-	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id</div><div class='del'>-	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '</div><div class='del'>-    i*86:AIX:*:*)</div><div class='del'>-	echo i386-ibm-aix</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    ia64:AIX:*:*)</div><div class='del'>-	if [ -x /usr/bin/oslevel ] ; then</div><div class='del'>-		IBM_REV=`/usr/bin/oslevel`</div><div class='del'>-	else</div><div class='del'>-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}</div><div class='del'>-	fi</div><div class='del'>-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:AIX:2:3)</div><div class='del'>-	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='del'>-		sed 's/^		//' &lt;&lt; EOF &gt;$dummy.c</div><div class='del'>-		#include &lt;sys/systemcfg.h&gt;</div><div class='del'>-</div><div class='del'>-		main()</div><div class='del'>-			{</div><div class='del'>-			if (!__power_pc())</div><div class='del'>-				exit(1);</div><div class='del'>-			puts("powerpc-ibm-aix3.2.5");</div><div class='del'>-			exit(0);</div><div class='del'>-			}</div><div class='del'>-EOF</div><div class='del'>-		$CC_FOR_BUILD -o $dummy $dummy.c &amp;&amp; $dummy &amp;&amp; exit 0</div><div class='del'>-		echo rs6000-ibm-aix3.2.5</div><div class='del'>-	elif grep bos324 /usr/include/stdio.h &gt;/dev/null 2&gt;&amp;1; then</div><div class='del'>-		echo rs6000-ibm-aix3.2.4</div><div class='del'>-	else</div><div class='del'>-		echo rs6000-ibm-aix3.2</div><div class='del'>-	fi</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *: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='del'>-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' &gt;/dev/null 2&gt;&amp;1; then</div><div class='del'>-		IBM_ARCH=rs6000</div><div class='del'>-	else</div><div class='del'>-		IBM_ARCH=powerpc</div><div class='del'>-	fi</div><div class='del'>-	if [ -x /usr/bin/oslevel ] ; then</div><div class='del'>-		IBM_REV=`/usr/bin/oslevel`</div><div class='del'>-	else</div><div class='del'>-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}</div><div class='del'>-	fi</div><div class='del'>-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:AIX:*:*)</div><div class='del'>-	echo rs6000-ibm-aix</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)</div><div class='del'>-	echo romp-ibm-bsd4.4</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and</div><div class='del'>-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to</div><div class='del'>-	exit 0 ;;                           # report: romp-ibm BSD 4.3</div><div class='del'>-    *:BOSX:*:*)</div><div class='del'>-	echo rs6000-bull-bosx</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    DPX/2?00:B.O.S.:*:*)</div><div class='del'>-	echo m68k-bull-sysv3</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    9000/[34]??:4.3bsd:1.*:*)</div><div class='del'>-	echo m68k-hp-bsd</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)</div><div class='del'>-	echo m68k-hp-bsd4.4</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    9000/[34678]??:HP-UX:*:*)</div><div class='del'>-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`</div><div class='del'>-	case "${UNAME_MACHINE}" in</div><div class='del'>-	    9000/31? )            HP_ARCH=m68000 ;;</div><div class='del'>-	    9000/[34]?? )         HP_ARCH=m68k ;;</div><div class='del'>-	    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='del'>-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2&gt;/dev/null`</div><div class='del'>-                    case "${sc_cpu_version}" in</div><div class='del'>-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0</div><div class='del'>-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1</div><div class='del'>-                      532)                      # CPU_PA_RISC2_0</div><div class='del'>-                        case "${sc_kernel_bits}" in</div><div class='del'>-                          32) HP_ARCH="hppa2.0n" ;;</div><div class='del'>-                          64) HP_ARCH="hppa2.0w" ;;</div><div class='del'>-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20</div><div class='del'>-                        esac ;;</div><div class='del'>-                    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='del'>-</div><div class='del'>-              #define _HPUX_SOURCE</div><div class='del'>-              #include &lt;stdlib.h&gt;</div><div class='del'>-              #include &lt;unistd.h&gt;</div><div class='del'>-</div><div class='del'>-              int main ()</div><div class='del'>-              {</div><div class='del'>-              #if defined(_SC_KERNEL_BITS)</div><div class='del'>-                  long bits = sysconf(_SC_KERNEL_BITS);</div><div class='del'>-              #endif</div><div class='del'>-                  long cpu  = sysconf (_SC_CPU_VERSION);</div><div class='del'>-</div><div class='del'>-                  switch (cpu)</div><div class='del'>-              	{</div><div class='del'>-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;</div><div class='del'>-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;</div><div class='del'>-              	case CPU_PA_RISC2_0:</div><div class='del'>-              #if defined(_SC_KERNEL_BITS)</div><div class='del'>-              	    switch (bits)</div><div class='del'>-              		{</div><div class='del'>-              		case 64: puts ("hppa2.0w"); break;</div><div class='del'>-              		case 32: puts ("hppa2.0n"); break;</div><div class='del'>-              		default: puts ("hppa2.0"); break;</div><div class='del'>-              		} break;</div><div class='del'>-              #else  /* !defined(_SC_KERNEL_BITS) */</div><div class='del'>-              	    puts ("hppa2.0"); break;</div><div class='del'>-              #endif</div><div class='del'>-              	default: puts ("hppa1.0"); break;</div><div class='del'>-              	}</div><div class='del'>-                  exit (0);</div><div class='del'>-              }</div><div class='del'>-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='del'>-	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='del'>-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    ia64:HP-UX:*:*)</div><div class='del'>-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`</div><div class='del'>-	echo ia64-hp-hpux${HPUX_REV}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    3050*:HI-UX:*:*)</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;unistd.h&gt;</div><div class='del'>-	int</div><div class='del'>-	main ()</div><div class='del'>-	{</div><div class='del'>-	  long cpu = sysconf (_SC_CPU_VERSION);</div><div class='del'>-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns</div><div class='del'>-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct</div><div class='del'>-	     results, however.  */</div><div class='del'>-	  if (CPU_IS_PA_RISC (cpu))</div><div class='del'>-	    {</div><div class='del'>-	      switch (cpu)</div><div class='del'>-		{</div><div class='del'>-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;</div><div class='del'>-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;</div><div class='del'>-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;</div><div class='del'>-		  default: puts ("hppa-hitachi-hiuxwe2"); break;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	  else if (CPU_IS_HP_MC68K (cpu))</div><div class='del'>-	    puts ("m68k-hitachi-hiuxwe2");</div><div class='del'>-	  else puts ("unknown-hitachi-hiuxwe2");</div><div class='del'>-	  exit (0);</div><div class='del'>-	}</div><div class='del'>-EOF</div><div class='del'>-	$CC_FOR_BUILD -o $dummy $dummy.c &amp;&amp; $dummy &amp;&amp; exit 0</div><div class='del'>-	echo unknown-hitachi-hiuxwe2</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )</div><div class='del'>-	echo hppa1.1-hp-bsd</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    9000/8??:4.3bsd:*:*)</div><div class='del'>-	echo hppa1.0-hp-bsd</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)</div><div class='del'>-	echo hppa1.0-hp-mpeix</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )</div><div class='del'>-	echo hppa1.1-hp-osf</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    hp8??:OSF1:*:*)</div><div class='del'>-	echo hppa1.0-hp-osf</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*86:OSF1:*:*)</div><div class='del'>-	if [ -x /usr/sbin/sysversion ] ; then</div><div class='del'>-	    echo ${UNAME_MACHINE}-unknown-osf1mk</div><div class='del'>-	else</div><div class='del'>-	    echo ${UNAME_MACHINE}-unknown-osf1</div><div class='del'>-	fi</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    parisc*:Lites*:*:*)</div><div class='del'>-	echo hppa1.1-hp-lites</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)</div><div class='del'>-	echo c1-convex-bsd</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)</div><div class='del'>-	if getsysinfo -f scalar_acc</div><div class='del'>-	then echo c32-convex-bsd</div><div class='del'>-	else echo c2-convex-bsd</div><div class='del'>-	fi</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)</div><div class='del'>-	echo c34-convex-bsd</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)</div><div class='del'>-	echo c38-convex-bsd</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)</div><div class='del'>-	echo c4-convex-bsd</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    CRAY*Y-MP:*:*:*)</div><div class='del'>-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    CRAY*[A-Z]90:*:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \</div><div class='del'>-	| 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='del'>-	exit 0 ;;</div><div class='del'>-    CRAY*TS:*:*:*)</div><div class='del'>-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    CRAY*T3E:*:*:*)</div><div class='del'>-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    CRAY*SV1:*:*:*)</div><div class='del'>-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'</div><div class='del'>-	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='del'>-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)</div><div class='del'>-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`</div><div class='del'>-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`</div><div class='del'>-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`</div><div class='del'>-        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='del'>-	exit 0 ;;</div><div class='del'>-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    sparc*:BSD/OS:*:*)</div><div class='del'>-	echo sparc-unknown-bsdi${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:BSD/OS:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *: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='del'>-	exit 0 ;;</div><div class='del'>-    i*:CYGWIN*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-cygwin</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*:MINGW*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-mingw32</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*:PW*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-pw32</div><div class='del'>-	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='del'>-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)</div><div class='del'>-	# How do we know it's Interix rather than the generic POSIX subsystem?</div><div class='del'>-	# It also conflicts with pre-2.0 versions of AT&amp;T UWIN. Should we</div><div class='del'>-	# UNAME_MACHINE based on the output of uname instead of i386?</div><div class='del'>-	echo i586-pc-interix</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*:UWIN*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-uwin</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    p*:CYGWIN*:*)</div><div class='del'>-	echo powerpcle-unknown-cygwin</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    prep*:SunOS:5.*:*)</div><div class='del'>-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:GNU:*:*)</div><div class='del'>-	# the GNU system</div><div class='del'>-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`</div><div class='del'>-	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='del'>-    i*86:Minix:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-minix</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    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='del'>-	exit 0 ;;</div><div class='del'>-    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='del'>-	exit 0 ;;</div><div class='del'>-    m68*:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    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='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'>-    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='del'>-	exit 0 ;;</div><div class='del'>-    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='del'>-	exit 0 ;;</div><div class='del'>-    parisc:Linux:*:* | hppa:Linux:*:*)</div><div class='del'>-	# Look for CPU level</div><div class='del'>-	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='del'>-	esac</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    parisc64:Linux:*:* | hppa64:Linux:*:*)</div><div class='del'>-	echo hppa64-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    s390:Linux:*:* | s390x:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-ibm-linux</div><div class='del'>-	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='del'>-    sh*:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    sparc:Linux:*:* | sparc64:Linux:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    x86_64:Linux:*:*)</div><div class='del'>-	echo x86_64-unknown-linux-gnu</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*86:Linux:*:*)</div><div class='del'>-	# The BFD linker knows what the default object file format is, so</div><div class='del'>-	# first see if it will tell us. cd to the root directory to prevent</div><div class='del'>-	# 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='del'>-				    s/[ 	][ 	]*/ /g</div><div class='del'>-				    s/.*supported targets: *//</div><div class='del'>-				    s/ .*//</div><div class='del'>-				    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='del'>-		;;</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='del'>-	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='del'>-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='del'>-	test x"${TENTATIVE}" != x &amp;&amp; echo "${TENTATIVE}" &amp;&amp; exit 0</div><div class='del'>-	;;</div><div class='del'>-    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='del'>-	echo i386-sequent-sysv4</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i*86:UNIX_SV:4.2MP:2.*)</div><div class='del'>-        # Unixware is an offshoot of SVR4, but it has its own version</div><div class='del'>-        # number series starting with 2...</div><div class='del'>-        # I am not positive that other SVR4 systems won't match this,</div><div class='del'>-	# I just have to hope.  -- rms.</div><div class='del'>-        # Use sysv4.2uw... so that sysv4* matches it.</div><div class='del'>-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}</div><div class='del'>-	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='del'>-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)</div><div class='del'>-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`</div><div class='del'>-	if grep Novell /usr/include/link.h &gt;/dev/null 2&gt;/dev/null; then</div><div class='del'>-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}</div><div class='del'>-	else</div><div class='del'>-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}</div><div class='del'>-	fi</div><div class='del'>-	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='del'>-	exit 0 ;;</div><div class='del'>-    i*86:*:3.2:*)</div><div class='del'>-	if test -f /usr/options/cb.name; then</div><div class='del'>-		UNAME_REL=`sed -n 's/.*Version //p' &lt;/usr/options/cb.name`</div><div class='del'>-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL</div><div class='del'>-	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='del'>-			&amp;&amp; UNAME_MACHINE=i586</div><div class='del'>-		(/bin/uname -X|grep '^Machine.*Pent *II' &gt;/dev/null) \</div><div class='del'>-			&amp;&amp; UNAME_MACHINE=i686</div><div class='del'>-		(/bin/uname -X|grep '^Machine.*Pentium Pro' &gt;/dev/null) \</div><div class='del'>-			&amp;&amp; UNAME_MACHINE=i686</div><div class='del'>-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL</div><div class='del'>-	else</div><div class='del'>-		echo ${UNAME_MACHINE}-pc-sysv32</div><div class='del'>-	fi</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    pc:*:*:*)</div><div class='del'>-	# Left here for compatibility:</div><div class='del'>-        # uname -m prints for DJGPP always 'pc', but it prints nothing about</div><div class='del'>-        # the processor, so we play safe by assuming i386.</div><div class='del'>-	echo i386-pc-msdosdjgpp</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    Intel:Mach:3*:*)</div><div class='del'>-	echo i386-pc-mach3</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    paragon:*:*:*)</div><div class='del'>-	echo i860-intel-osf1</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    i860:*:4.*:*) # i860-SVR4</div><div class='del'>-	if grep Stardent /usr/include/sys/uadmin.h &gt;/dev/null 2&gt;&amp;1 ; then</div><div class='del'>-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4</div><div class='del'>-	else # Add other i860-SVR4 vendors below as they are discovered.</div><div class='del'>-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4</div><div class='del'>-	fi</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    mini*:CTIX:SYS*5:*)</div><div class='del'>-	# "miniframe"</div><div class='del'>-	echo m68010-convergent-sysv</div><div class='del'>-	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='del'>-	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='del'>-	OS_REL=''</div><div class='del'>-	test -r /etc/.relid \</div><div class='del'>-	&amp;&amp; OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' &lt; /etc/.relid`</div><div class='del'>-	/bin/uname -p 2&gt;/dev/null | grep 86 &gt;/dev/null \</div><div class='del'>-	  &amp;&amp; echo i486-ncr-sysv4.3${OS_REL} &amp;&amp; exit 0</div><div class='del'>-	/bin/uname -p 2&gt;/dev/null | /bin/grep entium &gt;/dev/null \</div><div class='del'>-	  &amp;&amp; echo i586-ncr-sysv4.3${OS_REL} &amp;&amp; exit 0 ;;</div><div class='del'>-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)</div><div class='del'>-        /bin/uname -p 2&gt;/dev/null | grep 86 &gt;/dev/null \</div><div class='del'>-          &amp;&amp; echo i486-ncr-sysv4 &amp;&amp; exit 0 ;;</div><div class='del'>-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)</div><div class='del'>-	echo m68k-unknown-lynxos${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    mc68030:UNIX_System_V:4.*:*)</div><div class='del'>-	echo m68k-atari-sysv4</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    TSUNAMI:LynxOS:2.*:*)</div><div class='del'>-	echo sparc-unknown-lynxos${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    rs6000:LynxOS:2.*:*)</div><div class='del'>-	echo rs6000-unknown-lynxos${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)</div><div class='del'>-	echo powerpc-unknown-lynxos${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    SM[BE]S:UNIX_SV:*:*)</div><div class='del'>-	echo mips-dde-sysv${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    RM*:ReliantUNIX-*:*:*)</div><div class='del'>-	echo mips-sni-sysv4</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    RM*:SINIX-*:*:*)</div><div class='del'>-	echo mips-sni-sysv4</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:SINIX-*:*:*)</div><div class='del'>-	if uname -p 2&gt;/dev/null &gt;/dev/null ; then</div><div class='del'>-		UNAME_MACHINE=`(uname -p) 2&gt;/dev/null`</div><div class='del'>-		echo ${UNAME_MACHINE}-sni-sysv4</div><div class='del'>-	else</div><div class='del'>-		echo ns32k-sni-sysv</div><div class='del'>-	fi</div><div class='del'>-	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='del'>-        echo i586-unisys-sysv4</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    *:UNIX_System_V:4*:FTX*)</div><div class='del'>-	# From Gerald Hewes &lt;hewes@openmarket.com&gt;.</div><div class='del'>-	# How about differentiating between stratus architectures? -djm</div><div class='del'>-	echo hppa1.1-stratus-sysv4</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:*:*:FTX*)</div><div class='del'>-	# From seanf@swdc.stratus.com.</div><div class='del'>-	echo i860-stratus-sysv4</div><div class='del'>-	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='del'>-    mc68*:A/UX:*:*)</div><div class='del'>-	echo m68k-apple-aux${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    news*:NEWS-OS:6*:*)</div><div class='del'>-	echo mips-sony-newsos6</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)</div><div class='del'>-	if [ -d /usr/nec ]; then</div><div class='del'>-	        echo mips-nec-sysv${UNAME_RELEASE}</div><div class='del'>-	else</div><div class='del'>-	        echo mips-unknown-sysv${UNAME_RELEASE}</div><div class='del'>-	fi</div><div class='del'>-        exit 0 ;;</div><div class='del'>-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.</div><div class='del'>-	echo powerpc-be-beos</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.</div><div class='del'>-	echo powerpc-apple-beos</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.</div><div class='del'>-	echo i586-pc-beos</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    SX-4:SUPER-UX:*:*)</div><div class='del'>-	echo sx4-nec-superux${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    SX-5:SUPER-UX:*:*)</div><div class='del'>-	echo sx5-nec-superux${UNAME_RELEASE}</div><div class='del'>-	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='del'>-    Power*:Rhapsody:*:*)</div><div class='del'>-	echo powerpc-apple-rhapsody${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:Rhapsody:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *: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='del'>-	exit 0 ;;</div><div class='del'>-    *: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='del'>-		UNAME_MACHINE=pc</div><div class='del'>-	fi</div><div class='del'>-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:QNX:*:4*)</div><div class='del'>-	echo i386-pc-qnx</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    NSR-?:NONSTOP_KERNEL:*:*)</div><div class='del'>-	echo nsr-tandem-nsk${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:NonStop-UX:*:*)</div><div class='del'>-	echo mips-compaq-nonstopux</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    BS2000:POSIX*:*:*)</div><div class='del'>-	echo bs2000-siemens-sysv</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    DS/*:UNIX_System_V:*:*)</div><div class='del'>-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:Plan9:*:*)</div><div class='del'>-	# "uname -m" is not consistent, so use $cputype instead. 386</div><div class='del'>-	# is converted to i386 for consistency with other x86</div><div class='del'>-	# operating systems.</div><div class='del'>-	if test "$cputype" = "386"; then</div><div class='del'>-	    UNAME_MACHINE=i386</div><div class='del'>-	else</div><div class='del'>-	    UNAME_MACHINE="$cputype"</div><div class='del'>-	fi</div><div class='del'>-	echo ${UNAME_MACHINE}-unknown-plan9</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:TOPS-10:*:*)</div><div class='del'>-	echo pdp10-unknown-tops10</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:TENEX:*:*)</div><div class='del'>-	echo pdp10-unknown-tenex</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)</div><div class='del'>-	echo pdp10-dec-tops20</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)</div><div class='del'>-	echo pdp10-xkl-tops20</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:TOPS-20:*:*)</div><div class='del'>-	echo pdp10-unknown-tops20</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    *:ITS:*:*)</div><div class='del'>-	echo pdp10-unknown-its</div><div class='del'>-	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='del'>-esac</div><div class='del'>-</div><div class='del'>-#echo '(No uname command or uname output not recognized.)' 1&gt;&amp;2</div><div class='del'>-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1&gt;&amp;2</div><div class='del'>-</div><div class='del'>-eval $set_cc_for_build</div><div class='del'>-cat &gt;$dummy.c &lt;&lt;EOF</div><div class='del'>-#ifdef _SEQUENT_</div><div class='del'>-# include &lt;sys/types.h&gt;</div><div class='del'>-# include &lt;sys/utsname.h&gt;</div><div class='del'>-#endif</div><div class='del'>-main ()</div><div class='del'>-{</div><div class='del'>-#if defined (sony)</div><div class='del'>-#if defined (MIPSEB)</div><div class='del'>-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,</div><div class='del'>-     I don't know....  */</div><div class='del'>-  printf ("mips-sony-bsd\n"); exit (0);</div><div class='del'>-#else</div><div class='del'>-#include &lt;sys/param.h&gt;</div><div class='del'>-  printf ("m68k-sony-newsos%s\n",</div><div class='del'>-#ifdef NEWSOS4</div><div class='del'>-          "4"</div><div class='del'>-#else</div><div class='del'>-	  ""</div><div class='del'>-#endif</div><div class='del'>-         ); exit (0);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (__arm) &amp;&amp; defined (__acorn) &amp;&amp; defined (__unix)</div><div class='del'>-  printf ("arm-acorn-riscix"); exit (0);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (hp300) &amp;&amp; !defined (hpux)</div><div class='del'>-  printf ("m68k-hp-bsd\n"); exit (0);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (NeXT)</div><div class='del'>-#if !defined (__ARCHITECTURE__)</div><div class='del'>-#define __ARCHITECTURE__ "m68k"</div><div class='del'>-#endif</div><div class='del'>-  int version;</div><div class='del'>-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2&gt;/dev/null`;</div><div class='del'>-  if (version &lt; 4)</div><div class='del'>-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);</div><div class='del'>-  else</div><div class='del'>-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);</div><div class='del'>-  exit (0);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (MULTIMAX) || defined (n16)</div><div class='del'>-#if defined (UMAXV)</div><div class='del'>-  printf ("ns32k-encore-sysv\n"); exit (0);</div><div class='del'>-#else</div><div class='del'>-#if defined (CMU)</div><div class='del'>-  printf ("ns32k-encore-mach\n"); exit (0);</div><div class='del'>-#else</div><div class='del'>-  printf ("ns32k-encore-bsd\n"); exit (0);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (__386BSD__)</div><div class='del'>-  printf ("i386-pc-bsd\n"); exit (0);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (sequent)</div><div class='del'>-#if defined (i386)</div><div class='del'>-  printf ("i386-sequent-dynix\n"); exit (0);</div><div class='del'>-#endif</div><div class='del'>-#if defined (ns32000)</div><div class='del'>-  printf ("ns32k-sequent-dynix\n"); exit (0);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (_SEQUENT_)</div><div class='del'>-    struct utsname un;</div><div class='del'>-</div><div class='del'>-    uname(&amp;un);</div><div class='del'>-</div><div class='del'>-    if (strncmp(un.version, "V2", 2) == 0) {</div><div class='del'>-	printf ("i386-sequent-ptx2\n"); exit (0);</div><div class='del'>-    }</div><div class='del'>-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */</div><div class='del'>-	printf ("i386-sequent-ptx1\n"); exit (0);</div><div class='del'>-    }</div><div class='del'>-    printf ("i386-sequent-ptx\n"); exit (0);</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (vax)</div><div class='del'>-# if !defined (ultrix)</div><div class='del'>-#  include &lt;sys/param.h&gt;</div><div class='del'>-#  if defined (BSD)</div><div class='del'>-#   if BSD == 43</div><div class='del'>-      printf ("vax-dec-bsd4.3\n"); exit (0);</div><div class='del'>-#   else</div><div class='del'>-#    if BSD == 199006</div><div class='del'>-      printf ("vax-dec-bsd4.3reno\n"); exit (0);</div><div class='del'>-#    else</div><div class='del'>-      printf ("vax-dec-bsd\n"); exit (0);</div><div class='del'>-#    endif</div><div class='del'>-#   endif</div><div class='del'>-#  else</div><div class='del'>-    printf ("vax-dec-bsd\n"); exit (0);</div><div class='del'>-#  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='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined (alliant) &amp;&amp; defined (i860)</div><div class='del'>-  printf ("i860-alliant-bsd\n"); exit (0);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-  exit (1);</div><div class='del'>-}</div><div class='del'>-EOF</div><div class='del'>-</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='del'>-</div><div class='del'>-# Apollos put the system type in the environment.</div><div class='del'>-</div><div class='del'>-test -d /usr/apollo &amp;&amp; { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }</div><div class='del'>-</div><div class='del'>-# Convex versions that predate uname can use getsysinfo(1)</div><div class='del'>-</div><div class='del'>-if [ -x /usr/convex/getsysinfo ]</div><div class='del'>-then</div><div class='del'>-    case `getsysinfo -f cpu_type` in</div><div class='del'>-    c1*)</div><div class='del'>-	echo c1-convex-bsd</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    c2*)</div><div class='del'>-	if getsysinfo -f scalar_acc</div><div class='del'>-	then echo c32-convex-bsd</div><div class='del'>-	else echo c2-convex-bsd</div><div class='del'>-	fi</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    c34*)</div><div class='del'>-	echo c34-convex-bsd</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    c38*)</div><div class='del'>-	echo c38-convex-bsd</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    c4*)</div><div class='del'>-	echo c4-convex-bsd</div><div class='del'>-	exit 0 ;;</div><div class='del'>-    esac</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-cat &gt;&amp;2 &lt;&lt;EOF</div><div class='del'>-$0: unable to guess system type</div><div class='del'>-</div><div class='del'>-This script, last modified $timestamp, has failed to recognize</div><div class='del'>-the operating system you are using. It is advised that you</div><div class='del'>-download the most up to date version of the config scripts from</div><div class='del'>-</div><div class='del'>-    ftp://ftp.gnu.org/pub/gnu/config/</div><div class='del'>-</div><div class='del'>-If the version you run ($0) is already up to date, please</div><div class='del'>-send the following data and any information you think might be</div><div class='del'>-pertinent to &lt;config-patches@gnu.org&gt; in order to provide the needed</div><div class='del'>-information to handle your system.</div><div class='del'>-</div><div class='del'>-config.guess timestamp = $timestamp</div><div class='del'>-</div><div class='del'>-uname -m = `(uname -m) 2&gt;/dev/null || echo unknown`</div><div class='del'>-uname -r = `(uname -r) 2&gt;/dev/null || echo unknown`</div><div class='del'>-uname -s = `(uname -s) 2&gt;/dev/null || echo unknown`</div><div class='del'>-uname -v = `(uname -v) 2&gt;/dev/null || echo unknown`</div><div class='del'>-</div><div class='del'>-/usr/bin/uname -p = `(/usr/bin/uname -p) 2&gt;/dev/null`</div><div class='del'>-/bin/uname -X     = `(/bin/uname -X) 2&gt;/dev/null`</div><div class='del'>-</div><div class='del'>-hostinfo               = `(hostinfo) 2&gt;/dev/null`</div><div class='del'>-/bin/universe          = `(/bin/universe) 2&gt;/dev/null`</div><div class='del'>-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2&gt;/dev/null`</div><div class='del'>-/bin/arch              = `(/bin/arch) 2&gt;/dev/null`</div><div class='del'>-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2&gt;/dev/null`</div><div class='del'>-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2&gt;/dev/null`</div><div class='del'>-</div><div class='del'>-UNAME_MACHINE = ${UNAME_MACHINE}</div><div class='del'>-UNAME_RELEASE = ${UNAME_RELEASE}</div><div class='del'>-UNAME_SYSTEM  = ${UNAME_SYSTEM}</div><div class='del'>-UNAME_VERSION = ${UNAME_VERSION}</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-exit 1</div><div class='del'>-</div><div class='del'>-# Local variables:</div><div class='del'>-# eval: (add-hook 'write-file-hooks 'time-stamp)</div><div class='del'>-# time-stamp-start: "timestamp='"</div><div class='del'>-# time-stamp-format: "%:y-%02m-%02d"</div><div class='del'>-# time-stamp-end: "'"</div><div class='del'>-# End:</div><div class='head'>diff --git a/config.sub b/config.sub<br/>deleted file mode 100644<br/>index 506d3ab77f..0000000000<br/>--- a/<a href='/ruby.git/tree/config.sub?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>config.sub</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1537 +0,0 @@</div><div class='del'>-#! /bin/sh</div><div class='del'>-# 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='del'>-</div><div class='del'>-timestamp='2004-06-11'</div><div class='del'>-</div><div class='del'>-# This file is (in principle) common to ALL GNU software.</div><div class='del'>-# The presence of a machine in this file suggests that SOME GNU software</div><div class='del'>-# can handle that machine.  It does not imply ALL GNU software can.</div><div class='del'>-#</div><div class='del'>-# This file 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 of the License, or</div><div class='del'>-# (at your option) 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 to the GNU General Public License, if you</div><div class='del'>-# distribute this file as part of a program that contains a</div><div class='del'>-# configuration script generated by Autoconf, you may include it under</div><div class='del'>-# the same distribution terms that you use for the rest of that program.</div><div class='del'>-</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='del'>-#</div><div class='del'>-# Configuration subroutine to validate and canonicalize a configuration type.</div><div class='del'>-# Supply the specified configuration type as an argument.</div><div class='del'>-# If it is invalid, we print an error message on stderr and exit with code 1.</div><div class='del'>-# Otherwise, we print the canonical config type on stdout and succeed.</div><div class='del'>-</div><div class='del'>-# This file is supposed to be the same for all GNU packages</div><div class='del'>-# and recognize all the CPU types, system types and aliases</div><div class='del'>-# that are meaningful with *any* GNU software.</div><div class='del'>-# Each package is responsible for reporting which valid configurations</div><div class='del'>-# it does not support.  The user should be able to distinguish</div><div class='del'>-# a failure to support a valid configuration from a meaningless</div><div class='del'>-# configuration.</div><div class='del'>-</div><div class='del'>-# The goal of this file is to map all the various variations of a given</div><div class='del'>-# machine specification into a single specification in the form:</div><div class='del'>-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM</div><div class='del'>-# or in some cases, the newer four-part form:</div><div class='del'>-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM</div><div class='del'>-# It is wrong to echo any other type of specification.</div><div class='del'>-</div><div class='del'>-me=`echo "$0" | sed -e 's,.*/,,'`</div><div class='del'>-</div><div class='del'>-usage="\</div><div class='del'>-Usage: $0 [OPTION] CPU-MFR-OPSYS</div><div class='del'>-       $0 [OPTION] ALIAS</div><div class='del'>-</div><div class='del'>-Canonicalize a configuration name.</div><div class='del'>-</div><div class='del'>-Operation modes:</div><div class='del'>-  -h, --help         print this help, then exit</div><div class='del'>-  -t, --time-stamp   print date of last modification, then exit</div><div class='del'>-  -v, --version      print version number, then exit</div><div class='del'>-</div><div class='del'>-Report bugs and patches to &lt;config-patches@gnu.org&gt;."</div><div class='del'>-</div><div class='del'>-version="\</div><div class='del'>-GNU config.sub ($timestamp)</div><div class='del'>-</div><div class='del'>-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001</div><div class='del'>-Free Software Foundation, Inc.</div><div class='del'>-</div><div class='del'>-This is free software; see the source for copying conditions.  There is NO</div><div class='del'>-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."</div><div class='del'>-</div><div class='del'>-help="</div><div class='del'>-Try \`$me --help' for more information."</div><div class='del'>-</div><div class='del'>-# Parse command line</div><div class='del'>-while test $# -gt 0 ; do</div><div class='del'>-  case $1 in</div><div class='del'>-    --time-stamp | --time* | -t )</div><div class='del'>-       echo "$timestamp" ; exit 0 ;;</div><div class='del'>-    --version | -v )</div><div class='del'>-       echo "$version" ; exit 0 ;;</div><div class='del'>-    --help | --h* | -h )</div><div class='del'>-       echo "$usage"; exit 0 ;;</div><div class='del'>-    -- )     # Stop option processing</div><div class='del'>-       shift; break ;;</div><div class='del'>-    - )	# Use stdin as input.</div><div class='del'>-       break ;;</div><div class='del'>-    -* )</div><div class='del'>-       echo "$me: invalid option $1$help"</div><div class='del'>-       exit 1 ;;</div><div class='del'>-</div><div class='del'>-    *local*)</div><div class='del'>-       # First pass through any local machine types.</div><div class='del'>-       echo $1</div><div class='del'>-       exit 0;;</div><div class='del'>-</div><div class='del'>-    * )</div><div class='del'>-       break ;;</div><div class='del'>-  esac</div><div class='del'>-done</div><div class='del'>-</div><div class='del'>-case $# in</div><div class='del'>- 0) echo "$me: missing argument$help" &gt;&amp;2</div><div class='del'>-    exit 1;;</div><div class='del'>- 1) ;;</div><div class='del'>- *) echo "$me: too many arguments$help" &gt;&amp;2</div><div class='del'>-    exit 1;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).</div><div class='del'>-# Here we must recognize all the valid KERNEL-OS combinations.</div><div class='del'>-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`</div><div class='del'>-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='del'>-    os=-$maybe_os</div><div class='del'>-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`</div><div class='del'>-    ;;</div><div class='del'>-  *)</div><div class='del'>-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`</div><div class='del'>-    if [ $basic_machine != $1 ]</div><div class='del'>-    then os=`echo $1 | sed 's/.*-/-/'`</div><div class='del'>-    else os=; fi</div><div class='del'>-    ;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-### Let's recognize common machines as not being operating systems so</div><div class='del'>-### that things like config.sub decstation-3100 work.  We also</div><div class='del'>-### recognize some manufacturers as not being operating systems, so we</div><div class='del'>-### can provide default operating systems below.</div><div class='del'>-case $os in</div><div class='del'>-	-sun*os*)</div><div class='del'>-		# Prevent following clause from handling this invalid input.</div><div class='del'>-		;;</div><div class='del'>-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \</div><div class='del'>-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \</div><div class='del'>-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \</div><div class='del'>-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\</div><div class='del'>-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \</div><div class='del'>-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \</div><div class='del'>-	-apple | -axis)</div><div class='del'>-		os=</div><div class='del'>-		basic_machine=$1</div><div class='del'>-		;;</div><div class='del'>-	-sim | -cisco | -oki | -wec | -winbond)</div><div class='del'>-		os=</div><div class='del'>-		basic_machine=$1</div><div class='del'>-		;;</div><div class='del'>-	-scout)</div><div class='del'>-		;;</div><div class='del'>-	-wrs)</div><div class='del'>-		os=-vxworks</div><div class='del'>-		basic_machine=$1</div><div class='del'>-		;;</div><div class='del'>-	-chorusos*)</div><div class='del'>-		os=-chorusos</div><div class='del'>-		basic_machine=$1</div><div class='del'>-		;;</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='del'>-	-hiux*)</div><div class='del'>-		os=-hiuxwe2</div><div class='del'>-		;;</div><div class='del'>-	-sco5)</div><div class='del'>-		os=-sco3.2v5</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`</div><div class='del'>-		;;</div><div class='del'>-	-sco4)</div><div class='del'>-		os=-sco3.2v4</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`</div><div class='del'>-		;;</div><div class='del'>-	-sco3.2.[4-9]*)</div><div class='del'>-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`</div><div class='del'>-		;;</div><div class='del'>-	-sco3.2v[4-9]*)</div><div class='del'>-		# Don't forget version if it is 3.2v4 or newer.</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`</div><div class='del'>-		;;</div><div class='del'>-	-sco*)</div><div class='del'>-		os=-sco3.2v2</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`</div><div class='del'>-		;;</div><div class='del'>-	-udk*)</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`</div><div class='del'>-		;;</div><div class='del'>-	-isc)</div><div class='del'>-		os=-isc2.2</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`</div><div class='del'>-		;;</div><div class='del'>-	-clix*)</div><div class='del'>-		basic_machine=clipper-intergraph</div><div class='del'>-		;;</div><div class='del'>-	-isc*)</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`</div><div class='del'>-		;;</div><div class='del'>-	-lynx*)</div><div class='del'>-		os=-lynxos</div><div class='del'>-		;;</div><div class='del'>-	-ptx*)</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`</div><div class='del'>-		;;</div><div class='del'>-	-windowsnt*)</div><div class='del'>-		os=`echo $os | sed -e 's/windowsnt/winnt/'`</div><div class='del'>-		;;</div><div class='del'>-	-psos*)</div><div class='del'>-		os=-psos</div><div class='del'>-		;;</div><div class='del'>-	-mint | -mint[0-9]*)</div><div class='del'>-		basic_machine=m68k-atari</div><div class='del'>-		os=-mint</div><div class='del'>-		;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-# Decode aliases for certain CPU-COMPANY combinations.</div><div class='del'>-case $basic_machine in</div><div class='del'>-	# Recognize the basic CPU types without company name.</div><div class='del'>-	# 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='del'>-		basic_machine=$basic_machine-unknown</div><div class='del'>-		;;</div><div class='del'>-	m6811 | m68hc11 | m6812 | m68hc12)</div><div class='del'>-		# Motorola 68HC11/12.</div><div class='del'>-		basic_machine=$basic_machine-unknown</div><div class='del'>-		os=-none</div><div class='del'>-		;;</div><div class='del'>-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)</div><div class='del'>-		;;</div><div class='del'>-</div><div class='del'>-	# We use `pc' rather than `unknown'</div><div class='del'>-	# because (1) that's what they normally are, and</div><div class='del'>-	# (2) the word "unknown" tends to confuse beginning users.</div><div class='del'>-	i*86 | x86_64)</div><div class='del'>-	  basic_machine=$basic_machine-pc</div><div class='del'>-	  ;;</div><div class='del'>-	# Object if more than one company name word.</div><div class='del'>-	*-*-*)</div><div class='del'>-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1&gt;&amp;2</div><div class='del'>-		exit 1</div><div class='del'>-		;;</div><div class='del'>-	# 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='del'>-		;;</div><div class='del'>-	# Recognize the various machine names and aliases which stand</div><div class='del'>-	# for a CPU type and a company and sometimes even an OS.</div><div class='del'>-	386bsd)</div><div class='del'>-		basic_machine=i386-unknown</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)</div><div class='del'>-		basic_machine=m68000-att</div><div class='del'>-		;;</div><div class='del'>-	3b*)</div><div class='del'>-		basic_machine=we32k-att</div><div class='del'>-		;;</div><div class='del'>-	a29khif)</div><div class='del'>-		basic_machine=a29k-amd</div><div class='del'>-		os=-udi</div><div class='del'>-		;;</div><div class='del'>-	adobe68k)</div><div class='del'>-		basic_machine=m68010-adobe</div><div class='del'>-		os=-scout</div><div class='del'>-		;;</div><div class='del'>-	alliant | fx80)</div><div class='del'>-		basic_machine=fx80-alliant</div><div class='del'>-		;;</div><div class='del'>-	altos | altos3068)</div><div class='del'>-		basic_machine=m68k-altos</div><div class='del'>-		;;</div><div class='del'>-	am29k)</div><div class='del'>-		basic_machine=a29k-none</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</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='del'>-	amdahl)</div><div class='del'>-		basic_machine=580-amdahl</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	amiga | amiga-*)</div><div class='del'>-		basic_machine=m68k-unknown</div><div class='del'>-		;;</div><div class='del'>-	amigaos | amigados)</div><div class='del'>-		basic_machine=m68k-unknown</div><div class='del'>-		os=-amigaos</div><div class='del'>-		;;</div><div class='del'>-	amigaunix | amix)</div><div class='del'>-		basic_machine=m68k-unknown</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-	apollo68)</div><div class='del'>-		basic_machine=m68k-apollo</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	apollo68bsd)</div><div class='del'>-		basic_machine=m68k-apollo</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	aux)</div><div class='del'>-		basic_machine=m68k-apple</div><div class='del'>-		os=-aux</div><div class='del'>-		;;</div><div class='del'>-	balance)</div><div class='del'>-		basic_machine=ns32k-sequent</div><div class='del'>-		os=-dynix</div><div class='del'>-		;;</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='del'>-	convex-c1)</div><div class='del'>-		basic_machine=c1-convex</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	convex-c2)</div><div class='del'>-		basic_machine=c2-convex</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	convex-c32)</div><div class='del'>-		basic_machine=c32-convex</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	convex-c34)</div><div class='del'>-		basic_machine=c34-convex</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	convex-c38)</div><div class='del'>-		basic_machine=c38-convex</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	cray | j90)</div><div class='del'>-		basic_machine=j90-cray</div><div class='del'>-		os=-unicos</div><div class='del'>-		;;</div><div class='del'>-	crds | unos)</div><div class='del'>-		basic_machine=m68k-crds</div><div class='del'>-		;;</div><div class='del'>-	cris | cris-* | etrax*)</div><div class='del'>-		basic_machine=cris-axis</div><div class='del'>-		;;</div><div class='del'>-	da30 | da30-*)</div><div class='del'>-		basic_machine=m68k-da30</div><div class='del'>-		;;</div><div class='del'>-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)</div><div class='del'>-		basic_machine=mips-dec</div><div class='del'>-		;;</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='del'>-	delta | 3300 | motorola-3300 | motorola-delta \</div><div class='del'>-	      | 3300-motorola | delta-motorola)</div><div class='del'>-		basic_machine=m68k-motorola</div><div class='del'>-		;;</div><div class='del'>-	delta88)</div><div class='del'>-		basic_machine=m88k-motorola</div><div class='del'>-		os=-sysv3</div><div class='del'>-		;;</div><div class='del'>-	dpx20 | dpx20-*)</div><div class='del'>-		basic_machine=rs6000-bull</div><div class='del'>-		os=-bosx</div><div class='del'>-		;;</div><div class='del'>-	dpx2* | dpx2*-bull)</div><div class='del'>-		basic_machine=m68k-bull</div><div class='del'>-		os=-sysv3</div><div class='del'>-		;;</div><div class='del'>-	ebmon29k)</div><div class='del'>-		basic_machine=a29k-amd</div><div class='del'>-		os=-ebmon</div><div class='del'>-		;;</div><div class='del'>-	elxsi)</div><div class='del'>-		basic_machine=elxsi-elxsi</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	encore | umax | mmax)</div><div class='del'>-		basic_machine=ns32k-encore</div><div class='del'>-		;;</div><div class='del'>-	es1800 | OSE68k | ose68k | ose | OSE)</div><div class='del'>-		basic_machine=m68k-ericsson</div><div class='del'>-		os=-ose</div><div class='del'>-		;;</div><div class='del'>-	fx2800)</div><div class='del'>-		basic_machine=i860-alliant</div><div class='del'>-		;;</div><div class='del'>-	genix)</div><div class='del'>-		basic_machine=ns32k-ns</div><div class='del'>-		;;</div><div class='del'>-	gmicro)</div><div class='del'>-		basic_machine=tron-gmicro</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	go32)</div><div class='del'>-		basic_machine=i386-pc</div><div class='del'>-		os=-go32</div><div class='del'>-		;;</div><div class='del'>-	h3050r* | hiux*)</div><div class='del'>-		basic_machine=hppa1.1-hitachi</div><div class='del'>-		os=-hiuxwe2</div><div class='del'>-		;;</div><div class='del'>-	h8300hms)</div><div class='del'>-		basic_machine=h8300-hitachi</div><div class='del'>-		os=-hms</div><div class='del'>-		;;</div><div class='del'>-	h8300xray)</div><div class='del'>-		basic_machine=h8300-hitachi</div><div class='del'>-		os=-xray</div><div class='del'>-		;;</div><div class='del'>-	h8500hms)</div><div class='del'>-		basic_machine=h8500-hitachi</div><div class='del'>-		os=-hms</div><div class='del'>-		;;</div><div class='del'>-	harris)</div><div class='del'>-		basic_machine=m88k-harris</div><div class='del'>-		os=-sysv3</div><div class='del'>-		;;</div><div class='del'>-	hp300-*)</div><div class='del'>-		basic_machine=m68k-hp</div><div class='del'>-		;;</div><div class='del'>-	hp300bsd)</div><div class='del'>-		basic_machine=m68k-hp</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	hp300hpux)</div><div class='del'>-		basic_machine=m68k-hp</div><div class='del'>-		os=-hpux</div><div class='del'>-		;;</div><div class='del'>-	hp3k9[0-9][0-9] | hp9[0-9][0-9])</div><div class='del'>-		basic_machine=hppa1.0-hp</div><div class='del'>-		;;</div><div class='del'>-	hp9k2[0-9][0-9] | hp9k31[0-9])</div><div class='del'>-		basic_machine=m68000-hp</div><div class='del'>-		;;</div><div class='del'>-	hp9k3[2-9][0-9])</div><div class='del'>-		basic_machine=m68k-hp</div><div class='del'>-		;;</div><div class='del'>-	hp9k6[0-9][0-9] | hp6[0-9][0-9])</div><div class='del'>-		basic_machine=hppa1.0-hp</div><div class='del'>-		;;</div><div class='del'>-	hp9k7[0-79][0-9] | hp7[0-79][0-9])</div><div class='del'>-		basic_machine=hppa1.1-hp</div><div class='del'>-		;;</div><div class='del'>-	hp9k78[0-9] | hp78[0-9])</div><div class='del'>-		# FIXME: really hppa2.0-hp</div><div class='del'>-		basic_machine=hppa1.1-hp</div><div class='del'>-		;;</div><div class='del'>-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)</div><div class='del'>-		# FIXME: really hppa2.0-hp</div><div class='del'>-		basic_machine=hppa1.1-hp</div><div class='del'>-		;;</div><div class='del'>-	hp9k8[0-9][13679] | hp8[0-9][13679])</div><div class='del'>-		basic_machine=hppa1.1-hp</div><div class='del'>-		;;</div><div class='del'>-	hp9k8[0-9][0-9] | hp8[0-9][0-9])</div><div class='del'>-		basic_machine=hppa1.0-hp</div><div class='del'>-		;;</div><div class='del'>-	hppa-next)</div><div class='del'>-		os=-nextstep3</div><div class='del'>-		;;</div><div class='del'>-	hppaosf)</div><div class='del'>-		basic_machine=hppa1.1-hp</div><div class='del'>-		os=-osf</div><div class='del'>-		;;</div><div class='del'>-	hppro)</div><div class='del'>-		basic_machine=hppa1.1-hp</div><div class='del'>-		os=-proelf</div><div class='del'>-		;;</div><div class='del'>-	i370-ibm* | ibm*)</div><div class='del'>-		basic_machine=i370-ibm</div><div class='del'>-		;;</div><div class='del'>-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?</div><div class='del'>-	i*86v32)</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`</div><div class='del'>-		os=-sysv32</div><div class='del'>-		;;</div><div class='del'>-	i*86v4*)</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-	i*86v)</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	i*86sol2)</div><div class='del'>-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`</div><div class='del'>-		os=-solaris2</div><div class='del'>-		;;</div><div class='del'>-	i386mach)</div><div class='del'>-		basic_machine=i386-mach</div><div class='del'>-		os=-mach</div><div class='del'>-		;;</div><div class='del'>-	i386-vsta | vsta)</div><div class='del'>-		basic_machine=i386-unknown</div><div class='del'>-		os=-vsta</div><div class='del'>-		;;</div><div class='del'>-	iris | iris4d)</div><div class='del'>-		basic_machine=mips-sgi</div><div class='del'>-		case $os in</div><div class='del'>-		    -irix*)</div><div class='del'>-			;;</div><div class='del'>-		    *)</div><div class='del'>-			os=-irix4</div><div class='del'>-			;;</div><div class='del'>-		esac</div><div class='del'>-		;;</div><div class='del'>-	isi68 | isi)</div><div class='del'>-		basic_machine=m68k-isi</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	m88k-omron*)</div><div class='del'>-		basic_machine=m88k-omron</div><div class='del'>-		;;</div><div class='del'>-	magnum | m3230)</div><div class='del'>-		basic_machine=mips-mips</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	merlin)</div><div class='del'>-		basic_machine=ns32k-utek</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	mingw32)</div><div class='del'>-		basic_machine=i386-pc</div><div class='del'>-		os=-mingw32</div><div class='del'>-		;;</div><div class='del'>-	miniframe)</div><div class='del'>-		basic_machine=m68000-convergent</div><div class='del'>-		;;</div><div class='del'>-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)</div><div class='del'>-		basic_machine=m68k-atari</div><div class='del'>-		os=-mint</div><div class='del'>-		;;</div><div class='del'>-	mips3*-*)</div><div class='del'>-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`</div><div class='del'>-		;;</div><div class='del'>-	mips3*)</div><div class='del'>-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown</div><div class='del'>-		;;</div><div class='del'>-	mmix*)</div><div class='del'>-		basic_machine=mmix-knuth</div><div class='del'>-		os=-mmixware</div><div class='del'>-		;;</div><div class='del'>-	monitor)</div><div class='del'>-		basic_machine=m68k-rom68k</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</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='del'>-	msdos)</div><div class='del'>-		basic_machine=i386-pc</div><div class='del'>-		os=-msdos</div><div class='del'>-		;;</div><div class='del'>-	mvs)</div><div class='del'>-		basic_machine=i370-ibm</div><div class='del'>-		os=-mvs</div><div class='del'>-		;;</div><div class='del'>-	ncr3000)</div><div class='del'>-		basic_machine=i486-ncr</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-	netbsd386)</div><div class='del'>-		basic_machine=i386-unknown</div><div class='del'>-		os=-netbsd</div><div class='del'>-		;;</div><div class='del'>-	netwinder)</div><div class='del'>-		basic_machine=armv4l-rebel</div><div class='del'>-		os=-linux</div><div class='del'>-		;;</div><div class='del'>-	news | news700 | news800 | news900)</div><div class='del'>-		basic_machine=m68k-sony</div><div class='del'>-		os=-newsos</div><div class='del'>-		;;</div><div class='del'>-	news1000)</div><div class='del'>-		basic_machine=m68030-sony</div><div class='del'>-		os=-newsos</div><div class='del'>-		;;</div><div class='del'>-	news-3600 | risc-news)</div><div class='del'>-		basic_machine=mips-sony</div><div class='del'>-		os=-newsos</div><div class='del'>-		;;</div><div class='del'>-	necv70)</div><div class='del'>-		basic_machine=v70-nec</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	next | m*-next )</div><div class='del'>-		basic_machine=m68k-next</div><div class='del'>-		case $os in</div><div class='del'>-		    -nextstep* )</div><div class='del'>-			;;</div><div class='del'>-		    -ns2*)</div><div class='del'>-		      os=-nextstep2</div><div class='del'>-			;;</div><div class='del'>-		    *)</div><div class='del'>-		      os=-nextstep3</div><div class='del'>-			;;</div><div class='del'>-		esac</div><div class='del'>-		;;</div><div class='del'>-	nh3000)</div><div class='del'>-		basic_machine=m68k-harris</div><div class='del'>-		os=-cxux</div><div class='del'>-		;;</div><div class='del'>-	nh[45]000)</div><div class='del'>-		basic_machine=m88k-harris</div><div class='del'>-		os=-cxux</div><div class='del'>-		;;</div><div class='del'>-	nindy960)</div><div class='del'>-		basic_machine=i960-intel</div><div class='del'>-		os=-nindy</div><div class='del'>-		;;</div><div class='del'>-	mon960)</div><div class='del'>-		basic_machine=i960-intel</div><div class='del'>-		os=-mon960</div><div class='del'>-		;;</div><div class='del'>-	nonstopux)</div><div class='del'>-		basic_machine=mips-compaq</div><div class='del'>-		os=-nonstopux</div><div class='del'>-		;;</div><div class='del'>-	np1)</div><div class='del'>-		basic_machine=np1-gould</div><div class='del'>-		;;</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='del'>-	nsr-tandem)</div><div class='del'>-		basic_machine=nsr-tandem</div><div class='del'>-		;;</div><div class='del'>-	op50n-* | op60c-*)</div><div class='del'>-		basic_machine=hppa1.1-oki</div><div class='del'>-		os=-proelf</div><div class='del'>-		;;</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='del'>-	OSE68000 | ose68000)</div><div class='del'>-		basic_machine=m68000-ericsson</div><div class='del'>-		os=-ose</div><div class='del'>-		;;</div><div class='del'>-	os68k)</div><div class='del'>-		basic_machine=m68k-none</div><div class='del'>-		os=-os68k</div><div class='del'>-		;;</div><div class='del'>-	pa-hitachi)</div><div class='del'>-		basic_machine=hppa1.1-hitachi</div><div class='del'>-		os=-hiuxwe2</div><div class='del'>-		;;</div><div class='del'>-	paragon)</div><div class='del'>-		basic_machine=i860-intel</div><div class='del'>-		os=-osf</div><div class='del'>-		;;</div><div class='del'>-	pbd)</div><div class='del'>-		basic_machine=sparc-tti</div><div class='del'>-		;;</div><div class='del'>-	pbb)</div><div class='del'>-		basic_machine=m68k-tti</div><div class='del'>-		;;</div><div class='del'>-	pc532 | pc532-*)</div><div class='del'>-		basic_machine=ns32k-pc532</div><div class='del'>-		;;</div><div class='del'>-	pentium | p5 | k5 | k6 | nexgen | viac3)</div><div class='del'>-		basic_machine=i586-pc</div><div class='del'>-		;;</div><div class='del'>-	pentiumpro | p6 | 6x86 | athlon | athlon_*)</div><div class='del'>-		basic_machine=i686-pc</div><div class='del'>-		;;</div><div class='del'>-	pentiumii | pentium2 | pentiumiii | pentium3)</div><div class='del'>-		basic_machine=i686-pc</div><div class='del'>-		;;</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='del'>-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='del'>-	pentiumpro-* | p6-* | 6x86-* | athlon-*)</div><div class='del'>-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='del'>-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)</div><div class='del'>-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='del'>-	pentium4-*)</div><div class='del'>-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='del'>-	pn)</div><div class='del'>-		basic_machine=pn-gould</div><div class='del'>-		;;</div><div class='del'>-	power)	basic_machine=power-ibm</div><div class='del'>-		;;</div><div class='del'>-	ppc)	basic_machine=powerpc-unknown</div><div class='del'>-		;;</div><div class='del'>-	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</div><div class='del'>-	ppcle | powerpclittle | ppc-le | powerpc-little)</div><div class='del'>-		basic_machine=powerpcle-unknown</div><div class='del'>-		;;</div><div class='del'>-	ppcle-* | powerpclittle-*)</div><div class='del'>-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`</div><div class='del'>-		;;</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='del'>-	ps2)</div><div class='del'>-		basic_machine=i386-ibm</div><div class='del'>-		;;</div><div class='del'>-	pw32)</div><div class='del'>-		basic_machine=i586-unknown</div><div class='del'>-		os=-pw32</div><div class='del'>-		;;</div><div class='del'>-	rom68k)</div><div class='del'>-		basic_machine=m68k-rom68k</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</div><div class='del'>-	rm[46]00)</div><div class='del'>-		basic_machine=mips-siemens</div><div class='del'>-		;;</div><div class='del'>-	rtpc | rtpc-*)</div><div class='del'>-		basic_machine=romp-ibm</div><div class='del'>-		;;</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='del'>-	sa29200)</div><div class='del'>-		basic_machine=a29k-amd</div><div class='del'>-		os=-udi</div><div class='del'>-		;;</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='del'>-	sequent)</div><div class='del'>-		basic_machine=i386-sequent</div><div class='del'>-		;;</div><div class='del'>-	sh)</div><div class='del'>-		basic_machine=sh-hitachi</div><div class='del'>-		os=-hms</div><div class='del'>-		;;</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='del'>-		basic_machine=sparclite-wrs</div><div class='del'>-		os=-vxworks</div><div class='del'>-		;;</div><div class='del'>-	sps7)</div><div class='del'>-		basic_machine=m68k-bull</div><div class='del'>-		os=-sysv2</div><div class='del'>-		;;</div><div class='del'>-	spur)</div><div class='del'>-		basic_machine=spur-unknown</div><div class='del'>-		;;</div><div class='del'>-	st2000)</div><div class='del'>-		basic_machine=m68k-tandem</div><div class='del'>-		;;</div><div class='del'>-	stratus)</div><div class='del'>-		basic_machine=i860-stratus</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-	sun2)</div><div class='del'>-		basic_machine=m68000-sun</div><div class='del'>-		;;</div><div class='del'>-	sun2os3)</div><div class='del'>-		basic_machine=m68000-sun</div><div class='del'>-		os=-sunos3</div><div class='del'>-		;;</div><div class='del'>-	sun2os4)</div><div class='del'>-		basic_machine=m68000-sun</div><div class='del'>-		os=-sunos4</div><div class='del'>-		;;</div><div class='del'>-	sun3os3)</div><div class='del'>-		basic_machine=m68k-sun</div><div class='del'>-		os=-sunos3</div><div class='del'>-		;;</div><div class='del'>-	sun3os4)</div><div class='del'>-		basic_machine=m68k-sun</div><div class='del'>-		os=-sunos4</div><div class='del'>-		;;</div><div class='del'>-	sun4os3)</div><div class='del'>-		basic_machine=sparc-sun</div><div class='del'>-		os=-sunos3</div><div class='del'>-		;;</div><div class='del'>-	sun4os4)</div><div class='del'>-		basic_machine=sparc-sun</div><div class='del'>-		os=-sunos4</div><div class='del'>-		;;</div><div class='del'>-	sun4sol2)</div><div class='del'>-		basic_machine=sparc-sun</div><div class='del'>-		os=-solaris2</div><div class='del'>-		;;</div><div class='del'>-	sun3 | sun3-*)</div><div class='del'>-		basic_machine=m68k-sun</div><div class='del'>-		;;</div><div class='del'>-	sun4)</div><div class='del'>-		basic_machine=sparc-sun</div><div class='del'>-		;;</div><div class='del'>-	sun386 | sun386i | roadrunner)</div><div class='del'>-		basic_machine=i386-sun</div><div class='del'>-		;;</div><div class='del'>-	sv1)</div><div class='del'>-		basic_machine=sv1-cray</div><div class='del'>-		os=-unicos</div><div class='del'>-		;;</div><div class='del'>-	symmetry)</div><div class='del'>-		basic_machine=i386-sequent</div><div class='del'>-		os=-dynix</div><div class='del'>-		;;</div><div class='del'>-	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='del'>-		os=-unicos</div><div class='del'>-		;;</div><div class='del'>-	tic54x | c54x*)</div><div class='del'>-		basic_machine=tic54x-unknown</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</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='del'>-	tx39)</div><div class='del'>-		basic_machine=mipstx39-unknown</div><div class='del'>-		;;</div><div class='del'>-	tx39el)</div><div class='del'>-		basic_machine=mipstx39el-unknown</div><div class='del'>-		;;</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='del'>-	tower | tower-32)</div><div class='del'>-		basic_machine=m68k-ncr</div><div class='del'>-		;;</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='del'>-	udi29k)</div><div class='del'>-		basic_machine=a29k-amd</div><div class='del'>-		os=-udi</div><div class='del'>-		;;</div><div class='del'>-	ultra3)</div><div class='del'>-		basic_machine=a29k-nyu</div><div class='del'>-		os=-sym1</div><div class='del'>-		;;</div><div class='del'>-	v810 | necv810)</div><div class='del'>-		basic_machine=v810-nec</div><div class='del'>-		os=-none</div><div class='del'>-		;;</div><div class='del'>-	vaxv)</div><div class='del'>-		basic_machine=vax-dec</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	vms)</div><div class='del'>-		basic_machine=vax-dec</div><div class='del'>-		os=-vms</div><div class='del'>-		;;</div><div class='del'>-	vpp*|vx|vx-*)</div><div class='del'>-		basic_machine=f301-fujitsu</div><div class='del'>-		;;</div><div class='del'>-	vxworks960)</div><div class='del'>-		basic_machine=i960-wrs</div><div class='del'>-		os=-vxworks</div><div class='del'>-		;;</div><div class='del'>-	vxworks68)</div><div class='del'>-		basic_machine=m68k-wrs</div><div class='del'>-		os=-vxworks</div><div class='del'>-		;;</div><div class='del'>-	vxworks29k)</div><div class='del'>-		basic_machine=a29k-wrs</div><div class='del'>-		os=-vxworks</div><div class='del'>-		;;</div><div class='del'>-	w65*)</div><div class='del'>-		basic_machine=w65-wdc</div><div class='del'>-		os=-none</div><div class='del'>-		;;</div><div class='del'>-	w89k-*)</div><div class='del'>-		basic_machine=hppa1.1-winbond</div><div class='del'>-		os=-proelf</div><div class='del'>-		;;</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='del'>-		os=-unicos</div><div class='del'>-		;;</div><div class='del'>-	z8k-*-coff)</div><div class='del'>-		basic_machine=z8k-unknown</div><div class='del'>-		os=-sim</div><div class='del'>-		;;</div><div class='del'>-	none)</div><div class='del'>-		basic_machine=none-none</div><div class='del'>-		os=-none</div><div class='del'>-		;;</div><div class='del'>-</div><div class='del'>-# Here we handle the default manufacturer of certain CPU types.  It is in</div><div class='del'>-# some cases the only manufacturer, in others, it is the most popular.</div><div class='del'>-	w89k)</div><div class='del'>-		basic_machine=hppa1.1-winbond</div><div class='del'>-		;;</div><div class='del'>-	op50n)</div><div class='del'>-		basic_machine=hppa1.1-oki</div><div class='del'>-		;;</div><div class='del'>-	op60c)</div><div class='del'>-		basic_machine=hppa1.1-oki</div><div class='del'>-		;;</div><div class='del'>-	romp)</div><div class='del'>-		basic_machine=romp-ibm</div><div class='del'>-		;;</div><div class='del'>-	rs6000)</div><div class='del'>-		basic_machine=rs6000-ibm</div><div class='del'>-		;;</div><div class='del'>-	vax)</div><div class='del'>-		basic_machine=vax-dec</div><div class='del'>-		;;</div><div class='del'>-	pdp10)</div><div class='del'>-		# there are many clones, so DEC is not a safe bet</div><div class='del'>-		basic_machine=pdp10-unknown</div><div class='del'>-		;;</div><div class='del'>-	pdp11)</div><div class='del'>-		basic_machine=pdp11-dec</div><div class='del'>-		;;</div><div class='del'>-	we32k)</div><div class='del'>-		basic_machine=we32k-att</div><div class='del'>-		;;</div><div class='del'>-	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)</div><div class='del'>-		basic_machine=sh-unknown</div><div class='del'>-		;;</div><div class='del'>-	sh64)</div><div class='del'>-		basic_machine=sh64-unknown</div><div class='del'>-		;;</div><div class='del'>-	sparc | sparcv9 | sparcv9b)</div><div class='del'>-		basic_machine=sparc-sun</div><div class='del'>-		;;</div><div class='del'>-	cydra)</div><div class='del'>-		basic_machine=cydra-cydrome</div><div class='del'>-		;;</div><div class='del'>-	orion)</div><div class='del'>-		basic_machine=orion-highlevel</div><div class='del'>-		;;</div><div class='del'>-	orion105)</div><div class='del'>-		basic_machine=clipper-highlevel</div><div class='del'>-		;;</div><div class='del'>-	mac | mpw | mac-mpw)</div><div class='del'>-		basic_machine=m68k-apple</div><div class='del'>-		;;</div><div class='del'>-	pmac | pmac-mpw)</div><div class='del'>-		basic_machine=powerpc-apple</div><div class='del'>-		;;</div><div class='del'>-	*-unknown)</div><div class='del'>-		# Make sure to match an already-canonicalized machine name.</div><div class='del'>-		;;</div><div class='del'>-	*)</div><div class='del'>-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1&gt;&amp;2</div><div class='del'>-		exit 1</div><div class='del'>-		;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-# Here we canonicalize certain aliases for manufacturers.</div><div class='del'>-case $basic_machine in</div><div class='del'>-	*-digital*)</div><div class='del'>-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`</div><div class='del'>-		;;</div><div class='del'>-	*-commodore*)</div><div class='del'>-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`</div><div class='del'>-		;;</div><div class='del'>-	*)</div><div class='del'>-		;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-# Decode manufacturer-specific aliases for certain operating systems.</div><div class='del'>-</div><div class='del'>-if [ x"$os" != x"" ]</div><div class='del'>-then</div><div class='del'>-case $os in</div><div class='del'>-        # First match some system type aliases</div><div class='del'>-        # that might get confused with valid system types.</div><div class='del'>-	# -solaris* is a basic system type, with this one exception.</div><div class='del'>-	-solaris1 | -solaris1.*)</div><div class='del'>-		os=`echo $os | sed -e 's|solaris1|sunos4|'`</div><div class='del'>-		;;</div><div class='del'>-	-solaris)</div><div class='del'>-		os=-solaris2</div><div class='del'>-		;;</div><div class='del'>-	-svr4*)</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-	-unixware*)</div><div class='del'>-		os=-sysv4.2uw</div><div class='del'>-		;;</div><div class='del'>-	-gnu/linux*)</div><div class='del'>-		os=`echo $os | sed -e 's|gnu/linux|linux|'`</div><div class='del'>-		;;</div><div class='del'>-	# First accept the basic system types.</div><div class='del'>-	# The portable systems comes first.</div><div class='del'>-	# Each alternative MUST END IN A *, to match a version number.</div><div class='del'>-	# -sysv* is not here because it comes later, after sysvr4.</div><div class='del'>-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \</div><div class='del'>-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\</div><div class='del'>-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \</div><div class='del'>-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \</div><div class='del'>-	      | -aos* \</div><div class='del'>-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \</div><div class='del'>-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \</div><div class='del'>-	      | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \</div><div class='del'>-	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \</div><div class='del'>-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \</div><div class='del'>-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \</div><div class='del'>-	      | -chorusos* | -chorusrdb* \</div><div class='del'>-	      | -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='del'>-	      | -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='del'>-	# Remember, each alternative MUST END IN *, to match a version number.</div><div class='del'>-		;;</div><div class='del'>-	-qnx*)</div><div class='del'>-		case $basic_machine in</div><div class='del'>-		    x86-* | i*86-*)</div><div class='del'>-			;;</div><div class='del'>-		    *)</div><div class='del'>-			os=-nto$os</div><div class='del'>-			;;</div><div class='del'>-		esac</div><div class='del'>-		;;</div><div class='del'>-	-nto-qnx*)</div><div class='del'>-		;;</div><div class='del'>-	-nto*)</div><div class='del'>-		os=`echo $os | sed -e 's|nto|nto-qnx|'`</div><div class='del'>-		;;</div><div class='del'>-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \</div><div class='del'>-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \</div><div class='del'>-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)</div><div class='del'>-		;;</div><div class='del'>-	-mac*)</div><div class='del'>-		os=`echo $os | sed -e 's|mac|macos|'`</div><div class='del'>-		;;</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='del'>-	-sunos5*)</div><div class='del'>-		os=`echo $os | sed -e 's|sunos5|solaris2|'`</div><div class='del'>-		;;</div><div class='del'>-	-sunos6*)</div><div class='del'>-		os=`echo $os | sed -e 's|sunos6|solaris3|'`</div><div class='del'>-		;;</div><div class='del'>-	-opened*)</div><div class='del'>-		os=-openedition</div><div class='del'>-		;;</div><div class='del'>-        -os400*)</div><div class='del'>-		os=-os400</div><div class='del'>-		;;</div><div class='del'>-	-wince*)</div><div class='del'>-		os=-wince</div><div class='del'>-		;;</div><div class='del'>-	-osfrose*)</div><div class='del'>-		os=-osfrose</div><div class='del'>-		;;</div><div class='del'>-	-osf*)</div><div class='del'>-		os=-osf</div><div class='del'>-		;;</div><div class='del'>-	-utek*)</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	-dynix*)</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	-acis*)</div><div class='del'>-		os=-aos</div><div class='del'>-		;;</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='del'>-	-386bsd)</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	-ctix* | -uts*)</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	-nova*)</div><div class='del'>-		os=-rtmk-nova</div><div class='del'>-		;;</div><div class='del'>-	-ns2 )</div><div class='del'>-		os=-nextstep2</div><div class='del'>-		;;</div><div class='del'>-	-nsk*)</div><div class='del'>-		os=-nsk</div><div class='del'>-		;;</div><div class='del'>-	# Preserve the version number of sinix5.</div><div class='del'>-	-sinix5.*)</div><div class='del'>-		os=`echo $os | sed -e 's|sinix|sysv|'`</div><div class='del'>-		;;</div><div class='del'>-	-sinix*)</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-        -tpf*)</div><div class='del'>-		os=-tpf</div><div class='del'>-		;;</div><div class='del'>-	-triton*)</div><div class='del'>-		os=-sysv3</div><div class='del'>-		;;</div><div class='del'>-	-oss*)</div><div class='del'>-		os=-sysv3</div><div class='del'>-		;;</div><div class='del'>-	-svr4)</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-	-svr3)</div><div class='del'>-		os=-sysv3</div><div class='del'>-		;;</div><div class='del'>-	-sysvr4)</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-	# This must come after -sysvr4.</div><div class='del'>-	-sysv*)</div><div class='del'>-		;;</div><div class='del'>-	-ose*)</div><div class='del'>-		os=-ose</div><div class='del'>-		;;</div><div class='del'>-	-es1800*)</div><div class='del'>-		os=-ose</div><div class='del'>-		;;</div><div class='del'>-	-xenix)</div><div class='del'>-		os=-xenix</div><div class='del'>-		;;</div><div class='del'>-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)</div><div class='del'>-		os=-mint</div><div class='del'>-		;;</div><div class='del'>-	-aros*)</div><div class='del'>-		os=-aros</div><div class='del'>-		;;</div><div class='del'>-	-kaos*)</div><div class='del'>-		os=-kaos</div><div class='del'>-		;;</div><div class='del'>-	-none)</div><div class='del'>-		;;</div><div class='del'>-	*)</div><div class='del'>-		# Get rid of the `-' at the beginning of $os.</div><div class='del'>-		os=`echo $os | sed 's/[^-]*-//'`</div><div class='del'>-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1&gt;&amp;2</div><div class='del'>-		exit 1</div><div class='del'>-		;;</div><div class='del'>-esac</div><div class='del'>-else</div><div class='del'>-</div><div class='del'>-# Here we handle the default operating systems that come with various machines.</div><div class='del'>-# The value should be what the vendor currently ships out the door with their</div><div class='del'>-# machine or put another way, the most popular os provided with the machine.</div><div class='del'>-</div><div class='del'>-# Note that if you're going to try to match "-MANUFACTURER" here (say,</div><div class='del'>-# "-sun"), then you have to tell the case statement up towards the top</div><div class='del'>-# that MANUFACTURER isn't an operating system.  Otherwise, code above</div><div class='del'>-# will signal an error saying that MANUFACTURER isn't an operating</div><div class='del'>-# system, and we'll never get to this point.</div><div class='del'>-</div><div class='del'>-case $basic_machine in</div><div class='del'>-	*-acorn)</div><div class='del'>-		os=-riscix1.2</div><div class='del'>-		;;</div><div class='del'>-	arm*-rebel)</div><div class='del'>-		os=-linux</div><div class='del'>-		;;</div><div class='del'>-	arm*-semi)</div><div class='del'>-		os=-aout</div><div class='del'>-		;;</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='del'>-	pdp10-*)</div><div class='del'>-		os=-tops20</div><div class='del'>-		;;</div><div class='del'>-	pdp11-*)</div><div class='del'>-		os=-none</div><div class='del'>-		;;</div><div class='del'>-	*-dec | vax-*)</div><div class='del'>-		os=-ultrix4.2</div><div class='del'>-		;;</div><div class='del'>-	m68*-apollo)</div><div class='del'>-		os=-domain</div><div class='del'>-		;;</div><div class='del'>-	i386-sun)</div><div class='del'>-		os=-sunos4.0.2</div><div class='del'>-		;;</div><div class='del'>-	m68000-sun)</div><div class='del'>-		os=-sunos3</div><div class='del'>-		# This also exists in the configure program, but was not the</div><div class='del'>-		# default.</div><div class='del'>-		# os=-sunos4</div><div class='del'>-		;;</div><div class='del'>-	m68*-cisco)</div><div class='del'>-		os=-aout</div><div class='del'>-		;;</div><div class='del'>-	mips*-cisco)</div><div class='del'>-		os=-elf</div><div class='del'>-		;;</div><div class='del'>-	mips*-*)</div><div class='del'>-		os=-elf</div><div class='del'>-		;;</div><div class='del'>-	or32-*)</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</div><div class='del'>-	*-tti)	# must be before sparc entry or we get the wrong os.</div><div class='del'>-		os=-sysv3</div><div class='del'>-		;;</div><div class='del'>-	sparc-* | *-sun)</div><div class='del'>-		os=-sunos4.1.1</div><div class='del'>-		;;</div><div class='del'>-	*-be)</div><div class='del'>-		os=-beos</div><div class='del'>-		;;</div><div class='del'>-	*-ibm)</div><div class='del'>-		os=-aix</div><div class='del'>-		;;</div><div class='del'>-	*-wec)</div><div class='del'>-		os=-proelf</div><div class='del'>-		;;</div><div class='del'>-	*-winbond)</div><div class='del'>-		os=-proelf</div><div class='del'>-		;;</div><div class='del'>-	*-oki)</div><div class='del'>-		os=-proelf</div><div class='del'>-		;;</div><div class='del'>-	*-hp)</div><div class='del'>-		os=-hpux</div><div class='del'>-		;;</div><div class='del'>-	*-hitachi)</div><div class='del'>-		os=-hiux</div><div class='del'>-		;;</div><div class='del'>-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	*-cbm)</div><div class='del'>-		os=-amigaos</div><div class='del'>-		;;</div><div class='del'>-	*-dg)</div><div class='del'>-		os=-dgux</div><div class='del'>-		;;</div><div class='del'>-	*-dolphin)</div><div class='del'>-		os=-sysv3</div><div class='del'>-		;;</div><div class='del'>-	m68k-ccur)</div><div class='del'>-		os=-rtu</div><div class='del'>-		;;</div><div class='del'>-	m88k-omron*)</div><div class='del'>-		os=-luna</div><div class='del'>-		;;</div><div class='del'>-	*-next )</div><div class='del'>-		os=-nextstep</div><div class='del'>-		;;</div><div class='del'>-	*-sequent)</div><div class='del'>-		os=-ptx</div><div class='del'>-		;;</div><div class='del'>-	*-crds)</div><div class='del'>-		os=-unos</div><div class='del'>-		;;</div><div class='del'>-	*-ns)</div><div class='del'>-		os=-genix</div><div class='del'>-		;;</div><div class='del'>-	i370-*)</div><div class='del'>-		os=-mvs</div><div class='del'>-		;;</div><div class='del'>-	*-next)</div><div class='del'>-		os=-nextstep3</div><div class='del'>-		;;</div><div class='del'>-	*-gould)</div><div class='del'>-		os=-sysv</div><div class='del'>-		;;</div><div class='del'>-	*-highlevel)</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	*-encore)</div><div class='del'>-		os=-bsd</div><div class='del'>-		;;</div><div class='del'>-	*-sgi)</div><div class='del'>-		os=-irix</div><div class='del'>-		;;</div><div class='del'>-	*-siemens)</div><div class='del'>-		os=-sysv4</div><div class='del'>-		;;</div><div class='del'>-	*-masscomp)</div><div class='del'>-		os=-rtu</div><div class='del'>-		;;</div><div class='del'>-	f30[01]-fujitsu | f700-fujitsu)</div><div class='del'>-		os=-uxpv</div><div class='del'>-		;;</div><div class='del'>-	*-rom68k)</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</div><div class='del'>-	*-*bug)</div><div class='del'>-		os=-coff</div><div class='del'>-		;;</div><div class='del'>-	*-apple)</div><div class='del'>-		os=-macos</div><div class='del'>-		;;</div><div class='del'>-	*-atari*)</div><div class='del'>-		os=-mint</div><div class='del'>-		;;</div><div class='del'>-	*)</div><div class='del'>-		os=-none</div><div class='del'>-		;;</div><div class='del'>-esac</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-# Here we handle the case where we know the os, and the CPU type, but not the</div><div class='del'>-# manufacturer.  We pick the logical manufacturer.</div><div class='del'>-vendor=unknown</div><div class='del'>-case $basic_machine in</div><div class='del'>-	*-unknown)</div><div class='del'>-		case $os in</div><div class='del'>-			-riscix*)</div><div class='del'>-				vendor=acorn</div><div class='del'>-				;;</div><div class='del'>-			-sunos*)</div><div class='del'>-				vendor=sun</div><div class='del'>-				;;</div><div class='del'>-			-aix*)</div><div class='del'>-				vendor=ibm</div><div class='del'>-				;;</div><div class='del'>-			-beos*)</div><div class='del'>-				vendor=be</div><div class='del'>-				;;</div><div class='del'>-			-hpux*)</div><div class='del'>-				vendor=hp</div><div class='del'>-				;;</div><div class='del'>-			-mpeix*)</div><div class='del'>-				vendor=hp</div><div class='del'>-				;;</div><div class='del'>-			-hiux*)</div><div class='del'>-				vendor=hitachi</div><div class='del'>-				;;</div><div class='del'>-			-unos*)</div><div class='del'>-				vendor=crds</div><div class='del'>-				;;</div><div class='del'>-			-dgux*)</div><div class='del'>-				vendor=dg</div><div class='del'>-				;;</div><div class='del'>-			-luna*)</div><div class='del'>-				vendor=omron</div><div class='del'>-				;;</div><div class='del'>-			-genix*)</div><div class='del'>-				vendor=ns</div><div class='del'>-				;;</div><div class='del'>-			-mvs* | -opened*)</div><div class='del'>-				vendor=ibm</div><div class='del'>-				;;</div><div class='del'>-			-os400*)</div><div class='del'>-				vendor=ibm</div><div class='del'>-				;;</div><div class='del'>-			-ptx*)</div><div class='del'>-				vendor=sequent</div><div class='del'>-				;;</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='del'>-				vendor=wrs</div><div class='del'>-				;;</div><div class='del'>-			-aux*)</div><div class='del'>-				vendor=apple</div><div class='del'>-				;;</div><div class='del'>-			-hms*)</div><div class='del'>-				vendor=hitachi</div><div class='del'>-				;;</div><div class='del'>-			-mpw* | -macos*)</div><div class='del'>-				vendor=apple</div><div class='del'>-				;;</div><div class='del'>-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)</div><div class='del'>-				vendor=atari</div><div class='del'>-				;;</div><div class='del'>-			-vos*)</div><div class='del'>-				vendor=stratus</div><div class='del'>-				;;</div><div class='del'>-		esac</div><div class='del'>-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`</div><div class='del'>-		;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-echo $basic_machine$os</div><div class='del'>-exit 0</div><div class='del'>-</div><div class='del'>-# Local variables:</div><div class='del'>-# eval: (add-hook 'write-file-hooks 'time-stamp)</div><div class='del'>-# time-stamp-start: "timestamp='"</div><div class='del'>-# time-stamp-format: "%:y-%02m-%02d"</div><div class='del'>-# time-stamp-end: "'"</div><div class='del'>-# End:</div><div class='head'>diff --git a/configure.in b/configure.in<br/>index 2a849cb979..041018e0d2 100644<br/>--- a/<a href='/ruby.git/tree/configure.in?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>configure.in</a><br/>+++ b/<a href='/ruby.git/tree/configure.in?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>configure.in</a></div><div class='hunk'>@@ -1,1810 +1,63 @@</div><div class='del'>-dnl Process this file with autoconf to produce a configure script.</div><div class='del'>-AC_INIT()</div><div class='del'>-</div><div class='del'>-AC_PREREQ(2.58)</div><div class='del'>-</div><div class='del'>-AC_DEFUN([RUBY_MINGW32],</div><div class='del'>-[case "$host_os" in</div><div class='del'>-cygwin*)</div><div class='del'>-AC_CACHE_CHECK(for mingw32 environment, rb_cv_mingw32,</div><div class='del'>-[AC_TRY_CPP([</div><div class='del'>-#ifndef __MINGW32__</div><div class='del'>-# error</div><div class='del'>-#endif</div><div class='del'>-], rb_cv_mingw32=yes,rb_cv_mingw32=no)</div><div class='del'>-rm -f conftest*])</div><div class='del'>-test "$rb_cv_mingw32" = yes &amp;&amp; target_os="mingw32"</div><div class='del'>-  ;;</div><div class='del'>-esac])</div><div class='del'>-</div><div class='del'>-AC_DEFUN([RUBY_CPPOUTFILE],</div><div class='del'>-[AC_CACHE_CHECK(whether ${CPP} accepts -o, rb_cv_cppoutfile,</div><div class='del'>-[cppflags=$CPPFLAGS</div><div class='del'>-CPPFLAGS='-o conftest.i'</div><div class='del'>-AC_TRY_CPP([], rb_cv_cppoutfile=yes, rb_cv_cppoutfile=no)</div><div class='del'>-CPPFLAGS=$cppflags</div><div class='del'>-rm -f conftest*])</div><div class='del'>-if test "$rb_cv_cppoutfile" = yes; then</div><div class='del'>-  CPPOUTFILE='-o conftest.i'</div><div class='del'>-elif test "$rb_cv_cppoutfile" = no; then</div><div class='del'>-  CPPOUTFILE='&gt; conftest.i'</div><div class='del'>-elif test -n "$rb_cv_cppoutfile"; then</div><div class='del'>-  CPPOUTFILE="$rb_cv_cppoutfile"</div><div class='del'>-fi</div><div class='del'>-AC_SUBST(CPPOUTFILE)])</div><div class='del'>-</div><div class='del'>-AC_DEFUN([RUBY_PROG_GNU_LD],</div><div class='del'>-[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='del'>-  rb_cv_prog_gnu_ld=yes</div><div class='del'>-else</div><div class='del'>-  rb_cv_prog_gnu_ld=no</div><div class='del'>-fi</div><div class='del'>-])</div><div class='del'>-GNU_LD=$rb_cv_prog_gnu_ld</div><div class='del'>-AC_SUBST(GNU_LD)])</div><div class='del'>-</div><div class='del'>-unset GREP_OPTIONS</div><div class='del'>-rb_version=`grep RUBY_VERSION $srcdir/version.h`</div><div class='del'>-MAJOR=`expr "$rb_version" : '#define RUBY_VERSION "\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*"'`</div><div class='del'>-MINOR=`expr "$rb_version" : '#define RUBY_VERSION "[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*"'`</div><div class='del'>-TEENY=`expr "$rb_version" : '#define RUBY_VERSION "[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\)"'`</div><div class='del'>-if test "$MAJOR" = ""; then</div><div class='del'>-  AC_MSG_ERROR(could not determine MAJOR number from version.h)</div><div class='del'>-fi</div><div class='del'>-if test "$MINOR" = ""; then</div><div class='del'>-  AC_MSG_ERROR(could not determine MINOR number from version.h)</div><div class='del'>-fi</div><div class='del'>-if test "$TEENY" = ""; then</div><div class='del'>-  AC_MSG_ERROR(could not determine TEENY number from version.h)</div><div class='del'>-fi</div><div class='del'>-AC_SUBST(MAJOR)</div><div class='del'>-AC_SUBST(MINOR)</div><div class='del'>-AC_SUBST(TEENY)</div><div class='del'>-dnl checks for alternative programs</div><div class='del'>-AC_ARG_WITH(gcc, [  --without-gcc           never use gcc], [</div><div class='del'>-	case $withval in</div><div class='del'>-	no)	: ${CC=cc}</div><div class='del'>-		;;</div><div class='del'>-	yes)	: ${CC=gcc}</div><div class='del'>-		;;</div><div class='del'>-	*)	CC=$withval</div><div class='del'>-		;;</div><div class='del'>-	esac])</div><div class='del'>-dnl If the user switches compilers, we can't believe the cache</div><div class='del'>-if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"</div><div class='del'>-then</div><div class='del'>-  AC_MSG_ERROR(cached CC is different -- throw away $cache_file</div><div class='del'>-(it is also a good idea to do 'make clean' before compiling))</div><div class='del'>-fi</div><div class='ctx'> </div><div class='del'>-if test "$program_prefix" = NONE; then</div><div class='del'>-  program_prefix=</div><div class='del'>-fi</div><div class='del'>-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='del'>-</div><div class='del'>-ifelse(currently,disabled, [</div><div class='del'>-dnl checks for fat-binary</div><div class='del'>-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='del'>-</div><div class='del'>-    AC_MSG_RESULT([$TARGET_ARCHS])</div><div class='del'>-</div><div class='del'>-    # /usr/lib/arch_tool -archify_list $TARGET_ARCHS</div><div class='del'>-    ARCH_FLAG=</div><div class='del'>-    for archs in $TARGET_ARCHS </div><div class='del'>-    do</div><div class='del'>-        ARCH_FLAG="$ARCH_FLAG -arch $archs"</div><div class='del'>-    done</div><div class='del'>-    AC_DEFINE(NEXT_FAT_BINARY)</div><div class='del'>-fi</div><div class='del'>-], [fat_binary=no])</div><div class='del'>-</div><div class='del'>-case $target_cpu in</div><div class='del'>-  i?86) frame_address=yes;;</div><div class='del'>-  *)    frame_address=no;;</div><div class='del'>-esac</div><div class='del'>-AC_ARG_ENABLE(frame-address,</div><div class='del'>-       [  --enable-frame-address  use GCC __builtin_frame_address(). ],</div><div class='del'>-       [frame_address=$enableval])</div><div class='del'>-if test $frame_address = yes; then</div><div class='del'>-    AC_DEFINE(USE_BUILTIN_FRAME_ADDRESS)</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_ARG_PROGRAM</div><div class='del'>-</div><div class='del'>-dnl Checks for programs.</div><div class='del'>-</div><div class='del'>-if test x"${build}" != x"${host}"; then</div><div class='del'>-  AC_CHECK_TOOL(CC, gcc)</div><div class='del'>-fi</div><div class='add'>+dnl Process this file with autoconf to produce a configure script.</div><div class='add'>+AC_INIT(ruby.h)</div><div class='add'>+PROGS="ruby"</div><div class='add'>+AC_SUBST(PROGS)dnl</div><div class='ctx'> AC_PROG_CC</div><div class='del'>-AC_PROG_GCC_TRADITIONAL</div><div class='del'>-if test "$GCC" = yes; then</div><div class='del'>-    linker_flag=-Wl,</div><div class='del'>-else</div><div class='del'>-    linker_flag=</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-RUBY_PROG_GNU_LD</div><div class='del'>-RUBY_CPPOUTFILE</div><div class='del'>-</div><div class='del'>-: ${OUTFLAG='-o '}</div><div class='del'>-AC_SUBST(OUTFLAG)</div><div class='del'>-</div><div class='del'>-RUBY_MINGW32</div><div class='del'>-</div><div class='del'>-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='del'>-AC_CHECK_TOOL(RANLIB, ranlib, :)</div><div class='del'>-AC_CHECK_TOOL(AR, ar)</div><div class='del'>-if test -z "$AR"; then</div><div class='del'>-  AC_CHECK_PROGS(AR, aal, ar)</div><div class='del'>-fi</div><div class='del'>-</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='del'>-case "$target_os" in</div><div class='del'>-cygwin*|mingw*)</div><div class='del'>-    AC_CHECK_TOOL(NM, nm)</div><div class='del'>-    AC_CHECK_TOOL(WINDRES, windres)</div><div class='del'>-    AC_CHECK_TOOL(DLLWRAP, dllwrap)</div><div class='del'>-    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='del'>-    : ${enable_shared=yes}</div><div class='del'>-    ;;</div><div class='del'>-aix*)</div><div class='del'>-    AC_CHECK_TOOL(NM, nm, /usr/ccs/bin/nm, /usr/ccs/bin:$PATH)</div><div class='del'>-    ;;</div><div class='del'>-hiuxmpp*)</div><div class='del'>-    # by TOYODA Eizi &lt;toyoda@npd.kishou.go.jp&gt;</div><div class='del'>-    AC_DEFINE(__HIUX_MPP__)</div><div class='del'>-    ;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-AC_PROG_LN_S</div><div class='del'>-AC_PROG_MAKE_SET</div><div class='del'>-AC_PROG_INSTALL</div><div class='del'>-</div><div class='del'>-# checks for UNIX variants that set C preprocessor variables</div><div class='del'>-AC_AIX</div><div class='del'>-AC_MINIX</div><div class='del'>-</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='del'>-dnl check for large file stuff</div><div class='del'>-mv confdefs.h confdefs1.h</div><div class='del'>-: &gt; confdefs.h</div><div class='del'>-AC_SYS_LARGEFILE</div><div class='del'>-mv confdefs.h largefile.h</div><div class='del'>-mv confdefs1.h confdefs.h</div><div class='del'>-cat largefile.h &gt;&gt; confdefs.h</div><div class='del'>-</div><div class='del'>-AC_CHECK_TYPES([long long, off_t])</div><div class='del'>-</div><div class='del'>-AC_CHECK_SIZEOF(int, 4)</div><div class='del'>-AC_CHECK_SIZEOF(short, 2)</div><div class='del'>-AC_CHECK_SIZEOF(long, 4)</div><div class='del'>-AC_CHECK_SIZEOF(long long, 0)</div><div class='del'>-AC_CHECK_SIZEOF(__int64, 0)</div><div class='del'>-AC_CHECK_SIZEOF(off_t, 0)</div><div class='del'>-AC_CHECK_SIZEOF(void*, 4)</div><div class='del'>-AC_CHECK_SIZEOF(float, 4)</div><div class='del'>-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='del'>-</div><div class='del'>-AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes,</div><div class='del'>-  [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);],</div><div class='del'>-	rb_cv_have_prototypes=yes,</div><div class='del'>-	rb_cv_have_prototypes=no)])</div><div class='del'>-if test "$rb_cv_have_prototypes" = yes; then</div><div class='del'>-  AC_DEFINE(HAVE_PROTOTYPES)</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_CACHE_CHECK(token paste string, rb_cv_tokenpaste,</div><div class='del'>-  [AC_TRY_COMPILE([#define paste(a,b) a##b],</div><div class='del'>-		  [int xy = 1; return paste(x,y);],</div><div class='del'>-		  rb_cv_tokenpaste=ansi,</div><div class='del'>-		  rb_cv_tokenpaste=knr)])</div><div class='del'>-if test "$rb_cv_tokenpaste" = ansi; then</div><div class='del'>-  AC_DEFINE(TOKEN_PASTE(x,y),[x##y])</div><div class='del'>-else</div><div class='del'>-  AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y])</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_CACHE_CHECK(for variable length prototypes and stdarg.h, rb_cv_stdarg,</div><div class='del'>-  [AC_TRY_COMPILE([</div><div class='del'>-#include &lt;stdarg.h&gt;</div><div class='del'>-int foo(int x, ...) {</div><div class='del'>-	va_list va;</div><div class='del'>-	va_start(va, x);</div><div class='del'>-	va_arg(va, int);</div><div class='del'>-	va_arg(va, char *);</div><div class='del'>-	va_arg(va, double);</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-], [return foo(10, "", 3.14);],</div><div class='del'>-	rb_cv_stdarg=yes,</div><div class='del'>-	rb_cv_stdarg=no)])</div><div class='del'>-if test "$rb_cv_stdarg" = yes; then</div><div class='del'>-  AC_DEFINE(HAVE_STDARG_PROTOTYPES)</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_DEFUN([RUBY_FUNC_ATTRIBUTE], [dnl</div><div class='del'>-m4_ifval([$2], dnl</div><div class='del'>-  [AS_VAR_PUSHDEF([attrib],[$2])], dnl</div><div class='del'>-  [AS_VAR_PUSHDEF([attrib],[FUNC_]AS_TR_CPP($1))] dnl</div><div class='del'>-)dnl</div><div class='del'>-m4_ifval([$3], dnl</div><div class='del'>-  [AS_VAR_PUSHDEF([rbcv],[$3])], dnl</div><div class='del'>-  [AS_VAR_PUSHDEF([rbcv],[rb_cv_func_][$1])]dnl</div><div class='del'>-)dnl</div><div class='del'>-AC_CACHE_CHECK(for [$1] function attribute, rbcv,</div><div class='del'>-[rbcv=x</div><div class='del'>-if test "${ac_c_werror_flag+set}"; then</div><div class='del'>-  rb_c_werror_flag="$ac_c_werror_flag"</div><div class='del'>-else</div><div class='del'>-  unset rb_c_werror_flag</div><div class='del'>-fi</div><div class='del'>-ac_c_werror_flag=yes</div><div class='del'>-for mac in "__attribute__ (($1)) x" "x __attribute__ (($1))" "__declspec($1) x" x; do</div><div class='del'>-  AC_TRY_COMPILE(</div><div class='del'>-    [#define ]attrib[(x) $mac</div><div class='del'>-    ]attrib[(void conftest_attribute_check(void));], [],</div><div class='del'>-    [rbcv="$mac"; break])</div><div class='del'>-done</div><div class='del'>-if test "${rb_c_werror_flag+set}"; then</div><div class='del'>-  ac_c_werror_flag="$rb_c_werror_flag"</div><div class='del'>-else</div><div class='del'>-  unset ac_c_werror_flag</div><div class='del'>-fi</div><div class='del'>-])</div><div class='del'>-AC_DEFINE_UNQUOTED(attrib[(x)], $rbcv)</div><div class='del'>-AS_VAR_POPDEF([attrib])</div><div class='del'>-AS_VAR_POPDEF([rbcv])</div><div class='del'>-])</div><div class='del'>-</div><div class='del'>-RUBY_FUNC_ATTRIBUTE(noreturn, NORETURN)</div><div class='del'>-RUBY_FUNC_ATTRIBUTE(noinline, NOINLINE)</div><div class='del'>-</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='del'>-dnl Check whether we need to define sys_nerr locally</div><div class='del'>-AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default</div><div class='del'>-#include &lt;errno.h&gt;])</div><div class='del'>-</div><div class='del'>-dnl whether link libc_r or not</div><div class='del'>-AC_ARG_WITH(libc_r, </div><div class='del'>-	[  --with-libc_r           link libc_r if possible (FreeBSD only)], [</div><div class='del'>-	case $withval in</div><div class='del'>-	yes) with_libc_r=yes;;</div><div class='del'>-	*)   with_libc_r=no;;</div><div class='del'>-	esac], [with_libc_r=no])</div><div class='del'>-</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='del'>-AC_ARG_ENABLE(fastthread,</div><div class='del'>-       [  --disable-fastthread    do not use the fastthread mutex], [</div><div class='del'>-	: handled by ext/thread/extconf.rb</div><div class='del'>-        ])</div><div class='del'>-</div><div class='del'>-dnl Checks for libraries.</div><div class='del'>-case "$target_os" in</div><div class='del'>-nextstep*)	;;</div><div class='del'>-openstep*)	;;</div><div class='del'>-rhapsody*)	;;</div><div class='del'>-darwin*)	LIBS="-lobjc $LIBS"</div><div class='del'>-		CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE"</div><div class='del'>-		AC_TRY_CPP([#include &lt;AvailabilityMacros.h&gt;</div><div class='del'>-		    #if MAC_OS_X_VERSION_MAX_ALLOWED &lt;= 1040</div><div class='del'>-		    #error pre OS X 10.4</div><div class='del'>-		    [!&lt;===== pre OS X 10.4 =====&gt;]</div><div class='del'>-		    #endif</div><div class='del'>-		    ],</div><div class='del'>-		    [</div><div class='del'>-		    test "x$target_cpu" = xppc &amp;&amp; ac_cv_header_ucontext_h=no</div><div class='del'>-		    ],</div><div class='del'>-		    [</div><div class='del'>-		    AC_DEFINE(BROKEN_SETREUID, 1)</div><div class='del'>-		    AC_DEFINE(BROKEN_SETREGID, 1)</div><div class='del'>-		    ])</div><div class='del'>-		;;</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='del'>-cygwin*)	;;</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='del'>-		LIBS="-lshell32 $LIBS"</div><div class='del'>-		ac_cv_header_a_out_h=no</div><div class='del'>-		ac_cv_header_pwd_h=no</div><div class='del'>-		ac_cv_header_utime_h=no</div><div class='del'>-		ac_cv_header_sys_ioctl_h=no</div><div class='del'>-		ac_cv_header_sys_param_h=no</div><div class='del'>-		ac_cv_header_sys_resource_h=no</div><div class='del'>-		ac_cv_header_sys_select_h=no</div><div class='del'>-		ac_cv_header_sys_time_h=no</div><div class='del'>-		ac_cv_header_sys_times_h=no</div><div class='del'>-		ac_cv_func_times=yes</div><div class='del'>-		ac_cv_func_waitpid=yes</div><div class='del'>-		ac_cv_func_fsync=yes</div><div class='del'>-		ac_cv_func_vsnprintf=yes</div><div class='del'>-		ac_cv_func_seekdir=yes</div><div class='del'>-		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='del'>-		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='del'>-		ac_cv_func_fcntl=yes</div><div class='del'>-		;;</div><div class='del'>-os2-emx*)	LIBS="-lm $LIBS"</div><div class='del'>-		ac_cv_lib_dir_opendir=no;;</div><div class='del'>-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'>-		ac_cv_func_setrlimit=no</div><div class='del'>-		;;</div><div class='del'>-bsdi*)          LIBS="-lm $LIBS"</div><div class='del'>-		AC_DEFINE(BROKEN_SETREUID, 1)</div><div class='del'>-		AC_DEFINE(BROKEN_SETREGID, 1)</div><div class='del'>-                ac_cv_sizeof_rlim_t=8;;</div><div class='del'>-freebsd*)	LIBS="-lm $LIBS"</div><div class='del'>-		AC_CACHE_CHECK([whether -lxpg4 has to be linked],</div><div class='del'>-		  rb_cv_lib_xpg4_needed,</div><div class='del'>-		  [AC_TRY_CPP([</div><div class='del'>-#include &lt;osreldate.h&gt;</div><div class='del'>-#if __FreeBSD_version &lt; 400020 || \</div><div class='del'>-   (__FreeBSD_version &gt;= 500000 &amp;&amp; __FreeBSD_version &lt; 500005)</div><div class='del'>-#error needs libxpg4</div><div class='del'>-#endif</div><div class='del'>-		   ],</div><div class='del'>-		   rb_cv_lib_xpg4_needed=no,</div><div class='del'>-		   rb_cv_lib_xpg4_needed=yes,</div><div class='del'>-		   rb_cv_lib_xpg4_needed=yes)])</div><div class='del'>-		if test "$rb_cv_lib_xpg4_needed" = yes; then</div><div class='del'>-			AC_CHECK_LIB(xpg4, setlocale)</div><div class='del'>-		fi</div><div class='del'>-		if test "$with_libc_r" = yes; then</div><div class='del'>-			AC_CACHE_CHECK([whether libc_r is supplementary to libc],</div><div class='del'>-			  rb_cv_supplementary_lib_c_r,</div><div class='del'>-			  [AC_TRY_CPP([</div><div class='del'>-#include &lt;osreldate.h&gt;</div><div class='del'>-#if 500016 &lt;= __FreeBSD_version</div><div class='del'>-#error libc_r is supplementary to libc</div><div class='del'>-#endif</div><div class='del'>-			   ],</div><div class='del'>-			   rb_cv_supplementary_lib_c_r=no,</div><div class='del'>-			   rb_cv_supplementary_lib_c_r=yes,</div><div class='del'>-			   rb_cv_supplementary_lib_c_r=yes)])</div><div class='del'>-			if test "$rb_cv_supplementary_lib_c_r" = yes; then</div><div class='del'>-			   MAINLIBS="-lc_r $MAINLIBS"</div><div class='del'>-			fi</div><div class='del'>-		fi</div><div class='del'>-		;;</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.1*) 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='del'>-*) LIBS="-lm $LIBS";;</div><div class='del'>-esac</div><div class='del'>-AC_CHECK_LIB(crypt, crypt)</div><div class='del'>-AC_CHECK_LIB(dl, dlopen)	# Dynamic linking for SunOS/Solaris and SYSV</div><div class='del'>-AC_CHECK_LIB(dld, shl_load)	# Dynamic linking for HP-UX</div><div class='del'>-</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='del'>-dnl Checks for header files.</div><div class='del'>-AC_HEADER_DIRENT</div><div class='del'>-AC_HEADER_STDC</div><div class='del'>-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='del'>-		 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='del'>-</div><div class='del'>-dnl Checks for typedefs, structures, and compiler characteristics.</div><div class='del'>-AC_TYPE_SIZE_T</div><div class='del'>-AC_STRUCT_ST_BLKSIZE</div><div class='del'>-AC_STRUCT_ST_BLOCKS</div><div class='del'>-AC_STRUCT_ST_RDEV</div><div class='del'>-</div><div class='del'>-dnl Checks for library functions.</div><div class='del'>-AC_TYPE_GETGROUPS</div><div class='del'>-AC_TYPE_SIGNAL</div><div class='del'>-case "${target_cpu}-${target_os}" in</div><div class='del'>-powerpc-darwin*)</div><div class='del'>-  AC_LIBSOURCES(alloca.c)</div><div class='del'>-  AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])</div><div class='del'>-  AC_DEFINE(C_ALLOCA)</div><div class='del'>-  AC_DEFINE_UNQUOTED(alloca, alloca)</div><div class='del'>-  ;;</div><div class='del'>-*)</div><div class='del'>-  AC_FUNC_ALLOCA</div><div class='del'>-  ;;</div><div class='del'>-esac</div><div class='del'>-AC_FUNC_MEMCMP</div><div class='del'>-AC_FUNC_FSEEKO</div><div class='del'>-AC_CHECK_FUNCS(ftello)</div><div class='del'>-AC_REPLACE_FUNCS(dup2 memmove strcasecmp strncasecmp strerror strftime\</div><div class='del'>-		 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 ftruncate 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'>-	      group_member dlopen sigprocmask\</div><div class='del'>-	      sigaction sigsetjmp _setjmp _longjmp setsid telldir seekdir fchmod\</div><div class='del'>-	      mktime timegm gettimeofday\</div><div class='del'>-	      cosh sinh tanh round setuid setgid setenv unsetenv)</div><div class='del'>-</div><div class='del'>-AC_CACHE_CHECK(for __builtin_setjmp, ac_cv_func___builtin_setjmp,</div><div class='del'>-[AC_TRY_LINK([@%:@include &lt;setjmp.h&gt;</div><div class='del'>-    jmp_buf jb; void t(v) int v; {__builtin_longjmp(jb, v);}],</div><div class='del'>-    [__builtin_setjmp(jb);],</div><div class='del'>-    [ac_cv_func___builtin_setjmp=yes],</div><div class='del'>-    [ac_cv_func___builtin_setjmp=no])</div><div class='del'>-])</div><div class='del'>-</div><div class='del'>-test x$ac_cv_func__longjmp = xno &amp;&amp; ac_cv_func__setjmp=no</div><div class='del'>-</div><div class='del'>-AC_MSG_CHECKING(for setjmp type)</div><div class='del'>-AC_ARG_WITH(setjmp-type, </div><div class='del'>-	[  --with-setjmp-type      select setjmp type], [</div><div class='del'>-	case $withval in</div><div class='del'>-	__builtin_setjmp) setjmp_prefix=__builtin_;;</div><div class='del'>-	_setjmp) setjmp_prefix=_;;</div><div class='del'>-	sigsetjmp) setjmp_prefix=sig;;</div><div class='del'>-	setjmp) setjmp_prefix=;;</div><div class='del'>-	'') unset setjmp_prefix;;</div><div class='del'>-	*)   AC_MSG_ERROR(invalid setjmp type: $withval);;</div><div class='del'>-	esac], [unset setjmp_prefix])</div><div class='del'>-if test ${setjmp_prefix+set}; then</div><div class='del'>-    if test "${setjmp_prefix}" &amp;&amp; eval test '$ac_cv_func_'${setjmp_prefix}setjmp = no; then</div><div class='del'>-	AC_MSG_ERROR(${setjmp_prefix}setjmp is not available)</div><div class='del'>-    fi</div><div class='del'>-elif test "$ac_cv_func___builtin_setjmp" = yes; then</div><div class='del'>-    setjmp_prefix=__builtin_</div><div class='del'>-elif test "$ac_cv_func__setjmp" = yes; then</div><div class='del'>-    setjmp_prefix=_</div><div class='del'>-elif test "$ac_cv_func_sigsetjmp" = yes; then</div><div class='del'>-    case $target_os in</div><div class='del'>-    solaris*|cygwin*)</div><div class='del'>-	setjmp_prefix=;;</div><div class='del'>-    *)</div><div class='del'>-	setjmp_prefix=sig;;</div><div class='del'>-    esac</div><div class='del'>-else</div><div class='del'>-    setjmp_prefix=</div><div class='del'>-fi</div><div class='del'>-if test x$setjmp_prefix = xsig; then</div><div class='del'>-    setjmp_sigmask=yes</div><div class='del'>-else</div><div class='del'>-    unset setjmp_sigmask</div><div class='del'>-fi</div><div class='del'>-AC_MSG_RESULT(${setjmp_prefix}setjmp)</div><div class='del'>-AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp(env${setjmp_sigmask+,0})])</div><div class='del'>-AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp(env,val)])</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf)</div><div class='del'>-</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='del'>-AC_STRUCT_TIMEZONE</div><div class='del'>-AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff,</div><div class='del'>-  [AC_TRY_COMPILE([#include &lt;time.h&gt;],</div><div class='del'>-    [struct tm t; t.tm_gmtoff = 3600;],</div><div class='del'>-  [rb_cv_member_struct_tm_tm_gmtoff=yes],</div><div class='del'>-  [rb_cv_member_struct_tm_tm_gmtoff=no])])</div><div class='del'>-if test "$rb_cv_member_struct_tm_tm_gmtoff" = yes; then</div><div class='del'>-  AC_DEFINE(HAVE_STRUCT_TM_TM_GMTOFF)</div><div class='del'>-fi</div><div class='del'>-AC_CACHE_CHECK(for external int daylight, rb_cv_have_daylight,</div><div class='del'>-  [AC_TRY_LINK([#include &lt;time.h&gt;</div><div class='del'>-  int i;],</div><div class='del'>-  	[i = daylight;],</div><div class='del'>-	rb_cv_have_daylight=yes,</div><div class='del'>-	rb_cv_have_daylight=no)])</div><div class='del'>-if test "$rb_cv_have_daylight" = yes; then</div><div class='del'>-  AC_DEFINE(HAVE_DAYLIGHT)</div><div class='del'>-fi</div><div class='del'>-AC_DEFUN([RUBY_CHECK_VARTYPE], [dnl</div><div class='del'>-AC_CACHE_CHECK([for external $1], rb_cv_var_$1,</div><div class='del'>-  [rb_cv_var_$1=no</div><div class='del'>-  AC_TRY_COMPILE([</div><div class='del'>-#ifndef _XOPEN_SOURCE</div><div class='del'>-#define _XOPEN_SOURCE 1</div><div class='del'>-#endif</div><div class='del'>-$2</div><div class='del'>-;</div><div class='del'>-const volatile void *volatile t;],</div><div class='del'>-    [t = &amp;(&amp;$1)[0];],</div><div class='del'>-    [for t in $3; do</div><div class='del'>-      AC_TRY_COMPILE([</div><div class='del'>-#ifndef _XOPEN_SOURCE</div><div class='del'>-#define _XOPEN_SOURCE 1</div><div class='del'>-#endif</div><div class='del'>-$2</div><div class='del'>-;</div><div class='del'>-extern $t $1;</div><div class='del'>-const volatile void *volatile t;],</div><div class='del'>-        [t = &amp;(&amp;$1)[0];],</div><div class='del'>-        [rb_cv_var_$1=$t; break])</div><div class='del'>-    done])])</div><div class='del'>-if test "[$rb_cv_var_]$1" != no; then</div><div class='del'>-  AC_DEFINE([HAVE_VAR_]m4_toupper($1))</div><div class='del'>-  AC_DEFINE_UNQUOTED([TYPEOF_VAR_]m4_toupper($1), $rb_cv_var_$1)</div><div class='del'>-fi])</div><div class='del'>-RUBY_CHECK_VARTYPE(timezone, [@%:@include &lt;time.h&gt;], [long int])</div><div class='del'>-RUBY_CHECK_VARTYPE(altzone, [@%:@include &lt;time.h&gt;], [long int])</div><div class='del'>-if test "$rb_cv_var_timezone" = no; then</div><div class='del'>-  AC_CHECK_FUNCS(timezone)</div><div class='del'>-  if test "$ac_cv_func_timezone" = yes; then</div><div class='del'>-    AC_CACHE_CHECK([whether timezone requires zero arguments], rb_cv_func_timezone_void,</div><div class='del'>-      [AC_TRY_COMPILE([@%:@include &lt;time.h&gt;],</div><div class='del'>-	[(void)timezone(0, 0);],</div><div class='del'>-	[rb_cv_func_timezone_void=no],</div><div class='del'>-	[rb_cv_func_timezone_void=yes])]</div><div class='del'>-    )</div><div class='del'>-    if test $rb_cv_func_timezone_void = yes; then</div><div class='del'>-      AC_DEFINE(TIMEZONE_VOID)</div><div class='del'>-    fi</div><div class='del'>-  fi</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t,</div><div class='del'>-  [AC_TRY_RUN([</div><div class='del'>-#include &lt;time.h&gt;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-check(tm, y, m, d, h, s)</div><div class='del'>-    struct tm *tm;</div><div class='del'>-    int y, m, d, h, s;</div><div class='del'>-{</div><div class='del'>-    if (!tm ||</div><div class='del'>-	tm-&gt;tm_year != y ||</div><div class='del'>-	tm-&gt;tm_mon  != m-1 ||</div><div class='del'>-	tm-&gt;tm_mday != d ||</div><div class='del'>-	tm-&gt;tm_hour != h ||</div><div class='del'>-	tm-&gt;tm_sec  != s) {</div><div class='del'>-	exit(1);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-main()</div><div class='del'>-{</div><div class='del'>-   time_t t = -1;</div><div class='del'>-   struct tm *tm;</div><div class='del'>-</div><div class='del'>-   check(gmtime(&amp;t), 69, 12, 31, 23, 59);</div><div class='del'>-   t = ~(time_t)0 &lt;&lt; 31;</div><div class='del'>-   check(gmtime(&amp;t), 1, 12, 13, 20, 52);</div><div class='del'>-   return 0;</div><div class='del'>-}</div><div class='del'>-],</div><div class='del'>-	rb_cv_negative_time_t=yes,</div><div class='del'>-	rb_cv_negative_time_t=no,</div><div class='del'>-	rb_cv_negative_time_t=yes)])</div><div class='del'>-if test "$rb_cv_negative_time_t" = yes; then</div><div class='del'>-  AC_DEFINE(NEGATIVE_TIME_T)</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-if test "$ac_cv_func_sigprocmask" = yes &amp;&amp; test "$ac_cv_func_sigaction" = yes; then</div><div class='del'>-   AC_DEFINE(POSIX_SIGNAL)</div><div class='del'>-else</div><div class='del'>-  AC_CHECK_FUNCS(sigsetmask)</div><div class='del'>-  AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal,</div><div class='del'>-    [AC_TRY_RUN([</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;signal.h&gt;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-sig_handler(dummy)</div><div class='del'>-     int dummy;</div><div class='del'>-{</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-main()</div><div class='del'>-{</div><div class='del'>-  signal(SIGINT, sig_handler);</div><div class='del'>-  kill(getpid(), SIGINT);</div><div class='del'>-  kill(getpid(), SIGINT);</div><div class='del'>-  return 0;</div><div class='del'>-}</div><div class='del'>-],</div><div class='del'>-	rb_cv_bsd_signal=yes,</div><div class='del'>-	rb_cv_bsd_signal=no,</div><div class='del'>-	rb_cv_bsd_signal=$ac_cv_func_sigsetmask)])</div><div class='del'>-  if test "$rb_cv_bsd_signal" = yes; then</div><div class='del'>-    AC_DEFINE(BSD_SIGNAL)</div><div class='del'>-  fi</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_FUNC_GETPGRP</div><div class='del'>-AC_FUNC_SETPGRP  </div><div class='del'>-</div><div class='del'>-AC_C_BIGENDIAN</div><div class='del'>-AC_C_CONST</div><div class='del'>-AC_C_CHAR_UNSIGNED</div><div class='del'>-AC_C_INLINE</div><div class='del'>-AC_C_VOLATILE</div><div class='del'>-</div><div class='del'>-if test x"$target_cpu" = xia64; then</div><div class='del'>-    AC_LIBOBJ([ia64])</div><div class='del'>-    AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base,</div><div class='del'>-                   rb_cv___libc_ia64_register_backing_store_base,</div><div class='del'>-    [rb_cv___libc_ia64_register_backing_store_base=no</div><div class='del'>-    AC_TRY_LINK(</div><div class='del'>-      [extern unsigned long __libc_ia64_register_backing_store_base;],</div><div class='del'>-      [unsigned long p = __libc_ia64_register_backing_store_base;</div><div class='del'>-       printf("%ld\n", p);],</div><div class='del'>-      [rb_cv___libc_ia64_register_backing_store_base=yes])])</div><div class='del'>-    if test $rb_cv___libc_ia64_register_backing_store_base = yes; then</div><div class='del'>-      AC_DEFINE(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE)</div><div class='del'>-    fi</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign,</div><div class='del'>-    [AC_TRY_RUN([</div><div class='del'>-int</div><div class='del'>-main()</div><div class='del'>-{</div><div class='del'>-  if (-1==(-1&gt;&gt;1))</div><div class='del'>-    return 0;</div><div class='del'>-  return 1;</div><div class='del'>-}</div><div class='del'>-],</div><div class='del'>-	rb_cv_rshift_sign=yes,</div><div class='del'>-	rb_cv_rshift_sign=no,</div><div class='del'>-	rb_cv_rshift_sign=yes)])</div><div class='del'>-if test "$rb_cv_rshift_sign" = yes; then</div><div class='del'>-  AC_DEFINE(RSHIFT(x,y), ((x)&gt;&gt;(int)y))</div><div class='del'>-else</div><div class='del'>-  AC_DEFINE(RSHIFT(x,y), (((x)&lt;0) ? ~((~(x))&gt;&gt;y) : (x)&gt;&gt;y))</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_MSG_CHECKING(read count field in FILE structures)</div><div class='del'>-AC_CACHE_VAL(rb_cv_fcnt,</div><div class='del'>-[for fcnt in	dnl</div><div class='del'>-     _cnt	dnl</div><div class='del'>-     __cnt	dnl</div><div class='del'>-     _r		dnl</div><div class='del'>-     readCount	dnl</div><div class='del'>-     _rcount	dnl for emx0.9c</div><div class='del'>-; do</div><div class='del'>-    AC_TRY_COMPILE([#include &lt;stdio.h&gt;</div><div class='del'>-],</div><div class='del'>-	[FILE *f = stdin; f-&gt;$fcnt = 0;],</div><div class='del'>-	rb_cv_fcnt="$fcnt"; break,</div><div class='del'>-	rb_cv_fcnt="not found")</div><div class='del'>-done])</div><div class='del'>-if test "$rb_cv_fcnt" = "not found"; then</div><div class='del'>-  AC_MSG_RESULT([not found(OK if using GNU libc)])</div><div class='del'>-else</div><div class='del'>-  AC_MSG_RESULT($rb_cv_fcnt)</div><div class='del'>-  AC_DEFINE_UNQUOTED(FILE_COUNT, $rb_cv_fcnt)</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_MSG_CHECKING(read buffer ptr field in FILE structures)</div><div class='del'>-AC_CACHE_VAL(rb_cv_frptr,</div><div class='del'>-[for frptr in	dnl</div><div class='del'>-     _IO_read_ptr dnl</div><div class='del'>-     _ptr	dnl</div><div class='del'>-     __ptr	dnl</div><div class='del'>-     bufpos	dnl</div><div class='del'>-     _p	dnl</div><div class='del'>-; do</div><div class='del'>-    AC_TRY_COMPILE([#include &lt;stdio.h&gt;</div><div class='del'>-],</div><div class='del'>-	[FILE *f = stdin; char buf[256]; f-&gt;$frptr = buf;],</div><div class='del'>-	rb_cv_frptr="$frptr"; break,</div><div class='del'>-	rb_cv_frptr="not found")</div><div class='del'>-done])</div><div class='del'>-if test "$rb_cv_frptr" = "not found"; then</div><div class='del'>-  AC_MSG_RESULT([not found])</div><div class='del'>-else</div><div class='del'>-  AC_MSG_RESULT($rb_cv_frptr)</div><div class='del'>-  AC_DEFINE_UNQUOTED(FILE_READPTR, $rb_cv_frptr)</div><div class='del'>-</div><div class='del'>-  if test "$rb_cv_fcnt" = "not found"; then</div><div class='del'>-    AC_MSG_CHECKING(read buffer end field in FILE structures)</div><div class='del'>-    AC_CACHE_VAL(rb_cv_frend,</div><div class='del'>-    [for frend in	dnl</div><div class='del'>-         _IO_read_end	dnl</div><div class='del'>-         bufread 	dnl</div><div class='del'>-    ; do</div><div class='del'>-        AC_TRY_COMPILE([#include &lt;stdio.h&gt;</div><div class='del'>-    ],</div><div class='del'>-  	[FILE *f = stdin; char buf[256]; f-&gt;$frend = buf;],</div><div class='del'>-  	rb_cv_frend="$frend"; break,</div><div class='del'>-  	rb_cv_frend="not found")</div><div class='del'>-    done])</div><div class='del'>-    if test "$rb_cv_frend" = "not found"; then</div><div class='del'>-      AC_MSG_RESULT([not found])</div><div class='del'>-    else</div><div class='del'>-      AC_MSG_RESULT($rb_cv_frend)</div><div class='del'>-      AC_DEFINE_UNQUOTED(FILE_READEND, $rb_cv_frend)</div><div class='del'>-    fi</div><div class='del'>-  fi</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_DEFUN([RUBY_CHECK_IO_NEED],</div><div class='del'>-[AC_CACHE_CHECK(whether need to [$1], [$2],</div><div class='del'>-    [AC_TRY_RUN([</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#ifndef SEEK_SET</div><div class='del'>-#define SEEK_SET 0</div><div class='del'>-#endif</div><div class='del'>-#ifndef SEEK_CUR</div><div class='del'>-#define SEEK_CUR 1</div><div class='del'>-#endif</div><div class='del'>-#define before_seek(f) ]ifelse(index($2,flush_before_seek),-1,[fflush(f)],[(f,0)])[</div><div class='del'>-#define reset_rw(f) ]ifelse(index($2,seek_between_rw),-1,[do_seek(f,SEEK_CUR)],[(f,0)])[</div><div class='del'>-#define do_seek(f, w) (before_seek(f), fseek(f,0,w))</div><div class='del'>-</div><div class='del'>-char *fn = "conftest.dat";</div><div class='del'>-char *wombat = "wombat\n";</div><div class='del'>-char *koara = "koara\n";</div><div class='del'>-char *kangaroo = "kangaroo\n";</div><div class='del'>-</div><div class='del'>-int main()</div><div class='del'>-{</div><div class='del'>-    char buf[BUFSIZ];</div><div class='del'>-    FILE *f;</div><div class='del'>-    int r = 1;</div><div class='del'>-</div><div class='del'>-    if (!(f = fopen(fn, "w+"))) return 1;</div><div class='del'>-    fputs(wombat, f);</div><div class='del'>-    do_seek(f, SEEK_SET);</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail;</div><div class='del'>-    reset_rw(f);</div><div class='del'>-    fputs(koara, f);</div><div class='del'>-    fputs(kangaroo, f);</div><div class='del'>-    do_seek(f, SEEK_SET);</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail;</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, koara)) goto fail;</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, kangaroo)) goto fail;</div><div class='del'>-    do_seek(f, SEEK_SET);</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail;</div><div class='del'>-    reset_rw(f);</div><div class='del'>-    fputc('X', f);</div><div class='del'>-    reset_rw(f);</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, koara+1)) goto fail;</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, kangaroo)) goto fail;</div><div class='del'>-    do_seek(f, SEEK_SET);</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, wombat)) goto fail;</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || buf[0] != 'X' || strcmp(buf+1, koara+1)) goto fail;</div><div class='del'>-    if (!fgets(buf, BUFSIZ, f) || strcmp(buf, kangaroo)) goto fail;</div><div class='del'>-    r = 0;</div><div class='del'>-  fail:</div><div class='del'>-    fclose(f);</div><div class='del'>-    unlink(fn);</div><div class='del'>-    return r;</div><div class='del'>-}</div><div class='del'>-], [$2]=no, [$2]=yes, [$2]=[$3])])])</div><div class='del'>-RUBY_CHECK_IO_NEED(seek between R/W, rb_cv_need_io_seek_between_rw, yes)</div><div class='del'>-if test "$rb_cv_need_io_seek_between_rw" = yes; then</div><div class='del'>-  AC_DEFINE(NEED_IO_SEEK_BETWEEN_RW, 1)</div><div class='del'>-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='add'>+AC_GCC_TRADITIONAL</div><div class='add'>+if test $GCC -eq 1 ; then</div><div class='add'>+  DBM=-fpcc-struct-return</div><div class='ctx'> 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"$rb_with_pthread" = xyes; then</div><div class='del'>-	AC_CHECK_FUNCS(getcontext setcontext)</div><div class='del'>-    fi</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-dnl default value for $KANJI</div><div class='del'>-DEFAULT_KCODE="KCODE_NONE"</div><div class='del'>-</div><div class='del'>-AC_ARG_WITH(default-kcode, </div><div class='del'>-	[  --with-default-kcode=CODE specify default value for \$KCODE (utf8|euc|sjis|none)], </div><div class='del'>-	[case $withval in</div><div class='del'>-	utf8) DEFAULT_KCODE="KCODE_UTF8";;</div><div class='del'>-	euc)  DEFAULT_KCODE="KCODE_EUC";;</div><div class='del'>-	sjis) DEFAULT_KCODE="KCODE_SJIS";;</div><div class='del'>-	none) DEFAULT_KCODE="KCODE_NONE";;</div><div class='del'>-        *)    AC_MSG_WARN($withval is not valid kcode; ignored);;</div><div class='del'>-	esac])</div><div class='del'>-AC_DEFINE_UNQUOTED(DEFAULT_KCODE, $DEFAULT_KCODE)</div><div class='del'>-</div><div class='del'>-dnl wheather use dln_a_out or not</div><div class='del'>-AC_ARG_WITH(dln-a-out, </div><div class='del'>-	[  --with-dln-a-out        use dln_a_out if possible], [</div><div class='del'>-	case $withval in</div><div class='del'>-	yes) with_dln_a_out=yes;;</div><div class='del'>-	*)   with_dln_a_out=no;;</div><div class='del'>-	esac], [with_dln_a_out=no])</div><div class='del'>-</div><div class='del'>-AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf,</div><div class='del'>-[AC_TRY_RUN([</div><div class='del'>-/* Test for whether ELF binaries are produced */</div><div class='del'>-#include &lt;fcntl.h&gt;</div><div class='del'>-#include &lt;stdlib.h&gt;</div><div class='del'>-main() {</div><div class='del'>-	char buffer[4];</div><div class='del'>-	int i=open("conftest",O_RDONLY);</div><div class='del'>-	if(i==-1)</div><div class='del'>-		exit(1); /* fail */</div><div class='del'>-	if(read(i,&amp;buffer[0],4)&lt;4)</div><div class='del'>-		exit(1); /* fail */</div><div class='del'>-	if(buffer[0] != 127 || buffer[1] != 'E' ||</div><div class='del'>-           buffer[2] != 'L' || buffer[3] != 'F')</div><div class='del'>-		exit(1); /* fail */</div><div class='del'>-	exit(0); /* succeed (yes, it's ELF) */</div><div class='del'>-}</div><div class='del'>-],</div><div class='del'>-rb_cv_binary_elf=yes,</div><div class='del'>-rb_cv_binary_elf=no,</div><div class='del'>-rb_cv_binary_elf=yes)])</div><div class='del'>-</div><div class='del'>-if test "$rb_cv_binary_elf" = yes; then</div><div class='del'>-  AC_DEFINE(USE_ELF)</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-case "$target_os" in</div><div class='del'>-linux* | gnu* | k*bsd*-gnu | bsdi*)</div><div class='del'>-    if test "$rb_cv_binary_elf" = no; then</div><div class='del'>-	with_dln_a_out=yes</div><div class='del'>-    else</div><div class='del'>-	LDFLAGS="$LDFLAGS -rdynamic"</div><div class='del'>-    fi;;</div><div class='del'>-esac</div><div class='del'>-LIBEXT=a</div><div class='del'>-</div><div class='del'>-AC_SUBST(DLDFLAGS)dnl</div><div class='del'>-AC_SUBST(ARCH_FLAG)dnl</div><div class='del'>-</div><div class='del'>-AC_SUBST(STATIC)dnl</div><div class='del'>-AC_SUBST(CCDLFLAGS)dnl</div><div class='del'>-AC_SUBST(LDSHARED)dnl</div><div class='del'>-AC_SUBST(DLEXT)dnl</div><div class='del'>-AC_SUBST(DLEXT2)dnl</div><div class='del'>-AC_SUBST(LIBEXT)dnl</div><div class='del'>-</div><div class='del'>-STATIC=</div><div class='del'>-: ${LIBPATHFLAG=' -L%s'}</div><div class='del'>-: ${PATHFLAG=''}</div><div class='del'>-</div><div class='del'>-if test "$with_dln_a_out" != yes; then</div><div class='del'>-  rb_cv_dlopen=unknown</div><div class='del'>-  AC_MSG_CHECKING(whether OS depend dynamic link works)</div><div class='del'>-  if test "$GCC" = yes; then</div><div class='del'>-    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='del'>-    esac</div><div class='del'>-  else</div><div class='del'>-    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='del'>-    esac</div><div class='del'>-  fi</div><div class='del'>-</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'>-    RPATHFLAG=" ${linker_flag}-R%1\$-s"</div><div class='del'>-  fi</div><div class='del'>-</div><div class='del'>-  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='del'>-			if test "$rb_cv_prog_gnu_ld" = no; then</div><div class='del'>-			    RPATHFLAG=' +b %1$-s'</div><div class='del'>-			fi</div><div class='del'>-			rb_cv_dlopen=yes;;</div><div class='del'>-	solaris*) 	if test "$GCC" = yes; then</div><div class='del'>-                          : ${LDSHARED='$(CC) -shared'}</div><div class='del'>-			   if test "$rb_cv_prog_gnu_ld" = yes; then</div><div class='del'>-	 		       LDFLAGS="$LDFLAGS -Wl,-E"</div><div class='del'>-			   fi</div><div class='del'>-			else</div><div class='del'>-			   : ${LDSHARED='ld -G'}</div><div class='del'>-			fi</div><div class='del'>-			rb_cv_dlopen=yes;;</div><div class='del'>-	sunos*) 	: ${LDSHARED='ld -assert nodefinitions'}</div><div class='del'>-			rb_cv_dlopen=yes;;</div><div class='del'>-	irix*)		: ${LDSHARED='ld -shared'}</div><div class='del'>-			rb_cv_dlopen=yes;;</div><div class='del'>-	sysv4*) 	: ${LDSHARED='ld -G'}</div><div class='del'>-			rb_cv_dlopen=yes;;</div><div class='del'>-        nto-qnx*)       : ${LDSHARED="qcc -shared"}</div><div class='del'>-                        rb_cv_dlopen=yes ;;</div><div class='del'>-	esix*|uxpds*) 	: ${LDSHARED="ld -G"}</div><div class='del'>-			rb_cv_dlopen=yes ;;</div><div class='del'>-	osf*) 		: ${LDSHARED="ld -shared -expect_unresolved \"*\""}</div><div class='del'>-			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='del'>-			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='del'>-			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='del'>-			else</div><div class='del'>-			  test "$GCC" = yes &amp;&amp; test "$rb_cv_prog_gnu_ld" = yes || LDSHARED="ld -Bshareable"</div><div class='del'>-			fi</div><div class='del'>-			rb_cv_dlopen=yes ;;</div><div class='del'>-	openbsd*) 	: ${LDSHARED="\$(CC) -shared ${CCDLFLAGS}"}</div><div class='del'>-			if test "$rb_cv_binary_elf" = yes; then</div><div class='del'>-			    LDFLAGS="$LDFLAGS -Wl,-E"</div><div class='del'>-			fi</div><div class='del'>-			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='del'>-			rb_cv_dlopen=yes ;;</div><div class='del'>-	openstep*)	: ${LDSHARED='cc -dynamic -bundle -undefined suppress'}</div><div class='del'>-			: ${LDFLAGS=""}</div><div class='del'>-			rb_cv_dlopen=yes ;;</div><div class='del'>-	rhapsody*)	: ${LDSHARED='cc -dynamic -bundle -undefined suppress'}</div><div class='del'>-			: ${LDFLAGS=""}</div><div class='del'>-			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='del'>-			rb_cv_dlopen=yes ;;</div><div class='del'>-        aix*)           if test "$GCC" = yes; then</div><div class='del'>-			    : ${LDSHARED='$(CC) -shared'}</div><div class='del'>-			else</div><div class='del'>-			    : ${LDSHARED='$(CC)'}</div><div class='del'>-			fi</div><div class='del'>-			LDSHARED="$LDSHARED ${linker_flag}-G"</div><div class='del'>-			DLDFLAGS='-eInit_$(TARGET)'</div><div class='del'>-			XLDFLAGS="${linker_flag}-bE:ruby.imp ${linker_flag}-brtl"</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='del'>-			rb_cv_dlopen=yes ;;</div><div class='del'>-	beos*) 		case "$target_cpu" in</div><div class='del'>-			  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='del'>-                            ;;</div><div class='del'>-			  i586*)</div><div class='del'>-			    : ${LDSHARED="ld -shared"}</div><div class='del'>-			    DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot"</div><div class='del'>-			    ;;</div><div class='del'>-			esac</div><div class='del'>-			: ${LIBPATHENV=LIBRARY_PATH}</div><div class='del'>-			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='del'>-			rb_cv_dlopen=yes;;</div><div class='del'>-	cygwin*|mingw*)	: ${LDSHARED="${CC} -shared -s"}</div><div class='del'>-			XLDFLAGS="$XLDFLAGS -Wl,--stack,0x02000000"</div><div class='del'>-			DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import,--export-all"</div><div class='del'>-			: ${LIBPATHENV=""}</div><div class='del'>-			rb_cv_dlopen=yes ;;</div><div class='del'>-	hiuxmpp)	: ${LDSHARED='ld -r'} ;;</div><div class='del'>-	atheos*) 	: ${LDSHARED="$CC -shared"}</div><div class='del'>-			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='del'>-  esac</div><div class='del'>-  AC_MSG_RESULT($rb_cv_dlopen)</div><div class='del'>-fi</div><div class='del'>-AC_SUBST(LINK_SO)</div><div class='del'>-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='del'>-</div><div class='del'>-dln_a_out_works=no</div><div class='del'>-if test "$ac_cv_header_a_out_h" = yes; then</div><div class='del'>-  if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then</div><div class='del'>-    cat confdefs.h &gt; config.h</div><div class='del'>-    AC_CACHE_CHECK(whether matz's dln works, rb_cv_dln_a_out,</div><div class='del'>-    [AC_TRY_COMPILE([</div><div class='del'>-#define USE_DLN_A_OUT</div><div class='del'>-#include "dln.c"</div><div class='del'>-],</div><div class='del'>-	[], </div><div class='del'>-	rb_cv_dln_a_out=yes,</div><div class='del'>-	rb_cv_dln_a_out=no)])</div><div class='del'>-    if test "$rb_cv_dln_a_out" = yes; then</div><div class='del'>-      dln_a_out_works=yes</div><div class='del'>-      AC_DEFINE(USE_DLN_A_OUT)</div><div class='del'>-    fi</div><div class='del'>-  fi</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-if test "$dln_a_out_works" = yes; then</div><div class='del'>-  if test "$GCC" = yes; then</div><div class='add'>+AC_SUBST(DBM)dnl</div><div class='add'>+if test "$HOSTTYPE" = sparc; then</div><div class='add'>+  if test $GCC -eq 1 ; then</div><div class='ctx'>     STATIC=-static</div><div class='ctx'>   else</div><div class='ctx'>     STATIC=-Bstatic</div><div class='ctx'>   fi</div><div class='del'>-  DLEXT=so</div><div class='del'>-  CCDLFLAGS=</div><div class='del'>-else</div><div class='del'>-  case "$target_os" in</div><div class='del'>-    hpux*)	DLEXT=sl;;</div><div class='del'>-    nextstep*|openstep*|rhapsody*|darwin*)</div><div class='del'>-		DLEXT=bundle;;</div><div class='del'>-    os2-emx*)	DLEXT=dll;;</div><div class='del'>-    cygwin*|mingw*)</div><div class='del'>-		DLEXT=so DLEXT2=dll;;</div><div class='del'>-    *)		DLEXT=so;;</div><div class='del'>-  esac</div><div class='del'>-fi</div><div class='del'>-len=2 # .rb</div><div class='del'>-n=`expr "$DLEXT"  : '.*'`; test "$n" -gt "$len" &amp;&amp; len=$n</div><div class='del'>-n=`expr "$DLEXT2" : '.*'`; test "$n" -gt "$len" &amp;&amp; len=$n</div><div class='del'>-AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, `expr $len + 1`)</div><div class='del'>-test ".$DLEXT"  = "." || AC_DEFINE_UNQUOTED(DLEXT,  ".$DLEXT")</div><div class='del'>-test ".$DLEXT2" = "." || AC_DEFINE_UNQUOTED(DLEXT2, ".$DLEXT2")</div><div class='del'>-</div><div class='del'>-AC_SUBST(STRIP)dnl</div><div class='del'>-if test "$with_dln_a_out" = yes; then</div><div class='del'>-  STRIP=true</div><div class='del'>-else</div><div class='del'>-  STRIP=strip</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-case "$target_os" in</div><div class='del'>-  linux* | gnu* | k*bsd*-gnu)</div><div class='del'>-	STRIP='strip -S -x';;</div><div class='del'>-  nextstep*)</div><div class='del'>-	STRIP='strip -A -n';;</div><div class='del'>-  openstep*)</div><div class='del'>-	STRIP='strip -A -n';;</div><div class='del'>-  rhapsody*)</div><div class='del'>-	STRIP='strip -A -n';;</div><div class='del'>-  darwin*)</div><div class='del'>-	STRIP='strip -A -n';;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-EXTSTATIC=</div><div class='del'>-AC_SUBST(EXTSTATIC)dnl</div><div class='del'>-AC_ARG_WITH(static-linked-ext,</div><div class='del'>-	    [  --with-static-linked-ext link external modules statically],</div><div class='del'>-            [case $withval in</div><div class='del'>-	     yes) STATIC=</div><div class='del'>-		  EXTSTATIC=static;;</div><div class='del'>-	     *)	;;</div><div class='del'>-	     esac])</div><div class='del'>-</div><div class='del'>-case "$target_os" in</div><div class='del'>-  human*)</div><div class='del'>-    AC_CHECK_LIB(signal, _harderr)</div><div class='del'>-    AC_CHECK_LIB(hmem, hmemset)</div><div class='del'>-    AC_CHECK_FUNCS(select)</div><div class='del'>-    AC_CACHE_CHECK(whether PD libc _dtos18 fail to convert big number,</div><div class='del'>-		   rb_cv_missing__dtos18,</div><div class='del'>-    [AC_TRY_RUN(</div><div class='del'>-changequote(&lt;&lt;, &gt;&gt;)dnl</div><div class='del'>-&lt;&lt;</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-main ()</div><div class='del'>-{</div><div class='del'>-   char buf[256];</div><div class='del'>-   sprintf (buf, "%g", 1e+300);</div><div class='del'>-   exit (strcmp (buf, "1e+300") ? 0 : 1);</div><div class='del'>-}</div><div class='del'>-&gt;&gt;,</div><div class='del'>-changequote([, ])dnl</div><div class='del'>-rb_cv_missing__dtos18=yes, rb_cv_missing__dtos18=no, rb_cv_missing__dtos18=no)])</div><div class='del'>-    if test "$rb_cv_missing__dtos18" = yes; then</div><div class='del'>-      AC_DEFINE(MISSING__DTOS18)</div><div class='del'>-    fi</div><div class='del'>-    AC_CACHE_CHECK(whether PD libc fconvert fail to round,</div><div class='del'>-		   rb_cv_missing_fconvert,</div><div class='del'>-    [AC_TRY_RUN(</div><div class='del'>-changequote(&lt;&lt;, &gt;&gt;)dnl</div><div class='del'>-&lt;&lt;</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;math.h&gt;</div><div class='del'>-main ()</div><div class='del'>-{</div><div class='del'>-  char buf[256];</div><div class='del'>-  sprintf (buf, "%f", log(exp(1.0)));</div><div class='del'>-  exit (strcmp (buf, "1.000000") ? 0 : 1);</div><div class='del'>-}</div><div class='del'>-&gt;&gt;,</div><div class='del'>-changequote([, ])dnl</div><div class='del'>-rb_cv_missing_fconvert=yes, rb_cv_missing_fconvert=no, rb_cv_missing_fconvert=no)])</div><div class='del'>-    if test "$rb_cv_missing_fconvert" = yes; then</div><div class='del'>-      AC_DEFINE(MISSING_FCONVERT)</div><div class='del'>-    fi</div><div class='del'>-    AC_LIBOBJ([x68.o])</div><div class='del'>-    CFLAGS="$CFLAGS -fansi-only"</div><div class='del'>-    XCFLAGS="$XCFLAGS -cc1-stack=262144 -cpp-stack=2694144"</div><div class='del'>-    EXEEXT=.x</div><div class='del'>-    OBJEXT=o</div><div class='del'>-    setup=Setup.x68</div><div class='del'>-    ;;</div><div class='del'>-  dnl OS/2 environment w/ Autoconf 2.1x for EMX</div><div class='del'>-  os2-emx)</div><div class='del'>-    AC_LIBOBJ([os2])</div><div class='del'>-    setup=Setup.emx</div><div class='del'>-    ;;</div><div class='del'>-  *djgpp*)</div><div class='del'>-    setup=Setup.dj</div><div class='del'>-    ;;</div><div class='del'>-  *)</div><div class='del'>-    setup=Setup</div><div class='del'>-    ;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-AC_SUBST(setup)</div><div class='del'>-</div><div class='del'>-if test "$prefix" = NONE; then</div><div class='del'>-  prefix=$ac_default_prefix</div><div class='del'>-fi</div><div class='del'>-</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='del'>-</div><div class='del'>-if test x"$cross_compiling" = xyes; then</div><div class='del'>-  test x"$MINIRUBY" = x &amp;&amp; MINIRUBY="${RUBY-ruby} -I`pwd` -rfake"</div><div class='del'>-  PREP=fake.rb</div><div class='del'>-  RUNRUBY='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'</div><div class='del'>-else</div><div class='del'>-  MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib'</div><div class='del'>-  MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common -I./- -r$(srcdir)/ext/purelib.rb'</div><div class='del'>-  PREP='miniruby$(EXEEXT)'</div><div class='del'>-  RUNRUBY='$(MINIRUBY) $(srcdir)/runruby.rb --extout=$(EXTOUT)'</div><div class='del'>-fi</div><div class='del'>-AC_SUBST(MINIRUBY)</div><div class='del'>-AC_SUBST(PREP)</div><div class='del'>-AC_SUBST(RUNRUBY)</div><div class='del'>-AC_SUBST(EXTOUT, [${EXTOUT-.ext}])</div><div class='del'>-</div><div class='del'>-FIRSTMAKEFILE=""</div><div class='del'>-LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a'</div><div class='del'>-LIBRUBY='$(LIBRUBY_A)'</div><div class='del'>-LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static'</div><div class='del'>-LIBRUBYARG='$(LIBRUBYARG_STATIC)'</div><div class='del'>-SOLIBS=</div><div class='del'>-</div><div class='del'>-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='del'>-    ;;</div><div class='del'>-  *)</div><div class='del'>-    DLDLIBS="$DLDLIBS -lc"</div><div class='del'>-    ;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-RUBY_SO_NAME='$(RUBY_INSTALL_NAME)'</div><div class='del'>-LIBRUBY_LDSHARED=$LDSHARED</div><div class='del'>-LIBRUBY_DLDFLAGS=$DLDFLAGS</div><div class='del'>-LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY)'</div><div class='del'>-LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so'</div><div class='del'>-ENABLE_SHARED=no</div><div class='del'>-</div><div class='del'>-AC_ARG_ENABLE(shared,</div><div class='del'>-       [  --enable-shared         build a shared library for Ruby. ],</div><div class='del'>-       [enable_shared=$enableval])</div><div class='del'>-if test "$enable_shared" = 'yes'; then</div><div class='del'>-  LIBRUBY='$(LIBRUBY_SO)'</div><div class='del'>-  LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'</div><div class='del'>-  LIBRUBYARG='$(LIBRUBYARG_SHARED)'</div><div class='del'>-  CFLAGS="$CFLAGS $CCDLFLAGS"</div><div class='del'>-  ENABLE_SHARED=yes</div><div class='del'>-  if test "$rb_cv_binary_elf" = yes; then</div><div class='del'>-    SOLIBS='$(LIBS)'</div><div class='del'>-  fi</div><div class='del'>-  case "$target_os" in</div><div class='del'>-    sunos4*)</div><div class='del'>-	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'</div><div class='del'>-	;;</div><div class='del'>-    linux* | gnu* | k*bsd*-gnu | atheos*)</div><div class='del'>-	LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'</div><div class='del'>-	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'</div><div class='del'>-	;;</div><div class='del'>-    freebsd*|dragonfly*)</div><div class='del'>-	SOLIBS='$(LIBS)'</div><div class='del'>-	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'</div><div class='del'>-	if test "$rb_cv_binary_elf" != "yes" ; then</div><div class='del'>-	    LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)"</div><div class='del'>-	    LIBRUBY_ALIASES=''</div><div class='del'>-	fi</div><div class='del'>-	;;</div><div class='del'>-    netbsd*)</div><div class='del'>-	SOLIBS='$(LIBS)'</div><div class='del'>-	LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR).$(TEENY)'</div><div class='del'>-	LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'</div><div class='del'>-	if test "$rb_cv_binary_elf" = yes; then # ELF platforms</div><div class='del'>-	   LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR) lib$(RUBY_SO_NAME).so'</div><div class='del'>-	else	# a.out platforms</div><div class='del'>-	   LIBRUBY_ALIASES=""</div><div class='del'>-	fi</div><div class='del'>- 	;;</div><div class='del'>-    openbsd*)</div><div class='del'>-	SOLIBS='$(LIBS)'</div><div class='del'>-	LIBRUBY_SO='lib$(RUBY_INSTALL_NAME).so.$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}`</div><div class='del'>-	;;</div><div class='del'>-    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='del'>- 	;;</div><div class='del'>-    hpux*)</div><div class='del'>-	XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)'</div><div class='del'>-	LIBRUBY_SO='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR).$(TEENY)'</div><div class='del'>-	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).sl'</div><div class='del'>-	;;</div><div class='del'>-    aix*)</div><div class='del'>-	LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS"</div><div class='del'>-	LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}'</div><div class='del'>-	SOLIBS='-lm -lc'</div><div class='del'>-	;;</div><div class='del'>-    beos*)</div><div class='del'>-	case "$target_cpu" in</div><div class='del'>-	powerpc*)</div><div class='del'>-	    LIBRUBY_DLDFLAGS='-f ruby.exp -lnet -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'</div><div class='del'>-	    ;;</div><div class='del'>-	esac</div><div class='del'>-	;;</div><div class='del'>-    darwin*)</div><div class='del'>-	LIBRUBY_SO='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).$(TEENY).dylib'</div><div class='del'>-	LIBRUBY_LDSHARED='cc -dynamiclib -undefined suppress -flat_namespace'</div><div class='del'>-	LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'</div><div class='del'>-	LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_SO_NAME).dylib'</div><div class='del'>-	;;</div><div class='del'>-    interix*)</div><div class='del'>-	LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)'</div><div class='del'>-	;;</div><div class='del'>-    *)</div><div class='del'>-	;;</div><div class='del'>-  esac</div><div class='del'>-fi</div><div class='del'>-if test "$enable_rpath" = yes; then</div><div class='del'>-    LIBRUBYARG_SHARED="${linker_flag}-R ${linker_flag}\$(libdir) -L\$(libdir) $LIBRUBYARG_SHARED"</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-LDFLAGS="-L. $LDFLAGS"</div><div class='del'>-AC_SUBST(ARCHFILE)</div><div class='del'>-</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='del'>-case "$target_os" in</div><div class='del'>-    linux*)</div><div class='del'>-	XCFLAGS="$XCFLAGS -D_GNU_SOURCE=1"</div><div class='del'>-	;;</div><div class='del'>-    netbsd*)</div><div class='del'>-    	CFLAGS="$CFLAGS -pipe"</div><div class='del'>-	;;</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='del'>-	;;</div><div class='del'>-    rhapsody*)</div><div class='del'>-    	CFLAGS="$CFLAGS -pipe -no-precomp -fno-common"</div><div class='del'>-	;;</div><div class='del'>-    darwin*)</div><div class='del'>-    	CFLAGS="$CFLAGS -pipe -fno-common"</div><div class='del'>-	MINIOBJS=dmydln.o</div><div class='del'>-	;;</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='del'>-	;;</div><div class='del'>-    osf*)</div><div class='del'>-	if test "$GCC" != "yes" ; then</div><div class='del'>-	  # compile something small: taint.c is fine for this.</div><div class='del'>-	  # the main point is the '-v' flag of 'cc'.</div><div class='del'>-	  case "`cc -v -I. -c main.c -o /tmp/main.o 2&gt;&amp;1`" in</div><div class='del'>-	  */gemc_cc*)   # we have the new DEC GEM CC</div><div class='del'>-                        CFLAGS="$CFLAGS -oldc"</div><div class='del'>-                        ;;</div><div class='del'>-          *)            # we have the old MIPS CC</div><div class='del'>-                        ;;</div><div class='del'>-          esac</div><div class='del'>-	  # cleanup</div><div class='del'>-	  rm -f /tmp/main.o</div><div class='del'>-	  CFLAGS="$CFLAGS -std"</div><div class='del'>-	fi</div><div class='del'>-	;;</div><div class='del'>-    beos*)</div><div class='del'>-	case "$target_cpu" in</div><div class='del'>-	powerpc*)</div><div class='del'>-	    CFLAGS="$CFLAGS -relax_pointers"</div><div class='del'>-	    ;;</div><div class='del'>-	esac</div><div class='del'>-	;;</div><div class='del'>-    cygwin*|mingw*)</div><div class='del'>-	case "$target_os" in</div><div class='del'>-	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='del'>-	    ;;</div><div class='del'>-	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='del'>-	    AC_LIBOBJ([win32])</div><div class='del'>-	    COMMON_LIBS=m</div><div class='del'>-#	    COMMON_MACROS="WIN32_LEAN_AND_MEAN="</div><div class='del'>-	    COMMON_HEADERS="windows.h winsock.h"</div><div class='del'>-	    ;;</div><div class='del'>-	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='del'>-	    LIBRUBY_SO=dummy</div><div class='del'>-	    LIBRUBY='lib$(RUBY_SO_NAME).a'</div><div class='del'>-	    LIBRUBYARG='-l$(RUBY_SO_NAME)'</div><div class='del'>-	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'>-    *)</div><div class='del'>-	;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-case "$build_os" in</div><div class='del'>-  *msdosdjgpp*) FIRSTMAKEFILE=GNUmakefile:djgpp/GNUmakefile.in;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-CPPFLAGS="$CPPFLAGS "'$(DEFS)'</div><div class='del'>-test -z "$CFLAGS" || CFLAGS="$CFLAGS "; CFLAGS="$CFLAGS"'${cflags}'</div><div class='del'>-test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'</div><div class='del'>-AC_SUBST(cppflags, [])dnl</div><div class='del'>-AC_SUBST(cflags, ['${optflags} ${debugflags}'])dnl</div><div class='del'>-AC_SUBST(optflags)dnl</div><div class='del'>-AC_SUBST(debugflags)dnl</div><div class='del'>-AC_SUBST(XCFLAGS)dnl</div><div class='del'>-AC_SUBST(XLDFLAGS)dnl</div><div class='del'>-AC_SUBST(LIBRUBY_LDSHARED)</div><div class='del'>-AC_SUBST(LIBRUBY_DLDFLAGS)</div><div class='del'>-AC_SUBST(RUBY_INSTALL_NAME)</div><div class='del'>-AC_SUBST(rubyw_install_name)</div><div class='del'>-AC_SUBST(RUBYW_INSTALL_NAME)</div><div class='del'>-AC_SUBST(RUBY_SO_NAME)</div><div class='del'>-AC_SUBST(LIBRUBY_A)</div><div class='del'>-AC_SUBST(LIBRUBY_SO)</div><div class='del'>-AC_SUBST(LIBRUBY_ALIASES)</div><div class='del'>-AC_SUBST(LIBRUBY)</div><div class='del'>-AC_SUBST(LIBRUBYARG)</div><div class='del'>-AC_SUBST(LIBRUBYARG_STATIC)</div><div class='del'>-AC_SUBST(LIBRUBYARG_SHARED)</div><div class='del'>-AC_SUBST(SOLIBS)</div><div class='del'>-AC_SUBST(DLDLIBS)</div><div class='del'>-AC_SUBST(ENABLE_SHARED)</div><div class='del'>-AC_SUBST(MAINLIBS)</div><div class='del'>-AC_SUBST(COMMON_LIBS)</div><div class='del'>-AC_SUBST(COMMON_MACROS)</div><div class='del'>-AC_SUBST(COMMON_HEADERS)</div><div class='del'>-AC_SUBST(EXPORT_PREFIX)</div><div class='del'>-AC_SUBST(MINIOBJS)</div><div class='del'>-</div><div class='del'>-MAKEFILES="Makefile `echo $FIRSTMAKEFILE | sed 's/:.*//'`"</div><div class='del'>-MAKEFILES="`echo $MAKEFILES`"</div><div class='del'>-AC_SUBST(MAKEFILES)</div><div class='del'>-</div><div class='del'>-ri_prefix=</div><div class='del'>-test "$program_prefix" != NONE &amp;&amp;</div><div class='del'>-  ri_prefix=$program_prefix</div><div class='del'>-</div><div class='del'>-ri_suffix=</div><div class='del'>-test "$program_suffix" != NONE &amp;&amp;</div><div class='del'>-  ri_suffix=$program_suffix</div><div class='del'>-</div><div class='del'>-RUBY_INSTALL_NAME="${ri_prefix}ruby${ri_suffix}"</div><div class='del'>-case "$target_os" in</div><div class='del'>-  cygwin*|mingw*)</div><div class='del'>-    RUBYW_INSTALL_NAME="${ri_prefix}rubyw${ri_suffix}"</div><div class='del'>-    rubyw_install_name="$RUBYW_INSTALL_NAME"</div><div class='del'>-    ;;</div><div class='del'>-esac</div><div class='del'>-RUBY_LIB_PREFIX=`eval echo \\"${libdir}/ruby\\"`</div><div class='del'>-</div><div class='del'>-AC_ARG_WITH(sitedir,</div><div class='del'>-	    [  --with-sitedir=DIR      site libraries in DIR [[LIBDIR/ruby/site_ruby]]],</div><div class='del'>-            [sitedir=$withval],</div><div class='del'>-            [sitedir='${libdir}/ruby/site_ruby'])</div><div class='del'>-SITE_DIR=`eval echo \\"${sitedir}\\"`</div><div class='del'>-</div><div class='del'>-case "$target_os" in</div><div class='del'>-  cygwin*|mingw*|*djgpp*|os2-emx*)</div><div class='del'>-    RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"</div><div class='del'>-    RUBY_SITE_LIB_PATH="`eval echo "$SITE_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"</div><div class='del'>-    ;;</div><div class='del'>-  *)</div><div class='del'>-    RUBY_LIB_PREFIX="`eval echo \\"$RUBY_LIB_PREFIX\\" | sed 's|^NONE/|'"$prefix"'/|'`"</div><div class='del'>-    RUBY_SITE_LIB_PATH="`eval echo \\"$SITE_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"</div><div class='del'>-    ;;</div><div class='del'>-esac</div><div class='del'>-RUBY_LIB_PATH="${RUBY_LIB_PREFIX}/${MAJOR}.${MINOR}"</div><div class='del'>-RUBY_SITE_LIB_PATH2="${RUBY_SITE_LIB_PATH}/${MAJOR}.${MINOR}"</div><div class='del'>-</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_LIB, "${RUBY_LIB_PATH}")</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, "${RUBY_SITE_LIB_PATH}")</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_SITE_LIB2, "${RUBY_SITE_LIB_PATH2}")</div><div class='del'>-</div><div class='del'>-AC_ARG_WITH(vendordir,</div><div class='del'>-	    [  --with-vendordir=DIR    vendor libraries in DIR [[LIBDIR/ruby/vendor_ruby]]],</div><div class='del'>-            [vendordir=$withval],</div><div class='del'>-            [vendordir='${libdir}/ruby/vendor_ruby'])</div><div class='del'>-VENDOR_DIR=`eval echo \\"${vendordir}\\"`</div><div class='del'>-case "$target_os" in</div><div class='del'>-  cygwin*|mingw*|*djgpp*|os2-emx*)</div><div class='del'>-    RUBY_VENDOR_LIB_PATH="`eval echo "$VENDOR_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"</div><div class='del'>-    ;;</div><div class='del'>-  *)</div><div class='del'>-    RUBY_VENDOR_LIB_PATH="`eval echo \\"$VENDOR_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"</div><div class='del'>-    ;;</div><div class='del'>-esac</div><div class='del'>-RUBY_VENDOR_LIB_PATH2="${RUBY_VENDOR_LIB_PATH}/${MAJOR}.${MINOR}"</div><div class='del'>-</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, "${RUBY_VENDOR_LIB_PATH}")</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB2, "${RUBY_VENDOR_LIB_PATH2}")</div><div class='del'>-</div><div class='del'>-AC_SUBST(arch)dnl</div><div class='del'>-AC_SUBST(sitearch)dnl</div><div class='del'>-AC_SUBST(sitedir)dnl</div><div class='del'>-AC_SUBST(vendordir)dnl</div><div class='del'>-</div><div class='del'>-configure_args=$ac_configure_args</div><div class='del'>-AC_SUBST(configure_args)dnl</div><div class='del'>-</div><div class='del'>-if test "$fat_binary" != no ; then</div><div class='del'>-    arch="fat-${target_os}"</div><div class='del'>-</div><div class='del'>-    AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB,</div><div class='del'>-                 "${RUBY_LIB_PATH}/" __ARCHITECTURE__ "-${target_os}")</div><div class='del'>-</div><div class='del'>-    AC_DEFINE_UNQUOTED(RUBY_SITE_THIN_ARCHLIB,</div><div class='del'>-                 "${RUBY_SITE_LIB_PATH}/" __ARCHITECTURE__ "-${target_os}")</div><div class='del'>-    AC_DEFINE_UNQUOTED(RUBY_VENDOR_THIN_ARCHLIB,</div><div class='del'>-                 "${RUBY_VENDOR_LIB_PATH}/" __ARCHITECTURE__ "-${target_os}")</div><div class='del'>-    AC_DEFINE_UNQUOTED(RUBY_PLATFORM, __ARCHITECTURE__ "-${target_os}")</div><div class='ctx'> else</div><div class='del'>-    arch="${target_cpu}-${target_os}"</div><div class='del'>-    AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}")</div><div class='add'>+  STATIC=</div><div class='ctx'> fi</div><div class='del'>-</div><div class='del'>-case "$target_os" in</div><div class='del'>-  mingw*) sitearch="$target_cpu-$rb_cv_msvcrt" ;;</div><div class='del'>-  *) sitearch="${arch}" ;;</div><div class='del'>-esac</div><div class='del'>-</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "${RUBY_LIB_PATH}/${arch}")</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_SITE_ARCHLIB, "${RUBY_SITE_LIB_PATH2}/${sitearch}")</div><div class='del'>-AC_DEFINE_UNQUOTED(RUBY_VENDOR_ARCHLIB, "${RUBY_VENDOR_LIB_PATH2}/${sitearch}")</div><div class='del'>-</div><div class='del'>-AC_ARG_WITH(search-path,</div><div class='del'>-		[  --with-search-path=DIR specify the additional search path],</div><div class='del'>-		[search_path=$withval])</div><div class='del'>-if test "$search_path" != ""; then</div><div class='del'>-    AC_DEFINE_UNQUOTED(RUBY_SEARCH_PATH,"$search_path")</div><div class='del'>-fi</div><div class='del'>-</div><div class='del'>-AC_ARG_WITH(mantype,</div><div class='del'>-		[  --with-mantype=TYPE specify man page type; TYPE is one of man and doc],</div><div class='del'>-		[</div><div class='del'>-			case "$withval" in</div><div class='del'>-			man|doc)</div><div class='del'>-				MANTYPE=$withval</div><div class='del'>-				;;</div><div class='del'>-			*)</div><div class='del'>-				AC_MSG_ERROR(invalid man type: $withval)</div><div class='del'>-				;;</div><div class='del'>-			esac</div><div class='del'>-		])</div><div class='del'>-if test -z "$MANTYPE"; then</div><div class='del'>-	AC_PATH_PROGS(NROFF, nroff awf, /bin/false, "/usr/bin:/usr/ucb")</div><div class='del'>-	if ${NROFF} -mdoc ${srcdir}/ruby.1 &gt;/dev/null 2&gt;&amp;1; then</div><div class='del'>-		MANTYPE=doc</div><div class='del'>-	else</div><div class='del'>-		MANTYPE=man</div><div class='del'>-	fi</div><div class='del'>-fi</div><div class='del'>-AC_SUBST(MANTYPE)</div><div class='del'>-</div><div class='del'>-if test -f config.h &amp;&amp; tr -d '\015' &lt; confdefs.h | cmp -s config.h -; then</div><div class='del'>-  echo "config.h unchanged"</div><div class='del'>-else</div><div class='del'>-  echo "creating config.h"</div><div class='del'>-  tr -d '\015' &lt; confdefs.h &gt; config.h</div><div class='del'>-fi</div><div class='del'>-tr -d '\015' &lt; largefile.h &gt; confdefs.h</div><div class='del'>-rm largefile.h</div><div class='del'>-</div><div class='del'>-AC_CONFIG_FILES($FIRSTMAKEFILE)</div><div class='del'>-AC_CONFIG_FILES(Makefile, [{</div><div class='del'>-	sed '/^MISSING/s/\$U\././g' 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; confmk$$.tmp &amp;&amp; mv -f confmk$$.tmp Makefile],</div><div class='del'>-[RUBY_INSTALL_NAME=$RUBY_INSTALL_NAME EXEEXT=$EXEEXT])</div><div class='del'>-AC_OUTPUT</div><div class='add'>+AC_SUBST(STATIC)dnl</div><div class='add'>+AC_PROG_YACC</div><div class='add'>+AC_PROG_INSTALL</div><div class='add'>+AC_HAVE_HEADERS(unistd.h syscall.h a.out.h)</div><div class='add'>+AC_DIR_HEADER</div><div class='add'>+AC_GETGROUPS_T</div><div class='add'>+AC_RETSIGTYPE</div><div class='add'>+AC_HAVE_FUNCS(getopt_long memmove strerror strtoul strdup strstr)</div><div class='add'>+AC_HAVE_FUNCS(setenv fmod killpg mkdir strftime socket random)</div><div class='add'>+AC_HAVE_FUNCS(wait4 waitpid syscall)</div><div class='add'>+if echo $DEFS | grep "HAVE_SETENV" 2&gt;&amp;1 &gt; /dev/null; then</div><div class='add'>+  :</div><div class='add'>+else</div><div class='add'>+  AC_HAVE_FUNCS(putenv)</div><div class='add'>+fi</div><div class='add'>+if echo $DEFS | grep "HAVE_STRFTIME" 2&gt;&amp;1 &gt; /dev/null; then</div><div class='add'>+  :</div><div class='add'>+else</div><div class='add'>+  AC_TIMEZONE</div><div class='add'>+  AC_COMPILE_CHECK([daylight], [],</div><div class='add'>+  [extern int daylight; int i; i = daylight;], AC_DEFINE(HAVE_DAYLIGHT))</div><div class='add'>+fi</div><div class='add'>+AC_ALLOCA</div><div class='add'>+AC_WORDS_BIGENDIAN</div><div class='add'>+AC_ST_BLKSIZE</div><div class='add'>+AC_ST_BLOCKS</div><div class='add'>+AC_ST_RDEV</div><div class='add'>+AC_COMPILE_CHECK([pw_change in struct passwd], [#include &lt;pwd.h&gt;],</div><div class='add'>+[struct passwd pw; pw.pw_change;], AC_DEFINE(PW_CHANGE))</div><div class='add'>+AC_COMPILE_CHECK([pw_quota in struct passwd], [#include &lt;pwd.h&gt;],</div><div class='add'>+[struct passwd pw; pw.pw_quota;], AC_DEFINE(PW_QUOTA))</div><div class='add'>+AC_COMPILE_CHECK([pw_age in struct passwd], [#include &lt;pwd.h&gt;],</div><div class='add'>+[struct passwd pw; pw.pw_age;], AC_DEFINE(PW_AGE))</div><div class='add'>+AC_COMPILE_CHECK([pw_class in struct passwd], [#include &lt;pwd.h&gt;],</div><div class='add'>+[struct passwd pw; pw.pw_class;], AC_DEFINE(PW_CLASSS))</div><div class='add'>+AC_COMPILE_CHECK([pw_comment in struct passwd], [#include &lt;pwd.h&gt;],</div><div class='add'>+[struct passwd pw; pw.pw_comment;], AC_DEFINE(PW_COMMENT))</div><div class='add'>+AC_COMPILE_CHECK([pw_expire in struct passwd], [#include &lt;pwd.h&gt;],</div><div class='add'>+[struct passwd pw; pw.pw_expire;], AC_DEFINE(PW_EXPIRE))</div><div class='add'>+AC_HAVE_LIBRARY(m, [LIBS="$LIBS -lm"])</div><div class='add'>+AC_HAVE_LIBRARY(dbm, [LIBS="$LIBS -ldbm"])</div><div class='add'>+AC_HAVE_LIBRARY(socket, [LIBS="$LIBS -lsocket"])</div><div class='add'>+AC_OUTPUT(Makefile)</div><div class='head'>diff --git a/cygwin/GNUmakefile.in b/cygwin/GNUmakefile.in<br/>deleted file mode 100644<br/>index 03208df11c..0000000000<br/>--- a/<a href='/ruby.git/tree/cygwin/GNUmakefile.in?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>cygwin/GNUmakefile.in</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,78 +0,0 @@</div><div class='del'>-include Makefile</div><div class='del'>-</div><div class='del'>-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='del'>-</div><div class='del'>-ifneq ($(ENABLE_SHARED),yes)</div><div class='del'>-  RUBY_EXP = $(RUBY_INSTALL_NAME).exp</div><div class='del'>-  EXTOBJS = $(RUBY_EXP)</div><div class='del'>-  LIBRUBYARG = $(LIBRUBY_A)</div><div class='del'>-  LIBRUBY_SO =</div><div class='del'>-endif</div><div class='del'>-</div><div class='del'>-ifeq ($(RUBY_INSTALL_NAME),ruby)</div><div class='del'>-  RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME)w</div><div class='del'>-else</div><div class='del'>-  RUBYW_INSTALL_NAME = $(subst ruby,rubyw,$(RUBY_INSTALL_NAME))</div><div class='del'>-endif</div><div class='del'>-</div><div class='del'>-WPROGRAM = $(RUBYW_INSTALL_NAME)$(EXEEXT)</div><div class='del'>-SOLIBS := $(DLL_BASE_NAME).res.@OBJEXT@ $(SOLIBS)</div><div class='del'>-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='del'>-</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='del'>-</div><div class='del'>-%.res.@OBJEXT@: %.rc</div><div class='del'>-	@WINDRES@ --include-dir . --include-dir $(&lt;D) --include-dir $(srcdir)/win32 $&lt; $@</div><div class='del'>-</div><div class='del'>-$(RCFILES): $(RBCONFIG)</div><div class='del'>-	@$(MINIRUBY) $(srcdir)/win32/resource.rb \</div><div class='del'>-	  -ruby_name=$(RUBY_INSTALL_NAME) -rubyw_name=$(RUBYW_INSTALL_NAME) \</div><div class='del'>-	  -so_name=$(DLL_BASE_NAME) \</div><div class='del'>-	  . $(icondirs) $(srcdir)/win32</div><div class='del'>-</div><div class='del'>-$(PROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@</div><div class='del'>-$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.@OBJEXT@</div><div class='del'>-	@rm -f $@</div><div class='del'>-	$(PURIFY) $(CC) -mwindows -e _mainCRTStartup $(LDFLAGS) $(XLDFLAGS) \</div><div class='del'>-	  $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@</div><div class='del'>-</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='del'>-</div><div class='del'>-GNUmakefile:	$(srcdir)/cygwin/GNUmakefile.in</div><div class='del'>-</div><div class='del'>-ifeq (@target_os@,mingw32)</div><div class='del'>-$(OBJS) $(MAINOBJ): win32/win32.h</div><div class='del'>-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/dbm.c b/dbm.c<br/>new file mode 100644<br/>index 0000000000..cee887e688<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/dbm.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>dbm.c</a></div><div class='hunk'>@@ -0,0 +1,388 @@</div><div class='add'>+/************************************************</div><div class='add'>+</div><div class='add'>+  dbm.c -</div><div class='add'>+</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='add'>+  created at: Mon Jan 24 15:59:52 JST 1994</div><div class='add'>+</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='add'>+</div><div class='add'>+************************************************/</div><div class='add'>+</div><div class='add'>+#include "ruby.h"</div><div class='add'>+</div><div class='add'>+#ifdef USE_DBM</div><div class='add'>+</div><div class='add'>+#include &lt;ndbm.h&gt;</div><div class='add'>+#include &lt;sys/file.h&gt;</div><div class='add'>+#include &lt;errno.h&gt;</div><div class='add'>+</div><div class='add'>+VALUE C_DBM;</div><div class='add'>+</div><div class='add'>+extern VALUE M_Enumerable;</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+closeddbm()</div><div class='add'>+{</div><div class='add'>+    Fail("closed DBM file");</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#define GetDBM(obj, dbmp) {\</div><div class='add'>+    DBM **_dbm;\</div><div class='add'>+    Get_Data_Struct(obj, "dbm", DBM*, _dbm);\</div><div class='add'>+    dbmp = *_dbm;\</div><div class='add'>+    if (dbmp == Qnil) closeddbm();\</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static void</div><div class='add'>+free_dbm(dbmp)</div><div class='add'>+    DBM **dbmp;</div><div class='add'>+{</div><div class='add'>+    if (*dbmp) dbm_close(*dbmp);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#define MakeDBM(obj, dp) {\</div><div class='add'>+    DBM **_dbm;\</div><div class='add'>+    Make_Data_Struct(obj,"dbm",DBM*,Qnil,free_dbm,_dbm);\</div><div class='add'>+    *_dbm=dp;\</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_open(class, args)</div><div class='add'>+    VALUE class, args;</div><div class='add'>+{</div><div class='add'>+    VALUE file, vmode;</div><div class='add'>+    DBM *dbm, **dbm2;</div><div class='add'>+    int mode;</div><div class='add'>+    VALUE obj;</div><div class='add'>+</div><div class='add'>+    if (rb_scan_args(args, "11", &amp;file, &amp;vmode) == 1) {</div><div class='add'>+	mode = 0666;		/* default value */</div><div class='add'>+    }</div><div class='add'>+    else if (NIL_P(vmode)) {</div><div class='add'>+	mode = -1;		/* return nil if DB not exist */</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	mode = NUM2INT(vmode);</div><div class='add'>+    }</div><div class='add'>+    Check_Type(file, T_STRING);</div><div class='add'>+</div><div class='add'>+    dbm = Qnil;</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='add'>+    if (!dbm)</div><div class='add'>+	dbm = dbm_open(RSTRING(file)-&gt;ptr, O_RDWR, mode);</div><div class='add'>+    if (!dbm)</div><div class='add'>+	dbm = dbm_open(RSTRING(file)-&gt;ptr, O_RDONLY, mode);</div><div class='add'>+</div><div class='add'>+    if (!dbm) {</div><div class='add'>+	if (mode == -1) return Qnil;</div><div class='add'>+	rb_sys_fail(RSTRING(file)-&gt;ptr);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    obj = obj_alloc(class);</div><div class='add'>+    MakeDBM(obj, dbm);</div><div class='add'>+</div><div class='add'>+    return obj;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_close(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    DBM **dbmp;</div><div class='add'>+</div><div class='add'>+    Get_Data_Struct(obj, "dbm", DBM*, dbmp);</div><div class='add'>+    if (*dbmp == Qnil) Fail("already closed DBM file");</div><div class='add'>+    dbm_close(*dbmp);</div><div class='add'>+    *dbmp = Qnil;</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'>+Fdbm_fetch(obj, keystr)</div><div class='add'>+    VALUE obj, keystr;</div><div class='add'>+{</div><div class='add'>+    datum key, value;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+</div><div class='add'>+    Check_Type(keystr, T_STRING);</div><div class='add'>+    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='add'>+    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    value = dbm_fetch(dbm, key);</div><div class='add'>+    if (value.dptr == Qnil) {</div><div class='add'>+	return Qnil;</div><div class='add'>+    }</div><div class='add'>+    return str_new(value.dptr, value.dsize);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_delete(obj, keystr)</div><div class='add'>+    VALUE obj, keystr;</div><div class='add'>+{</div><div class='add'>+    datum key;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+</div><div class='add'>+    Check_Type(keystr, T_STRING);</div><div class='add'>+    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='add'>+    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='add'>+    </div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    if (dbm_delete(dbm, key)) {</div><div class='add'>+	Fail("DBM delete failed");</div><div class='add'>+    }</div><div class='add'>+    return obj;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_delete_if(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key, val;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+    VALUE keystr, valstr;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	val = dbm_fetch(dbm, key);</div><div class='add'>+	keystr = str_new(key.dptr, key.dsize);</div><div class='add'>+	valstr = str_new(val.dptr, val.dsize);</div><div class='add'>+	if (rb_yield(assoc_new(keystr, valstr))</div><div class='add'>+	    &amp;&amp; dbm_delete(dbm, key)) {</div><div class='add'>+	    Fail("DBM delete failed");</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    return obj;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_clear(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	if (dbm_delete(dbm, key)) {</div><div class='add'>+	    Fail("DBM delete failed");</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    return obj;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_store(obj, keystr, valstr)</div><div class='add'>+    VALUE obj, keystr, valstr;</div><div class='add'>+{</div><div class='add'>+    datum key, val;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+</div><div class='add'>+    if (valstr == Qnil) {</div><div class='add'>+	Fdbm_delete(obj, keystr);</div><div class='add'>+	return Qnil;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    Check_Type(keystr, T_STRING);</div><div class='add'>+    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='add'>+    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='add'>+    Check_Type(valstr, T_STRING);</div><div class='add'>+    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='add'>+    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    if (dbm_store(dbm, key, val, DBM_REPLACE)) {</div><div class='add'>+	dbm_clearerr(dbm);</div><div class='add'>+	if (errno == EPERM) rb_sys_fail(Qnil);</div><div class='add'>+	Fail("DBM store failed");</div><div class='add'>+    }</div><div class='add'>+    return valstr;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_length(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+    int i = 0;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	i++;</div><div class='add'>+    }</div><div class='add'>+    return INT2FIX(i);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_each(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key, val;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	val = dbm_fetch(dbm, key);</div><div class='add'>+	rb_yield(str_new(val.dptr, val.dsize));</div><div class='add'>+    }</div><div class='add'>+    return obj;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_each_key(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	rb_yield(str_new(key.dptr, key.dsize));</div><div class='add'>+    }</div><div class='add'>+    return obj;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_each_pair(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key, val;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+    VALUE keystr, valstr;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	val = dbm_fetch(dbm, key);</div><div class='add'>+	keystr = str_new(key.dptr, key.dsize);</div><div class='add'>+	valstr = str_new(val.dptr, val.dsize);</div><div class='add'>+	rb_yield(assoc_new(keystr, valstr));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return obj;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_keys(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+    VALUE ary;</div><div class='add'>+</div><div class='add'>+    ary = ary_new();</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	Fary_push(ary, str_new(key.dptr, key.dsize));</div><div class='add'>+    }</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'>+Fdbm_values(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key, val;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+    VALUE ary;</div><div class='add'>+</div><div class='add'>+    ary = ary_new();</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	val = dbm_fetch(dbm, key);</div><div class='add'>+	Fary_push(ary, str_new(val.dptr, val.dsize));</div><div class='add'>+    }</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'>+Fdbm_has_key(obj, keystr)</div><div class='add'>+    VALUE obj, keystr;</div><div class='add'>+{</div><div class='add'>+    datum key, val;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+</div><div class='add'>+    Check_Type(keystr, T_STRING);</div><div class='add'>+    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='add'>+    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='add'>+    </div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    val = dbm_fetch(dbm, key);</div><div class='add'>+    if (val.dptr) return TRUE;</div><div class='add'>+    return FALSE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_has_value(obj, valstr)</div><div class='add'>+    VALUE obj, valstr;</div><div class='add'>+{</div><div class='add'>+    datum key, val;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+</div><div class='add'>+    Check_Type(valstr, T_STRING);</div><div class='add'>+    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='add'>+    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='add'>+    </div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	val = dbm_fetch(dbm, key);</div><div class='add'>+	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='add'>+	    memcmp(val.dptr, RSTRING(valstr)-&gt;ptr, val.dsize) == 0)</div><div class='add'>+	    return TRUE;</div><div class='add'>+    }</div><div class='add'>+    return FALSE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdbm_to_a(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    datum key, val;</div><div class='add'>+    DBM *dbm;</div><div class='add'>+    VALUE ary;</div><div class='add'>+</div><div class='add'>+    GetDBM(obj, dbm);</div><div class='add'>+</div><div class='add'>+    ary = ary_new();</div><div class='add'>+    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='add'>+	val = dbm_fetch(dbm, key);</div><div class='add'>+	Fary_push(ary, assoc_new(str_new(key.dptr, key.dsize),</div><div class='add'>+				 str_new(val.dptr, val.dsize)));</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    return ary;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+Init_DBM()</div><div class='add'>+{</div><div class='add'>+    C_DBM = rb_define_class("DBM", C_Object);</div><div class='add'>+    rb_include_module(C_DBM, M_Enumerable);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_DBM, "open", Fdbm_open, -2);</div><div class='add'>+    rb_define_method(C_DBM, "close", Fdbm_close, 0);</div><div class='add'>+    rb_define_method(C_DBM, "[]", Fdbm_fetch, 1);</div><div class='add'>+    rb_define_method(C_DBM, "[]=", Fdbm_store, 2);</div><div class='add'>+    rb_define_method(C_DBM, "length", Fdbm_length, 0);</div><div class='add'>+    rb_define_method(C_DBM, "each", Fdbm_each, 0);</div><div class='add'>+    rb_define_method(C_DBM, "each_value", Fdbm_each, 0);</div><div class='add'>+    rb_define_method(C_DBM, "each_key", Fdbm_each_key, 0);</div><div class='add'>+    rb_define_method(C_DBM, "each_pair", Fdbm_each_pair, 0);</div><div class='add'>+    rb_define_method(C_DBM, "keys", Fdbm_keys, 0);</div><div class='add'>+    rb_define_method(C_DBM, "values", Fdbm_values, 0);</div><div class='add'>+    rb_define_method(C_DBM, "delete", Fdbm_delete, 1);</div><div class='add'>+    rb_define_method(C_DBM, "delete_if", Fdbm_delete_if, 0);</div><div class='add'>+    rb_define_method(C_DBM, "clear", Fdbm_clear, 0);</div><div class='add'>+    rb_define_method(C_DBM, "includes", Fdbm_has_key, 1);</div><div class='add'>+    rb_define_method(C_DBM, "has_key", Fdbm_has_key, 1);</div><div class='add'>+    rb_define_method(C_DBM, "has_value", Fdbm_has_value, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_DBM, "to_a", Fdbm_to_a, 0);</div><div class='add'>+}</div><div class='add'>+#endif				/* USE_DBM */</div><div class='head'>diff --git a/defines.h b/defines.h<br/>index f39097fea4..2e917510c7 100644<br/>--- a/<a href='/ruby.git/tree/defines.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>defines.h</a><br/>+++ b/<a href='/ruby.git/tree/defines.h?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>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$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</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,262 +12,27 @@</div><div class='ctx'> </div><div class='ctx'> #define RUBY</div><div class='ctx'> </div><div class='del'>-#ifdef __cplusplus</div><div class='del'>-# ifndef  HAVE_PROTOTYPES</div><div class='del'>-#  define HAVE_PROTOTYPES 1</div><div class='del'>-# endif</div><div class='del'>-# ifndef  HAVE_STDARG_PROTOTYPES</div><div class='del'>-#  define HAVE_STDARG_PROTOTYPES 1</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#undef _</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-# define _(args) args</div><div class='del'>-#else</div><div class='del'>-# define _(args) ()</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#undef __</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-# define __(args) args</div><div class='del'>-#else</div><div class='del'>-# define __(args) ()</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef __cplusplus</div><div class='del'>-#define ANYARGS ...</div><div class='del'>-#else</div><div class='del'>-#define ANYARGS</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define xmalloc ruby_xmalloc</div><div class='del'>-#define xcalloc ruby_xcalloc</div><div class='del'>-#define xrealloc ruby_xrealloc</div><div class='del'>-#define xfree ruby_xfree</div><div class='del'>-</div><div class='del'>-void *xmalloc _((long));</div><div class='del'>-void *xcalloc _((long,long));</div><div class='del'>-void *xrealloc _((void*,long));</div><div class='del'>-void xfree _((void*));</div><div class='add'>+/* define EUC/SJIS for default kanji-code */</div><div class='add'>+#define EUC</div><div class='add'>+#undef SJIS</div><div class='ctx'> </div><div class='del'>-#if SIZEOF_LONG_LONG &gt; 0</div><div class='del'>-# define LONG_LONG long long</div><div class='del'>-#elif SIZEOF___INT64 &gt; 0</div><div class='del'>-# define HAVE_LONG_LONG 1</div><div class='del'>-# define LONG_LONG __int64</div><div class='del'>-# undef SIZEOF_LONG_LONG</div><div class='del'>-# define SIZEOF_LONG_LONG SIZEOF___INT64</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if SIZEOF_INT*2 &lt;= SIZEOF_LONG_LONG</div><div class='del'>-# define BDIGIT unsigned int</div><div class='del'>-# define SIZEOF_BDIGITS SIZEOF_INT</div><div class='del'>-# define BDIGIT_DBL unsigned LONG_LONG</div><div class='del'>-# define BDIGIT_DBL_SIGNED LONG_LONG</div><div class='del'>-#elif SIZEOF_INT*2 &lt;= SIZEOF_LONG</div><div class='del'>-# define BDIGIT unsigned int</div><div class='del'>-# define SIZEOF_BDIGITS SIZEOF_INT</div><div class='del'>-# define BDIGIT_DBL unsigned long</div><div class='del'>-# define BDIGIT_DBL_SIGNED long</div><div class='del'>-#elif SIZEOF_SHORT*2 &lt;= SIZEOF_LONG</div><div class='del'>-# define BDIGIT unsigned short</div><div class='del'>-# define SIZEOF_BDIGITS SIZEOF_SHORT</div><div class='del'>-# define BDIGIT_DBL unsigned long</div><div class='del'>-# define BDIGIT_DBL_SIGNED long</div><div class='del'>-#else</div><div class='del'>-# define BDIGIT unsigned short</div><div class='del'>-# define SIZEOF_BDIGITS (SIZEOF_LONG/2)</div><div class='del'>-# define BDIGIT_DBL unsigned long</div><div class='del'>-# define BDIGIT_DBL_SIGNED long</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-#undef _WIN32</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(MSDOS) || defined(_WIN32) || defined(__human68k__) || defined(__EMX__)</div><div class='del'>-#define DOSISH 1</div><div class='del'>-#ifndef _WIN32_WCE</div><div class='del'>-# define DOSISH_DRIVE_LETTER</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='add'>+/* define USE_DLN to load object file(.o). */</div><div class='add'>+#ifdef HAVE_A_OUT_H</div><div class='ctx'> </div><div class='del'>-/* define RUBY_USE_EUC/SJIS for default kanji-code */</div><div class='del'>-#ifndef DEFAULT_KCODE</div><div class='del'>-#if defined(DOSISH) || defined(__CYGWIN__) || defined(__MACOS__) || defined(OS2)</div><div class='del'>-#define DEFAULT_KCODE KCODE_SJIS</div><div class='del'>-#else</div><div class='del'>-#define DEFAULT_KCODE KCODE_EUC</div><div class='del'>-#endif</div><div class='add'>+#undef  USE_DLN</div><div class='add'>+#ifdef USE_DLN</div><div class='add'>+#define LIBC_NAME "libc.a"</div><div class='add'>+#define DLN_DEFAULT_PATH "/lib:/usr/lib:."</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#if defined(__NeXT__) || defined(__APPLE__)</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='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'>-#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='del'>-#endif</div><div class='del'>-#endif /* __APPLE__ */</div><div class='del'>-#endif /* NeXT */</div><div class='del'>-</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-#include "win32/win32.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(__VMS)</div><div class='del'>-#include "vms.h"</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-#endif</div><div class='del'>-</div><div class='del'>-#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='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(sparc) || defined(__sparc__)</div><div class='del'>-static inline void</div><div class='del'>-flush_register_windows(void)</div><div class='del'>-{</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='del'>-# else</div><div class='del'>-	("ta  0x03")</div><div class='del'>-# endif /* trap always to flush register windows if we are on a Sparc system */</div><div class='del'>-	;</div><div class='del'>-}</div><div class='del'>-#  define FLUSH_REGISTER_WINDOWS flush_register_windows()</div><div class='del'>-#elif defined(__ia64)</div><div class='del'>-void *rb_ia64_bsp(void);</div><div class='del'>-void rb_ia64_flushrs(void);</div><div class='del'>-#  define FLUSH_REGISTER_WINDOWS rb_ia64_flushrs()</div><div class='del'>-#else</div><div class='del'>-#  define FLUSH_REGISTER_WINDOWS ((void)0)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(DOSISH)</div><div class='del'>-#define PATH_SEP ";"</div><div class='del'>-#elif defined(riscos)</div><div class='del'>-#define PATH_SEP ","</div><div class='del'>-#else</div><div class='del'>-#define PATH_SEP ":"</div><div class='del'>-#endif</div><div class='del'>-#define PATH_SEP_CHAR PATH_SEP[0]</div><div class='del'>-</div><div class='del'>-#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='del'>-#endif</div><div class='del'>-</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='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='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef DLEXT_MAXLEN</div><div class='del'>-#define DLEXT_MAXLEN 4</div><div class='del'>-#endif</div><div class='add'>+/* define USE_DBM to use dbm class. */</div><div class='add'>+#define USE_DBM</div><div class='ctx'> </div><div class='del'>-#ifndef RUBY_PLATFORM</div><div class='del'>-#define RUBY_PLATFORM "unknown-unknown"</div><div class='add'>+#ifdef HAVE_SYSCALL_H</div><div class='add'>+/* define SAFE_SIGHANDLE to override syscall for trap. */</div><div class='add'>+#define SAFE_SIGHANDLE</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='head'>diff --git a/dict.c b/dict.c<br/>new file mode 100644<br/>index 0000000000..016917e311<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/dict.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>dict.c</a></div><div class='hunk'>@@ -0,0 +1,536 @@</div><div class='add'>+/************************************************</div><div class='add'>+</div><div class='add'>+  dict.c -</div><div class='add'>+</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='add'>+  created at: Mon Nov 22 18:51:18 JST 1993</div><div class='add'>+</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='add'>+</div><div class='add'>+************************************************/</div><div class='add'>+</div><div class='add'>+#include "ruby.h"</div><div class='add'>+#include "st.h"</div><div class='add'>+</div><div class='add'>+VALUE C_Dict, C_EnvDict;</div><div class='add'>+static ID hash, eq;</div><div class='add'>+VALUE Fgetenv(), Fsetenv();</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+rb_cmp(a, b)</div><div class='add'>+    VALUE a, b;</div><div class='add'>+{</div><div class='add'>+    return rb_funcall(a, eq, 1, b)?0:1;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+rb_hash(a, mod)</div><div class='add'>+    VALUE a;</div><div class='add'>+    int mod;</div><div class='add'>+{</div><div class='add'>+    return rb_funcall(a, hash, 0) % mod;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#define ASSOC_KEY(a) RARRAY(a)-&gt;ptr[0]</div><div class='add'>+#define ASSOC_VAL(a) RARRAY(a)-&gt;ptr[1]</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+Fdic_new(class)</div><div class='add'>+    VALUE class;</div><div class='add'>+{</div><div class='add'>+    int i, max;</div><div class='add'>+    NEWOBJ(dic, struct RDict);</div><div class='add'>+    OBJSETUP(dic, class, T_DICT);</div><div class='add'>+</div><div class='add'>+    dic-&gt;tbl = st_init_table(rb_cmp, rb_hash);</div><div class='add'>+</div><div class='add'>+    return (VALUE)dic;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_clone(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    NEWOBJ(dic2, struct RDict);</div><div class='add'>+    CLONESETUP(dic2, dic);</div><div class='add'>+</div><div class='add'>+    dic2-&gt;tbl = (st_table*)st_copy(dic-&gt;tbl);</div><div class='add'>+</div><div class='add'>+    return (VALUE)dic2;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_aref(dic, key)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+    VALUE key;</div><div class='add'>+{</div><div class='add'>+    VALUE val = Qnil;</div><div class='add'>+</div><div class='add'>+    if (!st_lookup(dic-&gt;tbl, key, &amp;val)) {</div><div class='add'>+	return Qnil;</div><div class='add'>+    }</div><div class='add'>+    return val;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_delete(dic, key)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+    VALUE key;</div><div class='add'>+{</div><div class='add'>+    VALUE val;</div><div class='add'>+</div><div class='add'>+    if (st_delete(dic-&gt;tbl, &amp;key, &amp;val))</div><div class='add'>+	return val;</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+dic_delete_if(key, value)</div><div class='add'>+    VALUE key, value;</div><div class='add'>+{</div><div class='add'>+    if (rb_yield(assoc_new(key, value)))</div><div class='add'>+	return ST_DELETE;</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_delete_if(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_delete_if, Qnil);</div><div class='add'>+</div><div class='add'>+    return (VALUE)dic;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static</div><div class='add'>+dic_clear(key, value)</div><div class='add'>+    VALUE key, value;</div><div class='add'>+{</div><div class='add'>+    return ST_DELETE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_clear(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_clear, Qnil);</div><div class='add'>+</div><div class='add'>+    return (VALUE)dic;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+VALUE</div><div class='add'>+Fdic_aset(dic, key, val)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+    VALUE key, val;</div><div class='add'>+{</div><div class='add'>+    if (val == Qnil) {</div><div class='add'>+	Fdic_delete(dic, key);</div><div class='add'>+	return Qnil;</div><div class='add'>+    }</div><div class='add'>+    st_insert(dic-&gt;tbl, key, val);</div><div class='add'>+    return val;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_length(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    return INT2FIX(dic-&gt;tbl-&gt;num_entries);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static</div><div class='add'>+dic_each(key, value)</div><div class='add'>+    VALUE key, value;</div><div class='add'>+{</div><div class='add'>+    rb_yield(value);</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_each(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_each);</div><div class='add'>+    return (VALUE)dic;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static</div><div class='add'>+dic_each_key(key, value)</div><div class='add'>+    VALUE key, value;</div><div class='add'>+{</div><div class='add'>+    rb_yield(key);</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_each_key(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_each_key);</div><div class='add'>+    return (VALUE)dic;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static</div><div class='add'>+dic_each_pair(key, value)</div><div class='add'>+    VALUE key, value;</div><div class='add'>+{</div><div class='add'>+    rb_yield(assoc_new(key, value));</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_each_pair(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_each_pair);</div><div class='add'>+    return (VALUE)dic;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static</div><div class='add'>+dic_to_a(key, value, ary)</div><div class='add'>+    VALUE key, value, ary;</div><div class='add'>+{</div><div class='add'>+    Fary_push(ary, assoc_new(key, value));</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_to_a(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    VALUE ary;</div><div class='add'>+</div><div class='add'>+    ary = ary_new();</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_to_a, ary);</div><div class='add'>+</div><div class='add'>+    return ary;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static</div><div class='add'>+dic_inspect(key, value, str)</div><div class='add'>+    VALUE key, value;</div><div class='add'>+    struct RString *str;</div><div class='add'>+{</div><div class='add'>+    VALUE str2;</div><div class='add'>+    ID inspect = rb_intern("_inspect");</div><div class='add'>+</div><div class='add'>+    if (str-&gt;len &gt; 1) {</div><div class='add'>+	str_cat(str, ", ", 2);</div><div class='add'>+    }</div><div class='add'>+    str2 = rb_funcall(key, inspect, 0, Qnil);</div><div class='add'>+    str_cat(str, RSTRING(str2)-&gt;ptr, RSTRING(str2)-&gt;len);</div><div class='add'>+    str_cat(str, "=&gt;", 2);</div><div class='add'>+    str2 = rb_funcall(value, inspect, 0, Qnil);</div><div class='add'>+    str_cat(str, RSTRING(str2)-&gt;ptr, RSTRING(str2)-&gt;len);</div><div class='add'>+</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_inspect(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    VALUE str;</div><div class='add'>+</div><div class='add'>+    str = str_new2("{");</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_inspect, str);</div><div class='add'>+    str_cat(str, "}", 1);</div><div class='add'>+</div><div class='add'>+    return str;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_to_s(dic)</div><div class='add'>+    VALUE dic;</div><div class='add'>+{</div><div class='add'>+    VALUE str;</div><div class='add'>+</div><div class='add'>+    dic = Fdic_to_a(dic);</div><div class='add'>+    str = Fary_to_s(dic);</div><div class='add'>+</div><div class='add'>+    return str;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static</div><div class='add'>+dic_keys(key, value, ary)</div><div class='add'>+    VALUE key, value, ary;</div><div class='add'>+{</div><div class='add'>+    Fary_push(ary, key);</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_keys(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    VALUE ary;</div><div class='add'>+</div><div class='add'>+    ary = ary_new();</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_keys, ary);</div><div class='add'>+</div><div class='add'>+    return ary;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static</div><div class='add'>+dic_values(key, value, ary)</div><div class='add'>+    VALUE key, value, ary;</div><div class='add'>+{</div><div class='add'>+    Fary_push(ary, key);</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_values(dic)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+{</div><div class='add'>+    VALUE ary;</div><div class='add'>+</div><div class='add'>+    ary = ary_new();</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_values, ary);</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'>+Fdic_has_key(dic, key)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+    VALUE key;</div><div class='add'>+{</div><div class='add'>+    VALUE val;</div><div class='add'>+</div><div class='add'>+    if (st_lookup(dic-&gt;tbl, key, &amp;val))</div><div class='add'>+	return TRUE;</div><div class='add'>+    return FALSE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE value_found;</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+dic_search_value(key, value, arg)</div><div class='add'>+    VALUE key, value, arg;</div><div class='add'>+{</div><div class='add'>+    if (rb_funcall(value, eq, 1, arg)) {</div><div class='add'>+	value_found = TRUE;</div><div class='add'>+	return ST_STOP;</div><div class='add'>+    }</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_has_value(dic, val)</div><div class='add'>+    struct RDict *dic;</div><div class='add'>+    VALUE val;</div><div class='add'>+{</div><div class='add'>+    value_found = FALSE;</div><div class='add'>+    st_foreach(dic-&gt;tbl, dic_search_value, val);</div><div class='add'>+    return value_found;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+struct equal_data {</div><div class='add'>+    int result;</div><div class='add'>+    st_table *tbl;</div><div class='add'>+};</div><div class='add'>+</div><div class='add'>+static int</div><div class='add'>+dic_equal(key, val1, data)</div><div class='add'>+    VALUE key, val1;</div><div class='add'>+    struct equal_data *data;</div><div class='add'>+{</div><div class='add'>+    VALUE val2;</div><div class='add'>+</div><div class='add'>+    if (!st_lookup(data-&gt;tbl, key, &amp;val2)) {</div><div class='add'>+	data-&gt;result = FALSE;</div><div class='add'>+	return ST_STOP;</div><div class='add'>+    }</div><div class='add'>+    if (!rb_funcall(val1, eq, 1, val2)) {</div><div class='add'>+	data-&gt;result = FALSE;</div><div class='add'>+	return ST_STOP;</div><div class='add'>+    }</div><div class='add'>+    return ST_CONTINUE;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fdic_equal(dic1, dic2)</div><div class='add'>+    struct RDict *dic1, *dic2;</div><div class='add'>+{</div><div class='add'>+    struct equal_data data;</div><div class='add'>+</div><div class='add'>+    if (TYPE(dic2) != T_DICT) return FALSE;</div><div class='add'>+    if (dic1-&gt;tbl-&gt;num_entries != dic2-&gt;tbl-&gt;num_entries)</div><div class='add'>+	return FALSE;</div><div class='add'>+</div><div class='add'>+    data.tbl = dic2-&gt;tbl;</div><div class='add'>+    data.result = TRUE;</div><div class='add'>+    st_foreach(dic1-&gt;tbl, dic_equal, &amp;data);</div><div class='add'>+</div><div class='add'>+    return data.result;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+char *index();</div><div class='add'>+extern VALUE rb_readonly_hook();</div><div class='add'>+</div><div class='add'>+extern char **environ;</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fenv_each(dic)</div><div class='add'>+    VALUE dic;</div><div class='add'>+{</div><div class='add'>+    char **env;</div><div class='add'>+</div><div class='add'>+    env = environ;</div><div class='add'>+    while (*env) {</div><div class='add'>+	VALUE var, val;</div><div class='add'>+	char *s = index(*env, '=');</div><div class='add'>+</div><div class='add'>+	var = str_new(*env, s-*env);</div><div class='add'>+	val = str_new2(s+1);</div><div class='add'>+	rb_yield(assoc_new(var, val));</div><div class='add'>+	env++;</div><div class='add'>+    }</div><div class='add'>+    return dic;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fenv_delete(obj, name)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *name;</div><div class='add'>+{</div><div class='add'>+    int i, len;</div><div class='add'>+    char *nam, *val = Qnil;</div><div class='add'>+</div><div class='add'>+    Check_Type(name, T_STRING);</div><div class='add'>+    nam = name-&gt;ptr;</div><div class='add'>+    len = strlen(nam);</div><div class='add'>+    for(i=0; environ[i]; i++) {</div><div class='add'>+	if (strncmp(environ[i], nam, len) == 0 &amp;&amp; environ[i][len] == '=') {</div><div class='add'>+	    val = environ[i]+len+1;</div><div class='add'>+	    break;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    while (environ[i]) {</div><div class='add'>+	environ[i] = environ[i+1];</div><div class='add'>+	i++;</div><div class='add'>+    }</div><div class='add'>+    if (val) {</div><div class='add'>+	return str_new2(val);</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'>+Fgetenv(obj, name)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *name;</div><div class='add'>+{</div><div class='add'>+    extern char *getenv();</div><div class='add'>+    char *env;</div><div class='add'>+</div><div class='add'>+    Check_Type(name, T_STRING);</div><div class='add'>+</div><div class='add'>+    if (strlen(name-&gt;ptr) != name-&gt;len)</div><div class='add'>+	Fail("Bad environment name");</div><div class='add'>+</div><div class='add'>+    env = getenv(name-&gt;ptr);</div><div class='add'>+    if (env) {</div><div class='add'>+	return str_new2(env);</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'>+Fsetenv(obj, name, value)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *name, *value;</div><div class='add'>+{</div><div class='add'>+    Check_Type(name, T_STRING);</div><div class='add'>+    if (value == Qnil) {</div><div class='add'>+	Fenv_delete(obj, name);</div><div class='add'>+	return Qnil;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    Check_Type(value, T_STRING);</div><div class='add'>+</div><div class='add'>+    if (strlen(name-&gt;ptr) != name-&gt;len)</div><div class='add'>+	Fail("Bad environment name");</div><div class='add'>+    if (strlen(value-&gt;ptr) != value-&gt;len)</div><div class='add'>+	Fail("Bad environment value");</div><div class='add'>+</div><div class='add'>+#ifdef HAVE_SETENV</div><div class='add'>+    if (setenv(name-&gt;ptr, value-&gt;ptr, 1) == 0) return TRUE;</div><div class='add'>+#else</div><div class='add'>+#ifdef HAVE_PUTENV</div><div class='add'>+    {</div><div class='add'>+	char *str;</div><div class='add'>+	int len;</div><div class='add'>+</div><div class='add'>+	str = ALLOC_N(char, name-&gt;len + value-&gt;len + 2);</div><div class='add'>+	sprintf("%s=%s", name-&gt;ptr, value-&gt;ptr);</div><div class='add'>+	if (putenv(str) == 0) return TRUE;</div><div class='add'>+    }</div><div class='add'>+#else</div><div class='add'>+    Fail("setenv is not supported on this system");</div><div class='add'>+#endif</div><div class='add'>+#endif</div><div class='add'>+</div><div class='add'>+    Fail("setenv failed");</div><div class='add'>+    return FALSE;		/* not reached */</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+Init_Dict()</div><div class='add'>+{</div><div class='add'>+    extern VALUE C_Kernel;</div><div class='add'>+    extern VALUE M_Enumerable;</div><div class='add'>+    static VALUE envtbl;</div><div class='add'>+</div><div class='add'>+    hash = rb_intern("hash");</div><div class='add'>+    eq   = rb_intern("==");</div><div class='add'>+</div><div class='add'>+    C_Dict = rb_define_class("Dict", C_Object);</div><div class='add'>+    rb_name_class(C_Dict, rb_intern("Hash")); /* alias */</div><div class='add'>+</div><div class='add'>+    rb_include_module(C_Dict, M_Enumerable);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_Dict, "new", Fdic_new, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Dict,"clone",  Fdic_clone, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Dict,"to_a",  Fdic_to_a, 0);</div><div class='add'>+    rb_define_method(C_Dict,"to_s",  Fdic_to_s, 0);</div><div class='add'>+    rb_define_method(C_Dict,"_inspect",  Fdic_inspect, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Dict,"==",  Fdic_equal, 1);</div><div class='add'>+    rb_define_method(C_Dict,"[]",  Fdic_aref, 1);</div><div class='add'>+    rb_define_method(C_Dict,"[]=", Fdic_aset, 2);</div><div class='add'>+    rb_define_method(C_Dict,"length", Fdic_length, 0);</div><div class='add'>+    rb_define_method(C_Dict,"each", Fdic_each, 0);</div><div class='add'>+    rb_define_method(C_Dict,"each_value", Fdic_each, 0);</div><div class='add'>+    rb_define_method(C_Dict,"each_key", Fdic_each_key, 0);</div><div class='add'>+    rb_define_method(C_Dict,"each_pair", Fdic_each_pair, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Dict,"keys", Fdic_keys, 0);</div><div class='add'>+    rb_define_method(C_Dict,"values", Fdic_values, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Dict,"delete", Fdic_delete, 1);</div><div class='add'>+    rb_define_method(C_Dict,"delete_if", Fdic_delete_if, 0);</div><div class='add'>+    rb_define_method(C_Dict,"clear", Fdic_clear, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Dict,"includes", Fdic_has_key, 1);</div><div class='add'>+    rb_define_method(C_Dict,"has_key", Fdic_has_key, 1);</div><div class='add'>+    rb_define_method(C_Dict,"has_value", Fdic_has_value, 1);</div><div class='add'>+</div><div class='add'>+</div><div class='add'>+    C_EnvDict = rb_define_class("EnvDict", C_Object);</div><div class='add'>+</div><div class='add'>+    rb_include_module(C_EnvDict, M_Enumerable);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_EnvDict,"[]", Fgetenv, 1);</div><div class='add'>+    rb_define_method(C_EnvDict,"[]=", Fsetenv, 2);</div><div class='add'>+    rb_define_method(C_EnvDict,"each", Fenv_each, 0);</div><div class='add'>+    rb_define_method(C_EnvDict,"delete", Fenv_delete, 1);</div><div class='add'>+    envtbl = obj_alloc(C_EnvDict);</div><div class='add'>+    rb_define_variable("$ENV", &amp;envtbl, Qnil, rb_readonly_hook);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_Kernel, "getenv", Fgetenv, 1);</div><div class='add'>+    rb_define_method(C_Kernel, "setenv", Fsetenv, 2);</div><div class='add'>+}</div><div class='head'>diff --git a/dir.c b/dir.c<br/>index c2c3f9452f..87c9bce69a 100644<br/>--- a/<a href='/ruby.git/tree/dir.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dir.c</a><br/>+++ b/<a href='/ruby.git/tree/dir.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>dir.c</a></div><div class='hunk'>@@ -1,2005 +1,254 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   dir.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='ctx'>   created at: Wed Jan  5 09:51:01 JST 1994</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-  Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> </div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='del'>-#include &lt;sys/stat.h&gt;</div><div class='del'>-</div><div class='ctx'> #ifdef HAVE_UNISTD_H</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='del'>-#if defined HAVE_DIRENT_H &amp;&amp; !defined _WIN32</div><div class='del'>-# include &lt;dirent.h&gt;</div><div class='del'>-# define NAMLEN(dirent) strlen((dirent)-&gt;d_name)</div><div class='del'>-#elif defined HAVE_DIRECT_H &amp;&amp; !defined _WIN32</div><div class='del'>-# include &lt;direct.h&gt;</div><div class='del'>-# define NAMLEN(dirent) strlen((dirent)-&gt;d_name)</div><div class='del'>-#else</div><div class='del'>-# 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='del'>-# if HAVE_SYS_NDIR_H</div><div class='del'>-#  include &lt;sys/ndir.h&gt;</div><div class='del'>-# endif</div><div class='del'>-# if HAVE_SYS_DIR_H</div><div class='del'>-#  include &lt;sys/dir.h&gt;</div><div class='del'>-# endif</div><div class='del'>-# if HAVE_NDIR_H</div><div class='del'>-#  include &lt;ndir.h&gt;</div><div class='del'>-# endif</div><div class='del'>-# ifdef _WIN32</div><div class='del'>-#  include "win32/dir.h"</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_STDLIB_H</div><div class='del'>-char *getenv();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_STRING_H</div><div class='del'>-char *strchr _((char*,char));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-</div><div class='del'>-#include "util.h"</div><div class='del'>-</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='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define FNM_NOESCAPE	0x01</div><div class='del'>-#define FNM_PATHNAME	0x02</div><div class='del'>-#define FNM_DOTMATCH	0x04</div><div class='del'>-#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='del'>-</div><div class='del'>-#define FNM_NOMATCH	1</div><div class='del'>-#define FNM_ERROR	2</div><div class='del'>-</div><div class='del'>-#define downcase(c) (nocase &amp;&amp; ISUPPER(c) ? tolower(c) : (c))</div><div class='del'>-#define compare(c1, c2) (((unsigned char)(c1)) - ((unsigned char)(c2)))</div><div class='del'>-</div><div class='del'>-/* caution: in case *p == '\0'</div><div class='del'>-   Next(p) == p + 1 in single byte environment</div><div class='del'>-   Next(p) == p     in multi byte environment</div><div class='del'>-*/</div><div class='del'>-#if defined(CharNext)</div><div class='del'>-# define Next(p) CharNext(p)</div><div class='del'>-#elif defined(DJGPP)</div><div class='del'>-# define Next(p) ((p) + mblen(p, RUBY_MBCHAR_MAXSIZE))</div><div class='del'>-#elif defined(__EMX__)</div><div class='del'>-# define Next(p) ((p) + emx_mblen(p))</div><div class='del'>-static inline int</div><div class='del'>-emx_mblen(const char *p)</div><div class='del'>-{</div><div class='del'>-    int n = mblen(p, RUBY_MBCHAR_MAXSIZE);</div><div class='del'>-    return (n &lt; 0) ? 1 : n;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef Next /* single byte environment */</div><div class='del'>-# define Next(p) ((p) + 1)</div><div class='del'>-# define Inc(p) (++(p))</div><div class='del'>-# define Compare(p1, p2) (compare(downcase(*(p1)), downcase(*(p2))))</div><div class='del'>-#else /* multi byte environment */</div><div class='del'>-# define Inc(p) ((p) = Next(p))</div><div class='del'>-# define Compare(p1, p2) (CompareImpl(p1, p2, nocase))</div><div class='del'>-static int</div><div class='del'>-CompareImpl(const char *p1, const char *p2, int nocase)</div><div class='del'>-{</div><div class='del'>-    const int len1 = Next(p1) - p1;</div><div class='del'>-    const int len2 = Next(p2) - p2;</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-    char buf1[10], buf2[10]; /* large enough? */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (len1 &lt; 0 || len2 &lt; 0) {</div><div class='del'>-	rb_fatal("CompareImpl: negative len");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (len1 == 0) return  len2;</div><div class='del'>-    if (len2 == 0) return -len1;</div><div class='del'>-</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-    if (nocase &amp;&amp; rb_w32_iswinnt()) {</div><div class='del'>-	if (len1 &gt; 1) {</div><div class='del'>-	    if (len1 &gt;= sizeof(buf1)) {</div><div class='del'>-		rb_fatal("CompareImpl: too large len");</div><div class='del'>-	    }</div><div class='del'>-	    memcpy(buf1, p1, len1);</div><div class='del'>-	    buf1[len1] = '\0';</div><div class='del'>-	    CharLower(buf1);</div><div class='del'>-	    p1 = buf1; /* trick */</div><div class='del'>-	}</div><div class='del'>-	if (len2 &gt; 1) {</div><div class='del'>-	    if (len2 &gt;= sizeof(buf2)) {</div><div class='del'>-		rb_fatal("CompareImpl: too large len");</div><div class='del'>-	    }</div><div class='del'>-	    memcpy(buf2, p2, len2);</div><div class='del'>-	    buf2[len2] = '\0';</div><div class='del'>-	    CharLower(buf2);</div><div class='del'>-	    p2 = buf2; /* trick */</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if (len1 == 1)</div><div class='del'>-	if (len2 == 1)</div><div class='del'>-	    return compare(downcase(*p1), downcase(*p2));</div><div class='del'>-	else {</div><div class='del'>-	    const int ret = compare(downcase(*p1), *p2);</div><div class='del'>-	    return ret ? ret : -1;</div><div class='del'>-	}</div><div class='del'>-    else</div><div class='del'>-	if (len2 == 1) {</div><div class='del'>-	    const int ret = compare(*p1, downcase(*p2));</div><div class='del'>-	    return ret ? ret : 1;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    const int ret = memcmp(p1, p2, len1 &lt; len2 ? len1 : len2);</div><div class='del'>-	    return ret ? ret : len1 - len2;</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-#endif /* environment */</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-bracket(p, s, flags)</div><div class='del'>-    const char *p; /* pattern (next to '[') */</div><div class='del'>-    const char *s; /* string */</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    const int nocase = flags &amp; FNM_CASEFOLD;</div><div class='del'>-    const int escape = !(flags &amp; FNM_NOESCAPE);</div><div class='del'>-</div><div class='del'>-    int ok = 0, not = 0;</div><div class='del'>-</div><div class='del'>-    if (*p == '!' || *p == '^') {</div><div class='del'>-	not = 1;</div><div class='del'>-	p++;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while (*p != ']') {</div><div class='del'>-	const char *t1 = p;</div><div class='del'>-	if (escape &amp;&amp; *t1 == '\\')</div><div class='del'>-	    t1++;</div><div class='del'>-	if (!*t1)</div><div class='del'>-	    return NULL;</div><div class='del'>-	p = Next(t1);</div><div class='del'>-	if (p[0] == '-' &amp;&amp; p[1] != ']') {</div><div class='del'>-	    const char *t2 = p + 1;</div><div class='del'>-	    if (escape &amp;&amp; *t2 == '\\')</div><div class='del'>-		t2++;</div><div class='del'>-	    if (!*t2)</div><div class='del'>-		return NULL;</div><div class='del'>-	    p = Next(t2);</div><div class='del'>-	    if (!ok &amp;&amp; Compare(t1, s) &lt;= 0 &amp;&amp; Compare(s, t2) &lt;= 0)</div><div class='del'>-		ok = 1;</div><div class='del'>-	}</div><div class='del'>-	else</div><div class='del'>-	    if (!ok &amp;&amp; Compare(t1, s) == 0)</div><div class='del'>-		ok = 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ok == not ? NULL : (char *)p + 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* If FNM_PATHNAME is set, only path element will be matched. (upto '/' or '\0')</div><div class='del'>-   Otherwise, entire string will be matched.</div><div class='del'>-   End marker itself won't be compared.</div><div class='del'>-   And if function succeeds, *pcur reaches end marker.</div><div class='del'>-*/</div><div class='del'>-#define UNESCAPE(p) (escape &amp;&amp; *(p) == '\\' ? (p) + 1 : (p))</div><div class='del'>-#define ISEND(p) (!*(p) || (pathname &amp;&amp; *(p) == '/'))</div><div class='del'>-#define RETURN(val) return *pcur = p, *scur = s, (val);</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-fnmatch_helper(pcur, scur, flags)</div><div class='del'>-    const char **pcur; /* pattern */</div><div class='del'>-    const char **scur; /* string */</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    const int period = !(flags &amp; FNM_DOTMATCH);</div><div class='del'>-    const int pathname = flags &amp; FNM_PATHNAME;</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='del'>-</div><div class='del'>-    const char *ptmp = 0;</div><div class='del'>-    const char *stmp = 0;</div><div class='del'>-</div><div class='del'>-    const char *p = *pcur;</div><div class='del'>-    const char *s = *scur;</div><div class='del'>-</div><div class='del'>-    if (period &amp;&amp; *s == '.' &amp;&amp; *UNESCAPE(p) != '.') /* leading period */</div><div class='del'>-	RETURN(FNM_NOMATCH);</div><div class='del'>-</div><div class='del'>-    while (1) {</div><div class='del'>-	switch (*p) {</div><div class='del'>-	  case '*':</div><div class='del'>-	    do { p++; } while (*p == '*');</div><div class='del'>-	    if (ISEND(UNESCAPE(p))) {</div><div class='del'>-		p = UNESCAPE(p);</div><div class='del'>-		RETURN(0);</div><div class='del'>-	    }</div><div class='del'>-	    if (ISEND(s))</div><div class='del'>-		RETURN(FNM_NOMATCH);</div><div class='del'>-	    ptmp = p;</div><div class='del'>-	    stmp = s;</div><div class='del'>-	    continue;</div><div class='del'>-</div><div class='del'>-	  case '?':</div><div class='del'>-	    if (ISEND(s))</div><div class='del'>-		RETURN(FNM_NOMATCH);</div><div class='del'>-	    p++;</div><div class='del'>-	    Inc(s);</div><div class='del'>-	    continue;</div><div class='del'>-</div><div class='del'>-	  case '[': {</div><div class='del'>-	    const char *t;</div><div class='del'>-	    if (ISEND(s))</div><div class='del'>-		RETURN(FNM_NOMATCH);</div><div class='del'>-	    if ((t = bracket(p + 1, s, flags)) != 0) {</div><div class='del'>-		p = t;</div><div class='del'>-		Inc(s);</div><div class='del'>-		continue;</div><div class='del'>-	    }</div><div class='del'>-	    goto failed;</div><div class='del'>-	  }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* ordinary */</div><div class='del'>-	p = UNESCAPE(p);</div><div class='del'>-	if (ISEND(s))</div><div class='del'>-	    RETURN(ISEND(p) ? 0 : FNM_NOMATCH);</div><div class='del'>-	if (ISEND(p))</div><div class='del'>-	    goto failed;</div><div class='del'>-	if (Compare(p, s) != 0)</div><div class='del'>-	    goto failed;</div><div class='del'>-	Inc(p);</div><div class='del'>-	Inc(s);</div><div class='del'>-	continue;</div><div class='del'>-</div><div class='del'>-      failed: /* try next '*' position */</div><div class='del'>-	if (ptmp &amp;&amp; stmp) {</div><div class='del'>-	    p = ptmp;</div><div class='del'>-	    Inc(stmp); /* !ISEND(*stmp) */</div><div class='del'>-	    s = stmp;</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	RETURN(FNM_NOMATCH);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-fnmatch(p, s, flags)</div><div class='del'>-    const char *p; /* pattern */</div><div class='del'>-    const char *s; /* string */</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    const int period = !(flags &amp; FNM_DOTMATCH);</div><div class='del'>-    const int pathname = flags &amp; FNM_PATHNAME;</div><div class='del'>-</div><div class='del'>-    const char *ptmp = 0;</div><div class='del'>-    const char *stmp = 0;</div><div class='del'>-</div><div class='del'>-    if (pathname) {</div><div class='del'>-	while (1) {</div><div class='del'>-	    if (p[0] == '*' &amp;&amp; p[1] == '*' &amp;&amp; p[2] == '/') {</div><div class='del'>-		do { p += 3; } while (p[0] == '*' &amp;&amp; p[1] == '*' &amp;&amp; p[2] == '/');</div><div class='del'>-		ptmp = p;</div><div class='del'>-		stmp = s;</div><div class='del'>-	    }</div><div class='del'>-	    if (fnmatch_helper(&amp;p, &amp;s, flags) == 0) {</div><div class='del'>-		while (*s &amp;&amp; *s != '/') Inc(s);</div><div class='del'>-		if (*p &amp;&amp; *s) {</div><div class='del'>-		    p++;</div><div class='del'>-		    s++;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-		if (!*p &amp;&amp; !*s)</div><div class='del'>-		    return 0;</div><div class='del'>-	    }</div><div class='del'>-	    /* failed : try next recursion */</div><div class='del'>-	    if (ptmp &amp;&amp; stmp &amp;&amp; !(period &amp;&amp; *stmp == '.')) {</div><div class='del'>-		while (*stmp &amp;&amp; *stmp != '/') Inc(stmp);</div><div class='del'>-		if (*stmp) {</div><div class='del'>-		    p = ptmp;</div><div class='del'>-		    stmp++;</div><div class='del'>-		    s = stmp;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    return FNM_NOMATCH;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-	return fnmatch_helper(&amp;p, &amp;s, flags);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE rb_cDir;</div><div class='del'>-</div><div class='del'>-struct dir_data {</div><div class='del'>-    DIR *dir;</div><div class='del'>-    char *path;</div><div class='del'>-};</div><div class='add'>+#include &lt;sys/param.h&gt;</div><div class='add'>+</div><div class='add'>+/* unistd.h defines _POSIX_VERSION on POSIX.1 systems.  */</div><div class='add'>+#if defined(DIRENT) || defined(_POSIX_VERSION)</div><div class='add'>+#include &lt;dirent.h&gt;</div><div class='add'>+#define NLENGTH(dirent) (strlen((dirent)-&gt;d_name))</div><div class='add'>+#else /* not (DIRENT or _POSIX_VERSION) */</div><div class='add'>+#define dirent direct</div><div class='add'>+#define NLENGTH(dirent) ((dirent)-&gt;d_namlen)</div><div class='add'>+#ifdef SYSNDIR</div><div class='add'>+#include &lt;sys/ndir.h&gt;</div><div class='add'>+#endif /* SYSNDIR */</div><div class='add'>+#ifdef SYSDIR</div><div class='add'>+#include &lt;sys/dir.h&gt;</div><div class='add'>+#endif /* SYSDIR */</div><div class='add'>+#ifdef NDIR</div><div class='add'>+#include &lt;ndir.h&gt;</div><div class='add'>+#endif /* NDIR */</div><div class='add'>+#endif /* not (DIRENT or _POSIX_VERSION) */</div><div class='add'>+</div><div class='add'>+static VALUE C_Dir;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> free_dir(dir)</div><div class='del'>-    struct dir_data *dir;</div><div class='add'>+    DIR **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) closedir(*dir);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE dir_close _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE dir_s_alloc _((VALUE));</div><div class='ctx'> static VALUE</div><div class='del'>-dir_s_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='add'>+Fdir_open(dir_class, dirname)</div><div class='add'>+    VALUE dir_class;</div><div class='add'>+    struct RString *dirname;</div><div class='ctx'> {</div><div class='del'>-    struct dir_data *dirp;</div><div class='del'>-    VALUE obj = Data_Make_Struct(klass, struct dir_data, 0, free_dir, dirp);</div><div class='del'>-</div><div class='del'>-    dirp-&gt;dir = NULL;</div><div class='del'>-    dirp-&gt;path = 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'>- *  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='del'>-static VALUE</div><div class='del'>-dir_initialize(dir, dirname)</div><div class='del'>-    VALUE dir, dirname;</div><div class='del'>-{</div><div class='del'>-    struct dir_data *dp;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(dirname);</div><div class='del'>-    Data_Get_Struct(dir, struct dir_data, dp);</div><div class='del'>-    if (dp-&gt;dir) closedir(dp-&gt;dir);</div><div class='del'>-    if (dp-&gt;path) free(dp-&gt;path);</div><div class='del'>-    dp-&gt;dir = NULL;</div><div class='del'>-    dp-&gt;path = NULL;</div><div class='del'>-    dp-&gt;dir = opendir(RSTRING(dirname)-&gt;ptr);</div><div class='del'>-    if (dp-&gt;dir == NULL) {</div><div class='del'>-	if (errno == EMFILE || errno == ENFILE) {</div><div class='del'>-	    rb_gc();</div><div class='del'>-	    dp-&gt;dir = opendir(RSTRING(dirname)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-	if (dp-&gt;dir == NULL) {</div><div class='del'>-	    rb_sys_fail(RSTRING(dirname)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    dp-&gt;path = strdup(RSTRING(dirname)-&gt;ptr);</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'>- *  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='del'>-static VALUE</div><div class='del'>-dir_s_open(klass, dirname)</div><div class='del'>-    VALUE klass, dirname;</div><div class='del'>-{</div><div class='del'>-    struct dir_data *dp;</div><div class='del'>-    VALUE dir = Data_Make_Struct(klass, struct dir_data, 0, free_dir, dp);</div><div class='add'>+    VALUE obj;</div><div class='add'>+    DIR *dirp, **d;</div><div class='ctx'> </div><div class='del'>-    dir_initialize(dir, dirname);</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	return rb_ensure(rb_yield, dir, dir_close, dir);</div><div class='del'>-    }</div><div class='add'>+    Check_Type(dirname, T_STRING);</div><div class='add'>+    </div><div class='add'>+    dirp = opendir(dirname-&gt;ptr);</div><div class='add'>+    if (dirp == NULL) Fail("Can't open directory %s", dirname-&gt;ptr);</div><div class='ctx'> </div><div class='del'>-    return dir;</div><div class='del'>-}</div><div class='add'>+    obj = obj_alloc(dir_class);</div><div class='add'>+    Make_Data_Struct(obj, "dir", DIR*, Qnil, free_dir, d);</div><div class='add'>+    *d = dirp;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-dir_closed()</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eIOError, "closed directory");</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> 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='del'>-#define GetDIR(obj, dirp) do {\</div><div class='del'>-    dir_check(dir);\</div><div class='del'>-    Data_Get_Struct(obj, struct dir_data, dirp);\</div><div class='del'>-    if (dirp-&gt;dir == NULL) dir_closed();\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dir.inspect =&gt; string</div><div class='del'>- *</div><div class='del'>- *  Return a string describing this Dir object.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-dir_inspect(dir)</div><div class='del'>-    VALUE dir;</div><div class='add'>+closeddir()</div><div class='ctx'> {</div><div class='del'>-    struct dir_data *dirp;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(dir, struct dir_data, dirp);</div><div class='del'>-    if (dirp-&gt;path) {</div><div class='del'>-	const char *c = rb_obj_classname(dir);</div><div class='del'>-	int len = strlen(c) + strlen(dirp-&gt;path) + 4;</div><div class='del'>-	VALUE s = rb_str_new(0, len);</div><div class='del'>-	snprintf(RSTRING_PTR(s), len+1, "#&lt;%s:%s&gt;", c, dirp-&gt;path);</div><div class='del'>-	return s;</div><div class='del'>-    }</div><div class='del'>-    return rb_funcall(dir, rb_intern("to_s"), 0, 0);</div><div class='add'>+    Fail("closed directory");</div><div class='ctx'> }</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='del'>-static VALUE</div><div class='del'>-dir_path(dir)</div><div class='del'>-    VALUE dir;</div><div class='del'>-{</div><div class='del'>-    struct dir_data *dirp;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(dir, struct dir_data, dirp);</div><div class='del'>-    if (!dirp-&gt;path) return Qnil;</div><div class='del'>-    return rb_str_new2(dirp-&gt;path);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-dir_read(dir)</div><div class='del'>-    VALUE dir;</div><div class='del'>-{</div><div class='del'>-    struct dir_data *dirp;</div><div class='del'>-    struct dirent *dp;</div><div class='del'>-</div><div class='del'>-    GetDIR(dir, dirp);</div><div class='del'>-    errno = 0;</div><div class='del'>-    dp = readdir(dirp-&gt;dir);</div><div class='del'>-    if (dp) {</div><div class='del'>-	return rb_tainted_str_new(dp-&gt;d_name, NAMLEN(dp));</div><div class='del'>-    }</div><div class='del'>-    else if (errno == 0) {	/* end of stream */</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_sys_fail(0);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='add'>+#define GetDIR(obj, dirp) {\</div><div class='add'>+    DIR **_dp;\</div><div class='add'>+    Get_Data_Struct(obj, "dir", DIR*, _dp);\</div><div class='add'>+    dirp = *_dp;\</div><div class='add'>+    if (dirp == NULL) closeddir();\</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='del'>-dir_each(dir)</div><div class='add'>+Fdir_each(dir)</div><div class='ctx'>     VALUE dir;</div><div class='ctx'> {</div><div class='del'>-    struct dir_data *dirp;</div><div class='add'>+    extern VALUE rb_lastline;</div><div class='add'>+    DIR *dirp;</div><div class='ctx'>     struct dirent *dp;</div><div class='ctx'> </div><div class='del'>-    RETURN_ENUMERATOR(dir, 0, 0);</div><div class='ctx'>     GetDIR(dir, dirp);</div><div class='del'>-    rewinddir(dirp-&gt;dir);</div><div class='del'>-    for (dp = readdir(dirp-&gt;dir); dp != NULL; dp = readdir(dirp-&gt;dir)) {</div><div class='del'>-	rb_yield(rb_tainted_str_new(dp-&gt;d_name, NAMLEN(dp)));</div><div class='del'>-	if (dirp-&gt;dir == NULL) dir_closed();</div><div class='add'>+    for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {</div><div class='add'>+	rb_lastline = str_new(dp-&gt;d_name, NLENGTH(dp));</div><div class='add'>+	rb_yield(rb_lastline);</div><div class='ctx'>     }</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='del'>-dir_tell(dir)</div><div class='add'>+Fdir_tell(dir)</div><div class='ctx'>     VALUE dir;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_TELLDIR</div><div class='del'>-    struct dir_data *dirp;</div><div class='del'>-    long pos;</div><div class='add'>+    DIR *dirp;</div><div class='add'>+    int pos;</div><div class='ctx'> </div><div class='ctx'>     GetDIR(dir, dirp);</div><div class='del'>-    pos = telldir(dirp-&gt;dir);</div><div class='del'>-    return rb_int2inum(pos);</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='add'>+    pos = telldir(dirp);</div><div class='add'>+    return int2inum(pos);</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='del'>-dir_seek(dir, pos)</div><div class='add'>+Fdir_seek(dir, pos)</div><div class='ctx'>     VALUE dir, pos;</div><div class='ctx'> {</div><div class='del'>-    struct dir_data *dirp;</div><div class='del'>-    off_t p = NUM2OFFT(pos);</div><div class='add'>+    DIR *dirp;</div><div class='ctx'> </div><div class='ctx'>     GetDIR(dir, dirp);</div><div class='del'>-#ifdef HAVE_SEEKDIR</div><div class='del'>-    seekdir(dirp-&gt;dir, p);</div><div class='add'>+    seekdir(dirp, NUM2INT(pos));</div><div class='ctx'>     return dir;</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'>-/*</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='del'>-static VALUE</div><div class='del'>-dir_set_pos(dir, pos)</div><div class='del'>-    VALUE dir, pos;</div><div class='del'>-{</div><div class='del'>-    dir_seek(dir, pos);</div><div class='del'>-    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='del'>-dir_rewind(dir)</div><div class='add'>+Fdir_rewind(dir)</div><div class='ctx'>     VALUE dir;</div><div class='ctx'> {</div><div class='del'>-    struct dir_data *dirp;</div><div class='add'>+    DIR *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='del'>-    rewinddir(dirp-&gt;dir);</div><div class='add'>+    rewinddir(dirp);</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='del'>-dir_close(dir)</div><div class='add'>+Fdir_close(dir)</div><div class='ctx'>     VALUE dir;</div><div class='ctx'> {</div><div class='del'>-    struct dir_data *dirp;</div><div class='add'>+    DIR **dirpp;</div><div class='ctx'> </div><div class='del'>-    GetDIR(dir, dirp);</div><div class='del'>-    closedir(dirp-&gt;dir);</div><div class='del'>-    dirp-&gt;dir = NULL;</div><div class='add'>+    Get_Data_Struct(dir, "dir", DIR*, dirpp);</div><div class='add'>+    if (*dirpp == NULL) Fail("already closed directory");</div><div class='add'>+    closedir(*dirpp);</div><div class='add'>+    *dirpp = NULL;</div><div class='ctx'> </div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-dir_chdir(path)</div><div class='del'>-    VALUE path;</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-static int chdir_blocking = 0;</div><div class='del'>-static VALUE chdir_thread = Qnil;</div><div class='del'>-</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='del'>-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='del'>-{</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='del'>-    return Qnil;</div><div class='del'>-}</div><div class='add'>+char *getenv();</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='del'>-dir_s_chdir(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='add'>+Fdir_chdir(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='del'>-    VALUE path = Qnil;</div><div class='add'>+    VALUE path;</div><div class='add'>+    char *dist = "";</div><div class='ctx'> </div><div class='del'>-    rb_secure(2);</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;path) == 1) {</div><div class='del'>-	SafeStringValue(path);</div><div class='add'>+    rb_scan_args(args, "01", args, &amp;path);</div><div class='add'>+    if (path) {</div><div class='add'>+	Check_Type(path, T_STRING);</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='del'>-	    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='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (chdir_blocking &gt; 0) {</div><div class='del'>-	if (!rb_block_given_p() || rb_thread_current() != chdir_thread)</div><div class='del'>-	    rb_warn("conflicting chdir during another chdir block");</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	struct chdir_data args;</div><div class='del'>-	char *cwd = my_getcwd();</div><div class='add'>+    if (chdir(dist) &lt; 0)</div><div class='add'>+	rb_sys_fail(Qnil);</div><div class='ctx'> </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='del'>-    }</div><div class='del'>-    dir_chdir(path);</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='add'>+    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.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='del'>-dir_s_getwd(dir)</div><div class='add'>+Fdir_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='add'>+    extern char *getwd();</div><div class='add'>+    char path[MAXPATHLEN];</div><div class='ctx'> </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'>+    if (getwd(path) == 0) Fail(path);</div><div class='ctx'> </div><div class='del'>-    free(path);</div><div class='del'>-    return cwd;</div><div class='add'>+    return str_new2(path);</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='del'>-dir_s_chroot(dir, path)</div><div class='add'>+Fdir_chroot(dir, path)</div><div class='ctx'>     VALUE dir, path;</div><div class='ctx'> {</div><div class='del'>-#if defined(HAVE_CHROOT) &amp;&amp; !defined(__CHECKER__)</div><div class='del'>-    check_dirname(&amp;path);</div><div class='add'>+    Check_Type(path, T_STRING);</div><div class='ctx'> </div><div class='ctx'>     if (chroot(RSTRING(path)-&gt;ptr) == -1)</div><div class='del'>-	rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='add'>+	rb_sys_fail(Qnil);</div><div class='ctx'> </div><div class='del'>-    return INT2FIX(0);</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='add'>+    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.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='del'>-dir_s_mkdir(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='add'>+Fdir_mkdir(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='ctx'>     VALUE path, vmode;</div><div class='ctx'>     int mode;</div><div class='ctx'> </div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;path, &amp;vmode) == 2) {</div><div class='add'>+    if (rb_scan_args(args, "11", &amp;path, &amp;vmode) == 2) {</div><div class='ctx'> 	mode = NUM2INT(vmode);</div><div class='ctx'>     }</div><div class='ctx'>     else {</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'>+    Check_Type(path, T_STRING);</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='ctx'> </div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-dir_s_rmdir(obj, dir)</div><div class='del'>-    VALUE obj, dir;</div><div class='del'>-{</div><div class='del'>-    check_dirname(&amp;dir);</div><div class='del'>-    if (rmdir(RSTRING(dir)-&gt;ptr) &lt; 0)</div><div class='del'>-	rb_sys_fail(RSTRING(dir)-&gt;ptr);</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</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	(1UL &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_JUMP_TAG(status) ((status == -1) ? rb_memerror() : rb_jump_tag(status))</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ENOTDIR can be returned by stat(2) if a non-leaf element of the path</div><div class='del'>- * is not a directory.</div><div class='del'>- */</div><div class='del'>-#define to_be_ignored(e) ((e) == ENOENT || (e) == ENOTDIR)</div><div class='del'>-</div><div class='del'>-/* System call with warning */</div><div class='del'>-static int</div><div class='del'>-do_stat(const char *path, struct stat *pst, int flags)</div><div class='del'>-</div><div class='del'>-{</div><div class='del'>-    int ret = stat(path, pst);</div><div class='del'>-    if (ret &lt; 0 &amp;&amp; !to_be_ignored(errno))</div><div class='del'>-	sys_warning(path);</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'>-do_lstat(const char *path, struct stat *pst, int flags)</div><div class='del'>-{</div><div class='del'>-    int ret = lstat(path, pst);</div><div class='del'>-    if (ret &lt; 0 &amp;&amp; !to_be_ignored(errno))</div><div class='del'>-	sys_warning(path);</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static DIR *</div><div class='del'>-do_opendir(const char *path, int flags)</div><div class='del'>-{</div><div class='del'>-    DIR *dirp = opendir(path);</div><div class='del'>-    if (dirp == NULL &amp;&amp; !to_be_ignored(errno))</div><div class='del'>-	sys_warning(path);</div><div class='del'>-</div><div class='del'>-    return dirp;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Return nonzero if S has any special globbing chars in it.  */</div><div class='del'>-static int</div><div class='del'>-has_magic(s, flags)</div><div class='del'>-    const char *s;</div><div class='del'>-    int flags;</div><div class='del'>-{</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='del'>-</div><div class='del'>-    register const char *p = s;</div><div class='del'>-    register char c;</div><div class='del'>-</div><div class='del'>-    while ((c = *p++) != 0) {</div><div class='del'>-	switch (c) {</div><div class='del'>-	  case '*':</div><div class='del'>-	  case '?':</div><div class='del'>-	  case '[':</div><div class='del'>-	    return 1;</div><div class='del'>-</div><div class='del'>-	  case '\\':</div><div class='del'>-	    if (escape &amp;&amp; !(c = *p++))</div><div class='del'>-		return 0;</div><div class='del'>-	    continue;</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 1;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	p = Next(p-1);</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'>-/* Find separator in globbing pattern. */</div><div class='del'>-static char *</div><div class='del'>-find_dirsep(const char *s, int flags)</div><div class='del'>-{</div><div class='del'>-    const int escape = !(flags &amp; FNM_NOESCAPE);</div><div class='del'>-</div><div class='del'>-    register const char *p = s;</div><div class='del'>-    register char c;</div><div class='del'>-    int open = 0;</div><div class='del'>-</div><div class='del'>-    while ((c = *p++) != 0) {</div><div class='del'>-	switch (c) {</div><div class='del'>-	  case '[':</div><div class='del'>-	    open = 1;</div><div class='del'>-	    continue;</div><div class='del'>-	  case ']':</div><div class='del'>-	    open = 0;</div><div class='del'>-	    continue;</div><div class='del'>-</div><div class='del'>-	  case '/':</div><div class='del'>-	    if (!open)</div><div class='del'>-		return (char *)p-1;</div><div class='del'>-	    continue;</div><div class='del'>-</div><div class='del'>-	  case '\\':</div><div class='del'>-	    if (escape &amp;&amp; !(c = *p++))</div><div class='del'>-		return (char *)p-1;</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	p = Next(p-1);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return (char *)p-1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Remove escaping backslashes */</div><div class='del'>-static void</div><div class='del'>-remove_backslashes(p)</div><div class='del'>-    char *p;</div><div class='del'>-{</div><div class='del'>-    char *t = p;</div><div class='del'>-    char *s = p;</div><div class='del'>-</div><div class='del'>-    while (*p) {</div><div class='del'>-	if (*p == '\\') {</div><div class='del'>-	    if (t != s)</div><div class='del'>-		memmove(t, s, p - s);</div><div class='del'>-	    t += p - s;</div><div class='del'>-	    s = ++p;</div><div class='del'>-	    if (!*p) break;</div><div class='del'>-	}</div><div class='del'>-	Inc(p);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while (*p++);</div><div class='del'>-</div><div class='del'>-    if (t != s)</div><div class='del'>-	memmove(t, s, p - s); /* move '\0' too */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Globing pattern */</div><div class='del'>-enum glob_pattern_type { PLAIN, MAGICAL, RECURSIVE, MATCH_ALL, MATCH_DIR };</div><div class='del'>-</div><div class='del'>-struct glob_pattern {</div><div class='del'>-    char *str;</div><div class='del'>-    enum glob_pattern_type type;</div><div class='del'>-    struct glob_pattern *next;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void glob_free_pattern(struct glob_pattern *list);</div><div class='del'>-</div><div class='del'>-static struct glob_pattern *</div><div class='del'>-glob_make_pattern(const char *p, int flags)</div><div class='del'>-{</div><div class='del'>-    struct glob_pattern *list, *tmp, **tail = &amp;list;</div><div class='del'>-    int dirsep = 0; /* pattern is terminated with '/' */</div><div class='del'>-</div><div class='del'>-    while (*p) {</div><div class='del'>-	tmp = GLOB_ALLOC(struct glob_pattern);</div><div class='del'>-	if (!tmp) goto error;</div><div class='del'>-	if (p[0] == '*' &amp;&amp; p[1] == '*' &amp;&amp; p[2] == '/') {</div><div class='del'>-	    /* fold continuous RECURSIVEs (needed in glob_helper) */</div><div class='del'>-	    do { p += 3; } while (p[0] == '*' &amp;&amp; p[1] == '*' &amp;&amp; p[2] == '/');</div><div class='del'>-	    tmp-&gt;type = RECURSIVE;</div><div class='del'>-	    tmp-&gt;str = 0;</div><div class='del'>-	    dirsep = 1;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    const char *m = find_dirsep(p, flags);</div><div class='del'>-	    char *buf = GLOB_ALLOC_N(char, m-p+1);</div><div class='del'>-	    if (!buf) {</div><div class='del'>-		free(tmp);</div><div class='del'>-		goto error;</div><div class='del'>-	    }</div><div class='del'>-	    memcpy(buf, p, m-p);</div><div class='del'>-	    buf[m-p] = '\0';</div><div class='del'>-	    tmp-&gt;type = has_magic(buf, flags) ? MAGICAL : PLAIN;</div><div class='del'>-	    tmp-&gt;str = buf;</div><div class='del'>-	    if (*m) {</div><div class='del'>-		dirsep = 1;</div><div class='del'>-		p = m + 1;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		dirsep = 0;</div><div class='del'>-		p = m;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	*tail = tmp;</div><div class='del'>-	tail = &amp;tmp-&gt;next;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    tmp = GLOB_ALLOC(struct glob_pattern);</div><div class='del'>-    if (!tmp) {</div><div class='del'>-      error:</div><div class='del'>-	*tail = 0;</div><div class='del'>-	glob_free_pattern(list);</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-    tmp-&gt;type = dirsep ? MATCH_DIR : MATCH_ALL;</div><div class='del'>-    tmp-&gt;str = 0;</div><div class='del'>-    *tail = tmp;</div><div class='del'>-    tmp-&gt;next = 0;</div><div class='del'>-</div><div class='del'>-    return list;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-glob_free_pattern(struct glob_pattern *list)</div><div class='del'>-{</div><div class='del'>-    while (list) {</div><div class='del'>-	struct glob_pattern *tmp = list;</div><div class='del'>-	list = list-&gt;next;</div><div class='del'>-	if (tmp-&gt;str)</div><div class='del'>-	    free(tmp-&gt;str);</div><div class='del'>-	free(tmp);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-join_path(const char *path, int dirsep, const char *name)</div><div class='del'>-{</div><div class='del'>-    long len = strlen(path);</div><div class='del'>-    char *buf = GLOB_ALLOC_N(char, len+strlen(name)+(dirsep?1:0)+1);</div><div class='del'>-</div><div class='del'>-    if (!buf) return 0;</div><div class='del'>-    memcpy(buf, path, len);</div><div class='del'>-    if (dirsep) {</div><div class='del'>-	strcpy(buf+len, "/");</div><div class='del'>-	len++;</div><div class='del'>-    }</div><div class='del'>-    strcpy(buf+len, name);</div><div class='del'>-    return buf;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-enum answer { YES, NO, UNKNOWN };</div><div class='del'>-</div><div class='del'>-#ifndef S_ISLNK</div><div class='del'>-#  ifndef S_IFLNK</div><div class='del'>-#    define S_ISLNK(m) (0)</div><div class='del'>-#  else</div><div class='del'>-#    define S_ISLNK(m) ((m &amp; S_IFMT) == S_IFLNK)</div><div class='del'>-#  endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef S_ISDIR</div><div class='del'>-#   define S_ISDIR(m) ((m &amp; S_IFMT) == S_IFDIR)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-struct glob_args {</div><div class='del'>-    void (*func) _((const char*, VALUE));</div><div class='del'>-    const char *c;</div><div class='del'>-    VALUE v;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE glob_func_caller _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-glob_func_caller(val)</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    struct glob_args *args = (struct glob_args *)val;</div><div class='del'>-</div><div class='del'>-    (*args-&gt;func)(args-&gt;c, args-&gt;v);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define glob_call_func(func, path, arg) (*func)(path, arg)</div><div class='del'>-</div><div class='del'>-static int glob_helper _((const char *, int, enum answer, enum answer, struct glob_pattern **, struct glob_pattern **, int, ruby_glob_func *, VALUE));</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-glob_helper(path, dirsep, exist, isdir, beg, end, flags, func, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    int dirsep; /* '/' should be placed before appending child entry's name to 'path'. */</div><div class='del'>-    enum answer exist; /* Does 'path' indicate an existing entry? */</div><div class='del'>-    enum answer isdir; /* Does 'path' indicate a directory or a symlink to a directory? */</div><div class='del'>-    struct glob_pattern **beg;</div><div class='del'>-    struct glob_pattern **end;</div><div class='del'>-    int flags;</div><div class='del'>-    ruby_glob_func *func;</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct stat st;</div><div class='del'>-    int status = 0;</div><div class='del'>-    struct glob_pattern **cur, **new_beg, **new_end;</div><div class='del'>-    int plain = 0, magical = 0, recursive = 0, match_all = 0, match_dir = 0;</div><div class='del'>-    int escape = !(flags &amp; FNM_NOESCAPE);</div><div class='del'>-</div><div class='del'>-    for (cur = beg; cur &lt; end; ++cur) {</div><div class='del'>-	struct glob_pattern *p = *cur;</div><div class='del'>-	if (p-&gt;type == RECURSIVE) {</div><div class='del'>-	    recursive = 1;</div><div class='del'>-	    p = p-&gt;next;</div><div class='del'>-	}</div><div class='del'>-	switch (p-&gt;type) {</div><div class='del'>-	case PLAIN:</div><div class='del'>-	    plain = 1;</div><div class='del'>-	    break;</div><div class='del'>-	case MAGICAL:</div><div class='del'>-	    magical = 1;</div><div class='del'>-	    break;</div><div class='del'>-	case MATCH_ALL:</div><div class='del'>-	    match_all = 1;</div><div class='del'>-	    break;</div><div class='del'>-	case MATCH_DIR:</div><div class='del'>-	    match_dir = 1;</div><div class='del'>-	    break;</div><div class='del'>-	case RECURSIVE:</div><div class='del'>-	    rb_bug("continuous RECURSIVEs");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (*path) {</div><div class='del'>-	if (match_all &amp;&amp; exist == UNKNOWN) {</div><div class='del'>-	    if (do_lstat(path, &amp;st, flags) == 0) {</div><div class='del'>-		exist = YES;</div><div class='del'>-		isdir = S_ISDIR(st.st_mode) ? YES : S_ISLNK(st.st_mode) ? UNKNOWN : NO;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		exist = NO;</div><div class='del'>-		isdir = NO;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	if (match_dir &amp;&amp; isdir == UNKNOWN) {</div><div class='del'>-	    if (do_stat(path, &amp;st, flags) == 0) {</div><div class='del'>-		exist = YES;</div><div class='del'>-		isdir = S_ISDIR(st.st_mode) ? YES : NO;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		exist = NO;</div><div class='del'>-		isdir = NO;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	if (match_all &amp;&amp; exist == YES) {</div><div class='del'>-	    status = glob_call_func(func, path, arg);</div><div class='del'>-	    if (status) return status;</div><div class='del'>-	}</div><div class='del'>-	if (match_dir &amp;&amp; isdir == YES) {</div><div class='del'>-	    char *tmp = join_path(path, dirsep, "");</div><div class='del'>-	    if (!tmp) return -1;</div><div class='del'>-	    status = glob_call_func(func, tmp, arg);</div><div class='del'>-	    free(tmp);</div><div class='del'>-	    if (status) return status;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (exist == NO || isdir == NO) return 0;</div><div class='del'>-</div><div class='del'>-    if (magical || recursive) {</div><div class='del'>-	struct dirent *dp;</div><div class='del'>-	DIR *dirp = do_opendir(*path ? path : ".", flags);</div><div class='del'>-	if (dirp == NULL) return 0;</div><div class='del'>-</div><div class='del'>-	for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {</div><div class='del'>-	    char *buf = join_path(path, dirsep, dp-&gt;d_name);</div><div class='del'>-	    enum answer new_isdir = UNKNOWN;</div><div class='del'>-</div><div class='del'>-	    if (!buf) {</div><div class='del'>-		status = -1;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	    if (recursive &amp;&amp; strcmp(dp-&gt;d_name, ".") != 0 &amp;&amp; strcmp(dp-&gt;d_name, "..") != 0</div><div class='del'>-		&amp;&amp; fnmatch("*", dp-&gt;d_name, flags) == 0) {</div><div class='del'>-#ifndef _WIN32</div><div class='del'>-		if (do_lstat(buf, &amp;st, flags) == 0)</div><div class='del'>-		    new_isdir = S_ISDIR(st.st_mode) ? YES : S_ISLNK(st.st_mode) ? UNKNOWN : NO;</div><div class='del'>-		else</div><div class='del'>-		    new_isdir = NO;</div><div class='del'>-#else</div><div class='del'>-		new_isdir = dp-&gt;d_isdir ? (!dp-&gt;d_isrep ? YES : UNKNOWN) : NO;</div><div class='del'>-#endif</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, (end - beg) * 2);</div><div class='del'>-	    if (!new_beg) {</div><div class='del'>-		status = -1;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    for (cur = beg; cur &lt; end; ++cur) {</div><div class='del'>-		struct glob_pattern *p = *cur;</div><div class='del'>-		if (p-&gt;type == RECURSIVE) {</div><div class='del'>-		    if (new_isdir == YES) /* not symlink but real directory */</div><div class='del'>-			*new_end++ = p; /* append recursive pattern */</div><div class='del'>-		    p = p-&gt;next; /* 0 times recursion */</div><div class='del'>-		}</div><div class='del'>-		if (p-&gt;type == PLAIN || p-&gt;type == MAGICAL) {</div><div class='del'>-		    if (fnmatch(p-&gt;str, dp-&gt;d_name, flags) == 0)</div><div class='del'>-			*new_end++ = p-&gt;next;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    status = glob_helper(buf, 1, YES, new_isdir, new_beg, new_end, flags, func, arg);</div><div class='del'>-	    free(buf);</div><div class='del'>-	    free(new_beg);</div><div class='del'>-	    if (status) break;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	closedir(dirp);</div><div class='del'>-    }</div><div class='del'>-    else if (plain) {</div><div class='del'>-	struct glob_pattern **copy_beg, **copy_end, **cur2;</div><div class='del'>-</div><div class='del'>-	copy_beg = copy_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);</div><div class='del'>-	if (!copy_beg) return -1;</div><div class='del'>-	for (cur = beg; cur &lt; end; ++cur)</div><div class='del'>-	    *copy_end++ = (*cur)-&gt;type == PLAIN ? *cur : 0;</div><div class='del'>-</div><div class='del'>-	for (cur = copy_beg; cur &lt; copy_end; ++cur) {</div><div class='del'>-	    if (*cur) {</div><div class='del'>-		char *buf;</div><div class='del'>-		char *name;</div><div class='del'>-		name = GLOB_ALLOC_N(char, strlen((*cur)-&gt;str) + 1);</div><div class='del'>-		if (!name) {</div><div class='del'>-		    status = -1;</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-		strcpy(name, (*cur)-&gt;str);</div><div class='del'>-		if (escape) remove_backslashes(name);</div><div class='del'>-</div><div class='del'>-		new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);</div><div class='del'>-		if (!new_beg) {</div><div class='del'>-		    free(name);</div><div class='del'>-		    status = -1;</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-		*new_end++ = (*cur)-&gt;next;</div><div class='del'>-		for (cur2 = cur + 1; cur2 &lt; copy_end; ++cur2) {</div><div class='del'>-		    if (*cur2 &amp;&amp; fnmatch((*cur2)-&gt;str, name, flags) == 0) {</div><div class='del'>-			*new_end++ = (*cur2)-&gt;next;</div><div class='del'>-			*cur2 = 0;</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		buf = join_path(path, dirsep, name);</div><div class='del'>-		free(name);</div><div class='del'>-		if (!buf) {</div><div class='del'>-		    free(new_beg);</div><div class='del'>-		    status = -1;</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-		status = glob_helper(buf, 1, UNKNOWN, UNKNOWN, new_beg, new_end, flags, func, arg);</div><div class='del'>-		free(buf);</div><div class='del'>-		free(new_beg);</div><div class='del'>-		if (status) break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	free(copy_beg);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return status;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ruby_glob0(path, flags, func, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    int flags;</div><div class='del'>-    ruby_glob_func *func;</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct glob_pattern *list;</div><div class='del'>-    const char *root, *start;</div><div class='del'>-    char *buf;</div><div class='del'>-    int n;</div><div class='del'>-    int status;</div><div class='del'>-</div><div class='del'>-    start = root = path;</div><div class='del'>-    flags |= FNM_SYSCASE;</div><div class='del'>-#if defined DOSISH</div><div class='del'>-    root = rb_path_skip_prefix(root);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (root &amp;&amp; *root == '/') root++;</div><div class='del'>-</div><div class='del'>-    n = root - start;</div><div class='del'>-    buf = GLOB_ALLOC_N(char, n + 1);</div><div class='del'>-    if (!buf) return -1;</div><div class='del'>-    MEMCPY(buf, start, char, n);</div><div class='del'>-    buf[n] = '\0';</div><div class='del'>-</div><div class='del'>-    list = glob_make_pattern(root, flags);</div><div class='del'>-    if (!list) {</div><div class='del'>-	free(buf);</div><div class='del'>-	return -1;</div><div class='del'>-    }</div><div class='del'>-    status = glob_helper(buf, 0, UNKNOWN, UNKNOWN, &amp;list, &amp;list + 1, flags, func, arg);</div><div class='del'>-    glob_free_pattern(list);</div><div class='del'>-    free(buf);</div><div class='del'>-</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'>-    ruby_glob_func *func;</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    return ruby_glob0(path, flags &amp; ~GLOB_VERBOSE, 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='del'>-    return status;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_glob2(path, flags, func, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    int flags;</div><div class='del'>-    void (*func) _((const char *, VALUE));</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</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'>-    if (flags &amp; FNM_SYSCASE) {</div><div class='del'>-	rb_warning("Dir.glob() ignores File::FNM_CASEFOLD");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ruby_glob0(path, flags | GLOB_VERBOSE, rb_glob_caller, (VALUE)&amp;args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_glob(path, func, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    void (*func) _((const char*, VALUE));</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    int status = rb_glob2(path, 0, func, arg);</div><div class='del'>-    if (status) GLOB_JUMP_TAG(status);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void push_pattern _((const char* path, VALUE ary));</div><div class='del'>-static void</div><div class='del'>-push_pattern(path, ary)</div><div class='del'>-    const char *path;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    rb_ary_push(ary, rb_tainted_str_new2(path));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ruby_brace_expand(str, flags, func, arg)</div><div class='del'>-    const char *str;</div><div class='del'>-    int flags;</div><div class='del'>-    ruby_glob_func *func;</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    const int escape = !(flags &amp; FNM_NOESCAPE);</div><div class='del'>-    const char *p = str;</div><div class='del'>-    const char *s = p;</div><div class='del'>-    const char *lbrace = 0, *rbrace = 0;</div><div class='del'>-    int nest = 0, status = 0;</div><div class='del'>-</div><div class='del'>-    while (*p) {</div><div class='del'>-	if (*p == '{' &amp;&amp; nest++ == 0) {</div><div class='del'>-	    lbrace = p;</div><div class='del'>-	}</div><div class='del'>-	if (*p == '}' &amp;&amp; --nest &lt;= 0) {</div><div class='del'>-	    rbrace = p;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	if (*p == '\\' &amp;&amp; escape) {</div><div class='del'>-	    if (!*++p) break;</div><div class='del'>-	}</div><div class='del'>-	Inc(p);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (lbrace &amp;&amp; rbrace) {</div><div class='del'>-	char *buf = GLOB_ALLOC_N(char, strlen(s) + 1);</div><div class='del'>-	long shift;</div><div class='del'>-</div><div class='del'>-	if (!buf) return -1;</div><div class='del'>-	memcpy(buf, s, lbrace-s);</div><div class='del'>-	shift = (lbrace-s);</div><div class='del'>-	p = lbrace;</div><div class='del'>-	while (p &lt; rbrace) {</div><div class='del'>-	    const char *t = ++p;</div><div class='del'>-	    nest = 0;</div><div class='del'>-	    while (p &lt; rbrace &amp;&amp; !(*p == ',' &amp;&amp; nest == 0)) {</div><div class='del'>-		if (*p == '{') nest++;</div><div class='del'>-		if (*p == '}') nest--;</div><div class='del'>-		if (*p == '\\' &amp;&amp; escape) {</div><div class='del'>-		    if (++p == rbrace) break;</div><div class='del'>-		}</div><div class='del'>-		Inc(p);</div><div class='del'>-	    }</div><div class='del'>-	    memcpy(buf+shift, t, p-t);</div><div class='del'>-	    strcpy(buf+shift+(p-t), rbrace+1);</div><div class='del'>-	    status = ruby_brace_expand(buf, flags, func, arg);</div><div class='del'>-	    if (status) break;</div><div class='del'>-	}</div><div class='del'>-	free(buf);</div><div class='del'>-    }</div><div class='del'>-    else if (!lbrace &amp;&amp; !rbrace) {</div><div class='del'>-	status = (*func)(s, arg);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return status;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct brace_args {</div><div class='del'>-    ruby_glob_func *func;</div><div class='del'>-    VALUE value;</div><div class='del'>-    int flags;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int glob_brace _((const char *, VALUE));</div><div class='del'>-static int</div><div class='del'>-glob_brace(path, val)</div><div class='del'>-    const char *path;</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    struct brace_args *arg = (struct brace_args *)val;</div><div class='del'>-</div><div class='del'>-    return ruby_glob0(path, arg-&gt;flags, arg-&gt;func, arg-&gt;value);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ruby_brace_glob0(str, flags, func, arg)</div><div class='del'>-    const char *str;</div><div class='del'>-    int flags;</div><div class='del'>-    ruby_glob_func *func;</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct brace_args args;</div><div class='del'>-</div><div class='del'>-    args.func = func;</div><div class='del'>-    args.value = arg;</div><div class='del'>-    args.flags = flags;</div><div class='del'>-    return ruby_brace_expand(str, flags, glob_brace, (VALUE)&amp;args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ruby_brace_glob(str, flags, func, arg)</div><div class='del'>-    const char *str;</div><div class='del'>-    int flags;</div><div class='del'>-    ruby_glob_func *func;</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    return ruby_brace_glob0(str, flags &amp; ~GLOB_VERBOSE, func, arg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-push_glob(VALUE ary, const char *str, int flags)</div><div class='del'>-{</div><div class='del'>-    struct glob_args args;</div><div class='del'>-</div><div class='del'>-    args.func = push_pattern;</div><div class='del'>-    args.v = ary;</div><div class='del'>-    return ruby_brace_glob0(str, flags | GLOB_VERBOSE, rb_glob_caller, (VALUE)&amp;args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_push_glob(str, flags) /* '\0' is delimiter */</div><div class='del'>-    VALUE str;</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    long offset = 0;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-</div><div class='del'>-    while (offset &lt; RSTRING_LEN(str)) {</div><div class='del'>-	int status = push_glob(ary, RSTRING(str)-&gt;ptr + offset, flags);</div><div class='del'>-	char *p, *pend;</div><div class='del'>-	if (status) GLOB_JUMP_TAG(status);</div><div class='del'>-	if (offset &gt;= RSTRING_LEN(str)) break;</div><div class='del'>-	p = RSTRING(str)-&gt;ptr + offset;</div><div class='del'>-	p += strlen(p) + 1;</div><div class='del'>-	pend = RSTRING(str)-&gt;ptr + RSTRING_LEN(str);</div><div class='del'>-	while (p &lt; pend &amp;&amp; !*p)</div><div class='del'>-	    p++;</div><div class='del'>-	offset = p - RSTRING(str)-&gt;ptr;</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'>-dir_globs(argc, argv, flags)</div><div class='del'>-    long argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; argc; ++i) {</div><div class='del'>-	int status;</div><div class='del'>-	VALUE str = argv[i];</div><div class='del'>-	StringValue(str);</div><div class='del'>-	status = push_glob(ary, RSTRING(str)-&gt;ptr, flags);</div><div class='del'>-	if (status) GLOB_JUMP_TAG(status);</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'>- *  call-seq:</div><div class='del'>- *     Dir[ array ]                 =&gt; array</div><div class='del'>- *     Dir[ string [, string ...] ] =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Equivalent to calling</div><div class='del'>- *  &lt;code&gt;Dir.glob(&lt;/code&gt;&lt;i&gt;array,&lt;/i&gt;&lt;code&gt;0)&lt;/code&gt; and </div><div class='del'>- *  &lt;code&gt;Dir.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='del'>-static VALUE</div><div class='del'>-dir_s_aref(int argc, VALUE *argv, VALUE obj)</div><div class='del'>- {</div><div class='del'>-    if (argc == 1) {</div><div class='del'>-	return rb_push_glob(argv[0], 0);</div><div class='del'>-    }</div><div class='del'>-    return dir_globs(argc, argv, 0);</div><div class='del'>- }</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Dir.glob( pattern, [flags] ) =&gt; array</div><div class='del'>- *     Dir.glob( pattern, [flags] ) {| filename | block }  =&gt; nil</div><div class='del'>- *</div><div class='del'>- *  Returns the filenames found by expanding &lt;i&gt;pattern&lt;/i&gt; which is</div><div class='del'>- *  an +Array+ of the patterns or the pattern +String+, either as an</div><div class='del'>- *  &lt;i&gt;array&lt;/i&gt; or as parameters to the block. Note that this pattern</div><div class='del'>- *  is not a regexp (it's closer to a shell glob). See</div><div class='del'>- *  &lt;code&gt;File::fnmatch&lt;/code&gt; for the meaning of the &lt;i&gt;flags&lt;/i&gt;</div><div class='del'>- *  parameter. Note that case sensitivity depends on your system (so</div><div class='del'>- *  &lt;code&gt;File::FNM_CASEFOLD&lt;/code&gt; is ignored)</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='del'>-static VALUE</div><div class='del'>-dir_s_glob(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 str, rflags, ary;</div><div class='del'>-    int flags;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;str, &amp;rflags) == 2)</div><div class='del'>-	flags = NUM2INT(rflags);</div><div class='del'>-    else</div><div class='del'>-	flags = 0;</div><div class='del'>-</div><div class='del'>-    ary = rb_check_array_type(str);</div><div class='del'>-    if (NIL_P(ary)) {</div><div class='del'>-	ary = rb_push_glob(str, flags);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	volatile VALUE v = ary;</div><div class='del'>-	ary = dir_globs(RARRAY_LEN(v), RARRAY_PTR(v), flags);</div><div class='del'>-    }</div><div class='del'>-</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='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-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='del'>-dir_foreach(io, dirname)</div><div class='del'>-    VALUE io, dirname;</div><div class='del'>-{</div><div class='del'>-    VALUE dir;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(io, 1, &amp;dirname);</div><div class='del'>-    dir = dir_open_dir(dirname);</div><div class='del'>-    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='del'>-static VALUE</div><div class='del'>-dir_entries(io, dirname)</div><div class='del'>-    VALUE io, dirname;</div><div class='del'>-{</div><div class='del'>-    VALUE dir;</div><div class='del'>-</div><div class='del'>-    dir = dir_open_dir(dirname);</div><div class='del'>-    return rb_ensure(rb_Array, dir, dir_close, dir);</div><div class='del'>-}</div><div class='del'>-</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 directories recursively or files</div><div class='del'>- *                          expansively.</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  : match entire string</div><div class='del'>- *     File.fnmatch('cat',       'category')   #=&gt; false : only match partial string</div><div class='del'>- *     File.fnmatch('c{at,ub}s', 'cats')       #=&gt; false : { } isn't supported</div><div class='del'>- *</div><div class='del'>- *     File.fnmatch('c?t',     'cat')          #=&gt; true  : '?' match only 1 character</div><div class='del'>- *     File.fnmatch('c??t',    'cat')          #=&gt; false : ditto</div><div class='del'>- *     File.fnmatch('c*',      'cats')         #=&gt; true  : '*' match 0 or more characters</div><div class='del'>- *     File.fnmatch('c*t',     'c/a/b/t')      #=&gt; true  : ditto</div><div class='del'>- *     File.fnmatch('ca[a-z]', 'cat')          #=&gt; true  : inclusive bracket expression</div><div class='del'>- *     File.fnmatch('ca[^t]',  'cat')          #=&gt; false : exclusive bracket expression ('^' or '!')</div><div class='del'>- *</div><div class='del'>- *     File.fnmatch('cat', 'CAT')                     #=&gt; false : case sensitive</div><div class='del'>- *     File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=&gt; true  : case insensitive</div><div class='del'>- *</div><div class='del'>- *     File.fnmatch('?',   '/', File::FNM_PATHNAME)  #=&gt; false : wildcard doesn't match '/' on FNM_PATHNAME</div><div class='del'>- *     File.fnmatch('*',   '/', File::FNM_PATHNAME)  #=&gt; false : ditto</div><div class='del'>- *     File.fnmatch('[/]', '/', File::FNM_PATHNAME)  #=&gt; false : ditto</div><div class='del'>- *</div><div class='del'>- *     File.fnmatch('\?',   '?')                       #=&gt; true  : escaped wildcard becomes ordinary</div><div class='del'>- *     File.fnmatch('\a',   'a')                       #=&gt; true  : escaped ordinary remains ordinary</div><div class='del'>- *     File.fnmatch('\a',   '\a', File::FNM_NOESCAPE)  #=&gt; true  : FNM_NOESACPE makes '\' ordinary</div><div class='del'>- *     File.fnmatch('[\?]', '?')                       #=&gt; true  : can escape inside bracket expression</div><div class='del'>- *</div><div class='del'>- *     File.fnmatch('*',   '.profile')                      #=&gt; false : wildcard doesn't match leading</div><div class='del'>- *     File.fnmatch('*',   '.profile', File::FNM_DOTMATCH)  #=&gt; true    period by default.</div><div class='del'>- *     File.fnmatch('.*',  '.profile')                      #=&gt; true</div><div class='del'>- *</div><div class='del'>- *     rbfiles = '**' '/' '*.rb' # you don't have to do like this. just write in single string.</div><div class='del'>- *     File.fnmatch(rbfiles, 'main.rb')                    #=&gt; false</div><div class='del'>- *     File.fnmatch(rbfiles, './main.rb')                  #=&gt; false</div><div class='del'>- *     File.fnmatch(rbfiles, 'lib/song.rb')                #=&gt; true</div><div class='del'>- *     File.fnmatch('**.rb', 'main.rb')                    #=&gt; true</div><div class='del'>- *     File.fnmatch('**.rb', './main.rb')                  #=&gt; false</div><div class='del'>- *     File.fnmatch('**.rb', 'lib/song.rb')                #=&gt; true</div><div class='del'>- *     File.fnmatch('*',           'dave/.profile')                      #=&gt; true</div><div class='del'>- *</div><div class='del'>- *     pattern = '*' '/' '*'</div><div class='del'>- *     File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME)  #=&gt; false</div><div class='del'>- *     File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=&gt; true</div><div class='del'>- *</div><div class='del'>- *     pattern = '**' '/' 'foo'</div><div class='del'>- *     File.fnmatch(pattern, 'a/b/c/foo', File::FNM_PATHNAME)     #=&gt; true</div><div class='del'>- *     File.fnmatch(pattern, '/a/b/c/foo', File::FNM_PATHNAME)    #=&gt; true</div><div class='del'>- *     File.fnmatch(pattern, 'c:/a/b/c/foo', File::FNM_PATHNAME)  #=&gt; true</div><div class='del'>- *     File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME)    #=&gt; false</div><div class='del'>- *     File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=&gt; true</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-file_s_fnmatch(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Fdir_rmdir(obj, dir)</div><div class='ctx'>     VALUE obj;</div><div class='add'>+    struct RString *dir;</div><div class='ctx'> {</div><div class='del'>-    VALUE pattern, path;</div><div class='del'>-    VALUE rflags;</div><div class='del'>-    int flags;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "21", &amp;pattern, &amp;path, &amp;rflags) == 3)</div><div class='del'>-	flags = NUM2INT(rflags);</div><div class='del'>-    else</div><div class='del'>-	flags = 0;</div><div class='del'>-</div><div class='del'>-    StringValue(pattern);</div><div class='del'>-    StringValue(path);</div><div class='add'>+    Check_Type(dir, T_STRING);</div><div class='add'>+    if (rmdir(dir-&gt;ptr) &lt; 0)</div><div class='add'>+	rb_sys_fail(dir-&gt;ptr);</div><div class='ctx'> </div><div class='del'>-    if (fnmatch(RSTRING(pattern)-&gt;ptr, RSTRING(path)-&gt;ptr, flags) == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return TRUE;</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='del'>-void</div><div class='ctx'> Init_Dir()</div><div class='ctx'> {</div><div class='del'>-    rb_cDir = rb_define_class("Dir", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_include_module(rb_cDir, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cDir, dir_s_alloc);</div><div class='del'>-    rb_define_singleton_method(rb_cDir, "open", dir_s_open, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cDir, "foreach", dir_foreach, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cDir, "entries", dir_entries, 1);</div><div class='add'>+    extern VALUE M_Enumerable;</div><div class='ctx'> </div><div class='del'>-    rb_define_method(rb_cDir,"initialize", dir_initialize, 1);</div><div class='del'>-    rb_define_method(rb_cDir,"path", dir_path, 0);</div><div class='del'>-    rb_define_method(rb_cDir,"inspect", dir_inspect, 0);</div><div class='del'>-    rb_define_method(rb_cDir,"read", dir_read, 0);</div><div class='del'>-    rb_define_method(rb_cDir,"each", dir_each, 0);</div><div class='del'>-    rb_define_method(rb_cDir,"rewind", dir_rewind, 0);</div><div class='del'>-    rb_define_method(rb_cDir,"tell", dir_tell, 0);</div><div class='del'>-    rb_define_method(rb_cDir,"seek", dir_seek, 1);</div><div class='del'>-    rb_define_method(rb_cDir,"pos", dir_tell, 0);</div><div class='del'>-    rb_define_method(rb_cDir,"pos=", dir_set_pos, 1);</div><div class='del'>-    rb_define_method(rb_cDir,"close", dir_close, 0);</div><div class='add'>+    C_Dir = rb_define_class("Directory", C_Object);</div><div class='add'>+    rb_name_class(C_Dir, rb_intern("Dir")); /* alias */</div><div class='ctx'> </div><div class='del'>-    rb_define_singleton_method(rb_cDir,"chdir", dir_s_chdir, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cDir,"getwd", dir_s_getwd, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cDir,"pwd", dir_s_getwd, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cDir,"chroot", dir_s_chroot, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cDir,"mkdir", dir_s_mkdir, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cDir,"rmdir", dir_s_rmdir, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cDir,"delete", dir_s_rmdir, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cDir,"unlink", dir_s_rmdir, 1);</div><div class='add'>+    rb_include_module(C_Dir, M_Enumerable);</div><div class='ctx'> </div><div class='del'>-    rb_define_singleton_method(rb_cDir,"glob", dir_s_glob, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cDir,"[]", dir_s_aref, -1);</div><div class='add'>+    rb_define_single_method(C_Dir, "open", Fdir_open, 1);</div><div class='ctx'> </div><div class='del'>-    rb_define_singleton_method(rb_cFile,"fnmatch", file_s_fnmatch, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile,"fnmatch?", file_s_fnmatch, -1);</div><div class='add'>+    rb_define_method(C_Dir,"each", Fdir_each, 0);</div><div class='add'>+    rb_define_method(C_Dir,"rewind", Fdir_rewind, 0);</div><div class='add'>+    rb_define_method(C_Dir,"tell", Fdir_tell, 0);</div><div class='add'>+    rb_define_method(C_Dir,"seek", Fdir_seek, 1);</div><div class='add'>+    rb_define_method(C_Dir,"close", Fdir_close, 0);</div><div class='ctx'> </div><div class='del'>-    rb_file_const("FNM_NOESCAPE", INT2FIX(FNM_NOESCAPE));</div><div class='del'>-    rb_file_const("FNM_PATHNAME", INT2FIX(FNM_PATHNAME));</div><div class='del'>-    rb_file_const("FNM_DOTMATCH", INT2FIX(FNM_DOTMATCH));</div><div class='del'>-    rb_file_const("FNM_CASEFOLD", INT2FIX(FNM_CASEFOLD));</div><div class='del'>-    rb_file_const("FNM_SYSCASE", INT2FIX(FNM_SYSCASE));</div><div class='add'>+    rb_define_single_method(C_Dir,"chdir", Fdir_chdir, -2);</div><div class='add'>+    rb_define_single_method(C_Dir,"getwd", Fdir_getwd, 0);</div><div class='add'>+    rb_define_single_method(C_Dir,"pwd", Fdir_getwd, 0);</div><div class='add'>+    rb_define_single_method(C_Dir,"chroot", Fdir_chroot, 1);</div><div class='add'>+    rb_define_single_method(C_Dir,"mkdir", Fdir_mkdir, -2);</div><div class='add'>+    rb_define_single_method(C_Dir,"rmdir", Fdir_rmdir, 1);</div><div class='add'>+    rb_define_single_method(C_Dir,"delete", Fdir_rmdir, 1);</div><div class='add'>+    rb_define_single_method(C_Dir,"unlink", Fdir_rmdir, 1);</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/GNUmakefile.in b/djgpp/GNUmakefile.in<br/>deleted file mode 100644<br/>index 0a7e1fb131..0000000000<br/>--- a/<a href='/ruby.git/tree/djgpp/GNUmakefile.in?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/GNUmakefile.in</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-include Makefile</div><div class='del'>-VPATH = $(srcdir) $(srcdir)/missing</div><div class='head'>diff --git a/djgpp/README.djgpp b/djgpp/README.djgpp<br/>deleted file mode 100644<br/>index f1f413a478..0000000000<br/>--- a/<a href='/ruby.git/tree/djgpp/README.djgpp?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/README.djgpp</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-* How to compile and install on djgpp</div><div class='del'>-</div><div class='del'>-This is what you need to do to compile and install Ruby:</div><div class='del'>-</div><div class='del'>-  1. Run configure.bat, which will generate config.h and Makefile</div><div class='del'>-     (GNU sed required).</div><div class='del'>-     Message like this is normal:</div><div class='del'>-       sed.exe: can't read 123456789: No such file or directory (ENOENT)</div><div class='del'>-</div><div class='del'>-  2. Edit defines.h if you need.  Probably this step will not need.</div><div class='del'>-</div><div class='del'>-  3. Remove comment mark(#) before the module names from ext/Setup.dj (or</div><div class='del'>-     add module names if not present).</div><div class='del'>-</div><div class='del'>-  4. Run make.</div><div class='del'>-</div><div class='del'>-  5. Optionally, run 'make test' to check whether the compiled Ruby</div><div class='del'>-     interpreter works well.  If you see the message "test succeeded",</div><div class='del'>-     your ruby works as it should (hopefully).</div><div class='del'>-</div><div class='del'>-  6. Run 'make install'</div><div class='head'>diff --git a/djgpp/config.hin b/djgpp/config.hin<br/>deleted file mode 100644<br/>index 8ee427c92f..0000000000<br/>--- a/<a href='/ruby.git/tree/djgpp/config.hin?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/config.hin</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,114 +0,0 @@</div><div class='del'>-</div><div class='del'>-#define PACKAGE_NAME ""</div><div class='del'>-#define PACKAGE_TARNAME ""</div><div class='del'>-#define PACKAGE_VERSION ""</div><div class='del'>-#define PACKAGE_STRING ""</div><div class='del'>-#define PACKAGE_BUGREPORT ""</div><div class='del'>-#define USE_BUILTIN_FRAME_ADDRESS 1</div><div class='del'>-#define STDC_HEADERS 1</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_STRINGS_H 1</div><div class='del'>-#define HAVE_UNISTD_H 1</div><div class='del'>-#define HAVE_LONG_LONG 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 8</div><div class='del'>-#define SIZEOF___INT64 0</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 HAVE_PROTOTYPES 1</div><div class='del'>-#define TOKEN_PASTE(x,y) x##y</div><div class='del'>-#define HAVE_STDARG_PROTOTYPES 1</div><div class='del'>-#define NORETURN(x) x __attribute__ ((noreturn))</div><div class='del'>-#define HAVE_DECL_SYS_NERR 1</div><div class='del'>-#define HAVE_DIRENT_H 1</div><div class='del'>-#define STDC_HEADERS 1</div><div class='del'>-#define HAVE_SYS_WAIT_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_UNISTD_H 1</div><div class='del'>-#define HAVE_LIMITS_H 1</div><div class='del'>-#define HAVE_SYS_FILE_H 1</div><div class='del'>-#define HAVE_SYS_IOCTL_H 1</div><div class='del'>-#define HAVE_FCNTL_H 1</div><div class='del'>-#define HAVE_SYS_FCNTL_H 1</div><div class='del'>-#define HAVE_SYS_TIME_H 1</div><div class='del'>-#define HAVE_SYS_TIMES_H 1</div><div class='del'>-#define HAVE_SYS_PARAM_H 1</div><div class='del'>-#define HAVE_PWD_H 1</div><div class='del'>-#define HAVE_UTIME_H 1</div><div class='del'>-#define HAVE_MEMORY_H 1</div><div class='del'>-#define HAVE_DIRECT_H 1</div><div class='del'>-#define HAVE_SYS_RESOURCE_H 1</div><div class='del'>-#define HAVE_STRUCT_STAT_ST_BLKSIZE 1</div><div class='del'>-#define HAVE_ST_BLKSIZE 1</div><div class='del'>-#define HAVE_STRUCT_STAT_ST_RDEV 1</div><div class='del'>-#define HAVE_ST_RDEV 1</div><div class='del'>-#define GETGROUPS_T gid_t</div><div class='del'>-#define RETSIGTYPE void</div><div class='del'>-#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_STRTOUL 1</div><div class='del'>-#define HAVE_ISINF 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='del'>-#define HAVE_ACOSH 1</div><div class='del'>-#define HAVE_FMOD 1</div><div class='del'>-#define HAVE_WAITPID 1</div><div class='del'>-#define HAVE_FSYNC 1</div><div class='del'>-#define HAVE_TRUNCATE 1</div><div class='del'>-#define HAVE_CHSIZE 1</div><div class='del'>-#define HAVE_TIMES 1</div><div class='del'>-#define HAVE_UTIMES 1</div><div class='del'>-#define HAVE_FCNTL 1</div><div class='del'>-#define HAVE_SYMLINK 1</div><div class='del'>-#define HAVE_SETITIMER 1</div><div class='del'>-#define HAVE_PAUSE 1</div><div class='del'>-#define HAVE_GETPGRP 1</div><div class='del'>-#define HAVE_SETPGID 1</div><div class='del'>-#define HAVE_GETGROUPS 1</div><div class='del'>-#define HAVE_GETRLIMIT 1</div><div class='del'>-#define HAVE_SIGPROCMASK 1</div><div class='del'>-#define HAVE_SIGACTION 1</div><div class='del'>-#define HAVE_SETSID 1</div><div class='del'>-#define HAVE_TELLDIR 1</div><div class='del'>-#define HAVE_SEEKDIR 1</div><div class='del'>-#define HAVE_MKTIME 1</div><div class='del'>-#define HAVE_COSH 1</div><div class='del'>-#define HAVE_SINH 1</div><div class='del'>-#define HAVE_TANH 1</div><div class='del'>-#define HAVE_STRUCT_TM_TM_ZONE 1</div><div class='del'>-#define HAVE_TM_ZONE 1</div><div class='del'>-#define HAVE_STRUCT_TM_TM_GMTOFF 1</div><div class='del'>-#define POSIX_SIGNAL 1</div><div class='del'>-#define GETPGRP_VOID 1</div><div class='del'>-#define SETPGRP_VOID 1</div><div class='del'>-#define RSHIFT(x,y) ((x)&gt;&gt;(int)y)</div><div class='del'>-#define FILE_COUNT _cnt</div><div class='del'>-#define FILE_READPTR _ptr</div><div class='del'>-#define NEED_IO_FLUSH_BETWEEN_RW 1</div><div class='del'>-#define DEFAULT_KCODE KCODE_NONE</div><div class='del'>-#define DLEXT ".so"</div><div class='del'>-#define RUBY_LIB "/lib/ruby/@MAJOR@.@MINOR@"</div><div class='del'>-#define RUBY_SITE_LIB "/lib/ruby/site_ruby"</div><div class='del'>-#define RUBY_SITE_LIB2 "/lib/ruby/site_ruby/@MAJOR@.@MINOR@"</div><div class='del'>-#define RUBY_PLATFORM "i386-msdosdjgpp"</div><div class='del'>-#define RUBY_ARCHLIB "/lib/ruby/@MAJOR@.@MINOR@/i386-msdosdjgpp"</div><div class='del'>-#define RUBY_SITE_ARCHLIB "/lib/ruby/site_ruby/@MAJOR@.@MINOR@/i386-msdosdjgpp"</div><div class='head'>diff --git a/djgpp/config.sed b/djgpp/config.sed<br/>deleted file mode 100644<br/>index 1805789520..0000000000<br/>--- a/<a href='/ruby.git/tree/djgpp/config.sed?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/config.sed</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,128 +0,0 @@</div><div class='del'>-/^SHELL/s,/bin/sh,$(COMSPEC),</div><div class='del'>-;s%/bin/rm%rm%</div><div class='del'>-;s%|| true%%</div><div class='del'>-;/\/dev\/null/ {</div><div class='del'>-;s,/dev/null 2&gt;&amp;1, nul,</div><div class='del'>-;s,2&gt; /dev/null,,</div><div class='del'>-;}</div><div class='del'>-;/^config.status/ {</div><div class='del'>-;    N;N;N;N;N;d</div><div class='del'>-;}</div><div class='del'>-:t</div><div class='del'>-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b</div><div class='del'>-s,@srcdir@,.,g;t t</div><div class='del'>-s,@top_srcdir@,..,;t t</div><div class='del'>-s,@PATH_SEPARATOR@,:,;t t</div><div class='del'>-s,@PACKAGE_NAME@,,;t t</div><div class='del'>-s,@PACKAGE_TARNAME@,,;t t</div><div class='del'>-s,@PACKAGE_VERSION@,,;t t</div><div class='del'>-s,@PACKAGE_STRING@,,;t t</div><div class='del'>-s,@PACKAGE_BUGREPORT@,,;t t</div><div class='del'>-s,@exec_prefix@,${prefix},;t t</div><div class='del'>-s,@prefix@,/dev/env/DJDIR,;t t</div><div class='del'>-s%@program_transform_name@%s,^,,%;t t</div><div class='del'>-s,@bindir@,${exec_prefix}/bin,;t t</div><div class='del'>-s,@sbindir@,${exec_prefix}/sbin,;t t</div><div class='del'>-s,@libexecdir@,${exec_prefix}/libexec,;t t</div><div class='del'>-s,@datadir@,${prefix}/share,;t t</div><div class='del'>-s,@sysconfdir@,${prefix}/etc,;t t</div><div class='del'>-s,@sharedstatedir@,${prefix}/com,;t t</div><div class='del'>-s,@localstatedir@,${prefix}/var,;t t</div><div class='del'>-s,@libdir@,${exec_prefix}/lib,;t t</div><div class='del'>-s,@includedir@,${prefix}/include,;t t</div><div class='del'>-s,@oldincludedir@,/usr/include,;t t</div><div class='del'>-s,@infodir@,${prefix}/info,;t t</div><div class='del'>-s,@mandir@,${prefix}/man,;t t</div><div class='del'>-s,@build_alias@,i586-pc-msdosdjgpp,;t t</div><div class='del'>-s,@host_alias@,i586-pc-msdosdjgpp,;t t</div><div class='del'>-s,@target_alias@,i386-msdosdjgpp,;t t</div><div class='del'>-s,@DEFS@,,;t t</div><div class='del'>-s,@ECHO_C@,,;t t</div><div class='del'>-s,@ECHO_N@,-n,;t t</div><div class='del'>-s,@ECHO_T@,,;t t</div><div class='del'>-s,@LIBS@,-lm ,;t t</div><div class='del'>-s,@MAJOR@,1,;t t</div><div class='del'>-s,@MINOR@,7,;t t</div><div class='del'>-s,@TEENY@,3,;t t</div><div class='del'>-s,@build@,i586-pc-msdosdjgpp,;t t</div><div class='del'>-s,@build_cpu@,i586,;t t</div><div class='del'>-s,@build_vendor@,pc,;t t</div><div class='del'>-s,@build_os@,msdosdjgpp,;t t</div><div class='del'>-s,@host@,i586-pc-msdosdjgpp,;t t</div><div class='del'>-s,@host_cpu@,i586,;t t</div><div class='del'>-s,@host_vendor@,pc,;t t</div><div class='del'>-s,@host_os@,msdosdjgpp,;t t</div><div class='del'>-s,@target@,i386-pc-msdosdjgpp,;t t</div><div class='del'>-s,@target_cpu@,i386,;t t</div><div class='del'>-s,@target_vendor@,pc,;t t</div><div class='del'>-s,@target_os@,msdosdjgpp,;t t</div><div class='del'>-s,@CC@,gcc,;t t</div><div class='del'>-s,@ac_ct_CC@,,;t t</div><div class='del'>-s,@CFLAGS@,-Os,;t t</div><div class='del'>-s,@LDFLAGS@,,;t t</div><div class='del'>-s,@CPPFLAGS@,,;t t</div><div class='del'>-s,@EXEEXT@,.exe,;t t</div><div class='del'>-s,@OBJEXT@,o,;t t</div><div class='del'>-s,@CPP@,gcc -E,;t t</div><div class='del'>-s,@EGREP@,grep -E,;t t</div><div class='del'>-s,@GNU_LD@,yes,;t t</div><div class='del'>-s,@CPPOUTFILE@,-o conftest.i,;t t</div><div class='del'>-s,@OUTFLAG@,-o ,;t t</div><div class='del'>-s,@YACC@,bison -y,;t t</div><div class='del'>-s,@RANLIB@,ranlib,;t t</div><div class='del'>-s,@ac_ct_RANLIB@,,;t t</div><div class='del'>-s,@AR@,ar,;t t</div><div class='del'>-s,@ac_ct_AR@,,;t t</div><div class='del'>-s,@NM@,,;t t</div><div class='del'>-s,@ac_ct_NM@,,;t t</div><div class='del'>-s,@WINDRES@,,;t t</div><div class='del'>-s,@ac_ct_WINDRES@,,;t t</div><div class='del'>-s,@DLLWRAP@,,;t t</div><div class='del'>-s,@ac_ct_DLLWRAP@,,;t t</div><div class='del'>-s,@LN_S@,ln -s,;t t</div><div class='del'>-s,@SET_MAKE@,,;t t</div><div class='del'>-s,@LIBOBJS@,crypt.o flock.o vsnprintf.o,;t t</div><div class='del'>-s,@ALLOCA@,,;t t</div><div class='del'>-s,@XCFLAGS@,,;t t</div><div class='del'>-s,@XLDFLAGS@, -L.,;t t</div><div class='del'>-s,@DLDFLAGS@,,;t t</div><div class='del'>-s,@STATIC@,,;t t</div><div class='del'>-s,@CCDLFLAGS@,,;t t</div><div class='del'>-s,@LDSHARED@,ld,;t t</div><div class='del'>-s,@DLEXT@,so,;t t</div><div class='del'>-s,@DLEXT2@,,;t t</div><div class='del'>-s,@LIBEXT@,a,;t t</div><div class='del'>-s,@LINK_SO@,,;t t</div><div class='del'>-s,@LIBPATHFLAG@, -L%s,;t t</div><div class='del'>-s,@STRIP@,strip,;t t</div><div class='del'>-s,@EXTSTATIC@,,;t t</div><div class='del'>-s,@setup@,Setup.dj,;t t</div><div class='del'>-s,@MINIRUBY@,./miniruby,;t t</div><div class='del'>-s,@PREP@,,;t t</div><div class='del'>-s,@ARCHFILE@,,;t t</div><div class='del'>-s,@LIBRUBY_LDSHARED@,ld,;t t</div><div class='del'>-s,@LIBRUBY_DLDFLAGS@,,;t t</div><div class='del'>-s,@RUBY_INSTALL_NAME@,ruby,;t t</div><div class='del'>-s,@rubyw_install_name@,,;t t</div><div class='del'>-s,@RUBYW_INSTALL_NAME@,,;t t</div><div class='del'>-s,@RUBY_SO_NAME@,$(RUBY_INSTALL_NAME),;t t</div><div class='del'>-s,@LIBRUBY_A@,lib$(RUBY_INSTALL_NAME).a,;t t</div><div class='del'>-s,@LIBRUBY_SO@,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY),;t t</div><div class='del'>-s,@LIBRUBY_ALIASES@,lib$(RUBY_SO_NAME).so,;t t</div><div class='del'>-s,@LIBRUBY@,$(LIBRUBY_A),;t t</div><div class='del'>-s,@LIBRUBYARG@,-l$(RUBY_INSTALL_NAME),;t t</div><div class='del'>-s,@SOLIBS@,,;t t</div><div class='del'>-s,@DLDLIBS@,-lc,;t t</div><div class='del'>-s,@ENABLE_SHARED@,no,;t t</div><div class='del'>-s,@MAINLIBS@,,;t t</div><div class='del'>-s,@COMMON_LIBS@,,;t t</div><div class='del'>-s,@COMMON_MACROS@,,;t t</div><div class='del'>-s,@COMMON_HEADERS@,,;t t</div><div class='del'>-s,@EXPORT_PREFIX@,,;t t</div><div class='del'>-s,@MAKEFILES@,Makefile,;t t</div><div class='del'>-s,@arch@,i386-msdosdjgpp,;t t</div><div class='del'>-s,@sitearch@,i386-msdosdjgpp,;t t</div><div class='del'>-s,@sitedir@,${prefix}/lib/ruby/site_ruby,;t t</div><div class='del'>-s,@configure_args@,,;t t</div><div class='del'>-/^,THIS_IS_DUMMY_PATTERN_/i\</div><div class='del'>-ac_given_srcdir=.</div><div class='head'>diff --git a/djgpp/configure.bat b/djgpp/configure.bat<br/>deleted file mode 100755<br/>index e6a5d79d4a..0000000000<br/>--- a/<a href='/ruby.git/tree/djgpp/configure.bat?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/configure.bat</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-@echo off</div><div class='del'>-if exist configure.bat cd ..</div><div class='del'>-if exist djgpp\version.sed goto exist</div><div class='del'>-  sed -n -f djgpp\mkver.sed &lt; version.h &gt; djgpp\version.sed</div><div class='del'>-:exist</div><div class='del'>-set _conv_=-f djgpp\config.sed -f djgpp\version.sed</div><div class='del'>-sed %_conv_% &lt; Makefile.in &gt; Makefile</div><div class='del'>-sed %_conv_% &lt; djgpp\config.hin &gt; config.h</div><div class='del'>-echo LFN check &gt; 12345678</div><div class='del'>-sed -n /LFN/d 123456789 &gt; nul</div><div class='del'>-if errorlevel 2 goto LFN</div><div class='del'>-    copy missing\vsnprintf.c missing\vsnprint.c &gt; nul</div><div class='del'>-    copy djgpp\config.sed config.sta &gt; nul</div><div class='del'>-goto end</div><div class='del'>-:LFN</div><div class='del'>-    copy djgpp\config.sed config.status &gt; nul</div><div class='del'>-:end</div><div class='del'>-set _conv_=</div><div class='del'>-del 12345678</div><div class='del'>-echo Now you must run a make.</div><div class='head'>diff --git a/djgpp/mkver.sed b/djgpp/mkver.sed<br/>deleted file mode 100644<br/>index f29b9ddd3e..0000000000<br/>--- a/<a href='/ruby.git/tree/djgpp/mkver.sed?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>djgpp/mkver.sed</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-/RUBY_VERSION /s/^.*\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/s,@MAJOR@,\1,;s,@MINOR@,\2,;s,@TEENY@,\3,/p</div><div class='head'>diff --git a/dln.c b/dln.c<br/>index 5ba25b6415..766297e2ae 100644<br/>--- a/<a href='/ruby.git/tree/dln.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dln.c</a><br/>+++ b/<a href='/ruby.git/tree/dln.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>dln.c</a></div><div class='hunk'>@@ -1,199 +1,185 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   dln.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='ctx'>   created at: Tue Jan 18 17:05:06 JST 1994</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='del'>-#include "ruby.h"</div><div class='add'>+#include &lt;stdio.h&gt;</div><div class='add'>+#include &lt;sys/param.h&gt;</div><div class='add'>+#include &lt;sys/file.h&gt;</div><div class='add'>+#include "defines.h"</div><div class='ctx'> #include "dln.h"</div><div class='del'>-</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'>-</div><div class='del'>-#ifdef __CHECKER__</div><div class='del'>-#undef HAVE_DLOPEN</div><div class='del'>-#undef USE_DLN_A_OUT</div><div class='del'>-#undef USE_DLN_DLOPEN</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef USE_DLN_A_OUT</div><div class='del'>-char *dln_argv0;</div><div class='add'>+#include &lt;sys/types.h&gt;</div><div class='add'>+#ifdef HAVE_UNISTD_H</div><div class='add'>+#include &lt;unistd.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#if defined(HAVE_ALLOCA_H)</div><div class='del'>-#include &lt;alloca.h&gt;</div><div class='del'>-#endif</div><div class='add'>+char *strdup();</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_STRING_H</div><div class='del'>-# include &lt;string.h&gt;</div><div class='del'>-#else</div><div class='del'>-# include &lt;strings.h&gt;</div><div class='del'>-#endif</div><div class='add'>+extern int errno;</div><div class='add'>+int dln_errno;</div><div class='ctx'> </div><div class='del'>-#ifndef xmalloc</div><div class='del'>-void *xmalloc();</div><div class='del'>-void *xcalloc();</div><div class='del'>-void *xrealloc();</div><div class='del'>-#endif</div><div class='add'>+static int dln_init_p = 0;</div><div class='ctx'> </div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#if defined(_WIN32) || defined(__VMS)</div><div class='del'>-#include "missing/file.h"</div><div class='del'>-#endif</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='ctx'> #include &lt;sys/stat.h&gt;</div><div class='ctx'> </div><div class='del'>-#ifndef S_ISDIR</div><div class='del'>-#   define S_ISDIR(m) ((m &amp; S_IFMT) == S_IFDIR)</div><div class='del'>-#endif</div><div class='add'>+static char fbuf[MAXPATHLEN];</div><div class='add'>+static char *dln_find_1();</div><div class='add'>+char *getenv();</div><div class='add'>+char *index();</div><div class='add'>+int strcmp();</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_SYS_PARAM_H</div><div class='del'>-# include &lt;sys/param.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifndef MAXPATHLEN</div><div class='del'>-# define MAXPATHLEN 1024</div><div class='del'>-#endif</div><div class='add'>+char *</div><div class='add'>+dln_find_exe(fname, path)</div><div class='add'>+    char *fname;</div><div class='add'>+    char *path;</div><div class='add'>+{</div><div class='add'>+    if (!path) path = getenv("PATH");</div><div class='add'>+    if (!path) path = "/usr/local/bin:/usr/ucb:/usr/bin:/bin:.";</div><div class='add'>+    return dln_find_1(fname, path, 1);</div><div class='add'>+}</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='add'>+char *</div><div class='add'>+dln_find_file(fname, path)</div><div class='add'>+    char *fname;</div><div class='add'>+    char *path;</div><div class='add'>+{</div><div class='add'>+    if (!path) path = ".";</div><div class='add'>+    return dln_find_1(fname, path, 0);</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-#ifndef _WIN32</div><div class='del'>-char *getenv();</div><div class='del'>-#endif</div><div class='add'>+static char *</div><div class='add'>+dln_find_1(fname, path, exe_flag)</div><div class='add'>+    char *fname;</div><div class='add'>+    char *path;</div><div class='add'>+    int exe_flag;		/* non 0 if looking for executable. */</div><div class='add'>+{</div><div class='add'>+    register char *dp;</div><div class='add'>+    register char *ep;</div><div class='add'>+    register char *bp;</div><div class='add'>+    struct stat st;</div><div class='ctx'> </div><div class='del'>-#if defined(__VMS)</div><div class='del'>-#pragma builtins</div><div class='del'>-#include &lt;dlfcn.h&gt;</div><div class='del'>-#endif</div><div class='add'>+    if (fname[0] == '/') return fname;</div><div class='ctx'> </div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-# include &lt;TextUtils.h&gt;</div><div class='del'>-# include &lt;CodeFragments.h&gt;</div><div class='del'>-# include &lt;Aliases.h&gt;</div><div class='del'>-# include "macruby_private.h"</div><div class='del'>-#endif</div><div class='add'>+    for (dp = path;; dp = ++ep)</div><div class='add'>+    {</div><div class='add'>+	register int l;</div><div class='add'>+	int i;</div><div class='add'>+	int fspace;</div><div class='ctx'> </div><div class='del'>-#if defined(__APPLE__) &amp;&amp; defined(__MACH__)   /* Mac OS X */</div><div class='del'>-# if defined(HAVE_DLOPEN)</div><div class='del'>-   /* Mac OS X with dlopen (10.3 or later) */</div><div class='del'>-#  define MACOSX_DLOPEN</div><div class='del'>-# else</div><div class='del'>-#  define MACOSX_DYLD</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='add'>+	/* extract a component */</div><div class='add'>+	ep = index(dp, ':');</div><div class='add'>+	if (ep == NULL)</div><div class='add'>+	    ep = dp+strlen(dp);</div><div class='ctx'> </div><div class='del'>-#ifdef __BEOS__</div><div class='del'>-# include &lt;image.h&gt;</div><div class='del'>-#endif</div><div class='add'>+	/* find the length of that component */</div><div class='add'>+	l = ep - dp;</div><div class='add'>+	bp = fbuf;</div><div class='add'>+	fspace = sizeof fbuf - 2;</div><div class='add'>+	if (l &gt; 0)</div><div class='add'>+	{</div><div class='add'>+	    /*</div><div class='add'>+	    **	If the length of the component is zero length,</div><div class='add'>+	    **	start from the current directory.  If the</div><div class='add'>+	    **	component begins with "~", start from the</div><div class='add'>+	    **	user's $HOME environment variable.  Otherwise</div><div class='add'>+	    **	take the path literally.</div><div class='add'>+	    */</div><div class='ctx'> </div><div class='del'>-#ifndef NO_DLN_LOAD</div><div class='add'>+	    if (*dp == '~' &amp;&amp; (l == 1 || dp[1] == '/'))</div><div class='add'>+	    {</div><div class='add'>+		char *home;</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(MACOSX_DYLD) &amp;&amp; !defined(_UNICOSMP)</div><div class='del'>-/* dynamic load with dlopen() */</div><div class='del'>-# define USE_DLN_DLOPEN</div><div class='del'>-#endif</div><div class='add'>+		home = getenv("HOME");</div><div class='add'>+		if (home != NULL)</div><div class='add'>+		{</div><div class='add'>+		    i = strlen(home);</div><div class='add'>+		    if ((fspace -= i) &lt; 0)</div><div class='add'>+			goto toolong;</div><div class='add'>+		    memcpy(bp, home, i);</div><div class='add'>+		    bp += i;</div><div class='add'>+		}</div><div class='add'>+		dp++;</div><div class='add'>+		l--;</div><div class='add'>+	    }</div><div class='add'>+	    if (l &gt; 0)</div><div class='add'>+	    {</div><div class='add'>+		if ((fspace -= l) &lt; 0)</div><div class='add'>+		    goto toolong;</div><div class='add'>+		memcpy(bp, dp, l);</div><div class='add'>+		bp += l;</div><div class='add'>+	    }</div><div class='ctx'> </div><div class='del'>-#ifndef FUNCNAME_PATTERN</div><div class='del'>-# if defined(__hp9000s300) ||  (defined(__NetBSD__) &amp;&amp; !defined(__ELF__)) || defined(__BORLANDC__) || (defined(__FreeBSD__) &amp;&amp; !defined(__ELF__)) || (defined(__OpenBSD__) &amp;&amp; !defined(__ELF__)) || defined(NeXT) || defined(__WATCOMC__) || defined(MACOSX_DYLD)</div><div class='del'>-#  define FUNCNAME_PATTERN "_Init_%s"</div><div class='del'>-# else</div><div class='del'>-#  define FUNCNAME_PATTERN "Init_%s"</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='add'>+	    /* add a "/" between directory and filename */</div><div class='add'>+	    if (ep[-1] != '/')</div><div class='add'>+		*bp++ = '/';</div><div class='add'>+	}</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-init_funcname_len(buf, file)</div><div class='del'>-    char **buf;</div><div class='del'>-    const char *file;</div><div class='del'>-{</div><div class='del'>-    char *p;</div><div class='del'>-    const char *slash;</div><div class='del'>-    int len;</div><div class='del'>-</div><div class='del'>-    /* Load the file as an object one */</div><div class='del'>-    for (slash = file-1; *file; file++) /* Find position of last '/' */</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-	if (*file == ':') slash = file;</div><div class='add'>+	/* now append the file name */</div><div class='add'>+	i = strlen(fname);</div><div class='add'>+	if ((fspace -= i) &lt; 0)</div><div class='add'>+	{</div><div class='add'>+    toolong:</div><div class='add'>+	    fprintf(stderr, "openpath: pathname too long (ignored)\n");</div><div class='add'>+	    *bp = '\0';</div><div class='add'>+	    fprintf(stderr, "\tDirectory \"%s\"\n", fbuf);</div><div class='add'>+	    fprintf(stderr, "\tFile \"%s\"\n", fname);</div><div class='add'>+	    continue;</div><div class='add'>+	}</div><div class='add'>+	memcpy(bp, fname, i + 1);</div><div class='add'>+</div><div class='add'>+	if (stat(fbuf, &amp;st) == 0) {</div><div class='add'>+	    if (exe_flag == 0) return fbuf;</div><div class='add'>+	    /* looking for executable */</div><div class='add'>+#ifdef RUBY</div><div class='add'>+	    if (eaccess(fbuf, X_OK) == 0) return fbuf;</div><div class='ctx'> #else</div><div class='del'>-	if (*file == '/') slash = file;</div><div class='add'>+	    {</div><div class='add'>+		uid_t uid = getuid();</div><div class='add'>+		gid_t gid = getgid();</div><div class='add'>+</div><div class='add'>+		if (uid == st.st_uid &amp;&amp;</div><div class='add'>+		    (st.st_mode &amp; S_IEXEC) ||</div><div class='add'>+		    gid == st.st_gid &amp;&amp;</div><div class='add'>+		    (st.st_mode &amp; (S_IEXEC&gt;&gt;3)) ||</div><div class='add'>+		    st.st_mode &amp; (S_IEXEC&gt;&gt;6)) {</div><div class='add'>+		    return fbuf;</div><div class='add'>+		}</div><div class='add'>+	    }</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='del'>-    len = strlen(FUNCNAME_PATTERN) + strlen(slash + 1);</div><div class='del'>-    *buf = xmalloc(len);</div><div class='del'>-    snprintf(*buf, len, FUNCNAME_PATTERN, slash + 1);</div><div class='del'>-    for (p = *buf; *p; p++) {         /* Delete suffix if it exists */</div><div class='del'>-	if (*p == '.') {</div><div class='del'>-	    *p = '\0'; break;</div><div class='ctx'> 	}</div><div class='add'>+	/* if not, and no other alternatives, life is bleak */</div><div class='add'>+	if (*ep == '\0') {</div><div class='add'>+	    dln_errno = DLN_ENOENT;</div><div class='add'>+	    return NULL;</div><div class='add'>+	}</div><div class='add'>+</div><div class='add'>+	/* otherwise try the next component in the search path */</div><div class='ctx'>     }</div><div class='del'>-    return p - *buf;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define init_funcname(buf, file) do {\</div><div class='del'>-    int len = init_funcname_len(buf, file);\</div><div class='del'>-    char *tmp = ALLOCA_N(char, len+1);\</div><div class='del'>-    if (!tmp) {\</div><div class='del'>-	free(*buf);\</div><div class='del'>-	rb_memerror();\</div><div class='del'>-    }\</div><div class='del'>-    strcpy(tmp, *buf);\</div><div class='del'>-    free(*buf);\</div><div class='del'>-    *buf = tmp;\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#ifdef USE_DLN_A_OUT</div><div class='del'>-</div><div class='del'>-#ifndef LIBC_NAME</div><div class='del'>-# define LIBC_NAME "libc.a"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef DLN_DEFAULT_LIB_PATH</div><div class='del'>-#  define DLN_DEFAULT_LIB_PATH "/lib:/usr/lib:/usr/local/lib:."</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-</div><div class='del'>-static int dln_errno;</div><div class='del'>-</div><div class='del'>-#define DLN_ENOEXEC	ENOEXEC	/* Exec format error */</div><div class='del'>-#define DLN_ECONFL	1201	/* Symbol name conflict */</div><div class='del'>-#define DLN_ENOINIT	1202	/* No initializer given */</div><div class='del'>-#define DLN_EUNDEF	1203	/* Undefine symbol remains */</div><div class='del'>-#define DLN_ENOTLIB	1204	/* Not a library file */</div><div class='del'>-#define DLN_EBADLIB	1205	/* Malformed library file */</div><div class='del'>-#define DLN_EINIT	1206	/* Not initialized */</div><div class='del'>-</div><div class='del'>-static int dln_init_p = 0;</div><div class='add'>+#ifdef USE_DLN</div><div class='ctx'> </div><div class='add'>+#include "st.h"</div><div class='ctx'> #include &lt;ar.h&gt;</div><div class='ctx'> #include &lt;a.out.h&gt;</div><div class='ctx'> #ifndef N_COMM</div><div class='ctx'> # define N_COMM 0x12</div><div class='ctx'> #endif</div><div class='del'>-#ifndef N_MAGIC</div><div class='del'>-# define N_MAGIC(x) (x).a_magic</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'> #define INVALID_OBJECT(h) (N_MAGIC(h) != OMAGIC)</div><div class='ctx'> </div><div class='del'>-#include "util.h"</div><div class='del'>-#include "st.h"</div><div class='del'>-</div><div class='ctx'> static st_table *sym_tbl;</div><div class='ctx'> static st_table *undef_tbl;</div><div class='ctx'> </div><div class='del'>-static int load_lib();</div><div class='del'>-</div><div class='ctx'> static int</div><div class='del'>-load_header(fd, hdrp, disp)</div><div class='add'>+dln_load_header(fd, hdrp, disp)</div><div class='ctx'>     int fd;</div><div class='ctx'>     struct exec *hdrp;</div><div class='ctx'>     long disp;</div><div class='hunk'>@@ -201,42 +187,25 @@ load_header(fd, hdrp, disp)</div><div class='ctx'>     int size;</div><div class='ctx'> </div><div class='ctx'>     lseek(fd, disp, 0);</div><div class='del'>-    size = read(fd, hdrp, sizeof(struct exec));</div><div class='add'>+    size = read(fd, hdrp, sizeof(*hdrp));</div><div class='ctx'>     if (size == -1) {</div><div class='ctx'> 	dln_errno = errno;</div><div class='ctx'> 	return -1;</div><div class='ctx'>     }</div><div class='del'>-    if (size != sizeof(struct exec) || N_BADMAG(*hdrp)) {</div><div class='add'>+    if (size != sizeof(*hdrp) || N_BADMAG(*hdrp)) {</div><div class='ctx'> 	dln_errno = DLN_ENOEXEC;</div><div class='ctx'> 	return -1;</div><div class='ctx'>     }</div><div class='ctx'>     return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if defined(sequent)</div><div class='del'>-#define RELOC_SYMBOL(r)			((r)-&gt;r_symbolnum)</div><div class='del'>-#define RELOC_MEMORY_SUB_P(r)		((r)-&gt;r_bsr)</div><div class='del'>-#define RELOC_PCREL_P(r)		((r)-&gt;r_pcrel || (r)-&gt;r_bsr)</div><div class='del'>-#define RELOC_TARGET_SIZE(r)		((r)-&gt;r_length)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* Default macros */</div><div class='del'>-#ifndef RELOC_ADDRESS</div><div class='del'>-#define RELOC_ADDRESS(r)		((r)-&gt;r_address)</div><div class='del'>-#define RELOC_EXTERN_P(r)		((r)-&gt;r_extern)</div><div class='del'>-#define RELOC_SYMBOL(r)			((r)-&gt;r_symbolnum)</div><div class='del'>-#define RELOC_MEMORY_SUB_P(r)		0</div><div class='del'>-#define RELOC_PCREL_P(r)		((r)-&gt;r_pcrel)</div><div class='del'>-#define RELOC_TARGET_SIZE(r)		((r)-&gt;r_length)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> #if defined(sun) &amp;&amp; defined(sparc)</div><div class='ctx'> /* Sparc (Sun 4) macros */</div><div class='ctx'> #  undef relocation_info</div><div class='ctx'> #  define relocation_info reloc_info_sparc</div><div class='del'>-#  define R_RIGHTSHIFT(r)	(reloc_r_rightshift[(r)-&gt;r_type])</div><div class='del'>-#  define R_BITSIZE(r) 		(reloc_r_bitsize[(r)-&gt;r_type])</div><div class='del'>-#  define R_LENGTH(r)		(reloc_r_length[(r)-&gt;r_type])</div><div class='add'>+#  define R_RIGHTSHIFT(r) (reloc_r_rightshift[(r)-&gt;r_type])</div><div class='add'>+#  define R_BITSIZE(r) (reloc_r_bitsize[(r)-&gt;r_type])</div><div class='add'>+#  define R_LENGTH(r) (reloc_r_length[(r)-&gt;r_type])</div><div class='ctx'> static int reloc_r_rightshift[] = {</div><div class='ctx'>   0, 0, 0, 0, 0, 0, 2, 2, 10, 0, 0, 0, 0, 0, 0,</div><div class='ctx'> };</div><div class='hunk'>@@ -249,32 +218,23 @@ static int reloc_r_length[] = {</div><div class='ctx'> #  define R_PCREL(r) \</div><div class='ctx'>     ((r)-&gt;r_type &gt;= RELOC_DISP8 &amp;&amp; (r)-&gt;r_type &lt;= RELOC_WDISP22)</div><div class='ctx'> #  define R_SYMBOL(r) ((r)-&gt;r_index)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(sequent)</div><div class='del'>-#define R_SYMBOL(r)		((r)-&gt;r_symbolnum)</div><div class='del'>-#define R_MEMORY_SUB(r)		((r)-&gt;r_bsr)</div><div class='del'>-#define R_PCREL(r)		((r)-&gt;r_pcrel || (r)-&gt;r_bsr)</div><div class='del'>-#define R_LENGTH(r)		((r)-&gt;r_length)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef R_SYMBOL</div><div class='del'>-#  define R_SYMBOL(r) 		((r)-&gt;r_symbolnum)</div><div class='del'>-#  define R_MEMORY_SUB(r)	0</div><div class='del'>-#  define R_PCREL(r)  		((r)-&gt;r_pcrel)</div><div class='del'>-#  define R_LENGTH(r) 		((r)-&gt;r_length)</div><div class='add'>+#else</div><div class='add'>+#  define R_LENGTH(r) ((r)-&gt;r_length)</div><div class='add'>+#  define R_PCREL(r)  ((r)-&gt;r_pcrel)</div><div class='add'>+#  define R_SYMBOL(r) ((r)-&gt;r_symbolnum)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> static struct relocation_info *</div><div class='del'>-load_reloc(fd, hdrp, disp)</div><div class='add'>+dln_load_reloc(fd, hdrp, disp)</div><div class='ctx'>      int fd;</div><div class='ctx'>      struct exec *hdrp;</div><div class='ctx'>      long disp;</div><div class='ctx'> {</div><div class='del'>-    struct relocation_info *reloc;</div><div class='add'>+    struct relocation_info * reloc;</div><div class='ctx'>     int size;</div><div class='ctx'> </div><div class='ctx'>     lseek(fd, disp + N_TXTOFF(*hdrp) + hdrp-&gt;a_text + hdrp-&gt;a_data, 0);</div><div class='add'>+  </div><div class='ctx'>     size = hdrp-&gt;a_trsize + hdrp-&gt;a_drsize;</div><div class='ctx'>     reloc = (struct relocation_info*)xmalloc(size);</div><div class='ctx'>     if (reloc == NULL) {</div><div class='hunk'>@@ -287,12 +247,12 @@ load_reloc(fd, hdrp, disp)</div><div class='ctx'> 	free(reloc);</div><div class='ctx'> 	return NULL;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='add'>+  </div><div class='ctx'>     return reloc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static struct nlist *</div><div class='del'>-load_sym(fd, hdrp, disp)</div><div class='add'>+dln_load_sym(fd, hdrp, disp)</div><div class='ctx'>     int fd;</div><div class='ctx'>     struct exec *hdrp;</div><div class='ctx'>     long disp;</div><div class='hunk'>@@ -302,6 +262,7 @@ load_sym(fd, hdrp, disp)</div><div class='ctx'>     struct nlist * end;</div><div class='ctx'>     long displ;</div><div class='ctx'>     int size;</div><div class='add'>+    st_table *tbl;</div><div class='ctx'> </div><div class='ctx'>     lseek(fd, N_SYMOFF(*hdrp) + hdrp-&gt;a_syms + disp, 0);</div><div class='ctx'>     if (read(fd, &amp;size, sizeof(int)) != sizeof(int)) {</div><div class='hunk'>@@ -336,7 +297,7 @@ load_sym(fd, hdrp, disp)</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static st_table *</div><div class='del'>-sym_hash(hdrp, syms)</div><div class='add'>+dln_sym_hash(hdrp, syms)</div><div class='ctx'>     struct exec *hdrp;</div><div class='ctx'>     struct nlist *syms;</div><div class='ctx'> {</div><div class='hunk'>@@ -344,7 +305,7 @@ sym_hash(hdrp, syms)</div><div class='ctx'>     struct nlist *sym = syms;</div><div class='ctx'>     struct nlist *end = syms + (hdrp-&gt;a_syms / sizeof(struct nlist));</div><div class='ctx'> </div><div class='del'>-    tbl = st_init_strtable();</div><div class='add'>+    tbl = st_init_table(strcmp, st_strhash);</div><div class='ctx'>     if (tbl == NULL) {</div><div class='ctx'> 	dln_errno = errno;</div><div class='ctx'> 	return NULL;</div><div class='hunk'>@@ -357,30 +318,31 @@ sym_hash(hdrp, syms)</div><div class='ctx'>     return tbl;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='add'>+int</div><div class='ctx'> dln_init(prog)</div><div class='del'>-    const char *prog;</div><div class='add'>+    char *prog;</div><div class='ctx'> {</div><div class='ctx'>     char *file;</div><div class='del'>-    int fd;</div><div class='add'>+    int fd, size;</div><div class='ctx'>     struct exec hdr;</div><div class='ctx'>     struct nlist *syms;</div><div class='ctx'> </div><div class='del'>-    if (dln_init_p == 1) return 0;</div><div class='add'>+    if (dln_init_p == 1) return;</div><div class='ctx'> </div><div class='ctx'>     file = dln_find_exe(prog, NULL);</div><div class='del'>-    if (file == NULL || (fd = open(file, O_RDONLY)) &lt; 0) {</div><div class='add'>+    if (file == NULL) return -1;</div><div class='add'>+    if ((fd = open(file, O_RDONLY)) &lt; 0) {</div><div class='ctx'> 	dln_errno = errno;</div><div class='ctx'> 	return -1;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (load_header(fd, &amp;hdr, 0) == -1) return -1;</div><div class='del'>-    syms = load_sym(fd, &amp;hdr, 0);</div><div class='add'>+    if (dln_load_header(fd, &amp;hdr, 0) == -1) return -1;</div><div class='add'>+    syms = dln_load_sym(fd, &amp;hdr, 0);</div><div class='ctx'>     if (syms == NULL) {</div><div class='ctx'> 	close(fd);</div><div class='ctx'> 	return -1;</div><div class='ctx'>     }</div><div class='del'>-    sym_tbl = sym_hash(&amp;hdr, syms);</div><div class='add'>+    sym_tbl = dln_sym_hash(&amp;hdr, syms);</div><div class='ctx'>     if (sym_tbl == NULL) {	/* file may be start with #! */</div><div class='ctx'> 	char c = '\0';</div><div class='ctx'> 	char buf[MAXPATHLEN];</div><div class='hunk'>@@ -400,7 +362,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'>@@ -412,17 +374,14 @@ dln_init(prog)</div><div class='ctx'> 	while (read(fd, p, 1) == 1) {</div><div class='ctx'> 	    if (*p == '\n' || *p == '\t' || *p == ' ') break;</div><div class='ctx'> 	    p++;</div><div class='del'>-	    if (p-buf &gt;= MAXPATHLEN) {</div><div class='del'>-		dln_errno = ENAMETOOLONG;</div><div class='del'>-		return -1;</div><div class='del'>-	    }</div><div class='ctx'> 	}</div><div class='ctx'> 	*p = '\0';</div><div class='add'>+	printf("%s\n", buf);</div><div class='ctx'> </div><div class='ctx'> 	return dln_init(buf);</div><div class='ctx'>     }</div><div class='ctx'>     dln_init_p = 1;</div><div class='del'>-    undef_tbl = st_init_strtable();</div><div class='add'>+    undef_tbl = st_init_table(strcmp, st_strhash);</div><div class='ctx'>     close(fd);</div><div class='ctx'>     return 0;</div><div class='ctx'> </div><div class='hunk'>@@ -432,8 +391,8 @@ dln_init(prog)</div><div class='ctx'>     return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static long</div><div class='del'>-load_text_data(fd, hdrp, bss, disp)</div><div class='add'>+long</div><div class='add'>+dln_load_text_data(fd, hdrp, bss, disp)</div><div class='ctx'>     int fd;</div><div class='ctx'>     struct exec *hdrp;</div><div class='ctx'>     int bss;</div><div class='hunk'>@@ -461,38 +420,34 @@ load_text_data(fd, hdrp, bss, disp)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (bss == -1) {</div><div class='del'>-	memset(addr +  hdrp-&gt;a_text + hdrp-&gt;a_data, 0, hdrp-&gt;a_bss);</div><div class='add'>+	bzero(addr +  hdrp-&gt;a_text + hdrp-&gt;a_data, hdrp-&gt;a_bss);</div><div class='ctx'>     }</div><div class='ctx'>     else if (bss &gt; 0) {</div><div class='del'>-	memset(addr +  hdrp-&gt;a_text + hdrp-&gt;a_data, 0, bss);</div><div class='add'>+	bzero(addr +  hdrp-&gt;a_text + hdrp-&gt;a_data, bss );</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     return (long)addr;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='del'>-undef_print(key, value)</div><div class='del'>-    char *key, *value;</div><div class='add'>+undef_print(key, value, arg)</div><div class='add'>+    char *key;</div><div class='ctx'> {</div><div class='ctx'>     fprintf(stderr, "  %s\n", key);</div><div class='ctx'>     return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-dln_print_undef()</div><div class='add'>+static</div><div class='add'>+dln_undefined()</div><div class='ctx'> {</div><div class='add'>+    fprintf(stderr, "dln: Calling undefined function\n");</div><div class='ctx'>     fprintf(stderr, " Undefined symbols:\n");</div><div class='ctx'>     st_foreach(undef_tbl, undef_print, NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-dln_undefined()</div><div class='del'>-{</div><div class='del'>-    if (undef_tbl-&gt;num_entries &gt; 0) {</div><div class='del'>-	fprintf(stderr, "dln: Calling undefined function\n");</div><div class='del'>-	dln_print_undef();</div><div class='del'>-	rb_exit(1);</div><div class='del'>-    }</div><div class='add'>+#ifdef RUBY</div><div class='add'>+    rb_exit(1);</div><div class='add'>+#else</div><div class='add'>+    exit(1);</div><div class='add'>+#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct undef {</div><div class='hunk'>@@ -510,7 +465,7 @@ struct undef {</div><div class='ctx'> static st_table *reloc_tbl = NULL;</div><div class='ctx'> static void</div><div class='ctx'> link_undef(name, base, reloc)</div><div class='del'>-    const char *name;</div><div class='add'>+    char *name;</div><div class='ctx'>     long base;</div><div class='ctx'>     struct relocation_info *reloc;</div><div class='ctx'> {</div><div class='hunk'>@@ -534,13 +489,13 @@ link_undef(name, base, reloc)</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='ctx'>     if (reloc_tbl == NULL) {</div><div class='del'>-	reloc_tbl = st_init_numtable();</div><div class='add'>+	reloc_tbl = st_init_table(ST_NUMCMP, ST_NUMHASH);</div><div class='ctx'>     }</div><div class='ctx'>     st_insert(reloc_tbl, u_no++, obj);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> struct reloc_arg {</div><div class='del'>-    const char *name;</div><div class='add'>+    char *name;</div><div class='ctx'>     long value;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='hunk'>@@ -564,7 +519,7 @@ reloc_undef(no, undef, arg)</div><div class='ctx'> #if defined(sun) &amp;&amp; defined(sparc)</div><div class='ctx'>     datum += undef-&gt;reloc.r_addend;</div><div class='ctx'>     datum &gt;&gt;= R_RIGHTSHIFT(&amp;(undef-&gt;reloc));</div><div class='del'>-    mask = (1 &lt;&lt; R_BITSIZE(&amp;(undef-&gt;reloc))) - 1;</div><div class='add'>+    mask = 1 &lt;&lt; R_BITSIZE(&amp;(undef-&gt;reloc)) - 1;</div><div class='ctx'>     mask |= mask -1;</div><div class='ctx'>     datum &amp;= mask;</div><div class='ctx'>     switch (R_LENGTH(&amp;(undef-&gt;reloc))) {</div><div class='hunk'>@@ -587,19 +542,13 @@ reloc_undef(no, undef, arg)</div><div class='ctx'> #else</div><div class='ctx'>     switch (R_LENGTH(&amp;(undef-&gt;reloc))) {</div><div class='ctx'>       case 0:		/* byte */</div><div class='del'>-	if (R_MEMORY_SUB(&amp;(undef-&gt;reloc)))</div><div class='del'>-	    *address = datum - *address;</div><div class='del'>-	else *address = undef-&gt;u.c + datum;</div><div class='add'>+	*address = undef-&gt;u.c + datum;</div><div class='ctx'> 	break;</div><div class='ctx'>       case 1:		/* word */</div><div class='del'>-	if (R_MEMORY_SUB(&amp;(undef-&gt;reloc)))</div><div class='del'>-	    *(short*)address = datum - *(short*)address;</div><div class='del'>-	else *(short*)address = undef-&gt;u.s + datum;</div><div class='add'>+	*(short *)address = undef-&gt;u.s + datum;</div><div class='ctx'> 	break;</div><div class='ctx'>       case 2:		/* long */</div><div class='del'>-	if (R_MEMORY_SUB(&amp;(undef-&gt;reloc)))</div><div class='del'>-	    *(long*)address = datum - *(long*)address;</div><div class='del'>-	else *(long*)address = undef-&gt;u.l + datum;</div><div class='add'>+	*(long *)address = undef-&gt;u.l + datum;</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='ctx'> #endif</div><div class='hunk'>@@ -608,9 +557,9 @@ reloc_undef(no, undef, arg)</div><div class='ctx'>     return ST_DELETE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='add'>+static int</div><div class='ctx'> unlink_undef(name, value)</div><div class='del'>-    const char *name;</div><div class='add'>+    char *name;</div><div class='ctx'>     long value;</div><div class='ctx'> {</div><div class='ctx'>     struct reloc_arg arg;</div><div class='hunk'>@@ -620,32 +569,12 @@ unlink_undef(name, value)</div><div class='ctx'>     st_foreach(reloc_tbl, reloc_undef, &amp;arg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifdef N_INDR</div><div class='del'>-struct indr_data {</div><div class='del'>-    char *name0, *name1;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-reloc_repl(no, undef, data)</div><div class='del'>-    int no;</div><div class='del'>-    struct undef *undef;</div><div class='del'>-    struct indr_data *data;</div><div class='del'>-{</div><div class='del'>-    if (strcmp(data-&gt;name0, undef-&gt;name) == 0) {</div><div class='del'>-	free(undef-&gt;name);</div><div class='del'>-	undef-&gt;name = strdup(data-&gt;name1);</div><div class='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-load_1(fd, disp, need_init)</div><div class='add'>+static int dln_load_1(fd, disp, need_init)</div><div class='ctx'>     int fd;</div><div class='ctx'>     long disp;</div><div class='del'>-    const char *need_init;</div><div class='add'>+    int need_init;</div><div class='ctx'> {</div><div class='del'>-    static const char *libc = LIBC_NAME;</div><div class='add'>+    static char *libc = LIBC_NAME;</div><div class='ctx'>     struct exec hdr;</div><div class='ctx'>     struct relocation_info *reloc = NULL;</div><div class='ctx'>     long block = 0;</div><div class='hunk'>@@ -655,19 +584,15 @@ load_1(fd, disp, need_init)</div><div class='ctx'>     struct nlist *end;</div><div class='ctx'>     int init_p = 0;</div><div class='ctx'> </div><div class='del'>-    if (load_header(fd, &amp;hdr, disp) == -1) return -1;</div><div class='add'>+    if (dln_load_header(fd, &amp;hdr, disp) == -1) return -1;</div><div class='ctx'>     if (INVALID_OBJECT(hdr)) {</div><div class='ctx'> 	dln_errno = DLN_ENOEXEC;</div><div class='ctx'> 	return -1;</div><div class='ctx'>     }</div><div class='del'>-    reloc = load_reloc(fd, &amp;hdr, disp);</div><div class='add'>+    reloc = dln_load_reloc(fd, &amp;hdr, disp);</div><div class='ctx'>     if (reloc == NULL) return -1;</div><div class='del'>-</div><div class='del'>-    syms = load_sym(fd, &amp;hdr, disp);</div><div class='del'>-    if (syms == NULL) {</div><div class='del'>-	free(reloc);</div><div class='del'>-	return -1;</div><div class='del'>-    }</div><div class='add'>+    syms = dln_load_sym(fd, &amp;hdr, disp);</div><div class='add'>+    if (syms == NULL) return -1;</div><div class='ctx'> </div><div class='ctx'>     sym = syms;</div><div class='ctx'>     end = syms + (hdr.a_syms / sizeof(struct nlist));</div><div class='hunk'>@@ -675,32 +600,6 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 	struct nlist *old_sym;</div><div class='ctx'> 	int value = sym-&gt;n_value;</div><div class='ctx'> </div><div class='del'>-#ifdef N_INDR</div><div class='del'>-	if (sym-&gt;n_type == (N_INDR | N_EXT)) {</div><div class='del'>-	    char *key = sym-&gt;n_un.n_name;</div><div class='del'>-</div><div class='del'>-	    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='del'>-		    unlink_undef(key, old_sym-&gt;n_value);</div><div class='del'>-		    free(key);</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		struct indr_data data;</div><div class='del'>-</div><div class='del'>-		data.name0 = sym-&gt;n_un.n_name;</div><div class='del'>-		data.name1 = sym[1].n_un.n_name;</div><div class='del'>-		st_foreach(reloc_tbl, reloc_repl, &amp;data);</div><div class='del'>-</div><div class='del'>-		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='del'>-		    free(key);</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    sym += 2;</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='ctx'> 	if (sym-&gt;n_type == (N_UNDF | N_EXT)) {</div><div class='ctx'> 	    if (st_lookup(sym_tbl, sym-&gt;n_un.n_name, &amp;old_sym) == 0) {</div><div class='ctx'> 		old_sym = NULL;</div><div class='hunk'>@@ -738,7 +637,7 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 	sym++;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    block = load_text_data(fd, &amp;hdr, hdr.a_bss + new_common, disp);</div><div class='add'>+    block = dln_load_text_data(fd, &amp;hdr, hdr.a_bss + new_common, disp);</div><div class='ctx'>     if (block == 0) goto err_exit;</div><div class='ctx'> </div><div class='ctx'>     sym = syms;</div><div class='hunk'>@@ -751,7 +650,6 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 	    sym-&gt;n_value += hdr.a_text + hdr.a_data;</div><div class='ctx'> 	  case N_TEXT|N_EXT:</div><div class='ctx'> 	  case N_DATA|N_EXT:</div><div class='del'>-</div><div class='ctx'> 	    sym-&gt;n_value += block;</div><div class='ctx'> </div><div class='ctx'> 	    if (st_lookup(sym_tbl, sym-&gt;n_un.n_name, &amp;new_sym) != 0</div><div class='hunk'>@@ -761,7 +659,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'>@@ -770,12 +668,6 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 	    *new_sym = *sym;</div><div class='ctx'> 	    new_sym-&gt;n_un.n_name = strdup(sym-&gt;n_un.n_name);</div><div class='ctx'> 	    st_insert(sym_tbl, new_sym-&gt;n_un.n_name, new_sym);</div><div class='del'>-	    break;</div><div class='del'>-</div><div class='del'>-	  case N_TEXT:</div><div class='del'>-	  case N_DATA:</div><div class='del'>-	    sym-&gt;n_value += block;</div><div class='del'>-	    break;</div><div class='ctx'> 	}</div><div class='ctx'> 	sym++;</div><div class='ctx'>     }</div><div class='hunk'>@@ -785,7 +677,7 @@ load_1(fd, disp, need_init)</div><div class='ctx'>      */</div><div class='ctx'>     {</div><div class='ctx'> 	struct relocation_info * rel = reloc;</div><div class='del'>-	struct relocation_info * rel_beg = reloc +</div><div class='add'>+	struct relocation_info * rel_beg = reloc + </div><div class='ctx'> 	    (hdr.a_trsize/sizeof(struct relocation_info));</div><div class='ctx'> 	struct relocation_info * rel_end = reloc +</div><div class='ctx'> 	    (hdr.a_trsize+hdr.a_drsize)/sizeof(struct relocation_info);</div><div class='hunk'>@@ -814,7 +706,7 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 		}</div><div class='ctx'> 	    } /* end.. look it up */</div><div class='ctx'> 	    else { /* is static */</div><div class='del'>-		switch (R_SYMBOL(rel)) { </div><div class='add'>+		switch (R_SYMBOL(rel) &amp; N_TYPE) {</div><div class='ctx'> 		  case N_TEXT:</div><div class='ctx'> 		  case N_DATA:</div><div class='ctx'> 		    datum = block;</div><div class='hunk'>@@ -831,7 +723,7 @@ load_1(fd, disp, need_init)</div><div class='ctx'> #if defined(sun) &amp;&amp; defined(sparc)</div><div class='ctx'> 	    datum += rel-&gt;r_addend;</div><div class='ctx'> 	    datum &gt;&gt;= R_RIGHTSHIFT(rel);</div><div class='del'>-	    mask = (1 &lt;&lt; R_BITSIZE(rel)) - 1;</div><div class='add'>+	    mask = 1 &lt;&lt; R_BITSIZE(rel) - 1;</div><div class='ctx'> 	    mask |= mask -1;</div><div class='ctx'> 	    datum &amp;= mask;</div><div class='ctx'> </div><div class='hunk'>@@ -868,34 +760,20 @@ load_1(fd, disp, need_init)</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     if (need_init) {</div><div class='del'>-	int len;</div><div class='del'>-	char **libs_to_be_linked = 0;</div><div class='del'>-	char *buf;</div><div class='del'>-</div><div class='ctx'> 	if (undef_tbl-&gt;num_entries &gt; 0) {</div><div class='del'>-	    if (load_lib(libc) == -1) goto err_exit;</div><div class='add'>+	    if (dln_load_lib(libc) == -1) goto err_exit;</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='del'>-	init_funcname(&amp;buf, need_init);</div><div class='del'>-	len = strlen(buf);</div><div class='del'>-</div><div class='del'>-	for (sym = syms; sym&lt;end; sym++) {</div><div class='add'>+	sym = syms;</div><div class='add'>+	while (sym &lt; end) {</div><div class='ctx'> 	    char *name = sym-&gt;n_un.n_name;</div><div class='del'>-	    if (name[0] == '_' &amp;&amp; sym-&gt;n_value &gt;= block) {</div><div class='del'>-		if (strcmp(name+1, "dln_libs_to_be_linked") == 0) {</div><div class='del'>-		    libs_to_be_linked = (char**)sym-&gt;n_value;</div><div class='del'>-		}</div><div class='del'>-		else if (strcmp(name+1, buf) == 0) {</div><div class='del'>-		    init_p = 1;</div><div class='del'>-		    ((int (*)())sym-&gt;n_value)();</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	if (libs_to_be_linked &amp;&amp; undef_tbl-&gt;num_entries &gt; 0) {</div><div class='del'>-	    while (*libs_to_be_linked) {</div><div class='del'>-		load_lib(*libs_to_be_linked);</div><div class='del'>-		libs_to_be_linked++;</div><div class='add'>+	    if (name[0] == '_' &amp;&amp; sym-&gt;n_value &gt;= block</div><div class='add'>+		&amp;&amp; ((bcmp (name, "_Init_", 6) == 0 </div><div class='add'>+		     || bcmp (name, "_init_", 6) == 0) &amp;&amp; name[6] != '_')) {</div><div class='add'>+		init_p = 1;</div><div class='add'>+		((int (*)())sym-&gt;n_value)();</div><div class='ctx'> 	    }</div><div class='add'>+	    sym++;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     free(reloc);</div><div class='hunk'>@@ -906,7 +784,7 @@ load_1(fd, disp, need_init)</div><div class='ctx'> 	    return -1;</div><div class='ctx'> 	}</div><div class='ctx'> 	if (undef_tbl-&gt;num_entries &gt; 0) {</div><div class='del'>-	    if (load_lib(libc) == -1) goto err_exit;</div><div class='add'>+	    if (dln_load_lib(libc) == -1) goto err_exit;</div><div class='ctx'> 	    if (undef_tbl-&gt;num_entries &gt; 0) {</div><div class='ctx'> 		dln_errno = DLN_EUNDEF;</div><div class='ctx'> 		return -1;</div><div class='hunk'>@@ -918,34 +796,61 @@ load_1(fd, disp, need_init)</div><div class='ctx'>   err_exit:</div><div class='ctx'>     if (syms) free(syms);</div><div class='ctx'>     if (reloc) free(reloc);</div><div class='del'>-    if (block) free((char*)block);</div><div class='add'>+    if (block) free(block);</div><div class='ctx'>     return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+int</div><div class='add'>+dln_load(file)</div><div class='add'>+    char *file;</div><div class='add'>+{</div><div class='add'>+    int fd;</div><div class='add'>+    int result;</div><div class='add'>+</div><div class='add'>+    if (dln_init_p == 0) {</div><div class='add'>+	dln_errno = DLN_ENOINIT;</div><div class='add'>+	return -1;</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    fd = open(file, O_RDONLY);</div><div class='add'>+    if (fd == -1) {</div><div class='add'>+	dln_errno = errno;</div><div class='add'>+	return -1;</div><div class='add'>+    }</div><div class='add'>+    result = dln_load_1(fd, 0, 1);</div><div class='add'>+    close(fd);</div><div class='add'>+</div><div class='add'>+    return result;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+struct symdef {</div><div class='add'>+    int str_index;</div><div class='add'>+    int lib_offset;</div><div class='add'>+};</div><div class='add'>+</div><div class='ctx'> static int target_offset;</div><div class='ctx'> static int</div><div class='ctx'> search_undef(key, value, lib_tbl)</div><div class='del'>-    const char *key;</div><div class='add'>+    char *key;</div><div class='ctx'>     int value;</div><div class='ctx'>     st_table *lib_tbl;</div><div class='ctx'> {</div><div class='del'>-    long offset;</div><div class='add'>+    static char *last = "";</div><div class='add'>+    int offset;</div><div class='ctx'> </div><div class='ctx'>     if (st_lookup(lib_tbl, key, &amp;offset) == 0) return ST_CONTINUE;</div><div class='del'>-    target_offset = offset;</div><div class='add'>+    if (strcmp(last, key) != 0) {</div><div class='add'>+	last = key;</div><div class='add'>+	target_offset = offset;</div><div class='add'>+    }</div><div class='ctx'>     return ST_STOP;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct symdef {</div><div class='del'>-    int rb_str_index;</div><div class='del'>-    int lib_offset;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-char *dln_librrb_ary_path = DLN_DEFAULT_LIB_PATH;</div><div class='add'>+char *dln_library_path = DLN_DEFAULT_PATH;</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-load_lib(lib)</div><div class='del'>-    const char *lib;</div><div class='add'>+int</div><div class='add'>+dln_load_lib(lib)</div><div class='add'>+    char *lib;</div><div class='ctx'> {</div><div class='ctx'>     char *path, *file;</div><div class='ctx'>     char armagic[SARMAG];</div><div class='hunk'>@@ -964,25 +869,18 @@ load_lib(lib)</div><div class='ctx'>     if (undef_tbl-&gt;num_entries == 0) return 0;</div><div class='ctx'>     dln_errno = DLN_EBADLIB;</div><div class='ctx'> </div><div class='del'>-    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='del'>-	lib = p;</div><div class='del'>-    }</div><div class='del'>-</div><div class='ctx'>     /* library search path: */</div><div class='ctx'>     /* look for environment variable DLN_LIBRARY_PATH first. */</div><div class='del'>-    /* then variable dln_librrb_ary_path. */</div><div class='add'>+    /* then variable dln_library_path. */</div><div class='ctx'>     /* if path is still NULL, use "." for path. */</div><div class='ctx'>     path = getenv("DLN_LIBRARY_PATH");</div><div class='del'>-    if (path == NULL) path = dln_librrb_ary_path;</div><div class='add'>+    if (path == NULL) path = dln_library_path;</div><div class='ctx'> </div><div class='ctx'>     file = dln_find_file(lib, path);</div><div class='ctx'>     fd = open(file, O_RDONLY);</div><div class='ctx'>     if (fd == -1) goto syserr;</div><div class='ctx'>     size = read(fd, armagic, SARMAG);</div><div class='del'>-    if (size == -1) goto syserr;</div><div class='add'>+    if (fd == -1) goto syserr;</div><div class='ctx'> </div><div class='ctx'>     if (size != SARMAG) {</div><div class='ctx'> 	dln_errno = DLN_ENOTLIB;</div><div class='hunk'>@@ -994,10 +892,10 @@ load_lib(lib)</div><div class='ctx'> 	goto badlib;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (strncmp(ahdr.ar_name, "__.SYMDEF", 9) == 0) {</div><div class='add'>+    if (strncmp(ahdr.ar_name, "__.SYMDEF", 9) == 0 &amp;&amp; ahdr.ar_name[9] == ' ') {</div><div class='ctx'> 	/* make hash table from __.SYMDEF */</div><div class='ctx'> </div><div class='del'>-	lib_tbl = st_init_strtable();</div><div class='add'>+	lib_tbl = st_init_table(strcmp, st_strhash);</div><div class='ctx'> 	data = (int*)xmalloc(size);</div><div class='ctx'> 	if (data == NULL) goto syserr;</div><div class='ctx'> 	size = read(fd, data, size);</div><div class='hunk'>@@ -1005,7 +903,7 @@ load_lib(lib)</div><div class='ctx'> 	base = (struct symdef*)(data + 1);</div><div class='ctx'> 	name_base = (char*)(base + nsym) + sizeof(int);</div><div class='ctx'> 	while (nsym &gt; 0) {</div><div class='del'>-	    char *name = name_base + base-&gt;rb_str_index;</div><div class='add'>+	    char *name = name_base + base-&gt;str_index;</div><div class='ctx'> </div><div class='ctx'> 	    st_insert(lib_tbl, name, base-&gt;lib_offset + sizeof(ahdr));</div><div class='ctx'> 	    nsym--;</div><div class='hunk'>@@ -1015,7 +913,7 @@ load_lib(lib)</div><div class='ctx'> 	    target_offset = -1;</div><div class='ctx'> 	    st_foreach(undef_tbl, search_undef, lib_tbl);</div><div class='ctx'> 	    if (target_offset == -1) break;</div><div class='del'>-	    if (load_1(fd, target_offset, 0) == -1) {</div><div class='add'>+	    if (dln_load_1(fd, target_offset, 0) == -1) {</div><div class='ctx'> 		st_free_table(lib_tbl);</div><div class='ctx'> 		free(data);</div><div class='ctx'> 		goto badlib;</div><div class='hunk'>@@ -1045,9 +943,9 @@ load_lib(lib)</div><div class='ctx'> 		    goto badlib;</div><div class='ctx'> 		}</div><div class='ctx'> 		offset += sizeof(ahdr);</div><div class='del'>-		if (load_header(fd, &amp;hdr, offset) == -1)</div><div class='add'>+		if (dln_load_header(fd, &amp;hdr, offset) == -1)</div><div class='ctx'> 		    goto badlib;</div><div class='del'>-		syms = load_sym(fd, &amp;hdr, offset);</div><div class='add'>+		syms = dln_load_sym(fd, &amp;hdr, offset);</div><div class='ctx'> 		if (syms == NULL) goto badlib;</div><div class='ctx'> 		sym = syms;</div><div class='ctx'> 		end = syms + (hdr.a_syms / sizeof(struct nlist));</div><div class='hunk'>@@ -1061,7 +959,7 @@ load_lib(lib)</div><div class='ctx'> 		if (sym &lt; end) {</div><div class='ctx'> 		    found++;</div><div class='ctx'> 		    free(syms);</div><div class='del'>-		    if (load_1(fd, offset, 0) == -1) {</div><div class='add'>+		    if (dln_load_1(fd, offset, 0) == -1) {</div><div class='ctx'> 			goto badlib;</div><div class='ctx'> 		    }</div><div class='ctx'> 		}</div><div class='hunk'>@@ -1081,104 +979,16 @@ load_lib(lib)</div><div class='ctx'>     return -1;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-load(file)</div><div class='del'>-    const char *file;</div><div class='del'>-{</div><div class='del'>-    int fd;</div><div class='del'>-    int result;</div><div class='del'>-</div><div class='del'>-    if (dln_init_p == 0) {</div><div class='del'>-	if (dln_init(dln_argv0) == -1) return -1;</div><div class='del'>-    }</div><div class='del'>-    result = strlen(file);</div><div class='del'>-    if (file[result-1] == 'a') {</div><div class='del'>-	return load_lib(file);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    fd = open(file, O_RDONLY);</div><div class='del'>-    if (fd == -1) {</div><div class='del'>-	dln_errno = errno;</div><div class='del'>-	return -1;</div><div class='del'>-    }</div><div class='del'>-    result = load_1(fd, 0, file);</div><div class='del'>-    close(fd);</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void*</div><div class='del'>-dln_sym(name)</div><div class='del'>-    const char *name;</div><div class='del'>-{</div><div class='del'>-    struct nlist *sym;</div><div class='del'>-</div><div class='del'>-    if (st_lookup(sym_tbl, name, &amp;sym))</div><div class='del'>-	return (void*)sym-&gt;n_value;</div><div class='del'>-    return NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif /* USE_DLN_A_OUT */</div><div class='del'>-</div><div class='del'>-#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='del'>-#  include &lt;nlist.h&gt;</div><div class='del'>-#  include &lt;link.h&gt;</div><div class='del'>-# else</div><div class='del'>-#  include &lt;dlfcn.h&gt;</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef __hpux</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-#include "dl.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(_AIX)</div><div class='del'>-#include &lt;ctype.h&gt;	/* for isdigit()	*/</div><div class='del'>-#include &lt;errno.h&gt;	/* for global errno	*/</div><div class='del'>-#include &lt;sys/ldr.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef NeXT</div><div class='del'>-#if NS_TARGET_MAJOR &lt; 4</div><div class='del'>-#include &lt;mach-o/rld.h&gt;</div><div class='del'>-#else</div><div class='del'>-#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='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-#ifdef MACOSX_DYLD</div><div class='del'>-#include &lt;mach-o/dyld.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined _WIN32 &amp;&amp; !defined __CYGWIN__</div><div class='del'>-#include &lt;windows.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef _WIN32_WCE</div><div class='del'>-#undef FormatMessage</div><div class='del'>-#define FormatMessage FormatMessageA</div><div class='del'>-#undef LoadLibrary</div><div class='del'>-#define LoadLibrary LoadLibraryA</div><div class='del'>-#undef GetProcAddress</div><div class='del'>-#define GetProcAddress GetProcAddressA</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static const char *</div><div class='add'>+char *</div><div class='ctx'> dln_strerror()</div><div class='ctx'> {</div><div class='del'>-#ifdef USE_DLN_A_OUT</div><div class='ctx'>     char *strerror();</div><div class='ctx'> </div><div class='ctx'>     switch (dln_errno) {</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'>@@ -1190,681 +1000,89 @@ dln_strerror()</div><div class='ctx'>       default:</div><div class='ctx'> 	return strerror(dln_errno);</div><div class='ctx'>     }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef USE_DLN_DLOPEN</div><div class='del'>-    return (char*)dlerror();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined _WIN32 &amp;&amp; !defined __CYGWIN__</div><div class='del'>-    static char message[1024];</div><div class='del'>-    int error = GetLastError();</div><div class='del'>-    char *p = message;</div><div class='del'>-    p += sprintf(message, "%d: ", error);</div><div class='del'>-    FormatMessage(</div><div class='del'>-	FORMAT_MESSAGE_FROM_SYSTEM	 | FORMAT_MESSAGE_IGNORE_INSERTS,</div><div class='del'>-	NULL,</div><div class='del'>-	error,</div><div class='del'>-	MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),</div><div class='del'>-	p,</div><div class='del'>-	sizeof message - strlen(message),</div><div class='del'>-	NULL);</div><div class='del'>-</div><div class='del'>-    for (p = message; *p; p++) {</div><div class='del'>-	if (*p == '\n' || *p == '\r')</div><div class='del'>-	    *p = ' ';</div><div class='del'>-    }</div><div class='del'>-    return message;</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-</div><div class='del'>-#if defined(_AIX) &amp;&amp; ! defined(_IA64)</div><div class='del'>-static void</div><div class='del'>-aix_loaderror(const char *pathname)</div><div class='add'>+dln_perror(str)</div><div class='add'>+    char *str;</div><div class='ctx'> {</div><div class='del'>-    char *message[8], errbuf[1024];</div><div class='del'>-    int i,j;</div><div class='del'>-</div><div class='del'>-    struct errtab { </div><div class='del'>-	int errnum;</div><div class='del'>-	char *errstr;</div><div class='del'>-    } load_errtab[] = {</div><div class='del'>-	{L_ERROR_TOOMANY,	"too many errors, rest skipped."},</div><div class='del'>-	{L_ERROR_NOLIB,		"can't load library:"},</div><div class='del'>-	{L_ERROR_UNDEF,		"can't find symbol in library:"},</div><div class='del'>-	{L_ERROR_RLDBAD,</div><div class='del'>-	     "RLD index out of range or bad relocation type:"},</div><div class='del'>-	{L_ERROR_FORMAT,	"not a valid, executable xcoff file:"},</div><div class='del'>-	{L_ERROR_MEMBER,</div><div class='del'>-	     "file not an archive or does not contain requested member:"},</div><div class='del'>-	{L_ERROR_TYPE,		"symbol table mismatch:"},</div><div class='del'>-	{L_ERROR_ALIGN,		"text alignment in file is wrong."},</div><div class='del'>-	{L_ERROR_SYSTEM,	"System error:"},</div><div class='del'>-	{L_ERROR_ERRNO,		NULL}</div><div class='del'>-    };</div><div class='del'>-</div><div class='del'>-#define LOAD_ERRTAB_LEN	(sizeof(load_errtab)/sizeof(load_errtab[0]))</div><div class='del'>-#define ERRBUF_APPEND(s) strncat(errbuf, s, sizeof(errbuf)-strlen(errbuf)-1)</div><div class='del'>-</div><div class='del'>-    snprintf(errbuf, 1024, "load failed - %s ", pathname);</div><div class='del'>-</div><div class='del'>-    if (!loadquery(1, &amp;message[0], sizeof(message))) </div><div class='del'>-	ERRBUF_APPEND(strerror(errno));</div><div class='del'>-    for(i = 0; message[i] &amp;&amp; *message[i]; i++) {</div><div class='del'>-	int nerr = atoi(message[i]);</div><div class='del'>-	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='del'>-		ERRBUF_APPEND(load_errtab[i].errstr);</div><div class='del'>-	}</div><div class='del'>-	while (isdigit(*message[i])) message[i]++; </div><div class='del'>-	ERRBUF_APPEND(message[i]);</div><div class='del'>-	ERRBUF_APPEND("\n");</div><div class='del'>-    }</div><div class='del'>-    errbuf[strlen(errbuf)-1] = '\0';	/* trim off last newline */</div><div class='del'>-    rb_loaderror(errbuf);</div><div class='del'>-    return;</div><div class='add'>+    fprintf(stderr, "%s: %s\n", str, dln_strerror());</div><div class='ctx'> }</div><div class='del'>-#endif</div><div class='del'>-</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='ctx'> </div><div class='ctx'> void*</div><div class='del'>-dln_load(file)</div><div class='del'>-    const char *file;</div><div class='add'>+dln_get_sym(name)</div><div class='add'>+    char *name;</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='del'>-#if !defined(_AIX) &amp;&amp; !defined(NeXT)</div><div class='del'>-    const char *error = 0;</div><div class='del'>-#define DLN_ERROR() (error = dln_strerror(), strcpy(ALLOCA_N(char, strlen(error) + 1), error))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined _WIN32 &amp;&amp; !defined __CYGWIN__</div><div class='del'>-    HINSTANCE handle;</div><div class='del'>-    char winfile[MAXPATHLEN];</div><div class='del'>-    void (*init_fct)();</div><div class='del'>-    char *buf;</div><div class='del'>-</div><div class='del'>-    if (strlen(file) &gt;= MAXPATHLEN) rb_loaderror("filename too long");</div><div class='del'>-</div><div class='del'>-    /* Load the file as an object one */</div><div class='del'>-    init_funcname(&amp;buf, file);</div><div class='del'>-</div><div class='del'>-    strcpy(winfile, file);</div><div class='del'>-</div><div class='del'>-    /* Load file */</div><div class='del'>-    if ((handle = LoadLibrary(winfile)) == NULL) {</div><div class='del'>-	error = dln_strerror();</div><div class='del'>-	goto failed;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ((init_fct = (void(*)())GetProcAddress(handle, buf)) == NULL) {</div><div class='del'>-	rb_loaderror("%s - %s\n%s", dln_strerror(), buf, file);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Call the init code */</div><div class='del'>-    (*init_fct)();</div><div class='del'>-    return handle;</div><div class='del'>-#else</div><div class='del'>-#ifdef USE_DLN_A_OUT</div><div class='del'>-    if (load(file) == -1) {</div><div class='del'>-	error = dln_strerror();</div><div class='del'>-	goto failed;</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-#else</div><div class='del'>-</div><div class='del'>-    char *buf;</div><div class='del'>-    /* Load the file as an object one */</div><div class='del'>-    init_funcname(&amp;buf, file);</div><div class='del'>-</div><div class='del'>-#ifdef USE_DLN_DLOPEN</div><div class='del'>-#define DLN_DEFINED</div><div class='del'>-    {</div><div class='del'>-	void *handle;</div><div class='del'>-	void (*init_fct)();</div><div class='del'>-</div><div class='del'>-#ifndef RTLD_LAZY</div><div class='del'>-# define RTLD_LAZY 1</div><div class='del'>-#endif</div><div class='del'>-#ifdef __INTERIX</div><div class='del'>-# undef RTLD_GLOBAL</div><div class='del'>-#endif</div><div class='del'>-#ifndef RTLD_GLOBAL</div><div class='del'>-# define RTLD_GLOBAL 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-	/* Load file */</div><div class='del'>-	if ((handle = (void*)dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) {</div><div class='del'>-	    error = dln_strerror();</div><div class='del'>-	    goto failed;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	init_fct = (void(*)())dlsym(handle, buf);</div><div class='del'>-	if (init_fct == NULL) {</div><div class='del'>-	    error = DLN_ERROR();</div><div class='del'>-	    dlclose(handle);</div><div class='del'>-	    goto failed;</div><div class='del'>-	}</div><div class='del'>-	/* Call the init code */</div><div class='del'>-	(*init_fct)();</div><div class='del'>-</div><div class='del'>-	return handle;</div><div class='del'>-    }</div><div class='del'>-#endif /* USE_DLN_DLOPEN */</div><div class='del'>-</div><div class='del'>-#ifdef __hpux</div><div class='del'>-#define DLN_DEFINED</div><div class='del'>-    {</div><div class='del'>-	shl_t lib = NULL;</div><div class='del'>-	int flags;</div><div class='del'>-	void (*init_fct)();</div><div class='del'>-</div><div class='del'>-	flags = BIND_DEFERRED;</div><div class='del'>-	lib = shl_load(file, flags, 0);</div><div class='del'>-	if (lib == NULL) {</div><div class='del'>-	    extern int errno;</div><div class='del'>-	    rb_loaderror("%s - %s", strerror(errno), file);</div><div class='del'>-	}</div><div class='del'>-	shl_findsym(&amp;lib, buf, TYPE_PROCEDURE, (void*)&amp;init_fct);</div><div class='del'>-	if (init_fct == NULL) {</div><div class='del'>-	    shl_findsym(&amp;lib, buf, TYPE_UNDEFINED, (void*)&amp;init_fct);</div><div class='del'>-	    if (init_fct == NULL) {</div><div class='del'>-		errno = ENOSYM;</div><div class='del'>-		rb_loaderror("%s - %s", strerror(ENOSYM), file);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	(*init_fct)();</div><div class='del'>-	return (void*)lib;</div><div class='del'>-    }</div><div class='del'>-#endif /* hpux */</div><div class='del'>-</div><div class='del'>-#if defined(_AIX) &amp;&amp; ! defined(_IA64)</div><div class='del'>-#define DLN_DEFINED</div><div class='del'>-    {</div><div class='del'>-	void (*init_fct)();</div><div class='del'>-</div><div class='del'>-	init_fct = (void(*)())load((char*)file, 1, 0);</div><div class='del'>-	if (init_fct == NULL) {</div><div class='del'>-	    aix_loaderror(file);</div><div class='del'>-	}</div><div class='del'>-	if (loadbind(0, (void*)dln_load, (void*)init_fct) == -1) {</div><div class='del'>-	    aix_loaderror(file);</div><div class='del'>-	}</div><div class='del'>-	(*init_fct)();</div><div class='del'>-	return (void*)init_fct;</div><div class='del'>-    }</div><div class='del'>-#endif /* _AIX */</div><div class='del'>-</div><div class='del'>-#if defined(NeXT) || defined(MACOSX_DYLD)</div><div class='del'>-#define DLN_DEFINED</div><div class='del'>-/*----------------------------------------------------</div><div class='del'>-   By SHIROYAMA Takayuki Psi@fortune.nest.or.jp</div><div class='del'>- </div><div class='del'>-   Special Thanks...</div><div class='del'>-    Yu tomoak-i@is.aist-nara.ac.jp,</div><div class='del'>-    Mi hisho@tasihara.nest.or.jp,</div><div class='del'>-    sunshine@sunshineco.com,</div><div class='del'>-    and... Miss ARAI Akino(^^;)</div><div class='del'>- ----------------------------------------------------*/</div><div class='del'>-#if defined(NeXT) &amp;&amp; (NS_TARGET_MAJOR &lt; 4)/* NeXTSTEP rld functions */</div><div class='del'>-</div><div class='del'>-    {</div><div class='del'>-        NXStream* s;</div><div class='del'>-	unsigned long init_address;</div><div class='del'>-	char *object_files[2] = {NULL, NULL};</div><div class='del'>-</div><div class='del'>-	void (*init_fct)();</div><div class='del'>-	</div><div class='del'>-	object_files[0] = (char*)file;</div><div class='del'>-	</div><div class='del'>-	s = NXOpenFile(2,NX_WRITEONLY);</div><div class='del'>-</div><div class='del'>-	/* 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='del'>-	    rb_loaderror("Failed to load %.200s", file);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* 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='del'>-	    rb_loaderror("Failed to lookup Init function %.200s", file);</div><div class='del'>-	}</div><div class='del'>-</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='del'>-	init_fct = (void(*)())init_address;</div><div class='del'>-	(*init_fct)();</div><div class='del'>-	return (void*)init_address;</div><div class='del'>-    }</div><div class='del'>-#else/* OPENSTEP dyld functions */</div><div class='del'>-    {</div><div class='del'>-	int dyld_result;</div><div class='del'>-	NSObjectFileImage obj_file; /* handle, but not use it */</div><div class='del'>-	/* "file" is module file name .</div><div class='del'>-	   "buf" is pointer to initial function name with "_" . */</div><div class='del'>-</div><div class='del'>-	void (*init_fct)();</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	dyld_result = NSCreateObjectFileImageFromFile(file, &amp;obj_file);</div><div class='del'>-</div><div class='del'>-	if (dyld_result != NSObjectFileImageSuccess) {</div><div class='del'>-	    rb_loaderror("Failed to load %.200s", file);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	NSLinkModule(obj_file, file, NSLINKMODULE_OPTION_BINDNOW);</div><div class='del'>-</div><div class='del'>-	/* lookup the initial function */</div><div class='del'>-	if(!NSIsSymbolNameDefined(buf)) {</div><div class='del'>-	    rb_loaderror("Failed to lookup Init function %.200s",file);</div><div class='del'>-	}	</div><div class='del'>-	init_fct = NSAddressOfSymbol(NSLookupAndBindSymbol(buf));</div><div class='del'>-	(*init_fct)();</div><div class='del'>-</div><div class='del'>-	return (void*)init_fct;</div><div class='del'>-    }</div><div class='del'>-#endif /* rld or dyld */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef __BEOS__</div><div class='del'>-# define DLN_DEFINED</div><div class='del'>-    {</div><div class='del'>-      status_t err_stat;  /* BeOS error status code */</div><div class='del'>-      image_id img_id;    /* extention module unique id */</div><div class='del'>-      void (*init_fct)(); /* initialize function for extention module */</div><div class='del'>-</div><div class='del'>-      /* load extention module */</div><div class='del'>-      img_id = load_add_on(file);</div><div class='del'>-      if (img_id &lt;= 0) {</div><div class='del'>-	rb_loaderror("Failed to load %.200s", file);</div><div class='del'>-      }</div><div class='del'>-      </div><div class='del'>-      /* find symbol for module initialize function. */</div><div class='del'>-      /* The Be Book KernelKit Images section described to use</div><div class='del'>-	 B_SYMBOL_TYPE_TEXT for symbol of function, not</div><div class='del'>-	 B_SYMBOL_TYPE_CODE. Why ? */</div><div class='del'>-      /* strcat(init_fct_symname, "__Fv"); */  /* parameter nothing. */</div><div class='del'>-      /* "__Fv" dont need! The Be Book Bug ? */</div><div class='del'>-      err_stat = get_image_symbol(img_id, buf,</div><div class='del'>-				  B_SYMBOL_TYPE_TEXT, (void **)&amp;init_fct);</div><div class='del'>-</div><div class='del'>-      if (err_stat != B_NO_ERROR) {</div><div class='del'>-	char real_name[MAXPATHLEN];</div><div class='del'>-</div><div class='del'>-	strcpy(real_name, buf);</div><div class='del'>-	strcat(real_name, "__Fv");</div><div class='del'>-        err_stat = get_image_symbol(img_id, real_name,</div><div class='del'>-				    B_SYMBOL_TYPE_TEXT, (void **)&amp;init_fct);</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      if ((B_BAD_IMAGE_ID == err_stat) || (B_BAD_INDEX == err_stat)) {</div><div class='del'>-	unload_add_on(img_id);</div><div class='del'>-	rb_loaderror("Failed to lookup Init function %.200s", file);</div><div class='del'>-      }</div><div class='del'>-      else if (B_NO_ERROR != err_stat) {</div><div class='del'>-	char errmsg[] = "Internal of BeOS version. %.200s (symbol_name = %s)";</div><div class='del'>-	unload_add_on(img_id);</div><div class='del'>-	rb_loaderror(errmsg, strerror(err_stat), buf);</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      /* call module initialize function. */</div><div class='del'>-      (*init_fct)();</div><div class='del'>-      return (void*)img_id;</div><div class='del'>-    }</div><div class='del'>-#endif /* __BEOS__*/</div><div class='del'>-</div><div class='del'>-#ifdef __MACOS__   /* Mac OS 9 or before */</div><div class='del'>-# define DLN_DEFINED</div><div class='del'>-    {</div><div class='del'>-      OSErr err;</div><div class='del'>-      FSSpec libspec;</div><div class='del'>-      CFragConnectionID connID;</div><div class='del'>-      Ptr mainAddr;</div><div class='del'>-      char errMessage[1024];</div><div class='del'>-      Boolean isfolder, didsomething;</div><div class='del'>-      Str63 fragname;</div><div class='del'>-      Ptr symAddr;</div><div class='del'>-      CFragSymbolClass class;</div><div class='del'>-      void (*init_fct)();</div><div class='del'>-      char fullpath[MAXPATHLEN];</div><div class='del'>-</div><div class='del'>-      strcpy(fullpath, file);</div><div class='del'>-</div><div class='del'>-      /* resolve any aliases to find the real file */</div><div class='del'>-      c2pstr(fullpath);</div><div class='del'>-      (void)FSMakeFSSpec(0, 0, fullpath, &amp;libspec);</div><div class='del'>-      err = ResolveAliasFile(&amp;libspec, 1, &amp;isfolder, &amp;didsomething);</div><div class='del'>-      if (err) {</div><div class='del'>-	  rb_loaderror("Unresolved Alias - %s", file);</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      /* Load the fragment (or return the connID if it is already loaded */</div><div class='del'>-      fragname[0] = 0;</div><div class='del'>-      err = GetDiskFragment(&amp;libspec, 0, 0, fragname, </div><div class='del'>-			    kLoadCFrag, &amp;connID, &amp;mainAddr,</div><div class='del'>-			    errMessage);</div><div class='del'>-      if (err) {</div><div class='del'>-	  p2cstr(errMessage);</div><div class='del'>-	  rb_loaderror("%s - %s",errMessage , file);</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      /* Locate the address of the correct init function */</div><div class='del'>-      c2pstr(buf);</div><div class='del'>-      err = FindSymbol(connID, buf, &amp;symAddr, &amp;class);</div><div class='del'>-      if (err) {</div><div class='del'>-	  rb_loaderror("Unresolved symbols - %s" , file);</div><div class='del'>-      }</div><div class='del'>-      init_fct = (void (*)())symAddr;</div><div class='del'>-      (*init_fct)();</div><div class='del'>-      return (void*)init_fct;</div><div class='del'>-    }</div><div class='del'>-#endif /* __MACOS__ */</div><div class='del'>-</div><div class='del'>-#if defined(__VMS)</div><div class='del'>-#define DLN_DEFINED</div><div class='del'>-    {</div><div class='del'>-	long status;</div><div class='del'>-	void (*init_fct)();</div><div class='del'>-	char *fname, *p1, *p2;</div><div class='del'>-</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='del'>-	fname = (char *)__alloca(strlen(file)+1);</div><div class='del'>-	strcpy(fname,file);</div><div class='del'>-	if (p1 = strrchr(fname,'/'))</div><div class='del'>-	    fname = p1 + 1;</div><div class='del'>-	if (p2 = strrchr(fname,'.'))</div><div class='del'>-	    *p2 = '\0';</div><div class='del'>-</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='del'>-	    error = dln_strerror();</div><div class='del'>-	    goto failed;</div><div class='del'>-	} else if (!$VMS_STATUS_SUCCESS(status)) {</div><div class='del'>-	    error = DLN_ERROR();</div><div class='del'>-	    goto failed;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Call the init code */</div><div class='del'>-	(*init_fct)();</div><div class='del'>-</div><div class='del'>-	return 1;</div><div class='del'>-    }</div><div class='del'>-#endif /* __VMS */</div><div class='del'>-</div><div class='del'>-#ifndef DLN_DEFINED</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif /* USE_DLN_A_OUT */</div><div class='del'>-#endif</div><div class='del'>-#if !defined(_AIX) &amp;&amp; !defined(NeXT)</div><div class='del'>-  failed:</div><div class='del'>-    rb_loaderror("%s - %s", error, file);</div><div class='del'>-#endif</div><div class='add'>+    struct nlist *sym;</div><div class='ctx'> </div><div class='del'>-#endif /* NO_DLN_LOAD */</div><div class='del'>-    return 0;			/* dummy return */</div><div class='add'>+    if (st_lookup(sym_tbl, name, &amp;sym))</div><div class='add'>+	return (void*)sym-&gt;n_value;</div><div class='add'>+    return NULL;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static char *dln_find_1();</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-dln_find_exe(fname, path)</div><div class='del'>-    const char *fname;</div><div class='del'>-    const char *path;</div><div class='add'>+#ifdef TEST</div><div class='add'>+xmalloc(size)</div><div class='add'>+    int size;</div><div class='ctx'> {</div><div class='del'>-    if (!path) {</div><div class='del'>-	path = getenv(PATH_ENV);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!path) {</div><div class='del'>-#if defined(MSDOS) || defined(_WIN32) || defined(__human68k__) || defined(__MACOS__)</div><div class='del'>-	path = "/usr/local/bin;/usr/ucb;/usr/bin;/bin;.";</div><div class='del'>-#else</div><div class='del'>-	path = "/usr/local/bin:/usr/ucb:/usr/bin:/bin:.";</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-    return dln_find_1(fname, path, 1);</div><div class='add'>+    return malloc(size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-char *</div><div class='del'>-dln_find_file(fname, path)</div><div class='del'>-    const char *fname;</div><div class='del'>-    const char *path;</div><div class='add'>+xcalloc(size, n)</div><div class='add'>+    int size, n;</div><div class='ctx'> {</div><div class='del'>-#ifndef __MACOS__</div><div class='del'>-    if (!path) path = ".";</div><div class='del'>-    return dln_find_1(fname, path, 0);</div><div class='del'>-#else</div><div class='del'>-    if (!path) path = ".";</div><div class='del'>-    return _macruby_path_conv_posix_to_macos(dln_find_1(fname, path, 0));</div><div class='del'>-#endif</div><div class='add'>+    return calloc(size, n);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static char fbuf[MAXPATHLEN];</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-dln_find_1(fname, path, exe_flag)</div><div class='del'>-    const char *fname;</div><div class='del'>-    const char *path;</div><div class='del'>-    int exe_flag;		/* non 0 if looking for executable. */</div><div class='add'>+main(argc, argv)</div><div class='add'>+    int argc;</div><div class='add'>+    char **argv;</div><div class='ctx'> {</div><div class='del'>-    register const char *dp;</div><div class='del'>-    register const char *ep;</div><div class='del'>-    register char *bp;</div><div class='del'>-    struct stat st;</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-    const char* mac_fullpath;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (!fname) return (char *)fname;</div><div class='del'>-    if (fname[0] == '/') return (char *)fname;</div><div class='del'>-    if (strncmp("./", fname, 2) == 0 || strncmp("../", fname, 3) == 0)</div><div class='del'>-      return (char *)fname;</div><div class='del'>-    if (exe_flag &amp;&amp; strchr(fname, '/')) return (char *)fname;</div><div class='del'>-#ifdef DOSISH</div><div class='del'>-    if (fname[0] == '\\') return (char *)fname;</div><div class='del'>-# ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-    if (strlen(fname) &gt; 2 &amp;&amp; fname[1] == ':') return (char *)fname;</div><div class='del'>-# endif</div><div class='del'>-    if (strncmp(".\\", fname, 2) == 0 || strncmp("..\\", fname, 3) == 0)</div><div class='del'>-      return (char *)fname;</div><div class='del'>-    if (exe_flag &amp;&amp; strchr(fname, '\\')) return (char *)fname;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    for (dp = path;; dp = ++ep) {</div><div class='del'>-	register int l;</div><div class='del'>-	int i;</div><div class='del'>-	int fspace;</div><div class='del'>-</div><div class='del'>-	/* extract a component */</div><div class='del'>-	ep = strchr(dp, PATH_SEP[0]);</div><div class='del'>-	if (ep == NULL)</div><div class='del'>-	    ep = dp+strlen(dp);</div><div class='del'>-</div><div class='del'>-	/* find the length of that component */</div><div class='del'>-	l = ep - dp;</div><div class='del'>-	bp = fbuf;</div><div class='del'>-	fspace = sizeof fbuf - 2;</div><div class='del'>-	if (l &gt; 0) {</div><div class='del'>-	    /*</div><div class='del'>-	    **	If the length of the component is zero length,</div><div class='del'>-	    **	start from the current directory.  If the</div><div class='del'>-	    **	component begins with "~", start from the</div><div class='del'>-	    **	user's $HOME environment variable.  Otherwise</div><div class='del'>-	    **	take the path literally.</div><div class='del'>-	    */</div><div class='del'>-</div><div class='del'>-	    if (*dp == '~' &amp;&amp; (l == 1 ||</div><div class='del'>-#if defined(DOSISH)</div><div class='del'>-			       dp[1] == '\\' || </div><div class='del'>-#endif</div><div class='del'>-			       dp[1] == '/')) {</div><div class='del'>-		char *home;</div><div class='del'>-</div><div class='del'>-		home = getenv("HOME");</div><div class='del'>-		if (home != NULL) {</div><div class='del'>-		    i = strlen(home);</div><div class='del'>-		    if ((fspace -= i) &lt; 0)</div><div class='del'>-			goto toolong;</div><div class='del'>-		    memcpy(bp, home, i);</div><div class='del'>-		    bp += i;</div><div class='del'>-		}</div><div class='del'>-		dp++;</div><div class='del'>-		l--;</div><div class='del'>-	    }</div><div class='del'>-	    if (l &gt; 0) {</div><div class='del'>-		if ((fspace -= l) &lt; 0)</div><div class='del'>-		    goto toolong;</div><div class='del'>-		memcpy(bp, dp, l);</div><div class='del'>-		bp += l;</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    /* add a "/" between directory and filename */</div><div class='del'>-	    if (ep[-1] != '/')</div><div class='del'>-		*bp++ = '/';</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* now append the file name */</div><div class='del'>-	i = strlen(fname);</div><div class='del'>-	if ((fspace -= i) &lt; 0) {</div><div class='del'>-	  toolong:</div><div class='del'>-	    fprintf(stderr, "openpath: pathname too long (ignored)\n");</div><div class='del'>-	    *bp = '\0';</div><div class='del'>-	    fprintf(stderr, "\tDirectory \"%s\"\n", fbuf);</div><div class='del'>-	    fprintf(stderr, "\tFile \"%s\"\n", fname);</div><div class='del'>-	    goto next;</div><div class='del'>-	}</div><div class='del'>-	memcpy(bp, fname, i + 1);</div><div class='del'>-</div><div class='del'>-#if defined(DOSISH)</div><div class='del'>-	if (exe_flag) {</div><div class='del'>-	    static const char extension[][5] = {</div><div class='del'>-#if defined(MSDOS)</div><div class='del'>-		".com", ".exe", ".bat",</div><div class='del'>-#if defined(DJGPP)</div><div class='del'>-		".btm", ".sh", ".ksh", ".pl", ".sed",</div><div class='del'>-#endif</div><div class='del'>-#elif defined(__EMX__) || defined(_WIN32)</div><div class='del'>-		".exe", ".com", ".cmd", ".bat",</div><div class='del'>-/* end of __EMX__ or _WIN32 */</div><div class='del'>-#else</div><div class='del'>-		".r", ".R", ".x", ".X", ".bat", ".BAT",</div><div class='del'>-/* __human68k__ */</div><div class='del'>-#endif</div><div class='del'>-	    };</div><div class='del'>-	    int j;</div><div class='del'>-</div><div class='del'>-	    for (j = 0; j &lt; sizeof(extension) / sizeof(extension[0]); j++) {</div><div class='del'>-		if (fspace &lt; strlen(extension[j])) {</div><div class='del'>-		    fprintf(stderr, "openpath: pathname too long (ignored)\n");</div><div class='del'>-		    fprintf(stderr, "\tDirectory \"%.*s\"\n", (int) (bp - fbuf), fbuf);</div><div class='del'>-		    fprintf(stderr, "\tFile \"%s%s\"\n", fname, extension[j]);</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-		strcpy(bp + i, extension[j]);</div><div class='del'>-#ifndef __MACOS__</div><div class='del'>-		if (stat(fbuf, &amp;st) == 0)</div><div class='del'>-		    return fbuf;</div><div class='del'>-#else</div><div class='del'>-		if (mac_fullpath = _macruby_exist_file_in_libdir_as_posix_name(fbuf))</div><div class='del'>-		    return mac_fullpath;</div><div class='add'>+    if (dln_init(argv[0]) == -1) {</div><div class='add'>+	dln_perror("dln_init");</div><div class='add'>+	exit(1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-#endif</div><div class='del'>-	    }</div><div class='del'>-	    goto next;</div><div class='add'>+    while (argc &gt; 1) {</div><div class='add'>+	printf("obj: %s\n", argv[1]);</div><div class='add'>+	if (dln_load(argv[1]) == -1) {</div><div class='add'>+	    dln_perror("dln_load");</div><div class='add'>+	    exit(1);</div><div class='ctx'> 	}</div><div class='del'>-#endif /* MSDOS or _WIN32 or __human68k__ or __EMX__ */</div><div class='add'>+	argc--;</div><div class='add'>+	argv++;</div><div class='add'>+    }</div><div class='add'>+    if (dln_load_lib("libdln.a") == -1) {</div><div class='add'>+	dln_perror("dln_init");</div><div class='add'>+	exit(1);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-#ifndef __MACOS__</div><div class='del'>-	if (stat(fbuf, &amp;st) == 0) {</div><div class='del'>-	    if (exe_flag == 0) return fbuf;</div><div class='del'>-	    /* looking for executable */</div><div class='del'>-	    if (!S_ISDIR(st.st_mode) &amp;&amp; eaccess(fbuf, X_OK) == 0)</div><div class='del'>-		return fbuf;</div><div class='del'>-	}</div><div class='del'>-#else</div><div class='del'>-	if (mac_fullpath = _macruby_exist_file_in_libdir_as_posix_name(fbuf)) {</div><div class='del'>-	    if (exe_flag == 0) return mac_fullpath;</div><div class='del'>-	    /* looking for executable */</div><div class='del'>-	    if (stat(mac_fullpath, &amp;st) == 0) {</div><div class='del'>-		if (!S_ISDIR(st.st_mode) &amp;&amp; eaccess(mac_fullpath, X_OK) == 0)</div><div class='del'>-		    return mac_fullpath;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='add'>+    if (dln_get_sym("_foo"))</div><div class='add'>+	printf("_foo defined\n");</div><div class='add'>+    else</div><div class='add'>+	printf("_foo undefined\n");</div><div class='add'>+}</div><div class='add'>+#endif				/* TEST */</div><div class='ctx'> </div><div class='del'>-      next:</div><div class='del'>-	/* if not, and no other alternatives, life is bleak */</div><div class='del'>-	if (*ep == '\0') {</div><div class='del'>-	    return NULL;</div><div class='del'>-	}</div><div class='add'>+#else				/* USE_DLN */</div><div class='ctx'> </div><div class='del'>-	/* otherwise try the next component in the search path */</div><div class='del'>-    }</div><div class='add'>+int</div><div class='add'>+dln_init(file)</div><div class='add'>+    char *file;</div><div class='add'>+{</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </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='add'>+int</div><div class='add'>+dln_load(file)</div><div class='add'>+    char *file;</div><div class='ctx'> {</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='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </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='add'>+int</div><div class='add'>+dln_load_lib(file)</div><div class='add'>+    char *file;</div><div class='ctx'> {</div><div class='del'>-    sys$unwind(1, 0);</div><div class='del'>-    return 1;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#endif /* __VMS */</div><div class='add'>+#endif				/* USE_DLN */</div><div class='head'>diff --git a/dln.h b/dln.h<br/>index 182cf9f9f4..0589954e73 100644<br/>--- a/<a href='/ruby.git/tree/dln.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dln.h</a><br/>+++ b/<a href='/ruby.git/tree/dln.h?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>dln.h</a></div><div class='hunk'>@@ -1,40 +1,33 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   dln.h -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Revision: 1.1.1.1 $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='ctx'>   created at: Wed Jan 19 16:53:09 JST 1994</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-</div><div class='del'>-**********************************************************************/</div><div class='del'>-</div><div class='add'>+************************************************/</div><div class='ctx'> #ifndef DLN_H</div><div class='ctx'> #define DLN_H</div><div class='ctx'> </div><div class='del'>-#ifdef __cplusplus</div><div class='del'>-# ifndef  HAVE_PROTOTYPES</div><div class='del'>-#  define HAVE_PROTOTYPES 1</div><div class='del'>-# endif</div><div class='del'>-# ifndef  HAVE_STDARG_PROTOTYPES</div><div class='del'>-#  define HAVE_STDARG_PROTOTYPES 1</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='add'>+#include &lt;sys/errno.h&gt;</div><div class='ctx'> </div><div class='del'>-#undef _</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-# define _(args) args</div><div class='del'>-#else</div><div class='del'>-# define _(args) ()</div><div class='del'>-#endif</div><div class='add'>+int dln_init();</div><div class='add'>+int dln_load();</div><div class='add'>+int dln_load_lib();</div><div class='ctx'> </div><div class='del'>-char *dln_find_exe _((const char*,const char*));</div><div class='del'>-char *dln_find_file _((const char*,const char*));</div><div class='add'>+extern int dln_errno;</div><div class='ctx'> </div><div class='del'>-#ifdef USE_DLN_A_OUT</div><div class='del'>-extern char *dln_argv0;</div><div class='del'>-#endif</div><div class='add'>+#define DLN_ENOENT	ENOENT	/* No such file or directory */</div><div class='add'>+#define DLN_ENOEXEC	ENOEXEC	/* Exec format error */</div><div class='add'>+#define DLN_ECONFL	101	/* Symbol name conflict */</div><div class='add'>+#define DLN_ENOINIT	102	/* No inititalizer given */</div><div class='add'>+#define DLN_EUNDEF	103	/* Undefine symbol remains */</div><div class='add'>+#define DLN_ENOTLIB	104	/* Not a library file */</div><div class='add'>+#define DLN_EBADLIB	105	/* Malformed library file */</div><div class='add'>+#define DLN_EINIT	106	/* Not initialized */</div><div class='add'>+</div><div class='add'>+char *dln_strerror();</div><div class='ctx'> </div><div class='del'>-void *dln_load _((const char*));</div><div class='ctx'> #endif</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/dmyext.c b/dmyext.c<br/>deleted file mode 100644<br/>index 4120d493c3..0000000000<br/>--- a/<a href='/ruby.git/tree/dmyext.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>dmyext.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-void</div><div class='del'>-Init_ext()</div><div class='del'>-{</div><div class='del'>-}</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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-1.8.0 b/doc/NEWS-1.8.0<br/>deleted file mode 100644<br/>index b4445fa59f..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/NEWS-1.8.0?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/NEWS-1.8.0</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,837 +0,0 @@</div><div class='del'>-= command line options</div><div class='del'>-</div><div class='del'>-: -W option</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-  can be assignable again.  the original stdio are preserved as STDIN,</div><div class='del'>-  STDOUT, STDERR.</div><div class='del'>-</div><div class='del'>-: $VERBOSE now has 3 levels</div><div class='del'>-</div><div class='del'>-  nil - silence, false - medium (default), true - verbose</div><div class='del'>-</div><div class='del'>-: allocation framework</div><div class='del'>-</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='del'>-</div><div class='del'>-: comparison of exception classes in a rescue clause</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-: constants lookup</div><div class='del'>-</div><div class='del'>-  improved at the performance of searching by using an internal hash</div><div class='del'>-  table.</div><div class='del'>-</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='del'>-</div><div class='del'>-: expression parenthesis in the first argument</div><div class='del'>-</div><div class='del'>-  altered to get the following code (note the space after p):</div><div class='del'>-</div><div class='del'>-    p ("xx"*2).to_i</div><div class='del'>-</div><div class='del'>-  Interpreted as:</div><div class='del'>-</div><div class='del'>-    p (("xx"*2).to_i)</div><div class='del'>-</div><div class='del'>-  Instead of:</div><div class='del'>-</div><div class='del'>-    (p("xx"*2)).to_i</div><div class='del'>-</div><div class='del'>-: implicit comparison in conditional expressions</div><div class='del'>-</div><div class='del'>-  Obsoleted except when it is used in -e.</div><div class='del'>-</div><div class='del'>-  : between Range and $.</div><div class='del'>-      Use explicit comparison instead.</div><div class='del'>-</div><div class='del'>-  : between Regexp and $_</div><div class='del'>-      Use the unary method ~/re/ instead.</div><div class='del'>-</div><div class='del'>-: to_str</div><div class='del'>-</div><div class='del'>-  added to get objects which define to_str() treated as String's.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-: multiple assignment behavior</div><div class='del'>-</div><div class='del'>-  Fixed so that "*a = nil" results in "a == []".</div><div class='del'>-</div><div class='del'>-= changes in core class library</div><div class='del'>-</div><div class='del'>-: open</div><div class='del'>-</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='del'>-</div><div class='del'>-: sprintf</div><div class='del'>-</div><div class='del'>-  new format specifier "%p" is available.</div><div class='del'>-</div><div class='del'>-: lambda and proc</div><div class='del'>-</div><div class='del'>-  Proc object returns from these methods has the following attributes:</div><div class='del'>-</div><div class='del'>-  * strict argument number check</div><div class='del'>-  * break and return terminates the proc execution.</div><div class='del'>-</div><div class='del'>-: warn(message)</div><div class='del'>-</div><div class='del'>-  a method to give warnings.</div><div class='del'>-</div><div class='del'>-: abort()</div><div class='del'>-</div><div class='del'>-  takes optional terminate message argument.</div><div class='del'>-</div><div class='del'>-: Object#initialize_copy</div><div class='del'>-</div><div class='del'>-  copy constructor for clone and dup.</div><div class='del'>-</div><div class='del'>-: Object#instance_variable_set, Object#instance_variable_get</div><div class='del'>-</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='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Array#transpose</div><div class='del'>-</div><div class='del'>-  added.</div><div class='del'>-</div><div class='del'>-: Array#fetch(index [, default])</div><div class='del'>-</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='del'>-</div><div class='del'>-: Array#insert(n, other, ...)</div><div class='del'>-</div><div class='del'>-  Added. [ruby-talk:14289]</div><div class='del'>-</div><div class='del'>-  This is much the same as (({ary[n,0] = [other,...]})) except</div><div class='del'>-  returing self.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-: Array#sort!</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-: Array#filter</div><div class='del'>-</div><div class='del'>-  Previously deprecated, now removed.  Use Array#collect!.</div><div class='del'>-</div><div class='del'>-: Array#pack, String#unpack</div><div class='del'>-</div><div class='del'>-  Allows comment in template strings.</div><div class='del'>-</div><div class='del'>-: Array#pack, String#unpack</div><div class='del'>-</div><div class='del'>-  New templates 'q' and 'Q' for 64bit integer (signed and unsigned respectively).</div><div class='del'>-</div><div class='del'>-: Array#new</div><div class='del'>-</div><div class='del'>-  Now takes block to fill initial values.  E.g.</div><div class='del'>-</div><div class='del'>-	Array.new(10) { |i| i + 1 }</div><div class='del'>-	=&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]</div><div class='del'>-</div><div class='del'>-: Array#fill</div><div class='del'>-</div><div class='del'>-  Takes block to get the values to fill.</div><div class='del'>-</div><div class='del'>-: Array#fetch</div><div class='del'>-</div><div class='del'>-  Takes block to get the default value.</div><div class='del'>-</div><div class='del'>-: Array#zip</div><div class='del'>-</div><div class='del'>-  added.</div><div class='del'>-</div><div class='del'>-: Hash#update</div><div class='del'>-</div><div class='del'>-  Takes block to resolve key conflict.</div><div class='del'>-</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='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-  This is much the same as (({str[n, 0] = other})) except returing</div><div class='del'>-  self.</div><div class='del'>-</div><div class='del'>-: String#lstrip, rstrip, lstrip!, rstrip!</div><div class='del'>-</div><div class='del'>-  Added.  These strip only left or right part of a string.</div><div class='del'>-</div><div class='del'>-: String#match</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: String/Array methods</div><div class='del'>-</div><div class='del'>-  Returns an instance of receivers class.</div><div class='del'>-</div><div class='del'>-: String.new</div><div class='del'>-</div><div class='del'>-  The first argument becomes optional.</div><div class='del'>-</div><div class='del'>-: Symbol#intern</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Symbol.all_symbols</div><div class='del'>-</div><div class='del'>-  Added. [ruby-dev:12921]</div><div class='del'>-</div><div class='del'>-: IO</div><div class='del'>-</div><div class='del'>-  64bit off_t support by Janathan Baker.</div><div class='del'>-</div><div class='del'>-: IO#read</div><div class='del'>-: IO#sysread</div><div class='del'>-</div><div class='del'>-  takes optinal second argument for read buffer.</div><div class='del'>-</div><div class='del'>-: IO::sysopen</div><div class='del'>-</div><div class='del'>-  New method to get a raw file descriptor.</div><div class='del'>-</div><div class='del'>-: IO#sysseek</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: IO#fsync</div><div class='del'>-</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='del'>-</div><div class='del'>-: IO.open</div><div class='del'>-</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='del'>-</div><div class='del'>-: IO.for_fd</div><div class='del'>-</div><div class='del'>-  Added as a synonym for IO.new.</div><div class='del'>-</div><div class='del'>-: IO.read</div><div class='del'>-</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='del'>-</div><div class='del'>-: File#fnmatch, File::Constants::FNM_*</div><div class='del'>-</div><div class='del'>-  Added.  Refer to the fnmatch(3) manpage for details.</div><div class='del'>-</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='del'>-</div><div class='del'>-  e.g.</div><div class='del'>-</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='del'>-</div><div class='del'>-: File.lchmod</div><div class='del'>-: File.lchown</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: File.open, IO.open</div><div class='del'>-</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='del'>-</div><div class='del'>-: Regexp#options</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Regexp.last_match(n)</div><div class='del'>-</div><div class='del'>-  Extended to take an optional argument.</div><div class='del'>-</div><div class='del'>-: MatchData#captures</div><div class='del'>-</div><div class='del'>-  added.</div><div class='del'>-</div><div class='del'>-: Dir#path</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Dir.chdir</div><div class='del'>-</div><div class='del'>-  Extended to take a block.</div><div class='del'>-</div><div class='del'>-: Dir.glob</div><div class='del'>-</div><div class='del'>-  Made to support meta-character escaping by a backslash.  Wildcards</div><div class='del'>-  and spaces may now be escaped using a backslash.</div><div class='del'>-</div><div class='del'>-: Dir.open</div><div class='del'>-</div><div class='del'>-  Changed to return what the block returns when a block is given, just</div><div class='del'>-  as File.open does. (It always returned (({nil})) in 1.6 and</div><div class='del'>-  prior)</div><div class='del'>-</div><div class='del'>-: Dir.chdir</div><div class='del'>-</div><div class='del'>-  Changed to warn only when invoked from multiple threads or no block</div><div class='del'>-  is given. [ruby-dev:13823]</div><div class='del'>-</div><div class='del'>-    Dir.chdir('foo') {</div><div class='del'>-      Dir.chdir('bar') {   # previously warned</div><div class='del'>-        puts Dir.pwd</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-: Dir#pos=</div><div class='del'>-</div><div class='del'>-  Returns the new position instead of self.</div><div class='del'>-</div><div class='del'>-: Dir::glob</div><div class='del'>-</div><div class='del'>-  Now accepts optional FNM_* flags via the second argument, whereas</div><div class='del'>-  Dir::[] doesn't.</div><div class='del'>-</div><div class='del'>-    Dir.glob("makefile", File::FNM_CASEFOLD) #=&gt; ['Makefile', 'makefile']</div><div class='del'>-</div><div class='del'>-: Class#inherited</div><div class='del'>-</div><div class='del'>-  Method is called when Class is inherited by another class.</div><div class='del'>-</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='del'>-</div><div class='del'>-        Prints out "A inherited by B"</div><div class='del'>-</div><div class='del'>-: Module#include?</div><div class='del'>-</div><div class='del'>-  Added. [ruby-dev:13941] </div><div class='del'>-</div><div class='del'>-: Module#included</div><div class='del'>-</div><div class='del'>-  Added.  This is a hook called after Module#append_feature.</div><div class='del'>-</div><div class='del'>-: Module#method_removed</div><div class='del'>-: Module#method_undefined</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Module.new, Class.new</div><div class='del'>-</div><div class='del'>-  Extended to take block.</div><div class='del'>-</div><div class='del'>-: Time</div><div class='del'>-</div><div class='del'>-  Extended to accept a negative time_t. (Only when the platform</div><div class='del'>-  supports it)</div><div class='del'>-</div><div class='del'>-    p Time.at(-1)</div><div class='del'>-    =&gt; Thu Jan 01 08:59:59 JST 1970</div><div class='del'>-</div><div class='del'>-: Time#to_a</div><div class='del'>-: Time#zone</div><div class='del'>-</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='del'>-</div><div class='del'>-: Marshal to use marshal_dump and marshal_load</div><div class='del'>-</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='del'>-</div><div class='del'>-: Marshal</div><div class='del'>-</div><div class='del'>-  Fixed not to dump anonymous classes/modules.</div><div class='del'>-</div><div class='del'>-  Fixed with loading modules.</div><div class='del'>-</div><div class='del'>-: Thread#group</div><div class='del'>-</div><div class='del'>-  new method to get belonging  ThreadGroup.</div><div class='del'>-</div><div class='del'>-: Thread#terminate</div><div class='del'>-</div><div class='del'>-  synonym of Thread#exit</div><div class='del'>-</div><div class='del'>-: Thread#join</div><div class='del'>-</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='del'>-</div><div class='del'>-: ThreagGroup#enclose</div><div class='del'>-</div><div class='del'>-  prohibits thread movement from/to enclosed groups.</div><div class='del'>-</div><div class='del'>-: Range#step([step=1])</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: SystemCallError</div><div class='del'>-</div><div class='del'>-  SystemCallError's "===" match (used in rescue also) is now based on its errno.</div><div class='del'>-</div><div class='del'>-: Interrupt</div><div class='del'>-</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='del'>-</div><div class='del'>-: NameError and NoMethodError</div><div class='del'>-</div><div class='del'>-  Moved and now NoMethodError &lt; NameError &lt; StandardError.</div><div class='del'>-</div><div class='del'>-: NoMethodError</div><div class='del'>-</div><div class='del'>-  Added. [ruby-dev:12763]</div><div class='del'>-</div><div class='del'>-: NotImplementError</div><div class='del'>-</div><div class='del'>-  Finally obsoleted.  Use NotImplementedError.</div><div class='del'>-</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='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Proc#==</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-: Process.times</div><div class='del'>-</div><div class='del'>-  Moved from Time.times. (Time.times still remains but emits a</div><div class='del'>-  warning)</div><div class='del'>-</div><div class='del'>-: Process.waitall</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</div><div class='del'>-: Process::Status</div><div class='del'>-</div><div class='del'>-  Added.  (({$?})) is now an instance of this class.</div><div class='del'>-</div><div class='del'>-: Process::UID, Process::GID, Process::Sys,</div><div class='del'>-</div><div class='del'>-  Added.</div><div class='del'>-</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='del'>-</div><div class='del'>-  lib/date.rb now provides both Date and DateTime.</div><div class='del'>-</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='del'>-</div><div class='del'>-  Date#mjd now returns the chronological modified Julian day number.</div><div class='del'>-</div><div class='del'>-  All facilities about tjd have been removed.</div><div class='del'>-</div><div class='del'>-: Curses</div><div class='del'>-</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='del'>-</div><div class='del'>-: Net::HTTP</div><div class='del'>-</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='del'>-</div><div class='del'>-: Socket.pack_sockaddr_in, Socket.unpack_sockaddr_in</div><div class='del'>-</div><div class='del'>-  Added.  Utility for direct Socket access.</div><div class='del'>-</div><div class='del'>-: Socket.pack_sockaddr_un, Socket.unpack_sockaddr_un</div><div class='del'>-</div><div class='del'>-  Added.  Utility for direct Socket access.</div><div class='del'>-</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='del'>-</div><div class='del'>-  implements prettyprint algorithm.</div><div class='del'>-</div><div class='del'>-: lib/profiler</div><div class='del'>-</div><div class='del'>-  library to implement -r "profile"</div><div class='del'>-</div><div class='del'>-: lib/racc/parser</div><div class='del'>-</div><div class='del'>-  RACC parser generator runtime in Ruby.</div><div class='del'>-</div><div class='del'>-: lib/scanf</div><div class='del'>-</div><div class='del'>-  scan string and retrieve object with format</div><div class='del'>-</div><div class='del'>-: lib/set</div><div class='del'>-</div><div class='del'>-  Set class</div><div class='del'>-</div><div class='del'>-: lib/runit</div><div class='del'>-</div><div class='del'>-  RubyUnit compatible layer for test/unit</div><div class='del'>-</div><div class='del'>-: lib/test/unit</div><div class='del'>-</div><div class='del'>-  unit testing framework for Ruby</div><div class='del'>-</div><div class='del'>-: lib/tmpdir</div><div class='del'>-</div><div class='del'>-  get temporary directory path.</div><div class='del'>-</div><div class='del'>-: lib/tsort</div><div class='del'>-</div><div class='del'>-  topological sorting library.</div><div class='del'>-</div><div class='del'>-: lib/rexml</div><div class='del'>-</div><div class='del'>-  REXML XML library</div><div class='del'>-</div><div class='del'>-: lib/webrick</div><div class='del'>-</div><div class='del'>-  generic internet server kit</div><div class='del'>-</div><div class='del'>-: lib/xmlrpc</div><div class='del'>-</div><div class='del'>-  simple RPC via XML</div><div class='del'>-</div><div class='del'>-: lib/un</div><div class='del'>-</div><div class='del'>-  used like 'ruby -run -e cp -- -p foo bar'.  neat, isn't it?</div><div class='del'>-</div><div class='del'>-: lib/win32/registry</div><div class='del'>-</div><div class='del'>-  win32/registry is registry accessor</div><div class='del'>-</div><div class='del'>-: lib/yaml</div><div class='del'>-</div><div class='del'>-  YAML Ain't Mark-up Language</div><div class='del'>-</div><div class='del'>-= removed libraries</div><div class='del'>-</div><div class='del'>-: lib/ftplib</div><div class='del'>-</div><div class='del'>-  use net/ftp instead.</div><div class='del'>-</div><div class='del'>-: lib/telnet</div><div class='del'>-</div><div class='del'>-  use net/telnet instead.</div><div class='del'>-</div><div class='del'>-= new port</div><div class='del'>-</div><div class='del'>-: WindowsCE port</div><div class='del'>-: Win32 BCC</div><div class='del'>-</div><div class='del'>-= interpreter implementation</div><div class='del'>-</div><div class='del'>-: garbage collector</div><div class='del'>-</div><div class='del'>-  faster, but uses more memory for the worst case.</div><div class='del'>-</div><div class='del'>-: string concatenation</div><div class='del'>-</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/>deleted file mode 100644<br/>index 7272c374b6..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/forwardable.rd?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/forwardable.rd</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>- -- forwardable.rb</div><div class='del'>-						</div><div class='del'>-                                                $Release Version: 1.1 $</div><div class='del'>-                                                $Revision$</div><div class='del'>-                                                $Date$</div><div class='del'>-						Original version by Tosh</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= Forwardable</div><div class='del'>-</div><div class='del'>-A Module to define delegations for selected methods to a class.</div><div class='del'>-</div><div class='del'>-== Usage</div><div class='del'>-</div><div class='del'>-Using through extending the class.</div><div class='del'>-  </div><div class='del'>-  class Foo</div><div class='del'>-    extend Forwardable</div><div class='del'>-</div><div class='del'>-    def_delegators("@out", "printf", "print")</div><div class='del'>-    def_delegators(:@in, :gets)</div><div class='del'>-    def_delegator(:@contents, :[], "content_at")</div><div class='del'>-  end</div><div class='del'>-  f = Foo.new</div><div class='del'>-  f.printf ...</div><div class='del'>-  f.gets</div><div class='del'>-  f.content_at(1)</div><div class='del'>-</div><div class='del'>-== Methods</div><div class='del'>-</div><div class='del'>---- Forwardable#def_instance_delegators(accessor, *methods)</div><div class='del'>-</div><div class='del'>-      adding the delegations for each method of ((|methods|)) to</div><div class='del'>-      ((|accessor|)).</div><div class='del'>-</div><div class='del'>---- Forwardable#def_instance_delegator(accessor, method, ali = method)</div><div class='del'>-      </div><div class='del'>-      adding the delegation for ((|method|)) to ((|accessor|)). When</div><div class='del'>-      you give optional argument ((|ali|)), ((|ali|)) is used as the</div><div class='del'>-      name of the delegation method, instead of ((|method|)).</div><div class='del'>-</div><div class='del'>---- Forwardable#def_delegators(accessor, *methods)</div><div class='del'>-</div><div class='del'>-      the alias of ((|Forwardable#def_instance_delegators|)).</div><div class='del'>-</div><div class='del'>---- Forwardable#def_delegator(accessor, method, ali = method)</div><div class='del'>-      </div><div class='del'>-      the alias of ((|Forwardable#def_instance_delegator|)).</div><div class='del'>-</div><div class='del'>-= SingleForwardable</div><div class='del'>-</div><div class='del'>-a Module to define delegations for selected methods to an object.</div><div class='del'>-</div><div class='del'>-== Usage</div><div class='del'>-</div><div class='del'>-Using through extending the object.</div><div class='del'>-</div><div class='del'>-  g = Goo.new</div><div class='del'>-  g.extend SingleForwardable</div><div class='del'>-  g.def_delegator("@out", :puts)</div><div class='del'>-  g.puts ...</div><div class='del'>-</div><div class='del'>-== Methods</div><div class='del'>-</div><div class='del'>---- SingleForwardable#def_singleton_delegators(accessor, *methods)</div><div class='del'>-</div><div class='del'>-      adding the delegations for each method of ((|methods|)) to</div><div class='del'>-      ((|accessor|)).</div><div class='del'>-</div><div class='del'>---- SingleForwardable#def_singleton_delegator(accessor, method, ali = method)</div><div class='del'>-</div><div class='del'>-      adding the delegation for ((|method|)) to ((|accessor|)). When</div><div class='del'>-      you give optional argument ((|ali|)), ((|ali|)) is used as the</div><div class='del'>-      name of the delegation method, instead of ((|method|)).</div><div class='del'>-</div><div class='del'>---- SingleForwardable#def_delegators(accessor, *methods)</div><div class='del'>-</div><div class='del'>-      the alias of ((|SingleForwardable#def_instance_delegators|)).</div><div class='del'>-</div><div class='del'>---- SingleForwardable#def_delegator(accessor, method, ali = method)</div><div class='del'>-</div><div class='del'>-      the alias of ((|SingleForwardable#def_instance_delegator|)).</div><div class='del'>-=end</div><div class='head'>diff --git a/doc/forwardable.rd.ja b/doc/forwardable.rd.ja<br/>deleted file mode 100644<br/>index d928fddc5e..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/forwardable.rd.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/forwardable.rd.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,81 +0,0 @@</div><div class='del'>-  -- forwatable.rb</div><div class='del'>-                                                $Release Version: 1.1 $</div><div class='del'>-                                                $Revision$</div><div class='del'>-                                                $Date$</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-= Forwardable</div><div class='del'>-</div><div class='del'>-¥¯¥é¥¹¤ËÂÐ¤·¥á¥½¥Ã¥É¤Î°Ñ¾ùµ¡Ç½¤òÄêµÁ¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-== »È¤¤Êý</div><div class='del'>-</div><div class='del'>-¥¯¥é¥¹¤ËÂÐ¤·¤Æextend¤·¤Æ»È¤¤¤Þ¤¹. </div><div class='del'>-  </div><div class='del'>-  class Foo</div><div class='del'>-    extend Forwardable</div><div class='del'>-</div><div class='del'>-    def_delegators("@out", "printf", "print")</div><div class='del'>-    def_delegators(:@in, :gets)</div><div class='del'>-    def_delegator(:@contents, :[], "content_at")</div><div class='del'>-  end</div><div class='del'>-  f = Foo.new</div><div class='del'>-  f.printf ...</div><div class='del'>-  f.gets</div><div class='del'>-  f.content_at(1)</div><div class='del'>-</div><div class='del'>-== ¥á¥½¥Ã¥É</div><div class='del'>-</div><div class='del'>---- Forwardable#def_instance_delegators(accessor, *methods)</div><div class='del'>-</div><div class='del'>-      ((|methods|))¤ÇÅÏ¤µ¤ì¤¿¥á¥½¥Ã¥É¤Î¥ê¥¹¥È¤ò((|accessor¤Ë|))°Ñ¾ù¤¹¤ë</div><div class='del'>-      ¤è¤¦¤Ë¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- Forwardable#def_instance_delegator(accessor, method, ali = method)</div><div class='del'>-</div><div class='del'>-      ((||method|))¤ÇÅÏ¤µ¤ì¤¿¥á¥½¥Ã¥É¤ò((|accessor|))¤Ë°Ñ¾ù¤¹¤ë¤è¤¦¤Ë¤·</div><div class='del'>-      ¤Þ¤¹. ((|ali|))¤¬°ú¿ô¤È¤·¤ÆÅÏ¤µ¤ì¤¿¤È¤­¤Ï, ¥á¥½¥Ã¥É((|ali|))¤¬¸Æ¤Ð</div><div class='del'>-      ¤ì¤¿¤È¤­¤Ë¤Ï, ((|accessor|))¤ËÂÐ¤·((|method|))¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- Forwardable#def_delegators(accessor, *methods)</div><div class='del'>-</div><div class='del'>-      ((|Forwardable#def_instance_delegators|))¤ÎÊÌÌ¾¤Ç¤¹.</div><div class='del'>-</div><div class='del'>---- Forwardable#def_delegator(accessor, method, ali = method)</div><div class='del'>-</div><div class='del'>-      ((|Forwardable#def_instance_delegator|))¤ÎÊÌÌ¾¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-= SingleForwardable</div><div class='del'>-</div><div class='del'>-¥ª¥Ö¥¸¥§¥¯¥È¤ËÂÐ¤·, ¥á¥½¥Ã¥É¤Î°Ñ¾ùµ¡Ç½¤òÄêµÁ¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-== »È¤¤Êý</div><div class='del'>-</div><div class='del'>-¥ª¥Ö¥¸¥§¥¯¥È¤ËÂÐ¤·¤Æ((|extend|))¤·¤Æ»È¤¤¤Þ¤¹. </div><div class='del'>-</div><div class='del'>-  g = Goo.new</div><div class='del'>-  g.extend SingleForwardable</div><div class='del'>-  g.def_delegator("@out", :puts)</div><div class='del'>-  g.puts ...</div><div class='del'>-</div><div class='del'>-== ¥á¥½¥Ã¥É</div><div class='del'>-</div><div class='del'>---- SingleForwardable#def_singleton_delegators(accessor, *methods)</div><div class='del'>-</div><div class='del'>-      ((|methods|))¤ÇÅÏ¤µ¤ì¤¿¥á¥½¥Ã¥É¤Î¥ê¥¹¥È¤ò((|accessor|))¤Ë°Ñ¾ù¤¹¤ë</div><div class='del'>-      ¤è¤¦¤Ë¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- SingleForwardable#def_singleton_delegator(accessor, method, ali = method)</div><div class='del'>-</div><div class='del'>-      ((|method|))¤ÇÅÏ¤µ¤ì¤¿¥á¥½¥Ã¥É¤ò((|accessor|))¤Ë°Ñ¾ù¤¹¤ë¤è¤¦¤Ë¤·¤Þ</div><div class='del'>-      ¤¹. ((|ali|))¤¬°ú¿ô¤È¤·¤ÆÅÏ¤µ¤ì¤¿¤È¤­¤Ï, ¥á¥½¥Ã¥É((|ali|))¤¬¸Æ¤Ð¤ì</div><div class='del'>-      ¤¿¤È¤­¤Ë¤Ï, ((|accessor|))¤ËÂÐ¤·((|method|))¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- SingleForwardable#def_delegators(accessor, *methods)</div><div class='del'>-</div><div class='del'>-      ((|SingleForwardable#def_singleton_delegators|))¤ÎÊÌÌ¾¤Ç¤¹.</div><div class='del'>-</div><div class='del'>---- SingleForwardable#def_delegator(accessor, method, ali = method)</div><div class='del'>-</div><div class='del'>-      ((|SingleForwardable#def_singleton_delegator|))¤ÎÊÌÌ¾¤Ç¤¹.</div><div class='del'>-=end</div><div class='head'>diff --git a/doc/irb/irb-tools.rd.ja b/doc/irb/irb-tools.rd.ja<br/>deleted file mode 100644<br/>index 64d9ab29c8..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/irb/irb-tools.rd.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/irb/irb-tools.rd.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,185 +0,0 @@</div><div class='del'>-irb´ØÏ¢¤ª¤Þ¤±¥³¥Þ¥ó¥É¤È¥é¥¤¥Ö¥é¥ê</div><div class='del'>-				$Release Version: 0.7.1 $</div><div class='del'>-			   	$Revision$</div><div class='del'>-			   	$Date$</div><div class='del'>-			   	by Keiju ISHITSUKA(Nihon Rational Co.,Ltd.)</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-:¥³¥Þ¥ó¥É:</div><div class='del'>-* rtags		-- ruby tags command</div><div class='del'>-</div><div class='del'>-:´Ø¿ô¥é¥¤¥Ö¥é¥ê:</div><div class='del'>-* xmp		-- irb version of gotoken xmp-function</div><div class='del'>-</div><div class='del'>-:¥¯¥é¥¹¥é¥¤¥Ö¥é¥ê:</div><div class='del'>-* frame.rb      -- frame tracer</div><div class='del'>-* completion.rb -- irb completor</div><div class='del'>-</div><div class='del'>-= rtags</div><div class='del'>-</div><div class='del'>-rtags¤ÏemacsµÚ¤ÓviÍÑ¤Î, TAG¥Õ¥¡¥¤¥ë¤ò¤Ä¤¯¤ë¥³¥Þ¥ó¥É¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-== »È¤¤Êý</div><div class='del'>-</div><div class='del'>-   rtags [-vi] file....</div><div class='del'>-</div><div class='del'>-¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ËemacsÍÑ¤ÎTAGS¥Õ¥¡¥¤¥ë¤¬¤Ç¤­¤Þ¤¹. -vi¥ª¥×¥·¥ç¥ó¤ò</div><div class='del'>-¤Ä¤±¤¿»þ¤Ë¤ÏviÍÑ¤Îtags¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-emacs¤Î¾ì¹ç, ÄÌ¾ï¤Îetags.el¤¬¤½¤Î¤Þ¤Þ»È¤¨¤Þ¤¹. ¸¡º÷²ÄÇ½¤Ê¤Î¤Ï,</div><div class='del'>-</div><div class='del'>-* ¥¯¥é¥¹</div><div class='del'>-* ¥á¥½¥Ã¥É</div><div class='del'>-* ÆÃ°Û¥á¥½¥Ã¥É</div><div class='del'>-* alias</div><div class='del'>-* attr¤ÇÀë¸À¤µ¤ì¤¿¥¢¥¯¥»¥µ(¥Ñ¥é¥á¡¼¥¿¤¬¥·¥ó¥Ü¥ë¤«Ê¸»úÎó¥ê¥Æ¥é¥ë¤Ë¸Â¤ë)</div><div class='del'>-* attr_XXX¤ÇÀë¸À¤µ¤ì¤¿¥¢¥¯¥»¥µ(¥Ñ¥é¥á¡¼¥¿¤¬¥·¥ó¥Ü¥ë¤«Ê¸»úÎó¥ê¥Æ¥é¥ë¤Ë¸Â¤ë)</div><div class='del'>-</div><div class='del'>-¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-C¤Ê¤É¤Ç»È¤Ã¤Æ¤¤¤ë¤Î¤È°ã¤¦¤Î¤Ï, ¥³¥ó¥×¥ê¡¼¥·¥ç¥ó¤Ë´Ø¤¹¤ëÉôÊ¬¤Ç,</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'>-  ::¥¯¥é¥¹Ì¾::....::¥¯¥é¥¹Ì¾</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'>-  ::¥¯¥é¥¹Ì¾::....::¥¯¥é¥¹Ì¾.¥á¥½¥Ã¥ÉÌ¾</div><div class='del'>-</div><div class='del'>-¤Ç¥³¥ó¥×¥ê¡¼¥·¥ç¥ó¤ò¹Ô¤Ê¤¦¤È¤³¤í¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-= xmp.rb</div><div class='del'>-</div><div class='del'>-¤´¤È¤±¤óxmp¤Î¾å°Ì¸ß´¹¥Ð¡¼¥¸¥ç¥ó¤Ç¤¹. ¤¿¤À, Èó¾ï¤Ë½Å¤¤¤Î¤Ç¤´¤È¤±¤óxmp¤Ç</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'>-    require "irb/xmp"</div><div class='del'>-    xmp &lt;&lt;END</div><div class='del'>-    foo = 1</div><div class='del'>-    foo</div><div class='del'>-    END</div><div class='del'>-    ---</div><div class='del'>-    foo = 1</div><div class='del'>-        ==&gt;1</div><div class='del'>-    foo</div><div class='del'>-	==&gt;1</div><div class='del'>-</div><div class='del'>-=== XMP¥¤¥ó¥¹¥¿¥ó¥¹¤òÍÑ¤¤¤ë.</div><div class='del'>-</div><div class='del'>-¤³¤Î¾ì¹ç¤Ï, XMP¤¬¥³¥ó¥Æ¥­¥¹¥È¾ðÊó¤ò»ý¤Ä¤Î¤Ç, ÊÑ¿ô¤ÎÃÍ¤Ê¤É¤òÊÝ»ý¤·¤Æ¤¤</div><div class='del'>-¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-  require "irb/xmp"</div><div class='del'>-  xmp = XMP.new</div><div class='del'>-  xmp.puts &lt;&lt;END</div><div class='del'>-  foo = 1</div><div class='del'>-  foo</div><div class='del'>-  END</div><div class='del'>-  xmp.puts &lt;&lt;END</div><div class='del'>-  foo</div><div class='del'>-  END</div><div class='del'>-  ===</div><div class='del'>-  foo = 1</div><div class='del'>-      ==&gt;1</div><div class='del'>-  foo</div><div class='del'>-      ==&gt;1</div><div class='del'>-  foo</div><div class='del'>-      ==&gt;1</div><div class='del'>-</div><div class='del'>-== ¥³¥ó¥Æ¥­¥¹¥È¤Ë´Ø¤·¤Æ</div><div class='del'>-</div><div class='del'>-XMP¥á¥½¥Ã¥É·²¤Î¥³¥ó¥Æ¥­¥¹¥È¤Ï, ¸Æ¤Ó½Ð¤¹Á°¤Î¥³¥ó¥Æ¥­¥¹¥È¤ÇÉ¾²Á¤µ¤ì¤Þ¤¹.</div><div class='del'>-ÌÀ¼¨Åª¤Ë¥³¥ó¥Æ¥­¥¹¥È¤ò»ØÄê¤¹¤ë¤È¤½¤Î¥³¥ó¥Æ¥­¥¹¥È¤ÇÉ¾²Á¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-Îã:</div><div class='del'>-</div><div class='del'>-  xmp "foo", an_binding</div><div class='del'>-</div><div class='del'>-:Ãí:</div><div class='del'>-¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤Ë¤ÏÂÐ±þ¤·¤Æ¤¤¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-= frame.rb</div><div class='del'>-¸½ºß¼Â¹ÔÃæ¤Î¥Õ¥ì¡¼¥à¾ðÊó¤ò¼è¤ê°·¤¦¤¿¤á¤Î¥¯¥é¥¹¤Ç¤¹. </div><div class='del'>-</div><div class='del'>-* IRB::Frame.top(n = 0)</div><div class='del'>-  ¾å¤«¤énÈÖÌÜ¤Î¥³¥ó¥Æ¥­¥¹¥È¤ò¼è¤ê½Ð¤·¤Þ¤¹. n¤Ï0¤¬ºÇ¾å°Ì¤Ë¤Ê¤ê¤Þ¤¹.</div><div class='del'>-* IRB::Frame.bottom(n = 0)</div><div class='del'>-  ²¼¤«¤énÈÖÌÜ¤Î¥³¥ó¥Æ¥­¥¹¥È¤ò¼è¤ê½Ð¤·¤Þ¤¹. n¤Ï0¤¬ºÇ²¼°Ì¤Ë¤Ê¤ê¤Þ¤¹.</div><div class='del'>-* IRB::Frame.sender</div><div class='del'>-  ¥»¥ó¥À¤Ë¤Ê¤Ã¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ò¼è¤ê½Ð¤·¤Þ¤¹. ¥»¥ó¥À¤È¤Ï, ¤½¤Î¥á¥½¥Ã</div><div class='del'>-  ¥É¤ò¸Æ¤Ó½Ð¤·¤¿Â¦¤Îself¤Î¤³¤È¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-:Ãí:</div><div class='del'>-set_trace_func¤òÍÑ¤¤¤ÆRuby¤Î¼Â¹Ô¤ò¥È¥ì¡¼¥¹¤·¤Æ¤¤¤Þ¤¹. ¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤Ë</div><div class='del'>-¤ÏÂÐ±þ¤·¤Æ¤¤¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-= completion.rb</div><div class='del'>-irb¤Îcompletionµ¡Ç½¤òÄó¶¡¤¹¤ë¤â¤Î¤Ç¤¹. </div><div class='del'>-</div><div class='del'>-== »È¤¤Êý</div><div class='del'>-</div><div class='del'>-   % irb -r irb/completion</div><div class='del'>-</div><div class='del'>-¤È¤¹¤ë¤«, ~/.irbrc Ãæ¤Ë</div><div class='del'>-</div><div class='del'>-   require "irb/completion"</div><div class='del'>-</div><div class='del'>-¤òÆþ¤ì¤Æ¤¯¤À¤µ¤¤. irb¼Â¹ÔÃæ¤Ë require "irb/completion" ¤·¤Æ¤â¤è¤¤¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-irb¼Â¹ÔÃæ¤Ë (TAB) ¤ò²¡¤¹¤È¥³¥ó¥×¥ì¡¼¥·¥ç¥ó¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-¥È¥Ã¥×¥ì¥Ù¥ë¤Ç(TAB)¤ò²¡¤¹¤È¤¹¤Ù¤Æ¤Î¹½Ê¸Í×ÁÇ, ¥¯¥é¥¹, ¥á¥½¥Ã¥É¤Î¸õÊä¤¬¤Ç</div><div class='del'>-¤Þ¤¹. ¸õÊä¤¬Í£°ì¤Ê¤é¤Ð´°Á´¤ËÊä´°¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-  irb(main):001:0&gt; in    </div><div class='del'>-  in                    inspect               instance_eval</div><div class='del'>-  include               install_alias_method  instance_of?</div><div class='del'>-  initialize            install_aliases       instance_variables</div><div class='del'>-  irb(main):001:0&gt; inspect</div><div class='del'>-  "main"</div><div class='del'>-  irb(main):002:0&gt; foo = Object.new</div><div class='del'>-  #&lt;Object:0x4027146c&gt;</div><div class='del'>-</div><div class='del'>-  ((|ÊÑ¿ôÌ¾.|))¤Î¸å¤Ë(TAB)¤ò²¡¤¹¤È, ¤½¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¥á¥½¥Ã¥É°ìÍ÷¤¬¤Ç¤Þ</div><div class='del'>-  ¤¹.</div><div class='del'>-</div><div class='del'>-  irb(main):003:0&gt; foo.</div><div class='del'>-  foo.==                  foo.frozen?             foo.protected_methods</div><div class='del'>-  foo.===                 foo.hash                foo.public_methods</div><div class='del'>-  foo.=~                  foo.id                  foo.respond_to?</div><div class='del'>-  foo.__id__              foo.inspect             foo.send</div><div class='del'>-  foo.__send__            foo.instance_eval       foo.singleton_methods</div><div class='del'>-  foo.class               foo.instance_of?        foo.taint</div><div class='del'>-  foo.clone               foo.instance_variables  foo.tainted?</div><div class='del'>-  foo.display             foo.is_a?               foo.to_a</div><div class='del'>-  foo.dup                 foo.kind_of?            foo.to_s</div><div class='del'>-  foo.eql?                foo.method              foo.type</div><div class='del'>-  foo.equal?              foo.methods             foo.untaint</div><div class='del'>-  foo.extend              foo.nil?                </div><div class='del'>-  foo.freeze              foo.private_methods     </div><div class='del'>-</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-% Begin Emacs Environment</div><div class='del'>-% Local Variables:</div><div class='del'>-% mode: text</div><div class='del'>-% comment-column: 0</div><div class='del'>-% comment-start: "%"</div><div class='del'>-% comment-end: "\n"</div><div class='del'>-% End:</div><div class='del'>-%</div><div class='del'>-</div><div class='head'>diff --git a/doc/irb/irb.rd b/doc/irb/irb.rd<br/>deleted file mode 100644<br/>index a42cd46680..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/irb/irb.rd?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/irb/irb.rd</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,392 +0,0 @@</div><div class='del'>-irb -- interactive ruby</div><div class='del'>-		$Release Version: 0.9 $</div><div class='del'>-		$Revision$</div><div class='del'>-		$Date$</div><div class='del'>-		by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='del'>-		by gotoken-san who is original translater from japanese version</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-= What is irb?</div><div class='del'>-</div><div class='del'>-irb stands for `interactive ruby'. irb is a tool to execute interactively</div><div class='del'>-ruby expressions read from stdin. </div><div class='del'>-</div><div class='del'>-= Invoking</div><div class='del'>-</div><div class='del'>-  % irb</div><div class='del'>-</div><div class='del'>-= Usage</div><div class='del'>-</div><div class='del'>-Use of irb is easy if you know ruby.  Executing irb, prompts are </div><div class='del'>-displayed as follows. Then, enter expression of ruby. A input is</div><div class='del'>-executed when it is syntacticaly completed. </div><div class='del'>-</div><div class='del'>-  dim% irb</div><div class='del'>-  irb(main):001:0&gt; 1+2</div><div class='del'>-  3</div><div class='del'>-  irb(main):002:0&gt; class Foo</div><div class='del'>-  irb(main):003:1&gt;  def foo</div><div class='del'>-  irb(main):004:2&gt;    print 1</div><div class='del'>-  irb(main):005:2&gt;  end</div><div class='del'>-  irb(main):006:1&gt; end</div><div class='del'>-  nil</div><div class='del'>-  irb(main):007:0&gt; </div><div class='del'>-</div><div class='del'>-And, Readline extesion module can be used with irb. Using Readline</div><div class='del'>-is the standard default action if Readline is installed. </div><div class='del'>-</div><div class='del'>-= Command line option</div><div class='del'>-</div><div class='del'>-  irb.rb [options] file_name opts</div><div class='del'>-  options:</div><div class='del'>-  -f		    suppress read ~/.irbrc </div><div class='del'>-  -m		    bc mode (fraction or matrix are available)</div><div class='del'>-  -d                set $DEBUG  to true (same as `ruby -d')</div><div class='del'>-  -Kc		    same as `ruby -Kc'</div><div class='del'>-  -r load-module    same as `ruby -r'</div><div class='del'>-  --verbose	    command input is echoed(default)</div><div class='del'>-  --noverbose	    command input isn't echoed</div><div class='del'>-  --echo	    commands are echoed immediately before execution(default)</div><div class='del'>-  --noecho	    commands aren't echoed immediately before execution</div><div class='del'>-  --inspect	    uses `inspect' for output (the default except bc mode)</div><div class='del'>-  --noinspect	    doesn't uses inspect for output</div><div class='del'>-  --readline	    uses Readline extension module</div><div class='del'>-  --noreadline	    doesn't use Readline extension module</div><div class='del'>-  --prompt prompt-mode</div><div class='del'>-  --prompt-mode prompt-mode</div><div class='del'>-		    switches prompt mode. Pre-defined prompt modes are</div><div class='del'>-		    `default', `simple', `xmp' and `inf-ruby'</div><div class='del'>-			    </div><div class='del'>-  --inf-ruby-mode   uses prompt appreciate for inf-ruby-mode on emacs. </div><div class='del'>-		    Suppresses --readline. </div><div class='del'>-  --simple-prompt   simple prompt mode</div><div class='del'>-  --noprompt	    no prompt</div><div class='del'>-  --tracer	    display trace for each execution of commands.</div><div class='del'>-  --back-trace-limit n</div><div class='del'>-		    displayes backtrace top n and tail n. The default</div><div class='del'>-		    value is 16. </div><div class='del'>-  --irb_debug n	    sets internal debug level to n (It shouldn't be used)</div><div class='del'>-  -v, --version	    prints the version of irb</div><div class='del'>-</div><div class='del'>-= Configurations</div><div class='del'>-</div><div class='del'>-irb reads `~/.irbrc' when it is invoked. If `~/.irbrb' doesn't exist</div><div class='del'>-irb try to read in the order `.irbrc', `irb.rc', `_irbrc' then `$irbrc'. </div><div class='del'>-</div><div class='del'>-The following is altanative to the command line option. To use them</div><div class='del'>-type as follows in an irb session. </div><div class='del'>-</div><div class='del'>-  IRB.conf[:IRB_NAME]="irb"</div><div class='del'>-  IRB.conf[:MATH_MODE]=false</div><div class='del'>-  IRB.conf[:USE_TRACER]=false</div><div class='del'>-  IRB.conf[:USE_LOADER]=false</div><div class='del'>-  IRB.conf[:IGNORE_SIGINT]=true</div><div class='del'>-  IRB.conf[:IGNORE_EOF]=false</div><div class='del'>-  IRB.conf[:INSPECT_MODE]=nil</div><div class='del'>-  IRB.conf[:IRB_RC] = nil</div><div class='del'>-  IRB.conf[:BACK_TRACE_LIMIT]=16</div><div class='del'>-  IRB.conf[:USE_LOADER] = false</div><div class='del'>-  IRB.conf[:USE_READLINE] = nil</div><div class='del'>-  IRB.conf[:USE_TRACER] = false</div><div class='del'>-  IRB.conf[:IGNORE_SIGINT] = true</div><div class='del'>-  IRB.conf[:IGNORE_EOF] = false</div><div class='del'>-  IRB.conf[:PROMPT_MODE] = :DEFALUT</div><div class='del'>-  IRB.conf[:PROMPT] = {...}</div><div class='del'>-  IRB.conf[:DEBUG_LEVEL]=0</div><div class='del'>-  IRB.conf[:VERBOSE]=true</div><div class='del'>-</div><div class='del'>-== Customizing prompt</div><div class='del'>-</div><div class='del'>-To costomize the prompt you set a variable</div><div class='del'>-</div><div class='del'>-  IRB.conf[:PROMPT]</div><div class='del'>-</div><div class='del'>-For example, describe as follows in `.irbrc'. </div><div class='del'>-</div><div class='del'>-  IRB.conf[:PROMPT][:MY_PROMPT] = { # name of prompt mode</div><div class='del'>-    :PROMPT_I =&gt; nil,		  # normal prompt</div><div class='del'>-    :PROMPT_S =&gt; nil,		  # prompt for continuated strings</div><div class='del'>-    :PROMPT_C =&gt; nil,		  # prompt for continuated statement</div><div class='del'>-    :RETURN =&gt; "    ==&gt;%s\n"	  # format to return value</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-Then, invoke irb with the above prompt mode by</div><div class='del'>-</div><div class='del'>-  % irb --prompt my-prompt</div><div class='del'>-</div><div class='del'>-Or add the following in `.irbrc'. </div><div class='del'>-</div><div class='del'>-  IRB.conf[:PROMPT_MODE] = :MY_PROMPT</div><div class='del'>-</div><div class='del'>-Constants PROMPT_I, PROMPT_S and PROMPT_C specifies the format. </div><div class='del'>-In the prompt specification, some special strings are available. </div><div class='del'>-</div><div class='del'>-  %N	command name which is running</div><div class='del'>-  %m	to_s of main object (self)</div><div class='del'>-  %M	inspect of main object (self)</div><div class='del'>-  %l	type of string(", ', /, ]), `]' is inner %w[...]</div><div class='del'>-  %NNi	indent level. NN is degits and means as same as printf("%NNd"). </div><div class='del'>-        It can be ommited</div><div class='del'>-  %NNn	line number. </div><div class='del'>-  %%    %</div><div class='del'>-</div><div class='del'>-For instance, the default prompt mode is defined as follows:</div><div class='del'>-</div><div class='del'>-IRB.conf[:PROMPT_MODE][:DEFAULT] = {</div><div class='del'>-      :PROMPT_I =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-      :PROMPT_S =&gt; "%N(%m):%03n:%i%l ",</div><div class='del'>-      :PROMPT_C =&gt; "%N(%m):%03n:%i* ",</div><div class='del'>-      :RETURN =&gt; "%s\n"</div><div class='del'>-} </div><div class='del'>-</div><div class='del'>-RETURN is used to printf. </div><div class='del'>-</div><div class='del'>-== Configurating subirb</div><div class='del'>-</div><div class='del'>-The command line option or IRB.conf specify the default behavior of</div><div class='del'>-(sub)irb. On the other hand, each conf of in the next sction `6. Command' </div><div class='del'>-is used to individually configurate (sub)irb. </div><div class='del'>-</div><div class='del'>-If proc is set to IRB.conf[:IRB_RC], its subirb will be invoked after</div><div class='del'>-execution of that proc under giving the context of irb as its</div><div class='del'>-aregument. By this mechanism each subirb can be configurated. </div><div class='del'>-</div><div class='del'>-= Command</div><div class='del'>-</div><div class='del'>-For irb commands, both simple name and `irb_'-prefixed name are prepared. </div><div class='del'>-</div><div class='del'>---- exit, quit, irb_exit	</div><div class='del'>-    Quits (sub)irb. </div><div class='del'>-</div><div class='del'>---- conf, irb_context</div><div class='del'>-    Displays current configuration. Modifing the configuration is</div><div class='del'>-    achieved by sending message to `conf'. </div><div class='del'>-</div><div class='del'>---- conf.eval_history = N</div><div class='del'>-    Sets execution result history.</div><div class='del'>-    N is a integer or nil. If N &gt; 0, the number of historys is N. </div><div class='del'>-    If N == 0, the number of historys is unlimited. If N is nill,</div><div class='del'>-    execution result history isn't used(default).</div><div class='del'>-</div><div class='del'>---- conf.back_trace_limit</div><div class='del'>-    Sets display lines of backtrace as top n and tail n. </div><div class='del'>-    The default value is 16.</div><div class='del'>-    </div><div class='del'>---- conf.debug_level = N</div><div class='del'>-    Sets debug level of irb. </div><div class='del'>-</div><div class='del'>---- conf.ignore_eof = true/false</div><div class='del'>-    Whether ^D (control-d) will be ignored or not. </div><div class='del'>-    If false is set, ^D means quit. </div><div class='del'>-</div><div class='del'>---- conf.ignore_sigint= true/false</div><div class='del'>-    Whether ^C (control-c) will be ignored or not. </div><div class='del'>-    If false is set, ^D means quit.  If true, </div><div class='del'>-      during input:   cancel inputing then return to top level. </div><div class='del'>-      during execute: abondon current execution. </div><div class='del'>-</div><div class='del'>---- conf.inf_ruby_mode = true/false</div><div class='del'>-    Whether inf-ruby-mode or not. The default value is false.</div><div class='del'>-</div><div class='del'>---- conf.inspect_mode = true/false/nil</div><div class='del'>-    Specifies inspect mode. </div><div class='del'>-    true:  display inspect</div><div class='del'>-    false: display to_s</div><div class='del'>-    nil:   inspect mode in non math mode, </div><div class='del'>-           non inspect mode in math mode. </div><div class='del'>-</div><div class='del'>---- conf.math_mode</div><div class='del'>-    Whether bc mode or not. </div><div class='del'>-</div><div class='del'>---- conf.use_loader = true/false</div><div class='del'>-    Whether irb's own file reader method is used when load/require or not. </div><div class='del'>-    This mode is globaly affected (irb wide). </div><div class='del'>-</div><div class='del'>---- conf.prompt_c</div><div class='del'>-    prompt for a continuating statement (e.g, immediately after of `if')</div><div class='del'>-</div><div class='del'>---- conf.prompt_i</div><div class='del'>-    standard prompt</div><div class='del'>-</div><div class='del'>---- conf.prompt_s</div><div class='del'>-    prompt for a continuating string</div><div class='del'>-</div><div class='del'>---- conf.rc</div><div class='del'>-    Whether ~/.irbrc is read or not. </div><div class='del'>-</div><div class='del'>---- conf.use_prompt = true/false</div><div class='del'>-    Prompting or not. </div><div class='del'>-</div><div class='del'>---- conf.use_readline = true/false/nil</div><div class='del'>-    Whether readline is used or not. </div><div class='del'>-    true: uses </div><div class='del'>-    false: doen't use</div><div class='del'>-    nil: intends to use readline except for inf-ruby-mode (default)</div><div class='del'>-#</div><div class='del'>-#--- conf.verbose=T/F</div><div class='del'>-#    Whether verbose messages are display or not. </div><div class='del'>-</div><div class='del'>---- cws, chws, irb_change_workspace [obj]</div><div class='del'>-    obj will be self. If obj is omitted, self will be home-object, or</div><div class='del'>-    the main object of first started irb.</div><div class='del'>-</div><div class='del'>---- pushws, irb_pushws, irb_push_workspace [obj]</div><div class='del'>-    same as UNIX-shell command pushd.</div><div class='del'>-</div><div class='del'>---- popws, irb_popws, irb_pop_workspace</div><div class='del'>-    same as UNIX-shell command popd</div><div class='del'>-</div><div class='del'>---- irb [obj]</div><div class='del'>-    Invoke subirb. If obj is given, obj will be self. </div><div class='del'>-</div><div class='del'>---- jobs, irb_jobs</div><div class='del'>-    List of subirb</div><div class='del'>-</div><div class='del'>---- fg n, irb_fg n</div><div class='del'>-    Switch into specified subirb. The following is candidates of n:</div><div class='del'>-</div><div class='del'>-      irb number</div><div class='del'>-      thhread</div><div class='del'>-      irb object</div><div class='del'>-      self(obj which is specified of irb obj)</div><div class='del'>-</div><div class='del'>---- kill n, irb_kill n</div><div class='del'>-    Kill subirb. The means of n is as same as the case of irb_fg. </div><div class='del'>-</div><div class='del'>---- souce, irb_source  path</div><div class='del'>-    This is a like UNIX-shell command source. evaluate script in path</div><div class='del'>-    on current context.</div><div class='del'>-</div><div class='del'>---- irb_load path, prev</div><div class='del'>-    irb-version of Ruby's load.</div><div class='del'>-</div><div class='del'>-= System variable</div><div class='del'>-</div><div class='del'>---- _  The latest value of evaluation (it is local)</div><div class='del'>---- __ The history of evaluation values.</div><div class='del'>-    __[line_no] return an evaluation value of line number&lt;line_no&gt;. If</div><div class='del'>-    line_no is a negative, return value before -&lt;line_no&gt; from latest</div><div class='del'>-    value.</div><div class='del'>-</div><div class='del'>-= Session Example</div><div class='del'>-</div><div class='del'>-  dim% ruby irb.rb</div><div class='del'>-  irb(main):001:0&gt; irb                        # invoke subirb</div><div class='del'>-  irb#1(main):001:0&gt; jobs                     # list of subirbs</div><div class='del'>-  #0-&gt;irb on main (#&lt;Thread:0x400fb7e4&gt; : stop)</div><div class='del'>-  #1-&gt;irb#1 on main (#&lt;Thread:0x40125d64&gt; : running)</div><div class='del'>-  nil</div><div class='del'>-  irb#1(main):002:0&gt; fg 0                     # switch job</div><div class='del'>-  nil</div><div class='del'>-  irb(main):002:0&gt; class Foo;end</div><div class='del'>-  nil</div><div class='del'>-  irb(main):003:0&gt; irb Foo                    # invoke subirb which has the </div><div class='del'>-					      #              context of Foo</div><div class='del'>-  irb#2(Foo):001:0&gt; def foo                   # define Foo#foo</div><div class='del'>-  irb#2(Foo):002:1&gt;   print 1</div><div class='del'>-  irb#2(Foo):003:1&gt; end</div><div class='del'>-  nil</div><div class='del'>-  irb#2(Foo):004:0&gt; fg 0                      # switch job</div><div class='del'>-  nil</div><div class='del'>-  irb(main):004:0&gt; jobs                       # list of job</div><div class='del'>-  #0-&gt;irb on main (#&lt;Thread:0x400fb7e4&gt; : running)</div><div class='del'>-  #1-&gt;irb#1 on main (#&lt;Thread:0x40125d64&gt; : stop)</div><div class='del'>-  #2-&gt;irb#2 on Foo (#&lt;Thread:0x4011d54c&gt; : stop)</div><div class='del'>-  nil</div><div class='del'>-  irb(main):005:0&gt; Foo.instance_methods       # Foo#foo is defined asurely</div><div class='del'>-  ["foo"]</div><div class='del'>-  irb(main):006:0&gt; fg 2                       # switch job</div><div class='del'>-  nil</div><div class='del'>-  irb#2(Foo):005:0&gt; def bar                   # define Foo#bar</div><div class='del'>-  irb#2(Foo):006:1&gt;  print "bar"</div><div class='del'>-  irb#2(Foo):007:1&gt; end</div><div class='del'>-  nil</div><div class='del'>-  irb#2(Foo):010:0&gt;  Foo.instance_methods</div><div class='del'>-  ["bar", "foo"]</div><div class='del'>-  irb#2(Foo):011:0&gt; fg 0                      </div><div class='del'>-  nil</div><div class='del'>-  irb(main):007:0&gt; f = Foo.new</div><div class='del'>-  #&lt;Foo:0x4010af3c&gt;</div><div class='del'>-  irb(main):008:0&gt; irb f                      # invoke subirb which has the</div><div class='del'>-					      #  context of f (instance of Foo)</div><div class='del'>-  irb#3(#&lt;Foo:0x4010af3c&gt;):001:0&gt; jobs</div><div class='del'>-  #0-&gt;irb on main (#&lt;Thread:0x400fb7e4&gt; : stop)</div><div class='del'>-  #1-&gt;irb#1 on main (#&lt;Thread:0x40125d64&gt; : stop)</div><div class='del'>-  #2-&gt;irb#2 on Foo (#&lt;Thread:0x4011d54c&gt; : stop)</div><div class='del'>-  #3-&gt;irb#3 on #&lt;Foo:0x4010af3c&gt; (#&lt;Thread:0x4010a1e0&gt; : running)</div><div class='del'>-  nil</div><div class='del'>-  irb#3(#&lt;Foo:0x4010af3c&gt;):002:0&gt; foo         # evaluate f.foo</div><div class='del'>-  1nil</div><div class='del'>-  irb#3(#&lt;Foo:0x4010af3c&gt;):003:0&gt; bar         # evaluate f.bar</div><div class='del'>-  barnil</div><div class='del'>-  irb#3(#&lt;Foo:0x4010af3c&gt;):004:0&gt; kill 1, 2, 3# kill job</div><div class='del'>-  nil</div><div class='del'>-  irb(main):009:0&gt; jobs</div><div class='del'>-  #0-&gt;irb on main (#&lt;Thread:0x400fb7e4&gt; : running)</div><div class='del'>-  nil</div><div class='del'>-  irb(main):010:0&gt; exit                       # exit</div><div class='del'>-  dim% </div><div class='del'>-</div><div class='del'>-= Restrictions</div><div class='del'>-</div><div class='del'>-Because irb evaluates the inputs immediately after the imput is</div><div class='del'>-syntactically completed, irb gives slight different result than</div><div class='del'>-directly use ruby. Known difference is pointed out here. </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Declaration of the local variable</div><div class='del'>-</div><div class='del'>-The following causes an error in ruby:</div><div class='del'>-</div><div class='del'>-  eval "foo = 0"</div><div class='del'>-  foo</div><div class='del'>-  --</div><div class='del'>-  -:2: undefined local variable or method `foo' for #&lt;Object:0x40283118&gt; (NameError)</div><div class='del'>-  ---</div><div class='del'>-  NameError</div><div class='del'>-</div><div class='del'>-Though, the above will successfully done by irb. </div><div class='del'>-</div><div class='del'>-  &gt;&gt; eval "foo = 0"</div><div class='del'>- =&gt; 0</div><div class='del'>- &gt;&gt; foo</div><div class='del'>- =&gt; 0</div><div class='del'>-</div><div class='del'>-Ruby evaluates a code after reading entire of code and determination</div><div class='del'>-of the scope of local variables. On the other hand, irb do</div><div class='del'>-immediately. More precisely, irb evaluate at first</div><div class='del'>-</div><div class='del'>-  evel "foo = 0" </div><div class='del'>-</div><div class='del'>-then foo is defined on this timing. It is because of this</div><div class='del'>-incompatibility.</div><div class='del'>-</div><div class='del'>-If you'd like to detect those differences, begin...end can be used:</div><div class='del'>-</div><div class='del'>-  &gt;&gt; begin</div><div class='del'>-  ?&gt;   eval "foo = 0"</div><div class='del'>-  &gt;&gt;   foo</div><div class='del'>-  &gt;&gt; end</div><div class='del'>-  NameError: undefined local variable or method `foo' for #&lt;Object:0x4013d0f0&gt;</div><div class='del'>-  (irb):3</div><div class='del'>-  (irb_local_binding):1:in `eval'</div><div class='del'>-</div><div class='del'>-== Here-document</div><div class='del'>-</div><div class='del'>-Implementation of Here-document is incomplete. </div><div class='del'>-</div><div class='del'>-== Symbol</div><div class='del'>-</div><div class='del'>-Irb can not always recognize a symbol as to be Symbol. Concretely, an</div><div class='del'>-expression have completed, however Irb regard it as continuation line.</div><div class='del'>-</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-% Begin Emacs Environment</div><div class='del'>-% Local Variables:</div><div class='del'>-% mode: text</div><div class='del'>-% comment-column: 0</div><div class='del'>-% comment-start: "%"</div><div class='del'>-% comment-end: "\n"</div><div class='del'>-% End:</div><div class='del'>-%</div><div class='head'>diff --git a/doc/irb/irb.rd.ja b/doc/irb/irb.rd.ja<br/>deleted file mode 100644<br/>index 338dcc644e..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/irb/irb.rd.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/irb/irb.rd.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,413 +0,0 @@</div><div class='del'>-irb -- interactive ruby</div><div class='del'>-				$Release Version: 0.9.5 $</div><div class='del'>-			   	$Revision$</div><div class='del'>-			   	$Date$</div><div class='del'>-			   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-=begin</div><div class='del'>-= irb¤È¤Ï?</div><div class='del'>-</div><div class='del'>-irb¤Ïinteractive ruby¤ÎÎ¬¤Ç¤¹. ruby¤Î¼°¤òÉ¸½àÆþÎÏ¤«¤é´ÊÃ±¤ËÆþÎÏ/¼Â¹Ô¤¹¤ë</div><div class='del'>-¤¿¤á¤Î¥Ä¡¼¥ë¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-= µ¯Æ°</div><div class='del'>-</div><div class='del'>-  % irb</div><div class='del'>-</div><div class='del'>-¤Ç¹Ô¤Ê¤¤¤Þ¤¹. </div><div class='del'>-</div><div class='del'>-= »È¤¤Êý</div><div class='del'>-</div><div class='del'>-irb¤Î»È¤¤Êý¤Ï, Ruby¤µ¤¨ÃÎ¤Ã¤Æ¤¤¤ì¤Ð¤¤¤¿¤Ã¤Æ´ÊÃ±¤Ç¤¹. ´ðËÜÅª¤Ë¤Ï irb ¤È</div><div class='del'>-¤¤¤¦¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤À¤±¤Ç¤¹. irb¤ò¼Â¹Ô¤¹¤ë¤È, °Ê²¼¤Î¤è¤¦¤Ê¥×¥í¥ó¥×</div><div class='del'>-¥È¤¬É½¤ì¤Æ¤­¤Þ¤¹. ¸å¤Ï, ruby¤Î¼°¤òÆþ¤ì¤Æ²¼¤µ¤¤. ¼°¤¬´°·ë¤·¤¿»þÅÀ¤Ç¼Â¹Ô</div><div class='del'>-¤µ¤ì¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-  dim% irb</div><div class='del'>-  irb(main):001:0&gt; 1+2</div><div class='del'>-  3</div><div class='del'>-  irb(main):002:0&gt; class Foo</div><div class='del'>-  irb(main):003:1&gt;  def foo</div><div class='del'>-  irb(main):004:2&gt;    print 1</div><div class='del'>-  irb(main):005:2&gt;  end</div><div class='del'>-  irb(main):006:1&gt; end</div><div class='del'>-  nil</div><div class='del'>-  irb(main):007:0&gt; </div><div class='del'>-</div><div class='del'>-¤Þ¤¿, irb¤ÏReadline¥â¥¸¥å¡¼¥ë¤Ë¤âÂÐ±þ¤·¤Æ¤¤¤Þ¤¹. Readline¥â¥¸¥å¡¼¥ë¤¬</div><div class='del'>-¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë»þ¤Ë¤Ï, ¤½¤ì¤ò»È¤¦¤Î¤¬É¸½à¤ÎÆ°ºî¤Ë¤Ê¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-= ¥³¥Þ¥ó¥É¥ª¥×¥·¥ç¥ó</div><div class='del'>-</div><div class='del'>-  irb.rb [options] file_name opts</div><div class='del'>-  options:</div><div class='del'>-  -f		    ~/.irbrc ¤òÆÉ¤ß¹þ¤Þ¤Ê¤¤.</div><div class='del'>-  -m		    bc¥â¡¼¥É(Ê¬¿ô, ¹ÔÎó¤Î·×»»¤¬¤Ç¤­¤ë)</div><div class='del'>-  -d                $DEBUG ¤òtrue¤Ë¤¹¤ë(ruby -d ¤ÈÆ±¤¸)</div><div class='del'>-  -Kc		    ruby -Kc¤ÈÆ±¤¸</div><div class='del'>-  -r load-module    ruby -r ¤ÈÆ±¤¸.</div><div class='del'>-  --verbose	    ¤³¤ì¤«¤é¼Â¹Ô¤¹¤ë¹Ô¤òÉ½¼¨¤¹¤ë(¥Ç¥Õ¥©¥ë¥È)</div><div class='del'>-  --noverbose	    ¤³¤ì¤«¤é¼Â¹Ô¤¹¤ë¹Ô¤òÉ½¼¨¤·¤Ê¤¤</div><div class='del'>-  --echo	    ¼Â¹Ô·ë²Ì¤òÉ½¼¨¤¹¤ë(¥Ç¥Õ¥©¥ë¥È)</div><div class='del'>-  --noecho	    ¼Â¹Ô·ë²Ì¤òÉ½¼¨¤·¤Ê¤¤</div><div class='del'>-  --inspect	    ·ë²Ì½ÐÎÏ¤Ëinspect¤òÍÑ¤¤¤ë(bc¥â¡¼¥É°Ê³°¤Ï¥Ç¥Õ¥©¥ë¥È). </div><div class='del'>-  --noinspect	    ·ë²Ì½ÐÎÏ¤Ëinspect¤òÍÑ¤¤¤Ê¤¤.</div><div class='del'>-  --readline	    readline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤¹¤ë.</div><div class='del'>-  --noreadline	    readline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤Ê¤¤. ¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤Ï,</div><div class='del'>-		    inf-ruby-mode°Ê³°¤Çreadline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤è¤¦</div><div class='del'>-		    ¤È¤¹¤ë. </div><div class='del'>-  --prompt prompt-mode</div><div class='del'>-  --prompt-mode prompt-mode</div><div class='del'>-		    ¥×¥í¥ó¥×¥È¥â¡¼¥É¤òÀÚÂØ¤¨¤Þ¤¹. ¸½ºßÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥×</div><div class='del'>-		    ¥í¥ó¥×¥È¥â¡¼¥É¤Ï, default, simple, xmp, inf-ruby¤¬</div><div class='del'>-		    ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹. ¥Ç¥Õ¥©¥ë¥È¤Ïdefault¥×¥í¥ó¥×¥È¥â¡¼</div><div class='del'>-		    ¥É¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹.</div><div class='del'>-			    </div><div class='del'>-  --inf-ruby-mode   emacs¤Îinf-ruby-modeÍÑ¤Î¥×¥í¥ó¥×¥ÈÉ½¼¨¤ò¹Ô¤Ê¤¦. ÆÃ</div><div class='del'>-		    ¤Ë»ØÄê¤¬¤Ê¤¤¸Â¤ê, readline¥é¥¤¥Ö¥é¥ê¤Ï»È¤ï¤Ê¤¯¤Ê¤ë.</div><div class='del'>-  --simple-prompt</div><div class='del'>-		    Èó¾ï¤Ë¥·¥ó¥×¥ë¤Ê¥×¥í¥ó¥×¥È¤òÍÑ¤¤¤ë¥â¡¼¥É¤Ç¤¹.</div><div class='del'>-  --noprompt	    ¥×¥í¥ó¥×¥ÈÉ½¼¨¤ò¹Ô¤Ê¤ï¤Ê¤¤.</div><div class='del'>-  --tracer	    ¥³¥Þ¥ó¥É¼Â¹Ô»þ¤Ë¥È¥ì¡¼¥¹¤ò¹Ô¤Ê¤¦.</div><div class='del'>-  --back-trace-limit n</div><div class='del'>-		    ¥Ð¥Ã¥¯¥È¥ì¡¼¥¹É½¼¨¤ò¥Ð¥Ã¥¯¥È¥ì¡¼¥¹¤ÎÆ¬¤«¤é n, ¸å¤í</div><div class='del'>-		    ¤«¤én¤À¤±¹Ô¤Ê¤¦. ¥Ç¥Õ¥©¥ë¥È¤Ï16 </div><div class='del'>-  --irb_debug n	    irb¤Î¥Ç¥Ð¥Ã¥°¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë¤òn¤ËÀßÄê¤¹¤ë(ÍøÍÑ¤·¤Ê</div><div class='del'>-		    ¤¤Êý¤¬ÌµÆñ¤Ç¤·¤ç¤¦).</div><div class='del'>-  -v, --version	    irb¤Î¥Ð¡¼¥¸¥ç¥ó¤òÉ½¼¨¤¹¤ë</div><div class='del'>-</div><div class='del'>-= ¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó</div><div class='del'>-</div><div class='del'>-irbµ¯Æ°»þ¤Ë``~/.irbrc''¤òÆÉ¤ß¹þ¤ß¤Þ¤¹. ¤â¤·Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï,</div><div class='del'>-``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''¤Î½ç¤Ëload¤ò»î¤ß¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-¥ª¥×¥·¥ç¥ó¤òÀßÄê¤¹¤ëÂå¤ï¤ê¤Ë, °Ê²¼¤Î¥³¥Þ¥ó¥É¤Ç¤â¥Ç¥Õ¥©¥ë¥È¤ÎÆ°ºî¤òÀßÄê</div><div class='del'>-¤Ç¤­¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-  IRB.conf[:IRB_NAME]="irb"</div><div class='del'>-  IRB.conf[:MATH_MODE]=false</div><div class='del'>-  IRB.conf[:USE_TRACER]=false</div><div class='del'>-  IRB.conf[:USE_LOADER]=false</div><div class='del'>-  IRB.conf[:IGNORE_SIGINT]=true</div><div class='del'>-  IRB.conf[:IGNORE_EOF]=false</div><div class='del'>-  IRB.conf[:INSPECT_MODE]=nil</div><div class='del'>-  IRB.conf[:IRB_RC] = nil</div><div class='del'>-  IRB.conf[:BACK_TRACE_LIMIT]=16</div><div class='del'>-  IRB.conf[:USE_LOADER] = false</div><div class='del'>-  IRB.conf[:USE_READLINE] = nil</div><div class='del'>-  IRB.conf[:USE_TRACER] = false</div><div class='del'>-  IRB.conf[:IGNORE_SIGINT] = true</div><div class='del'>-  IRB.conf[:IGNORE_EOF] = false</div><div class='del'>-  IRB.conf[:PROMPT_MODE] = :DEFALUT</div><div class='del'>-  IRB.conf[:PROMPT] = {...}</div><div class='del'>-  IRB.conf[:DEBUG_LEVEL]=0</div><div class='del'>-  IRB.conf[:VERBOSE]=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'>-   IRB.conf[:PROMPT]</div><div class='del'>-</div><div class='del'>-¤òÍÑ¤¤¤Þ¤¹. Îã¤¨¤Ð, .irbrc¤ÎÃæ¤Ç²¼¤Î¤è¤¦¤Ê¼°¤òµ­½Ò¤·¤Þ¤¹:</div><div class='del'>-</div><div class='del'>-   IRB.conf[:PROMPT][:MY_PROMPT] = { # ¥×¥í¥ó¥×¥È¥â¡¼¥É¤ÎÌ¾Á°</div><div class='del'>-     :PROMPT_I =&gt; nil,		  # ÄÌ¾ï¤Î¥×¥í¥ó¥×¥È</div><div class='del'>-     :PROMPT_N =&gt; nil,		  # ·ÑÂ³¹Ô¤Î¥×¥í¥ó¥×¥È</div><div class='del'>-     :PROMPT_S =&gt; nil,		  # Ê¸»úÎó¤Ê¤É¤Î·ÑÂ³¹Ô¤Î¥×¥í¥ó¥×¥È</div><div class='del'>-     :PROMPT_C =&gt; nil,		  # ¼°¤¬·ÑÂ³¤·¤Æ¤¤¤ë»þ¤Î¥×¥í¥ó¥×¥È</div><div class='del'>-     :RETURN =&gt; "    ==&gt;%s\n"	  # ¥ê¥¿¡¼¥ó»þ¤Î¥×¥í¥ó¥×¥È</div><div class='del'>-   }</div><div class='del'>-</div><div class='del'>-¥×¥í¥ó¥×¥È¥â¡¼¥É¤ò»ØÄê¤·¤¿¤¤»þ¤Ë¤Ï,</div><div class='del'>-</div><div class='del'>-  irb --prompt my-prompt</div><div class='del'>-</div><div class='del'>-¤Ç¤½¤Î¥×¥í¥ó¥×¥È¥â¡¼¥É¤Çµ¯Æ°¤µ¤ì¤Þ¤¹. ¤Þ¤¿¤Ï, .irbrc¤Ë²¼¼°¤òµ­½Ò¤·¤Æ¤â</div><div class='del'>-OK¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-  IRB.conf[:PROMPT_MODE] = :MY_PROMPT</div><div class='del'>-</div><div class='del'>-PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_C¤Ï, ¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ØÄê¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-  %N	µ¯Æ°¤·¤Æ¤¤¤ë¥³¥Þ¥ó¥ÉÌ¾¤¬½ÐÎÏ¤µ¤ì¤ë.</div><div class='del'>-  %m	main¥ª¥Ö¥¸¥§¥¯¥È(self)¤¬to_s¤Ç½ÐÎÏ¤µ¤ì¤ë.</div><div class='del'>-  %M	main¥ª¥Ö¥¸¥§¥¯¥È(self)¤¬inspect¤µ¤ì¤Æ½ÐÎÏ¤µ¤ì¤ë.</div><div class='del'>-  %l	Ê¸»úÎóÃæ¤Î¥¿¥¤¥×¤òÉ½¤¹(", ', /, ], `]'¤Ï%w¤ÎÃæ¤Î»þ)</div><div class='del'>-  %NNi	¥¤¥ó¥Ç¥ó¥È¤Î¥ì¥Ù¥ë¤òÉ½¤¹. NN¤Ï¿ô»ú¤¬Æþ¤êprintf¤Î%NNd¤ÈÆ±¤¸. ¾Ê</div><div class='del'>-	Î¬²ÄÇ½</div><div class='del'>-  %NNn	¹ÔÈÖ¹æ¤òÉ½¤·¤Þ¤¹.</div><div class='del'>-  %%    %</div><div class='del'>-</div><div class='del'>-Îã¤¨¤Ð, ¥Ç¥Õ¥©¥ë¥È¤Î¥×¥í¥ó¥×¥È¥â¡¼¥É¤Ï:</div><div class='del'>-</div><div class='del'>-  IRB.conf[:PROMPT_MODE][:DEFAULT] = {</div><div class='del'>-      :PROMPT_I =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-      :PROMPT_N =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-      :PROMPT_S =&gt; "%N(%m):%03n:%i%l ",</div><div class='del'>-      :PROMPT_C =&gt; "%N(%m):%03n:%i* ",</div><div class='del'>-      :RETURN =&gt; "%s\n"</div><div class='del'>-  } </div><div class='del'>-</div><div class='del'>-¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-RETURN¤Ï, ¸½ºß¤Î¤È¤³¤íprintf·Á¼°¤Ç¤¹. ¾­Íè»ÅÍÍ¤¬ÊÑ¤ï¤ë¤«¤âÃÎ¤ì¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-== ¥µ¥Öirb¤ÎÀßÄê</div><div class='del'>-</div><div class='del'>-¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤ª¤è¤ÓIRB.conf¤Ï(¥µ¥Ö)irbµ¯Æ°»þ¤Î¥Ç¥Õ¥©¥ë¥È¤Î</div><div class='del'>-ÀßÄê¤ò·è¤á¤ë¤â¤Î¤Ç, `5. ¥³¥Þ¥ó¥É'¤Ë¤¢¤ëconf¤Ç¸ÄÊÌ¤Î(¥µ¥Ö)irb¤ÎÀßÄê¤¬¤Ç</div><div class='del'>-¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-IRB.conf[:IRB_RC]¤Ëproc¤¬ÀßÄê¤µ¤ì¤Æ¤¤¤ë¤È, ¥µ¥Öirb¤òµ¯Æ°¤¹¤ë»þ¤Ë¤½¤Î</div><div class='del'>-proc¤òirb¤Î¥³¥ó¥Æ¥­¥¹¥È¤ò°ú¿ô¤È¤·¤Æ¸Æ¤Ó½Ð¤·¤Þ¤¹. ¤³¤ì¤Ë¤è¤Ã¤Æ¸ÄÊÌ¤Î¥µ</div><div class='del'>-¥Öirb¤´¤È¤ËÀßÄê¤òÊÑ¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-= ¥³¥Þ¥ó¥É</div><div class='del'>-</div><div class='del'>-irb³ÈÄ¥¥³¥Þ¥ó¥É¤Ï, ´ÊÃ±¤ÊÌ¾Á°¤ÈÆ¬¤Ë`irb_'¤ò¤Ä¤±¤¿Ì¾Á°¤ÈÎ¾ÊýÄêµÁ¤µ¤ì¤Æ</div><div class='del'>-¤¤¤Þ¤¹. ¤³¤ì¤Ï, ´ÊÃ±¤ÊÌ¾Á°¤¬override¤µ¤ì¤¿»þ¤Î¤¿¤á¤Ç¤¹.</div><div class='del'>-</div><div class='del'>---- exit, quit, irb_exit	</div><div class='del'>-    ½ªÎ»¤¹¤ë. </div><div class='del'>-    ¥µ¥Öirb¤Î¾ì¹ç, ¤½¤Î¥µ¥Öirb¤ò½ªÎ»¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- conf, irb_context</div><div class='del'>-    irb¤Î¸½ºß¤ÎÀßÄê¤òÉ½¼¨¤¹¤ë. ÀßÄê¤ÎÊÑ¹¹¤Ï, conf¤Ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¤ë¤³</div><div class='del'>-    ¤È¤Ë¤è¤Ã¤Æ¹Ô¤Ê¤¨¤ë. </div><div class='del'>-</div><div class='del'>---- conf.eval_history = N</div><div class='del'>-    ¼Â¹Ô·ë²Ì¤Î¥Ò¥¹¥È¥êµ¡Ç½¤ÎÀßÄê.</div><div class='del'>-    nn¤ÏÀ°¿ô¤«nil¤Ç nn&gt;0 ¤Ç¤¢¤ì¤Ð¤½¤Î¿ô¤À¤±¥Ò¥¹¥È¥ê¤Ë¤¿¤á¤ë¡£nn==0¤Î»þ¤Ï</div><div class='del'>-    ÌµÀ©¸Â¤Ëµ­²±¤¹¤ë¡¢nil¤À¤È¥Ò¥¹¥È¥êµ¡Ç½¤Ï¤ä¤á¤ë(¥Ç¥Õ¥©¥ë¥È). </div><div class='del'>-</div><div class='del'>---- Conf.back_trace_limit</div><div class='del'>-    ¥Ð¥Ã¥¯¥È¥ì¡¼¥¹É½¼¨¤ò¥Ð¥Ã¥¯¥È¥ì¡¼¥¹¤ÎÆ¬¤«¤én, ¸å¤í¤«¤én¤À¤±¹Ô¤Ê¤¦.</div><div class='del'>-    ¥Ç¥Õ¥©¥ë¥È¤Ï16</div><div class='del'>-    </div><div class='del'>---- conf.debug_level = N</div><div class='del'>-    irbÍÑ¤Î¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë¤ÎÀßÄê</div><div class='del'>-</div><div class='del'>---- conf.ignore_eof = true/false</div><div class='del'>-    ^D¤¬ÆþÎÏ¤µ¤ì¤¿»þ¤ÎÆ°ºî¤òÀßÄê¤¹¤ë. true¤Î»þ¤Ï^D¤òÌµ»ë¤¹¤ë, false¤Î</div><div class='del'>-    »þ¤Ïirb¤ò½ªÎ»¤¹¤ë. </div><div class='del'>-</div><div class='del'>---- conf.ignore_sigint= true/false</div><div class='del'>-    ^C¤¬ÆþÎÏ¤µ¤ì¤¿»þ¤ÎÆ°ºî¤òÀßÄê¤¹¤ë. false»þ¤Ï, irb¤ò½ªÎ»¤¹¤ë. true¤Î</div><div class='del'>-    »þ¤ÎÆ°ºî¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë:</div><div class='del'>-      ÆþÎÏÃæ: ¤³¤ì¤Þ¤ÇÆþÎÏ¤·¤¿¤â¤Î¤ò¥­¥ã¥ó¥»¥ë¤·¥È¥Ã¥×¥ì¥Ù¥ë¤ËÌá¤ë. </div><div class='del'>-      ¼Â¹ÔÃæ: ¼Â¹Ô¤òÃæ»ß¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- conf.inf_ruby_mode = true/false</div><div class='del'>-    inf-ruby-modeÍÑ¤Î¥×¥í¥ó¥×¥ÈÉ½¼¨¤ò¹Ô¤Ê¤¦. ¥Ç¥Õ¥©¥ë¥È¤Ïfalse.</div><div class='del'>-</div><div class='del'>---- conf.inspect_mode = true/false/nil</div><div class='del'>-    ¥¤¥ó¥¹¥Ú¥¯¥È¥â¡¼¥É¤òÀßÄê¤¹¤ë.</div><div class='del'>-    true: ¥¤¥ó¥¹¥Ú¥¯¥È¤·¤ÆÉ½¼¨¤¹¤ë.</div><div class='del'>-    false: ÄÌ¾ï¤Îprint¤ÇÉ½¼¨¤¹¤ë.</div><div class='del'>-    nil: ÄÌ¾ï¥â¡¼¥É¤Ç¤¢¤ì¤Ð, inspect mode¤È¤Ê¤ê, math¥â¡¼¥É¤Î»þ¤Ï, non</div><div class='del'>-	 inspect mode¤È¤Ê¤ë.   </div><div class='del'>-</div><div class='del'>---- conf.math_mode</div><div class='del'>-    »²¾È¤Î¤ß. bc¥â¡¼¥É(Ê¬¿ô, ¹ÔÎó¤Î·×»»¤¬¤Ç¤­¤Þ¤¹)¤«¤É¤¦¤«?</div><div class='del'>-</div><div class='del'>---- conf.use_loader = true/false</div><div class='del'>-    load/require»þ¤Ëirb¤ÎfileÆÉ¤ß¹þ¤ßµ¡Ç½¤òÍÑ¤¤¤ë¥â¡¼¥É¤Î¥¹¥¤¥Ã¥Á(¥Ç¥Õ¥©</div><div class='del'>-    ¥ë¥È¤ÏÍÑ¤¤¤Ê¤¤). ¤³¤Î¥â¡¼¥É¤ÏIRBÁ´ÂÎ¤ËÈ¿±Ç¤µ¤ì¤ë.</div><div class='del'>-</div><div class='del'>---- conf.prompt_c</div><div class='del'>-    if¤ÎÄ¾¸å¤Ê¤É, ¹Ô¤¬·ÑÂ³¤·¤Æ¤¤¤ë»þ¤Î¥×¥í¥ó¥×¥È.</div><div class='del'>-</div><div class='del'>---- conf.prompt_i</div><div class='del'>-    ÄÌ¾ï¤Î¥×¥í¥ó¥×¥È.</div><div class='del'>-</div><div class='del'>---- conf.prompt_s</div><div class='del'>-    Ê¸»úÎóÃæ¤Ê¤É¤òÉ½¤¹¥×¥í¥ó¥×¥È.</div><div class='del'>-</div><div class='del'>---- conf.rc</div><div class='del'>-    ~/.irbrc¤òÆÉ¤ß¹þ¤ó¤À¤«¤É¤¦¤«?</div><div class='del'>-</div><div class='del'>---- conf.use_prompt = true/false</div><div class='del'>-    ¥×¥í¥ó¥×¥ÈÉ½¼¨¤¹¤ë¤«¤É¤¦¤«? ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥×¥í¥ó¥×¥È¤òÉ½¼¨¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- conf.use_readline = true/false/nil</div><div class='del'>-    readline¤ò»È¤¦¤«¤É¤¦¤«?</div><div class='del'>-    true: readline¤ò»È¤¦.</div><div class='del'>-    false: readline¤ò»È¤ï¤Ê¤¤.</div><div class='del'>-    nil: (¥Ç¥Õ¥©¥ë¥È)inf-ruby-mode°Ê³°¤Çreadline¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤·¤è</div><div class='del'>-         ¤¦¤È¤¹¤ë.  </div><div class='del'>-#</div><div class='del'>-#--- conf.verbose=T/F</div><div class='del'>-#    irb¤«¤é¤¤¤í¤¤¤í¤Ê¥á¥Ã¥»¡¼¥¸¤ò½ÐÎÏ¤¹¤ë¤«?</div><div class='del'>-</div><div class='del'>---- cws, chws, irb_cws, irb_chws, irb_change_workspace [obj]</div><div class='del'>-    obj¤òself¤È¤¹¤ë. obj¤¬¾ÊÎ¬¤µ¤ì¤¿¤È¤­¤Ï, home workspace, ¤¹¤Ê¤ï¤Á</div><div class='del'>-    irb¤òµ¯Æ°¤·¤¿¤È¤­¤Îmain object¤òself¤È¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- pushws, irb_pushws, irb_push_workspace [obj]</div><div class='del'>-    UNIX¥·¥§¥ë¥³¥Þ¥ó¥É¤Îpushd¤ÈÆ±ÍÍ.</div><div class='del'>-</div><div class='del'>---- popws, irb_popws, irb_pop_workspace</div><div class='del'>-    UNIX¥·¥§¥ë¥³¥Þ¥ó¥É¤Îpopd¤ÈÆ±ÍÍ.</div><div class='del'>-</div><div class='del'>---- irb [obj]</div><div class='del'>-    ¥µ¥Öirb¤òÎ©¤Á¤¢¤²¤ë. obj¤¬»ØÄê¤µ¤ì¤¿»þ¤Ï, ¤½¤Îobj¤òself¤È¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- jobs, irb_jobs</div><div class='del'>-    ¥µ¥Öirb¤Î¥ê¥¹¥È</div><div class='del'>-</div><div class='del'>---- fg n, irb_fg n</div><div class='del'>-    »ØÄê¤·¤¿¥µ¥Öirb¤Ë¥¹¥¤¥Ã¥Á¤¹¤ë. n¤Ï, ¼¡¤Î¤â¤Î¤ò»ØÄê¤¹¤ë.</div><div class='del'>-</div><div class='del'>-      irbÈÖ¹æ</div><div class='del'>-      ¥¹¥ì¥Ã¥É</div><div class='del'>-      irb¥ª¥Ö¥¸¥§¥¯¥È</div><div class='del'>-      self(irb obj¤Çµ¯Æ°¤·¤¿»þ¤Îobj)</div><div class='del'>-</div><div class='del'>---- kill n, irb_kill n</div><div class='del'>-      ¥µ¥Öirb¤òkill¤¹¤ë. n¤Ïfg¤ÈÆ±¤¸.</div><div class='del'>-</div><div class='del'>---- souce, irb_source  path</div><div class='del'>-    UNIX¥·¥§¥ë¥³¥Þ¥ó¥É¤Îsource¤È»÷¤Æ¤¤¤ë. ¸½ºß¤Î´Ä¶­¾å¤ÇpathÆâ¤Î¥¹¥¯¥ê</div><div class='del'>-    ¥×¥È¤òÉ¾²Á¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- irb_load path, prev</div><div class='del'>-</div><div class='del'>-    Ruby¤Îload¤ÎirbÈÇ.</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'>-    __[line_no]¤Ç¡¢¤½¤Î¹Ô¤Ç¼Â¹Ô¤·¤¿·ë²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë. line_no¤¬Éé¤Î</div><div class='del'>-    »þ¤Ë¤Ï¡¢ºÇ¿·¤Î·ë²Ì¤«¤é-line_noÁ°¤Î·ë²Ì¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¤ë.</div><div class='del'>-</div><div class='del'>-=  »ÈÍÑÎã</div><div class='del'>-</div><div class='del'>-°Ê²¼¤Î¤è¤¦¤Ê´¶¤¸¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-  dim% ruby irb.rb</div><div class='del'>-  irb(main):001:0&gt; irb                        # ¥µ¥Öirb¤ÎÎ©¤Á¤¢¤²</div><div class='del'>-  irb#1(main):001:0&gt; jobs                     # ¥µ¥Öirb¤Î¥ê¥¹¥È</div><div class='del'>-  #0-&gt;irb on main (#&lt;Thread:0x400fb7e4&gt; : stop)</div><div class='del'>-  #1-&gt;irb#1 on main (#&lt;Thread:0x40125d64&gt; : running)</div><div class='del'>-  nil</div><div class='del'>-  irb#1(main):002:0&gt; fg 0                     # job¤Î¥¹¥¤¥Ã¥Á</div><div class='del'>-  nil</div><div class='del'>-  irb(main):002:0&gt; class Foo;end</div><div class='del'>-  nil</div><div class='del'>-  irb(main):003:0&gt; irb Foo                    # Foo¤ò¥³¥ó¥Æ¥­¥¹¥È¤·¤Æirb</div><div class='del'>-					      # Î©¤Á¤¢¤²</div><div class='del'>-  irb#2(Foo):001:0&gt; def foo                   # Foo#foo¤ÎÄêµÁ</div><div class='del'>-  irb#2(Foo):002:1&gt;   print 1</div><div class='del'>-  irb#2(Foo):003:1&gt; end</div><div class='del'>-  nil</div><div class='del'>-  irb#2(Foo):004:0&gt; fg 0                      # job¤ò¥¹¥¤¥Ã¥Á</div><div class='del'>-  nil</div><div class='del'>-  irb(main):004:0&gt; jobs                       # job¤Î¥ê¥¹¥È</div><div class='del'>-  #0-&gt;irb on main (#&lt;Thread:0x400fb7e4&gt; : running)</div><div class='del'>-  #1-&gt;irb#1 on main (#&lt;Thread:0x40125d64&gt; : stop)</div><div class='del'>-  #2-&gt;irb#2 on Foo (#&lt;Thread:0x4011d54c&gt; : stop)</div><div class='del'>-  nil</div><div class='del'>-  irb(main):005:0&gt; Foo.instance_methods       # Foo#foo¤¬¤Á¤ã¤ó¤ÈÄêµÁ¤µ</div><div class='del'>-					      # ¤ì¤Æ¤¤¤ë</div><div class='del'>-  ["foo"]</div><div class='del'>-  irb(main):006:0&gt; fg 2                       # job¤ò¥¹¥¤¥Ã¥Á</div><div class='del'>-  nil</div><div class='del'>-  irb#2(Foo):005:0&gt; def bar                   # Foo#bar¤òÄêµÁ</div><div class='del'>-  irb#2(Foo):006:1&gt;  print "bar"</div><div class='del'>-  irb#2(Foo):007:1&gt; end</div><div class='del'>-  nil</div><div class='del'>-  irb#2(Foo):010:0&gt;  Foo.instance_methods</div><div class='del'>-  ["bar", "foo"]</div><div class='del'>-  irb#2(Foo):011:0&gt; fg 0                      </div><div class='del'>-  nil</div><div class='del'>-  irb(main):007:0&gt; f = Foo.new</div><div class='del'>-  #&lt;Foo:0x4010af3c&gt;</div><div class='del'>-  irb(main):008:0&gt; irb f                      # Foo¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Çirb¤ò</div><div class='del'>-					      # Î©¤Á¤¢¤²¤ë.</div><div class='del'>-  irb#3(#&lt;Foo:0x4010af3c&gt;):001:0&gt; jobs</div><div class='del'>-  #0-&gt;irb on main (#&lt;Thread:0x400fb7e4&gt; : stop)</div><div class='del'>-  #1-&gt;irb#1 on main (#&lt;Thread:0x40125d64&gt; : stop)</div><div class='del'>-  #2-&gt;irb#2 on Foo (#&lt;Thread:0x4011d54c&gt; : stop)</div><div class='del'>-  #3-&gt;irb#3 on #&lt;Foo:0x4010af3c&gt; (#&lt;Thread:0x4010a1e0&gt; : running)</div><div class='del'>-  nil</div><div class='del'>-  irb#3(#&lt;Foo:0x4010af3c&gt;):002:0&gt; foo         # f.foo¤Î¼Â¹Ô</div><div class='del'>-  nil</div><div class='del'>-  irb#3(#&lt;Foo:0x4010af3c&gt;):003:0&gt; bar         # f.bar¤Î¼Â¹Ô</div><div class='del'>-  barnil</div><div class='del'>-  irb#3(#&lt;Foo:0x4010af3c&gt;):004:0&gt; kill 1, 2, 3# job¤Îkill</div><div class='del'>-  nil</div><div class='del'>-  irb(main):009:0&gt; jobs</div><div class='del'>-  #0-&gt;irb on main (#&lt;Thread:0x400fb7e4&gt; : running)</div><div class='del'>-  nil</div><div class='del'>-  irb(main):010:0&gt; exit                       # ½ªÎ»</div><div class='del'>-  dim% </div><div class='del'>-</div><div class='del'>-= »ÈÍÑ¾å¤ÎÀ©¸Â</div><div class='del'>-</div><div class='del'>-irb¤Ï, É¾²Á¤Ç¤­¤ë»þÅÀ(¼°¤¬ÊÄ¤¸¤¿»þÅÀ)¤Ç¤ÎÃà¼¡¼Â¹Ô¤ò¹Ô¤Ê¤¤¤Þ¤¹. ¤·¤¿¤¬¤Ã</div><div class='del'>-¤Æ, ruby¤òÄ¾ÀÜ»È¤Ã¤¿»þ¤È, ¼ã´³°Û¤Ê¤ëÆ°ºî¤ò¹Ô¤Ê¤¦¾ì¹ç¤¬¤¢¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-¸½ºßÌÀ¤é¤«¤Ë¤Ê¤Ã¤Æ¤¤¤ëÌäÂêÅÀ¤òÀâÌÀ¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-== ¥í¡¼¥«¥ëÊÑ¿ô¤ÎÀë¸À</div><div class='del'>-</div><div class='del'>-ruby¤Ç¤Ï, °Ê²¼¤Î¥×¥í¥°¥é¥à¤Ï¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-  eval "foo = 0"</div><div class='del'>-  foo</div><div class='del'>-  --</div><div class='del'>-  -:2: undefined local variable or method `foo' for #&lt;Object:0x40283118&gt; (NameError)</div><div class='del'>-  ---</div><div class='del'>-  NameError</div><div class='del'>-</div><div class='del'>-¤È¤³¤í¤¬, irb¤òÍÑ¤¤¤ë¤È</div><div class='del'>-</div><div class='del'>-  &gt;&gt; eval "foo = 0"</div><div class='del'>-  =&gt; 0</div><div class='del'>-  &gt;&gt; foo</div><div class='del'>-  =&gt; 0</div><div class='del'>-</div><div class='del'>-¤È¤Ê¤ê, ¥¨¥é¡¼¤òµ¯¤³¤·¤Þ¤»¤ó. ¤³¤ì¤Ï, ruby¤¬ºÇ½é¤Ë¥¹¥¯¥ê¥×¥ÈÁ´ÂÎ¤ò¥³¥ó</div><div class='del'>-¥Ñ¥¤¥ë¤·¤Æ¥í¡¼¥«¥ëÊÑ¿ô¤ò·èÄê¤¹¤ë¤«¤é¤Ç¤¹. ¤½¤ì¤ËÂÐ¤·, irb¤Ï¼Â¹Ô²ÄÇ½¤Ë</div><div class='del'>-¤Ê¤ë(¼°¤¬ÊÄ¤¸¤ë)¤È¼«Æ°Åª¤ËÉ¾²Á¤·¤Æ¤¤¤ë¤«¤é¤Ç¤¹. ¾åµ­¤ÎÎã¤Ç¤Ï, </div><div class='del'>-</div><div class='del'>-  evel "foo = 0" </div><div class='del'>-</div><div class='del'>-¤ò¹Ô¤Ê¤Ã¤¿»þÅÀ¤ÇÉ¾²Á¤ò¹Ô¤Ê¤¤, ¤½¤Î»þÅÀ¤ÇÊÑ¿ô¤¬ÄêµÁ¤µ¤ì¤ë¤¿¤á, ¼¡¼°¤Ç </div><div class='del'>-ÊÑ¿ôfoo¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-¤³¤Î¤è¤¦¤Êruby¤Èirb¤ÎÆ°ºî¤Î°ã¤¤¤ò²ò·è¤·¤¿¤¤¾ì¹ç¤Ï, begin...end¤Ç³ç¤Ã¤Æ</div><div class='del'>-¥Ð¥Ã¥ÁÅª¤Ë¼Â¹Ô¤·¤Æ²¼¤µ¤¤:</div><div class='del'>-</div><div class='del'>-  &gt;&gt; begin</div><div class='del'>-  ?&gt;   eval "foo = 0"</div><div class='del'>-  &gt;&gt;   foo</div><div class='del'>-  &gt;&gt; end</div><div class='del'>-  NameError: undefined local variable or method `foo' for #&lt;Object:0x4013d0f0&gt;</div><div class='del'>-  (irb):3</div><div class='del'>-  (irb_local_binding):1:in `eval'</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'>-¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤«¤É¤¦¤«¤ÎÈ½ÃÇ¤ò´Ö°ã¤¨¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹. ¶ñÂÎÅª¤Ë¤Ï¼°¤¬´°Î»</div><div class='del'>-¤·¤Æ¤¤¤ë¤Î¤Ë·ÑÂ³¹Ô¤È¸«¤Ê¤¹¤³¤È¤¬¤¢¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-% Begin Emacs Environment</div><div class='del'>-% Local Variables:</div><div class='del'>-% mode: text</div><div class='del'>-% comment-column: 0</div><div class='del'>-% comment-start: "%"</div><div class='del'>-% comment-end: "\n"</div><div class='del'>-% End:</div><div class='del'>-%</div><div class='del'>-</div><div class='head'>diff --git a/doc/shell.rd b/doc/shell.rd<br/>deleted file mode 100644<br/>index 02ee1b020a..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/shell.rd?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/shell.rd</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,348 +0,0 @@</div><div class='del'>- -- shell.rb</div><div class='del'>-				$Release Version: 0.6.0 $</div><div class='del'>-			   	$Revision$</div><div class='del'>-			   	$Date$</div><div class='del'>-			   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= What's shell.rb?</div><div class='del'>-</div><div class='del'>-It realizes a wish to do execution of commands with filters and pipes</div><div class='del'>-like sh/csh by using just native facilities of ruby.</div><div class='del'>-</div><div class='del'>-= Main classes</div><div class='del'>-</div><div class='del'>-== Shell</div><div class='del'>-</div><div class='del'>-Every shell object has its own current working directory, and executes</div><div class='del'>-each command as if it stands in the directory.</div><div class='del'>-</div><div class='del'>---- Shell#cwd</div><div class='del'>---- Shell#dir</div><div class='del'>---- Shell#getwd</div><div class='del'>---- Shell#pwd</div><div class='del'>-</div><div class='del'>-      Returns the current directory</div><div class='del'>-</div><div class='del'>---- Shell#system_path</div><div class='del'>-</div><div class='del'>-      Returns the command search path in an array</div><div class='del'>-</div><div class='del'>---- Shell#umask</div><div class='del'>-</div><div class='del'>-      Returns the umask</div><div class='del'>-</div><div class='del'>-== Filter</div><div class='del'>-</div><div class='del'>-Any result of command exection is a Filter.  Filter include</div><div class='del'>-Enumerable, therefore a Filter object can use all Enumerable</div><div class='del'>-facilities.</div><div class='del'>-</div><div class='del'>-= Main methods</div><div class='del'>-</div><div class='del'>-== Command definitions</div><div class='del'>-</div><div class='del'>-In order to execute a command on your OS, you need to define it as a</div><div class='del'>-Shell method.</div><div class='del'>-</div><div class='del'>-Alternatively, you can execute any command via Shell#system even if it</div><div class='del'>-is not defined.</div><div class='del'>-</div><div class='del'>---- Shell.def_system_command(command, path = command)</div><div class='del'>-</div><div class='del'>-      Defines a command.  Registers &lt;path&gt; as a Shell method</div><div class='del'>-      &lt;command&gt;.</div><div class='del'>-</div><div class='del'>-      ex)</div><div class='del'>-      Shell.def_system_command "ls"</div><div class='del'>-        Defines ls.</div><div class='del'>-</div><div class='del'>-      Shell.def_system_command "sys_sort", "sort"</div><div class='del'>-        Defines sys_sort as sort.</div><div class='del'>-</div><div class='del'>---- Shell.undef_system_command(command)</div><div class='del'>-</div><div class='del'>-      Undefines a commmand</div><div class='del'>-</div><div class='del'>---- Shell.alias_command(ali, command, *opts) {...}</div><div class='del'>-</div><div class='del'>-      Aliases a command.</div><div class='del'>-</div><div class='del'>-      ex)</div><div class='del'>-        Shell.alias_command "lsC", "ls", "-CBF", "--show-control-chars"</div><div class='del'>-        Shell.alias_command("lsC", "ls"){|*opts| ["-CBF", "--show-control-chars", *opts]}</div><div class='del'>-</div><div class='del'>---- Shell.unalias_command(ali)</div><div class='del'>-</div><div class='del'>-      Unaliases a command.</div><div class='del'>-</div><div class='del'>---- Shell.install_system_commands(pre = "sys_")</div><div class='del'>-</div><div class='del'>-      Defines all commands in the default_system_path as Shell method,</div><div class='del'>-      all with &lt;pre&gt; prefixed to their names.</div><div class='del'>-</div><div class='del'>-== Creation</div><div class='del'>-</div><div class='del'>---- Shell.new</div><div class='del'>-</div><div class='del'>-      Creates a Shell object which current directory is set to the</div><div class='del'>-      process current directory.</div><div class='del'>-</div><div class='del'>---- Shell.cd(path)</div><div class='del'>-</div><div class='del'>-      Creates a Shell object which current directory is set to</div><div class='del'>-      &lt;path&gt;.</div><div class='del'>-</div><div class='del'>-== Process management</div><div class='del'>-</div><div class='del'>---- Shell#jobs</div><div class='del'>-</div><div class='del'>-      Returns a list of scheduled jobs.</div><div class='del'>-</div><div class='del'>---- Shell#kill sig, job</div><div class='del'>-</div><div class='del'>-      Sends a signal &lt;sig&gt; to &lt;job&gt;.</div><div class='del'>-</div><div class='del'>-== Current directory operations</div><div class='del'>-</div><div class='del'>---- Shell#cd(path, &amp;block)</div><div class='del'>---- Shell#chdir</div><div class='del'>-</div><div class='del'>-      Changes the current directory to &lt;path&gt;.  If a block is given,</div><div class='del'>-      it restores the current directory when the block ends.</div><div class='del'>-</div><div class='del'>---- Shell#pushd(path = nil, &amp;block)</div><div class='del'>---- Shell#pushdir</div><div class='del'>-</div><div class='del'>-      Pushes the current directory to the directory stack, changing</div><div class='del'>-      the current directory to &lt;path&gt;.  If &lt;path&gt; is omitted, it</div><div class='del'>-      exchanges its current directory and the top of its directory</div><div class='del'>-      stack.  If a block is given, it restores the current directory</div><div class='del'>-      when the block ends.</div><div class='del'>-</div><div class='del'>---- Shell#popd</div><div class='del'>---- Shell#popdir</div><div class='del'>-</div><div class='del'>-      Pops a directory from the directory stack, and sets the current</div><div class='del'>-      directory to it.</div><div class='del'>-</div><div class='del'>-== File and directory operations</div><div class='del'>-</div><div class='del'>---- Shell#foreach(path = nil, &amp;block)</div><div class='del'>-</div><div class='del'>-      Same as:</div><div class='del'>-        File#foreach (when path is a file)</div><div class='del'>-        Dir#foreach (when path is a directory)</div><div class='del'>-</div><div class='del'>---- Shell#open(path, mode)</div><div class='del'>-</div><div class='del'>-      Same as:</div><div class='del'>-        File#open (when path is a file)</div><div class='del'>-        Dir#open (when path is a directory)</div><div class='del'>-</div><div class='del'>---- Shell#unlink(path)</div><div class='del'>-</div><div class='del'>-      Same as:</div><div class='del'>-        Dir#open (when path is a file)</div><div class='del'>-        Dir#unlink (when path is a directory)</div><div class='del'>-</div><div class='del'>---- Shell#test(command, file1, file2)</div><div class='del'>---- Shell#[command, file1, file2]</div><div class='del'>-</div><div class='del'>-      Same as test().</div><div class='del'>-      ex)</div><div class='del'>-          sh[?e, "foo"]</div><div class='del'>-          sh[:e, "foo"]</div><div class='del'>-          sh["e", "foo"]</div><div class='del'>-          sh[:exists?, "foo"]</div><div class='del'>-          sh["exists?", "foo"]</div><div class='del'>-</div><div class='del'>---- Shell#mkdir(*path)</div><div class='del'>-</div><div class='del'>-      Same as Dir.mkdir (with multiple directories allowed)</div><div class='del'>-</div><div class='del'>---- Shell#rmdir(*path)</div><div class='del'>-</div><div class='del'>-      Same as Dir.rmdir (with multiple directories allowed)</div><div class='del'>-</div><div class='del'>-== Command execution</div><div class='del'>-</div><div class='del'>---- System#system(command, *opts)</div><div class='del'>-</div><div class='del'>-      Executes &lt;command&gt; with &lt;opts&gt;.</div><div class='del'>-</div><div class='del'>-      ex)</div><div class='del'>-        print sh.system("ls", "-l")</div><div class='del'>-        sh.system("ls", "-l") | sh.head &gt; STDOUT</div><div class='del'>-</div><div class='del'>---- System#rehash</div><div class='del'>-</div><div class='del'>-      Does rehash.</div><div class='del'>-</div><div class='del'>---- Shell#transact &amp;block</div><div class='del'>-</div><div class='del'>-      Executes a block as self.</div><div class='del'>-      ex)</div><div class='del'>-        sh.transact{system("ls", "-l") | head &gt; STDOUT}</div><div class='del'>-</div><div class='del'>---- Shell#out(dev = STDOUT, &amp;block)</div><div class='del'>-</div><div class='del'>-      Does transact, with redirecting the result output to &lt;dev&gt;.</div><div class='del'>-</div><div class='del'>-== Internal commands</div><div class='del'>-</div><div class='del'>---- Shell#echo(*strings)</div><div class='del'>---- Shell#cat(*files)</div><div class='del'>---- Shell#glob(patten)</div><div class='del'>---- Shell#tee(file)</div><div class='del'>-</div><div class='del'>-      Return Filter objects, which are results of their execution.</div><div class='del'>-</div><div class='del'>---- Filter#each &amp;block</div><div class='del'>-</div><div class='del'>-      Iterates a block for each line of it.</div><div class='del'>-</div><div class='del'>---- Filter#&lt;(src)</div><div class='del'>-</div><div class='del'>-      Inputs from &lt;src&gt;, which is either a string of a file name or an</div><div class='del'>-      IO.</div><div class='del'>-</div><div class='del'>---- Filter#&gt;(to)</div><div class='del'>-</div><div class='del'>-      Outputs to &lt;to&gt;, which is either a string of a file name or an</div><div class='del'>-      IO.</div><div class='del'>-</div><div class='del'>---- Filter#&gt;&gt;(to)</div><div class='del'>-</div><div class='del'>-      Appends the ouput to &lt;to&gt;, which is either a string of a file</div><div class='del'>-      name or an IO.</div><div class='del'>-</div><div class='del'>---- Filter#|(filter)</div><div class='del'>-</div><div class='del'>-      Processes a pipeline.</div><div class='del'>-</div><div class='del'>---- Filter#+(filter)</div><div class='del'>-</div><div class='del'>-      (filter1 + filter2) outputs filter1, and then outputs filter2.</div><div class='del'>-</div><div class='del'>---- Filter#to_a</div><div class='del'>---- Filter#to_s</div><div class='del'>-</div><div class='del'>-== Built-in commands</div><div class='del'>-</div><div class='del'>---- Shell#atime(file)</div><div class='del'>---- Shell#basename(file, *opt)</div><div class='del'>---- Shell#chmod(mode, *files)</div><div class='del'>---- Shell#chown(owner, group, *file)</div><div class='del'>---- Shell#ctime(file)</div><div class='del'>---- Shell#delete(*file)</div><div class='del'>---- Shell#dirname(file)</div><div class='del'>---- Shell#ftype(file)</div><div class='del'>---- Shell#join(*file)</div><div class='del'>---- Shell#link(file_from, file_to)</div><div class='del'>---- Shell#lstat(file)</div><div class='del'>---- Shell#mtime(file)</div><div class='del'>---- Shell#readlink(file)</div><div class='del'>---- Shell#rename(file_from, file_to)</div><div class='del'>---- Shell#split(file)</div><div class='del'>---- Shell#stat(file)</div><div class='del'>---- Shell#symlink(file_from, file_to)</div><div class='del'>---- Shell#truncate(file, length)</div><div class='del'>---- Shell#utime(atime, mtime, *file)</div><div class='del'>-</div><div class='del'>-      Equivalent to the class methods of File with the same names.</div><div class='del'>-</div><div class='del'>---- Shell#blockdev?(file)</div><div class='del'>---- Shell#chardev?(file)</div><div class='del'>---- Shell#directory?(file)</div><div class='del'>---- Shell#executable?(file)</div><div class='del'>---- Shell#executable_real?(file)</div><div class='del'>---- Shell#exist?(file)/Shell#exists?(file)</div><div class='del'>---- Shell#file?(file)</div><div class='del'>---- Shell#grpowned?(file)</div><div class='del'>---- Shell#owned?(file)</div><div class='del'>---- Shell#pipe?(file)</div><div class='del'>---- Shell#readable?(file)</div><div class='del'>---- Shell#readable_real?(file)</div><div class='del'>---- Shell#setgid?(file)</div><div class='del'>---- Shell#setuid?(file)</div><div class='del'>---- Shell#size(file)/Shell#size?(file)</div><div class='del'>---- Shell#socket?(file)</div><div class='del'>---- Shell#sticky?(file)</div><div class='del'>---- Shell#symlink?(file)</div><div class='del'>---- Shell#writable?(file)</div><div class='del'>---- Shell#writable_real?(file)</div><div class='del'>---- Shell#zero?(file)</div><div class='del'>-</div><div class='del'>-      Equivalent to the class methods of FileTest with the same names.</div><div class='del'>-</div><div class='del'>---- Shell#syscopy(filename_from, filename_to)</div><div class='del'>---- Shell#copy(filename_from, filename_to)</div><div class='del'>---- Shell#move(filename_from, filename_to)</div><div class='del'>---- Shell#compare(filename_from, filename_to)</div><div class='del'>---- Shell#safe_unlink(*filenames)</div><div class='del'>---- Shell#makedirs(*filenames)</div><div class='del'>---- Shell#install(filename_from, filename_to, mode)</div><div class='del'>-</div><div class='del'>-      Equivalent to the class methods of FileTools with the same</div><div class='del'>-      names.</div><div class='del'>-</div><div class='del'>-      And also, there are some aliases for convenience:</div><div class='del'>-</div><div class='del'>---- Shell#cmp	&lt;- Shell#compare</div><div class='del'>---- Shell#mv	&lt;- Shell#move</div><div class='del'>---- Shell#cp	&lt;- Shell#copy</div><div class='del'>---- Shell#rm_f	&lt;- Shell#safe_unlink</div><div class='del'>---- Shell#mkpath	&lt;- Shell#makedirs</div><div class='del'>-</div><div class='del'>-= Samples</div><div class='del'>-</div><div class='del'>-== ex1</div><div class='del'>-</div><div class='del'>-  sh = Shell.cd("/tmp")</div><div class='del'>-  sh.mkdir "shell-test-1" unless sh.exists?("shell-test-1")</div><div class='del'>-  sh.cd("shell-test-1")</div><div class='del'>-  for dir in ["dir1", "dir3", "dir5"]</div><div class='del'>-    if !sh.exists?(dir)</div><div class='del'>-      sh.mkdir dir</div><div class='del'>-      sh.cd(dir) do</div><div class='del'>-	f = sh.open("tmpFile", "w")</div><div class='del'>-	f.print "TEST\n"</div><div class='del'>-	f.close</div><div class='del'>-      end</div><div class='del'>-      print sh.pwd</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-== ex2</div><div class='del'>-</div><div class='del'>-  sh = Shell.cd("/tmp")</div><div class='del'>-  sh.transact do</div><div class='del'>-    mkdir "shell-test-1" unless exists?("shell-test-1")</div><div class='del'>-    cd("shell-test-1")</div><div class='del'>-    for dir in ["dir1", "dir3", "dir5"]</div><div class='del'>-      if !exists?(dir)</div><div class='del'>-	mkdir dir</div><div class='del'>-	cd(dir) do</div><div class='del'>-	  f = open("tmpFile", "w")</div><div class='del'>-	  f.print "TEST\n"</div><div class='del'>-	  f.close</div><div class='del'>-	end</div><div class='del'>-	print pwd</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-== ex3</div><div class='del'>-</div><div class='del'>-  sh.cat("/etc/printcap") | sh.tee("tee1") &gt; "tee2"</div><div class='del'>-  (sh.cat &lt; "/etc/printcap") | sh.tee("tee11") &gt; "tee12"</div><div class='del'>-  sh.cat("/etc/printcap") | sh.tee("tee1") &gt;&gt; "tee2"</div><div class='del'>-  (sh.cat &lt; "/etc/printcap") | sh.tee("tee11") &gt;&gt; "tee12"</div><div class='del'>-</div><div class='del'>-== ex4</div><div class='del'>-</div><div class='del'>-  print sh.cat("/etc/passwd").head.collect{|l| l =~ /keiju/}</div><div class='del'>-</div><div class='del'>-=end</div><div class='head'>diff --git a/doc/shell.rd.ja b/doc/shell.rd.ja<br/>deleted file mode 100644<br/>index 073e71ea42..0000000000<br/>--- a/<a href='/ruby.git/tree/doc/shell.rd.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>doc/shell.rd.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,336 +0,0 @@</div><div class='del'>- -- shell.rb</div><div class='del'>-				$Release Version: 0.6.0 $</div><div class='del'>-			   	$Revision$</div><div class='del'>-			   	$Date$</div><div class='del'>-			   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= ÌÜÅª</div><div class='del'>-</div><div class='del'>-ruby¾å¤Çsh/csh¤Î¤è¤¦¤Ë¥³¥Þ¥ó¥É¤Î¼Â¹ÔµÚ¤Ó¥Õ¥£¥ë¥¿¥ê¥ó¥°¤ò¼ê·Ú¤Ë¹Ô¤¦.</div><div class='del'>-sh/csh¤ÎÀ©¸æÊ¸¤Ïruby¤Îµ¡Ç½¤òÍÑ¤¤¤Æ¼Â¸½¤¹¤ë.</div><div class='del'>-</div><div class='del'>-= ¼ç¤Ê¥¯¥é¥¹°ìÍ÷</div><div class='del'>-</div><div class='del'>-== Shell</div><div class='del'>-</div><div class='del'>-Shell¥ª¥Ö¥¸¥§¥¯¥È¤Ï¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò»ý¤Á, ¥³¥Þ¥ó¥É¼Â¹Ô¤Ï¤½¤³¤«¤é¤Î</div><div class='del'>-ÁêÂÐ¥Ñ¥¹¤Ë¤Ê¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- Shell#cwd</div><div class='del'>---- Shell#dir</div><div class='del'>---- Shell#getwd</div><div class='del'>---- Shell#pwd</div><div class='del'>-</div><div class='del'>-      ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤òÊÖ¤¹¡£</div><div class='del'>-</div><div class='del'>---- Shell#system_path</div><div class='del'>-</div><div class='del'>-      ¥³¥Þ¥ó¥É¥µ¡¼¥Á¥Ñ¥¹¤ÎÇÛÎó¤òÊÖ¤¹¡£</div><div class='del'>-</div><div class='del'>---- Shell#umask</div><div class='del'>-</div><div class='del'>-      umask¤òÊÖ¤¹¡£</div><div class='del'>-</div><div class='del'>-== Filter</div><div class='del'>-</div><div class='del'>-¥³¥Þ¥ó¥É¤Î¼Â¹Ô·ë²Ì¤Ï¤¹¤Ù¤ÆFilter¤È¤·¤Æ¤«¤¨¤ê¤Þ¤¹. Enumerable¤òinclude¤·</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'>-OS¾å¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï¤Þ¤º, Shell¤Î¥á¥½¥Ã¥É¤È¤·¤ÆÄêµÁ¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-Ãí) ¥³¥Þ¥ó¥É¤òÄêµÁ¤·¤Ê¤¯¤È¤âÄ¾ÀÜ¼Â¹Ô¤Ç¤­¤ëShell#system¥³¥Þ¥ó¥É¤â¤¢¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- Shell.def_system_command(command, path = command)</div><div class='del'>-</div><div class='del'>-      Shell¤Î¥á¥½¥Ã¥É¤È¤·¤Æcommand¤òÅÐÏ¿¤·¤Þ¤¹. </div><div class='del'>-</div><div class='del'>-      Îã)</div><div class='del'>-      Shell.def_system_command "ls"</div><div class='del'>-        ls ¤òÄêµÁ</div><div class='del'>-</div><div class='del'>-      Shell.def_system_command "sys_sort", "sort"</div><div class='del'>-        sort¥³¥Þ¥ó¥É¤òsys_sort¤È¤·¤ÆÄêµÁ</div><div class='del'>-</div><div class='del'>---- Shell.undef_system_command(command)</div><div class='del'>-</div><div class='del'>-      command¤òºï½ü¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- Shell.alias_command(ali, command, *opts) {...}</div><div class='del'>-</div><div class='del'>-      command¤Îalias¤ò¤·¤Þ¤¹. </div><div class='del'>-</div><div class='del'>-      Îã)</div><div class='del'>-        Shell.alias_command "lsC", "ls", "-CBF", "--show-control-chars"</div><div class='del'>-        Shell.alias_command("lsC", "ls"){|*opts| ["-CBF", "--show-control-chars", *opts]}</div><div class='del'>-</div><div class='del'>---- Shell.unalias_command(ali)</div><div class='del'>-</div><div class='del'>-      command¤Îalias¤òºï½ü¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- Shell.install_system_commands(pre = "sys_")</div><div class='del'>-</div><div class='del'>-      system_path¾å¤Ë¤¢¤ëÁ´¤Æ¤Î¼Â¹Ô²ÄÇ½¥Õ¥¡¥¤¥ë¤òShell¤ËÄêµÁ¤¹¤ë. ¥á¥½¥Ã</div><div class='del'>-      ¥ÉÌ¾¤Ï¸µ¤Î¥Õ¥¡¥¤¥ëÌ¾¤ÎÆ¬¤Ëpre¤ò¤Ä¤±¤¿¤â¤Î¤È¤Ê¤ë.</div><div class='del'>-</div><div class='del'>-== À¸À®</div><div class='del'>-</div><div class='del'>---- Shell.new</div><div class='del'>-</div><div class='del'>-      ¥×¥í¥»¥¹¤Î¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤È¤¹¤ëShell¥ª</div><div class='del'>-      ¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- Shell.cd(path)</div><div class='del'>-</div><div class='del'>-      path¤ò¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤È¤¹¤ëShell¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-== ¥×¥í¥»¥¹´ÉÍý</div><div class='del'>-</div><div class='del'>---- Shell#jobs</div><div class='del'>-</div><div class='del'>-      ¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ëjob¤Î°ìÍ÷¤òÊÖ¤¹.</div><div class='del'>-</div><div class='del'>---- Shell#kill sig, job</div><div class='del'>-</div><div class='del'>-      job¤Ë¥·¥°¥Ê¥ësig¤òÁ÷¤ë</div><div class='del'>-</div><div class='del'>-== ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥êÁàºî</div><div class='del'>-</div><div class='del'>---- Shell#cd(path, &amp;block)</div><div class='del'>---- Shell#chdir</div><div class='del'>-</div><div class='del'>-      ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤òpath¤Ë¤¹¤ë. ¥¤¥Æ¥ì¡¼¥¿¤È¤·¤Æ¸Æ¤Ð¤ì¤¿¤È¤­¤Ë¤Ï</div><div class='del'>-      ¥Ö¥í¥Ã¥¯¼Â¹ÔÃæ¤Î¤ß¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤òÊÑ¹¹¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- Shell#pushd(path = nil, &amp;block)</div><div class='del'>---- Shell#pushdir</div><div class='del'>-</div><div class='del'>-      ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò¥Ç¥£¥ì¥¯¥È¥ê¥¹¥¿¥Ã¥¯¤Ë¤Ä¤ß, ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯</div><div class='del'>-      ¥È¥ê¤òpath¤Ë¤¹¤ë. path¤¬¾ÊÎ¬¤µ¤ì¤¿¤È¤­¤Ë¤Ï, ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤È</div><div class='del'>-      ¥Ç¥£¥ì¥¯¥È¥ê¥¹¥¿¥Ã¥¯¤Î¥È¥Ã¥×¤ò¸ò´¹¤¹¤ë. ¥¤¥Æ¥ì¡¼¥¿¤È¤·¤Æ¸Æ¤Ð¤ì¤¿¤È</div><div class='del'>-      ¤­¤Ë¤Ï, ¥Ö¥í¥Ã¥¯¼Â¹ÔÃæ¤Î¤ßpushd¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- Shell#popd</div><div class='del'>---- Shell#popdir</div><div class='del'>-</div><div class='del'>-      ¥Ç¥£¥ì¥¯¥È¥ê¥¹¥¿¥Ã¥¯¤«¤é¥Ý¥Ã¥×¤·, ¤½¤ì¤ò¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¹¤ë.</div><div class='del'>-</div><div class='del'>-== ¥Õ¥¡¥¤¥ë/¥Ç¥£¥ì¥¯¥È¥êÁàºî</div><div class='del'>-</div><div class='del'>---- Shell#foreach(path = nil, &amp;block)</div><div class='del'>-</div><div class='del'>-      path¤¬¥Õ¥¡¥¤¥ë¤Ê¤é, File#foreach</div><div class='del'>-      path¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ê¤é, Dir#foreach</div><div class='del'>-</div><div class='del'>---- Shell#open(path, mode)</div><div class='del'>-</div><div class='del'>-      path¤¬¥Õ¥¡¥¤¥ë¤Ê¤é, File#open</div><div class='del'>-      path¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ê¤é, Dir#open</div><div class='del'>-</div><div class='del'>---- Shell#unlink(path)</div><div class='del'>-</div><div class='del'>-      path¤¬¥Õ¥¡¥¤¥ë¤Ê¤é, File#unlink</div><div class='del'>-      path¤¬¥Ç¥£¥ì¥¯¥È¥ê¤Ê¤é, Dir#unlink</div><div class='del'>-</div><div class='del'>---- Shell#test(command, file1, file2)</div><div class='del'>---- Shell#[command, file1, file2]</div><div class='del'>-</div><div class='del'>-      ¥Õ¥¡¥¤¥ë¥Æ¥¹¥È´Ø¿ôtest¤ÈÆ±¤¸. </div><div class='del'>-      Îã)</div><div class='del'>-          sh[?e, "foo"]</div><div class='del'>-          sh[:e, "foo"]</div><div class='del'>-          sh["e", "foo"]</div><div class='del'>-          sh[:exists?, "foo"]</div><div class='del'>-          sh["exists?", "foo"]</div><div class='del'>-</div><div class='del'>---- Shell#mkdir(*path)</div><div class='del'>-</div><div class='del'>-      Dir.mkdir¤ÈÆ±¤¸(Ê£¿ô²Ä)</div><div class='del'>-</div><div class='del'>---- Shell#rmdir(*path)</div><div class='del'>-</div><div class='del'>-      Dir.rmdir¤ÈÆ±¤¸(Ê£¿ô²Ä)</div><div class='del'>-</div><div class='del'>-== ¥³¥Þ¥ó¥É¼Â¹Ô</div><div class='del'>-</div><div class='del'>---- System#system(command, *opts)</div><div class='del'>-</div><div class='del'>-      command¤ò¼Â¹Ô¤¹¤ë.</div><div class='del'>-      Îã)</div><div class='del'>-        print sh.system("ls", "-l")</div><div class='del'>-        sh.system("ls", "-l") | sh.head &gt; STDOUT</div><div class='del'>-</div><div class='del'>---- System#rehash</div><div class='del'>-</div><div class='del'>-      ¥ê¥Ï¥Ã¥·¥å¤¹¤ë</div><div class='del'>-</div><div class='del'>---- Shell#transact &amp;block</div><div class='del'>-</div><div class='del'>-      ¥Ö¥í¥Ã¥¯Ãæ¤Ç¤Ïshell¤òself¤È¤·¤Æ¼Â¹Ô¤¹¤ë.</div><div class='del'>-      Îã)</div><div class='del'>-        sh.transact{system("ls", "-l") | head &gt; STDOUT}</div><div class='del'>-</div><div class='del'>---- Shell#out(dev = STDOUT, &amp;block)</div><div class='del'>-</div><div class='del'>-      transact¤ò¸Æ¤Ó½Ð¤·¤½¤Î·ë²Ì¤òdev¤Ë½ÐÎÏ¤¹¤ë.</div><div class='del'>-</div><div class='del'>-== ÆâÉô¥³¥Þ¥ó¥É</div><div class='del'>-</div><div class='del'>---- Shell#echo(*strings)</div><div class='del'>---- Shell#cat(*files)</div><div class='del'>---- Shell#glob(patten)</div><div class='del'>---- Shell#tee(file)</div><div class='del'>-</div><div class='del'>-      ¤³¤ì¤é¤Ï¼Â¹Ô¤¹¤ë¤È, ¤½¤ì¤é¤òÆâÍÆ¤È¤¹¤ëFilter¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤·¤Þ¤¹. </div><div class='del'>-</div><div class='del'>---- Filter#each &amp;block</div><div class='del'>-</div><div class='del'>-      ¥Õ¥£¥ë¥¿¤Î°ì¹Ô¤º¤Ä¤òblock¤ËÅÏ¤¹.</div><div class='del'>-</div><div class='del'>---- Filter#&lt;(src)</div><div class='del'>-</div><div class='del'>-      src¤ò¥Õ¥£¥ë¥¿¤ÎÆþÎÏ¤È¤¹¤ë. src¤¬, Ê¸»úÎó¤Ê¤é¤Ð¥Õ¥¡¥¤¥ë¤ò, IO¤Ç¤¢¤ì</div><div class='del'>-      ¤Ð¤½¤ì¤ò¤½¤Î¤Þ¤ÞÆþÎÏ¤È¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- Filter#&gt;(to)</div><div class='del'>-</div><div class='del'>-      src¤ò¥Õ¥£¥ë¥¿¤Î½ÐÎÏ¤È¤¹¤ë. to¤¬, Ê¸»úÎó¤Ê¤é¤Ð¥Õ¥¡¥¤¥ë¤Ë, IO¤Ç¤¢¤ì</div><div class='del'>-      ¤Ð¤½¤ì¤ò¤½¤Î¤Þ¤Þ½ÐÎÏ¤È¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- Filter#&gt;&gt;(to)</div><div class='del'>-</div><div class='del'>-      src¤ò¥Õ¥£¥ë¥¿¤ËÄÉ²Ã¤¹¤ë. to¤¬, Ê¸»úÎó¤Ê¤é¤Ð¥Õ¥¡¥¤¥ë¤Ë, IO¤Ç¤¢¤ì¤Ð</div><div class='del'>-      ¤½¤ì¤ò¤½¤Î¤Þ¤Þ½ÐÎÏ¤È¤¹¤ë.</div><div class='del'>-</div><div class='del'>---- Filter#|(filter)</div><div class='del'>-</div><div class='del'>-      ¥Ñ¥¤¥×·ë¹ç</div><div class='del'>-</div><div class='del'>---- Filter#+(filter)</div><div class='del'>-</div><div class='del'>-      filter1 + filter2 ¤Ï filter1¤Î½ÐÎÏ¤Î¸å, filter2¤Î½ÐÎÏ¤ò¹Ô¤¦.</div><div class='del'>-</div><div class='del'>---- Filter#to_a</div><div class='del'>---- Filter#to_s</div><div class='del'>-</div><div class='del'>-== ÁÈ¹þ¤ß¥³¥Þ¥ó¥É</div><div class='del'>-</div><div class='del'>---- Shell#atime(file)</div><div class='del'>---- Shell#basename(file, *opt)</div><div class='del'>---- Shell#chmod(mode, *files)</div><div class='del'>---- Shell#chown(owner, group, *file)</div><div class='del'>---- Shell#ctime(file)</div><div class='del'>---- Shell#delete(*file)</div><div class='del'>---- Shell#dirname(file)</div><div class='del'>---- Shell#ftype(file)</div><div class='del'>---- Shell#join(*file)</div><div class='del'>---- Shell#link(file_from, file_to)</div><div class='del'>---- Shell#lstat(file)</div><div class='del'>---- Shell#mtime(file)</div><div class='del'>---- Shell#readlink(file)</div><div class='del'>---- Shell#rename(file_from, file_to)</div><div class='del'>---- Shell#split(file)</div><div class='del'>---- Shell#stat(file)</div><div class='del'>---- Shell#symlink(file_from, file_to)</div><div class='del'>---- Shell#truncate(file, length)</div><div class='del'>---- Shell#utime(atime, mtime, *file)</div><div class='del'>-</div><div class='del'>-      ¤³¤ì¤é¤ÏFile¥¯¥é¥¹¤Ë¤¢¤ëÆ±Ì¾¤Î¥¯¥é¥¹¥á¥½¥Ã¥É¤ÈÆ±¤¸¤Ç¤¹.</div><div class='del'>-</div><div class='del'>---- Shell#blockdev?(file)</div><div class='del'>---- Shell#chardev?(file)</div><div class='del'>---- Shell#directory?(file)</div><div class='del'>---- Shell#executable?(file)</div><div class='del'>---- Shell#executable_real?(file)</div><div class='del'>---- Shell#exist?(file)/Shell#exists?(file)</div><div class='del'>---- Shell#file?(file)</div><div class='del'>---- Shell#grpowned?(file)</div><div class='del'>---- Shell#owned?(file)</div><div class='del'>---- Shell#pipe?(file)</div><div class='del'>---- Shell#readable?(file)</div><div class='del'>---- Shell#readable_real?(file)</div><div class='del'>---- Shell#setgid?(file)</div><div class='del'>---- Shell#setuid?(file)</div><div class='del'>---- Shell#size(file)/Shell#size?(file)</div><div class='del'>---- Shell#socket?(file)</div><div class='del'>---- Shell#sticky?(file)</div><div class='del'>---- Shell#symlink?(file)</div><div class='del'>---- Shell#writable?(file)</div><div class='del'>---- Shell#writable_real?(file)</div><div class='del'>---- Shell#zero?(file)</div><div class='del'>-</div><div class='del'>-      ¤³¤ì¤é¤ÏFileTest¥¯¥é¥¹¤Ë¤¢¤ëÆ±Ì¾¤Î¥¯¥é¥¹¥á¥½¥Ã¥É¤ÈÆ±¤¸¤Ç¤¹.</div><div class='del'>-</div><div class='del'>---- Shell#syscopy(filename_from, filename_to)</div><div class='del'>---- Shell#copy(filename_from, filename_to)</div><div class='del'>---- Shell#move(filename_from, filename_to)</div><div class='del'>---- Shell#compare(filename_from, filename_to)</div><div class='del'>---- Shell#safe_unlink(*filenames)</div><div class='del'>---- Shell#makedirs(*filenames)</div><div class='del'>---- Shell#install(filename_from, filename_to, mode)</div><div class='del'>-</div><div class='del'>-      ¤³¤ì¤é¤ÏFileTools¥¯¥é¥¹¤Ë¤¢¤ëÆ±Ì¾¤Î¥¯¥é¥¹¥á¥½¥Ã¥É¤ÈÆ±¤¸¤Ç¤¹.</div><div class='del'>-</div><div class='del'>-      ¤½¤ÎÂ¾, °Ê²¼¤Î¤â¤Î¤¬¥¨¥¤¥ê¥¢¥¹¤µ¤ì¤Æ¤¤¤Þ¤¹.</div><div class='del'>-</div><div class='del'>---- Shell#cmp	&lt;- Shell#compare</div><div class='del'>---- Shell#mv	&lt;- Shell#move</div><div class='del'>---- Shell#cp	&lt;- Shell#copy</div><div class='del'>---- Shell#rm_f	&lt;- Shell#safe_unlink</div><div class='del'>---- Shell#mkpath	&lt;- Shell#makedirs</div><div class='del'>-</div><div class='del'>-= ¥µ¥ó¥×¥ë</div><div class='del'>-</div><div class='del'>-== ex1</div><div class='del'>-</div><div class='del'>-  sh = Shell.cd("/tmp")</div><div class='del'>-  sh.mkdir "shell-test-1" unless sh.exists?("shell-test-1")</div><div class='del'>-  sh.cd("shell-test-1")</div><div class='del'>-  for dir in ["dir1", "dir3", "dir5"]</div><div class='del'>-    if !sh.exists?(dir)</div><div class='del'>-      sh.mkdir dir</div><div class='del'>-      sh.cd(dir) do</div><div class='del'>-	f = sh.open("tmpFile", "w")</div><div class='del'>-	f.print "TEST\n"</div><div class='del'>-	f.close</div><div class='del'>-      end</div><div class='del'>-      print sh.pwd</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-== ex2</div><div class='del'>-</div><div class='del'>-  sh = Shell.cd("/tmp")</div><div class='del'>-  sh.transact do</div><div class='del'>-    mkdir "shell-test-1" unless exists?("shell-test-1")</div><div class='del'>-    cd("shell-test-1")</div><div class='del'>-    for dir in ["dir1", "dir3", "dir5"]</div><div class='del'>-      if !exists?(dir)</div><div class='del'>-	mkdir dir</div><div class='del'>-	cd(dir) do</div><div class='del'>-	  f = open("tmpFile", "w")</div><div class='del'>-	  f.print "TEST\n"</div><div class='del'>-	  f.close</div><div class='del'>-	end</div><div class='del'>-	print pwd</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-== ex3</div><div class='del'>-</div><div class='del'>-  sh.cat("/etc/printcap") | sh.tee("tee1") &gt; "tee2"</div><div class='del'>-  (sh.cat &lt; "/etc/printcap") | sh.tee("tee11") &gt; "tee12"</div><div class='del'>-  sh.cat("/etc/printcap") | sh.tee("tee1") &gt;&gt; "tee2"</div><div class='del'>-  (sh.cat &lt; "/etc/printcap") | sh.tee("tee11") &gt;&gt; "tee12"</div><div class='del'>-</div><div class='del'>-== ex4</div><div class='del'>-</div><div class='del'>-  print sh.cat("/etc/passwd").head.collect{|l| l =~ /keiju/}</div><div class='del'>-</div><div class='del'>-=end</div><div class='head'>diff --git a/enum.c b/enum.c<br/>index df35c2fe03..38feb29aa4 100644<br/>--- a/<a href='/ruby.git/tree/enum.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>enum.c</a><br/>+++ b/<a href='/ruby.git/tree/enum.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>enum.c</a></div><div class='hunk'>@@ -1,1891 +1,305 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   enum.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='ctx'>   created at: Fri Oct  1 15:15:19 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "node.h"</div><div class='del'>-#include "util.h"</div><div class='ctx'> </div><div class='del'>-VALUE rb_mEnumerable;</div><div class='del'>-static ID id_each, id_eqq, id_cmp, id_size;</div><div class='add'>+VALUE M_Enumerable;</div><div class='add'>+static ID id_each, id_match, id_equal, id_cmp;</div><div class='ctx'> </div><div class='del'>-struct iter_method_arg {</div><div class='del'>-    VALUE obj;</div><div class='del'>-    ID mid;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE iterate_method _((VALUE obj));</div><div class='del'>-static VALUE</div><div class='del'>-iterate_method(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct iter_method_arg *arg;</div><div class='del'>-</div><div class='del'>-    arg = (struct iter_method_arg *)obj;</div><div class='del'>-    return rb_funcall2(arg-&gt;obj, arg-&gt;mid, arg-&gt;argc, arg-&gt;argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_block_call(obj, mid, argc, argv, bl_proc, data2)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    ID mid;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE (*bl_proc) (ANYARGS);</div><div class='del'>-    VALUE data2;</div><div class='del'>-{</div><div class='del'>-    struct iter_method_arg arg;</div><div class='del'>-</div><div class='del'>-    arg.obj = obj;</div><div class='del'>-    arg.mid = mid;</div><div class='del'>-    arg.argc = argc;</div><div class='del'>-    arg.argv = argv;</div><div class='del'>-    return rb_iterate(iterate_method, (VALUE)&amp;arg, bl_proc, data2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='add'>+void</div><div class='ctx'> rb_each(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    return rb_funcall(obj, id_each, 0, 0);</div><div class='add'>+    rb_funcall(obj, id_each, 0, Qnil);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-grep_i(i, arg)</div><div class='add'>+static void</div><div class='add'>+enum_grep(i, arg)</div><div class='ctx'>     VALUE i, *arg;</div><div class='ctx'> {</div><div class='del'>-    if (RTEST(rb_funcall(arg[0], id_eqq, 1, i))) {</div><div class='del'>-	rb_ary_push(arg[1], i);</div><div class='add'>+    if (rb_funcall(arg[0], id_match, 1, i)) {</div><div class='add'>+	Fary_push(arg[1], i);</div><div class='ctx'>     }</div><div class='del'>-    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-grep_iter_i(i, arg)</div><div class='del'>-    VALUE i, *arg;</div><div class='add'>+static void</div><div class='add'>+enum_grep2(i, pat)</div><div class='add'>+    VALUE i, pat;</div><div class='ctx'> {</div><div class='del'>-    if (RTEST(rb_funcall(arg[0], id_eqq, 1, i))) {</div><div class='del'>-	rb_ary_push(arg[1], rb_yield(i));</div><div class='add'>+    if (rb_funcall(pat, id_match, 1, i)) {</div><div class='add'>+	rb_yield(i);</div><div class='ctx'>     }</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'>- *     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='del'>-static VALUE</div><div class='del'>-enum_grep(obj, pat)</div><div class='del'>-    VALUE obj, pat;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='del'>-    VALUE arg[2];</div><div class='del'>-</div><div class='del'>-    arg[0] = pat;</div><div class='del'>-    arg[1] = ary;</div><div class='del'>-</div><div class='del'>-    rb_iterate(rb_each, obj, rb_block_given_p() ? grep_iter_i : grep_i, (VALUE)arg);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE count_i _((VALUE, VALUE));</div><div class='ctx'> static VALUE</div><div class='del'>-count_i(i, memop)</div><div class='del'>-    VALUE i, memop;</div><div class='del'>-{</div><div class='del'>-    VALUE *memo = (VALUE*)memop;</div><div class='del'>-</div><div class='del'>-    if (rb_equal(i, memo[1])) {</div><div class='del'>-	memo[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 count_iter_i _((VALUE, VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-count_iter_i(i, memop)</div><div class='del'>-    VALUE i, memop;</div><div class='del'>-{</div><div class='del'>-    VALUE *memo = (VALUE*)memop;</div><div class='del'>-</div><div class='del'>-    if (RTEST(rb_yield(i))) {</div><div class='del'>-	memo[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 count_all_i _((VALUE, VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-count_all_i(i, memop)</div><div class='del'>-    VALUE i, memop;</div><div class='del'>-{</div><div class='del'>-    VALUE *memo = (VALUE*)memop;</div><div class='del'>-</div><div class='del'>-    memo[0]++;</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'>- *     enum.count                   =&gt; int</div><div class='del'>- *     enum.count(item)             =&gt; int</div><div class='del'>- *     enum.count {| obj | block }  =&gt; int</div><div class='del'>- *</div><div class='del'>- *  Returns the number of items in &lt;i&gt;enum&lt;/i&gt;, where #size is called</div><div class='del'>- *  if it responds to it, otherwise the items are counted through</div><div class='del'>- *  enumeration.  If an argument is given, counts the number of items</div><div class='del'>- *  in &lt;i&gt;enum&lt;/i&gt;, for which equals to &lt;i&gt;item&lt;/i&gt;.  If a block is</div><div class='del'>- *  given, counts the number of elements yielding a true value.</div><div class='del'>- *</div><div class='del'>- *     ary = [1, 2, 4, 2]</div><div class='del'>- *     ary.count             # =&gt; 4</div><div class='del'>- *     ary.count(2)          # =&gt; 2</div><div class='del'>- *     ary.count{|x|x%2==0}  # =&gt; 3</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_count(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Fenum_grep(obj, pat)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE memo[2];	/* [count, condition value] */</div><div class='del'>-    rb_block_call_func *func;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    func = count_iter_i;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    if (rb_respond_to(obj, id_size)) {</div><div class='del'>-		return rb_funcall(obj, id_size, 0, 0);</div><div class='del'>-	    }</div><div class='del'>-	    func = count_all_i;</div><div class='del'>-	}</div><div class='add'>+    if (iterator_p()) {</div><div class='add'>+	rb_iterate(rb_each, obj, enum_grep2, pat);</div><div class='add'>+	return obj;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_scan_args(argc, argv, "1", &amp;memo[1]);</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    rb_warn("given block not used");</div><div class='del'>-	}</div><div class='del'>-        func = count_i;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    memo[0] = 0;</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, func, (VALUE)&amp;memo);</div><div class='del'>-    return INT2NUM(memo[0]);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-find_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    if (RTEST(rb_yield(i))) {</div><div class='del'>-	*memo = i;</div><div class='del'>-	rb_iter_break();</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'>- *     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='del'>-static VALUE</div><div class='del'>-enum_find(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 memo = Qundef;</div><div class='del'>-    VALUE if_none;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;if_none);</div><div class='del'>-    RETURN_ENUMERATOR(obj, argc, argv);</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='del'>-    }</div><div class='del'>-    if (!NIL_P(if_none)) {</div><div class='del'>-	return rb_funcall(if_none, rb_intern("call"), 0, 0);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='add'>+	VALUE tmp, arg[2];</div><div class='ctx'> </div><div class='del'>-static VALUE find_index_i _((VALUE, VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-find_index_i(i, memop)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE memop;</div><div class='del'>-{</div><div class='del'>-    VALUE *memo = (VALUE*)memop;</div><div class='add'>+	arg[0] = pat; arg[1] = tmp = ary_new();</div><div class='add'>+	rb_iterate(rb_each, obj, enum_grep, arg);</div><div class='ctx'> </div><div class='del'>-    if (rb_equal(i, memo[2])) {</div><div class='del'>-	memo[0] = UINT2NUM(memo[1]);</div><div class='del'>-	rb_iter_break();</div><div class='add'>+	return tmp;</div><div class='ctx'>     }</div><div class='del'>-    memo[1]++;</div><div class='del'>-    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE find_index_iter_i _((VALUE, VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-find_index_iter_i(i, memop)</div><div class='add'>+static void</div><div class='add'>+enum_find(i, foundp)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE memop;</div><div class='del'>-{</div><div class='del'>-    VALUE *memo = (VALUE*)memop;</div><div class='del'>-</div><div class='del'>-    if (RTEST(rb_yield(i))) {</div><div class='del'>-	memo[0] = UINT2NUM(memo[1]);</div><div class='del'>-	rb_iter_break();</div><div class='del'>-    }</div><div class='del'>-    memo[1]++;</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'>- *     enum.find_index(value)            =&gt; int or nil</div><div class='del'>- *     enum.find_index {| obj | block }  =&gt; int or nil</div><div class='del'>- *</div><div class='del'>- *  Compares each entry in &lt;i&gt;enum&lt;/i&gt; with &lt;em&gt;value&lt;/em&gt; or passes</div><div class='del'>- *  to &lt;em&gt;block&lt;/em&gt;.  Returns the index for the first for which the</div><div class='del'>- *  evaluated value is non-false.  If no object matches, returns</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt;</div><div class='del'>- *</div><div class='del'>- *     (1..10).find_index  {|i| i % 5 == 0 and i % 7 == 0 }   #=&gt; nil</div><div class='del'>- *     (1..100).find_index {|i| i % 5 == 0 and i % 7 == 0 }   #=&gt; 34</div><div class='del'>- *     (1..100).find_index(50)                                #=&gt; 49</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_find_index(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 memo[3];	/* [return value, current index, condition value] */</div><div class='del'>-    rb_block_call_func *func;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-        RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-        func = find_index_iter_i;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "1", &amp;memo[2]);</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    rb_warn("given block not used");</div><div class='del'>-	}</div><div class='del'>-        func = find_index_i;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    memo[0] = Qnil;</div><div class='del'>-    memo[1] = 0;</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, func, (VALUE)memo);</div><div class='del'>-    return memo[0];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-find_all_i(i, ary)</div><div class='del'>-    VALUE i, ary;</div><div class='add'>+    int *foundp;</div><div class='ctx'> {</div><div class='del'>-    if (RTEST(rb_yield(i))) {</div><div class='del'>-	rb_ary_push(ary, i);</div><div class='add'>+    if (rb_yield(i)) {</div><div class='add'>+	*foundp = TRUE;</div><div class='add'>+	rb_break();</div><div class='ctx'>     }</div><div class='del'>-    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='del'>-enum_find_all(obj)</div><div class='add'>+Fenum_find(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='add'>+    int enum_found;</div><div class='ctx'> </div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-    rb_iterate(rb_each, obj, find_all_i, ary);</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'>-reject_i(i, ary)</div><div class='del'>-    VALUE i, ary;</div><div class='del'>-{</div><div class='del'>-    if (!RTEST(rb_yield(i))) {</div><div class='del'>-	rb_ary_push(ary, i);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='add'>+    enum_found = FALSE;</div><div class='add'>+    rb_iterate(rb_each, obj, enum_find, &amp;enum_found);</div><div class='add'>+    return enum_found;</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='del'>-static VALUE</div><div class='del'>-enum_reject(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-    rb_iterate(rb_each, obj, reject_i, ary);</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'>-collect_i(i, ary)</div><div class='del'>-    VALUE i, ary;</div><div class='del'>-{</div><div class='del'>-    rb_ary_push(ary, rb_yield(i));</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'>-collect_all(i, ary)</div><div class='del'>-    VALUE i, ary;</div><div class='del'>-{</div><div class='del'>-    rb_ary_push(ary, i);</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'>- *     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='del'>-static VALUE</div><div class='del'>-enum_collect(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    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='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-enum_to_a(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 ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    rb_block_call(obj, id_each, argc, argv, collect_all, ary);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE inject_i _((VALUE, VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-inject_i(i, p)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE p;</div><div class='del'>-{</div><div class='del'>-    VALUE *memo = (VALUE *)p;</div><div class='del'>-    if (memo[0] == Qundef) {</div><div class='del'>-	memo[0] = i;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	memo[0] = rb_yield_values(2, memo[0], i);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE inject_op_i _((VALUE, VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-inject_op_i(i, p)</div><div class='add'>+static void</div><div class='add'>+enum_find_all(i, tmp)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE p;</div><div class='ctx'> {</div><div class='del'>-    VALUE *memo = (VALUE *)p;</div><div class='del'>-</div><div class='del'>-    if (memo[0] == Qundef) {</div><div class='del'>-	memo[0] = i;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	memo[0] = rb_funcall(memo[0], (ID)memo[1], 1, i);</div><div class='add'>+    if (rb_yield(i)) {</div><div class='add'>+	Fary_push(tmp, i);</div><div class='ctx'>     }</div><div class='del'>-    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, sym) =&gt; obj</div><div class='del'>- *     enum.inject(sym)          =&gt; obj</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'>- *     enum.reduce(initial, sym) =&gt; obj</div><div class='del'>- *     enum.reduce(sym)          =&gt; obj</div><div class='del'>- *     enum.reduce(initial) {| memo, obj | block }  =&gt; obj</div><div class='del'>- *     enum.reduce          {| memo, obj | block }  =&gt; obj</div><div class='del'>- *</div><div class='del'>- *  Combines all elements of &lt;i&gt;enum&lt;/i&gt; by applying a binary</div><div class='del'>- *  operation, specified by a block or a symbol that names a</div><div class='del'>- *  method or operator.</div><div class='del'>- *</div><div class='del'>- *  If you specify a block, then for each element in &lt;i&gt;enum&lt;i&gt;</div><div class='del'>- *  the block is passed an accumulator value (&lt;i&gt;memo&lt;/i&gt;) and the element.</div><div class='del'>- *  If you specify a symbol instead, then each element in the collection</div><div class='del'>- *  will be passed to the named method of &lt;i&gt;memo&lt;/i&gt;.</div><div class='del'>- *  In either case, the result becomes the new value for &lt;i&gt;memo&lt;/i&gt;.</div><div class='del'>- *  At the end of the iteration, the final value of &lt;i&gt;memo&lt;/i&gt; is the</div><div class='del'>- *  return value fo the method.</div><div class='del'>- *</div><div class='del'>- *  If you do not explicitly specify an &lt;i&gt;initial&lt;/i&gt; value for &lt;i&gt;memo&lt;/i&gt;,</div><div class='del'>- *  then uses the first element of collection is used as the initial value</div><div class='del'>- *  of &lt;i&gt;memo&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *  Examples:</div><div class='del'>- *</div><div class='del'>- *     # Sum some numbers</div><div class='del'>- *     (5..10).reduce(:+)                            #=&gt; 45</div><div class='del'>- *     # Same using a block and inject</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).reduce(1, :*)                         #=&gt; 151200</div><div class='del'>- *     # Same using a block</div><div class='del'>- *     (5..10).inject(1) {|product, n| product * n } #=&gt; 151200</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'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-enum_inject(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Fenum_find_all(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE memo[2];</div><div class='del'>-    rb_block_call_func *iter = inject_i;</div><div class='del'>-</div><div class='del'>-    switch (rb_scan_args(argc, argv, "02", &amp;memo[0], &amp;memo[1])) {</div><div class='del'>-      case 0:</div><div class='del'>-	memo[0] = Qundef;</div><div class='del'>-	break;</div><div class='del'>-      case 1:</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	memo[1] = (VALUE)rb_to_id(memo[0]);</div><div class='del'>-	memo[0] = Qundef;</div><div class='del'>-	iter = inject_op_i;</div><div class='del'>-	break;</div><div class='del'>-      case 2:</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    rb_warning("given block not used");</div><div class='del'>-	}</div><div class='del'>-	memo[1] = (VALUE)rb_to_id(memo[1]);</div><div class='del'>-	iter = inject_op_i;</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, iter, (VALUE)memo);</div><div class='del'>-    if (memo[0] == Qundef) return Qnil;</div><div class='del'>-    return memo[0];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-partition_i(i, ary)</div><div class='del'>-    VALUE i, *ary;</div><div class='del'>-{</div><div class='del'>-    if (RTEST(rb_yield(i))) {</div><div class='del'>-	rb_ary_push(ary[0], i);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_ary_push(ary[1], i);</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'>- *     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='del'>-static VALUE</div><div class='del'>-enum_partition(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE ary[2];</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='add'>+    VALUE tmp;</div><div class='ctx'> </div><div class='del'>-    ary[0] = rb_ary_new();</div><div class='del'>-    ary[1] = rb_ary_new();</div><div class='del'>-    rb_iterate(rb_each, obj, partition_i, (VALUE)ary);</div><div class='add'>+    tmp = ary_new();</div><div class='add'>+    rb_iterate(rb_each, obj, enum_find_all, Qnil);</div><div class='ctx'> </div><div class='del'>-    return rb_assoc_new(ary[0], ary[1]);</div><div class='add'>+    return tmp;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-group_by_i(i, hash)</div><div class='add'>+static void</div><div class='add'>+enum_collect(i, tmp)</div><div class='ctx'>     VALUE i;</div><div class='del'>-    VALUE hash;</div><div class='ctx'> {</div><div class='del'>-    VALUE group = rb_yield(i);</div><div class='del'>-    VALUE values;</div><div class='add'>+    VALUE retval;</div><div class='ctx'> </div><div class='del'>-    values = rb_hash_aref(hash, group);</div><div class='del'>-    if (NIL_P(values)) {</div><div class='del'>-	values = rb_ary_new3(1, i);</div><div class='del'>-	rb_hash_aset(hash, group, values);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_ary_push(values, i);</div><div class='add'>+    retval = rb_yield(i);</div><div class='add'>+    if (retval) {</div><div class='add'>+	Fary_push(tmp, retval);</div><div class='ctx'>     }</div><div class='del'>-    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.group_by {| obj | block }  =&gt; a_hash</div><div class='del'>- *</div><div class='del'>- *  Returns a hash, which keys are evaluated result from the</div><div class='del'>- *  block, and values are arrays of elements in &lt;i&gt;enum&lt;/i&gt;</div><div class='del'>- *  corresponding to the key.</div><div class='del'>- *</div><div class='del'>- *     (1..6).group_by {|i| i%3}   #=&gt; {0=&gt;[3, 6], 1=&gt;[1, 4], 2=&gt;[2, 5]}</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-enum_group_by(obj)</div><div class='add'>+Fenum_collect(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='add'>+    VALUE tmp;</div><div class='ctx'> </div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, group_by_i, hash);</div><div class='add'>+    tmp = ary_new();</div><div class='add'>+    rb_iterate(rb_each, obj, enum_collect, tmp);</div><div class='ctx'> </div><div class='del'>-    return hash;</div><div class='add'>+    return tmp;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-first_i(i, ary)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *ary;</div><div class='add'>+static void</div><div class='add'>+enum_reverse(i, tmp)</div><div class='add'>+    VALUE i, tmp;</div><div class='ctx'> {</div><div class='del'>-    if (NIL_P(ary[0])) {</div><div class='del'>-	ary[1] = i;</div><div class='del'>-	rb_iter_break();</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	long n = NUM2LONG(ary[0]);</div><div class='del'>-</div><div class='del'>-	if (n &lt;= 0) {</div><div class='del'>-	    rb_iter_break();</div><div class='del'>-	}</div><div class='del'>-	rb_ary_push(ary[1], i);</div><div class='del'>-	n--;</div><div class='del'>-	ary[0] = INT2NUM(n);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='add'>+    Fary_unshift(tmp, i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.first      -&gt; obj or nil</div><div class='del'>- *     enum.first(n)   -&gt; an_array</div><div class='del'>- *</div><div class='del'>- *  Returns the first element, or the first +n+ elements, of the enumerable.</div><div class='del'>- *  If the enumerable 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'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-enum_first(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Fenum_reverse(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE n, ary[2];</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	ary[0] = ary[1] = Qnil;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "01", &amp;n);</div><div class='del'>-	ary[0] = n;</div><div class='del'>-	ary[1] = rb_ary_new2(NUM2LONG(n));</div><div class='del'>-    }</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, first_i, (VALUE)ary);</div><div class='del'>-</div><div class='del'>-    return ary[1];</div><div class='del'>-}</div><div class='del'>-</div><div class='add'>+    VALUE tmp;</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='add'>+    tmp = ary_new();</div><div class='add'>+    rb_iterate(rb_each, obj, enum_reverse, tmp);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-enum_sort(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_ary_sort(enum_to_a(0, 0, obj));</div><div class='add'>+    return tmp;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-sort_by_i(i, ary)</div><div class='add'>+static void</div><div class='add'>+enum_all(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='del'>-</div><div class='del'>-    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='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-sort_by_cmp(aa, bb, data)</div><div class='del'>-    NODE **aa, **bb;</div><div class='del'>-    void *data;</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'>-    VALUE ary = (VALUE)data;</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='del'>-    }</div><div class='del'>-    return rb_cmpint(rb_funcall(a, id_cmp, 1, b), a, b);</div><div class='add'>+    Fary_push(ary, i);</div><div class='ctx'> }</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='del'>-</div><div class='add'>+    </div><div class='ctx'> static VALUE</div><div class='del'>-enum_sort_by(obj)</div><div class='add'>+Fenum_to_a(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE ary;</div><div class='del'>-    long i;</div><div class='ctx'> </div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='add'>+    ary = ary_new();</div><div class='add'>+    rb_iterate(rb_each, obj, enum_all, ary);</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='del'>-    rb_iterate(rb_each, obj, sort_by_i, ary);</div><div class='del'>-    if (RARRAY(ary)-&gt;len &gt; 1) {</div><div class='del'>-	qsort(RARRAY(ary)-&gt;ptr, RARRAY(ary)-&gt;len, sizeof(VALUE),</div><div class='del'>-	      sort_by_cmp, (void *)ary);</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='del'>-    }</div><div class='del'>-    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='del'>-    }</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='del'>-all_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    if (!RTEST(i)) {</div><div class='del'>-	*memo = Qfalse;</div><div class='del'>-	rb_iter_break();</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'>-all_iter_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    return all_i(rb_yield(i), memo);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-enum_all(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE result = Qtrue;</div><div class='del'>-</div><div class='del'>-    rb_iterate(rb_each, obj, rb_block_given_p() ? all_iter_i : all_i, (VALUE)&amp;result);</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-any_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    if (RTEST(i)) {</div><div class='del'>-	*memo = Qtrue;</div><div class='del'>-	rb_iter_break();</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'>-any_iter_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    return any_i(rb_yield(i), memo);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-enum_any(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE result = Qfalse;</div><div class='del'>-</div><div class='del'>-    rb_iterate(rb_each, obj, rb_block_given_p() ? any_iter_i : any_i, (VALUE)&amp;result);</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-one_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    if (RTEST(i)) {</div><div class='del'>-	if (*memo == Qundef) {</div><div class='del'>-	    *memo = Qtrue;</div><div class='del'>-	}</div><div class='del'>-	else if (*memo == Qtrue) {</div><div class='del'>-	    *memo = Qfalse;</div><div class='del'>-	    rb_iter_break();</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'>-one_iter_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    return one_i(rb_yield(i), memo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.one? [{|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 returns &lt;code&gt;true&lt;/code&gt;</div><div class='del'>- *  exactly once. If the block is not given, &lt;code&gt;one?&lt;/code&gt; will return</div><div class='del'>- *  &lt;code&gt;true&lt;/code&gt; only if exactly one of the collection members is</div><div class='del'>- *  true.</div><div class='del'>- *</div><div class='del'>- *     %w{ant bear cat}.one? {|word| word.length == 4}   #=&gt; true</div><div class='del'>- *     %w{ant bear cat}.one? {|word| word.length &gt; 4}    #=&gt; false</div><div class='del'>- *     %w{ant bear cat}.one? {|word| word.length &lt; 4}    #=&gt; false</div><div class='del'>- *     [ nil, true, 99 ].one?                            #=&gt; false</div><div class='del'>- *     [ nil, true, false ].one?                         #=&gt; true</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_one(obj)</div><div class='add'>+Fenum_sort(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qundef;</div><div class='del'>-</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? one_iter_i : one_i, (VALUE)&amp;result);</div><div class='del'>-    if (result == Qundef) return Qfalse;</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-none_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    if (RTEST(i)) {</div><div class='del'>-	*memo = Qfalse;</div><div class='del'>-	rb_iter_break();</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'>-none_iter_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    return none_i(rb_yield(i), memo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.none? [{|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 &lt;code&gt;true&lt;/code&gt;</div><div class='del'>- *  for all elements. If the block is not given, &lt;code&gt;none?&lt;/code&gt; will return</div><div class='del'>- *  &lt;code&gt;true&lt;/code&gt; only if none of the collection members is true.</div><div class='del'>- *</div><div class='del'>- *     %w{ant bear cat}.none? {|word| word.length == 5}  #=&gt; true</div><div class='del'>- *     %w{ant bear cat}.none? {|word| word.length &gt;= 4}  #=&gt; false</div><div class='del'>- *     [].none?                                          #=&gt; true</div><div class='del'>- *     [nil].none?                                       #=&gt; true</div><div class='del'>- *     [nil,false].none?                                 #=&gt; true</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enum_none(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE result = Qtrue;</div><div class='add'>+    VALUE ary;</div><div class='ctx'> </div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, rb_block_given_p() ? none_iter_i : none_i, (VALUE)&amp;result);</div><div class='del'>-    return result;</div><div class='add'>+    ary = Fenum_to_a(obj);</div><div class='add'>+    Fary_sort(ary);</div><div class='add'>+    return ary;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-min_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+static void</div><div class='add'>+enum_min(i, min)</div><div class='add'>+    VALUE i, *min;</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='del'>-    }</div><div class='add'>+    if (*min == Qnil)</div><div class='add'>+	*min = i;</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='del'>-	}</div><div class='add'>+	cmp = rb_funcall(i, id_cmp, 1, *min);</div><div class='add'>+	if (FIX2INT(cmp) &lt; 0)</div><div class='add'>+	    *min = i;</div><div class='ctx'>     }</div><div class='del'>-    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-min_ii(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    VALUE cmp;</div><div class='del'>-</div><div class='del'>-    if (*memo == Qundef) {</div><div class='del'>-	*memo = i;</div><div class='del'>-    }</div><div class='del'>-    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='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'>-/*</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='del'>-static VALUE</div><div class='del'>-enum_min(obj)</div><div class='add'>+Fenum_min(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qundef;</div><div class='add'>+    VALUE min = Qnil;</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='del'>-    return result;</div><div class='add'>+    rb_iterate(rb_each, obj, enum_min, &amp;min);</div><div class='add'>+    return min;</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='del'>-static VALUE</div><div class='del'>-max_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+static void</div><div class='add'>+enum_max(i, max)</div><div class='add'>+    VALUE i, *max;</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='del'>-    }</div><div class='add'>+    if (*max == Qnil)</div><div class='add'>+	*max = i;</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='del'>-	}</div><div class='add'>+	cmp = rb_funcall(i, id_cmp, 1, *max);</div><div class='add'>+	if (FIX2INT(cmp) &gt; 0)</div><div class='add'>+	    *max = i;</div><div class='ctx'>     }</div><div class='del'>-    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-max_ii(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    VALUE cmp;</div><div class='del'>-</div><div class='del'>-    if (*memo == Qundef) {</div><div class='del'>-	*memo = i;</div><div class='del'>-    }</div><div class='del'>-    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='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'>- *     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='del'>-static VALUE</div><div class='del'>-enum_max(obj)</div><div class='add'>+Fenum_max(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qundef;</div><div class='add'>+    VALUE max = Qnil;</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='del'>-    return result;</div><div class='add'>+    rb_iterate(rb_each, obj, enum_max, &amp;max);</div><div class='add'>+    return max;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-minmax_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    if (memo[0] == Qundef) {</div><div class='del'>-	memo[0] = i;</div><div class='del'>-	memo[1] = i;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	n = rb_cmpint(rb_funcall(i, id_cmp, 1, memo[0]), i, memo[0]);</div><div class='del'>-	if (n &lt; 0) {</div><div class='del'>-	    memo[0] = i;</div><div class='del'>-	}</div><div class='del'>-	n = rb_cmpint(rb_funcall(i, id_cmp, 1, memo[1]), i, memo[1]);</div><div class='del'>-	if (n &gt; 0) {</div><div class='del'>-	    memo[1] = i;</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'>-minmax_ii(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    if (memo[0] == Qundef) {</div><div class='del'>-	memo[0] = i;</div><div class='del'>-	memo[1] = i;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE ary = memo[2];</div><div class='del'>-</div><div class='del'>-	RARRAY(ary)-&gt;ptr[0] = i;</div><div class='del'>-	RARRAY(ary)-&gt;ptr[1] = memo[0];</div><div class='del'>-	n = rb_cmpint(rb_yield(ary), i, memo[0]);</div><div class='del'>-	if (n &lt; 0) {</div><div class='del'>-	    memo[0] = i;</div><div class='del'>-	}</div><div class='del'>-	RARRAY(ary)-&gt;ptr[0] = i;</div><div class='del'>-	RARRAY(ary)-&gt;ptr[1] = memo[1];</div><div class='del'>-	n = rb_cmpint(rb_yield(ary), i, memo[1]);</div><div class='del'>-	if (n &gt; 0) {</div><div class='del'>-	    memo[1] = i;</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'>- *     enum.minmax                   =&gt; [min,max]</div><div class='del'>- *     enum.minmax {|a,b| block }    =&gt; [min,max]</div><div class='del'>- *</div><div class='del'>- *  Returns two elements array which contains the minimum and the</div><div class='del'>- *  maximum value in the enumerable.  The first form assumes all</div><div class='del'>- *  objects implement &lt;code&gt;Comparable&lt;/code&gt;; the second uses the</div><div class='del'>- *  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.minmax                                  #=&gt; ["albatross", "horse"]</div><div class='del'>- *     a.minmax {|a,b| a.length &lt;=&gt; b.length }   #=&gt; ["dog", "albatross"]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_minmax(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE result[3];</div><div class='del'>-    VALUE ary = rb_ary_new3(2, Qnil, Qnil);</div><div class='del'>-</div><div class='del'>-    result[0] = Qundef;</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	result[2] = ary;</div><div class='del'>-	rb_block_call(obj, id_each, 0, 0, minmax_ii, (VALUE)result);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_block_call(obj, id_each, 0, 0, minmax_i, (VALUE)result);</div><div class='del'>-    }</div><div class='del'>-    if (result[0] != Qundef) {</div><div class='del'>-        RARRAY(ary)-&gt;ptr[0] = result[0];</div><div class='del'>-        RARRAY(ary)-&gt;ptr[1] = result[1];</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'>-min_by_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    VALUE v;</div><div class='del'>-</div><div class='del'>-    v = rb_yield(i);</div><div class='del'>-    if (memo[0] == Qundef) {</div><div class='del'>-	memo[0] = v;</div><div class='del'>-	memo[1] = i;</div><div class='del'>-    }</div><div class='del'>-    else if (rb_cmpint(rb_funcall(v, id_cmp, 1, memo[0]), v, memo[0]) &lt; 0) {</div><div class='del'>-	memo[0] = v;</div><div class='del'>-	memo[1] = i;</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'>- *     enum.min_by {| obj| block }   =&gt; obj</div><div class='del'>- *</div><div class='del'>- *  Returns the object in &lt;i&gt;enum&lt;/i&gt; that gives the minimum</div><div class='del'>- *  value from the given block.</div><div class='del'>- *</div><div class='del'>- *     a = %w(albatross dog horse)</div><div class='del'>- *     a.min_by {|x| x.length }   #=&gt; "dog"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_min_by(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE memo[2];</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-</div><div class='del'>-    memo[0] = Qundef;</div><div class='del'>-    memo[1] = Qnil;</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, min_by_i, (VALUE)memo);</div><div class='del'>-    return memo[1];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-max_by_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    VALUE v;</div><div class='del'>-</div><div class='del'>-    v = rb_yield(i);</div><div class='del'>-    if (memo[0] == Qundef) {</div><div class='del'>-	memo[0] = v;</div><div class='del'>-	memo[1] = i;</div><div class='del'>-    }</div><div class='del'>-    else if (rb_cmpint(rb_funcall(v, id_cmp, 1, memo[0]), v, memo[0]) &gt; 0) {</div><div class='del'>-	memo[0] = v;</div><div class='del'>-	memo[1] = i;</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'>- *     enum.max_by {| obj| block }   =&gt; obj</div><div class='del'>- *</div><div class='del'>- *  Returns the object in &lt;i&gt;enum&lt;/i&gt; that gives the maximum</div><div class='del'>- *  value from the given block.</div><div class='del'>- *</div><div class='del'>- *     a = %w(albatross dog horse)</div><div class='del'>- *     a.max_by {|x| x.length }   #=&gt; "albatross"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_max_by(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE memo[2];</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-</div><div class='del'>-    memo[0] = Qundef;</div><div class='del'>-    memo[1] = Qnil;</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, max_by_i, (VALUE)memo);</div><div class='del'>-    return memo[1];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-minmax_by_i(i, memo)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='add'>+struct i_v_pair {</div><div class='add'>+    int i;</div><div class='ctx'>     VALUE v;</div><div class='add'>+    int found;</div><div class='add'>+};</div><div class='ctx'> </div><div class='del'>-    v = rb_yield(i);</div><div class='del'>-    if (memo[0] == Qundef) {</div><div class='del'>-	memo[0] = v;</div><div class='del'>-	memo[1] = v;</div><div class='del'>-	memo[2] = i;</div><div class='del'>-	memo[3] = i;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (rb_cmpint(rb_funcall(v, id_cmp, 1, memo[0]), v, memo[0]) &lt; 0) {</div><div class='del'>-	    memo[0] = v;</div><div class='del'>-	    memo[2] = i;</div><div class='del'>-	}</div><div class='del'>-	if (rb_cmpint(rb_funcall(v, id_cmp, 1, memo[1]), v, memo[1]) &gt; 0) {</div><div class='del'>-	    memo[1] = v;</div><div class='del'>-	    memo[3] = i;</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'>- *     enum.minmax_by {| obj| block }   =&gt; [min, max]</div><div class='del'>- *</div><div class='del'>- *  Returns two elements array array containing the objects in</div><div class='del'>- *  &lt;i&gt;enum&lt;/i&gt; that gives the minimum and maximum values respectively</div><div class='del'>- *  from the given block.</div><div class='del'>- *</div><div class='del'>- *     a = %w(albatross dog horse)</div><div class='del'>- *     a.minmax_by {|x| x.length }   #=&gt; ["dog", "albatross"]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_minmax_by(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE memo[4];</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-</div><div class='del'>-    memo[0] = Qundef;</div><div class='del'>-    memo[1] = Qundef;</div><div class='del'>-    memo[2] = Qnil;</div><div class='del'>-    memo[3] = Qnil;</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, minmax_by_i, (VALUE)memo);</div><div class='del'>-    return rb_assoc_new(memo[2], memo[3]);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-member_i(item, memo)</div><div class='add'>+static void</div><div class='add'>+enum_index(item, iv)</div><div class='ctx'>     VALUE item;</div><div class='del'>-    VALUE *memo;</div><div class='add'>+    struct i_v_pair *iv;</div><div class='ctx'> {</div><div class='del'>-    if (rb_equal(item, memo[0])) {</div><div class='del'>-	memo[1] = Qtrue;</div><div class='del'>-	rb_iter_break();</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'>- *     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='del'>-static VALUE</div><div class='del'>-enum_member(obj, val)</div><div class='del'>-    VALUE obj, val;</div><div class='del'>-{</div><div class='del'>-    VALUE memo[2];</div><div class='del'>-</div><div class='del'>-    memo[0] = val;</div><div class='del'>-    memo[1] = Qfalse;</div><div class='del'>-    rb_iterate(rb_each, obj, member_i, (VALUE)memo);</div><div class='del'>-    return memo[1];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-each_with_index_i(val, memo)</div><div class='del'>-    VALUE val;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    rb_yield_values(2, val, INT2FIX(*memo));</div><div class='del'>-    ++*memo;</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'>- *     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='del'>-static VALUE</div><div class='del'>-enum_each_with_index(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE memo;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-</div><div class='del'>-    memo = 0;</div><div class='del'>-    rb_iterate(rb_each, obj, each_with_index_i, (VALUE)&amp;memo);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.reverse_each {|item| block } </div><div class='del'>- *  </div><div class='del'>- *  Traverses &lt;i&gt;enum&lt;/i&gt; in reverse order.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_reverse_each(int argc, VALUE *argv, VALUE obj)</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, argc, argv);</div><div class='del'>-</div><div class='del'>-    ary = enum_to_a(argc, argv, obj);</div><div class='del'>-</div><div class='del'>-    for (i = RARRAY_LEN(ary); --i &gt;= 0; ) {</div><div class='del'>-	rb_yield(RARRAY_PTR(ary)[i]);</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'>-static VALUE</div><div class='del'>-zip_i(val, memo)</div><div class='del'>-    VALUE val;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</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='del'>-    VALUE tmp;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    tmp = rb_ary_new2(RARRAY(args)-&gt;len + 1);</div><div class='del'>-    rb_ary_store(tmp, 0, val);</div><div class='del'>-    for (i=0; i&lt;RARRAY(args)-&gt;len; i++) {</div><div class='del'>-	rb_ary_push(tmp, rb_ary_entry(RARRAY(args)-&gt;ptr[i], idx));</div><div class='del'>-    }</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	rb_yield(tmp);</div><div class='add'>+    if (rb_funcall(item, id_equal, 1, iv-&gt;v)) {</div><div class='add'>+	iv-&gt;found = 1;</div><div class='add'>+	rb_break();</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_ary_push(result, tmp);</div><div class='add'>+	iv-&gt;i++;</div><div class='ctx'>     }</div><div class='del'>-    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='del'>-enum_zip(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Fenum_index(obj, val)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    int i;</div><div class='del'>-    VALUE result;</div><div class='del'>-    VALUE memo[3];</div><div class='del'>-</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    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='del'>-    rb_iterate(rb_each, obj, zip_i, (VALUE)memo);</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='add'>+    struct i_v_pair iv;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-take_i(i, arg)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *arg;</div><div class='del'>-{</div><div class='del'>-    if (arg[1]-- == 0) rb_iter_break();</div><div class='del'>-    rb_ary_push(arg[0], i);</div><div class='del'>-    return Qnil;</div><div class='add'>+    iv.i = 0;</div><div class='add'>+    iv.v = val;</div><div class='add'>+    iv.found = 0;</div><div class='add'>+    rb_iterate(rb_each, obj, enum_index, &amp;iv);</div><div class='add'>+    if (iv.found) return INT2FIX(iv.i);</div><div class='add'>+    return Qnil;		/* not found */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.take(n)               =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Returns first n elements from &lt;i&gt;enum&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *     a = [1, 2, 3, 4, 5, 0]</div><div class='del'>- *     a.take(3)             # =&gt; [1, 2, 3]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_take(obj, n)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE n;</div><div class='del'>-{</div><div class='del'>-    VALUE args[2];</div><div class='del'>-    long len = NUM2LONG(n);</div><div class='del'>-</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "attempt to take negative size");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    args[1] = len;</div><div class='del'>-    args[0] = rb_ary_new();</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, take_i, (VALUE)args);</div><div class='del'>-    return args[0];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-take_while_i(i, ary)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *ary;</div><div class='del'>-{</div><div class='del'>-    if (!RTEST(rb_yield(i))) rb_iter_break();</div><div class='del'>-    rb_ary_push(*ary, i);</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'>- *     enum.take_while {|arr| block }   =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Passes elements to the block until the block returns nil or false,</div><div class='del'>- *  then stops iterating and returns an array of all prior elements.</div><div class='del'>- *</div><div class='del'>- *     a = [1, 2, 3, 4, 5, 0]</div><div class='del'>- *     a.take_while {|i| i &lt; 3 }   # =&gt; [1, 2]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_take_while(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, take_while_i, (VALUE)&amp;ary);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-drop_i(i, arg)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *arg;</div><div class='del'>-{</div><div class='del'>-    if (arg[1] == 0) {</div><div class='del'>-	rb_ary_push(arg[0], i);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	arg[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'>- *     enum.drop(n)               =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Drops first n elements from &lt;i&gt;enum&lt;/i&gt;, and returns rest elements</div><div class='del'>- *  in an array.</div><div class='del'>- *</div><div class='del'>- *     a = [1, 2, 3, 4, 5, 0]</div><div class='del'>- *     a.drop(3)             # =&gt; [4, 5, 0]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_drop(obj, n)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE n;</div><div class='del'>-{</div><div class='del'>-    VALUE args[2];</div><div class='del'>-    long len = NUM2LONG(n);</div><div class='del'>-</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "attempt to drop negative size");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    args[1] = len;</div><div class='del'>-    args[0] = rb_ary_new();</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, drop_i, (VALUE)args);</div><div class='del'>-    return args[0];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-drop_while_i(i, args)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE *args;</div><div class='add'>+static void</div><div class='add'>+enum_includes(item, iv)</div><div class='add'>+    VALUE item;</div><div class='add'>+    struct i_v_pair *iv;</div><div class='ctx'> {</div><div class='del'>-    if (!args[1] &amp;&amp; !RTEST(rb_yield(i))) {</div><div class='del'>-	args[1] = Qtrue;</div><div class='del'>-    }</div><div class='del'>-    if (args[1]) {</div><div class='del'>-	rb_ary_push(args[0], i);</div><div class='add'>+    if (rb_funcall(item, id_equal, 1, iv-&gt;v)) {</div><div class='add'>+	iv-&gt;i = 1;</div><div class='add'>+	rb_break();</div><div class='ctx'>     }</div><div class='del'>-    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.drop_while {|arr| block }   =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Drops elements up to, but not including, the first element for</div><div class='del'>- *  which the block returns nil or false and returns an array</div><div class='del'>- *  containing the remaining elements.</div><div class='del'>- *</div><div class='del'>- *     a = [1, 2, 3, 4, 5, 0]</div><div class='del'>- *     a.drop_while {|i| i &lt; 3 }   # =&gt; [3, 4, 5, 0]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-enum_drop_while(obj)</div><div class='add'>+Fenum_includes(obj, val)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE args[2];</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-    args[0] = rb_ary_new();</div><div class='del'>-    args[1] = Qfalse;</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, drop_while_i, (VALUE)args);</div><div class='del'>-    return args[0];</div><div class='del'>-}</div><div class='add'>+    struct i_v_pair iv;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-cycle_i(i, ary)</div><div class='del'>-    VALUE i;</div><div class='del'>-    VALUE ary;</div><div class='del'>-{</div><div class='del'>-    rb_ary_push(ary, i);</div><div class='del'>-    rb_yield(i);</div><div class='del'>-    return Qnil;</div><div class='add'>+    iv.i = 0;</div><div class='add'>+    iv.v = val;</div><div class='add'>+    rb_iterate(rb_each, obj, enum_includes, &amp;iv);</div><div class='add'>+    if (iv.i) return TRUE;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     enum.cycle {|obj| block }</div><div class='del'>- *     enum.cycle(n) {|obj| block }</div><div class='del'>- *</div><div class='del'>- *  Calls &lt;i&gt;block&lt;/i&gt; for each element of &lt;i&gt;enum&lt;/i&gt; repeatedly _n_</div><div class='del'>- *  times or forever if none or nil is given.  If a non-positive</div><div class='del'>- *  number is given or the collection is empty, does nothing.  Returns</div><div class='del'>- *  nil if the loop has finished without getting interrupted.</div><div class='del'>- *</div><div class='del'>- *  Enumerable#cycle saves elements in an internal array so changes</div><div class='del'>- *  to &lt;i&gt;enum&lt;/i&gt; after the first pass have no effect.</div><div class='del'>- *</div><div class='del'>- *     a = ["a", "b", "c"]</div><div class='del'>- *     a.cycle {|x| puts x }  # print, a, b, c, a, b, c,.. forever.</div><div class='del'>- *     a.cycle(2) {|x| puts x }  # print, a, b, c, a, b, c.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enum_cycle(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 ary;</div><div class='del'>-    VALUE nv = Qnil;</div><div class='del'>-    long n, i, len;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;nv);</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, argc, argv);</div><div class='del'>-    if (NIL_P(nv)) {</div><div class='del'>-        n = -1;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        n = NUM2LONG(nv);</div><div class='del'>-        if (n &lt;= 0) return Qnil;</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    RBASIC(ary)-&gt;klass = 0;</div><div class='del'>-    rb_block_call(obj, id_each, 0, 0, cycle_i, ary);</div><div class='del'>-    len = RARRAY(ary)-&gt;len;</div><div class='del'>-    if (len == 0) return Qnil;</div><div class='del'>-    while (n &lt; 0 || 0 &lt; --n) {</div><div class='del'>-        for (i=0; i&lt;len; i++) {</div><div class='del'>-            rb_yield(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='del'>-}</div><div class='del'>-</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='del'>-void</div><div class='ctx'> Init_Enumerable()</div><div class='ctx'> {</div><div class='del'>-    rb_mEnumerable = rb_define_module("Enumerable");</div><div class='add'>+    M_Enumerable = rb_define_module("Enumerable");</div><div class='ctx'> </div><div class='del'>-    rb_define_method(rb_mEnumerable, "to_a", enum_to_a, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "entries", enum_to_a, -1);</div><div class='add'>+    rb_define_method(M_Enumerable,"to_a", Fenum_to_a, 0);</div><div class='ctx'> </div><div class='del'>-    rb_define_method(rb_mEnumerable, "sort", enum_sort, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "sort_by", enum_sort_by, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "grep", enum_grep, 1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "count", enum_count, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "find", enum_find, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "detect", enum_find, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "find_index", enum_find_index, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "find_all", enum_find_all, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "select", enum_find_all, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "reject", enum_reject, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "collect", enum_collect, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "map", enum_collect, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "inject", enum_inject, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "reduce", enum_inject, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "partition", enum_partition, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "group_by", enum_group_by, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "first", enum_first, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "all?", enum_all, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "any?", enum_any, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "one?", enum_one, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "none?", enum_none, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "min", enum_min, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "max", enum_max, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "minmax", enum_minmax, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "min_by", enum_min_by, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "max_by", enum_max_by, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "minmax_by", enum_minmax_by, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "member?", enum_member, 1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "include?", enum_member, 1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "each_with_index", enum_each_with_index, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "enum_with_index", enum_each_with_index, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "reverse_each", enum_reverse_each, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "zip", enum_zip, -1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "take", enum_take, 1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "take_while", enum_take_while, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "drop", enum_drop, 1);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "drop_while", enum_drop_while, 0);</div><div class='del'>-    rb_define_method(rb_mEnumerable, "cycle", enum_cycle, -1);</div><div class='add'>+    rb_define_method(M_Enumerable,"grep", Fenum_grep, 1);</div><div class='add'>+    rb_define_method(M_Enumerable,"find", Fenum_find, 0);</div><div class='add'>+    rb_define_method(M_Enumerable,"find_all", Fenum_find_all, 0);</div><div class='add'>+    rb_define_method(M_Enumerable,"collect", Fenum_collect, 0);</div><div class='add'>+    rb_define_method(M_Enumerable,"reverse", Fenum_reverse, 0);</div><div class='add'>+    rb_define_method(M_Enumerable,"min", Fenum_min, 0);</div><div class='add'>+    rb_define_method(M_Enumerable,"max", Fenum_max, 0);</div><div class='add'>+    rb_define_method(M_Enumerable,"index", Fenum_index, 1);</div><div class='add'>+    rb_define_method(M_Enumerable,"includes", Fenum_includes, 1);</div><div class='ctx'> </div><div class='del'>-    id_eqq  = rb_intern("===");</div><div class='ctx'>     id_each = rb_intern("each");</div><div class='del'>-    id_cmp  = rb_intern("&lt;=&gt;");</div><div class='del'>-    id_size = rb_intern("size");</div><div class='add'>+    id_match = rb_intern("=~");</div><div class='add'>+    id_equal = rb_intern("==");</div><div class='add'>+    id_cmp   = rb_intern("&lt;=&gt;");</div><div class='ctx'> }</div><div class='del'>-</div><div class='head'>diff --git a/enumerator.c b/enumerator.c<br/>deleted file mode 100644<br/>index f95d931b62..0000000000<br/>--- a/<a href='/ruby.git/tree/enumerator.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>enumerator.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,450 +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$</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$</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.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'>-VALUE rb_cEnumerator;</div><div class='del'>-static VALUE sym_each;</div><div class='del'>-</div><div class='del'>-VALUE rb_eStopIteration;</div><div class='del'>-</div><div class='del'>-struct enumerator {</div><div class='del'>-    VALUE obj;</div><div class='del'>-    ID    meth;</div><div class='del'>-    VALUE proc;</div><div class='del'>-    VALUE args;</div><div class='del'>-    rb_block_call_func *iter;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void enumerator_mark _((void *));</div><div class='del'>-static void</div><div class='del'>-enumerator_mark(p)</div><div class='del'>-    void *p;</div><div class='del'>-{</div><div class='del'>-    struct enumerator *ptr = p;</div><div class='del'>-    rb_gc_mark(ptr-&gt;obj);</div><div class='del'>-    rb_gc_mark(ptr-&gt;args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct enumerator *</div><div class='del'>-enumerator_ptr(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct enumerator *ptr;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct enumerator, ptr);</div><div class='del'>-    if (RDATA(obj)-&gt;dmark != enumerator_mark) {</div><div class='del'>-	rb_raise(rb_eTypeError,</div><div class='del'>-		 "wrong argument type %s (expected Enumerable::Enumerator)",</div><div class='del'>-		 rb_obj_classname(obj));</div><div class='del'>-    }</div><div class='del'>-    if (!ptr || ptr-&gt;obj == Qundef) {</div><div class='del'>-	rb_raise(rb_eArgError, "uninitialized enumerator");</div><div class='del'>-    }</div><div class='del'>-    return ptr;</div><div class='del'>-}</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'>- *</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(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 meth = sym_each;</div><div class='del'>-</div><div class='del'>-    if (argc &gt; 0) {</div><div class='del'>-	--argc;</div><div class='del'>-	meth = *argv++;</div><div class='del'>-    }</div><div class='del'>-    return rb_enumeratorize(obj, meth, argc, argv);</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'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = memo[0];</div><div class='del'>-    VALUE v = Qnil;</div><div class='del'>-    long size = (long)memo[1];</div><div class='del'>-</div><div class='del'>-    rb_ary_push(ary, val);</div><div class='del'>-</div><div class='del'>-    if (RARRAY_LEN(ary) == size) {</div><div class='del'>-	v = rb_yield(ary);</div><div class='del'>-	memo[0] = rb_ary_new2(size);</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'>- *  call-seq:</div><div class='del'>- *    e.each_slice(n) {...}</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.  If no</div><div class='del'>- *  block is given, returns an enumerator.</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'>-    VALUE args[2], ary;</div><div class='del'>-</div><div class='del'>-    if (size &lt;= 0) rb_raise(rb_eArgError, "invalid slice size");</div><div class='del'>-    RETURN_ENUMERATOR(obj, 1, &amp;n);</div><div class='del'>-    args[0] = rb_ary_new2(size);</div><div class='del'>-    args[1] = (VALUE)size;</div><div class='del'>-</div><div class='del'>-    rb_block_call(obj, SYM2ID(sym_each), 0, 0, each_slice_i, (VALUE)args);</div><div class='del'>-</div><div class='del'>-    ary = args[0];</div><div class='del'>-    if (RARRAY_LEN(ary) &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'>-static VALUE</div><div class='del'>-each_cons_i(val, memo)</div><div class='del'>-    VALUE val;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    VALUE ary = memo[0];</div><div class='del'>-    VALUE v = Qnil;</div><div class='del'>-    long size = (long)memo[1];</div><div class='del'>-</div><div class='del'>-    if (RARRAY_LEN(ary) == 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_LEN(ary) == size) {</div><div class='del'>-	v = rb_yield(rb_ary_dup(ary));</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'>- *  call-seq:</div><div class='del'>- *    each_cons(n) {...}</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.  If no block is given, returns an enumerator.a</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'>-    VALUE args[2];</div><div class='del'>-</div><div class='del'>-    if (size &lt;= 0) rb_raise(rb_eArgError, "invalid size");</div><div class='del'>-    RETURN_ENUMERATOR(obj, 1, &amp;n);</div><div class='del'>-    args[0] = rb_ary_new2(size);</div><div class='del'>-    args[1] = (VALUE)size;</div><div class='del'>-</div><div class='del'>-    rb_block_call(obj, SYM2ID(sym_each), 0, 0, each_cons_i, (VALUE)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 enumerator_allocate _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    struct enumerator *ptr;</div><div class='del'>-    VALUE enum_obj;</div><div class='del'>-</div><div class='del'>-    enum_obj = Data_Make_Struct(klass, struct enumerator,</div><div class='del'>-				enumerator_mark, -1, ptr);</div><div class='del'>-    ptr-&gt;obj = Qundef;</div><div class='del'>-</div><div class='del'>-    return enum_obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE enumerator_each_i _((VALUE, VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_each_i(v, enum_obj)</div><div class='del'>-    VALUE v;</div><div class='del'>-    VALUE enum_obj;</div><div class='del'>-{</div><div class='del'>-    return rb_yield(v);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_init(enum_obj, obj, meth, argc, argv)</div><div class='del'>-    VALUE enum_obj;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE meth;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    struct enumerator *ptr;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(enum_obj, struct enumerator, ptr);</div><div class='del'>-</div><div class='del'>-    if (!ptr) {</div><div class='del'>-	rb_raise(rb_eArgError, "unallocated enumerator");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ptr-&gt;obj  = obj;</div><div class='del'>-    ptr-&gt;meth = rb_to_id(meth);</div><div class='del'>-    ptr-&gt;iter = enumerator_each_i;</div><div class='del'>-    if (argc) ptr-&gt;args = rb_ary_new4(argc, argv);</div><div class='del'>-</div><div class='del'>-    return enum_obj;</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'>- *  Use of this method is discouraged.  Use Kernel#enum_for() instead.</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 recv, meth = sym_each;</div><div class='del'>-</div><div class='del'>-    if (argc == 0)</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of argument (0 for 1)");</div><div class='del'>-    recv = *argv++;</div><div class='del'>-    if (--argc) {</div><div class='del'>-	meth = *argv++;</div><div class='del'>-	--argc;</div><div class='del'>-    }</div><div class='del'>-    return enumerator_init(obj, recv, meth, argc, argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_init_copy(obj, orig)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE orig;</div><div class='del'>-{</div><div class='del'>-    struct enumerator *ptr0, *ptr1;</div><div class='del'>-</div><div class='del'>-    ptr0 = enumerator_ptr(orig);</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct enumerator, ptr1);</div><div class='del'>-</div><div class='del'>-    if (!ptr1) {</div><div class='del'>-	rb_raise(rb_eArgError, "unallocated enumerator");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ptr1-&gt;obj  = ptr0-&gt;obj;</div><div class='del'>-    ptr1-&gt;meth = ptr0-&gt;meth;</div><div class='del'>-    ptr1-&gt;iter = ptr0-&gt;iter;</div><div class='del'>-    ptr1-&gt;args = ptr0-&gt;args;</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'>-rb_enumeratorize(obj, meth, argc, argv)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE meth;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    return enumerator_init(enumerator_allocate(rb_cEnumerator), obj, meth, argc, argv);</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.  If no block is given, returns self.</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'>-    struct enumerator *e;</div><div class='del'>-    int argc = 0;</div><div class='del'>-    VALUE *argv = 0;</div><div class='del'>-</div><div class='del'>-    if (!rb_block_given_p()) return obj;</div><div class='del'>-    e = enumerator_ptr(obj);</div><div class='del'>-    if (e-&gt;args) {</div><div class='del'>-	argc = RARRAY_LEN(e-&gt;args);</div><div class='del'>-	argv = RARRAY_PTR(e-&gt;args);</div><div class='del'>-    }</div><div class='del'>-    return rb_block_call(e-&gt;obj, e-&gt;meth, argc, argv, e-&gt;iter, (VALUE)e);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_with_index_i(val, memo)</div><div class='del'>-    VALUE val;</div><div class='del'>-    VALUE *memo;</div><div class='del'>-{</div><div class='del'>-    val = rb_yield_values(2, val, INT2FIX(*memo));</div><div class='del'>-    ++*memo;</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    e.with_index {|(*args), idx| ... }</div><div class='del'>- *    e.with_index</div><div class='del'>- *</div><div class='del'>- *  Iterates the given block for each elements with an index, which</div><div class='del'>- *  start from 0.  If no block is given, returns an enumerator.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_with_index(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct enumerator *e = enumerator_ptr(obj);</div><div class='del'>-    VALUE memo = 0;</div><div class='del'>-    int argc = 0;</div><div class='del'>-    VALUE *argv = 0;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(obj, 0, 0);</div><div class='del'>-    if (e-&gt;args) {</div><div class='del'>-	argc = RARRAY_LEN(e-&gt;args);</div><div class='del'>-	argv = RARRAY_PTR(e-&gt;args);</div><div class='del'>-    }</div><div class='del'>-    return rb_block_call(e-&gt;obj, e-&gt;meth, argc, argv,</div><div class='del'>-			 enumerator_with_index_i, (VALUE)&amp;memo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   e.next   =&gt; object</div><div class='del'>- *</div><div class='del'>- * Returns the next object in the enumerator, and move the internal</div><div class='del'>- * position forward.  When the position reached at the end, internal</div><div class='del'>- * position is rewinded then StopIteration is raised.</div><div class='del'>- *</div><div class='del'>- * Note that enumeration sequence by next method does not affect other</div><div class='del'>- * non-external enumeration methods, unless underlying iteration</div><div class='del'>- * methods itself has side-effect, e.g. IO#each_line.</div><div class='del'>- *</div><div class='del'>- * Caution: Calling this method causes the "generator" library to be</div><div class='del'>- * loaded.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_next(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    rb_require("generator");</div><div class='del'>-    return rb_funcall(obj, rb_intern("next"), 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   e.rewind   =&gt; e</div><div class='del'>- *</div><div class='del'>- * Rewinds the enumeration sequence by the next method.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-enumerator_rewind(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    rb_require("generator");</div><div class='del'>-    return rb_funcall(obj, rb_intern("rewind"), 0, 0);</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'>-    rb_define_method(rb_mKernel, "to_enum", obj_to_enum, -1);</div><div class='del'>-    rb_define_method(rb_mKernel, "enum_for", obj_to_enum, -1);</div><div class='del'>-</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", enum_each_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", enum_each_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_alloc_func(rb_cEnumerator, enumerator_allocate);</div><div class='del'>-    rb_define_method(rb_cEnumerator, "initialize", enumerator_initialize, -1);</div><div class='del'>-    rb_define_method(rb_cEnumerator, "initialize_copy", enumerator_init_copy, 1);</div><div class='del'>-    rb_define_method(rb_cEnumerator, "each", enumerator_each, 0);</div><div class='del'>-    rb_define_method(rb_cEnumerator, "each_with_index", enumerator_with_index, 0);</div><div class='del'>-    rb_define_method(rb_cEnumerator, "with_index", enumerator_with_index, 0);</div><div class='del'>-    rb_define_method(rb_cEnumerator, "next", enumerator_next, 0);</div><div class='del'>-    rb_define_method(rb_cEnumerator, "rewind", enumerator_rewind, 0);</div><div class='del'>-</div><div class='del'>-    rb_eStopIteration   = rb_define_class("StopIteration", rb_eIndexError);</div><div class='del'>-</div><div class='del'>-    sym_each	 	= ID2SYM(rb_intern("each"));</div><div class='del'>-</div><div class='del'>-    rb_provide("enumerator.so");	/* for backward compatibility */</div><div class='del'>-}</div><div class='head'>diff --git a/env.h b/env.h<br/>index c50103f71e..09ff31d13f 100644<br/>--- a/<a href='/ruby.git/tree/env.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>env.h</a><br/>+++ b/<a href='/ruby.git/tree/env.h?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>env.h</a></div><div class='hunk'>@@ -1,60 +1,40 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   env.h -</div><div class='ctx'> </div><div class='ctx'>   $Author$</div><div class='add'>+  $Revision$</div><div class='ctx'>   $Date$</div><div class='ctx'>   created at: Mon Jul 11 11:53:03 JST 1994</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-</div><div class='del'>-**********************************************************************/</div><div class='del'>-</div><div class='add'>+************************************************/</div><div class='ctx'> #ifndef ENV_H</div><div class='ctx'> #define ENV_H</div><div class='ctx'> </div><div class='del'>-extern struct FRAME {</div><div class='add'>+extern struct ENVIRON {</div><div class='ctx'>     VALUE self;</div><div class='ctx'>     int argc;</div><div class='add'>+    VALUE *argv;</div><div class='add'>+    struct RClass *current_module;</div><div class='add'>+    struct RClass *last_class;</div><div class='add'>+    char *file;</div><div class='add'>+    int line;</div><div class='ctx'>     ID last_func;</div><div class='del'>-    ID orig_func;</div><div class='del'>-    VALUE last_class;</div><div class='del'>-    struct FRAME *prev;</div><div class='del'>-    struct FRAME *tmp;</div><div class='del'>-    struct RNode *node;</div><div class='del'>-    int iter;</div><div class='del'>-    int flags;</div><div class='del'>-    unsigned long uniq;</div><div class='del'>-} *ruby_frame;</div><div class='del'>-</div><div class='del'>-void rb_gc_mark_frame _((struct FRAME *));</div><div class='del'>-</div><div class='del'>-#define FRAME_DMETH  1</div><div class='del'>-#define FRAME_FUNC   2</div><div class='del'>-</div><div class='del'>-extern struct SCOPE {</div><div class='del'>-    struct RBasic super;</div><div class='ctx'>     ID *local_tbl;</div><div class='ctx'>     VALUE *local_vars;</div><div class='add'>+    int in_eval;</div><div class='add'>+    struct BLOCK *block;</div><div class='add'>+    int iterator;</div><div class='ctx'>     int flags;</div><div class='del'>-} *ruby_scope;</div><div class='del'>-</div><div class='del'>-#define SCOPE_ALLOCA  0</div><div class='del'>-#define SCOPE_MALLOC  1</div><div class='del'>-#define SCOPE_NOSTACK 2</div><div class='del'>-#define SCOPE_DONT_RECYCLE 4</div><div class='del'>-#define SCOPE_CLONE   8</div><div class='del'>-</div><div class='del'>-extern int ruby_in_eval;</div><div class='add'>+    struct ENVIRON *prev;</div><div class='add'>+} *the_env;</div><div class='ctx'> </div><div class='del'>-extern VALUE ruby_class;</div><div class='add'>+#define ITERATOR_P() (the_env-&gt;iterator &gt; 0 &amp;&amp; the_env-&gt;iterator &lt; 3)</div><div class='add'>+#define Qself the_env-&gt;self</div><div class='add'>+#define the_class the_env-&gt;current_module</div><div class='ctx'> </div><div class='del'>-struct RVarmap {</div><div class='del'>-    struct RBasic super;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE val;</div><div class='del'>-    struct RVarmap *next;</div><div class='del'>-};</div><div class='del'>-extern struct RVarmap *ruby_dyna_vars;</div><div class='add'>+#define DURING_ITERATE  1</div><div class='add'>+#define DURING_RESQUE   2</div><div class='add'>+#define DURING_CALL     4</div><div class='ctx'> </div><div class='ctx'> #endif /* ENV_H */</div><div class='head'>diff --git a/error.c b/error.c<br/>index c6d7e6e107..d76922b919 100644<br/>--- a/<a href='/ruby.git/tree/error.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>error.c</a><br/>+++ b/<a href='/ruby.git/tree/error.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>error.c</a></div><div class='hunk'>@@ -1,1563 +1,168 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   error.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='ctx'>   created at: Mon Aug  9 16:11:34 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> #include "env.h"</div><div class='del'>-#include "st.h"</div><div class='del'>-</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-#include &lt;stdarg.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a,b)</div><div class='del'>-#else</div><div class='ctx'> #include &lt;varargs.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a)</div><div class='del'>-#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_description;</div><div class='ctx'> </div><div class='del'>-int ruby_nerrs;</div><div class='add'>+extern char *sourcefile;</div><div class='add'>+extern int   sourceline;</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-err_position(buf, len)</div><div class='del'>-    char *buf;</div><div class='del'>-    long len;</div><div class='del'>-{</div><div class='del'>-    ruby_set_current_source();</div><div class='del'>-    if (!ruby_sourcefile) {</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-    else if (ruby_sourceline == 0) {</div><div class='del'>-	return snprintf(buf, len, "%s: ", ruby_sourcefile);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	return snprintf(buf, len, "%s:%d: ", ruby_sourcefile, ruby_sourceline);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='add'>+int nerrs;</div><div class='ctx'> </div><div class='ctx'> 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='add'>+err_sprintf(buf, fmt, args)</div><div class='add'>+    char *buf, *fmt;</div><div class='ctx'>     va_list args;</div><div class='ctx'> {</div><div class='del'>-    long n;</div><div class='del'>-</div><div class='del'>-    n = err_position(buf, len);</div><div class='del'>-    if (len &gt; n) {</div><div class='del'>-	vsnprintf((char*)buf+n, len-n, fmt, args);</div><div class='del'>-    }</div><div class='add'>+    sprintf(buf, "%s:%d: ", sourcefile, sourceline);</div><div class='add'>+    vsprintf((char*)buf+strlen(buf), fmt, args);</div><div class='add'>+    if (buf[strlen(buf)-1] != '\n')</div><div class='add'>+	strcat(buf, "\n");</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void err_append _((const char*));</div><div class='ctx'> static void</div><div class='ctx'> err_print(fmt, args)</div><div class='del'>-    const char *fmt;</div><div class='add'>+    char *fmt;</div><div class='ctx'>     va_list args;</div><div class='ctx'> {</div><div class='add'>+    extern errstr;</div><div class='ctx'>     char buf[BUFSIZ];</div><div class='ctx'> </div><div class='del'>-    err_snprintf(buf, BUFSIZ, fmt, args);</div><div class='del'>-    err_append(buf);</div><div class='add'>+    err_sprintf(buf, fmt, args);</div><div class='add'>+    if (the_env-&gt;in_eval) {</div><div class='add'>+	if (errstr == Qnil) {</div><div class='add'>+	    errstr = str_new2(buf);</div><div class='add'>+	}</div><div class='add'>+	else {</div><div class='add'>+	    str_cat(errstr, buf, strlen(buf));</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	fputs(buf, stderr);</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_compile_error(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_compile_error(fmt, va_alist)</div><div class='del'>-    const char *fmt;</div><div class='del'>-    va_dcl</div><div class='del'>-#endif</div><div class='add'>+yyerror(msg)</div><div class='add'>+    char *msg;</div><div class='ctx'> {</div><div class='del'>-    va_list args;</div><div class='del'>-</div><div class='del'>-    va_init_list(args, fmt);</div><div class='del'>-    err_print(fmt, args);</div><div class='del'>-    va_end(args);</div><div class='del'>-    ruby_nerrs++;</div><div class='add'>+    Error("%s", msg);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_compile_error_append(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_compile_error_append(fmt, va_alist)</div><div class='del'>-    const char *fmt;</div><div class='add'>+Error(fmt, va_alist)</div><div class='add'>+    char *fmt;</div><div class='ctx'>     va_dcl</div><div class='del'>-#endif</div><div class='ctx'> {</div><div class='ctx'>     va_list args;</div><div class='del'>-    char buf[BUFSIZ];</div><div class='ctx'> </div><div class='del'>-    va_init_list(args, fmt);</div><div class='del'>-    vsnprintf(buf, BUFSIZ, fmt, args);</div><div class='add'>+    va_start(args);</div><div class='add'>+    err_print(fmt, args);</div><div class='ctx'>     va_end(args);</div><div class='del'>-    err_append(buf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-warn_print(fmt, args)</div><div class='del'>-    const char *fmt;</div><div class='del'>-    va_list args;</div><div class='del'>-{</div><div class='del'>-    char buf[BUFSIZ];</div><div class='del'>-    int len;</div><div class='del'>-</div><div class='del'>-    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'>+    nerrs++;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_warn(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_warn(fmt, va_alist)</div><div class='del'>-    const char *fmt;</div><div class='add'>+Warning(fmt, va_alist)</div><div class='add'>+    char *fmt;</div><div class='ctx'>     va_dcl</div><div class='del'>-#endif</div><div class='ctx'> {</div><div class='del'>-    char buf[BUFSIZ];</div><div class='add'>+    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='add'>+    sprintf(buf, "warning: %s", fmt);</div><div class='ctx'> </div><div class='del'>-    snprintf(buf, BUFSIZ, "warning: %s", fmt);</div><div class='del'>-</div><div class='del'>-    va_init_list(args, fmt);</div><div class='del'>-    warn_print(buf, args);</div><div class='add'>+    va_start(args);</div><div class='add'>+    err_print(buf, args);</div><div class='ctx'>     va_end(args);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* rb_warning() reports only in verbose mode */</div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_warning(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_warning(fmt, va_alist)</div><div class='del'>-    const char *fmt;</div><div class='add'>+Fatal(fmt, va_alist)</div><div class='add'>+    char *fmt;</div><div class='ctx'>     va_dcl</div><div class='del'>-#endif</div><div class='ctx'> {</div><div class='del'>-    char buf[BUFSIZ];</div><div class='ctx'>     va_list args;</div><div class='ctx'> </div><div class='del'>-    if (!RTEST(ruby_verbose)) return;</div><div class='del'>-</div><div class='del'>-    snprintf(buf, BUFSIZ, "warning: %s", fmt);</div><div class='del'>-</div><div class='del'>-    va_init_list(args, fmt);</div><div class='del'>-    warn_print(buf, args);</div><div class='add'>+    va_start(args);</div><div class='add'>+    err_print(fmt, args);</div><div class='ctx'>     va_end(args);</div><div class='add'>+    rb_exit(1);</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='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_bug(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_bug(fmt, va_alist)</div><div class='del'>-    const char *fmt;</div><div class='add'>+Bug(fmt, va_alist)</div><div class='add'>+    char *fmt;</div><div class='ctx'>     va_dcl</div><div class='del'>-#endif</div><div class='ctx'> {</div><div class='del'>-    char buf[BUFSIZ];</div><div class='add'>+    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='ctx'> </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, "\n%s\n\n", ruby_description);</div><div class='del'>-    }</div><div class='del'>-    abort();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct types {</div><div class='del'>-    int type;</div><div class='del'>-    const char *name;</div><div class='del'>-} builtin_types[] = {</div><div class='del'>-    {T_NIL,	"nil"},</div><div class='del'>-    {T_OBJECT,	"Object"},</div><div class='del'>-    {T_CLASS,	"Class"},</div><div class='del'>-    {T_ICLASS,	"iClass"},	/* internal use: mixed-in module holder */</div><div class='del'>-    {T_MODULE,	"Module"},</div><div class='del'>-    {T_FLOAT,	"Float"},</div><div class='del'>-    {T_STRING,	"String"},</div><div class='del'>-    {T_REGEXP,	"Regexp"},</div><div class='del'>-    {T_ARRAY,	"Array"},</div><div class='del'>-    {T_FIXNUM,	"Fixnum"},</div><div class='del'>-    {T_HASH,	"Hash"},</div><div class='del'>-    {T_STRUCT,	"Struct"},</div><div class='del'>-    {T_BIGNUM,	"Bignum"},</div><div class='del'>-    {T_FILE,	"File"},</div><div class='del'>-    {T_TRUE,	"true"},</div><div class='del'>-    {T_FALSE,	"false"},</div><div class='del'>-    {T_SYMBOL,	"Symbol"},	/* :symbol */</div><div class='del'>-    {T_DATA,	"Data"},	/* internal use: wrapped C pointers */</div><div class='del'>-    {T_MATCH,	"MatchData"},	/* data of $~ */</div><div class='del'>-    {T_VARMAP,	"Varmap"},	/* internal use: dynamic variables */</div><div class='del'>-    {T_SCOPE,	"Scope"},	/* internal use: variable scope */</div><div class='del'>-    {T_NODE,	"Node"},	/* internal use: syntax tree node */</div><div class='del'>-    {T_UNDEF,	"undef"},	/* internal use: #undef; should not happen */</div><div class='del'>-    {-1,	0}</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_check_type(x, t)</div><div class='del'>-    VALUE x;</div><div class='del'>-    int t;</div><div class='del'>-{</div><div class='del'>-    struct types *type = builtin_types;</div><div class='del'>-</div><div class='del'>-    if (x == Qundef) {</div><div class='del'>-	rb_bug("undef leaked to the Ruby space");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (TYPE(x) != t) {</div><div class='del'>-	while (type-&gt;type &gt;= 0) {</div><div class='del'>-	    if (type-&gt;type == t) {</div><div class='del'>-		const char *etype;</div><div class='del'>-</div><div class='del'>-		if (NIL_P(x)) {</div><div class='del'>-		    etype = "nil";</div><div class='del'>-		}</div><div class='del'>-		else if (FIXNUM_P(x)) {</div><div class='del'>-		    etype = "Fixnum";</div><div class='del'>-		}</div><div class='del'>-		else if (SYMBOL_P(x)) {</div><div class='del'>-		    etype = "Symbol";</div><div class='del'>-		}</div><div class='del'>-		else if (rb_special_const_p(x)) {</div><div class='del'>-		    etype = RSTRING(rb_obj_as_string(x))-&gt;ptr;</div><div class='del'>-		}</div><div class='del'>-		else {</div><div class='del'>-		    etype = rb_obj_classname(x);</div><div class='del'>-		}</div><div class='del'>-		rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)",</div><div class='del'>-			 etype, type-&gt;name);</div><div class='del'>-	    }</div><div class='del'>-	    type++;</div><div class='del'>-	}</div><div class='del'>-	rb_bug("unknown type 0x%x", t);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* exception classes */</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-</div><div class='del'>-VALUE rb_eException;</div><div class='del'>-VALUE rb_eSystemExit;</div><div class='del'>-VALUE rb_eInterrupt;</div><div class='del'>-VALUE rb_eSignal;</div><div class='del'>-VALUE rb_eFatal;</div><div class='del'>-VALUE rb_eStandardError;</div><div class='del'>-VALUE rb_eRuntimeError;</div><div class='del'>-VALUE rb_eTypeError;</div><div class='del'>-VALUE rb_eArgError;</div><div class='del'>-VALUE rb_eIndexError;</div><div class='del'>-VALUE rb_eRangeError;</div><div class='del'>-VALUE rb_eNameError;</div><div class='del'>-VALUE rb_eNoMethodError;</div><div class='del'>-VALUE rb_eSecurityError;</div><div class='del'>-VALUE rb_eNotImpError;</div><div class='del'>-VALUE rb_eNoMemError;</div><div class='del'>-VALUE rb_cNameErrorMesg;</div><div class='del'>-</div><div class='del'>-VALUE rb_eScriptError;</div><div class='del'>-VALUE rb_eSyntaxError;</div><div class='del'>-VALUE rb_eLoadError;</div><div class='del'>-</div><div class='del'>-VALUE rb_eSystemCallError;</div><div class='del'>-VALUE rb_mErrno;</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_exc_new(etype, ptr, len)</div><div class='del'>-    VALUE etype;</div><div class='del'>-    const char *ptr;</div><div class='del'>-    long len;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(etype, rb_intern("new"), 1, rb_str_new(ptr, len));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_exc_new2(etype, s)</div><div class='del'>-    VALUE etype;</div><div class='del'>-    const char *s;</div><div class='del'>-{</div><div class='del'>-    return rb_exc_new(etype, s, strlen(s));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_exc_new3(etype, str)</div><div class='del'>-    VALUE etype, str;</div><div class='del'>-{</div><div class='del'>-    StringValue(str);</div><div class='del'>-    return rb_exc_new(etype, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-exc_initialize(argc, argv, exc)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    VALUE arg;</div><div class='add'>+    sprintf(buf, "[BUG] %s", fmt);</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='del'>-    rb_iv_set(exc, "bt", Qnil);</div><div class='del'>-</div><div class='del'>-    return exc;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-exc_exception(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 exc;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) return self;</div><div class='del'>-    if (argc == 1 &amp;&amp; self == argv[0]) return self;</div><div class='del'>-    exc = rb_obj_clone(self);</div><div class='del'>-    exc_initialize(argc, argv, exc);</div><div class='del'>-</div><div class='del'>-    return exc;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-exc_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"));</div><div class='del'>-</div><div class='del'>-    if (NIL_P(mesg)) return rb_class_name(CLASS_OF(exc));</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'>- *   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='del'>-static VALUE</div><div class='del'>-exc_inspect(exc)</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    VALUE str, klass;</div><div class='del'>-</div><div class='del'>-    klass = CLASS_OF(exc);</div><div class='del'>-    exc = rb_obj_as_string(exc);</div><div class='del'>-    if (RSTRING(exc)-&gt;len == 0) {</div><div class='del'>-	return rb_str_dup(rb_class_name(klass));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    str = rb_str_buf_new2("#&lt;");</div><div class='del'>-    klass = rb_class_name(klass);</div><div class='del'>-    rb_str_buf_append(str, klass);</div><div class='del'>-    rb_str_buf_cat(str, ": ", 2);</div><div class='del'>-    rb_str_buf_append(str, exc);</div><div class='del'>-    rb_str_buf_cat(str, "&gt;", 1);</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'>- *  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='del'>-static VALUE</div><div class='del'>-exc_backtrace(exc)</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    static ID bt;</div><div class='del'>-</div><div class='del'>-    if (!bt) bt = rb_intern("bt");</div><div class='del'>-    return rb_attr_get(exc, bt);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_check_backtrace(bt)</div><div class='del'>-    VALUE bt;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    static const char err[] = "backtrace must be Array of String";</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(bt)) {</div><div class='del'>-	int t = TYPE(bt);</div><div class='del'>-</div><div class='del'>-	if (t == T_STRING) return rb_ary_new3(1, bt);</div><div class='del'>-	if (t != T_ARRAY) {</div><div class='del'>-	    rb_raise(rb_eTypeError, err);</div><div class='del'>-	}</div><div class='del'>-	for (i=0;i&lt;RARRAY(bt)-&gt;len;i++) {</div><div class='del'>-	    if (TYPE(RARRAY(bt)-&gt;ptr[i]) != T_STRING) {</div><div class='del'>-		rb_raise(rb_eTypeError, err);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return bt;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-exc_set_backtrace(exc, bt)</div><div class='del'>-    VALUE exc;</div><div class='del'>-    VALUE bt;</div><div class='del'>-{</div><div class='del'>-    return rb_iv_set(exc, "bt", rb_check_backtrace(bt));</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-exit_initialize(argc, argv, exc)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    VALUE status = INT2FIX(EXIT_SUCCESS);</div><div class='del'>-    if (argc &gt; 0 &amp;&amp; FIXNUM_P(argv[0])) {</div><div class='del'>-	status = *argv++;</div><div class='del'>-	--argc;</div><div class='del'>-    }</div><div class='del'>-    rb_call_super(argc, argv);</div><div class='del'>-    rb_iv_set(exc, "status", status);</div><div class='del'>-    return exc;</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.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='del'>-static VALUE</div><div class='del'>-exit_status(exc)</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_name_error(ID id, const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_name_error(id, fmt, va_alist)</div><div class='del'>-    ID id;</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'>-    VALUE exc, argv[2];</div><div class='del'>-    va_list args;</div><div class='del'>-    char buf[BUFSIZ];</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='add'>+    va_start(args);</div><div class='add'>+    err_print(buf, 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='del'>-    rb_exc_raise(exc);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-name_err_name(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</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'>-	const 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='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-nometh_err_args(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_attr_get(self, rb_intern("args"));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_invalid_str(str, type)</div><div class='del'>-    const char *str, *type;</div><div class='del'>-{</div><div class='del'>-    VALUE s = rb_str_inspect(rb_str_new2(str));</div><div class='del'>-</div><div class='del'>-    rb_raise(rb_eArgError, "invalid value for %s: %s", type, RSTRING(s)-&gt;ptr);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static st_table *syserr_tbl;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_syserr(n, name)</div><div class='del'>-    int n;</div><div class='del'>-    const char *name;</div><div class='del'>-{</div><div class='del'>-    VALUE error;</div><div class='del'>-</div><div class='del'>-    if (!st_lookup(syserr_tbl, n, &amp;error)) {</div><div class='del'>-	error = rb_define_class_under(rb_mErrno, name, rb_eSystemCallError);</div><div class='del'>-	rb_define_const(error, "Errno", INT2NUM(n));</div><div class='del'>-	st_add_direct(syserr_tbl, n, error);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_define_const(rb_mErrno, name, error);</div><div class='del'>-    }</div><div class='del'>-    return error;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-get_syserr(n)</div><div class='del'>-    int n;</div><div class='del'>-{</div><div class='del'>-    VALUE error;</div><div class='del'>-</div><div class='del'>-    if (!st_lookup(syserr_tbl, n, &amp;error)) {</div><div class='del'>-	char name[8];	/* some Windows' errno have 5 digits. */</div><div class='del'>-</div><div class='del'>-	snprintf(name, sizeof(name), "E%03d", n);</div><div class='del'>-	error = set_syserr(n, name);</div><div class='del'>-    }</div><div class='del'>-    return error;</div><div class='del'>-}</div><div class='del'>-</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'>-    const 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='del'>-static VALUE</div><div class='del'>-syserr_errno(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_attr_get(self, rb_intern("errno"));</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 === 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='del'>-static VALUE</div><div class='del'>-syserr_eqq(self, exc)</div><div class='del'>-    VALUE self, exc;</div><div class='del'>-{</div><div class='del'>-    VALUE num, e;</div><div class='del'>-    ID en = rb_intern("errno");</div><div class='del'>-</div><div class='del'>-    if (!rb_obj_is_kind_of(exc, rb_eSystemCallError)) {</div><div class='del'>-	if (!rb_respond_to(exc, en)) return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    else if (self == rb_eSystemCallError) return Qtrue;</div><div class='del'>-</div><div class='del'>-    num = rb_attr_get(exc, en);</div><div class='del'>-    if (NIL_P(num)) {</div><div class='del'>-	num = rb_funcall(exc, en, 0, 0);</div><div class='del'>-    }</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='del'>-	return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-void</div><div class='del'>-Init_Exception()</div><div class='del'>-{</div><div class='del'>-    rb_eException   = rb_define_class("Exception", rb_cObject);</div><div class='del'>-    rb_define_singleton_method(rb_eException, "exception", rb_class_new_instance, -1);</div><div class='del'>-    rb_define_method(rb_eException, "exception", exc_exception, -1);</div><div class='del'>-    rb_define_method(rb_eException, "initialize", exc_initialize, -1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_eException, "inspect", exc_inspect, 0);</div><div class='del'>-    rb_define_method(rb_eException, "backtrace", exc_backtrace, 0);</div><div class='del'>-    rb_define_method(rb_eException, "set_backtrace", exc_set_backtrace, 1);</div><div class='del'>-</div><div class='del'>-    rb_eSystemExit  = rb_define_class("SystemExit", rb_eException);</div><div class='del'>-    rb_define_method(rb_eSystemExit, "initialize", exit_initialize, -1);</div><div class='del'>-    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='del'>-</div><div class='del'>-    rb_eFatal  	    = rb_define_class("fatal", rb_eException);</div><div class='del'>-    rb_eSignal      = rb_define_class("SignalException", rb_eException);</div><div class='del'>-    rb_eInterrupt   = rb_define_class("Interrupt", rb_eSignal);</div><div class='del'>-</div><div class='del'>-    rb_eStandardError = rb_define_class("StandardError", rb_eException);</div><div class='del'>-    rb_eTypeError     = rb_define_class("TypeError", rb_eStandardError);</div><div class='del'>-    rb_eArgError      = rb_define_class("ArgumentError", rb_eStandardError);</div><div class='del'>-    rb_eIndexError    = rb_define_class("IndexError", rb_eStandardError);</div><div class='del'>-    rb_eRangeError    = rb_define_class("RangeError", rb_eStandardError);</div><div class='del'>-    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='del'>-    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='del'>-    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='del'>-    rb_define_method(rb_eNoMethodError, "args", nometh_err_args, 0);</div><div class='del'>-</div><div class='del'>-    rb_eScriptError = rb_define_class("ScriptError", rb_eException);</div><div class='del'>-    rb_eSyntaxError = rb_define_class("SyntaxError", rb_eScriptError);</div><div class='del'>-    rb_eLoadError   = rb_define_class("LoadError", rb_eScriptError);</div><div class='del'>-    rb_eNotImpError = rb_define_class("NotImplementedError", rb_eScriptError);</div><div class='del'>-</div><div class='del'>-    rb_eRuntimeError = rb_define_class("RuntimeError", rb_eStandardError);</div><div class='del'>-    rb_eSecurityError = rb_define_class("SecurityError", rb_eStandardError);</div><div class='del'>-    rb_eNoMemError = rb_define_class("NoMemoryError", rb_eException);</div><div class='del'>-</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='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_raise(VALUE exc, const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_raise(exc, fmt, va_alist)</div><div class='del'>-    VALUE exc;</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'>-    va_list args;</div><div class='del'>-    char buf[BUFSIZ];</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_exc_raise(rb_exc_new2(exc, buf));</div><div class='add'>+    abort();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_loaderror(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_loaderror(fmt, va_alist)</div><div class='del'>-    const char *fmt;</div><div class='add'>+Fail(fmt, va_alist)</div><div class='add'>+    char *fmt;</div><div class='ctx'>     va_dcl</div><div class='del'>-#endif</div><div class='ctx'> {</div><div class='ctx'>     va_list args;</div><div class='del'>-    char buf[BUFSIZ];</div><div class='add'>+    char buf[BUFSIZ]; </div><div class='ctx'> </div><div class='del'>-    va_init_list(args, fmt);</div><div class='del'>-    vsnprintf(buf, BUFSIZ, fmt, args);</div><div class='add'>+    va_start(args);</div><div class='add'>+    vsprintf(buf, fmt, args);</div><div class='ctx'>     va_end(args);</div><div class='del'>-    rb_exc_raise(rb_exc_new2(rb_eLoadError, buf));</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_notimplement()</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eNotImpError,</div><div class='del'>-	     "%s() function is unimplemented on this machine",</div><div class='del'>-	     rb_id2name(ruby_frame-&gt;last_func));</div><div class='add'>+    rb_fail(str_new2(buf));</div><div class='ctx'> }</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_fatal(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_fatal(fmt, va_alist)</div><div class='del'>-    const char *fmt;</div><div class='del'>-    va_dcl</div><div class='del'>-#endif</div><div class='add'>+    </div><div class='add'>+rb_sys_fail(mesg)</div><div class='add'>+    char *mesg;</div><div class='ctx'> {</div><div class='del'>-    va_list args;</div><div class='ctx'>     char buf[BUFSIZ];</div><div class='add'>+    extern int errno;</div><div class='ctx'> </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'>-</div><div class='del'>-    ruby_in_eval = 0;</div><div class='del'>-    rb_exc_fatal(rb_exc_new2(rb_eFatal, buf));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_sys_fail(mesg)</div><div class='del'>-    const char *mesg;</div><div class='del'>-{</div><div class='del'>-    int n = errno;</div><div class='del'>-    VALUE arg;</div><div class='add'>+    if (mesg == Qnil)</div><div class='add'>+	sprintf(buf, "%s.\n", strerror(errno));</div><div class='add'>+    else</div><div class='add'>+	sprintf(buf, "%s - %s.\n", strerror(errno), mesg);</div><div class='ctx'> </div><div class='ctx'>     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='del'>-    }</div><div class='del'>-</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='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-rb_sys_warning(const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-rb_sys_warning(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'>-     int errno_save;</div><div class='del'>-     </div><div class='del'>-     errno_save = errno;</div><div class='del'>-</div><div class='del'>-     if (!RTEST(ruby_verbose)) return;</div><div class='del'>-</div><div class='del'>-     snprintf(buf, BUFSIZ, "warning: %s", fmt);</div><div class='del'>-     snprintf(buf+strlen(buf), BUFSIZ-strlen(buf), ": %s", strerror(errno_save));</div><div class='del'>-     </div><div class='del'>-     va_init_list(args, fmt);</div><div class='del'>-     warn_print(buf, args);</div><div class='del'>-     va_end(args);</div><div class='del'>-     errno = errno_save;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_load_fail(path)</div><div class='del'>-    const char *path;</div><div class='del'>-{</div><div class='del'>-    rb_loaderror("%s -- %s", strerror(errno), path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_error_frozen(what)</div><div class='del'>-    const char *what;</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eTypeError, "can't modify frozen %s", what);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_check_frozen(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (OBJ_FROZEN(obj)) rb_error_frozen(rb_obj_classname(obj));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_syserr()</div><div class='del'>-{</div><div class='del'>-#ifdef EPERM</div><div class='del'>-    set_syserr(EPERM, "EPERM");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOENT</div><div class='del'>-    set_syserr(ENOENT, "ENOENT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ESRCH</div><div class='del'>-    set_syserr(ESRCH, "ESRCH");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EINTR</div><div class='del'>-    set_syserr(EINTR, "EINTR");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EIO</div><div class='del'>-    set_syserr(EIO, "EIO");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENXIO</div><div class='del'>-    set_syserr(ENXIO, "ENXIO");</div><div class='del'>-#endif</div><div class='del'>-#ifdef E2BIG</div><div class='del'>-    set_syserr(E2BIG, "E2BIG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOEXEC</div><div class='del'>-    set_syserr(ENOEXEC, "ENOEXEC");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBADF</div><div class='del'>-    set_syserr(EBADF, "EBADF");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ECHILD</div><div class='del'>-    set_syserr(ECHILD, "ECHILD");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAGAIN</div><div class='del'>-    set_syserr(EAGAIN, "EAGAIN");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOMEM</div><div class='del'>-    set_syserr(ENOMEM, "ENOMEM");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EACCES</div><div class='del'>-    set_syserr(EACCES, "EACCES");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EFAULT</div><div class='del'>-    set_syserr(EFAULT, "EFAULT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOTBLK</div><div class='del'>-    set_syserr(ENOTBLK, "ENOTBLK");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBUSY</div><div class='del'>-    set_syserr(EBUSY, "EBUSY");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EEXIST</div><div class='del'>-    set_syserr(EEXIST, "EEXIST");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EXDEV</div><div class='del'>-    set_syserr(EXDEV, "EXDEV");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENODEV</div><div class='del'>-    set_syserr(ENODEV, "ENODEV");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOTDIR</div><div class='del'>-    set_syserr(ENOTDIR, "ENOTDIR");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EISDIR</div><div class='del'>-    set_syserr(EISDIR, "EISDIR");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EINVAL</div><div class='del'>-    set_syserr(EINVAL, "EINVAL");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENFILE</div><div class='del'>-    set_syserr(ENFILE, "ENFILE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EMFILE</div><div class='del'>-    set_syserr(EMFILE, "EMFILE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOTTY</div><div class='del'>-    set_syserr(ENOTTY, "ENOTTY");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ETXTBSY</div><div class='del'>-    set_syserr(ETXTBSY, "ETXTBSY");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EFBIG</div><div class='del'>-    set_syserr(EFBIG, "EFBIG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOSPC</div><div class='del'>-    set_syserr(ENOSPC, "ENOSPC");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ESPIPE</div><div class='del'>-    set_syserr(ESPIPE, "ESPIPE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EROFS</div><div class='del'>-    set_syserr(EROFS, "EROFS");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EMLINK</div><div class='del'>-    set_syserr(EMLINK, "EMLINK");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EPIPE</div><div class='del'>-    set_syserr(EPIPE, "EPIPE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EDOM</div><div class='del'>-    set_syserr(EDOM, "EDOM");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ERANGE</div><div class='del'>-    set_syserr(ERANGE, "ERANGE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EDEADLK</div><div class='del'>-    set_syserr(EDEADLK, "EDEADLK");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENAMETOOLONG</div><div class='del'>-    set_syserr(ENAMETOOLONG, "ENAMETOOLONG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOLCK</div><div class='del'>-    set_syserr(ENOLCK, "ENOLCK");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOSYS</div><div class='del'>-    set_syserr(ENOSYS, "ENOSYS");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOTEMPTY</div><div class='del'>-    set_syserr(ENOTEMPTY, "ENOTEMPTY");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ELOOP</div><div class='del'>-    set_syserr(ELOOP, "ELOOP");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EWOULDBLOCK</div><div class='del'>-    set_syserr(EWOULDBLOCK, "EWOULDBLOCK");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOMSG</div><div class='del'>-    set_syserr(ENOMSG, "ENOMSG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EIDRM</div><div class='del'>-    set_syserr(EIDRM, "EIDRM");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ECHRNG</div><div class='del'>-    set_syserr(ECHRNG, "ECHRNG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EL2NSYNC</div><div class='del'>-    set_syserr(EL2NSYNC, "EL2NSYNC");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EL3HLT</div><div class='del'>-    set_syserr(EL3HLT, "EL3HLT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EL3RST</div><div class='del'>-    set_syserr(EL3RST, "EL3RST");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ELNRNG</div><div class='del'>-    set_syserr(ELNRNG, "ELNRNG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EUNATCH</div><div class='del'>-    set_syserr(EUNATCH, "EUNATCH");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOCSI</div><div class='del'>-    set_syserr(ENOCSI, "ENOCSI");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EL2HLT</div><div class='del'>-    set_syserr(EL2HLT, "EL2HLT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBADE</div><div class='del'>-    set_syserr(EBADE, "EBADE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBADR</div><div class='del'>-    set_syserr(EBADR, "EBADR");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EXFULL</div><div class='del'>-    set_syserr(EXFULL, "EXFULL");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOANO</div><div class='del'>-    set_syserr(ENOANO, "ENOANO");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBADRQC</div><div class='del'>-    set_syserr(EBADRQC, "EBADRQC");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBADSLT</div><div class='del'>-    set_syserr(EBADSLT, "EBADSLT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EDEADLOCK</div><div class='del'>-    set_syserr(EDEADLOCK, "EDEADLOCK");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBFONT</div><div class='del'>-    set_syserr(EBFONT, "EBFONT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOSTR</div><div class='del'>-    set_syserr(ENOSTR, "ENOSTR");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENODATA</div><div class='del'>-    set_syserr(ENODATA, "ENODATA");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ETIME</div><div class='del'>-    set_syserr(ETIME, "ETIME");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOSR</div><div class='del'>-    set_syserr(ENOSR, "ENOSR");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENONET</div><div class='del'>-    set_syserr(ENONET, "ENONET");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOPKG</div><div class='del'>-    set_syserr(ENOPKG, "ENOPKG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EREMOTE</div><div class='del'>-    set_syserr(EREMOTE, "EREMOTE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOLINK</div><div class='del'>-    set_syserr(ENOLINK, "ENOLINK");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EADV</div><div class='del'>-    set_syserr(EADV, "EADV");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ESRMNT</div><div class='del'>-    set_syserr(ESRMNT, "ESRMNT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ECOMM</div><div class='del'>-    set_syserr(ECOMM, "ECOMM");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EPROTO</div><div class='del'>-    set_syserr(EPROTO, "EPROTO");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EMULTIHOP</div><div class='del'>-    set_syserr(EMULTIHOP, "EMULTIHOP");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EDOTDOT</div><div class='del'>-    set_syserr(EDOTDOT, "EDOTDOT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBADMSG</div><div class='del'>-    set_syserr(EBADMSG, "EBADMSG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EOVERFLOW</div><div class='del'>-    set_syserr(EOVERFLOW, "EOVERFLOW");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOTUNIQ</div><div class='del'>-    set_syserr(ENOTUNIQ, "ENOTUNIQ");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EBADFD</div><div class='del'>-    set_syserr(EBADFD, "EBADFD");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EREMCHG</div><div class='del'>-    set_syserr(EREMCHG, "EREMCHG");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ELIBACC</div><div class='del'>-    set_syserr(ELIBACC, "ELIBACC");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ELIBBAD</div><div class='del'>-    set_syserr(ELIBBAD, "ELIBBAD");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ELIBSCN</div><div class='del'>-    set_syserr(ELIBSCN, "ELIBSCN");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ELIBMAX</div><div class='del'>-    set_syserr(ELIBMAX, "ELIBMAX");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ELIBEXEC</div><div class='del'>-    set_syserr(ELIBEXEC, "ELIBEXEC");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EILSEQ</div><div class='del'>-    set_syserr(EILSEQ, "EILSEQ");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ERESTART</div><div class='del'>-    set_syserr(ERESTART, "ERESTART");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ESTRPIPE</div><div class='del'>-    set_syserr(ESTRPIPE, "ESTRPIPE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EUSERS</div><div class='del'>-    set_syserr(EUSERS, "EUSERS");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOTSOCK</div><div class='del'>-    set_syserr(ENOTSOCK, "ENOTSOCK");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EDESTADDRREQ</div><div class='del'>-    set_syserr(EDESTADDRREQ, "EDESTADDRREQ");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EMSGSIZE</div><div class='del'>-    set_syserr(EMSGSIZE, "EMSGSIZE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EPROTOTYPE</div><div class='del'>-    set_syserr(EPROTOTYPE, "EPROTOTYPE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOPROTOOPT</div><div class='del'>-    set_syserr(ENOPROTOOPT, "ENOPROTOOPT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EPROTONOSUPPORT</div><div class='del'>-    set_syserr(EPROTONOSUPPORT, "EPROTONOSUPPORT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ESOCKTNOSUPPORT</div><div class='del'>-    set_syserr(ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EOPNOTSUPP</div><div class='del'>-    set_syserr(EOPNOTSUPP, "EOPNOTSUPP");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EPFNOSUPPORT</div><div class='del'>-    set_syserr(EPFNOSUPPORT, "EPFNOSUPPORT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAFNOSUPPORT</div><div class='del'>-    set_syserr(EAFNOSUPPORT, "EAFNOSUPPORT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EADDRINUSE</div><div class='del'>-    set_syserr(EADDRINUSE, "EADDRINUSE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EADDRNOTAVAIL</div><div class='del'>-    set_syserr(EADDRNOTAVAIL, "EADDRNOTAVAIL");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENETDOWN</div><div class='del'>-    set_syserr(ENETDOWN, "ENETDOWN");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENETUNREACH</div><div class='del'>-    set_syserr(ENETUNREACH, "ENETUNREACH");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENETRESET</div><div class='del'>-    set_syserr(ENETRESET, "ENETRESET");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ECONNABORTED</div><div class='del'>-    set_syserr(ECONNABORTED, "ECONNABORTED");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ECONNRESET</div><div class='del'>-    set_syserr(ECONNRESET, "ECONNRESET");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOBUFS</div><div class='del'>-    set_syserr(ENOBUFS, "ENOBUFS");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EISCONN</div><div class='del'>-    set_syserr(EISCONN, "EISCONN");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOTCONN</div><div class='del'>-    set_syserr(ENOTCONN, "ENOTCONN");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ESHUTDOWN</div><div class='del'>-    set_syserr(ESHUTDOWN, "ESHUTDOWN");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ETOOMANYREFS</div><div class='del'>-    set_syserr(ETOOMANYREFS, "ETOOMANYREFS");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ETIMEDOUT</div><div class='del'>-    set_syserr(ETIMEDOUT, "ETIMEDOUT");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ECONNREFUSED</div><div class='del'>-    set_syserr(ECONNREFUSED, "ECONNREFUSED");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EHOSTDOWN</div><div class='del'>-    set_syserr(EHOSTDOWN, "EHOSTDOWN");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EHOSTUNREACH</div><div class='del'>-    set_syserr(EHOSTUNREACH, "EHOSTUNREACH");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EALREADY</div><div class='del'>-    set_syserr(EALREADY, "EALREADY");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EINPROGRESS</div><div class='del'>-    set_syserr(EINPROGRESS, "EINPROGRESS");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ESTALE</div><div class='del'>-    set_syserr(ESTALE, "ESTALE");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EUCLEAN</div><div class='del'>-    set_syserr(EUCLEAN, "EUCLEAN");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENOTNAM</div><div class='del'>-    set_syserr(ENOTNAM, "ENOTNAM");</div><div class='del'>-#endif</div><div class='del'>-#ifdef ENAVAIL</div><div class='del'>-    set_syserr(ENAVAIL, "ENAVAIL");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EISNAM</div><div class='del'>-    set_syserr(EISNAM, "EISNAM");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EREMOTEIO</div><div class='del'>-    set_syserr(EREMOTEIO, "EREMOTEIO");</div><div class='del'>-#endif</div><div class='del'>-#ifdef EDQUOT</div><div class='del'>-    set_syserr(EDQUOT, "EDQUOT");</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='add'>+    rb_fail(str_new2(buf));</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static char *builtin_types[] = {</div><div class='add'>+    "Nil",</div><div class='add'>+    "Object",</div><div class='add'>+    "Class",</div><div class='add'>+    "iClass",</div><div class='add'>+    "Module",</div><div class='add'>+    "Float",</div><div class='add'>+    "String",</div><div class='add'>+    "Regexp",</div><div class='add'>+    "Array",</div><div class='add'>+    "Fixnum",</div><div class='add'>+    "Dictionary",</div><div class='add'>+    "Data",</div><div class='add'>+    "Method",</div><div class='add'>+    "Struct",</div><div class='add'>+    "Bignum",</div><div class='add'>+};</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-err_append(s)</div><div class='del'>-    const char *s;</div><div class='add'>+WrongType(x, t)</div><div class='add'>+    VALUE x;</div><div class='add'>+    int t;</div><div class='ctx'> {</div><div class='del'>-    extern VALUE ruby_errinfo;</div><div class='del'>-</div><div class='del'>-    if (ruby_in_eval) {</div><div class='del'>-	if (NIL_P(ruby_errinfo)) {</div><div class='del'>-	    ruby_errinfo = rb_exc_new2(rb_eSyntaxError, s);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    VALUE str = rb_obj_as_string(ruby_errinfo);</div><div class='del'>-</div><div class='del'>-	    rb_str_cat2(str, "\n");</div><div class='del'>-	    rb_str_cat2(str, s);</div><div class='del'>-	    ruby_errinfo = rb_exc_new3(rb_eSyntaxError, str);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_write_error(s);</div><div class='del'>-	rb_write_error("\n");</div><div class='del'>-    }</div><div class='add'>+    Fail("wrong argument type %s (expected %s)",</div><div class='add'>+	 rb_class2name(CLASS_OF(x)), builtin_types[t]);</div><div class='ctx'> }</div><div class='head'>diff --git a/etc.c b/etc.c<br/>new file mode 100644<br/>index 0000000000..eb7e225ebb<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/etc.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>etc.c</a></div><div class='hunk'>@@ -0,0 +1,190 @@</div><div class='add'>+/************************************************</div><div class='add'>+</div><div class='add'>+  etc.c -</div><div class='add'>+</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='add'>+  created at: Tue Mar 22 18:39:19 JST 1994</div><div class='add'>+</div><div class='add'>+************************************************/</div><div class='add'>+</div><div class='add'>+#include "ruby.h"</div><div class='add'>+#include &lt;pwd.h&gt;</div><div class='add'>+#include &lt;grp.h&gt;</div><div class='add'>+</div><div class='add'>+char *getlogin();</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fetc_getlogin(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    char *login = getlogin();</div><div class='add'>+</div><div class='add'>+    if (login)</div><div class='add'>+	return str_new2(getlogin());</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+setup_passwd(pwd)</div><div class='add'>+    struct passwd *pwd;</div><div class='add'>+{</div><div class='add'>+    if (pwd == Qnil) rb_sys_fail("/etc/passwd");</div><div class='add'>+    return struct_new("passwd",</div><div class='add'>+		      "name", str_new2(pwd-&gt;pw_name),</div><div class='add'>+		      "passwd", str_new2(pwd-&gt;pw_passwd),</div><div class='add'>+		      "uid", INT2FIX(pwd-&gt;pw_uid),</div><div class='add'>+		      "gid", INT2FIX(pwd-&gt;pw_gid),</div><div class='add'>+		      "gecos", str_new2(pwd-&gt;pw_gecos),</div><div class='add'>+		      "dir", str_new2(pwd-&gt;pw_dir),</div><div class='add'>+		      "shell", str_new2(pwd-&gt;pw_shell),</div><div class='add'>+#ifdef PW_CHANGE</div><div class='add'>+		      "change", INT2FIX(pwd-&gt;pw_change),</div><div class='add'>+#endif</div><div class='add'>+#ifdef PW_QUOTA</div><div class='add'>+		      "quota", INT2FIX(pwd-&gt;pw_quota),</div><div class='add'>+#endif</div><div class='add'>+#ifdef PW_AGE</div><div class='add'>+		      "age", INT2FIX(pwd-&gt;pw_age),</div><div class='add'>+#endif</div><div class='add'>+#ifdef PW_CLASS</div><div class='add'>+		      "class", str_new2(pwd-&gt;pw_class),</div><div class='add'>+#endif</div><div class='add'>+#ifdef PW_COMMENT</div><div class='add'>+		      "comment", str_new2(pwd-&gt;pw_comment),</div><div class='add'>+#endif</div><div class='add'>+#ifdef PW_EXPIRE</div><div class='add'>+		      "expire", INT2FIX(pwd-&gt;pw_expire),</div><div class='add'>+#endif</div><div class='add'>+		      Qnil);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fetc_getpwuid(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='add'>+{</div><div class='add'>+    VALUE id;</div><div class='add'>+    int uid;</div><div class='add'>+    struct passwd *pwd;</div><div class='add'>+</div><div class='add'>+    if (rb_scan_args(args, "01", &amp;id) == 1) {</div><div class='add'>+	uid = NUM2INT(id);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	uid = getuid();</div><div class='add'>+    }</div><div class='add'>+    pwd = getpwuid(uid);</div><div class='add'>+    if (pwd == Qnil) Fail("can't find user for %d", uid);</div><div class='add'>+    return setup_passwd(pwd);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fetc_getpwnam(obj, nam)</div><div class='add'>+    VALUE obj, nam;</div><div class='add'>+{</div><div class='add'>+    struct passwd *pwd;</div><div class='add'>+</div><div class='add'>+    Check_Type(nam, T_STRING);</div><div class='add'>+    pwd = getpwnam(RSTRING(nam)-&gt;ptr);</div><div class='add'>+    if (pwd == Qnil) Fail("can't find user for %s", RSTRING(nam)-&gt;ptr);</div><div class='add'>+    return setup_passwd(pwd);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fetc_passwd(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    struct passwd *pw;</div><div class='add'>+</div><div class='add'>+    if (iterator_p()) {</div><div class='add'>+	setpwent();</div><div class='add'>+	while (pw = getpwent()) {</div><div class='add'>+	    rb_yield(setup_passwd(pw));</div><div class='add'>+	}</div><div class='add'>+	endpwent();</div><div class='add'>+	return obj;</div><div class='add'>+    }</div><div class='add'>+    pw = getpwent();</div><div class='add'>+    if (pw == Qnil) Fail("can't fetch next -- /etc/passwd");</div><div class='add'>+    return setup_passwd(pw);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+setup_group(grp)</div><div class='add'>+    struct group *grp;</div><div class='add'>+{</div><div class='add'>+    VALUE mem;</div><div class='add'>+    char **tbl;</div><div class='add'>+</div><div class='add'>+    mem = ary_new();</div><div class='add'>+    tbl = grp-&gt;gr_mem;</div><div class='add'>+    while (*tbl) {</div><div class='add'>+	Fary_push(mem, str_new2(*tbl));</div><div class='add'>+	tbl++;</div><div class='add'>+    }</div><div class='add'>+    return struct_new("group",</div><div class='add'>+		      "name", str_new2(grp-&gt;gr_name),</div><div class='add'>+		      "passwd", str_new2(grp-&gt;gr_passwd),</div><div class='add'>+		      "gid", INT2FIX(grp-&gt;gr_gid),</div><div class='add'>+		      "mem", mem,</div><div class='add'>+		      Qnil);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fetc_getgrgid(obj, id)</div><div class='add'>+    VALUE obj, id;</div><div class='add'>+{</div><div class='add'>+    int gid;</div><div class='add'>+    struct group *grp;</div><div class='add'>+</div><div class='add'>+    gid = NUM2INT(id);</div><div class='add'>+    grp = getgrgid(gid);</div><div class='add'>+    if (grp == Qnil) Fail("can't find group for %d", gid);</div><div class='add'>+    return setup_group(grp);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fetc_getgrnam(obj, nam)</div><div class='add'>+    VALUE obj, nam;</div><div class='add'>+{</div><div class='add'>+    struct group *grp;</div><div class='add'>+</div><div class='add'>+    Check_Type(nam, T_STRING);</div><div class='add'>+    grp = getgrnam(RSTRING(nam)-&gt;ptr);</div><div class='add'>+    if (grp == Qnil) Fail("can't find group for %s", RSTRING(nam)-&gt;ptr);</div><div class='add'>+    return setup_group(grp);</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+static VALUE</div><div class='add'>+Fetc_group(obj)</div><div class='add'>+    VALUE obj;</div><div class='add'>+{</div><div class='add'>+    struct group *grp;</div><div class='add'>+</div><div class='add'>+    if (iterator_p()) {</div><div class='add'>+	setgrent();</div><div class='add'>+	while (grp = getgrent()) {</div><div class='add'>+	    rb_yield(setup_group(grp));</div><div class='add'>+	}</div><div class='add'>+	endgrent();</div><div class='add'>+	return obj;</div><div class='add'>+    }</div><div class='add'>+    return setup_group(getgrent());</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+VALUE M_Etc;</div><div class='add'>+</div><div class='add'>+Init_Etc()</div><div class='add'>+{</div><div class='add'>+    M_Etc = rb_define_module("Etc");</div><div class='add'>+</div><div class='add'>+    rb_define_mfunc(M_Etc, "getlogin", Fetc_getlogin, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_mfunc(M_Etc, "getpwuid", Fetc_getpwuid, -2);</div><div class='add'>+    rb_define_mfunc(M_Etc, "getpwnam", Fetc_getpwnam, 1);</div><div class='add'>+    rb_define_mfunc(M_Etc, "passwd", Fetc_passwd, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_mfunc(M_Etc, "getgrgid", Fetc_getgrgid, 1);</div><div class='add'>+    rb_define_mfunc(M_Etc, "getgrnam", Fetc_getgrnam, 1);</div><div class='add'>+    rb_define_mfunc(M_Etc, "group", Fetc_group, 0);</div><div class='add'>+}</div><div class='head'>diff --git a/eval.c b/eval.c<br/>index 698e04971c..7a69a22a75 100644<br/>--- a/<a href='/ruby.git/tree/eval.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>eval.c</a><br/>+++ b/<a href='/ruby.git/tree/eval.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>eval.c</a></div><div class='hunk'>@@ -1,13613 +1,1903 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   eval.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/27 15:48:23 $</div><div class='ctx'>   created at: Thu Jun 10 14:22:17 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-  Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "node.h"</div><div class='ctx'> #include "env.h"</div><div class='del'>-#include "util.h"</div><div class='del'>-#include "rubysig.h"</div><div class='del'>-</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='add'>+#include "node.h"</div><div class='add'>+#include "ident.h"</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='del'>-</div><div class='add'>+#include &lt;setjmp.h&gt;</div><div class='ctx'> #include "st.h"</div><div class='del'>-#include "dln.h"</div><div class='del'>-</div><div class='del'>-#ifdef __APPLE__</div><div class='del'>-#include &lt;crt_externs.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* Make alloca work the best possible way.  */</div><div class='del'>-#ifdef __GNUC__</div><div class='del'>-# ifndef atarist</div><div class='del'>-#  ifndef alloca</div><div class='del'>-#   define alloca __builtin_alloca</div><div class='del'>-#  endif</div><div class='del'>-# endif /* atarist */</div><div class='del'>-#else</div><div class='del'>-# ifdef HAVE_ALLOCA_H</div><div class='del'>-#  include &lt;alloca.h&gt;</div><div class='del'>-# else</div><div class='del'>-#  ifndef _AIX</div><div class='del'>-#   ifndef alloca /* predefined by HP cc +Olibcalls */</div><div class='del'>-void *alloca ();</div><div class='del'>-#   endif</div><div class='del'>-#  endif /* AIX */</div><div class='del'>-# endif /* HAVE_ALLOCA_H */</div><div class='del'>-#endif /* __GNUC__ */</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-#include &lt;stdarg.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a,b)</div><div class='del'>-#else</div><div class='del'>-#include &lt;varargs.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_STRING_H</div><div class='del'>-char *strrchr _((const char*,const char));</div><div class='del'>-#endif</div><div class='del'>-</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'>-#ifdef __BEOS__</div><div class='del'>-#include &lt;net/socket.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-#include "macruby_private.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef __VMS</div><div class='del'>-#include "vmsruby_private.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef USE_CONTEXT</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(just_before_setjmp, j) ((j)-&gt;status = 0, \</div><div class='del'>-     (just_before_setjmp), \</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'>-#  define ruby_setjmp(just_before_setjmp, env) \</div><div class='del'>-     ((just_before_setjmp), RUBY_SETJMP(env))</div><div class='del'>-#  define ruby_longjmp(env,val) RUBY_LONGJMP(env,val)</div><div class='del'>-#  ifdef __CYGWIN__</div><div class='del'>-int _setjmp(), _longjmp();</div><div class='del'>-#  endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#include &lt;signal.h&gt;</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-</div><div class='del'>-#if defined(__VMS)</div><div class='del'>-#pragma nostandard</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SYS_SELECT_H</div><div class='del'>-#include &lt;sys/select.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;sys/stat.h&gt;</div><div class='del'>-</div><div class='del'>-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='del'>-static VALUE rb_f_binding _((VALUE));</div><div class='del'>-static void rb_f_END _((void));</div><div class='del'>-static VALUE rb_f_block_given_p _((void));</div><div class='del'>-static VALUE block_pass _((VALUE,NODE*));</div><div class='del'>-</div><div class='del'>-VALUE rb_cMethod;</div><div class='del'>-static VALUE method_call _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_cUnboundMethod;</div><div class='del'>-static VALUE umethod_bind _((VALUE, VALUE));</div><div class='del'>-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='del'>-</div><div class='del'>-static int scope_vmode;</div><div class='del'>-#define SCOPE_PUBLIC    0</div><div class='del'>-#define SCOPE_PRIVATE   1</div><div class='del'>-#define SCOPE_PROTECTED 2</div><div class='del'>-#define SCOPE_MODFUNC   5</div><div class='del'>-#define SCOPE_MASK      7</div><div class='del'>-#define SCOPE_SET(f)  (scope_vmode=(f))</div><div class='del'>-#define SCOPE_TEST(f) (scope_vmode&amp;(f))</div><div class='del'>-</div><div class='del'>-VALUE (*ruby_sandbox_save)_((rb_thread_t));</div><div class='del'>-VALUE (*ruby_sandbox_restore)_((rb_thread_t));</div><div class='del'>-NODE* ruby_current_node;</div><div class='del'>-int ruby_safe_level = 0;</div><div class='del'>-/* safe-level:</div><div class='del'>-   0 - strings from streams/environment/ARGV are tainted (default)</div><div class='del'>-   1 - no dangerous operation by tainted value</div><div class='del'>-   2 - process/file operations prohibited</div><div class='del'>-   3 - all generated objects are tainted</div><div class='del'>-   4 - no global (non-tainted) variable modification/no direct output</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-static VALUE safe_getter _((void));</div><div class='del'>-static void safe_setter _((VALUE val));</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_secure(level)</div><div class='del'>-    int level;</div><div class='del'>-{</div><div class='del'>-    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='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-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='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    if (ruby_safe_level &gt; 0 &amp;&amp; OBJ_TAINTED(x)){</div><div class='del'>-	if (ruby_frame-&gt;last_func) {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "Insecure operation - %s",</div><div class='del'>-		     rb_id2name(ruby_frame-&gt;last_func));</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "Insecure operation: -r");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    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='del'>-    if (TYPE(x)!= T_STRING) {</div><div class='del'>-	rb_raise(rb_eTypeError, "wrong argument type %s (expected String)",</div><div class='del'>-		 rb_obj_classname(x));</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-NORETURN(static void print_undef _((VALUE, ID)));</div><div class='del'>-static void</div><div class='del'>-print_undef(klass, id)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    rb_name_error(id, "undefined method `%s' for %s `%s'",</div><div class='del'>-		  rb_id2name(id),</div><div class='del'>-		  (TYPE(klass) == T_MODULE) ? "module" : "class",</div><div class='del'>-		  rb_class2name(klass));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ID removed, singleton_removed, undefined, singleton_undefined;</div><div class='del'>-</div><div class='del'>-#define CACHE_SIZE 0x800</div><div class='del'>-#define CACHE_MASK 0x7ff</div><div class='del'>-#define EXPR1(c,m) ((((c)&gt;&gt;3)^(m))&amp;CACHE_MASK)</div><div class='del'>-</div><div class='del'>-struct cache_entry {		/* method hash table. */</div><div class='del'>-    ID mid;			/* method's id */</div><div class='del'>-    ID mid0;			/* method's original id */</div><div class='del'>-    VALUE klass;		/* receiver's class */</div><div class='del'>-    VALUE origin;		/* where method defined  */</div><div class='del'>-    NODE *method;</div><div class='del'>-    int noex;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static struct cache_entry cache[CACHE_SIZE];</div><div class='del'>-static int ruby_running = 0;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_clear_cache()</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'>-	ent-&gt;mid = 0;</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='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='del'>-rb_clear_cache_by_id(id)</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) {</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'>-void</div><div class='del'>-rb_clear_cache_by_class(klass)</div><div class='del'>-    VALUE klass;</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;klass == klass || ent-&gt;origin == klass) {</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 ID init, eqq, each, aref, aset, match, missing;</div><div class='del'>-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='del'>-</div><div class='del'>-void</div><div class='del'>-rb_add_method(klass, mid, node, noex)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID mid;</div><div class='del'>-    NODE *node;</div><div class='del'>-    int noex;</div><div class='del'>-{</div><div class='del'>-    NODE *body;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(klass)) klass = rb_cObject;</div><div class='del'>-    if (ruby_safe_level &gt;= 4 &amp;&amp; (klass == rb_cObject || !OBJ_TAINTED(klass))) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't define method");</div><div class='del'>-    }</div><div class='del'>-    if (!FL_TEST(klass, FL_SINGLETON) &amp;&amp;</div><div class='del'>-	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='del'>-    }</div><div class='del'>-    else if (FL_TEST(klass, FL_SINGLETON) &amp;&amp; node &amp;&amp; nd_type(node) == NODE_CFUNC &amp;&amp;</div><div class='del'>-	     mid == rb_intern("allocate")) {</div><div class='del'>-	rb_warn("defining %s.allocate is deprecated; use rb_define_alloc_func()",</div><div class='del'>-		rb_class2name(rb_iv_get(klass, "__attached__")));</div><div class='del'>-	mid = ID_ALLOCATOR;</div><div class='del'>-    }</div><div class='del'>-    if (OBJ_FROZEN(klass)) rb_error_frozen("class/module");</div><div class='del'>-    rb_clear_cache_by_id(mid);</div><div class='del'>-    body = NEW_METHOD(node, NOEX_WITH_SAFE(noex));</div><div class='del'>-    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='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_define_alloc_func(klass, func)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    VALUE (*func) _((VALUE));</div><div class='del'>-{</div><div class='del'>-    Check_Type(klass, T_CLASS);</div><div class='del'>-    rb_add_method(rb_singleton_class(klass), ID_ALLOCATOR, NEW_CFUNC(func, 0),</div><div class='del'>-		  NOEX_PRIVATE);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_undef_alloc_func(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    Check_Type(klass, T_CLASS);</div><div class='del'>-    rb_add_method(rb_singleton_class(klass), ID_ALLOCATOR, 0, NOEX_UNDEF);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static NODE*</div><div class='del'>-search_method(klass, id, origin)</div><div class='del'>-    VALUE klass, *origin;</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    st_data_t body;</div><div class='del'>-</div><div class='del'>-    if (!klass) return 0;</div><div class='del'>-    while (!st_lookup(RCLASS(klass)-&gt;m_tbl, id, &amp;body)) {</div><div class='del'>-	klass = RCLASS(klass)-&gt;super;</div><div class='del'>-	if (!klass) return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (origin) *origin = klass;</div><div class='del'>-    return (NODE *)body;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static NODE*</div><div class='del'>-rb_get_method_body(klassp, idp, noexp)</div><div class='del'>-    VALUE *klassp;</div><div class='del'>-    ID *idp;</div><div class='del'>-    int *noexp;</div><div class='del'>-{</div><div class='del'>-    ID id = *idp;</div><div class='del'>-    VALUE klass = *klassp;</div><div class='del'>-    VALUE origin = 0;</div><div class='del'>-    NODE * volatile body;</div><div class='del'>-    struct cache_entry *ent;</div><div class='del'>-</div><div class='del'>-    if ((body = search_method(klass, id, &amp;origin)) == 0 || !body-&gt;nd_body) {</div><div class='del'>-	/* store empty info in cache */</div><div class='del'>-	ent = cache + EXPR1(klass, id);</div><div class='del'>-	ent-&gt;klass  = klass;</div><div class='del'>-	ent-&gt;origin = klass;</div><div class='del'>-	ent-&gt;mid = ent-&gt;mid0 = id;</div><div class='del'>-	ent-&gt;noex   = 0;</div><div class='del'>-	ent-&gt;method = 0;</div><div class='del'>-</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (ruby_running) {</div><div class='del'>-	/* store in cache */</div><div class='del'>-	ent = cache + EXPR1(klass, id);</div><div class='del'>-	ent-&gt;klass  = klass;</div><div class='del'>-	ent-&gt;noex   = body-&gt;nd_noex;</div><div class='del'>-	if (noexp) *noexp = body-&gt;nd_noex;</div><div class='del'>-	body = body-&gt;nd_body;</div><div class='del'>-	if (nd_type(body) == NODE_FBODY) {</div><div class='del'>-	    ent-&gt;mid = id;</div><div class='del'>-	    *klassp = body-&gt;nd_orig;</div><div class='del'>-	    ent-&gt;origin = body-&gt;nd_orig;</div><div class='del'>-	    *idp = ent-&gt;mid0 = body-&gt;nd_mid;</div><div class='del'>-	    body = ent-&gt;method = body-&gt;nd_head;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    *klassp = origin;</div><div class='del'>-	    ent-&gt;origin = origin;</div><div class='del'>-	    ent-&gt;mid = ent-&gt;mid0 = id;</div><div class='del'>-	    ent-&gt;method = body;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (noexp) *noexp = body-&gt;nd_noex;</div><div class='del'>-	body = body-&gt;nd_body;</div><div class='del'>-	if (nd_type(body) == NODE_FBODY) {</div><div class='del'>-	    *klassp = body-&gt;nd_orig;</div><div class='del'>-	    *idp = body-&gt;nd_mid;</div><div class='del'>-	    body = body-&gt;nd_head;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    *klassp = origin;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return body;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static void</div><div class='del'>-remove_method(klass, mid)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID mid;</div><div class='del'>-{</div><div class='del'>-    st_data_t data;</div><div class='del'>-    NODE *body = 0;</div><div class='del'>-</div><div class='del'>-    if (klass == rb_cObject) {</div><div class='del'>-	rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-    if (ruby_safe_level &gt;= 4 &amp;&amp; !OBJ_TAINTED(klass)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't remove method");</div><div class='del'>-    }</div><div class='del'>-    if (OBJ_FROZEN(klass)) rb_error_frozen("class/module");</div><div class='del'>-    if (mid == __id__ || mid == __send__ || mid == init) {</div><div class='del'>-	rb_warn("removing `%s' may cause serious problem", rb_id2name(mid));</div><div class='del'>-    }</div><div class='del'>-    if (st_lookup(RCLASS(klass)-&gt;m_tbl, mid, &amp;data)) {</div><div class='del'>-	body = (NODE *)data;</div><div class='del'>-	if (!body || !body-&gt;nd_body) body = 0;</div><div class='del'>-	else {</div><div class='del'>-	    st_delete(RCLASS(klass)-&gt;m_tbl, &amp;mid, &amp;data);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!body) {</div><div class='del'>-	rb_name_error(mid, "method `%s' not defined in %s",</div><div class='del'>-		      rb_id2name(mid), rb_class2name(klass));</div><div class='del'>-    }</div><div class='del'>-    rb_clear_cache_for_undef(klass, mid);</div><div class='del'>-    if (FL_TEST(klass, FL_SINGLETON)) {</div><div class='del'>-	rb_funcall(rb_iv_get(klass, "__attached__"), singleton_removed, 1, ID2SYM(mid));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_funcall(klass, removed, 1, ID2SYM(mid));</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_remove_method(klass, name)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name;</div><div class='del'>-{</div><div class='del'>-    remove_method(klass, 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'>- *     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='del'>-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='del'>-{</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='del'>-    return mod;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#undef rb_disable_super</div><div class='del'>-#undef rb_enable_super</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_disable_super(klass, name)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name;</div><div class='del'>-{</div><div class='del'>-    /* obsolete - no use */</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_enable_super(klass, name)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *name;</div><div class='del'>-{</div><div class='del'>-    rb_warn("rb_enable_super() is obsolete");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_export_method(klass, name, noex)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID name;</div><div class='del'>-    ID noex;</div><div class='del'>-{</div><div class='del'>-    NODE *body;</div><div class='del'>-    VALUE origin;</div><div class='del'>-</div><div class='del'>-    if (klass == rb_cObject) {</div><div class='del'>-	rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-    body = search_method(klass, name, &amp;origin);</div><div class='del'>-    if (!body &amp;&amp; TYPE(klass) == T_MODULE) {</div><div class='del'>-	body = search_method(rb_cObject, name, &amp;origin);</div><div class='del'>-    }</div><div class='del'>-    if (!body || !body-&gt;nd_body) {</div><div class='del'>-	print_undef(klass, name);</div><div class='del'>-    }</div><div class='del'>-    if (body-&gt;nd_noex != noex) {</div><div class='del'>-	if (klass == origin) {</div><div class='del'>-	    body-&gt;nd_noex = noex;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_add_method(klass, name, NEW_ZSUPER(), noex);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-}</div><div class='add'>+static ID match, each;</div><div class='add'>+VALUE errstr, errat;</div><div class='add'>+extern NODE *eval_tree;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-rb_method_boundp(klass, id, ex)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID id;</div><div class='del'>-    int ex;</div><div class='del'>-{</div><div class='del'>-    struct cache_entry *ent;</div><div class='del'>-    int noex;</div><div class='del'>-</div><div class='del'>-    /* is it in the method cache? */</div><div class='del'>-    ent = cache + EXPR1(klass, id);</div><div class='del'>-    if (ent-&gt;mid == id &amp;&amp; ent-&gt;klass == klass) {</div><div class='del'>-	if (ex &amp;&amp; (ent-&gt;noex &amp; NOEX_PRIVATE))</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	if (!ent-&gt;method) return Qfalse;</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    if (rb_get_method_body(&amp;klass, &amp;id, &amp;noex)) {</div><div class='del'>-	if (ex &amp;&amp; (noex &amp; NOEX_PRIVATE))</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='add'>+extern VALUE TopSelf;</div><div class='add'>+struct ENVIRON *the_env, *top_env;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_attr(klass, id, read, write, ex)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID id;</div><div class='del'>-    int read, write, ex;</div><div class='del'>-{</div><div class='del'>-    const char *name;</div><div class='del'>-    char *buf;</div><div class='del'>-    ID attriv;</div><div class='del'>-    int noex;</div><div class='del'>-    size_t len;</div><div class='add'>+#define PUSH_ENV() {\</div><div class='add'>+    struct ENVIRON _this;\</div><div class='add'>+    if (the_env) _this = *the_env; else bzero(&amp;_this, sizeof(_this));\</div><div class='add'>+    _this.prev = the_env;\</div><div class='add'>+    _this.flags = 0;\</div><div class='add'>+    the_env = &amp;_this;\</div><div class='ctx'> </div><div class='del'>-    if (!ex) noex = NOEX_PUBLIC;</div><div class='del'>-    else {</div><div class='del'>-	if (SCOPE_TEST(SCOPE_PRIVATE)) {</div><div class='del'>-	    noex = NOEX_PRIVATE;</div><div class='del'>-	    rb_warning((scope_vmode == SCOPE_MODFUNC) ?</div><div class='del'>-		       "attribute accessor as module_function" :</div><div class='del'>-		       "private attribute?");</div><div class='del'>-	}</div><div class='del'>-	else if (SCOPE_TEST(SCOPE_PROTECTED)) {</div><div class='del'>-	    noex = NOEX_PROTECTED;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    noex = NOEX_PUBLIC;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</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='del'>-    name = rb_id2name(id);</div><div class='del'>-    if (!name) {</div><div class='del'>-	rb_raise(rb_eArgError, "argument needs to be symbol or string");</div><div class='del'>-    }</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='del'>-    attriv = rb_intern(buf);</div><div class='del'>-    if (read) {</div><div class='del'>-	rb_add_method(klass, id, NEW_IVAR(attriv), noex);</div><div class='del'>-    }</div><div class='del'>-    if (write) {</div><div class='del'>-	rb_add_method(klass, rb_id_attrset(id), NEW_ATTRSET(attriv), noex);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-extern int ruby_in_compile;</div><div class='del'>-</div><div class='del'>-VALUE ruby_errinfo = Qnil;</div><div class='del'>-extern NODE *ruby_eval_tree_begin;</div><div class='del'>-extern NODE *ruby_eval_tree;</div><div class='del'>-extern int ruby_nerrs;</div><div class='del'>-</div><div class='del'>-VALUE rb_eLocalJumpError;</div><div class='del'>-VALUE rb_eSysStackError;</div><div class='del'>-</div><div class='del'>-extern VALUE ruby_top_self;</div><div class='del'>-</div><div class='del'>-struct FRAME *ruby_frame;</div><div class='del'>-struct SCOPE *ruby_scope;</div><div class='del'>-static struct FRAME *top_frame;</div><div class='del'>-static struct SCOPE *top_scope;</div><div class='del'>-</div><div class='del'>-static unsigned long frame_unique = 0;</div><div class='del'>-</div><div class='del'>-#define PUSH_FRAME() do {		\</div><div class='del'>-    volatile struct FRAME _frame;	\</div><div class='del'>-    _frame.prev = ruby_frame;		\</div><div class='del'>-    _frame.tmp  = 0;			\</div><div class='del'>-    _frame.node = ruby_current_node;	\</div><div class='del'>-    _frame.iter = ruby_iter-&gt;iter;	\</div><div class='del'>-    _frame.argc = 0;			\</div><div class='del'>-    _frame.flags = 0;			\</div><div class='del'>-    _frame.uniq = frame_unique++;	\</div><div class='del'>-    ruby_frame = &amp;_frame</div><div class='del'>-</div><div class='del'>-#define POP_FRAME()  			\</div><div class='del'>-    ruby_current_node = _frame.node;	\</div><div class='del'>-    ruby_frame = _frame.prev;		\</div><div class='del'>-} while (0)</div><div class='add'>+#define POP_ENV()  the_env = the_env-&gt;prev; }</div><div class='ctx'> </div><div class='ctx'> struct BLOCK {</div><div class='ctx'>     NODE *var;</div><div class='ctx'>     NODE *body;</div><div class='del'>-    VALUE self;</div><div class='del'>-    struct FRAME frame;</div><div class='del'>-    struct SCOPE *scope;</div><div class='del'>-    VALUE klass;</div><div class='del'>-    NODE *cref;</div><div class='del'>-    int iter;</div><div class='del'>-    int vmode;</div><div class='del'>-    int flags;</div><div class='del'>-    int uniq;</div><div class='del'>-    struct RVarmap *dyna_vars;</div><div class='del'>-    VALUE orig_thread;</div><div class='del'>-    VALUE wrapper;</div><div class='del'>-    VALUE block_obj;</div><div class='del'>-    struct BLOCK *outer;</div><div class='del'>-    struct BLOCK *prev;</div><div class='add'>+    struct ENVIRON env;</div><div class='add'>+    int level;</div><div class='ctx'> };</div><div class='ctx'> </div><div class='del'>-#define BLOCK_D_SCOPE 1</div><div class='del'>-#define BLOCK_LAMBDA  2</div><div class='del'>-</div><div class='del'>-static struct BLOCK *ruby_block;</div><div class='del'>-static unsigned long block_unique = 1;</div><div class='del'>-</div><div class='del'>-#define PUSH_BLOCK(v,b) do {		\</div><div class='del'>-    struct BLOCK _block;		\</div><div class='del'>-    _block.var = (v);			\</div><div class='del'>-    _block.body = (b);			\</div><div class='del'>-    _block.self = self;			\</div><div class='del'>-    _block.frame = *ruby_frame;		\</div><div class='del'>-    _block.klass = ruby_class;		\</div><div class='del'>-    _block.cref = ruby_cref;		\</div><div class='del'>-    _block.frame.node = ruby_current_node;\</div><div class='del'>-    _block.scope = ruby_scope;		\</div><div class='del'>-    _block.prev = ruby_block;		\</div><div class='del'>-    _block.outer = ruby_block;		\</div><div class='del'>-    _block.iter = ruby_iter-&gt;iter;	\</div><div class='del'>-    _block.vmode = scope_vmode;		\</div><div class='del'>-    _block.flags = BLOCK_D_SCOPE;	\</div><div class='del'>-    _block.dyna_vars = ruby_dyna_vars;	\</div><div class='del'>-    _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='del'>-    ruby_block = &amp;_block</div><div class='del'>-</div><div class='del'>-#define POP_BLOCK() \</div><div class='del'>-   ruby_block = _block.prev; \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-struct RVarmap *ruby_dyna_vars;</div><div class='del'>-#define PUSH_VARS() do { \</div><div class='del'>-    struct RVarmap * volatile _old; \</div><div class='del'>-    _old = ruby_dyna_vars; \</div><div class='del'>-    ruby_dyna_vars = 0</div><div class='del'>-</div><div class='del'>-#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='del'>-    }\</div><div class='del'>-    ruby_dyna_vars = _old; \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define DVAR_DONT_RECYCLE FL_USER2</div><div class='del'>-</div><div class='del'>-#define DMETHOD_P() (ruby_frame-&gt;flags &amp; FRAME_DMETH)</div><div class='del'>-</div><div class='del'>-static struct RVarmap*</div><div class='del'>-new_dvar(id, value, prev)</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE value;</div><div class='del'>-    struct RVarmap *prev;</div><div class='del'>-{</div><div class='del'>-    NEWOBJ(vars, struct RVarmap);</div><div class='del'>-    OBJSETUP(vars, 0, T_VARMAP);</div><div class='del'>-    vars-&gt;id = id;</div><div class='del'>-    vars-&gt;val = value;</div><div class='del'>-    vars-&gt;next = prev;</div><div class='del'>-</div><div class='del'>-    return vars;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dvar_defined(id)</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    struct RVarmap *vars = ruby_dyna_vars;</div><div class='del'>-</div><div class='del'>-    while (vars) {</div><div class='del'>-	if (vars-&gt;id == id) return Qtrue;</div><div class='del'>-	vars = vars-&gt;next;</div><div class='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dvar_curr(id)</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    struct RVarmap *vars = ruby_dyna_vars;</div><div class='del'>-</div><div class='del'>-    while (vars) {</div><div class='del'>-	if (vars-&gt;id == 0) break;</div><div class='del'>-	if (vars-&gt;id == id) return Qtrue;</div><div class='del'>-	vars = vars-&gt;next;</div><div class='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dvar_ref(id)</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    struct RVarmap *vars = ruby_dyna_vars;</div><div class='add'>+#define SET_BLOCK(b,node) (b.level=tag_level,b.var=node-&gt;nd_var,\</div><div class='add'>+			   b.body=node-&gt;nd_body,b.env=*the_env,\</div><div class='add'>+			   the_env-&gt;block= &amp;b)</div><div class='ctx'> </div><div class='del'>-    while (vars) {</div><div class='del'>-	if (vars-&gt;id == id) {</div><div class='del'>-	    return vars-&gt;val;</div><div class='del'>-	}</div><div class='del'>-	vars = vars-&gt;next;</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='add'>+static int tag_level, target_level;</div><div class='add'>+static struct tag {</div><div class='add'>+    int level;</div><div class='add'>+    jmp_buf buf;</div><div class='add'>+    struct gc_list *gclist;</div><div class='add'>+    struct ENVIRON *env;</div><div class='add'>+} *prot_tag;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_dvar_push(id, value)</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    ruby_dyna_vars = new_dvar(id, value, ruby_dyna_vars);</div><div class='del'>-}</div><div class='add'>+#define PUSH_TAG() {\</div><div class='add'>+    struct tag _this;\</div><div class='add'>+    struct tag *_oldtag = prot_tag;\</div><div class='add'>+    &amp;_oldtag;\</div><div class='add'>+    _this.level= ++tag_level;\</div><div class='add'>+    _this.env= the_env;\</div><div class='add'>+    prot_tag = &amp;_this;\</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-dvar_asgn_internal(id, value, curr)</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE value;</div><div class='del'>-    int curr;</div><div class='del'>-{</div><div class='del'>-    int n = 0;</div><div class='del'>-    struct RVarmap *vars = ruby_dyna_vars;</div><div class='del'>-</div><div class='del'>-    while (vars) {</div><div class='del'>-	if (curr &amp;&amp; vars-&gt;id == 0) {</div><div class='del'>-	    /* first null is a dvar header */</div><div class='del'>-	    n++;</div><div class='del'>-	    if (n == 2) break;</div><div class='del'>-	}</div><div class='del'>-	if (vars-&gt;id == id) {</div><div class='del'>-	    vars-&gt;val = value;</div><div class='del'>-	    return;</div><div class='del'>-	}</div><div class='del'>-	vars = vars-&gt;next;</div><div class='del'>-    }</div><div class='del'>-    if (!ruby_dyna_vars) {</div><div class='del'>-	ruby_dyna_vars = new_dvar(id, value, 0);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	vars = new_dvar(id, value, ruby_dyna_vars-&gt;next);</div><div class='del'>-	ruby_dyna_vars-&gt;next = vars;</div><div class='del'>-    }</div><div class='add'>+#define POP_TAG() \</div><div class='add'>+    tag_level--;\</div><div class='add'>+    prot_tag = _oldtag;\</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static inline void</div><div class='del'>-dvar_asgn(id, value)</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    dvar_asgn_internal(id, value, 0);</div><div class='add'>+#define EXEC_TAG()    (setjmp(prot_tag-&gt;buf))</div><div class='add'>+#define JUMP_TAG(val) {\</div><div class='add'>+    the_env = prot_tag-&gt;env;\</div><div class='add'>+    longjmp(prot_tag-&gt;buf,(val));\</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static inline void</div><div class='del'>-dvar_asgn_curr(id, value)</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    dvar_asgn_internal(id, value, 1);</div><div class='del'>-}</div><div class='add'>+#define TAG_RETURN	1</div><div class='add'>+#define TAG_BREAK	2</div><div class='add'>+#define TAG_CONTINUE	3</div><div class='add'>+#define TAG_RETRY	4</div><div class='add'>+#define TAG_REDO	5</div><div class='add'>+#define TAG_FAIL	6</div><div class='add'>+#define TAG_EXIT	7</div><div class='ctx'> </div><div class='del'>-VALUE *</div><div class='del'>-rb_svar(cnt)</div><div class='del'>-    int cnt;</div><div class='del'>-{</div><div class='del'>-    struct RVarmap *vars = ruby_dyna_vars;</div><div class='del'>-    ID id;</div><div class='add'>+#define IN_BLOCK   0x08</div><div class='ctx'> </div><div class='del'>-    if (!ruby_scope-&gt;local_tbl) return NULL;</div><div class='del'>-    if (cnt &gt;= ruby_scope-&gt;local_tbl[0]) return NULL;</div><div class='del'>-    id = ruby_scope-&gt;local_tbl[cnt+1];</div><div class='del'>-    while (vars) {</div><div class='del'>-	if (vars-&gt;id == id) return &amp;vars-&gt;val;</div><div class='del'>-	vars = vars-&gt;next;</div><div class='del'>-    }</div><div class='del'>-    if (ruby_scope-&gt;local_vars == 0) return NULL;</div><div class='del'>-    return &amp;ruby_scope-&gt;local_vars[cnt];</div><div class='del'>-}</div><div class='add'>+static VALUE rb_eval();</div><div class='add'>+VALUE Feval();</div><div class='ctx'> </div><div class='del'>-struct iter {</div><div class='del'>-    int iter;</div><div class='del'>-    struct iter *prev;</div><div class='del'>-};</div><div class='del'>-static struct iter *ruby_iter;</div><div class='del'>-</div><div class='del'>-#define ITER_NOT 0</div><div class='del'>-#define ITER_PRE 1</div><div class='del'>-#define ITER_CUR 2</div><div class='del'>-#define ITER_PAS 3</div><div class='del'>-</div><div class='del'>-#define PUSH_ITER(i) do {		\</div><div class='del'>-    struct iter _iter;			\</div><div class='del'>-    _iter.prev = ruby_iter;		\</div><div class='del'>-    _iter.iter = (i);			\</div><div class='del'>-    ruby_iter = &amp;_iter</div><div class='del'>-</div><div class='del'>-#define POP_ITER()			\</div><div class='del'>-    ruby_iter = _iter.prev;		\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-struct tag {</div><div class='del'>-    rb_jmpbuf_t buf;</div><div class='del'>-    struct FRAME *frame;</div><div class='del'>-    struct iter *iter;</div><div class='del'>-    VALUE tag;</div><div class='del'>-    VALUE retval;</div><div class='del'>-    struct SCOPE *scope;</div><div class='del'>-    VALUE dst;</div><div class='del'>-    struct tag *prev;</div><div class='del'>-    int blkid;</div><div class='del'>-};</div><div class='del'>-static struct tag *prot_tag;</div><div class='del'>-</div><div class='del'>-#define PUSH_TAG(ptag) do {		\</div><div class='del'>-    struct tag _tag;			\</div><div class='del'>-    _tag.retval = Qnil;			\</div><div class='del'>-    _tag.frame = ruby_frame;		\</div><div class='del'>-    _tag.iter = ruby_iter;		\</div><div class='del'>-    _tag.prev = prot_tag;		\</div><div class='del'>-    _tag.scope = ruby_scope;		\</div><div class='del'>-    _tag.tag = ptag;			\</div><div class='del'>-    _tag.dst = 0;			\</div><div class='del'>-    _tag.blkid = 0;			\</div><div class='del'>-    prot_tag = &amp;_tag</div><div class='del'>-</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='del'>-</div><div class='del'>-#define EXEC_TAG()    ruby_setjmp(((void)0), prot_tag-&gt;buf)</div><div class='del'>-</div><div class='del'>-#define JUMP_TAG(st) do {		\</div><div class='del'>-    ruby_frame = prot_tag-&gt;frame;	\</div><div class='del'>-    ruby_iter = prot_tag-&gt;iter;		\</div><div class='del'>-    ruby_longjmp(prot_tag-&gt;buf,(st));	\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define POP_TAG()			\</div><div class='del'>-    prot_tag = _tag.prev;		\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define TAG_DST() (_tag.dst == (VALUE)ruby_frame-&gt;uniq)</div><div class='del'>-</div><div class='del'>-#define TAG_RETURN	0x1</div><div class='del'>-#define TAG_BREAK	0x2</div><div class='del'>-#define TAG_NEXT	0x3</div><div class='del'>-#define TAG_RETRY	0x4</div><div class='del'>-#define TAG_REDO	0x5</div><div class='del'>-#define TAG_RAISE	0x6</div><div class='del'>-#define TAG_THROW	0x7</div><div class='del'>-#define TAG_FATAL	0x8</div><div class='del'>-#define TAG_MASK	0xf</div><div class='del'>-</div><div class='del'>-VALUE ruby_class;</div><div class='del'>-static VALUE ruby_wrapper;	/* security wrapper */</div><div class='del'>-</div><div class='del'>-#define PUSH_CLASS(c) do {		\</div><div class='del'>-    volatile VALUE _class = ruby_class;	\</div><div class='del'>-    ruby_class = (c)</div><div class='del'>-</div><div class='del'>-#define POP_CLASS() ruby_class = _class; \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-NODE *ruby_cref = 0;</div><div class='del'>-NODE *ruby_top_cref;</div><div class='del'>-#define PUSH_CREF(c) ruby_cref = NEW_NODE(NODE_CREF,(c),0,ruby_cref)</div><div class='del'>-#define POP_CREF() ruby_cref = ruby_cref-&gt;nd_next</div><div class='del'>-</div><div class='del'>-#define PUSH_SCOPE() do {		\</div><div class='del'>-    volatile int _vmode = scope_vmode;	\</div><div class='del'>-    struct SCOPE * volatile _old;	\</div><div class='del'>-    NEWOBJ(_scope, struct SCOPE);	\</div><div class='del'>-    OBJSETUP(_scope, 0, T_SCOPE);	\</div><div class='del'>-    _scope-&gt;local_tbl = 0;		\</div><div class='del'>-    _scope-&gt;local_vars = 0;		\</div><div class='del'>-    _scope-&gt;flags = 0;			\</div><div class='del'>-    _old = ruby_scope;			\</div><div class='del'>-    ruby_scope = _scope;		\</div><div class='del'>-    scope_vmode = SCOPE_PUBLIC</div><div class='del'>-</div><div class='del'>-rb_thread_t rb_curr_thread;</div><div class='del'>-rb_thread_t rb_main_thread;</div><div class='del'>-#define main_thread rb_main_thread</div><div class='del'>-#define curr_thread rb_curr_thread</div><div class='del'>-</div><div class='del'>-static void scope_dup _((struct SCOPE *));</div><div class='del'>-</div><div class='del'>-#define POP_SCOPE() 			\</div><div class='del'>-    if (ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE) {\</div><div class='del'>-	if (_old) scope_dup(_old);	\</div><div class='del'>-    }					\</div><div class='del'>-    if (!(ruby_scope-&gt;flags &amp; SCOPE_MALLOC)) {\</div><div class='del'>-	ruby_scope-&gt;local_vars = 0;	\</div><div class='del'>-	ruby_scope-&gt;local_tbl  = 0;	\</div><div class='del'>-	if (!(ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE) &amp;&amp; \</div><div class='del'>-	    ruby_scope != top_scope) {	\</div><div class='del'>-	    rb_gc_force_recycle((VALUE)ruby_scope);\</div><div class='del'>-	}				\</div><div class='del'>-    }					\</div><div class='del'>-    ruby_scope-&gt;flags |= SCOPE_NOSTACK;	\</div><div class='del'>-    ruby_scope = _old;			\</div><div class='del'>-    scope_vmode = _vmode;		\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-static VALUE rb_eval _((VALUE,NODE*));</div><div class='del'>-static VALUE eval _((VALUE,VALUE,VALUE,const char*,int));</div><div class='del'>-static NODE *compile _((VALUE, const char*, int));</div><div class='del'>-</div><div class='del'>-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'>-#define YIELD_FUNC_LAMBDA 3</div><div class='del'>-</div><div class='del'>-static VALUE rb_call _((VALUE,VALUE,ID,int,const VALUE*,int,VALUE));</div><div class='del'>-static VALUE module_setup _((VALUE,NODE*));</div><div class='del'>-</div><div class='del'>-static VALUE massign _((VALUE,NODE*,VALUE,int));</div><div class='del'>-static void assign _((VALUE,NODE*,VALUE,int));</div><div class='del'>-</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='del'>-static VALUE trace_func = 0;</div><div class='del'>-static int tracing = 0;</div><div class='del'>-static void call_trace_func _((rb_event_t,NODE*,VALUE,ID,VALUE));</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-#define SET_CURRENT_SOURCE() (ruby_sourcefile = ruby_current_node-&gt;nd_file, \</div><div class='del'>-			      ruby_sourceline = nd_line(ruby_current_node))</div><div class='del'>-#else</div><div class='del'>-#define SET_CURRENT_SOURCE() ((void)0)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-ruby_set_current_source()</div><div class='del'>-{</div><div class='del'>-    if (ruby_current_node) {</div><div class='del'>-	ruby_sourcefile = ruby_current_node-&gt;nd_file;</div><div class='del'>-	ruby_sourceline = nd_line(ruby_current_node);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='add'>+VALUE Argv;</div><div class='add'>+static VALUE rb_call();</div><div class='add'>+VALUE rb_apply();</div><div class='add'>+VALUE rb_xstring();</div><div class='ctx'> </div><div class='del'>-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='add'>+static void asign();</div><div class='ctx'> </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='add'>+static VALUE last_val;</div><div class='ctx'> </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='add'>+extern VALUE rb_stderr;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-error_pos()</div><div class='del'>-{</div><div class='del'>-    ruby_set_current_source();</div><div class='del'>-    if (ruby_sourcefile) {</div><div class='del'>-	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='del'>-	}</div><div class='del'>-	else if (ruby_sourceline == 0) {</div><div class='del'>-	    warn_printf("%s", ruby_sourcefile);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    warn_printf("%s:%d", ruby_sourcefile, ruby_sourceline);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE rb_check_backtrace(VALUE);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-get_backtrace(info)</div><div class='del'>-    VALUE info;</div><div class='del'>-{</div><div class='del'>-    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='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-set_backtrace(info, bt)</div><div class='del'>-    VALUE info, bt;</div><div class='del'>-{</div><div class='del'>-    rb_funcall(info, rb_intern("set_backtrace"), 1, bt);</div><div class='del'>-}</div><div class='add'>+extern int   sourceline;</div><div class='add'>+extern char *sourcefile;</div><div class='ctx'> </div><div class='add'>+static ID last_func;</div><div class='ctx'> static void</div><div class='ctx'> error_print()</div><div class='ctx'> {</div><div class='del'>-    VALUE errat = Qnil;		/* OK */</div><div class='del'>-    volatile VALUE eclass, e;</div><div class='del'>-    const char *einfo;</div><div class='del'>-    long elen;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(ruby_errinfo)) return;</div><div class='del'>-</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    if (EXEC_TAG() == 0) {</div><div class='del'>-	errat = get_backtrace(ruby_errinfo);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	errat = Qnil;</div><div class='del'>-    }</div><div class='del'>-    if (EXEC_TAG()) goto error;</div><div class='del'>-    if (NIL_P(errat)){</div><div class='del'>-	ruby_set_current_source();</div><div class='del'>-	if (ruby_sourcefile)</div><div class='del'>-	    warn_printf("%s:%d", ruby_sourcefile, ruby_sourceline);</div><div class='del'>-	else</div><div class='del'>-	    warn_printf("%d", ruby_sourceline);</div><div class='del'>-    }</div><div class='del'>-    else if (RARRAY(errat)-&gt;len == 0) {</div><div class='del'>-	error_pos();</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE mesg = RARRAY(errat)-&gt;ptr[0];</div><div class='del'>-</div><div class='del'>-	if (NIL_P(mesg)) error_pos();</div><div class='add'>+    if (errat) {</div><div class='add'>+	fwrite(RSTRING(errat)-&gt;ptr, 1, RSTRING(errat)-&gt;len, stderr);</div><div class='add'>+	if (last_func) {</div><div class='add'>+	    fprintf(stderr, ":in method `%s': ", rb_id2name(last_func));</div><div class='add'>+	}</div><div class='ctx'> 	else {</div><div class='del'>-	    warn_print2(RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len);</div><div class='add'>+	    fprintf(stderr, ": ");</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    eclass = CLASS_OF(ruby_errinfo);</div><div class='del'>-    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='del'>-	einfo = RSTRING(e)-&gt;ptr;</div><div class='del'>-	elen = RSTRING(e)-&gt;len;</div><div class='add'>+    if (errstr) {</div><div class='add'>+	fwrite(RSTRING(errstr)-&gt;ptr, 1, RSTRING(errstr)-&gt;len, stderr);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	einfo = "";</div><div class='del'>-	elen = 0;</div><div class='del'>-    }</div><div class='del'>-    if (EXEC_TAG()) goto error;</div><div class='del'>-    if (eclass == rb_eRuntimeError &amp;&amp; elen == 0) {</div><div class='del'>-	warn_print(": unhandled exception\n");</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE epath;</div><div class='del'>-</div><div class='del'>-	epath = rb_class_name(eclass);</div><div class='del'>-	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='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    char *tail  = 0;</div><div class='del'>-	    long len = elen;</div><div class='del'>-</div><div class='del'>-	    if (RSTRING(epath)-&gt;ptr[0] == '#') epath = 0;</div><div class='del'>-	    if ((tail = memchr(einfo, '\n', elen)) != 0) {</div><div class='del'>-		len = tail - einfo;</div><div class='del'>-		tail++;		/* skip newline */</div><div class='del'>-	    }</div><div class='del'>-	    warn_print(": ");</div><div class='del'>-	    warn_print2(einfo, len);</div><div class='del'>-	    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='del'>-	    }</div><div class='del'>-	    if (tail &amp;&amp; elen&gt;len+1) {</div><div class='del'>-		warn_print2(tail, elen-len-1);</div><div class='del'>-		if (einfo[elen-1] != '\n') warn_print2("\n", 1);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(errat)) {</div><div class='del'>-	long i;</div><div class='del'>-	struct RArray *ep = RARRAY(errat);</div><div class='del'>-        int truncate = eclass == rb_eSysStackError;</div><div class='del'>-</div><div class='del'>-#define TRACE_MAX (TRACE_HEAD+TRACE_TAIL+5)</div><div class='del'>-#define TRACE_HEAD 8</div><div class='del'>-#define TRACE_TAIL 5</div><div class='del'>-</div><div class='del'>-	ep = RARRAY(errat);</div><div class='del'>-	for (i=1; i&lt;ep-&gt;len; i++) {</div><div class='del'>-	    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='del'>-	    }</div><div class='del'>-	    if (truncate &amp;&amp; i == TRACE_HEAD &amp;&amp; ep-&gt;len &gt; TRACE_MAX) {</div><div class='del'>-		warn_printf("\t ... %ld levels...\n",</div><div class='del'>-			ep-&gt;len - TRACE_HEAD - TRACE_TAIL);</div><div class='del'>-		i = ep-&gt;len - TRACE_TAIL;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='add'>+	fprintf(stderr, "unhandled failure.\n");</div><div class='ctx'>     }</div><div class='del'>-  error:</div><div class='del'>-    POP_TAG();</div><div class='add'>+    rb_trap_exit();</div><div class='add'>+    exit(1);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if defined(__APPLE__)</div><div class='del'>-#define environ (*_NSGetEnviron())</div><div class='del'>-#elif !defined(_WIN32) &amp;&amp; !defined(__MACOS__) || defined(_WIN32_WCE)</div><div class='del'>-extern char **environ;</div><div class='del'>-#endif</div><div class='del'>-char **rb_origenviron;</div><div class='del'>-</div><div class='del'>-void rb_call_inits _((void));</div><div class='del'>-void Init_stack _((VALUE*));</div><div class='del'>-void Init_heap _((void));</div><div class='del'>-void Init_ext _((void));</div><div class='del'>-</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='add'>+static int origargc;</div><div class='add'>+static char **origargv;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-ruby_init()</div><div class='add'>+main(argc, argv)</div><div class='add'>+    int argc;</div><div class='add'>+    char *argv[];</div><div class='ctx'> {</div><div class='del'>-    static int initialized = 0;</div><div class='del'>-    static struct FRAME frame;</div><div class='del'>-    static struct iter iter;</div><div class='ctx'>     int state;</div><div class='ctx'> </div><div class='del'>-    if (initialized)</div><div class='del'>-	return;</div><div class='del'>-    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='del'>-</div><div class='del'>-    ruby_frame = top_frame = &amp;frame;</div><div class='del'>-    ruby_iter = &amp;iter;</div><div class='del'>-</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-    rb_origenviron = 0;</div><div class='del'>-#else</div><div class='del'>-    rb_origenviron = environ;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    Init_stack((void*)&amp;state);</div><div class='del'>-    Init_heap();</div><div class='del'>-    PUSH_SCOPE();</div><div class='del'>-    ruby_scope-&gt;local_vars = 0;</div><div class='del'>-    ruby_scope-&gt;local_tbl  = 0;</div><div class='del'>-    top_scope = ruby_scope;</div><div class='del'>-    /* default visibility is private at toplevel */</div><div class='del'>-    SCOPE_SET(SCOPE_PRIVATE);</div><div class='del'>-</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='add'>+    origargc = argc; origargv = argv;</div><div class='add'>+    Init_stack();</div><div class='add'>+    PUSH_ENV();</div><div class='add'>+    top_env = the_env;</div><div class='add'>+    PUSH_TAG();</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	rb_call_inits();</div><div class='del'>-	ruby_class = rb_cObject;</div><div class='del'>-	ruby_frame-&gt;self = ruby_top_self;</div><div class='del'>-	ruby_top_cref = rb_node_newnode(NODE_CREF,rb_cObject,0,0);</div><div class='del'>-	ruby_cref = ruby_top_cref;</div><div class='del'>-	rb_define_global_const("TOPLEVEL_BINDING", rb_f_binding(ruby_top_self));</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-	_macruby_init();</div><div class='del'>-#elif defined(__VMS)</div><div class='del'>-	_vmsruby_init();</div><div class='del'>-#endif</div><div class='del'>-	ruby_prog_init();</div><div class='del'>-	ALLOW_INTS;</div><div class='add'>+	rb_main(argc, argv);</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='del'>-    POP_SCOPE();</div><div class='del'>-    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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-eval_node(self, node)</div><div class='del'>-    VALUE self;</div><div class='del'>-    NODE *node;</div><div class='del'>-{</div><div class='del'>-    NODE *beg_tree = ruby_eval_tree_begin;</div><div class='del'>-</div><div class='del'>-    ruby_eval_tree_begin = 0;</div><div class='del'>-    if (beg_tree) {</div><div class='del'>-	rb_eval(self, beg_tree);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!node) return Qnil;</div><div class='del'>-    return rb_eval(self, node);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int ruby_in_eval;</div><div class='del'>-</div><div class='del'>-static void rb_thread_cleanup _((void));</div><div class='del'>-static void rb_thread_wait_other_threads _((void));</div><div class='del'>-</div><div class='del'>-static int thread_no_ensure _((void));</div><div class='del'>-</div><div class='del'>-static VALUE exception_error;</div><div class='del'>-static VALUE sysstack_error;</div><div class='ctx'> </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='del'>-static int</div><div class='del'>-error_handle(ex)</div><div class='del'>-    int ex;</div><div class='del'>-{</div><div class='del'>-    int status = EXIT_FAILURE;</div><div class='del'>-    rb_thread_t th = curr_thread;</div><div class='del'>-</div><div class='del'>-    if (rb_thread_set_raised(th))</div><div class='del'>-	return EXIT_FAILURE;</div><div class='del'>-    switch (ex &amp; TAG_MASK) {</div><div class='add'>+    switch (state) {</div><div class='ctx'>       case 0:</div><div class='del'>-	status = EXIT_SUCCESS;</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='ctx'>       case TAG_RETURN:</div><div class='del'>-	error_pos();</div><div class='del'>-	warn_print(": unexpected return\n");</div><div class='add'>+	Fatal("unexpected return");</div><div class='ctx'> 	break;</div><div class='del'>-      case TAG_NEXT:</div><div class='del'>-	error_pos();</div><div class='del'>-	warn_print(": unexpected next\n");</div><div class='add'>+      case TAG_CONTINUE:</div><div class='add'>+	Fatal("unexpected continue");</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_BREAK:</div><div class='del'>-	error_pos();</div><div class='del'>-	warn_print(": unexpected break\n");</div><div class='add'>+	Fatal("unexpected break");</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_REDO:</div><div class='del'>-	error_pos();</div><div class='del'>-	warn_print(": unexpected redo\n");</div><div class='add'>+	Fatal("unexpected redo");</div><div class='ctx'> 	break;</div><div class='ctx'>       case TAG_RETRY:</div><div class='del'>-	error_pos();</div><div class='del'>-	warn_print(": retry outside of rescue clause\n");</div><div class='add'>+	Fatal("retry outside of protect clause");</div><div class='ctx'> 	break;</div><div class='del'>-      case TAG_THROW:</div><div class='del'>-	if (prot_tag &amp;&amp; prot_tag-&gt;frame &amp;&amp; prot_tag-&gt;frame-&gt;node) {</div><div class='del'>-	    NODE *tag = prot_tag-&gt;frame-&gt;node;</div><div class='del'>-	    warn_printf("%s:%d: uncaught throw\n",</div><div class='del'>-		    tag-&gt;nd_file, nd_line(tag));</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    error_pos();</div><div class='del'>-	    warn_printf(": unexpected throw\n");</div><div class='del'>-	}</div><div class='add'>+      case TAG_FAIL:</div><div class='add'>+	PUSH_TAG()</div><div class='add'>+	error_print();</div><div class='add'>+	POP_TAG();</div><div class='ctx'> 	break;</div><div class='del'>-      case TAG_RAISE:</div><div class='del'>-      case TAG_FATAL:</div><div class='del'>-	if (rb_obj_is_kind_of(ruby_errinfo, rb_eSystemExit)) {</div><div class='del'>-	    status = sysexit_status(ruby_errinfo);</div><div class='del'>-	}</div><div class='del'>-	else if (rb_obj_is_instance_of(ruby_errinfo, rb_eSignal)) {</div><div class='del'>-	    /* no message when exiting by signal */</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    error_print();</div><div class='del'>-	}</div><div class='add'>+      case TAG_EXIT:</div><div class='add'>+	rb_trap_exit();</div><div class='add'>+	exit(FIX2UINT(last_val));</div><div class='ctx'> 	break;</div><div class='ctx'>       default:</div><div class='del'>-	rb_bug("Unknown longjmp status %d", ex);</div><div class='add'>+	Bug("Unknown longjmp status %d", state);</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='del'>-    rb_thread_reset_raised(th);</div><div class='del'>-    return status;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-ruby_options(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    char **argv;</div><div class='del'>-{</div><div class='del'>-    int state;</div><div class='del'>-</div><div class='del'>-    Init_stack((void*)&amp;state);</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	ruby_process_options(argc, argv);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	trace_func = 0;</div><div class='del'>-	tracing = 0;</div><div class='del'>-	exit(error_handle(state));</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void rb_exec_end_proc _((void));</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ruby_finalize_0()</div><div class='del'>-{</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    if (EXEC_TAG() == 0) {</div><div class='del'>-	rb_trap_exit();</div><div class='del'>-    }</div><div class='del'>-    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='del'>-    trace_func = 0;</div><div class='del'>-    tracing = 0;</div><div class='del'>-}</div><div class='del'>-</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='del'>-int</div><div class='del'>-ruby_cleanup(ex)</div><div class='del'>-    int ex;</div><div class='del'>-{</div><div class='del'>-    int state;</div><div class='del'>-    volatile VALUE errs[2];</div><div class='del'>-    int nerr;</div><div class='del'>-</div><div class='del'>-    errs[1] = ruby_errinfo;</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'>-    errs[0] = ruby_errinfo;</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    PUSH_ITER(ITER_NOT);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	rb_thread_cleanup();</div><div class='del'>-	rb_thread_wait_other_threads();</div><div class='del'>-    }</div><div class='del'>-    else if (ex == 0) {</div><div class='del'>-	ex = state;</div><div class='del'>-    }</div><div class='del'>-    POP_ITER();</div><div class='del'>-    ruby_errinfo = errs[1];</div><div class='del'>-    ex = error_handle(ex);</div><div class='del'>-    ruby_finalize_1();</div><div class='del'>-    POP_TAG();</div><div class='del'>-</div><div class='del'>-    for (nerr = 0; nerr &lt; sizeof(errs) / sizeof(errs[0]); ++nerr) {</div><div class='del'>-	VALUE err = errs[nerr];</div><div class='del'>-</div><div class='del'>-	if (!RTEST(err)) continue;</div><div class='del'>-</div><div class='del'>-	if (rb_obj_is_kind_of(err, rb_eSystemExit)) {</div><div class='del'>-	    return sysexit_status(err);</div><div class='del'>-	}</div><div class='del'>-	else if (rb_obj_is_kind_of(err, rb_eSignal)) {</div><div class='del'>-	    VALUE sig = rb_iv_get(err, "signo");</div><div class='del'>-	    ruby_default_signal(NUM2INT(sig));</div><div class='del'>-	}</div><div class='del'>-	else if (ex == 0) {</div><div class='del'>-	    ex = 1;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1</div><div class='del'>-    switch (ex) {</div><div class='del'>-#if EXIT_SUCCESS != 0</div><div class='del'>-      case 0: return EXIT_SUCCESS;</div><div class='del'>-#endif</div><div class='del'>-#if EXIT_FAILURE != 1</div><div class='del'>-      case 1: return EXIT_FAILURE;</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return ex;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ruby_exec_internal()</div><div class='del'>-{</div><div class='del'>-    int state;</div><div class='del'>-</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    PUSH_ITER(ITER_NOT);</div><div class='del'>-    /* default visibility is private at toplevel */</div><div class='del'>-    SCOPE_SET(SCOPE_PRIVATE);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	eval_node(ruby_top_self, ruby_eval_tree);</div><div class='del'>-    }</div><div class='del'>-    POP_ITER();</div><div class='del'>-    POP_TAG();</div><div class='del'>-    return state;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-ruby_stop(ex)</div><div class='del'>-    int ex;</div><div class='del'>-{</div><div class='del'>-    exit(ruby_cleanup(ex));</div><div class='del'>-}</div><div class='del'>-</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='del'>-void</div><div class='del'>-ruby_run()</div><div class='del'>-{</div><div class='del'>-    int state;</div><div class='del'>-    static int ex;</div><div class='del'>-</div><div class='del'>-    if (ruby_nerrs &gt; 0) exit(EXIT_FAILURE);</div><div class='del'>-    state = ruby_exec();</div><div class='del'>-    if (state &amp;&amp; !ex) ex = state;</div><div class='del'>-    ruby_stop(ex);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-compile_error(at)</div><div class='del'>-    const char *at;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    ruby_nerrs = 0;</div><div class='del'>-    str = rb_str_buf_new2("compile error");</div><div class='del'>-    if (at) {</div><div class='del'>-	rb_str_buf_cat2(str, " in ");</div><div class='del'>-	rb_str_buf_cat2(str, at);</div><div class='del'>-    }</div><div class='del'>-    rb_str_buf_cat(str, "\n", 1);</div><div class='del'>-    if (!NIL_P(ruby_errinfo)) {</div><div class='del'>-	rb_str_append(str, rb_obj_as_string(ruby_errinfo));</div><div class='del'>-    }</div><div class='del'>-    rb_exc_raise(rb_exc_new3(rb_eSyntaxError, str));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_eval_string(str)</div><div class='del'>-    const char *str;</div><div class='del'>-{</div><div class='del'>-    VALUE v;</div><div class='del'>-    NODE *oldsrc = ruby_current_node;</div><div class='del'>-</div><div class='del'>-    ruby_current_node = 0;</div><div class='del'>-    ruby_sourcefile = rb_source_filename("(eval)");</div><div class='del'>-    v = eval(ruby_top_self, rb_str_new2(str), Qnil, 0, 0);</div><div class='del'>-    ruby_current_node = oldsrc;</div><div class='del'>-</div><div class='del'>-    return v;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_eval_string_protect(str, state)</div><div class='del'>-    const char *str;</div><div class='del'>-    int *state;</div><div class='del'>-{</div><div class='del'>-    return rb_protect((VALUE (*)_((VALUE)))rb_eval_string, (VALUE)str, state);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_eval_string_wrap(str, state)</div><div class='del'>-    const char *str;</div><div class='del'>-    int *state;</div><div class='del'>-{</div><div class='del'>-    int status;</div><div class='del'>-    VALUE self = ruby_top_self;</div><div class='del'>-    VALUE wrapper = ruby_wrapper;</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    PUSH_CLASS(ruby_wrapper = rb_module_new());</div><div class='del'>-    ruby_top_self = rb_obj_clone(ruby_top_self);</div><div class='del'>-    rb_extend_object(ruby_top_self, ruby_wrapper);</div><div class='del'>-    PUSH_FRAME();</div><div class='del'>-    ruby_frame-&gt;last_func = 0;</div><div class='del'>-    ruby_frame-&gt;last_class = 0;</div><div class='del'>-    ruby_frame-&gt;self = self;</div><div class='del'>-    PUSH_CREF(ruby_wrapper);</div><div class='del'>-    PUSH_SCOPE();</div><div class='del'>-</div><div class='del'>-    val = rb_eval_string_protect(str, &amp;status);</div><div class='del'>-    ruby_top_self = self;</div><div class='del'>-</div><div class='del'>-    POP_SCOPE();</div><div class='del'>-    POP_FRAME();</div><div class='del'>-    POP_CLASS();</div><div class='del'>-    ruby_wrapper = wrapper;</div><div class='del'>-    if (state) {</div><div class='del'>-	*state = status;</div><div class='del'>-    }</div><div class='del'>-    else if (status) {</div><div class='del'>-	JUMP_TAG(status);</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-NORETURN(static void localjump_error(const char*, VALUE, int));</div><div class='del'>-static void</div><div class='del'>-localjump_error(mesg, value, reason)</div><div class='del'>-    const char *mesg;</div><div class='del'>-    VALUE value;</div><div class='del'>-    int reason;</div><div class='del'>-{</div><div class='del'>-    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='del'>-    rb_exc_raise(exc);</div><div class='add'>+    POP_ENV();</div><div class='add'>+    exit(0);</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='del'>-static VALUE</div><div class='del'>-localjump_xvalue(exc)</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    return rb_iv_get(exc, "@exit_value");</div><div class='del'>-}</div><div class='add'>+VALUE rb_readonly_hook();</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='add'>+static VALUE Progname;</div><div class='ctx'> </div><div class='ctx'> 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='del'>-static void</div><div class='del'>-jump_tag_but_local_jump(state, val)</div><div class='del'>-    int state;</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-    if (val == Qundef) val = prot_tag-&gt;retval;</div><div class='del'>-    switch (state) {</div><div class='del'>-      case 0:</div><div class='del'>-	break;</div><div class='del'>-      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='del'>-	break;</div><div class='del'>-      case TAG_NEXT:</div><div class='del'>-	localjump_error("unexpected next", val, state);</div><div class='del'>-	break;</div><div class='del'>-      case TAG_REDO:</div><div class='del'>-	localjump_error("unexpected redo", Qnil, state);</div><div class='del'>-	break;</div><div class='del'>-      case TAG_RETRY:</div><div class='del'>-	localjump_error("retry outside of rescue clause", Qnil, state);</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    JUMP_TAG(state);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_eval_cmd(cmd, arg, level)</div><div class='del'>-    VALUE cmd, arg;</div><div class='del'>-    int level;</div><div class='add'>+Eval(toplevel)</div><div class='add'>+    int toplevel;</div><div class='ctx'> {</div><div class='add'>+    VALUE result;</div><div class='add'>+    NODE *tree;</div><div class='ctx'>     int state;</div><div class='del'>-    VALUE val = Qnil;		/* OK */</div><div class='del'>-    struct SCOPE *saved_scope;</div><div class='del'>-    volatile int safe = ruby_safe_level;</div><div class='del'>-</div><div class='del'>-    if (OBJ_TAINTED(cmd)) {</div><div class='del'>-	level = 4;</div><div class='del'>-    }</div><div class='del'>-    if (TYPE(cmd) != T_STRING) {</div><div class='del'>-	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='del'>-	POP_ITER();</div><div class='del'>-	if (state) JUMP_TAG(state);</div><div class='del'>-	return val;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    saved_scope = ruby_scope;</div><div class='del'>-    ruby_scope = top_scope;</div><div class='del'>-    PUSH_FRAME();</div><div class='del'>-    ruby_frame-&gt;last_func = 0;</div><div class='del'>-    ruby_frame-&gt;last_class = 0;</div><div class='del'>-    ruby_frame-&gt;self = ruby_top_self;</div><div class='del'>-    PUSH_CREF(ruby_wrapper ? ruby_wrapper : rb_cObject);</div><div class='ctx'> </div><div class='del'>-    ruby_safe_level = level;</div><div class='add'>+    if (match == Qnil) match = rb_intern("=~");</div><div class='add'>+    if (each == Qnil) each = rb_intern("each");</div><div class='ctx'> </div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='add'>+    tree = eval_tree;</div><div class='add'>+    eval_tree = Qnil;</div><div class='add'>+    PUSH_TAG();</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	val = eval(ruby_top_self, cmd, Qnil, 0, 0);</div><div class='add'>+	result = rb_eval(tree);</div><div class='ctx'>     }</div><div class='del'>-    if (ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE)</div><div class='del'>-	scope_dup(saved_scope);</div><div class='del'>-    ruby_scope = saved_scope;</div><div class='del'>-    ruby_safe_level = safe;</div><div class='ctx'>     POP_TAG();</div><div class='del'>-    POP_FRAME();</div><div class='del'>-</div><div class='del'>-    if (state) jump_tag_but_local_jump(state, val);</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define ruby_cbase (ruby_cref-&gt;nd_clss)</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ev_const_defined(cref, id, self)</div><div class='del'>-    NODE *cref;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    NODE *cbase = cref;</div><div class='del'>-    VALUE result;</div><div class='del'>-</div><div class='del'>-    while (cbase &amp;&amp; cbase-&gt;nd_next) {</div><div class='del'>-	struct RClass *klass = RCLASS(cbase-&gt;nd_clss);</div><div class='del'>-</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='del'>-	}</div><div class='del'>-	cbase = cbase-&gt;nd_next;</div><div class='del'>-    }</div><div class='del'>-    return rb_const_defined(cref-&gt;nd_clss, id);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ev_const_get(cref, id, self)</div><div class='del'>-    NODE *cref;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    NODE *cbase = cref;</div><div class='del'>-    VALUE result;</div><div class='del'>-</div><div class='del'>-    while (cbase &amp;&amp; cbase-&gt;nd_next) {</div><div class='del'>-	VALUE klass = cbase-&gt;nd_clss;</div><div class='del'>-</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='del'>-	}</div><div class='del'>-	cbase = cbase-&gt;nd_next;</div><div class='del'>-    }</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cvar_cbase()</div><div class='del'>-{</div><div class='del'>-    NODE *cref = ruby_cref;</div><div class='del'>-</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='del'>-	cref = cref-&gt;nd_next;</div><div class='del'>-	if (!cref-&gt;nd_next) {</div><div class='del'>-	    rb_warn("class variable access from toplevel singleton method");</div><div class='del'>-	}</div><div class='del'>-    }</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='del'>-    return cref-&gt;nd_clss;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_nesting()</div><div class='del'>-{</div><div class='del'>-    NODE *cbase = ruby_cref;</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='add'>+    /* you don't have to free at toplevel */</div><div class='add'>+    if (!toplevel) freenode(tree);</div><div class='add'>+    if (state) JUMP_TAG(state);</div><div class='ctx'> </div><div class='del'>-    while (cbase &amp;&amp; cbase-&gt;nd_next) {</div><div class='del'>-	if (!NIL_P(cbase-&gt;nd_clss)) rb_ary_push(ary, cbase-&gt;nd_clss);</div><div class='del'>-	cbase = cbase-&gt;nd_next;</div><div class='del'>-    }</div><div class='del'>-    if (ruby_wrapper &amp;&amp; RARRAY(ary)-&gt;len == 0) {</div><div class='del'>-	rb_ary_push(ary, ruby_wrapper);</div><div class='del'>-    }</div><div class='del'>-    return ary;</div><div class='add'>+    return result;</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='del'>-rb_mod_s_constants()</div><div class='del'>-{</div><div class='del'>-    NODE *cbase = ruby_cref;</div><div class='del'>-    void *data = 0;</div><div class='del'>-</div><div class='del'>-    while (cbase) {</div><div class='del'>-	if (!NIL_P(cbase-&gt;nd_clss)) {</div><div class='del'>-	    data = rb_mod_const_at(cbase-&gt;nd_clss, data);</div><div class='del'>-	}</div><div class='del'>-	cbase = cbase-&gt;nd_next;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(ruby_cbase)) {</div><div class='del'>-	data = rb_mod_const_of(ruby_cbase, data);</div><div class='del'>-    }</div><div class='del'>-    return rb_const_list(data);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_frozen_class_p(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    const char *desc = "something(?!)";</div><div class='del'>-</div><div class='del'>-    if (OBJ_FROZEN(klass)) {</div><div class='del'>-	if (FL_TEST(klass, FL_SINGLETON))</div><div class='del'>-	    desc = "object";</div><div class='del'>-	else {</div><div class='del'>-	    switch (TYPE(klass)) {</div><div class='del'>-	      case T_MODULE:</div><div class='del'>-	      case T_ICLASS:</div><div class='del'>-		desc = "module"; break;</div><div class='del'>-	      case T_CLASS:</div><div class='del'>-		desc = "class"; break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	rb_error_frozen(desc);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_undef(klass, id)</div><div class='del'>-    VALUE klass;</div><div class='add'>+set_arg0(val, id)</div><div class='add'>+    VALUE val;</div><div class='ctx'>     ID id;</div><div class='ctx'> {</div><div class='del'>-    VALUE origin;</div><div class='del'>-    NODE *body;</div><div class='add'>+    char *s;</div><div class='add'>+    int i;</div><div class='add'>+    static int len;</div><div class='ctx'> </div><div class='del'>-    if (ruby_cbase == rb_cObject &amp;&amp; klass == rb_cObject) {</div><div class='del'>-	rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-    if (ruby_safe_level &gt;= 4 &amp;&amp; !OBJ_TAINTED(klass)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't undef `%s'", rb_id2name(id));</div><div class='del'>-    }</div><div class='del'>-    rb_frozen_class_p(klass);</div><div class='del'>-    if (id == __id__ || id == __send__ || id == init) {</div><div class='del'>-	rb_warn("undefining `%s' may cause serious problem", rb_id2name(id));</div><div class='del'>-    }</div><div class='del'>-    body = search_method(klass, id, &amp;origin);</div><div class='del'>-    if (!body || !body-&gt;nd_body) {</div><div class='del'>-	const char *s0 = " class";</div><div class='del'>-	VALUE c = klass;</div><div class='del'>-</div><div class='del'>-	if (FL_TEST(c, FL_SINGLETON)) {</div><div class='del'>-	    VALUE obj = rb_iv_get(klass, "__attached__");</div><div class='del'>-</div><div class='del'>-	    switch (TYPE(obj)) {</div><div class='del'>-	      case T_MODULE:</div><div class='del'>-	      case T_CLASS:</div><div class='del'>-		c = obj;</div><div class='del'>-		s0 = "";</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	else if (TYPE(c) == T_MODULE) {</div><div class='del'>-	    s0 = " module";</div><div class='add'>+    Check_Type(val, T_STRING);</div><div class='add'>+    if (len == 0) {</div><div class='add'>+	s = origargv[0];</div><div class='add'>+	s += strlen(s);</div><div class='add'>+	/* See if all the arguments are contiguous in memory */</div><div class='add'>+	for (i = 1; i &lt; origargc; i++) {</div><div class='add'>+	    if (origargv[i] == s + 1)</div><div class='add'>+		s += strlen(++s);	/* this one is ok too */</div><div class='ctx'> 	}</div><div class='del'>-	rb_name_error(id, "undefined method `%s' for%s `%s'",</div><div class='del'>-		      rb_id2name(id),s0,rb_class2name(c));</div><div class='add'>+	len = s - origargv[0];</div><div class='ctx'>     }</div><div class='del'>-    rb_add_method(klass, id, 0, NOEX_PUBLIC);</div><div class='del'>-    if (FL_TEST(klass, FL_SINGLETON)) {</div><div class='del'>-	rb_funcall(rb_iv_get(klass, "__attached__"),</div><div class='del'>-		   singleton_undefined, 1, ID2SYM(id));</div><div class='add'>+    s = RSTRING(val)-&gt;ptr;</div><div class='add'>+    i = RSTRING(val)-&gt;len;</div><div class='add'>+    if (i &gt; len) {</div><div class='add'>+	memcpy(origargv[0], s, len);</div><div class='add'>+	origargv[0][len] = '\0';</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	rb_funcall(klass, undefined, 1, ID2SYM(id));</div><div class='add'>+	memcpy(origargv[0], s, i);</div><div class='add'>+	s = origargv[0]+i;</div><div class='add'>+	*s++ = '\0';</div><div class='add'>+	while (++i &lt; len)</div><div class='add'>+	    *s++ = ' ';</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='add'>+    Progname = str_new2(origargv[0]);</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='add'>+    return val;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_mod_undef_method(argc, argv, mod)</div><div class='add'>+VALUE</div><div class='add'>+TopLevel(script, argc, argv)</div><div class='add'>+    char *script;</div><div class='ctx'>     int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='add'>+    char **argv;</div><div class='ctx'> {</div><div class='ctx'>     int i;</div><div class='ctx'> </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='del'>-    return mod;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_alias(klass, name, def)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    ID name, def;</div><div class='del'>-{</div><div class='del'>-    VALUE origin = 0;</div><div class='del'>-    NODE *orig, *body, *node;</div><div class='del'>-    VALUE singleton = 0;</div><div class='del'>-    st_data_t data;</div><div class='del'>-</div><div class='del'>-    rb_frozen_class_p(klass);</div><div class='del'>-    if (name == def) return;</div><div class='del'>-    if (klass == rb_cObject) {</div><div class='del'>-	rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-    orig = search_method(klass, def, &amp;origin);</div><div class='del'>-    if (!orig || !orig-&gt;nd_body) {</div><div class='del'>-	if (TYPE(klass) == T_MODULE) {</div><div class='del'>-	    orig = search_method(rb_cObject, def, &amp;origin);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!orig || !orig-&gt;nd_body) {</div><div class='del'>-	print_undef(klass, def);</div><div class='del'>-    }</div><div class='del'>-    if (FL_TEST(klass, FL_SINGLETON)) {</div><div class='del'>-	singleton = rb_iv_get(klass, "__attached__");</div><div class='del'>-    }</div><div class='del'>-    body = orig-&gt;nd_body;</div><div class='del'>-    orig-&gt;nd_cnt++;</div><div class='del'>-    if (nd_type(body) == NODE_FBODY) { /* was alias */</div><div class='del'>-	def = body-&gt;nd_mid;</div><div class='del'>-	origin = body-&gt;nd_orig;</div><div class='del'>-	body = body-&gt;nd_head;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_clear_cache_by_id(name);</div><div class='del'>-    if (RTEST(ruby_verbose) &amp;&amp; st_lookup(RCLASS(klass)-&gt;m_tbl, name, &amp;data)) {</div><div class='del'>-	node = (NODE *)data;</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='del'>-    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='del'>-</div><div class='del'>-    if (!ruby_running) return;</div><div class='del'>-</div><div class='del'>-    if (singleton) {</div><div class='del'>-	rb_funcall(singleton, singleton_added, 1, ID2SYM(name));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_funcall(klass, added, 1, ID2SYM(name));</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'>- *     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='add'>+    the_class = (struct RClass*)C_Object;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_mod_alias_method(mod, newname, oldname)</div><div class='del'>-    VALUE mod, newname, oldname;</div><div class='del'>-{</div><div class='del'>-    rb_alias(mod, rb_to_id(newname), rb_to_id(oldname));</div><div class='del'>-    return mod;</div><div class='del'>-}</div><div class='add'>+    rb_define_variable("$!", &amp;errstr, Qnil, Qnil);</div><div class='add'>+    errat = Qnil;		/* clear for execution */</div><div class='ctx'> </div><div class='del'>-NODE *</div><div class='del'>-rb_copy_node_scope(node, rval)</div><div class='del'>-    NODE *node;</div><div class='del'>-    NODE *rval;</div><div class='del'>-{</div><div class='del'>-    NODE *copy = NEW_NODE(NODE_SCOPE,0,rval,node-&gt;nd_next);</div><div class='add'>+    Progname = str_new2(script);</div><div class='add'>+    rb_define_variable("$0", &amp;Progname, Qnil, set_arg0);</div><div class='ctx'> </div><div class='del'>-    if (node-&gt;nd_tbl) {</div><div class='del'>-	copy-&gt;nd_tbl = ALLOC_N(ID, node-&gt;nd_tbl[0]+1);</div><div class='del'>-	MEMCPY(copy-&gt;nd_tbl, node-&gt;nd_tbl, ID, node-&gt;nd_tbl[0]+1);</div><div class='add'>+    rb_define_variable("$ARGV", &amp;Argv, Qnil, Qnil);</div><div class='add'>+    rb_define_variable("$*", &amp;Argv, Qnil, Qnil);</div><div class='add'>+    Argv = ary_new2(argc);</div><div class='add'>+    for (i=0; i &lt; argc; i++) {</div><div class='add'>+	Fary_push(Argv, str_new2(argv[i]));</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	copy-&gt;nd_tbl = 0;</div><div class='del'>-    }</div><div class='del'>-    return copy;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef C_ALLOCA</div><div class='del'>-# define TMP_PROTECT NODE * volatile tmp__protect_tmp=0</div><div class='del'>-# 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='del'>-     (void*)tmp__protect_tmp-&gt;nd_head)</div><div class='add'>+#define PURIFY_D</div><div class='add'>+#ifdef PURIFY_D</div><div class='add'>+    return Eval(0);</div><div class='ctx'> #else</div><div class='del'>-# define TMP_PROTECT typedef int foobazzz</div><div class='del'>-# define TMP_ALLOC(n) ALLOCA_N(VALUE,n)</div><div class='add'>+    return Eval(1);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='del'>-#define SETUP_ARGS0(anode,extra) do {\</div><div class='del'>-    NODE *n = anode;\</div><div class='del'>-    if (!n) {\</div><div class='del'>-	argc = 0;\</div><div class='del'>-	argv = 0;\</div><div class='del'>-    }\</div><div class='del'>-    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='del'>-	    n = anode;\</div><div class='del'>-	    argv = TMP_ALLOC(argc+extra);\</div><div class='del'>-	    for (i=0;i&lt;argc;i++) {\</div><div class='del'>-		argv[i] = rb_eval(self,n-&gt;nd_head);\</div><div class='del'>-		n=n-&gt;nd_next;\</div><div class='del'>-	    }\</div><div class='del'>-	}\</div><div class='del'>-	else {\</div><div class='del'>-	    argc = 0;\</div><div class='del'>-	    argv = 0;\</div><div class='del'>-	}\</div><div class='del'>-    }\</div><div class='del'>-    else {\</div><div class='del'>-	VALUE args = rb_eval(self,n);\</div><div class='del'>-	if (TYPE(args) != T_ARRAY)\</div><div class='del'>-	    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='del'>-	MEMCPY(argv, RARRAY(args)-&gt;ptr, VALUE, argc);\</div><div class='del'>-    }\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define SETUP_ARGS(anode) SETUP_ARGS0(anode,0)</div><div class='del'>-</div><div class='del'>-#define BEGIN_CALLARGS do {\</div><div class='del'>-    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'>-	if (ruby_block) ruby_block = ruby_block-&gt;outer;\</div><div class='del'>-      case ITER_PAS:\</div><div class='del'>-	tmp_iter = ITER_NOT;\</div><div class='del'>-    }\</div><div class='del'>-    PUSH_ITER(tmp_iter)</div><div class='del'>-</div><div class='del'>-#define END_CALLARGS \</div><div class='del'>-    ruby_block = tmp_block;\</div><div class='del'>-    POP_ITER();\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define MATCH_DATA *rb_svar(node-&gt;nd_cnt)</div><div class='del'>-</div><div class='del'>-static const char* is_defined _((VALUE, NODE*, char*));</div><div class='del'>-</div><div class='del'>-static const char*</div><div class='del'>-arg_defined(self, node, buf, type)</div><div class='del'>-    VALUE self;</div><div class='del'>-    NODE *node;</div><div class='del'>-    char *buf;</div><div class='del'>-    char *type;</div><div class='del'>-{</div><div class='del'>-    int argc;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    if (!node) return type;	/* no args */</div><div class='del'>-    if (nd_type(node) == NODE_ARRAY) {</div><div class='del'>-	argc=node-&gt;nd_alen;</div><div class='del'>-	if (argc &gt; 0) {</div><div class='del'>-	    for (i=0;i&lt;argc;i++) {</div><div class='del'>-		if (!is_defined(self, node-&gt;nd_head, buf))</div><div class='del'>-		    return 0;</div><div class='del'>-		node = node-&gt;nd_next;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else if (!is_defined(self, node, buf)) {</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static const char*</div><div class='del'>-is_defined(self, node, buf)</div><div class='del'>-    VALUE self;</div><div class='del'>-    NODE *node;			/* OK */</div><div class='del'>-    char *buf;</div><div class='del'>-{</div><div class='del'>-    VALUE val;			/* OK */</div><div class='del'>-    int state;</div><div class='del'>-</div><div class='del'>-  again:</div><div class='del'>-    if (!node) return "expression";</div><div class='del'>-    switch (nd_type(node)) {</div><div class='del'>-      case NODE_SUPER:</div><div class='del'>-      case NODE_ZSUPER:</div><div class='del'>-	if (ruby_frame-&gt;last_func == 0) return 0;</div><div class='del'>-	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='del'>-	    if (nd_type(node) == NODE_SUPER) {</div><div class='del'>-		return arg_defined(self, node-&gt;nd_args, buf, "super");</div><div class='del'>-	    }</div><div class='del'>-	    return "super";</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_VCALL:</div><div class='del'>-      case NODE_FCALL:</div><div class='del'>-	val = self;</div><div class='del'>-	goto check_bound;</div><div class='del'>-</div><div class='del'>-      case NODE_ATTRASGN:</div><div class='del'>-	val = self;</div><div class='del'>-	if (node-&gt;nd_recv == (NODE *)1) goto check_bound;</div><div class='del'>-      case NODE_CALL:</div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    val = rb_eval(self, node-&gt;nd_recv);</div><div class='del'>-	}</div><div class='del'>-	POP_TAG();</div><div class='del'>-	if (state) {</div><div class='del'>-	    ruby_errinfo = Qnil;</div><div class='del'>-	    return 0;</div><div class='del'>-	}</div><div class='del'>-      check_bound:</div><div class='del'>-	{</div><div class='del'>-	    int call = nd_type(node)==NODE_CALL;</div><div class='del'>-</div><div class='del'>-	    val = CLASS_OF(val);</div><div class='del'>-	    if (call) {</div><div class='del'>-		int noex;</div><div class='del'>-		ID id = node-&gt;nd_mid;</div><div class='del'>-</div><div class='del'>-		if (!rb_get_method_body(&amp;val, &amp;id, &amp;noex))</div><div class='del'>-		    break;</div><div class='del'>-		if ((noex &amp; NOEX_PRIVATE))</div><div class='del'>-		    break;</div><div class='del'>-		if ((noex &amp; NOEX_PROTECTED) &amp;&amp;</div><div class='del'>-		    !rb_obj_is_kind_of(self, rb_class_real(val)))</div><div class='del'>-		    break;</div><div class='del'>-	    }</div><div class='del'>-	    else if (!rb_method_boundp(val, node-&gt;nd_mid, call))</div><div class='del'>-		break;</div><div class='del'>-	    return arg_defined(self, node-&gt;nd_args, buf,</div><div class='del'>-			       nd_type(node) == NODE_ATTRASGN ?</div><div class='del'>-			       "assignment" : "method");</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_MATCH2:</div><div class='del'>-      case NODE_MATCH3:</div><div class='del'>-	return "method";</div><div class='del'>-</div><div class='del'>-      case NODE_YIELD:</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    return "yield";</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_SELF:</div><div class='del'>-	return "self";</div><div class='del'>-</div><div class='del'>-      case NODE_NIL:</div><div class='del'>-	return "nil";</div><div class='del'>-</div><div class='del'>-      case NODE_TRUE:</div><div class='del'>-	return "true";</div><div class='del'>-</div><div class='del'>-      case NODE_FALSE:</div><div class='del'>-	return "false";</div><div class='del'>-</div><div class='del'>-      case NODE_ATTRSET:</div><div class='del'>-      case NODE_OP_ASGN1:</div><div class='del'>-      case NODE_OP_ASGN2:</div><div class='del'>-      case NODE_OP_ASGN_OR:</div><div class='del'>-      case NODE_OP_ASGN_AND:</div><div class='del'>-      case NODE_MASGN:</div><div class='del'>-      case NODE_LASGN:</div><div class='del'>-      case NODE_DASGN:</div><div class='del'>-      case NODE_DASGN_CURR:</div><div class='del'>-      case NODE_GASGN:</div><div class='del'>-      case NODE_IASGN:</div><div class='del'>-      case NODE_CDECL:</div><div class='del'>-      case NODE_CVDECL:</div><div class='del'>-      case NODE_CVASGN:</div><div class='del'>-	return "assignment";</div><div class='del'>-</div><div class='del'>-      case NODE_LVAR:</div><div class='del'>-	return "local-variable";</div><div class='del'>-      case NODE_DVAR:</div><div class='del'>-	return "local-variable(in-block)";</div><div class='del'>-</div><div class='del'>-      case NODE_GVAR:</div><div class='del'>-	if (rb_gvar_defined(node-&gt;nd_entry)) {</div><div class='del'>-	    return "global-variable";</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_IVAR:</div><div class='del'>-	if (rb_ivar_defined(self, node-&gt;nd_vid)) {</div><div class='del'>-	    return "instance-variable";</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_CONST:</div><div class='del'>-	if (ev_const_defined(ruby_cref, node-&gt;nd_vid, self)) {</div><div class='del'>-	    return "constant";</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_CVAR:</div><div class='del'>-	if (rb_cvar_defined(cvar_cbase(), node-&gt;nd_vid)) {</div><div class='del'>-	    return "class variable";</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_COLON2:</div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    val = rb_eval(self, node-&gt;nd_head);</div><div class='del'>-	}</div><div class='del'>-	POP_TAG();</div><div class='del'>-	if (state) {</div><div class='del'>-	    ruby_errinfo = Qnil;</div><div class='del'>-	    return 0;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    switch (TYPE(val)) {</div><div class='del'>-	      case T_CLASS:</div><div class='del'>-	      case T_MODULE:</div><div class='del'>-		if (rb_const_defined_from(val, node-&gt;nd_mid))</div><div class='del'>-		    return "constant";</div><div class='del'>-		break;</div><div class='del'>-	      default:</div><div class='del'>-		if (rb_method_boundp(CLASS_OF(val), node-&gt;nd_mid, 1)) {</div><div class='del'>-		    return "method";</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'>-      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='del'>-      case NODE_NTH_REF:</div><div class='del'>-	if (RTEST(rb_reg_nth_defined(node-&gt;nd_nth, MATCH_DATA))) {</div><div class='del'>-	    sprintf(buf, "$%d", (int)node-&gt;nd_nth);</div><div class='del'>-	    return buf;</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_BACK_REF:</div><div class='del'>-	if (RTEST(rb_reg_nth_defined(0, MATCH_DATA))) {</div><div class='del'>-	    sprintf(buf, "$%c", (char)node-&gt;nd_nth);</div><div class='del'>-	    return buf;</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_NEWLINE:</div><div class='del'>-	node = node-&gt;nd_next;</div><div class='del'>-	goto again;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    rb_eval(self, node);</div><div class='del'>-	}</div><div class='del'>-	POP_TAG();</div><div class='del'>-	if (!state) {</div><div class='del'>-	    return "expression";</div><div class='del'>-	}</div><div class='del'>-	ruby_errinfo = Qnil;</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int handle_rescue _((VALUE,NODE*));</div><div class='del'>-</div><div class='del'>-static void blk_free();</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_obj_is_proc(proc)</div><div class='del'>-    VALUE proc;</div><div class='del'>-{</div><div class='del'>-    if (TYPE(proc) == T_DATA &amp;&amp; RDATA(proc)-&gt;dfree == (RUBY_DATA_FUNC)blk_free) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> 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'>+rb_trap_eval(cmd)</div><div class='add'>+    VALUE cmd;</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='del'>-}</div><div class='add'>+    PUSH_ENV();</div><div class='add'>+    the_env-&gt;self = TopSelf;</div><div class='add'>+    the_env-&gt;current_module = top_env-&gt;current_module;</div><div class='add'>+    the_env-&gt;local_vars = top_env-&gt;local_vars;</div><div class='add'>+    the_env-&gt;local_tbl = top_env-&gt;local_tbl;</div><div class='add'>+    the_class = (struct RClass*)C_Object;</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='add'>+    Feval(Qself, cmd);</div><div class='add'>+    POP_ENV();</div><div class='ctx'> }</div><div class='ctx'> </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='del'>-static VALUE</div><div class='del'>-set_trace_func(obj, trace)</div><div class='del'>-    VALUE obj, trace;</div><div class='add'>+static int</div><div class='add'>+setup_arg_1(node, args)</div><div class='add'>+    NODE *node;</div><div class='add'>+    VALUE *args;</div><div class='ctx'> {</div><div class='del'>-    rb_event_hook_t *hook;</div><div class='add'>+    int argc;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (NIL_P(trace)) {</div><div class='del'>-	trace_func = 0;</div><div class='del'>-	rb_remove_event_hook(call_trace_func);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    if (!rb_obj_is_proc(trace)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "trace_func needs to be Proc");</div><div class='add'>+    if (node-&gt;type == NODE_ARRAY) {</div><div class='add'>+	for (argc=0; node; node=node-&gt;nd_next) argc++;</div><div class='add'>+	argc++;</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 const 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='add'>+    else {</div><div class='add'>+	*args = rb_eval(node);</div><div class='add'>+	if (TYPE(*args) != T_ARRAY)</div><div class='add'>+	    Fail("*`argument' must be array");</div><div class='add'>+	argc = RARRAY(*args)-&gt;len + 1;</div><div class='ctx'>     }</div><div class='add'>+    return argc;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-call_trace_func(event, node, self, id, klass)</div><div class='del'>-    rb_event_t event;</div><div class='add'>+setup_arg_2(node, args, argc, argv)</div><div class='ctx'>     NODE *node;</div><div class='del'>-    VALUE self;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE klass;		/* OK */</div><div class='del'>-{</div><div class='del'>-    int state, raised;</div><div class='del'>-    struct FRAME *prev;</div><div class='del'>-    NODE *node_save;</div><div class='del'>-    VALUE srcfile;</div><div class='del'>-    const char *event_name;</div><div class='del'>-    rb_thread_t th = curr_thread;</div><div class='del'>-</div><div class='del'>-    if (!trace_func) return;</div><div class='del'>-    if (tracing) return;</div><div class='del'>-    if (ruby_in_compile) return;</div><div class='del'>-    if (id == ID_ALLOCATOR) return;</div><div class='del'>-</div><div class='del'>-    if (!(node_save = ruby_current_node)) {</div><div class='del'>-	node_save = NEW_NEWLINE(0);</div><div class='del'>-    }</div><div class='del'>-    tracing = 1;</div><div class='del'>-    prev = ruby_frame;</div><div class='del'>-    PUSH_FRAME();</div><div class='del'>-    *ruby_frame = *prev;</div><div class='del'>-    ruby_frame-&gt;prev = prev;</div><div class='del'>-    ruby_frame-&gt;iter = 0;	/* blocks not available anyway */</div><div class='del'>-</div><div class='del'>-    if (node) {</div><div class='del'>-	ruby_current_node = node;</div><div class='del'>-	ruby_frame-&gt;node = node;</div><div class='del'>-	ruby_sourcefile = node-&gt;nd_file;</div><div class='del'>-	ruby_sourceline = nd_line(node);</div><div class='del'>-    }</div><div class='del'>-    if (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='del'>-	else if (FL_TEST(klass, FL_SINGLETON)) {</div><div class='del'>-	    klass = rb_iv_get(klass, "__attached__");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    raised = rb_thread_reset_raised(th);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	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='del'>-					    srcfile,</div><div class='del'>-					    INT2FIX(ruby_sourceline),</div><div class='del'>-					    id?ID2SYM(id):Qnil,</div><div class='del'>-					    self?rb_f_binding(self):Qnil,</div><div class='del'>-					    klass),</div><div class='del'>-		    Qundef, 0);</div><div class='del'>-    }</div><div class='del'>-    if (raised) rb_thread_set_raised(th);</div><div class='del'>-    POP_TAG();</div><div class='del'>-    POP_FRAME();</div><div class='del'>-</div><div class='del'>-    tracing = 0;</div><div class='del'>-    ruby_current_node = node_save;</div><div class='del'>-    SET_CURRENT_SOURCE();</div><div class='del'>-    if (state) JUMP_TAG(state);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-avalue_to_svalue(v)</div><div class='del'>-    VALUE v;</div><div class='add'>+    VALUE args;</div><div class='add'>+    int argc;</div><div class='add'>+    VALUE *argv;</div><div class='ctx'> {</div><div class='del'>-    VALUE tmp, top;</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-    tmp = rb_check_array_type(v);</div><div class='del'>-    if (NIL_P(tmp)) {</div><div class='del'>-	return v;</div><div class='del'>-    }</div><div class='del'>-    if (RARRAY(tmp)-&gt;len == 0) {</div><div class='del'>-	return Qundef;</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)) {</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='add'>+    bzero(argv, sizeof(VALUE)*argc);</div><div class='add'>+    if (node-&gt;type == NODE_ARRAY) {</div><div class='add'>+	for (i=1;node;node=node-&gt;nd_next) {</div><div class='add'>+	    argv[i++] = rb_eval(node-&gt;nd_head);</div><div class='ctx'> 	}</div><div class='del'>-	return top;</div><div class='ctx'>     }</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_avalue(v)</div><div class='del'>-    VALUE v;</div><div class='del'>-{</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='add'>+    else {</div><div class='add'>+	for (i=1;i&lt;argc;i++) {</div><div class='add'>+	    argv[i] = RARRAY(args)-&gt;ptr[i-1];</div><div class='ctx'> 	}</div><div class='del'>-	return rb_ary_new3(1, v);</div><div class='ctx'>     }</div><div class='del'>-    return tmp;</div><div class='ctx'> }</div><div class='ctx'> </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='del'>-    VALUE tmp;</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'>-    /* 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='del'>-    }</div><div class='del'>-    return tmp;</div><div class='add'>+#define SETUP_ARGS {\</div><div class='add'>+    VALUE args = Qnil;\</div><div class='add'>+    argc = setup_arg_1(node-&gt;nd_args, &amp;args);\</div><div class='add'>+    argv = (VALUE*)alloca(sizeof(VALUE)*argc);\</div><div class='add'>+    setup_arg_2(node-&gt;nd_args, args, argc, argv);\</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='add'>+rb_eval(node)</div><div class='add'>+    register NODE *node;</div><div class='ctx'> {</div><div class='del'>-    VALUE tmp = rb_check_array_type(val);</div><div class='add'>+    int state;</div><div class='add'>+    int go_out = 0;</div><div class='add'>+    VALUE result;</div><div class='ctx'> </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='add'>+    &amp;go_out;</div><div class='add'>+  again:</div><div class='add'>+    if (node == Qnil) return Qnil;</div><div class='ctx'> </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='add'>+    sourceline = node-&gt;line;</div><div class='add'>+    sourcefile = node-&gt;src;</div><div class='ctx'> </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='add'>+#ifdef SAFE_SIGHANDLE</div><div class='add'>+    {</div><div class='add'>+	extern int trap_pending;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-class_prefix(self, cpath)</div><div class='del'>-    VALUE self;</div><div class='del'>-    NODE *cpath;</div><div class='del'>-{</div><div class='del'>-    if (!cpath) {</div><div class='del'>-	rb_bug("class path missing");</div><div class='del'>-    }</div><div class='del'>-    if (cpath-&gt;nd_head) {</div><div class='del'>-	VALUE c = rb_eval(self, cpath-&gt;nd_head);</div><div class='del'>-	switch (TYPE(c)) {</div><div class='del'>-	  case T_CLASS:</div><div class='del'>-	  case T_MODULE:</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(c))-&gt;ptr);</div><div class='add'>+	if (trap_pending) {</div><div class='add'>+	    rb_trap_exec();</div><div class='ctx'> 	}</div><div class='del'>-	return c;</div><div class='del'>-    }</div><div class='del'>-    else if (nd_type(cpath) == NODE_COLON2) {</div><div class='del'>-	return ruby_cbase;</div><div class='del'>-    }</div><div class='del'>-    else if (ruby_wrapper) {</div><div class='del'>-	return ruby_wrapper;</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	return rb_cObject;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define return_value(v) do {\</div><div class='del'>-  if ((prot_tag-&gt;retval = (v)) == Qundef) {\</div><div class='del'>-    prot_tag-&gt;retval = Qnil;\</div><div class='del'>-  }\</div><div class='del'>-} while (0)</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_eval(self, n)</div><div class='del'>-    VALUE self;</div><div class='del'>-    NODE *n;</div><div class='del'>-{</div><div class='del'>-    NODE * volatile contnode = 0;</div><div class='del'>-    NODE * volatile node = n;</div><div class='del'>-    int state;</div><div class='del'>-    volatile VALUE result = Qnil;</div><div class='del'>-    st_data_t data;</div><div class='del'>-</div><div class='del'>-#define RETURN(v) do { \</div><div class='del'>-    result = (v); \</div><div class='del'>-    goto finish; \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-  again:</div><div class='del'>-    if (!node) RETURN(Qnil);</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='del'>-    ruby_current_node = node;</div><div class='del'>-    switch (nd_type(node)) {</div><div class='add'>+    switch (node-&gt;type) {</div><div class='ctx'>       case NODE_BLOCK:</div><div class='del'>-	if (contnode) {</div><div class='del'>-	    result = rb_eval(self, node);</div><div class='del'>-	    break;</div><div class='add'>+	while (node-&gt;nd_next) {</div><div class='add'>+	    rb_eval(node-&gt;nd_head);</div><div class='add'>+	    node = node-&gt;nd_next;</div><div class='ctx'> 	}</div><div class='del'>-	contnode = node-&gt;nd_next;</div><div class='ctx'> 	node = node-&gt;nd_head;</div><div class='ctx'> 	goto again;</div><div class='ctx'> </div><div class='del'>-      case NODE_POSTEXE:</div><div class='del'>-	rb_f_END();</div><div class='del'>-	nd_set_type(node, NODE_NIL); /* exec just once */</div><div class='del'>-	result = Qnil;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-	/* begin .. end without clauses */</div><div class='del'>-      case NODE_BEGIN:</div><div class='del'>-	node = node-&gt;nd_body;</div><div class='del'>-	goto again;</div><div class='del'>-</div><div class='del'>-	/* nodes for speed-up(default match) */</div><div class='del'>-      case NODE_MATCH:</div><div class='del'>-	result = rb_reg_match2(node-&gt;nd_lit);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-	/* nodes for speed-up(literal match) */</div><div class='del'>-      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='del'>-	break;</div><div class='del'>-</div><div class='del'>-	/* nodes for speed-up(literal match) */</div><div class='del'>-      case NODE_MATCH3:</div><div class='del'>-	{</div><div class='del'>-	    VALUE r = rb_eval(self,node-&gt;nd_recv);</div><div class='del'>-	    VALUE l = rb_eval(self,node-&gt;nd_value);</div><div class='del'>-	    if (TYPE(l) == T_STRING) {</div><div class='del'>-		result = rb_reg_match(r, l);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		result = rb_funcall(l, match, 1, r);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-	/* node for speed-up(top-level loop for -n/-p) */</div><div class='del'>-      case NODE_OPT_N:</div><div class='del'>-	PUSH_TAG(PROT_LOOP);</div><div class='del'>-	switch (state = EXEC_TAG()) {</div><div class='del'>-	  case 0:</div><div class='del'>-	  opt_n_next:</div><div class='del'>-	    while (!NIL_P(rb_gets())) {</div><div class='del'>-	      opt_n_redo:</div><div class='del'>-		rb_eval(self, node-&gt;nd_body);</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-</div><div class='del'>-	  case TAG_REDO:</div><div class='del'>-	    state = 0;</div><div class='del'>-	    goto opt_n_redo;</div><div class='del'>-	  case TAG_NEXT:</div><div class='del'>-	    state = 0;</div><div class='del'>-	    goto opt_n_next;</div><div class='del'>-	  case TAG_BREAK:</div><div class='del'>-	    state = 0;</div><div class='del'>-	  default:</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	POP_TAG();</div><div class='del'>-	if (state) JUMP_TAG(state);</div><div class='del'>-	RETURN(Qnil);</div><div class='del'>-</div><div class='ctx'>       case NODE_SELF:</div><div class='del'>-	RETURN(self);</div><div class='add'>+	return Qself;</div><div class='ctx'> </div><div class='ctx'>       case NODE_NIL:</div><div class='del'>-	RETURN(Qnil);</div><div class='del'>-</div><div class='del'>-      case NODE_TRUE:</div><div class='del'>-	RETURN(Qtrue);</div><div class='del'>-</div><div class='del'>-      case NODE_FALSE:</div><div class='del'>-	RETURN(Qfalse);</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case NODE_IF:</div><div class='del'>-	if (RTEST(rb_eval(self, node-&gt;nd_cond))) {</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 (rb_eval(node-&gt;nd_cond)) {</div><div class='ctx'> 	    node = node-&gt;nd_body;</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</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='ctx'> 	    node = node-&gt;nd_else;</div><div class='ctx'> 	}</div><div class='del'>-	goto again;</div><div class='add'>+	if (node) goto again;</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='del'>-      case NODE_WHEN:</div><div class='del'>-	while (node) {</div><div class='del'>-	    NODE *tag;</div><div class='del'>-</div><div class='del'>-	    if (nd_type(node) != NODE_WHEN) goto again;</div><div class='del'>-	    tag = node-&gt;nd_head;</div><div class='del'>-	    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='del'>-		    VALUE v = rb_eval(self, tag-&gt;nd_head-&gt;nd_head);</div><div class='del'>-		    long i;</div><div class='del'>-</div><div class='del'>-		    if (TYPE(v) != T_ARRAY) v = rb_ary_to_ary(v);</div><div class='del'>-		    for (i=0; i&lt;RARRAY(v)-&gt;len; i++) {</div><div class='del'>-			if (RTEST(RARRAY(v)-&gt;ptr[i])) {</div><div class='del'>-			    node = node-&gt;nd_body;</div><div class='del'>-			    goto again;</div><div class='del'>-			}</div><div class='del'>-		    }</div><div class='del'>-		    tag = tag-&gt;nd_next;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-		if (RTEST(rb_eval(self, tag-&gt;nd_head))) {</div><div class='del'>-		    node = node-&gt;nd_body;</div><div class='del'>-		    goto again;</div><div class='del'>-		}</div><div class='del'>-		tag = tag-&gt;nd_next;</div><div class='add'>+      case NODE_UNLESS:</div><div class='add'>+	{</div><div class='add'>+	    VALUE res;</div><div class='add'>+</div><div class='add'>+	    PUSH_TAG();</div><div class='add'>+	    if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+		res = rb_eval(node-&gt;nd_cond);</div><div class='ctx'> 	    }</div><div class='del'>-	    node = node-&gt;nd_next;</div><div class='add'>+	    POP_TAG();</div><div class='add'>+	    if (state == 0)</div><div class='add'>+		;</div><div class='add'>+	    else if (state == TAG_FAIL) { </div><div class='add'>+		res = Qnil;</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='add'>+		JUMP_TAG(state);</div><div class='add'>+	    }</div><div class='add'>+</div><div class='add'>+	    if (res == Qnil) {</div><div class='add'>+		node = node-&gt;nd_body;</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='add'>+		node = node-&gt;nd_else;</div><div class='add'>+	    }</div><div class='add'>+	    if (node) goto again;</div><div class='add'>+	    return res;</div><div class='ctx'> 	}</div><div class='del'>-	RETURN(Qnil);</div><div class='ctx'> </div><div class='ctx'>       case NODE_CASE:</div><div class='ctx'> 	{</div><div class='ctx'> 	    VALUE val;</div><div class='ctx'> </div><div class='del'>-	    val = rb_eval(self, node-&gt;nd_head);</div><div class='add'>+	    val = rb_eval(node-&gt;nd_head);</div><div class='ctx'> 	    node = node-&gt;nd_body;</div><div class='ctx'> 	    while (node) {</div><div class='del'>-		NODE *tag;</div><div class='add'>+		if (node-&gt;type == NODE_WHEN) {</div><div class='add'>+		    NODE *tag = node-&gt;nd_head;</div><div class='ctx'> </div><div class='del'>-		if (nd_type(node) != NODE_WHEN) {</div><div class='del'>-		    goto again;</div><div class='del'>-		}</div><div class='del'>-		tag = node-&gt;nd_head;</div><div class='del'>-		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='del'>-			VALUE v = rb_eval(self, tag-&gt;nd_head-&gt;nd_head);</div><div class='del'>-			long i;</div><div class='del'>-</div><div class='del'>-			if (TYPE(v) != T_ARRAY) v = rb_ary_to_ary(v);</div><div class='del'>-			for (i=0; i&lt;RARRAY(v)-&gt;len; i++) {</div><div class='del'>-			    if (RTEST(rb_funcall2(RARRAY(v)-&gt;ptr[i], eqq, 1, &amp;val))){</div><div class='del'>-				node = node-&gt;nd_body;</div><div class='del'>-				goto again;</div><div class='del'>-			    }</div><div class='add'>+		    while (tag) {</div><div class='add'>+			if (rb_funcall(rb_eval(tag-&gt;nd_head), match, 1, val)){</div><div class='add'>+			    return rb_eval(node-&gt;nd_body);</div><div class='ctx'> 			}</div><div class='ctx'> 			tag = tag-&gt;nd_next;</div><div class='del'>-			continue;</div><div class='del'>-		    }</div><div class='del'>-		    if (RTEST(rb_funcall2(rb_eval(self, tag-&gt;nd_head), eqq, 1, &amp;val))) {</div><div class='del'>-			node = node-&gt;nd_body;</div><div class='del'>-			goto again;</div><div class='ctx'> 		    }</div><div class='del'>-		    tag = tag-&gt;nd_next;</div><div class='add'>+		}</div><div class='add'>+		else {</div><div class='add'>+		    return rb_eval(node);</div><div class='ctx'> 		}</div><div class='ctx'> 		node = node-&gt;nd_next;</div><div class='del'>-	    }</div><div class='add'>+	    }	</div><div class='ctx'> 	}</div><div class='del'>-	RETURN(Qnil);</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case NODE_WHILE:</div><div class='del'>-	PUSH_TAG(PROT_LOOP);</div><div class='del'>-	result = Qnil;</div><div class='add'>+	PUSH_TAG();</div><div class='ctx'> 	switch (state = EXEC_TAG()) {</div><div class='ctx'> 	  case 0:</div><div class='del'>-	    if (node-&gt;nd_state &amp;&amp; !RTEST(rb_eval(self, node-&gt;nd_cond)))</div><div class='del'>-		goto while_out;</div><div class='del'>-	    do {</div><div class='add'>+	  while_cont:</div><div class='add'>+	    while (rb_eval(node-&gt;nd_cond)) {</div><div class='ctx'> 	      while_redo:</div><div class='del'>-		rb_eval(self, node-&gt;nd_body);</div><div class='del'>-	      while_next:</div><div class='del'>-		;</div><div class='del'>-	    } while (RTEST(rb_eval(self, node-&gt;nd_cond)));</div><div class='add'>+		rb_eval(node-&gt;nd_body);</div><div class='add'>+	    }</div><div class='ctx'> 	    break;</div><div class='del'>-</div><div class='ctx'> 	  case TAG_REDO:</div><div class='del'>-	    state = 0;</div><div class='ctx'> 	    goto while_redo;</div><div class='del'>-	  case TAG_NEXT:</div><div class='del'>-	    state = 0;</div><div class='del'>-	    goto while_next;</div><div class='del'>-	  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'>+	  case TAG_CONTINUE:</div><div class='add'>+	    goto while_cont;</div><div class='ctx'> 	  default:</div><div class='add'>+	    go_out++;</div><div class='add'>+	  case TAG_BREAK:</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='ctx'>       while_out:</div><div class='ctx'> 	POP_TAG();</div><div class='del'>-	if (state) JUMP_TAG(state);</div><div class='del'>-	RETURN(result);</div><div class='add'>+	if (go_out) JUMP_TAG(state);</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case NODE_UNTIL:</div><div class='del'>-	PUSH_TAG(PROT_LOOP);</div><div class='del'>-	result = Qnil;</div><div class='del'>-	switch (state = EXEC_TAG()) {</div><div class='del'>-	  case 0:</div><div class='del'>-	    if (node-&gt;nd_state &amp;&amp; RTEST(rb_eval(self, node-&gt;nd_cond)))</div><div class='del'>-		goto until_out;</div><div class='del'>-	    do {</div><div class='del'>-	      until_redo:</div><div class='del'>-		rb_eval(self, node-&gt;nd_body);</div><div class='del'>-	      until_next:</div><div class='del'>-		;</div><div class='del'>-	    } while (!RTEST(rb_eval(self, node-&gt;nd_cond)));</div><div class='del'>-	    break;</div><div class='add'>+	for (;;) {</div><div class='add'>+	    VALUE res;</div><div class='ctx'> </div><div class='del'>-	  case TAG_REDO:</div><div class='del'>-	    state = 0;</div><div class='del'>-	    goto until_redo;</div><div class='del'>-	  case TAG_NEXT:</div><div class='del'>-	    state = 0;</div><div class='del'>-	    goto until_next;</div><div class='del'>-	  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='add'>+	    PUSH_TAG();</div><div class='add'>+	    switch (state = EXEC_TAG()) {</div><div class='add'>+	      case 0:</div><div class='add'>+		res = rb_eval(node-&gt;nd_cond);</div><div class='add'>+		break;</div><div class='add'>+</div><div class='add'>+	      case TAG_FAIL:</div><div class='add'>+		res = Qnil;</div><div class='add'>+		break;</div><div class='add'>+</div><div class='add'>+	      default:</div><div class='add'>+		go_out++;</div><div class='ctx'> 	    }</div><div class='del'>-	    /* fall through */</div><div class='del'>-	  default:</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-      until_out:</div><div class='del'>-	POP_TAG();</div><div class='del'>-	if (state) JUMP_TAG(state);</div><div class='del'>-	RETURN(result);</div><div class='add'>+	    POP_TAG();</div><div class='add'>+	    if (go_out) JUMP_TAG(state);</div><div class='add'>+	    if (res) return res;</div><div class='ctx'> </div><div class='del'>-      case NODE_BLOCK_PASS:</div><div class='del'>-	result = block_pass(self, node);</div><div class='add'>+	    PUSH_TAG();</div><div class='add'>+	    switch (state = EXEC_TAG()) {</div><div class='add'>+	      case 0:</div><div class='add'>+	      until_redo:</div><div class='add'>+		rb_eval(node-&gt;nd_body);</div><div class='add'>+		break;</div><div class='add'>+	      case TAG_REDO:</div><div class='add'>+		goto until_redo;</div><div class='add'>+	      case TAG_CONTINUE:</div><div class='add'>+		break;</div><div class='add'>+	      case TAG_BREAK:</div><div class='add'>+		goto until_break;</div><div class='add'>+	      default:</div><div class='add'>+		go_out++;</div><div class='add'>+	    }</div><div class='add'>+	    POP_TAG();</div><div class='add'>+	    if (go_out) JUMP_TAG(state);</div><div class='add'>+	}</div><div class='add'>+      until_break:</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_ITER:</div><div class='add'>+      case NODE_DO:</div><div class='ctx'>       case NODE_FOR:</div><div class='ctx'> 	{</div><div class='del'>-	    PUSH_TAG(PROT_LOOP);</div><div class='del'>-	    PUSH_BLOCK(node-&gt;nd_var, node-&gt;nd_body);</div><div class='add'>+	    struct BLOCK block;</div><div class='add'>+</div><div class='add'>+	    PUSH_ENV();</div><div class='add'>+	    SET_BLOCK(block, node);</div><div class='add'>+	    PUSH_TAG();</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='del'>-		PUSH_ITER(ITER_PRE);</div><div class='del'>-		if (nd_type(node) == NODE_ITER) {</div><div class='del'>-		    result = rb_eval(self, node-&gt;nd_iter);</div><div class='add'>+		if (node-&gt;type == NODE_DO) {</div><div class='add'>+		    the_env-&gt;iterator = 1;</div><div class='add'>+		    rb_eval(node-&gt;nd_iter);</div><div class='ctx'> 		}</div><div class='ctx'> 		else {</div><div class='ctx'> 		    VALUE recv;</div><div class='ctx'> </div><div class='del'>-		    _block.flags &amp;= ~BLOCK_D_SCOPE;</div><div class='del'>-		    BEGIN_CALLARGS;</div><div class='del'>-		    recv = rb_eval(self, node-&gt;nd_iter);</div><div class='del'>-		    END_CALLARGS;</div><div class='del'>-		    ruby_current_node = node;</div><div class='del'>-		    SET_CURRENT_SOURCE();</div><div class='del'>-		    result = rb_call(CLASS_OF(recv),recv,each,0,0,0,self);</div><div class='add'>+		    recv = rb_eval(node-&gt;nd_iter);</div><div class='add'>+		    the_env-&gt;iterator = 1;</div><div class='add'>+		    result = rb_call(CLASS_OF(recv), recv, each, 1, Qnil, 0);</div><div class='ctx'> 		}</div><div class='del'>-		POP_ITER();</div><div class='del'>-	    }</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='ctx'> 	    }</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='del'>-	    }</div><div class='del'>-	    POP_BLOCK();</div><div class='ctx'> 	    POP_TAG();</div><div class='add'>+	    POP_ENV();</div><div class='ctx'> 	    switch (state) {</div><div class='ctx'> 	      case 0:</div><div class='ctx'> 		break;</div><div class='add'>+	      case IN_BLOCK|TAG_BREAK:</div><div class='add'>+		if (target_level != tag_level) {</div><div class='add'>+		    JUMP_TAG(state);</div><div class='add'>+		}</div><div class='add'>+		result = Qnil;</div><div class='add'>+		break;</div><div class='add'>+	      case IN_BLOCK|TAG_RETURN:</div><div class='add'>+		if (target_level == tag_level) {</div><div class='add'>+		    state = TAG_RETURN;</div><div class='add'>+		}</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'> 	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_BREAK:</div><div class='del'>-	break_jump(rb_eval(self, node-&gt;nd_stts));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_NEXT:</div><div class='del'>-	CHECK_INTS;</div><div class='del'>-	next_jump(rb_eval(self, node-&gt;nd_stts));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_REDO:</div><div class='del'>-	CHECK_INTS;</div><div class='del'>-	JUMP_TAG(TAG_REDO);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_RETRY:</div><div class='del'>-	CHECK_INTS;</div><div class='del'>-	JUMP_TAG(TAG_RETRY);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_SPLAT:</div><div class='del'>-	result = splat_value(rb_eval(self, node-&gt;nd_head));</div><div class='del'>-	break;</div><div class='del'>-</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='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_SVALUE:</div><div class='del'>-	result = avalue_splat(rb_eval(self, node-&gt;nd_head));</div><div class='del'>-	if (result == Qundef) result = Qnil;</div><div class='del'>-	break;</div><div class='add'>+	return result;</div><div class='ctx'> </div><div class='ctx'>       case NODE_YIELD:</div><div class='del'>-	if (node-&gt;nd_head) {</div><div class='del'>-	    result = rb_eval(self, node-&gt;nd_head);</div><div class='del'>-	    ruby_current_node = node;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    result = Qundef;	/* no arg */</div><div class='add'>+	{</div><div class='add'>+	    VALUE val;</div><div class='add'>+</div><div class='add'>+	    val = rb_eval(node-&gt;nd_stts);</div><div class='add'>+	    result = rb_yield(val);</div><div class='ctx'> 	}</div><div class='del'>-	SET_CURRENT_SOURCE();</div><div class='del'>-	result = rb_yield_0(result, 0, 0, 0, node-&gt;nd_state);</div><div class='del'>-	break;</div><div class='add'>+	return result;</div><div class='ctx'> </div><div class='del'>-      case NODE_RESCUE:</div><div class='del'>-	{</div><div class='del'>-	    volatile VALUE e_info = ruby_errinfo;</div><div class='del'>-	    volatile int rescuing = 0;</div><div class='add'>+      case NODE_PROT:</div><div class='add'>+	PUSH_TAG();</div><div class='add'>+	switch (state = EXEC_TAG()) {</div><div class='add'>+	  case 0:</div><div class='add'>+	  retry_entry:</div><div class='add'>+	    result = rb_eval(node-&gt;nd_head);</div><div class='add'>+	    break;</div><div class='ctx'> </div><div class='del'>-	    PUSH_TAG(PROT_NONE);</div><div class='del'>-	    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	      retry_entry:</div><div class='del'>-		result = rb_eval(self, node-&gt;nd_head);</div><div class='del'>-	    }</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='add'>+	  case TAG_FAIL:</div><div class='add'>+	    if (node-&gt;nd_resq) {</div><div class='add'>+		if (node-&gt;nd_resq == (NODE*)1) {</div><div class='add'>+		    state = 0;</div><div class='ctx'> 		}</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='del'>-</div><div class='del'>-		rescuing = -1;</div><div class='del'>-		while (resq) {</div><div class='del'>-		    ruby_current_node = resq;</div><div class='del'>-		    if (handle_rescue(self, resq)) {</div><div class='del'>-			state = 0;</div><div class='del'>-			rescuing = 1;</div><div class='del'>-			result = rb_eval(self, resq-&gt;nd_body);</div><div class='del'>-			break;</div><div class='add'>+		else {</div><div class='add'>+		    PUSH_TAG();</div><div class='add'>+		    state = EXEC_TAG();</div><div class='add'>+		    if (state == 0) result = rb_eval(node-&gt;nd_resq);</div><div class='add'>+		    POP_TAG();</div><div class='add'>+		    if (state == TAG_RETRY) {</div><div class='add'>+			goto retry_entry;</div><div class='ctx'> 		    }</div><div class='del'>-		    resq = resq-&gt;nd_head; /* next rescue */</div><div class='add'>+		}</div><div class='add'>+		if (state == 0) {</div><div class='add'>+		    errstr = errat = Qnil;</div><div class='add'>+		    last_func = 0;</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='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_ENSURE:</div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    result = rb_eval(self, node-&gt;nd_head);</div><div class='add'>+	    break;</div><div class='ctx'> 	}</div><div class='ctx'> 	POP_TAG();</div><div class='del'>-	if (node-&gt;nd_ensr &amp;&amp; !thread_no_ensure()) {</div><div class='del'>-	    VALUE retval = prot_tag-&gt;retval; /* save retval */</div><div class='del'>-	    VALUE errinfo = ruby_errinfo;</div><div class='ctx'> </div><div class='del'>-	    rb_eval(self, node-&gt;nd_ensr);</div><div class='del'>-	    return_value(retval);</div><div class='del'>-	    ruby_errinfo = errinfo;</div><div class='add'>+	/* ensure clause */</div><div class='add'>+	rb_eval(node-&gt;nd_ensr);</div><div class='add'>+</div><div class='add'>+	if (state != 0) {</div><div class='add'>+	    JUMP_TAG(state);</div><div class='ctx'> 	}</div><div class='del'>-	if (state) JUMP_TAG(state);</div><div class='del'>-	break;</div><div class='add'>+	return result;</div><div class='ctx'> </div><div class='ctx'>       case NODE_AND:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_1st);</div><div class='del'>-	if (!RTEST(result)) break;</div><div class='add'>+	if ((result = rb_eval(node-&gt;nd_1st)) == Qnil) return result;</div><div class='ctx'> 	node = node-&gt;nd_2nd;</div><div class='ctx'> 	goto again;</div><div class='ctx'> </div><div class='ctx'>       case NODE_OR:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_1st);</div><div class='del'>-	if (RTEST(result)) break;</div><div class='add'>+	if ((result = rb_eval(node-&gt;nd_1st)) != Qnil) return result;</div><div class='ctx'> 	node = node-&gt;nd_2nd;</div><div class='ctx'> 	goto again;</div><div class='ctx'> </div><div class='del'>-      case NODE_NOT:</div><div class='del'>-	if (RTEST(rb_eval(self, node-&gt;nd_body))) result = Qfalse;</div><div class='del'>-	else result = Qtrue;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      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='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_FLIP2:		/* like AWK */</div><div class='del'>-	{</div><div class='del'>-	    VALUE *flip = rb_svar(node-&gt;nd_cnt);</div><div class='del'>-	    if (!flip) rb_bug("unexpected local variable");</div><div class='del'>-	    if (!RTEST(*flip)) {</div><div class='del'>-		if (RTEST(rb_eval(self, node-&gt;nd_beg))) {</div><div class='del'>-		    *flip = RTEST(rb_eval(self, node-&gt;nd_end))?Qfalse:Qtrue;</div><div class='del'>-		    result = Qtrue;</div><div class='del'>-		}</div><div class='del'>-		else {</div><div class='del'>-		    result = Qfalse;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		if (RTEST(rb_eval(self, node-&gt;nd_end))) {</div><div class='del'>-		    *flip = Qfalse;</div><div class='del'>-		}</div><div class='del'>-		result = Qtrue;</div><div class='add'>+	if (node-&gt;nd_state == 0) {</div><div class='add'>+	    if (rb_eval(node-&gt;nd_beg)) {</div><div class='add'>+		node-&gt;nd_state = 1;</div><div class='add'>+		return TRUE;</div><div class='ctx'> 	    }</div><div class='add'>+	    return FALSE;</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_FLIP3:		/* like SED */</div><div class='del'>-	{</div><div class='del'>-	    VALUE *flip = rb_svar(node-&gt;nd_cnt);</div><div class='del'>-	    if (!flip) rb_bug("unexpected local variable");</div><div class='del'>-	    if (!RTEST(*flip)) {</div><div class='del'>-		result = RTEST(rb_eval(self, node-&gt;nd_beg)) ? Qtrue : Qfalse;</div><div class='del'>-		*flip = result;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		if (RTEST(rb_eval(self, node-&gt;nd_end))) {</div><div class='del'>-		    *flip = Qfalse;</div><div class='del'>-		}</div><div class='del'>-		result = Qtrue;</div><div class='add'>+	else {</div><div class='add'>+	    if (rb_eval(node-&gt;nd_end)) {</div><div class='add'>+		node-&gt;nd_state = 0;</div><div class='ctx'> 	    }</div><div class='add'>+	    return TRUE;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_RETURN:</div><div class='del'>-	return_jump(rb_eval(self, node-&gt;nd_stts));</div><div class='add'>+      case NODE_BREAK:</div><div class='add'>+	JUMP_TAG(TAG_BREAK);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      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'>+      case NODE_CONTINUE:</div><div class='add'>+	JUMP_TAG(TAG_CONTINUE);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      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'>+      case NODE_RETRY:</div><div class='add'>+	JUMP_TAG(TAG_RETRY);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_ATTRASGN:</div><div class='del'>-	{</div><div class='del'>-	    VALUE recv;</div><div class='del'>-	    int argc; VALUE *argv; /* used in SETUP_ARGS */</div><div class='del'>-	    int scope;</div><div class='del'>-	    TMP_PROTECT;</div><div class='del'>-</div><div class='del'>-	    BEGIN_CALLARGS;</div><div class='del'>-	    if (node-&gt;nd_recv == (NODE *)1) {</div><div class='del'>-		recv = self;</div><div class='del'>-		scope = 1;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		recv = rb_eval(self, node-&gt;nd_recv);</div><div class='del'>-		scope = 0;</div><div class='del'>-	    }</div><div class='del'>-	    SETUP_ARGS(node-&gt;nd_args);</div><div class='del'>-	    END_CALLARGS;</div><div class='del'>-</div><div class='del'>-	    ruby_current_node = node;</div><div class='del'>-	    SET_CURRENT_SOURCE();</div><div class='del'>-	    rb_call(CLASS_OF(recv),recv,node-&gt;nd_mid,argc,argv,scope,self);</div><div class='del'>-	    result = argv[argc-1];</div><div class='del'>-	}</div><div class='add'>+      case NODE_RETURN:</div><div class='add'>+	if (node-&gt;nd_stts) last_val = rb_eval(node-&gt;nd_stts);</div><div class='add'>+	JUMP_TAG(TAG_RETURN);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_CALL:</div><div class='add'>+      case NODE_CALL2:</div><div class='ctx'> 	{</div><div class='del'>-	    VALUE recv;</div><div class='del'>-	    int argc; VALUE *argv; /* used in SETUP_ARGS */</div><div class='del'>-	    TMP_PROTECT;</div><div class='del'>-</div><div class='del'>-	    BEGIN_CALLARGS;</div><div class='del'>-	    recv = rb_eval(self, node-&gt;nd_recv);</div><div class='del'>-	    SETUP_ARGS(node-&gt;nd_args);</div><div class='del'>-	    END_CALLARGS;</div><div class='del'>-</div><div class='del'>-	    ruby_current_node = node;</div><div class='del'>-	    SET_CURRENT_SOURCE();</div><div class='del'>-	    result = rb_call(CLASS_OF(recv),recv,node-&gt;nd_mid,argc,argv,0,self);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_FCALL:</div><div class='del'>-	{</div><div class='del'>-	    int argc; VALUE *argv; /* used in SETUP_ARGS */</div><div class='del'>-	    TMP_PROTECT;</div><div class='add'>+	    VALUE recv, *argv;</div><div class='add'>+	    int argc, last_iter;</div><div class='ctx'> </div><div class='del'>-	    BEGIN_CALLARGS;</div><div class='del'>-	    SETUP_ARGS(node-&gt;nd_args);</div><div class='del'>-	    END_CALLARGS;</div><div class='add'>+	    last_iter = the_env-&gt;iterator;</div><div class='add'>+	    the_env-&gt;iterator = 0;         /* recv &amp; args are not iter. */</div><div class='add'>+	    recv = node-&gt;nd_recv?rb_eval(node-&gt;nd_recv):Qself;</div><div class='add'>+	    if (node-&gt;nd_args) {</div><div class='add'>+		SETUP_ARGS;</div><div class='add'>+	    }</div><div class='add'>+	    else {</div><div class='add'>+		argc = 1;</div><div class='add'>+		argv = &amp;recv;</div><div class='add'>+	    }</div><div class='add'>+	    the_env-&gt;iterator = last_iter; /* restore iter. level */</div><div class='ctx'> </div><div class='del'>-	    ruby_current_node = node;</div><div class='del'>-	    SET_CURRENT_SOURCE();</div><div class='del'>-	    result = rb_call(CLASS_OF(self),self,node-&gt;nd_mid,argc,argv,1,self);</div><div class='add'>+	    return rb_call(CLASS_OF(recv),recv,node-&gt;nd_mid,argc,argv);</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_VCALL:</div><div class='del'>-	SET_CURRENT_SOURCE();</div><div class='del'>-	result = rb_call(CLASS_OF(self),self,node-&gt;nd_mid,0,0,2,self);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='ctx'>       case NODE_SUPER:</div><div class='ctx'>       case NODE_ZSUPER:</div><div class='ctx'> 	{</div><div class='del'>-	    int argc; VALUE *argv; /* used in SETUP_ARGS */</div><div class='del'>-	    TMP_PROTECT;</div><div class='del'>-</div><div class='del'>-	    if (ruby_frame-&gt;last_class == 0) {</div><div class='del'>-		if (ruby_frame-&gt;last_func) {</div><div class='del'>-		    rb_name_error(ruby_frame-&gt;last_func,</div><div class='del'>-				  "superclass method `%s' disabled",</div><div class='del'>-				  rb_id2name(ruby_frame-&gt;orig_func));</div><div class='del'>-		}</div><div class='del'>-		else {</div><div class='del'>-		    rb_raise(rb_eNoMethodError, "super called outside of method");</div><div class='del'>-		}</div><div class='add'>+	    int last_iter;</div><div class='add'>+	    int i, argc;</div><div class='add'>+	    VALUE *argv;</div><div class='add'>+</div><div class='add'>+	    last_iter = the_env-&gt;iterator; /* recv &amp; args are not iter. */</div><div class='add'>+	    the_env-&gt;iterator = 0;</div><div class='add'>+</div><div class='add'>+	    if (node-&gt;nd_args) {</div><div class='add'>+		SETUP_ARGS;</div><div class='ctx'> 	    }</div><div class='del'>-	    if (nd_type(node) == NODE_ZSUPER) {</div><div class='del'>-		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 if (!ruby_scope-&gt;local_vars) {</div><div class='del'>-		    argc = 0;</div><div class='del'>-		    argv = 0;</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'>+	    else if (node-&gt;type == NODE_ZSUPER) {</div><div class='add'>+		argc = the_env-&gt;argc;</div><div class='add'>+		argv = the_env-&gt;argv;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='del'>-		BEGIN_CALLARGS;</div><div class='del'>-		SETUP_ARGS(node-&gt;nd_args);</div><div class='del'>-		END_CALLARGS;</div><div class='del'>-		ruby_current_node = node;</div><div class='add'>+		argc = 1;</div><div class='add'>+		argv = Qnil;</div><div class='ctx'> 	    }</div><div class='ctx'> </div><div class='del'>-	    SET_CURRENT_SOURCE();</div><div class='del'>-	    result = rb_call_super(argc, argv);</div><div class='add'>+	    /* restore iter. level */</div><div class='add'>+	    switch (last_iter) {</div><div class='add'>+	      case 1:		/* SUPER called as iter. */</div><div class='add'>+	      case 2:		/* iter. called SUPER */</div><div class='add'>+		the_env-&gt;iterator = 1;</div><div class='add'>+		break;</div><div class='add'>+	      default:		/* otherwise SUPER is not iter. */</div><div class='add'>+		break;</div><div class='add'>+	    }</div><div class='add'>+</div><div class='add'>+	    result = rb_call(the_env-&gt;last_class-&gt;super, Qself,</div><div class='add'>+			     the_env-&gt;last_func, argc, argv, Qnil);</div><div class='add'>+	    the_env-&gt;iterator = last_iter;</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='add'>+	return result;</div><div class='ctx'> </div><div class='ctx'>       case NODE_SCOPE:</div><div class='ctx'> 	{</div><div class='del'>-	    struct FRAME frame;</div><div class='del'>-	    NODE *saved_cref = 0;</div><div class='del'>-</div><div class='del'>-	    frame = *ruby_frame;</div><div class='del'>-	    frame.tmp = ruby_frame;</div><div class='del'>-	    ruby_frame = &amp;frame;</div><div class='del'>-</div><div class='del'>-	    PUSH_SCOPE();</div><div class='del'>-	    PUSH_TAG(PROT_NONE);</div><div class='del'>-	    if (node-&gt;nd_rval) {</div><div class='del'>-		saved_cref = ruby_cref;</div><div class='del'>-		ruby_cref = (NODE*)node-&gt;nd_rval;</div><div class='del'>-	    }</div><div class='del'>-	    if (node-&gt;nd_tbl) {</div><div class='del'>-		VALUE *vars = ALLOCA_N(VALUE, node-&gt;nd_tbl[0]+1);</div><div class='del'>-		*vars++ = (VALUE)node;</div><div class='del'>-		ruby_scope-&gt;local_vars = vars;</div><div class='del'>-		rb_mem_clear(ruby_scope-&gt;local_vars, node-&gt;nd_tbl[0]);</div><div class='del'>-		ruby_scope-&gt;local_tbl = node-&gt;nd_tbl;</div><div class='add'>+	    VALUE result;</div><div class='add'>+</div><div class='add'>+	    PUSH_ENV();</div><div class='add'>+	    PUSH_TAG();</div><div class='add'>+	    if (node-&gt;nd_cnt &gt; 0) {</div><div class='add'>+		the_env-&gt;local_vars = ALLOC_N(VALUE, node-&gt;nd_cnt);</div><div class='add'>+		bzero(the_env-&gt;local_vars, sizeof(VALUE)*node-&gt;nd_cnt);</div><div class='add'>+		the_env-&gt;local_tbl = node-&gt;nd_tbl;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='del'>-		ruby_scope-&gt;local_vars = 0;</div><div class='del'>-		ruby_scope-&gt;local_tbl  = 0;</div><div class='add'>+		the_env-&gt;local_vars = Qnil;</div><div class='add'>+		the_env-&gt;local_tbl = Qnil;</div><div class='ctx'> 	    }</div><div class='ctx'> 	    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-		result = rb_eval(self, node-&gt;nd_next);</div><div class='add'>+		result = rb_eval(node-&gt;nd_body);</div><div class='ctx'> 	    }</div><div class='ctx'> 	    POP_TAG();</div><div class='del'>-	    POP_SCOPE();</div><div class='del'>-	    ruby_frame = frame.tmp;</div><div class='del'>-	    if (saved_cref)</div><div class='del'>-		ruby_cref = saved_cref;</div><div class='del'>-	    if (state) JUMP_TAG(state);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='add'>+	    if (the_env-&gt;local_vars) free(the_env-&gt;local_vars);</div><div class='add'>+	    POP_ENV();</div><div class='add'>+	    if (state != 0) JUMP_TAG(state);</div><div class='ctx'> </div><div class='del'>-      case NODE_OP_ASGN1:</div><div class='del'>-	{</div><div class='del'>-	    int argc; VALUE *argv; /* used in SETUP_ARGS */</div><div class='del'>-	    VALUE recv, val, tmp;</div><div class='del'>-	    NODE *rval;</div><div class='del'>-	    TMP_PROTECT;</div><div class='del'>-</div><div class='del'>-	    recv = rb_eval(self, node-&gt;nd_recv);</div><div class='del'>-	    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='del'>-	    switch (node-&gt;nd_mid) {</div><div class='del'>-	    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='del'>-	    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='del'>-	    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='del'>-	    }</div><div class='del'>-	    argv[argc] = val;</div><div class='del'>-	    rb_funcall2(recv, aset, argc+1, argv);</div><div class='del'>-	    result = val;</div><div class='add'>+	    return result;</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_OP_ASGN2:</div><div class='add'>+      case NODE_MASGN:</div><div class='ctx'> 	{</div><div class='del'>-	    ID id = node-&gt;nd_next-&gt;nd_vid;</div><div class='del'>-	    VALUE recv, val, tmp;</div><div class='del'>-</div><div class='del'>-	    recv = rb_eval(self, node-&gt;nd_recv);</div><div class='del'>-	    val = rb_funcall3(recv, id, 0, 0);</div><div class='del'>-	    switch (node-&gt;nd_next-&gt;nd_mid) {</div><div class='del'>-	    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='del'>-	    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='del'>-	    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='del'>-	    }</div><div class='add'>+	    VALUE val = rb_eval(node-&gt;nd_value);</div><div class='add'>+	    NODE *list = node-&gt;nd_head;</div><div class='add'>+	    int i, len;</div><div class='ctx'> </div><div class='del'>-	    rb_funcall2(recv, node-&gt;nd_next-&gt;nd_aid, 1, &amp;val);</div><div class='del'>-	    result = val;</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_OP_ASGN_AND:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_head);</div><div class='del'>-	if (!RTEST(result)) break;</div><div class='del'>-	node = node-&gt;nd_value;</div><div class='del'>-	goto again;</div><div class='del'>-</div><div class='del'>-      case NODE_OP_ASGN_OR:</div><div class='del'>-	if ((node-&gt;nd_aid &amp;&amp; !is_defined(self, node-&gt;nd_head, 0)) ||</div><div class='del'>-	    !RTEST(result = rb_eval(self, node-&gt;nd_head))) {</div><div class='del'>-	    node = node-&gt;nd_value;</div><div class='del'>-	    goto again;</div><div class='add'>+	    if (TYPE(val) != T_ARRAY) {</div><div class='add'>+		val = rb_funcall(val, rb_intern("to_a"), 0, Qnil);</div><div class='add'>+		if (TYPE(val) != T_ARRAY) {</div><div class='add'>+		    Bug("to_a did not return Array");</div><div class='add'>+		}</div><div class='add'>+	    }</div><div class='add'>+	    len = RARRAY(val)-&gt;len;</div><div class='add'>+	    for (i=0; list &amp;&amp; i&lt;len; i++) {</div><div class='add'>+		asign(list-&gt;nd_head, RARRAY(val)-&gt;ptr[i]);</div><div class='add'>+		list = list-&gt;nd_next;</div><div class='add'>+	    }</div><div class='add'>+	    while (list) {</div><div class='add'>+		asign(list-&gt;nd_head, Qnil);</div><div class='add'>+		list = list-&gt;nd_next;</div><div class='add'>+	    }</div><div class='add'>+	    return val;</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_MASGN:</div><div class='del'>-	result = massign(self, node, rb_eval(self, node-&gt;nd_value), 0);</div><div class='del'>-	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_LASGN:</div><div class='del'>-	if (ruby_scope-&gt;local_vars == 0)</div><div class='del'>-	    rb_bug("unexpected local variable assignment");</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	ruby_scope-&gt;local_vars[node-&gt;nd_cnt] = result;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_DASGN:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	dvar_asgn(node-&gt;nd_vid, result);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_DASGN_CURR:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	dvar_asgn_curr(node-&gt;nd_vid, result);</div><div class='del'>-	break;</div><div class='add'>+	if (the_env-&gt;local_vars == Qnil)</div><div class='add'>+	    Bug("unexpected local variable asignment");</div><div class='add'>+	return the_env-&gt;local_vars[node-&gt;nd_cnt] = rb_eval(node-&gt;nd_value);</div><div class='ctx'> </div><div class='ctx'>       case NODE_GASGN:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	rb_gvar_set(node-&gt;nd_entry, result);</div><div class='del'>-	break;</div><div class='add'>+	{</div><div class='add'>+	    VALUE val;</div><div class='ctx'> </div><div class='add'>+	    val = rb_eval(node-&gt;nd_value);</div><div class='add'>+	    rb_gvar_set(node-&gt;nd_entry, val);</div><div class='add'>+	    return val;</div><div class='add'>+	}</div><div class='ctx'>       case NODE_IASGN:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	rb_ivar_set(self, node-&gt;nd_vid, result);</div><div class='del'>-	break;</div><div class='add'>+	{</div><div class='add'>+	    VALUE val;</div><div class='ctx'> </div><div class='del'>-      case NODE_CDECL:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	if (node-&gt;nd_vid == 0) {</div><div class='del'>-	    rb_const_set(class_prefix(self, node-&gt;nd_else), node-&gt;nd_else-&gt;nd_mid, result);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_const_set(ruby_cbase, node-&gt;nd_vid, result);</div><div class='add'>+	    val = rb_eval(node-&gt;nd_value);</div><div class='add'>+	    rb_ivar_set(node-&gt;nd_vid, val);</div><div class='add'>+	    return val;</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='add'>+      case NODE_CASGN:</div><div class='add'>+	{</div><div class='add'>+	    VALUE val;</div><div class='ctx'> </div><div class='del'>-      case NODE_CVDECL:</div><div class='del'>-	if (NIL_P(ruby_cbase)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "no class/module to define class variable");</div><div class='add'>+	    val = rb_eval(node-&gt;nd_value);</div><div class='add'>+	    rb_const_set(node-&gt;nd_vid, val);</div><div class='add'>+	    return val;</div><div class='ctx'> 	}</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	rb_cvar_set(cvar_cbase(), node-&gt;nd_vid, result, Qtrue);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_CVASGN:</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_value);</div><div class='del'>-	rb_cvar_set(cvar_cbase(), node-&gt;nd_vid, result, Qfalse);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_LVAR:</div><div class='del'>-	if (ruby_scope-&gt;local_vars == 0) {</div><div class='del'>-	    rb_bug("unexpected local variable");</div><div class='del'>-	}</div><div class='del'>-	result = ruby_scope-&gt;local_vars[node-&gt;nd_cnt];</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_DVAR:</div><div class='del'>-	result = rb_dvar_ref(node-&gt;nd_vid);</div><div class='del'>-	break;</div><div class='add'>+	if (the_env-&gt;local_vars == Qnil)</div><div class='add'>+	    Bug("unexpected local variable");</div><div class='add'>+	return the_env-&gt;local_vars[node-&gt;nd_cnt];</div><div class='ctx'> </div><div class='ctx'>       case NODE_GVAR:</div><div class='del'>-	result = rb_gvar_get(node-&gt;nd_entry);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='add'>+	return rb_gvar_get(node-&gt;nd_entry);</div><div class='ctx'>       case NODE_IVAR:</div><div class='del'>-	result = rb_ivar_get(self, node-&gt;nd_vid);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_CONST:</div><div class='del'>-	result = ev_const_get(ruby_cref, node-&gt;nd_vid, self);</div><div class='del'>-	break;</div><div class='add'>+	return rb_ivar_get(node-&gt;nd_vid);</div><div class='add'>+      case NODE_MVAR:</div><div class='add'>+	return rb_mvar_get(node-&gt;nd_vid);</div><div class='ctx'> </div><div class='ctx'>       case NODE_CVAR:</div><div class='del'>-	result = rb_cvar_get(cvar_cbase(), node-&gt;nd_vid);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_BLOCK_ARG:</div><div class='del'>-	if (ruby_scope-&gt;local_vars == 0)</div><div class='del'>-	    rb_bug("unexpected block argument");</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    result = rb_block_proc();</div><div class='del'>-	    ruby_scope-&gt;local_vars[node-&gt;nd_cnt] = result;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    result = Qnil;</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_COLON2:</div><div class='ctx'> 	{</div><div class='del'>-	    VALUE klass;</div><div class='del'>-</div><div class='del'>-	    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='del'>-		result = rb_funcall(klass, node-&gt;nd_mid, 0, 0);</div><div class='del'>-	    }</div><div class='add'>+	    VALUE val = rb_const_get(node-&gt;nd_vid);</div><div class='add'>+	    node-&gt;type = NODE_CONST;</div><div class='add'>+	    node-&gt;nd_cval = val;</div><div class='add'>+	    return val;</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_COLON3:</div><div class='del'>-	result = rb_const_get_from(rb_cObject, node-&gt;nd_mid);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_NTH_REF:</div><div class='del'>-	result = rb_reg_nth_match(node-&gt;nd_nth, MATCH_DATA);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_BACK_REF:</div><div class='del'>-	switch (node-&gt;nd_nth) {</div><div class='del'>-	  case '&amp;':</div><div class='del'>-	    result = rb_reg_last_match(MATCH_DATA);</div><div class='del'>-	    break;</div><div class='del'>-	  case '`':</div><div class='del'>-	    result = rb_reg_match_pre(MATCH_DATA);</div><div class='del'>-	    break;</div><div class='del'>-	  case '\'':</div><div class='del'>-	    result = rb_reg_match_post(MATCH_DATA);</div><div class='del'>-	    break;</div><div class='del'>-	  case '+':</div><div class='del'>-	    result = rb_reg_match_last(MATCH_DATA);</div><div class='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    rb_bug("unexpected back-ref");</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='add'>+      case NODE_CONST:</div><div class='add'>+	return node-&gt;nd_cval;</div><div class='ctx'> </div><div class='ctx'>       case NODE_HASH:</div><div class='ctx'> 	{</div><div class='add'>+	    extern VALUE C_Dict;</div><div class='add'>+	    extern VALUE Fdic_new();</div><div class='ctx'> 	    NODE *list;</div><div class='del'>-	    VALUE hash = rb_hash_new();</div><div class='add'>+</div><div class='add'>+	    VALUE hash = Fdic_new(C_Dict);</div><div class='ctx'> 	    VALUE key, val;</div><div class='ctx'> </div><div class='ctx'> 	    list = node-&gt;nd_head;</div><div class='ctx'> 	    while (list) {</div><div class='del'>-		key = rb_eval(self, list-&gt;nd_head);</div><div class='add'>+		key = rb_eval(list-&gt;nd_head);</div><div class='ctx'> 		list = list-&gt;nd_next;</div><div class='del'>-		if (list == 0)</div><div class='del'>-		    rb_bug("odd number list for Hash");</div><div class='del'>-		val = rb_eval(self, list-&gt;nd_head);</div><div class='add'>+		if (list == Qnil)</div><div class='add'>+		    Bug("odd number list for hash");</div><div class='add'>+		val = rb_eval(list-&gt;nd_head);</div><div class='ctx'> 		list = list-&gt;nd_next;</div><div class='del'>-		rb_hash_aset(hash, key, val);</div><div class='add'>+		Fdic_aset(hash, key, val);</div><div class='ctx'> 	    }</div><div class='del'>-	    result = hash;</div><div class='add'>+	    return hash;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_ZARRAY:		/* zero length list */</div><div class='del'>-	result = rb_ary_new();</div><div class='del'>-	break;</div><div class='add'>+	return ary_new();</div><div class='ctx'> </div><div class='ctx'>       case NODE_ARRAY:</div><div class='ctx'> 	{</div><div class='ctx'> 	    VALUE ary;</div><div class='del'>-	    long i;</div><div class='add'>+	    int i;</div><div class='add'>+	    NODE *list;</div><div class='ctx'> </div><div class='del'>-	    i = node-&gt;nd_alen;</div><div class='del'>-	    ary = rb_ary_new2(i);</div><div class='add'>+	    for (i=0, list=node; list; list=list-&gt;nd_next) i++;</div><div class='add'>+	    ary = ary_new2(i);</div><div class='ctx'> 	    for (i=0;node;node=node-&gt;nd_next) {</div><div class='del'>-		RARRAY(ary)-&gt;ptr[i++] = rb_eval(self, node-&gt;nd_head);</div><div class='add'>+		RARRAY(ary)-&gt;ptr[i++] = rb_eval(node-&gt;nd_head);</div><div class='ctx'> 		RARRAY(ary)-&gt;len = i;</div><div class='ctx'> 	    }</div><div class='ctx'> </div><div class='del'>-	    result = ary;</div><div class='add'>+	    return ary;</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_STR:</div><div class='del'>-	result = rb_str_new3(node-&gt;nd_lit);</div><div class='del'>-	break;</div><div class='add'>+	return str_new3(node-&gt;nd_lit);</div><div class='ctx'> </div><div class='del'>-      case NODE_EVSTR:</div><div class='del'>-	result = rb_obj_as_string(rb_eval(self, node-&gt;nd_body));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_DSTR:</div><div class='del'>-      case NODE_DXSTR:</div><div class='add'>+      case NODE_STR2:</div><div class='add'>+      case NODE_XSTR2:</div><div class='ctx'>       case NODE_DREGX:</div><div class='del'>-      case NODE_DREGX_ONCE:</div><div class='del'>-      case NODE_DSYM:</div><div class='ctx'> 	{</div><div class='ctx'> 	    VALUE str, str2;</div><div class='ctx'> 	    NODE *list = node-&gt;nd_next;</div><div class='ctx'> </div><div class='del'>-	    str = rb_str_new3(node-&gt;nd_lit);</div><div class='add'>+	    str = node-&gt;nd_lit;</div><div class='ctx'> 	    while (list) {</div><div class='del'>-		if (list-&gt;nd_head) {</div><div class='del'>-		    switch (nd_type(list-&gt;nd_head)) {</div><div class='del'>-		      case NODE_STR:</div><div class='del'>-			str2 = list-&gt;nd_head-&gt;nd_lit;</div><div class='del'>-			break;</div><div class='del'>-		      default:</div><div class='del'>-			str2 = rb_eval(self, list-&gt;nd_head);</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='del'>-		    rb_str_append(str, str2);</div><div class='del'>-		    OBJ_INFECT(str, str2);</div><div class='add'>+		if (list-&gt;nd_head-&gt;type == NODE_STR) {</div><div class='add'>+		    str2 = list-&gt;nd_head-&gt;nd_lit;</div><div class='add'>+		}</div><div class='add'>+		else {</div><div class='add'>+		    str2 = rb_eval(list-&gt;nd_head);</div><div class='add'>+		}</div><div class='add'>+		if (str2) {</div><div class='add'>+		    str2 = obj_as_string(str2);</div><div class='add'>+		    str_cat(str, RSTRING(str2)-&gt;ptr, RSTRING(str2)-&gt;len);</div><div class='ctx'> 		}</div><div class='ctx'> 		list = list-&gt;nd_next;</div><div class='ctx'> 	    }</div><div class='del'>-	    switch (nd_type(node)) {</div><div class='del'>-	      case NODE_DREGX:</div><div class='del'>-		result = rb_reg_new(RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len,</div><div class='del'>-				    node-&gt;nd_cflag);</div><div class='del'>-		break;</div><div class='del'>-	      case NODE_DREGX_ONCE:	/* regexp expand once */</div><div class='del'>-		result = rb_reg_new(RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len,</div><div class='del'>-				    node-&gt;nd_cflag);</div><div class='del'>-		nd_set_type(node, NODE_LIT);</div><div class='del'>-		node-&gt;nd_lit = result;</div><div class='del'>-		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='del'>-	      case NODE_DXSTR:</div><div class='del'>-		result = rb_funcall(self, '`', 1, str);</div><div class='del'>-		break;</div><div class='del'>-	      case NODE_DSYM:</div><div class='del'>-		result = rb_str_intern(str);</div><div class='del'>-		break;</div><div class='del'>-	      default:</div><div class='del'>-		result = str;</div><div class='del'>-		break;</div><div class='add'>+	    if (node-&gt;type == NODE_DREGX) {</div><div class='add'>+		return regexp_new(RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='ctx'> 	    }</div><div class='add'>+	    else if (node-&gt;type == NODE_XSTR2) {</div><div class='add'>+		return rb_xstring(str);</div><div class='add'>+	    }</div><div class='add'>+	    return str;</div><div class='ctx'> 	}</div><div class='del'>-	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='del'>-	break;</div><div class='add'>+	return rb_xstring(node-&gt;nd_lit);</div><div class='ctx'> </div><div class='ctx'>       case NODE_LIT:</div><div class='del'>-	result = node-&gt;nd_lit;</div><div class='del'>-	break;</div><div class='add'>+	return node-&gt;nd_lit;</div><div class='ctx'> </div><div class='del'>-      case NODE_DEFN:</div><div class='del'>-	if (node-&gt;nd_defn) {</div><div class='del'>-	    NODE *body,  *defn;</div><div class='del'>-	    VALUE origin = 0;</div><div class='del'>-	    int noex;</div><div class='add'>+      case NODE_ATTRSET:</div><div class='add'>+	if (the_env-&gt;argc != 2)</div><div class='add'>+	    Fail("Wrong # of arguments(%d for 1)", the_env-&gt;argc - 1);</div><div class='add'>+	return rb_ivar_set(node-&gt;nd_vid, the_env-&gt;argv[1]);</div><div class='ctx'> </div><div class='del'>-	    if (NIL_P(ruby_class)) {</div><div class='del'>-		rb_raise(rb_eTypeError, "no class/module to add method");</div><div class='del'>-	    }</div><div class='del'>-	    if (ruby_class == rb_cObject &amp;&amp; node-&gt;nd_mid == init) {</div><div class='del'>-		rb_warn("redefining Object#initialize may cause infinite loop");</div><div class='del'>-	    }</div><div class='del'>-	    if (node-&gt;nd_mid == __id__ || node-&gt;nd_mid == __send__) {</div><div class='del'>-		rb_warn("redefining `%s' may cause serious problem",</div><div class='del'>-			rb_id2name(node-&gt;nd_mid));</div><div class='del'>-	    }</div><div class='del'>-	    rb_frozen_class_p(ruby_class);</div><div class='del'>-	    body = search_method(ruby_class, node-&gt;nd_mid, &amp;origin);</div><div class='del'>-	    if (body){</div><div class='del'>-		if (RTEST(ruby_verbose) &amp;&amp; ruby_class == origin &amp;&amp; body-&gt;nd_cnt == 0 &amp;&amp; body-&gt;nd_body) {</div><div class='del'>-		    rb_warning("method redefined; discarding old %s", rb_id2name(node-&gt;nd_mid));</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='add'>+      case NODE_ARGS:</div><div class='add'>+	{</div><div class='add'>+	    NODE *local;</div><div class='add'>+	    int i, len;</div><div class='ctx'> </div><div class='del'>-	    if (SCOPE_TEST(SCOPE_PRIVATE) || node-&gt;nd_mid == init) {</div><div class='del'>-		noex = NOEX_PRIVATE;</div><div class='del'>-	    }</div><div class='del'>-	    else if (SCOPE_TEST(SCOPE_PROTECTED)) {</div><div class='del'>-		noex = NOEX_PROTECTED;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		noex = NOEX_PUBLIC;</div><div class='add'>+	    i = node-&gt;nd_cnt;</div><div class='add'>+	    len = the_env-&gt;argc - 1;</div><div class='add'>+	    if (i &gt; len || (node-&gt;nd_rest == -1 &amp;&amp; i &lt; len))</div><div class='add'>+		Fail("Wrong # of arguments(%d for %d)", len, i);</div><div class='add'>+</div><div class='add'>+	    local = node-&gt;nd_frml;</div><div class='add'>+	    if (the_env-&gt;local_vars == Qnil)</div><div class='add'>+		Bug("unexpected local variable asignment");</div><div class='add'>+</div><div class='add'>+	    for (i=1;local;i++) {</div><div class='add'>+		the_env-&gt;local_vars[(int)local-&gt;nd_head] = the_env-&gt;argv[i];</div><div class='add'>+		local = local-&gt;nd_next;</div><div class='ctx'> 	    }</div><div class='del'>-	    if (body &amp;&amp; origin == ruby_class &amp;&amp; body-&gt;nd_body == 0) {</div><div class='del'>-		noex |= NOEX_NOSUPER;</div><div class='add'>+	    if (node-&gt;nd_rest &gt;= 0) {</div><div class='add'>+		if (the_env-&gt;argc == 1)</div><div class='add'>+		    the_env-&gt;local_vars[node-&gt;nd_rest] = ary_new();</div><div class='add'>+		else</div><div class='add'>+		    the_env-&gt;local_vars[node-&gt;nd_rest] =</div><div class='add'>+			ary_new4(the_env-&gt;argc-i, the_env-&gt;argv+i);</div><div class='ctx'> 	    }</div><div class='add'>+	}</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='del'>-	    defn = rb_copy_node_scope(node-&gt;nd_defn, ruby_cref);</div><div class='del'>-	    rb_add_method(ruby_class, node-&gt;nd_mid, defn, noex);</div><div class='del'>-	    if (scope_vmode == SCOPE_MODFUNC) {</div><div class='del'>-		rb_add_method(rb_singleton_class(ruby_class),</div><div class='del'>-			      node-&gt;nd_mid, defn, NOEX_PUBLIC);</div><div class='add'>+      case NODE_DEFN:</div><div class='add'>+	{</div><div class='add'>+	    if (node-&gt;nd_defn) {</div><div class='add'>+		rb_add_method(the_class,node-&gt;nd_mid,node-&gt;nd_defn,0);</div><div class='add'>+		node-&gt;nd_defn = Qnil;</div><div class='ctx'> 	    }</div><div class='del'>-	    result = Qnil;</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case NODE_DEFS:</div><div class='del'>-	if (node-&gt;nd_defn) {</div><div class='del'>-	    VALUE recv = rb_eval(self, node-&gt;nd_recv);</div><div class='del'>-	    VALUE klass;</div><div class='del'>-	    NODE *body = 0, *defn;</div><div class='del'>-</div><div class='del'>-	    if (ruby_safe_level &gt;= 4 &amp;&amp; !OBJ_TAINTED(recv)) {</div><div class='del'>-		rb_raise(rb_eSecurityError, "Insecure: can't define singleton method");</div><div class='del'>-	    }</div><div class='del'>-	    if (FIXNUM_P(recv) || SYMBOL_P(recv)) {</div><div class='del'>-		rb_raise(rb_eTypeError,</div><div class='del'>-			 "can't define singleton method \"%s\" for %s",</div><div class='del'>-			 rb_id2name(node-&gt;nd_mid),</div><div class='del'>-			 rb_obj_classname(recv));</div><div class='del'>-	    }</div><div class='add'>+	{</div><div class='add'>+	    if (node-&gt;nd_defn) {</div><div class='add'>+		VALUE recv = rb_eval(node-&gt;nd_recv);</div><div class='ctx'> </div><div class='del'>-	    if (OBJ_FROZEN(recv)) rb_error_frozen("object");</div><div class='del'>-	    klass = rb_singleton_class(recv);</div><div class='del'>-	    if (st_lookup(RCLASS(klass)-&gt;m_tbl, node-&gt;nd_mid, &amp;data)) {</div><div class='del'>-		body = (NODE *)data;</div><div class='del'>-		if (ruby_safe_level &gt;= 4) {</div><div class='del'>-		    rb_raise(rb_eSecurityError, "redefining method prohibited");</div><div class='del'>-		}</div><div class='del'>-		if (RTEST(ruby_verbose)) {</div><div class='del'>-		    rb_warning("redefine %s", rb_id2name(node-&gt;nd_mid));</div><div class='add'>+		if (recv == Qnil) {</div><div class='add'>+		    Fail("Can't define method \"%s\" for nil",</div><div class='add'>+			 rb_id2name(node-&gt;nd_mid));</div><div class='ctx'> 		}</div><div class='add'>+		rb_add_method(rb_single_class(recv),</div><div class='add'>+			      node-&gt;nd_mid, node-&gt;nd_defn, 0);</div><div class='add'>+		node-&gt;nd_defn = Qnil;</div><div class='ctx'> 	    }</div><div class='del'>-	    defn = rb_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='del'>-			  NOEX_PUBLIC|(body?body-&gt;nd_noex&amp;NOEX_UNDEF:0));</div><div class='del'>-	    result = Qnil;</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case NODE_UNDEF:</div><div class='del'>-	if (NIL_P(ruby_class)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "no class to undef method");</div><div class='add'>+	{</div><div class='add'>+	    rb_add_method(the_class, node-&gt;nd_mid, Qnil, 1);</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='del'>-	result = Qnil;</div><div class='del'>-	break;</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case NODE_ALIAS:</div><div class='del'>-	if (NIL_P(ruby_class)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "no class to make alias");</div><div class='add'>+	{</div><div class='add'>+	    rb_alias(the_class, node-&gt;nd_new, node-&gt;nd_old);</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='del'>-	result = Qnil;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_VALIAS:</div><div class='del'>-	rb_alias_variable(node-&gt;u1.id, node-&gt;u2.id);</div><div class='del'>-	result = Qnil;</div><div class='del'>-	break;</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case NODE_CLASS:</div><div class='ctx'> 	{</div><div class='del'>-	    VALUE super, klass, tmp, cbase;</div><div class='del'>-	    ID cname;</div><div class='del'>-	    int gen = Qfalse;</div><div class='add'>+	    VALUE super, class;</div><div class='ctx'> </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='del'>-</div><div class='del'>-	    if (NIL_P(ruby_cbase)) {</div><div class='del'>-		rb_raise(rb_eTypeError, "no outer class/module");</div><div class='del'>-	    }</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='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		super = 0;</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    if (rb_const_defined_at(cbase, cname)) {</div><div class='del'>-		klass = rb_const_get_at(cbase, cname);</div><div class='del'>-		if (TYPE(klass) != T_CLASS) {</div><div class='del'>-		    rb_raise(rb_eTypeError, "%s is not a class",</div><div class='del'>-			     rb_id2name(cname));</div><div class='del'>-		}</div><div class='del'>-		if (super) {</div><div class='del'>-		    tmp = rb_class_real(RCLASS(klass)-&gt;super);</div><div class='del'>-		    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='del'>-		    }</div><div class='del'>-		    super = 0;</div><div class='del'>-		}</div><div class='del'>-		if (ruby_safe_level &gt;= 4) {</div><div class='del'>-		    rb_raise(rb_eSecurityError, "extending class prohibited");</div><div class='add'>+		super = rb_id2class(node-&gt;nd_super);</div><div class='add'>+		if (super == Qnil) {</div><div class='add'>+		    Fail("undefined superclass %s",</div><div class='add'>+			 rb_id2name(node-&gt;nd_super));</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='del'>-		if (!super) super = rb_cObject;</div><div class='del'>-		klass = rb_define_class_id(cname, super);</div><div class='del'>-		rb_set_class_path(klass, cbase, rb_id2name(cname));</div><div class='del'>-		rb_const_set(cbase, cname, klass);</div><div class='del'>-		gen = Qtrue;</div><div class='add'>+		super = C_Object;</div><div class='ctx'> 	    }</div><div class='del'>-	    if (ruby_wrapper) {</div><div class='del'>-		rb_extend_object(klass, ruby_wrapper);</div><div class='del'>-		rb_include_module(klass, ruby_wrapper);</div><div class='add'>+	    if (class = rb_id2class(node-&gt;nd_cname)) {</div><div class='add'>+		if (verbose) {</div><div class='add'>+		    Warning("redefine class %s", rb_id2name(node-&gt;nd_cname));</div><div class='add'>+		}</div><div class='add'>+		unliteralize(class);</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='add'>+</div><div class='add'>+	    PUSH_ENV();</div><div class='add'>+	    the_class = (struct RClass*)</div><div class='add'>+		rb_define_class_id(node-&gt;nd_cname, super);</div><div class='add'>+	    Qself = (VALUE)the_class;</div><div class='add'>+</div><div class='add'>+	    PUSH_TAG();</div><div class='add'>+	    if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+		rb_eval(node-&gt;nd_body);</div><div class='ctx'> 	    }</div><div class='del'>-	    result = module_setup(klass, node);</div><div class='add'>+	    POP_TAG();</div><div class='add'>+	    POP_ENV();</div><div class='add'>+	    if (state) JUMP_TAG(state);</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case NODE_MODULE:</div><div class='ctx'> 	{</div><div class='del'>-	    VALUE module, cbase;</div><div class='del'>-	    ID cname;</div><div class='add'>+	    VALUE module;</div><div class='ctx'> </div><div class='del'>-	    if (NIL_P(ruby_cbase)) {</div><div class='del'>-		rb_raise(rb_eTypeError, "no outer class/module");</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='del'>-	    if (rb_const_defined_at(cbase, cname)) {</div><div class='del'>-		module = rb_const_get_at(cbase, cname);</div><div class='del'>-		if (TYPE(module) != T_MODULE) {</div><div class='del'>-		    rb_raise(rb_eTypeError, "%s is not a module",</div><div class='del'>-			     rb_id2name(cname));</div><div class='del'>-		}</div><div class='del'>-		if (ruby_safe_level &gt;= 4) {</div><div class='del'>-		    rb_raise(rb_eSecurityError, "extending module prohibited");</div><div class='add'>+	    if (module = rb_id2class(node-&gt;nd_cname)) {</div><div class='add'>+		if (verbose) {</div><div class='add'>+		    Warning("redefine module %s", rb_id2name(node-&gt;nd_cname));</div><div class='ctx'> 		}</div><div class='add'>+		unliteralize(module);</div><div class='ctx'> 	    }</div><div class='del'>-	    else {</div><div class='del'>-		module = rb_define_module_id(cname);</div><div class='del'>-		rb_set_class_path(module, cbase, rb_id2name(cname));</div><div class='del'>-		rb_const_set(cbase, cname, module);</div><div class='del'>-	    }</div><div class='del'>-	    if (ruby_wrapper) {</div><div class='del'>-		rb_extend_object(module, ruby_wrapper);</div><div class='del'>-		rb_include_module(module, ruby_wrapper);</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    result = module_setup(module, node);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_SCLASS:</div><div class='del'>-	{</div><div class='del'>-	    VALUE klass;</div><div class='ctx'> </div><div class='del'>-	    result = rb_eval(self, node-&gt;nd_recv);</div><div class='del'>-	    if (FIXNUM_P(result) || SYMBOL_P(result)) {</div><div class='del'>-		rb_raise(rb_eTypeError, "no virtual class for %s",</div><div class='del'>-			 rb_obj_classname(result));</div><div class='del'>-	    }</div><div class='del'>-	    if (ruby_safe_level &gt;= 4 &amp;&amp; !OBJ_TAINTED(result))</div><div class='del'>-		rb_raise(rb_eSecurityError, "Insecure: can't extend object");</div><div class='del'>-	    klass = rb_singleton_class(result);</div><div class='add'>+	    PUSH_ENV();</div><div class='add'>+	    the_class = (struct RClass*)rb_define_module_id(node-&gt;nd_cname);</div><div class='add'>+	    Qself = (VALUE)the_class;</div><div class='ctx'> </div><div class='del'>-	    if (ruby_wrapper) {</div><div class='del'>-		rb_extend_object(klass, ruby_wrapper);</div><div class='del'>-		rb_include_module(klass, ruby_wrapper);</div><div class='add'>+	    PUSH_TAG();</div><div class='add'>+	    if ((state = EXEC_TAG()) == 0) {</div><div class='add'>+		rb_eval(node-&gt;nd_body);</div><div class='ctx'> 	    }</div><div class='del'>-</div><div class='del'>-	    result = module_setup(klass, node);</div><div class='add'>+	    POP_TAG();</div><div class='add'>+	    POP_ENV();</div><div class='add'>+	    if (state) JUMP_TAG(state);</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='del'>-      case NODE_DEFINED:</div><div class='add'>+      case NODE_INC:</div><div class='ctx'> 	{</div><div class='del'>-	    char buf[20];</div><div class='del'>-	    const char *desc = is_defined(self, node-&gt;nd_head, buf);</div><div class='add'>+	    struct RClass *module;</div><div class='ctx'> </div><div class='del'>-	    if (desc) result = rb_str_new2(desc);</div><div class='del'>-	    else result = Qnil;</div><div class='add'>+	    module = (struct RClass*)rb_id2class(node-&gt;nd_modl);</div><div class='add'>+	    if (module == Qnil) {</div><div class='add'>+		Fail("undefined module %s", rb_id2name(node-&gt;nd_modl));</div><div class='add'>+	    }</div><div class='add'>+	    rb_include_module(the_class, module);</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      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='del'>-	node = node-&gt;nd_next;</div><div class='del'>-	goto again;</div><div class='add'>+	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       default:</div><div class='del'>-	unknown_node(node);</div><div class='del'>-    }</div><div class='del'>-  finish:</div><div class='del'>-    CHECK_INTS;</div><div class='del'>-    if (contnode) {</div><div class='del'>-	node = contnode;</div><div class='del'>-	contnode = 0;</div><div class='del'>-	goto again;</div><div class='del'>-    }</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-module_setup(module, n)</div><div class='del'>-    VALUE module;</div><div class='del'>-    NODE *n;</div><div class='del'>-{</div><div class='del'>-    NODE * volatile node = n-&gt;nd_body;</div><div class='del'>-    int state;</div><div class='del'>-    struct FRAME frame;</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='del'>-    TMP_PROTECT;</div><div class='del'>-</div><div class='del'>-    frame = *ruby_frame;</div><div class='del'>-    frame.tmp = ruby_frame;</div><div class='del'>-    ruby_frame = &amp;frame;</div><div class='del'>-</div><div class='del'>-    PUSH_CLASS(module);</div><div class='del'>-    PUSH_SCOPE();</div><div class='del'>-    PUSH_VARS();</div><div class='del'>-</div><div class='del'>-    if (node-&gt;nd_tbl) {</div><div class='del'>-	VALUE *vars = TMP_ALLOC(node-&gt;nd_tbl[0]+1);</div><div class='del'>-	*vars++ = (VALUE)node;</div><div class='del'>-	ruby_scope-&gt;local_vars = vars;</div><div class='del'>-	rb_mem_clear(ruby_scope-&gt;local_vars, node-&gt;nd_tbl[0]);</div><div class='del'>-	ruby_scope-&gt;local_tbl = node-&gt;nd_tbl;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	ruby_scope-&gt;local_vars = 0;</div><div class='del'>-	ruby_scope-&gt;local_tbl  = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    PUSH_CREF(module);</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    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='del'>-	result = rb_eval(ruby_cbase, node-&gt;nd_next);</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    POP_CREF();</div><div class='del'>-    POP_VARS();</div><div class='del'>-    POP_SCOPE();</div><div class='del'>-    POP_CLASS();</div><div class='del'>-</div><div class='del'>-    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='del'>-    if (state) JUMP_TAG(state);</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</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 RTEST(rb_funcall2(obj, respond_to, n, args));</div><div class='add'>+	Bug("unknown node type %d", node-&gt;type);</div><div class='ctx'>     }</div><div class='add'>+    return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-rb_respond_to(obj, id)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    return rb_obj_respond_to(obj, id, Qfalse);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-obj_respond_to(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+VALUE</div><div class='add'>+obj_responds_to(obj, msg)</div><div class='ctx'>     VALUE obj;</div><div class='add'>+    struct RString *msg;</div><div class='ctx'> {</div><div class='del'>-    VALUE mid, priv;</div><div class='ctx'>     ID id;</div><div class='ctx'> </div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;mid, &amp;priv);</div><div class='del'>-    id = rb_to_id(mid);</div><div class='del'>-    if (rb_method_boundp(CLASS_OF(obj), id, !RTEST(priv))) {</div><div class='del'>-	return Qtrue;</div><div class='add'>+    if (FIXNUM_P(msg)) {</div><div class='add'>+	id = FIX2INT(msg);</div><div class='ctx'>     }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_method_defined(mod, mid)</div><div class='del'>-    VALUE mod, mid;</div><div class='del'>-{</div><div class='del'>-    return rb_method_boundp(mod, rb_to_id(mid), 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define VISI_CHECK(x,f) (((x)&amp;NOEX_MASK) == (f))</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_public_method_defined(mod, mid)</div><div class='del'>-    VALUE mod, mid;</div><div class='del'>-{</div><div class='del'>-    ID id = rb_to_id(mid);</div><div class='del'>-    int noex;</div><div class='del'>-</div><div class='del'>-    if (rb_get_method_body(&amp;mod, &amp;id, &amp;noex)) {</div><div class='del'>-	if (VISI_CHECK(noex, NOEX_PUBLIC))</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'>-/*</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='del'>-static VALUE</div><div class='del'>-rb_mod_private_method_defined(mod, mid)</div><div class='del'>-    VALUE mod, mid;</div><div class='del'>-{</div><div class='del'>-    ID id = rb_to_id(mid);</div><div class='del'>-    int noex;</div><div class='del'>-</div><div class='del'>-    if (rb_get_method_body(&amp;mod, &amp;id, &amp;noex)) {</div><div class='del'>-	if (VISI_CHECK(noex, NOEX_PRIVATE))</div><div class='del'>-	    return Qtrue;</div><div class='add'>+    else {</div><div class='add'>+	Check_Type(msg, T_STRING);</div><div class='add'>+	id = rb_intern(msg-&gt;ptr);</div><div class='ctx'>     }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</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='del'>-static VALUE</div><div class='del'>-rb_mod_protected_method_defined(mod, mid)</div><div class='del'>-    VALUE mod, mid;</div><div class='del'>-{</div><div class='del'>-    ID id = rb_to_id(mid);</div><div class='del'>-    int noex;</div><div class='del'>-</div><div class='del'>-    if (rb_get_method_body(&amp;mod, &amp;id, &amp;noex)) {</div><div class='del'>-	if (VISI_CHECK(noex, NOEX_PROTECTED))</div><div class='del'>-	    return Qtrue;</div><div class='add'>+    if (rb_get_method_body(CLASS_OF(obj), id, 0)) {</div><div class='add'>+	return TRUE;</div><div class='ctx'>     }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-NORETURN(static VALUE terminate_process _((int, VALUE)));</div><div class='del'>-static VALUE</div><div class='del'>-terminate_process(status, mesg)</div><div class='del'>-    int status;</div><div class='del'>-    VALUE mesg;</div><div class='del'>-{</div><div class='del'>-    VALUE args[2];</div><div class='del'>-    args[0] = INT2NUM(status);</div><div class='del'>-    args[1] = mesg;</div><div class='del'>-</div><div class='del'>-    rb_exc_raise(rb_class_new_instance(2, args, rb_eSystemExit));</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_exit(status)</div><div class='ctx'>     int status;</div><div class='ctx'> {</div><div class='del'>-    if (prot_tag) {</div><div class='del'>-	terminate_process(status, rb_str_new("exit", 4));</div><div class='del'>-    }</div><div class='del'>-    ruby_finalize();</div><div class='del'>-    exit(status);</div><div class='add'>+    last_val = INT2FIX(status);</div><div class='add'>+    JUMP_TAG(TAG_EXIT);</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='del'>-rb_f_exit(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Fexit(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='ctx'>     VALUE status;</div><div class='del'>-    int istatus;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    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'>+    if (rb_scan_args(args, "01", &amp;status) == 1) {</div><div class='add'>+	Need_Fixnum(status);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	istatus = EXIT_SUCCESS;</div><div class='add'>+	status = INT2FIX(0);</div><div class='ctx'>     }</div><div class='del'>-    rb_exit(istatus);</div><div class='add'>+    last_val = status;</div><div class='add'>+    JUMP_TAG(TAG_EXIT);</div><div class='add'>+</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='del'>-VALUE</div><div class='del'>-rb_f_abort(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+void</div><div class='add'>+rb_break()</div><div class='ctx'> {</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	if (!NIL_P(ruby_errinfo)) {</div><div class='del'>-	    error_print();</div><div class='del'>-	}</div><div class='del'>-	rb_exit(EXIT_FAILURE);</div><div class='add'>+    if (the_env-&gt;flags &amp; DURING_ITERATE) {</div><div class='add'>+	JUMP_TAG(TAG_BREAK);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	VALUE mesg;</div><div class='del'>-</div><div class='del'>-	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'>+	Fatal("unexpected break");</div><div class='ctx'>     }</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_iter_break()</div><div class='del'>-{</div><div class='del'>-    break_jump(Qnil);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-NORETURN(static void rb_longjmp _((int, VALUE)));</div><div class='del'>-static VALUE make_backtrace _((void));</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_longjmp(tag, mesg)</div><div class='del'>-    int tag;</div><div class='del'>-    VALUE mesg;</div><div class='add'>+rb_redo()</div><div class='ctx'> {</div><div class='del'>-    VALUE at;</div><div class='del'>-    rb_thread_t th = curr_thread;</div><div class='del'>-</div><div class='del'>-    if (rb_thread_set_raised(th)) {</div><div class='del'>-	ruby_errinfo = exception_error;</div><div class='del'>-	JUMP_TAG(TAG_FATAL);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(mesg)) mesg = ruby_errinfo;</div><div class='del'>-    if (NIL_P(mesg)) {</div><div class='del'>-	mesg = rb_exc_new(rb_eRuntimeError, 0, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ruby_set_current_source();</div><div class='del'>-    if (ruby_sourcefile &amp;&amp; !NIL_P(mesg)) {</div><div class='del'>-	at = get_backtrace(mesg);</div><div class='del'>-	if (NIL_P(at)) {</div><div class='del'>-	    at = make_backtrace();</div><div class='del'>-	    if (OBJ_FROZEN(mesg)) {</div><div class='del'>-		mesg = rb_obj_dup(mesg);</div><div class='del'>-	    }</div><div class='del'>-	    set_backtrace(mesg, at);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(mesg)) {</div><div class='del'>-	ruby_errinfo = mesg;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RTEST(ruby_debug) &amp;&amp; !NIL_P(ruby_errinfo)</div><div class='del'>-	&amp;&amp; !rb_obj_is_kind_of(ruby_errinfo, rb_eSystemExit)) {</div><div class='del'>-	VALUE e = ruby_errinfo;</div><div class='del'>-	int status;</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'>-	    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'>-	    rb_thread_reset_raised(th);</div><div class='del'>-	    JUMP_TAG(status);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    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='del'>-			ruby_frame-&gt;self,</div><div class='del'>-			ruby_frame-&gt;last_func,</div><div class='del'>-			ruby_frame-&gt;last_class);</div><div class='add'>+    if (the_env-&gt;flags &amp; DURING_ITERATE) {</div><div class='add'>+	JUMP_TAG(TAG_REDO);</div><div class='ctx'>     }</div><div class='del'>-    if (!prot_tag) {</div><div class='del'>-	error_print();</div><div class='add'>+    else {</div><div class='add'>+	Fatal("unexpected redo");</div><div class='ctx'>     }</div><div class='del'>-    rb_thread_raised_clear(th);</div><div class='del'>-    JUMP_TAG(tag);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_exc_jump(mesg)</div><div class='del'>-    VALUE mesg;</div><div class='del'>-{</div><div class='del'>-    rb_thread_raised_clear(rb_curr_thread);</div><div class='del'>-    ruby_errinfo = mesg;</div><div class='del'>-    JUMP_TAG(TAG_RAISE);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_exc_raise(mesg)</div><div class='del'>-    VALUE mesg;</div><div class='add'>+rb_retry()</div><div class='ctx'> {</div><div class='del'>-    rb_longjmp(TAG_RAISE, mesg);</div><div class='add'>+    if (the_env-&gt;flags &amp; DURING_RESQUE) {</div><div class='add'>+	JUMP_TAG(TAG_RETRY);</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	Fatal("unexpected retry");</div><div class='add'>+    }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_exc_fatal(mesg)</div><div class='add'>+rb_fail(mesg)</div><div class='ctx'>     VALUE mesg;</div><div class='ctx'> {</div><div class='del'>-    rb_longjmp(TAG_FATAL, mesg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_interrupt()</div><div class='del'>-{</div><div class='del'>-    static const char fmt[1] = {'\0'};</div><div class='del'>-    rb_raise(rb_eInterrupt, fmt);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_f_raise(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</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='add'>+    char buf[BUFSIZ];</div><div class='ctx'> </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='del'>-    VALUE mesg;</div><div class='del'>-    ID exception;</div><div class='del'>-    int n;</div><div class='add'>+    if (errat == Qnil || sourcefile) {</div><div class='add'>+	if (the_env-&gt;last_func) {</div><div class='add'>+	    last_func = the_env-&gt;last_func;</div><div class='add'>+	}</div><div class='add'>+	sprintf(buf, "%s:%d", sourcefile, sourceline);</div><div class='add'>+	errat = str_new2(buf);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-    mesg = Qnil;</div><div class='del'>-    switch (argc) {</div><div class='del'>-      case 0:</div><div class='del'>-	mesg = Qnil;</div><div class='del'>-	break;</div><div class='del'>-      case 1:</div><div class='del'>-	if (NIL_P(argv[0])) break;</div><div class='del'>-	if (TYPE(argv[0]) == T_STRING) {</div><div class='del'>-	    mesg = rb_exc_new3(rb_eRuntimeError, argv[0]);</div><div class='del'>-	    break;</div><div class='add'>+    if (mesg) {</div><div class='add'>+	if (RSTRING(mesg)-&gt;ptr[RSTRING(mesg)-&gt;len - 1] == '\n') {</div><div class='add'>+	    errstr = mesg;</div><div class='ctx'> 	}</div><div class='del'>-	n = 0;</div><div class='del'>-	goto exception_call;</div><div class='del'>-</div><div class='del'>-      case 2:</div><div class='del'>-      case 3:</div><div class='del'>-	n = 1;</div><div class='del'>-      exception_call:</div><div class='del'>-	exception = rb_intern("exception");</div><div class='del'>-	if (!rb_respond_to(argv[0], exception)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "exception class/object expected");</div><div class='add'>+	else {</div><div class='add'>+	    errstr = Fstr_clone(mesg);</div><div class='add'>+	    str_cat(errstr, "\n", 1);</div><div class='ctx'> 	}</div><div class='del'>-	mesg = rb_funcall(argv[0], exception, n, argv[1]);</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments");</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    if (argc &gt; 0) {</div><div class='del'>-	if (!rb_obj_is_kind_of(mesg, rb_eException))</div><div class='del'>-	    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='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return mesg;</div><div class='add'>+    if (prot_tag-&gt;level == 0) error_print();</div><div class='add'>+    JUMP_TAG(TAG_FAIL);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-rb_raise_jump(mesg)</div><div class='del'>-    VALUE mesg;</div><div class='add'>+VALUE</div><div class='add'>+Ffail(self, args)</div><div class='add'>+    VALUE self, args;</div><div class='ctx'> {</div><div class='del'>-    if (ruby_frame != top_frame) {</div><div class='del'>-	PUSH_FRAME();		/* fake frame */</div><div class='del'>-	*ruby_frame = *_frame.prev-&gt;prev;</div><div class='del'>-	rb_longjmp(TAG_RAISE, mesg);</div><div class='del'>-	POP_FRAME();</div><div class='del'>-    }</div><div class='del'>-    rb_longjmp(TAG_RAISE, mesg);</div><div class='del'>-}</div><div class='add'>+    VALUE mesg;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_jump_tag(tag)</div><div class='del'>-    int tag;</div><div class='del'>-{</div><div class='del'>-    JUMP_TAG(tag);</div><div class='del'>-}</div><div class='add'>+    rb_scan_args(args, "01", &amp;mesg);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-rb_block_given_p()</div><div class='del'>-{</div><div class='del'>-    if (ruby_frame-&gt;iter == ITER_CUR &amp;&amp; ruby_block)</div><div class='del'>-	return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='add'>+    if (mesg) Check_Type(mesg, T_STRING);</div><div class='add'>+    rb_fail(mesg);</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-rb_iterator_p()</div><div class='del'>-{</div><div class='del'>-    return rb_block_given_p();</div><div class='add'>+    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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_f_block_given_p()</div><div class='add'>+iterator_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='del'>-	return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return ITERATOR_P();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-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='add'>+VALUE</div><div class='add'>+rb_yield(val)</div><div class='add'>+    VALUE val;</div><div class='add'>+{</div><div class='add'>+    struct BLOCK *block;</div><div class='ctx'>     int state;</div><div class='add'>+    int go_out;</div><div class='ctx'>     VALUE result;</div><div class='del'>-{</div><div class='del'>-    char mesg[32];</div><div class='del'>-    const 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='add'>+    int cnt;</div><div class='ctx'> </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='add'>+    &amp;go_out;</div><div class='add'>+    block = the_env-&gt;block;</div><div class='add'>+    if (!ITERATOR_P()) {</div><div class='add'>+	Fail("yield called out of iterator");</div><div class='ctx'>     }</div><div class='del'>-    localjump_error("unexpected break", retval, TAG_BREAK);</div><div class='del'>-}</div><div class='ctx'> </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='add'>+    PUSH_ENV();</div><div class='add'>+    block-&gt;env.prev = the_env-&gt;prev;</div><div class='add'>+    the_env = &amp;(block-&gt;env);</div><div class='add'>+    the_env-&gt;flags = the_env-&gt;prev-&gt;flags;</div><div class='add'>+    if (block-&gt;var) {</div><div class='add'>+	asign(block-&gt;var, val);</div><div class='ctx'>     }</div><div class='del'>-    localjump_error("unexpected next", retval, TAG_NEXT);</div><div class='del'>-}</div><div class='ctx'> </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='del'>-static VALUE</div><div class='del'>-rb_yield_0(val, self, klass, flags, avalue)</div><div class='del'>-    VALUE val, self, klass;	/* OK */</div><div class='del'>-    int flags, avalue;</div><div class='del'>-{</div><div class='del'>-    NODE *node, *var;</div><div class='del'>-    volatile VALUE result = Qnil;</div><div class='del'>-    volatile VALUE old_cref;</div><div class='del'>-    volatile VALUE old_wrapper;</div><div class='del'>-    struct BLOCK * volatile block;</div><div class='del'>-    struct SCOPE * volatile old_scope;</div><div class='del'>-    int old_vmode;</div><div class='del'>-    struct FRAME frame;</div><div class='del'>-    NODE *cnode = ruby_current_node;</div><div class='del'>-    int lambda = flags &amp; YIELD_LAMBDA_CALL;</div><div class='del'>-    int state;</div><div class='del'>-</div><div class='del'>-    rb_need_block();</div><div class='del'>-</div><div class='del'>-    PUSH_VARS();</div><div class='del'>-    block = ruby_block;</div><div class='del'>-    frame = block-&gt;frame;</div><div class='del'>-    frame.prev = ruby_frame;</div><div class='del'>-    frame.node = cnode;</div><div class='del'>-    ruby_frame = &amp;(frame);</div><div class='del'>-    old_cref = (VALUE)ruby_cref;</div><div class='del'>-    ruby_cref = block-&gt;cref;</div><div class='del'>-    old_wrapper = ruby_wrapper;</div><div class='del'>-    ruby_wrapper = block-&gt;wrapper;</div><div class='del'>-    old_scope = ruby_scope;</div><div class='del'>-    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='del'>-    ruby_block = block-&gt;prev;</div><div class='del'>-    if (block-&gt;flags &amp; BLOCK_D_SCOPE) {</div><div class='del'>-	/* put place holder for dynamic (in-block) local variables */</div><div class='del'>-	ruby_dyna_vars = new_dvar(0, 0, block-&gt;dyna_vars);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	/* FOR does not introduce new scope */</div><div class='del'>-	ruby_dyna_vars = block-&gt;dyna_vars;</div><div class='del'>-    }</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='del'>-    node = block-&gt;body;</div><div class='del'>-    var = block-&gt;var;</div><div class='del'>-</div><div class='del'>-    if (var) {</div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    NODE *bvar = NULL;</div><div class='del'>-	  block_var:</div><div class='del'>-	    if (var == (NODE*)1) { /* no parameter || */</div><div class='del'>-		if (lambda &amp;&amp; RARRAY(val)-&gt;len != 0) {</div><div class='del'>-		    rb_raise(rb_eArgError, "wrong number of arguments (%ld for 0)",</div><div class='del'>-			     RARRAY(val)-&gt;len);</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else if (var == (NODE*)2) {</div><div class='del'>-		if (TYPE(val) == T_ARRAY &amp;&amp; RARRAY(val)-&gt;len != 0) {</div><div class='del'>-		    rb_raise(rb_eArgError, "wrong number of arguments (%ld for 0)",</div><div class='del'>-			     RARRAY(val)-&gt;len);</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else if (!bvar &amp;&amp; nd_type(var) == NODE_BLOCK_PASS) {</div><div class='del'>-		bvar = var-&gt;nd_body;</div><div class='del'>-		var = var-&gt;nd_args;</div><div class='del'>-		goto block_var;</div><div class='del'>-	    }</div><div class='del'>-	    else if (nd_type(var) == NODE_MASGN) {</div><div class='del'>-		if (!avalue) {</div><div class='del'>-		    val = svalue_to_mrhs(val, var-&gt;nd_head);</div><div class='del'>-		}</div><div class='del'>-		massign(self, var, val, lambda);</div><div class='del'>-	    }</div><div class='del'>-	    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 = 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, var, val, lambda);</div><div class='del'>-	    }</div><div class='del'>-	    if (bvar) {</div><div class='del'>-		VALUE blk;</div><div class='del'>-		if (flags &amp; YIELD_PROC_CALL)</div><div class='del'>-		    blk = block-&gt;block_obj;</div><div class='del'>-		else</div><div class='del'>-		    blk = rb_block_proc();</div><div class='del'>-		assign(self, bvar, blk, 0);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	POP_TAG();</div><div class='del'>-	if (state) goto pop_state;</div><div class='del'>-    }</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='del'>-</div><div class='del'>-    PUSH_ITER(block-&gt;iter);</div><div class='del'>-    PUSH_TAG(lambda ? PROT_NONE : PROT_YIELD);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-      redo:</div><div class='del'>-	if (nd_type(node) == NODE_CFUNC || nd_type(node) == NODE_IFUNC) {</div><div class='del'>-	    switch (node-&gt;nd_state) {</div><div class='del'>-	      case YIELD_FUNC_LAMBDA:</div><div class='del'>-		if (!avalue) {</div><div class='del'>-		    val = rb_ary_new3(1, val);</div><div class='del'>-		}</div><div class='del'>-		break;</div><div class='del'>-	      case 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'>-		break;</div><div class='del'>-	      default:</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='del'>-	    result = (*node-&gt;nd_cfnc)(val, node-&gt;nd_tval, self);</div><div class='add'>+    go_out = 0;</div><div class='add'>+    PUSH_TAG();</div><div class='add'>+    switch (state = EXEC_TAG()) {</div><div class='add'>+      retry:</div><div class='add'>+      case 0:</div><div class='add'>+	if (block-&gt;body-&gt;type == NODE_CFUNC) {</div><div class='add'>+	    the_env-&gt;flags |= DURING_ITERATE;</div><div class='add'>+	    result = (*block-&gt;body-&gt;nd_cfnc)(val, block-&gt;body-&gt;nd_argc);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='del'>-	    result = rb_eval(self, node);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	switch (state) {</div><div class='del'>-	  case TAG_REDO:</div><div class='del'>-	    state = 0;</div><div class='del'>-	    CHECK_INTS;</div><div class='del'>-	    goto redo;</div><div class='del'>-	  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='del'>-	    break;</div><div class='del'>-	  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='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    POP_ITER();</div><div class='del'>-  pop_state:</div><div class='del'>-    POP_CLASS();</div><div class='del'>-    if (ruby_dyna_vars &amp;&amp; (block-&gt;flags &amp; BLOCK_D_SCOPE) &amp;&amp;</div><div class='del'>-	!FL_TEST(ruby_dyna_vars, DVAR_DONT_RECYCLE)) {</div><div class='del'>-	struct RVarmap *vars = ruby_dyna_vars;</div><div class='del'>-</div><div class='del'>-	if (ruby_dyna_vars-&gt;id == 0) {</div><div class='del'>-	    vars = ruby_dyna_vars-&gt;next;</div><div class='del'>-	    rb_gc_force_recycle((VALUE)ruby_dyna_vars);</div><div class='del'>-	    while (vars &amp;&amp; vars-&gt;id != 0 &amp;&amp; vars != block-&gt;dyna_vars) {</div><div class='del'>-		struct RVarmap *tmp = vars-&gt;next;</div><div class='del'>-		rb_gc_force_recycle((VALUE)vars);</div><div class='del'>-		vars = tmp;</div><div class='del'>-	    }</div><div class='add'>+	    result = rb_eval(block-&gt;body);</div><div class='ctx'> 	}</div><div class='del'>-    }</div><div class='del'>-    POP_VARS();</div><div class='del'>-    ruby_block = block;</div><div class='del'>-    ruby_frame = ruby_frame-&gt;prev;</div><div class='del'>-    ruby_cref = (NODE*)old_cref;</div><div class='del'>-    ruby_wrapper = old_wrapper;</div><div class='del'>-    if (ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE)</div><div class='del'>-	scope_dup(old_scope);</div><div class='del'>-    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='add'>+	break;</div><div class='add'>+      case TAG_RETRY:</div><div class='add'>+	goto retry;</div><div class='add'>+      case TAG_CONTINUE:</div><div class='ctx'> 	break;</div><div class='ctx'>       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='del'>-	    }</div><div class='del'>-	    proc_jump_error(TAG_BREAK, result);</div><div class='del'>-	}</div><div class='del'>-	/* fall through */</div><div class='add'>+      case TAG_RETURN:</div><div class='add'>+	target_level = block-&gt;level;</div><div class='add'>+	state = IN_BLOCK|state;</div><div class='ctx'>       default:</div><div class='del'>-	JUMP_TAG(state);</div><div class='add'>+	go_out++;</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='del'>-    ruby_current_node = cnode;</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_yield(val)</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    return rb_yield_0(val, 0, 0, 0, Qfalse);</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_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'>-static VALUE</div><div class='del'>-loop_i()</div><div class='del'>-{</div><div class='del'>-    for (;;) {</div><div class='del'>-	rb_yield_0(Qundef, 0, 0, 0, Qfalse);</div><div class='del'>-	CHECK_INTS;</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'>- *     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'>- *  StopIteration raised in the block breaks the loop.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_loop()</div><div class='del'>-{</div><div class='del'>-    rb_rescue2(loop_i, (VALUE)0, 0, 0, rb_eStopIteration, (VALUE)0);</div><div class='del'>-    return Qnil;		/* dummy */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-massign(self, node, val, pcall)</div><div class='del'>-    VALUE self;</div><div class='del'>-    NODE *node;</div><div class='del'>-    VALUE val;</div><div class='del'>-    int pcall;</div><div class='del'>-{</div><div class='del'>-    NODE *list;</div><div class='del'>-    long i = 0, len;</div><div class='del'>-</div><div class='del'>-    len = RARRAY(val)-&gt;len;</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    if (pcall &amp;&amp; list) goto arg_error;</div><div class='del'>-    if (node-&gt;nd_args) {</div><div class='del'>-	if ((long)(node-&gt;nd_args) == -1) {</div><div class='del'>-	    /* no check for mere `*' */</div><div class='del'>-	}</div><div class='del'>-	else if (!list &amp;&amp; i&lt;len) {</div><div class='del'>-	    assign(self, node-&gt;nd_args, rb_ary_new4(len-i, RARRAY(val)-&gt;ptr+i), pcall);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    assign(self, node-&gt;nd_args, rb_ary_new2(0), pcall);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else if (pcall &amp;&amp; i &lt; len) {</div><div class='del'>-	goto arg_error;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while (list) {</div><div class='del'>-	i++;</div><div class='del'>-	assign(self, list-&gt;nd_head, Qnil, pcall);</div><div class='del'>-	list = list-&gt;nd_next;</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='add'>+    POP_TAG();</div><div class='add'>+    POP_ENV();</div><div class='add'>+    if (go_out) JUMP_TAG(state);</div><div class='ctx'> </div><div class='del'>-  arg_error:</div><div class='del'>-    while (list) {</div><div class='del'>-	i++;</div><div class='del'>-	list = list-&gt;nd_next;</div><div class='del'>-    }</div><div class='del'>-    rb_raise(rb_eArgError, "wrong number of arguments (%ld for %ld)", len, i);</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-assign(self, lhs, val, pcall)</div><div class='del'>-    VALUE self;</div><div class='add'>+asign(lhs, val)</div><div class='ctx'>     NODE *lhs;</div><div class='ctx'>     VALUE val;</div><div class='del'>-    int pcall;</div><div class='ctx'> {</div><div class='del'>-    ruby_current_node = lhs;</div><div class='del'>-    if (val == Qundef) {</div><div class='del'>-	rb_warning("assigning void value");</div><div class='del'>-	val = Qnil;</div><div class='del'>-    }</div><div class='del'>-    switch (nd_type(lhs)) {</div><div class='add'>+    switch (lhs-&gt;type) {</div><div class='ctx'>       case NODE_GASGN:</div><div class='ctx'> 	rb_gvar_set(lhs-&gt;nd_entry, val);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_IASGN:</div><div class='del'>-	rb_ivar_set(self, lhs-&gt;nd_vid, val);</div><div class='add'>+	rb_ivar_set(lhs-&gt;nd_vid, val);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_LASGN:</div><div class='del'>-	if (ruby_scope-&gt;local_vars == 0)</div><div class='del'>-	    rb_bug("unexpected local variable assignment");</div><div class='del'>-	ruby_scope-&gt;local_vars[lhs-&gt;nd_cnt] = val;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_DASGN:</div><div class='del'>-	dvar_asgn(lhs-&gt;nd_vid, val);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_DASGN_CURR:</div><div class='del'>-	dvar_asgn_curr(lhs-&gt;nd_vid, val);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_CDECL:</div><div class='del'>-	if (lhs-&gt;nd_vid == 0) {</div><div class='del'>-	    rb_const_set(class_prefix(self, lhs-&gt;nd_else), lhs-&gt;nd_else-&gt;nd_mid, val);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_const_set(ruby_cbase, lhs-&gt;nd_vid, val);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_CVDECL:</div><div class='del'>-	if (RTEST(ruby_verbose) &amp;&amp; FL_TEST(ruby_cbase, FL_SINGLETON)) {</div><div class='del'>-	    rb_warn("declaring singleton class variable");</div><div class='del'>-	}</div><div class='del'>-	rb_cvar_set(cvar_cbase(), lhs-&gt;nd_vid, val, Qtrue);</div><div class='add'>+	if (the_env-&gt;local_vars == Qnil)</div><div class='add'>+	    Bug("unexpected iterator variable asignment");</div><div class='add'>+	the_env-&gt;local_vars[lhs-&gt;nd_cnt] = val;</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_CVASGN:</div><div class='del'>-	rb_cvar_set(cvar_cbase(), lhs-&gt;nd_vid, val, Qfalse);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_MASGN:</div><div class='del'>-	massign(self, lhs, svalue_to_mrhs(val, lhs-&gt;nd_head), pcall);</div><div class='add'>+      case NODE_CASGN:</div><div class='add'>+	rb_const_set(lhs-&gt;nd_vid, val);</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       case NODE_CALL:</div><div class='del'>-      case NODE_ATTRASGN:</div><div class='ctx'> 	{</div><div class='ctx'> 	    VALUE recv;</div><div class='del'>-	    int scope;</div><div class='del'>-	    if (lhs-&gt;nd_recv == (NODE *)1) {</div><div class='del'>-		recv = self;</div><div class='del'>-		scope = 1;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		recv = rb_eval(self, lhs-&gt;nd_recv);</div><div class='del'>-		scope = 0;</div><div class='del'>-	    }</div><div class='del'>-	    if (!lhs-&gt;nd_args) {</div><div class='add'>+	    recv = rb_eval(lhs-&gt;nd_recv);</div><div class='add'>+	    if (lhs-&gt;nd_args-&gt;nd_head == Qnil) {</div><div class='ctx'> 		/* attr set */</div><div class='del'>-		ruby_current_node = lhs;</div><div class='del'>-		SET_CURRENT_SOURCE();</div><div class='del'>-		rb_call(CLASS_OF(recv), recv, lhs-&gt;nd_mid, 1, &amp;val, scope, self);</div><div class='add'>+		rb_funcall(recv, lhs-&gt;nd_mid, 1, val);</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='ctx'> 		/* array set */</div><div class='ctx'> 		VALUE args;</div><div class='ctx'> </div><div class='del'>-		args = rb_eval(self, lhs-&gt;nd_args);</div><div class='del'>-		rb_ary_push(args, val);</div><div class='del'>-		ruby_current_node = lhs;</div><div class='del'>-		SET_CURRENT_SOURCE();</div><div class='del'>-		rb_call(CLASS_OF(recv), recv, lhs-&gt;nd_mid,</div><div class='del'>-			RARRAY(args)-&gt;len, RARRAY(args)-&gt;ptr, scope, self);</div><div class='add'>+		args = rb_eval(lhs-&gt;nd_args);</div><div class='add'>+		RARRAY(args)-&gt;ptr[RARRAY(args)-&gt;len-1] = val;</div><div class='add'>+		rb_apply(recv, lhs-&gt;nd_mid, args);</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'>-	rb_bug("bug in variable assignment");</div><div class='add'>+	Bug("bug in iterator variable asignment");</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_iterate(it_proc, data1, bl_proc, data2)</div><div class='del'>-    VALUE (*it_proc) _((VALUE)), (*bl_proc)(ANYARGS);</div><div class='del'>-    VALUE data1, data2;</div><div class='add'>+    VALUE (*it_proc)(), (*bl_proc)();</div><div class='add'>+    char *data1, *data2;</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='del'>-    volatile VALUE retval = Qnil;</div><div class='del'>-    NODE *node = NEW_IFUNC(bl_proc, data2);</div><div class='del'>-    VALUE self = ruby_top_self;</div><div class='add'>+    VALUE retval;</div><div class='add'>+    NODE *node = NEW_CFUNC(bl_proc, data2);</div><div class='add'>+    struct BLOCK block;</div><div class='add'>+</div><div class='add'>+    PUSH_ENV();</div><div class='add'>+    block.level = tag_level;</div><div class='add'>+    block.var = Qnil;</div><div class='add'>+    block.body = node;</div><div class='add'>+    block.env = *the_env;</div><div class='add'>+    the_env-&gt;block = &amp;block;</div><div class='add'>+    PUSH_TAG();</div><div class='ctx'> </div><div class='del'>-    PUSH_TAG(PROT_LOOP);</div><div class='del'>-    PUSH_BLOCK(0, node);</div><div class='del'>-    PUSH_ITER(ITER_PRE);</div><div class='ctx'>     state = EXEC_TAG();</div><div class='ctx'>     if (state == 0) {</div><div class='del'>-  iter_retry:</div><div class='add'>+	the_env-&gt;iterator = 1;</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='del'>-    }</div><div class='del'>-    POP_ITER();</div><div class='del'>-    POP_BLOCK();</div><div class='ctx'>     POP_TAG();</div><div class='add'>+    POP_ENV();</div><div class='add'>+</div><div class='add'>+    freenode(node);</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'>+      case IN_BLOCK|TAG_BREAK:</div><div class='add'>+	if (target_level != tag_level) {</div><div class='add'>+	    JUMP_TAG(state);</div><div class='add'>+	}</div><div class='add'>+	retval = Qnil;</div><div class='add'>+	break;</div><div class='add'>+      case IN_BLOCK|TAG_RETURN:</div><div class='add'>+	if (target_level == tag_level) {</div><div class='add'>+	    state = TAG_RETURN;</div><div class='add'>+	}</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='del'>-    return retval;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-handle_rescue(self, node)</div><div class='del'>-    VALUE self;</div><div class='del'>-    NODE *node;</div><div class='del'>-{</div><div class='del'>-    int argc; VALUE *argv; /* used in SETUP_ARGS */</div><div class='del'>-    TMP_PROTECT;</div><div class='del'>-</div><div class='del'>-    if (!node-&gt;nd_args) {</div><div class='del'>-	return rb_obj_is_kind_of(ruby_errinfo, rb_eStandardError);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    BEGIN_CALLARGS;</div><div class='del'>-    SETUP_ARGS(node-&gt;nd_args);</div><div class='del'>-    END_CALLARGS;</div><div class='ctx'> </div><div class='del'>-    while (argc--) {</div><div class='del'>-	if (!rb_obj_is_kind_of(argv[0], rb_cModule)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "class or module required for rescue clause");</div><div class='del'>-	}</div><div class='del'>-	if (RTEST(rb_funcall(*argv, eqq, 1, ruby_errinfo))) return 1;</div><div class='del'>-	argv++;</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='add'>+    return retval;</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_rescue2(VALUE (*b_proc)(ANYARGS), VALUE data1, VALUE (*r_proc)(ANYARGS), VALUE data2, ...)</div><div class='del'>-#else</div><div class='del'>-rb_rescue2(b_proc, data1, r_proc, data2, va_alist)</div><div class='del'>-    VALUE (*b_proc)(ANYARGS), (*r_proc)(ANYARGS);</div><div class='del'>-    VALUE data1, data2;</div><div class='del'>-    va_dcl</div><div class='del'>-#endif</div><div class='add'>+rb_resque(b_proc, data1, r_proc, data2)</div><div class='add'>+    VALUE (*b_proc)(), (*r_proc)();</div><div class='add'>+    char *data1, *data2;</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='del'>-    volatile VALUE result;</div><div class='del'>-    volatile VALUE e_info = ruby_errinfo;</div><div class='del'>-    volatile int handle = Qfalse;</div><div class='del'>-    VALUE eclass;</div><div class='del'>-    va_list args;</div><div class='add'>+    int go_out;</div><div class='add'>+    VALUE result;</div><div class='ctx'> </div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='add'>+    &amp;go_out;</div><div class='add'>+    go_out = 0;</div><div class='add'>+    PUSH_TAG();</div><div class='ctx'>     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='ctx'>       case 0:</div><div class='add'>+      retry_entry:</div><div class='ctx'> 	result = (*b_proc)(data1);</div><div class='ctx'> 	break;</div><div class='del'>-      case TAG_RAISE:</div><div class='del'>-	if (handle) break;</div><div class='del'>-	handle = Qfalse;</div><div class='del'>-	va_init_list(args, data2);</div><div class='del'>-	while ((eclass = va_arg(args, VALUE)) != 0) {</div><div class='del'>-	    if (rb_obj_is_kind_of(ruby_errinfo, eclass)) {</div><div class='del'>-		handle = Qtrue;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	va_end(args);</div><div class='ctx'> </div><div class='del'>-	if (handle) {</div><div class='del'>-	    state = 0;</div><div class='del'>-	    if (r_proc) {</div><div class='del'>-		result = (*r_proc)(data2, ruby_errinfo);</div><div class='add'>+      case TAG_FAIL:</div><div class='add'>+	if (r_proc) {</div><div class='add'>+	    PUSH_TAG();</div><div class='add'>+	    state = EXEC_TAG();</div><div class='add'>+	    if (state == 0) {</div><div class='add'>+		the_env-&gt;flags |= DURING_RESQUE;</div><div class='add'>+		result = (*r_proc)(data2);</div><div class='ctx'> 	    }</div><div class='del'>-	    else {</div><div class='del'>-		result = Qnil;</div><div class='add'>+	    POP_TAG();</div><div class='add'>+	    switch (state) {</div><div class='add'>+	      case TAG_RETRY:</div><div class='add'>+		goto retry_entry;</div><div class='add'>+	      case 0:</div><div class='add'>+		break;</div><div class='add'>+	      default:</div><div class='add'>+		go_out++;</div><div class='add'>+		break;</div><div class='ctx'> 	    }</div><div class='del'>-	    ruby_errinfo = e_info;</div><div class='ctx'> 	}</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    if (state) JUMP_TAG(state);</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_rescue(b_proc, data1, r_proc, data2)</div><div class='del'>-    VALUE (*b_proc)(), (*r_proc)();</div><div class='del'>-    VALUE data1, data2;</div><div class='del'>-{</div><div class='del'>-    return rb_rescue2(b_proc, data1, r_proc, data2, rb_eStandardError, (VALUE)0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE cont_protect;</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_protect(proc, data, state)</div><div class='del'>-    VALUE (*proc) _((VALUE));</div><div class='del'>-    VALUE data;</div><div class='del'>-    int *state;</div><div class='del'>-{</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='del'>-    int status;</div><div class='add'>+	if (state == 0) {</div><div class='add'>+	    errstr = errat = Qnil;</div><div class='add'>+	}</div><div class='add'>+	break;</div><div class='ctx'> </div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    cont_protect = (VALUE)rb_node_newnode(NODE_MEMO, cont_protect, 0, 0);</div><div class='del'>-    if ((status = EXEC_TAG()) == 0) {</div><div class='del'>-	result = (*proc)(data);</div><div class='add'>+      default:</div><div class='add'>+	break;</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='del'>-    if (state) {</div><div class='del'>-	*state = status;</div><div class='del'>-    }</div><div class='del'>-    if (status != 0) {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='add'>+    if (go_out) JUMP_TAG(state);</div><div class='ctx'> </div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_ensure(b_proc, data1, e_proc, data2)</div><div class='del'>-    VALUE (*b_proc)();</div><div class='del'>-    VALUE data1;</div><div class='del'>-    VALUE (*e_proc)();</div><div class='del'>-    VALUE data2;</div><div class='add'>+    VALUE (*b_proc)(), (*e_proc)();</div><div class='add'>+    char *data1, *data2;</div><div class='ctx'> {</div><div class='ctx'>     int state;</div><div class='del'>-    volatile VALUE result = Qnil;</div><div class='del'>-    VALUE retval;</div><div class='add'>+    VALUE result;</div><div class='ctx'> </div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='add'>+    PUSH_TAG();</div><div class='ctx'>     if ((state = EXEC_TAG()) == 0) {</div><div class='ctx'> 	result = (*b_proc)(data1);</div><div class='ctx'>     }</div><div class='ctx'>     POP_TAG();</div><div class='del'>-    retval = prot_tag ? prot_tag-&gt;retval : Qnil;	/* save retval */</div><div class='del'>-    if (!thread_no_ensure()) {</div><div class='del'>-	(*e_proc)(data2);</div><div class='del'>-    }</div><div class='del'>-    if (prot_tag) return_value(retval);</div><div class='del'>-    if (state) JUMP_TAG(state);</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_with_disable_interrupt(proc, data)</div><div class='del'>-    VALUE (*proc)();</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='del'>-    int status;</div><div class='del'>-</div><div class='del'>-    DEFER_INTS;</div><div class='del'>-    {</div><div class='del'>-	int thr_critical = rb_thread_critical;</div><div class='ctx'> </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'>+    (*e_proc)(data2);</div><div class='add'>+    if (state != 0) {</div><div class='add'>+	JUMP_TAG(state);</div><div class='ctx'>     }</div><div class='del'>-    ENABLE_INTS;</div><div class='del'>-    if (status) JUMP_TAG(status);</div><div class='del'>-</div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-stack_check()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_curr_thread;</div><div class='del'>-</div><div class='del'>-    if (!rb_thread_raised_p(th, RAISED_STACKOVERFLOW) &amp;&amp; ruby_stack_check()) {</div><div class='del'>-	rb_thread_raised_set(th, RAISED_STACKOVERFLOW);</div><div class='del'>-	rb_exc_raise(sysstack_error);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int last_call_status;</div><div class='del'>-</div><div class='del'>-#define CSTAT_PRIV  1</div><div class='del'>-#define CSTAT_PROT  2</div><div class='del'>-#define CSTAT_VCALL 4</div><div class='del'>-#define CSTAT_SUPER 8</div><div class='del'>-</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='add'>+struct st_table *new_idhash();</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_method_missing(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+static void</div><div class='add'>+rb_undefined(obj, id)</div><div class='ctx'>     VALUE obj;</div><div class='del'>-{</div><div class='ctx'>     ID id;</div><div class='del'>-    VALUE exc = rb_eNoMethodError;</div><div class='del'>-    const char *format = 0;</div><div class='del'>-    NODE *cnode = ruby_current_node;</div><div class='del'>-</div><div class='del'>-    if (argc == 0 || !SYMBOL_P(argv[0])) {</div><div class='del'>-	rb_raise(rb_eArgError, "no id given");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    stack_check();</div><div class='del'>-</div><div class='del'>-    id = SYM2ID(argv[0]);</div><div class='del'>-</div><div class='del'>-    if (last_call_status &amp; CSTAT_PRIV) {</div><div class='del'>-	format = "private method `%s' called for %s";</div><div class='del'>-    }</div><div class='del'>-    else if (last_call_status &amp; CSTAT_PROT) {</div><div class='del'>-	format = "protected method `%s' called for %s";</div><div class='del'>-    }</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    else if (last_call_status &amp; CSTAT_SUPER) {</div><div class='del'>-	format = "super: no superclass method `%s'";</div><div class='del'>-    }</div><div class='del'>-    if (!format) {</div><div class='del'>-	format = "undefined method `%s' for %s";</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ruby_current_node = cnode;</div><div class='del'>-    {</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='del'>-	rb_exc_raise(exc);</div><div class='del'>-    }</div><div class='del'>-</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'>-method_missing(obj, id, argc, argv, call_status)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    ID    id;</div><div class='del'>-    int   argc;</div><div class='del'>-    const VALUE *argv;</div><div class='del'>-    int   call_status;</div><div class='ctx'> {</div><div class='del'>-    VALUE *nargv;</div><div class='add'>+    VALUE desc = obj_as_string(obj);</div><div class='ctx'> </div><div class='del'>-    last_call_status = call_status;</div><div class='del'>-</div><div class='del'>-    if (id == missing) {</div><div class='del'>-	PUSH_FRAME();</div><div class='del'>-	rb_method_missing(argc, argv, obj);</div><div class='del'>-	POP_FRAME();</div><div class='del'>-    }</div><div class='del'>-    else if (id == ID_ALLOCATOR) {</div><div class='del'>-	rb_raise(rb_eTypeError, "allocator undefined for %s", rb_class2name(obj));</div><div class='del'>-    }</div><div class='del'>-    if (argc &lt; 0) {</div><div class='del'>-	VALUE tmp;</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 = 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='add'>+    if (RSTRING(desc)-&gt;len &gt; 160) {</div><div class='add'>+	desc = Fkrn_to_s(obj);</div><div class='ctx'>     }</div><div class='del'>-    nargv[0] = ID2SYM(id);</div><div class='del'>-    return rb_funcall2(obj, missing, argc+1, nargv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static inline VALUE</div><div class='del'>-call_cfunc(func, recv, len, argc, argv)</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    VALUE recv;</div><div class='del'>-    int len, argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    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='del'>-		 argc, len);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch (len) {</div><div class='del'>-      case -2:</div><div class='del'>-	return (*func)(recv, rb_ary_new4(argc, argv));</div><div class='del'>-	break;</div><div class='del'>-      case -1:</div><div class='del'>-	return (*func)(argc, argv, recv);</div><div class='del'>-	break;</div><div class='del'>-      case 0:</div><div class='del'>-	return (*func)(recv);</div><div class='del'>-	break;</div><div class='del'>-      case 1:</div><div class='del'>-	return (*func)(recv, argv[0]);</div><div class='del'>-	break;</div><div class='del'>-      case 2:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1]);</div><div class='del'>-	break;</div><div class='del'>-      case 3:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2]);</div><div class='del'>-	break;</div><div class='del'>-      case 4:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3]);</div><div class='del'>-	break;</div><div class='del'>-      case 5:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4]);</div><div class='del'>-	break;</div><div class='del'>-      case 6:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5]);</div><div class='del'>-	break;</div><div class='del'>-      case 7:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6]);</div><div class='del'>-	break;</div><div class='del'>-      case 8:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6], argv[7]);</div><div class='del'>-	break;</div><div class='del'>-      case 9:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6], argv[7], argv[8]);</div><div class='del'>-	break;</div><div class='del'>-      case 10:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6], argv[7], argv[8], argv[9]);</div><div class='del'>-	break;</div><div class='del'>-      case 11:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6], argv[7], argv[8], argv[9], argv[10]);</div><div class='del'>-	break;</div><div class='del'>-      case 12:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6], argv[7], argv[8], argv[9],</div><div class='del'>-		       argv[10], argv[11]);</div><div class='del'>-	break;</div><div class='del'>-      case 13:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6], argv[7], argv[8], argv[9], argv[10],</div><div class='del'>-		       argv[11], argv[12]);</div><div class='del'>-	break;</div><div class='del'>-      case 14:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6], argv[7], argv[8], argv[9], argv[10],</div><div class='del'>-		       argv[11], argv[12], argv[13]);</div><div class='del'>-	break;</div><div class='del'>-      case 15:</div><div class='del'>-	return (*func)(recv, argv[0], argv[1], argv[2], argv[3], argv[4],</div><div class='del'>-		       argv[5], argv[6], argv[7], argv[8], argv[9], argv[10],</div><div class='del'>-		       argv[11], argv[12], argv[13], argv[14]);</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	rb_raise(rb_eArgError, "too many arguments (%d)", len);</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='add'>+    Fail("undefined method `%s' for \"%s\"(%s)",</div><div class='add'>+	 rb_id2name(id),</div><div class='add'>+	 RSTRING(desc)-&gt;ptr,</div><div class='add'>+	 rb_class2name(CLASS_OF(obj)));</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='del'>-    VALUE klass, recv;</div><div class='del'>-    ID    id;</div><div class='del'>-    ID    oid;</div><div class='del'>-    int argc;			/* OK */</div><div class='del'>-    VALUE *argv;		/* OK */</div><div class='del'>-    NODE * volatile body;</div><div class='del'>-    int flags;</div><div class='add'>+rb_call(class, recv, mid, argc, argv)</div><div class='add'>+    struct RClass *class;</div><div class='add'>+    VALUE recv, *argv;</div><div class='add'>+    int argc;</div><div class='add'>+    ID mid;</div><div class='ctx'> {</div><div class='del'>-    NODE *b2;		/* OK */</div><div class='del'>-    volatile VALUE result = Qnil;</div><div class='del'>-    int itr;</div><div class='del'>-    static int tick;</div><div class='del'>-    TMP_PROTECT;</div><div class='del'>-    volatile int safe = -1;</div><div class='del'>-</div><div class='del'>-    if (NOEX_SAFE(flags) &gt; ruby_safe_level &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='del'>-    switch (ruby_iter-&gt;iter) {</div><div class='del'>-      case ITER_PRE:</div><div class='del'>-      case ITER_PAS:</div><div class='del'>-	itr = ITER_CUR;</div><div class='del'>-	break;</div><div class='del'>-      case ITER_CUR:</div><div class='del'>-      default:</div><div class='del'>-	itr = ITER_NOT;</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='add'>+    int state;</div><div class='add'>+    int go_out = 0;</div><div class='add'>+    int c = argc - 1;</div><div class='add'>+    NODE *body;</div><div class='add'>+    VALUE result;</div><div class='ctx'> </div><div class='del'>-    if ((++tick &amp; 0xff) == 0) {</div><div class='del'>-	CHECK_INTS;		/* better than nothing */</div><div class='del'>-	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='add'>+    &amp;go_out;</div><div class='add'>+    PUSH_ENV();</div><div class='add'>+    the_env-&gt;flags |= DURING_CALL;</div><div class='add'>+    the_env-&gt;argc = argc;</div><div class='add'>+    the_env-&gt;argv = argv;</div><div class='add'>+    Qself = recv;</div><div class='add'>+    if (argv) argv[0] = recv;</div><div class='add'>+    if (the_env-&gt;iterator != 0) the_env-&gt;iterator++;</div><div class='add'>+</div><div class='add'>+    if ((body = rb_get_method_body(class, mid, 1)) == Qnil) {</div><div class='add'>+	rb_undefined(recv, mid);</div><div class='ctx'>     }</div><div class='del'>-    PUSH_ITER(itr);</div><div class='del'>-    PUSH_FRAME();</div><div class='del'>-</div><div class='del'>-    ruby_frame-&gt;last_func = id;</div><div class='del'>-    ruby_frame-&gt;orig_func = oid;</div><div class='del'>-    ruby_frame-&gt;last_class = (flags &amp; NOEX_NOSUPER)?0:klass;</div><div class='del'>-    ruby_frame-&gt;self = recv;</div><div class='del'>-    ruby_frame-&gt;argc = argc;</div><div class='del'>-    ruby_frame-&gt;flags = 0;</div><div class='del'>-</div><div class='del'>-    switch (nd_type(body)) {</div><div class='del'>-      case NODE_CFUNC:</div><div class='del'>-	{</div><div class='del'>-	    int len = body-&gt;nd_argc;</div><div class='ctx'> </div><div class='del'>-	    if (len &lt; -2) {</div><div class='del'>-		rb_bug("bad argc (%d) specified for `%s(%s)'",</div><div class='del'>-		       len, rb_class2name(klass), rb_id2name(id));</div><div class='del'>-	    }</div><div class='del'>-	    if (event_hooks) {</div><div class='del'>-		int state;</div><div class='del'>-</div><div class='del'>-		EXEC_EVENT_HOOK(RUBY_EVENT_C_CALL, ruby_current_node,</div><div class='del'>-				recv, id, klass);</div><div class='del'>-		PUSH_TAG(PROT_FUNC);</div><div class='del'>-		if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-		    result = call_cfunc(body-&gt;nd_cfnc, recv, len, argc, argv);</div><div class='del'>-		}</div><div class='del'>-		POP_TAG();</div><div class='del'>-		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='del'>-		if (state) JUMP_TAG(state);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		result = call_cfunc(body-&gt;nd_cfnc, recv, len, argc, argv);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='add'>+    if (body-&gt;type == NODE_CFUNC) {</div><div class='add'>+	int len = body-&gt;nd_argc;</div><div class='ctx'> </div><div class='del'>-	/* for attr get/set */</div><div class='del'>-      case NODE_IVAR:</div><div class='del'>-	if (argc != 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);</div><div class='add'>+	if (len &gt;= 0 &amp;&amp; c != len) {</div><div class='add'>+	    Fail("Wrong # of arguments for(%d for %d)", c, body-&gt;nd_argc);</div><div class='ctx'> 	}</div><div class='del'>-	result = rb_attr_get(recv, body-&gt;nd_vid);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      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='del'>-      case NODE_ZSUPER:</div><div class='del'>-	result = rb_call_super(argc, argv);</div><div class='del'>-	break;</div><div class='ctx'> </div><div class='del'>-      case NODE_DMETHOD:</div><div class='del'>-	result = method_call(argc, argv, umethod_bind(body-&gt;nd_cval, recv));</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      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='add'>+	if (len == -2) {</div><div class='add'>+	    result = (*body-&gt;nd_cfnc)(recv, ary_new4(argc-1, argv+1));</div><div class='ctx'> 	}</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, ruby_current_node, recv, id, klass);</div><div class='add'>+	else if (len == -1) {</div><div class='add'>+	    result = (*body-&gt;nd_cfnc)(argc, argv);</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case NODE_SCOPE:</div><div class='del'>-	{</div><div class='del'>-	    int state;</div><div class='del'>-	    VALUE *local_vars;	/* OK */</div><div class='del'>-	    NODE *saved_cref = 0;</div><div class='del'>-</div><div class='del'>-	    PUSH_SCOPE();</div><div class='del'>-	    if (body-&gt;nd_rval) {</div><div class='del'>-		saved_cref = ruby_cref;</div><div class='del'>-		ruby_cref = (NODE*)body-&gt;nd_rval;</div><div class='del'>-	    }</div><div class='del'>-	    PUSH_CLASS(ruby_cbase);</div><div class='del'>-	    if (body-&gt;nd_tbl) {</div><div class='del'>-		local_vars = TMP_ALLOC(body-&gt;nd_tbl[0]+1);</div><div class='del'>-		*local_vars++ = (VALUE)body;</div><div class='del'>-		rb_mem_clear(local_vars, body-&gt;nd_tbl[0]);</div><div class='del'>-		ruby_scope-&gt;local_tbl = body-&gt;nd_tbl;</div><div class='del'>-		ruby_scope-&gt;local_vars = local_vars;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		local_vars = ruby_scope-&gt;local_vars = 0;</div><div class='del'>-		ruby_scope-&gt;local_tbl  = 0;</div><div class='del'>-	    }</div><div class='del'>-	    b2 = body = body-&gt;nd_next;</div><div class='del'>-</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='del'>-	    PUSH_VARS();</div><div class='del'>-	    PUSH_TAG(PROT_FUNC);</div><div class='del'>-	    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-		NODE *node = 0;</div><div class='del'>-		int i, nopt = 0;</div><div class='del'>-</div><div class='del'>-		if (nd_type(body) == NODE_ARGS) {</div><div class='del'>-		    node = body;</div><div class='del'>-		    body = 0;</div><div class='del'>-		}</div><div class='del'>-		else if (nd_type(body) == NODE_BLOCK) {</div><div class='del'>-		    node = body-&gt;nd_head;</div><div class='del'>-		    body = body-&gt;nd_next;</div><div class='del'>-		}</div><div class='del'>-		if (node) {</div><div class='del'>-		    if (nd_type(node) != NODE_ARGS) {</div><div class='del'>-			rb_bug("no argument-node");</div><div class='del'>-		    }</div><div class='del'>-</div><div class='del'>-		    i = node-&gt;nd_cnt;</div><div class='del'>-		    if (i &gt; argc) {</div><div class='del'>-			rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)",</div><div class='del'>-				 argc, i);</div><div class='del'>-		    }</div><div class='del'>-		    if (!node-&gt;nd_rest) {</div><div class='del'>-			NODE *optnode = node-&gt;nd_opt;</div><div class='del'>-</div><div class='del'>-			nopt = i;</div><div class='del'>-			while (optnode) {</div><div class='del'>-			    nopt++;</div><div class='del'>-			    optnode = optnode-&gt;nd_next;</div><div class='del'>-			}</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='del'>-			}</div><div class='del'>-		    }</div><div class='del'>-		    if (local_vars) {</div><div class='del'>-			if (i &gt; 0) {</div><div class='del'>-			    /* +2 for $_ and $~ */</div><div class='del'>-			    MEMCPY(local_vars+2, argv, VALUE, i);</div><div class='del'>-			}</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'>-			    ++i;</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'>-			    while (opt) {</div><div class='del'>-				opt = opt-&gt;nd_next;</div><div class='del'>-				++i;</div><div class='del'>-			    }</div><div class='del'>-			}</div><div class='del'>-		    }</div><div class='del'>-		    if (!node-&gt;nd_rest) {</div><div class='del'>-			i = nopt;</div><div class='del'>-		    }</div><div class='del'>-		    else {</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='del'>-			}</div><div class='del'>-			else {</div><div class='del'>-			    v = rb_ary_new2(0);</div><div class='del'>-			}</div><div class='del'>-			assign(recv, node-&gt;nd_rest, v, 1);</div><div class='del'>-		    }</div><div class='del'>-		    ruby_frame-&gt;argc = i;</div><div class='del'>-		}</div><div class='del'>-		if (event_hooks) {</div><div class='del'>-		    EXEC_EVENT_HOOK(RUBY_EVENT_CALL, b2, recv, id, klass);</div><div class='del'>-		}</div><div class='del'>-		result = rb_eval(recv, body);</div><div class='del'>-	    }</div><div class='del'>-	    else if (state == TAG_RETURN &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'>-	    POP_TAG();</div><div class='del'>-	    if (event_hooks) {</div><div class='del'>-		EXEC_EVENT_HOOK(RUBY_EVENT_RETURN, ruby_current_node, recv, id, klass);</div><div class='del'>-	    }</div><div class='del'>-	    POP_VARS();</div><div class='del'>-	    POP_CLASS();</div><div class='del'>-	    POP_SCOPE();</div><div class='del'>-	    ruby_cref = saved_cref;</div><div class='del'>-	    if (safe &gt;= 0) ruby_safe_level = safe;</div><div class='del'>-	    switch (state) {</div><div class='add'>+	else if (len &gt;= 0) {</div><div class='add'>+	    switch (c) {</div><div class='ctx'> 	      case 0:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv);</div><div class='ctx'> 		break;</div><div class='del'>-</div><div class='del'>-	      case TAG_BREAK:</div><div class='del'>-	      case TAG_RETURN:</div><div class='del'>-		JUMP_TAG(state);</div><div class='add'>+	      case 1:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1]);</div><div class='add'>+		break;</div><div class='add'>+	      case 2:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2]);</div><div class='add'>+		break;</div><div class='add'>+	      case 3:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3]);</div><div class='add'>+		break;</div><div class='add'>+	      case 4:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4]);</div><div class='add'>+		break;</div><div class='add'>+	      case 5:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5]);</div><div class='add'>+		break;</div><div class='add'>+	      case 6:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6]);</div><div class='add'>+		break;</div><div class='add'>+	      case 7:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7]);</div><div class='add'>+		break;</div><div class='add'>+	      case 8:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7], argv[8]);</div><div class='add'>+		break;</div><div class='add'>+	      case 9:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7], argv[8], argv[9]);</div><div class='add'>+		break;</div><div class='add'>+	      case 10:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[10]);</div><div class='add'>+		break;</div><div class='add'>+	      case 11:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[10], argv[11]);</div><div class='add'>+		break;</div><div class='add'>+	      case 12:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[10], argv[11], argv[12]);</div><div class='add'>+		break;</div><div class='add'>+	      case 13:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[10], argv[11], argv[12],</div><div class='add'>+					        argv[13]);</div><div class='add'>+		break;</div><div class='add'>+	      case 14:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[10], argv[11], argv[12],</div><div class='add'>+					        argv[13], argv[14]);</div><div class='add'>+		break;</div><div class='add'>+	      case 15:</div><div class='add'>+		result = (*body-&gt;nd_cfnc)(recv, argv[1], argv[2], argv[3],</div><div class='add'>+					        argv[4], argv[5], argv[6],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[7], argv[8], argv[9],</div><div class='add'>+					        argv[10], argv[11], argv[12],</div><div class='add'>+					        argv[13], argv[14], argv[15]);</div><div class='ctx'> 		break;</div><div class='del'>-</div><div class='del'>-	      case TAG_RETRY:</div><div class='del'>-		if (rb_block_given_p()) JUMP_TAG(state);</div><div class='del'>-		/* fall through */</div><div class='ctx'> 	      default:</div><div class='del'>-		jump_tag_but_local_jump(state, result);</div><div class='add'>+		Fail("too many arguments(%d)", len);</div><div class='ctx'> 		break;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	unknown_node(body);</div><div class='del'>-	break;</div><div class='add'>+	else {</div><div class='add'>+	    Bug("bad argc(%d) specified for `%s(%s)'",</div><div class='add'>+		len, rb_class2name(class), rb_id2name(mid));</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='del'>-    POP_FRAME();</div><div class='del'>-    POP_ITER();</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='add'>+    else {</div><div class='add'>+	the_env-&gt;file = sourcefile;</div><div class='add'>+	the_env-&gt;line = sourceline;</div><div class='add'>+	the_env-&gt;local_vars = Qnil;</div><div class='add'>+	the_env-&gt;local_tbl = Qnil;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_call(klass, recv, mid, argc, argv, scope, self)</div><div class='del'>-    VALUE klass, recv;</div><div class='del'>-    ID    mid;</div><div class='del'>-    int argc;			/* OK */</div><div class='del'>-    const VALUE *argv;		/* OK */</div><div class='del'>-    int scope;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    NODE  *body;		/* OK */</div><div class='del'>-    int    noex;</div><div class='del'>-    ID     id = mid;</div><div class='del'>-    struct cache_entry *ent;</div><div class='del'>-</div><div class='del'>-    if (!klass) {</div><div class='del'>-	rb_raise(rb_eNotImpError, "method `%s' called on terminated object (0x%lx)",</div><div class='del'>-		 rb_id2name(mid), recv);</div><div class='del'>-    }</div><div class='del'>-    /* is it in the method cache? */</div><div class='del'>-    ent = cache + EXPR1(klass, mid);</div><div class='del'>-    if (ent-&gt;mid == mid &amp;&amp; ent-&gt;klass == klass) {</div><div class='del'>-	if (!ent-&gt;method)</div><div class='del'>-	    return method_missing(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0);</div><div class='del'>-	klass = ent-&gt;origin;</div><div class='del'>-	id    = ent-&gt;mid0;</div><div class='del'>-	noex  = ent-&gt;noex;</div><div class='del'>-	body  = ent-&gt;method;</div><div class='del'>-    }</div><div class='del'>-    else if ((body = rb_get_method_body(&amp;klass, &amp;id, &amp;noex)) == 0) {</div><div class='del'>-	if (scope == 3) {</div><div class='del'>-	    return method_missing(recv, mid, argc, argv, CSTAT_SUPER);</div><div class='add'>+	PUSH_TAG();</div><div class='add'>+	switch (state = EXEC_TAG()) {</div><div class='add'>+	  case 0:</div><div class='add'>+	    result = rb_eval(body);</div><div class='add'>+	    break;</div><div class='add'>+	  case TAG_CONTINUE:</div><div class='add'>+	    Fatal("unexpected continue");</div><div class='add'>+	    break;</div><div class='add'>+	  case TAG_BREAK:</div><div class='add'>+	    Fatal("unexpected break");</div><div class='add'>+	    break;</div><div class='add'>+	  case TAG_REDO:</div><div class='add'>+	    Fatal("unexpected redo");</div><div class='add'>+	    break;</div><div class='add'>+	  case TAG_RETRY:</div><div class='add'>+	    Fatal("retry outside of protect clause");</div><div class='add'>+	    break;</div><div class='add'>+	  case TAG_RETURN:</div><div class='add'>+	    result = last_val;</div><div class='add'>+	    break;</div><div class='add'>+	  default:</div><div class='add'>+	    go_out++;</div><div class='ctx'> 	}</div><div class='del'>-	return method_missing(recv, mid, argc, argv, scope==2?CSTAT_VCALL:0);</div><div class='add'>+	POP_TAG();</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (mid != missing &amp;&amp; scope == 0) {</div><div class='del'>-	/* 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'>+    POP_ENV();</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='del'>-	    VALUE defined_class = klass;</div><div class='add'>+    if (go_out) JUMP_TAG(state);</div><div class='ctx'> </div><div class='del'>-	    if (self == Qundef) self = ruby_frame-&gt;self;</div><div class='del'>-	    if (TYPE(defined_class) == T_ICLASS) {</div><div class='del'>-		defined_class = RBASIC(defined_class)-&gt;klass;</div><div class='del'>-	    }</div><div class='del'>-	    if (!rb_obj_is_kind_of(self, rb_class_real(defined_class)))</div><div class='del'>-		return method_missing(recv, mid, argc, argv, CSTAT_PROT);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_call0(klass, recv, mid, id, argc, argv, body, noex);</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='ctx'> rb_apply(recv, mid, args)</div><div class='del'>-    VALUE recv;</div><div class='add'>+    VALUE recv, args;</div><div class='ctx'>     ID mid;</div><div class='del'>-    VALUE args;</div><div class='ctx'> {</div><div class='del'>-    int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='add'>+    int argc, i;</div><div class='ctx'> </div><div class='del'>-    argc = RARRAY(args)-&gt;len; /* Assigns LONG, but argc is INT */</div><div class='del'>-    argv = ALLOCA_N(VALUE, argc);</div><div class='del'>-    MEMCPY(argv, RARRAY(args)-&gt;ptr, VALUE, argc);</div><div class='del'>-    return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1, Qundef);</div><div class='add'>+    argc = RARRAY(args)-&gt;len + 1;</div><div class='add'>+    argv = (VALUE*)alloca(sizeof(VALUE)*argc);</div><div class='add'>+    for (i=1;i&lt;argc;i++) {</div><div class='add'>+	argv[i] = RARRAY(args)-&gt;ptr[i-1];</div><div class='add'>+    }</div><div class='add'>+    argv[0] = Qnil;</div><div class='add'>+    return rb_call(CLASS_OF(recv), recv, mid, argc, argv);</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='del'>-static VALUE</div><div class='del'>-rb_f_send(argc, argv, recv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE recv;</div><div class='add'>+VALUE</div><div class='add'>+Fapply(recv, args)</div><div class='add'>+    VALUE recv, args;</div><div class='ctx'> {</div><div class='del'>-    VALUE vid;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) rb_raise(rb_eArgError, "no method name given");</div><div class='del'>-</div><div class='del'>-    vid = *argv++; argc--;</div><div class='del'>-    PUSH_ITER(rb_block_given_p()?ITER_PRE:ITER_NOT);</div><div class='del'>-    vid = rb_call(CLASS_OF(recv), recv, rb_to_id(vid), argc, argv, 1, Qundef);</div><div class='del'>-    POP_ITER();</div><div class='del'>-</div><div class='del'>-    return vid;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-vafuncall(recv, mid, n, ar)</div><div class='del'>-    VALUE recv;</div><div class='add'>+    VALUE vid, rest;</div><div class='ctx'>     ID mid;</div><div class='del'>-    int n;</div><div class='del'>-    va_list *ar;</div><div class='del'>-{</div><div class='del'>-    VALUE *argv;</div><div class='del'>-</div><div class='del'>-    if (n &gt; 0) {</div><div class='del'>-	long i;</div><div class='del'>-</div><div class='del'>-	argv = ALLOCA_N(VALUE, n);</div><div class='ctx'> </div><div class='del'>-	for (i=0;i&lt;n;i++) {</div><div class='del'>-	    argv[i] = va_arg(*ar, VALUE);</div><div class='del'>-	}</div><div class='del'>-	va_end(*ar);</div><div class='add'>+    rb_scan_args(args, "1*", &amp;vid, &amp;rest);</div><div class='add'>+    if (TYPE(vid) == T_STRING) {</div><div class='add'>+	mid = rb_intern(RSTRING(vid)-&gt;ptr);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	argv = 0;</div><div class='add'>+	mid = NUM2INT(vid);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return rb_call(CLASS_OF(recv), recv, mid, n, argv, 1, Qundef);</div><div class='add'>+    return rb_apply(recv, mid, rest);</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_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='add'>+#include &lt;varargs.h&gt;</div><div class='ctx'> </div><div class='ctx'> 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='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='ctx'>     va_dcl</div><div class='del'>-#endif</div><div class='ctx'> {</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='del'>-    int status;</div><div class='ctx'>     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='del'>-rb_funcall2(recv, mid, argc, argv)</div><div class='del'>-    VALUE recv;</div><div class='del'>-    ID mid;</div><div class='del'>-    int argc;</div><div class='del'>-    const VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1, Qundef);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_funcall3(recv, mid, argc, argv)</div><div class='del'>-    VALUE recv;</div><div class='del'>-    ID mid;</div><div class='del'>-    int argc;</div><div class='del'>-    const VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 0, Qundef);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_call_super(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    const VALUE *argv;</div><div class='del'>-{</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='del'>-</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='del'>-    }</div><div class='del'>-</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, Qundef);</div><div class='del'>-    POP_ITER();</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-backtrace(lev)</div><div class='del'>-    int lev;</div><div class='del'>-{</div><div class='del'>-    struct FRAME *frame = ruby_frame;</div><div class='del'>-    char buf[BUFSIZ];</div><div class='del'>-    VALUE ary;</div><div class='del'>-    NODE *n;</div><div class='del'>-</div><div class='del'>-    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='del'>-    if (lev &lt; 0) {</div><div class='del'>-	ruby_set_current_source();</div><div class='del'>-	if (frame-&gt;last_func) {</div><div class='del'>-	    snprintf(buf, BUFSIZ, "%s:%d:in `%s'",</div><div class='del'>-		     ruby_sourcefile, ruby_sourceline,</div><div class='del'>-		     rb_id2name(frame-&gt;last_func));</div><div class='del'>-	}</div><div class='del'>-	else if (ruby_sourceline == 0) {</div><div class='del'>-	    snprintf(buf, BUFSIZ, "%s", ruby_sourcefile);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    snprintf(buf, BUFSIZ, "%s:%d", ruby_sourcefile, ruby_sourceline);</div><div class='del'>-	}</div><div class='del'>-	rb_ary_push(ary, rb_str_new2(buf));</div><div class='del'>-	if (lev &lt; -1) return ary;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	while (lev-- &gt; 0) {</div><div class='del'>-	    frame = frame-&gt;prev;</div><div class='del'>-	    if (!frame) {</div><div class='del'>-		ary = Qnil;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    for (; frame &amp;&amp; (n = frame-&gt;node); frame = frame-&gt;prev) {</div><div class='del'>-	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='del'>-	    snprintf(buf, BUFSIZ, "%s:%d:in `%s'",</div><div class='del'>-		     n-&gt;nd_file, nd_line(n),</div><div class='del'>-		     rb_id2name(frame-&gt;prev-&gt;last_func));</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    snprintf(buf, BUFSIZ, "%s:%d", n-&gt;nd_file, nd_line(n));</div><div class='del'>-	}</div><div class='del'>-	rb_ary_push(ary, rb_str_new2(buf));</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'>- *  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='del'>-static VALUE</div><div class='del'>-rb_f_caller(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE level;</div><div class='del'>-    int lev;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;level);</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(level)) lev = 1;</div><div class='del'>-    else lev = NUM2INT(level);</div><div class='del'>-    if (lev &lt; 0) rb_raise(rb_eArgError, "negative level (%d)", lev);</div><div class='del'>-</div><div class='del'>-    return backtrace(lev);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_backtrace()</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = backtrace(-1);</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	printf("\tfrom %s\n", RSTRING(RARRAY(ary)-&gt;ptr[i])-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-make_backtrace()</div><div class='del'>-{</div><div class='del'>-    return backtrace(-1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-ID</div><div class='del'>-rb_frame_last_func()</div><div class='del'>-{</div><div class='del'>-    return ruby_frame-&gt;last_func;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-ID</div><div class='del'>-rb_frame_this_func()</div><div class='del'>-{</div><div class='del'>-    return ruby_frame-&gt;orig_func;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static NODE*</div><div class='del'>-compile(src, file, line)</div><div class='del'>-    VALUE src;</div><div class='del'>-    const char *file;</div><div class='del'>-    int line;</div><div class='del'>-{</div><div class='del'>-    NODE *node;</div><div class='del'>-    int critical;</div><div class='del'>-</div><div class='del'>-    ruby_nerrs = 0;</div><div class='del'>-    StringValue(src);</div><div class='del'>-    critical = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-    node = rb_compile_string(file, src, line);</div><div class='del'>-    rb_thread_critical = critical;</div><div class='del'>-</div><div class='del'>-    if (ruby_nerrs == 0) return node;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-eval(self, src, scope, file, line)</div><div class='del'>-    VALUE self, src, scope;</div><div class='del'>-    const char *file;</div><div class='del'>-    int line;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *data = NULL;</div><div class='del'>-    volatile VALUE result = Qnil;</div><div class='del'>-    struct SCOPE * volatile old_scope;</div><div class='del'>-    struct BLOCK * volatile old_block;</div><div class='del'>-    struct RVarmap * volatile old_dyna_vars;</div><div class='del'>-    VALUE volatile old_cref;</div><div class='del'>-    int volatile old_vmode;</div><div class='del'>-    volatile VALUE old_wrapper;</div><div class='del'>-    struct FRAME frame;</div><div class='del'>-    NODE *nodesave = ruby_current_node;</div><div class='del'>-    volatile int iter = ruby_frame-&gt;iter;</div><div class='del'>-    volatile int safe = ruby_safe_level;</div><div class='del'>-    int state;</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(scope)) {</div><div class='del'>-	if (!rb_obj_is_proc(scope)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Binding)",</div><div class='del'>-		     rb_obj_classname(scope));</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	Data_Get_Struct(scope, struct BLOCK, data);</div><div class='del'>-	/* PUSH BLOCK from data */</div><div class='del'>-	frame = data-&gt;frame;</div><div class='del'>-	frame.tmp = ruby_frame;	/* gc protection */</div><div class='del'>-	ruby_frame = &amp;(frame);</div><div class='del'>-	old_scope = ruby_scope;</div><div class='del'>-	ruby_scope = data-&gt;scope;</div><div class='del'>-	old_block = ruby_block;</div><div class='del'>-	ruby_block = data-&gt;prev;</div><div class='del'>-	old_dyna_vars = ruby_dyna_vars;</div><div class='del'>-	ruby_dyna_vars = data-&gt;dyna_vars;</div><div class='del'>-	old_vmode = scope_vmode;</div><div class='del'>-	scope_vmode = data-&gt;vmode;</div><div class='del'>-	old_cref = (VALUE)ruby_cref;</div><div class='del'>-	ruby_cref = data-&gt;cref;</div><div class='del'>-	old_wrapper = ruby_wrapper;</div><div class='del'>-	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='del'>-	    if (!file) file = "__builtin__";</div><div class='del'>-	    line = nd_line(data-&gt;frame.node);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	self = data-&gt;self;</div><div class='del'>-	ruby_frame-&gt;iter = data-&gt;iter;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (ruby_frame-&gt;prev) {</div><div class='del'>-	    ruby_frame-&gt;iter = ruby_frame-&gt;prev-&gt;iter;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (file == 0) {</div><div class='del'>-	ruby_set_current_source();</div><div class='del'>-	file = ruby_sourcefile;</div><div class='del'>-	line = ruby_sourceline;</div><div class='del'>-    }</div><div class='del'>-    PUSH_CLASS(data ? data-&gt;klass : ruby_class);</div><div class='del'>-    ruby_in_eval++;</div><div class='del'>-    if (TYPE(ruby_class) == T_ICLASS) {</div><div class='del'>-	ruby_class = RBASIC(ruby_class)-&gt;klass;</div><div class='del'>-    }</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	NODE *node;</div><div class='del'>-</div><div class='del'>-	ruby_safe_level = 0;</div><div class='del'>-	result = ruby_errinfo;</div><div class='del'>-	ruby_errinfo = Qnil;</div><div class='del'>-	node = compile(src, file, line);</div><div class='del'>-	ruby_safe_level = safe;</div><div class='del'>-	if (ruby_nerrs &gt; 0) {</div><div class='del'>-	    compile_error(0);</div><div class='del'>-	}</div><div class='del'>-	if (!NIL_P(result)) ruby_errinfo = result;</div><div class='del'>-	result = eval_node(self, node);</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    POP_CLASS();</div><div class='del'>-    ruby_in_eval--;</div><div class='del'>-    if (!NIL_P(scope)) {</div><div class='del'>-	int dont_recycle = ruby_scope-&gt;flags &amp; SCOPE_DONT_RECYCLE;</div><div class='del'>-</div><div class='del'>-	ruby_wrapper = old_wrapper;</div><div class='del'>-	ruby_cref  = (NODE*)old_cref;</div><div class='del'>-	ruby_frame = frame.tmp;</div><div class='del'>-	ruby_scope = old_scope;</div><div class='del'>-	ruby_block = old_block;</div><div class='del'>-	ruby_dyna_vars = old_dyna_vars;</div><div class='del'>-	data-&gt;vmode = scope_vmode; /* write back visibility mode */</div><div class='del'>-	scope_vmode = old_vmode;</div><div class='del'>-	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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	ruby_frame-&gt;iter = iter;</div><div class='del'>-    }</div><div class='del'>-    ruby_current_node = nodesave;</div><div class='del'>-    ruby_set_current_source();</div><div class='del'>-    if (state) {</div><div class='del'>-	if (state == TAG_RAISE) {</div><div class='del'>-	    if (strcmp(file, "(eval)") == 0) {</div><div class='del'>-		VALUE mesg, errat, bt2;</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 &amp;&amp;</div><div class='del'>-		    (bt2 = backtrace(-2), RARRAY_LEN(bt2) &gt; 0)) {</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_PTR(errat)[0]);</div><div class='del'>-		    }</div><div class='del'>-		    RARRAY_PTR(errat)[0] = RARRAY_PTR(bt2)[0];</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    rb_exc_raise(ruby_errinfo);</div><div class='del'>-	}</div><div class='del'>-	JUMP_TAG(state);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='add'>+    if (n &gt; 0) {</div><div class='add'>+	int i;</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='add'>+	argc = n + 1;</div><div class='add'>+	argv = (VALUE*)alloca(sizeof(VALUE)*argc);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_f_eval(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 src, scope, vfile, vline;</div><div class='del'>-    const char *file = "(eval)";</div><div class='del'>-    int line = 1;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "13", &amp;src, &amp;scope, &amp;vfile, &amp;vline);</div><div class='del'>-    if (ruby_safe_level &gt;= 4) {</div><div class='del'>-	StringValue(src);</div><div class='del'>-	if (!NIL_P(scope) &amp;&amp; !OBJ_TAINTED(scope)) {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "Insecure: can't modify trusted binding");</div><div class='add'>+	va_start(ar);</div><div class='add'>+	for (i=1;i&lt;argc;i++) {</div><div class='add'>+	    argv[i] = va_arg(ar, VALUE);</div><div class='ctx'> 	}</div><div class='add'>+	argv[0] = Qnil;</div><div class='add'>+	va_end(ar);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	SafeStringValue(src);</div><div class='del'>-    }</div><div class='del'>-    if (argc &gt;= 3) {</div><div class='del'>-	StringValue(vfile);</div><div class='del'>-    }</div><div class='del'>-    if (argc &gt;= 4) {</div><div class='del'>-	line = NUM2INT(vline);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(vfile)) file = RSTRING(vfile)-&gt;ptr;</div><div class='del'>-    if (NIL_P(scope) &amp;&amp; ruby_frame-&gt;prev) {</div><div class='del'>-	struct FRAME *prev;</div><div class='del'>-	VALUE val;</div><div class='del'>-</div><div class='del'>-	prev = ruby_frame;</div><div class='del'>-	PUSH_FRAME();</div><div class='del'>-	*ruby_frame = *prev-&gt;prev;</div><div class='del'>-	ruby_frame-&gt;prev = prev;</div><div class='del'>-	val = eval(self, src, scope, file, line);</div><div class='del'>-	POP_FRAME();</div><div class='del'>-</div><div class='del'>-	return val;</div><div class='del'>-    }</div><div class='del'>-    return eval(self, src, scope, file, line);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* function to call func under the specified class/module context */</div><div class='del'>-static VALUE</div><div class='del'>-exec_under(func, under, cbase, args)</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    VALUE under, cbase;</div><div class='del'>-    void *args;</div><div class='del'>-{</div><div class='del'>-    VALUE val = Qnil;		/* OK */</div><div class='del'>-    int state;</div><div class='del'>-    int mode;</div><div class='del'>-    struct FRAME *f = ruby_frame;</div><div class='del'>-</div><div class='del'>-    PUSH_CLASS(under);</div><div class='del'>-    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='del'>-    if (cbase) {</div><div class='del'>-	PUSH_CREF(cbase);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    mode = scope_vmode;</div><div class='del'>-    SCOPE_SET(SCOPE_PUBLIC);</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	val = (*func)(args);</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    if (cbase) POP_CREF();</div><div class='del'>-    SCOPE_SET(mode);</div><div class='del'>-    POP_FRAME();</div><div class='del'>-    POP_CLASS();</div><div class='del'>-    if (state) JUMP_TAG(state);</div><div class='del'>-</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-eval_under_i(args)</div><div class='del'>-    VALUE *args;</div><div class='del'>-{</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='del'>-    return eval(args[0], args[1], Qnil, (char*)args[2], (int)args[3]);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* string eval under the class/module context */</div><div class='del'>-static VALUE</div><div class='del'>-eval_under(under, self, src, file, line)</div><div class='del'>-    VALUE under, self, src;</div><div class='del'>-    const char *file;</div><div class='del'>-    int line;</div><div class='del'>-{</div><div class='del'>-    VALUE args[4];</div><div class='del'>-</div><div class='del'>-    if (ruby_safe_level &gt;= 4) {</div><div class='del'>-	StringValue(src);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	SafeStringValue(src);</div><div class='add'>+	argc = 1;</div><div class='add'>+	argv = Qnil;</div><div class='ctx'>     }</div><div class='del'>-    args[0] = self;</div><div class='del'>-    args[1] = src;</div><div class='del'>-    args[2] = (VALUE)file;</div><div class='del'>-    args[3] = (VALUE)line;</div><div class='del'>-    return exec_under(eval_under_i, under, under, args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-yield_under_i(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_yield_0(self, self, ruby_class, YIELD_PUBLIC_DEF, Qfalse);</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-yield_args_under_i(vinfo)</div><div class='del'>-    VALUE vinfo;</div><div class='del'>-{</div><div class='del'>-    VALUE *info = (VALUE *)vinfo;</div><div class='del'>-</div><div class='del'>-    return rb_yield_0(info[0], info[1], ruby_class, YIELD_PUBLIC_DEF, Qtrue);</div><div class='add'>+    return rb_call(CLASS_OF(recv), recv, mid, argc, argv);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/* block eval under the class/module context */</div><div class='del'>-static VALUE</div><div class='del'>-yield_under(under, self, args)</div><div class='del'>-    VALUE under, self, args;</div><div class='del'>-{</div><div class='del'>-    if (args == Qundef) {</div><div class='del'>-	return exec_under(yield_under_i, under, 0, self);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE info[2] = { args, self };</div><div class='del'>-</div><div class='del'>-	return exec_under(yield_args_under_i, under, 0, (VALUE)info);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-specific_eval(argc, argv, klass, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass, self;</div><div class='del'>-{</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	if (argc &gt; 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);</div><div class='del'>-	}</div><div class='del'>-	return yield_under(klass, self, Qundef);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	const char *file = "(eval)";</div><div class='del'>-	int   line = 1;</div><div class='del'>-</div><div class='del'>-	if (argc == 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "block not supplied");</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    if (ruby_safe_level &gt;= 4) {</div><div class='del'>-		StringValue(argv[0]);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		SafeStringValue(argv[0]);</div><div class='del'>-	    }</div><div class='del'>-	    if (argc &gt; 3) {</div><div class='del'>-		rb_raise(rb_eArgError, "wrong number of arguments: %s(src) or %s{..}",</div><div class='del'>-			 rb_id2name(ruby_frame-&gt;last_func),</div><div class='del'>-			 rb_id2name(ruby_frame-&gt;last_func));</div><div class='del'>-	    }</div><div class='del'>-	    if (argc &gt; 2) line = NUM2INT(argv[2]);</div><div class='del'>-	    if (argc &gt; 1) {</div><div class='del'>-		file = StringValuePtr(argv[1]);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	return eval_under(klass, self, argv[0], file, line);</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'>- *     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='del'>-rb_obj_instance_eval(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='add'>+Fcaller(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='del'>-    VALUE klass;</div><div class='add'>+    VALUE level, file, res, ary;</div><div class='add'>+    int lev;</div><div class='add'>+    struct ENVIRON *e;</div><div class='ctx'> </div><div class='del'>-    if (SPECIAL_CONST_P(self)) {</div><div class='del'>-	klass = Qnil;</div><div class='add'>+    rb_scan_args(args, "01", &amp;level);</div><div class='add'>+    if (level == Qnil) {</div><div class='add'>+	lev = 1;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	klass = rb_singleton_class(self);</div><div class='add'>+	lev = FIX2UINT(level);</div><div class='ctx'>     }</div><div class='del'>-    return specific_eval(argc, argv, klass, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.instance_exec(arg...) {|var...| block }                       =&gt; obj</div><div class='del'>- *</div><div class='del'>- *  Executes the given block within the context of the receiver</div><div class='del'>- *  (_obj_). In order to set the context, the variable +self+ is set</div><div class='del'>- *  to _obj_ while the code is executing, giving the code access to</div><div class='del'>- *  _obj_'s instance variables.  Arguments are passed as block parameters.</div><div class='del'>- *</div><div class='del'>- *     class KlassWithSecret</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 = KlassWithSecret.new</div><div class='del'>- *     k.instance_exec(5) {|x| @secret+x }   #=&gt; 104</div><div class='del'>- */</div><div class='add'>+    if (lev &lt; 0) Fail("negative level: %d", lev);</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_obj_instance_exec(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 klass;</div><div class='add'>+    e = the_env;</div><div class='ctx'> </div><div class='del'>-    if (SPECIAL_CONST_P(self)) {</div><div class='del'>-	klass = Qnil;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	klass = rb_singleton_class(self);</div><div class='add'>+    while (lev &gt; 0) {</div><div class='add'>+	e = e-&gt;prev;</div><div class='add'>+	if (e == Qnil) Fail("no caller");</div><div class='add'>+	if (!(e-&gt;flags &amp; DURING_CALL)) continue;</div><div class='add'>+	lev--;</div><div class='ctx'>     }</div><div class='del'>-    return yield_under(klass, self, rb_ary_new4(argc, argv));</div><div class='del'>-}</div><div class='add'>+    if (e-&gt;file == Qnil) Fail("initial frame");</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='add'>+    file = str_new2(e-&gt;file);</div><div class='add'>+    ary = e-&gt;argv?ary_new4(e-&gt;argc, e-&gt;argv):ary_new3(1, Qself);</div><div class='add'>+    res = ary_new3(4, file, INT2FIX(e-&gt;line),</div><div class='add'>+		   str_new2(rb_id2name(e-&gt;last_func)), ary);</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_mod_module_eval(argc, argv, mod)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='del'>-{</div><div class='del'>-    return specific_eval(argc, argv, mod, mod);</div><div class='add'>+    return res;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     mod.module_exec(arg...) {|var...| block }       =&gt; obj</div><div class='del'>- *     mod.class_exec(arg...) {|var...| block }        =&gt; obj</div><div class='del'>- *</div><div class='del'>- *  Evaluates the given block in the context of the class/module.</div><div class='del'>- *  The method defined in the block will belong to the receiver.</div><div class='del'>- *</div><div class='del'>- *     class Thing</div><div class='del'>- *     end</div><div class='del'>- *     Thing.class_exec{</div><div class='del'>- *       def hello() "Hello there!" end</div><div class='del'>- *     }</div><div class='del'>- *     puts Thing.new.hello()</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'>- */</div><div class='add'>+int in_eval = 0;</div><div class='add'>+extern int nerrs;</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_mod_module_exec(argc, argv, mod)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE mod;</div><div class='del'>-{</div><div class='del'>-    return yield_under(mod, mod, rb_ary_new4(argc, argv));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE rb_load_path;</div><div class='del'>-</div><div class='del'>-NORETURN(static void load_failed _((VALUE)));</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_load(fname, wrap)</div><div class='del'>-    VALUE fname;</div><div class='del'>-    int wrap;</div><div class='add'>+Feval(obj, src)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *src;</div><div class='ctx'> {</div><div class='del'>-    VALUE tmp;</div><div class='add'>+    VALUE result;</div><div class='ctx'>     int state;</div><div class='del'>-    volatile int prohibit_int = rb_prohibit_interrupt;</div><div class='del'>-    volatile ID last_func;</div><div class='del'>-    volatile VALUE wrapper = ruby_wrapper;</div><div class='del'>-    volatile VALUE self = ruby_top_self;</div><div class='del'>-    NODE *volatile last_node;</div><div class='del'>-    NODE *saved_cref = ruby_cref;</div><div class='del'>-</div><div class='del'>-    if (wrap &amp;&amp; ruby_safe_level &gt;= 4) {</div><div class='del'>-	StringValue(fname);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	SafeStringValue(fname);</div><div class='del'>-    }</div><div class='del'>-    fname = rb_str_new4(fname);</div><div class='del'>-    tmp = rb_find_file(fname);</div><div class='del'>-    if (!tmp) {</div><div class='del'>-	load_failed(fname);</div><div class='del'>-    }</div><div class='del'>-    fname = tmp;</div><div class='del'>-</div><div class='del'>-    ruby_errinfo = Qnil;	/* ensure */</div><div class='del'>-    PUSH_VARS();</div><div class='del'>-    PUSH_CLASS(ruby_wrapper);</div><div class='del'>-    ruby_cref = ruby_top_cref;</div><div class='del'>-    if (!wrap) {</div><div class='del'>-	rb_secure(4);		/* should alter global state */</div><div class='del'>-	ruby_class = rb_cObject;</div><div class='del'>-	ruby_wrapper = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	/* load in anonymous module as toplevel */</div><div class='del'>-	ruby_class = ruby_wrapper = rb_module_new();</div><div class='del'>-	self = rb_obj_clone(ruby_top_self);</div><div class='del'>-	rb_extend_object(self, ruby_wrapper);</div><div class='del'>-	PUSH_CREF(ruby_wrapper);</div><div class='del'>-    }</div><div class='del'>-    PUSH_ITER(ITER_NOT);</div><div class='del'>-    PUSH_FRAME();</div><div class='del'>-    ruby_frame-&gt;last_func = 0;</div><div class='del'>-    ruby_frame-&gt;last_class = 0;</div><div class='del'>-    ruby_frame-&gt;self = self;</div><div class='del'>-    PUSH_SCOPE();</div><div class='del'>-    /* default visibility is private at loading toplevel */</div><div class='del'>-    SCOPE_SET(SCOPE_PRIVATE);</div><div class='del'>-    PUSH_TAG(PROT_NONE);</div><div class='del'>-    state = EXEC_TAG();</div><div class='del'>-    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='del'>-    if (state == 0) {</div><div class='del'>-	NODE *node;</div><div class='del'>-	volatile int critical;</div><div class='del'>-</div><div class='del'>-	DEFER_INTS;</div><div class='del'>-	ruby_in_eval++;</div><div class='del'>-	critical = rb_thread_critical;</div><div class='del'>-	rb_thread_critical = Qtrue;</div><div class='del'>-	rb_load_file(RSTRING(fname)-&gt;ptr);</div><div class='del'>-	ruby_in_eval--;</div><div class='del'>-	node = ruby_eval_tree;</div><div class='del'>-	rb_thread_critical = critical;</div><div class='del'>-	ALLOW_INTS;</div><div class='del'>-	if (ruby_nerrs == 0) {</div><div class='del'>-	    eval_node(self, node);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    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='del'>-    if (ruby_scope-&gt;flags == SCOPE_ALLOCA &amp;&amp; ruby_class == rb_cObject) {</div><div class='del'>-	if (ruby_scope-&gt;local_tbl) /* toplevel was empty */</div><div class='del'>-	    free(ruby_scope-&gt;local_tbl);</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    rb_prohibit_interrupt = prohibit_int;</div><div class='del'>-    ruby_cref = saved_cref;</div><div class='del'>-    POP_SCOPE();</div><div class='del'>-    POP_FRAME();</div><div class='del'>-    POP_ITER();</div><div class='del'>-    POP_CLASS();</div><div class='del'>-    POP_VARS();</div><div class='del'>-    ruby_wrapper = wrapper;</div><div class='del'>-    if (ruby_nerrs &gt; 0) {</div><div class='del'>-	ruby_nerrs = 0;</div><div class='del'>-	rb_exc_raise(ruby_errinfo);</div><div class='del'>-    }</div><div class='del'>-    if (state) jump_tag_but_local_jump(state, Qundef);</div><div class='del'>-    if (!NIL_P(ruby_errinfo))	/* exception during load */</div><div class='del'>-	rb_exc_raise(ruby_errinfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_load_protect(fname, wrap, state)</div><div class='del'>-    VALUE fname;</div><div class='del'>-    int wrap;</div><div class='del'>-    int *state;</div><div class='del'>-{</div><div class='del'>-    int status;</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'>-	rb_load(fname, wrap);</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    if (state) *state = status;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_f_load(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE fname, wrap;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;fname, &amp;wrap);</div><div class='del'>-    rb_load(fname, RTEST(wrap));</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE ruby_dln_librefs;</div><div class='del'>-static VALUE rb_features;</div><div class='del'>-static st_table *loading_tbl;</div><div class='del'>-</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'>-</div><div class='del'>-static const char *const loadable_ext[] = {</div><div class='del'>-    ".rb", DLEXT,</div><div class='del'>-#ifdef DLEXT2</div><div class='del'>-    DLEXT2,</div><div class='del'>-#endif</div><div class='del'>-    0</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int rb_feature_p _((const char *, const char *, int));</div><div class='del'>-static int search_required _((VALUE, VALUE *, VALUE *));</div><div class='add'>+    NODE *node;</div><div class='add'>+    char *oldsrc = sourcefile;</div><div class='ctx'> </div><div class='del'>-static int</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='del'>-{</div><div class='del'>-    VALUE v;</div><div class='del'>-    const char *f, *e;</div><div class='del'>-    long i, len, elen;</div><div class='add'>+    Check_Type(src, T_STRING);</div><div class='add'>+    PUSH_TAG();</div><div class='add'>+    PUSH_ENV();</div><div class='add'>+    the_env-&gt;in_eval = 1;</div><div class='add'>+    node = eval_tree;</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='add'>+    if (the_env-&gt;prev) {</div><div class='add'>+	the_class = the_env-&gt;prev-&gt;current_module;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	len = strlen(feature);</div><div class='del'>-	elen = 0;</div><div class='del'>-    }</div><div class='del'>-    for (i = 0; i &lt; RARRAY_LEN(rb_features); ++i) {</div><div class='del'>-	v = RARRAY_PTR(rb_features)[i];</div><div class='del'>-	f = StringValuePtr(v);</div><div class='del'>-	if (RSTRING_LEN(v) &lt; len || strncmp(f, feature, len) != 0)</div><div class='del'>-	    continue;</div><div class='del'>-	if (!*(e = f + len)) {</div><div class='del'>-	    if (ext) continue;</div><div class='del'>-	    return 'u';</div><div class='del'>-	}</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 's';</div><div class='del'>-	}</div><div class='del'>-	if ((rb || !ext) &amp;&amp; (strcmp(e, ".rb") == 0)) {</div><div class='del'>-	    return 'r';</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (loading_tbl) {</div><div class='del'>-	if (st_lookup(loading_tbl, (st_data_t)feature, 0)) {</div><div class='del'>-	    if (!ext) return 'u';</div><div class='del'>-	    return strcmp(ext, ".rb") ? 's' : 'r';</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    char *buf;</div><div class='del'>-</div><div class='del'>-	    if (ext &amp;&amp; *ext) return 0;</div><div class='del'>-	    buf = ALLOCA_N(char, len + DLEXT_MAXLEN + 1);</div><div class='del'>-	    MEMCPY(buf, feature, char, len);</div><div class='del'>-	    for (i = 0; (e = loadable_ext[i]) != 0; i++) {</div><div class='del'>-		strncpy(buf + len, e, DLEXT_MAXLEN + 1);</div><div class='del'>-		if (st_lookup(loading_tbl, (st_data_t)buf, 0)) {</div><div class='del'>-		    return i ? 's' : 'r';</div><div class='del'>-		}</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'>-int</div><div class='del'>-rb_provided(feature)</div><div class='del'>-    const char *feature;</div><div class='del'>-{</div><div class='del'>-    const char *ext = strrchr(feature, '.');</div><div class='del'>-</div><div class='del'>-    if (ext &amp;&amp; !strchr(ext, '/')) {</div><div class='del'>-	if (strcmp(".rb", ext) == 0) {</div><div class='del'>-	    if (rb_feature_p(feature, ext, Qtrue)) return Qtrue;</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	}</div><div class='del'>-	else if (IS_SOEXT(ext) || IS_DLEXT(ext)) {</div><div class='del'>-	    if (rb_feature_p(feature, ext, Qfalse)) return Qtrue;</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	}</div><div class='add'>+	the_class = (struct RClass*)C_Object;</div><div class='ctx'>     }</div><div class='del'>-    if (rb_feature_p(feature, feature + strlen(feature), Qtrue))</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 void</div><div class='del'>-rb_provide_feature(feature)</div><div class='del'>-    VALUE feature;</div><div class='del'>-{</div><div class='del'>-    rb_ary_push(rb_features, feature);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_provide(feature)</div><div class='del'>-    const char *feature;</div><div class='del'>-{</div><div class='del'>-    rb_provide_feature(rb_str_new2(feature));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-load_lock(ftptr)</div><div class='del'>-    const 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 ||</div><div class='del'>-	!st_lookup(loading_tbl, (st_data_t)ftptr, &amp;th))</div><div class='del'>-    {</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(ftptr);</div><div class='del'>-	st_insert(loading_tbl, (st_data_t)ftptr, (st_data_t)curr_thread);</div><div class='del'>-	return (char *)ftptr;</div><div class='del'>-    }</div><div class='del'>-    do {</div><div class='del'>-	if ((rb_thread_t)th == curr_thread) return 0;</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 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-load_unlock(const char *ftptr)</div><div class='del'>-{</div><div class='del'>-    if (ftptr) {</div><div class='del'>-	st_data_t key = (st_data_t)ftptr;</div><div class='del'>-	</div><div class='del'>-	if (st_delete(loading_tbl, &amp;key, 0)) {</div><div class='del'>-	    free((char *)key);</div><div class='del'>-	}</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'>- *     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='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_f_require(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='del'>-{</div><div class='del'>-    return rb_require_safe(fname, ruby_safe_level);</div><div class='del'>-}</div><div class='del'>-</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_PTR(fname), '.');</div><div class='del'>-    if (ext &amp;&amp; !strchr(ext, '/')) {</div><div class='del'>-	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)) != 0) return 'r';</div><div class='del'>-	    return 0;</div><div class='del'>-	}</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='del'>-	    tmp = rb_str_new(RSTRING_PTR(fname), ext-RSTRING_PTR(fname));</div><div class='del'>-	    *featurep = tmp;</div><div class='del'>-#ifdef DLEXT2</div><div class='del'>-	    OBJ_FREEZE(tmp);</div><div class='del'>-	    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='del'>-	    }</div><div class='del'>-#else</div><div class='del'>-	    rb_str_cat2(tmp, DLEXT);</div><div class='del'>-	    OBJ_FREEZE(tmp);</div><div class='del'>-	    if ((*path = rb_find_file(tmp)) != 0) {</div><div class='del'>-		return 's';</div><div class='del'>-	    }</div><div class='del'>-#endif</div><div class='del'>-	}</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)) != 0) return 's';</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    tmp = fname;</div><div class='del'>-    type = rb_find_file_ext(&amp;tmp, loadable_ext);</div><div class='del'>-    *featurep = tmp;</div><div class='del'>-    switch (type) {</div><div class='del'>-      case 0:</div><div class='del'>-	ftptr = RSTRING_PTR(tmp);</div><div class='del'>-	return rb_feature_p(ftptr, 0, Qfalse);</div><div class='del'>-</div><div class='del'>-      default:</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='del'>-    }</div><div class='del'>-    return type ? 's' : 'r';</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-load_failed(fname)</div><div class='del'>-    VALUE fname;</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eLoadError, "no such file to load -- %s", RSTRING(fname)-&gt;ptr);</div><div class='del'>-}</div><div class='del'>-</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='del'>-{</div><div class='del'>-    VALUE result = Qnil;</div><div class='del'>-    volatile VALUE errinfo = ruby_errinfo;</div><div class='del'>-    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='ctx'>     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='del'>-</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 || !(ftptr = load_lock(RSTRING_PTR(feature)))) {</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'>-		    rb_load(path, 0);</div><div class='del'>-		    break;</div><div class='del'>-</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='add'>+	lex_setsrc("(eval)", src-&gt;ptr, src-&gt;len);</div><div class='add'>+	eval_tree = Qnil;</div><div class='add'>+	yyparse();</div><div class='add'>+	sourcefile = oldsrc;</div><div class='add'>+	if (nerrs == 0) {</div><div class='add'>+	    result = Eval(0);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='add'>+    eval_tree = node;</div><div class='add'>+    POP_ENV();</div><div class='ctx'>     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'>-    load_unlock(ftptr);</div><div class='add'>+    if (state) printf("exception in eval()\n");</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='del'>-    }</div><div class='del'>-    ruby_errinfo = errinfo;</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_require(fname)</div><div class='del'>-    const char *fname;</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-ruby_init_ext(name, init)</div><div class='del'>-    const char *name;</div><div class='del'>-    void (*init) _((void));</div><div class='del'>-{</div><div class='del'>-    ruby_current_node = 0;</div><div class='del'>-    ruby_sourcefile = rb_source_filename(name);</div><div class='del'>-    ruby_sourceline = 0;</div><div class='del'>-    ruby_frame-&gt;last_func = 0;</div><div class='del'>-    ruby_frame-&gt;orig_func = 0;</div><div class='del'>-    SCOPE_SET(SCOPE_PUBLIC);</div><div class='del'>-    if (load_lock(name)) {</div><div class='del'>-	(*init)();</div><div class='del'>-	rb_provide(name);</div><div class='del'>-	load_unlock(name);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-secure_visibility(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    if (ruby_safe_level &gt;= 4 &amp;&amp; !OBJ_TAINTED(self)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't change method visibility");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-set_method_visibility(self, argc, argv, ex)</div><div class='del'>-    VALUE self;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    ID ex;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    secure_visibility(self);</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	rb_export_method(self, rb_to_id(argv[i]), ex);</div><div class='del'>-    }</div><div class='del'>-    rb_clear_cache_by_class(self);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_public(argc, argv, module)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE module;</div><div class='del'>-{</div><div class='del'>-    secure_visibility(module);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	SCOPE_SET(SCOPE_PUBLIC);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	set_method_visibility(module, argc, argv, NOEX_PUBLIC);</div><div class='del'>-    }</div><div class='del'>-    return module;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_protected(argc, argv, module)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE module;</div><div class='del'>-{</div><div class='del'>-    secure_visibility(module);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	SCOPE_SET(SCOPE_PROTECTED);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	set_method_visibility(module, argc, argv, NOEX_PROTECTED);</div><div class='del'>-    }</div><div class='del'>-    return module;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_private(argc, argv, module)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE module;</div><div class='del'>-{</div><div class='del'>-    secure_visibility(module);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	SCOPE_SET(SCOPE_PRIVATE);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	set_method_visibility(module, argc, argv, NOEX_PRIVATE);</div><div class='del'>-    }</div><div class='del'>-    return module;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_public_method(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'>-    set_method_visibility(CLASS_OF(obj), argc, argv, NOEX_PUBLIC);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_private_method(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'>-    set_method_visibility(CLASS_OF(obj), argc, argv, NOEX_PRIVATE);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-top_public(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    return rb_mod_public(argc, argv, rb_cObject);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-top_private(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    return rb_mod_private(argc, argv, rb_cObject);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_modfunc(argc, argv, module)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE module;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    ID id;</div><div class='del'>-    NODE *body;</div><div class='del'>-</div><div class='del'>-    if (TYPE(module) != T_MODULE) {</div><div class='del'>-	rb_raise(rb_eTypeError, "module_function must be called for modules");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    secure_visibility(module);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	SCOPE_SET(SCOPE_MODFUNC);</div><div class='del'>-	return module;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    set_method_visibility(module, argc, argv, NOEX_PRIVATE);</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	VALUE m = module;</div><div class='del'>-</div><div class='del'>-	id = rb_to_id(argv[i]);</div><div class='del'>-	for (;;) {</div><div class='del'>-	    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='del'>-	    if (body == 0 || body-&gt;nd_body == 0) {</div><div class='del'>-		rb_bug("undefined method `%s'; can't happen", rb_id2name(id));</div><div class='del'>-	    }</div><div class='del'>-	    if (nd_type(body-&gt;nd_body) != NODE_ZSUPER) {</div><div class='del'>-		break;		/* normal case: need not to follow 'super' link */</div><div class='del'>-	    }</div><div class='del'>-	    m = RCLASS(m)-&gt;super;</div><div class='del'>-	    if (!m) break;</div><div class='del'>-	}</div><div class='del'>-	rb_add_method(rb_singleton_class(module), id, body-&gt;nd_body, NOEX_PUBLIC);</div><div class='del'>-    }</div><div class='del'>-    return module;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_append_features(module, include)</div><div class='del'>-    VALUE module, include;</div><div class='del'>-{</div><div class='del'>-    switch (TYPE(include)) {</div><div class='del'>-      case T_CLASS:</div><div class='del'>-      case T_MODULE:</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	Check_Type(include, T_CLASS);</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    rb_include_module(include, module);</div><div class='del'>-</div><div class='del'>-    return module;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_include(argc, argv, module)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE module;</div><div class='del'>-{</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='del'>-    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='del'>-    }</div><div class='del'>-    return module;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_obj_call_init(obj, argc, argv)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    PUSH_ITER(rb_block_given_p()?ITER_PRE:ITER_NOT);</div><div class='del'>-    rb_funcall2(obj, init, argc, argv);</div><div class='del'>-    POP_ITER();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_extend_object(obj, module)</div><div class='del'>-    VALUE obj, module;</div><div class='del'>-{</div><div class='del'>-    rb_include_module(rb_singleton_class(obj), module);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_extend_object(mod, obj)</div><div class='del'>-    VALUE mod, obj;</div><div class='del'>-{</div><div class='del'>-    rb_extend_object(obj, mod);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_obj_extend(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'>-    int i;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");</div><div class='del'>-    }</div><div class='del'>-    for (i=0; i&lt;argc; i++) Check_Type(argv[i], T_MODULE);</div><div class='del'>-    while (argc--) {</div><div class='del'>-	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='del'>-    }</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE rb_f_trace_var();</div><div class='del'>-VALUE rb_f_untrace_var();</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-errinfo_setter(val, id, var)</div><div class='del'>-    VALUE val;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE *var;</div><div class='del'>-{</div><div class='del'>-    if (!NIL_P(val) &amp;&amp; !rb_obj_is_kind_of(val, rb_eException)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "assigning non-exception to $!");</div><div class='del'>-    }</div><div class='del'>-    *var = val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-errat_getter(id)</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    return get_backtrace(ruby_errinfo);</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-errat_setter(val, id, var)</div><div class='del'>-    VALUE val;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE *var;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(ruby_errinfo)) {</div><div class='del'>-	rb_raise(rb_eArgError, "$! not set");</div><div class='del'>-    }</div><div class='del'>-    set_backtrace(ruby_errinfo, val);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_f_local_variables()</div><div class='del'>-{</div><div class='del'>-    ID *tbl;</div><div class='del'>-    int n, i;</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='del'>-    struct RVarmap *vars;</div><div class='del'>-</div><div class='del'>-    tbl = ruby_scope-&gt;local_tbl;</div><div class='del'>-    if (tbl) {</div><div class='del'>-	n = *tbl++;</div><div class='del'>-	for (i=2; i&lt;n; i++) {	/* skip first 2 ($_ and $~) */</div><div class='del'>-	    if (!rb_is_local_id(tbl[i])) continue; /* skip flip states */</div><div class='del'>-	    rb_ary_push(ary, rb_str_new2(rb_id2name(tbl[i])));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    vars = ruby_dyna_vars;</div><div class='del'>-    while (vars) {</div><div class='del'>-	if (vars-&gt;id &amp;&amp; rb_is_local_id(vars-&gt;id)) { /* skip $_, $~ and flip states */</div><div class='del'>-	    rb_ary_push(ary, rb_str_new2(rb_id2name(vars-&gt;id)));</div><div class='del'>-	}</div><div class='del'>-	vars = vars-&gt;next;</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 rb_f_catch _((VALUE,VALUE));</div><div class='del'>-NORETURN(static VALUE rb_f_throw _((int,VALUE*)));</div><div class='del'>-</div><div class='del'>-struct end_proc_data {</div><div class='del'>-    void (*func)();</div><div class='del'>-    VALUE data;</div><div class='del'>-    int safe;</div><div class='del'>-    struct end_proc_data *next;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static struct end_proc_data *end_procs, *ephemeral_end_procs, *tmp_end_procs;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_set_end_proc(func, data)</div><div class='del'>-    void (*func) _((VALUE));</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    struct end_proc_data *link = ALLOC(struct end_proc_data);</div><div class='del'>-    struct end_proc_data **list;</div><div class='del'>-</div><div class='del'>-    if (ruby_wrapper) list = &amp;ephemeral_end_procs;</div><div class='del'>-    else              list = &amp;end_procs;</div><div class='del'>-    link-&gt;next = *list;</div><div class='del'>-    link-&gt;func = func;</div><div class='del'>-    link-&gt;data = data;</div><div class='del'>-    link-&gt;safe = ruby_safe_level;</div><div class='del'>-    *list = link;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_mark_end_proc()</div><div class='del'>-{</div><div class='del'>-    struct end_proc_data *link;</div><div class='add'>+    if (nerrs &gt; 0) {</div><div class='add'>+	VALUE mesg;</div><div class='ctx'> </div><div class='del'>-    link = 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='del'>-    link = ephemeral_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='add'>+	mesg = errstr;</div><div class='add'>+	nerrs = 0;</div><div class='add'>+	errstr = str_new2("syntax error in eval():\n");</div><div class='add'>+	str_cat(errstr, RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len);</div><div class='add'>+	rb_fail(errstr);</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='del'>-}</div><div class='ctx'> </div><div class='del'>-static void call_end_proc _((VALUE data));</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-call_end_proc(data)</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    PUSH_ITER(ITER_NOT);</div><div class='del'>-    PUSH_FRAME();</div><div class='del'>-    ruby_frame-&gt;self = ruby_frame-&gt;prev-&gt;self;</div><div class='del'>-    ruby_frame-&gt;node = 0;</div><div class='del'>-    ruby_frame-&gt;last_func = 0;</div><div class='del'>-    ruby_frame-&gt;last_class = 0;</div><div class='del'>-    proc_invoke(data, rb_ary_new2(0), Qundef, 0);</div><div class='del'>-    POP_FRAME();</div><div class='del'>-    POP_ITER();</div><div class='add'>+    return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-rb_f_END()</div><div class='del'>-{</div><div class='del'>-    PUSH_FRAME();</div><div class='del'>-    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='del'>-    POP_FRAME();</div><div class='del'>-}</div><div class='add'>+VALUE rb_load_path;</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='add'>+char *dln_find_file();</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_f_at_exit()</div><div class='add'>+static char*</div><div class='add'>+find_file(file)</div><div class='add'>+    char *file;</div><div class='ctx'> {</div><div class='del'>-    VALUE proc;</div><div class='add'>+    extern VALUE rb_load_path;</div><div class='add'>+    VALUE sep, vpath;</div><div class='add'>+    char *path, *found;</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='del'>-    rb_set_end_proc(call_end_proc, proc);</div><div class='del'>-    return proc;</div><div class='del'>-}</div><div class='add'>+    if (file[0] == '/') return file;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_exec_end_proc()</div><div class='del'>-{</div><div class='del'>-    struct end_proc_data *link, *tmp;</div><div class='del'>-    int status;</div><div class='del'>-    volatile int safe = ruby_safe_level;</div><div class='del'>-</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='del'>-	}</div><div class='del'>-    }</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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    ruby_safe_level = safe;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     __method__         =&gt; symbol</div><div class='del'>- *  </div><div class='del'>- *  Returns the name of the current method as a Symbol.</div><div class='del'>- *  If called from inside of an aliased method it will return the original</div><div class='del'>- *  nonaliased name.</div><div class='del'>- *  If called outside of a method, it returns &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *  </div><div class='del'>- *    def foo</div><div class='del'>- *      __method__</div><div class='del'>- *    end</div><div class='del'>- *    alias bar foo</div><div class='del'>- *    </div><div class='del'>- *    foo                # =&gt; :foo</div><div class='del'>- *    bar                # =&gt; :foo</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_method_name()</div><div class='del'>-{</div><div class='del'>-    struct FRAME* prev = ruby_frame-&gt;prev;</div><div class='del'>-    if (prev &amp;&amp; prev-&gt;orig_func) {</div><div class='del'>-	return ID2SYM(prev-&gt;orig_func);</div><div class='add'>+    if (rb_load_path) {</div><div class='add'>+	Check_Type(rb_load_path, T_ARRAY);</div><div class='add'>+	sep = str_new2(":");</div><div class='add'>+	vpath = ary_join(rb_load_path, sep);</div><div class='add'>+	path = RSTRING(vpath)-&gt;ptr;</div><div class='add'>+	obj_free(sep);</div><div class='add'>+	sep = Qnil;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	return Qnil;</div><div class='add'>+	path = Qnil;</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-Init_eval()</div><div class='del'>-{</div><div class='del'>-    init = rb_intern("initialize");</div><div class='del'>-    eqq = rb_intern("===");</div><div class='del'>-    each = rb_intern("each");</div><div class='del'>-</div><div class='del'>-    aref = rb_intern("[]");</div><div class='del'>-    aset = rb_intern("[]=");</div><div class='del'>-    match = rb_intern("=~");</div><div class='del'>-    missing = rb_intern("method_missing");</div><div class='del'>-    added = rb_intern("method_added");</div><div class='del'>-    singleton_added = rb_intern("singleton_method_added");</div><div class='del'>-    removed = rb_intern("method_removed");</div><div class='del'>-    singleton_removed = rb_intern("singleton_method_removed");</div><div class='del'>-    undefined = rb_intern("method_undefined");</div><div class='del'>-    singleton_undefined = rb_intern("singleton_method_undefined");</div><div class='del'>-</div><div class='del'>-    __id__ = rb_intern("__id__");</div><div class='del'>-    __send__ = rb_intern("__send__");</div><div class='del'>-</div><div class='del'>-    rb_global_variable((void *)&amp;top_scope);</div><div class='del'>-    rb_global_variable((void *)&amp;ruby_eval_tree_begin);</div><div class='del'>-</div><div class='del'>-    rb_global_variable((void *)&amp;ruby_eval_tree);</div><div class='del'>-    rb_global_variable((void *)&amp;ruby_dyna_vars);</div><div class='del'>-</div><div class='del'>-    rb_define_virtual_variable("$@", errat_getter, errat_setter);</div><div class='del'>-    rb_define_hooked_variable("$!", &amp;ruby_errinfo, 0, errinfo_setter);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("eval", rb_f_eval, -1);</div><div class='del'>-    rb_define_global_function("iterator?", rb_f_block_given_p, 0);</div><div class='del'>-    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='del'>-    rb_define_global_function("loop", rb_f_loop, 0);</div><div class='del'>-</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((void *)&amp;basic_respond_to);</div><div class='del'>-    basic_respond_to = rb_method_node(rb_cObject, respond_to);</div><div class='add'>+    found = dln_find_file(file, path);</div><div class='add'>+    if (found == Qnil) Fail("No such file to load -- %s", file);</div><div class='ctx'>     </div><div class='del'>-    rb_define_global_function("raise", rb_f_raise, -1);</div><div class='del'>-    rb_define_global_function("fail", rb_f_raise, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("caller", rb_f_caller, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("exit", rb_f_exit, -1);</div><div class='del'>-    rb_define_global_function("abort", rb_f_abort, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("at_exit", rb_f_at_exit, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("catch", rb_f_catch, 1);</div><div class='del'>-    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='del'>-    rb_define_global_function("local_variables", rb_f_local_variables, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("__method__", rb_f_method_name, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_mKernel, "send", rb_f_send, -1);</div><div class='del'>-    rb_define_method(rb_mKernel, "__send__", rb_f_send, -1);</div><div class='del'>-    rb_define_method(rb_mKernel, "instance_eval", rb_obj_instance_eval, -1);</div><div class='del'>-    rb_define_method(rb_mKernel, "instance_exec", rb_obj_instance_exec, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_private_method(rb_cModule, "append_features", rb_mod_append_features, 1);</div><div class='del'>-    rb_define_private_method(rb_cModule, "extend_object", rb_mod_extend_object, 1);</div><div class='del'>-    rb_define_private_method(rb_cModule, "include", rb_mod_include, -1);</div><div class='del'>-    rb_define_private_method(rb_cModule, "public", rb_mod_public, -1);</div><div class='del'>-    rb_define_private_method(rb_cModule, "protected", rb_mod_protected, -1);</div><div class='del'>-    rb_define_private_method(rb_cModule, "private", rb_mod_private, -1);</div><div class='del'>-    rb_define_private_method(rb_cModule, "module_function", rb_mod_modfunc, -1);</div><div class='del'>-    rb_define_method(rb_cModule, "method_defined?", rb_mod_method_defined, 1);</div><div class='del'>-    rb_define_method(rb_cModule, "public_method_defined?", rb_mod_public_method_defined, 1);</div><div class='del'>-    rb_define_method(rb_cModule, "private_method_defined?", rb_mod_private_method_defined, 1);</div><div class='del'>-    rb_define_method(rb_cModule, "protected_method_defined?", rb_mod_protected_method_defined, 1);</div><div class='del'>-    rb_define_method(rb_cModule, "public_class_method", rb_mod_public_method, -1);</div><div class='del'>-    rb_define_method(rb_cModule, "private_class_method", rb_mod_private_method, -1);</div><div class='del'>-    rb_define_method(rb_cModule, "module_eval", rb_mod_module_eval, -1);</div><div class='del'>-    rb_define_method(rb_cModule, "module_exec", rb_mod_module_exec, -1);</div><div class='del'>-    rb_define_method(rb_cModule, "class_eval", rb_mod_module_eval, -1);</div><div class='del'>-    rb_define_method(rb_cModule, "class_exec", rb_mod_module_exec, -1);</div><div class='del'>-</div><div class='del'>-    rb_undef_method(rb_cClass, "module_function");</div><div class='del'>-</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='del'>-    rb_define_private_method(rb_cModule, "alias_method", rb_mod_alias_method, 2);</div><div class='del'>-    rb_define_private_method(rb_cModule, "define_method", rb_mod_define_method, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cModule, "nesting", rb_mod_nesting, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cModule, "constants", rb_mod_s_constants, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(ruby_top_self, "include", top_include, -1);</div><div class='del'>-    rb_define_singleton_method(ruby_top_self, "public", top_public, -1);</div><div class='del'>-    rb_define_singleton_method(ruby_top_self, "private", top_private, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_mKernel, "extend", rb_obj_extend, -1);</div><div class='del'>-</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='del'>-</div><div class='del'>-    rb_define_global_function("set_trace_func", set_trace_func, 1);</div><div class='del'>-    rb_global_variable(&amp;trace_func);</div><div class='del'>-</div><div class='del'>-    rb_define_virtual_variable("$SAFE", safe_getter, safe_setter);</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, 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='del'>-</div><div class='del'>-void</div><div class='del'>-Init_load()</div><div class='del'>-{</div><div class='del'>-    rb_define_readonly_variable("$:", &amp;rb_load_path);</div><div class='del'>-    rb_define_readonly_variable("$-I", &amp;rb_load_path);</div><div class='del'>-    rb_define_readonly_variable("$LOAD_PATH", &amp;rb_load_path);</div><div class='del'>-    rb_load_path = rb_ary_new();</div><div class='del'>-</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='del'>-    rb_features = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("load", rb_f_load, -1);</div><div class='del'>-    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='del'>-    rb_global_variable(&amp;ruby_wrapper);</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;ruby_dln_librefs);</div><div class='del'>-    ruby_dln_librefs = rb_ary_new();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-scope_dup(scope)</div><div class='del'>-    struct SCOPE *scope;</div><div class='del'>-{</div><div class='del'>-    ID *tbl;</div><div class='del'>-    VALUE *vars;</div><div class='del'>-</div><div class='del'>-    scope-&gt;flags |= SCOPE_DONT_RECYCLE;</div><div class='del'>-    if (scope-&gt;flags &amp; SCOPE_MALLOC) return;</div><div class='del'>-</div><div class='del'>-    if (scope-&gt;local_tbl) {</div><div class='del'>-	tbl = scope-&gt;local_tbl;</div><div class='del'>-	vars = ALLOC_N(VALUE, tbl[0]+1);</div><div class='del'>-	*vars++ = scope-&gt;local_vars[-1];</div><div class='del'>-	MEMCPY(vars, scope-&gt;local_vars, VALUE, tbl[0]);</div><div class='del'>-	scope-&gt;local_vars = vars;</div><div class='del'>-	scope-&gt;flags |= SCOPE_MALLOC;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-blk_mark(data)</div><div class='del'>-    struct BLOCK *data;</div><div class='del'>-{</div><div class='del'>-    while (data) {</div><div class='del'>-	rb_gc_mark_frame(&amp;data-&gt;frame);</div><div class='del'>-	rb_gc_mark((VALUE)data-&gt;scope);</div><div class='del'>-	rb_gc_mark((VALUE)data-&gt;var);</div><div class='del'>-	rb_gc_mark((VALUE)data-&gt;body);</div><div class='del'>-	rb_gc_mark((VALUE)data-&gt;self);</div><div class='del'>-	rb_gc_mark((VALUE)data-&gt;dyna_vars);</div><div class='del'>-	rb_gc_mark((VALUE)data-&gt;cref);</div><div class='del'>-	rb_gc_mark(data-&gt;wrapper);</div><div class='del'>-	rb_gc_mark(data-&gt;block_obj);</div><div class='del'>-	data = data-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-frame_free(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'>-    frame = frame-&gt;prev;</div><div class='del'>-    while (frame) {</div><div class='del'>-	tmp = frame;</div><div class='del'>-	frame = frame-&gt;prev;</div><div class='del'>-	free(tmp);</div><div class='del'>-    }</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='del'>-    while (data) {</div><div class='del'>-	frame_free(&amp;data-&gt;frame);</div><div class='del'>-	tmp = data;</div><div class='del'>-	data = data-&gt;prev;</div><div class='del'>-	free(tmp);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-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='del'>-blk_copy_prev(block)</div><div class='del'>-    struct BLOCK *block;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *tmp;</div><div class='del'>-    struct RVarmap* vars;</div><div class='del'>-</div><div class='del'>-    while (block-&gt;prev) {</div><div class='del'>-	tmp = ALLOC_N(struct BLOCK, 1);</div><div class='del'>-	MEMCPY(tmp, block-&gt;prev, struct BLOCK, 1);</div><div class='del'>-	scope_dup(tmp-&gt;scope);</div><div class='del'>-	frame_dup(&amp;tmp-&gt;frame);</div><div class='del'>-</div><div class='del'>-	for (vars = tmp-&gt;dyna_vars; vars; vars = vars-&gt;next) {</div><div class='del'>-	    if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;</div><div class='del'>-	    FL_SET(vars, DVAR_DONT_RECYCLE);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	block-&gt;prev = tmp;</div><div class='del'>-	block = 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='del'>-blk_dup(dup, orig)</div><div class='del'>-    struct BLOCK *dup, *orig;</div><div class='del'>-{</div><div class='del'>-    MEMCPY(dup, orig, struct BLOCK, 1);</div><div class='del'>-    frame_dup(&amp;dup-&gt;frame);</div><div class='del'>-</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='del'>-    }</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_clone(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='del'>-</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'>-    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'>-#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'>-static int proc_get_safe_level(VALUE);</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='del'>-    int safe = proc_get_safe_level(self);</div><div class='del'>-</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='del'>-    if (safe &gt; PROC_TMAX) safe = PROC_TMAX;</div><div class='del'>-    FL_SET(bind, (safe &lt;&lt; PROC_TSHIFT) &amp; PROC_TMASK);</div><div class='del'>-</div><div class='del'>-    return bind;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_block_dup(self, klass, cref)</div><div class='del'>-    VALUE self, klass, cref;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *block;</div><div class='del'>-    VALUE obj = proc_dup(self);</div><div class='del'>-    Data_Get_Struct(obj, struct BLOCK, block);</div><div class='del'>-    block-&gt;klass = klass;</div><div class='del'>-    block-&gt;cref = NEW_NODE(nd_type(block-&gt;cref), cref, block-&gt;cref-&gt;u2.node,</div><div class='del'>-			   block-&gt;cref-&gt;u3.node);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_f_binding(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *data, *p;</div><div class='del'>-    struct RVarmap *vars;</div><div class='del'>-    VALUE bind;</div><div class='del'>-</div><div class='del'>-    PUSH_BLOCK(0,0);</div><div class='del'>-    bind = Data_Make_Struct(rb_cBinding,struct BLOCK,blk_mark,blk_free,data);</div><div class='del'>-    *data = *ruby_block;</div><div class='del'>-</div><div class='del'>-    data-&gt;orig_thread = rb_thread_current();</div><div class='del'>-    data-&gt;wrapper = ruby_wrapper;</div><div class='del'>-    data-&gt;iter = rb_f_block_given_p();</div><div class='del'>-    frame_dup(&amp;data-&gt;frame);</div><div class='del'>-    if (ruby_frame-&gt;prev) {</div><div class='del'>-	data-&gt;frame.last_func = ruby_frame-&gt;prev-&gt;last_func;</div><div class='del'>-	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='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (data-&gt;iter) {</div><div class='del'>-	blk_copy_prev(data);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	data-&gt;prev = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (p = data; p; p = p-&gt;prev) {</div><div class='del'>-	for (vars = p-&gt;dyna_vars; vars; vars = vars-&gt;next) {</div><div class='del'>-	    if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;</div><div class='del'>-	    FL_SET(vars, DVAR_DONT_RECYCLE);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    scope_dup(data-&gt;scope);</div><div class='del'>-    POP_BLOCK();</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'>- *  call-seq:</div><div class='del'>- *     binding.eval(string [, 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;, in the</div><div class='del'>- *  &lt;em&gt;binding&lt;/em&gt;'s context.  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(param)</div><div class='del'>- *       return binding</div><div class='del'>- *     end</div><div class='del'>- *     b = getBinding("hello")</div><div class='del'>- *     b.eval("param")   #=&gt; "hello"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bind_eval(argc, argv, bindval)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE bindval;</div><div class='del'>-{</div><div class='del'>-    VALUE args[4];</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "12", &amp;args[0], &amp;args[2], &amp;args[3]);</div><div class='del'>-    args[1] = bindval;</div><div class='del'>-    return rb_f_eval(argc+1, args, Qnil /* self will be searched in eval */);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define SAFE_LEVEL_MAX PROC_TMASK</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-proc_save_safe_level(data)</div><div class='del'>-    VALUE data;</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-proc_get_safe_level(data)</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    return (RBASIC(data)-&gt;flags &amp; PROC_TMASK) &gt;&gt; PROC_TSHIFT;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-proc_set_safe_level(data)</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    ruby_safe_level = proc_get_safe_level(data);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-proc_alloc(klass, proc)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    int proc;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE block;</div><div class='del'>-    struct BLOCK *data, *p;</div><div class='del'>-    struct RVarmap *vars;</div><div class='del'>-</div><div class='del'>-    if (!rb_block_given_p() &amp;&amp; !rb_f_block_given_p()) {</div><div class='del'>-	rb_raise(rb_eArgError, "tried to create Proc object without a block");</div><div class='del'>-    }</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='del'>-</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='del'>-    *data = *ruby_block;</div><div class='del'>-</div><div class='del'>-    data-&gt;orig_thread = rb_thread_current();</div><div class='del'>-    data-&gt;wrapper = ruby_wrapper;</div><div class='del'>-    data-&gt;iter = data-&gt;prev?Qtrue:Qfalse;</div><div class='del'>-    data-&gt;block_obj = block;</div><div class='del'>-    frame_dup(&amp;data-&gt;frame);</div><div class='del'>-    if (data-&gt;iter) {</div><div class='del'>-	blk_copy_prev(data);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	data-&gt;prev = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (p = data; p; p = p-&gt;prev) {</div><div class='del'>-	for (vars = p-&gt;dyna_vars; vars; vars = vars-&gt;next) {</div><div class='del'>-	    if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;</div><div class='del'>-	    FL_SET(vars, DVAR_DONT_RECYCLE);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    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='del'>-</div><div class='del'>-    return block;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-proc_s_new(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</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='del'>-</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'>+    if (vpath) obj_free(vpath);</div><div class='add'>+    </div><div class='add'>+    return found;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_f_lambda()</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-block_orphan(data)</div><div class='del'>-    struct BLOCK *data;</div><div class='del'>-{</div><div class='del'>-    if (data-&gt;scope-&gt;flags &amp; SCOPE_NOSTACK) {</div><div class='del'>-	return 1;</div><div class='del'>-    }</div><div class='del'>-    if (data-&gt;orig_thread != rb_thread_current()) {</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'>-static VALUE</div><div class='del'>-proc_invoke(proc, args, self, klass)</div><div class='del'>-    VALUE proc, args;		/* OK */</div><div class='del'>-    VALUE self, klass;</div><div class='add'>+Fload(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-    struct BLOCK * volatile old_block;</div><div class='del'>-    struct BLOCK _block;</div><div class='del'>-    struct BLOCK *data;</div><div class='del'>-    volatile VALUE result = Qundef;</div><div class='ctx'>     int state;</div><div class='del'>-    volatile int safe = ruby_safe_level;</div><div class='del'>-    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='del'>-    VALUE bvar = Qnil;</div><div class='del'>-</div><div class='del'>-    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='del'>-	bvar = rb_block_proc();</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    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='del'>-</div><div class='del'>-    PUSH_VARS();</div><div class='del'>-    ruby_wrapper = data-&gt;wrapper;</div><div class='del'>-    ruby_dyna_vars = data-&gt;dyna_vars;</div><div class='del'>-    /* PUSH BLOCK from data */</div><div class='del'>-    old_block = ruby_block;</div><div class='del'>-    _block = *data;</div><div class='del'>-    _block.block_obj = bvar;</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='del'>-    ruby_block = &amp;_block;</div><div class='del'>-    PUSH_ITER(ITER_CUR);</div><div class='del'>-    ruby_frame-&gt;iter = ITER_CUR;</div><div class='del'>-    PUSH_TAG(pcall ? PROT_LAMBDA : PROT_NONE);</div><div class='del'>-    state = EXEC_TAG();</div><div class='del'>-    if (state == 0) {</div><div class='del'>-	proc_set_safe_level(proc);</div><div class='del'>-	result = rb_yield_0(args, self, (self!=Qundef)?CLASS_OF(self):0,</div><div class='del'>-			    pcall | YIELD_PROC_CALL, 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='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    POP_ITER();</div><div class='del'>-    ruby_block = old_block;</div><div class='del'>-    ruby_wrapper = old_wrapper;</div><div class='del'>-    POP_VARS();</div><div class='del'>-    ruby_safe_level = safe;</div><div class='del'>-</div><div class='del'>-    switch (state) {</div><div class='del'>-      case 0:</div><div class='del'>-	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='del'>-      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='del'>-	}</div><div class='del'>-      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='del'>-	}</div><div class='del'>-      default:</div><div class='del'>-	JUMP_TAG(state);</div><div class='del'>-    }</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_proc_call(proc, args)</div><div class='del'>-    VALUE proc, args;		/* OK */</div><div class='del'>-{</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='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-proc_arity(proc)</div><div class='del'>-    VALUE proc;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *data;</div><div class='del'>-    NODE *var, *list;</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(proc, struct BLOCK, data);</div><div class='del'>-    var = data-&gt;var;</div><div class='del'>-    if (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='del'>-    if (var == (NODE*)1) return INT2FIX(0);</div><div class='del'>-    if (var == (NODE*)2) return INT2FIX(0);</div><div class='del'>-    if (nd_type(var) == NODE_BLOCK_ARG) {</div><div class='del'>-	var = var-&gt;nd_args;</div><div class='del'>-	if (var == (NODE*)1) return INT2FIX(0);</div><div class='del'>-	if (var == (NODE*)2) return INT2FIX(0);</div><div class='del'>-    }</div><div class='del'>-    switch (nd_type(var)) {</div><div class='del'>-      default:</div><div class='del'>-	return INT2FIX(1);</div><div class='del'>-      case NODE_MASGN:</div><div class='del'>-	list = var-&gt;nd_head;</div><div class='del'>-	n = 0;</div><div class='del'>-	while (list) {</div><div class='del'>-	    n++;</div><div class='del'>-	    list = list-&gt;nd_next;</div><div class='del'>-	}</div><div class='del'>-	if (var-&gt;nd_args) return INT2FIX(-n-1);</div><div class='del'>-	return INT2FIX(n);</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'>- *   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='del'>-static VALUE</div><div class='del'>-proc_eq(self, other)</div><div class='del'>-    VALUE self, other;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *data, *data2;</div><div class='del'>-</div><div class='del'>-    if (self == other) return Qtrue;</div><div class='del'>-    if (TYPE(other) != T_DATA) return Qfalse;</div><div class='del'>-    if (RDATA(other)-&gt;dmark != (RUBY_DATA_FUNC)blk_mark) return Qfalse;</div><div class='del'>-    if (CLASS_OF(self) != CLASS_OF(other)) return Qfalse;</div><div class='del'>-    Data_Get_Struct(self, struct BLOCK, data);</div><div class='del'>-    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='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-proc_to_s(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *data;</div><div class='ctx'>     NODE *node;</div><div class='del'>-    const char *cname = rb_obj_classname(self);</div><div class='del'>-    const int w = (sizeof(VALUE) * CHAR_BIT) / 4;</div><div class='del'>-    long len = strlen(cname)+6+w; /* 6:tags 16:addr */</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, struct BLOCK, data);</div><div class='del'>-    if ((node = data-&gt;frame.node) || (node = data-&gt;body)) {</div><div class='del'>-	len += strlen(node-&gt;nd_file) + 2 + (SIZEOF_LONG*CHAR_BIT-NODE_LSHIFT)/3;</div><div class='del'>-	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='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	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='del'>-    }</div><div class='del'>-    RSTRING(str)-&gt;len = strlen(RSTRING(str)-&gt;ptr);</div><div class='del'>-    if (OBJ_TAINTED(self)) 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'>-/*</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='del'>-static VALUE</div><div class='del'>-proc_to_self(self)</div><div class='del'>-    VALUE self;</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'>- *  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='del'>-static VALUE</div><div class='del'>-proc_binding(proc)</div><div class='del'>-    VALUE proc;</div><div class='del'>-{</div><div class='del'>-    struct BLOCK *orig, *data;</div><div class='del'>-    VALUE bind;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(proc, struct BLOCK, orig);</div><div class='del'>-    bind = Data_Make_Struct(rb_cBinding,struct BLOCK,blk_mark,blk_free,data);</div><div class='del'>-    MEMCPY(data, orig, struct BLOCK, 1);</div><div class='del'>-    frame_dup(&amp;data-&gt;frame);</div><div class='del'>-</div><div class='del'>-    if (data-&gt;iter) {</div><div class='del'>-	blk_copy_prev(data);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	data-&gt;prev = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return bind;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-block_pass(self, node)</div><div class='del'>-    VALUE self;</div><div class='del'>-    NODE *node;</div><div class='del'>-{</div><div class='del'>-    VALUE proc = rb_eval(self, node-&gt;nd_body);	/* OK */</div><div class='del'>-    VALUE b;</div><div class='del'>-    struct BLOCK * volatile old_block;</div><div class='del'>-    struct BLOCK _block;</div><div class='del'>-    struct BLOCK *data;</div><div class='del'>-    volatile VALUE result = Qnil;</div><div class='del'>-    int state;</div><div class='del'>-    volatile int orphan;</div><div class='del'>-    volatile int safe = ruby_safe_level;</div><div class='add'>+    char *file;</div><div class='add'>+    </div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    file = find_file(fname-&gt;ptr);</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(proc)) {</div><div class='del'>-	PUSH_ITER(ITER_NOT);</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='del'>-    }</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='del'>-	if (!rb_obj_is_proc(b)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc)",</div><div class='del'>-		     rb_obj_classname(proc));</div><div class='add'>+#ifdef USE_DLN</div><div class='add'>+    {</div><div class='add'>+	static int rb_dln_init = 0;</div><div class='add'>+	extern char *rb_dln_argv0;</div><div class='add'>+	int len = strlen(file);</div><div class='add'>+	</div><div class='add'>+	if (len &gt; 2 &amp;&amp; file[len-1] == 'o' &amp;&amp; file[len-2] == '.') {</div><div class='add'>+	    if (rb_dln_init == 0 &amp;&amp; dln_init(rb_dln_argv0) == -1) {</div><div class='add'>+		Fail("%s: %s", rb_dln_argv0, dln_strerror());</div><div class='add'>+	    }</div><div class='add'>+	    </div><div class='add'>+	    if (dln_load(file) == -1)</div><div class='add'>+		Fail(dln_strerror());</div><div class='add'>+	    </div><div class='add'>+	    return TRUE;</div><div class='ctx'> 	}</div><div class='del'>-	proc = b;</div><div class='del'>-    }</div><div class='del'>-</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='ctx'>     }</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='del'>-    }</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(proc, struct BLOCK, data);</div><div class='del'>-    orphan = block_orphan(data);</div><div class='del'>-</div><div class='del'>-    /* PUSH BLOCK from data */</div><div class='del'>-    old_block = ruby_block;</div><div class='del'>-    _block = *data;</div><div class='del'>-    _block.outer = ruby_block;</div><div class='del'>-    if (orphan) _block.uniq = block_unique++;</div><div class='del'>-    ruby_block = &amp;_block;</div><div class='del'>-    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='del'>-</div><div class='del'>-    PUSH_TAG(PROT_LOOP);</div><div class='add'>+#endif</div><div class='add'>+    </div><div class='add'>+    PUSH_TAG();</div><div class='add'>+    PUSH_ENV();</div><div class='add'>+    the_class = (struct RClass*)C_Object;</div><div class='add'>+    Qself = TopSelf;</div><div class='add'>+    the_env-&gt;current_module = top_env-&gt;current_module;</div><div class='add'>+    the_env-&gt;local_vars = top_env-&gt;local_vars;</div><div class='add'>+    the_env-&gt;local_tbl = top_env-&gt;local_tbl;</div><div class='add'>+    the_env-&gt;in_eval = 1;</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='del'>-	if (safe &gt; ruby_safe_level)</div><div class='del'>-	    ruby_safe_level = safe;</div><div class='del'>-	result = rb_eval(self, node-&gt;nd_iter);</div><div class='del'>-    }</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='del'>-    POP_TAG();</div><div class='del'>-    POP_ITER();</div><div class='del'>-    ruby_block = old_block;</div><div class='del'>-    ruby_safe_level = safe;</div><div class='del'>-</div><div class='del'>-    switch (state) {/* escape from orphan block */</div><div class='del'>-      case 0:</div><div class='del'>-	break;</div><div class='del'>-      case TAG_RETURN:</div><div class='del'>-	if (orphan) {</div><div class='del'>-	    proc_jump_error(state, prot_tag-&gt;retval);</div><div class='add'>+	rb_load_file(file);</div><div class='add'>+	if (nerrs == 0) {</div><div class='add'>+	    Eval(0);</div><div class='ctx'> 	}</div><div class='del'>-      default:</div><div class='del'>-	JUMP_TAG(state);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct METHOD {</div><div class='del'>-    VALUE klass, rklass;</div><div class='del'>-    VALUE recv;</div><div class='del'>-    ID id, oid;</div><div class='del'>-    int safe_level;</div><div class='del'>-    NODE *body;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-bm_mark(data)</div><div class='del'>-    struct METHOD *data;</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(data-&gt;rklass);</div><div class='del'>-    rb_gc_mark(data-&gt;klass);</div><div class='del'>-    rb_gc_mark(data-&gt;recv);</div><div class='del'>-    rb_gc_mark((VALUE)data-&gt;body);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-mnew(klass, obj, id, mklass)</div><div class='del'>-    VALUE klass, obj, mklass;</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    VALUE method;</div><div class='del'>-    NODE *body;</div><div class='del'>-    int noex;</div><div class='del'>-    struct METHOD *data;</div><div class='del'>-    VALUE rklass = klass;</div><div class='del'>-    ID oid = id;</div><div class='del'>-</div><div class='del'>-  again:</div><div class='del'>-    if ((body = rb_get_method_body(&amp;klass, &amp;id, &amp;noex)) == 0) {</div><div class='del'>-	print_undef(rklass, oid);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    if (nd_type(body) == NODE_ZSUPER) {</div><div class='del'>-	klass = RCLASS(klass)-&gt;super;</div><div class='del'>-	goto again;</div><div class='del'>-    }</div><div class='del'>-</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='add'>+    POP_ENV();</div><div class='add'>+    POP_TAG();</div><div class='add'>+    if (nerrs &gt; 0) {</div><div class='add'>+	rb_fail(errstr);</div><div class='ctx'>     }</div><div class='del'>-    if (TYPE(klass) == T_ICLASS) klass = RBASIC(klass)-&gt;klass;</div><div class='del'>-    method = Data_Make_Struct(mklass, struct METHOD, bm_mark, free, data);</div><div class='del'>-    data-&gt;klass = klass;</div><div class='del'>-    data-&gt;recv = obj;</div><div class='del'>-    data-&gt;id = id;</div><div class='del'>-    data-&gt;body = body;</div><div class='del'>-    data-&gt;rklass = rklass;</div><div class='del'>-    data-&gt;oid = oid;</div><div class='del'>-    data-&gt;safe_level = NOEX_WITH_SAFE(noex);</div><div class='del'>-    OBJ_INFECT(method, klass);</div><div class='del'>-</div><div class='del'>-    return method;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-method_eq(method, other)</div><div class='del'>-    VALUE method, other;</div><div class='del'>-{</div><div class='del'>-    struct METHOD *m1, *m2;</div><div class='del'>-</div><div class='del'>-    if (TYPE(other) != T_DATA || RDATA(other)-&gt;dmark != (RUBY_DATA_FUNC)bm_mark)</div><div class='del'>-	return Qfalse;</div><div class='del'>-    if (CLASS_OF(method) != CLASS_OF(other))</div><div class='del'>-	return Qfalse;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(method, struct METHOD, m1);</div><div class='del'>-    Data_Get_Struct(other, struct METHOD, m2);</div><div class='del'>-</div><div class='del'>-    if (m1-&gt;klass != m2-&gt;klass || m1-&gt;rklass != m2-&gt;rklass ||</div><div class='del'>-	m1-&gt;recv != m2-&gt;recv || m1-&gt;body != m2-&gt;body)</div><div class='del'>-	return Qfalse;</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'>- *  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='del'>-static VALUE</div><div class='del'>-method_unbind(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE method;</div><div class='del'>-    struct METHOD *orig, *data;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct METHOD, orig);</div><div class='del'>-    method = Data_Make_Struct(rb_cUnboundMethod, struct METHOD, bm_mark, free, data);</div><div class='del'>-    data-&gt;klass = orig-&gt;klass;</div><div class='del'>-    data-&gt;recv = Qundef;</div><div class='del'>-    data-&gt;id = orig-&gt;id;</div><div class='del'>-    data-&gt;body = orig-&gt;body;</div><div class='del'>-    data-&gt;rklass = orig-&gt;rklass;</div><div class='del'>-    data-&gt;oid = orig-&gt;oid;</div><div class='del'>-    OBJ_INFECT(method, obj);</div><div class='del'>-</div><div class='del'>-    return method;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     meth.receiver    =&gt; object</div><div class='del'>- *</div><div class='del'>- *  Returns the bound receiver of the method object.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-method_receiver(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct METHOD *data;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct METHOD, data);</div><div class='del'>-    return data-&gt;recv;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     meth.name    =&gt; string</div><div class='del'>- *</div><div class='del'>- *  Returns the name of the method.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-method_name(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct METHOD *data;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct METHOD, data);</div><div class='del'>-    return rb_str_new2(rb_id2name(data-&gt;oid));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     meth.owner    =&gt; class_or_module</div><div class='del'>- *</div><div class='del'>- *  Returns the class or module that defines the method.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-method_owner(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct METHOD *data;</div><div class='add'>+    if (state) JUMP_TAG(state);</div><div class='ctx'> </div><div class='del'>-    Data_Get_Struct(obj, struct METHOD, data);</div><div class='del'>-    return data-&gt;klass;</div><div class='add'>+    return TRUE;</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 rb_loadfiles;</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_obj_method(obj, vid)</div><div class='add'>+Frequire(obj, fname)</div><div class='ctx'>     VALUE obj;</div><div class='del'>-    VALUE vid;</div><div class='del'>-{</div><div class='del'>-    return mnew(CLASS_OF(obj), obj, rb_to_id(vid), rb_cMethod);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_method(mod, vid)</div><div class='del'>-    VALUE mod;</div><div class='del'>-    VALUE vid;</div><div class='del'>-{</div><div class='del'>-    return mnew(mod, Qundef, rb_to_id(vid), rb_cUnboundMethod);</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'>-method_clone(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE clone;</div><div class='del'>-    struct METHOD *orig, *data;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, struct METHOD, orig);</div><div class='del'>-    clone = Data_Make_Struct(CLASS_OF(self),struct METHOD, bm_mark, free, data);</div><div class='del'>-    CLONESETUP(clone, self);</div><div class='del'>-    *data = *orig;</div><div class='del'>-</div><div class='del'>-    return clone;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_method_dup(self, klass, cref)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE klass;</div><div class='del'>-    VALUE cref;</div><div class='del'>-{</div><div class='del'>-    VALUE clone;</div><div class='del'>-    struct METHOD *orig, *data;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, struct METHOD, orig);</div><div class='del'>-    clone = Data_Make_Struct(CLASS_OF(self),struct METHOD, bm_mark, free, data);</div><div class='del'>-    *data = *orig;</div><div class='del'>-    data-&gt;rklass = klass;</div><div class='del'>-    if (data-&gt;body-&gt;nd_rval) {</div><div class='del'>-	NODE *tmp = NEW_NODE(nd_type(data-&gt;body-&gt;u2.node), cref,</div><div class='del'>-			     data-&gt;body-&gt;u2.node-&gt;u2.node,</div><div class='del'>-			     data-&gt;body-&gt;u2.node-&gt;u3.node);</div><div class='del'>-	data-&gt;body = NEW_NODE(nd_type(data-&gt;body), data-&gt;body-&gt;u1.node, tmp,</div><div class='del'>-			      data-&gt;body-&gt;u3.node);</div><div class='del'>-    }</div><div class='del'>-    return clone;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-method_call(argc, argv, method)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE method;</div><div class='del'>-{</div><div class='del'>-    VALUE result = Qnil;	/* OK */</div><div class='del'>-    struct METHOD *data;</div><div class='del'>-    int safe;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(method, struct METHOD, data);</div><div class='del'>-    if (data-&gt;recv == Qundef) {</div><div class='del'>-	rb_raise(rb_eTypeError, "can't call unbound method; bind first");</div><div class='del'>-    }</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='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	safe = data-&gt;safe_level;</div><div class='del'>-    }</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='del'>-    POP_ITER();</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'>- * 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='del'>-static VALUE</div><div class='del'>-umethod_bind(method, recv)</div><div class='del'>-    VALUE method, recv;</div><div class='del'>-{</div><div class='del'>-    struct METHOD *data, *bound;</div><div class='del'>-    VALUE rklass = CLASS_OF(recv);</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(method, struct METHOD, data);</div><div class='del'>-    if (data-&gt;rklass != rklass) {</div><div class='del'>-	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='del'>-	}</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='del'>-	}</div><div class='del'>-	else if (!rb_obj_is_kind_of(recv, data-&gt;rklass)) {</div><div class='del'>-	  not_instace:</div><div class='del'>-	    rb_raise(rb_eTypeError, "bind argument must be an instance of %s",</div><div class='del'>-		     rb_class2name(data-&gt;rklass));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    method = Data_Make_Struct(rb_cMethod,struct METHOD,bm_mark,free,bound);</div><div class='del'>-    *bound = *data;</div><div class='del'>-    bound-&gt;recv = recv;</div><div class='del'>-    bound-&gt;rklass = rklass;</div><div class='del'>-</div><div class='del'>-    return method;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-method_arity(method)</div><div class='del'>-    VALUE method;</div><div class='del'>-{</div><div class='del'>-    struct METHOD *data;</div><div class='del'>-    NODE *body;</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(method, struct METHOD, data);</div><div class='del'>-</div><div class='del'>-    body = data-&gt;body;</div><div class='del'>-    switch (nd_type(body)) {</div><div class='del'>-      case NODE_CFUNC:</div><div class='del'>-	if (body-&gt;nd_argc &lt; 0) return INT2FIX(-1);</div><div class='del'>-	return INT2FIX(body-&gt;nd_argc);</div><div class='del'>-      case NODE_ZSUPER:</div><div class='del'>-	return INT2FIX(-1);</div><div class='del'>-      case NODE_ATTRSET:</div><div class='del'>-	return INT2FIX(1);</div><div class='del'>-      case NODE_IVAR:</div><div class='del'>-	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='del'>-	body = body-&gt;nd_next;	/* skip NODE_SCOPE */</div><div class='del'>-	if (nd_type(body) == NODE_BLOCK)</div><div class='del'>-	    body = body-&gt;nd_head;</div><div class='del'>-	if (!body) return INT2FIX(0);</div><div class='del'>-	n = body-&gt;nd_cnt;</div><div class='del'>-	if (body-&gt;nd_opt || body-&gt;nd_rest)</div><div class='del'>-	    n = -n-1;</div><div class='del'>-	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='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-method_inspect(method)</div><div class='del'>-    VALUE method;</div><div class='del'>-{</div><div class='del'>-    struct METHOD *data;</div><div class='del'>-    VALUE str;</div><div class='del'>-    const char *s;</div><div class='del'>-    const char *sharp = "#";</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(method, struct METHOD, data);</div><div class='del'>-    str = rb_str_buf_new2("#&lt;");</div><div class='del'>-    s = rb_obj_classname(method);</div><div class='del'>-    rb_str_buf_cat2(str, s);</div><div class='del'>-    rb_str_buf_cat2(str, ": ");</div><div class='del'>-</div><div class='del'>-    if (FL_TEST(data-&gt;klass, FL_SINGLETON)) {</div><div class='del'>-	VALUE v = rb_iv_get(data-&gt;klass, "__attached__");</div><div class='del'>-</div><div class='del'>-	if (data-&gt;recv == Qundef) {</div><div class='del'>-	    rb_str_buf_append(str, rb_inspect(data-&gt;klass));</div><div class='del'>-	}</div><div class='del'>-	else if (data-&gt;recv == v) {</div><div class='del'>-	    rb_str_buf_append(str, rb_inspect(v));</div><div class='del'>-	    sharp = ".";</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_str_buf_append(str, rb_inspect(data-&gt;recv));</div><div class='del'>-	    rb_str_buf_cat2(str, "(");</div><div class='del'>-	    rb_str_buf_append(str, rb_inspect(v));</div><div class='del'>-	    rb_str_buf_cat2(str, ")");</div><div class='del'>-	    sharp = ".";</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_str_buf_cat2(str, rb_class2name(data-&gt;rklass));</div><div class='del'>-	if (data-&gt;rklass != data-&gt;klass) {</div><div class='del'>-	    rb_str_buf_cat2(str, "(");</div><div class='del'>-	    rb_str_buf_cat2(str, rb_class2name(data-&gt;klass));</div><div class='del'>-	    rb_str_buf_cat2(str, ")");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_str_buf_cat2(str, sharp);</div><div class='del'>-    rb_str_buf_cat2(str, rb_id2name(data-&gt;oid));</div><div class='del'>-    rb_str_buf_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'>-static VALUE</div><div class='del'>-mproc(method)</div><div class='del'>-    VALUE method;</div><div class='del'>-{</div><div class='del'>-    VALUE proc;</div><div class='del'>-</div><div class='del'>-    /* emulate ruby's method call */</div><div class='del'>-    PUSH_ITER(ITER_CUR);</div><div class='del'>-    PUSH_FRAME();</div><div class='del'>-    proc = rb_block_proc();</div><div class='del'>-    POP_FRAME();</div><div class='del'>-    POP_ITER();</div><div class='del'>-</div><div class='del'>-    return proc;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bmcall(args, method)</div><div class='del'>-    VALUE args, method;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE a;</div><div class='del'>-    VALUE ret;</div><div class='del'>-</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='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_proc_new(func, val)</div><div class='del'>-    VALUE (*func)(ANYARGS);	/* VALUE yieldarg[, VALUE procarg] */</div><div class='del'>-    VALUE val;</div><div class='del'>-{</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_LAMBDA;</div><div class='del'>-    data-&gt;flags |= BLOCK_LAMBDA;</div><div class='del'>-    return proc;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-method_proc(method)</div><div class='del'>-    VALUE method;</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_obj_is_method(m)</div><div class='del'>-    VALUE m;</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_mod_define_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='del'>-{</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE body;</div><div class='del'>-    NODE *node;</div><div class='del'>-    int noex;</div><div class='del'>-</div><div class='del'>-    if (argc == 1) {</div><div class='del'>-	id = rb_to_id(argv[0]);</div><div class='del'>-	body = proc_lambda();</div><div class='del'>-    }</div><div class='del'>-    else if (argc == 2) {</div><div class='del'>-	id = rb_to_id(argv[0]);</div><div class='del'>-	body = argv[1];</div><div class='del'>-	if (!rb_obj_is_method(body) &amp;&amp; !rb_obj_is_proc(body)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Method)",</div><div class='del'>-		     rb_obj_classname(body));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);</div><div class='del'>-    }</div><div class='del'>-    if (RDATA(body)-&gt;dmark == (RUBY_DATA_FUNC)bm_mark) {</div><div class='del'>-	node = NEW_DMETHOD(method_unbind(body));</div><div class='del'>-    }</div><div class='del'>-    else if (RDATA(body)-&gt;dmark == (RUBY_DATA_FUNC)blk_mark) {</div><div class='del'>-	struct BLOCK *block;</div><div class='del'>-</div><div class='del'>-	body = proc_clone(body);</div><div class='del'>-	Data_Get_Struct(body, struct BLOCK, block);</div><div class='del'>-	block-&gt;frame.last_func = id;</div><div class='del'>-	block-&gt;frame.orig_func = id;</div><div class='del'>-	block-&gt;frame.last_class = mod;</div><div class='del'>-	node = NEW_BMETHOD(body);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	/* type error */</div><div class='del'>-	rb_raise(rb_eTypeError, "wrong argument type (expected Proc/Method)");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    noex = NOEX_PUBLIC;</div><div class='del'>-    if (ruby_cbase == mod) {</div><div class='del'>-	if (SCOPE_TEST(SCOPE_PRIVATE)) {</div><div class='del'>-	    noex = NOEX_PRIVATE;</div><div class='del'>-	}</div><div class='del'>-	else if (SCOPE_TEST(SCOPE_PROTECTED)) {</div><div class='del'>-	    noex = NOEX_PROTECTED;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_add_method(mod, id, node, noex);</div><div class='del'>-    return body;</div><div class='del'>-}</div><div class='del'>-</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='del'>-void</div><div class='del'>-Init_Proc()</div><div class='del'>-{</div><div class='del'>-    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='del'>-    OBJ_TAINT(exception_error);</div><div class='del'>-    OBJ_FREEZE(exception_error);</div><div class='del'>-</div><div class='del'>-    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='del'>-    OBJ_FREEZE(sysstack_error);</div><div class='del'>-</div><div class='del'>-    rb_cProc = rb_define_class("Proc", rb_cObject);</div><div class='del'>-    rb_undef_alloc_func(rb_cProc);</div><div class='del'>-    rb_define_singleton_method(rb_cProc, "new", proc_s_new, -1);</div><div class='del'>-</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='del'>-    rb_define_method(rb_cProc, "call", rb_proc_call, -2);</div><div class='del'>-    rb_define_method(rb_cProc, "arity", proc_arity, 0);</div><div class='del'>-    rb_define_method(rb_cProc, "[]", rb_proc_call, -2);</div><div class='del'>-    rb_define_method(rb_cProc, "==", proc_eq, 1);</div><div class='del'>-    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='del'>-    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='del'>-</div><div class='del'>-    rb_cMethod = rb_define_class("Method", rb_cObject);</div><div class='del'>-    rb_undef_alloc_func(rb_cMethod);</div><div class='del'>-    rb_undef_method(CLASS_OF(rb_cMethod), "new");</div><div class='del'>-    rb_define_method(rb_cMethod, "==", method_eq, 1);</div><div class='del'>-    rb_define_method(rb_cMethod, "clone", method_clone, 0);</div><div class='del'>-    rb_define_method(rb_cMethod, "call", method_call, -1);</div><div class='del'>-    rb_define_method(rb_cMethod, "[]", method_call, -1);</div><div class='del'>-    rb_define_method(rb_cMethod, "arity", method_arity, 0);</div><div class='del'>-    rb_define_method(rb_cMethod, "inspect", method_inspect, 0);</div><div class='del'>-    rb_define_method(rb_cMethod, "to_s", method_inspect, 0);</div><div class='del'>-    rb_define_method(rb_cMethod, "to_proc", method_proc, 0);</div><div class='del'>-    rb_define_method(rb_cMethod, "receiver", method_receiver, 0);</div><div class='del'>-    rb_define_method(rb_cMethod, "name", method_name, 0);</div><div class='del'>-    rb_define_method(rb_cMethod, "owner", method_owner, 0);</div><div class='del'>-    rb_define_method(rb_cMethod, "unbind", method_unbind, 0);</div><div class='del'>-    rb_define_method(rb_mKernel, "method", rb_obj_method, 1);</div><div class='del'>-</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='del'>-    rb_define_method(rb_cUnboundMethod, "name", method_name, 0);</div><div class='del'>-    rb_define_method(rb_cUnboundMethod, "owner", method_owner, 0);</div><div class='del'>-    rb_define_method(rb_cUnboundMethod, "bind", umethod_bind, 1);</div><div class='del'>-    rb_define_method(rb_cModule, "instance_method", rb_mod_method, 1);</div><div class='del'>-}</div><div class='del'>-</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_method(rb_cBinding, "eval", bind_eval, -1);</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'>-/* Windows SEH refers data on the stack. */</div><div class='del'>-#undef SAVE_WIN32_EXCEPTION_LIST</div><div class='del'>-#if defined _WIN32 || defined __CYGWIN__</div><div class='del'>-#if defined __CYGWIN__</div><div class='del'>-typedef unsigned long DWORD;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static inline DWORD</div><div class='del'>-win32_get_exception_list()</div><div class='del'>-{</div><div class='del'>-    DWORD p;</div><div class='del'>-# if defined _MSC_VER</div><div class='del'>-#   ifdef _M_IX86</div><div class='del'>-#   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='del'>-    __asm mov eax, fs:[0];</div><div class='del'>-    __asm mov p, eax;</div><div class='del'>-#   endif</div><div class='del'>-# elif defined __GNUC__</div><div class='del'>-#   ifdef __i386__</div><div class='del'>-#   define SAVE_WIN32_EXCEPTION_LIST</div><div class='del'>-    __asm__("movl %%fs:0,%0" : "=r"(p));</div><div class='del'>-#   endif</div><div class='del'>-# elif defined __BORLANDC__</div><div class='del'>-#   define SAVE_WIN32_EXCEPTION_LIST</div><div class='del'>-    __emit__(0x64, 0xA1, 0, 0, 0, 0); /* mov eax, fs:[0] */</div><div class='del'>-    p = _EAX;</div><div class='del'>-# endif</div><div class='del'>-    return p;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static inline void</div><div class='del'>-win32_set_exception_list(p)</div><div class='del'>-    DWORD p;</div><div class='del'>-{</div><div class='del'>-# if defined _MSC_VER</div><div class='del'>-#   ifdef _M_IX86</div><div class='del'>-    __asm mov eax, p;</div><div class='del'>-    __asm mov fs:[0], eax;</div><div class='del'>-#   endif</div><div class='del'>-# elif defined __GNUC__</div><div class='del'>-#   ifdef __i386__</div><div class='del'>-    __asm__("movl %0,%%fs:0" :: "r"(p));</div><div class='del'>-#   endif</div><div class='del'>-# elif defined __BORLANDC__</div><div class='del'>-    _EAX = p;</div><div class='del'>-    __emit__(0x64, 0xA3, 0, 0, 0, 0); /* mov fs:[0], eax */</div><div class='del'>-# endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if !defined SAVE_WIN32_EXCEPTION_LIST &amp;&amp; !defined _WIN32_WCE</div><div class='del'>-# error unsupported platform</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-int rb_thread_pending = 0;</div><div class='del'>-</div><div class='del'>-VALUE rb_cThread;</div><div class='del'>-</div><div class='del'>-extern VALUE rb_last_status;</div><div class='del'>-</div><div class='del'>-#define WAIT_FD		(1&lt;&lt;0)</div><div class='del'>-#define WAIT_SELECT	(1&lt;&lt;1)</div><div class='del'>-#define WAIT_TIME	(1&lt;&lt;2)</div><div class='del'>-#define WAIT_JOIN	(1&lt;&lt;3)</div><div class='del'>-#define WAIT_PID	(1&lt;&lt;4)</div><div class='del'>-</div><div class='del'>-/* +infty, for this purpose */</div><div class='del'>-#define DELAY_INFTY 1E30</div><div class='del'>-</div><div class='del'>-#if !defined HAVE_PAUSE</div><div class='del'>-# if defined _WIN32 &amp;&amp; !defined __CYGWIN__</div><div class='del'>-#  define pause() Sleep(INFINITE)</div><div class='del'>-# else</div><div class='del'>-#  define pause() sleep(0x7fffffff)</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define THREAD_TERMINATING 0x400 /* persistent flag */</div><div class='del'>-#define THREAD_NO_ENSURE   0x800 /* persistent flag */</div><div class='del'>-#define THREAD_FLAGS_MASK 0xfc00 /* mask for persistent flags */</div><div class='del'>-</div><div class='del'>-#define FOREACH_THREAD_FROM(f,x) x = f; do { x = x-&gt;next;</div><div class='del'>-#define END_FOREACH_FROM(f,x) } while (x != f)</div><div class='del'>-</div><div class='del'>-#define FOREACH_THREAD(x) FOREACH_THREAD_FROM(curr_thread,x)</div><div class='del'>-#define END_FOREACH(x)    END_FOREACH_FROM(curr_thread,x)</div><div class='del'>-</div><div class='del'>-struct thread_status_t {</div><div class='del'>-    NODE *node;</div><div class='del'>-</div><div class='del'>-    int tracing;</div><div class='del'>-    VALUE errinfo;</div><div class='del'>-    VALUE last_status;</div><div class='del'>-    VALUE last_line;</div><div class='del'>-    VALUE last_match;</div><div class='del'>-</div><div class='del'>-    int safe;</div><div class='del'>-</div><div class='del'>-    enum rb_thread_status status;</div><div class='del'>-    int wait_for;</div><div class='del'>-    int fd;</div><div class='del'>-    fd_set readfds;</div><div class='del'>-    fd_set writefds;</div><div class='del'>-    fd_set exceptfds;</div><div class='del'>-    int select_value;</div><div class='del'>-    double delay;</div><div class='del'>-    rb_thread_t join;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define THREAD_COPY_STATUS(src, dst) (void)(	\</div><div class='del'>-    (dst)-&gt;node = (src)-&gt;node,			\</div><div class='del'>-						\</div><div class='del'>-    (dst)-&gt;tracing = (src)-&gt;tracing,		\</div><div class='del'>-    (dst)-&gt;errinfo = (src)-&gt;errinfo,		\</div><div class='del'>-    (dst)-&gt;last_status = (src)-&gt;last_status,	\</div><div class='del'>-    (dst)-&gt;last_line = (src)-&gt;last_line,	\</div><div class='del'>-    (dst)-&gt;last_match = (src)-&gt;last_match,	\</div><div class='del'>-						\</div><div class='del'>-    (dst)-&gt;safe = (src)-&gt;safe,			\</div><div class='del'>-						\</div><div class='del'>-    (dst)-&gt;status = (src)-&gt;status,		\</div><div class='del'>-    (dst)-&gt;wait_for = (src)-&gt;wait_for,		\</div><div class='del'>-    (dst)-&gt;fd = (src)-&gt;fd,			\</div><div class='del'>-    (dst)-&gt;readfds = (src)-&gt;readfds,		\</div><div class='del'>-    (dst)-&gt;writefds = (src)-&gt;writefds,		\</div><div class='del'>-    (dst)-&gt;exceptfds = (src)-&gt;exceptfds,	\</div><div class='del'>-    (dst)-&gt;select_value = (src)-&gt;select_value,	\</div><div class='del'>-    (dst)-&gt;delay = (src)-&gt;delay,		\</div><div class='del'>-    (dst)-&gt;join = (src)-&gt;join,			\</div><div class='del'>-    0)</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_thread_set_raised(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    if (th-&gt;flags &amp; RAISED_EXCEPTION) {</div><div class='del'>-	return 1;</div><div class='del'>-    }</div><div class='del'>-    th-&gt;flags |= RAISED_EXCEPTION;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_thread_reset_raised(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    if (!(th-&gt;flags &amp; RAISED_EXCEPTION)) {</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-    th-&gt;flags &amp;= ~RAISED_EXCEPTION;</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-thread_no_ensure()</div><div class='del'>-{</div><div class='del'>-    return ((curr_thread-&gt;flags &amp; THREAD_NO_ENSURE) == THREAD_NO_ENSURE);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void rb_thread_ready _((rb_thread_t));</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_trap_eval(cmd, sig, safe)</div><div class='del'>-    VALUE cmd;</div><div class='del'>-    int sig, safe;</div><div class='del'>-{</div><div class='del'>-    int state;</div><div class='del'>-    VALUE val = Qnil;		/* OK */</div><div class='del'>-    volatile struct thread_status_t save;</div><div class='del'>-    VALUE arg[3];</div><div class='del'>-</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='del'>-    THREAD_COPY_STATUS(curr_thread, &amp;save);</div><div class='del'>-    rb_thread_ready(curr_thread);</div><div class='del'>-    PUSH_ITER(ITER_NOT);</div><div class='del'>-    val = rb_protect(run_trap_eval, (VALUE)&amp;arg, &amp;state);</div><div class='del'>-    POP_ITER();</div><div class='del'>-    THREAD_COPY_STATUS(&amp;save, curr_thread);</div><div class='del'>-</div><div class='del'>-    if (state) {</div><div class='del'>-	rb_trap_immediate = 0;</div><div class='del'>-	rb_thread_ready(curr_thread);</div><div class='del'>-	JUMP_TAG(state);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (curr_thread-&gt;status == THREAD_STOPPED) {</div><div class='del'>-	rb_thread_schedule();</div><div class='del'>-    }</div><div class='del'>-    errno = EINTR;</div><div class='del'>-</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static const char *</div><div class='del'>-thread_status_name(status)</div><div class='del'>-    enum rb_thread_status status;</div><div class='del'>-{</div><div class='del'>-    switch (status) {</div><div class='del'>-      case THREAD_RUNNABLE:</div><div class='del'>-	return "run";</div><div class='del'>-      case THREAD_STOPPED:</div><div class='del'>-	return "sleep";</div><div class='del'>-      case THREAD_TO_KILL:</div><div class='del'>-	return "aborting";</div><div class='del'>-      case THREAD_KILLED:</div><div class='del'>-	return "dead";</div><div class='del'>-      default:</div><div class='del'>-	return "unknown";</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* $SAFE accessor */</div><div class='del'>-void</div><div class='del'>-rb_set_safe_level(level)</div><div class='del'>-    int level;</div><div class='del'>-{</div><div class='del'>-    if (level &gt; ruby_safe_level) {</div><div class='del'>-	if (level &gt; SAFE_LEVEL_MAX) level = SAFE_LEVEL_MAX;</div><div class='del'>-	ruby_safe_level = level;</div><div class='del'>-	curr_thread-&gt;safe = level;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-safe_getter()</div><div class='del'>-{</div><div class='del'>-    return INT2NUM(ruby_safe_level);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-safe_setter(val)</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    int level = NUM2INT(val);</div><div class='del'>-</div><div class='del'>-    if (level &lt; ruby_safe_level) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "tried to downgrade safe level from %d to %d",</div><div class='del'>-		 ruby_safe_level, level);</div><div class='del'>-    }</div><div class='del'>-    if (level &gt; SAFE_LEVEL_MAX) level = SAFE_LEVEL_MAX;</div><div class='del'>-    ruby_safe_level = level;</div><div class='del'>-    curr_thread-&gt;safe = level;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Return the current time as a floating-point number */</div><div class='del'>-static double</div><div class='del'>-timeofday()</div><div class='del'>-{</div><div class='del'>-    struct timeval tv;</div><div class='del'>-    gettimeofday(&amp;tv, NULL);</div><div class='del'>-    return (double)tv.tv_sec + (double)tv.tv_usec * 1e-6;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#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='del'>-#define ADJ(addr) (void*)(STACK(addr)?(((VALUE*)(addr)-th-&gt;stk_pos)+th-&gt;stk_ptr):(VALUE*)(addr))</div><div class='del'>-static void</div><div class='del'>-thread_mark(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    struct FRAME *frame;</div><div class='del'>-    struct BLOCK *block;</div><div class='del'>-</div><div class='del'>-    rb_gc_mark(th-&gt;result);</div><div class='del'>-    rb_gc_mark(th-&gt;thread);</div><div class='del'>-    if (th-&gt;join) rb_gc_mark(th-&gt;join-&gt;thread);</div><div class='del'>-</div><div class='del'>-    rb_gc_mark(th-&gt;klass);</div><div class='del'>-    rb_gc_mark(th-&gt;wrapper);</div><div class='del'>-    rb_gc_mark((VALUE)th-&gt;cref);</div><div class='del'>-</div><div class='del'>-    rb_gc_mark((VALUE)th-&gt;scope);</div><div class='del'>-    rb_gc_mark((VALUE)th-&gt;dyna_vars);</div><div class='del'>-    rb_gc_mark(th-&gt;errinfo);</div><div class='del'>-    rb_gc_mark(th-&gt;last_status);</div><div class='del'>-    rb_gc_mark(th-&gt;last_line);</div><div class='del'>-    rb_gc_mark(th-&gt;last_match);</div><div class='del'>-    rb_mark_tbl(th-&gt;locals);</div><div class='del'>-    rb_gc_mark(th-&gt;thgroup);</div><div class='del'>-    rb_gc_mark_maybe(th-&gt;sandbox);</div><div class='del'>-</div><div class='del'>-    /* mark data in copied stack */</div><div class='del'>-    if (th == curr_thread) return;</div><div class='del'>-    if (th-&gt;status == THREAD_KILLED) return;</div><div class='del'>-    if (th-&gt;stk_len == 0) return;  /* stack not active, no need to mark. */</div><div class='del'>-    if (th-&gt;stk_ptr) {</div><div class='del'>-	rb_gc_mark_locations(th-&gt;stk_ptr, th-&gt;stk_ptr+th-&gt;stk_len);</div><div class='del'>-#if defined(THINK_C) || defined(__human68k__)</div><div class='del'>-	rb_gc_mark_locations(th-&gt;stk_ptr+2, th-&gt;stk_ptr+th-&gt;stk_len+2);</div><div class='del'>-#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='del'>-    }</div><div class='del'>-    frame = th-&gt;frame;</div><div class='del'>-    while (frame &amp;&amp; frame != top_frame) {</div><div class='del'>-	frame = ADJ(frame);</div><div class='del'>-	rb_gc_mark_frame(frame);</div><div class='del'>-	if (frame-&gt;tmp) {</div><div class='del'>-	    struct FRAME *tmp = frame-&gt;tmp;</div><div class='del'>-</div><div class='del'>-	    while (tmp &amp;&amp; tmp != top_frame) {</div><div class='del'>-		tmp = ADJ(tmp);</div><div class='del'>-		rb_gc_mark_frame(tmp);</div><div class='del'>-		tmp = tmp-&gt;prev;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	frame = frame-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-    block = th-&gt;block;</div><div class='del'>-    while (block) {</div><div class='del'>-	block = ADJ(block);</div><div class='del'>-	rb_gc_mark_frame(&amp;block-&gt;frame);</div><div class='del'>-	block = block-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</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='del'>-void</div><div class='del'>-rb_gc_mark_threads()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-</div><div class='del'>-    /* static global mark */</div><div class='del'>-    rb_gc_mark((VALUE)ruby_cref);</div><div class='del'>-</div><div class='del'>-    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='del'>-	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='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-thread_free(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    if (th-&gt;stk_ptr) free(th-&gt;stk_ptr);</div><div class='del'>-    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='del'>-    if (th-&gt;locals) st_free_table(th-&gt;locals);</div><div class='del'>-    if (th-&gt;status != THREAD_KILLED) {</div><div class='del'>-	if (th-&gt;prev) th-&gt;prev-&gt;next = th-&gt;next;</div><div class='del'>-	if (th-&gt;next) th-&gt;next-&gt;prev = th-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-    if (th != main_thread) free(th);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static rb_thread_t</div><div class='del'>-rb_thread_check(data)</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    if (TYPE(data) != T_DATA || RDATA(data)-&gt;dmark != (RUBY_DATA_FUNC)thread_mark) {</div><div class='del'>-	rb_raise(rb_eTypeError, "wrong argument type %s (expected Thread)",</div><div class='del'>-		 rb_obj_classname(data));</div><div class='del'>-    }</div><div class='del'>-    return (rb_thread_t)RDATA(data)-&gt;data;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE rb_thread_raise _((int, VALUE*, rb_thread_t));</div><div class='del'>-</div><div class='del'>-static VALUE th_raise_exception;</div><div class='del'>-static NODE *th_raise_node;</div><div class='del'>-static VALUE th_cmd;</div><div class='del'>-static int   th_sig, th_safe;</div><div class='del'>-</div><div class='del'>-#define RESTORE_NORMAL		1</div><div class='del'>-#define RESTORE_FATAL		2</div><div class='del'>-#define RESTORE_INTERRUPT	3</div><div class='del'>-#define RESTORE_TRAP		4</div><div class='del'>-#define RESTORE_RAISE		5</div><div class='del'>-#define RESTORE_SIGNAL		6</div><div class='del'>-#define RESTORE_EXIT		7</div><div class='del'>-</div><div class='del'>-extern VALUE *rb_gc_stack_start;</div><div class='del'>-#ifdef __ia64</div><div class='del'>-extern VALUE *rb_gc_register_stack_start;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_thread_save_context(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    VALUE *pos;</div><div class='del'>-    int len;</div><div class='del'>-    static VALUE tval;</div><div class='del'>-</div><div class='del'>-    len = ruby_stack_length(&amp;pos);</div><div class='del'>-    th-&gt;stk_len = 0;</div><div class='del'>-    th-&gt;stk_pos = pos;</div><div class='del'>-    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='del'>-	th-&gt;stk_max = len;</div><div class='del'>-    }</div><div class='del'>-    th-&gt;stk_len = len;</div><div class='del'>-    FLUSH_REGISTER_WINDOWS;</div><div class='del'>-    MEMCPY(th-&gt;stk_ptr, th-&gt;stk_pos, VALUE, th-&gt;stk_len);</div><div class='del'>-#ifdef __ia64</div><div class='del'>-    th-&gt;bstr_pos = rb_gc_register_stack_start;</div><div class='del'>-    len = (VALUE*)rb_ia64_bsp() - th-&gt;bstr_pos;</div><div class='del'>-    th-&gt;bstr_len = 0;</div><div class='del'>-    if (len &gt; th-&gt;bstr_max) {</div><div class='del'>-        VALUE *ptr = realloc(th-&gt;bstr_ptr, sizeof(VALUE) * len);</div><div class='del'>-        if (!ptr) rb_memerror();</div><div class='del'>-        th-&gt;bstr_ptr = ptr;</div><div class='del'>-        th-&gt;bstr_max = len;</div><div class='del'>-    }</div><div class='del'>-    th-&gt;bstr_len = len;</div><div class='del'>-    rb_ia64_flushrs();</div><div class='del'>-    MEMCPY(th-&gt;bstr_ptr, th-&gt;bstr_pos, VALUE, th-&gt;bstr_len);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SAVE_WIN32_EXCEPTION_LIST</div><div class='del'>-    th-&gt;win32_exception_list = win32_get_exception_list();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    th-&gt;frame = ruby_frame;</div><div class='del'>-    th-&gt;scope = ruby_scope;</div><div class='del'>-    ruby_scope-&gt;flags |= SCOPE_DONT_RECYCLE;</div><div class='del'>-    th-&gt;klass = ruby_class;</div><div class='del'>-    th-&gt;wrapper = ruby_wrapper;</div><div class='del'>-    th-&gt;cref = ruby_cref;</div><div class='del'>-    th-&gt;dyna_vars = ruby_dyna_vars;</div><div class='del'>-    th-&gt;block = ruby_block;</div><div class='del'>-    th-&gt;flags &amp;= THREAD_FLAGS_MASK;</div><div class='del'>-    th-&gt;flags |= (rb_trap_immediate&lt;&lt;8) | scope_vmode;</div><div class='del'>-    th-&gt;iter = ruby_iter;</div><div class='del'>-    th-&gt;tag = prot_tag;</div><div class='del'>-    th-&gt;tracing = tracing;</div><div class='del'>-    th-&gt;errinfo = ruby_errinfo;</div><div class='del'>-    th-&gt;last_status = rb_last_status;</div><div class='del'>-    tval = rb_lastline_get();</div><div class='del'>-    rb_lastline_set(th-&gt;last_line);</div><div class='del'>-    th-&gt;last_line = tval;</div><div class='del'>-    tval = rb_backref_get();</div><div class='del'>-    rb_backref_set(th-&gt;last_match);</div><div class='del'>-    th-&gt;last_match = tval;</div><div class='del'>-    th-&gt;safe = ruby_safe_level;</div><div class='del'>-</div><div class='del'>-    th-&gt;node = ruby_current_node;</div><div class='del'>-    if (ruby_sandbox_save != NULL)</div><div class='del'>-    {</div><div class='del'>-      ruby_sandbox_save(th);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_thread_switch(n)</div><div class='del'>-    int n;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-    rb_trap_immediate = (curr_thread-&gt;flags&amp;0x100)?1:0;</div><div class='del'>-    switch (n) {</div><div class='del'>-      case 0:</div><div class='del'>-	return 0;</div><div class='del'>-      case RESTORE_FATAL:</div><div class='del'>-	JUMP_TAG(TAG_FATAL);</div><div class='del'>-	break;</div><div class='del'>-      case RESTORE_INTERRUPT:</div><div class='del'>-	rb_interrupt();</div><div class='del'>-	break;</div><div class='del'>-      case RESTORE_TRAP:</div><div class='del'>-	rb_trap_eval(th_cmd, th_sig, th_safe);</div><div class='del'>-	break;</div><div class='del'>-      case RESTORE_RAISE:</div><div class='del'>-	ruby_frame-&gt;last_func = 0;</div><div class='del'>-	ruby_current_node = th_raise_node;</div><div class='del'>-	rb_raise_jump(th_raise_exception);</div><div class='del'>-	break;</div><div class='del'>-      case RESTORE_SIGNAL:</div><div class='del'>-	rb_thread_signal_raise(th_sig);</div><div class='del'>-	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='del'>-      case RESTORE_NORMAL:</div><div class='del'>-      default:</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define THREAD_SAVE_CONTEXT(th) \</div><div class='del'>-    (rb_thread_switch(ruby_setjmp(rb_thread_save_context(th), (th)-&gt;context)))</div><div class='del'>-</div><div class='del'>-NORETURN(static void rb_thread_restore_context _((rb_thread_t,int)));</div><div class='del'>-NORETURN(NOINLINE(static void rb_thread_restore_context_0(rb_thread_t,int,void*)));</div><div class='del'>-NORETURN(NOINLINE(static void stack_extend(rb_thread_t, int, VALUE *)));</div><div class='add'>+    char *file;</div><div class='add'>+    VALUE *p, *pend;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-rb_thread_restore_context_0(rb_thread_t th, int exit, void *vp)</div><div class='del'>-{</div><div class='del'>-    static rb_thread_t tmp;</div><div class='del'>-    static int ex;</div><div class='del'>-    static VALUE tval;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    file = find_file(fname-&gt;ptr);</div><div class='ctx'> </div><div class='del'>-    rb_trap_immediate = 0;	/* inhibit interrupts from here */</div><div class='del'>-    if (ruby_sandbox_restore != NULL)</div><div class='del'>-    {</div><div class='del'>-      ruby_sandbox_restore(th);</div><div class='add'>+    p = RARRAY(rb_loadfiles)-&gt;ptr;</div><div class='add'>+    pend = p+ RARRAY(rb_loadfiles)-&gt;len;</div><div class='add'>+    while (p &lt; pend) {</div><div class='add'>+	Check_Type(*p, T_STRING);</div><div class='add'>+	if (strcmp(RSTRING(*p)-&gt;ptr, file) == 0) return FALSE;</div><div class='ctx'>     }</div><div class='del'>-    ruby_frame = th-&gt;frame;</div><div class='del'>-    ruby_scope = th-&gt;scope;</div><div class='del'>-    ruby_class = th-&gt;klass;</div><div class='del'>-    ruby_wrapper = th-&gt;wrapper;</div><div class='del'>-    ruby_cref = th-&gt;cref;</div><div class='del'>-    ruby_dyna_vars = th-&gt;dyna_vars;</div><div class='del'>-    ruby_block = th-&gt;block;</div><div class='del'>-    scope_vmode = th-&gt;flags&amp;SCOPE_MASK;</div><div class='del'>-    ruby_iter = th-&gt;iter;</div><div class='del'>-    prot_tag = th-&gt;tag;</div><div class='del'>-    tracing = th-&gt;tracing;</div><div class='del'>-    ruby_errinfo = th-&gt;errinfo;</div><div class='del'>-    rb_last_status = th-&gt;last_status;</div><div class='del'>-    ruby_safe_level = th-&gt;safe;</div><div class='del'>-</div><div class='del'>-    ruby_current_node = th-&gt;node;</div><div class='del'>-</div><div class='del'>-#ifdef SAVE_WIN32_EXCEPTION_LIST</div><div class='del'>-    win32_set_exception_list(th-&gt;win32_exception_list);</div><div class='del'>-#endif</div><div class='del'>-    tmp = th;</div><div class='del'>-    ex = exit;</div><div class='del'>-    FLUSH_REGISTER_WINDOWS;</div><div class='del'>-    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(tmp-&gt;bstr_pos, tmp-&gt;bstr_ptr, VALUE, tmp-&gt;bstr_len);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    tval = rb_lastline_get();</div><div class='del'>-    rb_lastline_set(tmp-&gt;last_line);</div><div class='del'>-    tmp-&gt;last_line = tval;</div><div class='del'>-    tval = rb_backref_get();</div><div class='del'>-    rb_backref_set(tmp-&gt;last_match);</div><div class='del'>-    tmp-&gt;last_match = tval;</div><div class='add'>+    Fary_push(rb_loadfiles, str_new2(file));</div><div class='ctx'> </div><div class='del'>-    ruby_longjmp(tmp-&gt;context, ex);</div><div class='add'>+    Fload(obj, fname);</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifdef __ia64</div><div class='del'>-#define C(a) rse_##a##0, rse_##a##1, rse_##a##2, rse_##a##3, rse_##a##4</div><div class='del'>-#define E(a) rse_##a##0= rse_##a##1= rse_##a##2= rse_##a##3= rse_##a##4</div><div class='del'>-static volatile int C(a), C(b), C(c), C(d), C(e);</div><div class='del'>-static volatile int C(f), C(g), C(h), C(i), C(j);</div><div class='del'>-static volatile int C(k), C(l), C(m), C(n), C(o);</div><div class='del'>-static volatile int C(p), C(q), C(r), C(s), C(t);</div><div class='del'>-int rb_dummy_false = 0;</div><div class='del'>-NORETURN(NOINLINE(static void register_stack_extend(rb_thread_t, int, void *, VALUE *)));</div><div class='del'>-static void</div><div class='del'>-register_stack_extend(rb_thread_t th, int exit, void *vp, VALUE *curr_bsp)</div><div class='del'>-{</div><div class='del'>-    if (rb_dummy_false) {</div><div class='del'>-        /* use registers as much as possible */</div><div class='del'>-        E(a) = E(b) = E(c) = E(d) = E(e) =</div><div class='del'>-        E(f) = E(g) = E(h) = E(i) = E(j) =</div><div class='del'>-        E(k) = E(l) = E(m) = E(n) = E(o) =</div><div class='del'>-        E(p) = E(q) = E(r) = E(s) = E(t) = 0;</div><div class='del'>-        E(a) = E(b) = E(c) = E(d) = E(e) =</div><div class='del'>-        E(f) = E(g) = E(h) = E(i) = E(j) =</div><div class='del'>-        E(k) = E(l) = E(m) = E(n) = E(o) =</div><div class='del'>-        E(p) = E(q) = E(r) = E(s) = E(t) = 0;</div><div class='del'>-    }</div><div class='del'>-    if (curr_bsp &lt; th-&gt;bstr_pos+th-&gt;bstr_len) {</div><div class='del'>-        register_stack_extend(th, exit, &amp;exit, (VALUE*)rb_ia64_bsp());</div><div class='del'>-    }</div><div class='del'>-    rb_thread_restore_context_0(th, exit, &amp;exit);</div><div class='del'>-}</div><div class='del'>-#undef C</div><div class='del'>-#undef E</div><div class='del'>-#endif</div><div class='add'>+char *getenv();</div><div class='add'>+char *index();</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, VALUE*);</div><div class='del'>-# endif</div><div class='del'>-static void</div><div class='del'>-stack_extend(rb_thread_t th, int exit, VALUE *addr_in_prev_frame)</div><div class='del'>-{</div><div class='del'>-#define STACK_PAD_SIZE 1024</div><div class='del'>-    VALUE space[STACK_PAD_SIZE];</div><div class='del'>-</div><div class='del'>-#if STACK_GROW_DIRECTION &lt; 0</div><div class='del'>-    if (addr_in_prev_frame &gt; th-&gt;stk_pos) stack_extend(th, exit, &amp;space[0]);</div><div class='del'>-#elif STACK_GROW_DIRECTION &gt; 0</div><div class='del'>-    if (addr_in_prev_frame &lt; th-&gt;stk_pos + th-&gt;stk_len) stack_extend(th, exit, &amp;space[STACK_PAD_SIZE-1]);</div><div class='del'>-#else</div><div class='del'>-    if (addr_in_prev_frame &lt; rb_gc_stack_start) {</div><div class='del'>-        /* Stack grows downward */</div><div class='del'>-        if (addr_in_prev_frame &gt; th-&gt;stk_pos) stack_extend(th, exit, &amp;space[0]);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        /* Stack grows upward */</div><div class='del'>-        if (addr_in_prev_frame &lt; th-&gt;stk_pos + th-&gt;stk_len) stack_extend(th, exit, &amp;space[STACK_PAD_SIZE-1]);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef __ia64</div><div class='del'>-    register_stack_extend(th, exit, space, (VALUE*)rb_ia64_bsp());</div><div class='del'>-#else</div><div class='del'>-    rb_thread_restore_context_0(th, exit, space);</div><div class='add'>+#ifndef RUBY_LIB</div><div class='add'>+#define RUBY_LIB "/usr/local/lib/ruby:."</div><div class='ctx'> #endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_thread_restore_context(th, exit)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    int exit;</div><div class='del'>-{</div><div class='del'>-    VALUE v;</div><div class='del'>-    if (!th-&gt;stk_ptr) rb_bug("unsaved context");</div><div class='del'>-    stack_extend(th, exit, &amp;v);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_thread_ready(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    th-&gt;wait_for = 0;</div><div class='del'>-    if (th-&gt;status != THREAD_TO_KILL) {</div><div class='del'>-	th-&gt;status = THREAD_RUNNABLE;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_thread_die(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    th-&gt;thgroup = 0;</div><div class='del'>-    th-&gt;status = THREAD_KILLED;</div><div class='del'>-    if (th-&gt;stk_ptr) free(th-&gt;stk_ptr);</div><div class='del'>-    th-&gt;stk_ptr = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_thread_remove(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    if (th-&gt;status == THREAD_KILLED) return;</div><div class='del'>-</div><div class='del'>-    rb_thread_ready(th);</div><div class='del'>-    rb_thread_die(th);</div><div class='del'>-    th-&gt;prev-&gt;next = th-&gt;next;</div><div class='del'>-    th-&gt;next-&gt;prev = th-&gt;prev;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_thread_dead(th)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    return th-&gt;status == THREAD_KILLED;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_fd_close(fd)</div><div class='del'>-    int fd;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-</div><div class='del'>-    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='del'>-	    VALUE exc = rb_exc_new2(rb_eIOError, "stream closed");</div><div class='del'>-	    rb_thread_raise(1, &amp;exc, th);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    END_FOREACH(th);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static void</div><div class='del'>-rb_thread_deadlock()</div><div class='del'>-{</div><div class='del'>-    char msg[21+SIZEOF_LONG*2];</div><div class='del'>-    VALUE e;</div><div class='ctx'> </div><div class='del'>-    sprintf(msg, "Thread(0x%lx): deadlock", curr_thread-&gt;thread);</div><div class='del'>-    e = rb_exc_new2(rb_eFatal, msg);</div><div class='del'>-    if (curr_thread == main_thread) {</div><div class='del'>-	rb_exc_raise(e);</div><div class='del'>-    }</div><div class='del'>-    rb_thread_main_jump(e, RESTORE_RAISE);</div><div class='del'>-}</div><div class='add'>+#define RUBY_LIB_SEP ':'</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='del'>-copy_fds(dst, src, max)</div><div class='del'>-    fd_set *dst, *src;</div><div class='del'>-    int max;</div><div class='del'>-{</div><div class='del'>-    int n = 0;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;=max; i++) {</div><div class='del'>-	if (FD_ISSET(i, src)) {</div><div class='del'>-	    n = i;</div><div class='del'>-	    FD_SET(i, dst);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-match_fds(dst, src, max)</div><div class='del'>-    fd_set *dst, *src;</div><div class='del'>-    int max;</div><div class='add'>+addpath(path)</div><div class='add'>+    char *path;</div><div class='ctx'> {</div><div class='del'>-    int i;</div><div class='add'>+    char *p, *s;</div><div class='ctx'> </div><div class='del'>-    for (i=0; i&lt;=max; i++) {</div><div class='del'>-	if (FD_ISSET(i, src) &amp;&amp; FD_ISSET(i, dst)) {</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='add'>+    if (path == Qnil) return;</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-intersect_fds(src, dst, max)</div><div class='del'>-    fd_set *src, *dst;</div><div class='del'>-    int max;</div><div class='del'>-{</div><div class='del'>-    int i, n = 0;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;=max; i++) {</div><div class='del'>-	if (FD_ISSET(i, dst)) {</div><div class='del'>-	    if (FD_ISSET(i, src)) {</div><div class='del'>-		/* Wake up only one thread per fd. */</div><div class='del'>-		FD_CLR(i, src);</div><div class='del'>-		n++;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		FD_CLR(i, dst);</div><div class='del'>-	    }</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'>-static int</div><div class='del'>-find_bad_fds(dst, src, max)</div><div class='del'>-    fd_set *dst, *src;</div><div class='del'>-    int max;</div><div class='del'>-{</div><div class='del'>-    int i, test = Qfalse;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;=max; i++) {</div><div class='del'>-	if (FD_ISSET(i, src) &amp;&amp; !FD_ISSET(i, dst)) {</div><div class='del'>-	    FD_CLR(i, src);</div><div class='del'>-	    test = Qtrue;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return test;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_schedule()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t next;		/* OK */</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    rb_thread_t curr;</div><div class='del'>-    int found = 0;</div><div class='del'>-</div><div class='del'>-    fd_set readfds;</div><div class='del'>-    fd_set writefds;</div><div class='del'>-    fd_set exceptfds;</div><div class='del'>-    struct timeval delay_tv, *delay_ptr;</div><div class='del'>-    double delay, now;	/* OK */</div><div class='del'>-    int n, max;</div><div class='del'>-    int need_select = 0;</div><div class='del'>-    int select_timeout = 0;</div><div class='del'>-</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='del'>-    rb_thread_pending = 0;</div><div class='del'>-    if (curr_thread == curr_thread-&gt;next</div><div class='del'>-	&amp;&amp; curr_thread-&gt;status == THREAD_RUNNABLE)</div><div class='del'>-	return;</div><div class='del'>-</div><div class='del'>-    next = 0;</div><div class='del'>-    curr = curr_thread;		/* starting thread */</div><div class='del'>-</div><div class='del'>-    while (curr-&gt;status == THREAD_KILLED) {</div><div class='del'>-	curr = curr-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  again:</div><div class='del'>-    max = -1;</div><div class='del'>-    FD_ZERO(&amp;readfds);</div><div class='del'>-    FD_ZERO(&amp;writefds);</div><div class='del'>-    FD_ZERO(&amp;exceptfds);</div><div class='del'>-    delay = DELAY_INFTY;</div><div class='del'>-    now = -1.0;</div><div class='del'>-</div><div class='del'>-    FOREACH_THREAD_FROM(curr, th) {</div><div class='del'>-	if (!found &amp;&amp; th-&gt;status &lt;= THREAD_RUNNABLE) {</div><div class='del'>-	    found = 1;</div><div class='del'>-	}</div><div class='del'>-	if (th-&gt;status != THREAD_STOPPED) continue;</div><div class='del'>-	if (th-&gt;wait_for &amp; WAIT_JOIN) {</div><div class='del'>-	    if (rb_thread_dead(th-&gt;join)) {</div><div class='del'>-		th-&gt;status = THREAD_RUNNABLE;</div><div class='del'>-		found = 1;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	if (th-&gt;wait_for &amp; WAIT_FD) {</div><div class='del'>-	    FD_SET(th-&gt;fd, &amp;readfds);</div><div class='del'>-	    if (max &lt; th-&gt;fd) max = th-&gt;fd;</div><div class='del'>-	    need_select = 1;</div><div class='del'>-	}</div><div class='del'>-	if (th-&gt;wait_for &amp; WAIT_SELECT) {</div><div class='del'>-	    copy_fds(&amp;readfds, &amp;th-&gt;readfds, th-&gt;fd);</div><div class='del'>-	    copy_fds(&amp;writefds, &amp;th-&gt;writefds, th-&gt;fd);</div><div class='del'>-	    copy_fds(&amp;exceptfds, &amp;th-&gt;exceptfds, th-&gt;fd);</div><div class='del'>-	    if (max &lt; th-&gt;fd) max = th-&gt;fd;</div><div class='del'>-	    need_select = 1;</div><div class='del'>-	    if (th-&gt;wait_for &amp; WAIT_TIME) {</div><div class='del'>-		select_timeout = 1;</div><div class='del'>-	    }</div><div class='del'>-	    th-&gt;select_value = 0;</div><div class='del'>-	}</div><div class='del'>-	if (th-&gt;wait_for &amp; WAIT_TIME) {</div><div class='del'>-	    double th_delay;</div><div class='del'>-</div><div class='del'>-	    if (now &lt; 0.0) now = timeofday();</div><div class='del'>-	    th_delay = th-&gt;delay - now;</div><div class='del'>-	    if (th_delay &lt;= 0.0) {</div><div class='del'>-		th-&gt;status = THREAD_RUNNABLE;</div><div class='del'>-		found = 1;</div><div class='del'>-	    }</div><div class='del'>-	    else if (th_delay &lt; delay) {</div><div class='del'>-		delay = th_delay;</div><div class='del'>-		need_select = 1;</div><div class='del'>-	    }</div><div class='del'>-	    else if (th-&gt;delay == DELAY_INFTY) {</div><div class='del'>-		need_select = 1;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    END_FOREACH_FROM(curr, th);</div><div class='del'>-</div><div class='del'>-    /* Do the select if needed */</div><div class='del'>-    if (need_select) {</div><div class='del'>-	/* Convert delay to a timeval */</div><div class='del'>-	/* If a thread is runnable, just poll */</div><div class='del'>-	if (found) {</div><div class='del'>-	    delay_tv.tv_sec = 0;</div><div class='del'>-	    delay_tv.tv_usec = 0;</div><div class='del'>-	    delay_ptr = &amp;delay_tv;</div><div class='del'>-	}</div><div class='del'>-	else if (delay == DELAY_INFTY) {</div><div class='del'>-	    delay_ptr = 0;</div><div class='add'>+    p = s = path;</div><div class='add'>+    while (*p) {</div><div class='add'>+	while (*p == RUBY_LIB_SEP) p++;</div><div class='add'>+	if (s = index(p, RUBY_LIB_SEP)) {</div><div class='add'>+	    Fary_push(rb_load_path, str_new(p, (int)(s-p)));</div><div class='add'>+	    p = s + 1;</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='del'>-	    delay_tv.tv_sec = delay;</div><div class='del'>-	    delay_tv.tv_usec = (delay - (double)delay_tv.tv_sec)*1e6;</div><div class='del'>-	    delay_ptr = &amp;delay_tv;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	n = select(max+1, &amp;readfds, &amp;writefds, &amp;exceptfds, delay_ptr);</div><div class='del'>-	if (n &lt; 0) {</div><div class='del'>-	    int e = errno;</div><div class='del'>-</div><div class='del'>-	    if (rb_trap_pending) rb_trap_exec();</div><div class='del'>-	    if (e == EINTR) goto again;</div><div class='del'>-#ifdef ERESTART</div><div class='del'>-	    if (e == ERESTART) goto again;</div><div class='del'>-#endif</div><div class='del'>-	    FOREACH_THREAD_FROM(curr, th) {</div><div class='del'>-		if (th-&gt;wait_for &amp; WAIT_SELECT) {</div><div class='del'>-		    int v = 0;</div><div class='del'>-</div><div class='del'>-		    v |= find_bad_fds(&amp;readfds, &amp;th-&gt;readfds, th-&gt;fd);</div><div class='del'>-		    v |= find_bad_fds(&amp;writefds, &amp;th-&gt;writefds, th-&gt;fd);</div><div class='del'>-		    v |= find_bad_fds(&amp;exceptfds, &amp;th-&gt;exceptfds, th-&gt;fd);</div><div class='del'>-		    if (v) {</div><div class='del'>-			th-&gt;select_value = n;</div><div class='del'>-			n = max;</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    END_FOREACH_FROM(curr, th);</div><div class='del'>-	}</div><div class='del'>- 	if (select_timeout &amp;&amp; n == 0) {</div><div class='del'>- 	    if (now &lt; 0.0) now = timeofday();</div><div class='del'>- 	    FOREACH_THREAD_FROM(curr, th) {</div><div class='del'>- 		if (((th-&gt;wait_for&amp;(WAIT_SELECT|WAIT_TIME)) == (WAIT_SELECT|WAIT_TIME)) &amp;&amp;</div><div class='del'>-		    th-&gt;delay &lt;= now) {</div><div class='del'>- 		    th-&gt;status = THREAD_RUNNABLE;</div><div class='del'>- 		    th-&gt;wait_for = 0;</div><div class='del'>- 		    th-&gt;select_value = 0;</div><div class='del'>- 		    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='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    END_FOREACH_FROM(curr, th);</div><div class='del'>-	}</div><div class='del'>-	if (n &gt; 0) {</div><div class='del'>-	    now = -1.0;</div><div class='del'>-	    /* Some descriptors are ready.</div><div class='del'>-	       Make the corresponding threads runnable. */</div><div class='del'>-	    FOREACH_THREAD_FROM(curr, th) {</div><div class='del'>-		if ((th-&gt;wait_for&amp;WAIT_FD) &amp;&amp; FD_ISSET(th-&gt;fd, &amp;readfds)) {</div><div class='del'>-		    /* Wake up only one thread per fd. */</div><div class='del'>-		    FD_CLR(th-&gt;fd, &amp;readfds);</div><div class='del'>-		    th-&gt;status = THREAD_RUNNABLE;</div><div class='del'>-		    th-&gt;fd = 0;</div><div class='del'>-		    th-&gt;wait_for = 0;</div><div class='del'>-		    found = 1;</div><div class='del'>-		}</div><div class='del'>-		if ((th-&gt;wait_for&amp;WAIT_SELECT) &amp;&amp;</div><div class='del'>-		    (match_fds(&amp;readfds, &amp;th-&gt;readfds, max) ||</div><div class='del'>-		     match_fds(&amp;writefds, &amp;th-&gt;writefds, max) ||</div><div class='del'>-		     match_fds(&amp;exceptfds, &amp;th-&gt;exceptfds, max))) {</div><div class='del'>-		    /* Wake up only one thread per fd. */</div><div class='del'>-		    th-&gt;status = THREAD_RUNNABLE;</div><div class='del'>-		    th-&gt;wait_for = 0;</div><div class='del'>-		    n = 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='del'>-		    th-&gt;select_value = n;</div><div class='del'>-		    found = 1;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    END_FOREACH_FROM(curr, th);</div><div class='del'>-	}</div><div class='del'>-	/* The delays for some of the threads should have expired.</div><div class='del'>-	   Go through the loop once more, to check the delays. */</div><div class='del'>-	if (!found &amp;&amp; delay != DELAY_INFTY)</div><div class='del'>-	    goto again;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    FOREACH_THREAD_FROM(curr, th) {</div><div class='del'>-	if (th-&gt;status == THREAD_TO_KILL) {</div><div class='del'>-	    next = th;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	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='del'>-	       next = th;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    END_FOREACH_FROM(curr, th);</div><div class='del'>-</div><div class='del'>-    if (!next) {</div><div class='del'>-	/* raise fatal error to main thread */</div><div class='del'>-	curr_thread-&gt;node = ruby_current_node;</div><div class='del'>-	if (curr-&gt;next == curr) {</div><div class='del'>-	    TRAP_BEG;</div><div class='del'>-	    pause();</div><div class='del'>-	    TRAP_END;</div><div class='del'>-	}</div><div class='del'>-	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='del'>-	    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='del'>-	}</div><div class='del'>-	END_FOREACH_FROM(curr, th);</div><div class='del'>-	next = main_thread;</div><div class='del'>-	rb_thread_ready(next);</div><div class='del'>-	next-&gt;status = THREAD_TO_KILL;</div><div class='del'>-	if (!rb_thread_dead(curr_thread)) {</div><div class='del'>-	    rb_thread_save_context(curr_thread);</div><div class='del'>-	}</div><div class='del'>-	rb_thread_deadlock();</div><div class='del'>-    }</div><div class='del'>-    next-&gt;wait_for = 0;</div><div class='del'>-    if (next-&gt;status == THREAD_RUNNABLE &amp;&amp; next == curr_thread) {</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* context switch */</div><div class='del'>-    if (curr == curr_thread) {</div><div class='del'>-	if (THREAD_SAVE_CONTEXT(curr)) {</div><div class='del'>-	    return;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    curr_thread = next;</div><div class='del'>-    if (next-&gt;status == THREAD_TO_KILL) {</div><div class='del'>-	if (!(next-&gt;flags &amp; THREAD_TERMINATING)) {</div><div class='del'>-	    next-&gt;flags |= THREAD_TERMINATING;</div><div class='del'>-	    /* terminate; execute ensure-clause if any */</div><div class='del'>-	    rb_thread_restore_context(next, RESTORE_FATAL);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_thread_restore_context(next, RESTORE_NORMAL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_wait_fd(fd)</div><div class='del'>-    int fd;</div><div class='del'>-{</div><div class='del'>-    if (rb_thread_critical) return;</div><div class='del'>-    if (ruby_in_compile) return;</div><div class='del'>-    if (curr_thread == curr_thread-&gt;next) return;</div><div class='del'>-    if (curr_thread-&gt;status == THREAD_TO_KILL) return;</div><div class='del'>-</div><div class='del'>-    curr_thread-&gt;status = THREAD_STOPPED;</div><div class='del'>-    curr_thread-&gt;fd = fd;</div><div class='del'>-    curr_thread-&gt;wait_for = WAIT_FD;</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_thread_fd_writable(fd)</div><div class='del'>-    int fd;</div><div class='del'>-{</div><div class='del'>-    if (rb_thread_critical) return Qtrue;</div><div class='del'>-    if (curr_thread == curr_thread-&gt;next) return Qtrue;</div><div class='del'>-    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='del'>-</div><div class='del'>-    curr_thread-&gt;status = THREAD_STOPPED;</div><div class='del'>-    FD_ZERO(&amp;curr_thread-&gt;readfds);</div><div class='del'>-    FD_ZERO(&amp;curr_thread-&gt;writefds);</div><div class='del'>-    FD_SET(fd, &amp;curr_thread-&gt;writefds);</div><div class='del'>-    FD_ZERO(&amp;curr_thread-&gt;exceptfds);</div><div class='del'>-    curr_thread-&gt;fd = fd+1;</div><div class='del'>-    curr_thread-&gt;wait_for = WAIT_SELECT;</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_wait_for(time)</div><div class='del'>-    struct timeval time;</div><div class='del'>-{</div><div class='del'>-    double date;</div><div class='del'>-</div><div class='del'>-    if (rb_thread_critical ||</div><div class='del'>-	curr_thread == curr_thread-&gt;next ||</div><div class='del'>-	curr_thread-&gt;status == THREAD_TO_KILL) {</div><div class='del'>-	int n;</div><div class='del'>-	int thr_critical = rb_thread_critical;</div><div class='del'>-#ifndef linux</div><div class='del'>-	double d, limit;</div><div class='del'>-	limit = timeofday()+(double)time.tv_sec+(double)time.tv_usec*1e-6;</div><div class='del'>-#endif</div><div class='del'>-	for (;;) {</div><div class='del'>-	    rb_thread_critical = Qtrue;</div><div class='del'>-	    TRAP_BEG;</div><div class='del'>-	    n = select(0, 0, 0, 0, &amp;time);</div><div class='del'>-	    rb_thread_critical = thr_critical;</div><div class='del'>-	    TRAP_END;</div><div class='del'>-	    if (n == 0) return;</div><div class='del'>-	    if (n &lt; 0) {</div><div class='del'>-		switch (errno) {</div><div class='del'>-		  case EINTR:</div><div class='del'>-#ifdef ERESTART</div><div class='del'>-		  case ERESTART:</div><div class='del'>-#endif</div><div class='del'>-		    break;</div><div class='del'>-		  default:</div><div class='del'>-		    rb_sys_fail("sleep");</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-#ifndef linux</div><div class='del'>-	    d = limit - timeofday();</div><div class='del'>-</div><div class='del'>-	    time.tv_sec = (int)d;</div><div class='del'>-	    time.tv_usec = (int)((d - (int)d)*1e6);</div><div class='del'>-	    if (time.tv_usec &lt; 0) {</div><div class='del'>-		time.tv_usec += (long)1e6;</div><div class='del'>-		time.tv_sec -= 1;</div><div class='del'>-	    }</div><div class='del'>-	    if (time.tv_sec &lt; 0) return;</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    date = timeofday() + (double)time.tv_sec + (double)time.tv_usec*1e-6;</div><div class='del'>-    curr_thread-&gt;status = THREAD_STOPPED;</div><div class='del'>-    curr_thread-&gt;delay = date;</div><div class='del'>-    curr_thread-&gt;wait_for = WAIT_TIME;</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void rb_thread_sleep_forever _((void));</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_thread_alone()</div><div class='del'>-{</div><div class='del'>-    return curr_thread == curr_thread-&gt;next;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_thread_select(max, read, write, except, timeout)</div><div class='del'>-    int max;</div><div class='del'>-    fd_set *read, *write, *except;</div><div class='del'>-    struct timeval *timeout;</div><div class='del'>-{</div><div class='del'>-#ifndef linux</div><div class='del'>-    double limit;</div><div class='del'>-#endif</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    if (!read &amp;&amp; !write &amp;&amp; !except) {</div><div class='del'>-	if (!timeout) {</div><div class='del'>-	    rb_thread_sleep_forever();</div><div class='del'>-	    return 0;</div><div class='del'>-	}</div><div class='del'>-	rb_thread_wait_for(*timeout);</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#ifndef linux</div><div class='del'>-    if (timeout) {</div><div class='del'>-	limit = timeofday()+</div><div class='del'>-	    (double)timeout-&gt;tv_sec+(double)timeout-&gt;tv_usec*1e-6;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (rb_thread_critical ||</div><div class='del'>-	curr_thread == curr_thread-&gt;next ||</div><div class='del'>-	curr_thread-&gt;status == THREAD_TO_KILL) {</div><div class='del'>-#ifndef linux</div><div class='del'>-	struct timeval tv, *tvp = timeout;</div><div class='del'>-</div><div class='del'>-	if (timeout) {</div><div class='del'>-	    tv = *timeout;</div><div class='del'>-	    tvp = &amp;tv;</div><div class='del'>-	}</div><div class='del'>-#else</div><div class='del'>-	struct timeval *const tvp = timeout;</div><div class='del'>-#endif</div><div class='del'>-	for (;;) {</div><div class='del'>-	    TRAP_BEG;</div><div class='del'>-	    n = select(max, read, write, except, tvp);</div><div class='del'>-	    TRAP_END;</div><div class='del'>-	    if (n &lt; 0) {</div><div class='del'>-		switch (errno) {</div><div class='del'>-		  case EINTR:</div><div class='del'>-#ifdef ERESTART</div><div class='del'>-		  case ERESTART:</div><div class='del'>-#endif</div><div class='del'>-#ifndef linux</div><div class='del'>-		    if (timeout) {</div><div class='del'>-			double d = limit - timeofday();</div><div class='del'>-</div><div class='del'>-			tv.tv_sec = (unsigned int)d;</div><div class='del'>-			tv.tv_usec = (long)((d-(double)tv.tv_sec)*1e6);</div><div class='del'>-			if (tv.tv_sec &lt; 0)  tv.tv_sec = 0;</div><div class='del'>-			if (tv.tv_usec &lt; 0) tv.tv_usec = 0;</div><div class='del'>-		    }</div><div class='del'>-#endif</div><div class='del'>-		    continue;</div><div class='del'>-		  default:</div><div class='del'>-		    break;</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'>-</div><div class='del'>-    curr_thread-&gt;status = THREAD_STOPPED;</div><div class='del'>-    if (read) curr_thread-&gt;readfds = *read;</div><div class='del'>-    else FD_ZERO(&amp;curr_thread-&gt;readfds);</div><div class='del'>-    if (write) curr_thread-&gt;writefds = *write;</div><div class='del'>-    else FD_ZERO(&amp;curr_thread-&gt;writefds);</div><div class='del'>-    if (except) curr_thread-&gt;exceptfds = *except;</div><div class='del'>-    else FD_ZERO(&amp;curr_thread-&gt;exceptfds);</div><div class='del'>-    curr_thread-&gt;fd = max;</div><div class='del'>-    curr_thread-&gt;wait_for = WAIT_SELECT;</div><div class='del'>-    if (timeout) {</div><div class='del'>-	curr_thread-&gt;delay = timeofday() +</div><div class='del'>-	    (double)timeout-&gt;tv_sec + (double)timeout-&gt;tv_usec*1e-6;</div><div class='del'>-	curr_thread-&gt;wait_for |= WAIT_TIME;</div><div class='del'>-    }</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-    if (read) *read = curr_thread-&gt;readfds;</div><div class='del'>-    if (write) *write = curr_thread-&gt;writefds;</div><div class='del'>-    if (except) *except = curr_thread-&gt;exceptfds;</div><div class='del'>-    return curr_thread-&gt;select_value;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int rb_thread_join _((rb_thread_t, double));</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_thread_join(th, limit)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    double limit;</div><div class='del'>-{</div><div class='del'>-    enum rb_thread_status last_status = THREAD_RUNNABLE;</div><div class='del'>-</div><div class='del'>-    if (rb_thread_critical) rb_thread_deadlock();</div><div class='del'>-    if (!rb_thread_dead(th)) {</div><div class='del'>-	if (th == curr_thread)</div><div class='del'>-	    rb_raise(rb_eThreadError, "thread 0x%lx tried to join itself",</div><div class='del'>-		     th-&gt;thread);</div><div class='del'>-	if ((th-&gt;wait_for &amp; WAIT_JOIN) &amp;&amp; th-&gt;join == curr_thread)</div><div class='del'>-	    rb_raise(rb_eThreadError, "Thread#join: deadlock 0x%lx - mutual join(0x%lx)",</div><div class='del'>-		     curr_thread-&gt;thread, th-&gt;thread);</div><div class='del'>-	if (curr_thread-&gt;status == THREAD_TO_KILL)</div><div class='del'>-	    last_status = THREAD_TO_KILL;</div><div class='del'>-	if (limit == 0) return Qfalse;</div><div class='del'>-	curr_thread-&gt;status = THREAD_STOPPED;</div><div class='del'>-	curr_thread-&gt;join = th;</div><div class='del'>-	curr_thread-&gt;wait_for = WAIT_JOIN;</div><div class='del'>-	curr_thread-&gt;delay = timeofday() + limit;</div><div class='del'>-	if (limit &lt; DELAY_INFTY) curr_thread-&gt;wait_for |= WAIT_TIME;</div><div class='del'>-	rb_thread_schedule();</div><div class='del'>-	curr_thread-&gt;status = last_status;</div><div class='del'>-	if (!rb_thread_dead(th)) return Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(th-&gt;errinfo) &amp;&amp; (th-&gt;flags &amp; RAISED_EXCEPTION)) {</div><div class='del'>-	VALUE oldbt = get_backtrace(th-&gt;errinfo);</div><div class='del'>-	VALUE errat = make_backtrace();</div><div class='del'>-	VALUE errinfo = rb_obj_dup(th-&gt;errinfo);</div><div class='del'>-</div><div class='del'>-	if (TYPE(oldbt) == T_ARRAY &amp;&amp; RARRAY(oldbt)-&gt;len &gt; 0) {</div><div class='del'>-	    rb_ary_unshift(errat, rb_ary_entry(oldbt, 0));</div><div class='del'>-	}</div><div class='del'>-	set_backtrace(errinfo, errat);</div><div class='del'>-	rb_exc_raise(errinfo);</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'>-/*</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='del'>-static VALUE</div><div class='del'>-rb_thread_join_m(argc, argv, thread)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    VALUE limit;</div><div class='del'>-    double delay = DELAY_INFTY;</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;limit);</div><div class='del'>-    if (!NIL_P(limit)) delay = rb_num2dbl(limit);</div><div class='del'>-    if (!rb_thread_join(th, delay))</div><div class='del'>-	return Qnil;</div><div class='del'>-    return thread;</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.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='del'>-VALUE</div><div class='del'>-rb_thread_current()</div><div class='del'>-{</div><div class='del'>-    return curr_thread-&gt;thread;</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.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='del'>-VALUE</div><div class='del'>-rb_thread_main()</div><div class='del'>-{</div><div class='del'>-    return main_thread-&gt;thread;</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.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='del'>-VALUE</div><div class='del'>-rb_thread_list()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    FOREACH_THREAD(th) {</div><div class='del'>-	switch (th-&gt;status) {</div><div class='del'>-	  case THREAD_RUNNABLE:</div><div class='del'>-	  case THREAD_STOPPED:</div><div class='del'>-	  case THREAD_TO_KILL:</div><div class='del'>-	    rb_ary_push(ary, th-&gt;thread);</div><div class='del'>-	  default:</div><div class='add'>+	    Fary_push(rb_load_path, str_new2(p));</div><div class='ctx'> 	    break;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    END_FOREACH(th);</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'>-/*</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='del'>-VALUE</div><div class='del'>-rb_thread_wakeup(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    if (!RTEST(rb_thread_wakeup_alive(thread)))</div><div class='del'>-	rb_raise(rb_eThreadError, "killed thread");</div><div class='del'>-    return thread;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_thread_wakeup_alive(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    if (th-&gt;status == THREAD_KILLED)</div><div class='del'>-	return Qnil;</div><div class='del'>-    rb_thread_ready(th);</div><div class='del'>-</div><div class='del'>-    return thread;</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'>- *     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='del'>-VALUE</div><div class='del'>-rb_thread_run(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_wakeup(thread);</div><div class='del'>-    if (!rb_thread_critical) rb_thread_schedule();</div><div class='del'>-</div><div class='del'>-    return thread;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_kill_thread(th, flags)</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    if (th != curr_thread &amp;&amp; th-&gt;safe &lt; 4) {</div><div class='del'>-	rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-    if (th-&gt;status == THREAD_TO_KILL || th-&gt;status == THREAD_KILLED)</div><div class='del'>-	return;</div><div class='del'>-    if (th == th-&gt;next || th == main_thread) rb_exit(EXIT_SUCCESS);</div><div class='del'>-</div><div class='del'>-    rb_thread_ready(th);</div><div class='del'>-    th-&gt;flags |= flags;</div><div class='del'>-    th-&gt;status = THREAD_TO_KILL;</div><div class='del'>-    if (!rb_thread_critical) rb_thread_schedule();</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'>- *     thr.exit        =&gt; thr</div><div class='del'>- *     thr.kill        =&gt; thr</div><div class='del'>- *     thr.terminate   =&gt; thr</div><div class='del'>- *  </div><div class='del'>- *  Terminates &lt;i&gt;thr&lt;/i&gt; and schedules another thread to be run, returning</div><div class='del'>- *  the terminated &lt;code&gt;Thread&lt;/code&gt;.  If this is the main thread, or the</div><div class='del'>- *  last thread, exits the process.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_thread_kill(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    rb_kill_thread(th, 0);</div><div class='del'>-    return thread;</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'>- *     thr.exit!        =&gt; thr</div><div class='del'>- *     thr.kill!        =&gt; thr</div><div class='del'>- *     thr.terminate!   =&gt; thr</div><div class='del'>- *  </div><div class='del'>- *  Terminates &lt;i&gt;thr&lt;/i&gt; without calling ensure clauses and schedules</div><div class='del'>- *  another thread to be run, returning the terminated &lt;code&gt;Thread&lt;/code&gt;.</div><div class='del'>- *  If this is the main thread, or the last thread, exits the process.</div><div class='del'>- *</div><div class='del'>- *  See &lt;code&gt;Thread#exit&lt;/code&gt; for the safer version.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_thread_kill_bang(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-    rb_kill_thread(th, THREAD_NO_ENSURE);</div><div class='del'>-    return thread;</div><div class='del'>-}</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='del'>-static VALUE</div><div class='del'>-rb_thread_s_kill(obj, th)</div><div class='del'>-    VALUE obj, th;</div><div class='del'>-{</div><div class='del'>-    return rb_thread_kill(th);</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.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='del'>-static VALUE</div><div class='del'>-rb_thread_exit()</div><div class='del'>-{</div><div class='del'>-    return rb_thread_kill(curr_thread-&gt;thread);</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.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='del'>-static VALUE</div><div class='del'>-rb_thread_pass()</div><div class='del'>-{</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-    return Qnil;</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.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='del'>-VALUE</div><div class='del'>-rb_thread_stop()</div><div class='del'>-{</div><div class='del'>-    enum rb_thread_status last_status = THREAD_RUNNABLE;</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = 0;</div><div class='del'>-    if (curr_thread == curr_thread-&gt;next) {</div><div class='del'>-	rb_raise(rb_eThreadError, "stopping only thread\n\tnote: use sleep to stop forever");</div><div class='del'>-    }</div><div class='del'>-    if (curr_thread-&gt;status == THREAD_TO_KILL)</div><div class='del'>-	last_status = THREAD_TO_KILL;</div><div class='del'>-    curr_thread-&gt;status = THREAD_STOPPED;</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-    curr_thread-&gt;status = last_status;</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct timeval rb_time_timeval();</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_polling()</div><div class='del'>-{</div><div class='del'>-    if (curr_thread != curr_thread-&gt;next) {</div><div class='del'>-	curr_thread-&gt;status = THREAD_STOPPED;</div><div class='del'>-	curr_thread-&gt;delay = timeofday() + (double)0.06;</div><div class='del'>-	curr_thread-&gt;wait_for = WAIT_TIME;</div><div class='del'>-	rb_thread_schedule();</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_sleep(sec)</div><div class='del'>-    int sec;</div><div class='del'>-{</div><div class='del'>-    if (curr_thread == curr_thread-&gt;next) {</div><div class='del'>-	TRAP_BEG;</div><div class='del'>-	sleep(sec);</div><div class='del'>-	TRAP_END;</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    rb_thread_wait_for(rb_time_timeval(INT2FIX(sec)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_sleep_forever()</div><div class='del'>-{</div><div class='del'>-    int thr_critical = rb_thread_critical;</div><div class='del'>-    if (curr_thread == curr_thread-&gt;next ||</div><div class='del'>-	curr_thread-&gt;status == THREAD_TO_KILL) {</div><div class='del'>-	rb_thread_critical = Qtrue;</div><div class='del'>-	TRAP_BEG;</div><div class='del'>-	pause();</div><div class='del'>-	rb_thread_critical = thr_critical;</div><div class='del'>-	TRAP_END;</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    curr_thread-&gt;delay = DELAY_INFTY;</div><div class='del'>-    curr_thread-&gt;wait_for = WAIT_TIME;</div><div class='del'>-    curr_thread-&gt;status = THREAD_STOPPED;</div><div class='del'>-    rb_thread_schedule();</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'>- *     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 inherited from the</div><div class='del'>- *  current thread which creating the new thread, or zero for the</div><div class='del'>- *  initial main thread; higher-priority threads will run before</div><div class='del'>- *  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='del'>-static VALUE</div><div class='del'>-rb_thread_priority(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    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='del'>-static VALUE</div><div class='del'>-rb_thread_priority_set(thread, prio)</div><div class='del'>-    VALUE thread, prio;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    th-&gt;priority = NUM2INT(prio);</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-    return prio;</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_safe_level(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-</div><div class='del'>-    th = rb_thread_check(thread);</div><div class='del'>-    if (th == curr_thread) {</div><div class='del'>-	return INT2NUM(ruby_safe_level);</div><div class='del'>-    }</div><div class='del'>-    return INT2NUM(th-&gt;safe);</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_thread_s_abort_exc()</div><div class='del'>-{</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='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_thread_s_abort_exc_set(self, val)</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    ruby_thread_abort = RTEST(val);</div><div class='del'>-    return val;</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_abort_exc(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    return rb_thread_check(thread)-&gt;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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_abort_exc_set(thread, val)</div><div class='del'>-    VALUE thread, val;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rb_thread_check(thread)-&gt;abort = RTEST(val);</div><div class='del'>-    return val;</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'>- *     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='del'>-#define THREAD_ALLOC(th) do {\</div><div class='del'>-    th = ALLOC(struct rb_thread);\</div><div class='del'>-\</div><div class='del'>-    th-&gt;next = 0;\</div><div class='del'>-    th-&gt;prev = 0;\</div><div class='del'>-\</div><div class='del'>-    th-&gt;status = THREAD_RUNNABLE;\</div><div class='del'>-    th-&gt;result = 0;\</div><div class='del'>-    th-&gt;flags = 0;\</div><div class='del'>-\</div><div class='del'>-    th-&gt;stk_ptr = 0;\</div><div class='del'>-    th-&gt;stk_len = 0;\</div><div class='del'>-    th-&gt;stk_max = 0;\</div><div class='del'>-    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='del'>-    IA64_INIT(th-&gt;bstr_max = 0);\</div><div class='del'>-    FD_ZERO(&amp;th-&gt;readfds);\</div><div class='del'>-    FD_ZERO(&amp;th-&gt;writefds);\</div><div class='del'>-    FD_ZERO(&amp;th-&gt;exceptfds);\</div><div class='del'>-    th-&gt;delay = 0.0;\</div><div class='del'>-    th-&gt;join = 0;\</div><div class='del'>-\</div><div class='del'>-    th-&gt;frame = 0;\</div><div class='del'>-    th-&gt;scope = 0;\</div><div class='del'>-    th-&gt;klass = 0;\</div><div class='del'>-    th-&gt;wrapper = 0;\</div><div class='del'>-    th-&gt;cref = ruby_cref;\</div><div class='del'>-    th-&gt;dyna_vars = ruby_dyna_vars;\</div><div class='del'>-    th-&gt;block = 0;\</div><div class='del'>-    th-&gt;iter = 0;\</div><div class='del'>-    th-&gt;tag = 0;\</div><div class='del'>-    th-&gt;tracing = 0;\</div><div class='del'>-    th-&gt;errinfo = Qnil;\</div><div class='del'>-    th-&gt;last_status = 0;\</div><div class='del'>-    th-&gt;last_line = 0;\</div><div class='del'>-    th-&gt;last_match = Qnil;\</div><div class='del'>-    th-&gt;abort = 0;\</div><div class='del'>-    th-&gt;priority = 0;\</div><div class='del'>-    th-&gt;thgroup = thgroup_default;\</div><div class='del'>-    th-&gt;locals = 0;\</div><div class='del'>-    th-&gt;thread = 0;\</div><div class='del'>-    if (curr_thread == 0) {\</div><div class='del'>-      th-&gt;sandbox = Qnil;\</div><div class='del'>-    } else {\</div><div class='del'>-      th-&gt;sandbox = curr_thread-&gt;sandbox;\</div><div class='del'>-    }\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-static rb_thread_t</div><div class='del'>-rb_thread_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    struct RVarmap *vars;</div><div class='del'>-</div><div class='del'>-    THREAD_ALLOC(th);</div><div class='del'>-    th-&gt;thread = Data_Wrap_Struct(klass, thread_mark, thread_free, th);</div><div class='del'>-</div><div class='del'>-    for (vars = th-&gt;dyna_vars; vars; vars = vars-&gt;next) {</div><div class='del'>-	if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;</div><div class='del'>-	FL_SET(vars, DVAR_DONT_RECYCLE);</div><div class='del'>-    }</div><div class='del'>-    return th;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int thread_init;</div><div class='del'>-</div><div class='del'>-#if defined(_THREAD_SAFE)</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='del'>-#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'>-    sigset_t all_signals;</div><div class='del'>-</div><div class='del'>-    sigfillset(&amp;all_signals);</div><div class='del'>-    pthread_sigmask(SIG_BLOCK, &amp;all_signals, 0);</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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-}</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='del'>-#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='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_start_timer()</div><div class='del'>-{</div><div class='del'>-    struct itimerval tval;</div><div class='del'>-</div><div class='del'>-    if (!thread_init) return;</div><div class='del'>-    tval.it_interval.tv_sec = 0;</div><div class='del'>-    tval.it_interval.tv_usec = 10000;</div><div class='del'>-    tval.it_value = tval.it_interval;</div><div class='del'>-    setitimer(ITIMER_VIRTUAL, &amp;tval, NULL);</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'>-    struct itimerval tval;</div><div class='del'>-</div><div class='del'>-    if (!thread_init) return;</div><div class='del'>-    tval.it_interval.tv_sec = 0;</div><div class='del'>-    tval.it_interval.tv_usec = 0;</div><div class='del'>-    tval.it_value = tval.it_interval;</div><div class='del'>-    setitimer(ITIMER_VIRTUAL, &amp;tval, NULL);</div><div class='del'>-}</div><div class='del'>-#else  /* !(_THREAD_SAFE || HAVE_SETITIMER) */</div><div class='del'>-int rb_thread_tick = THREAD_TICK;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_thread_start_0(fn, arg, th)</div><div class='del'>-    VALUE (*fn)();</div><div class='del'>-    void *arg;</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    volatile rb_thread_t th_save = th;</div><div class='del'>-    volatile VALUE thread = th-&gt;thread;</div><div class='del'>-    struct BLOCK *volatile saved_block = 0;</div><div class='del'>-    enum rb_thread_status status;</div><div class='del'>-    int state;</div><div class='del'>-</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='del'>-    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='del'>-	posix_signal(SIGVTALRM, catch_timer);</div><div class='del'>-#else</div><div class='del'>-	signal(SIGVTALRM, catch_timer);</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-	rb_thread_start_timer();</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (THREAD_SAVE_CONTEXT(curr_thread)) {</div><div class='del'>-	return thread;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (ruby_block) {		/* should nail down higher blocks */</div><div class='del'>-	struct BLOCK dummy;</div><div class='del'>-</div><div class='del'>-	dummy.prev = ruby_block;</div><div class='del'>-	blk_copy_prev(&amp;dummy);</div><div class='del'>-	saved_block = ruby_block = dummy.prev;</div><div class='del'>-    }</div><div class='del'>-    scope_dup(ruby_scope);</div><div class='del'>-</div><div class='del'>-    if (!th-&gt;next) {</div><div class='del'>-	/* merge in thread list */</div><div class='del'>-	th-&gt;prev = curr_thread;</div><div class='del'>-	curr_thread-&gt;next-&gt;prev = th;</div><div class='del'>-	th-&gt;next = curr_thread-&gt;next;</div><div class='del'>-	curr_thread-&gt;next = th;</div><div class='del'>-	th-&gt;priority = curr_thread-&gt;priority;</div><div class='del'>-	th-&gt;thgroup = curr_thread-&gt;thgroup;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    PUSH_TAG(PROT_THREAD);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	if (THREAD_SAVE_CONTEXT(th) == 0) {</div><div class='del'>-	    curr_thread = th;</div><div class='del'>-	    th-&gt;result = (*fn)(arg, th);</div><div class='del'>-	}</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='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    status = th-&gt;status;</div><div class='del'>-</div><div class='del'>-    if (th == main_thread) ruby_stop(state);</div><div class='del'>-    rb_thread_remove(th);</div><div class='del'>-</div><div class='del'>-    if (saved_block) {</div><div class='del'>-	blk_free(saved_block);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (state &amp;&amp; status != THREAD_TO_KILL &amp;&amp; !NIL_P(ruby_errinfo)) {</div><div class='del'>-	th-&gt;flags |= RAISED_EXCEPTION;</div><div class='del'>-	if (state == TAG_FATAL) {</div><div class='del'>-	    /* fatal error within this thread, need to stop whole script */</div><div class='del'>-	    main_thread-&gt;errinfo = ruby_errinfo;</div><div class='del'>-	    rb_thread_cleanup();</div><div class='del'>-	}</div><div class='del'>-	else if (rb_obj_is_kind_of(ruby_errinfo, rb_eSystemExit)) {</div><div class='del'>-	    if (th-&gt;safe &gt;= 4) {</div><div class='del'>-		char buf[32];</div><div class='del'>-</div><div class='del'>-		sprintf(buf, "Insecure exit at level %d", th-&gt;safe);</div><div class='del'>-		th-&gt;errinfo = rb_exc_new2(rb_eSecurityError, buf);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		/* delegate exception to main_thread */</div><div class='del'>-		rb_thread_main_jump(ruby_errinfo, RESTORE_RAISE);</div><div class='del'>-	    }</div><div class='del'>-	}</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='del'>-	    error_print();</div><div class='del'>-	    rb_thread_main_jump(ruby_errinfo, RESTORE_EXIT);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    th-&gt;errinfo = ruby_errinfo;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-    ruby_stop(0);		/* last thread termination */</div><div class='del'>-    return 0;			/* not reached */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_thread_create(fn, arg)</div><div class='del'>-    VALUE (*fn)();</div><div class='del'>-    void *arg;</div><div class='del'>-{</div><div class='del'>-    Init_stack((void *)&amp;arg);</div><div class='del'>-    return rb_thread_start_0(fn, arg, rb_thread_alloc(rb_cThread));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_thread_yield(arg, th)</div><div class='del'>-    VALUE arg;</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</div><div class='del'>-    const ID *tbl;</div><div class='del'>-</div><div class='del'>-    scope_dup(ruby_block-&gt;scope);</div><div class='del'>-</div><div class='del'>-    tbl = ruby_scope-&gt;local_tbl;</div><div class='del'>-    if (tbl) {</div><div class='del'>-	int n = *tbl++;</div><div class='del'>-	for (tbl += 2, n -= 2; n &gt; 0; --n) { /* skip first 2 ($_ and $~) */</div><div class='del'>-	    ID id = *tbl++;</div><div class='del'>-	    if (id != 0 &amp;&amp; !rb_is_local_id(id))  /* push flip states */</div><div class='del'>-		rb_dvar_push(id, Qfalse);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_dvar_push('_', Qnil);</div><div class='del'>-    rb_dvar_push('~', Qnil);</div><div class='del'>-    ruby_block-&gt;dyna_vars = ruby_dyna_vars;</div><div class='del'>-</div><div class='del'>-    return rb_yield_0(arg, 0, 0, YIELD_LAMBDA_CALL, Qtrue);</div><div class='del'>-}</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='del'>-static VALUE</div><div class='del'>-rb_thread_s_new(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_alloc(klass);</div><div class='del'>-    volatile VALUE *pos;</div><div class='del'>-</div><div class='del'>-    pos = th-&gt;stk_pos;</div><div class='del'>-    rb_obj_call_init(th-&gt;thread, argc, argv);</div><div class='del'>-    if (th-&gt;stk_pos == 0) {</div><div class='del'>-	rb_raise(rb_eThreadError, "uninitialized thread - check `%s#initialize'",</div><div class='del'>-		 rb_class2name(klass));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return th-&gt;thread;</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.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='del'>-static VALUE</div><div class='del'>-rb_thread_initialize(thread, args)</div><div class='del'>-    VALUE thread, args;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-</div><div class='del'>-    if (!rb_block_given_p()) {</div><div class='del'>-	rb_raise(rb_eThreadError, "must be called with a block");</div><div class='del'>-    }</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='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_thread_start(klass, args)</div><div class='del'>-    VALUE klass, args;</div><div class='del'>-{</div><div class='del'>-    if (!rb_block_given_p()) {</div><div class='del'>-	rb_raise(rb_eThreadError, "must be called with a block");</div><div class='del'>-    }</div><div class='del'>-    return rb_thread_start_0(rb_thread_yield, args, rb_thread_alloc(klass));</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_value(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    while (!rb_thread_join(th, DELAY_INFTY));</div><div class='del'>-</div><div class='del'>-    return th-&gt;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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_status(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    if (rb_thread_dead(th)) {</div><div class='del'>-	if (!NIL_P(th-&gt;errinfo) &amp;&amp; (th-&gt;flags &amp; RAISED_EXCEPTION))</div><div class='del'>-	    return Qnil;</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_str_new2(thread_status_name(th-&gt;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'>- *     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='del'>-VALUE</div><div class='del'>-rb_thread_alive_p(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    if (rb_thread_dead(th)) return Qfalse;</div><div class='del'>-    return Qtrue;</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_stop_p(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    if (rb_thread_dead(th)) return Qtrue;</div><div class='del'>-    if (th-&gt;status == THREAD_STOPPED) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_thread_wait_other_threads()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    int found;</div><div class='del'>-</div><div class='del'>-    /* wait other threads to terminate */</div><div class='del'>-    while (curr_thread != curr_thread-&gt;next) {</div><div class='del'>-	found = 0;</div><div class='del'>-	FOREACH_THREAD(th) {</div><div class='del'>-	    if (th != curr_thread &amp;&amp; th-&gt;status != THREAD_STOPPED) {</div><div class='del'>-		found = 1;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	END_FOREACH(th);</div><div class='del'>-	if (!found) return;</div><div class='del'>-	rb_thread_schedule();</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_thread_cleanup()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t curr, th;</div><div class='del'>-</div><div class='del'>-    curr = curr_thread;</div><div class='del'>-    while (curr-&gt;status == THREAD_KILLED) {</div><div class='del'>-	curr = curr-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    FOREACH_THREAD_FROM(curr, th) {</div><div class='del'>-	if (th-&gt;status != THREAD_KILLED) {</div><div class='del'>-	    rb_thread_ready(th);</div><div class='del'>-	    if (th != main_thread) {</div><div class='del'>-		th-&gt;thgroup = 0;</div><div class='del'>-		th-&gt;priority = 0;</div><div class='del'>-		th-&gt;status = THREAD_TO_KILL;</div><div class='del'>-		RDATA(th-&gt;thread)-&gt;dfree = NULL;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    END_FOREACH_FROM(curr, th);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int rb_thread_critical;</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_thread_critical_get()</div><div class='del'>-{</div><div class='del'>-    return rb_thread_critical?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.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='del'>-static VALUE</div><div class='del'>-rb_thread_critical_set(obj, val)</div><div class='del'>-    VALUE obj, val;</div><div class='del'>-{</div><div class='del'>-    rb_thread_critical = RTEST(val);</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_interrupt()</div><div class='del'>-{</div><div class='del'>-    rb_thread_critical = 0;</div><div class='del'>-    rb_thread_ready(main_thread);</div><div class='del'>-    if (curr_thread == main_thread) {</div><div class='del'>-	rb_interrupt();</div><div class='del'>-    }</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='del'>-    }</div><div class='del'>-    curr_thread = main_thread;</div><div class='del'>-    rb_thread_restore_context(curr_thread, RESTORE_INTERRUPT);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_signal_raise(sig)</div><div class='del'>-    int sig;</div><div class='del'>-{</div><div class='del'>-    rb_thread_critical = 0;</div><div class='del'>-    if (curr_thread == main_thread) {</div><div class='del'>-	VALUE argv[1];</div><div class='del'>-</div><div class='del'>-	rb_thread_ready(curr_thread);</div><div class='del'>-	argv[0] = INT2FIX(sig);</div><div class='del'>-	rb_exc_raise(rb_class_new_instance(1, argv, rb_eSignal));</div><div class='del'>-    }</div><div class='del'>-    rb_thread_ready(main_thread);</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='del'>-    }</div><div class='del'>-    th_sig = sig;</div><div class='del'>-    curr_thread = main_thread;</div><div class='del'>-    rb_thread_restore_context(curr_thread, RESTORE_SIGNAL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_thread_trap_eval(cmd, sig, safe)</div><div class='del'>-    VALUE cmd;</div><div class='del'>-    int sig, safe;</div><div class='del'>-{</div><div class='del'>-    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='del'>-	return;</div><div class='del'>-    }</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='del'>-    }</div><div class='del'>-    th_cmd = cmd;</div><div class='del'>-    th_sig = sig;</div><div class='del'>-    th_safe = safe;</div><div class='del'>-    curr_thread = main_thread;</div><div class='del'>-    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='del'>-    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='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='del'>-    }</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_thread_raise(argc, argv, th)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-{</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='del'>-    if (rb_thread_dead(th)) return Qnil;</div><div class='del'>-    exc = rb_make_exception(argc, argv);</div><div class='del'>-    if (curr_thread == th) {</div><div class='del'>-	rb_raise_jump(exc);</div><div class='del'>-    }</div><div class='del'>-</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 th_save-&gt;thread;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_ready(th);</div><div class='del'>-    curr_thread = th;</div><div class='del'>-</div><div class='del'>-    th_raise_exception = exc;</div><div class='del'>-    th_raise_node = ruby_current_node;</div><div class='del'>-    rb_thread_restore_context(curr_thread, RESTORE_RAISE);</div><div class='del'>-    return Qnil;		/* not reached */</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_raise_m(argc, argv, thread)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    if (ruby_safe_level &gt; th-&gt;safe) {</div><div class='del'>-	rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-    rb_thread_raise(argc, argv, th);</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'>-rb_thread_local_aref(thread, id)</div><div class='del'>-    VALUE thread;</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    th = rb_thread_check(thread);</div><div class='del'>-    if (ruby_safe_level &gt;= 4 &amp;&amp; th != curr_thread) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: thread locals");</div><div class='del'>-    }</div><div class='del'>-    if (!th-&gt;locals) return Qnil;</div><div class='del'>-    if (st_lookup(th-&gt;locals, id, &amp;val)) {</div><div class='del'>-	return val;</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'>-/*</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='del'>-static VALUE</div><div class='del'>-rb_thread_aref(thread, id)</div><div class='del'>-    VALUE thread, id;</div><div class='del'>-{</div><div class='del'>-    return rb_thread_local_aref(thread, rb_to_id(id));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_thread_local_aset(thread, id, val)</div><div class='del'>-    VALUE thread;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    if (ruby_safe_level &gt;= 4 &amp;&amp; th != curr_thread) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't modify thread locals");</div><div class='del'>-    }</div><div class='del'>-    if (OBJ_FROZEN(thread)) rb_error_frozen("thread locals");</div><div class='del'>-</div><div class='del'>-    if (!th-&gt;locals) {</div><div class='del'>-	th-&gt;locals = st_init_numtable();</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(val)) {</div><div class='del'>-	st_delete(th-&gt;locals, (st_data_t*)&amp;id, 0);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    st_insert(th-&gt;locals, id, 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'>-/*</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='del'>-static VALUE</div><div class='del'>-rb_thread_aset(thread, id, val)</div><div class='del'>-    VALUE thread, id, val;</div><div class='del'>-{</div><div class='del'>-    return rb_thread_local_aset(thread, rb_to_id(id), val);</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_key_p(thread, id)</div><div class='del'>-    VALUE thread, id;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-</div><div class='del'>-    if (!th-&gt;locals) return Qfalse;</div><div class='del'>-    if (st_lookup(th-&gt;locals, rb_to_id(id), 0))</div><div class='del'>-	return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-thread_keys_i(key, value, ary)</div><div class='del'>-    ID key;</div><div class='del'>-    VALUE value, ary;</div><div class='del'>-{</div><div class='del'>-    rb_ary_push(ary, ID2SYM(key));</div><div class='del'>-    return ST_CONTINUE;</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_thread_keys(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-    VALUE ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    if (th-&gt;locals) {</div><div class='del'>-	st_foreach(th-&gt;locals, thread_keys_i, ary);</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'>- * 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='del'>-static VALUE</div><div class='del'>-rb_thread_inspect(thread)</div><div class='del'>-    VALUE thread;</div><div class='del'>-{</div><div class='del'>-    const char *cname = rb_obj_classname(thread);</div><div class='del'>-    rb_thread_t th = rb_thread_check(thread);</div><div class='del'>-    const char *status = thread_status_name(th-&gt;status);</div><div class='del'>-    VALUE str;</div><div class='del'>-    size_t len = strlen(cname)+7+16+9+1;</div><div class='del'>-</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='del'>-    RSTRING(str)-&gt;len = strlen(RSTRING(str)-&gt;ptr);</div><div class='del'>-    OBJ_INFECT(str, thread);</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'>-rb_thread_atfork()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-</div><div class='del'>-    if (rb_thread_alone()) return;</div><div class='del'>-    FOREACH_THREAD(th) {</div><div class='del'>-	if (th != curr_thread) {</div><div class='del'>-	    rb_thread_die(th);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    END_FOREACH(th);</div><div class='del'>-    main_thread = curr_thread;</div><div class='del'>-    curr_thread-&gt;next = curr_thread;</div><div class='del'>-    curr_thread-&gt;prev = curr_thread;</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_callcc(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE cont;</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    volatile rb_thread_t th_save;</div><div class='del'>-    struct tag *tag;</div><div class='del'>-    struct RVarmap *vars;</div><div class='del'>-</div><div class='del'>-    THREAD_ALLOC(th);</div><div class='del'>-    cont = Data_Wrap_Struct(rb_cCont, thread_mark, thread_free, th);</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'>-    th-&gt;thread = curr_thread-&gt;thread;</div><div class='del'>-    th-&gt;thgroup = cont_protect;</div><div class='del'>-</div><div class='del'>-    for (vars = ruby_dyna_vars; vars; vars = vars-&gt;next) {</div><div class='del'>-	if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;</div><div class='del'>-	FL_SET(vars, DVAR_DONT_RECYCLE);</div><div class='del'>-    }</div><div class='del'>-    th_save = th;</div><div class='del'>-    if (THREAD_SAVE_CONTEXT(th)) {</div><div class='del'>-	return th_save-&gt;result;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	return rb_yield(cont);</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'>- *     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='del'>-static VALUE</div><div class='del'>-rb_cont_call(argc, argv, cont)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE cont;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_thread_check(cont);</div><div class='del'>-</div><div class='del'>-    if (th-&gt;thread != curr_thread-&gt;thread) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "continuation called across threads");</div><div class='del'>-    }</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='del'>-    switch (argc) {</div><div class='del'>-      case 0:</div><div class='del'>-	th-&gt;result = Qnil;</div><div class='del'>-	break;</div><div class='del'>-      case 1:</div><div class='del'>-	th-&gt;result = argv[0];</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	th-&gt;result = rb_ary_new4(argc, argv);</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_restore_context(th, RESTORE_NORMAL);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct thgroup {</div><div class='del'>-    int enclosed;</div><div class='del'>-    VALUE group;</div><div class='del'>-};</div><div class='del'>-</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='del'>-static VALUE thgroup_s_alloc _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-thgroup_s_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE group;</div><div class='del'>-    struct thgroup *data;</div><div class='del'>-</div><div class='del'>-    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='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.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='del'>-static VALUE</div><div class='del'>-thgroup_list(group)</div><div class='del'>-    VALUE group;</div><div class='del'>-{</div><div class='del'>-    struct thgroup *data;</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(group, struct thgroup, data);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    FOREACH_THREAD(th) {</div><div class='del'>-	if (th-&gt;thgroup == data-&gt;group) {</div><div class='del'>-	    rb_ary_push(ary, th-&gt;thread);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    END_FOREACH(th);</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'>-/*</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='del'>-static VALUE</div><div class='del'>-thgroup_add(group, thread)</div><div class='del'>-    VALUE group, thread;</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th;</div><div class='del'>-    struct thgroup *data;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    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='del'>-    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='del'>-</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='del'>-    return group;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* variables for recursive traversals */</div><div class='del'>-static ID recursive_key;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-recursive_check(hash, obj)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(hash) || TYPE(hash) != T_HASH) {</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE list = rb_hash_aref(hash, ID2SYM(rb_frame_last_func()));</div><div class='del'>-</div><div class='del'>-	if (NIL_P(list) || TYPE(list) != T_HASH)</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	if (NIL_P(rb_hash_lookup(list, obj)))</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-recursive_push(hash, obj)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE list, sym;</div><div class='del'>-</div><div class='del'>-    sym = ID2SYM(rb_frame_last_func());</div><div class='del'>-    if (NIL_P(hash) || TYPE(hash) != T_HASH) {</div><div class='del'>-	hash = rb_hash_new();</div><div class='del'>-	rb_thread_local_aset(rb_thread_current(), recursive_key, hash);</div><div class='del'>-	list = Qnil;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	list = rb_hash_aref(hash, sym);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(list) || TYPE(list) != T_HASH) {</div><div class='del'>-	list = rb_hash_new();</div><div class='del'>-	rb_hash_aset(hash, sym, list);</div><div class='del'>-    }</div><div class='del'>-    rb_hash_aset(list, obj, Qtrue);</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-recursive_pop(hash, obj)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE list, sym;</div><div class='del'>-</div><div class='del'>-    sym = ID2SYM(rb_frame_last_func());</div><div class='del'>-    if (NIL_P(hash) || TYPE(hash) != T_HASH) {</div><div class='del'>-	VALUE symname;</div><div class='del'>-	VALUE thrname;</div><div class='del'>-	symname = rb_inspect(sym);</div><div class='del'>-	thrname = rb_inspect(rb_thread_current());</div><div class='del'>-</div><div class='del'>-	rb_raise(rb_eTypeError, "invalid inspect_tbl hash for %s in %s",</div><div class='del'>-		 StringValuePtr(symname), StringValuePtr(thrname));</div><div class='del'>-    }</div><div class='del'>-    list = rb_hash_aref(hash, sym);</div><div class='del'>-    if (NIL_P(list) || TYPE(list) != T_HASH) {</div><div class='del'>-	VALUE symname = rb_inspect(sym);</div><div class='del'>-	VALUE thrname = rb_inspect(rb_thread_current());</div><div class='del'>-	rb_raise(rb_eTypeError, "invalid inspect_tbl list for %s in %s",</div><div class='del'>-		 StringValuePtr(symname), StringValuePtr(thrname));</div><div class='del'>-    }</div><div class='del'>-    rb_hash_delete(list, obj);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_exec_recursive(func, obj, arg)</div><div class='del'>-    VALUE (*func) _((VALUE, VALUE, int));</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    VALUE hash = rb_thread_local_aref(rb_thread_current(), recursive_key);</div><div class='del'>-    VALUE objid = rb_obj_id(obj);</div><div class='del'>-</div><div class='del'>-    if (recursive_check(hash, objid)) {</div><div class='del'>-	return (*func) (obj, arg, Qtrue);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE result = Qundef;</div><div class='del'>-	int state;</div><div class='del'>-</div><div class='del'>-	hash = recursive_push(hash, objid);</div><div class='del'>-	PUSH_TAG(PROT_NONE);</div><div class='del'>-	if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	    result = (*func) (obj, arg, Qfalse);</div><div class='del'>-	}</div><div class='del'>-	POP_TAG();</div><div class='del'>-	recursive_pop(hash, objid);</div><div class='del'>-	if (state)</div><div class='del'>-	    JUMP_TAG(state);</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'>-/*</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='del'>-void</div><div class='del'>-Init_Thread()</div><div class='del'>-{</div><div class='del'>-    VALUE cThGroup;</div><div class='del'>-</div><div class='del'>-    recursive_key = rb_intern("__recursive_key__");</div><div class='del'>-    rb_eThreadError = rb_define_class("ThreadError", rb_eStandardError);</div><div class='del'>-    rb_cThread = rb_define_class("Thread", rb_cObject);</div><div class='del'>-    rb_undef_alloc_func(rb_cThread);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "new", rb_thread_s_new, -1);</div><div class='del'>-    rb_define_method(rb_cThread, "initialize", rb_thread_initialize, -2);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "start", rb_thread_start, -2);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "fork", rb_thread_start, -2);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "stop", rb_thread_stop, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "kill", rb_thread_s_kill, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "exit", rb_thread_exit, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "pass", rb_thread_pass, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "current", rb_thread_current, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "main", rb_thread_main, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "list", rb_thread_list, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "critical", rb_thread_critical_get, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "critical=", rb_thread_critical_set, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "abort_on_exception", rb_thread_s_abort_exc, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "abort_on_exception=", rb_thread_s_abort_exc_set, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cThread, "run", rb_thread_run, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "wakeup", rb_thread_wakeup, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "kill", rb_thread_kill, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "terminate", rb_thread_kill, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "exit", rb_thread_kill, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "kill!", rb_thread_kill_bang, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "terminate!", rb_thread_kill_bang, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "exit!", rb_thread_kill_bang, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "value", rb_thread_value, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "status", rb_thread_status, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "join", rb_thread_join_m, -1);</div><div class='del'>-    rb_define_method(rb_cThread, "alive?", rb_thread_alive_p, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "stop?", rb_thread_stop_p, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "raise", rb_thread_raise_m, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cThread, "abort_on_exception", rb_thread_abort_exc, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "abort_on_exception=", rb_thread_abort_exc_set, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cThread, "priority", rb_thread_priority, 0);</div><div class='del'>-    rb_define_method(rb_cThread, "priority=", rb_thread_priority_set, 1);</div><div class='del'>-    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='del'>-</div><div class='del'>-    rb_define_method(rb_cThread, "[]", rb_thread_aref, 1);</div><div class='del'>-    rb_define_method(rb_cThread, "[]=", rb_thread_aset, 2);</div><div class='del'>-    rb_define_method(rb_cThread, "key?", rb_thread_key_p, 1);</div><div class='del'>-    rb_define_method(rb_cThread, "keys", rb_thread_keys, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cThread, "inspect", rb_thread_inspect, 0);</div><div class='del'>-</div><div class='del'>-    rb_cCont = rb_define_class("Continuation", rb_cObject);</div><div class='del'>-    rb_undef_alloc_func(rb_cCont);</div><div class='del'>-    rb_undef_method(CLASS_OF(rb_cCont), "new");</div><div class='del'>-    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='del'>-    rb_define_global_function("callcc", rb_callcc, 0);</div><div class='del'>-    rb_global_variable(&amp;cont_protect);</div><div class='del'>-</div><div class='del'>-    cThGroup = rb_define_class("ThreadGroup", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cThGroup, thgroup_s_alloc);</div><div class='del'>-    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='del'>-    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='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_f_catch(dmy, tag)</div><div class='del'>-    VALUE dmy, tag;</div><div class='del'>-{</div><div class='del'>-    int state;</div><div class='del'>-    VALUE val = Qnil;		/* OK */</div><div class='del'>-</div><div class='del'>-    tag = ID2SYM(rb_to_id(tag));</div><div class='del'>-    PUSH_TAG(tag);</div><div class='del'>-    if ((state = EXEC_TAG()) == 0) {</div><div class='del'>-	val = rb_yield_0(tag, 0, 0, 0, Qfalse);</div><div class='del'>-    }</div><div class='del'>-    else if (state == TAG_THROW &amp;&amp; tag == prot_tag-&gt;dst) {</div><div class='del'>-	val = prot_tag-&gt;retval;</div><div class='del'>-	state = 0;</div><div class='del'>-    }</div><div class='del'>-    POP_TAG();</div><div class='del'>-    if (state) JUMP_TAG(state);</div><div class='del'>-</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-catch_i(tag)</div><div class='del'>-    VALUE tag;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(Qnil, rb_intern("catch"), 1, tag);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_catch(tag, func, data)</div><div class='del'>-    const char *tag;</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    return rb_iterate((VALUE(*)_((VALUE)))catch_i, ID2SYM(rb_intern(tag)), func, data);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_f_throw(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Init_load()</div><div class='ctx'> {</div><div class='del'>-    VALUE tag, value;</div><div class='del'>-    struct tag *tt = prot_tag;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;tag, &amp;value);</div><div class='del'>-    tag = ID2SYM(rb_to_id(tag));</div><div class='add'>+    extern VALUE C_Kernel;</div><div class='add'>+    extern VALUE rb_check_str();</div><div class='add'>+    char *path;</div><div class='ctx'> </div><div class='del'>-    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='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	if (tt-&gt;tag == PROT_THREAD) {</div><div class='del'>-	    rb_raise(rb_eThreadError, "uncaught throw `%s' in thread 0x%lx",</div><div class='del'>-		     rb_id2name(SYM2ID(tag)),</div><div class='del'>-		     curr_thread);</div><div class='del'>-	}</div><div class='del'>-	tt = tt-&gt;prev;</div><div class='del'>-    }</div><div class='del'>-    if (!tt) {</div><div class='del'>-	rb_name_error(SYM2ID(tag), "uncaught throw `%s'", rb_id2name(SYM2ID(tag)));</div><div class='del'>-    }</div><div class='del'>-    rb_trap_restore_mask();</div><div class='del'>-    JUMP_TAG(TAG_THROW);</div><div class='del'>-#ifndef __GNUC__</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'>-void</div><div class='del'>-rb_throw(tag, val)</div><div class='del'>-    const char *tag;</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[2];</div><div class='add'>+    rb_define_variable("$LOAD_PATH", &amp;rb_load_path, Qnil, rb_check_str);</div><div class='add'>+    rb_load_path = ary_new();</div><div class='add'>+    rb_define_variable("$LOAD_FILES", &amp;rb_load_path, Qnil, rb_readonly_hook);</div><div class='add'>+    rb_loadfiles = ary_new();</div><div class='add'>+    addpath(getenv("RUBYLIB"));</div><div class='add'>+    addpath(RUBY_LIB);</div><div class='ctx'> </div><div class='del'>-    argv[0] = ID2SYM(rb_intern(tag));</div><div class='del'>-    argv[1] = val;</div><div class='del'>-    rb_f_throw(2, argv);</div><div class='add'>+    rb_define_method(C_Kernel, "load", Fload, 1);</div><div class='add'>+    rb_define_method(C_Kernel, "require", Frequire, 1);</div><div class='ctx'> }</div><div class='head'>diff --git a/ext/.cvsignore b/ext/.cvsignore<br/>deleted file mode 100644<br/>index ab2424ff7a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-extinit.c</div><div class='del'>-*.log</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/>deleted file mode 100644<br/>index d0d6317a5e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Setup?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-#option nodynamic</div><div class='del'>-</div><div class='del'>-#Win32API</div><div class='del'>-#bigdecimal</div><div class='del'>-#curses</div><div class='del'>-#dbm</div><div class='del'>-#digest</div><div class='del'>-#digest/md5</div><div class='del'>-#digest/rmd160</div><div class='del'>-#digest/sha1</div><div class='del'>-#digest/sha2</div><div class='del'>-#dl</div><div class='del'>-#enumerator</div><div class='del'>-#etc</div><div class='del'>-#fcntl</div><div class='del'>-#gdbm</div><div class='del'>-#iconv</div><div class='del'>-#io/wait</div><div class='del'>-#nkf</div><div class='del'>-#pty</div><div class='del'>-#openssl</div><div class='del'>-#racc/cparse</div><div class='del'>-#readline</div><div class='del'>-#sdbm</div><div class='del'>-#socket</div><div class='del'>-#stringio</div><div class='del'>-#strscan</div><div class='del'>-#syck</div><div class='del'>-#syslog</div><div class='del'>-#tcltklib</div><div class='del'>-#thread</div><div class='del'>-#tk</div><div class='del'>-#win32ole</div><div class='del'>-#zlib</div><div class='head'>diff --git a/ext/Setup.atheos b/ext/Setup.atheos<br/>deleted file mode 100644<br/>index 6bda3a4cfb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Setup.atheos?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.atheos</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-option nodynamic</div><div class='del'>-</div><div class='del'>-#Win32API</div><div class='del'>-bigdecimal</div><div class='del'>-curses</div><div class='del'>-dbm</div><div class='del'>-digest</div><div class='del'>-digest/md5</div><div class='del'>-digest/rmd160</div><div class='del'>-digest/sha1</div><div class='del'>-digest/sha2</div><div class='del'>-dl</div><div class='del'>-enumerator</div><div class='del'>-etc</div><div class='del'>-fcntl</div><div class='del'>-gdbm</div><div class='del'>-iconv</div><div class='del'>-io/wait</div><div class='del'>-nkf</div><div class='del'>-pty</div><div class='del'>-#openssl</div><div class='del'>-racc/parse</div><div class='del'>-readline</div><div class='del'>-sdbm</div><div class='del'>-socket</div><div class='del'>-stringio</div><div class='del'>-strscan</div><div class='del'>-syck</div><div class='del'>-syslog</div><div class='del'>-#tcltklib</div><div class='del'>-thread</div><div class='del'>-#tk</div><div class='del'>-#win32ole</div><div class='del'>-zlib</div><div class='head'>diff --git a/ext/Setup.dj b/ext/Setup.dj<br/>deleted file mode 100644<br/>index 4f94788886..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Setup.dj?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.dj</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-option nodynamic</div><div class='del'>-</div><div class='del'>-#Win32API</div><div class='del'>-bigdecimal</div><div class='del'>-curses</div><div class='del'>-dbm</div><div class='del'>-digest</div><div class='del'>-digest/md5</div><div class='del'>-digest/rmd160</div><div class='del'>-digest/sha1</div><div class='del'>-digest/sha2</div><div class='del'>-#dl</div><div class='del'>-etc</div><div class='del'>-enumerator</div><div class='del'>-fcntl</div><div class='del'>-gdbm</div><div class='del'>-#iconv</div><div class='del'>-#io/wait</div><div class='del'>-nkf</div><div class='del'>-#pty</div><div class='del'>-#openssl</div><div class='del'>-racc/cparse</div><div class='del'>-readline</div><div class='del'>-sdbm</div><div class='del'>-#socket</div><div class='del'>-stringio</div><div class='del'>-strscan</div><div class='del'>-syck</div><div class='del'>-#syslog</div><div class='del'>-#tcltklib</div><div class='del'>-thread</div><div class='del'>-#tk</div><div class='del'>-#win32ole</div><div class='del'>-zlib</div><div class='head'>diff --git a/ext/Setup.emx b/ext/Setup.emx<br/>deleted file mode 100644<br/>index afc5923577..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Setup.emx?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.emx</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-option nodynamic</div><div class='del'>-</div><div class='del'>-#Win32API</div><div class='del'>-bigdecimal</div><div class='del'>-curses</div><div class='del'>-#dbm</div><div class='del'>-digest</div><div class='del'>-digest/md5</div><div class='del'>-digest/rmd160</div><div class='del'>-digest/sha1</div><div class='del'>-digest/sha2</div><div class='del'>-#dl</div><div class='del'>-enumerator</div><div class='del'>-etc</div><div class='del'>-fcntl</div><div class='del'>-#gdbm</div><div class='del'>-#iconv</div><div class='del'>-#io/wait</div><div class='del'>-nkf</div><div class='del'>-#pty</div><div class='del'>-#openssl</div><div class='del'>-racc/cparse</div><div class='del'>-#readline</div><div class='del'>-#sdbm</div><div class='del'>-socket</div><div class='del'>-stringio</div><div class='del'>-strscan</div><div class='del'>-#syck</div><div class='del'>-#syslog</div><div class='del'>-#tcltklib</div><div class='del'>-thread</div><div class='del'>-#tk</div><div class='del'>-#win32ole</div><div class='del'>-#zlib</div><div class='head'>diff --git a/ext/Setup.nt b/ext/Setup.nt<br/>deleted file mode 100644<br/>index 9f8abf9b8d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Setup.nt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.nt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-#option nodynamic</div><div class='del'>-</div><div class='del'>-Win32API</div><div class='del'>-bigdecimal</div><div class='del'>-#curses</div><div class='del'>-#dbm</div><div class='del'>-digest</div><div class='del'>-digest/md5</div><div class='del'>-digest/rmd160</div><div class='del'>-digest/sha1</div><div class='del'>-digest/sha2</div><div class='del'>-dl</div><div class='del'>-enumerator</div><div class='del'>-etc</div><div class='del'>-fcntl</div><div class='del'>-#gdbm</div><div class='del'>-#iconv</div><div class='del'>-#io/wait</div><div class='del'>-nkf</div><div class='del'>-#pty</div><div class='del'>-#openssl</div><div class='del'>-racc/cparse</div><div class='del'>-#readline</div><div class='del'>-sdbm</div><div class='del'>-socket</div><div class='del'>-stringio</div><div class='del'>-strscan</div><div class='del'>-syck</div><div class='del'>-#syslog</div><div class='del'>-#tcltklib</div><div class='del'>-thread</div><div class='del'>-#tk</div><div class='del'>-win32ole</div><div class='del'>-#zlib</div><div class='head'>diff --git a/ext/Setup.x68 b/ext/Setup.x68<br/>deleted file mode 100644<br/>index 0966e737e9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Setup.x68?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Setup.x68</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-option nodynamic</div><div class='del'>-</div><div class='del'>-#Win32API</div><div class='del'>-bigdecimal</div><div class='del'>-#curses</div><div class='del'>-dbm</div><div class='del'>-digest</div><div class='del'>-digest/md5</div><div class='del'>-digest/rmd160</div><div class='del'>-digest/sha1</div><div class='del'>-digest/sha2</div><div class='del'>-#dl</div><div class='del'>-#etc</div><div class='del'>-enumerator</div><div class='del'>-fcntl</div><div class='del'>-#gdbm</div><div class='del'>-#iconv</div><div class='del'>-#io/wait</div><div class='del'>-nkf</div><div class='del'>-#pty</div><div class='del'>-#openssl</div><div class='del'>-racc/cparse</div><div class='del'>-#readline</div><div class='del'>-#sdbm</div><div class='del'>-#socket</div><div class='del'>-stringio</div><div class='del'>-strscan</div><div class='del'>-#syck</div><div class='del'>-#syslog</div><div class='del'>-#tcltklib</div><div class='del'>-thread</div><div class='del'>-#tk</div><div class='del'>-#win32ole</div><div class='del'>-#zlib</div><div class='head'>diff --git a/ext/Win32API/.cvsignore b/ext/Win32API/.cvsignore<br/>deleted file mode 100644<br/>index 90c83ed9b1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-*.log</div><div class='del'>-*.def</div><div class='head'>diff --git a/ext/Win32API/Win32API.c b/ext/Win32API/Win32API.c<br/>deleted file mode 100644<br/>index a4fd0396f0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/Win32API.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/Win32API.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,215 +0,0 @@</div><div class='del'>-/*</div><div class='del'>-  Win32API - Ruby Win32 API Import Facility</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-#if !defined _MSC_VER &amp;&amp; !defined _WIN32</div><div class='del'>-#define  WIN32_LEAN_AND_MEAN</div><div class='del'>-#include &lt;windows.h&gt;</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define _T_VOID     0</div><div class='del'>-#define _T_NUMBER   1</div><div class='del'>-#define _T_POINTER  2</div><div class='del'>-#define _T_INTEGER  3</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-    HANDLE dll;</div><div class='del'>-    HANDLE proc;</div><div class='del'>-    VALUE dllname;</div><div class='del'>-    VALUE import;</div><div class='del'>-    VALUE export;</div><div class='del'>-} Win32API;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-Win32API_FreeLibrary(hdll)</div><div class='del'>-    HINSTANCE hdll;</div><div class='del'>-{</div><div class='del'>-    FreeLibrary(hdll);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-Win32API_initialize(self, dllname, proc, import, export)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE dllname;</div><div class='del'>-    VALUE proc;</div><div class='del'>-    VALUE import;</div><div class='del'>-    VALUE export;</div><div class='del'>-{</div><div class='del'>-    HANDLE hproc;</div><div class='del'>-    HINSTANCE hdll;</div><div class='del'>-    VALUE str;</div><div class='del'>-    VALUE a_import;</div><div class='del'>-    VALUE *ptr;</div><div class='del'>-    char *s;</div><div class='del'>-    int i;</div><div class='del'>-    int len;</div><div class='del'>-    int ex = _T_VOID;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(dllname);</div><div class='del'>-    SafeStringValue(proc);</div><div class='del'>-    hdll = LoadLibrary(RSTRING(dllname)-&gt;ptr);</div><div class='del'>-    if (!hdll)</div><div class='del'>-	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='del'>-    if (!hproc) {</div><div class='del'>-	str = rb_str_new3(proc);</div><div class='del'>-	str = rb_str_cat(str, "A", 1);</div><div class='del'>-	hproc = (HANDLE)GetProcAddress(hdll, RSTRING(str)-&gt;ptr);</div><div class='del'>-	if (!hproc)</div><div class='del'>-	    rb_raise(rb_eRuntimeError, "GetProcAddress: %s or %s\n",</div><div class='del'>-		RSTRING(proc)-&gt;ptr, RSTRING(str)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-    rb_iv_set(self, "__dll__", UINT2NUM((unsigned long)hdll));</div><div class='del'>-    rb_iv_set(self, "__dllname__", dllname);</div><div class='del'>-    rb_iv_set(self, "__proc__", UINT2NUM((unsigned long)hproc));</div><div class='del'>-</div><div class='del'>-    a_import = rb_ary_new();</div><div class='del'>-    switch (TYPE(import)) {</div><div class='del'>-    case T_NIL:</div><div class='del'>-	break;</div><div class='del'>-    case T_ARRAY:</div><div class='del'>-	ptr = RARRAY(import)-&gt;ptr;</div><div class='del'>-	for (i = 0, len = RARRAY(import)-&gt;len; i &lt; len; i++) {</div><div class='del'>-	    SafeStringValue(ptr[i]);</div><div class='del'>-	    switch (*(char *)RSTRING(ptr[i])-&gt;ptr) {</div><div class='del'>-	    case 'N': case 'n': case 'L': case 'l':</div><div class='del'>-		rb_ary_push(a_import, INT2FIX(_T_NUMBER));</div><div class='del'>-		break;</div><div class='del'>-	    case 'P': case 'p':</div><div class='del'>-		rb_ary_push(a_import, INT2FIX(_T_POINTER));</div><div class='del'>-		break;</div><div class='del'>-	    case 'I': case 'i':</div><div class='del'>-		rb_ary_push(a_import, INT2FIX(_T_INTEGER));</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-	SafeStringValue(import);</div><div class='del'>-	s = RSTRING(import)-&gt;ptr;</div><div class='del'>-	for (i = 0, len = RSTRING(import)-&gt;len; i &lt; len; i++) {</div><div class='del'>-	    switch (*s++) {</div><div class='del'>-	    case 'N': case 'n': case 'L': case 'l':</div><div class='del'>-		rb_ary_push(a_import, INT2FIX(_T_NUMBER));</div><div class='del'>-		break;</div><div class='del'>-	    case 'P': case 'p':</div><div class='del'>-		rb_ary_push(a_import, INT2FIX(_T_POINTER));</div><div class='del'>-		break;</div><div class='del'>-	    case 'I': case 'i':</div><div class='del'>-		rb_ary_push(a_import, INT2FIX(_T_INTEGER));</div><div class='del'>-		break;</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 (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='del'>-    rb_iv_set(self, "__import__", a_import);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(export)) {</div><div class='del'>-	ex = _T_VOID;</div><div class='del'>-    } else {</div><div class='del'>-	SafeStringValue(export);</div><div class='del'>-	switch (*RSTRING(export)-&gt;ptr) {</div><div class='del'>-        case 'V': case 'v':</div><div class='del'>-	    ex = _T_VOID;</div><div class='del'>-	    break;</div><div class='del'>-	case 'N': case 'n': case 'L': case 'l':</div><div class='del'>-	    ex = _T_NUMBER;</div><div class='del'>-	    break;</div><div class='del'>-	case 'P': case 'p':</div><div class='del'>-	    ex = _T_POINTER;</div><div class='del'>-	    break;</div><div class='del'>-	case 'I': case 'i':</div><div class='del'>-	    ex = _T_INTEGER;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_iv_set(self, "__export__", INT2FIX(ex));</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef _MSC_VER</div><div class='del'>-#pragma optimize("g", off)</div><div class='del'>-#endif</div><div class='del'>-static VALUE</div><div class='del'>-Win32API_Call(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 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='del'>-</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='del'>-</div><div class='del'>-</div><div class='del'>-    if (items != nimport)</div><div class='del'>-	rb_raise(rb_eRuntimeError, "wrong number of parameters: expected %d, got %d",</div><div class='del'>-	    nimport, items);</div><div class='del'>-</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='del'>-	    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='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	params[i] = lParam;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ret = ApiFunction(param);</div><div class='del'>-</div><div class='del'>-    switch (FIX2INT(obj_export)) {</div><div class='del'>-    case _T_NUMBER:</div><div class='del'>-    case _T_INTEGER:</div><div class='del'>-	return INT2NUM(ret);</div><div class='del'>-    case _T_POINTER:</div><div class='del'>-	return rb_str_new2((char *)ret);</div><div class='del'>-    case _T_VOID:</div><div class='del'>-    default:</div><div class='del'>-	return INT2NUM(0);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_Win32API()</div><div class='del'>-{</div><div class='del'>-    VALUE cWin32API = rb_define_class("Win32API", rb_cObject);</div><div class='del'>-    rb_define_method(cWin32API, "initialize", Win32API_initialize, 4);</div><div class='del'>-    rb_define_method(cWin32API, "call", Win32API_Call, -1);</div><div class='del'>-    rb_define_alias(cWin32API,  "Call", "call");</div><div class='del'>-}</div><div class='head'>diff --git a/ext/Win32API/depend b/ext/Win32API/depend<br/>deleted file mode 100644<br/>index b224bb66c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-Win32API.o : Win32API.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/Win32API/extconf.rb b/ext/Win32API/extconf.rb<br/>deleted file mode 100644<br/>index 865788556f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-dir_config("win32")</div><div class='del'>-if have_header("windows.h") and have_library("kernel32")</div><div class='del'>-  create_makefile("Win32API")</div><div class='del'>-end</div><div class='head'>diff --git a/ext/Win32API/getch.rb b/ext/Win32API/getch.rb<br/>deleted file mode 100644<br/>index c015bbe9bc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/getch.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/getch.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-require 'Win32API'</div><div class='del'>-</div><div class='del'>-getch = Win32API.new("crtdll", "_getch", [], 'L')</div><div class='del'>-</div><div class='del'>-puts getch.Call.chr</div><div class='head'>diff --git a/ext/Win32API/lib/win32/registry.rb b/ext/Win32API/lib/win32/registry.rb<br/>deleted file mode 100644<br/>index 9a2f3827b7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/lib/win32/registry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/lib/win32/registry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,831 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= Win32 Registry I/F</div><div class='del'>-win32/registry is registry accessor library for Win32 platform.</div><div class='del'>-It uses Win32API to call Win32 Registry APIs.</div><div class='del'>-</div><div class='del'>-== example</div><div class='del'>-  Win32::Registry::HKEY_CURRENT_USER.open('SOFTWARE\foo') do |reg|</div><div class='del'>-    value = reg['foo']                               # read a value</div><div class='del'>-    value = reg['foo', Win32::Registry::REG_SZ]      # read a value with type</div><div class='del'>-    type, value = reg.read('foo')                    # read a value</div><div class='del'>-    reg['foo'] = 'bar'                               # write a value</div><div class='del'>-    reg['foo', Win32::Registry::REG_SZ] = 'bar'      # write a value with type</div><div class='del'>-    reg.write('foo', Win32::Registry::REG_SZ, 'bar') # write a value</div><div class='del'>-    </div><div class='del'>-    reg.each_value { |name, type, data| ... }        # Enumerate values</div><div class='del'>-    reg.each_key { |key, wtime| ... }                # Enumerate subkeys</div><div class='del'>-    </div><div class='del'>-    reg.delete_value(name)                         # Delete a value</div><div class='del'>-    reg.delete_key(name)                           # Delete a subkey</div><div class='del'>-    reg.delete_key(name, true)                     # Delete a subkey recursively</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-= Reference</div><div class='del'>-</div><div class='del'>-== Win32::Registry class</div><div class='del'>-</div><div class='del'>-=== including modules</div><div class='del'>-</div><div class='del'>-* Enumerable</div><div class='del'>-* Registry::Constants</div><div class='del'>-</div><div class='del'>-=== class methods</div><div class='del'>---- Registry.open(key, subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED)</div><div class='del'>---- Registry.open(key, subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED) { |reg| ... }</div><div class='del'>-    Open the registry key ((|subkey|)) under ((|key|)).</div><div class='del'>-    ((|key|)) is Win32::Registry object of parent key.</div><div class='del'>-    You can use predefined key HKEY_* (see ((&lt;constants&gt;)))</div><div class='del'>-    </div><div class='del'>-    ((|desired|)) and ((|opt|)) is access mask and key option.</div><div class='del'>-    For detail, see ((&lt;MSDN Library|URL:http://msdn.microsoft.com/library/en-us/sysinfo/base/regopenkeyex.asp&gt;)).</div><div class='del'>-    </div><div class='del'>-    If block is given, the key is closed automatically.</div><div class='del'>-</div><div class='del'>---- Registry.create(key, subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED)</div><div class='del'>---- Registry.create(key, subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED) { |reg| ... }</div><div class='del'>-    Create or open the registry key ((|subkey|)) under ((|key|)).</div><div class='del'>-    You can use predefined key HKEY_* (see ((&lt;constants&gt;)))</div><div class='del'>-    </div><div class='del'>-    If subkey is already exists, key is opened and Registry#((&lt;created?&gt;))</div><div class='del'>-    method will return false.</div><div class='del'>-    </div><div class='del'>-    If block is given, the key is closed automatically.</div><div class='del'>-</div><div class='del'>---- Registry.expand_environ(str)</div><div class='del'>-    Replace (({%\w+%})) into the environment value of ((|str|)).</div><div class='del'>-    This method is used for REG_EXPAND_SZ.</div><div class='del'>-    </div><div class='del'>-    For detail, see ((&lt;ExpandEnvironmentStrings|URL:http://msdn.microsoft.com/library/en-us/sysinfo/base/expandenvironmentstrings.asp&gt;)) Win32 API.</div><div class='del'>-</div><div class='del'>---- Registry.type2name(type)</div><div class='del'>-    Convert registry type value to readable string.</div><div class='del'>-</div><div class='del'>---- Registry.wtime2time(wtime)</div><div class='del'>-    Convert 64-bit FILETIME integer into Time object.</div><div class='del'>-</div><div class='del'>---- Registry.time2wtime(time)</div><div class='del'>-    Convert Time object or Integer object into 64-bit FILETIME.</div><div class='del'>-</div><div class='del'>-=== instance methods</div><div class='del'>---- open(subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED)</div><div class='del'>-    Same as (({Win32::((&lt;Registry.open&gt;))(self, subkey, desired, opt)}))</div><div class='del'>-</div><div class='del'>---- create(subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED)</div><div class='del'>-    Same as (({Win32::((&lt;Registry.create&gt;))(self, subkey, desired, opt)}))</div><div class='del'>-</div><div class='del'>---- close</div><div class='del'>-    Close key.</div><div class='del'>-    </div><div class='del'>-    After closed, most method raises error.</div><div class='del'>-</div><div class='del'>---- read(name, *rtype)</div><div class='del'>-    Read a registry value named ((|name|)) and return array of</div><div class='del'>-    [ ((|type|)), ((|data|)) ].</div><div class='del'>-    When name is nil, the `default' value is read.</div><div class='del'>-    </div><div class='del'>-    ((|type|)) is value type. (see ((&lt;Win32::Registry::Constants module&gt;)))</div><div class='del'>-    ((|data|)) is value data, its class is:</div><div class='del'>-    :REG_SZ, REG_EXPAND_SZ</div><div class='del'>-       String</div><div class='del'>-    :REG_MULTI_SZ</div><div class='del'>-       Array of String</div><div class='del'>-    :REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_QWORD</div><div class='del'>-       Integer</div><div class='del'>-    :REG_BINARY</div><div class='del'>-       String (contains binary data)</div><div class='del'>-    </div><div class='del'>-    When ((|rtype|)) is specified, the value type must be included by</div><div class='del'>-    ((|rtype|)) array, or TypeError is raised.</div><div class='del'>-</div><div class='del'>---- self[name, *rtype]</div><div class='del'>-    Read a registry value named ((|name|)) and return its value data.</div><div class='del'>-    The class of value is same as ((&lt;read&gt;)) method returns.</div><div class='del'>-    </div><div class='del'>-    If the value type is REG_EXPAND_SZ, returns value data whose environment</div><div class='del'>-    variables are replaced.</div><div class='del'>-    If the value type is neither REG_SZ, REG_MULTI_SZ, REG_DWORD,</div><div class='del'>-    REG_DWORD_BIG_ENDIAN, nor REG_QWORD, TypeError is raised.</div><div class='del'>-    </div><div class='del'>-    The meaning of ((|rtype|)) is same as ((&lt;read&gt;)) method.</div><div class='del'>-</div><div class='del'>---- read_s(name)</div><div class='del'>---- read_i(name)</div><div class='del'>---- read_bin(name)</div><div class='del'>-    Read a REG_SZ(read_s), REG_DWORD(read_i), or REG_BINARY(read_bin)</div><div class='del'>-    registry value named ((|name|)).</div><div class='del'>-    </div><div class='del'>-    If the values type does not match, TypeError is raised.</div><div class='del'>-</div><div class='del'>---- read_s_expand(name)</div><div class='del'>-    Read a REG_SZ or REG_EXPAND_SZ registry value named ((|name|)).</div><div class='del'>-    </div><div class='del'>-    If the value type is REG_EXPAND_SZ, environment variables are replaced.</div><div class='del'>-    Unless the value type is REG_SZ or REG_EXPAND_SZ, TypeError is raised.</div><div class='del'>-</div><div class='del'>---- write(name, type, data)</div><div class='del'>-    Write ((|data|)) to a registry value named ((|name|)).</div><div class='del'>-    When name is nil, write to the `default' value.</div><div class='del'>-    </div><div class='del'>-    ((|type|)) is type value. (see ((&lt;Registry::Constants module&gt;)))</div><div class='del'>-    Class of ((|data|)) must be same as which ((&lt;read&gt;))</div><div class='del'>-    method returns.</div><div class='del'>-</div><div class='del'>---- self[name, wtype = nil] = value</div><div class='del'>-    Write ((|value|)) to a registry value named ((|name|)).</div><div class='del'>-    </div><div class='del'>-    If ((|wtype|)) is specified, the value type is it.</div><div class='del'>-    Otherwise, the value type is depend on class of ((|value|)):</div><div class='del'>-    :Integer</div><div class='del'>-      REG_DWORD</div><div class='del'>-    :String</div><div class='del'>-      REG_SZ</div><div class='del'>-    :Array</div><div class='del'>-      REG_MULTI_SZ</div><div class='del'>-</div><div class='del'>---- write_s(name, value)</div><div class='del'>---- write_i(name, value)</div><div class='del'>---- write_bin(name, value)</div><div class='del'>-    Write ((|value|)) to a registry value named ((|name|)).</div><div class='del'>-    </div><div class='del'>-    The value type is REG_SZ(write_s), REG_DWORD(write_i), or</div><div class='del'>-    REG_BINARY(write_bin).</div><div class='del'>-</div><div class='del'>---- each { |name, type, value| ... }</div><div class='del'>---- each_value { |name, type, value| ... }</div><div class='del'>-    Enumerate values.</div><div class='del'>-</div><div class='del'>---- each_key { |subkey, wtime| ... }</div><div class='del'>-    Enumerate subkeys.</div><div class='del'>-    </div><div class='del'>-    ((|subkey|)) is String which contains name of subkey.</div><div class='del'>-    ((|wtime|)) is last write time as FILETIME (64-bit integer).</div><div class='del'>-    (see ((&lt;Registry.wtime2time&gt;)))</div><div class='del'>-</div><div class='del'>---- delete(name)</div><div class='del'>---- delete_value(name)</div><div class='del'>-    Delete a registry value named ((|name|)).</div><div class='del'>-    We can not delete the `default' value.</div><div class='del'>-</div><div class='del'>---- delete_key(name, recursive = false)</div><div class='del'>-    Delete a subkey named ((|name|)) and all its values.</div><div class='del'>-    </div><div class='del'>-    If ((|recursive|)) is false, the subkey must not have subkeys.</div><div class='del'>-    Otherwise, this method deletes all subkeys and values recursively.</div><div class='del'>-</div><div class='del'>---- flush</div><div class='del'>-    Write all the attributes into the registry file.</div><div class='del'>-</div><div class='del'>---- created?</div><div class='del'>-    Returns if key is created ((*newly*)).</div><div class='del'>-    (see ((&lt;Registry.create&gt;)))</div><div class='del'>-</div><div class='del'>---- open?</div><div class='del'>-    Returns if key is not closed.</div><div class='del'>-</div><div class='del'>---- hkey</div><div class='del'>-    Returns key handle value.</div><div class='del'>-</div><div class='del'>---- parent</div><div class='del'>-    Win32::Registry object of parent key, or nil if predefeined key.</div><div class='del'>-</div><div class='del'>---- keyname</div><div class='del'>-    Same as ((|subkey|)) value of ((&lt;Registry.open&gt;)) or</div><div class='del'>-    ((&lt;Registry.create&gt;)) method.</div><div class='del'>-</div><div class='del'>---- disposition</div><div class='del'>-    Disposition value (REG_CREATED_NEW_KEY or REG_OPENED_EXISTING_KEY).</div><div class='del'>-</div><div class='del'>---- name</div><div class='del'>---- to_s</div><div class='del'>-    Full path of key such as (({'HKEY_CURRENT_USER\SOFTWARE\foo\bar'})).</div><div class='del'>-</div><div class='del'>---- info</div><div class='del'>-    Returns key information as Array of:</div><div class='del'>-    :num_keys</div><div class='del'>-      The number of subkeys.</div><div class='del'>-    :max_key_length</div><div class='del'>-      Maximum length of name of subkeys.</div><div class='del'>-    :num_values</div><div class='del'>-      The number of values.</div><div class='del'>-    :max_value_name_length</div><div class='del'>-      Maximum length of name of values.</div><div class='del'>-    :max_value_length</div><div class='del'>-      Maximum length of value of values.</div><div class='del'>-    :descriptor_length</div><div class='del'>-      Length of security descriptor.</div><div class='del'>-    :wtime</div><div class='del'>-      Last write time as FILETIME(64-bit integer)</div><div class='del'>-    </div><div class='del'>-    For detail, see ((&lt;RegQueryInfoKey|URL:http://msdn.microsoft.com/library/en-us/sysinfo/base/regqueryinfokey.asp&gt;)) Win32 API.</div><div class='del'>-</div><div class='del'>---- num_keys</div><div class='del'>---- max_key_length</div><div class='del'>---- num_values</div><div class='del'>---- max_value_name_length</div><div class='del'>---- max_value_length</div><div class='del'>---- descriptor_length</div><div class='del'>---- wtime</div><div class='del'>-    Returns an item of key information.</div><div class='del'>-</div><div class='del'>-=== constants</div><div class='del'>---- HKEY_CLASSES_ROOT</div><div class='del'>---- HKEY_CURRENT_USER</div><div class='del'>---- HKEY_LOCAL_MACHINE</div><div class='del'>---- HKEY_PERFORMANCE_DATA</div><div class='del'>---- HKEY_CURRENT_CONFIG</div><div class='del'>---- HKEY_DYN_DATA</div><div class='del'>-    Win32::Registry object whose key is predefined key.</div><div class='del'>-    For detail, see ((&lt;MSDN Library|URL:http://msdn.microsoft.com/library/en-us/sysinfo/base/predefined_keys.asp&gt;)).</div><div class='del'>-</div><div class='del'>-== Win32::Registry::Constants module</div><div class='del'>-</div><div class='del'>-For detail, see ((&lt;MSDN Library|URL:http://msdn.microsoft.com/library/en-us/sysinfo/base/registry.asp&gt;)).</div><div class='del'>-</div><div class='del'>---- HKEY_*</div><div class='del'>-    Predefined key ((*handle*)).</div><div class='del'>-    These are Integer, not Win32::Registry.</div><div class='del'>-</div><div class='del'>---- REG_*</div><div class='del'>-    Registry value type.</div><div class='del'>-</div><div class='del'>---- KEY_*</div><div class='del'>-    Security access mask.</div><div class='del'>-</div><div class='del'>---- KEY_OPTIONS_*</div><div class='del'>-    Key options.</div><div class='del'>-</div><div class='del'>---- REG_CREATED_NEW_KEY</div><div class='del'>---- REG_OPENED_EXISTING_KEY</div><div class='del'>-    If the key is created newly or opened existing key.</div><div class='del'>-    See also Registry#((&lt;disposition&gt;)) method.</div><div class='del'>-</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require 'Win32API'</div><div class='del'>-</div><div class='del'>-module Win32</div><div class='del'>-  class Registry</div><div class='del'>-    module Constants</div><div class='del'>-      HKEY_CLASSES_ROOT = 0x80000000</div><div class='del'>-      HKEY_CURRENT_USER = 0x80000001</div><div class='del'>-      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='del'>-      </div><div class='del'>-      REG_NONE = 0</div><div class='del'>-      REG_SZ = 1</div><div class='del'>-      REG_EXPAND_SZ = 2</div><div class='del'>-      REG_BINARY = 3</div><div class='del'>-      REG_DWORD = 4</div><div class='del'>-      REG_DWORD_LITTLE_ENDIAN = 4</div><div class='del'>-      REG_DWORD_BIG_ENDIAN = 5</div><div class='del'>-      REG_LINK = 6</div><div class='del'>-      REG_MULTI_SZ = 7</div><div class='del'>-      REG_RESOURCE_LIST = 8</div><div class='del'>-      REG_FULL_RESOURCE_DESCRIPTOR = 9</div><div class='del'>-      REG_RESOURCE_REQUIREMENTS_LIST = 10</div><div class='del'>-      REG_QWORD = 11</div><div class='del'>-      REG_QWORD_LITTLE_ENDIAN = 11</div><div class='del'>-      </div><div class='del'>-      STANDARD_RIGHTS_READ = 0x00020000</div><div class='del'>-      STANDARD_RIGHTS_WRITE = 0x00020000</div><div class='del'>-      KEY_QUERY_VALUE = 0x0001</div><div class='del'>-      KEY_SET_VALUE = 0x0002</div><div class='del'>-      KEY_CREATE_SUB_KEY = 0x0004</div><div class='del'>-      KEY_ENUMERATE_SUB_KEYS = 0x0008</div><div class='del'>-      KEY_NOTIFY = 0x0010</div><div class='del'>-      KEY_CREATE_LINK = 0x0020</div><div class='del'>-      KEY_READ = STANDARD_RIGHTS_READ |</div><div class='del'>-        KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY</div><div class='del'>-      KEY_WRITE = STANDARD_RIGHTS_WRITE |</div><div class='del'>-        KEY_SET_VALUE | KEY_CREATE_SUB_KEY</div><div class='del'>-      KEY_EXECUTE = KEY_READ</div><div class='del'>-      KEY_ALL_ACCESS = KEY_READ | KEY_WRITE | KEY_CREATE_LINK</div><div class='del'>-      </div><div class='del'>-      REG_OPTION_RESERVED = 0x0000</div><div class='del'>-      REG_OPTION_NON_VOLATILE = 0x0000</div><div class='del'>-      REG_OPTION_VOLATILE = 0x0001</div><div class='del'>-      REG_OPTION_CREATE_LINK = 0x0002</div><div class='del'>-      REG_OPTION_BACKUP_RESTORE = 0x0004</div><div class='del'>-      REG_OPTION_OPEN_LINK = 0x0008</div><div class='del'>-      REG_LEGAL_OPTION = REG_OPTION_RESERVED |</div><div class='del'>-        REG_OPTION_NON_VOLATILE | REG_OPTION_CREATE_LINK |</div><div class='del'>-        REG_OPTION_BACKUP_RESTORE | REG_OPTION_OPEN_LINK</div><div class='del'>-      </div><div class='del'>-      REG_CREATED_NEW_KEY = 1</div><div class='del'>-      REG_OPENED_EXISTING_KEY = 2</div><div class='del'>-      </div><div class='del'>-      REG_WHOLE_HIVE_VOLATILE = 0x0001</div><div class='del'>-      REG_REFRESH_HIVE = 0x0002</div><div class='del'>-      REG_NO_LAZY_FLUSH = 0x0004</div><div class='del'>-      REG_FORCE_RESTORE = 0x0008</div><div class='del'>-      </div><div class='del'>-      MAX_KEY_LENGTH = 514</div><div class='del'>-      MAX_VALUE_LENGTH = 32768</div><div class='del'>-    end</div><div class='del'>-    include Constants</div><div class='del'>-    include Enumerable</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Error</div><div class='del'>-    #</div><div class='del'>-    class Error &lt; ::StandardError</div><div class='del'>-      FormatMessageA = Win32API.new('kernel32.dll', 'FormatMessageA', 'LPLLPLP', 'L')</div><div class='del'>-      def initialize(code)</div><div class='del'>-        @code = code</div><div class='del'>-        msg = "\0" * 1024</div><div class='del'>-        len = FormatMessageA.call(0x1200, 0, code, 0, msg, 1024, 0)</div><div class='del'>-        super msg[0, len].tr("\r", '').chomp</div><div class='del'>-      end</div><div class='del'>-      attr_reader :code</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Predefined Keys</div><div class='del'>-    #</div><div class='del'>-    class PredefinedKey &lt; Registry</div><div class='del'>-      def initialize(hkey, keyname)</div><div class='del'>-        @hkey = hkey</div><div class='del'>-        @parent = nil</div><div class='del'>-        @keyname = keyname</div><div class='del'>-        @disposition = REG_OPENED_EXISTING_KEY</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      # Predefined keys cannot be closed</div><div class='del'>-      def close</div><div class='del'>-        raise Error.new(5) ## ERROR_ACCESS_DENIED</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      # Fake class for Registry#open, Registry#create</div><div class='del'>-      def class</div><div class='del'>-        Registry</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      # Make all</div><div class='del'>-      Constants.constants.grep(/^HKEY_/) do |c|</div><div class='del'>-        Registry.const_set c, new(Constants.const_get(c), c)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Win32 APIs</div><div class='del'>-    #</div><div class='del'>-    module API</div><div class='del'>-      [</div><div class='del'>-        %w/RegOpenKeyExA    LPLLP        L/,</div><div class='del'>-        %w/RegCreateKeyExA  LPLLLLPPP    L/,</div><div class='del'>-        %w/RegEnumValueA    LLPPPPPP     L/,</div><div class='del'>-        %w/RegEnumKeyExA    LLPPLLLP     L/,</div><div class='del'>-        %w/RegQueryValueExA LPLPPP       L/,</div><div class='del'>-        %w/RegSetValueExA   LPLLPL       L/,</div><div class='del'>-        %w/RegDeleteValue   LP           L/,</div><div class='del'>-        %w/RegDeleteKey     LP           L/,</div><div class='del'>-        %w/RegFlushKey      L            L/,</div><div class='del'>-        %w/RegCloseKey      L            L/,</div><div class='del'>-        %w/RegQueryInfoKey  LPPPPPPPPPPP L/,</div><div class='del'>-      ].each do |fn|</div><div class='del'>-        const_set fn[0].intern, Win32API.new('advapi32.dll', *fn)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      module_function</div><div class='del'>-      </div><div class='del'>-      def check(result)</div><div class='del'>-        raise Error, result, caller(2) if result != 0</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def packdw(dw)</div><div class='del'>-        [dw].pack('V')</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def unpackdw(dw)</div><div class='del'>-        dw += [0].pack('V')</div><div class='del'>-        dw.unpack('V')[0]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def packqw(qw)</div><div class='del'>-        [ qw &amp; 0xFFFFFFFF, qw &gt;&gt; 32 ].pack('VV')</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def unpackqw(qw)</div><div class='del'>-        qw = qw.unpack('VV')</div><div class='del'>-        (qw[1] &lt;&lt; 32) | qw[0]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def OpenKey(hkey, name, opt, desired)</div><div class='del'>-        result = packdw(0)</div><div class='del'>-        check RegOpenKeyExA.call(hkey, name, opt, desired, result)</div><div class='del'>-        unpackdw(result)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def CreateKey(hkey, name, opt, desired)</div><div class='del'>-        result = packdw(0)</div><div class='del'>-        disp = packdw(0)</div><div class='del'>-        check RegCreateKeyExA.call(hkey, name, 0, 0, opt, desired,</div><div class='del'>-                                   0, result, disp)</div><div class='del'>-        [ unpackdw(result), unpackdw(disp) ]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def EnumValue(hkey, index)</div><div class='del'>-        name = ' ' * Constants::MAX_KEY_LENGTH</div><div class='del'>-        size = packdw(Constants::MAX_KEY_LENGTH)</div><div class='del'>-        check RegEnumValueA.call(hkey, index, name, size, 0, 0, 0, 0)</div><div class='del'>-        name[0, unpackdw(size)]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def EnumKey(hkey, index)</div><div class='del'>-        name = ' ' * Constants::MAX_KEY_LENGTH</div><div class='del'>-        size = packdw(Constants::MAX_KEY_LENGTH)</div><div class='del'>-        wtime = ' ' * 8</div><div class='del'>-        check RegEnumKeyExA.call(hkey, index, name, size, 0, 0, 0, wtime)</div><div class='del'>-        [ name[0, unpackdw(size)], unpackqw(wtime) ]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def QueryValue(hkey, name)</div><div class='del'>-        type = packdw(0)</div><div class='del'>-        size = packdw(0)</div><div class='del'>-        check RegQueryValueExA.call(hkey, name, 0, type, 0, size)</div><div class='del'>-        data = ' ' * unpackdw(size)</div><div class='del'>-        check RegQueryValueExA.call(hkey, name, 0, type, data, size)</div><div class='del'>-        [ unpackdw(type), data[0, unpackdw(size)] ]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def SetValue(hkey, name, type, data, size)</div><div class='del'>-        check RegSetValueExA.call(hkey, name, 0, type, data, size)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def DeleteValue(hkey, name)</div><div class='del'>-        check RegDeleteValue.call(hkey, name)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def DeleteKey(hkey, name)</div><div class='del'>-        check RegDeleteKey.call(hkey, name)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def FlushKey(hkey)</div><div class='del'>-        check RegFlushKey.call(hkey)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def CloseKey(hkey)</div><div class='del'>-        check RegCloseKey.call(hkey)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def QueryInfoKey(hkey)</div><div class='del'>-        subkeys = packdw(0)</div><div class='del'>-        maxsubkeylen = packdw(0)</div><div class='del'>-        values = packdw(0)</div><div class='del'>-        maxvaluenamelen = packdw(0)</div><div class='del'>-        maxvaluelen = packdw(0)</div><div class='del'>-        secdescs = packdw(0)</div><div class='del'>-        wtime = ' ' * 8</div><div class='del'>-        check RegQueryInfoKey.call(hkey, 0, 0, 0, subkeys, maxsubkeylen, 0,</div><div class='del'>-          values, maxvaluenamelen, maxvaluelen, secdescs, wtime)</div><div class='del'>-        [ unpackdw(subkeys), unpackdw(maxsubkeylen), unpackdw(values),</div><div class='del'>-          unpackdw(maxvaluenamelen), unpackdw(maxvaluelen),</div><div class='del'>-          unpackdw(secdescs), unpackqw(wtime) ]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # utility functions</div><div class='del'>-    #</div><div class='del'>-    def self.expand_environ(str)</div><div class='del'>-      str.gsub(/%([^%]+)%/) { ENV[$1] || ENV[$1.upcase] || $&amp; }</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    @@type2name = { }</div><div class='del'>-    %w[</div><div class='del'>-      REG_NONE REG_SZ REG_EXPAND_SZ REG_BINARY REG_DWORD</div><div class='del'>-      REG_DWORD_BIG_ENDIAN REG_LINK REG_MULTI_SZ</div><div class='del'>-      REG_RESOURCE_LIST REG_FULL_RESOURCE_DESCRIPTOR</div><div class='del'>-      REG_RESOURCE_REQUIREMENTS_LIST REG_QWORD</div><div class='del'>-    ].each do |type|</div><div class='del'>-      @@type2name[Constants.const_get(type)] = type</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def self.type2name(type)</div><div class='del'>-      @@type2name[type] || type.to_s</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def self.wtime2time(wtime)</div><div class='del'>-      Time.at((wtime - 116444736000000000) / 10000000)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def self.time2wtime(time)</div><div class='del'>-      time.to_i * 10000000 + 116444736000000000</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # constructors</div><div class='del'>-    #</div><div class='del'>-    private_class_method :new</div><div class='del'>-    </div><div class='del'>-    def self.open(hkey, subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED)</div><div class='del'>-      subkey = subkey.chomp('\\')</div><div class='del'>-      newkey = API.OpenKey(hkey.hkey, subkey, opt, desired)</div><div class='del'>-      obj = new(newkey, hkey, subkey, REG_OPENED_EXISTING_KEY)</div><div class='del'>-      if block_given?</div><div class='del'>-        begin</div><div class='del'>-          yield obj</div><div class='del'>-        ensure</div><div class='del'>-          obj.close</div><div class='del'>-        end</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 self.create(hkey, subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED)</div><div class='del'>-      newkey, disp = API.CreateKey(hkey.hkey, subkey, opt, desired)</div><div class='del'>-      obj = new(newkey, hkey, subkey, disp)</div><div class='del'>-      if block_given?</div><div class='del'>-        begin</div><div class='del'>-          yield obj</div><div class='del'>-        ensure</div><div class='del'>-          obj.close</div><div class='del'>-        end</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'>-    #</div><div class='del'>-    # finalizer</div><div class='del'>-    #</div><div class='del'>-    @@final = proc { |hkey| proc { API.CloseKey(hkey[0]) if hkey[0] } }</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # initialize</div><div class='del'>-    #</div><div class='del'>-    def initialize(hkey, parent, keyname, disposition)</div><div class='del'>-      @hkey = hkey</div><div class='del'>-      @parent = parent</div><div class='del'>-      @keyname = keyname</div><div class='del'>-      @disposition = disposition</div><div class='del'>-      @hkeyfinal = [ hkey ]</div><div class='del'>-      ObjectSpace.define_finalizer self, @@final.call(@hkeyfinal)</div><div class='del'>-    end</div><div class='del'>-    attr_reader :hkey, :parent, :keyname, :disposition</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # attributes</div><div class='del'>-    #</div><div class='del'>-    def created?</div><div class='del'>-      @disposition == REG_CREATED_NEW_KEY</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def open?</div><div class='del'>-      !@hkey.nil?</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def name</div><div class='del'>-      parent = self</div><div class='del'>-      name = @keyname</div><div class='del'>-      while parent = parent.parent</div><div class='del'>-        name = parent.keyname + '\\' + name</div><div class='del'>-      end</div><div class='del'>-      name</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def inspect</div><div class='del'>-      "\#&lt;Win32::Registry key=#{name.inspect}&gt;"</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # marshalling</div><div class='del'>-    #</div><div class='del'>-    def _dump(depth)</div><div class='del'>-      raise TypeError, "can't dump Win32::Registry"</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # open/close</div><div class='del'>-    #</div><div class='del'>-    def open(subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED, &amp;blk)</div><div class='del'>-      self.class.open(self, subkey, desired, opt, &amp;blk)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def create(subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED, &amp;blk)</div><div class='del'>-      self.class.create(self, subkey, desired, opt, &amp;blk)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def close</div><div class='del'>-      API.CloseKey(@hkey)</div><div class='del'>-      @hkey = @parent = @keyname = nil</div><div class='del'>-      @hkeyfinal[0] = nil</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # iterator</div><div class='del'>-    #</div><div class='del'>-    def each_value</div><div class='del'>-      index = 0</div><div class='del'>-      while true</div><div class='del'>-        begin</div><div class='del'>-          subkey = API.EnumValue(@hkey, index)</div><div class='del'>-        rescue Error</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          type, data = read(subkey)</div><div class='del'>-        rescue Error</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-        yield subkey, type, data</div><div class='del'>-        index += 1</div><div class='del'>-      end</div><div class='del'>-      index</div><div class='del'>-    end</div><div class='del'>-    alias each each_value</div><div class='del'>-    </div><div class='del'>-    def each_key</div><div class='del'>-      index = 0</div><div class='del'>-      while true</div><div class='del'>-        begin</div><div class='del'>-          subkey, wtime = API.EnumKey(@hkey, index)</div><div class='del'>-        rescue Error</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-        yield subkey, wtime</div><div class='del'>-        index += 1</div><div class='del'>-      end</div><div class='del'>-      index</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def keys</div><div class='del'>-      keys_ary = []</div><div class='del'>-      each_key { |key,| keys_ary &lt;&lt; key }</div><div class='del'>-      keys_ary</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # reader</div><div class='del'>-    #</div><div class='del'>-    def read(name, *rtype)</div><div class='del'>-      type, data = API.QueryValue(@hkey, name)</div><div class='del'>-      unless rtype.empty? or rtype.include?(type)</div><div class='del'>-        raise TypeError, "Type mismatch (expect #{rtype.inspect} but #{type} present)"</div><div class='del'>-      end</div><div class='del'>-      case type</div><div class='del'>-      when REG_SZ, REG_EXPAND_SZ</div><div class='del'>-        [ type, data.chop ]</div><div class='del'>-      when REG_MULTI_SZ</div><div class='del'>-        [ type, data.split(/\0/) ]</div><div class='del'>-      when REG_BINARY</div><div class='del'>-        [ type, data ]</div><div class='del'>-      when REG_DWORD</div><div class='del'>-        [ type, API.unpackdw(data) ]</div><div class='del'>-      when REG_DWORD_BIG_ENDIAN</div><div class='del'>-        [ type, data.unpack('N')[0] ]</div><div class='del'>-      when REG_QWORD</div><div class='del'>-        [ type, API.unpackqw(data) ]</div><div class='del'>-      else</div><div class='del'>-        raise TypeError, "Type #{type} is not supported."</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def [](name, *rtype)</div><div class='del'>-      type, data = read(name, *rtype)</div><div class='del'>-      case type</div><div class='del'>-      when REG_SZ, REG_DWORD, REG_QWORD, REG_MULTI_SZ</div><div class='del'>-        data</div><div class='del'>-      when REG_EXPAND_SZ</div><div class='del'>-        Registry.expand_environ(data)</div><div class='del'>-      else</div><div class='del'>-        raise TypeError, "Type #{type} is not supported."</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def read_s(name)</div><div class='del'>-      read(name, REG_SZ)[1]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def read_s_expand(name)</div><div class='del'>-      type, data = read(name, REG_SZ, REG_EXPAND_SZ)</div><div class='del'>-      if type == REG_EXPAND_SZ</div><div class='del'>-        Registry.expand_environ(data)</div><div class='del'>-      else</div><div class='del'>-        data</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def read_i(name)</div><div class='del'>-      read(name, REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_QWORD)[1]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def read_bin(name)</div><div class='del'>-      read(name, REG_BINARY)[1]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # writer</div><div class='del'>-    #</div><div class='del'>-    def write(name, type, data)</div><div class='del'>-      case type</div><div class='del'>-      when REG_SZ, REG_EXPAND_SZ</div><div class='del'>-        data = data.to_s + "\0"</div><div class='del'>-      when REG_MULTI_SZ</div><div class='del'>-        data = data.to_a.join("\0") + "\0\0"</div><div class='del'>-      when REG_BINARY</div><div class='del'>-        data = data.to_s</div><div class='del'>-      when REG_DWORD</div><div class='del'>-        data = API.packdw(data.to_i)</div><div class='del'>-      when REG_DWORD_BIG_ENDIAN</div><div class='del'>-        data = [data.to_i].pack('N')</div><div class='del'>-      when REG_QWORD</div><div class='del'>-        data = API.packqw(data.to_i)</div><div class='del'>-      else</div><div class='del'>-        raise TypeError, "Unsupported type #{type}"</div><div class='del'>-      end</div><div class='del'>-      API.SetValue(@hkey, name, type, data, data.length)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def []=(name, rtype, value = nil)</div><div class='del'>-      if value</div><div class='del'>-        write name, rtype, value</div><div class='del'>-      else</div><div class='del'>-        case value = rtype</div><div class='del'>-        when Integer</div><div class='del'>-          write name, REG_DWORD, value</div><div class='del'>-        when String</div><div class='del'>-          write name, REG_SZ, value</div><div class='del'>-        when Array</div><div class='del'>-          write name, REG_MULTI_SZ, value</div><div class='del'>-        else</div><div class='del'>-          raise TypeError, "Unexpected type #{value.class}"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      value</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def write_s(name, value)</div><div class='del'>-      write name, REG_SZ, value.to_s</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def write_i(name, value)</div><div class='del'>-      write name, REG_DWORD, value.to_i</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def write_bin(name, value)</div><div class='del'>-      write name, REG_BINARY, value.to_s</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # delete</div><div class='del'>-    #</div><div class='del'>-    def delete_value(name)</div><div class='del'>-      API.DeleteValue(@hkey, name)</div><div class='del'>-    end</div><div class='del'>-    alias delete delete_value</div><div class='del'>-    </div><div class='del'>-    def delete_key(name, recursive = false)</div><div class='del'>-      if recursive</div><div class='del'>-        open(name, KEY_ALL_ACCESS) do |reg|</div><div class='del'>-          reg.keys.each do |key|</div><div class='del'>-            begin</div><div class='del'>-              reg.delete_key(key, true)</div><div class='del'>-            rescue Error</div><div class='del'>-              #</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        API.DeleteKey(@hkey, name)</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          API.EnumKey @hkey, 0</div><div class='del'>-        rescue Error</div><div class='del'>-          return API.DeleteKey(@hkey, name)</div><div class='del'>-        end</div><div class='del'>-        raise Error.new(5) ## ERROR_ACCESS_DENIED</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # flush</div><div class='del'>-    #</div><div class='del'>-    def flush</div><div class='del'>-      API.FlushKey @hkey</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # key information</div><div class='del'>-    #</div><div class='del'>-    def info</div><div class='del'>-      API.QueryInfoKey(@hkey)</div><div class='del'>-    end</div><div class='del'>-    %w[</div><div class='del'>-      num_keys max_key_length</div><div class='del'>-      num_values max_value_name_length max_value_length</div><div class='del'>-      descriptor_length wtime</div><div class='del'>-    ].each_with_index do |s, i|</div><div class='del'>-      eval &lt;&lt;-__END__</div><div class='del'>-        def #{s}</div><div class='del'>-          info[#{i}]</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/Win32API/lib/win32/resolv.rb b/ext/Win32API/lib/win32/resolv.rb<br/>deleted file mode 100644<br/>index 92336fac28..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/lib/win32/resolv.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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.expand_path('hosts', path)</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/Win32API/point.rb b/ext/Win32API/point.rb<br/>deleted file mode 100644<br/>index 60e265f3ee..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/Win32API/point.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/Win32API/point.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-require 'Win32API'</div><div class='del'>-</div><div class='del'>-getCursorPos = Win32API.new("user32", "GetCursorPos", ['P'], 'V')</div><div class='del'>-</div><div class='del'>-lpPoint = " " * 8 # store two LONGs</div><div class='del'>-getCursorPos.Call(lpPoint)</div><div class='del'>-x, y = lpPoint.unpack("LL") # get the actual values</div><div class='del'>-</div><div class='del'>-print "x: ", x, "\n"</div><div class='del'>-print "y: ", y, "\n"</div><div class='del'>-</div><div class='del'>-ods = Win32API.new("kernel32", "OutputDebugString", ['P'], 'V')</div><div class='del'>-ods.Call("Hello, World\n");</div><div class='del'>-</div><div class='del'>-GetDesktopWindow = Win32API.new("user32", "GetDesktopWindow", [], 'L')</div><div class='del'>-GetActiveWindow = Win32API.new("user32", "GetActiveWindow", [], 'L')</div><div class='del'>-SendMessage = Win32API.new("user32", "SendMessage", ['L'] * 4, 'L')</div><div class='del'>-SendMessage.Call GetDesktopWindow.Call, 274, 0xf140, 0</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 636c0907d6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/bigdecimal/bigdecimal.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4700 +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_PTR(v)) + VpBaseFig() + 1,</div><div class='del'>-                                RSTRING_PTR(v));</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_PTR(bg)) + VpBaseFig() + 1,</div><div class='del'>-                                RSTRING_PTR(bg));</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_PTR(rb_inspect(v)):</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 = (unsigned char *)RSTRING_PTR(str);</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,(char *)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, const 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;</div><div class='del'>-    S_LONG e;</div><div class='del'>-    char *buf;</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'>-    buf = ALLOCA_N(char,(unsigned int)VpNumOfChars(p,"E"));</div><div class='del'>-    VpToString(p, buf, 0, 0);</div><div class='del'>-    errno = 0;</div><div class='del'>-    d = strtod(buf, 0);</div><div class='del'>-    if(errno == ERANGE) {</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);</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'>-/* 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=0;</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 = 0;</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_PTR(f);</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++)!=0) {</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_PTR(iniValue)));</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_PTR(iniValue),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'>-     * 0xff: 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'>-     * 0x02: 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'>-     * 0x01: Determines what happens when the result of a computation is</div><div class='del'>-     * infinity.  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'>-     * 0x04: Determines what happens when the result of a computation is an</div><div class='del'>-     * underflow (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'>-     * 0x01: Determines what happens when the result of a computation is an</div><div class='del'>-     * underflow (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'>-     * 0x01: 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'>-     * 0x100: 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'>-    /* 1: Indicates that values should be rounded away from zero. See</div><div class='del'>-     * BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_UP",INT2FIX(VP_ROUND_UP));</div><div class='del'>-</div><div class='del'>-    /* 2: Indicates that values should be rounded towards zero. See</div><div class='del'>-     * BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_DOWN",INT2FIX(VP_ROUND_DOWN));</div><div class='del'>-</div><div class='del'>-    /* 3: Indicates that digits &gt;= 5 should be rounded up, others rounded down.</div><div class='del'>-     * See BigDecimal.mode. */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_HALF_UP",INT2FIX(VP_ROUND_HALF_UP));</div><div class='del'>-</div><div class='del'>-    /* 4: Indicates that digits &gt;= 6 should be rounded up, others rounded down.</div><div class='del'>-     * See BigDecimal.mode.</div><div class='del'>-     */</div><div class='del'>-    rb_define_const(rb_cBigDecimal, "ROUND_HALF_DOWN",INT2FIX(VP_ROUND_HALF_DOWN));</div><div class='del'>-    /* 5: 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'>-</div><div class='del'>-    /* 6: 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'>-</div><div class='del'>-    /* 7: 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'>-    /* 0: 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'>-</div><div class='del'>-    /* 1: 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'>-</div><div class='del'>-    /* -1: 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'>-</div><div class='del'>-    /* 2: 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'>-</div><div class='del'>-    /* -2: 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'>-</div><div class='del'>-    /* 3: 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'>-</div><div class='del'>-    /* -3: 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, "&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'>-#ifndef BASE_FIG</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 U_LONG BASE1 = 1000L;    /* =BASE/10  */</div><div class='del'>-#else</div><div class='del'>-#ifndef BASE</div><div class='del'>-#error BASE_FIG is defined but BASE is not</div><div class='del'>-#endif</div><div class='del'>-#define HALF_BASE (BASE/2)</div><div class='del'>-#define BASE1 (BASE/10)</div><div class='del'>-#endif</div><div class='del'>-#ifndef DBLE_FIG</div><div class='del'>-#define DBLE_FIG (DBL_DIG+1)    /* figure of double */</div><div class='del'>-#endif</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'>-#define maxnr 100UL    /* 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 const double gZero_ABCED9B1_CE73__00400511F31D = 0.0;</div><div class='del'>-volatile const 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, const 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("%s", str);</div><div class='del'>-    else   rb_raise(exc, "%s", 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,const 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'>-    /* 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'>-#ifndef BASE_FIG</div><div class='del'>-    if(BaseVal &lt;= 0) {</div><div class='del'>-        U_LONG w;</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'>-#endif</div><div class='del'>-</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'>-#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(void)</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, const 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])!=0) {</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]) != 0) {</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]) != 0) {    /* 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])!=0) {</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, const char *int_chr, U_LONG ni, const char *frac, U_LONG nf, const 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 /= 10) != 0) 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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 4f77feab00..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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,const 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,const 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,const 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, const 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,const char *int_chr,U_LONG ni,const char *frac,U_LONG nf,const 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(void);</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 c2b86faef6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal_en.html?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/bigdecimal/bigdecimal_en.html</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,796 +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 a 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'>-Because most computers have no internal decimal representaion.</div><div class='del'>-Once you use BigDecimal,you need to keep using it without</div><div class='del'>-considering computation cost if exact computation is required.</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 37bbcbbb09..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/bigdecimal_ja.html?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/bigdecimal/bigdecimal_ja.html</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,799 +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‚ð2i‚É•ÏŠ·‚·‚é‚æ‚¤‚È‘€ì‚Í•ÏŠ·Œë·</div><div class='del'>-‚ð”º‚¤ê‡‚ð‰ñ”ð‚·‚é‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB</div><div class='del'>-‘åŠT‚ÌƒRƒ“ƒsƒ…[ƒ^‚Í10i‚Ì“à•”•\Œ»‚ðŽ‚Á‚Ä‚¢‚È‚¢‚Ì‚ÅA</div><div class='del'>-BigDecimal ‚ð—˜—p‚µ‚ÄŒë·–³‚µ‚ÌŒvŽZ‚ð‚·‚éê‡‚ÍAŒvŽZ‘¬“x</div><div class='del'>-‚ð–³Ž‹‚µ‚Ä‚àÅŒã‚Ü‚Å BigDecimal ‚ðŽg—p‘±‚¯‚é•K—v‚ª‚ ‚è‚Ü‚·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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 0c8b98e4a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/bigdecimal/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/bigdecimal/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-base_fig = 0</div><div class='del'>-src = "(BASE * (BASE+1)) / BASE == (BASE+1)"</div><div class='del'>-while try_static_assert(src, nil, "-DBASE=10#{'0'*base_fig}UL")</div><div class='del'>-  base_fig += 1</div><div class='del'>-end</div><div class='del'>-$defs &lt;&lt; "-DBASE=1#{'0'*base_fig}UL" &lt;&lt; "-DBASE_FIG=#{base_fig}"</div><div class='del'>-</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/curses/.cvsignore b/ext/curses/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/.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/curses/curses.c b/ext/curses/curses.c<br/>deleted file mode 100644<br/>index 9c51a2127f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/curses.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/curses.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2101 +0,0 @@</div><div class='del'>-/* -*- C -*-</div><div class='del'>- * $Id$</div><div class='del'>- *</div><div class='del'>- * ext/curses/curses.c</div><div class='del'>- * </div><div class='del'>- * by MAEDA Shugo (ender@pic-internet.or.jp)</div><div class='del'>- * modified by Yukihiro Matsumoto (matz@netlab.co.jp),</div><div class='del'>- *         Toki Yoshinori,</div><div class='del'>- *         Hitoshi Takahashi,</div><div class='del'>- *         and Takaaki Tateishi (ttate@kt.jaist.ac.jp)</div><div class='del'>- *</div><div class='del'>- * maintainers:</div><div class='del'>- * - Takaaki Tateishi (ttate@kt.jaist.ac.jp)</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'>-#if defined(HAVE_NCURSES_H)</div><div class='del'>-# include &lt;ncurses.h&gt;</div><div class='del'>-#elif defined(HAVE_NCURSES_CURSES_H)</div><div class='del'>-# include &lt;ncurses/curses.h&gt;</div><div class='del'>-#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='del'>-# include &lt;curses_colr/curses.h&gt;</div><div class='del'>-#else</div><div class='del'>-# 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='del'>-#  define _maxx maxx</div><div class='del'>-#  endif</div><div class='del'>-#  if !defined(_maxy)</div><div class='del'>-#  define _maxy maxy</div><div class='del'>-#  endif</div><div class='del'>-#  if !defined(_begx)</div><div class='del'>-#  define _begx begx</div><div class='del'>-#  endif</div><div class='del'>-#  if !defined(_begy)</div><div class='del'>-#  define _begy begy</div><div class='del'>-#  endif</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_INIT_COLOR</div><div class='del'>-# define USE_COLOR 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* supports only ncurses mouse routines */</div><div class='del'>-#ifdef NCURSES_MOUSE_VERSION</div><div class='del'>-# define USE_MOUSE 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define NUM2CH NUM2LONG</div><div class='del'>-#define CH2FIX LONG2FIX</div><div class='del'>-</div><div class='del'>-static VALUE mCurses;</div><div class='del'>-static VALUE mKey;</div><div class='del'>-static VALUE cWindow;</div><div class='del'>-#ifdef USE_MOUSE</div><div class='del'>-static VALUE cMouseEvent;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE rb_stdscr;</div><div class='del'>-</div><div class='del'>-struct windata {</div><div class='del'>-    WINDOW *window;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define CHECK(c) c</div><div class='del'>-</div><div class='del'>-static VALUE window_attroff();</div><div class='del'>-static VALUE window_attron();</div><div class='del'>-static VALUE window_attrset();</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-no_window()</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eRuntimeError, "already closed window");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#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='del'>-    Data_Get_Struct(obj, struct windata, winp);\</div><div class='del'>-    if (winp-&gt;window == 0) no_window();\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-free_window(winp)</div><div class='del'>-    struct windata *winp;</div><div class='del'>-{</div><div class='del'>-    if (winp-&gt;window &amp;&amp; winp-&gt;window != stdscr) delwin(winp-&gt;window);</div><div class='del'>-    winp-&gt;window = 0;</div><div class='del'>-    free(winp);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-prep_window(class, window)</div><div class='del'>-    VALUE class;</div><div class='del'>-    WINDOW *window;</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-    struct windata *winp;</div><div class='del'>-</div><div class='del'>-    if (window == NULL) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "failed to create window");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    obj = rb_obj_alloc(class);</div><div class='del'>-    Data_Get_Struct(obj, struct windata, winp);</div><div class='del'>-    winp-&gt;window = window;</div><div class='del'>-    </div><div class='del'>-    return obj;    </div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*-------------------------- module Curses --------------------------*/</div><div class='del'>-</div><div class='del'>-/* def init_screen */</div><div class='del'>-static VALUE</div><div class='del'>-curses_init_screen()</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rb_stdscr) return rb_stdscr;</div><div class='del'>-    initscr();</div><div class='del'>-    if (stdscr == 0) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "can't initialize curses");</div><div class='del'>-    }</div><div class='del'>-    clear();</div><div class='del'>-    rb_stdscr = prep_window(cWindow, stdscr);</div><div class='del'>-    return rb_stdscr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def stdscr */</div><div class='del'>-#define curses_stdscr curses_init_screen</div><div class='del'>-</div><div class='del'>-/* def close_screen */</div><div class='del'>-static VALUE</div><div class='del'>-curses_close_screen()</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_ISENDWIN</div><div class='del'>-    if (!isendwin())</div><div class='del'>-#endif</div><div class='del'>-	endwin();</div><div class='del'>-    rb_stdscr = 0;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-curses_finalize(VALUE dummy)</div><div class='del'>-{</div><div class='del'>-    if (stdscr</div><div class='del'>-#ifdef HAVE_ISENDWIN</div><div class='del'>-	&amp;&amp; !isendwin()</div><div class='del'>-#endif</div><div class='del'>-	)</div><div class='del'>-	endwin();</div><div class='del'>-    rb_stdscr = 0;</div><div class='del'>-    rb_gc_unregister_address(&amp;rb_stdscr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def closed? */</div><div class='del'>-static VALUE</div><div class='del'>-curses_closed()</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_ISENDWIN</div><div class='del'>-    if (isendwin()) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    return 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'>-/* def clear */</div><div class='del'>-static VALUE</div><div class='del'>-curses_clear(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    wclear(stdscr);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</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='del'>-/* def refresh */</div><div class='del'>-static VALUE</div><div class='del'>-curses_refresh(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    refresh();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def doupdate */</div><div class='del'>-static VALUE</div><div class='del'>-curses_doupdate(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-#ifdef HAVE_DOUPDATE</div><div class='del'>-    doupdate();</div><div class='del'>-#else</div><div class='del'>-    refresh();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def echo */</div><div class='del'>-static VALUE</div><div class='del'>-curses_echo(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    echo();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def noecho */</div><div class='del'>-static VALUE</div><div class='del'>-curses_noecho(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    noecho();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def raw */</div><div class='del'>-static VALUE</div><div class='del'>-curses_raw(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    raw();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def noraw */</div><div class='del'>-static VALUE</div><div class='del'>-curses_noraw(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    noraw();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def cbreak */</div><div class='del'>-static VALUE</div><div class='del'>-curses_cbreak(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    cbreak();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def nocbreak */</div><div class='del'>-static VALUE</div><div class='del'>-curses_nocbreak(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    nocbreak();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def nl */</div><div class='del'>-static VALUE</div><div class='del'>-curses_nl(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    nl();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def nonl */</div><div class='del'>-static VALUE</div><div class='del'>-curses_nonl(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    nonl();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def beep */</div><div class='del'>-static VALUE</div><div class='del'>-curses_beep(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_BEEP</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    beep();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def flash */</div><div class='del'>-static VALUE</div><div class='del'>-curses_flash(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_FLASH</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    flash();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def ungetch */</div><div class='del'>-static VALUE</div><div class='del'>-curses_ungetch(obj, ch)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE ch;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_UNGETCH</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    ungetch(NUM2INT(ch));</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def setpos(y, x) */</div><div class='del'>-static VALUE</div><div class='del'>-curses_setpos(obj, y, x)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE y;</div><div class='del'>-    VALUE x;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    move(NUM2INT(y), NUM2INT(x));</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def standout */</div><div class='del'>-static VALUE</div><div class='del'>-curses_standout(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    standout();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def standend */</div><div class='del'>-static VALUE</div><div class='del'>-curses_standend(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    standend();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def inch */</div><div class='del'>-static VALUE</div><div class='del'>-curses_inch(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    return CH2FIX(inch());</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def addch(ch) */</div><div class='del'>-static VALUE</div><div class='del'>-curses_addch(obj, ch)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE ch;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    addch(NUM2CH(ch));</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def insch(ch) */</div><div class='del'>-static VALUE</div><div class='del'>-curses_insch(obj, ch)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE ch;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    insch(NUM2CH(ch));</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def addstr(str) */</div><div class='del'>-static VALUE</div><div class='del'>-curses_addstr(obj, str)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    if (!NIL_P(str)) {</div><div class='del'>-	addstr(STR2CSTR(str));</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def getch */</div><div class='del'>-static VALUE</div><div class='del'>-curses_getch(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    rb_read_check(stdin);</div><div class='del'>-    curses_stdscr();</div><div class='del'>-    return UINT2NUM(getch());</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def getstr */</div><div class='del'>-static VALUE</div><div class='del'>-curses_getstr(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    char rtn[1024]; /* This should be big enough.. I hope */</div><div class='del'>-</div><div class='del'>-    rb_read_check(stdin);</div><div class='del'>-#if defined(HAVE_GETNSTR)</div><div class='del'>-    getnstr(rtn,1023);</div><div class='del'>-#else</div><div class='del'>-    getstr(rtn);</div><div class='del'>-#endif</div><div class='del'>-    return rb_tainted_str_new2(rtn);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def delch */</div><div class='del'>-static VALUE</div><div class='del'>-curses_delch(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    delch();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def delelteln */</div><div class='del'>-static VALUE</div><div class='del'>-curses_deleteln(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_DELETELN) || defined(deleteln)</div><div class='del'>-    deleteln();</div><div class='del'>-#endif</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</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='del'>-/* def keyname */</div><div class='del'>-static VALUE</div><div class='del'>-curses_keyname(obj, c)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE c;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_KEYNAME</div><div class='del'>-  const char *name;</div><div class='del'>-</div><div class='del'>-  name = keyname(NUM2INT(c));</div><div class='del'>-  if (name) {</div><div class='del'>-    return rb_str_new2(name);</div><div class='del'>-  } else {</div><div class='del'>-    return Qnil;</div><div class='del'>-  }</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'>-curses_lines()</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(LINES);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_cols()</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(COLS);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_curs_set(VALUE obj, VALUE visibility)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_CURS_SET</div><div class='del'>-  int n;</div><div class='del'>-  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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_scrl(VALUE obj, VALUE n)</div><div class='del'>-{</div><div class='del'>-  /* may have to raise exception on ERR */</div><div class='del'>-#ifdef HAVE_SCRL</div><div class='del'>-  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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_setscrreg(VALUE obj, VALUE top, VALUE bottom)</div><div class='del'>-{</div><div class='del'>-  /* may have to raise exception on ERR */</div><div class='del'>-#ifdef HAVE_SETSCRREG</div><div class='del'>-  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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_attroff(VALUE obj, VALUE attrs)</div><div class='del'>-{</div><div class='del'>-  return window_attroff(rb_stdscr,attrs);  </div><div class='del'>-  /* return INT2FIX(attroff(NUM2INT(attrs))); */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_attron(VALUE obj, VALUE attrs)</div><div class='del'>-{</div><div class='del'>-  return window_attron(rb_stdscr,attrs);</div><div class='del'>-  /* return INT2FIX(attroff(NUM2INT(attrs))); */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_attrset(VALUE obj, VALUE attrs)</div><div class='del'>-{</div><div class='del'>-  return window_attrset(rb_stdscr,attrs);</div><div class='del'>-  /* return INT2FIX(attroff(NUM2INT(attrs))); */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_bkgdset(VALUE obj, VALUE ch)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_BKGDSET</div><div class='del'>-  bkgdset(NUM2CH(ch));</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'>-curses_bkgd(VALUE obj, VALUE ch)</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_resizeterm(VALUE obj, VALUE lin, VALUE col)</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_RESIZETERM)</div><div class='del'>-  return (resizeterm(NUM2INT(lin),NUM2INT(col)) == OK) ? Qtrue : Qfalse;</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'>-#ifdef USE_COLOR</div><div class='del'>-static VALUE</div><div class='del'>-curses_start_color(VALUE obj)</div><div class='del'>-{</div><div class='del'>-  /* may have to raise exception on ERR */</div><div class='del'>-  return (start_color() == OK) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_init_pair(VALUE obj, VALUE pair, VALUE f, VALUE b)</div><div class='del'>-{</div><div class='del'>-  /* may have to raise exception on ERR */</div><div class='del'>-  return (init_pair(NUM2INT(pair),NUM2INT(f),NUM2INT(b)) == OK) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_init_color(VALUE obj, VALUE color, VALUE r, VALUE g, VALUE b)</div><div class='del'>-{</div><div class='del'>-  /* may have to raise exception on ERR */</div><div class='del'>-  return (init_color(NUM2INT(color),NUM2INT(r),</div><div class='del'>-		     NUM2INT(g),NUM2INT(b)) == OK) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_has_colors(VALUE obj)</div><div class='del'>-{</div><div class='del'>-  return has_colors() ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_can_change_color(VALUE obj)</div><div class='del'>-{</div><div class='del'>-  return can_change_color() ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_color_content(VALUE obj, VALUE color)</div><div class='del'>-{</div><div class='del'>-  short r,g,b;</div><div class='del'>-</div><div class='del'>-  color_content(NUM2INT(color),&amp;r,&amp;g,&amp;b);</div><div class='del'>-  return rb_ary_new3(3,INT2FIX(r),INT2FIX(g),INT2FIX(b));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_pair_content(VALUE obj, VALUE pair)</div><div class='del'>-{</div><div class='del'>-  short f,b;</div><div class='del'>-</div><div class='del'>-  pair_content(NUM2INT(pair),&amp;f,&amp;b);</div><div class='del'>-  return rb_ary_new3(2,INT2FIX(f),INT2FIX(b));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_color_pair(VALUE obj, VALUE attrs)</div><div class='del'>-{</div><div class='del'>-  return INT2FIX(COLOR_PAIR(NUM2INT(attrs)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_pair_number(VALUE obj, VALUE attrs)</div><div class='del'>-{</div><div class='del'>-  return INT2FIX(PAIR_NUMBER(NUM2INT(attrs)));</div><div class='del'>-}</div><div class='del'>-#endif /* USE_COLOR */</div><div class='del'>-</div><div class='del'>-#ifdef USE_MOUSE</div><div class='del'>-struct mousedata {</div><div class='del'>-  MEVENT *mevent;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-no_mevent()</div><div class='del'>-{</div><div class='del'>-  rb_raise(rb_eRuntimeError, "no such mouse event");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#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='del'>-    Data_Get_Struct(obj, struct mousedata, data);\</div><div class='del'>-    if (data-&gt;mevent == 0) no_mevent();\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-curses_mousedata_free(struct mousedata *mdata)</div><div class='del'>-{</div><div class='del'>-  if (mdata-&gt;mevent)</div><div class='del'>-    free(mdata-&gt;mevent);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_getmouse(VALUE obj)</div><div class='del'>-{</div><div class='del'>-  struct mousedata *mdata;</div><div class='del'>-  VALUE val;</div><div class='del'>-</div><div class='del'>-  val = Data_Make_Struct(cMouseEvent,struct mousedata,</div><div class='del'>-			 0,curses_mousedata_free,mdata);</div><div class='del'>-  mdata-&gt;mevent = (MEVENT*)xmalloc(sizeof(MEVENT));</div><div class='del'>-  return (getmouse(mdata-&gt;mevent) == OK) ? val : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_ungetmouse(VALUE obj, VALUE mevent)</div><div class='del'>-{</div><div class='del'>-  struct mousedata *mdata;</div><div class='del'>-</div><div class='del'>-  GetMOUSE(mevent,mdata);</div><div class='del'>-  return (ungetmouse(mdata-&gt;mevent) == OK) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_mouseinterval(VALUE obj, VALUE interval)</div><div class='del'>-{</div><div class='del'>-  return mouseinterval(NUM2INT(interval)) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-curses_mousemask(VALUE obj, VALUE mask)</div><div class='del'>-{</div><div class='del'>-  return INT2NUM(mousemask(NUM2UINT(mask),NULL));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define DEFINE_MOUSE_GET_MEMBER(func_name,mem) \</div><div class='del'>-static VALUE func_name (VALUE mouse) \</div><div class='del'>-{ \</div><div class='del'>-  struct mousedata *mdata; \</div><div class='del'>-  GetMOUSE(mouse, mdata); \</div><div class='del'>-  return (UINT2NUM(mdata-&gt;mevent -&gt; mem)); \</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-DEFINE_MOUSE_GET_MEMBER(curs_mouse_id, id)</div><div class='del'>-DEFINE_MOUSE_GET_MEMBER(curs_mouse_x, x)</div><div class='del'>-DEFINE_MOUSE_GET_MEMBER(curs_mouse_y, y)</div><div class='del'>-DEFINE_MOUSE_GET_MEMBER(curs_mouse_z, z)</div><div class='del'>-DEFINE_MOUSE_GET_MEMBER(curs_mouse_bstate, bstate)</div><div class='del'>-#undef define_curs_mouse_member</div><div class='del'>-#endif /* USE_MOUSE */</div><div class='del'>-</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='del'>-/*-------------------------- class Window --------------------------*/</div><div class='del'>-</div><div class='del'>-/* def self.allocate */</div><div class='del'>-static VALUE</div><div class='del'>-window_s_allocate(VALUE class)</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-</div><div class='del'>-    return Data_Make_Struct(class, struct windata, 0, free_window, winp);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def initialize(h, w, top, left) */</div><div class='del'>-static VALUE</div><div class='del'>-window_initialize(obj, h, w, top, left)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE h;</div><div class='del'>-    VALUE w;</div><div class='del'>-    VALUE top;</div><div class='del'>-    VALUE left;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    WINDOW *window;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    curses_init_screen();</div><div class='del'>-    Data_Get_Struct(obj, struct windata, winp);</div><div class='del'>-    if (winp-&gt;window) delwin(winp-&gt;window);</div><div class='del'>-    window = newwin(NUM2INT(h), NUM2INT(w), NUM2INT(top), NUM2INT(left));</div><div class='del'>-    wclear(window);</div><div class='del'>-    winp-&gt;window = window;</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def subwin(height, width, top, left) */</div><div class='del'>-static VALUE</div><div class='del'>-window_subwin(obj, height, width, top, left)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE height;</div><div class='del'>-    VALUE width;</div><div class='del'>-    VALUE top;</div><div class='del'>-    VALUE left;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    WINDOW *window;</div><div class='del'>-    VALUE win;</div><div class='del'>-    int h, w, t, l;</div><div class='del'>-</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='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-    window = subwin(winp-&gt;window, h, w, t, l);</div><div class='del'>-    win = prep_window(rb_obj_class(obj), window);</div><div class='del'>-</div><div class='del'>-    return win;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def close */</div><div class='del'>-static VALUE</div><div class='del'>-window_close(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'>-    delwin(winp-&gt;window);</div><div class='del'>-    winp-&gt;window = 0;</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def clear */</div><div class='del'>-static VALUE</div><div class='del'>-window_clear(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'>-    wclear(winp-&gt;window);</div><div class='del'>-    </div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</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='del'>-/* def refresh */</div><div class='del'>-static VALUE</div><div class='del'>-window_refresh(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'>-    wrefresh(winp-&gt;window);</div><div class='del'>-    </div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def noutrefresh */</div><div class='del'>-static VALUE</div><div class='del'>-window_noutrefresh(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'>-#ifdef HAVE_DOUPDATE</div><div class='del'>-    wnoutrefresh(winp-&gt;window);</div><div class='del'>-#else</div><div class='del'>-    wrefresh(winp-&gt;window);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def move(y, x) */</div><div class='del'>-static VALUE</div><div class='del'>-window_move(obj, y, x)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE y;</div><div class='del'>-    VALUE x;</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'>-    mvwin(winp-&gt;window, NUM2INT(y), NUM2INT(x));</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def setpos(y, x) */</div><div class='del'>-static VALUE</div><div class='del'>-window_setpos(obj, y, x)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE y;</div><div class='del'>-    VALUE x;</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'>-    wmove(winp-&gt;window, NUM2INT(y), NUM2INT(x));</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def cury */</div><div class='del'>-static VALUE</div><div class='del'>-window_cury(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    int x, y;</div><div class='del'>-</div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-    getyx(winp-&gt;window, y, x);</div><div class='del'>-    return INT2FIX(y);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def curx */</div><div class='del'>-static VALUE</div><div class='del'>-window_curx(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    int x, y;</div><div class='del'>-</div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-    getyx(winp-&gt;window, y, x);</div><div class='del'>-    return INT2FIX(x);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def maxy */</div><div class='del'>-static VALUE</div><div class='del'>-window_maxy(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'>-#if defined(getmaxy)</div><div class='del'>-    return INT2FIX(getmaxy(winp-&gt;window));</div><div class='del'>-#elif defined(getmaxyx)</div><div class='del'>-    {</div><div class='del'>-	int x, y;</div><div class='del'>-	getmaxyx(winp-&gt;window, y, x);</div><div class='del'>-	return INT2FIX(y);</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    return INT2FIX(winp-&gt;window-&gt;_maxy+1);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def maxx */</div><div class='del'>-static VALUE</div><div class='del'>-window_maxx(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'>-#if defined(getmaxx)</div><div class='del'>-    return INT2FIX(getmaxx(winp-&gt;window));</div><div class='del'>-#elif defined(getmaxyx)</div><div class='del'>-    {</div><div class='del'>-	int x, y;</div><div class='del'>-	getmaxyx(winp-&gt;window, y, x);</div><div class='del'>-	return INT2FIX(x);</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    return INT2FIX(winp-&gt;window-&gt;_maxx+1);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def begy */</div><div class='del'>-static VALUE</div><div class='del'>-window_begy(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    int x, y;</div><div class='del'>-</div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-#ifdef getbegyx</div><div class='del'>-    getbegyx(winp-&gt;window, y, x);</div><div class='del'>-    return INT2FIX(y);</div><div class='del'>-#else</div><div class='del'>-    return INT2FIX(winp-&gt;window-&gt;_begy);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def begx */</div><div class='del'>-static VALUE</div><div class='del'>-window_begx(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    int x, y;</div><div class='del'>-</div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-#ifdef getbegyx</div><div class='del'>-    getbegyx(winp-&gt;window, y, x);</div><div class='del'>-    return INT2FIX(x);</div><div class='del'>-#else</div><div class='del'>-    return INT2FIX(winp-&gt;window-&gt;_begx);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def box(vert, hor) */</div><div class='del'>-static VALUE</div><div class='del'>-window_box(argc, argv, self)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE argv[], self;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp; </div><div class='del'>-    VALUE vert, hor, corn;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "21", &amp;vert, &amp;hor, &amp;corn);</div><div class='del'>-</div><div class='del'>-    GetWINDOW(self, winp);</div><div class='del'>-    box(winp-&gt;window, NUM2CH(vert), NUM2CH(hor));</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(corn)) {</div><div class='del'>-      int cur_x, cur_y, x, y;</div><div class='del'>-      chtype c;</div><div class='del'>-</div><div class='del'>-      c = NUM2CH(corn);</div><div class='del'>-      getyx(winp-&gt;window, cur_y, cur_x);</div><div class='del'>-      x = NUM2INT(window_maxx(self)) - 1;</div><div class='del'>-      y = NUM2INT(window_maxy(self)) - 1;</div><div class='del'>-      wmove(winp-&gt;window, 0, 0);</div><div class='del'>-      waddch(winp-&gt;window, c);</div><div class='del'>-      wmove(winp-&gt;window, y, 0);</div><div class='del'>-      waddch(winp-&gt;window, c);</div><div class='del'>-      wmove(winp-&gt;window, y, x);</div><div class='del'>-      waddch(winp-&gt;window, c);</div><div class='del'>-      wmove(winp-&gt;window, 0, x);</div><div class='del'>-      waddch(winp-&gt;window, c);</div><div class='del'>-      wmove(winp-&gt;window, cur_y, cur_x);</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'>-/* def standout */</div><div class='del'>-static VALUE</div><div class='del'>-window_standout(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'>-    wstandout(winp-&gt;window);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def standend */</div><div class='del'>-static VALUE</div><div class='del'>-window_standend(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'>-    wstandend(winp-&gt;window);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def inch */</div><div class='del'>-static VALUE</div><div class='del'>-window_inch(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'>-    return CH2FIX(winch(winp-&gt;window));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def addch(ch) */</div><div class='del'>-static VALUE</div><div class='del'>-window_addch(obj, ch)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE ch;</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'>-    waddch(winp-&gt;window, NUM2CH(ch));</div><div class='del'>-    </div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def insch(ch) */</div><div class='del'>-static VALUE</div><div class='del'>-window_insch(obj, ch)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE ch;</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'>-    winsch(winp-&gt;window, NUM2CH(ch));</div><div class='del'>-    </div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def addstr(str) */</div><div class='del'>-static VALUE</div><div class='del'>-window_addstr(obj, str)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    if (!NIL_P(str)) {</div><div class='del'>-	struct windata *winp;</div><div class='del'>-</div><div class='del'>-	GetWINDOW(obj, winp);</div><div class='del'>-	waddstr(winp-&gt;window, STR2CSTR(str));</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def &lt;&lt;(str) */</div><div class='del'>-static VALUE</div><div class='del'>-window_addstr2(obj, str)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    window_addstr(obj, str);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def getch */</div><div class='del'>-static VALUE</div><div class='del'>-window_getch(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'>-    rb_read_check(stdin);</div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-    return UINT2NUM(wgetch(winp-&gt;window));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def getstr */</div><div class='del'>-static VALUE</div><div class='del'>-window_getstr(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    char rtn[1024]; /* This should be big enough.. I hope */</div><div class='del'>-    </div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-    rb_read_check(stdin);</div><div class='del'>-#if defined(HAVE_WGETNSTR)</div><div class='del'>-    wgetnstr(winp-&gt;window, rtn, 1023);</div><div class='del'>-#else</div><div class='del'>-    wgetstr(winp-&gt;window, rtn);</div><div class='del'>-#endif</div><div class='del'>-    return rb_tainted_str_new2(rtn);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def delch */</div><div class='del'>-static VALUE</div><div class='del'>-window_delch(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'>-    wdelch(winp-&gt;window);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* def delelteln */</div><div class='del'>-static VALUE</div><div class='del'>-window_deleteln(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_WDELETELN) || defined(wdeleteln)</div><div class='del'>-    struct windata *winp;</div><div class='del'>-    </div><div class='del'>-    GetWINDOW(obj, winp);</div><div class='del'>-    wdeleteln(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='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='del'>-static VALUE</div><div class='del'>-window_scrollok(VALUE obj, VALUE bf)</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'>-  scrollok(winp-&gt;window, RTEST(bf) ? TRUE : FALSE);</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_idlok(VALUE obj, VALUE bf)</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'>-  idlok(winp-&gt;window, RTEST(bf) ? TRUE : FALSE);</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_setscrreg(VALUE obj, VALUE top, VALUE bottom)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WSETSCRREG</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 = wsetscrreg(winp-&gt;window, NUM2INT(top), NUM2INT(bottom));</div><div class='del'>-  /* may have to raise exception on ERR */</div><div class='del'>-  return (res == OK) ? Qtrue : Qfalse;</div><div class='del'>-#else</div><div class='del'>-  return Qfalse;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</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'>-}</div><div class='del'>-#endif /* USE_COLOR */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_scroll(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'>-  /* may have to raise exception on ERR */</div><div class='del'>-  return (scroll(winp-&gt;window) == OK) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_scrl(VALUE obj, VALUE n)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WSCRL</div><div class='del'>-  struct windata *winp;</div><div class='del'>-</div><div class='del'>-  GetWINDOW(obj, winp);</div><div class='del'>-  /* may have to raise exception on ERR */</div><div class='del'>-  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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_attroff(VALUE obj, VALUE attrs)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WATTROFF</div><div class='del'>-  struct windata *winp;</div><div class='del'>-</div><div class='del'>-  GetWINDOW(obj,winp);</div><div class='del'>-  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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_attron(VALUE obj, VALUE attrs)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WATTRON</div><div class='del'>-  struct windata *winp;</div><div class='del'>-  VALUE val;</div><div class='del'>-</div><div class='del'>-  GetWINDOW(obj,winp);</div><div class='del'>-  val = INT2FIX(wattron(winp-&gt;window,NUM2INT(attrs)));</div><div class='del'>-  if( rb_block_given_p() ){</div><div class='del'>-    rb_yield(val);</div><div class='del'>-    wattroff(winp-&gt;window,NUM2INT(attrs));</div><div class='del'>-    return val;</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    return val;</div><div class='del'>-  }</div><div class='del'>-#else</div><div class='del'>-  return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_attrset(VALUE obj, VALUE attrs)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WATTRSET</div><div class='del'>-  struct windata *winp;</div><div class='del'>-</div><div class='del'>-  GetWINDOW(obj,winp);</div><div class='del'>-  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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_bkgdset(VALUE obj, VALUE ch)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WBKGDSET</div><div class='del'>-  struct windata *winp;</div><div class='del'>-</div><div class='del'>-  GetWINDOW(obj,winp);</div><div class='del'>-  wbkgdset(winp-&gt;window, NUM2CH(ch));</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'>-window_bkgd(VALUE obj, VALUE ch)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WBKGD</div><div class='del'>-  struct windata *winp;</div><div class='del'>-</div><div class='del'>-  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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_getbkgd(VALUE obj)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_WGETBKGD</div><div class='del'>-  chtype c;</div><div class='del'>-  struct windata *winp;</div><div class='del'>-</div><div class='del'>-  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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_resize(VALUE obj, VALUE lin, VALUE col)</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_WRESIZE)</div><div class='del'>-  struct windata *winp;</div><div class='del'>-</div><div class='del'>-  GetWINDOW(obj,winp);</div><div class='del'>-  return wresize(winp-&gt;window, NUM2INT(lin), NUM2INT(col)) == OK ? Qtrue : Qfalse;</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'>-</div><div class='del'>-static VALUE</div><div class='del'>-window_keypad(VALUE obj, VALUE val)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_KEYPAD</div><div class='del'>-  struct windata *winp;</div><div class='del'>-</div><div class='del'>-  GetWINDOW(obj,winp);</div><div class='del'>-  /* keypad() of NetBSD's libcurses returns no value */</div><div class='del'>-#if defined(__NetBSD__) &amp;&amp; !defined(NCURSES_VERSION)</div><div class='del'>-  keypad(winp-&gt;window,(RTEST(val) ? TRUE : FALSE));</div><div class='del'>-  return Qnil;</div><div class='del'>-#else</div><div class='del'>-  /* may have to raise exception on ERR */</div><div class='del'>-  return (keypad(winp-&gt;window,RTEST(val) ? TRUE : FALSE)) == OK ?</div><div class='del'>-    Qtrue : Qfalse;</div><div class='del'>-#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='del'>-}</div><div class='del'>-</div><div class='del'>-/*------------------------- Initialization -------------------------*/</div><div class='del'>-void</div><div class='del'>-Init_curses()</div><div class='del'>-{</div><div class='del'>-    mCurses    = rb_define_module("Curses");</div><div class='del'>-    mKey       = rb_define_module_under(mCurses, "Key");</div><div class='del'>-</div><div class='del'>-    rb_gc_register_address(&amp;rb_stdscr);</div><div class='del'>-</div><div class='del'>-#ifdef USE_MOUSE</div><div class='del'>-    cMouseEvent = rb_define_class_under(mCurses,"MouseEvent",rb_cObject);</div><div class='del'>-    rb_undef_method(CLASS_OF(cMouseEvent),"new");</div><div class='del'>-    rb_define_method(cMouseEvent, "eid", curs_mouse_id, 0);</div><div class='del'>-    rb_define_method(cMouseEvent, "x", curs_mouse_x, 0);</div><div class='del'>-    rb_define_method(cMouseEvent, "y", curs_mouse_y, 0);</div><div class='del'>-    rb_define_method(cMouseEvent, "z", curs_mouse_z, 0);</div><div class='del'>-    rb_define_method(cMouseEvent, "bstate", curs_mouse_bstate, 0);</div><div class='del'>-#endif /* USE_MOUSE */</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mCurses, "init_screen", curses_init_screen, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "close_screen", curses_close_screen, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "closed?", curses_closed, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "stdscr", curses_stdscr, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "refresh", curses_refresh, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "doupdate", curses_doupdate, 0);</div><div class='del'>-    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='del'>-    rb_define_module_function(mCurses, "echo", curses_echo, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "noecho", curses_noecho, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "raw", curses_raw, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "noraw", curses_noraw, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "cbreak", curses_cbreak, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "nocbreak", curses_nocbreak, 0);</div><div class='del'>-    rb_define_alias(mCurses, "crmode", "cbreak");</div><div class='del'>-    rb_define_alias(mCurses, "nocrmode", "nocbreak");</div><div class='del'>-    rb_define_module_function(mCurses, "nl", curses_nl, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "nonl", curses_nonl, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "beep", curses_beep, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "flash", curses_flash, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "ungetch", curses_ungetch, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "setpos", curses_setpos, 2);</div><div class='del'>-    rb_define_module_function(mCurses, "standout", curses_standout, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "standend", curses_standend, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "inch", curses_inch, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "addch", curses_addch, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "insch", curses_insch, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "addstr", curses_addstr, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "getch", curses_getch, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "getstr", curses_getstr, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "delch", curses_delch, 0);</div><div class='del'>-    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='del'>-    rb_define_module_function(mCurses, "keyname", curses_keyname, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "lines", curses_lines, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "cols", curses_cols, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "curs_set", curses_curs_set, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "scrl", curses_scrl, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "setscrreg", curses_setscrreg, 2);</div><div class='del'>-    rb_define_module_function(mCurses, "attroff", curses_attroff, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "attron", curses_attron, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "attrset", curses_attrset, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "bkgdset", curses_bkgdset, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "bkgd", curses_bkgd, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "resizeterm", curses_resizeterm, 2);</div><div class='del'>-    rb_define_module_function(mCurses, "resize", curses_resizeterm, 2);</div><div class='del'>-#ifdef USE_COLOR</div><div class='del'>-    rb_define_module_function(mCurses, "start_color", curses_start_color, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "init_pair", curses_init_pair, 3);</div><div class='del'>-    rb_define_module_function(mCurses, "init_color", curses_init_color, 4);</div><div class='del'>-    rb_define_module_function(mCurses, "has_colors?", curses_has_colors, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "can_change_color?",</div><div class='del'>-			      curses_can_change_color, 0);</div><div class='del'>-    rb_define_module_function(mCurses, "color_content", curses_color_content, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "pair_content", curses_pair_content, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "color_pair", curses_color_pair, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "pair_number", curses_pair_number, 1);</div><div class='del'>-#endif /* USE_COLOR */</div><div class='del'>-#ifdef USE_MOUSE</div><div class='del'>-    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='del'>-    rb_define_module_function(mCurses, "mouseinterval", curses_mouseinterval, 1);</div><div class='del'>-    rb_define_module_function(mCurses, "mousemask", curses_mousemask, 1);</div><div class='del'>-#endif /* USE_MOUSE */</div><div class='del'>-</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='del'>-    cWindow = rb_define_class_under(mCurses, "Window", rb_cData);</div><div class='del'>-    rb_define_alloc_func(cWindow, window_s_allocate);</div><div class='del'>-    rb_define_method(cWindow, "initialize", window_initialize, 4);</div><div class='del'>-    rb_define_method(cWindow, "subwin", window_subwin, 4);</div><div class='del'>-    rb_define_method(cWindow, "close", window_close, 0);</div><div class='del'>-    rb_define_method(cWindow, "clear", window_clear, 0);</div><div class='del'>-    rb_define_method(cWindow, "clrtoeol", window_clrtoeol, 0);</div><div class='del'>-    rb_define_method(cWindow, "refresh", window_refresh, 0);</div><div class='del'>-    rb_define_method(cWindow, "noutrefresh", window_noutrefresh, 0);</div><div class='del'>-    rb_define_method(cWindow, "box", window_box, -1);</div><div class='del'>-    rb_define_method(cWindow, "move", window_move, 2);</div><div class='del'>-    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='del'>-    rb_define_method(cWindow, "cury", window_cury, 0);</div><div class='del'>-    rb_define_method(cWindow, "curx", window_curx, 0);</div><div class='del'>-    rb_define_method(cWindow, "maxy", window_maxy, 0);</div><div class='del'>-    rb_define_method(cWindow, "maxx", window_maxx, 0);</div><div class='del'>-    rb_define_method(cWindow, "begy", window_begy, 0);</div><div class='del'>-    rb_define_method(cWindow, "begx", window_begx, 0);</div><div class='del'>-    rb_define_method(cWindow, "standout", window_standout, 0);</div><div class='del'>-    rb_define_method(cWindow, "standend", window_standend, 0);</div><div class='del'>-    rb_define_method(cWindow, "inch", window_inch, 0);</div><div class='del'>-    rb_define_method(cWindow, "addch", window_addch, 1);</div><div class='del'>-    rb_define_method(cWindow, "insch", window_insch, 1);</div><div class='del'>-    rb_define_method(cWindow, "addstr", window_addstr, 1);</div><div class='del'>-    rb_define_method(cWindow, "&lt;&lt;", window_addstr2, 1);</div><div class='del'>-    rb_define_method(cWindow, "getch", window_getch, 0);</div><div class='del'>-    rb_define_method(cWindow, "getstr", window_getstr, 0);</div><div class='del'>-    rb_define_method(cWindow, "delch", window_delch, 0);</div><div class='del'>-    rb_define_method(cWindow, "deleteln", window_deleteln, 0);</div><div class='del'>-    rb_define_method(cWindow, "insertln", window_insertln, 0);</div><div class='del'>-    rb_define_method(cWindow, "scroll", window_scroll, 0);</div><div class='del'>-    rb_define_method(cWindow, "scrollok", window_scrollok, 1);</div><div class='del'>-    rb_define_method(cWindow, "idlok", window_idlok, 1);</div><div class='del'>-    rb_define_method(cWindow, "setscrreg", window_setscrreg, 2);</div><div class='del'>-    rb_define_method(cWindow, "scrl", window_scrl, 1);</div><div class='del'>-    rb_define_method(cWindow, "resize", window_resize, 2);</div><div class='del'>-    rb_define_method(cWindow, "keypad", window_keypad, 1);</div><div class='del'>-    rb_define_method(cWindow, "keypad=", window_keypad, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWindow, "attroff", window_attroff, 1);</div><div class='del'>-    rb_define_method(cWindow, "attron", window_attron, 1);</div><div class='del'>-    rb_define_method(cWindow, "attrset", window_attrset, 1);</div><div class='del'>-    rb_define_method(cWindow, "bkgdset", window_bkgdset, 1);</div><div class='del'>-    rb_define_method(cWindow, "bkgd", window_bkgd, 1);</div><div class='del'>-    rb_define_method(cWindow, "getbkgd", window_getbkgd, 0);</div><div class='del'>-</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='del'>-</div><div class='del'>-#define rb_curses_define_const(c) rb_define_const(mCurses,#c,UINT2NUM(c))</div><div class='del'>-</div><div class='del'>-#ifdef USE_COLOR</div><div class='del'>-    rb_curses_define_const(A_ATTRIBUTES);</div><div class='del'>-#ifdef A_NORMAL</div><div class='del'>-    rb_curses_define_const(A_NORMAL);</div><div class='del'>-#endif</div><div class='del'>-    rb_curses_define_const(A_STANDOUT);</div><div class='del'>-    rb_curses_define_const(A_UNDERLINE);</div><div class='del'>-    rb_curses_define_const(A_REVERSE);</div><div class='del'>-    rb_curses_define_const(A_BLINK);</div><div class='del'>-    rb_curses_define_const(A_DIM);</div><div class='del'>-    rb_curses_define_const(A_BOLD);</div><div class='del'>-    rb_curses_define_const(A_PROTECT);</div><div class='del'>-#ifdef A_INVIS /* for NetBSD */</div><div class='del'>-    rb_curses_define_const(A_INVIS);</div><div class='del'>-#endif</div><div class='del'>-    rb_curses_define_const(A_ALTCHARSET);</div><div class='del'>-    rb_curses_define_const(A_CHARTEXT);</div><div class='del'>-#ifdef A_HORIZONTAL</div><div class='del'>-    rb_curses_define_const(A_HORIZONTAL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef A_LEFT</div><div class='del'>-    rb_curses_define_const(A_LEFT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef A_LOW</div><div class='del'>-    rb_curses_define_const(A_LOW);</div><div class='del'>-#endif</div><div class='del'>-#ifdef A_RIGHT</div><div class='del'>-    rb_curses_define_const(A_RIGHT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef A_TOP</div><div class='del'>-    rb_curses_define_const(A_TOP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef A_VERTICAL</div><div class='del'>-    rb_curses_define_const(A_VERTICAL);</div><div class='del'>-#endif</div><div class='del'>-    rb_curses_define_const(A_COLOR);</div><div class='del'>-</div><div class='del'>-#ifdef COLORS</div><div class='del'>-    rb_curses_define_const(COLORS);</div><div class='del'>-#endif</div><div class='del'>-    rb_curses_define_const(COLOR_BLACK);</div><div class='del'>-    rb_curses_define_const(COLOR_RED);</div><div class='del'>-    rb_curses_define_const(COLOR_GREEN);</div><div class='del'>-    rb_curses_define_const(COLOR_YELLOW);</div><div class='del'>-    rb_curses_define_const(COLOR_BLUE);</div><div class='del'>-    rb_curses_define_const(COLOR_MAGENTA);</div><div class='del'>-    rb_curses_define_const(COLOR_CYAN);</div><div class='del'>-    rb_curses_define_const(COLOR_WHITE);</div><div class='del'>-#endif /* USE_COLOR */</div><div class='del'>-#ifdef USE_MOUSE</div><div class='del'>-#ifdef BUTTON1_PRESSED</div><div class='del'>-    rb_curses_define_const(BUTTON1_PRESSED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON1_RELEASED</div><div class='del'>-    rb_curses_define_const(BUTTON1_RELEASED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON1_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON1_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON1_DOUBLE_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON1_DOUBLE_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON1_TRIPLE_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON1_TRIPLE_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON2_PRESSED</div><div class='del'>-    rb_curses_define_const(BUTTON2_PRESSED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON2_RELEASED</div><div class='del'>-    rb_curses_define_const(BUTTON2_RELEASED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON2_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON2_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON2_DOUBLE_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON2_DOUBLE_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON2_TRIPLE_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON2_TRIPLE_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON3_PRESSED</div><div class='del'>-    rb_curses_define_const(BUTTON3_PRESSED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON3_RELEASED</div><div class='del'>-    rb_curses_define_const(BUTTON3_RELEASED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON3_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON3_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON3_DOUBLE_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON3_DOUBLE_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON3_TRIPLE_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON3_TRIPLE_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON4_PRESSED</div><div class='del'>-    rb_curses_define_const(BUTTON4_PRESSED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON4_RELEASED</div><div class='del'>-    rb_curses_define_const(BUTTON4_RELEASED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON4_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON4_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON4_DOUBLE_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON4_DOUBLE_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON4_TRIPLE_CLICKED</div><div class='del'>-    rb_curses_define_const(BUTTON4_TRIPLE_CLICKED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON_SHIFT</div><div class='del'>-    rb_curses_define_const(BUTTON_SHIFT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON_CTRL</div><div class='del'>-    rb_curses_define_const(BUTTON_CTRL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef BUTTON_ALT</div><div class='del'>-    rb_curses_define_const(BUTTON_ALT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef ALL_MOUSE_EVENTS</div><div class='del'>-    rb_curses_define_const(ALL_MOUSE_EVENTS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef REPORT_MOUSE_POSITION</div><div class='del'>-    rb_curses_define_const(REPORT_MOUSE_POSITION);</div><div class='del'>-#endif</div><div class='del'>-#endif /* USE_MOUSE */</div><div class='del'>-</div><div class='del'>-#if defined(KEY_MOUSE) &amp;&amp; defined(USE_MOUSE)</div><div class='del'>-    rb_curses_define_const(KEY_MOUSE);</div><div class='del'>-    rb_define_const(mKey, "MOUSE", INT2NUM(KEY_MOUSE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_MIN</div><div class='del'>-    rb_curses_define_const(KEY_MIN);</div><div class='del'>-    rb_define_const(mKey, "MIN", INT2NUM(KEY_MIN));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_BREAK</div><div class='del'>-    rb_curses_define_const(KEY_BREAK);</div><div class='del'>-    rb_define_const(mKey, "BREAK", INT2NUM(KEY_BREAK));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_DOWN</div><div class='del'>-    rb_curses_define_const(KEY_DOWN);</div><div class='del'>-    rb_define_const(mKey, "DOWN", INT2NUM(KEY_DOWN));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_UP</div><div class='del'>-    rb_curses_define_const(KEY_UP);</div><div class='del'>-    rb_define_const(mKey, "UP", INT2NUM(KEY_UP));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_LEFT</div><div class='del'>-    rb_curses_define_const(KEY_LEFT);</div><div class='del'>-    rb_define_const(mKey, "LEFT", INT2NUM(KEY_LEFT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_RIGHT</div><div class='del'>-    rb_curses_define_const(KEY_RIGHT);</div><div class='del'>-    rb_define_const(mKey, "RIGHT", INT2NUM(KEY_RIGHT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_HOME</div><div class='del'>-    rb_curses_define_const(KEY_HOME);</div><div class='del'>-    rb_define_const(mKey, "HOME", INT2NUM(KEY_HOME));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_BACKSPACE</div><div class='del'>-    rb_curses_define_const(KEY_BACKSPACE);</div><div class='del'>-    rb_define_const(mKey, "BACKSPACE", INT2NUM(KEY_BACKSPACE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_F</div><div class='del'>-    /* KEY_F(n) : 0 &lt;= n &lt;= 63 */</div><div class='del'>-    {</div><div class='del'>-      int i;</div><div class='del'>-      char c[8];</div><div class='del'>-      for( i=0; i&lt;64; i++ ){</div><div class='del'>-	sprintf(c, "KEY_F%d", i);</div><div class='del'>-	rb_define_const(mCurses, c, INT2NUM(KEY_F(i)));</div><div class='del'>-	sprintf(c, "F%d", i);</div><div class='del'>-	rb_define_const(mKey, c, INT2NUM(KEY_F(i)));</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_DL</div><div class='del'>-    rb_curses_define_const(KEY_DL);</div><div class='del'>-    rb_define_const(mKey, "DL", INT2NUM(KEY_DL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_IL</div><div class='del'>-    rb_curses_define_const(KEY_IL);</div><div class='del'>-    rb_define_const(mKey, "IL", INT2NUM(KEY_IL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_DC</div><div class='del'>-    rb_curses_define_const(KEY_DC);</div><div class='del'>-    rb_define_const(mKey, "DC", INT2NUM(KEY_DC));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_IC</div><div class='del'>-    rb_curses_define_const(KEY_IC);</div><div class='del'>-    rb_define_const(mKey, "IC", INT2NUM(KEY_IC));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_EIC</div><div class='del'>-    rb_curses_define_const(KEY_EIC);</div><div class='del'>-    rb_define_const(mKey, "EIC", INT2NUM(KEY_EIC));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_CLEAR</div><div class='del'>-    rb_curses_define_const(KEY_CLEAR);</div><div class='del'>-    rb_define_const(mKey, "CLEAR", INT2NUM(KEY_CLEAR));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_EOS</div><div class='del'>-    rb_curses_define_const(KEY_EOS);</div><div class='del'>-    rb_define_const(mKey, "EOS", INT2NUM(KEY_EOS));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_EOL</div><div class='del'>-    rb_curses_define_const(KEY_EOL);</div><div class='del'>-    rb_define_const(mKey, "EOL", INT2NUM(KEY_EOL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SF</div><div class='del'>-    rb_curses_define_const(KEY_SF);</div><div class='del'>-    rb_define_const(mKey, "SF", INT2NUM(KEY_SF));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SR</div><div class='del'>-    rb_curses_define_const(KEY_SR);</div><div class='del'>-    rb_define_const(mKey, "SR", INT2NUM(KEY_SR));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_NPAGE</div><div class='del'>-    rb_curses_define_const(KEY_NPAGE);</div><div class='del'>-    rb_define_const(mKey, "NPAGE", INT2NUM(KEY_NPAGE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_PPAGE</div><div class='del'>-    rb_curses_define_const(KEY_PPAGE);</div><div class='del'>-    rb_define_const(mKey, "PPAGE", INT2NUM(KEY_PPAGE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_STAB</div><div class='del'>-    rb_curses_define_const(KEY_STAB);</div><div class='del'>-    rb_define_const(mKey, "STAB", INT2NUM(KEY_STAB));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_CTAB</div><div class='del'>-    rb_curses_define_const(KEY_CTAB);</div><div class='del'>-    rb_define_const(mKey, "CTAB", INT2NUM(KEY_CTAB));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_CATAB</div><div class='del'>-    rb_curses_define_const(KEY_CATAB);</div><div class='del'>-    rb_define_const(mKey, "CATAB", INT2NUM(KEY_CATAB));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_ENTER</div><div class='del'>-    rb_curses_define_const(KEY_ENTER);</div><div class='del'>-    rb_define_const(mKey, "ENTER", INT2NUM(KEY_ENTER));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SRESET</div><div class='del'>-    rb_curses_define_const(KEY_SRESET);</div><div class='del'>-    rb_define_const(mKey, "SRESET", INT2NUM(KEY_SRESET));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_RESET</div><div class='del'>-    rb_curses_define_const(KEY_RESET);</div><div class='del'>-    rb_define_const(mKey, "RESET", INT2NUM(KEY_RESET));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_PRINT</div><div class='del'>-    rb_curses_define_const(KEY_PRINT);</div><div class='del'>-    rb_define_const(mKey, "PRINT", INT2NUM(KEY_PRINT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_LL</div><div class='del'>-    rb_curses_define_const(KEY_LL);</div><div class='del'>-    rb_define_const(mKey, "LL", INT2NUM(KEY_LL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_A1</div><div class='del'>-    rb_curses_define_const(KEY_A1);</div><div class='del'>-    rb_define_const(mKey, "A1", INT2NUM(KEY_A1));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_A3</div><div class='del'>-    rb_curses_define_const(KEY_A3);</div><div class='del'>-    rb_define_const(mKey, "A3", INT2NUM(KEY_A3));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_B2</div><div class='del'>-    rb_curses_define_const(KEY_B2);</div><div class='del'>-    rb_define_const(mKey, "B2", INT2NUM(KEY_B2));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_C1</div><div class='del'>-    rb_curses_define_const(KEY_C1);</div><div class='del'>-    rb_define_const(mKey, "C1", INT2NUM(KEY_C1));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_C3</div><div class='del'>-    rb_curses_define_const(KEY_C3);</div><div class='del'>-    rb_define_const(mKey, "C3", INT2NUM(KEY_C3));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_BTAB</div><div class='del'>-    rb_curses_define_const(KEY_BTAB);</div><div class='del'>-    rb_define_const(mKey, "BTAB", INT2NUM(KEY_BTAB));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_BEG</div><div class='del'>-    rb_curses_define_const(KEY_BEG);</div><div class='del'>-    rb_define_const(mKey, "BEG", INT2NUM(KEY_BEG));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_CANCEL</div><div class='del'>-    rb_curses_define_const(KEY_CANCEL);</div><div class='del'>-    rb_define_const(mKey, "CANCEL", INT2NUM(KEY_CANCEL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_CLOSE</div><div class='del'>-    rb_curses_define_const(KEY_CLOSE);</div><div class='del'>-    rb_define_const(mKey, "CLOSE", INT2NUM(KEY_CLOSE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_COMMAND</div><div class='del'>-    rb_curses_define_const(KEY_COMMAND);</div><div class='del'>-    rb_define_const(mKey, "COMMAND", INT2NUM(KEY_COMMAND));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_COPY</div><div class='del'>-    rb_curses_define_const(KEY_COPY);</div><div class='del'>-    rb_define_const(mKey, "COPY", INT2NUM(KEY_COPY));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_CREATE</div><div class='del'>-    rb_curses_define_const(KEY_CREATE);</div><div class='del'>-    rb_define_const(mKey, "CREATE", INT2NUM(KEY_CREATE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_END</div><div class='del'>-    rb_curses_define_const(KEY_END);</div><div class='del'>-    rb_define_const(mKey, "END", INT2NUM(KEY_END));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_EXIT</div><div class='del'>-    rb_curses_define_const(KEY_EXIT);</div><div class='del'>-    rb_define_const(mKey, "EXIT", INT2NUM(KEY_EXIT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_FIND</div><div class='del'>-    rb_curses_define_const(KEY_FIND);</div><div class='del'>-    rb_define_const(mKey, "FIND", INT2NUM(KEY_FIND));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_HELP</div><div class='del'>-    rb_curses_define_const(KEY_HELP);</div><div class='del'>-    rb_define_const(mKey, "HELP", INT2NUM(KEY_HELP));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_MARK</div><div class='del'>-    rb_curses_define_const(KEY_MARK);</div><div class='del'>-    rb_define_const(mKey, "MARK", INT2NUM(KEY_MARK));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_MESSAGE</div><div class='del'>-    rb_curses_define_const(KEY_MESSAGE);</div><div class='del'>-    rb_define_const(mKey, "MESSAGE", INT2NUM(KEY_MESSAGE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_MOVE</div><div class='del'>-    rb_curses_define_const(KEY_MOVE);</div><div class='del'>-    rb_define_const(mKey, "MOVE", INT2NUM(KEY_MOVE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_NEXT</div><div class='del'>-    rb_curses_define_const(KEY_NEXT);</div><div class='del'>-    rb_define_const(mKey, "NEXT", INT2NUM(KEY_NEXT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_OPEN</div><div class='del'>-    rb_curses_define_const(KEY_OPEN);</div><div class='del'>-    rb_define_const(mKey, "OPEN", INT2NUM(KEY_OPEN));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_OPTIONS</div><div class='del'>-    rb_curses_define_const(KEY_OPTIONS);</div><div class='del'>-    rb_define_const(mKey, "OPTIONS", INT2NUM(KEY_OPTIONS));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_PREVIOUS</div><div class='del'>-    rb_curses_define_const(KEY_PREVIOUS);</div><div class='del'>-    rb_define_const(mKey, "PREVIOUS", INT2NUM(KEY_PREVIOUS));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_REDO</div><div class='del'>-    rb_curses_define_const(KEY_REDO);</div><div class='del'>-    rb_define_const(mKey, "REDO", INT2NUM(KEY_REDO));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_REFERENCE</div><div class='del'>-    rb_curses_define_const(KEY_REFERENCE);</div><div class='del'>-    rb_define_const(mKey, "REFERENCE", INT2NUM(KEY_REFERENCE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_REFRESH</div><div class='del'>-    rb_curses_define_const(KEY_REFRESH);</div><div class='del'>-    rb_define_const(mKey, "REFRESH", INT2NUM(KEY_REFRESH));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_REPLACE</div><div class='del'>-    rb_curses_define_const(KEY_REPLACE);</div><div class='del'>-    rb_define_const(mKey, "REPLACE", INT2NUM(KEY_REPLACE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_RESTART</div><div class='del'>-    rb_curses_define_const(KEY_RESTART);</div><div class='del'>-    rb_define_const(mKey, "RESTART", INT2NUM(KEY_RESTART));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_RESUME</div><div class='del'>-    rb_curses_define_const(KEY_RESUME);</div><div class='del'>-    rb_define_const(mKey, "RESUME", INT2NUM(KEY_RESUME));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SAVE</div><div class='del'>-    rb_curses_define_const(KEY_SAVE);</div><div class='del'>-    rb_define_const(mKey, "SAVE", INT2NUM(KEY_SAVE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SBEG</div><div class='del'>-    rb_curses_define_const(KEY_SBEG);</div><div class='del'>-    rb_define_const(mKey, "SBEG", INT2NUM(KEY_SBEG));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SCANCEL</div><div class='del'>-    rb_curses_define_const(KEY_SCANCEL);</div><div class='del'>-    rb_define_const(mKey, "SCANCEL", INT2NUM(KEY_SCANCEL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SCOMMAND</div><div class='del'>-    rb_curses_define_const(KEY_SCOMMAND);</div><div class='del'>-    rb_define_const(mKey, "SCOMMAND", INT2NUM(KEY_SCOMMAND));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SCOPY</div><div class='del'>-    rb_curses_define_const(KEY_SCOPY);</div><div class='del'>-    rb_define_const(mKey, "SCOPY", INT2NUM(KEY_SCOPY));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SCREATE</div><div class='del'>-    rb_curses_define_const(KEY_SCREATE);</div><div class='del'>-    rb_define_const(mKey, "SCREATE", INT2NUM(KEY_SCREATE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SDC</div><div class='del'>-    rb_curses_define_const(KEY_SDC);</div><div class='del'>-    rb_define_const(mKey, "SDC", INT2NUM(KEY_SDC));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SDL</div><div class='del'>-    rb_curses_define_const(KEY_SDL);</div><div class='del'>-    rb_define_const(mKey, "SDL", INT2NUM(KEY_SDL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SELECT</div><div class='del'>-    rb_curses_define_const(KEY_SELECT);</div><div class='del'>-    rb_define_const(mKey, "SELECT", INT2NUM(KEY_SELECT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SEND</div><div class='del'>-    rb_curses_define_const(KEY_SEND);</div><div class='del'>-    rb_define_const(mKey, "SEND", INT2NUM(KEY_SEND));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SEOL</div><div class='del'>-    rb_curses_define_const(KEY_SEOL);</div><div class='del'>-    rb_define_const(mKey, "SEOL", INT2NUM(KEY_SEOL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SEXIT</div><div class='del'>-    rb_curses_define_const(KEY_SEXIT);</div><div class='del'>-    rb_define_const(mKey, "SEXIT", INT2NUM(KEY_SEXIT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SFIND</div><div class='del'>-    rb_curses_define_const(KEY_SFIND);</div><div class='del'>-    rb_define_const(mKey, "SFIND", INT2NUM(KEY_SFIND));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SHELP</div><div class='del'>-    rb_curses_define_const(KEY_SHELP);</div><div class='del'>-    rb_define_const(mKey, "SHELP", INT2NUM(KEY_SHELP));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SHOME</div><div class='del'>-    rb_curses_define_const(KEY_SHOME);</div><div class='del'>-    rb_define_const(mKey, "SHOME", INT2NUM(KEY_SHOME));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SIC</div><div class='del'>-    rb_curses_define_const(KEY_SIC);</div><div class='del'>-    rb_define_const(mKey, "SIC", INT2NUM(KEY_SIC));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SLEFT</div><div class='del'>-    rb_curses_define_const(KEY_SLEFT);</div><div class='del'>-    rb_define_const(mKey, "SLEFT", INT2NUM(KEY_SLEFT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SMESSAGE</div><div class='del'>-    rb_curses_define_const(KEY_SMESSAGE);</div><div class='del'>-    rb_define_const(mKey, "SMESSAGE", INT2NUM(KEY_SMESSAGE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SMOVE</div><div class='del'>-    rb_curses_define_const(KEY_SMOVE);</div><div class='del'>-    rb_define_const(mKey, "SMOVE", INT2NUM(KEY_SMOVE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SNEXT</div><div class='del'>-    rb_curses_define_const(KEY_SNEXT);</div><div class='del'>-    rb_define_const(mKey, "SNEXT", INT2NUM(KEY_SNEXT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SOPTIONS</div><div class='del'>-    rb_curses_define_const(KEY_SOPTIONS);</div><div class='del'>-    rb_define_const(mKey, "SOPTIONS", INT2NUM(KEY_SOPTIONS));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SPREVIOUS</div><div class='del'>-    rb_curses_define_const(KEY_SPREVIOUS);</div><div class='del'>-    rb_define_const(mKey, "SPREVIOUS", INT2NUM(KEY_SPREVIOUS));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SPRINT</div><div class='del'>-    rb_curses_define_const(KEY_SPRINT);</div><div class='del'>-    rb_define_const(mKey, "SPRINT", INT2NUM(KEY_SPRINT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SREDO</div><div class='del'>-    rb_curses_define_const(KEY_SREDO);</div><div class='del'>-    rb_define_const(mKey, "SREDO", INT2NUM(KEY_SREDO));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SREPLACE</div><div class='del'>-    rb_curses_define_const(KEY_SREPLACE);</div><div class='del'>-    rb_define_const(mKey, "SREPLACE", INT2NUM(KEY_SREPLACE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SRIGHT</div><div class='del'>-    rb_curses_define_const(KEY_SRIGHT);</div><div class='del'>-    rb_define_const(mKey, "SRIGHT", INT2NUM(KEY_SRIGHT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SRSUME</div><div class='del'>-    rb_curses_define_const(KEY_SRSUME);</div><div class='del'>-    rb_define_const(mKey, "SRSUME", INT2NUM(KEY_SRSUME));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SSAVE</div><div class='del'>-    rb_curses_define_const(KEY_SSAVE);</div><div class='del'>-    rb_define_const(mKey, "SSAVE", INT2NUM(KEY_SSAVE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SSUSPEND</div><div class='del'>-    rb_curses_define_const(KEY_SSUSPEND);</div><div class='del'>-    rb_define_const(mKey, "SSUSPEND", INT2NUM(KEY_SSUSPEND));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SUNDO</div><div class='del'>-    rb_curses_define_const(KEY_SUNDO);</div><div class='del'>-    rb_define_const(mKey, "SUNDO", INT2NUM(KEY_SUNDO));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_SUSPEND</div><div class='del'>-    rb_curses_define_const(KEY_SUSPEND);</div><div class='del'>-    rb_define_const(mKey, "SUSPEND", INT2NUM(KEY_SUSPEND));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_UNDO</div><div class='del'>-    rb_curses_define_const(KEY_UNDO);</div><div class='del'>-    rb_define_const(mKey, "UNDO", INT2NUM(KEY_UNDO));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_RESIZE</div><div class='del'>-    rb_curses_define_const(KEY_RESIZE);</div><div class='del'>-    rb_define_const(mKey, "RESIZE", INT2NUM(KEY_RESIZE));</div><div class='del'>-#endif</div><div class='del'>-#ifdef KEY_MAX</div><div class='del'>-    rb_curses_define_const(KEY_MAX);</div><div class='del'>-    rb_define_const(mKey, "MAX", INT2NUM(KEY_MAX));</div><div class='del'>-#endif</div><div class='del'>-    {</div><div class='del'>-      int c;</div><div class='del'>-      char name[] = "KEY_CTRL_x";</div><div class='del'>-      for( c = 'A'; c &lt;= 'Z'; c++ ){</div><div class='del'>-	sprintf(name, "KEY_CTRL_%c", c);</div><div class='del'>-	rb_define_const(mCurses, name, INT2FIX(c - 'A' + 1));</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-#undef rb_curses_define_const</div><div class='del'>-</div><div class='del'>-    rb_set_end_proc(curses_finalize, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/curses/depend b/ext/curses/depend<br/>deleted file mode 100644<br/>index ecb79e512d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-curses.o: curses.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/curses/extconf.rb b/ext/curses/extconf.rb<br/>deleted file mode 100644<br/>index 0124bbbf4a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,31 +0,0 @@</div><div class='del'>-require 'mkmf'</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='del'>-</div><div class='del'>-make=false</div><div class='del'>-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='del'>-  make=true</div><div class='del'>-elsif have_header(*curses=%w"ncurses/curses.h") and have_library("ncurses", "initscr")</div><div class='del'>-  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='del'>-  make=true</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-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='del'>-    have_func(f) || (have_macro(f, curses) &amp;&amp; $defs.push(format("-DHAVE_%s", f.upcase)))</div><div class='del'>-  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='del'>-  create_makefile("curses")</div><div class='del'>-end</div><div class='head'>diff --git a/ext/curses/hello.rb b/ext/curses/hello.rb<br/>deleted file mode 100644<br/>index 7f57d801a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/hello.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/hello.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "curses"</div><div class='del'>-include Curses</div><div class='del'>-</div><div class='del'>-def show_message(message)</div><div class='del'>-  width = message.length + 6</div><div class='del'>-  win = Window.new(5, width,</div><div class='del'>-		   (lines - 5) / 2, (cols - width) / 2)</div><div class='del'>-  win.box(?|, ?-)</div><div class='del'>-  win.setpos(2, 3)</div><div class='del'>-  win.addstr(message)</div><div class='del'>-  win.refresh</div><div class='del'>-  win.getch</div><div class='del'>-  win.close</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-init_screen</div><div class='del'>-begin</div><div class='del'>-  crmode</div><div class='del'>-#  show_message("Hit any key")</div><div class='del'>-  setpos((lines - 5) / 2, (cols - 10) / 2)</div><div class='del'>-  addstr("Hit any key")</div><div class='del'>-  refresh</div><div class='del'>-  getch</div><div class='del'>-  show_message("Hello, World!")</div><div class='del'>-  refresh</div><div class='del'>-ensure</div><div class='del'>-  close_screen</div><div class='del'>-end</div><div class='head'>diff --git a/ext/curses/mouse.rb b/ext/curses/mouse.rb<br/>deleted file mode 100644<br/>index c42bc31f33..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/mouse.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/mouse.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "curses"</div><div class='del'>-include Curses</div><div class='del'>-</div><div class='del'>-def show_message(*msgs)</div><div class='del'>-  message = msgs.join</div><div class='del'>-  width = message.length + 6</div><div class='del'>-  win = Window.new(5, width,</div><div class='del'>-		   (lines - 5) / 2, (cols - width) / 2)</div><div class='del'>-  win.keypad = true</div><div class='del'>-  win.attron(color_pair(COLOR_RED)){</div><div class='del'>-    win.box(?|, ?-, ?+)</div><div class='del'>-  }</div><div class='del'>-  win.setpos(2, 3)</div><div class='del'>-  win.addstr(message)</div><div class='del'>-  win.refresh</div><div class='del'>-  win.getch</div><div class='del'>-  win.close</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-init_screen</div><div class='del'>-start_color</div><div class='del'>-init_pair(COLOR_BLUE,COLOR_BLUE,COLOR_WHITE)</div><div class='del'>-init_pair(COLOR_RED,COLOR_RED,COLOR_WHITE)</div><div class='del'>-crmode</div><div class='del'>-noecho</div><div class='del'>-stdscr.keypad(true)</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  mousemask(BUTTON1_CLICKED|BUTTON2_CLICKED|BUTTON3_CLICKED|BUTTON4_CLICKED)</div><div class='del'>-  setpos((lines - 5) / 2, (cols - 10) / 2)</div><div class='del'>-  attron(color_pair(COLOR_BLUE)|A_BOLD){</div><div class='del'>-    addstr("click")</div><div class='del'>-  }</div><div class='del'>-  refresh</div><div class='del'>-  while( true )</div><div class='del'>-    c = getch</div><div class='del'>-    case c</div><div class='del'>-    when KEY_MOUSE</div><div class='del'>-      m = getmouse</div><div class='del'>-      if( m )</div><div class='del'>-	show_message("getch = #{c.inspect}, ",</div><div class='del'>-		     "mouse event = #{'0x%x' % m.bstate}, ",</div><div class='del'>-		     "axis = (#{m.x},#{m.y},#{m.z})")</div><div class='del'>-      end</div><div class='del'>-      break</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  refresh</div><div class='del'>-ensure</div><div class='del'>-  close_screen</div><div class='del'>-end</div><div class='head'>diff --git a/ext/curses/rain.rb b/ext/curses/rain.rb<br/>deleted file mode 100644<br/>index 36f0f84de2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/rain.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/rain.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,76 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-# rain for a curses test</div><div class='del'>-</div><div class='del'>-require "curses"</div><div class='del'>-include Curses</div><div class='del'>-</div><div class='del'>-def onsig(sig)</div><div class='del'>-  close_screen</div><div class='del'>-  exit sig</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def ranf</div><div class='del'>-  rand(32767).to_f / 32767</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# main #</div><div class='del'>-for i in 1 .. 15  # SIGHUP .. SIGTERM</div><div class='del'>-  if trap(i, "SIG_IGN") != 0 then  # 0 for SIG_IGN</div><div class='del'>-    trap(i) {|sig| onsig(sig) }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-init_screen</div><div class='del'>-nl</div><div class='del'>-noecho</div><div class='del'>-srand</div><div class='del'>-</div><div class='del'>-xpos = {}</div><div class='del'>-ypos = {}</div><div class='del'>-r = lines - 4</div><div class='del'>-c = cols - 4</div><div class='del'>-for i in 0 .. 4</div><div class='del'>-  xpos[i] = (c * ranf).to_i + 2</div><div class='del'>-  ypos[i] = (r * ranf).to_i + 2</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-i = 0</div><div class='del'>-while TRUE</div><div class='del'>-  x = (c * ranf).to_i + 2</div><div class='del'>-  y = (r * ranf).to_i + 2</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  setpos(y, x); addstr(".")</div><div class='del'>-</div><div class='del'>-  setpos(ypos[i], xpos[i]); addstr("o")</div><div class='del'>-</div><div class='del'>-  i = if i == 0 then 4 else i - 1 end</div><div class='del'>-  setpos(ypos[i], xpos[i]); addstr("O")</div><div class='del'>-</div><div class='del'>-  i = if i == 0 then 4 else i - 1 end</div><div class='del'>-  setpos(ypos[i] - 1, xpos[i]);      addstr("-")</div><div class='del'>-  setpos(ypos[i],     xpos[i] - 1); addstr("|.|")</div><div class='del'>-  setpos(ypos[i] + 1, xpos[i]);      addstr("-")</div><div class='del'>-</div><div class='del'>-  i = if i == 0 then 4 else i - 1 end</div><div class='del'>-  setpos(ypos[i] - 2, xpos[i]);       addstr("-")</div><div class='del'>-  setpos(ypos[i] - 1, xpos[i] - 1);  addstr("/ \\")</div><div class='del'>-  setpos(ypos[i],     xpos[i] - 2); addstr("| O |")</div><div class='del'>-  setpos(ypos[i] + 1, xpos[i] - 1); addstr("\\ /")</div><div class='del'>-  setpos(ypos[i] + 2, xpos[i]);       addstr("-")</div><div class='del'>-</div><div class='del'>-  i = if i == 0 then 4 else i - 1 end</div><div class='del'>-  setpos(ypos[i] - 2, xpos[i]);       addstr(" ")</div><div class='del'>-  setpos(ypos[i] - 1, xpos[i] - 1);  addstr("   ")</div><div class='del'>-  setpos(ypos[i],     xpos[i] - 2); addstr("     ")</div><div class='del'>-  setpos(ypos[i] + 1, xpos[i] - 1);  addstr("   ")</div><div class='del'>-  setpos(ypos[i] + 2, xpos[i]);       addstr(" ")</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  xpos[i] = x</div><div class='del'>-  ypos[i] = y</div><div class='del'>-  refresh</div><div class='del'>-  sleep(0.5)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# end of main</div><div class='head'>diff --git a/ext/curses/view.rb b/ext/curses/view.rb<br/>deleted file mode 100644<br/>index d9a82a57db..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/view.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/view.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,91 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "curses"</div><div class='del'>-include Curses</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# main</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-if ARGV.size != 1 then</div><div class='del'>-  printf("usage: view file\n");</div><div class='del'>-  exit</div><div class='del'>-end</div><div class='del'>-begin</div><div class='del'>-  fp = open(ARGV[0], "r")</div><div class='del'>-rescue</div><div class='del'>-  raise "cannot open file: #{ARGV[1]}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# signal(SIGINT, finish)</div><div class='del'>-</div><div class='del'>-init_screen</div><div class='del'>-#keypad(stdscr, TRUE)</div><div class='del'>-nonl</div><div class='del'>-cbreak</div><div class='del'>-noecho</div><div class='del'>-#scrollok(stdscr, TRUE)</div><div class='del'>-</div><div class='del'>-# slurp the file</div><div class='del'>-data_lines = []</div><div class='del'>-fp.each_line { |l|</div><div class='del'>-  data_lines.push(l)</div><div class='del'>-}</div><div class='del'>-fp.close</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-lptr = 0</div><div class='del'>-while TRUE</div><div class='del'>-  i = 0</div><div class='del'>-  while i &lt; lines</div><div class='del'>-    setpos(i, 0)</div><div class='del'>-    #clrtoeol</div><div class='del'>-    addstr(data_lines[lptr + i]) #if data_lines[lptr + i]</div><div class='del'>-    i += 1</div><div class='del'>-  end</div><div class='del'>-  refresh</div><div class='del'>-</div><div class='del'>-  explicit = FALSE</div><div class='del'>-  n = 0</div><div class='del'>-  while TRUE</div><div class='del'>-    c = getch.chr</div><div class='del'>-    if c =~ /[0-9]/</div><div class='del'>-      n = 10 * n + c.to_i</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'>-  n = 1 if !explicit &amp;&amp; n == 0</div><div class='del'>-</div><div class='del'>-  case c</div><div class='del'>-  when "n"  #when KEY_DOWN</div><div class='del'>-    i = 0</div><div class='del'>-    while i &lt; n</div><div class='del'>-      if lptr + lines &lt; data_lines.size then</div><div class='del'>-	lptr += 1</div><div class='del'>-      else</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-      i += 1 </div><div class='del'>-    end</div><div class='del'>-    #wscrl(i)</div><div class='del'>-      </div><div class='del'>-  when "p"  #when KEY_UP</div><div class='del'>-    i = 0</div><div class='del'>-    while i &lt; n</div><div class='del'>-      if lptr &gt; 0 then</div><div class='del'>-	lptr -= 1</div><div class='del'>-      else</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-      i += 1 </div><div class='del'>-    end    </div><div class='del'>-    #wscrl(-i)</div><div class='del'>-</div><div class='del'>-  when "q"</div><div class='del'>-    break</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-close_screen</div><div class='head'>diff --git a/ext/curses/view2.rb b/ext/curses/view2.rb<br/>deleted file mode 100644<br/>index 18d9619216..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/curses/view2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/curses/view2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,115 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "curses"</div><div class='del'>-</div><div class='del'>-if ARGV.size != 1 then</div><div class='del'>-  printf("usage: view file\n");</div><div class='del'>-  exit</div><div class='del'>-end</div><div class='del'>-begin</div><div class='del'>-  fp = open(ARGV[0], "r")</div><div class='del'>-rescue</div><div class='del'>-  raise "cannot open file: #{ARGV[1]}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# signal(SIGINT, finish)</div><div class='del'>-</div><div class='del'>-Curses.init_screen</div><div class='del'>-Curses.nonl</div><div class='del'>-Curses.cbreak</div><div class='del'>-Curses.noecho</div><div class='del'>-</div><div class='del'>-$screen = Curses.stdscr</div><div class='del'>-</div><div class='del'>-$screen.scrollok(true)</div><div class='del'>-#$screen.keypad(true)</div><div class='del'>-</div><div class='del'>-# slurp the file</div><div class='del'>-$data_lines = []</div><div class='del'>-fp.each_line { |l|</div><div class='del'>-  $data_lines.push(l.chop)</div><div class='del'>-}</div><div class='del'>-fp.close</div><div class='del'>-</div><div class='del'>-$top = 0</div><div class='del'>-$data_lines[0..$screen.maxy-1].each_with_index{|line, idx|</div><div class='del'>-  $screen.setpos(idx, 0)</div><div class='del'>-  $screen.addstr(line)</div><div class='del'>-}</div><div class='del'>-$screen.setpos(0,0)</div><div class='del'>-$screen.refresh</div><div class='del'>-</div><div class='del'>-def scroll_up</div><div class='del'>-  if( $top &gt; 0 )</div><div class='del'>-    $screen.scrl(-1)</div><div class='del'>-    $top -= 1</div><div class='del'>-    str = $data_lines[$top]</div><div class='del'>-    if( str )</div><div class='del'>-      $screen.setpos(0, 0)</div><div class='del'>-      $screen.addstr(str)</div><div class='del'>-    end</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 scroll_down</div><div class='del'>-  if( $top + $screen.maxy &lt; $data_lines.length )</div><div class='del'>-    $screen.scrl(1)</div><div class='del'>-    $top += 1</div><div class='del'>-    str = $data_lines[$top + $screen.maxy - 1]</div><div class='del'>-    if( str )</div><div class='del'>-      $screen.setpos($screen.maxy - 1, 0)</div><div class='del'>-      $screen.addstr(str)</div><div class='del'>-    end</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'>-while true</div><div class='del'>-  result = true</div><div class='del'>-  c = Curses.getch</div><div class='del'>-  case c</div><div class='del'>-  when Curses::KEY_DOWN, Curses::KEY_CTRL_N</div><div class='del'>-    result = scroll_down</div><div class='del'>-  when Curses::KEY_UP, Curses::KEY_CTRL_P</div><div class='del'>-    result = scroll_up</div><div class='del'>-  when Curses::KEY_NPAGE, ?\s  # white space</div><div class='del'>-    for i in 0..($screen.maxy - 2)</div><div class='del'>-      if( ! scroll_down )</div><div class='del'>-	if( i == 0 )</div><div class='del'>-	  result = false</div><div class='del'>-	end</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  when Curses::KEY_PPAGE</div><div class='del'>-    for i in 0..($screen.maxy - 2)</div><div class='del'>-      if( ! scroll_up )</div><div class='del'>-	if( i == 0 )</div><div class='del'>-	  result = false</div><div class='del'>-	end</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  when Curses::KEY_LEFT, Curses::KEY_CTRL_T</div><div class='del'>-    while( scroll_up )</div><div class='del'>-    end</div><div class='del'>-  when Curses::KEY_RIGHT, Curses::KEY_CTRL_B</div><div class='del'>-    while( scroll_down )</div><div class='del'>-    end</div><div class='del'>-  when ?q</div><div class='del'>-    break</div><div class='del'>-  else</div><div class='del'>-    $screen.setpos(0,0)</div><div class='del'>-    $screen.addstr("[unknown key `#{Curses.keyname(c)}'=#{c}] ")</div><div class='del'>-  end</div><div class='del'>-  if( !result )</div><div class='del'>-    Curses.beep</div><div class='del'>-  end</div><div class='del'>-  $screen.setpos(0,0)</div><div class='del'>-end</div><div class='del'>-Curses.close_screen</div><div class='head'>diff --git a/ext/dbm/.cvsignore b/ext/dbm/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dbm/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dbm/.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/dbm/dbm.c b/ext/dbm/dbm.c<br/>deleted file mode 100644<br/>index 0247387fdc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dbm/dbm.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dbm/dbm.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,818 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  dbm.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  created at: Mon Jan 24 15:59:52 JST 1994</div><div class='del'>-</div><div class='del'>-  Copyright (C) 1995-2001 Yukihiro Matsumoto</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_CDEFS_H</div><div class='del'>-# include &lt;cdefs.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_SYS_CDEFS_H</div><div class='del'>-# include &lt;sys/cdefs.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include DBM_HDR</div><div class='del'>-#include &lt;fcntl.h&gt;</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-</div><div class='del'>-static VALUE rb_cDBM, rb_eDBMError;</div><div class='del'>-</div><div class='del'>-#define RUBY_DBM_RW_BIT 0x20000000</div><div class='del'>-</div><div class='del'>-struct dbmdata {</div><div class='del'>-    int  di_size;</div><div class='del'>-    DBM *di_dbm;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-closed_dbm()</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eDBMError, "closed DBM file");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define GetDBM(obj, dbmp) {\</div><div class='del'>-    Data_Get_Struct(obj, struct dbmdata, dbmp);\</div><div class='del'>-    if (dbmp == 0) closed_dbm();\</div><div class='del'>-    if (dbmp-&gt;di_dbm == 0) closed_dbm();\</div><div class='del'>-}</div><div class='del'>-</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='del'>-static void</div><div class='del'>-free_dbm(dbmp)</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-{</div><div class='del'>-    if (dbmp) {</div><div class='del'>-	if (dbmp-&gt;di_dbm) dbm_close(dbmp-&gt;di_dbm);</div><div class='del'>-	free(dbmp);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_close(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'>-    GetDBM(obj, dbmp);</div><div class='del'>-    dbm_close(dbmp-&gt;di_dbm);</div><div class='del'>-    dbmp-&gt;di_dbm = 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'>-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='del'>-static VALUE fdbm_alloc _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return Data_Wrap_Struct(klass, 0, free_dbm, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_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 file, vmode, vflags;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    int mode, flags = 0;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "12", &amp;file, &amp;vmode, &amp;vflags) == 1) {</div><div class='del'>-	mode = 0666;		/* default value */</div><div class='del'>-    }</div><div class='del'>-    else if (NIL_P(vmode)) {</div><div class='del'>-	mode = -1;		/* return nil if DB not exist */</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	mode = NUM2INT(vmode);</div><div class='del'>-    }</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='del'>-    SafeStringValue(file);</div><div class='del'>-</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='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 = 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='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!dbm) {</div><div class='del'>-	if (mode == -1) return Qnil;</div><div class='del'>-	rb_sys_fail(RSTRING(file)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    dbmp = ALLOC(struct dbmdata);</div><div class='del'>-    DATA_PTR(obj) = dbmp;</div><div class='del'>-    dbmp-&gt;di_dbm = dbm;</div><div class='del'>-    dbmp-&gt;di_size = -1;</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'>-fdbm_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = Data_Wrap_Struct(klass, 0, free_dbm, 0);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(fdbm_initialize(argc, argv, obj))) {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-        return rb_ensure(rb_yield, obj, fdbm_close, obj);</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'>-fdbm_fetch(obj, keystr, ifnone)</div><div class='del'>-    VALUE obj, keystr, ifnone;</div><div class='del'>-{</div><div class='del'>-    datum key, value;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    value = dbm_fetch(dbm, key);</div><div class='del'>-    if (value.dptr == 0) {</div><div class='del'>-	if (ifnone == Qnil &amp;&amp; rb_block_given_p())</div><div class='del'>-	    return rb_yield(rb_tainted_str_new(key.dptr, key.dsize));</div><div class='del'>-	return ifnone;</div><div class='del'>-    }</div><div class='del'>-    return rb_tainted_str_new(value.dptr, value.dsize);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_aref(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    return fdbm_fetch(obj, keystr, Qnil);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_fetch_m(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 keystr, valstr, ifnone;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;keystr, &amp;ifnone);</div><div class='del'>-    valstr = fdbm_fetch(obj, keystr, ifnone);</div><div class='del'>-    if (argc == 1 &amp;&amp; !rb_block_given_p() &amp;&amp; NIL_P(valstr))</div><div class='del'>-	rb_raise(rb_eIndexError, "key not found");</div><div class='del'>-</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_index(obj, valstr)</div><div class='del'>-    VALUE obj, valstr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='del'>-    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='del'>-	    memcmp(val.dptr, RSTRING(valstr)-&gt;ptr, val.dsize) == 0) {</div><div class='del'>-	    return rb_tainted_str_new(key.dptr, key.dsize);</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'>-fdbm_indexes(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;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    new = rb_ary_new2(argc);</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 VALUE</div><div class='del'>-fdbm_select(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'>-    if (rb_block_given_p()) {</div><div class='del'>-        datum key, val;</div><div class='del'>-        DBM *dbm;</div><div class='del'>-        struct dbmdata *dbmp;</div><div class='del'>-</div><div class='del'>-	if (argc &gt; 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number arguments(%d for 0)", argc);</div><div class='del'>-	}</div><div class='del'>-        GetDBM2(obj, dbmp, dbm);</div><div class='del'>-        for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-            VALUE assoc, v;</div><div class='del'>-            val = dbm_fetch(dbm, key);</div><div class='del'>-            assoc = 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='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='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_warn("DBM#select(index..) is deprecated; use DBM#values_at");</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'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-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='del'>-fdbm_delete(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    datum key, value;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE valstr;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    value = dbm_fetch(dbm, key);</div><div class='del'>-    if (value.dptr == 0) {</div><div class='del'>-	if (rb_block_given_p()) return rb_yield(keystr);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* need to save value before dbm_delete() */</div><div class='del'>-    valstr = rb_tainted_str_new(value.dptr, value.dsize);</div><div class='del'>-</div><div class='del'>-    if (dbm_delete(dbm, key)) {</div><div class='del'>-	dbmp-&gt;di_size = -1;</div><div class='del'>-	rb_raise(rb_eDBMError, "dbm_delete failed");</div><div class='del'>-    }</div><div class='del'>-    else if (dbmp-&gt;di_size &gt;= 0) {</div><div class='del'>-	dbmp-&gt;di_size--;</div><div class='del'>-    }</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_shift(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-</div><div class='del'>-    key = dbm_firstkey(dbm); </div><div class='del'>-    if (!key.dptr) return Qnil;</div><div class='del'>-    val = dbm_fetch(dbm, key);</div><div class='del'>-    keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='del'>-    valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='del'>-    dbm_delete(dbm, key);</div><div class='del'>-</div><div class='del'>-    return rb_assoc_new(keystr, valstr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_delete_if(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-    VALUE ret, ary = rb_ary_new();</div><div class='del'>-    int i, status = 0, n;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    n = dbmp-&gt;di_size;</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='del'>-	valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='del'>-        ret = rb_protect(rb_yield, rb_assoc_new(rb_str_dup(keystr), valstr), &amp;status);</div><div class='del'>-        if (status != 0) break;</div><div class='del'>-	if (RTEST(ret)) rb_ary_push(ary, keystr);</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	keystr = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	StringValue(keystr);</div><div class='del'>-	key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-	key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-	if (dbm_delete(dbm, key)) {</div><div class='del'>-	    rb_raise(rb_eDBMError, "dbm_delete failed");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (status) rb_jump_tag(status);</div><div class='del'>-    if (n &gt; 0) dbmp-&gt;di_size = n - RARRAY(ary)-&gt;len;</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'>-fdbm_clear(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-    while (key = dbm_firstkey(dbm), key.dptr) {</div><div class='del'>-	if (dbm_delete(dbm, key)) {</div><div class='del'>-	    rb_raise(rb_eDBMError, "dbm_delete failed");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    dbmp-&gt;di_size = 0;</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'>-fdbm_invert(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-    VALUE hash = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='del'>-	valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='del'>-	rb_hash_aset(hash, valstr, keystr);</div><div class='del'>-    }</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE each_pair _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-each_pair(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(obj, rb_intern("each_pair"), 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE fdbm_store _((VALUE,VALUE,VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-update_i(pair, dbm)</div><div class='del'>-    VALUE pair, dbm;</div><div class='del'>-{</div><div class='del'>-    Check_Type(pair, T_ARRAY);</div><div class='del'>-    if (RARRAY(pair)-&gt;len &lt; 2) {</div><div class='del'>-	rb_raise(rb_eArgError, "pair must be [key, value]");</div><div class='del'>-    }</div><div class='del'>-    fdbm_store(dbm, RARRAY(pair)-&gt;ptr[0], RARRAY(pair)-&gt;ptr[1]);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_update(obj, other)</div><div class='del'>-    VALUE obj, other;</div><div class='del'>-{</div><div class='del'>-    rb_iterate(each_pair, other, update_i, obj);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_replace(obj, other)</div><div class='del'>-    VALUE obj, other;</div><div class='del'>-{</div><div class='del'>-    fdbm_clear(obj);</div><div class='del'>-    rb_iterate(each_pair, other, update_i, obj);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_store(obj, keystr, valstr)</div><div class='del'>-    VALUE obj, keystr, valstr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    keystr = rb_obj_as_string(keystr);</div><div class='del'>-    valstr = rb_obj_as_string(valstr);</div><div class='del'>-</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='del'>-    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-    if (dbm_store(dbm, key, val, DBM_REPLACE)) {</div><div class='del'>-#ifdef HAVE_DBM_CLEARERR</div><div class='del'>-	dbm_clearerr(dbm);</div><div class='del'>-#endif</div><div class='del'>-	if (errno == EPERM) rb_sys_fail(0);</div><div class='del'>-	rb_raise(rb_eDBMError, "dbm_store failed");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_length(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    int i = 0;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    if (dbmp-&gt;di_size &gt; 0) return INT2FIX(dbmp-&gt;di_size);</div><div class='del'>-</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	i++;</div><div class='del'>-    }</div><div class='del'>-    dbmp-&gt;di_size = i;</div><div class='del'>-</div><div class='del'>-    return INT2FIX(i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fdbm_empty_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    int i = 0;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    if (dbmp-&gt;di_size &lt; 0) {</div><div class='del'>-	dbm = dbmp-&gt;di_dbm;</div><div class='del'>-</div><div class='del'>-	for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	    i++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	i = dbmp-&gt;di_size;</div><div class='del'>-    }</div><div class='del'>-    if (i == 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'>-fdbm_each_value(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	rb_yield(rb_tainted_str_new(val.dptr, val.dsize));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</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'>-fdbm_each_key(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	rb_yield(rb_tainted_str_new(key.dptr, key.dsize));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</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'>-fdbm_each_pair(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='del'>-	valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='del'>-	rb_yield(rb_assoc_new(keystr, valstr));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</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'>-fdbm_keys(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	rb_ary_push(ary, rb_tainted_str_new(key.dptr, key.dsize));</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'>-fdbm_values(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	rb_ary_push(ary, rb_tainted_str_new(val.dptr, val.dsize));</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'>-fdbm_has_key(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    val = dbm_fetch(dbm, key);</div><div class='del'>-    if (val.dptr) 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'>-fdbm_has_value(obj, valstr)</div><div class='del'>-    VALUE obj, valstr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='del'>-    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='del'>-	    memcmp(val.dptr, RSTRING(valstr)-&gt;ptr, val.dsize) == 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'>-fdbm_to_a(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	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='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'>-fdbm_to_hash(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-    for (key = dbm_firstkey(dbm); key.dptr; key = dbm_nextkey(dbm)) {</div><div class='del'>-	val = dbm_fetch(dbm, key);</div><div class='del'>-	rb_hash_aset(hash, rb_tainted_str_new(key.dptr, key.dsize),</div><div class='del'>-		           rb_tainted_str_new(val.dptr, val.dsize));</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'>-fdbm_reject(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_hash_delete_if(fdbm_to_hash(obj));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_dbm()</div><div class='del'>-{</div><div class='del'>-    rb_cDBM = rb_define_class("DBM", rb_cObject);</div><div class='del'>-    rb_eDBMError = rb_define_class("DBMError", rb_eStandardError);</div><div class='del'>-    rb_include_module(rb_cDBM, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cDBM, fdbm_alloc);</div><div class='del'>-    rb_define_singleton_method(rb_cDBM, "open", fdbm_s_open, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cDBM, "initialize", fdbm_initialize, -1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cDBM, "[]", fdbm_aref, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "fetch", fdbm_fetch_m, -1);</div><div class='del'>-    rb_define_method(rb_cDBM, "[]=", fdbm_store, 2);</div><div class='del'>-    rb_define_method(rb_cDBM, "store", fdbm_store, 2);</div><div class='del'>-    rb_define_method(rb_cDBM, "index",  fdbm_index, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "indexes",  fdbm_indexes, -1);</div><div class='del'>-    rb_define_method(rb_cDBM, "indices",  fdbm_indexes, -1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cDBM, "length", fdbm_length, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "size", fdbm_length, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "empty?", fdbm_empty_p, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "each", fdbm_each_pair, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "each_value", fdbm_each_value, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "each_key", fdbm_each_key, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "each_pair", fdbm_each_pair, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "keys", fdbm_keys, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "values", fdbm_values, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "shift", fdbm_shift, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "delete", fdbm_delete, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "delete_if", fdbm_delete_if, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "reject!", fdbm_delete_if, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "reject", fdbm_reject, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "clear", fdbm_clear, 0);</div><div class='del'>-    rb_define_method(rb_cDBM,"invert", fdbm_invert, 0);</div><div class='del'>-    rb_define_method(rb_cDBM,"update", fdbm_update, 1);</div><div class='del'>-    rb_define_method(rb_cDBM,"replace", fdbm_replace, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cDBM, "include?", fdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "has_key?", fdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "member?", fdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "has_value?", fdbm_has_value, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "key?", fdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "value?", fdbm_has_value, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cDBM, "to_a", fdbm_to_a, 0);</div><div class='del'>-    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'>-#else</div><div class='del'>-    rb_define_const(rb_cDBM, "VERSION",  rb_str_new2("unknown"));</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dbm/depend b/ext/dbm/depend<br/>deleted file mode 100644<br/>index 5fae80b096..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dbm/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dbm/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-dbm.o: dbm.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/dbm/extconf.rb b/ext/dbm/extconf.rb<br/>deleted file mode 100644<br/>index 0074ab605b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dbm/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dbm/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-dir_config("dbm")</div><div class='del'>-</div><div class='del'>-if dblib = with_config("dbm-type", nil)</div><div class='del'>-  dblib = dblib.split(/[ ,]+/)</div><div class='del'>-else</div><div class='del'>-  dblib = %w(db db2 db1 dbm gdbm gdbm_compat qdbm)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-headers = {</div><div class='del'>-  "db" =&gt; ["db.h"],</div><div class='del'>-  "db1" =&gt; ["db1/ndbm.h", "db1.h", "ndbm.h"],</div><div class='del'>-  "db2" =&gt; ["db2/db.h", "db2.h", "db.h"],</div><div class='del'>-  "dbm" =&gt; ["ndbm.h"],</div><div class='del'>-  "gdbm" =&gt; ["gdbm-ndbm.h", "ndbm.h"],</div><div class='del'>-  "gdbm_compat" =&gt; ["gdbm-ndbm.h", "ndbm.h"],</div><div class='del'>-  "qdbm" =&gt; ["relic.h"],</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def headers.db_check(db)</div><div class='del'>-  db_prefix = nil</div><div class='del'>-  have_gdbm = false</div><div class='del'>-  hsearch = nil</div><div class='del'>-</div><div class='del'>-  case db</div><div class='del'>-  when /^db2?$/</div><div class='del'>-    db_prefix = "__db_n"</div><div class='del'>-    hsearch = "-DDB_DBM_HSEARCH "</div><div class='del'>-  when "gdbm"</div><div class='del'>-    have_gdbm = true</div><div class='del'>-  when "gdbm_compat"</div><div class='del'>-    have_gdbm = true</div><div class='del'>-    have_library("gdbm") or return false</div><div class='del'>-  end</div><div class='del'>-  db_prefix ||= ""</div><div class='del'>-</div><div class='del'>-  if (have_library(db, db_prefix+"dbm_open") || have_func(db_prefix+"dbm_open")) and</div><div class='del'>-      hdr = self.fetch(db, ["ndbm.h"]).find {|hdr| have_type("DBM", hdr, hsearch)}</div><div class='del'>-    have_func(db_prefix+"dbm_clearerr") unless have_gdbm</div><div class='del'>-    $defs &lt;&lt; hsearch if hsearch</div><div class='del'>-    $defs &lt;&lt; '-DDBM_HDR="&lt;'+hdr+'&gt;"'</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'>-if dblib.any? {|db| headers.db_check(db)}</div><div class='del'>-  have_header("cdefs.h")</div><div class='del'>-  have_header("sys/cdefs.h")</div><div class='del'>-  create_makefile("dbm")</div><div class='del'>-end</div><div class='head'>diff --git a/ext/digest/.cvsignore b/ext/digest/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/.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/digest/bubblebabble/.cvsignore b/ext/digest/bubblebabble/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/bubblebabble/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/bubblebabble/.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/digest/bubblebabble/bubblebabble.c b/ext/digest/bubblebabble/bubblebabble.c<br/>deleted file mode 100644<br/>index 3a03ceced0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/bubblebabble/bubblebabble.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/bubblebabble/bubblebabble.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,142 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  bubblebabble.c - BubbleBabble encoding support</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  created at: Fri Oct 13 18:31:42 JST 2006</div><div class='del'>-</div><div class='del'>-  Copyright (C) 2006 Akinori MUSHA</div><div class='del'>-</div><div class='del'>-  $Id$</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "digest.h"</div><div class='del'>-</div><div class='del'>-static ID id_digest;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bubblebabble_str_new(VALUE str_digest)</div><div class='del'>-{</div><div class='del'>-    char *digest;</div><div class='del'>-    size_t digest_len;</div><div class='del'>-    VALUE str;</div><div class='del'>-    char *p;</div><div class='del'>-    int i, j, seed = 1;</div><div class='del'>-    static const char vowels[] = {</div><div class='del'>-        'a', 'e', 'i', 'o', 'u', 'y'</div><div class='del'>-    };</div><div class='del'>-    static const char consonants[] = {</div><div class='del'>-        'b', 'c', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n',</div><div class='del'>-        'p', 'r', 's', 't', 'v', 'z', 'x'</div><div class='del'>-    };</div><div class='del'>-</div><div class='del'>-    StringValue(str_digest);</div><div class='del'>-    digest = RSTRING_PTR(str_digest);</div><div class='del'>-    digest_len = RSTRING_LEN(str_digest);</div><div class='del'>-</div><div class='del'>-    if ((LONG_MAX - 2) / 3 &lt; (digest_len | 1)) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "digest string too long");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, (digest_len | 1) * 3 + 2);</div><div class='del'>-    p = RSTRING_PTR(str);</div><div class='del'>-</div><div class='del'>-    i = j = 0;</div><div class='del'>-    p[j++] = 'x';</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-        unsigned char byte1, byte2;</div><div class='del'>-</div><div class='del'>-        if (i &gt;= digest_len) {</div><div class='del'>-            p[j++] = vowels[seed % 6];</div><div class='del'>-            p[j++] = consonants[16];</div><div class='del'>-            p[j++] = vowels[seed / 6];</div><div class='del'>-            break;</div><div class='del'>-        } </div><div class='del'>-</div><div class='del'>-        byte1 = digest[i++];</div><div class='del'>-        p[j++] = vowels[(((byte1 &gt;&gt; 6) &amp; 3) + seed) % 6];</div><div class='del'>-        p[j++] = consonants[(byte1 &gt;&gt; 2) &amp; 15];</div><div class='del'>-        p[j++] = vowels[((byte1 &amp; 3) + (seed / 6)) % 6];</div><div class='del'>-</div><div class='del'>-        if (i &gt;= digest_len) {</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        byte2 = digest[i++];</div><div class='del'>-        p[j++] = consonants[(byte2 &gt;&gt; 4) &amp; 15];</div><div class='del'>-        p[j++] = '-';</div><div class='del'>-        p[j++] = consonants[byte2 &amp; 15];</div><div class='del'>-</div><div class='del'>-        seed = (seed * 5 + byte1 * 7 + byte2) % 36;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    p[j] = 'x';</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'>- * call-seq:</div><div class='del'>- *     Digest.bubblebabble(string) -&gt; bubblebabble_string</div><div class='del'>- *</div><div class='del'>- * Returns a BubbleBabble encoded version of a given _string_.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_s_bubblebabble(VALUE klass, VALUE str)</div><div class='del'>-{</div><div class='del'>-    return bubblebabble_str_new(str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     Digest::Class.bubblebabble(string, ...) -&gt; hash_string</div><div class='del'>- *</div><div class='del'>- * Returns the BubbleBabble encoded hash value of a given _string_.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_class_s_bubblebabble(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    return bubblebabble_str_new(rb_funcall2(klass, id_digest, argc, argv));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.bubblebabble -&gt; hash_string</div><div class='del'>- *</div><div class='del'>- * Returns the resulting hash value in a Bubblebabble encoded form.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_bubblebabble(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return bubblebabble_str_new(rb_funcall(self, id_digest, 0));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * This module adds some methods to Digest classes to perform</div><div class='del'>- * BubbleBabble encoding.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_bubblebabble(void)</div><div class='del'>-{</div><div class='del'>-    VALUE mDigest, mDigest_Instance, cDigest_Class;</div><div class='del'>-</div><div class='del'>-    rb_require("digest");</div><div class='del'>-</div><div class='del'>-    mDigest = rb_path2class("Digest");</div><div class='del'>-    mDigest_Instance = rb_path2class("Digest::Instance");</div><div class='del'>-    cDigest_Class = rb_path2class("Digest::Class");</div><div class='del'>-</div><div class='del'>-    /* Digest::bubblebabble() */</div><div class='del'>-    rb_define_module_function(mDigest, "bubblebabble", rb_digest_s_bubblebabble, 1);</div><div class='del'>-</div><div class='del'>-    /* Digest::Class::bubblebabble() */</div><div class='del'>-    rb_define_singleton_method(cDigest_Class, "bubblebabble", rb_digest_class_s_bubblebabble, -1);</div><div class='del'>-</div><div class='del'>-    /* Digest::Instance#bubblebabble() */</div><div class='del'>-    rb_define_method(mDigest_Instance, "bubblebabble", rb_digest_instance_bubblebabble, 0);</div><div class='del'>-</div><div class='del'>-    id_digest = rb_intern("digest");</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/bubblebabble/depend b/ext/digest/bubblebabble/depend<br/>deleted file mode 100644<br/>index b20148ded4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/bubblebabble/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/bubblebabble/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-bubblebabble.o: bubblebabble.c $(srcdir)/../digest.h $(hdrdir)/ruby.h \</div><div class='del'>-  $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h \</div><div class='del'>-  $(srcdir)/../defs.h</div><div class='head'>diff --git a/ext/digest/bubblebabble/extconf.rb b/ext/digest/bubblebabble/extconf.rb<br/>deleted file mode 100644<br/>index 53cb83934a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/bubblebabble/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/bubblebabble/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-$defs &lt;&lt; "-DHAVE_CONFIG_H"</div><div class='del'>-$INCFLAGS &lt;&lt; " -I$(srcdir)/.."</div><div class='del'>-</div><div class='del'>-create_makefile('digest/bubblebabble')</div><div class='head'>diff --git a/ext/digest/defs.h b/ext/digest/defs.h<br/>deleted file mode 100644<br/>index b9a3470e65..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/defs.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/defs.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-/* -*- C -*-</div><div class='del'>- * $Id$</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef DEFS_H</div><div class='del'>-#define DEFS_H</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_SYS_CDEFS_H)</div><div class='del'>-# include &lt;sys/cdefs.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#if !defined(__BEGIN_DECLS)</div><div class='del'>-# define __BEGIN_DECLS</div><div class='del'>-# define __END_DECLS</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_INTTYPES_H)</div><div class='del'>-# include &lt;inttypes.h&gt;</div><div class='del'>-#elif !defined __CYGWIN__ || !defined __uint8_t_defined</div><div class='del'>-  typedef unsigned char uint8_t;</div><div class='del'>-  typedef unsigned int  uint32_t;</div><div class='del'>-# if SIZEOF_LONG == 8</div><div class='del'>-  typedef unsigned long uint64_t;</div><div class='del'>-# elif SIZEOF_LONG_LONG == 8</div><div class='del'>-  typedef unsigned LONG_LONG uint64_t;</div><div class='del'>-# else</div><div class='del'>-#  define NO_UINT64_T</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif /* DEFS_H */</div><div class='head'>diff --git a/ext/digest/depend b/ext/digest/depend<br/>deleted file mode 100644<br/>index 43601a208f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-digest.o: digest.c digest.h $(hdrdir)/ruby.h $(topdir)/config.h \</div><div class='del'>-  $(hdrdir)/defines.h $(hdrdir)/intern.h</div><div class='head'>diff --git a/ext/digest/digest.c b/ext/digest/digest.c<br/>deleted file mode 100644<br/>index 0b910e8c47..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/digest.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/digest.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,642 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  digest.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  created at: Fri May 25 08:57:27 JST 2001</div><div class='del'>-</div><div class='del'>-  Copyright (C) 1995-2001 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2001-2006 Akinori MUSHA</div><div class='del'>-</div><div class='del'>-  $RoughId: digest.c,v 1.16 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-  $Id$</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "digest.h"</div><div class='del'>-</div><div class='del'>-static VALUE rb_mDigest;</div><div class='del'>-static VALUE rb_mDigest_Instance;</div><div class='del'>-static VALUE rb_cDigest_Class;</div><div class='del'>-static VALUE rb_cDigest_Base;</div><div class='del'>-</div><div class='del'>-static ID id_reset, id_update, id_finish, id_digest, id_hexdigest, id_digest_length;</div><div class='del'>-static ID id_metadata;</div><div class='del'>-</div><div class='del'>-RUBY_EXTERN void Init_digest_base(void);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-module: Digest</div><div class='del'>- *</div><div class='del'>- * This module provides a framework for message digest libraries.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hexencode_str_new(VALUE str_digest)</div><div class='del'>-{</div><div class='del'>-    char *digest;</div><div class='del'>-    size_t digest_len;</div><div class='del'>-    int i;</div><div class='del'>-    VALUE str;</div><div class='del'>-    char *p;</div><div class='del'>-    static const char hex[] = {</div><div class='del'>-        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',</div><div class='del'>-        'a', 'b', 'c', 'd', 'e', 'f'</div><div class='del'>-    };</div><div class='del'>-</div><div class='del'>-    StringValue(str_digest);</div><div class='del'>-    digest = RSTRING_PTR(str_digest);</div><div class='del'>-    digest_len = RSTRING_LEN(str_digest);</div><div class='del'>-</div><div class='del'>-    if (LONG_MAX / 2 &lt; digest_len) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "digest string too long");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, digest_len * 2);</div><div class='del'>-</div><div class='del'>-    for (i = 0, p = RSTRING_PTR(str); i &lt; digest_len; i++) {</div><div class='del'>-        unsigned char byte = digest[i];</div><div class='del'>-</div><div class='del'>-        p[i + i]     = hex[byte &gt;&gt; 4];</div><div class='del'>-        p[i + i + 1] = hex[byte &amp; 0x0f];</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     Digest.hexencode(string) -&gt; hexencoded_string</div><div class='del'>- *</div><div class='del'>- * Generates a hex-encoded version of a given _string_.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_s_hexencode(VALUE klass, VALUE str)</div><div class='del'>-{</div><div class='del'>-    return hexencode_str_new(str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-module: Digest::Instance</div><div class='del'>- *</div><div class='del'>- * This module provides instance methods for a digest implementation</div><div class='del'>- * object to calculate message digest values.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.update(string) -&gt; digest_obj</div><div class='del'>- *     digest_obj &lt;&lt; string -&gt; digest_obj</div><div class='del'>- *</div><div class='del'>- * Updates the digest using a given _string_ and returns self.</div><div class='del'>- *</div><div class='del'>- * The update() method and the left-shift operator are overridden by</div><div class='del'>- * each implementation subclass. (One should be an alias for the</div><div class='del'>- * other)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_update(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eRuntimeError, "%s does not implement update()", RSTRING_PTR(rb_inspect(self)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.instance_eval { finish } -&gt; digest_obj</div><div class='del'>- *</div><div class='del'>- * Finishes the digest and returns the resulting hash value.</div><div class='del'>- *</div><div class='del'>- * This method is overridden by each implementation subclass and often</div><div class='del'>- * made private, because some of those subclasses may leave internal</div><div class='del'>- * data uninitialized.  Do not call this method from outside.  Use</div><div class='del'>- * #digest!() instead, which ensures that internal data be reset for</div><div class='del'>- * security reasons.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_finish(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eRuntimeError, "%s does not implement finish()", RSTRING_PTR(rb_inspect(self)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.reset -&gt; digest_obj</div><div class='del'>- *</div><div class='del'>- * Resets the digest to the initial state and returns self.</div><div class='del'>- *</div><div class='del'>- * This method is overridden by each implementation subclass.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_reset(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eRuntimeError, "%s does not implement reset()", RSTRING_PTR(rb_inspect(self)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.new -&gt; another_digest_obj</div><div class='del'>- *</div><div class='del'>- * Returns a new, initialized copy of the digest object.  Equivalent</div><div class='del'>- * to digest_obj.clone().reset().</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_new(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE clone = rb_obj_clone(self);</div><div class='del'>-    rb_funcall(clone, id_reset, 0);</div><div class='del'>-    return clone;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.digest -&gt; string</div><div class='del'>- *     digest_obj.digest(string) -&gt; string</div><div class='del'>- *</div><div class='del'>- * If none is given, returns the resulting hash value of the digest,</div><div class='del'>- * keeping the digest's state.</div><div class='del'>- *</div><div class='del'>- * If a _string_ is given, returns the hash value for the given</div><div class='del'>- * _string_, resetting the digest to the initial state before and</div><div class='del'>- * after the process.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_digest(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE str, value;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;str) &gt; 0) {</div><div class='del'>-        rb_funcall(self, id_reset, 0);</div><div class='del'>-        rb_funcall(self, id_update, 1, str);</div><div class='del'>-        value = rb_funcall(self, id_finish, 0);</div><div class='del'>-        rb_funcall(self, id_reset, 0);</div><div class='del'>-    } else {</div><div class='del'>-        VALUE clone = rb_obj_clone(self);</div><div class='del'>-</div><div class='del'>-        value = rb_funcall(clone, id_finish, 0);</div><div class='del'>-        rb_funcall(clone, id_reset, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return value;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.digest! -&gt; string</div><div class='del'>- *</div><div class='del'>- * Returns the resulting hash value and resets the digest to the</div><div class='del'>- * initial state.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_digest_bang(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE value = rb_funcall(self, id_finish, 0);</div><div class='del'>-    rb_funcall(self, id_reset, 0);</div><div class='del'>-</div><div class='del'>-    return value;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.hexdigest -&gt; string</div><div class='del'>- *     digest_obj.hexdigest(string) -&gt; string</div><div class='del'>- *</div><div class='del'>- * If none is given, returns the resulting hash value of the digest in</div><div class='del'>- * a hex-encoded form, keeping the digest's state.</div><div class='del'>- *</div><div class='del'>- * If a _string_ is given, returns the hash value for the given</div><div class='del'>- * _string_ in a hex-encoded form, resetting the digest to the initial</div><div class='del'>- * state before and after the process.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE str, value;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;str) &gt; 0) {</div><div class='del'>-        rb_funcall(self, id_reset, 0);</div><div class='del'>-        rb_funcall(self, id_update, 1, str);</div><div class='del'>-        value = rb_funcall(self, id_finish, 0);</div><div class='del'>-        rb_funcall(self, id_reset, 0);</div><div class='del'>-    } else {</div><div class='del'>-        VALUE clone = rb_obj_clone(self);</div><div class='del'>-</div><div class='del'>-        value = rb_funcall(clone, id_finish, 0);</div><div class='del'>-        rb_funcall(clone, id_reset, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return hexencode_str_new(value);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.hexdigest! -&gt; string</div><div class='del'>- *</div><div class='del'>- * Returns the resulting hash value and resets the digest to the</div><div class='del'>- * initial state.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_hexdigest_bang(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE value = rb_funcall(self, id_finish, 0);</div><div class='del'>-    rb_funcall(self, id_reset, 0);</div><div class='del'>-</div><div class='del'>-    return hexencode_str_new(value);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.to_s -&gt; string</div><div class='del'>- *</div><div class='del'>- * Returns digest_obj.hexdigest().</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_to_s(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(self, id_hexdigest, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.inspect -&gt; string</div><div class='del'>- *</div><div class='del'>- * Creates a printable version of the digest object.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    size_t digest_len = 32;	/* about this size at least */</div><div class='del'>-    char *cname;</div><div class='del'>-</div><div class='del'>-    cname = rb_obj_classname(self);</div><div class='del'>-</div><div class='del'>-    /* #&lt;Digest::ClassName: xxxxx...xxxx&gt; */</div><div class='del'>-    str = rb_str_buf_new(2 + strlen(cname) + 2 + digest_len * 2 + 1);</div><div class='del'>-    rb_str_buf_cat2(str, "#&lt;");</div><div class='del'>-    rb_str_buf_cat2(str, cname);</div><div class='del'>-    rb_str_buf_cat2(str, ": ");</div><div class='del'>-    rb_str_buf_append(str, rb_digest_instance_hexdigest(0, 0, self));</div><div class='del'>-    rb_str_buf_cat2(str, "&gt;");</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj == another_digest_obj -&gt; boolean</div><div class='del'>- *     digest_obj == string -&gt; boolean</div><div class='del'>- *</div><div class='del'>- * If a string is given, checks whether it is equal to the hex-encoded</div><div class='del'>- * hash value of the digest object.  If another digest instance is</div><div class='del'>- * given, checks whether they have the same hash value.  Otherwise</div><div class='del'>- * returns false.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_equal(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-    VALUE str1, str2;</div><div class='del'>-</div><div class='del'>-    if (rb_obj_is_kind_of(other, rb_mDigest_Instance) == Qtrue) {</div><div class='del'>-        str1 = rb_digest_instance_digest(0, 0, self);</div><div class='del'>-        str2 = rb_digest_instance_digest(0, 0, other);</div><div class='del'>-    } else {</div><div class='del'>-        str1 = rb_digest_instance_to_s(self);</div><div class='del'>-        str2 = other;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* never blindly assume that subclass methods return strings */</div><div class='del'>-    StringValue(str1);</div><div class='del'>-    StringValue(str2);</div><div class='del'>-</div><div class='del'>-    if (RSTRING_LEN(str1) == RSTRING_LEN(str2) &amp;&amp;</div><div class='del'>-	rb_str_cmp(str1, str2) == 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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.digest_length -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Returns the length of the hash value of the digest.</div><div class='del'>- *</div><div class='del'>- * This method should be overridden by each implementation subclass.</div><div class='del'>- * If not, digest_obj.digest().length() is returned.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_digest_length(VALUE self)</div><div class='del'>-{</div><div class='del'>-    /* subclasses really should redefine this method */</div><div class='del'>-    VALUE digest = rb_digest_instance_digest(0, 0, self);</div><div class='del'>-</div><div class='del'>-    /* never blindly assume that #digest() returns a string */</div><div class='del'>-    StringValue(digest);</div><div class='del'>-    return INT2NUM(RSTRING_LEN(digest));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.length -&gt; integer</div><div class='del'>- *     digest_obj.size -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Returns digest_obj.digest_length().</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_length(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(self, id_digest_length, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     digest_obj.block_length -&gt; integer</div><div class='del'>- *</div><div class='del'>- * Returns the block length of the digest.</div><div class='del'>- *</div><div class='del'>- * This method is overridden by each implementation subclass.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_instance_block_length(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eRuntimeError, "%s does not implement block_length()", RSTRING_PTR(rb_inspect(self)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Digest::Class</div><div class='del'>- *</div><div class='del'>- * This module stands as a base class for digest implementation</div><div class='del'>- * classes.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     Digest::Class.digest(string, *parameters) -&gt; hash_string</div><div class='del'>- *</div><div class='del'>- * Returns the hash value of a given _string_.  This is equivalent to</div><div class='del'>- * Digest::Class.new(*parameters).digest(string), where extra</div><div class='del'>- * _parameters_, if any, are passed through to the constructor and the</div><div class='del'>- * _string_ is passed to #digest().</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_class_s_digest(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    volatile VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (argc &lt; 1) {</div><div class='del'>-        rb_raise(rb_eArgError, "no data given");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    str = *argv++;</div><div class='del'>-    argc--;</div><div class='del'>-</div><div class='del'>-    StringValue(str);</div><div class='del'>-</div><div class='del'>-    obj = rb_obj_alloc(klass);</div><div class='del'>-    rb_obj_call_init(obj, argc, argv);</div><div class='del'>-</div><div class='del'>-    return rb_funcall(obj, id_digest, 1, str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     Digest::Class.hexdigest(string[, ...]) -&gt; hash_string</div><div class='del'>- *</div><div class='del'>- * Returns the hex-encoded hash value of a given _string_.  This is</div><div class='del'>- * almost equivalent to</div><div class='del'>- * Digest.hexencode(Digest::Class.new(*parameters).digest(string)).</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_class_s_hexdigest(int argc, VALUE *argv, VALUE klass)</div><div class='del'>-{</div><div class='del'>-    return hexencode_str_new(rb_funcall2(klass, id_digest, argc, argv));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Digest::Base</div><div class='del'>- *</div><div class='del'>- * This abstract class provides a common interface to message digest</div><div class='del'>- * implementation classes written in C.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static rb_digest_metadata_t *</div><div class='del'>-get_digest_base_metadata(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    VALUE p;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    rb_digest_metadata_t *algo;</div><div class='del'>-</div><div class='del'>-    for (p = klass; p; p = RCLASS(p)-&gt;super) {</div><div class='del'>-        if (rb_ivar_defined(p, id_metadata)) {</div><div class='del'>-            obj = rb_ivar_get(p, id_metadata);</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!p)</div><div class='del'>-        rb_raise(rb_eRuntimeError, "Digest::Base cannot be directly inherited in Ruby");</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, rb_digest_metadata_t, algo);</div><div class='del'>-</div><div class='del'>-    switch (algo-&gt;api_version) {</div><div class='del'>-      case 2:</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-      /*</div><div class='del'>-       * put conversion here if possible when API is updated</div><div class='del'>-       */</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-        rb_raise(rb_eRuntimeError, "Incompatible digest API version");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return algo;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_base_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    rb_digest_metadata_t *algo;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    void *pctx;</div><div class='del'>-</div><div class='del'>-    if (klass == rb_cDigest_Base) {</div><div class='del'>-	rb_raise(rb_eNotImpError, "Digest::Base is an abstract class");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    algo = get_digest_base_metadata(klass);</div><div class='del'>-</div><div class='del'>-    pctx = xmalloc(algo-&gt;ctx_size);</div><div class='del'>-    algo-&gt;init_func(pctx);</div><div class='del'>-</div><div class='del'>-    obj = Data_Wrap_Struct(klass, 0, free, pctx);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_base_copy(VALUE copy, VALUE obj)</div><div class='del'>-{</div><div class='del'>-    rb_digest_metadata_t *algo;</div><div class='del'>-    void *pctx1, *pctx2;</div><div class='del'>-</div><div class='del'>-    if (copy == obj) return copy;</div><div class='del'>-</div><div class='del'>-    rb_check_frozen(copy);</div><div class='del'>-</div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(copy));</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, void, pctx1);</div><div class='del'>-    Data_Get_Struct(copy, void, pctx2);</div><div class='del'>-    memcpy(pctx2, pctx1, algo-&gt;ctx_size);</div><div class='del'>-</div><div class='del'>-    return copy;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_base_reset(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_digest_metadata_t *algo;</div><div class='del'>-    void *pctx;</div><div class='del'>-</div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(self));</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, void, pctx);</div><div class='del'>-</div><div class='del'>-    algo-&gt;init_func(pctx);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_base_update(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    rb_digest_metadata_t *algo;</div><div class='del'>-    void *pctx;</div><div class='del'>-</div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(self));</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, void, pctx);</div><div class='del'>-</div><div class='del'>-    StringValue(str);</div><div class='del'>-    algo-&gt;update_func(pctx, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str));</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_base_finish(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_digest_metadata_t *algo;</div><div class='del'>-    void *pctx;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(self));</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, void, pctx);</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, algo-&gt;digest_len);</div><div class='del'>-    algo-&gt;finish_func(pctx, (unsigned char *)RSTRING_PTR(str));</div><div class='del'>-</div><div class='del'>-    /* avoid potential coredump caused by use of a finished context */</div><div class='del'>-    algo-&gt;init_func(pctx);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_base_digest_length(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_digest_metadata_t *algo;</div><div class='del'>-</div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(self));</div><div class='del'>-</div><div class='del'>-    return INT2NUM(algo-&gt;digest_len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-rb_digest_base_block_length(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_digest_metadata_t *algo;</div><div class='del'>-</div><div class='del'>-    algo = get_digest_base_metadata(rb_obj_class(self));</div><div class='del'>-</div><div class='del'>-    return INT2NUM(algo-&gt;block_len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_digest(void)</div><div class='del'>-{</div><div class='del'>-    id_reset           = rb_intern("reset");</div><div class='del'>-    id_update          = rb_intern("update");</div><div class='del'>-    id_finish          = rb_intern("finish");</div><div class='del'>-    id_digest          = rb_intern("digest");</div><div class='del'>-    id_hexdigest       = rb_intern("hexdigest");</div><div class='del'>-    id_digest_length   = rb_intern("digest_length");</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * module Digest</div><div class='del'>-     */</div><div class='del'>-    rb_mDigest = rb_define_module("Digest");</div><div class='del'>-</div><div class='del'>-    /* module functions */</div><div class='del'>-    rb_define_module_function(rb_mDigest, "hexencode", rb_digest_s_hexencode, 1);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * module Digest::Instance</div><div class='del'>-     */</div><div class='del'>-    rb_mDigest_Instance = rb_define_module_under(rb_mDigest, "Instance");</div><div class='del'>-</div><div class='del'>-    /* instance methods that should be overridden */</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "update", rb_digest_instance_update, 1);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "&lt;&lt;", rb_digest_instance_update, 1);</div><div class='del'>-    rb_define_private_method(rb_mDigest_Instance, "finish", rb_digest_instance_finish, 0);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "reset", rb_digest_instance_reset, 0);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "digest_length", rb_digest_instance_digest_length, 0);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "block_length", rb_digest_instance_block_length, 0);</div><div class='del'>-</div><div class='del'>-    /* instance methods that may be overridden */</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "==", rb_digest_instance_equal, 1);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "inspect", rb_digest_instance_inspect, 0);</div><div class='del'>-</div><div class='del'>-    /* instance methods that need not usually be overridden */</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "new", rb_digest_instance_new, 0);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "digest", rb_digest_instance_digest, -1);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "digest!", rb_digest_instance_digest_bang, 0);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "hexdigest", rb_digest_instance_hexdigest, -1);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "hexdigest!", rb_digest_instance_hexdigest_bang, 0);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "to_s", rb_digest_instance_to_s, 0);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "length", rb_digest_instance_length, 0);</div><div class='del'>-    rb_define_method(rb_mDigest_Instance, "size", rb_digest_instance_length, 0);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * class Digest::Class</div><div class='del'>-     */</div><div class='del'>-    rb_cDigest_Class = rb_define_class_under(rb_mDigest, "Class", rb_cObject);</div><div class='del'>-    rb_include_module(rb_cDigest_Class, rb_mDigest_Instance);</div><div class='del'>-</div><div class='del'>-    /* class methods */</div><div class='del'>-    rb_define_singleton_method(rb_cDigest_Class, "digest", rb_digest_class_s_digest, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cDigest_Class, "hexdigest", rb_digest_class_s_hexdigest, -1);</div><div class='del'>-</div><div class='del'>-    id_metadata = rb_intern("metadata");</div><div class='del'>-</div><div class='del'>-    /* class Digest::Base &lt; Digest::Class */</div><div class='del'>-    rb_cDigest_Base = rb_define_class_under(rb_mDigest, "Base", rb_cDigest_Class);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cDigest_Base, rb_digest_base_alloc);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cDigest_Base, "initialize_copy",  rb_digest_base_copy, 1);</div><div class='del'>-    rb_define_method(rb_cDigest_Base, "reset", rb_digest_base_reset, 0);</div><div class='del'>-    rb_define_method(rb_cDigest_Base, "update", rb_digest_base_update, 1);</div><div class='del'>-    rb_define_method(rb_cDigest_Base, "&lt;&lt;", rb_digest_base_update, 1);</div><div class='del'>-    rb_define_private_method(rb_cDigest_Base, "finish", rb_digest_base_finish, 0);</div><div class='del'>-    rb_define_method(rb_cDigest_Base, "digest_length", rb_digest_base_digest_length, 0);</div><div class='del'>-    rb_define_method(rb_cDigest_Base, "block_length", rb_digest_base_block_length, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/digest.h b/ext/digest/digest.h<br/>deleted file mode 100644<br/>index 6e4906c859..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/digest.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/digest.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  digest.h - header file for ruby digest modules</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  created at: Fri May 25 08:54:56 JST 2001</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  Copyright (C) 2001-2006 Akinori MUSHA</div><div class='del'>-</div><div class='del'>-  $RoughId: digest.h,v 1.3 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-  $Id$</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#define RUBY_DIGEST_API_VERSION	2</div><div class='del'>-</div><div class='del'>-typedef void (*rb_digest_hash_init_func_t)(void *);</div><div class='del'>-typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t);</div><div class='del'>-typedef void (*rb_digest_hash_finish_func_t)(void *, unsigned char *);</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-    int api_version;</div><div class='del'>-    size_t digest_len;</div><div class='del'>-    size_t block_len;</div><div class='del'>-    size_t ctx_size;</div><div class='del'>-    rb_digest_hash_init_func_t init_func;</div><div class='del'>-    rb_digest_hash_update_func_t update_func;</div><div class='del'>-    rb_digest_hash_finish_func_t finish_func;</div><div class='del'>-} rb_digest_metadata_t;</div><div class='head'>diff --git a/ext/digest/extconf.rb b/ext/digest/extconf.rb<br/>deleted file mode 100644<br/>index cf9127ecc0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-# $RoughId: extconf.rb,v 1.6 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require "mkmf"</div><div class='del'>-</div><div class='del'>-$INSTALLFILES = {</div><div class='del'>-  "digest.h" =&gt; "$(RUBYARCHDIR)"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-create_makefile("digest")</div><div class='head'>diff --git a/ext/digest/lib/digest.rb b/ext/digest/lib/digest.rb<br/>deleted file mode 100644<br/>index 0c4ee3c2cc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/lib/digest.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/lib/digest.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,50 +0,0 @@</div><div class='del'>-require 'digest.so'</div><div class='del'>-</div><div class='del'>-module Digest</div><div class='del'>-  def self.const_missing(name)</div><div class='del'>-    case name</div><div class='del'>-    when :SHA256, :SHA384, :SHA512</div><div class='del'>-      lib = 'digest/sha2.so'</div><div class='del'>-    else</div><div class='del'>-      lib = File.join('digest', name.to_s.downcase)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      require lib</div><div class='del'>-    rescue LoadError =&gt; e</div><div class='del'>-      raise LoadError, "library not found for class Digest::#{name} -- #{lib}", caller(1)</div><div class='del'>-    end</div><div class='del'>-    unless Digest.const_defined?(name)</div><div class='del'>-      raise NameError, "uninitialized constant Digest::#{name}", caller(1)</div><div class='del'>-    end</div><div class='del'>-    Digest.const_get(name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class ::Digest::Class</div><div class='del'>-    # creates a digest object and reads a given file, _name_.</div><div class='del'>-    # </div><div class='del'>-    #  p Digest::SHA256.file("X11R6.8.2-src.tar.bz2").hexdigest</div><div class='del'>-    #  # =&gt; "f02e3c85572dc9ad7cb77c2a638e3be24cc1b5bea9fdbb0b0299c9668475c534"</div><div class='del'>-    def self.file(name)</div><div class='del'>-      new.file(name)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module Instance</div><div class='del'>-    # updates the digest with the contents of a given file _name_ and</div><div class='del'>-    # returns self.</div><div class='del'>-    def file(name)</div><div class='del'>-      File.open(name, "rb") {|f|</div><div class='del'>-        buf = ""</div><div class='del'>-        while f.read(16384, buf)</div><div class='del'>-          update buf</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'>-def Digest(name)</div><div class='del'>-  Digest.const_get(name)</div><div class='del'>-end</div><div class='head'>diff --git a/ext/digest/lib/md5.rb b/ext/digest/lib/md5.rb<br/>deleted file mode 100644<br/>index c399f2de1d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/lib/md5.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/lib/md5.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-# just for compatibility; requiring "md5" is obsoleted</div><div class='del'>-#</div><div class='del'>-# $RoughId: md5.rb,v 1.4 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require 'digest/md5'</div><div class='del'>-</div><div class='del'>-class MD5 &lt; Digest::MD5</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-    alias orig_new new</div><div class='del'>-    def new(str = nil)</div><div class='del'>-      if str</div><div class='del'>-        orig_new.update(str)</div><div class='del'>-      else</div><div class='del'>-        orig_new</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def md5(*args)</div><div class='del'>-      new(*args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/digest/lib/sha1.rb b/ext/digest/lib/sha1.rb<br/>deleted file mode 100644<br/>index 4446e12e8d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/lib/sha1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/lib/sha1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-# just for compatibility; requiring "sha1" is obsoleted</div><div class='del'>-#</div><div class='del'>-# $RoughId: sha1.rb,v 1.4 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require 'digest/sha1'</div><div class='del'>-</div><div class='del'>-class SHA1 &lt; Digest::SHA1</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-    alias orig_new new</div><div class='del'>-    def new(str = nil)</div><div class='del'>-      if str</div><div class='del'>-        orig_new.update(str)</div><div class='del'>-      else</div><div class='del'>-        orig_new</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def sha1(*args)</div><div class='del'>-      new(*args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/digest/md5/.cvsignore b/ext/digest/md5/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/.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/digest/md5/depend b/ext/digest/md5/depend<br/>deleted file mode 100644<br/>index 8eaec20b4b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-md5.o: md5.c md5.h $(srcdir)/../defs.h $(hdrdir)/ruby.h $(topdir)/config.h \</div><div class='del'>-  $(hdrdir)/defines.h $(hdrdir)/intern.h</div><div class='del'>-md5init.o: md5init.c $(srcdir)/../digest.h $(hdrdir)/ruby.h \</div><div class='del'>-  $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h md5.h \</div><div class='del'>-  $(srcdir)/../defs.h</div><div class='del'>-md5ossl.o: md5ossl.h</div><div class='head'>diff --git a/ext/digest/md5/extconf.rb b/ext/digest/md5/extconf.rb<br/>deleted file mode 100644<br/>index 018f8ccb02..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +0,0 @@</div><div class='del'>-# $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require "mkmf"</div><div class='del'>-</div><div class='del'>-$defs &lt;&lt; "-DHAVE_CONFIG_H"</div><div class='del'>-$INCFLAGS &lt;&lt; " -I$(srcdir)/.."</div><div class='del'>-</div><div class='del'>-$objs = [ "md5init.#{$OBJEXT}" ]</div><div class='del'>-</div><div class='del'>-dir_config("openssl")</div><div class='del'>-</div><div class='del'>-if !with_config("bundled-md5") &amp;&amp;</div><div class='del'>-    have_library("crypto") &amp;&amp; have_header("openssl/md5.h")</div><div class='del'>-  $objs &lt;&lt; "md5ossl.#{$OBJEXT}"</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  $objs &lt;&lt; "md5.#{$OBJEXT}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-have_header("sys/cdefs.h")</div><div class='del'>-</div><div class='del'>-have_header("inttypes.h")</div><div class='del'>-</div><div class='del'>-have_header("unistd.h")</div><div class='del'>-</div><div class='del'>-$preload = %w[digest]</div><div class='del'>-</div><div class='del'>-create_makefile("digest/md5")</div><div class='head'>diff --git a/ext/digest/md5/md5.c b/ext/digest/md5/md5.c<br/>deleted file mode 100644<br/>index 993bc47a06..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,420 +0,0 @@</div><div class='del'>-/*</div><div class='del'>-  Copyright (C) 1999, 2000 Aladdin Enterprises.  All rights reserved.</div><div class='del'>-</div><div class='del'>-  This software is provided 'as-is', without any express or implied</div><div class='del'>-  warranty.  In no event will the authors be held liable for any damages</div><div class='del'>-  arising from the use of this software.</div><div class='del'>-</div><div class='del'>-  Permission is granted to anyone to use this software for any purpose,</div><div class='del'>-  including commercial applications, and to alter it and redistribute it</div><div class='del'>-  freely, subject to the following restrictions:</div><div class='del'>-</div><div class='del'>-  1. The origin of this software must not be misrepresented; you must not</div><div class='del'>-     claim that you wrote the original software. If you use this software</div><div class='del'>-     in a product, an acknowledgment in the product documentation would be</div><div class='del'>-     appreciated but is not required.</div><div class='del'>-  2. Altered source versions must be plainly marked as such, and must not be</div><div class='del'>-     misrepresented as being the original software.</div><div class='del'>-  3. This notice may not be removed or altered from any source distribution.</div><div class='del'>-</div><div class='del'>-  L. Peter Deutsch</div><div class='del'>-  ghost@aladdin.com</div><div class='del'>-</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-  Independent implementation of MD5 (RFC 1321).</div><div class='del'>-</div><div class='del'>-  This code implements the MD5 Algorithm defined in RFC 1321.</div><div class='del'>-  It is derived directly from the text of the RFC and not from the</div><div class='del'>-  reference implementation.</div><div class='del'>-</div><div class='del'>-  The original and principal author of md5.c is L. Peter Deutsch</div><div class='del'>-  &lt;ghost@aladdin.com&gt;.  Other authors are noted in the change history</div><div class='del'>-  that follows (in reverse chronological order):</div><div class='del'>-</div><div class='del'>-  2000-07-03 lpd Patched to eliminate warnings about "constant is</div><div class='del'>-		unsigned in ANSI C, signed in traditional";</div><div class='del'>-		made test program self-checking.</div><div class='del'>-  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.</div><div class='del'>-  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).</div><div class='del'>-  1999-05-03 lpd Original version.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-  This code was modified for use in Ruby.</div><div class='del'>-</div><div class='del'>-  - Akinori MUSHA &lt;knu@idaemons.org&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*$OrigId: md5c.c,v 1.2 2001/03/26 08:57:14 matz Exp $ */</div><div class='del'>-/*$RoughId: md5.c,v 1.2 2001/07/13 19:48:41 knu Exp $ */</div><div class='del'>-/*$Id$ */</div><div class='del'>-</div><div class='del'>-#include "md5.h"</div><div class='del'>-</div><div class='del'>-#ifdef TEST</div><div class='del'>-/*</div><div class='del'>- * Compile with -DTEST to create a self-contained executable test program.</div><div class='del'>- * The test program should print out the same values as given in section</div><div class='del'>- * A.5 of RFC 1321, reproduced below.</div><div class='del'>- */</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-main()</div><div class='del'>-{</div><div class='del'>-    static const char *const test[7*2] = {</div><div class='del'>-	"", "d41d8cd98f00b204e9800998ecf8427e",</div><div class='del'>-	"a", "0cc175b9c0f1b6a831c399e269772661",</div><div class='del'>-	"abc", "900150983cd24fb0d6963f7d28e17f72",</div><div class='del'>-	"message digest", "f96b697d7cb7938d525a2f31aaf161d0",</div><div class='del'>-	"abcdefghijklmnopqrstuvwxyz", "c3fcd3d76192e4007dfb496cca67e13b",</div><div class='del'>-	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",</div><div class='del'>-				"d174ab98d277d9f5a5611c2c9f419d9f",</div><div class='del'>-	"12345678901234567890123456789012345678901234567890123456789012345678901234567890", "57edf4a22be3c955ac49da2e2107b67a"</div><div class='del'>-    };</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; 7*2; i += 2) {</div><div class='del'>-	MD5_CTX state;</div><div class='del'>-	uint8_t digest[16];</div><div class='del'>-	char hex_output[16*2 + 1];</div><div class='del'>-	int di;</div><div class='del'>-</div><div class='del'>-	MD5_Init(&amp;state);</div><div class='del'>-	MD5_Update(&amp;state, (const uint8_t *)test[i], strlen(test[i]));</div><div class='del'>-	MD5_Final(digest, &amp;state);</div><div class='del'>-	printf("MD5 (\"%s\") = ", test[i]);</div><div class='del'>-	for (di = 0; di &lt; 16; ++di)</div><div class='del'>-	    sprintf(hex_output + di * 2, "%02x", digest[di]);</div><div class='del'>-	puts(hex_output);</div><div class='del'>-	if (strcmp(hex_output, test[i + 1]))</div><div class='del'>-	    printf("**** ERROR, should be: %s\n", test[i + 1]);</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-#endif /* TEST */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * For reference, here is the program that computed the T values.</div><div class='del'>- */</div><div class='del'>-#ifdef COMPUTE_T_VALUES</div><div class='del'>-#include &lt;math.h&gt;</div><div class='del'>-main()</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    for (i = 1; i &lt;= 64; ++i) {</div><div class='del'>-	unsigned long v = (unsigned long)(4294967296.0 * fabs(sin((double)i)));</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * The following nonsense is only to avoid compiler warnings about</div><div class='del'>-	 * "integer constant is unsigned in ANSI C, signed with -traditional".</div><div class='del'>-	 */</div><div class='del'>-	if (v &gt;&gt; 31) {</div><div class='del'>-	    printf("#define T%d /* 0x%08lx */ (T_MASK ^ 0x%08lx)\n", i,</div><div class='del'>-		   v, (unsigned long)(unsigned int)(~v));</div><div class='del'>-	} else {</div><div class='del'>-	    printf("#define T%d    0x%08lx\n", i, v);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-#endif /* COMPUTE_T_VALUES */</div><div class='del'>-/*</div><div class='del'>- * End of T computation program.</div><div class='del'>- */</div><div class='del'>-#ifdef T_MASK</div><div class='del'>-#undef T_MASK</div><div class='del'>-#endif</div><div class='del'>-#define T_MASK ((uint32_t)~0)</div><div class='del'>-#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)</div><div class='del'>-#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)</div><div class='del'>-#define T3    0x242070db</div><div class='del'>-#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)</div><div class='del'>-#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)</div><div class='del'>-#define T6    0x4787c62a</div><div class='del'>-#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)</div><div class='del'>-#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)</div><div class='del'>-#define T9    0x698098d8</div><div class='del'>-#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)</div><div class='del'>-#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)</div><div class='del'>-#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)</div><div class='del'>-#define T13    0x6b901122</div><div class='del'>-#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)</div><div class='del'>-#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)</div><div class='del'>-#define T16    0x49b40821</div><div class='del'>-#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)</div><div class='del'>-#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)</div><div class='del'>-#define T19    0x265e5a51</div><div class='del'>-#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)</div><div class='del'>-#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)</div><div class='del'>-#define T22    0x02441453</div><div class='del'>-#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)</div><div class='del'>-#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)</div><div class='del'>-#define T25    0x21e1cde6</div><div class='del'>-#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)</div><div class='del'>-#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)</div><div class='del'>-#define T28    0x455a14ed</div><div class='del'>-#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)</div><div class='del'>-#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)</div><div class='del'>-#define T31    0x676f02d9</div><div class='del'>-#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)</div><div class='del'>-#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)</div><div class='del'>-#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)</div><div class='del'>-#define T35    0x6d9d6122</div><div class='del'>-#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)</div><div class='del'>-#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)</div><div class='del'>-#define T38    0x4bdecfa9</div><div class='del'>-#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)</div><div class='del'>-#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)</div><div class='del'>-#define T41    0x289b7ec6</div><div class='del'>-#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)</div><div class='del'>-#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)</div><div class='del'>-#define T44    0x04881d05</div><div class='del'>-#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)</div><div class='del'>-#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)</div><div class='del'>-#define T47    0x1fa27cf8</div><div class='del'>-#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)</div><div class='del'>-#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)</div><div class='del'>-#define T50    0x432aff97</div><div class='del'>-#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)</div><div class='del'>-#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)</div><div class='del'>-#define T53    0x655b59c3</div><div class='del'>-#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)</div><div class='del'>-#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)</div><div class='del'>-#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)</div><div class='del'>-#define T57    0x6fa87e4f</div><div class='del'>-#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)</div><div class='del'>-#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)</div><div class='del'>-#define T60    0x4e0811a1</div><div class='del'>-#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)</div><div class='del'>-#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)</div><div class='del'>-#define T63    0x2ad7d2bb</div><div class='del'>-#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-md5_process(MD5_CTX *pms, const uint8_t *data /*[64]*/)</div><div class='del'>-{</div><div class='del'>-    uint32_t</div><div class='del'>-	a = pms-&gt;state[0], b = pms-&gt;state[1],</div><div class='del'>-	c = pms-&gt;state[2], d = pms-&gt;state[3];</div><div class='del'>-    uint32_t t;</div><div class='del'>-</div><div class='del'>-#ifdef WORDS_BIGENDIAN</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * On big-endian machines, we must arrange the bytes in the right</div><div class='del'>-     * order.  (This also works on machines of unknown byte order.)</div><div class='del'>-     */</div><div class='del'>-    uint32_t X[16];</div><div class='del'>-    const uint8_t *xp = data;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; 16; ++i, xp += 4)</div><div class='del'>-	X[i] = xp[0] + (xp[1] &lt;&lt; 8) + (xp[2] &lt;&lt; 16) + (xp[3] &lt;&lt; 24);</div><div class='del'>-</div><div class='del'>-#else</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * On little-endian machines, we can process properly aligned data</div><div class='del'>-     * without copying it.</div><div class='del'>-     */</div><div class='del'>-    uint32_t xbuf[16];</div><div class='del'>-    const uint32_t *X;</div><div class='del'>-</div><div class='del'>-    if (!((data - (const uint8_t *)0) &amp; 3)) {</div><div class='del'>-	/* data are properly aligned */</div><div class='del'>-	X = (const uint32_t *)data;</div><div class='del'>-    } else {</div><div class='del'>-	/* not aligned */</div><div class='del'>-	memcpy(xbuf, data, 64);</div><div class='del'>-	X = xbuf;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define ROTATE_LEFT(x, n) (((x) &lt;&lt; (n)) | ((x) &gt;&gt; (32 - (n))))</div><div class='del'>-</div><div class='del'>-    /* Round 1. */</div><div class='del'>-    /* Let [abcd k s i] denote the operation</div><div class='del'>-       a = b + ((a + F(b,c,d) + X[k] + T[i]) &lt;&lt;&lt; s). */</div><div class='del'>-#define F(x, y, z) (((x) &amp; (y)) | (~(x) &amp; (z)))</div><div class='del'>-#define SET(a, b, c, d, k, s, Ti)\</div><div class='del'>-  t = a + F(b,c,d) + X[k] + Ti;\</div><div class='del'>-  a = ROTATE_LEFT(t, s) + b</div><div class='del'>-    /* Do the following 16 operations. */</div><div class='del'>-    SET(a, b, c, d,  0,  7,  T1);</div><div class='del'>-    SET(d, a, b, c,  1, 12,  T2);</div><div class='del'>-    SET(c, d, a, b,  2, 17,  T3);</div><div class='del'>-    SET(b, c, d, a,  3, 22,  T4);</div><div class='del'>-    SET(a, b, c, d,  4,  7,  T5);</div><div class='del'>-    SET(d, a, b, c,  5, 12,  T6);</div><div class='del'>-    SET(c, d, a, b,  6, 17,  T7);</div><div class='del'>-    SET(b, c, d, a,  7, 22,  T8);</div><div class='del'>-    SET(a, b, c, d,  8,  7,  T9);</div><div class='del'>-    SET(d, a, b, c,  9, 12, T10);</div><div class='del'>-    SET(c, d, a, b, 10, 17, T11);</div><div class='del'>-    SET(b, c, d, a, 11, 22, T12);</div><div class='del'>-    SET(a, b, c, d, 12,  7, T13);</div><div class='del'>-    SET(d, a, b, c, 13, 12, T14);</div><div class='del'>-    SET(c, d, a, b, 14, 17, T15);</div><div class='del'>-    SET(b, c, d, a, 15, 22, T16);</div><div class='del'>-#undef SET</div><div class='del'>-</div><div class='del'>-     /* Round 2. */</div><div class='del'>-     /* Let [abcd k s i] denote the operation</div><div class='del'>-          a = b + ((a + G(b,c,d) + X[k] + T[i]) &lt;&lt;&lt; s). */</div><div class='del'>-#define G(x, y, z) (((x) &amp; (z)) | ((y) &amp; ~(z)))</div><div class='del'>-#define SET(a, b, c, d, k, s, Ti)\</div><div class='del'>-  t = a + G(b,c,d) + X[k] + Ti;\</div><div class='del'>-  a = ROTATE_LEFT(t, s) + b</div><div class='del'>-     /* Do the following 16 operations. */</div><div class='del'>-    SET(a, b, c, d,  1,  5, T17);</div><div class='del'>-    SET(d, a, b, c,  6,  9, T18);</div><div class='del'>-    SET(c, d, a, b, 11, 14, T19);</div><div class='del'>-    SET(b, c, d, a,  0, 20, T20);</div><div class='del'>-    SET(a, b, c, d,  5,  5, T21);</div><div class='del'>-    SET(d, a, b, c, 10,  9, T22);</div><div class='del'>-    SET(c, d, a, b, 15, 14, T23);</div><div class='del'>-    SET(b, c, d, a,  4, 20, T24);</div><div class='del'>-    SET(a, b, c, d,  9,  5, T25);</div><div class='del'>-    SET(d, a, b, c, 14,  9, T26);</div><div class='del'>-    SET(c, d, a, b,  3, 14, T27);</div><div class='del'>-    SET(b, c, d, a,  8, 20, T28);</div><div class='del'>-    SET(a, b, c, d, 13,  5, T29);</div><div class='del'>-    SET(d, a, b, c,  2,  9, T30);</div><div class='del'>-    SET(c, d, a, b,  7, 14, T31);</div><div class='del'>-    SET(b, c, d, a, 12, 20, T32);</div><div class='del'>-#undef SET</div><div class='del'>-</div><div class='del'>-     /* Round 3. */</div><div class='del'>-     /* Let [abcd k s t] denote the operation</div><div class='del'>-          a = b + ((a + H(b,c,d) + X[k] + T[i]) &lt;&lt;&lt; s). */</div><div class='del'>-#define H(x, y, z) ((x) ^ (y) ^ (z))</div><div class='del'>-#define SET(a, b, c, d, k, s, Ti)\</div><div class='del'>-  t = a + H(b,c,d) + X[k] + Ti;\</div><div class='del'>-  a = ROTATE_LEFT(t, s) + b</div><div class='del'>-     /* Do the following 16 operations. */</div><div class='del'>-    SET(a, b, c, d,  5,  4, T33);</div><div class='del'>-    SET(d, a, b, c,  8, 11, T34);</div><div class='del'>-    SET(c, d, a, b, 11, 16, T35);</div><div class='del'>-    SET(b, c, d, a, 14, 23, T36);</div><div class='del'>-    SET(a, b, c, d,  1,  4, T37);</div><div class='del'>-    SET(d, a, b, c,  4, 11, T38);</div><div class='del'>-    SET(c, d, a, b,  7, 16, T39);</div><div class='del'>-    SET(b, c, d, a, 10, 23, T40);</div><div class='del'>-    SET(a, b, c, d, 13,  4, T41);</div><div class='del'>-    SET(d, a, b, c,  0, 11, T42);</div><div class='del'>-    SET(c, d, a, b,  3, 16, T43);</div><div class='del'>-    SET(b, c, d, a,  6, 23, T44);</div><div class='del'>-    SET(a, b, c, d,  9,  4, T45);</div><div class='del'>-    SET(d, a, b, c, 12, 11, T46);</div><div class='del'>-    SET(c, d, a, b, 15, 16, T47);</div><div class='del'>-    SET(b, c, d, a,  2, 23, T48);</div><div class='del'>-#undef SET</div><div class='del'>-</div><div class='del'>-     /* Round 4. */</div><div class='del'>-     /* Let [abcd k s t] denote the operation</div><div class='del'>-          a = b + ((a + I(b,c,d) + X[k] + T[i]) &lt;&lt;&lt; s). */</div><div class='del'>-#define I(x, y, z) ((y) ^ ((x) | ~(z)))</div><div class='del'>-#define SET(a, b, c, d, k, s, Ti)\</div><div class='del'>-  t = a + I(b,c,d) + X[k] + Ti;\</div><div class='del'>-  a = ROTATE_LEFT(t, s) + b</div><div class='del'>-     /* Do the following 16 operations. */</div><div class='del'>-    SET(a, b, c, d,  0,  6, T49);</div><div class='del'>-    SET(d, a, b, c,  7, 10, T50);</div><div class='del'>-    SET(c, d, a, b, 14, 15, T51);</div><div class='del'>-    SET(b, c, d, a,  5, 21, T52);</div><div class='del'>-    SET(a, b, c, d, 12,  6, T53);</div><div class='del'>-    SET(d, a, b, c,  3, 10, T54);</div><div class='del'>-    SET(c, d, a, b, 10, 15, T55);</div><div class='del'>-    SET(b, c, d, a,  1, 21, T56);</div><div class='del'>-    SET(a, b, c, d,  8,  6, T57);</div><div class='del'>-    SET(d, a, b, c, 15, 10, T58);</div><div class='del'>-    SET(c, d, a, b,  6, 15, T59);</div><div class='del'>-    SET(b, c, d, a, 13, 21, T60);</div><div class='del'>-    SET(a, b, c, d,  4,  6, T61);</div><div class='del'>-    SET(d, a, b, c, 11, 10, T62);</div><div class='del'>-    SET(c, d, a, b,  2, 15, T63);</div><div class='del'>-    SET(b, c, d, a,  9, 21, T64);</div><div class='del'>-#undef SET</div><div class='del'>-</div><div class='del'>-     /* Then perform the following additions. (That is increment each</div><div class='del'>-        of the four registers by the value it had before this block</div><div class='del'>-        was started.) */</div><div class='del'>-    pms-&gt;state[0] += a;</div><div class='del'>-    pms-&gt;state[1] += b;</div><div class='del'>-    pms-&gt;state[2] += c;</div><div class='del'>-    pms-&gt;state[3] += d;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-MD5_Init(MD5_CTX *pms)</div><div class='del'>-{</div><div class='del'>-    pms-&gt;count[0] = pms-&gt;count[1] = 0;</div><div class='del'>-    pms-&gt;state[0] = 0x67452301;</div><div class='del'>-    pms-&gt;state[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;</div><div class='del'>-    pms-&gt;state[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;</div><div class='del'>-    pms-&gt;state[3] = 0x10325476;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-MD5_Update(MD5_CTX *pms, const uint8_t *data, size_t nbytes)</div><div class='del'>-{</div><div class='del'>-    const uint8_t *p = data;</div><div class='del'>-    size_t left = nbytes;</div><div class='del'>-    size_t offset = (pms-&gt;count[0] &gt;&gt; 3) &amp; 63;</div><div class='del'>-    uint32_t nbits = (uint32_t)(nbytes &lt;&lt; 3);</div><div class='del'>-</div><div class='del'>-    if (nbytes &lt;= 0)</div><div class='del'>-	return;</div><div class='del'>-</div><div class='del'>-    /* Update the message length. */</div><div class='del'>-    pms-&gt;count[1] += nbytes &gt;&gt; 29;</div><div class='del'>-    pms-&gt;count[0] += nbits;</div><div class='del'>-    if (pms-&gt;count[0] &lt; nbits)</div><div class='del'>-	pms-&gt;count[1]++;</div><div class='del'>-</div><div class='del'>-    /* Process an initial partial block. */</div><div class='del'>-    if (offset) {</div><div class='del'>-	size_t copy = (offset + nbytes &gt; 64 ? 64 - offset : nbytes);</div><div class='del'>-</div><div class='del'>-	memcpy(pms-&gt;buffer + offset, p, copy);</div><div class='del'>-	if (offset + copy &lt; 64)</div><div class='del'>-	    return;</div><div class='del'>-	p += copy;</div><div class='del'>-	left -= copy;</div><div class='del'>-	md5_process(pms, pms-&gt;buffer);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Process full blocks. */</div><div class='del'>-    for (; left &gt;= 64; p += 64, left -= 64)</div><div class='del'>-	md5_process(pms, p);</div><div class='del'>-</div><div class='del'>-    /* Process a final partial block. */</div><div class='del'>-    if (left)</div><div class='del'>-	memcpy(pms-&gt;buffer, p, left);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-MD5_Finish(MD5_CTX *pms, uint8_t *digest)</div><div class='del'>-{</div><div class='del'>-    static const uint8_t pad[64] = {</div><div class='del'>-	0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class='del'>-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class='del'>-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,</div><div class='del'>-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</div><div class='del'>-    };</div><div class='del'>-    uint8_t data[8];</div><div class='del'>-    size_t i;</div><div class='del'>-</div><div class='del'>-    /* Save the length before padding. */</div><div class='del'>-    for (i = 0; i &lt; 8; ++i)</div><div class='del'>-	data[i] = (uint8_t)(pms-&gt;count[i &gt;&gt; 2] &gt;&gt; ((i &amp; 3) &lt;&lt; 3));</div><div class='del'>-    /* Pad to 56 bytes mod 64. */</div><div class='del'>-    MD5_Update(pms, pad, ((55 - (pms-&gt;count[0] &gt;&gt; 3)) &amp; 63) + 1);</div><div class='del'>-    /* Append the length. */</div><div class='del'>-    MD5_Update(pms, data, 8);</div><div class='del'>-    for (i = 0; i &lt; 16; ++i)</div><div class='del'>-	digest[i] = (uint8_t)(pms-&gt;state[i &gt;&gt; 2] &gt;&gt; ((i &amp; 3) &lt;&lt; 3));</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/md5/md5.h b/ext/digest/md5/md5.h<br/>deleted file mode 100644<br/>index f4580ef5e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,80 +0,0 @@</div><div class='del'>-/*</div><div class='del'>-  Copyright (C) 1999 Aladdin Enterprises.  All rights reserved.</div><div class='del'>-</div><div class='del'>-  This software is provided 'as-is', without any express or implied</div><div class='del'>-  warranty.  In no event will the authors be held liable for any damages</div><div class='del'>-  arising from the use of this software.</div><div class='del'>-</div><div class='del'>-  Permission is granted to anyone to use this software for any purpose,</div><div class='del'>-  including commercial applications, and to alter it and redistribute it</div><div class='del'>-  freely, subject to the following restrictions:</div><div class='del'>-</div><div class='del'>-  1. The origin of this software must not be misrepresented; you must not</div><div class='del'>-     claim that you wrote the original software. If you use this software</div><div class='del'>-     in a product, an acknowledgment in the product documentation would be</div><div class='del'>-     appreciated but is not required.</div><div class='del'>-  2. Altered source versions must be plainly marked as such, and must not be</div><div class='del'>-     misrepresented as being the original software.</div><div class='del'>-  3. This notice may not be removed or altered from any source distribution.</div><div class='del'>-</div><div class='del'>-  L. Peter Deutsch</div><div class='del'>-  ghost@aladdin.com</div><div class='del'>-</div><div class='del'>- */</div><div class='del'>-/*</div><div class='del'>-  Independent implementation of MD5 (RFC 1321).</div><div class='del'>-</div><div class='del'>-  This code implements the MD5 Algorithm defined in RFC 1321.</div><div class='del'>-  It is derived directly from the text of the RFC and not from the</div><div class='del'>-  reference implementation.</div><div class='del'>-</div><div class='del'>-  The original and principal author of md5.h is L. Peter Deutsch</div><div class='del'>-  &lt;ghost@aladdin.com&gt;.  Other authors are noted in the change history</div><div class='del'>-  that follows (in reverse chronological order):</div><div class='del'>-</div><div class='del'>-  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.</div><div class='del'>-  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);</div><div class='del'>-	added conditionalization for C++ compilation from Martin</div><div class='del'>-	Purschke &lt;purschke@bnl.gov&gt;.</div><div class='del'>-  1999-05-03 lpd Original version.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/* $OrigId: md5.h,v 1.2 2001/03/26 08:57:14 matz Exp $ */</div><div class='del'>-/* $RoughId: md5.h,v 1.3 2002/02/24 08:14:31 knu Exp $ */</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#ifndef MD5_INCLUDED</div><div class='del'>-#  define MD5_INCLUDED</div><div class='del'>-</div><div class='del'>-#include "defs.h"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * This code has some adaptations for the Ghostscript environment, but it</div><div class='del'>- * will compile and run correctly in any environment with 8-bit chars and</div><div class='del'>- * 32-bit ints.  Specifically, it assumes that if the following are</div><div class='del'>- * defined, they have the same meaning as in Ghostscript: P1, P2, P3.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/* Define the state of the MD5 Algorithm. */</div><div class='del'>-typedef struct md5_state_s {</div><div class='del'>-    uint32_t count[2];	/* message length in bits, lsw first */</div><div class='del'>-    uint32_t state[4];	/* digest buffer */</div><div class='del'>-    uint8_t buffer[64];	/* accumulate block */</div><div class='del'>-} MD5_CTX;</div><div class='del'>-</div><div class='del'>-#ifdef RUBY</div><div class='del'>-/* avoid name clash */</div><div class='del'>-#define MD5_Init	rb_Digest_MD5_Init</div><div class='del'>-#define MD5_Update	rb_Digest_MD5_Update</div><div class='del'>-#define MD5_Finish	rb_Digest_MD5_Finish</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void	MD5_Init _((MD5_CTX *pms));</div><div class='del'>-void	MD5_Update _((MD5_CTX *pms, const uint8_t *data, size_t nbytes));</div><div class='del'>-void	MD5_Finish _((MD5_CTX *pms, uint8_t *digest));</div><div class='del'>-</div><div class='del'>-#define MD5_BLOCK_LENGTH		64</div><div class='del'>-#define MD5_DIGEST_LENGTH		16</div><div class='del'>-#define MD5_DIGEST_STRING_LENGTH	(MD5_DIGEST_LENGTH * 2 + 1)</div><div class='del'>-</div><div class='del'>-#endif /* MD5_INCLUDED */</div><div class='head'>diff --git a/ext/digest/md5/md5init.c b/ext/digest/md5/md5init.c<br/>deleted file mode 100644<br/>index 17658f4fce..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5init.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5init.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-/* $RoughId: md5init.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#include "digest.h"</div><div class='del'>-#if defined(HAVE_OPENSSL_MD5_H)</div><div class='del'>-#include "md5ossl.h"</div><div class='del'>-#else</div><div class='del'>-#include "md5.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static rb_digest_metadata_t md5 = {</div><div class='del'>-    RUBY_DIGEST_API_VERSION,</div><div class='del'>-    MD5_DIGEST_LENGTH,</div><div class='del'>-    MD5_BLOCK_LENGTH,</div><div class='del'>-    sizeof(MD5_CTX),</div><div class='del'>-    (rb_digest_hash_init_func_t)MD5_Init,</div><div class='del'>-    (rb_digest_hash_update_func_t)MD5_Update,</div><div class='del'>-    (rb_digest_hash_finish_func_t)MD5_Finish,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * A class for calculating message digests using the MD5</div><div class='del'>- * Message-Digest Algorithm by RSA Data Security, Inc., described in</div><div class='del'>- * RFC1321.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_md5()</div><div class='del'>-{</div><div class='del'>-    VALUE mDigest, cDigest_Base, cDigest_MD5;</div><div class='del'>-</div><div class='del'>-    rb_require("digest");</div><div class='del'>-</div><div class='del'>-    mDigest = rb_path2class("Digest");</div><div class='del'>-    cDigest_Base = rb_path2class("Digest::Base");</div><div class='del'>-</div><div class='del'>-    cDigest_MD5 = rb_define_class_under(mDigest, "MD5", cDigest_Base);</div><div class='del'>-</div><div class='del'>-    rb_ivar_set(cDigest_MD5, rb_intern("metadata"),</div><div class='del'>-      Data_Wrap_Struct(rb_cObject, 0, 0, &amp;md5));</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/md5/md5ossl.c b/ext/digest/md5/md5ossl.c<br/>deleted file mode 100644<br/>index d94ae2cd2f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5ossl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5ossl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,9 +0,0 @@</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#include "md5ossl.h"</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-MD5_Finish(MD5_CTX *pctx, unsigned char *digest)</div><div class='del'>-{</div><div class='del'>-    MD5_Final(digest, pctx);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/md5/md5ossl.h b/ext/digest/md5/md5ossl.h<br/>deleted file mode 100644<br/>index 1680c4f5c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/md5/md5ossl.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/md5/md5ossl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#ifndef MD5OSSL_H_INCLUDED</div><div class='del'>-#define MD5OSSL_H_INCLUDED</div><div class='del'>-</div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='del'>-#include &lt;openssl/md5.h&gt;</div><div class='del'>-</div><div class='del'>-#define MD5_BLOCK_LENGTH	MD5_CBLOCK</div><div class='del'>-</div><div class='del'>-void MD5_Finish(MD5_CTX *pctx, unsigned char *digest);</div><div class='del'>-</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/digest/rmd160/.cvsignore b/ext/digest/rmd160/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/.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/digest/rmd160/depend b/ext/digest/rmd160/depend<br/>deleted file mode 100644<br/>index a21d7188dc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-rmd160.o: rmd160.c rmd160.h $(srcdir)/../defs.h $(hdrdir)/ruby.h \</div><div class='del'>-  $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h</div><div class='del'>-rmd160init.o: rmd160init.c $(srcdir)/../digest.h $(hdrdir)/ruby.h \</div><div class='del'>-  $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h \</div><div class='del'>-  rmd160.h $(srcdir)/../defs.h</div><div class='del'>-rmd160ossl.o: rmd160ossl.h $(srcdir)/../defs.h</div><div class='head'>diff --git a/ext/digest/rmd160/extconf.rb b/ext/digest/rmd160/extconf.rb<br/>deleted file mode 100644<br/>index 09359944f2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,28 +0,0 @@</div><div class='del'>-# $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require "mkmf"</div><div class='del'>-</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='del'>-</div><div class='del'>-$objs = [ "rmd160init.#{$OBJEXT}" ]</div><div class='del'>-</div><div class='del'>-dir_config("openssl")</div><div class='del'>-</div><div class='del'>-if !with_config("bundled-rmd160") &amp;&amp;</div><div class='del'>-    have_library("crypto") &amp;&amp; have_header("openssl/ripemd.h")</div><div class='del'>-  $objs &lt;&lt; "rmd160ossl.#{$OBJEXT}"</div><div class='del'>-else</div><div class='del'>-  $objs &lt;&lt; "rmd160.#{$OBJEXT}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-have_header("sys/cdefs.h")</div><div class='del'>-</div><div class='del'>-have_header("inttypes.h")</div><div class='del'>-</div><div class='del'>-have_header("unistd.h")</div><div class='del'>-</div><div class='del'>-$preload = %w[digest]</div><div class='del'>-</div><div class='del'>-create_makefile("digest/rmd160")</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160.c b/ext/digest/rmd160/rmd160.c<br/>deleted file mode 100644<br/>index 88918728cd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,457 +0,0 @@</div><div class='del'>-/*	$NetBSD: rmd160.c,v 1.1.1.1 2001/03/06 11:21:05 agc Exp $	*/</div><div class='del'>-/*	$RoughId: rmd160.c,v 1.2 2001/07/13 19:49:10 knu Exp $	*/</div><div class='del'>-/*	$Id$	*/</div><div class='del'>-</div><div class='del'>-/********************************************************************\</div><div class='del'>- *</div><div class='del'>- *      FILE:     rmd160.c</div><div class='del'>- *</div><div class='del'>- *      CONTENTS: A sample C-implementation of the RIPEMD-160</div><div class='del'>- *		  hash-function.</div><div class='del'>- *      TARGET:   any computer with an ANSI C compiler</div><div class='del'>- *</div><div class='del'>- *      AUTHOR:   Antoon Bosselaers, ESAT-COSIC</div><div class='del'>- *		  (Arranged for libc by Todd C. Miller)</div><div class='del'>- *      DATE:     1 March 1996</div><div class='del'>- *      VERSION:  1.0</div><div class='del'>- *</div><div class='del'>- *      Copyright (c) Katholieke Universiteit Leuven</div><div class='del'>- *      1996, All Rights Reserved</div><div class='del'>- *</div><div class='del'>-\********************************************************************/</div><div class='del'>-</div><div class='del'>-#include "rmd160.h"</div><div class='del'>-</div><div class='del'>-#ifndef lint</div><div class='del'>-/* __RCSID("$NetBSD: rmd160.c,v 1.1.1.1 2001/03/06 11:21:05 agc Exp $"); */</div><div class='del'>-#endif	/* not lint */</div><div class='del'>-</div><div class='del'>-/* header files */</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SYS_ENDIAN_H_</div><div class='del'>-#include &lt;sys/endian.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_MACHINE_ENDIAN_H_</div><div class='del'>-#include &lt;machine/endian.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* #include "namespace.h" */</div><div class='del'>-</div><div class='del'>-#include &lt;assert.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'>-</div><div class='del'>-#ifndef _DIAGASSERT</div><div class='del'>-#define _DIAGASSERT(cond)	assert(cond)</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'>-/* macro definitions */</div><div class='del'>-</div><div class='del'>-/* collect four bytes into one word: */</div><div class='del'>-#define BYTES_TO_DWORD(strptr)			\</div><div class='del'>-    (((uint32_t) *((strptr)+3) &lt;&lt; 24) |	\</div><div class='del'>-    ((uint32_t) *((strptr)+2) &lt;&lt; 16) |		\</div><div class='del'>-    ((uint32_t) *((strptr)+1) &lt;&lt;  8) |		\</div><div class='del'>-    ((uint32_t) *(strptr)))</div><div class='del'>-</div><div class='del'>-/* ROL(x, n) cyclically rotates x over n bits to the left */</div><div class='del'>-/* x must be of an unsigned 32 bits type and 0 &lt;= n &lt; 32. */</div><div class='del'>-#define ROL(x, n)	(((x) &lt;&lt; (n)) | ((x) &gt;&gt; (32-(n))))</div><div class='del'>-</div><div class='del'>-/* the three basic functions F(), G() and H() */</div><div class='del'>-#define F(x, y, z)	((x) ^ (y) ^ (z))</div><div class='del'>-#define G(x, y, z)	(((x) &amp; (y)) | (~(x) &amp; (z)))</div><div class='del'>-#define H(x, y, z)	(((x) | ~(y)) ^ (z))</div><div class='del'>-#define I(x, y, z)	(((x) &amp; (z)) | ((y) &amp; ~(z)))</div><div class='del'>-#define J(x, y, z)	((x) ^ ((y) | ~(z)))</div><div class='del'>-</div><div class='del'>-/* the eight basic operations FF() through III() */</div><div class='del'>-#define FF(a, b, c, d, e, x, s)	{			\</div><div class='del'>-      (a) += F((b), (c), (d)) + (x);			\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define GG(a, b, c, d, e, x, s)	{			\</div><div class='del'>-      (a) += G((b), (c), (d)) + (x) + 0x5a827999U;	\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define HH(a, b, c, d, e, x, s)	{			\</div><div class='del'>-      (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1U;	\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define II(a, b, c, d, e, x, s)	{			\</div><div class='del'>-      (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcU;	\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define JJ(a, b, c, d, e, x, s)	{			\</div><div class='del'>-      (a) += J((b), (c), (d)) + (x) + 0xa953fd4eU;	\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define FFF(a, b, c, d, e, x, s)	{		\</div><div class='del'>-      (a) += F((b), (c), (d)) + (x);			\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define GGG(a, b, c, d, e, x, s)	{		\</div><div class='del'>-      (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9U;	\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define HHH(a, b, c, d, e, x, s)	{		\</div><div class='del'>-      (a) += H((b), (c), (d)) + (x) + 0x6d703ef3U;	\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define III(a, b, c, d, e, x, s)	{		\</div><div class='del'>-      (a) += I((b), (c), (d)) + (x) + 0x5c4dd124U;	\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-#define JJJ(a, b, c, d, e, x, s)	{		\</div><div class='del'>-      (a) += J((b), (c), (d)) + (x) + 0x50a28be6U;	\</div><div class='del'>-      (a) = ROL((a), (s)) + (e);			\</div><div class='del'>-      (c) = ROL((c), 10);				\</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/********************************************************************/</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-RMD160_Init(RMD160_CTX *context)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-	_DIAGASSERT(context != NULL);</div><div class='del'>-</div><div class='del'>-	/* ripemd-160 initialization constants */</div><div class='del'>-	context-&gt;state[0] = 0x67452301U;</div><div class='del'>-	context-&gt;state[1] = 0xefcdab89U;</div><div class='del'>-	context-&gt;state[2] = 0x98badcfeU;</div><div class='del'>-	context-&gt;state[3] = 0x10325476U;</div><div class='del'>-	context-&gt;state[4] = 0xc3d2e1f0U;</div><div class='del'>-	context-&gt;length[0] = context-&gt;length[1] = 0;</div><div class='del'>-	context-&gt;buflen = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/********************************************************************/</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-RMD160_Transform(uint32_t state[5], const uint32_t block[16])</div><div class='del'>-{</div><div class='del'>-	uint32_t aa, bb, cc, dd, ee;</div><div class='del'>-	uint32_t aaa, bbb, ccc, ddd, eee;</div><div class='del'>-</div><div class='del'>-	_DIAGASSERT(state != NULL);</div><div class='del'>-	_DIAGASSERT(block != NULL);</div><div class='del'>-</div><div class='del'>-	aa = aaa = state[0];</div><div class='del'>-	bb = bbb = state[1];</div><div class='del'>-	cc = ccc = state[2];</div><div class='del'>-	dd = ddd = state[3];</div><div class='del'>-	ee = eee = state[4];</div><div class='del'>-</div><div class='del'>-	/* round 1 */</div><div class='del'>-	FF(aa, bb, cc, dd, ee, block[ 0], 11);</div><div class='del'>-	FF(ee, aa, bb, cc, dd, block[ 1], 14);</div><div class='del'>-	FF(dd, ee, aa, bb, cc, block[ 2], 15);</div><div class='del'>-	FF(cc, dd, ee, aa, bb, block[ 3], 12);</div><div class='del'>-	FF(bb, cc, dd, ee, aa, block[ 4],  5);</div><div class='del'>-	FF(aa, bb, cc, dd, ee, block[ 5],  8);</div><div class='del'>-	FF(ee, aa, bb, cc, dd, block[ 6],  7);</div><div class='del'>-	FF(dd, ee, aa, bb, cc, block[ 7],  9);</div><div class='del'>-	FF(cc, dd, ee, aa, bb, block[ 8], 11);</div><div class='del'>-	FF(bb, cc, dd, ee, aa, block[ 9], 13);</div><div class='del'>-	FF(aa, bb, cc, dd, ee, block[10], 14);</div><div class='del'>-	FF(ee, aa, bb, cc, dd, block[11], 15);</div><div class='del'>-	FF(dd, ee, aa, bb, cc, block[12],  6);</div><div class='del'>-	FF(cc, dd, ee, aa, bb, block[13],  7);</div><div class='del'>-	FF(bb, cc, dd, ee, aa, block[14],  9);</div><div class='del'>-	FF(aa, bb, cc, dd, ee, block[15],  8);</div><div class='del'>-</div><div class='del'>-	/* round 2 */</div><div class='del'>-	GG(ee, aa, bb, cc, dd, block[ 7],  7);</div><div class='del'>-	GG(dd, ee, aa, bb, cc, block[ 4],  6);</div><div class='del'>-	GG(cc, dd, ee, aa, bb, block[13],  8);</div><div class='del'>-	GG(bb, cc, dd, ee, aa, block[ 1], 13);</div><div class='del'>-	GG(aa, bb, cc, dd, ee, block[10], 11);</div><div class='del'>-	GG(ee, aa, bb, cc, dd, block[ 6],  9);</div><div class='del'>-	GG(dd, ee, aa, bb, cc, block[15],  7);</div><div class='del'>-	GG(cc, dd, ee, aa, bb, block[ 3], 15);</div><div class='del'>-	GG(bb, cc, dd, ee, aa, block[12],  7);</div><div class='del'>-	GG(aa, bb, cc, dd, ee, block[ 0], 12);</div><div class='del'>-	GG(ee, aa, bb, cc, dd, block[ 9], 15);</div><div class='del'>-	GG(dd, ee, aa, bb, cc, block[ 5],  9);</div><div class='del'>-	GG(cc, dd, ee, aa, bb, block[ 2], 11);</div><div class='del'>-	GG(bb, cc, dd, ee, aa, block[14],  7);</div><div class='del'>-	GG(aa, bb, cc, dd, ee, block[11], 13);</div><div class='del'>-	GG(ee, aa, bb, cc, dd, block[ 8], 12);</div><div class='del'>-</div><div class='del'>-	/* round 3 */</div><div class='del'>-	HH(dd, ee, aa, bb, cc, block[ 3], 11);</div><div class='del'>-	HH(cc, dd, ee, aa, bb, block[10], 13);</div><div class='del'>-	HH(bb, cc, dd, ee, aa, block[14],  6);</div><div class='del'>-	HH(aa, bb, cc, dd, ee, block[ 4],  7);</div><div class='del'>-	HH(ee, aa, bb, cc, dd, block[ 9], 14);</div><div class='del'>-	HH(dd, ee, aa, bb, cc, block[15],  9);</div><div class='del'>-	HH(cc, dd, ee, aa, bb, block[ 8], 13);</div><div class='del'>-	HH(bb, cc, dd, ee, aa, block[ 1], 15);</div><div class='del'>-	HH(aa, bb, cc, dd, ee, block[ 2], 14);</div><div class='del'>-	HH(ee, aa, bb, cc, dd, block[ 7],  8);</div><div class='del'>-	HH(dd, ee, aa, bb, cc, block[ 0], 13);</div><div class='del'>-	HH(cc, dd, ee, aa, bb, block[ 6],  6);</div><div class='del'>-	HH(bb, cc, dd, ee, aa, block[13],  5);</div><div class='del'>-	HH(aa, bb, cc, dd, ee, block[11], 12);</div><div class='del'>-	HH(ee, aa, bb, cc, dd, block[ 5],  7);</div><div class='del'>-	HH(dd, ee, aa, bb, cc, block[12],  5);</div><div class='del'>-</div><div class='del'>-	/* round 4 */</div><div class='del'>-	II(cc, dd, ee, aa, bb, block[ 1], 11);</div><div class='del'>-	II(bb, cc, dd, ee, aa, block[ 9], 12);</div><div class='del'>-	II(aa, bb, cc, dd, ee, block[11], 14);</div><div class='del'>-	II(ee, aa, bb, cc, dd, block[10], 15);</div><div class='del'>-	II(dd, ee, aa, bb, cc, block[ 0], 14);</div><div class='del'>-	II(cc, dd, ee, aa, bb, block[ 8], 15);</div><div class='del'>-	II(bb, cc, dd, ee, aa, block[12],  9);</div><div class='del'>-	II(aa, bb, cc, dd, ee, block[ 4],  8);</div><div class='del'>-	II(ee, aa, bb, cc, dd, block[13],  9);</div><div class='del'>-	II(dd, ee, aa, bb, cc, block[ 3], 14);</div><div class='del'>-	II(cc, dd, ee, aa, bb, block[ 7],  5);</div><div class='del'>-	II(bb, cc, dd, ee, aa, block[15],  6);</div><div class='del'>-	II(aa, bb, cc, dd, ee, block[14],  8);</div><div class='del'>-	II(ee, aa, bb, cc, dd, block[ 5],  6);</div><div class='del'>-	II(dd, ee, aa, bb, cc, block[ 6],  5);</div><div class='del'>-	II(cc, dd, ee, aa, bb, block[ 2], 12);</div><div class='del'>-</div><div class='del'>-	/* round 5 */</div><div class='del'>-	JJ(bb, cc, dd, ee, aa, block[ 4],  9);</div><div class='del'>-	JJ(aa, bb, cc, dd, ee, block[ 0], 15);</div><div class='del'>-	JJ(ee, aa, bb, cc, dd, block[ 5],  5);</div><div class='del'>-	JJ(dd, ee, aa, bb, cc, block[ 9], 11);</div><div class='del'>-	JJ(cc, dd, ee, aa, bb, block[ 7],  6);</div><div class='del'>-	JJ(bb, cc, dd, ee, aa, block[12],  8);</div><div class='del'>-	JJ(aa, bb, cc, dd, ee, block[ 2], 13);</div><div class='del'>-	JJ(ee, aa, bb, cc, dd, block[10], 12);</div><div class='del'>-	JJ(dd, ee, aa, bb, cc, block[14],  5);</div><div class='del'>-	JJ(cc, dd, ee, aa, bb, block[ 1], 12);</div><div class='del'>-	JJ(bb, cc, dd, ee, aa, block[ 3], 13);</div><div class='del'>-	JJ(aa, bb, cc, dd, ee, block[ 8], 14);</div><div class='del'>-	JJ(ee, aa, bb, cc, dd, block[11], 11);</div><div class='del'>-	JJ(dd, ee, aa, bb, cc, block[ 6],  8);</div><div class='del'>-	JJ(cc, dd, ee, aa, bb, block[15],  5);</div><div class='del'>-	JJ(bb, cc, dd, ee, aa, block[13],  6);</div><div class='del'>-</div><div class='del'>-	/* parallel round 1 */</div><div class='del'>-	JJJ(aaa, bbb, ccc, ddd, eee, block[ 5],  8);</div><div class='del'>-	JJJ(eee, aaa, bbb, ccc, ddd, block[14],  9);</div><div class='del'>-	JJJ(ddd, eee, aaa, bbb, ccc, block[ 7],  9);</div><div class='del'>-	JJJ(ccc, ddd, eee, aaa, bbb, block[ 0], 11);</div><div class='del'>-	JJJ(bbb, ccc, ddd, eee, aaa, block[ 9], 13);</div><div class='del'>-	JJJ(aaa, bbb, ccc, ddd, eee, block[ 2], 15);</div><div class='del'>-	JJJ(eee, aaa, bbb, ccc, ddd, block[11], 15);</div><div class='del'>-	JJJ(ddd, eee, aaa, bbb, ccc, block[ 4],  5);</div><div class='del'>-	JJJ(ccc, ddd, eee, aaa, bbb, block[13],  7);</div><div class='del'>-	JJJ(bbb, ccc, ddd, eee, aaa, block[ 6],  7);</div><div class='del'>-	JJJ(aaa, bbb, ccc, ddd, eee, block[15],  8);</div><div class='del'>-	JJJ(eee, aaa, bbb, ccc, ddd, block[ 8], 11);</div><div class='del'>-	JJJ(ddd, eee, aaa, bbb, ccc, block[ 1], 14);</div><div class='del'>-	JJJ(ccc, ddd, eee, aaa, bbb, block[10], 14);</div><div class='del'>-	JJJ(bbb, ccc, ddd, eee, aaa, block[ 3], 12);</div><div class='del'>-	JJJ(aaa, bbb, ccc, ddd, eee, block[12],  6);</div><div class='del'>-</div><div class='del'>-	/* parallel round 2 */</div><div class='del'>-	III(eee, aaa, bbb, ccc, ddd, block[ 6],  9);</div><div class='del'>-	III(ddd, eee, aaa, bbb, ccc, block[11], 13);</div><div class='del'>-	III(ccc, ddd, eee, aaa, bbb, block[ 3], 15);</div><div class='del'>-	III(bbb, ccc, ddd, eee, aaa, block[ 7],  7);</div><div class='del'>-	III(aaa, bbb, ccc, ddd, eee, block[ 0], 12);</div><div class='del'>-	III(eee, aaa, bbb, ccc, ddd, block[13],  8);</div><div class='del'>-	III(ddd, eee, aaa, bbb, ccc, block[ 5],  9);</div><div class='del'>-	III(ccc, ddd, eee, aaa, bbb, block[10], 11);</div><div class='del'>-	III(bbb, ccc, ddd, eee, aaa, block[14],  7);</div><div class='del'>-	III(aaa, bbb, ccc, ddd, eee, block[15],  7);</div><div class='del'>-	III(eee, aaa, bbb, ccc, ddd, block[ 8], 12);</div><div class='del'>-	III(ddd, eee, aaa, bbb, ccc, block[12],  7);</div><div class='del'>-	III(ccc, ddd, eee, aaa, bbb, block[ 4],  6);</div><div class='del'>-	III(bbb, ccc, ddd, eee, aaa, block[ 9], 15);</div><div class='del'>-	III(aaa, bbb, ccc, ddd, eee, block[ 1], 13);</div><div class='del'>-	III(eee, aaa, bbb, ccc, ddd, block[ 2], 11);</div><div class='del'>-</div><div class='del'>-	/* parallel round 3 */</div><div class='del'>-	HHH(ddd, eee, aaa, bbb, ccc, block[15],  9);</div><div class='del'>-	HHH(ccc, ddd, eee, aaa, bbb, block[ 5],  7);</div><div class='del'>-	HHH(bbb, ccc, ddd, eee, aaa, block[ 1], 15);</div><div class='del'>-	HHH(aaa, bbb, ccc, ddd, eee, block[ 3], 11);</div><div class='del'>-	HHH(eee, aaa, bbb, ccc, ddd, block[ 7],  8);</div><div class='del'>-	HHH(ddd, eee, aaa, bbb, ccc, block[14],  6);</div><div class='del'>-	HHH(ccc, ddd, eee, aaa, bbb, block[ 6],  6);</div><div class='del'>-	HHH(bbb, ccc, ddd, eee, aaa, block[ 9], 14);</div><div class='del'>-	HHH(aaa, bbb, ccc, ddd, eee, block[11], 12);</div><div class='del'>-	HHH(eee, aaa, bbb, ccc, ddd, block[ 8], 13);</div><div class='del'>-	HHH(ddd, eee, aaa, bbb, ccc, block[12],  5);</div><div class='del'>-	HHH(ccc, ddd, eee, aaa, bbb, block[ 2], 14);</div><div class='del'>-	HHH(bbb, ccc, ddd, eee, aaa, block[10], 13);</div><div class='del'>-	HHH(aaa, bbb, ccc, ddd, eee, block[ 0], 13);</div><div class='del'>-	HHH(eee, aaa, bbb, ccc, ddd, block[ 4],  7);</div><div class='del'>-	HHH(ddd, eee, aaa, bbb, ccc, block[13],  5);</div><div class='del'>-</div><div class='del'>-	/* parallel round 4 */</div><div class='del'>-	GGG(ccc, ddd, eee, aaa, bbb, block[ 8], 15);</div><div class='del'>-	GGG(bbb, ccc, ddd, eee, aaa, block[ 6],  5);</div><div class='del'>-	GGG(aaa, bbb, ccc, ddd, eee, block[ 4],  8);</div><div class='del'>-	GGG(eee, aaa, bbb, ccc, ddd, block[ 1], 11);</div><div class='del'>-	GGG(ddd, eee, aaa, bbb, ccc, block[ 3], 14);</div><div class='del'>-	GGG(ccc, ddd, eee, aaa, bbb, block[11], 14);</div><div class='del'>-	GGG(bbb, ccc, ddd, eee, aaa, block[15],  6);</div><div class='del'>-	GGG(aaa, bbb, ccc, ddd, eee, block[ 0], 14);</div><div class='del'>-	GGG(eee, aaa, bbb, ccc, ddd, block[ 5],  6);</div><div class='del'>-	GGG(ddd, eee, aaa, bbb, ccc, block[12],  9);</div><div class='del'>-	GGG(ccc, ddd, eee, aaa, bbb, block[ 2], 12);</div><div class='del'>-	GGG(bbb, ccc, ddd, eee, aaa, block[13],  9);</div><div class='del'>-	GGG(aaa, bbb, ccc, ddd, eee, block[ 9], 12);</div><div class='del'>-	GGG(eee, aaa, bbb, ccc, ddd, block[ 7],  5);</div><div class='del'>-	GGG(ddd, eee, aaa, bbb, ccc, block[10], 15);</div><div class='del'>-	GGG(ccc, ddd, eee, aaa, bbb, block[14],  8);</div><div class='del'>-</div><div class='del'>-	/* parallel round 5 */</div><div class='del'>-	FFF(bbb, ccc, ddd, eee, aaa, block[12] ,  8);</div><div class='del'>-	FFF(aaa, bbb, ccc, ddd, eee, block[15] ,  5);</div><div class='del'>-	FFF(eee, aaa, bbb, ccc, ddd, block[10] , 12);</div><div class='del'>-	FFF(ddd, eee, aaa, bbb, ccc, block[ 4] ,  9);</div><div class='del'>-	FFF(ccc, ddd, eee, aaa, bbb, block[ 1] , 12);</div><div class='del'>-	FFF(bbb, ccc, ddd, eee, aaa, block[ 5] ,  5);</div><div class='del'>-	FFF(aaa, bbb, ccc, ddd, eee, block[ 8] , 14);</div><div class='del'>-	FFF(eee, aaa, bbb, ccc, ddd, block[ 7] ,  6);</div><div class='del'>-	FFF(ddd, eee, aaa, bbb, ccc, block[ 6] ,  8);</div><div class='del'>-	FFF(ccc, ddd, eee, aaa, bbb, block[ 2] , 13);</div><div class='del'>-	FFF(bbb, ccc, ddd, eee, aaa, block[13] ,  6);</div><div class='del'>-	FFF(aaa, bbb, ccc, ddd, eee, block[14] ,  5);</div><div class='del'>-	FFF(eee, aaa, bbb, ccc, ddd, block[ 0] , 15);</div><div class='del'>-	FFF(ddd, eee, aaa, bbb, ccc, block[ 3] , 13);</div><div class='del'>-	FFF(ccc, ddd, eee, aaa, bbb, block[ 9] , 11);</div><div class='del'>-	FFF(bbb, ccc, ddd, eee, aaa, block[11] , 11);</div><div class='del'>-</div><div class='del'>-	/* combine results */</div><div class='del'>-	ddd += cc + state[1];		/* final result for state[0] */</div><div class='del'>-	state[1] = state[2] + dd + eee;</div><div class='del'>-	state[2] = state[3] + ee + aaa;</div><div class='del'>-	state[3] = state[4] + aa + bbb;</div><div class='del'>-	state[4] = state[0] + bb + ccc;</div><div class='del'>-	state[0] = ddd;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/********************************************************************/</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-RMD160_Update(RMD160_CTX *context, const uint8_t *data, size_t nbytes)</div><div class='del'>-{</div><div class='del'>-	uint32_t X[16];</div><div class='del'>-	uint32_t ofs = 0;</div><div class='del'>-	uint32_t i;</div><div class='del'>-#ifdef WORDS_BIGENDIAN</div><div class='del'>-	uint32_t j;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-	_DIAGASSERT(context != NULL);</div><div class='del'>-	_DIAGASSERT(data != NULL);</div><div class='del'>-</div><div class='del'>-	/* update length[] */</div><div class='del'>-	if (context-&gt;length[0] + nbytes &lt; context-&gt;length[0])</div><div class='del'>-		context-&gt;length[1]++;		/* overflow to msb of length */</div><div class='del'>-	context-&gt;length[0] += nbytes;</div><div class='del'>-</div><div class='del'>-	(void)memset(X, 0, sizeof(X));</div><div class='del'>-</div><div class='del'>-        if ( context-&gt;buflen + nbytes &lt; 64 )</div><div class='del'>-        {</div><div class='del'>-                (void)memcpy(context-&gt;bbuffer + context-&gt;buflen, data, nbytes);</div><div class='del'>-                context-&gt;buflen += nbytes;</div><div class='del'>-        }</div><div class='del'>-        else</div><div class='del'>-        {</div><div class='del'>-                /* process first block */</div><div class='del'>-                ofs = 64 - context-&gt;buflen;</div><div class='del'>-                (void)memcpy(context-&gt;bbuffer + context-&gt;buflen, data, ofs);</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-                (void)memcpy(X, context-&gt;bbuffer, sizeof(X));</div><div class='del'>-#else</div><div class='del'>-                for (j=0; j &lt; 16; j++)</div><div class='del'>-                        X[j] = BYTES_TO_DWORD(context-&gt;bbuffer + (4 * j));</div><div class='del'>-#endif</div><div class='del'>-                RMD160_Transform(context-&gt;state, X);</div><div class='del'>-                nbytes -= ofs;</div><div class='del'>-</div><div class='del'>-                /* process remaining complete blocks */</div><div class='del'>-                for (i = 0; i &lt; (nbytes &gt;&gt; 6); i++) {</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-                        (void)memcpy(X, data + (64 * i) + ofs, sizeof(X));</div><div class='del'>-#else</div><div class='del'>-                        for (j=0; j &lt; 16; j++)</div><div class='del'>-                                X[j] = BYTES_TO_DWORD(data + (64 * i) + (4 * j) + ofs);</div><div class='del'>-#endif</div><div class='del'>-                        RMD160_Transform(context-&gt;state, X);</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                /*</div><div class='del'>-                 * Put last bytes from data into context's buffer</div><div class='del'>-                 */</div><div class='del'>-                context-&gt;buflen = nbytes &amp; 63;</div><div class='del'>-                memcpy(context-&gt;bbuffer, data + (64 * i) + ofs, context-&gt;buflen);</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</div><div class='del'>-RMD160_Finish(RMD160_CTX *context, uint8_t digest[20])</div><div class='del'>-{</div><div class='del'>-	uint32_t i;</div><div class='del'>-	uint32_t X[16];</div><div class='del'>-#ifdef WORDS_BIGENDIAN</div><div class='del'>-	uint32_t j;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-	_DIAGASSERT(digest != NULL);</div><div class='del'>-	_DIAGASSERT(context != NULL);</div><div class='del'>-</div><div class='del'>-	/* append the bit m_n == 1 */</div><div class='del'>-	context-&gt;bbuffer[context-&gt;buflen] = (uint8_t)'\200';</div><div class='del'>-</div><div class='del'>-	(void)memset(context-&gt;bbuffer + context-&gt;buflen + 1, 0,</div><div class='del'>-		63 - context-&gt;buflen);</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-	(void)memcpy(X, context-&gt;bbuffer, sizeof(X));</div><div class='del'>-#else</div><div class='del'>-	for (j=0; j &lt; 16; j++)</div><div class='del'>-		X[j] = BYTES_TO_DWORD(context-&gt;bbuffer + (4 * j));</div><div class='del'>-#endif</div><div class='del'>-	if ((context-&gt;buflen) &gt; 55) {</div><div class='del'>-		/* length goes to next block */</div><div class='del'>-		RMD160_Transform(context-&gt;state, X);</div><div class='del'>-		(void)memset(X, 0, sizeof(X));</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* append length in bits */</div><div class='del'>-	X[14] = context-&gt;length[0] &lt;&lt; 3;</div><div class='del'>-	X[15] = (context-&gt;length[0] &gt;&gt; 29) |</div><div class='del'>-	    (context-&gt;length[1] &lt;&lt; 3);</div><div class='del'>-	RMD160_Transform(context-&gt;state, X);</div><div class='del'>-</div><div class='del'>-	if (digest != NULL) {</div><div class='del'>-		for (i = 0; i &lt; 20; i += 4) {</div><div class='del'>-			/* extracts the 8 least significant bits. */</div><div class='del'>-			digest[i]     =  context-&gt;state[i&gt;&gt;2];</div><div class='del'>-			digest[i + 1] = (context-&gt;state[i&gt;&gt;2] &gt;&gt;  8);</div><div class='del'>-			digest[i + 2] = (context-&gt;state[i&gt;&gt;2] &gt;&gt; 16);</div><div class='del'>-			digest[i + 3] = (context-&gt;state[i&gt;&gt;2] &gt;&gt; 24);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/************************ end of file rmd160.c **********************/</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160.h b/ext/digest/rmd160/rmd160.h<br/>deleted file mode 100644<br/>index 54d1ca9140..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-/*	$NetBSD: rmd160.h,v 1.2 2000/07/07 10:47:06 ad Exp $	*/</div><div class='del'>-/*	$RoughId: rmd160.h,v 1.3 2002/02/24 08:14:31 knu Exp $	*/</div><div class='del'>-/*	$Id$	*/</div><div class='del'>-</div><div class='del'>-/********************************************************************\</div><div class='del'>- *</div><div class='del'>- *      FILE:     rmd160.h</div><div class='del'>- *</div><div class='del'>- *      CONTENTS: Header file for a sample C-implementation of the</div><div class='del'>- *                RIPEMD-160 hash-function. </div><div class='del'>- *      TARGET:   any computer with an ANSI C compiler</div><div class='del'>- *</div><div class='del'>- *      AUTHOR:   Antoon Bosselaers, ESAT-COSIC</div><div class='del'>- *      DATE:     1 March 1996</div><div class='del'>- *      VERSION:  1.0</div><div class='del'>- *</div><div class='del'>- *      Copyright (c) Katholieke Universiteit Leuven</div><div class='del'>- *      1996, All Rights Reserved</div><div class='del'>- *</div><div class='del'>-\********************************************************************/</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * from OpenBSD: rmd160.h,v 1.4 1999/08/16 09:59:04 millert Exp</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef _RMD160_H_</div><div class='del'>-#define _RMD160_H_</div><div class='del'>-</div><div class='del'>-#include "defs.h"</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-	uint32_t	state[5];	/* state (ABCDE) */</div><div class='del'>-	uint32_t	length[2];	/* number of bits */</div><div class='del'>-	uint8_t		bbuffer[64];    /* overflow buffer */</div><div class='del'>-	uint32_t	buflen;		/* number of chars in bbuffer */</div><div class='del'>-} RMD160_CTX;</div><div class='del'>-</div><div class='del'>-#ifdef RUBY</div><div class='del'>-#define RMD160_Init	rb_Digest_RMD160_Init</div><div class='del'>-#define RMD160_Transform	rb_Digest_RMD160_Transform</div><div class='del'>-#define RMD160_Update	rb_Digest_RMD160_Update</div><div class='del'>-#define RMD160_Finish	rb_Digest_RMD160_Finish</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-__BEGIN_DECLS</div><div class='del'>-void	RMD160_Init _((RMD160_CTX *));</div><div class='del'>-void	RMD160_Transform _((uint32_t[5], const uint32_t[16]));</div><div class='del'>-void	RMD160_Update _((RMD160_CTX *, const uint8_t *, size_t));</div><div class='del'>-void	RMD160_Finish _((RMD160_CTX *, uint8_t[20]));</div><div class='del'>-__END_DECLS</div><div class='del'>-</div><div class='del'>-#define RMD160_BLOCK_LENGTH             64</div><div class='del'>-#define RMD160_DIGEST_LENGTH            20</div><div class='del'>-#define RMD160_DIGEST_STRING_LENGTH     (RMD160_DIGEST_LENGTH * 2 + 1)</div><div class='del'>-</div><div class='del'>-#endif  /* !_RMD160_H_ */</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160init.c b/ext/digest/rmd160/rmd160init.c<br/>deleted file mode 100644<br/>index 763867df86..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160init.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160init.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-/* $RoughId: rmd160init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#include "digest.h"</div><div class='del'>-#if defined(HAVE_OPENSSL_RIPEMD_H)</div><div class='del'>-#include "rmd160ossl.h"</div><div class='del'>-#else</div><div class='del'>-#include "rmd160.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static rb_digest_metadata_t rmd160 = {</div><div class='del'>-    RUBY_DIGEST_API_VERSION,</div><div class='del'>-    RMD160_DIGEST_LENGTH,</div><div class='del'>-    RMD160_BLOCK_LENGTH,</div><div class='del'>-    sizeof(RMD160_CTX),</div><div class='del'>-    (rb_digest_hash_init_func_t)RMD160_Init,</div><div class='del'>-    (rb_digest_hash_update_func_t)RMD160_Update,</div><div class='del'>-    (rb_digest_hash_finish_func_t)RMD160_Finish,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * A class for calculating message digests using RIPEMD-160</div><div class='del'>- * cryptographic hash function, designed by Hans Dobbertin, Antoon</div><div class='del'>- * Bosselaers, and Bart Preneel.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_rmd160()</div><div class='del'>-{</div><div class='del'>-    VALUE mDigest, cDigest_Base, cDigest_RMD160;</div><div class='del'>-</div><div class='del'>-    rb_require("digest");</div><div class='del'>-</div><div class='del'>-    mDigest = rb_path2class("Digest");</div><div class='del'>-    cDigest_Base = rb_path2class("Digest::Base");</div><div class='del'>-</div><div class='del'>-    cDigest_RMD160 = rb_define_class_under(mDigest, "RMD160", cDigest_Base);</div><div class='del'>-</div><div class='del'>-    rb_ivar_set(cDigest_RMD160, rb_intern("metadata"),</div><div class='del'>-      Data_Wrap_Struct(rb_cObject, 0, 0, &amp;rmd160));</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160ossl.c b/ext/digest/rmd160/rmd160ossl.c<br/>deleted file mode 100644<br/>index f24e63e3d8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160ossl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160ossl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#include "defs.h"</div><div class='del'>-#include "rmd160ossl.h"</div><div class='del'>-</div><div class='del'>-void RMD160_Finish(RMD160_CTX *ctx, char *buf) {</div><div class='del'>-	RIPEMD160_Final((unsigned char *)buf, ctx);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/rmd160/rmd160ossl.h b/ext/digest/rmd160/rmd160ossl.h<br/>deleted file mode 100644<br/>index 3df38a01c0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/rmd160/rmd160ossl.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/rmd160/rmd160ossl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#ifndef RMD160OSSL_H_INCLUDED</div><div class='del'>-#define RMD160OSSL_H_INCLUDED</div><div class='del'>-</div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='del'>-#include &lt;openssl/ripemd.h&gt;</div><div class='del'>-</div><div class='del'>-#define RMD160_CTX	RIPEMD160_CTX</div><div class='del'>-</div><div class='del'>-#define RMD160_Init	RIPEMD160_Init</div><div class='del'>-#define RMD160_Update	RIPEMD160_Update</div><div class='del'>-</div><div class='del'>-#define RMD160_BLOCK_LENGTH		RIPEMD160_CBLOCK</div><div class='del'>-#define RMD160_DIGEST_LENGTH		RIPEMD160_DIGEST_LENGTH</div><div class='del'>-</div><div class='del'>-void RMD160_Finish(RMD160_CTX *ctx, char *buf);</div><div class='del'>-</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/digest/sha1/.cvsignore b/ext/digest/sha1/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/.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/digest/sha1/depend b/ext/digest/sha1/depend<br/>deleted file mode 100644<br/>index 61607844d0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-sha1.o: sha1.c sha1.h $(srcdir)/../defs.h $(hdrdir)/ruby.h \</div><div class='del'>-  $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h</div><div class='del'>-sha1init.o: sha1init.c $(srcdir)/../digest.h $(hdrdir)/ruby.h \</div><div class='del'>-  $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h \</div><div class='del'>-  sha1.h $(srcdir)/../defs.h</div><div class='del'>-sha1ossl.o: sha1ossl.h  $(srcdir)/../defs.h</div><div class='head'>diff --git a/ext/digest/sha1/extconf.rb b/ext/digest/sha1/extconf.rb<br/>deleted file mode 100644<br/>index 87b74c34af..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,28 +0,0 @@</div><div class='del'>-# $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require "mkmf"</div><div class='del'>-</div><div class='del'>-$defs &lt;&lt; "-DHAVE_CONFIG_H"</div><div class='del'>-$INCFLAGS &lt;&lt; " -I$(srcdir)/.."</div><div class='del'>-</div><div class='del'>-$objs = [ "sha1init.#{$OBJEXT}" ]</div><div class='del'>-</div><div class='del'>-dir_config("openssl")</div><div class='del'>-</div><div class='del'>-if !with_config("bundled-sha1") &amp;&amp;</div><div class='del'>-    have_library("crypto") &amp;&amp; have_header("openssl/sha.h")</div><div class='del'>-  $objs &lt;&lt; "sha1ossl.#{$OBJEXT}"</div><div class='del'>-else</div><div class='del'>-  $objs &lt;&lt; "sha1.#{$OBJEXT}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-have_header("sys/cdefs.h")</div><div class='del'>-</div><div class='del'>-have_header("inttypes.h")</div><div class='del'>-</div><div class='del'>-have_header("unistd.h")</div><div class='del'>-</div><div class='del'>-$preload = %w[digest]</div><div class='del'>-</div><div class='del'>-create_makefile("digest/sha1")</div><div class='head'>diff --git a/ext/digest/sha1/sha1.c b/ext/digest/sha1/sha1.c<br/>deleted file mode 100644<br/>index 6196ca6b82..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,269 +0,0 @@</div><div class='del'>-/*	$NetBSD: sha1.c,v 1.2 2001/03/22 09:51:48 agc Exp $	*/</div><div class='del'>-/*	$OpenBSD: sha1.c,v 1.9 1997/07/23 21:12:32 kstailey Exp $	*/</div><div class='del'>-/*	$RoughId: sha1.c,v 1.2 2001/07/13 19:49:10 knu Exp $	*/</div><div class='del'>-/*	$Id$	*/</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * SHA-1 in C</div><div class='del'>- * By Steve Reid &lt;steve@edmweb.com&gt;</div><div class='del'>- * 100% Public Domain</div><div class='del'>- *</div><div class='del'>- * Test Vectors (from FIPS PUB 180-1)</div><div class='del'>- * "abc"</div><div class='del'>- *   A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D</div><div class='del'>- * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"</div><div class='del'>- *   84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1</div><div class='del'>- * A million repetitions of "a"</div><div class='del'>- *   34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "sha1.h"</div><div class='del'>-</div><div class='del'>-#define SHA1HANDSOFF		/* Copies data before messing with it. */</div><div class='del'>-</div><div class='del'>-#if defined(_KERNEL) || defined(_STANDALONE)</div><div class='del'>-#include &lt;sys/param.h&gt;</div><div class='del'>-#include &lt;sys/systm.h&gt;</div><div class='del'>-#define _DIAGASSERT(x)	(void)0</div><div class='del'>-#else</div><div class='del'>-/* #include "namespace.h" */</div><div class='del'>-#include &lt;assert.h&gt;</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef _DIAGASSERT</div><div class='del'>-#define _DIAGASSERT(cond)	assert(cond)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * XXX Kludge until there is resolution regarding mem*() functions</div><div class='del'>- * XXX in the kernel.</div><div class='del'>- */</div><div class='del'>-#if defined(_KERNEL) || defined(_STANDALONE)</div><div class='del'>-#define	memcpy(s, d, l)		bcopy((d), (s), (l))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define rol(value, bits) (((value) &lt;&lt; (bits)) | ((value) &gt;&gt; (32 - (bits))))</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * blk0() and blk() perform the initial expand.</div><div class='del'>- * I got the idea of expanding during the round function from SSLeay</div><div class='del'>- */</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-# define blk0(i) (block-&gt;l[i] = (rol(block-&gt;l[i],24)&amp;0xFF00FF00) \</div><div class='del'>-    |(rol(block-&gt;l[i],8)&amp;0x00FF00FF))</div><div class='del'>-#else</div><div class='del'>-# define blk0(i) block-&gt;l[i]</div><div class='del'>-#endif</div><div class='del'>-#define blk(i) (block-&gt;l[i&amp;15] = rol(block-&gt;l[(i+13)&amp;15]^block-&gt;l[(i+8)&amp;15] \</div><div class='del'>-    ^block-&gt;l[(i+2)&amp;15]^block-&gt;l[i&amp;15],1))</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1</div><div class='del'>- */</div><div class='del'>-#define R0(v,w,x,y,z,i) z+=((w&amp;(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);</div><div class='del'>-#define R1(v,w,x,y,z,i) z+=((w&amp;(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);</div><div class='del'>-#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);</div><div class='del'>-#define R3(v,w,x,y,z,i) z+=(((w|x)&amp;y)|(w&amp;x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);</div><div class='del'>-#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-typedef union {</div><div class='del'>-    uint8_t c[64];</div><div class='del'>-    uint32_t l[16];</div><div class='del'>-} CHAR64LONG16;</div><div class='del'>-</div><div class='del'>-#ifdef __sparc_v9__</div><div class='del'>-void do_R01(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t *e, CHAR64LONG16 *);</div><div class='del'>-void do_R2(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t *e, CHAR64LONG16 *);</div><div class='del'>-void do_R3(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t *e, CHAR64LONG16 *);</div><div class='del'>-void do_R4(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t *e, CHAR64LONG16 *);</div><div class='del'>-</div><div class='del'>-#define nR0(v,w,x,y,z,i) R0(*v,*w,*x,*y,*z,i)</div><div class='del'>-#define nR1(v,w,x,y,z,i) R1(*v,*w,*x,*y,*z,i)</div><div class='del'>-#define nR2(v,w,x,y,z,i) R2(*v,*w,*x,*y,*z,i)</div><div class='del'>-#define nR3(v,w,x,y,z,i) R3(*v,*w,*x,*y,*z,i)</div><div class='del'>-#define nR4(v,w,x,y,z,i) R4(*v,*w,*x,*y,*z,i)</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-do_R01(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t *e, CHAR64LONG16 *block)</div><div class='del'>-{</div><div class='del'>-    nR0(a,b,c,d,e, 0); nR0(e,a,b,c,d, 1); nR0(d,e,a,b,c, 2); nR0(c,d,e,a,b, 3);</div><div class='del'>-    nR0(b,c,d,e,a, 4); nR0(a,b,c,d,e, 5); nR0(e,a,b,c,d, 6); nR0(d,e,a,b,c, 7);</div><div class='del'>-    nR0(c,d,e,a,b, 8); nR0(b,c,d,e,a, 9); nR0(a,b,c,d,e,10); nR0(e,a,b,c,d,11);</div><div class='del'>-    nR0(d,e,a,b,c,12); nR0(c,d,e,a,b,13); nR0(b,c,d,e,a,14); nR0(a,b,c,d,e,15);</div><div class='del'>-    nR1(e,a,b,c,d,16); nR1(d,e,a,b,c,17); nR1(c,d,e,a,b,18); nR1(b,c,d,e,a,19);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-do_R2(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t *e, CHAR64LONG16 *block)</div><div class='del'>-{</div><div class='del'>-    nR2(a,b,c,d,e,20); nR2(e,a,b,c,d,21); nR2(d,e,a,b,c,22); nR2(c,d,e,a,b,23);</div><div class='del'>-    nR2(b,c,d,e,a,24); nR2(a,b,c,d,e,25); nR2(e,a,b,c,d,26); nR2(d,e,a,b,c,27);</div><div class='del'>-    nR2(c,d,e,a,b,28); nR2(b,c,d,e,a,29); nR2(a,b,c,d,e,30); nR2(e,a,b,c,d,31);</div><div class='del'>-    nR2(d,e,a,b,c,32); nR2(c,d,e,a,b,33); nR2(b,c,d,e,a,34); nR2(a,b,c,d,e,35);</div><div class='del'>-    nR2(e,a,b,c,d,36); nR2(d,e,a,b,c,37); nR2(c,d,e,a,b,38); nR2(b,c,d,e,a,39);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-do_R3(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t *e, CHAR64LONG16 *block)</div><div class='del'>-{</div><div class='del'>-    nR3(a,b,c,d,e,40); nR3(e,a,b,c,d,41); nR3(d,e,a,b,c,42); nR3(c,d,e,a,b,43);</div><div class='del'>-    nR3(b,c,d,e,a,44); nR3(a,b,c,d,e,45); nR3(e,a,b,c,d,46); nR3(d,e,a,b,c,47);</div><div class='del'>-    nR3(c,d,e,a,b,48); nR3(b,c,d,e,a,49); nR3(a,b,c,d,e,50); nR3(e,a,b,c,d,51);</div><div class='del'>-    nR3(d,e,a,b,c,52); nR3(c,d,e,a,b,53); nR3(b,c,d,e,a,54); nR3(a,b,c,d,e,55);</div><div class='del'>-    nR3(e,a,b,c,d,56); nR3(d,e,a,b,c,57); nR3(c,d,e,a,b,58); nR3(b,c,d,e,a,59);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-do_R4(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *d, uint32_t *e, CHAR64LONG16 *block)</div><div class='del'>-{</div><div class='del'>-    nR4(a,b,c,d,e,60); nR4(e,a,b,c,d,61); nR4(d,e,a,b,c,62); nR4(c,d,e,a,b,63);</div><div class='del'>-    nR4(b,c,d,e,a,64); nR4(a,b,c,d,e,65); nR4(e,a,b,c,d,66); nR4(d,e,a,b,c,67);</div><div class='del'>-    nR4(c,d,e,a,b,68); nR4(b,c,d,e,a,69); nR4(a,b,c,d,e,70); nR4(e,a,b,c,d,71);</div><div class='del'>-    nR4(d,e,a,b,c,72); nR4(c,d,e,a,b,73); nR4(b,c,d,e,a,74); nR4(a,b,c,d,e,75);</div><div class='del'>-    nR4(e,a,b,c,d,76); nR4(d,e,a,b,c,77); nR4(c,d,e,a,b,78); nR4(b,c,d,e,a,79);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Hash a single 512-bit block. This is the core of the algorithm.</div><div class='del'>- */</div><div class='del'>-void SHA1_Transform(uint32_t state[5], const uint8_t buffer[64])</div><div class='del'>-{</div><div class='del'>-    uint32_t a, b, c, d, e;</div><div class='del'>-    CHAR64LONG16 *block;</div><div class='del'>-</div><div class='del'>-#ifdef SHA1HANDSOFF</div><div class='del'>-    CHAR64LONG16 workspace;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    _DIAGASSERT(buffer != 0);</div><div class='del'>-    _DIAGASSERT(state != 0);</div><div class='del'>-</div><div class='del'>-#ifdef SHA1HANDSOFF</div><div class='del'>-    block = &amp;workspace;</div><div class='del'>-    (void)memcpy(block, buffer, 64);</div><div class='del'>-#else</div><div class='del'>-    block = (CHAR64LONG16 *)(void *)buffer;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* Copy context-&gt;state[] to working vars */</div><div class='del'>-    a = state[0];</div><div class='del'>-    b = state[1];</div><div class='del'>-    c = state[2];</div><div class='del'>-    d = state[3];</div><div class='del'>-    e = state[4];</div><div class='del'>-</div><div class='del'>-#ifdef __sparc_v9__</div><div class='del'>-    do_R01(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e, block);</div><div class='del'>-    do_R2(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e, block);</div><div class='del'>-    do_R3(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e, block);</div><div class='del'>-    do_R4(&amp;a, &amp;b, &amp;c, &amp;d, &amp;e, block);</div><div class='del'>-#else</div><div class='del'>-    /* 4 rounds of 20 operations each. Loop unrolled. */</div><div class='del'>-    R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);</div><div class='del'>-    R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);</div><div class='del'>-    R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);</div><div class='del'>-    R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);</div><div class='del'>-    R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);</div><div class='del'>-    R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);</div><div class='del'>-    R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);</div><div class='del'>-    R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);</div><div class='del'>-    R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);</div><div class='del'>-    R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);</div><div class='del'>-    R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);</div><div class='del'>-    R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);</div><div class='del'>-    R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);</div><div class='del'>-    R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);</div><div class='del'>-    R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);</div><div class='del'>-    R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);</div><div class='del'>-    R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);</div><div class='del'>-    R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);</div><div class='del'>-    R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);</div><div class='del'>-    R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* Add the working vars back into context.state[] */</div><div class='del'>-    state[0] += a;</div><div class='del'>-    state[1] += b;</div><div class='del'>-    state[2] += c;</div><div class='del'>-    state[3] += d;</div><div class='del'>-    state[4] += e;</div><div class='del'>-</div><div class='del'>-    /* Wipe variables */</div><div class='del'>-    a = b = c = d = e = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * SHA1_Init - Initialize new context</div><div class='del'>- */</div><div class='del'>-void SHA1_Init(SHA1_CTX *context)</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-    _DIAGASSERT(context != 0);</div><div class='del'>-</div><div class='del'>-    /* SHA1 initialization constants */</div><div class='del'>-    context-&gt;state[0] = 0x67452301;</div><div class='del'>-    context-&gt;state[1] = 0xEFCDAB89;</div><div class='del'>-    context-&gt;state[2] = 0x98BADCFE;</div><div class='del'>-    context-&gt;state[3] = 0x10325476;</div><div class='del'>-    context-&gt;state[4] = 0xC3D2E1F0;</div><div class='del'>-    context-&gt;count[0] = context-&gt;count[1] = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Run your data through this.</div><div class='del'>- */</div><div class='del'>-void SHA1_Update(SHA1_CTX *context, const uint8_t *data, size_t len)</div><div class='del'>-{</div><div class='del'>-    uint32_t i, j;</div><div class='del'>-</div><div class='del'>-    _DIAGASSERT(context != 0);</div><div class='del'>-    _DIAGASSERT(data != 0);</div><div class='del'>-</div><div class='del'>-    j = context-&gt;count[0];</div><div class='del'>-    if ((context-&gt;count[0] += len &lt;&lt; 3) &lt; j)</div><div class='del'>-	context-&gt;count[1] += (len&gt;&gt;29)+1;</div><div class='del'>-    j = (j &gt;&gt; 3) &amp; 63;</div><div class='del'>-    if ((j + len) &gt; 63) {</div><div class='del'>-	(void)memcpy(&amp;context-&gt;buffer[j], data, (i = 64-j));</div><div class='del'>-	SHA1_Transform(context-&gt;state, context-&gt;buffer);</div><div class='del'>-	for ( ; i + 63 &lt; len; i += 64)</div><div class='del'>-	    SHA1_Transform(context-&gt;state, &amp;data[i]);</div><div class='del'>-	j = 0;</div><div class='del'>-    } else {</div><div class='del'>-	i = 0;</div><div class='del'>-    }</div><div class='del'>-    (void)memcpy(&amp;context-&gt;buffer[j], &amp;data[i], len - i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Add padding and return the message digest.</div><div class='del'>- */</div><div class='del'>-void SHA1_Finish(SHA1_CTX* context, uint8_t digest[20])</div><div class='del'>-{</div><div class='del'>-    size_t i;</div><div class='del'>-    uint8_t finalcount[8];</div><div class='del'>-</div><div class='del'>-    _DIAGASSERT(digest != 0);</div><div class='del'>-    _DIAGASSERT(context != 0);</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; 8; i++) {</div><div class='del'>-	finalcount[i] = (uint8_t)((context-&gt;count[(i &gt;= 4 ? 0 : 1)]</div><div class='del'>-	 &gt;&gt; ((3-(i &amp; 3)) * 8) ) &amp; 255);	 /* Endian independent */</div><div class='del'>-    }</div><div class='del'>-    SHA1_Update(context, (const uint8_t *)"\200", 1);</div><div class='del'>-    while ((context-&gt;count[0] &amp; 504) != 448)</div><div class='del'>-	SHA1_Update(context, (const uint8_t *)"\0", 1);</div><div class='del'>-    SHA1_Update(context, finalcount, 8);  /* Should cause a SHA1_Transform() */</div><div class='del'>-</div><div class='del'>-    if (digest) {</div><div class='del'>-	for (i = 0; i &lt; 20; i++)</div><div class='del'>-	    digest[i] = (uint8_t)</div><div class='del'>-		((context-&gt;state[i&gt;&gt;2] &gt;&gt; ((3-(i &amp; 3)) * 8) ) &amp; 255);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/sha1/sha1.h b/ext/digest/sha1/sha1.h<br/>deleted file mode 100644<br/>index 60e3b01fe2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-/*	$NetBSD: sha1.h,v 1.2 1998/05/29 22:55:44 thorpej Exp $	*/</div><div class='del'>-/*	$RoughId: sha1.h,v 1.3 2002/02/24 08:14:32 knu Exp $	*/</div><div class='del'>-/*	$Id$	*/</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * SHA-1 in C</div><div class='del'>- * By Steve Reid &lt;steve@edmweb.com&gt;</div><div class='del'>- * 100% Public Domain</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef _SYS_SHA1_H_</div><div class='del'>-#define	_SYS_SHA1_H_</div><div class='del'>-</div><div class='del'>-#include "defs.h"</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-	uint32_t state[5];</div><div class='del'>-	uint32_t count[2];  </div><div class='del'>-	uint8_t buffer[64];</div><div class='del'>-} SHA1_CTX;</div><div class='del'>-</div><div class='del'>-#ifdef RUBY</div><div class='del'>-/* avoid name clash */</div><div class='del'>-#define SHA1_Transform	rb_Digest_SHA1_Transform</div><div class='del'>-#define SHA1_Init	rb_Digest_SHA1_Init</div><div class='del'>-#define SHA1_Update	rb_Digest_SHA1_Update</div><div class='del'>-#define SHA1_Finish	rb_Digest_SHA1_Finish</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void	SHA1_Transform _((uint32_t state[5], const uint8_t buffer[64]));</div><div class='del'>-void	SHA1_Init _((SHA1_CTX *context));</div><div class='del'>-void	SHA1_Update _((SHA1_CTX *context, const uint8_t *data, size_t len));</div><div class='del'>-void	SHA1_Finish _((SHA1_CTX *context, uint8_t digest[20]));</div><div class='del'>-</div><div class='del'>-#define SHA1_BLOCK_LENGTH		64</div><div class='del'>-#define SHA1_DIGEST_LENGTH		20</div><div class='del'>-#define SHA1_DIGEST_STRING_LENGTH	(SHA1_DIGEST_LENGTH * 2 + 1)</div><div class='del'>-  </div><div class='del'>-#endif /* _SYS_SHA1_H_ */</div><div class='head'>diff --git a/ext/digest/sha1/sha1init.c b/ext/digest/sha1/sha1init.c<br/>deleted file mode 100644<br/>index b2146f05a9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1init.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1init.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-/* $RoughId: sha1init.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#include "digest.h"</div><div class='del'>-#if defined(HAVE_OPENSSL_SHA_H)</div><div class='del'>-#include "sha1ossl.h"</div><div class='del'>-#else</div><div class='del'>-#include "sha1.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static rb_digest_metadata_t sha1 = {</div><div class='del'>-    RUBY_DIGEST_API_VERSION,</div><div class='del'>-    SHA1_DIGEST_LENGTH,</div><div class='del'>-    SHA1_BLOCK_LENGTH,</div><div class='del'>-    sizeof(SHA1_CTX),</div><div class='del'>-    (rb_digest_hash_init_func_t)SHA1_Init,</div><div class='del'>-    (rb_digest_hash_update_func_t)SHA1_Update,</div><div class='del'>-    (rb_digest_hash_finish_func_t)SHA1_Finish,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * A class for calculating message digests using the SHA-1 Secure Hash</div><div class='del'>- * Algorithm by NIST (the US' National Institute of Standards and</div><div class='del'>- * Technology), described in FIPS PUB 180-1.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_sha1()</div><div class='del'>-{</div><div class='del'>-    VALUE mDigest, cDigest_Base, cDigest_SHA1;</div><div class='del'>- </div><div class='del'>-    rb_require("digest");</div><div class='del'>- </div><div class='del'>-    mDigest = rb_path2class("Digest");</div><div class='del'>-    cDigest_Base = rb_path2class("Digest::Base");</div><div class='del'>-</div><div class='del'>-    cDigest_SHA1 = rb_define_class_under(mDigest, "SHA1", cDigest_Base);</div><div class='del'>-</div><div class='del'>-    rb_ivar_set(cDigest_SHA1, rb_intern("metadata"),</div><div class='del'>-      Data_Wrap_Struct(rb_cObject, 0, 0, &amp;sha1));</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/sha1/sha1ossl.c b/ext/digest/sha1/sha1ossl.c<br/>deleted file mode 100644<br/>index 452cf35084..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1ossl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1ossl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#include "defs.h"</div><div class='del'>-#include "sha1ossl.h"</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-SHA1_Finish(SHA1_CTX *ctx, char *buf)</div><div class='del'>-{</div><div class='del'>-	SHA1_Final((unsigned char *)buf, ctx);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/sha1/sha1ossl.h b/ext/digest/sha1/sha1ossl.h<br/>deleted file mode 100644<br/>index 8f9984cc64..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha1/sha1ossl.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha1/sha1ossl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#ifndef SHA1OSSL_H_INCLUDED</div><div class='del'>-#define SHA1OSSL_H_INCLUDED</div><div class='del'>-</div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='del'>-#include &lt;openssl/sha.h&gt;</div><div class='del'>-</div><div class='del'>-#define SHA1_CTX	SHA_CTX</div><div class='del'>-</div><div class='del'>-#ifdef SHA_BLOCK_LENGTH</div><div class='del'>-#define SHA1_BLOCK_LENGTH	SHA_BLOCK_LENGTH</div><div class='del'>-#else</div><div class='del'>-#define SHA1_BLOCK_LENGTH	SHA_CBLOCK</div><div class='del'>-#endif</div><div class='del'>-#define SHA1_DIGEST_LENGTH	SHA_DIGEST_LENGTH</div><div class='del'>-</div><div class='del'>-void SHA1_Finish(SHA1_CTX *ctx, char *buf);</div><div class='del'>-</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/digest/sha2/.cvsignore b/ext/digest/sha2/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/.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/digest/sha2/depend b/ext/digest/sha2/depend<br/>deleted file mode 100644<br/>index 225d6ad52b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-sha2.o: sha2.c sha2.h $(srcdir)/../defs.h $(hdrdir)/ruby.h \</div><div class='del'>-  $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h</div><div class='del'>-sha2init.o: sha2init.c $(srcdir)/../digest.h $(hdrdir)/ruby.h \</div><div class='del'>-  $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h \</div><div class='del'>-  sha2.h $(srcdir)/../defs.h</div><div class='head'>diff --git a/ext/digest/sha2/extconf.rb b/ext/digest/sha2/extconf.rb<br/>deleted file mode 100644<br/>index c084a51a64..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,24 +0,0 @@</div><div class='del'>-# $RoughId: extconf.rb,v 1.4 2001/08/14 19:54:51 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require "mkmf"</div><div class='del'>-</div><div class='del'>-$defs &lt;&lt; "-DHAVE_CONFIG_H"</div><div class='del'>-$INCFLAGS &lt;&lt; " -I$(srcdir)/.."</div><div class='del'>-</div><div class='del'>-$objs = [</div><div class='del'>-  "sha2.#{$OBJEXT}",</div><div class='del'>-  "sha2init.#{$OBJEXT}",</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-have_header("sys/cdefs.h")</div><div class='del'>-</div><div class='del'>-have_header("inttypes.h")</div><div class='del'>-</div><div class='del'>-have_header("unistd.h")</div><div class='del'>-</div><div class='del'>-$preload = %w[digest]</div><div class='del'>-</div><div class='del'>-if have_type("uint64_t", "defs.h", $defs.join(' '))</div><div class='del'>-  create_makefile("digest/sha2")</div><div class='del'>-end</div><div class='head'>diff --git a/ext/digest/sha2/lib/sha2.rb b/ext/digest/sha2/lib/sha2.rb<br/>deleted file mode 100644<br/>index 52dd639f9b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/lib/sha2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/lib/sha2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +0,0 @@</div><div class='del'>-#--</div><div class='del'>-# sha2.rb - defines Digest::SHA2 class which wraps up the SHA256,</div><div class='del'>-#           SHA384, and SHA512 classes.</div><div class='del'>-#++</div><div class='del'>-# Copyright (c) 2006 Akinori MUSHA &lt;knu@iDaemons.org&gt;</div><div class='del'>-#</div><div class='del'>-# All rights reserved.  You can redistribute and/or modify it under the same</div><div class='del'>-# terms as Ruby.</div><div class='del'>-#</div><div class='del'>-#   $Id$</div><div class='del'>-</div><div class='del'>-require 'digest'</div><div class='del'>-</div><div class='del'>-module Digest</div><div class='del'>-  #</div><div class='del'>-  # A meta digest provider class for SHA256, SHA384 and SHA512.</div><div class='del'>-  #</div><div class='del'>-  class SHA2 &lt; Digest::Class</div><div class='del'>-    # call-seq:</div><div class='del'>-    #     Digest::SHA2.new(bitlen = 256) -&gt; digest_obj</div><div class='del'>-    #</div><div class='del'>-    # Creates a new SHA2 hash object with a given bit length.</div><div class='del'>-    def initialize(bitlen = 256)</div><div class='del'>-      case bitlen</div><div class='del'>-      when 256</div><div class='del'>-        @sha2 = Digest::SHA256.new</div><div class='del'>-      when 384</div><div class='del'>-        @sha2 = Digest::SHA384.new</div><div class='del'>-      when 512</div><div class='del'>-        @sha2 = Digest::SHA512.new</div><div class='del'>-      else</div><div class='del'>-        raise ArgumentError, "unsupported bit length: %s" % bitlen.inspect</div><div class='del'>-      end</div><div class='del'>-      @bitlen = bitlen</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # :nodoc:</div><div class='del'>-    def reset</div><div class='del'>-      @sha2.reset</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # :nodoc:</div><div class='del'>-    def update(str)</div><div class='del'>-      @sha2.update(str)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    alias &lt;&lt; update</div><div class='del'>-</div><div class='del'>-    def finish</div><div class='del'>-      @sha2.digest!</div><div class='del'>-    end</div><div class='del'>-    private :finish</div><div class='del'>-</div><div class='del'>-    def block_length</div><div class='del'>-      @sha2.block_length</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def digest_length</div><div class='del'>-      @sha2.digest_length</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # :nodoc:</div><div class='del'>-    def initialize_copy(other)</div><div class='del'>-      @sha2 = other.instance_eval { @sha2.clone }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # :nodoc:</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;%s:%d %s&gt;" % [self.class.name, @bitlen, hexdigest]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/digest/sha2/sha2.c b/ext/digest/sha2/sha2.c<br/>deleted file mode 100644<br/>index aca9ee926f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/sha2.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/sha2.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,919 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * sha2.c</div><div class='del'>- *</div><div class='del'>- * Version 1.0.0beta1</div><div class='del'>- *</div><div class='del'>- * Written by Aaron D. Gifford &lt;me@aarongifford.com&gt;</div><div class='del'>- *</div><div class='del'>- * Copyright 2000 Aaron D. Gifford.  All rights reserved.</div><div class='del'>- *</div><div class='del'>- * Redistribution and use in source and binary forms, with or without</div><div class='del'>- * modification, are permitted provided that the following conditions</div><div class='del'>- * are met:</div><div class='del'>- * 1. Redistributions of source code must retain the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer.</div><div class='del'>- * 2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer in the</div><div class='del'>- *    documentation and/or other materials provided with the distribution.</div><div class='del'>- * 3. Neither the name of the copyright holder nor the names of contributors</div><div class='del'>- *    may be used to endorse or promote products derived from this software</div><div class='del'>- *    without specific prior written permission.</div><div class='del'>- * </div><div class='del'>- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND</div><div class='del'>- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</div><div class='del'>- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE</div><div class='del'>- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</div><div class='del'>- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</div><div class='del'>- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</div><div class='del'>- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</div><div class='del'>- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</div><div class='del'>- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='del'>- * SUCH DAMAGE.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/* $RoughId: sha2.c,v 1.3 2002/02/26 22:03:36 knu Exp $ */</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#include "sha2.h"</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;string.h&gt;	/* memcpy()/memset() or bcopy()/bzero() */</div><div class='del'>-#include &lt;assert.h&gt;	/* assert() */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ASSERT NOTE:</div><div class='del'>- * Some sanity checking code is included using assert().  On my FreeBSD</div><div class='del'>- * system, this additional code can be removed by compiling with NDEBUG</div><div class='del'>- * defined.  Check your own systems manpage on assert() to see how to</div><div class='del'>- * compile WITHOUT the sanity checking code on your system.</div><div class='del'>- *</div><div class='del'>- * UNROLLED TRANSFORM LOOP NOTE:</div><div class='del'>- * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform</div><div class='del'>- * loop version for the hash transform rounds (defined using macros</div><div class='del'>- * later in this file).  Either define on the command line, for example:</div><div class='del'>- *</div><div class='del'>- *   cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c</div><div class='del'>- *</div><div class='del'>- * or define below:</div><div class='del'>- *</div><div class='del'>- *   #define SHA2_UNROLL_TRANSFORM</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** SHA-256/384/512 Machine Architecture Definitions *****************/</div><div class='del'>-typedef uint8_t  sha2_byte;	/* Exactly 1 byte */</div><div class='del'>-typedef uint32_t sha2_word32;	/* Exactly 4 bytes */</div><div class='del'>-typedef uint64_t sha2_word64;	/* Exactly 8 bytes */</div><div class='del'>-</div><div class='del'>-#if defined(__GNUC__) || defined(_HPUX_SOURCE) || defined(__IBMC__)</div><div class='del'>-#define ULL(number)	number##ULL</div><div class='del'>-#else</div><div class='del'>-#define ULL(number)	(uint64_t)(number)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** SHA-256/384/512 Various Length Definitions ***********************/</div><div class='del'>-/* NOTE: Most of these are in sha2.h */</div><div class='del'>-#define SHA256_SHORT_BLOCK_LENGTH	(SHA256_BLOCK_LENGTH - 8)</div><div class='del'>-#define SHA384_SHORT_BLOCK_LENGTH	(SHA384_BLOCK_LENGTH - 16)</div><div class='del'>-#define SHA512_SHORT_BLOCK_LENGTH	(SHA512_BLOCK_LENGTH - 16)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** ENDIAN REVERSAL MACROS *******************************************/</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-#define REVERSE32(w,x)	{ \</div><div class='del'>-	sha2_word32 tmp = (w); \</div><div class='del'>-	tmp = (tmp &gt;&gt; 16) | (tmp &lt;&lt; 16); \</div><div class='del'>-	(x) = ((tmp &amp; 0xff00ff00UL) &gt;&gt; 8) | ((tmp &amp; 0x00ff00ffUL) &lt;&lt; 8); \</div><div class='del'>-}</div><div class='del'>-#define REVERSE64(w,x)	{ \</div><div class='del'>-	sha2_word64 tmp = (w); \</div><div class='del'>-	tmp = (tmp &gt;&gt; 32) | (tmp &lt;&lt; 32); \</div><div class='del'>-	tmp = ((tmp &amp; ULL(0xff00ff00ff00ff00)) &gt;&gt; 8) | \</div><div class='del'>-	      ((tmp &amp; ULL(0x00ff00ff00ff00ff)) &lt;&lt; 8); \</div><div class='del'>-	(x) = ((tmp &amp; ULL(0xffff0000ffff0000)) &gt;&gt; 16) | \</div><div class='del'>-	      ((tmp &amp; ULL(0x0000ffff0000ffff)) &lt;&lt; 16); \</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Macro for incrementally adding the unsigned 64-bit integer n to the</div><div class='del'>- * unsigned 128-bit integer (represented using a two-element array of</div><div class='del'>- * 64-bit words):</div><div class='del'>- */</div><div class='del'>-#define ADDINC128(w,n)	{ \</div><div class='del'>-	(w)[0] += (sha2_word64)(n); \</div><div class='del'>-	if ((w)[0] &lt; (n)) { \</div><div class='del'>-		(w)[1]++; \</div><div class='del'>-	} \</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Macros for copying blocks of memory and for zeroing out ranges</div><div class='del'>- * of memory.  Using these macros makes it easy to switch from</div><div class='del'>- * using memset()/memcpy() and using bzero()/bcopy().</div><div class='del'>- *</div><div class='del'>- * Please define either SHA2_USE_MEMSET_MEMCPY or define</div><div class='del'>- * SHA2_USE_BZERO_BCOPY depending on which function set you</div><div class='del'>- * choose to use:</div><div class='del'>- */</div><div class='del'>-#if !defined(SHA2_USE_MEMSET_MEMCPY) &amp;&amp; !defined(SHA2_USE_BZERO_BCOPY)</div><div class='del'>-/* Default to memset()/memcpy() if no option is specified */</div><div class='del'>-#define	SHA2_USE_MEMSET_MEMCPY	1</div><div class='del'>-#endif</div><div class='del'>-#if defined(SHA2_USE_MEMSET_MEMCPY) &amp;&amp; defined(SHA2_USE_BZERO_BCOPY)</div><div class='del'>-/* Abort with an error if BOTH options are defined */</div><div class='del'>-#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both!</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef SHA2_USE_MEMSET_MEMCPY</div><div class='del'>-#define MEMSET_BZERO(p,l)	memset((p), 0, (l))</div><div class='del'>-#define MEMCPY_BCOPY(d,s,l)	memcpy((d), (s), (l))</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHA2_USE_BZERO_BCOPY</div><div class='del'>-#define MEMSET_BZERO(p,l)	bzero((p), (l))</div><div class='del'>-#define MEMCPY_BCOPY(d,s,l)	bcopy((s), (d), (l))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** THE SIX LOGICAL FUNCTIONS ****************************************/</div><div class='del'>-/*</div><div class='del'>- * Bit shifting and rotation (used by the six SHA-XYZ logical functions:</div><div class='del'>- *</div><div class='del'>- *   NOTE:  The naming of R and S appears backwards here (R is a SHIFT and</div><div class='del'>- *   S is a ROTATION) because the SHA-256/384/512 description document</div><div class='del'>- *   (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this</div><div class='del'>- *   same "backwards" definition.</div><div class='del'>- */</div><div class='del'>-/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */</div><div class='del'>-#define R(b,x) 		((x) &gt;&gt; (b))</div><div class='del'>-/* 32-bit Rotate-right (used in SHA-256): */</div><div class='del'>-#define S32(b,x)	(((x) &gt;&gt; (b)) | ((x) &lt;&lt; (32 - (b))))</div><div class='del'>-/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */</div><div class='del'>-#define S64(b,x)	(((x) &gt;&gt; (b)) | ((x) &lt;&lt; (64 - (b))))</div><div class='del'>-</div><div class='del'>-/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */</div><div class='del'>-#define Ch(x,y,z)	(((x) &amp; (y)) ^ ((~(x)) &amp; (z)))</div><div class='del'>-#define Maj(x,y,z)	(((x) &amp; (y)) ^ ((x) &amp; (z)) ^ ((y) &amp; (z)))</div><div class='del'>-</div><div class='del'>-/* Four of six logical functions used in SHA-256: */</div><div class='del'>-#define Sigma0_256(x)	(S32(2,  (x)) ^ S32(13, (x)) ^ S32(22, (x)))</div><div class='del'>-#define Sigma1_256(x)	(S32(6,  (x)) ^ S32(11, (x)) ^ S32(25, (x)))</div><div class='del'>-#define sigma0_256(x)	(S32(7,  (x)) ^ S32(18, (x)) ^ R(3 ,   (x)))</div><div class='del'>-#define sigma1_256(x)	(S32(17, (x)) ^ S32(19, (x)) ^ R(10,   (x)))</div><div class='del'>-</div><div class='del'>-/* Four of six logical functions used in SHA-384 and SHA-512: */</div><div class='del'>-#define Sigma0_512(x)	(S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))</div><div class='del'>-#define Sigma1_512(x)	(S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))</div><div class='del'>-#define sigma0_512(x)	(S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7,   (x)))</div><div class='del'>-#define sigma1_512(x)	(S64(19, (x)) ^ S64(61, (x)) ^ R( 6,   (x)))</div><div class='del'>-</div><div class='del'>-/*** INTERNAL FUNCTION PROTOTYPES *************************************/</div><div class='del'>-/* NOTE: These should not be accessed directly from outside this</div><div class='del'>- * library -- they are intended for private internal visibility/use</div><div class='del'>- * only.</div><div class='del'>- */</div><div class='del'>-void SHA512_Last(SHA512_CTX*);</div><div class='del'>-void SHA256_Transform(SHA256_CTX*, const sha2_word32*);</div><div class='del'>-void SHA512_Transform(SHA512_CTX*, const sha2_word64*);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/</div><div class='del'>-/* Hash constant words K for SHA-256: */</div><div class='del'>-const static sha2_word32 K256[64] = {</div><div class='del'>-	0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,</div><div class='del'>-	0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,</div><div class='del'>-	0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,</div><div class='del'>-	0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,</div><div class='del'>-	0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,</div><div class='del'>-	0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,</div><div class='del'>-	0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,</div><div class='del'>-	0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,</div><div class='del'>-	0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,</div><div class='del'>-	0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,</div><div class='del'>-	0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,</div><div class='del'>-	0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,</div><div class='del'>-	0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,</div><div class='del'>-	0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,</div><div class='del'>-	0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,</div><div class='del'>-	0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* Initial hash value H for SHA-256: */</div><div class='del'>-const static sha2_word32 sha256_initial_hash_value[8] = {</div><div class='del'>-	0x6a09e667UL,</div><div class='del'>-	0xbb67ae85UL,</div><div class='del'>-	0x3c6ef372UL,</div><div class='del'>-	0xa54ff53aUL,</div><div class='del'>-	0x510e527fUL,</div><div class='del'>-	0x9b05688cUL,</div><div class='del'>-	0x1f83d9abUL,</div><div class='del'>-	0x5be0cd19UL</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* Hash constant words K for SHA-384 and SHA-512: */</div><div class='del'>-const static sha2_word64 K512[80] = {</div><div class='del'>-	ULL(0x428a2f98d728ae22), ULL(0x7137449123ef65cd),</div><div class='del'>-	ULL(0xb5c0fbcfec4d3b2f), ULL(0xe9b5dba58189dbbc),</div><div class='del'>-	ULL(0x3956c25bf348b538), ULL(0x59f111f1b605d019),</div><div class='del'>-	ULL(0x923f82a4af194f9b), ULL(0xab1c5ed5da6d8118),</div><div class='del'>-	ULL(0xd807aa98a3030242), ULL(0x12835b0145706fbe),</div><div class='del'>-	ULL(0x243185be4ee4b28c), ULL(0x550c7dc3d5ffb4e2),</div><div class='del'>-	ULL(0x72be5d74f27b896f), ULL(0x80deb1fe3b1696b1),</div><div class='del'>-	ULL(0x9bdc06a725c71235), ULL(0xc19bf174cf692694),</div><div class='del'>-	ULL(0xe49b69c19ef14ad2), ULL(0xefbe4786384f25e3),</div><div class='del'>-	ULL(0x0fc19dc68b8cd5b5), ULL(0x240ca1cc77ac9c65),</div><div class='del'>-	ULL(0x2de92c6f592b0275), ULL(0x4a7484aa6ea6e483),</div><div class='del'>-	ULL(0x5cb0a9dcbd41fbd4), ULL(0x76f988da831153b5),</div><div class='del'>-	ULL(0x983e5152ee66dfab), ULL(0xa831c66d2db43210),</div><div class='del'>-	ULL(0xb00327c898fb213f), ULL(0xbf597fc7beef0ee4),</div><div class='del'>-	ULL(0xc6e00bf33da88fc2), ULL(0xd5a79147930aa725),</div><div class='del'>-	ULL(0x06ca6351e003826f), ULL(0x142929670a0e6e70),</div><div class='del'>-	ULL(0x27b70a8546d22ffc), ULL(0x2e1b21385c26c926),</div><div class='del'>-	ULL(0x4d2c6dfc5ac42aed), ULL(0x53380d139d95b3df),</div><div class='del'>-	ULL(0x650a73548baf63de), ULL(0x766a0abb3c77b2a8),</div><div class='del'>-	ULL(0x81c2c92e47edaee6), ULL(0x92722c851482353b),</div><div class='del'>-	ULL(0xa2bfe8a14cf10364), ULL(0xa81a664bbc423001),</div><div class='del'>-	ULL(0xc24b8b70d0f89791), ULL(0xc76c51a30654be30),</div><div class='del'>-	ULL(0xd192e819d6ef5218), ULL(0xd69906245565a910),</div><div class='del'>-	ULL(0xf40e35855771202a), ULL(0x106aa07032bbd1b8),</div><div class='del'>-	ULL(0x19a4c116b8d2d0c8), ULL(0x1e376c085141ab53),</div><div class='del'>-	ULL(0x2748774cdf8eeb99), ULL(0x34b0bcb5e19b48a8),</div><div class='del'>-	ULL(0x391c0cb3c5c95a63), ULL(0x4ed8aa4ae3418acb),</div><div class='del'>-	ULL(0x5b9cca4f7763e373), ULL(0x682e6ff3d6b2b8a3),</div><div class='del'>-	ULL(0x748f82ee5defb2fc), ULL(0x78a5636f43172f60),</div><div class='del'>-	ULL(0x84c87814a1f0ab72), ULL(0x8cc702081a6439ec),</div><div class='del'>-	ULL(0x90befffa23631e28), ULL(0xa4506cebde82bde9),</div><div class='del'>-	ULL(0xbef9a3f7b2c67915), ULL(0xc67178f2e372532b),</div><div class='del'>-	ULL(0xca273eceea26619c), ULL(0xd186b8c721c0c207),</div><div class='del'>-	ULL(0xeada7dd6cde0eb1e), ULL(0xf57d4f7fee6ed178),</div><div class='del'>-	ULL(0x06f067aa72176fba), ULL(0x0a637dc5a2c898a6),</div><div class='del'>-	ULL(0x113f9804bef90dae), ULL(0x1b710b35131c471b),</div><div class='del'>-	ULL(0x28db77f523047d84), ULL(0x32caab7b40c72493),</div><div class='del'>-	ULL(0x3c9ebe0a15c9bebc), ULL(0x431d67c49c100d4c),</div><div class='del'>-	ULL(0x4cc5d4becb3e42b6), ULL(0x597f299cfc657e2a),</div><div class='del'>-	ULL(0x5fcb6fab3ad6faec), ULL(0x6c44198c4a475817)</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* Initial hash value H for SHA-384 */</div><div class='del'>-const static sha2_word64 sha384_initial_hash_value[8] = {</div><div class='del'>-	ULL(0xcbbb9d5dc1059ed8),</div><div class='del'>-	ULL(0x629a292a367cd507),</div><div class='del'>-	ULL(0x9159015a3070dd17),</div><div class='del'>-	ULL(0x152fecd8f70e5939),</div><div class='del'>-	ULL(0x67332667ffc00b31),</div><div class='del'>-	ULL(0x8eb44a8768581511),</div><div class='del'>-	ULL(0xdb0c2e0d64f98fa7),</div><div class='del'>-	ULL(0x47b5481dbefa4fa4)</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* Initial hash value H for SHA-512 */</div><div class='del'>-const static sha2_word64 sha512_initial_hash_value[8] = {</div><div class='del'>-	ULL(0x6a09e667f3bcc908),</div><div class='del'>-	ULL(0xbb67ae8584caa73b),</div><div class='del'>-	ULL(0x3c6ef372fe94f82b),</div><div class='del'>-	ULL(0xa54ff53a5f1d36f1),</div><div class='del'>-	ULL(0x510e527fade682d1),</div><div class='del'>-	ULL(0x9b05688c2b3e6c1f),</div><div class='del'>-	ULL(0x1f83d9abfb41bd6b),</div><div class='del'>-	ULL(0x5be0cd19137e2179)</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** SHA-256: *********************************************************/</div><div class='del'>-void SHA256_Init(SHA256_CTX* context) {</div><div class='del'>-	if (context == (SHA256_CTX*)0) {</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	MEMCPY_BCOPY(context-&gt;state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH);</div><div class='del'>-	MEMSET_BZERO(context-&gt;buffer, SHA256_BLOCK_LENGTH);</div><div class='del'>-	context-&gt;bitcount = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef SHA2_UNROLL_TRANSFORM</div><div class='del'>-</div><div class='del'>-/* Unrolled SHA-256 round macros: */</div><div class='del'>-</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-</div><div class='del'>-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h)	\</div><div class='del'>-	REVERSE32(*data++, W256[j]); \</div><div class='del'>-	T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \</div><div class='del'>-             K256[j] + W256[j]; \</div><div class='del'>-	(d) += T1; \</div><div class='del'>-	(h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \</div><div class='del'>-	j++</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#else</div><div class='del'>-</div><div class='del'>-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h)	\</div><div class='del'>-	T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \</div><div class='del'>-	     K256[j] + (W256[j] = *data++); \</div><div class='del'>-	(d) += T1; \</div><div class='del'>-	(h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \</div><div class='del'>-	j++</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define ROUND256(a,b,c,d,e,f,g,h)	\</div><div class='del'>-	s0 = W256[(j+1)&amp;0x0f]; \</div><div class='del'>-	s0 = sigma0_256(s0); \</div><div class='del'>-	s1 = W256[(j+14)&amp;0x0f]; \</div><div class='del'>-	s1 = sigma1_256(s1); \</div><div class='del'>-	T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \</div><div class='del'>-	     (W256[j&amp;0x0f] += s1 + W256[(j+9)&amp;0x0f] + s0); \</div><div class='del'>-	(d) += T1; \</div><div class='del'>-	(h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \</div><div class='del'>-	j++</div><div class='del'>-</div><div class='del'>-void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {</div><div class='del'>-	sha2_word32	a, b, c, d, e, f, g, h, s0, s1;</div><div class='del'>-	sha2_word32	T1, *W256;</div><div class='del'>-	int		j;</div><div class='del'>-</div><div class='del'>-	W256 = (sha2_word32*)context-&gt;buffer;</div><div class='del'>-</div><div class='del'>-	/* Initialize registers with the prev. intermediate value */</div><div class='del'>-	a = context-&gt;state[0];</div><div class='del'>-	b = context-&gt;state[1];</div><div class='del'>-	c = context-&gt;state[2];</div><div class='del'>-	d = context-&gt;state[3];</div><div class='del'>-	e = context-&gt;state[4];</div><div class='del'>-	f = context-&gt;state[5];</div><div class='del'>-	g = context-&gt;state[6];</div><div class='del'>-	h = context-&gt;state[7];</div><div class='del'>-</div><div class='del'>-	j = 0;</div><div class='del'>-	do {</div><div class='del'>-		/* Rounds 0 to 15 (unrolled): */</div><div class='del'>-		ROUND256_0_TO_15(a,b,c,d,e,f,g,h);</div><div class='del'>-		ROUND256_0_TO_15(h,a,b,c,d,e,f,g);</div><div class='del'>-		ROUND256_0_TO_15(g,h,a,b,c,d,e,f);</div><div class='del'>-		ROUND256_0_TO_15(f,g,h,a,b,c,d,e);</div><div class='del'>-		ROUND256_0_TO_15(e,f,g,h,a,b,c,d);</div><div class='del'>-		ROUND256_0_TO_15(d,e,f,g,h,a,b,c);</div><div class='del'>-		ROUND256_0_TO_15(c,d,e,f,g,h,a,b);</div><div class='del'>-		ROUND256_0_TO_15(b,c,d,e,f,g,h,a);</div><div class='del'>-	} while (j &lt; 16);</div><div class='del'>-</div><div class='del'>-	/* Now for the remaining rounds to 64: */</div><div class='del'>-	do {</div><div class='del'>-		ROUND256(a,b,c,d,e,f,g,h);</div><div class='del'>-		ROUND256(h,a,b,c,d,e,f,g);</div><div class='del'>-		ROUND256(g,h,a,b,c,d,e,f);</div><div class='del'>-		ROUND256(f,g,h,a,b,c,d,e);</div><div class='del'>-		ROUND256(e,f,g,h,a,b,c,d);</div><div class='del'>-		ROUND256(d,e,f,g,h,a,b,c);</div><div class='del'>-		ROUND256(c,d,e,f,g,h,a,b);</div><div class='del'>-		ROUND256(b,c,d,e,f,g,h,a);</div><div class='del'>-	} while (j &lt; 64);</div><div class='del'>-</div><div class='del'>-	/* Compute the current intermediate hash value */</div><div class='del'>-	context-&gt;state[0] += a;</div><div class='del'>-	context-&gt;state[1] += b;</div><div class='del'>-	context-&gt;state[2] += c;</div><div class='del'>-	context-&gt;state[3] += d;</div><div class='del'>-	context-&gt;state[4] += e;</div><div class='del'>-	context-&gt;state[5] += f;</div><div class='del'>-	context-&gt;state[6] += g;</div><div class='del'>-	context-&gt;state[7] += h;</div><div class='del'>-</div><div class='del'>-	/* Clean up */</div><div class='del'>-	a = b = c = d = e = f = g = h = T1 = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* SHA2_UNROLL_TRANSFORM */</div><div class='del'>-</div><div class='del'>-void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {</div><div class='del'>-	sha2_word32	a, b, c, d, e, f, g, h, s0, s1;</div><div class='del'>-	sha2_word32	T1, T2, *W256;</div><div class='del'>-	int		j;</div><div class='del'>-</div><div class='del'>-	W256 = (sha2_word32*)context-&gt;buffer;</div><div class='del'>-</div><div class='del'>-	/* Initialize registers with the prev. intermediate value */</div><div class='del'>-	a = context-&gt;state[0];</div><div class='del'>-	b = context-&gt;state[1];</div><div class='del'>-	c = context-&gt;state[2];</div><div class='del'>-	d = context-&gt;state[3];</div><div class='del'>-	e = context-&gt;state[4];</div><div class='del'>-	f = context-&gt;state[5];</div><div class='del'>-	g = context-&gt;state[6];</div><div class='del'>-	h = context-&gt;state[7];</div><div class='del'>-</div><div class='del'>-	j = 0;</div><div class='del'>-	do {</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-		/* Copy data while converting to host byte order */</div><div class='del'>-		REVERSE32(*data++,W256[j]);</div><div class='del'>-		/* Apply the SHA-256 compression function to update a..h */</div><div class='del'>-		T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];</div><div class='del'>-#else</div><div class='del'>-		/* Apply the SHA-256 compression function to update a..h with copy */</div><div class='del'>-		T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++);</div><div class='del'>-#endif</div><div class='del'>-		T2 = Sigma0_256(a) + Maj(a, b, c);</div><div class='del'>-		h = g;</div><div class='del'>-		g = f;</div><div class='del'>-		f = e;</div><div class='del'>-		e = d + T1;</div><div class='del'>-		d = c;</div><div class='del'>-		c = b;</div><div class='del'>-		b = a;</div><div class='del'>-		a = T1 + T2;</div><div class='del'>-</div><div class='del'>-		j++;</div><div class='del'>-	} while (j &lt; 16);</div><div class='del'>-</div><div class='del'>-	do {</div><div class='del'>-		/* Part of the message block expansion: */</div><div class='del'>-		s0 = W256[(j+1)&amp;0x0f];</div><div class='del'>-		s0 = sigma0_256(s0);</div><div class='del'>-		s1 = W256[(j+14)&amp;0x0f];	</div><div class='del'>-		s1 = sigma1_256(s1);</div><div class='del'>-</div><div class='del'>-		/* Apply the SHA-256 compression function to update a..h */</div><div class='del'>-		T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + </div><div class='del'>-		     (W256[j&amp;0x0f] += s1 + W256[(j+9)&amp;0x0f] + s0);</div><div class='del'>-		T2 = Sigma0_256(a) + Maj(a, b, c);</div><div class='del'>-		h = g;</div><div class='del'>-		g = f;</div><div class='del'>-		f = e;</div><div class='del'>-		e = d + T1;</div><div class='del'>-		d = c;</div><div class='del'>-		c = b;</div><div class='del'>-		b = a;</div><div class='del'>-		a = T1 + T2;</div><div class='del'>-</div><div class='del'>-		j++;</div><div class='del'>-	} while (j &lt; 64);</div><div class='del'>-</div><div class='del'>-	/* Compute the current intermediate hash value */</div><div class='del'>-	context-&gt;state[0] += a;</div><div class='del'>-	context-&gt;state[1] += b;</div><div class='del'>-	context-&gt;state[2] += c;</div><div class='del'>-	context-&gt;state[3] += d;</div><div class='del'>-	context-&gt;state[4] += e;</div><div class='del'>-	context-&gt;state[5] += f;</div><div class='del'>-	context-&gt;state[6] += g;</div><div class='del'>-	context-&gt;state[7] += h;</div><div class='del'>-</div><div class='del'>-	/* Clean up */</div><div class='del'>-	a = b = c = d = e = f = g = h = T1 = T2 = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif /* SHA2_UNROLL_TRANSFORM */</div><div class='del'>-</div><div class='del'>-void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) {</div><div class='del'>-	unsigned int	freespace, usedspace;</div><div class='del'>-</div><div class='del'>-	if (len == 0) {</div><div class='del'>-		/* Calling with no data is valid - we do nothing */</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Sanity check: */</div><div class='del'>-	assert(context != NULL &amp;&amp; data != NULL);</div><div class='del'>-</div><div class='del'>-	usedspace = (context-&gt;bitcount &gt;&gt; 3) % SHA256_BLOCK_LENGTH;</div><div class='del'>-	if (usedspace &gt; 0) {</div><div class='del'>-		/* Calculate how much free space is available in the buffer */</div><div class='del'>-		freespace = SHA256_BLOCK_LENGTH - usedspace;</div><div class='del'>-</div><div class='del'>-		if (len &gt;= freespace) {</div><div class='del'>-			/* Fill the buffer completely and process it */</div><div class='del'>-			MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, freespace);</div><div class='del'>-			context-&gt;bitcount += freespace &lt;&lt; 3;</div><div class='del'>-			len -= freespace;</div><div class='del'>-			data += freespace;</div><div class='del'>-			SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</div><div class='del'>-		} else {</div><div class='del'>-			/* The buffer is not yet full */</div><div class='del'>-			MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, len);</div><div class='del'>-			context-&gt;bitcount += len &lt;&lt; 3;</div><div class='del'>-			/* Clean up: */</div><div class='del'>-			usedspace = freespace = 0;</div><div class='del'>-			return;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	while (len &gt;= SHA256_BLOCK_LENGTH) {</div><div class='del'>-		/* Process as many complete blocks as we can */</div><div class='del'>-		SHA256_Transform(context, (const sha2_word32*)data);</div><div class='del'>-		context-&gt;bitcount += SHA256_BLOCK_LENGTH &lt;&lt; 3;</div><div class='del'>-		len -= SHA256_BLOCK_LENGTH;</div><div class='del'>-		data += SHA256_BLOCK_LENGTH;</div><div class='del'>-	}</div><div class='del'>-	if (len &gt; 0) {</div><div class='del'>-		/* There's left-overs, so save 'em */</div><div class='del'>-		MEMCPY_BCOPY(context-&gt;buffer, data, len);</div><div class='del'>-		context-&gt;bitcount += len &lt;&lt; 3;</div><div class='del'>-	}</div><div class='del'>-	/* Clean up: */</div><div class='del'>-	usedspace = freespace = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void SHA256_Finish(SHA256_CTX* context, sha2_byte digest[]) {</div><div class='del'>-	sha2_word32	*d = (sha2_word32*)digest;</div><div class='del'>-	unsigned int	usedspace;</div><div class='del'>-</div><div class='del'>-	/* Sanity check: */</div><div class='del'>-	assert(context != NULL);</div><div class='del'>-</div><div class='del'>-	/* If no digest buffer is passed, we don't bother doing this: */</div><div class='del'>-	if (digest != (sha2_byte*)0) {</div><div class='del'>-		usedspace = (context-&gt;bitcount &gt;&gt; 3) % SHA256_BLOCK_LENGTH;</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-		/* Convert FROM host byte order */</div><div class='del'>-		REVERSE64(context-&gt;bitcount,context-&gt;bitcount);</div><div class='del'>-#endif</div><div class='del'>-		if (usedspace &gt; 0) {</div><div class='del'>-			/* Begin padding with a 1 bit: */</div><div class='del'>-			context-&gt;buffer[usedspace++] = 0x80;</div><div class='del'>-</div><div class='del'>-			if (usedspace &lt;= SHA256_SHORT_BLOCK_LENGTH) {</div><div class='del'>-				/* Set-up for the last transform: */</div><div class='del'>-				MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace);</div><div class='del'>-			} else {</div><div class='del'>-				if (usedspace &lt; SHA256_BLOCK_LENGTH) {</div><div class='del'>-					MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace);</div><div class='del'>-				}</div><div class='del'>-				/* Do second-to-last transform: */</div><div class='del'>-				SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</div><div class='del'>-</div><div class='del'>-				/* And set-up for the last transform: */</div><div class='del'>-				MEMSET_BZERO(context-&gt;buffer, SHA256_SHORT_BLOCK_LENGTH);</div><div class='del'>-			}</div><div class='del'>-		} else {</div><div class='del'>-			/* Set-up for the last transform: */</div><div class='del'>-			MEMSET_BZERO(context-&gt;buffer, SHA256_SHORT_BLOCK_LENGTH);</div><div class='del'>-</div><div class='del'>-			/* Begin padding with a 1 bit: */</div><div class='del'>-			*context-&gt;buffer = 0x80;</div><div class='del'>-		}</div><div class='del'>-		/* Set the bit count: */</div><div class='del'>-		*(sha2_word64*)&amp;context-&gt;buffer[SHA256_SHORT_BLOCK_LENGTH] = context-&gt;bitcount;</div><div class='del'>-</div><div class='del'>-		/* Final transform: */</div><div class='del'>-		SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</div><div class='del'>-</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-		{</div><div class='del'>-			/* Convert TO host byte order */</div><div class='del'>-			int	j;</div><div class='del'>-			for (j = 0; j &lt; 8; j++) {</div><div class='del'>-				REVERSE32(context-&gt;state[j],context-&gt;state[j]);</div><div class='del'>-				*d++ = context-&gt;state[j];</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-#else</div><div class='del'>-		MEMCPY_BCOPY(d, context-&gt;state, SHA256_DIGEST_LENGTH);</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Clean up state data: */</div><div class='del'>-	MEMSET_BZERO(context, sizeof(SHA256_CTX));</div><div class='del'>-	usedspace = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*** SHA-512: *********************************************************/</div><div class='del'>-void SHA512_Init(SHA512_CTX* context) {</div><div class='del'>-	if (context == (SHA512_CTX*)0) {</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	MEMCPY_BCOPY(context-&gt;state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH);</div><div class='del'>-	MEMSET_BZERO(context-&gt;buffer, SHA512_BLOCK_LENGTH);</div><div class='del'>-	context-&gt;bitcount[0] = context-&gt;bitcount[1] =  0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef SHA2_UNROLL_TRANSFORM</div><div class='del'>-</div><div class='del'>-/* Unrolled SHA-512 round macros: */</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-</div><div class='del'>-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h)	\</div><div class='del'>-	REVERSE64(*data++, W512[j]); \</div><div class='del'>-	T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \</div><div class='del'>-             K512[j] + W512[j]; \</div><div class='del'>-	(d) += T1, \</div><div class='del'>-	(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \</div><div class='del'>-	j++</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#else</div><div class='del'>-</div><div class='del'>-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h)	\</div><div class='del'>-	T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \</div><div class='del'>-             K512[j] + (W512[j] = *data++); \</div><div class='del'>-	(d) += T1; \</div><div class='del'>-	(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \</div><div class='del'>-	j++</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define ROUND512(a,b,c,d,e,f,g,h)	\</div><div class='del'>-	s0 = W512[(j+1)&amp;0x0f]; \</div><div class='del'>-	s0 = sigma0_512(s0); \</div><div class='del'>-	s1 = W512[(j+14)&amp;0x0f]; \</div><div class='del'>-	s1 = sigma1_512(s1); \</div><div class='del'>-	T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \</div><div class='del'>-             (W512[j&amp;0x0f] += s1 + W512[(j+9)&amp;0x0f] + s0); \</div><div class='del'>-	(d) += T1; \</div><div class='del'>-	(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \</div><div class='del'>-	j++</div><div class='del'>-</div><div class='del'>-void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {</div><div class='del'>-	sha2_word64	a, b, c, d, e, f, g, h, s0, s1;</div><div class='del'>-	sha2_word64	T1, *W512 = (sha2_word64*)context-&gt;buffer;</div><div class='del'>-	int		j;</div><div class='del'>-</div><div class='del'>-	/* Initialize registers with the prev. intermediate value */</div><div class='del'>-	a = context-&gt;state[0];</div><div class='del'>-	b = context-&gt;state[1];</div><div class='del'>-	c = context-&gt;state[2];</div><div class='del'>-	d = context-&gt;state[3];</div><div class='del'>-	e = context-&gt;state[4];</div><div class='del'>-	f = context-&gt;state[5];</div><div class='del'>-	g = context-&gt;state[6];</div><div class='del'>-	h = context-&gt;state[7];</div><div class='del'>-</div><div class='del'>-	j = 0;</div><div class='del'>-	do {</div><div class='del'>-		ROUND512_0_TO_15(a,b,c,d,e,f,g,h);</div><div class='del'>-		ROUND512_0_TO_15(h,a,b,c,d,e,f,g);</div><div class='del'>-		ROUND512_0_TO_15(g,h,a,b,c,d,e,f);</div><div class='del'>-		ROUND512_0_TO_15(f,g,h,a,b,c,d,e);</div><div class='del'>-		ROUND512_0_TO_15(e,f,g,h,a,b,c,d);</div><div class='del'>-		ROUND512_0_TO_15(d,e,f,g,h,a,b,c);</div><div class='del'>-		ROUND512_0_TO_15(c,d,e,f,g,h,a,b);</div><div class='del'>-		ROUND512_0_TO_15(b,c,d,e,f,g,h,a);</div><div class='del'>-	} while (j &lt; 16);</div><div class='del'>-</div><div class='del'>-	/* Now for the remaining rounds up to 79: */</div><div class='del'>-	do {</div><div class='del'>-		ROUND512(a,b,c,d,e,f,g,h);</div><div class='del'>-		ROUND512(h,a,b,c,d,e,f,g);</div><div class='del'>-		ROUND512(g,h,a,b,c,d,e,f);</div><div class='del'>-		ROUND512(f,g,h,a,b,c,d,e);</div><div class='del'>-		ROUND512(e,f,g,h,a,b,c,d);</div><div class='del'>-		ROUND512(d,e,f,g,h,a,b,c);</div><div class='del'>-		ROUND512(c,d,e,f,g,h,a,b);</div><div class='del'>-		ROUND512(b,c,d,e,f,g,h,a);</div><div class='del'>-	} while (j &lt; 80);</div><div class='del'>-</div><div class='del'>-	/* Compute the current intermediate hash value */</div><div class='del'>-	context-&gt;state[0] += a;</div><div class='del'>-	context-&gt;state[1] += b;</div><div class='del'>-	context-&gt;state[2] += c;</div><div class='del'>-	context-&gt;state[3] += d;</div><div class='del'>-	context-&gt;state[4] += e;</div><div class='del'>-	context-&gt;state[5] += f;</div><div class='del'>-	context-&gt;state[6] += g;</div><div class='del'>-	context-&gt;state[7] += h;</div><div class='del'>-</div><div class='del'>-	/* Clean up */</div><div class='del'>-	a = b = c = d = e = f = g = h = T1 = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* SHA2_UNROLL_TRANSFORM */</div><div class='del'>-</div><div class='del'>-void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {</div><div class='del'>-	sha2_word64	a, b, c, d, e, f, g, h, s0, s1;</div><div class='del'>-	sha2_word64	T1, T2, *W512 = (sha2_word64*)context-&gt;buffer;</div><div class='del'>-	int		j;</div><div class='del'>-</div><div class='del'>-	/* Initialize registers with the prev. intermediate value */</div><div class='del'>-	a = context-&gt;state[0];</div><div class='del'>-	b = context-&gt;state[1];</div><div class='del'>-	c = context-&gt;state[2];</div><div class='del'>-	d = context-&gt;state[3];</div><div class='del'>-	e = context-&gt;state[4];</div><div class='del'>-	f = context-&gt;state[5];</div><div class='del'>-	g = context-&gt;state[6];</div><div class='del'>-	h = context-&gt;state[7];</div><div class='del'>-</div><div class='del'>-	j = 0;</div><div class='del'>-	do {</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-		/* Convert TO host byte order */</div><div class='del'>-		REVERSE64(*data++, W512[j]);</div><div class='del'>-		/* Apply the SHA-512 compression function to update a..h */</div><div class='del'>-		T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];</div><div class='del'>-#else</div><div class='del'>-		/* Apply the SHA-512 compression function to update a..h with copy */</div><div class='del'>-		T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++);</div><div class='del'>-#endif</div><div class='del'>-		T2 = Sigma0_512(a) + Maj(a, b, c);</div><div class='del'>-		h = g;</div><div class='del'>-		g = f;</div><div class='del'>-		f = e;</div><div class='del'>-		e = d + T1;</div><div class='del'>-		d = c;</div><div class='del'>-		c = b;</div><div class='del'>-		b = a;</div><div class='del'>-		a = T1 + T2;</div><div class='del'>-</div><div class='del'>-		j++;</div><div class='del'>-	} while (j &lt; 16);</div><div class='del'>-</div><div class='del'>-	do {</div><div class='del'>-		/* Part of the message block expansion: */</div><div class='del'>-		s0 = W512[(j+1)&amp;0x0f];</div><div class='del'>-		s0 = sigma0_512(s0);</div><div class='del'>-		s1 = W512[(j+14)&amp;0x0f];</div><div class='del'>-		s1 =  sigma1_512(s1);</div><div class='del'>-</div><div class='del'>-		/* Apply the SHA-512 compression function to update a..h */</div><div class='del'>-		T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +</div><div class='del'>-		     (W512[j&amp;0x0f] += s1 + W512[(j+9)&amp;0x0f] + s0);</div><div class='del'>-		T2 = Sigma0_512(a) + Maj(a, b, c);</div><div class='del'>-		h = g;</div><div class='del'>-		g = f;</div><div class='del'>-		f = e;</div><div class='del'>-		e = d + T1;</div><div class='del'>-		d = c;</div><div class='del'>-		c = b;</div><div class='del'>-		b = a;</div><div class='del'>-		a = T1 + T2;</div><div class='del'>-</div><div class='del'>-		j++;</div><div class='del'>-	} while (j &lt; 80);</div><div class='del'>-</div><div class='del'>-	/* Compute the current intermediate hash value */</div><div class='del'>-	context-&gt;state[0] += a;</div><div class='del'>-	context-&gt;state[1] += b;</div><div class='del'>-	context-&gt;state[2] += c;</div><div class='del'>-	context-&gt;state[3] += d;</div><div class='del'>-	context-&gt;state[4] += e;</div><div class='del'>-	context-&gt;state[5] += f;</div><div class='del'>-	context-&gt;state[6] += g;</div><div class='del'>-	context-&gt;state[7] += h;</div><div class='del'>-</div><div class='del'>-	/* Clean up */</div><div class='del'>-	a = b = c = d = e = f = g = h = T1 = T2 = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif /* SHA2_UNROLL_TRANSFORM */</div><div class='del'>-</div><div class='del'>-void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) {</div><div class='del'>-	unsigned int	freespace, usedspace;</div><div class='del'>-</div><div class='del'>-	if (len == 0) {</div><div class='del'>-		/* Calling with no data is valid - we do nothing */</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Sanity check: */</div><div class='del'>-	assert(context != NULL &amp;&amp; data != NULL);</div><div class='del'>-</div><div class='del'>-	usedspace = (context-&gt;bitcount[0] &gt;&gt; 3) % SHA512_BLOCK_LENGTH;</div><div class='del'>-	if (usedspace &gt; 0) {</div><div class='del'>-		/* Calculate how much free space is available in the buffer */</div><div class='del'>-		freespace = SHA512_BLOCK_LENGTH - usedspace;</div><div class='del'>-</div><div class='del'>-		if (len &gt;= freespace) {</div><div class='del'>-			/* Fill the buffer completely and process it */</div><div class='del'>-			MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, freespace);</div><div class='del'>-			ADDINC128(context-&gt;bitcount, freespace &lt;&lt; 3);</div><div class='del'>-			len -= freespace;</div><div class='del'>-			data += freespace;</div><div class='del'>-			SHA512_Transform(context, (const sha2_word64*)context-&gt;buffer);</div><div class='del'>-		} else {</div><div class='del'>-			/* The buffer is not yet full */</div><div class='del'>-			MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, len);</div><div class='del'>-			ADDINC128(context-&gt;bitcount, len &lt;&lt; 3);</div><div class='del'>-			/* Clean up: */</div><div class='del'>-			usedspace = freespace = 0;</div><div class='del'>-			return;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	while (len &gt;= SHA512_BLOCK_LENGTH) {</div><div class='del'>-		/* Process as many complete blocks as we can */</div><div class='del'>-		SHA512_Transform(context, (const sha2_word64*)data);</div><div class='del'>-		ADDINC128(context-&gt;bitcount, SHA512_BLOCK_LENGTH &lt;&lt; 3);</div><div class='del'>-		len -= SHA512_BLOCK_LENGTH;</div><div class='del'>-		data += SHA512_BLOCK_LENGTH;</div><div class='del'>-	}</div><div class='del'>-	if (len &gt; 0) {</div><div class='del'>-		/* There's left-overs, so save 'em */</div><div class='del'>-		MEMCPY_BCOPY(context-&gt;buffer, data, len);</div><div class='del'>-		ADDINC128(context-&gt;bitcount, len &lt;&lt; 3);</div><div class='del'>-	}</div><div class='del'>-	/* Clean up: */</div><div class='del'>-	usedspace = freespace = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void SHA512_Last(SHA512_CTX* context) {</div><div class='del'>-	unsigned int	usedspace;</div><div class='del'>-</div><div class='del'>-	usedspace = (context-&gt;bitcount[0] &gt;&gt; 3) % SHA512_BLOCK_LENGTH;</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-	/* Convert FROM host byte order */</div><div class='del'>-	REVERSE64(context-&gt;bitcount[0],context-&gt;bitcount[0]);</div><div class='del'>-	REVERSE64(context-&gt;bitcount[1],context-&gt;bitcount[1]);</div><div class='del'>-#endif</div><div class='del'>-	if (usedspace &gt; 0) {</div><div class='del'>-		/* Begin padding with a 1 bit: */</div><div class='del'>-		context-&gt;buffer[usedspace++] = 0x80;</div><div class='del'>-</div><div class='del'>-		if (usedspace &lt;= SHA512_SHORT_BLOCK_LENGTH) {</div><div class='del'>-			/* Set-up for the last transform: */</div><div class='del'>-			MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace);</div><div class='del'>-		} else {</div><div class='del'>-			if (usedspace &lt; SHA512_BLOCK_LENGTH) {</div><div class='del'>-				MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace);</div><div class='del'>-			}</div><div class='del'>-			/* Do second-to-last transform: */</div><div class='del'>-			SHA512_Transform(context, (const sha2_word64*)context-&gt;buffer);</div><div class='del'>-</div><div class='del'>-			/* And set-up for the last transform: */</div><div class='del'>-			MEMSET_BZERO(context-&gt;buffer, SHA512_BLOCK_LENGTH - 2);</div><div class='del'>-		}</div><div class='del'>-	} else {</div><div class='del'>-		/* Prepare for final transform: */</div><div class='del'>-		MEMSET_BZERO(context-&gt;buffer, SHA512_SHORT_BLOCK_LENGTH);</div><div class='del'>-</div><div class='del'>-		/* Begin padding with a 1 bit: */</div><div class='del'>-		*context-&gt;buffer = 0x80;</div><div class='del'>-	}</div><div class='del'>-	/* Store the length of input data (in bits): */</div><div class='del'>-	*(sha2_word64*)&amp;context-&gt;buffer[SHA512_SHORT_BLOCK_LENGTH] = context-&gt;bitcount[1];</div><div class='del'>-	*(sha2_word64*)&amp;context-&gt;buffer[SHA512_SHORT_BLOCK_LENGTH+8] = context-&gt;bitcount[0];</div><div class='del'>-</div><div class='del'>-	/* Final transform: */</div><div class='del'>-	SHA512_Transform(context, (const sha2_word64*)context-&gt;buffer);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void SHA512_Finish(SHA512_CTX* context, sha2_byte digest[]) {</div><div class='del'>-	sha2_word64	*d = (sha2_word64*)digest;</div><div class='del'>-</div><div class='del'>-	/* Sanity check: */</div><div class='del'>-	assert(context != NULL);</div><div class='del'>-</div><div class='del'>-	/* If no digest buffer is passed, we don't bother doing this: */</div><div class='del'>-	if (digest != (sha2_byte*)0) {</div><div class='del'>-		SHA512_Last(context);</div><div class='del'>-</div><div class='del'>-		/* Save the hash data for output: */</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-		{</div><div class='del'>-			/* Convert TO host byte order */</div><div class='del'>-			int	j;</div><div class='del'>-			for (j = 0; j &lt; 8; j++) {</div><div class='del'>-				REVERSE64(context-&gt;state[j],context-&gt;state[j]);</div><div class='del'>-				*d++ = context-&gt;state[j];</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-#else</div><div class='del'>-		MEMCPY_BCOPY(d, context-&gt;state, SHA512_DIGEST_LENGTH);</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Zero out state data */</div><div class='del'>-	MEMSET_BZERO(context, sizeof(SHA512_CTX));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*** SHA-384: *********************************************************/</div><div class='del'>-void SHA384_Init(SHA384_CTX* context) {</div><div class='del'>-	if (context == (SHA384_CTX*)0) {</div><div class='del'>-		return;</div><div class='del'>-	}</div><div class='del'>-	MEMCPY_BCOPY(context-&gt;state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH);</div><div class='del'>-	MEMSET_BZERO(context-&gt;buffer, SHA384_BLOCK_LENGTH);</div><div class='del'>-	context-&gt;bitcount[0] = context-&gt;bitcount[1] = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) {</div><div class='del'>-	SHA512_Update((SHA512_CTX*)context, data, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void SHA384_Finish(SHA384_CTX* context, sha2_byte digest[]) {</div><div class='del'>-	sha2_word64	*d = (sha2_word64*)digest;</div><div class='del'>-</div><div class='del'>-	/* Sanity check: */</div><div class='del'>-	assert(context != NULL);</div><div class='del'>-</div><div class='del'>-	/* If no digest buffer is passed, we don't bother doing this: */</div><div class='del'>-	if (digest != (sha2_byte*)0) {</div><div class='del'>-		SHA512_Last((SHA512_CTX*)context);</div><div class='del'>-</div><div class='del'>-		/* Save the hash data for output: */</div><div class='del'>-#ifndef WORDS_BIGENDIAN</div><div class='del'>-		{</div><div class='del'>-			/* Convert TO host byte order */</div><div class='del'>-			int	j;</div><div class='del'>-			for (j = 0; j &lt; 6; j++) {</div><div class='del'>-				REVERSE64(context-&gt;state[j],context-&gt;state[j]);</div><div class='del'>-				*d++ = context-&gt;state[j];</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-#else</div><div class='del'>-		MEMCPY_BCOPY(d, context-&gt;state, SHA384_DIGEST_LENGTH);</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* Zero out state data */</div><div class='del'>-	MEMSET_BZERO(context, sizeof(SHA384_CTX));</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/sha2/sha2.h b/ext/digest/sha2/sha2.h<br/>deleted file mode 100644<br/>index 917d415b73..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/sha2.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/sha2.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,109 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * sha2.h</div><div class='del'>- *</div><div class='del'>- * Version 1.0.0beta1</div><div class='del'>- *</div><div class='del'>- * Written by Aaron D. Gifford &lt;me@aarongifford.com&gt;</div><div class='del'>- *</div><div class='del'>- * Copyright 2000 Aaron D. Gifford.  All rights reserved.</div><div class='del'>- *</div><div class='del'>- * Redistribution and use in source and binary forms, with or without</div><div class='del'>- * modification, are permitted provided that the following conditions</div><div class='del'>- * are met:</div><div class='del'>- * 1. Redistributions of source code must retain the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer.</div><div class='del'>- * 2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer in the</div><div class='del'>- *    documentation and/or other materials provided with the distribution.</div><div class='del'>- * 3. Neither the name of the copyright holder nor the names of contributors</div><div class='del'>- *    may be used to endorse or promote products derived from this software</div><div class='del'>- *    without specific prior written permission.</div><div class='del'>- * </div><div class='del'>- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND</div><div class='del'>- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</div><div class='del'>- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE</div><div class='del'>- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</div><div class='del'>- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</div><div class='del'>- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</div><div class='del'>- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</div><div class='del'>- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</div><div class='del'>- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='del'>- * SUCH DAMAGE.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/* $RoughId: sha2.h,v 1.3 2002/02/24 08:14:32 knu Exp $ */</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#ifndef __SHA2_H__</div><div class='del'>-#define __SHA2_H__</div><div class='del'>-</div><div class='del'>-#ifdef __cplusplus</div><div class='del'>-extern "C" {</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include "defs.h"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** SHA-256/384/512 Various Length Definitions ***********************/</div><div class='del'>-#define SHA256_BLOCK_LENGTH		64</div><div class='del'>-#define SHA256_DIGEST_LENGTH		32</div><div class='del'>-#define SHA256_DIGEST_STRING_LENGTH	(SHA256_DIGEST_LENGTH * 2 + 1)</div><div class='del'>-#define SHA384_BLOCK_LENGTH		128</div><div class='del'>-#define SHA384_DIGEST_LENGTH		48</div><div class='del'>-#define SHA384_DIGEST_STRING_LENGTH	(SHA384_DIGEST_LENGTH * 2 + 1)</div><div class='del'>-#define SHA512_BLOCK_LENGTH		128</div><div class='del'>-#define SHA512_DIGEST_LENGTH		64</div><div class='del'>-#define SHA512_DIGEST_STRING_LENGTH	(SHA512_DIGEST_LENGTH * 2 + 1)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** SHA-256/384/512 Context Structures *******************************/</div><div class='del'>-</div><div class='del'>-typedef struct _SHA256_CTX {</div><div class='del'>-	uint32_t	state[8];</div><div class='del'>-	uint64_t	bitcount;</div><div class='del'>-	uint8_t	buffer[SHA256_BLOCK_LENGTH];</div><div class='del'>-} SHA256_CTX;</div><div class='del'>-typedef struct _SHA512_CTX {</div><div class='del'>-	uint64_t	state[8];</div><div class='del'>-	uint64_t	bitcount[2];</div><div class='del'>-	uint8_t	buffer[SHA512_BLOCK_LENGTH];</div><div class='del'>-} SHA512_CTX;</div><div class='del'>-</div><div class='del'>-typedef SHA512_CTX SHA384_CTX;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#ifdef RUBY</div><div class='del'>-#define SHA256_Init		rb_Digest_SHA256_Init</div><div class='del'>-#define SHA256_Update		rb_Digest_SHA256_Update</div><div class='del'>-#define SHA256_Finish		rb_Digest_SHA256_Finish</div><div class='del'>-</div><div class='del'>-#define SHA384_Init		rb_Digest_SHA384_Init</div><div class='del'>-#define SHA384_Update		rb_Digest_SHA384_Update</div><div class='del'>-#define SHA384_Finish		rb_Digest_SHA384_Finish</div><div class='del'>-</div><div class='del'>-#define SHA512_Init		rb_Digest_SHA512_Init</div><div class='del'>-#define SHA512_Update		rb_Digest_SHA512_Update</div><div class='del'>-#define SHA512_Finish		rb_Digest_SHA512_Finish</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*** SHA-256/384/512 Function Prototypes ******************************/</div><div class='del'>-void SHA256_Init _((SHA256_CTX *));</div><div class='del'>-void SHA256_Update _((SHA256_CTX*, const uint8_t*, size_t));</div><div class='del'>-void SHA256_Finish _((SHA256_CTX*, uint8_t[SHA256_DIGEST_LENGTH]));</div><div class='del'>-</div><div class='del'>-void SHA384_Init _((SHA384_CTX*));</div><div class='del'>-void SHA384_Update _((SHA384_CTX*, const uint8_t*, size_t));</div><div class='del'>-void SHA384_Finish _((SHA384_CTX*, uint8_t[SHA384_DIGEST_LENGTH]));</div><div class='del'>-</div><div class='del'>-void SHA512_Init _((SHA512_CTX*));</div><div class='del'>-void SHA512_Update _((SHA512_CTX*, const uint8_t*, size_t));</div><div class='del'>-void SHA512_Finish _((SHA512_CTX*, uint8_t[SHA512_DIGEST_LENGTH]));</div><div class='del'>-</div><div class='del'>-#ifdef	__cplusplus</div><div class='del'>-}</div><div class='del'>-#endif /* __cplusplus */</div><div class='del'>-</div><div class='del'>-#endif /* __SHA2_H__ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/digest/sha2/sha2init.c b/ext/digest/sha2/sha2init.c<br/>deleted file mode 100644<br/>index c83a29316a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/sha2/sha2init.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/sha2/sha2init.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,52 +0,0 @@</div><div class='del'>-/* $RoughId: sha2init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */</div><div class='del'>-/* $Id$ */</div><div class='del'>-</div><div class='del'>-#include "digest.h"</div><div class='del'>-#include "sha2.h"</div><div class='del'>-</div><div class='del'>-#define FOREACH_BITLEN(func)	func(256) func(384) func(512)</div><div class='del'>-</div><div class='del'>-#define DEFINE_ALGO_METADATA(bitlen) \</div><div class='del'>-static rb_digest_metadata_t sha##bitlen = { \</div><div class='del'>-    RUBY_DIGEST_API_VERSION, \</div><div class='del'>-    SHA##bitlen##_DIGEST_LENGTH, \</div><div class='del'>-    SHA##bitlen##_BLOCK_LENGTH, \</div><div class='del'>-    sizeof(SHA##bitlen##_CTX), \</div><div class='del'>-    (rb_digest_hash_init_func_t)SHA##bitlen##_Init, \</div><div class='del'>-    (rb_digest_hash_update_func_t)SHA##bitlen##_Update, \</div><div class='del'>-    (rb_digest_hash_finish_func_t)SHA##bitlen##_Finish, \</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-FOREACH_BITLEN(DEFINE_ALGO_METADATA)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Classes for calculating message digests using the SHA-256/384/512</div><div class='del'>- * Secure Hash Algorithm(s) by NIST (the US' National Institute of</div><div class='del'>- * Standards and Technology), described in FIPS PUB 180-2.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_sha2()</div><div class='del'>-{</div><div class='del'>-    VALUE mDigest, cDigest_Base;</div><div class='del'>-    ID id_metadata;</div><div class='del'>-</div><div class='del'>-#define DECLARE_ALGO_CLASS(bitlen) \</div><div class='del'>-    VALUE cDigest_SHA##bitlen;</div><div class='del'>-</div><div class='del'>-    FOREACH_BITLEN(DECLARE_ALGO_CLASS)</div><div class='del'>-</div><div class='del'>-    rb_require("digest");</div><div class='del'>-</div><div class='del'>-    id_metadata = rb_intern("metadata");</div><div class='del'>-</div><div class='del'>-    mDigest = rb_path2class("Digest");</div><div class='del'>-    cDigest_Base = rb_path2class("Digest::Base");</div><div class='del'>-</div><div class='del'>-#define DEFINE_ALGO_CLASS(bitlen) \</div><div class='del'>-    cDigest_SHA##bitlen = rb_define_class_under(mDigest, "SHA" #bitlen, cDigest_Base); \</div><div class='del'>-\</div><div class='del'>-    rb_ivar_set(cDigest_SHA##bitlen, id_metadata, \</div><div class='del'>-      Data_Wrap_Struct(rb_cObject, 0, 0, &amp;sha##bitlen));</div><div class='del'>-</div><div class='del'>-    FOREACH_BITLEN(DEFINE_ALGO_CLASS)</div><div class='del'>-}</div><div class='head'>diff --git a/ext/digest/test.sh b/ext/digest/test.sh<br/>deleted file mode 100644<br/>index 328c7575e6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/digest/test.sh?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/digest/test.sh</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#!/bin/sh</div><div class='del'>-#</div><div class='del'>-# $RoughId: test.sh,v 1.5 2001/07/13 15:38:27 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-RUBY=${RUBY:=ruby}</div><div class='del'>-MAKE=${MAKE:=make}</div><div class='del'>-CFLAGS=${CFLAGS:=-Wall}</div><div class='del'>-</div><div class='del'>-${RUBY} extconf.rb --with-cflags="${CFLAGS}"</div><div class='del'>-${MAKE} clean</div><div class='del'>-${MAKE}</div><div class='del'>-</div><div class='del'>-for algo in md5 rmd160 sha1 sha2; do</div><div class='del'>-    args=--with-cflags="${CFLAGS}"</div><div class='del'>-</div><div class='del'>-    if [ $WITH_BUNDLED_ENGINES ]; then</div><div class='del'>-	args="$args --with-bundled-$algo"</div><div class='del'>-    fi</div><div class='del'>-</div><div class='del'>-    (cd $algo &amp;&amp;</div><div class='del'>-	${RUBY} extconf.rb $args;</div><div class='del'>-	${MAKE} clean;</div><div class='del'>-	${MAKE})</div><div class='del'>-    ln -sf ../../$algo/$algo.so lib/digest/</div><div class='del'>-done</div><div class='del'>-</div><div class='del'>-${RUBY} -I. -I./lib ../../test/digest/test_digest.rb</div><div class='del'>-</div><div class='del'>-rm lib/digest/*.so</div><div class='head'>diff --git a/ext/dl/.cvsignore b/ext/dl/.cvsignore<br/>deleted file mode 100644<br/>index 6d884b6cec..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-mkmf.log</div><div class='del'>-dlconfig.h</div><div class='del'>-dlconfig.rb</div><div class='del'>-*.func</div><div class='del'>-*.o</div><div class='del'>-*~</div><div class='del'>-*.def</div><div class='head'>diff --git a/ext/dl/depend b/ext/dl/depend<br/>deleted file mode 100644<br/>index fba3df7a3d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-LDSHARED_TEST = $(LDSHARED) $(LDFLAGS) test/test.o -o test/libtest.so $(LOCAL_LIBS)</div><div class='del'>-</div><div class='del'>-libtest.so: test/libtest.so</div><div class='del'>-</div><div class='del'>-test/libtest.so: test/test.o $(srcdir)/test/libtest.def</div><div class='del'>-	$(RUBY) -rftools -e 'ARGV.each do|d|File.mkpath(File.dirname(d))end' $@</div><div class='del'>-	$(LDSHARED_TEST:dl.def=test/libtest.def)</div><div class='del'>-</div><div class='del'>-test/test.o: $(srcdir)/test/test.c</div><div class='del'>-	@$(RUBY) -rftools -e 'File.mkpath(*ARGV)' test</div><div class='del'>-	$(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/test/test.c -o $@</div><div class='del'>-</div><div class='del'>-test:: dl.so libtest.so force</div><div class='del'>-	$(RUBY) -I. -I$(srcdir)/lib $(srcdir)/test/test.rb</div><div class='del'>-</div><div class='del'>-force:</div><div class='del'>-</div><div class='del'>-.PHONY: force test</div><div class='del'>-</div><div class='del'>-allclean: distclean</div><div class='del'>-	@rm -f $(CLEANFILES) $(DISTCLEANFILES)</div><div class='del'>-</div><div class='del'>-$(OBJS): ./dlconfig.h</div><div class='del'>-</div><div class='del'>-sym.o: dl.h call.func</div><div class='del'>-</div><div class='del'>-dl.o: dl.h callback.func cbtable.func</div><div class='del'>-</div><div class='del'>-ptr.o: dl.h</div><div class='del'>-</div><div class='del'>-handle.o: dl.h</div><div class='del'>-</div><div class='del'>-call.func: $(srcdir)/mkcall.rb ./dlconfig.rb</div><div class='del'>-	@echo "Generating call.func"</div><div class='del'>-	@$(RUBY) $(srcdir)/mkcall.rb &gt; $@</div><div class='del'>-</div><div class='del'>-callback.func: $(srcdir)/mkcallback.rb ./dlconfig.rb</div><div class='del'>-	@echo "Generating callback.func"</div><div class='del'>-	@$(RUBY) $(srcdir)/mkcallback.rb &gt; $@</div><div class='del'>-</div><div class='del'>-cbtable.func: $(srcdir)/mkcbtable.rb ./dlconfig.rb</div><div class='del'>-	@echo "Generating cbtable.func"</div><div class='del'>-	@$(RUBY) $(srcdir)/mkcbtable.rb &gt; $@</div><div class='del'>-</div><div class='del'>-debug:</div><div class='del'>-	$(MAKE) CPPFLAGS="$(CPPFLAGS) -DDEBUG"</div><div class='head'>diff --git a/ext/dl/dl.c b/ext/dl/dl.c<br/>deleted file mode 100644<br/>index e92db298f6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/dl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/dl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,728 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include &lt;ruby.h&gt;</div><div class='del'>-#include &lt;rubyio.h&gt;</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-#include "dl.h"</div><div class='del'>-</div><div class='del'>-VALUE rb_mDL;</div><div class='del'>-VALUE rb_eDLError;</div><div class='del'>-VALUE rb_eDLTypeError;</div><div class='del'>-</div><div class='del'>-static VALUE DLFuncTable;</div><div class='del'>-static void *rb_dl_callback_table[CALLBACK_TYPES][MAX_CALLBACK];</div><div class='del'>-static ID id_call;</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_dl_scan_callback_args(long stack[], const char *proto,</div><div class='del'>-			 int *argc, VALUE argv[])</div><div class='del'>-{</div><div class='del'>-  int i;</div><div class='del'>-  long *sp;</div><div class='del'>-  VALUE val;</div><div class='del'>-</div><div class='del'>-  sp = stack;</div><div class='del'>-  for (i=1; proto[i]; i++) {</div><div class='del'>-    switch (proto[i]) {</div><div class='del'>-    case 'C':</div><div class='del'>-      {</div><div class='del'>-	char v;</div><div class='del'>-	v = (char)(*sp);</div><div class='del'>-	sp++;</div><div class='del'>-	val = INT2NUM(v);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 'H':</div><div class='del'>-      {</div><div class='del'>-	short v;</div><div class='del'>-	v = (short)(*sp);</div><div class='del'>-	sp++;</div><div class='del'>-	val = INT2NUM(v);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 'I':</div><div class='del'>-      {</div><div class='del'>-	int v;</div><div class='del'>-	v = (int)(*sp);</div><div class='del'>-	sp++;</div><div class='del'>-	val = INT2NUM(v);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 'L':</div><div class='del'>-      {</div><div class='del'>-	long v;</div><div class='del'>-	v = (long)(*sp);</div><div class='del'>-	sp++;</div><div class='del'>-	val = INT2NUM(v);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      {</div><div class='del'>-	float v;</div><div class='del'>-	memcpy(&amp;v, sp, sizeof(float));</div><div class='del'>-	sp += sizeof(float)/sizeof(long);</div><div class='del'>-	val = rb_float_new(v);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      {</div><div class='del'>-	double v;</div><div class='del'>-	memcpy(&amp;v, sp, sizeof(double));</div><div class='del'>-	sp += sizeof(double)/sizeof(long);</div><div class='del'>-	val = rb_float_new(v);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 'P':</div><div class='del'>-      {</div><div class='del'>-	void *v;</div><div class='del'>-	memcpy(&amp;v, sp, sizeof(void*));</div><div class='del'>-	sp++;</div><div class='del'>-	val = rb_dlptr_new(v, 0, 0);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 'S':</div><div class='del'>-      {</div><div class='del'>-	char *v;</div><div class='del'>-	memcpy(&amp;v, sp, sizeof(void*));</div><div class='del'>-	sp++;</div><div class='del'>-	val = rb_tainted_str_new2(v);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unsupported type `%c'", proto[i]);</div><div class='del'>-      break;</div><div class='del'>-    }</div><div class='del'>-    argv[i-1] = val;</div><div class='del'>-  }</div><div class='del'>-  *argc = (i - 1);</div><div class='del'>-</div><div class='del'>-  return (*argc);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#include "callback.func"</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-init_dl_func_table(){</div><div class='del'>-#include "cbtable.func"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void *</div><div class='del'>-dlmalloc(size_t size)</div><div class='del'>-{</div><div class='del'>-  DEBUG_CODE2({</div><div class='del'>-    void *ptr;</div><div class='del'>-</div><div class='del'>-    printf("dlmalloc(%d)",size);</div><div class='del'>-    ptr = xmalloc(size);</div><div class='del'>-    printf(":0x%x\n",ptr);</div><div class='del'>-    return ptr;</div><div class='del'>-  },</div><div class='del'>-  {</div><div class='del'>-    return xmalloc(size);</div><div class='del'>-  });</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void *</div><div class='del'>-dlrealloc(void *ptr, size_t size)</div><div class='del'>-{</div><div class='del'>-  DEBUG_CODE({</div><div class='del'>-    printf("dlrealloc(0x%x,%d)\n",ptr,size);</div><div class='del'>-  });</div><div class='del'>-  return xrealloc(ptr, size);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-dlfree(void *ptr)</div><div class='del'>-{</div><div class='del'>-  DEBUG_CODE({</div><div class='del'>-    printf("dlfree(0x%x)\n",ptr);</div><div class='del'>-  });</div><div class='del'>-  xfree(ptr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-char*</div><div class='del'>-dlstrdup(const char *str)</div><div class='del'>-{</div><div class='del'>-  char *newstr;</div><div class='del'>-</div><div class='del'>-  newstr = (char*)dlmalloc(strlen(str)+1);</div><div class='del'>-  strcpy(newstr,str);</div><div class='del'>-</div><div class='del'>-  return newstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-size_t</div><div class='del'>-dlsizeof(const char *cstr)</div><div class='del'>-{</div><div class='del'>-  size_t size;</div><div class='del'>-  int i, len, n, dlen;</div><div class='del'>-  char *d;</div><div class='del'>-</div><div class='del'>-  len  = strlen(cstr);</div><div class='del'>-  size = 0;</div><div class='del'>-  for (i=0; i&lt;len; i++) {</div><div class='del'>-    n = 1;</div><div class='del'>-    if (isdigit(cstr[i+1])) {</div><div class='del'>-      dlen = 1;</div><div class='del'>-      while (isdigit(cstr[i+dlen])) { dlen ++; };</div><div class='del'>-      dlen --;</div><div class='del'>-      d = ALLOCA_N(char, dlen + 1);</div><div class='del'>-      strncpy(d, cstr + i + 1, dlen);</div><div class='del'>-      d[dlen] = '\0';</div><div class='del'>-      n = atoi(d);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      dlen = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch (cstr[i]) {</div><div class='del'>-    case 'I':</div><div class='del'>-      DLALIGN(0,size,INT_ALIGN);</div><div class='del'>-    case 'i':</div><div class='del'>-      size += sizeof(int) * n;</div><div class='del'>-      break;</div><div class='del'>-    case 'L':</div><div class='del'>-      DLALIGN(0,size,LONG_ALIGN);</div><div class='del'>-    case 'l':</div><div class='del'>-      size += sizeof(long) * n;</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      DLALIGN(0,size,FLOAT_ALIGN);</div><div class='del'>-    case 'f':</div><div class='del'>-      size += sizeof(float) * n;</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      DLALIGN(0,size,DOUBLE_ALIGN);</div><div class='del'>-    case 'd':</div><div class='del'>-      size += sizeof(double) * n;</div><div class='del'>-      break;</div><div class='del'>-    case 'C':</div><div class='del'>-    case 'c':</div><div class='del'>-      size += sizeof(char) * n;</div><div class='del'>-      break;</div><div class='del'>-    case 'H':</div><div class='del'>-      DLALIGN(0,size,SHORT_ALIGN);</div><div class='del'>-    case 'h':</div><div class='del'>-      size += sizeof(short) * n;</div><div class='del'>-      break;</div><div class='del'>-    case 'P':</div><div class='del'>-    case 'S':</div><div class='del'>-      DLALIGN(0,size,VOIDP_ALIGN);</div><div class='del'>-    case 'p':</div><div class='del'>-    case 's':</div><div class='del'>-      size += sizeof(void*) * n;</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unexpected type '%c'", cstr[i]);</div><div class='del'>-      break;</div><div class='del'>-    }</div><div class='del'>-    i += dlen;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return size;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static float *</div><div class='del'>-c_farray(VALUE v, long *size)</div><div class='del'>-{</div><div class='del'>-  int i, len;</div><div class='del'>-  float *ary;</div><div class='del'>-  VALUE e;</div><div class='del'>-</div><div class='del'>-  len = RARRAY(v)-&gt;len;</div><div class='del'>-  *size = sizeof(float) * len;</div><div class='del'>-  ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='del'>-    case T_FLOAT:</div><div class='del'>-      ary[i] = (float)(RFLOAT(e)-&gt;value);</div><div class='del'>-      break;</div><div class='del'>-    case T_NIL:</div><div class='del'>-      ary[i] = 0.0;</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='del'>-      break;</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 double *</div><div class='del'>-c_darray(VALUE v, long *size)</div><div class='del'>-{</div><div class='del'>-  int i, len;</div><div class='del'>-  double *ary;</div><div class='del'>-  VALUE e;</div><div class='del'>-</div><div class='del'>-  len = RARRAY(v)-&gt;len;</div><div class='del'>-  *size = sizeof(double) * len;</div><div class='del'>-  ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='del'>-    case T_FLOAT:</div><div class='del'>-      ary[i] = (double)(RFLOAT(e)-&gt;value);</div><div class='del'>-      break;</div><div class='del'>-    case T_NIL:</div><div class='del'>-      ary[i] = 0.0;</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='del'>-      break;</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 long *</div><div class='del'>-c_larray(VALUE v, long *size)</div><div class='del'>-{</div><div class='del'>-  int i, len;</div><div class='del'>-  long *ary;</div><div class='del'>-  VALUE e;</div><div class='del'>-</div><div class='del'>-  len = RARRAY(v)-&gt;len;</div><div class='del'>-  *size = sizeof(long) * len;</div><div class='del'>-  ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-      ary[i] = (long)(NUM2INT(e));</div><div class='del'>-      break;</div><div class='del'>-    case T_NIL:</div><div class='del'>-      ary[i] = 0;</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='del'>-      break;</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 int *</div><div class='del'>-c_iarray(VALUE v, long *size)</div><div class='del'>-{</div><div class='del'>-  int i, len;</div><div class='del'>-  int *ary;</div><div class='del'>-  VALUE e;</div><div class='del'>-</div><div class='del'>-  len = RARRAY(v)-&gt;len;</div><div class='del'>-  *size = sizeof(int) * len;</div><div class='del'>-  ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-      ary[i] = (int)(NUM2INT(e));</div><div class='del'>-      break;</div><div class='del'>-    case T_NIL:</div><div class='del'>-      ary[i] = 0;</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='del'>-      break;</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 short *</div><div class='del'>-c_harray(VALUE v, long *size)</div><div class='del'>-{</div><div class='del'>-  int i, len;</div><div class='del'>-  short *ary;</div><div class='del'>-  VALUE e;</div><div class='del'>-</div><div class='del'>-  len = RARRAY(v)-&gt;len;</div><div class='del'>-  *size = sizeof(short) * len;</div><div class='del'>-  ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-      ary[i] = (short)(NUM2INT(e));</div><div class='del'>-      break;</div><div class='del'>-    case T_NIL:</div><div class='del'>-      ary[i] = 0;</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='del'>-      break;</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 char *</div><div class='del'>-c_carray(VALUE v, long *size)</div><div class='del'>-{</div><div class='del'>-  int i, len;</div><div class='del'>-  char *ary;</div><div class='del'>-  VALUE e;</div><div class='del'>-</div><div class='del'>-  len = RARRAY(v)-&gt;len;</div><div class='del'>-  *size = sizeof(char) * len;</div><div class='del'>-  ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    e = rb_ary_entry(v, i);</div><div class='del'>-    switch (TYPE(e)) {</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-      ary[i] = (char)(NUM2INT(e));</div><div class='del'>-      break;</div><div class='del'>-    case T_NIL:</div><div class='del'>-      ary[i] = 0;</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unexpected type of the element #%d", i);</div><div class='del'>-      break;</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 void *</div><div class='del'>-c_parray(VALUE v, long *size)</div><div class='del'>-{</div><div class='del'>-  int i, len;</div><div class='del'>-  void **ary;</div><div class='del'>-  VALUE e, tmp;</div><div class='del'>-</div><div class='del'>-  len = RARRAY(v)-&gt;len;</div><div class='del'>-  *size = sizeof(void*) * len;</div><div class='del'>-  ary = dlmalloc(*size);</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    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='del'>-    case T_STRING:</div><div class='del'>-      rb_check_safe_str(e);</div><div class='del'>-      {</div><div class='del'>-	char *str, *src;</div><div class='del'>-	src = RSTRING(e)-&gt;ptr;</div><div class='del'>-	str = dlstrdup(src);</div><div class='del'>-	ary[i] = (void*)str;</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case T_NIL:</div><div class='del'>-      ary[i] = NULL;</div><div class='del'>-      break;</div><div class='del'>-    case T_DATA:</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'>-        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='del'>-      }</div><div class='del'>-      break;</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'>-void *</div><div class='del'>-rb_ary2cary(char t, VALUE v, long *size)</div><div class='del'>-{</div><div class='del'>-  int len;</div><div class='del'>-  VALUE val0;</div><div class='del'>-</div><div class='del'>-  val0 = rb_check_array_type(v);</div><div class='del'>-  if(NIL_P(val0)) {</div><div class='del'>-    rb_raise(rb_eDLTypeError, "an array is expected.");</div><div class='del'>-  }</div><div class='del'>-  v = val0;</div><div class='del'>-</div><div class='del'>-  len = RARRAY(v)-&gt;len;</div><div class='del'>-  if (len == 0) {</div><div class='del'>-    return NULL;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (!size) {</div><div class='del'>-    size = ALLOCA_N(long,1);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  val0 = rb_ary_entry(v,0);</div><div class='del'>-  switch (TYPE(val0)) {</div><div class='del'>-  case T_FIXNUM:</div><div class='del'>-  case T_BIGNUM:</div><div class='del'>-    switch (t) {</div><div class='del'>-    case 'C': case 'c':</div><div class='del'>-      return (void*)c_carray(v,size);</div><div class='del'>-    case 'H': case 'h':</div><div class='del'>-      return (void*)c_harray(v,size);</div><div class='del'>-    case 'I': case 'i':</div><div class='del'>-      return (void*)c_iarray(v,size);</div><div class='del'>-    case 'L': case 'l': case 0:</div><div class='del'>-      return (void*)c_larray(v,size);</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "type mismatch");</div><div class='del'>-    }</div><div class='del'>-  case T_STRING:</div><div class='del'>-    return (void*)c_parray(v,size);</div><div class='del'>-  case T_FLOAT:</div><div class='del'>-    switch (t) {</div><div class='del'>-    case 'F': case 'f':</div><div class='del'>-      return (void*)c_farray(v,size);</div><div class='del'>-    case 'D': case 'd': case 0:</div><div class='del'>-      return (void*)c_darray(v,size);</div><div class='del'>-    }</div><div class='del'>-    rb_raise(rb_eDLTypeError, "type mismatch");</div><div class='del'>-  case T_DATA:</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'>-    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='del'>-    rb_raise(rb_eDLTypeError, "type mismatch");</div><div class='del'>-  case T_NIL:</div><div class='del'>-    return (void*)c_parray(v, size);</div><div class='del'>-  default:</div><div class='del'>-    rb_raise(rb_eDLTypeError, "unsupported type");</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_str_to_ptr(VALUE self)</div><div class='del'>-{</div><div class='del'>-  char *ptr;</div><div class='del'>-  int  len;</div><div class='del'>-</div><div class='del'>-  len = RSTRING(self)-&gt;len;</div><div class='del'>-  ptr = (char*)dlmalloc(len + 1);</div><div class='del'>-  memcpy(ptr, RSTRING(self)-&gt;ptr, len);</div><div class='del'>-  ptr[len] = '\0';</div><div class='del'>-  return rb_dlptr_new((void*)ptr,len,dlfree);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_ary_to_ptr(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  void *ptr;</div><div class='del'>-  VALUE t;</div><div class='del'>-  long size;</div><div class='del'>-</div><div class='del'>-  switch (rb_scan_args(argc, argv, "01", &amp;t)) {</div><div class='del'>-  case 1:</div><div class='del'>-    ptr = rb_ary2cary(StringValuePtr(t)[0], self, &amp;size);</div><div class='del'>-    break;</div><div class='del'>-  case 0:</div><div class='del'>-    ptr = rb_ary2cary(0, self, &amp;size);</div><div class='del'>-    break;</div><div class='del'>-  }</div><div class='del'>-  return ptr ? rb_dlptr_new(ptr, size, dlfree) : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_to_ptr(VALUE self)</div><div class='del'>-{</div><div class='del'>-  rb_io_t *fptr;</div><div class='del'>-  FILE     *fp;</div><div class='del'>-</div><div class='del'>-  GetOpenFile(self, fptr);</div><div class='del'>-  fp = fptr-&gt;f;</div><div class='del'>-</div><div class='del'>-  return fp ? rb_dlptr_new(fp, 0, 0) : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dl_dlopen(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  return rb_class_new_instance(argc, argv, rb_cDLHandle);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dl_malloc(VALUE self, VALUE size)</div><div class='del'>-{</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  return rb_dlptr_malloc(DLNUM2LONG(size), dlfree);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dl_strdup(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-  SafeStringValue(str);</div><div class='del'>-  return rb_dlptr_new(strdup(RSTRING(str)-&gt;ptr), RSTRING(str)-&gt;len, dlfree);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dl_sizeof(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-  return INT2NUM(dlsizeof(StringValuePtr(str)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dl_callback(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE type, proc;</div><div class='del'>-  int rettype, entry, i;</div><div class='del'>-  char fname[127];</div><div class='del'>-</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  proc = Qnil;</div><div class='del'>-  switch (rb_scan_args(argc, argv, "11", &amp;type, &amp;proc)) {</div><div class='del'>-  case 1:</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-      proc = rb_block_proc();</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      proc = Qnil;</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'>-  StringValue(type);</div><div class='del'>-  switch (RSTRING(type)-&gt;ptr[0]) {</div><div class='del'>-  case '0':</div><div class='del'>-    rettype = 0x00;</div><div class='del'>-    break;</div><div class='del'>-  case 'C':</div><div class='del'>-    rettype = 0x01;</div><div class='del'>-    break;</div><div class='del'>-  case 'H':</div><div class='del'>-    rettype = 0x02;</div><div class='del'>-    break;</div><div class='del'>-  case 'I':</div><div class='del'>-    rettype = 0x03;</div><div class='del'>-    break;</div><div class='del'>-  case 'L':</div><div class='del'>-    rettype = 0x04;</div><div class='del'>-    break;</div><div class='del'>-  case 'F':</div><div class='del'>-    rettype = 0x05;</div><div class='del'>-    break;</div><div class='del'>-  case 'D':</div><div class='del'>-    rettype = 0x06;</div><div class='del'>-    break;</div><div class='del'>-  case 'P':</div><div class='del'>-    rettype = 0x07;</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    rb_raise(rb_eDLTypeError, "unsupported type `%c'", RSTRING(type)-&gt;ptr[0]);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  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='del'>-      entry = i;</div><div class='del'>-      break;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-  if (entry &lt; 0) {</div><div class='del'>-    rb_raise(rb_eDLError, "too many callbacks are defined.");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  rb_hash_aset(DLFuncTable,</div><div class='del'>-	       rb_assoc_new(INT2NUM(rettype),INT2NUM(entry)),</div><div class='del'>-	       rb_assoc_new(type,proc));</div><div class='del'>-  sprintf(fname, "rb_dl_callback_func_%d_%d", rettype, entry);</div><div class='del'>-  return rb_dlsym_new((void (*)())rb_dl_callback_table[rettype][entry],</div><div class='del'>-		      fname, RSTRING(type)-&gt;ptr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dl_remove_callback(VALUE mod, VALUE sym)</div><div class='del'>-{</div><div class='del'>-  freefunc_t f;</div><div class='del'>-  int i, j;</div><div class='del'>-</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='del'>-	rb_hash_aset(DLFuncTable, rb_assoc_new(INT2NUM(i),INT2NUM(j)),Qnil);</div><div class='del'>-	break;</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'>-void</div><div class='del'>-Init_dl()</div><div class='del'>-{</div><div class='del'>-  void Init_dlptr();</div><div class='del'>-  void Init_dlsym();</div><div class='del'>-  void Init_dlhandle();</div><div class='del'>-</div><div class='del'>-  id_call = rb_intern("call");</div><div class='del'>-</div><div class='del'>-  rb_mDL = rb_define_module("DL");</div><div class='del'>-</div><div class='del'>-  rb_eDLError = rb_define_class_under(rb_mDL, "DLError", rb_eStandardError);</div><div class='del'>-  rb_eDLTypeError = rb_define_class_under(rb_mDL, "DLTypeError", rb_eDLError);</div><div class='del'>-</div><div class='del'>-  DLFuncTable = rb_hash_new();</div><div class='del'>-  init_dl_func_table();</div><div class='del'>-  rb_define_const(rb_mDL, "FuncTable", DLFuncTable);</div><div class='del'>-</div><div class='del'>-  rb_define_const(rb_mDL, "RTLD_GLOBAL", INT2NUM(RTLD_GLOBAL));</div><div class='del'>-  rb_define_const(rb_mDL, "RTLD_LAZY",   INT2NUM(RTLD_LAZY));</div><div class='del'>-  rb_define_const(rb_mDL, "RTLD_NOW",    INT2NUM(RTLD_NOW));</div><div class='del'>-</div><div class='del'>-  rb_define_const(rb_mDL, "ALIGN_INT",   INT2NUM(ALIGN_INT));</div><div class='del'>-  rb_define_const(rb_mDL, "ALIGN_LONG",  INT2NUM(ALIGN_LONG));</div><div class='del'>-  rb_define_const(rb_mDL, "ALIGN_FLOAT", INT2NUM(ALIGN_FLOAT));</div><div class='del'>-  rb_define_const(rb_mDL, "ALIGN_SHORT", INT2NUM(ALIGN_SHORT));</div><div class='del'>-  rb_define_const(rb_mDL, "ALIGN_DOUBLE",INT2NUM(ALIGN_DOUBLE));</div><div class='del'>-  rb_define_const(rb_mDL, "ALIGN_VOIDP", INT2NUM(ALIGN_VOIDP));</div><div class='del'>-</div><div class='del'>-  rb_define_const(rb_mDL, "MAX_ARG", INT2NUM(MAX_ARG));</div><div class='del'>-  rb_define_const(rb_mDL, "DLSTACK", rb_tainted_str_new2(DLSTACK_METHOD));</div><div class='del'>-</div><div class='del'>-  rb_define_module_function(rb_mDL, "dlopen", rb_dl_dlopen, -1);</div><div class='del'>-  rb_define_module_function(rb_mDL, "callback", rb_dl_callback, -1);</div><div class='del'>-  rb_define_module_function(rb_mDL, "define_callback", rb_dl_callback, -1);</div><div class='del'>-  rb_define_module_function(rb_mDL, "remove_callback", rb_dl_remove_callback, 1);</div><div class='del'>-  rb_define_module_function(rb_mDL, "malloc", rb_dl_malloc, 1);</div><div class='del'>-  rb_define_module_function(rb_mDL, "strdup", rb_dl_strdup, 1);</div><div class='del'>-  rb_define_module_function(rb_mDL, "sizeof", rb_dl_sizeof, 1);</div><div class='del'>-</div><div class='del'>-  Init_dlptr();</div><div class='del'>-  Init_dlsym();</div><div class='del'>-  Init_dlhandle();</div><div class='del'>-</div><div class='del'>-  rb_define_const(rb_mDL, "FREE", rb_dlsym_new(dlfree, "free", "0P"));</div><div class='del'>-</div><div class='del'>-  rb_define_method(rb_cString, "to_ptr", rb_str_to_ptr, 0);</div><div class='del'>-  rb_define_method(rb_cArray, "to_ptr", rb_ary_to_ptr, -1);</div><div class='del'>-  rb_define_method(rb_cIO, "to_ptr", rb_io_to_ptr, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/dl.def b/ext/dl/dl.def<br/>deleted file mode 100644<br/>index cdab4af90d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/dl.def?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/dl.def</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,59 +0,0 @@</div><div class='del'>-EXPORTS</div><div class='del'>-Init_dl</div><div class='del'>-dlfree</div><div class='del'>-dlmalloc</div><div class='del'>-dlrealloc</div><div class='del'>-dlstrdup</div><div class='del'>-rb_ary_to_ptr</div><div class='del'>-rb_dl_dlopen</div><div class='del'>-rb_dl_malloc</div><div class='del'>-rb_dl_strdup</div><div class='del'>-rb_eDLError</div><div class='del'>-rb_eDLTypeError</div><div class='del'>-rb_io_to_ptr</div><div class='del'>-rb_mDL</div><div class='del'>-rb_str_to_ptr</div><div class='del'>-Init_dlhandle</div><div class='del'>-rb_cDLHandle</div><div class='del'>-rb_dlhandle_close</div><div class='del'>-rb_dlhandle_disable_close</div><div class='del'>-rb_dlhandle_enable_close</div><div class='del'>-rb_dlhandle_sym</div><div class='del'>-Init_dlptr</div><div class='del'>-rb_cDLPtrData</div><div class='del'>-rb_dlmem_each</div><div class='del'>-rb_dlptr2cptr</div><div class='del'>-rb_dlptr_malloc</div><div class='del'>-rb_dlptr_aref</div><div class='del'>-rb_dlptr_aset</div><div class='del'>-rb_dlptr_cmp</div><div class='del'>-rb_dlptr_define_data_type</div><div class='del'>-rb_dlptr_define_struct</div><div class='del'>-rb_dlptr_define_union</div><div class='del'>-rb_dlptr_eql</div><div class='del'>-rb_dlptr_free_get</div><div class='del'>-rb_dlptr_free_set</div><div class='del'>-rb_dlptr_get_data_type</div><div class='del'>-rb_dlptr_inspect</div><div class='del'>-rb_dlptr_minus</div><div class='del'>-rb_dlptr_new</div><div class='del'>-rb_dlptr_new2</div><div class='del'>-rb_dlptr_null_p</div><div class='del'>-rb_dlptr_plus</div><div class='del'>-rb_dlptr_ptr</div><div class='del'>-rb_dlptr_ref</div><div class='del'>-rb_dlptr_to_array</div><div class='del'>-rb_dlptr_to_i</div><div class='del'>-rb_dlptr_to_s</div><div class='del'>-rb_dlptr_to_str</div><div class='del'>-rb_mDLMemorySpace</div><div class='del'>-Init_dlsym</div><div class='del'>-rb_cDLSymbol</div><div class='del'>-rb_dlsym2csym</div><div class='del'>-rb_dlsym_call</div><div class='del'>-rb_dlsym_cproto</div><div class='del'>-rb_dlsym_inspect</div><div class='del'>-rb_dlsym_name</div><div class='del'>-rb_dlsym_new</div><div class='del'>-rb_dlsym_proto</div><div class='del'>-rb_dlsym_to_ptr</div><div class='head'>diff --git a/ext/dl/dl.h b/ext/dl/dl.h<br/>deleted file mode 100644<br/>index 1faa316cf1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/dl.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/dl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,313 +0,0 @@</div><div class='del'>-/* -*- C -*-</div><div class='del'>- * $Id$</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef RUBY_DL_H</div><div class='del'>-#define RUBY_DL_H</div><div class='del'>-</div><div class='del'>-#include &lt;ruby.h&gt;</div><div class='del'>-#include &lt;dlconfig.h&gt;</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_DLFCN_H)</div><div class='del'>-# include &lt;dlfcn.h&gt;</div><div class='del'>-# /* some stranger systems may not define all of these */</div><div class='del'>-#ifndef RTLD_LAZY</div><div class='del'>-#define RTLD_LAZY 0</div><div class='del'>-#endif</div><div class='del'>-#ifndef RTLD_GLOBAL</div><div class='del'>-#define RTLD_GLOBAL 0</div><div class='del'>-#endif</div><div class='del'>-#ifndef RTLD_NOW</div><div class='del'>-#define RTLD_NOW 0</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-# if defined(HAVE_WINDOWS_H)</div><div class='del'>-#   include &lt;windows.h&gt;</div><div class='del'>-#   define dlclose(ptr) FreeLibrary((HINSTANCE)ptr)</div><div class='del'>-#   define dlopen(name,flag) ((void*)LoadLibrary(name))</div><div class='del'>-#   define dlerror()    "unknown error"</div><div class='del'>-#   define dlsym(handle,name) ((void*)GetProcAddress(handle,name))</div><div class='del'>-#   define RTLD_LAZY -1</div><div class='del'>-#   define RTLD_NOW  -1</div><div class='del'>-#   define RTLD_GLOBAL -1</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(StringValue)</div><div class='del'>-# define StringValue(v) if(TYPE(v) != T_STRING) v = rb_str_to_str(v)</div><div class='del'>-#endif</div><div class='del'>-#if !defined(StringValuePtr)</div><div class='del'>-# define StringValuePtr(v) RSTRING((TYPE(v) == T_STRING) ? (v) : rb_str_to_str(v))-&gt;ptr</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef DEBUG</div><div class='del'>-#define DEBUG_CODE(b) {printf("DEBUG:%d\n",__LINE__);b;}</div><div class='del'>-#define DEBUG_CODE2(b1,b2) {printf("DEBUG:%d\n",__LINE__);b1;}</div><div class='del'>-#else</div><div class='del'>-#define DEBUG_CODE(b)</div><div class='del'>-#define DEBUG_CODE2(b1,b2) b2</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define VOID_DLTYPE   0x00</div><div class='del'>-#define CHAR_DLTYPE   0x01</div><div class='del'>-#define SHORT_DLTYPE  0x02</div><div class='del'>-#define INT_DLTYPE    0x03</div><div class='del'>-#define LONG_DLTYPE   0x04</div><div class='del'>-#define FLOAT_DLTYPE  0x05</div><div class='del'>-#define DOUBLE_DLTYPE 0x06</div><div class='del'>-#define VOIDP_DLTYPE  0x07</div><div class='del'>-</div><div class='del'>-#define ARG_TYPE(x,i) (((x) &amp; (0x07 &lt;&lt; ((i)*3))) &gt;&gt; ((i)*3))</div><div class='del'>-#define PUSH_ARG(x,t) do{x &lt;&lt;= 3; x |= t;}while(0)</div><div class='del'>-#define PUSH_0(x) PUSH_ARG(x,VOID_DLTYPE)</div><div class='del'>-</div><div class='del'>-#if SIZEOF_INT == SIZEOF_LONG</div><div class='del'>-# define PUSH_I(x) PUSH_ARG(x,LONG_DLTYPE)</div><div class='del'>-# define ANY2I(x)  x.l</div><div class='del'>-# define DLINT(x)  (long)x</div><div class='del'>-#else</div><div class='del'>-# define PUSH_I(x) PUSH_ARG(x,INT_DLTYPE)</div><div class='del'>-# define ANY2I(x)  x.i</div><div class='del'>-# define DLINT(x)  (int)x</div><div class='del'>-#endif</div><div class='del'>-#define PUSH_L(x) PUSH_ARG(x,LONG_DLTYPE)</div><div class='del'>-#define ANY2L(x)  x.l</div><div class='del'>-#define DLLONG(x) (long)x</div><div class='del'>-</div><div class='del'>-#if defined(WITH_TYPE_FLOAT)</div><div class='del'>-# if SIZEOF_FLOAT == SIZEOF_DOUBLE</div><div class='del'>-#   define PUSH_F(x) PUSH_ARG(x,DOUBLE_DLTYPE)</div><div class='del'>-#   define ANY2F(x)  (x.d)</div><div class='del'>-#   define DLFLOAT(x) ((double)x)</div><div class='del'>-# else</div><div class='del'>-#   define PUSH_F(x) PUSH_ARG(x,FLOAT_DLTYPE)</div><div class='del'>-#   define ANY2F(x)  (x.f)</div><div class='del'>-#   define DLFLOAT(x) ((float)x)</div><div class='del'>-# endif</div><div class='del'>-#else</div><div class='del'>-# define PUSH_F(x) PUSH_ARG(x,DOUBLE_DLTYPE)</div><div class='del'>-# define ANY2F(x)  (x.d)</div><div class='del'>-# define DLFLOAT(x) ((double)x)</div><div class='del'>-#endif</div><div class='del'>-#define PUSH_D(x) PUSH_ARG(x,DOUBLE_DLTYPE)</div><div class='del'>-#define ANY2D(x)  (x.d)</div><div class='del'>-#define DLDOUBLE(x) ((double)x)</div><div class='del'>-</div><div class='del'>-#if SIZEOF_INT == SIZEOF_VOIDP &amp;&amp; SIZEOF_INT != SIZEOF_LONG</div><div class='del'>-# define PUSH_P(x) PUSH_ARG(x,INT_DLTYPE)</div><div class='del'>-# define ANY2P(x)  (x.i)</div><div class='del'>-# define DLVOIDP(x) ((int)x)</div><div class='del'>-#elif SIZEOF_LONG == SIZEOF_VOIDP</div><div class='del'>-# define PUSH_P(x) PUSH_ARG(x,LONG_DLTYPE)</div><div class='del'>-# define ANY2P(x)  (x.l)</div><div class='del'>-# define DLVOIDP(x) ((long)x)</div><div class='del'>-#else</div><div class='del'>-# define PUSH_P(x) PUSH_ARG(x,VOIDP_DLTYPE)</div><div class='del'>-# define ANY2P(x)  (x.p)</div><div class='del'>-# define DLVOIDP(x) ((void*)p)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(WITH_TYPE_CHAR)</div><div class='del'>-# define PUSH_C(x) PUSH_ARG(x,CHAR_DLTYPE)</div><div class='del'>-# define ANY2C(x)  (x.c)</div><div class='del'>-# define DLCHAR(x) ((char)x)</div><div class='del'>-#else</div><div class='del'>-# define PUSH_C(x) PUSH_I(x)</div><div class='del'>-# define ANY2C(x)  ANY2I(x)</div><div class='del'>-# define DLCHAR(x) DLINT(x)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(WITH_TYPE_SHORT)</div><div class='del'>-# define PUSH_H(x) PUSH_ARG(x,SHORT_DLTYPE)</div><div class='del'>-# define ANY2H(x)  (x.h)</div><div class='del'>-# define DLSHORT(x) ((short)x)</div><div class='del'>-#else</div><div class='del'>-# define PUSH_H(x) PUSH_I(x)</div><div class='del'>-# define ANY2H(x)  ANY2I(x)</div><div class='del'>-# define DLSHORT(x) DLINT(x)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define PUSH_S(x) PUSH_P(x)</div><div class='del'>-#define ANY2S(x) ANY2P(x)</div><div class='del'>-#define DLSTR(x) DLVOIDP(x)</div><div class='del'>-</div><div class='del'>-#define CBPUSH_0(x) PUSH_0(x)</div><div class='del'>-#define CBPUSH_C(x) PUSH_C(x)</div><div class='del'>-#define CBPUSH_H(x) PUSH_H(x)</div><div class='del'>-#define CBPUSH_I(x) PUSH_I(x)</div><div class='del'>-#define CBPUSH_L(x) PUSH_L(x)</div><div class='del'>-#define CBPUSH_F(x) PUSH_F(x)</div><div class='del'>-#define CBPUSH_D(x) PUSH_D(x)</div><div class='del'>-#if defined(WITH_CBTYPE_VOIDP)</div><div class='del'>-# define CBPUSH_P(x) PUSH_ARG(x,VOIDP_DLTYPE)</div><div class='del'>-#else</div><div class='del'>-# define CBPUSH_P(x) PUSH_P(x)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if defined(USE_INLINE_ASM)</div><div class='del'>-# if defined(__i386__) &amp;&amp; defined(__GNUC__)</div><div class='del'>-#   define DLSTACK</div><div class='del'>-#   define DLSTACK_METHOD "asm"</div><div class='del'>-#   define DLSTACK_REVERSE</div><div class='del'>-#   define DLSTACK_PROTO</div><div class='del'>-#   define DLSTACK_ARGS</div><div class='del'>-#   define DLSTACK_START(sym)</div><div class='del'>-#   define DLSTACK_END(sym)</div><div class='del'>-#   define DLSTACK_PUSH_C(x) asm volatile ("pushl %0" :: "g" (x));</div><div class='del'>-#   define DLSTACK_PUSH_H(x) asm volatile ("pushl %0" :: "g" (x));</div><div class='del'>-#   define DLSTACK_PUSH_I(x) asm volatile ("pushl %0" :: "g" (x));</div><div class='del'>-#   define DLSTACK_PUSH_L(x) asm volatile ("pushl %0" :: "g" (x));</div><div class='del'>-#   define DLSTACK_PUSH_P(x) asm volatile ("pushl %0" :: "g" (x));</div><div class='del'>-#   define DLSTACK_PUSH_F(x) asm volatile ("flds %0"::"g"(x));\</div><div class='del'>-                             asm volatile ("subl $4,%esp");\</div><div class='del'>-                             asm volatile ("fstps (%esp)");</div><div class='del'>-#   define DLSTACK_PUSH_D(x) asm volatile ("fldl %0"::"g"(x));\</div><div class='del'>-                             asm volatile ("subl $8,%esp");\</div><div class='del'>-                             asm volatile ("fstpl (%esp)")</div><div class='del'>-# else</div><div class='del'>-# error --with-asm is not supported on this machine</div><div class='del'>-# endif</div><div class='del'>-#elif defined(USE_DLSTACK)</div><div class='del'>-# define DLSTACK</div><div class='del'>-# define DLSTACK_GUARD</div><div class='del'>-# define DLSTACK_METHOD "dl"</div><div class='del'>-# define DLSTACK_PROTO long,long,long,long,long,\</div><div class='del'>-                       long,long,long,long,long,\</div><div class='del'>-                       long,long,long,long,long</div><div class='del'>-# define DLSTACK_ARGS  stack[0],stack[1],stack[2],stack[3],stack[4],\</div><div class='del'>-                       stack[5],stack[6],stack[7],stack[8],stack[9],\</div><div class='del'>-                       stack[10],stack[11],stack[12],stack[13],stack[14]</div><div class='del'>-# define DLSTACK_SIZE  (sizeof(long)*15)</div><div class='del'>-# define DLSTACK_START(sym)</div><div class='del'>-# define DLSTACK_END(sym)</div><div class='del'>-# define DLSTACK_PUSH_C(x)  {long v=(long)x; memcpy(sp,&amp;v,sizeof(long)); sp++;}</div><div class='del'>-# define DLSTACK_PUSH_H(x)  {long v=(long)x; memcpy(sp,&amp;v,sizeof(long)); sp++;}</div><div class='del'>-# define DLSTACK_PUSH_I(x)  {long v=(long)x; memcpy(sp,&amp;v,sizeof(long)); sp++;}</div><div class='del'>-# define DLSTACK_PUSH_L(x)  memcpy(sp,&amp;x,sizeof(long)); sp++;</div><div class='del'>-# define DLSTACK_PUSH_P(x)  memcpy(sp,&amp;x,sizeof(void*)); sp++;</div><div class='del'>-# define DLSTACK_PUSH_F(x)  memcpy(sp,&amp;x,sizeof(float)); sp+=sizeof(float)/sizeof(long);</div><div class='del'>-# define DLSTACK_PUSH_D(x)  memcpy(sp,&amp;x,sizeof(double)); sp+=sizeof(double)/sizeof(long);</div><div class='del'>-#else</div><div class='del'>-# define DLSTACK_METHOD "none"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-extern VALUE rb_mDL;</div><div class='del'>-extern VALUE rb_mDLMemorySpace;</div><div class='del'>-extern VALUE rb_cDLHandle;</div><div class='del'>-extern VALUE rb_cDLSymbol;</div><div class='del'>-extern VALUE rb_cDLPtrData;</div><div class='del'>-extern VALUE rb_cDLStructData;</div><div class='del'>-</div><div class='del'>-extern VALUE rb_eDLError;</div><div class='del'>-extern VALUE rb_eDLTypeError;</div><div class='del'>-</div><div class='del'>-#if defined(LONG2NUM) &amp;&amp; (SIZEOF_LONG == SIZEOF_VOIDP)</div><div class='del'>-# define DLLONG2NUM(x) LONG2NUM((long)x)</div><div class='del'>-# define DLNUM2LONG(x) (long)(NUM2LONG(x))</div><div class='del'>-#else</div><div class='del'>-# define DLLONG2NUM(x) INT2NUM((long)x)</div><div class='del'>-# define DLNUM2LONG(x) (long)(NUM2INT(x))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-typedef struct { char c; void *x; } s_voidp;</div><div class='del'>-typedef struct { char c; short x; } s_short;</div><div class='del'>-typedef struct { char c; int x; } s_int;</div><div class='del'>-typedef struct { char c; long x; } s_long;</div><div class='del'>-typedef struct { char c; float x; } s_float;</div><div class='del'>-typedef struct { char c; double x; } s_double;</div><div class='del'>-</div><div class='del'>-#define ALIGN_VOIDP  (sizeof(s_voidp) - sizeof(void *))</div><div class='del'>-#define ALIGN_SHORT  (sizeof(s_short) - sizeof(short))</div><div class='del'>-#define ALIGN_INT    (sizeof(s_int) - sizeof(int))</div><div class='del'>-#define ALIGN_LONG   (sizeof(s_long) - sizeof(long))</div><div class='del'>-#define ALIGN_FLOAT  (sizeof(s_float) - sizeof(float))</div><div class='del'>-#define ALIGN_DOUBLE (sizeof(s_double) - sizeof(double))</div><div class='del'>-</div><div class='del'>-/* for compatibility */</div><div class='del'>-#define VOIDP_ALIGN  ALIGN_VOIDP</div><div class='del'>-#define SHORT_ALIGN  ALIGN_SHORT</div><div class='del'>-#define INT_ALIGN    ALIGN_INT</div><div class='del'>-#define LONG_ALIGN   ALIGN_LONG</div><div class='del'>-#define FLOAT_ALIGN  ALIGN_FLOAT</div><div class='del'>-#define DOUBLE_ALIGN ALIGN_DOUBLE</div><div class='del'>-</div><div class='del'>-#define DLALIGN(ptr,offset,align) {\</div><div class='del'>-  while( (((unsigned long)((char *)ptr + offset)) % align) != 0 ) offset++;\</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-typedef void (*freefunc_t)(void *);</div><div class='del'>-#define DLFREEFUNC(func) ((freefunc_t)(func))</div><div class='del'>-</div><div class='del'>-typedef union {</div><div class='del'>-  void*  p;</div><div class='del'>-  char   c;</div><div class='del'>-  short  h;</div><div class='del'>-  int    i;</div><div class='del'>-  long   l;</div><div class='del'>-  float  f;</div><div class='del'>-  double d;</div><div class='del'>-  char  *s;</div><div class='del'>-} ANY_TYPE;</div><div class='del'>-</div><div class='del'>-struct dl_handle {</div><div class='del'>-  void *ptr;</div><div class='del'>-  int  open;</div><div class='del'>-  int  enable_close;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct sym_data {</div><div class='del'>-  void *func;</div><div class='del'>-  char *name;</div><div class='del'>-  char *type;</div><div class='del'>-  int  len;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-enum DLPTR_CTYPE {</div><div class='del'>-  DLPTR_CTYPE_UNKNOWN,</div><div class='del'>-  DLPTR_CTYPE_STRUCT,</div><div class='del'>-  DLPTR_CTYPE_UNION</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct ptr_data {</div><div class='del'>-  void *ptr;       /* a pointer to the data */</div><div class='del'>-  freefunc_t free; /* free() */</div><div class='del'>-  char *stype;      /* array of type specifiers */</div><div class='del'>-  int  *ssize;      /* size[i] = sizeof(type[i]) &gt; 0 */</div><div class='del'>-  int  slen;   /* the number of type specifiers */</div><div class='del'>-  ID   *ids;</div><div class='del'>-  int  ids_num;</div><div class='del'>-  int  ctype; /* DLPTR_CTYPE_UNKNOWN, DLPTR_CTYPE_STRUCT, DLPTR_CTYPE_UNION */</div><div class='del'>-  long size;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define RDLPTR(obj)  ((struct ptr_data *)(DATA_PTR(obj)))</div><div class='del'>-#define RDLSYM(obj)  ((struct sym_data *)(DATA_PTR(obj)))</div><div class='del'>-</div><div class='del'>-void dlfree(void*);</div><div class='del'>-void *dlmalloc(size_t);</div><div class='del'>-void *dlrealloc(void*,size_t);</div><div class='del'>-char *dlstrdup(const char *);</div><div class='del'>-size_t dlsizeof(const char *);</div><div class='del'>-</div><div class='del'>-void *rb_ary2cary(char t, VALUE ary, long *size);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-void rb_dlmem_delete(void *ptr);</div><div class='del'>-void rb_dlmem_aset(void *ptr, VALUE obj);</div><div class='del'>-VALUE rb_dlmem_aref(void *ptr);</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-void dlptr_free(struct ptr_data *data);</div><div class='del'>-void dlptr_init(VALUE val);</div><div class='del'>-</div><div class='del'>-VALUE rb_dlptr_new(void *ptr, long size, freefunc_t func);</div><div class='del'>-VALUE rb_dlptr_new2(VALUE klass, void *ptr, long size, freefunc_t func);</div><div class='del'>-VALUE rb_dlptr_malloc(long size, freefunc_t func);</div><div class='del'>-void *rb_dlptr2cptr(VALUE val);</div><div class='del'>-</div><div class='del'>-VALUE rb_dlsym_new(void (*func)(), const char *name, const char *type);</div><div class='del'>-freefunc_t rb_dlsym2csym(VALUE val);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#endif /* RUBY_DL_H */</div><div class='head'>diff --git a/ext/dl/doc/dl.txt b/ext/dl/doc/dl.txt<br/>deleted file mode 100644<br/>index 893bd21d79..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/doc/dl.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/doc/dl.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,266 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= Ruby/DL</div><div class='del'>-</div><div class='del'>-Ruby/DL provides an interface to the dynamic linker such as dlopen() on UNIX</div><div class='del'>-and LoadLibrary() on Windows.</div><div class='del'>-</div><div class='del'>-= Building and Installing</div><div class='del'>-</div><div class='del'>-  $ ruby extconf.rb    # to create the Makefile</div><div class='del'>-  $ make               # to build the library 'dl.so'</div><div class='del'>-  $ make libtest.so    # to build the C library 'libtest.so' for the test script</div><div class='del'>-  $ make test          # to run the test script</div><div class='del'>-  $ make install       # to install the library</div><div class='del'>-  $ make clean         # to remove the created files without Makefile</div><div class='del'>-  $ make distclean     # to remove the all created files</div><div class='del'>-</div><div class='del'>-= Using Ruby/DL</div><div class='del'>-</div><div class='del'>-We should usually use DL::Importable module provided by "dl/import.rb".</div><div class='del'>-It has high-level functions to access library functions. We use</div><div class='del'>-DL::Importable module to extend a module as follows:</div><div class='del'>-</div><div class='del'>-  require "dl/import"</div><div class='del'>-  module LIBC</div><div class='del'>-    extend DL::Importable</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-Now we can use methods dlload and extern in this module. We load the</div><div class='del'>-libraries using dlload, and define wrapper methods to library functions</div><div class='del'>-using extern respectively as follows:</div><div class='del'>-</div><div class='del'>-  module LIBC</div><div class='del'>-    extend DL::Importable</div><div class='del'>-    dlload "libc.so.6","libm.so.6"</div><div class='del'>-    extern "int strlen(char*)"</div><div class='del'>-  end</div><div class='del'>-  # Note that we should not include the module LIBC from some reason.</div><div class='del'>-</div><div class='del'>-We can call the library function strlen() using LIBC.strlen. If the first</div><div class='del'>-character of given function name is an uppercase, the first character of the</div><div class='del'>-defined method name becomes lowercase.</div><div class='del'>-We can also construct memory images of structures and unions using functions</div><div class='del'>-struct and union which are defined in "dl/struct.rb" as follows:</div><div class='del'>-</div><div class='del'>-  require "dl/import"</div><div class='del'>-  require "dl/struct"</div><div class='del'>-  module LIBC</div><div class='del'>-    extend DL::Importable</div><div class='del'>-    Timeval = struct [       # define timeval structure.</div><div class='del'>-      "long tv_sec",</div><div class='del'>-      "long tv_uses",</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  val = LIBC::Timeval.malloc # allocate memory.</div><div class='del'>-</div><div class='del'>-Notice that the above example takes LIBC::Timeval.malloc to allocate memory,</div><div class='del'>-rather than LIBC::Timeval.new. It is because DL::Timeval.new is for wrapping</div><div class='del'>-an object, PtrData, which has already been created.</div><div class='del'>-</div><div class='del'>-We can define a callback using the module function "callback" as follows:</div><div class='del'>-</div><div class='del'>-  module Foo</div><div class='del'>-    extend DL::Importable</div><div class='del'>-    def my_comp(str1,str2)</div><div class='del'>-      str1 &lt;=&gt; str2</div><div class='del'>-    end</div><div class='del'>-    COMPARE = callback "int my_comp(char*,char*)"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-where Foo::COMPARE is a Symbol object which invokes the method "my_comp".</div><div class='del'>-</div><div class='del'>-DL::Importable module is very useful. However, we sometimes encounter a case</div><div class='del'>-that we must directly use low-level functions such as dlsym(). In such case,</div><div class='del'>-we would use DL module functions. They are described in next section.</div><div class='del'>-</div><div class='del'>-= DL module</div><div class='del'>-</div><div class='del'>-Module DL consists of three classes, a few module functions and constants.</div><div class='del'>-The class Symbol represents the symbol we can call. The class PtrData</div><div class='del'>-indicates a memory block such as a pointer in C. An object instantiated from</div><div class='del'>-the class Handle keeps a handle to opened library.</div><div class='del'>-</div><div class='del'>-== Constants</div><div class='del'>-</div><div class='del'>-* VERSION</div><div class='del'>-* MAJOR_VERSION</div><div class='del'>-* MINOR_VERSION</div><div class='del'>-* PATCH_VERSION</div><div class='del'>-* RTLD_GLOBAL</div><div class='del'>-* RTLD_LAZY</div><div class='del'>-* RTLD_NOW</div><div class='del'>-* MAX_ARG</div><div class='del'>-* MAX_CBARG</div><div class='del'>-* MAX_CBENT</div><div class='del'>-</div><div class='del'>-== Functions</div><div class='del'>-</div><div class='del'>-* handle = dlopen(lib){|handle| ... }</div><div class='del'>-  * is quite equal to `Handle.new(lib)'</div><div class='del'>-</div><div class='del'>-* sym = set_callback(cbtype, entry){|args| ... }</div><div class='del'>-* sym = set_callback(cbtype, entry, proc)</div><div class='del'>-  * makes entry-th pre-defined function to call the proc or given block. the </div><div class='del'>-    entry-th pre-defined function is specified by cbtype and entry. cbtype is a</div><div class='del'>-    prototype of the callback. see also the section `Type specifiers' about </div><div class='del'>-    cbtype.</div><div class='del'>-</div><div class='del'>-* sym = get_callback(cbtype, entry)</div><div class='del'>-  * returns the Proc object which is given by the above function</div><div class='del'>-   `set_callback'.</div><div class='del'>-</div><div class='del'>-* ptr = malloc(size, [free = nil])</div><div class='del'>-  * allocates the size bytes, and returns the pointer as a PtrData object ptr.</div><div class='del'>-</div><div class='del'>-* ptr = strdup(str)</div><div class='del'>-  * returns a PtrData object ptr which represents the pointer to a new string</div><div class='del'>-    which is a duplicate of the string str.</div><div class='del'>-</div><div class='del'>-* size = sizeof(type)</div><div class='del'>-  * returns the size of type. `sizeof("C") + sizeof("L")' is not equal to</div><div class='del'>-    `sizeof("CL")'. the latter is assumed to returns the enough size of the</div><div class='del'>-    structure `struct foo { char c; long l; }', but the size may not equal to</div><div class='del'>-    `sizeof(foo)' of C.</div><div class='del'>-</div><div class='del'>-== Handle class</div><div class='del'>-</div><div class='del'>-* handle = Handle.new(lib){|handle| ... }</div><div class='del'>-  * opens a library lib and returns a Handle object handle. if a block is</div><div class='del'>-    given, the handle is automatically closed as the block ends.</div><div class='del'>-</div><div class='del'>-* Handle#close</div><div class='del'>-  * closes the handle opened by the above Handle.new(lib).</div><div class='del'>-</div><div class='del'>-* sym = Handle#sym(func, prototype = "0"),</div><div class='del'>-  sym = Handle#[func, prototype = nil]</div><div class='del'>-</div><div class='del'>-  * obtains the pointer to a function called func and returns a Symbol object</div><div class='del'>-    or a DataPtr object. prototype is a string which consists of type</div><div class='del'>-    specifiers, it indicates the function's prototype. see also the section</div><div class='del'>-    `Type specifiers'.</div><div class='del'>-</div><div class='del'>-== Symbol class</div><div class='del'>-</div><div class='del'>-* sym = Symbol.new(addr, type = nil, name = nil)</div><div class='del'>-  * creates the Symbol object sym with the type type if type is not nil. addr</div><div class='del'>-    is the address where the function is allocated. If type is nil, it returns</div><div class='del'>-    a DataPtr object.</div><div class='del'>-</div><div class='del'>-* Symbol::char2type(char)</div><div class='del'>-  * takes a character char that represents a type and returns the type</div><div class='del'>-    specifier of the C language.</div><div class='del'>-</div><div class='del'>-* str = Symbol#proto()</div><div class='del'>-  * returns the function prototype.</div><div class='del'>-</div><div class='del'>-* str = Symbol#name()</div><div class='del'>-  * Returns the function name.</div><div class='del'>-</div><div class='del'>-* str = Symbol#cproto(),</div><div class='del'>-  str = Symbol#to_s()</div><div class='del'>-  * returns the prototype of the C language.</div><div class='del'>-</div><div class='del'>-* str = Symbol#inspect()</div><div class='del'>-  * returns the inspectable string.</div><div class='del'>-</div><div class='del'>-* r,rs = Symbol#call(arg1,arg2,...,argN),</div><div class='del'>-  r,rs = Symbol#[](arg1,arg2,...,argN)</div><div class='del'>-  * calls the function with parameters arg1, arg2, ..., argN. and the result</div><div class='del'>-    consists of the return value r and parameters rs. rs is an array.</div><div class='del'>-</div><div class='del'>-* ptr = Symbol#to_ptr</div><div class='del'>-  * returns the corresponding PtrData object ptr.</div><div class='del'>-</div><div class='del'>-== PtrData class</div><div class='del'>-</div><div class='del'>-* ptr = PtrData.new(addr, [size = 0, free = nil])</div><div class='del'>-  * returns the PtrData object representing the pointer which indicates the</div><div class='del'>-    address addr. GC frees the memory using the free function.</div><div class='del'>-</div><div class='del'>-* PtrData#free=(sym)</div><div class='del'>-  * If you specify a symbol object sym, GC frees the memory using the function</div><div class='del'>-    represented by sym.</div><div class='del'>-</div><div class='del'>-* sym = PtrData#free</div><div class='del'>-  * returns a symbol object sym which is used when GC frees the memory. it</div><div class='del'>-    usually configured by `PtrData#free=' or `PtrData.new'.</div><div class='del'>-</div><div class='del'>-* size = PtrData#size, PtrData#size=(size)</div><div class='del'>-  * gets and sets allocated size of the memory.</div><div class='del'>-</div><div class='del'>-* ary = PtrData#to_a(type, [size])</div><div class='del'>-  * returns an array of the type which specified with type. type must be one of</div><div class='del'>-    'S','P','I','L','D' and 'F'.</div><div class='del'>-</div><div class='del'>-* str = PtrData#to_s([len])</div><div class='del'>-  * returns a string which length is len. if len is omitted, the end of the</div><div class='del'>-    string is '\0'.</div><div class='del'>-</div><div class='del'>-* ptr = PtrData#ptr,+@</div><div class='del'>-  * returns the pointed value as a PtrData object ptr.</div><div class='del'>-</div><div class='del'>-* ptr = PtrData#ref,-@</div><div class='del'>-  * returns the reference as a PtrData object ptr.</div><div class='del'>-</div><div class='del'>-* ptr = PtrData#+</div><div class='del'>-  * returns the PtrData object</div><div class='del'>-</div><div class='del'>-* ptr = PtrData#-</div><div class='del'>-  * returns the PtrData object</div><div class='del'>-</div><div class='del'>-* PtrData#struct!(type, *members)</div><div class='del'>-  * defines the data type to get access to a structure member with a symbol.</div><div class='del'>-    (see also PtrData#[])</div><div class='del'>-</div><div class='del'>-* PtrData#union!(type, *members)</div><div class='del'>-  * defines the data type to get access to a union member with a symbol. (see</div><div class='del'>-    also PtrData#[])</div><div class='del'>-</div><div class='del'>-* val = PtrData#[key], PtrData#[key, num = 0]</div><div class='del'>-  * if the key is a string or symbol, this method returns the value of the</div><div class='del'>-    structure/union member which has the type defined by PtrData#</div><div class='del'>-    {struct!,union!}. if the key is a integer value and this object represents</div><div class='del'>-    the pointer ptr, it returns the value of `(ptr + key).to_s(num)'</div><div class='del'>-</div><div class='del'>-* PtrData#[key,num]=val, PtrData#[key]=val</div><div class='del'>-  * if the key is a string or symbol, this method substitute the value of the</div><div class='del'>-    structure/union member with val. if the key is a integer value and val is a</div><div class='del'>-    string, this method copies num bytes of val to the memory area ptr using</div><div class='del'>-    memcpy(3).</div><div class='del'>-</div><div class='del'>-== Type specifiers</div><div class='del'>-</div><div class='del'>-the prototype consists of the following type specifiers, first element of </div><div class='del'>-prototype represents the type of return value, and remaining elements represent</div><div class='del'>-the type of each argument.</div><div class='del'>-</div><div class='del'>-    C : char</div><div class='del'>-    c : char *</div><div class='del'>-    H : short</div><div class='del'>-    h : short *</div><div class='del'>-    I : int</div><div class='del'>-    i : int *</div><div class='del'>-    L : long</div><div class='del'>-    l : long *</div><div class='del'>-    F : float</div><div class='del'>-    f : float *</div><div class='del'>-    D : double</div><div class='del'>-    d : double *</div><div class='del'>-    S : const char *</div><div class='del'>-    s : char *</div><div class='del'>-    A : const type[]</div><div class='del'>-    a : type[] (allocates new memory space)</div><div class='del'>-    P : void * (same as 'p')</div><div class='del'>-    p : void * (same as 'P')</div><div class='del'>-    0 : void function (this must be a first character of the prototype)</div><div class='del'>-</div><div class='del'>-the cbtype consists of type specifiers 0, C, I, H, L, F, D, S and P.</div><div class='del'>-for example:</div><div class='del'>-</div><div class='del'>-    DL.callback('IPP'){|ptr1,ptr2|</div><div class='del'>-      str1 = ptr1.ptr.to_s</div><div class='del'>-      str2 = ptr2.ptr.to_s</div><div class='del'>-      str1 &lt;=&gt; str2</div><div class='del'>-    }</div><div class='del'>-=end</div><div class='head'>diff --git a/ext/dl/extconf.rb b/ext/dl/extconf.rb<br/>deleted file mode 100644<br/>index beb15ab04c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,193 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-begin # for the exception SystemExit</div><div class='del'>-</div><div class='del'>-$:.unshift File.dirname(__FILE__)</div><div class='del'>-require 'type'</div><div class='del'>-</div><div class='del'>-if( ARGV.include?("--help") )</div><div class='del'>-  print &lt;&lt;EOF</div><div class='del'>-  --help             print this messages</div><div class='del'>-  --with-type-char   strictly use type 'char'</div><div class='del'>-  --with-type-short  strictly use type 'short'</div><div class='del'>-  --with-type-float  strictly use type 'float'</div><div class='del'>-  --with-args=&lt;max_arg&gt;</div><div class='del'>-  --with-callback=&lt;max_callback&gt;</div><div class='del'>-  --enable-asm       use the embedded assembler for passing arguments.</div><div class='del'>-                     (this option is available for i386 machine now.)</div><div class='del'>-  --enable-dlstack   use a stack emulation for constructing function call.</div><div class='del'>-EOF</div><div class='del'>-  exit(0)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-($CPPFLAGS || $CFLAGS) &lt;&lt; " -I."</div><div class='del'>-</div><div class='del'>-if (Config::CONFIG['CC'] =~ /gcc/)  # from Win32API</div><div class='del'>-  $CFLAGS &lt;&lt; " -fno-defer-pop -fno-omit-frame-pointer"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$with_dlstack ||= true</div><div class='del'>-$with_asm = ! $with_dlstack</div><div class='del'>-</div><div class='del'>-$with_type_int = try_cpp(&lt;&lt;EOF)</div><div class='del'>-#include "config.h"</div><div class='del'>-#if SIZEOF_INT == SIZEOF_LONG</div><div class='del'>-#error int not needed</div><div class='del'>-#endif</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$with_type_float = try_cpp(&lt;&lt;EOF)</div><div class='del'>-#include "config.h"</div><div class='del'>-#if SIZEOF_FLOAT == SIZEOF_DOUBLE</div><div class='del'>-#error float not needed</div><div class='del'>-#endif</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$with_type_voidp = try_cpp(&lt;&lt;EOF)</div><div class='del'>-#include "config.h"</div><div class='del'>-#if SIZEOF_VOIDP == SIZEOF_INT || SIZEOF_VOIDP == SIZEOF_LONG</div><div class='del'>-#error void* not needed</div><div class='del'>-#endif</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$with_type_char  = DLTYPE[CHAR][:sym]</div><div class='del'>-$with_type_short = DLTYPE[SHORT][:sym]</div><div class='del'>-$with_type_long  = DLTYPE[LONG][:sym]</div><div class='del'>-$with_type_double= DLTYPE[DOUBLE][:sym]</div><div class='del'>-$with_type_int   &amp;= DLTYPE[INT][:sym]</div><div class='del'>-$with_type_float &amp;= DLTYPE[FLOAT][:sym]</div><div class='del'>-$with_type_voidp &amp;= DLTYPE[VOIDP][:sym]</div><div class='del'>-</div><div class='del'>-$with_type_char  = enable_config("type-char", $with_type_char)</div><div class='del'>-$with_type_short = enable_config("type-short", $with_type_short)</div><div class='del'>-$with_type_float = enable_config("type-float", $with_type_float)</div><div class='del'>-</div><div class='del'>-$with_asm        = enable_config("asm", $with_asm)</div><div class='del'>-$with_dlstack    = enable_config("dlstack", $with_dlstack)</div><div class='del'>-</div><div class='del'>-args = with_config("args")</div><div class='del'>-max_arg = nil</div><div class='del'>-if( $with_asm || $with_dlstack )</div><div class='del'>-  $with_type_char = true</div><div class='del'>-  $with_type_short = true</div><div class='del'>-  $with_type_float = true</div><div class='del'>-  max_arg = 0</div><div class='del'>-end</div><div class='del'>-if( args )</div><div class='del'>-  max_arg = args.to_i</div><div class='del'>-  if( !max_arg )</div><div class='del'>-    print("--with-args=&lt;max_arg&gt;\n")</div><div class='del'>-    exit(1)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-max_arg   ||= 6</div><div class='del'>-</div><div class='del'>-max_callback = with_config("callback","10").to_i</div><div class='del'>-callback_types = DLTYPE.keys.length</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-$dlconfig_h = &lt;&lt;EOF</div><div class='del'>-#define MAX_ARG           #{max_arg}</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-def dlc_define(const)</div><div class='del'>-  $dlconfig_h &lt;&lt; "#if !defined(#{const})\n" +</div><div class='del'>-                 "# define #{const}\n" +</div><div class='del'>-                 "#endif\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$dlconfig_h &lt;&lt; "#define MAX_CALLBACK #{max_callback}\n"</div><div class='del'>-$dlconfig_h &lt;&lt; "#define CALLBACK_TYPES #{callback_types}\n"</div><div class='del'>-if( $with_dlstack )</div><div class='del'>-  $dlconfig_h &lt;&lt; "#define USE_DLSTACK\n"</div><div class='del'>-else</div><div class='del'>-  if( $with_asm )</div><div class='del'>-    $dlconfig_h &lt;&lt; "#define USE_INLINE_ASM\n"</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-if( $with_type_char )</div><div class='del'>-  $dlconfig_h &lt;&lt; "#define WITH_TYPE_CHAR\n"</div><div class='del'>-end</div><div class='del'>-if( $with_type_short )</div><div class='del'>-  $dlconfig_h &lt;&lt; "#define WITH_TYPE_SHORT\n"</div><div class='del'>-end</div><div class='del'>-if( $with_type_long )</div><div class='del'>-  $dlconfig_h &lt;&lt; "#define WITH_TYPE_LONG\n"</div><div class='del'>-end</div><div class='del'>-if( $with_type_double )</div><div class='del'>-  $dlconfig_h &lt;&lt; "#define WITH_TYPE_DOUBLE\n"</div><div class='del'>-end</div><div class='del'>-if( $with_type_float )</div><div class='del'>-  $dlconfig_h &lt;&lt; "#define WITH_TYPE_FLOAT\n"</div><div class='del'>-end</div><div class='del'>-if( $with_type_int )</div><div class='del'>-  $dlconfig_h &lt;&lt; "#define WITH_TYPE_INT\n"</div><div class='del'>-end</div><div class='del'>-if( $with_type_voidp )</div><div class='del'>-  $dlconfig_h &lt;&lt; "#define WITH_TYPE_VOIDP\n"</div><div class='del'>-end</div><div class='del'>-</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='del'>-if( have_header("dlfcn.h") )</div><div class='del'>-  dlc_define("HAVE_DLFCN_H")</div><div class='del'>-  have_library("dl")</div><div class='del'>-  have_func("dlopen")</div><div class='del'>-  have_func("dlclose")</div><div class='del'>-  have_func("dlsym")</div><div class='del'>-  if( have_func("dlerror") )</div><div class='del'>-    dlc_define("HAVE_DLERROR")</div><div class='del'>-  end</div><div class='del'>-elsif ( have_windows_h )</div><div class='del'>-  have_func("LoadLibrary")</div><div class='del'>-  have_func("FreeLibrary")</div><div class='del'>-  have_func("GetProcAddress")</div><div class='del'>-else</div><div class='del'>-  exit(0)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def File.update(file, str)</div><div class='del'>-  begin</div><div class='del'>-    open(file){|f|f.read} == str</div><div class='del'>-  rescue Errno::ENOENT</div><div class='del'>-    false</div><div class='del'>-  end or open(file, "w"){|f|f.print(str)}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-File.update("dlconfig.h", &lt;&lt;EOF)</div><div class='del'>-#ifndef DLCONFIG_H</div><div class='del'>-#define DLCONFIG_H</div><div class='del'>-#{$dlconfig_h}</div><div class='del'>-#endif /* DLCONFIG_H */</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-File.update("dlconfig.rb", &lt;&lt;EOF)</div><div class='del'>-MAX_ARG = #{max_arg}</div><div class='del'>-MAX_CALLBACK = #{max_callback}</div><div class='del'>-CALLBACK_TYPES = #{callback_types}</div><div class='del'>-DLTYPE[CHAR][:sym]  = #{$with_type_char}</div><div class='del'>-DLTYPE[SHORT][:sym] = #{$with_type_short}</div><div class='del'>-DLTYPE[INT][:sym]   = #{$with_type_int}</div><div class='del'>-DLTYPE[LONG][:sym]  = #{$with_type_long}</div><div class='del'>-DLTYPE[FLOAT][:sym] = #{$with_type_float}</div><div class='del'>-DLTYPE[DOUBLE][:sym]= #{$with_type_double}</div><div class='del'>-DLTYPE[VOIDP][:sym] = #{$with_type_voidp}</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$INSTALLFILES = [</div><div class='del'>-  ["./dlconfig.h", "$(archdir)$(target_prefix)", "."],</div><div class='del'>-  ["dl.h", "$(archdir)$(target_prefix)", ""],</div><div class='del'>-]</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='del'>-</div><div class='del'>-create_makefile('dl')</div><div class='del'>-rescue SystemExit</div><div class='del'>-  # do nothing</div><div class='del'>-end</div><div class='head'>diff --git a/ext/dl/h2rb b/ext/dl/h2rb<br/>deleted file mode 100644<br/>index 00fbd60c82..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/h2rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/h2rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,500 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-require 'ftools'</div><div class='del'>-</div><div class='del'>-$recursive = false</div><div class='del'>-$force     = false</div><div class='del'>-$conly     = true</div><div class='del'>-$inc_path  = []</div><div class='del'>-$infilename= nil</div><div class='del'>-$insert_require = true</div><div class='del'>-</div><div class='del'>-def valid_ruby_code?(code)</div><div class='del'>-  begin</div><div class='del'>-    eval("BEGIN {return true}; #{code}")</div><div class='del'>-  rescue SyntaxError</div><div class='del'>-    return false</div><div class='del'>-  end</div><div class='del'>-  return false</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def print_usage</div><div class='del'>-  print &lt;&lt;EOF</div><div class='del'>-h2rb [-r] [-I &lt;path&gt;] [-d] [&lt;filename&gt;]</div><div class='del'>-EOF</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-while( ARGV[0] )</div><div class='del'>-  case( ARGV[0] )</div><div class='del'>-  when "-r"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $recursive = true</div><div class='del'>-  when "-R"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $recursive = false</div><div class='del'>-  when "-l"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $insert_require = true</div><div class='del'>-  when "-L"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $insert_require = false</div><div class='del'>-  when "-c"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $conly = true</div><div class='del'>-  when "-C"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $conly = false</div><div class='del'>-  when "-f"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $force = true</div><div class='del'>-  when "-F"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $force = false</div><div class='del'>-  when "-I"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $inc_path &lt;&lt; ARGV.shift</div><div class='del'>-  when "-d"</div><div class='del'>-    ARGV.shift</div><div class='del'>-    $DEBUG = true</div><div class='del'>-  when "-h","--help"</div><div class='del'>-    print_usage()</div><div class='del'>-    exit 0</div><div class='del'>-  when /-.*/</div><div class='del'>-    $stderr.print("unknown option '#{ARGV[0]}'.\n")</div><div class='del'>-    print_usage()</div><div class='del'>-    exit 0</div><div class='del'>-  else</div><div class='del'>-    $infilename = ARGV.shift</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$inc_dir = File.join(CONFIG["prefix"], "lib", "ruby",</div><div class='del'>-		     CONFIG["MAJOR"] + "." + CONFIG["MINOR"],</div><div class='del'>-		     "dl")</div><div class='del'>-</div><div class='del'>-class H2RBError &lt; StandardError; end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class H2RB</div><div class='del'>-  def initialize(inc_dir = nil, inc_path = nil, insert_require = nil)</div><div class='del'>-    @inc_path = inc_path || []</div><div class='del'>-    @inc_dir  = inc_dir  || '.'</div><div class='del'>-    @indent = 0</div><div class='del'>-    @parsed_files = []</div><div class='del'>-    @insert_require = insert_require || false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def find_path(file)</div><div class='del'>-    if( ! file )</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-    if( File.exist?(file) )</div><div class='del'>-      if( file[0] == ?/ )</div><div class='del'>-	return file</div><div class='del'>-      else</div><div class='del'>-	return file</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @inc_path.each{|path|</div><div class='del'>-    full = File.join(path, file)</div><div class='del'>-      if( File.exist?(full) )</div><div class='del'>-	return full</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def strip_comment(line)</div><div class='del'>-    if( @commented )</div><div class='del'>-      if( e = line.index("*/") )</div><div class='del'>-	line[0..(e+1)] = ""</div><div class='del'>-	@commented = false</div><div class='del'>-      else</div><div class='del'>-	line = ""</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if( s = line.index("/*") )</div><div class='del'>-	if( e = line.index("*/") )</div><div class='del'>-	  line[s..(e+1)] = ""</div><div class='del'>-	else</div><div class='del'>-	  line[s..-1] = ""</div><div class='del'>-	  @commented = true</div><div class='del'>-	end</div><div class='del'>-      elsif( s = line.index("//") )</div><div class='del'>-	line[s..(-1)] = ""</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-      </div><div class='del'>-    line.gsub!(/\s+$/,"")</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def up_indent</div><div class='del'>-    @indent += 1</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def down_indent</div><div class='del'>-    @indent -= 1</div><div class='del'>-    if( @indent &lt; 0 )</div><div class='del'>-      raise</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def indent</div><div class='del'>-    "  " * @indent</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rescue_begin</div><div class='del'>-    line = "#{indent}begin"</div><div class='del'>-    up_indent</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rescue_nameerror</div><div class='del'>-    down_indent</div><div class='del'>-    line = [</div><div class='del'>-      "#{indent}rescue NameError =&gt; e",</div><div class='del'>-      "#{indent}  raise e if( $DEBUG )",</div><div class='del'>-      "#{indent}end"].join($/)</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parse_enum(line)</div><div class='del'>-    if( line =~ /enum\s+(\S+\s+)?\{(.+)\}/ )</div><div class='del'>-      enum_name  = $1</div><div class='del'>-      enum_block = $2</div><div class='del'>-      if( enum_name )</div><div class='del'>-	line = "#{indent}# -- enum #{enum_name}\n"</div><div class='del'>-      else</div><div class='del'>-	line = "#{indent}# -- enum\n"</div><div class='del'>-      end</div><div class='del'>-      enums = enum_block.split(/,/).collect{|e| e.strip}</div><div class='del'>-      i = 0</div><div class='del'>-      enums.each{|elem|</div><div class='del'>-	var,val = elem.split(/=/).collect{|e| e.strip}</div><div class='del'>-	if( val )</div><div class='del'>-	  i = val.to_i</div><div class='del'>-	end</div><div class='del'>-	line += "#{indent}#{var} = #{i.to_s}\n"</div><div class='del'>-	i += 1</div><div class='del'>-      }</div><div class='del'>-      line += "#{indent}# -- end of enum"</div><div class='del'>-      return line</div><div class='del'>-    else</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parse_define(line)</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*define\s+(\S+)\(\)/</div><div class='del'>-      line = nil</div><div class='del'>-    when /^#\s*define\s+(\S+)\((.+)\)\s+(.+)$/</div><div class='del'>-      if( @conly )</div><div class='del'>-	line = nil</div><div class='del'>-      else</div><div class='del'>-	defname = $1</div><div class='del'>-	defargs = $2</div><div class='del'>-	defval  = $3</div><div class='del'>-	if( !valid_ruby_code?(defval) )</div><div class='del'>-	  defval = "nil # #{defval}"</div><div class='del'>-	end</div><div class='del'>-	if( defname[0,1] =~ /^[A-Z]$/ )</div><div class='del'>-	  line = "#{indent}#{defname} = proc{|#{defargs}| #{defval}}"</div><div class='del'>-	else</div><div class='del'>-	  line = [</div><div class='del'>-	    "#{indent}def #{defname}(#{defargs})",</div><div class='del'>-	    "#{indent}  #{defval}",</div><div class='del'>-	    "#{indent}end"</div><div class='del'>-	  ].join("\n")</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    when /^#\s*define\s+(\S+)\((.+)\)$/</div><div class='del'>-      if( @conly )</div><div class='del'>-	line = nil</div><div class='del'>-      else</div><div class='del'>-	defname = $1</div><div class='del'>-	defargs = $2</div><div class='del'>-	defval  = nil</div><div class='del'>-	if( !valid_ruby_code?(defval) )</div><div class='del'>-	  defval = "nil # #{defval}"</div><div class='del'>-	end</div><div class='del'>-	if( defname[0,1] =~ /^[A-Z]$/ )</div><div class='del'>-	  line = "#{indent}#{defname} = proc{|#{defargs}| #{defval}}"</div><div class='del'>-	else</div><div class='del'>-	  line = [</div><div class='del'>-	    "#{indent}def #{defname}(#{defargs})",</div><div class='del'>-	    "#{indent}  #{defval}",</div><div class='del'>-	    "#{indent}end"</div><div class='del'>-	  ].join("\n")</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    when /^#\s*define\s+(\S+)\s+(.+)$/</div><div class='del'>-      defname = $1</div><div class='del'>-      defval  = $2</div><div class='del'>-      if( !valid_ruby_code?(defval) )</div><div class='del'>-	defval = "nil # #{defval}"</div><div class='del'>-      end</div><div class='del'>-      line = [rescue_begin, "#{indent}#{defname} = #{defval}", rescue_nameerror].join($/)</div><div class='del'>-    when /^#\s*define\s+(\S+)$/</div><div class='del'>-      defname = $1</div><div class='del'>-      line = "#{indent}#{defname} = nil"</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def parse_undef(line)</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*undef\s+([A-Z]\S+)$/</div><div class='del'>-      defname = $1</div><div class='del'>-      line = "#{indent}remove_const(:#{defname})"</div><div class='del'>-    when /^#\s*undef\s+(\S+)$/</div><div class='del'>-      defname = $1</div><div class='del'>-      line = "#{indent}#{defname} = nil"</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def parse_ifdef(line)</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*ifdef\s+(\S+)$/</div><div class='del'>-      defname = $1</div><div class='del'>-      line = [</div><div class='del'>-	rescue_begin,</div><div class='del'>-	"#{indent}if( defined?(#{defname}) &amp;&amp; ! #{defname}.nil? )"].join($/)</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def parse_ifndef(line)</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*ifndef\s+(\S+)$/</div><div class='del'>-      defname = $1</div><div class='del'>-      line = [</div><div class='del'>-	rescue_begin,</div><div class='del'>-	"#{indent}if( ! defined?(#{defname}) || #{defname}.nil? )"].join($/)</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def parse_if(line)</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*if\s+(.+)$/</div><div class='del'>-      cond = $1</div><div class='del'>-      cond.gsub!(/defined(.+)/){ "defined?(#{$1}) &amp;&amp; ! #{$1}.nil?" }</div><div class='del'>-      if( valid_ruby_code?(cond) )</div><div class='del'>-	line = "#{indent}if( #{cond} )"</div><div class='del'>-      else</div><div class='del'>-	line = "#{indent}if( false ) # #{cond}"</div><div class='del'>-      end</div><div class='del'>-      line = [rescue_begin, line].join($/)</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def parse_elif(line)</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*elif\s+(.+)$/</div><div class='del'>-      cond = $1</div><div class='del'>-      cond.gsub!("defined","defined?")</div><div class='del'>-      line = "#{indent}elsif( #{cond} )"</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def parse_else(line)</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*else\s*/</div><div class='del'>-      line = "#{indent}else"</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def parse_endif(line)</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*endif\s*$/</div><div class='del'>-      line = ["#{indent}end", rescue_nameerror].join($/)</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def parse_include(line)</div><div class='del'>-    if( ! @insert_require )</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    file = nil</div><div class='del'>-    case line</div><div class='del'>-    when /^#\s*include "(.+)"$/</div><div class='del'>-      file = $1</div><div class='del'>-      line = "#{indent}require '#{file}'"</div><div class='del'>-    when /^#\s*include \&lt;(.+)\&gt;$/</div><div class='del'>-      file = $1</div><div class='del'>-      line = "#{indent}require '#{file}'"</div><div class='del'>-    else</div><div class='del'>-      line = nil</div><div class='del'>-    end</div><div class='del'>-    if( @recursive &amp;&amp; file &amp;&amp; (!@parsed_files.include?(file)) )</div><div class='del'>-      parse(file, @recursive, @force, @conly)</div><div class='del'>-    end</div><div class='del'>-    return line</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def open_files(infilename)</div><div class='del'>-    if( ! infilename )</div><div class='del'>-      return [$stdin, $stdout]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    old_infilename = infilename</div><div class='del'>-    infilename = find_path(infilename)</div><div class='del'>-    if( ! infilename )</div><div class='del'>-      $stderr.print("'#{old_infilename}' was not found.\n")</div><div class='del'>-      return [nil,nil]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if( infilename )</div><div class='del'>-      if( infilename[0,1] == '/' )</div><div class='del'>-	outfilename = File.join(@inc_dir, infilename[1..-1] + ".rb")</div><div class='del'>-      else</div><div class='del'>-	outfilename = infilename + ".rb"</div><div class='del'>-      end</div><div class='del'>-      File.mkpath(File.dirname(outfilename))</div><div class='del'>-    else</div><div class='del'>-      outfilename = nil</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    if( infilename )</div><div class='del'>-      fin    = File.open(infilename,"r")</div><div class='del'>-    else</div><div class='del'>-      fin    = $stdin</div><div class='del'>-    end</div><div class='del'>-    if( outfilename )</div><div class='del'>-      if( File.exist?(outfilename) &amp;&amp; (!@force) )</div><div class='del'>-	$stderr.print("'#{outfilename}' have already existed.\n")</div><div class='del'>-	return [fin, nil]</div><div class='del'>-      end</div><div class='del'>-      fout   = File.open(outfilename,"w")</div><div class='del'>-    else</div><div class='del'>-      fout   = $stdout</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    $stderr.print("#{infilename} -&gt; #{outfilename}\n")</div><div class='del'>-    if( fout )</div><div class='del'>-      dir = File.dirname(outfilename)</div><div class='del'>-      if( dir[0,1] != "." &amp;&amp; dir != "" )</div><div class='del'>-	fout.print("if( ! $LOAD_PATH.include?('#{dir}') )\n",</div><div class='del'>-		   "  $LOAD_PATH.push('#{dir}')\n",</div><div class='del'>-		   "end\n")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    return [fin,fout]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parse(infilename = nil, recursive = false, force = false, conly = false)</div><div class='del'>-    @commented = false</div><div class='del'>-    @recursive = recursive</div><div class='del'>-    @force     = force</div><div class='del'>-    @conly     = conly</div><div class='del'>-    @parsed_files &lt;&lt; infilename</div><div class='del'>-</div><div class='del'>-    fin,fout = open_files(infilename)</div><div class='del'>-    if( !fin )</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      line_number = 0</div><div class='del'>-      pre_line    = nil</div><div class='del'>-      fin.each_line{|line|</div><div class='del'>-	line_number += 1</div><div class='del'>-	line.chop!</div><div class='del'>-	if( $DEBUG )</div><div class='del'>-	  $stderr.print("#{line_number}:(#{@indent}):", line, "\n")</div><div class='del'>-	end</div><div class='del'>-	</div><div class='del'>-	if( pre_line )</div><div class='del'>-	  line = pre_line + line</div><div class='del'>-	  pre_line = nil</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	if( line[-1,1] == "\\" )</div><div class='del'>-	  pre_line = line[0..-2]</div><div class='del'>-	  next</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	if( eidx = line.index("enum ") )</div><div class='del'>-	  pre_line = line[eidx .. -1]</div><div class='del'>-	  if( i = line.index("{") &amp;&amp; j = line.index("}") )</div><div class='del'>-	    line = line[0..j]</div><div class='del'>-	    pre_line = nil</div><div class='del'>-	  else</div><div class='del'>-	    next</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	line = strip_comment(line)</div><div class='del'>-	case line</div><div class='del'>-	when /^enum\s/</div><div class='del'>-	  line = parse_enum(line)</div><div class='del'>-	when /^#\s*define\s/</div><div class='del'>-	  line = parse_define(line)</div><div class='del'>-	when /^#\s*undef\s/</div><div class='del'>-	  line = parse_undef(line)</div><div class='del'>-	when /^#\s*ifdef\s/</div><div class='del'>-	  line = parse_ifdef(line)</div><div class='del'>-	  up_indent</div><div class='del'>-	when /^#\s*ifndef\s/</div><div class='del'>-	  line = parse_ifndef(line)</div><div class='del'>-	  up_indent</div><div class='del'>-	when /^#\s*if\s/</div><div class='del'>-	  line = parse_if(line)</div><div class='del'>-	  up_indent</div><div class='del'>-	when /^#\s*elif\s/</div><div class='del'>-	  down_indent</div><div class='del'>-	  line = parse_elif(line)</div><div class='del'>-	  up_indent</div><div class='del'>-	when /^#\s*else/</div><div class='del'>-	  down_indent</div><div class='del'>-	  line = parse_else(line)</div><div class='del'>-	  up_indent</div><div class='del'>-	when /^#\s*endif/</div><div class='del'>-	  down_indent</div><div class='del'>-	  line = parse_endif(line)</div><div class='del'>-	when /^#\s*include\s/</div><div class='del'>-	  line = parse_include(line)</div><div class='del'>-	else</div><div class='del'>-	  line = nil</div><div class='del'>-	end</div><div class='del'>-	if( line &amp;&amp; fout )</div><div class='del'>-	  fout.print(line, "     # #{line_number}",$/)</div><div class='del'>-	end</div><div class='del'>-      }</div><div class='del'>-    ensure</div><div class='del'>-      fin.close if fin</div><div class='del'>-      fout.close if fout</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-h2rb = H2RB.new($inc_dir, $inc_path, $insert_require)</div><div class='del'>-h2rb.parse($infilename, $recursive, $force, $conly)</div><div class='head'>diff --git a/ext/dl/handle.c b/ext/dl/handle.c<br/>deleted file mode 100644<br/>index 69d47caac0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/handle.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/handle.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,215 +0,0 @@</div><div class='del'>-/* -*- C -*-</div><div class='del'>- * $Id$</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include &lt;ruby.h&gt;</div><div class='del'>-#include "dl.h"</div><div class='del'>-</div><div class='del'>-VALUE rb_cDLHandle;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-dlhandle_free(struct dl_handle *dlhandle)</div><div class='del'>-{</div><div class='del'>-  if (dlhandle-&gt;ptr &amp;&amp; dlhandle-&gt;open &amp;&amp; dlhandle-&gt;enable_close) {</div><div class='del'>-    dlclose(dlhandle-&gt;ptr);</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlhandle_close(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct dl_handle *dlhandle;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct dl_handle, dlhandle);</div><div class='del'>-  dlhandle-&gt;open = 0;</div><div class='del'>-  return INT2NUM(dlclose(dlhandle-&gt;ptr));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlhandle_s_allocate(VALUE klass)</div><div class='del'>-{</div><div class='del'>-  VALUE obj;</div><div class='del'>-  struct dl_handle *dlhandle;</div><div class='del'>-</div><div class='del'>-  obj = Data_Make_Struct(rb_cDLHandle, struct dl_handle, 0,</div><div class='del'>-			 dlhandle_free, dlhandle);</div><div class='del'>-  dlhandle-&gt;ptr  = 0;</div><div class='del'>-  dlhandle-&gt;open = 0;</div><div class='del'>-  dlhandle-&gt;enable_close = 0;</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'>-rb_dlhandle_initialize(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  void *ptr;</div><div class='del'>-  struct dl_handle *dlhandle;</div><div class='del'>-  VALUE lib, flag;</div><div class='del'>-  char  *clib;</div><div class='del'>-  int   cflag;</div><div class='del'>-  const char *err;</div><div class='del'>-</div><div class='del'>-  switch (rb_scan_args(argc, argv, "11", &amp;lib, &amp;flag)) {</div><div class='del'>-  case 1:</div><div class='del'>-    clib = NIL_P(lib) ? NULL : StringValuePtr(lib);</div><div class='del'>-    cflag = RTLD_LAZY | RTLD_GLOBAL;</div><div class='del'>-    break;</div><div class='del'>-  case 2:</div><div class='del'>-    clib = NIL_P(lib) ? NULL : StringValuePtr(lib);</div><div class='del'>-    cflag = NUM2INT(flag);</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    rb_bug("rb_dlhandle_new");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  ptr = dlopen(clib, cflag);</div><div class='del'>-#if defined(HAVE_DLERROR)</div><div class='del'>-  if (!ptr &amp;&amp; (err = dlerror())) {</div><div class='del'>-    rb_raise(rb_eRuntimeError, "%s", err);</div><div class='del'>-  }</div><div class='del'>-#else</div><div class='del'>-  if (!ptr) {</div><div class='del'>-    err = dlerror();</div><div class='del'>-    rb_raise(rb_eRuntimeError, "%s", err);</div><div class='del'>-  }</div><div class='del'>-#endif</div><div class='del'>-  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='del'>-    dlclose(dlhandle-&gt;ptr);</div><div class='del'>-  }</div><div class='del'>-  dlhandle-&gt;ptr = ptr;</div><div class='del'>-  dlhandle-&gt;open = 1;</div><div class='del'>-  dlhandle-&gt;enable_close = 0;</div><div class='del'>-</div><div class='del'>-  if (rb_block_given_p()) {</div><div class='del'>-    rb_ensure(rb_yield, self, rb_dlhandle_close, self);</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'>-VALUE</div><div class='del'>-rb_dlhandle_enable_close(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct dl_handle *dlhandle;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct dl_handle, dlhandle);</div><div class='del'>-  dlhandle-&gt;enable_close = 1;</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlhandle_disable_close(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct dl_handle *dlhandle;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct dl_handle, dlhandle);</div><div class='del'>-  dlhandle-&gt;enable_close = 0;</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlhandle_to_i(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct dl_handle *dlhandle;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct dl_handle, dlhandle);</div><div class='del'>-  return DLLONG2NUM(dlhandle);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlhandle_to_ptr(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct dl_handle *dlhandle;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct dl_handle, dlhandle);</div><div class='del'>-  return rb_dlptr_new(dlhandle, sizeof(dlhandle), 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlhandle_sym(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE sym, type;</div><div class='del'>-  void (*func)();</div><div class='del'>-  VALUE val;</div><div class='del'>-  struct dl_handle *dlhandle;</div><div class='del'>-  void *handle;</div><div class='del'>-  const char *name, *stype;</div><div class='del'>-  const char *err;</div><div class='del'>-</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='del'>-    stype = StringValuePtr(type);</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    stype = NULL;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (sym == Qnil) {</div><div class='del'>-#if defined(RTLD_NEXT)</div><div class='del'>-    name = RTLD_NEXT;</div><div class='del'>-#else</div><div class='del'>-    name = NULL;</div><div class='del'>-#endif</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    SafeStringValue(sym);</div><div class='del'>-    name = StringValuePtr(sym);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  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='del'>-  }</div><div class='del'>-  handle = dlhandle-&gt;ptr;</div><div class='del'>-</div><div class='del'>-  func = dlsym(handle, name);</div><div class='del'>-#if defined(HAVE_DLERROR)</div><div class='del'>-  if (!func &amp;&amp; (err = dlerror()))</div><div class='del'>-#else</div><div class='del'>-  if (!func)</div><div class='del'>-#endif</div><div class='del'>-  {</div><div class='del'>-#if defined(__CYGWIN__) || defined(WIN32) || defined(__MINGW32__)</div><div class='del'>-    {</div><div class='del'>-      int  len = strlen(name);</div><div class='del'>-      char *name_a = (char*)dlmalloc(len+2);</div><div class='del'>-      strcpy(name_a, name);</div><div class='del'>-      name_a[len]   = 'A';</div><div class='del'>-      name_a[len+1] = '\0';</div><div class='del'>-      func = dlsym(handle, name_a);</div><div class='del'>-      dlfree(name_a);</div><div class='del'>-#if defined(HAVE_DLERROR)</div><div class='del'>-      if (!func &amp;&amp; (err = dlerror()))</div><div class='del'>-#else</div><div class='del'>-      if (!func)</div><div class='del'>-#endif</div><div class='del'>-      {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "unknown symbol \"%sA\"", name);</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    rb_raise(rb_eRuntimeError, "unknown symbol \"%s\"", name);</div><div class='del'>-#endif</div><div class='del'>-  }</div><div class='del'>-  val = rb_dlsym_new(func, name, stype);</div><div class='del'>-</div><div class='del'>-  return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_dlhandle()</div><div class='del'>-{</div><div class='del'>-  rb_cDLHandle = rb_define_class_under(rb_mDL, "Handle", rb_cObject);</div><div class='del'>-  rb_define_alloc_func(rb_cDLHandle, rb_dlhandle_s_allocate);</div><div class='del'>-  rb_define_method(rb_cDLHandle, "initialize", rb_dlhandle_initialize, -1);</div><div class='del'>-  rb_define_method(rb_cDLHandle, "to_i", rb_dlhandle_to_i, 0);</div><div class='del'>-  rb_define_method(rb_cDLHandle, "to_ptr", rb_dlhandle_to_ptr, 0);</div><div class='del'>-  rb_define_method(rb_cDLHandle, "close", rb_dlhandle_close, 0);</div><div class='del'>-  rb_define_method(rb_cDLHandle, "sym",  rb_dlhandle_sym, -1);</div><div class='del'>-  rb_define_method(rb_cDLHandle, "[]",  rb_dlhandle_sym, -1);</div><div class='del'>-  rb_define_method(rb_cDLHandle, "disable_close", rb_dlhandle_disable_close, 0);</div><div class='del'>-  rb_define_method(rb_cDLHandle, "enable_close", rb_dlhandle_enable_close, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/install.rb b/ext/dl/install.rb<br/>deleted file mode 100644<br/>index 69b1834301..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/install.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/install.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,49 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-require 'ftools'</div><div class='del'>-</div><div class='del'>-SO_LIBS = ["dl.so"]</div><div class='del'>-</div><div class='del'>-$ruby_version = CONFIG['MAJOR'] + "." + CONFIG['MINOR']</div><div class='del'>-$prefix = CONFIG['prefix']</div><div class='del'>-$libdir = File.join($prefix,'lib')</div><div class='del'>-$rubylibdir = File.join($libdir, 'ruby', $ruby_version)</div><div class='del'>-$arch = CONFIG['arch']</div><div class='del'>-$archdir = File.join($rubylibdir, $arch)</div><div class='del'>-</div><div class='del'>-def find(dir, match = /./)</div><div class='del'>-  Dir.chdir(dir)</div><div class='del'>-  files = []</div><div class='del'>-  Dir.new(".").each{|file|</div><div class='del'>-    if( file != "." &amp;&amp; file != ".." )</div><div class='del'>-      case File.ftype(file)</div><div class='del'>-      when "file"</div><div class='del'>-	if( file =~ match )</div><div class='del'>-	  files.push(File.join(dir,file))</div><div class='del'>-	end</div><div class='del'>-      when "directory"</div><div class='del'>-	files += find(file, match).collect{|f| File.join(dir,f)}</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-  Dir.chdir("..")</div><div class='del'>-  return files</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def install()</div><div class='del'>-  rb_files = find(File.join(".","lib"), /.rb$/)</div><div class='del'>-</div><div class='del'>-  SO_LIBS.each{|f|</div><div class='del'>-    File.makedirs($rubylibdir, "#{$archdir}")</div><div class='del'>-    File.install(f, File.join($archdir,f), 0555, true)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  rb_files.each{|f|</div><div class='del'>-    origfile = f</div><div class='del'>-    instfile = File.join($rubylibdir, origfile.sub("./lib/",""))</div><div class='del'>-    instdir  = File.dirname(instfile)</div><div class='del'>-    File.makedirs(instdir)</div><div class='del'>-    File.install(origfile, instfile, 0644, true)</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-install()</div><div class='head'>diff --git a/ext/dl/lib/dl/import.rb b/ext/dl/lib/dl/import.rb<br/>deleted file mode 100644<br/>index 01ee2490e8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/lib/dl/import.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/lib/dl/import.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,225 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-require 'dl/types'</div><div class='del'>-</div><div class='del'>-module DL</div><div class='del'>-  module Importable</div><div class='del'>-    LIB_MAP = {}</div><div class='del'>-</div><div class='del'>-    module Internal</div><div class='del'>-      def init_types()</div><div class='del'>-	@types ||= ::DL::Types.new</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def init_sym()</div><div class='del'>-	@SYM ||= {}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def [](name)</div><div class='del'>-	return @SYM[name.to_s][0]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def dlload(*libnames)</div><div class='del'>-	if( !defined?(@LIBS) )</div><div class='del'>-	  @LIBS = []</div><div class='del'>-	end</div><div class='del'>-	libnames.each{|libname|</div><div class='del'>-	  if( !LIB_MAP[libname] )</div><div class='del'>-	    LIB_MAP[libname] = DL.dlopen(libname)</div><div class='del'>-	  end</div><div class='del'>-	  @LIBS.push(LIB_MAP[libname])</div><div class='del'>-	}</div><div class='del'>-      end</div><div class='del'>-      alias dllink :dlload</div><div class='del'>-</div><div class='del'>-      def parse_cproto(proto)</div><div class='del'>-	proto = proto.gsub(/\s+/, " ").strip</div><div class='del'>-	case proto</div><div class='del'>-	when /^([\d\w\*_\s]+)\(([\d\w\*_\s\,\[\]]*)\)$/</div><div class='del'>-	  ret = $1</div><div class='del'>-	  args = $2.strip()</div><div class='del'>-	  ret = ret.split(/\s+/)</div><div class='del'>-	  args = args.split(/\s*,\s*/)</div><div class='del'>-	  func = ret.pop()</div><div class='del'>-	  if( func =~ /^\*/ )</div><div class='del'>-	    func.gsub!(/^\*+/,"")</div><div class='del'>-	    ret.push("*")</div><div class='del'>-	  end</div><div class='del'>-	  ret  = ret.join(" ")</div><div class='del'>-	  return [func, ret, args]</div><div class='del'>-	else</div><div class='del'>-	  raise(RuntimeError,"can't parse the function prototype: #{proto}")</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # example:</div><div class='del'>-      #   extern "int strlen(char*)"</div><div class='del'>-      #</div><div class='del'>-      def extern(proto)</div><div class='del'>-	func,ret,args = parse_cproto(proto)</div><div class='del'>-	return import(func, ret, args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # example:</div><div class='del'>-      #   callback "int method_name(int, char*)"</div><div class='del'>-      #</div><div class='del'>-      def callback(proto)</div><div class='del'>-	func,ret,args = parse_cproto(proto)</div><div class='del'>-</div><div class='del'>-	init_types()</div><div class='del'>-	init_sym()</div><div class='del'>-</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='del'>-	symty = rty + ty</div><div class='del'>-</div><div class='del'>-	module_eval("module_function :#{func}")</div><div class='del'>-	sym = module_eval([</div><div class='del'>-	  "DL::callback(\"#{symty}\"){|*args|",</div><div class='del'>-	  "  sym,rdec,enc,dec  = @SYM['#{func}']",</div><div class='del'>-	  "  args = enc.call(args) if enc",</div><div class='del'>-	  "  r,rs = #{func}(*args)",</div><div class='del'>-	  "  r  = renc.call(r) if rdec",</div><div class='del'>-	  "  rs = dec.call(rs) if (dec &amp;&amp; rs)",</div><div class='del'>-	  "  @retval = r",</div><div class='del'>-	  "  @args   = rs",</div><div class='del'>-	  "  r",</div><div class='del'>-	  "}",</div><div class='del'>-	].join("\n"))</div><div class='del'>-</div><div class='del'>-	@SYM[func] = [sym,rdec,enc,dec]</div><div class='del'>-</div><div class='del'>-	return sym</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # example:</div><div class='del'>-      #  typealias("uint", "unsigned int")</div><div class='del'>-      #</div><div class='del'>-      def typealias(alias_type, ty1, enc1=nil, dec1=nil, ty2=nil, enc2=nil, dec2=nil)</div><div class='del'>-	init_types()</div><div class='del'>-	@types.typealias(alias_type, ty1, enc1, dec1,</div><div class='del'>-                                     ty2||ty1, enc2, dec2)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # example:</div><div class='del'>-      #  symbol "foo_value"</div><div class='del'>-      #  symbol "foo_func", "IIP"</div><div class='del'>-      #</div><div class='del'>-      def symbol(name, ty = nil)</div><div class='del'>-	sym = nil</div><div class='del'>-	@LIBS.each{|lib|</div><div class='del'>-	  begin</div><div class='del'>-	    if( ty )</div><div class='del'>-	      sym = lib[name, ty]</div><div class='del'>-	    else</div><div class='del'>-	      sym = lib[name]</div><div class='del'>-	    end</div><div class='del'>-	  rescue</div><div class='del'>-	    next</div><div class='del'>-	  end</div><div class='del'>-	}</div><div class='del'>-	if( !sym )</div><div class='del'>-	  raise(RuntimeError, "can't find the symbol `#{name}'")</div><div class='del'>-	end</div><div class='del'>-	return sym</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # example:</div><div class='del'>-      #   import("get_length", "int", ["void*", "int"])</div><div class='del'>-      #</div><div class='del'>-      def import(name, rettype, argtypes = nil)</div><div class='del'>-	init_types()</div><div class='del'>-	init_sym()</div><div class='del'>-</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='del'>-	symty = rty + ty</div><div class='del'>-</div><div class='del'>-	sym = symbol(name, symty)</div><div class='del'>-</div><div class='del'>-	mname = name.dup</div><div class='del'>-	if( ?A &lt;= mname[0] &amp;&amp; mname[0] &lt;= ?Z )</div><div class='del'>-	  mname[0,1] = mname[0,1].downcase</div><div class='del'>-	end</div><div class='del'>-	@SYM[mname] = [sym,rdec,enc,dec]</div><div class='del'>-	</div><div class='del'>-	module_eval [</div><div class='del'>-	  "def #{mname}(*args)",</div><div class='del'>-	  "  sym,rdec,enc,dec  = @SYM['#{mname}']",</div><div class='del'>-	  "  args = enc.call(args) if enc",</div><div class='del'>-	  if( $DEBUG )</div><div class='del'>-	    "  p \"[DL] call #{mname} with \#{args.inspect}\""</div><div class='del'>-	  else</div><div class='del'>-	    ""</div><div class='del'>-	  end,</div><div class='del'>-	  "  r,rs = sym.call(*args)",</div><div class='del'>-	  if( $DEBUG )</div><div class='del'>-	    "  p \"[DL] retval=\#{r.inspect} args=\#{rs.inspect}\""</div><div class='del'>-	  else</div><div class='del'>-	    ""</div><div class='del'>-	  end,</div><div class='del'>-	  "  r  = rdec.call(r) if rdec",</div><div class='del'>-	  "  rs = dec.call(rs) if dec",</div><div class='del'>-	  "  @retval = r",</div><div class='del'>-	  "  @args   = rs",</div><div class='del'>-	  "  return r",</div><div class='del'>-	  "end",</div><div class='del'>-	  "module_function :#{mname}",</div><div class='del'>-	].join("\n")</div><div class='del'>-</div><div class='del'>-	return sym</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def _args_</div><div class='del'>-	return @args</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def _retval_</div><div class='del'>-	return @retval</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encode_argument_types(tys)</div><div class='del'>-	init_types()</div><div class='del'>-	encty = []</div><div class='del'>-	enc = nil</div><div class='del'>-	dec = nil</div><div class='del'>-	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='del'>-	  encty.push(ty)</div><div class='del'>-	  if( enc )</div><div class='del'>-	    if( c1 )</div><div class='del'>-	      conv1 = enc</div><div class='del'>-	      enc = proc{|v| v = conv1.call(v); v[idx] = c1.call(v[idx]); v}</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    if( c1 )</div><div class='del'>-	      enc = proc{|v| v[idx] = c1.call(v[idx]); v}</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	  if( dec )</div><div class='del'>-	    if( c2 )</div><div class='del'>-	      conv2 = dec</div><div class='del'>-	      dec = proc{|v| v = conv2.call(v); v[idx] = c2.call(v[idx]); v}</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    if( c2 )</div><div class='del'>-	      dec = proc{|v| v[idx] = c2.call(v[idx]); v}</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	}</div><div class='del'>-	return [encty.join, enc, dec]</div><div class='del'>-      end</div><div class='del'>-    end # end of Internal</div><div class='del'>-    include Internal</div><div class='del'>-  end # end of Importable</div><div class='del'>-end</div><div class='head'>diff --git a/ext/dl/lib/dl/struct.rb b/ext/dl/lib/dl/struct.rb<br/>deleted file mode 100644<br/>index 33f303fe22..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/lib/dl/struct.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/lib/dl/struct.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,149 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-require 'dl/import'</div><div class='del'>-</div><div class='del'>-module DL</div><div class='del'>-  module Importable</div><div class='del'>-    module Internal</div><div class='del'>-      def define_struct(contents)</div><div class='del'>-	init_types()</div><div class='del'>-	Struct.new(@types, contents)</div><div class='del'>-      end</div><div class='del'>-      alias struct define_struct</div><div class='del'>-</div><div class='del'>-      def define_union(contents)</div><div class='del'>-	init_types()</div><div class='del'>-	Union.new(@types, contents)</div><div class='del'>-      end</div><div class='del'>-      alias union define_union</div><div class='del'>-</div><div class='del'>-      class Memory</div><div class='del'>-	def initialize(ptr, names, ty, len, enc, dec)</div><div class='del'>-	  @ptr = ptr</div><div class='del'>-	  @names = names</div><div class='del'>-	  @ty    = ty</div><div class='del'>-	  @len   = len</div><div class='del'>-	  @enc   = enc</div><div class='del'>-	  @dec   = dec</div><div class='del'>-</div><div class='del'>-	  # define methods</div><div class='del'>-	  @names.each{|name|</div><div class='del'>-	    instance_eval [</div><div class='del'>-	      "def #{name}",</div><div class='del'>-	      "  v = @ptr[\"#{name}\"]",</div><div class='del'>-	      "  if( @len[\"#{name}\"] )",</div><div class='del'>-	      "    v = v.collect{|x| @dec[\"#{name}\"] ? @dec[\"#{name}\"].call(x) : x }",</div><div class='del'>-              "  else",</div><div class='del'>-	      "    v = @dec[\"#{name}\"].call(v) if @dec[\"#{name}\"]",</div><div class='del'>-	      "  end",</div><div class='del'>-	      "  return v",</div><div class='del'>-	      "end",</div><div class='del'>-	      "def #{name}=(v)",</div><div class='del'>-	      "  if( @len[\"#{name}\"] )",</div><div class='del'>-	      "    v = v.collect{|x| @enc[\"#{name}\"] ? @enc[\"#{name}\"].call(x) : x }",</div><div class='del'>-	      "  else",</div><div class='del'>-	      "    v = @enc[\"#{name}\"].call(v) if @enc[\"#{name}\"]",</div><div class='del'>-              "  end",</div><div class='del'>-	      "  @ptr[\"#{name}\"] = v",</div><div class='del'>-	      "  return v",</div><div class='del'>-	      "end",</div><div class='del'>-	    ].join("\n")</div><div class='del'>-	  }</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	def to_ptr</div><div class='del'>-	  return @ptr</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	def size</div><div class='del'>-	  return @ptr.size</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Struct</div><div class='del'>-	def initialize(types, contents)</div><div class='del'>-	  @names = []</div><div class='del'>-	  @ty   = {}</div><div class='del'>-	  @len  = {}</div><div class='del'>-	  @enc  = {}</div><div class='del'>-	  @dec  = {}</div><div class='del'>-	  @size = 0</div><div class='del'>-	  @tys  = ""</div><div class='del'>-	  @types = types</div><div class='del'>-	  parse(contents)</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	def size</div><div class='del'>-	  return @size</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	def members</div><div class='del'>-	  return @names</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	# ptr must be a PtrData object.</div><div class='del'>-	def new(ptr)</div><div class='del'>-	  ptr.struct!(@tys, *@names)</div><div class='del'>-	  mem = Memory.new(ptr, @names, @ty, @len, @enc, @dec)</div><div class='del'>-	  return mem</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	def malloc(size = nil)</div><div class='del'>-	  if( !size )</div><div class='del'>-	    size = @size</div><div class='del'>-	  end</div><div class='del'>-	  ptr = DL::malloc(size)</div><div class='del'>-	  return new(ptr)</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	def parse(contents)</div><div class='del'>-	  contents.each{|elem|</div><div class='del'>-	    name,ty,num,enc,dec = parse_elem(elem)</div><div class='del'>-	    @names.push(name)</div><div class='del'>-	    @ty[name]  = ty</div><div class='del'>-	    @len[name] = num</div><div class='del'>-	    @enc[name] = enc</div><div class='del'>-	    @dec[name] = dec</div><div class='del'>-	    if( num )</div><div class='del'>-	      @tys += "#{ty}#{num}"</div><div class='del'>-	    else</div><div class='del'>-	      @tys += ty</div><div class='del'>-	    end</div><div class='del'>-	  }</div><div class='del'>-	  @size = DL.sizeof(@tys)</div><div class='del'>-	end</div><div class='del'>-	</div><div class='del'>-	def parse_elem(elem)</div><div class='del'>-	  elem.strip!</div><div class='del'>-	  case elem</div><div class='del'>-	  when /^([\w\d_\*]+)([\*\s]+)([\w\d_]+)$/</div><div class='del'>-	    ty = ($1 + $2).strip</div><div class='del'>-	    name = $3</div><div class='del'>-	    num = nil;</div><div class='del'>-	  when /^([\w\d_\*]+)([\*\s]+)([\w\d_]+)\[(\d+)\]$/</div><div class='del'>-	    ty = ($1 + $2).strip</div><div class='del'>-	    name = $3</div><div class='del'>-	    num = $4.to_i</div><div class='del'>-	  else</div><div class='del'>-	    raise(RuntimeError, "invalid element: #{elem}")</div><div class='del'>-	  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='del'>-	  return [name,ty,num,enc,dec]</div><div class='del'>-	end</div><div class='del'>-      end  # class Struct</div><div class='del'>-      </div><div class='del'>-      class Union &lt; Struct</div><div class='del'>-	def new</div><div class='del'>-	  ptr = DL::malloc(@size)</div><div class='del'>-	  ptr.union!(@tys, *@names)</div><div class='del'>-	  mem = Memory.new(ptr, @names, @ty, @len, @enc, @dec)</div><div class='del'>-	  return mem</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end  # module Internal</div><div class='del'>-  end  # module Importable</div><div class='del'>-end  # module DL</div><div class='head'>diff --git a/ext/dl/lib/dl/types.rb b/ext/dl/lib/dl/types.rb<br/>deleted file mode 100644<br/>index 1144917dae..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/lib/dl/types.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/lib/dl/types.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,245 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-</div><div class='del'>-module DL</div><div class='del'>-  class Types</div><div class='del'>-    TYPES = [</div><div class='del'>-      # 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='del'>-      </div><div class='del'>-      # 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='del'>-      </div><div class='del'>-      # 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='del'>-</div><div class='del'>-      # DL::Importable primitive types</div><div class='del'>-      ["ibool",</div><div class='del'>-        "I",</div><div class='del'>-	proc{|v| v ? 1 : 0},</div><div class='del'>-	proc{|v| (v != 0) ? true : false},</div><div class='del'>-        "I",</div><div class='del'>-	proc{|v| v ? 1 : 0 },</div><div class='del'>-	proc{|v| (v != 0) ? true : false} ],</div><div class='del'>-      ["cbool",</div><div class='del'>-        "C",</div><div class='del'>-	proc{|v| v ? 1 : 0},</div><div class='del'>-	proc{|v| (v != 0) ? true : false},</div><div class='del'>-        "C",</div><div class='del'>-	proc{|v,len| v ? 1 : 0},</div><div class='del'>-	proc{|v,len| (v != 0) ? true : false}],</div><div class='del'>-      ["lbool",</div><div class='del'>-        "L",</div><div class='del'>-	proc{|v| v ? 1 : 0},</div><div class='del'>-	proc{|v| (v != 0) ? true : false},</div><div class='del'>-        "L",</div><div class='del'>-	proc{|v,len| v ? 1 : 0},</div><div class='del'>-	proc{|v,len| (v != 0) ? true : false}],</div><div class='del'>-      ["unsigned char",</div><div class='del'>-        "C",</div><div class='del'>-	proc{|v| [v].pack("C").unpack("c")[0]},</div><div class='del'>-	proc{|v| [v].pack("c").unpack("C")[0]},</div><div class='del'>-        "C",</div><div class='del'>-	proc{|v| [v].pack("C").unpack("c")[0]},</div><div class='del'>-	proc{|v| [v].pack("c").unpack("C")[0]}],</div><div class='del'>-      ["unsigned short",</div><div class='del'>-        "H",</div><div class='del'>-	proc{|v| [v].pack("S").unpack("s")[0]},</div><div class='del'>-	proc{|v| [v].pack("s").unpack("S")[0]},</div><div class='del'>-        "H",</div><div class='del'>-	proc{|v| [v].pack("S").unpack("s")[0]},</div><div class='del'>-	proc{|v| [v].pack("s").unpack("S")[0]}],</div><div class='del'>-      ["unsigned int",</div><div class='del'>-        "I",</div><div class='del'>-	proc{|v| [v].pack("I").unpack("i")[0]},</div><div class='del'>-	proc{|v| [v].pack("i").unpack("I")[0]},</div><div class='del'>-        "I",</div><div class='del'>-	proc{|v| [v].pack("I").unpack("i")[0]},</div><div class='del'>-	proc{|v| [v].pack("i").unpack("I")[0]}],</div><div class='del'>-      ["unsigned long",</div><div class='del'>-        "L",</div><div class='del'>-	proc{|v| [v].pack("L").unpack("l")[0]},</div><div class='del'>-	proc{|v| [v].pack("l").unpack("L")[0]},</div><div class='del'>-        "L",</div><div class='del'>-	proc{|v| [v].pack("L").unpack("l")[0]},</div><div class='del'>-	proc{|v| [v].pack("l").unpack("L")[0]}],</div><div class='del'>-      ["unsigned char ref",</div><div class='del'>-        "c",</div><div class='del'>-	proc{|v| [v].pack("C").unpack("c")[0]},</div><div class='del'>-	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='del'>-	proc{|v| [v].pack("I").unpack("i")[0]},</div><div class='del'>-	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='del'>-	proc{|v| [v].pack("L").unpack("l")[0]},</div><div class='del'>-	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='del'>-    ]</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      init_types()</div><div class='del'>-    end</div><div class='del'>-</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='del'>-    end</div><div class='del'>-</div><div class='del'>-    def init_types</div><div class='del'>-      @TYDEFS = TYPES.dup</div><div class='del'>-    end</div><div class='del'>-</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='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    if( enc )</div><div class='del'>-	      proc_encode = enc</div><div class='del'>-	    end</div><div class='del'>-	  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='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    if( dec )</div><div class='del'>-	      proc_decode = dec</div><div class='del'>-	    end</div><div class='del'>-	  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='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    if( enc )</div><div class='del'>-	      proc_encode = enc</div><div class='del'>-	    end</div><div class='del'>-	  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='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    if( dec )</div><div class='del'>-	      proc_decode = dec</div><div class='del'>-	    end</div><div class='del'>-	  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'>-  end # end of Types</div><div class='del'>-end</div><div class='head'>diff --git a/ext/dl/lib/dl/win32.rb b/ext/dl/lib/dl/win32.rb<br/>deleted file mode 100644<br/>index 0fed47c324..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/lib/dl/win32.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/lib/dl/win32.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-</div><div class='del'>-class Win32API</div><div class='del'>-  DLL = {}</div><div class='del'>-</div><div class='del'>-  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='del'>-    handle = DLL[dllname] ||= DL::Handle.new(dllname)</div><div class='del'>-    @sym = handle.sym(func, prototype)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def call(*args)</div><div class='del'>-    import = @sym.proto.split("", 2)[1]</div><div class='del'>-    args.each_with_index do |x, i|</div><div class='del'>-      args[i] = nil if x == 0 and import[i] == ?S</div><div class='del'>-      args[i], = [x].pack("I").unpack("i") if import[i] == ?I</div><div class='del'>-    end</div><div class='del'>-    ret, = @sym.call(*args)</div><div class='del'>-    return ret || 0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias Call call</div><div class='del'>-end</div><div class='head'>diff --git a/ext/dl/mkcall.rb b/ext/dl/mkcall.rb<br/>deleted file mode 100644<br/>index 6a85570152..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/mkcall.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/mkcall.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-$:.unshift File.dirname(__FILE__)</div><div class='del'>-require 'type'</div><div class='del'>-require 'dlconfig'</div><div class='del'>-</div><div class='del'>-def output_arg(x,i)</div><div class='del'>-  "args[#{i}].#{DLTYPE[x][:stmem]}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def output_args(types)</div><div class='del'>-  t = []</div><div class='del'>-  types[1..-1].each_with_index{|x,i| t.push(output_arg(x,i))}</div><div class='del'>-  t.join(",")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def output_callfunc(types)</div><div class='del'>-  t = types[0]</div><div class='del'>-  stmem = DLTYPE[t][:stmem]</div><div class='del'>-  ctypes = types2ctypes(types)</div><div class='del'>-  if( t == VOID )</div><div class='del'>-    callstm = "(*f)(#{output_args(types)})"</div><div class='del'>-  else</div><div class='del'>-    callstm = "ret.#{stmem} = (*f)(#{output_args(types)})"</div><div class='del'>-  end</div><div class='del'>-  [ "{",</div><div class='del'>-    "#{ctypes[0]} (*f)(#{ctypes[1..-1].join(',')}) = func;",</div><div class='del'>-    "#{callstm};",</div><div class='del'>-    "}"].join(" ")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def output_case(types)</div><div class='del'>-  num = types2num(types)</div><div class='del'>-  callfunc_stm = output_callfunc(types)</div><div class='del'>-&lt;&lt;EOF</div><div class='del'>-  case #{num}:</div><div class='del'>-#ifdef DEBUG</div><div class='del'>-    printf("#{callfunc_stm}\\n");</div><div class='del'>-#endif</div><div class='del'>-    #{callfunc_stm};</div><div class='del'>-    break;</div><div class='del'>-EOF</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def rec_output(types = [VOID])</div><div class='del'>-  print output_case(types)</div><div class='del'>-  if( types.length &lt;= MAX_ARG )</div><div class='del'>-    DLTYPE.keys.sort.each{|t|</div><div class='del'>-      if( t != VOID &amp;&amp; DLTYPE[t][:sym] )</div><div class='del'>-	rec_output(types + [t])</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'>-DLTYPE.keys.sort.each{|t|</div><div class='del'>-  if( DLTYPE[t][:sym] )</div><div class='del'>-    $stderr.printf("  #{DLTYPE[t][:ctype]}\n")</div><div class='del'>-    rec_output([t])</div><div class='del'>-  end</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/mkcallback.rb b/ext/dl/mkcallback.rb<br/>deleted file mode 100644<br/>index c9f92e4a0d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/mkcallback.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/mkcallback.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-$:.unshift File.dirname(__FILE__)</div><div class='del'>-require 'type'</div><div class='del'>-require 'dlconfig'</div><div class='del'>-</div><div class='del'>-def mkfunc(rettype, fnum, argc)</div><div class='del'>-  args = (0..(argc-1)).collect{|i| "long arg#{i}"}.join(", ")</div><div class='del'>-</div><div class='del'>-  subst_code = (0..(argc-1)).collect{|i|</div><div class='del'>-    "  buff[#{i.to_s}] = arg#{i.to_s};"</div><div class='del'>-  }.join("\n")</div><div class='del'>-</div><div class='del'>-  ret_code =</div><div class='del'>-    if( DLTYPE[rettype][:c2rb] )</div><div class='del'>-      "  return #{DLTYPE[rettype][:rb2c]['retval']};"</div><div class='del'>-    else</div><div class='del'>-      "  /* no return value */"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  code = [</div><div class='del'>-    "static #{DLTYPE[rettype][:ctype]}",</div><div class='del'>-    "rb_dl_callback_func_#{rettype.to_s}_#{fnum.to_s}(#{args})",</div><div class='del'>-    "{",</div><div class='del'>-    "  VALUE retval, proto, proc, obj;",</div><div class='del'>-    "  VALUE argv[#{argc.to_s}];",</div><div class='del'>-    "  int  argc;",</div><div class='del'>-    "  long buff[#{argc.to_s}];",</div><div class='del'>-    "",</div><div class='del'>-    subst_code,</div><div class='del'>-    "",</div><div class='del'>-    "  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='del'>-    "  proto = rb_ary_entry(obj, 0);",</div><div class='del'>-    "  proc  = rb_ary_entry(obj, 1);",</div><div class='del'>-    "  Check_Type(proto, T_STRING);",</div><div class='del'>-    "  if( RSTRING(proto)-&gt;len &gt;= #{argc.to_s} )",</div><div class='del'>-    "    rb_raise(rb_eArgError, \"too many arguments\");",</div><div class='del'>-    "  rb_dl_scan_callback_args(buff, RSTRING(proto)-&gt;ptr, &amp;argc, argv);",</div><div class='del'>-    "  retval = rb_funcall2(proc, id_call, argc, argv);",</div><div class='del'>-    "",</div><div class='del'>-    ret_code,</div><div class='del'>-    "}",</div><div class='del'>-  ].join("\n")</div><div class='del'>-</div><div class='del'>-  return code</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-DLTYPE.keys.sort.each{|t|</div><div class='del'>-  for n in 0..(MAX_CALLBACK - 1)</div><div class='del'>-    print(mkfunc(t, n, 15), "\n\n")</div><div class='del'>-  end</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/mkcbtable.rb b/ext/dl/mkcbtable.rb<br/>deleted file mode 100644<br/>index 165c4bdc88..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/mkcbtable.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/mkcbtable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-$:.unshift File.dirname(__FILE__)</div><div class='del'>-require 'type'</div><div class='del'>-require 'dlconfig'</div><div class='del'>-</div><div class='del'>-def mktable(rettype, fnum, argc)</div><div class='del'>-  code =</div><div class='del'>-    "rb_dl_callback_table[#{rettype}][#{fnum}] = &amp;rb_dl_callback_func_#{rettype.to_s}_#{fnum};"</div><div class='del'>-  return code</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-DLTYPE.keys.sort.each{|t|</div><div class='del'>-  for n in 0..(MAX_CALLBACK - 1)</div><div class='del'>-    print(mktable(t, n, 15), "\n")</div><div class='del'>-  end</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/ptr.c b/ext/dl/ptr.c<br/>deleted file mode 100644<br/>index 01eb31da20..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/ptr.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/ptr.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1058 +0,0 @@</div><div class='del'>-/* -*- C -*-</div><div class='del'>- * $Id$</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include &lt;ruby.h&gt;</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-#include "st.h"</div><div class='del'>-#include "dl.h"</div><div class='del'>-</div><div class='del'>-VALUE rb_cDLPtrData;</div><div class='del'>-VALUE rb_mDLMemorySpace;</div><div class='del'>-static st_table* st_memory_table;</div><div class='del'>-</div><div class='del'>-#ifndef T_SYMBOL</div><div class='del'>-# define T_SYMBOL T_FIXNUM</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_dlmem_delete(void *ptr)</div><div class='del'>-{</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  st_delete(st_memory_table, (st_data_t*)&amp;ptr, NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_dlmem_aset(void *ptr, VALUE obj)</div><div class='del'>-{</div><div class='del'>-  if (obj == Qnil) {</div><div class='del'>-    rb_dlmem_delete(ptr);</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    st_insert(st_memory_table, (st_data_t)ptr, (st_data_t)obj);</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dlmem_aref(void *ptr)</div><div class='del'>-{</div><div class='del'>-  VALUE val;</div><div class='del'>-</div><div class='del'>-  if(!st_lookup(st_memory_table, (st_data_t)ptr, &amp;val)) return Qnil;</div><div class='del'>-  return val == Qundef ? Qnil : val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-dlptr_free(struct ptr_data *data)</div><div class='del'>-{</div><div class='del'>-  if (data-&gt;ptr) {</div><div class='del'>-    DEBUG_CODE({</div><div class='del'>-      printf("dlptr_free(): removing the pointer `0x%x' from the MemorySpace\n",</div><div class='del'>-	     data-&gt;ptr);</div><div class='del'>-    });</div><div class='del'>-    rb_dlmem_delete(data-&gt;ptr);</div><div class='del'>-    if (data-&gt;free) {</div><div class='del'>-      DEBUG_CODE({</div><div class='del'>-	printf("dlptr_free(): 0x%x(data-&gt;ptr:0x%x)\n",data-&gt;free,data-&gt;ptr);</div><div class='del'>-      });</div><div class='del'>-      (*(data-&gt;free))(data-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-  }</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='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-dlptr_init(VALUE val)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(val, struct ptr_data, data);</div><div class='del'>-  DEBUG_CODE({</div><div class='del'>-    printf("dlptr_init(): add the pointer `0x%x' to the MemorySpace\n",</div><div class='del'>-	   data-&gt;ptr);</div><div class='del'>-  });</div><div class='del'>-  rb_dlmem_aset(data-&gt;ptr, val);</div><div class='del'>-  OBJ_TAINT(val);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_new2(VALUE klass, void *ptr, long size, freefunc_t func)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  VALUE val;</div><div class='del'>-</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  if (ptr) {</div><div class='del'>-    val = rb_dlmem_aref(ptr);</div><div class='del'>-    if (val == Qnil) {</div><div class='del'>-      val = Data_Make_Struct(klass, struct ptr_data,</div><div class='del'>-			     0, dlptr_free, data);</div><div class='del'>-      data-&gt;ptr = ptr;</div><div class='del'>-      data-&gt;free = func;</div><div class='del'>-      data-&gt;ctype = DLPTR_CTYPE_UNKNOWN;</div><div class='del'>-      data-&gt;stype = NULL;</div><div class='del'>-      data-&gt;ssize = NULL;</div><div class='del'>-      data-&gt;slen = 0;</div><div class='del'>-      data-&gt;size = size;</div><div class='del'>-      data-&gt;ids = NULL;</div><div class='del'>-      data-&gt;ids_num = 0;</div><div class='del'>-      dlptr_init(val);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      if (func) {</div><div class='del'>-	Data_Get_Struct(val, struct ptr_data, data);</div><div class='del'>-	data-&gt;free = func;</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    val = Qnil;</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'>-VALUE</div><div class='del'>-rb_dlptr_new(void *ptr, long size, freefunc_t func)</div><div class='del'>-{</div><div class='del'>-  return rb_dlptr_new2(rb_cDLPtrData, ptr, size, func);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_malloc(long size, freefunc_t func)</div><div class='del'>-{</div><div class='del'>-  void *ptr;</div><div class='del'>-</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  ptr = dlmalloc((size_t)size);</div><div class='del'>-  memset(ptr,0,(size_t)size);</div><div class='del'>-  return rb_dlptr_new(ptr, size, func);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void *</div><div class='del'>-rb_dlptr2cptr(VALUE val)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  void *ptr;</div><div class='del'>-</div><div class='del'>-  if (rb_obj_is_kind_of(val, rb_cDLPtrData)) {</div><div class='del'>-    Data_Get_Struct(val, struct ptr_data, data);</div><div class='del'>-    ptr = data-&gt;ptr;</div><div class='del'>-  }</div><div class='del'>-  else if (val == Qnil) {</div><div class='del'>-    ptr = NULL;</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    rb_raise(rb_eTypeError, "DL::PtrData was expected");</div><div class='del'>-  }</div><div class='del'>-    </div><div class='del'>-  return ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_dlptr_s_allocate(VALUE klass)</div><div class='del'>-{</div><div class='del'>-  VALUE obj;</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  obj = Data_Make_Struct(klass, struct ptr_data, 0, dlptr_free, data);</div><div class='del'>-  data-&gt;ptr = 0;</div><div class='del'>-  data-&gt;free = 0;</div><div class='del'>-  data-&gt;ctype = DLPTR_CTYPE_UNKNOWN;</div><div class='del'>-  data-&gt;stype = NULL;</div><div class='del'>-  data-&gt;ssize = NULL;</div><div class='del'>-  data-&gt;slen  = 0;</div><div class='del'>-  data-&gt;size  = 0;</div><div class='del'>-  data-&gt;ids   = NULL;</div><div class='del'>-  data-&gt;ids_num = 0;</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'>-rb_dlptr_initialize(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE ptr, sym, size;</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  void *p = NULL;</div><div class='del'>-  freefunc_t f = NULL;</div><div class='del'>-  long s = 0;</div><div class='del'>-</div><div class='del'>-  switch (rb_scan_args(argc, argv, "12", &amp;ptr, &amp;size, &amp;sym)) {</div><div class='del'>-  case 1:</div><div class='del'>-    p = (void*)(DLNUM2LONG(rb_Integer(ptr)));</div><div class='del'>-    break;</div><div class='del'>-  case 2:</div><div class='del'>-    p = (void*)(DLNUM2LONG(rb_Integer(ptr)));</div><div class='del'>-    s = DLNUM2LONG(size);</div><div class='del'>-    break;</div><div class='del'>-  case 3:</div><div class='del'>-    p = (void*)(DLNUM2LONG(rb_Integer(ptr)));</div><div class='del'>-    s = DLNUM2LONG(size);</div><div class='del'>-    f = rb_dlsym2csym(sym);</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    rb_bug("rb_dlptr_initialize");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (p) {</div><div class='del'>-    Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-    if (data-&gt;ptr &amp;&amp; data-&gt;free) {</div><div class='del'>-      /* Free previous memory. Use of inappropriate initialize may cause SEGV. */</div><div class='del'>-      (*(data-&gt;free))(data-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-    data-&gt;ptr  = p;</div><div class='del'>-    data-&gt;size = s;</div><div class='del'>-    data-&gt;free = f;</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'>-rb_dlptr_s_malloc(int argc, VALUE argv[], VALUE klass)</div><div class='del'>-{</div><div class='del'>-  VALUE size, sym, obj;</div><div class='del'>-  int   s;</div><div class='del'>-  freefunc_t f = NULL;</div><div class='del'>-</div><div class='del'>-  switch (rb_scan_args(argc, argv, "11", &amp;size, &amp;sym)) {</div><div class='del'>-  case 1:</div><div class='del'>-    s = NUM2INT(size);</div><div class='del'>-    break;</div><div class='del'>-  case 2:</div><div class='del'>-    s = NUM2INT(size);</div><div class='del'>-    f = rb_dlsym2csym(sym);</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    rb_bug("rb_dlptr_s_malloc");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  obj = rb_dlptr_malloc(s,f);</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'>-rb_dlptr_to_i(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  return DLLONG2NUM(data-&gt;ptr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_ptr(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  return rb_dlptr_new(*((void**)(data-&gt;ptr)),0,0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_ref(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  return rb_dlptr_new(&amp;(data-&gt;ptr),0,0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_null_p(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  return data-&gt;ptr ? Qfalse : Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_free_set(VALUE self, VALUE val)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-</div><div class='del'>-  data-&gt;free = DLFREEFUNC(rb_dlsym2csym(val));</div><div class='del'>-</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_free_get(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *pdata;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, pdata);</div><div class='del'>-</div><div class='del'>-  return rb_dlsym_new(pdata-&gt;free,"(free)","0P");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_to_array(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  int n;</div><div class='del'>-  int i;</div><div class='del'>-  int t;</div><div class='del'>-  VALUE ary;</div><div class='del'>-  VALUE type, size;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-</div><div class='del'>-  switch (rb_scan_args(argc, argv, "11", &amp;type, &amp;size)) {</div><div class='del'>-  case 2:</div><div class='del'>-    t = StringValuePtr(type)[0];</div><div class='del'>-    n = NUM2INT(size);</div><div class='del'>-    break;</div><div class='del'>-  case 1:</div><div class='del'>-    t = StringValuePtr(type)[0];</div><div class='del'>-    switch (t) {</div><div class='del'>-    case 'C':</div><div class='del'>-      n = data-&gt;size;</div><div class='del'>-      break;</div><div class='del'>-    case 'H':</div><div class='del'>-      n = data-&gt;size / sizeof(short);</div><div class='del'>-      break;</div><div class='del'>-    case 'I':</div><div class='del'>-      n = data-&gt;size / sizeof(int);</div><div class='del'>-      break;</div><div class='del'>-    case 'L':</div><div class='del'>-      n = data-&gt;size / sizeof(long);</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      n = data-&gt;size / sizeof(float);</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      n = data-&gt;size / sizeof(double);</div><div class='del'>-      break;</div><div class='del'>-    case  'P': case 'p':</div><div class='del'>-      n = data-&gt;size / sizeof(void*);</div><div class='del'>-      break;</div><div class='del'>-    case 'S': case 's':</div><div class='del'>-      n = data-&gt;size / sizeof(char*);</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-	n = 0;</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    rb_bug("rb_dlptr_to_array");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  ary = rb_ary_new();</div><div class='del'>-</div><div class='del'>-  for (i=0; i &lt; n; i++) {</div><div class='del'>-    switch (t) {</div><div class='del'>-    case 'C':</div><div class='del'>-      rb_ary_push(ary, INT2NUM(((char*)(data-&gt;ptr))[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'H':</div><div class='del'>-      rb_ary_push(ary, INT2NUM(((short*)(data-&gt;ptr))[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'I':</div><div class='del'>-      rb_ary_push(ary, INT2NUM(((int*)(data-&gt;ptr))[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'L':</div><div class='del'>-      rb_ary_push(ary, DLLONG2NUM(((long*)(data-&gt;ptr))[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      rb_ary_push(ary, rb_float_new(((double*)(data-&gt;ptr))[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      rb_ary_push(ary, rb_float_new(((float*)(data-&gt;ptr))[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'S':</div><div class='del'>-      {</div><div class='del'>-	char *str = ((char**)(data-&gt;ptr))[i];</div><div class='del'>-	if (str) {</div><div class='del'>-	  rb_ary_push(ary, rb_tainted_str_new2(str));</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	  rb_ary_push(ary, Qnil);</div><div class='del'>-	}</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 's':</div><div class='del'>-      {</div><div class='del'>-	char *str = ((char**)(data-&gt;ptr))[i];</div><div class='del'>-	if (str) {</div><div class='del'>-	  rb_ary_push(ary, rb_tainted_str_new2(str));</div><div class='del'>-	  xfree(str);</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	  rb_ary_push(ary, Qnil);</div><div class='del'>-	}</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    case 'P':</div><div class='del'>-      rb_ary_push(ary, rb_dlptr_new(((void**)(data-&gt;ptr))[i],0,0));</div><div class='del'>-      break;</div><div class='del'>-    case 'p':</div><div class='del'>-      rb_ary_push(ary,</div><div class='del'>-		  rb_dlptr_new(((void**)(data-&gt;ptr))[i],0,dlfree));</div><div class='del'>-      break;</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'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_to_s(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  VALUE arg1, val;</div><div class='del'>-  int len;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  switch (rb_scan_args(argc, argv, "01", &amp;arg1)) {</div><div class='del'>-  case 0:</div><div class='del'>-    val = rb_tainted_str_new2((char*)(data-&gt;ptr));</div><div class='del'>-    break;</div><div class='del'>-  case 1:</div><div class='del'>-    len = NUM2INT(arg1);</div><div class='del'>-    val = rb_tainted_str_new((char*)(data-&gt;ptr), len);</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    rb_bug("rb_dlptr_to_s");</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'>-VALUE</div><div class='del'>-rb_dlptr_to_str(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  VALUE arg1, val;</div><div class='del'>-  int len;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  switch (rb_scan_args(argc, argv, "01", &amp;arg1)) {</div><div class='del'>-  case 0:</div><div class='del'>-    val = rb_tainted_str_new((char*)(data-&gt;ptr),data-&gt;size);</div><div class='del'>-    break;</div><div class='del'>-  case 1:</div><div class='del'>-    len = NUM2INT(arg1);</div><div class='del'>-    val = rb_tainted_str_new((char*)(data-&gt;ptr), len);</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    rb_bug("rb_dlptr_to_str");</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'>-VALUE</div><div class='del'>-rb_dlptr_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  char str[1024];</div><div class='del'>-</div><div class='del'>-  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='del'>-  return rb_str_new2(str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_eql(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-  void *ptr1, *ptr2;</div><div class='del'>-  ptr1 = rb_dlptr2cptr(self);</div><div class='del'>-  ptr2 = rb_dlptr2cptr(other);</div><div class='del'>-</div><div class='del'>-  return ptr1 == ptr2 ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_cmp(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-  void *ptr1, *ptr2;</div><div class='del'>-  ptr1 = rb_dlptr2cptr(self);</div><div class='del'>-  ptr2 = rb_dlptr2cptr(other);</div><div class='del'>-  return DLLONG2NUM((long)ptr1 - (long)ptr2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_plus(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-  void *ptr;</div><div class='del'>-  long num, size;</div><div class='del'>-</div><div class='del'>-  ptr = rb_dlptr2cptr(self);</div><div class='del'>-  size = RDLPTR(self)-&gt;size;</div><div class='del'>-  num = DLNUM2LONG(other);</div><div class='del'>-  return rb_dlptr_new((char *)ptr + num, size - num, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_minus(VALUE self, VALUE other)</div><div class='del'>-{</div><div class='del'>-  void *ptr;</div><div class='del'>-  long num, size;</div><div class='del'>-</div><div class='del'>-  ptr = rb_dlptr2cptr(self);</div><div class='del'>-  size = RDLPTR(self)-&gt;size;</div><div class='del'>-  num = DLNUM2LONG(other);</div><div class='del'>-  return rb_dlptr_new((char *)ptr - num, size + num, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_define_data_type(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE data_type, type, rest, vid;</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  int i, t, num;</div><div class='del'>-  char *ctype;</div><div class='del'>-</div><div class='del'>-  rb_scan_args(argc, argv, "11*", &amp;data_type, &amp;type, &amp;rest);</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-</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='del'>-      data-&gt;ctype = DLPTR_CTYPE_UNKNOWN;</div><div class='del'>-      data-&gt;slen = 0;</div><div class='del'>-      data-&gt;ids_num  = 0;</div><div class='del'>-      if (data-&gt;stype) {</div><div class='del'>-	dlfree(data-&gt;stype);</div><div class='del'>-	data-&gt;stype = NULL;</div><div class='del'>-      }</div><div class='del'>-      if (data-&gt;ids) {</div><div class='del'>-	dlfree(data-&gt;ids);</div><div class='del'>-	data-&gt;ids = NULL;</div><div class='del'>-      }</div><div class='del'>-      return Qnil;</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      rb_raise(rb_eArgError, "wrong arguments");</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  t = NUM2INT(data_type);</div><div class='del'>-  StringValue(type);</div><div class='del'>-  Check_Type(rest, T_ARRAY);</div><div class='del'>-  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='del'>-  }</div><div class='del'>-</div><div class='del'>-  data-&gt;ctype = t;</div><div class='del'>-  data-&gt;slen = num;</div><div class='del'>-  data-&gt;ids_num  = num;</div><div class='del'>-  if (data-&gt;stype) dlfree(data-&gt;stype);</div><div class='del'>-  data-&gt;stype = (char*)dlmalloc(sizeof(char) * num);</div><div class='del'>-  if (data-&gt;ssize) dlfree(data-&gt;ssize);</div><div class='del'>-  data-&gt;ssize = (int*)dlmalloc(sizeof(int) * num);</div><div class='del'>-  if (data-&gt;ids) dlfree(data-&gt;ids);</div><div class='del'>-  data-&gt;ids  = (ID*)dlmalloc(sizeof(ID) * data-&gt;ids_num);</div><div class='del'>-</div><div class='del'>-  ctype = StringValuePtr(type);</div><div class='del'>-  for (i=0; i&lt;num; i++) {</div><div class='del'>-    vid = rb_ary_entry(rest,i);</div><div class='del'>-    data-&gt;ids[i] = rb_to_id(vid);</div><div class='del'>-    data-&gt;stype[i] = *ctype;</div><div class='del'>-    ctype ++;</div><div class='del'>-    if (isdigit(*ctype)) {</div><div class='del'>-      char *p, *d;</div><div class='del'>-      for (p=ctype; isdigit(*p); p++) ;</div><div class='del'>-      d = ALLOCA_N(char, p - ctype + 1);</div><div class='del'>-      strncpy(d, ctype, p - ctype);</div><div class='del'>-      d[p - ctype] = '\0';</div><div class='del'>-      data-&gt;ssize[i] = atoi(d);</div><div class='del'>-      ctype = p;</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      data-&gt;ssize[i] = 1;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (*ctype) {</div><div class='del'>-    rb_raise(rb_eArgError, "too few/many arguments");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (!data-&gt;size)</div><div class='del'>-    data-&gt;size = dlsizeof(RSTRING(type)-&gt;ptr);</div><div class='del'>-</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_define_struct(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE *pass_argv;</div><div class='del'>-  int pass_argc, i;</div><div class='del'>-</div><div class='del'>-  pass_argc = argc + 1;</div><div class='del'>-  pass_argv = ALLOCA_N(VALUE, pass_argc);</div><div class='del'>-  pass_argv[0] = INT2FIX(DLPTR_CTYPE_STRUCT);</div><div class='del'>-  for (i=1; i&lt;pass_argc; i++) {</div><div class='del'>-    pass_argv[i] = argv[i-1];</div><div class='del'>-  }</div><div class='del'>-  return rb_dlptr_define_data_type(pass_argc, pass_argv, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_define_union(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE *pass_argv;</div><div class='del'>-  int pass_argc, i;</div><div class='del'>-</div><div class='del'>-  pass_argc = argc + 1;</div><div class='del'>-  pass_argv = ALLOCA_N(VALUE, pass_argc);</div><div class='del'>-  pass_argv[0] = INT2FIX(DLPTR_CTYPE_UNION);</div><div class='del'>-  for (i=1; i&lt;pass_argc; i++) {</div><div class='del'>-    pass_argv[i] = argv[i-1];</div><div class='del'>-  }</div><div class='del'>-  return rb_dlptr_define_data_type(pass_argc, pass_argv, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_get_data_type(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  if (data-&gt;stype)</div><div class='del'>-    return rb_assoc_new(INT2FIX(data-&gt;ctype),</div><div class='del'>-			rb_tainted_str_new(data-&gt;stype, data-&gt;slen));</div><div class='del'>-  else</div><div class='del'>-    return rb_assoc_new(INT2FIX(data-&gt;ctype), Qnil);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cary2ary(void *ptr, char t, int len)</div><div class='del'>-{</div><div class='del'>-  VALUE ary;</div><div class='del'>-  VALUE elem;</div><div class='del'>-  int i;</div><div class='del'>-</div><div class='del'>-  if (len &lt; 1)</div><div class='del'>-    return Qnil;</div><div class='del'>-</div><div class='del'>-  if (len == 1) {</div><div class='del'>-    switch (t) {</div><div class='del'>-    case 'I':</div><div class='del'>-      elem = INT2NUM(*((int*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(int);</div><div class='del'>-      break;</div><div class='del'>-    case 'L':</div><div class='del'>-      elem = DLLONG2NUM(*((long*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(long);</div><div class='del'>-      break;</div><div class='del'>-    case 'P':</div><div class='del'>-    case 'S':</div><div class='del'>-      elem = rb_dlptr_new(*((void**)ptr),0, 0);</div><div class='del'>-      ptr = (char *)ptr + sizeof(void*);</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      elem = rb_float_new(*((float*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(float);</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      elem = rb_float_new(*((double*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(double);</div><div class='del'>-      break;</div><div class='del'>-    case 'C':</div><div class='del'>-      elem = INT2NUM(*((char*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(char);</div><div class='del'>-      break;</div><div class='del'>-    case 'H':</div><div class='del'>-      elem = INT2NUM(*((short*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(short);</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unsupported type '%c'", t);</div><div class='del'>-    }</div><div class='del'>-    return elem;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  ary = rb_ary_new();</div><div class='del'>-  for (i=0; i &lt; len; i++) {</div><div class='del'>-    switch (t) {</div><div class='del'>-    case 'I':</div><div class='del'>-      elem = INT2NUM(*((int*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(int);</div><div class='del'>-      break;</div><div class='del'>-    case 'L':</div><div class='del'>-      elem = DLLONG2NUM(*((long*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(long);</div><div class='del'>-      break;</div><div class='del'>-    case 'P':</div><div class='del'>-    case 'S':</div><div class='del'>-      elem = rb_dlptr_new(*((void**)ptr), 0, 0);</div><div class='del'>-      ptr = (char *)ptr + sizeof(void*);</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      elem = rb_float_new(*((float*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(float);</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      elem = rb_float_new(*((float*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(double);</div><div class='del'>-      break;</div><div class='del'>-    case 'C':</div><div class='del'>-      elem = INT2NUM(*((char*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(char);</div><div class='del'>-      break;</div><div class='del'>-    case 'H':</div><div class='del'>-      elem = INT2NUM(*((short*)ptr));</div><div class='del'>-      ptr = (char *)ptr + sizeof(short);</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unsupported type '%c'", t);</div><div class='del'>-    }</div><div class='del'>-    rb_ary_push(ary, elem);</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'>-VALUE</div><div class='del'>-rb_dlptr_aref(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE key = Qnil, num = Qnil;</div><div class='del'>-  ID id;</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  int i;</div><div class='del'>-  int offset;</div><div class='del'>-</div><div class='del'>-  if (rb_scan_args(argc, argv, "11", &amp;key, &amp;num) == 1) {</div><div class='del'>-    num = INT2NUM(0);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (TYPE(key) == T_FIXNUM || TYPE(key) == T_BIGNUM) {</div><div class='del'>-    VALUE pass[1];</div><div class='del'>-    pass[0] = num;</div><div class='del'>-    return rb_dlptr_to_str(1, pass, rb_dlptr_plus(self, key));</div><div class='del'>-  }</div><div class='del'>-  rb_to_id(key);</div><div class='del'>-  if (! (TYPE(key) == T_STRING || TYPE(key) == T_SYMBOL)) {</div><div class='del'>-    rb_raise(rb_eTypeError, "the key must be a string or symbol");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  id = rb_to_id(key);</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  offset = 0;</div><div class='del'>-  switch (data-&gt;ctype) {</div><div class='del'>-  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='del'>-	return cary2ary((char *)data-&gt;ptr + offset, data-&gt;stype[i], data-&gt;ssize[i]);</div><div class='del'>-      }</div><div class='del'>-      switch (data-&gt;stype[i]) {</div><div class='del'>-      case 'I':</div><div class='del'>-	offset += sizeof(int) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'L':</div><div class='del'>-	offset += sizeof(long) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'P':</div><div class='del'>-      case 'S':</div><div class='del'>-	offset += sizeof(void*) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'F':</div><div class='del'>-	offset += sizeof(float) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'D':</div><div class='del'>-	offset += sizeof(double) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'C':</div><div class='del'>-	offset += sizeof(char) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'H':</div><div class='del'>-	offset += sizeof(short) * data-&gt;ssize[i];</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'>-    }</div><div class='del'>-    break;</div><div class='del'>-  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'>-	return cary2ary((char *)data-&gt;ptr + offset, data-&gt;stype[i], data-&gt;ssize[i]);</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  } /* end of switch */</div><div class='del'>-</div><div class='del'>-  rb_raise(rb_eNameError, "undefined key `%s' for %s",</div><div class='del'>-	   rb_id2name(id), rb_class2name(CLASS_OF(self)));</div><div class='del'>-</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void *</div><div class='del'>-ary2cary(char t, VALUE val, long *size)</div><div class='del'>-{</div><div class='del'>-  void *ptr;</div><div class='del'>-</div><div class='del'>-  if (TYPE(val) == T_ARRAY) {</div><div class='del'>-    ptr = rb_ary2cary(t, val, size);</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    ptr = rb_ary2cary(t, rb_ary_new3(1, val), size);</div><div class='del'>-  }</div><div class='del'>-  return ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_aset(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE key = Qnil, num = Qnil, val = Qnil;</div><div class='del'>-  ID id;</div><div class='del'>-  struct ptr_data *data;</div><div class='del'>-  int i;</div><div class='del'>-  int offset;</div><div class='del'>-  long memsize;</div><div class='del'>-  void *memimg;</div><div class='del'>-</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='del'>-  case 2:</div><div class='del'>-    val = num;</div><div class='del'>-    num = Qnil;</div><div class='del'>-    break;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (TYPE(key) == T_FIXNUM || TYPE(key) == T_BIGNUM) {</div><div class='del'>-    void *dst, *src;</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    StringValue(val);</div><div class='del'>-    Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-    dst = (void*)((long)(data-&gt;ptr) + DLNUM2LONG(key));</div><div class='del'>-    src = RSTRING(val)-&gt;ptr;</div><div class='del'>-    len = RSTRING(val)-&gt;len;</div><div class='del'>-    if (num == Qnil) {</div><div class='del'>-      memcpy(dst, src, len);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      long n = NUM2INT(num);</div><div class='del'>-      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='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  id = rb_to_id(key);</div><div class='del'>-  Data_Get_Struct(self, struct ptr_data, data);</div><div class='del'>-  switch (data-&gt;ctype) {</div><div class='del'>-  case DLPTR_CTYPE_STRUCT:</div><div class='del'>-    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='del'>-	memimg = ary2cary(data-&gt;stype[i], val, &amp;memsize);</div><div class='del'>-	memcpy((char *)data-&gt;ptr + offset, memimg, memsize);</div><div class='del'>-        dlfree(memimg);</div><div class='del'>-	return val;</div><div class='del'>-      }</div><div class='del'>-      switch (data-&gt;stype[i]) {</div><div class='del'>-      case 'I':</div><div class='del'>-      case 'i':</div><div class='del'>-	offset += sizeof(int) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'L':</div><div class='del'>-      case 'l':</div><div class='del'>-	offset += sizeof(long) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'P':</div><div class='del'>-      case 'p':</div><div class='del'>-      case 'S':</div><div class='del'>-      case 's':</div><div class='del'>-	offset += sizeof(void*) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'D':</div><div class='del'>-      case 'd':</div><div class='del'>-	offset += sizeof(double) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'F':</div><div class='del'>-      case 'f':</div><div class='del'>-	offset += sizeof(float) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'C':</div><div class='del'>-      case 'c':</div><div class='del'>-	offset += sizeof(char) * data-&gt;ssize[i];</div><div class='del'>-	break;</div><div class='del'>-      case 'H':</div><div class='del'>-      case 'h':</div><div class='del'>-	offset += sizeof(short) * data-&gt;ssize[i];</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'>-    }</div><div class='del'>-    return val;</div><div class='del'>-    /* break; */</div><div class='del'>-  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='del'>-	case 'I': case 'i':</div><div class='del'>-	  memsize = sizeof(int) * data-&gt;ssize[i];</div><div class='del'>-	  break;</div><div class='del'>-	case 'L': case 'l':</div><div class='del'>-	  memsize = sizeof(long) * data-&gt;ssize[i];</div><div class='del'>-	  break;</div><div class='del'>-	case 'P': case 'p':</div><div class='del'>-	case 'S': case 's':</div><div class='del'>-	  memsize = sizeof(void*) * data-&gt;ssize[i];</div><div class='del'>-	  break;</div><div class='del'>-	case 'F': case 'f':</div><div class='del'>-	  memsize = sizeof(float) * data-&gt;ssize[i];</div><div class='del'>-	  break;</div><div class='del'>-	case 'D': case 'd':</div><div class='del'>-	  memsize = sizeof(double) * data-&gt;ssize[i];</div><div class='del'>-	  break;</div><div class='del'>-	case 'C': case 'c':</div><div class='del'>-	  memsize = sizeof(char) * data-&gt;ssize[i];</div><div class='del'>-	  break;</div><div class='del'>-	case 'H': case 'h':</div><div class='del'>-	  memsize = sizeof(short) * data-&gt;ssize[i];</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'>-	memimg = ary2cary(data-&gt;stype[i], val, NULL);</div><div class='del'>-	memcpy(data-&gt;ptr, memimg, memsize);</div><div class='del'>-        dlfree(memimg);</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-    /* break; */</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  rb_raise(rb_eNameError, "undefined key `%s' for %s",</div><div class='del'>-	   rb_id2name(id), rb_class2name(CLASS_OF(self)));</div><div class='del'>-</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlptr_size(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE size;</div><div class='del'>-</div><div class='del'>-  if (rb_scan_args(argc, argv, "01", &amp;size) == 0){</div><div class='del'>-    return DLLONG2NUM(RDLPTR(self)-&gt;size);</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    RDLPTR(self)-&gt;size = DLNUM2LONG(size);</div><div class='del'>-    return size;</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-dlmem_each_i(void* key, VALUE value, void* arg)</div><div class='del'>-{</div><div class='del'>-  VALUE vkey = DLLONG2NUM(key);</div><div class='del'>-  rb_yield(rb_assoc_new(vkey, value));</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlmem_each(VALUE self)</div><div class='del'>-{</div><div class='del'>-  st_foreach(st_memory_table, dlmem_each_i, 0);</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_dlptr()</div><div class='del'>-{</div><div class='del'>-  rb_cDLPtrData = rb_define_class_under(rb_mDL, "PtrData", rb_cObject);</div><div class='del'>-  rb_define_alloc_func(rb_cDLPtrData, rb_dlptr_s_allocate);</div><div class='del'>-  rb_define_singleton_method(rb_cDLPtrData, "malloc", rb_dlptr_s_malloc, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "initialize", rb_dlptr_initialize, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "free=", rb_dlptr_free_set, 1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "free",  rb_dlptr_free_get, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "to_i",  rb_dlptr_to_i, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "ptr",   rb_dlptr_ptr, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "+@", rb_dlptr_ptr, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "ref",   rb_dlptr_ref, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "-@", rb_dlptr_ref, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "null?", rb_dlptr_null_p, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "to_a", rb_dlptr_to_array, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "to_s", rb_dlptr_to_s, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "to_str", rb_dlptr_to_str, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "inspect", rb_dlptr_inspect, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "&lt;=&gt;", rb_dlptr_cmp, 1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "==", rb_dlptr_eql, 1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "eql?", rb_dlptr_eql, 1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "+", rb_dlptr_plus, 1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "-", rb_dlptr_minus, 1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "define_data_type",</div><div class='del'>-		   rb_dlptr_define_data_type, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "struct!", rb_dlptr_define_struct, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "union!",  rb_dlptr_define_union,  -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "data_type", rb_dlptr_get_data_type, 0);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "[]", rb_dlptr_aref, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "[]=", rb_dlptr_aset, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "size", rb_dlptr_size, -1);</div><div class='del'>-  rb_define_method(rb_cDLPtrData, "size=", rb_dlptr_size, -1);</div><div class='del'>-</div><div class='del'>-  rb_mDLMemorySpace = rb_define_module_under(rb_mDL, "MemorySpace");</div><div class='del'>-  st_memory_table = st_init_numtable();</div><div class='del'>-  rb_define_const(rb_mDLMemorySpace, "MemoryTable", Qnil); /* historical */</div><div class='del'>-  rb_define_module_function(rb_mDLMemorySpace, "each", rb_dlmem_each, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/sample/c++sample.C b/ext/dl/sample/c++sample.C<br/>deleted file mode 100644<br/>index d083d337a7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/c++sample.C?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/c++sample.C</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,35 +0,0 @@</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-</div><div class='del'>-class Person {</div><div class='del'>-private:</div><div class='del'>-  const char *name;</div><div class='del'>-  int age;</div><div class='del'>-</div><div class='del'>-public:</div><div class='del'>-  Person(const char *name, int age);</div><div class='del'>-  const char * get_name();</div><div class='del'>-  int get_age();</div><div class='del'>-  void set_age(int i);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-Person::Person(const char *name, int age)</div><div class='del'>-  : name(name), age(age)</div><div class='del'>-{</div><div class='del'>-  /* empty */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-const char *</div><div class='del'>-Person::get_name()</div><div class='del'>-{</div><div class='del'>-  return name;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-Person::get_age(){</div><div class='del'>-  return age;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Person::set_age(int i){</div><div class='del'>-  age = i;</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/sample/c++sample.rb b/ext/dl/sample/c++sample.rb<br/>deleted file mode 100644<br/>index 29887df845..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/c++sample.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/c++sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,60 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>- This script shows how to deal with C++ classes using Ruby/DL.</div><div class='del'>- You must build a dynamic loadable library using "c++sample.C"</div><div class='del'>- to run this script as follows:</div><div class='del'>-   $ g++ -o libsample.so -shared c++sample.C</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-require 'dl/import'</div><div class='del'>-require 'dl/struct'</div><div class='del'>-</div><div class='del'>-# Give a name of dynamic loadable library</div><div class='del'>-LIBNAME = ARGV[0] || "libsample.so"</div><div class='del'>-</div><div class='del'>-class Person</div><div class='del'>-  module Core</div><div class='del'>-    extend DL::Importable</div><div class='del'>-    </div><div class='del'>-    dlload LIBNAME</div><div class='del'>-</div><div class='del'>-    # mangled symbol names</div><div class='del'>-    extern "void __6PersonPCci(void *, const char *, int)"</div><div class='del'>-    extern "const char *get_name__6Person(void *)"</div><div class='del'>-    extern "int get_age__6Person(void *)"</div><div class='del'>-    extern "void set_age__6Personi(void *, int)"</div><div class='del'>-</div><div class='del'>-    Data = struct [</div><div class='del'>-      "char *name",</div><div class='del'>-      "int age",</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(name, age)</div><div class='del'>-    @ptr = Core::Data.alloc</div><div class='del'>-    Core::__6PersonPCci(@ptr, name, age)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_name()</div><div class='del'>-    str = Core::get_name__6Person(@ptr)</div><div class='del'>-    if( str )</div><div class='del'>-      str.to_s</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 get_age()</div><div class='del'>-    Core::get_age__6Person(@ptr)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_age(age)</div><div class='del'>-    Core::set_age__6Personi(@ptr, age)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-obj = Person.new("ttate", 1)</div><div class='del'>-p obj.get_name()</div><div class='del'>-p obj.get_age()</div><div class='del'>-obj.set_age(10)</div><div class='del'>-p obj.get_age()</div><div class='head'>diff --git a/ext/dl/sample/drives.rb b/ext/dl/sample/drives.rb<br/>deleted file mode 100644<br/>index 8a590404b1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/drives.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/drives.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,70 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-# drives.rb -- find existing drives and show the drive type.</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-require 'dl/import'</div><div class='del'>-</div><div class='del'>-module Kernel32</div><div class='del'>-  extend DL::Importable</div><div class='del'>-</div><div class='del'>-  dlload "kernel32"</div><div class='del'>-</div><div class='del'>-  extern "long GetLogicalDrives()"</div><div class='del'>-  extern "int GetDriveType(char*)"</div><div class='del'>-  extern "long GetDiskFreeSpace(char*, long ref, long ref, long ref, long ref)"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-include Kernel32</div><div class='del'>-</div><div class='del'>-buff = Kernel32.getLogicalDrives()</div><div class='del'>-</div><div class='del'>-i = 0</div><div class='del'>-ds = []</div><div class='del'>-while( i &lt; 26 )</div><div class='del'>-  mask = (1 &lt;&lt; i)</div><div class='del'>-  if( buff &amp; mask &gt; 0 )</div><div class='del'>-    ds.push((65+i).chr)</div><div class='del'>-  end</div><div class='del'>-  i += 1</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-From the cygwin's /usr/include/w32api/winbase.h:</div><div class='del'>-#define DRIVE_UNKNOWN 0</div><div class='del'>-#define DRIVE_NO_ROOT_DIR 1</div><div class='del'>-#define DRIVE_REMOVABLE 2</div><div class='del'>-#define DRIVE_FIXED 3</div><div class='del'>-#define DRIVE_REMOTE 4</div><div class='del'>-#define DRIVE_CDROM 5</div><div class='del'>-#define DRIVE_RAMDISK 6</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-types = [</div><div class='del'>-  "unknown",</div><div class='del'>-  "no root dir",</div><div class='del'>-  "Removable",</div><div class='del'>-  "Fixed", </div><div class='del'>-  "Remote",</div><div class='del'>-  "CDROM",</div><div class='del'>-  "RAM",</div><div class='del'>-]</div><div class='del'>-print("Drive : Type (Free Space/Available Space)\n")</div><div class='del'>-ds.each{|d|</div><div class='del'>-  t = Kernel32.getDriveType(d + ":\\")</div><div class='del'>-  Kernel32.getDiskFreeSpace(d + ":\\", 0, 0, 0, 0)</div><div class='del'>-  _,sec_per_clus,byte_per_sec,free_clus,total_clus = Kernel32._args_</div><div class='del'>-  fbytes = sec_per_clus * byte_per_sec * free_clus</div><div class='del'>-  tbytes = sec_per_clus * byte_per_sec * total_clus</div><div class='del'>-  unit = "B"</div><div class='del'>-  if( fbytes &gt; 1024 &amp;&amp; tbytes &gt; 1024 )</div><div class='del'>-    fbytes = fbytes / 1024</div><div class='del'>-    tbytes = tbytes / 1024</div><div class='del'>-    unit = "K"</div><div class='del'>-  end</div><div class='del'>-  if( fbytes &gt; 1024 &amp;&amp; tbytes &gt; 1024 )</div><div class='del'>-    fbytes = fbytes / 1024</div><div class='del'>-    tbytes = tbytes / 1024</div><div class='del'>-    unit = "M"</div><div class='del'>-  end</div><div class='del'>-  print("#{d} : #{types[t]} (#{fbytes} #{unit}/#{tbytes} #{unit})\n")</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/sample/getch.rb b/ext/dl/sample/getch.rb<br/>deleted file mode 100644<br/>index 3f7261c979..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/getch.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/getch.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-require 'dl'</div><div class='del'>-</div><div class='del'>-crtdll = DL::dlopen("crtdll")</div><div class='del'>-getch  = crtdll['_getch', 'L']</div><div class='del'>-print(getch.call, "\n")</div><div class='head'>diff --git a/ext/dl/sample/libc.rb b/ext/dl/sample/libc.rb<br/>deleted file mode 100644<br/>index a1f6fbe543..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/libc.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/libc.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,69 +0,0 @@</div><div class='del'>-require "dl/import"</div><div class='del'>-require "dl/struct"</div><div class='del'>-</div><div class='del'>-module LIBC</div><div class='del'>-  extend DL::Importable</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    dlload "libc.so.6"</div><div class='del'>-  rescue</div><div class='del'>-    dlload "libc.so.5"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  extern "int atoi(char*)"</div><div class='del'>-  extern "ibool isdigit(int)"</div><div class='del'>-  extern "int gettimeofday(struct timeval *, struct timezone *)"</div><div class='del'>-  extern "char* strcat(char*, char*)"</div><div class='del'>-  extern "FILE* fopen(char*, char*)"</div><div class='del'>-  extern "int fclose(FILE*)"</div><div class='del'>-  extern "int fgetc(FILE*)"</div><div class='del'>-  extern "int strlen(char*)"</div><div class='del'>-  extern "void qsort(void*, int, int, void*)"</div><div class='del'>-</div><div class='del'>-  def str_qsort(ary, comp)</div><div class='del'>-    len = ary.length</div><div class='del'>-    r,rs = qsort(ary, len, DL.sizeof('P'), comp)</div><div class='del'>-    return rs[0].to_a('S', len)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Timeval = struct [</div><div class='del'>-    "long tv_sec",</div><div class='del'>-    "long tv_usec",</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  Timezone = struct [</div><div class='del'>-    "int tz_minuteswest",</div><div class='del'>-    "int tz_dsttime",</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  def my_compare(ptr1, ptr2)</div><div class='del'>-    ptr1.ptr.to_s &lt;=&gt; ptr2.ptr.to_s</div><div class='del'>-  end</div><div class='del'>-  COMPARE = callback("int my_compare(char**, char**)")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-$cb1 = DL.callback('IPP'){|ptr1, ptr2|</div><div class='del'>-  str1 = ptr1.ptr.to_s</div><div class='del'>-  str2 = ptr2.ptr.to_s</div><div class='del'>-  str1 &lt;=&gt; str2</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-p LIBC.atoi("10")</div><div class='del'>-</div><div class='del'>-p LIBC.isdigit(?1)</div><div class='del'>-</div><div class='del'>-p LIBC.isdigit(?a)</div><div class='del'>-</div><div class='del'>-p LIBC.strcat("a", "b")</div><div class='del'>-</div><div class='del'>-ary = ["a","c","b"]</div><div class='del'>-ptr = ary.to_ptr</div><div class='del'>-LIBC.qsort(ptr, ary.length, DL.sizeof('P'), LIBC::COMPARE)</div><div class='del'>-p ptr.to_a('S', ary.length)</div><div class='del'>-</div><div class='del'>-tv = LIBC::Timeval.malloc</div><div class='del'>-tz = LIBC::Timezone.malloc</div><div class='del'>-LIBC.gettimeofday(tv, tz)</div><div class='del'>-</div><div class='del'>-p Time.at(tv.tv_sec)</div><div class='head'>diff --git a/ext/dl/sample/msgbox.rb b/ext/dl/sample/msgbox.rb<br/>deleted file mode 100644<br/>index 091e646091..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/msgbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/msgbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-# This script works on Windows.</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-</div><div class='del'>-User32 = DL.dlopen("user32")</div><div class='del'>-Kernel32 = DL.dlopen("kernel32")</div><div class='del'>-</div><div class='del'>-MB_OK = 0</div><div class='del'>-MB_OKCANCEL = 1</div><div class='del'>-</div><div class='del'>-message_box = User32['MessageBoxA', 'ILSSI']</div><div class='del'>-r,rs = message_box.call(0, 'ok?', 'error', MB_OKCANCEL)</div><div class='del'>-</div><div class='del'>-case r</div><div class='del'>-when 1</div><div class='del'>-  print("OK!\n")</div><div class='del'>-when 2</div><div class='del'>-  print("Cancel!\n")</div><div class='del'>-end</div><div class='head'>diff --git a/ext/dl/sample/msgbox2.rb b/ext/dl/sample/msgbox2.rb<br/>deleted file mode 100644<br/>index e49846cc5e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/msgbox2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/msgbox2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-# This script works on Windows.</div><div class='del'>-</div><div class='del'>-require 'dl/win32'</div><div class='del'>-</div><div class='del'>-MB_OK = 0</div><div class='del'>-MB_OKCANCEL = 1</div><div class='del'>-</div><div class='del'>-message_box = Win32API.new("user32",'MessageBoxA', 'ISSI', 'I')</div><div class='del'>-r = message_box.call(0, 'ok?', 'error', MB_OKCANCEL)</div><div class='del'>-</div><div class='del'>-case r</div><div class='del'>-when 1</div><div class='del'>-  print("OK!\n")</div><div class='del'>-when 2</div><div class='del'>-  print("Cancel!\n")</div><div class='del'>-else</div><div class='del'>-  p r</div><div class='del'>-end</div><div class='head'>diff --git a/ext/dl/sample/stream.rb b/ext/dl/sample/stream.rb<br/>deleted file mode 100644<br/>index 179836999d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sample/stream.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sample/stream.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-# Display a file name and stream names of a file with those size.</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-require 'dl/import'</div><div class='del'>-</div><div class='del'>-module NTFS</div><div class='del'>-  extend DL::Importable</div><div class='del'>-</div><div class='del'>-  dlload "kernel32.dll"</div><div class='del'>-</div><div class='del'>-  OPEN_EXISTING         = 3</div><div class='del'>-  GENERIC_READ          = 0x80000000</div><div class='del'>-  BACKUP_DATA           = 0x00000001</div><div class='del'>-  BACKUP_ALTERNATE_DATA = 0x00000004</div><div class='del'>-  FILE_SHARE_READ       = 0x00000001</div><div class='del'>-  FILE_FLAG_BACKUP_SEMANTICS = 0x02000000</div><div class='del'>-</div><div class='del'>-  typealias "LPSECURITY_ATTRIBUTES", "void*"</div><div class='del'>-</div><div class='del'>-  extern "BOOL BackupRead(HANDLE, PBYTE, DWORD, PDWORD, BOOL, BOOL, PVOID)"</div><div class='del'>-  extern "BOOL BackupSeek(HANDLE, DWORD, DWORD, PDWORD, PDWORD, PVOID)"</div><div class='del'>-  extern "BOOL CloseHandle(HANDLE)"</div><div class='del'>-  extern "HANDLE CreateFile(LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES,</div><div class='del'>-                            DWORD, DWORD, HANDLE)"</div><div class='del'>-</div><div class='del'>-  module_function</div><div class='del'>-</div><div class='del'>-  def streams(filename)</div><div class='del'>-    status = []</div><div class='del'>-    h = createFile(filename,GENERIC_READ,FILE_SHARE_READ,nil,</div><div class='del'>-		   OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0)</div><div class='del'>-    if( h != 0 )</div><div class='del'>-      begin</div><div class='del'>-	# allocate the memory for backup data used in backupRead().</div><div class='del'>-	data = DL.malloc(DL.sizeof("L5"))</div><div class='del'>-	data.struct!("LLLLL", :id, :attrs, :size_low, :size_high, :name_size)</div><div class='del'>-</div><div class='del'>-	# allocate memories for references to long values used in backupRead().</div><div class='del'>-	context = DL.malloc(DL.sizeof("L"))</div><div class='del'>-	lval = DL.malloc(DL.sizeof("L"))</div><div class='del'>-</div><div class='del'>-	while( backupRead(h, data, data.size, lval, false, false, context) )</div><div class='del'>-	  size = data[:size_low] + (data[:size_high] &lt;&lt; (DL.sizeof("I") * 8))</div><div class='del'>-	  case data[:id]</div><div class='del'>-	  when BACKUP_ALTERNATE_DATA</div><div class='del'>-	    stream_name = DL.malloc(data[:name_size])</div><div class='del'>-	    backupRead(h, stream_name, stream_name.size,</div><div class='del'>-		       lval, false, false, context)</div><div class='del'>-	    name = stream_name[0, stream_name.size]</div><div class='del'>-	    name.tr!("\000","")</div><div class='del'>-	    if( name =~ /^:(.*?):.*$/ )</div><div class='del'>-	      status.push([$1,size])</div><div class='del'>-	    end</div><div class='del'>-	  when BACKUP_DATA</div><div class='del'>-	    status.push([nil,size])</div><div class='del'>-	  else</div><div class='del'>-	    raise(RuntimeError, "unknown data type #{data[:id]}.")</div><div class='del'>-	  end</div><div class='del'>-	  l1 = DL.malloc(DL.sizeof("L"))</div><div class='del'>-	  l2 = DL.malloc(DL.sizeof("L"))</div><div class='del'>-	  if( !backupSeek(h, data[:size_low], data[:size_high], l1, l2, context) )</div><div class='del'>-	    break</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      ensure</div><div class='del'>-	backupRead(h, nil, 0, lval, true, false, context)</div><div class='del'>-	closeHandle(h)</div><div class='del'>-      end</div><div class='del'>-      return status</div><div class='del'>-    else</div><div class='del'>-      raise(RuntimeError, "can't open #{filename}.\n")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ARGV.each{|filename|</div><div class='del'>-  if( File.exist?(filename) )</div><div class='del'>-    NTFS.streams(filename).each{|name,size|</div><div class='del'>-      if( name )</div><div class='del'>-	print("#{filename}:#{name}\t#{size}bytes\n")</div><div class='del'>-      else</div><div class='del'>-	print("#{filename}\t#{size}bytes\n")</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-}</div><div class='head'>diff --git a/ext/dl/sym.c b/ext/dl/sym.c<br/>deleted file mode 100644<br/>index 01e0474f58..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/sym.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/sym.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,992 +0,0 @@</div><div class='del'>-/* -*- C -*-</div><div class='del'>- * $Id$</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include &lt;ruby.h&gt;</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-#include "dl.h"</div><div class='del'>-</div><div class='del'>-VALUE rb_cDLSymbol;</div><div class='del'>-</div><div class='del'>-static const char *</div><div class='del'>-char2type(int ch)</div><div class='del'>-{</div><div class='del'>-  switch (ch) {</div><div class='del'>-  case '0':</div><div class='del'>-    return "void";</div><div class='del'>-  case 'P':</div><div class='del'>-    return "void *";</div><div class='del'>-  case 'p':</div><div class='del'>-    return "void *";</div><div class='del'>-  case 'C':</div><div class='del'>-    return "char";</div><div class='del'>-  case 'c':</div><div class='del'>-    return "char *";</div><div class='del'>-  case 'H':</div><div class='del'>-    return "short";</div><div class='del'>-  case 'h':</div><div class='del'>-    return "short *";</div><div class='del'>-  case 'I':</div><div class='del'>-    return "int";</div><div class='del'>-  case 'i':</div><div class='del'>-    return "int *";</div><div class='del'>-  case 'L':</div><div class='del'>-    return "long";</div><div class='del'>-  case 'l':</div><div class='del'>-    return "long *";</div><div class='del'>-  case 'F':</div><div class='del'>-    return "double";</div><div class='del'>-  case 'f':</div><div class='del'>-    return "double *";</div><div class='del'>-  case 'D':</div><div class='del'>-    return "double";</div><div class='del'>-  case 'd':</div><div class='del'>-    return "double *";</div><div class='del'>-  case 'S':</div><div class='del'>-    return "const char *";</div><div class='del'>-  case 's':</div><div class='del'>-    return "char *";</div><div class='del'>-  case 'A':</div><div class='del'>-    return "[]";</div><div class='del'>-  case 'a':</div><div class='del'>-    return "[]"; /* ?? */</div><div class='del'>-  }</div><div class='del'>-  return NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-dlsym_free(struct sym_data *data)</div><div class='del'>-{</div><div class='del'>-  if( data-&gt;name ){</div><div class='del'>-    DEBUG_CODE({</div><div class='del'>-      printf("dlsym_free(): free(data-&gt;name:%s)\n",data-&gt;name);</div><div class='del'>-    });</div><div class='del'>-    free(data-&gt;name);</div><div class='del'>-  }</div><div class='del'>-  if( data-&gt;type ){</div><div class='del'>-    DEBUG_CODE({</div><div class='del'>-      printf("dlsym_free(): free(data-&gt;type:%s)\n",data-&gt;type);</div><div class='del'>-    });</div><div class='del'>-    free(data-&gt;type);</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlsym_new(void (*func)(), const char *name, const char *type)</div><div class='del'>-{</div><div class='del'>-  VALUE val;</div><div class='del'>-  struct sym_data *data;</div><div class='del'>-  const char *ptype;</div><div class='del'>-</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  if( !type || !type[0] ){</div><div class='del'>-    return rb_dlptr_new((void*)func, 0, 0);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  for( ptype = type; *ptype; ptype ++ ){</div><div class='del'>-    if( ! char2type(*ptype) ){</div><div class='del'>-      rb_raise(rb_eDLTypeError, "unknown type specifier '%c'", *ptype);</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if( func ){</div><div class='del'>-    val = Data_Make_Struct(rb_cDLSymbol, struct sym_data, 0, dlsym_free, data);</div><div class='del'>-    data-&gt;func = func;</div><div class='del'>-    data-&gt;name = name ? strdup(name) : NULL;</div><div class='del'>-    data-&gt;type = type ? strdup(type) : NULL;</div><div class='del'>-    data-&gt;len  = type ? strlen(type) : 0;</div><div class='del'>-#if !(defined(DLSTACK))</div><div class='del'>-    if( data-&gt;len - 1 &gt; MAX_ARG ){</div><div class='del'>-      rb_raise(rb_eDLError, "maximum number of arguments is %d.", MAX_ARG);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    val = Qnil;</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'>-freefunc_t</div><div class='del'>-rb_dlsym2csym(VALUE val)</div><div class='del'>-{</div><div class='del'>-  struct sym_data *data;</div><div class='del'>-  freefunc_t func;</div><div class='del'>-</div><div class='del'>-  if( rb_obj_is_kind_of(val, rb_cDLSymbol) ){</div><div class='del'>-    Data_Get_Struct(val, struct sym_data, data);</div><div class='del'>-    func = data-&gt;func;</div><div class='del'>-  }</div><div class='del'>-  else if( val == Qnil ){</div><div class='del'>-    func = NULL;</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    rb_raise(rb_eTypeError, "DL::Symbol was expected");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return func;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlsym_s_allocate(VALUE klass)</div><div class='del'>-{</div><div class='del'>-  VALUE obj;</div><div class='del'>-  struct sym_data *data;</div><div class='del'>-</div><div class='del'>-  obj = Data_Make_Struct(klass, struct sym_data, 0, dlsym_free, data);</div><div class='del'>-  data-&gt;func = 0;</div><div class='del'>-  data-&gt;name = 0;</div><div class='del'>-  data-&gt;type = 0;</div><div class='del'>-  data-&gt;len  = 0;</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'>-rb_dlsym_initialize(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE addr, name, type;</div><div class='del'>-  struct sym_data *data;</div><div class='del'>-  void *saddr;</div><div class='del'>-  const char *sname, *stype;</div><div class='del'>-</div><div class='del'>-  rb_scan_args(argc, argv, "12", &amp;addr, &amp;name, &amp;type);</div><div class='del'>-</div><div class='del'>-  saddr = (void*)(DLNUM2LONG(rb_Integer(addr)));</div><div class='del'>-  if (!NIL_P(name)) StringValue(name);</div><div class='del'>-  stype = NIL_P(type) ? NULL : StringValuePtr(type);</div><div class='del'>-  sname = NIL_P(name) ? NULL : RSTRING(name)-&gt;ptr;</div><div class='del'>-</div><div class='del'>-  if( saddr ){</div><div class='del'>-    Data_Get_Struct(self, struct sym_data, data);</div><div class='del'>-    if( data-&gt;name ) free(data-&gt;name);</div><div class='del'>-    if( data-&gt;type ) free(data-&gt;type);</div><div class='del'>-    data-&gt;func = saddr;</div><div class='del'>-    data-&gt;name = sname ? strdup(sname) : 0;</div><div class='del'>-    data-&gt;type = stype ? strdup(stype) : 0;</div><div class='del'>-    data-&gt;len  = stype ? strlen(stype) : 0;</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'>-VALUE</div><div class='del'>-rb_s_dlsym_char2type(VALUE self, VALUE ch)</div><div class='del'>-{</div><div class='del'>-  const char *type;</div><div class='del'>-</div><div class='del'>-  type = char2type(StringValuePtr(ch)[0]);</div><div class='del'>-</div><div class='del'>-  if (type == NULL)</div><div class='del'>-    return Qnil;</div><div class='del'>-  else</div><div class='del'>-    return rb_str_new2(type);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlsym_name(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct sym_data *sym;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct sym_data, sym);</div><div class='del'>-  return sym-&gt;name ? rb_tainted_str_new2(sym-&gt;name) : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlsym_proto(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct sym_data *sym;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct sym_data, sym);</div><div class='del'>-  return sym-&gt;type ? rb_tainted_str_new2(sym-&gt;type) : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlsym_cproto(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct sym_data *sym;</div><div class='del'>-  const char *ptype, *typestr;</div><div class='del'>-  size_t len;</div><div class='del'>-  VALUE val;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct sym_data, sym);</div><div class='del'>-</div><div class='del'>-  ptype = sym-&gt;type;</div><div class='del'>-</div><div class='del'>-  if( ptype ){</div><div class='del'>-    typestr = char2type(*ptype++);</div><div class='del'>-    len = strlen(typestr);</div><div class='del'>-    </div><div class='del'>-    val = rb_tainted_str_new(typestr, len);</div><div class='del'>-    if (typestr[len - 1] != '*')</div><div class='del'>-      rb_str_cat(val, " ", 1);</div><div class='del'>-</div><div class='del'>-    if( sym-&gt;name ){</div><div class='del'>-      rb_str_cat2(val, sym-&gt;name);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      rb_str_cat2(val, "(null)");</div><div class='del'>-    }</div><div class='del'>-    rb_str_cat(val, "(", 1);</div><div class='del'>-    </div><div class='del'>-    while (*ptype) {</div><div class='del'>-      const char *ty = char2type(*ptype++);</div><div class='del'>-      rb_str_cat2(val, ty);</div><div class='del'>-      if (*ptype)</div><div class='del'>-	rb_str_cat(val, ", ", 2);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_str_cat(val, ");", 2);</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    val = rb_tainted_str_new2("void (");</div><div class='del'>-    if( sym-&gt;name ){</div><div class='del'>-      rb_str_cat2(val, sym-&gt;name);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      rb_str_cat2(val, "(null)");</div><div class='del'>-    }</div><div class='del'>-    rb_str_cat2(val, ")()");</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'>-VALUE</div><div class='del'>-rb_dlsym_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-  VALUE proto;</div><div class='del'>-  VALUE val;</div><div class='del'>-  char  *str;</div><div class='del'>-  int str_size;</div><div class='del'>-  struct sym_data *sym;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct sym_data, sym);</div><div class='del'>-  proto = rb_dlsym_cproto(self);</div><div class='del'>-</div><div class='del'>-  str_size = RSTRING(proto)-&gt;len + 100;</div><div class='del'>-  str = dlmalloc(str_size);</div><div class='del'>-  snprintf(str, str_size - 1,</div><div class='del'>-          "#&lt;DL::Symbol:0x%lx func=0x%lx '%s'&gt;",</div><div class='del'>-	   sym, sym-&gt;func, RSTRING(proto)-&gt;ptr);</div><div class='del'>-  val = rb_tainted_str_new2(str);</div><div class='del'>-  dlfree(str);</div><div class='del'>-</div><div class='del'>-  return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-stack_size(struct sym_data *sym)</div><div class='del'>-{</div><div class='del'>-  int i;</div><div class='del'>-  int size;</div><div class='del'>-</div><div class='del'>-  size = 0;</div><div class='del'>-  for( i=1; i &lt; sym-&gt;len; i++ ){</div><div class='del'>-    switch(sym-&gt;type[i]){</div><div class='del'>-    case 'C':</div><div class='del'>-    case 'H':</div><div class='del'>-    case 'I':</div><div class='del'>-    case 'L':</div><div class='del'>-      size += sizeof(long);</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      size += sizeof(float);</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      size += sizeof(double);</div><div class='del'>-      break;</div><div class='del'>-    case 'c':</div><div class='del'>-    case 'h':</div><div class='del'>-    case 'i':</div><div class='del'>-    case 'l':</div><div class='del'>-    case 'f':</div><div class='del'>-    case 'd':</div><div class='del'>-    case 'p':</div><div class='del'>-    case 'P':</div><div class='del'>-    case 's':</div><div class='del'>-    case 'S':</div><div class='del'>-    case 'a':</div><div class='del'>-    case 'A':</div><div class='del'>-      size += sizeof(void*);</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      return -(sym-&gt;type[i]);</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-  return size;</div><div class='del'>-}</div><div class='del'>-</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='del'>-VALUE</div><div class='del'>-rb_dlsym_call(int argc, VALUE argv[], VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct sym_data *sym;</div><div class='del'>-  ANY_TYPE *args;</div><div class='del'>-  ANY_TYPE *dargs;</div><div class='del'>-  ANY_TYPE ret;</div><div class='del'>-  int   *dtypes;</div><div class='del'>-  VALUE val;</div><div class='del'>-  VALUE dvals;</div><div class='del'>-  int i;</div><div class='del'>-  long ftype;</div><div class='del'>-  void *func;</div><div class='del'>-</div><div class='del'>-  rb_secure_update(self);</div><div class='del'>-  Data_Get_Struct(self, struct sym_data, sym);</div><div class='del'>-  DEBUG_CODE({</div><div class='del'>-    printf("rb_dlsym_call(): type = '%s', func = 0x%x\n", sym-&gt;type, sym-&gt;func);</div><div class='del'>-  });</div><div class='del'>-  if( (sym-&gt;len - 1) != argc ){</div><div class='del'>-    rb_raise(rb_eArgError, "%d arguments are needed", sym-&gt;len - 1);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  ftype = 0;</div><div class='del'>-  dvals = Qnil;</div><div class='del'>-</div><div class='del'>-  args = ALLOC_N(ANY_TYPE, sym-&gt;len - 1);</div><div class='del'>-  dargs = ALLOC_N(ANY_TYPE, sym-&gt;len - 1);</div><div class='del'>-  dtypes = ALLOC_N(int, sym-&gt;len - 1);</div><div class='del'>-#define FREE_ARGS {xfree(args); xfree(dargs); xfree(dtypes);}</div><div class='del'>-</div><div class='del'>-  for( i = sym-&gt;len - 2; i &gt;= 0; i-- ){</div><div class='del'>-    dtypes[i] = 0;</div><div class='del'>-</div><div class='del'>-    switch( sym-&gt;type[i+1] ){</div><div class='del'>-    case 'p':</div><div class='del'>-      dtypes[i] = 'p';</div><div class='del'>-    case 'P':</div><div class='del'>-      {</div><div class='del'>-	struct ptr_data *data;</div><div class='del'>-	VALUE pval;</div><div class='del'>-</div><div class='del'>-	if( argv[i] == Qnil ){</div><div class='del'>-	  ANY2P(args[i]) = DLVOIDP(0);</div><div class='del'>-	}</div><div class='del'>-	else{</div><div class='del'>-	  if( rb_obj_is_kind_of(argv[i], rb_cDLPtrData) ){</div><div class='del'>-	    pval = argv[i];</div><div class='del'>-	  }</div><div class='del'>-	  else{</div><div class='del'>-	    pval = rb_funcall(argv[i], rb_intern("to_ptr"), 0);</div><div class='del'>-	    if( !rb_obj_is_kind_of(pval, rb_cDLPtrData) ){</div><div class='del'>-	      rb_raise(rb_eDLTypeError, "unexpected type of argument #%d", i);</div><div class='del'>-	    }</div><div class='del'>-	  }</div><div class='del'>-	  Data_Get_Struct(pval, struct ptr_data, data);</div><div class='del'>-	  ANY2P(args[i]) = DLVOIDP(data-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-      }</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'a':</div><div class='del'>-      dtypes[i] = 'a';</div><div class='del'>-    case 'A':</div><div class='del'>-      if( argv[i] == Qnil ){</div><div class='del'>-	ANY2P(args[i]) = DLVOIDP(0);</div><div class='del'>-      }</div><div class='del'>-      else{</div><div class='del'>-	ANY2P(args[i]) = DLVOIDP(rb_ary2cary(0, argv[i], NULL));</div><div class='del'>-      }</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'C':</div><div class='del'>-      ANY2C(args[i]) = DLCHAR(NUM2CHR(argv[i]));</div><div class='del'>-      PUSH_C(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'c':</div><div class='del'>-      ANY2C(dargs[i]) = DLCHAR(NUM2CHR(argv[i]));</div><div class='del'>-      ANY2P(args[i]) = DLVOIDP(&amp;(ANY2C(dargs[i])));</div><div class='del'>-      dtypes[i] = 'c';</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'H':</div><div class='del'>-      ANY2H(args[i]) = DLSHORT(NUM2INT(argv[i]));</div><div class='del'>-      PUSH_C(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'h':</div><div class='del'>-      ANY2H(dargs[i]) = DLSHORT(NUM2INT(argv[i]));</div><div class='del'>-      ANY2P(args[i]) = DLVOIDP(&amp;(ANY2H(dargs[i])));</div><div class='del'>-      dtypes[i] = 'h';</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'I':</div><div class='del'>-      ANY2I(args[i]) = DLINT(NUM2INT(argv[i]));</div><div class='del'>-      PUSH_I(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'i':</div><div class='del'>-      ANY2I(dargs[i]) = DLINT(NUM2INT(argv[i]));</div><div class='del'>-      ANY2P(args[i]) = DLVOIDP(&amp;(ANY2I(dargs[i])));</div><div class='del'>-      dtypes[i] = 'i';</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'L':</div><div class='del'>-      ANY2L(args[i]) = DLNUM2LONG(argv[i]);</div><div class='del'>-      PUSH_L(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'l':</div><div class='del'>-      ANY2L(dargs[i]) = DLNUM2LONG(argv[i]);</div><div class='del'>-      ANY2P(args[i]) = DLVOIDP(&amp;(ANY2L(dargs[i])));</div><div class='del'>-      dtypes[i] = 'l';</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      Check_Type(argv[i], T_FLOAT);</div><div class='del'>-      ANY2F(args[i]) = DLFLOAT(RFLOAT(argv[i])-&gt;value);</div><div class='del'>-      PUSH_F(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'f':</div><div class='del'>-      Check_Type(argv[i], T_FLOAT);</div><div class='del'>-      ANY2F(dargs[i]) = DLFLOAT(RFLOAT(argv[i])-&gt;value);</div><div class='del'>-      ANY2P(args[i]) = DLVOIDP(&amp;(ANY2F(dargs[i])));</div><div class='del'>-      dtypes[i] = 'f';</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      Check_Type(argv[i], T_FLOAT);</div><div class='del'>-      ANY2D(args[i]) = RFLOAT(argv[i])-&gt;value;</div><div class='del'>-      PUSH_D(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'd':</div><div class='del'>-      Check_Type(argv[i], T_FLOAT);</div><div class='del'>-      ANY2D(dargs[i]) = RFLOAT(argv[i])-&gt;value;</div><div class='del'>-      ANY2P(args[i]) = DLVOIDP(&amp;(ANY2D(dargs[i])));</div><div class='del'>-      dtypes[i] = 'd';</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    case 'S':</div><div class='del'>-      if( argv[i] == Qnil ){</div><div class='del'>-	ANY2S(args[i]) = DLSTR(0);</div><div class='del'>-      }</div><div class='del'>-      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='del'>-      }</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    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='del'>-      }</div><div class='del'>-      PUSH_P(ftype);</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      FREE_ARGS;</div><div class='del'>-      rb_raise(rb_eDLTypeError,</div><div class='del'>-	       "unknown type '%c' of the return value.",</div><div class='del'>-	       sym-&gt;type[i+1]);</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  switch( sym-&gt;type[0] ){</div><div class='del'>-  case '0':</div><div class='del'>-    PUSH_0(ftype);</div><div class='del'>-    break;</div><div class='del'>-  case 'P':</div><div class='del'>-  case 'p':</div><div class='del'>-  case 'S':</div><div class='del'>-  case 's':</div><div class='del'>-  case 'A':</div><div class='del'>-  case 'a':</div><div class='del'>-    PUSH_P(ftype);</div><div class='del'>-    break;</div><div class='del'>-  case 'C':</div><div class='del'>-  case 'c':</div><div class='del'>-    PUSH_C(ftype);</div><div class='del'>-    break;</div><div class='del'>-  case 'H':</div><div class='del'>-  case 'h':</div><div class='del'>-    PUSH_H(ftype);</div><div class='del'>-    break;</div><div class='del'>-  case 'I':</div><div class='del'>-  case 'i':</div><div class='del'>-    PUSH_I(ftype);</div><div class='del'>-    break;</div><div class='del'>-  case 'L':</div><div class='del'>-  case 'l':</div><div class='del'>-    PUSH_L(ftype);</div><div class='del'>-    break;</div><div class='del'>-  case 'F':</div><div class='del'>-  case 'f':</div><div class='del'>-    PUSH_F(ftype);</div><div class='del'>-    break;</div><div class='del'>-  case 'D':</div><div class='del'>-  case 'd':</div><div class='del'>-    PUSH_D(ftype);</div><div class='del'>-    break;</div><div class='del'>-  default:</div><div class='del'>-    FREE_ARGS;</div><div class='del'>-    rb_raise(rb_eDLTypeError,</div><div class='del'>-	     "unknown type `%c' of the return value.",</div><div class='del'>-	     sym-&gt;type[0]);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  func = sym-&gt;func;</div><div class='del'>-</div><div class='del'>-#if defined(DLSTACK)</div><div class='del'>-  {</div><div class='del'>-#if defined(DLSTACK_SIZE)</div><div class='del'>-  int  stk_size;</div><div class='del'>-  long stack[DLSTACK_SIZE];</div><div class='del'>-  long *sp;</div><div class='del'>-</div><div class='del'>-  sp = stack;</div><div class='del'>-  stk_size = stack_size(sym);</div><div class='del'>-  if( stk_size &lt; 0 ){</div><div class='del'>-    FREE_ARGS;</div><div class='del'>-    rb_raise(rb_eDLTypeError, "unknown type '%c'.", -stk_size);</div><div class='del'>-  }</div><div class='del'>-  else if( stk_size &gt; (int)(DLSTACK_SIZE) ){</div><div class='del'>-    FREE_ARGS;</div><div class='del'>-    rb_raise(rb_eArgError, "too many arguments.");</div><div class='del'>-  }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-  DLSTACK_START(sym);</div><div class='del'>-</div><div class='del'>-#if defined(DLSTACK_REVERSE)</div><div class='del'>-  for( i = sym-&gt;len - 2; i &gt;= 0; i-- )</div><div class='del'>-#else</div><div class='del'>-  for( i = 0; i &lt;= sym-&gt;len -2; i++ )</div><div class='del'>-#endif</div><div class='del'>-  {</div><div class='del'>-    switch( sym-&gt;type[i+1] ){</div><div class='del'>-    case 'p':</div><div class='del'>-    case 'P':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2P(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'a':</div><div class='del'>-    case 'A':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2P(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'C':</div><div class='del'>-      DLSTACK_PUSH_C(ANY2C(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'c':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2P(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'H':</div><div class='del'>-      DLSTACK_PUSH_H(ANY2H(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'h':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2P(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'I':</div><div class='del'>-      DLSTACK_PUSH_I(ANY2I(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'i':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2P(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'L':</div><div class='del'>-      DLSTACK_PUSH_L(ANY2L(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'l':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2P(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'F':</div><div class='del'>-      DLSTACK_PUSH_F(ANY2F(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'f':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2P(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'D':</div><div class='del'>-      DLSTACK_PUSH_D(ANY2D(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'd':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2P(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    case 'S':</div><div class='del'>-    case 's':</div><div class='del'>-      DLSTACK_PUSH_P(ANY2S(args[i]));</div><div class='del'>-      break;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-  DLSTACK_END(sym-&gt;type);</div><div class='del'>-</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='del'>-  {</div><div class='del'>-    switch( sym-&gt;type[0] ){</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.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.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.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.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.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.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.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.s = f(DLSTACK_ARGS);</div><div class='del'>-      }</div><div class='del'>-      break;</div><div class='del'>-    default:</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'>-  }</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='del'>-  }</div><div class='del'>-#else /* defined(DLSTACK) */</div><div class='del'>-  switch(ftype){</div><div class='del'>-#include "call.func"</div><div class='del'>-  default:</div><div class='del'>-    FREE_ARGS;</div><div class='del'>-    rb_raise(rb_eDLTypeError, "unsupported function type `%s'", sym-&gt;type);</div><div class='del'>-  }</div><div class='del'>-#endif /* defined(DLSTACK) */</div><div class='del'>-</div><div class='del'>-  switch( sym-&gt;type[0] ){</div><div class='del'>-  case '0':</div><div class='del'>-    val = Qnil;</div><div class='del'>-    break;</div><div class='del'>-  case 'P':</div><div class='del'>-    val = rb_dlptr_new((void*)(ANY2P(ret)), 0, 0);</div><div class='del'>-    break;</div><div class='del'>-  case 'p':</div><div class='del'>-    val = rb_dlptr_new((void*)(ANY2P(ret)), 0, dlfree);</div><div class='del'>-    break;</div><div class='del'>-  case 'C':</div><div class='del'>-  case 'c':</div><div class='del'>-    val = CHR2FIX((char)(ANY2C(ret)));</div><div class='del'>-    break;</div><div class='del'>-  case 'H':</div><div class='del'>-  case 'h':</div><div class='del'>-    val = INT2NUM((short)(ANY2H(ret)));</div><div class='del'>-    break;</div><div class='del'>-  case 'I':</div><div class='del'>-  case 'i':</div><div class='del'>-    val = INT2NUM((int)(ANY2I(ret)));</div><div class='del'>-    break;</div><div class='del'>-  case 'L':</div><div class='del'>-  case 'l':</div><div class='del'>-    val = DLLONG2NUM((long)(ANY2L(ret)));</div><div class='del'>-    break;</div><div class='del'>-  case 'F':</div><div class='del'>-  case 'f':</div><div class='del'>-    val = rb_float_new((double)(ANY2F(ret)));</div><div class='del'>-    break;</div><div class='del'>-  case 'D':</div><div class='del'>-  case 'd':</div><div class='del'>-    val = rb_float_new((double)(ANY2D(ret)));</div><div class='del'>-    break;</div><div class='del'>-  case 'S':</div><div class='del'>-    if( ANY2S(ret) ){</div><div class='del'>-      val = rb_tainted_str_new2((char*)(ANY2S(ret)));</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      val = Qnil;</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  case 's':</div><div class='del'>-    if( ANY2S(ret) ){</div><div class='del'>-      val = rb_tainted_str_new2((char*)(ANY2S(ret)));</div><div class='del'>-      DEBUG_CODE({</div><div class='del'>-	printf("dlfree(%s)\n",(char*)(ANY2S(ret)));</div><div class='del'>-      });</div><div class='del'>-      dlfree((void*)(ANY2S(ret)));</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      val = Qnil;</div><div class='del'>-    }</div><div class='del'>-    break;</div><div class='del'>-  default:</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'>-</div><div class='del'>-  dvals = rb_ary_new();</div><div class='del'>-  for( i = 0; i &lt;= sym-&gt;len - 2; i++ ){</div><div class='del'>-    if( dtypes[i] ){</div><div class='del'>-      switch( dtypes[i] ){</div><div class='del'>-      case 'c':</div><div class='del'>-	rb_ary_push(dvals, CHR2FIX(*((char*)(ANY2P(args[i])))));</div><div class='del'>-	break;</div><div class='del'>-      case 'h':</div><div class='del'>-	rb_ary_push(dvals, INT2NUM(*((short*)(ANY2P(args[i])))));</div><div class='del'>-	break;</div><div class='del'>-      case 'i':</div><div class='del'>-	rb_ary_push(dvals, INT2NUM(*((int*)(ANY2P(args[i])))));</div><div class='del'>-	break;</div><div class='del'>-      case 'l':</div><div class='del'>-        rb_ary_push(dvals, DLLONG2NUM(*((long*)(ANY2P(args[i])))));</div><div class='del'>-        break;</div><div class='del'>-      case 'f':</div><div class='del'>-	rb_ary_push(dvals, rb_float_new(*((float*)(ANY2P(args[i])))));</div><div class='del'>-	break;</div><div class='del'>-      case 'd':</div><div class='del'>-	rb_ary_push(dvals, rb_float_new(*((double*)(ANY2P(args[i])))));</div><div class='del'>-	break;</div><div class='del'>-      case 'p':</div><div class='del'>-	rb_ary_push(dvals, rb_dlptr_new((void*)(ANY2P(args[i])), 0, 0));</div><div class='del'>-	break;</div><div class='del'>-      case 'a':</div><div class='del'>-	rb_ary_push(dvals, rb_dlptr_new((void*)ANY2P(args[i]), 0, 0));</div><div class='del'>-	break;</div><div class='del'>-      case 's':</div><div class='del'>-	rb_ary_push(dvals, rb_tainted_str_new2((char*)ANY2S(args[i])));</div><div class='del'>-	DEBUG_CODE({</div><div class='del'>-	  printf("dlfree(%s)\n",(char*)ANY2S(args[i]));</div><div class='del'>-	});</div><div class='del'>-	dlfree((void*)ANY2S(args[i]));</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	{</div><div class='del'>-	  char c = dtypes[i];</div><div class='del'>-	  FREE_ARGS;</div><div class='del'>-	  rb_raise(rb_eRuntimeError, "unknown argument type '%c'", i, c);</div><div class='del'>-	}</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-      switch( sym-&gt;type[i+1] ){</div><div class='del'>-      case 'A':</div><div class='del'>-	dlfree((void*)ANY2P(args[i]));</div><div class='del'>-	break;</div><div class='del'>-      }</div><div class='del'>-      rb_ary_push(dvals, argv[i]);</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  FREE_ARGS;</div><div class='del'>-#undef FREE_ARGS</div><div class='del'>-  return rb_assoc_new(val,dvals);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlsym_to_i(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct sym_data *sym;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct sym_data, sym);</div><div class='del'>-  return DLLONG2NUM(sym);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_dlsym_to_ptr(VALUE self)</div><div class='del'>-{</div><div class='del'>-  struct sym_data *sym;</div><div class='del'>-</div><div class='del'>-  Data_Get_Struct(self, struct sym_data, sym);</div><div class='del'>-  return rb_dlptr_new(sym-&gt;func, sizeof(freefunc_t), 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_dlsym()</div><div class='del'>-{</div><div class='del'>-  rb_cDLSymbol = rb_define_class_under(rb_mDL, "Symbol", rb_cObject);</div><div class='del'>-  rb_define_alloc_func(rb_cDLSymbol, rb_dlsym_s_allocate);</div><div class='del'>-  rb_define_singleton_method(rb_cDLSymbol, "char2type", rb_s_dlsym_char2type, 1);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "initialize", rb_dlsym_initialize, -1);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "call", rb_dlsym_call, -1);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "[]",   rb_dlsym_call, -1);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "name", rb_dlsym_name, 0);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "proto", rb_dlsym_proto, 0);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "cproto", rb_dlsym_cproto, 0);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "inspect", rb_dlsym_inspect, 0);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "to_s", rb_dlsym_cproto, 0);</div><div class='del'>-  rb_define_method(rb_cDLSymbol, "to_ptr", rb_dlsym_to_ptr, 0);</div><div class='del'>-  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='del'>-}</div><div class='head'>diff --git a/ext/dl/test/libtest.def b/ext/dl/test/libtest.def<br/>deleted file mode 100644<br/>index 8ecefc917b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/test/libtest.def?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/test/libtest.def</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,28 +0,0 @@</div><div class='del'>-EXPORTS</div><div class='del'>-test_alloc_test_struct</div><div class='del'>-test_append</div><div class='del'>-test_arylen</div><div class='del'>-test_c2i</div><div class='del'>-test_call_func1</div><div class='del'>-test_callback1</div><div class='del'>-test_close</div><div class='del'>-test_d2f</div><div class='del'>-test_f2d</div><div class='del'>-test_fill_test_struct</div><div class='del'>-test_fill_test_union</div><div class='del'>-test_gets</div><div class='del'>-test_i2c</div><div class='del'>-test_init</div><div class='del'>-test_isucc</div><div class='del'>-test_lcc</div><div class='del'>-test_lsucc</div><div class='del'>-test_open</div><div class='del'>-test_strcat</div><div class='del'>-test_strlen</div><div class='del'>-test_succ</div><div class='del'>-test_data_init</div><div class='del'>-test_data_add</div><div class='del'>-test_data_aref</div><div class='del'>-test_set_long_value</div><div class='del'>-test_get_long_value</div><div class='del'>-internal_long_value</div><div class='head'>diff --git a/ext/dl/test/test.c b/ext/dl/test/test.c<br/>deleted file mode 100644<br/>index 7321379390..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/test/test.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/test/test.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,247 +0,0 @@</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'>-static char internal_string[] = "internal_string";</div><div class='del'>-long internal_long_value = 100;</div><div class='del'>-</div><div class='del'>-struct test_struct {</div><div class='del'>-  char c;</div><div class='del'>-  long l;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-union test_union {</div><div class='del'>-  char c;</div><div class='del'>-  int  i;</div><div class='del'>-  long l;</div><div class='del'>-  void *p;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct test_data {</div><div class='del'>-  char name[1024];</div><div class='del'>-  struct test_data *next;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-test_get_long_value()</div><div class='del'>-{</div><div class='del'>-  return internal_long_value;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-test_set_long_value(long l)</div><div class='del'>-{</div><div class='del'>-  internal_long_value = l;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-test_fill_test_struct(struct test_struct *ptr, char c, long l)</div><div class='del'>-{</div><div class='del'>-  ptr-&gt;c = c;</div><div class='del'>-  ptr-&gt;l = l;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-test_fill_test_union(union test_union *ptr, long l)</div><div class='del'>-{</div><div class='del'>-  ptr-&gt;l = l;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct test_struct *</div><div class='del'>-test_alloc_test_struct(char c, long l)</div><div class='del'>-{</div><div class='del'>-  struct test_struct *data;</div><div class='del'>-</div><div class='del'>-  data = (struct test_struct *)malloc(sizeof(struct test_struct));</div><div class='del'>-  data-&gt;c = c;</div><div class='del'>-  data-&gt;l = l;</div><div class='del'>-</div><div class='del'>-  return data;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-test_c2i(char c)</div><div class='del'>-{</div><div class='del'>-  return (int)c;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-char</div><div class='del'>-test_i2c(int i)</div><div class='del'>-{</div><div class='del'>-  return (char)i;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-test_lcc(char c1, char c2)</div><div class='del'>-{</div><div class='del'>-  return (long)(c1 + c2);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-double</div><div class='del'>-test_f2d(float f)</div><div class='del'>-{</div><div class='del'>-  double d;</div><div class='del'>-  d = f;</div><div class='del'>-  return d;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-float</div><div class='del'>-test_d2f(double d)</div><div class='del'>-{</div><div class='del'>-  float f;</div><div class='del'>-  f = d;</div><div class='del'>-  return f;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-test_strlen(const char *str)</div><div class='del'>-{</div><div class='del'>-  return strlen(str);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-test_isucc(int i)</div><div class='del'>-{</div><div class='del'>-  return (i+1);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-test_lsucc(long l)</div><div class='del'>-{</div><div class='del'>-  return (l+1);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-test_succ(long *l)</div><div class='del'>-{</div><div class='del'>-  (*l)++;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-test_strcat(char *str1, const char *str2)</div><div class='del'>-{</div><div class='del'>-  return strcat(str1, str2);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-test_arylen(char *ary[])</div><div class='del'>-{</div><div class='del'>-  int i;</div><div class='del'>-  for( i=0; ary[i]; i++ ){};</div><div class='del'>-  return i;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-test_append(char *ary[], int len, char *astr)</div><div class='del'>-{</div><div class='del'>-  int i;</div><div class='del'>-  int size1,size2;</div><div class='del'>-  char *str;</div><div class='del'>-</div><div class='del'>-  size2 = strlen(astr);</div><div class='del'>-</div><div class='del'>-  for( i=0; i &lt;= len - 1; i++ ){</div><div class='del'>-    size1 = strlen(ary[i]);</div><div class='del'>-    str = (char*)malloc(size1 + size2 + 1);</div><div class='del'>-    strcpy(str, ary[i]);</div><div class='del'>-    strcat(str, astr);</div><div class='del'>-    ary[i] = str;</div><div class='del'>-  };</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-test_init(int *argc, char **argv[])</div><div class='del'>-{</div><div class='del'>-  int i;</div><div class='del'>-  char s[256];</div><div class='del'>-</div><div class='del'>-  for( i=0; i &lt; (*argc); i++ ){</div><div class='del'>-    sprintf(s, "arg%d", i);</div><div class='del'>-    if( strcmp((*argv)[i], s) != 0 ){</div><div class='del'>-      return 1;</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'>-FILE *</div><div class='del'>-test_open(const char *filename, const char *mode)</div><div class='del'>-{</div><div class='del'>-  FILE *file;</div><div class='del'>-  file = fopen(filename,mode);</div><div class='del'>-  return file;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-test_close(FILE *file)</div><div class='del'>-{</div><div class='del'>-  fclose(file);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-char *</div><div class='del'>-test_gets(char *s, int size, FILE *f)</div><div class='del'>-{</div><div class='del'>-  return fgets(s,size,f);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-typedef int callback1_t(int, char *);</div><div class='del'>-#define CALLBACK_MSG "callback message"</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-test_callback1(int err, const char *msg)</div><div class='del'>-{</div><div class='del'>-  if( strcmp(msg, CALLBACK_MSG) == 0 ){</div><div class='del'>-    return 1;</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    return 0;</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-test_call_func1(callback1_t *func)</div><div class='del'>-{</div><div class='del'>-  if( func ){</div><div class='del'>-    return (*func)(0, CALLBACK_MSG);</div><div class='del'>-  }</div><div class='del'>-  else{</div><div class='del'>-    return 0;</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct test_data *</div><div class='del'>-test_data_init()</div><div class='del'>-{</div><div class='del'>-  struct test_data *data;</div><div class='del'>-</div><div class='del'>-  data = (struct test_data *)malloc(sizeof(struct test_data));</div><div class='del'>-  data-&gt;next = NULL;</div><div class='del'>-  memset(data-&gt;name, 0, 1024);</div><div class='del'>-</div><div class='del'>-  return data;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-test_data_add(struct test_data *list, const char *name)</div><div class='del'>-{</div><div class='del'>-  struct test_data *data;</div><div class='del'>-</div><div class='del'>-  data = (struct test_data *)malloc(sizeof(struct test_data));</div><div class='del'>-  memset(data-&gt;name, 0, 1024);</div><div class='del'>-  strncpy(data-&gt;name, name, 1024);</div><div class='del'>-  data-&gt;next = list-&gt;next;</div><div class='del'>-  list-&gt;next = data;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct test_data *</div><div class='del'>-test_data_aref(struct test_data *list, int i)</div><div class='del'>-{</div><div class='del'>-  struct test_data *data;</div><div class='del'>-  int j;</div><div class='del'>-</div><div class='del'>-  for( data = list-&gt;next, j=0; data; data = data-&gt;next, j++ ){</div><div class='del'>-    if( i == j ){</div><div class='del'>-      return data;</div><div class='del'>-    };</div><div class='del'>-  };</div><div class='del'>-  return NULL;</div><div class='del'>-};</div><div class='head'>diff --git a/ext/dl/test/test.rb b/ext/dl/test/test.rb<br/>deleted file mode 100644<br/>index bf8dfc18e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/test/test.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/test/test.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,306 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'dl'</div><div class='del'>-require 'dl/import'</div><div class='del'>-</div><div class='del'>-$FAIL = 0</div><div class='del'>-$TOTAL = 0</div><div class='del'>-</div><div class='del'>-def assert(label, ty, *conds)</div><div class='del'>-  $TOTAL += 1</div><div class='del'>-  cond = !conds.include?(false)</div><div class='del'>-  if( cond )</div><div class='del'>-    printf("succeed in `#{label}'\n")</div><div class='del'>-  else</div><div class='del'>-    $FAIL += 1</div><div class='del'>-    case ty</div><div class='del'>-    when :may</div><div class='del'>-      printf("fail in `#{label}' ... expected\n")</div><div class='del'>-    when :must</div><div class='del'>-      printf("fail in `#{label}' ... unexpected\n")</div><div class='del'>-    when :raise</div><div class='del'>-      raise(RuntimeError, "fail in `#{label}'")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def debug(*xs)</div><div class='del'>-  if( $DEBUG )</div><div class='del'>-    xs.each{|x|</div><div class='del'>-      p x</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-print("DLSTACK   = #{DL::DLSTACK}\n")</div><div class='del'>-print("MAX_ARG   = #{DL::MAX_ARG}\n")</div><div class='del'>-print("\n")</div><div class='del'>-print("DL::FREE = #{DL::FREE.inspect}\n")</div><div class='del'>-print("\n")</div><div class='del'>-</div><div class='del'>-$LIB = nil</div><div class='del'>-if( !$LIB &amp;&amp; File.exist?("libtest.so") )</div><div class='del'>-  $LIB = "./libtest.so"</div><div class='del'>-end</div><div class='del'>-if( !$LIB &amp;&amp; File.exist?("test/libtest.so") )</div><div class='del'>-  $LIB = "./test/libtest.so"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module LIBTest</div><div class='del'>-  extend DL::Importable</div><div class='del'>-</div><div class='del'>-  dlload($LIB)</div><div class='del'>-  extern "int test_c2i(char)"</div><div class='del'>-  extern "char test_i2c(int)"</div><div class='del'>-  extern "long test_lcc(char, char)"</div><div class='del'>-  extern "double test_f2d(float)"</div><div class='del'>-  extern "float test_d2f(double)"</div><div class='del'>-  extern "int test_strlen(char*)"</div><div class='del'>-  extern "int test_isucc(int)"</div><div class='del'>-  extern "long test_lsucc(long)"</div><div class='del'>-  extern "void test_succ(long *)"</div><div class='del'>-  extern "int test_arylen(int [])"</div><div class='del'>-  extern "void test_append(char*[], int, char *)"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-DL.dlopen($LIB){|h|</div><div class='del'>-  c2i = h["test_c2i","IC"]</div><div class='del'>-  debug c2i</div><div class='del'>-  r,rs = c2i[?a]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("c2i", :may, r == ?a)</div><div class='del'>-  assert("extern c2i", :must, r == LIBTest.test_c2i(?a))</div><div class='del'>-</div><div class='del'>-  i2c = h["test_i2c","CI"]</div><div class='del'>-  debug i2c</div><div class='del'>-  r,rs = i2c[?a]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("i2c", :may, r == ?a)</div><div class='del'>-  assert("exern i2c", :must, r == LIBTest.test_i2c(?a))</div><div class='del'>-</div><div class='del'>-  lcc = h["test_lcc","LCC"]</div><div class='del'>-  debug lcc</div><div class='del'>-  r,rs = lcc[1,2]</div><div class='del'>-  assert("lcc", :may, r == 3)</div><div class='del'>-  assert("extern lcc", :must, r == LIBTest.test_lcc(1,2))</div><div class='del'>-</div><div class='del'>-  f2d = h["test_f2d","DF"]</div><div class='del'>-  debug f2d</div><div class='del'>-  r,rs = f2d[20.001]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("f2d", :may, r.to_i == 20)</div><div class='del'>-  assert("extern f2d", :must, r = LIBTest.test_f2d(20.001))</div><div class='del'>-</div><div class='del'>-  d2f = h["test_d2f","FD"]</div><div class='del'>-  debug d2f</div><div class='del'>-  r,rs = d2f[20.001]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("d2f", :may, r.to_i == 20)</div><div class='del'>-  assert("extern d2f", :must, r == LIBTest.test_d2f(20.001))</div><div class='del'>-</div><div class='del'>-  strlen = h["test_strlen","IS"]</div><div class='del'>-  debug strlen</div><div class='del'>-  r,rs = strlen["0123456789"]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("strlen", :must, r == 10)</div><div class='del'>-  assert("extern strlen", :must, r == LIBTest.test_strlen("0123456789"))</div><div class='del'>-</div><div class='del'>-  isucc = h["test_isucc","II"]</div><div class='del'>-  debug isucc</div><div class='del'>-  r,rs = isucc[2]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("isucc", :must, r == 3)</div><div class='del'>-  assert("extern isucc", :must, r == LIBTest.test_isucc(2))</div><div class='del'>-</div><div class='del'>-  lsucc = h["test_lsucc","LL"]</div><div class='del'>-  debug lsucc</div><div class='del'>-  r,rs = lsucc[10000000]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("lsucc", :must, r == 10000001)</div><div class='del'>-  assert("extern lsucc", :must, r == LIBTest.test_lsucc(10000000))</div><div class='del'>-</div><div class='del'>-  succ = h["test_succ","0l"]</div><div class='del'>-  debug succ</div><div class='del'>-  r,rs = succ[0]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("succ", :must, rs[0] == 1)</div><div class='del'>-  l = DL.malloc(DL.sizeof("L"))</div><div class='del'>-  l.struct!("L",:lval)</div><div class='del'>-  LIBTest.test_succ(l)</div><div class='del'>-  assert("extern succ", :must, rs[0] == l[:lval])</div><div class='del'>-</div><div class='del'>-  arylen = h["test_arylen","IA"]</div><div class='del'>-  debug arylen</div><div class='del'>-  r,rs = arylen[["a","b","c","d",nil]]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("arylen", :must, r == 4)</div><div class='del'>-</div><div class='del'>-  arylen = h["test_arylen","IP"]</div><div class='del'>-  debug arylen</div><div class='del'>-  r,rs = arylen[["a","b","c","d",nil]]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("arylen", :must, r == 4)</div><div class='del'>-  assert("extern arylen", :must, r == LIBTest.test_arylen(["a","b","c","d",nil]))</div><div class='del'>-</div><div class='del'>-  append = h["test_append","0aIS"]</div><div class='del'>-  debug append</div><div class='del'>-  r,rs = append[["a","b","c"],3,"x"]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("append", :must, rs[0].to_a('S',3) == ["ax","bx","cx"])</div><div class='del'>-</div><div class='del'>-  LIBTest.test_append(["a","b","c"],3,"x")</div><div class='del'>-  assert("extern append", :must, rs[0].to_a('S',3) == LIBTest._args_[0].to_a('S',3))</div><div class='del'>-</div><div class='del'>-  strcat = h["test_strcat","SsS"]</div><div class='del'>-  debug strcat</div><div class='del'>-  r,rs = strcat["abc\0","x"]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("strcat", :must, rs[0].to_s == "abcx")</div><div class='del'>-</div><div class='del'>-  init = h["test_init","IiP"]</div><div class='del'>-  debug init</div><div class='del'>-  argc = 3</div><div class='del'>-  argv = ["arg0","arg1","arg2"].to_ptr</div><div class='del'>-  r,rs = init[argc, argv.ref]</div><div class='del'>-  assert("init", :must, r == 0)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-h = DL.dlopen($LIB)</div><div class='del'>-</div><div class='del'>-sym_open = h["test_open", "PSS"]</div><div class='del'>-sym_gets = h["test_gets", "SsIP"]</div><div class='del'>-sym_close = h["test_close", "0P"]</div><div class='del'>-debug sym_open,sym_gets,sym_close</div><div class='del'>-</div><div class='del'>-line = "Hello world!\n"</div><div class='del'>-File.open("tmp.txt", "w"){|f|</div><div class='del'>-  f.print(line)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-fp,rs = sym_open["tmp.txt", "r"]</div><div class='del'>-if( fp )</div><div class='del'>-  fp.free = sym_close</div><div class='del'>-  r,rs = sym_gets[" " * 256, 256, fp]</div><div class='del'>-  debug r,rs</div><div class='del'>-  assert("open,gets", :must, rs[0] == line)</div><div class='del'>-  ObjectSpace.define_finalizer(fp) {File.unlink("tmp.txt")}</div><div class='del'>-  fp = nil</div><div class='del'>-else</div><div class='del'>-  assert("open,gets", :must, line == nil)</div><div class='del'>-  File.unlink("tmp.txt")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-callback1 = h["test_callback1"]</div><div class='del'>-debug callback1</div><div class='del'>-r,rs = h["test_call_func1", "IP"][callback1]</div><div class='del'>-debug r,rs</div><div class='del'>-assert("callback1", :must, r == 1)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-callback2 = DL.callback("LLP"){|num,ptr|</div><div class='del'>-  msg = ptr.to_s</div><div class='del'>-  if( msg == "callback message" )</div><div class='del'>-    2</div><div class='del'>-  else</div><div class='del'>-    0</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-debug callback2</div><div class='del'>-r,rs = h["test_call_func1", "IP"][callback2]</div><div class='del'>-debug r,rs</div><div class='del'>-assert("callback2", :must, r == 2)</div><div class='del'>-DL.remove_callback(callback2)</div><div class='del'>-</div><div class='del'>-ptr = DL.malloc(DL.sizeof('CL'))</div><div class='del'>-ptr.struct!("CL", :c, :l)</div><div class='del'>-ptr["c"] = 0</div><div class='del'>-ptr["l"] = 0</div><div class='del'>-r,rs = h["test_fill_test_struct","0PIL"][ptr,100,1000]</div><div class='del'>-debug r,rs</div><div class='del'>-assert("fill_test_struct", :must, ptr["c"] == 100, ptr["l"] == 1000)</div><div class='del'>-assert("fill_test_struct", :must, ptr[:c] == 100, ptr[:l] == 1000) unless (Fixnum === :-)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-r,rs = h["test_alloc_test_struct", "PIL"][100,200]</div><div class='del'>-r.free = DL::FREE</div><div class='del'>-r.struct!("CL", :c, :l)</div><div class='del'>-assert("alloc_test_struct", :must, r["c"] == 100, r["l"] == 200)</div><div class='del'>-assert("alloc_test_struct", :must, r[:c] == 100, r[:l] == 200) unless (Fixnum === :-)</div><div class='del'>-</div><div class='del'>-ptr = h["test_strlen"]</div><div class='del'>-sym1 = DL::Symbol.new(ptr,"foo","0")</div><div class='del'>-sym2 = h["test_strlen","LS"]</div><div class='del'>-assert("Symbol.new", :must, ptr == sym1.to_ptr, sym1.to_ptr == sym2.to_ptr)</div><div class='del'>-</div><div class='del'>-set_val = h["test_set_long_value","0"]</div><div class='del'>-get_val = h["test_get_long_value","L"]</div><div class='del'>-lval = get_val[][0]</div><div class='del'>-ptr = h["internal_long_value"]</div><div class='del'>-ptr.struct!("L", :l)</div><div class='del'>-assert("get value", :must, ptr["l"] == lval)</div><div class='del'>-assert("get value", :must, ptr[:l] == lval) unless (Fixnum === :-)</div><div class='del'>-ptr["l"] = 200</div><div class='del'>-lval = get_val[][0]</div><div class='del'>-assert("set value", :must, ptr["l"] == lval)</div><div class='del'>-assert("set value", :must, ptr[:l] == lval) unless (Fixnum === :-)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-data_init = h["test_data_init", "P"]</div><div class='del'>-data_add  = h["test_data_add", "0PS"]</div><div class='del'>-data_aref = h["test_data_aref", "PPI"]</div><div class='del'>-r,rs = data_init[]</div><div class='del'>-ptr = r</div><div class='del'>-data_add[ptr, "name1"]</div><div class='del'>-data_add[ptr, "name2"]</div><div class='del'>-data_add[ptr, "name3"]</div><div class='del'>-</div><div class='del'>-r,rs = data_aref[ptr, 1]</div><div class='del'>-ptr = r</div><div class='del'>-ptr.struct!("C1024P", :name, :next)</div><div class='del'>-assert("data_aref", :must,</div><div class='del'>-       ptr["name"].collect{|c| c.chr}.join.split("\0")[0] == "name2")</div><div class='del'>-assert("data_aref", :must,</div><div class='del'>-       ptr["name"].collect{|c| c.chr}.join.split("\0")[0] == "name2") unless (Fixnum === :-)</div><div class='del'>-</div><div class='del'>-ptr = ptr["next"]</div><div class='del'>-ptr.struct!("C1024P", :name, :next)</div><div class='del'>-assert("data_aref", :must,</div><div class='del'>-       ptr["name"].collect{|c| c.chr}.join.split("\0")[0] == "name1")</div><div class='del'>-assert("data_aref", :must,</div><div class='del'>-       ptr["name"].collect{|c| c.chr}.join.split("\0")[0] == "name1") unless (Fixnum === :-)</div><div class='del'>-</div><div class='del'>-GC.start</div><div class='del'>-</div><div class='del'>-ptr = DL::malloc(32)</div><div class='del'>-ptr.struct!("CHIL", "c", "h", "i", "l")</div><div class='del'>-ptr["c"] = 1</div><div class='del'>-ptr["h"] = 2</div><div class='del'>-ptr["i"] = 3</div><div class='del'>-ptr["l"] = 4</div><div class='del'>-assert("struct!", :must,</div><div class='del'>-       ptr["c"] == 1 &amp;&amp;</div><div class='del'>-       ptr["h"] == 2 &amp;&amp;</div><div class='del'>-       ptr["i"] == 3 &amp;&amp;</div><div class='del'>-       ptr["l"] == 4)</div><div class='del'>-</div><div class='del'>-ptr = DL::malloc(DL::sizeof("IP"))</div><div class='del'>-ptr.struct!("IP", "n", "ptr")</div><div class='del'>-ptr["n"] = 10</div><div class='del'>-ptr["ptr"] = nil</div><div class='del'>-assert("struct!", :must, ptr["n"] == 10 &amp;&amp; ptr["ptr"] == nil)</div><div class='del'>-</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='del'>-GC.start</div><div class='del'>-printf("fail/total = #{$FAIL}/#{$TOTAL}\n")</div><div class='head'>diff --git a/ext/dl/type.rb b/ext/dl/type.rb<br/>deleted file mode 100644<br/>index 804420c395..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/dl/type.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/dl/type.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,115 +0,0 @@</div><div class='del'>-# example:</div><div class='del'>-#  DLTYPE[INT][:rb2c]["arg0"] =&gt; "NUM2INT(arg0)"</div><div class='del'>-#  DLTYPE[DOUBLE][:c2rb]["r"] =&gt; "rb_float_new(r)"</div><div class='del'>-</div><div class='del'>-DLTYPE = {</div><div class='del'>-  VOID  = 0x00 =&gt; {</div><div class='del'>-    :name =&gt; 'VOID',</div><div class='del'>-    :rb2c =&gt; nil,</div><div class='del'>-    :c2rb =&gt; nil,</div><div class='del'>-    :ctype =&gt; "void",</div><div class='del'>-    :stmem =&gt; "v",</div><div class='del'>-    :sym =&gt; true,</div><div class='del'>-    :cb =&gt; true,</div><div class='del'>-  },</div><div class='del'>-  CHAR  = 0x01 =&gt; {</div><div class='del'>-    :name =&gt; 'CHAR',</div><div class='del'>-    :rb2c =&gt; proc{|x| "NUM2CHR(#{x})"},</div><div class='del'>-    :c2rb =&gt; proc{|x| "CHR2FIX(#{x})"},</div><div class='del'>-    :ctype =&gt; "char",</div><div class='del'>-    :stmem =&gt; "c",</div><div class='del'>-    :sym =&gt; false,</div><div class='del'>-    :cb =&gt; false,</div><div class='del'>-  },</div><div class='del'>-  SHORT = 0x02 =&gt; {</div><div class='del'>-    :name =&gt; 'SHORT',</div><div class='del'>-    :rb2c =&gt; proc{|x| "FIX2INT(#{x})"},</div><div class='del'>-    :c2rb =&gt; proc{|x| "INT2FIX(#{x})"},</div><div class='del'>-    :ctype =&gt; "short",</div><div class='del'>-    :stmem =&gt; "h",</div><div class='del'>-    :sym =&gt; false,</div><div class='del'>-    :cb =&gt; false,</div><div class='del'>-  },</div><div class='del'>-  INT   = 0x03 =&gt; {</div><div class='del'>-    :name =&gt; 'INT',</div><div class='del'>-    :rb2c =&gt; proc{|x| "NUM2INT(#{x})"},</div><div class='del'>-    :c2rb =&gt; proc{|x| "INT2NUM(#{x})"},</div><div class='del'>-    :ctype =&gt; "int",</div><div class='del'>-    :stmem =&gt; "i",</div><div class='del'>-    :sym =&gt; true,</div><div class='del'>-    :cb =&gt; false,</div><div class='del'>-  },</div><div class='del'>-  LONG  = 0x04 =&gt; {</div><div class='del'>-    :name =&gt; 'LONG',</div><div class='del'>-    :rb2c =&gt; proc{|x| "NUM2INT(#{x})"},</div><div class='del'>-    :c2rb =&gt; proc{|x| "INT2NUM(#{x})"},</div><div class='del'>-    :ctype =&gt; "long",</div><div class='del'>-    :stmem =&gt; "l",</div><div class='del'>-    :sym =&gt; true,</div><div class='del'>-    :cb =&gt; true,</div><div class='del'>-  },</div><div class='del'>-  FLOAT = 0x05 =&gt; {</div><div class='del'>-    :name =&gt; 'FLOAT',</div><div class='del'>-    :rb2c =&gt; proc{|x| "(float)(RFLOAT(#{x})-&gt;value)"},</div><div class='del'>-    :c2rb =&gt; proc{|x| "rb_float_new((double)#{x})"},</div><div class='del'>-    :ctype =&gt; "float",</div><div class='del'>-    :stmem =&gt; "f",</div><div class='del'>-    :sym =&gt; false,</div><div class='del'>-    :cb =&gt; false,</div><div class='del'>-  },</div><div class='del'>-  DOUBLE = 0x06 =&gt; {</div><div class='del'>-    :name =&gt; 'DOUBLE',</div><div class='del'>-    :rb2c =&gt; proc{|x| "RFLOAT(#{x})-&gt;value"},</div><div class='del'>-    :c2rb =&gt; proc{|x| "rb_float_new(#{x})"},</div><div class='del'>-    :ctype =&gt; "double",</div><div class='del'>-    :stmem =&gt; "d",</div><div class='del'>-    :sym =&gt; true,</div><div class='del'>-    :cb =&gt; true,</div><div class='del'>-  },</div><div class='del'>-  VOIDP = 0x07 =&gt; {</div><div class='del'>-    :name =&gt; 'VOIDP',</div><div class='del'>-    :rb2c =&gt; proc{|x| "rb_dlptr2cptr(#{x})"},</div><div class='del'>-    :c2rb =&gt; proc{|x| "rb_dlptr_new(#{x},sizeof(void*),0)"},</div><div class='del'>-    :ctype =&gt; "void *",</div><div class='del'>-    :stmem =&gt; "p",</div><div class='del'>-    :sym =&gt; true,</div><div class='del'>-    :cb =&gt; true,</div><div class='del'>-  },</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def tpush(t, x)</div><div class='del'>-  (t &lt;&lt; 3)|x</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def tget(t, i)</div><div class='del'>-  (t &amp; (0x07 &lt;&lt; (i * 3))) &gt;&gt; (i * 3)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def types2num(types)</div><div class='del'>-  res = 0x00</div><div class='del'>-  r = types.reverse</div><div class='del'>-  r.each{|t|</div><div class='del'>-    res = tpush(res,t)</div><div class='del'>-  }</div><div class='del'>-  res</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def num2types(num)</div><div class='del'>-  ts = []</div><div class='del'>-  i  = 0</div><div class='del'>-  t = tget(num,i)</div><div class='del'>-  while( (t != VOID &amp;&amp; i &gt; 0) || (i == 0) )</div><div class='del'>-    ts.push(DLTYPE[t][:ctype])</div><div class='del'>-    i += 1</div><div class='del'>-    t = tget(num,i)</div><div class='del'>-  end</div><div class='del'>-  ts</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def types2ctypes(types)</div><div class='del'>-  res = []</div><div class='del'>-  types.each{|t|</div><div class='del'>-    res.push(DLTYPE[t][:ctype])</div><div class='del'>-  }</div><div class='del'>-  res</div><div class='del'>-end</div><div class='head'>diff --git a/ext/etc/.cvsignore b/ext/etc/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/etc/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/.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/etc/depend b/ext/etc/depend<br/>deleted file mode 100644<br/>index ac706477b0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/etc/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-etc.o : etc.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h </div><div class='head'>diff --git a/ext/etc/etc.c b/ext/etc/etc.c<br/>deleted file mode 100644<br/>index ecb9e16411..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/etc/etc.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/etc.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,561 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  etc.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  created at: Tue Mar 22 18:39:19 JST 1994</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#include &lt;sys/types.h&gt;</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'>-#ifdef HAVE_GETPWENT</div><div class='del'>-#include &lt;pwd.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-#include &lt;grp.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-static VALUE sPasswd, sGroup;</div><div class='del'>-</div><div class='del'>-#ifndef _WIN32</div><div class='del'>-char *getenv();</div><div class='del'>-#endif</div><div class='del'>-char *getlogin();</div><div class='del'>-</div><div class='del'>-/* Returns the short user name of the currently logged in user.</div><div class='del'>- * Unfortunately, it is often rather easy to fool getlogin().</div><div class='del'>- * Avoid getlogin() for security-related purposes.</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='del'>-static VALUE</div><div class='del'>-etc_getlogin(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    char *login;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-#ifdef HAVE_GETLOGIN</div><div class='del'>-    login = getlogin();</div><div class='del'>-    if (!login) login = getenv("USER");</div><div class='del'>-#else</div><div class='del'>-    login = getenv("USER");</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (login)</div><div class='del'>-	return rb_tainted_str_new2(login);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</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='del'>-#ifdef HAVE_GETPWENT</div><div class='del'>-static VALUE</div><div class='del'>-setup_passwd(pwd)</div><div class='del'>-    struct passwd *pwd;</div><div class='del'>-{</div><div class='del'>-    if (pwd == 0) rb_sys_fail("/etc/passwd");</div><div class='del'>-    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='del'>-#ifdef HAVE_ST_PW_GECOS</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_gecos),</div><div class='del'>-#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='del'>-#ifdef HAVE_ST_PW_CHANGE</div><div class='del'>-			 INT2NUM(pwd-&gt;pw_change),</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_QUOTA</div><div class='del'>-			 INT2NUM(pwd-&gt;pw_quota),</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_AGE</div><div class='del'>-			 PW_AGE2VAL(pwd-&gt;pw_age),</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_CLASS</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_class),</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_COMMENT</div><div class='del'>-			 safe_setup_str(pwd-&gt;pw_comment),</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_EXPIRE</div><div class='del'>-			 INT2NUM(pwd-&gt;pw_expire),</div><div class='del'>-#endif</div><div class='del'>-			 0		/*dummy*/</div><div class='del'>-	);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-etc_getpwuid(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'>-#if defined(HAVE_GETPWENT)</div><div class='del'>-    VALUE id;</div><div class='del'>-    uid_t uid;</div><div class='del'>-    struct passwd *pwd;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;id) == 1) {</div><div class='del'>-	uid = PW_VAL2UID(id);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	uid = getuid();</div><div class='del'>-    }</div><div class='del'>-    pwd = getpwuid(uid);</div><div class='del'>-    if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", uid);</div><div class='del'>-    return setup_passwd(pwd);</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'>-/* 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='del'>-static VALUE</div><div class='del'>-etc_getpwnam(obj, nam)</div><div class='del'>-    VALUE obj, nam;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETPWENT</div><div class='del'>-    struct passwd *pwd;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(nam);</div><div class='del'>-    pwd = getpwnam(RSTRING(nam)-&gt;ptr);</div><div class='del'>-    if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %s", RSTRING(nam)-&gt;ptr);</div><div class='del'>-    return setup_passwd(pwd);</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'>-#ifdef HAVE_GETPWENT</div><div class='del'>-static int passwd_blocking = 0;</div><div class='del'>-static VALUE</div><div class='del'>-passwd_ensure()</div><div class='del'>-{</div><div class='del'>-    passwd_blocking = Qfalse;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-passwd_iterate()</div><div class='del'>-{</div><div class='del'>-    struct passwd *pw;</div><div class='del'>-</div><div class='del'>-    setpwent();</div><div class='del'>-    while (pw = getpwent()) {</div><div class='del'>-	rb_yield(setup_passwd(pw));</div><div class='del'>-    }</div><div class='del'>-    endpwent();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-etc_passwd(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'>-    rb_secure(4);</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	if (passwd_blocking) {</div><div class='del'>-	    rb_raise(rb_eRuntimeError, "parallel passwd iteration");</div><div class='del'>-	}</div><div class='del'>-	passwd_blocking = Qtrue;</div><div class='del'>-	rb_ensure(passwd_iterate, 0, passwd_ensure, 0);</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='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='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-static VALUE</div><div class='del'>-setup_group(grp)</div><div class='del'>-    struct group *grp;</div><div class='del'>-{</div><div class='del'>-    VALUE mem;</div><div class='del'>-    char **tbl;</div><div class='del'>-</div><div class='del'>-    mem = rb_ary_new();</div><div class='del'>-    tbl = grp-&gt;gr_mem;</div><div class='del'>-    while (*tbl) {</div><div class='del'>-	rb_ary_push(mem, safe_setup_str(*tbl));</div><div class='del'>-	tbl++;</div><div class='del'>-    }</div><div class='del'>-    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='del'>-			 mem);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-etc_getgrgid(obj, id)</div><div class='del'>-    VALUE obj, id;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-    gid_t gid;</div><div class='del'>-    struct group *grp;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    gid = PW_VAL2GID(id);</div><div class='del'>-    grp = getgrgid(gid);</div><div class='del'>-    if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", gid);</div><div class='del'>-    return setup_group(grp);</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'>-/* 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='del'>-static VALUE</div><div class='del'>-etc_getgrnam(obj, nam)</div><div class='del'>-    VALUE obj, nam;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-    struct group *grp;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(nam);</div><div class='del'>-    grp = getgrnam(RSTRING(nam)-&gt;ptr);</div><div class='del'>-    if (grp == 0) rb_raise(rb_eArgError, "can't find group for %s", RSTRING(nam)-&gt;ptr);</div><div class='del'>-    return setup_group(grp);</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'>-#ifdef HAVE_GETGRENT</div><div class='del'>-static int group_blocking = 0;</div><div class='del'>-static VALUE</div><div class='del'>-group_ensure()</div><div class='del'>-{</div><div class='del'>-    group_blocking = Qfalse;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-group_iterate()</div><div class='del'>-{</div><div class='del'>-    struct group *pw;</div><div class='del'>-</div><div class='del'>-    setgrent();</div><div class='del'>-    while (pw = getgrent()) {</div><div class='del'>-	rb_yield(setup_group(pw));</div><div class='del'>-    }</div><div class='del'>-    endgrent();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-etc_group(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-    struct group *grp;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	if (group_blocking) {</div><div class='del'>-	    rb_raise(rb_eRuntimeError, "parallel group iteration");</div><div class='del'>-	}</div><div class='del'>-	group_blocking = Qtrue;</div><div class='del'>-	rb_ensure(group_iterate, 0, group_ensure, 0);</div><div class='del'>-    }</div><div class='del'>-    if (grp = getgrent()) {</div><div class='del'>-	return setup_group(grp);</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='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='del'>-static VALUE mEtc;</div><div class='del'>-</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='del'>-void</div><div class='del'>-Init_etc()</div><div class='del'>-{</div><div class='del'>-    mEtc = rb_define_module("Etc");</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mEtc, "getlogin", etc_getlogin, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mEtc, "getpwuid", etc_getpwuid, -1);</div><div class='del'>-    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='del'>-    rb_define_module_function(mEtc, "passwd", etc_passwd, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mEtc, "getgrgid", etc_getgrgid, 1);</div><div class='del'>-    rb_define_module_function(mEtc, "getgrnam", etc_getgrnam, 1);</div><div class='del'>-    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='del'>-</div><div class='del'>-    rb_global_variable(&amp;sPasswd);</div><div class='del'>-    sPasswd =  rb_struct_define("Passwd",</div><div class='del'>-				"name", "passwd", "uid", "gid",</div><div class='del'>-#ifdef HAVE_ST_PW_GECOS</div><div class='del'>-				"gecos",</div><div class='del'>-#endif</div><div class='del'>-				"dir", "shell",</div><div class='del'>-#ifdef HAVE_ST_PW_CHANGE</div><div class='del'>-				"change",</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_QUOTA</div><div class='del'>-				"quota",</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_AGE</div><div class='del'>-				"age",</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_CLASS</div><div class='del'>-				"uclass",</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_COMMENT</div><div class='del'>-				"comment",</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ST_PW_EXPIRE</div><div class='del'>-				"expire",</div><div class='del'>-#endif</div><div class='del'>-				NULL);</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_GETGRENT</div><div class='del'>-    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='del'>-#endif</div><div class='del'>-}</div><div class='head'>diff --git a/ext/etc/etc.txt b/ext/etc/etc.txt<br/>deleted file mode 100644<br/>index 534790172c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/etc/etc.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/etc.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,72 +0,0 @@</div><div class='del'>-.\" etc.txt -  -*- Indented-Text -*- created at: Fri Jul 14 00:47:15 JST 1995</div><div class='del'>-</div><div class='del'>-** Etc(Module)</div><div class='del'>-</div><div class='del'>-The module to retrieve information under /etc directory.  Available</div><div class='del'>-only on UNIX platforms.  All operations defined in this module are</div><div class='del'>-module functions, so that you can include Etc module into your class.</div><div class='del'>-</div><div class='del'>-Module Function:</div><div class='del'>-</div><div class='del'>-   getlogin</div><div class='del'>-</div><div class='del'>-	returns login name of the user.  It this fails, try getpwuid().</div><div class='del'>-</div><div class='del'>-   getpwnam(name)</div><div class='del'>-</div><div class='del'>-	searches in /etc/passwd file (or equivalent database), and</div><div class='del'>-	returns password entry for the user.  The return value is an</div><div class='del'>-	passwd structure, which has members described below.</div><div class='del'>-</div><div class='del'>-	  struct passwd</div><div class='del'>-	    name 	# user name(string)</div><div class='del'>-	    passwd	# encrypted password(string)</div><div class='del'>-	    uid		# user ID(integer)</div><div class='del'>-	    gid		# group ID(integer)</div><div class='del'>-	    gecos	# gecos field(string)</div><div class='del'>-	    dir		# home directory(string)</div><div class='del'>-	    shell	# login shell(string)</div><div class='del'>-	    # members below are optional</div><div class='del'>-	    change	# password change time(integer)</div><div class='del'>-	    quota	# quota value(integer)</div><div class='del'>-	    age		# password age(integer)</div><div class='del'>-	    class	# user access class(string)</div><div class='del'>-	    comment	# comment(string)</div><div class='del'>-	    expire	# account expiration time(integer)	    </div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	See getpwnam(3) for detail.</div><div class='del'>-</div><div class='del'>-   getpwuid([uid])</div><div class='del'>-</div><div class='del'>-	returns passwd entry for the specified user id.  If uid is</div><div class='del'>-	ommitted, use the value from getuid().  See getpwuid(3) for</div><div class='del'>-	detail.</div><div class='del'>-</div><div class='del'>-   getgrgid(gid)</div><div class='del'>-</div><div class='del'>-	searches in /etc/group file (or equivalent database), and</div><div class='del'>-	returns group entry for the group id.  The return value is an</div><div class='del'>-	group structure, which has members described below.</div><div class='del'>-</div><div class='del'>-	  struct group</div><div class='del'>-	    name 	# group name(string)</div><div class='del'>-	    passwd	# group password(string)</div><div class='del'>-	    gid		# group ID(integer)</div><div class='del'>-	    mem		# array of the group member names</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	See getgrgid(3) for detail.</div><div class='del'>-</div><div class='del'>-   getgrnam(name)</div><div class='del'>-</div><div class='del'>-	returns the group entry for the specified name.  The return</div><div class='del'>-	value is the group structure.  See getgrnam(3) for detail.</div><div class='del'>-</div><div class='del'>-   group</div><div class='del'>-</div><div class='del'>-	iterates over all group entries.</div><div class='del'>-</div><div class='del'>-   passwd</div><div class='del'>-</div><div class='del'>-	iterates over all passwd entries.</div><div class='head'>diff --git a/ext/etc/etc.txt.ja b/ext/etc/etc.txt.ja<br/>deleted file mode 100644<br/>index 2dddcfb036..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/etc/etc.txt.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/etc.txt.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,72 +0,0 @@</div><div class='del'>-.\" etc.txt.ja -  -*- Indented-Text -*- created at: Fri Jul 14 00:47:15 JST 1995</div><div class='del'>-</div><div class='del'>-** Etc(¥â¥¸¥å¡¼¥ë)</div><div class='del'>-</div><div class='del'>-/etc¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î¾ðÊó¤òÆÀ¤ë¤¿¤á¤Î¥â¥¸¥å¡¼¥ë¡¥¥¯¥é¥¹¤Ë¥¤¥ó¥¯¥ë¡¼¥É</div><div class='del'>-¤·¤Æ»È¤¦¤³¤È¤â¤Ç¤­¤ë¡¥</div><div class='del'>-</div><div class='del'>-Module Function:</div><div class='del'>-</div><div class='del'>-   getlogin</div><div class='del'>-</div><div class='del'>-	¼«Ê¬¤ÎloginÌ¾¤òÊÖ¤¹¡¥¤³¤ì¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ïgetpwuid()¤òÍÑ¤¤¤ë¤È</div><div class='del'>-	ÎÉ¤¤¡¥</div><div class='del'>-</div><div class='del'>-   getpwnam(name)</div><div class='del'>-</div><div class='del'>-	/etc/passwd¥Õ¥¡¥¤¥ë(¤¢¤ë¤¤¤ÏDBM¥Õ¥¡¥¤¥ë¤äNIS¥Ç¡¼¥¿¥Ù¡¼¥¹)¤ò¸¡</div><div class='del'>-	º÷¤·¡¤name¤ÎÌ¾Á°¤ò»ý¤Äpasswd¥¨¥ó¥È¥ê¤òÊÖ¤¹¡¥Ìá¤êÃÍ¤Ïpasswd¹½Â¤</div><div class='del'>-	ÂÎ¤Ç°Ê²¼¤Î¥á¥ó¥Ð¤ò»ý¤Ä¡¥</div><div class='del'>-</div><div class='del'>-	  struct passwd</div><div class='del'>-	    name 	# ¥æ¡¼¥¶Ì¾(Ê¸»úÎó)</div><div class='del'>-	    passwd	# ¥Ñ¥¹¥ï¡¼¥É(Ê¸»úÎó)</div><div class='del'>-	    uid		# ¥æ¡¼¥¶ID(À°¿ô)</div><div class='del'>-	    gid		# ¥°¥ë¡¼¥×ID(À°¿ô)</div><div class='del'>-	    gecos	# gecos¥Õ¥£¡¼¥ë¥É(Ê¸»úÎó)</div><div class='del'>-	    dir		# ¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê(Ê¸»úÎó)</div><div class='del'>-	    shell	# ¥í¥°¥¤¥ó¥·¥§¥ë(Ê¸»úÎó)</div><div class='del'>-	    # °Ê¹ß¤Î¥á¥ó¥Ð¤Ï¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ¤ÏÄó¶¡¤µ¤ì¤Ê¤¤¡¥</div><div class='del'>-	    change	# ¥Ñ¥¹¥ï¡¼¥ÉÊÑ¹¹»þ´Ö(À°¿ô)</div><div class='del'>-	    quota	# ¥¯¥©¡¼¥¿(À°¿ô)</div><div class='del'>-	    age		# ¥¨¡¼¥¸(À°¿ô)</div><div class='del'>-	    class	# ¥æ¡¼¥¶¥¢¥¯¥»¥¹¥¯¥é¥¹(Ê¸»úÎó)</div><div class='del'>-	    comment	# ¥³¥á¥ó¥È(Ê¸»úÎó)</div><div class='del'>-	    expire	# ¥¢¥«¥¦¥ó¥ÈÍ­¸ú´ü¸Â(À°¿ô)	    </div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	¾ÜºÙ¤Ïgetpwnam(3)¤ò»²¾È¤Î¤³¤È¡¥</div><div class='del'>-</div><div class='del'>-   getpwuid([uid])</div><div class='del'>-</div><div class='del'>-	uid¤ò¥æ¡¼¥¶ID¤È¤¹¤ëpasswd¥¨¥ó¥È¥ê¤òÊÖ¤¹¡¥Ìá¤êÃÍ¤Ïgetpwnam()¤È</div><div class='del'>-	Æ±ÍÍ¤Ç¤¢¤ë¡¥°ú¿ô¤ò¾ÊÎ¬¤·¤¿¾ì¹ç¤Ë¤Ïgetuid()¤ÎÃÍ¤òÍÑ¤¤¤ë¡¥¾ÜºÙ¤Ï</div><div class='del'>-	getpwuid(3)¤ò»²¾È¤Î¤³¤È¡¥</div><div class='del'>-</div><div class='del'>-   getgrgid(gid)</div><div class='del'>-</div><div class='del'>-	/etc/group¥Õ¥¡¥¤¥ë(¤¢¤ë¤¤¤Ï¡Ägetpwnam»²¾È)¤ò¸¡º÷¤·¡¤gid¤ò¥°¥ë¡¼</div><div class='del'>-	¥×ID¤È¤¹¤ë¥°¥ë¡¼¥×¥¨¥ó¥È¥ê¤òÊÖ¤¹¡¥Ìá¤êÃÍ¤Ïgroup¹½Â¤ÂÎ¤Ç°Ê²¼¤Î</div><div class='del'>-	¥á¥ó¥Ð¤ò»ý¤Ä¡¥</div><div class='del'>-</div><div class='del'>-	  struct group</div><div class='del'>-	    name 	# ¥°¥ë¡¼¥×Ì¾(Ê¸»úÎó)</div><div class='del'>-	    passwd	# ¥°¥ë¡¼¥×¤Î¥Ñ¥¹¥ï¡¼¥É(Ê¸»úÎó)</div><div class='del'>-	    gid		# ¥°¥ë¡¼¥×ID(À°¿ô)</div><div class='del'>-	    mem		# ¥°¥ë¡¼¥×¥á¥ó¥ÐÌ¾¤ÎÇÛÎó</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	¾ÜºÙ¤Ïgetgrgid(3)¤ò»²¾È¤Î¤³¤È¡¥</div><div class='del'>-</div><div class='del'>-   getgrnam(name)</div><div class='del'>-</div><div class='del'>-	name¤È¤¤¤¦Ì¾Á°¤Î¥°¥ë¡¼¥×¥¨¥ó¥È¥ê¤òÊÖ¤¹¡¥Ìá¤êÃÍ¤Ïgetgrgid()¤ÈÆ±</div><div class='del'>-	ÍÍ¤Ç¤¢¤ë¡¥¾ÜºÙ¤Ïgetgrnam(3)¤ò»²¾È¡¥</div><div class='del'>-</div><div class='del'>-   group</div><div class='del'>-</div><div class='del'>-	Á´¤Æ¤Î¥°¥ë¡¼¥×¥¨¥ó¥È¥ê¤ò½ç¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Î¥¤¥Æ¥ì¡¼¥¿¡¥</div><div class='del'>-</div><div class='del'>-   passwd</div><div class='del'>-</div><div class='del'>-	Á´¤Æ¤Îpasswd¥¨¥ó¥È¥ê¤ò½ç¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Î¥¤¥Æ¥ì¡¼¥¿¡¥</div><div class='head'>diff --git a/ext/etc/extconf.rb b/ext/etc/extconf.rb<br/>deleted file mode 100644<br/>index dbd0672545..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/etc/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/etc/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,43 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-have_library("sun", "getpwnam")	# NIS (== YP) interface for IRIX 4</div><div class='del'>-a = have_func("getlogin")</div><div class='del'>-b = have_func("getpwent")</div><div class='del'>-c = have_func("getgrent")</div><div class='del'>-if  a or b or c</div><div class='del'>-  have_struct_member('struct passwd', 'pw_gecos', 'pwd.h')</div><div class='del'>-  have_struct_member('struct passwd', 'pw_change', 'pwd.h')</div><div class='del'>-  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='del'>-  have_struct_member('struct passwd', 'pw_class', 'pwd.h')</div><div class='del'>-  have_struct_member('struct passwd', 'pw_comment', 'pwd.h') unless /cygwin/ === RUBY_PLATFORM</div><div class='del'>-  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='del'>-  create_makefile("etc")</div><div class='del'>-end</div><div class='head'>diff --git a/ext/extmk.rb b/ext/extmk.rb<br/>deleted file mode 100644<br/>index 64746552c1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/extmk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/extmk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,567 +0,0 @@</div><div class='del'>-#! /usr/local/bin/ruby</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-$extension = nil</div><div class='del'>-$extstatic = nil</div><div class='del'>-$force_static = nil</div><div class='del'>-$install = nil</div><div class='del'>-$destdir = nil</div><div class='del'>-$dryrun = false</div><div class='del'>-$clean = nil</div><div class='del'>-$nodynamic = nil</div><div class='del'>-$extinit = nil</div><div class='del'>-$extobjs = nil</div><div class='del'>-$extflags = ""</div><div class='del'>-$extlibs = nil</div><div class='del'>-$extpath = nil</div><div class='del'>-$ignore = nil</div><div class='del'>-$message = nil</div><div class='del'>-</div><div class='del'>-$progname = $0</div><div class='del'>-alias $PROGRAM_NAME $0</div><div class='del'>-alias $0 $progname</div><div class='del'>-</div><div class='del'>-$extlist = []</div><div class='del'>-$compiled = {}</div><div class='del'>-</div><div class='del'>-$:.replace([Dir.pwd])</div><div class='del'>-require 'rbconfig'</div><div class='del'>-</div><div class='del'>-srcdir = File.dirname(File.dirname(__FILE__))</div><div class='del'>-</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='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-require 'optparse/shellwords'</div><div class='del'>-</div><div class='del'>-def sysquote(x)</div><div class='del'>-  @quote ||= /human|os2|macos/ =~ (CROSS_COMPILING || RUBY_PLATFORM)</div><div class='del'>-  @quote ? x.quote : x</div><div class='del'>-end</div><div class='del'>-</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'>-  $objs = (m[/^OBJS[ \t]*=[ \t](.*)/, 1] || "").split</div><div class='del'>-  $srcs = (m[/^SRCS[ \t]*=[ \t](.*)/, 1] || "").split</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='del'>-def extmake(target)</div><div class='del'>-  print "#{$message} #{target}\n"</div><div class='del'>-  $stdout.flush</div><div class='del'>-  if $force_static or $static_ext[target]</div><div class='del'>-    $static = target</div><div class='del'>-  else</div><div class='del'>-    $static = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  unless $ignore</div><div class='del'>-    return true if $nodynamic and not $static</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  FileUtils.mkpath target unless File.directory?(target)</div><div class='del'>-  begin</div><div class='del'>-    dir = Dir.pwd</div><div class='del'>-    FileUtils.mkpath target unless File.directory?(target)</div><div class='del'>-    Dir.chdir target</div><div class='del'>-    top_srcdir = $top_srcdir</div><div class='del'>-    topdir = $topdir</div><div class='del'>-    hdrdir = $hdrdir</div><div class='del'>-    prefix = "../" * (target.count("/")+1)</div><div class='del'>-    $top_srcdir = relative_from(top_srcdir, prefix)</div><div class='del'>-    $hdrdir = relative_from(hdrdir, prefix)</div><div class='del'>-    $topdir = prefix + $topdir</div><div class='del'>-    $target = target</div><div class='del'>-    $mdir = target</div><div class='del'>-    $srcdir = File.join($top_srcdir, "ext", $mdir)</div><div class='del'>-    $preload = nil</div><div class='del'>-    $objs = ""</div><div class='del'>-    $srcs = ""</div><div class='del'>-    $compiled[target] = false</div><div class='del'>-    makefile = "./Makefile"</div><div class='del'>-    ok = File.exist?(makefile)</div><div class='del'>-    unless $ignore</div><div class='del'>-      rbconfig0 = Config::CONFIG</div><div class='del'>-      mkconfig0 = CONFIG</div><div class='del'>-      rbconfig = {</div><div class='del'>-	"hdrdir" =&gt; $hdrdir,</div><div class='del'>-	"srcdir" =&gt; $srcdir,</div><div class='del'>-	"topdir" =&gt; $topdir,</div><div class='del'>-      }</div><div class='del'>-      mkconfig = {</div><div class='del'>-	"hdrdir" =&gt; "$(top_srcdir)",</div><div class='del'>-	"srcdir" =&gt; "$(top_srcdir)/ext/#{$mdir}",</div><div class='del'>-	"topdir" =&gt; $topdir,</div><div class='del'>-      }</div><div class='del'>-      rbconfig0.each_pair {|key, val| rbconfig[key] ||= val.dup}</div><div class='del'>-      mkconfig0.each_pair {|key, val| mkconfig[key] ||= val.dup}</div><div class='del'>-      Config.module_eval {</div><div class='del'>-	remove_const(:CONFIG)</div><div class='del'>-	const_set(:CONFIG, rbconfig)</div><div class='del'>-	remove_const(:MAKEFILE_CONFIG)</div><div class='del'>-	const_set(:MAKEFILE_CONFIG, mkconfig)</div><div class='del'>-      }</div><div class='del'>-      Object.class_eval {</div><div class='del'>-	remove_const(:CONFIG)</div><div class='del'>-	const_set(:CONFIG, mkconfig)</div><div class='del'>-      }</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'>-	    ["#{$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='del'>-	  if File.exist?($0 = "#{$srcdir}/makefile.rb")</div><div class='del'>-	    load $0</div><div class='del'>-	  elsif File.exist?($0 = "#{$srcdir}/extconf.rb")</div><div class='del'>-	    load $0</div><div class='del'>-	  else</div><div class='del'>-	    create_makefile(target)</div><div class='del'>-	  end</div><div class='del'>-	  $defs &lt;&lt; "-DRUBY_EXPORT" if $static</div><div class='del'>-	  ok = File.exist?(makefile)</div><div class='del'>-	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='del'>-      end</div><div class='del'>-    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='del'>-      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</div><div class='del'>-      FileUtils.rm_f("mkmf.log")</div><div class='del'>-      if $clean != true</div><div class='del'>-	FileUtils.rm_f([makefile, $extconf_h || "extconf.h"])</div><div class='del'>-      end</div><div class='del'>-      File.unlink(makefile) rescue nil</div><div class='del'>-    end</div><div class='del'>-    if $static</div><div class='del'>-      $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='del'>-    end</div><div class='del'>-  ensure</div><div class='del'>-    unless $ignore</div><div class='del'>-      Config.module_eval {</div><div class='del'>-	remove_const(:CONFIG)</div><div class='del'>-	const_set(:CONFIG, rbconfig0)</div><div class='del'>-	remove_const(:MAKEFILE_CONFIG)</div><div class='del'>-	const_set(:MAKEFILE_CONFIG, mkconfig0)</div><div class='del'>-      }</div><div class='del'>-      Object.class_eval {</div><div class='del'>-	remove_const(:CONFIG)</div><div class='del'>-	const_set(:CONFIG, mkconfig0)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    $top_srcdir = top_srcdir</div><div class='del'>-    $topdir = topdir</div><div class='del'>-    $hdrdir = hdrdir</div><div class='del'>-    Dir.chdir dir</div><div class='del'>-  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='del'>-  true</div><div class='del'>-end</div><div class='del'>-</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='del'>-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='del'>-  end</div><div class='del'>-</div><div class='del'>-  $destdir ||= ''</div><div class='del'>-</div><div class='del'>-  $make, *rest = Shellwords.shellwords($make)</div><div class='del'>-  $mflags.unshift(*rest) unless rest.empty?</div><div class='del'>-</div><div class='del'>-  def $mflags.set?(flag)</div><div class='del'>-    grep(/\A-(?!-).*#{flag.chr}/i) { return true }</div><div class='del'>-    false</div><div class='del'>-  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='del'>-</div><div class='del'>-  if $mflags.set?(?n)</div><div class='del'>-    $dryrun = true</div><div class='del'>-  else</div><div class='del'>-    $mflags.unshift '-n' if $dryrun</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $continue = $mflags.set?(?k)</div><div class='del'>-  if $extout</div><div class='del'>-    $extout = '$(topdir)/'+$extout</div><div class='del'>-    Config::CONFIG["extout"] = CONFIG["extout"] = $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='del'>-end</div><div class='del'>-</div><div class='del'>-parse_args()</div><div class='del'>-</div><div class='del'>-if target = ARGV.shift and /^[a-z-]+$/ =~ target</div><div class='del'>-  $mflags.push(target)</div><div class='del'>-  case target</div><div class='del'>-  when /^(dist|real)?(clean)$/</div><div class='del'>-    target = $2</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='del'>-unless $message</div><div class='del'>-  if target</div><div class='del'>-    $message = target.sub(/^(\w+)e?\b/, '\1ing').tr('-', ' ')</div><div class='del'>-  else</div><div class='del'>-    $message = "compiling"</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-EXEEXT = CONFIG['EXEEXT']</div><div class='del'>-if CROSS_COMPILING</div><div class='del'>-  $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='del'>-else</div><div class='del'>-  $ruby = '$(topdir)/miniruby' + EXEEXT</div><div class='del'>-end</div><div class='del'>-$ruby &lt;&lt; " -I'$(topdir)'"</div><div class='del'>-unless CROSS_COMPILING</div><div class='del'>-  $ruby &lt;&lt; " -I'$(top_srcdir)/lib'"</div><div class='del'>-  $ruby &lt;&lt; " -I'$(extout)/$(arch)' -I'$(extout)/common'" if $extout</div><div class='del'>-  $ruby &lt;&lt; " -I./- -I'$(top_srcdir)/ext' -rpurelib.rb"</div><div class='del'>-  ENV["RUBYLIB"] = "-"</div><div class='del'>-  ENV["RUBYOPT"] = "-rpurelib.rb"</div><div class='del'>-end</div><div class='del'>-$config_h = '$(topdir)/config.h'</div><div class='del'>-$mflags &lt;&lt; "ruby=#$ruby"</div><div class='del'>-</div><div class='del'>-MTIMES = [__FILE__, 'rbconfig.rb', srcdir+'/lib/mkmf.rb'].collect {|f| File.mtime(f)}</div><div class='del'>-</div><div class='del'>-# get static-link modules</div><div class='del'>-$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='del'>-for dir in ["ext", File::join($top_srcdir, "ext")]</div><div class='del'>-  setup = File::join(dir, CONFIG['setup'])</div><div class='del'>-  if File.file? setup</div><div class='del'>-    f = open(setup)</div><div class='del'>-    while line = f.gets()</div><div class='del'>-      line.chomp!</div><div class='del'>-      line.sub!(/#.*$/, '')</div><div class='del'>-      next if /^\s*$/ =~ line</div><div class='del'>-      target, opt = line.split(nil, 3)</div><div class='del'>-      if target == 'option'</div><div class='del'>-	case opt</div><div class='del'>-	when 'nodynamic'</div><div class='del'>-	  $nodynamic = true</div><div class='del'>-	end</div><div class='del'>-	next</div><div class='del'>-      end</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'>-    MTIMES &lt;&lt; f.mtime</div><div class='del'>-    $setup = setup</div><div class='del'>-    f.close</div><div class='del'>-    break</div><div class='del'>-  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'>-      proc {|c1| w.collect {|opt| opt.split(/,/)}.flatten.any?(&amp;c1)}</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(cond1) or !withouts.call(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='del'>-end</div><div class='del'>-</div><div class='del'>-if $extout</div><div class='del'>-  extout = Config.expand("#{$extout}", Config::CONFIG.merge("topdir"=&gt;$topdir))</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='del'>-Dir::chdir('ext')</div><div class='del'>-</div><div class='del'>-hdrdir = $hdrdir</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='del'>-end</div><div class='del'>-$top_srcdir = srcdir</div><div class='del'>-$topdir = "."</div><div class='del'>-$hdrdir = hdrdir</div><div class='del'>-</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='del'>-if $ignore</div><div class='del'>-  FileUtils.rm_f(extinit.to_a) if $clean</div><div class='del'>-  Dir.chdir ".."</div><div class='del'>-  if $clean</div><div class='del'>-    Dir.rmdir('ext') rescue nil</div><div class='del'>-    if $extout</div><div class='del'>-      FileUtils.rm_rf([extout+"/common", extout+"/include/ruby", extout+"/rdoc"])</div><div class='del'>-      FileUtils.rm_rf(extout+"/"+CONFIG["arch"])</div><div class='del'>-      if $clean != true</div><div class='del'>-	FileUtils.rm_rf(extout+"/include/"+CONFIG["arch"])</div><div class='del'>-	FileUtils.rm_f($mflags.defined?("INSTALLED_LIST")||ENV["INSTALLED_LIST"]||".installed.list")</div><div class='del'>-	Dir.rmdir(extout+"/include") rescue nil</div><div class='del'>-	Dir.rmdir(extout) rescue nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  exit</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$extinit ||= ""</div><div class='del'>-$extobjs ||= ""</div><div class='del'>-$extpath ||= []</div><div class='del'>-$extflags ||= ""</div><div class='del'>-$extlibs ||= []</div><div class='del'>-unless $extlist.empty?</div><div class='del'>-  $extinit &lt;&lt; "\n" unless $extinit.empty?</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='del'>-    f = format("%s/%s.%s", s, i, $LIBEXT)</div><div class='del'>-    if File.exist?(f)</div><div class='del'>-      $extinit &lt;&lt; "    init(Init_#{i}, \"#{t}.so\");\n"</div><div class='del'>-      $extobjs &lt;&lt; "ext/#{f} "</div><div class='del'>-      built &lt;&lt; t</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  src = %{\</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#define init(func, name) {void func _((void)); ruby_init_ext(name, func);}</div><div class='del'>-</div><div class='del'>-void ruby_init_ext _((const char *name, void (*init)(void)));</div><div class='del'>-</div><div class='del'>-void Init_ext _((void))\n{\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='del'>-  end</div><div class='del'>-</div><div class='del'>-  $extobjs = "ext/#{extinit.o} #{$extobjs}"</div><div class='del'>-  if RUBY_PLATFORM =~ /m68k-human|beos/</div><div class='del'>-    $extflags.delete("-L/usr/local/lib")</div><div class='del'>-  end</div><div class='del'>-  $extpath.delete("$(topdir)")</div><div class='del'>-  $extflags = libpathflag($extpath) &lt;&lt; " " &lt;&lt; $extflags.strip</div><div class='del'>-  conf = [</div><div class='del'>-    ['LIBRUBY_SO_UPDATE', '$(LIBRUBY_EXTS)'],</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='del'>-  ].map {|n, v|</div><div class='del'>-    "#{n}=#{v}" if v and !(v = v.strip).empty?</div><div class='del'>-  }.compact</div><div class='del'>-  puts conf</div><div class='del'>-  $stdout.flush</div><div class='del'>-  $mflags.concat(conf)</div><div class='del'>-else</div><div class='del'>-  FileUtils.rm_f(extinit.to_a)</div><div class='del'>-end</div><div class='del'>-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; Config.expand(r+=EXEEXT)</div><div class='del'>-    $mflags &lt;&lt; "#{n}=#{r}"</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-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'>-puts "making #{rubies.join(', ')}"</div><div class='del'>-$stdout.flush</div><div class='del'>-$mflags.concat(rubies)</div><div class='del'>-</div><div class='del'>-if $nmake == ?b</div><div class='del'>-  unless (vars = $mflags.grep(/\A\w+=/n)).empty?</div><div class='del'>-    open(mkf = "libruby.mk", "wb") do |tmf|</div><div class='del'>-      tmf.puts("!include Makefile")</div><div class='del'>-      tmf.puts</div><div class='del'>-      tmf.puts(*vars.map {|v| v.sub(/=/, " = ")})</div><div class='del'>-      tmf.puts("PRE_LIBRUBY_UPDATE = del #{mkf}")</div><div class='del'>-    end</div><div class='del'>-    $mflags.unshift("-f#{mkf}")</div><div class='del'>-    vars.each {|flag| flag.sub!(/\A/, "-D")}</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-system($make, *sysquote($mflags)) or exit($?.exitstatus)</div><div class='del'>-</div><div class='del'>-#Local variables:</div><div class='del'>-# mode: ruby</div><div class='del'>-#end:</div><div class='head'>diff --git a/ext/fcntl/.cvsignore b/ext/fcntl/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/fcntl/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/fcntl/.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/fcntl/depend b/ext/fcntl/depend<br/>deleted file mode 100644<br/>index 10eab64a46..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/fcntl/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/fcntl/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-fcntl.o: fcntl.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/>deleted file mode 100644<br/>index 57cca103f4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/fcntl/fcntl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/fcntl/fcntl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,187 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  fcntl.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  created at: Mon Apr  7 18:53:05 JST 1997</div><div class='del'>-</div><div class='del'>-  Copyright (C) 1997-2001 Yukihiro Matsumoto</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-/************************************************</div><div class='del'>-= NAME</div><div class='del'>-</div><div class='del'>-fcntl - load the C fcntl.h defines</div><div class='del'>-</div><div class='del'>-= SYNOPSIS</div><div class='del'>-</div><div class='del'>-    require "fcntl"</div><div class='del'>-    m = s.fcntl(Fcntl::F_GETFL, 0)</div><div class='del'>-    f.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK|m)</div><div class='del'>-</div><div class='del'>-= DESCRIPTION</div><div class='del'>-</div><div class='del'>-This module is just a translation of the C &lt;fnctl.h&gt; file.</div><div class='del'>-</div><div class='del'>-= NOTE</div><div class='del'>-</div><div class='del'>-Only #define symbols get translated; you must still correctly</div><div class='del'>-pack up your own arguments to pass as args for locking functions, etc.</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;fcntl.h&gt;</div><div class='del'>-</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='del'>-void</div><div class='del'>-Init_fcntl()</div><div class='del'>-{</div><div class='del'>-    VALUE mFcntl = rb_define_module("Fcntl");</div><div class='del'>-#ifdef F_DUPFD</div><div class='del'>-    rb_define_const(mFcntl, "F_DUPFD", INT2NUM(F_DUPFD));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_GETFD</div><div class='del'>-    rb_define_const(mFcntl, "F_GETFD", INT2NUM(F_GETFD));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_GETLK</div><div class='del'>-    rb_define_const(mFcntl, "F_GETLK", INT2NUM(F_GETLK));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_SETFD</div><div class='del'>-    rb_define_const(mFcntl, "F_SETFD", INT2NUM(F_SETFD));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_GETFL</div><div class='del'>-    rb_define_const(mFcntl, "F_GETFL", INT2NUM(F_GETFL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_SETFL</div><div class='del'>-    rb_define_const(mFcntl, "F_SETFL", INT2NUM(F_SETFL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_SETLK</div><div class='del'>-    rb_define_const(mFcntl, "F_SETLK", INT2NUM(F_SETLK));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_SETLKW</div><div class='del'>-    rb_define_const(mFcntl, "F_SETLKW", INT2NUM(F_SETLKW));</div><div class='del'>-#endif</div><div class='del'>-#ifdef FD_CLOEXEC</div><div class='del'>-    rb_define_const(mFcntl, "FD_CLOEXEC", INT2NUM(FD_CLOEXEC));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_RDLCK</div><div class='del'>-    rb_define_const(mFcntl, "F_RDLCK", INT2NUM(F_RDLCK));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_UNLCK</div><div class='del'>-    rb_define_const(mFcntl, "F_UNLCK", INT2NUM(F_UNLCK));</div><div class='del'>-#endif</div><div class='del'>-#ifdef F_WRLCK</div><div class='del'>-    rb_define_const(mFcntl, "F_WRLCK", INT2NUM(F_WRLCK));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_CREAT</div><div class='del'>-    rb_define_const(mFcntl, "O_CREAT", INT2NUM(O_CREAT));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_EXCL</div><div class='del'>-    rb_define_const(mFcntl, "O_EXCL", INT2NUM(O_EXCL));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_NOCTTY</div><div class='del'>-    rb_define_const(mFcntl, "O_NOCTTY", INT2NUM(O_NOCTTY));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_TRUNC</div><div class='del'>-    rb_define_const(mFcntl, "O_TRUNC", INT2NUM(O_TRUNC));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_APPEND</div><div class='del'>-    rb_define_const(mFcntl, "O_APPEND", INT2NUM(O_APPEND));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_NONBLOCK</div><div class='del'>-    rb_define_const(mFcntl, "O_NONBLOCK", INT2NUM(O_NONBLOCK));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_NDELAY</div><div class='del'>-    rb_define_const(mFcntl, "O_NDELAY", INT2NUM(O_NDELAY));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_RDONLY</div><div class='del'>-    rb_define_const(mFcntl, "O_RDONLY", INT2NUM(O_RDONLY));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_RDWR</div><div class='del'>-    rb_define_const(mFcntl, "O_RDWR", INT2NUM(O_RDWR));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_WRONLY</div><div class='del'>-    rb_define_const(mFcntl, "O_WRONLY", INT2NUM(O_WRONLY));</div><div class='del'>-#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='del'>-}</div><div class='head'>diff --git a/ext/gdbm/.cvsignore b/ext/gdbm/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/gdbm/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/.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/gdbm/README b/ext/gdbm/README<br/>deleted file mode 100644<br/>index df7a261c68..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/gdbm/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-gdbm ext-library for Ruby 1.3 or later</div><div class='head'>diff --git a/ext/gdbm/depend b/ext/gdbm/depend<br/>deleted file mode 100644<br/>index c080a81619..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/gdbm/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-gdbm.o: gdbm.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/gdbm/extconf.rb b/ext/gdbm/extconf.rb<br/>deleted file mode 100644<br/>index 5a09492e5e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/gdbm/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-dir_config("gdbm")</div><div class='del'>-if have_library("gdbm", "gdbm_open") and</div><div class='del'>-   have_header("gdbm.h")</div><div class='del'>-  create_makefile("gdbm")</div><div class='del'>-end</div><div class='head'>diff --git a/ext/gdbm/gdbm.c b/ext/gdbm/gdbm.c<br/>deleted file mode 100644<br/>index 82109fda90..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/gdbm/gdbm.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/gdbm/gdbm.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1358 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  gdbm.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  modified at: Mon Jan 24 15:59:52 JST 1994</div><div class='del'>-</div><div class='del'>-  Documentation by Peter Adolphs &lt; futzilogik at users dot sourceforge dot net &gt;</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#include &lt;gdbm.h&gt;</div><div class='del'>-#include &lt;fcntl.h&gt;</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: GDBM</div><div class='del'>- *</div><div class='del'>- * == Summary</div><div class='del'>- *</div><div class='del'>- * Ruby extension for GNU dbm (gdbm) -- a simple database engine for storing</div><div class='del'>- * key-value pairs on disk.</div><div class='del'>- *</div><div class='del'>- * == Description</div><div class='del'>- *</div><div class='del'>- * GNU dbm is a library for simple databases. A database is a file that stores</div><div class='del'>- * key-value pairs. Gdbm allows the user to store, retrieve, and delete data by</div><div class='del'>- * key. It furthermore allows a non-sorted traversal of all key-value pairs.</div><div class='del'>- * A gdbm database thus provides the same functionality as a hash. As</div><div class='del'>- * with objects of the Hash class, elements can be accessed with &lt;tt&gt;[]&lt;/tt&gt;.</div><div class='del'>- * Furthermore, GDBM mixes in the Enumerable module, thus providing convenient</div><div class='del'>- * methods such as #find, #collect, #map, etc.</div><div class='del'>- *</div><div class='del'>- * A process is allowed to open several different databases at the same time.</div><div class='del'>- * A process can open a database as a "reader" or a "writer". Whereas a reader</div><div class='del'>- * has only read-access to the database, a writer has read- and write-access.</div><div class='del'>- * A database can be accessed either by any number of readers or by exactly one</div><div class='del'>- * writer at the same time.</div><div class='del'>- *</div><div class='del'>- * == Examples</div><div class='del'>- *</div><div class='del'>- * 1. Opening/creating a database, and filling it with some entries:</div><div class='del'>- *</div><div class='del'>- *      require 'gdbm'</div><div class='del'>- *      </div><div class='del'>- *      gdbm = GDBM.new("fruitstore.db")</div><div class='del'>- *      gdbm["ananas"]    = "3"</div><div class='del'>- *      gdbm["banana"]    = "8"</div><div class='del'>- *      gdbm["cranberry"] = "4909"</div><div class='del'>- *      gdbm.close</div><div class='del'>- *</div><div class='del'>- * 2. Reading out a database:</div><div class='del'>- *</div><div class='del'>- *      require 'gdbm'</div><div class='del'>- *      </div><div class='del'>- *      gdbm = GDBM.new("fruitstore.db")</div><div class='del'>- *      gdbm.each_pair do |key, value|</div><div class='del'>- *        print "#{key}: #{value}\n"</div><div class='del'>- *      end</div><div class='del'>- *      gdbm.close</div><div class='del'>- *</div><div class='del'>- *    produces</div><div class='del'>- *</div><div class='del'>- *      banana: 8</div><div class='del'>- *      ananas: 3</div><div class='del'>- *      cranberry: 4909</div><div class='del'>- *</div><div class='del'>- * == Links</div><div class='del'>- *</div><div class='del'>- * * http://www.gnu.org/software/gdbm/</div><div class='del'>- */</div><div class='del'>-static VALUE rb_cGDBM, rb_eGDBMError, rb_eGDBMFatalError;</div><div class='del'>-</div><div class='del'>-#define RUBY_GDBM_RW_BIT 0x20000000</div><div class='del'>-</div><div class='del'>-#define MY_BLOCK_SIZE (2048)</div><div class='del'>-#define MY_FATAL_FUNC rb_gdbm_fatal</div><div class='del'>-static void</div><div class='del'>-rb_gdbm_fatal(msg)</div><div class='del'>-    char *msg;</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eGDBMFatalError, "%s", msg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct dbmdata {</div><div class='del'>-    int  di_size;</div><div class='del'>-    GDBM_FILE di_dbm;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-closed_dbm()</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eRuntimeError, "closed GDBM file");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define GetDBM(obj, dbmp) do {\</div><div class='del'>-    Data_Get_Struct(obj, struct dbmdata, dbmp);\</div><div class='del'>-    if (dbmp == 0) closed_dbm();\</div><div class='del'>-    if (dbmp-&gt;di_dbm == 0) closed_dbm();\</div><div class='del'>-} while (0)</div><div class='del'>-</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='del'>-static void</div><div class='del'>-free_dbm(dbmp)</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-{</div><div class='del'>-    if (dbmp) {</div><div class='del'>-        if (dbmp-&gt;di_dbm) gdbm_close(dbmp-&gt;di_dbm);</div><div class='del'>-        free(dbmp);</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'>- *     gdbm.close -&gt; nil</div><div class='del'>- *</div><div class='del'>- * Closes the associated database file.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_close(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'>-    GetDBM(obj, dbmp);</div><div class='del'>-    gdbm_close(dbmp-&gt;di_dbm);</div><div class='del'>-    dbmp-&gt;di_dbm = 0;</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'>- *     gdbm.closed?  -&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns true if the associated database file has been closed.</div><div class='del'>- */</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='del'>-static VALUE fgdbm_s_alloc _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_s_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return Data_Wrap_Struct(klass, 0, free_dbm, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      GDBM.new(filename, mode = 0666, flags = nil)</div><div class='del'>- *</div><div class='del'>- * Creates a new GDBM instance by opening a gdbm file named _filename_.</div><div class='del'>- * If the file does not exist, a new file with file mode _mode_ will be</div><div class='del'>- * created. _flags_ may be one of the following:</div><div class='del'>- * * *READER*  - open as a reader</div><div class='del'>- * * *WRITER*  - open as a writer</div><div class='del'>- * * *WRCREAT* - open as a writer; if the database does not exist, create a new one</div><div class='del'>- * * *NEWDB*   - open as a writer; overwrite any existing databases</div><div class='del'>- *</div><div class='del'>- * The values *WRITER*, *WRCREAT* and *NEWDB* may be combined with the following</div><div class='del'>- * values by bitwise or:</div><div class='del'>- * * *SYNC*    - cause all database operations to be synchronized to the disk</div><div class='del'>- * * *NOLOCK*  - do not lock the database file</div><div class='del'>- *</div><div class='del'>- * If no _flags_ are specified, the GDBM object will try to open the database</div><div class='del'>- * file as a writer and will create it if it does not already exist</div><div class='del'>- * (cf. flag &lt;tt&gt;WRCREAT&lt;/tt&gt;). If this fails (for instance, if another process</div><div class='del'>- * has already opened the database as a reader), it will try to open the</div><div class='del'>- * database file as a reader (cf. flag &lt;tt&gt;READER&lt;/tt&gt;).</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_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 file, vmode, vflags;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    int mode, flags = 0;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "12", &amp;file, &amp;vmode, &amp;vflags) == 1) {</div><div class='del'>-        mode = 0666;            /* default value */</div><div class='del'>-    }</div><div class='del'>-    else if (NIL_P(vmode)) {</div><div class='del'>-        mode = -1;              /* return nil if DB does not exist */</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        mode = NUM2INT(vmode);</div><div class='del'>-    }</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='del'>-    SafeStringValue(file);</div><div class='del'>-</div><div class='del'>-    if (flags &amp; RUBY_GDBM_RW_BIT) {</div><div class='del'>-        flags &amp;= ~RUBY_GDBM_RW_BIT;</div><div class='del'>-	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='del'>-</div><div class='del'>-    if (!dbm) {</div><div class='del'>-	if (mode == -1) return Qnil;</div><div class='del'>-</div><div class='del'>-	if (gdbm_errno == GDBM_FILE_OPEN_ERROR ||</div><div class='del'>-	    gdbm_errno == GDBM_CANT_BE_READER ||</div><div class='del'>-	    gdbm_errno == GDBM_CANT_BE_WRITER)</div><div class='del'>-	    rb_sys_fail(RSTRING(file)-&gt;ptr);</div><div class='del'>-	else</div><div class='del'>-	    rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    dbmp = ALLOC(struct dbmdata);</div><div class='del'>-    free_dbm(DATA_PTR(obj));</div><div class='del'>-    DATA_PTR(obj) = dbmp;</div><div class='del'>-    dbmp-&gt;di_dbm = dbm;</div><div class='del'>-    dbmp-&gt;di_size = -1;</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'>- * call-seq:</div><div class='del'>- *      GDBM.open(filename, mode = 0666, flags = nil)</div><div class='del'>- *      GDBM.open(filename, mode = 0666, flags = nil) { |gdbm| ... }</div><div class='del'>- *</div><div class='del'>- * If called without a block, this is synonymous to GDBM::new.</div><div class='del'>- * If a block is given, the new GDBM instance will be passed to the block</div><div class='del'>- * as a parameter, and the corresponding database file will be closed</div><div class='del'>- * after the execution of the block code has been finished.</div><div class='del'>- *</div><div class='del'>- * Example for an open call with a block:</div><div class='del'>- *</div><div class='del'>- *   require 'gdbm'</div><div class='del'>- *   GDBM.open("fruitstore.db") do |gdbm|</div><div class='del'>- *     gdbm.each_pair do |key, value|</div><div class='del'>- *       print "#{key}: #{value}\n"</div><div class='del'>- *     end</div><div class='del'>- *   end</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = Data_Wrap_Struct(klass, 0, free_dbm, 0);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(fgdbm_initialize(argc, argv, obj))) {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-        return rb_ensure(rb_yield, obj, fgdbm_close, obj);</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'>-rb_gdbm_fetch(dbm, key)</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    datum key;</div><div class='del'>-{</div><div class='del'>-    datum val;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    val = gdbm_fetch(dbm, key);</div><div class='del'>-    if (val.dptr == 0)</div><div class='del'>-        return Qnil;</div><div class='del'>-</div><div class='del'>-    str = rb_obj_alloc(rb_cString);</div><div class='del'>-    RSTRING(str)-&gt;len = val.dsize;</div><div class='del'>-    RSTRING(str)-&gt;aux.capa = val.dsize;</div><div class='del'>-    RSTRING(str)-&gt;ptr = REALLOC_N(val.dptr,char,val.dsize+1);</div><div class='del'>-    RSTRING(str)-&gt;ptr[val.dsize] = '\0';</div><div class='del'>-</div><div class='del'>-    OBJ_TAINT(str);</div><div class='del'>-    return (VALUE)str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_gdbm_fetch2(dbm, keystr)</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    return rb_gdbm_fetch(dbm, key);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_gdbm_fetch3(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    return rb_gdbm_fetch2(dbm, keystr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_gdbm_firstkey(dbm)</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    key = gdbm_firstkey(dbm);</div><div class='del'>-    if (key.dptr == 0)</div><div class='del'>-        return Qnil;</div><div class='del'>-</div><div class='del'>-    str = rb_obj_alloc(rb_cString);</div><div class='del'>-    RSTRING(str)-&gt;len = key.dsize;</div><div class='del'>-    RSTRING(str)-&gt;aux.capa = key.dsize;</div><div class='del'>-    RSTRING(str)-&gt;ptr = REALLOC_N(key.dptr,char,key.dsize+1);</div><div class='del'>-    RSTRING(str)-&gt;ptr[RSTRING(str)-&gt;len] = '\0';</div><div class='del'>-</div><div class='del'>-    OBJ_TAINT(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'>-rb_gdbm_nextkey(dbm, keystr)</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr;</div><div class='del'>-{</div><div class='del'>-    datum key, key2;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-    key2 = gdbm_nextkey(dbm, key);</div><div class='del'>-    if (key2.dptr == 0)</div><div class='del'>-        return Qnil;</div><div class='del'>-</div><div class='del'>-    str = rb_obj_alloc(rb_cString);</div><div class='del'>-    RSTRING(str)-&gt;len = key2.dsize;</div><div class='del'>-    RSTRING(str)-&gt;aux.capa = key2.dsize;</div><div class='del'>-    RSTRING(str)-&gt;ptr = REALLOC_N(key2.dptr,char,key2.dsize+1);</div><div class='del'>-    RSTRING(str)-&gt;ptr[RSTRING(str)-&gt;len] = '\0';</div><div class='del'>-</div><div class='del'>-    OBJ_TAINT(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'>-fgdbm_fetch(obj, keystr, ifnone)</div><div class='del'>-    VALUE obj, keystr, ifnone;</div><div class='del'>-{</div><div class='del'>-    VALUE valstr;</div><div class='del'>-</div><div class='del'>-    valstr = rb_gdbm_fetch3(obj, keystr);</div><div class='del'>-    if (NIL_P(valstr)) {</div><div class='del'>-	if (ifnone == Qnil &amp;&amp; rb_block_given_p())</div><div class='del'>-	    return rb_yield(keystr);</div><div class='del'>-	return ifnone;</div><div class='del'>-    }</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm[key] -&gt; value</div><div class='del'>- *</div><div class='del'>- * Retrieves the _value_ corresponding to _key_.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_aref(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    return rb_gdbm_fetch3(obj, keystr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.fetch(key [, default]) -&gt; value</div><div class='del'>- *</div><div class='del'>- * Retrieves the _value_ corresponding to _key_. If there is no value</div><div class='del'>- * associated with _key_, _default_ will be returned instead.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_fetch_m(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 keystr, valstr, ifnone;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;keystr, &amp;ifnone);</div><div class='del'>-    valstr = fgdbm_fetch(obj, keystr, ifnone);</div><div class='del'>-    if (argc == 1 &amp;&amp; !rb_block_given_p() &amp;&amp; NIL_P(valstr))</div><div class='del'>-        rb_raise(rb_eIndexError, "key not found");</div><div class='del'>-</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.index(value) -&gt; key</div><div class='del'>- *</div><div class='del'>- * Returns the _key_ for a given _value_. If several keys may map to the</div><div class='del'>- * same value, the key that is found first will be returned.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_index(obj, valstr)</div><div class='del'>-    VALUE obj, valstr;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr, valstr2;</div><div class='del'>-</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-	valstr2 = rb_gdbm_fetch2(dbm, keystr);</div><div class='del'>-        if (!NIL_P(valstr2) &amp;&amp;</div><div class='del'>-            RSTRING(valstr)-&gt;len == RSTRING(valstr2)-&gt;len &amp;&amp;</div><div class='del'>-            memcmp(RSTRING(valstr)-&gt;ptr, RSTRING(valstr2)-&gt;ptr,</div><div class='del'>-                   RSTRING(valstr)-&gt;len) == 0) {</div><div class='del'>-	    return keystr;</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'>-fgdbm_indexes(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;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    new = rb_ary_new2(argc);</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.select { |value| block } -&gt; array</div><div class='del'>- *</div><div class='del'>- * Returns a new array of all values of the database for which _block_</div><div class='del'>- * evaluates to true.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_select(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'>-    if (rb_block_given_p()) {</div><div class='del'>-        GDBM_FILE dbm;</div><div class='del'>-        struct dbmdata *dbmp;</div><div class='del'>-        VALUE keystr;</div><div class='del'>-</div><div class='del'>-	if (argc &gt; 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number arguments(%d for 0)", argc);</div><div class='del'>-	}</div><div class='del'>-        GetDBM2(obj, dbmp, dbm);</div><div class='del'>-        for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-             keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-            VALUE assoc = rb_assoc_new(keystr, rb_gdbm_fetch2(dbm, keystr));</div><div class='del'>-	    VALUE v = rb_yield(assoc);</div><div class='del'>-</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='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_warn("GDBM#select(index..) is deprecated; use GDBM#values_at");</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'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.values_at(key, ...) -&gt; array</div><div class='del'>- *</div><div class='del'>- * Returns an array of the values associated with each specified _key_.</div><div class='del'>- */</div><div class='del'>-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='del'>-rb_gdbm_delete(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-</div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    if (!gdbm_exists(dbm, key)) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (gdbm_delete(dbm, key)) {</div><div class='del'>-        dbmp-&gt;di_size = -1;</div><div class='del'>-        rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</div><div class='del'>-    }</div><div class='del'>-    else if (dbmp-&gt;di_size &gt;= 0) {</div><div class='del'>-        dbmp-&gt;di_size--;</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'>- * call-seq:</div><div class='del'>- *      gdbm.delete(key) -&gt; value or nil</div><div class='del'>- *</div><div class='del'>- * Removes the key-value-pair with the specified _key_ from this database and</div><div class='del'>- * returns the corresponding _value_. Returns nil if the database is empty.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_delete(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    VALUE valstr;</div><div class='del'>-</div><div class='del'>-    valstr = fgdbm_fetch(obj, keystr, Qnil);</div><div class='del'>-    rb_gdbm_delete(obj, keystr);</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.shift -&gt; (key, value) or nil</div><div class='del'>- *</div><div class='del'>- * Removes a key-value-pair from this database and returns it as a </div><div class='del'>- * two-item array [ _key_, _value_ ]. Returns nil if the database is empty.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_shift(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-</div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    keystr = rb_gdbm_firstkey(dbm);</div><div class='del'>-    if (NIL_P(keystr)) return Qnil;</div><div class='del'>-    valstr = rb_gdbm_fetch2(dbm, keystr);</div><div class='del'>-    rb_gdbm_delete(obj, keystr);</div><div class='del'>-</div><div class='del'>-    return rb_assoc_new(keystr, valstr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.delete_if { |key, value| block } -&gt; gdbm</div><div class='del'>- *      gdbm.reject! { |key, value| block } -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Deletes every key-value pair from _gdbm_ for which _block_ evaluates to true.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_delete_if(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-    VALUE ret, ary = rb_ary_new();</div><div class='del'>-    int i, status = 0, n;</div><div class='del'>-</div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    n = dbmp-&gt;di_size;</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-        valstr = rb_gdbm_fetch2(dbm, keystr);</div><div class='del'>-        ret = rb_protect(rb_yield, rb_assoc_new(keystr, valstr), &amp;status);</div><div class='del'>-        if (status != 0) break;</div><div class='del'>-        if (RTEST(ret)) rb_ary_push(ary, keystr);</div><div class='del'>-        GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++)</div><div class='del'>-        rb_gdbm_delete(obj, RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-    if (status) rb_jump_tag(status);</div><div class='del'>-    if (n &gt; 0) dbmp-&gt;di_size = n - RARRAY(ary)-&gt;len;</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'>- * call-seq:</div><div class='del'>- *      gdbm.clear -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Removes all the key-value pairs within _gdbm_.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_clear(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, nextkey;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-</div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-    while (key = gdbm_firstkey(dbm), key.dptr) {</div><div class='del'>-        if (gdbm_delete(dbm, key)) {</div><div class='del'>-            free(key.dptr);</div><div class='del'>-            rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</div><div class='del'>-        }</div><div class='del'>-        free(key.dptr); </div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    while (key = gdbm_firstkey(dbm), key.dptr) {</div><div class='del'>-        for (; key.dptr; key = nextkey) {</div><div class='del'>-            nextkey = gdbm_nextkey(dbm, key);</div><div class='del'>-            if (gdbm_delete(dbm, key)) {</div><div class='del'>-                free(key.dptr);</div><div class='del'>-                if (nextkey.dptr) free(nextkey.dptr);</div><div class='del'>-                rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</div><div class='del'>-            }</div><div class='del'>-            free(key.dptr);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    dbmp-&gt;di_size = 0;</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'>- * call-seq:</div><div class='del'>- *     gdbm.invert  -&gt; hash</div><div class='del'>- *</div><div class='del'>- * Returns a hash created by using _gdbm_'s values as keys, and the keys</div><div class='del'>- * as values.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_invert(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-    VALUE hash = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-	valstr = rb_gdbm_fetch2(dbm, keystr);</div><div class='del'>-</div><div class='del'>-	rb_hash_aset(hash, valstr, keystr);</div><div class='del'>-    }</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE each_pair _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-each_pair(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(obj, rb_intern("each_pair"), 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE fgdbm_store _((VALUE,VALUE,VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-update_i(pair, dbm)</div><div class='del'>-    VALUE pair, dbm;</div><div class='del'>-{</div><div class='del'>-    Check_Type(pair, T_ARRAY);</div><div class='del'>-    if (RARRAY(pair)-&gt;len &lt; 2) {</div><div class='del'>-	rb_raise(rb_eArgError, "pair must be [key, value]");</div><div class='del'>-    }</div><div class='del'>-    fgdbm_store(dbm, RARRAY(pair)-&gt;ptr[0], RARRAY(pair)-&gt;ptr[1]);</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'>- *     gdbm.update(other) -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Adds the key-value pairs of _other_ to _gdbm_, overwriting entries with</div><div class='del'>- * duplicate keys with those from _other_. _other_ must have an each_pair</div><div class='del'>- * method.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_update(obj, other)</div><div class='del'>-    VALUE obj, other;</div><div class='del'>-{</div><div class='del'>-    rb_iterate(each_pair, other, update_i, obj);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     gdbm.replace(other) -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Replaces the content of _gdbm_ with the key-value pairs of _other_.</div><div class='del'>- * _other_ must have an each_pair method.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_replace(obj, other)</div><div class='del'>-    VALUE obj, other;</div><div class='del'>-{</div><div class='del'>-    fgdbm_clear(obj);</div><div class='del'>-    rb_iterate(each_pair, other, update_i, obj);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm[key]= value -&gt; value</div><div class='del'>- *      gdbm.store(key, value) -&gt; value</div><div class='del'>- *</div><div class='del'>- * Associates the value _value_ with the specified _key_.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_store(obj, keystr, valstr)</div><div class='del'>-    VALUE obj, keystr, valstr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-</div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='del'>-    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-    if (gdbm_store(dbm, key, val, GDBM_REPLACE)) {</div><div class='del'>-        if (errno == EPERM) rb_sys_fail(0);</div><div class='del'>-        rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.length -&gt; fixnum</div><div class='del'>- *      gdbm.size -&gt; fixnum</div><div class='del'>- *</div><div class='del'>- * Returns the number of key-value pairs in this database.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_length(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, nextkey;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    int i = 0;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    if (dbmp-&gt;di_size &gt; 0) return INT2FIX(dbmp-&gt;di_size);</div><div class='del'>-</div><div class='del'>-    for (key = gdbm_firstkey(dbm); key.dptr; key = nextkey) {</div><div class='del'>-        nextkey = gdbm_nextkey(dbm, key);</div><div class='del'>-        free(key.dptr);</div><div class='del'>-	i++;</div><div class='del'>-    }</div><div class='del'>-    dbmp-&gt;di_size = i;</div><div class='del'>-</div><div class='del'>-    return INT2FIX(i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.empty? -&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns true if the database is empty.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_empty_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-</div><div class='del'>-    GetDBM(obj, dbmp);</div><div class='del'>-    if (dbmp-&gt;di_size &lt; 0) {</div><div class='del'>-	dbm = dbmp-&gt;di_dbm;</div><div class='del'>-</div><div class='del'>-	key = gdbm_firstkey(dbm);</div><div class='del'>-        if (key.dptr) {</div><div class='del'>-            free(key.dptr);</div><div class='del'>-            return Qfalse;</div><div class='del'>-	}</div><div class='del'>-        return Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (dbmp-&gt;di_size == 0) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.each_value { |value| block } -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Executes _block_ for each key in the database, passing the corresponding</div><div class='del'>- * _value_ as a parameter.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_each_value(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-        rb_yield(rb_gdbm_fetch2(dbm, keystr));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</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'>- * call-seq:</div><div class='del'>- *      gdbm.each_key { |key| block } -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Executes _block_ for each key in the database, passing the</div><div class='del'>- * _key_ as a parameter.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_each_key(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-        rb_yield(keystr);</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</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'>- * call-seq:</div><div class='del'>- *      gdbm.each_pair { |key, value| block } -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Executes _block_ for each key in the database, passing the _key_ and the</div><div class='del'>- * correspoding _value_ as a parameter.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_each_pair(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    VALUE keystr;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-        rb_yield(rb_assoc_new(keystr, rb_gdbm_fetch2(dbm, keystr)));</div><div class='del'>-        GetDBM2(obj, dbmp, dbm);</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'>- * call-seq:</div><div class='del'>- *      gdbm.keys -&gt; array</div><div class='del'>- *</div><div class='del'>- * Returns an array of all keys of this database.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_keys(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr, ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-        rb_ary_push(ary, keystr);</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'>- * call-seq:</div><div class='del'>- *      gdbm.values -&gt; array</div><div class='del'>- *</div><div class='del'>- * Returns an array of all values of this database.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_values(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, nextkey;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE valstr, ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (key = gdbm_firstkey(dbm); key.dptr; key = nextkey) {</div><div class='del'>-        nextkey = gdbm_nextkey(dbm, key);</div><div class='del'>-        valstr = rb_gdbm_fetch(dbm, key);</div><div class='del'>-        free(key.dptr);</div><div class='del'>-        rb_ary_push(ary, valstr);</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'>- * call-seq:</div><div class='del'>- *      gdbm.has_key?(k) -&gt; true or false</div><div class='del'>- *      gdbm.key?(k) -&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns true if the given key _k_ exists within the database.</div><div class='del'>- * Returns false otherwise.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_has_key(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    if (gdbm_exists(dbm, key))</div><div class='del'>-        return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.has_value?(v) -&gt; true or false</div><div class='del'>- *      gdbm.value?(v) -&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns true if the given value _v_ exists within the database.</div><div class='del'>- * Returns false otherwise.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_has_value(obj, valstr)</div><div class='del'>-    VALUE obj, valstr;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr, valstr2;</div><div class='del'>-</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-	valstr2 = rb_gdbm_fetch2(dbm, keystr);</div><div class='del'>-</div><div class='del'>-        if (!NIL_P(valstr2) &amp;&amp;</div><div class='del'>-            RSTRING(valstr)-&gt;len == RSTRING(valstr2)-&gt;len &amp;&amp;</div><div class='del'>-            memcmp(RSTRING(valstr)-&gt;ptr, RSTRING(valstr2)-&gt;ptr,</div><div class='del'>-                   RSTRING(valstr)-&gt;len) == 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'>- * call-seq:</div><div class='del'>- *     gdbm.to_a -&gt; array</div><div class='del'>- *</div><div class='del'>- * Returns an array of all key-value pairs contained in the database.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_to_a(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr, ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-        rb_ary_push(ary, rb_assoc_new(keystr, rb_gdbm_fetch2(dbm, keystr)));</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'>- * call-seq:</div><div class='del'>- *     gdbm.reorganize -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Reorganizes the database file. This operation removes reserved space of</div><div class='del'>- * elements that have already been deleted. It is only useful after a lot of</div><div class='del'>- * deletions in the database.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_reorganize(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-</div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    gdbm_reorganize(dbm);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     gdbm.sync -&gt; gdbm</div><div class='del'>- *</div><div class='del'>- * Unless the _gdbm_ object has been opened with the *SYNC* flag, it is not</div><div class='del'>- * guarenteed that database modification operations are immediately applied to</div><div class='del'>- * the database file. This method ensures that all recent modifications</div><div class='del'>- * to the database are written to the file. Blocks until all writing operations</div><div class='del'>- * to the disk have been finished.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_sync(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-</div><div class='del'>-    rb_gdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    gdbm_sync(dbm);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     gdbm.cachesize = size -&gt; size</div><div class='del'>- *</div><div class='del'>- * Sets the size of the internal bucket cache to _size_.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_set_cachesize(obj, val)</div><div class='del'>-    VALUE obj, val;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    int optval;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    optval = FIX2INT(val);</div><div class='del'>-    if (gdbm_setopt(dbm, GDBM_CACHESIZE, &amp;optval, sizeof(optval)) == -1) {</div><div class='del'>-        rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</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'>- * call-seq:</div><div class='del'>- *     gdbm.fastmode = boolean -&gt; boolean</div><div class='del'>- *</div><div class='del'>- * Turns the database's fast mode on or off. If fast mode is turned on, gdbm</div><div class='del'>- * does not wait for writes to be flushed to the disk before continuing.</div><div class='del'>- *</div><div class='del'>- * This option is obsolete for gdbm &gt;= 1.8 since fast mode is turned on by</div><div class='del'>- * default. See also: #syncmode=</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_set_fastmode(obj, val)</div><div class='del'>-    VALUE obj, val;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    int optval;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    optval = 0;</div><div class='del'>-    if (RTEST(val))</div><div class='del'>-        optval = 1;</div><div class='del'>-</div><div class='del'>-    if (gdbm_setopt(dbm, GDBM_FASTMODE, &amp;optval, sizeof(optval)) == -1) {</div><div class='del'>-        rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</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'>- * call-seq:</div><div class='del'>- *     gdbm.syncmode = boolean -&gt; boolean</div><div class='del'>- *</div><div class='del'>- * Turns the database's synchronization mode on or off. If the synchronization</div><div class='del'>- * mode is turned on, the database's in-memory state will be synchronized to</div><div class='del'>- * disk after every database modification operation. If the synchronization</div><div class='del'>- * mode is turned off, GDBM does not wait for writes to be flushed to the disk</div><div class='del'>- * before continuing.</div><div class='del'>- *</div><div class='del'>- * This option is only available for gdbm &gt;= 1.8 where syncmode is turned off</div><div class='del'>- * by default. See also: #fastmode=</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_set_syncmode(obj, val)</div><div class='del'>-    VALUE obj, val;</div><div class='del'>-{</div><div class='del'>-#if !defined(GDBM_SYNCMODE)</div><div class='del'>-    fgdbm_set_fastmode(obj, RTEST(val) ? Qfalse : Qtrue);</div><div class='del'>-    return val;</div><div class='del'>-#else</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    int optval;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    optval = 0;</div><div class='del'>-    if (RTEST(val))</div><div class='del'>-        optval = 1;</div><div class='del'>-</div><div class='del'>-    if (gdbm_setopt(dbm, GDBM_FASTMODE, &amp;optval, sizeof(optval)) == -1) {</div><div class='del'>-        rb_raise(rb_eGDBMError, "%s", gdbm_strerror(gdbm_errno));</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *     gdbm.to_hash -&gt; hash</div><div class='del'>- *</div><div class='del'>- * Returns a hash of all key-value pairs contained in the database.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_to_hash(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    GDBM_FILE dbm;</div><div class='del'>-    VALUE keystr, hash;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-    for (keystr = rb_gdbm_firstkey(dbm); RTEST(keystr);</div><div class='del'>-         keystr = rb_gdbm_nextkey(dbm, keystr)) {</div><div class='del'>-</div><div class='del'>-        rb_hash_aset(hash, keystr, rb_gdbm_fetch2(dbm, keystr));</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *      gdbm.reject { |key, value| block } -&gt; hash</div><div class='del'>- *</div><div class='del'>- * Returns a hash copy of _gdbm_ where all key-value pairs from _gdbm_ for</div><div class='del'>- * which _block_ evaluates to true are removed. See also: #delete_if</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fgdbm_reject(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_hash_delete_if(fgdbm_to_hash(obj));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_gdbm()</div><div class='del'>-{</div><div class='del'>-    rb_cGDBM = rb_define_class("GDBM", rb_cObject);</div><div class='del'>-    rb_eGDBMError = rb_define_class("GDBMError", rb_eStandardError);</div><div class='del'>-    rb_eGDBMFatalError = rb_define_class("GDBMFatalError", rb_eException);</div><div class='del'>-    rb_include_module(rb_cGDBM, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cGDBM, fgdbm_s_alloc);</div><div class='del'>-    rb_define_singleton_method(rb_cGDBM, "open", fgdbm_s_open, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cGDBM, "initialize", fgdbm_initialize, -1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cGDBM, "[]", fgdbm_aref, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "fetch", fgdbm_fetch_m, -1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "[]=", fgdbm_store, 2);</div><div class='del'>-    rb_define_method(rb_cGDBM, "store", fgdbm_store, 2);</div><div class='del'>-    rb_define_method(rb_cGDBM, "index",  fgdbm_index, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "indexes",  fgdbm_indexes, -1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "indices",  fgdbm_indexes, -1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cGDBM, "length", fgdbm_length, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "size", fgdbm_length, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "empty?", fgdbm_empty_p, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "each", fgdbm_each_pair, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "each_value", fgdbm_each_value, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "each_key", fgdbm_each_key, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "each_pair", fgdbm_each_pair, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "keys", fgdbm_keys, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "values", fgdbm_values, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "shift", fgdbm_shift, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "delete", fgdbm_delete, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "delete_if", fgdbm_delete_if, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "reject!", fgdbm_delete_if, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "reject", fgdbm_reject, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "clear", fgdbm_clear, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "invert", fgdbm_invert, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "update", fgdbm_update, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "replace", fgdbm_replace, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "reorganize", fgdbm_reorganize, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "sync", fgdbm_sync, 0);</div><div class='del'>-    /* rb_define_method(rb_cGDBM, "setopt", fgdbm_setopt, 2); */</div><div class='del'>-    rb_define_method(rb_cGDBM, "cachesize=", fgdbm_set_cachesize, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "fastmode=", fgdbm_set_fastmode, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "syncmode=", fgdbm_set_syncmode, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cGDBM, "include?", fgdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "has_key?", fgdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "member?", fgdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "has_value?", fgdbm_has_value, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "key?", fgdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cGDBM, "value?", fgdbm_has_value, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cGDBM, "to_a", fgdbm_to_a, 0);</div><div class='del'>-    rb_define_method(rb_cGDBM, "to_hash", fgdbm_to_hash, 0);</div><div class='del'>-</div><div class='del'>-    /* flag for #new and #open: open database as a reader */</div><div class='del'>-    rb_define_const(rb_cGDBM, "READER",  INT2FIX(GDBM_READER|RUBY_GDBM_RW_BIT));</div><div class='del'>-    /* flag for #new and #open: open database as a writer */</div><div class='del'>-    rb_define_const(rb_cGDBM, "WRITER",  INT2FIX(GDBM_WRITER|RUBY_GDBM_RW_BIT));</div><div class='del'>-    /* flag for #new and #open: open database as a writer; if the database does not exist, create a new one */</div><div class='del'>-    rb_define_const(rb_cGDBM, "WRCREAT", INT2FIX(GDBM_WRCREAT|RUBY_GDBM_RW_BIT));</div><div class='del'>-    /* flag for #new and #open: open database as a writer; overwrite any existing databases  */</div><div class='del'>-    rb_define_const(rb_cGDBM, "NEWDB",   INT2FIX(GDBM_NEWDB|RUBY_GDBM_RW_BIT));</div><div class='del'>-</div><div class='del'>-    /* flag for #new and #open. this flag is obsolete for gdbm &gt;= 1.8 */</div><div class='del'>-    rb_define_const(rb_cGDBM, "FAST", INT2FIX(GDBM_FAST));</div><div class='del'>-    /* this flag is obsolete in gdbm 1.8.</div><div class='del'>-       On gdbm 1.8, fast mode is default behavior. */</div><div class='del'>-</div><div class='del'>-    /* gdbm version 1.8 specific */</div><div class='del'>-#if defined(GDBM_SYNC)</div><div class='del'>-    /* flag for #new and #open. only for gdbm &gt;= 1.8 */</div><div class='del'>-    rb_define_const(rb_cGDBM, "SYNC",    INT2FIX(GDBM_SYNC));</div><div class='del'>-#endif</div><div class='del'>-#if defined(GDBM_NOLOCK)</div><div class='del'>-    /* flag for #new and #open */</div><div class='del'>-    rb_define_const(rb_cGDBM, "NOLOCK",  INT2FIX(GDBM_NOLOCK));</div><div class='del'>-#endif</div><div class='del'>-    /* version of the gdbm library*/</div><div class='del'>-    rb_define_const(rb_cGDBM, "VERSION",  rb_str_new2(gdbm_version));</div><div class='del'>-}</div><div class='head'>diff --git a/ext/iconv/.cvsignore b/ext/iconv/.cvsignore<br/>deleted file mode 100644<br/>index 394787fced..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/iconv/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/iconv/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-mkmf.log</div><div class='del'>-*.def</div><div class='del'>-iconv.rb</div><div class='del'>-config.charset</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/depend b/ext/iconv/depend<br/>deleted file mode 100644<br/>index 688ddd97b7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/iconv/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/iconv/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-iconv.o: iconv.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h \</div><div class='del'>-  $(hdrdir)/intern.h</div><div class='head'>diff --git a/ext/iconv/extconf.rb b/ext/iconv/extconf.rb<br/>deleted file mode 100644<br/>index a9d0cfb5e6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/iconv/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/iconv/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-dir_config("iconv")</div><div class='del'>-</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='del'>-  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='del'>-end</div><div class='head'>diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c<br/>deleted file mode 100644<br/>index d989b97df2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/iconv/iconv.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/iconv/iconv.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,913 +0,0 @@</div><div class='del'>-/* -*- mode:c; c-file-style:"ruby" -*- */</div><div class='del'>-/**********************************************************************</div><div class='del'>-</div><div class='del'>-  iconv.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  created at: Wed Dec  1 20:28:09 JST 1999</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'>-  Documentation by Yukihiro Matsumoto and Gavin Sinclair.</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;errno.h&gt;</div><div class='del'>-#include &lt;iconv.h&gt;</div><div class='del'>-#include &lt;assert.h&gt;</div><div class='del'>-#include "st.h"</div><div class='del'>-#include "intern.h"</div><div class='del'>-</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. Simple conversion between two charsets.</div><div class='del'>- *</div><div class='del'>- *      converted_text = Iconv.conv('iso-8859-15', 'utf-8', text)</div><div class='del'>- *</div><div class='del'>- * 2. 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'>- * 3. 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'>- * 4. Shorthand for (3).</div><div class='del'>- *</div><div class='del'>- *      Iconv.iconv(to, from, *input.to_a)</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/* Invalid value for iconv_t is -1 but 0 for VALUE, I hope VALUE is</div><div class='del'>-   big enough to keep iconv_t */</div><div class='del'>-#define VALUE2ICONV(v) ((iconv_t)((VALUE)(v) ^ -1))</div><div class='del'>-#define ICONV2VALUE(c) ((VALUE)(c) ^ -1)</div><div class='del'>-</div><div class='del'>-struct iconv_env_t</div><div class='del'>-{</div><div class='del'>-    iconv_t cd;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE ret;</div><div class='del'>-    VALUE (*append)_((VALUE, VALUE));</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE rb_eIconvInvalidEncoding;</div><div class='del'>-static VALUE rb_eIconvFailure;</div><div class='del'>-static VALUE rb_eIconvIllegalSeq;</div><div class='del'>-static VALUE rb_eIconvInvalidChar;</div><div class='del'>-static VALUE rb_eIconvOutOfRange;</div><div class='del'>-static VALUE rb_eIconvBrokenLibrary;</div><div class='del'>-</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='del'>-static VALUE iconv_failure_success _((VALUE self));</div><div class='del'>-static VALUE iconv_failure_failed _((VALUE self));</div><div class='del'>-</div><div class='del'>-static iconv_t iconv_create _((VALUE to, VALUE from));</div><div class='del'>-static void iconv_dfree _((void *cd));</div><div class='del'>-static VALUE iconv_free _((VALUE cd));</div><div class='del'>-static VALUE iconv_try _((iconv_t cd, const char **inptr, size_t *inlen, char **outptr, size_t *outlen));</div><div class='del'>-static VALUE rb_str_derive _((VALUE str, const char* ptr, int len));</div><div class='del'>-static VALUE iconv_convert _((iconv_t cd, VALUE str, long start, long length, struct iconv_env_t* env));</div><div class='del'>-static VALUE iconv_s_allocate _((VALUE klass));</div><div class='del'>-static VALUE iconv_initialize _((VALUE self, VALUE to, VALUE from));</div><div class='del'>-static VALUE iconv_s_open _((VALUE self, VALUE to, VALUE from));</div><div class='del'>-static VALUE iconv_s_convert _((struct iconv_env_t* env));</div><div class='del'>-static VALUE iconv_s_iconv _((int argc, VALUE *argv, VALUE self));</div><div class='del'>-static VALUE iconv_init_state _((VALUE cd));</div><div class='del'>-static VALUE iconv_finish _((VALUE self));</div><div class='del'>-static VALUE iconv_iconv _((int argc, VALUE *argv, VALUE self));</div><div class='del'>-</div><div class='del'>-static VALUE charset_map;</div><div class='del'>-</div><div class='del'>-/*</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='del'>-</div><div class='del'>-static iconv_t</div><div class='del'>-iconv_create</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE to, VALUE from)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (to, from)</div><div class='del'>-    VALUE to;</div><div class='del'>-    VALUE from;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</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='del'>-</div><div class='del'>-    iconv_t cd = iconv_open(tocode, fromcode);</div><div class='del'>-</div><div class='del'>-    if (cd == (iconv_t)-1) {</div><div class='del'>-	switch (errno) {</div><div class='del'>-	  case EMFILE:</div><div class='del'>-	  case ENFILE:</div><div class='del'>-	  case ENOMEM:</div><div class='del'>-	    rb_gc();</div><div class='del'>-	    cd = iconv_open(tocode, fromcode);</div><div class='del'>-	}</div><div class='del'>-	if (cd == (iconv_t)-1) {</div><div class='del'>-	    int inval = errno == EINVAL;</div><div class='del'>-	    const 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='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return cd;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-iconv_free</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE cd)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (cd)</div><div class='del'>-    VALUE cd;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    if (cd &amp;&amp; iconv_close(VALUE2ICONV(cd)) == -1)</div><div class='del'>-	rb_sys_fail("iconv_close");</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-iconv_try</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (iconv_t cd, const char **inptr, size_t *inlen, char **outptr, size_t *outlen)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (cd, inptr, inlen, outptr, outlen)</div><div class='del'>-    iconv_t cd;</div><div class='del'>-    const char **inptr;</div><div class='del'>-    size_t *inlen;</div><div class='del'>-    char **outptr;</div><div class='del'>-    size_t *outlen;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</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='del'>-	if (!*inlen)</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	switch (errno) {</div><div class='del'>-	  case E2BIG:</div><div class='del'>-	    /* try the left in next loop */</div><div class='del'>-	    break;</div><div class='del'>-	  case EILSEQ:</div><div class='del'>-	    return rb_eIconvIllegalSeq;</div><div class='del'>-	  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='del'>-	  default:</div><div class='del'>-	    rb_sys_fail("iconv");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else if (*inlen &gt; 0) {</div><div class='del'>-	/* 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='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-iconv_fail</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE error, VALUE success, VALUE failed, struct iconv_env_t* env, const char *mesg)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (error, success, failed, env, mesg)</div><div class='del'>-    VALUE error, success, failed;</div><div class='del'>-    struct iconv_env_t *env;</div><div class='del'>-    const char *mesg;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</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='del'>-    if (env) {</div><div class='del'>-	args[1] = env-&gt;append(rb_obj_dup(env-&gt;ret), success);</div><div class='del'>-	if (env-&gt;argc &gt; 0) {</div><div class='del'>-	    *(env-&gt;argv) = failed;</div><div class='del'>-	    args[2] = rb_ary_new4(env-&gt;argc, env-&gt;argv);</div><div class='del'>-	}</div><div class='del'>-    }</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_str_derive</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE str, const char* ptr, int len)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (str, ptr, len)</div><div class='del'>-    VALUE str;</div><div class='del'>-    const char *ptr;</div><div class='del'>-    int len;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(str))</div><div class='del'>-	return rb_str_new(ptr, len);</div><div class='del'>-    if (RSTRING(str)-&gt;ptr == ptr &amp;&amp; RSTRING(str)-&gt;len == len)</div><div class='del'>-	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='del'>-    OBJ_INFECT(ret, str);</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-iconv_convert</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (iconv_t cd, VALUE str, long start, long length, struct iconv_env_t* env)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (cd, str, start, length, env)</div><div class='del'>-    iconv_t cd;</div><div class='del'>-    VALUE str;</div><div class='del'>-    long start;</div><div class='del'>-    long length;</div><div class='del'>-    struct iconv_env_t *env;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    VALUE ret = Qfalse;</div><div class='del'>-    VALUE error = Qfalse;</div><div class='del'>-    VALUE rescue;</div><div class='del'>-    const char *inptr, *instart;</div><div class='del'>-    size_t inlen;</div><div class='del'>-    /* I believe ONE CHARACTER never exceed this. */</div><div class='del'>-    char buffer[BUFSIZ];</div><div class='del'>-    char *outptr;</div><div class='del'>-    size_t outlen;</div><div class='del'>-</div><div class='del'>-    if (cd == (iconv_t)-1)</div><div class='del'>-	rb_raise(rb_eArgError, "closed iconv");</div><div class='del'>-</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-	/* Reset output pointer or something. */</div><div class='del'>-	inptr = "";</div><div class='del'>-	inlen = 0;</div><div class='del'>-	outptr = buffer;</div><div class='del'>-	outlen = sizeof(buffer);</div><div class='del'>-	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='del'>-</div><div class='del'>-	inptr = NULL;</div><div class='del'>-	length = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	int slen;</div><div class='del'>-</div><div class='del'>-	StringValue(str);</div><div class='del'>-	slen = RSTRING(str)-&gt;len;</div><div class='del'>-	inptr = RSTRING(str)-&gt;ptr;</div><div class='del'>-</div><div class='del'>-	inptr += start;</div><div class='del'>-	if (length &lt; 0 || length &gt; start + slen)</div><div class='del'>-	    length = slen - start;</div><div class='del'>-    }</div><div class='del'>-    instart = inptr;</div><div class='del'>-    inlen = length;</div><div class='del'>-</div><div class='del'>-    do {</div><div class='del'>-	char errmsg[50];</div><div class='del'>-	const char *tmpstart = inptr;</div><div class='del'>-	outptr = buffer;</div><div class='del'>-	outlen = sizeof(buffer);</div><div class='del'>-</div><div class='del'>-	errmsg[0] = 0;</div><div class='del'>-	error = iconv_try(cd, &amp;inptr, &amp;inlen, &amp;outptr, &amp;outlen);</div><div class='del'>-</div><div class='del'>-	if (0 &lt;= outlen &amp;&amp; outlen &lt;= sizeof(buffer)) {</div><div class='del'>-	    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='del'>-		(outlen &lt; inptr - tmpstart &amp;&amp; inlen &gt; 0) || /* something skipped */</div><div class='del'>-		memcmp(buffer, tmpstart, outlen)) /* something differs */</div><div class='del'>-	    {</div><div class='del'>-		if (NIL_P(str)) {</div><div class='del'>-		    ret = rb_str_new(buffer, outlen);</div><div class='del'>-		}</div><div class='del'>-		else {</div><div class='del'>-		    if (ret) {</div><div class='del'>-			ret = rb_str_buf_cat(ret, instart, tmpstart - instart);</div><div class='del'>-		    }</div><div class='del'>-		    else {</div><div class='del'>-			ret = rb_str_new(instart, tmpstart - instart);</div><div class='del'>-			OBJ_INFECT(ret, str);</div><div class='del'>-		    }</div><div class='del'>-		    ret = rb_str_buf_cat(ret, buffer, outlen);</div><div class='del'>-		    instart = inptr;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else if (!inlen) {</div><div class='del'>-		inptr = tmpstart + outlen;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    /* 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='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (RTEST(error)) {</div><div class='del'>-	    long len = 0;</div><div class='del'>-</div><div class='del'>-	    if (!ret)</div><div class='del'>-		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='del'>-	    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='del'>-	}</div><div class='del'>-    } while (inlen &gt; 0);</div><div class='del'>-</div><div class='del'>-    if (!ret)</div><div class='del'>-	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='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-iconv_s_allocate</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE klass)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    return Data_Wrap_Struct(klass, 0, ICONV_FREE, 0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-iconv_initialize</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self, VALUE to, VALUE from)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (self, to, from)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE to;</div><div class='del'>-    VALUE from;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    iconv_free(check_iconv(self));</div><div class='del'>-    DATA_PTR(self) = NULL;</div><div class='del'>-    DATA_PTR(self) = (void *)ICONV2VALUE(iconv_create(to, from));</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-iconv_s_open</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self, VALUE to, VALUE from)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (self, to, from)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE to;</div><div class='del'>-    VALUE from;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    VALUE cd = ICONV2VALUE(iconv_create(to, from));</div><div class='del'>-</div><div class='del'>-    self = Data_Wrap_Struct(self, NULL, ICONV_FREE, (void *)cd);</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	return rb_ensure(rb_yield, self, (VALUE(*)())iconv_finish, self);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	return self;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-iconv_s_convert</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (struct iconv_env_t* env)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (env)</div><div class='del'>-    struct iconv_env_t *env;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    VALUE last = 0;</div><div class='del'>-</div><div class='del'>-    for (; env-&gt;argc &gt; 0; --env-&gt;argc, ++env-&gt;argv) {</div><div class='del'>-	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='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(last)) {</div><div class='del'>-	VALUE s = iconv_convert(env-&gt;cd, Qnil, 0, 0, env);</div><div class='del'>-	if (RSTRING(s)-&gt;len)</div><div class='del'>-	    env-&gt;append(env-&gt;ret, s);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return env-&gt;ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: Iconv::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='del'>-static VALUE</div><div class='del'>-iconv_s_iconv</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (int argc, VALUE *argv, VALUE self)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (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'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    struct iconv_env_t arg;</div><div class='del'>-</div><div class='del'>-    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='del'>-</div><div class='del'>-    arg.argc = argc -= 2;</div><div class='del'>-    arg.argv = argv + 2;</div><div class='del'>-    arg.append = rb_ary_push;</div><div class='del'>-    arg.ret = rb_ary_new2(argc);</div><div class='del'>-    arg.cd = iconv_create(argv[0], argv[1]);</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='del'>-/*</div><div class='del'>- * Document-method: Iconv::conv</div><div class='del'>- * call-seq: Iconv.conv(to, from, str)</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='del'>-/*</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='del'>-static VALUE</div><div class='del'>-iconv_init_state</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE cd)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (cd)</div><div class='del'>-    VALUE cd;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    return iconv_convert(VALUE2ICONV(cd), Qnil, 0, 0, NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-iconv_finish</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (self)</div><div class='del'>-    VALUE self;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    VALUE cd = check_iconv(self);</div><div class='del'>-</div><div class='del'>-    if (!cd) return Qnil;</div><div class='del'>-    DATA_PTR(self) = NULL;</div><div class='del'>-</div><div class='del'>-    return rb_ensure(iconv_init_state, cd, iconv_free, cd);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: Iconv#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='del'>-static VALUE</div><div class='del'>-iconv_iconv</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (int argc, VALUE *argv, VALUE self)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (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'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    VALUE str, n1, n2;</div><div class='del'>-    VALUE cd = check_iconv(self);</div><div class='del'>-    long start = 0, length = 0, slen = 0;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "12", &amp;str, &amp;n1, &amp;n2);</div><div class='del'>-    if (!NIL_P(str)) slen = RSTRING_LEN(StringValue(str));</div><div class='del'>-    if (argc != 2 || !RTEST(rb_range_beg_len(n1, &amp;start, &amp;length, slen, 0))) {</div><div class='del'>-	if (NIL_P(n1) || ((start = NUM2LONG(n1)) &lt; 0 ? (start += slen) &gt;= 0 : start &lt; slen)) {</div><div class='del'>-	    if (NIL_P(n2)) {</div><div class='del'>-		length = -1;</div><div class='del'>-	    }</div><div class='del'>-	    else if ((length = NUM2LONG(n2)) &gt;= slen - start) {</div><div class='del'>-		length = slen - start;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return iconv_convert(VALUE2ICONV(cd), str, start, length, NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</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='del'>-</div><div class='del'>-/*</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='del'>-static VALUE</div><div class='del'>-iconv_failure_success</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-(VALUE self)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (self)</div><div class='del'>-    VALUE self;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    return rb_attr_get(self, rb_success);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</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='del'>-static VALUE</div><div class='del'>-iconv_failure_failed</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-(VALUE self)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (self)</div><div class='del'>-    VALUE self;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    return rb_attr_get(self, rb_failed);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</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='del'>-static VALUE</div><div class='del'>-iconv_failure_inspect</div><div class='del'>-#ifdef HAVE_PROTOTYPES</div><div class='del'>-    (VALUE self)</div><div class='del'>-#else /* HAVE_PROTOTYPES */</div><div class='del'>-    (self)</div><div class='del'>-    VALUE self;</div><div class='del'>-#endif /* HAVE_PROTOTYPES */</div><div class='del'>-{</div><div class='del'>-    const 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='del'>-    VALUE str = rb_str_buf_cat2(rb_str_new2("#&lt;"), cname);</div><div class='del'>-    str = rb_str_buf_cat(str, ": ", 2);</div><div class='del'>-    str = rb_str_buf_append(str, rb_inspect(success));</div><div class='del'>-    str = rb_str_buf_cat(str, ", ", 2);</div><div class='del'>-    str = rb_str_buf_append(str, rb_inspect(failed));</div><div class='del'>-    return rb_str_buf_cat(str, "&gt;", 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</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='del'>-</div><div class='del'>-void</div><div class='del'>-Init_iconv _((void))</div><div class='del'>-{</div><div class='del'>-    VALUE rb_cIconv = rb_define_class("Iconv", rb_cData);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cIconv, iconv_s_allocate);</div><div class='del'>-    rb_define_singleton_method(rb_cIconv, "open", iconv_s_open, 2);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cIconv, "initialize", iconv_initialize, 2);</div><div class='del'>-    rb_define_method(rb_cIconv, "close", iconv_finish, 0);</div><div class='del'>-    rb_define_method(rb_cIconv, "iconv", iconv_iconv, -1);</div><div class='del'>-</div><div class='del'>-    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='del'>-    rb_define_method(rb_eIconvFailure, "success", iconv_failure_success, 0);</div><div class='del'>-    rb_define_method(rb_eIconvFailure, "failed", iconv_failure_failed, 0);</div><div class='del'>-    rb_define_method(rb_eIconvFailure, "inspect", iconv_failure_inspect, 0);</div><div class='del'>-</div><div class='del'>-    rb_eIconvInvalidEncoding = rb_define_class_under(rb_cIconv, "InvalidEncoding", rb_eArgError);</div><div class='del'>-    rb_eIconvIllegalSeq = rb_define_class_under(rb_cIconv, "IllegalSequence", rb_eArgError);</div><div class='del'>-    rb_eIconvInvalidChar = rb_define_class_under(rb_cIconv, "InvalidCharacter", rb_eArgError);</div><div class='del'>-    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='del'>-    rb_include_module(rb_eIconvIllegalSeq, rb_eIconvFailure);</div><div class='del'>-    rb_include_module(rb_eIconvInvalidChar, rb_eIconvFailure);</div><div class='del'>-    rb_include_module(rb_eIconvOutOfRange, rb_eIconvFailure);</div><div class='del'>-    rb_include_module(rb_eIconvBrokenLibrary, rb_eIconvFailure);</div><div class='del'>-</div><div class='del'>-    rb_success = rb_intern("success");</div><div class='del'>-    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='del'>-}</div><div class='del'>-</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 e8181d25f5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/io/wait/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-    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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 02cb54a014..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/io/wait/wait.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>-  $Date$</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'>-    rb_io_t *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'>-    rb_io_t *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/.cvsignore b/ext/nkf/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/.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/nkf/depend b/ext/nkf/depend<br/>deleted file mode 100644<br/>index 0ed8fea8d2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</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='head'>diff --git a/ext/nkf/extconf.rb b/ext/nkf/extconf.rb<br/>deleted file mode 100644<br/>index 710662f19c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/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('nkf')</div><div class='head'>diff --git a/ext/nkf/lib/kconv.rb b/ext/nkf/lib/kconv.rb<br/>deleted file mode 100644<br/>index 4ffe8d984e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/lib/kconv.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/lib/kconv.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,367 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# kconv.rb - Kanji Converter.</div><div class='del'>-#</div><div class='del'>-# $Id$</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='del'>-require 'nkf'</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Kanji Converter for Ruby.</div><div class='del'>-#</div><div class='del'>-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='del'>-  AUTO = NKF::AUTO</div><div class='del'>-  # ISO-2022-JP</div><div class='del'>-  JIS = NKF::JIS</div><div class='del'>-  # EUC-JP</div><div class='del'>-  EUC = NKF::EUC</div><div class='del'>-  # Shift_JIS</div><div class='del'>-  SJIS = NKF::SJIS</div><div class='del'>-  # BINARY</div><div class='del'>-  BINARY = NKF::BINARY</div><div class='del'>-  # NOCONV</div><div class='del'>-  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='del'>-  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$</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-\xfe] [\xa1-\xfe] |</div><div class='del'>-		    [\xa1-\xfe] [\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='del'>-  def kconv(str, out_code, in_code = AUTO)</div><div class='del'>-    opt = '-'</div><div class='del'>-    case in_code</div><div class='del'>-    when ::NKF::JIS</div><div class='del'>-      opt &lt;&lt; 'J'</div><div class='del'>-    when ::NKF::EUC</div><div class='del'>-      opt &lt;&lt; 'E'</div><div class='del'>-    when ::NKF::SJIS</div><div class='del'>-      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'>-    end</div><div class='del'>-</div><div class='del'>-    case out_code</div><div class='del'>-    when ::NKF::JIS</div><div class='del'>-      opt &lt;&lt; 'j'</div><div class='del'>-    when ::NKF::EUC</div><div class='del'>-      opt &lt;&lt; 'e'</div><div class='del'>-    when ::NKF::SJIS</div><div class='del'>-      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='del'>-      return str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    opt = '' if opt == '-'</div><div class='del'>-</div><div class='del'>-    ::NKF::nkf(opt, str)</div><div class='del'>-  end</div><div class='del'>-  module_function :kconv</div><div class='del'>-</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='del'>-  def tojis(str)</div><div class='del'>-    ::NKF::nkf('-jm', str)</div><div class='del'>-  end</div><div class='del'>-  module_function :tojis</div><div class='del'>-</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='del'>-  def toeuc(str)</div><div class='del'>-    ::NKF::nkf('-em', str)</div><div class='del'>-  end</div><div class='del'>-  module_function :toeuc</div><div class='del'>-</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='del'>-  def tosjis(str)</div><div class='del'>-    ::NKF::nkf('-sm', str)</div><div class='del'>-  end</div><div class='del'>-  module_function :tosjis</div><div class='del'>-</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='del'>-  def guess(str)</div><div class='del'>-    ::NKF::guess(str)</div><div class='del'>-  end</div><div class='del'>-  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='del'>-end</div><div class='del'>-</div><div class='del'>-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='del'>-  def kconv(out_code, in_code=Kconv::AUTO)</div><div class='del'>-    Kconv::kconv(self, out_code, in_code)</div><div class='del'>-  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='del'>-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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 3cd1b160da..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/nkf-utf8/nkf.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/nkf-utf8/nkf.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6040 +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$ */</div><div class='del'>-#define NKF_VERSION "2.0.8"</div><div class='del'>-#define NKF_RELEASE_DATE "2007-01-28"</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    Output 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         EUC_INPUT      16</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		UTF16_INPUT    1015</div><div class='del'>-#define		UTF32_INPUT    1017</div><div class='del'>-</div><div class='del'>-/* byte order */</div><div class='del'>-</div><div class='del'>-#define		ENDIAN_BIG	1234</div><div class='del'>-#define		ENDIAN_LITTLE	4321</div><div class='del'>-#define		ENDIAN_2143	2143</div><div class='del'>-#define		ENDIAN_3412	3412</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     no_best_fit_chars_f = FALSE;</div><div class='del'>-static  int     input_endian = ENDIAN_BIG;</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     w_iconv32(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'>-static  void    w_status(struct input_code *, nkf_char);</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-static  int     output_bom_f = FALSE;</div><div class='del'>-static  int     output_endian = ENDIAN_BIG;</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'>-static  void    w_oconv32(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 = 0;</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_UNICODE	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_UNICODE)</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 = FALSE;</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'>-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},     NULL, w_iconv16, 0},</div><div class='del'>-    {"UTF-32",    0, 0, 0, {0, 0, 0},     NULL, w_iconv32, 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'>-	int is_argument_error = FALSE;</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'>-		*argv++;</div><div class='del'>-		is_argument_error = TRUE;</div><div class='del'>-		continue;</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'>-	if (is_argument_error)</div><div class='del'>-	    return(-1);</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'>-			input_f = JIS_INPUT;</div><div class='del'>-		    }else if(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'>-			input_f = JIS_INPUT;</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, "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'>-		    }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'>-#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 = EUC_INPUT;</div><div class='del'>-		    }else if(strcmp(codeset, "CP51932") == 0){</div><div class='del'>-			input_f = EUC_INPUT;</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 = EUC_INPUT;</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 = EUC_INPUT;</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'>-#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'>-			input_f = EUC_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'>-#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'>-			     strcmp(codeset, "UTF-16BE") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-16BE-BOM") == 0){</div><div class='del'>-			input_f = UTF16_INPUT;</div><div class='del'>-			input_endian = ENDIAN_BIG;</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 = UTF16_INPUT;</div><div class='del'>-			input_endian = ENDIAN_LITTLE;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-32") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-32BE") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-32BE-BOM") == 0){</div><div class='del'>-			input_f = UTF32_INPUT;</div><div class='del'>-			input_endian = ENDIAN_BIG;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-32LE") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-32LE-BOM") == 0){</div><div class='del'>-			input_f = UTF32_INPUT;</div><div class='del'>-			input_endian = ENDIAN_LITTLE;</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'>-		    x0201_f = FALSE;</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'>-			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'>-#ifdef SHIFTJIS_CP932</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_CP932;</div><div class='del'>-#endif</div><div class='del'>-		    }else if(strcmp(codeset, "CP50220") == 0){</div><div class='del'>-			output_conv = j_oconv;</div><div class='del'>-			x0201_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'>-#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, "CP50221") == 0){</div><div class='del'>-			output_conv = j_oconv;</div><div class='del'>-#ifdef SHIFTJIS_CP932</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_CP932;</div><div class='del'>-#endif</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'>-			cp932inv_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'>-			cp932inv_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'>-#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'>-#ifdef SHIFTJIS_CP932</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_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'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_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_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'>-#ifdef X0212_ENABLE</div><div class='del'>-			x0212_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_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'>-			cp932inv_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'>-		    }else if(strcmp(codeset, "UTF-8-BOM") == 0){</div><div class='del'>-			output_conv = w_oconv;</div><div class='del'>-			output_bom_f = TRUE;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16BE") == 0){</div><div class='del'>-			output_conv = w_oconv16;</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'>-			output_bom_f = TRUE;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16LE") == 0){</div><div class='del'>-			output_conv = w_oconv16;</div><div class='del'>-			output_endian = ENDIAN_LITTLE;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-16LE-BOM") == 0){</div><div class='del'>-			output_conv = w_oconv16;</div><div class='del'>-			output_endian = ENDIAN_LITTLE;</div><div class='del'>-			output_bom_f = TRUE;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-32") == 0 ||</div><div class='del'>-			     strcmp(codeset, "UTF-32BE") == 0){</div><div class='del'>-			output_conv = w_oconv32;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-32BE-BOM") == 0){</div><div class='del'>-			output_conv = w_oconv32;</div><div class='del'>-			output_bom_f = TRUE;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-32LE") == 0){</div><div class='del'>-			output_conv = w_oconv32;</div><div class='del'>-			output_endian = ENDIAN_LITTLE;</div><div class='del'>-		    }else if(strcmp(codeset, "UTF-32LE-BOM") == 0){</div><div class='del'>-			output_conv = w_oconv32;</div><div class='del'>-			output_endian = ENDIAN_LITTLE;</div><div class='del'>-			output_bom_f = TRUE;</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'>-            cp932inv_f = FALSE;</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 (cp[0] == '8') {</div><div class='del'>-		output_conv = w_oconv; cp++;</div><div class='del'>-		if (cp[0] == '0'){</div><div class='del'>-		    cp++;</div><div class='del'>-		} else {</div><div class='del'>-		    output_bom_f = TRUE;</div><div class='del'>-		}</div><div class='del'>-	    } else {</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'>-		} else if ('3'== cp[0] &amp;&amp; '2'==cp[1]) {</div><div class='del'>-		    output_conv = w_oconv32; cp+=2;</div><div class='del'>-		} else {</div><div class='del'>-		    output_conv = w_oconv;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-		if (cp[0]=='L') {</div><div class='del'>-		    cp++;</div><div class='del'>-		    output_endian = ENDIAN_LITTLE;</div><div class='del'>-		} else if (cp[0] == 'B') {</div><div class='del'>-		    cp++;</div><div class='del'>-                } else {</div><div class='del'>-		    continue;</div><div class='del'>-                }</div><div class='del'>-		if (cp[0] == '0'){</div><div class='del'>-		    cp++;</div><div class='del'>-		} else {</div><div class='del'>-		    output_bom_f = TRUE;</div><div class='del'>-		}</div><div class='del'>-	    }</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 input */</div><div class='del'>-	    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'>-		if ('1'== cp[0] &amp;&amp; '6'==cp[1]) {</div><div class='del'>-		    cp += 2;</div><div class='del'>-		    input_f = UTF16_INPUT;</div><div class='del'>-		    input_endian = ENDIAN_BIG;</div><div class='del'>-		} else if ('3'== cp[0] &amp;&amp; '2'==cp[1]) {</div><div class='del'>-		    cp += 2;</div><div class='del'>-		    input_f = UTF32_INPUT;</div><div class='del'>-		    input_endian = ENDIAN_BIG;</div><div class='del'>-		} else {</div><div class='del'>-		    input_f = UTF8_INPUT;</div><div class='del'>-		    continue;</div><div class='del'>-		}</div><div class='del'>-		if (cp[0]=='L') {</div><div class='del'>-		    cp++;</div><div class='del'>-		    input_endian = ENDIAN_LITTLE;</div><div class='del'>-		} else if (cp[0] == 'B') {</div><div class='del'>-		    cp++;</div><div class='del'>-		}</div><div class='del'>-	    }</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'>-            input_f = JIS_INPUT;</div><div class='del'>-            continue;</div><div class='del'>-        case 'E':   /* AT&amp;T EUC input */</div><div class='del'>-            input_f = EUC_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'>-struct input_code * find_inputcode_byfunc(nkf_char (*iconv_func)(nkf_char c2,nkf_char c1,nkf_char c0))</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 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 if (0xf0 &lt;= c &amp;&amp; c &lt;= 0xf4){</div><div class='del'>-              ptr-&gt;stat = 3;</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'>-      case 3:</div><div class='del'>-	if (0x80 &lt;= c &amp;&amp; c &lt;= 0xbf){</div><div class='del'>-	    if (ptr-&gt;index &lt; ptr-&gt;stat){</div><div class='del'>-		status_push_ch(ptr, c);</div><div class='del'>-	    } else {</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'>-        if (!p-&gt;status_func) {</div><div class='del'>-	    ++p;</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-        if (!p-&gt;status_func)</div><div class='del'>-	    continue;</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 == EUC_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 == UTF16_INPUT) {</div><div class='del'>-        set_iconv(-TRUE, w_iconv16);</div><div class='del'>-    } else if (input_f == UTF32_INPUT) {</div><div class='del'>-        set_iconv(-TRUE, w_iconv32);</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'>- * Check and Ignore BOM</div><div class='del'>- */</div><div class='del'>-void check_bom(FILE *f)</div><div class='del'>-{</div><div class='del'>-    int c2;</div><div class='del'>-    switch(c2 = (*i_getc)(f)){</div><div class='del'>-    case 0x00:</div><div class='del'>-	if((c2 = (*i_getc)(f)) == 0x00){</div><div class='del'>-	    if((c2 = (*i_getc)(f)) == 0xFE){</div><div class='del'>-		if((c2 = (*i_getc)(f)) == 0xFF){</div><div class='del'>-		    if(!input_f){</div><div class='del'>-			set_iconv(TRUE, w_iconv32);</div><div class='del'>-		    }</div><div class='del'>-		    if (iconv == w_iconv32) {</div><div class='del'>-			input_endian = ENDIAN_BIG;</div><div class='del'>-			return;</div><div class='del'>-		    }</div><div class='del'>-		    (*i_ungetc)(0xFF,f);</div><div class='del'>-		}else (*i_ungetc)(c2,f);</div><div class='del'>-		(*i_ungetc)(0xFE,f);</div><div class='del'>-	    }else if(c2 == 0xFF){</div><div class='del'>-		if((c2 = (*i_getc)(f)) == 0xFE){</div><div class='del'>-		    if(!input_f){</div><div class='del'>-			set_iconv(TRUE, w_iconv32);</div><div class='del'>-		    }</div><div class='del'>-		    if (iconv == w_iconv32) {</div><div class='del'>-			input_endian = ENDIAN_2143;</div><div class='del'>-			return;</div><div class='del'>-		    }</div><div class='del'>-		    (*i_ungetc)(0xFF,f);</div><div class='del'>-		}else (*i_ungetc)(c2,f);</div><div class='del'>-		(*i_ungetc)(0xFF,f);</div><div class='del'>-	    }else (*i_ungetc)(c2,f);</div><div class='del'>-	    (*i_ungetc)(0x00,f);</div><div class='del'>-	}else (*i_ungetc)(c2,f);</div><div class='del'>-	(*i_ungetc)(0x00,f);</div><div class='del'>-	break;</div><div class='del'>-    case 0xEF:</div><div class='del'>-	if((c2 = (*i_getc)(f)) == 0xBB){</div><div class='del'>-	    if((c2 = (*i_getc)(f)) == 0xBF){</div><div class='del'>-		if(!input_f){</div><div class='del'>-		    set_iconv(TRUE, w_iconv);</div><div class='del'>-		}</div><div class='del'>-		if (iconv == w_iconv) {</div><div class='del'>-		    return;</div><div class='del'>-		}</div><div class='del'>-		(*i_ungetc)(0xBF,f);</div><div class='del'>-	    }else (*i_ungetc)(c2,f);</div><div class='del'>-	    (*i_ungetc)(0xBB,f);</div><div class='del'>-	}else (*i_ungetc)(c2,f);</div><div class='del'>-	(*i_ungetc)(0xEF,f);</div><div class='del'>-	break;</div><div class='del'>-    case 0xFE:</div><div class='del'>-	if((c2 = (*i_getc)(f)) == 0xFF){</div><div class='del'>-	    if((c2 = (*i_getc)(f)) == 0x00){</div><div class='del'>-		if((c2 = (*i_getc)(f)) == 0x00){</div><div class='del'>-		    if(!input_f){</div><div class='del'>-			set_iconv(TRUE, w_iconv32);</div><div class='del'>-		    }</div><div class='del'>-		    if (iconv == w_iconv32) {</div><div class='del'>-			input_endian = ENDIAN_3412;</div><div class='del'>-			return;</div><div class='del'>-		    }</div><div class='del'>-		    (*i_ungetc)(0x00,f);</div><div class='del'>-		}else (*i_ungetc)(c2,f);</div><div class='del'>-		(*i_ungetc)(0x00,f);</div><div class='del'>-	    }else (*i_ungetc)(c2,f);</div><div class='del'>-	    if(!input_f){</div><div class='del'>-		set_iconv(TRUE, w_iconv16);</div><div class='del'>-	    }</div><div class='del'>-	    if (iconv == w_iconv16) {</div><div class='del'>-		input_endian = ENDIAN_BIG;</div><div class='del'>-		return;</div><div class='del'>-	    }</div><div class='del'>-	    (*i_ungetc)(0xFF,f);</div><div class='del'>-	}else (*i_ungetc)(c2,f);</div><div class='del'>-	(*i_ungetc)(0xFE,f);</div><div class='del'>-	break;</div><div class='del'>-    case 0xFF:</div><div class='del'>-	if((c2 = (*i_getc)(f)) == 0xFE){</div><div class='del'>-	    if((c2 = (*i_getc)(f)) == 0x00){</div><div class='del'>-		if((c2 = (*i_getc)(f)) == 0x00){</div><div class='del'>-		    if(!input_f){</div><div class='del'>-			set_iconv(TRUE, w_iconv32);</div><div class='del'>-		    }</div><div class='del'>-		    if (iconv == w_iconv32) {</div><div class='del'>-			input_endian = ENDIAN_LITTLE;</div><div class='del'>-			return;</div><div class='del'>-		    }</div><div class='del'>-		    (*i_ungetc)(0x00,f);</div><div class='del'>-		}else (*i_ungetc)(c2,f);</div><div class='del'>-		(*i_ungetc)(0x00,f);</div><div class='del'>-	    }else (*i_ungetc)(c2,f);</div><div class='del'>-	    if(!input_f){</div><div class='del'>-		set_iconv(TRUE, w_iconv16);</div><div class='del'>-	    }</div><div class='del'>-	    if (iconv == w_iconv16) {</div><div class='del'>-		input_endian = ENDIAN_LITTLE;</div><div class='del'>-		return;</div><div class='del'>-	    }</div><div class='del'>-	    (*i_ungetc)(0xFE,f);</div><div class='del'>-	}else (*i_ungetc)(c2,f);</div><div class='del'>-	(*i_ungetc)(0xFF,f);</div><div class='del'>-	break;</div><div class='del'>-    default:</div><div class='del'>-	(*i_ungetc)(c2,f);</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'>-   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    c3, c2=0, c1, c0=0;</div><div class='del'>-    int is_8bit = FALSE;</div><div class='del'>-</div><div class='del'>-    if(input_f == SJIS_INPUT || input_f == EUC_INPUT</div><div class='del'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-       || input_f == UTF8_INPUT || input_f == UTF16_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'>-    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'>-    module_connection();</div><div class='del'>-    check_bom(f);</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; ((input_f == JIS_INPUT &amp;&amp; ms_ucs_map_f) ? 0x92 : 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 and not CP5022x UCD */</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'>-		    }</div><div class='del'>-		}</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'>-#ifdef UTF8_INPUT_ENABLE</div><div class='del'>-	    if (iconv == w_iconv16) {</div><div class='del'>-		if (input_endian == ENDIAN_BIG) {</div><div class='del'>-		    c2 = c1;</div><div class='del'>-		    if ((c1 = (*i_getc)(f)) != EOF) {</div><div class='del'>-			if (0xD8 &lt;= c2 &amp;&amp; c2 &lt;= 0xDB) {</div><div class='del'>-			    if ((c0 = (*i_getc)(f)) != EOF) {</div><div class='del'>-				c0 &lt;&lt;= 8;</div><div class='del'>-				if ((c3 = (*i_getc)(f)) != EOF) {</div><div class='del'>-				    c0 |= c3;</div><div class='del'>-				} else c2 = EOF;</div><div class='del'>-			    } else c2 = EOF;</div><div class='del'>-			}</div><div class='del'>-		    } else c2 = EOF;</div><div class='del'>-		} else {</div><div class='del'>-		    if ((c2 = (*i_getc)(f)) != EOF) {</div><div class='del'>-			if (0xD8 &lt;= c2 &amp;&amp; c2 &lt;= 0xDB) {</div><div class='del'>-			    if ((c3 = (*i_getc)(f)) != EOF) {</div><div class='del'>-				if ((c0 = (*i_getc)(f)) != EOF) {</div><div class='del'>-				    c0 &lt;&lt;= 8;</div><div class='del'>-				    c0 |= c3;</div><div class='del'>-				} else c2 = EOF;</div><div class='del'>-			    } else c2 = EOF;</div><div class='del'>-			}</div><div class='del'>-		    } else c2 = EOF;</div><div class='del'>-		}</div><div class='del'>-		SEND;</div><div class='del'>-            } else if(iconv == w_iconv32){</div><div class='del'>-		int c3 = c1;</div><div class='del'>-		if((c2 = (*i_getc)(f)) != EOF &amp;&amp;</div><div class='del'>-		   (c1 = (*i_getc)(f)) != EOF &amp;&amp;</div><div class='del'>-		   (c0 = (*i_getc)(f)) != EOF){</div><div class='del'>-		    switch(input_endian){</div><div class='del'>-		    case ENDIAN_BIG:</div><div class='del'>-			c1 = (c2&amp;0xFF)&lt;&lt;16 | (c1&amp;0xFF)&lt;&lt;8 | (c0&amp;0xFF);</div><div class='del'>-			break;</div><div class='del'>-		    case ENDIAN_LITTLE:</div><div class='del'>-			c1 = (c3&amp;0xFF) | (c2&amp;0xFF)&lt;&lt;8 | (c1&amp;0xFF)&lt;&lt;16;</div><div class='del'>-			break;</div><div class='del'>-		    case ENDIAN_2143:</div><div class='del'>-			c1 = (c3&amp;0xFF)&lt;&lt;16 | (c1&amp;0xFF) | (c0&amp;0xFF)&lt;&lt;8;</div><div class='del'>-			break;</div><div class='del'>-		    case ENDIAN_3412:</div><div class='del'>-			c1 = (c3&amp;0xFF)&lt;&lt;8 | (c2&amp;0xFF) | (c0&amp;0xFF)&lt;&lt;16;</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='del'>-		    c2 = 0;</div><div class='del'>-		}else{</div><div class='del'>-		    c2 = EOF;</div><div class='del'>-		}</div><div class='del'>-		SEND;</div><div class='del'>-            } else</div><div class='del'>-#endif</div><div class='del'>-#ifdef NUMCHAR_OPTION</div><div class='del'>-            if (is_unicode_capsule(c1)){</div><div class='del'>-                SEND;</div><div class='del'>-	    } else</div><div class='del'>-#endif</div><div class='del'>-	    if (c1 &gt; ((input_f == JIS_INPUT &amp;&amp; ms_ucs_map_f) ? 0x92 : 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'>-                    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 (c1 == SI &amp;&amp; (!is_8bit || mime_decode_mode)) {</div><div class='del'>-                shift_mode = FALSE; </div><div class='del'>-                NEXT;</div><div class='del'>-            } else if (c1 == SO &amp;&amp; (!is_8bit || mime_decode_mode)) {</div><div class='del'>-                shift_mode = TRUE; </div><div class='del'>-                NEXT;</div><div class='del'>-            } else if (c1 == ESC &amp;&amp; (!is_8bit || mime_decode_mode)) {</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 == ESC &amp;&amp; iconv == s_iconv) {</div><div class='del'>-		/* ESC in Shift_JIS */</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'>-		    /* J-PHONE emoji */</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 {</div><div class='del'>-			if (('E' &lt;= c1 &amp;&amp; c1 &lt;= 'G') ||</div><div class='del'>-			    ('O' &lt;= c1 &amp;&amp; c1 &lt;= 'Q')) {</div><div class='del'>-			    /*</div><div class='del'>-			       NUM : 0 1 2 3 4 5</div><div class='del'>-			       BYTE: G E F O P Q</div><div class='del'>-			       C%7 : 1 6 0 2 3 4</div><div class='del'>-			       C%7 : 0 1 2 3 4 5 6</div><div class='del'>-			       NUM : 2 0 3 4 5 X 1</div><div class='del'>-			     */</div><div class='del'>-			    static const int jphone_emoji_first_table[7] = {2, 0, 3, 4, 5, 0, 1};</div><div class='del'>-			    c0 = (jphone_emoji_first_table[c1 % 7] &lt;&lt; 8) - SPACE + 0xE000 + CLASS_UNICODE;</div><div class='del'>-			    while ((c1 = (*i_getc)(f)) != EOF) {</div><div class='del'>-				if (SPACE &lt;= c1 &amp;&amp; c1 &lt;= 'z') {</div><div class='del'>-				    (*oconv)(0, c1 + c0);</div><div class='del'>-				} else break; /* c1 == SO */</div><div class='del'>-			    }</div><div class='del'>-			}</div><div class='del'>-		    }</div><div class='del'>-		    if (c1 == EOF) LAST;</div><div class='del'>-		    NEXT;</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 if (c1 == DEL &amp;&amp; input_mode == X0208 ) {</div><div class='del'>-		/* CP5022x */</div><div class='del'>-		c2 = c1;</div><div class='del'>-		NEXT;</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'>-	    switch ((*iconv)(c2, c1, c0)) {  /* can be EUC / SJIS / UTF-8 / UTF-16 */</div><div class='del'>-	    case -2:</div><div class='del'>-		/* 4 bytes UTF-8 */</div><div class='del'>-		if ((c0 = (*i_getc)(f)) != EOF) {</div><div class='del'>-		    code_status(c0);</div><div class='del'>-		    c0 &lt;&lt;= 8;</div><div class='del'>-		    if ((c3 = (*i_getc)(f)) != EOF) {</div><div class='del'>-			code_status(c3);</div><div class='del'>-			(*iconv)(c2, c1, c0|c3);</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-		break;</div><div class='del'>-	    case -1:</div><div class='del'>-		/* 3 bytes EUC or UTF-8 */</div><div class='del'>-		if ((c0 = (*i_getc)(f)) != EOF) {</div><div class='del'>-		    code_status(c0);</div><div class='del'>-		    (*iconv)(c2, c1, c0);</div><div class='del'>-		}</div><div class='del'>-		break;</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'>-	    if (ms_ucs_map_f &amp;&amp;</div><div class='del'>-		0x7F &lt;= c2 &amp;&amp; c2 &lt;= 0x92 &amp;&amp;</div><div class='del'>-		0x21 &lt;= c1 &amp;&amp; c1 &lt;= 0x7E) {</div><div class='del'>-		/* CP932 UDC */</div><div class='del'>-		if(c1 == 0x7F) return 0;</div><div class='del'>-		c1 = (c2 - 0x7F) * 94 + c1 - 0x21 + 0xE000 + CLASS_UNICODE;</div><div class='del'>-		c2 = 0;</div><div class='del'>-	    }</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'>-        c0 = 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 ret, c3, c0;</div><div class='del'>-    int hold_index;</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'>-    ret = c1;</div><div class='del'>-    hold_index = 0;</div><div class='del'>-    while (hold_index &lt; hold_count){</div><div class='del'>-        c2 = hold_buf[hold_index++];</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 (hold_index &lt; hold_count){</div><div class='del'>-            c1 = hold_buf[hold_index++];</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'>-        c0 = 0;</div><div class='del'>-        switch ((*iconv)(c2, c1, 0)) {  /* can be EUC/SJIS/UTF-8 */</div><div class='del'>-	case -2:</div><div class='del'>-	    /* 4 bytes UTF-8 */</div><div class='del'>-            if (hold_index &lt; hold_count){</div><div class='del'>-                c0 = hold_buf[hold_index++];</div><div class='del'>-            } else if ((c0 = (*i_getc)(f)) == EOF) {</div><div class='del'>-		ret = EOF;</div><div class='del'>-		break;</div><div class='del'>-	    } else {</div><div class='del'>-                code_status(c0);</div><div class='del'>-		c0 &lt;&lt;= 8;</div><div class='del'>-		if (hold_index &lt; hold_count){</div><div class='del'>-		    c3 = hold_buf[hold_index++];</div><div class='del'>-		} else if ((c3 = (*i_getc)(f)) == EOF) {</div><div class='del'>-		    c0 = ret = EOF;</div><div class='del'>-		    break;</div><div class='del'>-		} else {</div><div class='del'>-		    code_status(c3);</div><div class='del'>-		    (*iconv)(c2, c1, c0|c3);</div><div class='del'>-		}</div><div class='del'>-            }</div><div class='del'>-	    break;</div><div class='del'>-	case -1:</div><div class='del'>-	    /* 3 bytes EUC or UTF-8 */</div><div class='del'>-            if (hold_index &lt; hold_count){</div><div class='del'>-                c0 = hold_buf[hold_index++];</div><div class='del'>-            } else if ((c0 = (*i_getc)(f)) == EOF) {</div><div class='del'>-		ret = EOF;</div><div class='del'>-		break;</div><div class='del'>-	    } else {</div><div class='del'>-                code_status(c0);</div><div class='del'>-            }</div><div class='del'>-            (*iconv)(c2, c1, c0);</div><div class='del'>-            break;</div><div class='del'>-	}</div><div class='del'>-	if (c0 == EOF) break;</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-nkf_char 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 (!cp932inv_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'>-    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'>-#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) &amp; 0x7f);</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 if (!x0213_f &amp;&amp; 0xF0 &lt;= c2 &amp;&amp; c2 &lt;= 0xF9 &amp;&amp; 0x40 &lt;= c1 &amp;&amp; c1 &lt;= 0xFC) {</div><div class='del'>-	/* CP932 UDC */</div><div class='del'>-	if(c1 == 0x7F) return 0;</div><div class='del'>-	c1 = (c2 - 0xF0) * 188 + (c1 - 0x40 - (0x7E &lt; c1)) + 0xE000 + CLASS_UNICODE;</div><div class='del'>-	c2 = 0;</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'>-	if (!cp51932_f &amp;&amp; !x0213_f &amp;&amp; 0xF5 &lt;= c1 &amp;&amp; c1 &lt;= 0xFE &amp;&amp; 0xA1 &lt;= c0 &amp;&amp; c0 &lt;= 0xFE) {</div><div class='del'>-	    /* encoding is eucJP-ms, so invert to Unicode Private User Area */</div><div class='del'>-	    c1 = (c1 - 0xF5) * 94 + c0 - 0xA1 + 0xE3AC + CLASS_UNICODE;</div><div class='del'>-	    c2 = 0;</div><div class='del'>-	} else {</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'>-        }</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'>-	if (!cp51932_f &amp;&amp; ms_ucs_map_f &amp;&amp; 0xF5 &lt;= c2 &amp;&amp; c2 &lt;= 0xFE &amp;&amp; 0xA1 &lt;= c1 &amp;&amp; c1 &lt;= 0xFE) {</div><div class='del'>-	    /* encoding is eucJP-ms, so invert to Unicode Private User Area */</div><div class='del'>-	    c1 = (c2 - 0xF5) * 94 + c1 - 0xA1 + 0xE000 + CLASS_UNICODE;</div><div class='del'>-	    c2 = 0;</div><div class='del'>-	} else {</div><div class='del'>-	    c1 &amp;= 0x7f;</div><div class='del'>-	    c2 &amp;= 0x7f;</div><div class='del'>-#ifdef SHIFTJIS_CP932</div><div class='del'>-	    if (cp51932_f &amp;&amp; 0x79 &lt;= c2 &amp;&amp; c2 &lt;= 0x7c){</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'>-        }</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_UNICODE | 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'>-    static const int w_iconv_utf8_1st_byte[] =</div><div class='del'>-    { /* 0xC0 - 0xFF */</div><div class='del'>-	20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,</div><div class='del'>-	21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,</div><div class='del'>-	30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 33,</div><div class='del'>-	40, 41, 41, 41, 42, 43, 43, 43, 50, 50, 50, 50, 60, 60, 70, 70};</div><div class='del'>-    </div><div class='del'>-    if (c2 &lt; 0 || 0xff &lt; c2) {</div><div class='del'>-    }else if (c2 == 0) { /* 0 : 1 byte*/</div><div class='del'>-	c0 = 0;</div><div class='del'>-    } else if ((c2 &amp; 0xc0) == 0x80) { /* 0x80-0xbf : trail byte */</div><div class='del'>-	return 0;</div><div class='del'>-    } else{</div><div class='del'>-    	switch (w_iconv_utf8_1st_byte[c2 - 0xC0]) {</div><div class='del'>-	case 21:</div><div class='del'>-	    if (c1 &lt; 0x80 || 0xBF &lt; c1) return 0;</div><div class='del'>-	    break;</div><div class='del'>-	case 30:</div><div class='del'>-	    if (c0 == 0) return -1;</div><div class='del'>-	    if (c1 &lt; 0xA0 || 0xBF &lt; c1 || (c0 &amp; 0xc0) != 0x80)</div><div class='del'>-		return 0;</div><div class='del'>-	    break;</div><div class='del'>-	case 31:</div><div class='del'>-	case 33:</div><div class='del'>-	    if (c0 == 0) return -1;</div><div class='del'>-	    if ((c1 &amp; 0xc0) != 0x80 || (c0 &amp; 0xc0) != 0x80)</div><div class='del'>-		return 0;</div><div class='del'>-	    break;</div><div class='del'>-	case 32:</div><div class='del'>-	    if (c0 == 0) return -1;</div><div class='del'>-	    if (c1 &lt; 0x80 || 0x9F &lt; c1 || (c0 &amp; 0xc0) != 0x80)</div><div class='del'>-		return 0;</div><div class='del'>-	    break;</div><div class='del'>-	case 40:</div><div class='del'>-	    if (c0 == 0) return -2;</div><div class='del'>-	    if (c1 &lt; 0x90 || 0xBF &lt; c1 || (c0 &amp; 0xc0c0) != 0x8080)</div><div class='del'>-		return 0;</div><div class='del'>-	    break;</div><div class='del'>-	case 41:</div><div class='del'>-	    if (c0 == 0) return -2;</div><div class='del'>-	    if (c1 &lt; 0x80 || 0xBF &lt; c1 || (c0 &amp; 0xc0c0) != 0x8080)</div><div class='del'>-		return 0;</div><div class='del'>-	    break;</div><div class='del'>-	case 42:</div><div class='del'>-	    if (c0 == 0) return -2;</div><div class='del'>-	    if (c1 &lt; 0x80 || 0x8F &lt; c1 || (c0 &amp; 0xc0c0) != 0x8080)</div><div class='del'>-		return 0;</div><div class='del'>-	    break;</div><div class='del'>-	default:</div><div class='del'>-	    return 0;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (c2 == 0 || c2 == EOF){</div><div class='del'>-    } else if ((c2 &amp; 0xf8) == 0xf0) { /* 4 bytes */</div><div class='del'>-	c1 = CLASS_UNICODE | ww16_conv(c2, c1, c0);</div><div class='del'>-	c2 = 0;</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 if (val &lt;= NKF_INT32_C(0x10FFFF)) {</div><div class='del'>-        *p2 = 0xe0 |  (val &gt;&gt; 16);</div><div class='del'>-        *p1 = 0x80 | ((val &gt;&gt; 12) &amp; 0x3f);</div><div class='del'>-        *p0 = 0x8080 | ((val &lt;&lt; 2) &amp; 0x3f00)| (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;= 0xf8) {</div><div class='del'>-	val = -1;</div><div class='del'>-    } else if (c2 &gt;= 0xf0){</div><div class='del'>-	/* c2: 1st, c1: 2nd, c0: 3rd/4th */</div><div class='del'>-	val = (c2 &amp; 0x0f) &lt;&lt; 18;</div><div class='del'>-        val |= (c1 &amp; 0x3f) &lt;&lt; 12;</div><div class='del'>-        val |= (c0 &amp; 0x3f00) &gt;&gt; 2;</div><div class='del'>-        val |= (c0 &amp; 0x3f);</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_UNICODE | 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 = 0;</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 (0xD8 &lt;= c2 &amp;&amp; c2 &lt;= 0xDB) {</div><div class='del'>-	if (c0 &lt; NKF_INT32_C(0xDC00) || NKF_INT32_C(0xDFFF) &lt; c0)</div><div class='del'>-	    return -2;</div><div class='del'>-	c1 =  CLASS_UNICODE | ((c2 &lt;&lt; 18) + (c1 &lt;&lt; 10) + c0 - NKF_INT32_C(0x35FDC00));</div><div class='del'>-	c2 = 0;</div><div class='del'>-    }else if ((c2&gt;&gt;3) == 27) { /* unpaired surrogate */</div><div class='del'>-	/*</div><div class='del'>-	   return 2;</div><div class='del'>-	*/</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 w_iconv32(nkf_char c2, nkf_char c1, nkf_char c0)</div><div class='del'>-{</div><div class='del'>-    int ret = 0;</div><div class='del'>-</div><div class='del'>-    if ((c2 == 0 &amp;&amp; c1 &lt; 0x80) || c2==EOF) {</div><div class='del'>-    } else if (is_unicode_bmp(c1)) {</div><div class='del'>-	ret = w16e_conv(c1, &amp;c2, &amp;c1);</div><div class='del'>-    } else {</div><div class='del'>-	c2 = 0;</div><div class='del'>-	c1 =  CLASS_UNICODE | c1;</div><div class='del'>-    }</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(!cp932inv_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; !cp932inv_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; !cp932inv_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'>-</div><div class='del'>-    if (output_bom_f) {</div><div class='del'>-	output_bom_f = FALSE;</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'>-    }</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'>-#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)(0xF0 | ( 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 (output_bom_f) {</div><div class='del'>-	output_bom_f = FALSE;</div><div class='del'>-        if (output_endian == ENDIAN_LITTLE){</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'>-    }</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 (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 (output_endian == ENDIAN_LITTLE){</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'>-	if (!val) return;</div><div class='del'>-    }</div><div class='del'>-    if (output_endian == ENDIAN_LITTLE){</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'>-void w_oconv32(nkf_char c2, nkf_char c1)</div><div class='del'>-{</div><div class='del'>-    if (output_bom_f) {</div><div class='del'>-	output_bom_f = FALSE;</div><div class='del'>-        if (output_endian == ENDIAN_LITTLE){</div><div class='del'>-            (*o_putc)((unsigned char)'\377');</div><div class='del'>-            (*o_putc)('\376');</div><div class='del'>-	    (*o_putc)('\000');</div><div class='del'>-	    (*o_putc)('\000');</div><div class='del'>-        }else{</div><div class='del'>-	    (*o_putc)('\000');</div><div class='del'>-	    (*o_putc)('\000');</div><div class='del'>-            (*o_putc)('\376');</div><div class='del'>-            (*o_putc)((unsigned char)'\377');</div><div class='del'>-        }</div><div class='del'>-    }</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 (c2 == ISO8859_1) {</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'>-	c1 &amp;= VALUE_MASK;</div><div class='del'>-#endif</div><div class='del'>-    } else if (c2) {</div><div class='del'>-        c1 = e2w_conv(c2, c1);</div><div class='del'>-	if (!c1) return;</div><div class='del'>-    }</div><div class='del'>-    if (output_endian == ENDIAN_LITTLE){</div><div class='del'>-        (*o_putc)( c1 &amp; NKF_INT32_C(0x000000FF));</div><div class='del'>-        (*o_putc)((c1 &amp; NKF_INT32_C(0x0000FF00)) &gt;&gt;  8);</div><div class='del'>-        (*o_putc)((c1 &amp; NKF_INT32_C(0x00FF0000)) &gt;&gt; 16);</div><div class='del'>-	(*o_putc)('\000');</div><div class='del'>-    }else{</div><div class='del'>-	(*o_putc)('\000');</div><div class='del'>-        (*o_putc)((c1 &amp; NKF_INT32_C(0x00FF0000)) &gt;&gt; 16);</div><div class='del'>-        (*o_putc)((c1 &amp; NKF_INT32_C(0x0000FF00)) &gt;&gt;  8);</div><div class='del'>-        (*o_putc)( c1 &amp; NKF_INT32_C(0x000000FF));</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'>-	    c2 = c1 &amp; VALUE_MASK;</div><div class='del'>-	    if (x0212_f &amp;&amp; 0xE000 &lt;= c2 &amp;&amp; c2 &lt;= 0xE757) {</div><div class='del'>-		/* eucJP-ms UDC */</div><div class='del'>-		c1 &amp;= 0xFFF;</div><div class='del'>-		c2 = c1 / 94;</div><div class='del'>-		c2 += c2 &lt; 10 ? 0x75 : 0x8FEB;</div><div class='del'>-		c1 = 0x21 + c1 % 94;</div><div class='del'>-		if (is_eucg3(c2)){</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'>-		}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'>-		return;</div><div class='del'>-	    } else {</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'>-    }</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 (!cp932inv_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; 0x7f;</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'>-	    c2 = c1 &amp; VALUE_MASK;</div><div class='del'>-	    if (!x0213_f &amp;&amp; 0xE000 &lt;= c2 &amp;&amp; c2 &lt;= 0xE757) {</div><div class='del'>-		/* CP932 UDC */</div><div class='del'>-		c1 &amp;= 0xFFF;</div><div class='del'>-		c2 = c1 / 188 + 0xF0;</div><div class='del'>-		c1 = c1 % 188;</div><div class='del'>-		c1 += 0x40 + (c1 &gt; 0x3e);</div><div class='del'>-		(*o_putc)(c2);</div><div class='del'>-		(*o_putc)(c1);</div><div class='del'>-		return;</div><div class='del'>-	    } else {</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'>-    }</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'>-	    c2 = c1 &amp; VALUE_MASK;</div><div class='del'>-	    if (ms_ucs_map_f &amp;&amp; 0xE000 &lt;= c2 &amp;&amp; c2 &lt;= 0xE757) {</div><div class='del'>-		/* CP5022x UDC */</div><div class='del'>-		c1 &amp;= 0xFFF;</div><div class='del'>-		c2 = 0x7F + c1 / 94;</div><div class='del'>-		c1 = 0x21 + c1 % 94;</div><div class='del'>-	    } else {</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'>-    }</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(ms_ucs_map_f</div><div class='del'>-	   ? c2&lt;0x20 || 0x92&lt;c2 || c1&lt;0x20 || 0x7e&lt;c1</div><div class='del'>-	   : 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_UNICODE | 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_UNICODE | 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_UNICODE | 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'>-    no_best_fit_chars_f = FALSE;</div><div class='del'>-    encode_fallback = NULL;</div><div class='del'>-    unicode_subchar  = '?';</div><div class='del'>-    input_endian = ENDIAN_BIG;</div><div class='del'>-#endif</div><div class='del'>-#ifdef UTF8_OUTPUT_ENABLE</div><div class='del'>-    output_bom_f = FALSE;</div><div class='del'>-    output_endian = ENDIAN_BIG;</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'>-    hold_count = 0;</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  Output 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  Output 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  Output 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  Output 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 e43ad553d6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/nkf-utf8/utf8tbl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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, 0x81CA, 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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/>deleted file mode 100644<br/>index 2bb0340a64..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/nkf/nkf.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/nkf/nkf.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,654 +0,0 @@</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$</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#define RUBY_NKF_REVISION "$Revision$"</div><div class='del'>-#define RUBY_NKF_VERSION NKF_VERSION " (" NKF_RELEASE_DATE ")"</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-/* Encoding Constants */</div><div class='del'>-#define	_AUTO		0</div><div class='del'>-#define	_JIS		1</div><div class='del'>-#define	_EUC		2</div><div class='del'>-#define	_SJIS		3</div><div class='del'>-#define	_BINARY		4</div><div class='del'>-#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='del'>-#define	_UNKNOWN	_AUTO</div><div class='del'>-</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='del'>-#undef getc</div><div class='del'>-#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='del'>-</div><div class='del'>-#define INCSIZE         32</div><div class='del'>-#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='del'>-</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='del'>-static int incsize;</div><div class='del'>-</div><div class='del'>-static VALUE result;</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_nkf_putchar(c)</div><div class='del'>-  unsigned int c;</div><div class='del'>-{</div><div class='del'>-  if (output_ctr &gt;= o_len) {</div><div class='del'>-    o_len += incsize;</div><div class='del'>-    rb_str_resize(result, o_len);</div><div class='del'>-    incsize *= 2;</div><div class='del'>-    output = (unsigned char *)RSTRING(result)-&gt;ptr;</div><div class='del'>-  }</div><div class='del'>-  output[output_ctr++] = c;</div><div class='del'>-</div><div class='del'>-  return c;</div><div class='del'>-}</div><div class='del'>-</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='del'>-#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='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_nkf_kconv(obj, opt, src)</div><div class='del'>-  VALUE obj, opt, src;</div><div class='del'>-{</div><div class='del'>-  char *opt_ptr, *opt_end;</div><div class='del'>-  volatile VALUE v;</div><div class='del'>-</div><div class='del'>-  reinit();</div><div class='del'>-  StringValue(opt);</div><div class='del'>-  opt_ptr = RSTRING(opt)-&gt;ptr;</div><div class='del'>-  opt_end = opt_ptr + RSTRING(opt)-&gt;len;</div><div class='del'>-  nkf_split_options(opt_ptr);</div><div class='del'>-</div><div class='del'>-  incsize = INCSIZE;</div><div class='del'>-</div><div class='del'>-  input_ctr = 0;</div><div class='del'>-  StringValue(src);</div><div class='del'>-  input = (unsigned char *)RSTRING(src)-&gt;ptr;</div><div class='del'>-  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='del'>-</div><div class='del'>-  output_ctr = 0;</div><div class='del'>-  output     = (unsigned char *)RSTRING(result)-&gt;ptr;</div><div class='del'>-  o_len      = RSTRING(result)-&gt;len;</div><div class='del'>-  *output    = '\0';</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'>-  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='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'>- *     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='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_nkf_guess1(obj, src)</div><div class='del'>-  VALUE obj, src;</div><div class='del'>-{</div><div class='del'>-  unsigned char *p;</div><div class='del'>-  unsigned char *pend;</div><div class='del'>-  int sequence_counter = 0;</div><div class='del'>-</div><div class='del'>-  StringValue(src);</div><div class='del'>-  p = (unsigned char *)RSTRING(src)-&gt;ptr;</div><div class='del'>-  pend = p + RSTRING(src)-&gt;len;</div><div class='del'>-  if (p == pend) return INT2FIX(_UNKNOWN);</div><div class='del'>-</div><div class='del'>-#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='del'>-	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='del'>-</div><div class='del'>-  if (*p == 0xa4)</div><div class='del'>-    sequence_counter = 1;</div><div class='del'>-</div><div class='del'>-  while (p&lt;pend) {</div><div class='del'>-    if (*p == '\033') {</div><div class='del'>-      return INT2FIX(_JIS);</div><div class='del'>-    }</div><div class='del'>-    if (*p &lt; '\006' || *p == 0x7f || *p == 0xff) {</div><div class='del'>-      return INT2FIX(_BINARY);</div><div class='del'>-    }</div><div class='del'>-    if (0x81 &lt;= *p &amp;&amp; *p &lt;= 0x8d) {</div><div class='del'>-      return INT2FIX(_SJIS);</div><div class='del'>-    }</div><div class='del'>-    if (0x8f &lt;= *p &amp;&amp; *p &lt;= 0x9f) {</div><div class='del'>-      return INT2FIX(_SJIS);</div><div class='del'>-    }</div><div class='del'>-    if (*p == 0x8e) {	/* SS2 */</div><div class='del'>-      INCR;</div><div class='del'>-      if ((0x40 &lt;= *p &amp;&amp; *p &lt;= 0x7e) ||</div><div class='del'>-	  (0x80 &lt;= *p &amp;&amp; *p &lt;= 0xa0) ||</div><div class='del'>-	  (0xe0 &lt;= *p &amp;&amp; *p &lt;= 0xfc))</div><div class='del'>-	return INT2FIX(_SJIS);</div><div class='del'>-    }</div><div class='del'>-    else if (0xa1 &lt;= *p &amp;&amp; *p &lt;= 0xdf) {</div><div class='del'>-      INCR;</div><div class='del'>-      if (0xf0 &lt;= *p &amp;&amp; *p &lt;= 0xfe)</div><div class='del'>-	return INT2FIX(_EUC);</div><div class='del'>-      if (0xe0 &lt;= *p &amp;&amp; *p &lt;= 0xef) {</div><div class='del'>-	while (p &lt; pend &amp;&amp; *p &gt;= 0x40) {</div><div class='del'>-	  if (*p &gt;= 0x81) {</div><div class='del'>-	    if (*p &lt;= 0x8d || (0x8f &lt;= *p &amp;&amp; *p &lt;= 0x9f)) {</div><div class='del'>-	      return INT2FIX(_SJIS);</div><div class='del'>-	    }</div><div class='del'>-	    else if (0xfd &lt;= *p &amp;&amp; *p &lt;= 0xfe) {</div><div class='del'>-	      return INT2FIX(_EUC);</div><div class='del'>-	    }</div><div class='del'>-	  }</div><div class='del'>-	  INCR;</div><div class='del'>-	}</div><div class='del'>-      }</div><div class='del'>-      else if (*p &lt;= 0x9f) {</div><div class='del'>-	return INT2FIX(_SJIS);</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    else if (0xf0 &lt;= *p &amp;&amp; *p &lt;= 0xfe) {</div><div class='del'>-      return INT2FIX(_EUC);</div><div class='del'>-    }</div><div class='del'>-    else if (0xe0 &lt;= *p &amp;&amp; *p &lt;= 0xef) {</div><div class='del'>-      INCR;</div><div class='del'>-      if ((0x40 &lt;= *p &amp;&amp; *p &lt;= 0x7e) ||</div><div class='del'>-	  (0x80 &lt;= *p &amp;&amp; *p &lt;= 0xa0)) {</div><div class='del'>-	return INT2FIX(_SJIS);</div><div class='del'>-      }</div><div class='del'>-      if (0xfd &lt;= *p &amp;&amp; *p &lt;= 0xfe) {</div><div class='del'>-	return INT2FIX(_EUC);</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    INCR;</div><div class='del'>-  }</div><div class='del'>-  return INT2FIX(_UNKNOWN);</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'>- *     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 = (unsigned char *)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='del'>-void</div><div class='del'>-Init_nkf()</div><div class='del'>-{</div><div class='del'>-    /* hoge */</div><div class='del'>-    VALUE mKconv = rb_define_module("NKF");</div><div class='del'>-    /* hoge */</div><div class='del'>-</div><div class='del'>-    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='del'>-</div><div class='del'>-    /* Auto-Detect */</div><div class='del'>-    rb_define_const(mKconv, "AUTO", INT2FIX(_AUTO));</div><div class='del'>-    /* ISO-2022-JP */</div><div class='del'>-    rb_define_const(mKconv, "JIS", INT2FIX(_JIS));</div><div class='del'>-    /* EUC-JP */</div><div class='del'>-    rb_define_const(mKconv, "EUC", INT2FIX(_EUC));</div><div class='del'>-    /* Shift_JIS */</div><div class='del'>-    rb_define_const(mKconv, "SJIS", INT2FIX(_SJIS));</div><div class='del'>-    /* BINARY */</div><div class='del'>-    rb_define_const(mKconv, "BINARY", INT2FIX(_BINARY));</div><div class='del'>-    /* No conversion */</div><div class='del'>-    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='del'>-    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='del'>-}</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 02e06b7149..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,126 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile$ -- 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$</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("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'>-%w"rb_str_set_len rb_block_call".each {|func| have_func(func, "ruby.h")}</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("PKCS5_PBKDF2_HMAC")</div><div class='del'>-have_func("PKCS5_PBKDF2_HMAC_SHA1")</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("SSL_SESSION_get_id")</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 a21c1f6c3c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/net/ftptls.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/net/ftptls.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile$ -- 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$</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 connect(host, port=FTP_PORT)</div><div class='del'>-      @hostname = host</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def login(user = "anonymous", passwd = nil, acct = nil)</div><div class='del'>-       store = OpenSSL::X509::Store.new</div><div class='del'>-       store.set_default_paths</div><div class='del'>-       ctx = OpenSSL::SSL::SSLContext.new('SSLv23')</div><div class='del'>-       ctx.cert_store = store</div><div class='del'>-       ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER</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'>-       @sock.post_connection_check(@hostname)</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 2b69280432..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/net/telnets.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/net/telnets.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,251 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile$ -- 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$</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'>-            if @options['VerifyMode'] != OpenSSL::SSL::VERIFY_NONE</div><div class='del'>-              @sock.post_connection_check(@options['Host'])</div><div class='del'>-            end</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 f10985ed2c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile$ -- 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$</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/pkcs7'</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 e7cbf2cfaf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/bn.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$ -- 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$</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 761a017487..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/buffering.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 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$</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 290e9c1d2d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/cipher.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl/cipher.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile$ -- 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$</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 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'>-    # Generate, set, and return a random key.</div><div class='del'>-    # You must call cipher.encrypt or cipher.decrypt before calling this method.</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'>-    # Generate, set, and return a random iv.</div><div class='del'>-    # You must call cipher.encrypt or cipher.decrypt before calling this method.</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'>-</div><div class='del'>-    # This class is only provided for backwards compatibility.  Use OpenSSL::Digest in the future.</div><div class='del'>-    class Cipher &lt; Cipher</div><div class='del'>-      # add warning</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 4810f0121b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/digest.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl/digest.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile$ -- 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$</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 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'>-    def self.digest(name, data)</div><div class='del'>-        super(data, name)</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'>-    # This class is only provided for backwards compatibility.  Use OpenSSL::Digest in the future.</div><div class='del'>-    class Digest &lt; Digest</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        # add warning</div><div class='del'>-        super(*args)</div><div class='del'>-      end</div><div class='del'>-    end</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/pkcs7.rb b/ext/openssl/lib/openssl/pkcs7.rb<br/>deleted file mode 100644<br/>index 1f88c1de5e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/pkcs7.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl/pkcs7.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile$ -- PKCS7</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 12148 2007-04-05 05:59:22Z technorama $</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-module OpenSSL</div><div class='del'>-  class PKCS7</div><div class='del'>-    # This class is only provided for backwards compatibility.  Use OpenSSL::PKCS7 in the future.</div><div class='del'>-    class PKCS7 &lt; PKCS7</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        super(*args)</div><div class='del'>-</div><div class='del'>-        warn("Warning: OpenSSL::PKCS7::PKCS7 is deprecated after Ruby 1.9; use OpenSSL::PKCS7 instead")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end # PKCS7</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 f722cb0c45..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/ssl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/lib/openssl/ssl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,179 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= $RCSfile$ -- 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$</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'>-    class SSLContext</div><div class='del'>-      DEFAULT_PARAMS = {</div><div class='del'>-        :ssl_version =&gt; "SSLv23",</div><div class='del'>-        :verify_mode =&gt; OpenSSL::SSL::VERIFY_PEER,</div><div class='del'>-        :ciphers =&gt; "ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW",</div><div class='del'>-        :options =&gt; OpenSSL::SSL::OP_ALL,</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      DEFAULT_CERT_STORE = OpenSSL::X509::Store.new</div><div class='del'>-      DEFAULT_CERT_STORE.set_default_paths</div><div class='del'>-      if defined?(OpenSSL::X509::V_FLAG_CRL_CHECK_ALL)</div><div class='del'>-        DEFAULT_CERT_STORE.flags = OpenSSL::X509::V_FLAG_CRL_CHECK_ALL</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def set_params(params={})</div><div class='del'>-        params = DEFAULT_PARAMS.merge(params)</div><div class='del'>-        self.ssl_version = params.delete(:ssl_version)</div><div class='del'>-        params.each{|name, value| self.__send__("#{name}=", value) }</div><div class='del'>-        if self.verify_mode != OpenSSL::SSL::VERIFY_NONE</div><div class='del'>-          unless self.ca_file or self.ca_path or self.cert_store</div><div class='del'>-            self.cert_store = DEFAULT_CERT_STORE</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        return params</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</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'>-    def verify_certificate_identity(cert, hostname)</div><div class='del'>-      should_verify_common_name = true</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'>-            should_verify_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'>-            should_verify_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 should_verify_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'>-      return false</div><div class='del'>-    end</div><div class='del'>-    module_function :verify_certificate_identity</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'>-        unless OpenSSL::SSL.verify_certificate_identity(peer_cert, hostname)</div><div class='del'>-          raise SSLError, "hostname was not match with the server certificate"</div><div class='del'>-        end</div><div class='del'>-        return true</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def session</div><div class='del'>-        SSL::Session.new(self)</div><div class='del'>-      rescue SSL::Session::SessionError</div><div class='del'>-        nil</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 shutdown(how=Socket::SHUT_RDWR)</div><div class='del'>-        @svr.shutdown(how)</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 e711bda39c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/lib/openssl/x509.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$ -- 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$</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 724f36b8ae..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/openssl_missing.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/openssl_missing.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,343 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-void</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;</div><div class='del'>-    memcpy(out, in, sizeof(HMAC_CTX));</div><div class='del'>-</div><div class='del'>-    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'>-}</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 3450b8130d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/openssl_missing.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/openssl_missing.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,184 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-#if !defined(HAVE_EVP_MD_CTX_INIT)</div><div class='del'>-void HMAC_CTX_init(HMAC_CTX *ctx);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_HMAC_CTX_COPY)</div><div class='del'>-void HMAC_CTX_copy(HMAC_CTX *out, HMAC_CTX *in);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_HMAC_CTX_CLEANUP)</div><div class='del'>-void HMAC_CTX_cleanup(HMAC_CTX *ctx);</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 *EVP_MD_CTX_create(void);</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 EVP_MD_CTX_init(EVP_MD_CTX *ctx);</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 EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);</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 EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);</div><div class='del'>-#endif</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'>-#if !defined(HAVE_X509_STORE_SET_EX_DATA)</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'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_X509_CRL_SET_VERSION)</div><div class='del'>-int X509_CRL_set_version(X509_CRL *x, long version);</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 X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_X509_CRL_SORT)</div><div class='del'>-int X509_CRL_sort(X509_CRL *c);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_X509_CRL_ADD0_REVOKED)</div><div class='del'>-int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_MOD_SQR)</div><div class='del'>-int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_MOD_ADD)</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'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_MOD_SUB)</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'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_BN_RAND_RANGE)</div><div class='del'>-int BN_rand_range(BIGNUM *r, BIGNUM *range);</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 BN_pseudo_rand_range(BIGNUM *r, BIGNUM *range);</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'>-char *CONF_get1_default_config_file(void);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_PEM_DEF_CALLBACK)</div><div class='del'>-int PEM_def_callback(char *buf, int num, int w, void *key);</div><div class='del'>-#endif</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 53f476fd65..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,496 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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_LEN(ary); 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_PTR(str), 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_LEN(pass);</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_PTR(pass), 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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   OpenSSL.errors -&gt; [String...]</div><div class='del'>- *</div><div class='del'>- * See any remaining errors held in queue.</div><div class='del'>- *</div><div class='del'>- * Any errors you see here are probably due to a bug in ruby's OpenSSL implementation.</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   OpenSSL.debug -&gt; true | false</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   OpenSSL.debug = boolean -&gt; boolean</div><div class='del'>- *</div><div class='del'>- * Turns on or off CRYPTO_MEM_CHECK.</div><div class='del'>- * Also shows some debugging message on stderr.</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'>-    if ((ossl_verify_cb_idx = X509_STORE_CTX_get_ex_new_index(0, "ossl_verify_cb_idx", 0, 0, 0)) &lt; 0)</div><div class='del'>-        ossl_raise(eOSSLError, "X509_STORE_CTX_get_ex_new_index");</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_pkcs5();</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 3cc30ae2e8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,225 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-#if 0</div><div class='del'>-  mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-  mX509 = rb_define_module_under(mOSSL, "X509");</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'>- * 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 OSSL_NO_CONF_API 1</div><div class='del'>-#  ifdef USE_WINSOCK2</div><div class='del'>-#    include &lt;winsock2.h&gt;</div><div class='del'>-#  else</div><div class='del'>-#    include &lt;winsock.h&gt;</div><div class='del'>-#  endif</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'>-</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_LEN(str);\</div><div class='del'>-    int newlen = (p) - (unsigned char*)RSTRING_PTR(str);\</div><div class='del'>-    assert(newlen &lt;= len);\</div><div class='del'>-    rb_str_set_len(str, newlen);\</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 8ceea95021..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_asn1.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_asn1.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1170 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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_PTR(obj), RSTRING_LEN(obj));</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_PTR(obj), RSTRING_LEN(obj));</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_PTR(obj), 0);</div><div class='del'>-    if(!a1obj) a1obj = OBJ_txt2obj(RSTRING_PTR(obj), 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_PTR(str), RSTRING_LEN(str));</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'>-    const 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_block_call(enumerable, rb_intern("each"), 0, 0, 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_LEN(value), 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_PTR(der);</div><div class='del'>-    ASN1_put_object(&amp;p, is_cons, RSTRING_LEN(value), tag, tag_class);</div><div class='del'>-    memcpy(p, RSTRING_PTR(value), RSTRING_LEN(value));</div><div class='del'>-    p += RSTRING_LEN(value);</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_PTR(tmp);</div><div class='del'>-    ossl_asn1_decode0(&amp;p, RSTRING_LEN(tmp), &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_PTR(tmp);</div><div class='del'>-    ary = ossl_asn1_decode0(&amp;p, RSTRING_LEN(tmp), &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_PTR(tmp);</div><div class='del'>-    ret = ossl_asn1_decode0(&amp;p, RSTRING_LEN(tmp), &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_LEN(value), 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_PTR(str);</div><div class='del'>-    if(tc == V_ASN1_UNIVERSAL)</div><div class='del'>-	ASN1_put_object(&amp;p, 1, RSTRING_LEN(value), 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_LEN(value), tag, V_ASN1_UNIVERSAL);</div><div class='del'>-	}</div><div class='del'>-	else ASN1_put_object(&amp;p, 1, RSTRING_LEN(value), tn, tc);</div><div class='del'>-    }</div><div class='del'>-    memcpy(p, RSTRING_PTR(value), RSTRING_LEN(value));</div><div class='del'>-    p += RSTRING_LEN(value);</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_PTR(oid), RSTRING_PTR(sn), RSTRING_PTR(ln)))</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'>-#if 0 /* let rdoc know about mOSSL */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-#endif</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, 0);</div><div class='del'>-    rb_attr(cASN1Data, rb_intern("tag"), 1, 1, 0);</div><div class='del'>-    rb_attr(cASN1Data, rb_intern("tag_class"), 1, 1, 0);</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, 0);</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 8aad9f970d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_asn1.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 6db1fb9a62..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_bio.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_bio.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,86 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-	rb_io_t *fptr;</div><div class='del'>-	FILE *fp;</div><div class='del'>-	int fd;</div><div class='del'>-</div><div class='del'>-	GetOpenFile(obj, fptr);</div><div class='del'>-	rb_io_check_readable(fptr);</div><div class='del'>-	if ((fd = dup(FPTR_TO_FD(fptr))) &lt; 0){</div><div class='del'>-	    rb_sys_fail(0);</div><div class='del'>-	}</div><div class='del'>-	if (!(fp = fdopen(fd, "r"))){</div><div class='del'>-	    close(fd);</div><div class='del'>-	    rb_sys_fail(0);</div><div class='del'>-	}</div><div class='del'>-	if (!(bio = BIO_new_fp(fp, BIO_CLOSE))){</div><div class='del'>-	    fclose(fp);</div><div class='del'>-	    ossl_raise(eOSSLError, NULL);</div><div class='del'>-	}</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_PTR(obj), RSTRING_LEN(obj));</div><div class='del'>-	if (!bio) ossl_raise(eOSSLError, NULL);</div><div class='del'>-    }</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 2d8f675c5b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_bio.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 6856476261..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_bn.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_bn.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,852 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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(const 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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    BN.new =&gt; aBN</div><div class='del'>- *    BN.new(bn) =&gt; aBN</div><div class='del'>- *    BN.new(string) =&gt; aBN</div><div class='del'>- *    BN.new(string, 0 | 2 | 10 | 16) =&gt; aBN</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_PTR(str), RSTRING_LEN(str), 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_PTR(str), RSTRING_LEN(str), 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_PTR(str))) {</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_PTR(str))) {</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    bn.to_s =&gt; string</div><div class='del'>- *    bn.to_s(base) =&gt; string</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +base+ - integer</div><div class='del'>- * * * Valid values:</div><div class='del'>- * * * * 0 - MPI</div><div class='del'>- * * * * 2 - binary</div><div class='del'>- * * * * 10 - the default</div><div class='del'>- * * * * 16 - hex</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_PTR(str)) != 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_PTR(str)) != 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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    bn.to_i =&gt; integer</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'>-    /*							\</div><div class='del'>-     * call-seq:					\</div><div class='del'>-     *   bn.##func -&gt; true | false			\</div><div class='del'>-     *							\</div><div class='del'>-     */							\</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'>-    /*							\</div><div class='del'>-     * call-seq:					\</div><div class='del'>-     *   bn.##func -&gt; aBN				\</div><div class='del'>-     *							\</div><div class='del'>-     */							\</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'>-    /*							\</div><div class='del'>-     * call-seq:					\</div><div class='del'>-     *   bn.##func(bn2) -&gt; aBN				\</div><div class='del'>-     *							\</div><div class='del'>-     */							\</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'>-    /*								\</div><div class='del'>-     * call-seq:						\</div><div class='del'>-     *   bn.##func(bn2) -&gt; aBN					\</div><div class='del'>-     *								\</div><div class='del'>-     */								\</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    bn1 / bn2 =&gt; [result, remainder]</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'>-    /*								\</div><div class='del'>-     * call-seq:						\</div><div class='del'>-     *   bn.##func(bn1, bn2) -&gt; aBN				\</div><div class='del'>-     *								\</div><div class='del'>-     */								\</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'>-    /*							\</div><div class='del'>-     * call-seq:					\</div><div class='del'>-     *   bn.##func(bit) -&gt; self				\</div><div class='del'>-     *							\</div><div class='del'>-     */							\</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    bn.bit_set?(bit) =&gt; true | false</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'>-    /*							\</div><div class='del'>-     * call-seq:					\</div><div class='del'>-     *   bn.##func(bits) -&gt; aBN				\</div><div class='del'>-     *							\</div><div class='del'>-     */							\</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_SELF_SHIFT(func)				\</div><div class='del'>-    /*							\</div><div class='del'>-     * call-seq:					\</div><div class='del'>-     *   bn.##func!(bits) -&gt; self			\</div><div class='del'>-     *							\</div><div class='del'>-     */							\</div><div class='del'>-    static VALUE					\</div><div class='del'>-    ossl_bn_self_##func(VALUE self, VALUE bits)		\</div><div class='del'>-    {							\</div><div class='del'>-	BIGNUM *bn;					\</div><div class='del'>-	int b;						\</div><div class='del'>-	b = NUM2INT(bits);				\</div><div class='del'>-	GetBN(self, bn);				\</div><div class='del'>-	if (!BN_##func(bn, bn, b))			\</div><div class='del'>-		ossl_raise(eBNError, NULL);		\</div><div class='del'>-	return self;					\</div><div class='del'>-    }</div><div class='del'>-BIGNUM_SELF_SHIFT(lshift);</div><div class='del'>-BIGNUM_SELF_SHIFT(rshift);</div><div class='del'>-</div><div class='del'>-#define BIGNUM_RAND(func)					\</div><div class='del'>-    /*								\</div><div class='del'>-     * call-seq:						\</div><div class='del'>-     *   BN.##func(bits [, fill [, odd]]) -&gt; aBN		\</div><div class='del'>-     *								\</div><div class='del'>-     */								\</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 = NUM2INT(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'>-    /*								\</div><div class='del'>-     * call-seq:						\</div><div class='del'>-     *   BN.##func(range) -&gt; aBN				\</div><div class='del'>-     *								\</div><div class='del'>-     */								\</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    BN.generate_prime(bits, [, safe [, add [, rem]]]) =&gt; bn</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +bits+ - integer</div><div class='del'>- * * +safe+ - boolean</div><div class='del'>- * * +add+ - BN</div><div class='del'>- * * +rem+ - BN</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'>-	add = GetBNPtr(vadd);</div><div class='del'>-	rem = NIL_P(vrem) ? NULL : 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'>-    /*							\</div><div class='del'>-     * call-seq:					\</div><div class='del'>-     *   bn.##func -&gt; integer				\</div><div class='del'>-     *							\</div><div class='del'>-     */							\</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'>-    /*							\</div><div class='del'>-     * call-seq:					\</div><div class='del'>-     *   bn.##func(bn2) -&gt; integer			\</div><div class='del'>-     *							\</div><div class='del'>-     */							\</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    bn.prime? =&gt; true | false</div><div class='del'>- *    bn.prime?(checks) =&gt; true | false</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +checks+ - integer</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    bn.prime_fasttest? =&gt; true | false</div><div class='del'>- *    bn.prime_fasttest?(checks) =&gt; true | false</div><div class='del'>- *    bn.prime_fasttest?(checks, trial_div) =&gt; true | false</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +checks+ - integer</div><div class='del'>- * * +trial_div+ - boolean</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 0 /* let rdoc know about mOSSL */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-#endif</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'>-    rb_define_method(cBN, "&gt;&gt;", ossl_bn_rshift, 1);</div><div class='del'>-    rb_define_method(cBN, "lshift!", ossl_bn_self_lshift, 1);</div><div class='del'>-    rb_define_method(cBN, "rshift!", ossl_bn_self_rshift, 1);</div><div class='del'>-    /* lshift1 - DON'T IMPL. */</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 d6c396227b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_bn.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_bn.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-extern BN_CTX *ossl_bn_ctx;</div><div class='del'>-</div><div class='del'>-VALUE ossl_bn_new(const 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'>-</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 b680dc6e64..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_cipher.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_cipher.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,567 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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 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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Cipher.new(string) -&gt; cipher</div><div class='del'>- *</div><div class='del'>- *  The string must contain a valid cipher name like "AES-128-CBC" or "3DES".</div><div class='del'>- *</div><div class='del'>- *  A list of cipher names is available by calling OpenSSL::Cipher.ciphers.</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Cipher.ciphers -&gt; array[string...]</div><div class='del'>- *</div><div class='del'>- *  Returns the names of all available ciphers in an array.</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.reset -&gt; self</div><div class='del'>- *</div><div class='del'>- *  Internally calls EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, -1).</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'>-	char *cname  = rb_class2name(rb_obj_class(self));</div><div class='del'>-	rb_warn("argumtents for %s#encrypt and %s#decrypt were deprecated; "</div><div class='del'>-                "use %s#pkcs5_keyivgen to derive key and IV",</div><div class='del'>-                cname, cname, cname);</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'>-	    StringValue(init_v);</div><div class='del'>-	    if (EVP_MAX_IV_LENGTH &gt; RSTRING_LEN(init_v)) {</div><div class='del'>-		memset(iv, 0, EVP_MAX_IV_LENGTH);</div><div class='del'>-		memcpy(iv, RSTRING_PTR(init_v), RSTRING_LEN(init_v));</div><div class='del'>-	    }</div><div class='del'>-	    else memcpy(iv, RSTRING_PTR(init_v), 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_PTR(pass), RSTRING_LEN(pass), 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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.encrypt -&gt; self</div><div class='del'>- *</div><div class='del'>- *  Make sure to call .encrypt or .decrypt before using any of the following methods:</div><div class='del'>- *  * [key=, iv=, random_key, random_iv, pkcs5_keyivgen]</div><div class='del'>- *</div><div class='del'>- *  Internally calls EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, 1).</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.decrypt -&gt; self</div><div class='del'>- *</div><div class='del'>- *  Make sure to call .encrypt or .decrypt before using any of the following methods:</div><div class='del'>- *  * [key=, iv=, random_key, random_iv, pkcs5_keyivgen]</div><div class='del'>- *</div><div class='del'>- *  Internally calls EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, 0).</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.pkcs5_keyivgen(pass [, salt [, iterations [, digest]]] ) -&gt; nil</div><div class='del'>- *</div><div class='del'>- *  Generates and sets the key/iv based on a password.</div><div class='del'>- *</div><div class='del'>- *  WARNING: This method is only PKCS5 v1.5 compliant when using RC2, RC4-40, or DES</div><div class='del'>- *  with MD5 or SHA1.  Using anything else (like AES) will generate the key/iv using an</div><div class='del'>- *  OpenSSL specific method.  Use a PKCS5 v2 key generation method instead.</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  +salt+ must be an 8 byte string if provided.</div><div class='del'>- *  +iterations+ is a integer with a default of 2048.</div><div class='del'>- *  +digest+ is a Digest object that defaults to 'MD5'</div><div class='del'>- *</div><div class='del'>- *  A minimum of 1000 iterations is recommended.</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_LEN(vsalt) != PKCS5_SALT_LEN)</div><div class='del'>-	    rb_raise(eCipherError, "salt must be an 8-octet string");</div><div class='del'>-	salt = RSTRING_PTR(vsalt);</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_PTR(vpass), RSTRING_LEN(vpass), 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'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher &lt;&lt; data -&gt; string</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  +data+ is a nonempty string.</div><div class='del'>- *</div><div class='del'>- * This method is deprecated and not available in 1.9.x or later.</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 rb_funcall(self, rb_intern("update"), 1, data);</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'>- *     cipher.update(data [, buffer]) -&gt; string or buffer</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  +data+ is a nonempty string.</div><div class='del'>- *  +buffer+ is an optional string to store the result.</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-ossl_cipher_update(int argc, VALUE *argv, VALUE self)</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 data, str;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;data, &amp;str);</div><div class='del'>-</div><div class='del'>-    StringValue(data);</div><div class='del'>-    in = RSTRING_PTR(data);</div><div class='del'>-    if ((in_len = RSTRING_LEN(data)) == 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'>-    out_len = in_len+EVP_CIPHER_CTX_block_size(ctx);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-        str = rb_str_new(0, out_len);</div><div class='del'>-    } else {</div><div class='del'>-        StringValue(str);</div><div class='del'>-        rb_str_resize(str, out_len);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!EVP_CipherUpdate(ctx, RSTRING_PTR(str), &amp;out_len, in, in_len))</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-    assert(out_len &lt; RSTRING_LEN(str));</div><div class='del'>-    rb_str_set_len(str, out_len);</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'>- *  call-seq:</div><div class='del'>- *     cipher.final -&gt; aString</div><div class='del'>- *</div><div class='del'>- *  Returns the remaining data held in the cipher object.  Further calls to update() or final() will return garbage.</div><div class='del'>- *</div><div class='del'>- *  See EVP_CipherFinal_ex for further information.</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_PTR(str), &amp;out_len))</div><div class='del'>-	ossl_raise(eCipherError, NULL);</div><div class='del'>-    assert(out_len &lt;= RSTRING_LEN(str));</div><div class='del'>-    rb_str_set_len(str, out_len);</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'>- *  call-seq:</div><div class='del'>- *     cipher.name -&gt; string</div><div class='del'>- *</div><div class='del'>- *  Returns the name of the cipher which may differ slightly from the original name provided.</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.key = string -&gt; string</div><div class='del'>- *</div><div class='del'>- *  Sets the cipher key.</div><div class='del'>- *</div><div class='del'>- *  Only call this method after calling cipher.encrypt or cipher.decrypt.</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_LEN(key) &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_PTR(key), 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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.iv = string -&gt; string</div><div class='del'>- *</div><div class='del'>- *  Sets the cipher iv.</div><div class='del'>- *</div><div class='del'>- *  Only call this method after calling cipher.encrypt or cipher.decrypt.</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_LEN(iv) &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_PTR(iv), -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'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.key_length = integer -&gt; integer</div><div class='del'>- *</div><div class='del'>- *  Sets the key length of the cipher.  If the cipher is a fixed length cipher then attempting to set the key</div><div class='del'>- *  length to any value other than the fixed value is an error.</div><div class='del'>- *</div><div class='del'>- *  Under normal circumstances you do not need to call this method (and probably shouldn't).</div><div class='del'>- *</div><div class='del'>- *  See EVP_CIPHER_CTX_set_key_length for further information.</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'>-    int len = NUM2INT(key_length);</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_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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.padding = integer -&gt; integer</div><div class='del'>- *</div><div class='del'>- *  Enables or disables padding. By default encryption operations are padded using standard block padding and the</div><div class='del'>- *  padding is checked and removed when decrypting. If the pad parameter is zero then no padding is performed, the</div><div class='del'>- *  total amount of data encrypted or decrypted must then be a multiple of the block size or an error will occur.</div><div class='del'>- *</div><div class='del'>- *  See EVP_CIPHER_CTX_set_padding for further information.</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'>-#if 0</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.key_length -&gt; integer</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_cipher_key_length() { }</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.iv_length -&gt; integer</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_cipher_iv_length() { }</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     cipher.block_size -&gt; integer</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_cipher_block_size() { }</div><div class='del'>-#endif</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'>-#if 0 /* let rdoc know about mOSSL */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-#endif</div><div class='del'>-    cCipher = rb_define_class_under(mOSSL, "Cipher", rb_cObject);</div><div class='del'>-    eCipherError = rb_define_class_under(cCipher, "CipherError", eOSSLError);</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(cCipher, "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'>-#if RUBY_VERSION_CODE &lt; 190</div><div class='del'>-    rb_define_method(cCipher, "&lt;&lt;", ossl_cipher_update_deprecated, 1);</div><div class='del'>-#endif</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='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 bed4fa853b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_cipher.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_cipher.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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 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 cc8e324029..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_config.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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_PTR(section)))){</div><div class='del'>-	if(!(sv = _CONF_new_section(conf, RSTRING_PTR(section)))){</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_PTR(name));</div><div class='del'>-    cv-&gt;value = BUF_strdup(RSTRING_PTR(value));</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_PTR(section), RSTRING_PTR(name));</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_block_call(hash, rb_intern("each"), 0, 0, 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 cb226b27e5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_config.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 879d399fe7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_digest.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_digest.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,259 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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 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'>-    const EVP_MD *md;</div><div class='del'>-</div><div class='del'>-    if (TYPE(obj) == T_STRING) {</div><div class='del'>-    	const char *name = STR2CSTR(obj);</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'>-    } else {</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'>-        md = EVP_MD_CTX_md(ctx);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return md;</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_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'>-    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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Digest.new(string) -&gt; digest</div><div class='del'>- *</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'>-    md = GetDigestPtr(type);</div><div class='del'>-    if (!NIL_P(data)) StringValue(data);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     digest.reset -&gt; 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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     digest.update(string) -&gt; aString</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_PTR(data), RSTRING_LEN(data));</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'>- *  call-seq:</div><div class='del'>- *      digest.finish -&gt; aString</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_digest_finish(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_MD_CTX *ctx;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;str);</div><div class='del'>-</div><div class='del'>-    GetDigest(self, ctx);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-        str = rb_str_new(NULL, EVP_MD_CTX_size(ctx));</div><div class='del'>-    } else {</div><div class='del'>-        StringValue(str);</div><div class='del'>-        rb_str_resize(str, EVP_MD_CTX_size(ctx));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    EVP_DigestFinal_ex(ctx, RSTRING_PTR(str), NULL);</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'>- *  call-seq:</div><div class='del'>- *      digest.name -&gt; string</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *      digest.digest_size -&gt; integer</div><div class='del'>- *</div><div class='del'>- *  Returns the output size of the digest.</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'>-static VALUE</div><div class='del'>-ossl_digest_block_length(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_block_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'>-    rb_require("openssl");</div><div class='del'>-    rb_require("digest");</div><div class='del'>-</div><div class='del'>-#if 0 /* let rdoc know about mOSSL */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    cDigest = rb_define_class_under(mOSSL, "Digest", rb_path2class("Digest::Class"));</div><div class='del'>-    eDigestError = rb_define_class_under(cDigest, "DigestError", eOSSLError);</div><div class='del'>-	</div><div class='del'>-    rb_define_alloc_func(cDigest, ossl_digest_alloc);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cDigest, "initialize", ossl_digest_initialize, -1);</div><div class='del'>-    rb_define_copy_func(cDigest, ossl_digest_copy);</div><div class='del'>-    rb_define_method(cDigest, "reset", ossl_digest_reset, 0);</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'>-    rb_define_private_method(cDigest, "finish", ossl_digest_finish, -1);</div><div class='del'>-    rb_define_method(cDigest, "digest_length", ossl_digest_size, 0);</div><div class='del'>-    rb_define_method(cDigest, "block_length", ossl_digest_block_length, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cDigest, "name", ossl_digest_name, 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 8cc5b1bc56..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_digest.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_digest.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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 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 cd835d1237..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_engine.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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_PTR(name))){\</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_PTR(name));</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_PTR(id))))</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_PTR(cmd),</div><div class='del'>-				 NIL_P(val) ? NULL : RSTRING_PTR(val), 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 ea2f256912..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_engine.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 ef77d6c427..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_hmac.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_hmac.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,268 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     HMAC.new(key, digest) -&gt; hmac</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_PTR(key), RSTRING_LEN(key),</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'>-    HMAC_CTX_copy(ctx1, ctx2);</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'>- *     hmac.update(string) -&gt; 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_PTR(data), RSTRING_LEN(data));</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'>-    HMAC_CTX_copy(&amp;final, ctx);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hmac.digest -&gt; aString</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hmac.hexdigest -&gt; aString</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hmac.reset -&gt; self</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_hmac_reset(VALUE self)</div><div class='del'>-{</div><div class='del'>-    HMAC_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    GetHMAC(self, ctx);</div><div class='del'>-    HMAC_Init_ex(ctx, NULL, 0, NULL, NULL);</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'>- *  call-seq:</div><div class='del'>- *     HMAC.digest(digest, key, data) -&gt; aString</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_PTR(key), RSTRING_LEN(key),</div><div class='del'>-	       RSTRING_PTR(data), RSTRING_LEN(data), 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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     HMAC.digest(digest, key, data) -&gt; aString</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_PTR(key), RSTRING_LEN(key),</div><div class='del'>-	       RSTRING_PTR(data), RSTRING_LEN(data), 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'>-#if 0 /* let rdoc know about mOSSL */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-#endif</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, "reset", ossl_hmac_reset, 0);</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 1a2978b39a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_hmac.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 738a203d93..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ns_spki.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_ns_spki.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,257 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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_PTR(buffer), -1))) {</div><div class='del'>-	p = RSTRING_PTR(buffer);</div><div class='del'>-	if (!(spki = d2i_NETSCAPE_SPKI(NULL, &amp;p, RSTRING_LEN(buffer)))) {</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'>-    ERR_clear_error();</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_PTR(str);</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_PTR(str),</div><div class='del'>-			 RSTRING_LEN(str))) {</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 9977035a9c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ns_spki.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 1e8e5903bd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ocsp.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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_PTR(arg);</div><div class='del'>-	if(!d2i_OCSP_REQUEST((OCSP_REQUEST**)&amp;DATA_PTR(self), &amp;p,</div><div class='del'>-			     RSTRING_LEN(arg))){</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_PTR(val), RSTRING_LEN(val));</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_PTR(str);</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_PTR(arg);</div><div class='del'>-	if(!d2i_OCSP_RESPONSE((OCSP_RESPONSE**)&amp;DATA_PTR(self), &amp;p,</div><div class='del'>-			      RSTRING_LEN(arg))){</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_PTR(str);</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_PTR(val), RSTRING_LEN(val));</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_LEN(ext); i++)</div><div class='del'>-	    OSSL_Check_Kind(RARRAY_PTR(ext)[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_LEN(ext); i++){</div><div class='del'>-	    x509ext = DupX509ExtPtr(RARRAY_PTR(ext)[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", eOSSLError);</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 65b4f2e23f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ocsp.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 2ec69ba8db..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs12.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs12.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,210 +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$</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 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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    PKCS12.create(pass, name, key, cert [, ca, [, key_pbe [, cert_pbe [, key_iter [, mac_iter [, keytype]]]]]])</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +pass+ - string</div><div class='del'>- * * +name+ - A string describing the key.</div><div class='del'>- * * +key+ - Any PKey.</div><div class='del'>- * * +cert+ - A X509::Certificate.</div><div class='del'>- * * * The public_key portion of the certificate must contain a valid public key.</div><div class='del'>- * * * The not_before and not_after fields must be filled in.</div><div class='del'>- * * +ca+ - An optional array of X509::Certificate's.</div><div class='del'>- * * +key_pbe+ - string</div><div class='del'>- * * +cert_pbe+ - string</div><div class='del'>- * * +key_iter+ - integer</div><div class='del'>- * * +mac_iter+ - integer</div><div class='del'>- * * +keytype+ - An integer representing an MSIE specific extension.</div><div class='del'>- *</div><div class='del'>- * Any optional arguments may be supplied as nil to preserve the OpenSSL defaults.</div><div class='del'>- *</div><div class='del'>- * See the OpenSSL documentation for PKCS12_create().</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, key_nid, cert_nid, key_iter, mac_iter, keytype;</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'>-    int nkey = 0, ncert = 0, kiter = 0, miter = 0, ktype = 0;</div><div class='del'>-    PKCS12 *p12;</div><div class='del'>-    </div><div class='del'>-    rb_scan_args(argc, argv, "46", &amp;pass, &amp;name, &amp;pkey, &amp;cert, &amp;ca, &amp;key_nid, &amp;cert_nid, &amp;key_iter, &amp;mac_iter, &amp;keytype);</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'>-/* TODO: make a VALUE to nid function */</div><div class='del'>-    if (!NIL_P(key_nid)) {</div><div class='del'>-        if ((nkey = OBJ_txt2nid(StringValuePtr(key_nid))) == NID_undef)</div><div class='del'>-            rb_raise(rb_eArgError, "Unknown PBE algorithm %s", StringValuePtr(key_nid));</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(cert_nid)) {</div><div class='del'>-        if ((ncert = OBJ_txt2nid(StringValuePtr(cert_nid))) == NID_undef)</div><div class='del'>-            rb_raise(rb_eArgError, "Unknown PBE algorithm %s", StringValuePtr(cert_nid));</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(key_iter))</div><div class='del'>-        kiter = NUM2INT(key_iter);</div><div class='del'>-    if (!NIL_P(mac_iter))</div><div class='del'>-        miter = NUM2INT(mac_iter);</div><div class='del'>-    if (!NIL_P(keytype))</div><div class='del'>-        ktype = NUM2INT(keytype);</div><div class='del'>-</div><div class='del'>-    p12 = PKCS12_create(passphrase, friendlyname, key, x509, x509s,</div><div class='del'>-                        nkey, ncert, kiter, miter, ktype);</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'>-    ossl_pkcs12_set_key(obj, pkey);</div><div class='del'>-    ossl_pkcs12_set_cert(obj, cert);</div><div class='del'>-    ossl_pkcs12_set_ca_certs(obj, ca);</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'>- * call-seq:</div><div class='del'>- *    PKCS12.new -&gt; pkcs12</div><div class='del'>- *    PKCS12.new(str) -&gt; pkcs12</div><div class='del'>- *    PKCS12.new(str, pass) -&gt; pkcs12</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +str+ - Must be a DER encoded PKCS12 string.</div><div class='del'>- * * +pass+ - string</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, "PKCS12_parse");</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_PTR(str);</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'>-    /*</div><div class='del'>-     * Defines a file format commonly used to store private keys with</div><div class='del'>-     * accompanying public key certificates, protected with a password-based</div><div class='del'>-     * symmetric key.</div><div class='del'>-     */</div><div class='del'>-    cPKCS12 = rb_define_class_under(mOSSL, "PKCS12", rb_cObject);</div><div class='del'>-    ePKCS12Error = rb_define_class_under(cPKCS12, "PKCS12Error", eOSSLError);</div><div class='del'>-    rb_define_singleton_method(cPKCS12, "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 24d25d00bb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs12.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs12.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,15 +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$</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 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.c b/ext/openssl/ossl_pkcs5.c<br/>deleted file mode 100644<br/>index 007889fc94..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs5.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs5.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,96 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</div><div class='del'>- * Copyright (C) 2007 Technorama Ltd. &lt;oss-ruby@technorama.net&gt;</div><div class='del'>- */</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-VALUE mPKCS5;</div><div class='del'>-VALUE ePKCS5;</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    PKCS5.pbkdf2_hmac(pass, salt, iter, keylen, digest) =&gt; string</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +pass+ - string</div><div class='del'>- * * +salt+ - string</div><div class='del'>- * * +iter+ - integer - should be greater than 1000.  2000 is better.</div><div class='del'>- * * +keylen+ - integer</div><div class='del'>- * * +digest+ - a string or OpenSSL::Digest object.</div><div class='del'>- *</div><div class='del'>- * Available in OpenSSL 0.9.9?.</div><div class='del'>- *</div><div class='del'>- * Digests other than SHA1 may not be supported by other cryptography libraries.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs5_pbkdf2_hmac(VALUE self, VALUE pass, VALUE salt, VALUE iter, VALUE keylen, VALUE digest)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_PKCS5_PBKDF2_HMAC</div><div class='del'>-    VALUE str;</div><div class='del'>-    const EVP_MD *md;</div><div class='del'>-    int len = NUM2INT(keylen);</div><div class='del'>-</div><div class='del'>-    StringValue(pass);</div><div class='del'>-    StringValue(salt);</div><div class='del'>-    md = GetDigestPtr(digest);</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-</div><div class='del'>-    if (PKCS5_PBKDF2_HMAC(RSTRING_PTR(pass), RSTRING_LEN(pass), RSTRING_PTR(salt), RSTRING_LEN(salt), NUM2INT(iter), md, len, RSTRING_PTR(str)) != 1)</div><div class='del'>-        ossl_raise(ePKCS5, "PKCS5_PBKDF2_HMAC");</div><div class='del'>-</div><div class='del'>-    return str;</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'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    PKCS5.pbkdf2_hmac_sha1(pass, salt, iter, keylen) =&gt; string</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +pass+ - string</div><div class='del'>- * * +salt+ - string</div><div class='del'>- * * +iter+ - integer - should be greater than 1000.  2000 is better.</div><div class='del'>- * * +keylen+ - integer</div><div class='del'>- *</div><div class='del'>- * This method is available almost any version OpenSSL.</div><div class='del'>- *</div><div class='del'>- * Conforms to rfc2898.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_pkcs5_pbkdf2_hmac_sha1(VALUE self, VALUE pass, VALUE salt, VALUE iter, VALUE keylen)</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_PKCS5_PBKDF2_HMAC_SHA1</div><div class='del'>-    VALUE str;</div><div class='del'>-    int len = NUM2INT(keylen);</div><div class='del'>-</div><div class='del'>-    StringValue(pass);</div><div class='del'>-    StringValue(salt);</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, len);</div><div class='del'>-</div><div class='del'>-    if (PKCS5_PBKDF2_HMAC_SHA1(RSTRING_PTR(pass), RSTRING_LEN(pass), RSTRING_PTR(salt), RSTRING_LEN(salt), NUM2INT(iter), len, RSTRING_PTR(str)) != 1)</div><div class='del'>-        ossl_raise(ePKCS5, "PKCS5_PBKDF2_HMAC_SHA1");</div><div class='del'>-</div><div class='del'>-    return str;</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'>-void</div><div class='del'>-Init_ossl_pkcs5()</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     * Password-based Encryption</div><div class='del'>-     *</div><div class='del'>-     */</div><div class='del'>-    mPKCS5 = rb_define_module_under(mOSSL, "PKCS5");</div><div class='del'>-    ePKCS5 = rb_define_class_under(mPKCS5, "PKCS5Error", eOSSLError);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mPKCS5, "pbkdf2_hmac", ossl_pkcs5_pbkdf2_hmac, 5);</div><div class='del'>-    rb_define_module_function(mPKCS5, "pbkdf2_hmac_sha1", ossl_pkcs5_pbkdf2_hmac_sha1, 4);</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 6918844779..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs7.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs7.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1019 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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 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'>- * call-seq:</div><div class='del'>- *    PKCS7.read_smime(string) =&gt; pkcs7</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    PKCS7.write_smime(pkcs7 [, data [, flags]]) =&gt; string</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    PKCS7.sign(cert, key, data, [, certs [, flags]]) =&gt; pkcs7</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    PKCS7.encrypt(certs, data, [, cipher [, flags]]) =&gt; pkcs7</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    PKCS7.new =&gt; pkcs7</div><div class='del'>- *    PKCS7.new(string) =&gt; pkcs7</div><div class='del'>- *</div><div class='del'>- * Many methods in this class aren't documented.</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'>-    const 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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    pkcs7.type = type =&gt; type</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    pkcs7.type =&gt; string or nil</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_block_call(ary, rb_intern("each"), 0, 0, 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_block_call(ary, rb_intern("each"), 0, 0, 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'>-    if (ok &lt; 0) ossl_raise(ePKCS7Error, NULL);</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'>-    ERR_clear_error();</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_PTR(str);</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'>-    cPKCS7 = rb_define_class_under(mOSSL, "PKCS7", rb_cObject);</div><div class='del'>-    ePKCS7Error = rb_define_class_under(cPKCS7, "PKCS7Error", eOSSLError);</div><div class='del'>-    rb_define_singleton_method(cPKCS7, "read_smime", ossl_pkcs7_s_read_smime, 1);</div><div class='del'>-    rb_define_singleton_method(cPKCS7, "write_smime", ossl_pkcs7_s_write_smime, -1);</div><div class='del'>-    rb_define_singleton_method(cPKCS7, "sign",  ossl_pkcs7_s_sign, -1);</div><div class='del'>-    rb_define_singleton_method(cPKCS7, "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(cPKCS7, "SignerInfo", rb_cObject);</div><div class='del'>-    rb_define_const(cPKCS7, "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(cPKCS7,"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(cPKCS7, #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 371c421103..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkcs7.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkcs7.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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 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 b295cfc25e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,240 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-#if !defined(OPENSSL_NO_EC) &amp;&amp; (OPENSSL_VERSION_NUMBER &gt;= 0x0090802fL)</div><div class='del'>-    case EVP_PKEY_EC:</div><div class='del'>-	return ossl_ec_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_PTR(filename), "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_PTR(data), RSTRING_LEN(data));</div><div class='del'>-    str = rb_str_new(0, EVP_PKEY_size(pkey)+16);</div><div class='del'>-    if (!EVP_SignFinal(&amp;ctx, RSTRING_PTR(str), &amp;buf_len, pkey))</div><div class='del'>-	ossl_raise(ePKeyError, NULL);</div><div class='del'>-    assert(buf_len &lt;= RSTRING_LEN(str));</div><div class='del'>-    rb_str_set_len(str, buf_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_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_PTR(data), RSTRING_LEN(data));</div><div class='del'>-    switch (EVP_VerifyFinal(&amp;ctx, RSTRING_PTR(sig), RSTRING_LEN(sig), 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'>-#if 0 /* let rdoc know about mOSSL */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-#endif</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, dh, ec</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'>-    Init_ossl_ec();</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 67ff1fddd0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,141 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-/*</div><div class='del'>- * EC</div><div class='del'>- */</div><div class='del'>-extern VALUE cEC;</div><div class='del'>-extern VALUE eECError;</div><div class='del'>-extern VALUE cEC_GROUP;</div><div class='del'>-extern VALUE eEC_GROUP;</div><div class='del'>-extern VALUE cEC_POINT;</div><div class='del'>-extern VALUE eEC_POINT;</div><div class='del'>-VALUE ossl_ec_new(EVP_PKEY *);</div><div class='del'>-void Init_ossl_ec(void);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define OSSL_PKEY_BN(keytype, name)					\</div><div class='del'>-/*									\</div><div class='del'>- *  call-seq:								\</div><div class='del'>- *     key.##name -&gt; aBN						\</div><div class='del'>- */									\</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'>-/*									\</div><div class='del'>- *  call-seq:								\</div><div class='del'>- *     key.##name = bn -&gt; 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 02c3d99ed8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey_dh.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey_dh.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,532 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     DH.generate(size [, generator]) -&gt; dh</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  * +size+ is an integer representing the desired key size.  Keys smaller than 1024 should be considered insecure.</div><div class='del'>- *  * +generator+ is a small number &gt; 1, typically 2 or 5.</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 = NUM2INT(gen);</div><div class='del'>-    }</div><div class='del'>-    dh = dh_generate(NUM2INT(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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     DH.new([size [, generator] | string]) -&gt; dh</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  * +size+ is an integer representing the desired key size.  Keys smaller than 1024 should be considered insecure.</div><div class='del'>- *  * +generator+ is a small number &gt; 1, typically 2 or 5.</div><div class='del'>- *  * +string+ contains the DER or PEM encoded key.</div><div class='del'>- *</div><div class='del'>- *  === Examples</div><div class='del'>- *  * DH.new -&gt; dh</div><div class='del'>- *  * DH.new(1024) -&gt; dh</div><div class='del'>- *  * DH.new(1024, 5) -&gt; dh</div><div class='del'>- *  * DH.new(File.read('key.pem')) -&gt; dh</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 = NUM2INT(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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dh.public? -&gt; true | false</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'>-    return (pkey-&gt;pkey.dh-&gt;pub_key) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dh.private? -&gt; true | false</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dh.to_pem -&gt; aString</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dh.to_der -&gt; aString</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_PTR(str);</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'>- *  call-seq:</div><div class='del'>- *     dh.params -&gt; hash</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'>- *  call-seq:</div><div class='del'>- *     dh.to_text -&gt; aString</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'>- *  call-seq:</div><div class='del'>- *     dh.public_key -&gt; aDH</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dh.check_params -&gt; true | false</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dh.generate_key -&gt; self</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     dh.compute_key(pub_bn) -&gt; aString</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  * +pub_bn+ is a OpenSSL::BN.</div><div class='del'>- *</div><div class='del'>- *  Returns aString containing a shared secret computed from the other parties public value.</div><div class='del'>- *</div><div class='del'>- *  See DH_compute_key() for further information.</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_PTR(str), pub_key, dh)) &lt; 0) {</div><div class='del'>-	ossl_raise(eDHError, NULL);</div><div class='del'>-    }</div><div class='del'>-    rb_str_set_len(str, len);</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'>-#if 0 /* let rdoc know about mOSSL and mPKey */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-    mPKey = rb_define_module_under(mOSSL, "PKey");</div><div class='del'>-#endif</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'>-void</div><div class='del'>-Init_ossl_dh()</div><div class='del'>-{</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 d9c7fcbe78..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey_dsa.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey_dsa.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,484 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    DSA.generate(size) -&gt; dsa</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  * +size+ is an integer representing the desired key size.</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(NUM2INT(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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    DSA.new([size | string [, pass]) -&gt; dsa</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  * +size+ is an integer representing the desired key size.</div><div class='del'>- *  * +string+ contains a DER or PEM encoded key.</div><div class='del'>- *  * +pass+ is a string that contains a optional password.</div><div class='del'>- *</div><div class='del'>- *  === Examples</div><div class='del'>- *  * DSA.new -&gt; dsa</div><div class='del'>- *  * DSA.new(1024) -&gt; dsa</div><div class='del'>- *  * DSA.new(File.read('dsa.pem')) -&gt; dsa</div><div class='del'>- *  * DSA.new(File.read('dsa.pem'), 'mypassword') -&gt; dsa</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    dsa.public? -&gt; true | false</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'>-    return (pkey-&gt;pkey.dsa-&gt;pub_key) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    dsa.private? -&gt; true | false</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    dsa.to_pem([cipher, password]) -&gt; aString</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  +cipher+ is an OpenSSL::Cipher.</div><div class='del'>- *  +password+ is a string containing your password.</div><div class='del'>- *</div><div class='del'>- *  === Examples</div><div class='del'>- *  * DSA.to_pem -&gt; aString</div><div class='del'>- *  * DSA.to_pem(cipher, 'mypassword') -&gt; aString</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    dsa.to_der -&gt; aString</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_PTR(str);</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'>- *  call-seq:</div><div class='del'>- *    dsa.params -&gt; hash</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'>- *  call-seq:</div><div class='del'>- *    dsa.to_text -&gt; aString</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'>- *  call-seq:</div><div class='del'>- *    dsa.public_key -&gt; aDSA</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    dsa.syssign(string) -&gt; aString</div><div class='del'>- *</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_PTR(data), RSTRING_LEN(data), RSTRING_PTR(str),</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'>-    rb_str_set_len(str, buf_len);</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'>- *  call-seq:</div><div class='del'>- *    dsa.sysverify(digest, sig) -&gt; true | false</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_PTR(digest), RSTRING_LEN(digest),</div><div class='del'>-		     RSTRING_PTR(sig), RSTRING_LEN(sig), 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'>-#if 0 /* let rdoc know about mOSSL and mPKey */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-    mPKey = rb_define_module_under(mOSSL, "PKey");</div><div class='del'>-#endif</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'>-void</div><div class='del'>-Init_ossl_dsa()</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_ec.c b/ext/openssl/ossl_pkey_ec.c<br/>deleted file mode 100644<br/>index 210054121d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey_ec.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey_ec.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1582 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * Copyright (C) 2006-2007 Technorama Ltd. &lt;oss-ruby@technorama.net&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#if !defined(OPENSSL_NO_EC) &amp;&amp; (OPENSSL_VERSION_NUMBER &gt;= 0x0090802fL)</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-	EC_GROUP *group;</div><div class='del'>-	int dont_free;</div><div class='del'>-} ossl_ec_group;</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-	EC_POINT *point;</div><div class='del'>-	int dont_free;</div><div class='del'>-} ossl_ec_point;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define EXPORT_PEM 0</div><div class='del'>-#define EXPORT_DER 1</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define GetPKeyEC(obj, pkey) do { \</div><div class='del'>-    GetPKey(obj, pkey); \</div><div class='del'>-    if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_EC) { \</div><div class='del'>-	ossl_raise(rb_eRuntimeError, "THIS IS NOT A EC PKEY!"); \</div><div class='del'>-    } \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define SafeGet_ec_group(obj, group) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cEC_GROUP); \</div><div class='del'>-    Data_Get_Struct(obj, ossl_ec_group, group); \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-#define Get_EC_KEY(obj, key) do { \</div><div class='del'>-    EVP_PKEY *pkey; \</div><div class='del'>-    GetPKeyEC(obj, pkey); \</div><div class='del'>-    key = pkey-&gt;pkey.ec; \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-#define Require_EC_KEY(obj, key) do { \</div><div class='del'>-    Get_EC_KEY(obj, key); \</div><div class='del'>-    if (key == NULL) \</div><div class='del'>-        rb_raise(eECError, "EC_KEY is not initialized"); \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-#define SafeRequire_EC_KEY(obj, key) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cEC); \</div><div class='del'>-    Require_EC_KEY(obj, key); \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define Get_EC_GROUP(obj, g) do { \</div><div class='del'>-    ossl_ec_group *ec_group; \</div><div class='del'>-    Data_Get_Struct(obj, ossl_ec_group, ec_group); \</div><div class='del'>-    if (ec_group == NULL) \</div><div class='del'>-        rb_raise(eEC_GROUP, "missing ossl_ec_group structure"); \</div><div class='del'>-    g = ec_group-&gt;group; \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-#define Require_EC_GROUP(obj, group) do { \</div><div class='del'>-    Get_EC_GROUP(obj, group); \</div><div class='del'>-    if (group == NULL) \</div><div class='del'>-        rb_raise(eEC_GROUP, "EC_GROUP is not initialized"); \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-#define SafeRequire_EC_GROUP(obj, group) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cEC_GROUP); \</div><div class='del'>-    Require_EC_GROUP(obj, group); \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-#define Get_EC_POINT(obj, p) do { \</div><div class='del'>-    ossl_ec_point *ec_point; \</div><div class='del'>-    Data_Get_Struct(obj, ossl_ec_point, ec_point); \</div><div class='del'>-    if (ec_point == NULL) \</div><div class='del'>-        rb_raise(eEC_POINT, "missing ossl_ec_point structure"); \</div><div class='del'>-    p = ec_point-&gt;point; \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-#define Require_EC_POINT(obj, point) do { \</div><div class='del'>-    Get_EC_POINT(obj, point); \</div><div class='del'>-    if (point == NULL) \</div><div class='del'>-        rb_raise(eEC_POINT, "EC_POINT is not initialized"); \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-#define SafeRequire_EC_POINT(obj, point) do { \</div><div class='del'>-    OSSL_Check_Kind(obj, cEC_POINT); \</div><div class='del'>-    Require_EC_POINT(obj, point); \</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-VALUE cEC;</div><div class='del'>-VALUE eECError;</div><div class='del'>-VALUE cEC_GROUP;</div><div class='del'>-VALUE eEC_GROUP;</div><div class='del'>-VALUE cEC_POINT;</div><div class='del'>-VALUE eEC_POINT;</div><div class='del'>-</div><div class='del'>-static ID s_GFp;</div><div class='del'>-static ID s_GFp_simple;</div><div class='del'>-static ID s_GFp_mont;</div><div class='del'>-static ID s_GFp_nist;</div><div class='del'>-static ID s_GF2m;</div><div class='del'>-static ID s_GF2m_simple;</div><div class='del'>-</div><div class='del'>-static ID ID_uncompressed;</div><div class='del'>-static ID ID_compressed;</div><div class='del'>-static ID ID_hybrid;</div><div class='del'>-</div><div class='del'>-static VALUE ec_instance(VALUE klass, EC_KEY *ec)</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 (!ec) {</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_EC_KEY(pkey, ec)) {</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 ossl_ec_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 = ec_instance(cEC, EC_KEY_new());</div><div class='del'>-    } else {</div><div class='del'>-	if (EVP_PKEY_type(pkey-&gt;type) != EVP_PKEY_EC) {</div><div class='del'>-	    ossl_raise(rb_eTypeError, "Not a EC key!");</div><div class='del'>-	}</div><div class='del'>-	WrapPKey(cEC, obj, pkey);</div><div class='del'>-    }</div><div class='del'>-    if (obj == Qfalse) {</div><div class='del'>-	ossl_raise(eECError, 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'>-/*  call-seq:</div><div class='del'>- *     OpenSSL::PKey::EC.new()</div><div class='del'>- *     OpenSSL::PKey::EC.new(ec_key)</div><div class='del'>- *     OpenSSL::PKey::EC.new(ec_group)</div><div class='del'>- *     OpenSSL::PKey::EC.new("secp112r1")</div><div class='del'>- *     OpenSSL::PKey::EC.new(pem_string)</div><div class='del'>- *     OpenSSL::PKey::EC.new(der_string)</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for:</div><div class='del'>- *     EC_KEY_*</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    EVP_PKEY *pkey;</div><div class='del'>-    EC_KEY *ec = NULL;</div><div class='del'>-    VALUE arg, pass;</div><div class='del'>-    VALUE group = Qnil;</div><div class='del'>-	</div><div class='del'>-    GetPKey(self, pkey);</div><div class='del'>-    if (pkey-&gt;pkey.ec)</div><div class='del'>-        rb_raise(eECError, "EC_KEY already initialized");</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;arg, &amp;pass);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(arg)) {</div><div class='del'>-        ec = EC_KEY_new();</div><div class='del'>-    } else {</div><div class='del'>-        if (rb_obj_is_kind_of(arg, cEC)) {</div><div class='del'>-            EC_KEY *other_ec = NULL;</div><div class='del'>-</div><div class='del'>-            SafeRequire_EC_KEY(arg, other_ec);</div><div class='del'>-            ec = EC_KEY_dup(other_ec);</div><div class='del'>-        } else if (rb_obj_is_kind_of(arg, cEC_GROUP)) {</div><div class='del'>-        	ec = EC_KEY_new();</div><div class='del'>-        	group = arg;</div><div class='del'>-        } else {</div><div class='del'>-            BIO *in = ossl_obj2bio(arg);</div><div class='del'>-</div><div class='del'>-            ec = PEM_read_bio_ECPrivateKey(in, NULL, NULL, NULL);</div><div class='del'>-            if (!ec) {</div><div class='del'>-                BIO_reset(in);</div><div class='del'>-                ec = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, NULL);</div><div class='del'>-            }</div><div class='del'>-            if (!ec) {</div><div class='del'>-                BIO_reset(in);</div><div class='del'>-                ec = d2i_ECPrivateKey_bio(in, NULL);</div><div class='del'>-            }</div><div class='del'>-            if (!ec) {</div><div class='del'>-                BIO_reset(in);</div><div class='del'>-                ec = d2i_EC_PUBKEY_bio(in, NULL);</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            BIO_free(in);</div><div class='del'>-</div><div class='del'>-            if (ec == NULL) {</div><div class='del'>-                const char *name = STR2CSTR(arg);</div><div class='del'>-                int nid = OBJ_sn2nid(name);</div><div class='del'>-</div><div class='del'>-                if (nid == NID_undef)</div><div class='del'>-                    ossl_raise(eECError, "unknown curve name (%s)\n", name);</div><div class='del'>-</div><div class='del'>-                if ((ec = EC_KEY_new_by_curve_name(nid)) == NULL)</div><div class='del'>-                    ossl_raise(eECError, "unable to create curve (%s)\n", name);</div><div class='del'>-</div><div class='del'>-                EC_KEY_set_asn1_flag(ec, OPENSSL_EC_NAMED_CURVE);</div><div class='del'>-                EC_KEY_set_conv_form(ec, POINT_CONVERSION_UNCOMPRESSED);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (ec == NULL)</div><div class='del'>-        ossl_raise(eECError, NULL);</div><div class='del'>-</div><div class='del'>-    if (!EVP_PKEY_assign_EC_KEY(pkey, ec)) {</div><div class='del'>-	EC_KEY_free(ec);</div><div class='del'>-	ossl_raise(eECError, "EVP_PKEY_assign_EC_KEY");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set(self, "@group", Qnil);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(group))</div><div class='del'>-        rb_funcall(self, rb_intern("group="), 1, arg);</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'>- *  call-seq:</div><div class='del'>- *     key.group   =&gt; group</div><div class='del'>- *</div><div class='del'>- *  Returns a constant &lt;code&gt;OpenSSL::EC::Group&lt;/code&gt; that is tied to the key.</div><div class='del'>- *  Modifying the returned group can make the key invalid.</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_get_group(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE group_v;</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    ossl_ec_group *ec_group;</div><div class='del'>-    EC_GROUP *group;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-</div><div class='del'>-    group_v = rb_iv_get(self, "@group");</div><div class='del'>-    if (!NIL_P(group_v))</div><div class='del'>-        return group_v;</div><div class='del'>-</div><div class='del'>-    if ((group = (EC_GROUP *)EC_KEY_get0_group(ec)) != NULL) {</div><div class='del'>-        group_v = rb_obj_alloc(cEC_GROUP);</div><div class='del'>-        SafeGet_ec_group(group_v, ec_group);</div><div class='del'>-        ec_group-&gt;group = group;</div><div class='del'>-        ec_group-&gt;dont_free = 1;</div><div class='del'>-        rb_iv_set(group_v, "@key", self);</div><div class='del'>-        rb_iv_set(self, "@group", group_v);</div><div class='del'>-        return group_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'>- *  call-seq:</div><div class='del'>- *     key.group = group   =&gt; group</div><div class='del'>- *</div><div class='del'>- *  Returns the same object passed, not the group object associated with the key.</div><div class='del'>- *  If you wish to access the group object tied to the key call key.group after setting</div><div class='del'>- *  the group.</div><div class='del'>- *</div><div class='del'>- *  Setting the group will immediately destroy any previously assigned group object.</div><div class='del'>- *  The group is internally copied by OpenSSL.  Modifying the original group after </div><div class='del'>- *  assignment will not effect the internal key structure.</div><div class='del'>- *  (your changes may be lost).  BE CAREFUL.</div><div class='del'>- *</div><div class='del'>- *  EC_KEY_set_group calls EC_GROUP_free(key-&gt;group) then EC_GROUP_dup(), not EC_GROUP_copy.</div><div class='del'>- *  This documentation is accurate for OpenSSL 0.9.8b.</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_set_group(VALUE self, VALUE group_v)</div><div class='del'>-{</div><div class='del'>-    VALUE old_group_v;</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    EC_GROUP *group;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-    SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-    old_group_v = rb_iv_get(self, "@group");</div><div class='del'>-    if (!NIL_P(old_group_v)) {</div><div class='del'>-        ossl_ec_group *old_ec_group;</div><div class='del'>-        SafeGet_ec_group(old_group_v, old_ec_group);</div><div class='del'>-</div><div class='del'>-        old_ec_group-&gt;group = NULL;</div><div class='del'>-        old_ec_group-&gt;dont_free = 0;</div><div class='del'>-        rb_iv_set(old_group_v, "@key", Qnil);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_iv_set(self, "@group", Qnil);</div><div class='del'>-</div><div class='del'>-    if (EC_KEY_set_group(ec, group) != 1)</div><div class='del'>-        ossl_raise(eECError, "EC_KEY_set_group");</div><div class='del'>-</div><div class='del'>-    return group_v;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.private_key   =&gt; OpenSSL::BN</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_KEY_get0_private_key()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_get_private_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    const BIGNUM *bn;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-</div><div class='del'>-    if ((bn = EC_KEY_get0_private_key(ec)) == NULL)</div><div class='del'>-        return Qnil;</div><div class='del'>-</div><div class='del'>-    return ossl_bn_new(bn);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.private_key = openssl_bn</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_KEY_set_private_key()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_set_private_key(VALUE self, VALUE private_key)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    BIGNUM *bn = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-    if (!NIL_P(private_key))</div><div class='del'>-        bn = GetBNPtr(private_key);</div><div class='del'>-</div><div class='del'>-    switch (EC_KEY_set_private_key(ec, bn)) {</div><div class='del'>-    case 1:</div><div class='del'>-        break;</div><div class='del'>-    case 0:</div><div class='del'>-        if (bn == NULL)</div><div class='del'>-            break;</div><div class='del'>-    default:</div><div class='del'>-        ossl_raise(eECError, "EC_KEY_set_private_key");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return private_key;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE ossl_ec_point_dup(const EC_POINT *point, VALUE group_v)</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-    const EC_GROUP *group;</div><div class='del'>-    ossl_ec_point *new_point;</div><div class='del'>-</div><div class='del'>-    obj = rb_obj_alloc(cEC_POINT);</div><div class='del'>-    Data_Get_Struct(obj, ossl_ec_point, new_point);</div><div class='del'>-</div><div class='del'>-    SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-    new_point-&gt;point = EC_POINT_dup(point, group);</div><div class='del'>-    if (new_point-&gt;point == NULL)</div><div class='del'>-        ossl_raise(eEC_POINT, "EC_POINT_dup");</div><div class='del'>-    rb_iv_set(obj, "@group", group_v);</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'>- *  call-seq:</div><div class='del'>- *     key.public_key   =&gt; OpenSSL::PKey::EC::Point</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_KEY_get0_public_key()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_get_public_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    const EC_POINT *point;</div><div class='del'>-    VALUE group;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-</div><div class='del'>-    if ((point = EC_KEY_get0_public_key(ec)) == NULL)</div><div class='del'>-        return Qnil;</div><div class='del'>-</div><div class='del'>-    group = rb_funcall(self, rb_intern("group"), 0);</div><div class='del'>-    if (NIL_P(group))</div><div class='del'>-        ossl_raise(eECError, "EC_KEY_get0_get0_group (has public_key but no group???");</div><div class='del'>-</div><div class='del'>-    return ossl_ec_point_dup(point, group);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.public_key = ec_point</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_KEY_set_public_key()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_set_public_key(VALUE self, VALUE public_key)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    EC_POINT *point = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-    if (!NIL_P(public_key))</div><div class='del'>-        SafeRequire_EC_POINT(public_key, point);</div><div class='del'>-</div><div class='del'>-    switch (EC_KEY_set_public_key(ec, point)) {</div><div class='del'>-    case 1:</div><div class='del'>-        break;</div><div class='del'>-    case 0:</div><div class='del'>-        if (point == NULL)</div><div class='del'>-            break;</div><div class='del'>-    default:</div><div class='del'>-        ossl_raise(eECError, "EC_KEY_set_public_key");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return public_key;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.public_key? =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Both public_key? and private_key? may return false at the same time unlike other PKey classes.</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_is_public_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-</div><div class='del'>-    return (EC_KEY_get0_public_key(ec) ? Qtrue : Qfalse);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.private_key? =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Both public_key? and private_key? may return false at the same time unlike other PKey classes.</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_is_private_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-</div><div class='del'>-    return (EC_KEY_get0_private_key(ec) ? Qtrue : Qfalse);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ossl_ec_key_to_string(VALUE self, int format)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    BIO *out;</div><div class='del'>-    int i = -1;</div><div class='del'>-    int private = 0;</div><div class='del'>-    EVP_CIPHER *cipher = NULL;</div><div class='del'>-    char *password = NULL;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-</div><div class='del'>-    if (EC_KEY_get0_public_key(ec) == NULL)</div><div class='del'>-        rb_raise(eECError, "can't export - no public key set");</div><div class='del'>-</div><div class='del'>-    if (EC_KEY_check_key(ec) != 1)</div><div class='del'>-	ossl_raise(eECError, "can't export - EC_KEY_check_key failed");</div><div class='del'>-</div><div class='del'>-    if (EC_KEY_get0_private_key(ec))</div><div class='del'>-        private = 1;</div><div class='del'>-</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem())))</div><div class='del'>-        ossl_raise(eECError, "BIO_new(BIO_s_mem())");</div><div class='del'>-</div><div class='del'>-    switch(format) {</div><div class='del'>-    case EXPORT_PEM:</div><div class='del'>-    	if (private) {</div><div class='del'>-    	    if (cipher || password)</div><div class='del'>-/* BUG: finish cipher/password key export */</div><div class='del'>-    	        rb_notimplement();</div><div class='del'>-            i = PEM_write_bio_ECPrivateKey(out, ec, cipher, NULL, 0, NULL, password);</div><div class='del'>-    	} else {</div><div class='del'>-    	    if (cipher || password)</div><div class='del'>-                rb_raise(rb_eArgError, "encryption is not supported when exporting this key type");</div><div class='del'>-</div><div class='del'>-            i = PEM_write_bio_EC_PUBKEY(out, ec);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    	break;</div><div class='del'>-    case EXPORT_DER:</div><div class='del'>-        if (private) {</div><div class='del'>-    	    if (cipher || password)</div><div class='del'>-                rb_raise(rb_eArgError, "encryption is not supported when exporting this key type");</div><div class='del'>-</div><div class='del'>-            i = i2d_ECPrivateKey_bio(out, ec);</div><div class='del'>-        } else {</div><div class='del'>-    	    if (cipher || password)</div><div class='del'>-                rb_raise(rb_eArgError, "encryption is not supported when exporting this key type");</div><div class='del'>-</div><div class='del'>-            i = i2d_EC_PUBKEY_bio(out, ec);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    	break;</div><div class='del'>-    default:</div><div class='del'>-        BIO_free(out);</div><div class='del'>-    	rb_raise(rb_eRuntimeError, "unknown format (internal error)");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (i != 1) {</div><div class='del'>-        BIO_free(out);</div><div class='del'>-        ossl_raise(eECError, "outlen=%d", i);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.to_pem   =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for PEM_write_bio_ECPrivateKey()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_to_pem(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return ossl_ec_key_to_string(self, EXPORT_PEM);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.to_der   =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for i2d_ECPrivateKey_bio()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return ossl_ec_key_to_string(self, EXPORT_DER);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.to_text   =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_KEY_print()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eECError, "BIO_new(BIO_s_mem())");</div><div class='del'>-    }</div><div class='del'>-    if (!EC_KEY_print(out, ec, 0)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eECError, "EC_KEY_print");</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'>- *  call-seq:</div><div class='del'>- *     key.generate_key   =&gt; self</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_KEY_generate_key()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_generate_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-</div><div class='del'>-    if (EC_KEY_generate_key(ec) != 1)</div><div class='del'>-	ossl_raise(eECError, "EC_KEY_generate_key");</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'>- *  call-seq:</div><div class='del'>- *     key.check_key   =&gt; true</div><div class='del'>- *</div><div class='del'>- *  Raises an exception if the key is invalid.</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_KEY_check_key()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_check_key(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-</div><div class='del'>-    if (EC_KEY_check_key(ec) != 1)</div><div class='del'>-	ossl_raise(eECError, "EC_KEY_check_key");</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'>- *  call-seq:</div><div class='del'>- *     key.dh_compute_key(pubkey)   =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for ECDH_compute_key()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_dh_compute_key(VALUE self, VALUE pubkey)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    EC_POINT *point;</div><div class='del'>-    int buf_len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-    SafeRequire_EC_POINT(pubkey, point);</div><div class='del'>-</div><div class='del'>-/* BUG: need a way to figure out the maximum string size */</div><div class='del'>-    buf_len = 1024;</div><div class='del'>-    str = rb_str_new(0, buf_len);</div><div class='del'>-/* BUG: take KDF as a block */</div><div class='del'>-    buf_len = ECDH_compute_key(RSTRING_PTR(str), buf_len, point, ec, NULL);</div><div class='del'>-    if (buf_len &lt; 0)</div><div class='del'>-         ossl_raise(eECError, "ECDH_compute_key");</div><div class='del'>-</div><div class='del'>-    rb_str_resize(str, buf_len);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* sign_setup */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     key.dsa_sign_asn1(data)   =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for ECDSA_sign()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_dsa_sign_asn1(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-    unsigned int buf_len;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-    StringValue(data);</div><div class='del'>-</div><div class='del'>-    if (EC_KEY_get0_private_key(ec) == NULL)</div><div class='del'>-	ossl_raise(eECError, "Private EC key needed!");</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, ECDSA_size(ec) + 16);</div><div class='del'>-    if (ECDSA_sign(0, (unsigned char *) RSTRING_PTR(data), RSTRING_LEN(data), (unsigned char *) RSTRING_PTR(str), &amp;buf_len, ec) != 1)</div><div class='del'>-         ossl_raise(eECError, "ECDSA_sign");</div><div class='del'>-</div><div class='del'>-    rb_str_resize(str, buf_len);</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'>- *  call-seq:</div><div class='del'>- *     key.dsa_verify(data, sig)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for ECDSA_verify()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_key_dsa_verify_asn1(VALUE self, VALUE data, VALUE sig)</div><div class='del'>-{</div><div class='del'>-    EC_KEY *ec;</div><div class='del'>-</div><div class='del'>-    Require_EC_KEY(self, ec);</div><div class='del'>-    StringValue(data);</div><div class='del'>-    StringValue(sig);</div><div class='del'>-</div><div class='del'>-    switch (ECDSA_verify(0, (unsigned char *) RSTRING_PTR(data), RSTRING_LEN(data), (unsigned char *) RSTRING_PTR(sig), RSTRING_LEN(sig), ec)) {</div><div class='del'>-    case 1:	return Qtrue;</div><div class='del'>-    case 0:	return Qfalse;</div><div class='del'>-    default:	break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ossl_raise(eECError, "ECDSA_verify");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void ossl_ec_group_free(ossl_ec_group *ec_group)</div><div class='del'>-{</div><div class='del'>-    if (!ec_group-&gt;dont_free &amp;&amp; ec_group-&gt;group)</div><div class='del'>-        EC_GROUP_clear_free(ec_group-&gt;group);</div><div class='del'>-    free(ec_group);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ossl_ec_group_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    ossl_ec_group *ec_group;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    obj = Data_Make_Struct(klass, ossl_ec_group, 0, ossl_ec_group_free, ec_group);</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new("secp112r1")</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(ec_group)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(pem_string)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(der_string)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(pem_file)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(der_file)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(:GFp_simple)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(:GFp_mult)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(:GFp_nist)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(:GF2m_simple)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(:GFp, bignum_p, bignum_a, bignum_b)</div><div class='del'>- *     OpenSSL::PKey::EC::Group.new(:GF2m, bignum_p, bignum_a, bignum_b)</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_*</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE arg1, arg2, arg3, arg4;</div><div class='del'>-    ossl_ec_group *ec_group;</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, ossl_ec_group, ec_group);</div><div class='del'>-    if (ec_group-&gt;group != NULL)</div><div class='del'>-        rb_raise(rb_eRuntimeError, "EC_GROUP is already initialized");</div><div class='del'>-</div><div class='del'>-    switch (rb_scan_args(argc, argv, "13", &amp;arg1, &amp;arg2, &amp;arg3, &amp;arg4)) {</div><div class='del'>-    case 1:</div><div class='del'>-        if (SYMBOL_P(arg1)) {</div><div class='del'>-            const EC_METHOD *method = NULL;</div><div class='del'>-            ID id = SYM2ID(arg1);</div><div class='del'>-</div><div class='del'>-            if (id == s_GFp_simple) {</div><div class='del'>-                method = EC_GFp_simple_method();</div><div class='del'>-            } else if (id == s_GFp_mont) {</div><div class='del'>-                method = EC_GFp_mont_method();</div><div class='del'>-            } else if (id == s_GFp_nist) {</div><div class='del'>-                method = EC_GFp_nist_method();</div><div class='del'>-            } else if (id == s_GF2m_simple) {</div><div class='del'>-                method = EC_GF2m_simple_method();</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            if (method) {</div><div class='del'>-                if ((group = EC_GROUP_new(method)) == NULL)</div><div class='del'>-                    ossl_raise(eEC_GROUP, "EC_GROUP_new");</div><div class='del'>-            } else {</div><div class='del'>-                rb_raise(rb_eArgError, "unknown symbol, must be :GFp_simple, :GFp_mont, :GFp_nist or :GF2m_simple");</div><div class='del'>-            }</div><div class='del'>-        } else if (rb_obj_is_kind_of(arg1, cEC_GROUP)) {</div><div class='del'>-            const EC_GROUP *arg1_group;</div><div class='del'>-</div><div class='del'>-            SafeRequire_EC_GROUP(arg1, arg1_group);</div><div class='del'>-            if ((group = EC_GROUP_dup(arg1_group)) == NULL)</div><div class='del'>-                ossl_raise(eEC_GROUP, "EC_GROUP_dup");</div><div class='del'>-        } else {</div><div class='del'>-            BIO *in = ossl_obj2bio(arg1);</div><div class='del'>-</div><div class='del'>-            group = PEM_read_bio_ECPKParameters(in, NULL, NULL, NULL);</div><div class='del'>-            if (!group) {</div><div class='del'>-                BIO_reset(in);</div><div class='del'>-                group = d2i_ECPKParameters_bio(in, NULL);</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            BIO_free(in);</div><div class='del'>-</div><div class='del'>-            if (!group) {</div><div class='del'>-                const char *name = STR2CSTR(arg1);</div><div class='del'>-                int nid = OBJ_sn2nid(name);</div><div class='del'>-</div><div class='del'>-                if (nid == NID_undef)</div><div class='del'>-                    ossl_raise(eEC_GROUP, "unknown curve name (%s)", name);</div><div class='del'>-</div><div class='del'>-                group = EC_GROUP_new_by_curve_name(nid);</div><div class='del'>-                if (group == NULL)</div><div class='del'>-                    ossl_raise(eEC_GROUP, "unable to create curve (%s)", name);</div><div class='del'>-</div><div class='del'>-                EC_GROUP_set_asn1_flag(group, OPENSSL_EC_NAMED_CURVE);</div><div class='del'>-                EC_GROUP_set_point_conversion_form(group, POINT_CONVERSION_UNCOMPRESSED);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        break;</div><div class='del'>-    case 4:</div><div class='del'>-        if (SYMBOL_P(arg1)) {</div><div class='del'>-            ID id = SYM2ID(arg1);</div><div class='del'>-            EC_GROUP *(*new_curve)(const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *) = NULL;</div><div class='del'>-            const BIGNUM *p = GetBNPtr(arg2);</div><div class='del'>-            const BIGNUM *a = GetBNPtr(arg3);</div><div class='del'>-            const BIGNUM *b = GetBNPtr(arg4);</div><div class='del'>-</div><div class='del'>-            if (id == s_GFp) {</div><div class='del'>-                new_curve = EC_GROUP_new_curve_GFp;</div><div class='del'>-            } else if (id == s_GF2m) {</div><div class='del'>-                new_curve = EC_GROUP_new_curve_GF2m;</div><div class='del'>-            } else {</div><div class='del'>-                rb_raise(rb_eArgError, "unknown symbol, must be :GFp or :GF2m");</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            if ((group = new_curve(p, a, b, ossl_bn_ctx)) == NULL)</div><div class='del'>-                ossl_raise(eEC_GROUP, "EC_GROUP_new_by_GF*");</div><div class='del'>-        } else {</div><div class='del'>-             rb_raise(rb_eArgError, "unknown argument, must be :GFp or :GF2m");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        rb_raise(rb_eArgError, "wrong number of arguments");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (group == NULL)</div><div class='del'>-        ossl_raise(eEC_GROUP, "");</div><div class='del'>-</div><div class='del'>-    ec_group-&gt;group = group;</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'>- *     group1 == group2   =&gt; true | false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_eql(VALUE a, VALUE b)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group1 = NULL, *group2 = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(a, group1);</div><div class='del'>-    SafeRequire_EC_GROUP(b, group2);</div><div class='del'>-</div><div class='del'>-    if (EC_GROUP_cmp(group1, group2, ossl_bn_ctx) == 1)</div><div class='del'>-       return Qfalse;</div><div class='del'>-</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.generator   =&gt; ec_point</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_get0_generator()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_get_generator(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE point_obj;</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    point_obj = ossl_ec_point_dup(EC_GROUP_get0_generator(group), self);</div><div class='del'>-</div><div class='del'>-    return point_obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.set_generator(generator, order, cofactor)   =&gt; self</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_set_generator()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_set_generator(VALUE self, VALUE generator, VALUE order, VALUE cofactor)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-    const EC_POINT *point;</div><div class='del'>-    const BIGNUM *o, *co;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-    SafeRequire_EC_POINT(generator, point);</div><div class='del'>-    o = GetBNPtr(order);</div><div class='del'>-    co = GetBNPtr(cofactor);</div><div class='del'>-</div><div class='del'>-    if (EC_GROUP_set_generator(group, point, o, co) != 1)</div><div class='del'>-        ossl_raise(eEC_GROUP, "EC_GROUP_set_generator");</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'>- *     group.get_order   =&gt; order_bn</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_get_order()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_get_order(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE bn_obj;</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    bn_obj = ossl_bn_new(NULL);</div><div class='del'>-    bn = GetBNPtr(bn_obj);</div><div class='del'>-</div><div class='del'>-    if (EC_GROUP_get_order(group, bn, ossl_bn_ctx) != 1)</div><div class='del'>-        ossl_raise(eEC_GROUP, "EC_GROUP_get_order");</div><div class='del'>-</div><div class='del'>-    return bn_obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.get_cofactor   =&gt; cofactor_bn</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_get_cofactor()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_get_cofactor(VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE bn_obj;</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    bn_obj = ossl_bn_new(NULL);</div><div class='del'>-    bn = GetBNPtr(bn_obj);</div><div class='del'>-</div><div class='del'>-    if (EC_GROUP_get_cofactor(group, bn, ossl_bn_ctx) != 1)</div><div class='del'>-        ossl_raise(eEC_GROUP, "EC_GROUP_get_cofactor");</div><div class='del'>-</div><div class='del'>-    return bn_obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.curve_name  =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_get_curve_name()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_get_curve_name(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-    int nid;</div><div class='del'>-</div><div class='del'>-    Get_EC_GROUP(self, group);</div><div class='del'>-    if (group == NULL)</div><div class='del'>-        return Qnil;</div><div class='del'>-</div><div class='del'>-    nid = EC_GROUP_get_curve_name(group);</div><div class='del'>-</div><div class='del'>-/* BUG: an nid or asn1 object should be returned, maybe. */</div><div class='del'>-    return rb_str_new2(OBJ_nid2sn(nid));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     EC.builtin_curves =&gt; [[name, comment], ...]</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_builtin_curves()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_s_builtin_curves(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_builtin_curve *curves = NULL;</div><div class='del'>-    int n;</div><div class='del'>-    int crv_len = EC_get_builtin_curves(NULL, 0);</div><div class='del'>-    VALUE ary, ret;</div><div class='del'>-</div><div class='del'>-    curves = ALLOCA_N(EC_builtin_curve, crv_len);</div><div class='del'>-    if (curves == NULL)</div><div class='del'>-        return Qnil;</div><div class='del'>-    if (!EC_get_builtin_curves(curves, crv_len))</div><div class='del'>-        ossl_raise(rb_eRuntimeError, "EC_get_builtin_curves");</div><div class='del'>-</div><div class='del'>-    ret = rb_ary_new2(crv_len);</div><div class='del'>-</div><div class='del'>-    for (n = 0; n &lt; crv_len; n++) {</div><div class='del'>-        const char *sname = OBJ_nid2sn(curves[n].nid);</div><div class='del'>-        const char *comment = curves[n].comment;</div><div class='del'>-</div><div class='del'>-        ary = rb_ary_new2(2);</div><div class='del'>-        rb_ary_push(ary, rb_str_new2(sname));</div><div class='del'>-        rb_ary_push(ary, comment ? rb_str_new2(comment) : Qnil);</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'>-/*  call-seq:</div><div class='del'>- *     group.asn1_flag  =&gt; Fixnum</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_get_asn1_flag()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_get_asn1_flag(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-    int flag;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    flag = EC_GROUP_get_asn1_flag(group);</div><div class='del'>-</div><div class='del'>-    return INT2FIX(flag);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.asn1_flag = Fixnum   =&gt; Fixnum</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_set_asn1_flag()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_set_asn1_flag(VALUE self, VALUE flag_v)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    EC_GROUP_set_asn1_flag(group, NUM2INT(flag_v));</div><div class='del'>-</div><div class='del'>-    return flag_v;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.point_conversion_form  =&gt; :uncompressed | :compressed | :hybrid </div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_get_point_conversion_form()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_get_point_conversion_form(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-    point_conversion_form_t form;</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    form = EC_GROUP_get_point_conversion_form(group);</div><div class='del'>-</div><div class='del'>-    switch (form) {</div><div class='del'>-    case POINT_CONVERSION_UNCOMPRESSED:	ret = ID_uncompressed; break;</div><div class='del'>-    case POINT_CONVERSION_COMPRESSED:	ret = ID_compressed; break;</div><div class='del'>-    case POINT_CONVERSION_HYBRID:	ret = ID_hybrid; break;</div><div class='del'>-    default:	rb_raise(eEC_GROUP, "unsupported point conversion form: %d, this module should be updated", form);</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-   return ID2SYM(ret);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.point_conversion_form = form =&gt; form</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_set_point_conversion_form()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_set_point_conversion_form(VALUE self, VALUE form_v)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-    point_conversion_form_t form;</div><div class='del'>-    ID form_id = SYM2ID(form_v);</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    if (form_id == ID_uncompressed) {</div><div class='del'>-        form = POINT_CONVERSION_UNCOMPRESSED;</div><div class='del'>-    } else if (form_id == ID_compressed) {</div><div class='del'>-        form = POINT_CONVERSION_COMPRESSED;</div><div class='del'>-    } else if (form_id == ID_hybrid) {</div><div class='del'>-        form = POINT_CONVERSION_HYBRID;</div><div class='del'>-    } else {</div><div class='del'>-        rb_raise(rb_eArgError, "form must be :compressed, :uncompressed, or :hybrid");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    EC_GROUP_set_point_conversion_form(group, form);</div><div class='del'>-</div><div class='del'>-    return form_v;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.seed   =&gt; String or nil</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_get0_seed()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_get_seed(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-    size_t seed_len;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    seed_len = EC_GROUP_get_seed_len(group);</div><div class='del'>-</div><div class='del'>-    if (seed_len == 0)</div><div class='del'>-        return Qnil;</div><div class='del'>-</div><div class='del'>-    return rb_str_new(EC_GROUP_get0_seed(group), seed_len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.seed = seed  =&gt; seed</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_set_seed()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_set_seed(VALUE self, VALUE seed)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-    StringValue(seed);</div><div class='del'>-</div><div class='del'>-    if (EC_GROUP_set_seed(group, RSTRING_PTR(seed), RSTRING_LEN(seed)) != RSTRING_LEN(seed))</div><div class='del'>-        ossl_raise(eEC_GROUP, "EC_GROUP_set_seed");</div><div class='del'>-</div><div class='del'>-    return seed;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* get/set curve GFp, GF2m */</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.degree   =&gt; Fixnum</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_GROUP_get_degree()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_get_degree(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group = NULL;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    return INT2NUM(EC_GROUP_get_degree(group));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ossl_ec_group_to_string(VALUE self, int format)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group;</div><div class='del'>-    BIO *out;</div><div class='del'>-    int i = -1;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    Get_EC_GROUP(self, group);</div><div class='del'>-</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem())))</div><div class='del'>-        ossl_raise(eEC_GROUP, "BIO_new(BIO_s_mem())");</div><div class='del'>-</div><div class='del'>-    switch(format) {</div><div class='del'>-    case EXPORT_PEM:</div><div class='del'>-        i = PEM_write_bio_ECPKParameters(out, group);</div><div class='del'>-    	break;</div><div class='del'>-    case EXPORT_DER:</div><div class='del'>-        i = i2d_ECPKParameters_bio(out, group);</div><div class='del'>-    	break;</div><div class='del'>-    default:</div><div class='del'>-        BIO_free(out);</div><div class='del'>-    	rb_raise(rb_eRuntimeError, "unknown format (internal error)");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (i != 1) {</div><div class='del'>-        BIO_free(out);</div><div class='del'>-        ossl_raise(eECError, 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'>-/*  call-seq:</div><div class='del'>- *     group.to_pem   =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for PEM_write_bio_ECPKParameters()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_to_pem(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return ossl_ec_group_to_string(self, EXPORT_PEM);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.to_der   =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for i2d_ECPKParameters_bio()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return ossl_ec_group_to_string(self, EXPORT_DER);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*  call-seq:</div><div class='del'>- *     group.to_text   =&gt; String</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for ECPKParameters_print()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_group_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_GROUP *group;</div><div class='del'>-    BIO *out;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    Require_EC_GROUP(self, group);</div><div class='del'>-    if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-	ossl_raise(eEC_GROUP, "BIO_new(BIO_s_mem())");</div><div class='del'>-    }</div><div class='del'>-    if (!ECPKParameters_print(out, group, 0)) {</div><div class='del'>-	BIO_free(out);</div><div class='del'>-	ossl_raise(eEC_GROUP, 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'>-static void ossl_ec_point_free(ossl_ec_point *ec_point)</div><div class='del'>-{</div><div class='del'>-    if (!ec_point-&gt;dont_free &amp;&amp; ec_point-&gt;point)</div><div class='del'>-        EC_POINT_clear_free(ec_point-&gt;point);</div><div class='del'>-    free(ec_point);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ossl_ec_point_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    ossl_ec_point *ec_point;</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    obj = Data_Make_Struct(klass, ossl_ec_point, 0, ossl_ec_point_free, ec_point);</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'>- *  call-seq:</div><div class='del'>- *     OpenSSL::PKey::EC::Point.new(point)</div><div class='del'>- *     OpenSSL::PKey::EC::Point.new(group)</div><div class='del'>- *     OpenSSL::PKey::EC::Point.new(group, bn)</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_POINT_*</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_point_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    ossl_ec_point *ec_point;</div><div class='del'>-    EC_POINT *point = NULL;</div><div class='del'>-    VALUE arg1, arg2;</div><div class='del'>-    VALUE group_v = Qnil;</div><div class='del'>-    const EC_GROUP *group = NULL;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, ossl_ec_point, ec_point);</div><div class='del'>-    if (ec_point-&gt;point)</div><div class='del'>-        rb_raise(eEC_POINT, "EC_POINT already initialized");</div><div class='del'>-</div><div class='del'>-    switch (rb_scan_args(argc, argv, "11", &amp;arg1, &amp;arg2)) {</div><div class='del'>-    case 1:</div><div class='del'>-        if (rb_obj_is_kind_of(arg1, cEC_POINT)) {</div><div class='del'>-            const EC_POINT *arg_point;</div><div class='del'>-</div><div class='del'>-            group_v = rb_iv_get(arg1, "@group");</div><div class='del'>-            SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-            SafeRequire_EC_POINT(arg1, arg_point);</div><div class='del'>-</div><div class='del'>-            point = EC_POINT_dup(arg_point, group);</div><div class='del'>-        } else if (rb_obj_is_kind_of(arg1, cEC_GROUP)) {</div><div class='del'>-            group_v = arg1;</div><div class='del'>-            SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-            point = EC_POINT_new(group);</div><div class='del'>-        } else {</div><div class='del'>-            rb_raise(eEC_POINT, "wrong argument type: must be OpenSSL::PKey::EC::Point or OpenSSL::Pkey::EC::Group");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        break;</div><div class='del'>-     case 2:</div><div class='del'>-        if (!rb_obj_is_kind_of(arg1, cEC_GROUP))</div><div class='del'>-            rb_raise(rb_eArgError, "1st argument must be OpenSSL::PKey::EC::Group");</div><div class='del'>-        group_v = arg1;</div><div class='del'>-        SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-        </div><div class='del'>-        if (rb_obj_is_kind_of(arg2, cBN)) {</div><div class='del'>-            const BIGNUM *bn = GetBNPtr(arg2);</div><div class='del'>-</div><div class='del'>-            point = EC_POINT_bn2point(group, bn, NULL, ossl_bn_ctx);</div><div class='del'>-        } else {</div><div class='del'>-            BIO *in = ossl_obj2bio(arg1);</div><div class='del'>-</div><div class='del'>-/* BUG: finish me */</div><div class='del'>-</div><div class='del'>-            BIO_free(in);</div><div class='del'>-</div><div class='del'>-            if (point == NULL) {</div><div class='del'>-                ossl_raise(eEC_POINT, "unknown type for 2nd arg");</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        rb_raise(rb_eArgError, "wrong number of arguments");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (point == NULL)</div><div class='del'>-        ossl_raise(eEC_POINT, NULL);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(group_v))</div><div class='del'>-        rb_raise(rb_eRuntimeError, "missing group (internal error)");</div><div class='del'>-</div><div class='del'>-    ec_point-&gt;point = point;</div><div class='del'>-</div><div class='del'>-    rb_iv_set(self, "@group", group_v);</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'>- *  call-seq:</div><div class='del'>- *     point1 == point2 =&gt; true | false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_point_eql(VALUE a, VALUE b)</div><div class='del'>-{</div><div class='del'>-    EC_POINT *point1, *point2;</div><div class='del'>-    VALUE group_v1 = rb_iv_get(a, "@group");</div><div class='del'>-    VALUE group_v2 = rb_iv_get(b, "@group");</div><div class='del'>-    const EC_GROUP *group;</div><div class='del'>-</div><div class='del'>-    if (ossl_ec_group_eql(group_v1, group_v2) == Qfalse)</div><div class='del'>-        return Qfalse;</div><div class='del'>-</div><div class='del'>-    Require_EC_POINT(a, point1);</div><div class='del'>-    SafeRequire_EC_POINT(b, point2);</div><div class='del'>-    SafeRequire_EC_GROUP(group_v1, group);</div><div class='del'>-</div><div class='del'>-    if (EC_POINT_cmp(group, point1, point2, ossl_bn_ctx) == 1)</div><div class='del'>-        return Qfalse;</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'>- *  call-seq:</div><div class='del'>- *     point.infinity? =&gt; true | false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_point_is_at_infinity(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_POINT *point;</div><div class='del'>-    VALUE group_v = rb_iv_get(self, "@group");</div><div class='del'>-    const EC_GROUP *group;</div><div class='del'>-</div><div class='del'>-    Require_EC_POINT(self, point);</div><div class='del'>-    SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-    switch (EC_POINT_is_at_infinity(group, point)) {</div><div class='del'>-    case 1: return Qtrue;</div><div class='del'>-    case 0: return Qfalse;</div><div class='del'>-    default: ossl_raise(cEC_POINT, "EC_POINT_is_at_infinity");</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'>- *     point.on_curve? =&gt; true | false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_point_is_on_curve(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_POINT *point;</div><div class='del'>-    VALUE group_v = rb_iv_get(self, "@group");</div><div class='del'>-    const EC_GROUP *group;</div><div class='del'>-</div><div class='del'>-    Require_EC_POINT(self, point);</div><div class='del'>-    SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-    switch (EC_POINT_is_on_curve(group, point, ossl_bn_ctx)) {</div><div class='del'>-    case 1: return Qtrue;</div><div class='del'>-    case 0: return Qfalse;</div><div class='del'>-    default: ossl_raise(cEC_POINT, "EC_POINT_is_on_curve");</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'>- *     point.make_affine! =&gt; self</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_point_make_affine(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_POINT *point;</div><div class='del'>-    VALUE group_v = rb_iv_get(self, "@group");</div><div class='del'>-    const EC_GROUP *group;</div><div class='del'>-</div><div class='del'>-    Require_EC_POINT(self, point);</div><div class='del'>-    SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-    if (EC_POINT_make_affine(group, point, ossl_bn_ctx) != 1)</div><div class='del'>-        ossl_raise(cEC_POINT, "EC_POINT_make_affine");</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'>- *  call-seq:</div><div class='del'>- *     point.invert! =&gt; self</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_point_invert(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_POINT *point;</div><div class='del'>-    VALUE group_v = rb_iv_get(self, "@group");</div><div class='del'>-    const EC_GROUP *group;</div><div class='del'>-</div><div class='del'>-    Require_EC_POINT(self, point);</div><div class='del'>-    SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-    if (EC_POINT_invert(group, point, ossl_bn_ctx) != 1)</div><div class='del'>-        ossl_raise(cEC_POINT, "EC_POINT_invert");</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'>- *  call-seq:</div><div class='del'>- *     point.set_to_infinity! =&gt; self</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_point_set_to_infinity(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_POINT *point;</div><div class='del'>-    VALUE group_v = rb_iv_get(self, "@group");</div><div class='del'>-    const EC_GROUP *group;</div><div class='del'>-</div><div class='del'>-    Require_EC_POINT(self, point);</div><div class='del'>-    SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-    if (EC_POINT_set_to_infinity(group, point) != 1)</div><div class='del'>-        ossl_raise(cEC_POINT, "EC_POINT_set_to_infinity");</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'>- *  call-seq:</div><div class='del'>- *     point.to_bn   =&gt; OpenSSL::BN</div><div class='del'>- *</div><div class='del'>- *  See the OpenSSL documentation for EC_POINT_point2bn()</div><div class='del'>- */</div><div class='del'>-static VALUE ossl_ec_point_to_bn(VALUE self)</div><div class='del'>-{</div><div class='del'>-    EC_POINT *point;</div><div class='del'>-    VALUE bn_obj;</div><div class='del'>-    VALUE group_v = rb_iv_get(self, "@group");</div><div class='del'>-    const EC_GROUP *group;</div><div class='del'>-    point_conversion_form_t form;</div><div class='del'>-    BIGNUM *bn;</div><div class='del'>-</div><div class='del'>-    Require_EC_POINT(self, point);</div><div class='del'>-    SafeRequire_EC_GROUP(group_v, group);</div><div class='del'>-</div><div class='del'>-    form = EC_GROUP_get_point_conversion_form(group);</div><div class='del'>-</div><div class='del'>-    bn_obj = rb_obj_alloc(cBN);</div><div class='del'>-    bn = GetBNPtr(bn_obj);</div><div class='del'>-</div><div class='del'>-    if (EC_POINT_point2bn(group, point, form, bn, ossl_bn_ctx) == NULL)</div><div class='del'>-        ossl_raise(eEC_POINT, "EC_POINT_point2bn");</div><div class='del'>-</div><div class='del'>-    return bn_obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void no_copy(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    rb_undef_method(klass, "copy");</div><div class='del'>-    rb_undef_method(klass, "clone");</div><div class='del'>-    rb_undef_method(klass, "dup");</div><div class='del'>-    rb_undef_method(klass, "initialize_copy");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void Init_ossl_ec()</div><div class='del'>-{</div><div class='del'>-#ifdef DONT_NEED_RDOC_WORKAROUND</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-    mPKey = rb_define_module_under(mOSSL, "PKey");</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    eECError = rb_define_class_under(mPKey, "ECError", ePKeyError);</div><div class='del'>-</div><div class='del'>-    cEC = rb_define_class_under(mPKey, "EC", cPKey);</div><div class='del'>-    cEC_GROUP = rb_define_class_under(cEC, "Group", rb_cObject);</div><div class='del'>-    cEC_POINT = rb_define_class_under(cEC, "Point", rb_cObject);</div><div class='del'>-    eEC_GROUP = rb_define_class_under(cEC_GROUP, "Error", eOSSLError);</div><div class='del'>-    eEC_POINT = rb_define_class_under(cEC_POINT, "Error", eOSSLError);</div><div class='del'>-</div><div class='del'>-    s_GFp = rb_intern("GFp");</div><div class='del'>-    s_GF2m = rb_intern("GF2m");</div><div class='del'>-    s_GFp_simple = rb_intern("GFp_simple");</div><div class='del'>-    s_GFp_mont = rb_intern("GFp_mont");</div><div class='del'>-    s_GFp_nist = rb_intern("GFp_nist");</div><div class='del'>-    s_GF2m_simple = rb_intern("GF2m_simple");</div><div class='del'>-</div><div class='del'>-    ID_uncompressed = rb_intern("uncompressed");</div><div class='del'>-    ID_compressed = rb_intern("compressed");</div><div class='del'>-    ID_hybrid = rb_intern("hybrid");</div><div class='del'>-</div><div class='del'>-#ifdef OPENSSL_EC_NAMED_CURVE</div><div class='del'>-    rb_define_const(cEC, "NAMED_CURVE", ULONG2NUM(OPENSSL_EC_NAMED_CURVE));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cEC, "builtin_curves", ossl_s_builtin_curves, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC, "initialize", ossl_ec_key_initialize, -1);</div><div class='del'>-/* copy/dup/cmp */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC, "group", ossl_ec_key_get_group, 0);</div><div class='del'>-    rb_define_method(cEC, "group=", ossl_ec_key_set_group, 1);</div><div class='del'>-    rb_define_method(cEC, "private_key", ossl_ec_key_get_private_key, 0);</div><div class='del'>-    rb_define_method(cEC, "private_key=", ossl_ec_key_set_private_key, 1);</div><div class='del'>-    rb_define_method(cEC, "public_key", ossl_ec_key_get_public_key, 0);</div><div class='del'>-    rb_define_method(cEC, "public_key=", ossl_ec_key_set_public_key, 1);</div><div class='del'>-    rb_define_method(cEC, "private_key?", ossl_ec_key_is_private_key, 0);</div><div class='del'>-    rb_define_method(cEC, "public_key?", ossl_ec_key_is_public_key, 0);</div><div class='del'>-/*  rb_define_method(cEC, "", ossl_ec_key_get_, 0);</div><div class='del'>-    rb_define_method(cEC, "=", ossl_ec_key_set_ 1);</div><div class='del'>-    set/get enc_flags</div><div class='del'>-    set/get _conv_from</div><div class='del'>-    set/get asn1_flag (can use ruby to call self.group.asn1_flag)</div><div class='del'>-    set/get precompute_mult</div><div class='del'>-*/</div><div class='del'>-    rb_define_method(cEC, "generate_key", ossl_ec_key_generate_key, 0);</div><div class='del'>-    rb_define_method(cEC, "check_key", ossl_ec_key_check_key, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC, "dh_compute_key", ossl_ec_key_dh_compute_key, 1);</div><div class='del'>-    rb_define_method(cEC, "dsa_sign_asn1", ossl_ec_key_dsa_sign_asn1, 1);</div><div class='del'>-    rb_define_method(cEC, "dsa_verify_asn1", ossl_ec_key_dsa_verify_asn1, 2);</div><div class='del'>-/* do_sign/do_verify */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC, "to_pem", ossl_ec_key_to_pem, 0);</div><div class='del'>-    rb_define_method(cEC, "to_der", ossl_ec_key_to_der, 0);</div><div class='del'>-    rb_define_method(cEC, "to_text", ossl_ec_key_to_text, 0);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cEC_GROUP, ossl_ec_group_alloc);</div><div class='del'>-    rb_define_method(cEC_GROUP, "initialize", ossl_ec_group_initialize, -1);</div><div class='del'>-    rb_define_method(cEC_GROUP, "eql?", ossl_ec_group_eql, 1);</div><div class='del'>-    rb_define_alias(cEC_GROUP, "==", "eql?");</div><div class='del'>-/* copy/dup/cmp */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_GROUP, "generator", ossl_ec_group_get_generator, 0);</div><div class='del'>-    rb_define_method(cEC_GROUP, "set_generator", ossl_ec_group_set_generator, 3);</div><div class='del'>-    rb_define_method(cEC_GROUP, "order", ossl_ec_group_get_order, 0);</div><div class='del'>-    rb_define_method(cEC_GROUP, "cofactor", ossl_ec_group_get_cofactor, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_GROUP, "curve_name", ossl_ec_group_get_curve_name, 0);</div><div class='del'>-/*    rb_define_method(cEC_GROUP, "curve_name=", ossl_ec_group_set_curve_name, 1); */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_GROUP, "asn1_flag", ossl_ec_group_get_asn1_flag, 0);</div><div class='del'>-    rb_define_method(cEC_GROUP, "asn1_flag=", ossl_ec_group_set_asn1_flag, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_GROUP, "point_conversion_form", ossl_ec_group_get_point_conversion_form, 0);</div><div class='del'>-    rb_define_method(cEC_GROUP, "point_conversion_form=", ossl_ec_group_set_point_conversion_form, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_GROUP, "seed", ossl_ec_group_get_seed, 0);</div><div class='del'>-    rb_define_method(cEC_GROUP, "seed=", ossl_ec_group_set_seed, 1);</div><div class='del'>-</div><div class='del'>-/* get/set GFp, GF2m */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_GROUP, "degree", ossl_ec_group_get_degree, 0);</div><div class='del'>-</div><div class='del'>-/* check* */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_GROUP, "to_pem", ossl_ec_group_to_pem, 0);</div><div class='del'>-    rb_define_method(cEC_GROUP, "to_der", ossl_ec_group_to_der, 0);</div><div class='del'>-    rb_define_method(cEC_GROUP, "to_text", ossl_ec_group_to_text, 0);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cEC_POINT, ossl_ec_point_alloc);</div><div class='del'>-    rb_define_method(cEC_POINT, "initialize", ossl_ec_point_initialize, -1);</div><div class='del'>-    rb_attr(cEC_POINT, rb_intern("group"), 1, 0, 0);</div><div class='del'>-    rb_define_method(cEC_POINT, "eql?", ossl_ec_point_eql, 1);</div><div class='del'>-    rb_define_alias(cEC_POINT, "==", "eql?");</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_POINT, "infinity?", ossl_ec_point_is_at_infinity, 0);</div><div class='del'>-    rb_define_method(cEC_POINT, "on_curve?", ossl_ec_point_is_on_curve, 0);</div><div class='del'>-    rb_define_method(cEC_POINT, "make_affine!", ossl_ec_point_make_affine, 0);</div><div class='del'>-    rb_define_method(cEC_POINT, "invert!", ossl_ec_point_invert, 0);</div><div class='del'>-    rb_define_method(cEC_POINT, "set_to_infinity!", ossl_ec_point_set_to_infinity, 0);</div><div class='del'>-/* all the other methods */</div><div class='del'>-</div><div class='del'>-    rb_define_method(cEC_POINT, "to_bn", ossl_ec_point_to_bn, 0);</div><div class='del'>-</div><div class='del'>-    no_copy(cEC);</div><div class='del'>-    no_copy(cEC_GROUP);</div><div class='del'>-    no_copy(cEC_POINT);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* defined NO_EC */</div><div class='del'>-void Init_ossl_ec()</div><div class='del'>-{</div><div class='del'>-}</div><div class='del'>-#endif /* NO_EC */</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 9ac69e7ded..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_pkey_rsa.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_pkey_rsa.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,593 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     RSA.generate(size [, exponent]) -&gt; rsa</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  * +size+ is an integer representing the desired key size.  Keys smaller than 1024 should be considered insecure.</div><div class='del'>- *  * +exponent+ is an odd number normally 3, 17, or 65537.</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'>-/* why does this method exist?  why can't initialize take an optional exponent? */</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     RSA.new([size | encoded_key] [, pass]) -&gt; rsa</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  * +size+ is an integer representing the desired key size.</div><div class='del'>- *  * +encoded_key+ is a string containing PEM or DER encoded key.</div><div class='del'>- *  * +pass+ is an optional string with the password to decrypt the encoded key.</div><div class='del'>- *</div><div class='del'>- *  === Examples</div><div class='del'>- *  * RSA.new(2048) -&gt; rsa </div><div class='del'>- *  * RSA.new(File.read("rsa.pem")) -&gt; rsa</div><div class='del'>- *  * RSA.new(File.read("rsa.pem"), "mypassword") -&gt; rsa</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     rsa.public? -&gt; true</div><div class='del'>- *</div><div class='del'>- *  The return value is always true since every private key is also a public key.</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'>-     * This method should check for n and e.  BUG.</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'>- *  call-seq:</div><div class='del'>- *     rsa.private? -&gt; true | false</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     rsa.to_pem([cipher, pass]) -&gt; aString</div><div class='del'>- *</div><div class='del'>- *  === Parameters</div><div class='del'>- *  * +cipher+ is a Cipher object.</div><div class='del'>- *  * +pass+ is a string.</div><div class='del'>- *</div><div class='del'>- *  === Examples</div><div class='del'>- *  * rsa.to_pem -&gt; aString</div><div class='del'>- *  * rsa.to_pem(cipher, pass) -&gt; aString</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     rsa.to_der -&gt; aString</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_PTR(str);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     rsa.public_encrypt(string [, padding]) -&gt; aString</div><div class='del'>- *</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_LEN(buffer), RSTRING_PTR(buffer),</div><div class='del'>-				 RSTRING_PTR(str), 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'>-    rb_str_set_len(str, buf_len);</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'>- *  call-seq:</div><div class='del'>- *     rsa.public_decrypt(string [, padding]) -&gt; aString</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_LEN(buffer), RSTRING_PTR(buffer),</div><div class='del'>-				 RSTRING_PTR(str), 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'>-    rb_str_set_len(str, buf_len);</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'>- *  call-seq:</div><div class='del'>- *     rsa.private_encrypt(string [, padding]) -&gt; aString</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_LEN(buffer), RSTRING_PTR(buffer),</div><div class='del'>-				  RSTRING_PTR(str), 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'>-    rb_str_set_len(str, buf_len);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     rsa.private_decrypt(string [, padding]) -&gt; aString</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_LEN(buffer), RSTRING_PTR(buffer),</div><div class='del'>-				  RSTRING_PTR(str), 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'>-    rb_str_set_len(str, buf_len);</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'>- *  call-seq:</div><div class='del'>- *     rsa.params -&gt; hash</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'>- *  call-seq:</div><div class='del'>- *     rsa.to_text -&gt; aString</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'>- *  call-seq:</div><div class='del'>- *     rsa.public_key -&gt; aRSA</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'>-</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'>-#if 0 /* let rdoc know about mOSSL and mPKey */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-    mPKey = rb_define_module_under(mOSSL, "PKey");</div><div class='del'>-#endif</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'>-void</div><div class='del'>-Init_ossl_rsa()</div><div class='del'>-{</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 ad830fbc98..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_rand.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_rand.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,202 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     seed(str) -&gt; str</div><div class='del'>- *</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_PTR(str), RSTRING_LEN(str));</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'>- *  call-seq:</div><div class='del'>- *     add(str, entropy) -&gt; self</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_add(VALUE self, VALUE str, VALUE entropy)</div><div class='del'>-{</div><div class='del'>-    StringValue(str);</div><div class='del'>-    RAND_add(RSTRING_PTR(str), RSTRING_LEN(str), NUM2DBL(entropy));</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'>- *  call-seq:</div><div class='del'>- *     load_random_file(filename) -&gt; true</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_PTR(filename), -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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     write_random_file(filename) -&gt; true</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_PTR(filename)) == -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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     random_bytes(length) -&gt; aString</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'>-    int n = NUM2INT(len);</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, n);</div><div class='del'>-    if (!RAND_bytes(RSTRING_PTR(str), n)) {</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     pseudo_bytes(length) -&gt; aString</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'>-    int n = NUM2INT(len);</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(0, n);</div><div class='del'>-    if (!RAND_pseudo_bytes(RSTRING_PTR(str), n)) {</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     egd(filename) -&gt; true</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_PTR(filename))) {</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     egd_bytes(filename, length) -&gt; true</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'>-    long n = NUM2INT(len);</div><div class='del'>-</div><div class='del'>-    SafeStringValue(filename);</div><div class='del'>-</div><div class='del'>-    if (!RAND_egd_bytes(RSTRING_PTR(filename), n)) {</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     status? =&gt; true | false</div><div class='del'>- *</div><div class='del'>- * Return true if the PRNG has been seeded with enough data, false otherwise.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_rand_status(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return RAND_status() ? Qtrue : Qfalse;</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'>-#if 0 /* let rdoc know about mOSSL */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-#endif</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, "random_add", ossl_rand_add, 2);</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'>-    DEFMETH(mRandom, "status?", ossl_rand_status, 0)</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 ce2ae0d129..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_rand.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 01b86fec27..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ssl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_ssl.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1476 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>- * Copyright (C) 2001-2007  Technorama Ltd. &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'>-#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'>-#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 const 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'>-    "session_get_cb", "session_new_cb", "session_remove_cb",</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 const char *ossl_ssl_attr_readers[] = { "io", "context", };</div><div class='del'>-static const char *ossl_ssl_attrs[] = { "sync_close", };</div><div class='del'>-</div><div class='del'>-ID ID_callback_state;</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_set_ssl_version(VALUE self, VALUE ssl_method)</div><div class='del'>-{</div><div class='del'>-    SSL_METHOD *method = NULL;</div><div class='del'>-    const char *s;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    SSL_CTX *ctx;</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 ssl_method;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    SSLContext.new =&gt; ctx</div><div class='del'>- *    SSLContext.new(:TLSv1) =&gt; ctx</div><div class='del'>- *    SSLContext.new("SSLv23_client") =&gt; ctx</div><div class='del'>- *</div><div class='del'>- * You can get a list of valid methods with OpenSSL::SSL::SSLContext::METHODS</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'>-    int i;</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'>-    ossl_sslctx_set_ssl_version(self, ssl_method);</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'>-    rb_warning("using default DH parameters.");</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_call_session_get_cb(VALUE ary)</div><div class='del'>-{</div><div class='del'>-    VALUE ssl_obj, sslctx_obj, cb, ret;</div><div class='del'>-    </div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    ssl_obj = rb_ary_entry(ary, 0);</div><div class='del'>-</div><div class='del'>-    sslctx_obj = rb_iv_get(ssl_obj, "@context");</div><div class='del'>-    if (NIL_P(sslctx_obj)) return Qnil;</div><div class='del'>-    cb = rb_iv_get(sslctx_obj, "@session_get_cb");</div><div class='del'>-    if (NIL_P(cb)) return Qnil;</div><div class='del'>-</div><div class='del'>-    return rb_funcall(cb, rb_intern("call"), 1, ary);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* this method is currently only called for servers (in OpenSSL &lt;= 0.9.8e) */</div><div class='del'>-static SSL_SESSION *</div><div class='del'>-ossl_sslctx_session_get_cb(SSL *ssl, unsigned char *buf, int len, int *copy)</div><div class='del'>-{</div><div class='del'>-    VALUE ary, ssl_obj, ret_obj;</div><div class='del'>-    SSL_SESSION *sess;</div><div class='del'>-    void *ptr;</div><div class='del'>-    int state = 0;</div><div class='del'>-</div><div class='del'>-    OSSL_Debug("SSL SESSION get callback entered");</div><div class='del'>-    if ((ptr = SSL_get_ex_data(ssl, ossl_ssl_ex_ptr_idx)) == NULL)</div><div class='del'>-    	return NULL;</div><div class='del'>-    ssl_obj = (VALUE)ptr;</div><div class='del'>-    ary = rb_ary_new2(2);</div><div class='del'>-    rb_ary_push(ary, ssl_obj);</div><div class='del'>-    rb_ary_push(ary, rb_str_new(buf, len));</div><div class='del'>-</div><div class='del'>-    ret_obj = rb_protect((VALUE(*)_((VALUE)))ossl_call_session_get_cb, ary, &amp;state);</div><div class='del'>-    if (state) {</div><div class='del'>-        rb_ivar_set(ssl_obj, ID_callback_state, INT2NUM(state));</div><div class='del'>-        return NULL;</div><div class='del'>-    }</div><div class='del'>-    if (!rb_obj_is_instance_of(ret_obj, cSSLSession))</div><div class='del'>-        return NULL;</div><div class='del'>-</div><div class='del'>-    SafeGetSSLSession(ret_obj, sess);</div><div class='del'>-    *copy = 1;</div><div class='del'>-</div><div class='del'>-    return sess;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_call_session_new_cb(VALUE ary)</div><div class='del'>-{</div><div class='del'>-    VALUE ssl_obj, sslctx_obj, cb, ret;</div><div class='del'>-    </div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    ssl_obj = rb_ary_entry(ary, 0);</div><div class='del'>-</div><div class='del'>-    sslctx_obj = rb_iv_get(ssl_obj, "@context");</div><div class='del'>-    if (NIL_P(sslctx_obj)) return Qnil;</div><div class='del'>-    cb = rb_iv_get(sslctx_obj, "@session_new_cb");</div><div class='del'>-    if (NIL_P(cb)) return Qnil;</div><div class='del'>-</div><div class='del'>-    return rb_funcall(cb, rb_intern("call"), 1, ary);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* return 1 normal.  return 0 removes the session */</div><div class='del'>-static int</div><div class='del'>-ossl_sslctx_session_new_cb(SSL *ssl, SSL_SESSION *sess)</div><div class='del'>-{</div><div class='del'>-    VALUE ary, ssl_obj, sess_obj, ret_obj;</div><div class='del'>-    void *ptr;</div><div class='del'>-    int state = 0;</div><div class='del'>-</div><div class='del'>-    OSSL_Debug("SSL SESSION new callback entered");</div><div class='del'>-</div><div class='del'>-    if ((ptr = SSL_get_ex_data(ssl, ossl_ssl_ex_ptr_idx)) == NULL)</div><div class='del'>-    	return 1;</div><div class='del'>-    ssl_obj = (VALUE)ptr;</div><div class='del'>-    sess_obj = rb_obj_alloc(cSSLSession);</div><div class='del'>-    CRYPTO_add(&amp;sess-&gt;references, 1, CRYPTO_LOCK_SSL_SESSION);</div><div class='del'>-    DATA_PTR(sess_obj) = sess;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new2(2);</div><div class='del'>-    rb_ary_push(ary, ssl_obj);</div><div class='del'>-    rb_ary_push(ary, sess_obj);</div><div class='del'>-</div><div class='del'>-    ret_obj = rb_protect((VALUE(*)_((VALUE)))ossl_call_session_new_cb, ary, &amp;state);</div><div class='del'>-    if (state) {</div><div class='del'>-        rb_ivar_set(ssl_obj, ID_callback_state, INT2NUM(state));</div><div class='del'>-        return 0; /* what should be returned here??? */</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return RTEST(ret_obj) ? 1 : 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_call_session_remove_cb(VALUE ary)</div><div class='del'>-{</div><div class='del'>-    VALUE sslctx_obj, cb, ret;</div><div class='del'>-    </div><div class='del'>-    Check_Type(ary, T_ARRAY);</div><div class='del'>-    sslctx_obj = rb_ary_entry(ary, 0);</div><div class='del'>-</div><div class='del'>-    cb = rb_iv_get(sslctx_obj, "@session_remove_cb");</div><div class='del'>-    if (NIL_P(cb)) return Qnil;</div><div class='del'>-</div><div class='del'>-    return rb_funcall(cb, rb_intern("call"), 1, ary);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ossl_sslctx_session_remove_cb(SSL_CTX *ctx, SSL_SESSION *sess)</div><div class='del'>-{</div><div class='del'>-    VALUE ary, sslctx_obj, sess_obj, ret_obj;</div><div class='del'>-    void *ptr;</div><div class='del'>-    int state = 0;</div><div class='del'>-</div><div class='del'>-    OSSL_Debug("SSL SESSION remove callback entered");</div><div class='del'>-</div><div class='del'>-    if ((ptr = SSL_CTX_get_ex_data(ctx, ossl_ssl_ex_ptr_idx)) == NULL)</div><div class='del'>-    	return;</div><div class='del'>-    sslctx_obj = (VALUE)ptr;</div><div class='del'>-    sess_obj = rb_obj_alloc(cSSLSession);</div><div class='del'>-    CRYPTO_add(&amp;sess-&gt;references, 1, CRYPTO_LOCK_SSL_SESSION);</div><div class='del'>-    DATA_PTR(sess_obj) = sess;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new2(2);</div><div class='del'>-    rb_ary_push(ary, sslctx_obj);</div><div class='del'>-    rb_ary_push(ary, sess_obj);</div><div class='del'>-</div><div class='del'>-    ret_obj = rb_protect((VALUE(*)_((VALUE)))ossl_call_session_new_cb, ary, &amp;state);</div><div class='del'>-    if (state) {</div><div class='del'>-/*</div><div class='del'>-  the SSL_CTX is frozen, nowhere to save state.</div><div class='del'>-  there is no common accessor method to check it either.</div><div class='del'>-        rb_ivar_set(sslctx_obj, ID_callback_state, INT2NUM(state));</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'>-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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ctx.setup =&gt; Qtrue # first time</div><div class='del'>- *    ctx.setup =&gt; nil # thereafter</div><div class='del'>- *</div><div class='del'>- * This method is called automatically when a new SSLSocket is created.</div><div class='del'>- * Normally you do not need to call this method (unless you are writing an extension in C).</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'>-	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'>-    SSL_CTX_set_ex_data(ctx, ossl_ssl_ex_ptr_idx, (void*)self);</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_block_call(val, rb_intern("each"), 0, 0, 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_LEN(val); i++){</div><div class='del'>-		client_ca = GetX509CertPtr(RARRAY_PTR(val)[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_PTR(val),</div><div class='del'>-					    RSTRING_LEN(val))){</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'>-    if (RTEST(rb_iv_get(self, "@session_get_cb"))) {</div><div class='del'>-	SSL_CTX_sess_set_get_cb(ctx, ossl_sslctx_session_get_cb);</div><div class='del'>-	OSSL_Debug("SSL SESSION get callback added");</div><div class='del'>-    }</div><div class='del'>-    if (RTEST(rb_iv_get(self, "@session_new_cb"))) {</div><div class='del'>-	SSL_CTX_sess_set_new_cb(ctx, ossl_sslctx_session_new_cb);</div><div class='del'>-	OSSL_Debug("SSL SESSION new callback added");</div><div class='del'>-    }</div><div class='del'>-    if (RTEST(rb_iv_get(self, "@session_remove_cb"))) {</div><div class='del'>-	SSL_CTX_sess_set_remove_cb(ctx, ossl_sslctx_session_remove_cb);</div><div class='del'>-	OSSL_Debug("SSL SESSION remove callback added");</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ctx.ciphers =&gt; [[name, version, bits, alg_bits], ...]</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ctx.ciphers = "cipher1:cipher2:..."</div><div class='del'>- *    ctx.ciphers = [name, ...]</div><div class='del'>- *    ctx.ciphers = [[name, version, bits, alg_bits], ...]</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_LEN(v); 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_LEN(v)-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_PTR(str))) {</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ctx.session_add(session) -&gt; true | false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_session_add(VALUE self, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    SSL_SESSION *sess;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-    SafeGetSSLSession(arg, sess);</div><div class='del'>-</div><div class='del'>-    return SSL_CTX_add_session(ctx, sess) == 1 ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ctx.session_remove(session) -&gt; true | false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_session_remove(VALUE self, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    SSL_SESSION *sess;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-    SafeGetSSLSession(arg, sess);</div><div class='del'>-</div><div class='del'>-    return SSL_CTX_remove_session(ctx, sess) == 1 ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ctx.session_cache_mode -&gt; integer</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_get_session_cache_mode(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-</div><div class='del'>-    return LONG2NUM(SSL_CTX_get_session_cache_mode(ctx));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ctx.session_cache_mode=(integer) -&gt; integer</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_set_session_cache_mode(VALUE self, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-</div><div class='del'>-    SSL_CTX_set_session_cache_mode(ctx, NUM2LONG(arg));</div><div class='del'>-</div><div class='del'>-    return arg;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ctx.session_cache_size -&gt; integer</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_get_session_cache_size(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-</div><div class='del'>-    return LONG2NUM(SSL_CTX_sess_get_cache_size(ctx));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ctx.session_cache_size=(integer) -&gt; integer</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_set_session_cache_size(VALUE self, VALUE arg)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-</div><div class='del'>-    SSL_CTX_sess_set_cache_size(ctx, NUM2LONG(arg));</div><div class='del'>-</div><div class='del'>-    return arg;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ctx.session_cache_stats -&gt; Hash</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_get_session_cache_stats(VALUE self)</div><div class='del'>-{</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("cache_num")), LONG2NUM(SSL_CTX_sess_number(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("connect")), LONG2NUM(SSL_CTX_sess_connect(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("connect_good")), LONG2NUM(SSL_CTX_sess_connect_good(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("connect_renegotiate")), LONG2NUM(SSL_CTX_sess_connect_renegotiate(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("accept")), LONG2NUM(SSL_CTX_sess_accept(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("accept_good")), LONG2NUM(SSL_CTX_sess_accept_good(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("accept_renegotiate")), LONG2NUM(SSL_CTX_sess_accept_renegotiate(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("cache_hits")), LONG2NUM(SSL_CTX_sess_hits(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("cb_hits")), LONG2NUM(SSL_CTX_sess_cb_hits(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("cache_misses")), LONG2NUM(SSL_CTX_sess_misses(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("cache_full")), LONG2NUM(SSL_CTX_sess_cache_full(ctx)));</div><div class='del'>-    rb_hash_aset(hash, ID2SYM(rb_intern("timeouts")), LONG2NUM(SSL_CTX_sess_timeouts(ctx)));</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ctx.flush_sessions(time | nil) -&gt; self</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE arg1;</div><div class='del'>-    SSL_CTX *ctx;</div><div class='del'>-    time_t tm = 0;</div><div class='del'>-    int cb_state;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;arg1);</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, SSL_CTX, ctx);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(arg1)) {</div><div class='del'>-        tm = time(0);</div><div class='del'>-    } else if (rb_obj_is_instance_of(arg1, rb_cTime)) {</div><div class='del'>-        tm = NUM2LONG(rb_funcall(arg1, rb_intern("to_i"), 0));</div><div class='del'>-    } else {</div><div class='del'>-        rb_raise(rb_eArgError, "arg must be Time or nil");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    SSL_CTX_flush_sessions(ctx, tm);</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'>- * 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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    SSLSocket.new(io) =&gt; aSSLSocket</div><div class='del'>- *    SSLSocket.new(io, ctx) =&gt; aSSLSocket</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +io+ is a real ruby IO object.  Not an IO like object that responds to read/write.</div><div class='del'>- * * +ctx+ is an OpenSSLSSL::SSLContext.</div><div class='del'>- *</div><div class='del'>- * The OpenSSL::Buffering module provides additional IO methods.</div><div class='del'>- *</div><div class='del'>- * This method will freeze the SSLContext if one is provided;</div><div class='del'>- * however, session management is still allowed in the frozen SSLContext.</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'>-    rb_io_t *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(FPTR_TO_FD(fptr)));</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) (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)(), const char *funcname)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int ret, ret2;</div><div class='del'>-    VALUE cb_state;</div><div class='del'>-</div><div class='del'>-    rb_ivar_set(self, ID_callback_state, Qnil);</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((ret2 = ssl_get_error(ssl, ret))){</div><div class='del'>-	case SSL_ERROR_WANT_WRITE:</div><div class='del'>-            rb_io_wait_writable(FPTR_TO_FD(fptr));</div><div class='del'>-            continue;</div><div class='del'>-	case SSL_ERROR_WANT_READ:</div><div class='del'>-            rb_io_wait_readable(FPTR_TO_FD(fptr));</div><div class='del'>-            continue;</div><div class='del'>-	case SSL_ERROR_SYSCALL:</div><div class='del'>-	    if (errno) rb_sys_fail(funcname);</div><div class='del'>-	    ossl_raise(eSSLError, "%s SYSCALL returned=%d errno=%d state=%s", funcname, ret2, errno, SSL_state_string_long(ssl));</div><div class='del'>-	default:</div><div class='del'>-	    ossl_raise(eSSLError, "%s returned=%d errno=%d state=%s", funcname, ret2, errno, SSL_state_string_long(ssl));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    cb_state = rb_ivar_get(self, ID_callback_state);</div><div class='del'>-    if (!NIL_P(cb_state))</div><div class='del'>-        rb_jump_tag(NUM2INT(cb_state));</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'>- * call-seq:</div><div class='del'>- *    ssl.connect =&gt; self</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, "SSL_connect");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.accept =&gt; self</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, "SSL_accept");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.sysread(length) =&gt; string</div><div class='del'>- *    ssl.sysread(length, buffer) =&gt; buffer</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * * +length+ is a positive integer.</div><div class='del'>- * * +buffer+ is a string used to store the result.</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'>-    rb_io_t *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(FPTR_TO_FD(fptr));</div><div class='del'>-	for (;;){</div><div class='del'>-	    nread = SSL_read(ssl, RSTRING_PTR(str), RSTRING_LEN(str));</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(FPTR_TO_FD(fptr));</div><div class='del'>-                continue;</div><div class='del'>-	    case SSL_ERROR_WANT_READ:</div><div class='del'>-                rb_io_wait_readable(FPTR_TO_FD(fptr));</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'>-    rb_str_set_len(str, nread);</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.syswrite(string) =&gt; integer</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'>-    rb_io_t *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_PTR(str), RSTRING_LEN(str));</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(FPTR_TO_FD(fptr));</div><div class='del'>-                continue;</div><div class='del'>-	    case SSL_ERROR_WANT_READ:</div><div class='del'>-                rb_io_wait_readable(FPTR_TO_FD(fptr));</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.sysclose =&gt; nil</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.cert =&gt; cert or nil</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.peer_cert =&gt; cert or nil</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.peer_cert_chain =&gt; [cert, ...] or nil</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.cipher =&gt; [name, version, bits, alg_bits]</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.state =&gt; string</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    ssl.pending =&gt; integer</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ssl.session_reused? -&gt; true | false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_session_reused(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'>-    switch(SSL_session_reused(ssl)) {</div><div class='del'>-    case 1:	return Qtrue;</div><div class='del'>-    case 0:	return Qfalse;</div><div class='del'>-    default:	ossl_raise(eSSLError, "SSL_session_reused");</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'>- *     ssl.session = session -&gt; session</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_set_session(VALUE self, VALUE arg1)</div><div class='del'>-{</div><div class='del'>-    SSL *ssl;</div><div class='del'>-    SSL_SESSION *sess;</div><div class='del'>-</div><div class='del'>-/* why is ossl_ssl_setup delayed? */</div><div class='del'>-    ossl_ssl_setup(self);</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'>-    SafeGetSSLSession(arg1, sess);</div><div class='del'>-</div><div class='del'>-    if (SSL_set_session(ssl, sess) != 1)</div><div class='del'>-        ossl_raise(eSSLError, "SSL_set_session");</div><div class='del'>-</div><div class='del'>-    return arg1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ossl_ssl_get_verify_result(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 INT2FIX(SSL_get_verify_result(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'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-#if 0 /* let rdoc know about mOSSL */</div><div class='del'>-    mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    ID_callback_state = rb_intern("@callback_state");</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'>-    Init_ossl_ssl_session();</div><div class='del'>-</div><div class='del'>-    /* class SSLContext</div><div class='del'>-     *</div><div class='del'>-     * The following attributes are available but don't show up in rdoc.</div><div class='del'>-     * All attributes must be set before calling SSLSocket.new(io, ctx).</div><div class='del'>-     * * ssl_version, cert, key, client_ca, ca_file, ca_path, timeout,</div><div class='del'>-     * * verify_mode, verify_depth client_cert_cb, tmp_dh_callback,</div><div class='del'>-     * * session_id_context, session_add_cb, session_new_cb, session_remove_cb</div><div class='del'>-     */</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_alias(cSSLContext, "ssl_timeout", "timeout");</div><div class='del'>-    rb_define_method(cSSLContext, "initialize",  ossl_sslctx_initialize, -1);</div><div class='del'>-    rb_define_method(cSSLContext, "ssl_version=", ossl_sslctx_set_ssl_version, 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'>-    rb_define_method(cSSLContext, "setup", ossl_sslctx_setup, 0);</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    rb_define_const(cSSLContext, "SESSION_CACHE_OFF", LONG2FIX(SSL_SESS_CACHE_OFF));</div><div class='del'>-    rb_define_const(cSSLContext, "SESSION_CACHE_CLIENT", LONG2FIX(SSL_SESS_CACHE_CLIENT)); /* doesn't actually do anything in 0.9.8e */</div><div class='del'>-    rb_define_const(cSSLContext, "SESSION_CACHE_SERVER", LONG2FIX(SSL_SESS_CACHE_SERVER));</div><div class='del'>-    rb_define_const(cSSLContext, "SESSION_CACHE_BOTH", LONG2FIX(SSL_SESS_CACHE_BOTH)); /* no different than CACHE_SERVER in 0.9.8e */</div><div class='del'>-    rb_define_const(cSSLContext, "SESSION_CACHE_NO_AUTO_CLEAR", LONG2FIX(SSL_SESS_CACHE_NO_AUTO_CLEAR));</div><div class='del'>-    rb_define_const(cSSLContext, "SESSION_CACHE_NO_INTERNAL_LOOKUP", LONG2FIX(SSL_SESS_CACHE_NO_INTERNAL_LOOKUP));</div><div class='del'>-    rb_define_const(cSSLContext, "SESSION_CACHE_NO_INTERNAL_STORE", LONG2FIX(SSL_SESS_CACHE_NO_INTERNAL_STORE));</div><div class='del'>-    rb_define_const(cSSLContext, "SESSION_CACHE_NO_INTERNAL", LONG2FIX(SSL_SESS_CACHE_NO_INTERNAL));</div><div class='del'>-    rb_define_method(cSSLContext, "session_add",     ossl_sslctx_session_add, 1);</div><div class='del'>-    rb_define_method(cSSLContext, "session_remove",     ossl_sslctx_session_remove, 1);</div><div class='del'>-    rb_define_method(cSSLContext, "session_cache_mode",     ossl_sslctx_get_session_cache_mode, 0);</div><div class='del'>-    rb_define_method(cSSLContext, "session_cache_mode=",     ossl_sslctx_set_session_cache_mode, 1);</div><div class='del'>-    rb_define_method(cSSLContext, "session_cache_size",     ossl_sslctx_get_session_cache_size, 0);</div><div class='del'>-    rb_define_method(cSSLContext, "session_cache_size=",     ossl_sslctx_set_session_cache_size, 1);</div><div class='del'>-    rb_define_method(cSSLContext, "session_cache_stats",     ossl_sslctx_get_session_cache_stats, 0);</div><div class='del'>-    rb_define_method(cSSLContext, "flush_sessions",     ossl_sslctx_flush_sessions, -1);</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new2(numberof(ossl_ssl_method_tab));</div><div class='del'>-    for (i = 0; i &lt; numberof(ossl_ssl_method_tab); i++) {</div><div class='del'>-        rb_ary_push(ary, ID2SYM(rb_intern(ossl_ssl_method_tab[i].name)));</div><div class='del'>-    }</div><div class='del'>-    rb_obj_freeze(ary);</div><div class='del'>-    /* holds a list of available SSL/TLS methods */</div><div class='del'>-    rb_define_const(cSSLContext, "METHODS", ary);</div><div class='del'>-</div><div class='del'>-    /* class SSLSocket</div><div class='del'>-     *</div><div class='del'>-     * The following attributes are available but don't show up in rdoc.</div><div class='del'>-     * * io, context, sync_close</div><div class='del'>-     *</div><div class='del'>-     */</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'>-    rb_define_method(cSSLSocket, "session_reused?",    ossl_ssl_session_reused, 0);</div><div class='del'>-    rb_define_method(cSSLSocket, "session=",    ossl_ssl_set_session, 1);</div><div class='del'>-    rb_define_method(cSSLSocket, "verify_result", ossl_ssl_get_verify_result, 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'>-#if defined(SSL_OP_NO_TICKET)</div><div class='del'>-    ossl_ssl_def_const(OP_NO_TICKET);</div><div class='del'>-#endif</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 487f41216c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ssl.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_ssl.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-#define GetSSLSession(obj, sess) do { \</div><div class='del'>-	Data_Get_Struct(obj, SSL_SESSION, sess); \</div><div class='del'>-	if (!sess) { \</div><div class='del'>-		ossl_raise(rb_eRuntimeError, "SSL Session wasn't initialized."); \</div><div class='del'>-	} \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define SafeGetSSLSession(obj, sess) do { \</div><div class='del'>-	OSSL_Check_Kind(obj, cSSLSession); \</div><div class='del'>-	GetSSLSession(obj, sess); \</div><div class='del'>-} while (0)</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'>-extern VALUE cSSLSession;</div><div class='del'>-</div><div class='del'>-void Init_ossl_ssl(void);</div><div class='del'>-void Init_ossl_ssl_session(void);</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_SSL_H_ */</div><div class='del'>-</div><div class='head'>diff --git a/ext/openssl/ossl_ssl_session.c b/ext/openssl/ossl_ssl_session.c<br/>deleted file mode 100644<br/>index 63c2bbb87a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_ssl_session.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_ssl_session.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,298 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- *  Copyright (C) 2004-2007 Technorama Ltd. &lt;oss-ruby@technorama.net&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ossl.h"</div><div class='del'>-</div><div class='del'>-#define GetSSLSession(obj, sess) do { \</div><div class='del'>-	Data_Get_Struct(obj, SSL_SESSION, sess); \</div><div class='del'>-	if (!sess) { \</div><div class='del'>-		ossl_raise(rb_eRuntimeError, "SSL Session wasn't initialized."); \</div><div class='del'>-	} \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define SafeGetSSLSession(obj, sess) do { \</div><div class='del'>-	OSSL_Check_Kind(obj, cSSLSession); \</div><div class='del'>-	GetSSLSession(obj, sess); \</div><div class='del'>-} while (0)</div><div class='del'>-        </div><div class='del'>-</div><div class='del'>-VALUE cSSLSession;</div><div class='del'>-static VALUE eSSLSession;</div><div class='del'>-</div><div class='del'>-static VALUE ossl_ssl_session_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-	return Data_Wrap_Struct(klass, 0, SSL_SESSION_free, NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    Session.new(SSLSocket | string) =&gt; session</div><div class='del'>- *</div><div class='del'>- * === Parameters</div><div class='del'>- * +SSLSocket+ is an OpenSSL::SSL::SSLSocket</div><div class='del'>- * +string+ must be a DER or PEM encoded Session.</div><div class='del'>-*/</div><div class='del'>-static VALUE ossl_ssl_session_initialize(VALUE self, VALUE arg1)</div><div class='del'>-{</div><div class='del'>-	SSL_SESSION *ctx = NULL;</div><div class='del'>-	VALUE obj;</div><div class='del'>-	unsigned char *p;</div><div class='del'>-</div><div class='del'>-	if (RDATA(self)-&gt;data)</div><div class='del'>-		ossl_raise(eSSLSession, "SSL Session already initialized");</div><div class='del'>-</div><div class='del'>-	if (rb_obj_is_instance_of(arg1, cSSLSocket)) {</div><div class='del'>-		SSL *ssl;</div><div class='del'>-</div><div class='del'>-		Data_Get_Struct(arg1, SSL, ssl);</div><div class='del'>-</div><div class='del'>-		if (!ssl || (ctx = SSL_get1_session(ssl)) == NULL)</div><div class='del'>-			ossl_raise(eSSLSession, "no session available");</div><div class='del'>-	} else {</div><div class='del'>-		BIO *in = ossl_obj2bio(arg1);</div><div class='del'>-</div><div class='del'>-		ctx = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL);</div><div class='del'>-</div><div class='del'>-		if (!ctx) {</div><div class='del'>-			BIO_reset(in);</div><div class='del'>-			ctx = d2i_SSL_SESSION_bio(in, NULL);</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-		BIO_free(in);</div><div class='del'>-</div><div class='del'>-		if (!ctx)</div><div class='del'>-			ossl_raise(rb_eArgError, "unknown type");</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	/* should not happen */</div><div class='del'>-	if (ctx == NULL)</div><div class='del'>-		ossl_raise(eSSLSession, "ctx not set - internal error");</div><div class='del'>-</div><div class='del'>-	RDATA(self)-&gt;data = ctx;</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'>- * call-seq:</div><div class='del'>- *    session1 == session2 -&gt; boolean</div><div class='del'>- *</div><div class='del'>-*/</div><div class='del'>-static VALUE ossl_ssl_session_eq(VALUE val1, VALUE val2)</div><div class='del'>-{</div><div class='del'>-	SSL_SESSION *ctx1, *ctx2;</div><div class='del'>-</div><div class='del'>-	GetSSLSession(val1, ctx1);</div><div class='del'>-	SafeGetSSLSession(val2, ctx2);</div><div class='del'>-</div><div class='del'>-	switch (SSL_SESSION_cmp(ctx1, ctx2)) {</div><div class='del'>-	case 0:		return Qtrue;</div><div class='del'>-	default:	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'>- *    session.time -&gt; Time</div><div class='del'>- *</div><div class='del'>-*/</div><div class='del'>-static VALUE ossl_ssl_session_get_time(VALUE self)</div><div class='del'>-{</div><div class='del'>-	SSL_SESSION *ctx;</div><div class='del'>-	time_t t;</div><div class='del'>-</div><div class='del'>-	GetSSLSession(self, ctx);</div><div class='del'>-</div><div class='del'>-	t = SSL_SESSION_get_time(ctx);</div><div class='del'>-</div><div class='del'>-	if (t == 0)</div><div class='del'>-		return Qnil;</div><div class='del'>-</div><div class='del'>-	return rb_funcall(rb_cTime, rb_intern("at"), 1, LONG2NUM(t));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    session.timeout -&gt; integer</div><div class='del'>- *</div><div class='del'>- * How long until the session expires in seconds.</div><div class='del'>- *</div><div class='del'>-*/</div><div class='del'>-static VALUE ossl_ssl_session_get_timeout(VALUE self)</div><div class='del'>-{</div><div class='del'>-	SSL_SESSION *ctx;</div><div class='del'>-	time_t t;</div><div class='del'>-</div><div class='del'>-	GetSSLSession(self, ctx);</div><div class='del'>-</div><div class='del'>-	t = SSL_SESSION_get_timeout(ctx);</div><div class='del'>-</div><div class='del'>-	return ULONG2NUM(t);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define SSLSESSION_SET_TIME(func)						\</div><div class='del'>-	static VALUE ossl_ssl_session_set_##func(VALUE self, VALUE time_v)	\</div><div class='del'>-	{									\</div><div class='del'>-		SSL_SESSION *ctx;						\</div><div class='del'>-		time_t t;							\</div><div class='del'>-										\</div><div class='del'>-		GetSSLSession(self, ctx);					\</div><div class='del'>-										\</div><div class='del'>-		if (rb_obj_is_instance_of(time_v, rb_cTime)) {			\</div><div class='del'>-			time_v = rb_funcall(time_v, rb_intern("to_i"), 0);	\</div><div class='del'>-		} else if (FIXNUM_P(time_v)) {					\</div><div class='del'>-			;							\</div><div class='del'>-		} else {							\</div><div class='del'>-			rb_raise(rb_eArgError, "unknown type");			\</div><div class='del'>-		}								\</div><div class='del'>-										\</div><div class='del'>-		t = NUM2ULONG(time_v);						\</div><div class='del'>-										\</div><div class='del'>-		SSL_SESSION_set_##func(ctx, t);					\</div><div class='del'>-										\</div><div class='del'>-		return ossl_ssl_session_get_##func(self);			\</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-SSLSESSION_SET_TIME(time)</div><div class='del'>-SSLSESSION_SET_TIME(timeout)</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SSL_SESSION_GET_ID</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    session.id -&gt; aString</div><div class='del'>- *</div><div class='del'>- * Returns the Session ID.</div><div class='del'>-*/</div><div class='del'>-static VALUE ossl_ssl_session_get_id(VALUE self)</div><div class='del'>-{</div><div class='del'>-	SSL_SESSION *ctx;</div><div class='del'>-	const unsigned char *p = NULL;</div><div class='del'>-	unsigned int i = 0;</div><div class='del'>-</div><div class='del'>-	GetSSLSession(self, ctx);</div><div class='del'>-</div><div class='del'>-	p = SSL_SESSION_get_id(ctx, &amp;i);</div><div class='del'>-</div><div class='del'>-	return rb_str_new((const char *) p, i);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    session.to_der -&gt; aString</div><div class='del'>- *</div><div class='del'>- * Returns an ASN1 encoded String that contains the Session object.</div><div class='del'>-*/</div><div class='del'>-static VALUE ossl_ssl_session_to_der(VALUE self)</div><div class='del'>-{</div><div class='del'>-	SSL_SESSION *ctx;</div><div class='del'>-	unsigned char buf[1024*10], *p;</div><div class='del'>-	int len;</div><div class='del'>-</div><div class='del'>-	GetSSLSession(self, ctx);</div><div class='del'>-</div><div class='del'>-	p = buf;</div><div class='del'>-	len = i2d_SSL_SESSION(ctx, &amp;p);</div><div class='del'>-</div><div class='del'>-	if (len &lt;= 0)</div><div class='del'>-		ossl_raise(eSSLSession, "i2d_SSL_SESSION");</div><div class='del'>-	else if (len &gt;= sizeof(buf))</div><div class='del'>-		ossl_raise(eSSLSession, "i2d_SSL_SESSION too large");</div><div class='del'>-</div><div class='del'>-	return rb_str_new((const char *) p, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    session.to_pem -&gt; String</div><div class='del'>- *</div><div class='del'>- * Returns a PEM encoded String that contains the Session object.</div><div class='del'>-*/</div><div class='del'>-static VALUE ossl_ssl_session_to_pem(VALUE self)</div><div class='del'>-{</div><div class='del'>-	SSL_SESSION *ctx;</div><div class='del'>-	BIO *out;</div><div class='del'>-	BUF_MEM *buf;</div><div class='del'>-	VALUE str;</div><div class='del'>-	int i;</div><div class='del'>-         </div><div class='del'>-	GetSSLSession(self, ctx);</div><div class='del'>-</div><div class='del'>-	if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-		ossl_raise(eSSLSession, "BIO_s_mem()");</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!(i=PEM_write_bio_SSL_SESSION(out, ctx))) {</div><div class='del'>-		BIO_free(out);</div><div class='del'>-		ossl_raise(eSSLSession, "SSL_SESSION_print()");</div><div class='del'>-	}</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    session.to_text -&gt; String</div><div class='del'>- *</div><div class='del'>- * Shows everything in the Session object.</div><div class='del'>-*/</div><div class='del'>-static VALUE ossl_ssl_session_to_text(VALUE self)</div><div class='del'>-{</div><div class='del'>-	SSL_SESSION *ctx;</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'>-	GetSSLSession(self, ctx);</div><div class='del'>-</div><div class='del'>-	if (!(out = BIO_new(BIO_s_mem()))) {</div><div class='del'>-		ossl_raise(eSSLSession, "BIO_s_mem()");</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (!SSL_SESSION_print(out, ctx)) {</div><div class='del'>-		BIO_free(out);</div><div class='del'>-		ossl_raise(eSSLSession, "SSL_SESSION_print()");</div><div class='del'>-	}</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'>-void Init_ossl_ssl_session(void)</div><div class='del'>-{</div><div class='del'>-#if 0 /* let rdoc know about mOSSL */</div><div class='del'>-	mOSSL = rb_define_module("OpenSSL");</div><div class='del'>-	mSSL = rb_define_module_under(mOSSL, "SSL");</div><div class='del'>-#endif</div><div class='del'>-	cSSLSession = rb_define_class_under(mSSL, "Session", rb_cObject);</div><div class='del'>-	eSSLSession = rb_define_class_under(cSSLSession, "SessionError", eOSSLError);</div><div class='del'>-</div><div class='del'>-	rb_define_alloc_func(cSSLSession, ossl_ssl_session_alloc);</div><div class='del'>-	rb_define_method(cSSLSession, "initialize", ossl_ssl_session_initialize, 1);</div><div class='del'>-</div><div class='del'>-	rb_define_method(cSSLSession, "==", ossl_ssl_session_eq, 1);</div><div class='del'>-</div><div class='del'>-	rb_define_method(cSSLSession, "time", ossl_ssl_session_get_time, 0);</div><div class='del'>-	rb_define_method(cSSLSession, "time=", ossl_ssl_session_set_time, 1);</div><div class='del'>-	rb_define_method(cSSLSession, "timeout", ossl_ssl_session_get_timeout, 0);</div><div class='del'>-	rb_define_method(cSSLSession, "timeout=", ossl_ssl_session_set_timeout, 1);</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SSL_SESSION_GET_ID</div><div class='del'>-	rb_define_method(cSSLSession, "id", ossl_ssl_session_get_id, 0);</div><div class='del'>-#else</div><div class='del'>-	rb_undef_method(cSSLSession, "id");</div><div class='del'>-#endif</div><div class='del'>-	rb_define_method(cSSLSession, "to_der", ossl_ssl_session_to_der, 0);</div><div class='del'>-	rb_define_method(cSSLSession, "to_pem", ossl_ssl_session_to_pem, 0);</div><div class='del'>-	rb_define_method(cSSLSession, "to_text", ossl_ssl_session_to_text, 0);</div><div class='del'>-}</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 63878e0d8e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_version.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 fd1d9b6c7e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 1a43569073..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 ca1c59aba9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509attr.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_x509attr.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,273 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    Attribute.new(oid [, value]) =&gt; attr</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_PTR(oid);</div><div class='del'>-	if(!d2i_X509_ATTRIBUTE((X509_ATTRIBUTE**)&amp;DATA_PTR(self),</div><div class='del'>-			       &amp;p, RSTRING_LEN(oid))){</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    attr.oid = string =&gt; string</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    attr.oid =&gt; string</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    attr.value = asn1 =&gt; asn1</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    attr.value =&gt; asn1</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_PTR(str);</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_PTR(str);</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    attr.to_der =&gt; string</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_PTR(str);</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'>-    rb_str_set_len(str, p - (unsigned char*)RSTRING_PTR(str)); </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 b97f27ffa9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509cert.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_x509cert.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,764 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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_PTR(filename), "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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    Certificate.new =&gt; cert</div><div class='del'>- *    Certificate.new(string) =&gt; cert</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.to_der =&gt; string</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_PTR(str);</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.to_pem =&gt; string</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.to_text =&gt; string</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.version =&gt; integer</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.version = integer =&gt; integer</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.serial =&gt; integer</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.serial = integer =&gt; integer</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.signature_algorithm =&gt; string</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.subject =&gt; name</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.subject = name =&gt; name</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.issuer =&gt; name</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.issuer = name =&gt; name</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.not_before =&gt; time</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.not_before = time =&gt; time</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.not_after =&gt; time</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.not_before = time =&gt; time</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.public_key =&gt; key</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.public_key = key =&gt; key</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.sign(key, digest) =&gt; self</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'>- * call-seq:</div><div class='del'>- *    cert.verify(key) =&gt; true | false</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'>- * call-seq:</div><div class='del'>- *    cert.check_private_key(key)</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'>- * call-seq:</div><div class='del'>- *    cert.extensions =&gt; [extension...]</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'>- * call-seq:</div><div class='del'>- *    cert.extensions = [ext...] =&gt; [ext...]</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_LEN(ary); i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY_PTR(ary)[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_LEN(ary); i++) {</div><div class='del'>-	ext = DupX509ExtPtr(RARRAY_PTR(ary)[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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    cert.add_extension(extension) =&gt; extension</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 be9ddacf48..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509crl.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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_LEN(ary); i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY_PTR(ary)[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_LEN(ary); i++) {</div><div class='del'>-	rev = DupX509RevokedPtr(RARRAY_PTR(ary)[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_LEN(ary); i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY_PTR(ary)[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_LEN(ary); i++) {</div><div class='del'>-	ext = DupX509ExtPtr(RARRAY_PTR(ary)[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 aa9366f901..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509ext.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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_PTR(oid));</div><div class='del'>-    if(!nid) nid = OBJ_sn2nid(RSTRING_PTR(oid));</div><div class='del'>-    if(!nid) ossl_raise(eX509ExtError, "unknown OID `%s'", RSTRING_PTR(oid));</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_PTR(valstr));</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_PTR(valstr));</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_PTR(oid), RSTRING_PTR(value));</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_PTR(oid);</div><div class='del'>-	if(!d2i_X509_EXTENSION((X509_EXTENSION**)&amp;DATA_PTR(self),</div><div class='del'>-			       &amp;p, RSTRING_LEN(oid)))</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_LEN(data))))</div><div class='del'>-	ossl_raise(eX509ExtError, "malloc error");</div><div class='del'>-    memcpy(s, RSTRING_PTR(data), RSTRING_LEN(data));</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_LEN(data))){</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_PTR(str);</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 b4434d2a34..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509name.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_x509name.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,372 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    X509::Name.new =&gt; name</div><div class='del'>- *    X509::Name.new(string) =&gt; name</div><div class='del'>- *    X509::Name.new(dn) =&gt; name</div><div class='del'>- *    X509::Name.new(dn, template) =&gt; name</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_block_call(tmp, rb_intern("each"), 0, 0, 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_PTR(str);</div><div class='del'>-	    if(!d2i_X509_NAME((X509_NAME**)&amp;DATA_PTR(self), &amp;p, RSTRING_LEN(str))){</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    name.add_entry(oid, value [, type]) =&gt; self</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_PTR(oid), NUM2INT(type),</div><div class='del'>-		RSTRING_PTR(value), RSTRING_LEN(value), -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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    name.to_s =&gt; string</div><div class='del'>- *    name.to_s(integer) =&gt; string</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    name.to_a =&gt; [[name, data, type], ...]</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    name.hash =&gt; integer</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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    name.to_der =&gt; string</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_PTR(str);</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 13a42dddaf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509req.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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_PTR(str);</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_LEN(ary); i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY_PTR(ary)[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_LEN(ary); i++) {</div><div class='del'>-	item = RARRAY_PTR(ary)[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 d0f816bad4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509revoked.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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_LEN(ary); i++) {</div><div class='del'>-	OSSL_Check_Kind(RARRAY_PTR(ary)[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_LEN(ary); i++) {</div><div class='del'>-	item = RARRAY_PTR(ary)[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 769ce8a91a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ossl_x509store.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ossl_x509store.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,624 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    X509::Store.new =&gt; store</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'>-/* BUG: This method takes any number of arguments but appears to ignore them. */</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_PTR(file);</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_PTR(dir);</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, NUM2INT(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'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    storectx.time = time =&gt; time</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 64b76f26b4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/openssl/ruby_missing.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/openssl/ruby_missing.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,41 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * $Id$</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 _OSSL_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'>-</div><div class='del'>-#ifndef GetReadFile</div><div class='del'>-#define FPTR_TO_FD(fptr) (fptr-&gt;fd)</div><div class='del'>-#else</div><div class='del'>-#define FPTR_TO_FD(fptr) (fileno(GetReadFile(fptr)))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_RB_IO_T</div><div class='del'>-#define rb_io_t OpenFile</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_RB_STR_SET_LEN</div><div class='del'>-/* these methods should probably be backported to 1.8 */</div><div class='del'>-#define rb_str_set_len(str, length) do {	\</div><div class='del'>-	RSTRING(str)-&gt;ptr[length] = 0;		\</div><div class='del'>-	RSTRING(str)-&gt;len = length;		\</div><div class='del'>-} while(0)</div><div class='del'>-#endif /* ! HAVE_RB_STR_SET_LEN */</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_RB_BLOCK_CALL</div><div class='del'>-/* the openssl module doesn't use arg[3-4] and arg2 is always rb_each */</div><div class='del'>-#define rb_block_call(arg1, arg2, arg3, arg4, arg5, arg6) rb_iterate(rb_each, arg1, arg5, arg6)</div><div class='del'>-#endif /* ! HAVE_RB_BLOCK_CALL */</div><div class='del'>-</div><div class='del'>-#endif /* _OSSL_RUBY_MISSING_H_ */</div><div class='head'>diff --git a/ext/pty/.cvsignore b/ext/pty/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/.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/pty/README b/ext/pty/README<br/>deleted file mode 100644<br/>index 42c7d4f891..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +0,0 @@</div><div class='del'>-pty extension version 0.3 by A.ito</div><div class='del'>-</div><div class='del'>-1. Introduction</div><div class='del'>-</div><div class='del'>-This extension module adds ruby a functionality to execute an </div><div class='del'>-arbitrary command through pseudo tty (pty).</div><div class='del'>-</div><div class='del'>-2. Install</div><div class='del'>-</div><div class='del'>-Follow the instruction below.</div><div class='del'>-</div><div class='del'>-(1) Execute</div><div class='del'>-</div><div class='del'>-      ruby extconf.rb</div><div class='del'>-</div><div class='del'>-    then Makefile is generated.</div><div class='del'>-</div><div class='del'>-(3) Do make; make install.</div><div class='del'>-</div><div class='del'>-3. What you can do</div><div class='del'>-</div><div class='del'>-This extension module defines a module named PTY, which contains</div><div class='del'>-following module fungtions:</div><div class='del'>-</div><div class='del'>-   getpty(command)</div><div class='del'>-   spawn(command)</div><div class='del'>-</div><div class='del'>-      This function reserves a pty, executes command over the pty </div><div class='del'>-      and returns an array. The return value is an array with three</div><div class='del'>-      elements. The first element in the array is for reading and the </div><div class='del'>-      second for writing. The third element is the process ID of the</div><div class='del'>-      child process. If this function is called with an iterator block,</div><div class='del'>-      the array is passed to the block as block parameters, and the</div><div class='del'>-      function itself returns nil.</div><div class='del'>-</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='del'>-</div><div class='del'>-   protect_signal</div><div class='del'>-   reset_signal</div><div class='del'>-</div><div class='del'>-      These functions are obsolete in this version of pty.</div><div class='del'>-</div><div class='del'>-4. License</div><div class='del'>-</div><div class='del'>-(C) Copyright 1998 by Akinori Ito.</div><div class='del'>-</div><div class='del'>-This software may be redistributed freely for this purpose, in full </div><div class='del'>-or in part, provided that this entire copyright notice is included </div><div class='del'>-on any copies of this software and applications and derivations thereof.</div><div class='del'>-</div><div class='del'>-This software is provided on an "as is" basis, without warranty of any</div><div class='del'>-kind, either expressed or implied, as to any matter including, but not</div><div class='del'>-limited to warranty of fitness of purpose, or merchantability, or</div><div class='del'>-results obtained from use of this software.</div><div class='del'>-</div><div class='del'>-5. Bug report</div><div class='del'>-</div><div class='del'>-Please feel free to send E-mail to</div><div class='del'>-</div><div class='del'>-   aito@ei5sun.yz.yamagata-u.ac.jp</div><div class='del'>-</div><div class='del'>-for any bug report, opinion, contribution, etc.</div><div class='head'>diff --git a/ext/pty/README.expect b/ext/pty/README.expect<br/>deleted file mode 100644<br/>index fddbb6fdad..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/README.expect?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/README.expect</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-	README for expect</div><div class='del'>-		by A. Ito, 28 October, 1998</div><div class='del'>-</div><div class='del'>-	Expect library adds IO class a method called expect(), which</div><div class='del'>-does similar act to tcl's expect extension. </div><div class='del'>-</div><div class='del'>-The usage of the method is:</div><div class='del'>-</div><div class='del'>-   IO#expect(pattern,timeout=9999999)</div><div class='del'>-</div><div class='del'>-where `pattern' is an instance of String or Regexp and `timeout'</div><div class='del'>-is Fixnum, which can be omitted. </div><div class='del'>-	When the method is called without block, it waits until the</div><div class='del'>-input which matches the pattern is obtained from the IO or the time</div><div class='del'>-specified as the timeout passes. When the pattern is obtained from the</div><div class='del'>-IO, the method returns an array. The first element of the array is the</div><div class='del'>-entire string obtained from the IO until the pattern matches. The</div><div class='del'>-following elements indicates the specific pattern which matched to the</div><div class='del'>-anchor in the regular expression. If the method ends because of</div><div class='del'>-timeout, it returns nil. </div><div class='del'>- 	When the method is called with block, the array is passed as</div><div class='del'>-the block parameter.</div><div class='head'>diff --git a/ext/pty/README.expect.ja b/ext/pty/README.expect.ja<br/>deleted file mode 100644<br/>index db84695ee5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/README.expect.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/README.expect.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +0,0 @@</div><div class='del'>-	README for expect</div><div class='del'>-		by A. Ito, 28 October, 1998</div><div class='del'>-</div><div class='del'>-  Expect¥é¥¤¥Ö¥é¥ê¤Ï¡¤tcl ¤Î expect ¥Ñ¥Ã¥±¡¼¥¸¤È»÷¤¿¤è¤¦¤Êµ¡Ç½¤ò</div><div class='del'>-IO¥¯¥é¥¹¤ËÄÉ²Ã¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-  ÄÉ²Ã¤µ¤ì¤ë¥á¥½¥Ã¥É¤Î»È¤¤Êý¤Ï¼¡¤ÎÄÌ¤ê¤Ç¤¹¡¥</div><div class='del'>-</div><div class='del'>-   IO#expect(pattern,timeout=9999999)</div><div class='del'>-</div><div class='del'>-pattern ¤Ï String ¤« Regexp ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¡¤timeout ¤Ï Fixnum</div><div class='del'>-¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ç¤¹¡¥timeout ¤Ï¾ÊÎ¬¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-  ¤³¤Î¥á¥½¥Ã¥É¤¬¥Ö¥í¥Ã¥¯¤Ê¤·¤Ç¸Æ¤Ð¤ì¤¿¾ì¹ç¡¤¤Þ¤º¥ì¥·¡¼¥Ð¤Ç¤¢¤ë</div><div class='del'>-IO¥ª¥Ö¥¸¥§¥¯¥È¤«¤é pattern ¤Ë¥Þ¥Ã¥Á¤¹¤ë¥Ñ¥¿¡¼¥ó¤¬ÆÉ¤ß¤³¤Þ¤ì¤ë</div><div class='del'>-¤Þ¤ÇÂÔ¤Á¤Þ¤¹¡¥¥Ñ¥¿¡¼¥ó¤¬ÆÀ¤é¤ì¤¿¤é¡¤¤½¤Î¥Ñ¥¿¡¼¥ó¤Ë´Ø¤¹¤ëÇÛÎó¤ò</div><div class='del'>-ÊÖ¤·¤Þ¤¹¡¥ÇÛÎó¤ÎºÇ½é¤ÎÍ×ÁÇ¤Ï¡¤pattern ¤Ë¥Þ¥Ã¥Á¤¹¤ë¤Þ¤Ç¤ËÆÉ¤ß¤³</div><div class='del'>-¤Þ¤ì¤¿ÆâÍÆ¤ÎÊ¸»úÎó¤Ç¤¹¡¥2ÈÖÌÜ°Ê¹ß¤ÎÍ×ÁÇ¤Ï¡¤pattern ¤ÎÀµµ¬É½¸½</div><div class='del'>-¤ÎÃæ¤Ë¥¢¥ó¥«¡¼¤¬¤¢¤Ã¤¿¾ì¹ç¤Ë¡¤¤½¤Î¥¢¥ó¥«¡¼¤Ë¥Þ¥Ã¥Á¤¹¤ëÉôÊ¬¤Ç¤¹¡¥</div><div class='del'>-¤â¤·¥¿¥¤¥à¥¢¥¦¥È¤¬µ¯¤­¤¿¾ì¹ç¤Ï¡¤¤³¤Î¥á¥½¥Ã¥É¤Ïnil¤òÊÖ¤·¤Þ¤¹¡¥</div><div class='del'>-  ¤³¤Î¥á¥½¥Ã¥É¤¬¥Ö¥í¥Ã¥¯ÉÕ¤­¤Ç¸Æ¤Ð¤ì¤¿¾ì¹ç¤Ë¤Ï¡¤¥Þ¥Ã¥Á¤·¤¿Í×ÁÇ¤Î</div><div class='del'>-ÇÛÎó¤¬¥Ö¥í¥Ã¥¯°ú¿ô¤È¤·¤ÆÅÏ¤µ¤ì¡¤¥Ö¥í¥Ã¥¯¤¬É¾²Á¤µ¤ì¤Þ¤¹¡¥</div><div class='head'>diff --git a/ext/pty/README.ja b/ext/pty/README.ja<br/>deleted file mode 100644<br/>index 5ae4fb06a0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/README.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/README.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,89 +0,0 @@</div><div class='del'>-pty ³ÈÄ¥¥â¥¸¥å¡¼¥ë version 0.3 by A.ito</div><div class='del'>-</div><div class='del'>-1. ¤Ï¤¸¤á¤Ë</div><div class='del'>-</div><div class='del'>-¤³¤Î³ÈÄ¥¥â¥¸¥å¡¼¥ë¤Ï¡¤²¾ÁÛtty (pty) ¤òÄÌ¤·¤ÆÅ¬Åö¤Ê¥³¥Þ¥ó¥É¤ò</div><div class='del'>-¼Â¹Ô¤¹¤ëµ¡Ç½¤ò ruby ¤ËÄó¶¡¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-2. ¥¤¥ó¥¹¥È¡¼¥ë</div><div class='del'>-</div><div class='del'>-¼¡¤Î¤è¤¦¤Ë¤·¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-(1)  ruby extconf.rb</div><div class='del'>-</div><div class='del'>-    ¤ò¼Â¹Ô¤¹¤ë¤È Makefile ¤¬À¸À®¤µ¤ì¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-(2) make; make install ¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-3. ²¿¤¬¤Ç¤­¤ë¤«</div><div class='del'>-</div><div class='del'>-¤³¤Î³ÈÄ¥¥â¥¸¥å¡¼¥ë¤Ï¡¤PTY ¤È¤¤¤¦¥â¥¸¥å¡¼¥ë¤òÄêµÁ¤·¤Þ¤¹¡¥¤½¤ÎÃæ</div><div class='del'>-¤Ë¤Ï¡¤¼¡¤Î¤è¤¦¤Ê¥â¥¸¥å¡¼¥ë´Ø¿ô¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-   getpty(command)</div><div class='del'>-   spawn(command)</div><div class='del'>-</div><div class='del'>-      ¤³¤Î´Ø¿ô¤Ï¡¤²¾ÁÛtty¤ò³ÎÊÝ¤·¡¤»ØÄê¤µ¤ì¤¿¥³¥Þ¥ó¥É¤ò¤½¤Î²¾ÁÛtty</div><div class='del'>-      ¤Î¸þ¤³¤¦¤Ç¼Â¹Ô¤·¡¤ÇÛÎó¤òÊÖ¤·¤Þ¤¹¡¥Ìá¤êÃÍ¤Ï3¤Ä¤ÎÍ×ÁÇ¤«¤é¤Ê¤ë</div><div class='del'>-      ÇÛÎó¤Ç¤¹¡¥ºÇ½é¤ÎÍ×ÁÇ¤Ï²¾ÁÛtty¤«¤éÆÉ¤ß½Ð¤¹¤¿¤á¤ÎIO¥ª¥Ö¥¸¥§¥¯¥È¡¤</div><div class='del'>-      2ÈÖÌÜ¤Ï½ñ¤­¤³¤à¤¿¤á¤ÎIO¥ª¥Ö¥¸¥§¥¯¥È¡¤3ÈÖÌÜ¤Ï»Ò¥×¥í¥»¥¹¤Î¥×¥í</div><div class='del'>-      ¥»¥¹ID¤Ç¤¹¡¥¤³¤Î´Ø¿ô¤¬¥¤¥Æ¥ì¡¼¥¿¤È¤·¤Æ¸Æ¤Ð¤ì¤¿¾ì¹ç¡¤¤³¤ì¤é¤Î</div><div class='del'>-      Í×ÁÇ¤Ï¥Ö¥í¥Ã¥¯¥Ñ¥é¥á¡¼¥¿¤È¤·¤ÆÅÏ¤µ¤ì¡¤´Ø¿ô¼«ÂÎ¤Ïnil¤òÊÖ¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-      ¤³¤Î´Ø¿ô¤Ë¤è¤Ã¤Æºî¤é¤ì¤¿¥µ¥Ö¥×¥í¥»¥¹¤¬Æ°¤¤¤Æ¤¤¤ë´Ö¡¤»Ò¥×¥í¥»¥¹</div><div class='del'>-      ¤Î¾õÂÖ¤ò´Æ»ë¤¹¤ë¤¿¤á¤Ë SIGCHLD ¥·¥°¥Ê¥ë¤òÊáÂª¤·¤Þ¤¹¡¥»Ò¥×¥í¥»¥¹</div><div class='del'>-      ¤¬½ªÎ»¤·¤¿¤êÄä»ß¤·¤¿¾ì¹ç¤Ë¤Ï¡¤Îã³°¤¬È¯À¸¤·¤Þ¤¹¡¥¤³¤Î´Ö¡¤¤¹¤Ù¤Æ¤Î</div><div class='del'>-      SIGCHLD ¤¬ PTY ¥â¥¸¥å¡¼¥ë¤Î¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ËÊáÂª¤µ¤ì¤ë¤Î¤Ç¡¤</div><div class='del'>-      ¥µ¥Ö¥×¥í¥»¥¹¤òÀ¸À®¤¹¤ëÂ¾¤Î´Ø¿ô(system() ¤È¤« IO.popen()¤Ê¤É)¤ò</div><div class='del'>-      »È¤¦¤È¡¤Í½´ü¤·¤Ê¤¤Îã³°¤¬È¯À¸¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡¥¤³¤ì¤òËÉ¤°¤¿¤á</div><div class='del'>-      ¤Ë¤Ï¡¤²¼µ­¤Îprotect_signal()¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-      ¤³¤Î´Ø¿ô¤¬¥Ö¥í¥Ã¥¯¥Ñ¥é¥á¡¼¥¿ÉÕ¤­¤Ç¸Æ¤Ð¤ì¤¿¾ì¹ç¤Ë¤Ï¡¤¤½¤Î¥Ö¥í¥Ã¥¯</div><div class='del'>-      ¤ÎÃæ¤Ç¤Î¤ß SIGCHLD ¤¬ÊáÂª¤µ¤ì¤Þ¤¹¡¥¤·¤¿¤¬¤Ã¤Æ¡¤¥Ö¥í¥Ã¥¯¥Ñ¥é¥á¡¼¥¿</div><div class='del'>-      ¤È¤·¤ÆÅÏ¤µ¤ì¤¿IO¥ª¥Ö¥¸¥§¥¯¥È¤ò¡¤¥Ö¥í¥Ã¥¯¤Î³°¤Ë»ý¤Á½Ð¤·¤Æ»È¤¦¤Î</div><div class='del'>-      ¤Ï´«¤á¤é¤ì¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-   protect_signal</div><div class='del'>-</div><div class='del'>-      ¤³¤Î´Ø¿ô¤Ï¥¤¥Æ¥ì¡¼¥¿¤Ç¤¹¡¥¤³¤³¤Ç»ØÄê¤µ¤ì¤¿¥Ö¥í¥Ã¥¯¤ÎÃæ¤Ç¤Ï¡¤</div><div class='del'>-      »Ò¥×¥í¥»¥¹¤¬½ªÎ»¤·¤Æ¤âÎã³°¤òÈ¯À¸¤·¤Þ¤»¤ó¡¥¤³¤Î´Ø¿ô¤ò»È¤¦¤³¤È¤Ç¡¤</div><div class='del'>-      PTY¤Î»Ò¥×¥í¥»¥¹¤¬Æ°¤¤¤Æ¤¤¤ë´Ö¤Ç¤â¡¤system()¤ä IO.popen()¤Ê¤É¤Î</div><div class='del'>-      ´Ø¿ô¤ò°ÂÁ´¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥Îã¤¨¤Ð¡¤</div><div class='del'>-</div><div class='del'>-        PTY.spawn("command_foo") do |r,w|</div><div class='del'>-          ...</div><div class='del'>-          ...</div><div class='del'>-          PTY.protect_signal do</div><div class='del'>-            system "some other commands"</div><div class='del'>-          end</div><div class='del'>-          ...</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      ¤³¤Î¤è¤¦¤Êµ­½Ò¤Ë¤è¤ê¡¤"some other commands" ¤¬½ªÎ»¤·¤¿¤È¤­¤Ë</div><div class='del'>-      Îã³°¤¬È¯À¸¤¹¤ë¤Î¤òËÉ¤²¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-    reset_signal</div><div class='del'>-</div><div class='del'>-      PTY ¤Î»Ò¥×¥í¥»¥¹¤¬Æ°¤¤¤Æ¤¤¤Æ¤â¡¤¤½¤Î¥×¥í¥»¥¹¤Î½ªÎ»»þ¤ËÎã³°¤¬È¯À¸</div><div class='del'>-      ¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-4. ÍøÍÑ¤Ë¤Ä¤¤¤Æ</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'>-</div><div class='del'>-¤³¤Î¥×¥í¥°¥é¥à¤ÎÍøÍÑ¡¦ÇÛÉÛ¤½¤ÎÂ¾¤³¤Î¥×¥í¥°¥é¥à¤Ë´Ø·¸¤¹¤ë¹Ô°Ù¤Ë¤è</div><div class='del'>-¤Ã¤ÆÀ¸¤¸¤¿¤¤¤«¤Ê¤ëÂ»³²¤ËÂÐ¤·¤Æ¤â¡¤ºî¼Ô¤Ï°ìÀÚÀÕÇ¤¤òÉé¤¤¤Þ¤»¤ó¡¥</div><div class='del'>-</div><div class='del'>-5. ¥Ð¥°Êó¹ðÅù</div><div class='del'>-</div><div class='del'>-¥Ð¥°¥ì¥Ý¡¼¥È¤Ï´¿·Þ¤·¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-	aito@ei5sun.yz.yamagata-u.ac.jp</div><div class='del'>-</div><div class='del'>-¤Þ¤ÇÅÅ»Ò¥á¡¼¥ë¤Ç¥Ð¥°¥ì¥Ý¡¼¥È¤ò¤ªÁ÷¤ê¤¯¤À¤µ¤¤¡¥</div><div class='head'>diff --git a/ext/pty/depend b/ext/pty/depend<br/>deleted file mode 100644<br/>index 888be6c301..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-pty.o: pty.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/pty/expect_sample.rb b/ext/pty/expect_sample.rb<br/>deleted file mode 100644<br/>index 2a2e29f866..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/expect_sample.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/expect_sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,48 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# sample program of expect.rb</div><div class='del'>-#</div><div class='del'>-#  by A. Ito</div><div class='del'>-#</div><div class='del'>-#  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='del'>-#</div><div class='del'>-require 'pty'</div><div class='del'>-require 'expect'</div><div class='del'>-</div><div class='del'>-fnames = []</div><div class='del'>-PTY.spawn("ftp ftp.ruby-lang.org") do |r_f,w_f,pid|</div><div class='del'>-  w_f.sync = true</div><div class='del'>-  </div><div class='del'>-  $expect_verbose = false</div><div class='del'>-  </div><div class='del'>-  if !ENV['USER'].nil?</div><div class='del'>-    username = ENV['USER']</div><div class='del'>-  elsif !ENV['LOGNAME'].nil?</div><div class='del'>-    username = ENV['LOGNAME']</div><div class='del'>-  else</div><div class='del'>-    username = 'guest'</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  r_f.expect(/^(Name).*: |(word):|&gt; /) do</div><div class='del'>-    w_f.puts($1 ? "ftp" : $2 ? "#{username}@" : "cd pub/ruby")</div><div class='del'>-  end</div><div class='del'>-  r_f.expect("&gt; ") do</div><div class='del'>-    w_f.print "dir\n"</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  r_f.expect(/[^\-]&gt; /) do |output|</div><div class='del'>-    for x in output[0].split("\n")</div><div class='del'>-      if x =~ /(ruby.*?\.tar\.gz)/ then</div><div class='del'>-         fnames.push $1</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  begin</div><div class='del'>-    w_f.print "quit\n"</div><div class='del'>-  rescue</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-print "The latest ruby interpreter is "</div><div class='del'>-print fnames.sort.pop</div><div class='del'>-print "\n"</div><div class='head'>diff --git a/ext/pty/extconf.rb b/ext/pty/extconf.rb<br/>deleted file mode 100644<br/>index 5e126fe0cf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,15 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-if /mswin32|mingw|bccwin32/ !~ RUBY_PLATFORM</div><div class='del'>-  have_header("sys/stropts.h")</div><div class='del'>-  have_func("setresuid")</div><div class='del'>-  have_header("libutil.h")</div><div class='del'>-  have_header("pty.h")</div><div class='del'>-  have_library("util", "openpty")</div><div class='del'>-  if have_func("openpty") or</div><div class='del'>-      have_func("_getpty") or</div><div class='del'>-      have_func("ptsname") or</div><div class='del'>-      have_func("ioctl")</div><div class='del'>-    create_makefile('pty')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/pty/lib/expect.rb b/ext/pty/lib/expect.rb<br/>deleted file mode 100644<br/>index 08191b05b9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/lib/expect.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/lib/expect.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +0,0 @@</div><div class='del'>-$expect_verbose = false</div><div class='del'>-</div><div class='del'>-class IO</div><div class='del'>-  def expect(pat,timeout=9999999)</div><div class='del'>-    buf = ''</div><div class='del'>-    case pat</div><div class='del'>-    when String</div><div class='del'>-      e_pat = Regexp.new(Regexp.quote(pat))</div><div class='del'>-    when Regexp</div><div class='del'>-      e_pat = pat</div><div class='del'>-    end</div><div class='del'>-    while true</div><div class='del'>-      if !IO.select([self],nil,nil,timeout) or eof? then</div><div class='del'>-        result = nil</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-      c = getc.chr</div><div class='del'>-      buf &lt;&lt; c</div><div class='del'>-      if $expect_verbose</div><div class='del'>-        STDOUT.print c</div><div class='del'>-        STDOUT.flush</div><div class='del'>-      end</div><div class='del'>-      if mat=e_pat.match(buf) then</div><div class='del'>-        result = [buf,*mat.to_a[1..-1]]</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if block_given? then</div><div class='del'>-      yield result</div><div class='del'>-    else</div><div class='del'>-      return result</div><div class='del'>-    end</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/pty/pty.c b/ext/pty/pty.c<br/>deleted file mode 100644<br/>index 939335242f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/pty.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/pty.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,485 +0,0 @@</div><div class='del'>-#include	"config.h"</div><div class='del'>-#include	&lt;stdio.h&gt;</div><div class='del'>-#include	&lt;sys/types.h&gt;</div><div class='del'>-#include	&lt;sys/stat.h&gt;</div><div class='del'>-#include	&lt;sys/file.h&gt;</div><div class='del'>-#include	&lt;fcntl.h&gt;</div><div class='del'>-#include	&lt;errno.h&gt;</div><div class='del'>-#include	&lt;pwd.h&gt;</div><div class='del'>-#ifdef HAVE_SYS_IOCTL_H</div><div class='del'>-#include	&lt;sys/ioctl.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_LIBUTIL_H</div><div class='del'>-#include	&lt;libutil.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_PTY_H</div><div class='del'>-#include	&lt;pty.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_SYS_WAIT_H</div><div class='del'>-#include &lt;sys/wait.h&gt;</div><div class='del'>-#else</div><div class='del'>-#define WIFSTOPPED(status)    (((status) &amp; 0xff) == 0x7f)</div><div class='del'>-#endif</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "rubyio.h"</div><div class='del'>-#include "util.h"</div><div class='del'>-</div><div class='del'>-#include &lt;signal.h&gt;</div><div class='del'>-#ifdef HAVE_SYS_STROPTS_H</div><div class='del'>-#include &lt;sys/stropts.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</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'>-#define	DEVICELEN	16</div><div class='del'>-</div><div class='del'>-#if !defined(HAVE_OPENPTY)</div><div class='del'>-#if defined(__hpux)</div><div class='del'>-static const</div><div class='del'>-char	MasterDevice[] = "/dev/ptym/pty%s",</div><div class='del'>-	SlaveDevice[] =  "/dev/pty/tty%s",</div><div class='del'>-	*const deviceNo[] = {</div><div class='del'>-		"p0","p1","p2","p3","p4","p5","p6","p7",</div><div class='del'>-		"p8","p9","pa","pb","pc","pd","pe","pf",</div><div class='del'>-		"q0","q1","q2","q3","q4","q5","q6","q7",</div><div class='del'>-		"q8","q9","qa","qb","qc","qd","qe","qf",</div><div class='del'>-		"r0","r1","r2","r3","r4","r5","r6","r7",</div><div class='del'>-		"r8","r9","ra","rb","rc","rd","re","rf",</div><div class='del'>-		"s0","s1","s2","s3","s4","s5","s6","s7",</div><div class='del'>-		"s8","s9","sa","sb","sc","sd","se","sf",</div><div class='del'>-		"t0","t1","t2","t3","t4","t5","t6","t7",</div><div class='del'>-		"t8","t9","ta","tb","tc","td","te","tf",</div><div class='del'>-		"u0","u1","u2","u3","u4","u5","u6","u7",</div><div class='del'>-		"u8","u9","ua","ub","uc","ud","ue","uf",</div><div class='del'>-		"v0","v1","v2","v3","v4","v5","v6","v7",</div><div class='del'>-		"v8","v9","va","vb","vc","vd","ve","vf",</div><div class='del'>-		"w0","w1","w2","w3","w4","w5","w6","w7",</div><div class='del'>-		"w8","w9","wa","wb","wc","wd","we","wf",</div><div class='del'>-		0,</div><div class='del'>-	};</div><div class='del'>-#elif defined(_IBMESA)  /* AIX/ESA */</div><div class='del'>-static const</div><div class='del'>-char	MasterDevice[] = "/dev/ptyp%s",</div><div class='del'>-  	SlaveDevice[] = "/dev/ttyp%s",</div><div class='del'>-	*const deviceNo[] = {</div><div class='del'>-"00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f",</div><div class='del'>-"10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f",</div><div class='del'>-"20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f",</div><div class='del'>-"30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f",</div><div class='del'>-"40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f",</div><div class='del'>-"50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f",</div><div class='del'>-"60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f",</div><div class='del'>-"70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f",</div><div class='del'>-"80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f",</div><div class='del'>-"90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f",</div><div class='del'>-"a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af",</div><div class='del'>-"b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf",</div><div class='del'>-"c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf",</div><div class='del'>-"d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df",</div><div class='del'>-"e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef",</div><div class='del'>-"f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff",</div><div class='del'>-		};</div><div class='del'>-#elif !defined(HAVE_PTSNAME)</div><div class='del'>-static const</div><div class='del'>-char	MasterDevice[] = "/dev/pty%s",</div><div class='del'>-	SlaveDevice[] = "/dev/tty%s",</div><div class='del'>-	*const deviceNo[] = {</div><div class='del'>-		"p0","p1","p2","p3","p4","p5","p6","p7",</div><div class='del'>-		"p8","p9","pa","pb","pc","pd","pe","pf",</div><div class='del'>-		"q0","q1","q2","q3","q4","q5","q6","q7",</div><div class='del'>-		"q8","q9","qa","qb","qc","qd","qe","qf",</div><div class='del'>-		"r0","r1","r2","r3","r4","r5","r6","r7",</div><div class='del'>-		"r8","r9","ra","rb","rc","rd","re","rf",</div><div class='del'>-		"s0","s1","s2","s3","s4","s5","s6","s7",</div><div class='del'>-		"s8","s9","sa","sb","sc","sd","se","sf",</div><div class='del'>-		0,</div><div class='del'>-	};</div><div class='del'>-#endif</div><div class='del'>-#endif /* !defined(HAVE_OPENPTY) */</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_SETEUID</div><div class='del'>-# ifdef HAVE_SETREUID</div><div class='del'>-#  define seteuid(e)	setreuid(-1, (e))</div><div class='del'>-# else /* NOT HAVE_SETREUID */</div><div class='del'>-#  ifdef HAVE_SETRESUID</div><div class='del'>-#   define seteuid(e)	setresuid(-1, (e), -1)</div><div class='del'>-#  else /* NOT HAVE_SETRESUID */</div><div class='del'>-    /* I can't set euid. (;_;) */</div><div class='del'>-#  endif /* HAVE_SETRESUID */</div><div class='del'>-# endif /* HAVE_SETREUID */</div><div class='del'>-#endif /* NO_SETEUID */</div><div class='del'>-</div><div class='del'>-static VALUE eChildExited;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-echild_status(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_ivar_get(self, rb_intern("status"));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct pty_info {</div><div class='del'>-    int fd;</div><div class='del'>-    rb_pid_t child_pid;</div><div class='del'>-    VALUE thread;</div><div class='del'>-};</div><div class='del'>-</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: %ld", state, (long)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='del'>-static VALUE</div><div class='del'>-pty_syswait(info)</div><div class='del'>-    struct pty_info *info;</div><div class='del'>-{</div><div class='del'>-    int cpid, status;</div><div class='del'>-</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='del'>-</div><div class='del'>-#if defined(WIFSTOPPED)</div><div class='del'>-#elif defined(IF_STOPPED)</div><div class='del'>-#define WIFSTOPPED(status) IF_STOPPED(status)</div><div class='del'>-#else</div><div class='del'>-----&gt;&gt; Either IF_STOPPED or WIFSTOPPED is needed &lt;&lt;----</div><div class='del'>-#endif /* WIFSTOPPED | IF_STOPPED */</div><div class='del'>-	if (WIFSTOPPED(status)) { /* suspend */</div><div class='del'>-	    raise_from_wait("stopped", info);</div><div class='del'>-	}</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='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void getDevice _((int*, int*, char [DEVICELEN]));</div><div class='del'>-</div><div class='del'>-struct exec_info {</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE pty_exec _((VALUE v));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-pty_exec(v)</div><div class='del'>-    VALUE v;</div><div class='del'>-{</div><div class='del'>-    struct exec_info *arg = (struct exec_info *)v;</div><div class='del'>-    return rb_f_exec(arg-&gt;argc, arg-&gt;argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-establishShell(argc, argv, info, SlaveName)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    struct pty_info *info;</div><div class='del'>-    char SlaveName[DEVICELEN];</div><div class='del'>-{</div><div class='del'>-    int 		i,master,slave;</div><div class='del'>-    char		*p, tmp, *getenv();</div><div class='del'>-    struct passwd	*pwent;</div><div class='del'>-    VALUE		v;</div><div class='del'>-    struct exec_info	arg;</div><div class='del'>-    int			status;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	char *shellname;</div><div class='del'>-</div><div class='del'>-	if ((p = getenv("SHELL")) != NULL) {</div><div class='del'>-	    shellname = p;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    pwent = getpwuid(getuid());</div><div class='del'>-	    if (pwent &amp;&amp; pwent-&gt;pw_shell)</div><div class='del'>-		shellname = pwent-&gt;pw_shell;</div><div class='del'>-	    else</div><div class='del'>-		shellname = "/bin/sh";</div><div class='del'>-	}</div><div class='del'>-	v = rb_str_new2(shellname);</div><div class='del'>-	argc = 1;</div><div class='del'>-	argv = &amp;v;</div><div class='del'>-    }</div><div class='del'>-    getDevice(&amp;master, &amp;slave, SlaveName);</div><div class='del'>-</div><div class='del'>-    info-&gt;thread = rb_thread_current();</div><div class='del'>-    if((i = fork()) &lt; 0) {</div><div class='del'>-	close(master);</div><div class='del'>-	close(slave);</div><div class='del'>-	rb_sys_fail("fork failed");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(i == 0) {	/* child */</div><div class='del'>-	/*</div><div class='del'>-	 * Set free from process group and controlling terminal</div><div class='del'>-	 */</div><div class='del'>-#ifdef HAVE_SETSID</div><div class='del'>-	(void) setsid();</div><div class='del'>-#else /* HAS_SETSID */</div><div class='del'>-# ifdef HAVE_SETPGRP</div><div class='del'>-#  ifdef SETGRP_VOID</div><div class='del'>-	if (setpgrp() == -1)</div><div class='del'>-	    perror("setpgrp()");</div><div class='del'>-#  else /* SETGRP_VOID */</div><div class='del'>-	if (setpgrp(0, getpid()) == -1)</div><div class='del'>-	    rb_sys_fail("setpgrp()");</div><div class='del'>-	if ((i = open("/dev/tty", O_RDONLY)) &lt; 0)</div><div class='del'>-	    rb_sys_fail("/dev/tty");</div><div class='del'>-	else {</div><div class='del'>-	    if (ioctl(i, TIOCNOTTY, (char *)0))</div><div class='del'>-		perror("ioctl(TIOCNOTTY)");</div><div class='del'>-	    close(i);</div><div class='del'>-	}</div><div class='del'>-#  endif /* SETGRP_VOID */</div><div class='del'>-# endif /* HAVE_SETPGRP */</div><div class='del'>-#endif /* HAS_SETSID */</div><div class='del'>-</div><div class='del'>-	/*</div><div class='del'>-	 * obtain new controlling terminal</div><div class='del'>-	 */</div><div class='del'>-#if defined(TIOCSCTTY)</div><div class='del'>-	close(master);</div><div class='del'>-	(void) ioctl(slave, TIOCSCTTY, (char *)0);</div><div class='del'>-	/* errors ignored for sun */</div><div class='del'>-#else</div><div class='del'>-	close(slave);</div><div class='del'>-	slave = open(SlaveName, O_RDWR);</div><div class='del'>-	if (slave &lt; 0) {</div><div class='del'>-	    perror("open: pty slave");</div><div class='del'>-	    _exit(1);</div><div class='del'>-	}</div><div class='del'>-	close(master);</div><div class='del'>-#endif</div><div class='del'>-	write(slave, "", 1);</div><div class='del'>-	dup2(slave,0);</div><div class='del'>-	dup2(slave,1);</div><div class='del'>-	dup2(slave,2);</div><div class='del'>-	close(slave);</div><div class='del'>-#if defined(HAVE_SETEUID) || defined(HAVE_SETREUID) || defined(HAVE_SETRESUID)</div><div class='del'>-	seteuid(getuid());</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-	arg.argc = argc;</div><div class='del'>-	arg.argv = argv;</div><div class='del'>-	rb_protect(pty_exec, (VALUE)&amp;arg, &amp;status);</div><div class='del'>-	sleep(1);</div><div class='del'>-	_exit(1);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    read(master, &amp;tmp, 1);</div><div class='del'>-    close(slave);</div><div class='del'>-</div><div class='del'>-    info-&gt;child_pid = i;</div><div class='del'>-    info-&gt;fd = master;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-pty_finalize_syswait(info)</div><div class='del'>-    struct pty_info *info;</div><div class='del'>-{</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='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-get_device_once(master, slave, SlaveName, fail)</div><div class='del'>-    int *master, *slave, fail;</div><div class='del'>-    char SlaveName[DEVICELEN];</div><div class='del'>-{</div><div class='del'>-#if defined HAVE_OPENPTY</div><div class='del'>-/*</div><div class='del'>- * Use openpty(3) of 4.3BSD Reno and later,</div><div class='del'>- * or the same interface function.</div><div class='del'>- */</div><div class='del'>-    if (openpty(master, slave, SlaveName,</div><div class='del'>-		(struct termios *)0, (struct winsize *)0) == -1) {</div><div class='del'>-	if (!fail) return -1;</div><div class='del'>-	rb_raise(rb_eRuntimeError, "openpty() failed");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return 0;</div><div class='del'>-#elif defined HAVE__GETPTY</div><div class='del'>-    char *name;</div><div class='del'>-</div><div class='del'>-    if (!(name = _getpty(master, O_RDWR, 0622, 0))) {</div><div class='del'>-	if (!fail) return -1;</div><div class='del'>-	rb_raise(rb_eRuntimeError, "_getpty() failed");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    *slave = open(name, O_RDWR);</div><div class='del'>-    strncpy(SlaveName, name, sizeof SlaveName);</div><div class='del'>-</div><div class='del'>-    return 0;</div><div class='del'>-#else /* HAVE__GETPTY */</div><div class='del'>-    int	 i,j;</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_PTSNAME</div><div class='del'>-    char *pn;</div><div class='del'>-    void (*s)();</div><div class='del'>-</div><div class='del'>-    extern char *ptsname(int);</div><div class='del'>-    extern int unlockpt(int);</div><div class='del'>-    extern int grantpt(int);</div><div class='del'>-</div><div class='del'>-    if((i = open("/dev/ptmx", O_RDWR, 0)) != -1) {</div><div class='del'>-	s = signal(SIGCHLD, SIG_DFL);</div><div class='del'>-	if(grantpt(i) != -1) {</div><div class='del'>-	    signal(SIGCHLD, s);</div><div class='del'>-	    if(unlockpt(i) != -1) {</div><div class='del'>-		if((pn = ptsname(i)) != NULL) {</div><div class='del'>-		    if((j = open(pn, O_RDWR, 0)) != -1) {</div><div class='del'>-#if defined I_PUSH &amp;&amp; !defined linux</div><div class='del'>-			if(ioctl(j, I_PUSH, "ptem") != -1) {</div><div class='del'>-			    if(ioctl(j, I_PUSH, "ldterm") != -1) {</div><div class='del'>-				ioctl(j, I_PUSH, "ttcompat");</div><div class='del'>-#endif</div><div class='del'>-				*master = i;</div><div class='del'>-				*slave = j;</div><div class='del'>-				strncpy(SlaveName, pn, sizeof SlaveName);</div><div class='del'>-				return 0;</div><div class='del'>-#if defined I_PUSH &amp;&amp; !defined linux</div><div class='del'>-			    }</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'>-	}</div><div class='del'>-	close(i);</div><div class='del'>-    }</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='del'>-#else</div><div class='del'>-    char **p;</div><div class='del'>-    char MasterName[DEVICELEN];</div><div class='del'>-</div><div class='del'>-    for (p = deviceNo; *p != NULL; p++) {</div><div class='del'>-	snprintf(MasterName, sizeof MasterName, MasterDevice, *p);</div><div class='del'>-	if ((i = open(MasterName,O_RDWR,0)) &gt;= 0) {</div><div class='del'>-	    *master = i;</div><div class='del'>-	    snprintf(SlaveName, sizeof SlaveName, SlaveDevice, *p);</div><div class='del'>-	    if ((j = open(SlaveName,O_RDWR,0)) &gt;= 0) {</div><div class='del'>-		*slave = j;</div><div class='del'>-		chown(SlaveName, getuid(), getgid());</div><div class='del'>-		chmod(SlaveName, 0622);</div><div class='del'>-		return 0;</div><div class='del'>-	    }</div><div class='del'>-	    close(i);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (fail) rb_raise(rb_eRuntimeError, "can't get %s", SlaveName);</div><div class='del'>-    return -1;</div><div class='del'>-#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, slavename)</div><div class='del'>-    int *master, *slave;</div><div class='del'>-    char slavename[DEVICELEN];</div><div class='del'>-{</div><div class='del'>-    if (get_device_once(master, slave, slavename, 0)) {</div><div class='del'>-	rb_gc();</div><div class='del'>-	get_device_once(master, slave, slavename, 1);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* ruby function: getpty */</div><div class='del'>-static VALUE</div><div class='del'>-pty_getpty(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 res;</div><div class='del'>-    struct pty_info info;</div><div class='del'>-    struct pty_info thinfo;</div><div class='del'>-    rb_io_t *wfptr,*rfptr;</div><div class='del'>-    VALUE rport = rb_obj_alloc(rb_cFile);</div><div class='del'>-    VALUE wport = rb_obj_alloc(rb_cFile);</div><div class='del'>-    char SlaveName[DEVICELEN];</div><div class='del'>-</div><div class='del'>-    MakeOpenFile(rport, rfptr);</div><div class='del'>-    MakeOpenFile(wport, wfptr);</div><div class='del'>-</div><div class='del'>-    establishShell(argc, argv, &amp;info, SlaveName);</div><div class='del'>-</div><div class='del'>-    rfptr-&gt;mode = rb_io_mode_flags("r");</div><div class='del'>-    rfptr-&gt;f = fdopen(info.fd, "r");</div><div class='del'>-    rfptr-&gt;path = strdup(SlaveName);</div><div class='del'>-</div><div class='del'>-    wfptr-&gt;mode = rb_io_mode_flags("w") | FMODE_SYNC;</div><div class='del'>-    wfptr-&gt;f = fdopen(dup(info.fd), "w");</div><div class='del'>-    wfptr-&gt;path = strdup(SlaveName);</div><div class='del'>-</div><div class='del'>-    res = rb_ary_new2(3);</div><div class='del'>-    rb_ary_store(res,0,(VALUE)rport);</div><div class='del'>-    rb_ary_store(res,1,(VALUE)wport);</div><div class='del'>-    rb_ary_store(res,2,INT2FIX(info.child_pid));</div><div class='del'>-</div><div class='del'>-    thinfo.thread = rb_thread_create(pty_syswait, (void*)&amp;info);</div><div class='del'>-    thinfo.child_pid = info.child_pid;</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	rb_ensure(rb_yield, res, pty_finalize_syswait, (VALUE)&amp;thinfo);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return res;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* ruby function: protect_signal - obsolete */</div><div class='del'>-static VALUE</div><div class='del'>-pty_protect(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    rb_warn("PTY::protect_signal is no longer needed");</div><div class='del'>-    rb_yield(Qnil);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* ruby function: reset_signal - obsolete */</div><div class='del'>-static VALUE</div><div class='del'>-pty_reset_signal(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    rb_warn("PTY::reset_signal is no longer needed");</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE cPTY;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_pty()</div><div class='del'>-{</div><div class='del'>-    cPTY = rb_define_module("PTY");</div><div class='del'>-    rb_define_module_function(cPTY,"getpty",pty_getpty,-1);</div><div class='del'>-    rb_define_module_function(cPTY,"spawn",pty_getpty,-1);</div><div class='del'>-    rb_define_module_function(cPTY,"protect_signal",pty_protect,0);</div><div class='del'>-    rb_define_module_function(cPTY,"reset_signal",pty_reset_signal,0);</div><div class='del'>-</div><div class='del'>-    eChildExited = rb_define_class_under(cPTY,"ChildExited",rb_eRuntimeError);</div><div class='del'>-    rb_define_method(eChildExited,"status",echild_status,0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/pty/script.rb b/ext/pty/script.rb<br/>deleted file mode 100644<br/>index dbb933171f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/script.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/script.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,37 +0,0 @@</div><div class='del'>-require 'pty'</div><div class='del'>-</div><div class='del'>-if ARGV.size == 0 then</div><div class='del'>-  ofile = "typescript"</div><div class='del'>-else</div><div class='del'>-  ofile = ARGV[0]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-logfile = File.open(ofile,"a")</div><div class='del'>-</div><div class='del'>-system "stty -echo raw lnext ^_"</div><div class='del'>-</div><div class='del'>-PTY.spawn("/bin/csh") do |r_pty,w_pty,pid|</div><div class='del'>-</div><div class='del'>-  Thread.new do</div><div class='del'>-    while true</div><div class='del'>-      w_pty.print STDIN.getc.chr</div><div class='del'>-      w_pty.flush</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  begin</div><div class='del'>-    while true</div><div class='del'>-      c = r_pty.sysread(512)</div><div class='del'>-      break if c.nil?</div><div class='del'>-      print c</div><div class='del'>-      STDOUT.flush</div><div class='del'>-      logfile.print c</div><div class='del'>-    end</div><div class='del'>-  rescue</div><div class='del'>-  #  print $@,':',$!,"\n"</div><div class='del'>-    logfile.close</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-system "stty echo -raw lnext ^v"</div><div class='del'>-</div><div class='head'>diff --git a/ext/pty/shl.rb b/ext/pty/shl.rb<br/>deleted file mode 100644<br/>index cdaf8d7398..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/pty/shl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/pty/shl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,92 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  old-fashioned 'shl' like program</div><div class='del'>-#  by A. Ito</div><div class='del'>-#</div><div class='del'>-#  commands:</div><div class='del'>-#     c        creates new shell</div><div class='del'>-#     C-z      suspends shell</div><div class='del'>-#     p        lists all shell</div><div class='del'>-#     0,1,...  choose shell</div><div class='del'>-#     q        quit</div><div class='del'>-</div><div class='del'>-require 'pty'</div><div class='del'>-</div><div class='del'>-$shells = []</div><div class='del'>-$n_shells = 0</div><div class='del'>-</div><div class='del'>-$r_pty = nil</div><div class='del'>-$w_pty = nil</div><div class='del'>-</div><div class='del'>-def writer</div><div class='del'>-  system "stty -echo raw"</div><div class='del'>-  begin</div><div class='del'>-    while true</div><div class='del'>-      c = STDIN.getc</div><div class='del'>-      if c == 26 then # C-z</div><div class='del'>-        $reader.raise(nil)</div><div class='del'>-        return 'Suspend'</div><div class='del'>-      end</div><div class='del'>-      $w_pty.print c.chr</div><div class='del'>-      $w_pty.flush</div><div class='del'>-    end</div><div class='del'>-  rescue</div><div class='del'>-    $reader.raise(nil)</div><div class='del'>-    return 'Exit'</div><div class='del'>-  ensure</div><div class='del'>-    system "stty echo -raw"</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$reader = Thread.new {</div><div class='del'>-  while true</div><div class='del'>-    begin</div><div class='del'>-      next if $r_pty.nil?</div><div class='del'>-      c = $r_pty.getc</div><div class='del'>-      if c.nil? then</div><div class='del'>-        Thread.stop</div><div class='del'>-      end</div><div class='del'>-      print c.chr</div><div class='del'>-      STDOUT.flush</div><div class='del'>-    rescue</div><div class='del'>-      Thread.stop</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# $reader.raise(nil)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-while true</div><div class='del'>-  print "&gt;&gt; "</div><div class='del'>-  STDOUT.flush</div><div class='del'>-  case gets</div><div class='del'>-  when /^c/i</div><div class='del'>-    $shells[$n_shells] = PTY.spawn("/bin/csh")</div><div class='del'>-    $r_pty,$w_pty = $shells[$n_shells]</div><div class='del'>-    $n_shells += 1</div><div class='del'>-    $reader.run</div><div class='del'>-    if writer == 'Exit'</div><div class='del'>-      $n_shells -= 1</div><div class='del'>-      $shells[$n_shells] = nil</div><div class='del'>-    end</div><div class='del'>-  when /^p/i</div><div class='del'>-    for i in 0..$n_shells</div><div class='del'>-      unless $shells[i].nil?</div><div class='del'>-        print i,"\n"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  when /^([0-9]+)/</div><div class='del'>-    n = $1.to_i</div><div class='del'>-    if $shells[n].nil?</div><div class='del'>-      print "\##{i} doesn't exist\n"</div><div class='del'>-    else</div><div class='del'>-      $r_pty,$w_pty = $shells[n]</div><div class='del'>-      $reader.run</div><div class='del'>-      if writer == 'Exit' then</div><div class='del'>-        $shells[n] = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  when /^q/i</div><div class='del'>-    exit</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/purelib.rb b/ext/purelib.rb<br/>deleted file mode 100644<br/>index dbe514c34a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/purelib.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/purelib.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-nul = nil</div><div class='del'>-$:.each_with_index {|path, index|</div><div class='del'>-  if /\A(?:\.\/)*-\z/ =~ path</div><div class='del'>-    nul = index</div><div class='del'>-    break</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-if nul</div><div class='del'>-  $:[nul..-1] = ["."]</div><div class='del'>-end</div><div class='head'>diff --git a/ext/racc/cparse/.cvsignore b/ext/racc/cparse/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/racc/cparse/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/racc/cparse/.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/racc/cparse/cparse.c b/ext/racc/cparse/cparse.c<br/>deleted file mode 100644<br/>index 18a26f670f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/racc/cparse/cparse.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/racc/cparse/cparse.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,828 +0,0 @@</div><div class='del'>-/*</div><div class='del'>-</div><div class='del'>-    cparse.c -- Racc Runtime Core</div><div class='del'>-  </div><div class='del'>-    Copyright (c) 1999-2006 Minero Aoki</div><div class='del'>-  </div><div class='del'>-    This library is free software.</div><div class='del'>-    You can distribute/modify this program under the same terms of ruby.</div><div class='del'>-</div><div class='del'>-    $originalId: cparse.c,v 1.8 2006/07/06 11:39:46 aamine 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 "version.h"</div><div class='del'>-</div><div class='del'>-/* -----------------------------------------------------------------------</div><div class='del'>-                        Important Constants</div><div class='del'>------------------------------------------------------------------------ */</div><div class='del'>-</div><div class='del'>-#define RACC_VERSION "1.4.5"</div><div class='del'>-</div><div class='del'>-#define DEFAULT_TOKEN -1</div><div class='del'>-#define ERROR_TOKEN    1</div><div class='del'>-#define FINAL_TOKEN    0</div><div class='del'>-</div><div class='del'>-#define vDEFAULT_TOKEN  INT2FIX(DEFAULT_TOKEN)</div><div class='del'>-#define vERROR_TOKEN    INT2FIX(ERROR_TOKEN)</div><div class='del'>-#define vFINAL_TOKEN    INT2FIX(FINAL_TOKEN)</div><div class='del'>-</div><div class='del'>-/* -----------------------------------------------------------------------</div><div class='del'>-                          File Local Variables</div><div class='del'>------------------------------------------------------------------------ */</div><div class='del'>-</div><div class='del'>-static VALUE RaccBug;</div><div class='del'>-static VALUE CparseParams;</div><div class='del'>-</div><div class='del'>-static ID id_yydebug;</div><div class='del'>-static ID id_nexttoken;</div><div class='del'>-static ID id_onerror;</div><div class='del'>-static ID id_noreduce;</div><div class='del'>-static ID id_errstatus;</div><div class='del'>-</div><div class='del'>-static ID id_d_shift;</div><div class='del'>-static ID id_d_reduce;</div><div class='del'>-static ID id_d_accept;</div><div class='del'>-static ID id_d_read_token;</div><div class='del'>-static ID id_d_next_state;</div><div class='del'>-static ID id_d_e_pop;</div><div class='del'>-</div><div class='del'>-/* -----------------------------------------------------------------------</div><div class='del'>-                              Utils</div><div class='del'>------------------------------------------------------------------------ */</div><div class='del'>-</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='del'>-static ID value_to_id _((VALUE v));</div><div class='del'>-static inline long num_to_long _((VALUE n));</div><div class='del'>-</div><div class='del'>-static ID</div><div class='del'>-value_to_id(VALUE v)</div><div class='del'>-{</div><div class='del'>-    if (! SYMBOL_P(v)) {</div><div class='del'>-        rb_raise(rb_eTypeError, "not symbol");</div><div class='del'>-    }</div><div class='del'>-    return SYM2ID(v);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static inline long</div><div class='del'>-num_to_long(VALUE n)</div><div class='del'>-{</div><div class='del'>-    return NUM2LONG(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define AREF(s, idx) \</div><div class='del'>-    ((0 &lt;= idx &amp;&amp; idx &lt; RARRAY(s)-&gt;len) ? RARRAY(s)-&gt;ptr[idx] : Qnil)</div><div class='del'>-</div><div class='del'>-/* -----------------------------------------------------------------------</div><div class='del'>-                        Parser Stack Interfaces</div><div class='del'>------------------------------------------------------------------------ */</div><div class='del'>-</div><div class='del'>-static VALUE get_stack_tail _((VALUE stack, long len));</div><div class='del'>-static void cut_stack_tail _((VALUE stack, long len));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-get_stack_tail(VALUE stack, long len)</div><div class='del'>-{</div><div class='del'>-    if (len &lt; 0) return Qnil;  /* system error */</div><div class='del'>-    if (len &gt; RARRAY(stack)-&gt;len) len = RARRAY(stack)-&gt;len;</div><div class='del'>-    return rb_ary_new4(len, RARRAY(stack)-&gt;ptr + RARRAY(stack)-&gt;len - len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-cut_stack_tail(VALUE stack, long len)</div><div class='del'>-{</div><div class='del'>-    while (len &gt; 0) {</div><div class='del'>-        rb_ary_pop(stack);</div><div class='del'>-        len--;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define STACK_INIT_LEN 64</div><div class='del'>-#define NEW_STACK() rb_ary_new2(STACK_INIT_LEN)</div><div class='del'>-#define PUSH(s, i) rb_ary_store(s, RARRAY(s)-&gt;len, i)</div><div class='del'>-#define POP(s) rb_ary_pop(s)</div><div class='del'>-#define LAST_I(s) \</div><div class='del'>-    ((RARRAY(s)-&gt;len &gt; 0) ? RARRAY(s)-&gt;ptr[RARRAY(s)-&gt;len - 1] : Qnil)</div><div class='del'>-#define GET_TAIL(s, len) get_stack_tail(s, len)</div><div class='del'>-#define CUT_TAIL(s, len) cut_stack_tail(s, len)</div><div class='del'>-</div><div class='del'>-/* -----------------------------------------------------------------------</div><div class='del'>-                       struct cparse_params</div><div class='del'>------------------------------------------------------------------------ */</div><div class='del'>-</div><div class='del'>-struct cparse_params {</div><div class='del'>-    VALUE value_v;         /* VALUE version of this struct */</div><div class='del'>-</div><div class='del'>-    VALUE parser;          /* parser object */</div><div class='del'>-</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='del'>-</div><div class='del'>-    /* State transition tables (immutable)</div><div class='del'>-       Data structure is from Dragon Book 4.9 */</div><div class='del'>-    /* action table */</div><div class='del'>-    VALUE action_table;</div><div class='del'>-    VALUE action_check;</div><div class='del'>-    VALUE action_default;</div><div class='del'>-    VALUE action_pointer;</div><div class='del'>-    /* goto table */</div><div class='del'>-    VALUE goto_table;</div><div class='del'>-    VALUE goto_check;</div><div class='del'>-    VALUE goto_default;</div><div class='del'>-    VALUE goto_pointer;</div><div class='del'>-</div><div class='del'>-    long  nt_base;         /* NonTerminal BASE index */</div><div class='del'>-    VALUE reduce_table;    /* reduce data table */</div><div class='del'>-    VALUE token_table;     /* token conversion table */</div><div class='del'>-</div><div class='del'>-    /* parser stacks and parameters */</div><div class='del'>-    VALUE state;</div><div class='del'>-    long curstate;</div><div class='del'>-    VALUE vstack;</div><div class='del'>-    VALUE tstack;</div><div class='del'>-    VALUE t;</div><div class='del'>-    long shift_n;</div><div class='del'>-    long reduce_n;</div><div class='del'>-    long ruleno;</div><div class='del'>-</div><div class='del'>-    long errstatus;         /* nonzero in error recovering mode */</div><div class='del'>-    long nerr;              /* number of error */</div><div class='del'>-</div><div class='del'>-    int use_result_var;</div><div class='del'>-</div><div class='del'>-    VALUE retval;           /* return value of parser routine */</div><div class='del'>-    long fin;               /* parse result status */</div><div class='del'>-#define CP_FIN_ACCEPT  1</div><div class='del'>-#define CP_FIN_EOT     2</div><div class='del'>-#define CP_FIN_CANTPOP 3</div><div class='del'>-</div><div class='del'>-    int debug;              /* user level debug */</div><div class='del'>-    int sys_debug;          /* system level debug */</div><div class='del'>-</div><div class='del'>-    long i;                 /* table index */</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-/* -----------------------------------------------------------------------</div><div class='del'>-                        Parser Main Routines</div><div class='del'>------------------------------------------------------------------------ */</div><div class='del'>-</div><div class='del'>-static VALUE racc_cparse _((VALUE parser, VALUE arg, VALUE sysdebug));</div><div class='del'>-static VALUE racc_yyparse _((VALUE parser, VALUE lexer, VALUE lexmid,</div><div class='del'>-                             VALUE arg, VALUE sysdebug));</div><div class='del'>-</div><div class='del'>-static void call_lexer _((struct cparse_params *v));</div><div class='del'>-static VALUE lexer_i _((VALUE block_args, VALUE data, VALUE self));</div><div class='del'>-</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='del'>-                                 VALUE lexer, VALUE lexmid));</div><div class='del'>-static void cparse_params_mark _((void *ptr));</div><div class='del'>-</div><div class='del'>-static void parse_main _((struct cparse_params *v,</div><div class='del'>-                         VALUE tok, VALUE val, int resume));</div><div class='del'>-static void extract_user_token _((struct cparse_params *v,</div><div class='del'>-                                  VALUE block_args, VALUE *tok, VALUE *val));</div><div class='del'>-static void shift _((struct cparse_params* v, long act, VALUE tok, VALUE val));</div><div class='del'>-static int reduce _((struct cparse_params* v, long act));</div><div class='del'>-static VALUE reduce0 _((VALUE block_args, VALUE data, VALUE self));</div><div class='del'>-</div><div class='del'>-#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='del'>-#else</div><div class='del'>-# define D_puts(msg)</div><div class='del'>-# define D_printf(fmt,arg)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-racc_cparse(VALUE parser, VALUE arg, VALUE sysdebug)</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-racc_yyparse(VALUE parser, VALUE lexer, VALUE lexmid, VALUE arg, VALUE sysdebug)</div><div class='del'>-{</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='del'>-        rb_raise(rb_eArgError, "%s() is finished before EndOfToken",</div><div class='del'>-                 rb_id2name(v-&gt;lexmid));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return v-&gt;retval;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_RB_BLOCK_CALL</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_block_call(v-&gt;lexer, v-&gt;lexmid, 0, NULL, lexer_i, v-&gt;value_v);</div><div class='del'>-}</div><div class='del'>-#else</div><div class='del'>-static VALUE</div><div class='del'>-lexer_iter(VALUE data)</div><div class='del'>-{</div><div class='del'>-    struct cparse_params *v;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(data, struct cparse_params, v);</div><div class='del'>-    rb_funcall(v-&gt;lexer, v-&gt;lexmid, 0);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-lexer_i(VALUE block_args, VALUE data, VALUE self)</div><div class='del'>-{</div><div class='del'>-    struct cparse_params *v;</div><div class='del'>-    VALUE tok, val;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(data, struct cparse_params, v);</div><div class='del'>-    if (v-&gt;fin)</div><div class='del'>-        rb_raise(rb_eArgError, "extra token after EndOfToken");</div><div class='del'>-    extract_user_token(v, block_args, &amp;tok, &amp;val);</div><div class='del'>-    parse_main(v, tok, val, 1);</div><div class='del'>-    if (v-&gt;fin &amp;&amp; v-&gt;fin != CP_FIN_ACCEPT)</div><div class='del'>-       rb_iter_break(); </div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-assert_array(VALUE a)</div><div class='del'>-{</div><div class='del'>-    Check_Type(a, T_ARRAY);</div><div class='del'>-    return a;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-assert_hash(VALUE h)</div><div class='del'>-{</div><div class='del'>-    Check_Type(h, T_HASH);</div><div class='del'>-    return h;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static long</div><div class='del'>-assert_integer(VALUE n)</div><div class='del'>-{</div><div class='del'>-    return NUM2LONG(n);</div><div class='del'>-}</div><div class='del'>-</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='del'>-    struct cparse_params *v;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(vparams, struct cparse_params, v);</div><div class='del'>-    v-&gt;value_v = vparams;</div><div class='del'>-    v-&gt;parser = parser;</div><div class='del'>-    v-&gt;lexer = lexer;</div><div class='del'>-    if (! NIL_P(lexmid))</div><div class='del'>-        v-&gt;lexmid = value_to_id(lexmid);</div><div class='del'>-</div><div class='del'>-    v-&gt;debug = RTEST(rb_ivar_get(parser, id_yydebug));</div><div class='del'>-</div><div class='del'>-    Check_Type(arg, T_ARRAY);</div><div class='del'>-    if (!(13 &lt;= RARRAY(arg)-&gt;len &amp;&amp; RARRAY(arg)-&gt;len &lt;= 14))</div><div class='del'>-        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='del'>-    if (RARRAY(arg)-&gt;len &gt; 13) {</div><div class='del'>-        v-&gt;use_result_var = RTEST(RARRAY(arg)-&gt;ptr[13]);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        v-&gt;use_result_var = Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    v-&gt;tstack = v-&gt;debug ? NEW_STACK() : Qnil;</div><div class='del'>-    v-&gt;vstack = NEW_STACK();</div><div class='del'>-    v-&gt;state = NEW_STACK();</div><div class='del'>-    v-&gt;curstate = 0;</div><div class='del'>-    PUSH(v-&gt;state, INT2FIX(0));</div><div class='del'>-    v-&gt;t = INT2FIX(FINAL_TOKEN + 1);   /* must not init to FINAL_TOKEN */</div><div class='del'>-    v-&gt;nerr = 0;</div><div class='del'>-    v-&gt;errstatus = 0;</div><div class='del'>-    rb_ivar_set(parser, id_errstatus, LONG2NUM(v-&gt;errstatus));</div><div class='del'>-</div><div class='del'>-    v-&gt;retval = Qnil;</div><div class='del'>-    v-&gt;fin = 0;</div><div class='del'>-</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='del'>-}</div><div class='del'>-</div><div class='del'>-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;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='del'>-{</div><div class='del'>-    if (NIL_P(block_args)) {</div><div class='del'>-        /* EOF */</div><div class='del'>-        *tok = Qfalse;</div><div class='del'>-        *val = rb_str_new("$", 1);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (TYPE(block_args) != T_ARRAY) {</div><div class='del'>-        rb_raise(rb_eTypeError,</div><div class='del'>-                 "%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='del'>-                 rb_class2name(CLASS_OF(block_args)));</div><div class='del'>-    }</div><div class='del'>-    if (RARRAY(block_args)-&gt;len != 2) {</div><div class='del'>-        rb_raise(rb_eArgError,</div><div class='del'>-                 "%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='del'>-                 RARRAY(block_args)-&gt;len);</div><div class='del'>-    }</div><div class='del'>-    *tok = AREF(block_args, 0);</div><div class='del'>-    *val = AREF(block_args, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define SHIFT(v,act,tok,val) shift(v,act,tok,val)</div><div class='del'>-#define REDUCE(v,act) do {\</div><div class='del'>-    switch (reduce(v,act)) {  \</div><div class='del'>-      case 0: /* normal */    \</div><div class='del'>-        break;                \</div><div class='del'>-      case 1: /* yyerror */   \</div><div class='del'>-        goto user_yyerror;    \</div><div class='del'>-      case 2: /* yyaccept */  \</div><div class='del'>-        D_puts("u accept");   \</div><div class='del'>-        goto accept;          \</div><div class='del'>-      default:                \</div><div class='del'>-        break;                \</div><div class='del'>-    }                         \</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume)</div><div class='del'>-{</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='del'>-    VALUE tmp;</div><div class='del'>-</div><div class='del'>-    if (resume)</div><div class='del'>-        goto resume;</div><div class='del'>-    </div><div class='del'>-    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='del'>-</div><div class='del'>-        D_printf("(act) k1=%ld\n", v-&gt;curstate);</div><div class='del'>-        tmp = AREF(v-&gt;action_pointer, v-&gt;curstate);</div><div class='del'>-        if (NIL_P(tmp)) goto notfound;</div><div class='del'>-        D_puts("(act) pointer[k1] ok");</div><div class='del'>-        i = NUM2LONG(tmp);</div><div class='del'>-</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='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        read_next = 0;</div><div class='del'>-</div><div class='del'>-        i += NUM2LONG(v-&gt;t);</div><div class='del'>-        D_printf("(act) i=%ld\n", i);</div><div class='del'>-        if (i &lt; 0) goto notfound;</div><div class='del'>-</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='del'>-</div><div class='del'>-        tmp = AREF(v-&gt;action_check, i);</div><div class='del'>-        if (NIL_P(tmp)) goto notfound;</div><div class='del'>-        if (NUM2LONG(tmp) != v-&gt;curstate) goto notfound;</div><div class='del'>-        D_printf("(act) check[i]=%ld\n", NUM2LONG(tmp));</div><div class='del'>-</div><div class='del'>-        D_puts("(act) found");</div><div class='del'>-      act_fixed:</div><div class='del'>-        D_printf("act=%ld\n", act);</div><div class='del'>-        goto handle_act;</div><div class='del'>-    </div><div class='del'>-      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='del'>-        goto act_fixed;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      handle_act:</div><div class='del'>-        if (act &gt; 0 &amp;&amp; act &lt; v-&gt;shift_n) {</div><div class='del'>-            D_puts("shift");</div><div class='del'>-            if (v-&gt;errstatus &gt; 0) {</div><div class='del'>-                v-&gt;errstatus--;</div><div class='del'>-                rb_ivar_set(v-&gt;parser, id_errstatus, LONG2NUM(v-&gt;errstatus));</div><div class='del'>-            }</div><div class='del'>-            SHIFT(v, act, v-&gt;t, val);</div><div class='del'>-            read_next = 1;</div><div class='del'>-        }</div><div class='del'>-        else if (act &lt; 0 &amp;&amp; act &gt; -(v-&gt;reduce_n)) {</div><div class='del'>-            D_puts("reduce");</div><div class='del'>-            REDUCE(v, act);</div><div class='del'>-        }</div><div class='del'>-        else if (act == -(v-&gt;reduce_n)) {</div><div class='del'>-            goto error;</div><div class='del'>-          error_recovered:</div><div class='del'>-            ;   /* goto label requires stmt */</div><div class='del'>-        }</div><div class='del'>-        else if (act == v-&gt;shift_n) {</div><div class='del'>-            D_puts("accept");</div><div class='del'>-            goto accept;</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-            rb_raise(RaccBug, "[Racc Bug] unknown act value %ld", act);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (v-&gt;debug) {</div><div class='del'>-            rb_funcall(v-&gt;parser, id_d_next_state,</div><div class='del'>-                       2, LONG2NUM(v-&gt;curstate), v-&gt;state);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* not reach */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  accept:</div><div class='del'>-    if (v-&gt;debug) rb_funcall(v-&gt;parser, id_d_accept, 0);</div><div class='del'>-    v-&gt;retval = RARRAY(v-&gt;vstack)-&gt;ptr[0];</div><div class='del'>-    v-&gt;fin = CP_FIN_ACCEPT;</div><div class='del'>-    return;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  error:</div><div class='del'>-    D_printf("error detected, status=%ld\n", v-&gt;errstatus);</div><div class='del'>-    if (v-&gt;errstatus == 0) {</div><div class='del'>-        v-&gt;nerr++;</div><div class='del'>-        rb_funcall(v-&gt;parser, id_onerror,</div><div class='del'>-                   3, v-&gt;t, val, v-&gt;vstack);</div><div class='del'>-    }</div><div class='del'>-  user_yyerror:</div><div class='del'>-    if (v-&gt;errstatus == 3) {</div><div class='del'>-        if (v-&gt;t == vFINAL_TOKEN) {</div><div class='del'>-            v-&gt;retval = Qfalse;</div><div class='del'>-            v-&gt;fin = CP_FIN_EOT;</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-        read_next = 1;</div><div class='del'>-    }</div><div class='del'>-    v-&gt;errstatus = 3;</div><div class='del'>-    rb_ivar_set(v-&gt;parser, id_errstatus, LONG2NUM(v-&gt;errstatus));</div><div class='del'>-</div><div class='del'>-    /* 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='del'>-    while (1) {</div><div class='del'>-        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='del'>-</div><div class='del'>-        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='del'>-</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='del'>-        }</div><div class='del'>-        act = NUM2LONG(act_value);</div><div class='del'>-        D_printf("(err) table[i]=%ld\n", act);</div><div class='del'>-</div><div class='del'>-        tmp = AREF(v-&gt;action_check, i);</div><div class='del'>-        if (NIL_P(tmp)) {</div><div class='del'>-            D_puts("(err) check[i] == nil");</div><div class='del'>-            goto error_pop;</div><div class='del'>-        }</div><div class='del'>-        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='del'>-        }</div><div class='del'>-</div><div class='del'>-        D_puts("(err) found: can handle error token");</div><div class='del'>-        break;</div><div class='del'>-          </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='del'>-</div><div class='del'>-        if (RARRAY(v-&gt;state)-&gt;len &lt;= 1) {</div><div class='del'>-            v-&gt;retval = Qnil;</div><div class='del'>-            v-&gt;fin = CP_FIN_CANTPOP;</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-        POP(v-&gt;state);</div><div class='del'>-        POP(v-&gt;vstack);</div><div class='del'>-        v-&gt;curstate = num_to_long(LAST_I(v-&gt;state));</div><div class='del'>-        if (v-&gt;debug) {</div><div class='del'>-            POP(v-&gt;tstack);</div><div class='del'>-            rb_funcall(v-&gt;parser, id_d_e_pop,</div><div class='del'>-                       3, v-&gt;state, v-&gt;tstack, v-&gt;vstack);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* shift/reduce error token */</div><div class='del'>-    if (act &gt; 0 &amp;&amp; act &lt; v-&gt;shift_n) {</div><div class='del'>-        D_puts("e shift");</div><div class='del'>-        SHIFT(v, act, ERROR_TOKEN, val);</div><div class='del'>-    }</div><div class='del'>-    else if (act &lt; 0 &amp;&amp; act &gt; -(v-&gt;reduce_n)) {</div><div class='del'>-        D_puts("e reduce");</div><div class='del'>-        REDUCE(v, act);</div><div class='del'>-    }</div><div class='del'>-    else if (act == v-&gt;shift_n) {</div><div class='del'>-        D_puts("e accept");</div><div class='del'>-        goto accept;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_raise(RaccBug, "[Racc Bug] unknown act value %ld", act);</div><div class='del'>-    }</div><div class='del'>-    goto error_recovered;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-shift(struct cparse_params *v, long act, VALUE tok, VALUE val)</div><div class='del'>-{</div><div class='del'>-    PUSH(v-&gt;vstack, val);</div><div class='del'>-    if (v-&gt;debug) {</div><div class='del'>-        PUSH(v-&gt;tstack, tok);</div><div class='del'>-        rb_funcall(v-&gt;parser, id_d_shift,</div><div class='del'>-                   3, tok, v-&gt;tstack, v-&gt;vstack);</div><div class='del'>-    }</div><div class='del'>-    v-&gt;curstate = act;</div><div class='del'>-    PUSH(v-&gt;state, LONG2NUM(v-&gt;curstate));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-reduce(struct cparse_params *v, long act)</div><div class='del'>-{</div><div class='del'>-    VALUE code;</div><div class='del'>-    v-&gt;ruleno = -act * 3;</div><div class='del'>-    code = rb_catch("racc_jump", reduce0, v-&gt;value_v);</div><div class='del'>-    v-&gt;errstatus = num_to_long(rb_ivar_get(v-&gt;parser, id_errstatus));</div><div class='del'>-    return NUM2INT(code);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-reduce0(VALUE val, VALUE data, VALUE self)</div><div class='del'>-{</div><div class='del'>-    struct cparse_params *v;</div><div class='del'>-    VALUE reduce_to, reduce_len, method_id;</div><div class='del'>-    long len;</div><div class='del'>-    ID mid;</div><div class='del'>-    VALUE tmp, tmp_t = Qundef, tmp_v = Qundef;</div><div class='del'>-    long i, k1, k2;</div><div class='del'>-    VALUE goto_state;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(data, struct cparse_params, v);</div><div class='del'>-    reduce_len = RARRAY(v-&gt;reduce_table)-&gt;ptr[v-&gt;ruleno];</div><div class='del'>-    reduce_to  = RARRAY(v-&gt;reduce_table)-&gt;ptr[v-&gt;ruleno+1];</div><div class='del'>-    method_id  = RARRAY(v-&gt;reduce_table)-&gt;ptr[v-&gt;ruleno+2];</div><div class='del'>-    len = NUM2LONG(reduce_len);</div><div class='del'>-    mid = value_to_id(method_id);</div><div class='del'>-</div><div class='del'>-    /* call action */</div><div class='del'>-    if (len == 0) {</div><div class='del'>-        tmp = Qnil;</div><div class='del'>-        if (mid != id_noreduce)</div><div class='del'>-            tmp_v = rb_ary_new();</div><div class='del'>-        if (v-&gt;debug)</div><div class='del'>-            tmp_t = rb_ary_new();</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        if (mid != id_noreduce) {</div><div class='del'>-            tmp_v = GET_TAIL(v-&gt;vstack, len);</div><div class='del'>-            tmp = RARRAY(tmp_v)-&gt;ptr[0];</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-            tmp = RARRAY(v-&gt;vstack)-&gt;ptr[ RARRAY(v-&gt;vstack)-&gt;len - len ];</div><div class='del'>-        }</div><div class='del'>-        CUT_TAIL(v-&gt;vstack, len);</div><div class='del'>-        if (v-&gt;debug) {</div><div class='del'>-            tmp_t = GET_TAIL(v-&gt;tstack, len);</div><div class='del'>-            CUT_TAIL(v-&gt;tstack, len);</div><div class='del'>-        }</div><div class='del'>-        CUT_TAIL(v-&gt;state, len);</div><div class='del'>-    }</div><div class='del'>-    if (mid != id_noreduce) {</div><div class='del'>-        if (v-&gt;use_result_var) {</div><div class='del'>-            tmp = rb_funcall(v-&gt;parser, mid,</div><div class='del'>-                             3, tmp_v, v-&gt;vstack, tmp);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-            tmp = rb_funcall(v-&gt;parser, mid,</div><div class='del'>-                             2, tmp_v, v-&gt;vstack);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* then push result */</div><div class='del'>-    PUSH(v-&gt;vstack, tmp);</div><div class='del'>-    if (v-&gt;debug) {</div><div class='del'>-        PUSH(v-&gt;tstack, reduce_to);</div><div class='del'>-        rb_funcall(v-&gt;parser, id_d_reduce,</div><div class='del'>-                   4, tmp_t, reduce_to, v-&gt;tstack, v-&gt;vstack);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* calculate transition state */</div><div class='del'>-    if (RARRAY(v-&gt;state)-&gt;len == 0)</div><div class='del'>-        rb_raise(RaccBug, "state stack unexpectedly empty");</div><div class='del'>-    k2 = num_to_long(LAST_I(v-&gt;state));</div><div class='del'>-    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='del'>-</div><div class='del'>-    tmp = AREF(v-&gt;goto_pointer, k1);</div><div class='del'>-    if (NIL_P(tmp)) goto notfound;</div><div class='del'>-</div><div class='del'>-    i = NUM2LONG(tmp) + k2;</div><div class='del'>-    D_printf("(goto) i=%ld\n", i);</div><div class='del'>-    if (i &lt; 0) goto notfound;</div><div class='del'>-</div><div class='del'>-    goto_state = AREF(v-&gt;goto_table, i);</div><div class='del'>-    if (NIL_P(goto_state)) {</div><div class='del'>-        D_puts("(goto) table[i] == nil");</div><div class='del'>-        goto notfound;</div><div class='del'>-    }</div><div class='del'>-    D_printf("(goto) table[i]=%ld (goto_state)\n", NUM2LONG(goto_state));</div><div class='del'>-</div><div class='del'>-    tmp = AREF(v-&gt;goto_check, i);</div><div class='del'>-    if (NIL_P(tmp)) {</div><div class='del'>-        D_puts("(goto) check[i] == nil");</div><div class='del'>-        goto notfound;</div><div class='del'>-    }</div><div class='del'>-    if (tmp != LONG2NUM(k1)) {</div><div class='del'>-        D_puts("(goto) check[i] != table[i]");</div><div class='del'>-        goto notfound;</div><div class='del'>-    }</div><div class='del'>-    D_printf("(goto) check[i]=%ld\n", NUM2LONG(tmp));</div><div class='del'>-</div><div class='del'>-    D_puts("(goto) found");</div><div class='del'>-  transit:</div><div class='del'>-    PUSH(v-&gt;state, goto_state);</div><div class='del'>-    v-&gt;curstate = NUM2LONG(goto_state);</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-</div><div class='del'>-  notfound:</div><div class='del'>-    D_puts("(goto) not found: use default");</div><div class='del'>-    /* overwrite `goto-state' by default value */</div><div class='del'>-    goto_state = AREF(v-&gt;goto_default, k1);</div><div class='del'>-    goto transit;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* -----------------------------------------------------------------------</div><div class='del'>-                          Ruby Interface</div><div class='del'>------------------------------------------------------------------------ */</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_cparse(void)</div><div class='del'>-{</div><div class='del'>-    VALUE Racc, Parser;</div><div class='del'>-    ID id_racc = rb_intern("Racc");</div><div class='del'>-</div><div class='del'>-    if (rb_const_defined(rb_cObject, id_racc)) {</div><div class='del'>-        Racc = rb_const_get(rb_cObject, id_racc);</div><div class='del'>-        Parser = rb_const_get_at(Racc, rb_intern("Parser"));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        Racc = rb_define_module("Racc");</div><div class='del'>-        Parser = rb_define_class_under(Racc, "Parser", rb_cObject);</div><div class='del'>-    }</div><div class='del'>-    rb_define_private_method(Parser, "_racc_do_parse_c", racc_cparse, 2);</div><div class='del'>-    rb_define_private_method(Parser, "_racc_yyparse_c", racc_yyparse, 4);</div><div class='del'>-    rb_define_const(Parser, "Racc_Runtime_Core_Version_C",</div><div class='del'>-                    rb_str_new2(RACC_VERSION));</div><div class='del'>-    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='del'>-</div><div class='del'>-    CparseParams = rb_define_class_under(Racc, "CparseParams", rb_cObject);</div><div class='del'>-</div><div class='del'>-    RaccBug = rb_eRuntimeError;</div><div class='del'>-</div><div class='del'>-    id_yydebug      = rb_intern("@yydebug");</div><div class='del'>-    id_nexttoken    = rb_intern("next_token");</div><div class='del'>-    id_onerror      = rb_intern("on_error");</div><div class='del'>-    id_noreduce     = rb_intern("_reduce_none");</div><div class='del'>-    id_errstatus    = rb_intern("@racc_error_status");</div><div class='del'>-</div><div class='del'>-    id_d_shift       = rb_intern("racc_shift");</div><div class='del'>-    id_d_reduce      = rb_intern("racc_reduce");</div><div class='del'>-    id_d_accept      = rb_intern("racc_accept");</div><div class='del'>-    id_d_read_token  = rb_intern("racc_read_token");</div><div class='del'>-    id_d_next_state  = rb_intern("racc_next_state");</div><div class='del'>-    id_d_e_pop       = rb_intern("racc_e_pop");</div><div class='del'>-}</div><div class='head'>diff --git a/ext/racc/cparse/depend b/ext/racc/cparse/depend<br/>deleted file mode 100644<br/>index 7b06a880f5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/racc/cparse/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/racc/cparse/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-cparse.o: cparse.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/racc/cparse/extconf.rb b/ext/racc/cparse/extconf.rb<br/>deleted file mode 100644<br/>index dd953a7e15..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/racc/cparse/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/racc/cparse/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-create_makefile 'racc/cparse'</div><div class='head'>diff --git a/ext/readline/.cvsignore b/ext/readline/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/readline/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/.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/readline/README b/ext/readline/README<br/>deleted file mode 100644<br/>index 9bbf325c99..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/readline/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-Extension for GNU Readline Library</div><div class='del'>-</div><div class='del'>-Example:</div><div class='del'>-</div><div class='del'>-  require "readline"</div><div class='del'>-  include Readline</div><div class='del'>-</div><div class='del'>-  line = readline("Prompt&gt; ", true)</div><div class='del'>-</div><div class='del'>-[Readline]</div><div class='del'>-</div><div class='del'>-&lt;module function&gt;</div><div class='del'>-</div><div class='del'>-readline(prompt, add_history=nil)</div><div class='del'>-</div><div class='del'>-  Reads one line with line editing.  The inputted line is added to the</div><div class='del'>-  history if add_history is true.</div><div class='del'>-</div><div class='del'>-&lt;class methods&gt;</div><div class='del'>-</div><div class='del'>-completion_proc = proc</div><div class='del'>-</div><div class='del'>-  Specifies a Proc object to determine completion behavior.  It</div><div class='del'>-  should take input-string, and return an array of completion</div><div class='del'>-  candidates.</div><div class='del'>-</div><div class='del'>-completion_proc</div><div class='del'>-</div><div class='del'>-  Returns the completion Proc object.</div><div class='del'>-</div><div class='del'>-completion_case_fold = bool</div><div class='del'>-</div><div class='del'>-  Sets whether or not to ignore case on completion.</div><div class='del'>-</div><div class='del'>-completion_case_fold</div><div class='del'>-</div><div class='del'>-  Returns true if completion ignores case.</div><div class='del'>-</div><div class='del'>-completion_append_character = char</div><div class='del'>-</div><div class='del'>-  Specifies a character to be appended on completion.</div><div class='del'>-  Nothing will be appended if an empty string ("") or nil is</div><div class='del'>-  specified.</div><div class='del'>-</div><div class='del'>-completion_append_character</div><div class='del'>-</div><div class='del'>-  Returns a string containing a character to be appended on</div><div class='del'>-  completion.  The default is a space (" ").</div><div class='del'>-</div><div class='del'>-vi_editing_mode</div><div class='del'>-</div><div class='del'>-  Specifies VI editing mode.</div><div class='del'>-</div><div class='del'>-emacs_editing_mode</div><div class='del'>-</div><div class='del'>-  Specifies Emacs editing mode.</div><div class='del'>-</div><div class='del'>-&lt;class constants&gt;</div><div class='del'>-</div><div class='del'>-HISTORY</div><div class='del'>-</div><div class='del'>-The history buffer.  It behaves just like an array.</div><div class='head'>diff --git a/ext/readline/README.ja b/ext/readline/README.ja<br/>deleted file mode 100644<br/>index beb951fbf0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/readline/README.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/README.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,63 +0,0 @@</div><div class='del'>-GNU Readline Library¤òÍøÍÑ¤¹¤ë¤¿¤á¤Î³ÈÄ¥¥â¥¸¥å¡¼¥ë¤Ç¤¹¡£</div><div class='del'>-</div><div class='del'>-require "readline"</div><div class='del'>-include Readline</div><div class='del'>-</div><div class='del'>-line = readline("Prompt&gt; ", true)</div><div class='del'>-</div><div class='del'>-¤Î¤è¤¦¤Ë»ÈÍÑ¤·¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-</div><div class='del'>-[Readline]</div><div class='del'>-</div><div class='del'>-&lt;¥â¥¸¥å¡¼¥ë´Ø¿ô&gt;</div><div class='del'>-</div><div class='del'>-readline(prompt, add_history=nil)</div><div class='del'>-</div><div class='del'>-  °ì¹ÔÆþÎÏ¤òÆÉ¤ß¹þ¤ß¤Þ¤¹¡£</div><div class='del'>-  add_history¤¬true¤Î¾ì¹ç¡¢¥Ò¥¹¥È¥ê¤ËÆÉ¤ß¹þ¤ó¤ÀÊ¸»úÎó¤òÄÉ²Ã¤·¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-&lt;¥¯¥é¥¹¥á¥½¥Ã¥É&gt;</div><div class='del'>-</div><div class='del'>-completion_proc = proc</div><div class='del'>-</div><div class='del'>-  Êä´°»þ¤ÎÆ°ºî¤ò·èÄê¤¹¤ëProc¥ª¥Ö¥¸¥§¥¯¥È¤ò»ØÄê¤·¤Þ¤¹¡£</div><div class='del'>-  proc¤Ï°ú¿ô¤ËÆþÎÏÊ¸»úÎó¤ò¼è¤ê¡¢¸õÊäÊ¸»úÎó¤ÎÇÛÎó¤òÊÖ¤¹¤è¤¦¤Ë</div><div class='del'>-  ¤·¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-</div><div class='del'>-completion_proc</div><div class='del'>-</div><div class='del'>-  Êä´°»þ¤ÎÆ°ºî¤ò·èÄê¤¹¤ëProc¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤·¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-completion_case_fold = case_fold</div><div class='del'>-</div><div class='del'>-  Êä´°»þ¤ËÂçÊ¸»ú¾®Ê¸»ú¤ò¶èÊÌ¤·¤Ê¤¤¾ì¹ç¡¢true¤ò»ØÄê¤·¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-completion_case_fold</div><div class='del'>-</div><div class='del'>-  Êä´°»þ¤ËÂçÊ¸»ú¾®Ê¸»ú¤ò¶èÊÌ¤·¤Ê¤¤¾ì¹ç¡¢true¤òÊÖ¤·¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-completion_append_character = char</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'>-completion_append_character</div><div class='del'>-</div><div class='del'>-  Êä´°»þ¤ËÉÕ²Ã¤µ¤ì¤ëÊ¸»ú¤òÊ¸»úÎó¤ÇÊÖ¤·¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ï</div><div class='del'>-  ¶õÇò (" ") ¤Ç¤¹¡£</div><div class='del'>-</div><div class='del'>-vi_editing_mode</div><div class='del'>-</div><div class='del'>-  VI¥â¡¼¥É¤Ë¤Ê¤ê¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-emacs_editing_mode</div><div class='del'>-</div><div class='del'>-  Emacs¥â¡¼¥É¤Ë¤Ê¤ê¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-&lt;¥¯¥é¥¹Äê¿ô&gt;</div><div class='del'>-</div><div class='del'>-HISTORY</div><div class='del'>-</div><div class='del'>-¥Ò¥¹¥È¥ê¤ËÂÐ¤¹¤ëÁàºî¤Ï¤³¤ÎÄê¿ô¤òÄÌ¤·¤Æ¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-ÇÛÎó¤ÈÆ±¤¸¤è¤¦¤Ë°·¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</div><div class='head'>diff --git a/ext/readline/depend b/ext/readline/depend<br/>deleted file mode 100644<br/>index 6570c5a036..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/readline/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-readline.o: readline.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/readline/extconf.rb b/ext/readline/extconf.rb<br/>deleted file mode 100644<br/>index b820c0b32f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/readline/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,64 +0,0 @@</div><div class='del'>-require "mkmf"</div><div class='del'>-</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='del'>-dir_config("readline")</div><div class='del'>-enable_libedit = enable_config("libedit")</div><div class='del'>-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='del'>-  have_library("curses", "tgetnum")</div><div class='del'>-</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='del'>-  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='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-have_func("rl_filename_completion_function")</div><div class='del'>-have_func("rl_username_completion_function")</div><div class='del'>-have_func("rl_completion_matches")</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("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/>deleted file mode 100644<br/>index c9acaadac9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/readline/readline.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/readline/readline.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,839 +0,0 @@</div><div class='del'>-/* readline.c -- GNU Readline module</div><div class='del'>-   Copyright (C) 1997-2001  Shugo Maeda */</div><div class='del'>-</div><div class='del'>-#include "config.h"</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-#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='del'>-#include &lt;readline/readline.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_READLINE_HISTORY_H</div><div class='del'>-#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='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "rubyio.h"</div><div class='del'>-#include "rubysig.h"</div><div class='del'>-</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'>-static VALUE mReadline;</div><div class='del'>-</div><div class='del'>-#define TOLOWER(c) (isupper(c) ? tolower(c) : c)</div><div class='del'>-</div><div class='del'>-#define COMPLETION_PROC "completion_proc"</div><div class='del'>-#define COMPLETION_CASE_FOLD "completion_case_fold"</div><div class='del'>-static ID completion_proc, completion_case_fold;</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_RL_FILENAME_COMPLETION_FUNCTION</div><div class='del'>-# define rl_filename_completion_function filename_completion_function</div><div class='del'>-#endif</div><div class='del'>-#ifndef HAVE_RL_USERNAME_COMPLETION_FUNCTION</div><div class='del'>-# define rl_username_completion_function username_completion_function</div><div class='del'>-#endif</div><div class='del'>-#ifndef HAVE_RL_COMPLETION_MATCHES</div><div class='del'>-# define rl_completion_matches completion_matches</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-#ifdef HAVE_RL_EVENT_HOOK</div><div class='del'>-#ifdef DOSISH</div><div class='del'>-#define BUSY_WAIT 1</div><div class='del'>-#else</div><div class='del'>-#define BUSY_WAIT 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int readline_event(void);</div><div class='del'>-static int</div><div class='del'>-readline_event()</div><div class='del'>-{</div><div class='del'>-#if BUSY_WAIT</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-#else</div><div class='del'>-    fd_set rset;</div><div class='del'>-</div><div class='del'>-    FD_ZERO(&amp;rset);</div><div class='del'>-    FD_SET(fileno(rl_instream), &amp;rset);</div><div class='del'>-    rb_thread_select(fileno(rl_instream) + 1, &amp;rset, NULL, NULL, NULL);</div><div class='del'>-    return 0;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_readline(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 tmp, add_hist, result;</div><div class='del'>-    char *prompt = NULL;</div><div class='del'>-    char *buff;</div><div class='del'>-    int status;</div><div class='del'>-    rb_io_t *ofp, *ifp;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    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='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!isatty(0) &amp;&amp; errno == EBADF) rb_raise(rb_eIOError, "stdin closed");</div><div class='del'>-</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='del'>-    buff = (char*)rb_protect((VALUE(*)_((VALUE)))readline, (VALUE)prompt,</div><div class='del'>-                              &amp;status);</div><div class='del'>-    if (status) {</div><div class='del'>-#if defined HAVE_RL_CLEANUP_AFTER_SIGNAL</div><div class='del'>-        /* restore terminal mode and signal handler*/</div><div class='del'>-        rl_cleanup_after_signal();</div><div class='del'>-#elif defined HAVE_RL_DEPREP_TERM_FUNCTION</div><div class='del'>-        /* 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='del'>-#else</div><div class='del'>-        rl_deprep_terminal();</div><div class='del'>-#endif</div><div class='del'>-        rb_jump_tag(status);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RTEST(add_hist) &amp;&amp; buff) {</div><div class='del'>-	add_history(buff);</div><div class='del'>-    }</div><div class='del'>-    if (buff)</div><div class='del'>-	result = rb_tainted_str_new2(buff);</div><div class='del'>-    else</div><div class='del'>-	result = Qnil;</div><div class='del'>-    if (buff) free(buff);</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_set_completion_proc(self, proc)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE proc;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_get_completion_proc(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return rb_attr_get(mReadline, completion_proc);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_set_completion_case_fold(self, val)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return rb_ivar_set(mReadline, completion_case_fold, val);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_get_completion_case_fold(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return rb_attr_get(mReadline, completion_case_fold);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char **</div><div class='del'>-readline_attempted_completion_function(text, start, end)</div><div class='del'>-    const char *text;</div><div class='del'>-    int start;</div><div class='del'>-    int end;</div><div class='del'>-{</div><div class='del'>-    VALUE proc, ary, temp;</div><div class='del'>-    char **result;</div><div class='del'>-    int case_fold;</div><div class='del'>-    int i, matches;</div><div class='del'>-</div><div class='del'>-    proc = rb_attr_get(mReadline, completion_proc);</div><div class='del'>-    if (NIL_P(proc))</div><div class='del'>-	return NULL;</div><div class='del'>-#ifdef HAVE_RL_ATTEMPTED_COMPLETION_OVER</div><div class='del'>-    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='del'>-    ary = rb_funcall(proc, rb_intern("call"), 1, rb_tainted_str_new2(text));</div><div class='del'>-    if (TYPE(ary) != T_ARRAY)</div><div class='del'>-	ary = rb_Array(ary);</div><div class='del'>-    matches = RARRAY(ary)-&gt;len;</div><div class='del'>-    if (matches == 0)</div><div class='del'>-	return NULL;</div><div class='del'>-    result = ALLOC_N(char *, matches + 2);</div><div class='del'>-    for (i = 0; i &lt; matches; i++) {</div><div class='del'>-	temp = rb_obj_as_string(RARRAY(ary)-&gt;ptr[i]);</div><div class='del'>-	result[i + 1] = ALLOC_N(char, RSTRING(temp)-&gt;len + 1);</div><div class='del'>-	strcpy(result[i + 1], RSTRING(temp)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-    result[matches + 1] = NULL;</div><div class='del'>-</div><div class='del'>-    if (matches == 1) {</div><div class='del'>-        result[0] = strdup(result[1]);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	register int i = 1;</div><div class='del'>-	int low = 100000;</div><div class='del'>-</div><div class='del'>-	while (i &lt; matches) {</div><div class='del'>-	    register int c1, c2, si;</div><div class='del'>-</div><div class='del'>-	    if (case_fold) {</div><div class='del'>-		for (si = 0;</div><div class='del'>-		     (c1 = TOLOWER(result[i][si])) &amp;&amp;</div><div class='del'>-			 (c2 = TOLOWER(result[i + 1][si]));</div><div class='del'>-		     si++)</div><div class='del'>-		    if (c1 != c2) break;</div><div class='del'>-	    } else {</div><div class='del'>-		for (si = 0;</div><div class='del'>-		     (c1 = result[i][si]) &amp;&amp;</div><div class='del'>-			 (c2 = result[i + 1][si]);</div><div class='del'>-		     si++)</div><div class='del'>-		    if (c1 != c2) break;</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    if (low &gt; si) low = si;</div><div class='del'>-	    i++;</div><div class='del'>-	}</div><div class='del'>-	result[0] = ALLOC_N(char, low + 1);</div><div class='del'>-	strncpy(result[0], result[1], low);</div><div class='del'>-	result[0][low] = '\0';</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_vi_editing_mode(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_VI_EDITING_MODE</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rl_vi_editing_mode(1,0);</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 /* HAVE_RL_VI_EDITING_MODE */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_emacs_editing_mode(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_EMACS_EDITING_MODE</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rl_emacs_editing_mode(1,0);</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 /* HAVE_RL_EMACS_EDITING_MODE */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_set_completion_append_character(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</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='del'>-	rl_completion_append_character = '\0';</div><div class='del'>-    }</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='del'>-    return self;</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_COMPLETION_APPEND_CHARACTER */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_get_completion_append_character(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rl_completion_append_character == '\0')</div><div class='del'>-	return Qnil;</div><div class='del'>-</div><div class='del'>-    str = rb_str_new("", 1);</div><div class='del'>-    RSTRING(str)-&gt;ptr[0] = rl_completion_append_character;</div><div class='del'>-    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 /* HAVE_RL_COMPLETION_APPEND_CHARACTER */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_set_basic_word_break_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_BASIC_WORD_BREAK_CHARACTERS</div><div class='del'>-    static char *basic_word_break_characters = NULL;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    if (basic_word_break_characters == NULL) {</div><div class='del'>-	basic_word_break_characters =</div><div class='del'>-	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	REALLOC_N(basic_word_break_characters, char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    strncpy(basic_word_break_characters,</div><div class='del'>-	    RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-    basic_word_break_characters[RSTRING(str)-&gt;len] = '\0';</div><div class='del'>-    rl_basic_word_break_characters = basic_word_break_characters;</div><div class='del'>-    return self;</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_BASIC_WORD_BREAK_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_get_basic_word_break_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_BASIC_WORD_BREAK_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rl_basic_word_break_characters == NULL)</div><div class='del'>-	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_basic_word_break_characters);</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_BASIC_WORD_BREAK_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_set_completer_word_break_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS</div><div class='del'>-    static char *completer_word_break_characters = NULL;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    if (completer_word_break_characters == NULL) {</div><div class='del'>-	completer_word_break_characters =</div><div class='del'>-	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	REALLOC_N(completer_word_break_characters, char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    strncpy(completer_word_break_characters,</div><div class='del'>-	    RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-    completer_word_break_characters[RSTRING(str)-&gt;len] = '\0';</div><div class='del'>-    rl_completer_word_break_characters = completer_word_break_characters;</div><div class='del'>-    return self;</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_COMPLETER_WORD_BREAK_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_get_completer_word_break_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rl_completer_word_break_characters == NULL)</div><div class='del'>-	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_completer_word_break_characters);</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_COMPLETER_WORD_BREAK_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_set_basic_quote_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_BASIC_QUOTE_CHARACTERS</div><div class='del'>-    static char *basic_quote_characters = NULL;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    if (basic_quote_characters == NULL) {</div><div class='del'>-	basic_quote_characters =</div><div class='del'>-	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	REALLOC_N(basic_quote_characters, char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    strncpy(basic_quote_characters,</div><div class='del'>-	    RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-    basic_quote_characters[RSTRING(str)-&gt;len] = '\0';</div><div class='del'>-    rl_basic_quote_characters = basic_quote_characters;</div><div class='del'>-</div><div class='del'>-    return self;</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_BASIC_QUOTE_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_get_basic_quote_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_BASIC_QUOTE_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rl_basic_quote_characters == NULL)</div><div class='del'>-	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_basic_quote_characters);</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_BASIC_QUOTE_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_set_completer_quote_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_COMPLETER_QUOTE_CHARACTERS</div><div class='del'>-    static char *completer_quote_characters = NULL;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    if (completer_quote_characters == NULL) {</div><div class='del'>-	completer_quote_characters =</div><div class='del'>-	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	REALLOC_N(completer_quote_characters, char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    strncpy(completer_quote_characters,</div><div class='del'>-	    RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-    completer_quote_characters[RSTRING(str)-&gt;len] = '\0';</div><div class='del'>-    rl_completer_quote_characters = completer_quote_characters;</div><div class='del'>-</div><div class='del'>-    return self;</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_COMPLETER_QUOTE_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_get_completer_quote_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_COMPLETER_QUOTE_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rl_completer_quote_characters == NULL)</div><div class='del'>-	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_completer_quote_characters);</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_COMPLETER_QUOTE_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_set_filename_quote_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS</div><div class='del'>-    static char *filename_quote_characters = NULL;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    if (filename_quote_characters == NULL) {</div><div class='del'>-	filename_quote_characters =</div><div class='del'>-	    ALLOC_N(char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	REALLOC_N(filename_quote_characters, char, RSTRING(str)-&gt;len + 1);</div><div class='del'>-    }</div><div class='del'>-    strncpy(filename_quote_characters,</div><div class='del'>-	    RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-    filename_quote_characters[RSTRING(str)-&gt;len] = '\0';</div><div class='del'>-    rl_filename_quote_characters = filename_quote_characters;</div><div class='del'>-</div><div class='del'>-    return self;</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_FILENAME_QUOTE_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-readline_s_get_filename_quote_characters(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_RL_FILENAME_QUOTE_CHARACTERS</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rl_filename_quote_characters == NULL)</div><div class='del'>-	return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(rl_filename_quote_characters);</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_FILENAME_QUOTE_CHARACTERS */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_to_s(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_str_new2("HISTORY");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_get(self, index)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE index;</div><div class='del'>-{</div><div class='del'>-    HIST_ENTRY *entry;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    i = NUM2INT(index);</div><div class='del'>-    if (i &lt; 0) {</div><div class='del'>-        i += history_length;</div><div class='del'>-    }</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='del'>-    }</div><div class='del'>-    return rb_tainted_str_new2(entry-&gt;line);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_set(self, index, str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE index;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_REPLACE_HISTORY_ENTRY</div><div class='del'>-    HIST_ENTRY *entry;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    i = NUM2INT(index);</div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    if (i &lt; 0) {</div><div class='del'>-        i += history_length;</div><div class='del'>-    }</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='del'>-    }</div><div class='del'>-    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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_push(self, str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</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='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_push_method(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 str;</div><div class='del'>-    </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    while (argc--) {</div><div class='del'>-	str = *argv++;</div><div class='del'>-	SafeStringValue(str);</div><div class='del'>-	add_history(RSTRING(str)-&gt;ptr);</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'>-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='del'>-hist_pop(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</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='del'>-    } else {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_shift(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (history_length &gt; 0) {</div><div class='del'>-	return rb_remove_history(0);</div><div class='del'>-    } else {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_each(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    HIST_ENTRY *entry;</div><div class='del'>-    int i;</div><div class='del'>-</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='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'>-hist_length(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return INT2NUM(history_length);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_empty_p(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return history_length == 0 ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hist_delete_at(self, index)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE index;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    i = NUM2INT(index);</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    return rb_remove_history(i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-filename_completion_proc_call(self, str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-    char **matches;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    matches = rl_completion_matches(StringValuePtr(str),</div><div class='del'>-				    rl_filename_completion_function);</div><div class='del'>-    if (matches) {</div><div class='del'>-	result = rb_ary_new();</div><div class='del'>-	for (i = 0; matches[i]; i++) {</div><div class='del'>-	    rb_ary_push(result, rb_tainted_str_new2(matches[i]));</div><div class='del'>-	    free(matches[i]);</div><div class='del'>-	}</div><div class='del'>-	free(matches);</div><div class='del'>-	if (RARRAY(result)-&gt;len &gt;= 2)</div><div class='del'>-	    rb_ary_shift(result);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	result = Qnil;</div><div class='del'>-    }</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-username_completion_proc_call(self, str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-    char **matches;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    matches = rl_completion_matches(StringValuePtr(str),</div><div class='del'>-				    rl_username_completion_function);</div><div class='del'>-    if (matches) {</div><div class='del'>-	result = rb_ary_new();</div><div class='del'>-	for (i = 0; matches[i]; i++) {</div><div class='del'>-	    rb_ary_push(result, rb_tainted_str_new2(matches[i]));</div><div class='del'>-	    free(matches[i]);</div><div class='del'>-	}</div><div class='del'>-	free(matches);</div><div class='del'>-	if (RARRAY(result)-&gt;len &gt;= 2)</div><div class='del'>-	    rb_ary_shift(result);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	result = Qnil;</div><div class='del'>-    }</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_readline()</div><div class='del'>-{</div><div class='del'>-    VALUE history, fcomp, ucomp;</div><div class='del'>-</div><div class='del'>-    /* Allow conditional parsing of the ~/.inputrc file. */</div><div class='del'>-    rl_readline_name = "Ruby";</div><div class='del'>-</div><div class='del'>-    using_history();</div><div class='del'>-</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='del'>-    mReadline = rb_define_module("Readline");</div><div class='del'>-    rb_define_module_function(mReadline, "readline",</div><div class='del'>-			      readline_readline, -1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completion_proc=",</div><div class='del'>-			       readline_s_set_completion_proc, 1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completion_proc",</div><div class='del'>-			       readline_s_get_completion_proc, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completion_case_fold=",</div><div class='del'>-			       readline_s_set_completion_case_fold, 1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completion_case_fold",</div><div class='del'>-			       readline_s_get_completion_case_fold, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "vi_editing_mode",</div><div class='del'>-			       readline_s_vi_editing_mode, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "emacs_editing_mode",</div><div class='del'>-			       readline_s_emacs_editing_mode, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completion_append_character=",</div><div class='del'>-			       readline_s_set_completion_append_character, 1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completion_append_character",</div><div class='del'>-			       readline_s_get_completion_append_character, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "basic_word_break_characters=",</div><div class='del'>-			       readline_s_set_basic_word_break_characters, 1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "basic_word_break_characters",</div><div class='del'>-			       readline_s_get_basic_word_break_characters, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completer_word_break_characters=",</div><div class='del'>-			       readline_s_set_completer_word_break_characters, 1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completer_word_break_characters",</div><div class='del'>-			       readline_s_get_completer_word_break_characters, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "basic_quote_characters=",</div><div class='del'>-			       readline_s_set_basic_quote_characters, 1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "basic_quote_characters",</div><div class='del'>-			       readline_s_get_basic_quote_characters, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completer_quote_characters=",</div><div class='del'>-			       readline_s_set_completer_quote_characters, 1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "completer_quote_characters",</div><div class='del'>-			       readline_s_get_completer_quote_characters, 0);</div><div class='del'>-    rb_define_singleton_method(mReadline, "filename_quote_characters=",</div><div class='del'>-			       readline_s_set_filename_quote_characters, 1);</div><div class='del'>-    rb_define_singleton_method(mReadline, "filename_quote_characters",</div><div class='del'>-			       readline_s_get_filename_quote_characters, 0);</div><div class='del'>-</div><div class='del'>-    history = rb_obj_alloc(rb_cObject);</div><div class='del'>-    rb_extend_object(history, rb_mEnumerable);</div><div class='del'>-    rb_define_singleton_method(history,"to_s", hist_to_s, 0);</div><div class='del'>-    rb_define_singleton_method(history,"[]", hist_get, 1);</div><div class='del'>-    rb_define_singleton_method(history,"[]=", hist_set, 2);</div><div class='del'>-    rb_define_singleton_method(history,"&lt;&lt;", hist_push, 1);</div><div class='del'>-    rb_define_singleton_method(history,"push", hist_push_method, -1);</div><div class='del'>-    rb_define_singleton_method(history,"pop", hist_pop, 0);</div><div class='del'>-    rb_define_singleton_method(history,"shift", hist_shift, 0);</div><div class='del'>-    rb_define_singleton_method(history,"each", hist_each, 0);</div><div class='del'>-    rb_define_singleton_method(history,"length", hist_length, 0);</div><div class='del'>-    rb_define_singleton_method(history,"size", hist_length, 0);</div><div class='del'>-    rb_define_singleton_method(history,"empty?", hist_empty_p, 0);</div><div class='del'>-    rb_define_singleton_method(history,"delete_at", hist_delete_at, 1);</div><div class='del'>-    rb_define_const(mReadline, "HISTORY", history);</div><div class='del'>-</div><div class='del'>-    fcomp = rb_obj_alloc(rb_cObject);</div><div class='del'>-    rb_define_singleton_method(fcomp, "call",</div><div class='del'>-			       filename_completion_proc_call, 1);</div><div class='del'>-    rb_define_const(mReadline, "FILENAME_COMPLETION_PROC", fcomp);</div><div class='del'>-</div><div class='del'>-    ucomp = rb_obj_alloc(rb_cObject);</div><div class='del'>-    rb_define_singleton_method(ucomp, "call",</div><div class='del'>-			       username_completion_proc_call, 1);</div><div class='del'>-    rb_define_const(mReadline, "USERNAME_COMPLETION_PROC", ucomp);</div><div class='del'>-#if defined HAVE_RL_LIBRARY_VERSION</div><div class='del'>-    rb_define_const(mReadline, "VERSION", rb_str_new2(rl_library_version));</div><div class='del'>-#else</div><div class='del'>-    rb_define_const(mReadline, "VERSION",</div><div class='del'>-                    rb_str_new2("2.0 or before version"));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rl_attempted_completion_function = readline_attempted_completion_function;</div><div class='del'>-#ifdef HAVE_RL_EVENT_HOOK</div><div class='del'>-    rl_event_hook = readline_event;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_RL_CLEAR_SIGNALS</div><div class='del'>-    rl_clear_signals();</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='head'>diff --git a/ext/sdbm/.cvsignore b/ext/sdbm/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/sdbm/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/.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/sdbm/_sdbm.c b/ext/sdbm/_sdbm.c<br/>deleted file mode 100644<br/>index 5b34824afc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/sdbm/_sdbm.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/_sdbm.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,973 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * sdbm - ndbm work-alike hashed database library</div><div class='del'>- * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).</div><div class='del'>- * author: oz@nexus.yorku.ca</div><div class='del'>- * status: public domain.</div><div class='del'>- *</div><div class='del'>- * core routines</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef lint</div><div class='del'>-/*char sdbm_rcsid[] = "$Id$";*/</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include "sdbm.h"</div><div class='del'>-#include "config.h"</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * sdbm - ndbm work-alike hashed database library</div><div class='del'>- * tuning and portability constructs [not nearly enough]</div><div class='del'>- * author: oz@nexus.yorku.ca</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#define BYTESIZ		8</div><div class='del'>-</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'>-#ifdef BSD42</div><div class='del'>-#define SEEK_SET	L_SET</div><div class='del'>-#define	memset(s,c,n)	bzero(s, n)		/* only when c is zero */</div><div class='del'>-#define	memcpy(s1,s2,n)	bcopy(s2, s1, n)</div><div class='del'>-#define	memcmp(s1,s2,n)	bcmp(s1,s2,n)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * important tuning parms (hah)</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#define SEEDUPS		/* always detect duplicates */</div><div class='del'>-#define BADMESS		/* generate a message for worst case:</div><div class='del'>-			   cannot make room after SPLTMAX splits */</div><div class='del'>-/*</div><div class='del'>- * misc</div><div class='del'>- */</div><div class='del'>-#ifdef DEBUG</div><div class='del'>-#define debug(x)	printf x</div><div class='del'>-#else</div><div class='del'>-#define debug(x)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef BIG_E</div><div class='del'>-#define GET_SHORT(p, i)	(((unsigned)((unsigned char *)(p))[(i)*2] &lt;&lt; 8) + (((unsigned char *)(p))[(i)*2 + 1]))</div><div class='del'>-#define PUT_SHORT(p, i, s) (((unsigned char *)(p))[(i)*2] = (unsigned char)((s) &gt;&gt; 8), ((unsigned char *)(p))[(i)*2 + 1] = (unsigned char)(s))</div><div class='del'>-#else</div><div class='del'>-#define GET_SHORT(p, i)	((p)[i])</div><div class='del'>-#define PUT_SHORT(p, i, s)	((p)[i] = (s))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*#include "pair.h"*/</div><div class='del'>-static int   fitpair proto((char *, int));</div><div class='del'>-static void  putpair proto((char *, datum, datum));</div><div class='del'>-static datum getpair proto((char *, datum));</div><div class='del'>-static int   delpair proto((char *, datum));</div><div class='del'>-static int   chkpage proto((char *));</div><div class='del'>-static datum getnkey proto((char *, int));</div><div class='del'>-static void  splpage proto((char *, char *, long));</div><div class='del'>-#ifdef SEEDUPS</div><div class='del'>-static int   duppair proto((char *, datum));</div><div class='del'>-#endif</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'>-#ifdef DOSISH</div><div class='del'>-#include &lt;io.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#include &lt;sys/stat.h&gt;</div><div class='del'>-#ifdef BSD42</div><div class='del'>-#include &lt;sys/file.h&gt;</div><div class='del'>-#else</div><div class='del'>-#include &lt;fcntl.h&gt;</div><div class='del'>-/*#include &lt;memory.h&gt;*/</div><div class='del'>-#endif</div><div class='del'>-#ifndef O_BINARY</div><div class='del'>-#define O_BINARY	0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-#ifndef EPERM</div><div class='del'>-#define EPERM	EACCES</div><div class='del'>-#endif</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-</div><div class='del'>-#ifdef __STDC__</div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef NULL</div><div class='del'>-#define NULL	0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * externals</div><div class='del'>- */</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='del'>-extern int errno;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * forward</div><div class='del'>- */</div><div class='del'>-static int getdbit proto((DBM *, long));</div><div class='del'>-static int setdbit proto((DBM *, long));</div><div class='del'>-static int getpage proto((DBM *, long));</div><div class='del'>-static datum getnext proto((DBM *));</div><div class='del'>-static int makroom proto((DBM *, long, int));</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * useful macros</div><div class='del'>- */</div><div class='del'>-#define bad(x)		((x).dptr == NULL || (x).dsize &lt; 0)</div><div class='del'>-#define exhash(item)	sdbm_hash((item).dptr, (item).dsize)</div><div class='del'>-#define ioerr(db)	((db)-&gt;flags |= DBM_IOERR)</div><div class='del'>-</div><div class='del'>-#define OFF_PAG(off)	(long) (off) * PBLKSIZ</div><div class='del'>-#define OFF_DIR(off)	(long) (off) * DBLKSIZ</div><div class='del'>-</div><div class='del'>-static long masks[] = {</div><div class='del'>-	000000000000L, 000000000001L, 000000000003L,</div><div class='del'>-	000000000007L, 000000000017L, 000000000037L,</div><div class='del'>-	000000000077L, 000000000177L, 000000000377L,</div><div class='del'>-	000000000777L, 000000001777L, 000000003777L,</div><div class='del'>-	000000007777L, 000000017777L, 000000037777L,</div><div class='del'>-	000000077777L, 000000177777L, 000000377777L,</div><div class='del'>-	000000777777L, 000001777777L, 000003777777L,</div><div class='del'>-	000007777777L, 000017777777L, 000037777777L,</div><div class='del'>-	000077777777L, 000177777777L, 000377777777L,</div><div class='del'>-	000777777777L, 001777777777L, 003777777777L,</div><div class='del'>-	007777777777L, 017777777777L</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-datum nullitem = {NULL, 0};</div><div class='del'>-</div><div class='del'>-DBM *</div><div class='del'>-sdbm_open(file, flags, mode)</div><div class='del'>-register char *file;</div><div class='del'>-register int flags;</div><div class='del'>-register int mode;</div><div class='del'>-{</div><div class='del'>-	register DBM *db;</div><div class='del'>-	register char *dirname;</div><div class='del'>-	register char *pagname;</div><div class='del'>-	register int n;</div><div class='del'>-</div><div class='del'>-	if (file == NULL || !*file)</div><div class='del'>-		return errno = EINVAL, (DBM *) NULL;</div><div class='del'>-/*</div><div class='del'>- * need space for two seperate filenames</div><div class='del'>- */</div><div class='del'>-	n = strlen(file) * 2 + strlen(DIRFEXT) + strlen(PAGFEXT) + 2;</div><div class='del'>-</div><div class='del'>-	if ((dirname = malloc((unsigned) n)) == NULL)</div><div class='del'>-		return errno = ENOMEM, (DBM *) NULL;</div><div class='del'>-/*</div><div class='del'>- * build the file names</div><div class='del'>- */</div><div class='del'>-	dirname = strcat(strcpy(dirname, file), DIRFEXT);</div><div class='del'>-	pagname = strcpy(dirname + strlen(dirname) + 1, file);</div><div class='del'>-	pagname = strcat(pagname, PAGFEXT);</div><div class='del'>-</div><div class='del'>-	db = sdbm_prep(dirname, pagname, flags, mode);</div><div class='del'>-	free((char *) dirname);</div><div class='del'>-	return db;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-DBM *</div><div class='del'>-sdbm_prep(dirname, pagname, flags, mode)</div><div class='del'>-char *dirname;</div><div class='del'>-char *pagname;</div><div class='del'>-int flags;</div><div class='del'>-int mode;</div><div class='del'>-{</div><div class='del'>-	register DBM *db;</div><div class='del'>-	struct stat dstat;</div><div class='del'>-</div><div class='del'>-	if ((db = (DBM *) malloc(sizeof(DBM))) == NULL)</div><div class='del'>-		return errno = ENOMEM, (DBM *) NULL;</div><div class='del'>-</div><div class='del'>-        db-&gt;flags = 0;</div><div class='del'>-        db-&gt;hmask = 0;</div><div class='del'>-        db-&gt;blkptr = 0;</div><div class='del'>-        db-&gt;keyptr = 0;</div><div class='del'>-/*</div><div class='del'>- * adjust user flags so that WRONLY becomes RDWR, </div><div class='del'>- * as required by this package. Also set our internal</div><div class='del'>- * flag for RDONLY.</div><div class='del'>- */</div><div class='del'>-	if (flags &amp; O_WRONLY)</div><div class='del'>-		flags = (flags &amp; ~O_WRONLY) | O_RDWR;</div><div class='del'>-	if (flags &amp; O_RDONLY)</div><div class='del'>-		db-&gt;flags = DBM_RDONLY;</div><div class='del'>-/*</div><div class='del'>- * open the files in sequence, and stat the dirfile.</div><div class='del'>- * If we fail anywhere, undo everything, return NULL.</div><div class='del'>- */</div><div class='del'>-	flags |= O_BINARY;</div><div class='del'>-	if ((db-&gt;pagf = open(pagname, flags, mode)) &gt; -1) {</div><div class='del'>-		if ((db-&gt;dirf = open(dirname, flags, mode)) &gt; -1) {</div><div class='del'>-/*</div><div class='del'>- * need the dirfile size to establish max bit number.</div><div class='del'>- */</div><div class='del'>-			if (fstat(db-&gt;dirf, &amp;dstat) == 0) {</div><div class='del'>-/*</div><div class='del'>- * zero size: either a fresh database, or one with a single,</div><div class='del'>- * unsplit data page: dirpage is all zeros.</div><div class='del'>- */</div><div class='del'>-				db-&gt;dirbno = (!dstat.st_size) ? 0 : -1;</div><div class='del'>-				db-&gt;pagbno = -1;</div><div class='del'>-				db-&gt;maxbno = dstat.st_size * (long) BYTESIZ;</div><div class='del'>-</div><div class='del'>-				(void) memset(db-&gt;pagbuf, 0, PBLKSIZ);</div><div class='del'>-				(void) memset(db-&gt;dirbuf, 0, DBLKSIZ);</div><div class='del'>-			/*</div><div class='del'>-			 * success</div><div class='del'>-			 */</div><div class='del'>-				return db;</div><div class='del'>-			}</div><div class='del'>-			(void) close(db-&gt;dirf);</div><div class='del'>-		}</div><div class='del'>-		(void) close(db-&gt;pagf);</div><div class='del'>-	}</div><div class='del'>-	free((char *) db);</div><div class='del'>-	return (DBM *) NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-sdbm_close(db)</div><div class='del'>-register DBM *db;</div><div class='del'>-{</div><div class='del'>-	if (db == NULL)</div><div class='del'>-		errno = EINVAL;</div><div class='del'>-	else {</div><div class='del'>-		(void) close(db-&gt;dirf);</div><div class='del'>-		(void) close(db-&gt;pagf);</div><div class='del'>-		free((char *) db);</div><div class='del'>-	}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-datum</div><div class='del'>-sdbm_fetch(db, key)</div><div class='del'>-register DBM *db;</div><div class='del'>-datum key;</div><div class='del'>-{</div><div class='del'>-	if (db == NULL || bad(key))</div><div class='del'>-		return errno = EINVAL, nullitem;</div><div class='del'>-</div><div class='del'>-	if (getpage(db, exhash(key)))</div><div class='del'>-		return getpair(db-&gt;pagbuf, key);</div><div class='del'>-</div><div class='del'>-	return ioerr(db), nullitem;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-sdbm_delete(db, key)</div><div class='del'>-register DBM *db;</div><div class='del'>-datum key;</div><div class='del'>-{</div><div class='del'>-	if (db == NULL || bad(key))</div><div class='del'>-		return errno = EINVAL, -1;</div><div class='del'>-	if (sdbm_rdonly(db))</div><div class='del'>-		return errno = EPERM, -1;</div><div class='del'>-</div><div class='del'>-	if (getpage(db, exhash(key))) {</div><div class='del'>-		if (!delpair(db-&gt;pagbuf, key))</div><div class='del'>-			return -1;</div><div class='del'>-/*</div><div class='del'>- * update the page file</div><div class='del'>- */</div><div class='del'>-		if (lseek(db-&gt;pagf, OFF_PAG(db-&gt;pagbno), SEEK_SET) &lt; 0</div><div class='del'>-		    || write(db-&gt;pagf, db-&gt;pagbuf, PBLKSIZ) &lt; 0)</div><div class='del'>-			return ioerr(db), -1;</div><div class='del'>-</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return ioerr(db), -1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-sdbm_store(db, key, val, flags)</div><div class='del'>-register DBM *db;</div><div class='del'>-datum key;</div><div class='del'>-datum val;</div><div class='del'>-int flags;</div><div class='del'>-{</div><div class='del'>-	int need;</div><div class='del'>-	register long hash;</div><div class='del'>-</div><div class='del'>-	if (db == NULL || bad(key))</div><div class='del'>-		return errno = EINVAL, -1;</div><div class='del'>-	if (sdbm_rdonly(db))</div><div class='del'>-		return errno = EPERM, -1;</div><div class='del'>-</div><div class='del'>-	need = key.dsize + val.dsize;</div><div class='del'>-/*</div><div class='del'>- * is the pair too big (or too small) for this database ??</div><div class='del'>- */</div><div class='del'>-	if (need &lt; 0 || need &gt; PAIRMAX)</div><div class='del'>-		return errno = EINVAL, -1;</div><div class='del'>-</div><div class='del'>-	if (getpage(db, (hash = exhash(key)))) {</div><div class='del'>-/*</div><div class='del'>- * if we need to replace, delete the key/data pair</div><div class='del'>- * first. If it is not there, ignore.</div><div class='del'>- */</div><div class='del'>-		if (flags == DBM_REPLACE)</div><div class='del'>-			(void) delpair(db-&gt;pagbuf, key);</div><div class='del'>-#ifdef SEEDUPS</div><div class='del'>-		else if (duppair(db-&gt;pagbuf, key))</div><div class='del'>-			return 1;</div><div class='del'>-#endif</div><div class='del'>-/*</div><div class='del'>- * if we do not have enough room, we have to split.</div><div class='del'>- */</div><div class='del'>-		if (!fitpair(db-&gt;pagbuf, need))</div><div class='del'>-			if (!makroom(db, hash, need))</div><div class='del'>-				return ioerr(db), -1;</div><div class='del'>-/*</div><div class='del'>- * we have enough room or split is successful. insert the key,</div><div class='del'>- * and update the page file.</div><div class='del'>- */</div><div class='del'>-		(void) putpair(db-&gt;pagbuf, key, val);</div><div class='del'>-</div><div class='del'>-		if (lseek(db-&gt;pagf, OFF_PAG(db-&gt;pagbno), SEEK_SET) &lt; 0</div><div class='del'>-		    || write(db-&gt;pagf, db-&gt;pagbuf, PBLKSIZ) &lt; 0)</div><div class='del'>-			return ioerr(db), -1;</div><div class='del'>-	/*</div><div class='del'>-	 * success</div><div class='del'>-	 */</div><div class='del'>-		return 0;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return ioerr(db), -1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * makroom - make room by splitting the overfull page</div><div class='del'>- * this routine will attempt to make room for SPLTMAX times before</div><div class='del'>- * giving up.</div><div class='del'>- */</div><div class='del'>-static int</div><div class='del'>-makroom(db, hash, need)</div><div class='del'>-register DBM *db;</div><div class='del'>-long hash;</div><div class='del'>-int need;</div><div class='del'>-{</div><div class='del'>-	long newp;</div><div class='del'>-	char twin[PBLKSIZ];</div><div class='del'>-#if defined MSDOS || (defined _WIN32 &amp;&amp; !defined __CYGWIN__)</div><div class='del'>-	char zer[PBLKSIZ];</div><div class='del'>-	long oldtail;</div><div class='del'>-#endif</div><div class='del'>-	char *pag = db-&gt;pagbuf;</div><div class='del'>-	char *new = twin;</div><div class='del'>-	register int smax = SPLTMAX;</div><div class='del'>-</div><div class='del'>-	do {</div><div class='del'>-/*</div><div class='del'>- * split the current page</div><div class='del'>- */</div><div class='del'>-		(void) splpage(pag, new, db-&gt;hmask + 1);</div><div class='del'>-/*</div><div class='del'>- * address of the new page</div><div class='del'>- */</div><div class='del'>-		newp = (hash &amp; db-&gt;hmask) | (db-&gt;hmask + 1);</div><div class='del'>-		debug(("newp: %ld\n", newp));</div><div class='del'>-/*</div><div class='del'>- * write delay, read avoidence/cache shuffle:</div><div class='del'>- * select the page for incoming pair: if key is to go to the new page,</div><div class='del'>- * write out the previous one, and copy the new one over, thus making</div><div class='del'>- * it the current page. If not, simply write the new page, and we are</div><div class='del'>- * still looking at the page of interest. current page is not updated</div><div class='del'>- * here, as sdbm_store will do so, after it inserts the incoming pair.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#if defined MSDOS || (defined _WIN32 &amp;&amp; !defined __CYGWIN__)</div><div class='del'>-	/*</div><div class='del'>-	 * Fill hole with 0 if made it.</div><div class='del'>-	 * (hole is NOT read as 0)</div><div class='del'>-	 */</div><div class='del'>-	oldtail = lseek(db-&gt;pagf, 0L, SEEK_END);</div><div class='del'>-	memset(zer, 0, PBLKSIZ);</div><div class='del'>-	while (OFF_PAG(newp) &gt; oldtail) {</div><div class='del'>-		if (lseek(db-&gt;pagf, 0L, SEEK_END) &lt; 0 ||</div><div class='del'>-		    write(db-&gt;pagf, zer, PBLKSIZ) &lt; 0) {</div><div class='del'>-</div><div class='del'>-			return 0;</div><div class='del'>-		}</div><div class='del'>-		oldtail += PBLKSIZ;</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-		if (hash &amp; (db-&gt;hmask + 1)) {</div><div class='del'>-			if (lseek(db-&gt;pagf, OFF_PAG(db-&gt;pagbno), SEEK_SET) &lt; 0</div><div class='del'>-			    || write(db-&gt;pagf, db-&gt;pagbuf, PBLKSIZ) &lt; 0)</div><div class='del'>-				return 0;</div><div class='del'>-			db-&gt;pagbno = newp;</div><div class='del'>-			(void) memcpy(pag, new, PBLKSIZ);</div><div class='del'>-		}</div><div class='del'>-		else if (lseek(db-&gt;pagf, OFF_PAG(newp), SEEK_SET) &lt; 0</div><div class='del'>-			 || write(db-&gt;pagf, new, PBLKSIZ) &lt; 0)</div><div class='del'>-			return 0;</div><div class='del'>-</div><div class='del'>-		if (!setdbit(db, db-&gt;curbit))</div><div class='del'>-			return 0;</div><div class='del'>-/*</div><div class='del'>- * see if we have enough room now</div><div class='del'>- */</div><div class='del'>-		if (fitpair(pag, need))</div><div class='del'>-			return 1;</div><div class='del'>-/*</div><div class='del'>- * try again... update curbit and hmask as getpage would have</div><div class='del'>- * done. because of our update of the current page, we do not</div><div class='del'>- * need to read in anything. BUT we have to write the current</div><div class='del'>- * [deferred] page out, as the window of failure is too great.</div><div class='del'>- */</div><div class='del'>-		db-&gt;curbit = 2 * db-&gt;curbit + </div><div class='del'>-			((hash &amp; (db-&gt;hmask + 1)) ? 2 : 1);</div><div class='del'>-		db-&gt;hmask |= (db-&gt;hmask + 1);</div><div class='del'>-</div><div class='del'>-		if (lseek(db-&gt;pagf, OFF_PAG(db-&gt;pagbno), SEEK_SET) &lt; 0</div><div class='del'>-		    || write(db-&gt;pagf, db-&gt;pagbuf, PBLKSIZ) &lt; 0)</div><div class='del'>-			return 0;</div><div class='del'>-</div><div class='del'>-	} while (--smax);</div><div class='del'>-/*</div><div class='del'>- * if we are here, this is real bad news. After SPLTMAX splits,</div><div class='del'>- * we still cannot fit the key. say goodnight.</div><div class='del'>- */</div><div class='del'>-#ifdef BADMESS</div><div class='del'>-	(void) write(2, "sdbm: cannot insert after SPLTMAX attempts.\n", 44);</div><div class='del'>-#endif</div><div class='del'>-	return 0;</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * the following two routines will break if</div><div class='del'>- * deletions aren't taken into account. (ndbm bug)</div><div class='del'>- */</div><div class='del'>-datum</div><div class='del'>-sdbm_firstkey(db)</div><div class='del'>-register DBM *db;</div><div class='del'>-{</div><div class='del'>-	if (db == NULL)</div><div class='del'>-		return errno = EINVAL, nullitem;</div><div class='del'>-/*</div><div class='del'>- * start at page 0</div><div class='del'>- */</div><div class='del'>-	(void) memset(db-&gt;pagbuf, 0, PBLKSIZ);</div><div class='del'>-	if (lseek(db-&gt;pagf, OFF_PAG(0), SEEK_SET) &lt; 0</div><div class='del'>-	    || read(db-&gt;pagf, db-&gt;pagbuf, PBLKSIZ) &lt; 0)</div><div class='del'>-		return ioerr(db), nullitem;</div><div class='del'>-	db-&gt;pagbno = 0;</div><div class='del'>-	db-&gt;blkptr = 0;</div><div class='del'>-	db-&gt;keyptr = 0;</div><div class='del'>-</div><div class='del'>-	return getnext(db);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-datum</div><div class='del'>-sdbm_nextkey(db)</div><div class='del'>-register DBM *db;</div><div class='del'>-{</div><div class='del'>-	if (db == NULL)</div><div class='del'>-		return errno = EINVAL, nullitem;</div><div class='del'>-	return getnext(db);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * all important binary trie traversal</div><div class='del'>- */</div><div class='del'>-static int</div><div class='del'>-getpage(db, hash)</div><div class='del'>-register DBM *db;</div><div class='del'>-register long hash;</div><div class='del'>-{</div><div class='del'>-	register int hbit;</div><div class='del'>-	register long dbit;</div><div class='del'>-	register long pagb;</div><div class='del'>-</div><div class='del'>-	dbit = 0;</div><div class='del'>-	hbit = 0;</div><div class='del'>-	while (dbit &lt; db-&gt;maxbno &amp;&amp; getdbit(db, dbit))</div><div class='del'>-		dbit = 2 * dbit + ((hash &amp; ((long) 1 &lt;&lt; hbit++)) ? 2 : 1);</div><div class='del'>-</div><div class='del'>-	debug(("dbit: %d...", dbit));</div><div class='del'>-</div><div class='del'>-	db-&gt;curbit = dbit;</div><div class='del'>-	db-&gt;hmask = masks[hbit];</div><div class='del'>-</div><div class='del'>-	pagb = hash &amp; db-&gt;hmask;</div><div class='del'>-/*</div><div class='del'>- * see if the block we need is already in memory.</div><div class='del'>- * note: this lookaside cache has about 10% hit rate.</div><div class='del'>- */</div><div class='del'>-	if (pagb != db-&gt;pagbno) { </div><div class='del'>-/*</div><div class='del'>- * note: here, we assume a "hole" is read as 0s.</div><div class='del'>- * if not, must zero pagbuf first.</div><div class='del'>- */</div><div class='del'>-		(void) memset(db-&gt;pagbuf, 0, PBLKSIZ);</div><div class='del'>-</div><div class='del'>-		if (lseek(db-&gt;pagf, OFF_PAG(pagb), SEEK_SET) &lt; 0</div><div class='del'>-		    || read(db-&gt;pagf, db-&gt;pagbuf, PBLKSIZ) &lt; 0)</div><div class='del'>-			return 0;</div><div class='del'>-		if (!chkpage(db-&gt;pagbuf)) {</div><div class='del'>-			return 0;</div><div class='del'>-		}</div><div class='del'>-		db-&gt;pagbno = pagb;</div><div class='del'>-</div><div class='del'>-		debug(("pag read: %d\n", pagb));</div><div class='del'>-	}</div><div class='del'>-	return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-getdbit(db, dbit)</div><div class='del'>-register DBM *db;</div><div class='del'>-register long dbit;</div><div class='del'>-{</div><div class='del'>-	register long c;</div><div class='del'>-	register long dirb;</div><div class='del'>-</div><div class='del'>-	c = dbit / BYTESIZ;</div><div class='del'>-	dirb = c / DBLKSIZ;</div><div class='del'>-</div><div class='del'>-	if (dirb != db-&gt;dirbno) {</div><div class='del'>-		if (lseek(db-&gt;dirf, OFF_DIR(dirb), SEEK_SET) &lt; 0</div><div class='del'>-		    || read(db-&gt;dirf, db-&gt;dirbuf, DBLKSIZ) &lt; 0)</div><div class='del'>-			return 0;</div><div class='del'>-		db-&gt;dirbno = dirb;</div><div class='del'>-</div><div class='del'>-		debug(("dir read: %d\n", dirb));</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return db-&gt;dirbuf[c % DBLKSIZ] &amp; (1 &lt;&lt; (dbit % BYTESIZ));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-setdbit(db, dbit)</div><div class='del'>-register DBM *db;</div><div class='del'>-register long dbit;</div><div class='del'>-{</div><div class='del'>-	register long c;</div><div class='del'>-	register long dirb;</div><div class='del'>-</div><div class='del'>-	c = dbit / BYTESIZ;</div><div class='del'>-	dirb = c / DBLKSIZ;</div><div class='del'>-</div><div class='del'>-	if (dirb != db-&gt;dirbno) {</div><div class='del'>-		if (lseek(db-&gt;dirf, OFF_DIR(dirb), SEEK_SET) &lt; 0</div><div class='del'>-		    || read(db-&gt;dirf, db-&gt;dirbuf, DBLKSIZ) &lt; 0)</div><div class='del'>-			return 0;</div><div class='del'>-		db-&gt;dirbno = dirb;</div><div class='del'>-</div><div class='del'>-		debug(("dir read: %d\n", dirb));</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	db-&gt;dirbuf[c % DBLKSIZ] |= (1 &lt;&lt; (dbit % BYTESIZ));</div><div class='del'>-</div><div class='del'>-	if (dbit &gt;= db-&gt;maxbno)</div><div class='del'>-		db-&gt;maxbno += (long) DBLKSIZ * BYTESIZ;</div><div class='del'>-</div><div class='del'>-	if (lseek(db-&gt;dirf, OFF_DIR(dirb), SEEK_SET) &lt; 0</div><div class='del'>-	    || write(db-&gt;dirf, db-&gt;dirbuf, DBLKSIZ) &lt; 0)</div><div class='del'>-		return 0;</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'>- * getnext - get the next key in the page, and if done with</div><div class='del'>- * the page, try the next page in sequence</div><div class='del'>- */</div><div class='del'>-static datum</div><div class='del'>-getnext(db)</div><div class='del'>-register DBM *db;</div><div class='del'>-{</div><div class='del'>-	datum key;</div><div class='del'>-</div><div class='del'>-	for (;;) {</div><div class='del'>-		db-&gt;keyptr++;</div><div class='del'>-		key = getnkey(db-&gt;pagbuf, db-&gt;keyptr);</div><div class='del'>-		if (key.dptr != NULL)</div><div class='del'>-			return key;</div><div class='del'>-/*</div><div class='del'>- * we either run out, or there is nothing on this page..</div><div class='del'>- * try the next one... If we lost our position on the</div><div class='del'>- * file, we will have to seek.</div><div class='del'>- */</div><div class='del'>-		db-&gt;keyptr = 0;</div><div class='del'>-		if (db-&gt;pagbno != db-&gt;blkptr++)</div><div class='del'>-			if (lseek(db-&gt;pagf, OFF_PAG(db-&gt;blkptr), SEEK_SET) &lt; 0)</div><div class='del'>-				break;</div><div class='del'>-		db-&gt;pagbno = db-&gt;blkptr;</div><div class='del'>-		if (read(db-&gt;pagf, db-&gt;pagbuf, PBLKSIZ) &lt;= 0)</div><div class='del'>-			break;</div><div class='del'>-		if (!chkpage(db-&gt;pagbuf)) {</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	return ioerr(db), nullitem;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* pair.c */</div><div class='del'>-/*</div><div class='del'>- * sdbm - ndbm work-alike hashed database library</div><div class='del'>- * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).</div><div class='del'>- * author: oz@nexus.yorku.ca</div><div class='del'>- * status: public domain.</div><div class='del'>- *</div><div class='del'>- * page-level routines</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef lint</div><div class='del'>-/*char pair_rcsid[] = "$Id$";*/</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef BSD42</div><div class='del'>-/*#include &lt;memory.h&gt;*/</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define exhash(item)	sdbm_hash((item).dptr, (item).dsize)</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- * forward </div><div class='del'>- */</div><div class='del'>-static int seepair proto((char *, int, char *, int));</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * page format:</div><div class='del'>- *	+------------------------------+</div><div class='del'>- * ino	| n | keyoff | datoff | keyoff |</div><div class='del'>- * 	+------------+--------+--------+</div><div class='del'>- *	| datoff | - - - ----&gt;	       |</div><div class='del'>- *	+--------+---------------------+</div><div class='del'>- *	|	 F R E E A R E A       |</div><div class='del'>- *	+--------------+---------------+</div><div class='del'>- *	|  &lt;---- - - - | data          |</div><div class='del'>- *	+--------+-----+----+----------+</div><div class='del'>- *	|  key   | data     | key      |</div><div class='del'>- *	+--------+----------+----------+</div><div class='del'>- *</div><div class='del'>- * calculating the offsets for free area:  if the number</div><div class='del'>- * of entries (ino[0]) is zero, the offset to the END of</div><div class='del'>- * the free area is the block size. Otherwise, it is the</div><div class='del'>- * nth (ino[ino[0]]) entry's offset.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-fitpair(pag, need)</div><div class='del'>-char *pag;</div><div class='del'>-int need;</div><div class='del'>-{</div><div class='del'>-	register int n;</div><div class='del'>-	register int off;</div><div class='del'>-	register int free;</div><div class='del'>-	register short *ino = (short *) pag;</div><div class='del'>-</div><div class='del'>-	off = ((n = GET_SHORT(ino,0)) &gt; 0) ? GET_SHORT(ino,n) : PBLKSIZ;</div><div class='del'>-	free = off - (n + 1) * sizeof(short);</div><div class='del'>-	need += 2 * sizeof(short);</div><div class='del'>-</div><div class='del'>-	debug(("free %d need %d\n", free, need));</div><div class='del'>-</div><div class='del'>-	return need &lt;= free;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-putpair(pag, key, val)</div><div class='del'>-char *pag;</div><div class='del'>-datum key;</div><div class='del'>-datum val;</div><div class='del'>-{</div><div class='del'>-	register int n;</div><div class='del'>-	register int off;</div><div class='del'>-	register short *ino = (short *) pag;</div><div class='del'>-</div><div class='del'>-	off = ((n = GET_SHORT(ino,0)) &gt; 0) ? GET_SHORT(ino,n) : PBLKSIZ;</div><div class='del'>-/*</div><div class='del'>- * enter the key first</div><div class='del'>- */</div><div class='del'>-	off -= key.dsize;</div><div class='del'>-	if (key.dsize)</div><div class='del'>-		(void) memcpy(pag + off, key.dptr, key.dsize);</div><div class='del'>-	PUT_SHORT(ino,n + 1,off);</div><div class='del'>-/*</div><div class='del'>- * now the data</div><div class='del'>- */</div><div class='del'>-	off -= val.dsize;</div><div class='del'>-	if (val.dsize)</div><div class='del'>-		(void) memcpy(pag + off, val.dptr, val.dsize);</div><div class='del'>-	PUT_SHORT(ino,n + 2,off);</div><div class='del'>-/*</div><div class='del'>- * adjust item count</div><div class='del'>- */</div><div class='del'>-	PUT_SHORT(ino,0,GET_SHORT(ino,0) + 2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static datum</div><div class='del'>-getpair(pag, key)</div><div class='del'>-char *pag;</div><div class='del'>-datum key;</div><div class='del'>-{</div><div class='del'>-	register int i;</div><div class='del'>-	register int n;</div><div class='del'>-	datum val;</div><div class='del'>-	register short *ino = (short *) pag;</div><div class='del'>-</div><div class='del'>-	if ((n = GET_SHORT(ino,0)) == 0)</div><div class='del'>-		return nullitem;</div><div class='del'>-</div><div class='del'>-	if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0)</div><div class='del'>-		return nullitem;</div><div class='del'>-</div><div class='del'>-	val.dptr = pag + GET_SHORT(ino,i + 1);</div><div class='del'>-	val.dsize = GET_SHORT(ino,i) - GET_SHORT(ino,i + 1);</div><div class='del'>-	return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef SEEDUPS</div><div class='del'>-static int</div><div class='del'>-duppair(pag, key)</div><div class='del'>-char *pag;</div><div class='del'>-datum key;</div><div class='del'>-{</div><div class='del'>-	register short *ino = (short *) pag;</div><div class='del'>-	return GET_SHORT(ino,0) &gt; 0 &amp;&amp;</div><div class='del'>-		   seepair(pag, GET_SHORT(ino,0), key.dptr, key.dsize) &gt; 0;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static datum</div><div class='del'>-getnkey(pag, num)</div><div class='del'>-char *pag;</div><div class='del'>-int num;</div><div class='del'>-{</div><div class='del'>-	datum key;</div><div class='del'>-	register int off;</div><div class='del'>-	register short *ino = (short *) pag;</div><div class='del'>-</div><div class='del'>-	num = num * 2 - 1;</div><div class='del'>-	if (GET_SHORT(ino,0) == 0 || num &gt; GET_SHORT(ino,0))</div><div class='del'>-		return nullitem;</div><div class='del'>-</div><div class='del'>-	off = (num &gt; 1) ? GET_SHORT(ino,num - 1) : PBLKSIZ;</div><div class='del'>-</div><div class='del'>-	key.dptr = pag + GET_SHORT(ino,num);</div><div class='del'>-	key.dsize = off - GET_SHORT(ino,num);</div><div class='del'>-</div><div class='del'>-	return key;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-delpair(pag, key)</div><div class='del'>-char *pag;</div><div class='del'>-datum key;</div><div class='del'>-{</div><div class='del'>-	register int n;</div><div class='del'>-	register int i;</div><div class='del'>-	register short *ino = (short *) pag;</div><div class='del'>-</div><div class='del'>-	if ((n = GET_SHORT(ino,0)) == 0)</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	if ((i = seepair(pag, n, key.dptr, key.dsize)) == 0)</div><div class='del'>-		return 0;</div><div class='del'>-/*</div><div class='del'>- * found the key. if it is the last entry</div><div class='del'>- * [i.e. i == n - 1] we just adjust the entry count.</div><div class='del'>- * hard case: move all data down onto the deleted pair,</div><div class='del'>- * shift offsets onto deleted offsets, and adjust them.</div><div class='del'>- * [note: 0 &lt; i &lt; n]</div><div class='del'>- */</div><div class='del'>-	if (i &lt; n - 1) {</div><div class='del'>-		register int m;</div><div class='del'>-		register char *dst = pag + (i == 1 ? PBLKSIZ : GET_SHORT(ino,i - 1));</div><div class='del'>-		register char *src = pag + GET_SHORT(ino,i + 1);</div><div class='del'>-		register int   zoo = dst - src;</div><div class='del'>-</div><div class='del'>-		debug(("free-up %d ", zoo));</div><div class='del'>-/*</div><div class='del'>- * shift data/keys down</div><div class='del'>- */</div><div class='del'>-		m = GET_SHORT(ino,i + 1) - GET_SHORT(ino,n);</div><div class='del'>-#ifdef DUFF</div><div class='del'>-#define MOVB 	*--dst = *--src</div><div class='del'>-</div><div class='del'>-		if (m &gt; 0) {</div><div class='del'>-			register int loop = (m + 8 - 1) &gt;&gt; 3;</div><div class='del'>-</div><div class='del'>-			switch (m &amp; (8 - 1)) {</div><div class='del'>-			case 0:	do {</div><div class='del'>-				MOVB;	case 7:	MOVB;</div><div class='del'>-			case 6:	MOVB;	case 5:	MOVB;</div><div class='del'>-			case 4:	MOVB;	case 3:	MOVB;</div><div class='del'>-			case 2:	MOVB;	case 1:	MOVB;</div><div class='del'>-				} while (--loop);</div><div class='del'>-			}</div><div class='del'>-		}</div><div class='del'>-#else</div><div class='del'>-#ifdef MEMMOVE</div><div class='del'>-		memmove(dst, src, m);</div><div class='del'>-#else</div><div class='del'>-		while (m--)</div><div class='del'>-			*--dst = *--src;</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-/*</div><div class='del'>- * adjust offset index up</div><div class='del'>- */</div><div class='del'>-		while (i &lt; n - 1) {</div><div class='del'>-			PUT_SHORT(ino,i, GET_SHORT(ino,i + 2) + zoo);</div><div class='del'>-			i++;</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	PUT_SHORT(ino, 0, GET_SHORT(ino, 0) - 2);</div><div class='del'>-	return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * search for the key in the page.</div><div class='del'>- * return offset index in the range 0 &lt; i &lt; n.</div><div class='del'>- * return 0 if not found.</div><div class='del'>- */</div><div class='del'>-static int</div><div class='del'>-seepair(pag, n, key, siz)</div><div class='del'>-char *pag;</div><div class='del'>-register int n;</div><div class='del'>-register char *key;</div><div class='del'>-register int siz;</div><div class='del'>-{</div><div class='del'>-	register int i;</div><div class='del'>-	register int off = PBLKSIZ;</div><div class='del'>-	register short *ino = (short *) pag;</div><div class='del'>-</div><div class='del'>-	for (i = 1; i &lt; n; i += 2) {</div><div class='del'>-		if (siz == off - GET_SHORT(ino,i) &amp;&amp;</div><div class='del'>-		    memcmp(key, pag + GET_SHORT(ino,i), siz) == 0)</div><div class='del'>-			return i;</div><div class='del'>-		off = GET_SHORT(ino,i + 1);</div><div class='del'>-	}</div><div class='del'>-	return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-splpage(pag, new, sbit)</div><div class='del'>-char *pag;</div><div class='del'>-char *new;</div><div class='del'>-long sbit;</div><div class='del'>-{</div><div class='del'>-	datum key;</div><div class='del'>-	datum val;</div><div class='del'>-</div><div class='del'>-	register int n;</div><div class='del'>-	register int off = PBLKSIZ;</div><div class='del'>-	char cur[PBLKSIZ];</div><div class='del'>-	register short *ino = (short *) cur;</div><div class='del'>-</div><div class='del'>-	(void) memcpy(cur, pag, PBLKSIZ);</div><div class='del'>-	(void) memset(pag, 0, PBLKSIZ);</div><div class='del'>-	(void) memset(new, 0, PBLKSIZ);</div><div class='del'>-</div><div class='del'>-	n = GET_SHORT(ino,0);</div><div class='del'>-	for (ino++; n &gt; 0; ino += 2) {</div><div class='del'>-		key.dptr = cur + GET_SHORT(ino,0); </div><div class='del'>-		key.dsize = off - GET_SHORT(ino,0);</div><div class='del'>-		val.dptr = cur + GET_SHORT(ino,1);</div><div class='del'>-		val.dsize = GET_SHORT(ino,0) - GET_SHORT(ino,1);</div><div class='del'>-/*</div><div class='del'>- * select the page pointer (by looking at sbit) and insert</div><div class='del'>- */</div><div class='del'>-		(void) putpair((exhash(key) &amp; sbit) ? new : pag, key, val);</div><div class='del'>-</div><div class='del'>-		off = GET_SHORT(ino,1);</div><div class='del'>-		n -= 2;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	debug(("%d split %d/%d\n", ((short *) cur)[0] / 2, </div><div class='del'>-	       ((short *) new)[0] / 2,</div><div class='del'>-	       ((short *) pag)[0] / 2));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * check page sanity: </div><div class='del'>- * number of entries should be something</div><div class='del'>- * reasonable, and all offsets in the index should be in order.</div><div class='del'>- * this could be made more rigorous.</div><div class='del'>- */</div><div class='del'>-static int</div><div class='del'>-chkpage(pag)</div><div class='del'>-char *pag;</div><div class='del'>-{</div><div class='del'>-	register int n;</div><div class='del'>-	register int off;</div><div class='del'>-	register short *ino = (short *) pag;</div><div class='del'>-</div><div class='del'>-	if ((n = GET_SHORT(ino,0)) &lt; 0 || n &gt; PBLKSIZ / sizeof(short))</div><div class='del'>-		return 0;</div><div class='del'>-</div><div class='del'>-	if (n &gt; 0) {</div><div class='del'>-		off = PBLKSIZ;</div><div class='del'>-		for (ino++; n &gt; 0; ino += 2) {</div><div class='del'>-			if (GET_SHORT(ino,0) &gt; off || GET_SHORT(ino,1) &gt; off ||</div><div class='del'>-			    GET_SHORT(ino,1) &gt; GET_SHORT(ino,0))</div><div class='del'>-				return 0;</div><div class='del'>-			off = GET_SHORT(ino,1);</div><div class='del'>-			n -= 2;</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'>-/* hash.c */</div><div class='del'>-/*</div><div class='del'>- * sdbm - ndbm work-alike hashed database library</div><div class='del'>- * based on Per-Aake Larson's Dynamic Hashing algorithms. BIT 18 (1978).</div><div class='del'>- * author: oz@nexus.yorku.ca</div><div class='del'>- * status: public domain. keep it that way.</div><div class='del'>- *</div><div class='del'>- * hashing routine</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * polynomial conversion ignoring overflows</div><div class='del'>- * [this seems to work remarkably well, in fact better</div><div class='del'>- * then the ndbm hash function. Replace at your own risk]</div><div class='del'>- * use: 65599	nice.</div><div class='del'>- *      65587   even better. </div><div class='del'>- */</div><div class='del'>-long</div><div class='del'>-sdbm_hash(str, len)</div><div class='del'>-register char *str;</div><div class='del'>-register int len;</div><div class='del'>-{</div><div class='del'>-	register unsigned long n = 0;</div><div class='del'>-</div><div class='del'>-#ifdef DUFF</div><div class='del'>-</div><div class='del'>-#define HASHC	n = *str++ + 65599 * n</div><div class='del'>-</div><div class='del'>-	if (len &gt; 0) {</div><div class='del'>-		register int loop = (len + 8 - 1) &gt;&gt; 3;</div><div class='del'>-</div><div class='del'>-		switch(len &amp; (8 - 1)) {</div><div class='del'>-		case 0:	do {</div><div class='del'>-			HASHC;	case 7:	HASHC;</div><div class='del'>-		case 6:	HASHC;	case 5:	HASHC;</div><div class='del'>-		case 4:	HASHC;	case 3:	HASHC;</div><div class='del'>-		case 2:	HASHC;	case 1:	HASHC;</div><div class='del'>-			} while (--loop);</div><div class='del'>-		}</div><div class='del'>-</div><div class='del'>-	}</div><div class='del'>-#else</div><div class='del'>-	while (len--)</div><div class='del'>-		n = ((*str++) &amp; 255) + 65587L * n;</div><div class='del'>-#endif</div><div class='del'>-	return n;</div><div class='del'>-}</div><div class='head'>diff --git a/ext/sdbm/depend b/ext/sdbm/depend<br/>deleted file mode 100644<br/>index 1d8b13d13f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/sdbm/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-_sdbm.o: _sdbm.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='del'>-init.o: init.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/sdbm/extconf.rb b/ext/sdbm/extconf.rb<br/>deleted file mode 100644<br/>index cc6c8cefd1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/sdbm/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-create_makefile("sdbm")</div><div class='head'>diff --git a/ext/sdbm/init.c b/ext/sdbm/init.c<br/>deleted file mode 100644<br/>index acadc9b26a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/sdbm/init.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/init.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,788 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  sdbminit.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  created at: Fri May  7 08:34:24 JST 1999</div><div class='del'>-</div><div class='del'>-  Copyright (C) 1995-2001 Yukihiro Matsumoto</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#include "sdbm.h"</div><div class='del'>-#include &lt;fcntl.h&gt;</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-</div><div class='del'>-static VALUE rb_cDBM, rb_eDBMError;</div><div class='del'>-</div><div class='del'>-struct dbmdata {</div><div class='del'>-    int  di_size;</div><div class='del'>-    DBM *di_dbm;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-closed_sdbm()</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eDBMError, "closed SDBM file");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define GetDBM(obj, dbmp) {\</div><div class='del'>-    Data_Get_Struct(obj, struct dbmdata, dbmp);\</div><div class='del'>-    if (dbmp == 0) closed_sdbm();\</div><div class='del'>-    if (dbmp-&gt;di_dbm == 0) closed_sdbm();\</div><div class='del'>-}</div><div class='del'>-</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='del'>-static void</div><div class='del'>-free_sdbm(dbmp)</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-{</div><div class='del'>-</div><div class='del'>-    if (dbmp-&gt;di_dbm) sdbm_close(dbmp-&gt;di_dbm);</div><div class='del'>-    free(dbmp);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_close(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'>-    GetDBM(obj, dbmp);</div><div class='del'>-    sdbm_close(dbmp-&gt;di_dbm);</div><div class='del'>-    dbmp-&gt;di_dbm = 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'>-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='del'>-static VALUE fsdbm_alloc _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return Data_Wrap_Struct(klass, 0, free_sdbm, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_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 file, vmode;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    int mode;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;file, &amp;vmode) == 1) {</div><div class='del'>-	mode = 0666;		/* default value */</div><div class='del'>-    }</div><div class='del'>-    else if (NIL_P(vmode)) {</div><div class='del'>-	mode = -1;		/* return nil if DB not exist */</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	mode = NUM2INT(vmode);</div><div class='del'>-    }</div><div class='del'>-    SafeStringValue(file);</div><div class='del'>-</div><div class='del'>-    dbm = 0;</div><div class='del'>-    if (mode &gt;= 0)</div><div class='del'>-	dbm = sdbm_open(RSTRING(file)-&gt;ptr, O_RDWR|O_CREAT, mode);</div><div class='del'>-    if (!dbm)</div><div class='del'>-	dbm = sdbm_open(RSTRING(file)-&gt;ptr, O_RDWR, 0);</div><div class='del'>-    if (!dbm)</div><div class='del'>-	dbm = sdbm_open(RSTRING(file)-&gt;ptr, O_RDONLY, 0);</div><div class='del'>-</div><div class='del'>-    if (!dbm) {</div><div class='del'>-	if (mode == -1) return Qnil;</div><div class='del'>-	rb_sys_fail(RSTRING(file)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    dbmp = ALLOC(struct dbmdata);</div><div class='del'>-    DATA_PTR(obj) = dbmp;</div><div class='del'>-    dbmp-&gt;di_dbm = dbm;</div><div class='del'>-    dbmp-&gt;di_size = -1;</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'>-fsdbm_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = Data_Wrap_Struct(klass, 0, free_sdbm, 0);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(fsdbm_initialize(argc, argv, obj))) {</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-        return rb_ensure(rb_yield, obj, fsdbm_close, obj);</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'>-fsdbm_fetch(obj, keystr, ifnone)</div><div class='del'>-    VALUE obj, keystr, ifnone;</div><div class='del'>-{</div><div class='del'>-    datum key, value;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    value = sdbm_fetch(dbm, key);</div><div class='del'>-    if (value.dptr == 0) {</div><div class='del'>-	if (ifnone == Qnil &amp;&amp; rb_block_given_p())</div><div class='del'>-	    return rb_yield(rb_tainted_str_new(key.dptr, key.dsize));</div><div class='del'>-	return ifnone;</div><div class='del'>-    }</div><div class='del'>-    return rb_tainted_str_new(value.dptr, value.dsize);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_aref(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    return fsdbm_fetch(obj, keystr, Qnil);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_fetch_m(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 keystr, valstr, ifnone;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;keystr, &amp;ifnone);</div><div class='del'>-    valstr = fsdbm_fetch(obj, keystr, ifnone);</div><div class='del'>-    if (argc == 1 &amp;&amp; !rb_block_given_p() &amp;&amp; NIL_P(valstr))</div><div class='del'>-	rb_raise(rb_eIndexError, "key not found");</div><div class='del'>-</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_index(obj, valstr)</div><div class='del'>-    VALUE obj, valstr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='del'>-    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='del'>-	    memcmp(val.dptr, RSTRING(valstr)-&gt;ptr, val.dsize) == 0)</div><div class='del'>-	    return rb_tainted_str_new(key.dptr, key.dsize);</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'>-fsdbm_indexes(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;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    new = rb_ary_new2(argc);</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 VALUE</div><div class='del'>-fsdbm_select(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'>-    if (rb_block_given_p()) {</div><div class='del'>-        datum key, val;</div><div class='del'>-        DBM *dbm;</div><div class='del'>-        struct dbmdata *dbmp;</div><div class='del'>-</div><div class='del'>-	if (argc &gt; 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);</div><div class='del'>-	}</div><div class='del'>-        GetDBM2(obj, dbmp, dbm);</div><div class='del'>-        for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-            VALUE assoc, v;</div><div class='del'>-            val = sdbm_fetch(dbm, key);</div><div class='del'>-            assoc = 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='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='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_warn("SDBM#select(index..) is deprecated; use SDBM#values_at");</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'>-</div><div class='del'>-    return new;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-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='del'>-fsdbm_delete(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    datum key, value;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE valstr;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-</div><div class='del'>-    value = sdbm_fetch(dbm, key);</div><div class='del'>-    if (value.dptr == 0) {</div><div class='del'>-	if (rb_block_given_p()) return rb_yield(keystr);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* need to save value before sdbm_delete() */</div><div class='del'>-    valstr = rb_tainted_str_new(value.dptr, value.dsize);</div><div class='del'>-</div><div class='del'>-    if (sdbm_delete(dbm, key)) {</div><div class='del'>-	dbmp-&gt;di_size = -1;</div><div class='del'>-	rb_raise(rb_eDBMError, "dbm_delete failed");</div><div class='del'>-    }</div><div class='del'>-    else if (dbmp-&gt;di_size &gt;= 0) {</div><div class='del'>-	dbmp-&gt;di_size--;</div><div class='del'>-    }</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_shift(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    key = sdbm_firstkey(dbm); </div><div class='del'>-    if (!key.dptr) return Qnil;</div><div class='del'>-    val = sdbm_fetch(dbm, key);</div><div class='del'>-    keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='del'>-    valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='del'>-    sdbm_delete(dbm, key);</div><div class='del'>-    if (dbmp-&gt;di_size &gt;= 0) {</div><div class='del'>-	dbmp-&gt;di_size--;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_assoc_new(keystr, valstr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_delete_if(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-    VALUE ret, ary = rb_ary_new();</div><div class='del'>-    int i, status = 0, n;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    n = dbmp-&gt;di_size;</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='del'>-	valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='del'>-        ret = rb_protect(rb_yield, rb_assoc_new(rb_str_dup(keystr), valstr), &amp;status);</div><div class='del'>-        if (status != 0) break;</div><div class='del'>-	if (RTEST(ret)) rb_ary_push(ary, keystr);</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	keystr = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	StringValue(keystr);</div><div class='del'>-	key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-	key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-	if (sdbm_delete(dbm, key)) {</div><div class='del'>-	    rb_raise(rb_eDBMError, "sdbm_delete failed");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (status) rb_jump_tag(status);</div><div class='del'>-    if (n &gt; 0) dbmp-&gt;di_size = n - RARRAY(ary)-&gt;len;</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'>-fsdbm_clear(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-    while (key = sdbm_firstkey(dbm), key.dptr) {</div><div class='del'>-	if (sdbm_delete(dbm, key)) {</div><div class='del'>-	    rb_raise(rb_eDBMError, "sdbm_delete failed");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    dbmp-&gt;di_size = 0;</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'>-fsdbm_invert(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-    VALUE hash = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='del'>-	valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='del'>-	rb_hash_aset(hash, valstr, keystr);</div><div class='del'>-    }</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE each_pair _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-each_pair(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(obj, rb_intern("each_pair"), 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE fsdbm_store _((VALUE,VALUE,VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-update_i(pair, dbm)</div><div class='del'>-    VALUE pair, dbm;</div><div class='del'>-{</div><div class='del'>-    Check_Type(pair, T_ARRAY);</div><div class='del'>-    if (RARRAY(pair)-&gt;len &lt; 2) {</div><div class='del'>-	rb_raise(rb_eArgError, "pair must be [key, value]");</div><div class='del'>-    }</div><div class='del'>-    fsdbm_store(dbm, RARRAY(pair)-&gt;ptr[0], RARRAY(pair)-&gt;ptr[1]);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_update(obj, other)</div><div class='del'>-    VALUE obj, other;</div><div class='del'>-{</div><div class='del'>-    rb_iterate(each_pair, other, update_i, obj);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_replace(obj, other)</div><div class='del'>-    VALUE obj, other;</div><div class='del'>-{</div><div class='del'>-    fsdbm_clear(obj);</div><div class='del'>-    rb_iterate(each_pair, other, update_i, obj);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_store(obj, keystr, valstr)</div><div class='del'>-    VALUE obj, keystr, valstr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    if (valstr == Qnil) {</div><div class='del'>-	fsdbm_delete(obj, keystr);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    fdbm_modify(obj);</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='del'>-    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    dbmp-&gt;di_size = -1;</div><div class='del'>-    if (sdbm_store(dbm, key, val, DBM_REPLACE)) {</div><div class='del'>-#ifdef HAVE_DBM_CLAERERR</div><div class='del'>-	sdbm_clearerr(dbm);</div><div class='del'>-#endif</div><div class='del'>-	if (errno == EPERM) rb_sys_fail(0);</div><div class='del'>-	rb_raise(rb_eDBMError, "sdbm_store failed");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return valstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_length(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    int i = 0;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    if (dbmp-&gt;di_size &gt; 0) return INT2FIX(dbmp-&gt;di_size);</div><div class='del'>-</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	i++;</div><div class='del'>-    }</div><div class='del'>-    dbmp-&gt;di_size = i;</div><div class='del'>-</div><div class='del'>-    return INT2FIX(i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fsdbm_empty_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    int i = 0;</div><div class='del'>-</div><div class='del'>-    GetDBM(obj, dbmp);</div><div class='del'>-    if (dbmp-&gt;di_size &lt; 0) {</div><div class='del'>-	dbm = dbmp-&gt;di_dbm;</div><div class='del'>-</div><div class='del'>-	for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	    i++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	i = dbmp-&gt;di_size;</div><div class='del'>-    }</div><div class='del'>-    if (i == 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'>-fsdbm_each_value(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	rb_yield(rb_tainted_str_new(val.dptr, val.dsize));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</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'>-fsdbm_each_key(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	rb_yield(rb_tainted_str_new(key.dptr, key.dsize));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</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'>-fsdbm_each_pair(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    VALUE keystr, valstr;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	keystr = rb_tainted_str_new(key.dptr, key.dsize);</div><div class='del'>-	valstr = rb_tainted_str_new(val.dptr, val.dsize);</div><div class='del'>-	rb_yield(rb_assoc_new(keystr, valstr));</div><div class='del'>-	GetDBM2(obj, dbmp, dbm);</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'>-fsdbm_keys(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	rb_ary_push(ary, rb_tainted_str_new(key.dptr, key.dsize));</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'>-fsdbm_values(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	rb_ary_push(ary, rb_tainted_str_new(val.dptr, val.dsize));</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'>-fsdbm_has_key(obj, keystr)</div><div class='del'>-    VALUE obj, keystr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(keystr);</div><div class='del'>-    key.dptr = RSTRING(keystr)-&gt;ptr;</div><div class='del'>-    key.dsize = RSTRING(keystr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    val = sdbm_fetch(dbm, key);</div><div class='del'>-    if (val.dptr) 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'>-fsdbm_has_value(obj, valstr)</div><div class='del'>-    VALUE obj, valstr;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-</div><div class='del'>-    StringValue(valstr);</div><div class='del'>-    val.dptr = RSTRING(valstr)-&gt;ptr;</div><div class='del'>-    val.dsize = RSTRING(valstr)-&gt;len;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	if (val.dsize == RSTRING(valstr)-&gt;len &amp;&amp;</div><div class='del'>-	    memcmp(val.dptr, RSTRING(valstr)-&gt;ptr, val.dsize) == 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'>-fsdbm_to_a(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	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='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'>-fsdbm_to_hash(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    datum key, val;</div><div class='del'>-    struct dbmdata *dbmp;</div><div class='del'>-    DBM *dbm;</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    GetDBM2(obj, dbmp, dbm);</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-    for (key = sdbm_firstkey(dbm); key.dptr; key = sdbm_nextkey(dbm)) {</div><div class='del'>-	val = sdbm_fetch(dbm, key);</div><div class='del'>-	rb_hash_aset(hash, rb_tainted_str_new(key.dptr, key.dsize),</div><div class='del'>-		           rb_tainted_str_new(val.dptr, val.dsize));</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'>-fsdbm_reject(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_hash_delete_if(fsdbm_to_hash(obj));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_sdbm()</div><div class='del'>-{</div><div class='del'>-    rb_cDBM = rb_define_class("SDBM", rb_cObject);</div><div class='del'>-    rb_eDBMError = rb_define_class("SDBMError", rb_eStandardError);</div><div class='del'>-    rb_include_module(rb_cDBM, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cDBM, fsdbm_alloc);</div><div class='del'>-    rb_define_singleton_method(rb_cDBM, "open", fsdbm_s_open, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cDBM, "initialize", fsdbm_initialize, -1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cDBM, "[]", fsdbm_aref, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "fetch", fsdbm_fetch_m, -1);</div><div class='del'>-    rb_define_method(rb_cDBM, "[]=", fsdbm_store, 2);</div><div class='del'>-    rb_define_method(rb_cDBM, "store", fsdbm_store, 2);</div><div class='del'>-    rb_define_method(rb_cDBM, "index",  fsdbm_index, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "indexes",  fsdbm_indexes, -1);</div><div class='del'>-    rb_define_method(rb_cDBM, "indices",  fsdbm_indexes, -1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cDBM, "length", fsdbm_length, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "size", fsdbm_length, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "empty?", fsdbm_empty_p, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "each", fsdbm_each_pair, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "each_value", fsdbm_each_value, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "each_key", fsdbm_each_key, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "each_pair", fsdbm_each_pair, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "keys", fsdbm_keys, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "values", fsdbm_values, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "shift", fsdbm_shift, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "delete", fsdbm_delete, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "delete_if", fsdbm_delete_if, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "reject!", fsdbm_delete_if, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "reject", fsdbm_reject, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "clear", fsdbm_clear, 0);</div><div class='del'>-    rb_define_method(rb_cDBM,"invert", fsdbm_invert, 0);</div><div class='del'>-    rb_define_method(rb_cDBM,"update", fsdbm_update, 1);</div><div class='del'>-    rb_define_method(rb_cDBM,"replace", fsdbm_replace, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cDBM, "include?", fsdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "has_key?", fsdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "member?", fsdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "has_value?", fsdbm_has_value, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "key?", fsdbm_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cDBM, "value?", fsdbm_has_value, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cDBM, "to_a", fsdbm_to_a, 0);</div><div class='del'>-    rb_define_method(rb_cDBM, "to_hash", fsdbm_to_hash, 0);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/sdbm/sdbm.h b/ext/sdbm/sdbm.h<br/>deleted file mode 100644<br/>index ce8f54c4d4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/sdbm/sdbm.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/sdbm/sdbm.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * sdbm - ndbm work-alike hashed database library</div><div class='del'>- * based on Per-Ake Larson's Dynamic Hashing algorithms. BIT 18 (1978).</div><div class='del'>- * author: oz@nexus.yorku.ca</div><div class='del'>- * status: public domain. </div><div class='del'>- */</div><div class='del'>-#ifndef	_SDBM_H_</div><div class='del'>-#define	_SDBM_H_</div><div class='del'>-</div><div class='del'>-#define DBLKSIZ 4096</div><div class='del'>-#define PBLKSIZ 1024</div><div class='del'>-#define PAIRMAX 1008			/* arbitrary on PBLKSIZ-N */</div><div class='del'>-#define SPLTMAX	10			/* maximum allowed splits */</div><div class='del'>-					/* for a single insertion */</div><div class='del'>-#define DIRFEXT	".dir"</div><div class='del'>-#define PAGFEXT	".pag"</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-	int dirf;		       /* directory file descriptor */</div><div class='del'>-	int pagf;		       /* page file descriptor */</div><div class='del'>-	int flags;		       /* status/error flags, see below */</div><div class='del'>-	long maxbno;		       /* size of dirfile in bits */</div><div class='del'>-	long curbit;		       /* current bit number */</div><div class='del'>-	long hmask;		       /* current hash mask */</div><div class='del'>-	long blkptr;		       /* current block for nextkey */</div><div class='del'>-	int keyptr;		       /* current key for nextkey */</div><div class='del'>-	long blkno;		       /* current page to read/write */</div><div class='del'>-	long pagbno;		       /* current page in pagbuf */</div><div class='del'>-	char pagbuf[PBLKSIZ];	       /* page file block buffer */</div><div class='del'>-	long dirbno;		       /* current block in dirbuf */</div><div class='del'>-	char dirbuf[DBLKSIZ];	       /* directory file block buffer */</div><div class='del'>-} DBM;</div><div class='del'>-</div><div class='del'>-#define DBM_RDONLY	0x1	       /* data base open read-only */</div><div class='del'>-#define DBM_IOERR	0x2	       /* data base I/O error */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * utility macros</div><div class='del'>- */</div><div class='del'>-#define sdbm_rdonly(db)		((db)-&gt;flags &amp; DBM_RDONLY)</div><div class='del'>-#define sdbm_error(db)		((db)-&gt;flags &amp; DBM_IOERR)</div><div class='del'>-</div><div class='del'>-#define sdbm_clearerr(db)	((db)-&gt;flags &amp;= ~DBM_IOERR)  /* ouch */</div><div class='del'>-</div><div class='del'>-#define sdbm_dirfno(db)	((db)-&gt;dirf)</div><div class='del'>-#define sdbm_pagfno(db)	((db)-&gt;pagf)</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-	char *dptr;</div><div class='del'>-	int dsize;</div><div class='del'>-} datum;</div><div class='del'>-</div><div class='del'>-extern datum nullitem;</div><div class='del'>-</div><div class='del'>-#if defined(__STDC__) || defined(MSDOS)</div><div class='del'>-#define proto(p) p</div><div class='del'>-#else</div><div class='del'>-#define proto(p) ()</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * flags to sdbm_store</div><div class='del'>- */</div><div class='del'>-#define DBM_INSERT	0</div><div class='del'>-#define DBM_REPLACE	1</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * ndbm interface</div><div class='del'>- */</div><div class='del'>-extern DBM *sdbm_open proto((char *, int, int));</div><div class='del'>-extern void sdbm_close proto((DBM *));</div><div class='del'>-extern datum sdbm_fetch proto((DBM *, datum));</div><div class='del'>-extern int sdbm_delete proto((DBM *, datum));</div><div class='del'>-extern int sdbm_store proto((DBM *, datum, datum, int));</div><div class='del'>-extern datum sdbm_firstkey proto((DBM *));</div><div class='del'>-extern datum sdbm_nextkey proto((DBM *));</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * other</div><div class='del'>- */</div><div class='del'>-extern DBM *sdbm_prep proto((char *, char *, int, int));</div><div class='del'>-extern long sdbm_hash proto((char *, int));</div><div class='del'>-</div><div class='del'>-#endif	/* _SDBM_H_ */</div><div class='head'>diff --git a/ext/socket/.cvsignore b/ext/socket/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/socket/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/.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/socket/addrinfo.h b/ext/socket/addrinfo.h<br/>deleted file mode 100644<br/>index e93adafba6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/socket/addrinfo.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/addrinfo.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,177 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.</div><div class='del'>- * All rights reserved.</div><div class='del'>- * </div><div class='del'>- * Redistribution and use in source and binary forms, with or without</div><div class='del'>- * modification, are permitted provided that the following conditions</div><div class='del'>- * are met:</div><div class='del'>- * 1. Redistributions of source code must retain the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer.</div><div class='del'>- * 2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer in the</div><div class='del'>- *    documentation and/or other materials provided with the distribution.</div><div class='del'>- * 3. Neither the name of the project nor the names of its contributors</div><div class='del'>- *    may be used to endorse or promote products derived from this software</div><div class='del'>- *    without specific prior written permission.</div><div class='del'>- * </div><div class='del'>- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND</div><div class='del'>- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</div><div class='del'>- * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE</div><div class='del'>- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</div><div class='del'>- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</div><div class='del'>- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</div><div class='del'>- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</div><div class='del'>- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</div><div class='del'>- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='del'>- * SUCH DAMAGE.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#ifndef ADDR_INFO_H</div><div class='del'>-#define ADDR_INFO_H</div><div class='del'>-#ifndef HAVE_GETADDRINFO</div><div class='del'>-</div><div class='del'>-/* special compatibility hack */</div><div class='del'>-#undef EAI_ADDRFAMILY</div><div class='del'>-#undef EAI_AGAIN</div><div class='del'>-#undef EAI_BADFLAGS</div><div class='del'>-#undef EAI_FAIL</div><div class='del'>-#undef EAI_FAMILY</div><div class='del'>-#undef EAI_MEMORY</div><div class='del'>-#undef EAI_NODATA</div><div class='del'>-#undef EAI_NONAME</div><div class='del'>-#undef EAI_SERVICE</div><div class='del'>-#undef EAI_SOCKTYPE</div><div class='del'>-#undef EAI_SYSTEM</div><div class='del'>-#undef EAI_BADHINTS</div><div class='del'>-#undef EAI_PROTOCOL</div><div class='del'>-#undef EAI_MAX</div><div class='del'>-</div><div class='del'>-#undef AI_PASSIVE</div><div class='del'>-#undef AI_CANONNAME</div><div class='del'>-#undef AI_NUMERICHOST</div><div class='del'>-#undef AI_ALL</div><div class='del'>-#undef AI_ADDRCONFIG</div><div class='del'>-#undef AI_V4MAPPED</div><div class='del'>-#undef AI_DEFAULT</div><div class='del'>-</div><div class='del'>-#undef NI_NOFQDN</div><div class='del'>-#undef NI_NUMERICHOST</div><div class='del'>-#undef NI_NAMEREQD</div><div class='del'>-#undef NI_NUMERICSERV</div><div class='del'>-#undef NI_DGRAM</div><div class='del'>-</div><div class='del'>-#undef addrinfo</div><div class='del'>-#define addrinfo addrinfo__compat</div><div class='del'>-#undef getaddrinfo</div><div class='del'>-#define getaddrinfo getaddrinfo__compat</div><div class='del'>-#undef getnameinfo</div><div class='del'>-#define getnameinfo getnameinfo__compat</div><div class='del'>-#undef freehostent</div><div class='del'>-#define freehostent freehostent__compat</div><div class='del'>-#undef freeaddrinfo</div><div class='del'>-#define freeaddrinfo freeaddrinfo__compat</div><div class='del'>-</div><div class='del'>-#ifndef __P</div><div class='del'>-# ifdef HAVE_PROTOTYPES</div><div class='del'>-#  define __P(args) args</div><div class='del'>-# else</div><div class='del'>-#  define __P(args) ()</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* special compatibility hack -- end*/</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Error return codes from getaddrinfo()</div><div class='del'>- */</div><div class='del'>-#define	EAI_ADDRFAMILY	 1	/* address family for hostname not supported */</div><div class='del'>-#define	EAI_AGAIN	 2	/* temporary failure in name resolution */</div><div class='del'>-#define	EAI_BADFLAGS	 3	/* invalid value for ai_flags */</div><div class='del'>-#define	EAI_FAIL	 4	/* non-recoverable failure in name resolution */</div><div class='del'>-#define	EAI_FAMILY	 5	/* ai_family not supported */</div><div class='del'>-#define	EAI_MEMORY	 6	/* memory allocation failure */</div><div class='del'>-#define	EAI_NODATA	 7	/* no address associated with hostname */</div><div class='del'>-#define	EAI_NONAME	 8	/* hostname nor servname provided, or not known */</div><div class='del'>-#define	EAI_SERVICE	 9	/* servname not supported for ai_socktype */</div><div class='del'>-#define	EAI_SOCKTYPE	10	/* ai_socktype not supported */</div><div class='del'>-#define	EAI_SYSTEM	11	/* system error returned in errno */</div><div class='del'>-#define EAI_BADHINTS	12</div><div class='del'>-#define EAI_PROTOCOL	13</div><div class='del'>-#define EAI_MAX		14</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Flag values for getaddrinfo()</div><div class='del'>- */</div><div class='del'>-#define	AI_PASSIVE	0x00000001 /* get address to use bind() */</div><div class='del'>-#define	AI_CANONNAME	0x00000002 /* fill ai_canonname */</div><div class='del'>-#define	AI_NUMERICHOST	0x00000004 /* prevent name resolution */</div><div class='del'>-/* valid flags for addrinfo */</div><div class='del'>-#define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)</div><div class='del'>-</div><div class='del'>-#define	AI_ALL		0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */</div><div class='del'>-#define	AI_V4MAPPED_CFG	0x00000200 /* accept IPv4-mapped if kernel supports */</div><div class='del'>-#define	AI_ADDRCONFIG	0x00000400 /* only if any address is assigned */</div><div class='del'>-#define	AI_V4MAPPED	0x00000800 /* accept IPv4-mapped IPv6 address */</div><div class='del'>-/* special recommended flags for getipnodebyname */</div><div class='del'>-#define	AI_DEFAULT	(AI_V4MAPPED_CFG | AI_ADDRCONFIG)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Constants for getnameinfo()</div><div class='del'>- */</div><div class='del'>-#ifndef NI_MAXHOST</div><div class='del'>-#define	NI_MAXHOST	1025</div><div class='del'>-#define	NI_MAXSERV	32</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Flag values for getnameinfo()</div><div class='del'>- */</div><div class='del'>-#define	NI_NOFQDN	0x00000001</div><div class='del'>-#define	NI_NUMERICHOST	0x00000002</div><div class='del'>-#define	NI_NAMEREQD	0x00000004</div><div class='del'>-#define	NI_NUMERICSERV	0x00000008</div><div class='del'>-#define	NI_DGRAM	0x00000010</div><div class='del'>-</div><div class='del'>-struct addrinfo {</div><div class='del'>-	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */</div><div class='del'>-	int	ai_family;	/* PF_xxx */</div><div class='del'>-	int	ai_socktype;	/* SOCK_xxx */</div><div class='del'>-	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */</div><div class='del'>-	size_t	ai_addrlen;	/* length of ai_addr */</div><div class='del'>-	char	*ai_canonname;	/* canonical name for hostname */</div><div class='del'>-	struct sockaddr *ai_addr;	/* binary address */</div><div class='del'>-	struct addrinfo *ai_next;	/* next structure in linked list */</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-extern int getaddrinfo __P((</div><div class='del'>-	const char *hostname, const char *servname,</div><div class='del'>-	const struct addrinfo *hints,</div><div class='del'>-	struct addrinfo **res));</div><div class='del'>-</div><div class='del'>-extern int getnameinfo __P((</div><div class='del'>-	const struct sockaddr *sa,</div><div class='del'>-	size_t salen,</div><div class='del'>-	char *host,</div><div class='del'>-	size_t hostlen,</div><div class='del'>-	char *serv,</div><div class='del'>-	size_t servlen,</div><div class='del'>-	int flags));</div><div class='del'>-</div><div class='del'>-extern void freehostent __P((struct hostent *));</div><div class='del'>-extern void freeaddrinfo __P((struct addrinfo *));</div><div class='del'>-#if defined __UCLIBC__</div><div class='del'>-const</div><div class='del'>-#endif</div><div class='del'>-extern char *gai_strerror __P((int));</div><div class='del'>-</div><div class='del'>-/* In case there is no definition of offsetof() provided - though any proper</div><div class='del'>-Standard C system should have one. */</div><div class='del'>-</div><div class='del'>-#ifndef offsetof</div><div class='del'>-#define offsetof(p_type,field) ((size_t)&amp;(((p_type *)0)-&gt;field))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/socket/depend b/ext/socket/depend<br/>deleted file mode 100644<br/>index cca6d4e62a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/socket/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-socket.o : socket.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/rubyio.h $(hdrdir)/rubysig.h sockport.h</div><div class='del'>-getnameinfo.o: getnameinfo.c $(topdir)/config.h addrinfo.h sockport.h</div><div class='del'>-getaddrinfo.o: getaddrinfo.c $(topdir)/config.h addrinfo.h sockport.h</div><div class='head'>diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb<br/>deleted file mode 100644<br/>index 8a13ddba73..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/socket/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,288 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-case RUBY_PLATFORM</div><div class='del'>-when /bccwin32/</div><div class='del'>-  test_func = "WSACleanup"</div><div class='del'>-  have_library("ws2_32", "WSACleanup")</div><div class='del'>-when /mswin32|mingw/</div><div class='del'>-  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='del'>-when /cygwin/</div><div class='del'>-  test_func = "socket"</div><div class='del'>-when /beos/</div><div class='del'>-  test_func = "socket"</div><div class='del'>-  have_library("net", "socket")</div><div class='del'>-  have_func("closesocket")</div><div class='del'>-when /i386-os2_emx/</div><div class='del'>-  test_func = "socket"</div><div class='del'>-  have_library("socket", "socket")</div><div class='del'>-else</div><div class='del'>-  test_func = "socket"</div><div class='del'>-  have_library("nsl", "t_open")</div><div class='del'>-  have_library("socket", "socket")</div><div class='del'>-end</div><div class='del'>-</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'>-if have_header("arpa/inet.h")</div><div class='del'>-  headers &lt;&lt; "arpa/inet.h"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ipv6 = false</div><div class='del'>-default_ipv6 = /cygwin/ !~ RUBY_PLATFORM</div><div class='del'>-if enable_config("ipv6", default_ipv6)</div><div class='del'>-  if checking_for("ipv6") {try_link(&lt;&lt;EOF)}</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#include &lt;sys/socket.h&gt;</div><div class='del'>-main()</div><div class='del'>-{</div><div class='del'>-  socket(AF_INET6, SOCK_STREAM, 0);</div><div class='del'>-}</div><div class='del'>-EOF</div><div class='del'>-    $defs &lt;&lt; "-DENABLE_IPV6" &lt;&lt; "-DINET6"</div><div class='del'>-    ipv6 = true</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</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='del'>-  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='del'>-</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='del'>-ipv6 kit and compile beforehand.</div><div class='del'>-EOS</div><div class='del'>-end</div><div class='del'>-</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='del'>-end</div><div class='del'>-</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='del'>-end</div><div class='del'>-</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='del'>-end</div><div class='del'>-</div><div class='del'>-have_header("netinet/tcp.h") if not /cygwin/ =~ RUBY_PLATFORM # for cygwin 1.1.5</div><div class='del'>-have_header("netinet/udp.h")</div><div class='del'>-</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='del'>-</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='del'>-</div><div class='del'>-#ifndef AF_LOCAL</div><div class='del'>-#define AF_LOCAL AF_UNIX</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-main()</div><div class='del'>-{</div><div class='del'>-  int passive, gaierr, inet4 = 0, inet6 = 0;</div><div class='del'>-  struct addrinfo hints, *ai, *aitop;</div><div class='del'>-  char straddr[INET6_ADDRSTRLEN], strport[16];</div><div class='del'>-</div><div class='del'>-  for (passive = 0; passive &lt;= 1; passive++) {</div><div class='del'>-    memset(&amp;hints, 0, sizeof(hints));</div><div class='del'>-    hints.ai_family = AF_UNSPEC;</div><div class='del'>-    hints.ai_protocol = IPPROTO_TCP;</div><div class='del'>-    hints.ai_flags = passive ? AI_PASSIVE : 0;</div><div class='del'>-    hints.ai_socktype = SOCK_STREAM;</div><div class='del'>-    if ((gaierr = getaddrinfo(NULL, "54321", &amp;hints, &amp;aitop)) != 0) {</div><div class='del'>-      (void)gai_strerror(gaierr);</div><div class='del'>-      goto bad;</div><div class='del'>-    }</div><div class='del'>-    for (ai = aitop; ai; ai = ai-&gt;ai_next) {</div><div class='del'>-      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'>-      if (ai-&gt;ai_family == AF_INET6 &amp;&amp; passive) {</div><div class='del'>-        inet6++;</div><div class='del'>-        continue;</div><div class='del'>-      }</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='del'>-          getnameinfo(ai-&gt;ai_addr, ai-&gt;ai_addrlen,</div><div class='del'>-                      straddr, sizeof(straddr), strport, sizeof(strport),</div><div class='del'>-                      NI_NUMERICHOST|NI_NUMERICSERV) != 0) {</div><div class='del'>-        goto bad;</div><div class='del'>-      }</div><div class='del'>-      if (strcmp(strport, "54321") != 0) {</div><div class='del'>-        goto bad;</div><div class='del'>-      }</div><div class='del'>-      switch (ai-&gt;ai_family) {</div><div class='del'>-      case AF_INET:</div><div class='del'>-        if (passive) {</div><div class='del'>-          if (strcmp(straddr, "0.0.0.0") != 0) {</div><div class='del'>-            goto bad;</div><div class='del'>-          }</div><div class='del'>-        } else {</div><div class='del'>-          if (strcmp(straddr, "127.0.0.1") != 0) {</div><div class='del'>-            goto bad;</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-        inet4++;</div><div class='del'>-        break;</div><div class='del'>-      case AF_INET6:</div><div class='del'>-        if (passive) {</div><div class='del'>-          if (strcmp(straddr, "::") != 0) {</div><div class='del'>-            goto bad;</div><div class='del'>-          }</div><div class='del'>-        } else {</div><div class='del'>-          if (strcmp(straddr, "::1") != 0) {</div><div class='del'>-            goto bad;</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-        inet6++;</div><div class='del'>-        break;</div><div class='del'>-      case AF_UNSPEC:</div><div class='del'>-        goto bad;</div><div class='del'>-        break;</div><div class='del'>-      default:</div><div class='del'>-        /* another family support? */</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'>-  if (!(inet4 == 0 || inet4 == 2))</div><div class='del'>-    goto bad;</div><div class='del'>-  if (!(inet6 == 0 || inet6 == 2))</div><div class='del'>-    goto bad;</div><div class='del'>-</div><div class='del'>-  if (aitop)</div><div class='del'>-    freeaddrinfo(aitop);</div><div class='del'>-  exit(EXIT_SUCCESS);</div><div class='del'>-</div><div class='del'>- bad:</div><div class='del'>-  if (aitop)</div><div class='del'>-    freeaddrinfo(aitop);</div><div class='del'>-  exit(EXIT_FAILURE);</div><div class='del'>-}</div><div class='del'>-EOF</div><div class='del'>-end</div><div class='del'>-if ipv6 and not getaddr_info_ok</div><div class='del'>-  abort &lt;&lt;EOS</div><div class='del'>-</div><div class='del'>-Fatal: --enable-ipv6 is specified, and your OS seems to support IPv6 feature.</div><div class='del'>-But your getaddrinfo() and getnameinfo() are appeared to be broken.  Sorry,</div><div class='del'>-you cannot compile IPv6 socket classes with broken these functions.</div><div class='del'>-You can try --enable-wide-getaddrinfo.</div><div class='del'>-EOS</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-case with_config("lookup-order-hack", "UNSPEC")</div><div class='del'>-when "INET"</div><div class='del'>-  $defs &lt;&lt; "-DLOOKUP_ORDER_HACK_INET"</div><div class='del'>-when "INET6"</div><div class='del'>-  $defs &lt;&lt; "-DLOOKUP_ORDER_HACK_INET6"</div><div class='del'>-when "UNSPEC"</div><div class='del'>-  # nothing special</div><div class='del'>-else</div><div class='del'>-  abort &lt;&lt;EOS</div><div class='del'>-</div><div class='del'>-Fatal: invalid value for --with-lookup-order-hack (expected INET, INET6 or UNSPEC)</div><div class='del'>-EOS</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$objs = ["socket.#{$OBJEXT}"]</div><div class='del'>-</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='del'>-  $objs += ["getaddrinfo.#{$OBJEXT}"]</div><div class='del'>-  $objs += ["getnameinfo.#{$OBJEXT}"]</div><div class='del'>-  have_func("inet_ntop") or have_func("inet_ntoa")</div><div class='del'>-  have_func("inet_pton") or have_func("inet_aton")</div><div class='del'>-  have_func("getservbyport")</div><div class='del'>-  have_header("arpa/nameser.h")</div><div class='del'>-  have_header("resolv.h")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-unless have_type("socklen_t", headers)</div><div class='del'>-  $defs &lt;&lt; "-Dsocklen_t=int"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-have_header("sys/un.h")</div><div class='del'>-have_header("sys/uio.h")</div><div class='del'>-</div><div class='del'>-if have_func(test_func)</div><div class='del'>-  have_func("hsterror")</div><div class='del'>-  have_func("getipnodebyname") or have_func("gethostbyname2")</div><div class='del'>-  have_func("socketpair")</div><div class='del'>-  unless have_func("gethostname")</div><div class='del'>-    have_func("uname")</div><div class='del'>-  end</div><div class='del'>-  if enable_config("socks", ENV["SOCKS_SERVER"])</div><div class='del'>-    if have_library("socks5", "SOCKSinit")</div><div class='del'>-      $defs &lt;&lt; "-DSOCKS5" &lt;&lt; "-DSOCKS"</div><div class='del'>-    elsif have_library("socks", "Rconnect")</div><div class='del'>-      $defs &lt;&lt; "-DSOCKS"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  create_makefile("socket")</div><div class='del'>-end</div><div class='head'>diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c<br/>deleted file mode 100644<br/>index 9fb4ebcb06..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/socket/getaddrinfo.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/getaddrinfo.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,698 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.</div><div class='del'>- * All rights reserved.</div><div class='del'>- * </div><div class='del'>- * Redistribution and use in source and binary forms, with or without</div><div class='del'>- * modification, are permitted provided that the following conditions</div><div class='del'>- * are met:</div><div class='del'>- * 1. Redistributions of source code must retain the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer.</div><div class='del'>- * 2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer in the</div><div class='del'>- *    documentation and/or other materials provided with the distribution.</div><div class='del'>- * 3. Neither the name of the project nor the names of its contributors</div><div class='del'>- *    may be used to endorse or promote products derived from this software</div><div class='del'>- *    without specific prior written permission.</div><div class='del'>- * </div><div class='del'>- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND</div><div class='del'>- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</div><div class='del'>- * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE</div><div class='del'>- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</div><div class='del'>- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</div><div class='del'>- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</div><div class='del'>- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</div><div class='del'>- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</div><div class='del'>- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='del'>- * SUCH DAMAGE.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * "#ifdef FAITH" part is local hack for supporting IPv4-v6 translator.</div><div class='del'>- *</div><div class='del'>- * Issues to be discussed:</div><div class='del'>- * - Thread safe-ness must be checked.</div><div class='del'>- * - Return values.  There are nonstandard return values defined and used</div><div class='del'>- *   in the source code.  This is because RFC2133 is silent about which error</div><div class='del'>- *   code must be returned for which situation.</div><div class='del'>- * - PF_UNSPEC case would be handled in getipnodebyname() with the AI_ALL flag.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "config.h"</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#if !defined(_WIN32) &amp;&amp; !defined(__VMS)</div><div class='del'>-#include &lt;sys/param.h&gt;</div><div class='del'>-#if defined(__BEOS__)</div><div class='del'>-# include &lt;net/socket.h&gt;</div><div class='del'>-#else</div><div class='del'>-# include &lt;sys/socket.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;netinet/in.h&gt;</div><div class='del'>-#if defined(HAVE_ARPA_INET_H)</div><div class='del'>-#include &lt;arpa/inet.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#if defined(HAVE_ARPA_NAMESER_H)</div><div class='del'>-#include &lt;arpa/nameser.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;netdb.h&gt;</div><div class='del'>-#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='del'>-#include &lt;resolv.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#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='del'>-#else</div><div class='del'>-#include &lt;winsock2.h&gt;</div><div class='del'>-#include &lt;io.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;string.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;stddef.h&gt;</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-</div><div class='del'>-#ifdef SOCKS5</div><div class='del'>-#include &lt;socks.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include "addrinfo.h"</div><div class='del'>-#include "sockport.h"</div><div class='del'>-</div><div class='del'>-#if defined(__KAME__) &amp;&amp; defined(INET6)</div><div class='del'>-# define FAITH</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define SUCCESS 0</div><div class='del'>-#define ANY 0</div><div class='del'>-#define YES 1</div><div class='del'>-#define NO  0</div><div class='del'>-</div><div class='del'>-#ifdef FAITH</div><div class='del'>-static int translate = NO;</div><div class='del'>-static struct in6_addr faith_prefix = IN6ADDR_ANY_INIT;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static const char in_addrany[] = { 0, 0, 0, 0 };</div><div class='del'>-static const char in6_addrany[] = {</div><div class='del'>-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</div><div class='del'>-};</div><div class='del'>-static const char in_loopback[] = { 127, 0, 0, 1 }; </div><div class='del'>-static const char in6_loopback[] = {</div><div class='del'>-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct sockinet {</div><div class='del'>-	u_char	si_len;</div><div class='del'>-	u_char	si_family;</div><div class='del'>-	u_short	si_port;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static const struct afd {</div><div class='del'>-	int a_af;</div><div class='del'>-	int a_addrlen;</div><div class='del'>-	int a_socklen;</div><div class='del'>-	int a_off;</div><div class='del'>-	const char *a_addrany;</div><div class='del'>-	const char *a_loopback;	</div><div class='del'>-} afdl [] = {</div><div class='del'>-#ifdef INET6</div><div class='del'>-#define N_INET6 0</div><div class='del'>-	{PF_INET6, sizeof(struct in6_addr),</div><div class='del'>-	 sizeof(struct sockaddr_in6),</div><div class='del'>-	 offsetof(struct sockaddr_in6, sin6_addr),</div><div class='del'>-	 in6_addrany, in6_loopback},</div><div class='del'>-#define N_INET  1</div><div class='del'>-#else</div><div class='del'>-#define N_INET  0</div><div class='del'>-#endif</div><div class='del'>-	{PF_INET, sizeof(struct in_addr),</div><div class='del'>-	 sizeof(struct sockaddr_in),</div><div class='del'>-	 offsetof(struct sockaddr_in, sin_addr),</div><div class='del'>-	 in_addrany, in_loopback},</div><div class='del'>-	{0, 0, 0, 0, NULL, NULL},</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#ifdef INET6</div><div class='del'>-#define PTON_MAX	16</div><div class='del'>-#else</div><div class='del'>-#define PTON_MAX	4</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int get_name __P((const char *, const struct afd *,</div><div class='del'>-			  struct addrinfo **, char *, struct addrinfo *,</div><div class='del'>-			  int));</div><div class='del'>-static int get_addr __P((const char *, int, struct addrinfo **,</div><div class='del'>-			struct addrinfo *, int));</div><div class='del'>-static int str_isnumber __P((const char *));</div><div class='del'>-	</div><div class='del'>-static const char *const ai_errlist[] = {</div><div class='del'>-	"success.",</div><div class='del'>-	"address family for hostname not supported.",	/* EAI_ADDRFAMILY */</div><div class='del'>-	"temporary failure in name resolution.",	/* EAI_AGAIN      */</div><div class='del'>-	"invalid value for ai_flags.",		       	/* EAI_BADFLAGS   */</div><div class='del'>-	"non-recoverable failure in name resolution.", 	/* EAI_FAIL       */</div><div class='del'>-	"ai_family not supported.",			/* EAI_FAMILY     */</div><div class='del'>-	"memory allocation failure.", 			/* EAI_MEMORY     */</div><div class='del'>-	"no address associated with hostname.", 	/* EAI_NODATA     */</div><div class='del'>-	"hostname nor servname provided, or not known.",/* EAI_NONAME     */</div><div class='del'>-	"servname not supported for ai_socktype.",	/* EAI_SERVICE    */</div><div class='del'>-	"ai_socktype not supported.", 			/* EAI_SOCKTYPE   */</div><div class='del'>-	"system error returned in errno.", 		/* EAI_SYSTEM     */</div><div class='del'>-	"invalid value for hints.",			/* EAI_BADHINTS	  */</div><div class='del'>-	"resolved protocol is unknown.",		/* EAI_PROTOCOL   */</div><div class='del'>-	"unknown error.", 				/* EAI_MAX        */</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define GET_CANONNAME(ai, str) \</div><div class='del'>-if (pai-&gt;ai_flags &amp; AI_CANONNAME) {\</div><div class='del'>-	if (((ai)-&gt;ai_canonname = (char *)malloc(strlen(str) + 1)) != NULL) {\</div><div class='del'>-		strcpy((ai)-&gt;ai_canonname, (str));\</div><div class='del'>-	} else {\</div><div class='del'>-		error = EAI_MEMORY;\</div><div class='del'>-		goto free;\</div><div class='del'>-	}\</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define GET_AI(ai, afd, addr, port) {\</div><div class='del'>-	char *p;\</div><div class='del'>-	if (((ai) = (struct addrinfo *)malloc(sizeof(struct addrinfo) +\</div><div class='del'>-					      ((afd)-&gt;a_socklen)))\</div><div class='del'>-	    == NULL) {\</div><div class='del'>-		error = EAI_MEMORY;\</div><div class='del'>-		goto free;\</div><div class='del'>-	}\</div><div class='del'>-	memcpy(ai, pai, sizeof(struct addrinfo));\</div><div class='del'>-	(ai)-&gt;ai_addr = (struct sockaddr *)((ai) + 1);\</div><div class='del'>-	memset((ai)-&gt;ai_addr, 0, (afd)-&gt;a_socklen);\</div><div class='del'>-	SET_SA_LEN((ai)-&gt;ai_addr, (ai)-&gt;ai_addrlen = (afd)-&gt;a_socklen);\</div><div class='del'>-	(ai)-&gt;ai_addr-&gt;sa_family = (ai)-&gt;ai_family = (afd)-&gt;a_af;\</div><div class='del'>-	((struct sockinet *)(ai)-&gt;ai_addr)-&gt;si_port = port;\</div><div class='del'>-	p = (char *)((ai)-&gt;ai_addr);\</div><div class='del'>-	memcpy(p + (afd)-&gt;a_off, (addr), (afd)-&gt;a_addrlen);\</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define ERR(err) { error = (err); goto bad; }</div><div class='del'>-</div><div class='del'>-#if defined __UCLIBC__</div><div class='del'>-const</div><div class='del'>-#endif</div><div class='del'>-char *</div><div class='del'>-gai_strerror(ecode)</div><div class='del'>-	int ecode;</div><div class='del'>-{</div><div class='del'>-	if (ecode &lt; 0 || ecode &gt; EAI_MAX)</div><div class='del'>-		ecode = EAI_MAX;</div><div class='del'>-	return (char *)ai_errlist[ecode];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-freeaddrinfo(ai)</div><div class='del'>-	struct addrinfo *ai;</div><div class='del'>-{</div><div class='del'>-	struct addrinfo *next;</div><div class='del'>-</div><div class='del'>-	do {</div><div class='del'>-		next = ai-&gt;ai_next;</div><div class='del'>-		if (ai-&gt;ai_canonname)</div><div class='del'>-			free(ai-&gt;ai_canonname);</div><div class='del'>-		/* no need to free(ai-&gt;ai_addr) */</div><div class='del'>-		free(ai);</div><div class='del'>-	} while ((ai = next) != NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-str_isnumber(p)</div><div class='del'>-	const char *p;</div><div class='del'>-{</div><div class='del'>-	char *q = (char *)p;</div><div class='del'>-	while (*q) {</div><div class='del'>-		if (! isdigit(*q))</div><div class='del'>-			return NO;</div><div class='del'>-		q++;</div><div class='del'>-	}</div><div class='del'>-	return YES;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_INET_PTON</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-inet_pton(af, hostname, pton)</div><div class='del'>-	int af;</div><div class='del'>-	const char *hostname;</div><div class='del'>-	void *pton;</div><div class='del'>-{</div><div class='del'>-	struct in_addr in;</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_INET_ATON</div><div class='del'>-	if (!inet_aton(hostname, &amp;in))</div><div class='del'>-	    return 0;</div><div class='del'>-#else</div><div class='del'>-	int d1, d2, d3, d4;</div><div class='del'>-	char ch;</div><div class='del'>-</div><div class='del'>-	if (sscanf(hostname, "%d.%d.%d.%d%c", &amp;d1, &amp;d2, &amp;d3, &amp;d4, &amp;ch) == 4 &amp;&amp;</div><div class='del'>-	    0 &lt;= d1 &amp;&amp; d1 &lt;= 255 &amp;&amp; 0 &lt;= d2 &amp;&amp; d2 &lt;= 255 &amp;&amp;</div><div class='del'>-	    0 &lt;= d3 &amp;&amp; d3 &lt;= 255 &amp;&amp; 0 &lt;= d4 &amp;&amp; d4 &lt;= 255) {</div><div class='del'>-	    in.s_addr = htonl(</div><div class='del'>-		((long) d1 &lt;&lt; 24) | ((long) d2 &lt;&lt; 16) |</div><div class='del'>-		((long) d3 &lt;&lt; 8) | ((long) d4 &lt;&lt; 0));</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    return 0;</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-	memcpy(pton, &amp;in, sizeof(in));</div><div class='del'>-	return 1;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-getaddrinfo(hostname, servname, hints, res)</div><div class='del'>-	const char *hostname, *servname;</div><div class='del'>-	const struct addrinfo *hints;</div><div class='del'>-	struct addrinfo **res;</div><div class='del'>-{</div><div class='del'>-	struct addrinfo sentinel;</div><div class='del'>-	struct addrinfo *top = NULL;</div><div class='del'>-	struct addrinfo *cur;</div><div class='del'>-	int i, error = 0;</div><div class='del'>-	char pton[PTON_MAX];</div><div class='del'>-	struct addrinfo ai;</div><div class='del'>-	struct addrinfo *pai;</div><div class='del'>-	u_short port;</div><div class='del'>-</div><div class='del'>-#ifdef FAITH</div><div class='del'>-	static int firsttime = 1;</div><div class='del'>-</div><div class='del'>-	if (firsttime) {</div><div class='del'>-		/* translator hack */</div><div class='del'>-		{</div><div class='del'>-			char *q = getenv("GAI");</div><div class='del'>-			if (q &amp;&amp; inet_pton(AF_INET6, q, &amp;faith_prefix) == 1)</div><div class='del'>-				translate = YES;</div><div class='del'>-		}</div><div class='del'>-		firsttime = 0;</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-	/* initialize file static vars */</div><div class='del'>-	sentinel.ai_next = NULL;</div><div class='del'>-	cur = &amp;sentinel;</div><div class='del'>-	pai = &amp;ai;</div><div class='del'>-	pai-&gt;ai_flags = 0;</div><div class='del'>-	pai-&gt;ai_family = PF_UNSPEC;</div><div class='del'>-	pai-&gt;ai_socktype = ANY;</div><div class='del'>-	pai-&gt;ai_protocol = ANY;</div><div class='del'>-	pai-&gt;ai_addrlen = 0;</div><div class='del'>-	pai-&gt;ai_canonname = NULL;</div><div class='del'>-	pai-&gt;ai_addr = NULL;</div><div class='del'>-	pai-&gt;ai_next = NULL;</div><div class='del'>-	port = ANY;</div><div class='del'>-	</div><div class='del'>-	if (hostname == NULL &amp;&amp; servname == NULL)</div><div class='del'>-		return EAI_NONAME;</div><div class='del'>-	if (hints) {</div><div class='del'>-		/* error check for hints */</div><div class='del'>-		if (hints-&gt;ai_addrlen || hints-&gt;ai_canonname ||</div><div class='del'>-		    hints-&gt;ai_addr || hints-&gt;ai_next)</div><div class='del'>-			ERR(EAI_BADHINTS); /* xxx */</div><div class='del'>-		if (hints-&gt;ai_flags &amp; ~AI_MASK)</div><div class='del'>-			ERR(EAI_BADFLAGS);</div><div class='del'>-		switch (hints-&gt;ai_family) {</div><div class='del'>-		case PF_UNSPEC:</div><div class='del'>-		case PF_INET:</div><div class='del'>-#ifdef INET6</div><div class='del'>-		case PF_INET6:</div><div class='del'>-#endif</div><div class='del'>-			break;</div><div class='del'>-		default:</div><div class='del'>-			ERR(EAI_FAMILY);</div><div class='del'>-		}</div><div class='del'>-		memcpy(pai, hints, sizeof(*pai));</div><div class='del'>-		switch (pai-&gt;ai_socktype) {</div><div class='del'>-		case ANY:</div><div class='del'>-			switch (pai-&gt;ai_protocol) {</div><div class='del'>-			case ANY:</div><div class='del'>-				break;</div><div class='del'>-			case IPPROTO_UDP:</div><div class='del'>-				pai-&gt;ai_socktype = SOCK_DGRAM;</div><div class='del'>-				break;</div><div class='del'>-			case IPPROTO_TCP:</div><div class='del'>-				pai-&gt;ai_socktype = SOCK_STREAM;</div><div class='del'>-				break;</div><div class='del'>-			default:</div><div class='del'>-#if defined(SOCK_RAW)</div><div class='del'>-				pai-&gt;ai_socktype = SOCK_RAW;</div><div class='del'>-#endif</div><div class='del'>-				break;</div><div class='del'>-			}</div><div class='del'>-			break;</div><div class='del'>-#if defined(SOCK_RAW)</div><div class='del'>-		case SOCK_RAW:</div><div class='del'>-			break;</div><div class='del'>-#endif</div><div class='del'>-		case SOCK_DGRAM:</div><div class='del'>-			if (pai-&gt;ai_protocol != IPPROTO_UDP &amp;&amp;</div><div class='del'>-			    pai-&gt;ai_protocol != ANY)</div><div class='del'>-				ERR(EAI_BADHINTS);	/*xxx*/</div><div class='del'>-			pai-&gt;ai_protocol = IPPROTO_UDP;</div><div class='del'>-			break;</div><div class='del'>-		case SOCK_STREAM:</div><div class='del'>-			if (pai-&gt;ai_protocol != IPPROTO_TCP &amp;&amp;</div><div class='del'>-			    pai-&gt;ai_protocol != ANY)</div><div class='del'>-				ERR(EAI_BADHINTS);	/*xxx*/</div><div class='del'>-			pai-&gt;ai_protocol = IPPROTO_TCP;</div><div class='del'>-			break;</div><div class='del'>-		default:</div><div class='del'>-			ERR(EAI_SOCKTYPE);</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'>-	 * service port</div><div class='del'>-	 */</div><div class='del'>-	if (servname) {</div><div class='del'>-		if (str_isnumber(servname)) {</div><div class='del'>-			if (pai-&gt;ai_socktype == ANY) {</div><div class='del'>-				/* caller accept *ANY* socktype */</div><div class='del'>-				pai-&gt;ai_socktype = SOCK_DGRAM;</div><div class='del'>-				pai-&gt;ai_protocol = IPPROTO_UDP;</div><div class='del'>-			}</div><div class='del'>-			port = htons((unsigned short)atoi(servname));</div><div class='del'>-		} else {</div><div class='del'>-			struct servent *sp;</div><div class='del'>-			char *proto;</div><div class='del'>-</div><div class='del'>-			proto = NULL;</div><div class='del'>-			switch (pai-&gt;ai_socktype) {</div><div class='del'>-			case ANY:</div><div class='del'>-				proto = NULL;</div><div class='del'>-				break;</div><div class='del'>-			case SOCK_DGRAM:</div><div class='del'>-				proto = "udp";</div><div class='del'>-				break;</div><div class='del'>-			case SOCK_STREAM:</div><div class='del'>-				proto = "tcp";</div><div class='del'>-				break;</div><div class='del'>-			default:</div><div class='del'>-				fprintf(stderr, "panic!\n");</div><div class='del'>-				break;</div><div class='del'>-			}</div><div class='del'>-			if ((sp = getservbyname((char*)servname, proto)) == NULL)</div><div class='del'>-				ERR(EAI_SERVICE);</div><div class='del'>-			port = sp-&gt;s_port;</div><div class='del'>-			if (pai-&gt;ai_socktype == ANY)</div><div class='del'>-				if (strcmp(sp-&gt;s_proto, "udp") == 0) {</div><div class='del'>-					pai-&gt;ai_socktype = SOCK_DGRAM;</div><div class='del'>-					pai-&gt;ai_protocol = IPPROTO_UDP;</div><div class='del'>-				} else if (strcmp(sp-&gt;s_proto, "tcp") == 0) {</div><div class='del'>-					pai-&gt;ai_socktype = SOCK_STREAM;</div><div class='del'>-					pai-&gt;ai_protocol = IPPROTO_TCP;</div><div class='del'>-				} else</div><div class='del'>-					ERR(EAI_PROTOCOL);	/*xxx*/</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	</div><div class='del'>-	/*</div><div class='del'>-	 * hostname == NULL.</div><div class='del'>-	 * passive socket -&gt; anyaddr (0.0.0.0 or ::)</div><div class='del'>-	 * non-passive socket -&gt; localhost (127.0.0.1 or ::1)</div><div class='del'>-	 */</div><div class='del'>-	if (hostname == NULL) {</div><div class='del'>-		const struct afd *afd;</div><div class='del'>-		int s;</div><div class='del'>-</div><div class='del'>-		for (afd = &amp;afdl[0]; afd-&gt;a_af; afd++) {</div><div class='del'>-			if (!(pai-&gt;ai_family == PF_UNSPEC</div><div class='del'>-			   || pai-&gt;ai_family == afd-&gt;a_af)) {</div><div class='del'>-				continue;</div><div class='del'>-			}</div><div class='del'>-</div><div class='del'>-			/*</div><div class='del'>-			 * filter out AFs that are not supported by the kernel</div><div class='del'>-			 * XXX errno?</div><div class='del'>-			 */</div><div class='del'>-			s = socket(afd-&gt;a_af, SOCK_DGRAM, 0);</div><div class='del'>-			if (s &lt; 0)</div><div class='del'>-				continue;</div><div class='del'>-#if defined(HAVE_CLOSESOCKET)</div><div class='del'>-			closesocket(s);</div><div class='del'>-#else</div><div class='del'>-			close(s);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-			if (pai-&gt;ai_flags &amp; AI_PASSIVE) {</div><div class='del'>-				GET_AI(cur-&gt;ai_next, afd, afd-&gt;a_addrany, port);</div><div class='del'>-				/* xxx meaningless?</div><div class='del'>-				 * GET_CANONNAME(cur-&gt;ai_next, "anyaddr");</div><div class='del'>-				 */</div><div class='del'>-			} else {</div><div class='del'>-				GET_AI(cur-&gt;ai_next, afd, afd-&gt;a_loopback,</div><div class='del'>-					port);</div><div class='del'>-				/* xxx meaningless?</div><div class='del'>-				 * GET_CANONNAME(cur-&gt;ai_next, "localhost");</div><div class='del'>-				 */</div><div class='del'>-			}</div><div class='del'>-			cur = cur-&gt;ai_next;</div><div class='del'>-		}</div><div class='del'>-		top = sentinel.ai_next;</div><div class='del'>-		if (top)</div><div class='del'>-			goto good;</div><div class='del'>-		else</div><div class='del'>-			ERR(EAI_FAMILY);</div><div class='del'>-	}</div><div class='del'>-	</div><div class='del'>-	/* hostname as numeric name */</div><div class='del'>-	for (i = 0; afdl[i].a_af; i++) {</div><div class='del'>-		if (inet_pton(afdl[i].a_af, hostname, pton)) {</div><div class='del'>-			u_long v4a;</div><div class='del'>-#ifdef INET6</div><div class='del'>-			u_char pfx;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-			switch (afdl[i].a_af) {</div><div class='del'>-			case AF_INET:</div><div class='del'>-				v4a = ((struct in_addr *)pton)-&gt;s_addr;</div><div class='del'>-				if (IN_MULTICAST(v4a) || IN_EXPERIMENTAL(v4a))</div><div class='del'>-					pai-&gt;ai_flags &amp;= ~AI_CANONNAME;</div><div class='del'>-				v4a &gt;&gt;= IN_CLASSA_NSHIFT;</div><div class='del'>-				if (v4a == 0 || v4a == IN_LOOPBACKNET)</div><div class='del'>-					pai-&gt;ai_flags &amp;= ~AI_CANONNAME;</div><div class='del'>-				break;</div><div class='del'>-#ifdef INET6</div><div class='del'>-			case AF_INET6:</div><div class='del'>-#ifdef HAVE_ADDR8</div><div class='del'>-				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='del'>-				if (pfx == 0 || pfx == 0xfe || pfx == 0xff)</div><div class='del'>-					pai-&gt;ai_flags &amp;= ~AI_CANONNAME;</div><div class='del'>-				break;</div><div class='del'>-#endif</div><div class='del'>-			}</div><div class='del'>-			</div><div class='del'>-			if (pai-&gt;ai_family == afdl[i].a_af ||</div><div class='del'>-			    pai-&gt;ai_family == PF_UNSPEC) {</div><div class='del'>-				if (! (pai-&gt;ai_flags &amp; AI_CANONNAME)) {</div><div class='del'>-					GET_AI(top, &amp;afdl[i], pton, port);</div><div class='del'>-					goto good;</div><div class='del'>-				}</div><div class='del'>-				/*</div><div class='del'>-				 * if AI_CANONNAME and if reverse lookup</div><div class='del'>-				 * fail, return ai anyway to pacify</div><div class='del'>-				 * calling application.</div><div class='del'>-				 *</div><div class='del'>-				 * XXX getaddrinfo() is a name-&gt;address</div><div class='del'>-				 * translation function, and it looks strange</div><div class='del'>-				 * that we do addr-&gt;name translation here.</div><div class='del'>-				 */</div><div class='del'>-				get_name(pton, &amp;afdl[i], &amp;top, pton, pai, port);</div><div class='del'>-				goto good;</div><div class='del'>-			} else </div><div class='del'>-				ERR(EAI_FAMILY);	/*xxx*/</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (pai-&gt;ai_flags &amp; AI_NUMERICHOST)</div><div class='del'>-		ERR(EAI_NONAME);</div><div class='del'>-</div><div class='del'>-	/* hostname as alphabetical name */</div><div class='del'>-	error = get_addr(hostname, pai-&gt;ai_family, &amp;top, pai, port);</div><div class='del'>-	if (error == 0) {</div><div class='del'>-		if (top) {</div><div class='del'>- good:</div><div class='del'>-			*res = top;</div><div class='del'>-			return SUCCESS;</div><div class='del'>-		} else</div><div class='del'>-			error = EAI_FAIL;</div><div class='del'>-	}</div><div class='del'>- free:</div><div class='del'>-	if (top)</div><div class='del'>-		freeaddrinfo(top);</div><div class='del'>- bad:</div><div class='del'>-	*res = NULL;</div><div class='del'>-	return error;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-get_name(addr, afd, res, numaddr, pai, port0)</div><div class='del'>-	const char *addr;</div><div class='del'>-	const struct afd *afd;</div><div class='del'>-	struct addrinfo **res;</div><div class='del'>-	char *numaddr;</div><div class='del'>-	struct addrinfo *pai;</div><div class='del'>-	int port0;</div><div class='del'>-{</div><div class='del'>-	u_short port = port0 &amp; 0xffff;</div><div class='del'>-	struct hostent *hp;</div><div class='del'>-	struct addrinfo *cur;</div><div class='del'>-	int error = 0;</div><div class='del'>-#ifdef INET6</div><div class='del'>-	int h_error;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef INET6</div><div class='del'>-	hp = getipnodebyaddr(addr, afd-&gt;a_addrlen, afd-&gt;a_af, &amp;h_error);</div><div class='del'>-#else</div><div class='del'>-	hp = gethostbyaddr((char*)addr, afd-&gt;a_addrlen, AF_INET);</div><div class='del'>-#endif</div><div class='del'>-	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='del'>-		GET_AI(cur, afd, hp-&gt;h_addr_list[0], port);</div><div class='del'>-		GET_CANONNAME(cur, hp-&gt;h_name);</div><div class='del'>-	} else</div><div class='del'>-		GET_AI(cur, afd, numaddr, port);</div><div class='del'>-	</div><div class='del'>-#ifdef INET6</div><div class='del'>-	if (hp)</div><div class='del'>-		freehostent(hp);</div><div class='del'>-#endif</div><div class='del'>-	*res = cur;</div><div class='del'>-	return SUCCESS;</div><div class='del'>- free:</div><div class='del'>-	if (cur)</div><div class='del'>-		freeaddrinfo(cur);</div><div class='del'>-#ifdef INET6</div><div class='del'>-	if (hp)</div><div class='del'>-		freehostent(hp);</div><div class='del'>-#endif</div><div class='del'>- /* bad: */</div><div class='del'>-	*res = NULL;</div><div class='del'>-	return error;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-get_addr(hostname, af, res, pai, port0)</div><div class='del'>-	const char *hostname;</div><div class='del'>-	int af;</div><div class='del'>-	struct addrinfo **res;</div><div class='del'>-	struct addrinfo *pai;</div><div class='del'>-	int port0;</div><div class='del'>-{</div><div class='del'>-	u_short port = port0 &amp; 0xffff;</div><div class='del'>-	struct addrinfo sentinel;</div><div class='del'>-	struct hostent *hp;</div><div class='del'>-	struct addrinfo *top, *cur;</div><div class='del'>-	const struct afd *afd;</div><div class='del'>-	int i, error = 0, h_error;</div><div class='del'>-	char *ap;</div><div class='del'>-</div><div class='del'>-	top = NULL;</div><div class='del'>-	sentinel.ai_next = NULL;</div><div class='del'>-	cur = &amp;sentinel;</div><div class='del'>-#ifdef INET6</div><div class='del'>-	if (af == AF_UNSPEC) {</div><div class='del'>-		hp = getipnodebyname(hostname, AF_INET6,</div><div class='del'>-				AI_ADDRCONFIG|AI_ALL|AI_V4MAPPED, &amp;h_error);</div><div class='del'>-	} else</div><div class='del'>-		hp = getipnodebyname(hostname, af, AI_ADDRCONFIG, &amp;h_error);</div><div class='del'>-#else</div><div class='del'>-	hp = gethostbyname((char*)hostname);</div><div class='del'>-	h_error = h_errno;</div><div class='del'>-#endif</div><div class='del'>-	if (hp == NULL) {</div><div class='del'>-		switch (h_error) {</div><div class='del'>-		case HOST_NOT_FOUND:</div><div class='del'>-		case NO_DATA:</div><div class='del'>-			error = EAI_NODATA;</div><div class='del'>-			break;</div><div class='del'>-		case TRY_AGAIN:</div><div class='del'>-			error = EAI_AGAIN;</div><div class='del'>-			break;</div><div class='del'>-		case NO_RECOVERY:</div><div class='del'>-		default:</div><div class='del'>-			error = EAI_FAIL;</div><div class='del'>-			break;</div><div class='del'>-		}</div><div class='del'>-		goto bad;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if ((hp-&gt;h_name == NULL) || (hp-&gt;h_name[0] == 0) ||</div><div class='del'>-	    (hp-&gt;h_addr_list[0] == NULL))</div><div class='del'>-		ERR(EAI_FAIL);</div><div class='del'>-	</div><div class='del'>-	for (i = 0; (ap = hp-&gt;h_addr_list[i]) != NULL; i++) {</div><div class='del'>-		switch (af) {</div><div class='del'>-#ifdef INET6</div><div class='del'>-		case AF_INET6:</div><div class='del'>-			afd = &amp;afdl[N_INET6];</div><div class='del'>-			break;</div><div class='del'>-#endif</div><div class='del'>-#ifndef INET6</div><div class='del'>-		default:	/* AF_UNSPEC */</div><div class='del'>-#endif</div><div class='del'>-		case AF_INET:</div><div class='del'>-			afd = &amp;afdl[N_INET];</div><div class='del'>-			break;</div><div class='del'>-#ifdef INET6</div><div class='del'>-		default:	/* AF_UNSPEC */</div><div class='del'>-			if (IN6_IS_ADDR_V4MAPPED((struct in6_addr *)ap)) {</div><div class='del'>-				ap += sizeof(struct in6_addr) -</div><div class='del'>-					sizeof(struct in_addr);</div><div class='del'>-				afd = &amp;afdl[N_INET];</div><div class='del'>-			} else</div><div class='del'>-				afd = &amp;afdl[N_INET6];</div><div class='del'>-			break;</div><div class='del'>-#endif</div><div class='del'>-		}</div><div class='del'>-#ifdef FAITH</div><div class='del'>-		if (translate &amp;&amp; afd-&gt;a_af == AF_INET) {</div><div class='del'>-			struct in6_addr *in6;</div><div class='del'>-</div><div class='del'>-			GET_AI(cur-&gt;ai_next, &amp;afdl[N_INET6], ap, port);</div><div class='del'>-			in6 = &amp;((struct sockaddr_in6 *)cur-&gt;ai_next-&gt;ai_addr)-&gt;sin6_addr;</div><div class='del'>-			memcpy(&amp;in6-&gt;s6_addr32[0], &amp;faith_prefix,</div><div class='del'>-			    sizeof(struct in6_addr) - sizeof(struct in_addr));</div><div class='del'>-			memcpy(&amp;in6-&gt;s6_addr32[3], ap, sizeof(struct in_addr));</div><div class='del'>-		} else</div><div class='del'>-#endif /* FAITH */</div><div class='del'>-		GET_AI(cur-&gt;ai_next, afd, ap, port);</div><div class='del'>-		if (cur == &amp;sentinel) {</div><div class='del'>-			top = cur-&gt;ai_next;</div><div class='del'>-			GET_CANONNAME(top, hp-&gt;h_name);</div><div class='del'>-		}</div><div class='del'>-		cur = cur-&gt;ai_next;</div><div class='del'>-	}</div><div class='del'>-#ifdef INET6</div><div class='del'>-	freehostent(hp);</div><div class='del'>-#endif</div><div class='del'>-	*res = top;</div><div class='del'>-	return SUCCESS;</div><div class='del'>- free:</div><div class='del'>-	if (top)</div><div class='del'>-		freeaddrinfo(top);</div><div class='del'>-#ifdef INET6</div><div class='del'>-	if (hp)</div><div class='del'>-		freehostent(hp);</div><div class='del'>-#endif</div><div class='del'>- bad:</div><div class='del'>-	*res = NULL;</div><div class='del'>-	return error;</div><div class='del'>-}</div><div class='head'>diff --git a/ext/socket/getnameinfo.c b/ext/socket/getnameinfo.c<br/>deleted file mode 100644<br/>index 66f7e8818a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/socket/getnameinfo.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/getnameinfo.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,265 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.</div><div class='del'>- * All rights reserved.</div><div class='del'>- * </div><div class='del'>- * Redistribution and use in source and binary forms, with or without</div><div class='del'>- * modification, are permitted provided that the following conditions</div><div class='del'>- * are met:</div><div class='del'>- * 1. Redistributions of source code must retain the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer.</div><div class='del'>- * 2. Redistributions in binary form must reproduce the above copyright</div><div class='del'>- *    notice, this list of conditions and the following disclaimer in the</div><div class='del'>- *    documentation and/or other materials provided with the distribution.</div><div class='del'>- * 3. Neither the name of the project nor the names of its contributors</div><div class='del'>- *    may be used to endorse or promote products derived from this software</div><div class='del'>- *    without specific prior written permission.</div><div class='del'>- * </div><div class='del'>- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND</div><div class='del'>- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</div><div class='del'>- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</div><div class='del'>- * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE</div><div class='del'>- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</div><div class='del'>- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</div><div class='del'>- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</div><div class='del'>- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</div><div class='del'>- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</div><div class='del'>- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</div><div class='del'>- * SUCH DAMAGE.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Issues to be discussed:</div><div class='del'>- * - Thread safe-ness must be checked</div><div class='del'>- * - Return values.  There seems to be no standard for return value (RFC2133)</div><div class='del'>- *   but INRIA implementation returns EAI_xxx defined for getaddrinfo().</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "config.h"</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#ifndef _WIN32</div><div class='del'>-#if defined(__BEOS__)</div><div class='del'>-# include &lt;net/socket.h&gt;</div><div class='del'>-#else</div><div class='del'>-# include &lt;sys/socket.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;netinet/in.h&gt;</div><div class='del'>-#if defined(HAVE_ARPA_INET_H)</div><div class='del'>-#include &lt;arpa/inet.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#if defined(HAVE_ARPA_NAMESER_H)</div><div class='del'>-#include &lt;arpa/nameser.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;netdb.h&gt;</div><div class='del'>-#if defined(HAVE_RESOLV_H)</div><div class='del'>-#include &lt;resolv.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-#include &lt;winsock2.h&gt;</div><div class='del'>-#define snprintf _snprintf</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-#include &lt;stddef.h&gt;</div><div class='del'>-</div><div class='del'>-#ifdef SOCKS5</div><div class='del'>-#include &lt;socks.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include "addrinfo.h"</div><div class='del'>-#include "sockport.h"</div><div class='del'>-</div><div class='del'>-#define SUCCESS 0</div><div class='del'>-#define ANY 0</div><div class='del'>-#define YES 1</div><div class='del'>-#define NO  0</div><div class='del'>-</div><div class='del'>-struct sockinet {</div><div class='del'>-	u_char	si_len;</div><div class='del'>-	u_char	si_family;</div><div class='del'>-	u_short	si_port;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static struct afd {</div><div class='del'>-	int a_af;</div><div class='del'>-	int a_addrlen;</div><div class='del'>-	int a_socklen;</div><div class='del'>-	int a_off;</div><div class='del'>-} afdl [] = {</div><div class='del'>-#ifdef INET6</div><div class='del'>-#define N_INET6 0</div><div class='del'>-	{PF_INET6, sizeof(struct in6_addr),</div><div class='del'>-	 sizeof(struct sockaddr_in6),</div><div class='del'>-	 offsetof(struct sockaddr_in6, sin6_addr)},</div><div class='del'>-#define N_INET  1</div><div class='del'>-#else</div><div class='del'>-#define N_INET  0</div><div class='del'>-#endif</div><div class='del'>-	{PF_INET, sizeof(struct in_addr),</div><div class='del'>-	 sizeof(struct sockaddr_in),</div><div class='del'>-	 offsetof(struct sockaddr_in, sin_addr)},</div><div class='del'>-	{0, 0, 0, 0},</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define ENI_NOSOCKET 	0</div><div class='del'>-#define ENI_NOSERVNAME	1</div><div class='del'>-#define ENI_NOHOSTNAME	2</div><div class='del'>-#define ENI_MEMORY	3</div><div class='del'>-#define ENI_SYSTEM	4</div><div class='del'>-#define ENI_FAMILY	5</div><div class='del'>-#define ENI_SALEN	6</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_INET_NTOP</div><div class='del'>-static const char *</div><div class='del'>-inet_ntop(af, addr, numaddr, numaddr_len)</div><div class='del'>-	int af;</div><div class='del'>-	const void *addr;</div><div class='del'>-	char *numaddr;</div><div class='del'>-	size_t numaddr_len;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_INET_NTOA</div><div class='del'>-	struct in_addr in;</div><div class='del'>-	memcpy(&amp;in.s_addr, addr, sizeof(in.s_addr));</div><div class='del'>-	snprintf(numaddr, numaddr_len, "%s", inet_ntoa(in));</div><div class='del'>-#else</div><div class='del'>-	unsigned long x = ntohl(*(unsigned long*)addr);</div><div class='del'>-	snprintf(numaddr, numaddr_len, "%d.%d.%d.%d",</div><div class='del'>-		 (int) (x&gt;&gt;24) &amp; 0xff, (int) (x&gt;&gt;16) &amp; 0xff,</div><div class='del'>-		 (int) (x&gt;&gt; 8) &amp; 0xff, (int) (x&gt;&gt; 0) &amp; 0xff);</div><div class='del'>-#endif</div><div class='del'>-	return numaddr;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)</div><div class='del'>-	const struct sockaddr *sa;</div><div class='del'>-	size_t salen;</div><div class='del'>-	char *host;</div><div class='del'>-	size_t hostlen;</div><div class='del'>-	char *serv;</div><div class='del'>-	size_t servlen;</div><div class='del'>-	int flags;</div><div class='del'>-{</div><div class='del'>-	struct afd *afd;</div><div class='del'>-	struct servent *sp;</div><div class='del'>-	struct hostent *hp;</div><div class='del'>-	u_short port;</div><div class='del'>-	int family, len, i;</div><div class='del'>-	char *addr, *p;</div><div class='del'>-	u_long v4a;</div><div class='del'>-#ifdef INET6</div><div class='del'>-	u_char pfx;</div><div class='del'>-#endif</div><div class='del'>-	int h_error;</div><div class='del'>-	char numserv[512];</div><div class='del'>-	char numaddr[512];</div><div class='del'>-</div><div class='del'>-	if (sa == NULL)</div><div class='del'>-		return ENI_NOSOCKET;</div><div class='del'>-</div><div class='del'>-	len = SA_LEN(sa);</div><div class='del'>-	if (len != salen) return ENI_SALEN;</div><div class='del'>-	</div><div class='del'>-	family = sa-&gt;sa_family;</div><div class='del'>-	for (i = 0; afdl[i].a_af; i++)</div><div class='del'>-		if (afdl[i].a_af == family) {</div><div class='del'>-			afd = &amp;afdl[i];</div><div class='del'>-			goto found;</div><div class='del'>-		}</div><div class='del'>-	return ENI_FAMILY;</div><div class='del'>-	</div><div class='del'>- found:</div><div class='del'>-	if (len != afd-&gt;a_socklen) return ENI_SALEN;</div><div class='del'>-	</div><div class='del'>-	port = ((struct sockinet *)sa)-&gt;si_port; /* network byte order */</div><div class='del'>-	addr = (char *)sa + afd-&gt;a_off;</div><div class='del'>-</div><div class='del'>-	if (serv == NULL || servlen == 0) {</div><div class='del'>-		/* what we should do? */</div><div class='del'>-	} else if (flags &amp; NI_NUMERICSERV) {</div><div class='del'>-		snprintf(numserv, sizeof(numserv), "%d", ntohs(port));</div><div class='del'>-		if (strlen(numserv) + 1 &gt; servlen)</div><div class='del'>-			return ENI_MEMORY;</div><div class='del'>-		strcpy(serv, numserv);</div><div class='del'>-	} else {</div><div class='del'>-#if defined(HAVE_GETSERVBYPORT)</div><div class='del'>-		sp = getservbyport(port, (flags &amp; NI_DGRAM) ? "udp" : "tcp");</div><div class='del'>-		if (sp) {</div><div class='del'>-			if (strlen(sp-&gt;s_name) + 1 &gt; servlen)</div><div class='del'>-				return ENI_MEMORY;</div><div class='del'>-			strcpy(serv, sp-&gt;s_name);</div><div class='del'>-		} else</div><div class='del'>-			return ENI_NOSERVNAME;</div><div class='del'>-#else</div><div class='del'>-		return ENI_NOSERVNAME;</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	switch (sa-&gt;sa_family) {</div><div class='del'>-	case AF_INET:</div><div class='del'>-		v4a = ntohl(((struct sockaddr_in *)sa)-&gt;sin_addr.s_addr);</div><div class='del'>-		if (IN_MULTICAST(v4a) || IN_EXPERIMENTAL(v4a))</div><div class='del'>-			flags |= NI_NUMERICHOST;</div><div class='del'>-		v4a &gt;&gt;= IN_CLASSA_NSHIFT;</div><div class='del'>-		if (v4a == 0)</div><div class='del'>-			flags |= NI_NUMERICHOST;			</div><div class='del'>-		break;</div><div class='del'>-#ifdef INET6</div><div class='del'>-	case AF_INET6:</div><div class='del'>-#ifdef HAVE_ADDR8</div><div class='del'>-		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='del'>-		if (pfx == 0 || pfx == 0xfe || pfx == 0xff)</div><div class='del'>-			flags |= NI_NUMERICHOST;</div><div class='del'>-		break;</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-	if (host == NULL || hostlen == 0) {</div><div class='del'>-		/* what should we do? */</div><div class='del'>-	} else if (flags &amp; NI_NUMERICHOST) {</div><div class='del'>-		if (inet_ntop(afd-&gt;a_af, addr, numaddr, sizeof(numaddr))</div><div class='del'>-		    == NULL)</div><div class='del'>-			return ENI_SYSTEM;</div><div class='del'>-		if (strlen(numaddr) &gt; hostlen)</div><div class='del'>-			return ENI_MEMORY;</div><div class='del'>-		strcpy(host, numaddr);</div><div class='del'>-	} else {</div><div class='del'>-#ifdef INET6</div><div class='del'>-		hp = getipnodebyaddr(addr, afd-&gt;a_addrlen, afd-&gt;a_af, &amp;h_error);</div><div class='del'>-#else</div><div class='del'>-		hp = gethostbyaddr(addr, afd-&gt;a_addrlen, afd-&gt;a_af);</div><div class='del'>-		h_error = h_errno;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-		if (hp) {</div><div class='del'>-			if (flags &amp; NI_NOFQDN) {</div><div class='del'>-				p = strchr(hp-&gt;h_name, '.');</div><div class='del'>-				if (p) *p = '\0';</div><div class='del'>-			}</div><div class='del'>-			if (strlen(hp-&gt;h_name) + 1 &gt; hostlen) {</div><div class='del'>-#ifdef INET6</div><div class='del'>-				freehostent(hp);</div><div class='del'>-#endif</div><div class='del'>-				return ENI_MEMORY;</div><div class='del'>-			}</div><div class='del'>-			strcpy(host, hp-&gt;h_name);</div><div class='del'>-#ifdef INET6</div><div class='del'>-			freehostent(hp);</div><div class='del'>-#endif</div><div class='del'>-		} else {</div><div class='del'>-			if (flags &amp; NI_NAMEREQD)</div><div class='del'>-				return ENI_NOHOSTNAME;</div><div class='del'>-			if (inet_ntop(afd-&gt;a_af, addr, numaddr, sizeof(numaddr))</div><div class='del'>-			    == NULL)</div><div class='del'>-				return ENI_NOHOSTNAME;</div><div class='del'>-			if (strlen(numaddr) &gt; hostlen)</div><div class='del'>-				return ENI_MEMORY;</div><div class='del'>-			strcpy(host, numaddr);</div><div class='del'>-		}</div><div class='del'>-	}</div><div class='del'>-	return SUCCESS;</div><div class='del'>-}</div><div class='head'>diff --git a/ext/socket/socket.c b/ext/socket/socket.c<br/>deleted file mode 100644<br/>index 1dcc7160e9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/socket/socket.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/socket.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4721 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  socket.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  created at: Thu Mar 31 12:21:29 JST 1994</div><div class='del'>-</div><div class='del'>-  Copyright (C) 1993-2001 Yukihiro Matsumoto</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'>-#include "rubysig.h"</div><div class='del'>-#include "util.h"</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-</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'>-#ifdef HAVE_SYS_UIO_H</div><div class='del'>-#include &lt;sys/uio.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef _WIN32</div><div class='del'>-#if defined(__BEOS__)</div><div class='del'>-# include &lt;net/socket.h&gt;</div><div class='del'>-#else</div><div class='del'>-# 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='del'>-#endif</div><div class='del'>-#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='del'>-#ifdef HAVE_NETINET_TCP_H</div><div class='del'>-# include &lt;netinet/tcp.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_NETINET_UDP_H</div><div class='del'>-# include &lt;netinet/udp.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_ARPA_INET_H</div><div class='del'>-# include &lt;arpa/inet.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;netdb.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#include &lt;errno.h&gt;</div><div class='del'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-#include &lt;sys/un.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_FCNTL)</div><div class='del'>-#ifdef HAVE_SYS_SELECT_H</div><div class='del'>-#include &lt;sys/select.h&gt;</div><div class='del'>-#endif</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_FCNTL_H</div><div class='del'>-#include &lt;fcntl.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#ifndef EWOULDBLOCK</div><div class='del'>-#define EWOULDBLOCK EAGAIN</div><div class='del'>-#endif</div><div class='del'>-#ifndef HAVE_GETADDRINFO</div><div class='del'>-# include "addrinfo.h"</div><div class='del'>-#endif</div><div class='del'>-#include "sockport.h"</div><div class='del'>-</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='del'>-static int do_not_reverse_lookup = 0;</div><div class='del'>-</div><div class='del'>-VALUE rb_cBasicSocket;</div><div class='del'>-VALUE rb_cIPSocket;</div><div class='del'>-VALUE rb_cTCPSocket;</div><div class='del'>-VALUE rb_cTCPServer;</div><div class='del'>-VALUE rb_cUDPSocket;</div><div class='del'>-#ifdef AF_UNIX</div><div class='del'>-VALUE rb_cUNIXSocket;</div><div class='del'>-VALUE rb_cUNIXServer;</div><div class='del'>-#endif</div><div class='del'>-VALUE rb_cSocket;</div><div class='del'>-</div><div class='del'>-static VALUE rb_eSocket;</div><div class='del'>-</div><div class='del'>-#ifdef SOCKS</div><div class='del'>-VALUE rb_cSOCKSSocket;</div><div class='del'>-#ifdef SOCKS5</div><div class='del'>-#include &lt;socks.h&gt;</div><div class='del'>-#else</div><div class='del'>-void SOCKSinit();</div><div class='del'>-int Rconnect();</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define INET_CLIENT 0</div><div class='del'>-#define INET_SERVER 1</div><div class='del'>-#define INET_SOCKS  2</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_SOCKADDR_STORAGE</div><div class='del'>-/*</div><div class='del'>- * RFC 2553: protocol-independent placeholder for socket addresses</div><div class='del'>- */</div><div class='del'>-#define _SS_MAXSIZE	128</div><div class='del'>-#define _SS_ALIGNSIZE	(sizeof(double))</div><div class='del'>-#define _SS_PAD1SIZE	(_SS_ALIGNSIZE - sizeof(unsigned char) * 2)</div><div class='del'>-#define _SS_PAD2SIZE	(_SS_MAXSIZE - sizeof(unsigned char) * 2 - \</div><div class='del'>-				_SS_PAD1SIZE - _SS_ALIGNSIZE)</div><div class='del'>-</div><div class='del'>-struct sockaddr_storage {</div><div class='del'>-#ifdef HAVE_SA_LEN</div><div class='del'>-	unsigned char ss_len;		/* address length */</div><div class='del'>-	unsigned char ss_family;	/* address family */</div><div class='del'>-#else</div><div class='del'>-	unsigned short ss_family;</div><div class='del'>-#endif</div><div class='del'>-	char	__ss_pad1[_SS_PAD1SIZE];</div><div class='del'>-	double	__ss_align;	/* force desired structure storage alignment */</div><div class='del'>-	char	__ss_pad2[_SS_PAD2SIZE];</div><div class='del'>-};</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(INET6) &amp;&amp; (defined(LOOKUP_ORDER_HACK_INET) || defined(LOOKUP_ORDER_HACK_INET6))</div><div class='del'>-#define LOOKUP_ORDERS		3</div><div class='del'>-static int lookup_order_table[LOOKUP_ORDERS] = {</div><div class='del'>-#if defined(LOOKUP_ORDER_HACK_INET)</div><div class='del'>-    PF_INET, PF_INET6, PF_UNSPEC,</div><div class='del'>-#elif defined(LOOKUP_ORDER_HACK_INET6)</div><div class='del'>-    PF_INET6, PF_INET, PF_UNSPEC,</div><div class='del'>-#else</div><div class='del'>-    /* should not happen */</div><div class='del'>-#endif</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ruby_getaddrinfo(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'>-    struct addrinfo tmp_hints;</div><div class='del'>-    int i, af, error;</div><div class='del'>-</div><div class='del'>-    if (hints-&gt;ai_family != PF_UNSPEC) {</div><div class='del'>-	return getaddrinfo(nodename, servname, hints, res);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; LOOKUP_ORDERS; i++) {</div><div class='del'>-	af = lookup_order_table[i];</div><div class='del'>-	MEMCPY(&amp;tmp_hints, hints, struct addrinfo, 1);</div><div class='del'>-	tmp_hints.ai_family = af;</div><div class='del'>-	error = getaddrinfo(nodename, servname, &amp;tmp_hints, res);</div><div class='del'>-	if (error) {</div><div class='del'>-	    if (tmp_hints.ai_family == PF_UNSPEC) {</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</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'>-    return error;</div><div class='del'>-}</div><div class='del'>-#define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo((node),(serv),(hints),(res))</div><div class='del'>-#endif</div><div class='del'>-</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'>-static int</div><div class='del'>-ruby_getnameinfo__aix(sa, salen, host, hostlen, serv, servlen, flags)</div><div class='del'>-     const struct sockaddr *sa;</div><div class='del'>-     size_t salen;</div><div class='del'>-     char *host;</div><div class='del'>-     size_t hostlen;</div><div class='del'>-     char *serv;</div><div class='del'>-     size_t servlen;</div><div class='del'>-     int flags;</div><div class='del'>-{</div><div class='del'>-  struct sockaddr_in6 *sa6;</div><div class='del'>-  u_int32_t *a6;</div><div class='del'>-</div><div class='del'>-  if (sa-&gt;sa_family == AF_INET6) {</div><div class='del'>-    sa6 = (struct sockaddr_in6 *)sa;</div><div class='del'>-    a6 = sa6-&gt;sin6_addr.u6_addr.u6_addr32;</div><div class='del'>-</div><div class='del'>-    if (a6[0] == 0 &amp;&amp; a6[1] == 0 &amp;&amp; a6[2] == 0 &amp;&amp; a6[3] == 0) {</div><div class='del'>-      strncpy(host, "::", hostlen);</div><div class='del'>-      snprintf(serv, servlen, "%d", sa6-&gt;sin6_port);</div><div class='del'>-      return 0;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-  return getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);</div><div class='del'>-}</div><div class='del'>-#undef getnameinfo</div><div class='del'>-#define getnameinfo(sa, salen, host, hostlen, serv, servlen, flags) \</div><div class='del'>-            ruby_getnameinfo__aix((sa), (salen), (host), (hostlen), (serv), (servlen), (flags))</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='del'>-#ifdef HAVE_CLOSESOCKET</div><div class='del'>-#undef close</div><div class='del'>-#define close closesocket</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-init_sock(sock, fd)</div><div class='del'>-    VALUE sock;</div><div class='del'>-    int fd;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fp;</div><div class='del'>-</div><div class='del'>-    MakeOpenFile(sock, fp);</div><div class='del'>-    fp-&gt;f = rb_fdopen(fd, "r");</div><div class='del'>-    fp-&gt;f2 = rb_fdopen(fd, "w");</div><div class='del'>-    fp-&gt;mode = FMODE_READWRITE;</div><div class='del'>-    rb_io_synchronized(fp);</div><div class='del'>-</div><div class='del'>-    return sock;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bsock_s_for_fd(klass, fd)</div><div class='del'>-    VALUE klass, fd;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    VALUE sock = init_sock(rb_obj_alloc(klass), NUM2INT(fd));</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-</div><div class='del'>-    return sock;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bsock_shutdown(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'>-    VALUE howto;</div><div class='del'>-    int how;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; !OBJ_TAINTED(sock)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't shutdown socket");</div><div class='del'>-    }</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;howto);</div><div class='del'>-    if (howto == Qnil)</div><div class='del'>-	how = 2;</div><div class='del'>-    else {</div><div class='del'>-	how = NUM2INT(howto);</div><div class='del'>-	if (how &lt; 0 || 2 &lt; how) {</div><div class='del'>-	    rb_raise(rb_eArgError, "`how' should be either 0, 1, 2");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (shutdown(fileno(fptr-&gt;f), how) == -1)</div><div class='del'>-	rb_sys_fail(0);</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'>-bsock_close_read(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; !OBJ_TAINTED(sock)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't close socket");</div><div class='del'>-    }</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    shutdown(fileno(fptr-&gt;f), 0);</div><div class='del'>-    if (!(fptr-&gt;mode &amp; FMODE_WRITABLE)) {</div><div class='del'>-	return rb_io_close(sock);</div><div class='del'>-    }</div><div class='del'>-    fptr-&gt;mode &amp;= ~FMODE_READABLE;</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'>-bsock_close_write(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; !OBJ_TAINTED(sock)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't close socket");</div><div class='del'>-    }</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (!(fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='del'>-	return rb_io_close(sock);</div><div class='del'>-    }</div><div class='del'>-    shutdown(fileno(fptr-&gt;f2), 1);</div><div class='del'>-    fptr-&gt;mode &amp;= ~FMODE_WRITABLE;</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'>- * 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='del'>-static VALUE</div><div class='del'>-bsock_setsockopt(sock, lev, optname, val)</div><div class='del'>-    VALUE sock, lev, optname, val;</div><div class='del'>-{</div><div class='del'>-    int level, option;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int i;</div><div class='del'>-    char *v;</div><div class='del'>-    int vlen;</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    level = NUM2INT(lev);</div><div class='del'>-    option = NUM2INT(optname);</div><div class='del'>-</div><div class='del'>-    switch (TYPE(val)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-	i = FIX2INT(val);</div><div class='del'>-	goto numval;</div><div class='del'>-      case T_FALSE:</div><div class='del'>-	i = 0;</div><div class='del'>-	goto numval;</div><div class='del'>-      case T_TRUE:</div><div class='del'>-	i = 1;</div><div class='del'>-      numval:</div><div class='del'>-	v = (char*)&amp;i; vlen = sizeof(i);</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	StringValue(val);</div><div class='del'>-	v = RSTRING(val)-&gt;ptr;</div><div class='del'>-	vlen = RSTRING(val)-&gt;len;</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (setsockopt(fileno(fptr-&gt;f), level, option, v, vlen) &lt; 0)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-bsock_getsockopt(sock, lev, optname)</div><div class='del'>-    VALUE sock, lev, optname;</div><div class='del'>-{</div><div class='del'>-#if !defined(__BEOS__)</div><div class='del'>-    int level, option;</div><div class='del'>-    socklen_t len;</div><div class='del'>-    char *buf;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    level = NUM2INT(lev);</div><div class='del'>-    option = NUM2INT(optname);</div><div class='del'>-    len = 256;</div><div class='del'>-    buf = ALLOCA_N(char,len);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (getsockopt(fileno(fptr-&gt;f), level, option, buf, &amp;len) &lt; 0)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-</div><div class='del'>-    return rb_str_new(buf, len);</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'>-bsock_getsockname(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    char buf[1024];</div><div class='del'>-    socklen_t len = sizeof buf;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (getsockname(fileno(fptr-&gt;f), (struct sockaddr*)buf, &amp;len) &lt; 0)</div><div class='del'>-	rb_sys_fail("getsockname(2)");</div><div class='del'>-    return rb_str_new(buf, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bsock_getpeername(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    char buf[1024];</div><div class='del'>-    socklen_t len = sizeof buf;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (getpeername(fileno(fptr-&gt;f), (struct sockaddr*)buf, &amp;len) &lt; 0)</div><div class='del'>-	rb_sys_fail("getpeername(2)");</div><div class='del'>-    return rb_str_new(buf, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bsock_send(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'>-    VALUE mesg, to;</div><div class='del'>-    VALUE flags;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    FILE *f;</div><div class='del'>-    int fd, n;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rb_scan_args(argc, argv, "21", &amp;mesg, &amp;flags, &amp;to);</div><div class='del'>-</div><div class='del'>-    StringValue(mesg);</div><div class='del'>-    if (!NIL_P(to)) StringValue(to);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    f = GetWriteFile(fptr);</div><div class='del'>-    fd = fileno(f);</div><div class='del'>-    rb_thread_fd_writable(fd);</div><div class='del'>-  retry:</div><div class='del'>-    if (!NIL_P(to)) {</div><div class='del'>-        TRAP_BEG;</div><div class='del'>-	n = sendto(fd, RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len, NUM2INT(flags),</div><div class='del'>-		   (struct sockaddr*)RSTRING(to)-&gt;ptr, RSTRING(to)-&gt;len);</div><div class='del'>-        TRAP_END;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        TRAP_BEG;</div><div class='del'>-	n = send(fd, RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len, NUM2INT(flags));</div><div class='del'>-        TRAP_END;</div><div class='del'>-    }</div><div class='del'>-    if (n &lt; 0) {</div><div class='del'>-	if (rb_io_wait_writable(fd)) {</div><div class='del'>-	    goto retry;</div><div class='del'>-	}</div><div class='del'>-	rb_sys_fail("send(2)");</div><div class='del'>-    }</div><div class='del'>-    return INT2FIX(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ipaddr _((struct sockaddr*));</div><div class='del'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-static VALUE unixaddr _((struct sockaddr_un*, socklen_t));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-enum sock_recv_type {</div><div class='del'>-    RECV_RECV,			/* BasicSocket#recv(no from) */</div><div class='del'>-    RECV_IP,			/* IPSocket#recvfrom */</div><div class='del'>-    RECV_UNIX,			/* UNIXSocket#recvfrom */</div><div class='del'>-    RECV_SOCKET			/* Socket#recvfrom */</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-s_recvfrom(sock, argc, argv, from)</div><div class='del'>-    VALUE sock;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    enum sock_recv_type from;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *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'>-</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'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (rb_read_pending(fptr-&gt;f)) {</div><div class='del'>-	rb_raise(rb_eIOError, "recv 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'>-  retry:</div><div class='del'>-    rb_str_locktmp(str);</div><div class='del'>-    rb_thread_wait_fd(fd);</div><div class='del'>-    TRAP_BEG;</div><div class='del'>-    slen = recvfrom(fd, RSTRING(str)-&gt;ptr, buflen, flags, (struct sockaddr*)buf, &amp;alen);</div><div class='del'>-    TRAP_END;</div><div class='del'>-    rb_str_unlocktmp(str);</div><div class='del'>-</div><div class='del'>-    if (slen &lt; 0) {</div><div class='del'>-	if (rb_io_wait_readable(fd)) {</div><div class='del'>-	    goto retry;</div><div class='del'>-	}</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 (VALUE)str;</div><div class='del'>-      case RECV_IP:</div><div class='del'>-#if 0</div><div class='del'>-	if (alen != sizeof(struct sockaddr_in)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "sockaddr size differs - should not happen");</div><div class='del'>-	}</div><div class='del'>-#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='del'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-      case RECV_UNIX:</div><div class='del'>-        return rb_assoc_new(str, unixaddr((struct sockaddr_un*)buf, alen));</div><div class='del'>-#endif</div><div class='del'>-      case RECV_SOCKET:</div><div class='del'>-	return rb_assoc_new(str, rb_str_new(buf, alen));</div><div class='del'>-      default:</div><div class='del'>-	rb_bug("s_recvfrom called with bad value");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-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'>-    rb_io_t *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='del'>-bsock_recv(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(sock, argc, argv, RECV_RECV);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-bsock_do_not_rev_lookup()</div><div class='del'>-{</div><div class='del'>-    return do_not_reverse_lookup?Qtrue:Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-bsock_do_not_rev_lookup_set(self, val)</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    do_not_reverse_lookup = RTEST(val);</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-make_ipaddr0(addr, buf, len)</div><div class='del'>-    struct sockaddr *addr;</div><div class='del'>-    char *buf;</div><div class='del'>-    size_t len;</div><div class='del'>-{</div><div class='del'>-    int error;</div><div class='del'>-</div><div class='del'>-    error = getnameinfo(addr, SA_LEN(addr), buf, len, NULL, 0, NI_NUMERICHOST);</div><div class='del'>-    if (error) {</div><div class='del'>-	rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-make_ipaddr(addr)</div><div class='del'>-    struct sockaddr *addr;</div><div class='del'>-{</div><div class='del'>-    char buf[1024];</div><div class='del'>-</div><div class='del'>-    make_ipaddr0(addr, buf, sizeof(buf));</div><div class='del'>-    return rb_str_new2(buf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-make_inetaddr(host, buf, len)</div><div class='del'>-    long host;</div><div class='del'>-    char *buf;</div><div class='del'>-    size_t len;</div><div class='del'>-{</div><div class='del'>-    struct sockaddr_in sin;</div><div class='del'>-</div><div class='del'>-    MEMZERO(&amp;sin, struct sockaddr_in, 1);</div><div class='del'>-    sin.sin_family = AF_INET;</div><div class='del'>-    SET_SIN_LEN(&amp;sin, sizeof(sin));</div><div class='del'>-    sin.sin_addr.s_addr = host;</div><div class='del'>-    make_ipaddr0((struct sockaddr*)&amp;sin, buf, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-str_isnumber(p)</div><div class='del'>-        const char *p;</div><div class='del'>-{</div><div class='del'>-    char *ep;</div><div class='del'>-</div><div class='del'>-    if (!p || *p == '\0')</div><div class='del'>-       return 0;</div><div class='del'>-    ep = NULL;</div><div class='del'>-    (void)strtoul(p, &amp;ep, 10);</div><div class='del'>-    if (ep &amp;&amp; *ep == '\0')</div><div class='del'>-       return 1;</div><div class='del'>-    else</div><div class='del'>-       return 0;</div><div class='del'>-}</div><div class='del'>-</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='del'>-{</div><div class='del'>-    if (NIL_P(host)) {</div><div class='del'>-	return NULL;</div><div class='del'>-    }</div><div class='del'>-    else if (rb_obj_is_kind_of(host, rb_cInteger)) {</div><div class='del'>-	long i = NUM2LONG(host);</div><div class='del'>-</div><div class='del'>-	make_inetaddr(htonl(i), hbuf, len);</div><div class='del'>-	return hbuf;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	char *name;</div><div class='del'>-</div><div class='del'>-	SafeStringValue(host);</div><div class='del'>-	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='del'>-	}</div><div class='del'>-	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='del'>-	}</div><div class='del'>-	else if (strlen(name) &gt;= len) {</div><div class='del'>-	    rb_raise(rb_eArgError, "hostname too long (%d)", strlen(name));</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    strcpy(hbuf, name);</div><div class='del'>-	}</div><div class='del'>-	return hbuf;</div><div class='del'>-    }</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='del'>-    if (NIL_P(port)) {</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(port)) {</div><div class='del'>-	snprintf(pbuf, len, "%ld", FIX2LONG(port));</div><div class='del'>-	return pbuf;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	char *serv;</div><div class='del'>-</div><div class='del'>-	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='del'>-    }</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='del'>-</div><div class='del'>-    if (socktype == 0 &amp;&amp; flags == 0 &amp;&amp; str_isnumber(portp)) {</div><div class='del'>-       socktype = SOCK_DGRAM;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    MEMZERO(&amp;hints, struct addrinfo, 1);</div><div class='del'>-    hints.ai_family = AF_UNSPEC;</div><div class='del'>-    hints.ai_socktype = socktype;</div><div class='del'>-    hints.ai_flags = flags;</div><div class='del'>-    error = getaddrinfo(hostp, portp, &amp;hints, &amp;res);</div><div class='del'>-    if (error) {</div><div class='del'>-	if (hostp &amp;&amp; hostp[strlen(hostp)-1] == '\n') {</div><div class='del'>-	    rb_raise(rb_eSocket, "newline at the end of hostname");</div><div class='del'>-	}</div><div class='del'>-	rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));</div><div class='del'>-    }</div><div class='del'>-</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='del'>-    return res;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ipaddr(sockaddr)</div><div class='del'>-    struct sockaddr *sockaddr;</div><div class='del'>-{</div><div class='del'>-    VALUE family, port, addr1, addr2;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    int error;</div><div class='del'>-    char hbuf[1024], pbuf[1024];</div><div class='del'>-</div><div class='del'>-    switch (sockaddr-&gt;sa_family) {</div><div class='del'>-    case AF_UNSPEC:</div><div class='del'>-	family = rb_str_new2("AF_UNSPEC");</div><div class='del'>-	break;</div><div class='del'>-    case AF_INET:</div><div class='del'>-	family = rb_str_new2("AF_INET");</div><div class='del'>-	break;</div><div class='del'>-#ifdef INET6</div><div class='del'>-    case AF_INET6:</div><div class='del'>-	family = rb_str_new2("AF_INET6");</div><div class='del'>-	break;</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_LOCAL</div><div class='del'>-    case AF_LOCAL:</div><div class='del'>-	family = rb_str_new2("AF_LOCAL");</div><div class='del'>-	break;</div><div class='del'>-#elif  AF_UNIX</div><div class='del'>-    case AF_UNIX:</div><div class='del'>-	family = rb_str_new2("AF_UNIX");</div><div class='del'>-	break;</div><div class='del'>-#endif</div><div class='del'>-    default:</div><div class='del'>-        sprintf(pbuf, "unknown:%d", sockaddr-&gt;sa_family);</div><div class='del'>-	family = rb_str_new2(pbuf);</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    addr1 = Qnil;</div><div class='del'>-    if (!do_not_reverse_lookup) {</div><div class='del'>-	error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),</div><div class='del'>-			    NULL, 0, 0);</div><div class='del'>-	if (! error) {</div><div class='del'>-	    addr1 = rb_str_new2(hbuf);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf),</div><div class='del'>-			pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV);</div><div class='del'>-    if (error) {</div><div class='del'>-	rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));</div><div class='del'>-    }</div><div class='del'>-    addr2 = rb_str_new2(hbuf);</div><div class='del'>-    if (addr1 == Qnil) {</div><div class='del'>-	addr1 = addr2;</div><div class='del'>-    }</div><div class='del'>-    port = INT2FIX(atoi(pbuf));</div><div class='del'>-    ary = rb_ary_new3(4, family, port, addr1, addr2);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ruby_socket(domain, type, proto)</div><div class='del'>-    int domain, type, proto;</div><div class='del'>-{</div><div class='del'>-    int fd;</div><div class='del'>-</div><div class='del'>-    fd = socket(domain, type, proto);</div><div class='del'>-    if (fd &lt; 0) {</div><div class='del'>-	if (errno == EMFILE || errno == ENFILE) {</div><div class='del'>-	    rb_gc();</div><div class='del'>-	    fd = socket(domain, type, proto);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return fd;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-wait_connectable(fd)</div><div class='del'>-    int fd;</div><div class='del'>-{</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='del'>-</div><div class='del'>-	rb_thread_select(fd+1, 0, &amp;fds_w, &amp;fds_e, 0);</div><div class='del'>-</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='del'>-</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static int</div><div class='del'>-ruby_connect(fd, sockaddr, len, socks)</div><div class='del'>-    int fd;</div><div class='del'>-    struct sockaddr *sockaddr;</div><div class='del'>-    int len;</div><div class='del'>-    int socks;</div><div class='del'>-{</div><div class='del'>-    int status;</div><div class='del'>-    int mode;</div><div class='del'>-#if WAIT_IN_PROGRESS &gt; 0</div><div class='del'>-    int wait_in_progress = -1;</div><div class='del'>-    int sockerr;</div><div class='del'>-    socklen_t sockerrlen;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_FCNTL)</div><div class='del'>-# if defined(F_GETFL)</div><div class='del'>-    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='del'>-</div><div class='del'>-#ifdef O_NDELAY</div><div class='del'>-# define NONBLOCKING O_NDELAY</div><div class='del'>-#else</div><div class='del'>-#ifdef O_NBIO</div><div class='del'>-# define NONBLOCKING O_NBIO</div><div class='del'>-#else</div><div class='del'>-# define NONBLOCKING O_NONBLOCK</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOCKS5</div><div class='del'>-    if (!socks)</div><div class='del'>-#endif</div><div class='del'>-    fcntl(fd, F_SETFL, mode|NONBLOCKING);</div><div class='del'>-#endif /* HAVE_FCNTL */</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-#if defined(SOCKS) &amp;&amp; !defined(SOCKS5)</div><div class='del'>-	if (socks) {</div><div class='del'>-	    status = Rconnect(fd, sockaddr, len);</div><div class='del'>-	}</div><div class='del'>-	else</div><div class='del'>-#endif</div><div class='del'>-	{</div><div class='del'>-	    status = connect(fd, sockaddr, len);</div><div class='del'>-	}</div><div class='del'>-	if (status &lt; 0) {</div><div class='del'>-	    switch (errno) {</div><div class='del'>-	      case EAGAIN:</div><div class='del'>-#ifdef EINPROGRESS</div><div class='del'>-	      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='del'>-	      case EALREADY:</div><div class='del'>-#endif</div><div class='del'>-#if WAIT_IN_PROGRESS &gt; 0</div><div class='del'>-		wait_in_progress = WAIT_IN_PROGRESS;</div><div class='del'>-#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='del'>-		continue;</div><div class='del'>-</div><div class='del'>-#if WAIT_IN_PROGRESS &gt; 0</div><div class='del'>-	      case EINVAL:</div><div class='del'>-		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='del'>-		}</div><div class='del'>-		break;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef EISCONN</div><div class='del'>-	      case EISCONN:</div><div class='del'>-		status = 0;</div><div class='del'>-		errno = 0;</div><div class='del'>-		break;</div><div class='del'>-#endif</div><div class='del'>-	      default:</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-#ifdef HAVE_FCNTL</div><div class='del'>-	fcntl(fd, F_SETFL, mode);</div><div class='del'>-#endif</div><div class='del'>-	return status;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct inetsock_arg</div><div class='del'>-{</div><div class='del'>-    VALUE sock;</div><div class='del'>-    struct {</div><div class='del'>-	VALUE host, serv;</div><div class='del'>-	struct addrinfo *res;</div><div class='del'>-    } remote, local;</div><div class='del'>-    int type;</div><div class='del'>-    int fd;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-inetsock_cleanup(arg)</div><div class='del'>-    struct inetsock_arg *arg;</div><div class='del'>-{</div><div class='del'>-    if (arg-&gt;remote.res) {</div><div class='del'>-	freeaddrinfo(arg-&gt;remote.res);</div><div class='del'>-	arg-&gt;remote.res = 0;</div><div class='del'>-    }</div><div class='del'>-    if (arg-&gt;local.res) {</div><div class='del'>-	freeaddrinfo(arg-&gt;local.res);</div><div class='del'>-	arg-&gt;local.res = 0;</div><div class='del'>-    }</div><div class='del'>-    if (arg-&gt;fd &gt;= 0) {</div><div class='del'>-	close(arg-&gt;fd);</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'>-init_inetsock_internal(arg)</div><div class='del'>-    struct inetsock_arg *arg;</div><div class='del'>-{</div><div class='del'>-    int type = arg-&gt;type;</div><div class='del'>-    struct addrinfo *res;</div><div class='del'>-    int fd, status = 0;</div><div class='del'>-    char *syscall;</div><div class='del'>-</div><div class='del'>-    arg-&gt;remote.res = sock_addrinfo(arg-&gt;remote.host, arg-&gt;remote.serv, SOCK_STREAM,</div><div class='del'>-				    (type == INET_SERVER) ? AI_PASSIVE : 0);</div><div class='del'>-    /*</div><div class='del'>-     * Maybe also accept a local address</div><div class='del'>-     */</div><div class='del'>-</div><div class='del'>-    if (type != INET_SERVER &amp;&amp; (!NIL_P(arg-&gt;local.host) || !NIL_P(arg-&gt;local.serv))) {</div><div class='del'>-	arg-&gt;local.res = sock_addrinfo(arg-&gt;local.host, arg-&gt;local.serv, SOCK_STREAM, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    arg-&gt;fd = fd = -1;</div><div class='del'>-    for (res = arg-&gt;remote.res; res; res = res-&gt;ai_next) {</div><div class='del'>-	status = ruby_socket(res-&gt;ai_family,res-&gt;ai_socktype,res-&gt;ai_protocol);</div><div class='del'>-	syscall = "socket(2)";</div><div class='del'>-	fd = status;</div><div class='del'>-	if (fd &lt; 0) {</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	arg-&gt;fd = fd;</div><div class='del'>-	if (type == INET_SERVER) {</div><div class='del'>-#if !defined(_WIN32) &amp;&amp; !defined(__CYGWIN__)</div><div class='del'>-	    status = 1;</div><div class='del'>-	    setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,</div><div class='del'>-		       (char*)&amp;status, sizeof(status));</div><div class='del'>-#endif</div><div class='del'>-	    status = bind(fd, res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='del'>-	    syscall = "bind(2)";</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    if (arg-&gt;local.res) {</div><div class='del'>-		status = bind(fd, arg-&gt;local.res-&gt;ai_addr, arg-&gt;local.res-&gt;ai_addrlen);</div><div class='del'>-		syscall = "bind(2)";</div><div class='del'>-	    }</div><div class='del'>-</div><div class='del'>-	    if (status &gt;= 0) {</div><div class='del'>-		status = ruby_connect(fd, res-&gt;ai_addr, res-&gt;ai_addrlen,</div><div class='del'>-				      (type == INET_SOCKS));</div><div class='del'>-		syscall = "connect(2)";</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	if (status &lt; 0) {</div><div class='del'>-	    close(fd);</div><div class='del'>-	    arg-&gt;fd = fd = -1;</div><div class='del'>-	    continue;</div><div class='del'>-	} else</div><div class='del'>-	    break;</div><div class='del'>-    }</div><div class='del'>-    if (status &lt; 0) {</div><div class='del'>-	rb_sys_fail(syscall);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    arg-&gt;fd = -1;</div><div class='del'>-</div><div class='del'>-    if (type == INET_SERVER)</div><div class='del'>-	listen(fd, 5);</div><div class='del'>-</div><div class='del'>-    /* create new instance */</div><div class='del'>-    return init_sock(arg-&gt;sock, fd);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-init_inetsock(sock, remote_host, remote_serv, local_host, local_serv, type)</div><div class='del'>-    VALUE sock, remote_host, remote_serv, local_host, local_serv;</div><div class='del'>-    int type;</div><div class='del'>-{</div><div class='del'>-    struct inetsock_arg arg;</div><div class='del'>-    arg.sock = sock;</div><div class='del'>-    arg.remote.host = remote_host;</div><div class='del'>-    arg.remote.serv = remote_serv;</div><div class='del'>-    arg.remote.res = 0;</div><div class='del'>-    arg.local.host = local_host;</div><div class='del'>-    arg.local.serv = local_serv;</div><div class='del'>-    arg.local.res = 0;</div><div class='del'>-    arg.type = type;</div><div class='del'>-    arg.fd = -1;</div><div class='del'>-    return rb_ensure(init_inetsock_internal, (VALUE)&amp;arg,</div><div class='del'>-		     inetsock_cleanup, (VALUE)&amp;arg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    TCPSocket.new(remote_host, remote_port, local_host=nil, local_port=nil)</div><div class='del'>- *</div><div class='del'>- * Opens a TCP connection to +remote_host+ on +remote_port+.  If +local_host+</div><div class='del'>- * and +local_port+ are specified, then those parameters are used on the local</div><div class='del'>- * end to establish the connection.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-tcp_init(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'>-    VALUE remote_host, remote_serv;</div><div class='del'>-    VALUE local_host, local_serv;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "22", &amp;remote_host, &amp;remote_serv,</div><div class='del'>-			&amp;local_host, &amp;local_serv);</div><div class='del'>-</div><div class='del'>-    return init_inetsock(sock, remote_host, remote_serv,</div><div class='del'>-			local_host, local_serv, INET_CLIENT);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef SOCKS</div><div class='del'>-static VALUE</div><div class='del'>-socks_init(sock, host, serv)</div><div class='del'>-    VALUE sock, host, serv;</div><div class='del'>-{</div><div class='del'>-    static init = 0;</div><div class='del'>-</div><div class='del'>-    if (init == 0) {</div><div class='del'>-	SOCKSinit("ruby");</div><div class='del'>-	init = 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return init_inetsock(sock, host, serv, Qnil, Qnil, INET_SOCKS);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef SOCKS5</div><div class='del'>-static VALUE</div><div class='del'>-socks_s_close(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; !OBJ_TAINTED(sock)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't close socket");</div><div class='del'>-    }</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    shutdown(fileno(fptr-&gt;f), 2);</div><div class='del'>-    shutdown(fileno(fptr-&gt;f2), 2);</div><div class='del'>-    return rb_io_close(sock);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-</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='del'>-{</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='del'>-    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='del'>-</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='del'>-    }</div><div class='del'>-    rb_ary_push(ary, rb_str_new2(hostp));</div><div class='del'>-</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='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'>-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='del'>-{</div><div class='del'>-    struct hostent_arg arg;</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tcp_svr_init(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'>-    VALUE arg1, arg2;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;arg1, &amp;arg2) == 2)</div><div class='del'>-	return init_inetsock(sock, arg1, arg2, Qnil, Qnil, INET_SERVER);</div><div class='del'>-    else</div><div class='del'>-	return init_inetsock(sock, Qnil, arg1, Qnil, Qnil, INET_SERVER);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-make_fd_nonblock(int fd)</div><div class='del'>-{</div><div class='del'>-    int flags;</div><div class='del'>-#ifdef F_GETFL</div><div class='del'>-    flags = fcntl(fd, F_GETFL);</div><div class='del'>-    if (flags == -1) {</div><div class='del'>-        rb_sys_fail(0);</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    flags = 0;</div><div class='del'>-#endif</div><div class='del'>-    flags |= O_NONBLOCK;</div><div class='del'>-    if (fcntl(fd, F_SETFL, flags) == -1) {</div><div class='del'>-        rb_sys_fail(0);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-s_accept_nonblock(VALUE klass, rb_io_t *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'>-    make_fd_nonblock(fd2);</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='del'>-s_accept(klass, fd, sockaddr, len)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    int fd;</div><div class='del'>-    struct sockaddr *sockaddr;</div><div class='del'>-    socklen_t *len;</div><div class='del'>-{</div><div class='del'>-    int fd2;</div><div class='del'>-    int retry = 0;</div><div class='del'>-</div><div class='del'>-    rb_secure(3);</div><div class='del'>-  retry:</div><div class='del'>-    rb_thread_wait_fd(fd);</div><div class='del'>-#if defined(_nec_ews)</div><div class='del'>-    fd2 = accept(fd, sockaddr, len);</div><div class='del'>-#else</div><div class='del'>-    TRAP_BEG;</div><div class='del'>-    fd2 = accept(fd, sockaddr, len);</div><div class='del'>-    TRAP_END;</div><div class='del'>-#endif</div><div class='del'>-    if (fd2 &lt; 0) {</div><div class='del'>-	switch (errno) {</div><div class='del'>-	  case EMFILE:</div><div class='del'>-	  case ENFILE:</div><div class='del'>-	    if (retry) break;</div><div class='del'>-	    rb_gc();</div><div class='del'>-	    retry = 1;</div><div class='del'>-	    goto retry;</div><div class='del'>-	  case EWOULDBLOCK:</div><div class='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    if (!rb_io_wait_readable(fd)) break;</div><div class='del'>-	    retry = 0;</div><div class='del'>-	    goto retry;</div><div class='del'>-	}</div><div class='del'>-	rb_sys_fail(0);</div><div class='del'>-    }</div><div class='del'>-    if (!klass) return INT2NUM(fd2);</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='del'>-tcp_accept(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *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(rb_cTCPSocket, fileno(fptr-&gt;f),</div><div class='del'>-		    (struct sockaddr*)&amp;from, &amp;fromlen);</div><div class='del'>-}</div><div class='del'>-</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::EWOULDBLOCK, 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'>-    rb_io_t *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='del'>-static VALUE</div><div class='del'>-tcp_sysaccept(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *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(0, fileno(fptr-&gt;f), (struct sockaddr*)&amp;from, &amp;fromlen);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-struct unixsock_arg {</div><div class='del'>-    struct sockaddr_un *sockaddr;</div><div class='del'>-    int fd;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-unixsock_connect_internal(arg)</div><div class='del'>-    struct unixsock_arg *arg;</div><div class='del'>-{</div><div class='del'>-    return (VALUE)ruby_connect(arg-&gt;fd, arg-&gt;sockaddr, sizeof(*arg-&gt;sockaddr),</div><div class='del'>-			       0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-init_unixsock(sock, path, server)</div><div class='del'>-    VALUE sock;</div><div class='del'>-    VALUE path;</div><div class='del'>-    int server;</div><div class='del'>-{</div><div class='del'>-    struct sockaddr_un sockaddr;</div><div class='del'>-    int fd, status;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(path);</div><div class='del'>-    fd = ruby_socket(AF_UNIX, SOCK_STREAM, 0);</div><div class='del'>-    if (fd &lt; 0) {</div><div class='del'>-	rb_sys_fail("socket(2)");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    MEMZERO(&amp;sockaddr, struct sockaddr_un, 1);</div><div class='del'>-    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='del'>-</div><div class='del'>-    if (server) {</div><div class='del'>-        status = bind(fd, (struct sockaddr*)&amp;sockaddr, sizeof(sockaddr));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	int prot;</div><div class='del'>-	struct unixsock_arg arg;</div><div class='del'>-	arg.sockaddr = &amp;sockaddr;</div><div class='del'>-	arg.fd = fd;</div><div class='del'>-        status = rb_protect(unixsock_connect_internal, (VALUE)&amp;arg, &amp;prot);</div><div class='del'>-	if (prot) {</div><div class='del'>-	    close(fd);</div><div class='del'>-	    rb_jump_tag(prot);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (status &lt; 0) {</div><div class='del'>-	close(fd);</div><div class='del'>-	rb_sys_fail(sockaddr.sun_path);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (server) listen(fd, 5);</div><div class='del'>-</div><div class='del'>-    init_sock(sock, fd);</div><div class='del'>-    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='del'>-</div><div class='del'>-    return sock;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_addr(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct sockaddr_storage addr;</div><div class='del'>-    socklen_t len = sizeof addr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-</div><div class='del'>-    if (getsockname(fileno(fptr-&gt;f), (struct sockaddr*)&amp;addr, &amp;len) &lt; 0)</div><div class='del'>-	rb_sys_fail("getsockname(2)");</div><div class='del'>-    return ipaddr((struct sockaddr*)&amp;addr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_peeraddr(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct sockaddr_storage addr;</div><div class='del'>-    socklen_t len = sizeof addr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-</div><div class='del'>-    if (getpeername(fileno(fptr-&gt;f), (struct sockaddr*)&amp;addr, &amp;len) &lt; 0)</div><div class='del'>-	rb_sys_fail("getpeername(2)");</div><div class='del'>-    return ipaddr((struct sockaddr*)&amp;addr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_recvfrom(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(sock, argc, argv, RECV_IP);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_s_getaddress(obj, host)</div><div class='del'>-    VALUE obj, host;</div><div class='del'>-{</div><div class='del'>-    struct sockaddr_storage addr;</div><div class='del'>-    struct addrinfo *res = sock_addrinfo(host, Qnil, SOCK_STREAM, 0);</div><div class='del'>-</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-udp_init(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'>-    VALUE arg;</div><div class='del'>-    int socktype = AF_INET;</div><div class='del'>-    int fd;</div><div class='del'>-</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;arg) == 1) {</div><div class='del'>-	socktype = NUM2INT(arg);</div><div class='del'>-    }</div><div class='del'>-    fd = ruby_socket(socktype, SOCK_DGRAM, 0);</div><div class='del'>-    if (fd &lt; 0) {</div><div class='del'>-	rb_sys_fail("socket(2) - udp");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return init_sock(sock, fd);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct udp_arg</div><div class='del'>-{</div><div class='del'>-    struct addrinfo *res;</div><div class='del'>-    int fd;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-udp_connect_internal(arg)</div><div class='del'>-    struct udp_arg *arg;</div><div class='del'>-{</div><div class='del'>-    int fd = arg-&gt;fd;</div><div class='del'>-    struct addrinfo *res;</div><div class='del'>-</div><div class='del'>-    for (res = arg-&gt;res; res; res = res-&gt;ai_next) {</div><div class='del'>-	if (ruby_connect(fd, res-&gt;ai_addr, res-&gt;ai_addrlen, 0) &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'>-udp_connect(sock, host, port)</div><div class='del'>-    VALUE sock, host, port;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct udp_arg arg;</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    arg.res = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    arg.fd = fileno(fptr-&gt;f);</div><div class='del'>-    ret = rb_ensure(udp_connect_internal, (VALUE)&amp;arg,</div><div class='del'>-		    RUBY_METHOD_FUNC(freeaddrinfo), (VALUE)arg.res);</div><div class='del'>-    if (!ret) rb_sys_fail("connect(2)");</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'>-udp_bind(sock, host, port)</div><div class='del'>-    VALUE sock, host, port;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct addrinfo *res0, *res;</div><div class='del'>-</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    res0 = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    for (res = res0; res; res = res-&gt;ai_next) {</div><div class='del'>-	if (bind(fileno(fptr-&gt;f), res-&gt;ai_addr, res-&gt;ai_addrlen) &lt; 0) {</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-	freeaddrinfo(res0);</div><div class='del'>-	return INT2FIX(0);</div><div class='del'>-    }</div><div class='del'>-    freeaddrinfo(res0);</div><div class='del'>-    rb_sys_fail("bind(2)");</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'>-udp_send(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'>-    VALUE mesg, flags, host, port;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    FILE *f;</div><div class='del'>-    int n;</div><div class='del'>-    struct addrinfo *res0, *res;</div><div class='del'>-</div><div class='del'>-    if (argc == 2 || argc == 3) {</div><div class='del'>-	return bsock_send(argc, argv, sock);</div><div class='del'>-    }</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rb_scan_args(argc, argv, "4", &amp;mesg, &amp;flags, &amp;host, &amp;port);</div><div class='del'>-</div><div class='del'>-    StringValue(mesg);</div><div class='del'>-    res0 = sock_addrinfo(host, port, SOCK_DGRAM, 0);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    f = GetWriteFile(fptr);</div><div class='del'>-    for (res = res0; res; res = res-&gt;ai_next) {</div><div class='del'>-      retry:</div><div class='del'>-	n = sendto(fileno(f), RSTRING(mesg)-&gt;ptr, RSTRING(mesg)-&gt;len, NUM2INT(flags),</div><div class='del'>-		   res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='del'>-	if (n &gt;= 0) {</div><div class='del'>-	    freeaddrinfo(res0);</div><div class='del'>-	    return INT2FIX(n);</div><div class='del'>-	}</div><div class='del'>-	if (rb_io_wait_writable(fileno(f))) {</div><div class='del'>-	    goto retry;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    freeaddrinfo(res0);</div><div class='del'>-    rb_sys_fail("sendto(2)");</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'>- * 	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='del'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-static VALUE</div><div class='del'>-unix_init(sock, path)</div><div class='del'>-    VALUE sock, path;</div><div class='del'>-{</div><div class='del'>-    return init_unixsock(sock, path, 0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-unix_path(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (fptr-&gt;path == 0) {</div><div class='del'>-	struct sockaddr_un addr;</div><div class='del'>-	socklen_t len = sizeof(addr);</div><div class='del'>-	if (getsockname(fileno(fptr-&gt;f), (struct sockaddr*)&amp;addr, &amp;len) &lt; 0)</div><div class='del'>-	    rb_sys_fail(0);</div><div class='del'>-	fptr-&gt;path = strdup(unixpath(&amp;addr, len));</div><div class='del'>-    }</div><div class='del'>-    return rb_str_new2(fptr-&gt;path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-unix_svr_init(sock, path)</div><div class='del'>-    VALUE sock, path;</div><div class='del'>-{</div><div class='del'>-    return init_unixsock(sock, path, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-unix_recvfrom(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(sock, argc, argv, RECV_UNIX);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-unix_send_io(sock, val)</div><div class='del'>-    VALUE sock, val;</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_SENDMSG) &amp;&amp; (FD_PASSING_BY_MSG_CONTROL || FD_PASSING_BY_MSG_ACCRIGHTS)</div><div class='del'>-    int fd;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct msghdr msg;</div><div class='del'>-    struct iovec vec[1];</div><div class='del'>-    char buf[1];</div><div class='del'>-</div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='del'>-    struct {</div><div class='del'>-	struct cmsghdr hdr;</div><div class='del'>-        char pad[8+sizeof(int)+8];</div><div class='del'>-    } cmsg;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (rb_obj_is_kind_of(val, rb_cIO)) {</div><div class='del'>-        rb_io_t *valfptr;</div><div class='del'>-	GetOpenFile(val, valfptr);</div><div class='del'>-	fd = fileno(valfptr-&gt;f);</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(val)) {</div><div class='del'>-        fd = FIX2INT(val);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_raise(rb_eTypeError, "neither IO nor file descriptor");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-</div><div class='del'>-    msg.msg_name = NULL;</div><div class='del'>-    msg.msg_namelen = 0;</div><div class='del'>-</div><div class='del'>-    /* Linux and Solaris doesn't work if msg_iov is NULL. */</div><div class='del'>-    buf[0] = '\0';</div><div class='del'>-    vec[0].iov_base = buf;</div><div class='del'>-    vec[0].iov_len = 1;</div><div class='del'>-    msg.msg_iov = vec;</div><div class='del'>-    msg.msg_iovlen = 1;</div><div class='del'>-</div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='del'>-    msg.msg_control = (caddr_t)&amp;cmsg;</div><div class='del'>-    msg.msg_controllen = CMSG_LEN(sizeof(int));</div><div class='del'>-    msg.msg_flags = 0;</div><div class='del'>-    MEMZERO((char*)&amp;cmsg, char, sizeof(cmsg));</div><div class='del'>-    cmsg.hdr.cmsg_len = CMSG_LEN(sizeof(int));</div><div class='del'>-    cmsg.hdr.cmsg_level = SOL_SOCKET;</div><div class='del'>-    cmsg.hdr.cmsg_type = SCM_RIGHTS;</div><div class='del'>-    *(int *)CMSG_DATA(&amp;cmsg.hdr) = fd;</div><div class='del'>-#else</div><div class='del'>-    msg.msg_accrights = (caddr_t)&amp;fd;</div><div class='del'>-    msg.msg_accrightslen = sizeof(fd);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (sendmsg(fileno(fptr-&gt;f), &amp;msg, 0) == -1)</div><div class='del'>-	rb_sys_fail("sendmsg(2)");</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'>-#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='del'>-static VALUE</div><div class='del'>-unix_recv_io(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'>-#if defined(HAVE_RECVMSG) &amp;&amp; (FD_PASSING_BY_MSG_CONTROL || FD_PASSING_BY_MSG_ACCRIGHTS)</div><div class='del'>-    VALUE klass, mode;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct msghdr msg;</div><div class='del'>-    struct iovec vec[2];</div><div class='del'>-    char buf[1];</div><div class='del'>-</div><div class='del'>-    int fd;</div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='del'>-    struct {</div><div class='del'>-	struct cmsghdr hdr;</div><div class='del'>-        char pad[8+sizeof(int)+8];</div><div class='del'>-    } cmsg;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;klass, &amp;mode);</div><div class='del'>-    if (argc == 0)</div><div class='del'>-	klass = rb_cIO;</div><div class='del'>-    if (argc &lt;= 1)</div><div class='del'>-	mode = Qnil;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-</div><div class='del'>-    thread_read_select(fileno(fptr-&gt;f));</div><div class='del'>-</div><div class='del'>-    msg.msg_name = NULL;</div><div class='del'>-    msg.msg_namelen = 0;</div><div class='del'>-</div><div class='del'>-    vec[0].iov_base = buf;</div><div class='del'>-    vec[0].iov_len = sizeof(buf);</div><div class='del'>-    msg.msg_iov = vec;</div><div class='del'>-    msg.msg_iovlen = 1;</div><div class='del'>-</div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='del'>-    msg.msg_control = (caddr_t)&amp;cmsg;</div><div class='del'>-    msg.msg_controllen = CMSG_SPACE(sizeof(int));</div><div class='del'>-    msg.msg_flags = 0;</div><div class='del'>-    cmsg.hdr.cmsg_len = CMSG_LEN(sizeof(int));</div><div class='del'>-    cmsg.hdr.cmsg_level = SOL_SOCKET;</div><div class='del'>-    cmsg.hdr.cmsg_type = SCM_RIGHTS;</div><div class='del'>-    *(int *)CMSG_DATA(&amp;cmsg.hdr) = -1;</div><div class='del'>-#else</div><div class='del'>-    msg.msg_accrights = (caddr_t)&amp;fd;</div><div class='del'>-    msg.msg_accrightslen = sizeof(fd);</div><div class='del'>-    fd = -1;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (recvmsg(fileno(fptr-&gt;f), &amp;msg, 0) == -1)</div><div class='del'>-	rb_sys_fail("recvmsg(2)");</div><div class='del'>-</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 expected)",</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_LEN(sizeof(int))) {</div><div class='del'>-      rb_raise(rb_eSocket,</div><div class='del'>-          "file descriptor was not passed (cmsg_len=%d, %d expected)",</div><div class='del'>-          cmsg.hdr.cmsg_len, CMSG_LEN(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 expected)",</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 expected)",</div><div class='del'>-          cmsg.hdr.cmsg_type, SCM_RIGHTS);</div><div class='del'>-    }</div><div class='del'>-#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='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if FD_PASSING_BY_MSG_CONTROL</div><div class='del'>-    fd = *(int *)CMSG_DATA(&amp;cmsg.hdr);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (klass == Qnil)</div><div class='del'>-	return INT2FIX(fd);</div><div class='del'>-    else {</div><div class='del'>-	static ID for_fd = 0;</div><div class='del'>-	int ff_argc;</div><div class='del'>-	VALUE ff_argv[2];</div><div class='del'>-	if (!for_fd)</div><div class='del'>-	    for_fd = rb_intern("for_fd");</div><div class='del'>-	ff_argc = mode == Qnil ? 1 : 2;</div><div class='del'>-	ff_argv[0] = INT2FIX(fd);</div><div class='del'>-	ff_argv[1] = mode;</div><div class='del'>-        return rb_funcall2(klass, for_fd, ff_argc, ff_argv);</div><div class='del'>-    }</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='del'>-unix_accept(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *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(struct sockaddr_un);</div><div class='del'>-    return s_accept(rb_cUNIXSocket, fileno(fptr-&gt;f),</div><div class='del'>-		    (struct sockaddr*)&amp;from, &amp;fromlen);</div><div class='del'>-}</div><div class='del'>-</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::EWOULDBLOCK, 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'>-    rb_io_t *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='del'>-static VALUE</div><div class='del'>-unix_sysaccept(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *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(struct sockaddr_un);</div><div class='del'>-    return s_accept(0, fileno(fptr-&gt;f), (struct sockaddr*)&amp;from, &amp;fromlen);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-unixaddr(sockaddr, len)</div><div class='del'>-    struct sockaddr_un *sockaddr;</div><div class='del'>-    socklen_t len;</div><div class='del'>-{</div><div class='del'>-    return rb_assoc_new(rb_str_new2("AF_UNIX"),</div><div class='del'>-                        rb_str_new2(unixpath(sockaddr, len)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-unix_addr(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct sockaddr_un addr;</div><div class='del'>-    socklen_t len = sizeof addr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-</div><div class='del'>-    if (getsockname(fileno(fptr-&gt;f), (struct sockaddr*)&amp;addr, &amp;len) &lt; 0)</div><div class='del'>-	rb_sys_fail("getsockname(2)");</div><div class='del'>-    return unixaddr(&amp;addr, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-unix_peeraddr(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct sockaddr_un addr;</div><div class='del'>-    socklen_t len = sizeof addr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-</div><div class='del'>-    if (getpeername(fileno(fptr-&gt;f), (struct sockaddr*)&amp;addr, &amp;len) &lt; 0)</div><div class='del'>-	rb_sys_fail("getpeername(2)");</div><div class='del'>-    return unixaddr(&amp;addr, len);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-setup_domain_and_type(domain, dv, type, tv)</div><div class='del'>-    VALUE domain, type;</div><div class='del'>-    int *dv, *tv;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp;</div><div class='del'>-    char *ptr;</div><div class='del'>-</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='del'>-	ptr = RSTRING(domain)-&gt;ptr;</div><div class='del'>-	if (strcmp(ptr, "AF_INET") == 0)</div><div class='del'>-	    *dv = AF_INET;</div><div class='del'>-#ifdef AF_UNIX</div><div class='del'>-	else if (strcmp(ptr, "AF_UNIX") == 0)</div><div class='del'>-	    *dv = AF_UNIX;</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_ISO</div><div class='del'>-	else if (strcmp(ptr, "AF_ISO") == 0)</div><div class='del'>-	    *dv = AF_ISO;</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_NS</div><div class='del'>-	else if (strcmp(ptr, "AF_NS") == 0)</div><div class='del'>-	    *dv = AF_NS;</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_IMPLINK</div><div class='del'>-	else if (strcmp(ptr, "AF_IMPLINK") == 0)</div><div class='del'>-	    *dv = AF_IMPLINK;</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_INET</div><div class='del'>-	else if (strcmp(ptr, "PF_INET") == 0)</div><div class='del'>-	    *dv = PF_INET;</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_UNIX</div><div class='del'>-	else if (strcmp(ptr, "PF_UNIX") == 0)</div><div class='del'>-	    *dv = PF_UNIX;</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_IMPLINK</div><div class='del'>-	else if (strcmp(ptr, "PF_IMPLINK") == 0)</div><div class='del'>-	    *dv = PF_IMPLINK;</div><div class='del'>-	else if (strcmp(ptr, "AF_IMPLINK") == 0)</div><div class='del'>-	    *dv = AF_IMPLINK;</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_AX25</div><div class='del'>-	else if (strcmp(ptr, "PF_AX25") == 0)</div><div class='del'>-	    *dv = PF_AX25;</div><div class='del'>-#endif</div><div class='del'>-#ifdef PF_IPX</div><div class='del'>-	else if (strcmp(ptr, "PF_IPX") == 0)</div><div class='del'>-	    *dv = PF_IPX;</div><div class='del'>-#endif</div><div class='del'>-	else</div><div class='del'>-	    rb_raise(rb_eSocket, "unknown socket domain %s", ptr);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	*dv = NUM2INT(domain);</div><div class='del'>-    }</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='del'>-	ptr = RSTRING(type)-&gt;ptr;</div><div class='del'>-	if (strcmp(ptr, "SOCK_STREAM") == 0)</div><div class='del'>-	    *tv = SOCK_STREAM;</div><div class='del'>-	else if (strcmp(ptr, "SOCK_DGRAM") == 0)</div><div class='del'>-	    *tv = SOCK_DGRAM;</div><div class='del'>-#ifdef SOCK_RAW</div><div class='del'>-	else if (strcmp(ptr, "SOCK_RAW") == 0)</div><div class='del'>-	    *tv = SOCK_RAW;</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOCK_SEQPACKET</div><div class='del'>-	else if (strcmp(ptr, "SOCK_SEQPACKET") == 0)</div><div class='del'>-	    *tv = SOCK_SEQPACKET;</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOCK_RDM</div><div class='del'>-	else if (strcmp(ptr, "SOCK_RDM") == 0)</div><div class='del'>-	    *tv = SOCK_RDM;</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOCK_PACKET</div><div class='del'>-	else if (strcmp(ptr, "SOCK_PACKET") == 0)</div><div class='del'>-	    *tv = SOCK_PACKET;</div><div class='del'>-#endif</div><div class='del'>-	else</div><div class='del'>-	    rb_raise(rb_eSocket, "unknown socket type %s", ptr);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	*tv = NUM2INT(type);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sock_initialize(sock, domain, type, protocol)</div><div class='del'>-    VALUE sock, domain, type, protocol;</div><div class='del'>-{</div><div class='del'>-    int fd;</div><div class='del'>-    int d, t;</div><div class='del'>-</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    setup_domain_and_type(domain, &amp;d, type, &amp;t);</div><div class='del'>-    fd = ruby_socket(d, t, NUM2INT(protocol));</div><div class='del'>-    if (fd &lt; 0) rb_sys_fail("socket(2)");</div><div class='del'>-</div><div class='del'>-    return init_sock(sock, fd);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sock_s_socketpair(klass, domain, type, protocol)</div><div class='del'>-    VALUE klass, domain, type, protocol;</div><div class='del'>-{</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='del'>-</div><div class='del'>-    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='del'>-	rb_sys_fail("socketpair(2)");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_assoc_new(init_sock(rb_obj_alloc(klass), sp[0]),</div><div class='del'>-			init_sock(rb_obj_alloc(klass), sp[1]));</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'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-static VALUE</div><div class='del'>-unix_s_socketpair(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE domain, type, protocol;</div><div class='del'>-    domain = INT2FIX(PF_UNIX);</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;type, &amp;protocol);</div><div class='del'>-    if (argc == 0)</div><div class='del'>-	type = INT2FIX(SOCK_STREAM);</div><div class='del'>-    if (argc &lt;= 1)</div><div class='del'>-	protocol = INT2FIX(0);</div><div class='del'>-</div><div class='del'>-    return sock_s_socketpair(klass, domain, type, protocol);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-sock_connect(sock, addr)</div><div class='del'>-    VALUE sock, addr;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int fd;</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'>-    fd = fileno(fptr-&gt;f);</div><div class='del'>-    if (ruby_connect(fd, (struct sockaddr*)RSTRING(addr)-&gt;ptr, RSTRING(addr)-&gt;len, 0) &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(0);</div><div class='del'>-}</div><div class='del'>-</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'>-    rb_io_t *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='del'>-static VALUE</div><div class='del'>-sock_bind(sock, addr)</div><div class='del'>-    VALUE sock, addr;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    StringValue(addr);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (bind(fileno(fptr-&gt;f), (struct sockaddr*)RSTRING(addr)-&gt;ptr, RSTRING(addr)-&gt;len) &lt; 0)</div><div class='del'>-	rb_sys_fail("bind(2)");</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-sock_listen(sock, log)</div><div class='del'>-    VALUE sock, log;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int backlog;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    backlog = NUM2INT(log);</div><div class='del'>-    GetOpenFile(sock, fptr);</div><div class='del'>-    if (listen(fileno(fptr-&gt;f), backlog) &lt; 0)</div><div class='del'>-	rb_sys_fail("listen(2)");</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-sock_recvfrom(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(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.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, Errno::EWOULDBLOCK</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, '#{client.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='del'>-static VALUE</div><div class='del'>-sock_accept(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *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(rb_cSocket,fileno(fptr-&gt;f),(struct sockaddr*)buf,&amp;len);</div><div class='del'>-</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.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::EWOULDBLOCK, 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, '#{client_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'>-    rb_io_t *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'>- * 	client_socket = Socket.for_fd( client_fd )</div><div class='del'>- * 	puts "The client said, '#{client_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.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='del'>-static VALUE</div><div class='del'>-sock_sysaccept(sock)</div><div class='del'>-    VALUE sock;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *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(0,fileno(fptr-&gt;f),(struct sockaddr*)buf,&amp;len);</div><div class='del'>-</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'>-#ifdef HAVE_GETHOSTNAME</div><div class='del'>-static VALUE</div><div class='del'>-sock_gethostname(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    char buf[1024];</div><div class='del'>-</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    if (gethostname(buf, (int)sizeof buf - 1) &lt; 0)</div><div class='del'>-	rb_sys_fail("gethostname");</div><div class='del'>-</div><div class='del'>-    buf[sizeof buf - 1] = '\0';</div><div class='del'>-    return rb_str_new2(buf);</div><div class='del'>-}</div><div class='del'>-#else</div><div class='del'>-#ifdef HAVE_UNAME</div><div class='del'>-</div><div class='del'>-#include &lt;sys/utsname.h&gt;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sock_gethostname(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct utsname un;</div><div class='del'>-</div><div class='del'>-    rb_secure(3);</div><div class='del'>-    uname(&amp;un);</div><div class='del'>-    return rb_str_new2(un.nodename);</div><div class='del'>-}</div><div class='del'>-#else</div><div class='del'>-static VALUE</div><div class='del'>-sock_gethostname(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    rb_notimplement();</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-make_addrinfo(res0)</div><div class='del'>-    struct addrinfo *res0;</div><div class='del'>-{</div><div class='del'>-    VALUE base, ary;</div><div class='del'>-    struct addrinfo *res;</div><div class='del'>-</div><div class='del'>-    if (res0 == NULL) {</div><div class='del'>-	rb_raise(rb_eSocket, "host not found");</div><div class='del'>-    }</div><div class='del'>-    base = rb_ary_new();</div><div class='del'>-    for (res = res0; res; res = res-&gt;ai_next) {</div><div class='del'>-	ary = ipaddr(res-&gt;ai_addr);</div><div class='del'>-	rb_ary_push(ary, INT2FIX(res-&gt;ai_family));</div><div class='del'>-	rb_ary_push(ary, INT2FIX(res-&gt;ai_socktype));</div><div class='del'>-	rb_ary_push(ary, INT2FIX(res-&gt;ai_protocol));</div><div class='del'>-	rb_ary_push(base, ary);</div><div class='del'>-    }</div><div class='del'>-    return base;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-sock_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), sock_sockaddr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sock_s_gethostbyaddr(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE addr, type;</div><div class='del'>-    struct hostent *h;</div><div class='del'>-    struct sockaddr *sa;</div><div class='del'>-    char **pch;</div><div class='del'>-    VALUE ary, names;</div><div class='del'>-    int t = AF_INET;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;addr, &amp;type);</div><div class='del'>-    sa = (struct sockaddr*)StringValuePtr(addr);</div><div class='del'>-    if (!NIL_P(type)) {</div><div class='del'>-	t = NUM2INT(type);</div><div class='del'>-    }</div><div class='del'>-#ifdef INET6</div><div class='del'>-    else if (RSTRING(addr)-&gt;len == 16) {</div><div class='del'>-	t = AF_INET6;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    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='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-sock_s_getservbyaname(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE service, proto;</div><div class='del'>-    struct servent *sp;</div><div class='del'>-    int port;</div><div class='del'>-</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='del'>-</div><div class='del'>-    sp = getservbyname(StringValueCStr(service),  StringValueCStr(proto));</div><div class='del'>-    if (sp) {</div><div class='del'>-	port = ntohs(sp-&gt;s_port);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	char *s = RSTRING(service)-&gt;ptr;</div><div class='del'>-	char *end;</div><div class='del'>-</div><div class='del'>-	port = strtoul(s, &amp;end, 0);</div><div class='del'>-	if (*end != '\0') {</div><div class='del'>-	    rb_raise(rb_eSocket, "no such service %s/%s", s, RSTRING(proto)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return INT2FIX(port);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-sock_s_getaddrinfo(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE host, port, family, socktype, protocol, flags, ret;</div><div class='del'>-    char hbuf[1024], pbuf[1024];</div><div class='del'>-    char *hptr, *pptr, *ap;</div><div class='del'>-    struct addrinfo hints, *res;</div><div class='del'>-    int error;</div><div class='del'>-</div><div class='del'>-    host = port = family = socktype = protocol = flags = Qnil;</div><div class='del'>-    rb_scan_args(argc, argv, "24", &amp;host, &amp;port, &amp;family, &amp;socktype, &amp;protocol, &amp;flags);</div><div class='del'>-    if (NIL_P(host)) {</div><div class='del'>-	hptr = NULL;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	strncpy(hbuf, StringValuePtr(host), sizeof(hbuf));</div><div class='del'>-	hbuf[sizeof(hbuf) - 1] = '\0';</div><div class='del'>-	hptr = hbuf;</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(port)) {</div><div class='del'>-	pptr = NULL;</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(port)) {</div><div class='del'>-	snprintf(pbuf, sizeof(pbuf), "%ld", FIX2LONG(port));</div><div class='del'>-	pptr = pbuf;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	strncpy(pbuf, StringValuePtr(port), sizeof(pbuf));</div><div class='del'>-	pbuf[sizeof(pbuf) - 1] = '\0';</div><div class='del'>-	pptr = pbuf;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    MEMZERO(&amp;hints, struct addrinfo, 1);</div><div class='del'>-    if (NIL_P(family)) {</div><div class='del'>-	hints.ai_family = PF_UNSPEC;</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(family)) {</div><div class='del'>-	hints.ai_family = FIX2INT(family);</div><div class='del'>-    }</div><div class='del'>-    else if ((ap = StringValuePtr(family)) != 0) {</div><div class='del'>-	if (strcmp(ap, "AF_INET") == 0) {</div><div class='del'>-	    hints.ai_family = PF_INET;</div><div class='del'>-	}</div><div class='del'>-#ifdef INET6</div><div class='del'>-	else if (strcmp(ap, "AF_INET6") == 0) {</div><div class='del'>-	    hints.ai_family = PF_INET6;</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(socktype)) {</div><div class='del'>-	hints.ai_socktype = NUM2INT(socktype);</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(protocol)) {</div><div class='del'>-	hints.ai_protocol = NUM2INT(protocol);</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(flags)) {</div><div class='del'>-	hints.ai_flags = NUM2INT(flags);</div><div class='del'>-    }</div><div class='del'>-    error = getaddrinfo(hptr, pptr, &amp;hints, &amp;res);</div><div class='del'>-    if (error) {</div><div class='del'>-	rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ret = make_addrinfo(res);</div><div class='del'>-    freeaddrinfo(res);</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sock_s_getnameinfo(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE sa, af = Qnil, host = Qnil, port = Qnil, flags, tmp;</div><div class='del'>-    char *hptr, *pptr;</div><div class='del'>-    char hbuf[1024], pbuf[1024];</div><div class='del'>-    int fl;</div><div class='del'>-    struct addrinfo hints, *res = NULL, *r;</div><div class='del'>-    int error;</div><div class='del'>-    struct sockaddr_storage ss;</div><div class='del'>-    struct sockaddr *sap;</div><div class='del'>-    char *ap;</div><div class='del'>-</div><div class='del'>-    sa = flags = Qnil;</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;sa, &amp;flags);</div><div class='del'>-</div><div class='del'>-    fl = 0;</div><div class='del'>-    if (!NIL_P(flags)) {</div><div class='del'>-	fl = NUM2INT(flags);</div><div class='del'>-    }</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='del'>-	if (sizeof(ss) &lt; RSTRING(sa)-&gt;len) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "sockaddr length too big");</div><div class='del'>-	}</div><div class='del'>-	memcpy(&amp;ss, RSTRING(sa)-&gt;ptr, RSTRING(sa)-&gt;len);</div><div class='del'>-	if (RSTRING(sa)-&gt;len != SA_LEN((struct sockaddr*)&amp;ss)) {</div><div class='del'>-	    rb_raise(rb_eTypeError, "sockaddr size differs - should not happen");</div><div class='del'>-	}</div><div class='del'>-	sap = (struct sockaddr*)&amp;ss;</div><div class='del'>-	goto call_nameinfo;</div><div class='del'>-    }</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='del'>-	MEMZERO(&amp;hints, struct addrinfo, 1);</div><div class='del'>-	if (RARRAY(sa)-&gt;len == 3) {</div><div class='del'>-	    af = RARRAY(sa)-&gt;ptr[0];</div><div class='del'>-	    port = RARRAY(sa)-&gt;ptr[1];</div><div class='del'>-	    host = RARRAY(sa)-&gt;ptr[2];</div><div class='del'>-	}</div><div class='del'>-	else if (RARRAY(sa)-&gt;len &gt;= 4) {</div><div class='del'>-	    af = RARRAY(sa)-&gt;ptr[0];</div><div class='del'>-	    port = RARRAY(sa)-&gt;ptr[1];</div><div class='del'>-	    host = RARRAY(sa)-&gt;ptr[3];</div><div class='del'>-	    if (NIL_P(host)) {</div><div class='del'>-		host = RARRAY(sa)-&gt;ptr[2];</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		/*</div><div class='del'>-		 * 4th element holds numeric form, don't resolve.</div><div class='del'>-		 * see ipaddr().</div><div class='del'>-		 */</div><div class='del'>-#ifdef AI_NUMERICHOST /* AIX 4.3.3 doesn't have AI_NUMERICHOST. */</div><div class='del'>-		hints.ai_flags |= AI_NUMERICHOST;</div><div class='del'>-#endif</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_raise(rb_eArgError, "array size should be 3 or 4, %ld given",</div><div class='del'>-		     RARRAY(sa)-&gt;len);</div><div class='del'>-	}</div><div class='del'>-	/* host */</div><div class='del'>-	if (NIL_P(host)) {</div><div class='del'>-	    hptr = NULL;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    strncpy(hbuf, StringValuePtr(host), sizeof(hbuf));</div><div class='del'>-	    hbuf[sizeof(hbuf) - 1] = '\0';</div><div class='del'>-	    hptr = hbuf;</div><div class='del'>-	}</div><div class='del'>-	/* port */</div><div class='del'>-	if (NIL_P(port)) {</div><div class='del'>-	    strcpy(pbuf, "0");</div><div class='del'>-	    pptr = NULL;</div><div class='del'>-	}</div><div class='del'>-	else if (FIXNUM_P(port)) {</div><div class='del'>-	    snprintf(pbuf, sizeof(pbuf), "%ld", NUM2LONG(port));</div><div class='del'>-	    pptr = pbuf;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    strncpy(pbuf, StringValuePtr(port), sizeof(pbuf));</div><div class='del'>-	    pbuf[sizeof(pbuf) - 1] = '\0';</div><div class='del'>-	    pptr = pbuf;</div><div class='del'>-	}</div><div class='del'>-	hints.ai_socktype = (fl &amp; NI_DGRAM) ? SOCK_DGRAM : SOCK_STREAM;</div><div class='del'>-	/* af */</div><div class='del'>-	if (NIL_P(af)) {</div><div class='del'>-	    hints.ai_family = PF_UNSPEC;</div><div class='del'>-	}</div><div class='del'>-	else if (FIXNUM_P(af)) {</div><div class='del'>-	    hints.ai_family = FIX2INT(af);</div><div class='del'>-	}</div><div class='del'>-	else if ((ap = StringValuePtr(af)) != 0) {</div><div class='del'>-	    if (strcmp(ap, "AF_INET") == 0) {</div><div class='del'>-		hints.ai_family = PF_INET;</div><div class='del'>-	    }</div><div class='del'>-#ifdef INET6</div><div class='del'>-	    else if (strcmp(ap, "AF_INET6") == 0) {</div><div class='del'>-		hints.ai_family = PF_INET6;</div><div class='del'>-	    }</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-	error = getaddrinfo(hptr, pptr, &amp;hints, &amp;res);</div><div class='del'>-	if (error) goto error_exit_addr;</div><div class='del'>-	sap = res-&gt;ai_addr;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_raise(rb_eTypeError, "expecting String or Array");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  call_nameinfo:</div><div class='del'>-    error = getnameinfo(sap, SA_LEN(sap), hbuf, sizeof(hbuf),</div><div class='del'>-			pbuf, sizeof(pbuf), fl);</div><div class='del'>-    if (error) goto error_exit_name;</div><div class='del'>-    if (res) {</div><div class='del'>-	for (r = res-&gt;ai_next; r; r = r-&gt;ai_next) {</div><div class='del'>-	    char hbuf2[1024], pbuf2[1024];</div><div class='del'>-</div><div class='del'>-	    sap = r-&gt;ai_addr;</div><div class='del'>-	    error = getnameinfo(sap, SA_LEN(sap), hbuf2, sizeof(hbuf2),</div><div class='del'>-				pbuf2, sizeof(pbuf2), fl);</div><div class='del'>-	    if (error) goto error_exit_name;</div><div class='del'>-	    if (strcmp(hbuf, hbuf2) != 0|| strcmp(pbuf, pbuf2) != 0) {</div><div class='del'>-		freeaddrinfo(res);</div><div class='del'>-		rb_raise(rb_eSocket, "sockaddr resolved to multiple nodename");</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	freeaddrinfo(res);</div><div class='del'>-    }</div><div class='del'>-    return rb_assoc_new(rb_str_new2(hbuf), rb_str_new2(pbuf));</div><div class='del'>-</div><div class='del'>-  error_exit_addr:</div><div class='del'>-    if (res) freeaddrinfo(res);</div><div class='del'>-    rb_raise(rb_eSocket, "getaddrinfo: %s", gai_strerror(error));</div><div class='del'>-</div><div class='del'>-  error_exit_name:</div><div class='del'>-    if (res) freeaddrinfo(res);</div><div class='del'>-    rb_raise(rb_eSocket, "getnameinfo: %s", gai_strerror(error));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sock_s_pack_sockaddr_in(self, port, host)</div><div class='del'>-    VALUE self, port, host;</div><div class='del'>-{</div><div class='del'>-    struct addrinfo *res = sock_addrinfo(host, port, 0, 0);</div><div class='del'>-    VALUE addr = rb_str_new((char*)res-&gt;ai_addr, res-&gt;ai_addrlen);</div><div class='del'>-</div><div class='del'>-    freeaddrinfo(res);</div><div class='del'>-    OBJ_INFECT(addr, port);</div><div class='del'>-    OBJ_INFECT(addr, host);</div><div class='del'>-</div><div class='del'>-    return addr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sock_s_unpack_sockaddr_in(self, addr)</div><div class='del'>-    VALUE self, addr;</div><div class='del'>-{</div><div class='del'>-    struct sockaddr_in * sockaddr;</div><div class='del'>-    VALUE host;</div><div class='del'>-</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    host = make_ipaddr((struct sockaddr*)sockaddr);</div><div class='del'>-    OBJ_INFECT(host, addr);</div><div class='del'>-    return rb_assoc_new(INT2NUM(ntohs(sockaddr-&gt;sin_port)), host);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-static VALUE</div><div class='del'>-sock_s_pack_sockaddr_un(self, path)</div><div class='del'>-    VALUE self, path;</div><div class='del'>-{</div><div class='del'>-    struct sockaddr_un sockaddr;</div><div class='del'>-    char *sun_path;</div><div class='del'>-    VALUE addr;</div><div class='del'>-</div><div class='del'>-    MEMZERO(&amp;sockaddr, struct sockaddr_un, 1);</div><div class='del'>-    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='del'>-    addr = rb_str_new((char*)&amp;sockaddr, sizeof(sockaddr));</div><div class='del'>-    OBJ_INFECT(addr, path);</div><div class='del'>-</div><div class='del'>-    return addr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-sock_s_unpack_sockaddr_un(self, addr)</div><div class='del'>-    VALUE self, addr;</div><div class='del'>-{</div><div class='del'>-    struct sockaddr_un * sockaddr;</div><div class='del'>-    char *sun_path;</div><div class='del'>-    VALUE path;</div><div class='del'>-</div><div class='del'>-    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='del'>-		 RSTRING(addr)-&gt;len, sizeof(struct sockaddr_un));</div><div class='del'>-    }</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='del'>-    OBJ_INFECT(path, addr);</div><div class='del'>-    return path;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE mConst;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-sock_define_const(name, value)</div><div class='del'>-    char *name;</div><div class='del'>-    int value;</div><div class='del'>-{</div><div class='del'>-    rb_define_const(rb_cSocket, name, INT2FIX(value));</div><div class='del'>-    rb_define_const(mConst, name, INT2FIX(value));</div><div class='del'>-}</div><div class='del'>-</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='del'>-void</div><div class='del'>-Init_socket()</div><div class='del'>-{</div><div class='del'>-    rb_eSocket = rb_define_class("SocketError", rb_eStandardError);</div><div class='del'>-</div><div class='del'>-    rb_cBasicSocket = rb_define_class("BasicSocket", rb_cIO);</div><div class='del'>-    rb_undef_method(rb_cBasicSocket, "initialize");</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cBasicSocket, "do_not_reverse_lookup",</div><div class='del'>-			       bsock_do_not_rev_lookup, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cBasicSocket, "do_not_reverse_lookup=",</div><div class='del'>-			       bsock_do_not_rev_lookup_set, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cBasicSocket, "for_fd", bsock_s_for_fd, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "close_read", bsock_close_read, 0);</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "close_write", bsock_close_write, 0);</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "shutdown", bsock_shutdown, -1);</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "setsockopt", bsock_setsockopt, 3);</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "getsockopt", bsock_getsockopt, 2);</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "getsockname", bsock_getsockname, 0);</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "getpeername", bsock_getpeername, 0);</div><div class='del'>-    rb_define_method(rb_cBasicSocket, "send", bsock_send, -1);</div><div class='del'>-    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='del'>-</div><div class='del'>-    rb_cIPSocket = rb_define_class("IPSocket", rb_cBasicSocket);</div><div class='del'>-    rb_define_global_const("IPsocket", rb_cIPSocket);</div><div class='del'>-    rb_define_method(rb_cIPSocket, "addr", ip_addr, 0);</div><div class='del'>-    rb_define_method(rb_cIPSocket, "peeraddr", ip_peeraddr, 0);</div><div class='del'>-    rb_define_method(rb_cIPSocket, "recvfrom", ip_recvfrom, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIPSocket, "getaddress", ip_s_getaddress, 1);</div><div class='del'>-</div><div class='del'>-    rb_cTCPSocket = rb_define_class("TCPSocket", rb_cIPSocket);</div><div class='del'>-    rb_define_global_const("TCPsocket", rb_cTCPSocket);</div><div class='del'>-    rb_define_singleton_method(rb_cTCPSocket, "gethostbyname", tcp_s_gethostbyname, 1);</div><div class='del'>-    rb_define_method(rb_cTCPSocket, "initialize", tcp_init, -1);</div><div class='del'>-</div><div class='del'>-#ifdef SOCKS</div><div class='del'>-    rb_cSOCKSSocket = rb_define_class("SOCKSSocket", rb_cTCPSocket);</div><div class='del'>-    rb_define_global_const("SOCKSsocket", rb_cSOCKSSocket);</div><div class='del'>-    rb_define_method(rb_cSOCKSSocket, "initialize", socks_init, 2);</div><div class='del'>-#ifdef SOCKS5</div><div class='del'>-    rb_define_method(rb_cSOCKSSocket, "close", socks_s_close, 0);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_cTCPServer = rb_define_class("TCPServer", rb_cTCPSocket);</div><div class='del'>-    rb_define_global_const("TCPserver", rb_cTCPServer);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cTCPServer, "sysaccept", tcp_sysaccept, 0);</div><div class='del'>-    rb_define_method(rb_cTCPServer, "initialize", tcp_svr_init, -1);</div><div class='del'>-    rb_define_method(rb_cTCPServer, "listen", sock_listen, 1);</div><div class='del'>-</div><div class='del'>-    rb_cUDPSocket = rb_define_class("UDPSocket", rb_cIPSocket);</div><div class='del'>-    rb_define_global_const("UDPsocket", rb_cUDPSocket);</div><div class='del'>-    rb_define_method(rb_cUDPSocket, "initialize", udp_init, -1);</div><div class='del'>-    rb_define_method(rb_cUDPSocket, "connect", udp_connect, 2);</div><div class='del'>-    rb_define_method(rb_cUDPSocket, "bind", udp_bind, 2);</div><div class='del'>-    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='del'>-</div><div class='del'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-    rb_cUNIXSocket = rb_define_class("UNIXSocket", rb_cBasicSocket);</div><div class='del'>-    rb_define_global_const("UNIXsocket", rb_cUNIXSocket);</div><div class='del'>-    rb_define_method(rb_cUNIXSocket, "initialize", unix_init, 1);</div><div class='del'>-    rb_define_method(rb_cUNIXSocket, "path", unix_path, 0);</div><div class='del'>-    rb_define_method(rb_cUNIXSocket, "addr", unix_addr, 0);</div><div class='del'>-    rb_define_method(rb_cUNIXSocket, "peeraddr", unix_peeraddr, 0);</div><div class='del'>-    rb_define_method(rb_cUNIXSocket, "recvfrom", unix_recvfrom, -1);</div><div class='del'>-    rb_define_method(rb_cUNIXSocket, "send_io", unix_send_io, 1);</div><div class='del'>-    rb_define_method(rb_cUNIXSocket, "recv_io", unix_recv_io, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cUNIXSocket, "socketpair", unix_s_socketpair, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cUNIXSocket, "pair", unix_s_socketpair, -1);</div><div class='del'>-</div><div class='del'>-    rb_cUNIXServer = rb_define_class("UNIXServer", rb_cUNIXSocket);</div><div class='del'>-    rb_define_global_const("UNIXserver", rb_cUNIXServer);</div><div class='del'>-    rb_define_method(rb_cUNIXServer, "initialize", unix_svr_init, 1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cUNIXServer, "sysaccept", unix_sysaccept, 0);</div><div class='del'>-    rb_define_method(rb_cUNIXServer, "listen", sock_listen, 1);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_cSocket = rb_define_class("Socket", rb_cBasicSocket);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cSocket, "initialize", sock_initialize, 3);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cSocket, "bind", sock_bind, 1);</div><div class='del'>-    rb_define_method(rb_cSocket, "listen", sock_listen, 1);</div><div class='del'>-    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='del'>-    rb_define_method(rb_cSocket, "sysaccept", sock_sysaccept, 0);</div><div class='del'>-</div><div class='del'>-    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='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "socketpair", sock_s_socketpair, 3);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "pair", sock_s_socketpair, 3);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "gethostname", sock_gethostname, 0);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "gethostbyname", sock_s_gethostbyname, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "gethostbyaddr", sock_s_gethostbyaddr, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "getservbyname", sock_s_getservbyaname, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "getaddrinfo", sock_s_getaddrinfo, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "getnameinfo", sock_s_getnameinfo, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "sockaddr_in", sock_s_pack_sockaddr_in, 2);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "pack_sockaddr_in", sock_s_pack_sockaddr_in, 2);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "unpack_sockaddr_in", sock_s_unpack_sockaddr_in, 1);</div><div class='del'>-#ifdef HAVE_SYS_UN_H</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "sockaddr_un", sock_s_pack_sockaddr_un, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "pack_sockaddr_un", sock_s_pack_sockaddr_un, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cSocket, "unpack_sockaddr_un", sock_s_unpack_sockaddr_un, 1);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* constants */</div><div class='del'>-    mConst = rb_define_module_under(rb_cSocket, "Constants");</div><div class='del'>-    sock_define_const("SOCK_STREAM", SOCK_STREAM);</div><div class='del'>-    sock_define_const("SOCK_DGRAM", SOCK_DGRAM);</div><div class='del'>-#ifdef SOCK_RAW</div><div class='del'>-    sock_define_const("SOCK_RAW", SOCK_RAW);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOCK_RDM</div><div class='del'>-    sock_define_const("SOCK_RDM", SOCK_RDM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOCK_SEQPACKET</div><div class='del'>-    sock_define_const("SOCK_SEQPACKET", SOCK_SEQPACKET);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOCK_PACKET</div><div class='del'>-    sock_define_const("SOCK_PACKET", SOCK_PACKET);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    sock_define_const("AF_INET", AF_INET);</div><div class='del'>-#ifdef PF_INET</div><div class='del'>-    sock_define_const("PF_INET", PF_INET);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_UNIX</div><div class='del'>-    sock_define_const("AF_UNIX", AF_UNIX);</div><div class='del'>-    sock_define_const("PF_UNIX", PF_UNIX);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_AX25</div><div class='del'>-    sock_define_const("AF_AX25", AF_AX25);</div><div class='del'>-    sock_define_const("PF_AX25", PF_AX25);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_IPX</div><div class='del'>-    sock_define_const("AF_IPX", AF_IPX);</div><div class='del'>-    sock_define_const("PF_IPX", PF_IPX);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_APPLETALK</div><div class='del'>-    sock_define_const("AF_APPLETALK", AF_APPLETALK);</div><div class='del'>-    sock_define_const("PF_APPLETALK", PF_APPLETALK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AF_UNSPEC</div><div class='del'>-    sock_define_const("AF_UNSPEC", AF_UNSPEC);</div><div class='del'>-    sock_define_const("PF_UNSPEC", PF_UNSPEC);</div><div class='del'>-#endif</div><div class='del'>-#ifdef INET6</div><div class='del'>-    sock_define_const("AF_INET6", AF_INET6);</div><div class='del'>-#endif</div><div class='del'>-#ifdef INET6</div><div class='del'>-    sock_define_const("PF_INET6", PF_INET6);</div><div class='del'>-#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='del'>-</div><div class='del'>-    sock_define_const("MSG_OOB", MSG_OOB);</div><div class='del'>-#ifdef MSG_PEEK</div><div class='del'>-    sock_define_const("MSG_PEEK", MSG_PEEK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef MSG_DONTROUTE</div><div class='del'>-    sock_define_const("MSG_DONTROUTE", MSG_DONTROUTE);</div><div class='del'>-#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='del'>-</div><div class='del'>-    sock_define_const("SOL_SOCKET", SOL_SOCKET);</div><div class='del'>-#ifdef SOL_IP</div><div class='del'>-    sock_define_const("SOL_IP", SOL_IP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOL_IPX</div><div class='del'>-    sock_define_const("SOL_IPX", SOL_IPX);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOL_AX25</div><div class='del'>-    sock_define_const("SOL_AX25", SOL_AX25);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOL_ATALK</div><div class='del'>-    sock_define_const("SOL_ATALK", SOL_ATALK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOL_TCP</div><div class='del'>-    sock_define_const("SOL_TCP", SOL_TCP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOL_UDP</div><div class='del'>-    sock_define_const("SOL_UDP", SOL_UDP);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef	IPPROTO_IP</div><div class='del'>-    sock_define_const("IPPROTO_IP", IPPROTO_IP);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("IPPROTO_IP", 0);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_ICMP</div><div class='del'>-    sock_define_const("IPPROTO_ICMP", IPPROTO_ICMP);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("IPPROTO_ICMP", 1);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_IGMP</div><div class='del'>-    sock_define_const("IPPROTO_IGMP", IPPROTO_IGMP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_GGP</div><div class='del'>-    sock_define_const("IPPROTO_GGP", IPPROTO_GGP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_TCP</div><div class='del'>-    sock_define_const("IPPROTO_TCP", IPPROTO_TCP);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("IPPROTO_TCP", 6);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_EGP</div><div class='del'>-    sock_define_const("IPPROTO_EGP", IPPROTO_EGP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_PUP</div><div class='del'>-    sock_define_const("IPPROTO_PUP", IPPROTO_PUP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_UDP</div><div class='del'>-    sock_define_const("IPPROTO_UDP", IPPROTO_UDP);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("IPPROTO_UDP", 17);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_IDP</div><div class='del'>-    sock_define_const("IPPROTO_IDP", IPPROTO_IDP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_HELLO</div><div class='del'>-    sock_define_const("IPPROTO_HELLO", IPPROTO_HELLO);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_ND</div><div class='del'>-    sock_define_const("IPPROTO_ND", IPPROTO_ND);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_TP</div><div class='del'>-    sock_define_const("IPPROTO_TP", IPPROTO_TP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_XTP</div><div class='del'>-    sock_define_const("IPPROTO_XTP", IPPROTO_XTP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_EON</div><div class='del'>-    sock_define_const("IPPROTO_EON", IPPROTO_EON);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_BIP</div><div class='del'>-    sock_define_const("IPPROTO_BIP", IPPROTO_BIP);</div><div class='del'>-#endif</div><div class='del'>-/**/</div><div class='del'>-#ifdef	IPPROTO_RAW</div><div class='del'>-    sock_define_const("IPPROTO_RAW", IPPROTO_RAW);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("IPPROTO_RAW", 255);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPROTO_MAX</div><div class='del'>-    sock_define_const("IPPROTO_MAX", IPPROTO_MAX);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-	/* Some port configuration */</div><div class='del'>-#ifdef	IPPORT_RESERVED</div><div class='del'>-    sock_define_const("IPPORT_RESERVED", IPPORT_RESERVED);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("IPPORT_RESERVED", 1024);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IPPORT_USERRESERVED</div><div class='del'>-    sock_define_const("IPPORT_USERRESERVED", IPPORT_USERRESERVED);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("IPPORT_USERRESERVED", 5000);</div><div class='del'>-#endif</div><div class='del'>-	/* Some reserved IP v.4 addresses */</div><div class='del'>-#ifdef	INADDR_ANY</div><div class='del'>-    sock_define_const("INADDR_ANY", INADDR_ANY);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("INADDR_ANY", 0x00000000);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	INADDR_BROADCAST</div><div class='del'>-    sock_define_const("INADDR_BROADCAST", INADDR_BROADCAST);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("INADDR_BROADCAST", 0xffffffff);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	INADDR_LOOPBACK</div><div class='del'>-    sock_define_const("INADDR_LOOPBACK", INADDR_LOOPBACK);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("INADDR_LOOPBACK", 0x7F000001);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	INADDR_UNSPEC_GROUP</div><div class='del'>-    sock_define_const("INADDR_UNSPEC_GROUP", INADDR_UNSPEC_GROUP);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("INADDR_UNSPEC_GROUP", 0xe0000000);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	INADDR_ALLHOSTS_GROUP</div><div class='del'>-    sock_define_const("INADDR_ALLHOSTS_GROUP", INADDR_ALLHOSTS_GROUP);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("INADDR_ALLHOSTS_GROUP", 0xe0000001);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	INADDR_MAX_LOCAL_GROUP</div><div class='del'>-    sock_define_const("INADDR_MAX_LOCAL_GROUP", INADDR_MAX_LOCAL_GROUP);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("INADDR_MAX_LOCAL_GROUP", 0xe00000ff);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	INADDR_NONE</div><div class='del'>-    sock_define_const("INADDR_NONE", INADDR_NONE);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("INADDR_NONE", 0xffffffff);</div><div class='del'>-#endif</div><div class='del'>-	/* IP [gs]etsockopt options */</div><div class='del'>-#ifdef	IP_OPTIONS</div><div class='del'>-    sock_define_const("IP_OPTIONS", IP_OPTIONS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_HDRINCL</div><div class='del'>-    sock_define_const("IP_HDRINCL", IP_HDRINCL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_TOS</div><div class='del'>-    sock_define_const("IP_TOS", IP_TOS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_TTL</div><div class='del'>-    sock_define_const("IP_TTL", IP_TTL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_RECVOPTS</div><div class='del'>-    sock_define_const("IP_RECVOPTS", IP_RECVOPTS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_RECVRETOPTS</div><div class='del'>-    sock_define_const("IP_RECVRETOPTS", IP_RECVRETOPTS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_RECVDSTADDR</div><div class='del'>-    sock_define_const("IP_RECVDSTADDR", IP_RECVDSTADDR);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_RETOPTS</div><div class='del'>-    sock_define_const("IP_RETOPTS", IP_RETOPTS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_MULTICAST_IF</div><div class='del'>-    sock_define_const("IP_MULTICAST_IF", IP_MULTICAST_IF);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_MULTICAST_TTL</div><div class='del'>-    sock_define_const("IP_MULTICAST_TTL", IP_MULTICAST_TTL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_MULTICAST_LOOP</div><div class='del'>-    sock_define_const("IP_MULTICAST_LOOP", IP_MULTICAST_LOOP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_ADD_MEMBERSHIP</div><div class='del'>-    sock_define_const("IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_DROP_MEMBERSHIP</div><div class='del'>-    sock_define_const("IP_DROP_MEMBERSHIP", IP_DROP_MEMBERSHIP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_DEFAULT_MULTICAST_TTL</div><div class='del'>-    sock_define_const("IP_DEFAULT_MULTICAST_TTL", IP_DEFAULT_MULTICAST_TTL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_DEFAULT_MULTICAST_LOOP</div><div class='del'>-    sock_define_const("IP_DEFAULT_MULTICAST_LOOP", IP_DEFAULT_MULTICAST_LOOP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef	IP_MAX_MEMBERSHIPS</div><div class='del'>-    sock_define_const("IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_DEBUG</div><div class='del'>-    sock_define_const("SO_DEBUG", SO_DEBUG);</div><div class='del'>-#endif</div><div class='del'>-    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='del'>-#ifdef SO_TYPE</div><div class='del'>-    sock_define_const("SO_TYPE", SO_TYPE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_ERROR</div><div class='del'>-    sock_define_const("SO_ERROR", SO_ERROR);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_DONTROUTE</div><div class='del'>-    sock_define_const("SO_DONTROUTE", SO_DONTROUTE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_BROADCAST</div><div class='del'>-    sock_define_const("SO_BROADCAST", SO_BROADCAST);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_SNDBUF</div><div class='del'>-    sock_define_const("SO_SNDBUF", SO_SNDBUF);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_RCVBUF</div><div class='del'>-    sock_define_const("SO_RCVBUF", SO_RCVBUF);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_KEEPALIVE</div><div class='del'>-    sock_define_const("SO_KEEPALIVE", SO_KEEPALIVE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_OOBINLINE</div><div class='del'>-    sock_define_const("SO_OOBINLINE", SO_OOBINLINE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_NO_CHECK</div><div class='del'>-    sock_define_const("SO_NO_CHECK", SO_NO_CHECK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_PRIORITY</div><div class='del'>-    sock_define_const("SO_PRIORITY", SO_PRIORITY);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_LINGER</div><div class='del'>-    sock_define_const("SO_LINGER", SO_LINGER);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_PASSCRED</div><div class='del'>-    sock_define_const("SO_PASSCRED", SO_PASSCRED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_PEERCRED</div><div class='del'>-    sock_define_const("SO_PEERCRED", SO_PEERCRED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_RCVLOWAT</div><div class='del'>-    sock_define_const("SO_RCVLOWAT", SO_RCVLOWAT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_SNDLOWAT</div><div class='del'>-    sock_define_const("SO_SNDLOWAT", SO_SNDLOWAT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_RCVTIMEO</div><div class='del'>-    sock_define_const("SO_RCVTIMEO", SO_RCVTIMEO);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_SNDTIMEO</div><div class='del'>-    sock_define_const("SO_SNDTIMEO", SO_SNDTIMEO);</div><div class='del'>-#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='del'>-</div><div class='del'>-#ifdef SO_SECURITY_AUTHENTICATION</div><div class='del'>-    sock_define_const("SO_SECURITY_AUTHENTICATION", SO_SECURITY_AUTHENTICATION);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_SECURITY_ENCRYPTION_TRANSPORT</div><div class='del'>-    sock_define_const("SO_SECURITY_ENCRYPTION_TRANSPORT", SO_SECURITY_ENCRYPTION_TRANSPORT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_SECURITY_ENCRYPTION_NETWORK</div><div class='del'>-    sock_define_const("SO_SECURITY_ENCRYPTION_NETWORK", SO_SECURITY_ENCRYPTION_NETWORK);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef SO_BINDTODEVICE</div><div class='del'>-    sock_define_const("SO_BINDTODEVICE", SO_BINDTODEVICE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_ATTACH_FILTER</div><div class='del'>-    sock_define_const("SO_ATTACH_FILTER", SO_ATTACH_FILTER);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_DETACH_FILTER</div><div class='del'>-    sock_define_const("SO_DETACH_FILTER", SO_DETACH_FILTER);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_PEERNAME</div><div class='del'>-    sock_define_const("SO_PEERNAME", SO_PEERNAME);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SO_TIMESTAMP</div><div class='del'>-    sock_define_const("SO_TIMESTAMP", SO_TIMESTAMP);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef SOPRI_INTERACTIVE</div><div class='del'>-    sock_define_const("SOPRI_INTERACTIVE", SOPRI_INTERACTIVE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOPRI_NORMAL</div><div class='del'>-    sock_define_const("SOPRI_NORMAL", SOPRI_NORMAL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SOPRI_BACKGROUND</div><div class='del'>-    sock_define_const("SOPRI_BACKGROUND", SOPRI_BACKGROUND);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef IPX_TYPE</div><div class='del'>-    sock_define_const("IPX_TYPE", IPX_TYPE);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef TCP_NODELAY</div><div class='del'>-    sock_define_const("TCP_NODELAY", TCP_NODELAY);</div><div class='del'>-#endif</div><div class='del'>-#ifdef TCP_MAXSEG</div><div class='del'>-    sock_define_const("TCP_MAXSEG", TCP_MAXSEG);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef EAI_ADDRFAMILY</div><div class='del'>-    sock_define_const("EAI_ADDRFAMILY", EAI_ADDRFAMILY);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_AGAIN</div><div class='del'>-    sock_define_const("EAI_AGAIN", EAI_AGAIN);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_BADFLAGS</div><div class='del'>-    sock_define_const("EAI_BADFLAGS", EAI_BADFLAGS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_FAIL</div><div class='del'>-    sock_define_const("EAI_FAIL", EAI_FAIL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_FAMILY</div><div class='del'>-    sock_define_const("EAI_FAMILY", EAI_FAMILY);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_MEMORY</div><div class='del'>-    sock_define_const("EAI_MEMORY", EAI_MEMORY);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_NODATA</div><div class='del'>-    sock_define_const("EAI_NODATA", EAI_NODATA);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_NONAME</div><div class='del'>-    sock_define_const("EAI_NONAME", EAI_NONAME);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_SERVICE</div><div class='del'>-    sock_define_const("EAI_SERVICE", EAI_SERVICE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_SOCKTYPE</div><div class='del'>-    sock_define_const("EAI_SOCKTYPE", EAI_SOCKTYPE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_SYSTEM</div><div class='del'>-    sock_define_const("EAI_SYSTEM", EAI_SYSTEM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_BADHINTS</div><div class='del'>-    sock_define_const("EAI_BADHINTS", EAI_BADHINTS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_PROTOCOL</div><div class='del'>-    sock_define_const("EAI_PROTOCOL", EAI_PROTOCOL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef EAI_MAX</div><div class='del'>-    sock_define_const("EAI_MAX", EAI_MAX);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_PASSIVE</div><div class='del'>-    sock_define_const("AI_PASSIVE", AI_PASSIVE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_CANONNAME</div><div class='del'>-    sock_define_const("AI_CANONNAME", AI_CANONNAME);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_NUMERICHOST</div><div class='del'>-    sock_define_const("AI_NUMERICHOST", AI_NUMERICHOST);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_MASK</div><div class='del'>-    sock_define_const("AI_MASK", AI_MASK);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_ALL</div><div class='del'>-    sock_define_const("AI_ALL", AI_ALL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_V4MAPPED_CFG</div><div class='del'>-    sock_define_const("AI_V4MAPPED_CFG", AI_V4MAPPED_CFG);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_ADDRCONFIG</div><div class='del'>-    sock_define_const("AI_ADDRCONFIG", AI_ADDRCONFIG);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_V4MAPPED</div><div class='del'>-    sock_define_const("AI_V4MAPPED", AI_V4MAPPED);</div><div class='del'>-#endif</div><div class='del'>-#ifdef AI_DEFAULT</div><div class='del'>-    sock_define_const("AI_DEFAULT", AI_DEFAULT);</div><div class='del'>-#endif</div><div class='del'>-#ifdef NI_MAXHOST</div><div class='del'>-    sock_define_const("NI_MAXHOST", NI_MAXHOST);</div><div class='del'>-#endif</div><div class='del'>-#ifdef NI_MAXSERV</div><div class='del'>-    sock_define_const("NI_MAXSERV", NI_MAXSERV);</div><div class='del'>-#endif</div><div class='del'>-#ifdef NI_NOFQDN</div><div class='del'>-    sock_define_const("NI_NOFQDN", NI_NOFQDN);</div><div class='del'>-#endif</div><div class='del'>-#ifdef NI_NUMERICHOST</div><div class='del'>-    sock_define_const("NI_NUMERICHOST", NI_NUMERICHOST);</div><div class='del'>-#endif</div><div class='del'>-#ifdef NI_NAMEREQD</div><div class='del'>-    sock_define_const("NI_NAMEREQD", NI_NAMEREQD);</div><div class='del'>-#endif</div><div class='del'>-#ifdef NI_NUMERICSERV</div><div class='del'>-    sock_define_const("NI_NUMERICSERV", NI_NUMERICSERV);</div><div class='del'>-#endif</div><div class='del'>-#ifdef NI_DGRAM</div><div class='del'>-    sock_define_const("NI_DGRAM", NI_DGRAM);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHUT_RD</div><div class='del'>-    sock_define_const("SHUT_RD", SHUT_RD);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("SHUT_RD", 0);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHUT_WR</div><div class='del'>-    sock_define_const("SHUT_WR", SHUT_WR);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("SHUT_WR", 1);</div><div class='del'>-#endif</div><div class='del'>-#ifdef SHUT_RDWR</div><div class='del'>-    sock_define_const("SHUT_RDWR", SHUT_RDWR);</div><div class='del'>-#else</div><div class='del'>-    sock_define_const("SHUT_RDWR", 2);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='head'>diff --git a/ext/socket/sockport.h b/ext/socket/sockport.h<br/>deleted file mode 100644<br/>index e1cddf53f4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/socket/sockport.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/socket/sockport.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,76 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  sockport.h -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  created at: Fri Apr 30 23:19:34 JST 1999</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#ifndef SOCKPORT_H</div><div class='del'>-#define SOCKPORT_H</div><div class='del'>-</div><div class='del'>-#ifndef SA_LEN</div><div class='del'>-# ifdef HAVE_SA_LEN</div><div class='del'>-#  define SA_LEN(sa) (sa)-&gt;sa_len</div><div class='del'>-# else</div><div class='del'>-#  ifdef INET6</div><div class='del'>-#   define SA_LEN(sa) \</div><div class='del'>-	(((sa)-&gt;sa_family == AF_INET6) ? sizeof(struct sockaddr_in6) \</div><div class='del'>-				       : sizeof(struct sockaddr))</div><div class='del'>-#  else</div><div class='del'>-    /* by tradition, sizeof(struct sockaddr) covers most of the sockaddrs */</div><div class='del'>-#   define SA_LEN(sa)	(sizeof(struct sockaddr))</div><div class='del'>-#  endif</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SA_LEN</div><div class='del'>-# define SET_SA_LEN(sa, len) (sa)-&gt;sa_len = (len)</div><div class='del'>-#else</div><div class='del'>-# define SET_SA_LEN(sa, len) (len)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SIN_LEN</div><div class='del'>-# define SIN_LEN(si) (si)-&gt;sin_len</div><div class='del'>-# define SET_SIN_LEN(si,len) (si)-&gt;sin_len = (len)</div><div class='del'>-#else</div><div class='del'>-# define SIN_LEN(si) sizeof(struct sockaddr_in)</div><div class='del'>-# define SET_SIN_LEN(si,len)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef IN_MULTICAST</div><div class='del'>-# define IN_CLASSD(i)	(((long)(i) &amp; 0xf0000000) == 0xe0000000)</div><div class='del'>-# define IN_MULTICAST(i)	IN_CLASSD(i)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef IN_EXPERIMENTAL</div><div class='del'>-# define IN_EXPERIMENTAL(i) ((((long)(i)) &amp; 0xe0000000) == 0xe0000000)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef IN_CLASSA_NSHIFT</div><div class='del'>-# define IN_CLASSA_NSHIFT 24</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef IN_LOOPBACKNET</div><div class='del'>-# define IN_LOOPBACKNET 127</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef AF_UNSPEC</div><div class='del'>-# define AF_UNSPEC 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef PF_UNSPEC</div><div class='del'>-# define PF_UNSPEC AF_UNSPEC</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef PF_INET</div><div class='del'>-# define PF_INET AF_INET</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(HOST_NOT_FOUND) &amp;&amp; !defined(h_errno) &amp;&amp; !defined(__CYGWIN__)</div><div class='del'>-extern int h_errno;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/stringio/.cvsignore b/ext/stringio/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/stringio/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/stringio/.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/stringio/README b/ext/stringio/README<br/>deleted file mode 100644<br/>index c4031f7e97..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/stringio/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/stringio/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>--*- rd -*-</div><div class='del'>-$Author$</div><div class='del'>-$Date$</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= StringIO</div><div class='del'>-Pseudo (({IO})) class from/to (({String})).</div><div class='del'>-</div><div class='del'>-This library is based on MoonWolf version written in Ruby.  Thanks a lot.</div><div class='del'>-</div><div class='del'>-= Differences to (({IO}))</div><div class='del'>-</div><div class='del'>-* not implemented: (({fcntl})), (({reopen})).</div><div class='del'>-* (({fileno})) returns nil.</div><div class='del'>-* (({pos=})) returns new position, not 0.</div><div class='del'>-* (({ungetc})) does nothing at start of the string. </div><div class='del'>-</div><div class='del'>-=end</div><div class='head'>diff --git a/ext/stringio/depend b/ext/stringio/depend<br/>deleted file mode 100644<br/>index cc9eae3f55..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/stringio/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/stringio/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-stringio.o: stringio.c $(hdrdir)/ruby.h $(topdir)/config.h \</div><div class='del'>-  $(hdrdir)/defines.h $(hdrdir)/intern.h $(hdrdir)/rubyio.h</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/>deleted file mode 100644<br/>index 537fc19a4e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/stringio/stringio.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/stringio/stringio.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1371 +0,0 @@</div><div class='del'>-/**********************************************************************</div><div class='del'>-</div><div class='del'>-  stringio.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  $RoughId: stringio.c,v 1.13 2002/03/14 03:24:18 nobu Exp $</div><div class='del'>-  created at: Tue Feb 19 04:10:38 JST 2002</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'>-#include "re.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='del'>-</div><div class='del'>-#define STRIO_EOF FMODE_SYNC</div><div class='del'>-</div><div class='del'>-struct StringIO {</div><div class='del'>-    VALUE string;</div><div class='del'>-    long pos;</div><div class='del'>-    long lineno;</div><div class='del'>-    int flags;</div><div class='del'>-    int count;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static struct StringIO* strio_alloc _((void));</div><div class='del'>-static void strio_mark _((struct StringIO *));</div><div class='del'>-static void strio_free _((struct StringIO *));</div><div class='del'>-static struct StringIO* check_strio _((VALUE));</div><div class='del'>-static struct StringIO* get_strio _((VALUE));</div><div class='del'>-static struct StringIO* readable _((struct StringIO *));</div><div class='del'>-static struct StringIO* writable _((struct StringIO *));</div><div class='del'>-static void check_modifiable _((struct StringIO *));</div><div class='del'>-</div><div class='del'>-#define IS_STRIO(obj) (RDATA(obj)-&gt;dmark == (RUBY_DATA_FUNC)strio_mark)</div><div class='del'>-#define error_inval(msg) (errno = EINVAL, rb_sys_fail(msg))</div><div class='del'>-</div><div class='del'>-static struct StringIO *</div><div class='del'>-strio_alloc()</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = ALLOC(struct StringIO);</div><div class='del'>-    ptr-&gt;string = Qnil;</div><div class='del'>-    ptr-&gt;pos = 0;</div><div class='del'>-    ptr-&gt;lineno = 0;</div><div class='del'>-    ptr-&gt;flags = 0;</div><div class='del'>-    ptr-&gt;count = 1;</div><div class='del'>-    return ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-strio_mark(ptr)</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-{</div><div class='del'>-    if (ptr) {</div><div class='del'>-	rb_gc_mark(ptr-&gt;string);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-strio_free(ptr)</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-{</div><div class='del'>-    if (--ptr-&gt;count &lt;= 0) {</div><div class='del'>-	xfree(ptr);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct StringIO*</div><div class='del'>-check_strio(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    Check_Type(self, T_DATA);</div><div class='del'>-    if (!IS_STRIO(self)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "wrong argument type %s (expected StringIO)",</div><div class='del'>-		 rb_class2name(CLASS_OF(self)));</div><div class='del'>-    }</div><div class='del'>-    return DATA_PTR(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct StringIO*</div><div class='del'>-get_strio(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = check_strio(self);</div><div class='del'>-</div><div class='del'>-    if (!ptr) {</div><div class='del'>-	rb_raise(rb_eIOError, "uninitialized stream");</div><div class='del'>-    }</div><div class='del'>-    return ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define StringIO(obj) get_strio(obj)</div><div class='del'>-</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='del'>-</div><div class='del'>-static struct StringIO*</div><div class='del'>-readable(ptr)</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-{</div><div class='del'>-    if (!READABLE(ptr)) {</div><div class='del'>-	rb_raise(rb_eIOError, "not opened for reading");</div><div class='del'>-    }</div><div class='del'>-    return ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct StringIO*</div><div class='del'>-writable(ptr)</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-{</div><div class='del'>-    if (!WRITABLE(ptr)) {</div><div class='del'>-	rb_raise(rb_eIOError, "not opened for writing");</div><div class='del'>-    }</div><div class='del'>-    if (!OBJ_TAINTED(ptr-&gt;string)) {</div><div class='del'>-	rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-    return ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-check_modifiable(ptr)</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-{</div><div class='del'>-    if (OBJ_FROZEN(ptr-&gt;string)) {</div><div class='del'>-	rb_raise(rb_eIOError, "not modifiable string");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE strio_s_allocate _((VALUE));</div><div class='del'>-static VALUE strio_s_open _((int, VALUE *, VALUE));</div><div class='del'>-static void strio_init _((int, VALUE *, struct StringIO *));</div><div class='del'>-static VALUE strio_initialize _((int, VALUE *, VALUE));</div><div class='del'>-static VALUE strio_finalize _((VALUE));</div><div class='del'>-static VALUE strio_self _((VALUE));</div><div class='del'>-static VALUE strio_false _((VALUE));</div><div class='del'>-static VALUE strio_nil _((VALUE));</div><div class='del'>-static VALUE strio_0 _((VALUE));</div><div class='del'>-static VALUE strio_first _((VALUE, VALUE));</div><div class='del'>-static VALUE strio_unimpl _((int, VALUE *, VALUE));</div><div class='del'>-static VALUE strio_get_string _((VALUE));</div><div class='del'>-static VALUE strio_set_string _((VALUE, VALUE));</div><div class='del'>-static VALUE strio_close _((VALUE));</div><div class='del'>-static VALUE strio_close_read _((VALUE));</div><div class='del'>-static VALUE strio_close_write _((VALUE));</div><div class='del'>-static VALUE strio_closed _((VALUE));</div><div class='del'>-static VALUE strio_closed_read _((VALUE));</div><div class='del'>-static VALUE strio_closed_write _((VALUE));</div><div class='del'>-static VALUE strio_eof _((VALUE));</div><div class='del'>-static VALUE strio_get_lineno _((VALUE));</div><div class='del'>-static VALUE strio_set_lineno _((VALUE, VALUE));</div><div class='del'>-static VALUE strio_get_pos _((VALUE));</div><div class='del'>-static VALUE strio_set_pos _((VALUE, VALUE));</div><div class='del'>-static VALUE strio_rewind _((VALUE));</div><div class='del'>-static VALUE strio_seek _((int, VALUE *, VALUE));</div><div class='del'>-static VALUE strio_get_sync _((VALUE));</div><div class='del'>-static VALUE strio_each_byte _((VALUE));</div><div class='del'>-static VALUE strio_each_char _((VALUE));</div><div class='del'>-static VALUE strio_getc _((VALUE));</div><div class='del'>-static VALUE strio_ungetc _((VALUE, VALUE));</div><div class='del'>-static VALUE strio_readchar _((VALUE));</div><div class='del'>-static VALUE strio_getline _((int, VALUE *, struct StringIO *));</div><div class='del'>-static VALUE strio_gets _((int, VALUE *, VALUE));</div><div class='del'>-static VALUE strio_readline _((int, VALUE *, VALUE));</div><div class='del'>-static VALUE strio_each _((int, VALUE *, VALUE));</div><div class='del'>-static VALUE strio_readlines _((int, VALUE *, VALUE));</div><div class='del'>-static VALUE strio_write _((VALUE, VALUE));</div><div class='del'>-static VALUE strio_putc _((VALUE, VALUE));</div><div class='del'>-static VALUE strio_read _((int, VALUE *, VALUE));</div><div class='del'>-static VALUE strio_size _((VALUE));</div><div class='del'>-static VALUE strio_truncate _((VALUE, VALUE));</div><div class='del'>-void Init_stringio _((void));</div><div class='del'>-</div><div class='del'>-/* Boyer-Moore search: copied from regex.c */</div><div class='del'>-static void bm_init_skip _((long *, const char *, long));</div><div class='del'>-static long bm_search _((const char *, long, const char *, long, const long *));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-strio_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return Data_Wrap_Struct(klass, strio_mark, strio_free, 0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = rb_class_new_instance(argc, argv, klass);</div><div class='del'>-    if (!rb_block_given_p()) return obj;</div><div class='del'>-    return rb_ensure(rb_yield, obj, strio_finalize, obj);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_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'>-    struct StringIO *ptr = check_strio(self);</div><div class='del'>-</div><div class='del'>-    if (!ptr) {</div><div class='del'>-	DATA_PTR(self) = ptr = strio_alloc();</div><div class='del'>-    }</div><div class='del'>-    rb_call_super(0, 0);</div><div class='del'>-    strio_init(argc, argv, ptr);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-strio_init(argc, argv, ptr)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-{</div><div class='del'>-    VALUE string, mode;</div><div class='del'>-    int trunc = Qfalse;</div><div class='del'>-</div><div class='del'>-    switch (rb_scan_args(argc, argv, "02", &amp;string, &amp;mode)) {</div><div class='del'>-      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='del'>-	StringValue(string);</div><div class='del'>-	if ((ptr-&gt;flags &amp; FMODE_WRITABLE) &amp;&amp; OBJ_FROZEN(string)) {</div><div class='del'>-	    errno = EACCES;</div><div class='del'>-	    rb_sys_fail(0);</div><div class='del'>-	}</div><div class='del'>-	if (trunc) {</div><div class='del'>-	    rb_str_resize(string, 0);</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-      case 1:</div><div class='del'>-	StringValue(string);</div><div class='del'>-	ptr-&gt;flags = OBJ_FROZEN(string) ? FMODE_READABLE : FMODE_READWRITE;</div><div class='del'>-	break;</div><div class='del'>-      case 0:</div><div class='del'>-	string = rb_str_new("", 0);</div><div class='del'>-	ptr-&gt;flags = FMODE_READWRITE;</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    ptr-&gt;string = string;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-strio_finalize(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    ptr-&gt;string = Qnil;</div><div class='del'>-    ptr-&gt;flags &amp;= ~FMODE_READWRITE;</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns +false+.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strio_false(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    StringIO(self);</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns +nil+.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strio_nil(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    StringIO(self);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns *strio* itself.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strio_self(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    StringIO(self);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns 0.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strio_0(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    StringIO(self);</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the argument unchanged.  Just for compatibility to IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strio_first(self, arg)</div><div class='del'>-    VALUE self, arg;</div><div class='del'>-{</div><div class='del'>-    StringIO(self);</div><div class='del'>-    return arg;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Raises NotImplementedError.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strio_unimpl(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'>-    StringIO(self);</div><div class='del'>-    rb_notimplement();</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_get_string(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return StringIO(self)-&gt;string;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_set_string(self, string)</div><div class='del'>-    VALUE self, string;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-</div><div class='del'>-    if (!OBJ_TAINTED(self)) rb_secure(4);</div><div class='del'>-    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='del'>-    ptr-&gt;pos = 0;</div><div class='del'>-    ptr-&gt;lineno = 0;</div><div class='del'>-    return ptr-&gt;string = string;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_close(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    if (CLOSED(ptr)) {</div><div class='del'>-	rb_raise(rb_eIOError, "closed stream");</div><div class='del'>-    }</div><div class='del'>-    ptr-&gt;flags &amp;= ~FMODE_READWRITE;</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'>- *   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='del'>-static VALUE</div><div class='del'>-strio_close_read(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    if (!READABLE(ptr)) {</div><div class='del'>-	rb_raise(rb_eIOError, "closing non-duplex IO for reading");</div><div class='del'>-    }</div><div class='del'>-    ptr-&gt;flags &amp;= ~FMODE_READABLE;</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'>- *   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='del'>-static VALUE</div><div class='del'>-strio_close_write(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    if (!WRITABLE(ptr)) {</div><div class='del'>-	rb_raise(rb_eIOError, "closing non-duplex IO for writing");</div><div class='del'>-    }</div><div class='del'>-    ptr-&gt;flags &amp;= ~FMODE_WRITABLE;</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'>- *   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='del'>-static VALUE</div><div class='del'>-strio_closed(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    if (!CLOSED(ptr)) return Qfalse;</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'>- *   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='del'>-static VALUE</div><div class='del'>-strio_closed_read(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    if (READABLE(ptr)) return Qfalse;</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'>- *   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='del'>-static VALUE</div><div class='del'>-strio_closed_write(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    if (WRITABLE(ptr)) return Qfalse;</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'>- *   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='del'>-static VALUE</div><div class='del'>-strio_eof(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = readable(StringIO(self));</div><div class='del'>-    if (ptr-&gt;pos &lt; RSTRING(ptr-&gt;string)-&gt;len) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-strio_copy(copy, orig)</div><div class='del'>-    VALUE copy, orig;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-</div><div class='del'>-    orig = rb_convert_type(orig, T_DATA, "StringIO", "to_strio");</div><div class='del'>-    if (copy == orig) return copy;</div><div class='del'>-    ptr = StringIO(orig);</div><div class='del'>-    if (check_strio(copy)) {</div><div class='del'>-	strio_free(DATA_PTR(copy));</div><div class='del'>-    }</div><div class='del'>-    DATA_PTR(copy) = ptr;</div><div class='del'>-    OBJ_INFECT(copy, orig);</div><div class='del'>-    ++ptr-&gt;count;</div><div class='del'>-    return copy;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_get_lineno(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return LONG2NUM(StringIO(self)-&gt;lineno);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_set_lineno(self, lineno)</div><div class='del'>-    VALUE self, lineno;</div><div class='del'>-{</div><div class='del'>-    StringIO(self)-&gt;lineno = NUM2LONG(lineno);</div><div class='del'>-    return lineno;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq: strio.binmode -&gt; true */</div><div class='del'>-#define strio_binmode strio_self</div><div class='del'>-</div><div class='del'>-/* call-seq: strio.fcntl */</div><div class='del'>-#define strio_fcntl strio_unimpl</div><div class='del'>-</div><div class='del'>-/* call-seq: strio.flush -&gt; strio */</div><div class='del'>-#define strio_flush strio_self</div><div class='del'>-</div><div class='del'>-/* call-seq: strio.fsync -&gt; 0 */</div><div class='del'>-#define strio_fsync strio_0</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_reopen(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 (!OBJ_TAINTED(self)) rb_secure(4);</div><div class='del'>-    if (argc == 1 &amp;&amp; TYPE(*argv) != T_STRING) {</div><div class='del'>-	return strio_copy(self, *argv);</div><div class='del'>-    }</div><div class='del'>-    strio_init(argc, argv, StringIO(self));</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'>- *   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='del'>-static VALUE</div><div class='del'>-strio_get_pos(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return LONG2NUM(StringIO(self)-&gt;pos);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_set_pos(self, pos)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE pos;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    long p = NUM2LONG(pos);</div><div class='del'>-    if (p &lt; 0) {</div><div class='del'>-	error_inval(0);</div><div class='del'>-    }</div><div class='del'>-    ptr-&gt;pos = p;</div><div class='del'>-    ptr-&gt;flags &amp;= ~STRIO_EOF;</div><div class='del'>-    return pos;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_rewind(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    ptr-&gt;pos = 0;</div><div class='del'>-    ptr-&gt;lineno = 0;</div><div class='del'>-    ptr-&gt;flags &amp;= ~STRIO_EOF;</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_seek(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 whence;</div><div class='del'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    long offset;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", NULL, &amp;whence);</div><div class='del'>-    offset = NUM2LONG(argv[0]);</div><div class='del'>-    if (CLOSED(ptr)) {</div><div class='del'>-	rb_raise(rb_eIOError, "closed stream");</div><div class='del'>-    }</div><div class='del'>-    switch (NIL_P(whence) ? 0 : NUM2LONG(whence)) {</div><div class='del'>-      case 0:</div><div class='del'>-	break;</div><div class='del'>-      case 1:</div><div class='del'>-	offset += ptr-&gt;pos;</div><div class='del'>-	break;</div><div class='del'>-      case 2:</div><div class='del'>-	offset += RSTRING(ptr-&gt;string)-&gt;len;</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-	error_inval("invalid whence");</div><div class='del'>-    }</div><div class='del'>-    if (offset &lt; 0) {</div><div class='del'>-	error_inval(0);</div><div class='del'>-    }</div><div class='del'>-    ptr-&gt;pos = offset;</div><div class='del'>-    ptr-&gt;flags &amp;= ~STRIO_EOF;</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_get_sync(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    StringIO(self);</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call-seq: strio.sync = boolean -&gt; boolean */</div><div class='del'>-#define strio_set_sync strio_first</div><div class='del'>-</div><div class='del'>-#define strio_tell strio_get_pos</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_each_byte(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = readable(StringIO(self));</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(self, 0, 0);</div><div class='del'>-</div><div class='del'>-    while (ptr-&gt;pos &lt; RSTRING_LEN(ptr-&gt;string)) {</div><div class='del'>-	char c = RSTRING_PTR(ptr-&gt;string)[ptr-&gt;pos++];</div><div class='del'>-	rb_yield(CHR2FIX(c));</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'>- * 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='del'>-static VALUE</div><div class='del'>-strio_getc(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = readable(StringIO(self));</div><div class='del'>-    int c;</div><div class='del'>-    if (ptr-&gt;pos &gt;= 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='del'>-    c = RSTRING(ptr-&gt;string)-&gt;ptr[ptr-&gt;pos++];</div><div class='del'>-    return CHR2FIX(c);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_ungetc(self, ch)</div><div class='del'>-    VALUE self, ch;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = readable(StringIO(self));</div><div class='del'>-    int cc = NUM2INT(ch);</div><div class='del'>-    long len, pos = ptr-&gt;pos;</div><div class='del'>-</div><div class='del'>-    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='del'>-	    (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='del'>-	}</div><div class='del'>-	--ptr-&gt;pos;</div><div class='del'>-	ptr-&gt;flags &amp;= ~STRIO_EOF;</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'>- *   strio.readchar   -&gt; fixnum</div><div class='del'>- *</div><div class='del'>- * See IO#readchar.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strio_readchar(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE c = strio_getc(self);</div><div class='del'>-    if (NIL_P(c)) rb_eof_error();</div><div class='del'>-    return c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   strio.each_char {|char| block }  -&gt; strio</div><div class='del'>- *</div><div class='del'>- * See IO#each_char.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strio_each_char(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *sio;</div><div class='del'>-    VALUE str;</div><div class='del'>-    const char *ptr;</div><div class='del'>-    size_t len;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(self, 0, 0);</div><div class='del'>-</div><div class='del'>-    sio = readable(StringIO(self));</div><div class='del'>-    str = sio-&gt;string;</div><div class='del'>-    ptr = RSTRING_PTR(str);</div><div class='del'>-    len = RSTRING_LEN(str);</div><div class='del'>-</div><div class='del'>-    while (sio-&gt;pos &lt; len) {</div><div class='del'>-	int pos = sio-&gt;pos;</div><div class='del'>-	char c = ptr[pos];</div><div class='del'>-        int n = mbclen(c);</div><div class='del'>-</div><div class='del'>-	if (len &lt; pos + n) n = len - pos;</div><div class='del'>-</div><div class='del'>-	sio-&gt;pos += n;</div><div class='del'>-        rb_yield(rb_str_substr(str, pos, n));</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'>-bm_init_skip(skip, pat, m)</div><div class='del'>-     long *skip;</div><div class='del'>-     const char *pat;</div><div class='del'>-     long m;</div><div class='del'>-{</div><div class='del'>-    int c;</div><div class='del'>-</div><div class='del'>-    for (c = 0; c &lt; (1 &lt;&lt; CHAR_BIT); c++) {</div><div class='del'>-	skip[c] = m;</div><div class='del'>-    }</div><div class='del'>-    while (--m) {</div><div class='del'>-	skip[(unsigned char)*pat++] = m;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static long</div><div class='del'>-bm_search(little, llen, big, blen, skip)</div><div class='del'>-    const char *little;</div><div class='del'>-    long llen;</div><div class='del'>-    const char *big;</div><div class='del'>-    long blen;</div><div class='del'>-    const long *skip;</div><div class='del'>-{</div><div class='del'>-    long i, j, k;</div><div class='del'>-</div><div class='del'>-    i = llen - 1;</div><div class='del'>-    while (i &lt; blen) {</div><div class='del'>-	k = i;</div><div class='del'>-	j = llen - 1;</div><div class='del'>-	while (j &gt;= 0 &amp;&amp; big[k] == little[j]) {</div><div class='del'>-	    k--;</div><div class='del'>-	    j--;</div><div class='del'>-	}</div><div class='del'>-	if (j &lt; 0) return k + 1;</div><div class='del'>-	i += skip[(unsigned char)big[i]];</div><div class='del'>-    }</div><div class='del'>-    return -1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-strio_getline(argc, argv, ptr)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    struct StringIO *ptr;</div><div class='del'>-{</div><div class='del'>-    const char *s, *e, *p;</div><div class='del'>-    long n;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	str = rb_rs;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "1", &amp;str);</div><div class='del'>-	if (!NIL_P(str)) StringValue(str);</div><div class='del'>-    }</div><div class='del'>-</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='del'>-    s = RSTRING(ptr-&gt;string)-&gt;ptr;</div><div class='del'>-    e = s + RSTRING(ptr-&gt;string)-&gt;len;</div><div class='del'>-    s += ptr-&gt;pos;</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-	str = rb_str_substr(ptr-&gt;string, ptr-&gt;pos, e - s);</div><div class='del'>-    }</div><div class='del'>-    else if ((n = RSTRING(str)-&gt;len) == 0) {</div><div class='del'>-	p = s;</div><div class='del'>-	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='del'>-	}</div><div class='del'>-	s = p;</div><div class='del'>-	while ((p = memchr(p, '\n', e - p)) &amp;&amp; (p != e)) {</div><div class='del'>-	    if (*++p == '\n') {</div><div class='del'>-		e = p;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	str = rb_str_substr(ptr-&gt;string, s - RSTRING(ptr-&gt;string)-&gt;ptr, e - s); </div><div class='del'>-    }</div><div class='del'>-    else if (n == 1) {</div><div class='del'>-	if ((p = memchr(s, RSTRING(str)-&gt;ptr[0], e - s)) != 0) {</div><div class='del'>-	    e = p + 1;</div><div class='del'>-	}</div><div class='del'>-	str = rb_str_substr(ptr-&gt;string, ptr-&gt;pos, e - s);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (n &lt; e - s) {</div><div class='del'>-	    if (e - s &lt; 1024) {</div><div class='del'>-		for (p = s; p + n &lt;= e; ++p) {</div><div class='del'>-		    if (MEMCMP(p, RSTRING(str)-&gt;ptr, char, n) == 0) {</div><div class='del'>-			e = p + n;</div><div class='del'>-			break;</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		long skip[1 &lt;&lt; CHAR_BIT], pos;</div><div class='del'>-		p = RSTRING(str)-&gt;ptr;</div><div class='del'>-		bm_init_skip(skip, p, n);</div><div class='del'>-		if ((pos = bm_search(p, n, s, e - s, skip)) &gt;= 0) {</div><div class='del'>-		    e = s + pos + n;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	str = rb_str_substr(ptr-&gt;string, ptr-&gt;pos, e - s);</div><div class='del'>-    }</div><div class='del'>-    ptr-&gt;pos = e - RSTRING(ptr-&gt;string)-&gt;ptr;</div><div class='del'>-    ptr-&gt;lineno++;</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_gets(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 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='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_readline(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 line = strio_gets(argc, argv, self);</div><div class='del'>-    if (NIL_P(line)) rb_eof_error();</div><div class='del'>-    return line;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_each(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'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    VALUE line;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(self, argc, argv);</div><div class='del'>-</div><div class='del'>-    while (!NIL_P(line = strio_getline(argc, argv, readable(ptr)))) {</div><div class='del'>-	rb_yield(line);</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'>- * 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='del'>-static VALUE</div><div class='del'>-strio_readlines(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'>-    struct StringIO *ptr = StringIO(self);</div><div class='del'>-    VALUE ary = rb_ary_new(), line;</div><div class='del'>-    while (!NIL_P(line = strio_getline(argc, argv, readable(ptr)))) {</div><div class='del'>-	rb_ary_push(ary, line);</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'>- * 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='del'>-static VALUE</div><div class='del'>-strio_write(self, str)</div><div class='del'>-    VALUE self, str;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = writable(StringIO(self));</div><div class='del'>-    long len, olen;</div><div class='del'>-</div><div class='del'>-    if (TYPE(str) != T_STRING)</div><div class='del'>-	str = rb_obj_as_string(str);</div><div class='del'>-    len = RSTRING(str)-&gt;len;</div><div class='del'>-    if (!len) return INT2FIX(0);</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    if (ptr-&gt;pos == olen) {</div><div class='del'>-	rb_str_cat(ptr-&gt;string, RSTRING(str)-&gt;ptr, len);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	strio_extend(ptr, ptr-&gt;pos, len);</div><div class='del'>-	rb_str_update(ptr-&gt;string, ptr-&gt;pos, len, str);</div><div class='del'>-    }</div><div class='del'>-    OBJ_INFECT(ptr-&gt;string, self);</div><div class='del'>-    ptr-&gt;pos += len;</div><div class='del'>-    return LONG2NUM(len);</div><div class='del'>-}</div><div class='del'>-</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='del'>-#define strio_addstr rb_io_addstr</div><div class='del'>-</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='del'>-#define strio_print rb_io_print</div><div class='del'>-</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='del'>-#define strio_printf rb_io_printf</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_putc(self, ch)</div><div class='del'>-    VALUE self, ch;</div><div class='del'>-{</div><div class='del'>-    struct StringIO *ptr = writable(StringIO(self));</div><div class='del'>-    int c = NUM2CHR(ch);</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 (ptr-&gt;flags &amp; FMODE_APPEND) {</div><div class='del'>-	ptr-&gt;pos = olen;</div><div class='del'>-    }</div><div class='del'>-    strio_extend(ptr, ptr-&gt;pos, 1);</div><div class='del'>-    RSTRING(ptr-&gt;string)-&gt;ptr[ptr-&gt;pos++] = c;</div><div class='del'>-    OBJ_INFECT(ptr-&gt;string, self);</div><div class='del'>-    return ch;</div><div class='del'>-}</div><div class='del'>-</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='del'>-#define strio_puts rb_io_puts</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_read(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'>-    struct StringIO *ptr = readable(StringIO(self));</div><div class='del'>-    VALUE str = Qnil;</div><div class='del'>-    long len, olen;</div><div class='del'>-</div><div class='del'>-    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='del'>-      case 1:</div><div class='del'>-	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='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	/* fall through */</div><div class='del'>-      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='del'>-	break;</div><div class='del'>-      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='del'>-    }</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='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_sysread(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 val = strio_read(argc, argv, self);</div><div class='del'>-    if (NIL_P(val) || RSTRING(val)-&gt;len == 0) {</div><div class='del'>-	rb_eof_error();</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define strio_syswrite strio_write</div><div class='del'>-</div><div class='del'>-/* call-seq: strio.path -&gt; nil */</div><div class='del'>-#define strio_path strio_nil</div><div class='del'>-</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='del'>-#define strio_isatty strio_false</div><div class='del'>-</div><div class='del'>-/* call-seq: strio.pid -&gt; nil */</div><div class='del'>-#define strio_pid strio_nil</div><div class='del'>-</div><div class='del'>-/* call-seq: strio.fileno -&gt; nil */</div><div class='del'>-#define strio_fileno strio_nil</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_size(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE string = StringIO(self)-&gt;string;</div><div class='del'>-    if (NIL_P(string)) {</div><div class='del'>-	rb_raise(rb_eIOError, "not opened");</div><div class='del'>-    }</div><div class='del'>-    return ULONG2NUM(RSTRING(string)-&gt;len);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strio_truncate(self, len)</div><div class='del'>-    VALUE self, len;</div><div class='del'>-{</div><div class='del'>-    VALUE string = writable(StringIO(self))-&gt;string;</div><div class='del'>-    long l = NUM2LONG(len);</div><div class='del'>-    long plen = RSTRING(string)-&gt;len;</div><div class='del'>-    if (l &lt; 0) {</div><div class='del'>-	error_inval("negative legnth");</div><div class='del'>-    }</div><div class='del'>-    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='del'>-    return len;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Pseudo I/O on String object.</div><div class='del'>- */</div><div class='del'>-void</div><div class='del'>-Init_stringio()</div><div class='del'>-{</div><div class='del'>-    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='del'>-    rb_define_alloc_func(StringIO, strio_s_allocate);</div><div class='del'>-    rb_define_singleton_method(StringIO, "open", strio_s_open, -1);</div><div class='del'>-    rb_define_method(StringIO, "initialize", strio_initialize, -1);</div><div class='del'>-    rb_define_method(StringIO, "initialize_copy", strio_copy, 1);</div><div class='del'>-    rb_define_method(StringIO, "reopen", strio_reopen, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringIO, "string", strio_get_string, 0);</div><div class='del'>-    rb_define_method(StringIO, "string=", strio_set_string, 1);</div><div class='del'>-    rb_define_method(StringIO, "lineno", strio_get_lineno, 0);</div><div class='del'>-    rb_define_method(StringIO, "lineno=", strio_set_lineno, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringIO, "binmode", strio_binmode, 0);</div><div class='del'>-    rb_define_method(StringIO, "close", strio_close, 0);</div><div class='del'>-    rb_define_method(StringIO, "close_read", strio_close_read, 0);</div><div class='del'>-    rb_define_method(StringIO, "close_write", strio_close_write, 0);</div><div class='del'>-    rb_define_method(StringIO, "closed?", strio_closed, 0);</div><div class='del'>-    rb_define_method(StringIO, "closed_read?", strio_closed_read, 0);</div><div class='del'>-    rb_define_method(StringIO, "closed_write?", strio_closed_write, 0);</div><div class='del'>-    rb_define_method(StringIO, "eof", strio_eof, 0);</div><div class='del'>-    rb_define_method(StringIO, "eof?", strio_eof, 0);</div><div class='del'>-    rb_define_method(StringIO, "fcntl", strio_fcntl, -1);</div><div class='del'>-    rb_define_method(StringIO, "flush", strio_flush, 0);</div><div class='del'>-    rb_define_method(StringIO, "fsync", strio_fsync, 0);</div><div class='del'>-    rb_define_method(StringIO, "pos", strio_get_pos, 0);</div><div class='del'>-    rb_define_method(StringIO, "pos=", strio_set_pos, 1);</div><div class='del'>-    rb_define_method(StringIO, "rewind", strio_rewind, 0);</div><div class='del'>-    rb_define_method(StringIO, "seek", strio_seek, -1);</div><div class='del'>-    rb_define_method(StringIO, "sync", strio_get_sync, 0);</div><div class='del'>-    rb_define_method(StringIO, "sync=", strio_set_sync, 1);</div><div class='del'>-    rb_define_method(StringIO, "tell", strio_tell, 0);</div><div class='del'>-    rb_define_method(StringIO, "path", strio_path, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringIO, "each", strio_each, -1);</div><div class='del'>-    rb_define_method(StringIO, "each_line", strio_each, -1);</div><div class='del'>-    rb_define_method(StringIO, "lines", strio_each, -1);</div><div class='del'>-    rb_define_method(StringIO, "each_byte", strio_each_byte, 0);</div><div class='del'>-    rb_define_method(StringIO, "bytes", strio_each_byte, 0);</div><div class='del'>-    rb_define_method(StringIO, "each_char", strio_each_char, 0);</div><div class='del'>-    rb_define_method(StringIO, "chars", strio_each_char, 0);</div><div class='del'>-    rb_define_method(StringIO, "getc", strio_getc, 0);</div><div class='del'>-    rb_define_method(StringIO, "getbyte", strio_getc, 0);</div><div class='del'>-    rb_define_method(StringIO, "ungetc", strio_ungetc, 1);</div><div class='del'>-    rb_define_method(StringIO, "readchar", strio_readchar, 0);</div><div class='del'>-    rb_define_method(StringIO, "readbyte", strio_readchar, 0);</div><div class='del'>-    rb_define_method(StringIO, "gets", strio_gets, -1);</div><div class='del'>-    rb_define_method(StringIO, "readline", strio_readline, -1);</div><div class='del'>-    rb_define_method(StringIO, "readlines", strio_readlines, -1);</div><div class='del'>-    rb_define_method(StringIO, "read", strio_read, -1);</div><div class='del'>-    rb_define_method(StringIO, "sysread", strio_sysread, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringIO, "write", strio_write, 1);</div><div class='del'>-    rb_define_method(StringIO, "&lt;&lt;", strio_addstr, 1);</div><div class='del'>-    rb_define_method(StringIO, "print", strio_print, -1);</div><div class='del'>-    rb_define_method(StringIO, "printf", strio_printf, -1);</div><div class='del'>-    rb_define_method(StringIO, "putc", strio_putc, 1);</div><div class='del'>-    rb_define_method(StringIO, "puts", strio_puts, -1);</div><div class='del'>-    rb_define_method(StringIO, "syswrite", strio_syswrite, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringIO, "isatty", strio_isatty, 0);</div><div class='del'>-    rb_define_method(StringIO, "tty?", strio_isatty, 0);</div><div class='del'>-    rb_define_method(StringIO, "pid", strio_pid, 0);</div><div class='del'>-    rb_define_method(StringIO, "fileno", strio_fileno, 0);</div><div class='del'>-    rb_define_method(StringIO, "size", strio_size, 0);</div><div class='del'>-    rb_define_method(StringIO, "length", strio_size, 0);</div><div class='del'>-    rb_define_method(StringIO, "truncate", strio_truncate, 1);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/strscan/.cvsignore b/ext/strscan/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/strscan/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/strscan/.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/strscan/depend b/ext/strscan/depend<br/>deleted file mode 100644<br/>index 9199574c3f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/strscan/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/strscan/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-strscan.o: strscan.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/strscan/extconf.rb b/ext/strscan/extconf.rb<br/>deleted file mode 100644<br/>index 0d21966fc2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/strscan/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/strscan/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 'strscan'</div><div class='head'>diff --git a/ext/strscan/strscan.c b/ext/strscan/strscan.c<br/>deleted file mode 100644<br/>index b5ee20282c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/strscan/strscan.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/strscan/strscan.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1320 +0,0 @@</div><div class='del'>-/*</div><div class='del'>-    $Id$</div><div class='del'>-</div><div class='del'>-    Copyright (c) 1999-2006 Minero Aoki</div><div class='del'>-</div><div class='del'>-    This program is free software.</div><div class='del'>-    You can distribute/modify this program under the terms of</div><div class='del'>-    the Ruby License. For details, see the file COPYING.</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "re.h"</div><div class='del'>-</div><div class='del'>-#define STRSCAN_VERSION "0.7.0"</div><div class='del'>-</div><div class='del'>-/* =======================================================================</div><div class='del'>-                         Data Type Definitions</div><div class='del'>-   ======================================================================= */</div><div class='del'>-</div><div class='del'>-static VALUE StringScanner;</div><div class='del'>-static VALUE ScanError;</div><div class='del'>-</div><div class='del'>-struct strscanner</div><div class='del'>-{</div><div class='del'>-    /* multi-purpose flags */</div><div class='del'>-    unsigned long flags;</div><div class='del'>-#define FLAG_MATCHED (1 &lt;&lt; 0)</div><div class='del'>-</div><div class='del'>-    /* the string to scan */</div><div class='del'>-    VALUE str;</div><div class='del'>-    </div><div class='del'>-    /* scan pointers */</div><div class='del'>-    long prev;   /* legal only when MATCHED_P(s) */</div><div class='del'>-    long curr;   /* always legal */</div><div class='del'>-</div><div class='del'>-    /* the regexp register; legal only when MATCHED_P(s) */</div><div class='del'>-    struct re_registers regs;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define MATCHED_P(s)          ((s)-&gt;flags &amp; FLAG_MATCHED)</div><div class='del'>-#define MATCHED(s)             (s)-&gt;flags |= FLAG_MATCHED</div><div class='del'>-#define CLEAR_MATCH_STATUS(s)  (s)-&gt;flags &amp;= ~FLAG_MATCHED</div><div class='del'>-</div><div class='del'>-#define S_PBEG(s)  (RSTRING((s)-&gt;str)-&gt;ptr)</div><div class='del'>-#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='del'>-#define S_RESTLEN(s) (S_LEN(s) - (s)-&gt;curr)</div><div class='del'>-</div><div class='del'>-#define EOS_P(s) ((s)-&gt;curr &gt;= RSTRING(p-&gt;str)-&gt;len)</div><div class='del'>-</div><div class='del'>-#define GET_SCANNER(obj,var) do {\</div><div class='del'>-    Data_Get_Struct(obj, struct strscanner, var);\</div><div class='del'>-    if (NIL_P(var-&gt;str)) rb_raise(rb_eArgError, "uninitialized StringScanner object");\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-/* =======================================================================</div><div class='del'>-                            Function Prototypes</div><div class='del'>-   ======================================================================= */</div><div class='del'>-</div><div class='del'>-static VALUE infect _((VALUE str, struct strscanner *p));</div><div class='del'>-static VALUE extract_range _((struct strscanner *p, long beg_i, long end_i));</div><div class='del'>-static VALUE extract_beg_len _((struct strscanner *p, long beg_i, long len));</div><div class='del'>-</div><div class='del'>-static void check_strscan _((VALUE obj));</div><div class='del'>-static void strscan_mark _((struct strscanner *p));</div><div class='del'>-static void strscan_free _((struct strscanner *p));</div><div class='del'>-static VALUE strscan_s_allocate _((VALUE klass));</div><div class='del'>-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='del'>-</div><div class='del'>-static VALUE strscan_s_mustc _((VALUE self));</div><div class='del'>-static VALUE strscan_terminate _((VALUE self));</div><div class='del'>-static VALUE strscan_clear _((VALUE self));</div><div class='del'>-static VALUE strscan_get_string _((VALUE self));</div><div class='del'>-static VALUE strscan_set_string _((VALUE self, VALUE str));</div><div class='del'>-static VALUE strscan_concat _((VALUE self, VALUE str));</div><div class='del'>-static VALUE strscan_get_pos _((VALUE self));</div><div class='del'>-static VALUE strscan_set_pos _((VALUE self, VALUE pos));</div><div class='del'>-static VALUE strscan_do_scan _((VALUE self, VALUE regex,</div><div class='del'>-                                int succptr, int getstr, int headonly));</div><div class='del'>-static VALUE strscan_scan _((VALUE self, VALUE re));</div><div class='del'>-static VALUE strscan_match_p _((VALUE self, VALUE re));</div><div class='del'>-static VALUE strscan_skip _((VALUE self, VALUE re));</div><div class='del'>-static VALUE strscan_check _((VALUE self, VALUE re));</div><div class='del'>-static VALUE strscan_scan_full _((VALUE self, VALUE re,</div><div class='del'>-                                  VALUE succp, VALUE getp));</div><div class='del'>-static VALUE strscan_scan_until _((VALUE self, VALUE re));</div><div class='del'>-static VALUE strscan_skip_until _((VALUE self, VALUE re));</div><div class='del'>-static VALUE strscan_check_until _((VALUE self, VALUE re));</div><div class='del'>-static VALUE strscan_search_full _((VALUE self, VALUE re,</div><div class='del'>-                                    VALUE succp, VALUE getp));</div><div class='del'>-static void adjust_registers_to_matched _((struct strscanner *p));</div><div class='del'>-static VALUE strscan_getch _((VALUE self));</div><div class='del'>-static VALUE strscan_get_byte _((VALUE self));</div><div class='del'>-static VALUE strscan_getbyte _((VALUE self));</div><div class='del'>-static VALUE strscan_peek _((VALUE self, VALUE len));</div><div class='del'>-static VALUE strscan_peep _((VALUE self, VALUE len));</div><div class='del'>-static VALUE strscan_unscan _((VALUE self));</div><div class='del'>-static VALUE strscan_bol_p _((VALUE self));</div><div class='del'>-static VALUE strscan_eos_p _((VALUE self));</div><div class='del'>-static VALUE strscan_empty_p _((VALUE self));</div><div class='del'>-static VALUE strscan_rest_p _((VALUE self));</div><div class='del'>-static VALUE strscan_matched_p _((VALUE self));</div><div class='del'>-static VALUE strscan_matched _((VALUE self));</div><div class='del'>-static VALUE strscan_matched_size _((VALUE self));</div><div class='del'>-static VALUE strscan_aref _((VALUE self, VALUE idx));</div><div class='del'>-static VALUE strscan_pre_match _((VALUE self));</div><div class='del'>-static VALUE strscan_post_match _((VALUE self));</div><div class='del'>-static VALUE strscan_rest _((VALUE self));</div><div class='del'>-static VALUE strscan_rest_size _((VALUE self));</div><div class='del'>-</div><div class='del'>-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='del'>-</div><div class='del'>-/* =======================================================================</div><div class='del'>-                                   Utils</div><div class='del'>-   ======================================================================= */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-infect(VALUE str, struct strscanner *p)</div><div class='del'>-{</div><div class='del'>-    OBJ_INFECT(str, p-&gt;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'>-extract_range(struct strscanner *p, long beg_i, long end_i)</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-extract_beg_len(struct strscanner *p, long beg_i, long len)</div><div class='del'>-{</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='del'>-}</div><div class='del'>-</div><div class='del'>-/* =======================================================================</div><div class='del'>-                               Constructor</div><div class='del'>-   ======================================================================= */</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-strscan_mark(struct strscanner *p)</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(p-&gt;str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-strscan_free(struct strscanner *p)</div><div class='del'>-{</div><div class='del'>-    re_free_registers(&amp;(p-&gt;regs));</div><div class='del'>-    free(p);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-strscan_s_allocate(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    </div><div class='del'>-    p = ALLOC(struct strscanner);</div><div class='del'>-    MEMZERO(p, struct strscanner, 1);</div><div class='del'>-    CLEAR_MATCH_STATUS(p);</div><div class='del'>-    MEMZERO(&amp;(p-&gt;regs), struct re_registers, 1);</div><div class='del'>-    p-&gt;str = Qnil;</div><div class='del'>-    return Data_Wrap_Struct(klass, strscan_mark, strscan_free, p);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_initialize(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    VALUE str, need_dup;</div><div class='del'>-</div><div class='del'>-    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='del'>-    StringValue(str);</div><div class='del'>-    p-&gt;str = str;</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'>-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='del'>-</div><div class='del'>-/* =======================================================================</div><div class='del'>-                          Instance Methods</div><div class='del'>-   ======================================================================= */</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_s_mustc(VALUE self)</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'>- * Reset the scan pointer (index 0) and clear matching data.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-strscan_reset(VALUE self)</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'>-    p-&gt;curr = 0;</div><div class='del'>-    CLEAR_MATCH_STATUS(p);</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'>- *   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='del'>-static VALUE</div><div class='del'>-strscan_terminate(VALUE self)</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'>-    p-&gt;curr = S_LEN(p);</div><div class='del'>-    CLEAR_MATCH_STATUS(p);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</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='del'>-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='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-</div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-    return p-&gt;str;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_set_string(VALUE self, VALUE str)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, struct strscanner, p);</div><div class='del'>-    StringValue(str);</div><div class='del'>-    p-&gt;str = rb_str_dup(str);</div><div class='del'>-    rb_obj_freeze(p-&gt;str);</div><div class='del'>-    p-&gt;curr = 0;</div><div class='del'>-    CLEAR_MATCH_STATUS(p);</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_get_pos(VALUE self)</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'>-    return INT2FIX(p-&gt;curr);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_set_pos(VALUE self, VALUE v)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-    i = NUM2INT(v);</div><div class='del'>-    if (i &lt; 0) i += S_LEN(p);</div><div class='del'>-    if (i &lt; 0) rb_raise(rb_eRangeError, "index out of range");</div><div class='del'>-    if (i &gt; S_LEN(p)) rb_raise(rb_eRangeError, "index out of range");</div><div class='del'>-    p-&gt;curr = i;</div><div class='del'>-    return INT2NUM(i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-strscan_do_scan(VALUE self, VALUE regex, int succptr, int getstr, int headonly)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    Check_Type(regex, T_REGEXP);</div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-</div><div class='del'>-    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='del'>-    rb_kcode_set_option(regex);</div><div class='del'>-    if (headonly) {</div><div class='del'>-        ret = re_match(RREGEXP(regex)-&gt;ptr,</div><div class='del'>-                       CURPTR(p), S_RESTLEN(p),</div><div class='del'>-                       0,</div><div class='del'>-                       &amp;(p-&gt;regs));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        ret = re_search(RREGEXP(regex)-&gt;ptr,</div><div class='del'>-                        CURPTR(p), S_RESTLEN(p),</div><div class='del'>-                        0,</div><div class='del'>-                        S_RESTLEN(p),</div><div class='del'>-                        &amp;(p-&gt;regs));</div><div class='del'>-    }</div><div class='del'>-    rb_kcode_reset_option();</div><div class='del'>-</div><div class='del'>-    if (ret == -2) rb_raise(ScanError, "regexp buffer overflow");</div><div class='del'>-    if (ret &lt; 0) {</div><div class='del'>-        /* not matched */</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    MATCHED(p);</div><div class='del'>-    p-&gt;prev = p-&gt;curr;</div><div class='del'>-    if (succptr) {</div><div class='del'>-        p-&gt;curr += p-&gt;regs.end[0];</div><div class='del'>-    }</div><div class='del'>-    if (getstr) {</div><div class='del'>-        return extract_beg_len(p, p-&gt;prev, p-&gt;regs.end[0]);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        return INT2FIX(p-&gt;regs.end[0]);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_scan(VALUE self, VALUE re)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, 1, 1, 1);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_match_p(VALUE self, VALUE re)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, 0, 0, 1);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_skip(VALUE self, VALUE re)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, 1, 0, 1);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_check(VALUE self, VALUE re)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, 0, 1, 1);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_scan_full(VALUE self, VALUE re, VALUE s, VALUE f)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, RTEST(s), RTEST(f), 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_scan_until(VALUE self, VALUE re)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, 1, 1, 0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_exist_p(VALUE self, VALUE re)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, 0, 0, 0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_skip_until(VALUE self, VALUE re)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, 1, 0, 0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_check_until(VALUE self, VALUE re)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, 0, 1, 0);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_search_full(VALUE self, VALUE re, VALUE s, VALUE f)</div><div class='del'>-{</div><div class='del'>-    return strscan_do_scan(self, re, RTEST(s), RTEST(f), 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* DANGEROUS; need to synchronize with regex.c */</div><div class='del'>-static void</div><div class='del'>-adjust_registers_to_matched(struct strscanner *p)</div><div class='del'>-{</div><div class='del'>-    if (p-&gt;regs.allocated == 0) {</div><div class='del'>-        p-&gt;regs.beg = ALLOC_N(int, RE_NREGS);</div><div class='del'>-        p-&gt;regs.end = ALLOC_N(int, RE_NREGS);</div><div class='del'>-        p-&gt;regs.allocated = RE_NREGS;</div><div class='del'>-    }</div><div class='del'>-    p-&gt;regs.num_regs = 1;</div><div class='del'>-    p-&gt;regs.beg[0] = 0;</div><div class='del'>-    p-&gt;regs.end[0] = p-&gt;curr - p-&gt;prev;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_getch(VALUE self)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-    CLEAR_MATCH_STATUS(p);</div><div class='del'>-    if (EOS_P(p))</div><div class='del'>-        return Qnil;</div><div class='del'>-    len = mbclen(*CURPTR(p));</div><div class='del'>-    if (p-&gt;curr + len &gt; S_LEN(p)) {</div><div class='del'>-        len = S_LEN(p) - p-&gt;curr;</div><div class='del'>-    }</div><div class='del'>-    p-&gt;prev = p-&gt;curr;</div><div class='del'>-    p-&gt;curr += len;</div><div class='del'>-    MATCHED(p);</div><div class='del'>-    adjust_registers_to_matched(p);</div><div class='del'>-    return extract_range(p, p-&gt;prev + p-&gt;regs.beg[0],</div><div class='del'>-                            p-&gt;prev + p-&gt;regs.end[0]);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_get_byte(VALUE self)</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'>-    CLEAR_MATCH_STATUS(p);</div><div class='del'>-    if (EOS_P(p)) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    p-&gt;prev = p-&gt;curr;</div><div class='del'>-    p-&gt;curr++;</div><div class='del'>-    MATCHED(p);</div><div class='del'>-    adjust_registers_to_matched(p);</div><div class='del'>-    return extract_range(p, p-&gt;prev + p-&gt;regs.beg[0],</div><div class='del'>-                            p-&gt;prev + p-&gt;regs.end[0]);</div><div class='del'>-}</div><div class='del'>-</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='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_peek(VALUE self, VALUE vlen)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-    len = NUM2LONG(vlen);</div><div class='del'>-    if (EOS_P(p)) {</div><div class='del'>-        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='del'>-        len = S_LEN(p) - p-&gt;curr;</div><div class='del'>-    }</div><div class='del'>-    return extract_beg_len(p, p-&gt;curr, len);</div><div class='del'>-}</div><div class='del'>-</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='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_unscan(VALUE self)</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'>-    if (! MATCHED_P(p)) {</div><div class='del'>-        rb_raise(ScanError, "unscan failed: previous match had failed");</div><div class='del'>-    }</div><div class='del'>-    p-&gt;curr = p-&gt;prev;</div><div class='del'>-    CLEAR_MATCH_STATUS(p);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</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='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_eos_p(VALUE self)</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'>-    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='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_rest_p(VALUE self)</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'>-    return EOS_P(p) ? Qfalse : Qtrue;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_matched_p(VALUE self)</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'>-    return MATCHED_P(p) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_matched(VALUE self)</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'>-    if (! MATCHED_P(p)) return Qnil;</div><div class='del'>-</div><div class='del'>-    return extract_range(p, p-&gt;prev + p-&gt;regs.beg[0],</div><div class='del'>-                            p-&gt;prev + p-&gt;regs.end[0]);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_matched_size(VALUE self)</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'>-    if (! MATCHED_P(p)) return Qnil;</div><div class='del'>-</div><div class='del'>-    return INT2NUM(p-&gt;regs.end[0] - p-&gt;regs.beg[0]);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_aref(VALUE self, VALUE idx)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-    if (! MATCHED_P(p))        return Qnil;</div><div class='del'>-    </div><div class='del'>-    i = NUM2LONG(idx);</div><div class='del'>-    if (i &lt; 0)</div><div class='del'>-        i += p-&gt;regs.num_regs;</div><div class='del'>-    if (i &lt; 0)                 return Qnil;</div><div class='del'>-    if (i &gt;= p-&gt;regs.num_regs) return Qnil;</div><div class='del'>-    if (p-&gt;regs.beg[i] == -1)  return Qnil;</div><div class='del'>-</div><div class='del'>-    return extract_range(p, p-&gt;prev + p-&gt;regs.beg[i],</div><div class='del'>-                            p-&gt;prev + p-&gt;regs.end[i]);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_pre_match(VALUE self)</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'>-    if (! MATCHED_P(p)) return Qnil;</div><div class='del'>-</div><div class='del'>-    return extract_range(p, 0, p-&gt;prev + p-&gt;regs.beg[0]);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_post_match(VALUE self)</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'>-    if (! MATCHED_P(p)) return Qnil;</div><div class='del'>-</div><div class='del'>-    return extract_range(p, p-&gt;prev + p-&gt;regs.end[0], S_LEN(p));</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_rest(VALUE self)</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'>-    if (EOS_P(p)) {</div><div class='del'>-        return infect(rb_str_new("", 0), p);</div><div class='del'>-    }</div><div class='del'>-    return extract_range(p, p-&gt;curr, S_LEN(p));</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-strscan_rest_size(VALUE self)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    GET_SCANNER(self, p);</div><div class='del'>-    if (EOS_P(p)) {</div><div class='del'>-        return INT2FIX(0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    i = S_LEN(p) - p-&gt;curr;</div><div class='del'>-    return INT2FIX(i);</div><div class='del'>-}</div><div class='del'>-</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='del'>-</div><div class='del'>-#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='del'>-static VALUE</div><div class='del'>-strscan_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-    struct strscanner *p;</div><div class='del'>-    char buf[BUFSIZE];</div><div class='del'>-    long len;</div><div class='del'>-    VALUE a, b;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, struct strscanner, p);</div><div class='del'>-    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='del'>-    }</div><div class='del'>-    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='del'>-    }</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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-inspect1(struct strscanner *p)</div><div class='del'>-{</div><div class='del'>-    char buf[BUFSIZE];</div><div class='del'>-    char *bp = buf;</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    if (p-&gt;curr == 0) return rb_str_new2("");</div><div class='del'>-    if (p-&gt;curr &gt; INSPECT_LENGTH) {</div><div class='del'>-        strcpy(bp, "..."); bp += 3;</div><div class='del'>-        len = INSPECT_LENGTH;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        len = p-&gt;curr;</div><div class='del'>-    }</div><div class='del'>-    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='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-inspect2(struct strscanner *p)</div><div class='del'>-{</div><div class='del'>-    char buf[BUFSIZE];</div><div class='del'>-    char *bp = buf;</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    if (EOS_P(p)) return rb_str_new2("");</div><div class='del'>-    len = S_LEN(p) - p-&gt;curr;</div><div class='del'>-    if (len &gt; INSPECT_LENGTH) {</div><div class='del'>-        len = INSPECT_LENGTH;</div><div class='del'>-        memcpy(bp, CURPTR(p), len); bp += len;</div><div class='del'>-        strcpy(bp, "..."); bp += 3;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        memcpy(bp, CURPTR(p), len); bp += len;</div><div class='del'>-    }</div><div class='del'>-    return rb_str_dump(rb_str_new(buf, bp - buf));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* =======================================================================</div><div class='del'>-                              Ruby Interface</div><div class='del'>-   ======================================================================= */</div><div class='del'>-</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='del'>-void</div><div class='del'>-Init_strscan(void)</div><div class='del'>-{</div><div class='del'>-    ID id_scanerr = rb_intern("ScanError");</div><div class='del'>-    VALUE tmp;</div><div class='del'>-</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='del'>-    }</div><div class='del'>-    tmp = rb_str_new2(STRSCAN_VERSION);</div><div class='del'>-    rb_obj_freeze(tmp);</div><div class='del'>-    rb_const_set(StringScanner, rb_intern("Version"), tmp);</div><div class='del'>-    tmp = rb_str_new2("$Id$");</div><div class='del'>-    rb_obj_freeze(tmp);</div><div class='del'>-    rb_const_set(StringScanner, rb_intern("Id"), tmp);</div><div class='del'>-    </div><div class='del'>-    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='del'>-    rb_define_method(StringScanner, "reset",       strscan_reset,       0);</div><div class='del'>-    rb_define_method(StringScanner, "terminate",   strscan_terminate,   0);</div><div class='del'>-    rb_define_method(StringScanner, "clear",       strscan_clear,       0);</div><div class='del'>-    rb_define_method(StringScanner, "string",      strscan_get_string,  0);</div><div class='del'>-    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='del'>-    rb_define_method(StringScanner, "pos",         strscan_get_pos,     0);</div><div class='del'>-    rb_define_method(StringScanner, "pos=",        strscan_set_pos,     1);</div><div class='del'>-    rb_define_method(StringScanner, "pointer",     strscan_get_pos,     0);</div><div class='del'>-    rb_define_method(StringScanner, "pointer=",    strscan_set_pos,     1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringScanner, "scan",        strscan_scan,        1);</div><div class='del'>-    rb_define_method(StringScanner, "skip",        strscan_skip,        1);</div><div class='del'>-    rb_define_method(StringScanner, "match?",      strscan_match_p,     1);</div><div class='del'>-    rb_define_method(StringScanner, "check",       strscan_check,       1);</div><div class='del'>-    rb_define_method(StringScanner, "scan_full",   strscan_scan_full,   3);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringScanner, "scan_until",  strscan_scan_until,  1);</div><div class='del'>-    rb_define_method(StringScanner, "skip_until",  strscan_skip_until,  1);</div><div class='del'>-    rb_define_method(StringScanner, "exist?",      strscan_exist_p,     1);</div><div class='del'>-    rb_define_method(StringScanner, "check_until", strscan_check_until, 1);</div><div class='del'>-    rb_define_method(StringScanner, "search_full", strscan_search_full, 3);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringScanner, "getch",       strscan_getch,       0);</div><div class='del'>-    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='del'>-    rb_define_method(StringScanner, "peek",        strscan_peek,        1);</div><div class='del'>-    rb_define_method(StringScanner, "peep",        strscan_peep,        1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringScanner, "unscan",      strscan_unscan,      0);</div><div class='del'>-</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='del'>-    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='del'>-    rb_define_method(StringScanner, "rest?",       strscan_rest_p,      0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringScanner, "matched?",    strscan_matched_p,   0);</div><div class='del'>-    rb_define_method(StringScanner, "matched",     strscan_matched,     0);</div><div class='del'>-    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='del'>-    rb_define_method(StringScanner, "[]",          strscan_aref,        1);</div><div class='del'>-    rb_define_method(StringScanner, "pre_match",   strscan_pre_match,   0);</div><div class='del'>-    rb_define_method(StringScanner, "post_match",  strscan_post_match,  0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(StringScanner, "rest",        strscan_rest,        0);</div><div class='del'>-    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='del'>-</div><div class='del'>-    rb_define_method(StringScanner, "inspect",     strscan_inspect,     0);</div><div class='del'>-}</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 567aaf52a8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/bytecode.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 9c8ab8d49b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/emitter.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 56fe838fbd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/handler.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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 d356faf7d9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/implicit.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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 28fc78c077..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/node.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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 76e8279601..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/rubyext.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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'>-        char *p = end;</div><div class='del'>-        while ( isdigit( *end ) ) end++;</div><div class='del'>-        if (end - p &lt; sizeof(padded)) {</div><div class='del'>-            MEMCPY(padded, ptr + 1, char, end - (ptr + 1));</div><div class='del'>-            p = padded;</div><div class='del'>-        }</div><div class='del'>-        usec = strtol(p, 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'>-    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'>-    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'>-            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'>-            rb_iv_set(obj, "@kind", sym_seq);</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-        case syck_map_kind:</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'>-            rb_iv_set(obj, "@kind", sym_map);</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'>-    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_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 a83c8813c1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/syck.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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 e7d07e9c0d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/syck.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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 3c6cd1a9cf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/token.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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 821a3cd5b5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syck/yaml2byte.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</div><div class='del'>- * $Date$</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/.cvsignore b/ext/syslog/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syslog/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/.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/syslog/depend b/ext/syslog/depend<br/>deleted file mode 100644<br/>index 45cbea293a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syslog/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-syslog.o: syslog.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h \</div><div class='del'>-  $(hdrdir)/intern.h</div><div class='head'>diff --git a/ext/syslog/extconf.rb b/ext/syslog/extconf.rb<br/>deleted file mode 100644<br/>index 0fa0bc339b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syslog/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-# $RoughId: extconf.rb,v 1.3 2001/11/24 17:49:26 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-have_header("syslog.h") &amp;&amp;</div><div class='del'>-  have_func("openlog") &amp;&amp;</div><div class='del'>-  have_func("setlogmask") &amp;&amp;</div><div class='del'>-  create_makefile("syslog")</div><div class='del'>-</div><div class='head'>diff --git a/ext/syslog/syslog.c b/ext/syslog/syslog.c<br/>deleted file mode 100644<br/>index ecc49318f7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syslog/syslog.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/syslog.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,397 +0,0 @@</div><div class='del'>-/* </div><div class='del'>- * UNIX Syslog extension for Ruby</div><div class='del'>- * Amos Gouaux, University of Texas at Dallas</div><div class='del'>- * &lt;amos+ruby@utdallas.edu&gt;</div><div class='del'>- *</div><div class='del'>- * $RoughId: syslog.c,v 1.21 2002/02/25 12:21:17 knu Exp $</div><div class='del'>- * $Id$</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "util.h"</div><div class='del'>-#include &lt;syslog.h&gt;</div><div class='del'>-</div><div class='del'>-/* Syslog class */</div><div class='del'>-static VALUE mSyslog, mSyslogConstants;</div><div class='del'>-static const char *syslog_ident = NULL;</div><div class='del'>-static int syslog_options = -1, syslog_facility = -1, syslog_mask = -1;</div><div class='del'>-static int syslog_opened = 0;</div><div class='del'>-</div><div class='del'>-/* Package helper routines */</div><div class='del'>-static void syslog_write(int pri, int argc, VALUE *argv)</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (argc &lt; 1) {</div><div class='del'>-        rb_raise(rb_eArgError, "no log message supplied");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!syslog_opened) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "must open syslog before write");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    str = rb_f_sprintf(argc, argv);</div><div class='del'>-</div><div class='del'>-    syslog(pri, "%s", RSTRING(str)-&gt;ptr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Syslog module methods */</div><div class='del'>-static VALUE mSyslog_close(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (!syslog_opened) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "syslog not opened");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    closelog();</div><div class='del'>-</div><div class='del'>-    free((void *)syslog_ident);</div><div class='del'>-    syslog_ident = NULL;</div><div class='del'>-    syslog_options = syslog_facility = syslog_mask = -1;</div><div class='del'>-    syslog_opened = 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 mSyslog_open(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE ident, opt, fac;</div><div class='del'>-</div><div class='del'>-    if (syslog_opened) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "syslog already open");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "03", &amp;ident, &amp;opt, &amp;fac);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(ident)) {</div><div class='del'>-        ident = rb_gv_get("$0"); </div><div class='del'>-    }</div><div class='del'>-#ifdef SafeStringValue</div><div class='del'>-    SafeStringValue(ident);</div><div class='del'>-#else</div><div class='del'>-    Check_SafeStr(ident);</div><div class='del'>-#endif</div><div class='del'>-    syslog_ident = strdup(RSTRING(ident)-&gt;ptr);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(opt)) {</div><div class='del'>-	syslog_options = LOG_PID | LOG_CONS;</div><div class='del'>-    } else {</div><div class='del'>-	syslog_options = NUM2INT(opt);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (NIL_P(fac)) {</div><div class='del'>-	syslog_facility = LOG_USER;</div><div class='del'>-    } else {</div><div class='del'>-	syslog_facility = NUM2INT(fac);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    openlog(syslog_ident, syslog_options, syslog_facility);</div><div class='del'>-</div><div class='del'>-    syslog_opened = 1;</div><div class='del'>-</div><div class='del'>-    setlogmask(syslog_mask = setlogmask(0));</div><div class='del'>-</div><div class='del'>-    /* be like File.new.open {...} */</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-        rb_ensure(rb_yield, self, mSyslog_close, self);</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 mSyslog_reopen(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    mSyslog_close(self);</div><div class='del'>-</div><div class='del'>-    return mSyslog_open(argc, argv, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslog_isopen(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return syslog_opened ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslog_ident(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return syslog_opened ? rb_str_new2(syslog_ident) : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslog_options(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return syslog_opened ? INT2NUM(syslog_options) : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslog_facility(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return syslog_opened ? INT2NUM(syslog_facility) : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslog_get_mask(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return syslog_opened ? INT2NUM(syslog_mask) : Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslog_set_mask(VALUE self, VALUE mask)</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (!syslog_opened) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "must open syslog before setting log mask");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    setlogmask(syslog_mask = NUM2INT(mask));</div><div class='del'>-</div><div class='del'>-    return mask;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslog_log(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    VALUE pri;</div><div class='del'>-</div><div class='del'>-    if (argc &lt; 2) {</div><div class='del'>-        rb_raise(rb_eArgError, "wrong number of arguments (%d for 2+)", argc);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    argc--;</div><div class='del'>-    pri = *argv++;</div><div class='del'>-</div><div class='del'>-    if (!FIXNUM_P(pri)) {</div><div class='del'>-      rb_raise(rb_eTypeError, "type mismatch: %s given", rb_class2name(CLASS_OF(pri)));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    syslog_write(FIX2INT(pri), argc, argv);</div><div class='del'>-</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslog_inspect(VALUE self)</div><div class='del'>-{</div><div class='del'>-    char buf[1024];</div><div class='del'>-</div><div class='del'>-    if (syslog_opened) {</div><div class='del'>-	snprintf(buf, sizeof(buf),</div><div class='del'>-	  "&lt;#%s: opened=true, ident=\"%s\", options=%d, facility=%d, mask=%d&gt;",</div><div class='del'>-	  rb_class2name(self),</div><div class='del'>-	  syslog_ident,</div><div class='del'>-	  syslog_options,</div><div class='del'>-	  syslog_facility,</div><div class='del'>-	  syslog_mask);</div><div class='del'>-    } else {</div><div class='del'>-	snprintf(buf, sizeof(buf),</div><div class='del'>-	  "&lt;#%s: opened=false&gt;", rb_class2name(self));</div><div class='del'>-    }</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'>-static VALUE mSyslog_instance(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define define_syslog_shortcut_method(pri, name) \</div><div class='del'>-static VALUE mSyslog_##name(int argc, VALUE *argv, VALUE self) \</div><div class='del'>-{ \</div><div class='del'>-    syslog_write(pri, argc, argv); \</div><div class='del'>-\</div><div class='del'>-    return self; \</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef LOG_EMERG</div><div class='del'>-define_syslog_shortcut_method(LOG_EMERG, emerg)</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_ALERT</div><div class='del'>-define_syslog_shortcut_method(LOG_ALERT, alert)</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_CRIT</div><div class='del'>-define_syslog_shortcut_method(LOG_CRIT, crit)</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_ERR</div><div class='del'>-define_syslog_shortcut_method(LOG_ERR, err)</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_WARNING</div><div class='del'>-define_syslog_shortcut_method(LOG_WARNING, warning)</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_NOTICE</div><div class='del'>-define_syslog_shortcut_method(LOG_NOTICE, notice)</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_INFO</div><div class='del'>-define_syslog_shortcut_method(LOG_INFO, info)</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_DEBUG</div><div class='del'>-define_syslog_shortcut_method(LOG_DEBUG, debug)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE mSyslogConstants_LOG_MASK(VALUE klass, VALUE pri)</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(LOG_MASK(FIX2INT(pri)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE mSyslogConstants_LOG_UPTO(VALUE klass, VALUE pri)</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(LOG_UPTO(FIX2INT(pri)));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Init for package syslog */</div><div class='del'>-void Init_syslog()</div><div class='del'>-{</div><div class='del'>-    mSyslog = rb_define_module("Syslog");</div><div class='del'>- </div><div class='del'>-    mSyslogConstants = rb_define_module_under(mSyslog, "Constants");</div><div class='del'>-</div><div class='del'>-    rb_include_module(mSyslog, mSyslogConstants);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mSyslog, "open", mSyslog_open, -1);</div><div class='del'>-    rb_define_module_function(mSyslog, "reopen", mSyslog_reopen, -1);</div><div class='del'>-    rb_define_module_function(mSyslog, "open!", mSyslog_reopen, -1);</div><div class='del'>-    rb_define_module_function(mSyslog, "opened?", mSyslog_isopen, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mSyslog, "ident", mSyslog_ident, 0);</div><div class='del'>-    rb_define_module_function(mSyslog, "options", mSyslog_options, 0);</div><div class='del'>-    rb_define_module_function(mSyslog, "facility", mSyslog_facility, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mSyslog, "log", mSyslog_log, -1);</div><div class='del'>-    rb_define_module_function(mSyslog, "close", mSyslog_close, 0);</div><div class='del'>-    rb_define_module_function(mSyslog, "mask", mSyslog_get_mask, 0);</div><div class='del'>-    rb_define_module_function(mSyslog, "mask=", mSyslog_set_mask, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mSyslog, "LOG_MASK", mSyslogConstants_LOG_MASK, 1);</div><div class='del'>-    rb_define_module_function(mSyslog, "LOG_UPTO", mSyslogConstants_LOG_UPTO, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mSyslog, "inspect", mSyslog_inspect, 0);</div><div class='del'>-    rb_define_module_function(mSyslog, "instance", mSyslog_instance, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mSyslogConstants, "LOG_MASK", mSyslogConstants_LOG_MASK, 1);</div><div class='del'>-    rb_define_module_function(mSyslogConstants, "LOG_UPTO", mSyslogConstants_LOG_UPTO, 1);</div><div class='del'>-</div><div class='del'>-#define rb_define_syslog_const(id) \</div><div class='del'>-    rb_define_const(mSyslogConstants, #id, INT2NUM(id))</div><div class='del'>-</div><div class='del'>-    /* Various options when opening log */</div><div class='del'>-#ifdef LOG_PID</div><div class='del'>-    rb_define_syslog_const(LOG_PID);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_CONS</div><div class='del'>-    rb_define_syslog_const(LOG_CONS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_ODELAY</div><div class='del'>-    rb_define_syslog_const(LOG_ODELAY); /* deprecated */</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_NDELAY</div><div class='del'>-    rb_define_syslog_const(LOG_NDELAY);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_NOWAIT</div><div class='del'>-    rb_define_syslog_const(LOG_NOWAIT); /* deprecated */</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_PERROR</div><div class='del'>-    rb_define_syslog_const(LOG_PERROR);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* Various syslog facilities */</div><div class='del'>-#ifdef LOG_AUTH</div><div class='del'>-    rb_define_syslog_const(LOG_AUTH);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_AUTHPRIV</div><div class='del'>-    rb_define_syslog_const(LOG_AUTHPRIV);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_CONSOLE</div><div class='del'>-    rb_define_syslog_const(LOG_CONSOLE);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_CRON</div><div class='del'>-    rb_define_syslog_const(LOG_CRON);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_DAEMON</div><div class='del'>-    rb_define_syslog_const(LOG_DAEMON);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_FTP</div><div class='del'>-    rb_define_syslog_const(LOG_FTP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_KERN</div><div class='del'>-    rb_define_syslog_const(LOG_KERN);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LPR</div><div class='del'>-    rb_define_syslog_const(LOG_LPR);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_MAIL</div><div class='del'>-    rb_define_syslog_const(LOG_MAIL);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_NEWS</div><div class='del'>-    rb_define_syslog_const(LOG_NEWS);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_NTP</div><div class='del'>-   rb_define_syslog_const(LOG_NTP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_SECURITY</div><div class='del'>-    rb_define_syslog_const(LOG_SECURITY);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_SYSLOG</div><div class='del'>-    rb_define_syslog_const(LOG_SYSLOG);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_USER</div><div class='del'>-    rb_define_syslog_const(LOG_USER);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_UUCP</div><div class='del'>-    rb_define_syslog_const(LOG_UUCP);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LOCAL0</div><div class='del'>-    rb_define_syslog_const(LOG_LOCAL0);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LOCAL1</div><div class='del'>-    rb_define_syslog_const(LOG_LOCAL1);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LOCAL2</div><div class='del'>-    rb_define_syslog_const(LOG_LOCAL2);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LOCAL3</div><div class='del'>-    rb_define_syslog_const(LOG_LOCAL3);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LOCAL4</div><div class='del'>-    rb_define_syslog_const(LOG_LOCAL4);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LOCAL5</div><div class='del'>-    rb_define_syslog_const(LOG_LOCAL5);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LOCAL6</div><div class='del'>-    rb_define_syslog_const(LOG_LOCAL6);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_LOCAL7</div><div class='del'>-    rb_define_syslog_const(LOG_LOCAL7);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define rb_define_syslog_shortcut(name) \</div><div class='del'>-    rb_define_module_function(mSyslog, #name, mSyslog_##name, -1)</div><div class='del'>-</div><div class='del'>-    /* Various syslog priorities and the shortcut methods */</div><div class='del'>-#ifdef LOG_EMERG</div><div class='del'>-    rb_define_syslog_const(LOG_EMERG);</div><div class='del'>-    rb_define_syslog_shortcut(emerg);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_ALERT</div><div class='del'>-    rb_define_syslog_const(LOG_ALERT);</div><div class='del'>-    rb_define_syslog_shortcut(alert);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_CRIT</div><div class='del'>-    rb_define_syslog_const(LOG_CRIT);</div><div class='del'>-    rb_define_syslog_shortcut(crit);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_ERR</div><div class='del'>-    rb_define_syslog_const(LOG_ERR);</div><div class='del'>-    rb_define_syslog_shortcut(err);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_WARNING</div><div class='del'>-    rb_define_syslog_const(LOG_WARNING);</div><div class='del'>-    rb_define_syslog_shortcut(warning);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_NOTICE</div><div class='del'>-    rb_define_syslog_const(LOG_NOTICE);</div><div class='del'>-    rb_define_syslog_shortcut(notice);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_INFO</div><div class='del'>-    rb_define_syslog_const(LOG_INFO);</div><div class='del'>-    rb_define_syslog_shortcut(info);</div><div class='del'>-#endif</div><div class='del'>-#ifdef LOG_DEBUG</div><div class='del'>-    rb_define_syslog_const(LOG_DEBUG);</div><div class='del'>-    rb_define_syslog_shortcut(debug);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='head'>diff --git a/ext/syslog/syslog.txt b/ext/syslog/syslog.txt<br/>deleted file mode 100644<br/>index 35bd4cb057..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syslog/syslog.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/syslog.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,124 +0,0 @@</div><div class='del'>-.\" syslog.txt -  -*- Indented-Text -*-</div><div class='del'>-$RoughId: syslog.txt,v 1.18 2002/02/25 08:20:14 knu Exp $</div><div class='del'>-$Id$</div><div class='del'>-</div><div class='del'>-UNIX Syslog extension for Ruby</div><div class='del'>-Amos Gouaux, University of Texas at Dallas</div><div class='del'>-&lt;amos+ruby@utdallas.edu&gt;</div><div class='del'>-&amp;</div><div class='del'>-Akinori MUSHA</div><div class='del'>-&lt;knu@iDaemons.org&gt;</div><div class='del'>-</div><div class='del'>-Contact:</div><div class='del'>-  - Akinori MUSHA &lt;knu@iDaemons.org&gt; (current maintainer)</div><div class='del'>-</div><div class='del'>-** Syslog(Module)</div><div class='del'>-</div><div class='del'>-Included Modules: Syslog::Constants</div><div class='del'>-</div><div class='del'>-require 'syslog'</div><div class='del'>-</div><div class='del'>-A Simple wrapper for the UNIX syslog system calls that might be handy</div><div class='del'>-if you're writing a server in Ruby.  For the details of the syslog(8)</div><div class='del'>-architecture and constants, see the syslog(3) manual page of your</div><div class='del'>-platform.</div><div class='del'>-</div><div class='del'>-Module Methods:</div><div class='del'>-</div><div class='del'>-   open(ident = $0, logopt = Syslog::LOG_PID | Syslog::LOG_CONS,</div><div class='del'>-		facility = Syslog::LOG_USER) [{ |syslog| ... }]</div><div class='del'>-</div><div class='del'>-	Opens syslog with the given options and returns the module</div><div class='del'>-	itself.  If a block is given, calls it with an argument of</div><div class='del'>-	itself.  If syslog is already opened, raises RuntimeError.</div><div class='del'>-</div><div class='del'>-	Example:</div><div class='del'>-	  Syslog.open('ftpd', Syslog::LOG_PID | Syslog::LOG_NDELAY,</div><div class='del'>-			      Syslog::LOG_FTP)</div><div class='del'>-</div><div class='del'>-   open!(ident = $0, logopt = Syslog::LOG_PID | Syslog::LOG_CONS,</div><div class='del'>-		facility = Syslog::LOG_USER)</div><div class='del'>-   reopen(ident = $0, logopt = Syslog::LOG_PID | Syslog::LOG_CONS,</div><div class='del'>-		facility = Syslog::LOG_USER)</div><div class='del'>-</div><div class='del'>-	Same as open, but does a close first.</div><div class='del'>-</div><div class='del'>-   opened?</div><div class='del'>-</div><div class='del'>-	Returns true if syslog opened, otherwise false.</div><div class='del'>-</div><div class='del'>-   ident</div><div class='del'>-   options</div><div class='del'>-   facility</div><div class='del'>-</div><div class='del'>-	Returns the parameters given in the last open, respectively.</div><div class='del'>-	Every call of Syslog::open resets these values.</div><div class='del'>-</div><div class='del'>-   log(pri, message, ...)</div><div class='del'>-</div><div class='del'>-	Writes message to syslog.</div><div class='del'>-</div><div class='del'>-	Example:</div><div class='del'>-	  Syslog.log(Syslog::LOG_CRIT, "the sky is falling in %d seconds!", 10)</div><div class='del'>-</div><div class='del'>-   crit(message, ...)</div><div class='del'>-   emerg(message, ...)</div><div class='del'>-   alert(message, ...)</div><div class='del'>-   err(message, ...)</div><div class='del'>-   warning(message, ...)</div><div class='del'>-   notice(message, ...)</div><div class='del'>-   info(message, ...)</div><div class='del'>-   debug(message, ...)</div><div class='del'>-</div><div class='del'>-	These are shortcut methods of Syslog::log().  The lineup may</div><div class='del'>-	vary depending on what priorities are defined on your system.</div><div class='del'>-</div><div class='del'>-	Example:</div><div class='del'>-	  Syslog.crit("the sky is falling in %d seconds!", 5)</div><div class='del'>- </div><div class='del'>-   mask</div><div class='del'>-   mask=(mask)</div><div class='del'>-</div><div class='del'>-	Returns or sets the log priority mask.  The value of the mask</div><div class='del'>-	is persistent and will not be reset by Syslog::open or</div><div class='del'>-	Syslog::close.</div><div class='del'>-</div><div class='del'>-	Example:</div><div class='del'>-	  Syslog.mask = Syslog::LOG_UPTO(Syslog::LOG_ERR)</div><div class='del'>-</div><div class='del'>-   close </div><div class='del'>-</div><div class='del'>-	Closes syslog.</div><div class='del'>-</div><div class='del'>-   inspect</div><div class='del'>-</div><div class='del'>-	Returns the "inspect" string of the Syslog module.</div><div class='del'>-</div><div class='del'>-   instance</div><div class='del'>-</div><div class='del'>-	Returns the module itself. (Just for backward compatibility)</div><div class='del'>-</div><div class='del'>-   LOG_MASK(pri)</div><div class='del'>-</div><div class='del'>-	Creates a mask for one priority.</div><div class='del'>-</div><div class='del'>-   LOG_UPTO(pri)</div><div class='del'>-</div><div class='del'>-	Creates a mask for all priorities up to pri.</div><div class='del'>-</div><div class='del'>-** Syslog::Constants(Module)</div><div class='del'>-</div><div class='del'>-require 'syslog'</div><div class='del'>-include Syslog::Constants</div><div class='del'>-</div><div class='del'>-This module includes the LOG_* constants available on the system.</div><div class='del'>-</div><div class='del'>-Module Methods:</div><div class='del'>-</div><div class='del'>-   LOG_MASK(pri)</div><div class='del'>-</div><div class='del'>-	Creates a mask for one priority.</div><div class='del'>-</div><div class='del'>-   LOG_UPTO(pri)</div><div class='del'>-</div><div class='del'>-	Creates a mask for all priorities up to pri.</div><div class='head'>diff --git a/ext/syslog/test.rb b/ext/syslog/test.rb<br/>deleted file mode 100644<br/>index cfa33eff8f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/syslog/test.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/syslog/test.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,164 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# $RoughId: test.rb,v 1.9 2002/02/25 08:20:14 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-# Please only run this test on machines reasonable for testing.</div><div class='del'>-# If in doubt, ask your admin.</div><div class='del'>-</div><div class='del'>-require 'test/unit'</div><div class='del'>-</div><div class='del'>-# Prepend current directory to load path for testing.</div><div class='del'>-$:.unshift('.')</div><div class='del'>-</div><div class='del'>-require 'syslog'</div><div class='del'>-</div><div class='del'>-class TestSyslog &lt; Test::Unit::TestCase</div><div class='del'>-  def test_new</div><div class='del'>-    assert_raises(NoMethodError) {</div><div class='del'>-      Syslog.new</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_instance</div><div class='del'>-    sl1 = Syslog.instance</div><div class='del'>-    sl2 = Syslog.open</div><div class='del'>-    sl3 = Syslog.instance</div><div class='del'>-</div><div class='del'>-    assert_equal(Syslog, sl1)</div><div class='del'>-    assert_equal(Syslog, sl2)</div><div class='del'>-    assert_equal(Syslog, sl3)</div><div class='del'>-  ensure</div><div class='del'>-    Syslog.close if Syslog.opened?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_open</div><div class='del'>-    # default parameters</div><div class='del'>-    Syslog.open</div><div class='del'>-</div><div class='del'>-    assert_equal($0, Syslog.ident)</div><div class='del'>-    assert_equal(Syslog::LOG_PID | Syslog::LOG_CONS, Syslog.options)</div><div class='del'>-    assert_equal(Syslog::LOG_USER, Syslog.facility)</div><div class='del'>-</div><div class='del'>-    # open without close</div><div class='del'>-    assert_raises(RuntimeError) {</div><div class='del'>-      Syslog.open</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Syslog.close</div><div class='del'>-</div><div class='del'>-    # given parameters</div><div class='del'>-    Syslog.open("foo", Syslog::LOG_NDELAY | Syslog::LOG_PERROR, Syslog::LOG_DAEMON) </div><div class='del'>-</div><div class='del'>-    assert_equal('foo', Syslog.ident)</div><div class='del'>-    assert_equal(Syslog::LOG_NDELAY | Syslog::LOG_PERROR, Syslog.options)</div><div class='del'>-    assert_equal(Syslog::LOG_DAEMON, Syslog.facility)</div><div class='del'>-</div><div class='del'>-    Syslog.close</div><div class='del'>-</div><div class='del'>-    # default parameters again (after close)</div><div class='del'>-    Syslog.open</div><div class='del'>-    Syslog.close</div><div class='del'>-</div><div class='del'>-    assert_equal(nil, Syslog.ident)</div><div class='del'>-    assert_equal(nil, Syslog.options)</div><div class='del'>-    assert_equal(nil, Syslog.facility)</div><div class='del'>-</div><div class='del'>-    # block</div><div class='del'>-    param = nil</div><div class='del'>-    Syslog.open { |param| }</div><div class='del'>-    assert_equal(Syslog, param)</div><div class='del'>-  ensure</div><div class='del'>-    Syslog.close if Syslog.opened?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_opened?</div><div class='del'>-    assert_equal(false, Syslog.opened?)</div><div class='del'>-</div><div class='del'>-    Syslog.open</div><div class='del'>-    assert_equal(true, Syslog.opened?)</div><div class='del'>-</div><div class='del'>-    Syslog.close</div><div class='del'>-    assert_equal(false, Syslog.opened?)</div><div class='del'>-</div><div class='del'>-    Syslog.open {</div><div class='del'>-      assert_equal(true, Syslog.opened?)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    assert_equal(false, Syslog.opened?)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_close</div><div class='del'>-    assert_raises(RuntimeError) {</div><div class='del'>-      Syslog.close</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_mask</div><div class='del'>-    assert_equal(nil, Syslog.mask)</div><div class='del'>-</div><div class='del'>-    Syslog.open</div><div class='del'>-</div><div class='del'>-    orig = Syslog.mask</div><div class='del'>-</div><div class='del'>-    Syslog.mask = Syslog.LOG_UPTO(Syslog::LOG_ERR)</div><div class='del'>-    assert_equal(Syslog.LOG_UPTO(Syslog::LOG_ERR), Syslog.mask)</div><div class='del'>-</div><div class='del'>-    Syslog.mask = Syslog.LOG_MASK(Syslog::LOG_CRIT)</div><div class='del'>-    assert_equal(Syslog.LOG_MASK(Syslog::LOG_CRIT), Syslog.mask)</div><div class='del'>-</div><div class='del'>-    Syslog.mask = orig</div><div class='del'>-  ensure</div><div class='del'>-    Syslog.close if Syslog.opened?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_log</div><div class='del'>-    stderr = IO::pipe</div><div class='del'>-</div><div class='del'>-    pid = fork {</div><div class='del'>-      stderr[0].close</div><div class='del'>-      STDERR.reopen(stderr[1])</div><div class='del'>-      stderr[1].close</div><div class='del'>-</div><div class='del'>-      options = Syslog::LOG_PERROR | Syslog::LOG_NDELAY</div><div class='del'>-</div><div class='del'>-      Syslog.open("syslog_test", options) { |sl|</div><div class='del'>-	sl.log(Syslog::LOG_NOTICE, "test1 - hello, %s!", "world")</div><div class='del'>-	sl.notice("test1 - hello, %s!", "world")</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      Syslog.open("syslog_test", options | Syslog::LOG_PID) { |sl|</div><div class='del'>-	sl.log(Syslog::LOG_CRIT, "test2 - pid")</div><div class='del'>-	sl.crit("test2 - pid")</div><div class='del'>-      }</div><div class='del'>-      exit!</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    stderr[1].close</div><div class='del'>-    Process.waitpid(pid)</div><div class='del'>-</div><div class='del'>-    # LOG_PERROR is not yet implemented on Cygwin.</div><div class='del'>-    return if RUBY_PLATFORM =~ /cygwin/</div><div class='del'>-</div><div class='del'>-    2.times {</div><div class='del'>-      assert_equal("syslog_test: test1 - hello, world!\n", stderr[0].gets)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    2.times {</div><div class='del'>-      assert_equal(format("syslog_test[%d]: test2 - pid\n", pid), stderr[0].gets)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_inspect</div><div class='del'>-    Syslog.open { |sl|</div><div class='del'>-      assert_equal(format('&lt;#%s: opened=true, ident="%s", options=%d, facility=%d, mask=%d&gt;',</div><div class='del'>-			  Syslog,</div><div class='del'>-			  sl.ident,</div><div class='del'>-			  sl.options,</div><div class='del'>-			  sl.facility,</div><div class='del'>-			  sl.mask),</div><div class='del'>-		   sl.inspect)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    assert_equal(format('&lt;#%s: opened=false&gt;', Syslog), Syslog.inspect)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/thread/extconf.rb b/ext/thread/extconf.rb<br/>deleted file mode 100644<br/>index 2f984efc6d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/thread/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/thread/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,9 +0,0 @@</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-enable_config('fastthread', true) or exit</div><div class='del'>-</div><div class='del'>-if with_config('mem-pools', true)</div><div class='del'>-  $CPPFLAGS &lt;&lt; ' -DUSE_MEM_POOLS'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-create_makefile("thread")</div><div class='head'>diff --git a/ext/thread/lib/thread.rb b/ext/thread/lib/thread.rb<br/>deleted file mode 100644<br/>index 6c533aba39..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/thread/lib/thread.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/thread/lib/thread.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-unless defined? Thread</div><div class='del'>-  fail "Thread not available for this ruby interpreter"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'thread.so'</div><div class='head'>diff --git a/ext/thread/thread.c b/ext/thread/thread.c<br/>deleted file mode 100644<br/>index 68f172220a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/thread/thread.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/thread/thread.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1182 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * Optimized Ruby Mutex implementation, loosely based on thread.rb by</div><div class='del'>- * Yukihiro Matsumoto &lt;matz@ruby-lang.org&gt;</div><div class='del'>- *</div><div class='del'>- *  Copyright 2006-2007  MenTaLguY &lt;mental@rydia.net&gt;</div><div class='del'>- *</div><div class='del'>- * RDoc taken from original.</div><div class='del'>- *</div><div class='del'>- * This file is made available under the same terms as Ruby.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include &lt;ruby.h&gt;</div><div class='del'>-#include &lt;intern.h&gt;</div><div class='del'>-#include &lt;rubysig.h&gt;</div><div class='del'>-</div><div class='del'>-static VALUE rb_cMutex;</div><div class='del'>-static VALUE rb_cConditionVariable;</div><div class='del'>-static VALUE rb_cQueue;</div><div class='del'>-static VALUE rb_cSizedQueue;</div><div class='del'>-</div><div class='del'>-static VALUE set_critical(VALUE value);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-thread_exclusive(VALUE (*func)(ANYARGS), VALUE arg)</div><div class='del'>-{</div><div class='del'>-    VALUE critical = rb_thread_critical;</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = 1;</div><div class='del'>-    return rb_ensure(func, arg, set_critical, (VALUE)critical);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Thread.exclusive { block }   =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Wraps a block in Thread.critical, restoring the original value</div><div class='del'>- *  upon exit from the critical section, and returns the value of the</div><div class='del'>- *  block.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_thread_exclusive(void)</div><div class='del'>-{</div><div class='del'>-    return thread_exclusive(rb_yield, Qundef);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-typedef struct _Entry {</div><div class='del'>-    VALUE value;</div><div class='del'>-    struct _Entry *next;</div><div class='del'>-} Entry;</div><div class='del'>-</div><div class='del'>-typedef struct _List {</div><div class='del'>-    Entry *entries;</div><div class='del'>-    Entry *last_entry;</div><div class='del'>-    Entry *entry_pool;</div><div class='del'>-    unsigned long size;</div><div class='del'>-} List;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-init_list(List *list)</div><div class='del'>-{</div><div class='del'>-    list-&gt;entries = NULL;</div><div class='del'>-    list-&gt;last_entry = NULL;</div><div class='del'>-    list-&gt;entry_pool = NULL;</div><div class='del'>-    list-&gt;size = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-mark_list(List *list)</div><div class='del'>-{</div><div class='del'>-    Entry *entry;</div><div class='del'>-    for (entry = list-&gt;entries; entry; entry = entry-&gt;next) {</div><div class='del'>-        rb_gc_mark(entry-&gt;value);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-free_entries(Entry *first)</div><div class='del'>-{</div><div class='del'>-    Entry *next;</div><div class='del'>-    while (first) {</div><div class='del'>-        next = first-&gt;next;</div><div class='del'>-        xfree(first);</div><div class='del'>-        first = next;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-finalize_list(List *list)</div><div class='del'>-{</div><div class='del'>-    free_entries(list-&gt;entries);</div><div class='del'>-    free_entries(list-&gt;entry_pool);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-push_list(List *list, VALUE value)</div><div class='del'>-{</div><div class='del'>-    Entry *entry;</div><div class='del'>-</div><div class='del'>-    if (list-&gt;entry_pool) {</div><div class='del'>-        entry = list-&gt;entry_pool;</div><div class='del'>-        list-&gt;entry_pool = entry-&gt;next;</div><div class='del'>-    } else {</div><div class='del'>-        entry = ALLOC(Entry);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    entry-&gt;value = value;</div><div class='del'>-    entry-&gt;next = NULL;</div><div class='del'>-</div><div class='del'>-    if (list-&gt;last_entry) {</div><div class='del'>-        list-&gt;last_entry-&gt;next = entry;</div><div class='del'>-    } else {</div><div class='del'>-        list-&gt;entries = entry;</div><div class='del'>-    }</div><div class='del'>-    list-&gt;last_entry = entry;</div><div class='del'>-</div><div class='del'>-    ++list-&gt;size;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-push_multiple_list(List *list, VALUE *values, unsigned count)</div><div class='del'>-{</div><div class='del'>-    unsigned i;</div><div class='del'>-    for (i = 0; i &lt; count; i++) {</div><div class='del'>-        push_list(list, values[i]);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-recycle_entries(List *list, Entry *first_entry, Entry *last_entry)</div><div class='del'>-{</div><div class='del'>-#ifdef USE_MEM_POOLS</div><div class='del'>-    last_entry-&gt;next = list-&gt;entry_pool;</div><div class='del'>-    list-&gt;entry_pool = first_entry;</div><div class='del'>-#else</div><div class='del'>-    last_entry-&gt;next = NULL;</div><div class='del'>-    free_entries(first_entry);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-shift_list(List *list)</div><div class='del'>-{</div><div class='del'>-    Entry *entry;</div><div class='del'>-    VALUE value;</div><div class='del'>-</div><div class='del'>-    entry = list-&gt;entries;</div><div class='del'>-    if (!entry) return Qnil;</div><div class='del'>-</div><div class='del'>-    list-&gt;entries = entry-&gt;next;</div><div class='del'>-    if (entry == list-&gt;last_entry) {</div><div class='del'>-        list-&gt;last_entry = NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    --list-&gt;size;</div><div class='del'>-</div><div class='del'>-    value = entry-&gt;value;</div><div class='del'>-    recycle_entries(list, entry, entry);</div><div class='del'>-</div><div class='del'>-    return value;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-remove_one(List *list, VALUE value)</div><div class='del'>-{</div><div class='del'>-    Entry **ref;</div><div class='del'>-    Entry *prev;</div><div class='del'>-    Entry *entry;</div><div class='del'>-</div><div class='del'>-    for (ref = &amp;list-&gt;entries, prev = NULL, entry = list-&gt;entries;</div><div class='del'>-              entry != NULL;</div><div class='del'>-              ref = &amp;entry-&gt;next, prev = entry, entry = entry-&gt;next) {</div><div class='del'>-        if (entry-&gt;value == value) {</div><div class='del'>-            *ref = entry-&gt;next;</div><div class='del'>-            list-&gt;size--;</div><div class='del'>-            if (!entry-&gt;next) {</div><div class='del'>-                list-&gt;last_entry = prev;</div><div class='del'>-            }</div><div class='del'>-            recycle_entries(list, entry, entry);</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'>-static void</div><div class='del'>-clear_list(List *list)</div><div class='del'>-{</div><div class='del'>-    if (list-&gt;last_entry) {</div><div class='del'>-        recycle_entries(list, list-&gt;entries, list-&gt;last_entry);</div><div class='del'>-        list-&gt;entries = NULL;</div><div class='del'>-        list-&gt;last_entry = NULL;</div><div class='del'>-        list-&gt;size = 0;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-array_from_list(List const *list)</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-    Entry *entry;</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    for (entry = list-&gt;entries; entry; entry = entry-&gt;next) {</div><div class='del'>-        rb_ary_push(ary, entry-&gt;value);</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'>-wake_thread(VALUE thread)</div><div class='del'>-{</div><div class='del'>-    return rb_thread_wakeup_alive(thread);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-run_thread(VALUE thread)</div><div class='del'>-{</div><div class='del'>-    thread = wake_thread(thread);</div><div class='del'>-    if (RTEST(thread) &amp;&amp; !rb_thread_critical)</div><div class='del'>-	rb_thread_schedule();</div><div class='del'>-    return thread;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-wake_one(List *list)</div><div class='del'>-{</div><div class='del'>-    VALUE waking;</div><div class='del'>-</div><div class='del'>-    waking = Qnil;</div><div class='del'>-    while (list-&gt;entries &amp;&amp; !RTEST(waking)) {</div><div class='del'>-	waking = wake_thread(shift_list(list));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return waking;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-wake_all(List *list)</div><div class='del'>-{</div><div class='del'>-    while (list-&gt;entries) {</div><div class='del'>-        wake_one(list);</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'>-wait_list_inner(List *list)</div><div class='del'>-{</div><div class='del'>-    push_list(list, rb_thread_current());</div><div class='del'>-    rb_thread_stop();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-wait_list_cleanup(List *list)</div><div class='del'>-{</div><div class='del'>-    /* cleanup in case of spurious wakeups */</div><div class='del'>-    remove_one(list, rb_thread_current());</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-wait_list(List *list)</div><div class='del'>-{</div><div class='del'>-    return rb_ensure(wait_list_inner, (VALUE)list, wait_list_cleanup, (VALUE)list);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-kill_waiting_threads(List *waiting)</div><div class='del'>-{</div><div class='del'>-    Entry *entry;</div><div class='del'>-</div><div class='del'>-    for (entry = waiting-&gt;entries; entry; entry = entry-&gt;next) {</div><div class='del'>-	rb_thread_kill(entry-&gt;value);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Mutex</div><div class='del'>- *</div><div class='del'>- * Mutex implements a simple semaphore that can be used to coordinate access to</div><div class='del'>- * shared data from multiple concurrent threads.</div><div class='del'>- *</div><div class='del'>- * Example:</div><div class='del'>- *</div><div class='del'>- *   require 'thread'</div><div class='del'>- *   semaphore = Mutex.new</div><div class='del'>- *</div><div class='del'>- *   a = Thread.new {</div><div class='del'>- *     semaphore.synchronize {</div><div class='del'>- *       # access shared resource</div><div class='del'>- *     }</div><div class='del'>- *   }</div><div class='del'>- *</div><div class='del'>- *   b = Thread.new {</div><div class='del'>- *     semaphore.synchronize {</div><div class='del'>- *       # access shared resource</div><div class='del'>- *     }</div><div class='del'>- *   }</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-typedef struct _Mutex {</div><div class='del'>-    VALUE owner;</div><div class='del'>-    List waiting;</div><div class='del'>-} Mutex;</div><div class='del'>-</div><div class='del'>-#define MUTEX_LOCKED_P(mutex) (RTEST((mutex)-&gt;owner) &amp;&amp; rb_thread_alive_p((mutex)-&gt;owner))</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-mark_mutex(Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(mutex-&gt;owner);</div><div class='del'>-    mark_list(&amp;mutex-&gt;waiting);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-finalize_mutex(Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    finalize_list(&amp;mutex-&gt;waiting);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-free_mutex(Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    kill_waiting_threads(&amp;mutex-&gt;waiting);</div><div class='del'>-    finalize_mutex(mutex);</div><div class='del'>-    xfree(mutex);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-init_mutex(Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    mutex-&gt;owner = Qnil;</div><div class='del'>-    init_list(&amp;mutex-&gt;waiting);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: new</div><div class='del'>- * call-seq: Mutex.new</div><div class='del'>- * </div><div class='del'>- * Creates a new Mutex</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE </div><div class='del'>-rb_mutex_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    Mutex *mutex;</div><div class='del'>-    mutex = ALLOC(Mutex);</div><div class='del'>-    init_mutex(mutex);</div><div class='del'>-    return Data_Wrap_Struct(klass, mark_mutex, free_mutex, mutex);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: locked?</div><div class='del'>- * call-seq: locked?</div><div class='del'>- *</div><div class='del'>- * Returns +true+ if this lock is currently held by some thread.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mutex_locked_p(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Mutex *mutex;</div><div class='del'>-    Data_Get_Struct(self, Mutex, mutex);</div><div class='del'>-    return MUTEX_LOCKED_P(mutex) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: try_lock</div><div class='del'>- * call-seq: try_lock</div><div class='del'>- *</div><div class='del'>- * Attempts to obtain the lock and returns immediately. Returns +true+ if the</div><div class='del'>- * lock was granted.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mutex_try_lock(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Mutex *mutex;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, Mutex, mutex);</div><div class='del'>-</div><div class='del'>-    if (MUTEX_LOCKED_P(mutex))</div><div class='del'>-        return Qfalse;</div><div class='del'>-</div><div class='del'>-    mutex-&gt;owner = rb_thread_current();</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: lock</div><div class='del'>- * call-seq: lock</div><div class='del'>- *</div><div class='del'>- * Attempts to grab the lock and waits if it isn't available.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lock_mutex(Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    VALUE current;</div><div class='del'>-    current = rb_thread_current();</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = 1;</div><div class='del'>-</div><div class='del'>-    if (!MUTEX_LOCKED_P(mutex)) {</div><div class='del'>-	mutex-&gt;owner = current;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	do {</div><div class='del'>-	    wait_list(&amp;mutex-&gt;waiting);</div><div class='del'>-	    rb_thread_critical = 1;</div><div class='del'>-	    if (!MUTEX_LOCKED_P(mutex)) {</div><div class='del'>-		mutex-&gt;owner = current;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	} while (mutex-&gt;owner != current);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = 0;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mutex_lock(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Mutex *mutex;</div><div class='del'>-    Data_Get_Struct(self, Mutex, mutex);</div><div class='del'>-    lock_mutex(mutex);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: unlock</div><div class='del'>- *</div><div class='del'>- * Releases the lock. Returns +nil+ if ref wasn't locked.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-unlock_mutex_inner(Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    VALUE waking;</div><div class='del'>-</div><div class='del'>-    if (mutex-&gt;owner != rb_thread_current()) {</div><div class='del'>-	rb_raise(rb_eThreadError, "not owner");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    waking = wake_one(&amp;mutex-&gt;waiting);</div><div class='del'>-    mutex-&gt;owner = waking;</div><div class='del'>-</div><div class='del'>-    return waking;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_critical(VALUE value)</div><div class='del'>-{</div><div class='del'>-    rb_thread_critical = (int)value;</div><div class='del'>-    return Qundef;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-unlock_mutex(Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    VALUE waking = thread_exclusive(unlock_mutex_inner, (VALUE)mutex);</div><div class='del'>-</div><div class='del'>-    if (!RTEST(waking)) {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    run_thread(waking);</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'>-rb_mutex_unlock(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Mutex *mutex;</div><div class='del'>-    Data_Get_Struct(self, Mutex, mutex);</div><div class='del'>-</div><div class='del'>-    if (RTEST(unlock_mutex(mutex))) {</div><div class='del'>-        return self;</div><div class='del'>-    } else {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: exclusive_unlock</div><div class='del'>- * call-seq: exclusive_unlock { ... }</div><div class='del'>- *</div><div class='del'>- * If the mutex is locked, unlocks the mutex, wakes one waiting thread, and</div><div class='del'>- * yields in a critical section.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mutex_exclusive_unlock_inner(Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    VALUE waking;</div><div class='del'>-    waking = unlock_mutex_inner(mutex);</div><div class='del'>-    rb_yield(Qundef);</div><div class='del'>-    return waking;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mutex_exclusive_unlock(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Mutex *mutex;</div><div class='del'>-    VALUE waking;</div><div class='del'>-    Data_Get_Struct(self, Mutex, mutex);</div><div class='del'>-</div><div class='del'>-    waking = thread_exclusive(rb_mutex_exclusive_unlock_inner, (VALUE)mutex);</div><div class='del'>-</div><div class='del'>-    if (!RTEST(waking)) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    run_thread(waking);</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'>- * Document-method: synchronize</div><div class='del'>- * call-seq: synchronize { ... }</div><div class='del'>- *</div><div class='del'>- * Obtains a lock, runs the block, and releases the lock when the block</div><div class='del'>- * completes.  See the example under Mutex.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_mutex_synchronize(VALUE self)</div><div class='del'>-{</div><div class='del'>-    rb_mutex_lock(self);</div><div class='del'>-    return rb_ensure(rb_yield, Qundef, rb_mutex_unlock, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: ConditionVariable</div><div class='del'>- *</div><div class='del'>- * ConditionVariable objects augment class Mutex. Using condition variables,</div><div class='del'>- * it is possible to suspend while in the middle of a critical section until a</div><div class='del'>- * resource becomes available.</div><div class='del'>- *</div><div class='del'>- * Example:</div><div class='del'>- *</div><div class='del'>- *   require 'thread'</div><div class='del'>- *</div><div class='del'>- *   mutex = Mutex.new</div><div class='del'>- *   resource = ConditionVariable.new</div><div class='del'>- *</div><div class='del'>- *   a = Thread.new {</div><div class='del'>- *     mutex.synchronize {</div><div class='del'>- *       # Thread 'a' now needs the resource</div><div class='del'>- *       resource.wait(mutex)</div><div class='del'>- *       # 'a' can now have the resource</div><div class='del'>- *     }</div><div class='del'>- *   }</div><div class='del'>- *</div><div class='del'>- *   b = Thread.new {</div><div class='del'>- *     mutex.synchronize {</div><div class='del'>- *       # Thread 'b' has finished using the resource</div><div class='del'>- *       resource.signal</div><div class='del'>- *     }</div><div class='del'>- *   }</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-typedef struct _ConditionVariable {</div><div class='del'>-    List waiting;</div><div class='del'>-} ConditionVariable;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-mark_condvar(ConditionVariable *condvar)</div><div class='del'>-{</div><div class='del'>-    mark_list(&amp;condvar-&gt;waiting);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-finalize_condvar(ConditionVariable *condvar)</div><div class='del'>-{</div><div class='del'>-    finalize_list(&amp;condvar-&gt;waiting);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-free_condvar(ConditionVariable *condvar)</div><div class='del'>-{</div><div class='del'>-    kill_waiting_threads(&amp;condvar-&gt;waiting);</div><div class='del'>-    finalize_condvar(condvar);</div><div class='del'>-    xfree(condvar);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-init_condvar(ConditionVariable *condvar)</div><div class='del'>-{</div><div class='del'>-    init_list(&amp;condvar-&gt;waiting);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: new</div><div class='del'>- * call-seq: ConditionVariable.new</div><div class='del'>- *</div><div class='del'>- * Creates a new ConditionVariable</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_condvar_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    ConditionVariable *condvar;</div><div class='del'>-</div><div class='del'>-    condvar = ALLOC(ConditionVariable);</div><div class='del'>-    init_condvar(condvar);</div><div class='del'>-</div><div class='del'>-    return Data_Wrap_Struct(klass, mark_condvar, free_condvar, condvar);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: wait</div><div class='del'>- * call-seq: wait</div><div class='del'>- *</div><div class='del'>- * Releases the lock held in +mutex+ and waits; reacquires the lock on wakeup.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-wait_condvar(ConditionVariable *condvar, Mutex *mutex)</div><div class='del'>-{</div><div class='del'>-    VALUE waking;</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = 1;</div><div class='del'>-    if (rb_thread_current() != mutex-&gt;owner) {</div><div class='del'>-        rb_thread_critical = 0;</div><div class='del'>-        rb_raise(rb_eThreadError, "not owner of the synchronization mutex");</div><div class='del'>-    }</div><div class='del'>-    waking = unlock_mutex_inner(mutex);</div><div class='del'>-    if (RTEST(waking)) {</div><div class='del'>-	wake_thread(waking);</div><div class='del'>-    }</div><div class='del'>-    rb_ensure(wait_list, (VALUE)&amp;condvar-&gt;waiting, lock_mutex, (VALUE)mutex);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-legacy_exclusive_unlock(VALUE mutex)</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(mutex, rb_intern("exclusive_unlock"), 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-typedef struct {</div><div class='del'>-    ConditionVariable *condvar;</div><div class='del'>-    VALUE mutex;</div><div class='del'>-} legacy_wait_args;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-legacy_wait(VALUE unused, legacy_wait_args *args)</div><div class='del'>-{</div><div class='del'>-    wait_list(&amp;args-&gt;condvar-&gt;waiting);</div><div class='del'>-    rb_funcall(args-&gt;mutex, rb_intern("lock"), 0);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_condvar_wait(VALUE self, VALUE mutex_v)</div><div class='del'>-{</div><div class='del'>-    ConditionVariable *condvar;</div><div class='del'>-    Data_Get_Struct(self, ConditionVariable, condvar);</div><div class='del'>-</div><div class='del'>-    if (CLASS_OF(mutex_v) != rb_cMutex) {</div><div class='del'>-        /* interoperate with legacy mutex */</div><div class='del'>-        legacy_wait_args args;</div><div class='del'>-        args.condvar = condvar;</div><div class='del'>-        args.mutex = mutex_v;</div><div class='del'>-        rb_iterate(legacy_exclusive_unlock, mutex_v, legacy_wait, (VALUE)&amp;args);</div><div class='del'>-    } else {</div><div class='del'>-        Mutex *mutex;</div><div class='del'>-        Data_Get_Struct(mutex_v, Mutex, mutex);</div><div class='del'>-        wait_condvar(condvar, mutex);</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'>- * Document-method: broadcast</div><div class='del'>- * call-seq: broadcast</div><div class='del'>- *</div><div class='del'>- * Wakes up all threads waiting for this condition.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_condvar_broadcast(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ConditionVariable *condvar;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, ConditionVariable, condvar);</div><div class='del'>-  </div><div class='del'>-    thread_exclusive(wake_all, (VALUE)&amp;condvar-&gt;waiting);</div><div class='del'>-    rb_thread_schedule();</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'>- * Document-method: signal</div><div class='del'>- * call-seq: signal</div><div class='del'>- *</div><div class='del'>- * Wakes up the first thread in line waiting for this condition.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-signal_condvar(ConditionVariable *condvar)</div><div class='del'>-{</div><div class='del'>-    VALUE waking = thread_exclusive(wake_one, (VALUE)&amp;condvar-&gt;waiting);</div><div class='del'>-</div><div class='del'>-    if (RTEST(waking)) {</div><div class='del'>-        run_thread(waking);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_condvar_signal(VALUE self)</div><div class='del'>-{</div><div class='del'>-    ConditionVariable *condvar;</div><div class='del'>-    Data_Get_Struct(self, ConditionVariable, condvar);</div><div class='del'>-    signal_condvar(condvar);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Queue</div><div class='del'>- *</div><div class='del'>- * This class provides a way to synchronize communication between threads.</div><div class='del'>- *</div><div class='del'>- * Example:</div><div class='del'>- *</div><div class='del'>- *   require 'thread'</div><div class='del'>- *</div><div class='del'>- *   queue = Queue.new</div><div class='del'>- *</div><div class='del'>- *   producer = Thread.new do</div><div class='del'>- *     5.times do |i|</div><div class='del'>- *       sleep rand(i) # simulate expense</div><div class='del'>- *       queue &lt;&lt; i</div><div class='del'>- *       puts "#{i} produced"</div><div class='del'>- *     end</div><div class='del'>- *   end</div><div class='del'>- *</div><div class='del'>- *   consumer = Thread.new do</div><div class='del'>- *     5.times do |i|</div><div class='del'>- *       value = queue.pop</div><div class='del'>- *       sleep rand(i/2) # simulate expense</div><div class='del'>- *       puts "consumed #{value}"</div><div class='del'>- *     end</div><div class='del'>- *   end</div><div class='del'>- *</div><div class='del'>- *   consumer.join</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-typedef struct _Queue {</div><div class='del'>-    Mutex mutex;</div><div class='del'>-    ConditionVariable value_available;</div><div class='del'>-    ConditionVariable space_available;</div><div class='del'>-    List values;</div><div class='del'>-    unsigned long capacity;</div><div class='del'>-} Queue;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-mark_queue(Queue *queue)</div><div class='del'>-{</div><div class='del'>-    mark_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    mark_condvar(&amp;queue-&gt;value_available);</div><div class='del'>-    mark_condvar(&amp;queue-&gt;space_available);</div><div class='del'>-    mark_list(&amp;queue-&gt;values);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-finalize_queue(Queue *queue)</div><div class='del'>-{</div><div class='del'>-    finalize_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    finalize_condvar(&amp;queue-&gt;value_available);</div><div class='del'>-    finalize_condvar(&amp;queue-&gt;space_available);</div><div class='del'>-    finalize_list(&amp;queue-&gt;values);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-free_queue(Queue *queue)</div><div class='del'>-{</div><div class='del'>-    kill_waiting_threads(&amp;queue-&gt;mutex.waiting);</div><div class='del'>-    kill_waiting_threads(&amp;queue-&gt;space_available.waiting);</div><div class='del'>-    kill_waiting_threads(&amp;queue-&gt;value_available.waiting);</div><div class='del'>-    finalize_queue(queue);</div><div class='del'>-    xfree(queue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-init_queue(Queue *queue)</div><div class='del'>-{</div><div class='del'>-    init_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    init_condvar(&amp;queue-&gt;value_available);</div><div class='del'>-    init_condvar(&amp;queue-&gt;space_available);</div><div class='del'>-    init_list(&amp;queue-&gt;values);</div><div class='del'>-    queue-&gt;capacity = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: new</div><div class='del'>- * call-seq: new</div><div class='del'>- *</div><div class='del'>- * Creates a new queue.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_queue_alloc(VALUE klass)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    queue = ALLOC(Queue);</div><div class='del'>-    init_queue(queue);</div><div class='del'>-    return Data_Wrap_Struct(klass, mark_queue, free_queue, queue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_queue_marshal_load(VALUE self, VALUE data)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    VALUE array;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    array = rb_marshal_load(data);</div><div class='del'>-    if (TYPE(array) != T_ARRAY) {</div><div class='del'>-	rb_raise(rb_eTypeError, "expected Array of queue data");</div><div class='del'>-    }</div><div class='del'>-    if (RARRAY(array)-&gt;len &lt; 1) {</div><div class='del'>-	rb_raise(rb_eArgError, "missing capacity value");</div><div class='del'>-    }</div><div class='del'>-    queue-&gt;capacity = NUM2ULONG(rb_ary_shift(array));</div><div class='del'>-    push_multiple_list(&amp;queue-&gt;values, RARRAY(array)-&gt;ptr, (unsigned)RARRAY(array)-&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 VALUE</div><div class='del'>-rb_queue_marshal_dump(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    VALUE array;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    array = array_from_list(&amp;queue-&gt;values);</div><div class='del'>-    rb_ary_unshift(array, ULONG2NUM(queue-&gt;capacity));</div><div class='del'>-    return rb_marshal_dump(array, Qnil);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: clear</div><div class='del'>- * call-seq: clear</div><div class='del'>- *</div><div class='del'>- * Removes all objects from the queue.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_queue_clear(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    lock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    clear_list(&amp;queue-&gt;values);</div><div class='del'>-    signal_condvar(&amp;queue-&gt;space_available);</div><div class='del'>-    unlock_mutex(&amp;queue-&gt;mutex);</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'>- * Document-method: empty?</div><div class='del'>- * call-seq: empty?</div><div class='del'>- *</div><div class='del'>- * Returns +true+ if the queue is empty.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_queue_empty_p(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    VALUE result;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    lock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    result = queue-&gt;values.size == 0 ? Qtrue : Qfalse;</div><div class='del'>-    unlock_mutex(&amp;queue-&gt;mutex);</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'>- * Document-method: length</div><div class='del'>- * call-seq: length</div><div class='del'>- *</div><div class='del'>- * Returns the length of the queue.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_queue_length(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    VALUE result;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    lock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    result = ULONG2NUM(queue-&gt;values.size);</div><div class='del'>-    unlock_mutex(&amp;queue-&gt;mutex);</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'>- * Document-method: num_waiting</div><div class='del'>- * call-seq: num_waiting</div><div class='del'>- *</div><div class='del'>- * Returns the number of threads waiting on the queue.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_queue_num_waiting(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    VALUE result;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    lock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    result = ULONG2NUM(queue-&gt;value_available.waiting.size +</div><div class='del'>-      queue-&gt;space_available.waiting.size);</div><div class='del'>-    unlock_mutex(&amp;queue-&gt;mutex);</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'>- * Document-method: pop</div><div class='del'>- * call_seq: pop(non_block=false)</div><div class='del'>- *</div><div class='del'>- * Retrieves data from the queue.  If the queue is empty, the calling thread is</div><div class='del'>- * suspended until data is pushed onto the queue.  If +non_block+ is true, the</div><div class='del'>- * thread isn't suspended, and an exception is raised.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_queue_pop(int argc, VALUE *argv, VALUE self)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    int should_block;</div><div class='del'>-    VALUE result;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-        should_block = 1;</div><div class='del'>-    } else if (argc == 1) {</div><div class='del'>-        should_block = !RTEST(argv[0]);</div><div class='del'>-    } else {</div><div class='del'>-        rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    lock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    if (!queue-&gt;values.entries &amp;&amp; !should_block) {</div><div class='del'>-        unlock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-        rb_raise(rb_eThreadError, "queue empty");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while (!queue-&gt;values.entries) {</div><div class='del'>-        wait_condvar(&amp;queue-&gt;value_available, &amp;queue-&gt;mutex);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    result = shift_list(&amp;queue-&gt;values);</div><div class='del'>-    if (queue-&gt;capacity &amp;&amp; queue-&gt;values.size &lt; queue-&gt;capacity) {</div><div class='del'>-        signal_condvar(&amp;queue-&gt;space_available);</div><div class='del'>-    }</div><div class='del'>-    unlock_mutex(&amp;queue-&gt;mutex);</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'>- * Document-method: push</div><div class='del'>- * call-seq: push(obj)</div><div class='del'>- *</div><div class='del'>- * Pushes +obj+ to the queue.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_queue_push(VALUE self, VALUE value)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    lock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    while (queue-&gt;capacity &amp;&amp; queue-&gt;values.size &gt;= queue-&gt;capacity) {</div><div class='del'>-        wait_condvar(&amp;queue-&gt;space_available, &amp;queue-&gt;mutex);</div><div class='del'>-    }</div><div class='del'>-    push_list(&amp;queue-&gt;values, value);</div><div class='del'>-    signal_condvar(&amp;queue-&gt;value_available);</div><div class='del'>-    unlock_mutex(&amp;queue-&gt;mutex);</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'>- * Document-class: SizedQueue</div><div class='del'>- *</div><div class='del'>- * This class represents queues of specified size capacity.  The push operation</div><div class='del'>- * may be blocked if the capacity is full.</div><div class='del'>- *</div><div class='del'>- * See Queue for an example of how a SizedQueue works.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: new</div><div class='del'>- * call-seq: new</div><div class='del'>- *</div><div class='del'>- * Creates a fixed-length queue with a maximum size of +max+.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: max</div><div class='del'>- * call-seq: max</div><div class='del'>- *</div><div class='del'>- * Returns the maximum size of the queue.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_sized_queue_max(VALUE self)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    VALUE result;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    lock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    result = ULONG2NUM(queue-&gt;capacity);</div><div class='del'>-    unlock_mutex(&amp;queue-&gt;mutex);</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'>- * Document-method: max=</div><div class='del'>- * call-seq: max=(size)</div><div class='del'>- *</div><div class='del'>- * Sets the maximum size of the queue.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_sized_queue_max_set(VALUE self, VALUE value)</div><div class='del'>-{</div><div class='del'>-    Queue *queue;</div><div class='del'>-    unsigned long new_capacity;</div><div class='del'>-    unsigned long difference;</div><div class='del'>-    Data_Get_Struct(self, Queue, queue);</div><div class='del'>-</div><div class='del'>-    new_capacity = NUM2ULONG(value);</div><div class='del'>-</div><div class='del'>-    if (new_capacity &lt; 1) {</div><div class='del'>-        rb_raise(rb_eArgError, "value must be positive");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    lock_mutex(&amp;queue-&gt;mutex);</div><div class='del'>-    if (queue-&gt;capacity &amp;&amp; new_capacity &gt; queue-&gt;capacity) {</div><div class='del'>-        difference = new_capacity - queue-&gt;capacity;</div><div class='del'>-    } else {</div><div class='del'>-        difference = 0;</div><div class='del'>-    }</div><div class='del'>-    queue-&gt;capacity = new_capacity;</div><div class='del'>-    for (; difference &gt; 0; --difference) {</div><div class='del'>-        signal_condvar(&amp;queue-&gt;space_available);</div><div class='del'>-    }</div><div class='del'>-    unlock_mutex(&amp;queue-&gt;mutex);</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'>- * Document-method: push</div><div class='del'>- * call-seq: push(obj)</div><div class='del'>- *</div><div class='del'>- * Pushes +obj+ to the queue.  If there is no space left in the queue, waits</div><div class='del'>- * until space becomes available.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: pop</div><div class='del'>- * call-seq: pop(non_block=false)</div><div class='del'>- *</div><div class='del'>- * Retrieves data from the queue and runs a waiting thread, if any.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/* for marshalling mutexes and condvars */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-dummy_load(VALUE self, VALUE string)</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'>-dummy_dump(VALUE self)</div><div class='del'>-{</div><div class='del'>-    return rb_str_new2("");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_thread(void)</div><div class='del'>-{</div><div class='del'>-    rb_define_singleton_method(rb_cThread, "exclusive", rb_thread_exclusive, 0);</div><div class='del'>-</div><div class='del'>-    rb_cMutex = rb_define_class("Mutex", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(rb_cMutex, rb_mutex_alloc);</div><div class='del'>-    rb_define_method(rb_cMutex, "marshal_load", dummy_load, 1);</div><div class='del'>-    rb_define_method(rb_cMutex, "marshal_dump", dummy_dump, 0);</div><div class='del'>-    rb_define_method(rb_cMutex, "locked?", rb_mutex_locked_p, 0);</div><div class='del'>-    rb_define_method(rb_cMutex, "try_lock", rb_mutex_try_lock, 0);</div><div class='del'>-    rb_define_method(rb_cMutex, "lock", rb_mutex_lock, 0);</div><div class='del'>-    rb_define_method(rb_cMutex, "unlock", rb_mutex_unlock, 0);</div><div class='del'>-    rb_define_method(rb_cMutex, "exclusive_unlock", rb_mutex_exclusive_unlock, 0);</div><div class='del'>-    rb_define_method(rb_cMutex, "synchronize", rb_mutex_synchronize, 0);</div><div class='del'>-</div><div class='del'>-    rb_cConditionVariable = rb_define_class("ConditionVariable", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(rb_cConditionVariable, rb_condvar_alloc);</div><div class='del'>-    rb_define_method(rb_cConditionVariable, "marshal_load", dummy_load, 1);</div><div class='del'>-    rb_define_method(rb_cConditionVariable, "marshal_dump", dummy_dump, 0);</div><div class='del'>-    rb_define_method(rb_cConditionVariable, "wait", rb_condvar_wait, 1);</div><div class='del'>-    rb_define_method(rb_cConditionVariable, "broadcast", rb_condvar_broadcast, 0);</div><div class='del'>-    rb_define_method(rb_cConditionVariable, "signal", rb_condvar_signal, 0);</div><div class='del'>-</div><div class='del'>-    rb_cQueue = rb_define_class("Queue", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(rb_cQueue, rb_queue_alloc);</div><div class='del'>-    rb_define_method(rb_cQueue, "marshal_load", rb_queue_marshal_load, 1);</div><div class='del'>-    rb_define_method(rb_cQueue, "marshal_dump", rb_queue_marshal_dump, 0);</div><div class='del'>-    rb_define_method(rb_cQueue, "clear", rb_queue_clear, 0);</div><div class='del'>-    rb_define_method(rb_cQueue, "empty?", rb_queue_empty_p, 0);</div><div class='del'>-    rb_define_method(rb_cQueue, "length", rb_queue_length, 0);</div><div class='del'>-    rb_define_method(rb_cQueue, "num_waiting", rb_queue_num_waiting, 0);</div><div class='del'>-    rb_define_method(rb_cQueue, "pop", rb_queue_pop, -1);</div><div class='del'>-    rb_define_method(rb_cQueue, "push", rb_queue_push, 1);</div><div class='del'>-    rb_alias(rb_cQueue, rb_intern("enq"), rb_intern("push"));</div><div class='del'>-    rb_alias(rb_cQueue, rb_intern("&lt;&lt;"), rb_intern("push"));</div><div class='del'>-    rb_alias(rb_cQueue, rb_intern("deq"), rb_intern("pop"));</div><div class='del'>-    rb_alias(rb_cQueue, rb_intern("shift"), rb_intern("pop"));</div><div class='del'>-    rb_alias(rb_cQueue, rb_intern("size"), rb_intern("length"));</div><div class='del'>-</div><div class='del'>-    rb_cSizedQueue = rb_define_class("SizedQueue", rb_cQueue);</div><div class='del'>-    rb_define_method(rb_cSizedQueue, "initialize", rb_sized_queue_max_set, 1);</div><div class='del'>-    rb_define_method(rb_cSizedQueue, "num_waiting", rb_queue_num_waiting, 0);</div><div class='del'>-    rb_define_method(rb_cSizedQueue, "pop", rb_queue_pop, -1);</div><div class='del'>-    rb_define_method(rb_cSizedQueue, "push", rb_queue_push, 1);</div><div class='del'>-    rb_define_method(rb_cSizedQueue, "max", rb_sized_queue_max, 0);</div><div class='del'>-    rb_define_method(rb_cSizedQueue, "max=", rb_sized_queue_max_set, 1);</div><div class='del'>-    rb_alias(rb_cSizedQueue, rb_intern("enq"), rb_intern("push"));</div><div class='del'>-    rb_alias(rb_cSizedQueue, rb_intern("&lt;&lt;"), rb_intern("push"));</div><div class='del'>-    rb_alias(rb_cSizedQueue, rb_intern("deq"), rb_intern("pop"));</div><div class='del'>-    rb_alias(rb_cSizedQueue, rb_intern("shift"), rb_intern("pop"));</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/.cvsignore b/ext/tk/.cvsignore<br/>deleted file mode 100644<br/>index 44e7f262dc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/.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'>-*.log</div><div class='head'>diff --git a/ext/tk/ChangeLog.tkextlib b/ext/tk/ChangeLog.tkextlib<br/>deleted file mode 100644<br/>index 8c5d01a954..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/ChangeLog.tkextlib?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/ChangeLog.tkextlib</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,924 +0,0 @@</div><div class='del'>-2008-05-12  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tkDND/shape.rb: wrong package name.</div><div class='del'>-</div><div class='del'>---------------&lt; ... some changes ... &gt;------------------</div><div class='del'>-</div><div class='del'>-2007-05-26  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tcllib/tablelist.rb: fix typo.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/tile/dialog.rb: forget to give an argument.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/version.rb: update RELEASE_DATE.</div><div class='del'>-</div><div class='del'>-2007-01-26  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/checkbox.rb: wrong number of arguments </div><div class='del'>-	  [ruby-Bugs-7776].</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/iwidgets/radiobox.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt/tile/checkbutton.rb: change primary name </div><div class='del'>-	  of class [ruby-dev:30080].</div><div class='del'>-</div><div class='del'>-	* ext/tk/lib/tkextlib/blt/tile/radiobutton.rb: ditto.</div><div class='del'>-</div><div class='del'>-2006-11-07  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/treeview.rb : minor bug fix.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/table.rb: fix bugs which forbade use of </div><div class='del'>-	  '::blt::table' command. Now, probably, it'll works properly.</div><div class='del'>-</div><div class='del'>-2006-11-06  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/version.rb: keep release date of tkextlib on </div><div class='del'>-	  "Tk::Tkextlib_RELEASE_DATE".</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/treeview.rb : support Tile 0.7.8. </div><div class='del'>-	  Now, you can handle tree items as objects. </div><div class='del'>-</div><div class='del'>-2006-10-04  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile.rb, lib/tkextlib/tile/* : support Tile 0.7.6.</div><div class='del'>-</div><div class='del'>-2006-10-03  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/SUPPORT_STATUS: [ruby-talk:211939] check links</div><div class='del'>-	  of extensions.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt/container.rb: define instance methods properly.</div><div class='del'>-</div><div class='del'>-        * lib/tkextlib/tile/tcombobox.rb: bug fix [ruby-talk:213003].</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/treeview.rb: ditto.</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/tile/sizegrip.rb: [new] add 'ttk::sizegrip' widget.</div><div class='del'>-</div><div class='del'>-2006-08-31  Hidetoshi NAGAI  &lt;nagai@ai.kyutech.ac.jp&gt;</div><div class='del'>-</div><div class='del'>-	* lib/tkextlib/blt.rb: double dashes (--) option doesn't work</div><div class='del'>-	  properly on some versions of BLT (wrong description on the</div><div class='del'>-	  manual of `blt::bgexec'?).</div><div class='del'>-</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/MANUAL_tcltklib.eng b/ext/tk/MANUAL_tcltklib.eng<br/>deleted file mode 100644<br/>index 6fa775b7de..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/MANUAL_tcltklib.eng?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/MANUAL_tcltklib.eng</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,469 +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 TclTkLib::RELEASE_TYPE</div><div class='del'>-    : Defines release type number of Tcl/Tk</div><div class='del'>-</div><div class='del'>-       ALPHA</div><div class='del'>-         : ALPHA release</div><div class='del'>-</div><div class='del'>-       BETA</div><div class='del'>-         : BETA release</div><div class='del'>-</div><div class='del'>-       FINAL</div><div class='del'>-         : FINAL release</div><div class='del'>-</div><div class='del'>-  [module methods]</div><div class='del'>-     get_version()</div><div class='del'>-        : return an array of major, minor, release-type number, </div><div class='del'>-        : number, release-type name, and patchlevel of current </div><div class='del'>-        : Tcl/Tk library.</div><div class='del'>-</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'>-    encoding_table</div><div class='del'>-       : For Ruby m17n. Return encoding relation table between Ruby's </div><div class='del'>-       : Encoding object and Tcl's encoding 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'>-  : However, current tcltklib supports Ruby's 'break' and 'next' to </div><div class='del'>-  : get the same effect. That is, those classes are obsolete. Those </div><div class='del'>-  : exist for backward compatibility. </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 7df42997b4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/MANUAL_tcltklib.eucj?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/MANUAL_tcltklib.eucj</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,579 +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'>-   ¥â¥¸¥å¡¼¥ë TclTkLib::RELEASE_TYPE</div><div class='del'>-      : Tcl/Tk ¤Î¥ê¥ê¡¼¥¹¥¿¥¤¥×ÈÖ¹æ¤ÎÄêµÁ</div><div class='del'>-</div><div class='del'>-      Äê¿ô  ALPHA</div><div class='del'>-         : ALPHA ¥ê¥ê¡¼¥¹</div><div class='del'>-</div><div class='del'>-      Äê¿ô  BETA</div><div class='del'>-         : BETA ¥ê¥ê¡¼¥¹</div><div class='del'>-</div><div class='del'>-      Äê¿ô  FINAL</div><div class='del'>-         : FINAL ¥ê¥ê¡¼¥¹</div><div class='del'>-</div><div class='del'>-   ¥â¥¸¥å¡¼¥ë¥á¥½¥Ã¥É</div><div class='del'>-      get_version()</div><div class='del'>-         : Tcl/Tk ¤Î major, minor, release-type ÈÖ¹æ, release-type Ì¾,</div><div class='del'>-         : patchlevel ¤òÇÛÎó¤Ë¤·¤ÆÊÖ¤¹¡¥</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'>-      encoding_table</div><div class='del'>-         : Ruby m17n ÍÑ¤Ë Ruby ¤È Tk ¤È¤Î´Ö¤Î encoding ÂÐ±þÉ½¤òÊÖ¤¹¡¥</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'>-   : ¤¿¤À¤·¸½ºß¤Ç¤Ï¡¤¥³¡¼¥ë¥Ð¥Ã¥¯¼êÂ³¤­¤ò Ruby ¤Î break, next ¤Ç½ªÎ»¤¹</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 fce5b0242b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/README.1st?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/README.1st</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +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. When you have some troubles on compiling, </div><div class='del'>-please read README.tcltklib and README.ActiveTcl. </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'>-¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡¥¥³¥ó¥Ñ¥¤¥ë»þ¤Ë²¿¤«ÌäÂê¤¬À¸¤¸¤¿¾ì¹ç¤Ï¡¤README.tcltklib </div><div class='del'>-¤ä README.ActiveTcl ¤ò¸«¤Æ¤¯¤À¤µ¤¤¡¥</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 8c6dd5178f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/README.tcltklib?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/README.tcltklib</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,85 +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-tcltkversion=&lt;version&gt; </div><div class='del'>-      force version of Tcl/Tk libaray</div><div class='del'>-      (e.g. libtcl8.4g.so ==&gt; --with-tcltkversion=8.4g)</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 contains 'tcl.h'</div><div class='del'>- --with-tk-include=&lt;dir&gt;       the directry contains 'tk.h'</div><div class='del'>-</div><div class='del'>- --with-tcl-lib=&lt;dir&gt;          the directry contains 'libtcl&lt;version&gt;.so'</div><div class='del'>- --with-tk-lib=&lt;dir&gt;           the directry contains '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 contains 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'>- --with-X11 / --without-X11    use / not use the X Window System</div><div class='del'>-</div><div class='del'>- --with-X11-dir=&lt;path&gt; </div><div class='del'>-      equal to "--with-X11-include=&lt;path&gt;/include --with-X11-lib=&lt;path&gt;/lib"</div><div class='del'>-</div><div class='del'>- --with-X11-include=&lt;dir&gt;      the directry contais X11 header files</div><div class='del'>- --with-X11-lib=&lt;dir&gt;          the directry contais X11 libraries</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/>deleted file mode 100644<br/>index 2cd9c400f7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</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='head'>diff --git a/ext/tk/extconf.rb b/ext/tk/extconf.rb<br/>deleted file mode 100644<br/>index 4807ea7b40..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,412 +0,0 @@</div><div class='del'>-# extconf.rb for tcltklib</div><div class='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-#is_win32 = (/mswin32|mingw|cygwin|bccwin32/ =~ RUBY_PLATFORM)</div><div class='del'>-is_win32 = (/mswin|mingw|cygwin|bccwin|wince/ =~ 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'>-tk_idir,  tk_ldir  = dir_config("tk")</div><div class='del'>-tcl_idir, tcl_ldir = dir_config("tcl")</div><div class='del'>-x11_idir, x11_ldir = dir_config("X11")</div><div class='del'>-</div><div class='del'>-tk_ldir2  = with_config("tk-lib")</div><div class='del'>-tcl_ldir2 = with_config("tcl-lib")</div><div class='del'>-x11_ldir2 = with_config("X11-lib")</div><div class='del'>-</div><div class='del'>-tk_ldir_list  = [tk_ldir2,  tk_ldir]</div><div class='del'>-tcl_ldir_list = [tcl_ldir2, tcl_ldir]</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'>-tcltk_version = with_config("tcltkversion")</div><div class='del'>-</div><div class='del'>-use_X = with_config("X11", (! is_win32))</div><div class='del'>-</div><div class='del'>-def check_tcltk_version(version)</div><div class='del'>-  return [nil, nil] unless version</div><div class='del'>-</div><div class='del'>-  version = version.strip</div><div class='del'>-</div><div class='del'>-  tclver = version.dup</div><div class='del'>-  tkver  = version.dup</div><div class='del'>-</div><div class='del'>-  major = dot = minor = dot = plvl = ext = nil</div><div class='del'>-</div><div class='del'>-  if version =~ /^(\d)(\.?)(\d)(\.?)(\d*)(.*)$/</div><div class='del'>-    major = $1; minor_dot = $2; minor = $3; plvl_dot  = $4; plvl = $5; ext = $6</div><div class='del'>-    dot = ! minor_dot.empty?</div><div class='del'>-    if plvl_dot.empty? &amp;&amp; ! plvl.empty?</div><div class='del'>-      minor &lt;&lt; plvl</div><div class='del'>-    end</div><div class='del'>-  elsif version =~ /^(\d)(\.?)(\d?)(.*)$/</div><div class='del'>-    major = $1; minor_dot = $2; minor = $3; ext = $4</div><div class='del'>-    dot = ! minor_dot.empty?</div><div class='del'>-  else # unknown -&gt; believe user</div><div class='del'>-    return [tclver, tkver]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # check Tcl7.6 / Tk4.2 ?</div><div class='del'>-  if major == "7" # Tcl7.6 ( not support Tclversion &lt; 7.6 )</div><div class='del'>-    # Tk4.2</div><div class='del'>-    tkver  = "4" + ((dot)? ".": "") + ((minor.empty)? "": "2") + ext</div><div class='del'>-  elsif major == "4" # Tk4.2 ( not support Tkversion &lt; 4.2 )</div><div class='del'>-    # Tcl7.6</div><div class='del'>-    tclver = "7" + ((dot)? ".": "") + ((minor.empty)? "": "6") + ext</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  [tclver, tkver]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def find_tcl(tcllib, stubs, version, *opt_paths)</div><div class='del'>-  default_paths = ["/usr/local/lib", "/usr/pkg/lib", "/usr/lib"]</div><div class='del'>-  default_paths &lt;&lt; "/Tcl/lib"  # default for ActiveTcl</div><div class='del'>-</div><div class='del'>-  if (paths = opt_paths.compact).empty?</div><div class='del'>-    paths = default_paths</div><div class='del'>-  end</div><div class='del'>-</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'>-</div><div class='del'>-  if version &amp;&amp; ! version.empty?</div><div class='del'>-    versions = [version]</div><div class='del'>-  else</div><div class='del'>-    versions = %w[8.6 8.5 8.4 8.3 8.2 8.1 8.0 7.6]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if tcllib</div><div class='del'>-    st = find_library(tcllib, func, *paths)</div><div class='del'>-  else</div><div class='del'>-    st = versions.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("#{lib}#{ver}g", func, *paths) or</div><div class='del'>-           find_library("#{lib}#{ver.delete('.')}g", 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) or</div><div class='del'>-           find_library("tcl#{ver}g", func, *paths) or</div><div class='del'>-           find_library("tcl#{ver.delete('.')}g", func, *paths)</div><div class='del'>-         } || (!version &amp;&amp; find_library(lib, func, *paths))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  unless st</div><div class='del'>-    puts("Warning:: cannot find Tcl library. tcltklib will not be compiled (tcltklib is disabled on your Ruby == Ruby/Tk will not work). Please check configure options.")</div><div class='del'>-  end</div><div class='del'>-  st</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def find_tk(tklib, stubs, version, *opt_paths)</div><div class='del'>-  default_paths = ["/usr/local/lib", "/usr/pkg/lib", "/usr/lib"]</div><div class='del'>-  default_paths &lt;&lt; "/Tcl/lib"  # default for ActiveTcl</div><div class='del'>-</div><div class='del'>-  if (paths = opt_paths.compact).empty?</div><div class='del'>-    paths = default_paths</div><div class='del'>-  end</div><div class='del'>-</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'>-</div><div class='del'>-  if version &amp;&amp; ! version.empty?</div><div class='del'>-    versions = [version]</div><div class='del'>-  else</div><div class='del'>-    versions = %w[8.6 8.5 8.4 8.3 8.2 8.1 8.0 4.2]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if tklib</div><div class='del'>-    st = find_library(tklib, func, *paths)</div><div class='del'>-  else</div><div class='del'>-    st = versions.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("#{lib}#{ver}g", func, *paths) or</div><div class='del'>-           find_library("#{lib}#{ver.delete('.')}g", 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) or </div><div class='del'>-           find_library("tk#{ver}g", func, *paths) or</div><div class='del'>-           find_library("tk#{ver.delete('.')}g", func, *paths)</div><div class='del'>-         } || (!version &amp;&amp; find_library(lib, func, *paths))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  unless st</div><div class='del'>-    puts("Warning:: cannot find Tk library. tcltklib will not be compiled (tcltklib is disabled on your Ruby == Ruby/Tk will not work). Please check configure options.")</div><div class='del'>-  end</div><div class='del'>-  st</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def find_X11(*opt_paths)</div><div class='del'>-  default_paths = </div><div class='del'>-    [ "/usr/X11/lib", "/usr/lib/X11", "/usr/X11R6/lib", "/usr/openwin/lib" ]</div><div class='del'>-  paths = opt_paths.compact.concat(default_paths)</div><div class='del'>-  st = find_library("X11", "XOpenDisplay", *paths)</div><div class='del'>-  unless st</div><div class='del'>-    puts("Warning:: cannot find X11 library. tcltklib will not be compiled (tcltklib is disabled on your Ruby == Ruby/Tk will not work). Please check configure options. If your Tcl/Tk don't require X11, please try --without-X11.")</div><div class='del'>-  end</div><div class='del'>-  st</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'>-tclver, tkver = check_tcltk_version(tcltk_version)</div><div class='del'>-</div><div class='del'>-if have_header("tcl.h") &amp;&amp; have_header("tk.h") &amp;&amp; </div><div class='del'>-    ( tcltk_framework || </div><div class='del'>-        ( ( !use_X || find_X11(x11_ldir2, x11_ldir) ) &amp;&amp;</div><div class='del'>-            find_tcl(tcllib, stubs, tclver, *tcl_ldir_list) &amp;&amp;</div><div class='del'>-            find_tk(tklib, stubs, tkver, *tk_ldir_list) ) )</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'>-    have_func("rb_hash_lookup", "ruby.h")</div><div class='del'>-</div><div class='del'>-    # create</div><div class='del'>-    $defs &lt;&lt; %[-DRUBY_VERSION=\\"#{RUBY_VERSION}\\"]</div><div class='del'>-    $defs &lt;&lt; %[-DRUBY_RELEASE_DATE=\\"#{RUBY_RELEASE_DATE}\\"]</div><div class='del'>-    create_makefile("tcltklib")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/lib/README b/ext/tk/lib/README<br/>deleted file mode 100644<br/>index 5918fe4bf0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-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='del'>-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='del'>-tkafter.rb	handles Tcl after</div><div class='del'>-tkbgerror.rb	Tk error module</div><div class='del'>-tkcanvas.rb	Tk canvas interface</div><div class='del'>-tkclass.rb	provides generic names for Tk classes</div><div class='del'>-tkconsole.rb	console command support</div><div class='del'>-tkdialog.rb	Tk dialog class</div><div class='del'>-tkentry.rb	Tk entry class</div><div class='del'>-tkfont.rb	Tk font support</div><div class='del'>-tkmacpkg.rb	Mac resource support</div><div class='del'>-tkmenubar.rb	TK menubar utility</div><div class='del'>-tkmngfocus.rb	focus manager</div><div class='del'>-tkpalette.rb	pallete support</div><div class='del'>-tkscrollbox.rb	scroll box, also example of compound widget</div><div class='del'>-tktext.rb	text classes</div><div class='del'>-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 ec718678f0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/multi-tk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/multi-tk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3377 +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'>-  WITH_RUBY_VM  = Object.const_defined?(:VM) &amp;&amp; ::VM.class == Class</div><div class='del'>-  WITH_ENCODING = Object.const_defined?(:Encoding) &amp;&amp; ::Encoding.class == Class</div><div class='del'>-</div><div class='del'>-  (@@SLAVE_IP_ID = ['slave'.freeze, '0'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</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'>-    @@TK_CMD_TBL.instance_variable_set('@tbl', Hash.new{|hash,key|</div><div class='del'>-                                           fail IndexError, </div><div class='del'>-                                                "unknown command ID '#{key}'"</div><div class='del'>-                                       }.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?', 'object_id', </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.to_s)}</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'>-      self.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'>-        if MultiTkIp::WITH_ENCODING</div><div class='del'>-          bt.force_encoding('utf-8')</div><div class='del'>-        else</div><div class='del'>-          bt.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-        end</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'>-  unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD</div><div class='del'>-    ### Ruby 1.9 !!!!!!!!!!!!!!!!!!!!!!!!!!</div><div class='del'>-    RUN_EVENTLOOP_ON_MAIN_THREAD = false</div><div class='del'>-  end</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'>-    if !WITH_RUBY_VM || RUN_EVENTLOOP_ON_MAIN_THREAD ### check Ruby 1.9 !!!!!!!</div><div class='del'>-      @interp = TclTkIp.new(name, _keys2opts(keys))</div><div class='del'>-    else ### Ruby 1.9 !!!!!!!!!!!</div><div class='del'>-      @interp_thread = Thread.new{</div><div class='del'>-        current = Thread.current</div><div class='del'>-        current[:interp] = interp = TclTkIp.new(name, _keys2opts(keys))</div><div class='del'>-        #sleep</div><div class='del'>-        current[:mutex] = mutex = Mutex.new</div><div class='del'>-        current[:root_check] = cond_var = ConditionVariable.new</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          current[:status] = interp.mainloop(true)</div><div class='del'>-        rescue Exception=&gt;e</div><div class='del'>-          current[:status] = e</div><div class='del'>-        ensure</div><div class='del'>-          mutex.synchronize{ cond_var.broadcast }</div><div class='del'>-        end</div><div class='del'>-        current[:status] = interp.mainloop(false)</div><div class='del'>-      }</div><div class='del'>-      until @interp_thread[:interp]</div><div class='del'>-        Thread.pass</div><div class='del'>-      end</div><div class='del'>-      # INTERP_THREAD.run</div><div class='del'>-      @interp = @interp_thread[:interp]</div><div class='del'>-</div><div class='del'>-      def self.mainloop(check_root = true)</div><div class='del'>-        begin</div><div class='del'>-          TclTkLib.set_eventloop_window_mode(true)</div><div class='del'>-          @interp_thread.value</div><div class='del'>-        ensure</div><div class='del'>-          TclTkLib.set_eventloop_window_mode(false)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</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, cond, 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.synchronize{ cond.signal }</div><div class='del'>-        end</div><div class='del'>-        mtx = cond = ret = table = script = nil  # clear variables for GC</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  = (Thread.current[:MultiTk_ip_Mutex] ||= Mutex.new)</div><div class='del'>-      cond = (Thread.current[:MultiTk_ip_CondVar] ||= ConditionVariable.new)</div><div class='del'>-      mtx.synchronize{</div><div class='del'>-        @init_ip_env_queue.enq([mtx, cond, ret, table, script])</div><div class='del'>-        cond.wait(mtx)</div><div class='del'>-      }</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'>-    @@SLAVE_IP_ID.mutex.synchronize{</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'>-    }</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'>-      unless WITH_RUBY_VM</div><div class='del'>-        @interp = TclTkIp.new(name, _keys2opts(tk_opts))</div><div class='del'>-      else ### Ruby 1.9 !!!!!!!!!!!</div><div class='del'>-        @interp_thread = Thread.new{</div><div class='del'>-          Thread.current[:interp] = interp = TclTkIp.new(name, _keys2opts(tk_opts))</div><div class='del'>-          #sleep</div><div class='del'>-          TclTkLib.mainloop(true)</div><div class='del'>-        }</div><div class='del'>-        until @interp_thread[:interp]</div><div class='del'>-          Thread.pass</div><div class='del'>-        end</div><div class='del'>-        # INTERP_THREAD.run</div><div class='del'>-        @interp = @interp_thread[:interp]</div><div class='del'>-      end</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'>-        # @interp_thread = nil if RUBY_VERSION &lt; '1.9.0' ### !!!!!!!!!!!</div><div class='del'>-        @interp_thread = nil unless WITH_RUBY_VM  ### Ruby 1.9 !!!!!!!!!!!</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'>-        # @interp_thread = nil if RUBY_VERSION &lt; '1.9.0' ### !!!!!!!!!!!</div><div class='del'>-        @interp_thread = nil unless WITH_RUBY_VM  ### Ruby 1.9 !!!!!!!!!!!</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'>-    @@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'>-    _init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS)</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'>-  def new_master(safe=nil, keys={})</div><div class='del'>-    if MultiTkIp::WITH_RUBY_VM</div><div class='del'>-      #### TODO !!!!!!</div><div class='del'>-      fail RuntimeError, </div><div class='del'>-           'sorry, still not support multiple master-interpreters on Ruby VM'</div><div class='del'>-    end</div><div class='del'>-</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'>-</div><div class='del'>-      return if @interp.deleted?</div><div class='del'>-      @interp._invoke('rename', name, '')</div><div class='del'>-</div><div class='del'>-      return if @interp.deleted?</div><div class='del'>-      @interp._invoke('interp', 'slaves').split.each{|slave|</div><div class='del'>-        return if @interp.deleted?</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_variable_set(:@id, id)</div><div class='del'>-    obj.instance_variable_set(:@mutex, Mutex.new)</div><div class='del'>-    obj.instance_eval{</div><div class='del'>-      def self.mutex</div><div class='del'>-        @mutex</div><div class='del'>-      end</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'>-    }</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'>-</div><div class='del'>-    if WITH_RUBY_VM  ### Ruby 1.9 !!!!!!!!!!!</div><div class='del'>-      return @interp_thread.value if @interp_thread</div><div class='del'>-    end</div><div class='del'>-</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'>-      c = c.chr</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 &lt;&lt; MultiTkIp</div><div class='del'>-  def encoding_table</div><div class='del'>-    __getip.encoding_table</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-class MultiTkIp</div><div class='del'>-  def encoding_table</div><div class='del'>-    @interp.encoding_table</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def force_default_encoding=(mode)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.force_default_encoding = mode</div><div class='del'>-  end</div><div class='del'>-  def force_default_encoding?</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.force_default_encoding?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def default_encoding=(enc)</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.default_encoding = enc</div><div class='del'>-  end</div><div class='del'>-</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'>-  def encoding_name</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.encoding_name</div><div class='del'>-  end</div><div class='del'>-  def encoding_obj</div><div class='del'>-    raise SecurityError, "no permission to manipulate" unless self.manipulable?</div><div class='del'>-    @interp.encoding_obj</div><div class='del'>-  end</div><div class='del'>-  alias encoding encoding_name</div><div class='del'>-  alias default_encoding encoding_name</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'>-if MultiTkIp::WITH_RUBY_VM &amp;&amp; </div><div class='del'>-    ! MultiTkIp::RUN_EVENTLOOP_ON_MAIN_THREAD ### check Ruby 1.9 !!!!!!!</div><div class='del'>-  class MultiTkIp</div><div class='del'>-    INTERP_THREAD = @@DEFAULT_MASTER.instance_variable_get('@interp_thread')</div><div class='del'>-    INTERP_MUTEX  = INTERP_THREAD[:mutex]</div><div class='del'>-    INTERP_ROOT_CHECK = INTERP_THREAD[:root_check]</div><div class='del'>-  end</div><div class='del'>-  module TkCore</div><div class='del'>-    INTERP_THREAD = MultiTkIp::INTERP_THREAD</div><div class='del'>-    INTERP_MUTEX  = MultiTkIp::INTERP_MUTEX</div><div class='del'>-    INTERP_ROOT_CHECK = MultiTkIp::INTERP_ROOT_CHECK</div><div class='del'>-  end</div><div class='del'>-  class MultiTkIp</div><div class='del'>-    remove_const(:INTERP_THREAD)</div><div class='del'>-    remove_const(:INTERP_MUTEX)</div><div class='del'>-    remove_const(:INTERP_ROOT_CHECK)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</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'>-# 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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/tcltk.rb b/ext/tk/lib/tcltk.rb<br/>deleted file mode 100644<br/>index 7f6f41605d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tcltk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tcltk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,367 +0,0 @@</div><div class='del'>-# tof</div><div class='del'>-</div><div class='del'>-#### tcltk library, more direct manipulation of tcl/tk</div><div class='del'>-####    Sep. 5, 1997    Y. Shigehiro</div><div class='del'>-</div><div class='del'>-require "tcltklib"</div><div class='del'>-</div><div class='del'>-################</div><div class='del'>-</div><div class='del'>-# module TclTk: collection of tcl/tk utilities (supplies namespace.)</div><div class='del'>-module TclTk</div><div class='del'>-</div><div class='del'>-  # initialize Hash to hold unique symbols and such</div><div class='del'>-  @namecnt = {}</div><div class='del'>-</div><div class='del'>-  # initialize Hash to hold callbacks</div><div class='del'>-  @callback = {}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TclTk.mainloop(): call TclTkLib.mainloop()</div><div class='del'>-def TclTk.mainloop()</div><div class='del'>-  print("mainloop: start\n") if $DEBUG</div><div class='del'>-  TclTkLib.mainloop()</div><div class='del'>-  print("mainloop: end\n") if $DEBUG</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TclTk.deletecallbackkey(ca): remove callback from TclTk module</div><div class='del'>-#     this does not remove callbacks from tcl/tk interpreter</div><div class='del'>-#     without calling this method, TclTkInterpreter will not be GCed</div><div class='del'>-#   ca: callback(TclTkCallback)</div><div class='del'>-def TclTk.deletecallbackkey(ca)</div><div class='del'>-  print("deletecallbackkey: ", ca.to_s(), "\n") if $DEBUG</div><div class='del'>-  @callback.delete(ca.to_s)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TclTk.dcb(ca, wid, W): call TclTk.deletecallbackkey() for each callbacks</div><div class='del'>-#     in an array.</div><div class='del'>-#     this is for callback for top-level &lt;Destroy&gt;</div><div class='del'>-#   ca: array of callbacks(TclTkCallback)</div><div class='del'>-#   wid: top-level widget(TclTkWidget)</div><div class='del'>-#   w: information about window given by %W(String)</div><div class='del'>-def TclTk.dcb(ca, wid, w)</div><div class='del'>-  if wid.to_s() == w</div><div class='del'>-    ca.each{|i|</div><div class='del'>-      TclTk.deletecallbackkey(i)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TclTk._addcallback(ca): register callback</div><div class='del'>-#   ca: callback(TclTkCallback)</div><div class='del'>-def TclTk._addcallback(ca)</div><div class='del'>-  print("_addcallback: ", ca.to_s(), "\n") if $DEBUG</div><div class='del'>-  @callback[ca.to_s()] = ca</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TclTk._callcallback(key, arg): invoke registered callback</div><div class='del'>-#   key: key to select callback (to_s value of the TclTkCallback)</div><div class='del'>-#   arg: parameter from tcl/tk interpreter</div><div class='del'>-def TclTk._callcallback(key, arg)</div><div class='del'>-  print("_callcallback: ", @callback[key].inspect, "\n") if $DEBUG</div><div class='del'>-  @callback[key]._call(arg)</div><div class='del'>-  # throw out callback value</div><div class='del'>-  # should return String to satisfy rb_eval_string()</div><div class='del'>-  return ""</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# TclTk._newname(prefix): generate unique name(String)</div><div class='del'>-#   prefix: prefix of the unique name</div><div class='del'>-def TclTk._newname(prefix)</div><div class='del'>-  # generated name counter is stored in @namecnt</div><div class='del'>-  if !@namecnt.key?(prefix)</div><div class='del'>-    # first appearing prefix, initialize</div><div class='del'>-    @namecnt[prefix] = 1</div><div class='del'>-  else</div><div class='del'>-    # already appeared prefix, generate next name</div><div class='del'>-    @namecnt[prefix] += 1</div><div class='del'>-  end</div><div class='del'>-  return "#{prefix}#{@namecnt[prefix]}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-################</div><div class='del'>-</div><div class='del'>-# class TclTkInterpreter: tcl/tk interpreter</div><div class='del'>-class TclTkInterpreter</div><div class='del'>-</div><div class='del'>-  # initialize(): </div><div class='del'>-  def initialize()</div><div class='del'>-    # generate interpreter object</div><div class='del'>-    @ip = TclTkIp.new()</div><div class='del'>-</div><div class='del'>-    # add ruby_fmt command to tcl interpreter</div><div class='del'>-    # ruby_fmt command format arguments by `format' and call `ruby' command</div><div class='del'>-    # (notice ruby command receives only one argument)</div><div class='del'>-    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='del'>-    else</div><div class='del'>-      @ip._eval("proc ruby_fmt {fmt args} { set cmd [list ruby [format $fmt $args]] ; uplevel $cmd }")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # @ip._get_eval_string(*args): generate string to evaluate in tcl interpreter</div><div class='del'>-    #   *args: script which is going to be evaluated under tcl/tk</div><div class='del'>-    def @ip._get_eval_string(*args)</div><div class='del'>-      argstr = ""</div><div class='del'>-      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='del'>-      }</div><div class='del'>-      return argstr</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # @ip._eval_args(*args): evaluate string under tcl/tk interpreter</div><div class='del'>-    #     returns result string.</div><div class='del'>-    #   *args: script which is going to be evaluated under tcl/tk</div><div class='del'>-    def @ip._eval_args(*args)</div><div class='del'>-      # calculate the string to eval in the interpreter</div><div class='del'>-      argstr = _get_eval_string(*args)</div><div class='del'>-</div><div class='del'>-      # evaluate under the interpreter</div><div class='del'>-      print("_eval: \"", argstr, "\"") if $DEBUG</div><div class='del'>-      res = _eval(argstr)</div><div class='del'>-      if $DEBUG</div><div class='del'>-        print(" -&gt; \"", res, "\"\n")</div><div class='del'>-      elsif  _return_value() != 0</div><div class='del'>-        print(res, "\n")</div><div class='del'>-      end</div><div class='del'>-      fail(%Q/can't eval "#{argstr}"/) if _return_value() != 0 #'</div><div class='del'>-      return res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # generate tcl/tk command object and register in the hash</div><div class='del'>-    @commands = {}</div><div class='del'>-    # for all commands registered in tcl/tk interpreter:</div><div class='del'>-    @ip._eval("info command").split(/ /).each{|comname|</div><div class='del'>-      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='del'>-      else</div><div class='del'>-        # otherwise, generate TclTkCommand</div><div class='del'>-        @commands[comname] = TclTkCommand.new(@ip, comname)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # commands(): returns hash of the tcl/tk commands</div><div class='del'>-  def commands()</div><div class='del'>-    return @commands</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # rootwidget(): returns root widget(TclTkWidget)</div><div class='del'>-  def rootwidget()</div><div class='del'>-    return @commands["."]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # _tcltkip(): returns @ip(TclTkIp)</div><div class='del'>-  def _tcltkip()</div><div class='del'>-    return @ip</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # method_missing(id, *args): execute undefined method as tcl/tk command</div><div class='del'>-  #   id: method symbol</div><div class='del'>-  #   *args: method arguments</div><div class='del'>-  def method_missing(id, *args)</div><div class='del'>-    # if command named by id registered, then execute it</div><div class='del'>-    if @commands.key?(id.id2name)</div><div class='del'>-      return @commands[id.id2name].e(*args)</div><div class='del'>-    else</div><div class='del'>-      # otherwise, exception</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# class TclTkObject: base class of the tcl/tk objects</div><div class='del'>-class TclTkObject</div><div class='del'>-</div><div class='del'>-  # initialize(ip, exp): </div><div class='del'>-  #   ip: interpreter(TclTkIp)</div><div class='del'>-  #   exp: tcl/tk representation</div><div class='del'>-  def initialize(ip, exp)</div><div class='del'>-    fail("type is not TclTkIp") if !ip.kind_of?(TclTkIp)</div><div class='del'>-    @ip = ip</div><div class='del'>-    @exp = exp</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # to_s(): returns tcl/tk representation</div><div class='del'>-  def to_s()</div><div class='del'>-    return @exp</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# class TclTkCommand: tcl/tk commands</div><div class='del'>-# you should not call TclTkCommand.new()</div><div class='del'>-# commands are created by TclTkInterpreter:initialize()</div><div class='del'>-class TclTkCommand &lt; TclTkObject</div><div class='del'>-</div><div class='del'>-  # e(*args): execute command.  returns String (e is for exec or eval)</div><div class='del'>-  #   *args: command arguments</div><div class='del'>-  def e(*args)</div><div class='del'>-    return @ip._eval_args(to_s(), *args)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# class TclTkLibCommand: tcl/tk commands in the library</div><div class='del'>-class TclTkLibCommand &lt; TclTkCommand</div><div class='del'>-</div><div class='del'>-  # initialize(ip, name): </div><div class='del'>-  #   ip: interpreter(TclTkInterpreter)</div><div class='del'>-  #   name: command name (String)</div><div class='del'>-  def initialize(ip, name)</div><div class='del'>-    super(ip._tcltkip, name)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# class TclTkVariable: tcl/tk variable</div><div class='del'>-class TclTkVariable &lt; TclTkObject</div><div class='del'>-</div><div class='del'>-  # initialize(interp, dat): </div><div class='del'>-  #   interp: interpreter(TclTkInterpreter)</div><div class='del'>-  #   dat: the value to set(String)</div><div class='del'>-  #       if nil, not initialize variable</div><div class='del'>-  def initialize(interp, dat)</div><div class='del'>-    # auto-generate tcl/tk representation (variable name)</div><div class='del'>-    exp = TclTk._newname("v_")</div><div class='del'>-    # initialize TclTkObject</div><div class='del'>-    super(interp._tcltkip(), exp)</div><div class='del'>-    # safe this for `set' command</div><div class='del'>-    @set = interp.commands()["set"]</div><div class='del'>-    # set value</div><div class='del'>-    set(dat) if dat</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # although you can set/refer variable by using set in tcl/tk,</div><div class='del'>-  # we provide the method for accessing variables</div><div class='del'>-</div><div class='del'>-  # set(data): set tcl/tk variable using `set'</div><div class='del'>-  #   data: new value</div><div class='del'>-  def set(data)</div><div class='del'>-    @set.e(to_s(), data.to_s())</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get(): read tcl/tk variable(String) using `set'</div><div class='del'>-  def get()</div><div class='del'>-    return @set.e(to_s())</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# class TclTkWidget: tcl/tk widget</div><div class='del'>-class TclTkWidget &lt; TclTkCommand</div><div class='del'>-</div><div class='del'>-  # initialize(*args): </div><div class='del'>-  #   *args: parameters</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    if args[0].kind_of?(TclTkIp)</div><div class='del'>-      # in case the 1st argument is TclTkIp:</div><div class='del'>-</div><div class='del'>-      # Wrap tcl/tk widget by TclTkWidget</div><div class='del'>-      # (used in TclTkInterpreter#initialize())</div><div class='del'>-</div><div class='del'>-      # need two arguments</div><div class='del'>-      fail("invalid # of parameter") if args.size != 2</div><div class='del'>-</div><div class='del'>-      # ip: interpreter(TclTkIp)</div><div class='del'>-      # exp: tcl/tk representation</div><div class='del'>-      ip, exp = args</div><div class='del'>-</div><div class='del'>-      # initialize TclTkObject</div><div class='del'>-      super(ip, exp)</div><div class='del'>-    elsif args[0].kind_of?(TclTkInterpreter)</div><div class='del'>-      # in case 1st parameter is TclTkInterpreter:</div><div class='del'>-</div><div class='del'>-      # generate new widget from parent widget</div><div class='del'>-</div><div class='del'>-      # interp: interpreter(TclTkInterpreter)</div><div class='del'>-      # parent: parent widget</div><div class='del'>-      # command: widget generating tk command(label Åù)</div><div class='del'>-      # *args: argument to the command </div><div class='del'>-      interp, parent, command, *args = args</div><div class='del'>-</div><div class='del'>-      # generate widget name</div><div class='del'>-      exp = parent.to_s()</div><div class='del'>-      exp += "." if exp !~ /[.]$/</div><div class='del'>-      exp += TclTk._newname("w_")</div><div class='del'>-      # initialize TclTkObject</div><div class='del'>-      super(interp._tcltkip(), exp)</div><div class='del'>-      # generate widget</div><div class='del'>-      res = @ip._eval_args(command, exp, *args)</div><div class='del'>-#      fail("can't create Widget") if res != exp</div><div class='del'>-      # for tk_optionMenu, it is legal res != exp</div><div class='del'>-    else</div><div class='del'>-      fail("first parameter is not TclTkInterpreter")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# class TclTkCallback: tcl/tk callbacks</div><div class='del'>-class TclTkCallback &lt; TclTkObject</div><div class='del'>-</div><div class='del'>-  # initialize(interp, pr, arg): </div><div class='del'>-  #   interp: interpreter(TclTkInterpreter)</div><div class='del'>-  #   pr: callback procedure(Proc)</div><div class='del'>-  #   arg: string to pass as block parameters of pr</div><div class='del'>-  #       bind command of tcl/tk uses % replacement for parameters</div><div class='del'>-  #       pr can receive replaced data using block parameter</div><div class='del'>-  #       its format is specified by arg string</div><div class='del'>-  #       You should not specify arg for the command like </div><div class='del'>-  #       scrollbar with -command option, which receives parameters</div><div class='del'>-  #       without specifying any replacement</div><div class='del'>-  def initialize(interp, pr, arg = nil)</div><div class='del'>-    # auto-generate tcl/tk representation (variable name)</div><div class='del'>-    exp = TclTk._newname("c_")</div><div class='del'>-    # initialize TclTkObject</div><div class='del'>-    super(interp._tcltkip(), exp)</div><div class='del'>-    # save parameters</div><div class='del'>-    @pr = pr</div><div class='del'>-    @arg = arg</div><div class='del'>-    # register in the module</div><div class='del'>-    TclTk._addcallback(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # to_eval(): retuens string representation for @ip._eval_args</div><div class='del'>-  def to_eval()</div><div class='del'>-    if @arg</div><div class='del'>-      # bind replaces %s before calling ruby_fmt, so %%s is used</div><div class='del'>-      s = %Q/{ruby_fmt {TclTk._callcallback("#{to_s()}", "%%s")} #{@arg}}/</div><div class='del'>-    else</div><div class='del'>-      s = %Q/{ruby_fmt {TclTk._callcallback("#{to_s()}", "%s")}}/</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    return s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # _call(arg): invoke callback</div><div class='del'>-  #   arg: callback parameter</div><div class='del'>-  def _call(arg)</div><div class='del'>-    @pr.call(arg)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# class TclTkImage: tcl/tk images</div><div class='del'>-class TclTkImage &lt; TclTkCommand</div><div class='del'>-</div><div class='del'>-  # initialize(interp, t, *args): </div><div class='del'>-  #     generating image is done by TclTkImage.new()</div><div class='del'>-  #     destrying is done by image delete (inconsistent, sigh)</div><div class='del'>-  #   interp: interpreter(TclTkInterpreter)</div><div class='del'>-  #   t: image type (photo, bitmap, etc.)</div><div class='del'>-  #   *args: command argument</div><div class='del'>-  def initialize(interp, t, *args)</div><div class='del'>-    # auto-generate tcl/tk representation</div><div class='del'>-    exp = TclTk._newname("i_")</div><div class='del'>-    # initialize TclTkObject</div><div class='del'>-    super(interp._tcltkip(), exp)</div><div class='del'>-    # generate image</div><div class='del'>-    res = @ip._eval_args("image create", t, exp, *args)</div><div class='del'>-    fail("can't create Image") if res != exp</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# eof</div><div class='head'>diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb<br/>deleted file mode 100644<br/>index c5d5b804d2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5485 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk.rb - Tk interface module using tcltklib</div><div class='del'>-#                       by Yukihiro Matsumoto &lt;matz@netlab.jp&gt;</div><div class='del'>-</div><div class='del'>-# use Shigehiro's tcltklib</div><div class='del'>-require 'tcltklib'</div><div class='del'>-require 'tkutil'</div><div class='del'>-</div><div class='del'>-# autoload</div><div class='del'>-require 'tk/autoload'</div><div class='del'>-</div><div class='del'>-# for Mutex</div><div class='del'>-require 'thread'</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='del'>-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='del'>-</div><div class='del'>-  #Tk_CMDTBL = {}</div><div class='del'>-  #Tk_WINDOWS = {}</div><div class='del'>-  Tk_IDs = ["00000".taint, "00000".taint]  # [0]-cmdid, [1]-winid</div><div class='del'>-  Tk_IDs.instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</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='del'>-  end</div><div class='del'>-  Tk_WINDOWS.freeze</div><div class='del'>-</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='del'>-</div><div class='del'>-  def error_at</div><div class='del'>-    frames = caller()</div><div class='del'>-    frames.delete_if do |c|</div><div class='del'>-      c =~ %r!/tk(|core|thcore|canvas|text|entry|scrollbox)\.rb:\d+!</div><div class='del'>-    end</div><div class='del'>-    frames</div><div class='del'>-  end</div><div class='del'>-  private :error_at</div><div class='del'>-</div><div class='del'>-  def _genobj_for_tkwidget(path)</div><div class='del'>-    return TkRoot.new if path == '.'</div><div class='del'>-</div><div class='del'>-    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='del'>-    rescue</div><div class='del'>-      return path</div><div class='del'>-    end</div><div class='del'>-</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='del'>-    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='del'>-  end</div><div class='del'>-  private :_genobj_for_tkwidget</div><div class='del'>-  module_function :_genobj_for_tkwidget</div><div class='del'>-</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='del'>-    case val</div><div class='del'>-    when /\A@font\S+\z/</div><div class='del'>-      TkFont.get_obj(val)</div><div class='del'>-    when /\A-?\d+\z/</div><div class='del'>-      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.mutex.synchronize{</div><div class='del'>-        TkImage::Tk_IMGTBL[val]? TkImage::Tk_IMGTBL[val] : val</div><div class='del'>-      }</div><div class='del'>-    when /\A-?\d+\.?\d*(e[-+]?\d+)?\z/</div><div class='del'>-      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='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 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'>-        elsif TkCore::WITH_ENCODING</div><div class='del'>-          s_enc = s.encoding.name</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 TkCore::WITH_ENCODING</div><div class='del'>-        if dst_enc.kind_of?(String)</div><div class='del'>-          ret = _fromUTF8(ret, dst_enc)</div><div class='del'>-          ret.force_encoding(dst_enc)</div><div class='del'>-        else</div><div class='del'>-          ret.force_encoding('utf-8')</div><div class='del'>-        end</div><div class='del'>-      else # without encoding</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'>-      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='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'>-    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'>-</div><div class='del'>-  def tk_split_simplelist(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'>-      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='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 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='del'>-  def _symbolkey2str(keys)</div><div class='del'>-    h = {}</div><div class='del'>-    keys.each{|key,value| h[key.to_s] = value}</div><div class='del'>-    h</div><div class='del'>-  end</div><div class='del'>-  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='del'>-    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='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :hash_kv</div><div class='del'>-  module_function :hash_kv</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 bool(val)</div><div class='del'>-    case val</div><div class='del'>-    when "1", 1, 'yes', 'true'</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 number(val)</div><div class='del'>-    case val</div><div class='del'>-    when /^-?\d+$/</div><div class='del'>-      val.to_i</div><div class='del'>-    when /^-?\d+\.?\d*(e[-+]?\d+)?$/</div><div class='del'>-      val.to_f</div><div class='del'>-    else</div><div class='del'>-      fail(ArgumentError, "invalid value for Number:'#{val}'")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def string(val)</div><div class='del'>-    if val == "{}"</div><div class='del'>-      ''</div><div class='del'>-    elsif val[0] == ?{ &amp;&amp; val[-1] == ?}</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'>-  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='del'>-  end</div><div class='del'>-  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.mutex.synchronize{</div><div class='del'>-        TkImage::Tk_IMGTBL[val]? TkImage::Tk_IMGTBL[val] : val</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'>-  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='del'>-    else</div><div class='del'>-      #nil</div><div class='del'>-      val</div><div class='del'>-    end</div><div class='del'>-  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='del'>-</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='del'>-    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='del'>-    elsif str.kind_of?(Symbol)</div><div class='del'>-      str = str.id2name</div><div class='del'>-      str = _toUTF8(str) if enc_mode</div><div class='del'>-    elsif str.kind_of?(Hash)</div><div class='del'>-      str = hash_kv(str, enc_mode).join(" ")</div><div class='del'>-    elsif str.kind_of?(Array)</div><div class='del'>-      str = array2tk_list(str)</div><div class='del'>-      str = _toUTF8(str) if enc_mode</div><div class='del'>-    elsif str.kind_of?(Proc)</div><div class='del'>-      str = install_cmd(str)</div><div class='del'>-    elsif str == nil</div><div class='del'>-      str = ""</div><div class='del'>-    elsif str == false</div><div class='del'>-      str = "0"</div><div class='del'>-    elsif str == true</div><div class='del'>-      str = "1"</div><div class='del'>-    elsif (str.respond_to?(:to_eval))</div><div class='del'>-      str = str.to_eval()</div><div class='del'>-      str = _toUTF8(str) if enc_mode</div><div class='del'>-    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='del'>-    end</div><div class='del'>-    return str</div><div class='del'>-  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='del'>-  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='del'>-    if v.kind_of?(Hash)</div><div class='del'>-      v = hash_kv(v)</div><div class='del'>-      v.flatten!</div><div class='del'>-      v.collect{|e|ruby2tcl(e, enc_mode)}</div><div class='del'>-    else</div><div class='del'>-      _get_eval_string(v, enc_mode)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  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='del'>-</div><div class='del'>-  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='del'>-  end</div><div class='del'>-  def _next_cmd_id</div><div class='del'>-    TkComm::Tk_IDs.mutex.synchronize{</div><div class='del'>-      id = _curr_cmd_id</div><div class='del'>-      #Tk_IDs[0] += 1</div><div class='del'>-      TkComm::Tk_IDs[0].succ!</div><div class='del'>-      id</div><div class='del'>-    }</div><div class='del'>-  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='del'>-  def TkComm.install_cmd(cmd, local_cmdtbl=nil)</div><div class='del'>-    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='del'>-    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='del'>-    @cmdtbl.push id</div><div class='del'>-</div><div class='del'>-    if local_cmdtbl &amp;&amp; local_cmdtbl.kind_of?(Array)</div><div class='del'>-      begin</div><div class='del'>-        local_cmdtbl &lt;&lt; id</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'>-    #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='del'>-  end</div><div class='del'>-  def TkComm.uninstall_cmd(id, local_cmdtbl=nil)</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'>-</div><div class='del'>-    if local_cmdtbl &amp;&amp; local_cmdtbl.kind_of?(Array)</div><div class='del'>-      begin</div><div class='del'>-        local_cmdtbl.delete(id)</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'>-    @cmdtbl.delete(id)</div><div class='del'>-</div><div class='del'>-    #Tk_CMDTBL.delete(id)</div><div class='del'>-    TkCore::INTERP.tk_cmd_tbl.delete(id)</div><div class='del'>-  end</div><div class='del'>-  # private :install_cmd, :uninstall_cmd</div><div class='del'>-  # module_function :install_cmd, :uninstall_cmd</div><div class='del'>-  def install_cmd(cmd)</div><div class='del'>-    TkComm.install_cmd(cmd, @cmdtbl)</div><div class='del'>-  end</div><div class='del'>-  def uninstall_cmd(id)</div><div class='del'>-    TkComm.uninstall_cmd(id, @cmdtbl)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def install_win(ppath,name=nil)</div><div class='del'>-    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='del'>-    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'>-      Tk_IDs.mutex.synchronize{</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'>-      }</div><div class='del'>-    end</div><div class='del'>-    if !ppath or ppath == '.'</div><div class='del'>-      @path = '.' + name</div><div class='del'>-    else</div><div class='del'>-      @path = ppath + '.' + name</div><div class='del'>-    end</div><div class='del'>-    @path.freeze</div><div class='del'>-    TkCore::INTERP.tk_windows[@path] = self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  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='del'>-    end</div><div class='del'>-  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='del'>-</div><div class='del'>-  def tk_event_sequence(context)</div><div class='del'>-    if context.kind_of? TkVirtualEvent</div><div class='del'>-      context = context.path</div><div class='del'>-    end</div><div class='del'>-    if context.kind_of? Array</div><div class='del'>-      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='del'>-      }.join("&gt;&lt;")</div><div class='del'>-    end</div><div class='del'>-    if /,/ =~ context</div><div class='del'>-      context = context.split(/\s*,\s*/).join("&gt;&lt;")</div><div class='del'>-    else</div><div class='del'>-      context</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</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='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(what, context, cmd, *args)</div><div class='del'>-    _bind_core('', what, context, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _bind_append(what, context, cmd, *args)</div><div class='del'>-    _bind_core('+', what, context, cmd, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _bind_remove(what, context)</div><div class='del'>-    tk_call_without_enc(*(what + ["&lt;#{tk_event_sequence(context)}&gt;", '']))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _bindinfo(what, context=nil)</div><div class='del'>-    if context</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        enum_obj = tk_call_without_enc(*what+["&lt;#{tk_event_sequence(context)}&gt;"]).each_line</div><div class='del'>-      else</div><div class='del'>-        enum_obj = tk_call_without_enc(*what+["&lt;#{tk_event_sequence(context)}&gt;"])</div><div class='del'>-      end</div><div class='del'>-      enum_obj.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='del'>-      }</div><div class='del'>-    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='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _bind_remove_for_event_class(klass, what, context)</div><div class='del'>-    _bind_remove(what, context)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _bindinfo_for_event_class(klass, what, context=nil)</div><div class='del'>-    _bindinfo(what, context)</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bindinfo(tagOrClass, context=nil)</div><div class='del'>-    _bindinfo(['bind', tagOrClass], context)</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-    else</div><div class='del'>-      cmd = Proc.new</div><div class='del'>-    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='del'>-  end</div><div class='del'>-</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='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-module TkCore</div><div class='del'>-  include TkComm</div><div class='del'>-  extend TkComm</div><div class='del'>-</div><div class='del'>-  WITH_RUBY_VM  = Object.const_defined?(:VM) &amp;&amp; ::VM.class == Class</div><div class='del'>-  WITH_ENCODING = Object.const_defined?(:Encoding) &amp;&amp; ::Encoding.class == Class</div><div class='del'>-</div><div class='del'>-  unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD</div><div class='del'>-    ### Ruby 1.9 !!!!!!!!!!!!!!!!!!!!!!!!!!</div><div class='del'>-    RUN_EVENTLOOP_ON_MAIN_THREAD = false</div><div class='del'>-  end</div><div class='del'>-</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'>-    if !WITH_RUBY_VM || RUN_EVENTLOOP_ON_MAIN_THREAD ### check Ruby 1.9 !!!!!!!</div><div class='del'>-      INTERP = TclTkIp.new(name, opts)</div><div class='del'>-    else</div><div class='del'>-      INTERP_MUTEX = Mutex.new</div><div class='del'>-      INTERP_ROOT_CHECK = ConditionVariable.new</div><div class='del'>-      INTERP_THREAD = Thread.new{</div><div class='del'>-        begin</div><div class='del'>-          Thread.current[:interp] = interp = TclTkIp.new(name, opts)</div><div class='del'>-        rescue =&gt; e</div><div class='del'>-          Thread.current[:interp] = e</div><div class='del'>-          raise e</div><div class='del'>-        end</div><div class='del'>-        Thread.current[:status] = nil</div><div class='del'>-        #sleep</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          Thread.current[:status] = TclTkLib.mainloop(true)</div><div class='del'>-        rescue Exception=&gt;e</div><div class='del'>-          Thread.current[:status] = e</div><div class='del'>-        ensure</div><div class='del'>-          INTERP_MUTEX.synchronize{ INTERP_ROOT_CHECK.broadcast }</div><div class='del'>-        end</div><div class='del'>-        Thread.current[:status] = TclTkLib.mainloop(false)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      until INTERP_THREAD[:interp]</div><div class='del'>-        Thread.pass</div><div class='del'>-      end</div><div class='del'>-      # INTERP_THREAD.run</div><div class='del'>-      raise INTERP_THREAD[:interp] if INTERP_THREAD[:interp].kind_of? Exception</div><div class='del'>-</div><div class='del'>-      INTERP = INTERP_THREAD[:interp]</div><div class='del'>-    end</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'>-      @tk_cmd_tbl = Hash.new{|hash, key|</div><div class='del'>-        fail IndexError, "unknown command ID '#{key}'"</div><div class='del'>-      }.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'>-        @mutex = Mutex.new</div><div class='del'>-      end</div><div class='del'>-      def mutex</div><div class='del'>-        @mutex</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='del'>-</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'>-                      "catch { 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='del'>-    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='del'>-    }</div><div class='del'>-  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='del'>-</div><div class='del'>-  EventFlag = TclTkLib::EventFlag</div><div class='del'>-</div><div class='del'>-  def callback_break</div><div class='del'>-    fail TkCallbackBreak, "Tk callback returns 'break' status"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def callback_continue</div><div class='del'>-    fail TkCallbackContinue, "Tk callback returns 'continue' status"</div><div class='del'>-  end</div><div class='del'>-</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'>-        if TkCore::WITH_ENCODING</div><div class='del'>-          msg.force_encoding('utf-8')</div><div class='del'>-        else</div><div class='del'>-          msg.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-        end</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='del'>-  def after(ms, cmd=Proc.new)</div><div class='del'>-    cmdid = install_cmd(proc{ret = cmd.call;uninstall_cmd(cmdid); ret})</div><div class='del'>-    after_id = tk_call_without_enc("after",ms,cmdid)</div><div class='del'>-    after_id.instance_variable_set('@cmdid', cmdid)</div><div class='del'>-    after_id</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  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='del'>-    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='del'>-#    return</div><div class='del'>-#    if false #defined? Thread</div><div class='del'>-#      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='del'>-#      end</div><div class='del'>-#    else</div><div class='del'>-#      cmdid = install_cmd(cmd)</div><div class='del'>-#      tk_call("after",ms,cmdid)</div><div class='del'>-#    end</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def after_idle(cmd=Proc.new)</div><div class='del'>-    cmdid = install_cmd(proc{ret = cmd.call;uninstall_cmd(cmdid); ret})</div><div class='del'>-    after_id = tk_call_without_enc('after','idle',cmdid)</div><div class='del'>-    after_id.instance_variable_set('@cmdid', cmdid)</div><div class='del'>-    after_id</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  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='del'>-    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','idle',cmdid)</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  def after_cancel(afterId)</div><div class='del'>-    tk_call_without_enc('after','cancel',afterId)</div><div class='del'>-    if (cmdid = afterId.instance_variable_get('@cmdid'))</div><div class='del'>-      afterId.instance_variable_set('@cmdid', nil)</div><div class='del'>-      uninstall_cmd(cmdid)</div><div class='del'>-    end</div><div class='del'>-    afterId</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def windowingsystem</div><div class='del'>-    tk_call_without_enc('tk', 'windowingsystem')</div><div class='del'>-  end</div><div class='del'>-</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='del'>-    else</div><div class='del'>-      Float(number(tk_call_without_enc('tk', 'scaling')))</div><div class='del'>-    end</div><div class='del'>-  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='del'>-    else</div><div class='del'>-      Float(number(tk_call_without_enc('tk', '-displayof', win, 'scaling')))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def inactive</div><div class='del'>-    Integer(tk_call_without_enc('tk', 'inactive'))</div><div class='del'>-  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='del'>-  end</div><div class='del'>-  def reset_inactive</div><div class='del'>-    tk_call_without_enc('tk', 'inactive', 'reset')</div><div class='del'>-  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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def appname(name=None)</div><div class='del'>-    tk_call('tk', 'appname', name)</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  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='del'>-    if async</div><div class='del'>-      tk_call('send', '-async', '--', interp, *args)</div><div class='del'>-    else</div><div class='del'>-      tk_call('send', '--', interp, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  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='del'>-  end</div><div class='del'>-</div><div class='del'>-  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='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'>-    if async</div><div class='del'>-      tk_call('send', '-async', '-displayof', win, '--', interp, *args)</div><div class='del'>-    else</div><div class='del'>-      tk_call('send', '-displayor', win, '--', interp, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def info(*args)</div><div class='del'>-    tk_call('info', *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mainloop(check_root = true)</div><div class='del'>-    if !TkCore::WITH_RUBY_VM || TkCore::RUN_EVENTLOOP_ON_MAIN_THREAD</div><div class='del'>-      TclTkLib.mainloop(check_root)</div><div class='del'>-    else ### Ruby 1.9 !!!!!</div><div class='del'>-      begin</div><div class='del'>-        TclTkLib.set_eventloop_window_mode(true)</div><div class='del'>-        if check_root</div><div class='del'>-          INTERP_MUTEX.synchronize{</div><div class='del'>-            INTERP_ROOT_CHECK.wait(INTERP_MUTEX)</div><div class='del'>-            status = INTERP_THREAD[:status]</div><div class='del'>-            if status</div><div class='del'>-              INTERP_THREAD[:status] = nil</div><div class='del'>-              raise status if status.kind_of?(Exception)</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        else</div><div class='del'>-          INTERP_THREAD.value</div><div class='del'>-        end</div><div class='del'>-      ensure</div><div class='del'>-        TclTkLib.set_eventloop_window_mode(false)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</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'>-    if !TkCore::WITH_RUBY_VM || TkCore::RUN_EVENTLOOP_ON_MAIN_THREAD</div><div class='del'>-      ### Ruby 1.9 !!!!!!!!!!!</div><div class='del'>-      TclTkLib.mainloop_thread?</div><div class='del'>-    else</div><div class='del'>-      Thread.current == INTERP_THREAD</div><div class='del'>-    end</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='del'>-  def mainloop_watchdog(check_root = true)</div><div class='del'>-    # watchdog restarts mainloop when mainloop is dead</div><div class='del'>-    TclTkLib.mainloop_watchdog(check_root)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def do_one_event(flag = TclTkLib::EventFlag::ALL)</div><div class='del'>-    TclTkLib.do_one_event(flag)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_eventloop_tick(timer_tick)</div><div class='del'>-    TclTkLib.set_eventloop_tick(timer_tick)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_eventloop_tick()</div><div class='del'>-    TclTkLib.get_eventloop_tick</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  def set_eventloop_weight(loop_max, no_event_tick)</div><div class='del'>-    TclTkLib.set_eventloop_weight(loop_max, no_event_tick)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_eventloop_weight()</div><div class='del'>-    TclTkLib.get_eventloop_weight</div><div class='del'>-  end</div><div class='del'>-</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='del'>-    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='del'>-    end</div><div class='del'>-</div><div class='del'>-    INTERP.restart</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</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='del'>-    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='del'>-    end</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def messageBox(keys)</div><div class='del'>-    tk_call('tk_messageBox', *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  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='del'>-  end</div><div class='del'>-</div><div class='del'>-  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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def chooseColor(keys = nil)</div><div class='del'>-    tk_call('tk_chooseColor', *hash_kv(keys))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  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='del'>-  end</div><div class='del'>-  private :_ip_invoke_core</div><div class='del'>-</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='del'>-    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='del'>-      begin</div><div class='del'>-        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='del'>-      end</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'>-    ### print "==&gt; ", res.inspect, "\n" if $DEBUG</div><div class='del'>-    return res</div><div class='del'>-  end</div><div class='del'>-  private :_tk_call_core</div><div class='del'>-</div><div class='del'>-  def tk_call(*args)</div><div class='del'>-    _tk_call_core(nil, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tk_call_without_enc(*args)</div><div class='del'>-    _tk_call_core(false, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tk_call_with_enc(*args)</div><div class='del'>-    _tk_call_core(true, *args)</div><div class='del'>-  end</div><div class='del'>-</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='del'>-    else</div><div class='del'>-      tk_split_list(val, depth, false, val_enc)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  #private :_tk_call_to_list_core</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  include TkCore</div><div class='del'>-  extend Tk</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-  def root</div><div class='del'>-    Tk::Root.new</div><div class='del'>-  end</div><div class='del'>-</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'>-  ################################################</div><div class='del'>-</div><div class='del'>-  def Tk.sleep(ms = nil, id = nil)</div><div class='del'>-    if id</div><div class='del'>-      var = (id.kind_of?(TkVariable))? id: TkVarAccess.new(id.to_s)</div><div class='del'>-    else</div><div class='del'>-      var = TkVariable.new</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    var.value = tk_call_without_enc('after', ms, proc{ var.value = 0 }) if ms</div><div class='del'>-    var.thread_wait</div><div class='del'>-    ms</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.wakeup(id)</div><div class='del'>-    ((id.kind_of?(TkVariable))? id: TkVarAccess.new(id.to_s)).value = 0</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################################</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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.focus(display=nil)</div><div class='del'>-    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='del'>-    else</div><div class='del'>-      tk_call_without_enc('focus', win)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.focus_lastfor(win)</div><div class='del'>-    window(tk_call_without_enc('focus', '-lastfor', win))</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Tk.show_kinsoku(mode='both')</div><div class='del'>-    begin</div><div class='del'>-      if /^8\.*/ === TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='del'>-        tk_split_simplelist(tk_call('kinsoku', 'show', mode))</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def Tk.add_kinsoku(chars, mode='both')</div><div class='del'>-    begin</div><div class='del'>-      if /^8\.*/ === TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='del'>-        tk_split_simplelist(tk_call('kinsoku', 'add', mode, </div><div class='del'>-                                    *(chars.split(''))))</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'>-  def Tk.delete_kinsoku(chars, mode='both')</div><div class='del'>-    begin</div><div class='del'>-      if /^8\.*/ === TK_VERSION  &amp;&amp; JAPANIZED_TK</div><div class='del'>-        tk_split_simplelist(tk_call('kinsoku', 'delete', mode, </div><div class='del'>-                            *(chars.split(''))))</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 Tk.toUTF8(str, encoding = nil)</div><div class='del'>-    _toUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def Tk.fromUTF8(str, encoding = nil)</div><div class='del'>-    _fromUTF8(str, encoding)</div><div class='del'>-  end</div><div class='del'>-end</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'>-  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='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</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'>-  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'>-      #############################################</div><div class='del'>-</div><div class='del'>-      if TkCore::WITH_ENCODING ### Ruby 1.9</div><div class='del'>-        RubyEncoding = ::Encoding</div><div class='del'>-</div><div class='del'>-        # for saving GC cost</div><div class='del'>-        #ENCNAMES_CMD = ['encoding'.freeze, 'names'.freeze]</div><div class='del'>-        BINARY_NAME  = 'binary'.freeze</div><div class='del'>-        UTF8_NAME    = 'utf-8'.freeze</div><div class='del'>-        DEFAULT_EXTERNAL_NAME = RubyEncoding.default_external.name.freeze</div><div class='del'>-</div><div class='del'>-        BINARY  = RubyEncoding.find(BINARY_NAME)</div><div class='del'>-        UNKNOWN = RubyEncoding.find('ASCII-8BIT')</div><div class='del'>-</div><div class='del'>-        ### start of creating ENCODING_TABLE</div><div class='del'>-        ENCODING_TABLE = TkCore::INTERP.encoding_table</div><div class='del'>-=begin</div><div class='del'>-        ENCODING_TABLE = {</div><div class='del'>-          'binary'       =&gt; BINARY, </div><div class='del'>-          # 'UNKNOWN-8BIT' =&gt; UNKNOWN, </div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        list = TkCore::INTERP._invoke_without_enc(ENCNAMES_CMD[0], </div><div class='del'>-                                                  ENCNAMES_CMD[1])</div><div class='del'>-        TkCore::INTERP._split_tklist(list).each{|name|</div><div class='del'>-          begin</div><div class='del'>-            enc = RubyEncoding.find(name)</div><div class='del'>-          rescue ArgumentError</div><div class='del'>-            case name</div><div class='del'>-            when 'identity'</div><div class='del'>-              enc = BINARY</div><div class='del'>-            when 'shiftjis'</div><div class='del'>-              enc = RubyEncoding.find('Shift_JIS')</div><div class='del'>-            when 'unicode'</div><div class='del'>-              enc = RubyEncoding.find('UTF-8')</div><div class='del'>-              #if Tk.tk_call('set', 'tcl_platform(byteOrder)') =='littleEndian'</div><div class='del'>-              #  enc = RubyEncoding.find('UTF-16LE')</div><div class='del'>-              #else</div><div class='del'>-              #  enc = RubyEncoding.find('UTF-16BE')</div><div class='del'>-              #end</div><div class='del'>-            when 'symbol'</div><div class='del'>-              # single byte data</div><div class='del'>-              enc = RubyEncoding.find('ASCII-8BIT') ### ???</div><div class='del'>-            else</div><div class='del'>-              # unsupported on Ruby, but supported on Tk</div><div class='del'>-              enc = TkCore::INTERP.create_dummy_encoding_for_tk(name)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          ENCODING_TABLE[name.freeze] = enc</div><div class='del'>-        }</div><div class='del'>-=end</div><div class='del'>-=begin</div><div class='del'>-        def ENCODING_TABLE.get_name(enc)</div><div class='del'>-          orig_enc = enc</div><div class='del'>-</div><div class='del'>-          # unles enc, use system default</div><div class='del'>-          #  1st: Ruby/Tk default encoding</div><div class='del'>-          #  2nd: Tcl/Tk default encoding</div><div class='del'>-          #  3rd: Ruby's default_external</div><div class='del'>-          enc ||= TkCore::INTERP.encoding</div><div class='del'>-          enc ||= TclTkLib.encoding_system</div><div class='del'>-          enc ||= DEFAULT_EXTERNAL_NAME</div><div class='del'>-</div><div class='del'>-          if enc.kind_of?(RubyEncoding)</div><div class='del'>-            # Ruby's Encoding object</div><div class='del'>-            if (name = self.key(enc))</div><div class='del'>-              return name</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            # Is it new ?</div><div class='del'>-            list = TkCore::INTERP._invoke_without_enc(ENCNAMES_CMD[0], </div><div class='del'>-                                                      ENCNAMES_CMD[1])</div><div class='del'>-            TkComm.simplelist(list).each{|name|</div><div class='del'>-              if ((enc == RubyEncoding.find(name)) rescue false)</div><div class='del'>-                # new relation!! update table</div><div class='del'>-                self[name.freeze] = enc</div><div class='del'>-                return name</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-          else</div><div class='del'>-            # String or Symbol ?</div><div class='del'>-            if self[name = enc.to_s]</div><div class='del'>-              return name</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            # Is it new ?</div><div class='del'>-            if (enc_obj = (RubyEncoding.find(name) rescue false))</div><div class='del'>-              list = TkCore::INTERP._invoke_without_enc(ENCNAMES_CMD[0], </div><div class='del'>-                                                        ENCNAMES_CMD[1])</div><div class='del'>-              if TkComm.simplelist(list).index(name)</div><div class='del'>-                # Tk's encoding name ?</div><div class='del'>-                self[name.freeze] = enc_obj  # new relation!! update table</div><div class='del'>-                return name</div><div class='del'>-              else</div><div class='del'>-                # Ruby's encoding name ?</div><div class='del'>-                if (name = self.key(enc_obj))</div><div class='del'>-                  return name</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'>-          fail ArgumentError, "unsupported Tk encoding '#{orig_enc}'"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def ENCODING_TABLE.get_obj(enc)</div><div class='del'>-          # returns the encoding object.</div><div class='del'>-          # If 'enc' is the encoding name on Tk only, it returns nil.</div><div class='del'>-          ((obj = self[self.get_name(enc)]).kind_of?(RubyEncoding))? obj: nil</div><div class='del'>-        end</div><div class='del'>-=end</div><div class='del'>-        ### end of creating ENCODING_TABLE</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'>-      if TkCore::WITH_ENCODING</div><div class='del'>-        ################################</div><div class='del'>-        ### Ruby 1.9</div><div class='del'>-        ################################</div><div class='del'>-        def force_default_encoding(mode)</div><div class='del'>-          TkCore::INTERP.force_default_encoding = mode</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def force_default_encoding?</div><div class='del'>-          TkCore::INTERP.force_default_encoding?</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def default_encoding=(enc)</div><div class='del'>-          TkCore::INTERP.default_encoding = Tk::Encoding::ENCODING_TABLE.get_name(enc)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encoding=(enc)</div><div class='del'>-          TkCore::INTERP.encoding = Tk::Encoding::ENCODING_TABLE.get_name(enc)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encoding_name</div><div class='del'>-          Tk::Encoding::ENCODING_TABLE.get_name(TkCore::INTERP.encoding)</div><div class='del'>-        end</div><div class='del'>-        def encoding_obj</div><div class='del'>-          Tk::Encoding::ENCODING_TABLE.get_obj(TkCore::INTERP.encoding)</div><div class='del'>-        end</div><div class='del'>-        alias encoding encoding_name</div><div class='del'>-        alias default_encoding encoding_name</div><div class='del'>-</div><div class='del'>-        def tk_encoding_names</div><div class='del'>-          TkComm.simplelist(TkCore::INTERP._invoke_without_enc(Tk::Encoding::ENCNAMES_CMD[0], Tk::Encoding::ENCNAMES_CMD[1]))</div><div class='del'>-       end</div><div class='del'>-        def encoding_names</div><div class='del'>-          self.tk_encoding_names.find_all{|name|</div><div class='del'>-            Tk::Encoding::ENCODING_TABLE.get_name(name) rescue false</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        def encoding_objs</div><div class='del'>-          self.tk_encoding_names.map!{|name|</div><div class='del'>-            Tk::Encoding::ENCODING_TABLE.get_obj(name) rescue nil</div><div class='del'>-          }.compact</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encoding_system=(enc)</div><div class='del'>-          TclTkLib.encoding_system = Tk::Encoding::ENCODING_TABLE.get_name(enc)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encoding_system_name</div><div class='del'>-          Tk::Encoding::ENCODING_TABLE.get_name(TclTkLib.encoding_system)</div><div class='del'>-        end</div><div class='del'>-        def encoding_system_obj</div><div class='del'>-          Tk::Encoding::ENCODING_TABLE.get_obj(TclTkLib.encoding_system)</div><div class='del'>-        end</div><div class='del'>-        alias encoding_system encoding_system_name</div><div class='del'>-</div><div class='del'>-        ################################</div><div class='del'>-      else</div><div class='del'>-        ################################</div><div class='del'>-        ### Ruby 1.8-</div><div class='del'>-        ################################</div><div class='del'>-        def force_default_encoding=(mode)</div><div class='del'>-          true</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def force_default_encoding?</div><div class='del'>-          true</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def default_encoding=(enc)</div><div class='del'>-          TkCore::INTERP.default_encoding = enc</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encoding=(enc)</div><div class='del'>-          TkCore::INTERP.encoding = enc</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encoding_obj</div><div class='del'>-          TkCore::INTERP.encoding</div><div class='del'>-        end</div><div class='del'>-        def encoding_name</div><div class='del'>-          TkCore::INTERP.encoding</div><div class='del'>-        end</div><div class='del'>-        alias encoding encoding_name</div><div class='del'>-        alias default_encoding encoding_name</div><div class='del'>-</div><div class='del'>-        def tk_encoding_names</div><div class='del'>-          TkComm.simplelist(Tk.tk_call('encoding', 'names'))</div><div class='del'>-        end</div><div class='del'>-        def encoding_objs</div><div class='del'>-          self.tk_encoding_names</div><div class='del'>-        end</div><div class='del'>-        def encoding_names</div><div class='del'>-          self.tk_encoding_names</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encoding_system=(enc)</div><div class='del'>-          TclTkLib.encoding_system = enc</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encoding_system_name</div><div class='del'>-          TclTkLib.encoding_system</div><div class='del'>-        end</div><div class='del'>-        def encoding_system_obj</div><div class='del'>-          TclTkLib.encoding_system</div><div class='del'>-        end</div><div class='del'>-        alias encoding_system encoding_system_name</div><div class='del'>-</div><div class='del'>-        ################################</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encoding_convertfrom(str, enc=nil)</div><div class='del'>-        enc = encoding_system_name unless enc</div><div class='del'>-        str = str.dup</div><div class='del'>-        if TkCore::WITH_ENCODING</div><div class='del'>-          if str.kind_of?(Tk::EncodedString)</div><div class='del'>-            str.__instance_variable_set('@encoding', nil)</div><div class='del'>-          else</div><div class='del'>-            str.instance_variable_set('@encoding', nil)</div><div class='del'>-          end</div><div class='del'>-          str.force_encoding('binary')</div><div class='del'>-        else</div><div class='del'>-          str.instance_variable_set('@encoding', 'binary')</div><div class='del'>-        end</div><div class='del'>-        ret = TkCore::INTERP._invoke_without_enc('encoding', 'convertfrom', </div><div class='del'>-                                                 enc, str)</div><div class='del'>-        if TkCore::WITH_ENCODING</div><div class='del'>-          ret.force_encoding('utf-8')</div><div class='del'>-        else</div><div class='del'>-          Tk::UTF8_String.new(ret)</div><div class='del'>-        end</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'>-        enc = encoding_system_name unless enc</div><div class='del'>-        ret = TkCore::INTERP._invoke_without_enc('encoding', 'convertto', </div><div class='del'>-                                                 enc, str)</div><div class='del'>-        #ret.instance_variable_set('@encoding', 'binary')</div><div class='del'>-        if TkCore::WITH_ENCODING</div><div class='del'>-          #ret.force_encoding(Tk::Encoding::ENCODING_TABLE.get_obj('binary'))</div><div class='del'>-          ret.force_encoding(Tk::Encoding::ENCODING_TABLE.get_obj(enc))</div><div class='del'>-        end</div><div class='del'>-        ret</div><div class='del'>-      end</div><div class='del'>-      alias encoding_convert_to encoding_convertto</div><div class='del'>-</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='del'>-</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='del'>-    end</div><div class='del'>-</div><div class='del'>-    extend Encoding</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TclTkIp</div><div class='del'>-    def force_default_encoding=(mode)</div><div class='del'>-      @force_default_encoding = (mode)? true: false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def force_default_encoding?</div><div class='del'>-      @force_default_encoding ||= false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def default_encoding=(name)</div><div class='del'>-      name = name.name if name.kind_of?(::Encoding) if Tk::WITH_ENCODING</div><div class='del'>-      @encoding = name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # from tkencoding.rb by ttate@jaist.ac.jp</div><div class='del'>-    #attr_accessor :encoding</div><div class='del'>-    def encoding=(name)</div><div class='del'>-      self.force_default_encoding = true  # for comaptibility</div><div class='del'>-      self.default_encoding = name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def encoding_name</div><div class='del'>-      (@encoding)? @encoding.dup: nil</div><div class='del'>-    end</div><div class='del'>-    alias encoding encoding_name</div><div class='del'>-    alias default_encoding encoding_name</div><div class='del'>-</div><div class='del'>-    def encoding_obj</div><div class='del'>-      if Tk::WITH_ENCODING</div><div class='del'>-        Tk::Encoding.tcl2rb_encoding(@encoding)</div><div class='del'>-      else</div><div class='del'>-        (@encoding)? @encoding.dup: nil</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if Object.const_defined?(:Encoding) &amp;&amp; ::Encoding.class == Class</div><div class='del'>-      # with Encoding (Ruby 1.9+)</div><div class='del'>-      #</div><div class='del'>-      # use functions on Tcl as default.</div><div class='del'>-      # but when unsupported encoding on Tcl, use methods on Ruby.</div><div class='del'>-      #</div><div class='del'>-      def _toUTF8(str, enc = nil)</div><div class='del'>-        if enc</div><div class='del'>-          # use given encoding</div><div class='del'>-          begin</div><div class='del'>-            enc_name = Tk::Encoding::ENCODING_TABLE.get_name(enc)</div><div class='del'>-          rescue</div><div class='del'>-            # unknown encoding for Tk -&gt; try to convert encoding on Ruby</div><div class='del'>-            str = str.dup.force_encoding(enc)</div><div class='del'>-            str.encode!(Tk::Encoding::UTF8_NAME) # modify self !!</div><div class='del'>-            return str  # if no error, probably succeed converting</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        enc_name ||= str.instance_variable_get(:@encoding)</div><div class='del'>-</div><div class='del'>-        enc_name ||= </div><div class='del'>-          Tk::Encoding::ENCODING_TABLE.get_name(str.encoding) rescue nil</div><div class='del'>-</div><div class='del'>-        unless enc_name</div><div class='del'>-          # str.encoding isn't supported by Tk -&gt; try to convert on Ruby</div><div class='del'>-          begin</div><div class='del'>-            return str.encode(Tk::Encoding::UTF8_NAME) # new string</div><div class='del'>-          rescue</div><div class='del'>-            # error -&gt; ignore, try to use default encoding of Ruby/Tk</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        #enc_name ||= </div><div class='del'>-        #  Tk::Encoding::ENCODING_TABLE.get_name(Tk.encoding) rescue nil</div><div class='del'>-        enc_name ||= Tk::Encoding::ENCODING_TABLE.get_name(nil)</div><div class='del'>-</div><div class='del'>-        # is 'binary' encoding?</div><div class='del'>-        if enc_name == Tk::Encoding::BINARY_NAME</div><div class='del'>-          return str.dup.force_encoding(Tk::Encoding::BINARY_NAME)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # force default encoding?</div><div class='del'>-        if ! str.kind_of?(Tk::EncodedString) &amp;&amp; self.force_default_encoding?</div><div class='del'>-          enc_name = Tk::Encoding::ENCODING_TABLE.get_name(Tk.default_encoding)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        encstr = __toUTF8(str, enc_name)</div><div class='del'>-        encstr.force_encoding(Tk::Encoding::UTF8_NAME)</div><div class='del'>-        encstr</div><div class='del'>-      end</div><div class='del'>-      def _fromUTF8(str, enc = nil)</div><div class='del'>-        # str must be UTF-8 or binary.</div><div class='del'>-        enc_name = str.instance_variable_get(:@encoding)</div><div class='del'>-        enc_name ||= </div><div class='del'>-          Tk::Encoding::ENCODING_TABLE.get_name(str.encoding) rescue nil</div><div class='del'>-</div><div class='del'>-        # is 'binary' encoding?</div><div class='del'>-        if enc_name == Tk::Encoding::BINARY_NAME</div><div class='del'>-          return str.dup.force_encoding(Tk::Encoding::BINARY_NAME)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # get target encoding name (if enc == nil, use default encoding)</div><div class='del'>-        begin</div><div class='del'>-          enc_name = Tk::Encoding::ENCODING_TABLE.get_name(enc)</div><div class='del'>-        rescue</div><div class='del'>-          # then, enc != nil</div><div class='del'>-          # unknown encoding for Tk -&gt; try to convert encoding on Ruby</div><div class='del'>-          str = str.dup.force_encoding(Tk::Encoding::UTF8_NAME)</div><div class='del'>-          str.encode!(enc) # modify self !!</div><div class='del'>-          return str  # if no error, probably succeed converting</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        encstr = __fromUTF8(str, enc_name)</div><div class='del'>-        encstr.force_encoding(Tk::Encoding::ENCODING_TABLE.get_obj(enc_name))</div><div class='del'>-        encstr</div><div class='del'>-      end</div><div class='del'>-      ###</div><div class='del'>-    else</div><div class='del'>-      # without Encoding (Ruby 1.8)</div><div class='del'>-      def _toUTF8(str, encoding = nil)</div><div class='del'>-        __toUTF8(str, encoding)</div><div class='del'>-      end</div><div class='del'>-      def _fromUTF8(str, encoding = nil)</div><div class='del'>-        __fromUTF8(str, encoding)</div><div class='del'>-      end</div><div class='del'>-      ###</div><div class='del'>-    end</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'>-    def _eval(cmd)</div><div class='del'>-      _fromUTF8(__eval(_toUTF8(cmd)))</div><div class='del'>-    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='del'>-    end</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'>-</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='del'>-      else</div><div class='del'>-        encoding = __invoke('encoding', 'system')</div><div class='del'>-      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='del'>-      else</div><div class='del'>-        __toUTF8(str, encoding)</div><div class='del'>-      end</div><div class='del'>-    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='del'>-      end</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    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='del'>-      else</div><div class='del'>-        __eval(cmd)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    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='del'>-      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'>-      def force_default_encoding=(mode)</div><div class='del'>-        TkCore::INTERP.force_default_encoding = mode</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def force_default_encoding?</div><div class='del'>-        TkCore::INTERP.force_default_encoding?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def default_encoding=(name)</div><div class='del'>-        TkCore::INTERP.default_encoding = name</div><div class='del'>-      end</div><div class='del'>-</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'>-        name = name.name if name.kind_of?(::Encoding) if Tk::WITH_ENCODING</div><div class='del'>-        TkCore::INTERP.encoding = name</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encoding_name</div><div class='del'>-        TkCore::INTERP.encoding</div><div class='del'>-      end</div><div class='del'>-      alias encoding encoding_name</div><div class='del'>-      alias default_encoding encoding_name</div><div class='del'>-</div><div class='del'>-      def encoding_obj</div><div class='del'>-        if Tk::WITH_ENCODING</div><div class='del'>-          Tk::Encoding.tcl2rb_encoding(TkCore::INTERP.encoding)</div><div class='del'>-        else</div><div class='del'>-          TkCore::INTERP.encoding</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'>-  # estimate encoding</div><div class='del'>-  unless TkCore::WITH_ENCODING </div><div class='del'>-    case $KCODE</div><div class='del'>-    when /^e/i  # EUC</div><div class='del'>-      Tk.encoding = 'euc-jp'</div><div class='del'>-      Tk.encoding_system = 'euc-jp'</div><div class='del'>-    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='del'>-    when /^u/i  # UTF8</div><div class='del'>-      Tk.encoding = 'utf-8'</div><div class='del'>-      Tk.encoding_system = 'utf-8'</div><div class='del'>-    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='del'>-      begin</div><div class='del'>-        Tk.encoding = Tk.encoding_system</div><div class='del'>-      rescue StandardError, NameError</div><div class='del'>-        Tk.encoding = 'utf-8'</div><div class='del'>-        Tk.encoding_system = 'utf-8'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  else ### Ruby 1.9 !!!!!!!!!!!!</div><div class='del'>-    loc_enc_obj = ::Encoding.find(::Encoding.locale_charmap)</div><div class='del'>-    ext_enc_obj = ::Encoding.default_external</div><div class='del'>-    tksys_enc_name = Tk::Encoding::ENCODING_TABLE.get_name(Tk.encoding_system)</div><div class='del'>-    # p [Tk.encoding, Tk.encoding_system, loc_enc_obj, ext_enc_obj]</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-    if ext_enc_obj == Tk::Encoding::UNKNOWN</div><div class='del'>-      if defind? DEFAULT_TK_ENCODING</div><div class='del'>-        if DEFAULT_TK_ENCODING.kind_of?(::Encoding)</div><div class='del'>-          tk_enc_name    = DEFAULT_TK_ENCODING.name</div><div class='del'>-          tksys_enc_name = DEFAULT_TK_ENCODING.name</div><div class='del'>-        else</div><div class='del'>-          tk_enc_name    = DEFAULT_TK_ENCODING</div><div class='del'>-          tksys_enc_name = DEFAULT_TK_ENCODING</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        tk_enc_name    = loc_enc_obj.name</div><div class='del'>-        tksys_enc_name = loc_enc_obj.name</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      tk_enc_name    = ext_enc_obj.name</div><div class='del'>-      tksys_enc_name = ext_enc_obj.name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Tk.encoding = tk_enc_name</div><div class='del'>-    Tk.default_encoding = tk_enc_name</div><div class='del'>-    Tk.encoding_system = tksys_enc_name</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    if ext_enc_obj == Tk::Encoding::UNKNOWN</div><div class='del'>-      if loc_enc_obj == Tk::Encoding::UNKNOWN</div><div class='del'>-        # use Tk.encoding_system</div><div class='del'>-      else</div><div class='del'>-        # use locale_charmap</div><div class='del'>-        begin</div><div class='del'>-          loc_enc_name = Tk::Encoding::ENCODING_TABLE.get_name(loc_enc_obj)</div><div class='del'>-          if loc_enc_name &amp;&amp; loc_enc_name != tksys_enc_name</div><div class='del'>-            # use locale_charmap</div><div class='del'>-            Tk.encoding_system = loc_enc_name</div><div class='del'>-          else</div><div class='del'>-            # use Tk.encoding_system</div><div class='del'>-          end</div><div class='del'>-        rescue ArgumentError</div><div class='del'>-          # unsupported encoding on Tk -&gt; use Tk.encoding_system</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        ext_enc_name = Tk::Encoding::ENCODING_TABLE.get_name(ext_enc_obj)</div><div class='del'>-        if ext_enc_name &amp;&amp; ext_enc_name != tksys_enc_name</div><div class='del'>-          # use default_external</div><div class='del'>-          Tk.encoding_system = ext_enc_name</div><div class='del'>-        else</div><div class='del'>-          # use Tk.encoding_system</div><div class='del'>-        end</div><div class='del'>-      rescue ArgumentError</div><div class='del'>-        # unsupported encoding on Tk -&gt; use Tk.encoding_system</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # setup Tk.encoding</div><div class='del'>-    enc_name = nil</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      default_def = DEFAULT_TK_ENCODING</div><div class='del'>-      if ::Encoding.find(default_def.to_s) != Tk::Encoding::UNKNOWN</div><div class='del'>-        enc_name = Tk::Encoding::ENCODING_TABLE.get_name(default_def)</div><div class='del'>-      end</div><div class='del'>-    rescue NameError</div><div class='del'>-      # ignore</div><div class='del'>-      enc_name = nil</div><div class='del'>-    rescue ArgumentError</div><div class='del'>-      enc_name = nil</div><div class='del'>-      fail ArgumentError, </div><div class='del'>-           "DEFAULT_TK_ENCODING has an unknown encoding #{default_def}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless enc_name</div><div class='del'>-      if ext_enc_obj == Tk::Encoding::UNKNOWN</div><div class='del'>-        if loc_enc_obj == Tk::Encoding::UNKNOWN</div><div class='del'>-          # use Tk.encoding_system</div><div class='del'>-          enc_name = tksys_enc_name</div><div class='del'>-        else</div><div class='del'>-          # use locale_charmap</div><div class='del'>-          begin</div><div class='del'>-            loc_enc_name = Tk::Encoding::ENCODING_TABLE.get_name(loc_enc_obj)</div><div class='del'>-            if loc_enc_name &amp;&amp; loc_enc_name != tksys_enc_name</div><div class='del'>-              # use locale_charmap</div><div class='del'>-              enc_name = loc_enc_name</div><div class='del'>-            else</div><div class='del'>-              # use Tk.encoding_system</div><div class='del'>-              enc_name = tksys_enc_name</div><div class='del'>-            end</div><div class='del'>-          rescue ArgumentError</div><div class='del'>-            # unsupported encoding on Tk -&gt; use Tk.encoding_system</div><div class='del'>-            enc_name = tksys_enc_name</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          ext_enc_name = Tk::Encoding::ENCODING_TABLE.get_name(ext_enc_obj)</div><div class='del'>-          if ext_enc_name &amp;&amp; ext_enc_name != tksys_enc_name</div><div class='del'>-            # use default_external</div><div class='del'>-            enc_name = ext_enc_name</div><div class='del'>-          else</div><div class='del'>-            # use Tk.encoding_system</div><div class='del'>-            enc_name = tksys_enc_name</div><div class='del'>-          end</div><div class='del'>-        rescue ArgumentError</div><div class='del'>-          # unsupported encoding on Tk -&gt; use Tk.encoding_system</div><div class='del'>-          enc_name = tksys_enc_name</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    Tk.default_encoding = (enc_name)? enc_name: tksys_enc_name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  # dummy methods</div><div class='del'>-  module Tk</div><div class='del'>-    module Encoding</div><div class='del'>-      extend Encoding</div><div class='del'>-</div><div class='del'>-      def force_default_encoding=(mode)</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def force_default_encoding?</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def default_encoding=(enc)</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-      def default_encoding</div><div class='del'>-        nil</div><div class='del'>-      end</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='del'>-    end</div><div class='del'>-</div><div class='del'>-    extend Encoding</div><div class='del'>-  end</div><div class='del'>-</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'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bind_remove(context)</div><div class='del'>-    Tk.bind_remove(self, context)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bindinfo(context=nil)</div><div class='del'>-    Tk.bindinfo(self, context)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</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='del'>-</div><div class='del'>-  def __pathname</div><div class='del'>-    self.path</div><div class='del'>-  end</div><div class='del'>-  private :__pathname</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</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='del'>-</div><div class='del'>-    win, tag = __pathname.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, *__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='del'>-  end</div><div class='del'>-  alias fontobj font_configinfo</div><div class='del'>-</div><div class='del'>-  def font_configure(slot)</div><div class='del'>-    pathname = __pathname</div><div class='del'>-</div><div class='del'>-    slot = _symbolkey2str(slot)</div><div class='del'>-</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'>-              unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-                tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; fnt))</div><div class='del'>-              else</div><div class='del'>-                begin</div><div class='del'>-                  tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; fnt))</div><div class='del'>-                rescue</div><div class='del'>-                  # ignore</div><div class='del'>-                end</div><div class='del'>-              end</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'>-                                                   *(__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='del'>-</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='del'>-</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='del'>-    else</div><div class='del'>-      key = nil</div><div class='del'>-    end</div><div class='del'>-</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='del'>-</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='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'>-        ltn = hash_kv(ltn) if ltn.kind_of?(Hash)</div><div class='del'>-        unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-          tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; ltn))</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; ltn))</div><div class='del'>-          rescue =&gt; e</div><div class='del'>-            # ignore</div><div class='del'>-          end</div><div class='del'>-        end</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], *(__config_cmd &lt;&lt; {}))</div><div class='del'>-    }</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'>-    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 = __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='del'>-</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='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'>-        knj = hash_kv(knj) if knj.kind_of?(Hash)</div><div class='del'>-        unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-          tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; knj))</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            tk_call(*(__config_cmd &lt;&lt; "-#{optkey}" &lt;&lt; knj))</div><div class='del'>-          rescue =&gt; e</div><div class='del'>-            # ignore</div><div class='del'>-          end</div><div class='del'>-        end</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], *(__config_cmd &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 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='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([__pathname, targetkey], *(__config_cmd &lt;&lt; {}))</div><div class='del'>-    else</div><div class='del'>-      fnt.call_font_configure(__pathname, *(__config_cmd &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'>-  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='del'>-    else</div><div class='del'>-      fontobj.dup.call_font_configure(__pathname, *(__config_cmd &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 asciifont_copy latinfont_copy</div><div class='del'>-</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='del'>-    else</div><div class='del'>-        fontobj.dup.call_font_configure(__pathname, *(__config_cmd &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='del'>-</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 TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-    @mode || false</div><div class='del'>-  end</div><div class='del'>-  def TkConfigMethod.__set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode)</div><div class='del'>-    fail SecurityError, "can't change the mode" if $SAFE&gt;=4</div><div class='del'>-    @mode = (mode)? true: false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __cget_cmd</div><div class='del'>-    [self.path, '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.path, 'configure']</div><div class='del'>-  end</div><div class='del'>-  private :__config_cmd</div><div class='del'>-</div><div class='del'>-  def __confinfo_cmd</div><div class='del'>-    __config_cmd</div><div class='del'>-  end</div><div class='del'>-  private :__confinfo_cmd</div><div class='del'>-</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='del'>-  end</div><div class='del'>-  private :__configinfo_struct</div><div class='del'>-</div><div class='del'>-  def __optkey_aliases</div><div class='del'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__optkey_aliases</div><div class='del'>-</div><div class='del'>-  def __numval_optkeys</div><div class='del'>-    []</div><div class='del'>-  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='del'>-  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='del'>-  end</div><div class='del'>-  private :__boolval_optkeys</div><div class='del'>-</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='del'>-  end</div><div class='del'>-  private :__strval_optkeys</div><div class='del'>-</div><div class='del'>-  def __listval_optkeys</div><div class='del'>-    []</div><div class='del'>-  end</div><div class='del'>-  private :__listval_optkeys</div><div class='del'>-</div><div class='del'>-  def __numlistval_optkeys</div><div class='del'>-    []</div><div class='del'>-  end</div><div class='del'>-  private :__numlistval_optkeys</div><div class='del'>-</div><div class='del'>-  def __tkvariable_optkeys</div><div class='del'>-    ['variable', 'textvariable']</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'>-  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'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__ruby2val_optkeys</div><div class='del'>-</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='del'>-  end</div><div class='del'>-  private :__methodcall_optkeys</div><div class='del'>-</div><div class='del'>-  def __keyonly_optkeys  # { def_key=&gt;undef_key or nil, ... }</div><div class='del'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__keyonly_optkeys</div><div class='del'>-</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='del'>-        else</div><div class='del'>-          # remove key</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'>-  private :__conv_keyonly_opts</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</div><div class='del'>-  ################################</div><div class='del'>-</div><div class='del'>-  def [](id)</div><div class='del'>-    cget(id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(id, val)</div><div class='del'>-    configure(id, val)</div><div class='del'>-    val</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __cget_core(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='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias_name, real_name = __optkey_aliases.find{|k, v| k.to_s == slot}</div><div class='del'>-    if real_name</div><div class='del'>-      slot = real_name.to_s</div><div class='del'>-    end</div><div class='del'>-</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='del'>-    end</div><div class='del'>-</div><div class='del'>-    if ( method = _symbolkey2str(__methodcall_optkeys)[slot] )</div><div class='del'>-      return self.__send__(method)</div><div class='del'>-    end</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</div><div class='del'>-    else</div><div class='del'>-      tk_tcl2ruby(tk_call_without_enc(*(__cget_cmd &lt;&lt; "-#{slot}")), true)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__cget_core</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      __cget_core(slot)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        __cget_core(slot)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        if current_configinfo.has_key?(slot.to_s)</div><div class='del'>-          # error on known option</div><div class='del'>-          fail e</div><div class='del'>-        else</div><div class='del'>-          # unknown option</div><div class='del'>-          nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def cget_strict(slot)</div><div class='del'>-    # never use TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-    __cget_core(slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __configure_core(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'>-      __optkey_aliases.each{|alias_name, real_name|</div><div class='del'>-        alias_name = alias_name.to_s</div><div class='del'>-        if slot.has_key?(alias_name)</div><div class='del'>-          slot[real_name.to_s] = slot.delete(alias_name)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='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'>-      alias_name, real_name = __optkey_aliases.find{|k, v| k.to_s == slot}</div><div class='del'>-      if real_name</div><div class='del'>-        slot = real_name.to_s</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='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  private :__configure_core</div><div class='del'>-</div><div class='del'>-  def __check_available_configure_options(keys)</div><div class='del'>-    availables = self.current_configinfo.keys</div><div class='del'>-</div><div class='del'>-    # add non-standard keys</div><div class='del'>-    availables |= __font_optkeys.map{|k|</div><div class='del'>-      [k.to_s, "latin#{k}", "ascii#{k}", "kanji#{k}"]</div><div class='del'>-    }.flatten</div><div class='del'>-    availables |= __methodcall_optkeys.keys.map{|k| k.to_s}</div><div class='del'>-    availables |= __keyonly_optkeys.keys.map{|k| k.to_s}</div><div class='del'>-</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-    keys.delete_if{|k, v| !(availables.include?(k))}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(slot, value=None)</div><div class='del'>-    unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      __configure_core(slot, value)</div><div class='del'>-    else</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        begin</div><div class='del'>-          __configure_core(slot)</div><div class='del'>-        rescue</div><div class='del'>-          slot = __check_available_configure_options(slot)</div><div class='del'>-          __configure_core(slot) unless slot.empty?</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          __configure_core(slot, value)</div><div class='del'>-        rescue =&gt; e</div><div class='del'>-          if current_configinfo.has_key?(slot.to_s)</div><div class='del'>-            # error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # unknown option</div><div class='del'>-            nil</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 configure_cmd(slot, value)</div><div class='del'>-    configure(slot, install_cmd(value))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __configinfo_core(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'>-          fnt = conf[__configinfo_struct[:default_value]]</div><div class='del'>-          if TkFont.is_system_font?(fnt)</div><div class='del'>-            conf[__configinfo_struct[:default_value]] = TkNamedFont.new(fnt)</div><div class='del'>-          end</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'>-</div><div class='del'>-          alias_name, real_name = __optkey_aliases.find{|k, v| k.to_s == slot}</div><div class='del'>-          if real_name</div><div class='del'>-            slot = real_name.to_s</div><div class='del'>-          end</div><div class='del'>-</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='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(*__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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='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='del'>-</div><div class='del'>-            conf</div><div class='del'>-          }</div><div class='del'>-</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'>-              fnt = fontconf[__configinfo_struct[:default_value]]</div><div class='del'>-              if TkFont.is_system_font?(fnt)</div><div class='del'>-                fontconf[__configinfo_struct[:default_value]] \</div><div class='del'>-                  = TkNamedFont.new(fnt)</div><div class='del'>-              end</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='del'>-</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='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; </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'>-          fnt = conf[__configinfo_struct[:default_value]]</div><div class='del'>-          if TkFont.is_system_font?(fnt)</div><div class='del'>-            conf[__configinfo_struct[:default_value]] = TkNamedFont.new(fnt)</div><div class='del'>-          end</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'>-</div><div class='del'>-          alias_name, real_name = __optkey_aliases.find{|k, v| k.to_s == slot}</div><div class='del'>-          if real_name</div><div class='del'>-            slot = real_name.to_s</div><div class='del'>-          end</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='del'>-</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='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'>-              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'>-          __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'>-              fnt = fontconf[__configinfo_struct[:default_value]]</div><div class='del'>-              if TkFont.is_system_font?(fnt)</div><div class='del'>-                fontconf[__configinfo_struct[:default_value]] \</div><div class='del'>-                  = TkNamedFont.new(fnt)</div><div class='del'>-              end</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='del'>-</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='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'>-  private :__configinfo_core</div><div class='del'>-</div><div class='del'>-  def configinfo(slot = nil)</div><div class='del'>-    if slot &amp;&amp; TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      begin</div><div class='del'>-        __configinfo_core(slot)</div><div class='del'>-      rescue</div><div class='del'>-        Array.new(__configinfo_struct.values.max).unshift(slot.to_s)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      __configinfo_core(slot)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</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='del'>-      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='del'>-      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='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'>-class TkObject&lt;TkKernel</div><div class='del'>-  extend  TkCore</div><div class='del'>-  include Tk</div><div class='del'>-  include TkConfigMethod</div><div class='del'>-  include TkBindCore</div><div class='del'>-</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='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 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='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'>-        cget(name)</div><div class='del'>-      rescue</div><div class='del'>-        if self.kind_of?(TkWindow)</div><div class='del'>-          fail NameError, </div><div class='del'>-               "unknown option '#{id}' for #{self.inspect} (deleted widget?)"</div><div class='del'>-        else</div><div class='del'>-          super(id, *args)</div><div class='del'>-        end</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='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'>-=begin</div><div class='del'>-  def [](id)</div><div class='del'>-    cget(id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def []=(id, val)</div><div class='del'>-    configure(id, 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 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='del'>-    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='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  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='del'>-    v</div><div class='del'>-  end</div><div class='del'>-  private :tk_trace_variable</div><div class='del'>-</div><div class='del'>-  def destroy</div><div class='del'>-    #tk_call 'trace', 'vdelete', @tk_vn, 'w', @var_id if @var_id</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class TkWindow&lt;TkObject</div><div class='del'>-  include TkWinfo</div><div class='del'>-  extend TkBindCore</div><div class='del'>-  include Tk::Wm_for_General</div><div class='del'>-</div><div class='del'>-  @@WIDGET_INSPECT_FULL = false</div><div class='del'>-  def TkWindow._widget_inspect_full_?</div><div class='del'>-    @@WIDGET_INSPECT_FULL</div><div class='del'>-  end</div><div class='del'>-  def TkWindow._widget_inspect_full_=(mode)</div><div class='del'>-    @@WIDGET_INSPECT_FULL = (mode &amp;&amp; true) || false</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  def initialize(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'>-      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='del'>-    elsif keys</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      widgetname = keys.delete('widgetname')</div><div class='del'>-      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='del'>-    else</div><div class='del'>-      install_win(if parent then parent.path end)</div><div class='del'>-    end</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 unless without_creating</div><div class='del'>-      if keys</div><div class='del'>-        # tk_call @path, 'configure', *hash_kv(keys)</div><div class='del'>-        configure(keys)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      p 'create_self has args' if $DEBUG</div><div class='del'>-      fontkeys = {}</div><div class='del'>-      methodkeys = {}</div><div class='del'>-      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'>-        __optkey_aliases.each{|alias_name, real_name|</div><div class='del'>-          alias_name = alias_name.to_s</div><div class='del'>-          if keys.has_key?(alias_name)</div><div class='del'>-            keys[real_name.to_s] = keys.delete(alias_name)</div><div class='del'>-          end</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='del'>-      end</div><div class='del'>-      font_configure(fontkeys) unless fontkeys.empty?</div><div class='del'>-      configure(methodkeys) unless methodkeys.empty?</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'>-    # 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='del'>-    end</div><div class='del'>-</div><div class='del'>-    if keys and keys != None</div><div class='del'>-      unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-        tk_call_without_enc(cmd, @path, *hash_kv(keys, true))</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          tk_call_without_enc(cmd, @path, *hash_kv(keys, true))</div><div class='del'>-        rescue =&gt; e</div><div class='del'>-          tk_call_without_enc(cmd, @path)</div><div class='del'>-          keys = __check_available_configure_options(keys)</div><div class='del'>-          unless keys.empty?</div><div class='del'>-            begin</div><div class='del'>-              # try to configure</div><div class='del'>-              configure(keys)</div><div class='del'>-            rescue</div><div class='del'>-              # fail =&gt; includes options adaptable when creattion only?</div><div class='del'>-              begin</div><div class='del'>-                tk_call_without_enc('destroy', @path)</div><div class='del'>-              rescue</div><div class='del'>-                # cannot rescue options error</div><div class='del'>-                fail e </div><div class='del'>-              else</div><div class='del'>-                # re-create widget</div><div class='del'>-                tk_call_without_enc(cmd, @path, *hash_kv(keys, true))</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'>-    else</div><div class='del'>-      tk_call_without_enc(cmd, @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 inspect</div><div class='del'>-    if @@WIDGET_INSPECT_FULL</div><div class='del'>-      super</div><div class='del'>-    else</div><div class='del'>-      str = super</div><div class='del'>-      str[0..(str.index(' '))] &lt;&lt; '@path=' &lt;&lt; @path.inspect &lt;&lt; '&gt;'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def exist?</div><div class='del'>-    TkWinfo.exist?(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bind_class</div><div class='del'>-    @db_class || self.class()</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def database_classname</div><div class='del'>-    TkWinfo.classname(self)</div><div class='del'>-  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='del'>-    else</div><div class='del'>-      TkDatabaseClass.new(name)</div><div class='del'>-    end</div><div class='del'>-  end</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 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='del'>-    else</div><div class='del'>-      TkPack.configure(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 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='del'>-    else</div><div class='del'>-      keys = {'in'=&gt;target}</div><div class='del'>-    end</div><div class='del'>-    #tk_call 'pack', epath, *hash_kv(keys)</div><div class='del'>-    TkPack.configure(self, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</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='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias unpack pack_forget</div><div class='del'>-</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='del'>-    if slot.kind_of? Hash</div><div class='del'>-      TkPack.configure(self, slot)</div><div class='del'>-    else</div><div class='del'>-      TkPack.configure(self, slot=&gt;value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias pack_configure pack_config</div><div class='del'>-</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='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-    else</div><div class='del'>-      TkGrid.configure(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 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='del'>-    else</div><div class='del'>-      keys = {'in'=&gt;target}</div><div class='del'>-    end</div><div class='del'>-    #tk_call 'grid', epath, *hash_kv(keys)</div><div class='del'>-    TkGrid.configure(self, keys)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def grid_anchor(anchor=None)</div><div class='del'>-    if anchor == None</div><div class='del'>-      TkGrid.anchor(self)</div><div class='del'>-    else</div><div class='del'>-      TkGrid.anchor(self, anchor)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</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='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias ungrid grid_forget</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-    else</div><div class='del'>-      TkGrid.configure(self, slot=&gt;value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias grid_configure grid_config</div><div class='del'>-</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='del'>-  end</div><div class='del'>-  alias grid_columnconfigure grid_columnconfig</div><div class='del'>-  alias grid_column grid_columnconfig</div><div class='del'>-</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='del'>-  end</div><div class='del'>-  alias grid_rowconfigure grid_rowconfig</div><div class='del'>-  alias grid_row grid_rowconfig</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-    else</div><div class='del'>-      TkGrid.propagate(self, mode)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-    else</div><div class='del'>-      keys = {'in'=&gt;target}</div><div class='del'>-    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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-  alias unplace place_forget</div><div class='del'>-</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='del'>-  end</div><div class='del'>-  alias place_configure place_config</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</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='del'>-    else</div><div class='del'>-      tk_call_without_enc('focus', path)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  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='del'>-    else</div><div class='del'>-      return tk_call_without_enc('grab', opt, path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def grab_current</div><div class='del'>-    grab('current')</div><div class='del'>-  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='del'>-  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='del'>-  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='del'>-  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='del'>-  end</div><div class='del'>-</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='del'>-  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='del'>-  end</div><div class='del'>-  alias raise_window raise</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_cmd('command', cmd)</div><div class='del'>-    elsif b</div><div class='del'>-      configure_cmd('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 colormodel(model=None)</div><div class='del'>-    tk_call('tk', 'colormodel', path, model)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def caret(keys=nil)</div><div class='del'>-    TkXIM.caret(path, keys)</div><div class='del'>-  end</div><div class='del'>-</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='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    children.each{|path, obj|</div><div class='del'>-      obj.instance_eval{</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='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      TkCore::INTERP.tk_windows.delete(path)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      tk_call_without_enc('destroy', epath)</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    uninstall_win</div><div class='del'>-  end</div><div class='del'>-</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='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('visibility', path)</div><div class='del'>-    else</div><div class='del'>-      INTERP._invoke('tkwait', 'visibility', path)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def eventloop_wait_visibility</div><div class='del'>-    wait_visibility(false)</div><div class='del'>-  end</div><div class='del'>-  def thread_wait_visibility</div><div class='del'>-    wait_visibility(true)</div><div class='del'>-  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='del'>-    else</div><div class='del'>-      INTERP._invoke('tkwait', 'window', epath)</div><div class='del'>-    end</div><div class='del'>-  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='del'>-  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='del'>-  end</div><div class='del'>-  alias thread_wait_window thread_wait_destroy</div><div class='del'>-</div><div class='del'>-  alias tkwait_destroy wait_destroy</div><div class='del'>-  alias tkwait_window wait_destroy</div><div class='del'>-</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='del'>-</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='del'>-</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='del'>-    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='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bindtags=(taglist)</div><div class='del'>-    bindtags(taglist)</div><div class='del'>-    taglist</div><div class='del'>-  end</div><div class='del'>-</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='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bindtags_unshift(tag)</div><div class='del'>-    bindtags(bindtags().unshift(tag))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TkWidget = TkWindow</div><div class='del'>-</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='del'>-</div><div class='del'>-module Tk</div><div class='del'>-  RELEASE_DATE = '2008-05-23'.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='del'>-end</div><div class='del'>-</div><div class='del'>-# call setup script for Tk extension libraries (base configuration)</div><div class='del'>-begin</div><div class='del'>-  require 'tkextlib/version.rb'</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='head'>diff --git a/ext/tk/lib/tk/after.rb b/ext/tk/lib/tk/after.rb<br/>deleted file mode 100644<br/>index 8c58210331..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/after.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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$</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 0773f7708d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/autoload.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/autoload.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,414 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  autoload</div><div class='del'>-#</div><div class='del'>-############################################</div><div class='del'>-#  geometry manager</div><div class='del'>-module Tk</div><div class='del'>-  autoload :Grid,             'tk/grid'</div><div class='del'>-  def Grid(*args); TkGrid.configure(*args); end</div><div class='del'>-</div><div class='del'>-  autoload :Pack,             'tk/pack'</div><div class='del'>-  def Pack(*args); TkPack.configure(*args); end</div><div class='del'>-</div><div class='del'>-  autoload :Place,            'tk/place'</div><div class='del'>-  def Place(*args); TkPlace.configure(*args); end</div><div class='del'>-end</div><div class='del'>-</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'>-# classes on Tk module</div><div class='del'>-module Tk</div><div class='del'>-  autoload :Button,           'tk/button'</div><div class='del'>-</div><div class='del'>-  autoload :Canvas,           'tk/canvas'</div><div class='del'>-</div><div class='del'>-  autoload :CheckButton,      'tk/checkbutton'</div><div class='del'>-  autoload :Checkbutton,      'tk/checkbutton'</div><div class='del'>-</div><div class='del'>-  autoload :Entry,            'tk/entry'</div><div class='del'>-</div><div class='del'>-  autoload :Frame,            'tk/frame'</div><div class='del'>-</div><div class='del'>-  autoload :Label,            'tk/label'</div><div class='del'>-</div><div class='del'>-  autoload :LabelFrame,       'tk/labelframe'</div><div class='del'>-  autoload :Labelframe,       'tk/labelframe'</div><div class='del'>-</div><div class='del'>-  autoload :Listbox,          'tk/listbox'</div><div class='del'>-</div><div class='del'>-  autoload :Menu,             'tk/menu'</div><div class='del'>-  autoload :MenuClone,        'tk/menu'</div><div class='del'>-  autoload :CloneMenu,        'tk/menu'</div><div class='del'>-  autoload :SystemMenu,       'tk/menu'</div><div class='del'>-  autoload :SysMenu_Help,     'tk/menu'</div><div class='del'>-  autoload :SysMenu_System,   'tk/menu'</div><div class='del'>-  autoload :SysMenu_Apple,    'tk/menu'</div><div class='del'>-  autoload :Menubutton,       'tk/menu'</div><div class='del'>-  autoload :MenuButton,       'tk/menu'</div><div class='del'>-  autoload :OptionMenubutton, 'tk/menu'</div><div class='del'>-  autoload :OptionMenBbutton, 'tk/menu'</div><div class='del'>-</div><div class='del'>-  autoload :Message,          'tk/message'</div><div class='del'>-</div><div class='del'>-  autoload :PanedWindow,      'tk/panedwindow'</div><div class='del'>-  autoload :Panedwindow,      'tk/panedwindow'</div><div class='del'>-</div><div class='del'>-  autoload :RadioButton,      'tk/radiobutton'</div><div class='del'>-  autoload :Radiobutton,      'tk/radiobutton'</div><div class='del'>-</div><div class='del'>-  autoload :Root,             'tk/root'</div><div class='del'>-</div><div class='del'>-  autoload :Scale,            'tk/scale'</div><div class='del'>-</div><div class='del'>-  autoload :Scrollbar,        'tk/scrollbar'</div><div class='del'>-  autoload :XScrollbar,       'tk/scrollbar'</div><div class='del'>-  autoload :YScrollbar,       'tk/scrollbar'</div><div class='del'>-</div><div class='del'>-  autoload :Spinbox,          'tk/spinbox'</div><div class='del'>-</div><div class='del'>-  autoload :Text,             'tk/text'</div><div class='del'>-</div><div class='del'>-  autoload :Toplevel,         'tk/toplevel'</div><div class='del'>-end</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'>-</div><div class='del'>-  autoload :OptionObj,        'tk/optionobj'</div><div class='del'>-</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'>-</div><div class='del'>-  autoload :Wm,               'tk/wm'</div><div class='del'>-  autoload :Wm_for_General,   'tk/wm'</div><div class='del'>-</div><div class='del'>-  autoload :MacResource,      'tk/macpkg'</div><div class='del'>-</div><div class='del'>-  autoload :WinDDE,           'tk/winpkg'</div><div class='del'>-  autoload :WinRegistry,      'tk/winpkg'</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'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-############################################</div><div class='del'>-#  toplevel classes/modules (fixed)</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 :TkConsole,          'tk/console'</div><div class='del'>-</div><div class='del'>-autoload :TkcItem,            'tk/canvas'</div><div class='del'>-autoload :TkcArc,             'tk/canvas'</div><div class='del'>-autoload :TkcBitmap,          'tk/canvas'</div><div class='del'>-autoload :TkcImage,           'tk/canvas'</div><div class='del'>-autoload :TkcLine,            'tk/canvas'</div><div class='del'>-autoload :TkcOval,            'tk/canvas'</div><div class='del'>-autoload :TkcPolygon,         'tk/canvas'</div><div class='del'>-autoload :TkcRectangle,       'tk/canvas'</div><div class='del'>-autoload :TkcText,            'tk/canvas'</div><div class='del'>-autoload :TkcWindow,          '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 :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 :TkEvent,            'tk/event'</div><div class='del'>-</div><div class='del'>-autoload :TkFont,             'tk/font'</div><div class='del'>-autoload :TkNamedFont,        'tk/font'</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 :TkSystemMenu,       '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 :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 :TkRoot,             'tk/root'</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 :TkTreatTagFont,     'tk/tagfont'</div><div class='del'>-</div><div class='del'>-autoload :TkTextImage,        'tk/textimage'</div><div class='del'>-autoload :TktImage,           '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'>-autoload :TktMark,            'tk/textmark'</div><div class='del'>-autoload :TktNamedMark,       'tk/textmark'</div><div class='del'>-autoload :TktMarkInsert,      'tk/textmark'</div><div class='del'>-autoload :TktMarkCurrent,     'tk/textmark'</div><div class='del'>-autoload :TktMarkAnchor,      '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'>-autoload :TktTag,             'tk/texttag'</div><div class='del'>-autoload :TktNamedTag,        'tk/texttag'</div><div class='del'>-autoload :TktTagSel,          'tk/texttag'</div><div class='del'>-</div><div class='del'>-autoload :TkTextWindow,       'tk/textwindow'</div><div class='del'>-autoload :TktWindow,          '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 :TkTextWin,          'tk/txtwin_abst'</div><div class='del'>-</div><div class='del'>-autoload :TkValidation,       'tk/validation'</div><div class='del'>-autoload :TkValidateCommand,  '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 :TkXIM,              'tk/xim'</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-############################################</div><div class='del'>-#  toplevel classes/modules (switchable)</div><div class='del'>-module Tk</div><div class='del'>-  @TOPLEVEL_ALIAS_TABLE = {}</div><div class='del'>-  @TOPLEVEL_ALIAS_TABLE[:Tk] = {</div><div class='del'>-    :TkButton             =&gt; 'tk/button', </div><div class='del'>-</div><div class='del'>-    :TkCanvas             =&gt; 'tk/canvas', </div><div class='del'>-</div><div class='del'>-    :TkCheckButton        =&gt; 'tk/checkbutton', </div><div class='del'>-    :TkCheckbutton        =&gt; 'tk/checkbutton', </div><div class='del'>-</div><div class='del'>-    # :TkDialog             =&gt; 'tk/dialog', </div><div class='del'>-    # :TkDialog2            =&gt; 'tk/dialog', </div><div class='del'>-    # :TkDialogObj          =&gt; 'tk/dialog', </div><div class='del'>-    # :TkWarning            =&gt; 'tk/dialog', </div><div class='del'>-    # :TkWarning2           =&gt; 'tk/dialog', </div><div class='del'>-    # :TkWarningObj         =&gt; 'tk/dialog', </div><div class='del'>-</div><div class='del'>-    :TkEntry              =&gt; 'tk/entry', </div><div class='del'>-</div><div class='del'>-    :TkFrame              =&gt; 'tk/frame', </div><div class='del'>-</div><div class='del'>-    :TkLabel              =&gt; 'tk/label', </div><div class='del'>-</div><div class='del'>-    :TkLabelFrame         =&gt; 'tk/labelframe', </div><div class='del'>-    :TkLabelframe         =&gt; 'tk/labelframe', </div><div class='del'>-</div><div class='del'>-    :TkListbox            =&gt; 'tk/listbox', </div><div class='del'>-</div><div class='del'>-    :TkMacResource        =&gt; 'tk/macpkg', </div><div class='del'>-</div><div class='del'>-    :TkMenu               =&gt; 'tk/menu', </div><div class='del'>-    :TkMenuClone          =&gt; 'tk/menu', </div><div class='del'>-    :TkCloneMenu          =&gt; 'tk/menu', </div><div class='del'>-    # :TkSystemMenu         =&gt; 'tk/menu', </div><div class='del'>-    :TkSysMenu_Help       =&gt; 'tk/menu', </div><div class='del'>-    :TkSysMenu_System     =&gt; 'tk/menu', </div><div class='del'>-    :TkSysMenu_Apple      =&gt; 'tk/menu', </div><div class='del'>-    :TkMenubutton         =&gt; 'tk/menu', </div><div class='del'>-    :TkMenuButton         =&gt; 'tk/menu', </div><div class='del'>-    :TkOptionMenubutton   =&gt; 'tk/menu', </div><div class='del'>-    :TkOptionMenuButton   =&gt; 'tk/menu', </div><div class='del'>-</div><div class='del'>-    :TkMessage            =&gt; 'tk/message', </div><div class='del'>-</div><div class='del'>-    :TkPanedWindow        =&gt; 'tk/panedwindow', </div><div class='del'>-    :TkPanedwindow        =&gt; 'tk/panedwindow', </div><div class='del'>-</div><div class='del'>-    :TkRadioButton        =&gt; 'tk/radiobutton', </div><div class='del'>-    :TkRadiobutton        =&gt; 'tk/radiobutton', </div><div class='del'>-</div><div class='del'>-    # :TkRoot               =&gt; 'tk/root', </div><div class='del'>-</div><div class='del'>-    :TkScale              =&gt; 'tk/scale', </div><div class='del'>-</div><div class='del'>-    :TkScrollbar          =&gt; 'tk/scrollbar', </div><div class='del'>-    :TkXScrollbar         =&gt; 'tk/scrollbar', </div><div class='del'>-    :TkYScrollbar         =&gt; 'tk/scrollbar', </div><div class='del'>-</div><div class='del'>-    :TkSpinbox            =&gt; 'tk/spinbox', </div><div class='del'>-</div><div class='del'>-    :TkText               =&gt; 'tk/text', </div><div class='del'>-</div><div class='del'>-    :TkToplevel           =&gt; 'tk/toplevel', </div><div class='del'>-</div><div class='del'>-    :TkWinDDE             =&gt; 'tk/winpkg', </div><div class='del'>-    :TkWinRegistry        =&gt; 'tk/winpkg', </div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  @TOPLEVEL_ALIAS_OWNER = {}</div><div class='del'>-</div><div class='del'>-  @TOPLEVEL_ALIAS_SETUP_PROC = {}</div><div class='del'>-</div><div class='del'>-  @current_default_widget_set = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-############################################</div><div class='del'>-#  methods to control default widget set</div><div class='del'>-############################################</div><div class='del'>-</div><div class='del'>-class &lt;&lt; Tk</div><div class='del'>-  def default_widget_set</div><div class='del'>-    @current_default_widget_set</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def default_widget_set=(target)</div><div class='del'>-    target = target.to_sym</div><div class='del'>-    return target if target == @current_default_widget_set</div><div class='del'>-</div><div class='del'>-    if (cmd = @TOPLEVEL_ALIAS_SETUP_PROC[target])</div><div class='del'>-      cmd.call(target)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    _replace_toplevel_aliases(target)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __set_toplevel_aliases__(target, obj, *symbols)</div><div class='del'>-    @TOPLEVEL_ALIAS_TABLE[target = target.to_sym] ||= {}</div><div class='del'>-    symbols.each{|sym|</div><div class='del'>-      @TOPLEVEL_ALIAS_TABLE[target][sym = sym.to_sym] = obj</div><div class='del'>-      # if @current_default_widget_set == target</div><div class='del'>-      if @TOPLEVEL_ALIAS_OWNER[sym] == target</div><div class='del'>-        Object.class_eval{remove_const sym} if Object.const_defined?(sym)</div><div class='del'>-        Object.const_set(sym, obj)</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'>-  private</div><div class='del'>-  def _replace_toplevel_aliases(target)</div><div class='del'>-    # check already autoloaded</div><div class='del'>-    if (table = @TOPLEVEL_ALIAS_TABLE[current = @current_default_widget_set])</div><div class='del'>-      table.each{|sym, file|</div><div class='del'>-        if !Object.autoload?(sym) &amp;&amp; Object.const_defined?(sym) &amp;&amp; </div><div class='del'>-            @TOPLEVEL_ALIAS_TABLE[current][sym].kind_of?(String)</div><div class='del'>-          # autoload -&gt; class</div><div class='del'>-          @TOPLEVEL_ALIAS_TABLE[current][sym] = Object.const_get(sym)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # setup autoloads</div><div class='del'>-    @TOPLEVEL_ALIAS_TABLE[target].each{|sym, file|</div><div class='del'>-      Object.class_eval{remove_const sym} if Object.const_defined?(sym)</div><div class='del'>-      if file.kind_of?(String)</div><div class='del'>-        # file =&gt; autoload target file</div><div class='del'>-        Object.autoload(sym, file)</div><div class='del'>-      else</div><div class='del'>-        # file =&gt; loaded class object</div><div class='del'>-        Object.const_set(sym, file)</div><div class='del'>-      end</div><div class='del'>-      @TOPLEVEL_ALIAS_OWNER[sym] = target</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # update current alias</div><div class='del'>-    @current_default_widget_set = target</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-############################################</div><div class='del'>-# setup default widget set =&gt; :Tk</div><div class='del'>-Tk.default_widget_set = :Tk</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-############################################</div><div class='del'>-#  depend on the version of Tcl/Tk</div><div class='del'>-# major, minor, type, type_name, patchlevel = TclTkLib.get_version</div><div class='del'>-</div><div class='del'>-############################################</div><div class='del'>-# Ttk (Tile) support</div><div class='del'>-=begin</div><div class='del'>-if major &gt; 8 || </div><div class='del'>-    (major == 8 &amp;&amp; minor &gt; 5) || </div><div class='del'>-    (major == 8 &amp;&amp; minor == 5 &amp;&amp; type &gt;= TclTkLib::RELEASE_TYPE::BETA) </div><div class='del'>-  # Tcl/Tk 8.5 beta or later</div><div class='del'>-  Object.autoload :Ttk, 'tkextlib/tile'</div><div class='del'>-  Tk.autoload :Tile, 'tkextlib/tile'</div><div class='del'>-</div><div class='del'>-  require 'tk/ttk_selector'</div><div class='del'>-end</div><div class='del'>-=end</div><div class='del'>-Object.autoload :Ttk, 'tkextlib/tile'</div><div class='del'>-Tk.autoload :Tile, 'tkextlib/tile'</div><div class='del'>-require 'tk/ttk_selector'</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 88c8367a88..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/bindtag.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/bindtag.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,138 +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'>-</div><div class='del'>-  (Tk_BINDTAG_ID = ["btag".freeze, "00000".taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    BTagID_TBL.mutex.synchronize{ BTagID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def TkBindTag.id2obj(id)</div><div class='del'>-    BTagID_TBL.mutex.synchronize{</div><div class='del'>-      (BTagID_TBL[id])? BTagID_TBL[id]: id</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def TkBindTag.new_by_name(name, *args, &amp;b)</div><div class='del'>-    BTagID_TBL.mutex.synchronize{</div><div class='del'>-      return BTagID_TBL[name] if BTagID_TBL[name]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    self.new.instance_eval{</div><div class='del'>-      BTagID_TBL.mutex.synchronize{</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'>-      }</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'>-=end</div><div class='del'>-  def TkBindTag.new_by_name(name, *args, &amp;b)</div><div class='del'>-    obj = nil</div><div class='del'>-    BTagID_TBL.mutex.synchronize{</div><div class='del'>-      if BTagID_TBL[name]</div><div class='del'>-        obj = BTagID_TBL[name]</div><div class='del'>-      else</div><div class='del'>-        (obj = BTagID_TBL[name] = self.allocate).instance_eval{</div><div class='del'>-          @id = name</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    bind(*args, &amp;b) if obj &amp;&amp; args != []</div><div class='del'>-    obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args, &amp;b)</div><div class='del'>-    Tk_BINDTAG_ID.mutex.synchronize{</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'>-    }</div><div class='del'>-    BTagID_TBL.mutex.synchronize{</div><div class='del'>-      BTagID_TBL[@id] = self</div><div class='del'>-    }</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'>-=begin</div><div class='del'>-  def self.new(name, *args, &amp;b)</div><div class='del'>-    BTagID_TBL.mutex.synchronize{</div><div class='del'>-      return BTagID_TBL[name] if BTagID_TBL[name]</div><div class='del'>-    }</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.mutex.synchronize{</div><div class='del'>-      BTagID_TBL[@id] = self</div><div class='del'>-    }</div><div class='del'>-    bind(*args, &amp;b) if args != []</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-  def self.new(name, *args, &amp;b)</div><div class='del'>-    BTagID_TBL.mutex.synchronize{</div><div class='del'>-      if BTagID_TBL[name]</div><div class='del'>-        BTagID_TBL[name]</div><div class='del'>-      else</div><div class='del'>-        BTagID_TBL[name] = self.allocate.instance_eval{</div><div class='del'>-          initialize(name, *args, &amp;b)</div><div class='del'>-          self</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'>-  def initialize(name, *args, &amp;b)</div><div class='del'>-    @id = name</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 770a5785bb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/button.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/button.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +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 Tk::Button&lt;Tk::Label</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='del'>-</div><div class='del'>-#TkButton = Tk::Button unless Object.const_defined? :TkButton</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Button, :TkButton)</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 36ea008a17..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/canvas.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/canvas.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,789 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/canvas.rb - Tk canvas classes</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 Tk::Canvas&lt;TkWindow</div><div class='del'>-  include TkCanvasItemConfig</div><div class='del'>-  include Tk::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'>-  alias canvas_x canvasx</div><div class='del'>-  alias canvas_y canvasy</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'>-    tbl = nil</div><div class='del'>-    TkcItem::CItemID_TBL.mutex.synchronize{</div><div class='del'>-      tbl = TkcItem::CItemID_TBL[self.path]</div><div class='del'>-    }</div><div class='del'>-    if tbl</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.mutex.synchronize{</div><div class='del'>-              tbl.delete(item.id)</div><div class='del'>-            }</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, gain=None)</div><div class='del'>-    tk_send_without_enc('scan', 'dragto', x, y, gain)</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'>-#TkCanvas = Tk::Canvas unless Object.const_defined? :TkCanvas</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Canvas, :TkCanvas)</div><div class='del'>-</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'>-</div><div class='del'>-  CItemID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    CItemID_TBL.mutex.synchronize{ CItemID_TBL.clear }</div><div class='del'>-  }</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'>-    CItemID_TBL.mutex.synchronize{</div><div class='del'>-      if CItemID_TBL[cpath]</div><div class='del'>-        CItemID_TBL[cpath][id]? CItemID_TBL[cpath][id]: id</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'>-</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_optkey_aliases(nil).each{|alias_name, real_name|</div><div class='del'>-        alias_name = alias_name.to_s</div><div class='del'>-        if keys.has_key?(alias_name)</div><div class='del'>-          keys[real_name.to_s] = keys.delete(alias_name)</div><div class='del'>-        end</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?(Tk::Canvas)</div><div class='del'>-    #  fail ArgumentError, "expect Tk::Canvas 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.mutex.synchronize{</div><div class='del'>-      CItemID_TBL[@path] = {} unless CItemID_TBL[@path]</div><div class='del'>-      CItemID_TBL[@path][@id] = self</div><div class='del'>-    }</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.mutex.synchronize{</div><div class='del'>-      CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]</div><div class='del'>-    }</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 49796d80b2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/canvastag.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/canvastag.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,434 +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'>-  def cget_strict(option)</div><div class='del'>-    @c.itemcget_strict(@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'>-</div><div class='del'>-  (Tk_CanvasTag_ID = ['ctag'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    CTagID_TBL.mutex.synchronize{ CTagID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def TkcTag.id2obj(canvas, id)</div><div class='del'>-    cpath = canvas.path</div><div class='del'>-    CTagID_TBL.mutex.synchronize{</div><div class='del'>-      if CTagID_TBL[cpath]</div><div class='del'>-        CTagID_TBL[cpath][id]? CTagID_TBL[cpath][id]: id</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'>-</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'>-    Tk_CanvasTag_ID.mutex.synchronize{</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'>-      Tk_CanvasTag_ID[1].succ!</div><div class='del'>-    }</div><div class='del'>-    CTagID_TBL.mutex.synchronize{</div><div class='del'>-      CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-      CTagID_TBL[@cpath][@id] = self</div><div class='del'>-    }</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.mutex.synchronize{</div><div class='del'>-      CTagID_TBL[@cpath].delete(@id) if CTagID_TBL[@cpath]</div><div class='del'>-    }</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, mode=nil, *args)</div><div class='del'>-    obj = nil</div><div class='del'>-    CTagID_TBL.mutex.synchronize{</div><div class='del'>-      if CTagID_TBL[parent.path] &amp;&amp; CTagID_TBL[parent.path][name]</div><div class='del'>-        obj = CTagID_TBL[parent.path][name]</div><div class='del'>-      else</div><div class='del'>-        # super(parent, name, *args)</div><div class='del'>-        (obj = self.allocate).instance_eval{</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'>-        }</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    if obj &amp;&amp; mode</div><div class='del'>-      tk_call_without_enc(@c.path, "addtag", @id, mode, *args)</div><div class='del'>-    end</div><div class='del'>-    obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, mode=nil, *args)</div><div class='del'>-    # dummy:: not called by 'new' method</div><div class='del'>-</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'>-</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;TkcTagString</div><div class='del'>-  def self.new(parent)</div><div class='del'>-    super(parent, 'all')</div><div class='del'>-  end</div><div class='del'>-=begin</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.mutex.synchronize{</div><div class='del'>-      CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-      CTagID_TBL[@cpath][@id] = self</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'>-class TkcTagCurrent&lt;TkcTagString</div><div class='del'>-  def self.new(parent)</div><div class='del'>-    super(parent, 'current')</div><div class='del'>-  end</div><div class='del'>-=begin</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.mutex.synchronize{</div><div class='del'>-      CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-      CTagID_TBL[@cpath][@id] = self</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'>-class TkcGroup&lt;TkcTag</div><div class='del'>-  (Tk_cGroup_ID = ['tkcg'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</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'>-    Tk_cGroup_ID.mutex.synchronize{</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'>-      Tk_cGroup_ID[1].succ!</div><div class='del'>-    }</div><div class='del'>-    CTagID_TBL.mutex.synchronize{</div><div class='del'>-      CTagID_TBL[@cpath] = {} unless CTagID_TBL[@cpath]</div><div class='del'>-      CTagID_TBL[@cpath][@id] = self</div><div class='del'>-    }</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 b1186a87ed..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/checkbutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/checkbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +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 Tk::CheckButton&lt;Tk::RadioButton</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'>-</div><div class='del'>-Tk::Checkbutton = Tk::CheckButton</div><div class='del'>-#TkCheckButton = Tk::CheckButton unless Object.const_defined? :TkCheckButton</div><div class='del'>-#TkCheckbutton = Tk::Checkbutton unless Object.const_defined? :TkCheckbutton</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::CheckButton, </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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 883d43c3ea..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/composite.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/composite.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,458 +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'>-      if klass &lt;= TkFrame || klass &lt; Tk::Frame || 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'>-        if self.class &lt; TkFrame || self.class.superclass &lt; Tk::Frame || 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'>-      if self.class &lt; TkFrame || self.class.superclass &lt; Tk::Frame || 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 = Tk::Frame.new(parent, :class=&gt;base_class_name)</div><div class='del'>-      # --&gt; use current TkFrame class</div><div class='del'>-      @frame = TkFrame.new(parent, :class=&gt;base_class_name)</div><div class='del'>-    else</div><div class='del'>-      # @frame = Tk::Frame.new(parent)</div><div class='del'>-      # --&gt; use current TkFrame class</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 inspect</div><div class='del'>-    str = super</div><div class='del'>-    str.chop &lt;&lt; ' @epath=' &lt;&lt; @epath.inspect &lt;&lt; '&gt;'</div><div class='del'>-  end</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_delegates(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'>-          return wins[-1].cget_strict(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'>-    return None</div><div class='del'>-  end</div><div class='del'>-  private :__cget_delegates</div><div class='del'>-</div><div class='del'>-  def cget(slot)</div><div class='del'>-    if (ret = __cget_delegates(slot)) == None</div><div class='del'>-      super(slot)</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 cget_strict(slot)</div><div class='del'>-    if (ret = __cget_delegates(slot)) == None</div><div class='del'>-      super(slot)</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'>-=begin</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'>-=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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 02de0b0d85..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/encodedstr.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/encodedstr.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,187 +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'>-      enc ||= (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'>-      if TkCore::WITH_ENCODING</div><div class='del'>-        unless encobj = Tk::Encoding::ENCODING_TABLE.get_obj(enc)</div><div class='del'>-          fail ArgumentError, "unsupported Tk encoding '#{enc}'"</div><div class='del'>-        end</div><div class='del'>-        self.force_encoding(encobj)</div><div class='del'>-      else</div><div class='del'>-        @encoding = enc</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if TkCore::WITH_ENCODING</div><div class='del'>-      alias encoding_obj encoding</div><div class='del'>-      alias __encoding   encoding</div><div class='del'>-      def encoding</div><div class='del'>-        Tk::Encoding::ENCODING_TABLE.get_name(super())</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      def encoding</div><div class='del'>-        @encoding</div><div class='del'>-      end</div><div class='del'>-      alias encoding_obj encoding</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if TkCore::WITH_ENCODING</div><div class='del'>-      # wrapper methods for compatibility</div><div class='del'>-      alias __instance_variable_get instance_variable_get</div><div class='del'>-      alias __instance_variable_set instance_variable_set</div><div class='del'>-      alias __instance_eval         instance_eval</div><div class='del'>-      alias __instance_variables    instance_variables</div><div class='del'>-</div><div class='del'>-      def instance_variable_get(key)</div><div class='del'>-        if (key.to_s == '@encoding')</div><div class='del'>-          self.encoding</div><div class='del'>-        else</div><div class='del'>-          super(key)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def instance_variable_set(key, value)</div><div class='del'>-        if (key.to_s == '@encoding')</div><div class='del'>-          if value</div><div class='del'>-            self.force_encoding(value)</div><div class='del'>-          else</div><div class='del'>-            self.force_encoding(Tk::Encoding::UNKNOWN)</div><div class='del'>-          end</div><div class='del'>-          value</div><div class='del'>-        else</div><div class='del'>-          super(key, value)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def instance_eval(*args, &amp;b)</div><div class='del'>-        old_enc = @encoding = self.encoding</div><div class='del'>-</div><div class='del'>-        ret = super(*args, &amp;b)</div><div class='del'>-</div><div class='del'>-        if @encoding</div><div class='del'>-          if @encoding != old_enc</div><div class='del'>-            # modified by user</div><div class='del'>-            self.force_encoding(@encoding)</div><div class='del'>-          end</div><div class='del'>-          remove_instance_variable(:@encoding)</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            remove_instance_variable(:@encoding)</div><div class='del'>-            # user sets to nil -&gt; use current default</div><div class='del'>-            self.force_encoding(Tk.encoding)</div><div class='del'>-          rescue NameError</div><div class='del'>-            # removed by user -&gt; ignore, because user don't use @encoding</div><div class='del'>-          end</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'>-    def instance_variables</div><div class='del'>-      ret = super()</div><div class='del'>-      ret &lt;&lt; :@encoding  # fake !!</div><div class='del'>-      ret</div><div class='del'>-    end</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 8ce8def1e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/entry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/entry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,119 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/entry.rb - Tk entry classes</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 Tk::Entry&lt;Tk::Label</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='del'>-</div><div class='del'>-#TkEntry = Tk::Entry unless Object.const_defined? :TkEntry</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Entry, :TkEntry)</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 d8aad6248b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/event.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/event.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,542 +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      =           KEY</div><div class='del'>-</div><div class='del'>-      STRING_DATA =           0x80000000  # special flag for 'data' field</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|Grp::STRING_DATA), </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'>-        next if !val || (val == '??' &amp;&amp; (flag &amp; Grp::STRING_DATA))</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'>-      # ?e</div><div class='del'>-      [ ?f, ?b, :focus ], </div><div class='del'>-      # ?g</div><div class='del'>-      [ ?h, ?n, :height ], </div><div class='del'>-      [ ?i, ?s, :win_hex ], </div><div class='del'>-      # ?j</div><div class='del'>-      [ ?k, ?n, :keycode ], </div><div class='del'>-      # ?l</div><div class='del'>-      [ ?m, ?s, :mode ], </div><div class='del'>-      # ?n</div><div class='del'>-      [ ?o, ?b, :override ], </div><div class='del'>-      [ ?p, ?s, :place ], </div><div class='del'>-      # ?q</div><div class='del'>-      # ?r</div><div class='del'>-      [ ?s, ?x, :state ], </div><div class='del'>-      [ ?t, ?n, :time ], </div><div class='del'>-      # ?u</div><div class='del'>-      [ ?v, ?n, :value_mask ], </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'>-      # ?z</div><div class='del'>-      [ ?A, ?s, :char ], </div><div class='del'>-      [ ?B, ?n, :borderwidth ], </div><div class='del'>-      # ?C</div><div class='del'>-      [ ?D, ?n, :wheel_delta ], </div><div class='del'>-      [ ?E, ?b, :send_event ], </div><div class='del'>-      # ?F</div><div class='del'>-      # ?G</div><div class='del'>-      # ?H</div><div class='del'>-      # ?I</div><div class='del'>-      # ?J</div><div class='del'>-      [ ?K, ?s, :keysym ], </div><div class='del'>-      # ?L</div><div class='del'>-      # ?M</div><div class='del'>-      [ ?N, ?n, :keysym_num ], </div><div class='del'>-      # ?O</div><div class='del'>-      [ ?P, ?s, :property ], </div><div class='del'>-      # ?Q</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'>-      # ?U</div><div class='del'>-      # ?V</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'>-      # ?Z</div><div class='del'>-      nil</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    # [ &lt;'%' subst-key str&gt;, &lt;proc type char&gt;, &lt;instance var (accessor) name&gt;]</div><div class='del'>-    #   the subst-key string will be converted to a bytecode (128+idx).</div><div class='del'>-    LONGKEY_TBL = [</div><div class='del'>-      # for example, for %CTT and %CST subst-key on tkdnd-2.0</div><div class='del'>-      # ['CTT', ?l, :drop_target_type], </div><div class='del'>-      # ['CST', ?l, :drop_source_type], </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'>-=begin</div><div class='del'>-    # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-    KEY_TBL.map!{|inf|</div><div class='del'>-      if inf.kind_of?(Array)</div><div class='del'>-        inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-      end</div><div class='del'>-      inf</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    PROC_TBL.map!{|inf|</div><div class='del'>-      if inf.kind_of?(Array)</div><div class='del'>-        inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-      end</div><div class='del'>-      inf</div><div class='del'>-    }</div><div class='del'>-=end</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'>-    # _setup_subst_table(KEY_TBL, LONGKEY_TBL, PROC_TBL) # if use longname-keys</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.map!{|arg| klass._sym2subst(arg)}</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 62d628c132..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/font.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/font.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2344 +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]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</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.mutex.synchronize{ Tk_FontNameTBL.clear }</div><div class='del'>-    Tk_FontUseTBL.mutex.synchronize{ 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'>-  # system font names</div><div class='del'>-  SYSTEM_FONT_NAMES = []</div><div class='del'>-  def SYSTEM_FONT_NAMES.add(font_names)</div><div class='del'>-    (@mutex ||= Mutex.new).synchronize{</div><div class='del'>-      self.replace(self | font_names.map{|name| name.to_s})</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  def SYSTEM_FONT_NAMES.include?(name)</div><div class='del'>-    (@mutex ||= Mutex.new).synchronize{</div><div class='del'>-      super(name.to_s)</div><div class='del'>-    }</div><div class='del'>-  end</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\.[0-4]/</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'>-  when /^8\.[5-9]/, /^9\..*/</div><div class='del'>-    if tk_call('font', 'names') =~ /\bTkDefaultFont\b/</div><div class='del'>-      DEFAULT_LATIN_FONT_NAME = 'TkDefaultFont'.freeze</div><div class='del'>-      DEFAULT_KANJI_FONT_NAME = 'TkDefaultFont'.freeze</div><div class='del'>-    else</div><div class='del'>-      DEFAULT_LATIN_FONT_NAME = 'Helvetica'.freeze</div><div class='del'>-      DEFAULT_KANJI_FONT_NAME = 'mincho'.freeze</div><div class='del'>-    end</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'>-</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'>-    alias font_id font</div><div class='del'>-    alias name font</div><div class='del'>-    alias to_s font</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.is_system_font?(fnt)</div><div class='del'>-    # true  --&gt; system font which is available on the current system</div><div class='del'>-    # false --&gt; not system font (or unknown system font)</div><div class='del'>-    # nil   --&gt; system font name, but not available on the current system</div><div class='del'>-    fnt = fnt.to_s</div><div class='del'>-    SYSTEM_FONT_NAMES.include?(fnt) &amp;&amp; self.names.index(fnt) &amp;&amp; true</div><div class='del'>-  end</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'>-  def TkFont.actual_hash(fnt, option=nil)</div><div class='del'>-    Hash[TkFont.actual_hash(fnt, option)]</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'>-  def TkFont.actual_hash_displayof(fnt, option=nil)</div><div class='del'>-    Hash[TkFont.actual_hash_displayof(fnt, option)]</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'>-  def TkFont.metrics_hash(fnt, option=nil)</div><div class='del'>-    if option</div><div class='del'>-      val = TkFont.metrics(fnt, option)</div><div class='del'>-      case TkFont::MetricsType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        val = TkComm::num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        val = TkComm::bool(val)</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-      return val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    h = Hash[TkFont.metrics(fnt)]</div><div class='del'>-    h.keys.each{|k| </div><div class='del'>-      case TkFont::MetricsType[k.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        h[k] = TkComm::num_or_str(h[k])</div><div class='del'>-      when ?b</div><div class='del'>-        h[k] = TkComm::bool(h[k])</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    h</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'>-  def TkFont.metrics_hash_displayof(fnt, win, option=nil)</div><div class='del'>-    if option</div><div class='del'>-      val = TkFont.metrics_displayof(fnt, win, option)</div><div class='del'>-      case TkFont::MetricsType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        val = TkComm::num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        val = TkComm::bool(val)</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-      return val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    h = Hash[TkFont.metrics_displayof(fnt, win, option)]</div><div class='del'>-    h.keys.each{|k| </div><div class='del'>-      case TkFont::MetricsType[k.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        h[k] = TkComm::num_or_str(h[k])</div><div class='del'>-      when ?b</div><div class='del'>-        h[k] = TkComm::bool(h[k])</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    h</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.mutex.synchronize{</div><div class='del'>-        Tk_FontNameTBL.each_value{|obj| r.push(obj)}</div><div class='del'>-      }</div><div class='del'>-      #r | []</div><div class='del'>-      r.uniq</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'>-    name = name.to_s</div><div class='del'>-    if name =~ /^(@font[0-9]+)(|c|l|k)$/</div><div class='del'>-      Tk_FontNameTBL.mutex.synchronize{</div><div class='del'>-        Tk_FontNameTBL[$1]</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      Tk_FontNameTBL.mutex.synchronize{</div><div class='del'>-        Tk_FontNameTBL[name]</div><div class='del'>-      }</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\.[0-4]/</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'>-          if TkFont.is_system_font?(fnt)</div><div class='del'>-            TkNamedFont.new(fnt).call_font_configure([path, key], *args)</div><div class='del'>-          else</div><div class='del'>-            TkFont.new(fnt).call_font_configure([path, key], *args)</div><div class='del'>-          end</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'>-</div><div class='del'>-    when /^8\.[5-9]/, /^9\..*/</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'>-        if TkFont.is_system_font?(fnt)</div><div class='del'>-          TkNamedFont.new(fnt).call_font_configure([path, key], *args)</div><div class='del'>-        else</div><div class='del'>-          TkFont.new(fnt).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'>-    Tk_FontUseTBL.mutex.synchronize{</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'>-        Tk_FontUseTBL.values.uniq</div><div class='del'>-      end</div><div class='del'>-    }</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'>-    Tk_FontID.mutex.synchronize{</div><div class='del'>-      @id = Tk_FontID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Tk_FontID[1].succ!</div><div class='del'>-    }</div><div class='del'>-    Tk_FontNameTBL.mutex.synchronize{</div><div class='del'>-      Tk_FontNameTBL[@id] = self</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # @latin_desscendant = nil</div><div class='del'>-    # @kanji_desscendant = nil</div><div class='del'>-    @descendant = [nil, nil] # [latin, kanji]</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'>-    Tk_FontID.mutex.synchronize{</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'>-    }</div><div class='del'>-    Tk_FontNameTBL.mutex.synchronize{</div><div class='del'>-      Tk_FontNameTBL[@id] = self</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # @latin_desscendant = nil</div><div class='del'>-    # @kanji_desscendant = nil</div><div class='del'>-    @descendant = [nil, nil] # [latin, kanji]</div><div class='del'>-</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'>-    # @fontslot = {}</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'>-      # @fontslot.clear</div><div class='del'>-      # @fontslot['font'] = @latinfont</div><div class='del'>-      # @fontslot['kanjifont'] = @kanjifont</div><div class='del'>-    else</div><div class='del'>-      @compoundfont = @latinfont</div><div class='del'>-      @fontslot = {'font'=&gt;@latinfont}</div><div class='del'>-      # @fontslot.clear</div><div class='del'>-      # @fontslot['font'] = @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'>-      # @fontslot['font'] = @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'>-      # @fontslot['font'] = @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'>-    begin</div><div class='del'>-      tk_call(*args)</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-        fail e</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Tk_FontUseTBL.mutex.synchronize{</div><div class='del'>-      Tk_FontUseTBL[[win, tag, optkey].join(';')] = self</div><div class='del'>-    }</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'>-    table = nil</div><div class='del'>-    Tk_FontUseTBL.mutex.synchronize{</div><div class='del'>-      table = Tk_FontUseTBL.clone # to avoid deadlock</div><div class='del'>-    }</div><div class='del'>-    table.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 winobj.kind_of?(TkText) || winobj.kind_of?(Tk::Text)</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'>-        elsif winobj.kind_of?(TkCanvas) || winobj.kind_of?(Tk::Canvas)</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'>-        elsif winobj.kind_of?(TkMenu) || winobj.kind_of?(Tk::Menu)</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'>-  alias name font</div><div class='del'>-  alias to_s 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 @descendant[0] # [0] -&gt; latin</div><div class='del'>-      @descendant[0]</div><div class='del'>-    else</div><div class='del'>-      @descendant[0] = DescendantFont.new(self, 'latin')</div><div class='del'>-    end</div><div class='del'>-=begin</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'>-  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 @descendant[1] # [1] -&gt; kanji</div><div class='del'>-      @descendant[1]</div><div class='del'>-    else</div><div class='del'>-      @descendant[1] = DescendantFont.new(self, 'kanji')</div><div class='del'>-    end</div><div class='del'>-=begin</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'>-  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'>-  def actual_hash(option=nil)</div><div class='del'>-    Hash[actual(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'>-  def actual_hash_displayof(win, option=nil)</div><div class='del'>-    Hash[actual_displayof(win, option)]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_actual(option=nil)</div><div class='del'>-    if @latinfont == nil</div><div class='del'>-      actual_core(@compoundfont, nil, option) # use @compoundfont</div><div class='del'>-    else</div><div class='del'>-      actual_core(@latinfont, nil, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def latin_actual_hash(option=nil)</div><div class='del'>-    Hash[latin_actual(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'>-    if @latinfont == nil</div><div class='del'>-      actual_core(@compoundfont, win, option) # use @compoundfont</div><div class='del'>-    else</div><div class='del'>-      actual_core(@latinfont, win, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def latin_actual_hash_displayof(win, option=nil)</div><div class='del'>-    Hash[latin_actual_displayof(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 == nil</div><div class='del'>-      actual_core(@compoundfont, nil, option) # use @compoundfont</div><div class='del'>-    elsif @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'>-  def kanji_actual_hash(option=nil)</div><div class='del'>-    Hash[kanji_actual(option)]</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 == nil</div><div class='del'>-      actual_core(@compoundfont, nil, option) # use @compoundfont</div><div class='del'>-    elsif @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'>-  def kanji_actual_hash_displayof(win, option=nil)</div><div class='del'>-    Hash[kanji_actual_displayof(win, option)]</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'>-  def latin_current_configinfo(slot=nil)</div><div class='del'>-    Hash[latin_configinfo(slot)]</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 == nil</div><div class='del'>-      configure_core(@compoundfont, slot, value) # use @compoundfont</div><div class='del'>-    elsif @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 == nil</div><div class='del'>-      configure_core(@compoundfont, slot) # use @compoundfont</div><div class='del'>-    elsif @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'>-  def kanji_current_configinfo(slot=nil)</div><div class='del'>-    Hash[kanji_configinfo(slot)]</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'>-    if @latinfont</div><div class='del'>-      latin_replace_core(ltn)</div><div class='del'>-      reset_pointadjust</div><div class='del'>-    else</div><div class='del'>-      # not compound font -&gt; copy properties of ltn</div><div class='del'>-      latinkeys = {}</div><div class='del'>-      begin</div><div class='del'>-        actual_core(ltn).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'>-      begin</div><div class='del'>-        tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys))</div><div class='del'>-      rescue</div><div class='del'>-        # not exist? (deleted?) -&gt; create font</div><div class='del'>-        tk_call('font', 'create', @compoundfont, *hash_kv(latinkeys))</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(knj)</div><div class='del'>-    return self unless @kanjifont  # ignore</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'>-  def metrics_hash(option=nil)</div><div class='del'>-    if option</div><div class='del'>-      val = metrics(option)</div><div class='del'>-      case TkFont::MetricsType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        val = TkComm::num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        val = TkComm::bool(val)</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-      return val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    h = Hash[metrics(option)]</div><div class='del'>-    h.keys.each{|k| </div><div class='del'>-      case TkFont::MetricsType[k.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        h[k] = TkComm::num_or_str(h[k])</div><div class='del'>-      when ?b</div><div class='del'>-        h[k] = TkComm::bool(h[k])</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    h</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'>-  def metrics_hash_displayof(win, option=nil)</div><div class='del'>-    if option</div><div class='del'>-      val = metrics_displayof(win, option)</div><div class='del'>-      case TkFont::MetricsType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        val = TkComm::num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        val = TkComm::bool(val)</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-      return val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    h = Hash[metrics_displayof(win, option)]</div><div class='del'>-    h.keys.each{|k| </div><div class='del'>-      case TkFont::MetricsType[k.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        h[k] = TkComm::num_or_str(h[k])</div><div class='del'>-      when ?b</div><div class='del'>-        h[k] = TkComm::bool(h[k])</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    h</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def latin_metrics(option=nil)</div><div class='del'>-    if @latinfont == nil</div><div class='del'>-      metrics_core(@compoundfont, nil, option) # use @compoundfont</div><div class='del'>-    else</div><div class='del'>-      metrics_core(@latinfont, nil, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def latin_metrics_hash(option=nil)</div><div class='del'>-    if option</div><div class='del'>-      val = latin_metrics(option)</div><div class='del'>-      case TkFont::MetricsType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        val = TkComm::num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        val = TkComm::bool(val)</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-      return val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    h = Hash[latin_metrics(option)]</div><div class='del'>-    h.keys.each{|k| </div><div class='del'>-      case TkFont::MetricsType[k.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        h[k] = TkComm::num_or_str(h[k])</div><div class='del'>-      when ?b</div><div class='del'>-        h[k] = TkComm::bool(h[k])</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    h</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'>-    if @latinfont == nil</div><div class='del'>-      metrics_core(@compoundfont, win, option) # use @compoundfont</div><div class='del'>-    else</div><div class='del'>-      metrics_core(@latinfont, win, option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def latin_metrics_hash_displayof(win, option=nil)</div><div class='del'>-    if option</div><div class='del'>-      val = latin_metrics_displayof(win, option)</div><div class='del'>-      case TkFont::MetricsType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        val = TkComm::num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        val = TkComm::bool(val)</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-      return val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    h = Hash[latin_metrics_displayof(win, option)]</div><div class='del'>-    h.keys.each{|k| </div><div class='del'>-      case TkFont::MetricsType[k.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        h[k] = TkComm::num_or_str(h[k])</div><div class='del'>-      when ?b</div><div class='del'>-        h[k] = TkComm::bool(h[k])</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    h</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_metrics(option=nil)</div><div class='del'>-    if @latinfont == nil</div><div class='del'>-      metrics_core(@compoundfont, nil, option) # use @compoundfont</div><div class='del'>-    elsif 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'>-  def kanji_metrics_hash(option=nil)</div><div class='del'>-    if option</div><div class='del'>-      val = kanji_metrics(option)</div><div class='del'>-      case TkFont::MetricsType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        val = TkComm::num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        val = TkComm::bool(val)</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-      return val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    h = Hash[kanji_metrics(option)]</div><div class='del'>-    h.keys.each{|k| </div><div class='del'>-      case TkFont::MetricsType[k.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        h[k] = TkComm::num_or_str(h[k])</div><div class='del'>-      when ?b</div><div class='del'>-        h[k] = TkComm::bool(h[k])</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    h</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def kanji_metrics_displayof(win, option=nil)</div><div class='del'>-    win = '.' unless win</div><div class='del'>-    if @latinfont == nil</div><div class='del'>-      metrics_core(@compoundfont, win, option) # use @compoundfont</div><div class='del'>-    elsif JAPANIZED_TK</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'>-  def kanji_metrics_hash_displayof(win, option=nil)</div><div class='del'>-    if option</div><div class='del'>-      val = kanji_metrics_displayof(win, option)</div><div class='del'>-      case TkFont::MetricsType[option.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        val = TkComm::num_or_str(val)</div><div class='del'>-      when ?b</div><div class='del'>-        val = TkComm::bool(val)</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-      return val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    h = Hash[kanji_metrics_displayof(win, option)]</div><div class='del'>-    h.keys.each{|k| </div><div class='del'>-      case TkFont::MetricsType[k.to_s]</div><div class='del'>-      when ?n</div><div class='del'>-        h[k] = TkComm::num_or_str(h[k])</div><div class='del'>-      when ?b</div><div class='del'>-        h[k] = TkComm::bool(h[k])</div><div class='del'>-      else</div><div class='del'>-        # do nothing</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    h</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'>-      h = {}</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'>-            h[key] = num_or_str(val)</div><div class='del'>-          when ?b</div><div class='del'>-            h[key] = bool(val)</div><div class='del'>-          else</div><div class='del'>-            h[key] = val</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      h</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.mutex.synchronize{</div><div class='del'>-      TkFont::Tk_FontNameTBL.delete(@id)</div><div class='del'>-    }</div><div class='del'>-    TkFont::Tk_FontUseTBL.mutex.synchronize{</div><div class='del'>-      TkFont::Tk_FontUseTBL.delete_if{|key,value| value == self}</div><div class='del'>-    }</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) if @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) if @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) if @compoundfont</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    TkFont::Tk_FontNameTBL.mutex.synchronize{</div><div class='del'>-      TkFont::Tk_FontNameTBL.delete(@id)</div><div class='del'>-    }</div><div class='del'>-    TkFont::Tk_FontUseTBL.mutex.synchronize{</div><div class='del'>-      TkFont::Tk_FontUseTBL.delete_if{|key,value| value == self}</div><div class='del'>-    }</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'>-    table = nil</div><div class='del'>-    TkFont::Tk_FontUseTBL.mutex.synchronize{</div><div class='del'>-      table = TkFont::Tk_FontUseTBL.clone</div><div class='del'>-    }</div><div class='del'>-    table.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'>-            if winobj.kind_of?(TkText) || winobj.kind_of?(Tk::Text)</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'>-            elsif winobj.kind_of?(TkCanvas) || winobj.kind_of?(Tk::Canvas)</div><div class='del'>-              tk_call(win, 'itemconfigure', tag, "-#{optkey}", @latinfont)</div><div class='del'>-            #elsif winobj.kind_of? TkMenu</div><div class='del'>-            elsif winobj.kind_of?(TkMenu) || winobj.kind_of?(Tk::Menu)</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.mutex.synchronize{</div><div class='del'>-            TkFont::Tk_FontUseTBL.delete(w)</div><div class='del'>-          }</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'>-    table = nil</div><div class='del'>-    TkFont::Tk_FontUseTBL.mutex.synchronize{</div><div class='del'>-      table = TkFont::Tk_FontUseTBL.clone</div><div class='del'>-    }</div><div class='del'>-    table.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'>-            if winobj.kind_of?(TkText) || winobj.kind_of?(Tk::Text)</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'>-            elsif winobj.kind_of?(TkCanvas) || winobj.kind_of?(Tk::Canvas)</div><div class='del'>-              tk_call(win, 'itemconfigure', tag, "-#{optkey}", @kanjifont)</div><div class='del'>-            #elsif winobj.kind_of? TkMenu</div><div class='del'>-            elsif winobj.kind_of?(TkMenu) || winobj.kind_of?(Tk::Menu)</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'>-          Tk_FontUseTBL.mutex.synchronize{</div><div class='del'>-            TkFont::Tk_FontUseTBL.delete(w)</div><div class='del'>-          }</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'>-      begin</div><div class='del'>-        tk_call('font', 'configure', @compoundfont, *hash_kv(latinkeys))</div><div class='del'>-      rescue</div><div class='del'>-        # not exist? (deleted?) -&gt; create font</div><div class='del'>-        tk_call('font', 'create', @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'>-=begin</div><div class='del'>-        if key == '-fixed'  # boolean value</div><div class='del'>-          r.push [key[1..-1], bool(l.shift)]</div><div class='del'>-        else</div><div class='del'>-          r.push [key[1..-1], l.shift.to_i]</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'>-  ###################################</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='del'>-</div><div class='del'>-class TkNamedFont &lt; TkFont</div><div class='del'>-  # for built-in named fonts</div><div class='del'>-  def TkNamedFont.find(name)</div><div class='del'>-    name = name.to_s</div><div class='del'>-    unless (obj = Tk_FontNameTBL[name])</div><div class='del'>-      obj = self.new(name) if TkFont.is_system_font?(name)</div><div class='del'>-    end</div><div class='del'>-    obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def TkNamedFont.new(name, keys=nil)</div><div class='del'>-    name = name.to_s</div><div class='del'>-    obj = nil</div><div class='del'>-    Tk_FontNameTBL.mutex.synchronize{</div><div class='del'>-      unless (obj = Tk_FontNameTBL[name])</div><div class='del'>-        (obj = self.allocate).instance_eval{</div><div class='del'>-          @id = @compoundfont = name.to_s</div><div class='del'>-          @latinfont = nil</div><div class='del'>-          @kanjifont = nil</div><div class='del'>-          @descendant = [self, self] # [latin, kanji] : dummy</div><div class='del'>-          Tk_FontNameTBL[@id] = self</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    obj.instance_eval{ initialize(name, keys) }</div><div class='del'>-    obj</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 initialize(name, keys=nil)</div><div class='del'>-    @id = @compoundfont = name.to_s</div><div class='del'>-</div><div class='del'>-    # if not exist named font, create it.</div><div class='del'>-    begin</div><div class='del'>-      if keys</div><div class='del'>-        tk_call('font', 'configure', @compoundfont, keys)</div><div class='del'>-      else</div><div class='del'>-        tk_call('font', 'configure', @compoundfont)</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-      # the named font doesn't exist -&gt; create</div><div class='del'>-      if keys</div><div class='del'>-        tk_call('font', 'create', @compoundfont, keys)</div><div class='del'>-      else</div><div class='del'>-        tk_call('font', 'create', @compoundfont)</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_latinfont(fnt)</div><div class='del'>-    # ignore</div><div class='del'>-  end</div><div class='del'>-  def create_kanjifont(fnt)</div><div class='del'>-    # ignore</div><div class='del'>-  end</div><div class='del'>-  def create_compoundfont(ltn, knj, keys)</div><div class='del'>-    # ignore</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 latin_font_id</div><div class='del'>-    @compoundfont</div><div class='del'>-  end</div><div class='del'>-  def kanji_font_id</div><div class='del'>-    @compoundfont</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-# define system font names</div><div class='del'>-#######################################</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'>-  # add standard fonts of Tcl/Tk 8.5+</div><div class='del'>-  TkFont::SYSTEM_FONT_NAMES.add [</div><div class='del'>-    'TkDefaultFont', 'TkTextFont', 'TkFixedFont', 'TkMenuFont', </div><div class='del'>-    'TkHeadingFont', 'TkCaptionFont', 'TkSmallCaptionFont', </div><div class='del'>-    'TkIconFont', 'TkTooltipFont'</div><div class='del'>-  ]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# platform-specific fonts</div><div class='del'>-#  -- windows</div><div class='del'>-TkFont::SYSTEM_FONT_NAMES.add [</div><div class='del'>-  'ansifixed', 'ansi', 'device', 'oemfixed', 'systemfixed', 'system'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-#  --  macintosh, macosx</div><div class='del'>-TkFont::SYSTEM_FONT_NAMES.add ['system', 'application']</div><div class='del'>-</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'>-  TkFont::SYSTEM_FONT_NAMES.add ['menu']</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#  --  macosx (Aqua theme)</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'>-  TkFont::SYSTEM_FONT_NAMES.add [</div><div class='del'>-    'systemSystemFont', 'systemEmphasizedSystemFont', </div><div class='del'>-    'systemSmallSystemFont', 'systemSmallEmphasizedSystemFont', </div><div class='del'>-    'systemApplicationFont', 'systemLabelFont', 'systemViewsFont', </div><div class='del'>-    'systemMenuTitleFont', 'systemMenuItemFont', 'systemMenuItemMarkFont', </div><div class='del'>-    'systemMenuItemCmdKeyFont', 'systemWindowTitleFont', </div><div class='del'>-    'systemPushButtonFont', 'systemUtilityWindowTitleFont', </div><div class='del'>-    'systemAlertHeaderFont', 'systemToolbarFont', 'systemMiniSystemFont', </div><div class='del'>-    'systemDetailSystemFont', 'systemDetailEmphasizedSystemFont'</div><div class='del'>-  ]</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 263b160f29..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/frame.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/frame.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,131 +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 Tk::Frame&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='del'>-</div><div class='del'>-#TkFrame = Tk::Frame unless Object.const_defined? :TkFrame</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Frame, :TkFrame)</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 0dfd7263a7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/grid.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/grid.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,265 +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'>-=begin</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'>-=end</div><div class='del'>-  def configure(*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'>-    fail ArgumentError, 'no widget is given' if args.empty?</div><div class='del'>-    params = []</div><div class='del'>-    args.flatten(1).each{|win|</div><div class='del'>-      case win</div><div class='del'>-      when '-', ?-              # RELATIVE PLACEMENT (increase columnspan)</div><div class='del'>-        params.push('-')</div><div class='del'>-      when /^-+$/             # RELATIVE PLACEMENT (increase columnspan)</div><div class='del'>-        params.concat(win.to_s.split(//))</div><div class='del'>-      when '^', ?^              # RELATIVE PLACEMENT (increase rowspan)</div><div class='del'>-        params.push('^')</div><div class='del'>-      when /^\^+$/             # RELATIVE PLACEMENT (increase rowspan)</div><div class='del'>-        params.concat(win.to_s.split(//))</div><div class='del'>-      when 'x', :x, ?x, nil, '' # RELATIVE PLACEMENT (empty column)</div><div class='del'>-        params.push('x')</div><div class='del'>-      when /^x+$/             # RELATIVE PLACEMENT (empty column)</div><div class='del'>-        params.concat(win.to_s.split(//))</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(_epath(v))  # have to use 'epath' (hash_kv() is unavailable)</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'>-  alias column columnconfigure</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'>-  alias row rowconfigure</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 :anchor, :bbox, :add, :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 :column, :row, :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 dffdc19644..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/image.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/image.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,275 +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'>-</div><div class='del'>-  (Tk_Image_ID = ['i'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    Tk_IMGTBL.mutex.synchronize{ Tk_IMGTBL.clear }</div><div class='del'>-  }</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 = nil</div><div class='del'>-          Tk_IMGTBL.mutex.synchronize{</div><div class='del'>-            obj = Tk_IMGTBL[name]</div><div class='del'>-          }</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'>-    (obj = self.allocate).instance_eval{</div><div class='del'>-      Tk_IMGTBL.mutex.synchronize{</div><div class='del'>-        initialize(keys)</div><div class='del'>-        Tk_IMGTBL[@path] = self</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    obj</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'>-      Tk_Image_ID.mutex.synchronize{</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'>-      }</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'>-  end</div><div class='del'>-</div><div class='del'>-  def delete</div><div class='del'>-    Tk_IMGTBL.mutex.synchronize{</div><div class='del'>-      Tk_IMGTBL.delete(@id) if @id</div><div class='del'>-    }</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_IMGTBL.mutex.synchronize{</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'>-    }</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_strict(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'>-  def cget(option)</div><div class='del'>-    unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      cget_strict(option)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        cget_strict(option)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        if current_configinfo.has_key?(option.to_s)</div><div class='del'>-          # error on known option</div><div class='del'>-          fail e</div><div class='del'>-        else</div><div class='del'>-          # unknown option</div><div class='del'>-          nil</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 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 9c6a98d0f8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/itemconfig.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/itemconfig.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1215 +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_optkey_aliases(id)</div><div class='del'>-    {}</div><div class='del'>-  end</div><div class='del'>-  private :__item_optkey_aliases</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 TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-    @mode || false</div><div class='del'>-  end</div><div class='del'>-  def TkItemConfigMethod.__set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode)</div><div class='del'>-    fail SecurityError, "can't change the mode" if $SAFE&gt;=4</div><div class='del'>-    @mode = (mode)? true: false</div><div class='del'>-  end</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_core(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'>-    alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == option}</div><div class='del'>-    if real_name</div><div class='del'>-      option = real_name.to_s</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'>-  private :__itemcget_core</div><div class='del'>-</div><div class='del'>-  def itemcget(tagOrId, option)</div><div class='del'>-    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      __itemcget_core(tagOrId, option)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        __itemcget_core(tagOrId, option)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          if __current_itemconfiginfo(tagOrId).has_key?(option.to_s)</div><div class='del'>-            # not tag error &amp; option is known -&gt; error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # not tag error &amp; option is unknown</div><div class='del'>-            nil</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          fail e  # tag 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'>-  def itemcget_strict(tagOrId, option)</div><div class='del'>-    # never use TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-    __itemcget_core(tagOrId, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __itemconfigure_core(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_optkey_aliases(tagid(tagOrId)).each{|alias_name, real_name|</div><div class='del'>-        alias_name = alias_name.to_s</div><div class='del'>-        if slot.has_key?(alias_name)</div><div class='del'>-          slot[real_name.to_s] = slot.delete(alias_name)</div><div class='del'>-        end</div><div class='del'>-      }</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'>-      alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}</div><div class='del'>-      if real_name</div><div class='del'>-        slot = real_name.to_s</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'>-  private :__itemconfigure_core</div><div class='del'>-</div><div class='del'>-  def __check_available_itemconfigure_options(tagOrId, keys)</div><div class='del'>-    id = tagid(tagOrId)</div><div class='del'>-</div><div class='del'>-    availables = self.__current_itemconfiginfo(id).keys</div><div class='del'>-</div><div class='del'>-    # add non-standard keys</div><div class='del'>-    availables |= __font_optkeys.map{|k|</div><div class='del'>-      [k.to_s, "latin#{k}", "ascii#{k}", "kanji#{k}"]</div><div class='del'>-    }.flatten</div><div class='del'>-    availables |= __item_methodcall_optkeys(id).keys.map{|k| k.to_s}</div><div class='del'>-    availables |= __item_keyonly_optkeys(id).keys.map{|k| k.to_s}</div><div class='del'>-</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    keys.delete_if{|k, v| !(availables.include?(k))}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def itemconfigure(tagOrId, slot, value=None)</div><div class='del'>-    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      __itemconfigure_core(tagOrId, slot, value)</div><div class='del'>-    else</div><div class='del'>-      if slot.kind_of?(Hash)</div><div class='del'>-        begin</div><div class='del'>-          __itemconfigure_core(tagOrId, slot)</div><div class='del'>-        rescue</div><div class='del'>-          slot = __check_available_itemconfigure_options(tagOrId, slot)</div><div class='del'>-          __itemconfigure_core(tagOrId, slot) unless slot.empty?</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          __itemconfigure_core(tagOrId, slot, value)</div><div class='del'>-        rescue =&gt; e</div><div class='del'>-          begin</div><div class='del'>-            if __current_itemconfiginfo(tagOrId).has_key?(slot.to_s)</div><div class='del'>-              # not tag error &amp; option is known -&gt; error on known option</div><div class='del'>-              fail e</div><div class='del'>-            else</div><div class='del'>-              # not tag error &amp; option is unknown</div><div class='del'>-              nil</div><div class='del'>-            end</div><div class='del'>-          rescue</div><div class='del'>-            fail e  # tag 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'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __itemconfiginfo_core(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'>-          fnt = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-          if TkFont.is_system_font?(fnt)</div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)</div><div class='del'>-          end</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'>-</div><div class='del'>-          alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}</div><div class='del'>-          if real_name</div><div class='del'>-            slot = real_name.to_s</div><div class='del'>-          end</div><div class='del'>-</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(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'>-                &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'>-              fnt = fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-              if TkFont.is_system_font?(fnt)</div><div class='del'>-                fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)</div><div class='del'>-              end</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'>-          fnt = conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-          if TkFont.is_system_font?(fnt)</div><div class='del'>-            conf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)</div><div class='del'>-          end</div><div class='del'>-          conf[__item_configinfo_struct(tagid(tagOrId))[:current_value]] = tagfontobj(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'>-</div><div class='del'>-          alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}</div><div class='del'>-          if real_name</div><div class='del'>-            slot = real_name.to_s</div><div class='del'>-          end</div><div class='del'>-</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'>-              fnt = fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]]</div><div class='del'>-              if TkFont.is_system_font?(fnt)</div><div class='del'>-                fontconf[__item_configinfo_struct(tagid(tagOrId))[:default_value]] = TkNamedFont.new(fnt)</div><div class='del'>-              end</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'>-  private :__itemconfiginfo_core</div><div class='del'>-</div><div class='del'>-  def itemconfiginfo(tagOrId, slot = nil)</div><div class='del'>-    if slot &amp;&amp; TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      begin</div><div class='del'>-        __itemconfiginfo_core(tagOrId, slot)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          __itemconfiginfo_core(tagOrId)</div><div class='del'>-          # not tag error -&gt; option is unknown</div><div class='del'>-          Array.new(__item_configinfo_struct.values.max).unshift(slot.to_s)</div><div class='del'>-        rescue</div><div class='del'>-          fail e  # tag error</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      __itemconfiginfo_core(tagOrId, slot)</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_core(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_core(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'>-</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_core(tagOrId, 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'>-</div><div class='del'>-  def current_itemconfiginfo(tagOrId, slot = nil)</div><div class='del'>-    __current_itemconfiginfo(tagOrId, slot)</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 4c5c917c57..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/itemfont.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/itemfont.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,327 +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'>-              fnt = hash_kv(fnt) if fnt.kind_of?(Hash)</div><div class='del'>-              unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-                tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; fnt))</div><div class='del'>-              else</div><div class='del'>-                begin</div><div class='del'>-                  tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; fnt))</div><div class='del'>-                rescue =&gt; e</div><div class='del'>-                  # ignore</div><div class='del'>-                end</div><div class='del'>-              end</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'>-        ltn = hash_kv(ltn) if ltn.kind_of?(Hash)</div><div class='del'>-        unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-          tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; ltn))</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; ltn))</div><div class='del'>-          rescue =&gt; e</div><div class='del'>-            # ignore</div><div class='del'>-          end</div><div class='del'>-        end</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'>-        knj = hash_kv(knj) if knj.kind_of?(Hash)</div><div class='del'>-        unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-          tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; knj))</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            tk_call(*(__item_config_cmd(tagid(tagOrId)) &lt;&lt; "-#{optkey}" &lt;&lt; knj))</div><div class='del'>-          rescue =&gt; e</div><div class='del'>-            # ignore</div><div class='del'>-          end</div><div class='del'>-        end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 80b3d778f1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/label.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/label.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,21 +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 Tk::Label&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='del'>-</div><div class='del'>-#TkLabel = Tk::Label unless Object.const_defined? :TkLabel</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Label, :TkLabel)</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 995b5b7e72..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/labelframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/labelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +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 Tk::LabelFrame&lt;Tk::Frame</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'>-</div><div class='del'>-Tk::Labelframe = Tk::LabelFrame</div><div class='del'>-#TkLabelFrame = Tk::LabelFrame unless Object.const_defined? :TkLabelFrame</div><div class='del'>-#TkLabelframe = Tk::Labelframe unless Object.const_defined? :TkLabelframe</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::LabelFrame, :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 bb039ffb0e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/listbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/listbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,282 +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 Tk::Listbox&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='del'>-</div><div class='del'>-#TkListbox = Tk::Listbox unless Object.const_defined? :TkListbox</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Listbox, :TkListbox)</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 67b0a4bb60..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/macpkg.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/macpkg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,78 +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 Tk::MacResource</div><div class='del'>-end</div><div class='del'>-#TkMacResource = Tk::MacResource</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::MacResource, :TkMacResource)</div><div class='del'>-</div><div class='del'>-module Tk::MacResource</div><div class='del'>-  extend Tk</div><div class='del'>-  extend Tk::MacResource</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 3ae0548dd1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/menu.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/menu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,681 +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 entrycget_strict itemcget_strict</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, :itemcget_strict</div><div class='del'>-  private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Menu&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'>-      Tk::MenuClone.new(self, parent, type)</div><div class='del'>-    else</div><div class='del'>-      Tk::MenuClone.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 xposition(index)</div><div class='del'>-    number(tk_send_without_enc('xposition', _get_eval_enc_str(index)))</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'>-#TkMenu = Tk::Menu unless Object.const_defined? :TkMenu</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Menu, :TkMenu)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::MenuClone&lt;Tk::Menu</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'>-Tk::CloneMenu = Tk::MenuClone</div><div class='del'>-#TkMenuClone = Tk::MenuClone unless Object.const_defined? :TkMenuClone</div><div class='del'>-#TkCloneMenu = Tk::CloneMenu unless Object.const_defined? :TkCloneMenu</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::MenuClone, :TkMenuClone, :TkCloneMenu)</div><div class='del'>-</div><div class='del'>-module Tk::SystemMenu</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'>-TkSystemMenu = Tk::SystemMenu</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::SysMenu_Help&lt;Tk::Menu</div><div class='del'>-  # for all platform</div><div class='del'>-  include Tk::SystemMenu</div><div class='del'>-  SYSMENU_NAME = 'help'</div><div class='del'>-end</div><div class='del'>-#TkSysMenu_Help = Tk::SysMenu_Help unless Object.const_defined? :TkSysMenu_Help</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::SysMenu_Help, :TkSysMenu_Help)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::SysMenu_System&lt;Tk::Menu</div><div class='del'>-  # for Windows</div><div class='del'>-  include Tk::SystemMenu</div><div class='del'>-  SYSMENU_NAME = 'system'</div><div class='del'>-end</div><div class='del'>-#TkSysMenu_System = Tk::SysMenu_System unless Object.const_defined? :TkSysMenu_System</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::SysMenu_System, :TkSysMenu_System)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::SysMenu_Apple&lt;Tk::Menu</div><div class='del'>-  # for Machintosh</div><div class='del'>-  include Tk::SystemMenu</div><div class='del'>-  SYSMENU_NAME = 'apple'</div><div class='del'>-end</div><div class='del'>-#TkSysMenu_Apple = Tk::SysMenu_Apple unless Object.const_defined? :TkSysMenu_Apple</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::SysMenu_Apple, :TkSysMenu_Apple)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Menubutton&lt;Tk::Label</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'>-      unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</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'>-        begin</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'>-        rescue</div><div class='del'>-          tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-          keys = __check_available_configure_options(keys)</div><div class='del'>-          unless keys.empty?</div><div class='del'>-            tk_call_without_enc('destroy', @path) rescue nil</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'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</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'>-Tk::MenuButton = Tk::Menubutton</div><div class='del'>-#TkMenubutton = Tk::Menubutton unless Object.const_defined? :TkMenubutton</div><div class='del'>-#TkMenuButton = Tk::MenuButton unless Object.const_defined? :TkMenuButton</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Menubutton, :TkMenubutton, :TkMenuButton)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::OptionMenubutton&lt;Tk::Menubutton</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 xposition(index)</div><div class='del'>-    @menu.xposition(index)</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 menucget_strict(key)</div><div class='del'>-    @menu.cget_strict(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 entrycget_strict(index, key)</div><div class='del'>-    @menu.entrycget_strict(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'>-</div><div class='del'>-Tk::OptionMenuButton = Tk::OptionMenubutton</div><div class='del'>-#TkOptionMenubutton = Tk::OptionMenubutton unless Object.const_defined? :TkOptionMenubutton</div><div class='del'>-#TkOptionMenuButton = Tk::OptionMenuButton unless Object.const_defined? :TkOptionMenuButton</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::OptionMenubutton, </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 ef9da809b9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/menubar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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;Tk::Frame</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 2a2eb9ba3c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/menuspec.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/menuspec.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,275 +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 = Tk::Menu.new(parent, :widgetname=&gt;menu_name, :tearoff=&gt;tearoff)</div><div class='del'>-      # --&gt; use current TkMenu class</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 = Tk::Menu.new(parent, :tearoff=&gt;tearoff)</div><div class='del'>-      # --&gt; use current TkMenu class</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?(Tk::Root) || parent.kind_of?(Tk::Toplevel)</div><div class='del'>-      true </div><div class='del'>-    elsif parent.current_configinfo.has_key?('menu')</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'>-  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'>-    # --&gt; use current TkMenu class</div><div class='del'>-    mbar = parent.menu</div><div class='del'>-    unless mbar.kind_of?(Tk::Menu) || mbar.kind_of?(TkMenu)</div><div class='del'>-      #mbar = Tk::Menu.new(parent, :tearoff=&gt;false)</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'>-      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 = Tk::Menubutton.new(parent)</div><div class='del'>-      # --&gt; use current TkMenubutton class</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 946b68c704..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/message.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/message.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +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 Tk::Message&lt;Tk::Label</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='del'>-</div><div class='del'>-#TkMessage = Tk::Message unless Object.const_defined? :TkMessage</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Message, :TkMessage)</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 162953f425..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/msgcat.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/msgcat.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,296 +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'>-        if TkCore::WITH_ENCODING</div><div class='del'>-          msg.force_encoding('utf-8')</div><div class='del'>-        else</div><div class='del'>-          msg.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-        end</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 20a8d65215..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/namespace.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/namespace.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,551 +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'>-</div><div class='del'>-  (Tk_Namespace_ID = ["ns".freeze, "00000".taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</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.mutex.synchronize{ Tk_Namespace_ID_TBL.clear }</div><div class='del'>-    Tk_NsCode_RetObjID_TBL.mutex.synchronize{ 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.mutex.synchronize{</div><div class='del'>-      Tk_Namespace_ID_TBL[id]? Tk_Namespace_ID_TBL[id]: id</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'>-  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'>-        Tk_Namespace_ID_TBL.mutex.synchronize{</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'>-        }</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'>-    def cget_strict(slot)</div><div class='del'>-      if slot == :namespace || slot == 'namespace'</div><div class='del'>-        ns = super(slot)</div><div class='del'>-        Tk_Namespace_ID_TBL.mutex.synchronize{</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'>-        }</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'>-          Tk_Namespace_ID_TBL.mutex.synchronize{</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'>-          }</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'>-          Tk_Namespace_ID_TBL.mutex.synchronize{</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'>-          }</div><div class='del'>-        else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-          val = info['namespace']</div><div class='del'>-          Tk_Namespace_ID_TBL.mutex.synchronize{</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'>-          }</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'>-      Tk_Namespace_ID.mutex.synchronize{</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'>-      }</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.mutex.synchronize{</div><div class='del'>-      Tk_Namespace_ID_TBL[@fullname] = self</div><div class='del'>-    }</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'>-      Tk_Namespace_ID_TBL.mutex.synchronize{</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'>-    }</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'>-        if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-          obj = ScopeArgs.new(@fullname,*args)</div><div class='del'>-          ret = obj.instance_exec(obj, script)</div><div class='del'>-        else</div><div class='del'>-          ret = ScopeArgs.new(@fullname,*args).instance_eval(script)</div><div class='del'>-        end</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'>-        if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-          obj = ScopeArgs.new(@fullname,*args)</div><div class='del'>-          ret = obj.instance_exec(obj, &amp;script)</div><div class='del'>-        else</div><div class='del'>-          ret = ScopeArgs.new(@fullname,*args).instance_eval(&amp;script)</div><div class='del'>-        end</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'>-    Tk_Namespace_ID_TBL.mutex.synchronize{</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 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'>-      Tk_Namespace_ID_TBL.mutex.synchronize{</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'>-    }</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(namespace).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'>-    Tk_Namespace_ID_TBL.mutex.synchronize{</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 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 186811d37d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/optiondb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/optiondb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,377 +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]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</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'>-      CmdClassID.mutex.synchronize{</div><div class='del'>-        klass = CmdClassID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-        CmdClassID[1].succ!</div><div class='del'>-      }</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_exec, :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'>-      TkOptionDB.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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 220a38e524..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/pack.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/pack.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,107 +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'>-=begin</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'>-=end</div><div class='del'>-  def configure(*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'>-    fail ArgumentError, 'no widget is given' if args.empty?</div><div class='del'>-    params = []</div><div class='del'>-    args.flatten(1).each{|win| params.push(_epath(win))}</div><div class='del'>-    opts.each{|k, v|</div><div class='del'>-      params.push("-#{k}")</div><div class='del'>-      params.push(_epath(v))  # have to use 'epath' (hash_kv() is unavailable)</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 0c329732f5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/package.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/package.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,143 +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'>-</div><div class='del'>-  def prefer(setting = None)</div><div class='del'>-    tk_call('package', 'prefer', setting)</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 2d08d50f6a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/palette.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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[0].to_a.flatten if args[0].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 030144e677..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/panedwindow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/panedwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,258 +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 Tk::PanedWindow&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_strict(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'>-  def panecget(win, key)</div><div class='del'>-    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      panecget_strict(win, key)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        panecget_strict(win, key)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          if current_paneconfiginfo(win).has_key?(option.to_s)</div><div class='del'>-            # not tag error &amp; option is known -&gt; error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # not tag error &amp; option is unknown</div><div class='del'>-            nil</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          fail e  # tag 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'>-</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'>-</div><div class='del'>-Tk::Panedwindow = Tk::PanedWindow</div><div class='del'>-#TkPanedWindow = Tk::PanedWindow unless Object.const_defined? :TkPanedWindow</div><div class='del'>-#TkPanedwindow = Tk::Panedwindow unless Object.const_defined? :TkPanedwindow</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::PanedWindow, </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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 1f864ec06b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/radiobutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/radiobutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,71 +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 Tk::RadioButton&lt;Tk::Button</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'>-</div><div class='del'>-Tk::Radiobutton = Tk::RadioButton</div><div class='del'>-#TkRadioButton = Tk::RadioButton unless Object.const_defined? :TkRadioButton</div><div class='del'>-#TkRadiobutton = Tk::Radiobutton unless Object.const_defined? :TkRadiobutton</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::RadioButton, </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 7237b4c614..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/root.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/root.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,95 +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 Tk::Root&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'>-  def Root.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'>-    if block_given?</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        root.instance_exec(root, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        root.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 Root.destroy</div><div class='del'>-    TkCore::INTERP._invoke('destroy', '.')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkRoot = Tk::Root unless Object.const_defined? :TkRoot</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 7e758d92f4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/scale.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/scale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,111 +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 Tk::Scale&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'>-      unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</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'>-        begin</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'>-        rescue</div><div class='del'>-          tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-          keys = __check_available_configure_options(keys)</div><div class='del'>-          unless keys.empty?</div><div class='del'>-            begin</div><div class='del'>-              tk_call_without_enc('destroy', @path)</div><div class='del'>-            rescue</div><div class='del'>-              # cannot destroy</div><div class='del'>-              configure(keys)</div><div class='del'>-            else</div><div class='del'>-              # re-create widget</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'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</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='del'>-</div><div class='del'>-#TkScale = Tk::Scale unless Object.const_defined? :TkScale</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Scale, :TkScale)</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 96959b7a4b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/scrollable.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/scrollable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,82 +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 XScrollable</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 YScrollable</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'>-  X_Scrollable = XScrollable</div><div class='del'>-  Y_Scrollable = YScrollable</div><div class='del'>-</div><div class='del'>-  module Scrollable</div><div class='del'>-    include XScrollable</div><div class='del'>-    include YScrollable</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 87db46a9f9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/scrollbar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/scrollbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,177 +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 Tk::Scrollbar&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'>-      unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</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'>-        begin</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'>-        rescue</div><div class='del'>-          tk_call_without_enc(self.class::TkCommandNames[0], @path)</div><div class='del'>-          keys = __check_available_configure_options(keys)</div><div class='del'>-          unless keys.empty?</div><div class='del'>-            begin</div><div class='del'>-              tk_call_without_enc('destroy', @path)</div><div class='del'>-            rescue</div><div class='del'>-              # cannot destroy</div><div class='del'>-              configure(keys)</div><div class='del'>-            else</div><div class='del'>-              # re-create widget</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'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</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'>-</div><div class='del'>-  def moveto(fraction)</div><div class='del'>-    tk_send_without_enc('moveto', fraction)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scroll(*args)</div><div class='del'>-    tk_send_without_enc('scroll', *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scroll_units(num)</div><div class='del'>-    scroll(num, 'units')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def scroll_pages(num)</div><div class='del'>-    scroll(num, 'pages')</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#TkScrollbar = Tk::Scrollbar unless Object.const_defined? :TkScrollbar</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Scrollbar, :TkScrollbar)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::XScrollbar&lt;Tk::Scrollbar</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'>-#TkXScrollbar = Tk::XScrollbar unless Object.const_defined? :TkXScrollbar</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::XScrollbar, :TkXScrollbar)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::YScrollbar&lt;Tk::Scrollbar</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='del'>-</div><div class='del'>-#TkYScrollbar = Tk::YScrollbar unless Object.const_defined? :TkYScrollbar</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::YScrollbar, :TkYScrollbar)</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 d20742a666..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/scrollbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/scrollbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +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'>-#                       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;Tk::Listbox</div><div class='del'>-  include TkComposite</div><div class='del'>-  def initialize_composite(keys=nil)</div><div class='del'>-    #list = Tk::Listbox.new(@frame)</div><div class='del'>-    # -&gt; use current TkListbox class</div><div class='del'>-    list = TkListbox.new(@frame)</div><div class='del'>-    #scroll = Tk::Scrollbar.new(@frame)</div><div class='del'>-    # -&gt; use current TkScrollbar class</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 34dc1904f7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/spinbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/spinbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,119 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/spinbox.rb - Tk spinbox classes</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 Tk::Spinbox&lt;Tk::Entry</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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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='del'>-</div><div class='del'>-#TkSpinbox = Tk::Spinbox unless Object.const_defined? :TkSpinbox</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Spinbox, :TkSpinbox)</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 4ec82bed1d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/text.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/text.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1596 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               tk/text.rb - Tk text classes</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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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'>-    itemconfiginfo(['tag', 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', 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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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'>-    itemconfiginfo(['window', 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', tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :itemcget, :itemcget_strict</div><div class='del'>-  private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Tk::Text&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'>-        Tk::Text::IndexString.new(String.new(id) &lt;&lt; ' + ' &lt;&lt; mod)</div><div class='del'>-      else</div><div class='del'>-        Tk::Text::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'>-        Tk::Text::IndexString.new(String.new(id) &lt;&lt; ' - ' &lt;&lt; mod)</div><div class='del'>-      elsif mod =~ /^\s*[-]\s+(\d.*)$/</div><div class='del'>-        Tk::Text::IndexString.new(String.new(id) &lt;&lt; ' - -' &lt;&lt; $1)</div><div class='del'>-      else</div><div class='del'>-        Tk::Text::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'>-        Tk::Text::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' chars')</div><div class='del'>-      else</div><div class='del'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' indices')</div><div class='del'>-      else</div><div class='del'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::IndexString.new(String.new(id) &lt;&lt; ' ' &lt;&lt; mod.to_s &lt;&lt; ' lines')</div><div class='del'>-      else</div><div class='del'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-        Tk::Text::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'>-      Tk::Text::IndexString.new(String.new(id) &lt;&lt; ' linestart')</div><div class='del'>-    end</div><div class='del'>-    def lineend</div><div class='del'>-      Tk::Text::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'>-      Tk::Text::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'>-      Tk::Text::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'>-      Tk::Text::IndexString.new(String.new(id) &lt;&lt; ' wordstart')</div><div class='del'>-    end</div><div class='del'>-    def wordend</div><div class='del'>-      Tk::Text::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'>-      Tk::Text::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'>-      Tk::Text::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'>-    if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-      obj.instance_exec(obj, &amp;block) if defined? yield</div><div class='del'>-    else</div><div class='del'>-      obj.instance_eval(&amp;block) if defined? yield</div><div class='del'>-    end</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.mutex.synchronize{</div><div class='del'>-      TkTextTag::TTagID_TBL.delete(@path)</div><div class='del'>-    }</div><div class='del'>-    TkTextTag::TMarkID_TBL.mutex.synchronize{</div><div class='del'>-      TkTextMark::TMarkID_TBL.delete(@path)</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('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'>-    Tk::Text::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'>-    Tk::Text::IndexString.at(x, y)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index(idx)</div><div class='del'>-    Tk::Text::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_strict(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_cget(index, slot)</div><div class='del'>-    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      image_cget_strict(index, slot)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        image_cget_strict(index, slot)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          if current_image_configinfo(index).has_key?(slot.to_s)</div><div class='del'>-            # not tag error &amp; option is known -&gt; error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # not tag error &amp; option is unknown</div><div class='del'>-            nil</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          fail e  # tag 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'>-</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'>-    TkTextTag::TTagID_TBL.mutex.synchronize{</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'>-    }</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 [Tk::Text::IndexString.new(key), Tk::Text::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'>-      Tk::Text::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'>-      Tk::Text::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 TkCore::WITH_ENCODING ### Ruby 1.9 !!!!!!!!!!!!!</div><div class='del'>-      return txt.length</div><div class='del'>-    end</div><div class='del'>-    ###########################</div><div class='del'>-</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'>-      Tk::Text::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'>-      Tk::Text::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(Tk::Text::IndexString.new(str[i..(idx-1)]))</div><div class='del'>-        i = idx + 1</div><div class='del'>-      else</div><div class='del'>-        result.push(Tk::Text::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'>-#TkText = Tk::Text unless Object.const_defined? :TkText</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Text, :TkText)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-class Tk::Text::Peer &lt; Tk::Text</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?(Tk::Text)</div><div class='del'>-      fail ArgumentError, "Tk::Text 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 fb306a9c17..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/textimage.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/textimage.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,88 +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 Tk::Text::IndexModMethods</div><div class='del'>-</div><div class='del'>-  def initialize(parent, index, keys)</div><div class='del'>-    #unless parent.kind_of?(Tk::Text)</div><div class='del'>-    #  fail ArgumentError, "expect Tk::Text 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'>-    Tk::Text::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 cget_strict(slot)</div><div class='del'>-    @t.image_cget_strict(@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='del'>-</div><div class='del'>-TktImage = TkTextImage</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 72c1ce1ab4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/textmark.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/textmark.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,204 +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 Tk::Text::IndexModMethods</div><div class='del'>-</div><div class='del'>-  TMarkID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  (Tk_TextMark_ID = ['mark'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    TMarkID_TBL.mutex.synchronize{ TMarkID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def TkTextMark.id2obj(text, id)</div><div class='del'>-    tpath = text.path</div><div class='del'>-    TMarkID_TBL.mutex.synchronize{</div><div class='del'>-      if TMarkID_TBL[tpath]</div><div class='del'>-        TMarkID_TBL[tpath][id]? TMarkID_TBL[tpath][id]: id</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'>-</div><div class='del'>-  def initialize(parent, index)</div><div class='del'>-    #unless parent.kind_of?(Tk::Text)</div><div class='del'>-    #  fail ArgumentError, "expect Tk::Text 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'>-    Tk_TextMark_ID.mutex.synchronize{</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'>-      Tk_TextMark_ID[1].succ!</div><div class='del'>-    }</div><div class='del'>-    TMarkID_TBL.mutex.synchronize{</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'>-    }</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'>-    Tk::Text::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 Tk::Text::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'>-      Tk::Text::IndexString.new(@id + ' + ' + mod)</div><div class='del'>-    else</div><div class='del'>-      Tk::Text::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'>-      Tk::Text::IndexString.new(@id + ' - ' + mod)</div><div class='del'>-    elsif mod =~ /^\s*[-]\s+(\d.*)$/</div><div class='del'>-      Tk::Text::IndexString.new(@id + ' - -' + $1)</div><div class='del'>-    else</div><div class='del'>-      Tk::Text::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'>-TktMark = TkTextMark</div><div class='del'>-</div><div class='del'>-class TkTextNamedMark&lt;TkTextMark</div><div class='del'>-  def self.new(parent, name, index=nil)</div><div class='del'>-    TMarkID_TBL.mutex.synchronize{</div><div class='del'>-      if TMarkID_TBL[parent.path] &amp;&amp; TMarkID_TBL[parent.path][name]</div><div class='del'>-        obj = TMarkID_TBL[parent.path][name]</div><div class='del'>-      else</div><div class='del'>-        # super(parent, name, *args)</div><div class='del'>-        (obj = self.allocate).instance_eval{</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'>-          @t._addtag @id, self</div><div class='del'>-        }</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if obj &amp;&amp; index</div><div class='del'>-        tk_call_without_enc(parent.path, 'mark', 'set', name, </div><div class='del'>-                            _get_eval_enc_str(index))</div><div class='del'>-      end</div><div class='del'>-      obj</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, index=nil)</div><div class='del'>-    # dummy:: not called by 'new' method</div><div class='del'>-</div><div class='del'>-    #unless parent.kind_of?(Tk::Text)</div><div class='del'>-    #  fail ArgumentError, "expect Tk::Text 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'>-    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'>-TktNamedMark = TkTextNamedMark</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'>-TktMarkInsert = TkTextMarkInsert</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'>-TktMarkCurrent = TkTextMarkCurrent</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='del'>-TktMarkAnchor = TkTextMarkAnchor</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 b08d923ea1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/texttag.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/texttag.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,318 +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 Tk::Text::IndexModMethods</div><div class='del'>-</div><div class='del'>-  TTagID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  (Tk_TextTag_ID = ['tag'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    TTagID_TBL.mutex.synchronize{ TTagID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def TkTextTag.id2obj(text, id)</div><div class='del'>-    tpath = text.path</div><div class='del'>-    TTagID_TBL.mutex.synchronize{</div><div class='del'>-      if TTagID_TBL[tpath]</div><div class='del'>-        TTagID_TBL[tpath][id]? TTagID_TBL[tpath][id]: id</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'>-</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'>-    Tk_TextTag_ID.mutex.synchronize{</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'>-      Tk_TextTag_ID[1].succ!</div><div class='del'>-    }</div><div class='del'>-    TTagID_TBL.mutex.synchronize{</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'>-    }</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'>-    Tk::Text::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'>-    Tk::Text::IndexString.new(@id + '.first')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def last</div><div class='del'>-    Tk::Text::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 [Tk::Text::IndexString.new(key), Tk::Text::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'>-      Tk::Text::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'>-      Tk::Text::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'>-  def cget_strict(key)</div><div class='del'>-    @t.tag_cget_strict @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.mutex.synchronize{</div><div class='del'>-      TTagID_TBL[@tpath].delete(@id) if TTagID_TBL[@tpath]</div><div class='del'>-    }</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-TktTag = TkTextTag</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'>-    tagobj = nil</div><div class='del'>-    TTagID_TBL.mutex.synchronize{</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'>-      else</div><div class='del'>-        # super(parent, name, *args)</div><div class='del'>-        (tagobj = self.allocate).instance_eval{</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[@id] = self</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'>-          @t._addtag @id, self</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</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'>-</div><div class='del'>-    tagobj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, *args)</div><div class='del'>-    # dummy:: not called by 'new' method</div><div class='del'>-</div><div class='del'>-    #unless parent.kind_of?(Tk::Text)</div><div class='del'>-    #  fail ArgumentError, "expect Tk::Text 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'>-</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'>-TktNamedTag = TkTextNamedTag</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='del'>-TktTagSel = TkTextTagSel</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 004422e4f3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/textwindow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/textwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,154 +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 Tk::Text::IndexModMethods</div><div class='del'>-</div><div class='del'>-  def initialize(parent, index, keys = {})</div><div class='del'>-    #unless parent.kind_of?(Tk::Text)</div><div class='del'>-    #  fail ArgumentError, "expect Tk::Text 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'>-    Tk::Text::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'>-  def cget_strict(slot)</div><div class='del'>-    @t.window_cget_strict(@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='del'>-</div><div class='del'>-TktWindow = TkTextWindow</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 91840d0575..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/timer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/timer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,669 +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$</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]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</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'>-    @current_args = args</div><div class='del'>-    @current_script = [sleep, @after_script]</div><div class='del'>-    @after_id = tk_call_without_enc('after', 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'>-      __at_end__</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'>-        __at_end__</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'>-    Tk_CBID.mutex.synchronize{</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'>-</div><div class='del'>-    @wait_var = TkVariable.new(0)</div><div class='del'>-</div><div class='del'>-    @at_end_proc = nil</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 __at_end__</div><div class='del'>-    @at_end_proc.call(self) if @at_end_proc</div><div class='del'>-    @wait_var.value = 0  # for wait</div><div class='del'>-  end</div><div class='del'>-  private :__at_end__</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'>-    __at_end__</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 at_end(*arg, &amp;b)</div><div class='del'>-    if arg.empty?</div><div class='del'>-      if b </div><div class='del'>-        @at_end_proc = b</div><div class='del'>-      else </div><div class='del'>-        # no proc</div><div class='del'>-        return @at_end_proc </div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, "wrong number of arguments" if arg.length != 1 || b</div><div class='del'>-      @at_end_proc = arg[0]</div><div class='del'>-    end</div><div class='del'>-    self</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'>-      __at_end__</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'>-        __at_end__</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 bd6e8307f5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/toplevel.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/toplevel.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,262 +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 Tk::Toplevel&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| # k is a String</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'>-        keys['class'] = @classname = @classname.id</div><div class='del'>-      elsif @classname</div><div class='del'>-        @db_class = TkDatabaseClass.new(@classname)</div><div class='del'>-        keys['class'] = @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'>-      keys['class'] = @classname = @classname.id</div><div class='del'>-    elsif @classname</div><div class='del'>-      @db_class = TkDatabaseClass.new(@classname)</div><div class='del'>-      keys['class'] = @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='del'>-</div><div class='del'>-#TkToplevel = Tk::Toplevel unless Object.const_defined? :TkToplevel</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::Toplevel, :TkToplevel)</div><div class='head'>diff --git a/ext/tk/lib/tk/ttk_selector.rb b/ext/tk/lib/tk/ttk_selector.rb<br/>deleted file mode 100644<br/>index 72ed637a38..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/ttk_selector.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/ttk_selector.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,76 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  ttk_selector</div><div class='del'>-#</div><div class='del'>-######################################</div><div class='del'>-#  toplevel classes/modules</div><div class='del'>-module Tk</div><div class='del'>-  @TOPLEVEL_ALIAS_TABLE[:Ttk] = {</div><div class='del'>-    :TkButton       =&gt; 'tkextlib/tile/tbutton', </div><div class='del'>-</div><div class='del'>-    :TkCheckbutton  =&gt; 'tkextlib/tile/tcheckbutton', </div><div class='del'>-    :TkCheckButton  =&gt; 'tkextlib/tile/tcheckbutton', </div><div class='del'>-</div><div class='del'>-    # :TkDialog       =&gt; 'tkextlib/tile/dialog', </div><div class='del'>-</div><div class='del'>-    :TkEntry        =&gt; 'tkextlib/tile/tentry', </div><div class='del'>-</div><div class='del'>-    :TkCombobox     =&gt; 'tkextlib/tile/tcombobox', </div><div class='del'>-</div><div class='del'>-    :TkFrame        =&gt; 'tkextlib/tile/tframe', </div><div class='del'>-</div><div class='del'>-    :TkLabel        =&gt; 'tkextlib/tile/tlabel', </div><div class='del'>-</div><div class='del'>-    :TkLabelframe   =&gt; 'tkextlib/tile/tlabelframe', </div><div class='del'>-    :TkLabelFrame   =&gt; 'tkextlib/tile/tlabelframe', </div><div class='del'>-</div><div class='del'>-    :TkMenubutton   =&gt; 'tkextlib/tile/tmenubutton', </div><div class='del'>-    :TkMenuButton   =&gt; 'tkextlib/tile/tmenubutton', </div><div class='del'>-</div><div class='del'>-    :TkNotebook     =&gt; 'tkextlib/tile/tnotebook', </div><div class='del'>-</div><div class='del'>-    # :TkPaned        =&gt; 'tkextlib/tile/tpaned', </div><div class='del'>-    :TkPanedwindow  =&gt; 'tkextlib/tile/tpaned', </div><div class='del'>-    :TkPanedWindow  =&gt; 'tkextlib/tile/tpaned', </div><div class='del'>-</div><div class='del'>-    :TkProgressbar  =&gt; 'tkextlib/tile/tprogressbar', </div><div class='del'>-</div><div class='del'>-    :TkRadiobutton  =&gt; 'tkextlib/tile/tradiobutton', </div><div class='del'>-    :TkRadioButton  =&gt; 'tkextlib/tile/tradiobutton', </div><div class='del'>-</div><div class='del'>-    :TkScale        =&gt; 'tkextlib/tile/tscale', </div><div class='del'>-    # :TkProgress     =&gt; 'tkextlib/tile/tscale', </div><div class='del'>-</div><div class='del'>-    :TkScrollbar    =&gt; 'tkextlib/tile/tscrollbar', </div><div class='del'>-    :TkXScrollbar   =&gt; 'tkextlib/tile/tscrollbar', </div><div class='del'>-    :TkYScrollbar   =&gt; 'tkextlib/tile/tscrollbar', </div><div class='del'>-</div><div class='del'>-    :TkSeparator    =&gt; 'tkextlib/tile/tseparator', </div><div class='del'>-</div><div class='del'>-    :TkSizeGrip     =&gt; 'tkextlib/tile/sizegrip', </div><div class='del'>-    :TkSizegrip     =&gt; 'tkextlib/tile/sizegrip', </div><div class='del'>-</div><div class='del'>-    # :TkSquare       =&gt; 'tkextlib/tile/tsquare', </div><div class='del'>-</div><div class='del'>-    :TkTreeview     =&gt; 'tkextlib/tile/treeview', </div><div class='del'>-  }</div><div class='del'>-  @TOPLEVEL_ALIAS_TABLE[:Tile] = @TOPLEVEL_ALIAS_TABLE[:Ttk]</div><div class='del'>-</div><div class='del'>-  ################################################</div><div class='del'>-  # register some Ttk widgets as default</div><div class='del'>-  # (Ttk is a standard library on Tcl/Tk8.5+)</div><div class='del'>-  @TOPLEVEL_ALIAS_TABLE[:Ttk].each{|sym, file|</div><div class='del'>-    unless Object.autoload?(sym) || Object.const_defined?(sym)</div><div class='del'>-      Object.autoload(sym, file)</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'>-  @TOPLEVEL_ALIAS_SETUP_PROC[:Tile] = </div><div class='del'>-    @TOPLEVEL_ALIAS_SETUP_PROC[:Ttk] = proc{|mod|</div><div class='del'>-    unless Tk.autoload?(:Tile) || Tk.const_defined?(:Tile) </div><div class='del'>-      Object.autoload :Ttk, 'tkextlib/tile'</div><div class='del'>-      Tk.autoload :Tile, 'tkextlib/tile'</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/txtwin_abst.rb b/ext/tk/lib/tk/txtwin_abst.rb<br/>deleted file mode 100644<br/>index 540f806d17..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/txtwin_abst.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-  TkCommandNames = [].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 60bd433cdc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/validation.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/validation.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,397 +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'>-          keys[key] = klass.new(cmd, *args)</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'>-          keys[key] = klass.new(cmd, *args)</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'>-=begin</div><div class='del'>-    # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-    KEY_TBL.map!{|inf|</div><div class='del'>-      if inf.kind_of?(Array)</div><div class='del'>-        inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-      end</div><div class='del'>-      inf</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    PROC_TBL.map!{|inf|</div><div class='del'>-      if inf.kind_of?(Array)</div><div class='del'>-        inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-      end</div><div class='del'>-      inf</div><div class='del'>-    }</div><div class='del'>-=end</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.map!{|arg| klass._sym2subst(arg)}</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 f738a96ee7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/variable.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/variable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1765 +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]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    TkVar_CB_TBL.mutex.synchronize{ TkVar_CB_TBL.clear }</div><div class='del'>-    TkVar_ID_TBL.mutex.synchronize{ TkVar_ID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  major, minor, type, type_name, patchlevel = TclTkLib.get_version</div><div class='del'>-  USE_OLD_TRACE_OPTION_STYLE = (major &lt; 8) || (major == 8 &amp;&amp; minor &lt; 4)</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 cb_obj = 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(cb_obj.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'>-          if TkCore::WITH_ENCODING</div><div class='del'>-            msg.force_encoding('utf-8')</div><div class='del'>-          else</div><div class='del'>-            msg.instance_variable_set(:@encoding, 'utf-8')</div><div class='del'>-          end</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'>-      Tk_VARIABLE_ID.mutex.synchronize{</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'>-      }</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.mutex.synchronize{</div><div class='del'>-      TkVar_ID_TBL[@id] = self</div><div class='del'>-    }</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 _check_trace_opt(opts)</div><div class='del'>-    if opts.kind_of?(Array)</div><div class='del'>-      opt_str = opts.map{|s| s.to_s}.join(' ')</div><div class='del'>-    else</div><div class='del'>-      opt_str = opts.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    fail ArgumentError, 'null trace option' if opt_str.empty?</div><div class='del'>-</div><div class='del'>-    if opt_str =~ /[^arwu\s]/</div><div class='del'>-      # new format (Tcl/Tk8.4+?)</div><div class='del'>-      if opts.kind_of?(Array)</div><div class='del'>-        opt_ary = opts.map{|opt| opt.to_s.strip}</div><div class='del'>-      else</div><div class='del'>-        opt_ary = opt_str.split(/\s+|\|/)</div><div class='del'>-        opt_ary.delete('')</div><div class='del'>-      end</div><div class='del'>-      if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-        opt_ary.uniq.map{|opt|</div><div class='del'>-          case opt</div><div class='del'>-          when 'array'</div><div class='del'>-            'a'</div><div class='del'>-          when 'read'</div><div class='del'>-            'r'</div><div class='del'>-          when 'write'</div><div class='del'>-            'w'</div><div class='del'>-          when 'unset'</div><div class='del'>-            'u'</div><div class='del'>-          else</div><div class='del'>-            fail ArgumentError, "unsupported trace option '#{opt}' on Tcl/Tk#{Tk::TCL_PATCHLEVEL}"</div><div class='del'>-          end</div><div class='del'>-        }.join</div><div class='del'>-      else</div><div class='del'>-        opt_ary</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      # old format</div><div class='del'>-      opt_ary = opt_str.delete('^arwu').split(//).uniq</div><div class='del'>-      if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-        opt_ary.join</div><div class='del'>-      else</div><div class='del'>-        opt_ary.map{|c|</div><div class='del'>-          case c</div><div class='del'>-          when 'a'</div><div class='del'>-            'array'</div><div class='del'>-          when 'r'</div><div class='del'>-            'read'</div><div class='del'>-          when 'w'</div><div class='del'>-            'write'</div><div class='del'>-          when 'u'</div><div class='del'>-            'unset'</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='del'>-  private :_check_trace_opt</div><div class='del'>-</div><div class='del'>-  def trace(opts, cmd = Proc.new)</div><div class='del'>-    opts = _check_trace_opt(opts)</div><div class='del'>-    (@trace_var ||= []).unshift([opts,cmd])</div><div class='del'>-</div><div class='del'>-    if @trace_opts == nil</div><div class='del'>-      TkVar_CB_TBL[@id] = self</div><div class='del'>-      @trace_opts = opts</div><div class='del'>-      if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-      else</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      newopts = @trace_opts.dup</div><div class='del'>-      if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-        opts.each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)}</div><div class='del'>-        if newopts != @trace_opts</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'vdelete', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</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 ' &lt;&lt; @id)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        newopts |= opts</div><div class='del'>-        unless (newopts - @trace_opts).empty?</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'remove', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</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 ' &lt;&lt; @id)</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_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'>-</div><div class='del'>-    opts = _check_trace_opt(opts)</div><div class='del'>-</div><div class='del'>-    ((@trace_elem ||= {})[elem] ||= []).unshift([opts,cmd])</div><div class='del'>-</div><div class='del'>-    if @trace_opts == nil</div><div class='del'>-      TkVar_CB_TBL[@id] = self</div><div class='del'>-      @trace_opts = opts</div><div class='del'>-      if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-      else</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      newopts = @trace_opts.dup</div><div class='del'>-      if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-        opts.each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)}</div><div class='del'>-        if newopts != @trace_opts</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'vdelete', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</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 ' &lt;&lt; @id)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        newopts |= opts</div><div class='del'>-        unless (newopts - @trace_opts).empty?</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'remove', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</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 ' &lt;&lt; @id)</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_info</div><div class='del'>-    return [] unless @trace_var</div><div class='del'>-    @trace_var.dup</div><div class='del'>-  end</div><div class='del'>-  alias trace_vinfo trace_info</div><div class='del'>-</div><div class='del'>-  def trace_info_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'>-  alias trace_vinfo_for_element trace_info_for_element</div><div class='del'>-</div><div class='del'>-  def trace_remove(opts,cmd)</div><div class='del'>-    return self unless @trace_var.kind_of? Array</div><div class='del'>-</div><div class='del'>-    opts = _check_trace_opt(opts)</div><div class='del'>-</div><div class='del'>-    idx = -1</div><div class='del'>-    if USE_OLD_TRACE_OPTION_STYLE</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[1] == cmd</div><div class='del'>-          diff = false</div><div class='del'>-          ['a', 'r', 'w', 'u'].each{|c|</div><div class='del'>-            break if (diff = e[0].index(c) ^ opts.index(c))</div><div class='del'>-          }</div><div class='del'>-          unless diff</div><div class='del'>-            #find</div><div class='del'>-            idx = i</div><div class='del'>-            next</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)}</div><div class='del'>-      }</div><div class='del'>-    else</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[1] == cmd &amp;&amp; </div><div class='del'>-            e[0].size == opts.size &amp;&amp; (e[0] - opts).empty?</div><div class='del'>-          # find</div><div class='del'>-          idx = i</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-        newopts |= e[0]</div><div class='del'>-      }</div><div class='del'>-    end</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'>-        if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-          e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)}</div><div class='del'>-        else</div><div class='del'>-          newopts |= e[0]</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-      diff = false</div><div class='del'>-      @trace_opts.each_byte{|c| break if (diff = ! newopts.index(c))}</div><div class='del'>-      if diff</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'vdelete', </div><div class='del'>-                               @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-        @trace_opts.replace(newopts)</div><div class='del'>-        unless @trace_opts.empty?</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      unless (@trace_opts - newopts).empty?</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'remove', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-        @trace_opts.replace(newopts)</div><div class='del'>-        unless @trace_opts.empty?</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</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'>-  alias trace_delete  trace_remove</div><div class='del'>-  alias trace_vdelete trace_remove</div><div class='del'>-</div><div class='del'>-  def trace_remove_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'>-</div><div class='del'>-    opts = _check_trace_opt(opts)</div><div class='del'>-</div><div class='del'>-    idx = -1</div><div class='del'>-    if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-      @trace_elem[elem].each_with_index{|e, i|</div><div class='del'>-        if idx &lt; 0 &amp;&amp; e[1] == cmd</div><div class='del'>-          diff = false</div><div class='del'>-          ['a', 'r', 'w', 'u'].each{|c|</div><div class='del'>-            break if (diff = e[0].index(c) ^ opts.index(c))</div><div class='del'>-          }</div><div class='del'>-          unless diff</div><div class='del'>-            #find</div><div class='del'>-            idx = i</div><div class='del'>-            next</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      @trace_elem[elem].each_with_index{|e, i|</div><div class='del'>-        if idx &lt; 0 &amp;&amp; e[1] == cmd &amp;&amp; </div><div class='del'>-            e[0].size == opts.size &amp;&amp; (e[0] - opts).empty?</div><div class='del'>-          # find</div><div class='del'>-          idx = i</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-      }</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'>-    if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-      newopts = ''</div><div class='del'>-      @trace_var.each{|e| </div><div class='del'>-        e[0].each_byte{|c| newopts.concat(c.chr) unless newopts.index(c.chr)}</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.concat(c.chr) unless newopts.index(c.chr)}</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      newopts = []</div><div class='del'>-      @trace_var.each{|e|</div><div class='del'>-        newopts |= e[0]</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.concat(c.chr) unless newopts.index(c.chr)}</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if USE_OLD_TRACE_OPTION_STYLE</div><div class='del'>-      diff = false</div><div class='del'>-      @trace_opts.each_byte{|c| break if (diff = ! newopts.index(c))}</div><div class='del'>-      if diff</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'vdelete', </div><div class='del'>-                               @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-        @trace_opts.replace(newopts)</div><div class='del'>-        unless @trace_opts.empty?</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      unless (@trace_opts - newopts).empty?</div><div class='del'>-        Tk.tk_call_without_enc('trace', 'remove', 'variable', </div><div class='del'>-                               @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</div><div class='del'>-        @trace_opts.replace(newopts)</div><div class='del'>-        unless @trace_opts.empty?</div><div class='del'>-          Tk.tk_call_without_enc('trace', 'add', 'variable', </div><div class='del'>-                                 @id, @trace_opts, 'rb_var ' &lt;&lt; @id)</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'>-  alias trace_delete_for_element  trace_remove_for_element</div><div class='del'>-  alias trace_vdelete_for_element trace_remove_for_element</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'>-    name = name.to_s</div><div class='del'>-    v = nil</div><div class='del'>-    TkVar_ID_TBL.mutex.synchronize{</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'>-      else</div><div class='del'>-        (v = self.allocate).instance_eval{</div><div class='del'>-          @id = name</div><div class='del'>-          TkVar_ID_TBL[@id] = self</div><div class='del'>-          @var = @id</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    v.instance_eval{ initialize(name, *args) }</div><div class='del'>-    v</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'>-    name = name.to_s</div><div class='del'>-    v = nil</div><div class='del'>-    TkVar_ID_TBL.mutex.synchronize{</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'>-      else</div><div class='del'>-        (v = self.allocate).instance_eval{</div><div class='del'>-          @id = name</div><div class='del'>-          TkVar_ID_TBL[@id] = self</div><div class='del'>-          @var = @id</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    }</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'>-      v.instance_eval{ initialize(name, {}) }  # force creating</div><div class='del'>-    else</div><div class='del'>-      v.instance_eval{ initialize(name, *args) }</div><div class='del'>-    end</div><div class='del'>-    v</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 ae31ac1f8f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/virtevent.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/virtevent.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,139 +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]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkVirtualEventTBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    TkVirtualEventTBL.mutex.synchronize{ TkVirtualEventTBL.clear }</div><div class='del'>-  }</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'>-      TkVirtualEvent::TkVirtualEventTBL.mutex.synchronize{</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'>-          (obj = self.allocate).instance_eval{</div><div class='del'>-            initialize(event, *sequences)</div><div class='del'>-            TkVirtualEvent::TkVirtualEventTBL[@id] = self</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'>-    def initialize(event, *sequences)</div><div class='del'>-      @path = @id = event</div><div class='del'>-      _add_sequences(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 = nil</div><div class='del'>-    TkVirtualEventTBL.mutex.synchronize{</div><div class='del'>-      obj = TkVirtualEventTBL[event]</div><div class='del'>-    }</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'>-    TkVirtualEventID.mutex.synchronize{</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'>-    }</div><div class='del'>-    _add_sequences(sequences)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _add_sequences(seq_ary)</div><div class='del'>-    unless seq_ary.empty?</div><div class='del'>-      tk_call_without_enc('event', 'add', "&lt;#{@id}&gt;", </div><div class='del'>-                          *(seq_ary.collect{|seq| </div><div class='del'>-                              "&lt;#{tk_event_sequence(seq)}&gt;"</div><div class='del'>-                            }) )</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  private :_add_sequences</div><div class='del'>-</div><div class='del'>-  def add(*sequences)</div><div class='del'>-    if sequences != []</div><div class='del'>-      _add_sequences(sequences)</div><div class='del'>-      TkVirtualEventTBL.mutex.synchronize{</div><div class='del'>-        TkVirtualEventTBL[@id] = self</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 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.mutex.synchronize{</div><div class='del'>-        TkVirtualEventTBL.delete(@id)</div><div class='del'>-      }</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'>-      if tk_call_without_enc('event','info',"&lt;#{@id}&gt;").empty?</div><div class='del'>-        TkVirtualEventTBL.mutex.synchronize{</div><div class='del'>-          TkVirtualEventTBL.delete(@id)</div><div class='del'>-        }</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 info</div><div class='del'>-    tk_call_without_enc('event','info',"&lt;#{@id}&gt;").split(/\s+/).collect!{|seq|</div><div class='del'>-      lst = 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'>-      (lst.size == 1) ? lst[0] : lst</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 89fb391c77..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/winpkg.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/winpkg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,153 +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 Tk::WinDDE</div><div class='del'>-end</div><div class='del'>-#TkWinDDE = Tk::WinDDE</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::WinDDE, :TkWinDDE)</div><div class='del'>-</div><div class='del'>-module Tk::WinDDE</div><div class='del'>-  extend Tk</div><div class='del'>-  extend Tk::WinDDE</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 Tk::WinRegistry</div><div class='del'>-end</div><div class='del'>-#TkWinRegistry = Tk::WinRegistry</div><div class='del'>-Tk.__set_toplevel_aliases__(:Tk, Tk::WinRegistry, :TkWinRegistry)</div><div class='del'>-</div><div class='del'>-module Tk::WinRegistry</div><div class='del'>-  extend Tk</div><div class='del'>-  extend Tk::WinRegistry</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 0394296189..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tk/wm.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tk/wm.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,552 +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'>-    extend TkCore</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 Wm.aspect(win, *args)</div><div class='del'>-      if args.length == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'aspect', win.epath))</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', win.epath, *args)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def aspect(*args)</div><div class='del'>-      Wm.aspect(self, *args)</div><div class='del'>-    end</div><div class='del'>-    alias wm_aspect aspect</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['aspect'] = 'aspect'</div><div class='del'>-</div><div class='del'>-    def Wm.attributes(win, slot=nil,value=TkComm::None)</div><div class='del'>-      if slot == nil</div><div class='del'>-        lst = tk_split_list(tk_call('wm', 'attributes', win.epath))</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', win.epath, *hash_kv(slot))</div><div class='del'>-        win</div><div class='del'>-      elsif value == TkComm::None</div><div class='del'>-        tk_call('wm', 'attributes', win.epath, "-#{slot}")</div><div class='del'>-      else</div><div class='del'>-        tk_call('wm', 'attributes', win.epath, "-#{slot}", value)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def attributes(slot=nil,value=TkComm::None)</div><div class='del'>-      Wm.attributes(self, slot, value)</div><div class='del'>-    end</div><div class='del'>-    alias wm_attributes attributes</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['attributes'] = 'attributes'</div><div class='del'>-</div><div class='del'>-    def Wm.client(win, name=TkComm::None)</div><div class='del'>-      if name == TkComm::None</div><div class='del'>-        tk_call('wm', 'client', win.epath)</div><div class='del'>-      else</div><div class='del'>-        name = '' if name == nil</div><div class='del'>-        tk_call('wm', 'client', win.epath, name)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def client(name=TkComm::None)</div><div class='del'>-      Wm.client(self, name)</div><div class='del'>-    end</div><div class='del'>-    alias wm_client client</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['client'] = 'client'</div><div class='del'>-</div><div class='del'>-    def Wm.colormapwindows(win, *args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'colormapwindows', win.epath))</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', win.epath, *args)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def colormapwindows(*args)</div><div class='del'>-      Wm.colormapwindows(self, *args)</div><div class='del'>-    end</div><div class='del'>-    alias wm_colormapwindows colormapwindows</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['colormapwindows'] = 'colormapwindows'</div><div class='del'>-</div><div class='del'>-    def Wm.command(win, value=nil)</div><div class='del'>-      if value</div><div class='del'>-        tk_call('wm', 'command', epath, value)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        #procedure(tk_call('wm', 'command', epath))</div><div class='del'>-        tk_call('wm', 'command', epath)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def wm_command(value=nil)</div><div class='del'>-      Wm.command(self, value)</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 Wm.deiconify(win, ex = true)</div><div class='del'>-      if ex</div><div class='del'>-        tk_call_without_enc('wm', 'deiconify', win.epath)</div><div class='del'>-      else</div><div class='del'>-        Wm.iconify(win)</div><div class='del'>-      end</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-    def deiconify(ex = true)</div><div class='del'>-      Wm.deiconify(self, ex)</div><div class='del'>-    end</div><div class='del'>-    alias wm_deiconify deiconify</div><div class='del'>-</div><div class='del'>-    def Wm.focusmodel(win, mode = nil)</div><div class='del'>-      if mode</div><div class='del'>-        tk_call_without_enc('wm', 'focusmodel', win.epath, mode)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'focusmodel', win.epath)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def focusmodel(mode = nil)</div><div class='del'>-      Wm.focusmodel(self, mode)</div><div class='del'>-    end</div><div class='del'>-    alias wm_focusmodel focusmodel</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['focusmodel'] = 'focusmodel'</div><div class='del'>-</div><div class='del'>-    def Wm.forget(win)</div><div class='del'>-      # Tcl/Tk 8.5+ </div><div class='del'>-      # work with dockable frames</div><div class='del'>-      tk_call_without_enc('wm', 'forget', win.epath)</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-    def wm_forget</div><div class='del'>-      Wm.forget(self)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Wm.frame(win)</div><div class='del'>-      tk_call_without_enc('wm', 'frame', win.epath)</div><div class='del'>-    end</div><div class='del'>-    def frame</div><div class='del'>-      Wm.frame(self)</div><div class='del'>-    end</div><div class='del'>-    alias wm_frame frame</div><div class='del'>-</div><div class='del'>-    def Wm.geometry(win, geom=nil)</div><div class='del'>-      if geom</div><div class='del'>-        tk_call_without_enc('wm', 'geometry', win.epath, geom)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'geometry', win.epath)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def geometry(geom=nil)</div><div class='del'>-      Wm.geometry(self, geom)</div><div class='del'>-    end</div><div class='del'>-    alias wm_geometry geometry</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['geometry'] = 'geometry'</div><div class='del'>-</div><div class='del'>-    def Wm.grid(win, *args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'grid', win.epath))</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', win.epath, *args)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def wm_grid(*args)</div><div class='del'>-      Wm.grid(self, *args)</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 Wm.group(win, leader = nil)</div><div class='del'>-      if leader</div><div class='del'>-        tk_call('wm', 'group', win.epath, leader)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        window(tk_call('wm', 'group', win.epath))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def group(leader = nil)</div><div class='del'>-      Wm.group(self, leader)</div><div class='del'>-    end</div><div class='del'>-    alias wm_group group</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['group'] = 'group'</div><div class='del'>-</div><div class='del'>-    def Wm.iconbitmap(win, bmp=nil)</div><div class='del'>-      if bmp</div><div class='del'>-        tk_call_without_enc('wm', 'iconbitmap', win.epath, bmp)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        image_obj(tk_call_without_enc('wm', 'iconbitmap', win.epath))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def iconbitmap(bmp=nil)</div><div class='del'>-      Wm.iconbitmap(self, bmp)</div><div class='del'>-    end</div><div class='del'>-    alias wm_iconbitmap iconbitmap</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconbitmap'] = 'iconbitmap'</div><div class='del'>-</div><div class='del'>-    def Wm.iconphoto(win, *imgs)</div><div class='del'>-      if imgs.empty?</div><div class='del'>-        win.instance_eval{</div><div class='del'>-          @wm_iconphoto = nil unless defined? @wm_iconphoto</div><div class='del'>-          return @wm_iconphoto </div><div class='del'>-        }</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', win.epath, *imgs)</div><div class='del'>-      win.instance_eval{ @wm_iconphoto = imgs  }</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-    def iconphoto(*imgs)</div><div class='del'>-      Wm.iconphoto(self, *imgs)</div><div class='del'>-    end</div><div class='del'>-    alias wm_iconphoto iconphoto</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconphoto'] = 'iconphoto'</div><div class='del'>-</div><div class='del'>-    def Wm.iconphoto_default(win, *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', win.epath, '-default', *imgs)</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-    def iconphoto_default(*imgs)</div><div class='del'>-      Wm.iconphoto_default(self, *imgs)</div><div class='del'>-    end</div><div class='del'>-    alias wm_iconphoto_default iconphoto_default</div><div class='del'>-</div><div class='del'>-    def Wm.iconify(win, ex = true)</div><div class='del'>-      if ex</div><div class='del'>-        tk_call_without_enc('wm', 'iconify', win.epath)</div><div class='del'>-      else</div><div class='del'>-        Wm.deiconify(win)</div><div class='del'>-      end</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-    def iconify(ex = true)</div><div class='del'>-      Wm.iconify(self, ex)</div><div class='del'>-    end</div><div class='del'>-    alias wm_iconify iconify</div><div class='del'>-</div><div class='del'>-    def Wm.iconmask(win, bmp=nil)</div><div class='del'>-      if bmp</div><div class='del'>-        tk_call_without_enc('wm', 'iconmask', win.epath, bmp)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        image_obj(tk_call_without_enc('wm', 'iconmask', win.epath))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def iconmask(bmp=nil)</div><div class='del'>-      Wm.iconmask(self, bmp)</div><div class='del'>-    end</div><div class='del'>-    alias wm_iconmask iconmask</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconmask'] = 'iconmask'</div><div class='del'>-</div><div class='del'>-    def Wm.iconname(win, name=nil)</div><div class='del'>-      if name</div><div class='del'>-        tk_call('wm', 'iconname', win.epath, name)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        tk_call('wm', 'iconname', win.epath)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def iconname(name=nil)</div><div class='del'>-      Wm.iconname(self, name)</div><div class='del'>-    end</div><div class='del'>-    alias wm_iconname iconname</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconname'] = 'iconname'</div><div class='del'>-</div><div class='del'>-    def Wm.iconposition(win, *args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'iconposition', win.epath))</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', win.epath, *args)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def iconposition(*args)</div><div class='del'>-      Wm.iconposition(self, *args)</div><div class='del'>-    end</div><div class='del'>-    alias wm_iconposition iconposition</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconposition'] = 'iconposition'</div><div class='del'>-</div><div class='del'>-    def Wm.iconwindow(win, iconwin = nil)</div><div class='del'>-      if iconwin</div><div class='del'>-        tk_call_without_enc('wm', 'iconwindow', win.epath, iconwin)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        w = tk_call_without_enc('wm', 'iconwindow', win.epath)</div><div class='del'>-        (w == '')? nil: window(w)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def iconwindow(iconwin = nil)</div><div class='del'>-      Wm.iconwindow(self, iconwin)</div><div class='del'>-    end</div><div class='del'>-    alias wm_iconwindow iconwindow</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['iconwindow'] = 'iconwindow'</div><div class='del'>-</div><div class='del'>-    def Wm.manage(win)</div><div class='del'>-      # Tcl/Tk 8.5+ feature</div><div class='del'>-      tk_call_without_enc('wm', 'manage', win.epath)</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-    def wm_manage</div><div class='del'>-      Wm.manage(self)</div><div class='del'>-    end</div><div class='del'>-=begin</div><div class='del'>-    def Wm.manage(win, use_id = nil)</div><div class='del'>-      # Tcl/Tk 8.5+ feature</div><div class='del'>-      # --------------------------------------------------------------</div><div class='del'>-      # In the future release, I want to support to embed the 'win' </div><div class='del'>-      # into the container which has window-id 'use-id'.</div><div class='del'>-      # It may give users frexibility on controlling their GUI. </div><div class='del'>-      # However, it may be difficult for current Tcl/Tk (Tcl/Tk8.5.1), </div><div class='del'>-      # because it seems to require to modify Tcl/Tk's source code.</div><div class='del'>-      # --------------------------------------------------------------</div><div class='del'>-      if use_id</div><div class='del'>-        tk_call_without_enc('wm', 'manage', win.epath, '-use', use_id)</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'manage', win.epath)</div><div class='del'>-      end</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-    def Wm.maxsize(win, *args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'maxsize', win.epath))</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', win.epath, *args)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def maxsize(*args)</div><div class='del'>-      Wm.maxsize(self, *args)</div><div class='del'>-    end</div><div class='del'>-    alias wm_maxsize maxsize</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['maxsize'] = 'maxsize'</div><div class='del'>-</div><div class='del'>-    def Wm.minsize(win, *args)</div><div class='del'>-      if args.size == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'minsize', win.epath))</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', win.path, *args)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def minsize(*args)</div><div class='del'>-      Wm.minsize(self, *args)</div><div class='del'>-    end</div><div class='del'>-    alias wm_minsize minsize</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['minsize'] = 'minsize'</div><div class='del'>-</div><div class='del'>-    def Wm.overrideredirect(win, mode=TkComm::None)</div><div class='del'>-      if mode == TkComm::None</div><div class='del'>-        bool(tk_call_without_enc('wm', 'overrideredirect', win.epath))</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'overrideredirect', win.epath, mode)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def overrideredirect(mode=TkComm::None)</div><div class='del'>-      Wm.overrideredirect(self, mode)</div><div class='del'>-    end</div><div class='del'>-    alias wm_overrideredirect overrideredirect</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['overrideredirect'] = 'overrideredirect'</div><div class='del'>-</div><div class='del'>-    def Wm.positionfrom(win, who=TkComm::None)</div><div class='del'>-      if who == TkComm::None</div><div class='del'>-        r = tk_call_without_enc('wm', 'positionfrom', win.epath)</div><div class='del'>-        (r == "")? nil: r</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'positionfrom', win.epath, who)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def positionfrom(who=TkComm::None)</div><div class='del'>-      Wm.positionfrom(self, who)</div><div class='del'>-    end</div><div class='del'>-    alias wm_positionfrom positionfrom</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['positionfrom'] = 'positionfrom'</div><div class='del'>-</div><div class='del'>-    def Wm.protocol(win, name=nil, cmd=nil, &amp;b)</div><div class='del'>-      if cmd</div><div class='del'>-        tk_call_without_enc('wm', 'protocol', win.epath, name, cmd)</div><div class='del'>-        win</div><div class='del'>-      elsif b</div><div class='del'>-        tk_call_without_enc('wm', 'protocol', win.epath, name, proc(&amp;b))</div><div class='del'>-        win</div><div class='del'>-      elsif name</div><div class='del'>-        result = tk_call_without_enc('wm', 'protocol', win.epath, 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', win.epath))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def protocol(name=nil, cmd=nil, &amp;b)</div><div class='del'>-      Wm.protocol(self, name, cmd, &amp;b)</div><div class='del'>-    end</div><div class='del'>-    alias wm_protocol protocol</div><div class='del'>-</div><div class='del'>-    def Wm.protocols(win, kv=nil)</div><div class='del'>-      unless kv</div><div class='del'>-        ret = {}</div><div class='del'>-        Wm.protocol(win).each{|name|</div><div class='del'>-          ret[name] = Wm.protocol(win, 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| Wm.protocol(win, k, v)}</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-    def protocols(kv=nil)</div><div class='del'>-      Wm.protocols(self, kv)</div><div class='del'>-    end</div><div class='del'>-    alias wm_protocols protocols</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['protocols'] = 'protocols'</div><div class='del'>-</div><div class='del'>-    def Wm.resizable(win, *args)</div><div class='del'>-      if args.length == 0</div><div class='del'>-        list(tk_call_without_enc('wm', 'resizable', win.epath)).map!{|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', win.epath, *args)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def resizable(*args)</div><div class='del'>-      Wm.resizable(self, *args)</div><div class='del'>-    end</div><div class='del'>-    alias wm_resizable resizable</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['resizable'] = 'resizable'</div><div class='del'>-</div><div class='del'>-    def Wm.sizefrom(win, who=TkComm::None)</div><div class='del'>-      if who == TkComm::None</div><div class='del'>-        r = tk_call_without_enc('wm', 'sizefrom', win.epath)</div><div class='del'>-        (r == "")? nil: r</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'sizefrom', win.epath, who)</div><div class='del'>-        win</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def sizefrom(who=TkComm::None)</div><div class='del'>-      Wm.sizefrom(self, who)</div><div class='del'>-    end</div><div class='del'>-    alias wm_sizefrom sizefrom</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['sizefrom'] = 'sizefrom'</div><div class='del'>-</div><div class='del'>-    def Wm.stackorder(win)</div><div class='del'>-      list(tk_call('wm', 'stackorder', win.epath))</div><div class='del'>-    end</div><div class='del'>-    def stackorder</div><div class='del'>-      Wm.stackorder(self)</div><div class='del'>-    end</div><div class='del'>-    alias wm_stackorder stackorder</div><div class='del'>-</div><div class='del'>-    def Wm.stackorder_isabove(win, target)</div><div class='del'>-      bool(tk_call('wm', 'stackorder', win.epath, 'isabove', target))</div><div class='del'>-    end</div><div class='del'>-    def Wm.stackorder_is_above(win, target)</div><div class='del'>-      Wm.stackorder_isabove(win, target)</div><div class='del'>-    end</div><div class='del'>-    def stackorder_isabove(target)</div><div class='del'>-      Wm.stackorder_isabove(self, target)</div><div class='del'>-    end</div><div class='del'>-    alias stackorder_is_above stackorder_isabove</div><div class='del'>-    alias wm_stackorder_isabove stackorder_isabove</div><div class='del'>-    alias wm_stackorder_is_above stackorder_isabove</div><div class='del'>-</div><div class='del'>-    def Wm.stackorder_isbelow(win, target)</div><div class='del'>-      bool(tk_call('wm', 'stackorder', win.epath, 'isbelow', target))</div><div class='del'>-    end</div><div class='del'>-    def Wm.stackorder_is_below(win, target)</div><div class='del'>-      Wm.stackorder_isbelow(win, target)</div><div class='del'>-    end</div><div class='del'>-    def stackorder_isbelow(target)</div><div class='del'>-      Wm.stackorder_isbelow(self, target)</div><div class='del'>-    end</div><div class='del'>-    alias stackorder_is_below stackorder_isbelow</div><div class='del'>-    alias wm_stackorder_isbelow stackorder_isbelow</div><div class='del'>-    alias wm_stackorder_is_below stackorder_isbelow</div><div class='del'>-</div><div class='del'>-    def Wm.state(win, st=nil)</div><div class='del'>-      if st</div><div class='del'>-        tk_call_without_enc('wm', 'state', win.epath, st)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        tk_call_without_enc('wm', 'state', win.epath)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def state(st=nil)</div><div class='del'>-      Wm.state(self, st)</div><div class='del'>-    end</div><div class='del'>-    alias wm_state state</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['state'] = 'state'</div><div class='del'>-</div><div class='del'>-    def Wm.title(win, str=nil)</div><div class='del'>-      if str</div><div class='del'>-        tk_call('wm', 'title', win.epath, str)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        tk_call('wm', 'title', win.epath)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def title(str=nil)</div><div class='del'>-      Wm.title(self, str)</div><div class='del'>-    end</div><div class='del'>-    alias wm_title title</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['title'] = 'title'</div><div class='del'>-</div><div class='del'>-    def Wm.transient(win, master=nil)</div><div class='del'>-      if master</div><div class='del'>-        tk_call_without_enc('wm', 'transient', win.epath, master)</div><div class='del'>-        win</div><div class='del'>-      else</div><div class='del'>-        window(tk_call_without_enc('wm', 'transient', win.epath))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    def transient(master=nil)</div><div class='del'>-      Wm.transient(self, master)</div><div class='del'>-    end</div><div class='del'>-    alias wm_transient transient</div><div class='del'>-    TOPLEVEL_METHODCALL_OPTKEYS['transient'] = 'transient'</div><div class='del'>-</div><div class='del'>-    def Wm.withdraw(win, ex = true)</div><div class='del'>-      if ex</div><div class='del'>-        tk_call_without_enc('wm', 'withdraw', win.epath)</div><div class='del'>-      else</div><div class='del'>-        Wm.deiconify(win)</div><div class='del'>-      end</div><div class='del'>-      win</div><div class='del'>-    end</div><div class='del'>-    def withdraw(ex = true)</div><div class='del'>-      Wm.withdraw(self, ex)</div><div class='del'>-    end</div><div class='del'>-    alias wm_withdraw withdraw</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module Wm_for_General</div><div class='del'>-    Wm.instance_methods.each{|m|</div><div class='del'>-      if (m = m.to_s) =~ /^wm_(.*)$/</div><div class='del'>-        eval "def #{m}(*args, &amp;b); Tk::Wm.#{$1}(self, *args, &amp;b); 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/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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/>deleted file mode 100644<br/>index f65945884c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkafter.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkafter.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkafter.rb - load tk/after.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/timer'</div><div class='head'>diff --git a/ext/tk/lib/tkbgerror.rb b/ext/tk/lib/tkbgerror.rb<br/>deleted file mode 100644<br/>index deba7a57fa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkbgerror.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkbgerror.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkbgerror.rb - load tk/bgerror.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/bgerror'</div><div class='head'>diff --git a/ext/tk/lib/tkcanvas.rb b/ext/tk/lib/tkcanvas.rb<br/>deleted file mode 100644<br/>index 9524614291..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkcanvas.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkcanvas.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkcanvas.rb - load tk/canvas.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/canvas'</div><div class='head'>diff --git a/ext/tk/lib/tkclass.rb b/ext/tk/lib/tkclass.rb<br/>deleted file mode 100644<br/>index 87f5acc453..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkclass.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkclass.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,47 +0,0 @@</div><div class='del'>-#</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='del'>-#</div><div class='del'>-#                       $Id$</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-TopLevel = TkToplevel</div><div class='del'>-Frame = TkFrame</div><div class='del'>-Label = TkLabel</div><div class='del'>-Button = TkButton</div><div class='del'>-Radiobutton = TkRadioButton</div><div class='del'>-Checkbutton = TkCheckButton</div><div class='del'>-Message = TkMessage</div><div class='del'>-Entry = TkEntry</div><div class='del'>-Spinbox = TkSpinbox</div><div class='del'>-Text = TkText</div><div class='del'>-Scale = TkScale</div><div class='del'>-Scrollbar = TkScrollbar</div><div class='del'>-Listbox = TkListbox</div><div class='del'>-Menu = TkMenu</div><div class='del'>-Menubutton = TkMenubutton</div><div class='del'>-Canvas = TkCanvas</div><div class='del'>-Arc = TkcArc</div><div class='del'>-Bitmap = TkcBitmap</div><div class='del'>-Line = TkcLine</div><div class='del'>-Oval = TkcOval</div><div class='del'>-Polygon = TkcPolygon</div><div class='del'>-Rectangle = TkcRectangle</div><div class='del'>-TextItem = TkcText</div><div class='del'>-WindowItem = TkcWindow</div><div class='del'>-BitmapImage = TkBitmapImage</div><div class='del'>-PhotoImage = TkPhotoImage</div><div class='del'>-Selection = TkSelection</div><div class='del'>-Winfo = TkWinfo</div><div class='del'>-Pack = TkPack</div><div class='del'>-Grid = TkGrid</div><div class='del'>-Place = TkPlace</div><div class='del'>-Variable = TkVariable</div><div class='del'>-Font = TkFont</div><div class='del'>-VirtualEvent = TkVirtualEvent</div><div class='del'>-</div><div class='del'>-def Mainloop</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/>deleted file mode 100644<br/>index bec5e5d29a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkdialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkdialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkdialog.rb - load tk/dialog.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/dialog'</div><div class='head'>diff --git a/ext/tk/lib/tkentry.rb b/ext/tk/lib/tkentry.rb<br/>deleted file mode 100644<br/>index 2dcfcab5da..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkentry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkentry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkentry.rb - load tk/entry.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/entry'</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 cfbe274c86..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/SUPPORT_STATUS?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-  *** RELEASE_DATE of the libraries =&gt; see 'tkextlib/version.rb' ***</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://sourceforge.net/projects/tcllib      ==&gt; tcllib</div><div class='del'>-</div><div class='del'>-IWidgets     4.0.2   http://sourceforge.net/projects/incrtcl     ==&gt; iwidgets</div><div class='del'>-</div><div class='del'>-BWidgets     1.7     http://sourceforge.net/projects/tcllib      ==&gt; bwidget</div><div class='del'>-</div><div class='del'>-TkTable      2.9     http://sourceforge.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://sourceforge.net/projects/tktable     ==&gt; vu</div><div class='del'>-</div><div class='del'>-TkHTML       2.0     http://www.hwaci.com/sw/tkhtml/             ==&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://sourceforge.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://sourceforge.net/projects/tktreectrl  ==&gt; treectrl</div><div class='del'>-</div><div class='del'>-Tile         0.8.0/8.5.1</div><div class='del'>-                     http://sourceforge.net/projects/tktable     ==&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://sourceforge.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://sourceforge.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://sourceforge.net/projects/tktable</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://sourceforge.net/projects/tkcon</div><div class='del'>-</div><div class='del'>-Expect       ***     http://sourceforge.net/projects/expect</div><div class='del'>-</div><div class='del'>-TclXML       ***     http://sourceforge.net/projects/tclxml</div><div class='del'>-</div><div class='del'>-TclXSLT      ***     http://sourceforge.net/projects/tclxml</div><div class='del'>-</div><div class='del'>-TclDOM       ***     http://sourceforge.net/projects/tclxml</div><div class='del'>-</div><div class='del'>-TclSOAP      ***     http://sourceforge.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://sourceforge.net/projects/memchan</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 115eb927ba..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; '--' if args[0] =~ /^\s*-[^-]/</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; '--' if args[0] =~ /^\s*-[^-]/</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 23c6d2d064..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/bitmap.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/bitmap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,112 +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'>-</div><div class='del'>-    (BITMAP_ID = ['blt_bitmap_id'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-      @mutex = Mutex.new</div><div class='del'>-      def mutex; @mutex; end</div><div class='del'>-      freeze</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    TkCore::INTERP.init_ip_env{</div><div class='del'>-      BITMAP_ID_TBL.mutex.synchronize{ BITMAP_ID_TBL.clear }</div><div class='del'>-    }</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'>-        BITMAP_ID.mutex.synchronize{</div><div class='del'>-          @id = BITMAP_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-          BITMAP_ID[1].succ!</div><div class='del'>-        }</div><div class='del'>-        BITMAP_ID_TBL.mutex.synchronize{</div><div class='del'>-          BITMAP_ID_TBL[@id] = self</div><div class='del'>-        }</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 2f807fcd9c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/busy.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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?(Tk::Toplevel)</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 b2005b2f2b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/component.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/component.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2145 +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_cget_strict(id, option)</div><div class='del'>-      ret = itemcget_strict(['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_cget_strict(option)</div><div class='del'>-      itemcget_strict('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_cget_strict(id, option)</div><div class='del'>-      itemcget_strict(['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_cget_strict(id, option)</div><div class='del'>-      itemcget_strict(['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_cget_strict(id, option)</div><div class='del'>-      itemcget_strict(['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_cget_strict(option)</div><div class='del'>-      itemcget_strict('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_cget_strict(option)</div><div class='del'>-      itemcget_strict('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_cget_strict(id, option)</div><div class='del'>-      itemcget_strict(['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_cget_strict(option)</div><div class='del'>-      itemcget_strict('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_cget_strict(id, option)</div><div class='del'>-      itemcget_strict(['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 __itemcget_strict itemcget_strict</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_strict(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 itemcget(tagOrId, option)</div><div class='del'>-      unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-        itemcget_strict(tagOrId, option)</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          itemcget_strict(tagOrId, option)</div><div class='del'>-        rescue =&gt; e</div><div class='del'>-          begin</div><div class='del'>-            if current_itemconfiginfo(tagOrId).has_key?(option.to_s)</div><div class='del'>-              # error on known option</div><div class='del'>-              fail e</div><div class='del'>-            else</div><div class='del'>-              # unknown option</div><div class='del'>-              nil</div><div class='del'>-            end</div><div class='del'>-          rescue</div><div class='del'>-            fail e  # tag 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'>-    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, :itemcget_strict</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'>-    class Axis &lt; TkObject</div><div class='del'>-      (OBJ_ID = ['blt_chart_axis'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-        @mutex = Mutex.new</div><div class='del'>-        def mutex; @mutex; end</div><div class='del'>-        freeze</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      AxisID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        AxisID_TBL.mutex.synchronize{ AxisID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(chart, id)</div><div class='del'>-        cpath = chart.path</div><div class='del'>-        AxisID_TBL.mutex.synchronize{</div><div class='del'>-          return id unless AxisID_TBL[cpath]</div><div class='del'>-          AxisID_TBL[cpath][id]? AxisID_TBL[cpath][id]: id</div><div class='del'>-        }</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'>-        if keys</div><div class='del'>-          keys = _symbolkey2str(keys)</div><div class='del'>-          not_create = keys.delete('without_creating')</div><div class='del'>-        else</div><div class='del'>-          not_create = false</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        obj = nil</div><div class='del'>-        AxisID_TBL.mutex.synchronize{</div><div class='del'>-          chart_path = chart.path</div><div class='del'>-          AxisID_TBL[chart_path] ||= {}</div><div class='del'>-          if axis &amp;&amp; AxisID_TBL[chart_path][axis]</div><div class='del'>-            obj = AxisID_TBL[chart_path][axis]</div><div class='del'>-          else</div><div class='del'>-            (obj = self.allocate).instance_eval{</div><div class='del'>-              if axis</div><div class='del'>-                @axis = @id = axis.to_s</div><div class='del'>-              else</div><div class='del'>-                OBJ_ID.mutex.synchronize{</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'>-                }</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::AxisID_TBL[@cpath][@axis] = self</div><div class='del'>-              unless not_create</div><div class='del'>-                tk_call(@chart, 'axis', 'create', @axis, keys)</div><div class='del'>-                return obj</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'>-        obj.configure(keys) if obj &amp;&amp; ! keys.empty?</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, axis=nil, keys={})</div><div class='del'>-        # dummy:: not called by 'new' method</div><div class='del'>-</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'>-          OBJ_ID.mutex.synchronize{</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'>-          }</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::AxisID_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 cget_strict(option)</div><div class='del'>-        @chart.axis_cget_strict(@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'>-      CrosshairsID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        CrosshairsID_TBL.mutex.synchronize{ CrosshairsID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.new(chart, keys={})</div><div class='del'>-        obj = nil</div><div class='del'>-        CrosshairsID_TBL.mutex.synchronize{</div><div class='del'>-          unless (obj = CrosshairsID_TBL[chart.path])</div><div class='del'>-            (obj = self.allocate).instance_eval{</div><div class='del'>-              @parent = @chart = chart</div><div class='del'>-              @cpath = @chart.path</div><div class='del'>-              @path = @id = 'crosshairs'</div><div class='del'>-              Crosshairs::CrosshairsID_TBL[@cpath] = self</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        chart.crosshair_configure(keys) if obj &amp;&amp; ! keys.empty?</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, keys={})</div><div class='del'>-        # dummy:: not called by 'new' method</div><div class='del'>-</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        # Crosshairs::CrosshairsID_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 cget_strict(option)</div><div class='del'>-        @chart.crosshair_cget_strict(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'>-</div><div class='del'>-      ElementID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        ElementID_TBL.mutex.synchronize{ ElementID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      (OBJ_ID = ['blt_chart_element'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-        @mutex = Mutex.new</div><div class='del'>-        def mutex; @mutex; end</div><div class='del'>-        freeze</div><div class='del'>-      }</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'>-        ElementID_TBL.mutex.synchronize{</div><div class='del'>-          return id unless ElementID_TBL[cpath]</div><div class='del'>-          ElementID_TBL[cpath][id]? ElementID_TBL[cpath][id]: id</div><div class='del'>-        }</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'>-        if keys</div><div class='del'>-          keys = _symbolkey2str(keys)</div><div class='del'>-          not_create = keys.delete('without_creating')</div><div class='del'>-        else</div><div class='del'>-          not_create = false</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        obj = nil</div><div class='del'>-        ElementID_TBL.mutex.synchronize{</div><div class='del'>-          chart_path = chart.path</div><div class='del'>-          ElementID_TBL[chart_path] ||= {}</div><div class='del'>-          if element &amp;&amp; ElementID_TBL[chart_path][element]</div><div class='del'>-            obj = ElementID_TBL[chart_path][element]</div><div class='del'>-          else</div><div class='del'>-            (obj = self.allocate).instance_eval{</div><div class='del'>-              if element</div><div class='del'>-                @element = @id = element.to_s</div><div class='del'>-              else</div><div class='del'>-                OBJ_ID.mutex.synchronize{</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'>-                }</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::ElementID_TBL[@cpath][@element] = self</div><div class='del'>-              unless not_create</div><div class='del'>-                tk_call(@chart, @typename, 'create', @element, keys)</div><div class='del'>-                return obj</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'>-        obj.configure(keys) if obj &amp;&amp; ! keys.empty?</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, element=nil, keys={})</div><div class='del'>-        # dummy:: not called by 'new' method</div><div class='del'>-</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'>-          OBJ_ID.mutex.synchronize{</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'>-          }</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::ElementID_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 cget_strict(option)</div><div class='del'>-        @chart.__send__(@typename + '_cget_strict', @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'>-      GridLineID_TBL = TkCore::INTERP.create_table</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        GridLineID_TBL.mutex.synchronize{ GridLineID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.new(chart, keys={})</div><div class='del'>-        obj = nil</div><div class='del'>-        GridLineID_TBL.mutex.synchronize{</div><div class='del'>-          unless (obj = GridLineID_TBL[chart.path])</div><div class='del'>-            (obj = self.allocate).instance_eval{</div><div class='del'>-              @parent = @chart = chart</div><div class='del'>-              @cpath = @chart.path</div><div class='del'>-              @path = @id = 'grid'</div><div class='del'>-              GridLine::GridLineID_TBL[@cpath] = self</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        chart.gridline_configure(keys) if obj &amp;&amp; ! keys.empty?</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, keys={})</div><div class='del'>-        # dummy:: not called by 'new' method</div><div class='del'>-</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        # GridLine::GridLineID_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 cget_strict(option)</div><div class='del'>-        @chart.gridline_cget_strict(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'>-      LegendID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        LegendID_TBL.mutex.synchronize{ LegendID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.new(chart, keys={})</div><div class='del'>-        obj = nil</div><div class='del'>-        LegenedID_TBL.mutex.synchronize{</div><div class='del'>-          unless (obj = LegenedID_TBL[chart.path])</div><div class='del'>-            (obj = self.allocate).instance_eval{</div><div class='del'>-              @parent = @chart = chart</div><div class='del'>-              @cpath = @chart.path</div><div class='del'>-              @path = @id = 'crosshairs'</div><div class='del'>-              Legend::LegenedID_TBL[@cpath] = self</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        chart.legend_configure(keys) if obj &amp;&amp; ! keys.empty?</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, keys={})</div><div class='del'>-        # dummy:: not called by 'new' method</div><div class='del'>-</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        # Legend::LegendID_TBL[@cpath] = self</div><div class='del'>-        @chart.legend_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 cget_strict(option)</div><div class='del'>-        @chart.legend_cget_strict(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]).instance_eval{</div><div class='del'>-        @mutex = Mutex.new</div><div class='del'>-        def mutex; @mutex; end</div><div class='del'>-        freeze</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PenID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        PenID_TBL.mutex.synchronize{ PenID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(chart, id)</div><div class='del'>-        cpath = chart.path</div><div class='del'>-        PenID_TBL.mutex.synchronize{</div><div class='del'>-          return id unless PenID_TBL[cpath]</div><div class='del'>-          PenID_TBL[cpath][id]? PenID_TBL[cpath][id]: id</div><div class='del'>-        }</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'>-        if keys</div><div class='del'>-          keys = _symbolkey2str(keys)</div><div class='del'>-          not_create = keys.delete('without_creating')</div><div class='del'>-        else</div><div class='del'>-          not_create = false</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        obj = nil</div><div class='del'>-        PenID_TBL.mutex.synchronize{</div><div class='del'>-          chart_path = chart.path</div><div class='del'>-          PenID_TBL[chart_path] ||= {}</div><div class='del'>-          if pen &amp;&amp; PenID_TBL[chart_path][pen]</div><div class='del'>-            obj = PenID_TBL[chart_path][pen]</div><div class='del'>-          else</div><div class='del'>-            (obj = self.allocate).instance_eval{</div><div class='del'>-              if pen</div><div class='del'>-                @pen = @id = pen.to_s</div><div class='del'>-              else</div><div class='del'>-                OBJ_ID.mutex.synchronize{</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'>-                }</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::PenID_TBL[@cpath][@pen] = self</div><div class='del'>-              unless not_create</div><div class='del'>-                tk_call(@chart, 'pen', 'create', @pen, keys)</div><div class='del'>-                return obj</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'>-        obj.configure(keys) if obj &amp;&amp; ! keys.empty?</div><div class='del'>-        obj</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'>-          OBJ_ID.mutex.synchronize{</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'>-          }</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::PenID_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 cget_strict(option)</div><div class='del'>-        @chart.pen_cget_strict(@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'>-      PostscriptID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        PostscriptID_TBL.mutex.synchronize{ PostscriptID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.new(chart, keys={})</div><div class='del'>-        obj = nil</div><div class='del'>-        PostscriptID_TBL.mutex.synchronize{</div><div class='del'>-          unless (obj = PostscriptID_TBL[chart.path])</div><div class='del'>-            (obj = self.allocate).instance_eval{</div><div class='del'>-              @parent = @chart = chart</div><div class='del'>-              @cpath = @chart.path</div><div class='del'>-              @path = @id = 'postscript'</div><div class='del'>-              Postscript::PostscriptID_TBL[@cpath] = self</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        chart.postscript_configure(keys) if obj &amp;&amp; ! keys.empty?</div><div class='del'>-        obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(chart, keys={})</div><div class='del'>-        # dummy:: not called by 'new' method</div><div class='del'>-</div><div class='del'>-        @parent = @chart = chart</div><div class='del'>-        @cpath = @chart.path</div><div class='del'>-        # Postscript::PostscriptID_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 cget_strict(option)</div><div class='del'>-        @chart.postscript_cget_strict(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{</div><div class='del'>-        MarkerID_TBL.mutex.synchronize{ MarkerID_TBL.clear }</div><div class='del'>-      }</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'>-        MarkerID_TBL.mutex.synchronize{</div><div class='del'>-          if MarkerID_TBL[cpath]</div><div class='del'>-            MarkerID_TBL[cpath][id]? MarkerID_TBL[cpath][id]: id</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'>-</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_optkey_aliases(nil).each{|alias_name, real_name|</div><div class='del'>-            alias_name = alias_name.to_s</div><div class='del'>-            if keys.has_key?(alias_name)</div><div class='del'>-              keys[real_name.to_s] = keys.delete(alias_name)</div><div class='del'>-            end</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'>-          Tk::BLT::PlotComponent::Marker::MarkerID_TBL.mutex.synchronize{</div><div class='del'>-            Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] ||= {}</div><div class='del'>-            Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath][@id] = self</div><div class='del'>-          }</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'>-        Tk::BLT::PlotComponent::Marker::MarkerID_TBL.mutex.synchronize{</div><div class='del'>-          Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath] ||= {}</div><div class='del'>-          Tk::BLT::PlotComponent::Marker::MarkerID_TBL[@cpath][@id] = self</div><div class='del'>-        }</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 cget_strict(option)</div><div class='del'>-        @chart.marker_cget_strict(@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::AxisID_TBL.delete(@path)</div><div class='del'>-      Crosshairs::CrosshairsID_TBL.delete(@path)</div><div class='del'>-      Element::ElementID_TBL.delete(@path)</div><div class='del'>-      GridLine::GridLineID_TBL.delete(@path)</div><div class='del'>-      Legend::LegendID_TBL.delete(@path)</div><div class='del'>-      Pen::PenID_TBL.delete(@path)</div><div class='del'>-      Postscript::PostscriptID_TBL.delete(@path)</div><div class='del'>-      Marker::MarkerID_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_cget_strict(option)</div><div class='del'>-      itemcget_strict('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_cget_strict(option)</div><div class='del'>-      itemcget_strict('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_cget_strict(option)</div><div class='del'>-      itemcget_strict('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_cget_strict(option)</div><div class='del'>-      itemcget_strict('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 cdbec21f25..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/container.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-</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'>-      Hash[*simplelist(tk_send_without_enc('find', '-command', pat))]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_name(pat)</div><div class='del'>-      Hash[*simplelist(tk_send_without_enc('find', '-name', 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/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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 201548504a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/dragdrop.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/dragdrop.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,268 +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'>-=begin</div><div class='del'>-        # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-        KEY_TBL.map!{|inf|</div><div class='del'>-          if inf.kind_of?(Array)</div><div class='del'>-            inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-            inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-          end</div><div class='del'>-          inf</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        PROC_TBL.map!{|inf|</div><div class='del'>-          if inf.kind_of?(Array)</div><div class='del'>-            inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          end</div><div class='del'>-          inf</div><div class='del'>-        }</div><div class='del'>-=end</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'>-=begin</div><div class='del'>-        # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-        KEY_TBL.map!{|inf|</div><div class='del'>-          if inf.kind_of?(Array)</div><div class='del'>-            inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-            inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-          end</div><div class='del'>-          inf</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        PROC_TBL.map!{|inf|</div><div class='del'>-          if inf.kind_of?(Array)</div><div class='del'>-            inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          end</div><div class='del'>-          inf</div><div class='del'>-        }</div><div class='del'>-=end</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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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 0dba87a7cc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/eps.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 Tk::Canvas</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 0d9cb30185..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/htext.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/htext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,111 +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_cget_strict itemcget_strict</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 dfa10269ed..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/table.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/table.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,399 +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(self, *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(self)</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(self, *args)</div><div class='del'>-      end</div><div class='del'>-      def blt_table_cget_strict(*args)</div><div class='del'>-        Tk::BLT::Table.cget_strict(self, *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(self, *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(self, *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(self, *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(self, 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(self, *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(self, 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(self, *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(self, *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(self, *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(self, 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(self)</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(self, *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(self, *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(self, *args)</div><div class='del'>-      end</div><div class='del'>-      def blt_table_itemcget_strict(*args)</div><div class='del'>-        Tk::BLT::Table.itemcget_strict(self, *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(self, *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(self, *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(self, *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(self, 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'>-    win = (id[0].kind_of?(TkWindow))? id[0].path: id[0].to_s</div><div class='del'>-    ['::blt::table', 'cget', win, 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'>-    win = (container.kind_of?(TkWindow))? container.path: container.to_s</div><div class='del'>-    ['::blt::table', 'configure', win, *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'>-    win = (id[0].kind_of?(TkWindow))? id[0].path: id[0].to_s</div><div class='del'>-    win + ';'</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 __itemcget_strict itemcget_strict</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, :__itemcget_strict</div><div class='del'>-  private :__itemconfigure, :__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'>-  def cget_strict(container, option)</div><div class='del'>-    __itemcget_strict([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'>-  def itemcget_strict(container, item, option)</div><div class='del'>-    __itemcget_strict([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'>-      fail ArgumentError, 'no item is given' if args.empty?</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'>-      fail ArgumentError, 'no item is given' if args.empty?</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'>-    container</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'>-    fail ArgumentError, 'no item is given' if args.empty?</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 current_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'>-    fail ArgumentError, 'no item is given' if args.empty?</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'>-    __current_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'>-    inf = list(tk_call('::blt::table', 'info', container, tagid(item)).chomp)</div><div class='del'>-</div><div class='del'>-    ret = []</div><div class='del'>-    until inf.empty? || (inf[0].kind_of?(String) &amp;&amp; inf[0] =~ /^-/)</div><div class='del'>-      ret &lt;&lt; inf.shift</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if inf.length &gt; 1</div><div class='del'>-      keys = {}</div><div class='del'>-      while inf.length &gt; 1</div><div class='del'>-        opt = inf.slice!(0..1)</div><div class='del'>-        keys[opt[0][1..-1]] = opt[1]</div><div class='del'>-      end</div><div class='del'>-      ret &lt;&lt; keys</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 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'>-    container</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'>-    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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 ca81ad8f95..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tabset.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/tabset.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,430 +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'>-</div><div class='del'>-      (TabsetTab_ID = ['blt_tabset_tab'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-        @mutex = Mutex.new</div><div class='del'>-        def mutex; @mutex; end</div><div class='del'>-        freeze</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        TabID_TBL.mutex.synchronize{ TabID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tabset, id)</div><div class='del'>-        tpath = tabset.path</div><div class='del'>-        TabID_TBL.mutex.synchronize{</div><div class='del'>-          if TabID_TBL[tpath]</div><div class='del'>-            TabID_TBL[tpath][id]? TabID_TBL[tpath]: id</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'>-</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'>-        obj = nil</div><div class='del'>-        TabID_TBL.mutex.synchronize{</div><div class='del'>-          if name &amp;&amp; TabID_TBL[parent.path] &amp;&amp; TabID_TBL[parent.path][name]</div><div class='del'>-            obj = TabID_TBL[parent.path][name]</div><div class='del'>-            obj.configure if keys &amp;&amp; ! keys.empty?</div><div class='del'>-          else</div><div class='del'>-            (obj = self.allocate).instance_eval{</div><div class='del'>-              initialize(parent, pos, name, keys)</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'>-          end</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, 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'>-          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'>-          else</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'>-        else</div><div class='del'>-          TabsetTab_ID.mutex.synchronize{</div><div class='del'>-            @path = @id = TabsetTab_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-            TabsetTab_ID[1].succ!</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'>-      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 cget_strict(*args)</div><div class='del'>-        @t.tab_cget_strict(@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.mutex.synchronize{</div><div class='del'>-          TabID_TBL[@tpath].delete(@id)</div><div class='del'>-        }</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.mutex.synchronize{</div><div class='del'>-        Tk::BLT::Tabset::Tab::TabID_TBL.delete(@path)</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 __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_cget_strict itemcget_strict</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.mutex.synchronize{</div><div class='del'>-          TabID_TBL[@path].delete(first.id)</div><div class='del'>-        }</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.mutex.synchronize{</div><div class='del'>-          TabID_TBL[@path].delete(last.id)</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 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 670265fc78..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/ted.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/ted.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +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, :itemcget_strict</div><div class='del'>-      private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-      def cget(master, option)</div><div class='del'>-        itemcget(master, option)</div><div class='del'>-      end</div><div class='del'>-      def cget_strict(master, option)</div><div class='del'>-        itemcget_strict(master, option)</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 2e0863cfbe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/button.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Button</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 da230b5925..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/checkbutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::CheckButton</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 5434af4b72..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/frame.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Frame</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 f370c1403b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/label.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Label</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 814f9a5cc4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/radiobutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::RadioButton</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 2ae871d518..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/scrollbar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Scrollbar</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 76d5f86b1b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tile/toplevel.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Toplevel</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 77b85f1717..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/tree.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/tree.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1058 +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'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        TreeNodeID_TBL.mutex.synchronize{ TreeNodeID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tree, id)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-        TreeNodeID_TBL.mutex.synchronize{</div><div class='del'>-          if 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'>-                id = Integer(id)</div><div class='del'>-                if bool(tk_call(@tpath, 'exists', id))</div><div class='del'>-                  (obj = self.allocate).instance_eval{</div><div class='del'>-                    @parent = @tree = tree</div><div class='del'>-                    @tpath = tpath</div><div class='del'>-                    @path = @id = id</div><div class='del'>-                    TreeNodeID_TBL[@tpath] = {} unless TreeNodeID_TBL[@tpath]</div><div class='del'>-                    TreeNodeID_TBL[@tpath][@id] = self</div><div class='del'>-                  }</div><div class='del'>-                  obj</div><div class='del'>-                else</div><div class='del'>-                  id</div><div class='del'>-                end</div><div class='del'>-              rescue</div><div class='del'>-                id</div><div class='del'>-              end</div><div class='del'>-            end</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'>-</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'>-        TreeNodeID_TBL.mutex.synchronize{</div><div class='del'>-          TreeNodeID_TBL[tpath] ||= {}</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'>-          (obj = self.allocate).instance_eval{</div><div class='del'>-            initialize(tree, parent, keys)</div><div class='del'>-            TreeNodeID_TBL[tpath][@id] = self</div><div class='del'>-          }</div><div class='del'>-          obj</div><div class='del'>-        }</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'>-        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'>-          parent = tk_call(@tpath, 'root') unless parent</div><div class='del'>-          @path = @id = tk_call(@tpath, 'insert', parent, 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 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'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        TreeTagID_TBL.mutex.synchronize{ TreeTagID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      (TreeTag_ID = ['blt_tree_tag'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-        @mutex = Mutex.new</div><div class='del'>-        def mutex; @mutex; end</div><div class='del'>-        freeze</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tree, id)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-        TreeTagID_TBL.mutex.synchronize{</div><div class='del'>-          if 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, id)</div><div class='del'>-                (obj = self.allocate).instance_eval{</div><div class='del'>-                  @parent = @tree = tree</div><div class='del'>-                  @tpath = @parent.path</div><div class='del'>-                  @path = @id = id.dup.freeze if id</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'>-                obj</div><div class='del'>-              rescue</div><div class='del'>-                id</div><div class='del'>-              end</div><div class='del'>-            end</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'>-</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'>-          TreeTag_ID.mutex.synchronize{</div><div class='del'>-            @path = @id = TreeTag_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-            TreeTag_ID[1].succ!</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        TreeTagID_TBL.mutex.synchronize{</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'>-      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.mutex.synchronize{</div><div class='del'>-          TreeTagID_TBL[@tpath].delete(@id)</div><div class='del'>-        }</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'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        NotifyID_TBL.mutex.synchronize{ NotifyID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tree, id)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-        NotifyID_TBL.mutex.synchronize{</div><div class='del'>-          if 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'>-              (obj = self.allocate).instance_eval{</div><div class='del'>-                @parent = @tree = tree</div><div class='del'>-                @tpath = @parent.path</div><div class='del'>-                @path = @id = id</div><div class='del'>-                NotifyID_TBL[@tpath] ||= {}</div><div class='del'>-                NotifyID_TBL[@tpath][@id] = self</div><div class='del'>-              }</div><div class='del'>-              obj</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            return id</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.new(tree, *args, &amp;b)</div><div class='del'>-        NotifyID_TBL.mutex.synchronize{</div><div class='del'>-          if tree.kind_of?(Array)</div><div class='del'>-            # not create</div><div class='del'>-            tpath = tree[0].path            </div><div class='del'>-            NotifyID_TBL[tpath] ||= {}</div><div class='del'>-            unless (obj = NotifyID_TBL[tpath][tree[1]])</div><div class='del'>-              (NotifyID_TBL[tpath][tree[1]] = </div><div class='del'>-                 obj = self.allocate).instance_eval{</div><div class='del'>-                @parent = @tree = tree[0]</div><div class='del'>-                @tpath = @parent.path</div><div class='del'>-                @path = @id = tree[1]</div><div class='del'>-              }</div><div class='del'>-            end</div><div class='del'>-            return obj</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          (obj = self.allocate).instance_eval{</div><div class='del'>-            initialize(tree, *args, &amp;b)</div><div class='del'>-            NotifyID_TBL[@tpath] ||= {}</div><div class='del'>-            NotifyID_TBL[@tpath][@id] = self</div><div class='del'>-          }</div><div class='del'>-          return obj</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(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'>-        # 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.mutex.synchronize{</div><div class='del'>-          NotifyID_TBL[@tpath].delete(@id)</div><div class='del'>-        }</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'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        TraceID_TBL.mutex.synchronize{ TraceID_TBL.clear }</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def self.id2obj(tree, id)</div><div class='del'>-        tpath = tree.path</div><div class='del'>-        TraceID_TBL.mutex.synchronize{</div><div class='del'>-          if 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'>-                (obj = self.allocate).instance_eval{</div><div class='del'>-                  @parent = @tree = tree</div><div class='del'>-                  @tpath = @parent.path</div><div class='del'>-                  @path = @id = node  # == traceID</div><div class='del'>-                  TraceID_TBL[@tpath] ||= {}</div><div class='del'>-                  TraceID_TBL[@tpath][@id] = self</div><div class='del'>-                }</div><div class='del'>-                obj</div><div class='del'>-              rescue</div><div class='del'>-                id</div><div class='del'>-              end</div><div class='del'>-            end</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'>-</div><div class='del'>-      def self.new(tree, *args, &amp;b)</div><div class='del'>-        TraceID_TBL.mutex.synchronize{</div><div class='del'>-          if tree.kind_of?(Array)</div><div class='del'>-            # not create</div><div class='del'>-            tpath = tree[0].path</div><div class='del'>-            TraceID_TBL[tpath] ||= {}</div><div class='del'>-            unless (obj = TraceID_TBL[tpath][tree[1]])</div><div class='del'>-              (TraceID_TBL[tpath][tree[1]] = </div><div class='del'>-                 obj = self.allocate).instance_eval{</div><div class='del'>-                @parent = @tree = tree</div><div class='del'>-                @tpath = @parent.path</div><div class='del'>-                @path = @id = tree[1]  # == traceID</div><div class='del'>-              }</div><div class='del'>-            end</div><div class='del'>-            return obj</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          # super(true, tree, *args, &amp;b)</div><div class='del'>-          (obj = self.allocate).instance_eval{</div><div class='del'>-            initialize(tree, *args, &amp;b)</div><div class='del'>-            TraceID_TBL[@tpath] ||= {}</div><div class='del'>-            TraceID_TBL[@tpath][@id] = self</div><div class='del'>-          }</div><div class='del'>-          return obj</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(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'>-        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.mutex.synchronize{</div><div class='del'>-          TraceID_TBL[tpath].delete(@id)</div><div class='del'>-        }</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'>-</div><div class='del'>-    (Tree_ID = ['blt_tree'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-      @mutex = Mutex.new</div><div class='del'>-      def mutex; @mutex; end</div><div class='del'>-      freeze</div><div class='del'>-    }</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.mutex.synchronize{</div><div class='del'>-        TreeID_TBL[id]? TreeID_TBL[id]: id</div><div class='del'>-      }</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'>-      TreeID_TBL.mutex.synchronize{</div><div class='del'>-        if name &amp;&amp; TreeID_TBL[name]</div><div class='del'>-          TreeID_TBL[name] </div><div class='del'>-        else</div><div class='del'>-          (obj = self.allocate).instance_eval{</div><div class='del'>-            initialize(name)</div><div class='del'>-            TreeID_TBL[@id] = self</div><div class='del'>-          }</div><div class='del'>-          obj</div><div class='del'>-        end</div><div class='del'>-      }</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'>-        Tree_ID.mutex.synchronize{</div><div class='del'>-          @path = @id = Tree_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-          Tree_ID[1].succ!</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</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.mutex.synchronize{</div><div class='del'>-        Tk::BLT::Tree::Node::TreeNodeID_TBL.delete(@path)</div><div class='del'>-      }</div><div class='del'>-      Tk::BLT::Tree::Tag::TreeTagID_TBL.mutex.synchronize{</div><div class='del'>-        Tk::BLT::Tree::Tag::TreeTagID_TBL.delete(@path)</div><div class='del'>-      }</div><div class='del'>-      Tk::BLT::Tree::Notify::NotifyID_TBL.mutex.synchronize{</div><div class='del'>-        Tk::BLT::Tree::Notify::NotifyID_TBL.delete(@path)</div><div class='del'>-      }</div><div class='del'>-      Tk::BLT::Tree::Trace::TraceID_TBL.mutex.synchronize{</div><div class='del'>-        Tk::BLT::Tree::Trace::TraceID_TBL.delete(@path)</div><div class='del'>-      }</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'>-      Tk::BLT::Tree::Node::TreeNodeID_TBL.mutex.synchronize{</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'>-      }</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.mutex.synchronize{</div><div class='del'>-          Tk::BLT::Tree::Notify::NotifyID_TBL[@path].delete(id.to_s)</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 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.mutex.synchronize{</div><div class='del'>-        TreeTagID_TBL[@path].delete(tag)</div><div class='del'>-      }</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'>-      Tk::BLT::Tree::Trace::TraceID_TBL.mutex.synchronize{</div><div class='del'>-        args.each{|id| Tk::BLT::Tree::Trace::TraceID_TBL[@path].delete(id.to_s)}</div><div class='del'>-      }</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 c5a5697186..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/treeview.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/treeview.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1272 +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_cget_strict(name, option)</div><div class='del'>-    itemcget_strict(['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_cget_strict(option)</div><div class='del'>-    itemcget_strict('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_cget_strict(option)</div><div class='del'>-    ret = itemcget_strict('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_cget_strict(option)</div><div class='del'>-    itemcget_strict('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_cget_strict(option)</div><div class='del'>-    itemcget_strict('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, :itemcget_strict</div><div class='del'>-  private :itemconfigure, :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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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.mutex.synchronize{</div><div class='del'>-      Tk::BLT::Treeview::Node::TreeNodeID_TBL.delete(@path)</div><div class='del'>-    }</div><div class='del'>-    Tk::BLT::Treeview::Tag::TreeTagID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::BLT::Treeview::Tag::TreeTagID_TBL.delete(@path)</div><div class='del'>-    }</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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-      FindExecFlagValue.new(cmd, *args)</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'>-</div><div class='del'>-  (TreeNode_ID = ['blt_treeview_node'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    TreeNodeID_TBL.mutex.synchronize{ TreeNodeID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    TreeNodeID_TBL.mutex.synchronize{</div><div class='del'>-      if 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'>-            unless (tk_call(@tpath, 'get', id)).empty?</div><div class='del'>-              id = Integer(id)</div><div class='del'>-              (obj = self.allocate).instance_eval{</div><div class='del'>-                @parent = @tree = tree</div><div class='del'>-                @tpath = @parent.path</div><div class='del'>-                @path = @id = id</div><div class='del'>-                TreeNodeID_TBL[@tpath] ||= {}</div><div class='del'>-                TreeNodeID_TBL[@tpath][@id] = self</div><div class='del'>-              }</div><div class='del'>-              obj</div><div class='del'>-            else</div><div class='del'>-              id</div><div class='del'>-            end</div><div class='del'>-          rescue</div><div class='del'>-            id</div><div class='del'>-          end</div><div class='del'>-        end</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'>-</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'>-    TreeNodeID_TBL.mutex.synchronize{</div><div class='del'>-      TreeNodeID_TBL[tpath] ||= {}</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'>-      (obj = self.allocate).instance_eval{</div><div class='del'>-        initialize(tree, pos, parent, keys)</div><div class='del'>-        TreeNodeID_TBL[tpath][@id] = self</div><div class='del'>-      }</div><div class='del'>-      obj</div><div class='del'>-    }</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'>-      # if tk_call(@tpath, 'get', id).empty?</div><div class='del'>-      #   fail RuntimeError, "not exist the node '#{id}'"</div><div class='del'>-      # end</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'>-      configure(keys) if keys &amp;&amp; ! keys.empty?</div><div class='del'>-    else</div><div class='del'>-      name = nil</div><div class='del'>-      TreeNode_ID.mutex.synchronize{</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'>-</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'>-  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'>-</div><div class='del'>-  (TreeTag_ID = ['blt_treeview_tag'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    TreeTagID_TBL.mutex.synchronize{ TreeTagID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, name)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    TreeTagID_TBL.mutex.synchronize{</div><div class='del'>-      if TreeTagID_TBL[tpath]</div><div class='del'>-        if TreeTagID_TBL[tpath][name]</div><div class='del'>-          TreeTagID_TBL[tpath][name]</div><div class='del'>-        else</div><div class='del'>-          #self.new(tree, name)</div><div class='del'>-          (obj = self.allocate).instance_eval{</div><div class='del'>-            @parent = @tree = tree</div><div class='del'>-            @tpath = @parent.path</div><div class='del'>-            @path = @id = name</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'>-          obj</div><div class='del'>-        end</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'>-</div><div class='del'>-  def self.new_by_name(tree, name, *ids)</div><div class='del'>-    TreeTagID_TBL.mutex.synchronize{</div><div class='del'>-      unless (obj = TreeTagID_TBL[tree.path][name])</div><div class='del'>-        (obj = self.allocate).instance_eval{</div><div class='del'>-          initialize(tree, name, ids)</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'>-      end</div><div class='del'>-      obj</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.new(tree, *ids)</div><div class='del'>-    TreeTagID_TBL.mutex.synchronize{</div><div class='del'>-      (obj = self.allocate).instance_eval{</div><div class='del'>-        if tree.kind_of?(Array)</div><div class='del'>-          initialize(tree[0], tree[1], ids)</div><div class='del'>-        else</div><div class='del'>-          initialize(tree, nil, ids)</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'>-      }</div><div class='del'>-      obj</div><div class='del'>-    }</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'>-      TreeTag_ID.mutex.synchronize{</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'>-      }</div><div class='del'>-    end</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 445002d7a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/unix_dnd.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/unix_dnd.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,135 +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, :itemcget_strict</div><div class='del'>-      private :itemconfigure, :itemconfiginfo, :current_itemconfiginfo</div><div class='del'>-</div><div class='del'>-      def cget(win, option)</div><div class='del'>-        itemcget(['cget', win], option)</div><div class='del'>-      end</div><div class='del'>-      def cget_strict(win, option)</div><div class='del'>-        itemcget_strict(['cget', win], option)</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 token_cget(win, option)</div><div class='del'>-        itemcget(['token', 'cget', win], option)</div><div class='del'>-      end</div><div class='del'>-      def token_cget_strict(win, option)</div><div class='del'>-        itemcget_strict(['token', 'cget', win], option)</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 76c12a24e8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/vector.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/vector.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,256 +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'>-      list = simplelist(tk_call('::blt::vector', 'names', pat))</div><div class='del'>-      TkVar_ID_TBL.mutex.synchronize{</div><div class='del'>-        list.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'>-      }</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.mutex.synchronize{</div><div class='del'>-        TkVar_ID_TBL[@id] = self</div><div class='del'>-      }</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'>-      TkVar_ID_TBL.mutex.synchronize{</div><div class='del'>-        if TkVar_ID_TBL[name]</div><div class='del'>-          TkVar_ID_TBL[name]</div><div class='del'>-        else</div><div class='del'>-          (obj = self.allocate).instance_eval{</div><div class='del'>-            initialize(name)</div><div class='del'>-            TkVar_ID_TBL[@id] = self</div><div class='del'>-          }</div><div class='del'>-          obj</div><div class='del'>-        end</div><div class='del'>-      }</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'>-</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 219ff78e97..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/blt/watch.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/blt/watch.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,175 +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'>-</div><div class='del'>-    (BLT_WATCH_ID = ['blt_watch_id'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-      @mutex = Mutex.new</div><div class='del'>-      def mutex; @mutex; end</div><div class='del'>-      freeze</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    TkCore::INTERP.init_ip_env{</div><div class='del'>-      WATCH_ID_TBL.mutex.synchronize{ WATCH_ID_TBL.clear }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    def self.names(state = None)</div><div class='del'>-      lst = tk_split_list(tk_call('::blt::watch', 'names', state))</div><div class='del'>-      WATCH_ID_TBL.mutex.synchronize{</div><div class='del'>-        lst.collect{|name|</div><div class='del'>-          WATCH_ID_TBL[name] || name</div><div class='del'>-        }</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'>-        BLT_WATCH_ID.mutex.synchronize{</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'>-        }</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.mutex.synchronize{</div><div class='del'>-        WATCH_ID_TBL[@id] = self</div><div class='del'>-      }</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_strict(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'>-    def cget(key)</div><div class='del'>-      unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-        cget_strict(key)</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          cget_strict(key)</div><div class='del'>-        rescue =&gt; e</div><div class='del'>-          if current_configinfo.has_key?(key.to_s)</div><div class='del'>-            # error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # unknown option</div><div class='del'>-            nil</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'>-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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 8f3087d098..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/button.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::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::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 8d6d212189..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/buttonbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/buttonbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,90 +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?(Tk::Button)</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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?(Tk::Button)</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 1c58a4ccb0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/combobox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/combobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 291ca4a962..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/dialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/dialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,182 +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_strict(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'>-  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?(Tk::Button)</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 846e58062d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/dynamichelp.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/dynamichelp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,63 +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_strict(slot)</div><div class='del'>-    slot = slot.to_s</div><div class='del'>-    info = {}</div><div class='del'>-    self.current_configinfo.each{|k,v| info[k.to_s] = v if k.to_s == slot}</div><div class='del'>-    fail RuntimeError, "unknown option \"-#{slot}\""  if info.empty?</div><div class='del'>-    info.values[0]</div><div class='del'>-  end</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 a56890f4e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/entry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Entry</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 88a504aa50..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/label.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Label</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 95b40946a6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/labelentry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Entry</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 dc221806e4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/labelframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/labelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,52 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 093fcb6fb3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/listbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/listbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,358 +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'>-</div><div class='del'>-  (ListItem_ID = ['bw:item'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    ListItem_TBL.mutex.synchronize{ ListItem_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(lbox, id)</div><div class='del'>-    lpath = lbox.path</div><div class='del'>-    ListItem_TBL.mutex.synchronize{</div><div class='del'>-      if ListItem_TBL[lpath]</div><div class='del'>-        ListItem_TBL[lpath][id]? ListItem_TBL[lpath][id]: id</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'>-</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'>-      ListItem_ID.mutex.synchronize{</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'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ListItem_TBL.mutex.synchronize{</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'>-</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'>-  def cget_strict(key)</div><div class='del'>-    @listbox.itemcget_strict(@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 de66eaf81e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/mainframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/mainframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,128 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 b88461baf7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/messagedlg.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/messagedlg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,192 +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'>-  def cget_strict(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'>-    # return the index of the pressed button, or nil if it is destroyed</div><div class='del'>-    ret = num_or_str(tk_call(self.class::TkCommandNames[0], </div><div class='del'>-                             @path, *hash_kv(@keys)))</div><div class='del'>-    (ret &lt; 0)? nil: ret</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 423943619c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/notebook.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/notebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,166 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 fbc2c11255..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/pagesmanager.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/pagesmanager.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 4d979fd523..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/panedwindow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/panedwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,37 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 84bae0768b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/panelframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/panelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,57 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 32600255d5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/progressdlg.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/progressdlg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,58 +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'>-</div><div class='del'>-  def create</div><div class='del'>-    window(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/scrollableframe.rb b/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb<br/>deleted file mode 100644<br/>index 010c960ec5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/scrollableframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/scrollableframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 3599fd8459..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,38 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 0f9014f8de..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/selectcolor.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/selectcolor.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +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'>-      class Dialog &lt; Tk::BWidget::SelectColor</div><div class='del'>-      end</div><div class='del'>-      class Menubutton &lt; Tk::Menubutton</div><div class='del'>-      end</div><div class='del'>-      MenuButton = Menubutton</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='del'>-</div><div class='del'>-class Tk::BWidget::SelectColor::Dialog</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 create</div><div class='del'>-    @keys['type'] = 'dialog'  # 'dialog' type returns color</div><div class='del'>-    tk_call(Tk::BWidget::SelectColor::TkCommandNames[0], </div><div class='del'>-            @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::SelectColor::Menubutton</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'] = 'menubutton'  # 'toolbar' type returns widget path</div><div class='del'>-    window(tk_call(Tk::BWidget::SelectColor::TkCommandNames[0], </div><div class='del'>-                   @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/selectfont.rb b/ext/tk/lib/tkextlib/bwidget/selectfont.rb<br/>deleted file mode 100644<br/>index e53eb3b5bc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/selectfont.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/selectfont.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,86 +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'  # 'dialog' type returns font name</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'  # 'toolbar' type returns widget path</div><div class='del'>-    window(tk_call(Tk::BWidget::SelectFont::TkCommandNames[0], </div><div class='del'>-                   @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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 48358baa5c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/spinbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Entry</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 39c678d37e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/statusbar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/statusbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,52 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 68534e66e9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/titleframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/titleframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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 aed4512a73..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/tree.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/tree.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,453 +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'>-</div><div class='del'>-  (TreeNode_ID = ['bw:node'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    TreeNode_TBL.mutex.synchronize{ TreeNode_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    TreeNode_TBL.mutex.synchronize{</div><div class='del'>-      if TreeNode_TBL[tpath]</div><div class='del'>-        TreeNode_TBL[tpath][id]? TreeNode_TBL[tpath][id]: id</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'>-</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'>-      TreeNode_ID.mutex.synchronize{</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'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    TreeNode_TBL.mutex.synchronize{</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'>-</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'>-  def cget_strict(key)</div><div class='del'>-    @tree.itemcget_strict(@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 a93364b567..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/bwidget/widget.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/bwidget/widget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,129 +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_strict(slot)</div><div class='del'>-    slot = slot.to_s</div><div class='del'>-    info = {}</div><div class='del'>-    self.current_configinfo.each{|k,v| info[k.to_s] = v if k.to_s == slot}</div><div class='del'>-    fail RuntimeError, "unknown option \"-#{slot}\""  if info.empty?</div><div class='del'>-    info.values[0]</div><div class='del'>-  end</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'>-    if b</div><div class='del'>-      if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-        win.instance_exec(self, &amp;b)</div><div class='del'>-      else</div><div class='del'>-        win.instance_eval(&amp;b)</div><div class='del'>-      end</div><div class='del'>-    end</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_strict(win, subwidget)</div><div class='del'>-    tk_call('Widget::subcget', win, subwidget)</div><div class='del'>-  end</div><div class='del'>-  def self.sub_cget(win, subwidget)</div><div class='del'>-    self.sub_cget_strict(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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 2b75d62eb9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/itcl/incr_tcl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/itcl/incr_tcl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,178 +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]).instance_eval{</div><div class='del'>-        @mutex = Mutex.new</div><div class='del'>-        def mutex; @mutex; end</div><div class='del'>-        freeze</div><div class='del'>-      }</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'>-        Tk::Itcl::ItclObject::ITCL_OBJ_ID.mutex.synchronize{</div><div class='del'>-          @id = Tk::Itcl::ItclObject::TCL_OBJ_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-          Tk::Itcl::ItclObject::ITCL_OBJ_ID[1].succ!</div><div class='del'>-        }</div><div class='del'>-        @path = @id</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 e06deb552c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/itk/incr_tk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/itk/incr_tk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,446 +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'>-</div><div class='del'>-      (Itk_Component_ID = ['itk:component'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-        @mutex = Mutex.new</div><div class='del'>-        def mutex; @mutex; end</div><div class='del'>-        freeze</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      TkCore::INTERP.init_ip_env{</div><div class='del'>-        ComponentID_TBL.mutex.synchronize{ ComponentID_TBL.clear }</div><div class='del'>-      }</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'>-        ComponentID_TBL.mutex.synchronize{</div><div class='del'>-          if ComponentID_TBL.key?(master)</div><div class='del'>-            (ComponentID_TBL[master].key?(id))? ComponentID_TBL[master][id]: id</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'>-</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'>-          Itk_Component_ID.mutex.synchronize{</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'>-          }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ComponentID_TBL.mutex.synchronize{</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'>-</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.mutex.synchronize{</div><div class='del'>-          ComponentID_TBL[@master][@component] = self</div><div class='del'>-        }</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 05d58c386f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/buttonbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/buttonbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +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 buttoncget_strict itemcget_strict</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, :itemcget_strict</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 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 8495f0e29b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/calendar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/calendar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,125 +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'>-</div><div class='del'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-      ['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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 c85d356c55..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/checkbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/checkbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,129 +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 buttoncget_strict itemcget_strict</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, :itemcget_strict</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 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_tags</div><div class='del'>-    simplelist(tk_call_without_enc(@path, 'get'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_objs</div><div class='del'>-    simplelist(tk_call_without_enc(@path, 'get')).collect{|id|</div><div class='del'>-      Tk::Itk::Component.id2obj(self, id)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(idx=nil)</div><div class='del'>-    if idx</div><div class='del'>-      bool(tk_call_without_enc(@path, 'get', index(idx)))</div><div class='del'>-    else</div><div class='del'>-      get_tags</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'>-    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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 8d43cc07ab..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/dialogshell.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/dialogshell.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +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 buttoncget_strict itemcget_strict</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, :itemcget_strict</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 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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 d53df216bf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/entryfield.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/entryfield.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,185 +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'>-</div><div class='del'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 d9220fecbf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/hierarchy.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/hierarchy.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,365 +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'>-</div><div class='del'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-      ['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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-</div><div class='del'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-      ['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 Tk::Text 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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 5aaefbe50d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/menubar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/menubar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,211 +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 menucget_strict itemcget_strict</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, :itemcget_strict</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 __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 98ac32900c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/messagebox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/messagebox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,92 +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 typecget_strict itemcget_strict</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, :itemcget_strict</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 __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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 03b50633df..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/notebook.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/notebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,174 +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 pagecget_strict itemcget_strict</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, :itemcget_strict</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 __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'>-      idx = num_or_str(tk_send_without_enc('view'))</div><div class='del'>-      if idx.kind_of?(Fixnum) &amp;&amp; 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'>-    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(index, what='pages')</div><div class='del'>-    view('scroll', index, what)</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 3bf73d69fe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/panedwindow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/panedwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,133 +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 panecget_strict itemcget_strict</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, :itemcget_strict</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 __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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 e9d9521252..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/radiobox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/radiobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +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 buttoncget_strict itemcget_strict</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, :itemcget_strict</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 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_tag</div><div class='del'>-    ((tag = tk_call_without_enc(@path, 'get')).empty?)? nil: tag</div><div class='del'>-  end</div><div class='del'>-  alias get get_tag</div><div class='del'>-</div><div class='del'>-  def get_obj</div><div class='del'>-    (tag = get_tag)? Tk::Itk::Component.id2obj(self, tag): nil</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 67ad67d07e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,353 +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.respond_to?(id)</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'>-    tbl = nil</div><div class='del'>-    TkcItem::CItemID_TBL.mutex.synchronize{</div><div class='del'>-      tbl = TkcItem::CItemID_TBL[self.path]</div><div class='del'>-    }</div><div class='del'>-    if tbl</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.mutex.synchronize{</div><div class='del'>-            tbl.delete(item.id)</div><div class='del'>-          }</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 7543d557e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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.respond_to?(id)</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 d6436d202a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,564 +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.respond_to?(id)</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_strict(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'>-  def image_cget(index, slot)</div><div class='del'>-    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      image_cget_strict(index, slot)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        image_cget_strict(index, slot)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          if current_image_configinfo.has_key?(slot.to_s)</div><div class='del'>-            # error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # unknown option</div><div class='del'>-            nil</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          fail e  # tag 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'>-</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 TkCore::WITH_ENCODING ### Ruby 1.9 !!!!!!!!!!!!!</div><div class='del'>-      return txt.length</div><div class='del'>-    end</div><div class='del'>-    ###########################</div><div class='del'>-</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 bf9b5ec30a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/selectionbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 Tk::Listbox ( 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 f772ecf8c2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 Tk::Listbox ( 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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 aeee5c9038..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/spinner.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/spinner.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,169 +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'>-</div><div class='del'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 dbb90e5102..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,180 +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 pagecget_strict itemcget_strict</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, :itemcget_strict</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 __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 show_tab(idx)</div><div class='del'>-    @tabset.show_tab(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'>-      idx = num_or_str(tk_send_without_enc('view'))</div><div class='del'>-      if idx.kind_of?(Fixnum) &amp;&amp; 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'>-    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, what='pages')</div><div class='del'>-    view('scroll', index, what)</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 300ba9dee0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/iwidgets/tabset.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/iwidgets/tabset.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,144 +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 tabcget_strict itemcget_strict</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, :itemcget_strict</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 __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'>-</div><div class='del'>-  def show_tab(idx)</div><div class='del'>-    if index(idx) == 0</div><div class='del'>-      self.start = 0</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    reutrn unless @canvas ||= self.winfo_children[0]</div><div class='del'>-</div><div class='del'>-    delta = 1 if (delta = cget(:gap)) == 'overlap' ||</div><div class='del'>-                   (delta = self.winfo_pixels(delta) + 1) &lt;= 0</div><div class='del'>-</div><div class='del'>-    case cget(:tabpos)</div><div class='del'>-    when 's', 'n'</div><div class='del'>-      if (head = tabcget(idx, :left)) &lt; 0</div><div class='del'>-        self.start -= head</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      tabs_size = @canvas.winfo_width</div><div class='del'>-      tab_start, tab_end = @canvas . </div><div class='del'>-        find_overlapping(head, 0, head + delta, @canvas.winfo_height) . </div><div class='del'>-        find_all{|id| @canvas.itemtype(id) == TkcPolygon} . </div><div class='del'>-        map!{|id| bbox = @canvas.bbox(id); [bbox[0], bbox[2]]} . max</div><div class='del'>-</div><div class='del'>-    when 'e', 'w'</div><div class='del'>-      if (head = tabcget(idx, :top)) &lt; 0</div><div class='del'>-        self.start -= head</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      tabs_size = @canvas.winfo_height</div><div class='del'>-      tab_start, tab_end = @canvas . </div><div class='del'>-        find_overlapping(0, head, @canvas.winfo_width, head + delta) . </div><div class='del'>-        find_all{|id| @canvas.itemtype(id) == TkcPolygon} . </div><div class='del'>-        map!{|id| bbox = @canvas.bbox(id); [bbox[1], bbox[3]]} . max</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if (size = tab_end - tab_start + 1) &gt; tabs_size</div><div class='del'>-      self.start -= tab_start</div><div class='del'>-    elsif head + size &gt; tabs_size</div><div class='del'>-      self.start -= head + size - tabs_size</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='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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 7db3c2e2b7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/autoscroll.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 Tk::Scrollbar</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 9014037f3d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/ctext.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Text</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 2244dd7a9a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/datefield.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Entry</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 fc5d8b26d9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/getstring.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/getstring.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,134 +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_strict(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'>-  def cget(slot)</div><div class='del'>-    cget_strict(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'>-        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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 8c92926a4c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/ico.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/ico.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,116 +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'>-      Tk_Image_ID.mutex.synchronize{</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'>-      }</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 c4b8240c04..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/ip_entry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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; Tk::Entry</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 06ab20f3e6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/plotchart.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/plotchart.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,886 +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; Tk::Canvas</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?(Tk::Canvas)</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.mutex.synchronize{</div><div class='del'>-        Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)</div><div class='del'>-      }</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; Tk::Canvas</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?(Tk::Canvas)</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.mutex.synchronize{</div><div class='del'>-        Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)</div><div class='del'>-      }</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; Tk::Canvas</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?(Tk::Canvas)</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; Tk::Canvas</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?(Tk::Canvas)</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; Tk::Canvas</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?(Tk::Canvas)</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; Tk::Canvas</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?(Tk::Canvas)</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.mutex.synchronize{</div><div class='del'>-        Tk::Tcllib::Plotchart::PlotSeries::SeriesID_TBL.delete(@path)</div><div class='del'>-      }</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; Tk::Canvas</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?(Tk::Canvas)</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; Tk::Canvas</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?(Tk::Canvas)</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'>-</div><div class='del'>-    (Series_ID = ['series'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-      @mutex = Mutex.new</div><div class='del'>-      def mutex; @mutex; end</div><div class='del'>-      freeze</div><div class='del'>-    }</div><div class='del'>-    TkCore::INTERP.init_ip_env{</div><div class='del'>-      SeriesID_TBL.mutex.synchronize{ SeriesID_TBL.clear }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    def self.id2obj(chart, id)</div><div class='del'>-      path = chart.path</div><div class='del'>-      SeriesID_TBL.mutex.synchronize{</div><div class='del'>-        if SeriesID_TBL[path]</div><div class='del'>-          SeriesID_TBL[path][id]? SeriesID_TBL[path][id]: id</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'>-</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'>-      Series_ID.mutex.synchronize{</div><div class='del'>-        @path = @series = @id = Series_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-        Series_ID[1].succ!</div><div class='del'>-      }</div><div class='del'>-      SeriesID_TBL.mutex.synchronize{</div><div class='del'>-        SeriesID_TBL[@ppath] ||= {}</div><div class='del'>-        SeriesID_TBL[@ppath][@id] = self</div><div class='del'>-      }</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 1c813e36da..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/swaplist.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/swaplist.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,150 +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_strict(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'>-  def cget(slot)</div><div class='del'>-    cget_strict(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'>-        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 efeb8fbbac..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/tablelist.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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'>-  require '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 d7a6c97210..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/tablelist_core.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/tablelist_core.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,782 +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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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 cellcget_strict cell_cget_strict</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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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 columncget_strict column_cget_strict</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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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 rowcget_strict row_cget_strict</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, :itemcget_strict</div><div class='del'>-  private :itemconfigure, :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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 b366e0198b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tcllib/tkpiechart.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tcllib/tkpiechart.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,314 +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.mutex.synchronize{</div><div class='del'>-        CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]</div><div class='del'>-      }</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.mutex.synchronize{</div><div class='del'>-        CItemID_TBL[@path] = {} unless CItemID_TBL[@path]</div><div class='del'>-        CItemID_TBL[@path][@id] = self</div><div class='del'>-      }</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.mutex.synchronize{</div><div class='del'>-        CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]</div><div class='del'>-      }</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 60ea012cc0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,419 +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'>-require 'tk/ttk_selector'</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'>-if Tk::TK_MAJOR_VERSION &gt; 8 || </div><div class='del'>-    (Tk::TK_MAJOR_VERSION == 8 &amp;&amp; Tk::TK_MINOR_VERSION &gt;= 5)</div><div class='del'>-  TkPackage.require('tile') # for compatibility (version check of 'tile')</div><div class='del'>-  verstr = TkPackage.require('Ttk')</div><div class='del'>-else</div><div class='del'>-  verstr = TkPackage.require('tile')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ver = verstr.split('.')</div><div class='del'>-if ver[0].to_i == 0</div><div class='del'>-  # Tile extension package</div><div class='del'>-  if 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[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'>-  elsif ver[1].to_i &lt;= 7</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'>-  else</div><div class='del'>-    # version 0.8 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 = 8</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</div><div class='del'>-    PACKAGE_NAME = 'tile'.freeze</div><div class='del'>-  end</div><div class='del'>-else</div><div class='del'>-  # Ttk package merged Tcl/Tk core (Tcl/Tk 8.5+)</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 = 8</div><div class='del'>-</div><div class='del'>-      PACKAGE_NAME = 'Ttk'.freeze</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'>-    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(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.__Import_Tile_Widgets__!</div><div class='del'>-      warn 'Warning: "Tk::Tile::__Import_Tile_Widgets__!" is obsolete.' &lt;&lt;</div><div class='del'>-           ' To control default widget set, use "Tk.default_widget_set = :Ttk"'</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.__define_LoadImages_proc_for_compatibility__!</div><div class='del'>-      # Ttk 8.5 (Tile 0.8) lost 'LoadImages' utility procedure.</div><div class='del'>-      # So, some old scripts doen't work, because those scripts use the </div><div class='del'>-      # procedure to define local styles. </div><div class='del'>-      # Of course, rewriting such Tcl/Tk scripts isn't difficult for </div><div class='del'>-      # Tcl/Tk users. However, it may be troublesome for Ruby/Tk users </div><div class='del'>-      # who use such Tcl/Tk scripts as it is.</div><div class='del'>-      # This method may help Ruby/Tk users who don't want to modify old </div><div class='del'>-      # Tcl/Tk scripts for the latest version of Ttk (Tile) extension.</div><div class='del'>-      # This method defines a comaptible 'LoadImages' procedure on the </div><div class='del'>-      # Tcl/Tk interpreter working under Ruby/Tk. </div><div class='del'>-      # Please give attention to use this method. It may conflict with </div><div class='del'>-      # some definitions on Tcl/Tk scripts. </div><div class='del'>-      klass_name = self.name</div><div class='del'>-      proc_name = 'LoadImages'</div><div class='del'>-      if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-        ns_list = ['::tile']</div><div class='del'>-        if Tk.info(:commands, "::ttk::#{proc_name}").empty?</div><div class='del'>-          ns_list &lt;&lt; '::ttk'</div><div class='del'>-        end</div><div class='del'>-      else # Tk::Tile::USE_TILE_NAMESPACE</div><div class='del'>-        ns_list = ['::ttk']</div><div class='del'>-        if Tk.info(:commands, "::tile::#{proc_name}").empty?</div><div class='del'>-          ns_list &lt;&lt; '::tile'</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ns_list.each{|ns|</div><div class='del'>-        cmd = "#{ns}::#{proc_name}"</div><div class='del'>-        unless Tk.info(:commands, cmd).empty?</div><div class='del'>-          #fail RuntimeError, "can't define '#{cmd}' command (already exist)"</div><div class='del'>-</div><div class='del'>-          # do nothing !!!</div><div class='del'>-          warn "Warning: can't define '#{cmd}' command (already exist)" if $DEBUG</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-        TkNamespace.eval(ns){</div><div class='del'>-          TkCore::INTERP.add_tk_procs(proc_name, 'imgdir {patterns {*.gif}}', </div><div class='del'>-                                      &lt;&lt;-'EOS')</div><div class='del'>-            foreach pattern $patterns {</div><div class='del'>-              foreach file [glob -directory $imgdir $pattern] {</div><div class='del'>-                set img [file tail [file rootname $file]]</div><div class='del'>-                if {![info exists images($img)]} {</div><div class='del'>-                  set images($img) [image create photo -file $file]</div><div class='del'>-                }</div><div class='del'>-              }</div><div class='del'>-            }</div><div class='del'>-            return [array get images]</div><div class='del'>-          EOS</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.load_images(imgdir, pat=nil)</div><div class='del'>-      if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 8</div><div class='del'>-        if Tk::Tile::USE_TTK_NAMESPACE</div><div class='del'>-          cmd = '::ttk::LoadImages'</div><div class='del'>-        else # Tk::Tile::USE_TILE_NAMESPACE</div><div class='del'>-          cmd = '::tile::LoadImages'</div><div class='del'>-        end</div><div class='del'>-        pat ||= TkComm::None</div><div class='del'>-        images = Hash[*TkComm.simplelist(Tk.tk_call(cmd, 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'>-      else ## TILE_SPEC_VERSION_ID &gt;= 8</div><div class='del'>-        pat ||= '*.gif'</div><div class='del'>-        if pat.kind_of?(Array)</div><div class='del'>-          pat_list = pat</div><div class='del'>-        else</div><div class='del'>-          pat_list = [ pat ]</div><div class='del'>-        end</div><div class='del'>-        Dir.chdir(imgdir){</div><div class='del'>-          pat_list.each{|pat|</div><div class='del'>-            Dir.glob(pat).each{|f|</div><div class='del'>-              img = File.basename(f, '.*')</div><div class='del'>-              unless TkComm.bool(Tk.info('exists', "images(#{img})"))</div><div class='del'>-                Tk.tk_call('set', "images(#{img})", </div><div class='del'>-                           Tk.tk_call('image', 'create', 'photo', '-file', f))</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-        images = Hash[*TkComm.simplelist(Tk.tk_call('array', 'get', 'images'))]</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'>-      end</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'>-    def self.themes(glob_ptn = nil)</div><div class='del'>-      if TILE_SPEC_VERSION_ID &lt; 8 &amp;&amp; Tk.info(:commands, '::ttk::themes').empty?</div><div class='del'>-        fail RuntimeError, 'not support glob option' if glob_ptn</div><div class='del'>-        cmd = ['::tile::availableThemes']</div><div class='del'>-      else</div><div class='del'>-        glob_ptn = '*' unless glob_ptn</div><div class='del'>-        cmd = ['::ttk::themes', glob_ptn]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-        TkComm.simplelist(Tk.tk_call_without_enc(*cmd))</div><div class='del'>-      rescue</div><div class='del'>-        TkComm.simplelist(Tk.tk_call('lsearch', '-all', '-inline', </div><div class='del'>-                                     Tk::Tile::Style.theme_names, </div><div class='del'>-                                     glob_ptn))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.set_theme(theme)</div><div class='del'>-      if TILE_SPEC_VERSION_ID &lt; 8 &amp;&amp; Tk.info(:commands, '::ttk::setTheme').empty?</div><div class='del'>-        cmd = '::tile::setTheme'</div><div class='del'>-      else</div><div class='del'>-        cmd = '::ttk::setTheme'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-        Tk.tk_call_without_enc(cmd, theme)</div><div class='del'>-      rescue</div><div class='del'>-        Tk::Tile::Style.theme_use(theme)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module KeyNav</div><div class='del'>-      if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 8</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'>-      else # dummy</div><div class='del'>-        def self.enableMnemonics(w)</div><div class='del'>-          ""</div><div class='del'>-        end</div><div class='del'>-        def self.defaultButton(w)</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'>-    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'>-</div><div class='del'>-      TkFont::SYSTEM_FONT_NAMES.add [</div><div class='del'>-        'TkDefaultFont', 'TkTextFont', 'TkHeadingFont', </div><div class='del'>-        'TkCaptionFont', 'TkTooltipFont', 'TkFixedFont', </div><div class='del'>-        'TkMenuFont', 'TkSmallCaptionFont', 'TkIconFont'</div><div class='del'>-      ]</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 ttk_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'>-      alias tile_instate ttk_instate</div><div class='del'>-</div><div class='del'>-      def ttk_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'>-      alias tile_state ttk_state</div><div class='del'>-</div><div class='del'>-      def ttk_identify(x, y)</div><div class='del'>-        ret = tk_send_without_enc('identify', x, y)</div><div class='del'>-        (ret.empty?)? nil: ret</div><div class='del'>-      end</div><div class='del'>-      alias tile_identify ttk_identify</div><div class='del'>-</div><div class='del'>-      # remove instate/state/identify method </div><div class='del'>-      # to avoid the conflict with widget options</div><div class='del'>-      if Tk.const_defined?(:USE_OBSOLETE_TILE_STATE_METHOD) &amp;&amp; Tk::USE_OBSOLETE_TILE_STATE_METHOD</div><div class='del'>-        alias instate  ttk_instate</div><div class='del'>-        alias state    ttk_state</div><div class='del'>-        alias identify ttk_identify</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'>-    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'>-    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'>-    autoload :PanedWindow,   'tkextlib/tile/tpaned'</div><div class='del'>-    autoload :Panedwindow,   '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'>-    autoload :XScrollbar,    'tkextlib/tile/tscrollbar'</div><div class='del'>-    autoload :YScrollbar,    '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 :SizeGrip,      'tkextlib/tile/sizegrip'</div><div class='del'>-    autoload :Sizegrip,      'tkextlib/tile/sizegrip'</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='del'>-</div><div class='del'>-Ttk = Tk::Tile</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 ef2d1fe577..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/dialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/dialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,96 +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', @path))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget_strict(slot)</div><div class='del'>-    @keys[slot.to_s]</div><div class='del'>-  end</div><div class='del'>-  def cget(slot)</div><div class='del'>-    @keys[slot.to_s]</div><div class='del'>-  end</div><div class='del'>-=begin</div><div class='del'>-  def cget(slot)</div><div class='del'>-    unless TkConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      cget_strict(slot)</div><div class='del'>-    else</div><div class='del'>-      cget_strict(slot) rescue 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 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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/sizegrip.rb b/ext/tk/lib/tkextlib/tile/sizegrip.rb<br/>deleted file mode 100644<br/>index c5068919a4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/sizegrip.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/sizegrip.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  ttk::sizegrip 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 SizeGrip &lt; TkWindow</div><div class='del'>-    end</div><div class='del'>-    Sizegrip = SizeGrip</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Sizegrip, :TkSizegrip, :TkSizeGrip)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::SizeGrip &lt; TkWindow</div><div class='del'>-  include Tk::Tile::TileWidget</div><div class='del'>-</div><div class='del'>-  TkCommandNames = ['::ttk::sizegrip'.freeze].freeze</div><div class='del'>-  WidgetClassName = 'TSizegrip'.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/style.rb b/ext/tk/lib/tkextlib/tile/style.rb<br/>deleted file mode 100644<br/>index ca7ee99c32..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/style.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/style.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,316 +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'>-  if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 8</div><div class='del'>-    TkCommandNames = ['style'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    # --- Tk::Tile::Style.__define_wrapper_proc_for_compatibility__! ---</div><div class='del'>-    # On Ttk (Tile) extension, 'style' command has imcompatible changes </div><div class='del'>-    # depend on the version of the extention. It requires modifying the </div><div class='del'>-    # Tcl/Tk scripts to define local styles. The rule for modification </div><div class='del'>-    # is a simple one. But, if users want to keep compatibility between </div><div class='del'>-    # versions of the extension, they will have to contrive to do that. </div><div class='del'>-    # It may be troublesome, especially for Ruby/Tk users.</div><div class='del'>-    # This method may help such work. This method make some definitions </div><div class='del'>-    # on the Tcl/Tk interpreter to work with different version of style </div><div class='del'>-    # command format. Please give attention to use this method. It may </div><div class='del'>-    # conflict with some definitions on Tcl/Tk scripts. </div><div class='del'>-    if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 7</div><div class='del'>-      def __define_wrapper_proc_for_compatibility__!</div><div class='del'>-        __define_themes_and_setTheme_proc__!</div><div class='del'>-</div><div class='del'>-        unless Tk.info(:commands, '::ttk::style').empty?</div><div class='del'>-          # fail RuntimeError,</div><div class='del'>-          #      "can't define '::ttk::style' command (already exist)"</div><div class='del'>-</div><div class='del'>-          # do nothing !!!</div><div class='del'>-          warn "Warning: can't define '::ttk::style' command (already exist)" if $DEBUG</div><div class='del'>-          return</div><div class='del'>-        end</div><div class='del'>-        TkCore::INTERP.add_tk_procs('::ttk::style', 'args', &lt;&lt;-'EOS')</div><div class='del'>-        if [string equal [lrange $args 0 1] {element create}] {</div><div class='del'>-          if [string equal [lindex $args 3] image] {</div><div class='del'>-            set spec [lindex $args 4]</div><div class='del'>-            set map  [lrange $spec 1 end]</div><div class='del'>-            if [llength $map] {</div><div class='del'>-              # return [eval [concat [list ::style element create [lindex $args 2] image [lindex $spec 0] -map $map] [lrange $args 5 end]]]</div><div class='del'>-              return [uplevel 1 [list ::style element create [lindex $args 2] image [lindex $spec 0] -map $map] [lrange $args 5 end]]</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-        # return [eval "::style $args"]</div><div class='del'>-        return [uplevel 1 ::style $args]</div><div class='del'>-      EOS</div><div class='del'>-        #########################</div><div class='del'>-      end</div><div class='del'>-    else ### TILE_SPEC_VERSION_ID == 7</div><div class='del'>-      def __define_wrapper_proc_for_compatibility__!</div><div class='del'>-        __define_themes_and_setTheme_proc__!</div><div class='del'>-</div><div class='del'>-        unless Tk.info(:commands, '::ttk::style').empty?</div><div class='del'>-          # fail RuntimeError,</div><div class='del'>-          #     "can't define '::ttk::style' command (already exist)"</div><div class='del'>-</div><div class='del'>-          # do nothing !!!</div><div class='del'>-          warn "Warning: can't define '::ttk::style' command (already exist)" if $DEBUG</div><div class='del'>-          return</div><div class='del'>-        end</div><div class='del'>-        TkCore::INTERP.add_tk_procs('::ttk::style', 'args', &lt;&lt;-'EOS')</div><div class='del'>-        if [string equal [lrange $args 0 1] {element create}] {</div><div class='del'>-          if [string equal [lindex $args 3] image] {</div><div class='del'>-            set spec [lindex $args 4]</div><div class='del'>-            set map  [lrange $spec 1 end]</div><div class='del'>-            if [llength $map] {</div><div class='del'>-              # return [eval [concat [list ::style element create [lindex $args 2] image [lindex $spec 0] -map $map] [lrange $args 5 end]]]</div><div class='del'>-              return [uplevel 1 [list ::style element create [lindex $args 2] image [lindex $spec 0] -map $map] [lrange $args 5 end]]]</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        } elseif [string equal [lindex $args 0] default] {</div><div class='del'>-          # return [eval "::style [lreplace $args 0 0 configure]"]</div><div class='del'>-          return [uplevel 1 ::style [lreplace $args 0 0 configure]]</div><div class='del'>-        }</div><div class='del'>-        # return [eval "::style $args"]</div><div class='del'>-        return [uplevel 1 ::style $args]</div><div class='del'>-      EOS</div><div class='del'>-        #########################</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  else ### TILE_SPEC_VERSION_ID &gt;= 8</div><div class='del'>-    TkCommandNames = ['::ttk::style'.freeze].freeze</div><div class='del'>-</div><div class='del'>-    def __define_wrapper_proc_for_compatibility__!</div><div class='del'>-      __define_themes_and_setTheme_proc__!</div><div class='del'>-</div><div class='del'>-      unless Tk.info(:commands, '::style').empty?</div><div class='del'>-        # fail RuntimeError, "can't define '::style' command (already exist)"</div><div class='del'>-</div><div class='del'>-        # do nothing !!!</div><div class='del'>-        warn "Warning: can't define '::style' command (already exist)" if $DEBUG</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      TkCore::INTERP.add_tk_procs('::style', 'args', &lt;&lt;-'EOS')</div><div class='del'>-        if [string equal [lrange $args 0 1] {element create}] {</div><div class='del'>-          if [string equal [lindex $args 3] image] {</div><div class='del'>-            set name [lindex $args 4]</div><div class='del'>-            set opts [lrange $args 5 end]</div><div class='del'>-            set idx [lsearch $opts -map]</div><div class='del'>-            if {$idx &gt;= 0 &amp;&amp; [expr $idx % 2 == 0]} {</div><div class='del'>-             # return [eval [concat [list ::ttk::style element create [lindex $args 2] image [concat $name [lindex $opts [expr $idx + 1]]]] [lreplace $opts $idx [expr $idx + 1]]]]</div><div class='del'>-              return [uplevel 1 [list ::ttk::style element create [lindex $args 2] image [concat $name [lindex $opts [expr $idx + 1]]]] [lreplace $opts $idx [expr $idx + 1]]]</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        } elseif [string equal [lindex $args 0] default] {</div><div class='del'>-          # return [eval "::ttk::style [lreplace $args 0 0 configure]"]</div><div class='del'>-          return [uplevel 1 ::ttk::style [lreplace $args 0 0 configure]]</div><div class='del'>-        }</div><div class='del'>-        # return [eval "::ttk::style $args"]</div><div class='del'>-        return [uplevel 1 ::ttk::style $args]</div><div class='del'>-      EOS</div><div class='del'>-      #########################</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def __define_themes_and_setTheme_proc__!</div><div class='del'>-    TkCore::INTERP.add_tk_procs('::ttk::themes', '{ptn *}', &lt;&lt;-'EOS')</div><div class='del'>-      #set themes [list]</div><div class='del'>-      set themes [::ttk::style theme names]</div><div class='del'>-      foreach pkg [lsearch -inline -all -glob [package names] ttk::theme::$ptn] {</div><div class='del'>-          set theme [namespace tail $pkg]</div><div class='del'>-          if {[lsearch -exact $themes $theme] &lt; 0} {</div><div class='del'>-              lappend themes $theme</div><div class='del'>-          }</div><div class='del'>-      }</div><div class='del'>-      foreach pkg [lsearch -inline -all -glob [package names] tile::theme::$ptn] {</div><div class='del'>-          set theme [namespace tail $pkg]</div><div class='del'>-          if {[lsearch -exact $themes $theme] &lt; 0} {</div><div class='del'>-              lappend themes $theme</div><div class='del'>-          }</div><div class='del'>-      }</div><div class='del'>-      return $themes</div><div class='del'>-    EOS</div><div class='del'>-    #########################</div><div class='del'>-    TkCore::INTERP.add_tk_procs('::ttk::setTheme', 'theme', &lt;&lt;-'EOS')</div><div class='del'>-      variable currentTheme</div><div class='del'>-      if {[lsearch -exact [::ttk::style theme names] $theme] &lt; 0} {</div><div class='del'>-          package require [lsearch -inline -regexp [package names] (ttk|tile)::theme::$theme]</div><div class='del'>-      }</div><div class='del'>-      ::ttk::style theme use $theme</div><div class='del'>-      set currentTheme $theme</div><div class='del'>-    EOS</div><div class='del'>-  end</div><div class='del'>-  private :__define_themes_and_setTheme_proc__!</div><div class='del'>-</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(TkCommandNames[0], sub_cmd, style, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_call(TkCommandNames[0], 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'>-      if keys.kind_of?(Hash)</div><div class='del'>-        tk_call(TkCommandNames[0], 'map', style, *hash_kv(keys))</div><div class='del'>-      else</div><div class='del'>-        simplelist(tk_call(TkCommandNames[0], 'map', style, '-' &lt;&lt; keys.to_s))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      ret = {}</div><div class='del'>-      Hash[*(simplelist(tk_call(TkCommandNames[0], 'map', style)))].each{|k, v|</div><div class='del'>-        ret[k[1..-1]] = list(v)</div><div class='del'>-      }</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias map_configure map</div><div class='del'>-</div><div class='del'>-  def map_configinfo(style=nil, key=None)</div><div class='del'>-    style = '.' unless style</div><div class='del'>-    map(style, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def map_default_configinfo(key=None)</div><div class='del'>-    map('.', key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lookup(style, opt, state=None, fallback_value=None)</div><div class='del'>-    tk_call(TkCommandNames[0], 'lookup', style, </div><div class='del'>-            '-' &lt;&lt; opt.to_s, state, fallback_value)</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(TkCommandNames[0], 'layout', style, spec)</div><div class='del'>-    else</div><div class='del'>-      _style_layout(list(tk_call(TkCommandNames[0], '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'>-    if type == 'image' || type == :image</div><div class='del'>-      element_create_image(name, *args)</div><div class='del'>-    else</div><div class='del'>-      tk_call(TkCommandNames[0], 'element', 'create', name, type, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def element_create_image(name, *args)</div><div class='del'>-    fail ArgumentError, 'Must supply a base image' unless (spec = args.shift)</div><div class='del'>-    if (opts = args.shift)</div><div class='del'>-      if opts.kind_of?(Hash)</div><div class='del'>-        opts = _symbolkey2str(opts)</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, 'bad option'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    fail ArgumentError, 'too many arguments' unless args.empty?</div><div class='del'>-</div><div class='del'>-    if spec.kind_of?(Array)</div><div class='del'>-      # probably, command format is tile 0.8+ (Tcl/Tk8.5+) style</div><div class='del'>-      if Tk::Tile::TILE_SPEC_VERSION_ID &gt;= 8</div><div class='del'>-        if opts</div><div class='del'>-          tk_call(TkCommandNames[0], </div><div class='del'>-                  'element', 'create', name, 'image', spec, opts)</div><div class='del'>-        else</div><div class='del'>-          tk_call(TkCommandNames[0], 'element', 'create', name, 'image', spec)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        fail ArgumentError, 'illegal arguments' if opts.key?('map')</div><div class='del'>-        base = spec.shift</div><div class='del'>-        opts['map'] = spec</div><div class='del'>-        tk_call(TkCommandNames[0], </div><div class='del'>-                'element', 'create', name, 'image', base, opts)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      # probably, command format is tile 0.7.8 or older style</div><div class='del'>-      if Tk::Tile::TILE_SPEC_VERSION_ID &gt;= 8</div><div class='del'>-        spec = [spec, *(opts.delete('map'))] if opts.key?('map')</div><div class='del'>-      end</div><div class='del'>-      if opts</div><div class='del'>-        tk_call(TkCommandNames[0], </div><div class='del'>-                'element', 'create', name, 'image', spec, opts)</div><div class='del'>-      else</div><div class='del'>-        tk_call(TkCommandNames[0], 'element', 'create', name, 'image', spec)</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_names()</div><div class='del'>-    list(tk_call(TkCommandNames[0], '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(TkCommandNames[0], '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'>-    name = name.to_s</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      tk_call(TkCommandNames[0], 'theme', 'create', name, *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_call(TkCommandNames[0], 'theme', 'create', name)</div><div class='del'>-    end</div><div class='del'>-    name</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'>-    name = name.to_s</div><div class='del'>-    cmd = Proc.new(&amp;b) if !cmd &amp;&amp; b</div><div class='del'>-    tk_call(TkCommandNames[0], 'theme', 'settings', name, cmd)</div><div class='del'>-    name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def theme_names()</div><div class='del'>-    list(tk_call(TkCommandNames[0], 'theme', 'names'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def theme_use(name)</div><div class='del'>-    name = name.to_s</div><div class='del'>-    tk_call(TkCommandNames[0], 'theme', 'use', name)</div><div class='del'>-    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 5d7db10fe9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tbutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +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; Tk::Button</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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Button, :TkButton)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TButton &lt; Tk::Button</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 172225fcec..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tcheckbutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tcheckbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +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; Tk::CheckButton</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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Checkbutton, </div><div class='del'>-                            :TkCheckbutton, :TkCheckButton)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TCheckButton &lt; Tk::CheckButton</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 b64372f1c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tcombobox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tcombobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,54 +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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Combobox, :TkCombobox)</div><div class='del'>-</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'))</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 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 0bea98dcd9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tentry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tentry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,48 +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; Tk::Entry</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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Entry, :TkEntry)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TEntry &lt; Tk::Entry</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 __optkey_aliases</div><div class='del'>-    {:vcmd=&gt;:validatecommand, :invcmd=&gt;:invalidcommand}</div><div class='del'>-  end</div><div class='del'>-  private :__optkey_aliases</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 3b5f98bb6e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +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; Tk::Frame</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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Frame, :TkFrame)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TFrame &lt; Tk::Frame</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 7d074d3842..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tlabel.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tlabel.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +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; Tk::Label</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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Label, :TkLabel)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TLabel &lt; Tk::Label</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 cff66d8658..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tlabelframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tlabelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +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'>-    TLabelFrame = TLabelframe</div><div class='del'>-    Labelframe  = TLabelframe</div><div class='del'>-    LabelFrame  = TLabelframe</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Labelframe, </div><div class='del'>-                            :TkLabelframe, :TkLabelFrame)</div><div class='del'>-</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 7c6ab28e52..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tmenubutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tmenubutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +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; Tk::Menubutton</div><div class='del'>-    end</div><div class='del'>-    TMenuButton = TMenubutton</div><div class='del'>-    Menubutton  = TMenubutton</div><div class='del'>-    MenuButton  = TMenubutton</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Menubutton, </div><div class='del'>-                            :TkMenubutton, :TkMenuButton)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TMenubutton &lt; Tk::Menubutton</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 4d65e363da..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tnotebook.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tnotebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,139 +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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Notebook, :TkNotebook)</div><div class='del'>-</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(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_methodcall_optkeys(id)  # { key=&gt;method, ... }</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'>-  #alias tabcget itemcget</div><div class='del'>-  #alias tabcget_strict itemcget_strict</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_strict(tagOrId, option)</div><div class='del'>-    tabconfigure(tagOrId, option)[-1]</div><div class='del'>-  end</div><div class='del'>-  def tabcget(tagOrId, option)</div><div class='del'>-    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      tabcget_strict(tagOrId, option)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        tabcget_strict(tagOrId, option)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          if current_tabconfiginfo(tagOrId).has_key?(option.to_s)</div><div class='del'>-            # not tag error &amp; option is known -&gt; error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # not tag error &amp; option is unknown</div><div class='del'>-            nil</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          fail e  # tag 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'>-  ################################</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('add', _epath(child), *hash_kv(keys))</div><div class='del'>-    else</div><div class='del'>-      tk_send('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 selected</div><div class='del'>-    window(tk_send_without_enc('select'))</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 d96ff43973..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tpaned.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tpaned.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,231 +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'>-    PanedWindow = Panedwindow = Paned = TPaned</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Panedwindow, </div><div class='del'>-                            :TkPanedwindow, :TkPanedWindow)</div><div class='del'>-</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'>-    if Tk::Tile::TILE_SPEC_VERSION_ID &lt; 8</div><div class='del'>-      TkCommandNames = ['::ttk::paned'.freeze].freeze</div><div class='del'>-    else</div><div class='del'>-      TkCommandNames = ['::ttk::panedwindow'.freeze].freeze</div><div class='del'>-    end</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(*args)</div><div class='del'>-    keys = args.pop</div><div class='del'>-    fail ArgumentError, "no window in arguments" unless keys</div><div class='del'>-</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'>-      opts = hash_kv(keys)</div><div class='del'>-    else</div><div class='del'>-      args.push(keys) if keys</div><div class='del'>-      opts = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    args.each{|win|</div><div class='del'>-      tk_send_without_enc('add', _epath(win), *opts)</div><div class='del'>-    }</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_strict(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_strict panecget_strict</div><div class='del'>-</div><div class='del'>-  def panecget(pane, slot)</div><div class='del'>-    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      panecget_strict(pane, slot)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        panecget_strict(pane, slot)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          if current_paneconfiginfo(pane).has_key?(slot.to_s)</div><div class='del'>-            # not tag error &amp; option is known -&gt; error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # not tag error &amp; option is unknown</div><div class='del'>-            nil</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          fail e  # tag 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'>-  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 f786d370dd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tprogressbar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tprogressbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Progressbar, :TkProgressbar)</div><div class='del'>-</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 d653a6d256..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tradiobutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tradiobutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +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; Tk::RadioButton</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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Radiobutton, </div><div class='del'>-                            :TkRadiobutton, :TkRadioButton)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TRadioButton &lt; Tk::RadioButton</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 c978a1a07b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/treeview.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/treeview.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1238 +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'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Treeview, :TkTreeview)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-module Tk::Tile::TreeviewConfig</div><div class='del'>-  include TkItemConfigMethod</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;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'>-  end</div><div class='del'>-  private :__item_configinfo_struct</div><div class='del'>-</div><div class='del'>-  def __itemconfiginfo_core(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'>-        return [slot.to_s, tagfontobj(tagid(tagOrId), fontkey)]</div><div class='del'>-      else</div><div class='del'>-        if slot</div><div class='del'>-          slot = slot.to_s</div><div class='del'>-</div><div class='del'>-          alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}</div><div class='del'>-          if real_name</div><div class='del'>-            slot = real_name.to_s</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          case slot</div><div class='del'>-          when /^(#{__tile_specific_item_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            begin</div><div class='del'>-              # On tile-0.7.{2-8}, 'state' options has no '-' at its head.</div><div class='del'>-              val = tk_call(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; slot))</div><div class='del'>-            rescue</div><div class='del'>-              # Maybe, 'state' option has '-' in future.</div><div class='del'>-              val = tk_call(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            end</div><div class='del'>-            return [slot, val]</div><div class='del'>-</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'>-            optval = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</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'>-            return [slot, val]</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'>-            begin</div><div class='del'>-              val = number(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")))</div><div class='del'>-            rescue</div><div class='del'>-              val = nil</div><div class='del'>-            end</div><div class='del'>-            return [slot, val]</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            val = num_or_str(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")))</div><div class='del'>-            return [slot, val]</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            begin</div><div class='del'>-              val = bool(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")))</div><div class='del'>-            rescue</div><div class='del'>-              val = nil</div><div class='del'>-            end</div><div class='del'>-            return [slot, val]</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            val = simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")))</div><div class='del'>-            return [slot, val]</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            val = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            if val =~ /^[0-9]/</div><div class='del'>-              return [slot, list(val)]</div><div class='del'>-            else</div><div class='del'>-              return [slot, 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'>-            val = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            return [slot, val]</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            val = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            if val.empty?</div><div class='del'>-              return [slot, nil]</div><div class='del'>-            else</div><div class='del'>-              return [slot, TkVarAccess.new(val)]</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            val = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            if val.index('{')</div><div class='del'>-              return [slot, tk_split_list(val)]</div><div class='del'>-            else</div><div class='del'>-              return [slot, tk_tcl2ruby(val)]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        else # ! slot</div><div class='del'>-          ret = Hash[*(tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))), false, false))].to_a.collect{|conf|</div><div class='del'>-            conf[0] = conf[0][1..-1] if conf[0][0] == ?-</div><div class='del'>-            case conf[0]</div><div class='del'>-            when /^(#{__item_val2ruby_optkeys(tagid(tagOrId)).keys.join('|')})$/</div><div class='del'>-              method = _symbolkey2str(__item_val2ruby_optkeys(tagid(tagOrId)))[conf[0]]</div><div class='del'>-              optval = conf[1]</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[1] = val</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'>-              begin</div><div class='del'>-                conf[1] = number(conf[1])</div><div class='del'>-              rescue</div><div class='del'>-                conf[1] = 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'>-              conf[1] = num_or_str(conf[1])</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              begin</div><div class='del'>-                conf[1] = bool(conf[1])</div><div class='del'>-              rescue</div><div class='del'>-                conf[1] = 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'>-              conf[1] = simplelist(conf[1])</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if conf[1] =~ /^[0-9]/</div><div class='del'>-                conf[1] = list(conf[1])</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 conf[1].empty?</div><div class='del'>-                conf[1] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[1] = TkVarAccess.new(conf[1])</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            else</div><div class='del'>-              if conf[1].index('{')</div><div class='del'>-                conf[1] = tk_split_list(conf[1])</div><div class='del'>-              else</div><div class='del'>-                conf[1] = tk_tcl2ruby(conf[1])</div><div class='del'>-              end</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</div><div class='del'>-              ret.delete_if{|inf| inf[0] =~ /^(|latin|ascii|kanji)#{optkey}$/}</div><div class='del'>-              fontconf[1] = 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'>-        return {slot.to_s =&gt; tagfontobj(tagid(tagOrId), fontkey)}</div><div class='del'>-      else</div><div class='del'>-        if slot</div><div class='del'>-          slot = slot.to_s</div><div class='del'>-</div><div class='del'>-          alias_name, real_name = __item_optkey_aliases(tagid(tagOrId)).find{|k, v| k.to_s == slot}</div><div class='del'>-          if real_name</div><div class='del'>-            slot = real_name.to_s</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          case slot</div><div class='del'>-          when /^(#{__tile_specific_item_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            begin</div><div class='del'>-              # On tile-0.7.{2-8}, 'state' option has no '-' at its head.</div><div class='del'>-              val = tk_call(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; slot))</div><div class='del'>-            rescue</div><div class='del'>-              # Maybe, 'state' option has '-' in future.</div><div class='del'>-              val = tk_call(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            end</div><div class='del'>-            return {slot =&gt; val}</div><div class='del'>-</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'>-            optval = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</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'>-            return {slot =&gt; val}</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'>-            begin</div><div class='del'>-              val = number(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")))</div><div class='del'>-            rescue</div><div class='del'>-              val = nil</div><div class='del'>-            end</div><div class='del'>-            return {slot =&gt; val}</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numstrval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            val = num_or_str(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")))</div><div class='del'>-            return {slot =&gt; val}</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            begin</div><div class='del'>-              val = bool(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")))</div><div class='del'>-            rescue</div><div class='del'>-              val = nil</div><div class='del'>-            end</div><div class='del'>-            return {slot =&gt; val}</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_listval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            val = simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}")))</div><div class='del'>-            return {slot =&gt; val}</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            val = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            if val =~ /^[0-9]/</div><div class='del'>-              return {slot =&gt; list(val)}</div><div class='del'>-            else</div><div class='del'>-              return {slot =&gt; 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'>-            val = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            return {slot =&gt; val}</div><div class='del'>-</div><div class='del'>-          when /^(#{__item_tkvariable_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-            val = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            if val.empty?</div><div class='del'>-              return {slot =&gt; nil}</div><div class='del'>-            else</div><div class='del'>-              return {slot =&gt; TkVarAccess.new(val)}</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            val = tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)) &lt;&lt; "-#{slot}"))</div><div class='del'>-            if val.index('{')</div><div class='del'>-              return {slot =&gt; tk_split_list(val)}</div><div class='del'>-            else</div><div class='del'>-              return {slot =&gt; tk_tcl2ruby(val)}</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        else # ! slot</div><div class='del'>-          ret = {}</div><div class='del'>-          ret = Hash[*(tk_split_simplelist(tk_call_without_enc(*(__item_confinfo_cmd(tagid(tagOrId)))), false, false))].to_a.collect{|conf|</div><div class='del'>-            conf[0] = conf[0][1..-1] if conf[0][0] == ?-</div><div class='del'>-</div><div class='del'>-            optkey = conf[0]</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'>-              optval = conf[1]</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[1] = val</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'>-              begin</div><div class='del'>-                conf[1] = number(conf[1])</div><div class='del'>-              rescue</div><div class='del'>-                conf[1] = 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'>-              conf[1] = num_or_str(conf[1])</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_boolval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              begin</div><div class='del'>-                conf[1] = bool(conf[1])</div><div class='del'>-              rescue</div><div class='del'>-                conf[1] = 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'>-              conf[1] = simplelist(conf[1])</div><div class='del'>-</div><div class='del'>-            when /^(#{__item_numlistval_optkeys(tagid(tagOrId)).join('|')})$/</div><div class='del'>-              if conf[1] =~ /^[0-9]/</div><div class='del'>-                conf[1] = list(conf[1])</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 conf[1].empty?</div><div class='del'>-                conf[1] = nil</div><div class='del'>-              else</div><div class='del'>-                conf[1] = TkVarAccess.new(conf[1])</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-            else</div><div class='del'>-              if conf[1].index('{')</div><div class='del'>-                return [slot, tk_split_list(conf[1])]</div><div class='del'>-              else</div><div class='del'>-                return [slot, tk_tcl2ruby(conf[1])]</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            ret[conf[0]] = conf[1]</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[1] = 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'>-  ###################</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]) + ['minwidth']</div><div class='del'>-    when :tag, 'tag'</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'>-    else</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 :tag, 'tag'</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'>-    else</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]) + ['stretch']</div><div class='del'>-    when :tag, 'tag'</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'>-    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_val2ruby_optkeys(id)</div><div class='del'>-    case id[0]</div><div class='del'>-    when :item, 'item'</div><div class='del'>-      { </div><div class='del'>-        'tags'=&gt;proc{|arg_id, val|</div><div class='del'>-          simplelist(val).collect{|tag|</div><div class='del'>-            Tk::Tile::Treeview::Tag.id2obj(self, tag)</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-      }</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'>-    else</div><div class='del'>-      {}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :__item_val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def __tile_specific_item_optkeys(id)</div><div class='del'>-    case id[0]</div><div class='del'>-    when :item, 'item'</div><div class='del'>-      []</div><div class='del'>-    when :column, 'column'</div><div class='del'>-      []</div><div class='del'>-    when :heading, 'heading'</div><div class='del'>-      ['state']  # On tile-0.7.{2-8}, 'state' options has no '-' at its head.</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_val2ruby_optkeys</div><div class='del'>-</div><div class='del'>-  def itemconfiginfo(tagOrId, slot = nil)</div><div class='del'>-    __itemconfiginfo_core(tagOrId, slot)</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_core(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_core(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_core(tagOrId, 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'>-</div><div class='del'>-  alias __itemcget itemcget</div><div class='del'>-  alias __itemcget_strict itemcget_strict</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, :__itemcget_strict</div><div class='del'>-  private :__itemconfigure, :__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 itemcget_strict(tagOrId, option)</div><div class='del'>-    __itemcget_strict([: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 columncget_strict(tagOrId, option)</div><div class='del'>-    __itemcget_strict([: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_cget_strict columncget_strict</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_strict(tagOrId, option)</div><div class='del'>-    if __tile_specific_item_optkeys([:heading, tagOrId]).index(option.to_s)</div><div class='del'>-      begin</div><div class='del'>-        # On tile-0.7.{2-8}, 'state' options has no '-' at its head.</div><div class='del'>-        tk_call(*(__item_cget_cmd([:heading, tagOrId]) &lt;&lt; option.to_s))</div><div class='del'>-      rescue</div><div class='del'>-        # Maybe, 'state' option has '-' in future.</div><div class='del'>-        tk_call(*(__item_cget_cmd([:heading, tagOrId]) &lt;&lt; "-#{option}"))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      __itemcget_strict([:heading, tagOrId], option)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def headingcget(tagOrId, option)</div><div class='del'>-    unless TkItemConfigMethod.__IGNORE_UNKNOWN_CONFIGURE_OPTION__</div><div class='del'>-      headingcget_strict(tagOrId, option)</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        headingcget_strict(tagOrId, option)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        begin</div><div class='del'>-          if current_headingconfiginfo(tagOrId).has_key?(option.to_s)</div><div class='del'>-            # not tag error &amp; option is known -&gt; error on known option</div><div class='del'>-            fail e</div><div class='del'>-          else</div><div class='del'>-            # not tag error &amp; option is unknown</div><div class='del'>-            nil</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-          fail e  # tag 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'>-  def headingconfigure(tagOrId, slot, value=None)</div><div class='del'>-    if slot.kind_of?(Hash)</div><div class='del'>-      slot = _symbolkey2str(slot)</div><div class='del'>-      sp_kv = []</div><div class='del'>-      __tile_specific_item_optkeys([:heading, tagOrId]).each{|k|</div><div class='del'>-        sp_kv &lt;&lt; k &lt;&lt; _get_eval_string(slot.delete(k)) if slot.has_key?(k)</div><div class='del'>-      }</div><div class='del'>-      tk_call(*(__item_config_cmd([:heading, tagOrId]).concat(sp_kv)))</div><div class='del'>-      tk_call(*(__item_config_cmd([:heading, tagOrId]).concat(hash_kv(slot))))</div><div class='del'>-    elsif __tile_specific_item_optkeys([:heading, tagOrId]).index(slot.to_s)</div><div class='del'>-      begin</div><div class='del'>-        # On tile-0.7.{2-8}, 'state' options has no '-' at its head.</div><div class='del'>-        tk_call(*(__item_cget_cmd([:heading, tagOrId]) &lt;&lt; slot.to_s &lt;&lt; value))</div><div class='del'>-      rescue</div><div class='del'>-        # Maybe, 'state' option has '-' in future.</div><div class='del'>-        tk_call(*(__item_cget_cmd([:heading, tagOrId]) &lt;&lt; "-#{slot}" &lt;&lt; value))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      __itemconfigure([:heading, tagOrId], slot, value)</div><div class='del'>-    end</div><div class='del'>-    self</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_cget_strict headingcget_strict</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'>-</div><div class='del'>-  # Treeview Tag</div><div class='del'>-  def tagcget(tagOrId, option)</div><div class='del'>-    __itemcget([:tag, tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def tagcget_strict(tagOrId, option)</div><div class='del'>-    __itemcget_strict([:tag, tagOrId], option)</div><div class='del'>-  end</div><div class='del'>-  def tagconfigure(tagOrId, slot, value=None)</div><div class='del'>-    __itemconfigure([:tag, tagOrId], slot, value)</div><div class='del'>-  end</div><div class='del'>-  def tagconfiginfo(tagOrId, slot=nil)</div><div class='del'>-    __itemconfiginfo([:tag, tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  def current_tagconfiginfo(tagOrId, slot=nil)</div><div class='del'>-    __current_itemconfiginfo([:tag, tagOrId], slot)</div><div class='del'>-  end</div><div class='del'>-  alias tag_cget tagcget</div><div class='del'>-  alias tag_cget_strict tagcget_strict</div><div class='del'>-  alias tag_configure tagconfigure</div><div class='del'>-  alias tag_configinfo tagconfiginfo</div><div class='del'>-  alias current_tag_configinfo current_tagconfiginfo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-########################</div><div class='del'>-</div><div class='del'>-class Tk::Tile::Treeview::Item &lt; TkObject</div><div class='del'>-  ItemID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    Tk::Tile::Treeview::Item::ItemID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::Tile::Treeview::Item::ItemID_TBL.clear</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    Tk::Tile::Treeview::Item::ItemID_TBL.mutex.synchronize{</div><div class='del'>-      if Tk::Tile::Treeview::Item::ItemID_TBL[tpath]</div><div class='del'>-        (Tk::Tile::Treeview::Item::ItemID_TBL[tpath][id])? \</div><div class='del'>-             Tk::Tile::Treeview::Item::ItemID_TBL[tpath][id]: id</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'>-</div><div class='del'>-  def self.assign(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    obj = nil</div><div class='del'>-    Tk::Tile::Treeview::Item::ItemID_TBL.mutex.synchronize{</div><div class='del'>-      if Tk::Tile::Treeview::Item::ItemID_TBL[tpath] &amp;&amp;</div><div class='del'>-          Tk::Tile::Treeview::Item::ItemID_TBL[tpath][id]</div><div class='del'>-        return Tk::Tile::Treeview::Item::ItemID_TBL[tpath][id]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      obj = self.allocate</div><div class='del'>-      obj.instance_eval{</div><div class='del'>-        @parent = @t = tree</div><div class='del'>-        @tpath = tpath</div><div class='del'>-        @path = @id = id</div><div class='del'>-      }</div><div class='del'>-      Tk::Tile::Treeview::Item::ItemID_TBL[tpath] ||= {}</div><div class='del'>-      Tk::Tile::Treeview::Item::ItemID_TBL[tpath][id] = obj</div><div class='del'>-    }</div><div class='del'>-    obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _insert_item(tree, parent_item, 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'>-      num_or_str(tk_call(tree, 'insert', </div><div class='del'>-                         parent_item, idx, '-id', id, *hash_kv(keys)))</div><div class='del'>-    else</div><div class='del'>-      num_or_str(tk_call(tree, 'insert', parent_item, idx, *hash_kv(keys)))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_insert_item</div><div class='del'>-</div><div class='del'>-  def initialize(tree, parent_item = '', idx = 'end', keys = {})</div><div class='del'>-    if parent_item.kind_of?(Hash)</div><div class='del'>-      keys = parent_item</div><div class='del'>-      idx = 'end'</div><div class='del'>-      parent_item = ''</div><div class='del'>-    elsif idx.kind_of?(Hash)</div><div class='del'>-      keys = idx</div><div class='del'>-      idx = 'end'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @parent = @t = tree</div><div class='del'>-    @tpath = tree.path</div><div class='del'>-    @path = @id = _insert_item(@t, parent_item, idx, keys)</div><div class='del'>-    Tk::Tile::Treeview::Item::ItemID_TBL.mutex.synchronize{</div><div class='del'>-      ItemID_TBL[@tpath] = {} unless ItemID_TBL[@tpath]</div><div class='del'>-      ItemID_TBL[@tpath][@id] = self</div><div class='del'>-    }</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 cget(option)</div><div class='del'>-    @t.itemcget(@id, option)</div><div class='del'>-  end</div><div class='del'>-  def cget_strict(option)</div><div class='del'>-    @t.itemcget_strict(@id, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(key, value=None)</div><div class='del'>-    @t.itemconfigure(@id, key, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(key=nil)</div><div class='del'>-    @t.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'>-    @t.current_itemconfiginfo(@id, key)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def open?</div><div class='del'>-    cget('open')</div><div class='del'>-  end</div><div class='del'>-  def open</div><div class='del'>-    configure('open', true)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  def close</div><div class='del'>-    configure('open', false)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(column=None)</div><div class='del'>-    @t.bbox(@id, column)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def children</div><div class='del'>-    @t.children(@id)</div><div class='del'>-  end</div><div class='del'>-  def set_children(*items)</div><div class='del'>-    @t.set_children(@id, *items)</div><div class='del'>-    self</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'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def detach</div><div class='del'>-    @t.detach(@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'>-    @t.exist?(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def focus</div><div class='del'>-    @t.focus_item(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index</div><div class='del'>-    @t.index(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx='end', keys={})</div><div class='del'>-    @t.insert(@id, idx, keys)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def move(parent, idx)</div><div class='del'>-    @t.move(@id, 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'>-    @t.next_item(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parent_item</div><div class='del'>-    @t.parent_item(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prev_item</div><div class='del'>-    @t.prev_item(@id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see</div><div class='del'>-    @t.see(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_add</div><div class='del'>-    @t.selection_add(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_remove</div><div class='del'>-    @t.selection_remove(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set</div><div class='del'>-    @t.selection_set(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_toggle</div><div class='del'>-    @t.selection_toggle(@id)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_directory</div><div class='del'>-    @t.get_directory(@id)</div><div class='del'>-  end</div><div class='del'>-  alias get_dictionary get_directory</div><div class='del'>-</div><div class='del'>-  def get(col)</div><div class='del'>-    @t.get(@id, col)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set(col, value)</div><div class='del'>-    @t.set(@id, col, value)</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::Tile::Treeview::Root &lt; Tk::Tile::Treeview::Item</div><div class='del'>-  def self.new(tree, keys = {})</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    obj = nil</div><div class='del'>-    Tk::Tile::Treeview::Item::ItemID_TBL.mutex.synchronize{</div><div class='del'>-      if Tk::Tile::Treeview::Item::ItemID_TBL[tpath] &amp;&amp;</div><div class='del'>-          Tk::Tile::Treeview::Item::ItemID_TBL[tpath]['']</div><div class='del'>-        obj = Tk::Tile::Treeview::Item::ItemID_TBL[tpath]['']</div><div class='del'>-      else</div><div class='del'>-        #super(tree, keys)</div><div class='del'>-        (obj = self.allocate).instance_eval{</div><div class='del'>-          @parent = @t = tree</div><div class='del'>-          @tpath = tree.path</div><div class='del'>-          @path = @id = ''</div><div class='del'>-          Tk::Tile::Treeview::Item::ItemID_TBL[@tpath] ||= {}</div><div class='del'>-          Tk::Tile::Treeview::Item::ItemID_TBL[@tpath][@id] = self</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    obj.configure(keys) if keys &amp;&amp; ! keys.empty?</div><div class='del'>-    obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(tree, keys = {})</div><div class='del'>-    # dummy:: not called by 'new' method</div><div class='del'>-    @parent = @t = tree</div><div class='del'>-    @tpath = tree.path</div><div class='del'>-    @path = @id = ''</div><div class='del'>-    Tk::Tile::Treeview::Item::ItemID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::Tile::Treeview::Item::ItemID_TBL[@tpath] ||= {}</div><div class='del'>-      Tk::Tile::Treeview::Item::ItemID_TBL[@tpath][@id] = self</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 Tk::Tile::Treeview::Tag &lt; TkObject</div><div class='del'>-  include TkTreatTagFont</div><div class='del'>-</div><div class='del'>-  TagID_TBL = TkCore::INTERP.create_table</div><div class='del'>-</div><div class='del'>-  (Tag_ID = ['tile_treeview_tag'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    Tk::Tile::Treeview::Tag::TagID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::Tile::Treeview::Tag::TagID_TBL.clear</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    Tk::Tile::Treeview::Tag::TagID_TBL.mutex.synchronize{</div><div class='del'>-      if Tk::Tile::Treeview::Tag::TagID_TBL[tpath]</div><div class='del'>-        (Tk::Tile::Treeview::Tag::TagID_TBL[tpath][id])? \</div><div class='del'>-               Tk::Tile::Treeview::Tag::TagID_TBL[tpath][id]: id</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'>-</div><div class='del'>-  def initialize(tree, keys=nil)</div><div class='del'>-    @parent = @t = tree</div><div class='del'>-    @tpath = tree.path</div><div class='del'>-    Tag_ID.mutex.synchronize{</div><div class='del'>-      @path = @id = Tag_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Tag_ID[1].succ!</div><div class='del'>-    }</div><div class='del'>-    TagID_TBL.mutex.synchronize{</div><div class='del'>-      TagID_TBL[@tpath] = {} unless TagID_TBL[@tpath]</div><div class='del'>-      TagID_TBL[@tpath][@id] = self</div><div class='del'>-    }</div><div class='del'>-    if keys &amp;&amp; keys != None</div><div class='del'>-      tk_call_without_enc(@tpath, 'tag', 'configure', *hash_kv(keys, true))</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 bind(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'>-    @t.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, *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'>-    @t.tag_bind_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'>-    @t.tag_bind_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'>-    @t.tag_bindinfo(@id, seq)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cget(option)</div><div class='del'>-    @t.tagcget(@id, option)</div><div class='del'>-  end</div><div class='del'>-  def cget_strict(option)</div><div class='del'>-    @t.tagcget_strict(@id, option)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configure(key, value=None)</div><div class='del'>-    @t.tagconfigure(@id, key, value)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def configinfo(key=nil)</div><div class='del'>-    @t.tagconfiginfo(@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_tagconfiginfo(@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 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 __destroy_hook__</div><div class='del'>-    Tk::Tile::Treeview::Item::ItemID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::Tile::Treeview::Item::ItemID_TBL.delete(@path)</div><div class='del'>-    }</div><div class='del'>-    Tk::Tile::Treeview::Tag::ItemID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::Tile::Treeview::Tag::ItemID_TBL.delete(@path)</div><div class='del'>-    }</div><div class='del'>-  end</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?(Tk::Tile::Treeview::Item) || </div><div class='del'>-        id.kind_of?(Tk::Tile::Treeview::Tag)</div><div class='del'>-      id.id</div><div class='del'>-    elsif 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 root</div><div class='del'>-    Tk::Tile::Treeview::Root.new(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(item, column=None)</div><div class='del'>-    list(tk_send('item', 'bbox', item, column))</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)).collect{|id|</div><div class='del'>-      Tk::Tile::Treeview::Item.id2obj(self, id)</div><div class='del'>-    }</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 = nil)</div><div class='del'>-    if item</div><div class='del'>-      tk_send('focus', item)</div><div class='del'>-      item</div><div class='del'>-    else</div><div class='del'>-      id = tk_send('focus')</div><div class='del'>-      (id.empty?)? nil: Tk::Tile::Treeview::Item.id2obj(self, id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify(x, y)</div><div class='del'>-    # tile-0.7.2 or previous</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'</div><div class='del'>-      ret[-1] = num_or_str(ret[-1])</div><div class='del'>-    when 'cell'</div><div class='del'>-      ret[1] = Tk::Tile::Treeview::Item.id2obj(self, ret[1])</div><div class='del'>-      ret[-1] = num_or_str(ret[-1])</div><div class='del'>-    when 'item', 'row'</div><div class='del'>-      ret[1] = Tk::Tile::Treeview::Item.id2obj(self, ret[1])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def row_identify(x, y)</div><div class='del'>-    id = tk_send('identify', 'row', x, y)</div><div class='del'>-    (id.empty?)? nil: Tk::Tile::Treeview::Item.id2obj(self, id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def column_identify(x, y)</div><div class='del'>-    tk_send('identify', 'column', x, y)</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='end', 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'>-  #     num_or_str(tk_send('insert', parent, idx, '-id', id, *hash_kv(keys)))</div><div class='del'>-  #   else</div><div class='del'>-  #     num_or_str(tk_send('insert', parent, idx, *hash_kv(keys)))</div><div class='del'>-  #   end</div><div class='del'>-  # end</div><div class='del'>-  def insert(parent, idx='end', keys={})</div><div class='del'>-    Tk::Tile::Treeview::Item.new(self, parent, idx, keys)</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(item)</div><div class='del'>-    id = tk_send('next', item)</div><div class='del'>-    (id.empty?)? nil: Tk::Tile::Treeview::Item.id2obj(self, id)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parent_item(item)</div><div class='del'>-    if (id = tk_send('parent', item)).empty?</div><div class='del'>-      Tk::Tile::Treeview::Root.new(self)</div><div class='del'>-    else</div><div class='del'>-      Tk::Tile::Treeview::Item.id2obj(self, id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prev_item(item)</div><div class='del'>-    id = tk_send('prev', item)</div><div class='del'>-    (id.empty?)? nil: Tk::Tile::Treeview::Item.id2obj(self, id)</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')).collect{|id|</div><div class='del'>-      Tk::Tile::Treeview::Item.id2obj(self, id)</div><div class='del'>-    }</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'>-  alias get_dictionary get_directory</div><div class='del'>-</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'>-</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, 'tag', 'bind', tag], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias tagbind tag_bind</div><div class='del'>-</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, 'tag', 'bind', tag], seq, cmd, *args)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias tagbind_append tag_bind_append</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'>-  alias tagbind_remove tag_bind_remove</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'>-  alias tagbindinfo tag_bindinfo</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 2c46fd9bd4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tscale.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tscale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +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; Tk::Scale</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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Scale, :TkScale)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TScale &lt; Tk::Scale</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 163b8f4713..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tscrollbar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tscrollbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,54 +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; Tk::Scrollbar</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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Scrollbar, :TkScrollbar)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Tk::Tile::TScrollbar &lt; Tk::Scrollbar</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='del'>-</div><div class='del'>-class Tk::Tile::XScrollbar &lt; Tk::Tile::TScrollbar</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 Tk::Tile::YScrollbar &lt; Tk::Tile::TScrollbar</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='del'>-</div><div class='del'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::XScrollbar, :TkXScrollbar)</div><div class='del'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::YScrollbar, :TkYScrollbar)</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 30fae2c525..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tile/tseparator.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tile/tseparator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +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'>-Tk.__set_toplevel_aliases__(:Ttk, Tk::Tile::Separator, :TkSeparator)</div><div class='del'>-</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 d44068ed33..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkDND/shape.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tkDND/shape.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,125 +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'>-      class &lt;&lt; self</div><div class='del'>-        def 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 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 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'>-      end</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 9a9b2dc42c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkDND/tkdnd.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tkDND/tkdnd.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,182 +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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 d893a83cf2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,453 +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'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    HtmlClip_TBL.mutex.synchronize{ HtmlClip_TBL.clear }</div><div class='del'>-  }</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'>-    HtmlClip_TBL.mutex.synchronize{</div><div class='del'>-      return HtmlClip_TBL[ppath] if HtmlClip_TBL[ppath]</div><div class='del'>-    }</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'>-      HtmlClip_TBL.mutex.synchronize{</div><div class='del'>-        return HtmlClip_TBL[ppath2] if HtmlClip_TBL[ppath2]</div><div class='del'>-      }</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.mutex.synchronize{</div><div class='del'>-      HtmlClip_TBL[@ppath] = self</div><div class='del'>-    }</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 f6cf24b40f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tktable/tktable.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/tktable/tktable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,957 +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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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, :itemcget_strict</div><div class='del'>-  private :itemconfigure, :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'>-</div><div class='del'>-  (CellTag_ID = ['tktbl:celltag'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    CellTagID_TBL.mutex.synchronize{ CellTagID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(table, id)</div><div class='del'>-    tpath = table.path</div><div class='del'>-    CellTagID_TBL.mutex.synchronize{</div><div class='del'>-      if CellTagID_TBL[tpath]</div><div class='del'>-        CellTagID_TBL[tpath][id]? CellTagID_TBL[tpath][id] : id</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'>-</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'>-    CellTag_ID.mutex.synchronize{</div><div class='del'>-      @path = @id = CellTag_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      CellTag_ID[1].succ!</div><div class='del'>-    }</div><div class='del'>-    CellTagID_TBL.mutex.synchronize{</div><div class='del'>-      CellTagID_TBL[@tpath] = {} unless CellTagID_TBL[@tpath]</div><div class='del'>-      CellTagID_TBL[@tpath][@id] = self</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 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.mutex.synchronize{</div><div class='del'>-      CellTagID_TBL[@tpath].delete(@id) if CellTagID_TBL[@tpath]</div><div class='del'>-    }</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 cget_strict(key)</div><div class='del'>-    @t.tag_cget_strict(@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'>-    obj = nil</div><div class='del'>-    CellTagID_TBL.mutex.synchronize{</div><div class='del'>-      if CellTagID_TBL[parent.path] &amp;&amp; CellTagID_TBL[parent.path][name]</div><div class='del'>-        obj = CellTagID_TBL[parent.path][name]</div><div class='del'>-      else</div><div class='del'>-        #super(parent, name, keys)</div><div class='del'>-        (obj = self.allocate).instance_eval{</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'>-        }</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    obj.configure(keys) if keys &amp;&amp; ! keys.empty?</div><div class='del'>-    obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent, name, keys=nil)</div><div class='del'>-    # dummy:: not called by 'new' method</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.mutex.synchronize{</div><div class='del'>-      CellTagID_TBL[@tpath] = {} unless CellTagID_TBL[@tpath]</div><div class='del'>-      CellTagID_TBL[@tpath][@id] = self</div><div class='del'>-    }</div><div class='del'>-    configure(keys) if keys &amp;&amp; ! keys.empty?</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.mutex.synchronize{</div><div class='del'>-      Tk::TkTable::CelTag::CellTagID_TBL.delete(@path)</div><div class='del'>-    }</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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-    Tk::TkTable::CellTag::CellTagID_TBL.mutex.synchronize{</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'>-    }</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'>-    Tk::TkTable::CellTag::CellTagID_TBL.mutex.synchronize{</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'>-    }</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 e051c09211..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/tktrans/tktrans.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 Tk::Root</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 Tk::Toplevel</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 e10e6e299e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/treectrl/tktreectrl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/treectrl/tktreectrl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2461 +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'>-=begin</div><div class='del'>-  # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-  KEY_TBL.map!{|inf|</div><div class='del'>-    if inf.kind_of?(Array)</div><div class='del'>-      inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-      inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-    end</div><div class='del'>-    inf</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  PROC_TBL.map!{|inf|</div><div class='del'>-    if inf.kind_of?(Array)</div><div class='del'>-      inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-    end</div><div class='del'>-    inf</div><div class='del'>-  }</div><div class='del'>-=end</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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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_dragcget_strict(option)</div><div class='del'>-    itemcget_strict(['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_cget_strict(option)</div><div class='del'>-    itemcget_strict('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_cget_strict(option)</div><div class='del'>-    itemcget_strict('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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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_cget_strict(item, column, elem, option)</div><div class='del'>-    itemcget_strict([['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_cget_strict(option)</div><div class='del'>-    itemcget_strict('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'>-    # "notify" doesn't have cget subcommand.</div><div class='del'>-    current_itemconfiginfo(['notify', [win, pattern]])[option.to_s]</div><div class='del'>-  end</div><div class='del'>-  def notify_cget_strict(win, pattern, option)</div><div class='del'>-    pattern = "&lt;#{pattern}&gt;"</div><div class='del'>-    # "notify" doesn't have cget subcommand.</div><div class='del'>-    info = current_itemconfiginfo(['notify', [win, pattern]])</div><div class='del'>-    option = option.to_s</div><div class='del'>-    unless info.has_key?(option)</div><div class='del'>-      fail RuntimeError, "unknown option \"#{option}\""</div><div class='del'>-    else</div><div class='del'>-      info[option]</div><div class='del'>-    end</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'>-  def current_notify_configinfo(tagOrId, slot=nil)</div><div class='del'>-    pattern = "&lt;#{pattern}&gt;"</div><div class='del'>-    current_itemconfiginfo(['notify', [win, pattern]], slot)</div><div class='del'>-  end</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_cget_strict(tagOrId, option)</div><div class='del'>-    itemcget_strict(['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, :itemcget_strict</div><div class='del'>-  private :itemconfigure, :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.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL.delete(@path)</div><div class='del'>-    }</div><div class='del'>-    Tk::TreeCtrl::Element::TreeCtrlElementID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Element::TreeCtrlElementID_TBL.delete(@path)</div><div class='del'>-    }</div><div class='del'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.delete(@path)</div><div class='del'>-    }</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.delete(@path)</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 __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'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL.mutex.synchronize{</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'>-    }</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'>-    Tk::TreeCtrl::Element::TreeCtrlElementID_TBL.mutex.synchronize{</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'>-    }</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'>-    # table is already locked</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'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.mutex.synchronize{</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'>-    }</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'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.mutex.synchronize{</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'>-    }</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'>-</div><div class='del'>-  (TreeCtrlColumnID = ['treectrl_column'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL.clear</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL.mutex.synchronize{</div><div class='del'>-      if 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'>-      else</div><div class='del'>-        id</div><div class='del'>-      end</div><div class='del'>-    }</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'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID.mutex.synchronize{</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'>-      Tk::TreeCtrl::Column::TreeCtrlColumnID[1].succ!</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    keys['tag'] = @id</div><div class='del'>-</div><div class='del'>-    Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[@tpath] ||= {} </div><div class='del'>-      Tk::TreeCtrl::Column::TreeCtrlColumnID_TBL[@tpath][@id] = self</div><div class='del'>-    }</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'>-  def cget_strict(opt)</div><div class='del'>-    @tree.column_cget_strict(@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'>-</div><div class='del'>-  (TreeCtrlElementID = ['treectrl_element'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</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.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Element::TreeCtrlElementID_TBL.clear</div><div class='del'>-    }</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'>-    Tk::TreeCtrl::Element::TreeCtrlElementID_TBL.mutex.synchronize{</div><div class='del'>-      if 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'>-      else</div><div class='del'>-        id</div><div class='del'>-      end</div><div class='del'>-    }</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'>-    Tk::TreeCtrl::Element::TreeCtrlElementID.mutex.synchronize{</div><div class='del'>-      @path = @id = </div><div class='del'>-        Tk::TreeCtrl::Element::TreeCtrlElementID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Tk::TreeCtrl::Element::TreeCtrlElementID[1].succ!</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tk::TreeCtrl::Element::TreeCtrlElementID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[@tpath] ||= {} </div><div class='del'>-      Tk::TreeCtrl::Element::TreeCtrlElementID_TBL[@tpath][@id] = self</div><div class='del'>-    }</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'>-  def cget_strict(opt)</div><div class='del'>-    @tree.element_cget_strict(@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{</div><div class='del'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.clear</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.mutex.synchronize{</div><div class='del'>-      if 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'>-      else</div><div class='del'>-        id</div><div class='del'>-      end</div><div class='del'>-    }</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'>-    Tk::TreeCtrl::Item::TreeCtrlItemID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[@tpath] ||= {} </div><div class='del'>-      Tk::TreeCtrl::Item::TreeCtrlItemID_TBL[@tpath][@id] = self</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 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'>-  def cget_strict(opt)</div><div class='del'>-    @tree.item_cget_strict(@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'>-  def element_cget_strict(opt)</div><div class='del'>-    @tree.item_element_cget_strict(@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'>-</div><div class='del'>-  (TreeCtrlStyleID = ['treectrl_style'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.clear</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(tree, id)</div><div class='del'>-    tpath = tree.path</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.mutex.synchronize{</div><div class='del'>-      if 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'>-      else</div><div class='del'>-        id</div><div class='del'>-      end</div><div class='del'>-    }</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'>-</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID.mutex.synchronize{</div><div class='del'>-      @path = @id = </div><div class='del'>-        Tk::TreeCtrl::Style::TreeCtrlStyleID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Tk::TreeCtrl::Style::TreeCtrlStyleID[1].succ!</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL.mutex.synchronize{</div><div class='del'>-      Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[@tpath] ||= {} </div><div class='del'>-      Tk::TreeCtrl::Style::TreeCtrlStyleID_TBL[@tpath][@id] = self</div><div class='del'>-    }</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'>-  def cget_strict(opt)</div><div class='del'>-    @tree.style_cget_strict(@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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/version.rb b/ext/tk/lib/tkextlib/version.rb<br/>deleted file mode 100644<br/>index 434ed11a2e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/version.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/version.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# release date of tkextlib</div><div class='del'>-#</div><div class='del'>-module Tk</div><div class='del'>-  Tkextlib_RELEASE_DATE = '2008-05-23'.freeze</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 c1fb6857bf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu/pie.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/vu/pie.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,282 +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'>-</div><div class='del'>-  (Pie_Slice_ID = ['vu:pie'.freeze, '00000'.taint]).instance_eval{</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    def mutex; @mutex; end</div><div class='del'>-    freeze</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    SliceID_TBL.mutex.synchronize{ SliceID_TBL.clear }</div><div class='del'>-  }</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'>-    SliceID_TBL.mutex.synchronize{</div><div class='del'>-      if SliceID_TBL[pie_path]</div><div class='del'>-        SliceID_TBL[pie_path][id]? SliceID_TBL[pie_path][id]: id</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'>-</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'>-    Pie_Slice_ID.mutex.synchronize{</div><div class='del'>-      @path = @id = Pie_Slice_ID.join(TkCore::INTERP._ip_id_)</div><div class='del'>-      Pie_Slice_ID[1].succ!</div><div class='del'>-    }</div><div class='del'>-    SliceID_TBL.mutex.synchronize{</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'>-</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 cget_strict(slot)</div><div class='del'>-    @pie.itemcget_strict(@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'>-    obj = nil</div><div class='del'>-    SliceID_TBL.mutex.synchronize{</div><div class='del'>-      if SliceID_TBL[parent.path] &amp;&amp; SliceID_TBL[parent.path][name]</div><div class='del'>-        obj = SliceID_TBL[parent.path][name]</div><div class='del'>-      else</div><div class='del'>-        #super(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'>-        obj = self.allocate</div><div class='del'>-        obj.instance_eval{</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'>-      end</div><div class='del'>-    }</div><div class='del'>-    obj.instance_eval{</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'>-    }</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, name, *args)</div><div class='del'>-    # dummy:: not called by 'new' method</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.mutex.synchronize{</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'>-</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 a7e40ea319..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/vu/spinbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 = Tk::Spinbox</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 00316fd441..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkextlib/winico/winico.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkextlib/winico/winico.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,224 +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'>-</div><div class='del'>-  TkCore::INTERP.init_ip_env{</div><div class='del'>-    WinicoID_TBL.mutex.synchronize{ WinicoID_TBL.clear }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def self.id2obj(id)</div><div class='del'>-    WinicoID_TBL.mutex.synchronize{</div><div class='del'>-      (WinicoID_TBL.key?(id))? WinicoID_TBL[id] : id</div><div class='del'>-    }</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.mutex.synchronize{</div><div class='del'>-      WinicoID_TBL[@id] = self</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 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.mutex.synchronize{</div><div class='del'>-      WinicoID_TBL.delete(@id)</div><div class='del'>-    }</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'>-            Tk::Winico::WinicoID_TBL.mutex.synchronize{</div><div class='del'>-              if Tk::Winico::WinicoID_TBL.key?(id)</div><div class='del'>-                obj = Tk::Winico::WinicoID_TBL[id]</div><div class='del'>-              else</div><div class='del'>-                # Tk::Winico.new(nil, nil, id)</div><div class='del'>-                obj = Tk::Winico.allocate</div><div class='del'>-                obj.instance_eval{ @path = @id = id }</div><div class='del'>-                Tk::Winico::WinicoID_TBL[id] = obj</div><div class='del'>-              end</div><div class='del'>-              obj</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'>-=begin</div><div class='del'>-      # for Ruby m17n :: ?x --&gt; String --&gt; char-code ( getbyte(0) )</div><div class='del'>-      KEY_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-          inf[1] = inf[1].getbyte(0) if inf[1].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      PROC_TBL.map!{|inf|</div><div class='del'>-        if inf.kind_of?(Array)</div><div class='del'>-          inf[0] = inf[0].getbyte(0) if inf[0].kind_of?(String)</div><div class='del'>-        end</div><div class='del'>-        inf</div><div class='del'>-      }</div><div class='del'>-=end</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'>-        keys[k] = Winico_callback.new(cmd, *args)</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'>-        keys[k] = Winico_callback.new(cmd, *args)</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/>deleted file mode 100644<br/>index 38a96633de..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkfont.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkfont.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkfont.rb - load tk/font.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/font'</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/>deleted file mode 100644<br/>index 70214fda1a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkmenubar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkmenubar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkmenubar.rb - load tk/menubar.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/menubar'</div><div class='head'>diff --git a/ext/tk/lib/tkmngfocus.rb b/ext/tk/lib/tkmngfocus.rb<br/>deleted file mode 100644<br/>index fe70950e8e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkmngfocus.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkmngfocus.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkmngfocus.rb - load tk/mngfocus.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/mngfocus'</div><div class='head'>diff --git a/ext/tk/lib/tkpalette.rb b/ext/tk/lib/tkpalette.rb<br/>deleted file mode 100644<br/>index 56b203bbb9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkpalette.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkpalette.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkpalette.rb - load tk/palette.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/palette'</div><div class='head'>diff --git a/ext/tk/lib/tkscrollbox.rb b/ext/tk/lib/tkscrollbox.rb<br/>deleted file mode 100644<br/>index 6093b2e4e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkscrollbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkscrollbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkscrollbox.rb - load tk/scrollbox.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/scrollbox'</div><div class='head'>diff --git a/ext/tk/lib/tktext.rb b/ext/tk/lib/tktext.rb<br/>deleted file mode 100644<br/>index 97ad62a3ea..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tktext.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tktext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tktext.rb - load tk/text.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/text'</div><div class='head'>diff --git a/ext/tk/lib/tkvirtevent.rb b/ext/tk/lib/tkvirtevent.rb<br/>deleted file mode 100644<br/>index f4fae19a0a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/lib/tkvirtevent.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/lib/tkvirtevent.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   tkvirtevent.rb - load tk/virtevent.rb</div><div class='del'>-#</div><div class='del'>-require 'tk/virtevent'</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/old-README.tcltklib.eucj b/ext/tk/old-README.tcltklib.eucj<br/>deleted file mode 100644<br/>index fd75202c18..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/old-README.tcltklib.eucj?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/old-README.tcltklib.eucj</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,159 +0,0 @@</div><div class='del'>-(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='del'>-	tcltk ¥é¥¤¥Ö¥é¥ê</div><div class='del'>-	tcltklib ¥é¥¤¥Ö¥é¥ê</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'>-[¥Õ¥¡¥¤¥ë¤Ë¤Ä¤¤¤Æ]</div><div class='del'>-</div><div class='del'>-README.euc : ¤³¤Î¥Õ¥¡¥¤¥ë(Ãí°Õ, ÆÃÄ§, ¥¤¥ó¥¹¥È¡¼¥ë¤ÎÊýË¡).</div><div class='del'>-MANUAL.euc : ¥Þ¥Ë¥å¥¢¥ë.</div><div class='del'>-</div><div class='del'>-lib/, ext/ : ¥é¥¤¥Ö¥é¥ê¤Î¼ÂÂÎ.</div><div class='del'>-</div><div class='del'>-sample/ : ¥Þ¥Ë¥å¥¢¥ëÂå¤ï¤ê¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à.</div><div class='del'>-sample/sample0.rb : tcltklib ¥é¥¤¥Ö¥é¥ê¤Î¥Æ¥¹¥È.</div><div class='del'>-sample/sample1.rb : tcltk ¥é¥¤¥Ö¥é¥ê¤Î¥Æ¥¹¥È.</div><div class='del'>-    tcl/tk (wish) ¤Ç¤Ç¤­¤½¤¦¤Ê¤³¤È¤ò°ìÄÌ¤ê½ñ¤¤¤Æ¤ß¤Þ¤·¤¿.</div><div class='del'>-sample/sample2.rb : tcltk ¥é¥¤¥Ö¥é¥ê¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-    maeda shugo (shugo@po.aianet.ne.jp) »á¤Ë¤è¤ë</div><div class='del'>-    (`rb.tk' ¤Ç½ñ¤«¤ì¤Æ¤¤¤¿) ruby ¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à</div><div class='del'>-	http://www.aianet.or.jp/~shugo/ruby/othello.rb.gz</div><div class='del'>-    ¤ò tcltk ¥é¥¤¥Ö¥é¥ê¤ò»È¤¦¤è¤¦¤Ë, µ¡³£Åª¤ËÊÑ¹¹¤·¤Æ¤ß¤Þ¤·¤¿.</div><div class='del'>-</div><div class='del'>-demo/ : 100 ËÜ¤ÎÀþ¤ò 100 ²óÉÁ¤¯¥Ç¥â¥×¥í¥°¥é¥à.</div><div class='del'>-    ºÇ½é¤Ë¶õ¥ë¡¼¥×¤Î»þ´Ö¤òÂ¬Äê¤·, Â³¤¤¤Æ¼ÂºÝ¤ËÀþ¤ò°ú¤¯»þ´Ö¤òÂ¬Äê¤·¤Þ¤¹.</div><div class='del'>-    tcl/tk ¤Ï(ºÆ)ÉÁ²è¤Î¤È¤­¤Ë backing store ¤ò»È¤ï¤º¤ËÎ§µÁ¤Ë 10000 ËÜ(?)</div><div class='del'>-    Àþ¤ò°ú¤¯¤Î¤Ç, (ºÆ)ÉÁ²è¤ò»Ï¤á¤ë¤È, ¥Þ¥·¥ó¤¬¤«¤Ê¤ê½Å¤¯¤Ê¤ê¤Þ¤¹.</div><div class='del'>-demo/lines0.tcl : wish ÍÑ¤Î¥¹¥¯¥ê¥×¥È.</div><div class='del'>-demo/lines1.rb : `tk.rb' ÍÑ¤Î¥¹¥¯¥ê¥×¥È.</div><div class='del'>-demo/lines2.rb : tcltk ¥é¥¤¥Ö¥é¥êÍÑ¤Î¥¹¥¯¥ê¥×¥È.</div><div class='del'>-</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-1.0-970701, ruby-1.0-970911, ruby-1.0-970919</div><div class='del'>-	FreeBSD 2.2.2-RELEASE</div><div class='del'>-	¤ª¤è¤Ó¤½¤Î¥Ñ¥Ã¥±¡¼¥¸ jp-tcl-7.6.tgz, jp-tk-4.2.tgz</div><div class='del'>-</div><div class='del'>-¤ÇºîÀ®/Æ°ºî³ÎÇ§¤·¤Þ¤·¤¿. Â¾¤Î´Ä¶­¤Ç¤ÏÆ°ºî¤¹¤ë¤«¤É¤¦¤«¤ï¤«¤ê¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-TclTkLib.mainloop ¤ò¼Â¹ÔÃæ¤Ë Control-C ¤¬¸ú¤«¤Ê¤¤¤Î¤ÏÉÔÊØ¤Ê¤Î¤Ç, ruby </div><div class='del'>-¤Î¥½¡¼¥¹¤ò»²¹Í¤Ë, #include "sig.h" ¤·¤Æ trap_immediate ¤òÁàºî¤·¤Æ¤¤¤Þ</div><div class='del'>-¤¹¤¬, ruby ¤Î README.EXT ¤Ë¤â½ñ¤¤¤Æ¤Ê¤¤¤Î¤Ë, ¤³¤ó¤Ê¤³¤È¤ò¤·¤ÆÎÉ¤¤¤Î¤«</div><div class='del'>-¤É¤¦¤«¤ï¤«¤ê¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>--d ¥ª¥×¥·¥ç¥ó¤Ç¥Ç¥Ð¥Ã¥°¾ðÊó¤òÉ½¼¨¤µ¤»¤ë¤¿¤á¤Ë, ruby ¤Î¥½¡¼¥¹¤ò»²¹Í¤Ë,</div><div class='del'>-debug ¤È¤¤¤¦Âç°èÊÑ¿ô¤ò»²¾È¤·¤Æ¤¤¤Þ¤¹¤¬, ruby ¤Î README.EXT ¤Ë¤â½ñ¤¤¤Æ</div><div class='del'>-¤Ê¤¤¤Î¤Ë, ¤³¤ó¤Ê¤³¤È¤ò¤·¤ÆÎÉ¤¤¤Î¤«¤É¤¦¤«¤ï¤«¤ê¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-extconf.rb ¤Ï½ñ¤­¤Þ¤·¤¿¤¬, (¤¤¤í¤¤¤í¤Ê°ÕÌ£¤Ç)¤³¤ì¤ÇÎÉ¤¤¤Î¤«ÎÉ¤¯Ê¬¤«¤ê</div><div class='del'>-¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-[ÆÃÄ§]</div><div class='del'>-</div><div class='del'>-ruby ¤«¤é tcl/tk ¥é¥¤¥Ö¥é¥ê¤òÍøÍÑ¤Ç¤­¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤Î¥¹¥¯¥ê¥×¥È¤Ï, µ¡³£Åª¤Ë tcltk ¥é¥¤¥Ö¥é¥êÍÑ¤Î ruby </div><div class='del'>-¥¹¥¯¥ê¥×¥È¤ËÊÑ´¹¤Ç¤­¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-(`tk.rb' ¤È¤Î°ã¤¤)</div><div class='del'>-</div><div class='del'>-1. tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤Î¥¹¥¯¥ê¥×¥È¤¬, ¤É¤Î¤è¤¦¤Ë, tcltk ¥é¥¤¥Ö¥é¥êÍÑ¤Î </div><div class='del'>-   ruby ¥¹¥¯¥ê¥×¥È¤ËÊÑ´¹¤µ¤ì¤ë¤«¤¬Íý²ò¤Ç¤­¤ì¤Ð, ¥Þ¥Ë¥å¥¢¥ëÎà¤¬Ìµ¤¤¤ËÅù</div><div class='del'>-   ¤·¤¤ `tk.rb' ¤È¤Ï°Û¤Ê¤ê</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'>-     - Canvas.new { ... } ¤È, ¤Ê¤¼¥¤¥Æ¥ì¡¼¥¿¥Ö¥í¥Ã¥¯¤ò½ñ¤±¤ë¤Î??</div><div class='del'>-     - Canvas ¤Î bbox ¤Ï¿ôÃÍ¤Î¥ê¥¹¥È¤òÊÖ¤¹¤Î¤Ë, xview ¤ÏÊ¸»úÎó¤òÊÖ¤¹¤Î??</div><div class='del'>-   ¤È, ¤¤¤Á¤¤¤Á, ¥é¥¤¥Ö¥é¥ê¤Î¥½¡¼¥¹¤òÄÉ¤¤¤«¤±¤ëÉ¬Í×¤Ï¤¢¤ê¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-2. ¸Ä¡¹¤Îµ¡Ç½(¥ª¥×¥·¥ç¥ó)¤ò¸ÄÊÌ½èÍý¤Ë¤è¤ê¥µ¥Ý¡¼¥È¤·¤Æ¤ª¤ê, ¤½¤Î¤¿¤á¥µ</div><div class='del'>-   ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤µ¡Ç½¤Ï»È¤¦¤³¤È¤¬¤Ç¤­¤Ê¤¤(ËÜÅö¤Ï»È¤¨¤Ê¤¤¤³¤È¤â¤Ê¤¤¤Î</div><div class='del'>-   ¤Ç¤¹¤¬) `tk.rb' ¤È¤Ï°Û¤Ê¤ê, tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤Ç²ÄÇ½¤Ê¤³¤È¤Ï</div><div class='del'>-</div><div class='del'>-	¤Û¤È¤ó¤É</div><div class='del'>-</div><div class='del'>-   ruby ¤«¤é¤â¼Â¹Ô¤Ç¤­¤Þ¤¹. ¸½ºß, ruby ¤«¤é¼Â¹Ô¤Ç¤­¤Ê¤¤¤³¤È¤¬³ÎÇ§¤µ¤ì</div><div class='del'>-   ¤Æ¤¤¤ë¤Î¤Ï,</div><div class='del'>-</div><div class='del'>-	bind ¥³¥Þ¥ó¥É¤Ç¥¹¥¯¥ê¥×¥È¤òÄÉ²Ã¤¹¤ë¹½Ê¸</div><div class='del'>-	¡Öbind tag sequence +script¡×</div><div class='del'>-                            ^</div><div class='del'>-</div><div class='del'>-   ¤Î¤ß¤Ç¤¹.</div><div class='del'>-     - `. configure -width' ¤ò¤·¤è¤¦¤È¤·¤Æ, `Tk.root.height()' ¤È½ñ¤¤</div><div class='del'>-      ¤¿¤Î¤Ë, `undefined method `height'' ¤ÈÅÜ¤é¤ì¤Æ¤·¤Þ¤Ã¤¿. tk.rb ¤ò</div><div class='del'>-      ÆÉ¤ó¤Ç¤ß¤Æ, ¥¬¡¼¥ó. ¤Ç¤­¤Ê¤¤¤Î¤«...</div><div class='del'>-   ¤È¤¤¤¦¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó.</div><div class='del'>-</div><div class='del'>-3. wish ¥×¥í¥»¥¹¤òµ¯Æ°¤·¥×¥í¥»¥¹´ÖÄÌ¿®¤Ç wish ¤òÍøÍÑ¤¹¤ë `tk.rb' ¤È¤Ï</div><div class='del'>-   °Û¤Ê¤ê, tcl/tk ¤Î C ¥é¥¤¥Ö¥é¥ê¤ò¥ê¥ó¥¯¤·</div><div class='del'>-</div><div class='del'>-	¤è¤ê¹âÂ®¤Ë (¤È¤¤¤Ã¤Æ¤â, »×¤Ã¤¿Äø¤ÏÂ®¤¯¤Ê¤¤¤Ç¤¹¤¬)</div><div class='del'>-</div><div class='del'>-   ½èÍý¤ò¹Ô¤¤¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-4. `tk.rb' ¤Û¤É, ¹â¿å½à¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÈ÷¤¨¤Æ¤¤¤Ê¤¤¤¿¤á, tcl/tk ¥¤</div><div class='del'>-   ¥ó¥¿¥×¥ê¥¿¤ÎÀ¸À®Åù</div><div class='del'>-</div><div class='del'>-	²¿¤«¤é²¿¤Þ¤Ç¼«Ê¬¤Çµ­½Ò</div><div class='del'>-</div><div class='del'>-   ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó(¤½¤ÎÂå¤ï¤ê, tcl/tk ¥é¥¤¥Ö¥é¥ê¤Î»ÅÍÍÄÌ¤ê,</div><div class='del'>-   tcl/tk ¥¤¥ó¥¿¥×¥ê¥¿¤òÊ£¿ôÀ¸À®¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤¬).</div><div class='del'>-   ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï(¤ª¤½¤é¤¯) ruby ¤Î»×ÁÛ¤Ë±è¤Ã¤¿¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó. </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'>-[¥¤¥ó¥¹¥È¡¼¥ë¤ÎÊýË¡]</div><div class='del'>-</div><div class='del'>-0. ruby ¤Î¥½¡¼¥¹¥Õ¥¡¥¤¥ë(ruby-1.0-¤Ê¤ó¤¿¤é.tgz)¤òÅ¸³«¤·¤Æ¤ª¤­¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-1. ruby-1.0-¤Ê¤ó¤¿¤é/ext ¤Ë ext/tcltklib ¤ò¥³¥Ô¡¼¤·¤Þ¤¹.</div><div class='del'>-	cp -r ext/tcltklib ???/ruby-1.0-¤Ê¤ó¤¿¤é/ext/</div><div class='del'>-</div><div class='del'>-2. ruby ¤Î¥¤¥ó¥¹¥È¡¼¥ëË¡¤Ë½¾¤¤ make Åù¤ò¤·¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-3. ruby ¤Î¥é¥¤¥Ö¥é¥êÃÖ¾ì¤Ë lib/* ¤ò¥³¥Ô¡¼¤·¤Þ¤¹.</div><div class='del'>-	cp lib/* /usr/local/lib/ruby/</div><div class='del'>-</div><div class='del'>-(eof)</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 be8399ba51..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/binstr_usage.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/binstr_usage.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,45 +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=[File.dirname(__FILE__), '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(:palette=&gt;256)</div><div class='del'>-ph3.put(ph2.data)</div><div class='del'>-</div><div class='del'>-ph4 = TkPhotoImage.new()</div><div class='del'>-ph4.put(ph2.data(:grayscale=&gt;true))</div><div class='del'>-</div><div class='del'>-#p [b_str.encoding, b_str.rb_encoding]</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'>-TkButton.new(:parent=&gt;f, :image=&gt;ph4, :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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 0b9bc7357e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/anilabel.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/anilabel.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,174 +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'>-base_frame = TkFrame.new($anilabel_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame,  :text=&gt;'Scrolling Texts')</div><div class='del'>-f_right = TkLabelFrame.new(base_frame, :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 63a04a7b98..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/aniwave.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/aniwave.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,118 +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'>-base_frame = TkFrame.new($aniwave_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# create label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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'>-    n = 305</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(base_frame, :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 055cd2af3c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/arrow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/arrow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,249 +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'>-  if $tk_version =~ /^4.*/</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'>-  else</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 18')</div><div class='del'>-    TkcText.new(c, v.x1, 330, </div><div class='del'>-                'text'=&gt;"'arrowshape'=&gt;[#{v.a}, #{v.b}, #{v.c}]",</div><div class='del'>-                'anchor'=&gt;'w', 'font'=&gt;'Helvetica 18')</div><div class='del'>-  end</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'>-base_frame = TkFrame.new($arrow_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, '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(base_frame) {|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(base_frame, '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 665592a2bc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/bind.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/bind.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,127 +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'>-base_frame = TkFrame.new($bind_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|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'>-txt = TkText.new(base_frame){|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(base_frame) {|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_samplecode(`cat #{[$demo_dir,'items.rb'].join(File::Separator)}`, 'items.rb')</div><div class='del'>-          })</div><div class='del'>-  d2.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'plot.rb'].join(File::Separator)}`, 'plot.rb')</div><div class='del'>-          })</div><div class='del'>-  d3.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'ctext.rb'].join(File::Separator)}`, 'ctext.rb')</div><div class='del'>-          })</div><div class='del'>-  d4.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'arrow.rb'].join(File::Separator)}`, 'arrow.rb')</div><div class='del'>-          })</div><div class='del'>-  d5.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'ruler.rb'].join(File::Separator)}`, 'ruler.rb')</div><div class='del'>-          })</div><div class='del'>-  d6.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'cscroll.rb'].join(File::Separator)}`, 'cscroll.rb')</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='del'>-</div><div class='del'>-txt.width  60</div><div class='del'>-txt.height 24</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 133adb0543..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/bitmap.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/bitmap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,75 +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'>-        Tk::Label.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'>-base_frame = TkFrame.new($bitmap_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame,'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(base_frame) {|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(base_frame){|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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 5c03bd499b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/button.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 = Tk::Frame.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 2951962a79..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/check.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/check.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,72 +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'>-base_frame = TkFrame.new($check_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, </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(base_frame, 'text'=&gt;'Wipers  OK', 'variable'=&gt;wipers),</div><div class='del'>-  TkCheckButton.new(base_frame, 'text'=&gt;'Brakes  OK', 'variable'=&gt;brakes),</div><div class='del'>-  TkCheckButton.new(base_frame, '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 faea748a87..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/check2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/check2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,109 +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'>-base_frame = TkFrame.new($check2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, :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(base_frame, 'text'=&gt;'Wipers OK', 'variable'=&gt;wipers),</div><div class='del'>-  TkCheckButton.new(base_frame, 'text'=&gt;'Brakes OK', 'variable'=&gt;brakes),</div><div class='del'>-  TkCheckButton.new(base_frame, '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 431439d55d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/clrpick.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/clrpick.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +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'>-#  Note: don't support ttk_wrapper. work with standard widgets only.</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'>-base_frame = TkFrame.new($clrpick_demo).pack(:fill=&gt;:both, :expand=&gt;true)</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'>-Tk::Label.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'>-Tk::Frame.new($clrpick_demo) {|frame|</div><div class='del'>-  # TkButton.new(frame) {</div><div class='del'>-  Tk::Button.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'>-  Tk::Button.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'>-Tk::Button.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'>-Tk::Button.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 4300a660ae..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/colors.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/colors.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,158 +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'>-base_frame = TkFrame.new($colors_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, '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'>-colors_lbox.bind('Double-1', proc{</div><div class='del'>-                   begin</div><div class='del'>-                     TkPalette.setPalette TkSelection.get</div><div class='del'>-                   rescue =&gt; e</div><div class='del'>-                     p e</div><div class='del'>-                     Tk.tk_call_without_enc('destroy', '.___tk_set_palette')</div><div class='del'>-                   end</div><div class='del'>-                 })</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/combo.rb b/ext/tk/sample/demos-en/combo.rb<br/>deleted file mode 100644<br/>index 0907d9e8ec..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/combo.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/combo.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,96 +0,0 @@</div><div class='del'>-# combo.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates several combobox widgets.</div><div class='del'>-#</div><div class='del'>-# based on "Id: combo.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($combo_demo) &amp;&amp; $combo_demo</div><div class='del'>-  $combo_demo.destroy </div><div class='del'>-  $combo_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$combo_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Combobox Demonstration")</div><div class='del'>-  iconname("combo")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($combo_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'5i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-Three different combo-boxes are displayed below. \</div><div class='del'>-You can add characters to the first \</div><div class='del'>-one by pointing, clicking and typing, just as with an entry; pressing \</div><div class='del'>-Return will cause the current value to be added to the list that is \</div><div class='del'>-selectable from the drop-down list, and you can choose other values \</div><div class='del'>-by pressing the Down key, using the arrow keys to pick another one, \</div><div class='del'>-and pressing Return again. The second combo-box is fixed to a \</div><div class='del'>-particular value, and cannot be modified at all. The third one only \</div><div class='del'>-allows you to select values from its drop-down list of Australian \</div><div class='del'>-cities.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## variables</div><div class='del'>-firstValue  = TkVariable.new</div><div class='del'>-secondValue = TkVariable.new</div><div class='del'>-ozCity      = TkVariable.new</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss buttons</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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(base_frame, </div><div class='del'>-                                    ['firstVariable', firstValue], </div><div class='del'>-                                    ['secondVariable', secondValue], </div><div class='del'>-                                    ['ozCity', ozCity])</div><div class='del'>-                         }), </div><div class='del'>-         Ttk::Button.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 'combo'}), </div><div class='del'>-         Ttk::Button.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'>-                           $combo_demo.destroy</div><div class='del'>-                           $combo_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-frame = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-australianCities = [</div><div class='del'>-  'Canberra', 'Sydney', 'Melbourne', 'Perth', 'Adelaide', 'Brisbane', </div><div class='del'>-  'Hobart', 'Darwin', 'Alice Springs'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-secondValue.value = 'unchangable'</div><div class='del'>-ozCity.value = 'Sydney'</div><div class='del'>-</div><div class='del'>-Tk.pack(Ttk::Labelframe.new(frame, :text=&gt;'Fully Editable'){|f|</div><div class='del'>-          Ttk::Combobox.new(f, :textvariable=&gt;firstValue){|b|</div><div class='del'>-            b.bind('Return', '%W'){|w|</div><div class='del'>-              w.values &lt;&lt;= w.value unless w.values.include?(w.value)</div><div class='del'>-            }</div><div class='del'>-          }.pack(:pady=&gt;5, :padx=&gt;10)</div><div class='del'>-        }, </div><div class='del'>-</div><div class='del'>-        Ttk::LabelFrame.new(frame, :text=&gt;'Disabled'){|f|</div><div class='del'>-          Ttk::Combobox.new(f, :textvariable=&gt;secondValue, :state=&gt;:disabled) .</div><div class='del'>-            pack(:pady=&gt;5, :padx=&gt;10)</div><div class='del'>-        }, </div><div class='del'>-</div><div class='del'>-        Ttk::LabelFrame.new(frame, :text=&gt;'Defined List Only'){|f|</div><div class='del'>-          Ttk::Combobox.new(f, :textvariable=&gt;ozCity, :state=&gt;:readonly, </div><div class='del'>-                            :values=&gt;australianCities) .</div><div class='del'>-            pack(:pady=&gt;5, :padx=&gt;10)</div><div class='del'>-        }, </div><div class='del'>-</div><div class='del'>-        :side=&gt;:top, :pady=&gt;5, :padx=&gt;10)</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 259ed3bd8c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/cscroll.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/cscroll.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,136 +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'>-base_frame = TkFrame.new($cscroll_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, '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(base_frame) {|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(base_frame) {</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(base_frame, </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(base_frame, '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(base_frame, '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 01374b0321..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ctext.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ctext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,207 +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'>-base_frame = TkFrame.new($ctext_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, '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(base_frame) {|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(base_frame, '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'>-if $tk_version =~ /^4.*/</div><div class='del'>-  textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*'</div><div class='del'>-else</div><div class='del'>-  textFont = 'Helvetica 24'</div><div class='del'>-end</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_param = {</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', 'justify'=&gt;'left'</div><div class='del'>-}</div><div class='del'>-if $tk_version =~ /^4.*/</div><div class='del'>-  ctag_text_param['font'] = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*'</div><div class='del'>-else</div><div class='del'>-  ctag_text_param['font'] = 'Helvetica 24'</div><div class='del'>-end</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, ctag_text_param))</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'>-if $tk_version =~ /^4.*/</div><div class='del'>-  TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Text Position', </div><div class='del'>-              'font'=&gt;'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', </div><div class='del'>-              'anchor'=&gt;'s', 'fill'=&gt;'brown')</div><div class='del'>-else</div><div class='del'>-  TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Text Position', </div><div class='del'>-              'font'=&gt;'Times 24', 'anchor'=&gt;'s', 'fill'=&gt;'brown')</div><div class='del'>-end</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'>-if $tk_version =~ /^4.*/</div><div class='del'>-  TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Justification', </div><div class='del'>-              'font'=&gt;'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', </div><div class='del'>-              'anchor'=&gt;'s', 'fill'=&gt;'brown')</div><div class='del'>-else</div><div class='del'>-  TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Justification', </div><div class='del'>-              'font'=&gt;'Times 24', 'anchor'=&gt;'s', 'fill'=&gt;'brown')</div><div class='del'>-end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 6f5b10fb71..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/entry1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/entry1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,58 +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'>-base_frame = TkFrame.new($entry1_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, 'relief'=&gt;'sunken')</div><div class='del'>-e2 = TkEntry.new(base_frame, 'relief'=&gt;'sunken')</div><div class='del'>-e3 = TkEntry.new(base_frame, '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 d67d04b56d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/entry2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/entry2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,93 +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'>-base_frame = TkFrame.new($entry2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, '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 f7df3a5653..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/entry3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/entry3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,220 +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'>-base_frame = TkFrame.new($entry3_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </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'>-invalid 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(base_frame){|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'>-  if fg &amp;&amp; !fg.empty? &amp;&amp; bg &amp;&amp; !bg.empty?</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'>-  else</div><div class='del'>-    # TkTimer.new(150, 3){Tk.bell}.start</div><div class='del'>-    Tk.bell</div><div class='del'>-    TkTimer.new(200, count,</div><div class='del'>-                proc{widget.configure(:foreground=&gt;'white',</div><div class='del'>-                                      :background=&gt;'black')},</div><div class='del'>-                proc{widget.configure(:foreground=&gt;'black',</div><div class='del'>-                                      :background=&gt;'white')}</div><div class='del'>-                ).at_end{begin</div><div class='del'>-                           widget.configure(:foreground=&gt;fg,</div><div class='del'>-                                            :background=&gt;bg)</div><div class='del'>-                         rescue</div><div class='del'>-                           # ignore</div><div class='del'>-                         end}.start</div><div class='del'>-  end</div><div class='del'>-  widget.focus(true)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-l1 = TkLabelFrame.new(base_frame, :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'>-  fg = e.foreground</div><div class='del'>-  bg = e.background</div><div class='del'>-  invalidcommand [proc{|w| focusAndFlash(w, fg, 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(base_frame, :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) # &lt;- 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(base_frame, :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(base_frame, :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(base_frame){|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 676c347409..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/filebox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/filebox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +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'>-base_frame = TkFrame.new($filebox_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame,'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(base_frame) {|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(base_frame) {|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 base_frame,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(base_frame, </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'>-    Tk.update_idletasks # need this for Tk::Tile::Entry</div><div class='del'>-                        # (to find right position of 'xview').</div><div class='del'>-    ent.xview(ent.index('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 7023f2a72e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/floor.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/floor.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1723 +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'>-base_frame = TkFrame.new($floor_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, '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(base_frame) {|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(base_frame,'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(base_frame, '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(base_frame, '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(base_frame) {|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 88b07aeee4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/floor2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/floor2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1722 +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'>-base_frame = TkFrame.new($floor2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, '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(base_frame) {|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(base_frame,'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(base_frame, '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(base_frame, '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(base_frame) {|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 3119752b1c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/form.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/form.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,64 +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'>-base_frame = TkFrame.new($form_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, '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 c6fa37c09c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/goldberg.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/goldberg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2006 +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'>-base_frame = TkFrame.new($goldberg_demo).pack(:fill=&gt;:both, :expand=&gt;true)</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'>-    msg = Tk::Label.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'>-    Tk::Button.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'>-    Tk::Button.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'>-    @show = Tk::Button.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 = Tk::Button.new(@parent, :text=&gt;'Start', :bd=&gt;6, </div><div class='del'>-                          :command=&gt;proc{do_button(0)})</div><div class='del'>-    if font = @start['font']</div><div class='del'>-      @start.font(font.weight('bold'))</div><div class='del'>-    end</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(base_frame)</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 5e86ad7e3e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/hello?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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 e660216967..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/hscale.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/hscale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,75 +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'>-base_frame = TkFrame.new($hscale_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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'>-</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='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|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='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 a3921d2333..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/icon.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/icon.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,105 +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'>-base_frame = TkFrame.new($icon_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, 'borderwidth'=&gt;10){|w|</div><div class='del'>-  TkFrame.new(w) {|f|</div><div class='del'>-    # TkRadioButton.new(f){</div><div class='del'>-    Tk::RadioButton.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'>-    Tk::RadioButton.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'>-  Tk::CheckButton.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'>-  Tk::CheckButton.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 a9072bb308..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/image1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/image1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +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'>-base_frame = TkFrame.new($image1_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, 'image'=&gt;image1a, 'bd'=&gt;1, 'relief'=&gt;'sunken'),</div><div class='del'>-#  TkLabel.new(base_frame, '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'>-[ Tk::Label.new(base_frame, 'image'=&gt;image1a, 'bd'=&gt;1, 'relief'=&gt;'sunken'),</div><div class='del'>-  Tk::Label.new(base_frame, '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 1975dd6b02..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/image2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/image2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,107 +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'>-base_frame = TkFrame.new($image2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame, '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(base_frame) {</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(base_frame, '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(base_frame, 'text'=&gt;'File:')\</div><div class='del'>-.pack('side'=&gt;'top', 'anchor'=&gt;'w')</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame){|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(base_frame, 'height'=&gt;'3m', 'width'=&gt;20),</div><div class='del'>-  TkLabel.new(base_frame, 'text'=&gt;'Image:'),</div><div class='del'>-  TkLabel.new(base_frame, '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 43afab7ecd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/image3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/image3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,125 +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'>-base_frame = TkFrame.new($image3_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-def loadDir3(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'>-# selectAndLoadDir3 --</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 selectAndLoadDir3(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'>-    loadDir3(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(base_frame) {</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(base_frame) {|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(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-image3_df = TkLabelFrame.new(base_frame, :text=&gt;'Directory:')</div><div class='del'>-</div><div class='del'>-image3_ff = TkLabelFrame.new(base_frame, :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{loadDir3(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{selectAndLoadDir3(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(base_frame, :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'>-  Tk::Label.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 3fd44fd4f4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/items.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/items.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,381 +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'>-base_frame = TkFrame.new($items_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame) {|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'>-if $tk_version =~ /^4.*/</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'>-else</div><div class='del'>-  font1 = 'Helvetica 12'</div><div class='del'>-  font2 = 'Helvetica 24 bold'</div><div class='del'>-end</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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>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/knightstour.rb b/ext/tk/sample/demos-en/knightstour.rb<br/>deleted file mode 100644<br/>index 618fce5f02..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/knightstour.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/knightstour.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,271 +0,0 @@</div><div class='del'>-# Based on the widget demo of Tcl/Tk8.5.2</div><div class='del'>-# The following is the original copyright text.</div><div class='del'>-#----------------------------------------------------------------------------</div><div class='del'>-# Copyright (C) 2008 Pat Thoyts &lt;patthoyts@users.sourceforge.net&gt;</div><div class='del'>-#</div><div class='del'>-#	Calculate a Knight's tour of a chessboard.</div><div class='del'>-#</div><div class='del'>-#	This uses Warnsdorff's rule to calculate the next square each</div><div class='del'>-#	time. This specifies that the next square should be the one that</div><div class='del'>-#	has the least number of available moves.</div><div class='del'>-#</div><div class='del'>-#	Using this rule it is possible to get to a position where</div><div class='del'>-#	there are no squares available to move into. In this implementation</div><div class='del'>-#	this occurs when the starting square is d6.</div><div class='del'>-#</div><div class='del'>-#	To solve this fault an enhancement to the rule is that if we</div><div class='del'>-#	have a choice of squares with an equal score, we should choose</div><div class='del'>-#	the one nearest the edge of the board.</div><div class='del'>-#</div><div class='del'>-#	If the call to the Edgemost function is commented out you can see</div><div class='del'>-#	this occur.</div><div class='del'>-#</div><div class='del'>-#	You can drag the knight to a specific square to start if you wish.</div><div class='del'>-#	If you let it repeat then it will choose random start positions</div><div class='del'>-#	for each new tour.</div><div class='del'>-#----------------------------------------------------------------------------</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Knights_Tour</div><div class='del'>-  # Return a list of accessible squares from a given square</div><div class='del'>-  def valid_moves(square)</div><div class='del'>-    moves = []</div><div class='del'>-    [</div><div class='del'>-      [-1,-2], [-2,-1], [-2,1], [-1,2], [1,2], [2,1], [2,-1], [1,-2]</div><div class='del'>-    ].each{|col_delta, row_delta|</div><div class='del'>-      col = (square % 8) + col_delta</div><div class='del'>-      row = (square.div(8)) + row_delta</div><div class='del'>-      moves &lt;&lt; (row * 8 + col) if row &gt; -1 &amp;&amp; row &lt; 8 &amp;&amp; col &gt; -1 &amp;&amp; col &lt; 8</div><div class='del'>-    }</div><div class='del'>-    moves</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return the number of available moves for this square</div><div class='del'>-  def check_square(square)</div><div class='del'>-    valid_moves(square).find_all{|pos| ! @visited.include?(pos)}.length</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Select the next square to move to. Returns -1 if there are no available</div><div class='del'>-  # squares remaining that we can move to.</div><div class='del'>-  def next_square(square)</div><div class='del'>-    minimum = 9</div><div class='del'>-    nxt = -1</div><div class='del'>-    valid_moves(square).each{|pos|</div><div class='del'>-      unless @visited.include?(pos)</div><div class='del'>-        cnt = check_square(pos)</div><div class='del'>-        if cnt &lt; minimum</div><div class='del'>-          minimum = cnt</div><div class='del'>-          nxt = pos</div><div class='del'>-        elsif cnt == minimum</div><div class='del'>-          nxt = edgemost(nxt, pos)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    nxt</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Select the square nearest the edge of the board</div><div class='del'>-  def edgemost(nxt, pos)</div><div class='del'>-    col_A = 3 - ((3.5 - nxt % 8).abs.to_i)</div><div class='del'>-    col_B = 3 - ((3.5 - pos % 8).abs.to_i)</div><div class='del'>-    row_A = 3 - ((3.5 - nxt.div(8)).abs.to_i)</div><div class='del'>-    row_B = 3 - ((3.5 - pos.div(8)).abs.to_i)</div><div class='del'>-    (col_A * row_A &lt; col_B * row_B)? nxt : pos</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Display a square number as a standard chess square notation.</div><div class='del'>-  def _N(square)</div><div class='del'>-    '%c%d' % [(97 + square % 8), (square.div(8) + 1)]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Perform a Knight's move and schedule the next move.</div><div class='del'>-  def move_piece(last, square)</div><div class='del'>-    @log.insert(:end, "#{@visited.length}. #{_N last} -&gt; #{_N square}\n", '')</div><div class='del'>-    @log.see(:end)</div><div class='del'>-    @board.itemconfigure(1+last, :state=&gt;:normal, :outline=&gt;'black')</div><div class='del'>-    @board.itemconfigure(1+square, :state=&gt;:normal, :outline=&gt;'red')</div><div class='del'>-    @knight.coords(@board.coords(1+square)[0..1])</div><div class='del'>-    @visited &lt;&lt; square</div><div class='del'>-    if (nxt = next_square(square)) != -1</div><div class='del'>-      @after_id = Tk.after(@delay.numeric){move_piece(square, nxt) rescue nil}</div><div class='del'>-    else</div><div class='del'>-      @start_btn.state :normal</div><div class='del'>-      if @visited.length == 64</div><div class='del'>-        if @initial == square</div><div class='del'>-          @log.insert :end, 'Closed tour!'</div><div class='del'>-        else</div><div class='del'>-          @log.insert :end, "Success\n", {}</div><div class='del'>-          Tk.after(@delay.numeric * 2){tour(rand(64))} if @continuous.bool</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        @log.insert :end, "FAILED!\n", {}</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Begin a new tour of the board given a random start position</div><div class='del'>-  def tour(square = nil)</div><div class='del'>-    @visited.clear</div><div class='del'>-    @log.clear</div><div class='del'>-    @start_btn.state :disabled</div><div class='del'>-    1.upto(64){|n|</div><div class='del'>-      @board.itemconfigure(n, :state=&gt;:disabled, :outline=&gt;'black')</div><div class='del'>-    }</div><div class='del'>-    unless square</div><div class='del'>-      square = @board.find_closest(*(@knight.coords &lt;&lt; 0 &lt;&lt; 65))[0].to_i - 1</div><div class='del'>-    end</div><div class='del'>-    @initial = square</div><div class='del'>-    Tk.after_idle{ move_piece(@initial, @initial) rescue nil }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _stop</div><div class='del'>-    Tk.after_cancel(@after_id) rescue nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _exit</div><div class='del'>-    _stop</div><div class='del'>-    $knightstour.destroy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_delay(new)</div><div class='del'>-    @delay.numeric = new.to_i</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def drag_start(w, x, y)</div><div class='del'>-    w.dtag('selected')</div><div class='del'>-    w.addtag('selected', :withtag, 'current')</div><div class='del'>-    @dragging = [x, y]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def drag_motion(w, x, y)</div><div class='del'>-    return unless @dragging</div><div class='del'>-    w.move('selected', x - @dragging[0], y - @dragging[1])</div><div class='del'>-    @dragging = [x, y]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def drag_end(w, x, y)</div><div class='del'>-    square = w.find_closest(x, y, 0, 65)</div><div class='del'>-    w.coords('selected', w.coords(square)[0..1])</div><div class='del'>-    w.dtag('selected')</div><div class='del'>-    @dragging = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_SeeDismiss</div><div class='del'>-    ## See Code / Dismiss</div><div class='del'>-    frame = Ttk::Frame.new($knightstour)</div><div class='del'>-    sep = Ttk::Separator.new(frame)</div><div class='del'>-    Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-    TkGrid('x', </div><div class='del'>-           Ttk::Button.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 'knightstour'}), </div><div class='del'>-           Ttk::Button.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'>-                             $knightstour.destroy</div><div class='del'>-                             $knightstour = nil</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'>-    frame</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_gui(parent = nil)</div><div class='del'>-    $knightstour.destroy rescue nil</div><div class='del'>-    $knightstour = Tk::Toplevel.new(parent, :title=&gt;"Knight's tour")</div><div class='del'>-    $knightstour.withdraw</div><div class='del'>-    base_f = Ttk::Frame.new($knightstour)</div><div class='del'>-    @board = Tk::Canvas.new(base_f, :width=&gt;240, :height=&gt;240)</div><div class='del'>-    @log = Tk::Text.new(base_f, :width=&gt;12, :height=&gt;1, </div><div class='del'>-                        :font=&gt;'Arial 8', :background=&gt;'white')</div><div class='del'>-    scr = @log.yscrollbar(Ttk::Scrollbar.new(base_f))</div><div class='del'>-</div><div class='del'>-    @visited = []</div><div class='del'>-    @delay = TkVariable.new(600)</div><div class='del'>-    @continuous = TkVariable.new(false)</div><div class='del'>-</div><div class='del'>-    tool_f = Ttk::Frame.new($knightstour)</div><div class='del'>-    label = Ttk::Label.new(tool_f, :text=&gt;'Speed')</div><div class='del'>-    scale = Ttk::Scale.new(tool_f, :from=&gt;8, :to=&gt;2000, :variable=&gt;@delay, </div><div class='del'>-                           :command=&gt;proc{|n| set_delay(n)})</div><div class='del'>-    check = Ttk::Checkbutton.new(tool_f, :text=&gt;'Repeat', </div><div class='del'>-                                 :variable=&gt;@continuous)</div><div class='del'>-    @start_btn = Ttk::Button.new(tool_f, :text=&gt;'Start', </div><div class='del'>-                                 :command=&gt;proc{tour()})</div><div class='del'>-    @exit_btn = Ttk::Button.new(tool_f, :text=&gt;'Exit', </div><div class='del'>-                                :command=&gt;proc{_exit()})</div><div class='del'>-</div><div class='del'>-    7.downto(0){|row|</div><div class='del'>-      0.upto(7){|col|</div><div class='del'>-        if ((col &amp; 1) ^ (row &amp; 1)).zero?</div><div class='del'>-          fill  = 'bisque'</div><div class='del'>-          dfill = 'bisque3'</div><div class='del'>-        else</div><div class='del'>-          fill  = 'tan3'</div><div class='del'>-          dfill = 'tan4'</div><div class='del'>-        end</div><div class='del'>-        coords = [col * 30 + 4, row * 30 + 4, col * 30 + 30, row * 30 + 30]</div><div class='del'>-        @board.create(TkcRectangle, coords, </div><div class='del'>-                      :fill=&gt;fill, :disabledfill=&gt;dfill,</div><div class='del'>-                      :width=&gt;2, :state=&gt;:disabled)</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @knight_font = TkFont.new(:size=&gt;-24)</div><div class='del'>-    @knight = TkcText.new(@board, 0, 0, :font=&gt;@knight_font, </div><div class='del'>-                          :text=&gt;Tk::UTF8_String.new('\u265e'), </div><div class='del'>-                          :anchor=&gt;'nw', # :tags=&gt;'knight', </div><div class='del'>-                          :fill=&gt;'black', :activefill=&gt;'#600000')</div><div class='del'>-    @knight.coords(@board.coords(rand(64)+1)[0..1])</div><div class='del'>-    @knight.bind('ButtonPress-1', '%W %x %y'){|w,x,y| drag_start(w,x,y)}</div><div class='del'>-    @knight.bind('Motion', '%W %x %y'){|w,x,y| drag_motion(w,x,y)}</div><div class='del'>-    @knight.bind('ButtonRelease-1', '%W %x %y'){|w,x,y| drag_end(w,x,y)}</div><div class='del'>-</div><div class='del'>-    Tk.grid(@board, @log, scr, :sticky=&gt;'news')</div><div class='del'>-    base_f.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    base_f.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    Tk.grid(base_f, '-', '-', '-', '-', '-', :sticky=&gt;'news')</div><div class='del'>-    widgets = [label, scale, check, @start_btn]</div><div class='del'>-    sg = nil</div><div class='del'>-    unless $RubyTk_WidgetDemo</div><div class='del'>-      widgets &lt;&lt; @exit_btn</div><div class='del'>-      if Tk.windowingsystem != 'aqua'</div><div class='del'>-        #widgets.unshift(Ttk::SizeGrip.new(tool_f))</div><div class='del'>-        Ttk::SizeGrip.new(tool_f).pack(:side=&gt;:right, :anchor=&gt;'se')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Tk.pack(widgets, :side=&gt;:right)</div><div class='del'>-    if Tk.windowingsystem == 'aqua'</div><div class='del'>-      TkPack.configure(widgets, :padx=&gt;[4, 4], :pady=&gt;[12, 12])</div><div class='del'>-      TkPack.configure(widgets[0], :padx=&gt;[4, 24])</div><div class='del'>-      TkPack.configure(widgets[-1], :padx=&gt;[16, 4])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    Tk.grid(tool_f, '-', '-', '-', '-', '-', :sticky=&gt;'ew')</div><div class='del'>-</div><div class='del'>-    if $RubyTk_WidgetDemo</div><div class='del'>-      Tk.grid(make_SeeDismiss(), '-', '-', '-', '-', '-', :sticky=&gt;'ew')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    $knightstour.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    $knightstour.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    $knightstour.bind('Control-F2'){TkConsole.show}</div><div class='del'>-    $knightstour.bind('Return'){@start_btn.invoke}</div><div class='del'>-    $knightstour.bind('Escape'){@exit_btn.invoke}</div><div class='del'>-    $knightstour.bind('Destroy'){ _stop }</div><div class='del'>-    $knightstour.protocol('WM_DELETE_WINDOW'){ _exit }</div><div class='del'>-</div><div class='del'>-    $knightstour.deiconify</div><div class='del'>-    $knightstour.tkwait_destroy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent = nil)</div><div class='del'>-    create_gui(parent)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.root.withdraw unless $RubyTk_WidgetDemo</div><div class='del'>-Thread.new{Tk.mainloop} if __FILE__ == $0</div><div class='del'>-Knights_Tour.new</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 91e41e4a22..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/label.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/label.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,72 +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'>-base_frame = TkFrame.new($label_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new(base_frame) {</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(base_frame) {|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(base_frame)</div><div class='del'>-f_right = TkFrame.new(base_frame)</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'>-Tk::Label.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 c912ff4c52..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/labelframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/labelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,95 +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'>-base_frame = TkFrame.new($labelframe_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# Some information</div><div class='del'>-TkLabel.new(base_frame, </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(base_frame){|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(base_frame).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)}</div><div class='del'>-    f.labelwidget(cb)</div><div class='del'>-  }</div><div class='del'>-  grid(:row=&gt;0, :column=&gt;1, :pady=&gt;'2m', :padx=&gt;'2m')</div><div class='del'>-</div><div class='del'>-  %w(Option1 Option2 Option3).each{|str|</div><div class='del'>-    TkCheckbutton.new(f, :text=&gt;str).pack(:side=&gt;:top, :fill=&gt;:x, :pady=&gt;2)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  lfEnableButtons(f)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkGrid.columnconfigure(w, [0,1], :weight=&gt;1)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/mclist.rb b/ext/tk/sample/demos-en/mclist.rb<br/>deleted file mode 100644<br/>index a849eba515..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/mclist.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/mclist.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,117 +0,0 @@</div><div class='del'>-# mclist.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing a Ttk</div><div class='del'>-# tree widget configured as a multi-column listbox.</div><div class='del'>-#</div><div class='del'>-# based on "Id: mclist.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($mclist_demo) &amp;&amp; $mclist_demo</div><div class='del'>-  $mclist_demo.destroy </div><div class='del'>-  $mclist_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$mclist_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Multi-Column List")</div><div class='del'>-  iconname("mclist")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($mclist_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-## Explanatory text</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', </div><div class='del'>-               :justify=&gt;:left, :anchor=&gt;'n', :padding=&gt;[10, 2, 10, 6], </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:fill=&gt;:x)</div><div class='del'>-Ttk is the new Tk themed widget set. \</div><div class='del'>-One of the widgets it includes is a tree widget, \</div><div class='del'>-which can be configured to display multiple columns of informational data \</div><div class='del'>-without displaying the tree itself. \</div><div class='del'>-This is a simple way to build a listbox that has multiple columns. \</div><div class='del'>-Clicking on the heading for a column will sort the data by that column. \</div><div class='del'>-You can also change the width of the columns \</div><div class='del'>-by dragging the boundary between them.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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 'mclist'}), </div><div class='del'>-         Ttk::Button.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'>-                           $mclist_demo.destroy</div><div class='del'>-                           $mclist_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-container = Ttk::Frame.new(base_frame)</div><div class='del'>-tree = Ttk::Treeview.new(base_frame, :columns=&gt;%w(country capital currency), </div><div class='del'>-                          :show=&gt;:headings)</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  vsb = tree.yscrollbar(Ttk::Scrollbar.new(base_frame))</div><div class='del'>-  hsb = tree.xscrollbar(Ttk::Scrollbar.new(base_frame))</div><div class='del'>-else</div><div class='del'>-  vsb = tree.yscrollbar(Tk::Scrollbar.new(base_frame))</div><div class='del'>-  hsb = tree.xscrollbar(Tk::Scrollbar.new(base_frame))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-container.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-Tk.grid(tree, vsb, :in=&gt;container, :sticky=&gt;'nsew')</div><div class='del'>-Tk.grid(hsb,       :in=&gt;container, :sticky=&gt;'nsew')</div><div class='del'>-container.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-container.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-## The data we're going to insert</div><div class='del'>-data = [</div><div class='del'>-  ['Argentina', 	'Buenos Aires', 	'ARS'], </div><div class='del'>-  ['Australia',		'Canberra',		'AUD'], </div><div class='del'>-  ['Brazil', 		'Brazilia', 		'BRL'], </div><div class='del'>-  ['Canada', 		'Ottawa', 		'CAD'], </div><div class='del'>-  ['China',		'Beijing', 		'CNY'], </div><div class='del'>-  ['France',		'Paris', 		'EUR'], </div><div class='del'>-  ['Germany', 		'Berlin',		'EUR'], </div><div class='del'>-  ['India', 		'New Delhi',		'INR'], </div><div class='del'>-  ['Italy', 		'Rome', 		'EUR'], </div><div class='del'>-  ['Japan', 		'Tokyo', 		'JPY'], </div><div class='del'>-  ['Mexico', 		'Mexico City', 		'MXN'], </div><div class='del'>-  ['Russia', 		'Moscow', 		'RUB'], </div><div class='del'>-  ['South Africa',	'Pretoria', 		'ZAR'], </div><div class='del'>-  ['United Kingdom', 	'London', 		'GBP'], </div><div class='del'>-  ['United States', 	'Washington, D.C.', 	'USD'],</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-## Code to insert the data nicely</div><div class='del'>-font = Ttk::Style.lookup(tree[:style], :font)</div><div class='del'>-cols = %w(country capital currency)</div><div class='del'>-cols.zip(%w(Country Capital Currency)).each{|col, name|</div><div class='del'>-  tree.heading_configure(col, :text=&gt;name, </div><div class='del'>-                         :command=&gt;proc{sort_by(tree, col, false)})</div><div class='del'>-  tree.column_configure(col, :width=&gt;TkFont.measure(font, name))</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-data.each{|country, capital, currency|</div><div class='del'>-  #tree.insert('', :end, :values=&gt;[country, capital, currency])</div><div class='del'>-  tree.insert(nil, :end, :values=&gt;[country, capital, currency])</div><div class='del'>-  cols.zip([country, capital, currency]).each{|col, val|</div><div class='del'>-    len = TkFont.measure(font, "#{val}  ")</div><div class='del'>-    if tree.column_cget(col, :width) &lt; len</div><div class='del'>-      tree.column_configure(col, :width=&gt;len)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Code to do the sorting of the tree contents when clicked on</div><div class='del'>-def sort_by(tree, col, direction)</div><div class='del'>-  tree.children(nil).map!{|row| [tree.get(row, col), row.id]} . </div><div class='del'>-    sort(&amp;((direction)? proc{|x, y| y &lt;=&gt; x}: proc{|x, y| x &lt;=&gt; y})) . </div><div class='del'>-    each_with_index{|info, idx| tree.move(info[1], nil, idx)}</div><div class='del'>-</div><div class='del'>-  tree.heading_configure(col, :command=&gt;proc{sort_by(tree, col, ! direction)})</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-en/menu.rb b/ext/tk/sample/demos-en/menu.rb<br/>deleted file mode 100644<br/>index bf6c22cb9d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/menu.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/menu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,196 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# menus 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?($menu_demo) &amp;&amp; $menu_demo</div><div class='del'>-  $menu_demo.destroy </div><div class='del'>-  $menu_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$menu_demo = TkToplevel.new {|w|</div><div class='del'>-  title("File Selection Dialogs")</div><div class='del'>-  iconname("menu")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($menu_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# menu frame</div><div class='del'>-$menu_frame = TkFrame.new(base_frame, 'relief'=&gt;'raised', 'bd'=&gt;2)</div><div class='del'>-$menu_frame.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  windowingsystem = Tk.windowingsystem()</div><div class='del'>-rescue</div><div class='del'>-  windowingsystem = ""</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left') {</div><div class='del'>-  if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-      windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-    text("This window contains a menubar with cascaded menus.  You can invoke entries with an accelerator by typing Command+x, where \"x\" is the character next to the command key symbol. The rightmost menu can be torn off into a palette by dragging outside of its bounds and releasing the mouse.")</div><div class='del'>-  else</div><div class='del'>-    text("This window contains a menubar with cascaded menus.  You can post a menu from the keyboard by typing Alt+x, where \"x\" is the character underlined on the menu.  You can then traverse among the menus using the arrow keys.  When a menu is posted, you can invoke the current entry by typing space, or you can invoke any entry by typing its underlined character.  If a menu entry has an accelerator, you can invoke the entry without posting the menu just by typing the accelerator. The rightmost menu can be torn off into a palette by selecting the first item in the menu.")</div><div class='del'>-  end</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|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 = $menu_demo</div><div class='del'>-      $menu_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 'menu'}</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'>-# menu </div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'File', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|file_menu|</div><div class='del'>-    m.configure('menu'=&gt;file_menu)</div><div class='del'>-    add('command', 'label'=&gt;'Open...', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Open..." entry'})</div><div class='del'>-    add('command', 'label'=&gt;'New', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "New" entry'})</div><div class='del'>-    add('command', 'label'=&gt;'Save', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Save" entry'})</div><div class='del'>-    add('command', 'label'=&gt;'Save As...', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Save As..." entry'})</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'Print Setup...', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Print Setup..." entry'})</div><div class='del'>-    add('command', 'label'=&gt;'Print...', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Print..." entry'})</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'Dismiss Menus Demo', 'command'=&gt;proc{$menu_demo.destroy})</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-    windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-  modifier = 'Command'</div><div class='del'>-elsif $tk_platform['platform'] == 'windows'</div><div class='del'>-  modifier = 'Control'</div><div class='del'>-else</div><div class='del'>-  modifier = 'Meta'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'Basic', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|basic_menu|</div><div class='del'>-    m.configure('menu'=&gt;basic_menu)</div><div class='del'>-    add('command', 'label'=&gt;'Long entry that does nothing')</div><div class='del'>-    ['A','B','C','D','E','F','G'].each{|c|</div><div class='del'>-      add('command', 'label'=&gt;"Print letter \"#{c}\"", </div><div class='del'>-          'underline'=&gt;14, 'accelerator'=&gt;"Meta+#{c}", </div><div class='del'>-          'command'=&gt;proc{print c,"\n"}, 'accelerator'=&gt;"#{modifier}+#{c}")</div><div class='del'>-      $menu_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'Cascades', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_menu|</div><div class='del'>-    m.configure('menu'=&gt;cascade_menu)</div><div class='del'>-    add('command', 'label'=&gt;'Print hello', </div><div class='del'>-        'command'=&gt;proc{print "Hello\n"}, </div><div class='del'>-        'accelerator'=&gt;"#{modifier}+H", 'underline'=&gt;6)</div><div class='del'>-    $menu_demo.bind("#{modifier}-h", proc{print "Hello\n"})</div><div class='del'>-    add('command', 'label'=&gt;'Print goodbye', </div><div class='del'>-        'command'=&gt;proc{print "Goodbye\n"}, </div><div class='del'>-        'accelerator'=&gt;"#{modifier}+G", 'underline'=&gt;6)</div><div class='del'>-    $menu_demo.bind("#{modifier}-g", proc{print "Goodbye\n"})</div><div class='del'>-</div><div class='del'>-    TkMenu.new(cascade_menu, 'tearoff'=&gt;false) {|cascade_check|</div><div class='del'>-      cascade_menu.add('cascade', 'label'=&gt;'Check buttons', </div><div class='del'>-                       'menu'=&gt;cascade_check, 'underline'=&gt;0)</div><div class='del'>-      oil = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'Oil checked', 'variable'=&gt;oil)</div><div class='del'>-      trans = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'Transmission checked', 'variable'=&gt;trans)</div><div class='del'>-      brakes = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'Brakes checked', 'variable'=&gt;brakes)</div><div class='del'>-      lights = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'Lights checked', 'variable'=&gt;lights)</div><div class='del'>-      add('separator')</div><div class='del'>-      add('command', 'label'=&gt;'Show current values', </div><div class='del'>-          'command'=&gt;proc{showVars($menu_demo, </div><div class='del'>-                                   ['oil', oil], </div><div class='del'>-                                   ['trans', trans], </div><div class='del'>-                                   ['brakes', brakes], </div><div class='del'>-                                   ['lights', lights])} )</div><div class='del'>-      invoke 1</div><div class='del'>-      invoke 3</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    TkMenu.new(cascade_menu, 'tearoff'=&gt;false) {|cascade_radio|</div><div class='del'>-      cascade_menu.add('cascade', 'label'=&gt;'Radio buttons', </div><div class='del'>-                       'menu'=&gt;cascade_radio, 'underline'=&gt;0)</div><div class='del'>-      pointSize = TkVariable.new</div><div class='del'>-      add('radio', 'label'=&gt;'10 point', 'variable'=&gt;pointSize, 'value'=&gt;10)</div><div class='del'>-      add('radio', 'label'=&gt;'14 point', 'variable'=&gt;pointSize, 'value'=&gt;14)</div><div class='del'>-      add('radio', 'label'=&gt;'18 point', 'variable'=&gt;pointSize, 'value'=&gt;18)</div><div class='del'>-      add('radio', 'label'=&gt;'24 point', 'variable'=&gt;pointSize, 'value'=&gt;24)</div><div class='del'>-      add('radio', 'label'=&gt;'32 point', 'variable'=&gt;pointSize, 'value'=&gt;32)</div><div class='del'>-      add('separator')</div><div class='del'>-      style = TkVariable.new</div><div class='del'>-      add('radio', 'label'=&gt;'Roman', 'variable'=&gt;style, 'value'=&gt;'roman')</div><div class='del'>-      add('radio', 'label'=&gt;'Bold', 'variable'=&gt;style, 'value'=&gt;'bold')</div><div class='del'>-      add('radio', 'label'=&gt;'Italic', 'variable'=&gt;style, 'value'=&gt;'italic')</div><div class='del'>-      add('separator')</div><div class='del'>-      add('command', 'label'=&gt;'Show current values', </div><div class='del'>-          'command'=&gt;proc{showVars($menu_demo, </div><div class='del'>-                                   ['pointSize', pointSize], </div><div class='del'>-                                   ['style', style])} )</div><div class='del'>-      invoke 1</div><div class='del'>-      invoke 7</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'Icons', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|icon_menu|</div><div class='del'>-    m.configure('menu'=&gt;icon_menu)</div><div class='del'>-    add('command', </div><div class='del'>-        'bitmap'=&gt;'@'+[$demo_dir,'..',</div><div class='del'>-                        'images','pattern.xbm'].join(File::Separator),</div><div class='del'>-        'command'=&gt;proc{TkDialog.new('title'=&gt;'Bitmap Menu Entry', </div><div class='del'>-                                     'text'=&gt;'The menu entry you invoked displays a bitmap rather than a text string.  Other than this, it is just like any other menu entry.',</div><div class='del'>-                                     'bitmap'=&gt;'', 'default'=&gt;0, </div><div class='del'>-                                     'buttons'=&gt;'Dismiss')} )</div><div class='del'>-    ['info', 'questhead', 'error'].each{|icon|</div><div class='del'>-      add('command', 'bitmap'=&gt;icon, </div><div class='del'>-          'command'=&gt;proc{print "You invoked the #{icon} bitmap\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'More', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|more_menu|</div><div class='del'>-    m.configure('menu'=&gt;more_menu)</div><div class='del'>-    [ 'An entry','Another entry','Does nothing','Does almost nothing',</div><div class='del'>-      'Make life meaningful' ].each{|i|</div><div class='del'>-      add('command', 'label'=&gt;i, </div><div class='del'>-          'command'=&gt;proc{print "You invoked \"#{i}\"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'Colors', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m) {|colors_menu|</div><div class='del'>-    m.configure('menu'=&gt;colors_menu)</div><div class='del'>-    ['red', 'orange', 'yellow', 'green', 'blue'].each{|c|</div><div class='del'>-      add('command', 'label'=&gt;c, 'background'=&gt;c, </div><div class='del'>-          'command'=&gt;proc{print "You invoked \"#{c}\"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/menu84.rb b/ext/tk/sample/demos-en/menu84.rb<br/>deleted file mode 100644<br/>index 4029ce5541..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/menu84.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/menu84.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,215 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# menus 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?($menu84_demo) &amp;&amp; $menu84_demo</div><div class='del'>-  $menu84_demo.destroy </div><div class='del'>-  $menu84_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$menu84_demo = TkToplevel.new {|w|</div><div class='del'>-  title("File Selection Dialogs")</div><div class='del'>-  iconname("menu84")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($menu84_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  windowingsystem = Tk.windowingsystem()</div><div class='del'>-rescue</div><div class='del'>-  windowingsystem = ""</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left') {</div><div class='del'>-  if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-      windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-    text("This window contains a menubar with cascaded menus.  You can invoke entries with an accelerator by typing Command+x, where \"x\" is the character next to the command key symbol. The rightmost menu can be torn off into a palette by dragging outside of its bounds and releasing the mouse.")</div><div class='del'>-  else</div><div class='del'>-    text("This window contains a menubar with cascaded menus.  You can post a menu from the keyboard by typing Alt+x, where \"x\" is the character underlined on the menu.  You can then traverse among the menus using the arrow keys.  When a menu is posted, you can invoke the current entry by typing space, or you can invoke any entry by typing its underlined character.  If a menu entry has an accelerator, you can invoke the entry without posting the menu just by typing the accelerator. The rightmost menu can be torn off into a palette by selecting the first item in the menu.")</div><div class='del'>-  end</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-menustatus = TkVariable.new("    ")</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkLabel.new(frame, 'textvariable'=&gt;menustatus, 'relief'=&gt;'sunken', </div><div class='del'>-              'bd'=&gt;1, 'font'=&gt;['Helvetica', '10'], </div><div class='del'>-              'anchor'=&gt;'w').pack('side'=&gt;'left', 'padx'=&gt;2, </div><div class='del'>-                                  'expand'=&gt;true, 'fill'=&gt;'both')</div><div class='del'>-  pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;2)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|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 = $menu84_demo</div><div class='del'>-      $menu84_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 'menu84'}</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'>-# create menu frame</div><div class='del'>-$menu84_frame = TkMenu.new($menu84_demo, 'tearoff'=&gt;false)</div><div class='del'>-</div><div class='del'>-# menu</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'File', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  add('command', 'label'=&gt;'Open...', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Open..." entry'})</div><div class='del'>-  add('command', 'label'=&gt;'New', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "New" entry'})</div><div class='del'>-  add('command', 'label'=&gt;'Save', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Save" entry'})</div><div class='del'>-  add('command', 'label'=&gt;'Save As...', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Save As..." entry'})</div><div class='del'>-  add('separator')</div><div class='del'>-  add('command', 'label'=&gt;'Print Setup...', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Print Setup..." entry'})</div><div class='del'>-  add('command', 'label'=&gt;'Print...', 'command'=&gt;proc{fail 'this is just a demo: no action has been defined for the "Print..." entry'})</div><div class='del'>-  add('separator')</div><div class='del'>-  add('command', 'label'=&gt;'Dismiss Menus Demo', 'command'=&gt;proc{$menu84_demo.destroy})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-    windowingsystem = "classic" || windowingsystem = "aqua"</div><div class='del'>-  modifier = 'Command'</div><div class='del'>-elsif $tk_platform['platform'] == 'windows'</div><div class='del'>-  modifier = 'Control'</div><div class='del'>-else</div><div class='del'>-  modifier = 'Meta'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'Basic', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  add('command', 'label'=&gt;'Long entry that does nothing')</div><div class='del'>-  ['A','B','C','D','E','F','G'].each{|c|</div><div class='del'>-    add('command', 'label'=&gt;"Print letter \"#{c}\"", </div><div class='del'>-        'underline'=&gt;14, 'accelerator'=&gt;"Meta+#{c}", </div><div class='del'>-        'command'=&gt;proc{print c,"\n"}, 'accelerator'=&gt;"#{modifier}+#{c}")</div><div class='del'>-    $menu84_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"})</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'Cascades', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  add('command', 'label'=&gt;'Print hello', </div><div class='del'>-      'command'=&gt;proc{print "Hello\n"}, </div><div class='del'>-      'accelerator'=&gt;"#{modifier}+H", 'underline'=&gt;6)</div><div class='del'>-  $menu84_demo.bind("#{modifier}-h", proc{print "Hello\n"})</div><div class='del'>-  add('command', 'label'=&gt;'Print goodbye', </div><div class='del'>-      'command'=&gt;proc{print "Goodbye\n"}, </div><div class='del'>-      'accelerator'=&gt;"#{modifier}+G", 'underline'=&gt;6)</div><div class='del'>-  $menu84_demo.bind("#{modifier}-g", proc{print "Goodbye\n"})</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_check|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'Check buttons', </div><div class='del'>-          'menu'=&gt;cascade_check, 'underline'=&gt;0)</div><div class='del'>-    oil = TkVariable.new(0)</div><div class='del'>-    add('check', 'label'=&gt;'Oil checked', 'variable'=&gt;oil)</div><div class='del'>-    trans = TkVariable.new(0)</div><div class='del'>-    add('check', 'label'=&gt;'Transmission checked', 'variable'=&gt;trans)</div><div class='del'>-    brakes = TkVariable.new(0)</div><div class='del'>-    add('check', 'label'=&gt;'Brakes checked', 'variable'=&gt;brakes)</div><div class='del'>-    lights = TkVariable.new(0)</div><div class='del'>-    add('check', 'label'=&gt;'Lights checked', 'variable'=&gt;lights)</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'Show current values', </div><div class='del'>-        'command'=&gt;proc{showVars($menu84_demo, </div><div class='del'>-                                 ['oil', oil], </div><div class='del'>-                                 ['trans', trans], </div><div class='del'>-                                 ['brakes', brakes], </div><div class='del'>-                                 ['lights', lights])} )</div><div class='del'>-    invoke 1</div><div class='del'>-    invoke 3</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_radio|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'Radio buttons', </div><div class='del'>-          'menu'=&gt;cascade_radio, 'underline'=&gt;0)</div><div class='del'>-    pointSize = TkVariable.new</div><div class='del'>-    add('radio', 'label'=&gt;'10 point', 'variable'=&gt;pointSize, 'value'=&gt;10)</div><div class='del'>-    add('radio', 'label'=&gt;'14 point', 'variable'=&gt;pointSize, 'value'=&gt;14)</div><div class='del'>-    add('radio', 'label'=&gt;'18 point', 'variable'=&gt;pointSize, 'value'=&gt;18)</div><div class='del'>-    add('radio', 'label'=&gt;'24 point', 'variable'=&gt;pointSize, 'value'=&gt;24)</div><div class='del'>-    add('radio', 'label'=&gt;'32 point', 'variable'=&gt;pointSize, 'value'=&gt;32)</div><div class='del'>-    add('separator')</div><div class='del'>-    style = TkVariable.new</div><div class='del'>-    add('radio', 'label'=&gt;'Roman', 'variable'=&gt;style, 'value'=&gt;'roman')</div><div class='del'>-    add('radio', 'label'=&gt;'Bold', 'variable'=&gt;style, 'value'=&gt;'bold')</div><div class='del'>-    add('radio', 'label'=&gt;'Italic', 'variable'=&gt;style, 'value'=&gt;'italic')</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'Show current values', </div><div class='del'>-        'command'=&gt;proc{showVars($menu84_demo, </div><div class='del'>-                                 ['pointSize', pointSize], </div><div class='del'>-                                 ['style', style])} )</div><div class='del'>-    invoke 1</div><div class='del'>-    invoke 7</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'Icons', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  add('command', 'hidemargin'=&gt;1, </div><div class='del'>-      'bitmap'=&gt;'@'+[$demo_dir,'..',</div><div class='del'>-                      'images','pattern.xbm'].join(File::Separator),</div><div class='del'>-      'command'=&gt;proc{TkDialog.new('title'=&gt;'Bitmap Menu Entry', </div><div class='del'>-                                   'text'=&gt;'The menu entry you invoked displays a bitmap rather than a text string.  Other than this, it is just like any other menu entry.',</div><div class='del'>-                                   'bitmap'=&gt;'', 'default'=&gt;0, </div><div class='del'>-                                   'buttons'=&gt;'Dismiss')} )</div><div class='del'>-  ['info', 'questhead', 'error'].each{|icon|</div><div class='del'>-    add('command', 'bitmap'=&gt;icon, 'hidemargin'=&gt;1, </div><div class='del'>-        'command'=&gt;proc{print "You invoked the #{icon} bitmap\n"})</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  entryconfigure(2, :columnbreak=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'More', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  [ 'An entry','Another entry','Does nothing','Does almost nothing',</div><div class='del'>-    'Make life meaningful' ].each{|i|</div><div class='del'>-    add('command', 'label'=&gt;i, </div><div class='del'>-        'command'=&gt;proc{print "You invoked \"#{i}\"\n"})</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  m.entryconfigure('Does almost nothing', </div><div class='del'>-                   'bitmap'=&gt;'questhead', 'compound'=&gt;'left', </div><div class='del'>-                   'command'=&gt;proc{</div><div class='del'>-                     TkDialog.new('title'=&gt;'Compound Menu Entry', </div><div class='del'>-                                  'message'=&gt;'The menu entry you invoked'+</div><div class='del'>-                                             'displays both a bitmap and '+</div><div class='del'>-                                             'a text string.  Other than '+</div><div class='del'>-                                             'this, it isjust like any '+</div><div class='del'>-                                             'other menu entry.', </div><div class='del'>-                                  'buttons'=&gt;['OK'], 'bitmap'=&gt;'')</div><div class='del'>-                   })</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'Colors', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  ['red', 'orange', 'yellow', 'green', 'blue'].each{|c|</div><div class='del'>-    add('command', 'label'=&gt;c, 'background'=&gt;c, </div><div class='del'>-        'command'=&gt;proc{print "You invoked \"#{c}\"\n"})</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$menu84_demo.menu($menu84_frame)</div><div class='del'>-</div><div class='del'>-TkMenu.bind('&lt;MenuSelect&gt;', proc{|w|</div><div class='del'>-              begin</div><div class='del'>-                label = w.entrycget('active', 'label')</div><div class='del'>-              rescue</div><div class='del'>-                label = "    "</div><div class='del'>-              end</div><div class='del'>-              menustatus.value = label</div><div class='del'>-              Tk.update(true)</div><div class='del'>-            }, '%W')</div><div class='head'>diff --git a/ext/tk/sample/demos-en/menubu.rb b/ext/tk/sample/demos-en/menubu.rb<br/>deleted file mode 100644<br/>index b37367e515..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/menubu.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/menubu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,237 +0,0 @@</div><div class='del'>-# menubutton.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a window with a bunch of menus</div><div class='del'>-# and cascaded menus using menubuttons.</div><div class='del'>-</div><div class='del'>-require "tkcanvas"</div><div class='del'>-</div><div class='del'>-def optionMenu(menubutton, varName, firstValue, *rest)</div><div class='del'>-  varName.value = firstValue</div><div class='del'>-  configoptions = {'textvariable'=&gt;varName,'indicatoron'=&gt;'on',</div><div class='del'>-    'relief'=&gt;'raised','borderwidth'=&gt;2,'highlightthickness'=&gt;2,</div><div class='del'>-    'anchor'=&gt;'c','direction'=&gt;'flush'}</div><div class='del'>-  configoptions.each {|key, value|</div><div class='del'>-    menubutton.configure(key, value)</div><div class='del'>-  }</div><div class='del'>-  menu = TkMenu.new(menubutton) {</div><div class='del'>-    tearoff 'off'</div><div class='del'>-    add 'radio', 'label'=&gt;firstValue, 'variable'=&gt;varName</div><div class='del'>-  }</div><div class='del'>-  menubutton.menu(menu)</div><div class='del'>-  for i in rest</div><div class='del'>-    menu.add 'radio', 'label'=&gt;i, 'variable'=&gt;varName</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  return menu</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if defined?($menubu_demo) &amp;&amp; $menubu_demo</div><div class='del'>-  $menubu_demo.destroy</div><div class='del'>-  $menubu_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$menubu_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Menu Button Demonstration")</div><div class='del'>-  iconname("menubutton")</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-positionWindow($menubu_demo)</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($menubu_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# version check</div><div class='del'>-if $tk_version.to_f &lt; 8.0</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left') {</div><div class='del'>-    text("This is a demonstration of menubuttons. The \"Below\" menubutton pops its menu below the button; the \"Right\" button pops to the right, etc. There are two option menus directly below this text; one is just a standard menu and the other is a 16-color palette.")</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|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 = $menubu_demo</div><div class='del'>-      $menubu_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 'menubu'}</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'>-else ; # Tk8.x</div><div class='del'>-</div><div class='del'>-body = TkFrame.new(base_frame)</div><div class='del'>-body.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-below = TkMenubutton.new(body) {</div><div class='del'>-  text "Below"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'below'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-belowMenu = TkMenu.new(below) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Below menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Below menu.\""}</div><div class='del'>-}</div><div class='del'>-below.menu(belowMenu)</div><div class='del'>-below.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'n')</div><div class='del'>-</div><div class='del'>-below = TkMenubutton.new(body) {</div><div class='del'>-  text "Below"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'below'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-belowMenu = TkMenu.new(below) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Below menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Below menu.\""}</div><div class='del'>-}</div><div class='del'>-below.menu(belowMenu)</div><div class='del'>-below.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'n')</div><div class='del'>-</div><div class='del'>-below = TkMenubutton.new(body) {</div><div class='del'>-  text "Below"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'below'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-belowMenu = TkMenu.new(below) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Below menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Below menu.\""}</div><div class='del'>-}</div><div class='del'>-below.menu(belowMenu)</div><div class='del'>-below.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'n')</div><div class='del'>-</div><div class='del'>-right = TkMenubutton.new(body) {</div><div class='del'>-  text "Right"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'right'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-rightMenu = TkMenu.new(right) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Right menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Left menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Right menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Right menu.\""}</div><div class='del'>-}</div><div class='del'>-right.menu(rightMenu)</div><div class='del'>-right.grid('row'=&gt;1, 'column'=&gt;0, 'sticky'=&gt;'w')</div><div class='del'>-</div><div class='del'>-left = TkMenubutton.new(body) {</div><div class='del'>-  text "Left"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'left'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-leftMenu = TkMenu.new(left) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Left menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Left menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Left menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Left menu.\""}</div><div class='del'>-}</div><div class='del'>-left.menu(leftMenu)</div><div class='del'>-left.grid('row'=&gt;1, 'column'=&gt;2, 'sticky'=&gt;'e')</div><div class='del'>-</div><div class='del'>-center = TkFrame.new(body) {</div><div class='del'>-  grid('row'=&gt;1, 'column'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-above = TkMenubutton.new(body) {</div><div class='del'>-  text "Above"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'above'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-aboveMenu = TkMenu.new(above) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Above menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Above menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Above menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Above menu.\""}</div><div class='del'>-}</div><div class='del'>-above.menu(aboveMenu)</div><div class='del'>-above.grid('row'=&gt;2, 'column'=&gt;1, 'sticky'=&gt;'s')</div><div class='del'>-</div><div class='del'>-center = TkFrame.new(body) {</div><div class='del'>-  grid('row'=&gt;1, 'column'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|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 = $menubu_demo</div><div class='del'>-      $menubu_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 'menubu' }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'expand'=&gt;'yes', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-msg = TkLabel.new(center) {</div><div class='del'>-#  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "This is a demonstration of menubuttons. The \"Below\" menubutton pops its menu below the button; the \"Right\" button pops to the right, etc. There are two option menus directly below this text; one is just a standard menu and the other is a 16-color palette."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top', 'padx'=&gt;25, 'pady'=&gt;25)</div><div class='del'>-</div><div class='del'>-TkFrame.new(center) {|f|</div><div class='del'>-  menubuttonoptions = TkVariable.new</div><div class='del'>-  mbutton = TkMenubutton.new(f)</div><div class='del'>-  options = optionMenu(mbutton, menubuttonoptions, </div><div class='del'>-                       'one', 'two', 'three')</div><div class='del'>-  mbutton.pack('side'=&gt;'left', 'padx'=&gt;25, 'pady'=&gt;25)</div><div class='del'>-  paletteColor = TkVariable.new</div><div class='del'>-  colors = ['Black','red4','DarkGreen','NavyBlue', 'gray75',</div><div class='del'>-    'Red','Green','Blue','gray50','Yellow','Cyan','Magenta',</div><div class='del'>-    'White','Brown','DarkSeaGreen','DarkViolet']</div><div class='del'>-  colorMenuButton = TkMenubutton.new(f)</div><div class='del'>-  m = optionMenu(colorMenuButton, paletteColor, *colors)</div><div class='del'>-  begin</div><div class='del'>-    windowingsystem = Tk.windowingsystem()</div><div class='del'>-  rescue</div><div class='del'>-    windowingsystem = ""</div><div class='del'>-  end</div><div class='del'>-  if windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-    topBorderColor = 'Black'</div><div class='del'>-    bottomBorderColor = 'Black'</div><div class='del'>-  else</div><div class='del'>-    topBorderColor = 'gray50'</div><div class='del'>-    bottomBorderColor = 'gray75'</div><div class='del'>-  end</div><div class='del'>-  for i in 0..15</div><div class='del'>-    image = TkPhotoImage.new('height'=&gt;16, 'width'=&gt;16)</div><div class='del'>-    image.put(topBorderColor, 0, 0, 16, 1)</div><div class='del'>-    image.put(topBorderColor, 0, 1, 1, 16)</div><div class='del'>-    image.put(bottomBorderColor, 0, 15, 16, 16)</div><div class='del'>-    image.put(bottomBorderColor, 15, 1, 16, 16)</div><div class='del'>-    image.put(colors[i], 1, 1, 15, 15)</div><div class='del'>-</div><div class='del'>-    selectimage = TkPhotoImage.new('height'=&gt;16, 'width'=&gt;16)</div><div class='del'>-    selectimage.put('Black', 0, 0, 16, 2)</div><div class='del'>-    selectimage.put('Black', 0, 2, 2, 16)</div><div class='del'>-    selectimage.put('Black', 2, 14, 16, 16)</div><div class='del'>-    selectimage.put('Black', 14, 2, 16, 14)</div><div class='del'>-    selectimage.put(colors[i], 2, 2, 14, 14)</div><div class='del'>-</div><div class='del'>-    m.entryconfigure(i, 'image'=&gt;image, 'selectimage'=&gt;selectimage, 'hidemargin'=&gt;'on')</div><div class='del'>-  end</div><div class='del'>-  m.configure('tearoff', 'on')</div><div class='del'>-  for c in ['Black', 'gray75', 'gray50', 'White']</div><div class='del'>-    m.entryconfigure(c, 'columnbreak'=&gt;1)</div><div class='del'>-  end</div><div class='del'>-  colorMenuButton.pack('side'=&gt;'left', 'padx'=&gt;25, 'pady'=&gt;25)</div><div class='del'>-  pack 'padx'=&gt;25, 'pady'=&gt;25</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-end ; # Tk8.x</div><div class='head'>diff --git a/ext/tk/sample/demos-en/msgbox.rb b/ext/tk/sample/demos-en/msgbox.rb<br/>deleted file mode 100644<br/>index 62b1f2b985..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/msgbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/msgbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,90 +0,0 @@</div><div class='del'>-# msgbox.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates message boxes of various type</div><div class='del'>-#</div><div class='del'>-# message boxes 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?($msgbox_demo) &amp;&amp; $msgbox_demo</div><div class='del'>-  $msgbox_demo.destroy </div><div class='del'>-  $msgbox_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$msgbox_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Message Box Demonstration")</div><div class='del'>-  iconname("messagebox")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($msgbox_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'4i', 'justify'=&gt;'left',</div><div class='del'>-            'text'=&gt;"Choose the icon and type option of the message box. Then press the \"Message Box\" button to see the message box.").pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|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 = $msgbox_demo</div><div class='del'>-      $msgbox_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 'msgbox'}</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 'Message Box'</div><div class='del'>-    command proc{showMessageBox $msgbox_demo}</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'>-$msgbox_leftframe  = TkFrame.new(base_frame)</div><div class='del'>-$msgbox_rightframe = TkFrame.new(base_frame)</div><div class='del'>-$msgbox_leftframe .pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y', </div><div class='del'>-                        'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-$msgbox_rightframe.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y', </div><div class='del'>-                        'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-TkLabel.new($msgbox_leftframe, 'text'=&gt;'Icon').pack('side'=&gt;'top')</div><div class='del'>-TkFrame.new($msgbox_leftframe, 'relief'=&gt;'ridge', 'bd'=&gt;1, 'height'=&gt;2)\</div><div class='del'>-.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'no')</div><div class='del'>-</div><div class='del'>-$msgboxIcon = TkVariable.new('info')</div><div class='del'>-['error', 'info', 'question', 'warning'].each {|icon|</div><div class='del'>-  TkRadioButton.new($msgbox_leftframe, 'text'=&gt;icon, 'variable'=&gt;$msgboxIcon, </div><div class='del'>-                    'relief'=&gt;'flat', 'value'=&gt;icon, 'width'=&gt;16, </div><div class='del'>-                    'anchor'=&gt;'w').pack('side'=&gt;'top', 'pady'=&gt;2, </div><div class='del'>-                                        'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkLabel.new($msgbox_rightframe, 'text'=&gt;'Type').pack('side'=&gt;'top')</div><div class='del'>-TkFrame.new($msgbox_rightframe, 'relief'=&gt;'ridge', 'bd'=&gt;1, 'height'=&gt;2)\</div><div class='del'>-.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'no')</div><div class='del'>-</div><div class='del'>-$msgboxType = TkVariable.new('ok')</div><div class='del'>-['abortretryignore', 'ok', 'okcancel', </div><div class='del'>-  'retrycancel', 'yesno', 'yesnocancel'].each {|type|</div><div class='del'>-  TkRadioButton.new($msgbox_rightframe, 'text'=&gt;type, 'variable'=&gt;$msgboxType, </div><div class='del'>-                    'relief'=&gt;'flat', 'value'=&gt;type, 'width'=&gt;16, </div><div class='del'>-                    'anchor'=&gt;'w').pack('side'=&gt;'top', 'pady'=&gt;2, </div><div class='del'>-                                        'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def showMessageBox(w)</div><div class='del'>-  button = Tk.messageBox('icon'=&gt;$msgboxIcon.value, 'type'=&gt;$msgboxType.value, </div><div class='del'>-                         'title'=&gt;'Message', 'parent'=&gt;w,</div><div class='del'>-                         'message'=&gt;"This is a \"#{$msgboxType.value}\" type messagebox with the \"#{$msgboxIcon.value}\" icon")</div><div class='del'>-</div><div class='del'>-  Tk.messageBox('icon'=&gt;'info', 'type'=&gt;'ok', 'parent'=&gt;w, </div><div class='del'>-                'message'=&gt;"You have selected  \"#{button}\"")</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/msgbox2.rb b/ext/tk/sample/demos-en/msgbox2.rb<br/>deleted file mode 100644<br/>index 6fe6c778b3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/msgbox2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/msgbox2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,91 +0,0 @@</div><div class='del'>-# msgbox2.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates message boxes of various type</div><div class='del'>-#</div><div class='del'>-# message boxes 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?($msgbox2_demo) &amp;&amp; $msgbox2_demo</div><div class='del'>-  $msgbox2_demo.destroy </div><div class='del'>-  $msgbox2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$msgbox2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Message Box Demonstration")</div><div class='del'>-  iconname("messagebox")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($msgbox2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'4i', 'justify'=&gt;'left',</div><div class='del'>-            'text'=&gt;"Choose the icon and type option of the message box. Then press the \"Message Box\" button to see the message box with both of a message and a detail.").pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|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 = $msgbox2_demo</div><div class='del'>-      $msgbox2_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 'msgbox2'}</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 'Message Box'</div><div class='del'>-    command proc{showMessageBox $msgbox2_demo}</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'>-$msgbox_leftframe  = TkFrame.new(base_frame)</div><div class='del'>-$msgbox_rightframe = TkFrame.new(base_frame)</div><div class='del'>-$msgbox_leftframe .pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y', </div><div class='del'>-                        'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-$msgbox_rightframe.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y', </div><div class='del'>-                        'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-TkLabel.new($msgbox_leftframe, 'text'=&gt;'Icon').pack('side'=&gt;'top')</div><div class='del'>-TkFrame.new($msgbox_leftframe, 'relief'=&gt;'ridge', 'bd'=&gt;1, 'height'=&gt;2)\</div><div class='del'>-.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'no')</div><div class='del'>-</div><div class='del'>-$msgboxIcon = TkVariable.new('info')</div><div class='del'>-['error', 'info', 'question', 'warning'].each {|icon|</div><div class='del'>-  TkRadioButton.new($msgbox_leftframe, 'text'=&gt;icon, 'variable'=&gt;$msgboxIcon, </div><div class='del'>-                    'relief'=&gt;'flat', 'value'=&gt;icon, 'width'=&gt;16, </div><div class='del'>-                    'anchor'=&gt;'w').pack('side'=&gt;'top', 'pady'=&gt;2, </div><div class='del'>-                                        'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkLabel.new($msgbox_rightframe, 'text'=&gt;'Type').pack('side'=&gt;'top')</div><div class='del'>-TkFrame.new($msgbox_rightframe, 'relief'=&gt;'ridge', 'bd'=&gt;1, 'height'=&gt;2)\</div><div class='del'>-.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'no')</div><div class='del'>-</div><div class='del'>-$msgboxType = TkVariable.new('ok')</div><div class='del'>-['abortretryignore', 'ok', 'okcancel', </div><div class='del'>-  'retrycancel', 'yesno', 'yesnocancel'].each {|type|</div><div class='del'>-  TkRadioButton.new($msgbox_rightframe, 'text'=&gt;type, 'variable'=&gt;$msgboxType, </div><div class='del'>-                    'relief'=&gt;'flat', 'value'=&gt;type, 'width'=&gt;16, </div><div class='del'>-                    'anchor'=&gt;'w').pack('side'=&gt;'top', 'pady'=&gt;2, </div><div class='del'>-                                        'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def showMessageBox(w)</div><div class='del'>-  button = Tk.messageBox('icon'=&gt;$msgboxIcon.value, 'type'=&gt;$msgboxType.value, </div><div class='del'>-                         'title'=&gt;'Message', 'parent'=&gt;w,</div><div class='del'>-                         'message'=&gt;"\"#{$msgboxType.value}\" Type MessageBox",</div><div class='del'>-                         'detail'=&gt;"This is a \"#{$msgboxType.value}\" type messagebox with the \"#{$msgboxIcon.value}\" icon. Please click one of the following button.")</div><div class='del'>-</div><div class='del'>-  Tk.messageBox('icon'=&gt;'info', 'type'=&gt;'ok', 'parent'=&gt;w, </div><div class='del'>-                'message'=&gt;"You have selected  \"#{button}\"")</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/paned1.rb b/ext/tk/sample/demos-en/paned1.rb<br/>deleted file mode 100644<br/>index 26941b84a8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/paned1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/paned1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,47 +0,0 @@</div><div class='del'>-# paned1.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# a paned window that separates two windows horizontally.</div><div class='del'>-#</div><div class='del'>-# based on "Id: paned1.tcl,v 1.1 2002/02/22 14:07:01 dkf Exp"</div><div class='del'>-</div><div class='del'>-if defined?($paned1_demo) &amp;&amp; $paned1_demo</div><div class='del'>-  $paned1_demo.destroy </div><div class='del'>-  $paned1_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$paned1_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Horizontal Paned Window Demonstration")</div><div class='del'>-  iconname("paned1")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($paned1_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </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'>-The sash between the two coloured windows below can be used to divide the area between them.  Use the left mouse button to resize without redrawing by just moving the sash, and use the middle mouse button to resize opaquely (always redrawing the windows in each position.)</div><div class='del'>-If your Tk library linked to Ruby doesn't include a 'panedwindow', this demo doesn't work. Please use later version of Tk which supports a 'panedwindow'.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-# The bottom buttons</div><div class='del'>-TkFrame.new(base_frame){|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'>-                 $paned1_demo.destroy</div><div class='del'>-                 $paned1_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 'paned1'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkPanedwindow.new(base_frame, :orient=&gt;:horizontal){|f|</div><div class='del'>-  add(Tk::Label.new(f, :text=&gt;"This is the\nleft side", :bg=&gt;'yellow'), </div><div class='del'>-      Tk::Label.new(f, :text=&gt;"This is the\nright side", :bg=&gt;'cyan'))</div><div class='del'>-</div><div class='del'>-  pack(:side=&gt;:top, :expand=&gt;true, :fill=&gt;:both, :pady=&gt;2, :padx=&gt;'2m')</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/paned2.rb b/ext/tk/sample/demos-en/paned2.rb<br/>deleted file mode 100644<br/>index 0e62013886..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/paned2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/paned2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,94 +0,0 @@</div><div class='del'>-# paned2.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# a paned window that separates two windows vertically.</div><div class='del'>-#</div><div class='del'>-# based on "Id: paned2.tcl,v 1.1 2002/02/22 14:07:01 dkf Exp"</div><div class='del'>-</div><div class='del'>-if defined?($paned2_demo) &amp;&amp; $paned2_demo</div><div class='del'>-  $paned2_demo.destroy </div><div class='del'>-  $paned2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$paned2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Vertical Paned Window Demonstration")</div><div class='del'>-  iconname("paned2")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($paned2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </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'>-The sash between the two scrolled windows below can be used to divide the area between them.  Use the left mouse button to resize without redrawing by just moving the sash, and use the middle mouse button to resize opaquely (always redrawing the windows in each position.)</div><div class='del'>-If your Tk library linked to Ruby doesn't include a 'panedwindow', this demo doesn't work. Please use later version of Tk which supports a 'panedwindow'.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-# The bottom buttons</div><div class='del'>-TkFrame.new(base_frame){|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'>-                 $paned2_demo.destroy</div><div class='del'>-                 $paned2_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 'paned2'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-paneList = TkVariable.new  # define as normal variable (not array)</div><div class='del'>-paneList.value = [         # ruby's array --&gt; tcl's list</div><div class='del'>-    'List of Ruby/Tk Widgets',</div><div class='del'>-    'TkButton', </div><div class='del'>-    'TkCanvas', </div><div class='del'>-    'TkCheckbutton', </div><div class='del'>-    'TkEntry', </div><div class='del'>-    'TkFrame', </div><div class='del'>-    'TkLabel', </div><div class='del'>-    'TkLabelframe', </div><div class='del'>-    'TkListbox', </div><div class='del'>-    'TkMenu', </div><div class='del'>-    'TkMenubutton', </div><div class='del'>-    'TkMessage', </div><div class='del'>-    'TkPanedwindow', </div><div class='del'>-    'TkRadiobutton', </div><div class='del'>-    'TkScale', </div><div class='del'>-    'TkScrollbar', </div><div class='del'>-    'TkSpinbox', </div><div class='del'>-    'TkText', </div><div class='del'>-    'TkToplevel'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-# Create the pane itself</div><div class='del'>-TkPanedwindow.new(base_frame, :orient=&gt;:vertical){|f|</div><div class='del'>-  pack(:side=&gt;:top, :expand=&gt;true, :fill=&gt;:both, :pady=&gt;2, :padx=&gt;'2m')</div><div class='del'>-</div><div class='del'>-  add(TkFrame.new(f){|paned2_top|</div><div class='del'>-        TkListbox.new(paned2_top, :listvariable=&gt;paneList) {</div><div class='del'>-          # Invert the first item to highlight it</div><div class='del'>-          itemconfigure(0, :background=&gt;self.cget(:foreground), </div><div class='del'>-                           :foreground=&gt;self.cget(:background) )</div><div class='del'>-          yscrollbar(TkScrollbar.new(paned2_top).pack(:side=&gt;:right, </div><div class='del'>-                                                      :fill=&gt;:y))</div><div class='del'>-          pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-        }</div><div class='del'>-      }, </div><div class='del'>-</div><div class='del'>-      TkFrame.new(f, :height=&gt;120) {|paned2_bottom|</div><div class='del'>-        # The bottom window is a text widget with scrollbar</div><div class='del'>-        paned2_xscr = TkScrollbar.new(paned2_bottom)</div><div class='del'>-        paned2_yscr = TkScrollbar.new(paned2_bottom)</div><div class='del'>-        paned2_text = TkText.new(paned2_bottom, :width=&gt;30, :wrap=&gt;:non) {</div><div class='del'>-          insert('1.0', "This is just a normal text widget")</div><div class='del'>-          xscrollbar(paned2_xscr)</div><div class='del'>-          yscrollbar(paned2_yscr)</div><div class='del'>-        }</div><div class='del'>-        Tk.grid(paned2_text, paned2_yscr, :sticky=&gt;'nsew')</div><div class='del'>-        Tk.grid(paned2_xscr, :sticky=&gt;'nsew')</div><div class='del'>-        TkGrid.columnconfigure(paned2_bottom, 0, :weight=&gt;1)</div><div class='del'>-        TkGrid.rowconfigure(paned2_bottom, 0, :weight=&gt;1)</div><div class='del'>-      } )</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/pendulum.rb b/ext/tk/sample/demos-en/pendulum.rb<br/>deleted file mode 100644<br/>index 5f7d361170..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/pendulum.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/pendulum.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,240 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# This demonstration illustrates how Tcl/Tk can be used to construct</div><div class='del'>-# simulations of physical systems.</div><div class='del'>-# (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?($pendulum_demo) &amp;&amp; $pendulum_demo</div><div class='del'>-  $pendulum_demo.destroy </div><div class='del'>-  $pendulum_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# create toplevel widget</div><div class='del'>-$pendulum_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Pendulum Animation Demonstration")</div><div class='del'>-  iconname("pendulum")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($pendulum_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# create label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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 shows how Ruby/Tk can be used to carry out animations that are linked to simulations of physical systems. In the left canvas is a graphical representation of the physical system itself, a simple pendulum, and in the right canvas is a graph of the phase space of the system, which is a plot of the angle (relative to the vertical) against the angular velocity. The pendulum bob may be repositioned by clicking and dragging anywhere on the left canvas.'</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(base_frame) {|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 = $pendulum_demo</div><div class='del'>-      $pendulum_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 'pendulum'}</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 PendulumAnimationDemo</div><div class='del'>-  def initialize(frame)</div><div class='del'>-    # Create some structural widgets</div><div class='del'>-    @pane = TkPanedWindow.new(frame, :orient=&gt;:horizontal).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-#    @pane.add(@lf1 = TkLabelFrame.new(@pane, :text=&gt;'Pendulum Simulation'))</div><div class='del'>-#    @pane.add(@lf2 = TkLabelFrame.new(@pane, :text=&gt;'Phase Space'))</div><div class='del'>-    @lf1 = TkLabelFrame.new(@pane, :text=&gt;'Pendulum Simulation')</div><div class='del'>-    @lf2 = TkLabelFrame.new(@pane, :text=&gt;'Phase Space')</div><div class='del'>-</div><div class='del'>-    # Create the canvas containing the graphical representation of the</div><div class='del'>-    # simulated system.</div><div class='del'>-    @c = TkCanvas.new(@lf1, :width=&gt;320, :height=&gt;200, :background=&gt;'white', </div><div class='del'>-                      :borderwidth=&gt;2, :relief=&gt;:sunken)</div><div class='del'>-    TkcText.new(@c, 5, 5, :anchor=&gt;:nw, </div><div class='del'>-                :text=&gt;'Click to Adjust Bob Start Position')</div><div class='del'>-    # Coordinates of these items don't matter; they will be set properly below</div><div class='del'>-    @plate = TkcLine.new(@c, 0, 25, 320, 25, :width=&gt;2, :fill=&gt;'grey50')</div><div class='del'>-    @rod = TkcLine.new(@c, 1, 1, 1, 1, :width=&gt;3, :fill=&gt;'black')</div><div class='del'>-    @bob = TkcOval.new(@c, 1, 1, 2, 2, </div><div class='del'>-                       :width=&gt;3, :fill=&gt;'yellow', :outline=&gt;'black')</div><div class='del'>-    TkcOval.new(@c, 155, 20, 165, 30, :fill=&gt;'grey50', :outline=&gt;'')</div><div class='del'>-</div><div class='del'>-    # pack</div><div class='del'>-    @c.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    # Create the canvas containing the phase space graph; this consists of</div><div class='del'>-    # a line that gets gradually paler as it ages, which is an extremely</div><div class='del'>-    # effective visual trick.</div><div class='del'>-    @k = TkCanvas.new(@lf2, :width=&gt;320, :height=&gt;200, :background=&gt;'white', </div><div class='del'>-                      :borderwidth=&gt;2, :relief=&gt;:sunken)</div><div class='del'>-    @y_axis = TkcLine.new(@k, 160, 200, 160, 0, :fill=&gt;'grey75', :arrow=&gt;:last)</div><div class='del'>-    @x_axis = TkcLine.new(@k, 0, 100, 320, 100, :fill=&gt;'grey75', :arrow=&gt;:last)</div><div class='del'>-</div><div class='del'>-    @graph = {}</div><div class='del'>-    90.step(0, -10){|i|</div><div class='del'>-      # Coordinates of these items don't matter; </div><div class='del'>-      # they will be set properly below</div><div class='del'>-      @graph[i] = TkcLine.new(@k, 0, 0, 1, 1, :smooth=&gt;true, :fill=&gt;"grey#{i}")</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # labels</div><div class='del'>-    @label_theta = TkcText.new(@k, 0, 0, :anchor=&gt;:ne, </div><div class='del'>-                               :text=&gt;'q', :font=&gt;'Symbol 8')</div><div class='del'>-    @label_dtheta = TkcText.new(@k, 0, 0, :anchor=&gt;:ne, </div><div class='del'>-                               :text=&gt;'dq', :font=&gt;'Symbol 8')</div><div class='del'>-</div><div class='del'>-    # pack</div><div class='del'>-    @k.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    # Initialize some variables</div><div class='del'>-    @points = []</div><div class='del'>-    @theta = 45.0</div><div class='del'>-    @dTheta = 0.0</div><div class='del'>-    @length = 150</div><div class='del'>-</div><div class='del'>-    # animation loop</div><div class='del'>-    @timer = TkTimer.new(15){ repeat }</div><div class='del'>-</div><div class='del'>-    # binding</div><div class='del'>-    @c.bindtags_unshift(btag = TkBindTag.new)</div><div class='del'>-    btag.bind('Destroy'){ @timer.stop }</div><div class='del'>-    btag.bind('1', proc{|x, y| @timer.stop; showPendulum(x.to_i, y.to_i)}, </div><div class='del'>-              '%x %y')</div><div class='del'>-    btag.bind('B1-Motion', proc{|x, y| showPendulum(x.to_i, y.to_i)}, '%x %y')</div><div class='del'>-    btag.bind('ButtonRelease-1', </div><div class='del'>-              proc{|x, y| showPendulum(x.to_i, y.to_i); @timer.start }, </div><div class='del'>-              '%x %y')</div><div class='del'>-</div><div class='del'>-    btag.bind('Configure', proc{|w| @plate.coords(0, 25, w.to_i, 25)}, '%w')</div><div class='del'>-</div><div class='del'>-    @k.bind('Configure', proc{|h, w| </div><div class='del'>-              h = h.to_i</div><div class='del'>-              w = w.to_i</div><div class='del'>-              @psh = h/2; </div><div class='del'>-              @psw = w/2</div><div class='del'>-              @x_axis.coords(2, @psh, w-2, @psh)</div><div class='del'>-              @y_axis.coords(@psw, h-2, @psw, 2)</div><div class='del'>-              @label_theta.coords(@psw-4, 6)</div><div class='del'>-              @label_dtheta.coords(w-6, @psh+4)</div><div class='del'>-            }, '%h %w')</div><div class='del'>-</div><div class='del'>-    # add</div><div class='del'>-    Tk.update</div><div class='del'>-    @pane.add(@lf1)</div><div class='del'>-    @pane.add(@lf2)</div><div class='del'>-</div><div class='del'>-    # init display</div><div class='del'>-    showPendulum</div><div class='del'>-</div><div class='del'>-    # animation start</div><div class='del'>-    @timer.start(500)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This procedure makes the pendulum appear at the correct place on the</div><div class='del'>-  # canvas. If the additional arguments x, y are passed instead of computing </div><div class='del'>-  # the position of the pendulum from the length of the pendulum rod and its </div><div class='del'>-  # angle, the length and angle are computed in reverse from the given </div><div class='del'>-  # location (which is taken to be the centre of the pendulum bob.)</div><div class='del'>-  def showPendulum(x=nil, y=nil)</div><div class='del'>-    if x &amp;&amp; y &amp;&amp; (x != 160 || y != 25)</div><div class='del'>-      @dTheta = 0.0</div><div class='del'>-      x2 = x - 160</div><div class='del'>-      y2 = y - 25</div><div class='del'>-      @length = Math.hypot(x2, y2)</div><div class='del'>-      @theta = Math.atan2(x2,y2)*180/Math::PI</div><div class='del'>-    else</div><div class='del'>-      angle = @theta*Math::PI/180</div><div class='del'>-      x = 160 + @length*Math.sin(angle)</div><div class='del'>-      y = 25 + @length*Math.cos(angle)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @rod.coords(160, 25, x, y)</div><div class='del'>-    @bob.coords(x-15, y-15, x+15, y+15)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Update the phase-space graph according to the current angle and the</div><div class='del'>-  # rate at which the angle is changing (the first derivative with</div><div class='del'>-  # respect to time.)</div><div class='del'>-  def showPhase</div><div class='del'>-    unless @psw &amp;&amp; @psh</div><div class='del'>-      @psw = @k.width/2</div><div class='del'>-      @psh = @k.height/2</div><div class='del'>-    end</div><div class='del'>-    @points &lt;&lt; @theta + @psw &lt;&lt; -20*@dTheta + @psh</div><div class='del'>-    if @points.length &gt; 100</div><div class='del'>-      @points = @points[-100..-1]</div><div class='del'>-    end</div><div class='del'>-    (0...100).step(10){|i|</div><div class='del'>-      first = - i</div><div class='del'>-      last = 11 - i</div><div class='del'>-      last = -1 if last &gt;= 0</div><div class='del'>-      next if first &gt; last</div><div class='del'>-      lst = @points[first..last]</div><div class='del'>-      @graph[i].coords(lst) if lst &amp;&amp; lst.length &gt;= 4</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This procedure is the "business" part of the simulation that does</div><div class='del'>-  # simple numerical integration of the formula for a simple rotational</div><div class='del'>-  # pendulum.</div><div class='del'>-  def recomputeAngle</div><div class='del'>-    scaling = 3000.0/@length/@length</div><div class='del'>-</div><div class='del'>-    # To estimate the integration accurately, we really need to</div><div class='del'>-    # compute the end-point of our time-step.  But to do *that*, we</div><div class='del'>-    # need to estimate the integration accurately!  So we try this</div><div class='del'>-    # technique, which is inaccurate, but better than doing it in a</div><div class='del'>-    # single step.  What we really want is bound up in the</div><div class='del'>-    # differential equation:</div><div class='del'>-    #       ..             - sin theta</div><div class='del'>-    #      theta + theta = -----------</div><div class='del'>-    #                         length</div><div class='del'>-    # But my math skills are not good enough to solve this!</div><div class='del'>-</div><div class='del'>-    # first estimate</div><div class='del'>-    firstDDTheta = -Math.sin(@theta * Math::PI/180) * scaling</div><div class='del'>-    midDTheta = @dTheta + firstDDTheta</div><div class='del'>-    midTheta = @theta + (@dTheta + midDTheta)/2</div><div class='del'>-    # second estimate</div><div class='del'>-    midDDTheta = -Math.sin(midTheta * Math::PI/180) * scaling</div><div class='del'>-    midDTheta = @dTheta + (firstDDTheta + midDDTheta)/2</div><div class='del'>-    midTheta = @theta + (@dTheta + midDTheta)/2</div><div class='del'>-    # Now we do a double-estimate approach for getting the final value</div><div class='del'>-    # first estimate</div><div class='del'>-    midDDTheta = -Math.sin(midTheta * Math::PI/180) * scaling</div><div class='del'>-    lastDTheta = midDTheta + midDDTheta</div><div class='del'>-    lastTheta = midTheta + (midDTheta+ lastDTheta)/2</div><div class='del'>-    # second estimate</div><div class='del'>-    lastDDTheta = -Math.sin(lastTheta * Math::PI/180) * scaling</div><div class='del'>-    lastDTheta = midDTheta + (midDDTheta + lastDDTheta)/2</div><div class='del'>-    lastTheta = midTheta + (midDTheta + lastDTheta)/2</div><div class='del'>-    # Now put the values back in our globals</div><div class='del'>-    @dTheta = lastDTheta</div><div class='del'>-    @theta = lastTheta</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This method ties together the simulation engine and the graphical</div><div class='del'>-  # display code that visualizes it.</div><div class='del'>-  def repeat</div><div class='del'>-    # Simulate</div><div class='del'>-    recomputeAngle</div><div class='del'>-</div><div class='del'>-    # Update the display</div><div class='del'>-    showPendulum</div><div class='del'>-    showPhase</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'>-PendulumAnimationDemo.new(base_frame)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/plot.rb b/ext/tk/sample/demos-en/plot.rb<br/>deleted file mode 100644<br/>index 628c9df584..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/plot.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/plot.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,124 +0,0 @@</div><div class='del'>-# plot.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a canvas widget showing a 2-D</div><div class='del'>-# plot with data points that can be dragged with the mouse.</div><div class='del'>-#</div><div class='del'>-# 2-D plot 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?($plot_demo) &amp;&amp; $plot_demo</div><div class='del'>-  $plot_demo.destroy </div><div class='del'>-  $plot_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$plot_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Plot Demonstration")</div><div class='del'>-  iconname("Plot")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($plot_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'4i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"This window displays a canvas widget containing a simple 2-dimensional plot.  You can doctor the data by dragging any of the points with mouse button 1."){</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'>-$plot_buttons = TkFrame.new(base_frame) {|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 = $plot_demo</div><div class='del'>-      $plot_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 'plot'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$plot_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# font </div><div class='del'>-plotFont = '-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*'</div><div class='del'>-</div><div class='del'>-# canvas </div><div class='del'>-$plot_canvas = TkCanvas.new(base_frame,'relief'=&gt;'raised','width'=&gt;450,'height'=&gt;300)</div><div class='del'>-$plot_canvas.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-# plot </div><div class='del'>-TkcLine.new($plot_canvas, 100, 250, 400, 250, 'width'=&gt;2)</div><div class='del'>-TkcLine.new($plot_canvas, 100, 250, 100,  50, 'width'=&gt;2)</div><div class='del'>-TkcText.new($plot_canvas, 225, 20, </div><div class='del'>-            'text'=&gt;"A Simple Plot", 'font'=&gt;plotFont, 'fill'=&gt;'brown')</div><div class='del'>-</div><div class='del'>-(0..10).each {|i|</div><div class='del'>-  x = 100 + (i * 30)</div><div class='del'>-  TkcLine.new($plot_canvas, x, 250, x, 245, 'width'=&gt;2)</div><div class='del'>-  TkcText.new($plot_canvas, x, 254, </div><div class='del'>-              'text'=&gt;10*i, 'font'=&gt;plotFont, 'anchor'=&gt;'n')</div><div class='del'>-}</div><div class='del'>-(0..5).each {|i|</div><div class='del'>-  y = 250 - (i * 40)</div><div class='del'>-  TkcLine.new($plot_canvas, 100, y, 105, y, 'width'=&gt;2)</div><div class='del'>-  TkcText.new($plot_canvas, 96, y, </div><div class='del'>-              'text'=&gt;"#{i*50}.0", 'font'=&gt;plotFont, 'anchor'=&gt;'e')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]]</div><div class='del'>-  x = 100 + (3*xx)</div><div class='del'>-  y = 250 - (4*yy)/5</div><div class='del'>-  item = TkcOval.new($plot_canvas, x-6, y-6, x+6, y+6, </div><div class='del'>-                     'width'=&gt;1, 'outline'=&gt;'black', 'fill'=&gt;'SkyBlue2')</div><div class='del'>-  item.addtag 'point'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$plot_canvas.itembind('point', 'Any-Enter', </div><div class='del'>-                      proc{$plot_canvas.itemconfigure 'current','fill','red'})</div><div class='del'>-$plot_canvas.itembind('point', 'Any-Leave', </div><div class='del'>-                      proc{$plot_canvas.itemconfigure 'current','fill','SkyBlue2'})</div><div class='del'>-$plot_canvas.itembind('point', '1', </div><div class='del'>-                      proc{|x,y| plotDown $plot_canvas,x,y}, "%x %y")</div><div class='del'>-$plot_canvas.itembind('point', 'ButtonRelease-1', </div><div class='del'>-                      proc{$plot_canvas.dtag 'selected'})</div><div class='del'>-$plot_canvas.bind('B1-Motion', </div><div class='del'>-                  proc{|x,y| plotMove $plot_canvas,x,y}, "%x %y")</div><div class='del'>-</div><div class='del'>-$plot = {'lastX'=&gt;0, 'lastY'=&gt;0}</div><div class='del'>-</div><div class='del'>-# plotDown --</div><div class='del'>-# This method is invoked when the mouse is pressed over one of the </div><div class='del'>-# data points.  It sets up state to allow the point to be dragged.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# x, y -        The coordinates of the mouse press.</div><div class='del'>-</div><div class='del'>-def plotDown (w, x, y)</div><div class='del'>-  w.dtag 'selected'</div><div class='del'>-  w.addtag_withtag 'selected', 'current'</div><div class='del'>-  w.raise 'current'</div><div class='del'>-  $plot['lastX'] = x</div><div class='del'>-  $plot['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# plotMove --</div><div class='del'>-# This method is invoked during mouse motion events.  It drags the</div><div class='del'>-# current item.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def plotMove (w, x, y)</div><div class='del'>-  w.move 'selected', x - $plot['lastX'], y - $plot['lastY']</div><div class='del'>-  $plot['lastX'] = x</div><div class='del'>-  $plot['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/puzzle.rb b/ext/tk/sample/demos-en/puzzle.rb<br/>deleted file mode 100644<br/>index 43c61f519f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/puzzle.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/puzzle.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,134 +0,0 @@</div><div class='del'>-# puzzle.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a 15-puzzle game using a collection</div><div class='del'>-# of buttons.</div><div class='del'>-#</div><div class='del'>-# widet demo 'puzzle' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($puzzle_demo) &amp;&amp; $puzzle_demo</div><div class='del'>-  $puzzle_demo.destroy </div><div class='del'>-  $puzzle_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$puzzle_demo = TkToplevel.new {|w|</div><div class='del'>-  title("15-Puzzle Demonstration")</div><div class='del'>-  iconname("15-Puzzle")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($puzzle_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "A 15-puzzle appears below as a collection of buttons.  Click on any of the pieces next to the space, and that piece will slide over the space.  Continue this until the pieces are arranged in numerical order from upper-left to lower-right."</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(base_frame) {|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 = $puzzle_demo</div><div class='del'>-      $puzzle_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 'puzzle'}</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'>-</div><div class='del'>-# Special trick: select a darker color for the space by creating a</div><div class='del'>-# scrollbar widget and using its trough color.</div><div class='del'>-begin</div><div class='del'>-  if Tk.windowingsystem() == 'aqua'</div><div class='del'>-    frameWidth  = 168</div><div class='del'>-    frameHeight = 168</div><div class='del'>-  elsif Tk.default_widget_set == :Ttk</div><div class='del'>-    frameWidth  = 148</div><div class='del'>-    frameHeight = 124</div><div class='del'>-  else</div><div class='del'>-    frameWidth  = 120</div><div class='del'>-    frameHeight = 120</div><div class='del'>-  end</div><div class='del'>-rescue</div><div class='del'>-  frameWidth  = 120</div><div class='del'>-  frameHeight = 120</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# depend_on_button_width = true</div><div class='del'>-depend_on_button_width = false</div><div class='del'>- </div><div class='del'>-s = TkScrollbar.new(base_frame)</div><div class='del'>-base = TkFrame.new(base_frame) {</div><div class='del'>-  width  frameWidth</div><div class='del'>-  height frameHeight</div><div class='del'>-  borderwidth 2</div><div class='del'>-  relief 'sunken'</div><div class='del'>-  bg s['troughcolor']</div><div class='del'>-}</div><div class='del'>-s.destroy</div><div class='del'>-base.pack('side'=&gt;'top', 'padx'=&gt;'1c', 'pady'=&gt;'1c')</div><div class='del'>-</div><div class='del'>-def def_puzzleswitch_proc(w, num)</div><div class='del'>-  proc{puzzleSwitch w, num}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$xpos = {}</div><div class='del'>-$ypos = {}</div><div class='del'>-order = [3,1,6,2,5,7,15,13,4,11,8,9,14,10,12]</div><div class='del'>-(0..14).each{|i|</div><div class='del'>-  num = order[i]</div><div class='del'>-  $xpos[num] = (i % 4) * 0.25</div><div class='del'>-  $ypos[num] = (i / 4) * 0.25</div><div class='del'>-  TkButton.new(base) {|w|</div><div class='del'>-    relief 'raised'</div><div class='del'>-    text num</div><div class='del'>-    highlightthickness 0</div><div class='del'>-    command def_puzzleswitch_proc(w, num)</div><div class='del'>-    if depend_on_button_width &amp;&amp; (w.winfo_reqwidth * 4 &gt; base.width)</div><div class='del'>-      base.width = w.winfo_reqwidth * 4</div><div class='del'>-    end</div><div class='del'>-  }.place('relx'=&gt;$xpos[num], 'rely'=&gt;$ypos[num], </div><div class='del'>-          'relwidth'=&gt;0.25, 'relheight'=&gt;0.25)</div><div class='del'>-}</div><div class='del'>-$xpos['space'] = 0.75</div><div class='del'>-$ypos['space'] = 0.75</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# puzzleSwitch --</div><div class='del'>-# This procedure is invoked when the user clicks on a particular button;</div><div class='del'>-# if the button is next to the empty space, it moves the button into the</div><div class='del'>-# empty space.</div><div class='del'>-</div><div class='del'>-def puzzleSwitch(w, num)</div><div class='del'>-  if ( ($ypos[num] &gt;= ($ypos['space'] - 0.01))     \</div><div class='del'>-      &amp;&amp; ($ypos[num] &lt;= ($ypos['space'] + 0.01))   \</div><div class='del'>-      &amp;&amp; ($xpos[num] &gt;= ($xpos['space'] - 0.26))   \</div><div class='del'>-      &amp;&amp; ($xpos[num] &lt;= ($xpos['space'] + 0.26)))  \</div><div class='del'>-    || (($xpos[num] &gt;= ($xpos['space'] - 0.01))    \</div><div class='del'>-        &amp;&amp; ($xpos[num] &lt;= ($xpos['space'] + 0.01)) \</div><div class='del'>-        &amp;&amp; ($ypos[num] &gt;= ($ypos['space'] - 0.26)) \</div><div class='del'>-        &amp;&amp; ($ypos[num] &lt;= ($ypos['space'] + 0.26)))</div><div class='del'>-    tmp = $xpos['space']</div><div class='del'>-    $xpos['space'] = $xpos[num]</div><div class='del'>-    $xpos[num] = tmp</div><div class='del'>-    tmp = $ypos['space']</div><div class='del'>-    $ypos['space'] = $ypos[num]</div><div class='del'>-    $ypos[num] = tmp</div><div class='del'>-    w.place('relx'=&gt;$xpos[num], 'rely'=&gt;$ypos[num])</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/radio.rb b/ext/tk/sample/demos-en/radio.rb<br/>deleted file mode 100644<br/>index 25cfac2134..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/radio.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/radio.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,86 +0,0 @@</div><div class='del'>-# radio.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several radiobutton widgets.</div><div class='del'>-#</div><div class='del'>-# radiobutton 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?($radio_demo) &amp;&amp; $radio_demo</div><div class='del'>-  $radio_demo.destroy </div><div class='del'>-  $radio_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$radio_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Radiobutton Demonstration")</div><div class='del'>-  iconname("radio")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($radio_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Two groups of radiobuttons are displayed below.  If you click on a button then the button will become selected exclusively among all the buttons in its group.  A Tcl variable is associated with each group to indicate which of the group's buttons is selected.  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'>-size = TkVariable.new</div><div class='del'>-color = TkVariable.new</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-TkFrame.new(base_frame) {|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 = $radio_demo</div><div class='del'>-      $radio_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 'radio'}</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 Variables'</div><div class='del'>-    command proc{</div><div class='del'>-      showVars(base_frame, ['size', size], ['color', color])</div><div class='del'>-    }</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'>-f_left = TkFrame.new(base_frame)</div><div class='del'>-f_right = TkFrame.new(base_frame)</div><div class='del'>-f_left.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-f_right.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-# radiobutton </div><div class='del'>-[10, 12, 18, 24].each {|sz|</div><div class='del'>-  TkRadioButton.new(f_left) {</div><div class='del'>-    text "Point Size #{sz}"</div><div class='del'>-    variable size</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value sz</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'>-['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col|</div><div class='del'>-  TkRadioButton.new(f_right) {</div><div class='del'>-    text col</div><div class='del'>-    variable color</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value col.downcase</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='head'>diff --git a/ext/tk/sample/demos-en/radio2.rb b/ext/tk/sample/demos-en/radio2.rb<br/>deleted file mode 100644<br/>index 6c02aef0cf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/radio2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/radio2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,109 +0,0 @@</div><div class='del'>-# radio2.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several radiobutton widgets.</div><div class='del'>-#</div><div class='del'>-# radiobutton 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?($radio2_demo) &amp;&amp; $radio2_demo</div><div class='del'>-  $radio2_demo.destroy </div><div class='del'>-  $radio2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$radio2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Radiobutton Demonstration 2")</div><div class='del'>-  iconname("radio2")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($radio2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Three groups of radiobuttons are displayed below.  If you click on a button then the button will become selected exclusively among all the buttons in its group.  A Tcl variable is associated with each group to indicate which of the group's buttons is selected.  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'>-size = TkVariable.new</div><div class='del'>-color = TkVariable.new</div><div class='del'>-align = TkVariable.new</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-TkFrame.new(base_frame) {|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 = $radio2_demo</div><div class='del'>-      $radio2_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 'radio2'}</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 Variables'</div><div class='del'>-    command proc{</div><div class='del'>-      showVars(base_frame, </div><div class='del'>-               ['size', size], ['color', color], ['compound', align])</div><div class='del'>-    }</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'>-f_left  = TkLabelFrame.new(base_frame, 'text'=&gt;'Point Size', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_mid   = TkLabelFrame.new(base_frame, 'text'=&gt;'Color', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_right = TkLabelFrame.new(base_frame, 'text'=&gt;'Alignment', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_left.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-f_mid.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-f_right.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-# radiobutton </div><div class='del'>-[10, 12, 18, 24].each {|sz|</div><div class='del'>-  TkRadioButton.new(f_left) {</div><div class='del'>-    text "Point Size #{sz}"</div><div class='del'>-    variable size</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value sz</div><div class='del'>-  }.pack('side'=&gt;'top', 'pady'=&gt;2, 'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col|</div><div class='del'>-  TkRadioButton.new(f_mid) {</div><div class='del'>-    text col</div><div class='del'>-    variable color</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value col.downcase</div><div class='del'>-    anchor 'w'</div><div class='del'>-  }.pack('side'=&gt;'top', 'pady'=&gt;2, 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label = TkLabel.new(f_right, 'text'=&gt;'Label', 'bitmap'=&gt;'questhead', </div><div class='del'>-label = Tk::Label.new(f_right, 'text'=&gt;'Label', 'bitmap'=&gt;'questhead', </div><div class='del'>-                    'compound'=&gt;'left')</div><div class='del'>-label.configure('width'=&gt;TkWinfo.reqwidth(label), 'compound'=&gt;'top')</div><div class='del'>-label.height(TkWinfo.reqheight(label))</div><div class='del'>-abtn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a|</div><div class='del'>-  lower = a.downcase</div><div class='del'>-  TkRadioButton.new(f_right, 'text'=&gt;a, 'variable'=&gt;align, 'relief'=&gt;'flat', </div><div class='del'>-                    'value'=&gt;lower, 'indicatoron'=&gt;0, 'width'=&gt;7, </div><div class='del'>-                    'command'=&gt;proc{label.compound(align.value)})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.grid('x', abtn[0])</div><div class='del'>-Tk.grid(abtn[1], label, abtn[2])</div><div class='del'>-Tk.grid('x', abtn[3])</div><div class='head'>diff --git a/ext/tk/sample/demos-en/radio3.rb b/ext/tk/sample/demos-en/radio3.rb<br/>deleted file mode 100644<br/>index 9c9d75ef4a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/radio3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/radio3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,117 +0,0 @@</div><div class='del'>-# radio3.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several radiobutton widgets.</div><div class='del'>-#</div><div class='del'>-# radiobutton 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?($radio3_demo) &amp;&amp; $radio3_demo</div><div class='del'>-  $radio3_demo.destroy </div><div class='del'>-  $radio3_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$radio3_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Radiobutton Demonstration 3")</div><div class='del'>-  iconname("radio3")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($radio3_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "Three groups of radiobuttons are displayed below.  If you click on a button then the button will become selected exclusively among all the buttons in its group.  A Tcl variable is associated with each group to indicate which of the group's buttons is selected.  When the 'Tristate' button is pressed, the radio buttons will display the tri-state mode. Selecting any radio button will return the buttons to their respective on/off state. Click the \"See Variables\" button to see the current values of the variables."</div><div class='del'>-}</div><div class='del'>-msg.grid(:row=&gt;0, :column=&gt;0, :columnspan=&gt;3, :sticky=&gt;'nsew')</div><div class='del'>-</div><div class='del'>-# variable</div><div class='del'>-size = TkVariable.new</div><div class='del'>-color = TkVariable.new</div><div class='del'>-align = TkVariable.new</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-TkFrame.new(base_frame) {|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(base_frame, ['size', size], </div><div class='del'>-                                 ['color', color], ['compound', align])</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 'radio3'}), </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 = $radio3_demo</div><div class='del'>-                        $radio3_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'>-  TkGrid(frame, :row=&gt;3, :column=&gt;0, :columnspan=&gt;3, :sticky=&gt;'nsew')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-f_left  = TkLabelFrame.new(base_frame, 'text'=&gt;'Point Size', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_mid   = TkLabelFrame.new(base_frame, 'text'=&gt;'Color', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_right = TkLabelFrame.new(base_frame, 'text'=&gt;'Alignment', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_left .grid('column'=&gt;0, 'row'=&gt;1, 'pady'=&gt;'.5c', 'padx'=&gt;'.5c', 'rowspan'=&gt;2)</div><div class='del'>-f_mid  .grid('column'=&gt;1, 'row'=&gt;1, 'pady'=&gt;'.5c', 'padx'=&gt;'.5c', 'rowspan'=&gt;2)</div><div class='del'>-f_right.grid('column'=&gt;2, 'row'=&gt;1, 'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-TkButton.new(base_frame, 'text'=&gt;'Tristate', </div><div class='del'>-             'command'=&gt;proc{size.value = 'multi'; color.value = 'multi'}){</div><div class='del'>-  grid('column'=&gt;2, 'row'=&gt;2, 'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# radiobutton </div><div class='del'>-[10, 12, 14, 18, 24].each {|sz|</div><div class='del'>-  TkRadioButton.new(f_left) {</div><div class='del'>-    text "Point Size #{sz}"</div><div class='del'>-    variable size</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value sz</div><div class='del'>-    tristatevalue 'multi'</div><div class='del'>-  }.pack('side'=&gt;'top', 'pady'=&gt;2, 'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col|</div><div class='del'>-  TkRadioButton.new(f_mid) {</div><div class='del'>-    text col</div><div class='del'>-    variable color</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value col.downcase</div><div class='del'>-    anchor 'w'</div><div class='del'>-    tristatevalue 'multi'</div><div class='del'>-    command proc{f_mid.fg(color.value)}</div><div class='del'>-  }.pack('side'=&gt;'top', 'pady'=&gt;2, 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label = TkLabel.new(f_right, 'text'=&gt;'Label', 'bitmap'=&gt;'questhead', </div><div class='del'>-label = Tk::Label.new(f_right, 'text'=&gt;'Label', 'bitmap'=&gt;'questhead', </div><div class='del'>-                    'compound'=&gt;'left')</div><div class='del'>-label.configure('width'=&gt;TkWinfo.reqwidth(label), 'compound'=&gt;'top')</div><div class='del'>-label.height(TkWinfo.reqheight(label))</div><div class='del'>-a_btn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a|</div><div class='del'>-  TkRadioButton.new(f_right, 'text'=&gt;a, 'variable'=&gt;align, 'relief'=&gt;'flat', </div><div class='del'>-                    'value'=&gt;a.downcase, 'indicatoron'=&gt;0, 'width'=&gt;7, </div><div class='del'>-                    'command'=&gt;proc{label.compound(align.value)})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.grid('x', a_btn[0])</div><div class='del'>-Tk.grid(a_btn[1], label, a_btn[2])</div><div class='del'>-Tk.grid('x', a_btn[3])</div><div class='head'>diff --git a/ext/tk/sample/demos-en/rmt b/ext/tk/sample/demos-en/rmt<br/>deleted file mode 100644<br/>index 73f631180a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/rmt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/rmt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,268 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-# rmt -- </div><div class='del'>-# This script implements a simple remote-control mechanism for </div><div class='del'>-# Tk applications.  It allows you to select an application and </div><div class='del'>-# then type commands to that application. </div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Rmt</div><div class='del'>-  def initialize(parent=nil)</div><div class='del'>-    win = self</div><div class='del'>-</div><div class='del'>-    unless parent</div><div class='del'>-      parent = TkRoot.new</div><div class='del'>-    end</div><div class='del'>-    root = TkWinfo.toplevel(parent)</div><div class='del'>-    root.minsize(1,1)</div><div class='del'>-</div><div class='del'>-    # The instance variable below keeps track of the remote application </div><div class='del'>-    # that we're sending to.  If it's an empty string then we execute </div><div class='del'>-    # the commands locally. </div><div class='del'>-    @app = 'local'</div><div class='del'>-    @mode = 'Ruby'</div><div class='del'>-</div><div class='del'>-    # The instance variable below keeps track of whether we're in the </div><div class='del'>-    # middle of executing a command entered via the text. </div><div class='del'>-    @executing = 0</div><div class='del'>-</div><div class='del'>-    # The instance variable below keeps track of the last command executed, </div><div class='del'>-    # so it can be re-executed in response to !! commands. </div><div class='del'>-    @lastCommand = ""</div><div class='del'>-</div><div class='del'>-    # Create menu bar.  Arrange to recreate all the information in the </div><div class='del'>-    # applications sub-menu whenever it is cascaded to. </div><div class='del'>-</div><div class='del'>-    TkFrame.new(root, 'relief'=&gt;'raised', 'bd'=&gt;2) {|f|</div><div class='del'>-      pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-      TkMenubutton.new(f, 'text'=&gt;'File', 'underline'=&gt;0) {|mb|</div><div class='del'>-	TkMenu.new(mb) {|mf|</div><div class='del'>-	  mb.menu(mf)</div><div class='del'>-	  TkMenu.new(mf) {|ma| </div><div class='del'>-	    postcommand proc{win.fillAppsMenu ma}</div><div class='del'>-	    mf.add('cascade', 'label'=&gt;'Select Application', </div><div class='del'>-		   'menu'=&gt;ma, 'underline'=&gt;0)</div><div class='del'>-	  }</div><div class='del'>-	  add('command', 'label'=&gt;'Quit', </div><div class='del'>-	      'command'=&gt;proc{root.destroy}, 'underline'=&gt;0)</div><div class='del'>-	}</div><div class='del'>-	pack('side'=&gt;'left')</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Create text window and scrollbar. </div><div class='del'>-</div><div class='del'>-    @txt = TkText.new(root, 'relief'=&gt;'sunken', 'bd'=&gt;2, 'setgrid'=&gt;true) {</div><div class='del'>-      yscrollbar(TkScrollbar.new(root){pack('side'=&gt;'right', 'fill'=&gt;'y')})</div><div class='del'>-      pack('side'=&gt;'left')</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @promptEnd = TkTextMark.new(@txt, 'insert')</div><div class='del'>-</div><div class='del'>-    # Create a binding to forward commands to the target application, </div><div class='del'>-    # plus modify many of the built-in bindings so that only information </div><div class='del'>-    # in the current command can be deleted (can still set the cursor </div><div class='del'>-    # earlier in the text and select and insert;  just can't delete).</div><div class='del'>-</div><div class='del'>-    @txt.bindtags([@txt, TkText, root, 'all'])</div><div class='del'>-    @txt.bind('Return', proc{</div><div class='del'>-		@txt.set_insert('end - 1c')</div><div class='del'>-		@txt.insert('insert', "\n")</div><div class='del'>-		win.invoke</div><div class='del'>-		Tk.callback_break</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Delete', proc{</div><div class='del'>-		begin</div><div class='del'>-		  @txt.tag_remove('sel', 'sel.first', @promptEnd)</div><div class='del'>-		rescue</div><div class='del'>-		end</div><div class='del'>-		if @txt.tag_nextrange('sel', '1.0', 'end') == []</div><div class='del'>-		  if @txt.compare('insert', '&lt;', @promptEnd)</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'>-    @txt.bind('BackSpace', proc{</div><div class='del'>-		begin</div><div class='del'>-		  @txt.tag_remove('sel', 'sel.first', @promptEnd)</div><div class='del'>-		rescue</div><div class='del'>-		end</div><div class='del'>-		if @txt.tag_nextrange('sel', '1.0', 'end') == []</div><div class='del'>-		  if @txt.compare('insert', '&lt;', @promptEnd)</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'>-    @txt.bind('Control-d', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Control-k', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;', @promptEnd)</div><div class='del'>-		  @txt.set_insert(@promptEnd)</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Control-t', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Meta-d', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Meta-BackSpace', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;=', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Control-h', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;=', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-</div><div class='del'>-    @txt.tag_configure('bold', 'font'=&gt;['Courier', 12, 'bold'])</div><div class='del'>-</div><div class='del'>-    @app = Tk.appname('rmt')</div><div class='del'>-    if (@app =~ /^rmt(.*)$/)</div><div class='del'>-      root.title("Tk Remote Controller#{$1}")</div><div class='del'>-      root.iconname("Tk Remote#{$1}")</div><div class='del'>-    end</div><div class='del'>-    prompt</div><div class='del'>-    @txt.focus</div><div class='del'>-    #@app = TkWinfo.appname(TkRoot.new)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tkTextInsert(w,s)</div><div class='del'>-    return if s == ""</div><div class='del'>-    begin</div><div class='del'>-      if w.compare('sel.first','&lt;=','insert') \</div><div class='del'>-	&amp;&amp; w.compare('sel.last','&gt;=','insert')</div><div class='del'>-	w.tag_remove('sel', 'sel.first', @promptEnd)</div><div class='del'>-	w.delete('sel.first', 'sel.last')</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    w.insert('insert', s)</div><div class='del'>-    w.see('insert')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The method below is used to print out a prompt at the </div><div class='del'>-  # insertion point (which should be at the beginning of a line </div><div class='del'>-  # right now).</div><div class='del'>-</div><div class='del'>-  def prompt</div><div class='del'>-    @txt.insert('insert', "#{@app}: ")</div><div class='del'>-    @promptEnd.set('insert')</div><div class='del'>-    @promptEnd.gravity = 'left'</div><div class='del'>-    @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The method below executes a command (it takes everything on the </div><div class='del'>-  # current line after the prompt and either sends it to the remote </div><div class='del'>-  # application or executes it locally, depending on "app".</div><div class='del'>-</div><div class='del'>-  def invoke</div><div class='del'>-    cmd = @txt.get(@promptEnd, 'insert')</div><div class='del'>-    @executing += 1</div><div class='del'>-    case (@mode)</div><div class='del'>-    when 'Tcl'</div><div class='del'>-      if Tk.info('complete', cmd)</div><div class='del'>-	if (cmd == "!!\n")</div><div class='del'>-	  cmd = @lastCommand</div><div class='del'>-	else</div><div class='del'>-	  @lastCommand = cmd</div><div class='del'>-	end</div><div class='del'>-	begin</div><div class='del'>-	  msg = Tk.appsend(@app, false, cmd)</div><div class='del'>-	rescue</div><div class='del'>-	  msg = "Error: #{$!}"</div><div class='del'>-	end</div><div class='del'>-	@txt.insert('insert', msg + "\n") if msg != ""</div><div class='del'>-	prompt</div><div class='del'>-	@promptEnd.set('insert')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when 'Ruby'</div><div class='del'>-      if (cmd == "!!\n")</div><div class='del'>-	cmd = @lastCommand</div><div class='del'>-      end</div><div class='del'>-      complete = true</div><div class='del'>-      begin</div><div class='del'>-	eval("proc{#{cmd}}")</div><div class='del'>-      rescue</div><div class='del'>-	complete = false</div><div class='del'>-      end</div><div class='del'>-      if complete</div><div class='del'>-	@lastCommand = cmd</div><div class='del'>-	begin</div><div class='del'>-#	  msg = Tk.appsend(@app, false, </div><div class='del'>-#			   'ruby', </div><div class='del'>-#			   '"(' + cmd.gsub(/[][$"]/, '\\\\\&amp;') + ').to_s"')</div><div class='del'>-	  msg = Tk.rb_appsend(@app, false, cmd)</div><div class='del'>-	rescue</div><div class='del'>-	  msg = "Error: #{$!}"</div><div class='del'>-	end</div><div class='del'>-	@txt.insert('insert', msg + "\n") if msg != ""</div><div class='del'>-	prompt</div><div class='del'>-	@promptEnd.set('insert')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @executing -= 1</div><div class='del'>-    @txt.yview_pickplace('insert')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The following method is invoked to change the application that</div><div class='del'>-  # we're talking to.  It also updates the prompt for the current </div><div class='del'>-  # command, unless we're in the middle of executing a command from </div><div class='del'>-  # the text item (in which case a new prompt is about to be output </div><div class='del'>-  # so there's no need to change the old one). </div><div class='del'>-</div><div class='del'>-  def newApp(appName, mode)</div><div class='del'>-    @app = appName</div><div class='del'>-    @mode = mode</div><div class='del'>-    if @executing == 0</div><div class='del'>-      @promptEnd.gravity = 'right'</div><div class='del'>-      @txt.delete("#{@promptEnd.path} linestart", @promptEnd)</div><div class='del'>-      @txt.insert(@promptEnd, "#{appName}: ")</div><div class='del'>-      @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd)</div><div class='del'>-      @promptEnd.gravity = 'left'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The method below will fill in the applications sub-menu with a list</div><div class='del'>-  # of all the applications that currently exist. </div><div class='del'>-</div><div class='del'>-  def fillAppsMenu(menu)</div><div class='del'>-    win = self</div><div class='del'>-    begin</div><div class='del'>-      menu.delete(0,'last')</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    TkWinfo.interps.sort.each{|ip|</div><div class='del'>-      begin</div><div class='del'>-	if Tk.appsend(ip, false, 'info commands ruby') == ""</div><div class='del'>-	  mode = 'Tcl'</div><div class='del'>-	else</div><div class='del'>-	  mode = 'Ruby'</div><div class='del'>-	end</div><div class='del'>-	menu.add('command', 'label'=&gt;format("%s    (#{mode}/Tk)", ip), </div><div class='del'>-		 'command'=&gt;proc{win.newApp ip, mode})</div><div class='del'>-      rescue</div><div class='del'>-	menu.add('command', 'label'=&gt;format("%s (unknown Tk)", ip), </div><div class='del'>-		 'command'=&gt;proc{win.newApp ip, mode}, 'state'=&gt;'disabled')</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    menu.add('command', 'label'=&gt;format("local    (Ruby/Tk)"), </div><div class='del'>-	     'command'=&gt;proc{win.newApp 'local', 'Ruby'})</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Rmt.new</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/rolodex b/ext/tk/sample/demos-en/rolodex<br/>deleted file mode 100644<br/>index 9a4030e902..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/rolodex?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/rolodex</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,320 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# rolodex --</div><div class='del'>-# This script is a part of Tom LaStrange's rolodex</div><div class='del'>-# </div><div class='del'>-# Copyright (C) 1998 by Takaaki Tateishi &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-# Time-stamp: "03/08/02 06:23:06 nagai"</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def show_help(topic,x=0,y=0)</div><div class='del'>-  if( topic.is_a?(TkWindow) )</div><div class='del'>-    w = TkWinfo.containing(x,y)</div><div class='del'>-    if( TkWinfo.exist?(w) )</div><div class='del'>-      topic = w</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  if( $helpTopics.include?(topic) )</div><div class='del'>-    msg = $helpTopics[topic]</div><div class='del'>-  else</div><div class='del'>-    msg = "Sorry, but no help is available for this topic"</div><div class='del'>-  end</div><div class='del'>-  TkDialog.new("title"=&gt;"Rolodex Help",</div><div class='del'>-	       "message"=&gt;"Information on #{topic}:\n\n#{msg}",</div><div class='del'>-	       "default_button"=&gt;0,</div><div class='del'>-	       "buttons"=&gt;["OK"])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fillCard</div><div class='del'>-  clearAction</div><div class='del'>-  $root.frame.entry[1].insert(0,"Takaaki Tateishi")</div><div class='del'>-  $root.frame.entry[2].insert(0,"Japan Advanced Institute of Science and Techonology")</div><div class='del'>-  $root.frame.entry[3].insert(0,"1-1 Asahidai, Tatsunokuchi")</div><div class='del'>-  $root.frame.entry[4].insert(0,"Ishikawa 923-1292, Japan")</div><div class='del'>-  $root.frame.entry[5].insert(0,"private")</div><div class='del'>-    $root.frame.entry[6].insert(0,"***-***-****")</div><div class='del'>-  $root.frame.entry[7].insert(0,"***-***-****")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def addAction</div><div class='del'>-  for i in 1..7</div><div class='del'>-    STDERR.print format("%-12s %s\n",</div><div class='del'>-			RolodexFrame::LABEL[i],</div><div class='del'>-			$root.frame.entry[i].value)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def clearAction</div><div class='del'>-  for i in 1..7</div><div class='del'>-    $root.frame.entry[i].delete(0,"end")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fileAction</div><div class='del'>-  TkDialog.new("title"=&gt;"File Selection",</div><div class='del'>-	       "message"=&gt;"This is a dummy file selection dialog box.\n",</div><div class='del'>-	       "default_button"=&gt;0,</div><div class='del'>-	       "buttons"=&gt;["OK"])</div><div class='del'>-  STDERR.print "dummy file name\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def deleteAction</div><div class='del'>-  result = TkDialog.new("title"=&gt;"Confirm Action",</div><div class='del'>-			"message"=&gt;"Are you sure?",</div><div class='del'>-			"default_button"=&gt;0,</div><div class='del'>-			"buttons"=&gt;["Cancel"])</div><div class='del'>-  if( result.value == 0 )</div><div class='del'>-    clearAction</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class RolodexFrame &lt; TkFrame</div><div class='del'>-  attr_reader :entry, :label</div><div class='del'>-</div><div class='del'>-  LABEL = ["","Name:","Address:","","","Home Phone:","Work Phone:","Fax:"]</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    self["relief"] = "flat"</div><div class='del'>-    </div><div class='del'>-    @i = []</div><div class='del'>-    @label = []</div><div class='del'>-    @entry = []</div><div class='del'>-    for i in 1..7</div><div class='del'>-      @i[i] = TkFrame.new(self)</div><div class='del'>-      @i[i].pack("side"=&gt;"top",</div><div class='del'>-		 "pady"=&gt;2,</div><div class='del'>-		 "anchor"=&gt;"e")</div><div class='del'>-      @label[i] = TkLabel.new(@i[i],</div><div class='del'>-			      "text"=&gt;LABEL[i],</div><div class='del'>-			      "anchor"=&gt;"e")</div><div class='del'>-      @entry[i] = TkEntry.new(@i[i],</div><div class='del'>-			      "width"=&gt;30,</div><div class='del'>-			      "relief"=&gt;"sunken")</div><div class='del'>-      @entry[i].pack("side"=&gt;"right")</div><div class='del'>-      @label[i].pack("side"=&gt;"right")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class RolodexButtons &lt; TkFrame</div><div class='del'>-  attr_reader :clear, :add, :search, :delete</div><div class='del'>-</div><div class='del'>-  def initialize(parent,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    @clear = TkButton.new(self,</div><div class='del'>-			  "text" =&gt; "Clear")</div><div class='del'>-    @add = TkButton.new(self,</div><div class='del'>-			"text" =&gt; "Add")</div><div class='del'>-    @search = TkButton.new(self,</div><div class='del'>-			   "text" =&gt; "Search")</div><div class='del'>-    @delete = TkButton.new(self,</div><div class='del'>-			   "text" =&gt; "Delete")</div><div class='del'>-    for w in [@clear,@add,@search,@delete]</div><div class='del'>-      w.pack("side"=&gt;"left", "padx"=&gt;2)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class RolodexMenuFrame &lt; TkFrame</div><div class='del'>-  attr_reader :file_menu, :help_menu, :file, :help</div><div class='del'>-</div><div class='del'>-  def initialize(parent,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    configure("relief"=&gt;"raised",</div><div class='del'>-	      "borderwidth"=&gt;1)</div><div class='del'>-</div><div class='del'>-    @file = TkMenubutton.new(self,</div><div class='del'>-			     "text"=&gt;"File",</div><div class='del'>-			     "underline"=&gt;0)</div><div class='del'>-    @file_menu = TkMenu.new(@file)</div><div class='del'>-    @file_menu.add("command",</div><div class='del'>-		   "label" =&gt; "Load ...",</div><div class='del'>-		   "command" =&gt; proc{fileAction},</div><div class='del'>-		   "underline" =&gt; 0)</div><div class='del'>-    @file_menu.add("command",</div><div class='del'>-		   "label" =&gt; "Exit",</div><div class='del'>-		   "command" =&gt; proc{$root.destroy},</div><div class='del'>-		   "underline" =&gt; 0)</div><div class='del'>-    @file.menu(@file_menu)</div><div class='del'>-    @file.pack("side"=&gt;"left")</div><div class='del'>-</div><div class='del'>-    @help = TkMenubutton.new(self,</div><div class='del'>-			     "text"=&gt;"Help",</div><div class='del'>-			     "underline"=&gt;0)</div><div class='del'>-    @help_menu = TkMenu.new(@help)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On Context...",</div><div class='del'>-		   "command"=&gt;proc{show_help("context")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On Help...",</div><div class='del'>-		   "command"=&gt;proc{show_help("help")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On Window...",</div><div class='del'>-		   "command"=&gt;proc{show_help("window")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On Keys...",</div><div class='del'>-		   "command"=&gt;proc{show_help("keys")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On version...",</div><div class='del'>-		   "command"=&gt;proc{show_help("version")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help.menu(@help_menu)</div><div class='del'>-    @help.pack("side"=&gt;"right")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Rolodex &lt; TkRoot</div><div class='del'>-  attr_reader :frame, :buttons, :menu</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @frame = RolodexFrame.new(self)</div><div class='del'>-    @frame.pack("side"=&gt;"top",</div><div class='del'>-		"fill"=&gt;"y",</div><div class='del'>-		"anchor"=&gt;"center")</div><div class='del'>-    @buttons = RolodexButtons.new(self)</div><div class='del'>-    @buttons.pack("side"=&gt;"bottom",</div><div class='del'>-		  "pady"=&gt;2,</div><div class='del'>-		  "anchor"=&gt;"center")</div><div class='del'>-    @menu = RolodexMenuFrame.new(self)</div><div class='del'>-    @menu.pack("before"=&gt;@frame,</div><div class='del'>-	       "side"=&gt;"top",</div><div class='del'>-	       "fill"=&gt;"x")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$root = Rolodex.new</div><div class='del'>-</div><div class='del'>-$root.buttons.delete.configure("command"=&gt;proc{deleteAction})</div><div class='del'>-$root.buttons.add.configure("command"=&gt;proc{addAction})</div><div class='del'>-$root.buttons.clear.configure("command"=&gt;proc{clearAction})</div><div class='del'>-$root.buttons.search.configure("command"=&gt;proc{addAction; fillCard})</div><div class='del'>-</div><div class='del'>-$root.buttons.clear.configure("text"=&gt;"Clear   Ctrl+C")</div><div class='del'>-$root.bind("Control-c",proc{clearAction})</div><div class='del'>-</div><div class='del'>-$root.buttons.add.configure("text"=&gt;"Add   Ctrl+A")</div><div class='del'>-$root.bind("Control-a",proc{addAction})</div><div class='del'>-</div><div class='del'>-$root.buttons.search.configure("text"=&gt;"Search   Ctrl+S")</div><div class='del'>-$root.bind("Control-s",proc{addAction; fillCard})</div><div class='del'>-</div><div class='del'>-$root.buttons.delete.configure("text"=&gt;"Delete...   Ctrl+D")</div><div class='del'>-$root.bind("Control-d",proc{deleteAction})</div><div class='del'>-</div><div class='del'>-$root.menu.file_menu.entryconfigure(1, "accel"=&gt;"Ctrl+F")</div><div class='del'>-$root.bind("Control-f",proc{fileAction})</div><div class='del'>-</div><div class='del'>-$root.menu.file_menu.entryconfigure(2, "accel"=&gt;"Ctrl+Q")</div><div class='del'>-$root.bind("Control-q",proc{$root.destroy})</div><div class='del'>-</div><div class='del'>-$root.frame.entry[1].focus</div><div class='del'>-</div><div class='del'>-$root.bind("Any-F1",</div><div class='del'>-	   proc{|event| show_help(event.widget, event.x_root, event.y_root)})</div><div class='del'>-$root.bind("Any-Help",</div><div class='del'>-	   proc{|event| show_help(event.widget, event.x_root, event.y_root)})</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-$helpTopics = {}</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file] = &lt;&lt;EOF</div><div class='del'>-This is the "file" menu. It can be used to invoke\</div><div class='del'>-some overall operations on the rolodex applications,\</div><div class='del'>-such as loading a file or exiting.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file_menu.index(0)] = &lt;&lt;EOF</div><div class='del'>-The "Load" entry in the "File" menu posts a dialog box\</div><div class='del'>-that you can use to select a rolodex file</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file_menu.index(1)] = &lt;&lt;EOF</div><div class='del'>-The "Exit" entry in the "File" menu causes the rolodex\</div><div class='del'>-application to terminate</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[1]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the person's name</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[2]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the first line of the person's address</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[3]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the second line of the person's address</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[4]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the third line of the person's address</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[5]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the person's home phone number, or "private"\</div><div class='del'>-if the person doesn't want his or he number publicized</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[6]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the person's work phone number</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[7]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the phone number for the person's FAX machine</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["context"] = &lt;&lt;EOF</div><div class='del'>-Unfortunately, this application doesn't support context-sensitive\</div><div class='del'>-help in the usual way, because when this demo was written Ruby/Tk\</div><div class='del'>-didn't have a grab mechanism and this is needed for context-sensitive\</div><div class='del'>-help. Instead, you can achive much the same effect by simply moving\</div><div class='del'>-the mouse over the window you're curious about and pressing the\</div><div class='del'>-Help or F1 keys. You can do this anytime.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["help"] = &lt;&lt;EOF</div><div class='del'>-This application provides only very crude help. Besides the\</div><div class='del'>-entries in this menu, you can get help on individual windows\</div><div class='del'>-by moving the mouse cursor over the window and pressing the\</div><div class='del'>-Help or F1 keys.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["window"] = &lt;&lt;EOF</div><div class='del'>-This window is a dummy rolodex application created as part of\</div><div class='del'>-Tom LaStrange's toolkit benchmark. It doesn't really do anything\</div><div class='del'>-useful except to demonstrate a few features of the Ruby/Tk.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["keys"] = &lt;&lt;EOF</div><div class='del'>-The following accelerator keys are defined for this application\</div><div class='del'>-(in addition to those already available for the entry windows):</div><div class='del'>-Ctrl+A:		Add</div><div class='del'>-Ctrl+C:		Clear</div><div class='del'>-Ctrl+D:		Delete</div><div class='del'>-Ctrl+F:		Enter file name</div><div class='del'>-Ctrl+Q:		Exit application (quit)</div><div class='del'>-Ctrl+S:		Search (dummy operation)</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["version"] = &lt;&lt;EOF</div><div class='del'>-This is version 1.0.1.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ruler.rb b/ext/tk/sample/demos-en/ruler.rb<br/>deleted file mode 100644<br/>index 26cd4f3b1c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ruler.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ruler.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,205 +0,0 @@</div><div class='del'>-# ruler.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a canvas widget that displays a ruler</div><div class='del'>-# with tab stops that can be set, moved, and deleted.</div><div class='del'>-#</div><div class='del'>-# ruler widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# rulerMkTab --</div><div class='del'>-# This method creates a new triangular polygon in a canvas to</div><div class='del'>-# represent a tab stop.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas window.</div><div class='del'>-# x, y -        Coordinates at which to create the tab stop.</div><div class='del'>-</div><div class='del'>-def rulerMkTab(c,x,y)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  TkcPolygon.new(c, x, y, x+v.size, y+v.size, x-v.size, y+v.size)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($ruler_demo) &amp;&amp; $ruler_demo</div><div class='del'>-  $ruler_demo.destroy </div><div class='del'>-  $ruler_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$ruler_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Ruler Demonstration")</div><div class='del'>-  iconname("ruler")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($ruler_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'5i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"This canvas widget shows a mock-up of a ruler.  You can create tab stops by dragging them out of the well to the right of the ruler.  You can also drag existing tab stops.  If you drag a tab stop far enough up or down so that it turns dim, it will be deleted when you release the mouse button."){</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'>-$ruler_buttons = TkFrame.new(base_frame) {|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 = $ruler_demo</div><div class='del'>-      $ruler_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 'ruler'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$ruler_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# canvas </div><div class='del'>-$ruler_canvas = TkCanvas.new(base_frame, 'width'=&gt;'14.8c', 'height'=&gt;'2.5c')</div><div class='del'>-$ruler_canvas.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-unless Struct.const_defined?("RulerInfo")</div><div class='del'>-  $demo_rulerInfo = Struct.new("RulerInfo", :grid, :left, :right, :x, :y, </div><div class='del'>-                               :top, :bottom, :size, :normalStyle, </div><div class='del'>-                               :activeStyle, :deleteStyle).new</div><div class='del'>-end</div><div class='del'>-$demo_rulerInfo.grid = '.25c'</div><div class='del'>-$demo_rulerInfo.left = TkWinfo.fpixels($ruler_canvas, '1c')</div><div class='del'>-$demo_rulerInfo.right = TkWinfo.fpixels($ruler_canvas, '13c')</div><div class='del'>-$demo_rulerInfo.top = TkWinfo.fpixels($ruler_canvas, '1c')</div><div class='del'>-$demo_rulerInfo.bottom = TkWinfo.fpixels($ruler_canvas, '1.5c')</div><div class='del'>-$demo_rulerInfo.size = TkWinfo.fpixels($ruler_canvas, '.2c')</div><div class='del'>-$demo_rulerInfo.normalStyle = {'fill'=&gt;'black'}</div><div class='del'>-if TkWinfo.depth($ruler_canvas) &gt; 1</div><div class='del'>-  $demo_rulerInfo.activeStyle = {'fill'=&gt;'red', 'stipple'=&gt;''}</div><div class='del'>-  $demo_rulerInfo.deleteStyle = {'fill'=&gt;'red', </div><div class='del'>-    'stipple'=&gt;'@'+[$demo_dir, '..', </div><div class='del'>-                     'images', 'gray25.xbm'].join(File::Separator)}</div><div class='del'>-else</div><div class='del'>-  $demo_rulerInfo.activeStyle = {'fill'=&gt;'black', 'stipple'=&gt;''}</div><div class='del'>-  $demo_rulerInfo.deleteStyle = {'fill'=&gt;'black', </div><div class='del'>-    'stipple'=&gt;'@'+[$demo_dir, '..', </div><div class='del'>-                     'images', 'gray25.xbm'].join(File::Separator)}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkcLine.new($ruler_canvas, </div><div class='del'>-            '1c', '0.5c', '1c', '1c', '13c', '1c', '13c', '0.5c', 'width'=&gt;1)</div><div class='del'>-(0..11).each{|i|</div><div class='del'>-  x = i+1</div><div class='del'>-  TkcLine.new($ruler_canvas, "#{x}c", '1c', "#{x}c", '0.6c', 'width'=&gt;1)</div><div class='del'>-  TkcLine.new($ruler_canvas, "#{x}.25c", '1c', "#{x}.25c", '0.8c', 'width'=&gt;1)</div><div class='del'>-  TkcLine.new($ruler_canvas, "#{x}.5c", '1c', "#{x}.5c", '0.7c', 'width'=&gt;1)</div><div class='del'>-  TkcLine.new($ruler_canvas, "#{x}.75c", '1c', "#{x}.75c", '0.8c', 'width'=&gt;1)</div><div class='del'>-  TkcText.new($ruler_canvas, "#{x}.15c", '0.75c', 'text'=&gt;i, 'anchor'=&gt;'sw')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$rulerTag_well = TkcTag.new($ruler_canvas)</div><div class='del'>-$ruler_canvas\</div><div class='del'>-.addtag_withtag($rulerTag_well,</div><div class='del'>-                TkcRectangle.new($ruler_canvas, </div><div class='del'>-                                 '13.2c', '1c', '13.8c', '0.5c', </div><div class='del'>-                                 'outline'=&gt;'black', </div><div class='del'>-                                 'fill'=&gt;($ruler_canvas\</div><div class='del'>-                                          .configinfo('background'))[4]) )</div><div class='del'>-$ruler_canvas\</div><div class='del'>-.addtag_withtag($rulerTag_well,</div><div class='del'>-                rulerMkTab($ruler_canvas, </div><div class='del'>-                           TkWinfo.pixels($ruler_canvas, '13.5c'), </div><div class='del'>-                           TkWinfo.pixels($ruler_canvas, '.65c') ) )</div><div class='del'>-</div><div class='del'>-$rulerTag_well.bind('1', proc{|x,y| rulerNewTab($ruler_canvas,x,y)}, '%x %y')</div><div class='del'>-$ruler_canvas.itembind('tab', '1', </div><div class='del'>-                       proc{|x,y| rulerSelectTab($ruler_canvas,x,y)}, '%x %y')</div><div class='del'>-$ruler_canvas.bind('B1-Motion', </div><div class='del'>-                   proc{|x,y| rulerMoveTab($ruler_canvas,x,y)}, '%x %y')</div><div class='del'>-$ruler_canvas.bind('Any-ButtonRelease-1', proc{rulerReleaseTab($ruler_canvas)})</div><div class='del'>-</div><div class='del'>-# rulerNewTab --</div><div class='del'>-# Does all the work of creating a tab stop, including creating the</div><div class='del'>-# triangle object and adding tags to it to give it tab behavior.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas window.</div><div class='del'>-# x, y -        The coordinates of the tab stop.</div><div class='del'>-</div><div class='del'>-def rulerNewTab(c,x,y)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  c.addtag_withtag('active', rulerMkTab(c,x,y))</div><div class='del'>-  c.addtag_withtag('tab', 'active')</div><div class='del'>-  v.x = x</div><div class='del'>-  v.y = y</div><div class='del'>-  rulerMoveTab(c,x,y)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# rulerSelectTab --</div><div class='del'>-# This method is invoked when mouse button 1 is pressed over</div><div class='del'>-# a tab.  It remembers information about the tab so that it can</div><div class='del'>-# be dragged interactively.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas widget.</div><div class='del'>-# x, y -        The coordinates of the mouse (identifies the point by</div><div class='del'>-#               which the tab was picked up for dragging).</div><div class='del'>-</div><div class='del'>-def rulerSelectTab(c,x,y)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  v.x = c.canvasx(x, v.grid)</div><div class='del'>-  v.y = v.top+2</div><div class='del'>-  c.addtag_withtag('active', 'current')</div><div class='del'>-  c.itemconfigure('active', v.activeStyle)</div><div class='del'>-  c.raise('active')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# rulerMoveTab --</div><div class='del'>-# This method is invoked during mouse motion events to drag a tab.</div><div class='del'>-# It adjusts the position of the tab, and changes its appearance if</div><div class='del'>-# it is about to be dragged out of the ruler.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas widget.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def rulerMoveTab(c,x,y)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  return if c.find_withtag('active') == []</div><div class='del'>-  cx = c.canvasx(x,v.grid)</div><div class='del'>-  cy = c.canvasy(y)</div><div class='del'>-  cx = v.left if cx &lt; v.left</div><div class='del'>-  cx = v.right if cx &gt; v.right</div><div class='del'>-  if (cy &gt;= v.top &amp;&amp; cy &lt;= v.bottom)</div><div class='del'>-    cy = v.top+2</div><div class='del'>-    c.itemconfigure('active', v.activeStyle)</div><div class='del'>-  else</div><div class='del'>-    cy = cy-v.size-2</div><div class='del'>-    c.itemconfigure('active', v.deleteStyle)</div><div class='del'>-  end</div><div class='del'>-  c.move('active', cx-v.x, cy-v.y)</div><div class='del'>-  v.x = cx</div><div class='del'>-  v.y = cy</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# rulerReleaseTab --</div><div class='del'>-# This method is invoked during button release events that end</div><div class='del'>-# a tab drag operation.  It deselects the tab and deletes the tab if</div><div class='del'>-# it was dragged out of the ruler.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas widget.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def rulerReleaseTab(c)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  return if c.find_withtag('active') == []</div><div class='del'>-  if v.y != v.top+2</div><div class='del'>-    c.delete('active')</div><div class='del'>-  else</div><div class='del'>-    c.itemconfigure('active', v.normalStyle)</div><div class='del'>-    c.dtag('active')</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/sayings.rb b/ext/tk/sample/demos-en/sayings.rb<br/>deleted file mode 100644<br/>index 06ec7c1e75..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/sayings.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/sayings.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,106 +0,0 @@</div><div class='del'>-# sayings.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a listbox that can be scrolled</div><div class='del'>-# both horizontally and vertically.  It displays a collection of</div><div class='del'>-# well-known sayings.</div><div class='del'>-#</div><div class='del'>-# listbox widget demo 'sayings' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($sayings_demo) &amp;&amp; $sayings_demo</div><div class='del'>-  $sayings_demo.destroy </div><div class='del'>-  $sayings_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$sayings_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Listbox Demonstration (well-known sayings)")</div><div class='del'>-  iconname("sayings")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($sayings_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "The listbox below contains a collection of well-known sayings.  You can scan the list using either of the scrollbars or by dragging in the listbox window with button 2 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(base_frame) {|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 = $sayings_demo</div><div class='del'>-      $sayings_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 'sayings'}</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'>-sayings_lbox = nil</div><div class='del'>-TkFrame.new(base_frame, 'borderwidth'=&gt;10) {|w|</div><div class='del'>-  sv = TkScrollbar.new(w)</div><div class='del'>-  sh = TkScrollbar.new(w, 'orient'=&gt;'horizontal')</div><div class='del'>-  sayings_lbox = TkListbox.new(w) {</div><div class='del'>-    setgrid 1</div><div class='del'>-    width  20</div><div class='del'>-    height 10</div><div class='del'>-    yscrollcommand proc{|first,last| sv.set first,last}</div><div class='del'>-    xscrollcommand proc{|first,last| sh.set first,last}</div><div class='del'>-  }</div><div class='del'>-  sv.command(proc{|*args| sayings_lbox.yview(*args)})</div><div class='del'>-  sh.command(proc{|*args| sayings_lbox.xview(*args)})</div><div class='del'>-</div><div class='del'>-  if $tk_version =~ /^4\.[01]/</div><div class='del'>-    sv.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-    sh.pack('side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-    sayings_lbox.pack('expand'=&gt;'yes', 'fill'=&gt;'y')</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    sayings_lbox.grid('row'=&gt;0, 'column'=&gt;0, </div><div class='del'>-                      'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    sv.grid('row'=&gt;0, 'column'=&gt;1, </div><div class='del'>-            'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    sh.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(w, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(w, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'fill'=&gt;'y')</div><div class='del'>-</div><div class='del'>-sayings_lbox.insert(0,</div><div class='del'>-"Waste not, want not",</div><div class='del'>-"Early to bed and early to rise makes a man healthy, wealthy, and wise",</div><div class='del'>-"Ask not what your country can do for you, ask what you can do for your country",</div><div class='del'>-"I shall return",</div><div class='del'>-"NOT",</div><div class='del'>-"A picture is worth a thousand words",</div><div class='del'>-"User interfaces are hard to build",</div><div class='del'>-"Thou shalt not steal",</div><div class='del'>-"A penny for your thoughts",</div><div class='del'>-"Fool me once, shame on you;  fool me twice, shame on me",</div><div class='del'>-"Every cloud has a silver lining",</div><div class='del'>-"Where there's smoke there's fire",</div><div class='del'>-"It takes one to know one",</div><div class='del'>-"Curiosity killed the cat; but satisfaction brought it back",</div><div class='del'>-"Take this job and shove it",</div><div class='del'>-"Up a creek without a paddle",</div><div class='del'>-"I'm mad as hell and I'm not going to take it any more",</div><div class='del'>-"An apple a day keeps the doctor away",</div><div class='del'>-"Don't look a gift horse in the mouth"</div><div class='del'>-)</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/search.rb b/ext/tk/sample/demos-en/search.rb<br/>deleted file mode 100644<br/>index e1fc565e9d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/search.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/search.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,187 +0,0 @@</div><div class='del'>-# search.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a collection of widgets that</div><div class='del'>-# allow you to load a file into a text widget, then perform searches</div><div class='del'>-# on that file.</div><div class='del'>-#</div><div class='del'>-# Text Search widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# textLoadFile --</div><div class='del'>-# This method below loads a file into a text widget, discarding</div><div class='del'>-# the previous contents of the widget. Tags for the old widget are</div><div class='del'>-# not affected, however.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The window into which to load the file.  Must be a</div><div class='del'>-#               text widget.</div><div class='del'>-# file -        The name of the file to load.  Must be readable.</div><div class='del'>-</div><div class='del'>-def textLoadFile(w,file)</div><div class='del'>-  w.delete('1.0', 'end')</div><div class='del'>-  f = open(file, 'r')</div><div class='del'>-  while(!f.eof?)</div><div class='del'>-    w.insert('end', f.read(1000))</div><div class='del'>-  end</div><div class='del'>-  f.close</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# textSearch --</div><div class='del'>-# Search for all instances of a given string in a text widget and</div><div class='del'>-# apply a given tag to each instance found.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The window in which to search.  Must be a text widget.</div><div class='del'>-# string -      The string to search for.  The search is done using</div><div class='del'>-#               exact matching only;  no special characters.</div><div class='del'>-# tag -         Tag to apply to each instance of a matching string.</div><div class='del'>-</div><div class='del'>-def textSearch(w, string, tag)</div><div class='del'>-  tag.remove('0.0', 'end')</div><div class='del'>-  return if string == ""</div><div class='del'>-  cur = '1.0'</div><div class='del'>-  loop {</div><div class='del'>-    cur, len = w.search_with_length(string, cur, 'end')</div><div class='del'>-    break if cur == ""</div><div class='del'>-    tag.add(cur, "#{cur} + #{len} char")</div><div class='del'>-    cur = w.index("#{cur} + #{len} char")</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# textToggle --</div><div class='del'>-# This method is invoked repeatedly to invoke two commands at</div><div class='del'>-# periodic intervals.  It normally reschedules itself after each</div><div class='del'>-# execution but if an error occurs (e.g. because the window was</div><div class='del'>-# deleted) then it doesn't reschedule itself.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# cmd1 -        Command to execute when method is called.</div><div class='del'>-# sleep1 -      Ms to sleep after executing cmd1 before executing cmd2.</div><div class='del'>-# cmd2 -        Command to execute in the *next* invocation of this method.</div><div class='del'>-# sleep2 -      Ms to sleep after executing cmd2 before executing cmd1 again.</div><div class='del'>-</div><div class='del'>-def textToggle(cmd1,sleep1,cmd2,sleep2)</div><div class='del'>-  sleep_list = [sleep2, sleep1]</div><div class='del'>-  TkAfter.new(proc{sleep = sleep_list.shift; sleep_list.push(sleep); sleep}, </div><div class='del'>-              -1, cmd1, cmd2).start(sleep1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($search_demo) &amp;&amp; $search_demo</div><div class='del'>-  $search_demo.destroy </div><div class='del'>-  $search_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$search_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Search and Highlight")</div><div class='del'>-  iconname("search")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($search_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$search_buttons = TkFrame.new(base_frame) {|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 = $search_demo</div><div class='del'>-      $search_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 'search'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$search_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(base_frame) {|f|</div><div class='del'>-  TkLabel.new(f, 'text'=&gt;'File name:', </div><div class='del'>-              'width'=&gt;13, 'anchor'=&gt;'w').pack('side'=&gt;'left')</div><div class='del'>-  $search_fileName = TkVariable.new</div><div class='del'>-  TkEntry.new(f, 'width'=&gt;40, </div><div class='del'>-              'textvariable'=&gt;$search_fileName) {</div><div class='del'>-    pack('side'=&gt;'left')</div><div class='del'>-    bind('Return', proc{textLoadFile($search_text, $search_fileName.value)</div><div class='del'>-                        $search_string_entry.focus})</div><div class='del'>-    focus</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(f, 'text'=&gt;'Load File', </div><div class='del'>-               'command'=&gt;proc{textLoadFile($search_text, </div><div class='del'>-                                            $search_fileName.value)})\</div><div class='del'>-  .pack('side'=&gt;'left', 'pady'=&gt;5, 'padx'=&gt;10)</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|f|</div><div class='del'>-  TkLabel.new(f, 'text'=&gt;'Search string:', </div><div class='del'>-              'width'=&gt;13, 'anchor'=&gt;'w').pack('side'=&gt;'left')</div><div class='del'>-  $search_searchString = TkVariable.new</div><div class='del'>-  $search_string_entry = TkEntry.new(f, 'width'=&gt;40, </div><div class='del'>-                                     'textvariable'=&gt;$search_searchString) {</div><div class='del'>-    pack('side'=&gt;'left')</div><div class='del'>-    bind('Return', proc{textSearch($search_text, $search_searchString.value, </div><div class='del'>-                                   $search_Tag)})</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(f, 'text'=&gt;'Highlight', </div><div class='del'>-               'command'=&gt;proc{textSearch($search_text, </div><div class='del'>-                                          $search_searchString.value, </div><div class='del'>-                                          $search_Tag)}) {</div><div class='del'>-    pack('side'=&gt;'left', 'pady'=&gt;5, 'padx'=&gt;10)</div><div class='del'>-  }</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-$search_text = TkText.new(base_frame, 'setgrid'=&gt;true, 'wrap'=&gt;'word') {|t|</div><div class='del'>-  $search_Tag = TkTextTag.new(t)</div><div class='del'>-  TkScrollbar.new(base_frame, 'command'=&gt;proc{|*args| t.yview(*args)}) {|sc|</div><div class='del'>-    t.yscrollcommand(proc{|first,last| sc.set first,last})</div><div class='del'>-    pack('side'=&gt;'right', 'fill'=&gt;'y')</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'>-# Set up display styles for text highlighting.</div><div class='del'>-</div><div class='del'>-if TkWinfo.depth($search_demo) &gt; 1</div><div class='del'>-  textToggle(proc{</div><div class='del'>-               $search_Tag.configure('background'=&gt;'#ce5555', </div><div class='del'>-                                     'foreground'=&gt;'white')</div><div class='del'>-             },</div><div class='del'>-             800, </div><div class='del'>-             proc{</div><div class='del'>-               $search_Tag.configure('background'=&gt;'', 'foreground'=&gt;'')</div><div class='del'>-             },</div><div class='del'>-             200 )</div><div class='del'>-else</div><div class='del'>-  textToggle(proc{</div><div class='del'>-               $search_Tag.configure('background'=&gt;'black', </div><div class='del'>-                                     'foreground'=&gt;'white')</div><div class='del'>-             },</div><div class='del'>-             800, </div><div class='del'>-             proc{</div><div class='del'>-               $search_Tag.configure('background'=&gt;'', 'foreground'=&gt;'')</div><div class='del'>-             },</div><div class='del'>-             200 )</div><div class='del'>-end</div><div class='del'>-$search_text.insert('1.0', "\</div><div class='del'>-This window demonstrates how to use the tagging facilities in text \</div><div class='del'>-widgets to implement a searching mechanism.  First, type a file name \</div><div class='del'>-in the top entry, then type &lt;Return&gt; or click on \"Load File\".  Then \</div><div class='del'>-type a string in the lower entry and type &lt;Return&gt; or click on \</div><div class='del'>-\"Load File\".  This will cause all of the instances of the string to \</div><div class='del'>-be tagged with the tag \"search\", and it will arrange for the tag\'s \</div><div class='del'>-display attributes to change to make all of the strings blink.")</div><div class='del'>-$search_text.insert('end', "\</div><div class='del'>-The current directory to load a file is \"#{Dir.pwd}\".\</div><div class='del'>-")</div><div class='del'>-$search_text.set_insert '0.0'</div><div class='del'>-</div><div class='del'>-$search_fileName.value = ''</div><div class='del'>-$search_searchString.value = ''</div><div class='del'>-</div><div class='del'>-$search_text.width = 60</div><div class='del'>-$search_text.height = 20</div><div class='head'>diff --git a/ext/tk/sample/demos-en/spin.rb b/ext/tk/sample/demos-en/spin.rb<br/>deleted file mode 100644<br/>index c2a3a8949b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/spin.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/spin.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +0,0 @@</div><div class='del'>-# spin.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates several spinbox widgets.</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?($spin_demo) &amp;&amp; $spin_demo</div><div class='del'>-  $spin_demo.destroy </div><div class='del'>-  $spin_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$spin_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Spinbox Demonstration")</div><div class='del'>-  iconname("spin")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($spin_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </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'>-Three different spin-boxes are displayed below.  \</div><div class='del'>-You can add characters by pointing, clicking and typing.  \</div><div class='del'>-The normal Motif editing characters are supported, along with \</div><div class='del'>-many Emacs bindings.  For example, Backspace and Control-h \</div><div class='del'>-delete the character to the left of the insertion cursor and \</div><div class='del'>-Delete and Control-d delete the chararacter to the right of the \</div><div class='del'>-insertion cursor.  For values that are too large to fit in the \</div><div class='del'>-window all at once, you can scan through the value by dragging \</div><div class='del'>-with mouse button2 pressed.  Note that the first spin-box will \</div><div class='del'>-only permit you to type in integers, and the third selects from \</div><div class='del'>-a list of Australian cities.</div><div class='del'>-If your Tk library linked to Ruby doesn't include a 'spinbox' widget, \</div><div class='del'>-this demo doesn't work. Please use later version of Tk \</div><div class='del'>-which supports a 'spinbox' widget.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame){|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'>-                 $spin_demo.destroy</div><div class='del'>-                 $spin_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 'spin'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-australianCities = [</div><div class='del'>-    'Canberra', 'Sydney', 'Melbourne', 'Perth', 'Adelaide', </div><div class='del'>-    'Brisbane', 'Hobart', 'Darwin', 'Alice Springs'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-[</div><div class='del'>-  TkSpinbox.new(base_frame, :from=&gt;1, :to=&gt;10, :width=&gt;10, :validate=&gt;:key, </div><div class='del'>-                :validatecommand=&gt;[</div><div class='del'>-                  proc{|s| s == '' || /^[+-]?\d+$/ =~ s }, '%P'</div><div class='del'>-                ]), </div><div class='del'>-  TkSpinbox.new(base_frame, :from=&gt;0, :to=&gt;3, :increment=&gt;0.5, </div><div class='del'>-                :format=&gt;'%05.2f', :width=&gt;10), </div><div class='del'>-  TkSpinbox.new(base_frame, :values=&gt;australianCities, :width=&gt;10)</div><div class='del'>-].each{|sbox| sbox.pack(:side=&gt;:top, :pady=&gt;5, :padx=&gt;10)}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/square b/ext/tk/sample/demos-en/square<br/>deleted file mode 100644<br/>index 00bfde59ff..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/square?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/square</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'>-# square --</div><div class='del'>-# This script generates a demo application containing only </div><div class='del'>-# a "square" widget.  It's only usable if Tk has been compiled </div><div class='del'>-# with tkSquare.c and with the -DSQUARE_DEMO compiler switch. </div><div class='del'>-# This demo arranges the following bindings for the widget: </div><div class='del'>-#</div><div class='del'>-# Button-1 press/drag:          moves square to mouse</div><div class='del'>-# "a":                          toggle size animation on/off</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkafter'</div><div class='del'>-</div><div class='del'>-class TkSquare&lt;TkWindow</div><div class='del'>-  def create_self</div><div class='del'>-    begin</div><div class='del'>-      tk_call 'square', path</div><div class='del'>-    rescue</div><div class='del'>-      STDERR.print "\nSorry. Your Tk interpreter does not contain " +</div><div class='del'>-	'a "square" demonstration widget.' + </div><div class='del'>-	"\n ( See documents included the Tcl/Tk source archive. )\n\n"</div><div class='del'>-      exit</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def size(amount=nil)</div><div class='del'>-    if amount</div><div class='del'>-      tk_send 'size', amount</div><div class='del'>-    else</div><div class='del'>-      number(tk_send('size'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def position(x,y)</div><div class='del'>-    tk_send 'position', x, y</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$s = TkSquare.new{</div><div class='del'>-  pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-  bind('1', proc{|x,y| center(x,y)}, '%s %y')</div><div class='del'>-  bind('B1-Motion', proc{|x,y| center(x,y)}, '%s %y')</div><div class='del'>-  bind('a', proc{animate})</div><div class='del'>-  focus</div><div class='del'>-}</div><div class='del'>-TkRoot.new.minsize(1,1)</div><div class='del'>-</div><div class='del'>-# The procedure below centers the square on a given position.</div><div class='del'>-</div><div class='del'>-def center(x,y)</div><div class='del'>-  a = $s.size</div><div class='del'>-  $s.position(x-(a/2), y-(a/2))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# The procedures below provide a simple form of animation where</div><div class='del'>-# the box changes size in a pulsing pattern: larger, smaller, larger, </div><div class='del'>-# and so on.</div><div class='del'>-</div><div class='del'>-$inc = 0</div><div class='del'>-</div><div class='del'>-def timer_proc</div><div class='del'>-  a = $s.size</div><div class='del'>-  return if $inc == 0</div><div class='del'>-  $inc = -3 if a &gt;= 40</div><div class='del'>-  $inc =  3 if a &lt;= 10</div><div class='del'>-  $s.size(a+$inc)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$timer = TkAfter.new(30, -1, proc{timer_proc})</div><div class='del'>-</div><div class='del'>-def animate</div><div class='del'>-  if $inc == 0</div><div class='del'>-    $inc = 3</div><div class='del'>-    $timer.start</div><div class='del'>-  else</div><div class='del'>-    $inc = 0</div><div class='del'>-    $timer.stop</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/states.rb b/ext/tk/sample/demos-en/states.rb<br/>deleted file mode 100644<br/>index add0e84800..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/states.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/states.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,80 +0,0 @@</div><div class='del'>-# states.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a listbox widget that displays</div><div class='del'>-# the names of the 50 states in the United States of America.</div><div class='del'>-#</div><div class='del'>-# listbox widget demo 'states' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget</div><div class='del'>-if defined?($states_demo) &amp;&amp; $states_demo</div><div class='del'>-  $states_demo.destroy </div><div class='del'>-  $states_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$states_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Listbox Demonstration (states)")</div><div class='del'>-  iconname("states")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($states_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-msg = TkLabel.new(base_frame) {</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 the 50 states is displayed below, along with a scrollbar.  You can scan the list either using the scrollbar or by scanning.  To scan, press button 2 in the widget and drag up or down."</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(base_frame) {|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 = $states_demo</div><div class='del'>-      $states_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 'states'}</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'>-states_lbox = nil</div><div class='del'>-TkFrame.new(base_frame, 'borderwidth'=&gt;'.5c') {|w|</div><div class='del'>-  s = TkScrollbar.new(w)</div><div class='del'>-  states_lbox = TkListbox.new(w) {</div><div class='del'>-    setgrid 1</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| states_lbox.yview(*args)})</div><div class='del'>-  s.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  states_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'>-ins_data = [</div><div class='del'>-  'Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', </div><div class='del'>-  'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', </div><div class='del'>-  'Hawaii', 'Idaho', 'Illinois', </div><div class='del'>-  'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', </div><div class='del'>-  'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', </div><div class='del'>-  'Montana', 'Nebraska', 'Nevada', 'New_Hampshire', 'New_Jersey', 'New_Mexico', </div><div class='del'>-  'New_York', 'North_Carolina', 'North_Dakota', </div><div class='del'>-  'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode_Island', </div><div class='del'>-  'South_Carolina', 'South_Dakota', </div><div class='del'>-  'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', </div><div class='del'>-  'West_Virginia', 'Wisconsin', 'Wyoming'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-states_lbox.insert(0, *ins_data)</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/style.rb b/ext/tk/sample/demos-en/style.rb<br/>deleted file mode 100644<br/>index c2fed23926..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/style.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/style.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,231 +0,0 @@</div><div class='del'>-# style.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a text widget that illustrates the</div><div class='del'>-# various display styles that may be set for tags.</div><div class='del'>-#</div><div class='del'>-# text (display styles) 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?($style_demo) &amp;&amp; $style_demo</div><div class='del'>-  $style_demo.destroy </div><div class='del'>-  $style_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$style_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Display Styles")</div><div class='del'>-  iconname("style")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($style_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|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 = $style_demo</div><div class='del'>-      $style_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 'style'}</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'>-# text </div><div class='del'>-txt = TkText.new(base_frame){|t|</div><div class='del'>-  # </div><div class='del'>-  setgrid 'true'</div><div class='del'>-  #width  70</div><div class='del'>-  #height 32</div><div class='del'>-  wrap 'word'</div><div class='del'>-  font $font</div><div class='del'>-  TkScrollbar.new(base_frame) {|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'>-  family = 'Courier'</div><div class='del'>-</div><div class='del'>-  if $tk_version =~ /^4.*/</div><div class='del'>-    style_tag_bold = TkTextTag.new(t, 'font'=&gt;'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*')</div><div class='del'>-    style_tag_big = TkTextTag.new(t, 'font'=&gt;'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=&gt;$msg_kanji_font)</div><div class='del'>-    style_tag_verybig = TkTextTag.new(t, 'font'=&gt;'-*-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*')</div><div class='del'>-    #    style_tag_small = TkTextTag.new(t, 'font'=&gt;'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=&gt;$kanji_font)</div><div class='del'>-    style_tag_small = TkTextTag.new(t, 'font'=&gt;'-Adobe-Helvetica-Bold-R-Normal-*-100-*')</div><div class='del'>-  else</div><div class='del'>-    style_tag_bold = TkTextTag.new(t, 'font'=&gt;[family, 12, :bold, :italic])</div><div class='del'>-    style_tag_big = TkTextTag.new(t, 'font'=&gt;[family, 14, :bold])</div><div class='del'>-    style_tag_verybig = TkTextTag.new(t, 'font'=&gt;['Helvetica', 24, :bold])</div><div class='del'>-    style_tag_small = TkTextTag.new(t, 'font'=&gt;'Times 8 bold')</div><div class='del'>-  end</div><div class='del'>-###</div><div class='del'>-#  case($tk_version)</div><div class='del'>-#  when /^4.*/</div><div class='del'>-#    style_tag_big = TkTextTag.new(t, 'font'=&gt;'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=&gt;$msg_kanji_font)</div><div class='del'>-#    style_tag_small = TkTextTag.new(t, 'font'=&gt;'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=&gt;$kanji_font)</div><div class='del'>-#  when /^8.*/</div><div class='del'>-#    unless $style_demo_do_first</div><div class='del'>-#      $style_demo_do_first = true</div><div class='del'>-#      Tk.tk_call('font', 'create', '@bigascii', </div><div class='del'>-#                '-copy', '-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*')</div><div class='del'>-#      Tk.tk_call('font', 'create', '@smallascii', </div><div class='del'>-#                '-copy', '-Adobe-Helvetica-Bold-R-Normal-*-100-*')</div><div class='del'>-#      Tk.tk_call('font', 'create', '@cBigFont', </div><div class='del'>-#                '-compound', '@bigascii @msg_knj')</div><div class='del'>-#      Tk.tk_call('font', 'create', '@cSmallFont', </div><div class='del'>-#                '-compound', '@smallascii @kanji')</div><div class='del'>-#    end</div><div class='del'>-#    style_tag_big = TkTextTag.new(t, 'font'=&gt;'@cBigFont')</div><div class='del'>-#    style_tag_small = TkTextTag.new(t, 'font'=&gt;'@cSmallFont')</div><div class='del'>-#  end</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  if TkWinfo.depth($root).to_i &gt; 1</div><div class='del'>-    style_tag_color1 = TkTextTag.new(t, 'background'=&gt;'#a0b7ce')</div><div class='del'>-    style_tag_color2 = TkTextTag.new(t, 'foreground'=&gt;'red')</div><div class='del'>-    style_tag_raised = TkTextTag.new(t, 'relief'=&gt;'raised', 'borderwidth'=&gt;1)</div><div class='del'>-    style_tag_sunken = TkTextTag.new(t, 'relief'=&gt;'sunken', 'borderwidth'=&gt;1)</div><div class='del'>-  else</div><div class='del'>-    style_tag_color1 = TkTextTag.new(t, 'background'=&gt;'black', </div><div class='del'>-                                     'foreground'=&gt;'white')</div><div class='del'>-    style_tag_color2 = TkTextTag.new(t, 'background'=&gt;'black', </div><div class='del'>-                                     'foreground'=&gt;'white')</div><div class='del'>-    style_tag_raised = TkTextTag.new(t, 'background'=&gt;'white', </div><div class='del'>-                                     'relief'=&gt;'raised', 'borderwidth'=&gt;1)</div><div class='del'>-    style_tag_sunken = TkTextTag.new(t, 'background'=&gt;'white', </div><div class='del'>-                                     'relief'=&gt;'sunken', 'borderwidth'=&gt;1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  if $tk_version =~ /^4\.[01]/</div><div class='del'>-    style_tag_bgstipple = TkTextTag.new(t, 'background'=&gt;'black', </div><div class='del'>-                                        'borderwidth'=&gt;0, </div><div class='del'>-                                        'bgstipple'=&gt;'gray25')</div><div class='del'>-  else</div><div class='del'>-    style_tag_bgstipple = TkTextTag.new(t, 'background'=&gt;'black', </div><div class='del'>-                                        'borderwidth'=&gt;0, </div><div class='del'>-                                        'bgstipple'=&gt;'gray12')</div><div class='del'>-  end</div><div class='del'>-  style_tag_fgstipple = TkTextTag.new(t, 'fgstipple'=&gt;'gray50')</div><div class='del'>-  style_tag_underline = TkTextTag.new(t, 'underline'=&gt;'on')</div><div class='del'>-  style_tag_overstrike = TkTextTag.new(t, 'overstrike'=&gt;'on')</div><div class='del'>-  style_tag_right  = TkTextTag.new(t, 'justify'=&gt;'right')</div><div class='del'>-  style_tag_center = TkTextTag.new(t, 'justify'=&gt;'center')</div><div class='del'>-  if $tk_version =~ /^4.*/</div><div class='del'>-    style_tag_super = TkTextTag.new(t, 'offset'=&gt;'4p', 'font'=&gt;'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*')</div><div class='del'>-    style_tag_sub = TkTextTag.new(t, 'offset'=&gt;'-2p', 'font'=&gt;'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*')</div><div class='del'>-  else</div><div class='del'>-    style_tag_super = TkTextTag.new(t, 'offset'=&gt;'4p', 'font'=&gt;[family, 10])</div><div class='del'>-    style_tag_sub = TkTextTag.new(t, 'offset'=&gt;'-2p', 'font'=&gt;[family, 10])</div><div class='del'>-  end</div><div class='del'>-  style_tag_margins = TkTextTag.new(t, 'lmargin1'=&gt;'12m', 'lmargin2'=&gt;'6m',</div><div class='del'>-                                    'rmargin'=&gt;'10m')</div><div class='del'>-  style_tag_spacing = TkTextTag.new(t, 'spacing1'=&gt;'10p', 'spacing2'=&gt;'2p',</div><div class='del'>-                                    'lmargin1'=&gt;'12m', 'lmargin2'=&gt;'6m',</div><div class='del'>-                                    'rmargin'=&gt;'10m')</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  insert('end', 'Text widgets like this one allow you to display information in a</div><div class='del'>-variety of styles.  Display styles are controlled using a mechanism</div><div class='del'>-called ')</div><div class='del'>-  insert('end', 'tags', style_tag_big)</div><div class='del'>-  insert('end', '. Tags are just textual names that you can apply to one</div><div class='del'>-or more ranges of characters within a text widget.  You can configure</div><div class='del'>-tags with various display styles.  If you do this, then the tagged</div><div class='del'>-characters will be displayed with the styles you chose.  The</div><div class='del'>-available display styles are:</div><div class='del'>-')</div><div class='del'>-  insert('end', "\n1. Font.", style_tag_big)</div><div class='del'>-  insert('end', "  You can choose any X font, ")</div><div class='del'>-  insert('end', "large", style_tag_verybig)</div><div class='del'>-  insert('end', " or ")</div><div class='del'>-  insert('end', "small", style_tag_small)</div><div class='del'>-  insert('end', ".\n")</div><div class='del'>-  insert('end', "\n2. Color.", style_tag_big)</div><div class='del'>-  insert('end', "  You can change either the ")</div><div class='del'>-  insert('end', "background", style_tag_color1)</div><div class='del'>-  insert('end', " or ")</div><div class='del'>-  insert('end', "foreground", style_tag_color2)</div><div class='del'>-  insert('end', "\ncolor, or ")</div><div class='del'>-  insert('end', "both", style_tag_color1, style_tag_color2)</div><div class='del'>-  insert('end', ".\n")</div><div class='del'>-  insert('end', "\n3. Stippling.", style_tag_big)</div><div class='del'>-  insert('end', "  You can cause either the ")</div><div class='del'>-  insert('end', "background", style_tag_bgstipple)</div><div class='del'>-  insert('end', " or ")</div><div class='del'>-  insert('end', "foreground", style_tag_fgstipple)</div><div class='del'>-  insert('end', "\ninformation to be drawn with a stipple fill instead of a solid fill.\n")</div><div class='del'>-  insert('end', "\n4. Underlining.", style_tag_big)</div><div class='del'>-  insert('end', "  You can ")</div><div class='del'>-  insert('end', "underline", style_tag_underline)</div><div class='del'>-  insert('end', " ranges of text.\n")</div><div class='del'>-  insert('end', "\n5. Overstrikes.", style_tag_big)</div><div class='del'>-  insert('end', "  You can ")</div><div class='del'>-  insert('end', "draw lines through", style_tag_overstrike)</div><div class='del'>-  insert('end', " ranges of text.\n")</div><div class='del'>-  insert('end', "\n6. 3-D effects.", style_tag_big)</div><div class='del'>-  insert('end', "  You can arrange for the background to be drawn\nwith a border that makes characters appear either\n")</div><div class='del'>-  insert('end', "raised", style_tag_raised)</div><div class='del'>-  insert('end', " or ")</div><div class='del'>-  insert('end', "sunken", style_tag_sunken)</div><div class='del'>-  insert('end', ".\n")</div><div class='del'>-  insert('end', "\n7. Justification.", style_tag_big)</div><div class='del'>-  insert('end', " You can arrange for lines to be displayed\n")</div><div class='del'>-  insert('end', "left-justified,\n")</div><div class='del'>-  insert('end', "right-justified, or\n", style_tag_right)</div><div class='del'>-  insert('end', "centered.\n", style_tag_center)</div><div class='del'>-  insert('end', "\n8. Superscripts and subscripts.", style_tag_big)</div><div class='del'>-  insert('end', " You can control the vertical\n")</div><div class='del'>-  insert('end', "position of text to generate superscript effects like 10")</div><div class='del'>-  insert('end', "n", style_tag_super)</div><div class='del'>-  insert('end', " or\nsubscript effects like X")</div><div class='del'>-  insert('end', "i", style_tag_sub)</div><div class='del'>-  insert('end', ".\n")</div><div class='del'>-  insert('end', "\n9. Margins.", style_tag_big)</div><div class='del'>-  insert('end', " You can control the amount of extra space left")</div><div class='del'>-  insert('end', " on\neach side of the text:\n")</div><div class='del'>-  insert('end', "This paragraph is an example of the use of ", style_tag_margins)</div><div class='del'>-  insert('end', "margins.  It consists of a single line of text ", style_tag_margins)</div><div class='del'>-  insert('end', "that wraps around on the screen.  There are two ", style_tag_margins)</div><div class='del'>-  insert('end', "separate left margin values, one for the first ", style_tag_margins)</div><div class='del'>-  insert('end', "display line associated with the text line, ", style_tag_margins)</div><div class='del'>-  insert('end', "and one for the subsequent display lines, which ", style_tag_margins)</div><div class='del'>-  insert('end', "occur because of wrapping.  There is also a ", style_tag_margins)</div><div class='del'>-  insert('end', "separate specification for the right margin, ", style_tag_margins)</div><div class='del'>-  insert('end', "which is used to choose wrap points for lines.\n", style_tag_margins)</div><div class='del'>-  insert('end', "\n10. Spacing.", style_tag_big)</div><div class='del'>-  insert('end', " You can control the spacing of lines with three\n")</div><div class='del'>-  insert('end', "separate parameters.  \"Spacing1\" tells how much ")</div><div class='del'>-  insert('end', "extra space to leave\nabove a line, \"spacing3\" ")</div><div class='del'>-  insert('end', "tells how much space to leave below a line,\nand ")</div><div class='del'>-  insert('end', "if a text line wraps, \"spacing2\" tells how much ")</div><div class='del'>-  insert('end', "space to leave\nbetween the display lines that ")</div><div class='del'>-  insert('end', "make up the text line.\n")</div><div class='del'>-  insert('end', "These indented paragraphs illustrate how spacing ", style_tag_spacing)</div><div class='del'>-  insert('end', "can be used.  Each paragraph is actually a ", style_tag_spacing)</div><div class='del'>-  insert('end', "single line in the text widget, which is ", style_tag_spacing)</div><div class='del'>-  insert('end', "word-wrapped by the widget.\n", style_tag_spacing)</div><div class='del'>-  insert('end', "Spacing1 is set to 10 points for this text, ", style_tag_spacing)</div><div class='del'>-  insert('end', "which results in relatively large gaps between ", style_tag_spacing)</div><div class='del'>-  insert('end', "the paragraphs.  Spacing2 is set to 2 points, ", style_tag_spacing)</div><div class='del'>-  insert('end', "which results in just a bit of extra space ", style_tag_spacing)</div><div class='del'>-  insert('end', "within a pararaph.  Spacing3 isn't used ", style_tag_spacing)</div><div class='del'>-  insert('end', "in this example.\n", style_tag_spacing)</div><div class='del'>-  insert('end', "To see where the space is, select ranges of ", style_tag_spacing)</div><div class='del'>-  insert('end', "text within these paragraphs.  The selection ", style_tag_spacing)</div><div class='del'>-  insert('end', "highlight will cover the extra space.", style_tag_spacing)</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-txt.width 70</div><div class='del'>-txt.height 32</div><div class='head'>diff --git a/ext/tk/sample/demos-en/tcolor b/ext/tk/sample/demos-en/tcolor<br/>deleted file mode 100644<br/>index 3c63d6730d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/tcolor?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/tcolor</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,526 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# tcolor --</div><div class='del'>-#   simple color editor which supports RGB, HSB and CYM color space</div><div class='del'>-#</div><div class='del'>-# Copyright (C) 1998 Takaaki Tateishi(ttate@jaist.ac.jp)</div><div class='del'>-# last update: Thu Jun 18 06:32:35 JST 1998</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# use TkVariable instance for the variable which is changed by Tk interpreter</div><div class='del'>-</div><div class='del'>-$colorSpace = TkVariable.new(:rgb)</div><div class='del'>-$master = nil</div><div class='del'>-$red = 65535</div><div class='del'>-$green = 0</div><div class='del'>-$blue = 0</div><div class='del'>-$color = "#ffff00000000"</div><div class='del'>-$updating = TkVariable.new(0)</div><div class='del'>-$autoUpdate = TkVariable.new(1)</div><div class='del'>-$name = TkVariable.new($color)</div><div class='del'>-$command = TkVariable.new("print(%%,\"\n\")")</div><div class='del'>-# $command = TkVariable.new("")</div><div class='del'>-$label1 = TkVariable.new("label1")</div><div class='del'>-$label2 = TkVariable.new("label2")</div><div class='del'>-$label3 = TkVariable.new("label3")</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# setup the entry of the resourc database</div><div class='del'>-if (TkVarAccess.new('tcl_platform')['platform'] == 'unix')</div><div class='del'>-  TkOptionDB.add('*Entry.background', 'white')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# methods for events</div><div class='del'>-</div><div class='del'>-def rgbToHsv(red,green,blue)</div><div class='del'>-</div><div class='del'>-  if ( red &gt; green )</div><div class='del'>-    max = red</div><div class='del'>-    min = green</div><div class='del'>-  else</div><div class='del'>-    max = green</div><div class='del'>-    min = red</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if ( blue &gt; max )</div><div class='del'>-    max = blue</div><div class='del'>-  else</div><div class='del'>-    if ( blue &lt; min )</div><div class='del'>-      min = blue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  range = max - min</div><div class='del'>-</div><div class='del'>-  if ( max == 0 )</div><div class='del'>-    sat = 0.0</div><div class='del'>-  else</div><div class='del'>-    sat = (max-min)/max</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if ( sat == 0 )</div><div class='del'>-    hue = 0.0</div><div class='del'>-  else</div><div class='del'>-    rc = (max-red)/range</div><div class='del'>-    gc = (max-green)/range</div><div class='del'>-    bc = (max-blue)/range</div><div class='del'>-    if ( red == max )</div><div class='del'>-      hue = 0.166667 * (bc - gc)</div><div class='del'>-    else</div><div class='del'>-      if ( green == max )</div><div class='del'>-	hue = 0.166667 * (2.0 + rc - bc)</div><div class='del'>-      else</div><div class='del'>-	hue = 0.166667 * (4.0 + gc - rc)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if ( hue &lt; 0.0 )</div><div class='del'>-      hue = hue + 1.0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  [hue,sat,max/65535]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def hsbToRgb(hue,sat,value)</div><div class='del'>-  v = 65535.0 * value</div><div class='del'>-  if( sat == 0 )</div><div class='del'>-    ans = [v,v,v]</div><div class='del'>-  else</div><div class='del'>-    hue = hue*6.0</div><div class='del'>-    if ( hue &gt;= 6 )</div><div class='del'>-      hue = 0.0</div><div class='del'>-    end</div><div class='del'>-    i = hue.to_i</div><div class='del'>-    f = hue - i</div><div class='del'>-    p = 65535.0 * value * (1.0 - sat)</div><div class='del'>-    q = 65535.0 * value * (1.0 - (sat * f))</div><div class='del'>-    t = 65535.0 * value * (1.0 - (sat * (1.0 - f)))</div><div class='del'>-    case i</div><div class='del'>-    when 0</div><div class='del'>-      ans = [v,t,p]</div><div class='del'>-    when 1</div><div class='del'>-      ans = [q,v,p]</div><div class='del'>-    when 2</div><div class='del'>-      ans = [p,v,t]</div><div class='del'>-    when 3</div><div class='del'>-      ans = [p,q,v]</div><div class='del'>-    when 4</div><div class='del'>-      ans = [t,p,v]</div><div class='del'>-    when 5</div><div class='del'>-      ans = [v,p,q]</div><div class='del'>-    else</div><div class='del'>-      raise(eException,"i value #{i} is out of range")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  return ans</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def _null_binding</div><div class='del'>-  Module.new.instance_eval{binding}</div><div class='del'>-end</div><div class='del'>-private :_null_binding</div><div class='del'>-</div><div class='del'>-def doUpdate </div><div class='del'>-  newCmd = $command.to_s.gsub("%%","\"#{$color}\"")</div><div class='del'>-  eval(newCmd, _null_binding)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def tc_scaleChanged</div><div class='del'>-  if( $updating.to_i == 1 )</div><div class='del'>-    return </div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $master = :scale if $master == nil</div><div class='del'>-</div><div class='del'>-  scale1 = $root.middle.middle.scale1</div><div class='del'>-  scale2 = $root.middle.middle.scale2</div><div class='del'>-  scale3 = $root.middle.middle.scale3</div><div class='del'>-</div><div class='del'>-  case $colorSpace.value.intern</div><div class='del'>-  when :rgb</div><div class='del'>-    $red = (scale1.get * 65.535).to_i</div><div class='del'>-    $green = (scale2.get * 65.535).to_i</div><div class='del'>-    $blue = (scale3.get * 65.535).to_i</div><div class='del'>-  when :cmy</div><div class='del'>-    $red = (65535 - scale1.get * 65.535).to_i</div><div class='del'>-    $green = (65535 - scale2.get * 65.535).to_i</div><div class='del'>-    $blue = (65535 - scale3.get * 65.535).to_i        </div><div class='del'>-  when :hsb</div><div class='del'>-    list = hsbToRgb(scale1.get / 1000.0,</div><div class='del'>-		    scale2.get / 1000.0,</div><div class='del'>-		    scale3.get / 1000.0)</div><div class='del'>-    $red = list[0]</div><div class='del'>-    $green = list[1]</div><div class='del'>-    $blue = list[2]</div><div class='del'>-  else</div><div class='del'>-    raise(Exception,"unknown colorSpace")</div><div class='del'>-  end</div><div class='del'>-  $color = format("#%04x%04x%04x",$red.to_i,$green.to_i,$blue.to_i)</div><div class='del'>-  $name.value = $color if $master == :scale</div><div class='del'>-  $root.middle.right.set_color($color)</div><div class='del'>-  if( $autoUpdate.to_i == 1 )</div><div class='del'>-    doUpdate</div><div class='del'>-  end</div><div class='del'>-  Tk.update(true)</div><div class='del'>-  $master = nil if $master == :scale</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def tc_setScales</div><div class='del'>-  $updating.value = 1</div><div class='del'>-</div><div class='del'>-  scale1 = $root.middle.middle.scale1</div><div class='del'>-  scale2 = $root.middle.middle.scale2</div><div class='del'>-  scale3 = $root.middle.middle.scale3</div><div class='del'>-  </div><div class='del'>-  case $colorSpace.value.intern</div><div class='del'>-  when :rgb</div><div class='del'>-    scale1.set($red / 65.535)</div><div class='del'>-    scale2.set($green / 65.535)</div><div class='del'>-    scale3.set($blue / 65.535)</div><div class='del'>-  when :cmy</div><div class='del'>-    scale1.set((65535 - $red) / 65.535)</div><div class='del'>-    scale2.set((65535 - $green) / 65.535)</div><div class='del'>-    scale3.set((65535 - $blue) / 65.535)</div><div class='del'>-  when :hsb</div><div class='del'>-    list = rgbToHsv($red,$green,$blue)</div><div class='del'>-    scale1.set( list[0] * 1000.0 )</div><div class='del'>-    scale2.set( list[1] * 1000.0 )</div><div class='del'>-    scale3.set( list[2] * 1000.0 )</div><div class='del'>-  else</div><div class='del'>-    raise(Exception,"unknown colorSpace")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $updating.value = 0</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def tc_loadNamedColor(name)</div><div class='del'>-  $name.value = name</div><div class='del'>-  $master = :name if $master == nil</div><div class='del'>-  if name[0,1] != "#" </div><div class='del'>-    list = TkWinfo.rgb($root.middle.right.swatch,name)</div><div class='del'>-    $red = list[0]</div><div class='del'>-    $green = list[1]</div><div class='del'>-    $blue = list[2]</div><div class='del'>-  else</div><div class='del'>-    case name.length</div><div class='del'>-    when 4</div><div class='del'>-      fmt = /#(.{1})(.{1})(.{1})/</div><div class='del'>-      shift = 12</div><div class='del'>-    when 7</div><div class='del'>-      fmt = /#(.{2})(.{2})(.{2})/</div><div class='del'>-      shift = 8</div><div class='del'>-    when 10</div><div class='del'>-      fmt = /#(.{3})(.{3})(.{3})/</div><div class='del'>-      shift = 4</div><div class='del'>-    when 13</div><div class='del'>-      fmt = /#(.{4})(.{4})(.{4})/</div><div class='del'>-      shift = 0</div><div class='del'>-    else</div><div class='del'>-      raise(eException,"syntax error in color name \"#{name}\"")</div><div class='del'>-    end</div><div class='del'>-    name.scan(fmt){|strlist|</div><div class='del'>-      if strlist.length != 3</div><div class='del'>-	raise(eException,"syntax error in color name \"#{name}\"")</div><div class='del'>-      end</div><div class='del'>-      $red = strlist[0].hex</div><div class='del'>-      $green = strlist[1].hex</div><div class='del'>-      $blue = strlist[2].hex</div><div class='del'>-    }</div><div class='del'>-    $red = $red &lt;&lt; shift</div><div class='del'>-    $green = $green &lt;&lt; shift</div><div class='del'>-    $blue = $blue &lt;&lt; shift</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  tc_setScales</div><div class='del'>-  $color = format("#%04x%04x%04x",$red,$green,$blue)</div><div class='del'>-  $root.middle.right.set_color($color)</div><div class='del'>-  if $autoUpdate.to_i == 1</div><div class='del'>-    doUpdate</div><div class='del'>-  end</div><div class='del'>-  Tk.update(true)</div><div class='del'>-  $master = nil if $master == :name</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def changeColorSpace(space)</div><div class='del'>-  case space</div><div class='del'>-  when :rgb</div><div class='del'>-    $label1.value = "Red"</div><div class='del'>-    $label2.value = "Green"</div><div class='del'>-    $label3.value = "Blue"</div><div class='del'>-  when :cmy</div><div class='del'>-    $label1.value = "Cyan"</div><div class='del'>-    $label2.value = "Magenta"</div><div class='del'>-    $label3.value = "Yellow"</div><div class='del'>-  when :hsb</div><div class='del'>-    $label1.value = "Hue"</div><div class='del'>-    $label2.value = "Saturation"</div><div class='del'>-    $label3.value = "Brightness"</div><div class='del'>-  end</div><div class='del'>-  tc_setScales</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# menu</div><div class='del'>-</div><div class='del'>-class TkColorMenuFrame&lt;TkFrame</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent,</div><div class='del'>-	  "relief"=&gt;"raised",</div><div class='del'>-	  "borderwidth"=&gt;"2")</div><div class='del'>-</div><div class='del'>-    # File menubutton</div><div class='del'>-    @file = TkMenubutton.new(self){|button|</div><div class='del'>-</div><div class='del'>-      # File menu</div><div class='del'>-      @file_menu = TkMenu.new(button){</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "RGB color space",</div><div class='del'>-	  "variable" =&gt; $colorSpace,</div><div class='del'>-	  "value" =&gt; :rgb,</div><div class='del'>-	  "underline" =&gt; "0",</div><div class='del'>-	  "command" =&gt; proc{changeColorSpace(:rgb)}</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "CMY color space",</div><div class='del'>-	  "variable" =&gt; $colorSpace,</div><div class='del'>-	  "value" =&gt; :cmy,</div><div class='del'>-	  "underline" =&gt; "0",</div><div class='del'>-	  "command" =&gt; proc{changeColorSpace(:cmy)}</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "HSB color space",</div><div class='del'>-	  "variable" =&gt; $colorSpace,</div><div class='del'>-	  "value" =&gt; :hsb,</div><div class='del'>-	  "underline" =&gt; "0",</div><div class='del'>-	  "command" =&gt; proc{changeColorSpace(:hsb)}</div><div class='del'>-	add "separator"</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "Automatic updates",</div><div class='del'>-	  "variable" =&gt; $autoUpdate,</div><div class='del'>-	  "value" =&gt; "1",</div><div class='del'>-	  "underline" =&gt; "0"</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "Manual updates",</div><div class='del'>-	  "variable" =&gt; $autoUpdate,</div><div class='del'>-	  "value" =&gt; "0",</div><div class='del'>-	  "underline" =&gt; "0"</div><div class='del'>-	add "separator"</div><div class='del'>-	add "command",</div><div class='del'>-	  "label" =&gt; "Exit program",</div><div class='del'>-	  "underline" =&gt; "0",</div><div class='del'>-	  "command" =&gt; proc{exit}</div><div class='del'>-      }</div><div class='del'>-      </div><div class='del'>-      # assign File menu to File button</div><div class='del'>-      menu @file_menu</div><div class='del'>-</div><div class='del'>-      text "File"</div><div class='del'>-      underline "0"</div><div class='del'>-    }.pack("side"=&gt;"left")</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'>-</div><div class='del'>-# bottom frame</div><div class='del'>-class TkColorBotFrame&lt;TkFrame</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent,</div><div class='del'>-	  "relief"=&gt; "raised",</div><div class='del'>-	  "borderwidth"=&gt; 2)</div><div class='del'>-</div><div class='del'>-    @commandLabel = TkLabel.new(self,</div><div class='del'>-				"text"=&gt; "Command:")</div><div class='del'>-    @command = TkEntry.new(self,</div><div class='del'>-			   "relief"=&gt; "sunken",</div><div class='del'>-			   "borderwidth"=&gt; "2",</div><div class='del'>-			   "textvariable"=&gt; $command,</div><div class='del'>-			   "font"=&gt; "-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*")</div><div class='del'>-    @update = TkButton.new(self,</div><div class='del'>-			   "text"=&gt; "Update",</div><div class='del'>-			   "command"=&gt; proc{doUpdate})</div><div class='del'>-    @commandLabel.pack("side"=&gt;"left")</div><div class='del'>-    @update.pack("side"=&gt;"right","pady"=&gt;".1c","padx"=&gt;".25c")</div><div class='del'>-    @command.pack("expand"=&gt;"yes","fill"=&gt;"x","ipadx"=&gt;".25c")</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'>-</div><div class='del'>-# left side frame of middle level</div><div class='del'>-class TkColorMiddleLeftFrame&lt;TkFrame</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent)</div><div class='del'>-</div><div class='del'>-    for i in ["/usr/local/lib/X11rgb.txt","/usr/lib/X11/rgb.txt",</div><div class='del'>-	"/X11/R5/lib/X11/rgb.txt","/X11/R4/lib/rgb/rgb.txt",</div><div class='del'>-	"/usr/openwin/lib/X11/rgb.txt"]</div><div class='del'>-      if !File.readable?(i)</div><div class='del'>-	next</div><div class='del'>-      end</div><div class='del'>-      f = File.open(i)</div><div class='del'>-      @scroll = TkScrollbar.new(self,</div><div class='del'>-				"orient"=&gt;"vertical",</div><div class='del'>-				"relief"=&gt;"sunken",</div><div class='del'>-				"borderwidth"=&gt;"2")</div><div class='del'>-      @scroll.pack("side"=&gt;"right","fill"=&gt;"y")</div><div class='del'>-      @names = TkListbox.new(self,</div><div class='del'>-			     "width"=&gt;"20",</div><div class='del'>-			     "height"=&gt;"12",</div><div class='del'>-			     "yscrollcommand"=&gt; proc{|first,last| @scroll.set first,last},</div><div class='del'>-			     "relief"=&gt;"sunken",</div><div class='del'>-			     "borderwidth"=&gt;"2",</div><div class='del'>-			     "exportselection"=&gt;"false")</div><div class='del'>-      @scroll.command(proc{|*args| @names.yview(*args)})</div><div class='del'>-      @names.bind("Double-1",proc{</div><div class='del'>-		    tc_loadNamedColor(@names.get(@names.curselection))})</div><div class='del'>-      @names.pack("side"=&gt;"left")</div><div class='del'>-      while (line = f.gets)</div><div class='del'>-	line.chop!</div><div class='del'>-	linelist = line.split(/[ \t]+/)</div><div class='del'>-	if linelist.length == 4</div><div class='del'>-	  @names.insert("end",linelist[3])</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      f.close</div><div class='del'>-      break</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'>-</div><div class='del'>-# middle frame of middle level</div><div class='del'>-class TkColorMiddleMiddleFrame&lt;TkFrame</div><div class='del'>-  attr_reader :scale1, :scale2, :scale3</div><div class='del'>-</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent)</div><div class='del'>-</div><div class='del'>-    @f1 = TkFrame.new(self)</div><div class='del'>-    @f2 = TkFrame.new(self)</div><div class='del'>-    @f3 = TkFrame.new(self)</div><div class='del'>-    @f4 = TkFrame.new(self)</div><div class='del'>-</div><div class='del'>-    for f in [@f1,@f2,@f3]</div><div class='del'>-      f.pack("side"=&gt;"top","expand"=&gt;"yes")</div><div class='del'>-    end</div><div class='del'>-    @f4.pack("side"=&gt;"top","expand"=&gt;"yes","fill"=&gt;"x")</div><div class='del'>-</div><div class='del'>-    @label1 = TkLabel.new(self,"textvariable"=&gt;$label1)</div><div class='del'>-    @scale1 = TkScale.new(self,"from"=&gt;"0","to"=&gt;"1000","length"=&gt;"6c",</div><div class='del'>-			  "orient"=&gt;"horizontal",</div><div class='del'>-			  "command"=&gt;proc{tc_scaleChanged})</div><div class='del'>-    @scale1.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-    @label1.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-</div><div class='del'>-    @label2 = TkLabel.new(self,"textvariable"=&gt;$label2)</div><div class='del'>-    @scale2 = TkScale.new(self,"from"=&gt;"0","to"=&gt;"1000","length"=&gt;"6c",</div><div class='del'>-			  "orient"=&gt;"horizontal",</div><div class='del'>-			  "command"=&gt;proc{tc_scaleChanged})</div><div class='del'>-    @scale2.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-    @label2.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-</div><div class='del'>-    @label3 = TkLabel.new(self,"textvariable"=&gt;$label3)</div><div class='del'>-    @scale3 = TkScale.new(self,"from"=&gt;"0","to"=&gt;"1000","length"=&gt;"6c",</div><div class='del'>-			  "orient"=&gt;"horizontal",</div><div class='del'>-			  "command"=&gt;proc{tc_scaleChanged})</div><div class='del'>-    @scale3.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-    @label3.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-</div><div class='del'>-    @nameLabel = TkLabel.new(self,"text"=&gt;"Name:")</div><div class='del'>-    @name = TkEntry.new(self,"relief"=&gt;"sunken","borderwidth"=&gt;"2",</div><div class='del'>-			"textvariable"=&gt;$name,"width"=&gt;"10",</div><div class='del'>-			"font"=&gt;"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*")</div><div class='del'>-    @nameLabel.pack("side"=&gt;"left")</div><div class='del'>-    @name.pack("side"=&gt;"right", "expand"=&gt;"1", "fill"=&gt;"x")</div><div class='del'>-    @name.bind("Return",proc{tc_loadNamedColor $name.to_s})</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'>-</div><div class='del'>-class TkColorMiddleRightFrame&lt;TkFrame</div><div class='del'>-  attr_reader :swatch</div><div class='del'>-</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent)</div><div class='del'>-    @swatch = TkFrame.new(self, "width"=&gt;"2c", "height"=&gt;"5c",</div><div class='del'>-			  "background"=&gt;$color)</div><div class='del'>-    @value = TkLabel.new(self, </div><div class='del'>-			 "text"=&gt;$color,</div><div class='del'>-			 "width"=&gt;"13",</div><div class='del'>-			 "font"=&gt;"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*")</div><div class='del'>-    @swatch.pack("side"=&gt;"top","expand"=&gt;"yes","fill"=&gt;"both")</div><div class='del'>-    @value.pack("side"=&gt;"bottom","pady"=&gt;".25c")</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_color(color)</div><div class='del'>-    @swatch["background"] = color</div><div class='del'>-    @value["text"] = color</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'>-# middle level frame</div><div class='del'>-class TkColorMiddleFrame&lt;TkFrame</div><div class='del'>-  attr_reader :left, :middle, :right</div><div class='del'>-</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent,</div><div class='del'>-	  "relief"=&gt; "raised",</div><div class='del'>-	  "borderwidth"=&gt; "2")</div><div class='del'>-</div><div class='del'>-    @left = TkColorMiddleLeftFrame.new(self)</div><div class='del'>-    @left.pack("side"=&gt;"left","padx"=&gt;".25c","pady"=&gt;".25c")</div><div class='del'>-</div><div class='del'>-    @middle = TkColorMiddleMiddleFrame.new(self)</div><div class='del'>-    @middle.pack("side"=&gt;"left","expand"=&gt;"yes","fill"=&gt;"y")</div><div class='del'>-</div><div class='del'>-    @right = TkColorMiddleRightFrame.new(self)</div><div class='del'>-    @right.pack("side"=&gt;"left","padx"=&gt;".25c","pady"=&gt;".25c","anchor"=&gt;"s")</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'>-</div><div class='del'>-class TkColor&lt;TkRoot</div><div class='del'>-  attr_reader :menu, :bottom, :middle</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @menu = TkColorMenuFrame.new(self)</div><div class='del'>-    @menu.pack("side"=&gt;"top", "fill"=&gt;"x")</div><div class='del'>-</div><div class='del'>-    @bottom = TkColorBotFrame.new(self)</div><div class='del'>-    @bottom.pack("side"=&gt;"bottom","fill"=&gt;"x")</div><div class='del'>-</div><div class='del'>-    @middle = TkColorMiddleFrame.new(self)</div><div class='del'>-    @middle.pack("side"=&gt;"top","fill"=&gt;"both")</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'>-</div><div class='del'>-$root = TkColor.new</div><div class='del'>-changeColorSpace :rgb</div><div class='del'>-</div><div class='del'>-# start eventloop</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/text.rb b/ext/tk/sample/demos-en/text.rb<br/>deleted file mode 100644<br/>index 3ce8cdfda8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/text.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/text.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,128 +0,0 @@</div><div class='del'>-# text.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a text widget that describes</div><div class='del'>-# the basic editing functions.</div><div class='del'>-#</div><div class='del'>-# text (basic facilities) 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?($text_demo) &amp;&amp; $text_demo</div><div class='del'>-  $text_demo.destroy </div><div class='del'>-  $text_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$text_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Basic Facilities")</div><div class='del'>-  iconname("text")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($text_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# version check</div><div class='del'>-if ((Tk::TK_VERSION.split('.').collect{|n| n.to_i} &lt;=&gt; [8,4]) &lt; 0)</div><div class='del'>-  undo_support = false</div><div class='del'>-else</div><div class='del'>-  undo_support = true</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|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 = $text_demo</div><div class='del'>-      $text_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 'text'}</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'>-# text </div><div class='del'>-TkText.new(base_frame){|t|</div><div class='del'>-  relief 'sunken'</div><div class='del'>-  bd 2</div><div class='del'>-  setgrid 1</div><div class='del'>-  height 30</div><div class='del'>-  if undo_support</div><div class='del'>-    undo true</div><div class='del'>-    autoseparators true</div><div class='del'>-  end</div><div class='del'>-  TkScrollbar.new(base_frame) {|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'>-  insert('0.0', &lt;&lt;EOT)</div><div class='del'>-This window is a text widget.  It displays one or more lines of text</div><div class='del'>-and allows you to edit the text.  Here is a summary of the things you</div><div class='del'>-can do to a text widget:</div><div class='del'>-</div><div class='del'>-1. Scrolling. Use the scrollbar to adjust the view in the text window.</div><div class='del'>-</div><div class='del'>-2. Scanning. Press mouse button 2 in the text window and drag up or down.</div><div class='del'>-This will drag the text at high speed to allow you to scan its contents.</div><div class='del'>-</div><div class='del'>-3. Insert text. Press mouse button 1 to set the insertion cursor, then</div><div class='del'>-type text.  What you type will be added to the widget.</div><div class='del'>-</div><div class='del'>-4. Select. Press mouse button 1 and drag to select a range of characters.</div><div class='del'>-Once you've released the button, you can adjust the selection by pressing</div><div class='del'>-button 1 with the shift key down.  This will reset the end of the</div><div class='del'>-selection nearest the mouse cursor and you can drag that end of the</div><div class='del'>-selection by dragging the mouse before releasing the mouse button.</div><div class='del'>-You can double-click to select whole words or triple-click to select</div><div class='del'>-whole lines.</div><div class='del'>-</div><div class='del'>-5. Delete and replace. To delete text, select the characters you'd like</div><div class='del'>-to delete and type Backspace or Delete.  Alternatively, you can type new</div><div class='del'>-text, in which case it will replace the selected text.</div><div class='del'>-</div><div class='del'>-6. Copy the selection. To copy the selection into this window, select</div><div class='del'>-what you want to copy (either here or in another application), then</div><div class='del'>-click button 2 to copy the selection to the point of the mouse cursor.</div><div class='del'>-</div><div class='del'>-7. Edit.  Text widgets support the standard Motif editing characters</div><div class='del'>-plus many Emacs editing characters.  Backspace and Control-h erase the</div><div class='del'>-character to the left of the insertion cursor.  Delete and Control-d</div><div class='del'>-erase the character to the right of the insertion cursor.  Meta-backspace</div><div class='del'>-deletes the word to the left of the insertion cursor, and Meta-d deletes</div><div class='del'>-the word to the right of the insertion cursor.  Control-k deletes from</div><div class='del'>-the insertion cursor to the end of the line, or it deletes the newline</div><div class='del'>-character if that is the only thing left on the line.  Control-o opens</div><div class='del'>-a new line by inserting a newline character to the right of the insertion</div><div class='del'>-cursor.  Control-t transposes the two characters on either side of the</div><div class='del'>-insertion cursor. #{</div><div class='del'>-      if undo_support</div><div class='del'>-        undo_text = "Control-z undoes the last editing action performed,\nand "</div><div class='del'>-        case $tk_platform['platform']</div><div class='del'>-        when "unix", "macintosh"</div><div class='del'>-          undo_text &lt;&lt; "Control-Shift-z"</div><div class='del'>-        else # 'windows'</div><div class='del'>-          undo_text &lt;&lt; "Control-y"</div><div class='del'>-        end</div><div class='del'>-        undo_text &lt;&lt; "redoes undone edits."</div><div class='del'>-      else</div><div class='del'>-        ""</div><div class='del'>-      end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-7. Resize the window.  This widget has been configured with the "setGrid"</div><div class='del'>-option on, so that if you resize the window it will always resize to an</div><div class='del'>-even number of characters high and wide.  Also, if you make the window</div><div class='del'>-narrow you can see that long lines automatically wrap around onto</div><div class='del'>-additional lines so that all the information is always visible.</div><div class='del'>-EOT</div><div class='del'>-</div><div class='del'>-  set_insert('0.0')</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/textpeer.rb b/ext/tk/sample/demos-en/textpeer.rb<br/>deleted file mode 100644<br/>index c25ce15e5c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/textpeer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/textpeer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,76 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# text widget peering demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-# based on Tcl/Tk8.5.0 widget demos</div><div class='del'>-</div><div class='del'>-if defined?($textpeer_demo) &amp;&amp; $textpeer_demo</div><div class='del'>-  $textpeer_demo.destroy </div><div class='del'>-  $textpeer_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$textpeer_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Wdget Peering Demonstration")</div><div class='del'>-  iconname("textpeer")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($textpeer_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-count = [0]</div><div class='del'>-</div><div class='del'>-## Define a widget that we peer from; it won't ever actually be shown though</div><div class='del'>-first = TkText.new(base_frame, :widgetname=&gt;"text#{count[0] += 1}")</div><div class='del'>-first.insert :end,"This is a coupled pair of text widgets; they are peers to "</div><div class='del'>-first.insert :end,"each other. They have the same underlying data model, but "</div><div class='del'>-first.insert :end,"can show different locations, have different current edit "</div><div class='del'>-first.insert :end,"locations, and have different selections. You can also "</div><div class='del'>-first.insert :end,"create additional peers of any of these text widgets using "</div><div class='del'>-first.insert :end,"the Make Peer button beside the text widget to clone, and "</div><div class='del'>-first.insert :end,"delete a particular peer widget using the Delete Peer "</div><div class='del'>-first.insert :end,"button."</div><div class='del'>-</div><div class='del'>-Tk.update_idletasks  ## for 'first' widget</div><div class='del'>-</div><div class='del'>-## Procedures to make and kill clones; most of this is just so that the demo</div><div class='del'>-## looks nice...</div><div class='del'>-def makeClone(count, win, txt)</div><div class='del'>-  cnt = (count[0] += 1)</div><div class='del'>-  peer = TkText::Peer.new(txt, win, :widgetname=&gt;"text#{cnt}")</div><div class='del'>-  sbar = TkScrollbar.new(win, :widgetname=&gt;"sb#{cnt}")</div><div class='del'>-  peer.yscrollbar sbar</div><div class='del'>-  b1 = TkButton.new(win, :widgetname=&gt;"clone#{cnt}", :text=&gt;'Make Peer', </div><div class='del'>-                    :command=&gt;proc{makeClone(count, win, peer)})</div><div class='del'>-  b2 = TkButton.new(win, :widgetname=&gt;"kill#{cnt}", :text=&gt;'Delete Peer', </div><div class='del'>-                    :command=&gt;proc{killClone(win, cnt)})</div><div class='del'>-  row = cnt * 2</div><div class='del'>-  TkGrid.configure(peer, sbar, b1, :sticky=&gt;'nsew', :row=&gt;row)</div><div class='del'>-  TkGrid.configure('^',  '^',  b2, :sticky=&gt;'nsew', :row=&gt;(row+=1))</div><div class='del'>-  TkGrid.configure(b1,  b2, :sticky=&gt;'new')</div><div class='del'>-  TkGrid.rowconfigure(win,  b2, :weight=&gt;1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def killClone(win, cnt)</div><div class='del'>-  Tk.destroy("#{win.path}.text#{cnt}",  "#{win.path}.sb#{cnt}", </div><div class='del'>-             "#{win.path}.clone#{cnt}", "#{win.path}.kill#{cnt}")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Now set up the GUI</div><div class='del'>-makeClone(count, base_frame, first)</div><div class='del'>-makeClone(count, base_frame, first)</div><div class='del'>-first.destroy</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss buttons</div><div class='del'>-TkFrame.new(base_frame){|f|</div><div class='del'>-  TkButton.new(f, :text=&gt;'Dismiss', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 $textpeer_demo.destroy</div><div class='del'>-                 $textpeer_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 'textpeer'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-  TkGrid.configure(f, '-', '-', :sticky=&gt;'ew', :row=&gt;5000)</div><div class='del'>-}</div><div class='del'>-TkGrid.columnconfigure(base_frame, 0, :weight=&gt;1)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/timer b/ext/tk/sample/demos-en/timer<br/>deleted file mode 100644<br/>index 58a41d00c0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/timer?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/timer</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,136 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# timer --</div><div class='del'>-# This script generates a counter with start,stop and reset buttons.</div><div class='del'>-#</div><div class='del'>-# Copyright (C) 1998 Takaaki Tateishi (ttate@jaist.ac.jp)</div><div class='del'>-# last update: Sat Jun 27 12:24:14 JST 1998</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-require "thread"</div><div class='del'>-require "tkafter"</div><div class='del'>-</div><div class='del'>-$time = "0.00"</div><div class='del'>-$m = Mutex.new</div><div class='del'>-$loop = false</div><div class='del'>-</div><div class='del'>-def timer_stop</div><div class='del'>-  $loop = false</div><div class='del'>-  $m.lock</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def timer_start</div><div class='del'>-  $loop = true</div><div class='del'>-  $m.unlock</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def timer_reset</div><div class='del'>-  $time = "0.00"</div><div class='del'>-  $root.countframe.counter['text'] = $time</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def timer_loop</div><div class='del'>-  if $loop</div><div class='del'>-    $time = $time.succ</div><div class='del'>-    $root.countframe.counter['text'] = $time</div><div class='del'>-  end</div><div class='del'>-  Tk.after(10,proc{timer_loop})</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# thread version</div><div class='del'>-#</div><div class='del'>-def timer_loop2</div><div class='del'>-  while true</div><div class='del'>-    $m.lock</div><div class='del'>-    $time = $time.succ</div><div class='del'>-    $root.countframe.counter['text'] = $time</div><div class='del'>-    sleep(0.01)</div><div class='del'>-    $m.unlock</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# TkAfter</div><div class='del'>-#</div><div class='del'>-def timer_loop3</div><div class='del'>-  if $loop</div><div class='del'>-    $time = $time.succ</div><div class='del'>-    $root.countframe.counter['text'] = $time</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class CountFrame &lt; TkFrame</div><div class='del'>-  attr_reader :counter</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    @counter = TkLabel.new(self,</div><div class='del'>-			   'text'=&gt;$time, </div><div class='del'>-			   'relief'=&gt;'raised')</div><div class='del'>-    @counter.pack('fill'=&gt;'both')</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 ButtonFrame &lt; TkFrame</div><div class='del'>-  def initialize(parent=nil,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-=begin</div><div class='del'>-    @stop = TkButton.new(self,</div><div class='del'>-			 'text'=&gt;'Stop',</div><div class='del'>-			 'command'=&gt;proc{timer_stop})</div><div class='del'>-    @start = TkButton.new(self,</div><div class='del'>-			  'text'=&gt;'Start',</div><div class='del'>-			  'command'=&gt;proc{timer_start})</div><div class='del'>-=end</div><div class='del'>-    @stop  = TkButton.new(self, :text=&gt;'Stop',  :state=&gt;:disabled)</div><div class='del'>-    @start = TkButton.new(self, :text=&gt;'Start', :state=&gt;:normal)</div><div class='del'>-</div><div class='del'>-    @stop.command proc{</div><div class='del'>-      timer_stop</div><div class='del'>-      @start.state(:normal)</div><div class='del'>-      @stop.state(:disabled)</div><div class='del'>-    }</div><div class='del'>-    @start.command proc{</div><div class='del'>-      timer_start</div><div class='del'>-      @stop.state(:normal)</div><div class='del'>-      @start.state(:disabled)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @reset = TkButton.new(self,</div><div class='del'>-			  'text'=&gt;'Reset',</div><div class='del'>-			  'command'=&gt;proc{timer_reset})</div><div class='del'>-    for b in [@stop,@start,@reset]</div><div class='del'>-      b.pack('side'=&gt;'left', 'fill'=&gt;'both', 'expand'=&gt;'yes')</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 Timer &lt; TkRoot</div><div class='del'>-  attr_reader :countframe</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @countframe = CountFrame.new(self)</div><div class='del'>-    @buttonframe = ButtonFrame.new(self)</div><div class='del'>-    for f in [@buttonframe,@countframe]</div><div class='del'>-      f.pack('side'=&gt;'top', 'fill'=&gt;'both')</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'>-</div><div class='del'>-$root = Timer.new</div><div class='del'>-</div><div class='del'>-#$thread = Thread.start{timer_loop2}</div><div class='del'>-#timer_loop</div><div class='del'>-TkAfter.new(10,-1,proc{timer_loop3}).start</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-en/tkencoding.rb b/ext/tk/sample/demos-en/tkencoding.rb<br/>deleted file mode 100644<br/>index 727491a6ad..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/tkencoding.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/tkencoding.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,42 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-#</div><div class='del'>-# tkencoding.rb</div><div class='del'>-# written by ttate@jaist.ac.jp</div><div class='del'>-</div><div class='del'>-class TclTkIp</div><div class='del'>-  alias __eval _eval</div><div class='del'>-  alias __invoke _invoke</div><div class='del'>-  private :__eval</div><div class='del'>-  private :__invoke</div><div class='del'>-</div><div class='del'>-  attr_accessor :encoding</div><div class='del'>-</div><div class='del'>-  def _eval(cmd)</div><div class='del'>-    if( @encoding )</div><div class='del'>-      _fromUTF8(__eval(_toUTF8(cmd,@encoding)),@encoding)</div><div class='del'>-    else</div><div class='del'>-      __eval(cmd)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _invoke(*cmds)</div><div class='del'>-    if( @encoding )</div><div class='del'>-      cmds = cmds.collect{|cmd| _toUTF8(cmd,@encoding)}</div><div class='del'>-      _fromUTF8(__invoke(*cmds),@encoding)</div><div class='del'>-    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'>-</div><div class='del'>-module Tk</div><div class='del'>-  INTERP = TkCore::INTERP</div><div class='del'>-</div><div class='del'>-  def encoding=(name)</div><div class='del'>-    INTERP.encoding = name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def encoding</div><div class='del'>-    INTERP.encoding</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-en/toolbar.rb b/ext/tk/sample/demos-en/toolbar.rb<br/>deleted file mode 100644<br/>index 5cf863717b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/toolbar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/toolbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,130 +0,0 @@</div><div class='del'>-# toolbar.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toolbar that can be torn off.</div><div class='del'>-#</div><div class='del'>-# based on "Id: toolbar.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($toolbar_demo) &amp;&amp; $toolbar_demo</div><div class='del'>-  $toolbar_demo.destroy </div><div class='del'>-  $toolbar_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$toolbar_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Ttk Menu Buttons")</div><div class='del'>-  iconname("toolbar")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = Ttk::Frame.new($toolbar_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  msg = Ttk::Label.new(base_frame, :wraplength=&gt;'4i', </div><div class='del'>-                       :text=&gt;Tk::UTF8_String.new(&lt;&lt;EOL))</div><div class='del'>-This is a demonstration of how to do \</div><div class='del'>-a toolbar that is styled correctly \</div><div class='del'>-and which can be torn off (this feature reqrires Tcl/Tk8.5). \</div><div class='del'>-The buttons are configured to be \\u201Ctoolbar style\\u201D buttons by \</div><div class='del'>-telling them that they are to use the Toolbutton style. At the left \</div><div class='del'>-end of the toolbar is a simple marker that the cursor changes to a \</div><div class='del'>-movement icon over; drag that away from the toolbar to tear off the \</div><div class='del'>-whole toolbar into a separate toplevel widget. When the dragged-off \</div><div class='del'>-toolbar is no longer needed, just close it like any normal toplevel \</div><div class='del'>-and it will reattach to the window it was torn off from.</div><div class='del'>-EOL</div><div class='del'>-else</div><div class='del'>-  msg = Ttk::Label.new(base_frame, :wraplength=&gt;'4i', </div><div class='del'>-                       :text=&gt;Tk::UTF8_String.new(&lt;&lt;EOL))</div><div class='del'>-This is a demonstration of how to do \</div><div class='del'>-a toolbar that is styled correctly. The buttons are configured to \</div><div class='del'>-be \\u201Ctoolbar style\\u201D buttons by telling them that they are \</div><div class='del'>-to use the Toolbutton style.</div><div class='del'>-EOL</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Set up the toolbar hull</div><div class='del'>-tbar_base = Tk::Frame.new(base_frame, # Must be a starndard Tk frame!</div><div class='del'>-                          :widgetname=&gt;'toolbar') # for window title</div><div class='del'>-sep = Ttk::Separator.new(base_frame)</div><div class='del'>-to_base = Ttk::Frame.new(tbar_base, :cursor=&gt;'fleur')</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  to  = Ttk::Separator.new(to_base, :orient=&gt;:vertical)</div><div class='del'>-  to2 = Ttk::Separator.new(to_base, :orient=&gt;:vertical)</div><div class='del'>-  to.pack(:fill=&gt;:y, :expand=&gt;true, :padx=&gt;2, :side=&gt;:left)</div><div class='del'>-  to2.pack(:fill=&gt;:y, :expand=&gt;true, :side=&gt;:left)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-contents = Ttk::Frame.new(tbar_base)</div><div class='del'>-Tk.grid(to_base, contents, :sticky=&gt;'nsew')</div><div class='del'>-tbar_base.grid_columnconfigure(contents, :weight=&gt;1)</div><div class='del'>-contents.grid_columnconfigure(1000, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  ## Bindings so that the toolbar can be torn off and reattached</div><div class='del'>-  to_base.bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}</div><div class='del'>-  to.     bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}</div><div class='del'>-  to2.    bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}</div><div class='del'>-  def tbar_base.tearoff(w, x, y)</div><div class='del'>-    on_win = TkWinfo.containing(x, y)</div><div class='del'>-    return unless (on_win &amp;&amp; on_win.path =~ /^#{@path}(\.|$)/)</div><div class='del'>-    self.grid_remove</div><div class='del'>-    w.grid_remove</div><div class='del'>-    self.wm_manage</div><div class='del'>-    # self.wm_title('Toolbar') # if you don't want to use its widget name as a window title.</div><div class='del'>-    self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(self) }</div><div class='del'>-  end</div><div class='del'>-  def tbar_base.untearoff(w)</div><div class='del'>-    self.wm_forget</div><div class='del'>-    w.grid</div><div class='del'>-    self.grid</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Some content for the rest of the toplevel</div><div class='del'>-text = TkText.new(base_frame, :width=&gt;40, :height=&gt;10)</div><div class='del'>-</div><div class='del'>-## Toolbar contents</div><div class='del'>-tb_btn = Ttk::Button.new(tbar_base, :text=&gt;'Button', :style=&gt;'Toolbutton', </div><div class='del'>-                         :command=&gt;proc{text.insert(:end, "Button Pressed\n")})</div><div class='del'>-tb_chk = Ttk::Checkbutton.new(tbar_base, :text=&gt;'Check', :style=&gt;'Toolbutton', </div><div class='del'>-                              :variable=&gt;(check = TkVariable.new), </div><div class='del'>-                              :command=&gt;proc{</div><div class='del'>-                                text.insert(:end, "Check is #{check.value}\n")</div><div class='del'>-                              })</div><div class='del'>-tb_mbtn = Ttk::Menubutton.new(tbar_base, :text=&gt;'Menu')</div><div class='del'>-tb_combo = Ttk::Combobox.new(tbar_base, :value=&gt;TkFont.families, </div><div class='del'>-                             :state=&gt;:readonly)</div><div class='del'>-tb_mbtn.menu(menu = Tk::Menu.new(tb_mbtn))</div><div class='del'>-menu.add(:command, :label=&gt;'Just', :command=&gt;proc{text.insert(:end, "Just\n")})</div><div class='del'>-menu.add(:command, :label=&gt;'An', :command=&gt;proc{text.insert(:end, "An\n")})</div><div class='del'>-menu.add(:command, :label=&gt;'Example', </div><div class='del'>-         :command=&gt;proc{text.insert(:end, "Example\n")})</div><div class='del'>-tb_combo.bind('&lt;ComboboxSelected&gt;'){ text.font.family = tb_combo.get }</div><div class='del'>-</div><div class='del'>-## Arrange contents</div><div class='del'>-Tk.grid(tb_btn, tb_chk, tb_mbtn, tb_combo, </div><div class='del'>-        :in=&gt;contents, :padx=&gt;2, :sticky=&gt;'ns')</div><div class='del'>-Tk.grid(tbar_base, :sticky=&gt;'ew')</div><div class='del'>-Tk.grid(sep, :sticky=&gt;'ew')</div><div class='del'>-Tk.grid(msg, :sticky=&gt;'ew')</div><div class='del'>-Tk.grid(text, :sticky=&gt;'nsew')</div><div class='del'>-base_frame.grid_rowconfigure(text, :weight=&gt;1)</div><div class='del'>-base_frame.grid_columnconfigure(text, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss buttons</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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 'toolbar'}), </div><div class='del'>-         Ttk::Button.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'>-                           $toolbar_demo.destroy</div><div class='del'>-                           $toolbar_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-  Tk.grid(frame, :sticky=&gt;'ew')</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-en/tree.rb b/ext/tk/sample/demos-en/tree.rb<br/>deleted file mode 100644<br/>index 0c7f0e71a2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/tree.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/tree.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,119 +0,0 @@</div><div class='del'>-# tree.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing a Ttk</div><div class='del'>-# tree widget.</div><div class='del'>-#</div><div class='del'>-# based on "Id: tree.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($tree_demo) &amp;&amp; $tree_demo</div><div class='del'>-  $tree_demo.destroy </div><div class='del'>-  $tree_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$tree_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Directory Browser")</div><div class='del'>-  iconname("tree")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($tree_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-## Explanatory text</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', </div><div class='del'>-               :justify=&gt;:left, :anchor=&gt;'n', :padding=&gt;[10, 2, 10, 6], </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:fill=&gt;:x)</div><div class='del'>-Ttk is the new Tk themed widget set. \</div><div class='del'>-One of the widgets it includes is a tree widget, \</div><div class='del'>-which allows the user to browse a hierarchical data-set such as a filesystem. \</div><div class='del'>-The tree widget not only allows for the tree part itself, \</div><div class='del'>-but it also supports an arbitrary number of additional columns \</div><div class='del'>-which can show additional data (in this case, the size of the files \</div><div class='del'>-found in your filesystem). \</div><div class='del'>-You can also change the width of the columns \</div><div class='del'>-by dragging the boundary between them.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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 'tree'}), </div><div class='del'>-         Ttk::Button.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'>-                           $tree_demo.destroy</div><div class='del'>-                           $tree_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-## Code to populate the roots of the tree (can be more than one on Windows)</div><div class='del'>-def populate_roots(tree)</div><div class='del'>-  TkComm.simplelist(Tk.tk_call('file', 'volumes')).sort.each{|dir|</div><div class='del'>-    populate_tree(tree, tree.insert(nil, :end, :text=&gt;dir, </div><div class='del'>-                                    :values=&gt;[dir, 'directory']))</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Code to populate a node of the tree</div><div class='del'>-def populate_tree(tree, node)</div><div class='del'>-  return if tree.get(node, :type) != 'directory'</div><div class='del'>-</div><div class='del'>-  path = tree.get(node, :fullpath)</div><div class='del'>-  tree.delete(tree.children(node))</div><div class='del'>-  Dir.glob("#{path}/*").sort.each{|f|</div><div class='del'>-    type = File.ftype(f)</div><div class='del'>-    id = tree.insert(node, :end, </div><div class='del'>-                     :text=&gt;File.basename(f), :values=&gt;[f, type]).id</div><div class='del'>-    if type == 'directory'</div><div class='del'>-      ## Make it so that this node is openable</div><div class='del'>-      tree.insert(id, 0, :text=&gt;'dummy')</div><div class='del'>-      tree.itemconfigure(id, :text=&gt;File.basename(f))</div><div class='del'>-    elsif type == 'file'</div><div class='del'>-      size = File.size(f)</div><div class='del'>-      if size &gt;= 1024*1024*1024</div><div class='del'>-        size = '%.1f GB' % (size.to_f/1024/1024/1024)</div><div class='del'>-      elsif size &gt;= 1024*1024</div><div class='del'>-        size = '%.1f MB' % (size.to_f/1024/1024)</div><div class='del'>-      elsif size &gt;= 1024</div><div class='del'>-        size = '%.1f KB' % (size.to_f/1024)</div><div class='del'>-      else</div><div class='del'>-        size = '%.1f bytes' % (size.to_f/1024)</div><div class='del'>-      end</div><div class='del'>-      tree.set(id, :size, size)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # Stop this code from rerunning on the current node</div><div class='del'>-  tree.set(node, :type, 'processed_directory')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Create the tree and set it up</div><div class='del'>-tree = Ttk::Treeview.new(base_frame, :columns=&gt;%w(fullpath type size), </div><div class='del'>-                         :displaycolumns=&gt;['size'])</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  vsb = tree.yscrollbar(Ttk::Scrollbar.new(base_frame))</div><div class='del'>-  hsb = tree.xscrollbar(Ttk::Scrollbar.new(base_frame))</div><div class='del'>-else</div><div class='del'>-  vsb = tree.yscrollbar(Tk::Scrollbar.new(base_frame))</div><div class='del'>-  hsb = tree.xscrollbar(Tk::Scrollbar.new(base_frame))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-tree.heading_configure('#0', :text=&gt;'Directory Structure')</div><div class='del'>-tree.heading_configure('size', :text=&gt;'File Size')</div><div class='del'>-tree.column_configure('size', :stretch=&gt;0, :width=&gt;70)</div><div class='del'>-populate_roots(tree)</div><div class='del'>-tree.bind('&lt;TreeviewOpen&gt;', '%W'){|w| populate_tree(w, w.focus_item)}</div><div class='del'>-</div><div class='del'>-## Arrange the tree and its scrollbars in the toplevel</div><div class='del'>-container = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-container.lower</div><div class='del'>-Tk.grid(tree, vsb, :in=&gt;container, :sticky=&gt;'nsew')</div><div class='del'>-Tk.grid(hsb,       :in=&gt;container, :sticky=&gt;'nsew')</div><div class='del'>-container.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-container.grid_rowconfigure(0, :weight=&gt;1)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ttkbut.rb b/ext/tk/sample/demos-en/ttkbut.rb<br/>deleted file mode 100644<br/>index b5780f589a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ttkbut.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttkbut.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,139 +0,0 @@</div><div class='del'>-# ttkbut.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing several</div><div class='del'>-# simple Ttk widgets, such as labels, labelframes, buttons, checkbuttons and</div><div class='del'>-# radiobuttons.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttkbut.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttkbut_demo) &amp;&amp; $ttkbut_demo</div><div class='del'>-  $ttkbut_demo.destroy </div><div class='del'>-  $ttkbut_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttkbut_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Simple Ttk Widgets")</div><div class='del'>-  iconname("ttkbut")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($ttkbut_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-Ttk is the new Tk themed widget set. This is a Ttk themed label, \</div><div class='del'>-and below are three groups of Ttk widgets in Ttk labelframes. \</div><div class='del'>-The first group are all buttons that set the current application theme \</div><div class='del'>-when pressed. The second group contains three sets of checkbuttons, \</div><div class='del'>-with a separator widget between the sets. Note that the "Enabled" \</div><div class='del'>-button controls whether all the other themed widgets in this toplevel are \</div><div class='del'>-in the disabled state. The third group has a collection of linked \</div><div class='del'>-radiobuttons.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## Add buttons for setting the theme</div><div class='del'>-buttons = Ttk::Labelframe.new(base_frame, :text=&gt;'Buttons')</div><div class='del'>-# Ttk::Style.theme_names.each{|theme|</div><div class='del'>-#   Ttk::Button.new(buttons, :text=&gt;theme, </div><div class='del'>-#                   :command=&gt;proc{Ttk::Style.theme_use theme}).pack(:pady=&gt;2)</div><div class='del'>-# }</div><div class='del'>-Ttk.themes.each{|theme|</div><div class='del'>-  Ttk::Button.new(buttons, :text=&gt;theme, </div><div class='del'>-                  :command=&gt;proc{Ttk.set_theme theme}).pack(:pady=&gt;2)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Helper procedure for the top checkbutton</div><div class='del'>-def setState(root, value, *excepts)</div><div class='del'>-  return if excepts.member?(root)</div><div class='del'>-</div><div class='del'>-  ## Non-Ttk widgets (e.g. the toplevel) will fail, so make it silent</div><div class='del'>-  begin</div><div class='del'>-    root.state = value</div><div class='del'>-  rescue</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ## Recursively invoke on all children of this root that are in the same</div><div class='del'>-  ## toplevel widget</div><div class='del'>-  root.winfo_children.each{|w|</div><div class='del'>-    setState(w, value, *excepts) if w.winfo_toplevel == root.winfo_toplevel</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Set up the checkbutton group</div><div class='del'>-checks = Ttk::Labelframe.new(base_frame, :text=&gt;'Checkbuttons')</div><div class='del'>-enabled = TkVariable.new(true)</div><div class='del'>-e = Ttk::Checkbutton.new(checks, :text=&gt;'Enabled', :variable=&gt;enabled, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           setState($ttkbut_demo, </div><div class='del'>-                                    ((enabled.bool)? "!disabled" : "disabled"),</div><div class='del'>-                                    e)</div><div class='del'>-                         })</div><div class='del'>-</div><div class='del'>-## See ttk_widget(n) for other possible state flags</div><div class='del'>-sep1 = Ttk::Separator.new(checks)</div><div class='del'>-sep2 = Ttk::Separator.new(checks)</div><div class='del'>-</div><div class='del'>-cheese  = TkVariable.new</div><div class='del'>-tomato  = TkVariable.new</div><div class='del'>-basil   = TkVariable.new</div><div class='del'>-oregano = TkVariable.new</div><div class='del'>-</div><div class='del'>-c1 = Ttk::Checkbutton.new(checks, :text=&gt;'Cheese',  :variable=&gt;cheese)</div><div class='del'>-c2 = Ttk::Checkbutton.new(checks, :text=&gt;'Tomato',  :variable=&gt;tomato)</div><div class='del'>-c3 = Ttk::Checkbutton.new(checks, :text=&gt;'Basil',   :variable=&gt;basil)</div><div class='del'>-c4 = Ttk::Checkbutton.new(checks, :text=&gt;'Oregano', :variable=&gt;oregano)</div><div class='del'>-</div><div class='del'>-Tk.pack(e, sep1, c1, c2, sep2, c3, c4, :fill=&gt;:x, :pady=&gt;2)</div><div class='del'>-</div><div class='del'>-## Set up the radiobutton group</div><div class='del'>-radios = Ttk::Labelframe.new(base_frame, :text=&gt;'Radiobuttons')</div><div class='del'>-</div><div class='del'>-happyness = TkVariable.new</div><div class='del'>-</div><div class='del'>-r1 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Great', :value=&gt;'great')</div><div class='del'>-r2 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Good', :value=&gt;'good')</div><div class='del'>-r3 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Ok', :value=&gt;'ok')</div><div class='del'>-r4 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Poor', :value=&gt;'poor')</div><div class='del'>-r5 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Awful', :value=&gt;'awful')</div><div class='del'>-</div><div class='del'>-Tk.pack(r1, r2, r3, r4, r5, :fill=&gt;:x, :padx=&gt;3, :pady=&gt;2)</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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(base_frame, ['enabled', enabled], </div><div class='del'>-                                    ['cheese', cheese], ['tomato', tomato], </div><div class='del'>-                                    ['basil', basil], ['oregano', oregano], </div><div class='del'>-                                    ['happyness', happyness])</div><div class='del'>-                         }), </div><div class='del'>-         Ttk::Button.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 'ttkbut'}), </div><div class='del'>-         Ttk::Button.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 = $ttkbut_demo</div><div class='del'>-                           $ttkbut_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'>-  grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-  pack(:side=&gt;:bottom, :fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Arrange things neatly</div><div class='del'>-f = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-f.lower</div><div class='del'>-Tk.grid(buttons, checks, radios, :in=&gt;f, :sticky=&gt;'nwe', :pady=&gt;2, :padx=&gt;3)</div><div class='del'>-f.grid_columnconfigure([0, 1, 2], :weight=&gt;1, :uniform=&gt;:yes)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ttkmenu.rb b/ext/tk/sample/demos-en/ttkmenu.rb<br/>deleted file mode 100644<br/>index 75ecdb09c4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ttkmenu.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttkmenu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,85 +0,0 @@</div><div class='del'>-# ttkmenu.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing several Ttk</div><div class='del'>-# menubutton widgets.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttkmenu.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttkmenu_demo) &amp;&amp; $ttkmenu_demo</div><div class='del'>-  $ttkmenu_demo.destroy </div><div class='del'>-  $ttkmenu_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttkmenu_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Ttk Menu Buttons")</div><div class='del'>-  iconname("ttkmenu")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = Ttk::Frame.new($ttkmenu_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-Ttk is the new Tk themed widget set, \</div><div class='del'>-and one widget that is available in themed form is the menubutton. \</div><div class='del'>-Below are some themed menu buttons \</div><div class='del'>-that allow you to pick the current theme in use. \</div><div class='del'>-Notice how picking a theme changes the way \</div><div class='del'>-that the menu buttons themselves look, \</div><div class='del'>-and that the central menu button is styled differently \</div><div class='del'>-(in a way that is normally suitable for toolbars). \</div><div class='del'>-However, there are no themed menus; the standard Tk menus were judged \</div><div class='del'>-to have a sufficiently good look-and-feel on all platforms, \</div><div class='del'>-especially as they are implemented as native controls in many places.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-Ttk::Separator.new(base_frame).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new($ttkmenu_demo) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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 'ttkmenu'}), </div><div class='del'>-         Ttk::Button.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'>-                           $ttkmenu_demo.destroy</div><div class='del'>-                           $ttkmenu_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-b1 = Ttk::Menubutton.new(base_frame,:text=&gt;'Select a theme',:direction=&gt;:above)</div><div class='del'>-b2 = Ttk::Menubutton.new(base_frame,:text=&gt;'Select a theme',:direction=&gt;:left)</div><div class='del'>-b3 = Ttk::Menubutton.new(base_frame,:text=&gt;'Select a theme',:direction=&gt;:right)</div><div class='del'>-b4 = Ttk::Menubutton.new(base_frame,:text=&gt;'Select a theme',:direction=&gt;:flush,</div><div class='del'>-                         :style=&gt;Ttk::Menubutton.style('Toolbutton'))</div><div class='del'>-b5 = Ttk::Menubutton.new(base_frame,:text=&gt;'Select a theme',:direction=&gt;:below)</div><div class='del'>-</div><div class='del'>-b1.menu(m1 = Tk::Menu.new(b1, :tearoff=&gt;false))</div><div class='del'>-b2.menu(m2 = Tk::Menu.new(b2, :tearoff=&gt;false))</div><div class='del'>-b3.menu(m3 = Tk::Menu.new(b3, :tearoff=&gt;false))</div><div class='del'>-b4.menu(m4 = Tk::Menu.new(b4, :tearoff=&gt;false))</div><div class='del'>-b5.menu(m5 = Tk::Menu.new(b5, :tearoff=&gt;false))</div><div class='del'>-</div><div class='del'>-Ttk.themes.each{|theme|</div><div class='del'>-  m1.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-  m2.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-  m3.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-  m4.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-  m5.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-f = Ttk::Frame.new(base_frame).pack(:fill=&gt;:x)</div><div class='del'>-f1 = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-f.lower</div><div class='del'>-</div><div class='del'>-f.grid_anchor(:center)</div><div class='del'>-TkGrid('x', b1, 'x', :in=&gt;f, :padx=&gt;3, :pady=&gt;2)</div><div class='del'>-TkGrid(b2,  b4, b3,  :in=&gt;f, :padx=&gt;3, :pady=&gt;2)</div><div class='del'>-TkGrid('x', b5, 'x', :in=&gt;f, :padx=&gt;3, :pady=&gt;2)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ttknote.rb b/ext/tk/sample/demos-en/ttknote.rb<br/>deleted file mode 100644<br/>index c2a22b447a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ttknote.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttknote.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,89 +0,0 @@</div><div class='del'>-# ttknote.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing a Ttk</div><div class='del'>-# notebook widget.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttknote.tcl,v 1.5 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttknote_demo) &amp;&amp; $ttknote_demo</div><div class='del'>-  $ttknote_demo.destroy </div><div class='del'>-  $ttknote_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttknote_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Ttk Notebook Widget")</div><div class='del'>-  iconname("ttknote")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new($ttknote_demo) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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 'ttknote'}), </div><div class='del'>-         Ttk::Button.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'>-                           $ttknote_demo.destroy</div><div class='del'>-                           $ttknote_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-base_frame = Ttk::Frame.new($ttknote_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-## Make the notebook and set up Ctrl+Tab traversal</div><div class='del'>-notebook = Ttk::Notebook.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true, </div><div class='del'>-                                              :padx=&gt;2, :pady=&gt;3)</div><div class='del'>-notebook.enable_traversal</div><div class='del'>-</div><div class='del'>-## Popuplate the first pane</div><div class='del'>-f_msg = Ttk::Frame.new(notebook)</div><div class='del'>-msg_m = Ttk::Label.new(f_msg, :font=&gt;$font, :wraplength=&gt;'4i', </div><div class='del'>-                       :justify=&gt;:left, :anchor=&gt;'n', :text=&gt;&lt;&lt;EOL)</div><div class='del'>-Ttk is the new Tk themed widget set. \</div><div class='del'>-One of the widgets it includes is the notebook widget, \</div><div class='del'>-which provides a set of tabs that allow the selection of a group of panels, \</div><div class='del'>-each with distinct content. \</div><div class='del'>-They are a feature of many modern user interfaces. \</div><div class='del'>-Not only can the tabs be selected with the mouse, \</div><div class='del'>-but they can also be switched between using Ctrl+Tab \</div><div class='del'>-when the notebook page heading itself is selected. \</div><div class='del'>-Note that the second tab is disabled, and cannot be selected.</div><div class='del'>-EOL</div><div class='del'>-neat = TkVariable.new</div><div class='del'>-after_id = nil</div><div class='del'>-msg_b = Ttk::Button.new(f_msg, :text=&gt;'Neat!', :underline=&gt;0, </div><div class='del'>-                        :command=&gt;proc{</div><div class='del'>-                          neat.value = 'Yeah, I know...'</div><div class='del'>-                          Tk.after_cancel(after_id) if after_id</div><div class='del'>-                          after_id = Tk.after(500){neat.value = ''}</div><div class='del'>-                        })</div><div class='del'>-msg_b.winfo_toplevel.bind('Alt-n'){ msg_b.focus; msg_b.invoke }</div><div class='del'>-msg_l = Ttk::Label.new(f_msg, :textvariable=&gt;neat)</div><div class='del'>-notebook.add(f_msg, :text=&gt;'Description', :underline=&gt;0, :padding=&gt;2)</div><div class='del'>-Tk.grid(msg_m, '-', :sticky=&gt;'new', :pady=&gt;2)</div><div class='del'>-Tk.grid(msg_b, msg_l, :pady=&gt;[2, 4])</div><div class='del'>-f_msg.grid_rowconfigure(1, :weight=&gt;1)</div><div class='del'>-f_msg.grid_columnconfigure([0, 1], :weight=&gt;1, :uniform=&gt;1)</div><div class='del'>-</div><div class='del'>-## Populate the second pane. Note that the content doesn't really matter</div><div class='del'>-f_disabled = Ttk::Frame.new(notebook)</div><div class='del'>-notebook.add(f_disabled, :text=&gt;'Disabled', :state=&gt;:disabled)</div><div class='del'>-</div><div class='del'>-## Popuplate the third pane</div><div class='del'>-f_editor = Ttk::Frame.new(notebook)</div><div class='del'>-notebook.add(f_editor, :text=&gt;'Text Editor', :underline=&gt;0)</div><div class='del'>-editor_t = Tk::Text.new(f_editor, :width=&gt;40, :height=&gt;10, :wrap=&gt;:char)</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  editor_s = editor_t.yscrollbar(Ttk::Scrollbar.new(f_editor))</div><div class='del'>-else</div><div class='del'>-  editor_s = editor_t.yscrollbar(Tk::Scrollbar.new(f_editor))</div><div class='del'>-end</div><div class='del'>-editor_s.pack(:side=&gt;:right, :fill=&gt;:y, :padx=&gt;[0,2], :pady=&gt;2)</div><div class='del'>-editor_t.pack(:fill=&gt;:both, :expand=&gt;true, :padx=&gt;[2,0], :pady=&gt;2)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ttkpane.rb b/ext/tk/sample/demos-en/ttkpane.rb<br/>deleted file mode 100644<br/>index 56df613db4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ttkpane.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttkpane.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,213 +0,0 @@</div><div class='del'>-# ttkpane.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a Ttk pane with some content.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttkpane.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttkpane_demo) &amp;&amp; $ttkpane_demo</div><div class='del'>-  $ttkpane_demo.destroy </div><div class='del'>-  $ttkpane_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttkpane_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Themed Nested Panes")</div><div class='del'>-  iconname("ttkpane")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($ttkpane_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-This demonstration shows off a nested set of themed paned windows. \</div><div class='del'>-Their sizes can be changed by grabbing the area \</div><div class='del'>-between each contained pane and dragging the divider.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-Ttk::Separator.new(base_frame).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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 'ttkpane'}), </div><div class='del'>-         Ttk::Button.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'>-                           $ttkpane_demo.destroy</div><div class='del'>-                           $ttkpane_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-frame = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-outer = Ttk::Panedwindow.new(frame, :orient=&gt;:horizontal)</div><div class='del'>-outer.add(in_left = Ttk::Panedwindow.new(outer, :orient=&gt;:vertical))</div><div class='del'>-outer.add(in_right = Ttk::Panedwindow.new(outer, :orient=&gt;:vertical))</div><div class='del'>-in_left.add(left_top = Ttk::Labelframe.new(in_left, :text=&gt;'Button'))</div><div class='del'>-in_left.add(left_bot = Ttk::Labelframe.new(in_left, :text=&gt;'Clocks'))</div><div class='del'>-in_right.add(right_top = Ttk::Labelframe.new(in_right, :text=&gt;'Progress'))</div><div class='del'>-in_right.add(right_bot = Ttk::Labelframe.new(in_right, :text=&gt;'Text'))</div><div class='del'>-if Tk.windowingsystem == 'aqua'</div><div class='del'>-  [left_top, left_bot, right_top, right_bot].each{|w| w.padding(3) }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Fill the button pane</div><div class='del'>-Ttk::Button.new(left_top, :text=&gt;'Press Me', </div><div class='del'>-                :command=&gt;proc{</div><div class='del'>-                  Tk.messageBox(:type=&gt;'ok', :icon=&gt;'info', :message=&gt;'Ouch!', </div><div class='del'>-                                :detail=&gt;'That hurt...', :parent=&gt;base_frame, </div><div class='del'>-                                :title=&gt;'Button Pressed')</div><div class='del'>-                }).pack(:padx=&gt;2, :pady=&gt;5)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-zones_list = [</div><div class='del'>-  [':Europe/Berlin'], </div><div class='del'>-  [':America/Argentina/Buenos_Aires', ':America/Buenos_Aires'], </div><div class='del'>-  [':Africa/Johannesburg'], </div><div class='del'>-  [':Europe/London'], </div><div class='del'>-  [':America/Los_Angeles'], </div><div class='del'>-  [':Europe/Moscow'],</div><div class='del'>-  [':America/New_York'], </div><div class='del'>-  [':Asia/Singapore'], </div><div class='del'>-  [':Australia/Sydney'], </div><div class='del'>-  [':Asia/Tokyo'], </div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-zones = []</div><div class='del'>-</div><div class='del'>-# Check tzinfo support</div><div class='del'>-if $tk_major_ver &gt; 8 || ($tk_major_ver == 8 &amp;&amp; $tk_minor_ver &gt;= 5)</div><div class='del'>-  tzinfo = :tcl</div><div class='del'>-</div><div class='del'>-  # Force a pre-load of all the timezones needed; otherwise can end up</div><div class='del'>-  # poor-looking synch problems!</div><div class='del'>-  zones_list.each{|list|</div><div class='del'>-    list.each{|zone|</div><div class='del'>-      begin</div><div class='del'>-        Tk.tk_call('clock', 'format', '0', '-timezone', zone)</div><div class='del'>-      rescue RuntimeError</div><div class='del'>-        # ignore</div><div class='del'>-      else</div><div class='del'>-        zones &lt;&lt; [zone, zone[%r&lt;[^/:]+$&gt;].tr('_', ' ')]</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  begin</div><div class='del'>-    require 'tzinfo'</div><div class='del'>-    tzinfo = :tzinfo</div><div class='del'>-  rescue Exception</div><div class='del'>-    begin</div><div class='del'>-      require 'tzfile'</div><div class='del'>-      tzinfo = :tzfile</div><div class='del'>-    rescue Exception</div><div class='del'>-      tzinfo = nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  case tzinfo</div><div class='del'>-  when :tzinfo</div><div class='del'>-    zones_list.each{|list|</div><div class='del'>-      list.each{|zone|</div><div class='del'>-        begin</div><div class='del'>-          tz = TZInfo::Timezone.get(zone[%r&lt;[^:]+$&gt;])</div><div class='del'>-        rescue Exception</div><div class='del'>-          # ignore</div><div class='del'>-        else</div><div class='del'>-          zones &lt;&lt; [tz, zone[%r&lt;[^/:]+$&gt;].tr('_', ' ')]</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  when :tzfile</div><div class='del'>-    zones_list.each{|list|</div><div class='del'>-      list.each{|zone|</div><div class='del'>-        begin</div><div class='del'>-          tz = TZFile.create(zone[%r&lt;[^:]+$&gt;])</div><div class='del'>-        rescue Exception</div><div class='del'>-          # ignore</div><div class='del'>-        else</div><div class='del'>-          zones &lt;&lt; [tz, zone[%r&lt;[^/:]+$&gt;].tr('_', ' ')]</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    [ -7, -4, -2, -1, 0, +1, +3, +8, +9, +10 ].each{|zone|</div><div class='del'>-      zones &lt;&lt; [zone, 'UTC%+03d00' % zone]</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-time = TkVariable.new_hash</div><div class='del'>-</div><div class='del'>-case tzinfo</div><div class='del'>-when :tcl</div><div class='del'>-  update_proc = proc{|now, tz, label|</div><div class='del'>-    time[label] = Tk.tk_call('clock', 'format', now.tv_sec, </div><div class='del'>-                             '-timezone', tz, '-format', '%T')</div><div class='del'>-  }</div><div class='del'>-when :tzinfo</div><div class='del'>-  update_proc = proc{|now, tz, label|</div><div class='del'>-    time[label] = tz.utc_to_local(now).strftime('%H:%M:%S')</div><div class='del'>-  }</div><div class='del'>-when :tzfile</div><div class='del'>-  update_proc = proc{|now, tz, label|</div><div class='del'>-    time[label] = tz.at(now.tv_sec).strftime('%H:%M:%S')</div><div class='del'>-  }</div><div class='del'>-else</div><div class='del'>-  update_proc = proc{|now, tz, label|</div><div class='del'>-    time[label] = (now + (tz * 3600)).strftime('%H:%M:%S')</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Fill the clocks pane</div><div class='del'>-zones.each_with_index{|(zone, label), idx|</div><div class='del'>-  Ttk::Separator.new(left_bot).pack(:fill=&gt;:x) if idx &gt; 0</div><div class='del'>-  Ttk::Label.new(left_bot, :text=&gt;label, :anchor=&gt;'w').pack(:fill=&gt;:x)</div><div class='del'>-  Ttk::Label.new(left_bot, :textvariable=&gt;time.ref(label), </div><div class='del'>-                 :anchor=&gt;'w').pack(:fill=&gt;:x)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Timer start</div><div class='del'>-every = proc{</div><div class='del'>-  now = Time.now.utc</div><div class='del'>-  zones.each{|zone, label| update_proc.call(now, zone, label) }</div><div class='del'>-}</div><div class='del'>-TkRTTimer.new(1000, -1, every).start(0, every)</div><div class='del'>-</div><div class='del'>-# Fill the progress pane</div><div class='del'>-Ttk::Progressbar.new(right_top, :mode=&gt;:indeterminate).pack(:fill=&gt;:both, :expand=&gt;true).start</div><div class='del'>-</div><div class='del'>-# Fill the text pane</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  # The trick with the ttk::frame makes the text widget look like it fits with</div><div class='del'>-  # the current Ttk theme despite not being a themed widget itself. It is done</div><div class='del'>-  # by styling the frame like an entry, turning off the border in the text</div><div class='del'>-  # widget, and putting the text widget in the frame with enough space to allow</div><div class='del'>-  # the surrounding border to show through (2 pixels seems to be enough).</div><div class='del'>-  f = Ttk::Frame.new(right_bot, :style=&gt;Ttk::Entry)</div><div class='del'>-  txt = TkText.new(frame, :wrap=&gt;:word, :width=&gt;30, :borderwidth=&gt;0)</div><div class='del'>-  txt.pack(:fill=&gt;:both, :expand=&gt;true, :in=&gt;f, :pady=&gt;2, :padx=&gt;2)</div><div class='del'>-  scr = txt.yscrollbar(Ttk::Scrollbar.new(frame))</div><div class='del'>-  scr.pack(:side=&gt;:right, :fill=&gt;:y, :in=&gt;right_bot)</div><div class='del'>-  f.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  outer.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-else</div><div class='del'>-  txt = TkText.new(frame, :wrap=&gt;:word, :width=&gt;30, :borderwidth=&gt;0)</div><div class='del'>-  scr = txt.yscrollbar(TkScrollbar.new(frame))</div><div class='del'>-  scr.pack(:side=&gt;:right, :fill=&gt;:y, :in=&gt;right_bot)</div><div class='del'>-  txt.pack(:fill=&gt;:both, :expand=&gt;true, :in=&gt;right_bot)</div><div class='del'>-  outer.pack(:fill=&gt;:both, :expand=&gt;true, :padx=&gt;10, :pady=&gt;[6, 10])</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-en/ttkprogress.rb b/ext/tk/sample/demos-en/ttkprogress.rb<br/>deleted file mode 100644<br/>index 3eb9a64a4a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/ttkprogress.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/ttkprogress.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,66 +0,0 @@</div><div class='del'>-# ttkprogress.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates several progress bar widgets.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttkprogress.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttkprogress_demo) &amp;&amp; $ttkprogress_demo</div><div class='del'>-  $ttkprogress_demo.destroy </div><div class='del'>-  $ttkprogress_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttkprogress_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Progress Bar Demonstration")</div><div class='del'>-  iconname("ttkprogress")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($ttkprogress_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;Tk::UTF8_String.new(&lt;&lt;EOL)).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-Below are two progress bars. \</div><div class='del'>-The top one is a \\u201Cdeterminate\\u201D progress bar, \</div><div class='del'>-which is used for showing how far through a defined task the program has got. \</div><div class='del'>-The bottom one is an \\u201Cindeterminate\\u201D progress bar, \</div><div class='del'>-which is used to show that the program is busy \</div><div class='del'>-but does not know how long for. Both are run here in self-animated mode, \</div><div class='del'>-which can be turned on and off using the buttons underneath.</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss buttons</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.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 'ttkprogress'}), </div><div class='del'>-         Ttk::Button.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'>-                           $ttkprogress_demo.destroy</div><div class='del'>-                           $ttkprogress_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-frame = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-p1 = Ttk::Progressbar.new(frame, :mode=&gt;:determinate)</div><div class='del'>-p2 = Ttk::Progressbar.new(frame, :mode=&gt;:indeterminate)</div><div class='del'>-</div><div class='del'>-start = Ttk::Button.new(frame, :text=&gt;'Start Progress', </div><div class='del'>-                        :command=&gt;proc{ p1.start; p2.start })</div><div class='del'>-stop  = Ttk::Button.new(frame, :text=&gt;'Stop Progress', </div><div class='del'>-                        :command=&gt;proc{ p1.stop; p2.stop })</div><div class='del'>-</div><div class='del'>-Tk.grid(p1, '-', :pady=&gt;5, :padx=&gt;10)</div><div class='del'>-Tk.grid(p2, '-', :pady=&gt;5, :padx=&gt;10)</div><div class='del'>-Tk.grid(start, stop, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-start.grid_configure(:sticky=&gt;'e')</div><div class='del'>-stop.grid_configure(:sticky=&gt;'w')</div><div class='del'>-frame.grid_columnconfigure(:all, :weight=&gt;1)</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-en/twind.rb b/ext/tk/sample/demos-en/twind.rb<br/>deleted file mode 100644<br/>index 65ee712ff7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/twind.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/twind.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,291 +0,0 @@</div><div class='del'>-# twind.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a text widget with a bunch of</div><div class='del'>-# embedded windows.</div><div class='del'>-#</div><div class='del'>-# text (embedded windows) 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?($twind_demo) &amp;&amp; $twind_demo</div><div class='del'>-  $twind_demo.destroy </div><div class='del'>-  $twind_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$twind_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Embedded Windows")</div><div class='del'>-  iconname("Embedded Windows")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($twind_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$twind_buttons = TkFrame.new(base_frame) {|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 = $twind_demo</div><div class='del'>-      $twind_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 'twind'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$twind_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$twind_text = nil</div><div class='del'>-TkFrame.new(base_frame, 'highlightthickness'=&gt;2, 'borderwidth'=&gt;2, </div><div class='del'>-            'relief'=&gt;'sunken') {|f|</div><div class='del'>-  $twind_text = TkText.new(f, 'setgrid'=&gt;'true', 'font'=&gt;$font, </div><div class='del'>-                          'width'=&gt;'70', 'height'=&gt;35, 'wrap'=&gt;'word', </div><div class='del'>-                          'highlightthickness'=&gt;0, 'borderwidth'=&gt;0 ){|t|</div><div class='del'>-    TkScrollbar.new(f) {|s|</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'>-    }.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  }.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-}.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-$tag_center = TkTextTag.new($twind_text, </div><div class='del'>-                            'justify' =&gt;'center',</div><div class='del'>-                            'spacing1'=&gt;'5m',</div><div class='del'>-                            'spacing3'=&gt;'5m'  )</div><div class='del'>-$tag_buttons = TkTextTag.new($twind_text, </div><div class='del'>-                             'lmargin1'=&gt;'1c',</div><div class='del'>-                             'lmargin2'=&gt;'1c',</div><div class='del'>-                             'rmargin' =&gt;'1c',</div><div class='del'>-                             'spacing1'=&gt;'3m',</div><div class='del'>-                             'spacing2'=&gt;0,</div><div class='del'>-                             'spacing3'=&gt;0 )</div><div class='del'>-</div><div class='del'>-$twind_text.insert('end', "A text widget can contain other widgets embedded ")</div><div class='del'>-$twind_text.insert('end', "it.  These are called \"embedded windows\", ")</div><div class='del'>-$twind_text.insert('end', "and they can consist of arbitrary widgets.  ")</div><div class='del'>-$twind_text.insert('end', "For example, here are two embedded button ")</div><div class='del'>-$twind_text.insert('end', "widgets.  You can click on the first button to ")</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                   #text 'ON'</div><div class='del'>-                   text 'Turn On'</div><div class='del'>-                   command proc{textWindOn $twind_text,$twind_buttons}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind_text.insert('end', " horizontal scrolling, which also turns off ")</div><div class='del'>-$twind_text.insert('end', "word wrapping.  Or, you can click on the second ")</div><div class='del'>-$twind_text.insert('end', "button to\n")</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                   #text 'OFF'</div><div class='del'>-                   text 'Turn Off'</div><div class='del'>-                   command proc{textWindOff $twind_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-</div><div class='del'>-$twind_text.insert('end', " horizontal scrolling and turn back on word wrapping.\n\n")</div><div class='del'>-$twind_text.insert('end', "Or, here is another example.  If you ")</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                   text 'Click Here'</div><div class='del'>-                   command proc{textWindPlot $twind_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind_text.insert('end', " a canvas displaying an x-y plot will appear right here.")</div><div class='del'>-$mark_plot = TkTextMark.new($twind_text, 'insert')</div><div class='del'>-$mark_plot.gravity='left'</div><div class='del'>-$twind_text.insert('end', "  You can drag the data points around with the mouse, ")</div><div class='del'>-$twind_text.insert('end', "or you can click here to ")</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                   text 'Delete'</div><div class='del'>-                   command proc{textWindDel $twind_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-</div><div class='del'>-$twind_text.insert('end', " the plot again.\n\n")</div><div class='del'>-$twind_text.insert('end', "You may also find it useful to put embedded windows in ")</div><div class='del'>-$twind_text.insert('end', "a text without any actual text.  In this case the ")</div><div class='del'>-$twind_text.insert('end', "text widget acts like a geometry manager.  For ")</div><div class='del'>-$twind_text.insert('end', "example, here is a collection of buttons laid out ")</div><div class='del'>-$twind_text.insert('end', "neatly into rows by the text widget.  These buttons ")</div><div class='del'>-$twind_text.insert('end', "can be used to change the background color of the ")</div><div class='del'>-$twind_text.insert('end', "text widget (\"Default\" restores the color to ")</div><div class='del'>-$twind_text.insert('end', "its default).  If you click on the button labeled ")</div><div class='del'>-$twind_text.insert('end', "\"Short\", it changes to a longer string so that ")</div><div class='del'>-$twind_text.insert('end', "you can see how the text widget automatically ")</div><div class='del'>-$twind_text.insert('end', "changes the layout.  Click on the button again ")</div><div class='del'>-$twind_text.insert('end', "to restore the short string.\n")</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {|b|</div><div class='del'>-                   text 'Default'</div><div class='del'>-                   command proc{embDefBg $twind_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                   $tag_buttons.add('end')</div><div class='del'>-                 },</div><div class='del'>-                 'padx'=&gt;3 )</div><div class='del'>-embToggle = TkVariable.new('Short')</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkCheckButton.new($twind_text) {</div><div class='del'>-                   textvariable embToggle</div><div class='del'>-                   indicatoron 0</div><div class='del'>-                   variable embToggle</div><div class='del'>-                   onvalue 'A much longer string'</div><div class='del'>-                   offvalue 'Short'</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                   pady 5</div><div class='del'>-                   padx 2</div><div class='del'>-                 },</div><div class='del'>-                 'padx'=&gt;3, </div><div class='del'>-                 'pady'=&gt;2 )</div><div class='del'>-</div><div class='del'>-[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', </div><div class='del'>-  'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', </div><div class='del'>-  'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', </div><div class='del'>-  'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' </div><div class='del'>-].each{|twind_color|</div><div class='del'>-  TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                   'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                     text twind_color</div><div class='del'>-                     cursor 'top_left_arrow'</div><div class='del'>-                     command proc{$twind_text.bg twind_color}</div><div class='del'>-                   },</div><div class='del'>-                   'padx'=&gt;3, </div><div class='del'>-                   'pady'=&gt;2 )</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-def textWindOn (w,f)</div><div class='del'>-  if defined? $twind_scroll</div><div class='del'>-    begin</div><div class='del'>-      $twind_scroll.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    $twind_scroll = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  base = TkWinfo.parent( TkWinfo.parent(w) )</div><div class='del'>-  $twind_scroll = TkScrollbar.new(base) {|s|</div><div class='del'>-    orient 'horizontal'</div><div class='del'>-    command proc{|*args| w.xview(*args)}</div><div class='del'>-    w.xscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-    w.wrap 'none'</div><div class='del'>-    pack('after'=&gt;f, 'side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindOff (w)</div><div class='del'>-  if defined? $twind_scroll</div><div class='del'>-    begin</div><div class='del'>-      $twind_scroll.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    $twind_scroll = nil</div><div class='del'>-  end</div><div class='del'>-  w.xscrollcommand ''</div><div class='del'>-  w.wrap 'word'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindPlot (t)</div><div class='del'>-  if (defined? $twind_plot) &amp;&amp; TkWinfo.exist?($twind_plot)</div><div class='del'>-    return</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $twind_plot = TkCanvas.new(t) {</div><div class='del'>-    relief 'sunken'</div><div class='del'>-    width  450</div><div class='del'>-    height 300</div><div class='del'>-    cursor 'top_left_arrow'</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if $tk_version =~ /^4.*/</div><div class='del'>-    font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*'</div><div class='del'>-  else</div><div class='del'>-    font = 'Helvetica 18'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  TkcLine.new($twind_plot, 100, 250, 400, 250, 'width'=&gt;2)</div><div class='del'>-  TkcLine.new($twind_plot, 100, 250, 100,  50, 'width'=&gt;2)</div><div class='del'>-  TkcText.new($twind_plot, 225, 20, </div><div class='del'>-              'text'=&gt;"A Simple Plot", 'font'=&gt;font, 'fill'=&gt;'brown')</div><div class='del'>-</div><div class='del'>-  (0..10).each {|i|</div><div class='del'>-    x = 100 + (i * 30)</div><div class='del'>-    TkcLine.new($twind_plot, x, 250, x, 245, 'width'=&gt;2)</div><div class='del'>-    TkcText.new($twind_plot, x, 254, </div><div class='del'>-                'text'=&gt;10*i, 'font'=&gt;font, 'anchor'=&gt;'n')</div><div class='del'>-  }</div><div class='del'>-  (0..5).each {|i|</div><div class='del'>-    y = 250 - (i * 40)</div><div class='del'>-    TkcLine.new($twind_plot, 100, y, 105, y, 'width'=&gt;2)</div><div class='del'>-    TkcText.new($twind_plot, 96, y, </div><div class='del'>-                'text'=&gt;"#{i*50}.0", 'font'=&gt;font, 'anchor'=&gt;'e')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]]</div><div class='del'>-    x = 100 + (3*xx)</div><div class='del'>-    y = 250 - (4*yy)/5</div><div class='del'>-    item = TkcOval.new($twind_plot, x-6, y-6, x+6, y+6, </div><div class='del'>-                       'width'=&gt;1, 'outline'=&gt;'black', 'fill'=&gt;'SkyBlue2')</div><div class='del'>-    item.addtag 'point'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $twind_plot.itembind('point', 'Any-Enter', </div><div class='del'>-                        proc{$twind_plot.itemconfigure 'current', 'fill', 'red'})</div><div class='del'>-  $twind_plot.itembind('point', 'Any-Leave', </div><div class='del'>-                        proc{$twind_plot.itemconfigure 'current', 'fill', 'SkyBlue2'})</div><div class='del'>-  $twind_plot.itembind('point', '1', </div><div class='del'>-                        proc{|x,y| embPlotDown $twind_plot,x,y}, "%x %y")</div><div class='del'>-  $twind_plot.itembind('point', 'ButtonRelease-1', </div><div class='del'>-                        proc{$twind_plot.dtag 'selected'})</div><div class='del'>-  $twind_plot.bind('B1-Motion', </div><div class='del'>-                    proc{|x,y| embPlotMove $twind_plot,x,y}, "%x %y")</div><div class='del'>-  while ($twind_text.get($mark_plot) =~ /[ \t\n]/)</div><div class='del'>-    $twind_text.delete $mark_plot</div><div class='del'>-  end</div><div class='del'>-  $twind_text.insert $mark_plot,"\n"</div><div class='del'>-  TkTextWindow.new($twind_text, $mark_plot, 'window'=&gt;$twind_plot)</div><div class='del'>-  $tag_center.add $mark_plot</div><div class='del'>-  $twind_text.insert $mark_plot,"\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$embPlot = {'lastX'=&gt;0, 'lastY'=&gt;0}</div><div class='del'>-</div><div class='del'>-def embPlotDown (w, x, y)</div><div class='del'>-  w.dtag 'selected'</div><div class='del'>-  w.addtag_withtag 'selected', 'current'</div><div class='del'>-  w.raise 'current'</div><div class='del'>-  $embPlot['lastX'] = x</div><div class='del'>-  $embPlot['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def embPlotMove (w, x, y)</div><div class='del'>-  w.move 'selected', x - $embPlot['lastX'], y - $embPlot['lastY']</div><div class='del'>-  $embPlot['lastX'] = x</div><div class='del'>-  $embPlot['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindDel (w)</div><div class='del'>-  if (defined? $twind_text) &amp;&amp; TkWinfo.exist?($twind_plot)</div><div class='del'>-    $twind_text.delete $twind_plot</div><div class='del'>-    $twind_plot = nil</div><div class='del'>-    while ($twind_text.get($mark_plot) =~ /[ \t\n]/)</div><div class='del'>-      $twind_text.delete $mark_plot</div><div class='del'>-    end</div><div class='del'>-    $twind_text.insert $mark_plot,"  "</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def embDefBg (w)</div><div class='del'>-  w['background'] = w.configinfo('background')[3]</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-en/twind2.rb b/ext/tk/sample/demos-en/twind2.rb<br/>deleted file mode 100644<br/>index 43990c1151..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/twind2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/twind2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,384 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# text (embedded windows) widget demo 2 (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# delete toplevel widget</div><div class='del'>-if defined?($twind2_demo) &amp;&amp; $twind2_demo</div><div class='del'>-  $twind2_demo.destroy </div><div class='del'>-  $twind2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$twind2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Embedded Windows 2")</div><div class='del'>-  iconname("Embedded Windows")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($twind2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$twind2_buttons = TkFrame.new(base_frame) {|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 Code', </div><div class='del'>-                      :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{showCode 'twind2'}), </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 = $twind2_demo</div><div class='del'>-                        $twind2_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'>-}</div><div class='del'>-$twind2_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-$twind2_text = nil</div><div class='del'>-TkFrame.new(base_frame, 'highlightthickness'=&gt;2, 'borderwidth'=&gt;2, </div><div class='del'>-            'relief'=&gt;'sunken') {|f|</div><div class='del'>-  $twind2_text = TkText.new(f, 'setgrid'=&gt;true, 'font'=&gt;$font,</div><div class='del'>-                            # 'width'=&gt;'70', 'height'=&gt;35, 'wrap'=&gt;'word', </div><div class='del'>-                            'width'=&gt;'70', 'height'=&gt;35, 'wrap'=&gt;'char', </div><div class='del'>-                            'highlightthickness'=&gt;0, 'borderwidth'=&gt;0 ){|t|</div><div class='del'>-    TkScrollbar.new(f) {|s|</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'>-    }.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  }.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-}.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-# text tags</div><div class='del'>-$tag2_center = TkTextTag.new($twind2_text, </div><div class='del'>-                            'justify' =&gt;'center',</div><div class='del'>-                            'spacing1'=&gt;'5m',</div><div class='del'>-                            'spacing3'=&gt;'5m'  )</div><div class='del'>-$tag2_buttons = TkTextTag.new($twind2_text, </div><div class='del'>-                             'lmargin1'=&gt;'1c',</div><div class='del'>-                             'lmargin2'=&gt;'1c',</div><div class='del'>-                             'rmargin' =&gt;'1c',</div><div class='del'>-                             'spacing1'=&gt;'3m',</div><div class='del'>-                             'spacing2'=&gt;0,</div><div class='del'>-                             'spacing3'=&gt;0 )</div><div class='del'>-</div><div class='del'>-# insert text</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                  'A text widget can contain many different kinds of items, ')</div><div class='del'>-$twind2_text.insert('end',</div><div class='del'>-                  "both active and passive.  It can lay these out in various ")</div><div class='del'>-$twind2_text.insert('end',</div><div class='del'>-                   "ways, with wrapping, tabs, centering, etc.  In addition, ")</div><div class='del'>-$twind2_text.insert('end',</div><div class='del'>-                    "when the contents are too big for the window, smooth ")</div><div class='del'>-$twind2_text.insert('end', "scrolling in all directions is provided.\n\n")</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', "A text widget can contain other widgets embedded ")</div><div class='del'>-$twind2_text.insert('end', "it.  These are called \"embedded windows\", ")</div><div class='del'>-$twind2_text.insert('end', "and they can consist of arbitrary widgets.  ")</div><div class='del'>-$twind2_text.insert('end', "For example, here are two embedded button ")</div><div class='del'>-$twind2_text.insert('end', "widgets.  You can click on the first button to ")</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                   text 'ON'</div><div class='del'>-                   command proc{textWindOn2 $twind2_text,$twind2_buttons}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind2_text.insert('end', " horizontal scrolling, which also turns off ")</div><div class='del'>-$twind2_text.insert('end', "word wrapping.  Or, you can click on the second ")</div><div class='del'>-$twind2_text.insert('end', "button to\n")</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                   text 'OFF'</div><div class='del'>-                   command proc{textWindOff2 $twind2_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                   " horizontal scrolling and turn back on word wrapping.\n\n")</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', "Or, here is another example.  If you ")</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                   text 'Click Here'</div><div class='del'>-                   command proc{textWindPlot2 $twind2_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    " a canvas displaying an x-y plot will appear right here.")</div><div class='del'>-$mark2_plot = TkTextMark.new($twind2_text, 'insert')</div><div class='del'>-$mark2_plot.gravity='left'</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    "  You can drag the data points around with the mouse, ")</div><div class='del'>-$twind2_text.insert('end', "or you can click here to ")</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                   text 'Delete'</div><div class='del'>-                   command proc{textWindDel2 $twind2_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind2_text.insert('end', " the plot again.\n\n")</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    "You may also find it useful to put embedded windows in ")</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    "a text without any actual text.  In this case the ")</div><div class='del'>-$twind2_text.insert('end', "text widget acts like a geometry manager.  For ")</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    "example, here is a collection of buttons laid out ")</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    "neatly into rows by the text widget.  These buttons ")</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    "can be used to change the background color of the ")</div><div class='del'>-$twind2_text.insert('end', "text widget (\"Default\" restores the color to ")</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    "its default).  If you click on the button labeled ")</div><div class='del'>-$twind2_text.insert('end', "\"Short\", it changes to a longer string so that ")</div><div class='del'>-$twind2_text.insert('end', "you can see how the text widget automatically ")</div><div class='del'>-$twind2_text.insert('end', "changes the layout.  Click on the button again ")</div><div class='del'>-$twind2_text.insert('end', "to restore the short string.\n")</div><div class='del'>-</div><div class='del'>-btn_default = TkButton.new($twind2_text) {|b|</div><div class='del'>-  text 'Default'</div><div class='del'>-  command proc{embDefBg2 $twind2_text}</div><div class='del'>-  cursor 'top_left_arrow'</div><div class='del'>-}</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', 'window'=&gt;btn_default, 'padx'=&gt;3)</div><div class='del'>-embToggle = TkVariable.new('Short')</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkCheckButton.new($twind2_text) {</div><div class='del'>-                   textvariable embToggle</div><div class='del'>-                   indicatoron 0</div><div class='del'>-                   variable embToggle</div><div class='del'>-                   onvalue 'A much longer string'</div><div class='del'>-                   offvalue 'Short'</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                   pady 5</div><div class='del'>-                   padx 2</div><div class='del'>-                 },</div><div class='del'>-                 'padx'=&gt;3, </div><div class='del'>-                 'pady'=&gt;2 )</div><div class='del'>-</div><div class='del'>-[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', </div><div class='del'>-  'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', </div><div class='del'>-  'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', </div><div class='del'>-  'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' </div><div class='del'>-].each{|twind_color|</div><div class='del'>-  TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                   'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                     text twind_color</div><div class='del'>-                     cursor 'top_left_arrow'</div><div class='del'>-                     command proc{$twind2_text.bg twind_color}</div><div class='del'>-                   },</div><div class='del'>-                   'padx'=&gt;3, </div><div class='del'>-                   'pady'=&gt;2 )</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$tag2_buttons.add(btn_default, 'end')</div><div class='del'>-</div><div class='del'>-$text_normal2 = {}</div><div class='del'>-$text_normal2['border'] = $twind2_text.cget('borderwidth')</div><div class='del'>-$text_normal2['highlight'] = $twind2_text.cget('highlightthickness')</div><div class='del'>-$text_normal2['pad'] = $twind2_text.cget('padx')</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', "\nYou can also change the usual border width and ")</div><div class='del'>-$twind2_text.insert('end', "highlightthickness and padding.\n")</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Big borders", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinBigB2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Small borders", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinSmallB2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Big highlight", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinBigH2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Small highlight",</div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinSmallH2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Big pad", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinBigP2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Small pad", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinSmallP2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', </div><div class='del'>-                    "\n\nFinally, images fit comfortably in text widgets too:")</div><div class='del'>-</div><div class='del'>-TkTextImage.new($twind2_text, 'end', </div><div class='del'>-                'image'=&gt;TkBitmapImage.new(:file=&gt;[</div><div class='del'>-                                             $demo_dir, '..', </div><div class='del'>-                                             'images', 'face.xbm'</div><div class='del'>-                                           ].join(File::Separator)))</div><div class='del'>-</div><div class='del'>-# methods</div><div class='del'>-def textWinBigB2(w)</div><div class='del'>-  w.borderwidth 15</div><div class='del'>-end</div><div class='del'>-def textWinSmallB2(w)</div><div class='del'>-  w.borderwidth $text_normal2['border']</div><div class='del'>-end</div><div class='del'>-def textWinBigH2(w)</div><div class='del'>-  w.highlightthickness 15</div><div class='del'>-end</div><div class='del'>-def textWinSmallH2(w)</div><div class='del'>-  w.highlightthickness $text_normal2['highlight']</div><div class='del'>-end</div><div class='del'>-def textWinBigP2(w)</div><div class='del'>-  w.configure(:padx=&gt;15, :pady=&gt;15)</div><div class='del'>-end</div><div class='del'>-def textWinSmallP2(w)</div><div class='del'>-  w.configure(:padx=&gt;$text_normal2['pad'], :pady=&gt;$text_normal2['pad'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindOn2 (w,f)</div><div class='del'>-  if defined? $twind2_scroll</div><div class='del'>-    begin</div><div class='del'>-      $twind2_scroll.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    $twind2_scroll = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  base = TkWinfo.parent( TkWinfo.parent(w) )</div><div class='del'>-  $twind2_scroll = TkScrollbar.new(base) {|s|</div><div class='del'>-    orient 'horizontal'</div><div class='del'>-    command proc{|*args| w.xview(*args)}</div><div class='del'>-    w.xscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-    w.wrap 'none'</div><div class='del'>-    pack('after'=&gt;f, 'side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindOff2 (w)</div><div class='del'>-  if defined? $twind2_scroll</div><div class='del'>-    begin</div><div class='del'>-      $twind2_scroll.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    $twind2_scroll = nil</div><div class='del'>-  end</div><div class='del'>-  w.xscrollcommand ''</div><div class='del'>-  #w.wrap 'word'</div><div class='del'>-  w.wrap 'char'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindPlot2 (t)</div><div class='del'>-  if (defined? $twind2_plot) &amp;&amp; (TkWinfo.exist?($twind2_plot))</div><div class='del'>-    return</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $twind2_plot = TkCanvas.new(t) {</div><div class='del'>-    relief 'sunken'</div><div class='del'>-    width  450</div><div class='del'>-    height 300</div><div class='del'>-    cursor 'top_left_arrow'</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  #font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*'</div><div class='del'>-  font = 'Helvetica 18'</div><div class='del'>-</div><div class='del'>-  TkcLine.new($twind2_plot, 100, 250, 400, 250, 'width'=&gt;2)</div><div class='del'>-  TkcLine.new($twind2_plot, 100, 250, 100,  50, 'width'=&gt;2)</div><div class='del'>-  TkcText.new($twind2_plot, 225, 20, </div><div class='del'>-              'text'=&gt;"A Simple Plot", 'font'=&gt;font, 'fill'=&gt;'brown')</div><div class='del'>-</div><div class='del'>-  (0..10).each {|i|</div><div class='del'>-    x = 100 + (i * 30)</div><div class='del'>-    TkcLine.new($twind2_plot, x, 250, x, 245, 'width'=&gt;2)</div><div class='del'>-    TkcText.new($twind2_plot, x, 254, </div><div class='del'>-                'text'=&gt;10*i, 'font'=&gt;font, 'anchor'=&gt;'n')</div><div class='del'>-  }</div><div class='del'>-  (0..5).each {|i|</div><div class='del'>-    y = 250 - (i * 40)</div><div class='del'>-    TkcLine.new($twind2_plot, 100, y, 105, y, 'width'=&gt;2)</div><div class='del'>-    TkcText.new($twind2_plot, 96, y, </div><div class='del'>-                'text'=&gt;"#{i*50}.0", 'font'=&gt;font, 'anchor'=&gt;'e')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]]</div><div class='del'>-    x = 100 + (3*xx)</div><div class='del'>-    y = 250 - (4*yy)/5</div><div class='del'>-    item = TkcOval.new($twind2_plot, x-6, y-6, x+6, y+6, </div><div class='del'>-                       'width'=&gt;1, 'outline'=&gt;'black', 'fill'=&gt;'SkyBlue2')</div><div class='del'>-    item.addtag 'point'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $twind2_plot.itembind('point', 'Any-Enter', </div><div class='del'>-                        proc{$twind2_plot.itemconfigure 'current', 'fill', 'red'})</div><div class='del'>-  $twind2_plot.itembind('point', 'Any-Leave', </div><div class='del'>-                        proc{$twind2_plot.itemconfigure 'current', 'fill', 'SkyBlue2'})</div><div class='del'>-  $twind2_plot.itembind('point', '1', </div><div class='del'>-                        proc{|x,y| embPlotDown2 $twind2_plot,x,y}, "%x %y")</div><div class='del'>-  $twind2_plot.itembind('point', 'ButtonRelease-1', </div><div class='del'>-                        proc{$twind2_plot.dtag 'selected'})</div><div class='del'>-  $twind2_plot.bind('B1-Motion', </div><div class='del'>-                    proc{|x,y| embPlotMove2 $twind2_plot,x,y}, "%x %y")</div><div class='del'>-  while ($twind2_text.get($mark2_plot) =~ /[ \t\n]/)</div><div class='del'>-    $twind2_text.delete $mark2_plot</div><div class='del'>-  end</div><div class='del'>-  $twind2_text.insert $mark2_plot,"\n"</div><div class='del'>-  TkTextWindow.new($twind2_text, $mark2_plot, 'window'=&gt;$twind2_plot)</div><div class='del'>-  $tag2_center.add $mark2_plot</div><div class='del'>-  $twind2_text.insert $mark2_plot,"\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$embPlot2 = {'lastX'=&gt;0, 'lastY'=&gt;0}</div><div class='del'>-</div><div class='del'>-def embPlotDown2 (w, x, y)</div><div class='del'>-  w.dtag 'selected'</div><div class='del'>-  w.addtag_withtag 'selected', 'current'</div><div class='del'>-  w.raise 'current'</div><div class='del'>-  $embPlot2['lastX'] = x</div><div class='del'>-  $embPlot2['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def embPlotMove2 (w, x, y)</div><div class='del'>-  w.move 'selected', x - $embPlot2['lastX'], y - $embPlot2['lastY']</div><div class='del'>-  $embPlot2['lastX'] = x</div><div class='del'>-  $embPlot2['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindDel2 (w)</div><div class='del'>-  if (defined? $twind2_text) &amp;&amp; TkWinfo.exist?($twind2_plot)</div><div class='del'>-    $twind2_text.delete $twind2_plot</div><div class='del'>-    $twind2_plot = nil</div><div class='del'>-    while ($twind2_text.get($mark2_plot) =~ /[ \t\n]/)</div><div class='del'>-      $twind2_text.delete $mark2_plot</div><div class='del'>-    end</div><div class='del'>-    $twind2_text.insert $mark2_plot,"  "</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def embDefBg2 (w)</div><div class='del'>-  w['background'] = w.configinfo('background')[3]</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-en/unicodeout.rb b/ext/tk/sample/demos-en/unicodeout.rb<br/>deleted file mode 100644<br/>index 9c230a2536..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/unicodeout.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/unicodeout.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,114 +0,0 @@</div><div class='del'>-# unicodeout.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script shows how you can produce output (in label</div><div class='del'>-# widgets) using many different alphabets.</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?($unicodeout_demo) &amp;&amp; $unicodeout_demo</div><div class='del'>-  $unicodeout_demo.destroy </div><div class='del'>-  $unicodeout_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$unicodeout_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Unicode Label Demonstration")</div><div class='del'>-  iconname("unicodeout")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($unicodeout_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </div><div class='del'>-            :font=&gt;$font, :wraplength=&gt;'5.4i', :justify=&gt;:left, </div><div class='del'>-            :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top)</div><div class='del'>-This is a sample of Tk's support for languages that use non-Western \</div><div class='del'>-character sets.  However, what you will actually see below depends \</div><div class='del'>-largely on what character sets you have installed, and what you see \</div><div class='del'>-for characters that are not present varies greatly between platforms as well. \</div><div class='del'>-Please try to click the 'See Code' button, \</div><div class='del'>-and click the 'Rerun Demo' button after editing \</div><div class='del'>-(the source file is not changed) \</div><div class='del'>-the definition of @@font on the Unicodeout_SampleFrame class.</div><div class='del'>-The strings are written in Tcl using UNICODE characters \</div><div class='del'>-using the \\uXXXX escape so as to do so in a portable fashion.</div><div class='del'>-</div><div class='del'>-ATTENTION: </div><div class='del'>-The strings are converted to the encoded string objects \</div><div class='del'>-(completed to rewrite Tcl's escapes) by Tk::UTF8_String method. \</div><div class='del'>-And the Tk::UTF8_String objects are passed to the label widgets. </div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame){|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'>-                 $unicodeout_demo.destroy</div><div class='del'>-                 $unicodeout_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 'unicodeout'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-wait_msg = TkLabel.new(base_frame, </div><div class='del'>-                       :text=&gt;"Please wait while loading fonts...", </div><div class='del'>-                       :font=&gt;"Helvetica 12 italic").pack</div><div class='del'>-</div><div class='del'>-class Unicodeout_SampleFrame &lt; TkFrame</div><div class='del'>-  @@font = $font</div><div class='del'>-  # @@font = 'Helvetica 14'</div><div class='del'>-  # @@font = 'Courier 12'</div><div class='del'>-  # @@font = 'clearlyu 16'</div><div class='del'>-  # @@font = 'fixed 12'</div><div class='del'>-  # @@font = 'Times 12'</div><div class='del'>-  # @@font = 'Newspaper 12'</div><div class='del'>-  # @@font = '{New century schoolbook} 12'</div><div class='del'>-</div><div class='del'>-  def initialize(base)</div><div class='del'>-    super(base)</div><div class='del'>-    grid_columnconfig(1, :weight=&gt;1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_sample(lang, *args)</div><div class='del'>-    sample_txt = Tk::UTF8_String(args.join(''))</div><div class='del'>-    l = TkLabel.new(self, :font=&gt;@@font, :text=&gt;lang+':', </div><div class='del'>-                    :anchor=&gt;:nw, :pady=&gt;0)</div><div class='del'>-    #s = TkLabel.new(self, :font=&gt;@@font, :text=&gt;sample_txt, </div><div class='del'>-    s = TkLabel.new(self, :font=&gt;TkFont.new(@@font), :text=&gt;sample_txt, </div><div class='del'>-                    :anchor=&gt;:nw, :width=&gt;30, :pady=&gt;0)</div><div class='del'>-    Tk.grid(l, s, :sticky=&gt;:ew, :pady=&gt;0)</div><div class='del'>-    l.grid_config(:padx, '1m')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-f = Unicodeout_SampleFrame.new(base_frame)</div><div class='del'>-f.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;'2m', :pady=&gt;'1m')</div><div class='del'>-</div><div class='del'>-# Processing when some characters are missing might take a while, so make</div><div class='del'>-# sure we're displaying something in the meantime...</div><div class='del'>-</div><div class='del'>-oldCursor = $unicodeout_demo.cursor</div><div class='del'>-$unicodeout_demo.cursor('watch')</div><div class='del'>-Tk.update</div><div class='del'>-</div><div class='del'>-f.add_sample('Arabic', </div><div class='del'>-             '\uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF\uFE8D\uFE94', </div><div class='del'>-             '\uFEE4\uFEE0\uFEDC\uFEDF\uFE8D')</div><div class='del'>-f.add_sample('Trad. Chinese', '\u4E2D\u570B\u7684\u6F22\u5B57')</div><div class='del'>-f.add_sample('Simpl. Chinese', '\u6C49\u8BED')</div><div class='del'>-f.add_sample('Greek', </div><div class='del'>-             '\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AE ', </div><div class='del'>-             '\u03B3\u03BB\u03CE\u03C3\u03C3\u03B1')</div><div class='del'>-f.add_sample('Hebrew', </div><div class='del'>-             '\u05DD\u05D9\u05DC\u05E9\u05D5\u05E8\u05D9 ', </div><div class='del'>-             '\u05DC\u05D9\u05D0\u05E8\u05E9\u05D9')</div><div class='del'>-f.add_sample('Japanese', </div><div class='del'>-             '\u65E5\u672C\u8A9E\u306E\u3072\u3089\u304C\u306A, ', </div><div class='del'>-             '\u6F22\u5B57\u3068\u30AB\u30BF\u30AB\u30CA')</div><div class='del'>-f.add_sample('Korean', '\uB300\uD55C\uBBFC\uAD6D\uC758 \uD55C\uAE00')</div><div class='del'>-f.add_sample('Russian', </div><div class='del'>-             '\u0420\u0443\u0441\u0441\u043A\u0438\u0439 ', </div><div class='del'>-             '\u044F\u0437\u044B\u043A')</div><div class='del'>-</div><div class='del'>-wait_msg.destroy</div><div class='del'>-$unicodeout_demo.cursor(oldCursor)</div><div class='head'>diff --git a/ext/tk/sample/demos-en/vscale.rb b/ext/tk/sample/demos-en/vscale.rb<br/>deleted file mode 100644<br/>index b05ed12072..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/vscale.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/vscale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,79 +0,0 @@</div><div class='del'>-# vscale.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script shows an example with a vertical scale.</div><div class='del'>-</div><div class='del'>-require "tkcanvas"</div><div class='del'>-</div><div class='del'>-if defined?($vscale_demo) &amp;&amp; $vscale_demo</div><div class='del'>-  $vscale_demo.destroy</div><div class='del'>-  $vscale_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$vscale_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Vertical Scale Demonstration")</div><div class='del'>-  iconname("vscale")</div><div class='del'>-}</div><div class='del'>-positionWindow($vscale_demo)</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($vscale_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-msg = TkLabel.new(base_frame) {</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 vertical scale are displayed below.  If you click or drag mouse button 1 in the scale, you can change the size of the arrow."</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top', 'padx'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|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 = $vscale_demo</div><div class='del'>-      $vscale_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 'vscale' }</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'>-def setHeight(w, height)</div><div class='del'>-  height = height + 21</div><div class='del'>-  y2 = height - 30</div><div class='del'>-  if y2 &lt; 21</div><div class='del'>-    y2 = 21</div><div class='del'>-  end</div><div class='del'>-  w.coords 'poly',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20</div><div class='del'>-  w.coords 'line',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  borderwidth 10</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 'SeaGreen3'</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;'left',  'anchor'=&gt;'nw', 'fill'=&gt;'y')</div><div class='del'>-  scale = TkScale.new(frame) {</div><div class='del'>-    orient 'vertical'</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| setHeight(canvas, value)}</div><div class='del'>-    tickinterval 50</div><div class='del'>-  }.pack('side'=&gt;'left', 'anchor'=&gt;'ne')</div><div class='del'>-  scale.set 75</div><div class='del'>-}.pack</div><div class='head'>diff --git a/ext/tk/sample/demos-en/widget b/ext/tk/sample/demos-en/widget<br/>deleted file mode 100644<br/>index 9a0605d8b9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-en/widget?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-en/widget</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1084 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-# widget --</div><div class='del'>-# This script demonstrates the various widgets provided by Tk,</div><div class='del'>-# along with many of the features of the Tk toolkit.  This file</div><div class='del'>-# only contains code to generate the main window for the</div><div class='del'>-# application, which invokes individual demonstrations.  The</div><div class='del'>-# code for the actual demonstrations is contained in separate</div><div class='del'>-# ".rb" files is this directory, which are sourced by this script</div><div class='del'>-# as needed.</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-# require 'tkafter'</div><div class='del'>-</div><div class='del'>-### $DEBUG=1 ##########</div><div class='del'>-</div><div class='del'>-$RubyTk_WidgetDemo = true</div><div class='del'>-</div><div class='del'>-#----------------------------------------------------------------</div><div class='del'>-# The code below create the main window, consisting of a menu bar</div><div class='del'>-# and a text widget that explains how to use the program, plus lists</div><div class='del'>-# all of the demos as hypertext items.</div><div class='del'>-#----------------------------------------------------------------</div><div class='del'>-</div><div class='del'>-# widget demo directory</div><div class='del'>-# $demo_dir = File.dirname($0)</div><div class='del'>-$demo_dir = File.dirname(__FILE__)</div><div class='del'>-</div><div class='del'>-# root </div><div class='del'>-$root = TkRoot.new{title "Ruby/Tk Widget Demonstration"}</div><div class='del'>-</div><div class='del'>-# tk </div><div class='del'>-$tk_version = Tk::TK_VERSION</div><div class='del'>-$tk_major_ver, $tk_minor_ver = $tk_version.split('.').map{|n| n.to_i}</div><div class='del'>-$tk_patchlevel = Tk::TK_PATCHLEVEL</div><div class='del'>-</div><div class='del'>-# tcl_platform </div><div class='del'>-$tk_platform = TkVarAccess.new('tcl_platform')</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-case($tk_version)</div><div class='del'>-when /^4.*/</div><div class='del'>-  $font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', nil)</div><div class='del'>-else</div><div class='del'>-  $font = TkFont.new('Helvetica -12')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# images</div><div class='del'>-$image = {}</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-$image['refresh'] = TkPhotoImage.new(:height=&gt;16, :format=&gt;'GIF', :data=&gt;&lt;&lt;EOD)</div><div class='del'>-    R0lGODlhEAAQAPMAAMz/zCpnKdb/1z9mPypbKBtLGy9NMPL/9Or+6+P+4j1Y</div><div class='del'>-    PwQKBP7//xMLFAYBCAEBASH5BAEAAAAALAAAAAAQABAAAwR0EAD3Gn0Vyw0e</div><div class='del'>-    ++CncU7IIAezMA/nhUqSLJizvSdCEEjy2ZIV46AwDAoDHwPYGSoEiUJAAGJ6</div><div class='del'>-    EDHBNCFINW5OqABKSFk/B9lUa94IDwIFgewFMwQDQwCZQCztTgM9Sl8SOEMG</div><div class='del'>-    KSAthiaOjBMPDhQONBiXABEAOw==</div><div class='del'>-EOD</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-$image['view'] = TkPhotoImage.new(:height=&gt;16, :format=&gt;'GIF', :data=&gt;&lt;&lt;EOD)</div><div class='del'>-    R0lGODlhEAAQAPMAAMz/zP///8DAwICAgH9/fwAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAwRIcMhJB7h3hM33</div><div class='del'>-    KFjWdQQYap1QrCaGBmrRrS4nj5b53jOgbwXBKGACoYLDIuAoHCmZyYvR1rT5</div><div class='del'>-    RMAq8LqcIYGsrjPsW1XOmFUEADs=</div><div class='del'>-EOD</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-$image['delete'] = TkPhotoImage.new(:height=&gt;16, :format=&gt;'GIF', :data=&gt;&lt;&lt;EOD)</div><div class='del'>-    R0lGODlhEAAOAKEAAIQAAO/n3v///////yH5BAEKAAIALAAAAAAQAA4AAAIm</div><div class='del'>-    lI9pAKHbIHNoVhYhTdjlJ2AWKG2g+CldmB6rxo2uybYhbS80eRQAOw==</div><div class='del'>-EOD</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-$image['print'] = TkPhotoImage.new(:height=&gt;19, :format=&gt;'GIF', :data=&gt;&lt;&lt;EOD)</div><div class='del'>-    R0lGODlhGgATAPcAACEQOTEpQjEpUkIpc0IxY0I5c0oxjEo5SlJCY1JCe1JK</div><div class='del'>-    UlpChFpCjFpGkFpSc1paa2NKc2NKnGNja2tapWtjc29KnHNanHNjc3NjrXNr</div><div class='del'>-    jHNrnHNzc3tjpXtrtXtzhICAgIRzvYSEjIZzqox7tYyEnIyMjJSEtZSEvZSM</div><div class='del'>-    lJyMtZyMvZyUlJyUrZyUvZycnKWctaWlpa2czq2lzrWtvbWtzrW1tb21xr21</div><div class='del'>-    1sa9zs693s7OztbO3tbO597W1t7W7+fe7+fn5////+/n7+/v7+/v9////wAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAACH5BAEAAEEALAAAAAAaABMAQAj/AIMIHBhkg0GC</div><div class='del'>-    CBMGIQEiQgseQT4oeCBBAokgRYYQ0JBixg8hRIiUUEBBYYmTByBwiCBCRYwH</div><div class='del'>-    CxY8cKFw4AogRXLqLAJkQ80gCBBg3BkxZswTNGh4MGqgQQUMJRHCwMkTSE+D</div><div class='del'>-    Pn8eCKBhxIMhO3ei2OHDBw6sWSlMMMoWgwwfMDZI8GBjx44NARZwEGGi5MkS</div><div class='del'>-    PcIWKRGz5YgLbAco+KkQBQoJIRgjdGEVq+SaJajqtNrzMgsPCmoIzqmDgmWE</div><div class='del'>-    KOBuUKAAwYabYTfs4OHjY0giGyhk4MAWRI4eKyRQqPgggYUXPH4A+XBAgwoK</div><div class='del'>-    DiIsCFxjA9sFEVQQCRJCAYAFDJxiKhAxvMTonEFimrhhYinTBgWiCvxLNX3M</div><div class='del'>-    DkkpsKV5OYhjBxCMYAICAigUEAA7</div><div class='del'>-EOD</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-  $root.add_menubar([[['File', 0], </div><div class='del'>-                        ['About ... ', proc{aboutBox}, 0, '&lt;F1&gt;'],</div><div class='del'>-                        '---', </div><div class='del'>-                        ['Quit', proc{exit}, 0, 'Ctrl-Q']</div><div class='del'>-                      ]])</div><div class='del'>-else</div><div class='del'>-  TkMenubar.new($root, </div><div class='del'>-                [[['File', 0], </div><div class='del'>-                    ['About ... ', proc{aboutBox}, 0, '&lt;F1&gt;'],</div><div class='del'>-                    '---', </div><div class='del'>-                    ['Quit', proc{exit}, 0, 'Ctrl-Q']</div><div class='del'>-                  ]]).pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-end</div><div class='del'>-$root.bind('F1', proc{aboutBox})</div><div class='del'>-$root.bind('Control-q', proc{exit})</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-TkFrame.new($root){|frame|</div><div class='del'>-  TkMenubutton.new(frame){|button|</div><div class='del'>-    m = TkMenu.new(button) {</div><div class='del'>-      add 'command', 'label'=&gt;'Quit', 'command'=&gt;proc{exit}, 'underline'=&gt;0</div><div class='del'>-    }</div><div class='del'>-    menu m</div><div class='del'>-    text 'File'</div><div class='del'>-    underline 0</div><div class='del'>-  }.pack('side'=&gt;'left')</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-if $tk_version =~ /^4\.[01]/</div><div class='del'>-  scr = TkScrollbar.new($root, 'orient'=&gt;'vertical')</div><div class='del'>-  txt = TkText.new($root) {</div><div class='del'>-    wrap 'word'</div><div class='del'>-    width 70</div><div class='del'>-    height 30</div><div class='del'>-    font $font</div><div class='del'>-    setgrid 'yes'</div><div class='del'>-    yscrollcommand proc{|first,last| scr.set first,last}</div><div class='del'>-  }</div><div class='del'>-  scr.command(proc{|*args| txt.yview(*args)})</div><div class='del'>-  scr.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  txt.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-else</div><div class='del'>-  textFrame = TkFrame.new($root)</div><div class='del'>-  scr = TkScrollbar.new($root, 'orient'=&gt;'vertical', </div><div class='del'>-                        'highlightthickness'=&gt;0, 'takefocus'=&gt;1) {</div><div class='del'>-    pack('in'=&gt;textFrame, 'side'=&gt;'right', 'fill'=&gt;'y', 'padx'=&gt;1)</div><div class='del'>-  }</div><div class='del'>-  txt = TkText.new($root) {</div><div class='del'>-    wrap 'word'</div><div class='del'>-    width 70</div><div class='del'>-    height 30</div><div class='del'>-    font $font</div><div class='del'>-    setgrid 'yes'</div><div class='del'>-    highlightthickness 0</div><div class='del'>-    padx 4</div><div class='del'>-    pady 2</div><div class='del'>-    takefocus 0</div><div class='del'>-    bd 1</div><div class='del'>-    yscrollcommand proc{|first,last| scr.set first,last}</div><div class='del'>-  }</div><div class='del'>-  scr.command(proc{|*args| txt.yview(*args)})</div><div class='del'>-#  txt.pack('in'=&gt;textFrame, 'expand'=&gt;'yes', 'fill'=&gt;'both', 'padx'=&gt;1)</div><div class='del'>-  txt.pack('in'=&gt;textFrame, 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-#  textFrame.pack('expand'=&gt;'yes', 'fill'=&gt;'both', 'padx'=&gt;1, 'pady'=&gt;2)</div><div class='del'>-  textFrame.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-  statusBar = TkFrame.new($root) {|f|</div><div class='del'>-    if $tk_version =~ /^4.*/</div><div class='del'>-      statusfont = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*'</div><div class='del'>-    else</div><div class='del'>-      statusfont = 'Helvetica 10'</div><div class='del'>-    end</div><div class='del'>-    $statusBarLabel = \</div><div class='del'>-    TkLabel.new(f, 'text'=&gt;"   ", 'relief'=&gt;'sunken', 'bd'=&gt;1, 'anchor'=&gt;'w', </div><div class='del'>-                'font'=&gt;statusfont) \</div><div class='del'>-        .pack('side'=&gt;'left', 'padx'=&gt;2, 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-    TkLabel.new(f, 'width'=&gt;8, 'relief'=&gt;'sunken', 'bd'=&gt;1, 'anchor'=&gt;'w', </div><div class='del'>-                'font'=&gt;statusfont) \</div><div class='del'>-        .pack('side'=&gt;'left', 'padx'=&gt;2)</div><div class='del'>-  }.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;2)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Create a bunch of tags to use in the text widget, such as those for</div><div class='del'>-# section titles and demo descriptions.  Also define the bindings for</div><div class='del'>-# tags.</div><div class='del'>-  </div><div class='del'>-if $tk_version =~ /^4.*/</div><div class='del'>-  tag_title = TkTextTag.new(txt, 'font'=&gt;'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*')</div><div class='del'>-else</div><div class='del'>-  tag_title = TkTextTag.new(txt, 'font'=&gt;'Helvetica 18 bold')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# We put some "space" characters to the left and right of each demo description</div><div class='del'>-# so that the descriptions are highlighted only when the mouse cursor</div><div class='del'>-# is right over them (but not when the cursor is to their left or right)</div><div class='del'>-</div><div class='del'>-tag_demospace = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c')</div><div class='del'>-</div><div class='del'>-if TkWinfo.depth($root) == 1</div><div class='del'>-  tag_demo = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c', </div><div class='del'>-                           'underline'=&gt;1)</div><div class='del'>-  $tag_visited = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c', </div><div class='del'>-                              'underline'=&gt;1)</div><div class='del'>-  tag_hot = TkTextTag.new(txt, 'background'=&gt;'black', 'foreground'=&gt;'white')</div><div class='del'>-else</div><div class='del'>-  tag_demo = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c', </div><div class='del'>-                           'foreground'=&gt;'blue', 'underline'=&gt;1)</div><div class='del'>-  $tag_visited = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c', </div><div class='del'>-                              'foreground'=&gt;'#303080', 'underline'=&gt;1)</div><div class='del'>-#  tag_hot = TkTextTag.new(txt, 'relief'=&gt;'raised', 'borderwidth'=&gt;1, </div><div class='del'>-#                         'background'=&gt;'SeaGreen3')</div><div class='del'>-  tag_hot = TkTextTag.new(txt, 'borderwidth'=&gt;1, 'foreground'=&gt;'red')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#tag_demo.bind('Button-1', proc{invoke txt, txt.index('current')})</div><div class='del'>-tag_demo.bind('ButtonRelease-1', </div><div class='del'>-              proc{|x,y|invoke txt, txt.index("@#{x},#{y}")}, '%x %y')</div><div class='del'>-</div><div class='del'>-lastLine = TkVariable.new("")</div><div class='del'>-newLine  = TkVariable.new("")</div><div class='del'>-tag_demo.bind('Enter', proc{|x,y|</div><div class='del'>-                lastLine.value = txt.index("@#{x},#{y} linestart")</div><div class='del'>-                tag_hot.add(lastLine.value, "#{lastLine.value} lineend")</div><div class='del'>-                showStatus txt, txt.index("@#{x},#{y}")</div><div class='del'>-              },</div><div class='del'>-              '%x %y')</div><div class='del'>-tag_demo.bind('Leave', </div><div class='del'>-              proc{</div><div class='del'>-                tag_hot.remove('1.0','end')</div><div class='del'>-                txt.configure('cursor','xterm')</div><div class='del'>-                $statusBarLabel.configure('text'=&gt;"")</div><div class='del'>-              })</div><div class='del'>-tag_demo.bind('Motion', proc{|x, y|</div><div class='del'>-                newLine.value = txt.index("@#{x},#{y} linestart")</div><div class='del'>-                if newLine.value != lastLine.value</div><div class='del'>-                  tag_hot.remove('1.0','end')</div><div class='del'>-                  lastLine.value = newLine.value</div><div class='del'>-                  if ( txt.tag_names("@#{x},#{y}").find{|t| </div><div class='del'>-                        t.kind_of?(String) &amp;&amp; t =~ /^demo-/</div><div class='del'>-                      } )</div><div class='del'>-                    tag_hot.add(lastLine.value, </div><div class='del'>-                                "#{lastLine.value} lineend -1 chars")</div><div class='del'>-                  end</div><div class='del'>-                end</div><div class='del'>-                showStatus txt, txt.index("@#{x},#{y}")</div><div class='del'>-              },</div><div class='del'>-              '%x %y')</div><div class='del'>-</div><div class='del'>-# Create the text for the text widget.</div><div class='del'>-</div><div class='del'>-txt.insert('end', "Ruby/Tk Widget Demonstrations\n\n", tag_title)</div><div class='del'>-txt.insert('end', &lt;&lt;EOT)</div><div class='del'>-This application provides a front end for several short scripts that \</div><div class='del'>-demonstrate what you can do with Tk widgets.  Each of the numbered \</div><div class='del'>-lines below describes a demonstration;  you can click on it to invoke \</div><div class='del'>-the demonstration.  Once the demonstration window appears, you can \</div><div class='del'>-click the "See Code" button to see the Ruby/Tk code that created the \</div><div class='del'>-demonstration.  If you wish, you can edit the code and click the \</div><div class='del'>-"Rerun Demo" button in the code window to reinvoke the demonstration \</div><div class='del'>-with the modified code. \</div><div class='del'>-Don't worry about breaking the source code. \</div><div class='del'>-Your modifications are not reflected on the original file. \</div><div class='del'>-Please try many kind of changes. </div><div class='del'>-</div><div class='del'>-Some demo scripts require the recent version of Tk library \</div><div class='del'>-(e.g. Tk8.4 or later) \</div><div class='del'>-If your Tk library linked to Ruby doesn't support the functions \</div><div class='del'>-required by the demo script, the demo doesn't work. \</div><div class='del'>-In such a case, please re-compile tcltklib with the later Tk library \</div><div class='del'>-which supports the required functions.</div><div class='del'>-</div><div class='del'>-If your Tk supports Ttk (Tile) extension (included or installed), \</div><div class='del'>-please try the demo of Ttk extension (sample/tkextlib/tile/demo.rb) too.</div><div class='del'>-( Probably, Ttk extension \</div><div class='del'>-#{</div><div class='del'>-begin</div><div class='del'>-  require 'tkextlib/tile'</div><div class='del'>-  "is already installed on your environment"</div><div class='del'>-rescue</div><div class='del'>-  "is not installed on your environment yet"</div><div class='del'>-end</div><div class='del'>-}\</div><div class='del'>-. )</div><div class='del'>-Ttk extension is a standard feature of Tk8.5 or later.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-EOT</div><div class='del'>-</div><div class='del'>-txt.insert('end', "Labels, buttons, checkbuttons, and radiobuttons.\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. Labels (text and bitmaps).\n", tag_demo, "demo-label")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. Labels and UNICODE text. (if supported)\n", tag_demo, "demo-unicodeout")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. Buttons.\n", tag_demo, "demo-button")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. Checkbuttons (select any of a group).\n", tag_demo, "demo-check")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. Checkbuttons (if supported).\n", tag_demo, "demo-check2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. Radiobuttons (select one of a group).\n", tag_demo, "demo-radio")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "7. Radiobuttons (if supported 'compound' option).\n", tag_demo, "demo-radio2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "8. Radiobuttons (if supported).\n", tag_demo, "demo-radio3")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "9. A 15-puzzle game made out of buttons.\n", tag_demo, "demo-puzzle")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "10. Iconic buttons that use bitmaps.\n", tag_demo, "demo-icon")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "11. Two labels displaying images.\n", tag_demo, "demo-image1")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "12. A simple user interface for viewing images.\n", tag_demo, "demo-image2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "13. A simple user interface for viewing images. (if supported)\n", tag_demo, "demo-image3")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "14. Labelled frames (if supported)\n", tag_demo, "demo-labelframe")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "15. The simple Themed Tk widgets (require Tile/Ttk extension)\n", tag_demo, "demo-ttkbut")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Listboxes\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. 50 states.\n", tag_demo, "demo-states")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. Colors: change the color scheme for the application.\n", "#{tag_demo.id} demo-colors")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. A collection of famous sayings.\n", tag_demo, "demo-sayings")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. A multi-column list of contries. (require Tile/Ttk extension)\n", tag_demo, "demo-mclist")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. A directory browser tree. (require Tile/Ttk extension)\n", tag_demo, "demo-tree")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Entries and Spin-boxes\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. Without scrollbars.\n", tag_demo, "demo-entry1")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. With scrollbars.\n", tag_demo, "demo-entry2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', </div><div class='del'>-           "3. Validated entries and password fields. (if supported)\n", </div><div class='del'>-           tag_demo, "demo-entry3")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. Spin-boxes. (if supported)\n", tag_demo, "demo-spin")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. Combo-boxes. (require Tile/Ttk extension)\n", tag_demo, "demo-combo")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. Simple Rolodex-like form.\n", tag_demo, "demo-form")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Text\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. Basic editable text.\n", tag_demo, "demo-text")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. Text display styles.\n", tag_demo, "demo-style")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. Hypertext (tag bindings).\n", tag_demo, "demo-bind")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. A text widget with embedded windows.\n", tag_demo, "demo-twind")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. A text widget with embedded windows. (if supported)\n", tag_demo, "demo-twind2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. A search tool built with a text widget.\n", tag_demo, "demo-search")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "7. Peering text widgets. (if supported)\n", tag_demo, "demo-textpeer")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Canvases\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. The canvas item types.\n", tag_demo, "demo-items")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. A simple 2-D plot.\n", tag_demo, "demo-plot")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. Text items in canvases.\n", tag_demo, "demo-ctext")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. An editor for arrowheads on canvas lines.\n", tag_demo, "demo-arrow")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. A ruler with adjustable tab stops.\n", tag_demo, "demo-ruler")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. A building floor plan.\n", tag_demo, "demo-floor")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "7. A building floor plan. (another way to create canvas items)\n", tag_demo, "demo-floor2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "8. A simple scrollable canvas.\n", tag_demo, "demo-cscroll")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "9. A Knight's tour of the chess board. (require Tile/Ttk extension)\n", tag_demo, "demo-knightstour")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Scales and Progress Bars\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. Vertical scale.\n", tag_demo.id, "demo-vscale")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. Horizontal scale.\n", tag_demo.id, "demo-hscale")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. Progress bar. (require Tile/Ttk extension)\n", tag_demo.id, "demo-ttkprogress")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Paned Windows and Notebooks\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. Horizontal paned window. (if supported)\n", tag_demo.id, "demo-paned1")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. Vertical paned window. (if supported)\n", tag_demo.id, "demo-paned2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. Themed nested panes. (require Tile/Ttk extension)\n", tag_demo.id, "demo-ttkpane")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. Notebook widget. (require Tile/Ttk extension)\n", tag_demo.id, "demo-ttknote")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Menus and Toolbars\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. Menus and cascades.\n", tag_demo, "demo-menu")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. Menus and cascades. (if supported)\n", tag_demo, "demo-menu84")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. Menubuttons.\n", tag_demo, "demo-menubu")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. Themed menu buttons. (require Tile/Ttk extension)\n", tag_demo, "demo-ttkmenu")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. Themed toolbar. (require Tile/Ttk extension)\n", tag_demo, "demo-toolbar")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Common Dialogs\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. Message boxes.\n", tag_demo, "demo-msgbox")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. Message boxes with detail text. (if supported)\n", tag_demo, "demo-msgbox2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. File selection dialog.\n", tag_demo, "demo-filebox")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. Color picker.\n", tag_demo, "demo-clrpick")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Animation\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. Animated labels (if supported)\n", tag_demo, "demo-anilabel")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. Animated wave (if supported)\n", tag_demo, "demo-aniwave")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. Pendulum simulation (if supported)\n", tag_demo, "demo-pendulum")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. A celebration of Rube Goldberg (if supported)\n", tag_demo, "demo-goldberg")</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "Miscellaneous\n", tag_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. The built-in bitmaps.\n", tag_demo, "demo-bitmap")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. A dialog box with a local grab.\n", tag_demo, "demo-dialog1")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. A dialog box with a global grab.\n", tag_demo, "demo-dialog2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.state('disabled')</div><div class='del'>-scr.focus</div><div class='del'>-</div><div class='del'>-# positionWindow --</div><div class='del'>-# This procedure is invoked by most of the demos to position a</div><div class='del'>-# new demo window.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The name of the window to position.</div><div class='del'>-</div><div class='del'>-def positionWindow(w)</div><div class='del'>-  w.geometry('+300+300')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# showVars --</div><div class='del'>-# Displays the values of one or more variables in a window, and</div><div class='del'>-# updates the display whenever any of the variables changes.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           Name of new window to create for display.</div><div class='del'>-# args -        Any number of names of variables.</div><div class='del'>-</div><div class='del'>-$showVarsWin = {}</div><div class='del'>-def showVars1(parent, *args)</div><div class='del'>-  if $showVarsWin[parent.path]</div><div class='del'>-    begin</div><div class='del'>-      $showVarsWin[parent.path].destroy </div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  w = TkToplevel.new(parent) {|w|</div><div class='del'>-    title "Variable values"</div><div class='del'>-    base = TkFrame.new(w).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-    TkLabel.new(base) {</div><div class='del'>-      text "Variable values:"</div><div class='del'>-      width 20</div><div class='del'>-      anchor 'center'</div><div class='del'>-      if $tk_version =~ /^4.*/</div><div class='del'>-        font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*'</div><div class='del'>-      else</div><div class='del'>-        font 'Helvetica 14'</div><div class='del'>-      end</div><div class='del'>-    }.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-    len = 1</div><div class='del'>-    args.each{|vnam,vbody|</div><div class='del'>-      len = vnam.to_s.length if vnam.to_s.length &gt; len</div><div class='del'>-    }</div><div class='del'>-    args.each{|vnam,vbody|</div><div class='del'>-      TkFrame.new(w){|f|</div><div class='del'>-        #TkLabel.new(f, 'text'=&gt;"#{vnam}: ").pack('side'=&gt;'left')</div><div class='del'>-        TkLabel.new(f, 'text'=&gt;"#{vnam}: ",'width'=&gt;len+2).pack('side'=&gt;'left')</div><div class='del'>-        TkLabel.new(f, 'textvariable'=&gt;vbody, 'anchor'=&gt;'w')\</div><div class='del'>-                   .pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'x')</div><div class='del'>-      }.pack('side'=&gt;'top', 'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-    }</div><div class='del'>-    TkButton.new(base) {</div><div class='del'>-      text "OK"</div><div class='del'>-      command proc{w.destroy}</div><div class='del'>-    }.pack('side'=&gt;'bottom', 'pady'=&gt;2)</div><div class='del'>-  }</div><div class='del'>-  $showVarsWin[parent.path] = w</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def showVars2(parent, *args)</div><div class='del'>-  if $showVarsWin[parent.path]</div><div class='del'>-    begin</div><div class='del'>-      $showVarsWin[parent.path].destroy </div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  $showVarsWin[parent.path] = TkToplevel.new(parent) {|top|</div><div class='del'>-    title "Variable values"</div><div class='del'>-</div><div class='del'>-    base = TkFrame.new(top).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    TkLabelFrame.new(base, :text=&gt;"Variable values:", </div><div class='del'>-                     :font=&gt;{:family=&gt;'Helvetica', :size=&gt;14}){|f|</div><div class='del'>-      args.each{|vnam,vbody|</div><div class='del'>-        TkGrid(TkLabel.new(f, :text=&gt;"#{vnam}: ", :anchor=&gt;'w'), </div><div class='del'>-               TkLabel.new(f, :textvariable=&gt;vbody, :anchor=&gt;'w'), </div><div class='del'>-               :padx=&gt;2, :pady=&gt;2, :sticky=&gt;'w')</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      f.grid(:sticky=&gt;'news', :padx=&gt;4)</div><div class='del'>-      f.grid_columnconfig(1, :weight=&gt;1)</div><div class='del'>-      f.grid_rowconfig(100, :weight=&gt;1)</div><div class='del'>-    }</div><div class='del'>-    TkButton.new(base, :text=&gt;"OK", :width=&gt;8, :default=&gt;:active, </div><div class='del'>-                 :command=&gt;proc{top.destroy}){|b|</div><div class='del'>-      top.bind('Return', proc{b.invoke})</div><div class='del'>-      top.bind('Escape', proc{b.invoke})</div><div class='del'>-</div><div class='del'>-      b.grid(:sticky=&gt;'e', :padx=&gt;4, :pady=&gt;[6, 4])</div><div class='del'>-    }</div><div class='del'>-    base.grid_columnconfig(0, :weight=&gt;1)</div><div class='del'>-    base.grid_rowconfig(0, :weight=&gt;1)</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &lt; 8</div><div class='del'>-  alias showVars showVars1</div><div class='del'>-elsif $tk_major_ver == 8 &amp;&amp; $tk_minor_ver &lt; 4</div><div class='del'>-  alias showVars showVars1</div><div class='del'>-else # ver &gt;= 8.4</div><div class='del'>-  alias showVars showVars2</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Pseudo-Toplevel support</div><div class='del'>-module 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'>-  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__ method_missing</div><div class='del'>-  private :__method_missing__</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 = Thread.current[: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__(id, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Proc</div><div class='del'>-  def initialize(*args, &amp;b)</div><div class='del'>-    super</div><div class='del'>-    @__pseudo_toplevel__ = Thread.current[:TOPLEVEL]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias __call__ call</div><div class='del'>-  def call(*args, &amp;b)</div><div class='del'>-    if top = @__pseudo_toplevel__</div><div class='del'>-      orig_top = Thread.current[:TOPLEVEL]</div><div class='del'>-      Thread.current[:TOPLEVEL] = top</div><div class='del'>-      begin</div><div class='del'>-        __call__(*args, &amp;b)</div><div class='del'>-      ensure</div><div class='del'>-        Thread.current[:TOPLEVEL] = orig_top</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      __call__(*args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def proc(&amp;b)</div><div class='del'>-  Proc.new(&amp;b)</div><div class='del'>-end</div><div class='del'>-def lambda(&amp;b)</div><div class='del'>-  Proc.new(&amp;b)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def _null_binding</div><div class='del'>-  Module.new.instance_eval{extend PseudoToplevel_Evaluable}</div><div class='del'>-  # binding</div><div class='del'>-  # Module.new.instance_eval{binding}</div><div class='del'>-end</div><div class='del'>-private :_null_binding</div><div class='del'>-</div><div class='del'>-def eval_samplecode(code, file=nil)</div><div class='del'>-  #eval(code)</div><div class='del'>-  #_null_binding.pseudo_toplevel_eval{ eval(code) }</div><div class='del'>-  #Thread.new{ _null_binding.pseudo_toplevel_eval{ eval(code) } }</div><div class='del'>-  Thread.new{</div><div class='del'>-    _null_binding.pseudo_toplevel_eval{</div><div class='del'>-      begin</div><div class='del'>-        if file</div><div class='del'>-          eval(code, binding, "(eval:#{file})")</div><div class='del'>-        else</div><div class='del'>-          eval(code)</div><div class='del'>-        end</div><div class='del'>-      rescue Exception=&gt;e</div><div class='del'>-        #p e</div><div class='del'>-        TkBgError.show(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'>-    }</div><div class='del'>-  }</div><div class='del'>-  Tk.update</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# invoke --</div><div class='del'>-# This procedure is called when the user clicks on a demo description.</div><div class='del'>-# It is responsible for invoking the demonstration.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# txt -         Name of text widget</div><div class='del'>-# index -       The index of the character that the user clicked on.</div><div class='del'>-def invoke(txt, idx)</div><div class='del'>-  tag = txt.tag_names(idx).find{|t| t.kind_of?(String) &amp;&amp; t =~ /^demo-/}</div><div class='del'>-  return unless tag</div><div class='del'>-</div><div class='del'>-  cursor = txt.cget('cursor')</div><div class='del'>-  txt.cursor('watch')</div><div class='del'>-  Tk.update</div><div class='del'>-  # eval(IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join, _null_binding)</div><div class='del'>-  # Tk.update</div><div class='del'>-  eval_samplecode(IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join, tag[5..-1] + '.rb')</div><div class='del'>-  txt.cursor(cursor)</div><div class='del'>-</div><div class='del'>-  $tag_visited.add("#{idx} linestart +1 chars", "#{idx} lineend +1 chars")</div><div class='del'>-end</div><div class='del'>-=begin</div><div class='del'>-def invoke (txt, idx)</div><div class='del'>-  tag = txt.tag_names(idx).find{|t| t.kind_of?(String) &amp;&amp; t =~ /^demo-/}</div><div class='del'>-  return unless tag</div><div class='del'>-  current_cursor = txt.cget('cursor')</div><div class='del'>-  txt.cursor('watch')</div><div class='del'>-  Tk.update</div><div class='del'>-#  eval `cat #{tag[5..-1]}.rb`</div><div class='del'>-#  eval `cat #{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb`</div><div class='del'>-  eval IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join</div><div class='del'>-  Tk.update</div><div class='del'>-#  txt.cursor('xterm')</div><div class='del'>-  txt.cursor(current_cursor)</div><div class='del'>-</div><div class='del'>-  $tag_visited.add("#{idx} linestart +1 chars", "#{idx} lineend +1 chars")</div><div class='del'>-end</div><div class='del'>-=end</div><div class='del'>-# showStatus --</div><div class='del'>-#</div><div class='del'>-#       Show the name of the demo program in the status bar. This procedure</div><div class='del'>-#       is called when the user moves the cursor over a demo description.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-def showStatus (txt, index)</div><div class='del'>-  tag = txt.tag_names(index).find{|t| t.kind_of?(String) &amp;&amp; t =~ /^demo-/}</div><div class='del'>-  cursor = txt.cget('cursor')</div><div class='del'>-  unless tag</div><div class='del'>-    $statusBarLabel.configure('text', " ")</div><div class='del'>-    newcursor = 'xterm'</div><div class='del'>-  else</div><div class='del'>-    demoname = tag[5..-1]</div><div class='del'>-    $statusBarLabel.configure('text', </div><div class='del'>-                             "Run the \"#{demoname}\" sample program")</div><div class='del'>-    newcursor = 'hand2'</div><div class='del'>-  end</div><div class='del'>-  txt.configure('cursor'=&gt;newcursor) if cursor != newcursor</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# showCode --</div><div class='del'>-# This procedure creates a toplevel window that displays the code for</div><div class='del'>-# a demonstration and allows it to be edited and reinvoked.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# demo -        The name of the demonstration's window, which can be</div><div class='del'>-#               used to derive the name of the file containing its code.</div><div class='del'>-</div><div class='del'>-def showCode1(demo)</div><div class='del'>-  file = "#{demo}.rb"</div><div class='del'>-  $code_window = nil unless defined? $code_window</div><div class='del'>-  if $code_window == nil || TkWinfo.exist?($code_window) == false</div><div class='del'>-    $code_window = TkToplevel.new(nil)</div><div class='del'>-    f = TkFrame.new($code_window)</div><div class='del'>-</div><div class='del'>-    TkButton.new(f) {</div><div class='del'>-      text "Dismiss"</div><div class='del'>-      command proc{</div><div class='del'>-        $code_window.destroy</div><div class='del'>-        $code_window = nil</div><div class='del'>-      }</div><div class='del'>-    }.pack('side'=&gt;'right', 'expand'=&gt;'false', 'pady'=&gt;2, 'padx'=&gt;25)</div><div class='del'>-    TkButton.new(f) {</div><div class='del'>-      text "Rerun Demo"</div><div class='del'>-      # command proc{eval($code_text.get('1.0','end'), _null_binding)}</div><div class='del'>-      command proc{eval_samplecode($code_text.get('1.0','end'), '&lt;viewer&gt;')}</div><div class='del'>-    }.pack('side'=&gt;'right', 'expand'=&gt;'false', 'pady'=&gt;2)</div><div class='del'>-</div><div class='del'>-    TkLabel.new(f,'text'=&gt;'line:').pack('side'=&gt;'left')</div><div class='del'>-    linenum =TkLabel.new(f,'text'=&gt;'').pack('side'=&gt;'left')</div><div class='del'>-    TkLabel.new(f,'text'=&gt;'  pos:').pack('side'=&gt;'left')</div><div class='del'>-    posnum =TkLabel.new(f,'text'=&gt;'').pack('side'=&gt;'left')</div><div class='del'>-</div><div class='del'>-    $set_linenum = proc{|w|</div><div class='del'>-      line, pos = w.index('insert').split('.')</div><div class='del'>-      linenum.text = line</div><div class='del'>-      posnum.text  = pos</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    f.pack('side'=&gt;'bottom', 'expand'=&gt;'true', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-    if $tk_version =~ /^4\.[01]/</div><div class='del'>-      s = TkScrollbar.new($code_window, 'orient'=&gt;'vertical')</div><div class='del'>-      $code_text = TkText.new($code_window) {</div><div class='del'>-        height 40</div><div class='del'>-        setgrid 'yes'</div><div class='del'>-        yscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-      }</div><div class='del'>-      s.command(proc{|*args| $code_text.yview(*args)})</div><div class='del'>-      s.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-      $code_text.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-    else</div><div class='del'>-      TkFrame.new($code_window) {|f|</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'>-        hs = TkScrollbar.new($code_window, 'highlightthickness'=&gt;0, </div><div class='del'>-                             'orient'=&gt;'horizontal')</div><div class='del'>-        vs = TkScrollbar.new($code_window, 'highlightthickness'=&gt;0, </div><div class='del'>-                             'orient'=&gt;'vertical')</div><div class='del'>-        $code_text = TkText.new($code_window) {|t|</div><div class='del'>-          height 40</div><div class='del'>-          wrap 'word'</div><div class='del'>-          xscrollcommand proc{|first,last| hs.set first,last}</div><div class='del'>-          yscrollcommand proc{|first,last| vs.set first,last}</div><div class='del'>-          setgrid 'yes'</div><div class='del'>-          highlightthickness 0</div><div class='del'>-          pady 2</div><div class='del'>-          padx 3</div><div class='del'>-          hs.command(proc{|*args| $code_text.xview(*args)})</div><div class='del'>-          vs.command(proc{|*args| $code_text.yview(*args)})</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        $code_text.grid('in'=&gt;f, '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'>-        vs.grid('in'=&gt;f, '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'>-#       xs.grid('in'=&gt;f, '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'>-# JKC 2001-07-26: segfaults under 1.7.1 (2001-06-19) [i686-linux]</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'>-    end</div><div class='del'>-</div><div class='del'>-    btag = TkBindTag.new</div><div class='del'>-</div><div class='del'>-    btag.bind('Key', $set_linenum, '%W')</div><div class='del'>-    btag.bind('Button', $set_linenum, '%W')</div><div class='del'>-</div><div class='del'>-    btags = $code_text.bindtags</div><div class='del'>-    btags.insert(btags.index($code_text.class) + 1, btag)</div><div class='del'>-    $code_text.bindtags = btags</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    $code_window.deiconify</div><div class='del'>-    $code_window.raise</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $code_window.title("Demo code: #{file}")</div><div class='del'>-  $code_window.iconname(file)</div><div class='del'>-#  fid = open(file, 'r')</div><div class='del'>-  fid = open([$demo_dir, file].join(File::Separator), 'r')</div><div class='del'>-  $code_text.delete('1.0', 'end')</div><div class='del'>-  #$code_text.insert('1.0', `cat #{file}`)</div><div class='del'>-  $code_text.insert('1.0', fid.read)</div><div class='del'>-  #$code_mark = TkTextMark.new($code_text, '1.0')</div><div class='del'>-  #$code_text.set_insert('1.0')</div><div class='del'>-  TkTextMarkInsert.new($code_text,'1.0')</div><div class='del'>-</div><div class='del'>-  $set_linenum.call($code_text)</div><div class='del'>-</div><div class='del'>-  fid.close</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def showCode2(demo)</div><div class='del'>-  file = "#{demo}.rb"</div><div class='del'>-  $code_window = nil unless defined? $code_window</div><div class='del'>-  if $code_window == nil || TkWinfo.exist?($code_window) == false</div><div class='del'>-    $code_window = TkToplevel.new(nil)</div><div class='del'>-    tf = TkFrame.new($code_window)</div><div class='del'>-    $code_text = TkText.new(tf, :font=&gt;'Courier 10', :height=&gt;30, </div><div class='del'>-                            :wrap=&gt;'word', :bd=&gt;1, :setgrid=&gt;true, </div><div class='del'>-                            :highlightthickness=&gt;0, :pady=&gt;2, :padx=&gt;3)</div><div class='del'>-    xscr = TkScrollbar.new(tf, :bd=&gt;1){assign($code_text)}</div><div class='del'>-    yscr = TkScrollbar.new(tf, :bd=&gt;1){assign($code_text)}</div><div class='del'>-    TkGrid($code_text, yscr, :sticky=&gt;'news')</div><div class='del'>-    #TkGrid(xscr)</div><div class='del'>-    tf.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    tf.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    bf = TkFrame.new($code_window)</div><div class='del'>-</div><div class='del'>-    lf = TkFrame.new(bf)</div><div class='del'>-    TkLabel.new(lf, :text=&gt;'line:').pack(:side=&gt;:left)</div><div class='del'>-    linenum =TkLabel.new(lf, :text=&gt;'').pack(:side=&gt;:left)</div><div class='del'>-    TkLabel.new(lf, :text=&gt;'  pos:').pack(:side=&gt;:left)</div><div class='del'>-    posnum =TkLabel.new(lf, :text=&gt;'').pack(:side=&gt;:left)</div><div class='del'>-</div><div class='del'>-    $set_linenum = proc{|w|</div><div class='del'>-      line, pos = w.index('insert').split('.')</div><div class='del'>-      linenum.text = line</div><div class='del'>-      posnum.text  = pos</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    b_dis = TkButton.new(bf, :text=&gt;'Dismiss', :default=&gt;:active, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $code_window.destroy</div><div class='del'>-                           $code_window = nil</div><div class='del'>-                         }, </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left)</div><div class='del'>-    b_prn = TkButton.new(bf, :text=&gt;'Print Code', </div><div class='del'>-                         :command=&gt;proc{printCode($code_text, file)}, </div><div class='del'>-                         :image=&gt;$image['print'], :compound=&gt;:left)</div><div class='del'>-    b_run = TkButton.new(bf, :text=&gt;'Rerun Demo', </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           # eval($code_text.get('1.0','end'), _null_binding)</div><div class='del'>-                           eval_samplecode($code_text.get('1.0','end'), '&lt;viewer&gt;')</div><div class='del'>-                         }, </div><div class='del'>-                         :image=&gt;$image['refresh'], :compound=&gt;:left)</div><div class='del'>-</div><div class='del'>-    TkGrid(lf, 'x', b_run, b_prn, b_dis, :padx=&gt;4, :pady=&gt;[6,4])</div><div class='del'>-    bf.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    TkGrid(tf, :sticky=&gt;'news')</div><div class='del'>-    TkGrid(bf, :sticky=&gt;'ew')</div><div class='del'>-    $code_window.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-    $code_window.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    $code_window.bind('Return', proc{|win|</div><div class='del'>-                        b_dis.invoke unless win.kind_of?(TkText)</div><div class='del'>-                      }, '%W')</div><div class='del'>-    $code_window.bindinfo('Return').each{|cmd, arg|</div><div class='del'>-      $code_window.bind_append('Escape', cmd, arg)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    btag = TkBindTag.new</div><div class='del'>-</div><div class='del'>-    btag.bind('Key', $set_linenum, '%W')</div><div class='del'>-    btag.bind('Button', $set_linenum, '%W')</div><div class='del'>-    btag.bind('Configure', $set_linenum, '%W')</div><div class='del'>-</div><div class='del'>-    btags = $code_text.bindtags</div><div class='del'>-    btags.insert(btags.index($code_text.class) + 1, btag)</div><div class='del'>-    $code_text.bindtags = btags</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    $code_window.deiconify</div><div class='del'>-    $code_window.raise</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $code_window.title("Demo code: #{file}")</div><div class='del'>-  $code_window.iconname(file)</div><div class='del'>-  fid = open([$demo_dir, file].join(File::Separator), 'r')</div><div class='del'>-  $code_text.delete('1.0', 'end')</div><div class='del'>-  $code_text.insert('1.0', fid.read)</div><div class='del'>-  TkTextMarkInsert.new($code_text,'1.0')</div><div class='del'>-</div><div class='del'>-  $set_linenum.call($code_text)</div><div class='del'>-</div><div class='del'>-  fid.close</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &lt; 8</div><div class='del'>-  alias showCode showCode1</div><div class='del'>-elsif $tk_major_ver == 8 &amp;&amp; $tk_minor_ver &lt; 4</div><div class='del'>-  alias showCode showCode1</div><div class='del'>-else # ver &gt;= 8.4</div><div class='del'>-  alias showCode showCode2</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# printCode --</div><div class='del'>-# Prints the source code currently displayed in the See Code dialog.</div><div class='del'>-# Much thanks to Arjen Markus for this.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# txt -         Name of text widget containing code to print</div><div class='del'>-# file -        Name of the original file (implicitly for title)</div><div class='del'>-</div><div class='del'>-def printCode(txt, file)</div><div class='del'>-  code = txt.get('1.0', 'end - 1c')</div><div class='del'>-  dir = '.'</div><div class='del'>-  dir = ENV['HOME'] if ENV['HOME']</div><div class='del'>-  dir = ENV['TMP'] if ENV['TMP']</div><div class='del'>-  dir = ENV['TEMP'] if ENV['TEMP']</div><div class='del'>-</div><div class='del'>-  fname = [dir, 'tkdemo-' + file].join(File::Separator)</div><div class='del'>-  open(fname, 'w'){|fid| fid.print(code)}</div><div class='del'>-  begin</div><div class='del'>-    case Tk::TCL_PLATFORM('platform')</div><div class='del'>-    when 'unix'</div><div class='del'>-      msg = `lp -c #{fname}`</div><div class='del'>-      unless $?.exitstatus == 0</div><div class='del'>-        Tk.messageBox(:title=&gt;'Print spooling failure', </div><div class='del'>-                      :message=&gt;'Print spooling probably failed: ' + msg)</div><div class='del'>-      end</div><div class='del'>-    when 'windows'</div><div class='del'>-      begin</div><div class='del'>-        printTextWin32(fname)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        Tk.messageBox(:title=&gt;'Print spooling failure', </div><div class='del'>-                      :message=&gt;'Print spooling probably failed: ' + </div><div class='del'>-                      e.message)</div><div class='del'>-      end      </div><div class='del'>-    when 'macintosh'</div><div class='del'>-      Tk.messageBox(:title=&gt;'Operation not Implemented', </div><div class='del'>-                    :message=&gt;'Oops, sorry: not implemented yet!')</div><div class='del'>-    else</div><div class='del'>-      Tk.messageBox(:title=&gt;'Operation not Implemented', </div><div class='del'>-                    :message=&gt;'Wow! Unknown platform: ' + </div><div class='del'>-                    Tk::TCL_PLATFORM('platform'))</div><div class='del'>-    end</div><div class='del'>-  ensure</div><div class='del'>-    File.delete(fname)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# printTextWin32 --</div><div class='del'>-#    Print a file under Windows</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# filename -            Name of the file</div><div class='del'>-#</div><div class='del'>-def printTextWin32(fname)</div><div class='del'>-  require 'win32/registry'</div><div class='del'>-  begin</div><div class='del'>-    app = Win32::Registry::HKEY_CLASSES_ROOT['.txt']</div><div class='del'>-    pcmd = nil</div><div class='del'>-    Win32::Registry::HKEY_CLASSES_ROOT.open("#{app}\\shell\\print"){|reg|</div><div class='del'>-      pcmd = reg['command']</div><div class='del'>-    }</div><div class='del'>-  rescue</div><div class='del'>-    app = Tk.tk_call('auto_execok', 'notepad.exe')</div><div class='del'>-    pcmd = "#{app} /p %1"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  pcmd.gsub!('%1', fname)</div><div class='del'>-  puts pcmd</div><div class='del'>-  cmd = Tk.tk_call('auto_execok', 'start') + ' /min ' + pcmd</div><div class='del'>-  </div><div class='del'>-  msg = `#{cmd}`</div><div class='del'>-  unless $?.exitstatus == 0</div><div class='del'>-    fail RuntimeError, msg</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# aboutBox</div><div class='del'>-#</div><div class='del'>-#      Pops up a message box with an "about" message</div><div class='del'>-#</div><div class='del'>-def aboutBox</div><div class='del'>-  Tk.messageBox('icon'=&gt;'info', 'type'=&gt;'ok', 'title'=&gt;'About Widget Demo', </div><div class='del'>-                'message'=&gt;"Ruby/Tk widget demonstration Ver.1.7.0-en\n\n" + </div><div class='del'>-                           "based on demos of Tk8.1 -- 8.5  " + </div><div class='del'>-                           "( Copyright of Tcl/Tk demos:: " + </div><div class='del'>-                           "(c) 1996-1997 Sun Microsystems, Inc. / " + </div><div class='del'>-                           "(c) 1997-2000 Ajuba Solutions, Inc. / " + </div><div class='del'>-                           "(c) 2001-2007 Donal K. Fellows / " + </div><div class='del'>-                           "(c) 2002-2007 Daniel A. Steffen )\n\n" +</div><div class='del'>-                           "Your Ruby &amp; Tk Version ::\n" + </div><div class='del'>-                           "Ruby#{RUBY_VERSION}(#{RUBY_RELEASE_DATE})[#{RUBY_PLATFORM}] / Tk#{$tk_patchlevel}#{(Tk::JAPANIZED_TK)? '-jp': ''}\n\n" + </div><div class='del'>-                           "Ruby/Tk release date :: tcltklib #{TclTkLib::RELEASE_DATE}; tk #{Tk::RELEASE_DATE}")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#########################################</div><div class='del'>-# start demos if given at command line</div><div class='del'>-no_launcher = false</div><div class='del'>-if ARGV[0] == '-n'</div><div class='del'>-  ARGV.shift</div><div class='del'>-  no_launcher = true if ARGV.size &gt; 0</div><div class='del'>-else</div><div class='del'>-  # show the root widget to make it lower then demo windows</div><div class='del'>-  Tk.update</div><div class='del'>-end</div><div class='del'>-ARGV.each{|cmd| </div><div class='del'>-  if cmd =~ /(.*).rb/</div><div class='del'>-    cmd = $1</div><div class='del'>-  end</div><div class='del'>-  #eval(IO.readlines("#{[$demo_dir, cmd].join(File::Separator)}.rb").join, </div><div class='del'>-  #     _null_binding)</div><div class='del'>-  eval_samplecode(IO.readlines("#{[$demo_dir, cmd].join(File::Separator)}.rb").join, cmd + '.rb')</div><div class='del'>-}</div><div class='del'>-if no_launcher</div><div class='del'>-  $root.withdraw  # hide root window</div><div class='del'>-  Thread.start{</div><div class='del'>-    loop do</div><div class='del'>-      count = 0</div><div class='del'>-      $root.winfo_children.each{|w|</div><div class='del'>-        count += 1 if w.kind_of?(TkToplevel)</div><div class='del'>-      }</div><div class='del'>-      $root.destroy if count == 0</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'>-# start eventloop</div><div class='del'>-Tk.mainloop</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/README b/ext/tk/sample/demos-jp/README<br/>deleted file mode 100644<br/>index 42bec16c60..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,54 +0,0 @@</div><div class='del'>-</div><div class='del'>-  Ruby/Tk widget-demo </div><div class='del'>-                              version 1.2 ( 2000/04/08 )</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.4.x ¤ËÂÐ±þ¤È¤·¤Æ¤ª¤­¤Þ¤¹¤¬¡¤µì¥Ð¡¼¥¸¥ç¥ó¤ËÈæ¤Ù¤Æ¡¤</div><div class='del'>-¤Û¤È¤ó¤ÉÊÑ¹¹¤Ï¤¢¤ê¤Þ¤»¤ó¡¥ruby-1.1c2 °Ê¾å¤Ê¤éÆ°¤¯¤È»×¤¤¤Þ¤¹¡¥ruby-1.5.x ¤Ë¤Ä</div><div class='del'>-¤¤¤Æ¤Ï¥Æ¥¹¥È¤·¤Æ¤¤¤Þ¤»¤ó¡¥¤½¤Î¤¿¤á¡¤Èó¸ß´¹¤Î±Æ¶Á¤¬½Ð¤ë¤³¤È¤¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»</div><div class='del'>-¤ó¤¬¡¤¤½¤Î¾ì¹ç¤Ç¤â¾¯¤·¤Î½¤Àµ¤ÇÆ°¤«¤»¤ë¤È»×¤¤¤Þ¤¹¡¥ÁÈ¤ß¹þ¤à Tk ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï¡¤</div><div class='del'>-4.2 ¤Ç¤â 8.0 ¤Ç¤â½¤Àµ¤Ê¤¯Æ°¤«¤»¤ë¤Ï¤º¤Ç¤¹¡¥¤¿¤À¤·¡¤ÆüËÜ¸ìÈÇ¤Ç¤Î°Ü¿¢¤È¤Ê¤Ã¤Æ</div><div class='del'>-¤¤¤ë¤¿¤á¡¤ÆüËÜ¸ì²½¤µ¤ì¤¿ Tk ¤ò¤´ÍøÍÑ¤¯¤À¤µ¤¤¡¥¥¹¥¯¥ê¥×¥È¤Î¥Æ¥¹¥È¤Ï¡¤µì¥Ð¡¼¥¸¥ç</div><div class='del'>-¥ó¤ÎºÝ¤Ë Tk4.2jp ¤È Tk8.0jp ¤Î¾å¤Ç¹Ô¤Ã¤Æ¤¤¤Þ¤¹ (´°àú¤Ë¤Ç¤Ï¤Ê¤¤¤Ç¤¹¤¬)¡¥º£²ó</div><div class='del'>-¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï ruby-1.4.x + 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-jp/README.1st b/ext/tk/sample/demos-jp/README.1st<br/>deleted file mode 100644<br/>index 60b278d7b6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/README.1st?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/README.1st</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤Ï Ruby/Tk ¤Î¥Ç¥â¥¹¥¯¥ê¥×¥È¤¬¼ý¤á¤é¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-</div><div class='del'>-'.rb' ¤È¤¤¤¦³ÈÄ¥»Ò¤ò»ý¤Ã¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Ï¡¤¥é¥ó¥Á¥ã¨¡¥¹¥¯¥ê¥×¥È¤Ç</div><div class='del'>-¤¢¤ë 'widget' ¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë¥µ¥Ö¥¹¥¯¥ê¥×¥È¤Ç¤¹¡¥¤½¤ì¤¾¤ìÆÈÎ©¤Ë</div><div class='del'>-¤ÏÆ°¤­¤Þ¤»¤ó¡¥'widget' ¥¹¥¯¥ê¥×¥È¤«¤é¸Æ¤Ó½Ð¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-</div><div class='del'>-¤â¤·¥é¥ó¥Á¥ã¨¡¥¹¥¯¥ê¥×¥È 'widget' ¤Îµ¯Æ°¤ÈÆ±»þ¤Ë¤¤¤¯¤Ä¤«¤Î¥µ¥Ö¥¹</div><div class='del'>-¥¯¥ê¥×¥È¤òµ¯Æ°¤·¤¿¤±¤ì¤Ð¡¤¤½¤Î¥µ¥Ö¥¹¥¯¥ê¥×¥È¤ÎÌ¾Á°¤ò°ú¿ô¤È¤·¤ÆÍ¿</div><div class='del'>-¤¨¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-( Îã: /usr/local/bin/ruby widget button.rb entry1.rb text.rb )</div><div class='del'>-¥µ¥Ö¥¹¥¯¥ê¥×¥È¤Î³ÈÄ¥»Ò '.rb' ¤Ï¾ÊÎ¬¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-( Îã: /usr/local/bin/ruby widget button entry1 text )</div><div class='del'>-</div><div class='del'>-¤â¤·¥é¥ó¥Á¥ã¨¡¥¹¥¯¥ê¥×¥È¤Î¥¦¥£¥ó¥É¥¦¤¬É¬Í×¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¤'-n' ¥ª</div><div class='del'>-¥×¥·¥ç¥ó¤òÍ¿¤¨¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-( Îã: /usr/local/bin/ruby widget -n button.rb entry1.rb text.rb )</div><div class='del'>-</div><div class='del'>-Â¾¤Î¥Õ¥¡¥¤¥ë (browse1 ¤ä hello ¤Ê¤É) ¤ÏÃ±ÆÈ¤ÇÆ°¤«¤¹¤³¤È¤¬²ÄÇ½¤Ç¤¹¡¥</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-jp/anilabel.rb b/ext/tk/sample/demos-jp/anilabel.rb<br/>deleted file mode 100644<br/>index aee57f9f6a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/anilabel.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/anilabel.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,177 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-# toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë</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'>-base_frame = TkFrame.new($anilabel_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤Ï4¤Ä¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó¥é¥Ù¥ë¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£º¸Â¦¤Ë¤¢¤ë¥é¥Ù¥ë¤Ï¡¢ÆâÉô¤Î¥Æ¥­¥¹¥È¥á¥Ã¥»¡¼¥¸¤ò¥¹¥¯¥í¡¼¥ë¤·¤¿¤è¤¦¤Ë¸«¤»¤ë¤³¤È¤ÇÆ°¤­¤òÉÕ¤±¤Æ¤¤¤Þ¤¹¡£±¦Â¦¤Î¥é¥Ù¥ë¤Ï¡¢É½¼¨¤¹¤ë¥¤¥á¡¼¥¸¤òÊÑ²½¤µ¤»¤ë¤³¤È¤ÇÆ°¤­¤òÍ¿¤¨¤Æ¤¤¤Þ¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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'>-# label demo ÍÑ¥Õ¥ì¡¼¥àÀ¸À®</div><div class='del'>-f_left = TkLabelFrame.new(base_frame,  :text=&gt;'Scrolling Texts')</div><div class='del'>-f_right = TkLabelFrame.new(base_frame, :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'>-# label À¸À®</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-jp/aniwave.rb b/ext/tk/sample/demos-jp/aniwave.rb<br/>deleted file mode 100644<br/>index 8fa14f65fe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/aniwave.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/aniwave.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($aniwave_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# create label</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text '¤³¤Î¥Ç¥â¤Ç¤Ï¡¢¥é¥¤¥ó¥¢¥¤¥Æ¥à¤¬°ì¤Ä¤À¤±ÉÁ¤«¤ì¤¿¥­¥ã¥ó¥Ð¥¹¥¦¥£¥¸¥§¥Ã¥È¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥¢¥Ë¥á¡¼¥·¥ç¥ó½èÍý¤Ï¡¢¤½¤Î¥é¥¤¥ó¥¢¥¤¥Æ¥à¤ÎºÂÉ¸ÃÍ¤òÊÑ¹¹¤¹¤ë¤³¤È¤Ç¼Â¸½¤·¤Æ¤¤¤Þ¤¹¡£'</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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'>-    n = 305</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(base_frame, :left).move</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/arrow.rb b/ext/tk/sample/demos-jp/arrow.rb<br/>deleted file mode 100644<br/>index 3c49e67b09..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/arrow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/arrow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,247 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-  if $tk_version =~ /^4.*/</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'>-  else</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 18')</div><div class='del'>-    TkcText.new(c, v.x1, 330, </div><div class='del'>-                'text'=&gt;"'arrowshape'=&gt;[#{v.a}, #{v.b}, #{v.c}]",</div><div class='del'>-                'anchor'=&gt;'w', 'font'=&gt;'Helvetica 18')</div><div class='del'>-  end</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'>-base_frame = TkFrame.new($arrow_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'5i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"¤³¤Î widget ¤Ç¡¢¥­¥ã¥ó¥Ð¥¹¤Ç»È¤ï¤ì¤ë¥é¥¤¥ó¤Ë¤Ä¤¤¤ÆÍÍ¡¹¤ÊÉý¤äÌð°õ¤ÎÆ¬¤Î·Á¤ò»î¤·¤Æ¤ß¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Àþ¤ÎÉý¤äÌð°õ¤Î·Á¤òÊÑ¤¨¤ë¤Ë¤Ï¡¢³ÈÂç¤µ¤ì¤¿Ìð°õ¤Ë¤Ä¤¤¤Æ¤¤¤ë 3¤Ä¤Î»Í³Ñ¤ò¥É¥é¥Ã¥°¤·¤Æ¤¯¤À¤µ¤¤¡£±¦Â¦¤ÎÌð°õ¤ÏÉáÄÌ¤ÎÂç¤­¤µ¤Ç¤Î¥µ¥ó¥×¥ë¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£²¼¤Î¥Æ¥­¥¹¥È¤Ï¥é¥¤¥ó¥¢¥¤¥Æ¥à¤ËÂÐ¤¹¤ëÀßÄê¥ª¥×¥·¥ç¥ó¤Ç¤¹¡£"){</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame, '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-jp/bind.rb b/ext/tk/sample/demos-jp/bind.rb<br/>deleted file mode 100644<br/>index a1bcfdd2e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/bind.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/bind.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,125 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($bind_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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'>-txt = TkText.new(base_frame){|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(base_frame) {|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'>-  # ¥Æ¥­¥¹¥ÈÁÞÆþ</div><div class='del'>-  insert 'insert', "¥Æ¥­¥¹¥Èwidget¤ÎÉ½¼¨¥¹¥¿¥¤¥ë¤òÀ©¸æ¤¹¤ë¤Î¤ÈÆ±¤¸¥¿¥°¤Î¥á¥«¥Ë¥º¥à¤ò»È¤Ã¤Æ¡¢¥Æ¥­¥¹¥È¤ËTcl¤Î¥³¥Þ¥ó¥É¤ò³ä¤êÅö¤Æ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢¥Þ¥¦¥¹¤ä¥­¡¼¥Ü¡¼¥É¤Î¥¢¥¯¥·¥ç¥ó¤ÇÆÃÄê¤ÎTcl¤Î¥³¥Þ¥ó¥É¤¬¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Îã¤¨¤Ð¡¢²¼¤Î¥­¥ã¥ó¥Ð¥¹¤Î¥Ç¥â¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ¤ÎÀâÌÀÊ¸¤Ë¤Ï¤½¤Î¤è¤¦¤Ê¥¿¥°¤¬¤Ä¤¤¤Æ¤¤¤Þ¤¹¡£¥Þ¥¦¥¹¤òÀâÌÀÊ¸¤Î¾å¤Ë»ý¤Ã¤Æ¤¤¤¯¤ÈÀâÌÀÊ¸¤¬¸÷¤ê¡¢¥Ü¥¿¥ó1¤ò²¡¤¹¤È¤½¤ÎÀâÌÀ¤Î¥Ç¥â¤¬»Ï¤Þ¤ê¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-"</div><div class='del'>-  insert('end', '1. ¥­¥ã¥ó¥Ð¥¹ widget ¤Ëºî¤ë¤³¤È¤Î¤Ç¤­¤ë¥¢¥¤¥Æ¥à¤Î¼ïÎàÁ´¤Æ¤Ë´Ø¤¹¤ë¥µ¥ó¥×¥ë¡£', (d1 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', '2. ´ÊÃ±¤Ê 2¼¡¸µ¤Î¥×¥í¥Ã¥È¡£¥Ç¡¼¥¿¤òÉ½¤¹ÅÀ¤òÆ°¤«¤¹¤³¤È¤¬¤Ç¤­¤ë¡£', (d2 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', '3. ¥Æ¥­¥¹¥È¥¢¥¤¥Æ¥à¤Î¥¢¥ó¥«¡¼¤È¹ÔÂ·¤¨¡£', </div><div class='del'>-         (d3 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', '4. ¥é¥¤¥ó¥¢¥¤¥Æ¥à¤Î¤¿¤á¤ÎÌð°õ¤ÎÆ¬¤Î·Á¤Î¥¨¥Ç¥£¥¿¡£', </div><div class='del'>-         (d4 = TkTextTag.new(t)) )</div><div class='del'>-  insert('end', "\n\n")</div><div class='del'>-  insert('end', '5. ¥¿¥Ö¥¹¥È¥Ã¥×¤òÊÑ¹¹¤¹¤ë¤¿¤á¤Îµ¡Ç½¤Ä¤­¤Î¥ë¡¼¥é¡¼¡£', </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. ¥­¥ã¥ó¥Ð¥¹¤¬¤É¤¦¤ä¤Ã¤Æ¥¹¥¯¥í¡¼¥ë¤¹¤ë¤Î¤«¤ò¼¨¤¹¥°¥ê¥Ã¥É¡£', </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_samplecode(`cat #{[$demo_dir,'items.rb'].join(File::Separator)}`, 'items.rb')</div><div class='del'>-          })</div><div class='del'>-  d2.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'plot.rb'].join(File::Separator)}`, 'plot.rb')</div><div class='del'>-          })</div><div class='del'>-  d3.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'ctext.rb'].join(File::Separator)}`, 'ctext.rb')</div><div class='del'>-          })</div><div class='del'>-  d4.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'arrow.rb'].join(File::Separator)}`, 'arrow.rb')</div><div class='del'>-          })</div><div class='del'>-  d5.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'ruler.rb'].join(File::Separator)}`, 'ruler.rb')</div><div class='del'>-          })</div><div class='del'>-  d6.bind('1', </div><div class='del'>-          proc{</div><div class='del'>-            eval_samplecode(`cat #{[$demo_dir,'cscroll.rb'].join(File::Separator)}`, 'cscroll.rb')</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='del'>-</div><div class='del'>-txt.width  60</div><div class='del'>-txt.height 24</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/bitmap.rb b/ext/tk/sample/demos-jp/bitmap.rb<br/>deleted file mode 100644<br/>index b6b0e54bbe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/bitmap.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/bitmap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,74 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</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'>-        Tk::Label.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'>-base_frame = TkFrame.new($bitmap_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¡¢Tk ¤ËÁÈ¤ß¹þ¤Þ¤ì¤¿¤¹¤Ù¤Æ¤Î¥Ó¥Ã¥È¥Þ¥Ã¥×¤¬¡¢¤½¤ì¤é¤ÎÌ¾Á°¤È¶¦¤ËÉ½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Tcl ¤Î¥¹¥¯¥ê¥×¥ÈÃæ¤Ç¤Ï¡¢¤½¤ì¤¾¤ì¤ÎÌ¾Á°¤òÍÑ¤¤¤Æ»²¾È¤·¤Þ¤¹¡£"){</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame){|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-jp/browse1 b/ext/tk/sample/demos-jp/browse1<br/>deleted file mode 100644<br/>index 03e251035a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/browse1?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/browse2 b/ext/tk/sample/demos-jp/browse2<br/>deleted file mode 100644<br/>index edad04dbcb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/browse2?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/button.rb b/ext/tk/sample/demos-jp/button.rb<br/>deleted file mode 100644<br/>index 18e42008c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/button.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/button.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,83 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-</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 "¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¥Ü¥¿¥ó¤ÎÇØ·Ê¿§¤¬¤½¤Î¥Ü¥¿¥ó¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¿§¤Ë¤Ê¤ê¤Þ¤¹¡£¥Ü¥¿¥ó¤«¤é¥Ü¥¿¥ó¤Ø¤Î°ÜÆ°¤Ï¥¿¥Ö¤ò²¡¤¹¤³¤È¤Ç¤â²ÄÇ½¤Ç¤¹¡£¤Þ¤¿¥¹¥Ú¡¼¥¹¤Ç¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£"</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 = Tk::Frame.new($button_demo) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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-jp/check.rb b/ext/tk/sample/demos-jp/check.rb<br/>deleted file mode 100644<br/>index b953e7f623..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/check.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/check.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,70 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($check_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤Ï 3 ¤Ä¤Î¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥Ü¥¿¥ó¤ÎÁªÂò¾õÂÖ¤¬ÊÑ¤ï¤ê¡¢Tcl ÊÑ¿ô ( TkVariable ¥ª¥Ö¥¸¥§¥¯¥È¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤¹ ) ¤Ë¤½¤Î¥Ü¥¿¥ó¤Î¾õÂÖ¤ò¼¨¤¹ÃÍ¤òÀßÄê¤·¤Þ¤¹¡£¸½ºß¤ÎÊÑ¿ô¤ÎÃÍ¤ò¸«¤ë¤Ë¤Ï¡ÖÊÑ¿ô»²¾È¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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 'ÊÑ¿ô»²¾È'</div><div class='del'>-    command proc{</div><div class='del'>-      showVars(base_frame, </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(base_frame, 'text'=&gt;'¥ï¥¤¥Ñ¡¼ OK', 'variable'=&gt;wipers),</div><div class='del'>-  TkCheckButton.new(base_frame, 'text'=&gt;'¥Ö¥ì¡¼¥­ OK', 'variable'=&gt;brakes),</div><div class='del'>-  TkCheckButton.new(base_frame, 'text'=&gt;'±¿Å¾¼ê ÁÇÌÌ', '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-jp/check2.rb b/ext/tk/sample/demos-jp/check2.rb<br/>deleted file mode 100644<br/>index 7f7cb9e932..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/check2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/check2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,110 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-# 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'>-# 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'>-base_frame = TkFrame.new($check2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤Ï£´¤Ä¤Î¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥Ü¥¿¥ó¤ÎÁªÂò¾õÂÖ¤¬ÊÑ¤ï¤ê¡¢TclÊÑ¿ô¡ÊTkVariable¥ª¥Ö¥¸¥§¥¯¥È¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤Þ¤¹¡Ë¤Ë¤½¤Î¥Ü¥¿¥ó¤Î¾õÂÖ¤ò¼¨¤¹ÃÍ¤òÀßÄê¤·¤Þ¤¹¡£ºÇ½é¤Î¥Ü¥¿¥ó¤Î¾õÂÖ¤ÏÂ¾¤Î£³¤Ä¤Î¥Ü¥¿¥ó¤Î¾õÂÖ¤Ë¤â°ÍÂ¸¤·¤ÆÊÑ²½¤·¤Þ¤¹¡£¤â¤·£³¤Ä¤Î¥Ü¥¿¥ó¤Î°ìÉô¤À¤±¤Ë¥Á¥§¥Ã¥¯¤¬ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ºÇ½é¤Î¥Ü¥¿¥ó¤Ï¥È¥é¥¤¥¹¥Æ¡¼¥È¡Ê£³¾õÂÖ¡Ë¥â¡¼¥É¤Ç¤ÎÉ½¼¨¤ò¹Ô¤¤¤Þ¤¹¡£¸½ºß¤ÎÊÑ¿ô¤ÎÃÍ¤ò¸«¤ë¤Ë¤Ï¡ÖÊÑ¿ô»²¾È¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£"</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'>-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(base_frame) {|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;'ÊÑ¿ô»²¾È', </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;'¥³¡¼¥É»²¾È', </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;'ÊÄ¤¸¤ë', </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(base_frame, :text=&gt;'°ÂÁ´À­¸¡ºº', :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(base_frame, 'text'=&gt;'¥ï¥¤¥Ñ¡¼ OK', 'variable'=&gt;wipers),</div><div class='del'>-  TkCheckButton.new(base_frame, 'text'=&gt;'¥Ö¥ì¡¼¥­ OK', 'variable'=&gt;brakes),</div><div class='del'>-  TkCheckButton.new(base_frame, 'text'=&gt;'±¿Å¾¼ê ÁÇÌÌ', '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-jp/clrpick.rb b/ext/tk/sample/demos-jp/clrpick.rb<br/>deleted file mode 100644<br/>index ce6b99ab94..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/clrpick.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/clrpick.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-#  Note: don't support ttk_wrapper. work with standard widgets only.</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'>-Tk::Label.new($clrpick_demo,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left',</div><div class='del'>-            'text'=&gt;"°Ê²¼¤Î¥Ü¥¿¥ó¤ò²¡¤·¤Æ¡¢¤³¤Î¥¦¥£¥ó¥É¥¦¾å¤Ë¤¢¤ë¥¦¥£¥¸¥§¥Ã¥È¤ÎÁ°·Ê¿§¤ÈÇØ·Ê¿§¤òÁªÂò¤·¤Æ²¼¤µ¤¤¡£").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'>-Tk::Frame.new($clrpick_demo) {|frame|</div><div class='del'>-  # TkButton.new(frame) {</div><div class='del'>-  Tk::Button.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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'>-  Tk::Button.new(frame) {</div><div class='del'>-    text '¥³¡¼¥É»²¾È'</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;'ÇØ·Ê¿§¤òÀßÄê ...') {|b|</div><div class='del'>-Tk::Button.new($clrpick_demo, 'text'=&gt;'ÇØ·Ê¿§¤òÀßÄê ...') {|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;'Á°·Ê¿§¤òÀßÄê ...') {|b|</div><div class='del'>-Tk::Button.new($clrpick_demo, 'text'=&gt;'Á°·Ê¿§¤òÀßÄê ...') {|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-jp/colors.rb b/ext/tk/sample/demos-jp/colors.rb<br/>deleted file mode 100644<br/>index 91817a947b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/colors.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/colors.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,155 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($colors_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤Ï¿§¤ÎÌ¾Á°¤¬Æþ¤Ã¤¿¥¹¥¯¥í¡¼¥ë¥Ð¡¼ÉÕ¤Î¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥ê¥¹¥È¤ò¥¹¥¯¥í¡¼¥ë¤µ¤»¤ë¤Î¤Ï¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤Ç¤â¤Ç¤­¤Þ¤¹¤·¡¢¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤ÎÃæ¤Ç¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó2(Ãæ¥Ü¥¿¥ó)¤ò²¡¤·¤¿¤Þ¤Þ¥É¥é¥Ã¥°¤·¤Æ¤â¤Ç¤­¤Þ¤¹¡£¤¢¤ë¿§¤ò¥Ü¥¿¥ó1(º¸¥Ü¥¿¥ó)¤Ç¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥¢¥×¥ê¥±¡¼¥·¥ç¥óÁ´ÂÎ¤¬¤½¤Î¿§¤Ë¤Ê¤ê¤Þ¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame, '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'>-colors_lbox.bind('Double-1', proc{</div><div class='del'>-                   begin</div><div class='del'>-                     TkPalette.setPalette TkSelection.get</div><div class='del'>-                   rescue =&gt; e</div><div class='del'>-                     p e</div><div class='del'>-                     Tk.tk_call_without_enc('destroy', '.___tk_set_palette')</div><div class='del'>-                   end</div><div class='del'>-                   })</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-jp/combo.rb b/ext/tk/sample/demos-jp/combo.rb<br/>deleted file mode 100644<br/>index da00d712ba..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/combo.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/combo.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,98 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# combo.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates several combobox widgets.</div><div class='del'>-#</div><div class='del'>-# based on "Id: combo.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($combo_demo) &amp;&amp; $combo_demo</div><div class='del'>-  $combo_demo.destroy </div><div class='del'>-  $combo_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$combo_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Combobox Demonstration")</div><div class='del'>-  iconname("combo")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($combo_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'5i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-°Ê²¼¤Ç¤Ï3¼ïÎà¤Î¥³¥ó¥Ü¥Ü¥Ã¥¯¥¹¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥\</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'>-Ìð°õ¥­¡¼¤ÇÂ¾¤Î¸õÊä¤òÁª¤ó¤ÇReturn¥­¡¼¤ò²¡¤»¤Ð¡¤ÃÍ¤òÁªÂò¤Ç¤­¤Þ¤¹¡¥\</div><div class='del'>-2ÈÖÌÜ¤Î¥³¥ó¥Ü¥Ü¥Ã¥¯¥¹¤ÏÆÃÄê¤ÎÃÍ¤Ë¸ÇÄê¤µ¤ì¤Æ¤ª¤ê¡¤°ìÀÚÊÑ¹¹¤Ç¤­¤Þ¤»¤ó¡¥\</div><div class='del'>-3ÈÖÌÜ¤Î¤â¤Î¤Ï¥ª¡¼¥¹¥È¥é¥ê¥¢¤ÎÅÔ»Ô¤Î¥É¥í¥Ã¥×¥À¥¦¥ó¥ê¥¹¥È¤«¤é\</div><div class='del'>-ÁªÂò¤¹¤ë¤³¤È¤À¤±¤¬²ÄÇ½¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## variables</div><div class='del'>-firstValue  = TkVariable.new</div><div class='del'>-secondValue = TkVariable.new</div><div class='del'>-ozCity      = TkVariable.new</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss buttons</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÑ¿ô»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           showVars(base_frame, </div><div class='del'>-                                    ['firstVariable', firstValue], </div><div class='del'>-                                    ['secondVariable', secondValue], </div><div class='del'>-                                    ['ozCity', ozCity])</div><div class='del'>-                         }), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'combo'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $combo_demo.destroy</div><div class='del'>-                           $combo_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-frame = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-australianCities = [</div><div class='del'>-  '¥­¥ã¥ó¥Ù¥é', '¥·¥É¥Ë¡¼', '¥á¥ë¥Ü¥ë¥ó', '¥Ñ¡¼¥¹', '¥¢¥Ç¥ì¡¼¥É', </div><div class='del'>-  '¥Ö¥ê¥¹¥Ù¡¼¥ó', '¥Û¥Ð¡¼¥È', '¥À¡¼¥¦¥£¥ó', '¥¢¥ê¥¹ ¥¹¥×¥ê¥ó¥°¥¹'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-secondValue.value = 'ÊÑ¹¹ÉÔ²Ä'</div><div class='del'>-ozCity.value = '¥·¥É¥Ë¡¼'</div><div class='del'>-</div><div class='del'>-Tk.pack(Ttk::Labelframe.new(frame, :text=&gt;'Fully Editable'){|f|</div><div class='del'>-          Ttk::Combobox.new(f, :textvariable=&gt;firstValue){|b|</div><div class='del'>-            b.bind('Return', '%W'){|w|</div><div class='del'>-              w.values &lt;&lt;= w.value unless w.values.include?(w.value)</div><div class='del'>-            }</div><div class='del'>-          }.pack(:pady=&gt;5, :padx=&gt;10)</div><div class='del'>-        }, </div><div class='del'>-</div><div class='del'>-        Ttk::LabelFrame.new(frame, :text=&gt;'Disabled'){|f|</div><div class='del'>-          Ttk::Combobox.new(f, :textvariable=&gt;secondValue, :state=&gt;:disabled) .</div><div class='del'>-            pack(:pady=&gt;5, :padx=&gt;10)</div><div class='del'>-        }, </div><div class='del'>-</div><div class='del'>-        Ttk::LabelFrame.new(frame, :text=&gt;'Defined List Only'){|f|</div><div class='del'>-          Ttk::Combobox.new(f, :textvariable=&gt;ozCity, :state=&gt;:readonly, </div><div class='del'>-                            :values=&gt;australianCities) .</div><div class='del'>-            pack(:pady=&gt;5, :padx=&gt;10)</div><div class='del'>-        }, </div><div class='del'>-</div><div class='del'>-        :side=&gt;:top, :pady=&gt;5, :padx=&gt;10)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/cscroll.rb b/ext/tk/sample/demos-jp/cscroll.rb<br/>deleted file mode 100644<br/>index 845952679a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/cscroll.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/cscroll.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,134 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($cscroll_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'4i', </div><div class='del'>-            'justify'=&gt;'left', 'text'=&gt;"¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤ä¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó2 ¤Ç¥¹¥¯¥í¡¼¥ë¤Ç¤­¤ë¥­¥ã¥ó¥Ð¥¹ widget ¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£»Í³Ñ¤Î¾å¤Ç¥Ü¥¿¥ó1 ¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¤½¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤¬É¸½à½ÐÎÏ¤Ë½ÐÎÏ¤µ¤ì¤Þ¤¹¡£"){</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame) {</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(base_frame, </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(base_frame, '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(base_frame, '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-jp/ctext.rb b/ext/tk/sample/demos-jp/ctext.rb<br/>deleted file mode 100644<br/>index 05ca732cfd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ctext.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ctext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,204 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($ctext_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'5i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥­¥ã¥ó¥Ð¥¹widget¤Î¥Æ¥­¥¹¥Èµ¡Ç½¤ò¥Ç¥â¤¹¤ë¤¿¤á¤Î¥Æ¥­¥¹¥ÈÊ¸»úÎó¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥Þ¥¦¥¹¤ò»Í³Ñ¤ÎÃæ¤Ë»ý¤Ã¤Æ¤¤¤­¡¢¥¯¥ê¥Ã¥¯¤¹¤ë¤È°ÌÃÖ¤®¤áÍÑ¤ÎÅÀ¤«¤é¤ÎÁêÂÐ°ÌÃÖ¤òÊÑ¤¨¤¿¤ê¡¢¹ÔÂ·¤¨¤òÊÑ¤¨¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿°Ê²¼¤Î¤è¤¦¤ÊÊÔ½¸¤Î¤¿¤á¤Î´ÊÃ±¤Ê¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-  1. ¥Þ¥¦¥¹¤ò»ý¤Ã¤Æ¤¤¤­¡¢¥¯¥ê¥Ã¥¯¤·¡¢ÆþÎÏ¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-  2. ¥Ü¥¿¥ó1¤ÇÁªÂò¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-  3. ¥Þ¥¦¥¹¤Î°ÌÃÖ¤Ë¥Ü¥¿¥ó2¤ÇÁªÂò¤·¤¿¥Æ¥­¥¹¥È¤ò¥³¥Ô¡¼¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-  4.¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¤ò¥³¥ó¥È¥í¡¼¥ë-H¤ÇÁÞÆþ¥«¡¼¥½¥ë¤ÎÄ¾Á°¤ÎÊ¸»ú¤òºï½ü¤·¤Þ¤¹¡£</div><div class='del'>-  5. Delete¥­¡¼¤ÏÁÞÆþ¥«¡¼¥½¥ë¤ÎÄ¾¸å¤ÎÊ¸»ú¤òºï½ü¤·¤Þ¤¹¡£"){</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame, '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'>-if $tk_version =~ /^4.*/</div><div class='del'>-  textFont = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*'</div><div class='del'>-else</div><div class='del'>-  textFont = 'Helvetica 24'</div><div class='del'>-end</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_param = {</div><div class='del'>-  'text'=&gt;"¤³¤ì¤Ï¥­¥ã¥ó¥Ð¥¹widget¤Î¥Æ¥­¥¹¥Èµ¡Ç½¤ò¥Ç¥â¤¹¤ë¤¿¤á¤ÎÊ¸»úÎó¤Ç¤¹¡£\n¾å¤Ç½Ò¤Ù¤¿¤è¤¦¤ÊÊÔ½¸¤ò²ÄÇ½¤È¤¹¤ë¤¿¤á¤Î¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤ò»Ü¤·¤Æ¤¤¤Þ¤¹¡£",</div><div class='del'>-  'width'=&gt;440, 'anchor'=&gt;'n', 'justify'=&gt;'left'</div><div class='del'>-}</div><div class='del'>-if $tk_version =~ /^4.*/</div><div class='del'>-  ctag_text_param['font'] = '-*-Helvetica-Medium-R-Normal--*-240-*-*-*-*-*-*'</div><div class='del'>-  ctag_text_param['kanjifont'] = '-*-r-*--24-*-jisx0208.1983-0'</div><div class='del'>-else</div><div class='del'>-  ctag_text_param['font'] = 'Helvetica 24'</div><div class='del'>-end</div><div class='del'>-$ctag_text = TkcTag.new($ctext_canvas)</div><div class='del'>-$ctag_text.withtag(TkcText.new($ctext_canvas, 250, 200, ctag_text_param))</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'>-if $tk_version =~ /^4.*/</div><div class='del'>-  TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Text Position', </div><div class='del'>-              'font'=&gt;'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', </div><div class='del'>-              'anchor'=&gt;'s', 'fill'=&gt;'brown')</div><div class='del'>-else</div><div class='del'>-  TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Text Position', </div><div class='del'>-              'font'=&gt;'Times 24', 'anchor'=&gt;'s', 'fill'=&gt;'brown')</div><div class='del'>-end</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'>-if $tk_version =~ /^4.*/</div><div class='del'>-  TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Justification', </div><div class='del'>-              'font'=&gt;'-*-times-medium-r-normal--*-240-*-*-*-*-*-*', </div><div class='del'>-              'anchor'=&gt;'s', 'fill'=&gt;'brown')</div><div class='del'>-else</div><div class='del'>-  TkcText.new($ctext_canvas, x+45, y-5, 'text'=&gt;'Justification', </div><div class='del'>-              'font'=&gt;'Times 24', 'anchor'=&gt;'s', 'fill'=&gt;'brown')</div><div class='del'>-end</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-jp/dialog1.rb b/ext/tk/sample/demos-jp/dialog1.rb<br/>deleted file mode 100644<br/>index 07e50306ab..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/dialog1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/dialog1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-    '¥â¡¼¥À¥ë¥À¥¤¥¢¥í¥°¥Ü¥Ã¥¯¥¹¤Ç¤¹¡£Tk ¤Î "grab" ¥³¥Þ¥ó¥É¤ò»ÈÍÑ¤·¤Æ¥À¥¤¥¢¥í¥°¥Ü¥Ã¥¯¥¹¤Ç¡Ö¥í¡¼¥«¥ë¥°¥é¥Ö¡×¤·¤Æ¤¤¤Þ¤¹¡£²¼¤Î¤¤¤º¤ì¤«¤Î¥Ü¥¿¥ó¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤³¤Î¥À¥¤¥¢¥í¥°¤ËÅú¤¨¤ë¤Þ¤Ç¡¢¤³¤Î¥°¥é¥Ö¤Ë¤è¤Ã¤Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÂ¾¤Î¥¦¥£¥ó¥É¥¦¤Ç¤Ï¡¢¥Ý¥¤¥ó¥¿´Ø·¸¤Î¥¤¥Ù¥ó¥È¤ò¼õ¤±¼è¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£'</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'>-#    "Î»²ò ¥­¥ã¥ó¥»¥ë ¥³¡¼¥É»²¾È"</div><div class='del'>-    ["Î»²ò", "¥­¥ã¥ó¥»¥ë", "¥³¡¼¥É»²¾È"]</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 "¤¢¤Ê¤¿¤Ï¡ÖÎ»²ò¡×¤ò²¡¤·¤Þ¤·¤¿¤Í¡£\n"</div><div class='del'>-when 1</div><div class='del'>-  print "¤¢¤Ê¤¿¤Ï¡Ö¥­¥ã¥ó¥»¥ë¡×¤ò²¡¤·¤Þ¤·¤¿¤Í¡£\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-jp/dialog2.rb b/ext/tk/sample/demos-jp/dialog2.rb<br/>deleted file mode 100644<br/>index f747f8d6a8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/dialog2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/dialog2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,43 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-    '¤³¤Î¥À¥¤¥¢¥í¥°¥Ü¥Ã¥¯¥¹¤Ï¥°¥í¡¼¥Ð¥ë¥°¥é¥Ö¤ò»ÈÍÑ¤·¤Æ¤¤¤Þ¤¹¡£²¼¤Î¥Ü¥¿¥ó¤ò¼Â¹Ô¤¹¤ë¤Þ¤Ç¡¢¥Ç¥£¥¹¥×¥ì¥¤¾å¤Î¤¤¤«¤Ê¤ë¤â¤Î¤È¤âÂÐÏÃ¤Ç¤­¤Þ¤»¤ó¡£¥°¥í¡¼¥Ð¥ë¥°¥é¥Ö¤ò»ÈÍÑ¤¹¤ë¤³¤È¤Ï¡¢¤Þ¤ºÎÉ¤¤¹Í¤¨¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤É¤¦¤·¤Æ¤âÉ¬Í×¤Ë¤Ê¤ë¤Þ¤Ç»È¤ª¤¦¤È»×¤ï¤Ê¤¤¤Ç²¼¤µ¤¤¡£'</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'>-#    "Î»²ò ¥­¥ã¥ó¥»¥ë ¥³¡¼¥É»²¾È"</div><div class='del'>-    ["Î»²ò", "¥­¥ã¥ó¥»¥ë", "¥³¡¼¥É»²¾È"]</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 "¤¢¤Ê¤¿¤Ï¡ÖÎ»²ò¡×¤ò²¡¤·¤Þ¤·¤¿¤Í¡£\n"</div><div class='del'>-when 1</div><div class='del'>-  print "¤¢¤Ê¤¿¤Ï¡Ö¥­¥ã¥ó¥»¥ë¡×¤ò²¡¤·¤Þ¤·¤¿¤Í¡£\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-jp/doc.org/README b/ext/tk/sample/demos-jp/doc.org/README<br/>deleted file mode 100644<br/>index 90677d3316..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/doc.org/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/doc.org/README.JP b/ext/tk/sample/demos-jp/doc.org/README.JP<br/>deleted file mode 100644<br/>index 42b4929378..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/doc.org/README.JP?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/doc.org/README.tk80 b/ext/tk/sample/demos-jp/doc.org/README.tk80<br/>deleted file mode 100644<br/>index c71f977d74..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/doc.org/README.tk80?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/doc.org/license.terms b/ext/tk/sample/demos-jp/doc.org/license.terms<br/>deleted file mode 100644<br/>index 03ca6fcb31..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/doc.org/license.terms?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/doc.org/license.terms.tk80 b/ext/tk/sample/demos-jp/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-jp/doc.org/license.terms.tk80?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/entry1.rb b/ext/tk/sample/demos-jp/entry1.rb<br/>deleted file mode 100644<br/>index 2be29c18d3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/entry1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/entry1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,60 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($entry1_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "3¼ïÎà¤Î°Û¤Ê¤ë¥¨¥ó¥È¥ê¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Ê¸»ú¤òÆþÎÏ¤¹¤ë¤Ë¤Ï¥Ý¥¤¥ó¥¿¤ò»ý¤Ã¤Æ¹Ô¤­¡¢¥¯¥ê¥Ã¥¯¤·¤Æ¤«¤é¥¿¥¤¥×¤·¤Æ¤¯¤À¤µ¤¤¡£É¸½àÅª¤ÊMotif¤ÎÊÔ½¸µ¡Ç½¤¬¡¢Emacs¤Î¥­¡¼¥Ð¥¤¥ó¥É¤È¤È¤â¤Ë¡¢¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Îã¤¨¤Ð¡¢¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¤È¥³¥ó¥È¥í¡¼¥ë-H¤Ï¥«¡¼¥½¥ë¤Îº¸¤ÎÊ¸»ú¤òºï½ü¤·¡¢¥Ç¥ê¡¼¥È¥­¡¼¤È¥³¥ó¥È¥í¡¼¥ë-D¤Ï¥«¡¼¥½¥ë¤Î±¦Â¦¤ÎÊ¸»ú¤òºï½ü¤·¤Þ¤¹¡£Ä¹²á¤®¤Æ¥¦¥£¥ó¥É¥¦¤ËÆþ¤êÀÚ¤é¤Ê¤¤¤â¤Î¤Ï¡¢¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó2¤ò²¡¤·¤¿¤Þ¤Þ¥É¥é¥Ã¥°¤¹¤ë¤³¤È¤Ç¥¹¥¯¥í¡¼¥ë¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ÆüËÜ¸ì¤òÆþÎÏ¤¹¤ë¤Î¤Ï¥³¥ó¥È¥í¡¼¥ë-¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Ç¤¹¡£kinput2¤¬Æ°¤¤¤Æ¤¤¤ì¤ÐÆþÎÏ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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'>-# entry À¸À®</div><div class='del'>-e1 = TkEntry.new(base_frame, 'relief'=&gt;'sunken')</div><div class='del'>-e2 = TkEntry.new(base_frame, 'relief'=&gt;'sunken')</div><div class='del'>-e3 = TkEntry.new(base_frame, '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, '½é´üÃÍ')</div><div class='del'>-e2.insert('end', "¤³¤Î¥¨¥ó¥È¥ê¤Ë¤ÏÄ¹¤¤Ê¸»úÎó¤¬Æþ¤Ã¤Æ¤¤¤Æ¡¢")</div><div class='del'>-e2.insert('end', "Ä¹¤¹¤®¤Æ¥¦¥£¥ó¥É¥¦¤Ë¤ÏÆþ¤êÀÚ¤é¤Ê¤¤¤Î¤Ç¡¢")</div><div class='del'>-e2.insert('end', "¼ÂºÝ¤Î½ê½ª¤ê¤Þ¤Ç¸«¤ë¤Ë¤Ï¥¹¥¯¥í¡¼¥ë¤µ¤»¤Ê¤±¤ì¤Ð")</div><div class='del'>-e2.insert('end', "¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¡£")</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/entry2.rb b/ext/tk/sample/demos-jp/entry2.rb<br/>deleted file mode 100644<br/>index 2675b5d324..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/entry2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/entry2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,91 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($entry2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "3¼ïÎà¤Î°Û¤Ê¤ë¥¨¥ó¥È¥ê¤¬³Æ¡¹¥¹¥¯¥í¡¼¥ë¥Ð¡¼ÉÕ¤ÇÉ½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Ê¸»ú¤òÆþÎÏ¤¹¤ë¤Ë¤Ï¥Ý¥¤¥ó¥¿¤ò»ý¤Ã¤Æ¹Ô¤­¡¢¥¯¥ê¥Ã¥¯¤·¤Æ¤«¤é¥¿¥¤¥×¤·¤Æ¤¯¤À¤µ¤¤¡£É¸½àÅª¤ÊMotif¤ÎÊÔ½¸µ¡Ç½¤¬¡¢Emacs¤Î¥­¡¼¥Ð¥¤¥ó¥É¤È¤È¤â¤Ë¡¢¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Îã¤¨¤Ð¡¢¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¤È¥³¥ó¥È¥í¡¼¥ë-H¤Ï¥«¡¼¥½¥ë¤Îº¸¤ÎÊ¸»ú¤òºï½ü¤·¡¢¥Ç¥ê¡¼¥È¥­¡¼¤È¥³¥ó¥È¥í¡¼¥ë-D¤Ï¥«¡¼¥½¥ë¤Î±¦Â¦¤ÎÊ¸»ú¤òºï½ü¤·¤Þ¤¹¡£Ä¹²á¤®¤Æ¥¦¥£¥ó¥É¥¦¤ËÆþ¤êÀÚ¤é¤Ê¤¤¤â¤Î¤Ï¡¢¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó2¤ò²¡¤·¤¿¤Þ¤Þ¥É¥é¥Ã¥°¤¹¤ë¤³¤È¤Ç¥¹¥¯¥í¡¼¥ë¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ÆüËÜ¸ì¤òÆþÎÏ¤¹¤ë¤Î¤Ï¥³¥ó¥È¥í¡¼¥ë-¥Ð¥Ã¥¯¥¹¥é¥Ã¥·¥å¤Ç¤¹¡£kinput2¤¬Æ°¤¤¤Æ¤¤¤ì¤ÐÆþÎÏ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame, '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, '½é´üÃÍ')</div><div class='del'>-  e2.insert('end', "¤³¤Î¥¨¥ó¥È¥ê¤Ë¤ÏÄ¹¤¤Ê¸»úÎó¤¬Æþ¤Ã¤Æ¤¤¤Æ¡¢")</div><div class='del'>-  e2.insert('end', "Ä¹¤¹¤®¤Æ¥¦¥£¥ó¥É¥¦¤Ë¤ÏÆþ¤êÀÚ¤é¤Ê¤¤¤Î¤Ç¡¢")</div><div class='del'>-  e2.insert('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-jp/entry3.rb b/ext/tk/sample/demos-jp/entry3.rb<br/>deleted file mode 100644<br/>index 6b9cd4cf37..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/entry3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/entry3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,225 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($entry3_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </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'>-°Ê²¼¤Ë¤Ï£´¼ïÎà¤Î¥¨¥ó¥È¥ê¥Ü¥Ã¥¯¥¹¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥³Æ¥¨¥ó¥È¥ê¥Ü¥Ã¥¯¥¹¤Ï¡¤\</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'>-¥Ù¥ë¤òÌÄ¤é¤·¤ÆÃÎ¤é¤»¤Þ¤¹¡¥\</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'>-EOL</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame){|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;'ÊÄ¤¸¤ë', :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;'¥³¡¼¥É»²¾È', :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'>-  if fg &amp;&amp; !fg.empty? &amp;&amp; bg &amp;&amp; !bg.empty?</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'>-  else</div><div class='del'>-    # TkTimer.new(150, 3){Tk.bell}.start</div><div class='del'>-    Tk.bell</div><div class='del'>-    TkTimer.new(200, count, </div><div class='del'>-                proc{widget.configure(:foreground=&gt;'white', </div><div class='del'>-                                      :background=&gt;'black')}, </div><div class='del'>-                proc{widget.configure(:foreground=&gt;'black', </div><div class='del'>-                                      :background=&gt;'white')}</div><div class='del'>-                ).at_end{begin</div><div class='del'>-                           widget.configure(:foreground=&gt;fg, </div><div class='del'>-                                            :background=&gt;bg)</div><div class='del'>-                         rescue</div><div class='del'>-                           # ignore</div><div class='del'>-                         end}.start</div><div class='del'>-  end</div><div class='del'>-  widget.focus(true)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-l1 = TkLabelFrame.new(base_frame, :text=&gt;"À°¿ô¥¨¥ó¥È¥ê")</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'>-  fg = e.foreground</div><div class='del'>-  bg = e.background</div><div class='del'>-  invalidcommand [proc{|w| focusAndFlash(w, fg, 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(base_frame, :text=&gt;"Ä¹¤µÀ©ÌóÉÕ¤­¥¨¥ó¥È¥ê")</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'>-    # Tk.update(true)  # &lt;- 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'>-    return true</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(base_frame, :text=&gt;"ÊÆ¹ñÅÅÏÃÈÖ¹æ¥¨¥ó¥È¥ê")</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(base_frame, :text=&gt;"¥Ñ¥¹¥ï¡¼¥É¥¨¥ó¥È¥ê")</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(base_frame){|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-jp/filebox.rb b/ext/tk/sample/demos-jp/filebox.rb<br/>deleted file mode 100644<br/>index b8846d08a0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/filebox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/filebox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</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; $entry2_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'>-base_frame = TkFrame.new($filebox_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left',</div><div class='del'>-            'text'=&gt;"¥¨¥ó¥È¥ê¤Ë¥Õ¥¡¥¤¥ëÌ¾¤òÄ¾ÀÜÆþÎÏ¤¹¤ë¤«¡¢\"Browse\" ¥Ü¥¿¥ó¤ò²¡¤·¤Æ¥Õ¥¡¥¤¥ëÁªÂò¥À¥¤¥¢¥í¥°¤«¤é¥Õ¥¡¥¤¥ëÌ¾¤òÁª¤ó¤Ç²¼¤µ¤¤¡£").pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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'>-['³«¤¯', 'ÊÝÂ¸'].each{|type|</div><div class='del'>-  TkFrame.new(base_frame) {|f|</div><div class='del'>-    TkLabel.new(f, 'text'=&gt;"¥Õ¥¡¥¤¥ë¤ò#{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 base_frame,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(base_frame, </div><div class='del'>-                    'text'=&gt;'Motif¥¹¥¿¥¤¥ë¤Î¥À¥¤¥¢¥í¥°¤òÍÑ¤¤¤ë', </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 == '³«¤¯'</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'>-    Tk.update_idletasks # need this for Tk::Tile::Entry</div><div class='del'>-                        # (to find right position of 'xview').</div><div class='del'>-    ent.xview(ent.index('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-jp/floor.rb b/ext/tk/sample/demos-jp/floor.rb<br/>deleted file mode 100644<br/>index a2ec2e9969..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/floor.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/floor.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1721 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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;"Éô²°ÈÖ¹æ: ")</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'>-base_frame = TkFrame.new($floor_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'8i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥Ç¥£¥¸¥¿¥ë¥¨¥¯¥¤¥Ã¥×¥á¥ó¥È¼Ò¤Î¥¦¥§¥¹¥¿¥ó¥ê¥µ¡¼¥Á¥é¥Ü¥é¥È¥ê (DECWRL) ¤Î´Ö¼è¤ê¤¬½ñ¤«¤ì¤¿¥­¥ã¥ó¥Ð¥¹ widget ¤¬Æþ¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï 3³¬·ú¤Æ¤Ç¡¢¾ï¤Ë¤½¤Î¤¦¤Á¤Î1³¬Ê¬¤¬ÁªÂò¡¢¤Ä¤Þ¤ê¤½¤Î´Ö¼è¤ê¤¬É½¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤¢¤ë³¬¤òÁªÂò¤¹¤ë¤Ë¤Ï¡¢¤½¤Î¾å¤Ç¥Þ¥¦¥¹¤Îº¸¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£¥Þ¥¦¥¹¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤ë³¬¤Î¾å¤òÆ°¤¯¤È¡¢¤½¤Î²¼¤Ë¤¢¤ëÉô²°¤Î¿§¤¬ÊÑ¤ï¤ê¡¢Éô²°ÈÖ¹æ¤¬¡ÖÉô²°ÈÖ¹æ:¡×¥¨¥ó¥È¥ê¤ËÉ½¼¨¤µ¤ì¤Þ¤¹¡£¤Þ¤¿¡¢¥¨¥ó¥È¥ê¤ËÉô²°ÈÖ¹æ¤ò½ñ¤¯¤È¤½¤ÎÉô²°¤Î¿§¤¬ÊÑ¤ï¤ê¤Þ¤¹¡£"){</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame,'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(base_frame, '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(base_frame, '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(base_frame) {|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-jp/floor2.rb b/ext/tk/sample/demos-jp/floor2.rb<br/>deleted file mode 100644<br/>index d4381c5543..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/floor2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/floor2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1719 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# floorDisplay widget demo 2 (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;"Éô²°ÈÖ¹æ: ")</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'>-base_frame = TkFrame.new($floor2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'8i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥Ç¥£¥¸¥¿¥ë¥¨¥¯¥¤¥Ã¥×¥á¥ó¥È¼Ò¤Î¥¦¥§¥¹¥¿¥ó¥ê¥µ¡¼¥Á¥é¥Ü¥é¥È¥ê (DECWRL) ¤Î´Ö¼è¤ê¤¬½ñ¤«¤ì¤¿¥­¥ã¥ó¥Ð¥¹ widget ¤¬Æþ¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï 3³¬·ú¤Æ¤Ç¡¢¾ï¤Ë¤½¤Î¤¦¤Á¤Î1³¬Ê¬¤¬ÁªÂò¡¢¤Ä¤Þ¤ê¤½¤Î´Ö¼è¤ê¤¬É½¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤¢¤ë³¬¤òÁªÂò¤¹¤ë¤Ë¤Ï¡¢¤½¤Î¾å¤Ç¥Þ¥¦¥¹¤Îº¸¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£¥Þ¥¦¥¹¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤ë³¬¤Î¾å¤òÆ°¤¯¤È¡¢¤½¤Î²¼¤Ë¤¢¤ëÉô²°¤Î¿§¤¬ÊÑ¤ï¤ê¡¢Éô²°ÈÖ¹æ¤¬¡ÖÉô²°ÈÖ¹æ:¡×¥¨¥ó¥È¥ê¤ËÉ½¼¨¤µ¤ì¤Þ¤¹¡£¤Þ¤¿¡¢¥¨¥ó¥È¥ê¤ËÉô²°ÈÖ¹æ¤ò½ñ¤¯¤È¤½¤ÎÉô²°¤Î¿§¤¬ÊÑ¤ï¤ê¤Þ¤¹¡£"){</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame,'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(base_frame, '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(base_frame, '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(base_frame) {|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'>-# 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-jp/form.rb b/ext/tk/sample/demos-jp/form.rb<br/>deleted file mode 100644<br/>index 4de7056764..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/form.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/form.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,66 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($form_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "¤³¤Î¥¦¥£¥ó¥É¥¦¤Ï´ÊÃ±¤Ê¥Õ¥©¡¼¥àÆþÎÏÍÑ¤Ë¤Ê¤Ã¤Æ¤¤¤Æ¡¢¤µ¤Þ¤¶¤Þ¤Ê¥¨¥ó¥È¥ê¤ËÆþÎÏ¤¬¤Ç¤­¤Þ¤¹¡£¥¿¥Ö¤Ç¥¨¥ó¥È¥ê¤ÎÀÚÂØ¤¨¤¬¤Ç¤­¤Þ¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame, '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('Ì¾Á°:')</div><div class='del'>-form_data[2]['label'].text('½»½ê:')</div><div class='del'>-form_data[5]['label'].text('ÅÅÏÃ:')</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-jp/goldberg.rb b/ext/tk/sample/demos-jp/goldberg.rb<br/>deleted file mode 100644<br/>index a81c7ec70c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/goldberg.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/goldberg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2011 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($goldberg_demo).pack(:fill=&gt;:both, :expand=&gt;true)</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 "¤³¤ì¤Ï¡¢¤¢¤Ê¤¿¤¬¼«Ê¬¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó¤ò¤¤¤«¤ËÆþ¤êÁÈ¤ó¤À¤â¤Î¤Ë¤Ç¤­¤ë¤«¤ò¼¨¤¹¤È¤¤¤¦¤À¤±¤Î¤¿¤á¤Î¥Ç¥â¤Ç¤¹¡£¥Ü¡¼¥ë¤ò¥¯¥ê¥Ã¥¯¤¹¤ì¤ÐÊª¤¬Æ°¤­»Ï¤á¤Þ¤¹¡ª\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 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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['message'] = TkVariable.new("\\n ¤è¤¦¤³¤½¡ª\\nRuby/Tk\\n¤Î\\nÀ¤³¦¤Ø")</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'>-    msg = Tk::Label.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 "¤³¤ì¤Ï¡¢¤¢¤Ê¤¿¤¬¼«Ê¬¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó¤ò¤¤¤«¤ËÆþ¤êÁÈ¤ó¤À¤â¤Î¤Ë¤Ç¤­¤ë¤«¤ò¼¨¤¹¤È¤¤¤¦¤À¤±¤Î¤¿¤á¤Î¥Ç¥â¤Ç¤¹¡£¥Ü¡¼¥ë¤ò¥¯¥ê¥Ã¥¯¤¹¤ì¤ÐÊª¤¬Æ°¤­»Ï¤á¤Þ¤¹¡ª\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'>-    Tk::Button.new(frame, :bg=&gt;@C['bg'], :activebackground=&gt;@C['bg']) {</div><div class='del'>-      text 'ÊÄ¤¸¤ë'</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'>-    Tk::Button.new(frame, :bg=&gt;@C['bg'], :activebackground=&gt;@C['bg']) {</div><div class='del'>-      text '¥³¡¼¥É»²¾È'</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'>-    @show = Tk::Button.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 = Tk::Button.new(@parent, :text=&gt;'Start', :bd=&gt;6, </div><div class='del'>-                          :command=&gt;proc{do_button(0)})</div><div class='del'>-    if font = @start['font']</div><div class='del'>-      @start.font(font.weight('bold'))</div><div class='del'>-    end</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, </div><div class='del'>-                # [579, 119], :text=&gt;'START HERE!', </div><div class='del'>-                [558, 119], :text=&gt;'¤³¤³¤«¤é¥¹¥¿¡¼¥È¡ª', </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, 735, :anchor=&gt;:s, :tag=&gt;'I26', </div><div class='del'>-                  #:text=&gt;'click to continue', </div><div class='del'>-                  :text=&gt;'¥¯¥ê¥Ã¥¯¤Ç¥ê¥»¥Ã¥È¤·¤Þ¤¹', </div><div class='del'>-                  :font=&gt;['Times Roman', 20, :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(base_frame)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/hello b/ext/tk/sample/demos-jp/hello<br/>deleted file mode 100644<br/>index 08f154d499..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/hello?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/hello</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-TkButton.new(nil,</div><div class='del'>-	'text'=&gt;"¤³¤ó¤Ë¤Á¤Ï¡¢À¤³¦",</div><div class='del'>-	'command'=&gt;proc{print "¤³¤ó¤Ë¤Á¤Ï¡¢À¤³¦\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-jp/hscale.rb b/ext/tk/sample/demos-jp/hscale.rb<br/>deleted file mode 100644<br/>index 5615aa50bd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/hscale.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/hscale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,78 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-require "tkcanvas"</div><div class='del'>-</div><div class='del'>-if defined?($hscale_demo) &amp;&amp; $hscale_deom</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'>-base_frame = TkFrame.new($hscale_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '3.5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤ÏÌð°õ¤¬1¤Ä¤È¿åÊ¿¤Ê¥¹¥±¡¼¥ë¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\</div><div class='del'>-¥¹¥±¡¼¥ë¾å¤Ç¥Þ¥¦¥¹¥Ü¥¿¥ó1¤ò¥¯¥ê¥Ã¥¯¡¢¤Þ¤¿¤Ï¥É¥é¥Ã¥°¤¹¤ë¤È\</div><div class='del'>-Ìð°õ¤ÎÄ¹¤µ¤òÊÑ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£"</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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'>-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='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|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='head'>diff --git a/ext/tk/sample/demos-jp/icon.rb b/ext/tk/sample/demos-jp/icon.rb<br/>deleted file mode 100644<br/>index a2ca6651dc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/icon.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/icon.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,103 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($icon_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥é¥¸¥ª¥Ü¥¿¥ó¤È¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¾å¤Ë¥Ó¥Ã¥È¥Þ¥Ã¥×¤ä²èÁü¤òÉ½¼¨¤¹¤ë 3 ¤Ä¤ÎÊýË¡¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£º¸¤Ë¤¢¤ë¤Î¤Ï2¤Ä¤Î¥é¥¸¥ª¥Ü¥¿¥ó¤Ç¡¢¤½¤ì¤¾¤ì¤¬¡¢¥Ó¥Ã¥È¥Þ¥Ã¥×¤ÈÁªÂò¤ò¼¨¤¹¥¤¥ó¥¸¥±¡¼¥¿¤Ç¤Ç¤­¤Æ¤¤¤Þ¤¹¡£Ãæ±û¤Ë¤¢¤ë¤Î¤Ï¡¢ÁªÂòºÑ¤ß¤«¤É¤¦¤«¤Ë¤è¤Ã¤Æ°Û¤Ê¤ë²èÁü¤òÉ½¼¨¤¹¤ë¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤Ç¤¹¡£±¦Â¦¤Ë¤¢¤ë¤Î¤ÏÁªÂòºÑ¤ß¤«¤É¤¦¤«¤Ë¤è¤Ã¤ÆÇØ·Ê¿§¤¬ÊÑ¤ï¤ë¥Ó¥Ã¥È¥Þ¥Ã¥×¤òÉ½¼¨¤¹¤ë¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤Ç¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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'>-# ÊÑ¿ôÀ¸À®</div><div class='del'>-letters = TkVariable.new</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame, 'borderwidth'=&gt;10){|w|</div><div class='del'>-  TkFrame.new(w) {|f|</div><div class='del'>-    # TkRadioButton.new(f){</div><div class='del'>-    Tk::RadioButton.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'>-    Tk::RadioButton.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'>-  Tk::CheckButton.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'>-  Tk::CheckButton.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-jp/image1.rb b/ext/tk/sample/demos-jp/image1.rb<br/>deleted file mode 100644<br/>index d9435cc1a2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/image1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/image1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,64 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($image1_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "¤³¤Î¥Ç¥â¤Ç¤Ï2¤Ä¤Î¥é¥Ù¥ë¾å¤Ë²èÁü¤ò¤½¤ì¤¾¤ìÉ½¼¨¤·¤Æ¤¤¤Þ¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame, 'image'=&gt;image1a, 'bd'=&gt;1, 'relief'=&gt;'sunken'),</div><div class='del'>-#  TkLabel.new(base_frame, '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'>-[ Tk::Label.new(base_frame, 'image'=&gt;image1a, 'bd'=&gt;1, 'relief'=&gt;'sunken'),</div><div class='del'>-  Tk::Label.new(base_frame, '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-jp/image2.rb b/ext/tk/sample/demos-jp/image2.rb<br/>deleted file mode 100644<br/>index 1bb2c9e9c3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/image2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/image2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,106 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($image2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "¤³¤Î¥Ç¥â¤Ç¤ÏTk¤Î photo 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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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'>-# ÊÑ¿ôÀ¸À®</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(base_frame, 'text'=&gt;'¥Ç¥£¥ì¥¯¥È¥ê:')\</div><div class='del'>-.pack('side'=&gt;'top', 'anchor'=&gt;'w')</div><div class='del'>-</div><div class='del'>-image2_e = TkEntry.new(base_frame) {</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(base_frame, '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(base_frame, 'text'=&gt;'¥Õ¥¡¥¤¥ë:')\</div><div class='del'>-.pack('side'=&gt;'top', 'anchor'=&gt;'w')</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame){|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(base_frame, 'height'=&gt;'3m', 'width'=&gt;20),</div><div class='del'>-  TkLabel.new(base_frame, 'text'=&gt;'²èÁü:'),</div><div class='del'>-  # TkLabel.new(base_frame, 'image'=&gt;$image2a)</div><div class='del'>-  Tk::Label.new(base_frame, '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-jp/image3.rb b/ext/tk/sample/demos-jp/image3.rb<br/>deleted file mode 100644<br/>index 12b8aafd8e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/image3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/image3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,127 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($image3_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-def loadDir3(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'>-# selectAndLoadDir3 --</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 selectAndLoadDir3(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'>-    loadDir3(lbox)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def loadImage3(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(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "¤³¤Î¥Ç¥â¤Ç¤ÏTk¤Î photo 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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-image3_df = TkLabelFrame.new(base_frame, :text=&gt;'¥Ç¥£¥ì¥¯¥È¥ê:')</div><div class='del'>-</div><div class='del'>-image3_ff = TkLabelFrame.new(base_frame, :text=&gt;'¥Õ¥¡¥¤¥ë:', </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| loadImage3(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{loadDir3(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;"¥Ç¥£¥ì¥¯¥È¥êÁªÂò", </div><div class='del'>-             :command=&gt;proc{selectAndLoadDir3(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(base_frame, :text=&gt;'¥¤¥á¡¼¥¸:') {|f|</div><div class='del'>-  # TkLabel.new(f, :image=&gt;$image3a).pack(:padx=&gt;'2m', :pady=&gt;'2m')</div><div class='del'>-  Tk::Label.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-jp/items.rb b/ext/tk/sample/demos-jp/items.rb<br/>deleted file mode 100644<br/>index 64ceeff3ec..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/items.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/items.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,379 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($items_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥­¥ã¥ó¥Ð¥¹ widget ¤¬Æþ¤Ã¤Æ¤ª¤ê¡¢¤½¤ÎÃæ¤Ë¤Ï¥­¥ã¥ó¥Ð¥¹ widget ¤¬¥µ¥Ý¡¼¥È¤¹¤ëÍÍ¡¹¤Ê¥¿¥¤¥×¤Î¥¢¥¤¥Æ¥à¤ÎÎã¤¬Æþ¤Ã¤Æ¤¤¤Þ¤¹¡£¼¡¤Î¤è¤¦¤ÊÁàºî¤¬¤Ç¤­¤Þ¤¹¡£\n  ¥Ü¥¿¥ó-1 ¥É¥é¥Ã¥°:\t¥¢¥¤¥Æ¥à¤òÆ°¤«¤¹¡£\n  ¥Ü¥¿¥ó-2 ¥É¥é¥Ã¥°:\t¸«¤¨¤Æ¤¤¤ëÉôÊ¬¤ò¤º¤é¤¹¡£\n  ¥Ü¥¿¥ó-3 ¥É¥é¥Ã¥°:\tÎÎ°è¤ò°Ï¤¦¡£\n  ¥³¥ó¥È¥í¡¼¥ë-F:\tÎÎ°è¤Î²¼¤Î¥¢¥¤¥Æ¥à¤òÉ½¼¨¤¹¤ë¡£"</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame) {|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'>-if $tk_version =~ /^4.*/</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'>-else</div><div class='del'>-  font1 = 'Helvetica 12'</div><div class='del'>-  font2 = 'Helvetica 24 bold'</div><div class='del'>-end</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;'¥é¥¤¥ó', '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;'¶ÊÀþ (³ê¤é¤«¤Ë¤Ä¤Ê¤¤¤ÀÄ¾Àþ)', '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;'Â¿³Ñ·Á', '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;'¶ë·Á', '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;'ÂÊ±ß', '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;'¥Æ¥­¥¹¥È', '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;'Ã»¤¤¥Æ¥­¥¹¥È¡£¥ï¡¼¥É¥é¥Ã¥×¡¢º¸Â·¤¨¡¢¥¢¥ó¥«¡¼¤ÏËÌ(¾å)¡£¢¢¤Ï³Æ¥Æ¥­¥¹¥È¤Î¥¢¥ó¥«¡¼¥Ý¥¤¥ó¥È¤ò¼¨¤¹¡£', '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;"¤¤¤¯¤Ä¤«¤Î¹Ô¡£\n¤½¤ì¤¾¤ìÆÈÎ©¤Ë\n¹ÔÂ·¤¨¡£\nÁ´¤Æº¸Ã¼¤¬¥¢¥ó¥«¡¼¤µ¤ì¤Æ¤¤¤ë¡£", '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;'¸Ì', '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;'¥Ó¥Ã¥È¥Þ¥Ã¥×', '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;'¥¦¥£¥ó¥É¥¦', 'anchor'=&gt;'n')</div><div class='del'>-TkButton.new(cvs) {|b|</div><div class='del'>-  text '²¡¤·¤Æ¤Í'</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', 'ÊÔ½¸¤·¤Æ¤Í'</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;'¥Ü¥¿¥ó:', 'anchor'=&gt;'sw')</div><div class='del'>-TkcText.new(cvs, '21c', '20.9c', 'text'=&gt;'¥¨¥ó¥È¥ê:', 'anchor'=&gt;'sw')</div><div class='del'>-TkcText.new(cvs, '28.5c', '17.4c', 'text'=&gt;'¥¹¥±¡¼¥ë:', '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;'¤¤¤Æ¤Æ!!', '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-jp/ixset b/ext/tk/sample/demos-jp/ixset<br/>deleted file mode 100644<br/>index 46c2378073..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ixset?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/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-jp/ixset2 b/ext/tk/sample/demos-jp/ixset2<br/>deleted file mode 100644<br/>index 5b816e40b1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ixset2?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ixset2</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,369 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# -*- coding: euc-jp -*-</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;'Î»²ò'),</div><div class='del'>-      @btn_APPLY = TkButton.new(btn_frame, 'command'=&gt;proc{win.writesettings}, </div><div class='del'>-				'default'=&gt;'normal', 'text'=&gt;'Å¬ÍÑ', </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;'¼è¾Ã', </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;'Ãæ»ß')</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;'¥Ù¥ëÀßÄê', </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;"²»ÎÌ (%)")</div><div class='del'>-</div><div class='del'>-    f = TkFrame.new(bell)</div><div class='del'>-    @w_bellpit = LabelEntry.new(f, "²»Äø (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, "»ýÂ³»þ´Ö (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;'¥­¡¼¥Ü¡¼¥É¥ê¥Ô¡¼¥ÈÀßÄê', </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;'¥¯¥ê¥Ã¥¯²»¤¢¤ê', </div><div class='del'>-				    '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;'¥¯¥ê¥Ã¥¯²»ÎÌ (%)')</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;'¥Þ¥¦¥¹ÀßÄê', </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, '²ÃÂ®ÎÌ', 5)</div><div class='del'>-    @w_mouseacc.pack('side'=&gt;'left', 'padx'=&gt;[0, '1m'])</div><div class='del'>-    @w_mousethr = LabelEntry.new(f, 'ïçÃÍ (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;'¥¹¥¯¥ê¡¼¥ó¥»¡¼¥ÐÀßÄê', </div><div class='del'>-			     'padx'=&gt;'1.5m', 'pady'=&gt;'1.5m')</div><div class='del'>-    @w_screenblank = TkRadioButton.new(screen, 'text'=&gt;'¥Ö¥é¥ó¥¯É½¼¨', </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;'¥Ñ¥¿¡¼¥óÉ½¼¨', </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, '¥¿¥¤¥à¥¢¥¦¥È (s)', 5, [1, 100000])</div><div class='del'>-    @w_screencyc = LabelEntry.new(screen, '¼þ´ü (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-jp/knightstour.rb b/ext/tk/sample/demos-jp/knightstour.rb<br/>deleted file mode 100644<br/>index d4595ea441..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/knightstour.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/knightstour.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,273 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# Based on the widget demo of Tcl/Tk8.5.2</div><div class='del'>-# The following is the original copyright text.</div><div class='del'>-#----------------------------------------------------------------------------</div><div class='del'>-# Copyright (C) 2008 Pat Thoyts &lt;patthoyts@users.sourceforge.net&gt;</div><div class='del'>-#</div><div class='del'>-#	Calculate a Knight's tour of a chessboard.</div><div class='del'>-#</div><div class='del'>-#	This uses Warnsdorff's rule to calculate the next square each</div><div class='del'>-#	time. This specifies that the next square should be the one that</div><div class='del'>-#	has the least number of available moves.</div><div class='del'>-#</div><div class='del'>-#	Using this rule it is possible to get to a position where</div><div class='del'>-#	there are no squares available to move into. In this implementation</div><div class='del'>-#	this occurs when the starting square is d6.</div><div class='del'>-#</div><div class='del'>-#	To solve this fault an enhancement to the rule is that if we</div><div class='del'>-#	have a choice of squares with an equal score, we should choose</div><div class='del'>-#	the one nearest the edge of the board.</div><div class='del'>-#</div><div class='del'>-#	If the call to the Edgemost function is commented out you can see</div><div class='del'>-#	this occur.</div><div class='del'>-#</div><div class='del'>-#	You can drag the knight to a specific square to start if you wish.</div><div class='del'>-#	If you let it repeat then it will choose random start positions</div><div class='del'>-#	for each new tour.</div><div class='del'>-#----------------------------------------------------------------------------</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Knights_Tour</div><div class='del'>-  # Return a list of accessible squares from a given square</div><div class='del'>-  def valid_moves(square)</div><div class='del'>-    moves = []</div><div class='del'>-    [</div><div class='del'>-      [-1,-2], [-2,-1], [-2,1], [-1,2], [1,2], [2,1], [2,-1], [1,-2]</div><div class='del'>-    ].each{|col_delta, row_delta|</div><div class='del'>-      col = (square % 8) + col_delta</div><div class='del'>-      row = (square.div(8)) + row_delta</div><div class='del'>-      moves &lt;&lt; (row * 8 + col) if row &gt; -1 &amp;&amp; row &lt; 8 &amp;&amp; col &gt; -1 &amp;&amp; col &lt; 8</div><div class='del'>-    }</div><div class='del'>-    moves</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return the number of available moves for this square</div><div class='del'>-  def check_square(square)</div><div class='del'>-    valid_moves(square).find_all{|pos| ! @visited.include?(pos)}.length</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Select the next square to move to. Returns -1 if there are no available</div><div class='del'>-  # squares remaining that we can move to.</div><div class='del'>-  def next_square(square)</div><div class='del'>-    minimum = 9</div><div class='del'>-    nxt = -1</div><div class='del'>-    valid_moves(square).each{|pos|</div><div class='del'>-      unless @visited.include?(pos)</div><div class='del'>-        cnt = check_square(pos)</div><div class='del'>-        if cnt &lt; minimum</div><div class='del'>-          minimum = cnt</div><div class='del'>-          nxt = pos</div><div class='del'>-        elsif cnt == minimum</div><div class='del'>-          nxt = edgemost(nxt, pos)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    nxt</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Select the square nearest the edge of the board</div><div class='del'>-  def edgemost(nxt, pos)</div><div class='del'>-    col_A = 3 - ((3.5 - nxt % 8).abs.to_i)</div><div class='del'>-    col_B = 3 - ((3.5 - pos % 8).abs.to_i)</div><div class='del'>-    row_A = 3 - ((3.5 - nxt.div(8)).abs.to_i)</div><div class='del'>-    row_B = 3 - ((3.5 - pos.div(8)).abs.to_i)</div><div class='del'>-    (col_A * row_A &lt; col_B * row_B)? nxt : pos</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Display a square number as a standard chess square notation.</div><div class='del'>-  def _N(square)</div><div class='del'>-    '%c%d' % [(97 + square % 8), (square.div(8) + 1)]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Perform a Knight's move and schedule the next move.</div><div class='del'>-  def move_piece(last, square)</div><div class='del'>-    @log.insert(:end, "#{@visited.length}. #{_N last} -&gt; #{_N square}\n", '')</div><div class='del'>-    @log.see(:end)</div><div class='del'>-    @board.itemconfigure(1+last, :state=&gt;:normal, :outline=&gt;'black')</div><div class='del'>-    @board.itemconfigure(1+square, :state=&gt;:normal, :outline=&gt;'red')</div><div class='del'>-    @knight.coords(@board.coords(1+square)[0..1])</div><div class='del'>-    @visited &lt;&lt; square</div><div class='del'>-    if (nxt = next_square(square)) != -1</div><div class='del'>-      @after_id = Tk.after(@delay.numeric){move_piece(square, nxt) rescue nil}</div><div class='del'>-    else</div><div class='del'>-      @start_btn.state :normal</div><div class='del'>-      if @visited.length == 64</div><div class='del'>-        if @initial == square</div><div class='del'>-          @log.insert :end, '¼þÍ·(closed tour)À®¸ù¡ª'</div><div class='del'>-        else</div><div class='del'>-          @log.insert :end, "À®¸ù\n", {}</div><div class='del'>-          Tk.after(@delay.numeric * 2){tour(rand(64))} if @continuous.bool</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        @log.insert :end, "¼ºÇÔ¡ª\n", {}</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Begin a new tour of the board given a random start position</div><div class='del'>-  def tour(square = nil)</div><div class='del'>-    @visited.clear</div><div class='del'>-    @log.clear</div><div class='del'>-    @start_btn.state :disabled</div><div class='del'>-    1.upto(64){|n|</div><div class='del'>-      @board.itemconfigure(n, :state=&gt;:disabled, :outline=&gt;'black')</div><div class='del'>-    }</div><div class='del'>-    unless square</div><div class='del'>-      square = @board.find_closest(*(@knight.coords &lt;&lt; 0 &lt;&lt; 65))[0].to_i - 1</div><div class='del'>-    end</div><div class='del'>-    @initial = square</div><div class='del'>-    Tk.after_idle{ move_piece(@initial, @initial) rescue nil }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _stop</div><div class='del'>-    Tk.after_cancel(@after_id) rescue nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _exit</div><div class='del'>-    _stop</div><div class='del'>-    $knightstour.destroy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_delay(new)</div><div class='del'>-    @delay.numeric = new.to_i</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def drag_start(w, x, y)</div><div class='del'>-    w.dtag('selected')</div><div class='del'>-    w.addtag('selected', :withtag, 'current')</div><div class='del'>-    @dragging = [x, y]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def drag_motion(w, x, y)</div><div class='del'>-    return unless @dragging</div><div class='del'>-    w.move('selected', x - @dragging[0], y - @dragging[1])</div><div class='del'>-    @dragging = [x, y]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def drag_end(w, x, y)</div><div class='del'>-    square = w.find_closest(x, y, 0, 65)</div><div class='del'>-    w.coords('selected', w.coords(square)[0..1])</div><div class='del'>-    w.dtag('selected')</div><div class='del'>-    @dragging = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_SeeDismiss</div><div class='del'>-    ## See Code / Dismiss</div><div class='del'>-    frame = Ttk::Frame.new($knightstour)</div><div class='del'>-    sep = Ttk::Separator.new(frame)</div><div class='del'>-    Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-    TkGrid('x', </div><div class='del'>-           Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                           :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                           :command=&gt;proc{showCode 'knightstour'}), </div><div class='del'>-           Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                           :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                           :command=&gt;proc{</div><div class='del'>-                             $knightstour.destroy</div><div class='del'>-                             $knightstour = nil</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'>-    frame</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def create_gui(parent = nil)</div><div class='del'>-    $knightstour.destroy rescue nil</div><div class='del'>-    $knightstour = Tk::Toplevel.new(parent, :title=&gt;"Knight's tour")</div><div class='del'>-    $knightstour.withdraw</div><div class='del'>-    base_f = Ttk::Frame.new($knightstour)</div><div class='del'>-    @board = Tk::Canvas.new(base_f, :width=&gt;240, :height=&gt;240)</div><div class='del'>-    @log = Tk::Text.new(base_f, :width=&gt;12, :height=&gt;1, </div><div class='del'>-                        :font=&gt;'Arial 8', :background=&gt;'white')</div><div class='del'>-    scr = @log.yscrollbar(Ttk::Scrollbar.new(base_f))</div><div class='del'>-</div><div class='del'>-    @visited = []</div><div class='del'>-    @delay = TkVariable.new(600)</div><div class='del'>-    @continuous = TkVariable.new(false)</div><div class='del'>-</div><div class='del'>-    tool_f = Ttk::Frame.new($knightstour)</div><div class='del'>-    label = Ttk::Label.new(tool_f, :text=&gt;'¼Â¹ÔÂ®ÅÙ')</div><div class='del'>-    scale = Ttk::Scale.new(tool_f, :from=&gt;8, :to=&gt;2000, :variable=&gt;@delay, </div><div class='del'>-                           :command=&gt;proc{|n| set_delay(n)})</div><div class='del'>-    check = Ttk::Checkbutton.new(tool_f, :text=&gt;'È¿Éü', </div><div class='del'>-                                 :variable=&gt;@continuous)</div><div class='del'>-    @start_btn = Ttk::Button.new(tool_f, :text=&gt;'³«»Ï', </div><div class='del'>-                                 :command=&gt;proc{tour()})</div><div class='del'>-    @exit_btn = Ttk::Button.new(tool_f, :text=&gt;'½ªÎ»', </div><div class='del'>-                                :command=&gt;proc{_exit()})</div><div class='del'>-</div><div class='del'>-    7.downto(0){|row|</div><div class='del'>-      0.upto(7){|col|</div><div class='del'>-        if ((col &amp; 1) ^ (row &amp; 1)).zero?</div><div class='del'>-          fill  = 'bisque'</div><div class='del'>-          dfill = 'bisque3'</div><div class='del'>-        else</div><div class='del'>-          fill  = 'tan3'</div><div class='del'>-          dfill = 'tan4'</div><div class='del'>-        end</div><div class='del'>-        coords = [col * 30 + 4, row * 30 + 4, col * 30 + 30, row * 30 + 30]</div><div class='del'>-        @board.create(TkcRectangle, coords, </div><div class='del'>-                      :fill=&gt;fill, :disabledfill=&gt;dfill,</div><div class='del'>-                      :width=&gt;2, :state=&gt;:disabled)</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @knight_font = TkFont.new(:size=&gt;-24)</div><div class='del'>-    @knight = TkcText.new(@board, 0, 0, :font=&gt;@knight_font, </div><div class='del'>-                          :text=&gt;Tk::UTF8_String.new('\u265e'), </div><div class='del'>-                          :anchor=&gt;'nw', # :tags=&gt;'knight', </div><div class='del'>-                          :fill=&gt;'black', :activefill=&gt;'#600000')</div><div class='del'>-    @knight.coords(@board.coords(rand(64)+1)[0..1])</div><div class='del'>-    @knight.bind('ButtonPress-1', '%W %x %y'){|w,x,y| drag_start(w,x,y)}</div><div class='del'>-    @knight.bind('Motion', '%W %x %y'){|w,x,y| drag_motion(w,x,y)}</div><div class='del'>-    @knight.bind('ButtonRelease-1', '%W %x %y'){|w,x,y| drag_end(w,x,y)}</div><div class='del'>-</div><div class='del'>-    Tk.grid(@board, @log, scr, :sticky=&gt;'news')</div><div class='del'>-    base_f.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    base_f.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    Tk.grid(base_f, '-', '-', '-', '-', '-', :sticky=&gt;'news')</div><div class='del'>-    widgets = [label, scale, check, @start_btn]</div><div class='del'>-    sg = nil</div><div class='del'>-    unless $RubyTk_WidgetDemo</div><div class='del'>-      widgets &lt;&lt; @exit_btn</div><div class='del'>-      if Tk.windowingsystem != 'aqua'</div><div class='del'>-        #widgets.unshift(Ttk::SizeGrip.new(tool_f))</div><div class='del'>-        Ttk::SizeGrip.new(tool_f).pack(:side=&gt;:right, :anchor=&gt;'se')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Tk.pack(widgets, :side=&gt;:right)</div><div class='del'>-    if Tk.windowingsystem == 'aqua'</div><div class='del'>-      TkPack.configure(widgets, :padx=&gt;[4, 4], :pady=&gt;[12, 12])</div><div class='del'>-      TkPack.configure(widgets[0], :padx=&gt;[4, 24])</div><div class='del'>-      TkPack.configure(widgets[-1], :padx=&gt;[16, 4])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    Tk.grid(tool_f, '-', '-', '-', '-', '-', :sticky=&gt;'ew')</div><div class='del'>-</div><div class='del'>-    if $RubyTk_WidgetDemo</div><div class='del'>-      Tk.grid(make_SeeDismiss(), '-', '-', '-', '-', '-', :sticky=&gt;'ew')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    $knightstour.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    $knightstour.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    $knightstour.bind('Control-F2'){TkConsole.show}</div><div class='del'>-    $knightstour.bind('Return'){@start_btn.invoke}</div><div class='del'>-    $knightstour.bind('Escape'){@exit_btn.invoke}</div><div class='del'>-    $knightstour.bind('Destroy'){ _stop }</div><div class='del'>-    $knightstour.protocol('WM_DELETE_WINDOW'){ _exit }</div><div class='del'>-</div><div class='del'>-    $knightstour.deiconify</div><div class='del'>-    $knightstour.tkwait_destroy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent = nil)</div><div class='del'>-    create_gui(parent)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.root.withdraw unless $RubyTk_WidgetDemo</div><div class='del'>-Thread.new{Tk.mainloop} if __FILE__ == $0</div><div class='del'>-Knights_Tour.new</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/label.rb b/ext/tk/sample/demos-jp/label.rb<br/>deleted file mode 100644<br/>index 2e6b3e7e57..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/label.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/label.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,69 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</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'>-base_frame = TkFrame.new($label_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤Ï5¤Ä¤Î¥é¥Ù¥ë¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£º¸Â¦¤Ë¤Ï¥Æ¥­¥¹¥È¥é¥Ù¥ë¤¬3¤Ä¤¢¤ê¡¢±¦Â¦¤Ë¤Ï¥Ó¥Ã¥È¥Þ¥Ã¥×¥é¥Ù¥ë¤È¥Æ¥­¥¹¥È¥é¥Ù¥ë¤¬¤¢¤ê¤Þ¤¹¡£¥é¥Ù¥ë¤È¤¤¤¦¤Î¤Ï¤¢¤Þ¤êÌÌÇò¤¤¤â¤Î¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤Ê¤¼¤Ê¤éÄ¯¤á¤ë°Ê³°²¿¤â¤Ç¤­¤Ê¤¤¤«¤é¤Ç¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</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 '¥³¡¼¥É»²¾È'</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(base_frame)</div><div class='del'>-f_right = TkFrame.new(base_frame)</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;'ºÇ½é¤Î¥é¥Ù¥ë'),</div><div class='del'>-  TkLabel.new(f_left, 'text'=&gt;'2 ÈÖÌÜ¡£¤Á¤ç¤Ã¤ÈÉâ¤­¾å¤¬¤é¤»¤Æ¤ß¤Þ¤·¤¿', </div><div class='del'>-              'relief'=&gt;'raised'),</div><div class='del'>-  TkLabel.new(f_left, 'text'=&gt;'3 ÈÖÌÜ¡£ÄÀ¤ó¤Ç¤¤¤Þ¤¹ ', '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'>-Tk::Label.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 ½êÍ­¼Ô' }.pack('side'=&gt;'top')</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/labelframe.rb b/ext/tk/sample/demos-jp/labelframe.rb<br/>deleted file mode 100644<br/>index 11b0d27308..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/labelframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/labelframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</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'>-base_frame = TkFrame.new($labelframe_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# Some information</div><div class='del'>-TkLabel.new(base_frame, </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'>-TkLabelFrame ¥¦¥£¥¸¥§¥Ã¥È¤Ï´ØÏ¢¤¹¤ë widget </div><div class='del'>-·²¤ò¤Þ¤È¤á¤Æ¼è¤ê°·¤¦¤¿¤á¤ËÍÑ¤¤¤é¤ì¤Þ¤¹¡£¥é</div><div class='del'>-¥Ù¥ë¤ÏÄÌ¾ï¤ÎÊ¸»úÎó¤Ç¤â²¿¤é¤«¤Î¥¦¥£¥¸¥§¥Ã¥È</div><div class='del'>-¤Ç¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£¤â¤·¤¢¤Ê¤¿¤¬»È¤Ã¤Æ¤¤¤ë </div><div class='del'>-Ruby ¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë Tk ¥é¥¤¥Ö¥é¥ê¤¬ </div><div class='del'>-labelframe ¥¦¥£¥¸¥§¥Ã¥È¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤</div><div class='del'>-¾ì¹ç¡¢¤³¤Î¥Ç¥â¤Ï¤¦¤Þ¤¯Æ°¤«¤Ê¤¤¤Ï¤º¤Ç¤¹¡£</div><div class='del'>-¤½¤Î¾ì¹ç¤Ë¤Ï labelframe ¥¦¥£¥¸¥§¥Ã¥È¤¬¼ÂÁõ</div><div class='del'>-¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ê¤è¤ê¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î Tk </div><div class='del'>-¤òÁÈ¤ß¹ç¤ï¤»¤Æ»î¤¹¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-# The bottom buttons</div><div class='del'>-TkFrame.new(base_frame){|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;'ÊÄ¤¸¤ë', :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;'¥³¡¼¥É»²¾È', :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(base_frame).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;'ÁªÂòÃÍ', </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;"¥ª¥×¥·¥ç¥ó¤ò»ÈÍÑ", :padx=&gt;0) {|cb|</div><div class='del'>-    command proc{lfEnableButtons(f)}</div><div class='del'>-    f.labelwidget(cb)</div><div class='del'>-  }</div><div class='del'>-  grid(:row=&gt;0, :column=&gt;1, :pady=&gt;'2m', :padx=&gt;'2m')</div><div class='del'>-</div><div class='del'>-  %w(¥ª¥×¥·¥ç¥ó1 ¥ª¥×¥·¥ç¥ó2 ¥ª¥×¥·¥ç¥ó3).each{|str|</div><div class='del'>-    TkCheckbutton.new(f, :text=&gt;str).pack(:side=&gt;:top, :fill=&gt;:x, :pady=&gt;2)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  lfEnableButtons(f)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkGrid.columnconfigure(w, [0,1], :weight=&gt;1)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/mclist.rb b/ext/tk/sample/demos-jp/mclist.rb<br/>deleted file mode 100644<br/>index a7834d2668..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/mclist.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/mclist.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,121 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# mclist.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing a Ttk</div><div class='del'>-# tree widget configured as a multi-column listbox.</div><div class='del'>-#</div><div class='del'>-# based on "Id: mclist.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($mclist_demo) &amp;&amp; $mclist_demo</div><div class='del'>-  $mclist_demo.destroy </div><div class='del'>-  $mclist_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$mclist_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Multi-Column List")</div><div class='del'>-  iconname("mclist")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($mclist_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-## Explanatory text</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', </div><div class='del'>-               :justify=&gt;:left, :anchor=&gt;'n', :padding=&gt;[10, 2, 10, 6], </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:fill=&gt;:x)</div><div class='del'>-Ttk¤È¤Ï¡¤¥Æ¡¼¥Þ»ØÄê²ÄÇ½¤Ê¿·¤·¤¤¥¦¥£¥¸¥§¥Ã¥È½¸¹ç¤Ç¤¹¡¥\</div><div class='del'>-Ttk::Treeview¥¦¥£¥¸¥§¥Ã¥È¤Ï\</div><div class='del'>-Ttk¥¦¥£¥¸¥§¥Ã¥È¥»¥Ã¥È¤Ë´Þ¤Þ¤ì¤ë¥¦¥£¥¸¥§¥Ã¥È¤Î°ì¤Ä¤Ç¡¤\</div><div class='del'>-¤½¤ì¤¬ÊÝ»ý¤¹¤ëÌÚ¹½Â¤¤Î¥Ç¡¼¥¿¤½¤Î¤â¤Î¤Þ¤Ç¤ÏÉ½¼¨¤¹¤ë¤³¤È¤Ê¤¯¡¤\</div><div class='del'>-¼¨¤·¤¿¤¤¾ðÊó¤ò¥Þ¥ë¥Á¥«¥é¥à¤ÇÉ½¼¨¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-¤³¤Î¥µ¥ó¥×¥ë¤Ï¡¤Ê£¿ô¤Î¥«¥é¥à¤ò»ý¤Ã¤¿¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤òºîÀ®¤¹¤ë´ÊÃ±¤ÊÎã¤Ç¤¹¡¥</div><div class='del'>-³Æ¥«¥é¥à¤Î¥¿¥¤¥È¥ë(heading)¤ò¥¯¥ê¥Ã¥¯¤¹¤ì¤Ð¡¤\</div><div class='del'>-¤½¤Î¥«¥é¥à¤Î¾ðÊó¤Ë´ð¤Å¤¤¤Æ¥ê¥¹¥È¤ÎÊÂ¤ÙÂØ¤¨¤¬¤Ê¤µ¤ì¤ë¤Ï¤º¤Ç¤¹¡¥\</div><div class='del'>-¤Þ¤¿¡¤¥«¥é¥à¤Î¥¿¥¤¥È¥ë´Ö¤Î¶èÀÚ¤êÉôÊ¬¤ò¥É¥é¥Ã¥°¤¹¤ë¤³¤È¤Ç¡¤\</div><div class='del'>-¥«¥é¥à¤ÎÉý¤òÊÑ¹¹¤¹¤ë¤³¤È¤â²ÄÇ½¤Ç¤¹¡¥</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'mclist'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $mclist_demo.destroy</div><div class='del'>-                           $mclist_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-container = Ttk::Frame.new(base_frame)</div><div class='del'>-tree = Ttk::Treeview.new(base_frame, :columns=&gt;%w(country capital currency), </div><div class='del'>-                          :show=&gt;:headings)</div><div class='del'>-if Tk.windowingsystem != 'aquq'</div><div class='del'>-  vsb = tree.yscrollbar(Ttk::Scrollbar.new(base_frame))</div><div class='del'>-  hsb = tree.xscrollbar(Ttk::Scrollbar.new(base_frame))</div><div class='del'>-else</div><div class='del'>-  vsb = tree.yscrollbar(Tk::Scrollbar.new(base_frame))</div><div class='del'>-  hsb = tree.xscrollbar(Tk::Scrollbar.new(base_frame))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-container.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-Tk.grid(tree, vsb, :in=&gt;container, :sticky=&gt;'nsew')</div><div class='del'>-Tk.grid(hsb,       :in=&gt;container, :sticky=&gt;'nsew')</div><div class='del'>-container.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-container.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-## The data we're going to insert</div><div class='del'>-data = [</div><div class='del'>-  ['¥¢¥ë¥¼¥ó¥Á¥ó', 	'¥Ö¥¨¥Î¥¹¥¢¥¤¥ì¥¹', 	'ARS'], </div><div class='del'>-  ['¥ª¡¼¥¹¥È¥é¥ê¥¢',	'¥­¥ã¥ó¥Ù¥é',		'AUD'], </div><div class='del'>-  ['¥Ö¥é¥¸¥ë', 		'¥Ö¥é¥¸¥ê¥¢', 		'BRL'], </div><div class='del'>-  ['¥«¥Ê¥À', 		'¥ª¥¿¥ï', 		'CAD'], </div><div class='del'>-  ['Ãæ¹ñ',		'ËÌµþ', 		'CNY'], </div><div class='del'>-  ['¥Õ¥é¥ó¥¹',		'¥Ñ¥ê', 		'EUR'], </div><div class='del'>-  ['¥É¥¤¥Ä', 		'¥Ù¥ë¥ê¥ó',		'EUR'], </div><div class='del'>-  ['¥¤¥ó¥É', 		'¥Ë¥å¡¼¥Ç¥ê¡¼',		'INR'], </div><div class='del'>-  ['¥¤¥¿¥ê¥¢', 		'¥í¡¼¥Þ', 		'EUR'], </div><div class='del'>-  ['ÆüËÜ', 		'Åìµþ', 		'JPY'], </div><div class='del'>-  ['¥á¥­¥·¥³', 		'¥á¥­¥·¥³¥·¥Æ¥£', 	'MXN'], </div><div class='del'>-  ['¥í¥·¥¢', 		'¥â¥¹¥¯¥ï', 		'RUB'], </div><div class='del'>-  ['Æî¥¢¥Õ¥ê¥«',	'¥×¥ì¥È¥ê¥¢', 		'ZAR'], </div><div class='del'>-  ['±Ñ¹ñ', 		'¥í¥ó¥É¥ó', 		'GBP'], </div><div class='del'>-  ['¥¢¥á¥ê¥«', 		'¥ï¥·¥ó¥È¥ó D.C.', 	'USD'],</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-## Code to insert the data nicely</div><div class='del'>-font = Ttk::Style.lookup(tree[:style], :font)</div><div class='del'>-cols = %w(country capital currency)</div><div class='del'>-cols.zip(%w(¹ñÌ¾ ¼óÅÔ ÄÌ²ß)).each{|col, name|</div><div class='del'>-  tree.heading_configure(col, :text=&gt;name, </div><div class='del'>-                         :command=&gt;proc{sort_by(tree, col, false)})</div><div class='del'>-  tree.column_configure(col, :width=&gt;TkFont.measure(font, name))</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-data.each{|country, capital, currency|</div><div class='del'>-  #tree.insert('', :end, :values=&gt;[country, capital, currency])</div><div class='del'>-  tree.insert(nil, :end, :values=&gt;[country, capital, currency])</div><div class='del'>-  cols.zip([country, capital, currency]).each{|col, val|</div><div class='del'>-    len = TkFont.measure(font, "#{val}  ")</div><div class='del'>-    if tree.column_cget(col, :width) &lt; len</div><div class='del'>-      tree.column_configure(col, :width=&gt;len)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Code to do the sorting of the tree contents when clicked on</div><div class='del'>-def sort_by(tree, col, direction)</div><div class='del'>-  tree.children(nil).map!{|row| [tree.get(row, col), row.id]} . </div><div class='del'>-    sort(&amp;((direction)? proc{|x, y| y &lt;=&gt; x}: proc{|x, y| x &lt;=&gt; y})) . </div><div class='del'>-    each_with_index{|info, idx| tree.move(info[1], nil, idx)}</div><div class='del'>-</div><div class='del'>-  tree.heading_configure(col, :command=&gt;proc{sort_by(tree, col, ! direction)})</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/menu.rb b/ext/tk/sample/demos-jp/menu.rb<br/>deleted file mode 100644<br/>index c3d95176b4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/menu.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/menu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,201 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# menus 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?($menu_demo) &amp;&amp; $menu_demo</div><div class='del'>-  $menu_demo.destroy </div><div class='del'>-  $menu_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$menu_demo = TkToplevel.new {|w|</div><div class='del'>-  title("File Selection Dialogs")</div><div class='del'>-  iconname("menu")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($menu_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# menu frame À¸À®</div><div class='del'>-$menu_frame = TkFrame.new(base_frame, 'relief'=&gt;'raised', 'bd'=&gt;2)</div><div class='del'>-$menu_frame.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  windowingsystem = Tk.windowingsystem()</div><div class='del'>-rescue</div><div class='del'>-  windowingsystem = ""</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left') {</div><div class='del'>-  if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-      windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-    text("¤³¤Î¥¦¥£¥ó¥É¥¦¤ÏÍÍ¡¹¤Ê¥á¥Ë¥å¡¼¤È¥«¥¹¥±¡¼¥É¥á¥Ë¥å¡¼¤«¤é¹½À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Command-X ¤òÆþÎÏ¤¹¤ë¤È¡¢X¤¬¥³¥Þ¥ó¥É¥­¡¼µ­¹æ¤ËÂ³¤¤¤ÆÉ½¼¨¤µ¤ì¤Æ¤¤¤ëÊ¸»ú¤Ê¤é¤Ð¡¢¥¢¥¯¥»¥é¥ì¡¼¥¿¤ò»È¤Ã¤¿¹àÌÜµ¯Æ°¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥á¥Ë¥å¡¼Í×ÁÇÃæ¡¢ºÇ¸å¤Î¤â¤Î¤Ï¡¢¤½¤Î¥á¥Ë¥å¡¼¤ÎºÇ½é¤Î¹àÌÜ¤òÁªÂò¤¹¤ë¤³¤È¤ÇÆÈÎ©¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£")</div><div class='del'>-  else</div><div class='del'>-    text("¤³¤Î¥¦¥£¥ó¥É¥¦¤ÏÍÍ¡¹¤Ê¥á¥Ë¥å¡¼¤È¥«¥¹¥±¡¼¥É¥á¥Ë¥å¡¼¤«¤é¹½À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Alt-X ¤òÆþÎÏ¤¹¤ë¤È¡¢X¤¬¥á¥Ë¥å¡¼¤Ë¥¢¥ó¥À¡¼¥é¥¤¥óÉÕ¤­¤ÇÉ½¼¨¤µ¤ì¤Æ¤¤¤ëÊ¸»ú¤Ê¤é¤Ð¡¢¥­¡¼¥Ü¡¼¥É¤«¤é¤Î»ØÄê¤¬¤Ç¤­¤Þ¤¹¡£Ìð°õ¥­¡¼¤Ç¥á¥Ë¥å¡¼¤Î¥È¥é¥Ð¡¼¥¹¤â²ÄÇ½¤Ç¤¹¡£¥á¥Ë¥å¡¼¤¬»ØÄê¤µ¤ì¤¿ºÝ¤Ë¤Ï¡¢¥¹¥Ú¡¼¥¹¥­¡¼¤Ç¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¢¤ë¤¤¤Ï¡¢¥¢¥ó¥À¡¼¥é¥¤¥óÉÕ¤­¤ÎÊ¸»ú¤òÆþÎÏ¤¹¤ë¤³¤È¤Ç¤â¼Â¹Ô¤Ç¤­¤Þ¤¹¡£¥á¥Ë¥å¡¼¤Î¥¨¥ó¥È¥ê¤¬¥¢¥¯¥»¥é¥ì¡¼¥¿¤ò»ý¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤½¤Î¥¢¥¯¥»¥é¥ì¡¼¥¿¤òÆþÎÏ¤¹¤ë¤³¤È¤Ç¥á¥Ë¥å¡¼¤ò»ØÄê¤¹¤ë¤³¤È¤Ê¤·¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥á¥Ë¥å¡¼Í×ÁÇÃæ¡¢ºÇ¸å¤Î¤â¤Î¤Ï¡¢¤½¤Î¥á¥Ë¥å¡¼¤ÎºÇ½é¤Î¹àÌÜ¤òÁªÂò¤¹¤ë¤³¤È¤ÇÆÈÎ©¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£")</div><div class='del'>-  end</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $menu_demo</div><div class='del'>-      $menu_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'menu'}</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'>-# menu À¸À®</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'File', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|file_menu|</div><div class='del'>-    m.configure('menu'=&gt;file_menu)</div><div class='del'>-    add('command', 'label'=&gt;'³«¤¯ ...', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"³«¤¯ ..."¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('command', 'label'=&gt;'¿·µ¬', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"¿·µ¬"¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('command', 'label'=&gt;'ÊÝÂ¸', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"ÊÝÂ¸"¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('command', 'label'=&gt;'ÊÝÂ¸(»ØÄê) ...', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"ÊÝÂ¸(»ØÄê) ..."¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'¥×¥ê¥ó¥ÈÀßÄê ...', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"¥×¥ê¥ó¥ÈÀßÄê ..."¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('command', 'label'=&gt;'¥×¥ê¥ó¥È ...', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"¥×¥ê¥ó¥È ..."¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'½ªÎ»', 'command'=&gt;proc{$menu_demo.destroy})</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-    windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-  modifier = 'Command'</div><div class='del'>-elsif $tk_platform['platform'] == 'windows'</div><div class='del'>-  modifier = 'Control'</div><div class='del'>-else</div><div class='del'>-  modifier = 'Meta'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'Basic', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|basic_menu|</div><div class='del'>-    m.configure('menu'=&gt;basic_menu)</div><div class='del'>-    add('command', 'label'=&gt;'²¿¤â¤·¤Ê¤¤Ä¹¤¤¥¨¥ó¥È¥ê')</div><div class='del'>-    ['A','B','C','D','E','F','G'].each{|c|</div><div class='del'>-      # add('command', 'label'=&gt;"Ê¸»ú \"#{c}\" ¤ò°õ»ú", 'underline'=&gt;4, </div><div class='del'>-      add('command', 'label'=&gt;"Print letter \"#{c}\" (Ê¸»ú \"#{c}\" ¤ò°õ»ú)", </div><div class='del'>-          'underline'=&gt;14, 'accelerator'=&gt;"Meta+#{c}", </div><div class='del'>-          'command'=&gt;proc{print c,"\n"}, 'accelerator'=&gt;"#{modifier}+#{c}")</div><div class='del'>-      $menu_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'Cascades', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_menu|</div><div class='del'>-    m.configure('menu'=&gt;cascade_menu)</div><div class='del'>-    add('command', 'label'=&gt;'Print hello(¤³¤ó¤Ë¤Á¤Ï)', </div><div class='del'>-        'command'=&gt;proc{print "Hello(¤³¤ó¤Ë¤Á¤Ï)\n"}, </div><div class='del'>-        'accelerator'=&gt;"#{modifier}+H", 'underline'=&gt;6)</div><div class='del'>-    $menu_demo.bind("#{modifier}-h", proc{print "Hello(¤³¤ó¤Ë¤Á¤Ï)\n"})</div><div class='del'>-    add('command', 'label'=&gt;'Print goodbye(¤µ¤è¤¦¤Ê¤é)', </div><div class='del'>-        'command'=&gt;proc{print "Goodbye(¤µ¤è¤¦¤Ê¤é)\n"}, </div><div class='del'>-        'accelerator'=&gt;"#{modifier}+G", 'underline'=&gt;6)</div><div class='del'>-    $menu_demo.bind("#{modifier}-g", proc{print "Goodbye(¤µ¤è¤¦¤Ê¤é)\n"})</div><div class='del'>-</div><div class='del'>-    # TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_check|</div><div class='del'>-    TkMenu.new(cascade_menu, 'tearoff'=&gt;false) {|cascade_check|</div><div class='del'>-      cascade_menu.add('cascade', 'label'=&gt;'Check buttons(¥Á¥§¥Ã¥¯¥Ü¥¿¥ó)', </div><div class='del'>-                       'menu'=&gt;cascade_check, 'underline'=&gt;0)</div><div class='del'>-      oil = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'¥ª¥¤¥ëÅÀ¸¡', 'variable'=&gt;oil)</div><div class='del'>-      trans = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'¥È¥é¥ó¥¹¥ß¥Ã¥·¥ç¥óÅÀ¸¡', 'variable'=&gt;trans)</div><div class='del'>-      brakes = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'¥Ö¥ì¡¼¥­ÅÀ¸¡', 'variable'=&gt;brakes)</div><div class='del'>-      lights = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'¥é¥¤¥ÈÅÀ¸¡', 'variable'=&gt;lights)</div><div class='del'>-      add('separator')</div><div class='del'>-      add('command', 'label'=&gt;'¸½ºß¤ÎÃÍ¤òÉ½¼¨', </div><div class='del'>-          'command'=&gt;proc{showVars($menu_demo, </div><div class='del'>-                                   ['¥ª¥¤¥ëÅÀ¸¡', oil], </div><div class='del'>-                                   ['¥È¥é¥ó¥¹¥ß¥Ã¥·¥ç¥óÅÀ¸¡', trans], </div><div class='del'>-                                   ['¥Ö¥ì¡¼¥­ÅÀ¸¡', brakes], </div><div class='del'>-                                   ['¥é¥¤¥ÈÅÀ¸¡', lights])} )</div><div class='del'>-      invoke 1</div><div class='del'>-      invoke 3</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_radio|</div><div class='del'>-    TkMenu.new(cascade_menu, 'tearoff'=&gt;false) {|cascade_radio|</div><div class='del'>-      cascade_menu.add('cascade', 'label'=&gt;'Radio buttons(¥é¥¸¥ª¥Ü¥¿¥ó)', </div><div class='del'>-                       'menu'=&gt;cascade_radio, 'underline'=&gt;0)</div><div class='del'>-      pointSize = TkVariable.new</div><div class='del'>-      add('radio', 'label'=&gt;'10 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;10)</div><div class='del'>-      add('radio', 'label'=&gt;'14 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;14)</div><div class='del'>-      add('radio', 'label'=&gt;'18 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;18)</div><div class='del'>-      add('radio', 'label'=&gt;'24 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;24)</div><div class='del'>-      add('radio', 'label'=&gt;'32 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;32)</div><div class='del'>-      add('separator')</div><div class='del'>-      style = TkVariable.new</div><div class='del'>-      add('radio', 'label'=&gt;'¥í¡¼¥Þ¥ó', 'variable'=&gt;style, 'value'=&gt;'roman')</div><div class='del'>-      add('radio', 'label'=&gt;'¥Ü¡¼¥ë¥É', 'variable'=&gt;style, 'value'=&gt;'bold')</div><div class='del'>-      add('radio', 'label'=&gt;'¥¤¥¿¥ê¥Ã¥¯', 'variable'=&gt;style, 'value'=&gt;'italic')</div><div class='del'>-      add('separator')</div><div class='del'>-      add('command', 'label'=&gt;'¸½ºß¤ÎÃÍ¤òÉ½¼¨', </div><div class='del'>-          'command'=&gt;proc{showVars($menu_demo, </div><div class='del'>-                                   ['¥Ý¥¤¥ó¥È¥µ¥¤¥º', pointSize], </div><div class='del'>-                                   ['¥¹¥¿¥¤¥ë', style])} )</div><div class='del'>-      invoke 1</div><div class='del'>-      invoke 7</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'Icons', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|icon_menu|</div><div class='del'>-    m.configure('menu'=&gt;icon_menu)</div><div class='del'>-    add('command', </div><div class='del'>-        'bitmap'=&gt;'@'+[$demo_dir,'..',</div><div class='del'>-                        'images','pattern.xbm'].join(File::Separator),</div><div class='del'>-        'command'=&gt;proc{TkDialog.new('title'=&gt;'Bitmap Menu Entry', </div><div class='del'>-                                     'text'=&gt;'º£¤¢¤Ê¤¿¤¬ÁªÂò¤·¤¿¥á¥Ë¥å¡¼¤Î¹àÌÜ¤Ï¥Æ¥­¥¹¥È¤Ç¤Ï¤Ê¤¯¥Ó¥Ã¥È¥Þ¥Ã¥×¤òÉ½¼¨¤·¤Æ¤¤¤Þ¤·¤¿¡£¤½¤ì°Ê³°¤ÎÅÀ¤Ç¤ÏÂ¾¤Î¥á¥Ë¥å¡¼¹àÌÜ¤ÈÊÑ¤ï¤ê¤Þ¤»¤ó¡£',</div><div class='del'>-                                     'bitmap'=&gt;'', 'default'=&gt;0, </div><div class='del'>-                                     'buttons'=&gt;'Î»²ò')} )</div><div class='del'>-    ['info', 'questhead', 'error'].each{|icon|</div><div class='del'>-      add('command', 'bitmap'=&gt;icon, </div><div class='del'>-          'command'=&gt;proc{print "You invoked the #{icon} bitmap\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'More', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|more_menu|</div><div class='del'>-    m.configure('menu'=&gt;more_menu)</div><div class='del'>-    [ '¥¨¥ó¥È¥ê','ÊÌ¤Î¥¨¥ó¥È¥ê','²¿¤â¤·¤Ê¤¤','¤Û¤È¤ó¤É²¿¤â¤·¤Ê¤¤',</div><div class='del'>-      '¿ÍÀ¸¤ò°ÕµÁ¤¢¤ë¤â¤Î¤Ë' ].each{|i|</div><div class='del'>-      add('command', 'label'=&gt;i, </div><div class='del'>-          'command'=&gt;proc{print "You invoked \"#{i}\"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenubutton.new($menu_frame, 'text'=&gt;'Colors', 'underline'=&gt;0) {|m|</div><div class='del'>-  pack('side'=&gt;'left')</div><div class='del'>-  TkMenu.new(m) {|colors_menu|</div><div class='del'>-    m.configure('menu'=&gt;colors_menu)</div><div class='del'>-    ['red', 'orange', 'yellow', 'green', 'blue'].each{|c|</div><div class='del'>-      add('command', 'label'=&gt;c, 'background'=&gt;c, </div><div class='del'>-          'command'=&gt;proc{print "You invoked \"#{c}\"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/menu84.rb b/ext/tk/sample/demos-jp/menu84.rb<br/>deleted file mode 100644<br/>index a631bacd43..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/menu84.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/menu84.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,213 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# menus 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?($menu84_demo) &amp;&amp; $menu84_demo</div><div class='del'>-  $menu84_demo.destroy </div><div class='del'>-  $menu84_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$menu84_demo = TkToplevel.new {|w|</div><div class='del'>-  title("File Selection Dialogs")</div><div class='del'>-  iconname("menu84")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($menu84_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  windowingsystem = Tk.windowingsystem()</div><div class='del'>-rescue</div><div class='del'>-  windowingsystem = ""</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# label</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left') {</div><div class='del'>-  if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-      windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-    text("¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥«¥¹¥±¡¼¥É¥á¥Ë¥å¡¼¤ò»ý¤Ä¥á¥Ë¥å¡¼¥Ð¡¼¤¬ÉÕ¤±¤é¤ì¤Æ¤¤¤Þ¤¹¡£Command+x ('x'¤Ï¥³¥Þ¥ó¥É¥­¡¼¥·¥ó¥Ü¥ë¤ËÂ³¤±¤ÆÉ½¼¨¤µ¤ì¤Æ¤¤¤ëÊ¸»ú¤Ç¤¹) ¤È¥¿¥¤¥×¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¤â¹àÌÜ¤Îµ¡Ç½¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ºÇ¸å¤Î¥á¥Ë¥å¡¼¤Ï¡¢¥Þ¥¦¥¹¤Ç¥¦¥£¥ó¥É¥¦¤Î³°¤Ë¥É¥é¥Ã¥°¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ÆÈÎ©¤·¤¿¥Ñ¥ì¥Ã¥È¤È¤Ê¤ë¤è¤¦¤ËÀÚ¤êÊü¤¹¤³¤È¤¬²ÄÇ½¤Ç¤¹¡£")</div><div class='del'>-  else</div><div class='del'>-    text("¤³¤Î¥¦¥£¥ó¥É¥¦¤Ë¤Ï¥«¥¹¥±¡¼¥É¥á¥Ë¥å¡¼¤ò»ý¤Ä¥á¥Ë¥å¡¼¥Ð¡¼¤¬ÉÕ¤±¤é¤ì¤Æ¤¤¤Þ¤¹¡£Alt+x ('x'¤Ï¥á¥Ë¥å¡¼¾å¤Ç²¼Àþ¤¬°ú¤«¤ì¤¿Ê¸»ú¤Ç¤¹) ¤È¥¿¥¤¥×¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¤â¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Ìð°õ¥­¡¼¤ò»È¤Ã¤Æ¡¢¥á¥Ë¥å¡¼´Ö¤ò°ÜÆ°¤¹¤ë¤³¤È¤â²ÄÇ½¤Ç¤¹¡£¥á¥Ë¥å¡¼¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë»þ¤Ë¤Ï¡¢¸½ºß°ÌÃÖ¤Î¹àÌÜ¤ò¥¹¥Ú¡¼¥¹¥­¡¼¤ÇÁªÂò¤·¤¿¤ê¡¢²¼Àþ¤¬°ú¤«¤ì¤¿Ê¸»ú¤òÆþÎÏ¤¹¤ë¤³¤È¤Ç¤½¤Î¹àÌÜ¤òÁªÂò¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤â¤·¹àÌÜ¤Ë¥¢¥¯¥»¥é¥ì¡¼¥¿¤Î»ØÄê¤¬¤Ê¤µ¤ì¤Æ¤¤¤¿¤Ê¤é¤Ð¡¢¤½¤Î»ØÄê¤µ¤ì¤¿¥­¡¼ÆþÎÏ¤ò¹Ô¤¦¤³¤È¤Ç¡¢¥á¥Ë¥å¡¼¤òÉ½¼¨¤µ¤»¤ë¤³¤È¤Ê¤¯Ä¾ÀÜ¤½¤Î¹àÌÜ¤Îµ¡Ç½¤ò¸Æ¤Ó½Ð¤»¤Þ¤¹¡£ºÇ¸å¤Î¥á¥Ë¥å¡¼¤Ï¡¢¥á¥Ë¥å¡¼¤ÎºÇ½é¤Î¹àÌÜ¤òÁªÂò¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢ÆÈÎ©¤·¤¿¥Ñ¥ì¥Ã¥È¤È¤Ê¤ë¤è¤¦¤ËÀÚ¤êÊü¤¹¤³¤È¤¬²ÄÇ½¤Ç¤¹¡£")</div><div class='del'>-  end</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-menustatus = TkVariable.new("    ")</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkLabel.new(frame, 'textvariable'=&gt;menustatus, 'relief'=&gt;'sunken', </div><div class='del'>-              'bd'=&gt;1, 'font'=&gt;['Helvetica', '10'], </div><div class='del'>-              'anchor'=&gt;'w').pack('side'=&gt;'left', 'padx'=&gt;2, </div><div class='del'>-                                  'expand'=&gt;true, 'fill'=&gt;'both')</div><div class='del'>-  pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;2)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# frame</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $menu84_demo</div><div class='del'>-      $menu84_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'menu84'}</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'>-# create menu frame</div><div class='del'>-$menu84_frame = TkMenu.new($menu84_demo, 'tearoff'=&gt;false)</div><div class='del'>-</div><div class='del'>-# menu</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'File', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  add('command', 'label'=&gt;'Open...', 'command'=&gt;proc{fail '¤³¤ì¤ÏÃ±¤Ê¤ë¥Ç¥â¤Ç¤¹¤«¤é¡¢"Open..." ¹àÌÜ¤Îµ¡Ç½¤ÏÆÃ¤ËÄêµÁ¤µ¤ì¤Æ¤Ï¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-  add('command', 'label'=&gt;'New', 'command'=&gt;proc{fail '¤³¤ì¤ÏÃ±¤Ê¤ë¥Ç¥â¤Ç¤¹¤«¤é¡¢"New" ¹àÌÜ¤Îµ¡Ç½¤ÏÆÃ¤ËÄêµÁ¤µ¤ì¤Æ¤Ï¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-  add('command', 'label'=&gt;'Save', 'command'=&gt;proc{fail '¤³¤ì¤ÏÃ±¤Ê¤ë¥Ç¥â¤Ç¤¹¤«¤é¡¢"Save" ¹àÌÜ¤Îµ¡Ç½¤ÏÆÃ¤ËÄêµÁ¤µ¤ì¤Æ¤Ï¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-  add('command', 'label'=&gt;'Save As...', 'command'=&gt;proc{fail '¤³¤ì¤ÏÃ±¤Ê¤ë¥Ç¥â¤Ç¤¹¤«¤é¡¢"Save As..." ¹àÌÜ¤Îµ¡Ç½¤ÏÆÃ¤ËÄêµÁ¤µ¤ì¤Æ¤Ï¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-  add('separator')</div><div class='del'>-  add('command', 'label'=&gt;'Print Setup...', 'command'=&gt;proc{fail '¤³¤ì¤ÏÃ±¤Ê¤ë¥Ç¥â¤Ç¤¹¤«¤é¡¢"Print Setup..." ¹àÌÜ¤Îµ¡Ç½¤ÏÆÃ¤ËÄêµÁ¤µ¤ì¤Æ¤Ï¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-  add('command', 'label'=&gt;'Print...', 'command'=&gt;proc{fail '¤³¤ì¤ÏÃ±¤Ê¤ë¥Ç¥â¤Ç¤¹¤«¤é¡¢"Print..." ¹àÌÜ¤Îµ¡Ç½¤ÏÆÃ¤ËÄêµÁ¤µ¤ì¤Æ¤Ï¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-  add('separator')</div><div class='del'>-  add('command', 'label'=&gt;'Dismiss Menus Demo', 'command'=&gt;proc{$menu84_demo.destroy})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-    windowingsystem = "classic" || windowingsystem = "aqua"</div><div class='del'>-  modifier = 'Command'</div><div class='del'>-elsif $tk_platform['platform'] == 'windows'</div><div class='del'>-  modifier = 'Control'</div><div class='del'>-else</div><div class='del'>-  modifier = 'Meta'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'Basic', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  add('command', 'label'=&gt;'Long entry that does nothing')</div><div class='del'>-  ['A','B','C','D','E','F','G'].each{|c|</div><div class='del'>-    add('command', 'label'=&gt;"Print letter \"#{c}\"", </div><div class='del'>-        'underline'=&gt;14, 'accelerator'=&gt;"Meta+#{c}", </div><div class='del'>-        'command'=&gt;proc{print c,"\n"}, 'accelerator'=&gt;"#{modifier}+#{c}")</div><div class='del'>-    $menu84_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"})</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'Cascades', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  add('command', 'label'=&gt;'Print hello', </div><div class='del'>-      'command'=&gt;proc{print "Hello\n"}, </div><div class='del'>-      'accelerator'=&gt;"#{modifier}+H", 'underline'=&gt;6)</div><div class='del'>-  $menu84_demo.bind("#{modifier}-h", proc{print "Hello\n"})</div><div class='del'>-  add('command', 'label'=&gt;'Print goodbye', </div><div class='del'>-      'command'=&gt;proc{print "Goodbye\n"}, </div><div class='del'>-      'accelerator'=&gt;"#{modifier}+G", 'underline'=&gt;6)</div><div class='del'>-  $menu84_demo.bind("#{modifier}-g", proc{print "Goodbye\n"})</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_check|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'Check button', </div><div class='del'>-          'menu'=&gt;cascade_check, 'underline'=&gt;0)</div><div class='del'>-    oil = TkVariable.new(0)</div><div class='del'>-    add('check', 'label'=&gt;'¥ª¥¤¥ë¸¡ºº', 'variable'=&gt;oil)</div><div class='del'>-    trans = TkVariable.new(0)</div><div class='del'>-    add('check', 'label'=&gt;'¥È¥é¥ó¥¹¥ß¥Ã¥·¥ç¥ó¸¡ºº', 'variable'=&gt;trans)</div><div class='del'>-    brakes = TkVariable.new(0)</div><div class='del'>-    add('check', 'label'=&gt;'¥Ö¥ì¡¼¥­¸¡ºº', 'variable'=&gt;brakes)</div><div class='del'>-    lights = TkVariable.new(0)</div><div class='del'>-    add('check', 'label'=&gt;'¥é¥¤¥È¸¡ºº', 'variable'=&gt;lights)</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'Show current values', </div><div class='del'>-        'command'=&gt;proc{showVars($menu84_demo, </div><div class='del'>-                                 ['¥ª¥¤¥ë', oil], </div><div class='del'>-                                 ['¥È¥é¥ó¥¹¥ß¥Ã¥·¥ç¥ó', trans], </div><div class='del'>-                                 ['¥Ö¥ì¡¼¥­', brakes], </div><div class='del'>-                                 ['¥é¥¤¥È', lights])} )</div><div class='del'>-    invoke 1</div><div class='del'>-    invoke 3</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_radio|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'Radio buttons', </div><div class='del'>-          'menu'=&gt;cascade_radio, 'underline'=&gt;0)</div><div class='del'>-    pointSize = TkVariable.new</div><div class='del'>-    add('radio', 'label'=&gt;'10 point', 'variable'=&gt;pointSize, 'value'=&gt;10)</div><div class='del'>-    add('radio', 'label'=&gt;'14 point', 'variable'=&gt;pointSize, 'value'=&gt;14)</div><div class='del'>-    add('radio', 'label'=&gt;'18 point', 'variable'=&gt;pointSize, 'value'=&gt;18)</div><div class='del'>-    add('radio', 'label'=&gt;'24 point', 'variable'=&gt;pointSize, 'value'=&gt;24)</div><div class='del'>-    add('radio', 'label'=&gt;'32 point', 'variable'=&gt;pointSize, 'value'=&gt;32)</div><div class='del'>-    add('separator')</div><div class='del'>-    style = TkVariable.new</div><div class='del'>-    add('radio', 'label'=&gt;'Roman', 'variable'=&gt;style, 'value'=&gt;'roman')</div><div class='del'>-    add('radio', 'label'=&gt;'Bold', 'variable'=&gt;style, 'value'=&gt;'bold')</div><div class='del'>-    add('radio', 'label'=&gt;'Italic', 'variable'=&gt;style, 'value'=&gt;'italic')</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'¸½ºßÃÍ¤ÎÉ½¼¨', </div><div class='del'>-        'command'=&gt;proc{showVars($menu84_demo, </div><div class='del'>-                                 ['pointSize', pointSize], </div><div class='del'>-                                 ['style', style])} )</div><div class='del'>-    invoke 1</div><div class='del'>-    invoke 7</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'Icons', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  add('command', 'hidemargin'=&gt;1, </div><div class='del'>-      'bitmap'=&gt;'@'+[$demo_dir,'..',</div><div class='del'>-                      'images','pattern.xbm'].join(File::Separator),</div><div class='del'>-      'command'=&gt;proc{TkDialog.new('title'=&gt;'Bitmap Menu Entry', </div><div class='del'>-                                   'text'=&gt;'¤¢¤Ê¤¿¤¬ÁªÂò¤·¤¿¥á¥Ë¥å¡¼¹àÌÜ¤Ï¡¢Ê¸»úÎó¤ÎÂå¤ï¤ê¤Ë¥Ó¥Ã¥È¥Þ¥Ã¥×¥¤¥á¡¼¥¸¤Ç¹àÌÜ¤òÉ½¼¨¤·¤¿¤â¤Î¤Ç¤¹¡£¤½¤ì°Ê³°¤ÎÅÀ¤Ç¤Ï¡¢¤Û¤«¤Î¥á¥Ë¥å¡¼¹àÌÜ¤È¤Î´Ö¤ÇÆÃ¤Ë°ã¤¤¤¬¤¢¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£',</div><div class='del'>-                                   'bitmap'=&gt;'', 'default'=&gt;0, </div><div class='del'>-                                   'buttons'=&gt;'ÊÄ¤¸¤ë')} )</div><div class='del'>-  ['info', 'questhead', 'error'].each{|icon|</div><div class='del'>-    add('command', 'bitmap'=&gt;icon, 'hidemargin'=&gt;1, </div><div class='del'>-        'command'=&gt;proc{print "You invoked the #{icon} bitmap\n"})</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  entryconfigure(2, :columnbreak=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'More', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  [ 'An entry','Another entry','Does nothing','Does almost nothing',</div><div class='del'>-    'Make life meaningful' ].each{|i|</div><div class='del'>-    add('command', 'label'=&gt;i, </div><div class='del'>-        'command'=&gt;proc{print "You invoked \"#{i}\"\n"})</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  m.entryconfigure('Does almost nothing', </div><div class='del'>-                   'bitmap'=&gt;'questhead', 'compound'=&gt;'left', </div><div class='del'>-                   'command'=&gt;proc{</div><div class='del'>-                     TkDialog.new('title'=&gt;'Compound Menu Entry', </div><div class='del'>-                                  'message'=&gt;'¤¢¤Ê¤¿¤¬ÁªÂò¤·¤¿¥á¥Ë¥å¡¼¹àÌÜ¤Ï¡¢¥Ó¥Ã¥È¥Þ¥Ã¥×¥¤¥á¡¼¥¸¤ÈÊ¸»úÎó¤È¤òÆ±»þ¤Ë°ì¤Ä¤Î¹àÌÜ¤ËÉ½¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¤â¤Î¤Ç¤¹¡£¤½¤ì°Ê³°¤ÎÅÀ¤Ç¤Ï¡¢¤Û¤«¤Î¥á¥Ë¥å¡¼¹àÌÜ¤È¤Î´Ö¤ÇÆÃ¤Ë°ã¤¤¤¬¤¢¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£',</div><div class='del'>-                                  'buttons'=&gt;['Î»²ò'], 'bitmap'=&gt;'')</div><div class='del'>-                   })</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.new($menu84_frame) {|m|</div><div class='del'>-  $menu84_frame.add('cascade', 'label'=&gt;'Colors', 'menu'=&gt;m, 'underline'=&gt;0)</div><div class='del'>-  ['red', 'orange', 'yellow', 'green', 'blue'].each{|c|</div><div class='del'>-    add('command', 'label'=&gt;c, 'background'=&gt;c, </div><div class='del'>-        'command'=&gt;proc{print "You invoked \"#{c}\"\n"})</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$menu84_demo.menu($menu84_frame)</div><div class='del'>-</div><div class='del'>-TkMenu.bind('&lt;MenuSelect&gt;', proc{|w|</div><div class='del'>-              begin</div><div class='del'>-                label = w.entrycget('active', 'label')</div><div class='del'>-              rescue</div><div class='del'>-                label = "    "</div><div class='del'>-              end</div><div class='del'>-              menustatus.value = label</div><div class='del'>-              Tk.update(true)</div><div class='del'>-            }, '%W')</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/menu8x.rb b/ext/tk/sample/demos-jp/menu8x.rb<br/>deleted file mode 100644<br/>index 9249f2491a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/menu8x.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/menu8x.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,233 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# menus 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?($menu8x_demo) &amp;&amp; $menu8x_demo</div><div class='del'>-  $menu8x_demo.destroy </div><div class='del'>-  $menu8x_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$menu8x_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Menu Demonstration (Tk8.x)")</div><div class='del'>-  iconname("menu")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($menu8x_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# version check</div><div class='del'>-if $tk_version.to_f &lt; 8.0</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left') {</div><div class='del'>-    text("¼Â¹Ô¤·¤è¤¦¤È¤·¤¿¥¹¥¯¥ê¥×¥È¤Ï Tk8.0 °Ê¾å¤ÇÍøÍÑ¤Ç¤­¤ëµ¡Ç½¤òÍøÍÑ¤·¤Æ¤¤¤ë¤¿¤á¡¢¤¢¤Ê¤¿¤Î Ruby#{VERSION}/Tk#{$tk_version}#{(Tk::JAPANIZED_TK)? 'jp': ''} ¤Ç¤ÏÀµ¾ï¤Ë¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¡£¤è¤Ã¤Æ¥Ç¥â¤Î¼Â¹Ô¤òÃæ»ß¤·¤Þ¤·¤¿¡£¤¿¤À¤·¡¢²¼¤Î¥³¡¼¥É»²¾È¥Ü¥¿¥ó¤ò²¡¤¹¤³¤È¤Ç¡¢¼Â¹Ô¤¬Ãæ»ß¤µ¤ì¤¿¥¹¥¯¥ê¥×¥È¤Î¥½¡¼¥¹¤ò»²¾È¤¹¤ë¤³¤È¤Ï²ÄÇ½¤Ç¤¹¡£")</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $menu8x_demo</div><div class='del'>-      $menu8x_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'menu8x'}</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'>-else ; # Tk8.x</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  windowingsystem = Tk.windowingsystem()</div><div class='del'>-rescue</div><div class='del'>-  windowingsystem = ""</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left') {</div><div class='del'>-  if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-      windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-    text("¤³¤Î¥¦¥£¥ó¥É¥¦¤ÏÍÍ¡¹¤Ê¥á¥Ë¥å¡¼¤È¥«¥¹¥±¡¼¥É¥á¥Ë¥å¡¼¤«¤é¹½À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Command-X ¤òÆþÎÏ¤¹¤ë¤È¡¢X¤¬¥³¥Þ¥ó¥É¥­¡¼µ­¹æ¤ËÂ³¤¤¤ÆÉ½¼¨¤µ¤ì¤Æ¤¤¤ëÊ¸»ú¤Ê¤é¤Ð¡¢¥¢¥¯¥»¥é¥ì¡¼¥¿¤ò»È¤Ã¤¿¹àÌÜµ¯Æ°¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥á¥Ë¥å¡¼Í×ÁÇÃæ¡¢ºÇ¸å¤Î¤â¤Î¤Ï¡¢¤½¤Î¥á¥Ë¥å¡¼¤ÎºÇ½é¤Î¹àÌÜ¤òÁªÂò¤¹¤ë¤³¤È¤ÇÆÈÎ©¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£")</div><div class='del'>-  else</div><div class='del'>-    text("¤³¤Î¥¦¥£¥ó¥É¥¦¤ÏÍÍ¡¹¤Ê¥á¥Ë¥å¡¼¤È¥«¥¹¥±¡¼¥É¥á¥Ë¥å¡¼¤«¤é¹½À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Alt-X ¤òÆþÎÏ¤¹¤ë¤È¡¢X¤¬¥á¥Ë¥å¡¼¤Ë¥¢¥ó¥À¡¼¥é¥¤¥óÉÕ¤­¤ÇÉ½¼¨¤µ¤ì¤Æ¤¤¤ëÊ¸»ú¤Ê¤é¤Ð¡¢¥­¡¼¥Ü¡¼¥É¤«¤é¤Î»ØÄê¤¬¤Ç¤­¤Þ¤¹¡£Ìð°õ¥­¡¼¤Ç¥á¥Ë¥å¡¼¤Î¥È¥é¥Ð¡¼¥¹¤â²ÄÇ½¤Ç¤¹¡£¥á¥Ë¥å¡¼¤¬»ØÄê¤µ¤ì¤¿ºÝ¤Ë¤Ï¡¢¥¹¥Ú¡¼¥¹¥­¡¼¤Ç¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤¢¤ë¤¤¤Ï¡¢¥¢¥ó¥À¡¼¥é¥¤¥óÉÕ¤­¤ÎÊ¸»ú¤òÆþÎÏ¤¹¤ë¤³¤È¤Ç¤â¼Â¹Ô¤Ç¤­¤Þ¤¹¡£¥á¥Ë¥å¡¼¤Î¥¨¥ó¥È¥ê¤¬¥¢¥¯¥»¥é¥ì¡¼¥¿¤ò»ý¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢¤½¤Î¥¢¥¯¥»¥é¥ì¡¼¥¿¤òÆþÎÏ¤¹¤ë¤³¤È¤Ç¥á¥Ë¥å¡¼¤ò»ØÄê¤¹¤ë¤³¤È¤Ê¤·¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥á¥Ë¥å¡¼Í×ÁÇÃæ¡¢ºÇ¸å¤Î¤â¤Î¤Ï¡¢¤½¤Î¥á¥Ë¥å¡¼¤ÎºÇ½é¤Î¹àÌÜ¤òÁªÂò¤¹¤ë¤³¤È¤ÇÆÈÎ©¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£")</div><div class='del'>-  end</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# ¾õÂÖÉ½¼¨¤ÎÀ¸À®</div><div class='del'>-$menu8xstatus = TkVariable.new("    ")</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkLabel.new(frame, 'textvariable'=&gt;$menu8xstatus, 'relief'=&gt;'sunken', </div><div class='del'>-              'bd'=&gt;1, 'font'=&gt;['Helvetica', '10'], 'anchor'=&gt;'w')\</div><div class='del'>-  .pack('side'=&gt;'left', 'padx'=&gt;2, 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;2)</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $menu8x_demo</div><div class='del'>-      $menu8x_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'menu8x'}</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'>-# menu À¸À®</div><div class='del'>-TkMenu.new($menu8x_demo, 'tearoff'=&gt;false) {|m|</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|file_menu|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'File', 'menu'=&gt;file_menu, 'underline'=&gt;0)</div><div class='del'>-    add('command', 'label'=&gt;'³«¤¯ ...', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"³«¤¯ ..."¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('command', 'label'=&gt;'¿·µ¬', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"¿·µ¬"¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('command', 'label'=&gt;'ÊÝÂ¸', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"ÊÝÂ¸"¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('command', 'label'=&gt;'ÊÝÂ¸(»ØÄê) ...', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"ÊÝÂ¸(»ØÄê) ..."¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'¥×¥ê¥ó¥ÈÀßÄê ...', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"¥×¥ê¥ó¥ÈÀßÄê ..."¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('command', 'label'=&gt;'¥×¥ê¥ó¥È ...', 'command'=&gt;proc{fail '¤³¤ì¤Ï¡¢¥Ç¥â¤Ç¤¹¤Î¤Ç"¥×¥ê¥ó¥È ..."¤ËÂÐ¤¹¤ë¥¢¥¯¥·¥ç¥ó¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£'})</div><div class='del'>-    add('separator')</div><div class='del'>-    add('command', 'label'=&gt;'½ªÎ»', 'command'=&gt;proc{$menu8x_demo.destroy})</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if $tk_platform['platform'] == 'macintosh' ||</div><div class='del'>-      windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-    modifier = 'Command'</div><div class='del'>-  elsif $tk_platform['platform'] == 'windows'</div><div class='del'>-    modifier = 'Control'</div><div class='del'>-  else</div><div class='del'>-    modifier = 'Meta'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|basic_menu|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'Basic', 'menu'=&gt;basic_menu, 'underline'=&gt;0)</div><div class='del'>-    add('command', 'label'=&gt;'²¿¤â¤·¤Ê¤¤Ä¹¤¤¥¨¥ó¥È¥ê')</div><div class='del'>-    ['A','B','C','D','E','F','G'].each{|c|</div><div class='del'>-      # add('command', 'label'=&gt;"Ê¸»ú \"#{c}\" ¤ò°õ»ú", 'underline'=&gt;4, </div><div class='del'>-      add('command', 'label'=&gt;"Print letter \"#{c}\" (Ê¸»ú \"#{c}\" ¤ò°õ»ú)", </div><div class='del'>-          'underline'=&gt;14, 'accelerator'=&gt;"Meta+#{c}", </div><div class='del'>-          'command'=&gt;proc{print c,"\n"}, 'accelerator'=&gt;"#{modifier}+#{c}")</div><div class='del'>-      $menu8x_demo.bind("#{modifier}-#{c.downcase}", proc{print c,"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_menu|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'Cascades', 'menu'=&gt;cascade_menu, 'underline'=&gt;0)</div><div class='del'>-    add('command', 'label'=&gt;'Print hello(¤³¤ó¤Ë¤Á¤Ï)', </div><div class='del'>-        'command'=&gt;proc{print "Hello(¤³¤ó¤Ë¤Á¤Ï)\n"}, </div><div class='del'>-        'accelerator'=&gt;"#{modifier}+H", 'underline'=&gt;6)</div><div class='del'>-    $menu8x_demo.bind("#{modifier}-h", proc{print "Hello(¤³¤ó¤Ë¤Á¤Ï)\n"})</div><div class='del'>-    add('command', 'label'=&gt;'Print goodbye(¤µ¤è¤¦¤Ê¤é)', </div><div class='del'>-        'command'=&gt;proc{print "Goodbye(¤µ¤è¤¦¤Ê¤é)\n"}, </div><div class='del'>-        'accelerator'=&gt;"#{modifier}+G", 'underline'=&gt;6)</div><div class='del'>-    $menu8x_demo.bind("#{modifier}-g", proc{print "Goodbye(¤µ¤è¤¦¤Ê¤é)\n"})</div><div class='del'>-</div><div class='del'>-    TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_check|</div><div class='del'>-      cascade_menu.add('cascade', 'label'=&gt;'Check buttons(¥Á¥§¥Ã¥¯¥Ü¥¿¥ó)', </div><div class='del'>-                       'menu'=&gt;cascade_check, 'underline'=&gt;0)</div><div class='del'>-      oil = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'¥ª¥¤¥ëÅÀ¸¡', 'variable'=&gt;oil)</div><div class='del'>-      trans = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'¥È¥é¥ó¥¹¥ß¥Ã¥·¥ç¥óÅÀ¸¡', 'variable'=&gt;trans)</div><div class='del'>-      brakes = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'¥Ö¥ì¡¼¥­ÅÀ¸¡', 'variable'=&gt;brakes)</div><div class='del'>-      lights = TkVariable.new(0)</div><div class='del'>-      add('check', 'label'=&gt;'¥é¥¤¥ÈÅÀ¸¡', 'variable'=&gt;lights)</div><div class='del'>-      add('separator')</div><div class='del'>-      add('command', 'label'=&gt;'¸½ºß¤ÎÃÍ¤òÉ½¼¨', </div><div class='del'>-          'command'=&gt;proc{showVars($menu8x_demo, </div><div class='del'>-                                   ['¥ª¥¤¥ëÅÀ¸¡', oil], </div><div class='del'>-                                   ['¥È¥é¥ó¥¹¥ß¥Ã¥·¥ç¥óÅÀ¸¡', trans], </div><div class='del'>-                                   ['¥Ö¥ì¡¼¥­ÅÀ¸¡', brakes], </div><div class='del'>-                                   ['¥é¥¤¥ÈÅÀ¸¡', lights])} )</div><div class='del'>-      invoke 1</div><div class='del'>-      invoke 3</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    TkMenu.new(m, 'tearoff'=&gt;false) {|cascade_radio|</div><div class='del'>-      cascade_menu.add('cascade', 'label'=&gt;'Radio buttons(¥é¥¸¥ª¥Ü¥¿¥ó)', </div><div class='del'>-                       'menu'=&gt;cascade_radio, 'underline'=&gt;0)</div><div class='del'>-      pointSize = TkVariable.new</div><div class='del'>-      add('radio', 'label'=&gt;'10 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;10)</div><div class='del'>-      add('radio', 'label'=&gt;'14 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;14)</div><div class='del'>-      add('radio', 'label'=&gt;'18 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;18)</div><div class='del'>-      add('radio', 'label'=&gt;'24 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;24)</div><div class='del'>-      add('radio', 'label'=&gt;'32 ¥Ý¥¤¥ó¥È', 'variable'=&gt;pointSize, 'value'=&gt;32)</div><div class='del'>-      add('separator')</div><div class='del'>-      style = TkVariable.new</div><div class='del'>-      add('radio', 'label'=&gt;'¥í¡¼¥Þ¥ó', 'variable'=&gt;style, 'value'=&gt;'roman')</div><div class='del'>-      add('radio', 'label'=&gt;'¥Ü¡¼¥ë¥É', 'variable'=&gt;style, 'value'=&gt;'bold')</div><div class='del'>-      add('radio', 'label'=&gt;'¥¤¥¿¥ê¥Ã¥¯', 'variable'=&gt;style, 'value'=&gt;'italic')</div><div class='del'>-      add('separator')</div><div class='del'>-      add('command', 'label'=&gt;'¸½ºß¤ÎÃÍ¤òÉ½¼¨', </div><div class='del'>-          'command'=&gt;proc{showVars($menu8x_demo, </div><div class='del'>-                                   ['¥Ý¥¤¥ó¥È¥µ¥¤¥º', pointSize], </div><div class='del'>-                                   ['¥¹¥¿¥¤¥ë', style])} )</div><div class='del'>-      invoke 1</div><div class='del'>-      invoke 7</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|icon_menu|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'Icons', 'menu'=&gt;icon_menu, 'underline'=&gt;0)</div><div class='del'>-    add('command', </div><div class='del'>-        'bitmap'=&gt;'@'+[$demo_dir,'..',</div><div class='del'>-                        'images','pattern.xbm'].join(File::Separator),</div><div class='del'>-        'hidemargin'=&gt;1, </div><div class='del'>-        'command'=&gt;proc{TkDialog.new('title'=&gt;'Bitmap Menu Entry', </div><div class='del'>-                                     'text'=&gt;'º£¤¢¤Ê¤¿¤¬ÁªÂò¤·¤¿¥á¥Ë¥å¡¼¤Î¹àÌÜ¤Ï¥Æ¥­¥¹¥È¤Ç¤Ï¤Ê¤¯¥Ó¥Ã¥È¥Þ¥Ã¥×¤òÉ½¼¨¤·¤Æ¤¤¤Þ¤·¤¿¡£¤½¤ì°Ê³°¤ÎÅÀ¤Ç¤ÏÂ¾¤Î¥á¥Ë¥å¡¼¹àÌÜ¤ÈÊÑ¤ï¤ê¤Þ¤»¤ó¡£',</div><div class='del'>-                                     'bitmap'=&gt;'', 'default'=&gt;0, </div><div class='del'>-                                     'buttons'=&gt;'Î»²ò')} )</div><div class='del'>-    ['info', 'questhead', 'error'].each{|icon|</div><div class='del'>-      add('command', 'bitmap'=&gt;icon, 'hidemargin'=&gt;1, </div><div class='del'>-          'command'=&gt;proc{print "You invoked the #{icon} bitmap\n"})</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    entryconfigure(2, 'columnbreak'=&gt;1)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m, 'tearoff'=&gt;false) {|more_menu|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'More', 'menu'=&gt;more_menu, 'underline'=&gt;0)</div><div class='del'>-    [ '¥¨¥ó¥È¥ê','ÊÌ¤Î¥¨¥ó¥È¥ê','²¿¤â¤·¤Ê¤¤','¤Û¤È¤ó¤É²¿¤â¤·¤Ê¤¤',</div><div class='del'>-      '¿ÍÀ¸¤ò°ÕµÁ¤¢¤ë¤â¤Î¤Ë' ].each{|i|</div><div class='del'>-      add('command', 'label'=&gt;i, </div><div class='del'>-          'command'=&gt;proc{print "You invoked \"#{i}\"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenu.new(m) {|colors_menu|</div><div class='del'>-    m.add('cascade', 'label'=&gt;'Colors', 'menu'=&gt;colors_menu, 'underline'=&gt;1)</div><div class='del'>-    ['red', 'orange', 'yellow', 'green', 'blue'].each{|c|</div><div class='del'>-      add('command', 'label'=&gt;c, 'background'=&gt;c, </div><div class='del'>-          'command'=&gt;proc{print "You invoked \"#{c}\"\n"})</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  $menu8x_demo.configure('menu'=&gt;m)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMenu.bind('&lt;MenuSelect&gt;', </div><div class='del'>-            proc{|w| </div><div class='del'>-              begin</div><div class='del'>-                label = w.entrycget('active', 'label')</div><div class='del'>-              rescue</div><div class='del'>-                label = '    '</div><div class='del'>-              end</div><div class='del'>-              $menu8xstatus.value = label</div><div class='del'>-              Tk.update('idletasks')</div><div class='del'>-            }, '%W')</div><div class='del'>-</div><div class='del'>-end ; # Tk 8.x</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/menubu.rb b/ext/tk/sample/demos-jp/menubu.rb<br/>deleted file mode 100644<br/>index 90dc367305..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/menubu.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/menubu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,238 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-require "tkcanvas"</div><div class='del'>-</div><div class='del'>-def optionMenu(menubutton, varName, firstValue, *rest)</div><div class='del'>-  varName.value = firstValue</div><div class='del'>-  configoptions = {'textvariable'=&gt;varName,'indicatoron'=&gt;'on',</div><div class='del'>-    'relief'=&gt;'raised','borderwidth'=&gt;2,'highlightthickness'=&gt;2,</div><div class='del'>-    'anchor'=&gt;'c','direction'=&gt;'flush'}</div><div class='del'>-  configoptions.each {|key, value|</div><div class='del'>-    menubutton.configure(key, value)</div><div class='del'>-  }</div><div class='del'>-  menu = TkMenu.new(menubutton) {</div><div class='del'>-    tearoff 'off'</div><div class='del'>-    add 'radio', 'label'=&gt;firstValue, 'variable'=&gt;varName</div><div class='del'>-  }</div><div class='del'>-  menubutton.menu(menu)</div><div class='del'>-  for i in rest</div><div class='del'>-    menu.add 'radio', 'label'=&gt;i, 'variable'=&gt;varName</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  return menu</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if defined?($menubu_demo) &amp;&amp; $menubu_demo</div><div class='del'>-  $menubu_demo.destroy</div><div class='del'>-  $menubu_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$menubu_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Menu Button Demonstration")</div><div class='del'>-  iconname("menubutton")</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-positionWindow($menubu_demo)</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($menubu_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# version check</div><div class='del'>-if $tk_version.to_f &lt; 8.0</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame,'font'=&gt;$font,'wraplength'=&gt;'4i','justify'=&gt;'left') {</div><div class='del'>-    text("¼Â¹Ô¤·¤è¤¦¤È¤·¤¿¥¹¥¯¥ê¥×¥È¤Ï Tk8.0 °Ê¾å¤ÇÍøÍÑ¤Ç¤­¤ëµ¡Ç½¤òÍøÍÑ¤·¤Æ¤¤¤ë¤¿¤á¡¢¤¢¤Ê¤¿¤Î Ruby#{VERSION}/Tk#{$tk_version}#{(Tk::JAPANIZED_TK)? 'jp': ''} ¤Ç¤ÏÀµ¾ï¤Ë¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¡£¤è¤Ã¤Æ¥Ç¥â¤Î¼Â¹Ô¤òÃæ»ß¤·¤Þ¤·¤¿¡£¤¿¤À¤·¡¢²¼¤Î¥³¡¼¥É»²¾È¥Ü¥¿¥ó¤ò²¡¤¹¤³¤È¤Ç¡¢¼Â¹Ô¤¬Ãæ»ß¤µ¤ì¤¿¥¹¥¯¥ê¥×¥È¤Î¥½¡¼¥¹¤ò»²¾È¤¹¤ë¤³¤È¤Ï²ÄÇ½¤Ç¤¹¡£")</div><div class='del'>-}.pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $menubu_demo</div><div class='del'>-      $menubu_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'menubu'}</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'>-else ; # Tk8.x</div><div class='del'>-</div><div class='del'>-body = TkFrame.new(base_frame)</div><div class='del'>-body.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-below = TkMenubutton.new(body) {</div><div class='del'>-  text "Below"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'below'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-belowMenu = TkMenu.new(below) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Below menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Below menu.\""}</div><div class='del'>-}</div><div class='del'>-below.menu(belowMenu)</div><div class='del'>-below.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'n')</div><div class='del'>-</div><div class='del'>-below = TkMenubutton.new(body) {</div><div class='del'>-  text "Below"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'below'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-belowMenu = TkMenu.new(below) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Below menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Below menu.\""}</div><div class='del'>-}</div><div class='del'>-below.menu(belowMenu)</div><div class='del'>-below.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'n')</div><div class='del'>-</div><div class='del'>-below = TkMenubutton.new(body) {</div><div class='del'>-  text "Below"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'below'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-belowMenu = TkMenu.new(below) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Below menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Below menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Below menu.\""}</div><div class='del'>-}</div><div class='del'>-below.menu(belowMenu)</div><div class='del'>-below.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'n')</div><div class='del'>-</div><div class='del'>-right = TkMenubutton.new(body) {</div><div class='del'>-  text "Right"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'right'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-rightMenu = TkMenu.new(right) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Right menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Left menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Right menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Right menu.\""}</div><div class='del'>-}</div><div class='del'>-right.menu(rightMenu)</div><div class='del'>-right.grid('row'=&gt;1, 'column'=&gt;0, 'sticky'=&gt;'w')</div><div class='del'>-</div><div class='del'>-left = TkMenubutton.new(body) {</div><div class='del'>-  text "Left"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'left'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-leftMenu = TkMenu.new(left) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Left menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Left menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Left menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Left menu.\""}</div><div class='del'>-}</div><div class='del'>-left.menu(leftMenu)</div><div class='del'>-left.grid('row'=&gt;1, 'column'=&gt;2, 'sticky'=&gt;'e')</div><div class='del'>-</div><div class='del'>-center = TkFrame.new(body) {</div><div class='del'>-  grid('row'=&gt;1, 'column'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-above = TkMenubutton.new(body) {</div><div class='del'>-  text "Above"</div><div class='del'>-  underline 0</div><div class='del'>-  direction 'above'</div><div class='del'>-  relief 'raised'</div><div class='del'>-}</div><div class='del'>-aboveMenu = TkMenu.new(above) {</div><div class='del'>-  tearoff 0</div><div class='del'>-  add 'command', 'label'=&gt;"Above menu: first item", 'command'=&gt;proc {puts "\"You have selected the first item from the Above menu.\""}</div><div class='del'>-  add 'command', 'label'=&gt;"Above menu: second item", 'command'=&gt;proc {puts "\"You have selected the second item from the Above menu.\""}</div><div class='del'>-}</div><div class='del'>-above.menu(aboveMenu)</div><div class='del'>-above.grid('row'=&gt;2, 'column'=&gt;1, 'sticky'=&gt;'s')</div><div class='del'>-</div><div class='del'>-center = TkFrame.new(body) {</div><div class='del'>-  grid('row'=&gt;1, 'column'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc {</div><div class='del'>-      tmppath = $menubu_demo</div><div class='del'>-      $menubu_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc { showCode 'menubu' }</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}.pack('side'=&gt;'bottom', 'expand'=&gt;'yes', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-msg = TkLabel.new(center) {</div><div class='del'>-#  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "¤³¤ì¤Ï¥á¥Ë¥å¡¼¥Ü¥¿¥ó¤Î¥Ç¥â¤Ç¤¹¡£\"Below\"¤Î¥Ü¥¿¥ó¤Ï\</div><div class='del'>-²¼¤Ë¥á¥Ë¥å¡¼¤ò½Ð¤·¡¢\"Right\"¤Î¥Ü¥¿¥ó¤Ï±¦¤Ë¥á¥Ë¥å¡¼¤ò½Ð¤·¤Æ¡¢\</div><div class='del'>-¡Ä¡Ä¤È¤Ê¤ê¤Þ¤¹¡£¤³¤ÎÊ¸¾Ï¤Î²¼¤Ë¤Ï2¤Ä¤Î¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤¬¤¢¤ê¤Þ¤¹¡£\</div><div class='del'>-1¤Ä¤ÏÉáÄÌ¤Î¥á¥Ë¥å¡¼¤Ç¡¢¤â¤¦1¤Ä¤Ï16¿§¤Î¥Ñ¥ì¥Ã¥È¤Ç¤¹¡£"</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top', 'padx'=&gt;25, 'pady'=&gt;25)</div><div class='del'>-</div><div class='del'>-TkFrame.new(center) {|f|</div><div class='del'>-  menubuttonoptions = TkVariable.new</div><div class='del'>-  mbutton = TkMenubutton.new(f)</div><div class='del'>-  options = optionMenu(mbutton, menubuttonoptions, </div><div class='del'>-                       'one', 'two', 'three')</div><div class='del'>-  mbutton.pack('side'=&gt;'left', 'padx'=&gt;25, 'pady'=&gt;25)</div><div class='del'>-  paletteColor = TkVariable.new</div><div class='del'>-  colors = ['Black','red4','DarkGreen','NavyBlue', 'gray75',</div><div class='del'>-    'Red','Green','Blue','gray50','Yellow','Cyan','Magenta',</div><div class='del'>-    'White','Brown','DarkSeaGreen','DarkViolet']</div><div class='del'>-  colorMenuButton = TkMenubutton.new(f)</div><div class='del'>-  m = optionMenu(colorMenuButton, paletteColor, *colors)</div><div class='del'>-  begin</div><div class='del'>-    windowingsystem = Tk.windowingsystem()</div><div class='del'>-  rescue</div><div class='del'>-    windowingsystem = ""</div><div class='del'>-  end</div><div class='del'>-  if windowingsystem == "classic" || windowingsystem == "aqua"</div><div class='del'>-    topBorderColor = 'Black'</div><div class='del'>-    bottomBorderColor = 'Black'</div><div class='del'>-  else</div><div class='del'>-    topBorderColor = 'gray50'</div><div class='del'>-    bottomBorderColor = 'gray75'</div><div class='del'>-  end</div><div class='del'>-  for i in 0..15</div><div class='del'>-    image = TkPhotoImage.new('height'=&gt;16, 'width'=&gt;16)</div><div class='del'>-    image.put(topBorderColor, 0, 0, 16, 1)</div><div class='del'>-    image.put(topBorderColor, 0, 1, 1, 16)</div><div class='del'>-    image.put(bottomBorderColor, 0, 15, 16, 16)</div><div class='del'>-    image.put(bottomBorderColor, 15, 1, 16, 16)</div><div class='del'>-    image.put(colors[i], 1, 1, 15, 15)</div><div class='del'>-</div><div class='del'>-    selectimage = TkPhotoImage.new('height'=&gt;16, 'width'=&gt;16)</div><div class='del'>-    selectimage.put('Black', 0, 0, 16, 2)</div><div class='del'>-    selectimage.put('Black', 0, 2, 2, 16)</div><div class='del'>-    selectimage.put('Black', 2, 14, 16, 16)</div><div class='del'>-    selectimage.put('Black', 14, 2, 16, 14)</div><div class='del'>-    selectimage.put(colors[i], 2, 2, 14, 14)</div><div class='del'>-</div><div class='del'>-    m.entryconfigure(i, 'image'=&gt;image, 'selectimage'=&gt;selectimage, 'hidemargin'=&gt;'on')</div><div class='del'>-  end</div><div class='del'>-  m.configure('tearoff', 'on')</div><div class='del'>-  for c in ['Black', 'gray75', 'gray50', 'White']</div><div class='del'>-    m.entryconfigure(c, 'columnbreak'=&gt;1)</div><div class='del'>-  end</div><div class='del'>-  colorMenuButton.pack('side'=&gt;'left', 'padx'=&gt;25, 'pady'=&gt;25)</div><div class='del'>-  pack 'padx'=&gt;25, 'pady'=&gt;25</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-end ; # Tk8.x</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/msgbox.rb b/ext/tk/sample/demos-jp/msgbox.rb<br/>deleted file mode 100644<br/>index 88380e08bd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/msgbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/msgbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,89 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# message boxes 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?($msgbox_demo) &amp;&amp; $msgbox_demo</div><div class='del'>-  $msgbox_demo.destroy </div><div class='del'>-  $msgbox_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$msgbox_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Message Box Demonstration")</div><div class='del'>-  iconname("messagebox")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($msgbox_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'4i', 'justify'=&gt;'left',</div><div class='del'>-            'text'=&gt;"¤Þ¤ºÉ½¼¨¤¹¤ë¥¢¥¤¥³¥ó¤È¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹¤Î¼ïÎà¤òÁª¤ó¤Ç²¼¤µ¤¤¡£¤½¤Î¸å¤Ë\"¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹\"¥Ü¥¿¥ó¤ò²¡¤¹¤È¡¢»ØÄê¤·¤¿¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£").pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $msgbox_demo</div><div class='del'>-      $msgbox_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'msgbox'}</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 '¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹'</div><div class='del'>-    command proc{showMessageBox $msgbox_demo}</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'>-$msgbox_leftframe  = TkFrame.new(base_frame)</div><div class='del'>-$msgbox_rightframe = TkFrame.new(base_frame)</div><div class='del'>-$msgbox_leftframe .pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y', </div><div class='del'>-                        'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-$msgbox_rightframe.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y', </div><div class='del'>-                        'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-TkLabel.new($msgbox_leftframe, 'text'=&gt;'¥¢¥¤¥³¥ó').pack('side'=&gt;'top')</div><div class='del'>-TkFrame.new($msgbox_leftframe, 'relief'=&gt;'ridge', 'bd'=&gt;1, 'height'=&gt;2)\</div><div class='del'>-.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'no')</div><div class='del'>-</div><div class='del'>-$msgboxIcon = TkVariable.new('info')</div><div class='del'>-['error', 'info', 'question', 'warning'].each {|icon|</div><div class='del'>-  TkRadioButton.new($msgbox_leftframe, 'text'=&gt;icon, 'variable'=&gt;$msgboxIcon, </div><div class='del'>-                    'relief'=&gt;'flat', 'value'=&gt;icon, 'width'=&gt;16, </div><div class='del'>-                    'anchor'=&gt;'w').pack('side'=&gt;'top', 'pady'=&gt;2, </div><div class='del'>-                                        'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkLabel.new($msgbox_rightframe, 'text'=&gt;'¼ïÎà').pack('side'=&gt;'top')</div><div class='del'>-TkFrame.new($msgbox_rightframe, 'relief'=&gt;'ridge', 'bd'=&gt;1, 'height'=&gt;2)\</div><div class='del'>-.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'no')</div><div class='del'>-</div><div class='del'>-$msgboxType = TkVariable.new('ok')</div><div class='del'>-['abortretryignore', 'ok', 'okcancel', </div><div class='del'>-  'retrycancel', 'yesno', 'yesnocancel'].each {|type|</div><div class='del'>-  TkRadioButton.new($msgbox_rightframe, 'text'=&gt;type, 'variable'=&gt;$msgboxType, </div><div class='del'>-                    'relief'=&gt;'flat', 'value'=&gt;type, 'width'=&gt;16, </div><div class='del'>-                    'anchor'=&gt;'w').pack('side'=&gt;'top', 'pady'=&gt;2, </div><div class='del'>-                                        'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def showMessageBox(w)</div><div class='del'>-  button = Tk.messageBox('icon'=&gt;$msgboxIcon.value, 'type'=&gt;$msgboxType.value, </div><div class='del'>-                         'title'=&gt;'Message', 'parent'=&gt;w,</div><div class='del'>-                         'message'=&gt;"¤³¤ì¤Ï\"#{$msgboxType.value}\"¤È¤¤¤¦¼ïÎà¤Î¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹¤Ç¡¢\"#{$msgboxIcon.value}\"¤Î¥¢¥¤¥³¥ó¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£")</div><div class='del'>-</div><div class='del'>-  Tk.messageBox('icon'=&gt;'info', 'type'=&gt;'ok', 'parent'=&gt;w, </div><div class='del'>-                'message'=&gt;"¤¢¤Ê¤¿¤Ï \"#{button}\" ¤ò²¡¤·¤Þ¤·¤¿¤Í¡£")</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/msgbox2.rb b/ext/tk/sample/demos-jp/msgbox2.rb<br/>deleted file mode 100644<br/>index d61f25129a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/msgbox2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/msgbox2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,90 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# message boxes 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?($msgbox2_demo) &amp;&amp; $msgbox2_demo</div><div class='del'>-  $msgbox2_demo.destroy </div><div class='del'>-  $msgbox2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$msgbox2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Message Box Demonstration")</div><div class='del'>-  iconname("messagebox")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($msgbox2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'4i', 'justify'=&gt;'left',</div><div class='del'>-            'text'=&gt;"¤Þ¤ºÉ½¼¨¤¹¤ë¥¢¥¤¥³¥ó¤È¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹¤Î¼ïÎà¤òÁª¤ó¤Ç²¼¤µ¤¤¡£¤½¤Î¸å¤Ë\"¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹\"¥Ü¥¿¥ó¤ò²¡¤¹¤È¡¢»ØÄê¤µ¤ì¤¿·Á¼°¤Ç¡¢¥á¥Ã¥»¡¼¥¸¤È¾ÜºÙ¥Æ¥­¥¹¥È¤È¤ò»ý¤Ã¤¿¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£").pack('side'=&gt;'top')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $msgbox2_demo</div><div class='del'>-      $msgbox2_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'msgbox2'}</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 '¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹'</div><div class='del'>-    command proc{showMessageBox $msgbox2_demo}</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'>-$msgbox_leftframe  = TkFrame.new(base_frame)</div><div class='del'>-$msgbox_rightframe = TkFrame.new(base_frame)</div><div class='del'>-$msgbox_leftframe .pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y', </div><div class='del'>-                        'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-$msgbox_rightframe.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'y', </div><div class='del'>-                        'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-TkLabel.new($msgbox_leftframe, 'text'=&gt;'¥¢¥¤¥³¥ó').pack('side'=&gt;'top')</div><div class='del'>-TkFrame.new($msgbox_leftframe, 'relief'=&gt;'ridge', 'bd'=&gt;1, 'height'=&gt;2)\</div><div class='del'>-.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'no')</div><div class='del'>-</div><div class='del'>-$msgboxIcon = TkVariable.new('info')</div><div class='del'>-['error', 'info', 'question', 'warning'].each {|icon|</div><div class='del'>-  TkRadioButton.new($msgbox_leftframe, 'text'=&gt;icon, 'variable'=&gt;$msgboxIcon, </div><div class='del'>-                    'relief'=&gt;'flat', 'value'=&gt;icon, 'width'=&gt;16, </div><div class='del'>-                    'anchor'=&gt;'w').pack('side'=&gt;'top', 'pady'=&gt;2, </div><div class='del'>-                                        'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkLabel.new($msgbox_rightframe, 'text'=&gt;'¼ïÎà').pack('side'=&gt;'top')</div><div class='del'>-TkFrame.new($msgbox_rightframe, 'relief'=&gt;'ridge', 'bd'=&gt;1, 'height'=&gt;2)\</div><div class='del'>-.pack('side'=&gt;'top', 'fill'=&gt;'x', 'expand'=&gt;'no')</div><div class='del'>-</div><div class='del'>-$msgboxType = TkVariable.new('ok')</div><div class='del'>-['abortretryignore', 'ok', 'okcancel', </div><div class='del'>-  'retrycancel', 'yesno', 'yesnocancel'].each {|type|</div><div class='del'>-  TkRadioButton.new($msgbox_rightframe, 'text'=&gt;type, 'variable'=&gt;$msgboxType, </div><div class='del'>-                    'relief'=&gt;'flat', 'value'=&gt;type, 'width'=&gt;16, </div><div class='del'>-                    'anchor'=&gt;'w').pack('side'=&gt;'top', 'pady'=&gt;2, </div><div class='del'>-                                        'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def showMessageBox(w)</div><div class='del'>-  button = Tk.messageBox('icon'=&gt;$msgboxIcon.value, 'type'=&gt;$msgboxType.value, </div><div class='del'>-                         'title'=&gt;'Message', 'parent'=&gt;w,</div><div class='del'>-                         'message'=&gt;"\"#{$msgboxType.value}\"¥¿¥¤¥×¤Î¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹", </div><div class='del'>-                         'detail'=&gt;"¤³¤ì¤Ï\"#{$msgboxType.value}\"¤È¤¤¤¦¼ïÎà¤Î¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹¤Ç¡¢\"#{$msgboxIcon.value}\"¤Î¥¢¥¤¥³¥ó¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£²¼¤Î¥Ü¥¿¥ó¤Î¤¤¤º¤ì¤«¤òÁªÂò¤·¤Æ¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£")</div><div class='del'>-</div><div class='del'>-  Tk.messageBox('icon'=&gt;'info', 'type'=&gt;'ok', 'parent'=&gt;w, </div><div class='del'>-                'message'=&gt;"¤¢¤Ê¤¿¤Ï \"#{button}\" ¤ò²¡¤·¤Þ¤·¤¿¤Í¡£")</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/paned1.rb b/ext/tk/sample/demos-jp/paned1.rb<br/>deleted file mode 100644<br/>index f994e83ff1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/paned1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/paned1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,52 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# paned1.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# a paned window that separates two windows horizontally.</div><div class='del'>-#</div><div class='del'>-# based on "Id: paned1.tcl,v 1.1 2002/02/22 14:07:01 dkf Exp"</div><div class='del'>-</div><div class='del'>-if defined?($paned1_demo) &amp;&amp; $paned1_demo</div><div class='del'>-  $paned1_demo.destroy </div><div class='del'>-  $paned1_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$paned1_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Horizontal Paned Window Demonstration")</div><div class='del'>-  iconname("paned1")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($paned1_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </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'>-²¼¤Î¿§ÉÕ¤±¤µ¤ì¤¿Æó¤Ä¤Î¥¦¥£¥ó¥É¥¦¤Î´Ö¤Î»ÅÀÚ¤êÏÈ¤Ï¡¢°ì¤Ä¤ÎÎÎ°è¤ò¤½¤ì¤¾¤ì¤Î¥¦¥£¥ó¥É¥¦¤Î¤¿¤á¤ËÊ¬³ä¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç¤¹¡£º¸¥Ü¥¿¥ó¤Ç»ÅÀÚ¤ê¤òÁàºî¤¹¤ë¤È¡¢Ê¬³ä¥µ¥¤¥ºÊÑ¹¹¤ÎÁàºîÅÓÃæ¤Ç¤ÏºÆÉ½¼¨¤Ï¤Ê¤µ¤ì¤º¡¢³ÎÄê¤µ¤»¤¿¤È¤­¤ËÉ½¼¨¤¬¹¹¿·¤µ¤ì¤Þ¤¹¡£¥Þ¥¦¥¹¤Ë¤è¤ë»ÅÀÚ¤ê¤ÎÁàºî¤ËÄÉ¿ï¤·¤Æ¥µ¥¤¥º¤òÊÑ¹¹¤·¤¿É½¼¨¤¬¤Ê¤ï¤ì¤ë¤è¤¦¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢¥Þ¥¦¥¹¤ÎÃæ±û¥Ü¥¿¥ó¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-¤â¤·¤¢¤Ê¤¿¤¬»È¤Ã¤Æ¤¤¤ë Ruby ¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë Tk ¥é¥¤¥Ö¥é¥ê¤¬ panedwindow ¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤</div><div class='del'>-¾ì¹ç¡¢¤³¤Î¥Ç¥â¤Ï¤¦¤Þ¤¯Æ°¤«¤Ê¤¤¤Ï¤º¤Ç¤¹¡£¤½¤Î¾ì¹ç¤Ë¤Ï panedwindow ¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ê</div><div class='del'>-¤è¤ê¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î Tk ¤òÁÈ¤ß¹ç¤ï¤»¤Æ»î¤¹</div><div class='del'>-¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-# The bottom buttons</div><div class='del'>-TkFrame.new(base_frame){|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;'ÊÄ¤¸¤ë', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 $paned1_demo.destroy</div><div class='del'>-                 $paned1_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;'¥³¡¼¥É»²¾È', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 showCode 'paned1'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkPanedwindow.new(base_frame, :orient=&gt;:horizontal){|f|</div><div class='del'>-  add(Tk::Label.new(f, :text=&gt;"This is the\nleft side", :bg=&gt;'yellow'), </div><div class='del'>-      Tk::Label.new(f, :text=&gt;"This is the\nright side", :bg=&gt;'cyan'))</div><div class='del'>-</div><div class='del'>-  pack(:side=&gt;:top, :expand=&gt;true, :fill=&gt;:both, :pady=&gt;2, :padx=&gt;'2m')</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/paned2.rb b/ext/tk/sample/demos-jp/paned2.rb<br/>deleted file mode 100644<br/>index cdc8253402..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/paned2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/paned2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,100 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# paned2.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# a paned window that separates two windows vertically.</div><div class='del'>-#</div><div class='del'>-# based on "Id: paned2.tcl,v 1.1 2002/02/22 14:07:01 dkf Exp"</div><div class='del'>-</div><div class='del'>-if defined?($paned2_demo) &amp;&amp; $paned2_demo</div><div class='del'>-  $paned2_demo.destroy </div><div class='del'>-  $paned2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$paned2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Vertical Paned Window Demonstration")</div><div class='del'>-  iconname("paned2")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($paned2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </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'>-²¼¤Î¥¹¥¯¥í¡¼¥ë¥Ð¡¼ÉÕ¤­¤Î¥¦¥£¥¸¥§¥Ã¥È¤¬ÃÖ¤«¤ì¤¿Æó¤Ä¤Î¥¦¥£¥ó¥É¥¦¤Î´Ö¤Î»ÅÀÚ¤êÏÈ¤Ï¡¢°ì¤Ä¤ÎÎÎ°è¤ò¤½¤ì¤¾¤ì¤Î¥¦¥£¥ó¥É¥¦¤Î¤¿¤á¤ËÊ¬³ä¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç¤¹¡£º¸¥Ü¥¿¥ó¤Ç»ÅÀÚ¤ê¤òÁàºî¤¹¤ë¤È¡¢Ê¬³ä¥µ¥¤¥ºÊÑ¹¹¤ÎÁàºîÅÓÃæ¤Ç¤ÏºÆÉ½¼¨¤Ï¤Ê¤µ¤ì¤º¡¢³ÎÄê¤µ¤»¤¿¤È¤­¤ËÉ½¼¨¤¬¹¹¿·¤µ¤ì¤Þ¤¹¡£¥Þ¥¦¥¹¤Ë¤è¤ë»ÅÀÚ¤ê¤ÎÁàºî¤ËÄÉ¿ï¤·¤Æ¥µ¥¤¥º¤òÊÑ¹¹¤·¤¿É½¼¨¤¬¤Ê¤ï¤ì¤ë¤è¤¦¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢¥Þ¥¦¥¹¤ÎÃæ±û¥Ü¥¿¥ó¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-¤â¤·¤¢¤Ê¤¿¤¬»È¤Ã¤Æ¤¤¤ë Ruby ¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë Tk ¥é¥¤¥Ö¥é¥ê¤¬ panedwindow ¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤</div><div class='del'>-¾ì¹ç¡¢¤³¤Î¥Ç¥â¤Ï¤¦¤Þ¤¯Æ°¤«¤Ê¤¤¤Ï¤º¤Ç¤¹¡£¤½¤Î¾ì¹ç¤Ë¤Ï panedwindow ¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ê</div><div class='del'>-¤è¤ê¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î Tk ¤òÁÈ¤ß¹ç¤ï¤»¤Æ»î¤¹</div><div class='del'>-¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-# The bottom buttons</div><div class='del'>-TkFrame.new(base_frame){|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;'ÊÄ¤¸¤ë', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 $paned2_demo.destroy</div><div class='del'>-                 $paned2_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;'¥³¡¼¥É»²¾È', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 showCode 'paned2'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-paneList = TkVariable.new  # define as normal variable (not array)</div><div class='del'>-paneList.value = [         # ruby's array --&gt; tcl's list</div><div class='del'>-    'Ruby/Tk ¤Î¥¦¥£¥¸¥§¥Ã¥È°ìÍ÷',</div><div class='del'>-    'TkButton', </div><div class='del'>-    'TkCanvas', </div><div class='del'>-    'TkCheckbutton', </div><div class='del'>-    'TkEntry', </div><div class='del'>-    'TkFrame', </div><div class='del'>-    'TkLabel', </div><div class='del'>-    'TkLabelframe', </div><div class='del'>-    'TkListbox', </div><div class='del'>-    'TkMenu', </div><div class='del'>-    'TkMenubutton', </div><div class='del'>-    'TkMessage', </div><div class='del'>-    'TkPanedwindow', </div><div class='del'>-    'TkRadiobutton', </div><div class='del'>-    'TkScale', </div><div class='del'>-    'TkScrollbar', </div><div class='del'>-    'TkSpinbox', </div><div class='del'>-    'TkText', </div><div class='del'>-    'TkToplevel'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-# Create the pane itself</div><div class='del'>-TkPanedwindow.new(base_frame, :orient=&gt;:vertical){|f|</div><div class='del'>-  pack(:side=&gt;:top, :expand=&gt;true, :fill=&gt;:both, :pady=&gt;2, :padx=&gt;'2m')</div><div class='del'>-</div><div class='del'>-  add(TkFrame.new(f){|paned2_top|</div><div class='del'>-        TkListbox.new(paned2_top, :listvariable=&gt;paneList) {</div><div class='del'>-          # Invert the first item to highlight it</div><div class='del'>-          itemconfigure(0, :background=&gt;self.cget(:foreground), </div><div class='del'>-                           :foreground=&gt;self.cget(:background) )</div><div class='del'>-          yscrollbar(TkScrollbar.new(paned2_top).pack(:side=&gt;:right, </div><div class='del'>-                                                      :fill=&gt;:y))</div><div class='del'>-          pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-        }</div><div class='del'>-      }, </div><div class='del'>-</div><div class='del'>-      TkFrame.new(f, :height=&gt;120) {|paned2_bottom|</div><div class='del'>-        # The bottom window is a text widget with scrollbar</div><div class='del'>-        paned2_xscr = TkScrollbar.new(paned2_bottom)</div><div class='del'>-        paned2_yscr = TkScrollbar.new(paned2_bottom)</div><div class='del'>-        paned2_text = TkText.new(paned2_bottom, :width=&gt;30, :wrap=&gt;:non) {</div><div class='del'>-          insert('1.0', '¤³¤³¤ËÇÛÃÖ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ï¡¢' + </div><div class='del'>-                        '¤´¤¯ÉáÄÌ¤Î¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Ç¤¹¡£')</div><div class='del'>-          xscrollbar(paned2_xscr)</div><div class='del'>-          yscrollbar(paned2_yscr)</div><div class='del'>-        }</div><div class='del'>-        Tk.grid(paned2_text, paned2_yscr, :sticky=&gt;'nsew')</div><div class='del'>-        Tk.grid(paned2_xscr, :sticky=&gt;'nsew')</div><div class='del'>-        TkGrid.columnconfigure(paned2_bottom, 0, :weight=&gt;1)</div><div class='del'>-        TkGrid.rowconfigure(paned2_bottom, 0, :weight=&gt;1)</div><div class='del'>-      } )</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/pendulum.rb b/ext/tk/sample/demos-jp/pendulum.rb<br/>deleted file mode 100644<br/>index b115f5be2c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/pendulum.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/pendulum.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,242 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# This demonstration illustrates how Tcl/Tk can be used to construct</div><div class='del'>-# simulations of physical systems.</div><div class='del'>-# (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?($pendulum_demo) &amp;&amp; $pendulum_demo</div><div class='del'>-  $pendulum_demo.destroy </div><div class='del'>-  $pendulum_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# create toplevel widget</div><div class='del'>-$pendulum_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Pendulum Animation Demonstration")</div><div class='del'>-  iconname("pendulum")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($pendulum_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# create label</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text '¤³¤Î¥Ç¥â¤Ï¡¢ÊªÍý·Ï¤Î¥·¥ß¥å¥ì¡¼¥·¥ç¥ó¤Ë´Ø¤ï¤ë¤è¤¦¤Ê¥¢¥Ë¥á¡¼¥·¥ç¥ó¼Â¹Ô¤¹¤ë¤¿¤á¤Ë Ruby/Tk ¤ò¤É¤Î¤è¤¦¤ËÍÑ¤¤¤ë¤³¤È¤¬¤Ç¤­¤ë¤«¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£º¸Â¦¤Î¥­¥ã¥ó¥Ð¥¹¤ÏÃ±½ã¤Ê¿¶¤ê»Ò¤Ç¤¢¤ëÊªÍý·Ï¼«ÂÎ¤Î¥°¥é¥Õ¥£¥«¥ëÉ½¸½¤Ç¤¢¤ë¤Î¤ËÂÐ¤·¡¢±¦Â¦¤Î¥­¥ã¥ó¥Ð¥¹¤Ï·Ï¤Î°ÌÁê¶õ´Ö¤Î¥°¥é¥Õ¡Ê³ÑÂ®ÅÙ¤È³ÑÅÙ¤È¤ò¥×¥í¥Ã¥È¤·¤¿¤â¤Î¡Ë¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£º¸Â¦¤Î¥­¥ã¥ó¥Ð¥¹¾å¤Ç¥¯¥ê¥Ã¥¯¤ª¤è¤Ó¥É¥é¥Ã¥°¤ò¹Ô¤Ã¤Æ¿¶¤ê»Ò¤Î½Å¤ê¤Î°ÌÃÖ¤òÊÑ¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£'</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $pendulum_demo</div><div class='del'>-      $pendulum_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'pendulum'}</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 PendulumAnimationDemo</div><div class='del'>-  def initialize(frame)</div><div class='del'>-    # Create some structural widgets</div><div class='del'>-    @pane = TkPanedWindow.new(frame, :orient=&gt;:horizontal).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-#    @pane.add(@lf1 = TkLabelFrame.new(@pane, :text=&gt;'Pendulum Simulation'))</div><div class='del'>-#    @pane.add(@lf2 = TkLabelFrame.new(@pane, :text=&gt;'Phase Space'))</div><div class='del'>-    @lf1 = TkLabelFrame.new(@pane, :text=&gt;'Pendulum Simulation')</div><div class='del'>-    @lf2 = TkLabelFrame.new(@pane, :text=&gt;'Phase Space')</div><div class='del'>-</div><div class='del'>-    # Create the canvas containing the graphical representation of the</div><div class='del'>-    # simulated system.</div><div class='del'>-    @c = TkCanvas.new(@lf1, :width=&gt;320, :height=&gt;200, :background=&gt;'white', </div><div class='del'>-                      :borderwidth=&gt;2, :relief=&gt;:sunken)</div><div class='del'>-    TkcText.new(@c, 5, 5, :anchor=&gt;:nw, </div><div class='del'>-                :text=&gt;'Click to Adjust Bob Start Position')</div><div class='del'>-    # Coordinates of these items don't matter; they will be set properly below</div><div class='del'>-    @plate = TkcLine.new(@c, 0, 25, 320, 25, :width=&gt;2, :fill=&gt;'grey50')</div><div class='del'>-    @rod = TkcLine.new(@c, 1, 1, 1, 1, :width=&gt;3, :fill=&gt;'black')</div><div class='del'>-    @bob = TkcOval.new(@c, 1, 1, 2, 2, </div><div class='del'>-                       :width=&gt;3, :fill=&gt;'yellow', :outline=&gt;'black')</div><div class='del'>-    TkcOval.new(@c, 155, 20, 165, 30, :fill=&gt;'grey50', :outline=&gt;'')</div><div class='del'>-</div><div class='del'>-    # pack</div><div class='del'>-    @c.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    # Create the canvas containing the phase space graph; this consists of</div><div class='del'>-    # a line that gets gradually paler as it ages, which is an extremely</div><div class='del'>-    # effective visual trick.</div><div class='del'>-    @k = TkCanvas.new(@lf2, :width=&gt;320, :height=&gt;200, :background=&gt;'white', </div><div class='del'>-                      :borderwidth=&gt;2, :relief=&gt;:sunken)</div><div class='del'>-    @y_axis = TkcLine.new(@k, 160, 200, 160, 0, :fill=&gt;'grey75', :arrow=&gt;:last)</div><div class='del'>-    @x_axis = TkcLine.new(@k, 0, 100, 320, 100, :fill=&gt;'grey75', :arrow=&gt;:last)</div><div class='del'>-</div><div class='del'>-    @graph = {}</div><div class='del'>-    90.step(0, -10){|i|</div><div class='del'>-      # Coordinates of these items don't matter; </div><div class='del'>-      # they will be set properly below</div><div class='del'>-      @graph[i] = TkcLine.new(@k, 0, 0, 1, 1, :smooth=&gt;true, :fill=&gt;"grey#{i}")</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # labels</div><div class='del'>-    @label_theta = TkcText.new(@k, 0, 0, :anchor=&gt;:ne, </div><div class='del'>-                               :text=&gt;'q', :font=&gt;'Symbol 8')</div><div class='del'>-    @label_dtheta = TkcText.new(@k, 0, 0, :anchor=&gt;:ne, </div><div class='del'>-                               :text=&gt;'dq', :font=&gt;'Symbol 8')</div><div class='del'>-</div><div class='del'>-    # pack</div><div class='del'>-    @k.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    # Initialize some variables</div><div class='del'>-    @points = []</div><div class='del'>-    @theta = 45.0</div><div class='del'>-    @dTheta = 0.0</div><div class='del'>-    @length = 150</div><div class='del'>-</div><div class='del'>-    # animation loop</div><div class='del'>-    @timer = TkTimer.new(15){ repeat }</div><div class='del'>-</div><div class='del'>-    # binding</div><div class='del'>-    @c.bindtags_unshift(btag = TkBindTag.new)</div><div class='del'>-    btag.bind('Destroy'){ @timer.stop }</div><div class='del'>-    btag.bind('1', proc{|x, y| @timer.stop; showPendulum(x.to_i, y.to_i)}, </div><div class='del'>-              '%x %y')</div><div class='del'>-    btag.bind('B1-Motion', proc{|x, y| showPendulum(x.to_i, y.to_i)}, '%x %y')</div><div class='del'>-    btag.bind('ButtonRelease-1', </div><div class='del'>-              proc{|x, y| showPendulum(x.to_i, y.to_i); @timer.start }, </div><div class='del'>-              '%x %y')</div><div class='del'>-</div><div class='del'>-    btag.bind('Configure', proc{|w| @plate.coords(0, 25, w.to_i, 25)}, '%w')</div><div class='del'>-</div><div class='del'>-    @k.bind('Configure', proc{|h, w| </div><div class='del'>-              h = h.to_i</div><div class='del'>-              w = w.to_i</div><div class='del'>-              @psh = h/2; </div><div class='del'>-              @psw = w/2</div><div class='del'>-              @x_axis.coords(2, @psh, w-2, @psh)</div><div class='del'>-              @y_axis.coords(@psw, h-2, @psw, 2)</div><div class='del'>-              @label_theta.coords(@psw-4, 6)</div><div class='del'>-              @label_dtheta.coords(w-6, @psh+4)</div><div class='del'>-            }, '%h %w')</div><div class='del'>-</div><div class='del'>-    # add</div><div class='del'>-    Tk.update</div><div class='del'>-    @pane.add(@lf1)</div><div class='del'>-    @pane.add(@lf2)</div><div class='del'>-</div><div class='del'>-    # init display</div><div class='del'>-    showPendulum</div><div class='del'>-</div><div class='del'>-    # animation start</div><div class='del'>-    @timer.start(500)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This procedure makes the pendulum appear at the correct place on the</div><div class='del'>-  # canvas. If the additional arguments x, y are passed instead of computing </div><div class='del'>-  # the position of the pendulum from the length of the pendulum rod and its </div><div class='del'>-  # angle, the length and angle are computed in reverse from the given </div><div class='del'>-  # location (which is taken to be the centre of the pendulum bob.)</div><div class='del'>-  def showPendulum(x=nil, y=nil)</div><div class='del'>-    if x &amp;&amp; y &amp;&amp; (x != 160 || y != 25)</div><div class='del'>-      @dTheta = 0.0</div><div class='del'>-      x2 = x - 160</div><div class='del'>-      y2 = y - 25</div><div class='del'>-      @length = Math.hypot(x2, y2)</div><div class='del'>-      @theta = Math.atan2(x2,y2)*180/Math::PI</div><div class='del'>-    else</div><div class='del'>-      angle = @theta*Math::PI/180</div><div class='del'>-      x = 160 + @length*Math.sin(angle)</div><div class='del'>-      y = 25 + @length*Math.cos(angle)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @rod.coords(160, 25, x, y)</div><div class='del'>-    @bob.coords(x-15, y-15, x+15, y+15)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Update the phase-space graph according to the current angle and the</div><div class='del'>-  # rate at which the angle is changing (the first derivative with</div><div class='del'>-  # respect to time.)</div><div class='del'>-  def showPhase</div><div class='del'>-    unless @psw &amp;&amp; @psh</div><div class='del'>-      @psw = @k.width/2</div><div class='del'>-      @psh = @k.height/2</div><div class='del'>-    end</div><div class='del'>-    @points &lt;&lt; @theta + @psw &lt;&lt; -20*@dTheta + @psh</div><div class='del'>-    if @points.length &gt; 100</div><div class='del'>-      @points = @points[-100..-1]</div><div class='del'>-    end</div><div class='del'>-    (0...100).step(10){|i|</div><div class='del'>-      first = - i</div><div class='del'>-      last = 11 - i</div><div class='del'>-      last = -1 if last &gt;= 0</div><div class='del'>-      next if first &gt; last</div><div class='del'>-      lst = @points[first..last]</div><div class='del'>-      @graph[i].coords(lst) if lst &amp;&amp; lst.length &gt;= 4</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This procedure is the "business" part of the simulation that does</div><div class='del'>-  # simple numerical integration of the formula for a simple rotational</div><div class='del'>-  # pendulum.</div><div class='del'>-  def recomputeAngle</div><div class='del'>-    scaling = 3000.0/@length/@length</div><div class='del'>-</div><div class='del'>-    # To estimate the integration accurately, we really need to</div><div class='del'>-    # compute the end-point of our time-step.  But to do *that*, we</div><div class='del'>-    # need to estimate the integration accurately!  So we try this</div><div class='del'>-    # technique, which is inaccurate, but better than doing it in a</div><div class='del'>-    # single step.  What we really want is bound up in the</div><div class='del'>-    # differential equation:</div><div class='del'>-    #       ..             - sin theta</div><div class='del'>-    #      theta + theta = -----------</div><div class='del'>-    #                         length</div><div class='del'>-    # But my math skills are not good enough to solve this!</div><div class='del'>-</div><div class='del'>-    # first estimate</div><div class='del'>-    firstDDTheta = -Math.sin(@theta * Math::PI/180) * scaling</div><div class='del'>-    midDTheta = @dTheta + firstDDTheta</div><div class='del'>-    midTheta = @theta + (@dTheta + midDTheta)/2</div><div class='del'>-    # second estimate</div><div class='del'>-    midDDTheta = -Math.sin(midTheta * Math::PI/180) * scaling</div><div class='del'>-    midDTheta = @dTheta + (firstDDTheta + midDDTheta)/2</div><div class='del'>-    midTheta = @theta + (@dTheta + midDTheta)/2</div><div class='del'>-    # Now we do a double-estimate approach for getting the final value</div><div class='del'>-    # first estimate</div><div class='del'>-    midDDTheta = -Math.sin(midTheta * Math::PI/180) * scaling</div><div class='del'>-    lastDTheta = midDTheta + midDDTheta</div><div class='del'>-    lastTheta = midTheta + (midDTheta+ lastDTheta)/2</div><div class='del'>-    # second estimate</div><div class='del'>-    lastDDTheta = -Math.sin(lastTheta * Math::PI/180) * scaling</div><div class='del'>-    lastDTheta = midDTheta + (midDDTheta + lastDDTheta)/2</div><div class='del'>-    lastTheta = midTheta + (midDTheta + lastDTheta)/2</div><div class='del'>-    # Now put the values back in our globals</div><div class='del'>-    @dTheta = lastDTheta</div><div class='del'>-    @theta = lastTheta</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This method ties together the simulation engine and the graphical</div><div class='del'>-  # display code that visualizes it.</div><div class='del'>-  def repeat</div><div class='del'>-    # Simulate</div><div class='del'>-    recomputeAngle</div><div class='del'>-</div><div class='del'>-    # Update the display</div><div class='del'>-    showPendulum</div><div class='del'>-    showPhase</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'>-PendulumAnimationDemo.new(base_frame)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/plot.rb b/ext/tk/sample/demos-jp/plot.rb<br/>deleted file mode 100644<br/>index 9ff71904cd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/plot.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/plot.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,126 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# 2-D plot 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?($plot_demo) &amp;&amp; $plot_demo</div><div class='del'>-  $plot_demo.destroy </div><div class='del'>-  $plot_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$plot_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Plot Demonstration")</div><div class='del'>-  iconname("Plot")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($plot_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'4i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"¤³¤Î¥¦¥£¥ó¥É¥¦¤Ï´ÊÃ±¤Ê2¼¡¸µ¤Î¥×¥í¥Ã¥È¤ò´Þ¤ó¤À¥­¥ã¥ó¥Ð¥¹ widget¤Ç¤¹¡£É½¼¨¤µ¤ì¤¿ÅÀ¤ò¥Þ¥¦¥¹¥Ü¥¿¥ó1¤Ç¥É¥é¥Ã¥°¤·¤Æ¥Ç¡¼¥¿¤ò¤¤¤¸¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£"){</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'>-$plot_buttons = TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $plot_demo</div><div class='del'>-      $plot_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'plot'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$plot_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# font ÀßÄê</div><div class='del'>-  if $tk_version =~ /^4.*/</div><div class='del'>-    plotFont = '-*-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*'</div><div class='del'>-  else</div><div class='del'>-    font = 'Helvetica 18'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-# canvas ÀßÄê</div><div class='del'>-$plot_canvas = TkCanvas.new(base_frame,'relief'=&gt;'raised','width'=&gt;450,'height'=&gt;300)</div><div class='del'>-$plot_canvas.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-# plot À¸À®</div><div class='del'>-TkcLine.new($plot_canvas, 100, 250, 400, 250, 'width'=&gt;2)</div><div class='del'>-TkcLine.new($plot_canvas, 100, 250, 100,  50, 'width'=&gt;2)</div><div class='del'>-TkcText.new($plot_canvas, 225, 20, </div><div class='del'>-            'text'=&gt;"´ÊÃ±¤Ê¥×¥í¥Ã¥È", 'font'=&gt;plotFont, 'fill'=&gt;'brown')</div><div class='del'>-</div><div class='del'>-(0..10).each {|i|</div><div class='del'>-  x = 100 + (i * 30)</div><div class='del'>-  TkcLine.new($plot_canvas, x, 250, x, 245, 'width'=&gt;2)</div><div class='del'>-  TkcText.new($plot_canvas, x, 254, </div><div class='del'>-              'text'=&gt;10*i, 'font'=&gt;plotFont, 'anchor'=&gt;'n')</div><div class='del'>-}</div><div class='del'>-(0..5).each {|i|</div><div class='del'>-  y = 250 - (i * 40)</div><div class='del'>-  TkcLine.new($plot_canvas, 100, y, 105, y, 'width'=&gt;2)</div><div class='del'>-  TkcText.new($plot_canvas, 96, y, </div><div class='del'>-              'text'=&gt;"#{i*50}.0", 'font'=&gt;plotFont, 'anchor'=&gt;'e')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]]</div><div class='del'>-  x = 100 + (3*xx)</div><div class='del'>-  y = 250 - (4*yy)/5</div><div class='del'>-  item = TkcOval.new($plot_canvas, x-6, y-6, x+6, y+6, </div><div class='del'>-                     'width'=&gt;1, 'outline'=&gt;'black', 'fill'=&gt;'SkyBlue2')</div><div class='del'>-  item.addtag 'point'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$plot_canvas.itembind('point', 'Any-Enter', </div><div class='del'>-                      proc{$plot_canvas.itemconfigure 'current','fill','red'})</div><div class='del'>-$plot_canvas.itembind('point', 'Any-Leave', </div><div class='del'>-                      proc{$plot_canvas.itemconfigure 'current','fill','SkyBlue2'})</div><div class='del'>-$plot_canvas.itembind('point', '1', </div><div class='del'>-                      proc{|x,y| plotDown $plot_canvas,x,y}, "%x %y")</div><div class='del'>-$plot_canvas.itembind('point', 'ButtonRelease-1', </div><div class='del'>-                      proc{$plot_canvas.dtag 'selected'})</div><div class='del'>-$plot_canvas.bind('B1-Motion', </div><div class='del'>-                  proc{|x,y| plotMove $plot_canvas,x,y}, "%x %y")</div><div class='del'>-</div><div class='del'>-$plot = {'lastX'=&gt;0, 'lastY'=&gt;0}</div><div class='del'>-</div><div class='del'>-# plotDown --</div><div class='del'>-# This method is invoked when the mouse is pressed over one of the </div><div class='del'>-# data points.  It sets up state to allow the point to be dragged.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# x, y -        The coordinates of the mouse press.</div><div class='del'>-</div><div class='del'>-def plotDown (w, x, y)</div><div class='del'>-  w.dtag 'selected'</div><div class='del'>-  w.addtag_withtag 'selected', 'current'</div><div class='del'>-  w.raise 'current'</div><div class='del'>-  $plot['lastX'] = x</div><div class='del'>-  $plot['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# plotMove --</div><div class='del'>-# This method is invoked during mouse motion events.  It drags the</div><div class='del'>-# current item.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The canvas window.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def plotMove (w, x, y)</div><div class='del'>-  w.move 'selected', x - $plot['lastX'], y - $plot['lastY']</div><div class='del'>-  $plot['lastX'] = x</div><div class='del'>-  $plot['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/puzzle.rb b/ext/tk/sample/demos-jp/puzzle.rb<br/>deleted file mode 100644<br/>index 2febc2c55a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/puzzle.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/puzzle.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,131 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# widet demo 'puzzle' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë</div><div class='del'>-if defined?($puzzle_demo) &amp;&amp; $puzzle_demo</div><div class='del'>-  $puzzle_demo.destroy </div><div class='del'>-  $puzzle_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$puzzle_demo = TkToplevel.new {|w|</div><div class='del'>-  title("15-Puzzle Demonstration")</div><div class='del'>-  iconname("15-Puzzle")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($puzzle_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Î15-¥Ñ¥º¥ë¤Ï¥Ü¥¿¥ó¤ò½¸¤á¤Æ¤Ç¤­¤Æ¤¤¤Þ¤¹¡£¶õ¤¤¤Æ¤¤¤ë½ê¤ÎÎÙ¤Î¥Ô¡¼¥¹¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¤½¤Î¥Ô¡¼¥¹¤¬¤½¤Î¶õ¤¤¤Æ¤¤¤ë¾ì½ê¤Ë¥¹¥é¥¤¥É¤·¤Þ¤¹¡£¤³¤ÎÁàºî¤òÂ³¤±¡¢¥Ô¡¼¥¹¤¬¤½¤Î¿ô¤Î½ç¤Ë¾å¤«¤é²¼¡¢º¸¤«¤é±¦¤ËÊÂ¤Ö¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $puzzle_demo</div><div class='del'>-      $puzzle_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'puzzle'}</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'>-#</div><div class='del'>-# Special trick: scrollbar widget ¤òÀ¸À®¤·¤Æ¤½¤Î trough color ¤òÍÑ¤¤¤ë¤³¤È¤Ç</div><div class='del'>-#                ¶õÇòÉôÊ¬¤Î¤¿¤á¤Î°Å¿§¤òÁªÂò¤·¡¤ÀßÄê¤¹¤ë </div><div class='del'>-#</div><div class='del'>-begin</div><div class='del'>-  if Tk.windowingsystem() == 'aqua'</div><div class='del'>-    frameWidth  = 168</div><div class='del'>-    frameHeight = 168</div><div class='del'>-  elsif Tk.default_widget_set == :Ttk</div><div class='del'>-    frameWidth  = 148</div><div class='del'>-    frameHeight = 124</div><div class='del'>-  else</div><div class='del'>-    frameWidth  = 120</div><div class='del'>-    frameHeight = 120</div><div class='del'>-  end</div><div class='del'>-rescue</div><div class='del'>-  frameWidth  = 120</div><div class='del'>-  frameHeight = 120</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# depend_on_button_width = true</div><div class='del'>-depend_on_button_width = false</div><div class='del'>- </div><div class='del'>-s = TkScrollbar.new(base_frame)</div><div class='del'>-base = TkFrame.new(base_frame) {</div><div class='del'>-  width  frameWidth</div><div class='del'>-  height frameHeight</div><div class='del'>-  borderwidth 2</div><div class='del'>-  relief 'sunken'</div><div class='del'>-  bg s['troughcolor']</div><div class='del'>-}</div><div class='del'>-s.destroy</div><div class='del'>-base.pack('side'=&gt;'top', 'padx'=&gt;'1c', 'pady'=&gt;'1c')</div><div class='del'>-</div><div class='del'>-# proc ¤Î¥¹¥³¡¼¥×¤òÊÄ¤¸¤ë¤¿¤á¡¤proc À¸À®¥á¥½¥Ã¥É¤òÍÑ°Õ</div><div class='del'>-# ¤³¤¦¤·¤Æ¤ª¤«¤Í¤Ð¡¤¥ë¡¼¥×Ãæ¤ÇÃÍ¤¬ÊÑ²½¤¹¤ë num ¤Î±Æ¶Á¤ò¼õ¤±¤Æ</div><div class='del'>-# puzzleSwitch ¤ÎÂè 2 °ú¿ô¤¬ÊÑ²½¤·¤Æ¤·¤Þ¤¤¡¤´üÂÔÄÌ¤ê¤Ë¤Ï¤Ê¤é¤Ê¤¤¡¥</div><div class='del'>-def def_puzzleswitch_proc(w, num)</div><div class='del'>-  proc{puzzleSwitch w, num}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$xpos = {}</div><div class='del'>-$ypos = {}</div><div class='del'>-order = [3,1,6,2,5,7,15,13,4,11,8,9,14,10,12]</div><div class='del'>-(0..14).each{|i|</div><div class='del'>-  num = order[i]</div><div class='del'>-  $xpos[num] = (i % 4) * 0.25</div><div class='del'>-  $ypos[num] = (i / 4) * 0.25</div><div class='del'>-  TkButton.new(base) {|w|</div><div class='del'>-    relief 'raised'</div><div class='del'>-    text num</div><div class='del'>-    highlightthickness 0</div><div class='del'>-    command def_puzzleswitch_proc(w, num)</div><div class='del'>-    if depend_on_button_width &amp;&amp; (w.winfo_reqwidth * 4 &gt; base.width)</div><div class='del'>-      base.width = w.winfo_reqwidth * 4</div><div class='del'>-    end</div><div class='del'>-  }.place('relx'=&gt;$xpos[num], 'rely'=&gt;$ypos[num], </div><div class='del'>-          'relwidth'=&gt;0.25, 'relheight'=&gt;0.25)</div><div class='del'>-}</div><div class='del'>-$xpos['space'] = 0.75</div><div class='del'>-$ypos['space'] = 0.75</div><div class='del'>-</div><div class='del'>-############</div><div class='del'>-def puzzleSwitch(w, num)</div><div class='del'>-  if ( ($ypos[num] &gt;= ($ypos['space'] - 0.01))     \</div><div class='del'>-      &amp;&amp; ($ypos[num] &lt;= ($ypos['space'] + 0.01))   \</div><div class='del'>-      &amp;&amp; ($xpos[num] &gt;= ($xpos['space'] - 0.26))   \</div><div class='del'>-      &amp;&amp; ($xpos[num] &lt;= ($xpos['space'] + 0.26)))  \</div><div class='del'>-    || (($xpos[num] &gt;= ($xpos['space'] - 0.01))    \</div><div class='del'>-        &amp;&amp; ($xpos[num] &lt;= ($xpos['space'] + 0.01)) \</div><div class='del'>-        &amp;&amp; ($ypos[num] &gt;= ($ypos['space'] - 0.26)) \</div><div class='del'>-        &amp;&amp; ($ypos[num] &lt;= ($ypos['space'] + 0.26)))</div><div class='del'>-    tmp = $xpos['space']</div><div class='del'>-    $xpos['space'] = $xpos[num]</div><div class='del'>-    $xpos[num] = tmp</div><div class='del'>-    tmp = $ypos['space']</div><div class='del'>-    $ypos['space'] = $ypos[num]</div><div class='del'>-    $ypos[num] = tmp</div><div class='del'>-    w.place('relx'=&gt;$xpos[num], 'rely'=&gt;$ypos[num])</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-jp/radio.rb b/ext/tk/sample/demos-jp/radio.rb<br/>deleted file mode 100644<br/>index a61ad46d9b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/radio.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/radio.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# radiobutton 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?($radio_demo) &amp;&amp; $radio_demo</div><div class='del'>-  $radio_demo.destroy </div><div class='del'>-  $radio_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$radio_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Radiobutton Demonstration")</div><div class='del'>-  iconname("radio")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($radio_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤Ï2¤Ä¤Î¥é¥¸¥ª¥Ü¥¿¥ó¥°¥ë¡¼¥×¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¤½¤Î¥Ü¥¿¥ó¤À¤±¤¬¤½¤Î¥°¥ë¡¼¥×¤ÎÃæ¤ÇÁªÂò¤µ¤ì¤Þ¤¹¡£³Æ¥°¥ë¡¼¥×¤ËÂÐ¤·¤Æ¤½¤Î¥°¥ë¡¼¥×¤ÎÃæ¤Î¤É¤Î¥Ü¥¿¥ó¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤ë¤«¤ò¼¨¤¹ÊÑ¿ô¤¬³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤Þ¤¹¡£¸½ºß¤ÎÊÑ¿ô¤ÎÃÍ¤ò¸«¤ë¤Ë¤Ï¡ÖÊÑ¿ô»²¾È¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£"</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'>-size = TkVariable.new</div><div class='del'>-color = TkVariable.new</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $radio_demo</div><div class='del'>-      $radio_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'radio'}</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 'ÊÑ¿ô»²¾È'</div><div class='del'>-    command proc{</div><div class='del'>-      showVars(base_frame, ['size', size], ['color', color])</div><div class='del'>-    }</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'>-f_left = TkFrame.new(base_frame)</div><div class='del'>-f_right = TkFrame.new(base_frame)</div><div class='del'>-f_left.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-f_right.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-# radiobutton À¸À®</div><div class='del'>-[10, 12, 18, 24].each {|sz|</div><div class='del'>-  TkRadioButton.new(f_left) {</div><div class='del'>-    text "¥Ý¥¤¥ó¥È¥µ¥¤¥º #{sz}"</div><div class='del'>-    variable size</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value sz</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'>-['ÀÖ', 'ÎÐ', 'ÀÄ', '²«', 'Üô', '»ç'].each {|col|</div><div class='del'>-  TkRadioButton.new(f_right) {</div><div class='del'>-    text col</div><div class='del'>-    variable color</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value col.downcase</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='head'>diff --git a/ext/tk/sample/demos-jp/radio2.rb b/ext/tk/sample/demos-jp/radio2.rb<br/>deleted file mode 100644<br/>index cf53e3e485..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/radio2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/radio2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,112 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# radio2.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several radiobutton widgets.</div><div class='del'>-#</div><div class='del'>-# radiobutton 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?($radio2_demo) &amp;&amp; $radio2_demo</div><div class='del'>-  $radio2_demo.destroy </div><div class='del'>-  $radio2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$radio2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Radiobutton Demonstration 2")</div><div class='del'>-  iconname("radio2")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($radio2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤Ï3¤Ä¤Î¥é¥¸¥ª¥Ü¥¿¥ó¥°¥ë¡¼¥×¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¤½¤Î¥Ü¥¿¥ó¤À¤±¤¬¤½¤Î¥°¥ë¡¼¥×¤ÎÃæ¤ÇÁªÂò¤µ¤ì¤Þ¤¹¡£³Æ¥°¥ë¡¼¥×¤ËÂÐ¤·¤Æ¤½¤Î¥°¥ë¡¼¥×¤ÎÃæ¤Î¤É¤Î¥Ü¥¿¥ó¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤ë¤«¤ò¼¨¤¹ÊÑ¿ô¤¬³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤Þ¤¹¡£¸½ºß¤ÎÊÑ¿ô¤ÎÃÍ¤ò¸«¤ë¤Ë¤Ï¡ÖÊÑ¿ô»²¾È¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£"</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'>-size = TkVariable.new</div><div class='del'>-color = TkVariable.new</div><div class='del'>-align = TkVariable.new</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $radio2_demo</div><div class='del'>-      $radio2_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'radio2'}</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 'ÊÑ¿ô»²¾È'</div><div class='del'>-    command proc{</div><div class='del'>-      showVars(base_frame, </div><div class='del'>-               ['size', size], ['color', color], ['compound', align])</div><div class='del'>-    }</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'>-f_left  = TkLabelFrame.new(base_frame, 'text'=&gt;'Ê¸»ú¥µ¥¤¥º', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_mid   = TkLabelFrame.new(base_frame, 'text'=&gt;'¿§', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_right = TkLabelFrame.new(base_frame, 'text'=&gt;'¥Ó¥Ã¥È¥Þ¥Ã¥×ÇÛÃÖ', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_left.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-f_mid.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-f_right.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;'.5c', 'pady'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-# radiobutton </div><div class='del'>-[10, 12, 18, 24].each {|sz|</div><div class='del'>-  TkRadioButton.new(f_left) {</div><div class='del'>-    text "¥Ý¥¤¥ó¥È¥µ¥¤¥º #{sz}"</div><div class='del'>-    variable size</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value sz</div><div class='del'>-  }.pack('side'=&gt;'top', 'pady'=&gt;2, 'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-['ÀÖ', 'ÎÐ', 'ÀÄ', '²«', 'Üô', '»ç'].each {|col|</div><div class='del'>-  TkRadioButton.new(f_mid) {</div><div class='del'>-    text col</div><div class='del'>-    variable color</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value col.downcase</div><div class='del'>-    anchor 'w'</div><div class='del'>-  }.pack('side'=&gt;'top', 'pady'=&gt;2, 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label = TkLabel.new(f_right, 'text'=&gt;'¥é¥Ù¥ë', 'bitmap'=&gt;'questhead', </div><div class='del'>-label = Tk::Label.new(f_right, 'text'=&gt;'¥é¥Ù¥ë', 'bitmap'=&gt;'questhead', </div><div class='del'>-                    'compound'=&gt;'left')</div><div class='del'>-label.configure('width'=&gt;TkWinfo.reqwidth(label), 'compound'=&gt;'top')</div><div class='del'>-label.height(TkWinfo.reqheight(label))</div><div class='del'>-abtn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a|</div><div class='del'>-  lower = a.downcase</div><div class='del'>-  TkRadioButton.new(f_right, 'text'=&gt;a, 'variable'=&gt;align, 'relief'=&gt;'flat', </div><div class='del'>-                    'value'=&gt;lower, 'indicatoron'=&gt;0, 'width'=&gt;7, </div><div class='del'>-                    'command'=&gt;proc{label.compound(align.value)})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.grid('x', abtn[0])</div><div class='del'>-Tk.grid(abtn[1], label, abtn[2])</div><div class='del'>-Tk.grid('x', abtn[3])</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/radio3.rb b/ext/tk/sample/demos-jp/radio3.rb<br/>deleted file mode 100644<br/>index 4bbc1b31f5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/radio3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/radio3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,119 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# radio3.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing</div><div class='del'>-# several radiobutton widgets.</div><div class='del'>-#</div><div class='del'>-# radiobutton 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?($radio3_demo) &amp;&amp; $radio3_demo</div><div class='del'>-  $radio3_demo.destroy </div><div class='del'>-  $radio3_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$radio3_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Radiobutton Demonstration 3")</div><div class='del'>-  iconname("radio3")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($radio3_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label </div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text '²¼¤Ë¤Ï3¤Ä¤Î¥é¥¸¥ª¥Ü¥¿¥ó¥°¥ë¡¼¥×¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¤½¤Î¥°¥ë¡¼¥×¤ËÂ°¤¹¤ë¤¹¤Ù¤Æ¤Î¥Ü¥¿¥ó¤ÎÃæ¤Ç¥¯¥ê¥Ã¥¯¤·¤¿¥Ü¥¿¥ó¤À¤±¤¬ÁªÂò¤µ¤ì¤¿¾õÂÖ¤Ë¤Ê¤ê¤Þ¤¹¡£³Æ¥°¥ë¡¼¥×¤Ë¤Ï¡¢¤½¤Î¥°¥ë¡¼¥×¤ÎÃæ¤Î¤É¤Î¥Ü¥¿¥ó¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤ë¤«¤ò¼¨¤¹ÊÑ¿ô¤¬³ä¤êÅö¤Æ¤é¤ì¤Æ¤¤¤Þ¤¹¡£¡Ö¥È¥é¥¤¥¹¥Æ¡¼¥È¡×¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¤È¤­¤Ë¤Ï¡¢¥é¥¸¥ª¥Ü¥¿¥ó¤ÎÉ½¼¨¤¬¥È¥é¥¤¥¹¥Æ¡¼¥È¥â¡¼¥É¤Ë¤Ê¤ê¤Þ¤¹¡£¤¤¤º¤ì¤«¤Î¥Ü¥¿¥ó¤òÁªÂò¤¹¤ì¤Ð¡¢¥Ü¥¿¥ó¤Î¾õÂÖ¤Ï¸µ¤Î¤è¤¦¤Ë¸Ä¡¹¤Î¥Ü¥¿¥ó¤Îon/off¾õÂÖ¤ò¼¨¤¹¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¸½ºß¤ÎÊÑ¿ô¤ÎÃÍ¤ò¸«¤ë¤Ë¤Ï¡ÖÊÑ¿ô»²¾È¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£'</div><div class='del'>-}</div><div class='del'>-msg.grid(:row=&gt;0, :column=&gt;0, :columnspan=&gt;3, :sticky=&gt;'nsew')</div><div class='del'>-</div><div class='del'>-# variable</div><div class='del'>-size = TkVariable.new</div><div class='del'>-color = TkVariable.new</div><div class='del'>-align = TkVariable.new</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-TkFrame.new(base_frame) {|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;'ÊÑ¿ô»²¾È', </div><div class='del'>-                      :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{</div><div class='del'>-                        showVars(base_frame, ['size', size], </div><div class='del'>-                                 ['color', color], ['compound', align])</div><div class='del'>-                      }), </div><div class='del'>-         TkButton.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                      :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{showCode 'radio3'}), </div><div class='del'>-         TkButton.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                      :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{</div><div class='del'>-                        tmppath = $radio3_demo</div><div class='del'>-                        $radio3_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'>-  TkGrid(frame, :row=&gt;3, :column=&gt;0, :columnspan=&gt;3, :sticky=&gt;'nsew')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# frame </div><div class='del'>-f_left  = TkLabelFrame.new(base_frame, 'text'=&gt;'Ê¸»ú¥µ¥¤¥º', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_mid   = TkLabelFrame.new(base_frame, 'text'=&gt;'¿§', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_right = TkLabelFrame.new(base_frame, 'text'=&gt;'¥Ó¥Ã¥È¥Þ¥Ã¥×ÇÛÃÖ', </div><div class='del'>-                           'pady'=&gt;2, 'padx'=&gt;2)</div><div class='del'>-f_left .grid('column'=&gt;0, 'row'=&gt;1, 'pady'=&gt;'.5c', 'padx'=&gt;'.5c', 'rowspan'=&gt;2)</div><div class='del'>-f_mid  .grid('column'=&gt;1, 'row'=&gt;1, 'pady'=&gt;'.5c', 'padx'=&gt;'.5c', 'rowspan'=&gt;2)</div><div class='del'>-f_right.grid('column'=&gt;2, 'row'=&gt;1, 'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-TkButton.new(base_frame, 'text'=&gt;'¥È¥é¥¤¥¹¥Æ¡¼¥È', </div><div class='del'>-             'command'=&gt;proc{size.value = 'multi'; color.value = 'multi'}){</div><div class='del'>-  grid('column'=&gt;2, 'row'=&gt;2, 'pady'=&gt;'.5c', 'padx'=&gt;'.5c')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# radiobutton </div><div class='del'>-[10, 12, 14, 18, 24].each {|sz|</div><div class='del'>-  TkRadioButton.new(f_left) {</div><div class='del'>-    text "¥Ý¥¤¥ó¥È¥µ¥¤¥º #{sz}"</div><div class='del'>-    variable size</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value sz</div><div class='del'>-    tristatevalue 'multi'</div><div class='del'>-  }.pack('side'=&gt;'top', 'pady'=&gt;2, 'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-['Red', 'Green', 'Blue', 'Yellow', 'Orange', 'Purple'].each {|col|</div><div class='del'>-  TkRadioButton.new(f_mid) {</div><div class='del'>-    text col</div><div class='del'>-    variable color</div><div class='del'>-    relief 'flat'</div><div class='del'>-    value col.downcase</div><div class='del'>-    anchor 'w'</div><div class='del'>-    tristatevalue 'multi'</div><div class='del'>-    command proc{f_mid.fg(color.value)}</div><div class='del'>-  }.pack('side'=&gt;'top', 'pady'=&gt;2, 'fill'=&gt;'x')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# label = TkLabel.new(f_right, 'text'=&gt;'¥é¥Ù¥ë', 'bitmap'=&gt;'questhead', </div><div class='del'>-label = Tk::Label.new(f_right, 'text'=&gt;'¥é¥Ù¥ë', 'bitmap'=&gt;'questhead', </div><div class='del'>-                    'compound'=&gt;'left')</div><div class='del'>-label.configure('width'=&gt;TkWinfo.reqwidth(label), 'compound'=&gt;'top')</div><div class='del'>-label.height(TkWinfo.reqheight(label))</div><div class='del'>-a_btn = ['Top', 'Left', 'Right', 'Bottom'].collect{|a|</div><div class='del'>-  TkRadioButton.new(f_right, 'text'=&gt;a, 'variable'=&gt;align, 'relief'=&gt;'flat', </div><div class='del'>-                    'value'=&gt;a.downcase, 'indicatoron'=&gt;0, 'width'=&gt;7, </div><div class='del'>-                    'command'=&gt;proc{label.compound(align.value)})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.grid('x', a_btn[0])</div><div class='del'>-Tk.grid(a_btn[1], label, a_btn[2])</div><div class='del'>-Tk.grid('x', a_btn[3])</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/rmt b/ext/tk/sample/demos-jp/rmt<br/>deleted file mode 100644<br/>index 73f631180a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/rmt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/rmt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,268 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-# rmt -- </div><div class='del'>-# This script implements a simple remote-control mechanism for </div><div class='del'>-# Tk applications.  It allows you to select an application and </div><div class='del'>-# then type commands to that application. </div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class Rmt</div><div class='del'>-  def initialize(parent=nil)</div><div class='del'>-    win = self</div><div class='del'>-</div><div class='del'>-    unless parent</div><div class='del'>-      parent = TkRoot.new</div><div class='del'>-    end</div><div class='del'>-    root = TkWinfo.toplevel(parent)</div><div class='del'>-    root.minsize(1,1)</div><div class='del'>-</div><div class='del'>-    # The instance variable below keeps track of the remote application </div><div class='del'>-    # that we're sending to.  If it's an empty string then we execute </div><div class='del'>-    # the commands locally. </div><div class='del'>-    @app = 'local'</div><div class='del'>-    @mode = 'Ruby'</div><div class='del'>-</div><div class='del'>-    # The instance variable below keeps track of whether we're in the </div><div class='del'>-    # middle of executing a command entered via the text. </div><div class='del'>-    @executing = 0</div><div class='del'>-</div><div class='del'>-    # The instance variable below keeps track of the last command executed, </div><div class='del'>-    # so it can be re-executed in response to !! commands. </div><div class='del'>-    @lastCommand = ""</div><div class='del'>-</div><div class='del'>-    # Create menu bar.  Arrange to recreate all the information in the </div><div class='del'>-    # applications sub-menu whenever it is cascaded to. </div><div class='del'>-</div><div class='del'>-    TkFrame.new(root, 'relief'=&gt;'raised', 'bd'=&gt;2) {|f|</div><div class='del'>-      pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-      TkMenubutton.new(f, 'text'=&gt;'File', 'underline'=&gt;0) {|mb|</div><div class='del'>-	TkMenu.new(mb) {|mf|</div><div class='del'>-	  mb.menu(mf)</div><div class='del'>-	  TkMenu.new(mf) {|ma| </div><div class='del'>-	    postcommand proc{win.fillAppsMenu ma}</div><div class='del'>-	    mf.add('cascade', 'label'=&gt;'Select Application', </div><div class='del'>-		   'menu'=&gt;ma, 'underline'=&gt;0)</div><div class='del'>-	  }</div><div class='del'>-	  add('command', 'label'=&gt;'Quit', </div><div class='del'>-	      'command'=&gt;proc{root.destroy}, 'underline'=&gt;0)</div><div class='del'>-	}</div><div class='del'>-	pack('side'=&gt;'left')</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Create text window and scrollbar. </div><div class='del'>-</div><div class='del'>-    @txt = TkText.new(root, 'relief'=&gt;'sunken', 'bd'=&gt;2, 'setgrid'=&gt;true) {</div><div class='del'>-      yscrollbar(TkScrollbar.new(root){pack('side'=&gt;'right', 'fill'=&gt;'y')})</div><div class='del'>-      pack('side'=&gt;'left')</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @promptEnd = TkTextMark.new(@txt, 'insert')</div><div class='del'>-</div><div class='del'>-    # Create a binding to forward commands to the target application, </div><div class='del'>-    # plus modify many of the built-in bindings so that only information </div><div class='del'>-    # in the current command can be deleted (can still set the cursor </div><div class='del'>-    # earlier in the text and select and insert;  just can't delete).</div><div class='del'>-</div><div class='del'>-    @txt.bindtags([@txt, TkText, root, 'all'])</div><div class='del'>-    @txt.bind('Return', proc{</div><div class='del'>-		@txt.set_insert('end - 1c')</div><div class='del'>-		@txt.insert('insert', "\n")</div><div class='del'>-		win.invoke</div><div class='del'>-		Tk.callback_break</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Delete', proc{</div><div class='del'>-		begin</div><div class='del'>-		  @txt.tag_remove('sel', 'sel.first', @promptEnd)</div><div class='del'>-		rescue</div><div class='del'>-		end</div><div class='del'>-		if @txt.tag_nextrange('sel', '1.0', 'end') == []</div><div class='del'>-		  if @txt.compare('insert', '&lt;', @promptEnd)</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'>-    @txt.bind('BackSpace', proc{</div><div class='del'>-		begin</div><div class='del'>-		  @txt.tag_remove('sel', 'sel.first', @promptEnd)</div><div class='del'>-		rescue</div><div class='del'>-		end</div><div class='del'>-		if @txt.tag_nextrange('sel', '1.0', 'end') == []</div><div class='del'>-		  if @txt.compare('insert', '&lt;', @promptEnd)</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'>-    @txt.bind('Control-d', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Control-k', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;', @promptEnd)</div><div class='del'>-		  @txt.set_insert(@promptEnd)</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Control-t', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Meta-d', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Meta-BackSpace', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;=', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-    @txt.bind('Control-h', proc{</div><div class='del'>-		if @txt.compare('insert', '&lt;=', @promptEnd)</div><div class='del'>-		  Tk.callback_break</div><div class='del'>-		end</div><div class='del'>-	      })</div><div class='del'>-</div><div class='del'>-    @txt.tag_configure('bold', 'font'=&gt;['Courier', 12, 'bold'])</div><div class='del'>-</div><div class='del'>-    @app = Tk.appname('rmt')</div><div class='del'>-    if (@app =~ /^rmt(.*)$/)</div><div class='del'>-      root.title("Tk Remote Controller#{$1}")</div><div class='del'>-      root.iconname("Tk Remote#{$1}")</div><div class='del'>-    end</div><div class='del'>-    prompt</div><div class='del'>-    @txt.focus</div><div class='del'>-    #@app = TkWinfo.appname(TkRoot.new)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tkTextInsert(w,s)</div><div class='del'>-    return if s == ""</div><div class='del'>-    begin</div><div class='del'>-      if w.compare('sel.first','&lt;=','insert') \</div><div class='del'>-	&amp;&amp; w.compare('sel.last','&gt;=','insert')</div><div class='del'>-	w.tag_remove('sel', 'sel.first', @promptEnd)</div><div class='del'>-	w.delete('sel.first', 'sel.last')</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    w.insert('insert', s)</div><div class='del'>-    w.see('insert')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The method below is used to print out a prompt at the </div><div class='del'>-  # insertion point (which should be at the beginning of a line </div><div class='del'>-  # right now).</div><div class='del'>-</div><div class='del'>-  def prompt</div><div class='del'>-    @txt.insert('insert', "#{@app}: ")</div><div class='del'>-    @promptEnd.set('insert')</div><div class='del'>-    @promptEnd.gravity = 'left'</div><div class='del'>-    @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The method below executes a command (it takes everything on the </div><div class='del'>-  # current line after the prompt and either sends it to the remote </div><div class='del'>-  # application or executes it locally, depending on "app".</div><div class='del'>-</div><div class='del'>-  def invoke</div><div class='del'>-    cmd = @txt.get(@promptEnd, 'insert')</div><div class='del'>-    @executing += 1</div><div class='del'>-    case (@mode)</div><div class='del'>-    when 'Tcl'</div><div class='del'>-      if Tk.info('complete', cmd)</div><div class='del'>-	if (cmd == "!!\n")</div><div class='del'>-	  cmd = @lastCommand</div><div class='del'>-	else</div><div class='del'>-	  @lastCommand = cmd</div><div class='del'>-	end</div><div class='del'>-	begin</div><div class='del'>-	  msg = Tk.appsend(@app, false, cmd)</div><div class='del'>-	rescue</div><div class='del'>-	  msg = "Error: #{$!}"</div><div class='del'>-	end</div><div class='del'>-	@txt.insert('insert', msg + "\n") if msg != ""</div><div class='del'>-	prompt</div><div class='del'>-	@promptEnd.set('insert')</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when 'Ruby'</div><div class='del'>-      if (cmd == "!!\n")</div><div class='del'>-	cmd = @lastCommand</div><div class='del'>-      end</div><div class='del'>-      complete = true</div><div class='del'>-      begin</div><div class='del'>-	eval("proc{#{cmd}}")</div><div class='del'>-      rescue</div><div class='del'>-	complete = false</div><div class='del'>-      end</div><div class='del'>-      if complete</div><div class='del'>-	@lastCommand = cmd</div><div class='del'>-	begin</div><div class='del'>-#	  msg = Tk.appsend(@app, false, </div><div class='del'>-#			   'ruby', </div><div class='del'>-#			   '"(' + cmd.gsub(/[][$"]/, '\\\\\&amp;') + ').to_s"')</div><div class='del'>-	  msg = Tk.rb_appsend(@app, false, cmd)</div><div class='del'>-	rescue</div><div class='del'>-	  msg = "Error: #{$!}"</div><div class='del'>-	end</div><div class='del'>-	@txt.insert('insert', msg + "\n") if msg != ""</div><div class='del'>-	prompt</div><div class='del'>-	@promptEnd.set('insert')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @executing -= 1</div><div class='del'>-    @txt.yview_pickplace('insert')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The following method is invoked to change the application that</div><div class='del'>-  # we're talking to.  It also updates the prompt for the current </div><div class='del'>-  # command, unless we're in the middle of executing a command from </div><div class='del'>-  # the text item (in which case a new prompt is about to be output </div><div class='del'>-  # so there's no need to change the old one). </div><div class='del'>-</div><div class='del'>-  def newApp(appName, mode)</div><div class='del'>-    @app = appName</div><div class='del'>-    @mode = mode</div><div class='del'>-    if @executing == 0</div><div class='del'>-      @promptEnd.gravity = 'right'</div><div class='del'>-      @txt.delete("#{@promptEnd.path} linestart", @promptEnd)</div><div class='del'>-      @txt.insert(@promptEnd, "#{appName}: ")</div><div class='del'>-      @txt.tag_add('bold', "#{@promptEnd.path} linestart", @promptEnd)</div><div class='del'>-      @promptEnd.gravity = 'left'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The method below will fill in the applications sub-menu with a list</div><div class='del'>-  # of all the applications that currently exist. </div><div class='del'>-</div><div class='del'>-  def fillAppsMenu(menu)</div><div class='del'>-    win = self</div><div class='del'>-    begin</div><div class='del'>-      menu.delete(0,'last')</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    TkWinfo.interps.sort.each{|ip|</div><div class='del'>-      begin</div><div class='del'>-	if Tk.appsend(ip, false, 'info commands ruby') == ""</div><div class='del'>-	  mode = 'Tcl'</div><div class='del'>-	else</div><div class='del'>-	  mode = 'Ruby'</div><div class='del'>-	end</div><div class='del'>-	menu.add('command', 'label'=&gt;format("%s    (#{mode}/Tk)", ip), </div><div class='del'>-		 'command'=&gt;proc{win.newApp ip, mode})</div><div class='del'>-      rescue</div><div class='del'>-	menu.add('command', 'label'=&gt;format("%s (unknown Tk)", ip), </div><div class='del'>-		 'command'=&gt;proc{win.newApp ip, mode}, 'state'=&gt;'disabled')</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    menu.add('command', 'label'=&gt;format("local    (Ruby/Tk)"), </div><div class='del'>-	     'command'=&gt;proc{win.newApp 'local', 'Ruby'})</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Rmt.new</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/rolodex b/ext/tk/sample/demos-jp/rolodex<br/>deleted file mode 100644<br/>index 9f87ae2829..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/rolodex?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/rolodex</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,320 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# rolodex --</div><div class='del'>-# This script is a part of Tom LaStrange's rolodex</div><div class='del'>-# </div><div class='del'>-# Copyright (C) 1998 by Takaaki Tateishi &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-# Time-stamp: "03/08/02 12:45:21 nagai"</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def show_help(topic,x=0,y=0)</div><div class='del'>-  if( topic.is_a?(TkWindow) )</div><div class='del'>-    w = TkWinfo.containing(x,y)</div><div class='del'>-    if( TkWinfo.exist?(w) )</div><div class='del'>-      topic = w</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  if( $helpTopics.include?(topic) )</div><div class='del'>-    msg = $helpTopics[topic]</div><div class='del'>-  else</div><div class='del'>-    msg = "Sorry, but no help is available for this topic"</div><div class='del'>-  end</div><div class='del'>-  TkDialog.new("title"=&gt;"Rolodex Help",</div><div class='del'>-	       "message"=&gt;"Information on #{topic}:\n\n#{msg}",</div><div class='del'>-	       "default_button"=&gt;0,</div><div class='del'>-	       "buttons"=&gt;["OK"])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fillCard</div><div class='del'>-  clearAction</div><div class='del'>-  $root.frame.entry[1].insert(0,"Takaaki Tateishi")</div><div class='del'>-  $root.frame.entry[2].insert(0,"Japan Advanced Institute of Science and Techonology")</div><div class='del'>-  $root.frame.entry[3].insert(0,"1-1 Asahidai, Tatsunokuchi")</div><div class='del'>-  $root.frame.entry[4].insert(0,"Ishikawa 923-1292, Japan")</div><div class='del'>-  $root.frame.entry[5].insert(0,"private")</div><div class='del'>-    $root.frame.entry[6].insert(0,"***-***-****")</div><div class='del'>-  $root.frame.entry[7].insert(0,"***-***-****")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def addAction</div><div class='del'>-  for i in 1..7</div><div class='del'>-    STDERR.print format("%-12s %s\n",</div><div class='del'>-			RolodexFrame::LABEL[i],</div><div class='del'>-			$root.frame.entry[i].value)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def clearAction</div><div class='del'>-  for i in 1..7</div><div class='del'>-    $root.frame.entry[i].delete(0,"end")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fileAction</div><div class='del'>-  TkDialog.new("title"=&gt;"File Selection",</div><div class='del'>-	       "message"=&gt;"This is a dummy file selection dialog box.\n",</div><div class='del'>-	       "default_button"=&gt;0,</div><div class='del'>-	       "buttons"=&gt;["OK"])</div><div class='del'>-  STDERR.print "dummy file name\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def deleteAction</div><div class='del'>-  result = TkDialog.new("title"=&gt;"Confirm Action",</div><div class='del'>-			"message"=&gt;"Are you sure?",</div><div class='del'>-			"default_button"=&gt;0,</div><div class='del'>-			"buttons"=&gt;["Cancel"])</div><div class='del'>-  if( result.value == 0 )</div><div class='del'>-    clearAction</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class RolodexFrame &lt; TkFrame</div><div class='del'>-  attr_reader :entry, :label</div><div class='del'>-</div><div class='del'>-  LABEL = ["","Name:","Address:","","","Home Phone:","Work Phone:","Fax:"]</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    self["relief"] = "flat"</div><div class='del'>-    </div><div class='del'>-    @i = []</div><div class='del'>-    @label = []</div><div class='del'>-    @entry = []</div><div class='del'>-    for i in 1..7</div><div class='del'>-      @i[i] = TkFrame.new(self)</div><div class='del'>-      @i[i].pack("side"=&gt;"top",</div><div class='del'>-		 "pady"=&gt;2,</div><div class='del'>-		 "anchor"=&gt;"e")</div><div class='del'>-      @label[i] = TkLabel.new(@i[i],</div><div class='del'>-			      "text"=&gt;LABEL[i],</div><div class='del'>-			      "anchor"=&gt;"e")</div><div class='del'>-      @entry[i] = TkEntry.new(@i[i],</div><div class='del'>-			      "width"=&gt;30,</div><div class='del'>-			      "relief"=&gt;"sunken")</div><div class='del'>-      @entry[i].pack("side"=&gt;"right")</div><div class='del'>-      @label[i].pack("side"=&gt;"right")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class RolodexButtons &lt; TkFrame</div><div class='del'>-  attr_reader :clear, :add, :search, :delete</div><div class='del'>-</div><div class='del'>-  def initialize(parent,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    @clear = TkButton.new(self,</div><div class='del'>-			  "text" =&gt; "Clear")</div><div class='del'>-    @add = TkButton.new(self,</div><div class='del'>-			"text" =&gt; "Add")</div><div class='del'>-    @search = TkButton.new(self,</div><div class='del'>-			   "text" =&gt; "Search")</div><div class='del'>-    @delete = TkButton.new(self,</div><div class='del'>-			   "text" =&gt; "Delete")</div><div class='del'>-    for w in [@clear,@add,@search,@delete]</div><div class='del'>-      w.pack("side"=&gt;"left", "padx"=&gt;2)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class RolodexMenuFrame &lt; TkFrame</div><div class='del'>-  attr_reader :file_menu, :help_menu, :file, :help</div><div class='del'>-</div><div class='del'>-  def initialize(parent,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    configure("relief"=&gt;"raised",</div><div class='del'>-	      "borderwidth"=&gt;1)</div><div class='del'>-</div><div class='del'>-    @file = TkMenubutton.new(self,</div><div class='del'>-			     "text"=&gt;"File",</div><div class='del'>-			     "underline"=&gt;0)</div><div class='del'>-    @file_menu = TkMenu.new(@file)</div><div class='del'>-    @file_menu.add("command",</div><div class='del'>-		   "label" =&gt; "Load ...",</div><div class='del'>-		   "command" =&gt; proc{fileAction},</div><div class='del'>-		   "underline" =&gt; 0)</div><div class='del'>-    @file_menu.add("command",</div><div class='del'>-		   "label" =&gt; "Exit",</div><div class='del'>-		   "command" =&gt; proc{$root.destroy},</div><div class='del'>-		   "underline" =&gt; 0)</div><div class='del'>-    @file.menu(@file_menu)</div><div class='del'>-    @file.pack("side"=&gt;"left")</div><div class='del'>-</div><div class='del'>-    @help = TkMenubutton.new(self,</div><div class='del'>-			     "text"=&gt;"Help",</div><div class='del'>-			     "underline"=&gt;0)</div><div class='del'>-    @help_menu = TkMenu.new(@help)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On Context...",</div><div class='del'>-		   "command"=&gt;proc{show_help("context")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On Help...",</div><div class='del'>-		   "command"=&gt;proc{show_help("help")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On Window...",</div><div class='del'>-		   "command"=&gt;proc{show_help("window")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On Keys...",</div><div class='del'>-		   "command"=&gt;proc{show_help("keys")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt;"On version...",</div><div class='del'>-		   "command"=&gt;proc{show_help("version")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help.menu(@help_menu)</div><div class='del'>-    @help.pack("side"=&gt;"right")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Rolodex &lt; TkRoot</div><div class='del'>-  attr_reader :frame, :buttons, :menu</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @frame = RolodexFrame.new(self)</div><div class='del'>-    @frame.pack("side"=&gt;"top",</div><div class='del'>-		"fill"=&gt;"y",</div><div class='del'>-		"anchor"=&gt;"center")</div><div class='del'>-    @buttons = RolodexButtons.new(self)</div><div class='del'>-    @buttons.pack("side"=&gt;"bottom",</div><div class='del'>-		  "pady"=&gt;2,</div><div class='del'>-		  "anchor"=&gt;"center")</div><div class='del'>-    @menu = RolodexMenuFrame.new(self)</div><div class='del'>-    @menu.pack("before"=&gt;@frame,</div><div class='del'>-	       "side"=&gt;"top",</div><div class='del'>-	       "fill"=&gt;"x")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$root = Rolodex.new</div><div class='del'>-</div><div class='del'>-$root.buttons.delete.configure("command"=&gt;proc{deleteAction})</div><div class='del'>-$root.buttons.add.configure("command"=&gt;proc{addAction})</div><div class='del'>-$root.buttons.clear.configure("command"=&gt;proc{clearAction})</div><div class='del'>-$root.buttons.search.configure("command"=&gt;proc{addAction; fillCard})</div><div class='del'>-</div><div class='del'>-$root.buttons.clear.configure("text"=&gt;"Clear   Ctrl+C")</div><div class='del'>-$root.bind("Control-c",proc{clearAction})</div><div class='del'>-</div><div class='del'>-$root.buttons.add.configure("text"=&gt;"Add   Ctrl+A")</div><div class='del'>-$root.bind("Control-a",proc{addAction})</div><div class='del'>-</div><div class='del'>-$root.buttons.search.configure("text"=&gt;"Search   Ctrl+S")</div><div class='del'>-$root.bind("Control-s",proc{addAction; fillCard})</div><div class='del'>-</div><div class='del'>-$root.buttons.delete.configure("text"=&gt;"Delete...   Ctrl+D")</div><div class='del'>-$root.bind("Control-d",proc{deleteAction})</div><div class='del'>-</div><div class='del'>-$root.menu.file_menu.entryconfigure(1, "accel"=&gt;"Ctrl+F")</div><div class='del'>-$root.bind("Control-f",proc{fileAction})</div><div class='del'>-</div><div class='del'>-$root.menu.file_menu.entryconfigure(2, "accel"=&gt;"Ctrl+Q")</div><div class='del'>-$root.bind("Control-q",proc{$root.destroy})</div><div class='del'>-</div><div class='del'>-$root.frame.entry[1].focus</div><div class='del'>-</div><div class='del'>-$root.bind("Any-F1",</div><div class='del'>-	   proc{|event| show_help(event.widget, event.x_root, event.y_root)})</div><div class='del'>-$root.bind("Any-Help",</div><div class='del'>-	   proc{|event| show_help(event.widget, event.x_root, event.y_root)})</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-$helpTopics = {}</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file] = &lt;&lt;EOF</div><div class='del'>-This is the "file" menu. It can be used to invoke\</div><div class='del'>-some overall operations on the rolodex applications,\</div><div class='del'>-such as loading a file or exiting.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file_menu.index(0)] = &lt;&lt;EOF</div><div class='del'>-The "Load" entry in the "File" menu posts a dialog box\</div><div class='del'>-that you can use to select a rolodex file</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file_menu.index(1)] = &lt;&lt;EOF</div><div class='del'>-The "Exit" entry in the "File" menu causes the rolodex\</div><div class='del'>-application to terminate</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[1]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the person's name</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[2]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the first line of the person's address</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[3]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the second line of the person's address</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[4]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the third line of the person's address</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[5]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the person's home phone number, or "private"\</div><div class='del'>-if the person doesn't want his or he number publicized</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[6]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the person's work phone number</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[7]] = &lt;&lt;EOF</div><div class='del'>-In this field of the rolodex entry you should\</div><div class='del'>-type the phone number for the person's FAX machine</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["context"] = &lt;&lt;EOF</div><div class='del'>-Unfortunately, this application doesn't support context-sensitive\</div><div class='del'>-help in the usual way, because when this demo was written Ruby/Tk\</div><div class='del'>-didn't have a grab mechanism and this is needed for context-sensitive\</div><div class='del'>-help. Instead, you can achive much the same effect by simply moving\</div><div class='del'>-the mouse over the window you're curious about and pressing the\</div><div class='del'>-Help or F1 keys. You can do this anytime.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["help"] = &lt;&lt;EOF</div><div class='del'>-This application provides only very crude help. Besides the\</div><div class='del'>-entries in this menu, you can get help on individual windows\</div><div class='del'>-by moving the mouse cursor over the window and pressing the\</div><div class='del'>-Help or F1 keys.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["window"] = &lt;&lt;EOF</div><div class='del'>-This window is a dummy rolodex application created as part of\</div><div class='del'>-Tom LaStrange's toolkit benchmark. It doesn't really do anything\</div><div class='del'>-useful except to demonstrate a few features of the Ruby/Tk.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["keys"] = &lt;&lt;EOF</div><div class='del'>-The following accelerator keys are defined for this application\</div><div class='del'>-(in addition to those already available for the entry windows):</div><div class='del'>-Ctrl+A:		Add</div><div class='del'>-Ctrl+C:		Clear</div><div class='del'>-Ctrl+D:		Delete</div><div class='del'>-Ctrl+F:		Enter file name</div><div class='del'>-Ctrl+Q:		Exit application (quit)</div><div class='del'>-Ctrl+S:		Search (dummy operation)</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["version"] = &lt;&lt;EOF</div><div class='del'>-This is version 1.0.1.</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/rolodex-j b/ext/tk/sample/demos-jp/rolodex-j<br/>deleted file mode 100644<br/>index 6c3ea7a484..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/rolodex-j?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/rolodex-j</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,300 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# rolodex --</div><div class='del'>-# ¤³¤Î¥¹¥¯¥ê¥×¥È¤Ï Tom LaStrange ¤Î rolodex ¤Î°ìÉô¤Ç¤¹¡£</div><div class='del'>-# </div><div class='del'>-# Copyright (C) 1998 by Takaaki Tateishi &lt;ttate@jaist.ac.jp&gt;</div><div class='del'>-# Time-stamp: "04/04/09 00:32:12 nagai"</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-Tk.encoding = "euc-jp"</div><div class='del'>-</div><div class='del'>-def show_help(topic,x=0,y=0)</div><div class='del'>-  if( topic.is_a?(TkWindow) )</div><div class='del'>-    w = TkWinfo.containing(x,y)</div><div class='del'>-    if( w.is_a?(TkWindow) )</div><div class='del'>-      if( TkWinfo.exist?(w) )</div><div class='del'>-	topic = w</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  if( $helpTopics.include?(topic) )</div><div class='del'>-    msg = $helpTopics[topic]</div><div class='del'>-  else</div><div class='del'>-    msg = "¤³¤Î¥È¥Ô¥Ã¥¯¤Ë¤Ä¤¤¤Æ¤Î¥Ø¥ë¥×¤Ï¤Þ¤À»ÈÍÑ¤Ç¤­¤Þ¤»¤ó"</div><div class='del'>-  end</div><div class='del'>-  TkDialog.new("title"=&gt;"Rolodex Help",</div><div class='del'>-	       "message"=&gt;"¡Ö#{topic}¡×\n\n#{msg}",</div><div class='del'>-	       "default_button"=&gt;0,</div><div class='del'>-	       "buttons"=&gt;["OK"])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fillCard</div><div class='del'>-  clearAction</div><div class='del'>-  $root.frame.entry[1].insert(0, "Î©ÀÐ ¹§¾´")</div><div class='del'>-  $root.frame.entry[2].insert(0, "923-1292 ÀÐÀî¸©")</div><div class='del'>-  $root.frame.entry[3].insert(0, "Ã¤¸ýÄ® °°Âæ 1-1")</div><div class='del'>-  $root.frame.entry[4].insert(0, "ËÌÎ¦ÀèÃ¼²Ê³Øµ»½ÑÂç³Ø±¡Âç³Ø")</div><div class='del'>-  $root.frame.entry[5].insert(0,"private")</div><div class='del'>-  $root.frame.entry[6].insert(0,"***-***-****")</div><div class='del'>-  $root.frame.entry[7].insert(0,"***-***-****")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def addAction</div><div class='del'>-  for i in 1..7</div><div class='del'>-    STDERR.print format("%-12s %s\n",</div><div class='del'>-			RolodexFrame::LABEL[i],</div><div class='del'>-			$root.frame.entry[i].value)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def clearAction</div><div class='del'>-  for i in 1..7</div><div class='del'>-    $root.frame.entry[i].delete(0,"end")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fileAction</div><div class='del'>-  TkDialog.new("title"=&gt;"File Selection",</div><div class='del'>-	       "message"=&gt;"¤³¤ì¤Ï¥Õ¥¡¥¤¥ëÁªÂò¥À¥¤¥¢¥í¥°¤Î¥À¥ß¡¼¤Ç¤¹¡£\n",</div><div class='del'>-	       "default_button"=&gt;0,</div><div class='del'>-	       "buttons"=&gt;["OK"])</div><div class='del'>-  STDERR.print "dummy file name\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def deleteAction</div><div class='del'>-  result = TkDialog.new("title"=&gt;"Confirm Action",</div><div class='del'>-			"message"=&gt;"¤è¤í¤·¤¤¤Ç¤¹¤«¡©",</div><div class='del'>-			"default_button"=&gt;0,</div><div class='del'>-			"buttons"=&gt;["¥­¥ã¥ó¥»¥ë"])</div><div class='del'>-  if( result.value == 0 )</div><div class='del'>-    clearAction</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class RolodexFrame &lt; TkFrame</div><div class='del'>-  attr_reader :entry, :label</div><div class='del'>-</div><div class='del'>-  LABEL = ["","Ì¾Á°:","½»½ê","","","ÅÅÏÃ(¼«Âð):","ÅÅÏÃ(²ñ¼Ò):","Fax:"]</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    self["relief"] = "flat"</div><div class='del'>-    @i = []</div><div class='del'>-    @label = []</div><div class='del'>-    @entry = []</div><div class='del'>-    for i in 1..7</div><div class='del'>-      @i[i] = TkFrame.new(self)</div><div class='del'>-      @i[i].pack("side"=&gt;"top",</div><div class='del'>-		 "pady"=&gt;2,</div><div class='del'>-		 "anchor"=&gt;"e")</div><div class='del'>-      @label[i] = TkLabel.new(@i[i],</div><div class='del'>-			      "text"=&gt;LABEL[i],</div><div class='del'>-			      "anchor"=&gt;"e")</div><div class='del'>-      @entry[i] = TkEntry.new(@i[i],</div><div class='del'>-			      "width"=&gt;30,</div><div class='del'>-			      "relief"=&gt;"sunken")</div><div class='del'>-      @entry[i].pack("side"=&gt;"right")</div><div class='del'>-      @label[i].pack("side"=&gt;"right")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class RolodexButtons &lt; TkFrame</div><div class='del'>-  attr_reader :clear, :add, :search, :delete</div><div class='del'>-</div><div class='del'>-  def initialize(parent,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    @clear = TkButton.new(self,"text" =&gt; "¥¯¥ê¥¢¡¼")</div><div class='del'>-    @add = TkButton.new(self,  "text" =&gt; "ÄÉ²Ã")</div><div class='del'>-    @search = TkButton.new(self, "text" =&gt; "¸¡º÷")</div><div class='del'>-    @delete = TkButton.new(self,  "text" =&gt; "¾Ãµî")</div><div class='del'>-    for w in [@clear,@add,@search,@delete]</div><div class='del'>-      w.pack("side"=&gt;"left", "padx"=&gt;2)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class RolodexMenuFrame &lt; TkFrame</div><div class='del'>-  attr_reader :file_menu, :help_menu, :file, :help</div><div class='del'>-</div><div class='del'>-  def initialize(parent,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    configure("relief"=&gt;"raised",</div><div class='del'>-	      "borderwidth"=&gt;1)</div><div class='del'>-</div><div class='del'>-    @file = TkMenubutton.new(self,</div><div class='del'>-			     "text"=&gt; "¥Õ¥¡¥¤¥ë",</div><div class='del'>-			     "underline"=&gt;0)</div><div class='del'>-    @file_menu = TkMenu.new(@file)</div><div class='del'>-    @file_menu.add("command",</div><div class='del'>-		   "label" =&gt; "ÆÉ¤ß¹þ¤ß ...",</div><div class='del'>-		   "command" =&gt; proc{fileAction},</div><div class='del'>-		   "underline" =&gt; 0)</div><div class='del'>-    @file_menu.add("command",</div><div class='del'>-		   "label" =&gt; "½ªÎ»",</div><div class='del'>-		   "command" =&gt; proc{$root.destroy},</div><div class='del'>-		   "underline" =&gt; 0)</div><div class='del'>-    @file.menu(@file_menu)</div><div class='del'>-    @file.pack("side"=&gt;"left")</div><div class='del'>-</div><div class='del'>-    @help = TkMenubutton.new(self,</div><div class='del'>-			     "text"=&gt; "¥Ø¥ë¥×",</div><div class='del'>-			     "underline"=&gt;0)</div><div class='del'>-    @help_menu = TkMenu.new(@help)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt; "¥³¥ó¥Æ¥­¥¹¥È¤Ë¤Ä¤¤¤Æ",</div><div class='del'>-		   "command"=&gt;proc{show_help("¥³¥ó¥Æ¥­¥¹¥È")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt; "¥Ø¥ë¥×¤Ë¤Ä¤¤¤Æ",</div><div class='del'>-		   "command"=&gt;proc{show_help("¥Ø¥ë¥×")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt; "¥¦¥£¥ó¥É¥¦¤Ë¤Ä¤¤¤Æ",</div><div class='del'>-		   "command"=&gt;proc{show_help("¥¦¥£¥ó¥É¥¦")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt; "¥­¡¼Áàºî¤Ë¤Ä¤¤¤Æ",</div><div class='del'>-		   "command"=&gt;proc{show_help("¥­¡¼Áàºî")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help_menu.add("command",</div><div class='del'>-		   "label"=&gt; "¥Ð¡¼¥¸¥ç¥ó¾ðÊó",</div><div class='del'>-		   "command"=&gt;proc{show_help("¥Ð¡¼¥¸¥ç¥ó¾ðÊó")},</div><div class='del'>-		   "underline"=&gt;3)</div><div class='del'>-    @help.menu(@help_menu)</div><div class='del'>-    @help.pack("side"=&gt;"right")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Rolodex &lt; TkRoot</div><div class='del'>-  attr_reader :frame, :buttons, :menu</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @frame = RolodexFrame.new(self)</div><div class='del'>-    @frame.pack("side"=&gt;"top",</div><div class='del'>-		"fill"=&gt;"y",</div><div class='del'>-		"anchor"=&gt;"center")</div><div class='del'>-    @buttons = RolodexButtons.new(self)</div><div class='del'>-    @buttons.pack("side"=&gt;"bottom",</div><div class='del'>-		  "pady"=&gt;2,</div><div class='del'>-		  "anchor"=&gt;"center")</div><div class='del'>-    @menu = RolodexMenuFrame.new(self)</div><div class='del'>-    @menu.pack("before"=&gt;@frame,</div><div class='del'>-	       "side"=&gt;"top",</div><div class='del'>-	       "fill"=&gt;"x")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$root = Rolodex.new</div><div class='del'>-</div><div class='del'>-$root.buttons.delete.configure("command"=&gt;proc{deleteAction})</div><div class='del'>-$root.buttons.add.configure("command"=&gt;proc{addAction})</div><div class='del'>-$root.buttons.clear.configure("command"=&gt;proc{clearAction})</div><div class='del'>-$root.buttons.search.configure("command"=&gt;proc{addAction; fillCard})</div><div class='del'>-</div><div class='del'>-$root.buttons.clear.configure("text"=&gt; "¥¯¥ê¥¢¡¼   Ctrl+C")</div><div class='del'>-$root.bind("Control-c",proc{clearAction})</div><div class='del'>-</div><div class='del'>-$root.buttons.add.configure("text"=&gt; "ÄÉ²Ã   Ctrl+A")</div><div class='del'>-$root.bind("Control-a",proc{addAction})</div><div class='del'>-</div><div class='del'>-$root.buttons.search.configure("text"=&gt; "¸¡º÷   Ctrl+S")</div><div class='del'>-$root.bind("Control-s",proc{addAction; fillCard})</div><div class='del'>-</div><div class='del'>-$root.buttons.delete.configure("text"=&gt; "¾Ãµî   Ctrl+D")</div><div class='del'>-$root.bind("Control-d",proc{deleteAction})</div><div class='del'>-</div><div class='del'>-$root.menu.file_menu.entryconfigure(1, "accel"=&gt;"Ctrl+F")</div><div class='del'>-$root.bind("Control-f",proc{fileAction})</div><div class='del'>-</div><div class='del'>-$root.menu.file_menu.entryconfigure(2, "accel"=&gt;"Ctrl+Q")</div><div class='del'>-$root.bind("Control-q",proc{$root.destroy})</div><div class='del'>-</div><div class='del'>-$root.frame.entry[1].focus</div><div class='del'>-</div><div class='del'>-$root.bind("Any-F1",</div><div class='del'>-	   proc{|event| show_help(event.widget, event.x_root, event.y_root)})</div><div class='del'>-$root.bind("Any-Help",</div><div class='del'>-	   proc{|event| show_help(event.widget, event.x_root, event.y_root)})</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-$helpTopics = {}</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file] = &lt;&lt;EOF</div><div class='del'>-¤³¤ì¤Ï¡Ö¥Õ¥¡¥¤¥ë¡×¥á¥Ë¥å¡¼¤Ç¤¹¡£¡ÖÆÉ¤ß¹þ¤ß¡×¤ä¡Ö½ªÎ»¡×¤Ê¤É¤ò</div><div class='del'>-¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file_menu.index(0)] = &lt;&lt;EOF</div><div class='del'>-¥Õ¥¡¥¤¥ë¤ÎÆÉ¤ß¹þ¤ß¤ò¹Ô¤Ê¤¦¤È¤­¤Ë»È¤¤¤Þ¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.menu.file_menu.index(1)] = &lt;&lt;EOF</div><div class='del'>-¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò½ªÎ»¤¹¤ë¤È¤­¤Ë»È¤¤¤Þ¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[1]] = &lt;&lt;EOF</div><div class='del'>-Ì¾Á°¤òµ­Æþ¤¹¤ë¥¨¥ó¥È¥ê¤Ç¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[2]] = &lt;&lt;EOF</div><div class='del'>-½»½ê¤òµ­Æþ¤¹¤ë¥¨¥ó¥È¥ê¤Ç¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[3]] = &lt;&lt;EOF</div><div class='del'>-½»½ê¤òµ­Æþ¤¹¤ë¥¨¥ó¥È¥ê¤Ç¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[4]] = &lt;&lt;EOF</div><div class='del'>-½»½ê¤òµ­Æþ¤¹¤ë¥¨¥ó¥È¥ê¤Ç¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[5]] = &lt;&lt;EOF</div><div class='del'>-¼«Âð¤ÎÅÅÏÃÈÖ¹æ¤òµ­Æþ¤¹¤ë¥¨¥ó¥È¥ê¤Ç¤¹¡£¸ø³«\</div><div class='del'>-¤·¤¿¤¯¤Ê¤¤¤È¤­¤Ï private ¤Èµ­Æþ¤·¤Þ¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[6]] = &lt;&lt;EOF</div><div class='del'>-²ñ¼Ò¤ÎÅÅÏÃÈÖ¹æ¤òµ­Æþ¤¹¤ë¥¨¥ó¥È¥ê¤Ç¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics[$root.frame.entry[7]] = &lt;&lt;EOF</div><div class='del'>-FAXÈÖ¹æ¤òµ­Æþ¤¹¤ë¥¨¥ó¥È¥ê¤Ç¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["¥³¥ó¥Æ¥­¥¹¥È"] = &lt;&lt;EOF</div><div class='del'>-Ruby/Tk¤Ç¤Ïgrab¤Îµ¡¹½¤¬¤Ê¤¤¤¿¤á¤³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï\</div><div class='del'>-¥³¥ó¥Æ¥­¥¹¥È¥Ø¥ë¥×¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</div><div class='del'>-¤·¤«¤·Æ±¤¸¤è¤¦¤Ê¸ú²Ì¤òbind¤È¥Þ¥¦¥¹¤Î°ÌÃÖ¤ÎWedget¤òÃÎ¤ë\</div><div class='del'>-¤³¤È¤ÇÆÀ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["¥Ø¥ë¥×"] = &lt;&lt;EOF</div><div class='del'>-¥Þ¥¦¥¹¤ò¥¦¥£¥ó¥É¥¦¤Ë¤¢¤ï¤»¤ÆF1¥­¡¼¤ò²¡¤¹¤³¤È¤Ë¤è¤Ã¤Æ\</div><div class='del'>-¤½¤Î¥Ø¥ë¥×¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["¥¦¥£¥ó¥É¥¦"] = &lt;&lt;EOF</div><div class='del'>-¤³¤Î¥¦¥£¥ó¥É¥¦¤Ï¥À¥ß¡¼¤Ç¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["¥­¡¼Áàºî"] = &lt;&lt;EOF</div><div class='del'>-Ctrl+A:		ÄÉ²Ã</div><div class='del'>-Ctrl+C:		¥¯¥ê¥¢¡¼</div><div class='del'>-Ctrl+D:		¾Ãµî</div><div class='del'>-Ctrl+F:		¥Õ¥¡¥¤¥ëÁªÂò</div><div class='del'>-Ctrl+Q:		½ªÎ»</div><div class='del'>-Ctrl+S:		¸¡º÷</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-$helpTopics["¥Ð¡¼¥¸¥ç¥ó¾ðÊó"] = &lt;&lt;EOF</div><div class='del'>-¥Ð¡¼¥¸¥ç¥ó¤Ï 1.0.1j ¤Ç¤¹¡£</div><div class='del'>-EOF</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/ruler.rb b/ext/tk/sample/demos-jp/ruler.rb<br/>deleted file mode 100644<br/>index d6bc9e76d1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ruler.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ruler.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,203 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# ruler widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# rulerMkTab --</div><div class='del'>-# This method creates a new triangular polygon in a canvas to</div><div class='del'>-# represent a tab stop.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas window.</div><div class='del'>-# x, y -        Coordinates at which to create the tab stop.</div><div class='del'>-</div><div class='del'>-def rulerMkTab(c,x,y)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  TkcPolygon.new(c, x, y, x+v.size, y+v.size, x-v.size, y+v.size)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë</div><div class='del'>-if defined?($ruler_demo) &amp;&amp; $ruler_demo</div><div class='del'>-  $ruler_demo.destroy </div><div class='del'>-  $ruler_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$ruler_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Ruler Demonstration")</div><div class='del'>-  iconname("ruler")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($ruler_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-TkLabel.new(base_frame, 'font'=&gt;$font, 'wraplength'=&gt;'5i', 'justify'=&gt;'left', </div><div class='del'>-            'text'=&gt;"¤³¤Î¥­¥ã¥ó¥Ð¥¹widget¤Ï¥ë¡¼¥é¡¼¤ÎÌÏ·¿¤Ç¤¹¡£¥ë¡¼¥é¡¼¤Î±¦¤Ë¤¢¤ë¤Î¤Ï¥¿¥Ö¥¹¥È¥Ã¥×¤Î°æ¸Í¤Ç¡¢¤³¤³¤«¤é°ú¤ÃÄ¥¤Ã¤Æ¤¯¤ë¤³¤È¤Ë¤è¤Ã¤Æ¥¿¥Ö¥¹¥È¥Ã¥×¤òºî¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¤¹¤Ç¤Ë¤¢¤ë¥¿¥Ö¥¹¥È¥Ã¥×¤òÆ°¤«¤¹¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¥¿¥Ö¥¹¥È¥Ã¥×¤ò¾åÊý¤Þ¤¿¤Ï²¼Êý¤Ë¤«¤¹¤ì¤ÆÉ½¼¨¤µ¤ì¤ë¤Þ¤Ç¥É¥é¥Ã¥°¤¹¤ë¤È¡¢¥Þ¥¦¥¹¥Ü¥¿¥ó¤òÎ¥¤·¤¿»þ¤Ë¤½¤Î¥¿¥Ö¥¹¥È¥Ã¥×¤Ï¾Ã¤¨¤Þ¤¹¡£"){</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'>-$ruler_buttons = TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $ruler_demo</div><div class='del'>-      $ruler_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'ruler'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$ruler_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# canvas ÀßÄê</div><div class='del'>-$ruler_canvas = TkCanvas.new(base_frame, 'width'=&gt;'14.8c', 'height'=&gt;'2.5c')</div><div class='del'>-$ruler_canvas.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-# ÃÍÀßÄê</div><div class='del'>-unless Struct.const_defined?("RulerInfo")</div><div class='del'>-  $demo_rulerInfo = Struct.new("RulerInfo", :grid, :left, :right, :x, :y, </div><div class='del'>-                               :top, :bottom, :size, :normalStyle, </div><div class='del'>-                               :activeStyle, :deleteStyle).new</div><div class='del'>-end</div><div class='del'>-$demo_rulerInfo.grid = '.25c'</div><div class='del'>-$demo_rulerInfo.left = TkWinfo.fpixels($ruler_canvas, '1c')</div><div class='del'>-$demo_rulerInfo.right = TkWinfo.fpixels($ruler_canvas, '13c')</div><div class='del'>-$demo_rulerInfo.top = TkWinfo.fpixels($ruler_canvas, '1c')</div><div class='del'>-$demo_rulerInfo.bottom = TkWinfo.fpixels($ruler_canvas, '1.5c')</div><div class='del'>-$demo_rulerInfo.size = TkWinfo.fpixels($ruler_canvas, '.2c')</div><div class='del'>-$demo_rulerInfo.normalStyle = {'fill'=&gt;'black'}</div><div class='del'>-if TkWinfo.depth($ruler_canvas) &gt; 1</div><div class='del'>-  $demo_rulerInfo.activeStyle = {'fill'=&gt;'red', 'stipple'=&gt;''}</div><div class='del'>-  $demo_rulerInfo.deleteStyle = {'fill'=&gt;'red', </div><div class='del'>-    'stipple'=&gt;'@'+[$demo_dir, '..', </div><div class='del'>-                     'images', 'gray25.xbm'].join(File::Separator)}</div><div class='del'>-else</div><div class='del'>-  $demo_rulerInfo.activeStyle = {'fill'=&gt;'black', 'stipple'=&gt;''}</div><div class='del'>-  $demo_rulerInfo.deleteStyle = {'fill'=&gt;'black', </div><div class='del'>-    'stipple'=&gt;'@'+[$demo_dir, '..', </div><div class='del'>-                     'images', 'gray25.xbm'].join(File::Separator)}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkcLine.new($ruler_canvas, </div><div class='del'>-            '1c', '0.5c', '1c', '1c', '13c', '1c', '13c', '0.5c', 'width'=&gt;1)</div><div class='del'>-(0..11).each{|i|</div><div class='del'>-  x = i+1</div><div class='del'>-  TkcLine.new($ruler_canvas, "#{x}c", '1c', "#{x}c", '0.6c', 'width'=&gt;1)</div><div class='del'>-  TkcLine.new($ruler_canvas, "#{x}.25c", '1c', "#{x}.25c", '0.8c', 'width'=&gt;1)</div><div class='del'>-  TkcLine.new($ruler_canvas, "#{x}.5c", '1c', "#{x}.5c", '0.7c', 'width'=&gt;1)</div><div class='del'>-  TkcLine.new($ruler_canvas, "#{x}.75c", '1c', "#{x}.75c", '0.8c', 'width'=&gt;1)</div><div class='del'>-  TkcText.new($ruler_canvas, "#{x}.15c", '0.75c', 'text'=&gt;i, 'anchor'=&gt;'sw')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$rulerTag_well = TkcTag.new($ruler_canvas)</div><div class='del'>-$ruler_canvas\</div><div class='del'>-.addtag_withtag($rulerTag_well,</div><div class='del'>-                TkcRectangle.new($ruler_canvas, </div><div class='del'>-                                 '13.2c', '1c', '13.8c', '0.5c', </div><div class='del'>-                                 'outline'=&gt;'black', </div><div class='del'>-                                 'fill'=&gt;($ruler_canvas\</div><div class='del'>-                                          .configinfo('background'))[4]) )</div><div class='del'>-$ruler_canvas\</div><div class='del'>-.addtag_withtag($rulerTag_well,</div><div class='del'>-                rulerMkTab($ruler_canvas, </div><div class='del'>-                           TkWinfo.pixels($ruler_canvas, '13.5c'), </div><div class='del'>-                           TkWinfo.pixels($ruler_canvas, '.65c') ) )</div><div class='del'>-</div><div class='del'>-$rulerTag_well.bind('1', proc{|x,y| rulerNewTab($ruler_canvas,x,y)}, '%x %y')</div><div class='del'>-$ruler_canvas.itembind('tab', '1', </div><div class='del'>-                       proc{|x,y| rulerSelectTab($ruler_canvas,x,y)}, '%x %y')</div><div class='del'>-$ruler_canvas.bind('B1-Motion', </div><div class='del'>-                   proc{|x,y| rulerMoveTab($ruler_canvas,x,y)}, '%x %y')</div><div class='del'>-$ruler_canvas.bind('Any-ButtonRelease-1', proc{rulerReleaseTab($ruler_canvas)})</div><div class='del'>-</div><div class='del'>-# rulerNewTab --</div><div class='del'>-# Does all the work of creating a tab stop, including creating the</div><div class='del'>-# triangle object and adding tags to it to give it tab behavior.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas window.</div><div class='del'>-# x, y -        The coordinates of the tab stop.</div><div class='del'>-</div><div class='del'>-def rulerNewTab(c,x,y)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  c.addtag_withtag('active', rulerMkTab(c,x,y))</div><div class='del'>-  c.addtag_withtag('tab', 'active')</div><div class='del'>-  v.x = x</div><div class='del'>-  v.y = y</div><div class='del'>-  rulerMoveTab(c,x,y)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# rulerSelectTab --</div><div class='del'>-# This method is invoked when mouse button 1 is pressed over</div><div class='del'>-# a tab.  It remembers information about the tab so that it can</div><div class='del'>-# be dragged interactively.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas widget.</div><div class='del'>-# x, y -        The coordinates of the mouse (identifies the point by</div><div class='del'>-#               which the tab was picked up for dragging).</div><div class='del'>-</div><div class='del'>-def rulerSelectTab(c,x,y)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  v.x = c.canvasx(x, v.grid)</div><div class='del'>-  v.y = v.top+2</div><div class='del'>-  c.addtag_withtag('active', 'current')</div><div class='del'>-  c.itemconfigure('active', v.activeStyle)</div><div class='del'>-  c.raise('active')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# rulerMoveTab --</div><div class='del'>-# This method is invoked during mouse motion events to drag a tab.</div><div class='del'>-# It adjusts the position of the tab, and changes its appearance if</div><div class='del'>-# it is about to be dragged out of the ruler.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas widget.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def rulerMoveTab(c,x,y)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  return if c.find_withtag('active') == []</div><div class='del'>-  cx = c.canvasx(x,v.grid)</div><div class='del'>-  cy = c.canvasy(y)</div><div class='del'>-  cx = v.left if cx &lt; v.left</div><div class='del'>-  cx = v.right if cx &gt; v.right</div><div class='del'>-  if (cy &gt;= v.top &amp;&amp; cy &lt;= v.bottom)</div><div class='del'>-    cy = v.top+2</div><div class='del'>-    c.itemconfigure('active', v.activeStyle)</div><div class='del'>-  else</div><div class='del'>-    cy = cy-v.size-2</div><div class='del'>-    c.itemconfigure('active', v.deleteStyle)</div><div class='del'>-  end</div><div class='del'>-  c.move('active', cx-v.x, cy-v.y)</div><div class='del'>-  v.x = cx</div><div class='del'>-  v.y = cy</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# rulerReleaseTab --</div><div class='del'>-# This method is invoked during button release events that end</div><div class='del'>-# a tab drag operation.  It deselects the tab and deletes the tab if</div><div class='del'>-# it was dragged out of the ruler.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# c -           The canvas widget.</div><div class='del'>-# x, y -        The coordinates of the mouse.</div><div class='del'>-</div><div class='del'>-def rulerReleaseTab(c)</div><div class='del'>-  v = $demo_rulerInfo</div><div class='del'>-  return if c.find_withtag('active') == []</div><div class='del'>-  if v.y != v.top+2</div><div class='del'>-    c.delete('active')</div><div class='del'>-  else</div><div class='del'>-    c.itemconfigure('active', v.normalStyle)</div><div class='del'>-    c.dtag('active')</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-jp/sayings.rb b/ext/tk/sample/demos-jp/sayings.rb<br/>deleted file mode 100644<br/>index aa24b3a2ad..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/sayings.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/sayings.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,103 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# listbox widget demo 'sayings' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë</div><div class='del'>-if defined?($sayings_demo) &amp;&amp; $sayings_demo</div><div class='del'>-  $sayings_demo.destroy </div><div class='del'>-  $sayings_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$sayings_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Listbox Demonstration (well-known sayings)")</div><div class='del'>-  iconname("sayings")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($sayings_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Î¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤Ë¤Ï¤¤¤í¤¤¤í¤Ê³Ê¸À¤¬Æþ¤Ã¤Æ¤¤¤Þ¤¹¡£¥ê¥¹¥È¤ò¥¹¥¯¥í¡¼¥ë¤µ¤»¤ë¤Î¤Ï¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤Ç¤â¤Ç¤­¤Þ¤¹¤·¡¢¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤ÎÃæ¤Ç¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó2(Ãæ¥Ü¥¿¥ó)¤ò²¡¤·¤¿¤Þ¤Þ¥É¥é¥Ã¥°¤·¤Æ¤â¤Ç¤­¤Þ¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $sayings_demo</div><div class='del'>-      $sayings_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'sayings'}</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'>-sayings_lbox = nil</div><div class='del'>-TkFrame.new(base_frame, 'borderwidth'=&gt;10) {|w|</div><div class='del'>-  sv = TkScrollbar.new(w)</div><div class='del'>-  sh = TkScrollbar.new(w, 'orient'=&gt;'horizontal')</div><div class='del'>-  sayings_lbox = TkListbox.new(w) {</div><div class='del'>-    setgrid 1</div><div class='del'>-    width  20</div><div class='del'>-    height 10</div><div class='del'>-    yscrollcommand proc{|first,last| sv.set first,last}</div><div class='del'>-    xscrollcommand proc{|first,last| sh.set first,last}</div><div class='del'>-  }</div><div class='del'>-  sv.command(proc{|*args| sayings_lbox.yview(*args)})</div><div class='del'>-  sh.command(proc{|*args| sayings_lbox.xview(*args)})</div><div class='del'>-</div><div class='del'>-  if $tk_version =~ /^4\.[01]/</div><div class='del'>-    sv.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-    sh.pack('side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-    sayings_lbox.pack('expand'=&gt;'yes', 'fill'=&gt;'y')</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    sayings_lbox.grid('row'=&gt;0, 'column'=&gt;0, </div><div class='del'>-                      'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    sv.grid('row'=&gt;0, 'column'=&gt;1, </div><div class='del'>-            'rowspan'=&gt;1, 'columnspan'=&gt;1, 'sticky'=&gt;'news')</div><div class='del'>-    sh.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(w, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(w, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-}.pack('side'=&gt;'top', 'expand'=&gt;'yes', 'fill'=&gt;'y')</div><div class='del'>-</div><div class='del'>-sayings_lbox.insert(0,</div><div class='del'>-"Waste not, want not",</div><div class='del'>-"Early to bed and early to rise makes a man healthy, wealthy, and wise",</div><div class='del'>-"Ask not what your country can do for you, ask what you can do for your country",</div><div class='del'>-"I shall return",</div><div class='del'>-"NOT",</div><div class='del'>-"A picture is worth a thousand words",</div><div class='del'>-"User interfaces are hard to build",</div><div class='del'>-"Thou shalt not steal",</div><div class='del'>-"A penny for your thoughts",</div><div class='del'>-"Fool me once, shame on you;  fool me twice, shame on me",</div><div class='del'>-"Every cloud has a silver lining",</div><div class='del'>-"Where there's smoke there's fire",</div><div class='del'>-"It takes one to know one",</div><div class='del'>-"Curiosity killed the cat",</div><div class='del'>-"Take this job and shove it",</div><div class='del'>-"Up a creek without a paddle",</div><div class='del'>-"I'm mad as hell and I'm not going to take it any more",</div><div class='del'>-"An apple a day keeps the doctor away",</div><div class='del'>-"Don't look a gift horse in the mouth"</div><div class='del'>-)</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/search.rb b/ext/tk/sample/demos-jp/search.rb<br/>deleted file mode 100644<br/>index 9838ff5d19..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/search.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/search.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,184 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# Text Search widget demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# textLoadFile --</div><div class='del'>-# This method below loads a file into a text widget, discarding</div><div class='del'>-# the previous contents of the widget. Tags for the old widget are</div><div class='del'>-# not affected, however.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The window into which to load the file.  Must be a</div><div class='del'>-#               text widget.</div><div class='del'>-# file -        The name of the file to load.  Must be readable.</div><div class='del'>-</div><div class='del'>-def textLoadFile(w,file)</div><div class='del'>-  w.delete('1.0', 'end')</div><div class='del'>-  f = open(file, 'r')</div><div class='del'>-  while(!f.eof?)</div><div class='del'>-    w.insert('end', f.read(1000))</div><div class='del'>-  end</div><div class='del'>-  f.close</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# textSearch --</div><div class='del'>-# Search for all instances of a given string in a text widget and</div><div class='del'>-# apply a given tag to each instance found.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# w -           The window in which to search.  Must be a text widget.</div><div class='del'>-# string -      The string to search for.  The search is done using</div><div class='del'>-#               exact matching only;  no special characters.</div><div class='del'>-# tag -         Tag to apply to each instance of a matching string.</div><div class='del'>-</div><div class='del'>-def textSearch(w, string, tag)</div><div class='del'>-  tag.remove('0.0', 'end')</div><div class='del'>-  return if string == ""</div><div class='del'>-  cur = '1.0'</div><div class='del'>-  loop {</div><div class='del'>-    cur, len = w.search_with_length(string, cur, 'end')</div><div class='del'>-    break if cur == ""</div><div class='del'>-    tag.add(cur, "#{cur} + #{len} char")</div><div class='del'>-    cur = w.index("#{cur} + #{len} char")</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# textToggle --</div><div class='del'>-# This method is invoked repeatedly to invoke two commands at</div><div class='del'>-# periodic intervals.  It normally reschedules itself after each</div><div class='del'>-# execution but if an error occurs (e.g. because the window was</div><div class='del'>-# deleted) then it doesn't reschedule itself.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# cmd1 -        Command to execute when method is called.</div><div class='del'>-# sleep1 -      Ms to sleep after executing cmd1 before executing cmd2.</div><div class='del'>-# cmd2 -        Command to execute in the *next* invocation of this method.</div><div class='del'>-# sleep2 -      Ms to sleep after executing cmd2 before executing cmd1 again.</div><div class='del'>-</div><div class='del'>-def textToggle(cmd1,sleep1,cmd2,sleep2)</div><div class='del'>-  sleep_list = [sleep2, sleep1]</div><div class='del'>-  TkAfter.new(proc{sleep = sleep_list.shift; sleep_list.push(sleep); sleep}, </div><div class='del'>-              -1, cmd1, cmd2).start(sleep1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë</div><div class='del'>-if defined?($search_demo) &amp;&amp; $search_demo</div><div class='del'>-  $search_demo.destroy </div><div class='del'>-  $search_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$search_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Search and Highlight")</div><div class='del'>-  iconname("search")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($search_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-$search_buttons = TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $search_demo</div><div class='del'>-      $search_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'search'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$search_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(base_frame) {|f|</div><div class='del'>-  TkLabel.new(f, 'text'=&gt;'¥Õ¥¡¥¤¥ëÌ¾:', </div><div class='del'>-              'width'=&gt;13, 'anchor'=&gt;'w').pack('side'=&gt;'left')</div><div class='del'>-  $search_fileName = TkVariable.new</div><div class='del'>-  TkEntry.new(f, 'width'=&gt;40, </div><div class='del'>-              'textvariable'=&gt;$search_fileName) {</div><div class='del'>-    pack('side'=&gt;'left')</div><div class='del'>-    bind('Return', proc{textLoadFile($search_text, $search_fileName.value)</div><div class='del'>-                        $search_string_entry.focus})</div><div class='del'>-    focus</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(f, 'text'=&gt;'ÆÉ¤ß¹þ¤ß', </div><div class='del'>-               'command'=&gt;proc{textLoadFile($search_text, </div><div class='del'>-                                            $search_fileName.value)})\</div><div class='del'>-  .pack('side'=&gt;'left', 'pady'=&gt;5, 'padx'=&gt;10)</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|f|</div><div class='del'>-  TkLabel.new(f, 'text'=&gt;'¸¡º÷Ê¸»úÎó:', </div><div class='del'>-              'width'=&gt;13, 'anchor'=&gt;'w').pack('side'=&gt;'left')</div><div class='del'>-  $search_searchString = TkVariable.new</div><div class='del'>-  $search_string_entry = TkEntry.new(f, 'width'=&gt;40, </div><div class='del'>-                                     'textvariable'=&gt;$search_searchString) {</div><div class='del'>-    pack('side'=&gt;'left')</div><div class='del'>-    bind('Return', proc{textSearch($search_text, $search_searchString.value, </div><div class='del'>-                                   $search_Tag)})</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(f, 'text'=&gt;'È¿Å¾', </div><div class='del'>-               'command'=&gt;proc{textSearch($search_text, </div><div class='del'>-                                          $search_searchString.value, </div><div class='del'>-                                          $search_Tag)}) {</div><div class='del'>-    pack('side'=&gt;'left', 'pady'=&gt;5, 'padx'=&gt;10)</div><div class='del'>-  }</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-$search_text = TkText.new(base_frame, 'setgrid'=&gt;true) {|t|</div><div class='del'>-  $search_Tag = TkTextTag.new(t)</div><div class='del'>-  TkScrollbar.new(base_frame, 'command'=&gt;proc{|*args| t.yview(*args)}) {|sc|</div><div class='del'>-    t.yscrollcommand(proc{|first,last| sc.set first,last})</div><div class='del'>-    pack('side'=&gt;'right', 'fill'=&gt;'y')</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'>-# Set up display styles for text highlighting.</div><div class='del'>-</div><div class='del'>-if TkWinfo.depth($search_demo) &gt; 1</div><div class='del'>-  textToggle(proc{</div><div class='del'>-               $search_Tag.configure('background'=&gt;'#ce5555', </div><div class='del'>-                                     'foreground'=&gt;'white')</div><div class='del'>-             },</div><div class='del'>-             800, </div><div class='del'>-             proc{</div><div class='del'>-               $search_Tag.configure('background'=&gt;'', 'foreground'=&gt;'')</div><div class='del'>-             },</div><div class='del'>-             200 )</div><div class='del'>-else</div><div class='del'>-  textToggle(proc{</div><div class='del'>-               $search_Tag.configure('background'=&gt;'black', </div><div class='del'>-                                     'foreground'=&gt;'white')</div><div class='del'>-             },</div><div class='del'>-             800, </div><div class='del'>-             proc{</div><div class='del'>-               $search_Tag.configure('background'=&gt;'', 'foreground'=&gt;'')</div><div class='del'>-             },</div><div class='del'>-             200 )</div><div class='del'>-end</div><div class='del'>-$search_text.insert('1.0', "\</div><div class='del'>-¤³¤Î¥¦¥£¥ó¥É¥¦¤Ï¸¡º÷µ¡¹½¤ò¼Â¸½¤¹¤ë¤Î¤Ë¥Æ¥­¥¹¥È widget ¤Î¥¿¥°µ¡Ç½¤¬¤É¤Î \</div><div class='del'>-¤è¤¦¤Ë»È¤ï¤ì¤ë¤Î¤«¤ò¥Ç¥â¤¹¤ë¤â¤Î¤Ç¤¹¡£¤Þ¤º¾å¤Î¥¨¥ó¥È¥ê¤Ë¥Õ¥¡¥¤¥ëÌ¾¤òÆþ \</div><div class='del'>-¤ì¡¢&lt;¥ê¥¿¡¼¥ó&gt; ¤ò²¡¤¹¤«¡Ö¥í¡¼¥É¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£¼¡¤Ë¤½¤Î²¼¤Î \</div><div class='del'>-¥¨¥ó¥È¥ê¤ËÊ¸»úÎó¤òÆþÎÏ¤·¡¢&lt;¥ê¥¿¡¼¥ó&gt; ¤ò²¡¤¹¤«¡ÖÈ¿Å¾¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯ \</div><div class='del'>-¤À¤µ¤¤¡£¤¹¤ë¤È¥Õ¥¡¥¤¥ëÃæ¤Î¡¢¸¡º÷Ê¸»úÎó¤È°ìÃ×¤¹¤ëÉôÊ¬¤ËÁ´¤Æ \"search_Tag\" \</div><div class='del'>-¤È¤¤¤¦¥¿¥°¤¬¤Ä¤±¤é¤ì¡¢¥¿¥°¤ÎÉ½¼¨Â°À­¤È¤·¤Æ¤½¤ÎÊ¸»úÎó¤¬ÅÀÌÇ¤¹¤ë¤è¤¦¤Ë \</div><div class='del'>-ÀßÄê¤µ¤ì¤Þ¤¹¡£\n")</div><div class='del'>-$search_text.insert('end', "\</div><div class='del'>-¥Õ¥¡¥¤¥ëÆÉ¤ß¹þ¤ß¤Î¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤Ï \"#{Dir.pwd}\" ¤Ç¤¹¡£\</div><div class='del'>-")</div><div class='del'>-$search_text.set_insert '0.0'</div><div class='del'>-</div><div class='del'>-$search_fileName.value = ''</div><div class='del'>-$search_searchString.value = ''</div><div class='del'>-</div><div class='del'>-$search_text.width = 60</div><div class='del'>-$search_text.height = 20</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/spin.rb b/ext/tk/sample/demos-jp/spin.rb<br/>deleted file mode 100644<br/>index 8d4e33cda0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/spin.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/spin.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,71 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# spin.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates several spinbox widgets.</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?($spin_demo) &amp;&amp; $spin_demo</div><div class='del'>-  $spin_demo.destroy </div><div class='del'>-  $spin_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$spin_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Spinbox Demonstration")</div><div class='del'>-  iconname("spin")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($spin_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </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'>-²¼¤Ë¤Ï£³¼ïÎà¤Î¥¹¥Ô¥ó¥Ü¥Ã¥¯¥¹¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</div><div class='del'>-¤½¤ì¤¾¤ì¡¢¥Þ¥¦¥¹¤ÇÁªÂò¤·¤ÆÊ¸»ú¤òÆþÎÏ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-ÊÔ½¸Áàºî¤È¤·¤Æ¤Ï¡¢Emacs ·Á¼°¤ÎÂ¿¤¯¤Ë²Ã¤¨¤Æ¡¢°ìÈÌÅª¤Ê</div><div class='del'>-Motif ·Á¼°¤Î¥­¡¼Áàºî¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤¿¤È¤¨¤Ð¡¢</div><div class='del'>-Backspace ¤È Control-h ¤È¤ÏÆþÎÏ¥«¡¼¥½¥ë¤Îº¸Â¦¤ÎÊ¸»ú¤ò</div><div class='del'>-ºï½ü¤·¡¢Delete ¤È Control-d ¤È¤Ï±¦Â¦¤ÎÊ¸»ú¤òºï½ü¤·¤Þ¤¹¡£</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'>-¤â¤·¤¢¤Ê¤¿¤¬»È¤Ã¤Æ¤¤¤ë Ruby ¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë Tk ¥é¥¤</div><div class='del'>-¥Ö¥é¥ê¤¬ spinbox ¥¦¥£¥¸¥§¥Ã¥È¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢¤³¤Î</div><div class='del'>-¥Ç¥â¤Ï¤¦¤Þ¤¯Æ°¤«¤Ê¤¤¤Ï¤º¤Ç¤¹¡£¤½¤Î¾ì¹ç¤Ë¤Ï spinbox ¥¦¥£</div><div class='del'>-¥¸¥§¥Ã¥È¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ê¤è¤ê¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î Tk </div><div class='del'>-¤òÁÈ¤ß¹ç¤ï¤»¤Æ»î¤¹¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame){|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;'ÊÄ¤¸¤ë', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 $spin_demo.destroy</div><div class='del'>-                 $spin_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;'¥³¡¼¥É»²¾È', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 showCode 'spin'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-australianCities = [</div><div class='del'>-    'Canberra', 'Sydney', 'Melbourne', 'Perth', 'Adelaide', </div><div class='del'>-    'Brisbane', 'Hobart', 'Darwin', 'Alice Springs'</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-[</div><div class='del'>-  TkSpinbox.new(base_frame, :from=&gt;1, :to=&gt;10, :width=&gt;10, :validate=&gt;:key, </div><div class='del'>-                :validatecommand=&gt;[</div><div class='del'>-                  proc{|s| s == '' || /^[+-]?\d+$/ =~ s }, '%P'</div><div class='del'>-                ]), </div><div class='del'>-  TkSpinbox.new(base_frame, :from=&gt;0, :to=&gt;3, :increment=&gt;0.5, </div><div class='del'>-                :format=&gt;'%05.2f', :width=&gt;10), </div><div class='del'>-  TkSpinbox.new(base_frame, :values=&gt;australianCities, :width=&gt;10)</div><div class='del'>-].each{|sbox| sbox.pack(:side=&gt;:top, :pady=&gt;5, :padx=&gt;10)}</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/square b/ext/tk/sample/demos-jp/square<br/>deleted file mode 100644<br/>index 00bfde59ff..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/square?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/square</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'>-# square --</div><div class='del'>-# This script generates a demo application containing only </div><div class='del'>-# a "square" widget.  It's only usable if Tk has been compiled </div><div class='del'>-# with tkSquare.c and with the -DSQUARE_DEMO compiler switch. </div><div class='del'>-# This demo arranges the following bindings for the widget: </div><div class='del'>-#</div><div class='del'>-# Button-1 press/drag:          moves square to mouse</div><div class='del'>-# "a":                          toggle size animation on/off</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkafter'</div><div class='del'>-</div><div class='del'>-class TkSquare&lt;TkWindow</div><div class='del'>-  def create_self</div><div class='del'>-    begin</div><div class='del'>-      tk_call 'square', path</div><div class='del'>-    rescue</div><div class='del'>-      STDERR.print "\nSorry. Your Tk interpreter does not contain " +</div><div class='del'>-	'a "square" demonstration widget.' + </div><div class='del'>-	"\n ( See documents included the Tcl/Tk source archive. )\n\n"</div><div class='del'>-      exit</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def size(amount=nil)</div><div class='del'>-    if amount</div><div class='del'>-      tk_send 'size', amount</div><div class='del'>-    else</div><div class='del'>-      number(tk_send('size'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def position(x,y)</div><div class='del'>-    tk_send 'position', x, y</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$s = TkSquare.new{</div><div class='del'>-  pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-  bind('1', proc{|x,y| center(x,y)}, '%s %y')</div><div class='del'>-  bind('B1-Motion', proc{|x,y| center(x,y)}, '%s %y')</div><div class='del'>-  bind('a', proc{animate})</div><div class='del'>-  focus</div><div class='del'>-}</div><div class='del'>-TkRoot.new.minsize(1,1)</div><div class='del'>-</div><div class='del'>-# The procedure below centers the square on a given position.</div><div class='del'>-</div><div class='del'>-def center(x,y)</div><div class='del'>-  a = $s.size</div><div class='del'>-  $s.position(x-(a/2), y-(a/2))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# The procedures below provide a simple form of animation where</div><div class='del'>-# the box changes size in a pulsing pattern: larger, smaller, larger, </div><div class='del'>-# and so on.</div><div class='del'>-</div><div class='del'>-$inc = 0</div><div class='del'>-</div><div class='del'>-def timer_proc</div><div class='del'>-  a = $s.size</div><div class='del'>-  return if $inc == 0</div><div class='del'>-  $inc = -3 if a &gt;= 40</div><div class='del'>-  $inc =  3 if a &lt;= 10</div><div class='del'>-  $s.size(a+$inc)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$timer = TkAfter.new(30, -1, proc{timer_proc})</div><div class='del'>-</div><div class='del'>-def animate</div><div class='del'>-  if $inc == 0</div><div class='del'>-    $inc = 3</div><div class='del'>-    $timer.start</div><div class='del'>-  else</div><div class='del'>-    $inc = 0</div><div class='del'>-    $timer.stop</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/states.rb b/ext/tk/sample/demos-jp/states.rb<br/>deleted file mode 100644<br/>index 5e242b7c38..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/states.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/states.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,74 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# listbox widget demo 'states' (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë</div><div class='del'>-if defined?($states_demo) &amp;&amp; $states_demo</div><div class='del'>-  $states_demo.destroy </div><div class='del'>-  $states_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$states_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Listbox Demonstration (states)")</div><div class='del'>-  iconname("states")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($states_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# label À¸À®</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '4i'</div><div class='del'>-  justify 'left'</div><div class='del'>-  text "²¼¤Ë¤¢¤ë¤Î¤ÏÅÔÆ»ÉÜ¸©Ì¾¤¬Æþ¤Ã¤¿¥¹¥¯¥í¡¼¥ë¥Ð¡¼ÉÕ¤Î¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤Ç¤¹¡£¥ê¥¹¥È¤ò¥¹¥¯¥í¡¼¥ë¤µ¤»¤ë¤Î¤Ï¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤Ç¤â¤Ç¤­¤Þ¤¹¤·¡¢¥ê¥¹¥È¥Ü¥Ã¥¯¥¹¤ÎÃæ¤Ç¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó2(Ãæ¥Ü¥¿¥ó)¤ò²¡¤·¤¿¤Þ¤Þ¥É¥é¥Ã¥°¤·¤Æ¤â¤Ç¤­¤Þ¤¹¡£"</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(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $states_demo</div><div class='del'>-      $states_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'states'}</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'>-states_lbox = nil</div><div class='del'>-TkFrame.new(base_frame, 'borderwidth'=&gt;'.5c') {|w|</div><div class='del'>-  s = TkScrollbar.new(w)</div><div class='del'>-  states_lbox = TkListbox.new(w) {</div><div class='del'>-    setgrid 1</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| states_lbox.yview(*args)})</div><div class='del'>-  s.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  states_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'>-ins_data = [</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'>-]</div><div class='del'>-</div><div class='del'>-states_lbox.insert(0, *ins_data)</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/style.rb b/ext/tk/sample/demos-jp/style.rb<br/>deleted file mode 100644<br/>index 66b6de0251..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/style.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/style.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,270 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# text (display styles) 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?($style_demo) &amp;&amp; $style_demo</div><div class='del'>-  $style_demo.destroy </div><div class='del'>-  $style_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$style_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Display Styles")</div><div class='del'>-  iconname("style")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($style_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $style_demo</div><div class='del'>-      $style_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'style'}</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'>-# text À¸À®</div><div class='del'>-txt = TkText.new(base_frame){|t|</div><div class='del'>-  # À¸À®</div><div class='del'>-  setgrid 'true'</div><div class='del'>-  #width  70</div><div class='del'>-  #height 32</div><div class='del'>-  wrap 'word'</div><div class='del'>-  font $font</div><div class='del'>-  TkScrollbar.new(base_frame) {|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'>-  family = 'Courier'</div><div class='del'>-</div><div class='del'>-  if $tk_version =~ /^4.*/</div><div class='del'>-    style_tag_bold = TkTextTag.new(t, 'font'=&gt;'-*-Courier-Bold-O-Normal--*-120-*-*-*-*-*-*')</div><div class='del'>-    style_tag_big = TkTextTag.new(t, 'font'=&gt;'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=&gt;$msg_kanji_font)</div><div class='del'>-    style_tag_verybig = TkTextTag.new(t, 'font'=&gt;'-*-Helvetica-Bold-R-Normal--*-240-*-*-*-*-*-*')</div><div class='del'>-    # style_tag_small = TkTextTag.new(t, 'font'=&gt;'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=&gt;$kanji_font)</div><div class='del'>-    style_tag_small = TkTextTag.new(t, 'font'=&gt;'-Adobe-Helvetica-Bold-R-Normal-*-100-*')</div><div class='del'>-  else</div><div class='del'>-    style_tag_bold = TkTextTag.new(t, 'font'=&gt;[family, 12, :bold, :italic])</div><div class='del'>-    style_tag_big = TkTextTag.new(t, 'font'=&gt;[family, 14, :bold])</div><div class='del'>-    style_tag_verybig = TkTextTag.new(t, 'font'=&gt;['Helvetica', 24, :bold])</div><div class='del'>-    style_tag_small = TkTextTag.new(t, 'font'=&gt;'Times 8 bold')</div><div class='del'>-  end</div><div class='del'>-###</div><div class='del'>-#  case($tk_version)</div><div class='del'>-#  when /^4.*/</div><div class='del'>-#    style_tag_big = TkTextTag.new(t, 'font'=&gt;'-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*', 'kanjifont'=&gt;$msg_kanji_font)</div><div class='del'>-#    style_tag_small = TkTextTag.new(t, 'font'=&gt;'-Adobe-Helvetica-Bold-R-Normal-*-100-*', 'kanjifont'=&gt;$kanji_font)</div><div class='del'>-#  when /^8.*/</div><div class='del'>-#    unless $style_demo_do_first</div><div class='del'>-#      $style_demo_do_first = true</div><div class='del'>-#      Tk.tk_call('font', 'create', '@bigascii', </div><div class='del'>-#                '-copy', '-*-Courier-Bold-R-Normal--*-140-*-*-*-*-*-*')</div><div class='del'>-#      Tk.tk_call('font', 'create', '@smallascii', </div><div class='del'>-#                '-copy', '-Adobe-Helvetica-Bold-R-Normal-*-100-*')</div><div class='del'>-#      Tk.tk_call('font', 'create', '@cBigFont', </div><div class='del'>-#                '-compound', '@bigascii @msg_knj')</div><div class='del'>-#      Tk.tk_call('font', 'create', '@cSmallFont', </div><div class='del'>-#                '-compound', '@smallascii @kanji')</div><div class='del'>-#    end</div><div class='del'>-#    style_tag_big = TkTextTag.new(t, 'font'=&gt;'@cBigFont')</div><div class='del'>-#    style_tag_small = TkTextTag.new(t, 'font'=&gt;'@cSmallFont')</div><div class='del'>-#  end</div><div class='del'>-</div><div class='del'>-  # ¥Æ¥­¥¹¥È¥¿¥°ÀßÄê (¿§¡¤¥ì¥ê¡¼¥Õ´ØÏ¢)</div><div class='del'>-  if TkWinfo.depth($root).to_i &gt; 1</div><div class='del'>-    style_tag_color1 = TkTextTag.new(t, 'background'=&gt;'#a0b7ce')</div><div class='del'>-    style_tag_color2 = TkTextTag.new(t, 'foreground'=&gt;'red')</div><div class='del'>-    style_tag_raised = TkTextTag.new(t, 'relief'=&gt;'raised', 'borderwidth'=&gt;1)</div><div class='del'>-    style_tag_sunken = TkTextTag.new(t, 'relief'=&gt;'sunken', 'borderwidth'=&gt;1)</div><div class='del'>-  else</div><div class='del'>-    style_tag_color1 = TkTextTag.new(t, 'background'=&gt;'black', </div><div class='del'>-                                     'foreground'=&gt;'white')</div><div class='del'>-    style_tag_color2 = TkTextTag.new(t, 'background'=&gt;'black', </div><div class='del'>-                                     'foreground'=&gt;'white')</div><div class='del'>-    style_tag_raised = TkTextTag.new(t, 'background'=&gt;'white', </div><div class='del'>-                                     'relief'=&gt;'raised', 'borderwidth'=&gt;1)</div><div class='del'>-    style_tag_sunken = TkTextTag.new(t, 'background'=&gt;'white', </div><div class='del'>-                                     'relief'=&gt;'sunken', 'borderwidth'=&gt;1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # ¥Æ¥­¥¹¥È¥¿¥°ÀßÄê (¤½¤ÎÂ¾)</div><div class='del'>-  if $tk_version =~ /^4\.[01]/</div><div class='del'>-    style_tag_bgstipple = TkTextTag.new(t, 'background'=&gt;'black', </div><div class='del'>-                                        'borderwidth'=&gt;0, </div><div class='del'>-                                        'bgstipple'=&gt;'gray25')</div><div class='del'>-  else</div><div class='del'>-    style_tag_bgstipple = TkTextTag.new(t, 'background'=&gt;'black', </div><div class='del'>-                                        'borderwidth'=&gt;0, </div><div class='del'>-                                        'bgstipple'=&gt;'gray12')</div><div class='del'>-  end</div><div class='del'>-  style_tag_fgstipple = TkTextTag.new(t, 'fgstipple'=&gt;'gray50')</div><div class='del'>-  style_tag_underline = TkTextTag.new(t, 'underline'=&gt;'on')</div><div class='del'>-  style_tag_overstrike = TkTextTag.new(t, 'overstrike'=&gt;'on')</div><div class='del'>-  style_tag_right  = TkTextTag.new(t, 'justify'=&gt;'right')</div><div class='del'>-  style_tag_center = TkTextTag.new(t, 'justify'=&gt;'center')</div><div class='del'>-  if $tk_version =~ /^4.*/</div><div class='del'>-    style_tag_super = TkTextTag.new(t, 'offset'=&gt;'4p', 'font'=&gt;'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*')</div><div class='del'>-    style_tag_sub = TkTextTag.new(t, 'offset'=&gt;'-2p', 'font'=&gt;'-Adobe-Courier-Medium-R-Normal--*-100-*-*-*-*-*-*')</div><div class='del'>-  else</div><div class='del'>-    style_tag_super = TkTextTag.new(t, 'offset'=&gt;'4p', 'font'=&gt;[family, 10])</div><div class='del'>-    style_tag_sub = TkTextTag.new(t, 'offset'=&gt;'-2p', 'font'=&gt;[family, 10])</div><div class='del'>-  end</div><div class='del'>-  style_tag_margins = TkTextTag.new(t, 'lmargin1'=&gt;'12m', 'lmargin2'=&gt;'6m',</div><div class='del'>-                                    'rmargin'=&gt;'10m')</div><div class='del'>-  style_tag_spacing = TkTextTag.new(t, 'spacing1'=&gt;'10p', 'spacing2'=&gt;'2p',</div><div class='del'>-                                    'lmargin1'=&gt;'12m', 'lmargin2'=&gt;'6m',</div><div class='del'>-                                    'rmargin'=&gt;'10m')</div><div class='del'>-</div><div class='del'>-  # ¥Æ¥­¥¹¥ÈÁÞÆþ</div><div class='del'>-  insert('end', '¤³¤Î¤è¤¦¤Ë¥Æ¥­¥¹¥È widget ¤Ï¾ðÊó¤òÍÍ¡¹¤Ê¥¹¥¿¥¤¥ë¤ÇÉ½¼¨¤¹¤ë¤³¤È</div><div class='del'>-¤¬¤Ç¤­¤Þ¤¹¡£')</div><div class='del'>-  insert('end', '¥¿¥°', style_tag_big)</div><div class='del'>-  insert('end', '¤È¤¤¤¦¥á¥«¥Ë¥º¥à¤Ç¥³¥ó¥È¥í¡¼¥ë¤µ¤ì¤Þ¤¹¡£</div><div class='del'>-¥¿¥°¤È¤Ï¥Æ¥­¥¹¥È widget Æâ¤Î¤¢¤ëÊ¸»ú (¤ÎÈÏ°Ï)¤ËÂÐ¤·¤ÆÅ¬ÍÑ¤Ç¤­¤ë</div><div class='del'>-Ã±¤Ê¤ëÌ¾Á°¤Î¤³¤È¤Ç¤¹¡£¥¿¥°¤ÏÍÍ¡¹¤ÊÉ½¼¨¥¹¥¿¥¤¥ë¤ËÀßÄê¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-ÀßÄê¤¹¤ë¤È¡¢¤½¤Î¥¿¥°¤Î¤Ä¤¤¤¿Ê¸»ú¤Ï»ØÄê¤·¤¿¥¹¥¿¥¤¥ë¤ÇÉ½¼¨¤µ¤ì¤ë</div><div class='del'>-¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£»ÈÍÑ¤Ç¤­¤ëÉ½¼¨¥¹¥¿¥¤¥ë¤Ï¼¡¤ÎÄÌ¤ê¤Ç¤¹¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '</div><div class='del'>-1. ¥Õ¥©¥ó¥È', style_tag_big)</div><div class='del'>-  insert('end', '    ¤É¤ó¤Ê X ¤Î¥Õ¥©¥ó¥È¤Ç¤â»È¤¨¤Þ¤¹¡£')</div><div class='del'>-  insert('end', 'large', style_tag_verybig)</div><div class='del'>-  insert('end', '</div><div class='del'>-¤È¤«')</div><div class='del'>-#  insert('end', '¾®¤µ¤¤', style_tag_small)</div><div class='del'>-  insert('end', 'small', style_tag_small)</div><div class='del'>-  insert('end', '¤È¤«¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '</div><div class='del'>-2. ¿§', style_tag_big)</div><div class='del'>-  insert('end', '  ')</div><div class='del'>-  insert('end', 'ÇØ·Ê¿§', style_tag_color1)</div><div class='del'>-  insert('end', '¤â')</div><div class='del'>-  insert('end', 'Á°·Ê¿§', style_tag_color2)</div><div class='del'>-  insert('end', '¤â')</div><div class='del'>-  insert('end', 'Î¾Êý', style_tag_color1, style_tag_color2)</div><div class='del'>-  insert('end', '¤È¤âÊÑ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '</div><div class='del'>-3. ÌÖ¤«¤±', style_tag_big)</div><div class='del'>-  insert('end', '  ¤³¤Î¤è¤¦¤ËÉÁ²è¤ÎºÝ¤Ë')</div><div class='del'>-  insert('end', 'ÇØ·Ê¤â', style_tag_bgstipple)</div><div class='del'>-  insert('end', 'Ê¸»ú¤â', style_tag_fgstipple)</div><div class='del'>-  insert('end', 'Ã±¤Ê¤ëÅÉ¤ê¤Ä¤Ö¤·</div><div class='del'>-¤Ç¤Ê¤¯¡¢ÌÖ¤«¤±¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '</div><div class='del'>-4. ²¼Àþ', style_tag_big)</div><div class='del'>-  insert('end', '  ¤³¤Î¤è¤¦¤Ë')</div><div class='del'>-  insert('end', 'Ê¸»ú¤Ë²¼Àþ¤ò°ú¤¯', style_tag_underline)</div><div class='del'>-  insert('end', '¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '</div><div class='del'>-5. ÂÇ¤Á¾Ã¤·Àþ', style_tag_big)</div><div class='del'>-  insert('end', '  ¤³¤Î¤è¤¦¤Ë')</div><div class='del'>-  insert('end', 'Ê¸»ú¤Ë½Å¤Í¤ÆÀþ¤ò°ú¤¯', style_tag_overstrike)</div><div class='del'>-  insert('end', '¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '</div><div class='del'>-6. 3D ¸ú²Ì', style_tag_big)</div><div class='del'>-  insert('end', '  ÇØ·Ê¤ËÏÈ¤ò¤Ä¤±¤Æ¡¢Ê¸»ú¤ò')</div><div class='del'>-  insert('end', 'Èô¤Ó½Ð¤¹', style_tag_raised)</div><div class='del'>-  insert('end', '¤è¤¦¤Ë¤·¤¿¤ê')</div><div class='del'>-  insert('end', 'ÄÀ¤à', style_tag_sunken)</div><div class='del'>-  insert('end', '</div><div class='del'>-¤è¤¦¤Ë¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '</div><div class='del'>-7. ¹ÔÂ·¤¨', style_tag_big)</div><div class='del'>-  insert('end', ' ¤³¤Î¤è¤¦¤Ë¹Ô¤ò</div><div class='del'>-')</div><div class='del'>-  insert('end', 'º¸¤ËÂ·¤¨¤¿¤ê</div><div class='del'>-')</div><div class='del'>-  insert('end', '±¦¤ËÂ·¤¨¤¿¤ê</div><div class='del'>-', style_tag_right)</div><div class='del'>-  insert('end', '¿¿Ãæ¤ËÂ·¤¨¤¿¤ê¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-', style_tag_center)</div><div class='del'>-  insert('end', '</div><div class='del'>-8. ¸ªÉÕ¤­Ê¸»ú¤ÈÅº»ú', style_tag_big)</div><div class='del'>-  insert('end', '  10')</div><div class='del'>-  insert('end', 'n', style_tag_super)</div><div class='del'>-  insert('end', ' ¤Î¤è¤¦¤Ë¸ªÉÕ¤­Ê¸»ú¤Î¸ú²Ì¤ä¡¢')</div><div class='del'>-  insert('end', '</div><div class='del'>-X')</div><div class='del'>-  insert('end', 'i', style_tag_sub)</div><div class='del'>-  insert('end', '¤Î¤è¤¦¤ËÅº»ú¤Î¸ú²Ì¤ò½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '</div><div class='del'>-9. ¥Þ¡¼¥¸¥ó', style_tag_big)</div><div class='del'>-  insert('end', '¥Æ¥­¥¹¥È¤Îº¸Â¦¤ËÍ¾Ê¬¤Ê¶õÇò¤òÃÖ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹:</div><div class='del'>-')</div><div class='del'>-  insert('end', '¤³¤ÎÃÊÍî¤Ï¥Þ¡¼¥¸¥ó¤Î»ÈÍÑÎã¤Ç¤¹¡£¥¹¥¯¥ê¡¼¥ó', </div><div class='del'>-         style_tag_margins)</div><div class='del'>-  insert('end', '¾å¤ÇÀÞ¤êÊÖ¤µ¤ì¤ÆÉ½¼¨¤µ¤ì¤Æ¤¤¤ë1¹Ô¤Î¥Æ¥­¥¹¥È¤Ç¤¹¡£', </div><div class='del'>-         style_tag_margins)</div><div class='del'>-  insert('end', 'º¸Â¦¤Ë¤Ï2¼ïÎà¤Î¥Þ¡¼¥¸¥ó¤ò»ý¤Á¤Þ¤¹¡£', style_tag_margins)</div><div class='del'>-  insert('end', '1¹ÔÌÜ¤ËÂÐ¤¹¤ë¤â¤Î¤È¡¢', style_tag_margins)</div><div class='del'>-  insert('end', '2¹ÔÌÜ°Ê¹ß¤ÎÏ¢Â³¤·¤¿¥Þ¡¼¥¸¥ó', style_tag_margins)</div><div class='del'>-  insert('end', '¤Ç¤¹¡£¤Þ¤¿±¦Â¦¤Ë¤â¥Þ¡¼¥¸¥ó¤¬¤¢¤ê¤Þ¤¹¡£', style_tag_margins)</div><div class='del'>-  insert('end', '¹Ô¤ÎÀÞ¤êÊÖ¤·°ÌÃÖ¤ò·è¤á¤ë¤¿¤á¤Ë»ÈÍÑ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-', style_tag_margins)</div><div class='del'>-  insert('end', '</div><div class='del'>-10. ¥¹¥Ú¡¼¥·¥ó¥°', style_tag_big)</div><div class='del'>-  insert('end', '3¤Ä¤Î¥Ñ¥é¥á¡¼¥¿¤Ç¹Ô¤Î¥¹¥Ú¡¼¥·¥ó¥°¤ò')</div><div class='del'>-  insert('end', 'À©¸æ¤¹</div><div class='del'>-¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Spacing1¤Ç¡¢¹Ô¤Î')</div><div class='del'>-  insert('end', '¾å¤Ë¤É¤Î¤¯¤é¤¤¤Î¶õ´Ö¤òÃÖ¤¯¤«¡¢</div><div class='del'>-spacing3')</div><div class='del'>-  insert('end', '¤Ç¹Ô¤Î²¼¤Ë¤É¤Î¤¯¤é¤¤¤Î¶õ´Ö¤òÃÖ¤¯¤«¡¢')</div><div class='del'>-  insert('end', '¹Ô¤¬ÀÞ¤êÊÖ¤µ¤ì¤Æ¤¤¤ë¤Ê¤é</div><div class='del'>-¤Ð¡¢spacing2¤Ç¡¢')</div><div class='del'>-  insert('end', '¥Æ¥­¥¹¥È¹Ô¤òÀ¸À®¤·¤Æ¤¤¤ë¹Ô¤Î´Ö¤Ë¤É¤Î¤¯¤é¤¤')</div><div class='del'>-  insert('end', '¤Î¶õ´Ö¤òÃÖ</div><div class='del'>-¤¯¤«¤ò¼¨¤·¤Þ¤¹¡£</div><div class='del'>-')</div><div class='del'>-  insert('end', '¤³¤ì¤é¤Î¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤¿ÃÊÍî¤Ï¤É¤Î¤è¤¦¤Ë', </div><div class='del'>-         style_tag_spacing)</div><div class='del'>-  insert('end', '¥¹¥Ú¡¼¥·¥ó¥°¤¬¤¬¹Ô¤ï¤ì¤ë¤Î¤«¤ò¼¨¤·¤Þ¤¹¡£', </div><div class='del'>-         style_tag_spacing)</div><div class='del'>-  insert('end', '³ÆÃÊÍî¤Ï¼ÂºÝ¤Ï¥Æ¥­¥¹¥Èwidget', style_tag_spacing)</div><div class='del'>-  insert('end', '¤Î1¹Ô¤Ç¡¢widget¤Ë¤è¤Ã¤ÆÀÞ¤ê¾ö¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£</div><div class='del'>-', style_tag_spacing)</div><div class='del'>-  insert('end', 'Spacing1¤Ï¤³¤Î¥Æ¥­¥¹¥È¤Ç¤Ï10point¤Ë', style_tag_spacing)</div><div class='del'>-  insert('end', 'ÀßÄê¤µ¤ì¤Æ¤¤¤Þ¤¹¡£', style_tag_spacing)</div><div class='del'>-  insert('end', '¤³¤ì¤Ë¤è¤ê¡¢ÃÊÍî¤Î´Ö¤ËÂç¤­¤Ê´Ö³Ö¤¬', style_tag_spacing)</div><div class='del'>-  insert('end', 'Â¸ºß¤·¤Æ¤¤¤Þ¤¹¡£', style_tag_spacing)</div><div class='del'>-  insert('end', 'Spacing2¤Ï2point¤ËÀßÄê¤µ¤ì¤Æ¤¤¤Þ¤¹¡£', style_tag_spacing)</div><div class='del'>-  insert('end', '¤³¤ì¤ÇÃÊÍî¤ÎÃæ¤Ë¤Û¤ó¤Î¾¯¤·´Ö³Ö¤¬Â¸ºß¤·¤Æ¤¤¤Þ¤¹¡£', </div><div class='del'>-         style_tag_spacing)</div><div class='del'>-  insert('end', 'Spacing3¤Ï¤³¤ÎÎã¤Ç¤Ï»ÈÍÑ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£</div><div class='del'>-', style_tag_spacing)</div><div class='del'>-  insert('end', '´Ö³Ö¤¬¤É¤³¤Ë¤¢¤ë¤«¤ò¸«¤¿¤±¤ì¤Ð¡¢¤³¤ì¤é¤ÎÃÊÍî¤Î', </div><div class='del'>-         style_tag_spacing)</div><div class='del'>-  insert('end', '¤Ê¤«¤Ç¥Æ¥­¥¹¥È¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£ÁªÂò¤Î', style_tag_spacing)</div><div class='del'>-  insert('end', 'È¿Å¾¤·¤¿ÉôÊ¬¤Ë¤ÏÍ¾Ê¬¤Ë¤È¤é¤ì¤¿´Ö³Ö¤¬', style_tag_spacing)</div><div class='del'>-  insert('end', '´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£</div><div class='del'>-', style_tag_spacing)</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-txt.width 70</div><div class='del'>-txt.height 32</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/tcolor b/ext/tk/sample/demos-jp/tcolor<br/>deleted file mode 100644<br/>index 17f7e1347e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/tcolor?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/tcolor</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,534 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# tcolor --</div><div class='del'>-# ¤³¤Î¥¹¥¯¥ê¥×¥È¤ÏRGB,HSB,CYM·Á¼°¤ò¥µ¥Ý¡¼¥È¤¹¤ë</div><div class='del'>-# ´Ê°×¥«¥é¡¼¥¨¥Ç¥£¥¿¤Ç¤¹¡£</div><div class='del'>-#</div><div class='del'>-# Copyright (C) 1998 Takaaki Tateishi(ttate@jaist.ac.jp)</div><div class='del'>-# last update: Thu Jun 18 06:32:35 JST 1998</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# ¤Þ¤º¤Ïtk.rb¤òÆÉ¤ß¹þ¤à¡£</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# Tk¤Ë¤è¤Ã¤ÆÊÑ¹¹¤µ¤ì¤ëÊÑ¿ô¤ÏTkVariable¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò»È¤¦¡£</div><div class='del'>-</div><div class='del'>-$colorSpace = TkVariable.new(:rgb)</div><div class='del'>-$master = nil</div><div class='del'>-$red = 65535</div><div class='del'>-$green = 0</div><div class='del'>-$blue = 0</div><div class='del'>-$color = "#ffff00000000"</div><div class='del'>-$updating = TkVariable.new(0)</div><div class='del'>-$autoUpdate = TkVariable.new(1)</div><div class='del'>-$name = TkVariable.new($color)</div><div class='del'>-$command = TkVariable.new("print(%%,\"\n\")")</div><div class='del'>-# $command = TkVariable.new("")</div><div class='del'>-$label1 = TkVariable.new("label1")</div><div class='del'>-$label2 = TkVariable.new("label2")</div><div class='del'>-$label3 = TkVariable.new("label3")</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# ¥ê¥½¡¼¥¹¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎÀßÄê</div><div class='del'>-if (TkVarAccess.new('tcl_platform')['platform'] == 'unix')</div><div class='del'>-  TkOptionDB.add('*Entry.background', 'white')</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'>-def rgbToHsv(red,green,blue)</div><div class='del'>-</div><div class='del'>-  if ( red &gt; green )</div><div class='del'>-    max = red</div><div class='del'>-    min = green</div><div class='del'>-  else</div><div class='del'>-    max = green</div><div class='del'>-    min = red</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if ( blue &gt; max )</div><div class='del'>-    max = blue</div><div class='del'>-  else</div><div class='del'>-    if ( blue &lt; min )</div><div class='del'>-      min = blue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  range = max - min</div><div class='del'>-</div><div class='del'>-  if ( max == 0 )</div><div class='del'>-    sat = 0.0</div><div class='del'>-  else</div><div class='del'>-    sat = (max-min)/max</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if ( sat == 0 )</div><div class='del'>-    hue = 0.0</div><div class='del'>-  else</div><div class='del'>-    rc = (max-red)/range</div><div class='del'>-    gc = (max-green)/range</div><div class='del'>-    bc = (max-blue)/range</div><div class='del'>-    if ( red == max )</div><div class='del'>-      hue = 0.166667 * (bc - gc)</div><div class='del'>-    else</div><div class='del'>-      if ( green == max )</div><div class='del'>-	hue = 0.166667 * (2.0 + rc - bc)</div><div class='del'>-      else</div><div class='del'>-	hue = 0.166667 * (4.0 + gc - rc)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if ( hue &lt; 0.0 )</div><div class='del'>-      hue = hue + 1.0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  [hue,sat,max/65535]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def hsbToRgb(hue,sat,value)</div><div class='del'>-  v = 65535.0 * value</div><div class='del'>-  if( sat == 0 )</div><div class='del'>-    ans = [v,v,v]</div><div class='del'>-  else</div><div class='del'>-    hue = hue*6.0</div><div class='del'>-    if ( hue &gt;= 6 )</div><div class='del'>-      hue = 0.0</div><div class='del'>-    end</div><div class='del'>-    i = hue.to_i</div><div class='del'>-    f = hue - i</div><div class='del'>-    p = 65535.0 * value * (1.0 - sat)</div><div class='del'>-    q = 65535.0 * value * (1.0 - (sat * f))</div><div class='del'>-    t = 65535.0 * value * (1.0 - (sat * (1.0 - f)))</div><div class='del'>-    case i</div><div class='del'>-    when 0</div><div class='del'>-      ans = [v,t,p]</div><div class='del'>-    when 1</div><div class='del'>-      ans = [q,v,p]</div><div class='del'>-    when 2</div><div class='del'>-      ans = [p,v,t]</div><div class='del'>-    when 3</div><div class='del'>-      ans = [p,q,v]</div><div class='del'>-    when 4</div><div class='del'>-      ans = [t,p,v]</div><div class='del'>-    when 5</div><div class='del'>-      ans = [v,p,q]</div><div class='del'>-    else</div><div class='del'>-      raise(eException,"i value #{i} is out of range")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  return ans</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def _null_binding</div><div class='del'>-  Module.new.instance_eval{binding}</div><div class='del'>-end</div><div class='del'>-private :_null_binding</div><div class='del'>-</div><div class='del'>-def doUpdate </div><div class='del'>-  newCmd = $command.to_s.gsub("%%","\"#{$color}\"")</div><div class='del'>-  eval(newCmd, _null_binding)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def tc_scaleChanged</div><div class='del'>-  if( $updating.to_i == 1 )</div><div class='del'>-    return </div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $master = :scale if $master == nil</div><div class='del'>-</div><div class='del'>-  scale1 = $root.middle.middle.scale1</div><div class='del'>-  scale2 = $root.middle.middle.scale2</div><div class='del'>-  scale3 = $root.middle.middle.scale3</div><div class='del'>-</div><div class='del'>-  case $colorSpace.value.intern</div><div class='del'>-  when :rgb</div><div class='del'>-    $red = (scale1.get * 65.535).to_i</div><div class='del'>-    $green = (scale2.get * 65.535).to_i</div><div class='del'>-    $blue = (scale3.get * 65.535).to_i</div><div class='del'>-  when :cmy</div><div class='del'>-    $red = (65535 - scale1.get * 65.535).to_i</div><div class='del'>-    $green = (65535 - scale2.get * 65.535).to_i</div><div class='del'>-    $blue = (65535 - scale3.get * 65.535).to_i        </div><div class='del'>-  when :hsb</div><div class='del'>-    list = hsbToRgb(scale1.get / 1000.0,</div><div class='del'>-		    scale2.get / 1000.0,</div><div class='del'>-		    scale3.get / 1000.0)</div><div class='del'>-    $red = list[0]</div><div class='del'>-    $green = list[1]</div><div class='del'>-    $blue = list[2]</div><div class='del'>-  else</div><div class='del'>-    raise(Exception,"unknown colorSpace")</div><div class='del'>-  end</div><div class='del'>-  $color = format("#%04x%04x%04x",$red.to_i,$green.to_i,$blue.to_i)</div><div class='del'>-  $name.value = $color if $master == :scale</div><div class='del'>-  $root.middle.right.set_color($color)</div><div class='del'>-  if( $autoUpdate.to_i == 1 )</div><div class='del'>-    doUpdate</div><div class='del'>-  end</div><div class='del'>-  Tk.update(true)</div><div class='del'>-  $master = nil if $master == :scale</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def tc_setScales</div><div class='del'>-  $updating.value = 1</div><div class='del'>-</div><div class='del'>-  scale1 = $root.middle.middle.scale1</div><div class='del'>-  scale2 = $root.middle.middle.scale2</div><div class='del'>-  scale3 = $root.middle.middle.scale3</div><div class='del'>-  </div><div class='del'>-  case $colorSpace.value.intern</div><div class='del'>-  when :rgb</div><div class='del'>-    scale1.set($red / 65.535)</div><div class='del'>-    scale2.set($green / 65.535)</div><div class='del'>-    scale3.set($blue / 65.535)</div><div class='del'>-  when :cmy</div><div class='del'>-    scale1.set((65535 - $red) / 65.535)</div><div class='del'>-    scale2.set((65535 - $green) / 65.535)</div><div class='del'>-    scale3.set((65535 - $blue) / 65.535)</div><div class='del'>-  when :hsb</div><div class='del'>-    list = rgbToHsv($red,$green,$blue)</div><div class='del'>-    scale1.set( list[0] * 1000.0 )</div><div class='del'>-    scale2.set( list[1] * 1000.0 )</div><div class='del'>-    scale3.set( list[2] * 1000.0 )</div><div class='del'>-  else</div><div class='del'>-    raise(Exception,"unknown colorSpace")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $updating.value = 0</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def tc_loadNamedColor(name)</div><div class='del'>-  $name.value = name</div><div class='del'>-  $master = :name if $master == nil</div><div class='del'>-  if name[0,1] != "#" </div><div class='del'>-    list = TkWinfo.rgb($root.middle.right.swatch,name)</div><div class='del'>-    $red = list[0]</div><div class='del'>-    $green = list[1]</div><div class='del'>-    $blue = list[2]</div><div class='del'>-  else</div><div class='del'>-    case name.length</div><div class='del'>-    when 4</div><div class='del'>-      fmt = /#(.{1})(.{1})(.{1})/</div><div class='del'>-      shift = 12</div><div class='del'>-    when 7</div><div class='del'>-      fmt = /#(.{2})(.{2})(.{2})/</div><div class='del'>-      shift = 8</div><div class='del'>-    when 10</div><div class='del'>-      fmt = /#(.{3})(.{3})(.{3})/</div><div class='del'>-      shift = 4</div><div class='del'>-    when 13</div><div class='del'>-      fmt = /#(.{4})(.{4})(.{4})/</div><div class='del'>-      shift = 0</div><div class='del'>-    else</div><div class='del'>-      raise(eException,"syntax error in color name \"#{name}\"")</div><div class='del'>-    end</div><div class='del'>-    name.scan(fmt){|strlist|</div><div class='del'>-      if strlist.length != 3</div><div class='del'>-	raise(eException,"syntax error in color name \"#{name}\"")</div><div class='del'>-      end</div><div class='del'>-      $red = strlist[0].hex</div><div class='del'>-      $green = strlist[1].hex</div><div class='del'>-      $blue = strlist[2].hex</div><div class='del'>-    }</div><div class='del'>-    $red = $red &lt;&lt; shift</div><div class='del'>-    $green = $green &lt;&lt; shift</div><div class='del'>-    $blue = $blue &lt;&lt; shift</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  tc_setScales</div><div class='del'>-  $color = format("#%04x%04x%04x",$red,$green,$blue)</div><div class='del'>-  $root.middle.right.set_color($color)</div><div class='del'>-  if $autoUpdate.to_i == 1</div><div class='del'>-    doUpdate</div><div class='del'>-  end</div><div class='del'>-  Tk.update(true)</div><div class='del'>-  $master = nil if $master == :name</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-def changeColorSpace(space)</div><div class='del'>-  case space</div><div class='del'>-  when :rgb</div><div class='del'>-    $label1.value = "Red"</div><div class='del'>-    $label2.value = "Green"</div><div class='del'>-    $label3.value = "Blue"</div><div class='del'>-  when :cmy</div><div class='del'>-    $label1.value = "Cyan"</div><div class='del'>-    $label2.value = "Magenta"</div><div class='del'>-    $label3.value = "Yellow"</div><div class='del'>-  when :hsb</div><div class='del'>-    $label1.value = "Hue"</div><div class='del'>-    $label2.value = "Saturation"</div><div class='del'>-    $label3.value = "Brightness"</div><div class='del'>-  end</div><div class='del'>-  tc_setScales</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'>-</div><div class='del'>-# tcolorÍÑ¤Î¥á¥Ë¥å¡¼</div><div class='del'>-</div><div class='del'>-class TkColorMenuFrame&lt;TkFrame</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent,</div><div class='del'>-	  "relief"=&gt;"raised",</div><div class='del'>-	  "borderwidth"=&gt;"2")</div><div class='del'>-</div><div class='del'>-    # File¥á¥Ë¥å¡¼¥Ü¥¿¥ó¤ÎÀ¸À®</div><div class='del'>-    @file = TkMenubutton.new(self){|button|</div><div class='del'>-</div><div class='del'>-      # File¥á¥Ë¥å¡¼¤ÎºîÀ®</div><div class='del'>-      @file_menu = TkMenu.new(button){</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "RGB color space",</div><div class='del'>-	  "variable" =&gt; $colorSpace,</div><div class='del'>-	  "value" =&gt; :rgb,</div><div class='del'>-	  "underline" =&gt; "0",</div><div class='del'>-	  "command" =&gt; proc{changeColorSpace(:rgb)}</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "CMY color space",</div><div class='del'>-	  "variable" =&gt; $colorSpace,</div><div class='del'>-	  "value" =&gt; :cmy,</div><div class='del'>-	  "underline" =&gt; "0",</div><div class='del'>-	  "command" =&gt; proc{changeColorSpace(:cmy)}</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "HSB color space",</div><div class='del'>-	  "variable" =&gt; $colorSpace,</div><div class='del'>-	  "value" =&gt; :hsb,</div><div class='del'>-	  "underline" =&gt; "0",</div><div class='del'>-	  "command" =&gt; proc{changeColorSpace(:hsb)}</div><div class='del'>-	add "separator"</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "Automatic updates",</div><div class='del'>-	  "variable" =&gt; $autoUpdate,</div><div class='del'>-	  "value" =&gt; "1",</div><div class='del'>-	  "underline" =&gt; "0"</div><div class='del'>-	add "radio",</div><div class='del'>-	  "label" =&gt; "Manual updates",</div><div class='del'>-	  "variable" =&gt; $autoUpdate,</div><div class='del'>-	  "value" =&gt; "0",</div><div class='del'>-	  "underline" =&gt; "0"</div><div class='del'>-	add "separator"</div><div class='del'>-	add "command",</div><div class='del'>-	  "label" =&gt; "Exit program",</div><div class='del'>-	  "underline" =&gt; "0",</div><div class='del'>-	  "command" =&gt; proc{exit}</div><div class='del'>-      }</div><div class='del'>-      </div><div class='del'>-      # File¥á¥Ë¥å¡¼¤ÈFile¥Ü¥¿¥ó¤ò´ØÏ¢ÉÕ¤±¤ë</div><div class='del'>-      menu @file_menu</div><div class='del'>-</div><div class='del'>-      text "File"</div><div class='del'>-      underline "0"</div><div class='del'>-    }.pack("side"=&gt;"left")</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'>-</div><div class='del'>-# ²¼Éô¤Î¥Õ¥ì¡¼¥à¤Î¤¿¤á¤Î¥¯¥é¥¹</div><div class='del'>-class TkColorBotFrame&lt;TkFrame</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent,</div><div class='del'>-	  "relief"=&gt; "raised",</div><div class='del'>-	  "borderwidth"=&gt; 2)</div><div class='del'>-</div><div class='del'>-    @commandLabel = TkLabel.new(self,</div><div class='del'>-				"text"=&gt; "Command:")</div><div class='del'>-    @command = TkEntry.new(self,</div><div class='del'>-			   "relief"=&gt; "sunken",</div><div class='del'>-			   "borderwidth"=&gt; "2",</div><div class='del'>-			   "textvariable"=&gt; $command,</div><div class='del'>-			   "font"=&gt; "-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*")</div><div class='del'>-    @update = TkButton.new(self,</div><div class='del'>-			   "text"=&gt; "Update",</div><div class='del'>-			   "command"=&gt; proc{doUpdate})</div><div class='del'>-    @commandLabel.pack("side"=&gt;"left")</div><div class='del'>-    @update.pack("side"=&gt;"right","pady"=&gt;".1c","padx"=&gt;".25c")</div><div class='del'>-    @command.pack("expand"=&gt;"yes","fill"=&gt;"x","ipadx"=&gt;".25c")</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'>-</div><div class='del'>-# ÃæÃÊº¸¤Î¥Õ¥ì¡¼¥à</div><div class='del'>-class TkColorMiddleLeftFrame&lt;TkFrame</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent)</div><div class='del'>-</div><div class='del'>-    for i in ["/usr/local/lib/X11rgb.txt","/usr/lib/X11/rgb.txt",</div><div class='del'>-	"/X11/R5/lib/X11/rgb.txt","/X11/R4/lib/rgb/rgb.txt",</div><div class='del'>-	"/usr/openwin/lib/X11/rgb.txt"]</div><div class='del'>-      if !File.readable?(i)</div><div class='del'>-	next</div><div class='del'>-      end</div><div class='del'>-      f = File.open(i)</div><div class='del'>-      @scroll = TkScrollbar.new(self,</div><div class='del'>-				"orient"=&gt;"vertical",</div><div class='del'>-				"relief"=&gt;"sunken",</div><div class='del'>-				"borderwidth"=&gt;"2")</div><div class='del'>-      @scroll.pack("side"=&gt;"right","fill"=&gt;"y")</div><div class='del'>-      @names = TkListbox.new(self,</div><div class='del'>-			     "width"=&gt;"20",</div><div class='del'>-			     "height"=&gt;"12",</div><div class='del'>-			     "yscrollcommand"=&gt; proc{|first,last| @scroll.set first,last},</div><div class='del'>-			     "relief"=&gt;"sunken",</div><div class='del'>-			     "borderwidth"=&gt;"2",</div><div class='del'>-			     "exportselection"=&gt;"false")</div><div class='del'>-      @scroll.command(proc{|*args| @names.yview(*args)})</div><div class='del'>-      @names.bind("Double-1",proc{</div><div class='del'>-		    tc_loadNamedColor(@names.get(@names.curselection))})</div><div class='del'>-      @names.pack("side"=&gt;"left")</div><div class='del'>-      while (line = f.gets)</div><div class='del'>-	line.chop!</div><div class='del'>-	linelist = line.split(/[ \t]+/)</div><div class='del'>-	if linelist.length == 4</div><div class='del'>-	  @names.insert("end",linelist[3])</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      f.close</div><div class='del'>-      break</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'>-</div><div class='del'>-# ÃæÃÊÃæ±û¤Î¥Õ¥ì¡¼¥à</div><div class='del'>-class TkColorMiddleMiddleFrame&lt;TkFrame</div><div class='del'>-  # @scale1,@scale2,@scale3¤ò³°Éô¤«¤é»²¾È¤Î¤ßµö²Ä¤¹¤ë¡£(ÊÑ¹¹ÉÔ²Ä)</div><div class='del'>-  attr_reader :scale1, :scale2, :scale3</div><div class='del'>-</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent)</div><div class='del'>-</div><div class='del'>-    @f1 = TkFrame.new(self)</div><div class='del'>-    @f2 = TkFrame.new(self)</div><div class='del'>-    @f3 = TkFrame.new(self)</div><div class='del'>-    @f4 = TkFrame.new(self)</div><div class='del'>-</div><div class='del'>-    for f in [@f1,@f2,@f3]</div><div class='del'>-      f.pack("side"=&gt;"top","expand"=&gt;"yes")</div><div class='del'>-    end</div><div class='del'>-    @f4.pack("side"=&gt;"top","expand"=&gt;"yes","fill"=&gt;"x")</div><div class='del'>-</div><div class='del'>-    @label1 = TkLabel.new(self,"textvariable"=&gt;$label1)</div><div class='del'>-    @scale1 = TkScale.new(self,"from"=&gt;"0","to"=&gt;"1000","length"=&gt;"6c",</div><div class='del'>-			  "orient"=&gt;"horizontal",</div><div class='del'>-			  "command"=&gt;proc{tc_scaleChanged})</div><div class='del'>-    @scale1.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-    @label1.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-</div><div class='del'>-    @label2 = TkLabel.new(self,"textvariable"=&gt;$label2)</div><div class='del'>-    @scale2 = TkScale.new(self,"from"=&gt;"0","to"=&gt;"1000","length"=&gt;"6c",</div><div class='del'>-			  "orient"=&gt;"horizontal",</div><div class='del'>-			  "command"=&gt;proc{tc_scaleChanged})</div><div class='del'>-    @scale2.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-    @label2.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-</div><div class='del'>-    @label3 = TkLabel.new(self,"textvariable"=&gt;$label3)</div><div class='del'>-    @scale3 = TkScale.new(self,"from"=&gt;"0","to"=&gt;"1000","length"=&gt;"6c",</div><div class='del'>-			  "orient"=&gt;"horizontal",</div><div class='del'>-			  "command"=&gt;proc{tc_scaleChanged})</div><div class='del'>-    @scale3.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-    @label3.pack("side"=&gt;"top","anchor"=&gt;"w")</div><div class='del'>-</div><div class='del'>-    @nameLabel = TkLabel.new(self,"text"=&gt;"Name:")</div><div class='del'>-    @name = TkEntry.new(self,"relief"=&gt;"sunken","borderwidth"=&gt;"2",</div><div class='del'>-			"textvariable"=&gt;$name,"width"=&gt;"10",</div><div class='del'>-			"font"=&gt;"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*")</div><div class='del'>-    @nameLabel.pack("side"=&gt;"left")</div><div class='del'>-    @name.pack("side"=&gt;"right", "expand"=&gt;"1", "fill"=&gt;"x")</div><div class='del'>-    @name.bind("Return",proc{tc_loadNamedColor $name.to_s})</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'>-</div><div class='del'>-class TkColorMiddleRightFrame&lt;TkFrame</div><div class='del'>-  attr_reader :swatch</div><div class='del'>-</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent)</div><div class='del'>-    @swatch = TkFrame.new(self, "width"=&gt;"2c", "height"=&gt;"5c",</div><div class='del'>-			  "background"=&gt;$color)</div><div class='del'>-    @value = TkLabel.new(self, </div><div class='del'>-			 "text"=&gt;$color,</div><div class='del'>-			 "width"=&gt;"13",</div><div class='del'>-			 "font"=&gt;"-Adobe-Courier-Medium-R-Normal--*-120-*-*-*-*-*-*")</div><div class='del'>-    @swatch.pack("side"=&gt;"top","expand"=&gt;"yes","fill"=&gt;"both")</div><div class='del'>-    @value.pack("side"=&gt;"bottom","pady"=&gt;".25c")</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_color(color)</div><div class='del'>-    @swatch["background"] = color</div><div class='del'>-    @value["text"] = color</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 TkColorMiddleFrame&lt;TkFrame</div><div class='del'>-  attr_reader :left, :middle, :right</div><div class='del'>-</div><div class='del'>-  def initialize(parent)</div><div class='del'>-    super(parent,</div><div class='del'>-	  "relief"=&gt; "raised",</div><div class='del'>-	  "borderwidth"=&gt; "2")</div><div class='del'>-</div><div class='del'>-    @left = TkColorMiddleLeftFrame.new(self)</div><div class='del'>-    @left.pack("side"=&gt;"left","padx"=&gt;".25c","pady"=&gt;".25c")</div><div class='del'>-</div><div class='del'>-    @middle = TkColorMiddleMiddleFrame.new(self)</div><div class='del'>-    @middle.pack("side"=&gt;"left","expand"=&gt;"yes","fill"=&gt;"y")</div><div class='del'>-</div><div class='del'>-    @right = TkColorMiddleRightFrame.new(self)</div><div class='del'>-    @right.pack("side"=&gt;"left","padx"=&gt;".25c","pady"=&gt;".25c","anchor"=&gt;"s")</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'>-</div><div class='del'>-class TkColor&lt;TkRoot</div><div class='del'>-  attr_reader :menu, :bottom, :middle</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @menu = TkColorMenuFrame.new(self)</div><div class='del'>-    @menu.pack("side"=&gt;"top", "fill"=&gt;"x")</div><div class='del'>-</div><div class='del'>-    @bottom = TkColorBotFrame.new(self)</div><div class='del'>-    @bottom.pack("side"=&gt;"bottom","fill"=&gt;"x")</div><div class='del'>-</div><div class='del'>-    @middle = TkColorMiddleFrame.new(self)</div><div class='del'>-    @middle.pack("side"=&gt;"top","fill"=&gt;"both")</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'>-</div><div class='del'>-$root = TkColor.new</div><div class='del'>-</div><div class='del'>-# ¥¤¥Ù¥ó¥È¤òÂÔ¤Ä°Ù¤Ë¥ë¡¼¥×¤ËÆþ¤ë¡£</div><div class='del'>-changeColorSpace :rgb</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/text.rb b/ext/tk/sample/demos-jp/text.rb<br/>deleted file mode 100644<br/>index 0ae480eb00..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/text.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/text.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# text (basic facilities) 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?($text_demo) &amp;&amp; $text_demo</div><div class='del'>-  $text_demo.destroy </div><div class='del'>-  $text_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$text_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Basic Facilities")</div><div class='del'>-  iconname("text")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($text_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# version check</div><div class='del'>-if ((Tk::TK_VERSION.split('.').collect{|n| n.to_i} &lt;=&gt; [8,4]) &lt; 0)</div><div class='del'>-  undo_support = false</div><div class='del'>-else</div><div class='del'>-  undo_support = true</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $text_demo</div><div class='del'>-      $text_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'text'}</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'>-# text À¸À®</div><div class='del'>-TkText.new(base_frame){|t|</div><div class='del'>-  # À¸À®</div><div class='del'>-  relief 'sunken'</div><div class='del'>-  bd 2</div><div class='del'>-  setgrid 1</div><div class='del'>-  height 30</div><div class='del'>-  TkScrollbar.new(base_frame) {|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'>-  insert('0.0', &lt;&lt;EOT)</div><div class='del'>-¤³¤Î¥¦¥£¥ó¥É¥¦¤Ï¥Æ¥­¥¹¥È widget ¤Ç¤¹¡£1¹Ô¤Þ¤¿¤Ï¤½¤ì°Ê¾å¤Î¥Æ¥­¥¹¥È¤òÉ½</div><div class='del'>-¼¨¡¦ÊÔ½¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£°Ê²¼¤Ï¥Æ¥­¥¹¥È widget ¤Ç¤Ç¤­¤ëÁàºî¤Ë¤Ä¤¤¤Æ</div><div class='del'>-¤Þ¤È¤á¤¿¤â¤Î¤Ç¤¹¡£</div><div class='del'>-</div><div class='del'>-1. ¥¹¥¯¥í¡¼¥ë¡£¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤Ç¥Æ¥­¥¹¥È¤ÎÉ½¼¨ÉôÊ¬¤òÆ°¤«¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-2. ¥¹¥­¥ã¥Ë¥ó¥°¡£¥Æ¥­¥¹¥È¤Î¥¦¥£¥ó¥É¥¦¤Ç¥Þ¥¦¥¹¥Ü¥¿¥ó2 (Ãæ¥Ü¥¿¥ó¤ò) ¤ò²¡</div><div class='del'>-¤·¤Æ¾å²¼¤Ë¥É¥é¥Ã¥°¤·¤Æ¤¯¤À¤µ¤¤¡£¤½¤¦¤¹¤ë¤È¥Æ¥­¥¹¥È¤¬¹âÂ®¤Ç¥É¥é¥Ã¥°¤µ¤ì¡¢</div><div class='del'>-ÆâÍÆ¤ò¤¶¤Ã¤ÈÄ¯¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-3. ¥Æ¥­¥¹¥È¤ÎÁÞÆþ¡£¥Þ¥¦¥¹¥Ü¥¿¥ó1 (º¸¥Ü¥¿¥ó) ¤ò²¡¤·¡¢ÁÞÆþ¥«¡¼¥½¥ë¤ò¥»¥Ã</div><div class='del'>-¥È¤·¤Æ¤«¤é¥Æ¥­¥¹¥È¤òÆþÎÏ¤·¤Æ¤¯¤À¤µ¤¤¡£ÆþÎÏ¤·¤¿¤â¤Î¤¬ widget ¤ËÆþ¤ê¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-4. ÁªÂò¡£¤¢¤ëÈÏ°Ï¤ÎÊ¸»ú¤òÁªÂò¤¹¤ë¤Ë¤Ï¥Þ¥¦¥¹¥Ü¥¿¥ó1 ¤ò²¡¤·¡¢¥É¥é¥Ã¥°¤·</div><div class='del'>-¤Æ¤¯¤À¤µ¤¤¡£°ìÅÙ¥Ü¥¿¥ó¤òÎ¥¤·¤¿¤é¡¢¥·¥Õ¥È¥­¡¼¤ò²¡¤·¤Ê¤¬¤é¥Ü¥¿¥ó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'>-5. ¾Ãµî¤ÈÃÖ´¹¡£¥Æ¥­¥¹¥È¤ò¾Ãµî¤¹¤ë¤Ë¤Ï¡¢¾Ãµî¤·¤¿¤¤Ê¸»ú¤òÁªÂò¤·¤Æ¥Ð¥Ã¥¯</div><div class='del'>-¥¹¥Ú¡¼¥¹¤«¥Ç¥ê¡¼¥È¥­¡¼¤òÆþÎÏ¤·¤Æ¤¯¤À¤µ¤¤¡£¤¢¤ë¤¤¤Ï¡¢¿·¤·¤¤¥Æ¥­¥¹¥È¤ò</div><div class='del'>-ÆþÎÏ¤¹¤ë¤ÈÁªÂò¤µ¤ì¤¿¥Æ¥­¥¹¥È¤ÈÃÖ´¹¤µ¤ì¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-6. ÁªÂòÉôÊ¬¤Î¥³¥Ô¡¼¡£ÁªÂòÉôÊ¬¤ò¤³¤Î¥¦¥£¥ó¥É¥¦¤ÎÃæ¤Î¤É¤³¤«¤Ë¥³¥Ô¡¼¤¹¤ë</div><div class='del'>-¤Ë¤Ï¡¢¤Þ¤º¥³¥Ô¡¼¤·¤¿¤¤½ê¤òÁªÂò(¤³¤³¤Ç¡¢¤¢¤ë¤¤¤ÏÊÌ¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç)</div><div class='del'>-¤·¡¢¥Ü¥¿¥ó 2 ¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¡¢ÁÞÆþ¥«¡¼¥½¥ë¤Î°ÌÃÖ¤Ë¥³¥Ô¡¼¤·¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-</div><div class='del'>-7. ÊÔ½¸¡£¥Æ¥­¥¹¥È widget ¤Ï Emacs ¤Î¥­¡¼¥Ð¥¤¥ó¥É¤Ë²Ã¤¨¤ÆÉ¸½àÅª¤Ê¤Î Motif</div><div class='del'>-¤ÎÊÔ½¸µ¡Ç½¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¤È¥³¥ó¥È¥í¡¼¥ë-H ¤ÏÁÞÆþ</div><div class='del'>-¥«¡¼¥½¥ë¤Îº¸Â¦¤ÎÊ¸»ú¤òºï½ü¤·¤Þ¤¹¡£¥Ç¥ê¡¼¥È¥­¡¼¤È¥³¥ó¥È¥í¡¼¥ë-D ¤ÏÁÞÆþ</div><div class='del'>-¥«¡¼¥½¥ë¤Î±¦Â¦¤ÎÊ¸»ú¤òºï½ü¤·¤Þ¤¹¡£Meta-¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¤ÏÁÞÆþ¥«¡¼¥½¥ë¤Î</div><div class='del'>-±¦Â¦¤ÎÃ±¸ì¤òºï½ü¤·¡¢Meta-D ¤ÏÁÞÆþ¥«¡¼¥½¥ë¤Îº¸Â¦¤ÎÃ±¸ì¤òºï½ü¤·¤Þ¤¹¡£</div><div class='del'>-¥³¥ó¥È¥í¡¼¥ë-K ¤ÏÁÞÆþ¥«¡¼¥½¥ë¤«¤é¹ÔËö¤Þ¤Ç¤òºï½ü¤·¡¢¤½¤Î°ÌÃÖ¤Ë²þ¹Ô</div><div class='del'>-¤·¤«¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢²þ¹Ô¤òºï½ü¤·¤Þ¤¹¡£#{</div><div class='del'>-      if undo_support</div><div class='del'>-        undo_text = "Control-z ¤ÏºÇ¸å¤Ë¹Ô¤Ã¤¿ÊÑ¹¹¤Î¼è¤ê¾Ã¤·(undo)¤ò¹Ô¤¤¡¢"</div><div class='del'>-        case $tk_platform['platform']</div><div class='del'>-        when "unix", "macintosh"</div><div class='del'>-          undo_text &lt;&lt; "Control-Shift-z"</div><div class='del'>-        else # 'windows'</div><div class='del'>-          undo_text &lt;&lt; "Control-y"</div><div class='del'>-        end</div><div class='del'>-        undo_text &lt;&lt; "¤Ïundo¤·¤¿ÊÑ¹¹¤ÎºÆÅ¬ÍÑ(redo)¤ò¹Ô¤¤¤Þ¤¹¡£"</div><div class='del'>-      else</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'>-8. ¥¦¥£¥ó¥É¥¦¤Î¥ê¥µ¥¤¥º¡£¤³¤Î widget ¤Ï "setGrid" ¥ª¥×¥·¥ç¥ó¤ò¥ª¥ó¤Ë¤·</div><div class='del'>-¤Æ¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¥¦¥£¥ó¥É¥¦¤ò¥ê¥µ¥¤¥º¤¹¤ë»þ¤Ë¤Ï¹â¤µ¤ÈÉý¤Ï¾ï¤ËÊ¸»ú¹â¤ÈÊ¸</div><div class='del'>-»úÉý¤ÎÀ°¿ôÇÜ¤Ë¤Ê¤ê¤Þ¤¹¡£¤Þ¤¿¡¢¥¦¥£¥ó¥É¥¦¤ò¶¹¤¯¤·¤¿¾ì¹ç¤Ë¤ÏÄ¹¤¤¹Ô¤¬¼«Æ°</div><div class='del'>-Åª¤ËÀÞ¤êÊÖ¤µ¤ì¡¢¾ï¤ËÁ´¤Æ¤ÎÆâÍÆ¤¬¸«¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£</div><div class='del'>-EOT</div><div class='del'>-</div><div class='del'>-  set_insert('0.0')</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/textpeer.rb b/ext/tk/sample/demos-jp/textpeer.rb<br/>deleted file mode 100644<br/>index 4967a99c92..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/textpeer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/textpeer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,82 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# text widget peering demo (called by 'widget')</div><div class='del'>-#</div><div class='del'>-# based on Tcl/Tk8.5.0 widget demos</div><div class='del'>-</div><div class='del'>-if defined?($textpeer_demo) &amp;&amp; $textpeer_demo</div><div class='del'>-  $textpeer_demo.destroy </div><div class='del'>-  $textpeer_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo toplevel widget</div><div class='del'>-$textpeer_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Wdget Peering Demonstration")</div><div class='del'>-  iconname("textpeer")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($textpeer_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-count = [0]</div><div class='del'>-</div><div class='del'>-## Define a widget that we peer from; it won't ever actually be shown though</div><div class='del'>-first = TkText.new(base_frame, :widgetname=&gt;"text#{count[0] += 1}")</div><div class='del'>-first.insert :end,"¤³¤Î¥Ç¥â¤Ï°ì¤Ä¤ÎÁÈ¤òÀ®¤·¤¿¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤ò¼¨¤·¤Þ¤¹¡£"</div><div class='del'>-first.insert :end,"¤½¤ì¤é¤Î¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤ÏÂÐÅù(¥Ô¥¢;peer)¤Î´Ø·¸¤Ë"</div><div class='del'>-first.insert :end,"¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£"</div><div class='del'>-first.insert :end,"¤½¤ì¤é¤Ï¡¢´ðÈ×¤È¤Ê¤ë¥Ç¡¼¥¿¥â¥Ç¥ë¤Ï¶¦ÄÌ¤Î¤â¤Î¤ò»ý¤Á¤Þ¤¹¤¬¡¢"</div><div class='del'>-first.insert :end,"²èÌÌÉ½¼¨°ÌÃÖ¡¢ÊÔ½¸°ÌÃÖ¡¢ÁªÂòÈÏ°Ï(selection)¤Ë¤Ä¤¤¤Æ¤Ï"</div><div class='del'>-first.insert :end,"ÆÈÎ©¤Ë»ý¤Ä¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£"</div><div class='del'>-first.insert :end,"³Æ¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤ÎÏÆ¤Ë¤¢¤ë"</div><div class='del'>-first.insert :end,"¡Ö¥Ô¥¢(peer)¤ÎºîÀ®¡×¥Ü¥¿¥ó¤ò»È¤¨¤Ð¡¢"</div><div class='del'>-first.insert :end,"¿·¤¿¤Ê¥Ô¥¢¤òÄÉ²Ã¤¹¤ë¤³¤È¤¬²ÄÇ½¤Ç¤¹¡£"</div><div class='del'>-first.insert :end,"¤Þ¤¿¡Ö¥Ô¥¢(peer)¤Î¾Ãµî¡×¥Ü¥¿¥ó¤ò»È¤¨¤Ð¡¢"</div><div class='del'>-first.insert :end,"ÆÃÄê¤Î¥Ô¥¢¥¦¥£¥¸¥§¥Ã¥È¤ò¾Ãµî¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£"</div><div class='del'>-</div><div class='del'>-Tk.update_idletasks  ## for 'first' widget</div><div class='del'>-</div><div class='del'>-## Procedures to make and kill clones; most of this is just so that the demo</div><div class='del'>-## looks nice...</div><div class='del'>-def makeClone(count, win, txt)</div><div class='del'>-  cnt = (count[0] += 1)</div><div class='del'>-  peer = TkText::Peer.new(txt, win, :widgetname=&gt;"text#{cnt}")</div><div class='del'>-  sbar = TkScrollbar.new(win, :widgetname=&gt;"sb#{cnt}")</div><div class='del'>-  peer.yscrollbar sbar</div><div class='del'>-  b1 = TkButton.new(win, :widgetname=&gt;"clone#{cnt}", </div><div class='del'>-                    :text=&gt;'¥Ô¥¢(peer)¤ÎºîÀ®', </div><div class='del'>-                    :command=&gt;proc{makeClone(count, win, peer)})</div><div class='del'>-  b2 = TkButton.new(win, :widgetname=&gt;"kill#{cnt}", </div><div class='del'>-                    :text=&gt;'¥Ô¥¢(peer)¤Î¾Ãµî', </div><div class='del'>-                    :command=&gt;proc{killClone(win, cnt)})</div><div class='del'>-  row = cnt * 2</div><div class='del'>-  TkGrid.configure(peer, sbar, b1, :sticky=&gt;'nsew', :row=&gt;row)</div><div class='del'>-  TkGrid.configure('^',  '^',  b2, :sticky=&gt;'nsew', :row=&gt;(row+=1))</div><div class='del'>-  TkGrid.configure(b1,  b2, :sticky=&gt;'new')</div><div class='del'>-  TkGrid.rowconfigure(win,  b2, :weight=&gt;1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def killClone(win, cnt)</div><div class='del'>-  Tk.destroy("#{win.path}.text#{cnt}",  "#{win.path}.sb#{cnt}", </div><div class='del'>-             "#{win.path}.clone#{cnt}", "#{win.path}.kill#{cnt}")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Now set up the GUI</div><div class='del'>-makeClone(count, base_frame, first)</div><div class='del'>-makeClone(count, base_frame, first)</div><div class='del'>-first.destroy</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss buttons</div><div class='del'>-TkFrame.new(base_frame){|f|</div><div class='del'>-  TkButton.new(f, :text=&gt;'ÊÄ¤¸¤ë', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 $textpeer_demo.destroy</div><div class='del'>-                 $textpeer_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;'¥³¡¼¥É»²¾È', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 showCode 'textpeer'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-  TkGrid.configure(f, '-', '-', :sticky=&gt;'ew', :row=&gt;5000)</div><div class='del'>-}</div><div class='del'>-TkGrid.columnconfigure(base_frame, 0, :weight=&gt;1)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/timer b/ext/tk/sample/demos-jp/timer<br/>deleted file mode 100644<br/>index 58a41d00c0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/timer?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/timer</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,136 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# timer --</div><div class='del'>-# This script generates a counter with start,stop and reset buttons.</div><div class='del'>-#</div><div class='del'>-# Copyright (C) 1998 Takaaki Tateishi (ttate@jaist.ac.jp)</div><div class='del'>-# last update: Sat Jun 27 12:24:14 JST 1998</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-require "thread"</div><div class='del'>-require "tkafter"</div><div class='del'>-</div><div class='del'>-$time = "0.00"</div><div class='del'>-$m = Mutex.new</div><div class='del'>-$loop = false</div><div class='del'>-</div><div class='del'>-def timer_stop</div><div class='del'>-  $loop = false</div><div class='del'>-  $m.lock</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def timer_start</div><div class='del'>-  $loop = true</div><div class='del'>-  $m.unlock</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def timer_reset</div><div class='del'>-  $time = "0.00"</div><div class='del'>-  $root.countframe.counter['text'] = $time</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def timer_loop</div><div class='del'>-  if $loop</div><div class='del'>-    $time = $time.succ</div><div class='del'>-    $root.countframe.counter['text'] = $time</div><div class='del'>-  end</div><div class='del'>-  Tk.after(10,proc{timer_loop})</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# thread version</div><div class='del'>-#</div><div class='del'>-def timer_loop2</div><div class='del'>-  while true</div><div class='del'>-    $m.lock</div><div class='del'>-    $time = $time.succ</div><div class='del'>-    $root.countframe.counter['text'] = $time</div><div class='del'>-    sleep(0.01)</div><div class='del'>-    $m.unlock</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# TkAfter</div><div class='del'>-#</div><div class='del'>-def timer_loop3</div><div class='del'>-  if $loop</div><div class='del'>-    $time = $time.succ</div><div class='del'>-    $root.countframe.counter['text'] = $time</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class CountFrame &lt; TkFrame</div><div class='del'>-  attr_reader :counter</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-    @counter = TkLabel.new(self,</div><div class='del'>-			   'text'=&gt;$time, </div><div class='del'>-			   'relief'=&gt;'raised')</div><div class='del'>-    @counter.pack('fill'=&gt;'both')</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 ButtonFrame &lt; TkFrame</div><div class='del'>-  def initialize(parent=nil,keys=nil)</div><div class='del'>-    super(parent,keys)</div><div class='del'>-=begin</div><div class='del'>-    @stop = TkButton.new(self,</div><div class='del'>-			 'text'=&gt;'Stop',</div><div class='del'>-			 'command'=&gt;proc{timer_stop})</div><div class='del'>-    @start = TkButton.new(self,</div><div class='del'>-			  'text'=&gt;'Start',</div><div class='del'>-			  'command'=&gt;proc{timer_start})</div><div class='del'>-=end</div><div class='del'>-    @stop  = TkButton.new(self, :text=&gt;'Stop',  :state=&gt;:disabled)</div><div class='del'>-    @start = TkButton.new(self, :text=&gt;'Start', :state=&gt;:normal)</div><div class='del'>-</div><div class='del'>-    @stop.command proc{</div><div class='del'>-      timer_stop</div><div class='del'>-      @start.state(:normal)</div><div class='del'>-      @stop.state(:disabled)</div><div class='del'>-    }</div><div class='del'>-    @start.command proc{</div><div class='del'>-      timer_start</div><div class='del'>-      @stop.state(:normal)</div><div class='del'>-      @start.state(:disabled)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @reset = TkButton.new(self,</div><div class='del'>-			  'text'=&gt;'Reset',</div><div class='del'>-			  'command'=&gt;proc{timer_reset})</div><div class='del'>-    for b in [@stop,@start,@reset]</div><div class='del'>-      b.pack('side'=&gt;'left', 'fill'=&gt;'both', 'expand'=&gt;'yes')</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 Timer &lt; TkRoot</div><div class='del'>-  attr_reader :countframe</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-    @countframe = CountFrame.new(self)</div><div class='del'>-    @buttonframe = ButtonFrame.new(self)</div><div class='del'>-    for f in [@buttonframe,@countframe]</div><div class='del'>-      f.pack('side'=&gt;'top', 'fill'=&gt;'both')</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'>-</div><div class='del'>-$root = Timer.new</div><div class='del'>-</div><div class='del'>-#$thread = Thread.start{timer_loop2}</div><div class='del'>-#timer_loop</div><div class='del'>-TkAfter.new(10,-1,proc{timer_loop3}).start</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/toolbar.rb b/ext/tk/sample/demos-jp/toolbar.rb<br/>deleted file mode 100644<br/>index 9cb3834c34..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/toolbar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/toolbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,136 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# toolbar.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toolbar that can be torn off.</div><div class='del'>-#</div><div class='del'>-# based on "Id: toolbar.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($toolbar_demo) &amp;&amp; $toolbar_demo</div><div class='del'>-  $toolbar_demo.destroy </div><div class='del'>-  $toolbar_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$toolbar_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Ttk Menu Buttons")</div><div class='del'>-  iconname("toolbar")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = Ttk::Frame.new($toolbar_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  msg = Ttk::Label.new(base_frame, :wraplength=&gt;'4i', :text=&gt;&lt;&lt;EOL)</div><div class='del'>-¤³¤Î¥Ç¥â¤Ç¤Ï¡¤¥Ä¡¼¥ë¥Ð¡¼¤ò¤É¤Î¤è¤¦¤Ë¤·¤ÆÅ¬ÀÚ¤Ë¥Æ¡¼¥ÞÂÐ±þ¤µ¤»¤ë¤«¡¤\</div><div class='del'>-¤Þ¤¿¡¤¤É¤Î¤è¤¦¤Ë¤·¤ÆÀÚ¤êÎ¥¤·²ÄÇ½¤Ë¤¹¤ë¤«¤ò¼¨¤·¤Æ¤¤¤Þ¤¹\</div><div class='del'>-¡Ê¤¿¤À¤·¡¤¥Ä¡¼¥ë¥Ð¡¼¤ÎÀÚ¤êÎ¥¤·¤Ë¤ÏTcl/Tk8.5°Ê¾å¤Îµ¡Ç½¤¬É¬Í×¤Ç¤¹¡Ë¡¥\</div><div class='del'>-¥Ä¡¼¥ë¥Ð¡¼¤Î¥Ü¥¿¥ó¤Ï¡¤'Toolbutton'¥¹¥¿¥¤¥ë¤ò»ÈÍÑ¤¹¤ë¤è¤¦¤ËÌÀ¼¨¤¹¤ë¤³¤È¤Ç¡¤\</div><div class='del'>-"toolbar style"¥Ü¥¿¥ó¤È¤Ê¤ë¤è¤¦¤ËÂ°À­ÀßÄê¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥\</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'>-ºÆ¤Ó¸µ¤Î¥¦¥£¥ó¥É¥¦¤ËÄ¥¤êÉÕ¤±¤é¤ì¤ë¤Ç¤·¤ç¤¦¡¥</div><div class='del'>-EOL</div><div class='del'>-else</div><div class='del'>-  msg = Ttk::Label.new(base_frame, :wraplength=&gt;'4i', :text=&gt;&lt;&lt;EOL)</div><div class='del'>-¤³¤Î¥Ç¥â¤Ç¤Ï¡¤¥Ä¡¼¥ë¥Ð¡¼¤ò¤É¤Î¤è¤¦¤Ë¤·¤ÆÅ¬ÀÚ¤Ë¥Æ¡¼¥ÞÂÐ±þ¤µ¤»¤ë¤«¤ò\</div><div class='del'>-¼¨¤·¤Æ¤¤¤Þ¤¹¡¥\</div><div class='del'>-¥Ä¡¼¥ë¥Ð¡¼¤Î¥Ü¥¿¥ó¤Ï¡¤'Toolbutton'¥¹¥¿¥¤¥ë¤ò»ÈÍÑ¤¹¤ë¤è¤¦¤ËÌÀ¼¨¤¹¤ë¤³¤È¤Ç¡¤\</div><div class='del'>-"toolbar style"¥Ü¥¿¥ó¤È¤Ê¤ë¤è¤¦¤ËÂ°À­ÀßÄê¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-EOL</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Set up the toolbar hull</div><div class='del'>-tbar_base = Tk::Frame.new(base_frame,  # Tk É¸½à¤Î frame ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡¥</div><div class='del'>-                          :widgetname=&gt;'toolbar') # ¥¦¥£¥ó¥É¥¦¥¿¥¤¥È¥ëÊ¸»úÎó¤È¤¹¤ë¤¿¤á¤Ë¡¤¥¦¥£¥¸¥§¥Ã¥ÈÌ¾¤òÌÀ¼¨¤·¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-sep = Ttk::Separator.new(base_frame)</div><div class='del'>-to_base = Ttk::Frame.new(tbar_base, :cursor=&gt;'fleur')</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  to  = Ttk::Separator.new(to_base, :orient=&gt;:vertical)</div><div class='del'>-  to2 = Ttk::Separator.new(to_base, :orient=&gt;:vertical)</div><div class='del'>-  to.pack(:fill=&gt;:y, :expand=&gt;true, :padx=&gt;2, :side=&gt;:left)</div><div class='del'>-  to2.pack(:fill=&gt;:y, :expand=&gt;true, :side=&gt;:left)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-contents = Ttk::Frame.new(tbar_base)</div><div class='del'>-Tk.grid(to_base, contents, :sticky=&gt;'nsew')</div><div class='del'>-tbar_base.grid_columnconfigure(contents, :weight=&gt;1)</div><div class='del'>-contents.grid_columnconfigure(1000, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  ## Bindings so that the toolbar can be torn off and reattached</div><div class='del'>-  to_base.bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}</div><div class='del'>-  to.     bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}</div><div class='del'>-  to2.    bind('B1-Motion', '%X %Y'){|x, y| tbar_base.tearoff(to_base, x, y)}</div><div class='del'>-  def tbar_base.tearoff(w, x, y)</div><div class='del'>-    on_win = TkWinfo.containing(x, y)</div><div class='del'>-    return unless (on_win &amp;&amp; on_win.path =~ /^#{@path}(\.|$)/)</div><div class='del'>-    self.grid_remove</div><div class='del'>-    w.grid_remove</div><div class='del'>-    self.wm_manage</div><div class='del'>-    # self.wm_title('Toolbar') # ¤â¤·¥¦¥£¥¸¥§¥Ã¥ÈÌ¾¤ò¥¦¥£¥ó¥É¥¦¥¿¥¤¥È¥ë¤Ë¤·¤¿¤¯¤Ê¤¤¤Ê¤é¡¤¤³¤³¤ÇÀßÄê¤·¤Æ¤¯¤À¤µ¤¤</div><div class='del'>-    self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(self) }</div><div class='del'>-  end</div><div class='del'>-  def tbar_base.untearoff(w)</div><div class='del'>-    self.wm_forget</div><div class='del'>-    w.grid</div><div class='del'>-    self.grid</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Some content for the rest of the toplevel</div><div class='del'>-text = TkText.new(base_frame, :width=&gt;40, :height=&gt;10)</div><div class='del'>-</div><div class='del'>-## Toolbar contents</div><div class='del'>-tb_btn = Ttk::Button.new(tbar_base, :text=&gt;'¥Ü¥¿¥ó', :style=&gt;'Toolbutton', </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           text.insert(:end, "¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤Þ¤·¤¿¡¥\n")</div><div class='del'>-                         })</div><div class='del'>-tb_chk = Ttk::Checkbutton.new(tbar_base, :text=&gt;'¥Á¥§¥Ã¥¯¥Ü¥¿¥ó', </div><div class='del'>-                              :style=&gt;'Toolbutton', </div><div class='del'>-                              :variable=&gt;(check = TkVariable.new), </div><div class='del'>-                              :command=&gt;proc{</div><div class='del'>-                                text.insert(:end, "¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤ÎÃÍ¤Ï#{check.value}¤Ç¤¹¡¥\n")</div><div class='del'>-                              })</div><div class='del'>-tb_mbtn = Ttk::Menubutton.new(tbar_base, :text=&gt;'¥á¥Ë¥å¡¼')</div><div class='del'>-tb_combo = Ttk::Combobox.new(tbar_base, :value=&gt;TkFont.families, </div><div class='del'>-                             :state=&gt;:readonly)</div><div class='del'>-tb_mbtn.menu(menu = Tk::Menu.new(tb_mbtn))</div><div class='del'>-menu.add(:command, :label=&gt;'Just', :command=&gt;proc{text.insert(:end, "Just\n")})</div><div class='del'>-menu.add(:command, :label=&gt;'An', :command=&gt;proc{text.insert(:end, "An\n")})</div><div class='del'>-menu.add(:command, :label=&gt;'Example', </div><div class='del'>-         :command=&gt;proc{text.insert(:end, "Example\n")})</div><div class='del'>-tb_combo.bind('&lt;ComboboxSelected&gt;'){ text.font.family = tb_combo.get }</div><div class='del'>-</div><div class='del'>-## Arrange contents</div><div class='del'>-Tk.grid(tb_btn, tb_chk, tb_mbtn, tb_combo, </div><div class='del'>-        :in=&gt;contents, :padx=&gt;2, :sticky=&gt;'ns')</div><div class='del'>-Tk.grid(tbar_base, :sticky=&gt;'ew')</div><div class='del'>-Tk.grid(sep, :sticky=&gt;'ew')</div><div class='del'>-Tk.grid(msg, :sticky=&gt;'ew')</div><div class='del'>-Tk.grid(text, :sticky=&gt;'nsew')</div><div class='del'>-base_frame.grid_rowconfigure(text, :weight=&gt;1)</div><div class='del'>-base_frame.grid_columnconfigure(text, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss buttons</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'toolbar'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $toolbar_demo.destroy</div><div class='del'>-                           $toolbar_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-  Tk.grid(frame, :sticky=&gt;'ew')</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/tree.rb b/ext/tk/sample/demos-jp/tree.rb<br/>deleted file mode 100644<br/>index c3b4191144..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/tree.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/tree.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# tree.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing a Ttk</div><div class='del'>-# tree widget.</div><div class='del'>-#</div><div class='del'>-# based on "Id: tree.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($tree_demo) &amp;&amp; $tree_demo</div><div class='del'>-  $tree_demo.destroy </div><div class='del'>-  $tree_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$tree_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Directory Browser")</div><div class='del'>-  iconname("tree")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($tree_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-## Explanatory text</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', </div><div class='del'>-               :justify=&gt;:left, :anchor=&gt;'n', :padding=&gt;[10, 2, 10, 6], </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:fill=&gt;:x)</div><div class='del'>-Ttk¤È¤Ï¡¤¥Æ¡¼¥Þ»ØÄê²ÄÇ½¤Ê¿·¤·¤¤¥¦¥£¥¸¥§¥Ã¥È½¸¹ç¤Ç¤¹¡¥\</div><div class='del'>-¤³¤Î¥µ¥ó¥×¥ë¤Ï¡¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¤è¤¦¤Ê³¬ÁØÅª¤Ê¥Ç¡¼¥¿½¸¹ç¤ò\</div><div class='del'>-»²¾È¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿Ttk::Treeview¥¦¥£¥¸¥§¥Ã¥È¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡¥\</div><div class='del'>-Ttk::Treeview¥¦¥£¥¸¥§¥Ã¥È¤Ï¡¤ÌÚ¹½Â¤¼«ÂÎ¤ÎÉ½¼¨¤ò²ÄÇ½¤Ë¤¹¤ë¤À¤±¤Ç¤Ê¤¯¡¤\</div><div class='del'>-ÄÉ²Ã¾ðÊó(¤³¤Î¥µ¥ó¥×¥ë¤Î¾ì¹ç¤Ï¥Õ¥¡¥¤¥ë¥µ¥¤¥º)¤òÉ½¼¨¤¹¤ë¤¿¤á¤Ë\</div><div class='del'>-Ç¤°Õ¤Î¸Ä¿ô¤ÎÄÉ²Ã¥«¥é¥à¤â°·¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡¥\</div><div class='del'>-¤Þ¤¿¡¤¥«¥é¥à¤Î¥¿¥¤¥È¥ë´Ö¤Î¶èÀÚ¤êÉôÊ¬¤ò¥É¥é¥Ã¥°¤¹¤ë¤³¤È¤Ç¡¤\</div><div class='del'>-¥«¥é¥à¤ÎÉý¤òÊÑ¹¹¤¹¤ë¤³¤È¤â²ÄÇ½¤Ç¤¹¡¥</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'tree'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $tree_demo.destroy</div><div class='del'>-                           $tree_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-## Code to populate the roots of the tree (can be more than one on Windows)</div><div class='del'>-def populate_roots(tree)</div><div class='del'>-  TkComm.simplelist(Tk.tk_call('file', 'volumes')).sort.each{|dir|</div><div class='del'>-    populate_tree(tree, tree.insert(nil, :end, :text=&gt;dir, </div><div class='del'>-                                    :values=&gt;[dir, 'directory']))</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Code to populate a node of the tree</div><div class='del'>-def populate_tree(tree, node)</div><div class='del'>-  return if tree.get(node, :type) != 'directory'</div><div class='del'>-</div><div class='del'>-  path = tree.get(node, :fullpath)</div><div class='del'>-  tree.delete(tree.children(node))</div><div class='del'>-  Dir.glob("#{path}/*").sort.each{|f|</div><div class='del'>-    type = File.ftype(f)</div><div class='del'>-    id = tree.insert(node, :end, </div><div class='del'>-                     :text=&gt;File.basename(f), :values=&gt;[f, type]).id</div><div class='del'>-    if type == 'directory'</div><div class='del'>-      ## Make it so that this node is openable</div><div class='del'>-      tree.insert(id, 0, :text=&gt;'dummy')</div><div class='del'>-      tree.itemconfigure(id, :text=&gt;File.basename(f))</div><div class='del'>-    elsif type == 'file'</div><div class='del'>-      size = File.size(f)</div><div class='del'>-      if size &gt;= 1024*1024*1024</div><div class='del'>-        size = '%.1f GB' % (size.to_f/1024/1024/1024)</div><div class='del'>-      elsif size &gt;= 1024*1024</div><div class='del'>-        size = '%.1f MB' % (size.to_f/1024/1024)</div><div class='del'>-      elsif size &gt;= 1024</div><div class='del'>-        size = '%.1f KB' % (size.to_f/1024)</div><div class='del'>-      else</div><div class='del'>-        size = '%.1f bytes' % (size.to_f/1024)</div><div class='del'>-      end</div><div class='del'>-      tree.set(id, :size, size)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # Stop this code from rerunning on the current node</div><div class='del'>-  tree.set(node, :type, 'processed_directory')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Create the tree and set it up</div><div class='del'>-tree = Ttk::Treeview.new(base_frame, :columns=&gt;%w(fullpath type size), </div><div class='del'>-                         :displaycolumns=&gt;['size'])</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  vsb = tree.yscrollbar(Ttk::Scrollbar.new(base_frame))</div><div class='del'>-  hsb = tree.xscrollbar(Ttk::Scrollbar.new(base_frame))</div><div class='del'>-else</div><div class='del'>-  vsb = tree.yscrollbar(Tk::Scrollbar.new(base_frame))</div><div class='del'>-  hsb = tree.xscrollbar(Tk::Scrollbar.new(base_frame))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-tree.heading_configure('#0', :text=&gt;'Directory Structure')</div><div class='del'>-tree.heading_configure('size', :text=&gt;'File Size')</div><div class='del'>-tree.column_configure('size', :stretch=&gt;0, :width=&gt;70)</div><div class='del'>-populate_roots(tree)</div><div class='del'>-tree.bind('&lt;TreeviewOpen&gt;', '%W'){|w| populate_tree(w, w.focus_item)}</div><div class='del'>-</div><div class='del'>-## Arrange the tree and its scrollbars in the toplevel</div><div class='del'>-container = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-container.lower</div><div class='del'>-Tk.grid(tree, vsb, :in=&gt;container, :sticky=&gt;'nsew')</div><div class='del'>-Tk.grid(hsb,       :in=&gt;container, :sticky=&gt;'nsew')</div><div class='del'>-container.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-container.grid_rowconfigure(0, :weight=&gt;1)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/ttkbut.rb b/ext/tk/sample/demos-jp/ttkbut.rb<br/>deleted file mode 100644<br/>index 4d577120bb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ttkbut.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttkbut.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,145 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# ttkbut.rb</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing several</div><div class='del'>-# simple Ttk widgets, such as labels, labelframes, buttons, checkbuttons and</div><div class='del'>-# radiobuttons.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttkbut.tcl,v 1.4 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttkbut_demo) &amp;&amp; $ttkbut_demo</div><div class='del'>-  $ttkbut_demo.destroy </div><div class='del'>-  $ttkbut_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttkbut_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Simple Ttk Widgets")</div><div class='del'>-  iconname("ttkbut")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($ttkbut_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-Ttk¤È¤Ï¡¤¥Æ¡¼¥Þ»ØÄê²ÄÇ½¤Ê¿·¤·¤¤¥¦¥£¥¸¥§¥Ã¥È½¸¹ç¤Ç¤¹¡¥\</div><div class='del'>-º£¡¤¤¢¤Ê¤¿¤¬ÌÜ¤Ë¤·¤Æ¤¤¤ë¤Î¤ÏTtk¤Î¥Æ¡¼¥Þ²½¥é¥Ù¥ë¤Ç¡¤\</div><div class='del'>-²¼¤Ë¤ÏTtk¤Î¥é¥Ù¥ë¥Õ¥ì¡¼¥à¤ÎÃæ¤Ë»°¤Ä¤Î¥°¥ë¡¼¥×¤ÎTtk¥¦¥£¥¸¥§¥Ã¥È¤¬\</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'>-Â¾¤Î¤¹¤Ù¤Æ¤Î¥Æ¡¼¥Þ²½¥¦¥£¥¸¥§¥Ã¥È¤Î¾õÂÖ(state)¤¬"disabled"¤«¤É¤¦¤«¤ò\</div><div class='del'>-¥³¥ó¥È¥í¡¼¥ë¤¹¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-£³ÈÖÌÜ¤Î¥°¥ë¡¼¥×¤Ï´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥é¥¸¥ª¥Ü¥¿¥ó½¸¹ç¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡¥</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## Add buttons for setting the theme</div><div class='del'>-buttons = Ttk::Labelframe.new(base_frame, :text=&gt;'¥Ü¥¿¥ó')</div><div class='del'>-# Ttk::Style.theme_names.each{|theme|</div><div class='del'>-#   Ttk::Button.new(buttons, :text=&gt;theme, </div><div class='del'>-#                   :command=&gt;proc{Ttk::Style.theme_use theme}).pack(:pady=&gt;2)</div><div class='del'>-# }</div><div class='del'>-Ttk.themes.each{|theme|</div><div class='del'>-  Ttk::Button.new(buttons, :text=&gt;theme, </div><div class='del'>-                  :command=&gt;proc{Ttk.set_theme theme}).pack(:pady=&gt;2)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Helper procedure for the top checkbutton</div><div class='del'>-def setState(root, value, *excepts)</div><div class='del'>-  return if excepts.member?(root)</div><div class='del'>-</div><div class='del'>-  ## Non-Ttk widgets (e.g. the toplevel) will fail, so make it silent</div><div class='del'>-  begin</div><div class='del'>-    root.state = value</div><div class='del'>-  rescue</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ## Recursively invoke on all children of this root that are in the same</div><div class='del'>-  ## toplevel widget</div><div class='del'>-  root.winfo_children.each{|w|</div><div class='del'>-    setState(w, value, *excepts) if w.winfo_toplevel == root.winfo_toplevel</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-## Set up the checkbutton group</div><div class='del'>-checks = Ttk::Labelframe.new(base_frame, :text=&gt;'¥Á¥§¥Ã¥¯¥Ü¥¿¥ó')</div><div class='del'>-enabled = TkVariable.new(true)</div><div class='del'>-e = Ttk::Checkbutton.new(checks, :text=&gt;'Í­¸ú²½', :variable=&gt;enabled, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           setState($ttkbut_demo, </div><div class='del'>-                                    ((enabled.bool)? "!disabled" : "disabled"),</div><div class='del'>-                                    e)</div><div class='del'>-                         })</div><div class='del'>-</div><div class='del'>-## See ttk_widget(n) for other possible state flags</div><div class='del'>-sep1 = Ttk::Separator.new(checks)</div><div class='del'>-sep2 = Ttk::Separator.new(checks)</div><div class='del'>-</div><div class='del'>-cheese  = TkVariable.new</div><div class='del'>-tomato  = TkVariable.new</div><div class='del'>-basil   = TkVariable.new</div><div class='del'>-oregano = TkVariable.new</div><div class='del'>-</div><div class='del'>-c1 = Ttk::Checkbutton.new(checks, :text=&gt;'¥Á¡¼¥º',   :variable=&gt;cheese)</div><div class='del'>-c2 = Ttk::Checkbutton.new(checks, :text=&gt;'¥È¥Þ¥È',   :variable=&gt;tomato)</div><div class='del'>-c3 = Ttk::Checkbutton.new(checks, :text=&gt;'¥Ð¥¸¥ë',   :variable=&gt;basil)</div><div class='del'>-c4 = Ttk::Checkbutton.new(checks, :text=&gt;'¥ª¥ì¥¬¥Î', :variable=&gt;oregano)</div><div class='del'>-</div><div class='del'>-Tk.pack(e, sep1, c1, c2, sep2, c3, c4, :fill=&gt;:x, :pady=&gt;2)</div><div class='del'>-</div><div class='del'>-## Set up the radiobutton group</div><div class='del'>-radios = Ttk::Labelframe.new(base_frame, :text=&gt;'¥é¥¸¥ª¥Ü¥¿¥ó')</div><div class='del'>-</div><div class='del'>-happyness = TkVariable.new</div><div class='del'>-</div><div class='del'>-r1 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Great', :value=&gt;'great')</div><div class='del'>-r2 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Good', :value=&gt;'good')</div><div class='del'>-r3 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Ok', :value=&gt;'ok')</div><div class='del'>-r4 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Poor', :value=&gt;'poor')</div><div class='del'>-r5 = Ttk::Radiobutton.new(radios, :variable=&gt;happyness, </div><div class='del'>-                          :text=&gt;'Awful', :value=&gt;'awful')</div><div class='del'>-</div><div class='del'>-Tk.pack(r1, r2, r3, r4, r5, :fill=&gt;:x, :padx=&gt;3, :pady=&gt;2)</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÑ¿ô»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           showVars(base_frame, ['Í­¸ú²½', enabled], </div><div class='del'>-                                    ['¥Á¡¼¥º', cheese], ['¥È¥Þ¥È', tomato], </div><div class='del'>-                                    ['¥Ð¥¸¥ë', basil], ['¥ª¥ì¥¬¥Î', oregano], </div><div class='del'>-                                    ['¹¬Ê¡ÅÙ', happyness])</div><div class='del'>-                         }), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'ttkbut'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           tmppath = $ttkbut_demo</div><div class='del'>-                           $ttkbut_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'>-  grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-  pack(:side=&gt;:bottom, :fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Arrange things neatly</div><div class='del'>-f = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-f.lower</div><div class='del'>-Tk.grid(buttons, checks, radios, :in=&gt;f, :sticky=&gt;'nwe', :pady=&gt;2, :padx=&gt;3)</div><div class='del'>-f.grid_columnconfigure([0, 1, 2], :weight=&gt;1, :uniform=&gt;:yes)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/ttkmenu.rb b/ext/tk/sample/demos-jp/ttkmenu.rb<br/>deleted file mode 100644<br/>index d349b42d11..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ttkmenu.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttkmenu.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,91 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# ttkmenu.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing several Ttk</div><div class='del'>-# menubutton widgets.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttkmenu.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttkmenu_demo) &amp;&amp; $ttkmenu_demo</div><div class='del'>-  $ttkmenu_demo.destroy </div><div class='del'>-  $ttkmenu_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttkmenu_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Ttk Menu Buttons")</div><div class='del'>-  iconname("ttkmenu")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = Ttk::Frame.new($ttkmenu_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-Ttk¤È¤Ï¡¤¥Æ¡¼¥Þ»ØÄê²ÄÇ½¤Ê¿·¤·¤¤¥¦¥£¥¸¥§¥Ã¥È½¸¹ç¤Ç¤¹¡¥\</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'>-ÃíÌÜ¤·¤Æ¤¯¤À¤µ¤¤¡¥\</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'>-È½ÃÇ¤µ¤ì¤¿¤³¤È¤Ë¤è¤ê¤Þ¤¹¡¥</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-Ttk::Separator.new(base_frame).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new($ttkmenu_demo) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'ttkmenu'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $ttkmenu_demo.destroy</div><div class='del'>-                           $ttkmenu_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-b1 = Ttk::Menubutton.new(base_frame,:text=&gt;'¥Æ¡¼¥Þ¤òÁªÂò',:direction=&gt;:above)</div><div class='del'>-b2 = Ttk::Menubutton.new(base_frame,:text=&gt;'¥Æ¡¼¥Þ¤òÁªÂò',:direction=&gt;:left)</div><div class='del'>-b3 = Ttk::Menubutton.new(base_frame,:text=&gt;'¥Æ¡¼¥Þ¤òÁªÂò',:direction=&gt;:right)</div><div class='del'>-b4 = Ttk::Menubutton.new(base_frame,:text=&gt;'¥Æ¡¼¥Þ¤òÁªÂò',:direction=&gt;:flush,</div><div class='del'>-                         :style=&gt;Ttk::Menubutton.style('Toolbutton'))</div><div class='del'>-b5 = Ttk::Menubutton.new(base_frame,:text=&gt;'¥Æ¡¼¥Þ¤òÁªÂò',:direction=&gt;:below)</div><div class='del'>-</div><div class='del'>-b1.menu(m1 = Tk::Menu.new(b1, :tearoff=&gt;false))</div><div class='del'>-b2.menu(m2 = Tk::Menu.new(b2, :tearoff=&gt;false))</div><div class='del'>-b3.menu(m3 = Tk::Menu.new(b3, :tearoff=&gt;false))</div><div class='del'>-b4.menu(m4 = Tk::Menu.new(b4, :tearoff=&gt;false))</div><div class='del'>-b5.menu(m5 = Tk::Menu.new(b5, :tearoff=&gt;false))</div><div class='del'>-</div><div class='del'>-Ttk.themes.each{|theme|</div><div class='del'>-  m1.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-  m2.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-  m3.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-  m4.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-  m5.add(:command, :label=&gt;theme, :command=&gt;proc{Ttk.set_theme theme})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-f = Ttk::Frame.new(base_frame).pack(:fill=&gt;:x)</div><div class='del'>-f1 = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-f.lower</div><div class='del'>-</div><div class='del'>-f.grid_anchor(:center)</div><div class='del'>-TkGrid('x', b1, 'x', :in=&gt;f, :padx=&gt;3, :pady=&gt;2)</div><div class='del'>-TkGrid(b2,  b4, b3,  :in=&gt;f, :padx=&gt;3, :pady=&gt;2)</div><div class='del'>-TkGrid('x', b5, 'x', :in=&gt;f, :padx=&gt;3, :pady=&gt;2)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/ttknote.rb b/ext/tk/sample/demos-jp/ttknote.rb<br/>deleted file mode 100644<br/>index 09cc7960a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ttknote.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttknote.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,97 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# ttknote.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a toplevel window containing a Ttk</div><div class='del'>-# notebook widget.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttknote.tcl,v 1.5 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttknote_demo) &amp;&amp; $ttknote_demo</div><div class='del'>-  $ttknote_demo.destroy </div><div class='del'>-  $ttknote_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttknote_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Ttk Notebook Widget")</div><div class='del'>-  iconname("ttknote")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new($ttknote_demo) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'ttknote'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $ttknote_demo.destroy</div><div class='del'>-                           $ttknote_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-base_frame = Ttk::Frame.new($ttknote_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-## Make the notebook and set up Ctrl+Tab traversal</div><div class='del'>-notebook = Ttk::Notebook.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true, </div><div class='del'>-                                              :padx=&gt;2, :pady=&gt;3)</div><div class='del'>-notebook.enable_traversal</div><div class='del'>-</div><div class='del'>-## Popuplate the first pane</div><div class='del'>-f_msg = Ttk::Frame.new(notebook)</div><div class='del'>-msg_m = Ttk::Label.new(f_msg, :font=&gt;$font, :wraplength=&gt;'5i', </div><div class='del'>-                       :justify=&gt;:left, :anchor=&gt;'n', :text=&gt;&lt;&lt;EOL)</div><div class='del'>-Ttk¤È¤Ï¡¤¥Æ¡¼¥Þ»ØÄê²ÄÇ½¤Ê¿·¤·¤¤¥¦¥£¥¸¥§¥Ã¥È½¸¹ç¤Ç¤¹¡¥\</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'>-Ctrl+Tab¥­¡¼¤ÎÆþÎÏ¤Ë¤è¤Ã¤Æ¤â¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥\</div><div class='del'>-¤³¤Î¥Ç¥â¤Ç¤Ï¡¤¸«½Ð¤·¤Ç²¼ÀþÉÕ¤­¤ÎÊ¸»ú¤Î¥­¡¼¤ÈAlt¥­¡¼¤È¤òÁÈ¤ß¹ç¤ï¤»¤ë¤³¤È¤Ç\</div><div class='del'>-¥Ú¡¼¥¸¤òÁªÂò¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤âÀßÄê¤·¤Æ¤¤¤Þ¤¹¡¥\</div><div class='del'>-¤¿¤À¤·¡¤£²ÈÖÌÜ¤Î¥¿¥Ö¤ÏÌµ¸ú²½¤µ¤ì¤ÆÁªÂò¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤Ë¤Ï\</div><div class='del'>-Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-EOL</div><div class='del'>-neat = TkVariable.new</div><div class='del'>-after_id = nil</div><div class='del'>-msg_b = Ttk::Button.new(f_msg, :text=&gt;'¤¹¤Æ¤­¤À¡ª(Neat!)', :underline=&gt;6, </div><div class='del'>-                        :command=&gt;proc{</div><div class='del'>-                          neat.value = '¤¢¤¡¡¤¤½¤Î¤È¤ª¤ê¤µ¡¥¡¥¡¥'</div><div class='del'>-                          Tk.after_cancel(after_id) if after_id</div><div class='del'>-                          after_id = Tk.after(500){neat.value = ''}</div><div class='del'>-                        })</div><div class='del'>-msg_b.winfo_toplevel.bind('Alt-n'){ msg_b.focus; msg_b.invoke }</div><div class='del'>-msg_l = Ttk::Label.new(f_msg, :textvariable=&gt;neat)</div><div class='del'>-notebook.add(f_msg, :text=&gt;'ÀâÌÀ(Description)', :underline=&gt;3, :padding=&gt;2)</div><div class='del'>-Tk.grid(msg_m, '-', :sticky=&gt;'new', :pady=&gt;2)</div><div class='del'>-Tk.grid(msg_b, msg_l, :pady=&gt;[2, 4], :padx=&gt;20)</div><div class='del'>-msg_b.grid_configure(:sticky=&gt;'e')</div><div class='del'>-msg_l.grid_configure(:sticky=&gt;'w')</div><div class='del'>-f_msg.grid_rowconfigure(1, :weight=&gt;1)</div><div class='del'>-f_msg.grid_columnconfigure([0, 1], :weight=&gt;1, :uniform=&gt;1)</div><div class='del'>-</div><div class='del'>-## Populate the second pane. Note that the content doesn't really matter</div><div class='del'>-f_disabled = Ttk::Frame.new(notebook)</div><div class='del'>-notebook.add(f_disabled, :text=&gt;'Ìµ¸ú²½¤µ¤ì¤¿¥¿¥Ö', :state=&gt;:disabled)</div><div class='del'>-</div><div class='del'>-## Popuplate the third pane</div><div class='del'>-f_editor = Ttk::Frame.new(notebook)</div><div class='del'>-notebook.add(f_editor, :text=&gt;'¥Æ¥­¥¹¥È¥¨¥Ç¥£¥¿(Text Editor)', :underline=&gt;9)</div><div class='del'>-editor_t = Tk::Text.new(f_editor, :width=&gt;40, :height=&gt;10, :wrap=&gt;:char)</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  editor_s = editor_t.yscrollbar(Ttk::Scrollbar.new(f_editor))</div><div class='del'>-else</div><div class='del'>-  editor_s = editor_t.yscrollbar(Tk::Scrollbar.new(f_editor))</div><div class='del'>-end</div><div class='del'>-editor_s.pack(:side=&gt;:right, :fill=&gt;:y, :padx=&gt;[0,2], :pady=&gt;2)</div><div class='del'>-editor_t.pack(:fill=&gt;:both, :expand=&gt;true, :padx=&gt;[2,0], :pady=&gt;2)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/ttkpane.rb b/ext/tk/sample/demos-jp/ttkpane.rb<br/>deleted file mode 100644<br/>index 96670c0e5c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ttkpane.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttkpane.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,216 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# ttkpane.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates a Ttk pane with some content.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttkpane.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttkpane_demo) &amp;&amp; $ttkpane_demo</div><div class='del'>-  $ttkpane_demo.destroy </div><div class='del'>-  $ttkpane_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttkpane_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Themed Nested Panes")</div><div class='del'>-  iconname("ttkpane")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($ttkpane_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-¤³¤Î¥Ç¥â¤Ï¡¤Ëä¤á¹þ¤ß´Ø·¸¤Ë¤¢¤ë¥Æ¡¼¥ÞÉÕ¤­¥Ú¥¤¥ó¥É¥¦¥£¥ó¥É¥¦¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡¥\</div><div class='del'>-¤½¤ì¤¾¤ì¤ÎÂç¤­¤µ¤Ï¡¤´Þ¤Þ¤ì¤Æ¤¤¤ë¥Ú¥¤¥ó¤Î´Ö¤Ë¤¢¤ë¥¨¥ê¥¢¤ò¤Ä¤«¤ó¤Ç\</div><div class='del'>-¶­³¦¤ò¥É¥é¥Ã¥°¤¹¤ë¤³¤È¤ÇÊÑ¹¹¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-Ttk::Separator.new(base_frame).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'ttkpane'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $ttkpane_demo.destroy</div><div class='del'>-                           $ttkpane_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-frame = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-outer = Ttk::Panedwindow.new(frame, :orient=&gt;:horizontal)</div><div class='del'>-outer.add(in_left = Ttk::Panedwindow.new(outer, :orient=&gt;:vertical))</div><div class='del'>-outer.add(in_right = Ttk::Panedwindow.new(outer, :orient=&gt;:vertical))</div><div class='del'>-in_left.add(left_top = Ttk::Labelframe.new(in_left, :text=&gt;'¥Ü¥¿¥ó'))</div><div class='del'>-in_left.add(left_bot = Ttk::Labelframe.new(in_left, :text=&gt;'»þ·×'))</div><div class='del'>-in_right.add(right_top = Ttk::Labelframe.new(in_right, :text=&gt;'¥×¥í¥°¥ì¥¹'))</div><div class='del'>-in_right.add(right_bot = Ttk::Labelframe.new(in_right, :text=&gt;'¥Æ¥­¥¹¥È'))</div><div class='del'>-if Tk.windowingsystem == 'aqua'</div><div class='del'>-  [left_top, left_bot, right_top, right_bot].each{|w| w.padding(3) }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Fill the button pane</div><div class='del'>-Ttk::Button.new(left_top, :text=&gt;'²¡¤·¤Æ¤Í', </div><div class='del'>-                :command=&gt;proc{</div><div class='del'>-                  Tk.messageBox(:type=&gt;'ok', :icon=&gt;'info', </div><div class='del'>-                                :message=&gt;'¤¤¤Æ¤Æ¡ª', </div><div class='del'>-                                :detail=&gt;'That hurt...', :parent=&gt;base_frame, </div><div class='del'>-                                :title=&gt;'Button Pressed')</div><div class='del'>-                }).pack(:padx=&gt;2, :pady=&gt;5)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-zones_list = [</div><div class='del'>-  [':Europe/Berlin'], </div><div class='del'>-  [':America/Argentina/Buenos_Aires', ':America/Buenos_Aires'], </div><div class='del'>-  [':Africa/Johannesburg'], </div><div class='del'>-  [':Europe/London'], </div><div class='del'>-  [':America/Los_Angeles'], </div><div class='del'>-  [':Europe/Moscow'],</div><div class='del'>-  [':America/New_York'], </div><div class='del'>-  [':Asia/Singapore'], </div><div class='del'>-  [':Australia/Sydney'], </div><div class='del'>-  [':Asia/Tokyo'], </div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-zones = []</div><div class='del'>-</div><div class='del'>-# Check tzinfo support</div><div class='del'>-if $tk_major_ver &gt; 8 || ($tk_major_ver == 8 &amp;&amp; $tk_minor_ver &gt;= 5)</div><div class='del'>-  tzinfo = :tcl</div><div class='del'>-</div><div class='del'>-  zones_list.each{|list|</div><div class='del'>-    list.each{|zone|</div><div class='del'>-      begin</div><div class='del'>-        # Force a pre-load of all the timezones needed; otherwise can end up</div><div class='del'>-        # poor-looking synch problems!</div><div class='del'>-        Tk.tk_call('clock', 'format', '0', '-timezone', zone)</div><div class='del'>-      rescue RuntimeError</div><div class='del'>-        # ignore</div><div class='del'>-      else</div><div class='del'>-        zones &lt;&lt; [zone, zone[%r&lt;[^/:]+$&gt;].tr('_', ' ')]</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  begin</div><div class='del'>-    require 'tzinfo'</div><div class='del'>-    tzinfo = :tzinfo</div><div class='del'>-  rescue Exception</div><div class='del'>-    begin</div><div class='del'>-      require 'tzfile'</div><div class='del'>-      tzinfo = :tzfile</div><div class='del'>-    rescue Exception</div><div class='del'>-      tzinfo = nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  case tzinfo</div><div class='del'>-  when :tzinfo</div><div class='del'>-    zones_list.each{|list|</div><div class='del'>-      list.each{|zone|</div><div class='del'>-        begin</div><div class='del'>-          tz = TZInfo::Timezone.get(zone[%r&lt;[^:]+$&gt;])</div><div class='del'>-        rescue Exception</div><div class='del'>-          # ignore</div><div class='del'>-        else</div><div class='del'>-          zones &lt;&lt; [tz, zone[%r&lt;[^/:]+$&gt;].tr('_', ' ')]</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  when :tzfile</div><div class='del'>-    zones_list.each{|list|</div><div class='del'>-      list.each{|zone|</div><div class='del'>-        begin</div><div class='del'>-          tz = TZFile.create(zone[%r&lt;[^:]+$&gt;])</div><div class='del'>-        rescue Exception</div><div class='del'>-          # ignore</div><div class='del'>-        else</div><div class='del'>-          zones &lt;&lt; [tz, zone[%r&lt;[^/:]+$&gt;].tr('_', ' ')]</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    [ -7, -4, -2, -1, 0, +1, +3, +8, +9, +10 ].each{|zone|</div><div class='del'>-      zones &lt;&lt; [zone, 'UTC%+03d00' % zone]</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-time = TkVariable.new_hash</div><div class='del'>-</div><div class='del'>-case tzinfo</div><div class='del'>-when :tcl</div><div class='del'>-  update_proc = proc{|now, tz, label|</div><div class='del'>-    time[label] = Tk.tk_call('clock', 'format', now.tv_sec, </div><div class='del'>-                             '-timezone', tz, '-format', '%T')</div><div class='del'>-  }</div><div class='del'>-when :tzinfo</div><div class='del'>-  update_proc = proc{|now, tz, label|</div><div class='del'>-    time[label] = tz.utc_to_local(now).strftime('%H:%M:%S')</div><div class='del'>-  }</div><div class='del'>-when :tzfile</div><div class='del'>-  update_proc = proc{|now, tz, label|</div><div class='del'>-    time[label] = tz.at(now.tv_sec).strftime('%H:%M:%S')</div><div class='del'>-  }</div><div class='del'>-else</div><div class='del'>-  update_proc = proc{|now, tz, label|</div><div class='del'>-    time[label] = (now + (tz * 3600)).strftime('%H:%M:%S')</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Fill the clocks pane</div><div class='del'>-zones.each_with_index{|(zone, label), idx|</div><div class='del'>-  Ttk::Separator.new(left_bot).pack(:fill=&gt;:x) if idx &gt; 0</div><div class='del'>-  Ttk::Label.new(left_bot, :text=&gt;label, :anchor=&gt;'w').pack(:fill=&gt;:x)</div><div class='del'>-  Ttk::Label.new(left_bot, :textvariable=&gt;time.ref(label), </div><div class='del'>-                 :anchor=&gt;'w').pack(:fill=&gt;:x)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Timer start</div><div class='del'>-every = proc{</div><div class='del'>-  now = Time.now.utc</div><div class='del'>-  zones.each{|zone, label| update_proc.call(now, zone, label) }</div><div class='del'>-}</div><div class='del'>-TkRTTimer.new(1000, -1, every).start(0, every)</div><div class='del'>-</div><div class='del'>-# Fill the progress pane</div><div class='del'>-Ttk::Progressbar.new(right_top, :mode=&gt;:indeterminate).pack(:fill=&gt;:both, :expand=&gt;true).start</div><div class='del'>-</div><div class='del'>-# Fill the text pane</div><div class='del'>-if Tk.windowingsystem != 'aqua'</div><div class='del'>-  # The trick with the ttk::frame makes the text widget look like it fits with</div><div class='del'>-  # the current Ttk theme despite not being a themed widget itself. It is done</div><div class='del'>-  # by styling the frame like an entry, turning off the border in the text</div><div class='del'>-  # widget, and putting the text widget in the frame with enough space to allow</div><div class='del'>-  # the surrounding border to show through (2 pixels seems to be enough).</div><div class='del'>-  f = Ttk::Frame.new(right_bot, :style=&gt;Ttk::Entry)</div><div class='del'>-  txt = TkText.new(frame, :wrap=&gt;:word, :width=&gt;30, :borderwidth=&gt;0)</div><div class='del'>-  txt.pack(:fill=&gt;:both, :expand=&gt;true, :in=&gt;f, :pady=&gt;2, :padx=&gt;2)</div><div class='del'>-  scr = txt.yscrollbar(Ttk::Scrollbar.new(frame))</div><div class='del'>-  scr.pack(:side=&gt;:right, :fill=&gt;:y, :in=&gt;right_bot)</div><div class='del'>-  f.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  outer.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-else</div><div class='del'>-  txt = TkText.new(frame, :wrap=&gt;:word, :width=&gt;30, :borderwidth=&gt;0)</div><div class='del'>-  scr = txt.yscrollbar(TkScrollbar.new(frame))</div><div class='del'>-  scr.pack(:side=&gt;:right, :fill=&gt;:y, :in=&gt;right_bot)</div><div class='del'>-  txt.pack(:fill=&gt;:both, :expand=&gt;true, :in=&gt;right_bot)</div><div class='del'>-  outer.pack(:fill=&gt;:both, :expand=&gt;true, :padx=&gt;10, :pady=&gt;[6, 10])</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/ttkprogress.rb b/ext/tk/sample/demos-jp/ttkprogress.rb<br/>deleted file mode 100644<br/>index 43a9cbcd7e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/ttkprogress.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/ttkprogress.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,71 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# ttkprogress.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script creates several progress bar widgets.</div><div class='del'>-#</div><div class='del'>-# based on "Id: ttkprogress.tcl,v 1.3 2007/12/13 15:27:07 dgp Exp"</div><div class='del'>-</div><div class='del'>-if defined?($ttkprogress_demo) &amp;&amp; $ttkprogress_demo</div><div class='del'>-  $ttkprogress_demo.destroy </div><div class='del'>-  $ttkprogress_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ttkprogress_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Progress Bar Demonstration")</div><div class='del'>-  iconname("ttkprogress")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($ttkprogress_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Ttk::Label.new(base_frame, :font=&gt;$font, :wraplength=&gt;'4i', :justify=&gt;:left, </div><div class='del'>-               :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-²¼¤Ë¤¢¤ë¤Î¤ÏÆó¤Ä¤Î¥×¥í¥°¥ì¥¹¥Ð¡¼¤Ç¤¹¡¥\</div><div class='del'>-¾å¤Î¤â¤Î¤Ï"determinate"¥¿¥¤¥×¤Î¥×¥í¥°¥ì¥¹¥Ð¡¼¤Ç¡¤\</div><div class='del'>-Îã¤¨¤Ð¥×¥í¥°¥é¥à¤¬Í¿¤¨¤é¤ì¤¿¥¿¥¹¥¯¤ò½ªÎ»¤¹¤ë¤Þ¤Ç¤Ë¤É¤Î¤¯¤é¤¤¤«¤«¤ë¤«¤ò\</div><div class='del'>-¼¨¤¹¤È¤­¤Ê¤É¤ËÍÑ¤¤¤é¤ì¤Þ¤¹¡¥\</div><div class='del'>-²¼¤Î¤â¤Î¤Ï"indeterminate"¥¿¥¤¥×¤Î¥×¥í¥°¥ì¥¹¥Ð¡¼¤Ç¡¤\</div><div class='del'>-Îã¤¨¤Ð¥×¥í¥°¥é¥à¤¬¼Â¹ÔÃæ(busy)¤Ç¤¢¤ë¤â¤Î¤Î\</div><div class='del'>-½ªÎ»¤Þ¤Ç¤Ë¤É¤ì¤¯¤é¤¤¤«¤«¤ë¤«¤ÏÊ¬¤«¤é¤Ê¤¤¤È¤¤¤¦¾õÂÖ¤ò\</div><div class='del'>-¼¨¤¹¤È¤­¤Ê¤É¤ËÍÑ¤¤¤é¤ì¤Þ¤¹¡¥\</div><div class='del'>-¤¤¤º¤ì¤Î¥×¥í¥°¥ì¥¹¥Ð¡¼¤â¡¤¤¹¤°²¼¤Ë¤¢¤ë¥Ü¥¿¥ó¤ò»È¤¦¤³¤È¤Ç\</div><div class='del'>-¼«Æ°¥¢¥Ë¥á¡¼¥·¥ç¥ó¥â¡¼¥É¤ÎON/OFF¤òÀÚÂØ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡¥</div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-## See Code / Dismiss buttons</div><div class='del'>-Ttk::Frame.new(base_frame) {|frame|</div><div class='del'>-  sep = Ttk::Separator.new(frame)</div><div class='del'>-  Tk.grid(sep, :columnspan=&gt;4, :row=&gt;0, :sticky=&gt;'ew', :pady=&gt;2)</div><div class='del'>-  TkGrid('x', </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'¥³¡¼¥É»²¾È', </div><div class='del'>-                         :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{showCode 'ttkprogress'}), </div><div class='del'>-         Ttk::Button.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $ttkprogress_demo.destroy</div><div class='del'>-                           $ttkprogress_demo = nil</div><div class='del'>-                         }), </div><div class='del'>-         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-  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'>-frame = Ttk::Frame.new(base_frame).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-p1 = Ttk::Progressbar.new(frame, :mode=&gt;:determinate)</div><div class='del'>-p2 = Ttk::Progressbar.new(frame, :mode=&gt;:indeterminate)</div><div class='del'>-</div><div class='del'>-start = Ttk::Button.new(frame, :text=&gt;'Start Progress', </div><div class='del'>-                        :command=&gt;proc{ p1.start; p2.start })</div><div class='del'>-stop  = Ttk::Button.new(frame, :text=&gt;'Stop Progress', </div><div class='del'>-                        :command=&gt;proc{ p1.stop; p2.stop })</div><div class='del'>-</div><div class='del'>-Tk.grid(p1, '-', :pady=&gt;5, :padx=&gt;10)</div><div class='del'>-Tk.grid(p2, '-', :pady=&gt;5, :padx=&gt;10)</div><div class='del'>-Tk.grid(start, stop, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-start.grid_configure(:sticky=&gt;'e')</div><div class='del'>-stop.grid_configure(:sticky=&gt;'w')</div><div class='del'>-frame.grid_columnconfigure(:all, :weight=&gt;1)</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/twind.rb b/ext/tk/sample/demos-jp/twind.rb<br/>deleted file mode 100644<br/>index faefaefd6e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/twind.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/twind.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,292 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# text (embedded windows) 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?($twind_demo) &amp;&amp; $twind_demo</div><div class='del'>-  $twind_demo.destroy </div><div class='del'>-  $twind_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$twind_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Embedded Windows")</div><div class='del'>-  iconname("Embedded Windows")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($twind_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-$twind_buttons = TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc{</div><div class='del'>-      tmppath = $twind_demo</div><div class='del'>-      $twind_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc{showCode 'twind'}</div><div class='del'>-  }.pack('side'=&gt;'left', 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$twind_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-$twind_text = nil</div><div class='del'>-TkFrame.new(base_frame, 'highlightthickness'=&gt;2, 'borderwidth'=&gt;2, </div><div class='del'>-            'relief'=&gt;'sunken') {|f|</div><div class='del'>-  $twind_text = TkText.new(f, 'setgrid'=&gt;'true', 'font'=&gt;$font, </div><div class='del'>-                          'width'=&gt;'70', 'height'=&gt;35, 'wrap'=&gt;'word', </div><div class='del'>-                          'highlightthickness'=&gt;0, 'borderwidth'=&gt;0 ){|t|</div><div class='del'>-    TkScrollbar.new(f) {|s|</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'>-    }.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  }.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-}.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-# ¥¿¥°À¸À®</div><div class='del'>-$tag_center = TkTextTag.new($twind_text, </div><div class='del'>-                            'justify' =&gt;'center',</div><div class='del'>-                            'spacing1'=&gt;'5m',</div><div class='del'>-                            'spacing3'=&gt;'5m'  )</div><div class='del'>-$tag_buttons = TkTextTag.new($twind_text, </div><div class='del'>-                             'lmargin1'=&gt;'1c',</div><div class='del'>-                             'lmargin2'=&gt;'1c',</div><div class='del'>-                             'rmargin' =&gt;'1c',</div><div class='del'>-                             'spacing1'=&gt;'3m',</div><div class='del'>-                             'spacing2'=&gt;0,</div><div class='del'>-                             'spacing3'=&gt;0 )</div><div class='del'>-</div><div class='del'>-# ¥Æ¥­¥¹¥È¤ÎÀ¸À®</div><div class='del'>-$twind_text.insert('end', </div><div class='del'>-                  '¥Æ¥­¥¹¥Èwidget¾å¤ËÂ¾¤Îwidget¤òÁÈ¤ß¹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£')</div><div class='del'>-$twind_text.insert('end',</div><div class='del'>-                  'ÁÈ¤ß¹þ¤ß¥¦¥£¥ó¥É¥¦¤È¸Æ¤Ð¤ì¡¢Ç¤°Õ¤Îwidget¤¬²ÄÇ½¤Ç¤¹¡£')</div><div class='del'>-$twind_text.insert('end',</div><div class='del'>-                  'Îã¤¨¤Ð¡¢¤³¤³¤Ë2¤Ä¤Î¥Ü¥¿¥ówidget¤¬ÁÈ¤ß¹þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£')</div><div class='del'>-$twind_text.insert('end', 'ºÇ½é¤Î¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤È¿åÊ¿Êý¸þ¤Î¥¹¥¯¥í¡¼¥ë¤ò')</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                   #text 'ON'</div><div class='del'>-                   text '¥ª¥ó'</div><div class='del'>-                   command proc{textWindOn $twind_text,$twind_buttons}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind_text.insert('end', "¤Ë¤·¤Þ¤¹¡£¤Þ¤¿2¤Ä¤á¤Î¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È\n")</div><div class='del'>-$twind_text.insert('end', '¿åÊ¿Êý¸þ¤Î¥¹¥¯¥í¡¼¥ë¤ò')</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                   #text 'OFF'</div><div class='del'>-                   text '¥ª¥Õ'</div><div class='del'>-                   command proc{textWindOff $twind_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind_text.insert('end', '¤Ë¤·¤Þ¤¹¡£')</div><div class='del'>-</div><div class='del'>-$twind_text.insert('end', '¤â¤¦¤Ò¤È¤Ä¤ÎÎã¤Ç¤¹¡£')</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                   text '¤³¤³¤ò¥¯¥ê¥Ã¥¯'</div><div class='del'>-                   command proc{textWindPlot $twind_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind_text.insert('end', '¤¹¤ë¤È¡¢x-y¥×¥í¥Ã¥È¤¬¤³¤³¤Ë¸½¤ì¤Þ¤¹¡£')</div><div class='del'>-$mark_plot = TkTextMark.new($twind_text, 'insert')</div><div class='del'>-$mark_plot.gravity='left'</div><div class='del'>-$twind_text.insert('end', '¥Þ¥¦¥¹¤Ç¥Ç¡¼¥¿¤òÉÁ²è¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£')</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                   text '¾Ãµî'</div><div class='del'>-                   command proc{textWindDel $twind_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind_text.insert('end', '¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¸µ¤ËÌá¤ê¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-')</div><div class='del'>-</div><div class='del'>-$twind_text.insert('end', 'ÁÈ¤ß¹þ¤ß¥¦¥£¥ó¥É¥¦¤À¤±¤ò¥Æ¥­¥¹¥Èwidget¾å¤Ë¡¢¼ÂºÝ¤Î')</div><div class='del'>-$twind_text.insert('end', '¥Æ¥­¥¹¥È¤Ï¤Ê¤·¤ÇÁÈ¤ß¹þ¤à¤³¤È¤ÏÊØÍø¤Ç¤¹¡£')</div><div class='del'>-$twind_text.insert('end', '¤³¤Î¾ì¹ç¤Ï¡¢¥Æ¥­¥¹¥Èwidget¤Ï¥¦¥£¥ó¥É¥¦¥Þ¥Í¡¼¥¸¥ã¤Î')</div><div class='del'>-$twind_text.insert('end', '¤è¤¦¤ËÆ°ºî¤·¤Þ¤¹¡£Îã¤¨¤Ð¡¢¤³¤³¤Ë¤Ï¥Æ¥­¥¹¥Èwidget¤Ë')</div><div class='del'>-$twind_text.insert('end', '¤è¤Ã¤Æ¥Ü¥¿¥ó¤¬¤­¤ì¤¤¤ËÊÂ¤Ù¤é¤ì¤Æ¤¤¤Þ¤¹¡£')</div><div class='del'>-$twind_text.insert('end', '¤³¤ì¤é¤Î¥Ü¥¿¥ó¤ÇÇØ·Ê¿§¤òÊÑ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹')</div><div class='del'>-$twind_text.insert('end', '("Default"¤Ç¸µ¤Î¿§¤ËÌá¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹)¡£')</div><div class='del'>-$twind_text.insert('end', '"Short"¤È¤¤¤¦¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤ÈÊ¸»úÎó¤ÎÄ¹¤µ¤¬')</div><div class='del'>-$twind_text.insert('end', 'ÊÑ¤ï¤ê¤Þ¤¹¡£¤¹¤ë¤È¼«Æ°Åª¤Ë¥Æ¥­¥¹¥Èwidget¤¬')</div><div class='del'>-$twind_text.insert('end', '¥ì¥¤¥¢¥¦¥È¤òÀ°¤¨¤Æ¤¯¤ì¤Þ¤¹¡£')</div><div class='del'>-$twind_text.insert('end', '¤â¤¦°ìÅÙÆ±¤¸¥Ü¥¿¥ó¤ò²¡¤¹¤È¸µ¤ËÌá¤ê¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-')</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind_text) {|b|</div><div class='del'>-                   text '¥Ç¥Õ¥©¥ë¥È'</div><div class='del'>-                   command proc{embDefBg $twind_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                   $tag_buttons.add('end')</div><div class='del'>-                 },</div><div class='del'>-                 'padx'=&gt;3 )</div><div class='del'>-embToggle = TkVariable.new('Short')</div><div class='del'>-TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                 'window'=&gt;TkCheckButton.new($twind_text) {</div><div class='del'>-                   textvariable embToggle</div><div class='del'>-                   indicatoron 0</div><div class='del'>-                   variable embToggle</div><div class='del'>-                   onvalue 'A much longer string'</div><div class='del'>-                   offvalue 'Short'</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                   pady 5</div><div class='del'>-                   padx 2</div><div class='del'>-                 },</div><div class='del'>-                 'padx'=&gt;3, </div><div class='del'>-                 'pady'=&gt;2 )</div><div class='del'>-</div><div class='del'>-[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', </div><div class='del'>-  'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', </div><div class='del'>-  'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', </div><div class='del'>-  'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' </div><div class='del'>-].each{|twind_color|</div><div class='del'>-  TkTextWindow.new($twind_text, 'end', </div><div class='del'>-                   'window'=&gt;TkButton.new($twind_text) {</div><div class='del'>-                     text twind_color</div><div class='del'>-                     cursor 'top_left_arrow'</div><div class='del'>-                     command proc{$twind_text.bg twind_color}</div><div class='del'>-                   },</div><div class='del'>-                   'padx'=&gt;3, </div><div class='del'>-                   'pady'=&gt;2 )</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# ¥á¥½¥Ã¥ÉÄêµÁ</div><div class='del'>-def textWindOn (w,f)</div><div class='del'>-  if defined? $twind_scroll</div><div class='del'>-    begin</div><div class='del'>-      $twind_scroll.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    $twind_scroll = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  base = TkWinfo.parent( TkWinfo.parent(w) )</div><div class='del'>-  $twind_scroll = TkScrollbar.new(base) {|s|</div><div class='del'>-    orient 'horizontal'</div><div class='del'>-    command proc{|*args| w.xview(*args)}</div><div class='del'>-    w.xscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-    w.wrap 'none'</div><div class='del'>-    pack('after'=&gt;f, 'side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindOff (w)</div><div class='del'>-  if defined? $twind_scroll</div><div class='del'>-    begin</div><div class='del'>-      $twind_scroll.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    $twind_scroll = nil</div><div class='del'>-  end</div><div class='del'>-  w.xscrollcommand ''</div><div class='del'>-  w.wrap 'word'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindPlot (t)</div><div class='del'>-  if (defined? $twind_plot) &amp;&amp; (TkWinfo.exist?($twind_plot))</div><div class='del'>-    return</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $twind_plot = TkCanvas.new(t) {</div><div class='del'>-    relief 'sunken'</div><div class='del'>-    width  450</div><div class='del'>-    height 300</div><div class='del'>-    cursor 'top_left_arrow'</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if $tk_version =~ /^4.*/</div><div class='del'>-    font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*'</div><div class='del'>-  else</div><div class='del'>-    font = 'Helvetica 18'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  TkcLine.new($twind_plot, 100, 250, 400, 250, 'width'=&gt;2)</div><div class='del'>-  TkcLine.new($twind_plot, 100, 250, 100,  50, 'width'=&gt;2)</div><div class='del'>-  TkcText.new($twind_plot, 225, 20, </div><div class='del'>-              'text'=&gt;"A Simple Plot", 'font'=&gt;font, 'fill'=&gt;'brown')</div><div class='del'>-</div><div class='del'>-  (0..10).each {|i|</div><div class='del'>-    x = 100 + (i * 30)</div><div class='del'>-    TkcLine.new($twind_plot, x, 250, x, 245, 'width'=&gt;2)</div><div class='del'>-    TkcText.new($twind_plot, x, 254, </div><div class='del'>-                'text'=&gt;10*i, 'font'=&gt;font, 'anchor'=&gt;'n')</div><div class='del'>-  }</div><div class='del'>-  (0..5).each {|i|</div><div class='del'>-    y = 250 - (i * 40)</div><div class='del'>-    TkcLine.new($twind_plot, 100, y, 105, y, 'width'=&gt;2)</div><div class='del'>-    TkcText.new($twind_plot, 96, y, </div><div class='del'>-                'text'=&gt;"#{i*50}.0", 'font'=&gt;font, 'anchor'=&gt;'e')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]]</div><div class='del'>-    x = 100 + (3*xx)</div><div class='del'>-    y = 250 - (4*yy)/5</div><div class='del'>-    item = TkcOval.new($twind_plot, x-6, y-6, x+6, y+6, </div><div class='del'>-                       'width'=&gt;1, 'outline'=&gt;'black', 'fill'=&gt;'SkyBlue2')</div><div class='del'>-    item.addtag 'point'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $twind_plot.itembind('point', 'Any-Enter', </div><div class='del'>-                        proc{$twind_plot.itemconfigure 'current', 'fill', 'red'})</div><div class='del'>-  $twind_plot.itembind('point', 'Any-Leave', </div><div class='del'>-                        proc{$twind_plot.itemconfigure 'current', 'fill', 'SkyBlue2'})</div><div class='del'>-  $twind_plot.itembind('point', '1', </div><div class='del'>-                        proc{|x,y| embPlotDown $twind_plot,x,y}, "%x %y")</div><div class='del'>-  $twind_plot.itembind('point', 'ButtonRelease-1', </div><div class='del'>-                        proc{$twind_plot.dtag 'selected'})</div><div class='del'>-  $twind_plot.bind('B1-Motion', </div><div class='del'>-                    proc{|x,y| embPlotMove $twind_plot,x,y}, "%x %y")</div><div class='del'>-  while ($twind_text.get($mark_plot) =~ /[ \t\n]/)</div><div class='del'>-    $twind_text.delete $mark_plot</div><div class='del'>-  end</div><div class='del'>-  $twind_text.insert $mark_plot,"\n"</div><div class='del'>-  TkTextWindow.new($twind_text, $mark_plot, 'window'=&gt;$twind_plot)</div><div class='del'>-  $tag_center.add $mark_plot</div><div class='del'>-  $twind_text.insert $mark_plot,"\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$embPlot = {'lastX'=&gt;0, 'lastY'=&gt;0}</div><div class='del'>-</div><div class='del'>-def embPlotDown (w, x, y)</div><div class='del'>-  w.dtag 'selected'</div><div class='del'>-  w.addtag_withtag 'selected', 'current'</div><div class='del'>-  w.raise 'current'</div><div class='del'>-  $embPlot['lastX'] = x</div><div class='del'>-  $embPlot['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def embPlotMove (w, x, y)</div><div class='del'>-  w.move 'selected', x - $embPlot['lastX'], y - $embPlot['lastY']</div><div class='del'>-  $embPlot['lastX'] = x</div><div class='del'>-  $embPlot['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindDel (w)</div><div class='del'>-  if (defined? $twind_text) &amp;&amp; TkWinfo.exist?($twind_plot)</div><div class='del'>-    $twind_text.delete $twind_plot</div><div class='del'>-    $twind_plot = nil</div><div class='del'>-    while ($twind_text.get($mark_plot) =~ /[ \t\n]/)</div><div class='del'>-      $twind_text.delete $mark_plot</div><div class='del'>-    end</div><div class='del'>-    $twind_text.insert $mark_plot,"  "</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def embDefBg (w)</div><div class='del'>-  w['background'] = w.configinfo('background')[3]</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/twind2.rb b/ext/tk/sample/demos-jp/twind2.rb<br/>deleted file mode 100644<br/>index 2a26b28ef6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/twind2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/twind2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,384 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# text (embedded windows) widget demo 2 (called by 'widget')</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë</div><div class='del'>-if defined?($twind2_demo) &amp;&amp; $twind2_demo</div><div class='del'>-  $twind2_demo.destroy </div><div class='del'>-  $twind2_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# demo ÍÑ¤Î toplevel widget ¤òÀ¸À®</div><div class='del'>-$twind2_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Text Demonstration - Embedded Windows 2")</div><div class='del'>-  iconname("Embedded Windows")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($twind2_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-$twind2_buttons = TkFrame.new(base_frame) {|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;'¥³¡¼¥É»²¾È', </div><div class='del'>-                      :image=&gt;$image['view'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{showCode 'twind2'}), </div><div class='del'>-         TkButton.new(frame, :text=&gt;'ÊÄ¤¸¤ë', </div><div class='del'>-                      :image=&gt;$image['delete'], :compound=&gt;:left, </div><div class='del'>-                      :command=&gt;proc{</div><div class='del'>-                        tmppath = $twind2_demo</div><div class='del'>-                        $twind2_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'>-}</div><div class='del'>-$twind2_buttons.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;'2m')</div><div class='del'>-</div><div class='del'>-# frame À¸À®</div><div class='del'>-$twind2_text = nil</div><div class='del'>-TkFrame.new(base_frame, 'highlightthickness'=&gt;2, 'borderwidth'=&gt;2, </div><div class='del'>-            'relief'=&gt;'sunken') {|f|</div><div class='del'>-  $twind2_text = TkText.new(f, 'setgrid'=&gt;true, 'font'=&gt;$font,</div><div class='del'>-                            # 'width'=&gt;'70', 'height'=&gt;35, 'wrap'=&gt;'word', </div><div class='del'>-                            'width'=&gt;'70', 'height'=&gt;35, 'wrap'=&gt;'char', </div><div class='del'>-                            'highlightthickness'=&gt;0, 'borderwidth'=&gt;0 ){|t|</div><div class='del'>-    TkScrollbar.new(f) {|s|</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'>-    }.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  }.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-}.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-# ¥¿¥°À¸À®</div><div class='del'>-$tag2_center = TkTextTag.new($twind2_text, </div><div class='del'>-                            'justify' =&gt;'center',</div><div class='del'>-                            'spacing1'=&gt;'5m',</div><div class='del'>-                            'spacing3'=&gt;'5m'  )</div><div class='del'>-$tag2_buttons = TkTextTag.new($twind2_text, </div><div class='del'>-                             'lmargin1'=&gt;'1c',</div><div class='del'>-                             'lmargin2'=&gt;'1c',</div><div class='del'>-                             'rmargin' =&gt;'1c',</div><div class='del'>-                             'spacing1'=&gt;'3m',</div><div class='del'>-                             'spacing2'=&gt;0,</div><div class='del'>-                             'spacing3'=&gt;0 )</div><div class='del'>-</div><div class='del'>-# ¥Æ¥­¥¹¥È¤ÎÀ¸À®</div><div class='del'>-$twind2_text.insert('end', '¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Ë¤Ï¿§¡¹¤Ê¼ïÎà¤Î¥¢¥¤¥Æ¥à')</div><div class='del'>-$twind2_text.insert('end', '¡ÊÆ°Åª¤Ê¤â¤Î¤äÀÅÅª¤Ê¤â¤Î¤ÎÎ¾Êý¤¬¤¢¤ê¤Þ¤¹¡Ë¤ò')</div><div class='del'>-$twind2_text.insert('end', '¿ôÂ¿¤¯´Þ¤á¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤¦¤·¤¿¥¢¥¤¥Æ¥à¤Ï')</div><div class='del'>-$twind2_text.insert('end', '¹ÔÂØ¤¨¡¢¥¿¥Ö¡¢Ãæ±ûÂ·¤¨¤Ê¤É¤ÎÍÍ¡¹¤ÊÊýË¡¤Ç')</div><div class='del'>-$twind2_text.insert('end', 'ÇÛÃÖ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', '²Ã¤¨¤Æ¡¢¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤ÎÆâÍÆÊª¤¬')</div><div class='del'>-$twind2_text.insert('end', '¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ËÈæ¤Ù¤ÆÂç¤­¤¹¤®¤ë¾ì¹ç¤Ç¤â')</div><div class='del'>-$twind2_text.insert('end', '¤¹¤Ù¤Æ¤ÎÊý¸þ¤Ë¥¹¥à¡¼¥º¤Ë¥¹¥¯¥í¡¼¥ë¤µ¤»¤Æ')</div><div class='del'>-$twind2_text.insert('end', '³ÎÇ§¤¹¤ë¤³¤È¤¬²ÄÇ½¤Ç¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', "\n\n")</div><div class='del'>-$twind2_text.insert('end', '¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¾å¤Ë¤ÏÂ¾¤Î¥¦¥£¥¸¥§¥Ã¥È¤ò')</div><div class='del'>-$twind2_text.insert('end', '´Þ¤á¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤³¤¦¤·¤¿¤â¤Î¤Ï')</div><div class='del'>-$twind2_text.insert('end', '¡ÖËä¤á¹þ¤ß¥¦¥£¥ó¥É¥¦¡×¤È¸Æ¤Ð¤ì¡¢¤½¤ÎÃæ¤Ë')</div><div class='del'>-$twind2_text.insert('end', '¤¤¤«¤Ê¤ë¥¦¥£¥¸¥§¥Ã¥È¤Ç¤âµÍ¤á¹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', 'Îã¤¨¤Ð¡¤¤³¤³¤Ë¤Ï£²¤Ä¤Î')</div><div class='del'>-$twind2_text.insert('end', '¥Ü¥¿¥ó¥¦¥£¥¸¥§¥Ã¥È¤¬Ëä¤á¹þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', 'ºÇ½é¤Î¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢')</div><div class='del'>-$twind2_text.insert('end', '¿åÊ¿Êý¸þ¤Î¥¹¥¯¥í¡¼¥ë¤ò ')</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                   #text 'ON'</div><div class='del'>-                   text '¥ª¥ó'</div><div class='del'>-                   command proc{textWindOn2 $twind2_text,$twind2_buttons}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind2_text.insert('end', "¤Ë¤·¤Þ¤¹¡£¤Þ¤¿¡¢£²¤Ä¤á¤Î¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È\n")</div><div class='del'>-$twind2_text.insert('end', '¿åÊ¿Êý¸þ¤Î¥¹¥¯¥í¡¼¥ë¤ò')</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                   #text 'OFF'</div><div class='del'>-                   text '¥ª¥Õ'</div><div class='del'>-                   command proc{textWindOff2 $twind2_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind2_text.insert('end', "¤Ë¤·¤Þ¤¹¡£\n\n")</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', '¼¡¤Ï¤â¤¦¤Ò¤È¤Ä¤ÎÎã¤Ç¤¹¡£')</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                   text '¤³¤³¤ò¥¯¥ê¥Ã¥¯'</div><div class='del'>-                   command proc{textWindPlot2 $twind2_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind2_text.insert('end', '¤¹¤ë¤È¡¢x-y¥×¥í¥Ã¥È¤¬¤³¤³¤Ë¸½¤ì¤Þ¤¹¡£')</div><div class='del'>-$mark2_plot = TkTextMark.new($twind2_text, 'insert')</div><div class='del'>-$mark2_plot.gravity='left'</div><div class='del'>-$twind2_text.insert('end', '¥Þ¥¦¥¹¤Ç¥É¥é¥Ã¥°¤¹¤ë¤³¤È¤Ç¡¢')</div><div class='del'>-$twind2_text.insert('end', '¥×¥í¥Ã¥È¾å¤Î¥Ç¡¼¥¿ÅÀ¤ò°ÜÆ°¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£')</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                   text '¾Ãµî'</div><div class='del'>-                   command proc{textWindDel2 $twind2_text}</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                 })</div><div class='del'>-$twind2_text.insert('end', '¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¸µ¤ËÌá¤ê¤Þ¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', "\n\n")</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', 'É½¼¨¤¹¤ë¥Æ¥­¥¹¥È¤Ê¤·¤ËËä¤á¹þ¤ß¥¦¥£¥ó¥É¥¦¤À¤±¤ò')</div><div class='del'>-$twind2_text.insert('end', '¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Ë´Þ¤á¤ë¤³¤È¤âÍ­ÍÑ¤Ç¤·¤ç¤¦¡£')</div><div class='del'>-$twind2_text.insert('end', '¤³¤Î¾ì¹ç¡¢¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Ï')</div><div class='del'>-$twind2_text.insert('end', '¥¸¥ª¥á¥È¥ê¥Þ¥Í¡¼¥¸¥ã¤Î¤è¤¦¤ËÆ¯¤­¤Þ¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', 'Îã¤¨¤Ð¡¢¤³¤³¤Ë¤Ï¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Ë')</div><div class='del'>-$twind2_text.insert('end', '¤è¤Ã¤Æ¥Ü¥¿¥ó¤¬¤­¤ì¤¤¤ËÀ°Îó¤·¤ÆÇÛÃÖ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', '¤³¤ì¤é¤Î¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç¡¢')</div><div class='del'>-$twind2_text.insert('end', '¤³¤Î¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤ÎÇØ·Ê¿§¤ò')</div><div class='del'>-$twind2_text.insert('end', 'ÊÑ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹("¥Ç¥Õ¥©¥ë¥È"¥Ü¥¿¥ó¤Ç')</div><div class='del'>-$twind2_text.insert('end', '¸µ¤Î¿§¤ËÌá¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹)¡£')</div><div class='del'>-$twind2_text.insert('end', '"Short"¤È¤¤¤¦¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤ÈÊ¸»úÎó¤ÎÄ¹¤µ¤¬')</div><div class='del'>-$twind2_text.insert('end', 'ÊÑ¤ï¤ê¡¢¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤¬¼«Æ°Åª¤Ë')</div><div class='del'>-$twind2_text.insert('end', '¥ì¥¤¥¢¥¦¥È¤òÀ°¤¨¤ëÍÍ»Ò¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', '¤â¤¦°ìÅÙÆ±¤¸¥Ü¥¿¥ó¤ò²¡¤¹¤È¸µ¤ËÌá¤ê¤Þ¤¹¡£')</div><div class='del'>-$twind2_text.insert('end', "\n")</div><div class='del'>-</div><div class='del'>-btn_default = TkButton.new($twind2_text) {|b|</div><div class='del'>-  text '¥Ç¥Õ¥©¥ë¥È'</div><div class='del'>-  command proc{embDefBg2 $twind2_text}</div><div class='del'>-  cursor 'top_left_arrow'</div><div class='del'>-}</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', 'window'=&gt;btn_default, 'padx'=&gt;3)</div><div class='del'>-embToggle = TkVariable.new('Short')</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkCheckButton.new($twind2_text) {</div><div class='del'>-                   textvariable embToggle</div><div class='del'>-                   indicatoron 0</div><div class='del'>-                   variable embToggle</div><div class='del'>-                   onvalue 'A much longer string'</div><div class='del'>-                   offvalue 'Short'</div><div class='del'>-                   cursor 'top_left_arrow'</div><div class='del'>-                   pady 5</div><div class='del'>-                   padx 2</div><div class='del'>-                 },</div><div class='del'>-                 'padx'=&gt;3, </div><div class='del'>-                 'pady'=&gt;2 )</div><div class='del'>-</div><div class='del'>-[ 'AntiqueWhite3', 'Bisque1', 'Bisque2', 'Bisque3', 'Bisque4', </div><div class='del'>-  'SlateBlue3', 'RoyalBlue1', 'SteelBlue2', 'DeepSkyBlue3', 'LightBlue1', </div><div class='del'>-  'DarkSlateGray1', 'Aquamarine2', 'DarkSeaGreen2', 'SeaGreen1', </div><div class='del'>-  'Yellow1', 'IndianRed1', 'IndianRed2', 'Tan1', 'Tan4' </div><div class='del'>-].each{|twind_color|</div><div class='del'>-  TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                   'window'=&gt;TkButton.new($twind2_text) {</div><div class='del'>-                     text twind_color</div><div class='del'>-                     cursor 'top_left_arrow'</div><div class='del'>-                     command proc{$twind2_text.bg twind_color}</div><div class='del'>-                   },</div><div class='del'>-                   'padx'=&gt;3, </div><div class='del'>-                   'pady'=&gt;2 )</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$tag2_buttons.add(btn_default, 'end')</div><div class='del'>-</div><div class='del'>-$text_normal2 = {}</div><div class='del'>-$text_normal2['border'] = $twind2_text.cget('borderwidth')</div><div class='del'>-$text_normal2['highlight'] = $twind2_text.cget('highlightthickness')</div><div class='del'>-$text_normal2['pad'] = $twind2_text.cget('padx')</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', "\nborder width ¤ä highlightthickness, ")</div><div class='del'>-$twind2_text.insert('end', "padding ¤òÄÌ¾ï¤ÎÃÍ¤«¤éÊÑ¹¹¤¹¤ë¤³¤È¤â²ÄÇ½¤Ç¤¹¡£\n")</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Big borders", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinBigB2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Small borders", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinSmallB2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Big highlight", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinBigH2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Small highlight",</div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinSmallH2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Big pad", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinBigP2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-TkTextWindow.new($twind2_text, 'end', </div><div class='del'>-                 'window'=&gt;TkButton.new($twind2_text, :text=&gt;"Small pad", </div><div class='del'>-                                        :cursor=&gt;'top_left_arrow', </div><div class='del'>-                                        'command'=&gt;proc{</div><div class='del'>-                                          textWinSmallP2 $twind2_text</div><div class='del'>-                                        }))</div><div class='del'>-</div><div class='del'>-$twind2_text.insert('end', "\n\n¹¹¤Ë¥¤¥á¡¼¥¸¤â¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Ë")</div><div class='del'>-$twind2_text.insert('end', "¤¦¤Þ¤¯ÇÛÃÖ¤Ç¤­¤Þ¤¹¡§")</div><div class='del'>-</div><div class='del'>-TkTextImage.new($twind2_text, 'end', </div><div class='del'>-                'image'=&gt;TkBitmapImage.new(:file=&gt;[</div><div class='del'>-                                             $demo_dir, '..', </div><div class='del'>-                                             'images', 'face.xbm'</div><div class='del'>-                                           ].join(File::Separator)))</div><div class='del'>-</div><div class='del'>-# ¥á¥½¥Ã¥ÉÄêµÁ</div><div class='del'>-def textWinBigB2(w)</div><div class='del'>-  w.borderwidth 15</div><div class='del'>-end</div><div class='del'>-def textWinSmallB2(w)</div><div class='del'>-  w.borderwidth $text_normal2['border']</div><div class='del'>-end</div><div class='del'>-def textWinBigH2(w)</div><div class='del'>-  w.highlightthickness 15</div><div class='del'>-end</div><div class='del'>-def textWinSmallH2(w)</div><div class='del'>-  w.highlightthickness $text_normal2['highlight']</div><div class='del'>-end</div><div class='del'>-def textWinBigP2(w)</div><div class='del'>-  w.configure(:padx=&gt;15, :pady=&gt;15)</div><div class='del'>-end</div><div class='del'>-def textWinSmallP2(w)</div><div class='del'>-  w.configure(:padx=&gt;$text_normal2['pad'], :pady=&gt;$text_normal2['pad'])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindOn2 (w,f)</div><div class='del'>-  if defined? $twind2_scroll</div><div class='del'>-    begin</div><div class='del'>-      $twind2_scroll.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    $twind2_scroll = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  base = TkWinfo.parent( TkWinfo.parent(w) )</div><div class='del'>-  $twind2_scroll = TkScrollbar.new(base) {|s|</div><div class='del'>-    orient 'horizontal'</div><div class='del'>-    command proc{|*args| w.xview(*args)}</div><div class='del'>-    w.xscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-    w.wrap 'none'</div><div class='del'>-    pack('after'=&gt;f, 'side'=&gt;'bottom', 'fill'=&gt;'x')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindOff2 (w)</div><div class='del'>-  if defined? $twind2_scroll</div><div class='del'>-    begin</div><div class='del'>-      $twind2_scroll.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-    $twind2_scroll = nil</div><div class='del'>-  end</div><div class='del'>-  w.xscrollcommand ''</div><div class='del'>-  #w.wrap 'word'</div><div class='del'>-  w.wrap 'char'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindPlot2 (t)</div><div class='del'>-  if (defined? $twind2_plot) &amp;&amp; (TkWinfo.exist?($twind2_plot))</div><div class='del'>-    return</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $twind2_plot = TkCanvas.new(t) {</div><div class='del'>-    relief 'sunken'</div><div class='del'>-    width  450</div><div class='del'>-    height 300</div><div class='del'>-    cursor 'top_left_arrow'</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  #font = '-Adobe-Helvetica-Medium-R-Normal--*-180-*-*-*-*-*-*'</div><div class='del'>-  font = 'Helvetica 18'</div><div class='del'>-</div><div class='del'>-  TkcLine.new($twind2_plot, 100, 250, 400, 250, 'width'=&gt;2)</div><div class='del'>-  TkcLine.new($twind2_plot, 100, 250, 100,  50, 'width'=&gt;2)</div><div class='del'>-  TkcText.new($twind2_plot, 225, 20, </div><div class='del'>-              'text'=&gt;"A Simple Plot", 'font'=&gt;font, 'fill'=&gt;'brown')</div><div class='del'>-</div><div class='del'>-  (0..10).each {|i|</div><div class='del'>-    x = 100 + (i * 30)</div><div class='del'>-    TkcLine.new($twind2_plot, x, 250, x, 245, 'width'=&gt;2)</div><div class='del'>-    TkcText.new($twind2_plot, x, 254, </div><div class='del'>-                'text'=&gt;10*i, 'font'=&gt;font, 'anchor'=&gt;'n')</div><div class='del'>-  }</div><div class='del'>-  (0..5).each {|i|</div><div class='del'>-    y = 250 - (i * 40)</div><div class='del'>-    TkcLine.new($twind2_plot, 100, y, 105, y, 'width'=&gt;2)</div><div class='del'>-    TkcText.new($twind2_plot, 96, y, </div><div class='del'>-                'text'=&gt;"#{i*50}.0", 'font'=&gt;font, 'anchor'=&gt;'e')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  for xx, yy in [[12,56],[20,94],[33,98],[32,120],[61,180],[75,160],[98,223]]</div><div class='del'>-    x = 100 + (3*xx)</div><div class='del'>-    y = 250 - (4*yy)/5</div><div class='del'>-    item = TkcOval.new($twind2_plot, x-6, y-6, x+6, y+6, </div><div class='del'>-                       'width'=&gt;1, 'outline'=&gt;'black', 'fill'=&gt;'SkyBlue2')</div><div class='del'>-    item.addtag 'point'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $twind2_plot.itembind('point', 'Any-Enter', </div><div class='del'>-                        proc{$twind2_plot.itemconfigure 'current', 'fill', 'red'})</div><div class='del'>-  $twind2_plot.itembind('point', 'Any-Leave', </div><div class='del'>-                        proc{$twind2_plot.itemconfigure 'current', 'fill', 'SkyBlue2'})</div><div class='del'>-  $twind2_plot.itembind('point', '1', </div><div class='del'>-                        proc{|x,y| embPlotDown2 $twind2_plot,x,y}, "%x %y")</div><div class='del'>-  $twind2_plot.itembind('point', 'ButtonRelease-1', </div><div class='del'>-                        proc{$twind2_plot.dtag 'selected'})</div><div class='del'>-  $twind2_plot.bind('B1-Motion', </div><div class='del'>-                    proc{|x,y| embPlotMove2 $twind2_plot,x,y}, "%x %y")</div><div class='del'>-  while ($twind2_text.get($mark2_plot) =~ /[ \t\n]/)</div><div class='del'>-    $twind2_text.delete $mark2_plot</div><div class='del'>-  end</div><div class='del'>-  $twind2_text.insert $mark2_plot,"\n"</div><div class='del'>-  TkTextWindow.new($twind2_text, $mark2_plot, 'window'=&gt;$twind2_plot)</div><div class='del'>-  $tag2_center.add $mark2_plot</div><div class='del'>-  $twind2_text.insert $mark2_plot,"\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$embPlot2 = {'lastX'=&gt;0, 'lastY'=&gt;0}</div><div class='del'>-</div><div class='del'>-def embPlotDown2 (w, x, y)</div><div class='del'>-  w.dtag 'selected'</div><div class='del'>-  w.addtag_withtag 'selected', 'current'</div><div class='del'>-  w.raise 'current'</div><div class='del'>-  $embPlot2['lastX'] = x</div><div class='del'>-  $embPlot2['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def embPlotMove2 (w, x, y)</div><div class='del'>-  w.move 'selected', x - $embPlot2['lastX'], y - $embPlot2['lastY']</div><div class='del'>-  $embPlot2['lastX'] = x</div><div class='del'>-  $embPlot2['lastY'] = y</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def textWindDel2 (w)</div><div class='del'>-  if (defined? $twind2_text) &amp;&amp; TkWinfo.exist?($twind2_plot)</div><div class='del'>-    $twind2_text.delete $twind2_plot</div><div class='del'>-    $twind2_plot = nil</div><div class='del'>-    while ($twind2_text.get($mark2_plot) =~ /[ \t\n]/)</div><div class='del'>-      $twind2_text.delete $mark2_plot</div><div class='del'>-    end</div><div class='del'>-    $twind2_text.insert $mark2_plot,"  "</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def embDefBg2 (w)</div><div class='del'>-  w['background'] = w.configinfo('background')[3]</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/unicodeout.rb b/ext/tk/sample/demos-jp/unicodeout.rb<br/>deleted file mode 100644<br/>index 178077ec08..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/unicodeout.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/unicodeout.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,119 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-#</div><div class='del'>-# unicodeout.rb --</div><div class='del'>-#</div><div class='del'>-# This demonstration script shows how you can produce output (in label</div><div class='del'>-# widgets) using many different alphabets.</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?($unicodeout_demo) &amp;&amp; $unicodeout_demo</div><div class='del'>-  $unicodeout_demo.destroy </div><div class='del'>-  $unicodeout_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$unicodeout_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Unicode Label Demonstration")</div><div class='del'>-  iconname("unicodeout")</div><div class='del'>-  positionWindow(w)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($unicodeout_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-TkLabel.new(base_frame, </div><div class='del'>-            :font=&gt;$font, :wraplength=&gt;'5.4i', :justify=&gt;:left, </div><div class='del'>-            :text=&gt;&lt;&lt;EOL).pack(:side=&gt;:top)</div><div class='del'>-¤³¤ì¤Ï¡¤Tk¤Ë¤ª¤±¤ëÈó²¤ÊÆÊ¸»ú½¸¹ç¤òÍÑ¤¤¤ë¸À¸ì¤ËÂÐ¤¹¤ë¥µ¥Ý¡¼¥È¤Ë¤Ä¤¤¤Æ¤Î\</div><div class='del'>-¥µ¥ó¥×¥ë¤Ç¤¹¡¥¤¿¤À¤·¡¤²¼¤ÎÉ½¼¨¤Ë¤ª¤¤¤Æ¤¢¤Ê¤¿¤¬¼ÂºÝ¤Ë¤É¤Î¤è¤¦¤ÊÉ½¼¨¤ò\</div><div class='del'>-ÌÜ¤Ë¤¹¤ë¤«¤Ï¡¤¤¢¤Ê¤¿¤Î´Ä¶­¤Ë¤É¤Î¤è¤¦¤ÊÊ¸»ú½¸¹ç¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤«¤Ë\</div><div class='del'>-Âç¤­¤¯°ÍÂ¸¤·¤Þ¤¹¡¥¤Þ¤¿¡¤ÂÐ¾Ý¤È¤Ê¤ëÊ¸»ú½¸¹ç¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë\</div><div class='del'>-¤É¤Î¤è¤¦¤ÊÉ½¼¨¤¬¤Ê¤µ¤ì¤ë¤«¤â¤¢¤Ê¤¿¤Î´Ä¶­¼¡Âè¤Ç¤¹¡¥\</div><div class='del'>-¡Ö¥³¡¼¥É»²¾È¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¥½¡¼¥¹¤òÉ½¼¨¤·¡¤\</div><div class='del'>-Unicodeout_SampleFrame¥¯¥é¥¹¤Î@@font¤ÎÄêµÁ¤ò½ñ¤­´¹¤¨¤Æ\</div><div class='del'>-(¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤ÏÊÑ¹¹¤µ¤ì¤Þ¤»¤ó)\</div><div class='del'>-¡ÖºÆ¼Â¹Ô¡×¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¤ò»î¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-¥¹¥¯¥ê¥×¥È¤¬²ÄÈÂÀ­¤ò»ý¤Ä¤è¤¦¤Ë¡¤Ê¸»úÎó¤Ï\\uXXXX¤È¤¤¤¦\</div><div class='del'>-Tcl¤Î¥¨¥¹¥±¡¼¥×É½¸½¤òÍÑ¤¤¤¿UNICODEÊ¸»úÎó¤Ç½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡¥\</div><div class='del'>-Ê¸»úÎó¤Ï¡¤Tk::UTF8_String¥á¥½¥Ã¥É¤Ë¤è¤Ã¤Æ¡¤\</div><div class='del'>-¡ÖUTF8·Á¼°¤ÎÊ¸»úÎó¤Ç¤¢¤ë¡×¤È¤¤¤¦\</div><div class='del'>-¥¨¥ó¥³¡¼¥É¾ðÊóÉÕ¤­¤ÎÊ¸»úÎó¥ª¥Ö¥¸¥§¥¯¥È\</div><div class='del'>-(Tcl¤Î¥¨¥¹¥±¡¼¥×É½¸½¤ÎÊÑ´¹ºÑ¤ß)¤ËÊÑ´¹¤·¤Æ\</div><div class='del'>-¥é¥Ù¥ë¥¦¥£¥¸¥§¥Ã¥È¤ËÅÏ¤·¤Æ¤¤¤ëÅÀ¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥</div><div class='del'>-EOL</div><div class='del'>-#'</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame){|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;'ÊÄ¤¸¤ë', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 $unicodeout_demo.destroy</div><div class='del'>-                 $unicodeout_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;'¥³¡¼¥É»²¾È', :width=&gt;15, :command=&gt;proc{</div><div class='del'>-                 showCode 'unicodeout'</div><div class='del'>-               }).pack(:side=&gt;:left, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-wait_msg = TkLabel.new(base_frame, </div><div class='del'>-                       :text=&gt;"¥Õ¥©¥ó¥ÈÆÉ¤ß¹þ¤ß¤Î´°Î»¤Þ¤Ç" + </div><div class='del'>-                              "¤·¤Ð¤é¤¯¤ªÂÔ¤Á²¼¤µ¤¤¡¥¡¥¡¥", </div><div class='del'>-                       :font=&gt;"Helvetica 12 italic").pack</div><div class='del'>-</div><div class='del'>-class Unicodeout_SampleFrame &lt; TkFrame</div><div class='del'>-  @@font = $font</div><div class='del'>-  # @@font = 'Helvetica 14'</div><div class='del'>-  # @@font = 'Courier 12'</div><div class='del'>-  # @@font = 'clearlyu 16'</div><div class='del'>-  # @@font = 'fixed 12'</div><div class='del'>-  # @@font = 'Times 12'</div><div class='del'>-  # @@font = 'Newspaper 12'</div><div class='del'>-  # @@font = '{New century schoolbook} 12'</div><div class='del'>-</div><div class='del'>-  def initialize(base)</div><div class='del'>-    super(base)</div><div class='del'>-    grid_columnconfig(1, :weight=&gt;1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_sample(lang, *args)</div><div class='del'>-    sample_txt = Tk::UTF8_String(args.join(''))</div><div class='del'>-    l = TkLabel.new(self, :font=&gt;@@font, :text=&gt;lang+':', </div><div class='del'>-                    :anchor=&gt;:nw, :pady=&gt;0)</div><div class='del'>-    #s = TkLabel.new(self, :font=&gt;@@font, :text=&gt;sample_txt, </div><div class='del'>-    s = TkLabel.new(self, :font=&gt;TkFont.new(@@font), :text=&gt;sample_txt, </div><div class='del'>-                    :anchor=&gt;:nw, :width=&gt;30, :pady=&gt;0)</div><div class='del'>-    Tk.grid(l, s, :sticky=&gt;:ew, :pady=&gt;0)</div><div class='del'>-    l.grid_config(:padx, '1m')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-f = Unicodeout_SampleFrame.new(base_frame)</div><div class='del'>-f.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;'2m', :pady=&gt;'1m')</div><div class='del'>-</div><div class='del'>-# Processing when some characters are missing might take a while, so make</div><div class='del'>-# sure we're displaying something in the meantime...</div><div class='del'>-</div><div class='del'>-oldCursor = $unicodeout_demo.cursor</div><div class='del'>-$unicodeout_demo.cursor('watch')</div><div class='del'>-Tk.update</div><div class='del'>-</div><div class='del'>-f.add_sample('Arabic', </div><div class='del'>-             '\uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF\uFE8D\uFE94', </div><div class='del'>-             '\uFEE4\uFEE0\uFEDC\uFEDF\uFE8D')</div><div class='del'>-f.add_sample('Trad. Chinese', '\u4E2D\u570B\u7684\u6F22\u5B57')</div><div class='del'>-f.add_sample('Simpl. Chinese', '\u6C49\u8BED')</div><div class='del'>-f.add_sample('Greek', </div><div class='del'>-             '\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AE ', </div><div class='del'>-             '\u03B3\u03BB\u03CE\u03C3\u03C3\u03B1')</div><div class='del'>-f.add_sample('Hebrew', </div><div class='del'>-             '\u05DD\u05D9\u05DC\u05E9\u05D5\u05E8\u05D9 ', </div><div class='del'>-             '\u05DC\u05D9\u05D0\u05E8\u05E9\u05D9')</div><div class='del'>-f.add_sample('Japanese', </div><div class='del'>-             '\u65E5\u672C\u8A9E\u306E\u3072\u3089\u304C\u306A, ', </div><div class='del'>-             '\u6F22\u5B57\u3068\u30AB\u30BF\u30AB\u30CA')</div><div class='del'>-f.add_sample('Korean', '\uB300\uD55C\uBBFC\uAD6D\uC758 \uD55C\uAE00')</div><div class='del'>-f.add_sample('Russian', </div><div class='del'>-             '\u0420\u0443\u0441\u0441\u043A\u0438\u0439 ', </div><div class='del'>-             '\u044F\u0437\u044B\u043A')</div><div class='del'>-</div><div class='del'>-wait_msg.destroy</div><div class='del'>-$unicodeout_demo.cursor(oldCursor)</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/vscale.rb b/ext/tk/sample/demos-jp/vscale.rb<br/>deleted file mode 100644<br/>index a1097fd77f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/vscale.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/vscale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,80 +0,0 @@</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-require "tkcanvas"</div><div class='del'>-</div><div class='del'>-if defined?($vscale_demo) &amp;&amp; $vscale_demo</div><div class='del'>-  $vscale_demo.destroy</div><div class='del'>-  $vscale_demo = nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$vscale_demo = TkToplevel.new {|w|</div><div class='del'>-  title("Vertical Scale Demonstration")</div><div class='del'>-  iconname("vscale")</div><div class='del'>-}</div><div class='del'>-positionWindow($vscale_demo)</div><div class='del'>-</div><div class='del'>-base_frame = TkFrame.new($vscale_demo).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-msg = TkLabel.new(base_frame) {</div><div class='del'>-  font $font</div><div class='del'>-  wraplength '3.5i'</div><div class='del'>-  justify 'left'</div><div class='del'>-#  text "²¼¤Ë¤ÏÌð°õ¤¬1¤Ä¤È¾èÄ¾¤Ê¥¹¥±¡¼¥ë¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\</div><div class='del'>-#¥¹¥±¡¼¥ë¾å¤Ç¥Þ¥¦¥¹¥Ü¥¿¥ó1¤ò¥¯¥ê¥Ã¥¯¡¢¤Þ¤¿¤Ï¥É¥é¥Ã¥°¤¹¤ë¤È\</div><div class='del'>-#Ìð°õ¤ÎÄ¹¤µ¤òÊÑ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£"</div><div class='del'>-  text "¤Ë¤Ï¥Ð¡¼¤È½Ä·¿¤Î¥¹¥±¡¼¥ë¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥¹¥±¡¼¥ë¤Ç¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó1 ¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¥É¥é¥Ã¥°¤·¤Æ¥Ð¡¼¤Î¹â¤µ¤òÊÑ¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£½ª¤Ã¤¿¤é¡ÖÎ»²ò¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£"</div><div class='del'>-}</div><div class='del'>-msg.pack('side'=&gt;'top', 'padx'=&gt;'.5c')</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  TkButton.new(frame) {</div><div class='del'>-    #text 'Î»²ò'</div><div class='del'>-    text 'ÊÄ¤¸¤ë'</div><div class='del'>-    command proc {</div><div class='del'>-      tmppath = $vscale_demo</div><div class='del'>-      $vscale_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 '¥³¡¼¥É»²¾È'</div><div class='del'>-    command proc { showCode 'vscale' }</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'>-def setHeight(w, height)</div><div class='del'>-  height = height + 21</div><div class='del'>-  y2 = height - 30</div><div class='del'>-  if y2 &lt; 21</div><div class='del'>-    y2 = 21</div><div class='del'>-  end</div><div class='del'>-  w.coords 'poly',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20</div><div class='del'>-  w.coords 'line',15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkFrame.new(base_frame) {|frame|</div><div class='del'>-  borderwidth 10</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 'SeaGreen3'</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;'left',  'anchor'=&gt;'nw', 'fill'=&gt;'y')</div><div class='del'>-  scale = TkScale.new(frame) {</div><div class='del'>-    orient 'vertical'</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| setHeight(canvas, value)}</div><div class='del'>-    tickinterval 50</div><div class='del'>-  }.pack('side'=&gt;'left', 'anchor'=&gt;'ne')</div><div class='del'>-  scale.set 75</div><div class='del'>-}.pack</div><div class='head'>diff --git a/ext/tk/sample/demos-jp/widget b/ext/tk/sample/demos-jp/widget<br/>deleted file mode 100644<br/>index 8eb699e513..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/demos-jp/widget?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/demos-jp/widget</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1125 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# -*- coding: euc-jp -*-</div><div class='del'>-</div><div class='del'>-# ´Á»ú¥³¡¼¥ÉÀßÄê ( tk.rb ¤Î¥í¡¼¥É»þ¤Î encoding ¿äÄê/ÀßÄê¤Ë»È¤ï¤ì¤ë )</div><div class='del'>-if RUBY_VERSION &lt; '1.9.0' ### !!!!!!!!!!!!!!</div><div class='del'>-  $KCODE = 'euc'</div><div class='del'>-else</div><div class='del'>-  DEFAULT_TK_ENCODING = 'EUC-JP'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# tk ´Ø·¸¥é¥¤¥Ö¥é¥ê¤ÎÆÉ¤ß¹þ¤ß</div><div class='del'>-require 'tk'</div><div class='del'>-# require 'tkafter'</div><div class='del'>-</div><div class='del'>-$RubyTk_WidgetDemo = true</div><div class='del'>-</div><div class='del'>-# widget demo directory °ÌÃÖ¤Î³ÍÆÀ</div><div class='del'>-# $demo_dir = File.dirname($0)</div><div class='del'>-$demo_dir = File.dirname(__FILE__)</div><div class='del'>-</div><div class='del'>-# root ¤ÎÀ¸À®</div><div class='del'>-$root = TkRoot.new{title "Ruby/Tk Widget Demonstration"}</div><div class='del'>-</div><div class='del'>-# tk ¥Ð¡¼¥¸¥ç¥ó¤Î¼èÆÀ</div><div class='del'>-$tk_version = Tk::TK_VERSION</div><div class='del'>-$tk_major_ver, $tk_minor_ver = $tk_version.split('.').map{|n| n.to_i}</div><div class='del'>-$tk_patchlevel = Tk::TK_PATCHLEVEL</div><div class='del'>-</div><div class='del'>-# tcl_platform ¾ðÊó¤Ø¤Î¥¢¥¯¥»¥¹¥ª¥Ö¥¸¥§¥¯¥È</div><div class='del'>-$tk_platform = TkVarAccess.new('tcl_platform')</div><div class='del'>-</div><div class='del'>-# ¥Õ¥©¥ó¥ÈÀßÄê</div><div class='del'>-#######</div><div class='del'>-case($tk_version)</div><div class='del'>-when /^4.*/</div><div class='del'>-  $font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*', nil)</div><div class='del'>-  knjfont = '-*--16-*-jisx0208.1983-0'</div><div class='del'>-  $kanji_font = TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*',</div><div class='del'>-                           knjfont)</div><div class='del'>-  TkOption.add('*kanjiFont', knjfont, 'startupFile')</div><div class='del'>-  $msg_kanji_font=TkFont.new('-*-Helvetica-Medium-R-Normal--*-140-*-*-*-*-*-*',</div><div class='del'>-                             '-*--24-*-jisx0208.1983-0')</div><div class='del'>-</div><div class='del'>-#when '8.0'</div><div class='del'>-#  $font = TkFont.new('Helvetica -12')</div><div class='del'>-#  $kanji_font = TkFont.new('Helvetica -12', 'Mincho -12')</div><div class='del'>-#  TkOption.add('*kanjiFont', knjfont, 'startupFile')</div><div class='del'>-#  $msg_kanji_font=TkFont.new('Helvetica 16', 'Gothic 16 bold')</div><div class='del'>-</div><div class='del'>-when /^8.*/</div><div class='del'>-  $font = TkFont.new('Helvetica -12')</div><div class='del'>-  $kanji_font = TkFont.new('Helvetica -12', 'Mincho -12')</div><div class='del'>-  TkOption.add('*kanjiFont', knjfont, 'startupFile')</div><div class='del'>-  $msg_kanji_font=TkFont.new('Helvetica 14 bold', 'Gothic 14 bold')</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  $font = TkFont.new('Helvetica 14', nil)</div><div class='del'>-  knjfont = '-*--16-*-jisx0208.1983-0'</div><div class='del'>-  $kanji_font = TkFont.new('Helvetic 14', knjfont)</div><div class='del'>-  TkOption.add('*kanjiFont', knjfont, 'startupFile')</div><div class='del'>-  $msg_kanji_font=TkFont.new('Helvetica 14',</div><div class='del'>-                             '-*--24-*-jisx0208.1983-0')</div><div class='del'>-end</div><div class='del'>-#######</div><div class='del'>-</div><div class='del'>-# ¥¤¥á¡¼¥¸ÀßÄê</div><div class='del'>-$image = {}</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-$image['refresh'] = TkPhotoImage.new(:height=&gt;16, :format=&gt;'GIF', :data=&gt;&lt;&lt;EOD)</div><div class='del'>-    R0lGODlhEAAQAPMAAMz/zCpnKdb/1z9mPypbKBtLGy9NMPL/9Or+6+P+4j1Y</div><div class='del'>-    PwQKBP7//xMLFAYBCAEBASH5BAEAAAAALAAAAAAQABAAAwR0EAD3Gn0Vyw0e</div><div class='del'>-    ++CncU7IIAezMA/nhUqSLJizvSdCEEjy2ZIV46AwDAoDHwPYGSoEiUJAAGJ6</div><div class='del'>-    EDHBNCFINW5OqABKSFk/B9lUa94IDwIFgewFMwQDQwCZQCztTgM9Sl8SOEMG</div><div class='del'>-    KSAthiaOjBMPDhQONBiXABEAOw==</div><div class='del'>-EOD</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-$image['view'] = TkPhotoImage.new(:height=&gt;16, :format=&gt;'GIF', :data=&gt;&lt;&lt;EOD)</div><div class='del'>-    R0lGODlhEAAQAPMAAMz/zP///8DAwICAgH9/fwAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAwRIcMhJB7h3hM33</div><div class='del'>-    KFjWdQQYap1QrCaGBmrRrS4nj5b53jOgbwXBKGACoYLDIuAoHCmZyYvR1rT5</div><div class='del'>-    RMAq8LqcIYGsrjPsW1XOmFUEADs=</div><div class='del'>-EOD</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-$image['delete'] = TkPhotoImage.new(:height=&gt;16, :format=&gt;'GIF', :data=&gt;&lt;&lt;EOD)</div><div class='del'>-    R0lGODlhEAAOAKEAAIQAAO/n3v///////yH5BAEKAAIALAAAAAAQAA4AAAIm</div><div class='del'>-    lI9pAKHbIHNoVhYhTdjlJ2AWKG2g+CldmB6rxo2uybYhbS80eRQAOw==</div><div class='del'>-EOD</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-$image['print'] = TkPhotoImage.new(:height=&gt;19, :format=&gt;'GIF', :data=&gt;&lt;&lt;EOD)</div><div class='del'>-    R0lGODlhGgATAPcAACEQOTEpQjEpUkIpc0IxY0I5c0oxjEo5SlJCY1JCe1JK</div><div class='del'>-    UlpChFpCjFpGkFpSc1paa2NKc2NKnGNja2tapWtjc29KnHNanHNjc3NjrXNr</div><div class='del'>-    jHNrnHNzc3tjpXtrtXtzhICAgIRzvYSEjIZzqox7tYyEnIyMjJSEtZSEvZSM</div><div class='del'>-    lJyMtZyMvZyUlJyUrZyUvZycnKWctaWlpa2czq2lzrWtvbWtzrW1tb21xr21</div><div class='del'>-    1sa9zs693s7OztbO3tbO597W1t7W7+fe7+fn5////+/n7+/v7+/v9////wAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-    AAAAAAAAAAAAAAAAAAAAACH5BAEAAEEALAAAAAAaABMAQAj/AIMIHBhkg0GC</div><div class='del'>-    CBMGIQEiQgseQT4oeCBBAokgRYYQ0JBixg8hRIiUUEBBYYmTByBwiCBCRYwH</div><div class='del'>-    CxY8cKFw4AogRXLqLAJkQ80gCBBg3BkxZswTNGh4MGqgQQUMJRHCwMkTSE+D</div><div class='del'>-    Pn8eCKBhxIMhO3ei2OHDBw6sWSlMMMoWgwwfMDZI8GBjx44NARZwEGGi5MkS</div><div class='del'>-    PcIWKRGz5YgLbAco+KkQBQoJIRgjdGEVq+SaJajqtNrzMgsPCmoIzqmDgmWE</div><div class='del'>-    KOBuUKAAwYabYTfs4OHjY0giGyhk4MAWRI4eKyRQqPgggYUXPH4A+XBAgwoK</div><div class='del'>-    DiIsCFxjA9sFEVQQCRJCAYAFDJxiKhAxvMTonEFimrhhYinTBgWiCvxLNX3M</div><div class='del'>-    DkkpsKV5OYhjBxCMYAICAigUEAA7</div><div class='del'>-EOD</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# ¥á¥Ë¥å¡¼ÀßÄê</div><div class='del'>-if $tk_major_ver &gt;= 8</div><div class='del'>-  $root.add_menubar([[['File', 0], </div><div class='del'>-                        ['About ... ', proc{aboutBox}, 0, '&lt;F1&gt;'],</div><div class='del'>-                        '---', </div><div class='del'>-                        ['Quit', proc{exit}, 0, 'Ctrl-Q']</div><div class='del'>-                      ]])</div><div class='del'>-else</div><div class='del'>-  TkMenubar.new($root, </div><div class='del'>-                [[['File', 0], </div><div class='del'>-                    ['About ... ', proc{aboutBox}, 0, '&lt;F1&gt;'],</div><div class='del'>-                    '---', </div><div class='del'>-                    ['Quit', proc{exit}, 0, 'Ctrl-Q']</div><div class='del'>-                  ]]).pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-end</div><div class='del'>-$root.bind('F1', proc{aboutBox})</div><div class='del'>-$root.bind('Control-q', proc{exit})</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-TkFrame.new($root){|frame|</div><div class='del'>-  TkMenubutton.new(frame){|button|</div><div class='del'>-    m = TkMenu.new(button) {</div><div class='del'>-      add 'command', 'label'=&gt;'Quit', 'command'=&gt;proc{exit}, 'underline'=&gt;0</div><div class='del'>-    }</div><div class='del'>-    menu m</div><div class='del'>-    text 'File'</div><div class='del'>-    underline 0</div><div class='del'>-  }.pack('side'=&gt;'left')</div><div class='del'>-}.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-# ¥Æ¥­¥¹¥È¥Ü¥Ã¥¯¥¹¤ÎÀ¸À®</div><div class='del'>-if $tk_version =~ /^4\.[01]/</div><div class='del'>-  scr = TkScrollbar.new($root, 'orient'=&gt;'vertical')</div><div class='del'>-  txt = TkText.new($root) {</div><div class='del'>-    #wrap 'word'</div><div class='del'>-    wrap 'char'</div><div class='del'>-    width 70</div><div class='del'>-    height 30</div><div class='del'>-    font $font</div><div class='del'>-    setgrid 'yes'</div><div class='del'>-    yscrollcommand proc{|first,last| scr.set first,last}</div><div class='del'>-  }</div><div class='del'>-  scr.command(proc{|*args| txt.yview(*args)})</div><div class='del'>-  scr.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-  txt.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-else</div><div class='del'>-  textFrame = TkFrame.new($root)</div><div class='del'>-  scr = TkScrollbar.new($root, 'orient'=&gt;'vertical', </div><div class='del'>-                        'highlightthickness'=&gt;0, 'takefocus'=&gt;1) {</div><div class='del'>-    pack('in'=&gt;textFrame, 'side'=&gt;'right', 'fill'=&gt;'y', 'padx'=&gt;1)</div><div class='del'>-  }</div><div class='del'>-  txt = TkText.new($root) {</div><div class='del'>-    #wrap 'word'</div><div class='del'>-    wrap 'char'</div><div class='del'>-    width 70</div><div class='del'>-    height 30</div><div class='del'>-    font $font</div><div class='del'>-    setgrid 'yes'</div><div class='del'>-    highlightthickness 0</div><div class='del'>-    padx 4</div><div class='del'>-    pady 2</div><div class='del'>-    takefocus 0</div><div class='del'>-    bd 1</div><div class='del'>-    yscrollcommand proc{|first,last| scr.set first,last}</div><div class='del'>-  }</div><div class='del'>-  scr.command(proc{|*args| txt.yview(*args)})</div><div class='del'>-#  txt.pack('in'=&gt;textFrame, 'expand'=&gt;'yes', 'fill'=&gt;'both', 'padx'=&gt;1)</div><div class='del'>-  txt.pack('in'=&gt;textFrame, 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-#  textFrame.pack('expand'=&gt;'yes', 'fill'=&gt;'both', 'padx'=&gt;1, 'pady'=&gt;2)</div><div class='del'>-  textFrame.pack('expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-</div><div class='del'>-  statusBar = TkFrame.new($root) {|f|</div><div class='del'>-    if $tk_version =~ /^4.*/</div><div class='del'>-      statusfont = '-*-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*'</div><div class='del'>-    else</div><div class='del'>-      statusfont = 'Helvetica 10'</div><div class='del'>-    end</div><div class='del'>-    $statusBarLabel = \</div><div class='del'>-    TkLabel.new(f, 'text'=&gt;"   ", 'relief'=&gt;'sunken', 'bd'=&gt;1, 'anchor'=&gt;'w', </div><div class='del'>-                'font'=&gt;statusfont) \</div><div class='del'>-    .pack('side'=&gt;'left', 'padx'=&gt;2, 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-    TkLabel.new(f, 'width'=&gt;8, 'relief'=&gt;'sunken', 'bd'=&gt;1, 'anchor'=&gt;'w', </div><div class='del'>-                'font'=&gt;statusfont) \</div><div class='del'>-    .pack('side'=&gt;'left', 'padx'=&gt;2)</div><div class='del'>-  }.pack('side'=&gt;'bottom', 'fill'=&gt;'x', 'pady'=&gt;2)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# ¥Æ¥­¥¹¥È¥¿¥°ÀßÄê</div><div class='del'>-if $tk_version =~ /^4.*/</div><div class='del'>-  tag_title = TkTextTag.new(txt, 'font'=&gt;'-*-Helvetica-Bold-R-Normal--*-180-*-*-*-*-*-*')</div><div class='del'>-else</div><div class='del'>-  tag_title = TkTextTag.new(txt, 'font'=&gt;'Helvetica 18 bold')</div><div class='del'>-end</div><div class='del'>-#tag_kanji_title = TkTextTag.new(txt, 'kanjifont'=&gt;$msg_kanji_font)</div><div class='del'>-#tag_middle = TkTextTag.new(txt, 'kanjifont'=&gt;$kanji_font)</div><div class='del'>-tag_kanji_title = TkTextTag.new(txt, 'font'=&gt;$msg_kanji_font)</div><div class='del'>-tag_middle = TkTextTag.new(txt, 'font'=&gt;$kanji_font)</div><div class='del'>-tag_demospace = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c')</div><div class='del'>-</div><div class='del'>-if TkWinfo.depth($root) == 1</div><div class='del'>-  tag_demo = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c', </div><div class='del'>-                           'underline'=&gt;1)</div><div class='del'>-  $tag_visited = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c', </div><div class='del'>-                              'underline'=&gt;1)</div><div class='del'>-  tag_hot = TkTextTag.new(txt, 'background'=&gt;'black', 'foreground'=&gt;'white')</div><div class='del'>-else</div><div class='del'>-  tag_demo = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c', </div><div class='del'>-                           'foreground'=&gt;'blue', 'underline'=&gt;1)</div><div class='del'>-  $tag_visited = TkTextTag.new(txt, 'lmargin1'=&gt;'1c', 'lmargin2'=&gt;'1c', </div><div class='del'>-                              'foreground'=&gt;'#303080', 'underline'=&gt;1)</div><div class='del'>-#  tag_hot = TkTextTag.new(txt, 'relief'=&gt;'raised', 'borderwidth'=&gt;1, </div><div class='del'>-#                         'background'=&gt;'SeaGreen3')</div><div class='del'>-  tag_hot = TkTextTag.new(txt, 'borderwidth'=&gt;1, 'foreground'=&gt;'red')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#tag_demo.bind('Button-1', proc{invoke txt, txt.index('current')})</div><div class='del'>-tag_demo.bind('ButtonRelease-1', </div><div class='del'>-              proc{|x,y|invoke txt, txt.index("@#{x},#{y}")}, '%x %y')</div><div class='del'>-</div><div class='del'>-lastLine = TkVariable.new("")</div><div class='del'>-newLine  = TkVariable.new("")</div><div class='del'>-tag_demo.bind('Enter', proc{|x,y|</div><div class='del'>-                lastLine.value = txt.index("@#{x},#{y} linestart")</div><div class='del'>-                tag_hot.add(lastLine.value, "#{lastLine.value} lineend")</div><div class='del'>-                showStatus txt, txt.index("@#{x},#{y}")</div><div class='del'>-              },</div><div class='del'>-              '%x %y')</div><div class='del'>-tag_demo.bind('Leave', </div><div class='del'>-              proc{</div><div class='del'>-                tag_hot.remove('1.0','end')</div><div class='del'>-                txt.configure('cursor','xterm')</div><div class='del'>-                $statusBarLabel.configure('text'=&gt;"")</div><div class='del'>-              })</div><div class='del'>-tag_demo.bind('Motion', proc{|x, y|</div><div class='del'>-                newLine.value = txt.index("@#{x},#{y} linestart")</div><div class='del'>-                if newLine.value != lastLine.value</div><div class='del'>-                  tag_hot.remove('1.0','end')</div><div class='del'>-                  lastLine.value = newLine.value</div><div class='del'>-                  if ( txt.tag_names("@#{x},#{y}").find{|t| </div><div class='del'>-                        t.kind_of?(String) &amp;&amp; t =~ /^demo-/</div><div class='del'>-                      } )</div><div class='del'>-                    tag_hot.add(lastLine.value, </div><div class='del'>-                                "#{lastLine.value} lineend -1 chars")</div><div class='del'>-                  end</div><div class='del'>-                end</div><div class='del'>-                showStatus txt, txt.index("@#{x},#{y}")</div><div class='del'>-              },</div><div class='del'>-              '%x %y')</div><div class='del'>-</div><div class='del'>-# ¥Æ¥­¥¹¥ÈÀ¸À®</div><div class='del'>-txt.insert('end', 'Ruby/Tk : Widget', tag_title)</div><div class='del'>-#txt.insert('end', "  ¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó\n", tag_middle)</div><div class='del'>-txt.insert('end', "  ¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', &lt;&lt;"EOT")</div><div class='del'>-</div><div class='del'>-¤³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢Tk Widget ¤òÍÑ¤¤¤Æ¤É¤Î¤è¤¦¤Ê¤³¤È¤¬¤Ç¤­¤ë¤«\</div><div class='del'>-¤ò¼¨¤¹¤¿¤á¤Î¡¢¤¤¤¯¤Ä¤«¤Î¾®¤µ¤Ê¥¹¥¯¥ê¥×¥È¤ËÂÐ¤¹¤ë¥Õ¥í¥ó¥È¥¨¥ó¥É¤òÄó\</div><div class='del'>-¶¡¤·¤Æ¤¤¤Þ¤¹¡£°Ê²¼¤Ë½çÈÖ¤Ëµó¤²¤é¤ì¤Æ¤¤¤ë¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó¤ò¼Â¹Ô\</div><div class='del'>-¤¹¤ë¤Ë¤Ï¥Þ¥¦¥¹¤Ç¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£¥Ç¥â¥ó¥¹¥È¥ì¡¼¥·¥ç¥ó¤Î¥¦¥£¥ó\</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'>-¥³¡¼¥É¤ò½¤Àµ¤·¤Æ¤â¥ª¥ê¥¸¥Ê¥ë¤Î¥Õ¥¡¥¤¥ë¤¬½ñ¤­´¹¤¨¤é¤ì¤ë¤³¤È¤Ï\</div><div class='del'>-¤¢¤ê¤Þ¤»¤ó¤«¤é¡¢¿´ÇÛ¤»¤º¤Ë¿§¡¹¤ÊÊÑ¹¹¤ò»î¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-</div><div class='del'>-°ìÉô¤Î¥Ç¥â¤Ç¤Ï¡¢Èæ³ÓÅªºÇ¶á¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Tk ¤Ç¤Ê¤±¤ì¤Ð¥µ¥Ý¡¼¥È¤·¤Æ\</div><div class='del'>-¤¤¤Ê¤¤µ¡Ç½¤ò»È¤Ã¤Æ¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹(Îã¤¨¤Ð Tk8.4 °Ê¾å¤Ê¤É)¡£¤½¤Î¤¿¤á¡¢\</div><div class='del'>-¤½¤¦¤·¤¿µ¡Ç½¤ò»ý¤¿¤Ê¤¤ Tk ¥é¥¤¥Ö¥é¥ê¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤¦¤·¤¿\</div><div class='del'>-¥Ç¥â¤ÏÀµ¤·¤¯Æ°¤­¤Þ¤»¤ó¡£¤½¤Î¤è¤¦¤Êµ¡Ç½¤¬É¬Í×¤Ç¤¢¤ì¤Ð¡¢¤½¤ì¤ò¥µ¥Ý¡¼¥È\</div><div class='del'>-¤·¤Æ¤¤¤ë Tk ¥é¥¤¥Ö¥é¥ê¤ò»È¤¦¤è¤¦¤Ë tcltklib ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Ê¤ª¤·¤Æ\</div><div class='del'>-¤¯¤À¤µ¤¤¡£</div><div class='del'>-</div><div class='del'>-¤â¤·¤¢¤Ê¤¿¤Î Tk ¤¬ (ºÇ½é¤«¤é´Þ¤à¤«¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¤«¤Ë¤è¤ê) \</div><div class='del'>-Ttk (Tile) ³ÈÄ¥¤òÍøÍÑ¤Ç¤­¤ë¾õÂÖ¤Ç¤¢¤ë¤Ê¤é¡¢\</div><div class='del'>-Ttk ³ÈÄ¥¤Î¥Ç¥â (sample/tkextlib/tile/demo.rb) ¤â¤¼¤Ò»î¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£</div><div class='del'>-( Â¿Ê¬¡¤¸½ºß¤Î¤¢¤Ê¤¿¤Î´Ä¶­¤Ë¤Ï Ttk ³ÈÄ¥¤Ï\</div><div class='del'>-#{</div><div class='del'>-begin</div><div class='del'>-  require 'tkextlib/tile'</div><div class='del'>-  "¤¹¤Ç¤ËÆ³Æþ¤µ¤ì¤Æ¤¤¤Þ¤¹"</div><div class='del'>-rescue</div><div class='del'>-  "¤Þ¤À¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"</div><div class='del'>-end</div><div class='del'>-}\</div><div class='del'>-¡£)</div><div class='del'>-Ttk ³ÈÄ¥¤Ï¡¢Tk8.5 °Ê¾å¤Ç¤ÏÉ¸½à¤Îµ¡Ç½¤È¤·¤ÆÁÈ¤ß¹þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-EOT</div><div class='del'>-</div><div class='del'>-#txt.insert('end',"¥é¥Ù¥ë, ¥Ü¥¿¥ó, ¥Á¥§¥Ã¥¯¥Ü¥¿¥ó, ¥é¥¸¥ª¥Ü¥¿¥ó\n",tag_middle)</div><div class='del'>-txt.insert('end', "¥é¥Ù¥ë, ¥Ü¥¿¥ó, ¥Á¥§¥Ã¥¯¥Ü¥¿¥ó, ¥é¥¸¥ª¥Ü¥¿¥ó\n", </div><div class='del'>-           tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ¥é¥Ù¥ë (¥Æ¥­¥¹¥È, ¥Ó¥Ã¥È¥Þ¥Ã¥×)\n", </div><div class='del'>-           tag_demo, "demo-label")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ¥é¥Ù¥ë¤ÈUNICODE¥Æ¥­¥¹¥È (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", tag_demo, "demo-unicodeout")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ¥Ü¥¿¥ó \n", tag_demo, "demo-button")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. ¥Á¥§¥Ã¥¯¥Ü¥¿¥ó (Ê£¿ô¤òÁªÂò²ÄÇ½)\n", </div><div class='del'>-           tag_demo, "demo-check")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. £³¾õÂÖ¥Á¥§¥Ã¥¯¥Ü¥¿¥ó (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-check2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. ¥é¥¸¥ª¥Ü¥¿¥ó (Ç¤°Õ¤Î°ì¤Ä¤òÁªÂò²ÄÇ½)\n", </div><div class='del'>-           tag_demo, "demo-radio")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "7. ¥é¥¸¥ª¥Ü¥¿¥ó (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-radio2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "8. £³¾õÂÖ¥é¥¸¥ª¥Ü¥¿¥ó (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-radio3")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "9. ¥Ü¥¿¥ó¤Çºî¤é¤ì¤¿15-¥Ñ¥º¥ë¥²¡¼¥à\n", </div><div class='del'>-           tag_demo, "demo-puzzle")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "10. ¥Ó¥Ã¥È¥Þ¥Ã¥×¤ò»ÈÍÑ¤·¤¿¥¢¥¤¥³¥ó¥Ü¥¿¥ó\n", </div><div class='del'>-           tag_demo, "demo-icon")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "11. ²èÁü¤òÉ½¼¨¤¹¤ëÆó¤Ä¤Î¥é¥Ù¥ë\n", </div><div class='del'>-           tag_demo, "demo-image1")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "12. ²èÁü¤ò¸«¤ë¤¿¤á¤Î´ÊÃ±¤Ê¥æ¡¼¥¶¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹\n", </div><div class='del'>-           tag_demo, "demo-image2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "13. ²èÁü¤ò¸«¤ë¤¿¤á¤Î´ÊÃ±¤Ê¥æ¡¼¥¶¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-image3")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "14. ¥é¥Ù¥ëÉÕ¤­¥Õ¥ì¡¼¥à (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-labelframe")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "15. ¥Æ¡¼¥Þ¤ËÂÐ±þ¤·¤¿¥¦¥£¥¸¥§¥Ã¥È¤Î´ÊÃ±¤ÊÎã (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-ttkbut")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¥ê¥¹¥È¥Ü¥Ã¥¯¥¹\n", tag_middle)</div><div class='del'>-txt.insert('end', "¥ê¥¹¥È¥Ü¥Ã¥¯¥¹\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ÅÔÆ»ÉÜ¸©.\n", tag_demo, "demo-states")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ¿§: ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¤¿¤á¤ÎÇÛ¿§¤òÊÑ¤¨¤ë\n", </div><div class='del'>-           "#{tag_demo.id} demo-colors")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ³Ê¸À½¸\n", tag_demo, "demo-sayings")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. ¹ñ¤Ë¤Ä¤¤¤Æ¤Î¥Þ¥ë¥Á¥«¥é¥à¥ê¥¹¥È (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-mclist")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. ¥Ç¥£¥ì¥¯¥È¥ê¥Ö¥é¥¦¥¶ (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-tree")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¥¨¥ó¥È¥ê¤È¥¹¥Ô¥ó¥Ü¥Ã¥¯¥¹\n", tag_middle)</div><div class='del'>-txt.insert('end', "¥¨¥ó¥È¥ê\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤Ê¤·\n", tag_demo, "demo-entry1")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤¢¤ê\n", tag_demo, "demo-entry2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. Ç§¾Ú½èÍýÉÕ¤­¤Î¥¨¥ó¥È¥ê¥Ü¥Ã¥¯¥¹¤È¥Ñ¥¹¥ï¡¼¥É¥Õ¥£¡¼¥ë¥É (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-entry3")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. ¥¹¥Ô¥ó¥Ü¥Ã¥¯¥¹ (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-spin")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. ¥³¥ó¥Ü¥Ü¥Ã¥¯¥¹ (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-combo")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. ´ÊÃ±¤Ê¥Õ¥©¡¼¥à\n", tag_demo, "demo-form")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¥Æ¥­¥¹¥È\n", tag_middle)</div><div class='del'>-txt.insert('end', "¥Æ¥­¥¹¥È\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ´ðËÜÅª¤Ê¥Æ¥­¥¹¥È\n", tag_demo, "demo-text")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. É½¼¨¥¹¥¿¥¤¥ë.\n", tag_demo, "demo-style")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ¥Ï¥¤¥Ñ¡¼¥Æ¥­¥¹¥È(¥¿¥°¥Ð¥¤¥ó¥É).\n", </div><div class='del'>-           tag_demo, "demo-bind")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. ¥¦¥£¥ó¥É¥¦¤òËä¤á¹þ¤ó¤À¥Æ¥­¥¹¥È\n", </div><div class='del'>-           tag_demo, "demo-twind")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. ¥¦¥£¥ó¥É¥¦¤òËä¤á¹þ¤ó¤À¥Æ¥­¥¹¥È (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-twind2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. ¸¡º÷\n", tag_demo, "demo-search")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "7. ¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤ÎÂÐÅù²½(peering) (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", tag_demo, "demo-textpeer")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¥­¥ã¥ó¥Ð¥¹\n", tag_middle)</div><div class='del'>-txt.insert('end', "¥­¥ã¥ó¥Ð¥¹\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ¥¢¥¤¥Æ¥à¤Î·¿\n", tag_demo, "demo-items")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. 2 ¼¡¸µ¤Î¥×¥í¥Ã¥È\n", tag_demo, "demo-plot")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ¥Æ¥­¥¹¥È\n", tag_demo, "demo-ctext")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. Ìð°õ¤Î·Á\n", tag_demo, "demo-arrow")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. ¥ë¡¼¥é¡¼\n", tag_demo, "demo-ruler")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. ¥Õ¥í¥¢¥×¥é¥ó\n", tag_demo, "demo-floor")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "7. ¥Õ¥í¥¢¥×¥é¥ó (°Û¤Ê¤ë¥­¥ã¥ó¥Ð¥¹¥¢¥¤¥Æ¥àºîÀ®ÊýË¡¤ò»ÈÍÑ)\n", tag_demo, "demo-floor2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "8. ¥¹¥¯¥í¡¼¥ë²ÄÇ½¤Ê¥­¥ã¥ó¥Ð¥¹\n", </div><div class='del'>-           tag_demo, "demo-cscroll")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "9. ¥Á¥§¥¹¥Ü¡¼¥É¾å¤Îµ³»Î¤Î½ä²ó (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-knightstour")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¥¹¥±¡¼¥ë¤È¥×¥í¥°¥ì¥¹¥Ð¡¼\n", tag_middle)</div><div class='del'>-txt.insert('end', "¥¹¥±¡¼¥ë¤È¥×¥í¥°¥ì¥¹¥Ð¡¼\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ¿âÄ¾¥¹¥±¡¼¥ë\n", tag_demo.id, "demo-vscale")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ¿åÊ¿¥¹¥±¡¼¥ë\n", tag_demo.id, "demo-hscale")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ¥×¥í¥°¥ì¥¹¥Ð¡¼ (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", tag_demo.id, "demo-ttkprogress")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-txt.insert('end', "¥Ú¥¤¥ó¥É¥¦¥£¥ó¥É¥¦¤È¥Î¡¼¥È¥Ö¥Ã¥¯\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ¿åÊ¿Êý¸þ (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo.id, "demo-paned1")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ¿âÄ¾Êý¸þ (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo.id, "demo-paned2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ¥Æ¡¼¥Þ¤ËÂÐ±þ¤·¤¿Ëä¤á¹þ¤ß¥Ú¥¤¥ó (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo.id, "demo-ttkpane")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. ¥Î¡¼¥È¥Ö¥Ã¥¯¥¦¥£¥¸¥§¥Ã¥È (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo.id, "demo-ttknote")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¥á¥Ë¥å¡¼¤È¥Ä¡¼¥ë¥Ð¡¼\n", tag_middle)</div><div class='del'>-txt.insert('end', "¥á¥Ë¥å¡¼¤È¥Ä¡¼¥ë¥Ð¡¼\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ¥á¥Ë¥å¡¼¤È¥«¥¹¥±¡¼¥É¤ò´Þ¤ó¤À¥¦¥£¥ó¥É¥¦\n", </div><div class='del'>-           tag_demo, "demo-menu")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ¥á¥Ë¥å¡¼¤È¥«¥¹¥±¡¼¥É¤ò´Þ¤ó¤À¥¦¥£¥ó¥É¥¦ (Tk8.x ÀìÍÑ)\n", </div><div class='del'>-           tag_demo, "demo-menu8x")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3.                 ¡·                (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo, "demo-menu84")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. ¥á¥Ë¥å¡¼¥Ü¥¿¥ó (Tk8.x ÀìÍÑ)\n", </div><div class='del'>-           tag_demo, "demo-menubu")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "5. ¥Æ¡¼¥Þ¤ËÂÐ±þ¤·¤¿¥á¥Ë¥å¡¼¥Ü¥¿¥ó (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo.id, "demo-ttkmenu")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "6. ¥Æ¡¼¥Þ¤ËÂÐ±þ¤·¤¿¥Ä¡¼¥ë¥Ð¡¼ (Tile/Ttk³ÈÄ¥¤Ø¤ÎÂÐ±þ¤¬É¬Í×)\n", </div><div class='del'>-           tag_demo.id, "demo-toolbar")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¥À¥¤¥¢¥í¥°¥¦¥£¥ó¥É¥¦\n", tag_middle)</div><div class='del'>-txt.insert('end', "¥À¥¤¥¢¥í¥°¥¦¥£¥ó¥É¥¦\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹\n", tag_demo, "demo-msgbox")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ¾ÜºÙ¥Æ¥­¥¹¥ÈÉÕ¤­¤Î¥á¥Ã¥»¡¼¥¸¥Ü¥Ã¥¯¥¹ (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", tag_demo, "demo-msgbox2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ¥Õ¥¡¥¤¥ëÁªÂò¥À¥¤¥¢¥í¥°\n", tag_demo, "demo-filebox")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. ¿§ÁªÂò¥À¥¤¥¢¥í¥°\n", tag_demo, "demo-clrpick")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¥¢¥Ë¥á¡¼¥·¥ç¥ó\n", tag_middle)</div><div class='del'>-txt.insert('end', "¥¢¥Ë¥á¡¼¥·¥ç¥ó\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ¥¢¥Ë¥á¡¼¥·¥ç¥ó¥é¥Ù¥ë (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", tag_demo, "demo-anilabel")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ÇÈ·Á¤Î¥¢¥Ë¥á¡¼¥·¥ç¥ó (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", tag_demo, "demo-aniwave")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ¿¶¤ê»Ò¤Î¥·¥ß¥å¥ì¡¼¥·¥ç¥ó (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", tag_demo, "demo-pendulum")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "4. A celebration of Rube Goldberg (µ¡Ç½¤ËÂÐ±þ¤·¤¿¥Ð¡¼¥¸¥ç¥ó¤ÎTk¤¬É¬Í×)\n", tag_demo, "demo-goldberg")</div><div class='del'>-</div><div class='del'>-txt.insert('end', "\n")</div><div class='del'>-#txt.insert('end', "¤½¤ÎÂ¾\n", tag_middle)</div><div class='del'>-txt.insert('end', "¤½¤ÎÂ¾\n", tag_kanji_title)</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "1. ÁÈ¤ß¹þ¤ß¤Î¥Ó¥Ã¥È¥Þ¥Ã¥×\n", tag_demo, "demo-bitmap")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "2. ¥â¡¼¥À¥ë¥À¥¤¥¢¥í¥°(¥í¡¼¥«¥ë¥°¥é¥Ö)\n", </div><div class='del'>-           tag_demo, "demo-dialog1")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-txt.insert('end', "3. ¥â¡¼¥À¥ë¥À¥¤¥¢¥í¥°(¥°¥í¡¼¥Ð¥ë¥°¥é¥Ö)\n", </div><div class='del'>-           tag_demo, "demo-dialog2")</div><div class='del'>-txt.insert('end', " \n ", tag_demospace)</div><div class='del'>-</div><div class='del'>-txt.state('disabled')</div><div class='del'>-scr.focus</div><div class='del'>-</div><div class='del'>-################################</div><div class='del'>-# method ÄêµÁ</div><div class='del'>-################################</div><div class='del'>-def positionWindow(w)</div><div class='del'>-  w.geometry('+300+300')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# ¿Æ¥¦¥£¥¸¥§¥Ã¥È¤È¡¤ÊÑ¿ôÌ¾¤È TkVariable ¤È¤ÎÁÈ(ÇÛÎó)¤ÎÊÂ¤Ó¤òÅÏ¤¹</div><div class='del'>-$showVarsWin = {}</div><div class='del'>-def showVars1(parent, *args)</div><div class='del'>-  if $showVarsWin[parent.path]</div><div class='del'>-    begin</div><div class='del'>-      $showVarsWin[parent.path].destroy </div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  top = TkToplevel.new(parent) {|w|</div><div class='del'>-    title "Variable values"</div><div class='del'>-    base = TkFrame.new(w).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-    TkLabel.new(base) {</div><div class='del'>-      text "ÊÑ¿ôÃÍ:"</div><div class='del'>-      width 20</div><div class='del'>-      anchor 'center'</div><div class='del'>-      if $tk_version =~ /^4.*/</div><div class='del'>-        font '-Adobe-helvetica-medium-r-normal--*-180-*-*-*-*-*-*'</div><div class='del'>-      else</div><div class='del'>-        font 'Helvetica 14'</div><div class='del'>-      end</div><div class='del'>-    }.pack('side'=&gt;'top', 'fill'=&gt;'x')</div><div class='del'>-    len = 1</div><div class='del'>-    args.each{|vnam,vbody|</div><div class='del'>-      len = vnam.to_s.length if vnam.to_s.length &gt; len</div><div class='del'>-    }</div><div class='del'>-    args.each{|vnam,vbody|</div><div class='del'>-      TkFrame.new(base){|f|</div><div class='del'>-        #TkLabel.new(f, 'text'=&gt;"#{vnam}: ").pack('side'=&gt;'left')</div><div class='del'>-        TkLabel.new(f, 'text'=&gt;"#{vnam}: ",'width'=&gt;len+2).pack('side'=&gt;'left')</div><div class='del'>-        TkLabel.new(f, 'textvariable'=&gt;vbody, 'anchor'=&gt;'w')\</div><div class='del'>-                   .pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'x')</div><div class='del'>-      }.pack('side'=&gt;'top', 'anchor'=&gt;'w', 'fill'=&gt;'x')</div><div class='del'>-    }</div><div class='del'>-    TkButton.new(base) {</div><div class='del'>-      text "Î»²ò"</div><div class='del'>-      command proc{w.destroy}</div><div class='del'>-    }.pack('side'=&gt;'bottom', 'pady'=&gt;2)</div><div class='del'>-  }</div><div class='del'>-  $showVarsWin[parent.path] = top</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def showVars2(parent, *args)</div><div class='del'>-  if $showVarsWin[parent.path]</div><div class='del'>-    begin</div><div class='del'>-      $showVarsWin[parent.path].destroy </div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  $showVarsWin[parent.path] = TkToplevel.new(parent) {|top|</div><div class='del'>-    title "Variable values"</div><div class='del'>-</div><div class='del'>-    base = TkFrame.new(top).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    TkLabelFrame.new(base, :text=&gt;"ÊÑ¿ôÃÍ:", </div><div class='del'>-                     :font=&gt;{:family=&gt;'Helvetica', :size=&gt;14}){|f|</div><div class='del'>-      args.each{|vnam,vbody|</div><div class='del'>-        TkGrid(TkLabel.new(f, :text=&gt;"#{vnam}: ", :anchor=&gt;'w'), </div><div class='del'>-               TkLabel.new(f, :textvariable=&gt;vbody, :anchor=&gt;'w'), </div><div class='del'>-               :padx=&gt;2, :pady=&gt;2, :sticky=&gt;'w')</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      f.grid(:sticky=&gt;'news', :padx=&gt;4)</div><div class='del'>-      f.grid_columnconfig(1, :weight=&gt;1)</div><div class='del'>-      f.grid_rowconfig(100, :weight=&gt;1)</div><div class='del'>-    }</div><div class='del'>-    TkButton.new(base, :text=&gt;"Î»²ò", :width=&gt;8, :default=&gt;:active, </div><div class='del'>-                 :command=&gt;proc{top.destroy}){|b|</div><div class='del'>-      top.bind('Return', proc{b.invoke})</div><div class='del'>-      top.bind('Escape', proc{b.invoke})</div><div class='del'>-</div><div class='del'>-      b.grid(:sticky=&gt;'e', :padx=&gt;4, :pady=&gt;[6, 4])</div><div class='del'>-    }</div><div class='del'>-    base.grid_columnconfig(0, :weight=&gt;1)</div><div class='del'>-    base.grid_rowconfig(0, :weight=&gt;1)</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &lt; 8</div><div class='del'>-  alias showVars showVars1</div><div class='del'>-elsif $tk_major_ver == 8 &amp;&amp; $tk_minor_ver &lt; 4</div><div class='del'>-  alias showVars showVars1</div><div class='del'>-else # ver &gt;= 8.4</div><div class='del'>-  alias showVars showVars2</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# µ¿»÷¥È¥Ã¥×¥ì¥Ù¥ë¥µ¥Ý¡¼¥È</div><div class='del'>-module 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'>-  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__ method_missing</div><div class='del'>-  private :__method_missing__</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 = Thread.current[: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__(id, *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Proc</div><div class='del'>-  def initialize(*args, &amp;b)</div><div class='del'>-    super</div><div class='del'>-    @__pseudo_toplevel__ = Thread.current[:TOPLEVEL]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias __call__ call</div><div class='del'>-  def call(*args, &amp;b)</div><div class='del'>-    if top = @__pseudo_toplevel__</div><div class='del'>-      orig_top = Thread.current[:TOPLEVEL]</div><div class='del'>-      Thread.current[:TOPLEVEL] = top</div><div class='del'>-      begin</div><div class='del'>-        __call__(*args, &amp;b)</div><div class='del'>-      ensure</div><div class='del'>-        Thread.current[:TOPLEVEL] = orig_top</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      __call__(*args, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def proc(&amp;b)</div><div class='del'>-  Proc.new(&amp;b)</div><div class='del'>-end</div><div class='del'>-def lambda(&amp;b)</div><div class='del'>-  Proc.new(&amp;b)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def _null_binding</div><div class='del'>-  Module.new.instance_eval{extend PseudoToplevel_Evaluable}</div><div class='del'>-  # binding</div><div class='del'>-  # Module.new.instance_eval{binding}</div><div class='del'>-end</div><div class='del'>-private :_null_binding</div><div class='del'>-</div><div class='del'>-def eval_samplecode(code, file=nil)</div><div class='del'>-  #eval(code)</div><div class='del'>-  #_null_binding.pseudo_toplevel_eval{ eval(code) }</div><div class='del'>-  #Thread.new{ _null_binding.pseudo_toplevel_eval{ eval(code) } }</div><div class='del'>-  Thread.new{</div><div class='del'>-    _null_binding.pseudo_toplevel_eval{</div><div class='del'>-      begin</div><div class='del'>-        if file</div><div class='del'>-          eval(code, binding, "(eval:#{file})")</div><div class='del'>-        else</div><div class='del'>-          eval(code)</div><div class='del'>-        end</div><div class='del'>-      rescue Exception=&gt;e</div><div class='del'>-        #p e</div><div class='del'>-        TkBgError.show(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'>-    }</div><div class='del'>-  }</div><div class='del'>-  Tk.update</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# ¥Æ¥­¥¹¥È¾å¤Ç¤Î click ¤ËÂÐ¤¹¤ëÆ°ºî</div><div class='del'>-def invoke(txt, idx)</div><div class='del'>-  tag = txt.tag_names(idx).find{|t| t.kind_of?(String) &amp;&amp; t =~ /^demo-/}</div><div class='del'>-  return unless tag</div><div class='del'>-</div><div class='del'>-  cursor = txt.cget('cursor')</div><div class='del'>-  txt.cursor('watch')</div><div class='del'>-  Tk.update</div><div class='del'>-  # eval(IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join, _null_binding)</div><div class='del'>-  # Tk.update</div><div class='del'>-  eval_samplecode(IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join, tag[5..-1] + '.rb')</div><div class='del'>-  txt.cursor(cursor)</div><div class='del'>-</div><div class='del'>-  $tag_visited.add("#{idx} linestart +1 chars", "#{idx} lineend +1 chars")</div><div class='del'>-end</div><div class='del'>-=begin</div><div class='del'>-def invoke (txt, idx)</div><div class='del'>-  tag = txt.tag_names(idx).find{|t| t.kind_of?(String) &amp;&amp; t =~ /^demo-/}</div><div class='del'>-  return unless tag</div><div class='del'>-  current_cursor = txt.cget('cursor')</div><div class='del'>-  txt.cursor('watch')</div><div class='del'>-  Tk.update</div><div class='del'>-#  eval `cat #{tag[5..-1]}.rb`</div><div class='del'>-#  eval `cat #{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb`</div><div class='del'>-  eval IO.readlines("#{[$demo_dir, tag[5..-1]].join(File::Separator)}.rb").join</div><div class='del'>-  Tk.update</div><div class='del'>-#  txt.cursor('xterm')</div><div class='del'>-  txt.cursor(current_cursor)</div><div class='del'>-</div><div class='del'>-  $tag_visited.add("#{idx} linestart +1 chars", "#{idx} lineend +1 chars")</div><div class='del'>-end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-# ¾õÂÖÉ½¼¨</div><div class='del'>-def showStatus (txt, index)</div><div class='del'>-  tag = txt.tag_names(index).find{|t| t.kind_of?(String) &amp;&amp; t =~ /^demo-/}</div><div class='del'>-  cursor = txt.cget('cursor')</div><div class='del'>-  unless tag</div><div class='del'>-    $statusBarLabel.configure('text', " ")</div><div class='del'>-    newcursor = 'xterm'</div><div class='del'>-  else</div><div class='del'>-    demoname = tag[5..-1]</div><div class='del'>-    $statusBarLabel.configure('text', </div><div class='del'>-                             "¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à \"#{demoname}\" ¤Î¼Â¹Ô ")</div><div class='del'>-    newcursor = 'hand2'</div><div class='del'>-  end</div><div class='del'>-  txt.configure('cursor'=&gt;newcursor) if cursor != newcursor</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# ¥½¡¼¥¹¥³¡¼¥É¤ÎÉ½¼¨</div><div class='del'>-def showCode1(demo)</div><div class='del'>-  file = "#{demo}.rb"</div><div class='del'>-  $code_window = nil unless defined? $code_window</div><div class='del'>-  if $code_window == nil || TkWinfo.exist?($code_window) == false</div><div class='del'>-    $code_window = TkToplevel.new(nil)</div><div class='del'>-    f = TkFrame.new($code_window)</div><div class='del'>-</div><div class='del'>-    TkButton.new(f) {</div><div class='del'>-      #text "Î»²ò"</div><div class='del'>-      text "ÊÄ¤¸¤ë"</div><div class='del'>-      command proc{</div><div class='del'>-        $code_window.destroy</div><div class='del'>-        $code_window = nil</div><div class='del'>-      }</div><div class='del'>-    }.pack('side'=&gt;'right', 'expand'=&gt;'false', 'pady'=&gt;2)</div><div class='del'>-    TkButton.new(f) {</div><div class='del'>-      text "ºÆ¼Â¹Ô"</div><div class='del'>-      # command proc{eval($code_text.get('1.0','end'), _null_binding)}</div><div class='del'>-      command proc{eval_samplecode($code_text.get('1.0','end'), '&lt;viewer&gt;')}</div><div class='del'>-    }.pack('side'=&gt;'right', 'expand'=&gt;'false', 'pady'=&gt;2)</div><div class='del'>-</div><div class='del'>-    TkLabel.new(f,'text'=&gt;'line:').pack('side'=&gt;'left')</div><div class='del'>-    linenum =TkLabel.new(f,'text'=&gt;'').pack('side'=&gt;'left')</div><div class='del'>-    TkLabel.new(f,'text'=&gt;'  pos:').pack('side'=&gt;'left')</div><div class='del'>-    posnum =TkLabel.new(f,'text'=&gt;'').pack('side'=&gt;'left')</div><div class='del'>-</div><div class='del'>-    $set_linenum = proc{|w|</div><div class='del'>-      line, pos = w.index('insert').split('.')</div><div class='del'>-      linenum.text = line</div><div class='del'>-      posnum.text  = pos</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    f.pack('side'=&gt;'bottom', 'expand'=&gt;'true', 'fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-    if $tk_version =~ /^4\.[01]/</div><div class='del'>-      s = TkScrollbar.new($code_window, 'orient'=&gt;'vertical')</div><div class='del'>-      $code_text = TkText.new($code_window) {</div><div class='del'>-        height 40</div><div class='del'>-        setgrid 'yes'</div><div class='del'>-        yscrollcommand proc{|first,last| s.set first,last}</div><div class='del'>-      }</div><div class='del'>-      s.command(proc{|*args| $code_text.yview(*args)})</div><div class='del'>-      s.pack('side'=&gt;'right', 'fill'=&gt;'y')</div><div class='del'>-      $code_text.pack('side'=&gt;'left', 'expand'=&gt;'yes', 'fill'=&gt;'both')</div><div class='del'>-    else</div><div class='del'>-      TkFrame.new($code_window) {|f|</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'>-        hs = TkScrollbar.new($code_window, 'highlightthickness'=&gt;0, </div><div class='del'>-                             'orient'=&gt;'horizontal')</div><div class='del'>-        vs = TkScrollbar.new($code_window, 'highlightthickness'=&gt;0, </div><div class='del'>-                             'orient'=&gt;'vertical')</div><div class='del'>-        $code_text = TkText.new($code_window) {|t|</div><div class='del'>-          height 40</div><div class='del'>-          #wrap 'word'</div><div class='del'>-          wrap 'char'</div><div class='del'>-          xscrollcommand proc{|first,last| hs.set first,last}</div><div class='del'>-          yscrollcommand proc{|first,last| vs.set first,last}</div><div class='del'>-          setgrid 'yes'</div><div class='del'>-          highlightthickness 0</div><div class='del'>-          pady 2</div><div class='del'>-          padx 3</div><div class='del'>-          hs.command(proc{|*args| $code_text.xview(*args)})</div><div class='del'>-          vs.command(proc{|*args| $code_text.yview(*args)})</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        $code_text.grid('in'=&gt;f, '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'>-        vs.grid('in'=&gt;f, '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'>-#       xs.grid('in'=&gt;f, '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'>-        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'>-    end</div><div class='del'>-</div><div class='del'>-    btag = TkBindTag.new</div><div class='del'>-</div><div class='del'>-    btag.bind('Key', $set_linenum, '%W')</div><div class='del'>-    btag.bind('Button', $set_linenum, '%W')</div><div class='del'>-</div><div class='del'>-    btags = $code_text.bindtags</div><div class='del'>-    btags.insert(btags.index($code_text.class) + 1, btag)</div><div class='del'>-    $code_text.bindtags = btags</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    $code_window.deiconify</div><div class='del'>-    $code_window.raise</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $code_window.title("Demo code: #{file}")</div><div class='del'>-  $code_window.iconname(file)</div><div class='del'>-#  fid = open(file, 'r')</div><div class='del'>-  fid = open([$demo_dir, file].join(File::Separator), 'r')</div><div class='del'>-  $code_text.delete('1.0', 'end')</div><div class='del'>-  #$code_text.insert('1.0', `cat #{file}`)</div><div class='del'>-  $code_text.insert('1.0', fid.read)</div><div class='del'>-  #$code_mark = TkTextMark.new($code_text, '1.0')</div><div class='del'>-  #$code_text.set_insert('1.0')</div><div class='del'>-  TkTextMarkInsert.new($code_text,'1.0')</div><div class='del'>-</div><div class='del'>-  $set_linenum.call($code_text)</div><div class='del'>-</div><div class='del'>-  fid.close</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def showCode2(demo)</div><div class='del'>-  file = "#{demo}.rb"</div><div class='del'>-  $code_window = nil unless defined? $code_window</div><div class='del'>-  if $code_window == nil || TkWinfo.exist?($code_window) == false</div><div class='del'>-    $code_window = TkToplevel.new(nil)</div><div class='del'>-    tf = TkFrame.new($code_window)</div><div class='del'>-    $code_text = TkText.new(tf, :font=&gt;'Courier 10', :height=&gt;30, </div><div class='del'>-                           :wrap=&gt;'word', :bd=&gt;1, :setgrid=&gt;true, </div><div class='del'>-                           :highlightthickness=&gt;0, :pady=&gt;2, :padx=&gt;3)</div><div class='del'>-    xscr = TkScrollbar.new(tf, :bd=&gt;1){assign($code_text)}</div><div class='del'>-    yscr = TkScrollbar.new(tf, :bd=&gt;1){assign($code_text)}</div><div class='del'>-    TkGrid($code_text, yscr, :sticky=&gt;'news')</div><div class='del'>-    #TkGrid(xscr)</div><div class='del'>-    tf.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    tf.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    bf = TkFrame.new($code_window)</div><div class='del'>-</div><div class='del'>-    lf = TkFrame.new(bf)</div><div class='del'>-    TkLabel.new(lf, :text=&gt;'line:').pack(:side=&gt;:left)</div><div class='del'>-    linenum =TkLabel.new(lf, :text=&gt;'').pack(:side=&gt;:left)</div><div class='del'>-    TkLabel.new(lf, :text=&gt;'  pos:').pack(:side=&gt;:left)</div><div class='del'>-    posnum =TkLabel.new(lf, :text=&gt;'').pack(:side=&gt;:left)</div><div class='del'>-</div><div class='del'>-    $set_linenum = proc{|w|</div><div class='del'>-      line, pos = w.index('insert').split('.')</div><div class='del'>-      linenum.text = line</div><div class='del'>-      posnum.text  = pos</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #b_dis = TkButton.new(bf, :text=&gt;'Î»²ò', :default=&gt;:active, </div><div class='del'>-    b_dis = TkButton.new(bf, :text=&gt;'ÊÄ¤¸¤ë', :default=&gt;:active, </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           $code_window.destroy</div><div class='del'>-                           $code_window = nil</div><div class='del'>-                         }, </div><div class='del'>-                         :image=&gt;$image['delete'], :compound=&gt;:left)</div><div class='del'>-    b_prn = TkButton.new(bf, :text=&gt;'°õºþ', </div><div class='del'>-                         :command=&gt;proc{printCode($code_text, file)}, </div><div class='del'>-                         :image=&gt;$image['print'], :compound=&gt;:left)</div><div class='del'>-    b_run = TkButton.new(bf, :text=&gt;'ºÆ¼Â¹Ô', </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           # eval($code_text.get('1.0','end'), _null_binding)</div><div class='del'>-                           eval_samplecode($code_text.get('1.0','end'), '&lt;viewer&gt;')</div><div class='del'>-                         }, </div><div class='del'>-                         :image=&gt;$image['refresh'], :compound=&gt;:left)</div><div class='del'>-</div><div class='del'>-    TkGrid(lf, 'x', b_run, b_prn, b_dis, :padx=&gt;4, :pady=&gt;[6,4])</div><div class='del'>-    bf.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    TkGrid(tf, :sticky=&gt;'news')</div><div class='del'>-    TkGrid(bf, :sticky=&gt;'ew')</div><div class='del'>-    $code_window.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-    $code_window.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-    $code_window.bind('Return', proc{|win|</div><div class='del'>-                        b_dis.invoke unless win.kind_of?(TkText)</div><div class='del'>-                      }, '%W')</div><div class='del'>-    $code_window.bindinfo('Return').each{|cmd, arg|</div><div class='del'>-      $code_window.bind_append('Escape', cmd, arg)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    btag = TkBindTag.new</div><div class='del'>-</div><div class='del'>-    btag.bind('Key', $set_linenum, '%W')</div><div class='del'>-    btag.bind('Button', $set_linenum, '%W')</div><div class='del'>-</div><div class='del'>-    btags = $code_text.bindtags</div><div class='del'>-    btags.insert(btags.index($code_text.class) + 1, btag)</div><div class='del'>-    $code_text.bindtags = btags</div><div class='del'>-</div><div class='del'>-  else</div><div class='del'>-    $code_window.deiconify</div><div class='del'>-    $code_window.raise</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $code_window.title("Demo code: #{file}")</div><div class='del'>-  $code_window.iconname(file)</div><div class='del'>-  fid = open([$demo_dir, file].join(File::Separator), 'r')</div><div class='del'>-  $code_text.delete('1.0', 'end')</div><div class='del'>-  $code_text.insert('1.0', fid.read)</div><div class='del'>-  TkTextMarkInsert.new($code_text,'1.0')</div><div class='del'>-</div><div class='del'>-  $set_linenum.call($code_text)</div><div class='del'>-</div><div class='del'>-  fid.close</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $tk_major_ver &lt; 8</div><div class='del'>-  alias showCode showCode1</div><div class='del'>-elsif $tk_major_ver == 8 &amp;&amp; $tk_minor_ver &lt; 4</div><div class='del'>-  alias showCode showCode1</div><div class='del'>-else # ver &gt;= 8.4</div><div class='del'>-  alias showCode showCode2</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# printCode --</div><div class='del'>-# Prints the source code currently displayed in the See Code dialog.</div><div class='del'>-# Much thanks to Arjen Markus for this.</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# txt -         Name of text widget containing code to print</div><div class='del'>-# file -        Name of the original file (implicitly for title)</div><div class='del'>-</div><div class='del'>-def printCode(txt, file)</div><div class='del'>-  code = txt.get('1.0', 'end - 1c')</div><div class='del'>-  dir = '.'</div><div class='del'>-  dir = ENV['HOME'] if ENV['HOME']</div><div class='del'>-  dir = ENV['TMP'] if ENV['TMP']</div><div class='del'>-  dir = ENV['TEMP'] if ENV['TEMP']</div><div class='del'>-</div><div class='del'>-  fname = [dir, 'tkdemo-' + file].join(File::Separator)</div><div class='del'>-  open(fname, 'w'){|fid| fid.print(code)}</div><div class='del'>-  begin</div><div class='del'>-    case Tk::TCL_PLATFORM('platform')</div><div class='del'>-    when 'unix'</div><div class='del'>-      msg = `lp -c #{fname}`</div><div class='del'>-      unless $?.exitstatus == 0</div><div class='del'>-        Tk.messageBox(:title=&gt;'Print spooling failure', </div><div class='del'>-                      :message=&gt;'¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡¥' + </div><div class='del'>-                                '°õºþ¤Ë¼ºÇÔ¤·¤¿¤â¤Î¤È»×¤ï¤ì¤Þ¤¹ : ' + msg)</div><div class='del'>-      end</div><div class='del'>-    when 'windows'</div><div class='del'>-      begin</div><div class='del'>-        printTextWin32(fname)</div><div class='del'>-      rescue =&gt; e</div><div class='del'>-        Tk.messageBox(:title=&gt;'Print spooling failure', </div><div class='del'>-                      :message=&gt;'¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡¥' + </div><div class='del'>-                                '°õºþ¤Ë¼ºÇÔ¤·¤¿¤â¤Î¤È»×¤ï¤ì¤Þ¤¹ : ' + </div><div class='del'>-                                e.message)</div><div class='del'>-      end      </div><div class='del'>-    when 'macintosh'</div><div class='del'>-      Tk.messageBox(:title=&gt;'Operation not Implemented', </div><div class='del'>-                    :message=&gt;'°õºþµ¡Ç½¤Ï¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó')</div><div class='del'>-    else</div><div class='del'>-      Tk.messageBox(:title=&gt;'Operation not Implemented', </div><div class='del'>-                    :message=&gt;'¸¡½Ð¤µ¤ì¤¿´Ä¶­ ' + </div><div class='del'>-                              Tk::TCL_PLATFORM('platform') + </div><div class='del'>-                              ' ¤ÏÌ¤ÃÎ¤Î´Ä¶­¤Ç¤¢¤ë¤¿¤á¡¤' + </div><div class='del'>-                              '°õºþµ¡Ç½¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó: ')</div><div class='del'>-    end</div><div class='del'>-  ensure</div><div class='del'>-    File.delete(fname)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# printTextWin32 --</div><div class='del'>-#    Print a file under Windows</div><div class='del'>-#</div><div class='del'>-# Arguments:</div><div class='del'>-# filename -            Name of the file</div><div class='del'>-#</div><div class='del'>-def printTextWin32(fname)</div><div class='del'>-  require 'win32/registry'</div><div class='del'>-  begin</div><div class='del'>-    app = Win32::Registry::HKEY_CLASSES_ROOT['.txt']</div><div class='del'>-    pcmd = nil</div><div class='del'>-    Win32::Registry::HKEY_CLASSES_ROOT.open("#{app}\\shell\\print"){|reg|</div><div class='del'>-      pcmd = reg['command']</div><div class='del'>-    }</div><div class='del'>-  rescue</div><div class='del'>-    app = Tk.tk_call('auto_execok', 'notepad.exe')</div><div class='del'>-    pcmd = "#{app} /p %1"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  pcmd.gsub!('%1', fname)</div><div class='del'>-  puts pcmd</div><div class='del'>-  cmd = Tk.tk_call('auto_execok', 'start') + ' /min ' + pcmd</div><div class='del'>-  </div><div class='del'>-  msg = `#{cmd}`</div><div class='del'>-  unless $?.exitstatus == 0</div><div class='del'>-    fail RuntimeError, msg</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# aboutBox</div><div class='del'>-#</div><div class='del'>-#      Pops up a message box with an "about" message</div><div class='del'>-#</div><div class='del'>-def aboutBox</div><div class='del'>-  Tk.messageBox('icon'=&gt;'info', 'type'=&gt;'ok', 'title'=&gt;'About Widget Demo', </div><div class='del'>-                'message'=&gt;"Ruby/Tk ¥¦¥£¥¸¥§¥Ã¥È¥Ç¥â Ver.1.7.0-jp\n\n" + </div><div class='del'>-                           "based on demos of Tk8.1 -- 8.5  " + </div><div class='del'>-                           "( Copyright of Tcl/Tk demos:: " + </div><div class='del'>-                           "(c) 1996-1997 Sun Microsystems, Inc. / " + </div><div class='del'>-                           "(c) 1997-2000 Ajuba Solutions, Inc. / " + </div><div class='del'>-                           "(c) 2001-2007 Donal K. Fellows / " + </div><div class='del'>-                           "(c) 2002-2007 Daniel A. Steffen )\n\n" +</div><div class='del'>-                           "Your Ruby &amp; Tk Version ::\n" + </div><div class='del'>-                           "Ruby#{RUBY_VERSION}(#{RUBY_RELEASE_DATE})[#{RUBY_PLATFORM}] / Tk#{$tk_patchlevel}#{(Tk::JAPANIZED_TK)? '-jp': ''}\n\n" + </div><div class='del'>-                           "Ruby/Tk release date :: tcltklib #{TclTkLib::RELEASE_DATE}; tk #{Tk::RELEASE_DATE}")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-####################################</div><div class='del'>-# °ú¿ô¤Ç»ØÄê¤µ¤ì¤¿¥Ç¥â¤òµ¯Æ°¤¹¤ë</div><div class='del'>-no_launcher = false</div><div class='del'>-if ARGV[0] == '-n'</div><div class='del'>-  ARGV.shift</div><div class='del'>-  no_launcher = true if ARGV.size &gt; 0</div><div class='del'>-else</div><div class='del'>-  # show the root widget to make it lower then demo windows</div><div class='del'>-  Tk.update</div><div class='del'>-end</div><div class='del'>-ARGV.each{|cmd| </div><div class='del'>-  if cmd =~ /(.*).rb/</div><div class='del'>-    cmd = $1</div><div class='del'>-  end</div><div class='del'>-  #eval(IO.readlines("#{[$demo_dir, cmd].join(File::Separator)}.rb").join, </div><div class='del'>-  #     _null_binding)</div><div class='del'>-  eval_samplecode(IO.readlines("#{[$demo_dir, cmd].join(File::Separator)}.rb").join, cmd + '.rb')</div><div class='del'>-}</div><div class='del'>-if no_launcher</div><div class='del'>-  $root.withdraw  # hide root window</div><div class='del'>-  Thread.start{</div><div class='del'>-    loop do</div><div class='del'>-      count = 0</div><div class='del'>-      $root.winfo_children.each{|w|</div><div class='del'>-        count += 1 if w.kind_of?(TkToplevel)</div><div class='del'>-      }</div><div class='del'>-      $root.destroy if count == 0</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'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/editable_listbox.rb b/ext/tk/sample/editable_listbox.rb<br/>deleted file mode 100644<br/>index 99345da380..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/editable_listbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/editable_listbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,69 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Editable_TkListbox class</div><div class='del'>-#</div><div class='del'>-#   When "DoubleClick-1" on a listbox item, the entry box is opend on the</div><div class='del'>-#   item. And when hit "Return" key on the entry box after modifying the</div><div class='del'>-#   text, the entry box is closed and the item is changed. Or when hit </div><div class='del'>-#   "Escape" key, the entry box is closed without modification.</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 Editable_TkListbox &lt; TkListbox</div><div class='del'>-  def _ebox_placer(coord_y)</div><div class='del'>-    idx = self.nearest(coord_y)</div><div class='del'>-    x, y, w, h = self.bbox(idx)</div><div class='del'>-    @ebox.place(:x =&gt; 0, :relwidth =&gt; 1.0, </div><div class='del'>-                :y =&gt; y - self.selectborderwidth, </div><div class='del'>-                :height =&gt; h + 2 * self.selectborderwidth)</div><div class='del'>-    @ebox.pos = idx</div><div class='del'>-    @ebox.value = self.listvariable.list[idx]</div><div class='del'>-    @ebox.focus</div><div class='del'>-  end</div><div class='del'>-  private :_ebox_placer</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    super(keys)</div><div class='del'>-</div><div class='del'>-    unless self.listvariable</div><div class='del'>-      self.listvariable = TkVariable.new(self.get(0, :end))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @ebox = TkEntry.new(self){</div><div class='del'>-      @pos = -1</div><div class='del'>-      def self.pos; @pos; end</div><div class='del'>-      def self.pos=(idx); @pos = idx; end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @ebox.bind('Return'){</div><div class='del'>-      list = self.listvariable.list</div><div class='del'>-      list[@ebox.pos] = @ebox.value</div><div class='del'>-      self.listvariable.value = list</div><div class='del'>-      @ebox.place_forget</div><div class='del'>-      @ebox.pos = -1</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @ebox.bind('Escape'){</div><div class='del'>-      @ebox.place_forget</div><div class='del'>-      @ebox.pos = -1</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    self.bind('Double-1', '%y'){|y| _ebox_placer(y) }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  scr = TkScrollbar.new.pack(:side=&gt;:right, :fill=&gt;:y)</div><div class='del'>-</div><div class='del'>-  lbox1 = Editable_TkListbox.new.pack(:side=&gt;:left)</div><div class='del'>-  lbox2 = Editable_TkListbox.new.pack(:side=&gt;:left)</div><div class='del'>-</div><div class='del'>-  scr.assign(lbox1, lbox2)</div><div class='del'>-</div><div class='del'>-  lbox1.insert(:end, *%w(a b c d e f g h i j k l m n))</div><div class='del'>-  lbox2.insert(:end,     0,1,2,3,4,5,6,7,8,9,0,1,2,3)</div><div class='del'>-</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/encstr_usage.rb b/ext/tk/sample/encstr_usage.rb<br/>deleted file mode 100644<br/>index b22c2504ac..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/encstr_usage.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/encstr_usage.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-TkMessage.new(:width=&gt;400, :text=&gt;&lt;&lt;EOM).pack</div><div class='del'>-This sample shows how to use Tk::EncodedString class. \</div><div class='del'>-This reads 'iso2022-kr' text (from discription of \</div><div class='del'>-Korean language environment of GNU Emacs 20.7.2) \</div><div class='del'>-and inserts the text into the text widget.</div><div class='del'>-EOM</div><div class='del'>-</div><div class='del'>-t1 = TkText.new(:height=&gt;5).pack</div><div class='del'>-t2 = TkText.new(:height=&gt;5).pack</div><div class='del'>-t3 = TkText.new(:height=&gt;5).pack</div><div class='del'>-</div><div class='del'>-src_str = IO.readlines(File.join(File.dirname(__FILE__),'iso2022-kr.txt')).join</div><div class='del'>-</div><div class='del'>-t1.insert('end', </div><div class='del'>-          "use neither Tk::EncodedString class nor Tk.encoding= method\n\n")</div><div class='del'>-t1.insert('end', src_str)</div><div class='del'>-</div><div class='del'>-enc_str = Tk::EncodedString(src_str, 'iso2022-kr')</div><div class='del'>-t2.insert('end', </div><div class='del'>-          "use Tk::EncodedString class (Tk.encoding =&gt; '#{Tk.encoding}')\n\n")</div><div class='del'>-t2.insert('end', enc_str)</div><div class='del'>-</div><div class='del'>-Tk.encoding = 'iso2022-kr'</div><div class='del'>-t3.insert('end', "use Tk.encoding = 'iso2022-kr' (Tk.force_default_encoding? == #{Tk.force_default_encoding?})\n\n")</div><div class='del'>-</div><div class='del'>-t3.insert('end', src_str)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/figmemo_sample.rb b/ext/tk/sample/figmemo_sample.rb<br/>deleted file mode 100644<br/>index 1b6979d2dd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/figmemo_sample.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/figmemo_sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,456 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  # try to use Img extension</div><div class='del'>-  require 'tkextlib/tkimg'</div><div class='del'>-rescue Exception</div><div class='del'>-  # cannot use Img extention --&gt; ignore</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-############################</div><div class='del'>-# scrolled_canvas</div><div class='del'>-class TkScrolledCanvas &lt; TkCanvas</div><div class='del'>-  include TkComposite</div><div class='del'>-</div><div class='del'>-  def initialize_composite(keys={})</div><div class='del'>-    @h_scr = TkScrollbar.new(@frame)</div><div class='del'>-    @v_scr = TkScrollbar.new(@frame)</div><div class='del'>-</div><div class='del'>-    @canvas = TkCanvas.new(@frame)</div><div class='del'>-    @path = @canvas.path</div><div class='del'>-</div><div class='del'>-    @canvas.xscrollbar(@h_scr)</div><div class='del'>-    @canvas.yscrollbar(@v_scr)</div><div class='del'>-</div><div class='del'>-    TkGrid.rowconfigure(@frame, 0, :weight=&gt;1, :minsize=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 0, :weight=&gt;1, :minsize=&gt;0)</div><div class='del'>-</div><div class='del'>-    @canvas.grid(:row=&gt;0, :column=&gt;0, :sticky=&gt;'news')</div><div class='del'>-    @h_scr.grid(:row=&gt;1, :column=&gt;0, :sticky=&gt;'ew')</div><div class='del'>-    @v_scr.grid(:row=&gt;0, :column=&gt;1, :sticky=&gt;'ns')</div><div class='del'>-</div><div class='del'>-    delegate('DEFAULT', @canvas)</div><div class='del'>-    delegate('background', @canvas, @h_scr, @v_scr)</div><div class='del'>-    delegate('activebackground', @h_scr, @v_scr)</div><div class='del'>-    delegate('troughcolor', @h_scr, @v_scr)</div><div class='del'>-    delegate('repeatdelay', @h_scr, @v_scr)</div><div class='del'>-    delegate('repeatinterval', @h_scr, @v_scr)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-</div><div class='del'>-    delegate_alias('canvasborderwidth', 'borderwidth', @canvas)</div><div class='del'>-    delegate_alias('canvasrelief', 'relief', @canvas)</div><div class='del'>-</div><div class='del'>-    delegate_alias('scrollbarborderwidth', 'borderwidth', @h_scr, @v_scr)</div><div class='del'>-    delegate_alias('scrollbarrelief', 'relief', @h_scr, @v_scr)</div><div class='del'>-</div><div class='del'>-    configure(keys) unless keys.empty?</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-############################</div><div class='del'>-class PhotoCanvas &lt; TkScrolledCanvas</div><div class='del'>-</div><div class='del'>-USAGE = &lt;&lt;EOT</div><div class='del'>---- WHAT IS ---</div><div class='del'>-You can write comments on the loaded image, and save it as a Postscipt </div><div class='del'>-file (original image file is not modified). Each comment is drawn as a </div><div class='del'>-set of an indicator circle, an arrow, and a memo text. See the following </div><div class='del'>-how to write comments.</div><div class='del'>-This can save the list of memo texts to another file. It may useful to </div><div class='del'>-search the saved Postscript file by the comments on them.</div><div class='del'>-This may not support multibyte characters (multibyte texts are broken on </div><div class='del'>-a Postscript file). It depends on features of canvas widgets of Tcl/Tk </div><div class='del'>-libraries linked your Ruby/Tk. If you use Tcl/Tk8.0-jp (Japanized Tcl/Tk),</div><div class='del'>-you can (possibly) get a Japanese Postscript file.</div><div class='del'>-</div><div class='del'>---- BINDINGS ---</div><div class='del'>-* Button-1 : draw comments by following steps</div><div class='del'>-    1st - Set center of a indicator circle.</div><div class='del'>-    2nd - Set head position of an arrow.</div><div class='del'>-    3rd - Set tail position of an arrow, and show an entry box.</div><div class='del'>-          Input a memo text and hit 'Enter' key to entry the comment.</div><div class='del'>-</div><div class='del'>-* Button-2-drag : scroll the canvas</div><div class='del'>-</div><div class='del'>-* Button-3 : when drawing, cancel current drawing</div><div class='del'>-</div><div class='del'>-* Double-Button-3 : delete the clicked comment (text, arrow, and circle)</div><div class='del'>-EOT</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super(*args)</div><div class='del'>-</div><div class='del'>-    self.highlightthickness = 0</div><div class='del'>-    self.selectborderwidth = 0</div><div class='del'>-</div><div class='del'>-    @photo = TkPhotoImage.new</div><div class='del'>-    @img = TkcImage.new(self, 0, 0, :image=&gt;@photo)</div><div class='del'>-</div><div class='del'>-    width  = self.width</div><div class='del'>-    height = self.height</div><div class='del'>-    @scr_region = [-width, -height, width, height]</div><div class='del'>-    self.scrollregion(@scr_region)</div><div class='del'>-    self.xview_moveto(0.25)</div><div class='del'>-    self.yview_moveto(0.25)</div><div class='del'>-</div><div class='del'>-    @col = 'red'</div><div class='del'>-    @font = 'Helvetica -12'</div><div class='del'>-</div><div class='del'>-    @memo_id_num = -1</div><div class='del'>-    @memo_id_head = 'memo_'</div><div class='del'>-    @memo_id_tag = nil</div><div class='del'>-    @overlap_d = 2</div><div class='del'>-</div><div class='del'>-    @state = TkVariable.new</div><div class='del'>-    @border = 2</div><div class='del'>-    @selectborder = 1</div><div class='del'>-    @delta = @border + @selectborder</div><div class='del'>-    @entry = TkEntry.new(self, :relief=&gt;:ridge, :borderwidth=&gt;@border, </div><div class='del'>-                         :selectborderwidth=&gt;@selectborder, </div><div class='del'>-                         :highlightthickness=&gt;0)</div><div class='del'>-    @entry.bind('Return'){@state.value = 0}</div><div class='del'>-</div><div class='del'>-    @mode = old_mode = 0</div><div class='del'>-</div><div class='del'>-    _state0()</div><div class='del'>-</div><div class='del'>-    bind('2', :x, :y){|x,y| scan_mark(x,y)}</div><div class='del'>-    bind('B2-Motion', :x, :y){|x,y| scan_dragto(x,y)}</div><div class='del'>-</div><div class='del'>-    bind('3'){</div><div class='del'>-      next if (old_mode = @mode) == 0</div><div class='del'>-      @items.each{|item| item.delete }</div><div class='del'>-      _state0()</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    bind('Double-3', :widget, :x, :y){|w, x, y|</div><div class='del'>-      next if old_mode != 0</div><div class='del'>-      x = w.canvasx(x)</div><div class='del'>-      y = w.canvasy(y)</div><div class='del'>-      tag = nil</div><div class='del'>-      w.find_overlapping(x - @overlap_d, y - @overlap_d, </div><div class='del'>-                         x + @overlap_d, y + @overlap_d).find{|item|</div><div class='del'>-        ! (item.tags.find{|name|</div><div class='del'>-             if name =~ /^(#{@memo_id_head}\d+)$/</div><div class='del'>-               tag = $1</div><div class='del'>-             end</div><div class='del'>-           }.empty?)</div><div class='del'>-      }</div><div class='del'>-      w.delete(tag) if tag</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #-----------------------------------</div><div class='del'>-  private</div><div class='del'>-  def _state0() # init</div><div class='del'>-    @mode = 0</div><div class='del'>-</div><div class='del'>-    @memo_id_num += 1</div><div class='del'>-    @memo_id_tag = @memo_id_head + @memo_id_num.to_s</div><div class='del'>-</div><div class='del'>-    @target = nil</div><div class='del'>-    @items = []</div><div class='del'>-    @mark = [0, 0]</div><div class='del'>-    bind_remove('Motion')</div><div class='del'>-    bind('ButtonRelease-1', proc{|x,y| _state1(x,y)}, '%x', '%y')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _state1(x,y) # set center</div><div class='del'>-    @mode = 1</div><div class='del'>-</div><div class='del'>-    @target = TkcOval.new(self, </div><div class='del'>-                          [canvasx(x), canvasy(y)], [canvasx(x), canvasy(y)], </div><div class='del'>-                          :outline=&gt;@col, :width=&gt;3, :tags=&gt;[@memo_id_tag])</div><div class='del'>-    @items &lt;&lt; @target</div><div class='del'>-    @mark = [x,y]</div><div class='del'>-</div><div class='del'>-    bind('Motion', proc{|x,y| _state2(x,y)}, '%x', '%y')</div><div class='del'>-    bind('ButtonRelease-1', proc{|x,y| _state3(x,y)}, '%x', '%y')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _state2(x,y) # create circle</div><div class='del'>-    @mode = 2</div><div class='del'>-</div><div class='del'>-    r = Integer(Math.sqrt((x-@mark[0])**2 + (y-@mark[1])**2))</div><div class='del'>-    @target.coords([canvasx(@mark[0] - r), canvasy(@mark[1] - r)], </div><div class='del'>-                   [canvasx(@mark[0] + r), canvasy(@mark[1] + r)])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _state3(x,y) # set line start</div><div class='del'>-    @mode = 3</div><div class='del'>-</div><div class='del'>-    @target = TkcLine.new(self, </div><div class='del'>-                          [canvasx(x), canvasy(y)], [canvasx(x), canvasy(y)], </div><div class='del'>-                          :arrow=&gt;:first, :arrowshape=&gt;[10, 14, 5], </div><div class='del'>-                          :fill=&gt;@col, :tags=&gt;[@memo_id_tag])</div><div class='del'>-    @items &lt;&lt; @target</div><div class='del'>-    @mark = [x, y]</div><div class='del'>-</div><div class='del'>-    bind('Motion', proc{|x,y| _state4(x,y)}, '%x', '%y')</div><div class='del'>-    bind('ButtonRelease-1', proc{|x,y| _state5(x,y)}, '%x', '%y')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _state4(x,y) # create line</div><div class='del'>-    @mode = 4</div><div class='del'>-</div><div class='del'>-    @target.coords([canvasx(@mark[0]), canvasy(@mark[1])], </div><div class='del'>-                   [canvasx(x), canvasy(y)])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _state5(x,y) # set text</div><div class='del'>-    @mode = 5</div><div class='del'>-</div><div class='del'>-    if x - @mark[0] &gt;= 0</div><div class='del'>-      justify = 'left'</div><div class='del'>-      dx = - @delta</div><div class='del'>-</div><div class='del'>-      if y - @mark[1] &gt;= 0</div><div class='del'>-        anchor = 'nw'</div><div class='del'>-        dy = - @delta</div><div class='del'>-      else</div><div class='del'>-        anchor = 'sw'</div><div class='del'>-        dy = @delta</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      justify = 'right'</div><div class='del'>-      dx = @delta</div><div class='del'>-</div><div class='del'>-      if y - @mark[1] &gt;= 0</div><div class='del'>-        anchor = 'ne'</div><div class='del'>-        dy = - @delta</div><div class='del'>-      else</div><div class='del'>-        anchor = 'se'</div><div class='del'>-        dy = @delta</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    bind_remove('Motion')</div><div class='del'>-</div><div class='del'>-    @entry.value = ''</div><div class='del'>-    @entry.configure(:justify=&gt;justify, :font=&gt;@font, :foreground=&gt;@col)</div><div class='del'>-</div><div class='del'>-    ewin = TkcWindow.new(self, [canvasx(x)+dx, canvasy(y)+dy], </div><div class='del'>-                         :window=&gt;@entry, :state=&gt;:normal, :anchor=&gt;anchor, </div><div class='del'>-                         :tags=&gt;[@memo_id_tag])</div><div class='del'>-</div><div class='del'>-    @entry.focus</div><div class='del'>-    @entry.grab</div><div class='del'>-    @state.wait</div><div class='del'>-    @entry.grab_release</div><div class='del'>-</div><div class='del'>-    ewin.delete</div><div class='del'>-</div><div class='del'>-    @target = TkcText.new(self, [canvasx(x), canvasy(y)], </div><div class='del'>-                          :anchor=&gt;anchor, :justify=&gt;justify, </div><div class='del'>-                          :fill=&gt;@col, :font=&gt;@font, :text=&gt;@entry.value, </div><div class='del'>-                          :tags=&gt;[@memo_id_tag])</div><div class='del'>-</div><div class='del'>-    _state0()</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #-----------------------------------</div><div class='del'>-  public</div><div class='del'>-  def load_photo(filename)</div><div class='del'>-    @photo.configure(:file=&gt;filename)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def modified?</div><div class='del'>-    ! ((find_withtag('all') - [@img]).empty?)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def fig_erase</div><div class='del'>-    (find_withtag('all') - [@img]).each{|item| item.delete}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reset_region</div><div class='del'>-    width = @photo.width</div><div class='del'>-    height = @photo.height</div><div class='del'>-</div><div class='del'>-    if width &gt; @scr_region[2]</div><div class='del'>-      @scr_region[0] = -width</div><div class='del'>-      @scr_region[2] = width</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if height &gt; @scr_region[3]</div><div class='del'>-      @scr_region[1] = -height</div><div class='del'>-      @scr_region[3] = height</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    self.scrollregion(@scr_region)</div><div class='del'>-    self.xview_moveto(0.25)</div><div class='del'>-    self.yview_moveto(0.25)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_texts</div><div class='del'>-    ret = []</div><div class='del'>-    find_withtag('all').each{|item|</div><div class='del'>-      if item.kind_of?(TkcText)</div><div class='del'>-        ret &lt;&lt; item[:text]</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'>-############################</div><div class='del'>-</div><div class='del'>-# define methods for menu</div><div class='del'>-def open_file(canvas, fname)</div><div class='del'>-  if canvas.modified?</div><div class='del'>-    ret = Tk.messageBox(:icon=&gt;'warning',:type=&gt;'okcancel',:default=&gt;'cancel',</div><div class='del'>-                        :message=&gt;'Canvas may be modified. Realy erase? ')</div><div class='del'>-    return if ret == 'cancel'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  filetypes = [</div><div class='del'>-    ['GIF Files', '.gif'], </div><div class='del'>-    ['GIF Files', [], 'GIFF'], </div><div class='del'>-    ['PPM Files', '.ppm'], </div><div class='del'>-    ['PGM Files', '.pgm']</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    if Tk::Img::package_version != ''</div><div class='del'>-      filetypes &lt;&lt; ['JPEG Files', ['.jpg', '.jpeg']]</div><div class='del'>-      filetypes &lt;&lt; ['PNG Files', '.png']</div><div class='del'>-      filetypes &lt;&lt; ['PostScript Files', '.ps']</div><div class='del'>-      filetypes &lt;&lt; ['PDF Files', '.pdf']</div><div class='del'>-      filetypes &lt;&lt; ['Windows Bitmap Files', '.bmp']</div><div class='del'>-      filetypes &lt;&lt; ['Windows Icon Files', '.ico']</div><div class='del'>-      filetypes &lt;&lt; ['PCX Files', '.pcx']</div><div class='del'>-      filetypes &lt;&lt; ['Pixmap Files', '.pixmap']</div><div class='del'>-      filetypes &lt;&lt; ['SGI Files', '.sgi']</div><div class='del'>-      filetypes &lt;&lt; ['Sun Raster Files', '.sun']</div><div class='del'>-      filetypes &lt;&lt; ['TGA Files', '.tga']</div><div class='del'>-      filetypes &lt;&lt; ['TIFF Files', '.tiff']</div><div class='del'>-      filetypes &lt;&lt; ['XBM Files', '.xbm']</div><div class='del'>-      filetypes &lt;&lt; ['XPM Files', '.xpm']</div><div class='del'>-    end</div><div class='del'>-  rescue</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  filetypes &lt;&lt; ['ALL Files', '*']</div><div class='del'>-</div><div class='del'>-  fpath = Tk.getOpenFile(:filetypes=&gt;filetypes)</div><div class='del'>-  return if fpath.empty?</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    canvas.load_photo(fpath)</div><div class='del'>-  rescue =&gt; e</div><div class='del'>-    Tk.messageBox(:icon=&gt;'error', :type=&gt;'ok', </div><div class='del'>-                  :message=&gt;"Fail to read '#{fpath}'.\n#{e.message}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  canvas.fig_erase</div><div class='del'>-  canvas.reset_region</div><div class='del'>-</div><div class='del'>-  fname.value = fpath</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# --------------------------------</div><div class='del'>-def save_memo(canvas, fname)</div><div class='del'>-  initname = fname.value</div><div class='del'>-  if initname != '-'</div><div class='del'>-    initname = File.basename(initname, File.extname(initname))</div><div class='del'>-    fpath = Tk.getSaveFile(:filetypes=&gt;[ ['Text Files', '.txt'], </div><div class='del'>-                                         ['ALL Files', '*'] ], </div><div class='del'>-                           :initialfile=&gt;initname)</div><div class='del'>-  else</div><div class='del'>-    fpath = Tk.getSaveFile(:filetypes=&gt;[ ['Text Files', '.txt'], </div><div class='del'>-                                         ['ALL Files', '*'] ])</div><div class='del'>-  end</div><div class='del'>-  return if fpath.empty?</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    fid = open(fpath, 'w')</div><div class='del'>-  rescue =&gt; e</div><div class='del'>-    Tk.messageBox(:icon=&gt;'error', :type=&gt;'ok', </div><div class='del'>-                  :message=&gt;"Fail to open '#{fname.value}'.\n#{e.message}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    canvas.get_texts.each{|txt|</div><div class='del'>-      fid.print(txt, "\n")</div><div class='del'>-    }</div><div class='del'>-  ensure</div><div class='del'>-    fid.close</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# --------------------------------</div><div class='del'>-def ps_print(canvas, fname)</div><div class='del'>-  initname = fname.value</div><div class='del'>-  if initname != '-'</div><div class='del'>-    initname = File.basename(initname, File.extname(initname))</div><div class='del'>-    fpath = Tk.getSaveFile(:filetypes=&gt;[ ['Postscript Files', '.ps'], </div><div class='del'>-                                         ['ALL Files', '*'] ], </div><div class='del'>-                           :initialfile=&gt;initname)</div><div class='del'>-  else</div><div class='del'>-    fpath = Tk.getSaveFile(:filetypes=&gt;[ ['Postscript Files', '.ps'], </div><div class='del'>-                                         ['ALL Files', '*'] ])</div><div class='del'>-  end</div><div class='del'>-  return if fpath.empty?</div><div class='del'>-</div><div class='del'>-  bbox = canvas.bbox('all')</div><div class='del'>-  canvas.postscript(:file=&gt;fpath, :x=&gt;bbox[0], :y=&gt;bbox[1], </div><div class='del'>-                    :width=&gt;bbox[2] - bbox[0], :height=&gt;bbox[3] - bbox[1])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# --------------------------------</div><div class='del'>-def quit(canvas)</div><div class='del'>-  ret = Tk.messageBox(:icon=&gt;'warning', :type=&gt;'okcancel', </div><div class='del'>-                      :default=&gt;'cancel', </div><div class='del'>-                      :message=&gt;'Realy quit? ')</div><div class='del'>-  exit if ret == 'ok'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# --------------------------------</div><div class='del'>-# setup root</div><div class='del'>-root = TkRoot.new(:title=&gt;'Fig Memo')</div><div class='del'>-</div><div class='del'>-# create canvas frame</div><div class='del'>-canvas = PhotoCanvas.new(root).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-usage_frame = TkFrame.new(root, :relief=&gt;:ridge, :borderwidth=&gt;2)</div><div class='del'>-hide_btn = TkButton.new(usage_frame, :text=&gt;'hide usage', </div><div class='del'>-                        :font=&gt;{:size=&gt;8}, :pady=&gt;1, </div><div class='del'>-                        :command=&gt;proc{usage_frame.unpack})</div><div class='del'>-hide_btn.pack(:anchor=&gt;'e', :padx=&gt;5)</div><div class='del'>-usage = TkLabel.new(usage_frame, :text=&gt;PhotoCanvas::USAGE, </div><div class='del'>-                    :font=&gt;'Helvetica 8', :justify=&gt;:left).pack</div><div class='del'>-</div><div class='del'>-show_usage = proc{</div><div class='del'>-  usage_frame.pack(:before=&gt;canvas, :fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-fname = TkVariable.new('-')</div><div class='del'>-f = TkFrame.new(root, :relief=&gt;:sunken, :borderwidth=&gt;1).pack(:fill=&gt;:x)</div><div class='del'>-label = TkLabel.new(f, :textvariable=&gt;fname, </div><div class='del'>-                    :font=&gt;{:size=&gt;-12, :weight=&gt;:bold}, </div><div class='del'>-                    :anchor=&gt;'w').pack(:side=&gt;:left, :fill=&gt;:x, :padx=&gt;10)</div><div class='del'>-</div><div class='del'>-# create menu</div><div class='del'>-mspec = [</div><div class='del'>-  [ ['File', 0], </div><div class='del'>-    ['Show Usage',      proc{show_usage.call}, 5], </div><div class='del'>-    '---', </div><div class='del'>-    ['Open Image File', proc{open_file(canvas, fname)}, 0], </div><div class='del'>-    ['Save Memo Texts', proc{save_memo(canvas, fname)}, 0], </div><div class='del'>-    '---', </div><div class='del'>-    ['Save Postscript', proc{ps_print(canvas, fname)}, 5], </div><div class='del'>-    '---', </div><div class='del'>-    ['Quit', proc{quit(canvas)}, 0]</div><div class='del'>-  ]</div><div class='del'>-]</div><div class='del'>-root.add_menubar(mspec)</div><div class='del'>-</div><div class='del'>-# manage wm_protocol</div><div class='del'>-root.protocol(:WM_DELETE_WINDOW){quit(canvas)}</div><div class='del'>-</div><div class='del'>-# show usage</div><div class='del'>-show_usage.call</div><div class='del'>-</div><div class='del'>-# --------------------------------</div><div class='del'>-# start eventloop</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/images/earth.gif b/ext/tk/sample/images/earth.gif<br/>deleted file mode 100644<br/>index 2c229eb110..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/earth.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/earth.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/images/earthris.gif b/ext/tk/sample/images/earthris.gif<br/>deleted file mode 100644<br/>index c4ee473727..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/earthris.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/earthris.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/images/face.xbm b/ext/tk/sample/images/face.xbm<br/>deleted file mode 100644<br/>index 03d829f4d1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/face.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/face.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,173 +0,0 @@</div><div class='del'>-#define face_width 108</div><div class='del'>-#define face_height 144</div><div class='del'>-#define face_x_hot 48</div><div class='del'>-#define face_y_hot 80</div><div class='del'>-static char face_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x09,</div><div class='del'>-   0x20, 0x80, 0x24, 0x05, 0x00, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x88,</div><div class='del'>-   0x24, 0x20, 0x80, 0x24, 0x00, 0x00, 0x00, 0x10, 0x80, 0x04, 0x00, 0x01,</div><div class='del'>-   0x00, 0x01, 0x40, 0x0a, 0x09, 0x00, 0x92, 0x04, 0x80, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x10, 0x40, 0x12, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x84,</div><div class='del'>-   0x24, 0x40, 0x22, 0xa8, 0x02, 0x14, 0x84, 0x92, 0x40, 0x42, 0x12, 0x04,</div><div class='del'>-   0x10, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x11, 0x00, 0x12, 0x00,</div><div class='del'>-   0x40, 0x02, 0x00, 0x20, 0x00, 0x08, 0x00, 0xaa, 0x02, 0x54, 0x85, 0x24,</div><div class='del'>-   0x00, 0x10, 0x12, 0x00, 0x00, 0x81, 0x44, 0x00, 0x90, 0x5a, 0x00, 0xea,</div><div class='del'>-   0x1b, 0x00, 0x80, 0x40, 0x40, 0x02, 0x00, 0x08, 0x00, 0x20, 0xa2, 0x05,</div><div class='del'>-   0x8a, 0xb4, 0x6e, 0x45, 0x12, 0x04, 0x08, 0x00, 0x00, 0x00, 0x10, 0x02,</div><div class='del'>-   0xa8, 0x92, 0x00, 0xda, 0x5f, 0x10, 0x00, 0x10, 0xa1, 0x04, 0x20, 0x41,</div><div class='del'>-   0x02, 0x00, 0x5a, 0x25, 0xa0, 0xff, 0xfb, 0x05, 0x41, 0x02, 0x04, 0x00,</div><div class='del'>-   0x00, 0x08, 0x40, 0x80, 0xec, 0x9b, 0xec, 0xfe, 0x7f, 0x01, 0x04, 0x20,</div><div class='del'>-   0x90, 0x02, 0x04, 0x00, 0x08, 0x20, 0xfb, 0x2e, 0xf5, 0xff, 0xff, 0x57,</div><div class='del'>-   0x00, 0x04, 0x02, 0x00, 0x00, 0x20, 0x01, 0xc1, 0x6e, 0xab, 0xfa, 0xff,</div><div class='del'>-   0xff, 0x05, 0x90, 0x20, 0x48, 0x02, 0x00, 0x04, 0x20, 0xa8, 0xdf, 0xb5,</div><div class='del'>-   0xfe, 0xff, 0xff, 0x0b, 0x01, 0x00, 0x01, 0x00, 0x80, 0x80, 0x04, 0xe0,</div><div class='del'>-   0xbb, 0xef, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x04, 0x48, 0x02, 0x00, 0x20,</div><div class='del'>-   0x80, 0xf4, 0x6f, 0xfb, 0xff, 0xff, 0xff, 0x20, 0x90, 0x40, 0x02, 0x00,</div><div class='del'>-   0x00, 0x04, 0x08, 0xb8, 0xf6, 0xff, 0xff, 0xdf, 0xbe, 0x12, 0x45, 0x10,</div><div class='del'>-   0x90, 0x04, 0x90, 0x00, 0x22, 0xfa, 0xff, 0xff, 0xff, 0xbb, 0xd7, 0xe9,</div><div class='del'>-   0x3a, 0x02, 0x02, 0x00, 0x04, 0x90, 0x80, 0xfe, 0xdf, 0xf6, 0xb7, 0xef,</div><div class='del'>-   0xbe, 0x56, 0x57, 0x40, 0x48, 0x09, 0x00, 0x04, 0x00, 0xfa, 0xf5, 0xdf,</div><div class='del'>-   0xed, 0x5a, 0xd5, 0xea, 0xbd, 0x09, 0x00, 0x00, 0x40, 0x00, 0x92, 0xfe,</div><div class='del'>-   0xbf, 0x7d, 0xb7, 0x6a, 0x55, 0xbf, 0xf7, 0x02, 0x11, 0x01, 0x00, 0x91,</div><div class='del'>-   0x00, 0xff, 0xff, 0xaf, 0x55, 0x55, 0x5b, 0xeb, 0xef, 0x22, 0x04, 0x04,</div><div class='del'>-   0x04, 0x00, 0xa4, 0xff, 0xf7, 0xad, 0xaa, 0xaa, 0xaa, 0xbe, 0xfe, 0x03,</div><div class='del'>-   0x20, 0x00, 0x10, 0x44, 0x80, 0xff, 0x7f, 0x55, 0x12, 0x91, 0x2a, 0xeb,</div><div class='del'>-   0xbf, 0x0b, 0x82, 0x02, 0x00, 0x00, 0xd1, 0x7f, 0xdf, 0xa2, 0xa4, 0x54,</div><div class='del'>-   0x55, 0xfd, 0xfd, 0x47, 0x08, 0x08, 0x00, 0x21, 0xe4, 0xff, 0x37, 0x11,</div><div class='del'>-   0x09, 0xa5, 0xaa, 0xb6, 0xff, 0x0d, 0x80, 0x00, 0x00, 0x04, 0xd0, 0xff,</div><div class='del'>-   0x4f, 0x44, 0x20, 0x48, 0x55, 0xfb, 0xff, 0x27, 0x11, 0x02, 0x40, 0x40,</div><div class='del'>-   0xe2, 0xfb, 0x15, 0x11, 0x4a, 0x55, 0x4a, 0x7d, 0xf7, 0x0f, 0x00, 0x00,</div><div class='del'>-   0x04, 0x08, 0xf8, 0xdf, 0x52, 0x44, 0x01, 0x52, 0xb5, 0xfa, 0xff, 0x0f,</div><div class='del'>-   0x49, 0x02, 0x00, 0x02, 0xe9, 0xf6, 0x0a, 0x11, 0xa4, 0x88, 0x4a, 0x6d,</div><div class='del'>-   0xff, 0x5f, 0x00, 0x00, 0x10, 0x20, 0xf0, 0x2f, 0x21, 0x44, 0x10, 0x52,</div><div class='del'>-   0xb5, 0xfa, 0xff, 0x0f, 0x44, 0x04, 0x80, 0x08, 0xf8, 0xab, 0x8a, 0x00,</div><div class='del'>-   0x81, 0xa4, 0xd4, 0xd6, 0xfe, 0x2f, 0x00, 0x00, 0x04, 0x40, 0xb5, 0x2d,</div><div class='del'>-   0x21, 0x08, 0x04, 0x90, 0xaa, 0xfa, 0xff, 0x1f, 0x11, 0x01, 0x00, 0x04,</div><div class='del'>-   0xf0, 0x57, 0x0a, 0x22, 0x40, 0x4a, 0xda, 0x5e, 0xfb, 0x1f, 0x40, 0x00,</div><div class='del'>-   0x40, 0x20, 0xba, 0x95, 0x90, 0x00, 0x01, 0xa0, 0xaa, 0xea, 0xff, 0x5f,</div><div class='del'>-   0x02, 0x02, 0x00, 0x01, 0xe8, 0x57, 0x05, 0x00, 0x00, 0x12, 0xd5, 0xfe,</div><div class='del'>-   0xfd, 0x1f, 0x48, 0x00, 0x04, 0x48, 0x7a, 0x95, 0x08, 0x02, 0x10, 0x40,</div><div class='del'>-   0xaa, 0x55, 0xf7, 0x1f, 0x00, 0x09, 0x20, 0x00, 0xf8, 0x57, 0x22, 0x10,</div><div class='del'>-   0x00, 0x28, 0xa9, 0xfa, 0xff, 0x5f, 0x02, 0x00, 0x00, 0x49, 0xdd, 0x29,</div><div class='del'>-   0x01, 0x00, 0x80, 0x80, 0xaa, 0xd7, 0xff, 0x0f, 0x10, 0x00, 0x08, 0x00,</div><div class='del'>-   0xf8, 0x96, 0x08, 0x00, 0x00, 0x20, 0x54, 0xfa, 0xee, 0x3f, 0x81, 0x04,</div><div class='del'>-   0x40, 0x24, 0xfe, 0x55, 0x82, 0x00, 0x00, 0x82, 0xd2, 0xad, 0xff, 0x0f,</div><div class='del'>-   0x08, 0x00, 0x04, 0x80, 0x6c, 0x97, 0x00, 0x00, 0x02, 0x20, 0xa9, 0xf6,</div><div class='del'>-   0xdf, 0x5f, 0x00, 0x02, 0x20, 0x09, 0xfa, 0x49, 0x12, 0x00, 0x20, 0x84,</div><div class='del'>-   0x54, 0xdb, 0xfe, 0x1f, 0x91, 0x00, 0x00, 0x00, 0xf8, 0x2b, 0x00, 0x20,</div><div class='del'>-   0x00, 0x40, 0xa4, 0xf6, 0xbb, 0x1f, 0x04, 0x00, 0x44, 0x92, 0x7e, 0x95,</div><div class='del'>-   0x02, 0x00, 0x00, 0x89, 0xaa, 0xdd, 0xff, 0x1f, 0x20, 0x09, 0x10, 0x00,</div><div class='del'>-   0xf4, 0x57, 0x20, 0x01, 0x08, 0x20, 0xa9, 0x76, 0xff, 0x5f, 0x02, 0x00,</div><div class='del'>-   0x00, 0x21, 0xfc, 0x4a, 0x05, 0x00, 0x01, 0x80, 0x54, 0xdb, 0xff, 0x1e,</div><div class='del'>-   0x08, 0x02, 0x04, 0x08, 0xf9, 0x2b, 0x00, 0x00, 0x40, 0x28, 0xd2, 0xf6,</div><div class='del'>-   0xff, 0xbf, 0x80, 0x00, 0x90, 0x00, 0xbc, 0x92, 0x08, 0x10, 0x00, 0x82,</div><div class='del'>-   0x54, 0xdb, 0xff, 0x1f, 0x20, 0x00, 0x00, 0x44, 0xf9, 0x55, 0x02, 0x01,</div><div class='del'>-   0x00, 0x20, 0xaa, 0xbd, 0xfd, 0x3f, 0x08, 0x04, 0x04, 0x10, 0xf4, 0x2a,</div><div class='del'>-   0x01, 0x00, 0x22, 0x80, 0xd4, 0xf6, 0xff, 0x5f, 0x82, 0x00, 0x40, 0x02,</div><div class='del'>-   0xf8, 0x55, 0x20, 0x00, 0x00, 0x50, 0x6a, 0xdf, 0xfe, 0x3f, 0x00, 0x00,</div><div class='del'>-   0x00, 0x48, 0xe9, 0x4a, 0x05, 0x08, 0x00, 0xa5, 0xd5, 0xf5, 0xff, 0x3f,</div><div class='del'>-   0x10, 0x01, 0x10, 0x01, 0xb0, 0xab, 0x92, 0x02, 0x40, 0xf8, 0xbf, 0xde,</div><div class='del'>-   0xfe, 0x5f, 0x02, 0x04, 0x04, 0x48, 0xfa, 0xd4, 0x6f, 0x20, 0x84, 0xef,</div><div class='del'>-   0xff, 0xfb, 0xff, 0x1f, 0x20, 0x00, 0x00, 0x00, 0xe0, 0xed, 0xbf, 0x0b,</div><div class='del'>-   0xa1, 0x7e, 0xff, 0xbf, 0xfd, 0x5f, 0x04, 0x01, 0x20, 0x49, 0xd2, 0xfb,</div><div class='del'>-   0xfe, 0x55, 0xd4, 0xff, 0xff, 0xf6, 0xff, 0x07, 0x00, 0x04, 0x00, 0x00,</div><div class='del'>-   0xc0, 0xaa, 0xfb, 0x2b, 0xa2, 0xfe, 0xff, 0xdf, 0xee, 0x1f, 0x91, 0x00,</div><div class='del'>-   0x82, 0xa4, 0xa4, 0xf5, 0xff, 0x57, 0xd5, 0xff, 0xbf, 0xfd, 0xff, 0x4d,</div><div class='del'>-   0x00, 0x00, 0x20, 0x00, 0x88, 0x5b, 0xff, 0x2f, 0x69, 0xff, 0xff, 0xdb,</div><div class='del'>-   0xfe, 0x1f, 0x24, 0x02, 0x00, 0x49, 0xa2, 0xd6, 0xff, 0x5f, 0xea, 0xff,</div><div class='del'>-   0x7f, 0x7f, 0x7f, 0x0d, 0x00, 0x00, 0x10, 0x00, 0x40, 0xab, 0xf7, 0xbb,</div><div class='del'>-   0xf0, 0xdf, 0xff, 0xd5, 0xff, 0xbf, 0x82, 0x04, 0x42, 0x24, 0x91, 0xd5,</div><div class='del'>-   0xaa, 0xae, 0xd4, 0xaa, 0x52, 0x7b, 0xff, 0x15, 0x08, 0x00, 0x00, 0x01,</div><div class='del'>-   0x04, 0x55, 0xd5, 0x55, 0x70, 0x5b, 0x75, 0xdd, 0xdf, 0x1f, 0x40, 0x00,</div><div class='del'>-   0x08, 0x48, 0xa0, 0x4a, 0xa9, 0x56, 0xea, 0x56, 0xad, 0x6a, 0x7d, 0x9b,</div><div class='del'>-   0x04, 0x01, 0x00, 0x02, 0x42, 0x2a, 0xd5, 0xaa, 0xa8, 0xaa, 0xaa, 0xfa,</div><div class='del'>-   0xdf, 0x2f, 0x10, 0x04, 0x22, 0x48, 0x08, 0x45, 0x2a, 0x15, 0x68, 0x55,</div><div class='del'>-   0x55, 0xd7, 0x76, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x40, 0x2a, 0x80, 0xa0,</div><div class='del'>-   0xb2, 0x09, 0x48, 0xb9, 0xdf, 0x17, 0x22, 0x01, 0x00, 0x24, 0x45, 0x8a,</div><div class='del'>-   0x24, 0x4a, 0x54, 0x51, 0x91, 0xf6, 0x6e, 0x4b, 0x00, 0x04, 0x90, 0x00,</div><div class='del'>-   0x80, 0x52, 0x00, 0x20, 0x69, 0x05, 0xa4, 0xaa, 0xff, 0x1e, 0x48, 0x00,</div><div class='del'>-   0x02, 0x92, 0x08, 0x05, 0x81, 0x94, 0xd4, 0x92, 0x40, 0xfd, 0xb6, 0x8b,</div><div class='del'>-   0x00, 0x01, 0x40, 0x00, 0x82, 0x54, 0x00, 0x48, 0x68, 0x05, 0x90, 0xa4,</div><div class='del'>-   0xef, 0x06, 0x24, 0x00, 0x08, 0x12, 0x10, 0x05, 0x00, 0x10, 0xb5, 0x01,</div><div class='del'>-   0x42, 0xfb, 0xbf, 0x43, 0x00, 0x09, 0x00, 0x40, 0x81, 0xa8, 0x08, 0x4a,</div><div class='del'>-   0xaa, 0x96, 0x90, 0xac, 0x6d, 0x15, 0x22, 0x00, 0x20, 0x09, 0x04, 0x15,</div><div class='del'>-   0x80, 0x28, 0xdc, 0x01, 0x24, 0xfb, 0xbf, 0x01, 0x80, 0x04, 0x09, 0x00,</div><div class='del'>-   0x40, 0x48, 0x02, 0x45, 0xb2, 0x2e, 0x41, 0x6d, 0xef, 0x05, 0x11, 0x00,</div><div class='del'>-   0x40, 0x52, 0x02, 0x15, 0x29, 0x2a, 0xac, 0x42, 0x54, 0xfb, 0x3b, 0x51,</div><div class='del'>-   0x84, 0x00, 0x08, 0x00, 0x20, 0x54, 0x80, 0x05, 0xb5, 0x3d, 0xa2, 0xb6,</div><div class='del'>-   0xdf, 0x00, 0x20, 0x04, 0x20, 0x49, 0x89, 0xa8, 0x6a, 0x29, 0xac, 0xd6,</div><div class='del'>-   0x54, 0xff, 0x3f, 0x84, 0x00, 0x01, 0x04, 0x10, 0x00, 0x94, 0xa8, 0x56,</div><div class='del'>-   0xda, 0x5f, 0xab, 0xd5, 0x1e, 0x10, 0x48, 0x00, 0x90, 0x82, 0x48, 0xa8,</div><div class='del'>-   0xb2, 0xac, 0xfd, 0x55, 0xd5, 0xfe, 0x9f, 0x80, 0x00, 0x0a, 0x02, 0x08,</div><div class='del'>-   0x02, 0x55, 0x5a, 0x75, 0xff, 0xaf, 0xb6, 0xf7, 0x2d, 0x12, 0x92, 0x00,</div><div class='del'>-   0x10, 0x20, 0x10, 0xa8, 0x54, 0xd5, 0xbf, 0x5d, 0xad, 0xdd, 0x0f, 0x00,</div><div class='del'>-   0x00, 0x04, 0x40, 0x09, 0x84, 0xa8, 0xaa, 0x5a, 0xed, 0xeb, 0x6a, 0xff,</div><div class='del'>-   0x9f, 0xa4, 0x24, 0x01, 0x02, 0xa0, 0x20, 0x50, 0x55, 0xd5, 0xbe, 0xae,</div><div class='del'>-   0xad, 0xfd, 0x16, 0x00, 0x10, 0x04, 0x20, 0x0a, 0x08, 0xb4, 0xaa, 0x95,</div><div class='del'>-   0xaa, 0x7b, 0xb7, 0xdb, 0x5f, 0x92, 0x04, 0x01, 0x84, 0x20, 0x21, 0x51,</div><div class='del'>-   0xd5, 0x2a, 0xa9, 0xee, 0xd5, 0xfe, 0x0d, 0x00, 0x20, 0x04, 0x10, 0x00,</div><div class='del'>-   0x08, 0x50, 0xe9, 0xd7, 0xd4, 0xfb, 0xb5, 0xff, 0x9f, 0x24, 0x09, 0x01,</div><div class='del'>-   0x42, 0x4a, 0xa2, 0x64, 0xd5, 0x55, 0x7b, 0x7f, 0xda, 0x7d, 0x4f, 0x00,</div><div class='del'>-   0x20, 0x04, 0x00, 0x80, 0x00, 0xa0, 0x2a, 0x13, 0x84, 0x6a, 0x55, 0xff,</div><div class='del'>-   0x1d, 0x48, 0x8a, 0x00, 0x94, 0x24, 0x8a, 0xc8, 0xaa, 0x42, 0x20, 0x5d,</div><div class='del'>-   0xf5, 0xff, 0x5f, 0x01, 0x00, 0x02, 0x01, 0x00, 0x20, 0xa2, 0x4a, 0x1a,</div><div class='del'>-   0x82, 0x56, 0xda, 0xbd, 0x3f, 0x92, 0x92, 0x00, 0x90, 0x92, 0x00, 0x40,</div><div class='del'>-   0x95, 0x6a, 0xf4, 0x55, 0x6d, 0xff, 0xd6, 0x00, 0x00, 0x0a, 0x04, 0x20,</div><div class='del'>-   0x14, 0x49, 0x4b, 0xaa, 0xaa, 0x56, 0xf5, 0xff, 0xbf, 0xab, 0xa4, 0x00,</div><div class='del'>-   0x20, 0x89, 0x40, 0x80, 0xaa, 0xaa, 0xaa, 0xaa, 0xde, 0xbf, 0xeb, 0x03,</div><div class='del'>-   0x00, 0x02, 0x04, 0x02, 0x0a, 0x10, 0x2b, 0x2a, 0x55, 0x5b, 0xf5, 0xff,</div><div class='del'>-   0xd7, 0x2f, 0x92, 0x00, 0x10, 0x28, 0x21, 0x01, 0x56, 0x95, 0xa0, 0x56,</div><div class='del'>-   0xdf, 0xef, 0xea, 0x87, 0x40, 0x0a, 0x42, 0x41, 0x00, 0x90, 0xaa, 0x52,</div><div class='del'>-   0xb6, 0xad, 0xfa, 0xff, 0xd5, 0x2f, 0x14, 0x00, 0x00, 0x04, 0x95, 0x04,</div><div class='del'>-   0xaa, 0xac, 0x55, 0x6b, 0xff, 0xb7, 0xea, 0x9f, 0x40, 0x02, 0x28, 0x51,</div><div class='del'>-   0x00, 0x40, 0x58, 0xd5, 0xda, 0xd6, 0x6e, 0x7f, 0xf9, 0x3f, 0x12, 0x04,</div><div class='del'>-   0x02, 0x04, 0x49, 0x25, 0x55, 0xaa, 0x77, 0xab, 0xff, 0x2b, 0xfd, 0x3f,</div><div class='del'>-   0x48, 0x01, 0x20, 0x41, 0x00, 0x00, 0x58, 0xa9, 0xda, 0xea, 0xfd, 0xaf,</div><div class='del'>-   0xfa, 0xff, 0x02, 0x04, 0x08, 0x14, 0x29, 0x49, 0x52, 0x55, 0x55, 0x55,</div><div class='del'>-   0xff, 0x8d, 0xfe, 0x3f, 0xa8, 0x00, 0x02, 0x41, 0x00, 0x02, 0xa0, 0xa2,</div><div class='del'>-   0xaa, 0xea, 0xff, 0x53, 0xfd, 0xff, 0x02, 0x04, 0x50, 0x04, 0x25, 0xa8,</div><div class='del'>-   0x54, 0x49, 0x52, 0xb5, 0xbf, 0x8a, 0xfe, 0xff, 0xa9, 0x08, 0x04, 0x50,</div><div class='del'>-   0x80, 0x02, 0xa1, 0x2a, 0x95, 0xea, 0xff, 0xa1, 0xff, 0xff, 0x03, 0x02,</div><div class='del'>-   0x90, 0x02, 0x09, 0x08, 0x44, 0x49, 0x52, 0xbd, 0x7f, 0xca, 0xff, 0xff,</div><div class='del'>-   0x2b, 0x09, 0x04, 0x48, 0x40, 0x82, 0x90, 0x56, 0xa9, 0xf6, 0xbf, 0xd0,</div><div class='del'>-   0xff, 0xff, 0x47, 0x00, 0x50, 0x02, 0x15, 0x11, 0x40, 0x95, 0xaa, 0xfd,</div><div class='del'>-   0x2f, 0xe9, 0xff, 0xff, 0x8f, 0x0a, 0x84, 0x50, 0x40, 0x84, 0x14, 0xaa,</div><div class='del'>-   0x6a, 0xff, 0x5f, 0xf2, 0xff, 0xff, 0x7f, 0x00, 0x10, 0x02, 0x09, 0x10,</div><div class='del'>-   0x40, 0x7d, 0xf7, 0xff, 0x0b, 0xfc, 0xff, 0xff, 0xaf, 0x02, 0x84, 0x50,</div><div class='del'>-   0x42, 0x85, 0x12, 0xd0, 0xdd, 0xff, 0xa7, 0xf2, 0xff, 0xff, 0xff, 0x04,</div><div class='del'>-   0x00, 0x0a, 0x08, 0x10, 0x48, 0xf8, 0xff, 0xff, 0x0a, 0xfe, 0xff, 0xff,</div><div class='del'>-   0x7f, 0x03, 0xa4, 0x80, 0xa2, 0x8a, 0x02, 0x68, 0xff, 0xff, 0x52, 0xfd,</div><div class='del'>-   0xff, 0xff, 0xff, 0x07, 0x00, 0x2a, 0x08, 0x20, 0x28, 0xdc, 0xff, 0x5f,</div><div class='del'>-   0x05, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x92, 0x40, 0x22, 0x09, 0x02, 0xea,</div><div class='del'>-   0xfb, 0xaf, 0x48, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x12, 0x81, 0xa0,</div><div class='del'>-   0x48, 0x9c, 0x6e, 0x93, 0xa2, 0xff, 0xff, 0xff, 0xff, 0x07, 0xa8, 0x40,</div><div class='del'>-   0x28, 0x0a, 0x02, 0x74, 0xb5, 0x45, 0x81, 0xff, 0xff, 0xff, 0xff, 0x0f,</div><div class='del'>-   0x02, 0x0a, 0x81, 0x20, 0x08, 0xae, 0xaa, 0x90, 0xe8, 0xff, 0xff, 0xff,</div><div class='del'>-   0xff, 0x0f, 0x90, 0x40, 0x28, 0x88, 0x12, 0x58, 0x15, 0x50, 0xd0, 0xff,</div><div class='del'>-   0xff, 0xff, 0xff, 0x0f, 0x44, 0x0a, 0x41, 0x21, 0x08, 0xae, 0x04, 0x14,</div><div class='del'>-   0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x40, 0x14, 0x88, 0x04, 0xba,</div><div class='del'>-   0x02, 0x28, 0xe8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x42, 0x15, 0x41, 0x21,</div><div class='del'>-   0x05, 0xad, 0x00, 0x05, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x40,</div><div class='del'>-   0x24, 0x8a, 0x0e, 0x36, 0x00, 0x0a, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x0f,</div><div class='del'>-   0x42, 0x25, 0x90, 0xd0, 0x8b, 0xc2, 0x41, 0x05, 0xfc, 0xff, 0xff, 0xff,</div><div class='del'>-   0xff, 0x0f, 0x10, 0x08, 0x05, 0xe8, 0x8e, 0x58, 0x80, 0x02, 0xfa, 0xff,</div><div class='del'>-   0xff, 0xff, 0xff, 0x0f, 0x4a, 0x20, 0xa8, 0xba, 0x0b, 0x2b, 0x51, 0x01,</div><div class='del'>-   0xfe, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x8a, 0x02, 0xe8, 0xaf, 0x84,</div><div class='del'>-   0x90, 0x04, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x52, 0x21, 0x54, 0xbf,</div><div class='del'>-   0x1f, 0x15, 0xa5, 0x02, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x08,</div><div class='del'>-   0x01, 0xfa, 0xb6, 0xa4, 0x52, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,</div><div class='del'>-   0x4a, 0xa2, 0x54, 0xef, 0x5f, 0x4b, 0xa4, 0x80, 0xff, 0xff, 0xff, 0xff,</div><div class='del'>-   0xff, 0x0f, 0x80, 0x10, 0x82, 0xfe, 0xbf, 0x92, 0x52, 0x42, 0xff, 0xff,</div><div class='del'>-   0xff, 0xff, 0xff, 0x0f, 0x12, 0x42, 0xa8, 0xbf, 0x1f, 0x24, 0x80, 0xa0,</div><div class='del'>-   0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x84, 0x28, 0x8a, 0xf7, 0x37, 0x80,</div><div class='del'>-   0x52, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x10, 0x82, 0xe0, 0xff,</div><div class='del'>-   0x1f, 0x00, 0x20, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x84, 0x28,</div><div class='del'>-   0xca, 0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,</div><div class='del'>-   0x10, 0x42, 0xf0, 0xfd, 0x1b, 0x00, 0x50, 0xf0, 0xff, 0xff, 0xff, 0xff,</div><div class='del'>-   0xff, 0x0f, 0xa4, 0x10, 0xc5, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff,</div><div class='del'>-   0xff, 0xff, 0xff, 0x0f, 0x00, 0x22, 0xf8, 0xff, 0x0e, 0x00, 0x00, 0xf0,</div><div class='del'>-   0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xaa, 0x88, 0xe2, 0xff, 0x0f, 0x10,</div><div class='del'>-   0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x25, 0xfa, 0xff,</div><div class='del'>-   0x0f, 0x01, 0x11, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xfb,</div><div class='del'>-   0xfb, 0xff, 0x7f, 0x5d, 0xd5, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f};</div><div class='head'>diff --git a/ext/tk/sample/images/flagdown.xbm b/ext/tk/sample/images/flagdown.xbm<br/>deleted file mode 100644<br/>index 55abc51825..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/flagdown.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/flagdown.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#define flagdown_width 48</div><div class='del'>-#define flagdown_height 48</div><div class='del'>-static char flagdown_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe1, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x70, 0x80, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00,</div><div class='del'>-   0x00, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x04,</div><div class='del'>-   0x00, 0x00, 0x03, 0x00, 0x06, 0x06, 0x00, 0x80, 0x01, 0x00, 0x06, 0x07,</div><div class='del'>-   0x00, 0xc0, 0x1f, 0x00, 0x87, 0x07, 0x00, 0xe0, 0x7f, 0x80, 0xc7, 0x07,</div><div class='del'>-   0x00, 0x70, 0xe0, 0xc0, 0xe5, 0x07, 0x00, 0x38, 0x80, 0xe1, 0x74, 0x07,</div><div class='del'>-   0x00, 0x18, 0x80, 0x71, 0x3c, 0x07, 0x00, 0x0c, 0x00, 0x3b, 0x1e, 0x03,</div><div class='del'>-   0x00, 0x0c, 0x00, 0x1f, 0x0f, 0x00, 0x00, 0x86, 0x1f, 0x8e, 0x07, 0x00,</div><div class='del'>-   0x00, 0x06, 0x06, 0xc6, 0x05, 0x00, 0x00, 0x06, 0x00, 0xc6, 0x05, 0x00,</div><div class='del'>-   0x00, 0x06, 0x00, 0xc6, 0x04, 0x00, 0x00, 0x06, 0x00, 0x06, 0x04, 0x00,</div><div class='del'>-   0x7f, 0x06, 0x00, 0x06, 0xe4, 0xff, 0x00, 0x06, 0x00, 0x06, 0x04, 0x00,</div><div class='del'>-   0x00, 0x06, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x00, 0x06, 0x06, 0x00,</div><div class='del'>-   0x00, 0x06, 0x00, 0x06, 0x03, 0x00, 0x00, 0x06, 0x00, 0x86, 0x01, 0x00,</div><div class='del'>-   0x00, 0x06, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x06, 0x00, 0x66, 0x00, 0x00,</div><div class='del'>-   0x00, 0x06, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x3e, 0x00, 0x00,</div><div class='del'>-   0x00, 0xfe, 0xff, 0x2f, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x27, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x88, 0x20, 0x00, 0x00, 0x00, 0x00, 0x88, 0x20, 0x00, 0x00,</div><div class='del'>-   0xf7, 0xbf, 0x8e, 0xfc, 0xdf, 0xf8, 0x9d, 0xeb, 0x9b, 0x76, 0xd2, 0x7a,</div><div class='del'>-   0x46, 0x30, 0xe2, 0x0f, 0xe1, 0x47, 0x55, 0x84, 0x48, 0x11, 0x84, 0x19};</div><div class='head'>diff --git a/ext/tk/sample/images/flagup.xbm b/ext/tk/sample/images/flagup.xbm<br/>deleted file mode 100644<br/>index 6eb0d846a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/flagup.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/flagup.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#define flagup_width 48</div><div class='del'>-#define flagup_height 48</div><div class='del'>-static char flagup_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xef, 0x6a, 0x00,</div><div class='del'>-   0x00, 0x00, 0xc0, 0x7b, 0x75, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x6a, 0x00,</div><div class='del'>-   0x00, 0x00, 0x30, 0x60, 0x75, 0x00, 0x00, 0x00, 0x18, 0xe0, 0x7f, 0x00,</div><div class='del'>-   0x00, 0x00, 0x0c, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x06, 0xe0, 0x04, 0x00,</div><div class='del'>-   0x00, 0x00, 0x03, 0xe0, 0x04, 0x00, 0x00, 0x80, 0x01, 0xe0, 0x06, 0x00,</div><div class='del'>-   0x00, 0xc0, 0x1f, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x7f, 0xe0, 0x07, 0x00,</div><div class='del'>-   0x00, 0x70, 0xe0, 0xe0, 0x05, 0x00, 0x00, 0x38, 0x80, 0xe1, 0x04, 0x00,</div><div class='del'>-   0x00, 0x18, 0x80, 0xf1, 0x04, 0x00, 0x00, 0x0c, 0x00, 0xfb, 0x04, 0x00,</div><div class='del'>-   0x00, 0x0c, 0x00, 0xff, 0x04, 0x00, 0x00, 0x86, 0x1f, 0xee, 0x04, 0x00,</div><div class='del'>-   0x00, 0x06, 0x06, 0xe6, 0x04, 0x00, 0x00, 0x06, 0x00, 0xe6, 0x04, 0x00,</div><div class='del'>-   0x00, 0x06, 0x00, 0xe6, 0x04, 0x00, 0x00, 0x06, 0x00, 0x66, 0x04, 0x00,</div><div class='del'>-   0x7f, 0x56, 0x52, 0x06, 0xe4, 0xff, 0x00, 0x76, 0x55, 0x06, 0x04, 0x00,</div><div class='del'>-   0x00, 0x56, 0x57, 0x06, 0x04, 0x00, 0x00, 0x56, 0x55, 0x06, 0x06, 0x00,</div><div class='del'>-   0x00, 0x56, 0xd5, 0x06, 0x03, 0x00, 0x00, 0x06, 0x00, 0x86, 0x01, 0x00,</div><div class='del'>-   0x54, 0x06, 0x00, 0xc6, 0x54, 0x55, 0xaa, 0x06, 0x00, 0x66, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x06, 0x00, 0x36, 0x55, 0x55, 0xaa, 0x06, 0x00, 0xbe, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0xfe, 0xff, 0x6f, 0x55, 0x55, 0xaa, 0xfc, 0xff, 0xa7, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x01, 0x88, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x8d, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x8d, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x8d, 0x50, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa8, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x95, 0x54, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};</div><div class='head'>diff --git a/ext/tk/sample/images/gray25.xbm b/ext/tk/sample/images/gray25.xbm<br/>deleted file mode 100644<br/>index b234b3cb0b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/gray25.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/gray25.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-#define grey_width 16</div><div class='del'>-#define grey_height 16</div><div class='del'>-static char grey_bits[] = {</div><div class='del'>-   0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44,</div><div class='del'>-   0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44,</div><div class='del'>-   0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44};</div><div class='head'>diff --git a/ext/tk/sample/images/grey.25 b/ext/tk/sample/images/grey.25<br/>deleted file mode 100644<br/>index b234b3cb0b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/grey.25?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/grey.25</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-#define grey_width 16</div><div class='del'>-#define grey_height 16</div><div class='del'>-static char grey_bits[] = {</div><div class='del'>-   0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44,</div><div class='del'>-   0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44,</div><div class='del'>-   0x11, 0x11, 0x44, 0x44, 0x11, 0x11, 0x44, 0x44};</div><div class='head'>diff --git a/ext/tk/sample/images/grey.5 b/ext/tk/sample/images/grey.5<br/>deleted file mode 100644<br/>index 37688893f0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/grey.5?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/grey.5</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-#define grey_width 16</div><div class='del'>-#define grey_height 16</div><div class='del'>-static char grey_bits[] = {</div><div class='del'>-   0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,</div><div class='del'>-   0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,</div><div class='del'>-   0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa};</div><div class='head'>diff --git a/ext/tk/sample/images/letters.xbm b/ext/tk/sample/images/letters.xbm<br/>deleted file mode 100644<br/>index 0f12568d1a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/letters.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/letters.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#define letters_width 48</div><div class='del'>-#define letters_height 48</div><div class='del'>-static char letters_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20,</div><div class='del'>-   0x00, 0xfa, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a,</div><div class='del'>-   0x00, 0x3a, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2e,</div><div class='del'>-   0xe0, 0xff, 0xff, 0xff, 0xff, 0x21, 0x20, 0x00, 0x00, 0x00, 0x00, 0x21,</div><div class='del'>-   0xa0, 0x03, 0x00, 0x00, 0x70, 0x21, 0x20, 0x00, 0x00, 0x00, 0x50, 0x21,</div><div class='del'>-   0xa0, 0x1f, 0x00, 0x00, 0x50, 0x21, 0x20, 0x00, 0x00, 0x00, 0x70, 0x21,</div><div class='del'>-   0xfe, 0xff, 0xff, 0xff, 0x0f, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x21,</div><div class='del'>-   0xfa, 0x01, 0x00, 0x80, 0x0b, 0x21, 0x02, 0x00, 0x00, 0x80, 0x0a, 0x21,</div><div class='del'>-   0xba, 0x01, 0x00, 0x80, 0x0a, 0x21, 0x02, 0x00, 0x00, 0x80, 0x0b, 0x21,</div><div class='del'>-   0x3a, 0x00, 0x00, 0x00, 0x08, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x21,</div><div class='del'>-   0x02, 0xc0, 0xfb, 0x03, 0x08, 0x21, 0x02, 0x00, 0x00, 0x00, 0x08, 0x3f,</div><div class='del'>-   0x02, 0xc0, 0xbd, 0x0f, 0x08, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01,</div><div class='del'>-   0x02, 0xc0, 0x7f, 0x7b, 0x08, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01,</div><div class='del'>-   0x02, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00,</div><div class='del'>-   0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00,</div><div class='del'>-   0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00,</div><div class='del'>-   0xfe, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};</div><div class='head'>diff --git a/ext/tk/sample/images/noletter.xbm b/ext/tk/sample/images/noletter.xbm<br/>deleted file mode 100644<br/>index 5774124efe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/noletter.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/noletter.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#define noletters_width 48</div><div class='del'>-#define noletters_height 48</div><div class='del'>-static char noletters_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00,</div><div class='del'>-   0x00, 0xf0, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x7f, 0x00,</div><div class='del'>-   0x00, 0x3e, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x01,</div><div class='del'>-   0x80, 0x07, 0x00, 0x00, 0xc0, 0x03, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x07,</div><div class='del'>-   0xe0, 0x01, 0x00, 0x00, 0xf0, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x78, 0x0e,</div><div class='del'>-   0xf0, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x1c,</div><div class='del'>-   0x38, 0x00, 0x00, 0x00, 0x0f, 0x38, 0x38, 0x00, 0x00, 0x80, 0x07, 0x38,</div><div class='del'>-   0x3c, 0xfc, 0xff, 0xff, 0x7f, 0x78, 0x1c, 0x04, 0x00, 0xe0, 0x41, 0x70,</div><div class='del'>-   0x1c, 0x04, 0x00, 0xf0, 0x40, 0x70, 0x1c, 0x74, 0x00, 0x78, 0x4e, 0x70,</div><div class='del'>-   0x0e, 0x04, 0x00, 0x3c, 0x4a, 0xe0, 0x0e, 0x74, 0x03, 0x1e, 0x4a, 0xe0,</div><div class='del'>-   0x0e, 0x04, 0x00, 0x0f, 0x4e, 0xe0, 0x0e, 0x04, 0x80, 0x07, 0x40, 0xe0,</div><div class='del'>-   0x0e, 0x04, 0xf8, 0x0f, 0x40, 0xe0, 0x0e, 0x04, 0xe0, 0x01, 0x40, 0xe0,</div><div class='del'>-   0x0e, 0x04, 0xf8, 0x00, 0x40, 0xe0, 0x0e, 0x04, 0x78, 0x00, 0x40, 0xe0,</div><div class='del'>-   0x0e, 0x04, 0xfc, 0xf3, 0x40, 0xe0, 0x1c, 0x04, 0x1e, 0x00, 0x40, 0x70,</div><div class='del'>-   0x1c, 0x04, 0x0f, 0x00, 0x40, 0x70, 0x1c, 0x84, 0x07, 0x00, 0x40, 0x70,</div><div class='del'>-   0x3c, 0xfc, 0xff, 0xff, 0x7f, 0x78, 0x38, 0xe0, 0x01, 0x00, 0x00, 0x38,</div><div class='del'>-   0x38, 0xf0, 0x00, 0x00, 0x00, 0x38, 0x70, 0x78, 0x00, 0x00, 0x00, 0x1c,</div><div class='del'>-   0xf0, 0x3c, 0x00, 0x00, 0x00, 0x1e, 0xe0, 0x1e, 0x00, 0x00, 0x00, 0x0e,</div><div class='del'>-   0xe0, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x07, 0x00, 0x00, 0x80, 0x07,</div><div class='del'>-   0x80, 0x07, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x1f, 0x00, 0x00, 0xf0, 0x01,</div><div class='del'>-   0x00, 0x3e, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x7f, 0x00,</div><div class='del'>-   0x00, 0xf0, 0x0f, 0xe0, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00,</div><div class='del'>-   0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00};</div><div class='head'>diff --git a/ext/tk/sample/images/pattern.xbm b/ext/tk/sample/images/pattern.xbm<br/>deleted file mode 100644<br/>index df31baf789..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/pattern.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/pattern.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-#define foo_width 16</div><div class='del'>-#define foo_height 16</div><div class='del'>-static char foo_bits[] = {</div><div class='del'>-   0x60, 0x06, 0x90, 0x09, 0x90, 0x09, 0xb0, 0x0d, 0x4e, 0x72, 0x49, 0x92,</div><div class='del'>-   0x71, 0x8e, 0x8e, 0x71, 0x8e, 0x71, 0x71, 0x8e, 0x49, 0x92, 0x4e, 0x72,</div><div class='del'>-   0xb0, 0x0d, 0x90, 0x09, 0x90, 0x09, 0x60, 0x06};</div><div class='head'>diff --git a/ext/tk/sample/images/tcllogo.gif b/ext/tk/sample/images/tcllogo.gif<br/>deleted file mode 100644<br/>index 4603d4ff41..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/tcllogo.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/tcllogo.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/images/teapot.ppm b/ext/tk/sample/images/teapot.ppm<br/>deleted file mode 100644<br/>index b8ab85f3a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/images/teapot.ppm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/images/teapot.ppm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,31 +0,0 @@</div><div class='del'>-P6</div><div class='del'>-256 256</div><div class='del'>-255</div><div class='del'>-\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À[7 eOLjQLmSMoTMnSMlRMhPL_9 \À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀnSMtVMzYN~[N~[N\N\O€\O€]O€]O€]O€]O€\O€\O}[NyYNtVM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-wXN}[N€]O„^O†_O†`O‡`Oˆ`Oˆ`OˆaO‰aO‰aO‰aO‰aO‰aO‰aOˆaOˆ`O†_Oƒ^O\N\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀaMLyYN…_O‰aP‹bPcPŽcPŽdPŽdPdPdPdPdPdPdPdPeP‘eP’eP’eP‘ePdPcP…_OpUM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀwXN…_OdP“fP•gQ–hQ˜hQ˜iQ™iQ™iQšiQšiQšjQ›jQ›jQœjQœjQœjQœjQœjQ›jQœjQ™iQ“fP‡`O\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJiQL‹bP—hQkQ¡mR¤nR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¦pR¨pS©qSªqS«rS¬rS«rS©qS¤oRœjQ€]O\KK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀfOLrUMcPŸlR©qS¯tS²uTµwT·xT¸xT¹yTºyT»zT»zU¼zU¼zU¼zU»zUºyT¸xT¶wT¯tS¡mR‰aOhPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\Àa0	cNLqUM€\O”fQ¦pS²wVºzV¿|VÂ}VÄVÆVÇ€VÉ‚WÌ…[Õeæ w÷³‹êª…Äˆg§qT“fQ{ZNYIK9\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀO1{G#‘JkRMqUMtVN–iS¨v\·€d¹bµzZ±vU°uT®sSªqS¤nRœjQ’eP„^OrUMHh&gt;!T4\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀG-V5wE"~I#†M%U+¥e7²l:°g2®b*­a(­`(©^(¥])¡^-›]1ŠS,qC$`9 R3G-\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À@)J/i&gt;!pA"tD"wF$yH&amp;xH&amp;tE$wE#yG%}M+ƒT4S5mE*Z7!K/B*;'\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À‰aO¦oR½{UÇ€VÏ…X&lt;(F-a: e&lt;!h&gt;!j@#k@$h&gt;"d&lt;!c=$hD-fF2[&lt;)K0@);'5$Ë‚VÇ€V¿|U_LKYIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À…_O·xTÉ‚Wó«€ûµ‹Ö’k¼|X×&gt;µf-¨^(¡Z'šW&amp;–T&amp;œN&gt;)F-J/b; g&gt;#nD(jB&amp;c&lt;!b=%jH2_A/I0!&lt;(8&amp;5$”J¥Y’S%8&amp;;'?)E,&lt;:HA=HE?IJAISFJYIKXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À£nRÁ}UÜ˜qÊŠe±vU²e,™V&amp;¥V†C€@|&gt;y&lt;u:r9o7l6</div><div class='del'>-j5</div><div class='del'>-h4</div><div class='del'>-g3</div><div class='del'>-5$D,K/b; h&gt;"wM1tK.e="a&lt;#cA,U8&amp;E-&lt;(9&amp;.!a0	b1	c1				</div><div class='del'>-</div><div class='del'>-+3#@)46G&lt;:HMCIXHK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀU*´vT¿~X¸{YÃk+›W&amp;‰N$|&gt;u:p8k5</div><div class='del'>-f3</div><div class='del'>-a0	_/	].	[-	I¡\*ª_(‘LkRMmSMmSMnSMnSMD,R3W5mA"|O0|P1j?"c&lt;!a=%Y7"N1F,;'NCJNCJNDJODJODJODJh&gt;!a: X/K%</div><div class='del'>-g3</div><div class='del'>-a0	Z-	\/T*Q(ŠHµm8kRMmSMnTMoTMpTMpUM15G15G05G04G04GpUMpTM5^9 d&lt;!yF#O+€N,rC#qB"pB#k?"a: Z7 6ODJPDJPEJQEJQEJREJREJREJRFJSFJSFJSFJSFJe&lt;!X/</div><div class='del'>-^/	V+Q(L&amp;I$r9 TlRMnSM46G47G47G46G46G46G46G46G36G36G25G25G15G04G/4F.3F</div><div class='del'>-</div><div class='del'>-X&amp;pUMuWMwXNxXN&lt;:H&lt;:H&lt;:H&lt;:H&lt;;H&lt;;H&lt;;H&lt;;H=;H=;H=;H=;H&gt;;H&gt;;H?&lt;H@&lt;HA=HC&gt;HG@ILBIREJ[JKcNLjQL§pR±uTºzUÃ~VÈWË‚XÖŽcäsÒŽe¼{V²vT¨pSžkR•gQŒbP†_O‚^O]O€\O€\O€\O€\O€]O]O]O]O]O]O]O]O]O]O]O€\O€\O~\N}[N|ZNxXN•T%H$</div><div class='del'>-›W&amp;rVMvWNyYNzYN|ZN}[N}[N&gt;&lt;H?&lt;H?&lt;H?&lt;H?&lt;H?&lt;H@&lt;H@&lt;H@&lt;HA=HA=HB=HC&gt;HE?IG@IIAIKBIODJSFJWHK—hQŸlR§pR°b(¾i*Én+Ù|7Û|6Ïr,Íq+Êp-Ãl+»g)±b(®sS§pS lRšiQ•gQePcPŠaPˆaO‡`O‡`O†_O†_O…_O…_O…_O…_O…_O…_O…_O„_O„^O„^Oƒ^Oƒ^O‚]O]O€\O~[N{ZN•T%</div><div class='del'>-</div><div class='del'>-	</div><div class='del'>-@%&lt;-$G?@…pfdNLuWM\NdNL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀTFJvWN‰aP./01„E}[N]O…_Oˆ`O‰aP‹bPŒbPcPcPŽcPdPdPdPeP‘eP’eP’eP“fP“fQ”fQ•gQ•gQ–gQ–hQ—hQ˜hQ™iQšiQ›jQœjQkQkRžlRŸlRžY&amp;¤\'¨^'µ^½bÀcÃeÇi ÄgÀc½b¼a¹`µ^´]¯X¢[' Z'žY&amp;¢mR¡mR¡mR lRŸlRŸlRžkRkQœkQœjQ›jQšjQšiQ™iQ™iQ˜iQ˜hQ—hQ—hQ—hQ–gQ–gQ•gQ•gQ•gQ”fQ”fQ“fQ“fP’eP‘ePdPcP‰aP—O</div><div class='del'>- B\À\À\À\À\À\À\À\À\À\À%7!!C*F#P){dYœze»p€\OgPL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ`LKvWNŠaPm6</div><div class='del'>-</div><div class='del'>-$5 ¬`(¶e)£nRœjQƒ^OJAI\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀXIK^KKdNLhPLuWM‚]OŒbP”fQePm6</div><div class='del'>-†`OŽcP“fQ—hQ˜hQ™iQšiQšjQ›jQ›jQ›jQœjQœjQœjQœkQkQkQkRžkRžkRžkRžlRŸlRŸlRŸlR lR lR lR¡mR¡mR¡mR¡mRºg)³c(²c(±b(­V¿cÂeÅi!Åi!Àd¼bº`¹`·_·_¶^¢Q§]'ª_(­`(¹f)£nR£nR£nR£nR£nR£nR£nR¢nR¢nR¢nR¢nR¢nR¢nR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢mR¢nR¢mR¢mR£nR¢mR¢mR¡mR mRkR—hQˆGa0	ŠbP mRœjQ“fQ‰aP}[NrUMmSM…L$\À\À\À\À\À\À\À\À B B#C, 8&amp;H.Z7 §pR›jQ{ZN\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀQEJ[JK`LKdNLhQLqUM{ZN…_OŽcP–gQ—hQ</div><div class='del'>-‹bP‘eP–hQšiQ›jQœjQkQkQkRžkRžkRžlRžlRŸlRŸlRŸlRŸlRŸlR lR lR lR mR¡mR¡mR¡mR¡mR¡mR¢mR¢mR¢mR¢nR£nRÀj*ºg)·e)¶d)Âd°XÅgÅhÂe¿c½b½b¾bªU­`(®a(¯a(³c(¾i*¤oR¤oR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤nR¤oR¤oR¥oR¥oR¥oR¥oR¥oR¥oR¦oR¦oR¥oR¥oR¤nR¡mR›jQŽQ%Z-	œjQ£nRŸlR—hQŽdP…_OuWMpTMnSMkRLa: \À\À\À\À\À\À\À B B&amp;D2@*S6#G@IPDJ˜hQmSM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ]KKbMLeOLiQLlRMvWN\OˆaO‘eP—hQœjQ•gQ</div><div class='del'>-!C+E'0F.4F7%8%U/lG.SFJZIK]KKZIKB=H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀREJZJK`LKdNLgPLjQLlRMnSMpTMqUMtWMxXN{ZN~[N]O„^O†`O‰aO‹bPdP•gQ™iQœkQ lR¤nR§pSªrS­sS¯tT²uT´vT¶wT·xT¹yT¹yTºyTºyT¹yT¶xT´vT¬rS¢nR—hQ¿|U¿|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ|UÀ}UÀ}UÁ}UÁ}UÁ}UÁ}UÂ}UÂ~UÃ~UÃ~VÃ~VÄVÅ€WÆX®a(ŸlRªrS´vT¸yT¼zU¾|UÁ~VÃXÆ‚[É†_Î‹dÓ‘jÔ“mÔ“nÐ‘lÊŒhÄ†d½_¶{[°vWªsU¦pS¢nRžkRšiQ˜hQ•gQ“fQ‘ePdPŒbP‰aO†_Oƒ^O€\O|ZNxXNsVMpTMnTMmSMjQL€C B)D&amp;/F-3F47G6%&gt;"Y7 kA$YIK]KK^KKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀVGJ\KKbMLeOLhPLkRLmSMnTMpTMrUMuWNyYN|ZN\N‚]O„_O‡`OŠaPŒbPŽcPeP“fP—hQ›jQžlR¢nR¥oS©qT¬sT¯uU²vU´wV¶xV¸yV¹yUºzU»zU¼{U½{U¾{U¾|U¿|U¿|U¿|U¿|U¾{U½{U¼{U¼zU»zTºyT¹yT¸xTµwT³vT´vT´vT´vT´wT´wTµwT·xT¹yTºzT¼zU½{U¾{U¿|UÀ|UÂ}UÄVÅ€WÇ‚YÉ„\Íˆ_ÑŒdÙ”láuç£|ì©‚ï¬…î­‡ëª…æ¦ÞŸ{Õ—sËŽlÂ†d¹^³yZ­uW¨qU¤oSŸlRžkRœjQšiQ˜hQ–gQ”fQ‘ePdPcPŠaP‡`O„^O]O}[NyYNuWMpTMoTMmSMkRLgPL&amp;D#.E,3F46G;'&lt;(D"iB(VGJ]KK`LK[JKB&gt;H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRMmSMoTMqUMsVMvXNzYN}[N€\O‚^O…_Oˆ`OŠaPŒcPdP‘eP“fQ•gQ—hQ™iQkR mS¤oT¨rU¬tW°wY´zZ¸}\»]¾€^À^Á‚^Â‚^Â\Á€ZÁYÁXÁ~WÁ~WÂ~VÂ~VÂ~VÃ~VÃ~UÃ~UÄ~UÄ~UÄUÄUÅVÅVÅVÅVÆVÆ€VÆ€VÇ€WÇWÈ‚XÉƒZË…[Í‡^ÐŠaÓdØ’iÜ—nâtè£zî©ó¯‡ø´û¸‘üº“û¹“÷¶ñ±Œé©…à¡~Ö˜vËmÃ‡f»€`´z[®vX©rU¥pT£oS¢nS lRžkRœkRšjQ˜iQ–hQ”fQ’ePdPcP‹bPˆ`O…_O‚]O~[NzYNvWNpTMoTMnSMkRMhQLo7,2F36G99HC+@ ]8 nA"\JK`ML_LKSFJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMpTMqUMtVMwXNzZN}[N€]Oƒ^O†_OˆaO‹bPcPdP‘eP“fQ•gQ—hQ™iQ›jRžlR mS£oU§rW¬vZ²{]¹€a¿…fÅŠjËnÐ“qÓ•sÕ–sÕ–rÕ–qÕ”oÓ’mÑjÏgÍŠcËˆaÉ†^È„\Ç‚[ÆYÅ€XÅ€WÅWÅWÅVÅVÅWÅ€WÆ€WÇXÈ‚YÉƒ[Ê…\Í‡_ÏŠaÒeÕ‘hÙ•mÝ™qávä¡zç¤}ê§€ë©ƒëª„é¨ƒå¥€ß |Ù›wÓ•rÌmÆ‰h¿„c¸~^²yZ®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRœkR›jQ™iQ—hQ•gQ“fPePŽcP‹bPˆaO…_O‚^O\N{ZNwXNsVMoTMnSMlRMiQL~I#26G99G?&lt;HA*E$	i@$ZIKaMLbML[JK;:H\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀWHJ]KKbMLeOLhPLjRLlSMnTMpTMrUMuWMxXN{ZN~\N]O„^O†`O‰aO‹bPŽcPdP’eP”fQ–gQ˜hQšiQœkRžlS mT£oU¦rWªuZ¯y]´~aºƒfÂŠlË’sÔšzÜ¡€ã§†è«‰ë®‹í¯Œí®‹ë¬ˆè¨„ã£~ßžyÚ™tÖ•oÒjÎŒfËˆbÈ…_Æƒ\ÅZÄ€YÃXÂWÂ~WÂ~WÂ~WÃXÃ€XÄ€YÅZÆƒ\Ç…^É†`ËˆbÌŠdÍ‹fÎgÎŽiÎŽjÎŽjÍŽjËŒiÇ‰gÃ†d¿ƒaº^¸}]¶|\´{[²yZ°xY®vX¬tWªsV¨qU¦pT¤oS¢nS mRžlRkR›jQ™iQ—hQ•gQ“fP‘ePŽdPŒbP‰aO†_Oƒ^O€\O|ZNxXNtVMpTMnSMmSMjQLgPL99G?&lt;HG-E&amp;b;!YIK`MLdOM`LKNCJ\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀŸlRºyTÄ~UÊ‚XÊƒYÄXº{W­tUšW'¢[(—hQ lRcP€\OhQL\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀNCJYIK^LKcNLfOLiQLkRLmSMoTMqUMrVMvWNyYN|ZN\N‚]O„_O‡`O‰aPŒbPŽcPdP’fP”gQ–hQ˜iQšjRœkRžlS¡nT¤pU§sW«vZ°z]µb»„gÂŠlÉ‘sÐ˜yØžÞ¤…ã©Šè­ì±ï³‘ï³‘î±Žë­Šç©…â£€ÝžzØ˜tÒ“nÎiÉ‰dÆ…`Ã‚]Á€[¿~Y¾}X½|W½|V¼{V¼{V¼{V¼{V¼{V¼|W¼|W½}X½}Y½~Z½~Z¼~Z»}[º}[º}[º~\º~\º~]º~]¹~]¸~]·}]¶|\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS mRŸlRkR›jQšiQ˜hQ–gQ“fQ‘ePdPŒcPŠaP‡`O„^O]O}[NyYNuWNpTMnTMmSMkRLhPL|H$D&gt;IQ2P+XHK_LLfQOcNLXIK\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À©qSºyTÃ~VÎˆ`ï«ƒÞœv¾€]ªqS–LŽG|&gt;g3</div><div class='del'>-S)?*%.—hQ—hQ‘eP‡`OuWM\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\ÀSFJ[JK`LKdNLgPLjQLlRMnSMoTMqUMsVMwXNzYN}[N€\O‚^O…_O‡`OŠaPŒbPŽdP‘eP“fP•gQ—hQ˜iQšjRœkRŸlS¡nT¤pV§sX«vZ°z^¶b¼…gÃ‹mÊ’sÑ˜zØŸ€Þ¤…ã©Šè­ê¯ë°ê¯Žè¬‹å¨‡à¤‚Ûž|Ö™wÑ“qÌŽlÇ‰gÃ…bÀ‚_½\»}Zº{X¹zW¸yV·yU·xU·xU·xT·xT·xU·xU·xU·yV·yV·yW¸zW¸{X¹{Y¹|Zº}[º}[º}\º~\¹~]¹~]¸}]·|\µ{\´z[²yZ°wY®vX¬tWªsV¨rU¦pT¤oS¢nS¡mRŸlRkRœjQšiQ˜hQ–gQ”fQ’ePdPcPŠbP‡`O…_O‚]O~[NzZNvWNrUMoTMmSMlRMiQLeOLJAIJ(h&gt;!]KKfQOgQN_LKD&gt;I\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À\À™iQ°tS¸yT¼{UÂYÎŒeï­ˆô´Õ—u¶|\ Z'™LˆD|&gt;</div><div class='del'>-</div><div class='del'>-&amp;3#.$-% .% .&amp; /&amp;!,#,#@70A71XNHXNHWNHWNHZRLYQLYQLXQLWQLWPLUOLSNLQMKOLJMJJ0//.-.,,-&amp;(+"(!'			</div><div class='del'>-%' %$#" ! !$						</div><div class='head'>diff --git a/ext/tk/sample/irbtk.rb b/ext/tk/sample/irbtk.rb<br/>deleted file mode 100644<br/>index 53ef10d0d1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/irbtk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/irbtk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-#</div><div class='del'>-#   irbtk.rb - irb with Ruby/Tk</div><div class='del'>-#</div><div class='del'>-#   If you want to use 'multi-tk.rb', give option '--multi-tk'.</div><div class='del'>-#   And if you want to use 'remote-tk.rb', give option '--remote-tk'.</div><div class='del'>-#   If you want both, you don't need to give both options, because </div><div class='del'>-#   'remote-tk.rb' includes 'multi-tk.rb'. </div><div class='del'>-#   ( There is no trouble even if you give both options. )</div><div class='del'>-#</div><div class='del'>-require 'remote-tk' if ARGV.delete('--remote-tk')</div><div class='del'>-require 'multi-tk'  if ARGV.delete('--multi-tk')</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-module Tk</div><div class='del'>-  MAINLOOP = Thread.new{ mainloop }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require "irb"</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  IRB.start(__FILE__)</div><div class='del'>-else</div><div class='del'>-  # check -e option</div><div class='del'>-  if /^-e$/ =~ $0</div><div class='del'>-    IRB.start(__FILE__)</div><div class='del'>-  else</div><div class='del'>-    IRB.setup(__FILE__)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/irbtkw.rbw b/ext/tk/sample/irbtkw.rbw<br/>deleted file mode 100644<br/>index 3fb6dde626..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/irbtkw.rbw?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/irbtkw.rbw</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,146 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#  irbtkw.rb : IRB console with 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'>-release = '2008/03/08'</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-begin</div><div class='del'>-  require 'tktextio'</div><div class='del'>-rescue LoadError</div><div class='del'>-  require File.join(File.dirname(File.expand_path(__FILE__)), 'tktextio.rb')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'irb'</div><div class='del'>-</div><div class='del'>-if TkCore::WITH_ENCODING</div><div class='del'>-else</div><div class='del'>-  # $KCODE setup</div><div class='del'>-  case Tk.encoding</div><div class='del'>-  when 'shiftjis', 'cp932'</div><div class='del'>-    $KCODE='SJIS'</div><div class='del'>-  when 'euc-jp'</div><div class='del'>-    $KCODE='EUC'</div><div class='del'>-  when 'utf-8', 'unicode'</div><div class='del'>-    $KCODE='UTF8'</div><div class='del'>-  else</div><div class='del'>-    # unknown</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# console setup</div><div class='del'>-top = TkToplevel.new(:title=&gt;'IRB console')</div><div class='del'>-top.protocol(:WM_DELETE_WINDOW){ Tk.exit }</div><div class='del'>-</div><div class='del'>-case (Tk.windowingsystem)</div><div class='del'>-when 'win32'</div><div class='del'>-  fnt = ['MS Gothic', '-12']</div><div class='del'>-else</div><div class='del'>-  fnt = ['courier', '-12']</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-console = TkTextIO.new(top, :mode=&gt;:console, </div><div class='del'>-                       :width=&gt;80).pack(:side=&gt;:left, </div><div class='del'>-                                        :expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-console.yscrollbar(TkScrollbar.new(top, :width=&gt;10).pack(:before=&gt;console, </div><div class='del'>-                                                         :side=&gt;:right, </div><div class='del'>-                                                         :expand=&gt;false, </div><div class='del'>-                                                         :fill=&gt;:y))</div><div class='del'>-irb_thread = nil</div><div class='del'>-ev_loop = Thread.new{</div><div class='del'>-  Tk.mainloop</div><div class='del'>-  irb_thread.kill if irb_thread</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# window position control</div><div class='del'>-root = Tk.root</div><div class='del'>-</div><div class='del'>-r_x = root.winfo_rootx</div><div class='del'>-r_y = root.winfo_rooty</div><div class='del'>-r_w = root.winfo_width</div><div class='del'>-</div><div class='del'>-t_x = top.winfo_rootx</div><div class='del'>-t_y = top.winfo_rooty</div><div class='del'>-t_w = top.winfo_width</div><div class='del'>-</div><div class='del'>-delta = 10</div><div class='del'>-</div><div class='del'>-ratio = 0.8</div><div class='del'>-s_w = (ratio * root.winfo_screenwidth).to_i</div><div class='del'>-</div><div class='del'>-if r_x &lt; t_x</div><div class='del'>-  r_x, t_x = t_x, r_x</div><div class='del'>-end</div><div class='del'>-if t_x + t_w + r_w + delta &lt; s_w</div><div class='del'>-  r_x = t_x + t_w + delta</div><div class='del'>-elsif t_w + r_w + delta &lt; s_w</div><div class='del'>-  r_x = s_w - r_w</div><div class='del'>-  t_x = r_x - t_w</div><div class='del'>-else</div><div class='del'>-  r_x = s_w - r_w</div><div class='del'>-  t_x = 0</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-root.geometry("+#{r_x}+#{r_y}")</div><div class='del'>-top.geometry("+#{t_x}+#{t_y}")</div><div class='del'>-</div><div class='del'>-root.raise</div><div class='del'>-console.focus</div><div class='del'>-</div><div class='del'>-# I/O setup</div><div class='del'>-$stdin  = console</div><div class='del'>-$stdout = console</div><div class='del'>-$stderr = console</div><div class='del'>-</div><div class='del'>-# dummy for rubyw.exe on Windows</div><div class='del'>-def STDIN.tty?</div><div class='del'>-  true</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# IRB setup</div><div class='del'>-IRB.init_config(nil)</div><div class='del'>-IRB.conf[:USE_READLINE] = false</div><div class='del'>-IRB.init_error</div><div class='del'>-irb = IRB::Irb.new</div><div class='del'>-IRB.conf[:MAIN_CONTEXT] = irb.context</div><div class='del'>-</div><div class='del'>-class IRB::StdioInputMethod</div><div class='del'>-  def gets</div><div class='del'>-    prompt = "\n" &lt;&lt; @prompt</div><div class='del'>-    $stdin.instance_eval{</div><div class='del'>-      flush</div><div class='del'>-      @prompt = prompt</div><div class='del'>-      _set_console_line</div><div class='del'>-      @prompt = nil</div><div class='del'>-      _see_pos</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @line[@line_no += 1] = $stdin.gets</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# IRB start</div><div class='del'>-$stdout.print("*** IRB console on Ruby/Tk (#{release})  ")</div><div class='del'>-irb_thread = Thread.new{</div><div class='del'>-  catch(:IRB_EXIT){</div><div class='del'>-    loop {</div><div class='del'>-      begin</div><div class='del'>-        irb.eval_input</div><div class='del'>-      rescue Exception</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'>-console.bind('Control-c'){</div><div class='del'>-  console.insert('end', "^C\n")</div><div class='del'>-  irb_thread.raise RubyLex::TerminateLineInput</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-irb_thread.join</div><div class='del'>-</div><div class='del'>-# exit</div><div class='del'>-ev_thread.kill</div><div class='del'>-Tk.exit</div><div class='head'>diff --git a/ext/tk/sample/iso2022-kr.txt b/ext/tk/sample/iso2022-kr.txt<br/>deleted file mode 100644<br/>index 2e3fe6ea2a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/iso2022-kr.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/iso2022-kr.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-Sample text:</div><div class='del'>-$)C  Hangul (GQ1[)	&gt;H3gGO&lt;&lt;?d, &gt;H3gGO=J4O1n</div><div class='head'>diff --git a/ext/tk/sample/menubar1.rb b/ext/tk/sample/menubar1.rb<br/>deleted file mode 100644<br/>index 9fa1201d41..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/menubar1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/menubar1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# menubar sample 1 : use frame and menubuttons</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-radio_var = TkVariable.new('y')</div><div class='del'>-</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, '', {:foreground=&gt;'black'}],</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'>-                ], </div><div class='del'>-      0, '', </div><div class='del'>-      {:font=&gt;'Courier 16 italic', </div><div class='del'>-       :menu_config=&gt;{:font=&gt;'Times -18 bold', :foreground=&gt;'black'}}],</div><div class='del'>-    '---',</div><div class='del'>-    ['Quit', proc{exit}, 0]],</div><div class='del'>-</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'>-  [['Help', 0, {:menu_name=&gt;'help'}],</div><div class='del'>-    ['About This', proc{puts('Ruby/Tk menubar sample 1')}, 6]]</div><div class='del'>-]</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'>-TkText.new(:wrap=&gt;'word').pack.insert('1.0', 'Please read the sample source, and check how to override default configure options of menu entries on a menu_spec. Maybe, on windows, this menubar does not work properly about keyboard shortcuts. Then, please use "menu" option of root/toplevel widget (see sample/menubar2.rb).')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/menubar2.rb b/ext/tk/sample/menubar2.rb<br/>deleted file mode 100644<br/>index 4507d8b2fe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/menubar2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/menubar2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# menubar sample 2 : use 'menu' option of root/toplevel widget</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-radio_var = TkVariable.new('y')</div><div class='del'>-</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, '', {:foreground=&gt;'black'}],</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'>-                ], </div><div class='del'>-      0, '', </div><div class='del'>-      {:font=&gt;'Courier 16 italic', </div><div class='del'>-       :menu_config=&gt;{:font=&gt;'Times -18 bold', :foreground=&gt;'black'}}],</div><div class='del'>-    '---',</div><div class='del'>-    ['Quit', proc{exit}, 0]],</div><div class='del'>-</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'>-  [['Help', 0, {:menu_name=&gt;'help'}],</div><div class='del'>-    ['About This', proc{puts('Ruby/Tk menubar sample 2')}, 6]]</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-mbar = Tk.root.add_menubar(menu_spec, </div><div class='del'>-                           # followings are default configure options</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'>-# This (default configure options) is NOT same the following.</div><div class='del'>-#</div><div class='del'>-#  mbar = Tk.root.add_menubar(menu_spec)</div><div class='del'>-#  mbar.configure('foreground'=&gt;'grey40', 'activeforeground'=&gt;'red',</div><div class='del'>-#                 'font'=&gt;'Helvetia 12 bold')</div><div class='del'>-</div><div class='del'>-TkText.new(:wrap=&gt;'word').pack.insert('1.0', 'Please read the sample source, and check how to override default configure options of menu entries on a menu_spec.')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/README b/ext/tk/sample/msgs_rb/README<br/>deleted file mode 100644<br/>index 2e3ff2a9c4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-Message catalogs in this directory depend on Tcl/Tk's message catalogs. </div><div class='del'>-Texts of each locale are copied from Tcl/Tk8.5a1 widget demos.</div><div class='del'>-Please refer '../msgs_tk/README'. </div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/cs.msg b/ext/tk/sample/msgs_rb/cs.msg<br/>deleted file mode 100644<br/>index 199f2a73bd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/cs.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/cs.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    cs "Application Error", "Chyba programu"</div><div class='del'>-    cs "Blue", "Modr\341"</div><div class='del'>-    cs "Color", "Barva"</div><div class='del'>-    cs "Delete", "Smazat"</div><div class='del'>-    cs "Error", "Chyba"</div><div class='del'>-    cs "Exit", "Konec"</div><div class='del'>-    cs "Green", "Zelen\341"</div><div class='del'>-    cs "Red", "\\u010cerven\341"</div><div class='del'>-    cs "blue", "modr\341"</div><div class='del'>-    cs "green", "zelen\341"</div><div class='del'>-    cs "red", "\\u010derven\341"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    cs "&amp;Abort", "&amp;P\\u0159eru\\u0161it"</div><div class='del'>-    cs "About...", "O programu..."</div><div class='del'>-    cs "All Files", "V\\u0161echny soubory"</div><div class='del'>-    cs "Application Error", "Chyba programu"</div><div class='del'>-    cs "&amp;Blue", "&amp;Modr\341"</div><div class='del'>-    cs "&amp;Cancel", "&amp;Zru\\u0161it"</div><div class='del'>-    cs "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Nemohu zm\\u011bnit atku\341ln\355 adres\341\\u0159 na \"%1\$s\".\nP\\u0159\355stup odm\355tnut."</div><div class='del'>-    cs "Choose Directory", "V\375b\\u011br adres\341\\u0159e"</div><div class='del'>-    cs "Clear", "Smazat"</div><div class='del'>-    cs "Color", "Barva"</div><div class='del'>-    cs "Console", "Konzole"</div><div class='del'>-    cs "Copy", "Kop\355rovat"</div><div class='del'>-    cs "Cut", "Vy\\u0159\355znout"</div><div class='del'>-    cs "Delete", "Smazat"</div><div class='del'>-    cs "Details &gt;&gt;", "Detaily &gt;&gt;"</div><div class='del'>-    cs "Directory \"%1\$s\" does not exist.", "Adres\341\\u0159 \"%1\$s\" neexistuje."</div><div class='del'>-    cs "&amp;Directory:", "&amp;Adres\341\\u0159:"</div><div class='del'>-    cs "Error: %1\$s", "Chyba: %1\$s"</div><div class='del'>-    cs "Exit", "Konec"</div><div class='del'>-    cs "File \"%1\$s\" already exists.\n\n", "Soubor \"%1\$s\" ji\\u017e existuje.\n\n"</div><div class='del'>-    cs "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Soubor \"%1\$s\" ji\\u017e existuje.\nChcete jej p\\u0159epsat?"</div><div class='del'>-    cs "File \"%1\$s\" does not exist.", "Soubor \"%1\$s\" neexistuje."</div><div class='del'>-    cs "File &amp;name:", "&amp;Jm\351no souboru:"</div><div class='del'>-    cs "File &amp;names:", "&amp;Jm\351na soubor\\u016f:"</div><div class='del'>-    cs "Files of &amp;type:", "&amp;Typy soubor\\u016f:"</div><div class='del'>-    cs "Fi&amp;les:", "Sou&amp;bory:"</div><div class='del'>-    cs "&amp;Filter", "&amp;Filtr"</div><div class='del'>-    cs "Fil&amp;ter:", "Fil&amp;tr:"</div><div class='del'>-    cs "&amp;Green", "Ze&amp;len\341"</div><div class='del'>-    cs "Hi"</div><div class='del'>-    cs "Hide Console", "Skr\375t konsolu"</div><div class='del'>-    cs "&amp;Ignore", "&amp;Ignorovat"</div><div class='del'>-    cs "Invalid file name \"%1\$s\".", "\\u0160patn\351 jm\351no souboru \"%1\$s\"."</div><div class='del'>-    cs "Log Files", "Log soubory"</div><div class='del'>-    cs "&amp;No", "&amp;Ne"</div><div class='del'>-    cs "&amp;OK"</div><div class='del'>-    cs "Ok"</div><div class='del'>-    cs "Open", "Otev\\u0159\355t"</div><div class='del'>-    cs "&amp;Open", "&amp;Otev\\u0159\355t"</div><div class='del'>-    cs "Open Multiple Files", "Otev\\u0159\355t v\355ce soubor\\u016f"</div><div class='del'>-    cs "Paste", "Vlo\\u017eit"</div><div class='del'>-    cs "Quit", "Skon\\u010dit"</div><div class='del'>-    cs "&amp;Red", " \\u010ce&amp;rven\341"</div><div class='del'>-    cs "Replace existing file?", "Nahradit st\341vaj\355c\355 soubor?"</div><div class='del'>-    cs "&amp;Retry", "Z&amp;novu"</div><div class='del'>-    cs "&amp;Save", "&amp;Ulo\\u017eit"</div><div class='del'>-    cs "Save As", "Ulo\\u017eit jako"</div><div class='del'>-    cs "Save To Log", "Ulo\\u017eit do logu"</div><div class='del'>-    cs "Select Log File", "Vybrat log soubor"</div><div class='del'>-    cs "Select a file to source", "Vybrat soubor k nahr\341n\355"</div><div class='del'>-    cs "&amp;Selection:", "&amp;V\375b\\u011br:"</div><div class='del'>-    cs "Skip Messages", "P\\u0159esko\\u010dit zpr\341vy"</div><div class='del'>-    cs "Source...", "Nahr\341t..."</div><div class='del'>-    cs "Tcl Scripts", "Tcl skripty"</div><div class='del'>-    cs "Tcl for Windows", "Tcl pro Windows"</div><div class='del'>-    cs "Text Files", "Textov\351 soubory"</div><div class='del'>-    cs "&amp;Yes", "&amp;Ano"</div><div class='del'>-    cs "abort", "p\\u0159eru\\u0161it"</div><div class='del'>-    cs "blue", "modr\341"</div><div class='del'>-    cs "cancel", "zru\\u0161it"</div><div class='del'>-    cs "extension", "p\\u0159\355pona"</div><div class='del'>-    cs "extensions", "p\\u0159\355pony"</div><div class='del'>-    cs "green", "zelen\341"</div><div class='del'>-    cs "ignore", "ignorovat"</div><div class='del'>-    cs "ok"</div><div class='del'>-    cs "red", "\\u010derven\341"</div><div class='del'>-    cs "retry", "znovu"</div><div class='del'>-    cs "yes", "ano"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/de.msg b/ext/tk/sample/msgs_rb/de.msg<br/>deleted file mode 100644<br/>index 283874df42..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/de.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/de.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,88 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    de "Application Error", "Applikationsfehler"</div><div class='del'>-    de "Blue", "Blau"</div><div class='del'>-    de "Color", "Farbe"</div><div class='del'>-    de "Delete", "L\\u00f6schen"</div><div class='del'>-    de "Error", "Fehler"</div><div class='del'>-    de "Exit", "Ende"</div><div class='del'>-    de "Green", "Gr\\u00fcn"</div><div class='del'>-    de "Red", "Rot"</div><div class='del'>-    de "blue", "blau"</div><div class='del'>-    de "green", "gr\\u00fcn"</div><div class='del'>-    de "red", "rot"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    de "&amp;Abort", "&amp;Abbruch"</div><div class='del'>-    de "&amp;About...", "&amp;\\u00dcber..."</div><div class='del'>-    de "All Files", "Alle Dateien"</div><div class='del'>-    de "Application Error", "Applikationsfehler"</div><div class='del'>-    de "&amp;Blue", "&amp;Blau"</div><div class='del'>-    de "&amp;Cancel", "&amp;Abbruch"</div><div class='del'>-    de "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden."</div><div class='del'>-    de "Choose Directory", "W\\u00e4hle Verzeichnis"</div><div class='del'>-    de "&amp;Clear", "&amp;R\\u00fccksetzen"</div><div class='del'>-    de "&amp;Clear Console", "&amp;Konsole l\\u00f6schen"</div><div class='del'>-    de "Color", "Farbe"</div><div class='del'>-    de "Console", "Konsole"</div><div class='del'>-    de "&amp;Copy", "&amp;Kopieren"</div><div class='del'>-    de "Cu&amp;t", "Aus&amp;schneiden"</div><div class='del'>-    de "&amp;Delete", "&amp;L\\u00f6schen"</div><div class='del'>-    de "Details &gt;&gt;"</div><div class='del'>-    de "Directory \"%1\$s\" does not exist.", "Das Verzeichnis \"%1\$s\" existiert nicht."</div><div class='del'>-    de "&amp;Directory:", "&amp;Verzeichnis:"</div><div class='del'>-    de "&amp;Edit", "&amp;Bearbieten"</div><div class='del'>-    de "Error: %1\$s", "Fehler: %1\$s"</div><div class='del'>-    de "E&amp;xit", "&amp;Ende"</div><div class='del'>-    de "&amp;File", "&amp;Datei"</div><div class='del'>-    de "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei \\u00fcberschreiben ?"</div><div class='del'>-    de "File \"%1\$s\" already exists.\n\n", "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n"</div><div class='del'>-    de "File \"%1\$s\" does not exist.", "Die Datei \"%1\$s\" existiert nicht."</div><div class='del'>-    de "File &amp;name:", "Datei&amp;name:"</div><div class='del'>-    de "File &amp;names:", "Datei&amp;namen:"</div><div class='del'>-    de "Files of &amp;type:", "Dateien des &amp;Typs:"</div><div class='del'>-    de "Fi&amp;les:", "Dat&amp;eien:"</div><div class='del'>-    de "&amp;Filter"</div><div class='del'>-    de "Fil&amp;ter:"</div><div class='del'>-    de "&amp;Green", "&amp;Gr\\u00fcn"</div><div class='del'>-    de "&amp;Help", "&amp;Hilfe"</div><div class='del'>-    de "Hi", "Hallo"</div><div class='del'>-    de "&amp;Hide Console", "&amp;Konsole unsichtbar machen"</div><div class='del'>-    de "&amp;Ignore", "&amp;Ignorieren"</div><div class='del'>-    de "Invalid file name \"%1\$s\".", "Ung\\u00fcltiger Dateiname \"%1\$s\"."</div><div class='del'>-    de "Log Files", "Protokolldatei"</div><div class='del'>-    de "&amp;No", "&amp;Nein"</div><div class='del'>-    de "OK"</div><div class='del'>-    de "Ok"</div><div class='del'>-    de "Open", "\\u00d6ffnen"</div><div class='del'>-    de "&amp;Open", "\\u00d6&amp;ffnen"</div><div class='del'>-    de "Open Multiple Files"</div><div class='del'>-    de "P&amp;aste", "E&amp;inf\\u00fcgen"</div><div class='del'>-    de "&amp;Quit", "&amp;Beenden"</div><div class='del'>-    de "&amp;Red", "&amp;Rot"</div><div class='del'>-    de "Replace existing file?", "Existierende Datei ersetzen?"</div><div class='del'>-    de "&amp;Retry", "&amp;Wiederholen"</div><div class='del'>-    de "&amp;Save", "&amp;Speichern"</div><div class='del'>-    de "Save As", "Speichern unter"</div><div class='del'>-    de "Save To Log", "In Protokoll speichern"</div><div class='del'>-    de "Select Log File", "Protokolldatei ausw\\u00e4hlen"</div><div class='del'>-    de "Select a file to source", "Auszuf\\u00fchrende Datei ausw\\u00e4hlen"</div><div class='del'>-    de "&amp;Selection:", "Auswah&amp;l:"</div><div class='del'>-    de "Skip Messages", "Weitere Nachrichten \\u00fcberspringen"</div><div class='del'>-    de "&amp;Source...", "&amp;Ausf\\u00fchren..."</div><div class='del'>-    de "Tcl Scripts", "Tcl-Skripte"</div><div class='del'>-    de "Tcl for Windows", "Tcl f\\u00fcr Windows"</div><div class='del'>-    de "Text Files", "Textdateien"</div><div class='del'>-    de "&amp;Yes", "&amp;Ja"</div><div class='del'>-    de "abort", "abbrechen"</div><div class='del'>-    de "blue", "blau"</div><div class='del'>-    de "cancel", "abbrechen"</div><div class='del'>-    de "extension", "Erweiterung"</div><div class='del'>-    de "extensions", "Erweiterungen"</div><div class='del'>-    de "green", "gr\\u00fcn"</div><div class='del'>-    de "ignore", "ignorieren"</div><div class='del'>-    de "ok"</div><div class='del'>-    de "red", "rot"</div><div class='del'>-    de "retry", "wiederholen"</div><div class='del'>-    de "yes", "ja"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/el.msg b/ext/tk/sample/msgs_rb/el.msg<br/>deleted file mode 100644<br/>index f314ae03eb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/el.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/el.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,98 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    el 'Application Error',  '\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2'</div><div class='del'>-    el 'Blue',     '\u039c\u03c0\u03bb\u03b5'</div><div class='del'>-    el 'Color',    '\u03a7\u03c1\u03ce\u03bc\u03b1'</div><div class='del'>-    el 'Delete',   '\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae'</div><div class='del'>-    el 'Error',    '\u039b\u03ac\u03b8\u03bf\u03c2'</div><div class='del'>-    el 'Exit',     '\u0388\u03be\u03bf\u03b4\u03bf\u03c2'</div><div class='del'>-    el 'Green',    '\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf'</div><div class='del'>-    el 'Red',      '\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf'</div><div class='del'>-    el 'blue',     '\u03bc\u03c0\u03bb\u03b5'</div><div class='del'>-    el 'green',    '\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf'</div><div class='del'>-    el 'red',      '\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    el '&amp;Abort',             '\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2'</div><div class='del'>-    el 'About...',           '\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac...'</div><div class='del'>-    el 'All Files',          '\u038c\u03bb\u03b1 \u03c4\u03b1 \u0391\u03c1\u03c7\u03b5\u03af\u03b1'</div><div class='del'>-    el 'Application Error',  '\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2'</div><div class='del'>-    el '&amp;Blue',              '\u039c\u03c0\u03bb\u03b5'</div><div class='del'>-    el '&amp;Cancel',            '\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7'</div><div class='del'>-    el 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.', \</div><div class='del'>-          '\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c3\u03b5 "%1\$s".' \</div><div class='del'>-          "\n" \</div><div class='del'>-          '\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9.'</div><div class='del'>-    el 'Choose Directory',   '\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u039a\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5'</div><div class='del'>-    el 'Clear',              '\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2'</div><div class='del'>-    el 'Color',              '\u03a7\u03c1\u03ce\u03bc\u03b1'</div><div class='del'>-    el 'Console',            '\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1'</div><div class='del'>-    el 'Copy',               '\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae'</div><div class='del'>-    el 'Cut',                '\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae'</div><div class='del'>-    el 'Delete',             '\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae'</div><div class='del'>-    el 'Details &gt;&gt;',         '\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 &gt;&gt;'</div><div class='del'>-    el 'Directory "%1\$s", does not exist.', \</div><div class='del'>-          '\u039f \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \'%1\$s\' \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.'</div><div class='del'>-    el '&amp;Directory:',        '&amp;\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:'</div><div class='del'>-    el 'Error: %1\$s',       '\u039b\u03ac\u03b8\u03bf\u03c2: %1\$s'</div><div class='del'>-    el 'Exit',               '\u0388\u03be\u03bf\u03b4\u03bf\u03c2'</div><div class='del'>-    el 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?', \</div><div class='del'>-          '\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf "%1\$s" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.' \</div><div class='del'>-          "\n" \</div><div class='del'>-          '\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03ba\u03b1\u03bb\u03c5\u03c6\u03b8\u03b5\u03af;'</div><div class='del'>-    el 'File "%1\$s" already exists.' "\n\n",  \</div><div class='del'>-          '\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf "%1\$s" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.' "\n\n"</div><div class='del'>-    el 'File "%1\$s" does not exist.', \</div><div class='del'>-          '\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf "%1\$s" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.'</div><div class='del'>-    el 'File &amp;name:',        '\u038c&amp;\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:'</div><div class='del'>-    el 'File &amp;names:',       '\u038c&amp;\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:'</div><div class='del'>-    el 'Files of &amp;type:',    '\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 &amp;\u03c4\u03cd\u03c0\u03bf\u03c5:'</div><div class='del'>-    el 'Fi&amp;les:',            '\u0391\u03c1\u03c7\u03b5\u03af\u03b1:'</div><div class='del'>-    el '&amp;Filter',            '\u03a6\u03af\u03bb\u03c4\u03c1\u03bf'</div><div class='del'>-    el 'Fil&amp;ter:',           '\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:'</div><div class='del'>-    el '&amp;Green',             '\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf'</div><div class='del'>-    el 'Hi',                 '\u0393\u03b5\u03b9\u03b1'</div><div class='del'>-    el 'Hide Console',       '\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03ba\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1\u03c2'</div><div class='del'>-    el '&amp;Ignore',            '\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7'</div><div class='del'>-    el 'Invalid file name "%1\$s".', \</div><div class='del'>-          '\u0386\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 "%1\$s".'</div><div class='del'>-    el 'Log Files',          '\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2'</div><div class='del'>-    el '&amp;No',                '\u038c\u03c7\u03b9'</div><div class='del'>-    el '&amp;OK',                '\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9'</div><div class='del'>-    el '&amp;Ok',                '\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9'</div><div class='del'>-    el 'Open',               '\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1'</div><div class='del'>-    el '&amp;Open',              '\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1'</div><div class='del'>-    el 'Open Multiple Files', \</div><div class='del'>-          '\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd'</div><div class='del'>-    el 'Paste',              '\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7'</div><div class='del'>-    el 'Quit',               '\u0388\u03be\u03bf\u03b4\u03bf\u03c2'</div><div class='del'>-    el '&amp;Red',               '\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf'</div><div class='del'>-    el 'Replace existing file?', \</div><div class='del'>-          '\u0395\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5;'</div><div class='del'>-    el '&amp;Retry',             '\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac'</div><div class='del'>-    el '&amp;Save',              '\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7'</div><div class='del'>-    el 'Save As',            '\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03b1\u03bd'</div><div class='del'>-    el 'Save To Log',        '\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2'</div><div class='del'>-    el 'Select Log File',    '\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2'</div><div class='del'>-    el 'Select a file to source', \</div><div class='del'>-          '\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7'</div><div class='del'>-    el '&amp;Selection:',        '\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:'</div><div class='del'>-    el 'Skip Messages',      '\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03bc\u03c5\u03bd\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd'</div><div class='del'>-    el 'Source...',          '\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7...'</div><div class='del'>-    el 'Tcl Scripts',        'Tcl Scripts'</div><div class='del'>-    el 'Tcl for Windows',    'Tcl \u03b3\u03b9\u03b1 Windows'</div><div class='del'>-    el 'Text Files',         '\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5'</div><div class='del'>-    el '&amp;Yes',               '\u039d\u03b1\u03b9'</div><div class='del'>-    el 'abort',              '\u03c4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2'</div><div class='del'>-    el 'blue',               '\u03bc\u03c0\u03bb\u03b5'</div><div class='del'>-    el 'cancel',             '\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7'</div><div class='del'>-    el 'extension',          '\u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7'</div><div class='del'>-    el 'extensions',         '\u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2'</div><div class='del'>-    el 'green',              '\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf'</div><div class='del'>-    el 'ignore',             '\u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7'</div><div class='del'>-    el 'ok',                 '\u03b5\u03bd\u03c4\u03ac\u03be\u03b5\u03b9'</div><div class='del'>-    el 'red',                '\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf'</div><div class='del'>-    el 'retry',              '\u03c0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac'</div><div class='del'>-    el 'yes',                '\u03bd\u03b1\u03b9'</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/en.msg b/ext/tk/sample/msgs_rb/en.msg<br/>deleted file mode 100644<br/>index 9b70239511..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/en.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/en.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,83 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    en "Application Error"</div><div class='del'>-    en "Blue"</div><div class='del'>-    en "Color"</div><div class='del'>-    en "Delete"</div><div class='del'>-    en "Error"</div><div class='del'>-    en "Green"</div><div class='del'>-    en "Red"</div><div class='del'>-    en "blue"</div><div class='del'>-    en "green"</div><div class='del'>-    en "red"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    en "&amp;Abort"</div><div class='del'>-    en "About..."</div><div class='del'>-    en "All Files"</div><div class='del'>-    en "Application Error"</div><div class='del'>-    en "&amp;Blue"</div><div class='del'>-    en "&amp;Cancel"</div><div class='del'>-    en "Cannot change to the directory \"%1\$s\".\nPermission denied."</div><div class='del'>-    en "Choose Directory"</div><div class='del'>-    en "Clear"</div><div class='del'>-    en "Color"</div><div class='del'>-    en "Console"</div><div class='del'>-    en "Copy"</div><div class='del'>-    en "Cut"</div><div class='del'>-    en "Delete"</div><div class='del'>-    en "Details &gt;&gt;"</div><div class='del'>-    en "Directory \"%1\$s\" does not exist."</div><div class='del'>-    en "&amp;Directory:"</div><div class='del'>-    en "Error: %1\$s"</div><div class='del'>-    en "Exit"</div><div class='del'>-    en "File \"%1\$s\" already exists.\nDo you want to overwrite it?"</div><div class='del'>-    en "File \"%1\$s\" already exists.\n\n"</div><div class='del'>-    en "File \"%1\$s\" does not exist."</div><div class='del'>-    en "File &amp;name:"</div><div class='del'>-    en "File &amp;names:"</div><div class='del'>-    en "Files of &amp;type:"</div><div class='del'>-    en "Fi&amp;les:"</div><div class='del'>-    en "&amp;Filter"</div><div class='del'>-    en "Fil&amp;ter:"</div><div class='del'>-    en "&amp;Green"</div><div class='del'>-    en "Hi"</div><div class='del'>-    en "Hide Console"</div><div class='del'>-    en "&amp;Ignore"</div><div class='del'>-    en "Invalid file name \"%1\$s\"."</div><div class='del'>-    en "Log Files"</div><div class='del'>-    en "&amp;No"</div><div class='del'>-    en "&amp;OK"</div><div class='del'>-    en "Ok"</div><div class='del'>-    en "Open"</div><div class='del'>-    en "&amp;Open"</div><div class='del'>-    en "Open Multiple Files"</div><div class='del'>-    en "Paste"</div><div class='del'>-    en "Quit"</div><div class='del'>-    en "&amp;Red"</div><div class='del'>-    en "Replace existing file?"</div><div class='del'>-    en "&amp;Retry"</div><div class='del'>-    en "&amp;Save"</div><div class='del'>-    en "Save As"</div><div class='del'>-    en "Save To Log"</div><div class='del'>-    en "Select Log File"</div><div class='del'>-    en "Select a file to source"</div><div class='del'>-    en "&amp;Selection:"</div><div class='del'>-    en "Skip Messages"</div><div class='del'>-    en "Source..."</div><div class='del'>-    en "Tcl Scripts"</div><div class='del'>-    en "Tcl for Windows"</div><div class='del'>-    en "Text Files"</div><div class='del'>-    en "&amp;Yes"</div><div class='del'>-    en "abort"</div><div class='del'>-    en "blue"</div><div class='del'>-    en "cancel"</div><div class='del'>-    en "extension"</div><div class='del'>-    en "extensions"</div><div class='del'>-    en "green"</div><div class='del'>-    en "ignore"</div><div class='del'>-    en "ok"</div><div class='del'>-    en "red"</div><div class='del'>-    en "retry"</div><div class='del'>-    en "yes"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/en_gb.msg b/ext/tk/sample/msgs_rb/en_gb.msg<br/>deleted file mode 100644<br/>index 97c58959b1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/en_gb.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/en_gb.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    en_gb 'Color', 'Colour'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    en_gb 'Color', 'Colour'</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/eo.msg b/ext/tk/sample/msgs_rb/eo.msg<br/>deleted file mode 100644<br/>index 1630df5e83..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/eo.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/eo.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    eo 'Application Error', 'Aplikoerraro'</div><div class='del'>-    eo 'Blue', 'Blua'</div><div class='del'>-    eo 'Color', 'Farbo'</div><div class='del'>-    eo 'Delete', 'Forprenu'</div><div class='del'>-    eo 'Error', 'Eraro'</div><div class='del'>-    eo 'Exit', 'Eliru'</div><div class='del'>-    eo 'Green', 'Verda'</div><div class='del'>-    eo 'Red', 'Rosa'</div><div class='del'>-    eo 'blue', 'blua'</div><div class='del'>-    eo 'green', 'verda'</div><div class='del'>-    eo 'red', 'ru\u011da'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    eo '&amp;Abort', '&amp;\u0108esigo'</div><div class='del'>-    eo '&amp;About...', 'Pri...'</div><div class='del'>-    eo 'All Files', '\u0108ioj dosieroj'</div><div class='del'>-    eo 'Application Error', 'Aplikoerraro'</div><div class='del'>-    eo '&amp;Blue', '&amp;Blua'</div><div class='del'>-    eo '&amp;Cancel', '&amp;Rezignu'</div><div class='del'>-    eo 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.', 'Neeble \u0109angi al dosierulon "%1\$s".' "\n" 'Vi ne rajtas tion.'</div><div class='del'>-    eo 'Choose Directory', 'Elektu Dosierujo'</div><div class='del'>-    eo '&amp;Clear', '&amp;Klaru'</div><div class='del'>-    eo '&amp;Clear Console', '&amp;Klaru konzolon'</div><div class='del'>-    eo 'Color', 'Farbo'</div><div class='del'>-    eo 'Console', 'Konzolo'</div><div class='del'>-    eo '&amp;Copy', '&amp;Kopiu'</div><div class='del'>-    eo 'Cu&amp;t', '&amp;Enpo\u015digu'</div><div class='del'>-    eo '&amp;Delete', '&amp;Forprenu'</div><div class='del'>-    eo 'Details &gt;&gt;', 'Detaloj &gt;&gt;'</div><div class='del'>-    eo 'Directory "%1\$s" does not exist.', 'La dosierujo "%1\$s" ne ekzistas.'</div><div class='del'>-    eo '&amp;Directory:', '&amp;Dosierujo:'</div><div class='del'>-    eo '&amp;Edit', '&amp;Redaktu'</div><div class='del'>-    eo 'Error: %1\$s', 'Eraro: %1\$s'</div><div class='del'>-    eo 'E&amp;xit', '&amp;Eliru'</div><div class='del'>-    eo '&amp;File', '&amp;Dosiero'</div><div class='del'>-    eo 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?', 'La dosiero "%1\$s" jam ekzistas.' "\n" '\u0108u vi volas anstata\u00fbigi la dosieron?'</div><div class='del'>-    eo 'File "%1\$s" already exists.' "\n\n", 'La dosiero "%1\$s" jam egzistas.' "\n\n"</div><div class='del'>-    eo 'File "%1\$s" does not exist.', 'La dosierp "%1\$s" ne estas.'</div><div class='del'>-    eo 'File &amp;name:', 'Dosiero&amp;nomo:'</div><div class='del'>-    eo 'File &amp;names:', 'Dosiero&amp;nomoj:'</div><div class='del'>-    eo 'Files of &amp;type:', 'Dosieroj de &amp;Typo:'</div><div class='del'>-    eo 'Fi&amp;les:', 'Do&amp;sieroj:'</div><div class='del'>-    eo '&amp;Filter', '&amp;Filtrilo'</div><div class='del'>-    eo 'Fil&amp;ter:', '&amp;Filtrilo:'</div><div class='del'>-    eo '&amp;Green', '&amp;Verda'</div><div class='del'>-    eo '&amp;Help', '&amp;Helpu'</div><div class='del'>-    eo 'Hi', 'Saluton'</div><div class='del'>-    eo '&amp;Hide Console', '&amp;Ka\u015du konzolon'</div><div class='del'>-    eo '&amp;Ignore', '&amp;Ignoru'</div><div class='del'>-    eo 'Invalid file name "%1\$s".', 'Malvalida dosieronomo "%1\$s".'</div><div class='del'>-    eo 'Log Files', 'Protokolo'</div><div class='del'>-    eo '&amp;No', '&amp;Ne'</div><div class='del'>-    eo 'OK'</div><div class='del'>-    eo 'Ok'</div><div class='del'>-    eo 'Open', 'Malfermu'</div><div class='del'>-    eo '&amp;Open', '&amp;Malfermu'</div><div class='del'>-    eo 'Open Multiple Files', 'Melfermu multan dosierojn'</div><div class='del'>-    eo 'P&amp;aste', '&amp;Elpo\u015digi'</div><div class='del'>-    eo '&amp;Quit', '&amp;Finigu'</div><div class='del'>-    eo '&amp;Red', '&amp;Rosa'</div><div class='del'>-    eo 'Replace existing file?', '\u0108u anstata\u00fbu ekzistantan dosieron?'</div><div class='del'>-    eo '&amp;Retry', '&amp;Ripetu'</div><div class='del'>-    eo '&amp;Save', '&amp;Savu'</div><div class='del'>-    eo 'Save As', 'Savu kiel'</div><div class='del'>-    eo 'Save To Log', 'Savu en protokolon'</div><div class='del'>-    eo 'Select Log File', 'Elektu prokolodosieron'</div><div class='del'>-    eo 'Select a file to source', 'Elektu dosieron por interpreti'</div><div class='del'>-    eo '&amp;Selection:', '&amp;Elekto:'</div><div class='del'>-    eo 'Skip Messages', 'transsaltu pluajn mesa\u011dojn'</div><div class='del'>-    eo '&amp;Source...', '&amp;Fontoprogramo...'</div><div class='del'>-    eo 'Tcl Scripts', 'Tcl-skriptoj'</div><div class='del'>-    eo 'Tcl for Windows', 'Tcl por vindoso'</div><div class='del'>-    eo 'Text Files', 'Tekstodosierojn'</div><div class='del'>-    eo '&amp;Yes', '&amp;Jes'</div><div class='del'>-    eo 'abort', '\u0109esigo'</div><div class='del'>-    eo 'blue', 'blua'</div><div class='del'>-    eo 'cancel', 'rezignu'</div><div class='del'>-    eo 'extension', 'ekspansio'</div><div class='del'>-    eo 'extensions', 'ekspansioj'</div><div class='del'>-    eo 'green', 'verda'</div><div class='del'>-    eo 'ignore', 'ignorieren'</div><div class='del'>-    eo 'red', 'ru\u011da'</div><div class='del'>-    eo 'retry', 'ripetu'</div><div class='del'>-    eo 'yes', 'jes'</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/es.msg b/ext/tk/sample/msgs_rb/es.msg<br/>deleted file mode 100644<br/>index 460dbe848c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/es.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/es.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    es "Application Error", "Error de la aplicaci\\u00f3n"</div><div class='del'>-    es "Blue", "Azul"</div><div class='del'>-    es "Color", "Color"</div><div class='del'>-    es "Delete", "Borrar"</div><div class='del'>-    es "Error", "Error"</div><div class='del'>-    es "Exit", "Salir"</div><div class='del'>-    es "Green", "Verde"</div><div class='del'>-    es "Red", "Rojo"</div><div class='del'>-    es "blue", "azul"</div><div class='del'>-    es "green", "verde"</div><div class='del'>-    es "red", "rojo"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    es "&amp;Abort", "&amp;Abortar"</div><div class='del'>-    es "About...", "Acerca de ..."</div><div class='del'>-    es "All Files", "Todos los archivos"</div><div class='del'>-    es "Application Error", "Error de la aplicaci\\u00f3n"</div><div class='del'>-    es "&amp;Blue", "&amp;Azul"</div><div class='del'>-    es "&amp;Cancel", "&amp;Cancelar"</div><div class='del'>-    es "Cannot change to the directory \"%1\$s\".\nPermission denied.", "No es posible acceder al directorio \"%1\$s\".\nPermiso denegado."</div><div class='del'>-    es "Choose Directory", "Elegir directorio"</div><div class='del'>-    es "Clear", "Borrar"</div><div class='del'>-    es "Color", "Color"</div><div class='del'>-    es "Console", "Consola"</div><div class='del'>-    es "Copy", "Copiar"</div><div class='del'>-    es "Cut", "Cortar"</div><div class='del'>-    es "Delete", "Borrar"</div><div class='del'>-    es "Details &gt;&gt;", "Detalles &gt;&gt;"</div><div class='del'>-    es "Directory \"%1\$s\" does not exist.", "El directorio \"%1\$s\" no existe."</div><div class='del'>-    es "&amp;Directory:", "&amp;Directorio:"</div><div class='del'>-    es "Error: %1\$s", "Error: %1\$s"</div><div class='del'>-    es "Exit", "Salir"</div><div class='del'>-    es "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "El archivo \"%1\$s\" ya existe.\nDesea sobreescribirlo?"</div><div class='del'>-    es "File \"%1\$s\" already exists.\n\n", "El archivo \"%1\$s\" ya existe.\n\n"</div><div class='del'>-    es "File \"%1\$s\" does not exist.", "El archivo \"%1\$s\" no existe."</div><div class='del'>-    es "File &amp;name:", "&amp;Nombre de archivo:"</div><div class='del'>-    es "File &amp;names:", "&amp;Nombres de archivo:"</div><div class='del'>-    es "Files of &amp;type:", "Archivos de &amp;tipo:"</div><div class='del'>-    es "Fi&amp;les:", "&amp;Archivos:"</div><div class='del'>-    es "&amp;Filter", "&amp;Filtro"</div><div class='del'>-    es "Fil&amp;ter:", "Fil&amp;tro:"</div><div class='del'>-    es "&amp;Green", "&amp;Verde"</div><div class='del'>-    es "Hi", "Hola"</div><div class='del'>-    es "Hide Console", "Esconder la consola"</div><div class='del'>-    es "&amp;Ignore", "&amp;Ignorar"</div><div class='del'>-    es "Invalid file name \"%1\$s\".", "Nombre de archivo inv\\u00e1lido \"%1\$s\"."</div><div class='del'>-    es "Log Files", "Ficheros de traza"</div><div class='del'>-    es "&amp;No", "&amp;No"</div><div class='del'>-    es "&amp;OK", "&amp;OK"</div><div class='del'>-    es "Ok", "Ok"</div><div class='del'>-    es "Open", "Abrir"</div><div class='del'>-    es "&amp;Open", "&amp;Abrir"</div><div class='del'>-    es "Open Multiple Files", "Abrir m\\u00faltiples archivos"</div><div class='del'>-    es "Paste", "Pegar"</div><div class='del'>-    es "Quit", "Abandonar"</div><div class='del'>-    es "&amp;Red", "&amp;Rojo"</div><div class='del'>-    es "Replace existing file?", "Reemplazar el archivo existente?"</div><div class='del'>-    es "&amp;Retry", "&amp;Reintentar"</div><div class='del'>-    es "&amp;Save", "&amp;Salvar"</div><div class='del'>-    es "Save As", "Salvar como"</div><div class='del'>-    es "Save To Log", "Salvar al archivo de traza"</div><div class='del'>-    es "Select Log File", "Elegir un archivo de traza"</div><div class='del'>-    es "Select a file to source", "Seleccionar un archivo a evaluar"</div><div class='del'>-    es "&amp;Selection:", "&amp;Selecci\\u00f3n:"</div><div class='del'>-    es "Skip Messages", "Omitir los mensajes"</div><div class='del'>-    es "Source...", "Evaluar..."</div><div class='del'>-    es "Tcl Scripts", "Scripts Tcl"</div><div class='del'>-    es "Tcl for Windows", "Tcl para Windows"</div><div class='del'>-    es "Text Files", "Archivos de texto"</div><div class='del'>-    es "&amp;Yes", "&amp;S\\u00ed" </div><div class='del'>-    es "abort", "abortar"</div><div class='del'>-    es "blue", "azul"</div><div class='del'>-    es "cancel", "cancelar"</div><div class='del'>-    es "extension", "extensi\\u00f3n"</div><div class='del'>-    es "extensions", "extensiones"</div><div class='del'>-    es "green", "verde"</div><div class='del'>-    es "ignore", "ignorar"</div><div class='del'>-    es "ok", "ok"</div><div class='del'>-    es "red", "rojo"</div><div class='del'>-    es "retry", "reintentar"</div><div class='del'>-    es "yes", "s\\u00ed"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/fr.msg b/ext/tk/sample/msgs_rb/fr.msg<br/>deleted file mode 100644<br/>index ea85cf1a39..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/fr.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/fr.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    fr 'Application Error', "Erreur d'application"</div><div class='del'>-    fr 'Blue', 'Bleu'</div><div class='del'>-    fr 'Color', 'Couleur'</div><div class='del'>-    fr 'Delete', 'Effacer'</div><div class='del'>-    fr 'Error', 'Erreur'</div><div class='del'>-    fr 'Exit', 'Quitter'</div><div class='del'>-    fr 'Green', 'Vert'</div><div class='del'>-    fr 'Red', 'Rouge'</div><div class='del'>-    fr 'blue', 'bleu'</div><div class='del'>-    fr 'green', 'vert'</div><div class='del'>-    fr 'red', 'rouge'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    fr '&amp;Abort', '&amp;Annuler'</div><div class='del'>-    fr 'About...', '\u00c0 propos...'</div><div class='del'>-    fr 'All Files', 'Tous les fichiers'</div><div class='del'>-    fr 'Application Error', "Erreur d'application"</div><div class='del'>-    fr '&amp;Blue', '&amp;Bleu'</div><div class='del'>-    fr '&amp;Cancel', '&amp;Annuler'</div><div class='del'>-    fr 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.', 'Impossible d\'acc\u00e9der au r\u00e9pertoire "%1\$s".' "\n" 'Permission refus\u00e9e.'</div><div class='del'>-    fr 'Choose Directory', 'Choisir r\u00e9pertoire'</div><div class='del'>-    fr 'Clear', 'Effacer'</div><div class='del'>-    fr 'Color', 'Couleur'</div><div class='del'>-    fr 'Console'</div><div class='del'>-    fr 'Copy', 'Copier'</div><div class='del'>-    fr 'Cut', 'Couper'</div><div class='del'>-    fr 'Delete', 'Effacer'</div><div class='del'>-    fr 'Details &gt;&gt;', 'D\u00e9tails &gt;&gt;'</div><div class='del'>-    fr 'Directory "%1\$s" does not exist.', 'Le r\u00e9pertoire "%1\$s" n\'existe pas.'</div><div class='del'>-    fr '&amp;Directory:', '&amp;R\u00e9pertoire:'</div><div class='del'>-    fr 'Error: %1\$s', 'Erreur: %1\$s'</div><div class='del'>-    fr 'Exit', 'Quitter'</div><div class='del'>-    fr 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?', 'Le fichier "%1\$s" existe d\u00e9j\u00e0.' "\n" 'Voulez-vous l\'\u00e9craser?'</div><div class='del'>-    fr 'File "%1\$s" already exists.' "\n\n", 'Le fichier "%1\$s" existe d\u00e9j\u00e0.' "\n\n"</div><div class='del'>-    fr 'File "%1\$s" does not exist.', 'Le fichier "%1\$s" n\'existe pas.'</div><div class='del'>-    fr 'File &amp;name:', '&amp;Nom de fichier:'</div><div class='del'>-    fr 'File &amp;names:', '&amp;Noms de fichiers:'</div><div class='del'>-    fr 'Files of &amp;type:', '&amp;Type de fichiers:'</div><div class='del'>-    fr 'Fi&amp;les:', 'Fich&amp;iers:'</div><div class='del'>-    fr '&amp;Filter', '&amp;Filtre'</div><div class='del'>-    fr 'Fil&amp;ter:', 'Fil&amp;tre:'</div><div class='del'>-    fr '&amp;Green', '&amp;Vert'</div><div class='del'>-    fr 'Hi', 'Salut'</div><div class='del'>-    fr 'Hide Console', 'Cacher la Console'</div><div class='del'>-    fr '&amp;Ignore', '&amp;Ignorer'</div><div class='del'>-    fr 'Invalid file name "%1\$s".', 'Nom de fichier invalide "%1\$s".'</div><div class='del'>-    fr 'Log Files', 'Fichiers de trace'</div><div class='del'>-    fr '&amp;No', '&amp;Non'</div><div class='del'>-    fr '&amp;OK'</div><div class='del'>-    fr 'Ok'</div><div class='del'>-    fr 'Open', 'Ouvrir'</div><div class='del'>-    fr '&amp;Open', '&amp;Ouvrir'</div><div class='del'>-    fr 'Open Multiple Files', 'Ouvrir plusieurs fichiers'</div><div class='del'>-    fr 'Paste', 'Coller'</div><div class='del'>-    fr 'Quit', 'Quitter'</div><div class='del'>-    fr '&amp;Red', '&amp;Rouge'</div><div class='del'>-    fr 'Replace existing file?', 'Remplacer le fichier existant?'</div><div class='del'>-    fr '&amp;Retry', '&amp;R\u00e9-essayer'</div><div class='del'>-    fr '&amp;Save', '&amp;Sauvegarder'</div><div class='del'>-    fr 'Save As', 'Sauvegarder sous'</div><div class='del'>-    fr 'Save To Log', 'Sauvegarde au fichier de trace'</div><div class='del'>-    fr 'Select Log File', 'Choisir un fichier de trace'</div><div class='del'>-    fr 'Select a file to source', 'Choisir un fichier \u00e0 \u00e9valuer'</div><div class='del'>-    fr '&amp;Selection:', '&amp;S\u00e9lection:'</div><div class='del'>-    fr 'Skip Messages', 'Omettre les messages'</div><div class='del'>-    fr 'Source...', '\u00c9valuer...'</div><div class='del'>-    fr 'Tcl Scripts', 'Scripts Tcl'</div><div class='del'>-    fr 'Tcl for Windows', 'Tcl pour Windows'</div><div class='del'>-    fr 'Text Files', 'Fichiers texte'</div><div class='del'>-    fr '&amp;Yes', '&amp;Oui'</div><div class='del'>-    fr 'abort', 'abandonner'</div><div class='del'>-    fr 'blue', 'bleu'</div><div class='del'>-    fr 'cancel', 'annuler'</div><div class='del'>-    fr 'extension'</div><div class='del'>-    fr 'extensions'</div><div class='del'>-    fr 'green', 'vert'</div><div class='del'>-    fr 'ignore', 'ignorer'</div><div class='del'>-    fr 'ok'</div><div class='del'>-    fr 'red', 'rouge'</div><div class='del'>-    fr 'retry', 'r\u00e9essayer'</div><div class='del'>-    fr 'yes', 'oui'</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/it.msg b/ext/tk/sample/msgs_rb/it.msg<br/>deleted file mode 100644<br/>index a180bdbd99..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/it.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/it.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    it "Application Error", "Errore dell' applicazione"</div><div class='del'>-    it "Blue", "Blu"</div><div class='del'>-    it "Color", "Colore"</div><div class='del'>-    it "Delete", "Incolla"</div><div class='del'>-    it "Error", "Errore"</div><div class='del'>-    it "Exit", "Esci"</div><div class='del'>-    it "Green", "Verde"</div><div class='del'>-    it "Red", "Rosso"</div><div class='del'>-    it "blue", "blu"</div><div class='del'>-    it "green", "verde"</div><div class='del'>-    it "red", "rosso"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    it "&amp;Abort", "&amp;Interrompi"</div><div class='del'>-    it "About...", "Informazioni ..."</div><div class='del'>-    it "All Files", "Tutti i file"</div><div class='del'>-    it "Application Error", "Errore dell' applicazione"</div><div class='del'>-    it "&amp;Blue", "&amp;Blu"</div><div class='del'>-    it "&amp;Cancel", "&amp;Annulla"</div><div class='del'>-    it "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Impossibile accedere alla directory \"%1\$s\".\nPermesso negato."</div><div class='del'>-    it "Choose Directory", "Scegli directory"</div><div class='del'>-    it "Clear", "Azzera"</div><div class='del'>-    it "Color", "Colore"</div><div class='del'>-    it "Console"</div><div class='del'>-    it "Copy", "Copia"</div><div class='del'>-    it "Cut", "Taglia"</div><div class='del'>-    it "Delete", "Incolla"</div><div class='del'>-    it "Details &gt;&gt;", "Dettagli &gt;&gt;"</div><div class='del'>-    it "Directory \"%1\$s\" does not exist.", "La directory \"%1\$s\" non esiste."</div><div class='del'>-    it "&amp;Directory:"</div><div class='del'>-    it "Error: %1\$s", "Errore: %1\$s"</div><div class='del'>-    it "Exit", "Esci"</div><div class='del'>-    it "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Il file \"%1\$s\" esiste gi\\u00e0.\nVuoi sovrascriverlo?"</div><div class='del'>-    it "File \"%1\$s\" already exists.\n\n", "Il file \"%1\$s\" esiste gi\\u00e0.\n\n"</div><div class='del'>-    it "File \"%1\$s\" does not exist.", "Il file \"%1\$s\" non esiste."</div><div class='del'>-    it "File &amp;name:", "&amp;Nome del file:"</div><div class='del'>-    it "File &amp;names:", "&amp;Nomi dei file:"</div><div class='del'>-    it "Files of &amp;type:", "File di &amp;tipo:"</div><div class='del'>-    it "Fi&amp;les:", "Fi&amp;le:"</div><div class='del'>-    it "&amp;Filter", "&amp;Filtro"</div><div class='del'>-    it "Fil&amp;ter:", "Fil&amp;tro:"</div><div class='del'>-    it "&amp;Green", "&amp;Verde"</div><div class='del'>-    it "Hi", "Salve"</div><div class='del'>-    it "Hide Console", "Nascondi la console"</div><div class='del'>-    it "&amp;Ignore", "&amp;Ignora"</div><div class='del'>-    it "Invalid file name \"%1\$s\".", "Nome di file non valido \"%1\$s\"."</div><div class='del'>-    it "Log Files", "File di log"</div><div class='del'>-    it "&amp;No"</div><div class='del'>-    it "&amp;OK"</div><div class='del'>-    it "Ok"</div><div class='del'>-    it "&amp;Open", "A&amp;pri"</div><div class='del'>-    it "Open", "Apri"</div><div class='del'>-    it "Open Multiple Files", "Apri file multipli"</div><div class='del'>-    it "Paste", "Incolla"</div><div class='del'>-    it "Quit", "Esci"</div><div class='del'>-    it "&amp;Red", "&amp;Rosso"</div><div class='del'>-    it "Replace existing file?", "Sostituisci il file esistente?"</div><div class='del'>-    it "&amp;Retry", "&amp;Riprova"</div><div class='del'>-    it "&amp;Save", "&amp;Salva"</div><div class='del'>-    it "Save As", "Salva come"</div><div class='del'>-    it "Save To Log", "Salva il log"</div><div class='del'>-    it "Select Log File", "Scegli un file di log"</div><div class='del'>-    it "Select a file to source", "Scegli un file da eseguire"</div><div class='del'>-    it "&amp;Selection:", "&amp;Selezione:"</div><div class='del'>-    it "Skip Messages", "Salta i messaggi"</div><div class='del'>-    it "Source...", "Esegui..."</div><div class='del'>-    it "Tcl Scripts", "Scripts Tcl"</div><div class='del'>-    it "Tcl for Windows", "Tcl per Windows"</div><div class='del'>-    it "Text Files", "File di testo"</div><div class='del'>-    it "&amp;Yes", "&amp;Si"</div><div class='del'>-    it "abort", "interrompi"</div><div class='del'>-    it "blue", "blu"</div><div class='del'>-    it "cancel", "annulla"</div><div class='del'>-    it "extension", "estensione"</div><div class='del'>-    it "extensions", "estensioni"</div><div class='del'>-    it "green", "verde"</div><div class='del'>-    it "ignore", "ignora"</div><div class='del'>-    it "ok"</div><div class='del'>-    it "red", "rosso"</div><div class='del'>-    it "retry", "riprova"</div><div class='del'>-    it "yes", "si"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/ja.msg b/ext/tk/sample/msgs_rb/ja.msg<br/>deleted file mode 100644<br/>index 40587c1f1d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/ja.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/ja.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    ja 'Application Error', '\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30A8\u30E9\u30FC'</div><div class='del'>-    ja 'Blue',   '\u9752'</div><div class='del'>-    ja 'Color',  '\u80CC\u666F\u8272'</div><div class='del'>-    ja 'Delete', '\u6D88\u53BB'</div><div class='del'>-    ja 'Error',  '\u30A8\u30E9\u30FC'</div><div class='del'>-    ja 'Exit',   '\u7D42\u4E86'</div><div class='del'>-    ja 'Green',  '\u7DD1'</div><div class='del'>-    ja 'Red',    '\u8D64'</div><div class='del'>-    ja 'blue',   '\u9752'</div><div class='del'>-    ja 'green',  '\u7DD1'</div><div class='del'>-    ja 'red',    '\u8D64'</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/nl.msg b/ext/tk/sample/msgs_rb/nl.msg<br/>deleted file mode 100644<br/>index 24e41dae86..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/nl.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/nl.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,123 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    nl "Application Error", "Toepassingsfout"</div><div class='del'>-    nl "Blue", "Blauw"</div><div class='del'>-    nl "Color", "Kleur"</div><div class='del'>-    nl "Delete", "Wissen"</div><div class='del'>-    nl "Error", "Fout"</div><div class='del'>-    nl "Exit", "Be\\u00ebindigen"</div><div class='del'>-    nl "Green", "Groen"</div><div class='del'>-    nl "Red", "Rood"</div><div class='del'>-    nl "blue", "blauw"</div><div class='del'>-    nl "green", "groen"</div><div class='del'>-    nl "red", "rood"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    nl "\"%1\$s\" must be an absolute pathname", "\"%1\$s\" moet een absolute pad-naam zijn"</div><div class='del'>-    nl "%1\$s is not a toplevel window", "%1\$s is geen toplevel window"</div><div class='del'>-    nl ", or", ", of"</div><div class='del'>-    nl "-default, -icon, -message, -parent, -title, or -type", "-default, -icon, -message, -parent, -title, of -type"</div><div class='del'>-    nl "-initialdir, -mustexist, -parent, or -title", "-initialdir, -mustexist, -parent, of -title"</div><div class='del'>-    nl "&amp;Abort", "&amp;Afbreken"</div><div class='del'>-    nl "About...", "Over..."</div><div class='del'>-    nl "All Files", "Alle Bestanden"</div><div class='del'>-    nl "Application Error", "Toepassingsfout"</div><div class='del'>-    nl "&amp;Blue", "&amp;Blauw"</div><div class='del'>-    nl "&amp;Cancel", "&amp;Annuleren"</div><div class='del'>-    nl "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Kan niet naar map \"%1\$s\" gaan.\nU heeft hiervoor geen toestemming."</div><div class='del'>-    nl "Choose Directory", "Kies map"</div><div class='del'>-    nl "Clear", "Wissen"</div><div class='del'>-    nl "Clear entry, Press OK; Enter %1\$s, press OK", "Wis veld, Druk op OK; typ %1\$s in, druk op OK"</div><div class='del'>-    nl "&amp;Clear Console", "&amp;Wis Console"</div><div class='del'>-    nl "Color", "Kleur"</div><div class='del'>-    nl "Console"</div><div class='del'>-    nl "Copy", "Kopi\\u00ebren"</div><div class='del'>-    nl "Cut", "Knippen"</div><div class='del'>-    nl "Delete", "Wissen"</div><div class='del'>-    nl "Details"</div><div class='del'>-    nl "Details &gt;&gt;"</div><div class='del'>-    nl "Directory \"%1\$s\" does not exist.", "Map \"%1\$s\" bestaat niet."</div><div class='del'>-    nl "&amp;Directory:", "&amp;Map:"</div><div class='del'>-    nl "Edit", "Bewerken"</div><div class='del'>-    nl "Enter \"%1\$s\", press OK", "Typ \"%1\$s\", druk op OK"</div><div class='del'>-    nl "Enter \"%1\$s\", press OK, enter \"%2\$s\", press OK", "Typ \"%1\$s\", druk op OK, typ \"%2\$s\", druk op OK"</div><div class='del'>-    nl "Error: %1\$s", "Fout: %1\$s"</div><div class='del'>-    nl "Exit", "Be\\u00ebindigen"</div><div class='del'>-    nl "File", "Bestand"</div><div class='del'>-    nl "File \"%1\$s\" already exists.\n\n", "Bestand \"%1\$s\" bestaat al.\n\n"</div><div class='del'>-    nl "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Bestand \"%1\$s\" bestaat al.\nWilt u het overschrijven?"</div><div class='del'>-    nl "File \"%1\$s\" does not exist.", "Bestand \"%1\$s\" bestaat niet."</div><div class='del'>-    nl "File &amp;name:", "Bestands&amp;naam:"</div><div class='del'>-    nl "File &amp;names:", "Bestands&amp;namen:"</div><div class='del'>-    nl "Files of &amp;type:", "Bestanden van het &amp;type:"</div><div class='del'>-    nl "Fi&amp;les:", "&amp;Bestanden:"</div><div class='del'>-    nl "&amp;Filter"</div><div class='del'>-    nl "Fil&amp;ter:"</div><div class='del'>-    nl "&amp;Green", "&amp;Groen"</div><div class='del'>-    nl "Hi", "H\\u00e9"</div><div class='del'>-    nl "Hide Console", "Verberg Console"</div><div class='del'>-    nl "&amp;Ignore", "&amp;Negeren"</div><div class='del'>-    nl "Invalid file name \"%1\$s\".", "Ongeldige bestandsnaam \"%1\$s\"."</div><div class='del'>-    nl "Log Files", "Log Bestanden"</div><div class='del'>-    nl "&amp;No", "&amp;Nee"</div><div class='del'>-    nl "&amp;OK"</div><div class='del'>-    nl "Ok"</div><div class='del'>-    nl "&amp;Open", "&amp;Openen"</div><div class='del'>-    nl "Open", "Openen"</div><div class='del'>-    nl "Open Multiple Files", "Open meerdere bestanden"</div><div class='del'>-    nl "Paste", "Plakken"</div><div class='del'>-    nl "Please press %1\$s", "Druk op %1\$s, A.U.B."</div><div class='del'>-    nl "Please press ok", "Druk op ok, A.U.B."</div><div class='del'>-    nl "Press Cancel", "Druk op Annuleren"</div><div class='del'>-    nl "Press Ok", "Druk op Ok"</div><div class='del'>-    nl "Quit", "Stoppen"</div><div class='del'>-    nl "&amp;Red", "&amp;Rood"</div><div class='del'>-    nl "Replace existing file?", "Vervang bestaand bestand?"</div><div class='del'>-    nl "&amp;Retry", "&amp;Herhalen"</div><div class='del'>-    nl "&amp;Save", "Op&amp;slaan"</div><div class='del'>-    nl "Save As", "Opslaan als"</div><div class='del'>-    nl "Save To Log", "Opslaan naar Log"</div><div class='del'>-    nl "Select Log File", "Selecteer Log bestand"</div><div class='del'>-    nl "Select a file to source", "Selecteer bronbestand"</div><div class='del'>-    nl "&amp;Selection:", "&amp;Selectie:"</div><div class='del'>-    nl "Skip Messages", "Berichten overslaan"</div><div class='del'>-    nl "Source...", "Bron..."</div><div class='del'>-    nl "Tcl Scripts"</div><div class='del'>-    nl "Tcl for Windows", "Tcl voor Windows"</div><div class='del'>-    nl "Text Files", "Tekstbestanden"</div><div class='del'>-    nl "&amp;Yes", "&amp;Ja"</div><div class='del'>-    nl "abort", "afbreken"</div><div class='del'>-    nl "abort, retry, ignore, ok, cancel, no, or yes", "afbreken, opnieuw, negeren, ok, annuleren, nee, of ja"</div><div class='del'>-    nl "abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel", "abortretryignore, ok, okcancel, retrycancel, yesno, of yesnocancel"</div><div class='del'>-    nl "bad %1\$s value \"%2\$s\": must be %3\$s", "verkeerde %1\$s waarde \"%2\$s\": moet zijn %3\$s"</div><div class='del'>-    nl "bad file type \"%1\$s\", should be", "verkeerd bestandstype \"%1\$s\", moet zijn"</div><div class='del'>-    nl "bad option \"%1\$s\": should be %2\$s", "verkeerde optie \"%1\$s\": moet zijn %2\$s"</div><div class='del'>-    nl "bad window path name \"%1\$s\"", "verkeerde window-padnaam \"%1\$s\""</div><div class='del'>-    nl "blue", "blauw"</div><div class='del'>-    nl "can't post %1\$s:  it isn't a descendant of %2\$s (this is a new requirement in Tk versions 3.0 and later)", "kan %1\$s niet verzenden:  het is geen afstammeling van %2\$s (dit is een nieuwe eis in Tk versies 3.0 en later)"</div><div class='del'>-    nl "cancel", "annuleren"</div><div class='del'>-    nl "default button index greater than number of buttons specified for tk_dialog", "default knop index is groter dan het aantal knoppen beschikbaar voor tk_dialog"</div><div class='del'>-    nl "display name to use (current one otherwise)", "te gebruiken schermnaam (anders huidige scherm)"</div><div class='del'>-    nl "error, info, question, or warning", "error, info, question, of warning"</div><div class='del'>-    nl "extension"</div><div class='del'>-    nl "extensions"</div><div class='del'>-    nl "focus group \"%1\$s\" doesn't exist", "focusgroep \"%1\$s\" bestaat niet"</div><div class='del'>-    nl "green", "groen"</div><div class='del'>-    nl "history event %1\$s"</div><div class='del'>-    nl "ignore", "negeren"</div><div class='del'>-    nl "invalid default button \"%1\$s\"", "ongeldige default knop \"%1\$s\""</div><div class='del'>-    nl "macType"</div><div class='del'>-    nl "macTypes"</div><div class='del'>-    nl "must specify a background color", "een achtergrondkleur is verplicht"</div><div class='del'>-    nl "name of the slave interpreter", "naam van de slaaf-interpreter"</div><div class='del'>-    nl "no winfo screen . nor env(DISPLAY)", "geen winfo scherm . noch env(DISPLAY)"</div><div class='del'>-    nl "ok"</div><div class='del'>-    nl "red", "rood"</div><div class='del'>-    nl "retry", "opnieuw"</div><div class='del'>-    nl "should contain 5 or 4 elements", "moet 4 of 5 elementen bevatten"</div><div class='del'>-    nl "spec"</div><div class='del'>-    nl "tk_chooseDirectory command", "tk_chooseDirectory opdracht"</div><div class='del'>-    nl "tk_chooseDirectory command, cancel gives null", "tk_chooseDirectory opdracht, annuleren geeft lege waarde"</div><div class='del'>-    nl "tk_chooseDirectory command, initialdir", "tk_chooseDirectory opdracht, initi\\u00eble map"</div><div class='del'>-    nl "yes", "ja"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/pl.msg b/ext/tk/sample/msgs_rb/pl.msg<br/>deleted file mode 100644<br/>index 0b3b4445c2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/pl.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/pl.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    pl 'Application Error', 'Bl\u0105d w Programie'</div><div class='del'>-    pl 'Blue', 'Niebieski'</div><div class='del'>-    pl 'Color', 'Kolor'</div><div class='del'>-    pl 'Delete', 'Usu\u0144'</div><div class='del'>-    pl 'Error', 'B\u0142\u0105d'</div><div class='del'>-    pl 'Exit', 'Zako\u0144cz'</div><div class='del'>-    pl 'Green', 'Zielony'</div><div class='del'>-    pl 'Red', 'Czerwonz'</div><div class='del'>-    pl 'blue', 'niebieski'</div><div class='del'>-    pl 'green', 'zielony'</div><div class='del'>-    pl 'red', 'czerwony'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    pl '&amp;Abort', '&amp;Anuluj'</div><div class='del'>-    pl '&amp;About...', 'O Programie...'</div><div class='del'>-    pl 'All Files', 'Wszystkie pliki'</div><div class='del'>-    pl 'Application Error', 'Bl\u0105d w Programie'</div><div class='del'>-    pl '&amp;Blue', '&amp;Niebieski'</div><div class='del'>-    pl '&amp;Cancel', '&amp;Anuluj'</div><div class='del'>-    pl 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.', 'Katalog "%1\$s" nie mo\u017ce zosta\u0107 odczytany lub nie istnieje.'</div><div class='del'>-    pl 'Choose Directory', 'Wybierz katalog'</div><div class='del'>-    pl '&amp;Clear', '&amp;Wyczy\u015b\u0107'</div><div class='del'>-    pl '&amp;Clear Console', '&amp;Wyczy\u015b\u0107 konsol\u0119'</div><div class='del'>-    pl 'Color', 'Kolor'</div><div class='del'>-    pl 'Console', 'Konsola'</div><div class='del'>-    pl '&amp;Copy', '&amp;Kopiuj'</div><div class='del'>-    pl 'Cu&amp;t', '&amp;Wytnij'</div><div class='del'>-    pl '&amp;Delete', '&amp;Usu\u0144'</div><div class='del'>-    pl 'Details &gt;&gt;', 'Detale &gt;&gt;'</div><div class='del'>-    pl 'Directory "%1\$s" does not exist.', 'Katalog "%1\$s" nie istniej.'</div><div class='del'>-    pl '&amp;Directory:', '&amp;Katalog:'</div><div class='del'>-    pl '&amp;Edit', '&amp;Edytuj'</div><div class='del'>-    pl 'Error: %1\$s', 'B\u0142\u0105d: %1\$s'</div><div class='del'>-    pl 'E&amp;xit', '&amp;Zako\u0144cz'</div><div class='del'>-    pl '&amp;File', '&amp;Plik'</div><div class='del'>-    pl 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?', 'Plik "%1\$s" ju\u017c istnieje.' "\n" 'Czy chcesz go zast\u0105pi\u0107?'</div><div class='del'>-    pl 'File "%1\$s" already exists.' "\n\n", 'Plik "%1\$s" ju\u017c istnieje. ' "\n\n"</div><div class='del'>-    pl 'File "%1\$s" does not exist.', 'Plik "%1\$s" nie istnieje.'</div><div class='del'>-    pl 'File &amp;name:', 'Nazwa &amp;pliku:'</div><div class='del'>-    pl 'File &amp;names:', 'Nazwy &amp;plik\u00f3w:'</div><div class='del'>-    pl 'Files of &amp;type:', 'Pliki &amp;typu:'</div><div class='del'>-    pl 'Fi&amp;les:', 'Pli&amp;ki:'</div><div class='del'>-    pl '&amp;Filter', '&amp;Filter'</div><div class='del'>-    pl 'Fil&amp;ter:', '&amp;Filter:'</div><div class='del'>-    pl '&amp;Green', '&amp;Zielony'</div><div class='del'>-    pl '&amp;Help', '&amp;Pomoc'</div><div class='del'>-    pl 'Hi', 'Witaj'</div><div class='del'>-    pl '&amp;Hide Console', '&amp;Schowaj konsol\u0119'</div><div class='del'>-    pl '&amp;Ignore', '&amp;Ignoruj'</div><div class='del'>-    pl 'Invalid file name "%1\$s".', 'Niew\u0142a\u015bciwa nazwa pliku "%1\$s".'</div><div class='del'>-    pl 'Log Files', 'Protoko\u0142uj'</div><div class='del'>-    pl '&amp;No', '&amp;Nie'</div><div class='del'>-    pl 'OK'</div><div class='del'>-    pl 'Ok'</div><div class='del'>-    pl 'Open', 'Wczytaj'</div><div class='del'>-    pl '&amp;Open', '&amp;Wczytaj'</div><div class='del'>-    pl 'Open Multiple Files', 'Wczytuj wiele plik\u00f3w'</div><div class='del'>-    pl 'P&amp;aste', '&amp;Wklej'</div><div class='del'>-    pl '&amp;Quit', '&amp;Zako\u0144cz'</div><div class='del'>-    pl '&amp;Red', '&amp;Czerwonz'</div><div class='del'>-    pl 'Replace existing file?', 'Czy zost\u0105pi\u0107 instniej\u0105cy plik?'</div><div class='del'>-    pl '&amp;Retry', '&amp;Powt\u00f3rz'</div><div class='del'>-    pl '&amp;Save', '&amp;Zapisz'</div><div class='del'>-    pl 'Save As', 'Zapisz jako'</div><div class='del'>-    pl 'Save To Log', 'Wpisz do protoko\u0142u'</div><div class='del'>-    pl 'Select Log File', 'Wybierz plik proko\u0142u'</div><div class='del'>-    pl 'Select a file to source', 'Wybierz plik do wykonania'</div><div class='del'>-    pl '&amp;Selection:', '&amp;Wyb\u00f3r:'</div><div class='del'>-    pl 'Skip Messages', 'Omi\u0144 pozosta\u0142e komunikaty'</div><div class='del'>-    pl '&amp;Source...', '&amp;Kod \u017ar\u00f3d\u0142owy...'</div><div class='del'>-    pl 'Tcl Scripts', 'Tcl-skrypty'</div><div class='del'>-    pl 'Tcl for Windows', 'Tcl dla Okienek (Windows)'</div><div class='del'>-    pl 'Text Files', 'Pliki Tekstowe'</div><div class='del'>-    pl '&amp;Yes', '&amp;Tak'</div><div class='del'>-    pl 'abort', 'zako\u0144cz'</div><div class='del'>-    pl 'blue', 'niebieski'</div><div class='del'>-    pl 'cancel', 'anuluj'</div><div class='del'>-    pl 'extension', 'rozszerzenie'</div><div class='del'>-    pl 'extensions', 'rozszerzenia'</div><div class='del'>-    pl 'green', 'zielony'</div><div class='del'>-    pl 'ignore', 'ignoruj'</div><div class='del'>-    pl 'red', 'czerwony'</div><div class='del'>-    pl 'retry', 'potw\u00f3rz'</div><div class='del'>-    pl 'yes', 'tak'</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb/ru.msg b/ext/tk/sample/msgs_rb/ru.msg<br/>deleted file mode 100644<br/>index f389dff0b6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb/ru.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb/ru.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    ru 'Application Error', '\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435'</div><div class='del'>-    ru 'Blue', ' \u0413\u043e\u043b\u0443\u0431\u043e\u0439'</div><div class='del'>-    ru 'Color', '\u0426\u0432\u0435\u0442'</div><div class='del'>-    ru 'Delete', '\u0423\u0434\u0430\u043b\u0438\u0442\u044c'</div><div class='del'>-    ru 'Error', '\u041e\u0448\u0438\u0431\u043a\u0430'</div><div class='del'>-    ru 'Exit', '\u0412\u044b\u0445\u043e\u0434'</div><div class='del'>-    ru 'Green', '\u0417\u0435\u043b\u0435\u043d\u044b\u0439'</div><div class='del'>-    ru 'Red', '\u041a\u0440\u0430\u0441\u043d\u044b\u0439'</div><div class='del'>-    ru 'blue', ' \u0433\u043e\u043b\u0443\u0431\u043e\u0439'</div><div class='del'>-    ru 'green', ' \u0437\u0435\u043b\u0435\u043d\u044b\u0439'</div><div class='del'>-    ru 'red', ' \u043a\u0440\u0430\u0441\u043d\u044b\u0439'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    ru '&amp;Abort', '&amp;\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c'</div><div class='del'>-    ru 'About...', '\u041f\u0440\u043e...'</div><div class='del'>-    ru 'All Files', '\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b'</div><div class='del'>-    ru 'Application Error', '\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435'</div><div class='del'>-    ru '&amp;Blue', ' &amp;\u0413\u043e\u043b\u0443\u0431\u043e\u0439'</div><div class='del'>-    ru '&amp;Cancel', '\u041e\u0442&amp;\u043c\u0435\u043d\u0430'</div><div class='del'>-    ru 'Cannot change to the directory "%1\$s".' "\n" 'Permission denied.' \</div><div class='del'>-                        '\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 "%1\$s".' "\n" '\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430'</div><div class='del'>-    ru 'Choose Directory', '\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433'</div><div class='del'>-    ru 'Clear', '\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c'</div><div class='del'>-    ru 'Color', '\u0426\u0432\u0435\u0442'</div><div class='del'>-    ru 'Console', '\u041a\u043e\u043d\u0441\u043e\u043b\u044c'</div><div class='del'>-    ru 'Copy', '\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c'</div><div class='del'>-    ru 'Cut', '\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c'</div><div class='del'>-    ru 'Delete', '\u0423\u0434\u0430\u043b\u0438\u0442\u044c'</div><div class='del'>-    ru 'Details &gt;&gt;', '\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 &gt;&gt;'</div><div class='del'>-    ru 'Directory "%1\$s" does not exist.', '\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 "%1\$s" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.'</div><div class='del'>-    ru '&amp;Directory:', '&amp;\u041a\u0430\u0442\u0430\u043b\u043e\u0433:'</div><div class='del'>-    ru 'Error: %1\$s', '\u041e\u0448\u0438\u0431\u043a\u0430: %1\$s' </div><div class='del'>-    ru 'Exit', '\u0412\u044b\u0445\u043e\u0434'</div><div class='del'>-    ru 'File "%1\$s" already exists.' "\n" 'Do you want to overwrite it?' \</div><div class='del'>-                            '\u0424\u0430\u0439\u043b "%1\$s" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.' "\n" '\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e?'</div><div class='del'>-    ru 'File "%1\$s" already exists.' "\n\n", '\u0424\u0430\u0439\u043b "%1\$s" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.' "\n\n"</div><div class='del'>-    ru 'File "%1\$s" does not exist.', '\u0424\u0430\u0439\u043b "%1\$s" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d.'</div><div class='del'>-    ru 'File &amp;name:', '&amp;\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430:'</div><div class='del'>-    ru 'File &amp;names:', '&amp;\u0418\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:'</div><div class='del'>-    ru 'Files of &amp;type:', '&amp;\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432:'</div><div class='del'>-    ru 'Fi&amp;les:', '\u0424\u0430\u0439&amp;\u043b\u044b:'</div><div class='del'>-    ru '&amp;Filter', '&amp;\u0424\u0438\u043b\u044c\u0442\u0440'</div><div class='del'>-    ru 'Fil&amp;ter:', '\u0424\u0438\u043b\u044c&amp;\u0442\u0440:'</div><div class='del'>-    ru '&amp;Green', ' &amp;\u0417\u0435\u043b\u0435\u043d\u044b\u0439'</div><div class='del'>-    ru 'Hi', '\u041f\u0440\u0438\u0432\u0435\u0442'</div><div class='del'>-    ru 'Hide Console', '\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c'</div><div class='del'>-    ru '&amp;Ignore', '&amp;\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c'</div><div class='del'>-    ru 'Invalid file name "%1\$s".', '\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 "%1\$s".' </div><div class='del'>-    ru 'Log Files', '\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430'</div><div class='del'>-    ru '&amp;No', '&amp;\u041d\u0435\u0442'</div><div class='del'>-    ru '&amp;OK', '&amp;\u041e\u041a'</div><div class='del'>-    ru 'Ok', '\u0414\u0430'</div><div class='del'>-    ru 'Open', '\u041e\u0442\u043a\u0440\u044b\u0442\u044c'</div><div class='del'>-    ru '&amp;Open', '&amp;\u041e\u0442\u043a\u0440\u044b\u0442\u044c'</div><div class='del'>-    ru 'Open Multiple Files', '\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432'</div><div class='del'>-    ru 'Paste', '\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c'</div><div class='del'>-    ru 'Quit', '\u0412\u044b\u0445\u043e\u0434'</div><div class='del'>-    ru '&amp;Red', ' &amp;\u041a\u0440\u0430\u0441\u043d\u044b\u0439'</div><div class='del'>-    ru 'Replace existing file?', '\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b?'</div><div class='del'>-    ru '&amp;Retry', '&amp;\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c'</div><div class='del'>-    ru '&amp;Save', '&amp;\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c'</div><div class='del'>-    ru 'Save As', '\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a'</div><div class='del'>-    ru 'Save To Log', '\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b'</div><div class='del'>-    ru 'Select Log File', '\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0436\u0443\u0440\u043d\u0430\u043b'</div><div class='del'>-    ru 'Select a file to source', '\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438'</div><div class='del'>-    ru '&amp;Selection:', '&amp;Selection:'</div><div class='del'>-    ru 'Skip Messages', '\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f'</div><div class='del'>-    ru 'Source...', '\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b...'</div><div class='del'>-    ru 'Tcl Scripts', '\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL'</div><div class='del'>-    ru 'Tcl for Windows', 'TCL \u0434\u043b\u044f Windows'</div><div class='del'>-    ru 'Text Files', '\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b'</div><div class='del'>-    ru '&amp;Yes', '&amp;\u0414\u0430'</div><div class='del'>-    ru 'abort', '\u043e\u0442\u043c\u0435\u043d\u0430'</div><div class='del'>-    ru 'blue', ' \u0433\u043e\u043b\u0443\u0431\u043e\u0439'</div><div class='del'>-    ru 'cancel', '\u043e\u0442\u043c\u0435\u043d\u0430'</div><div class='del'>-    ru 'extension', '\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435'</div><div class='del'>-    ru 'extensions', '\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f'</div><div class='del'>-    ru 'green', ' \u0437\u0435\u043b\u0435\u043d\u044b\u0439'</div><div class='del'>-    ru 'ignore', '\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c'</div><div class='del'>-    ru 'ok', '\u043e\u043a'</div><div class='del'>-    ru 'red', ' \u043a\u0440\u0430\u0441\u043d\u044b\u0439'</div><div class='del'>-    ru 'retry', '\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c'</div><div class='del'>-    ru 'yes', '\u0434\u0430'</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb2/README b/ext/tk/sample/msgs_rb2/README<br/>deleted file mode 100644<br/>index b8aa114e1b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb2/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb2/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-Message catalogs in this directory are written in encodings except</div><div class='del'>-UTF-8. As if you have a trouble to edit UTF-8 text, you can write </div><div class='del'>-message catalogs in your familier encoding.</div><div class='del'>-</div><div class='del'>-Please see '../msgs_rb/README' too.</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb2/de.msg b/ext/tk/sample/msgs_rb2/de.msg<br/>deleted file mode 100644<br/>index 0d6c82d9e5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb2/de.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb2/de.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,88 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    de 'Application Error', 'Applikationsfehler'</div><div class='del'>-    de 'Blue', 'Blau'</div><div class='del'>-    de 'Color', 'Farbe'</div><div class='del'>-    de 'Delete', 'Löschen', 'iso8859-1'</div><div class='del'>-    de 'Error', 'Fehler'</div><div class='del'>-    de 'Exit', 'Ende'</div><div class='del'>-    de 'Green', 'Grün', 'iso8859-1'</div><div class='del'>-    de 'Red', 'Rot'</div><div class='del'>-    de 'blue', 'blau'</div><div class='del'>-    de 'green', 'grün', 'iso8859-1'</div><div class='del'>-    de 'red', 'rot'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    de "&amp;Abort", "&amp;Abbruch"</div><div class='del'>-    de "&amp;About...", "&amp;Über...", 'iso8859-1'</div><div class='del'>-    de "All Files", "Alle Dateien"</div><div class='del'>-    de "Application Error", "Applikationsfehler"</div><div class='del'>-    de "&amp;Blue", "&amp;Blau"</div><div class='del'>-    de "&amp;Cancel", "&amp;Abbruch"</div><div class='del'>-    de "Cannot change to the directory \"%1\$s\".\nPermission denied.", "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden."</div><div class='del'>-    de "Choose Directory", "Wähle Verzeichnis", 'iso8859-1'</div><div class='del'>-    de "&amp;Clear", "&amp;Rücksetzen", 'iso8859-1'</div><div class='del'>-    de "&amp;Clear Console", "&amp;Konsole löschen", 'iso8859-1'</div><div class='del'>-    de "Color", "Farbe"</div><div class='del'>-    de "Console", "Konsole"</div><div class='del'>-    de "&amp;Copy", "&amp;Kopieren"</div><div class='del'>-    de "Cu&amp;t", "Aus&amp;schneiden"</div><div class='del'>-    de '&amp;Delete', '&amp;Löschen', 'iso8859-1'</div><div class='del'>-    de "Details &gt;&gt;"</div><div class='del'>-    de "Directory \"%1\$s\" does not exist.", "Das Verzeichnis \"%1\$s\" existiert nicht."</div><div class='del'>-    de "&amp;Directory:", "&amp;Verzeichnis:"</div><div class='del'>-    de "&amp;Edit", "&amp;Bearbieten"</div><div class='del'>-    de "Error: %1\$s", "Fehler: %1\$s"</div><div class='del'>-    de "E&amp;xit", "&amp;Ende"</div><div class='del'>-    de "&amp;File", "&amp;Datei"</div><div class='del'>-    de "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei überschreiben ?", 'iso8859-1'</div><div class='del'>-    de "File \"%1\$s\" already exists.\n\n", "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n"</div><div class='del'>-    de "File \"%1\$s\" does not exist.", "Die Datei \"%1\$s\" existiert nicht."</div><div class='del'>-    de "File &amp;name:", "Datei&amp;name:"</div><div class='del'>-    de "File &amp;names:", "Datei&amp;namen:"</div><div class='del'>-    de "Files of &amp;type:", "Dateien des &amp;Typs:"</div><div class='del'>-    de "Fi&amp;les:", "Dat&amp;eien:"</div><div class='del'>-    de "&amp;Filter"</div><div class='del'>-    de "Fil&amp;ter:"</div><div class='del'>-    de '&amp;Green', '&amp;Grün', 'iso8859-1'</div><div class='del'>-    de "&amp;Help", "&amp;Hilfe"</div><div class='del'>-    de "Hi", "Hallo"</div><div class='del'>-    de "&amp;Hide Console", "&amp;Konsole unsichtbar machen"</div><div class='del'>-    de "&amp;Ignore", "&amp;Ignorieren"</div><div class='del'>-    de "Invalid file name \"%1\$s\".", "Ungültiger Dateiname \"%1\$s\".", 'iso8859-1'</div><div class='del'>-    de "Log Files", "Protokolldatei"</div><div class='del'>-    de "&amp;No", "&amp;Nein"</div><div class='del'>-    de "OK"</div><div class='del'>-    de "Ok"</div><div class='del'>-    de "Open", "Öffnen", 'iso8859-1'</div><div class='del'>-    de "&amp;Open", "Ö&amp;ffnen", 'iso8859-1'</div><div class='del'>-    de "Open Multiple Files"</div><div class='del'>-    de "P&amp;aste", "E&amp;infügen", 'iso8859-1'</div><div class='del'>-    de "&amp;Quit", "&amp;Beenden"</div><div class='del'>-    de "&amp;Red", "&amp;Rot"</div><div class='del'>-    de "Replace existing file?", "Existierende Datei ersetzen?"</div><div class='del'>-    de "&amp;Retry", "&amp;Wiederholen"</div><div class='del'>-    de "&amp;Save", "&amp;Speichern"</div><div class='del'>-    de "Save As", "Speichern unter"</div><div class='del'>-    de "Save To Log", "In Protokoll speichern"</div><div class='del'>-    de "Select Log File", "Protokolldatei auswählen", 'iso8859-1'</div><div class='del'>-    de "Select a file to source", "Auszuführende Datei auswählen", 'iso8859-1'</div><div class='del'>-    de "&amp;Selection:", "Auswah&amp;l:"</div><div class='del'>-    de "Skip Messages", "Weitere Nachrichten überspringen", 'iso8859-1'</div><div class='del'>-    de "&amp;Source...", "&amp;Ausführen...", 'iso8859-1'</div><div class='del'>-    de "Tcl Scripts", "Tcl-Skripte"</div><div class='del'>-    de "Tcl for Windows", "Tcl für Windows", 'iso8859-1'</div><div class='del'>-    de "Text Files", "Textdateien"</div><div class='del'>-    de "&amp;Yes", "&amp;Ja"</div><div class='del'>-    de "abort", "abbrechen"</div><div class='del'>-    de "blue", "blau"</div><div class='del'>-    de "cancel", "abbrechen"</div><div class='del'>-    de "extension", "Erweiterung"</div><div class='del'>-    de "extensions", "Erweiterungen"</div><div class='del'>-    de 'green', 'grün', 'iso8859-1'</div><div class='del'>-    de "ignore", "ignorieren"</div><div class='del'>-    de "ok"</div><div class='del'>-    de "red", "rot"</div><div class='del'>-    de "retry", "wiederholen"</div><div class='del'>-    de "yes", "ja"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_rb2/ja.msg b/ext/tk/sample/msgs_rb2/ja.msg<br/>deleted file mode 100644<br/>index 84e89aa6ef..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_rb2/ja.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_rb2/ja.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,85 +0,0 @@</div><div class='del'>-TkMsgCatalog.new('::tkmsgcat_demo') {</div><div class='del'>-    ja 'Application Error', '¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥¨¥é¡¼', 'euc-jp'</div><div class='del'>-    ja 'Blue',   'ÀÄ',     'euc-jp'</div><div class='del'>-    ja 'Color',  '¿§ÁªÂò', 'euc-jp'</div><div class='del'>-    ja 'Delete', '¾Ãµî',   'euc-jp'</div><div class='del'>-    ja 'Error',  '¥¨¥é¡¼', 'euc-jp'</div><div class='del'>-    ja 'Exit',   '½ªÎ»',   'euc-jp'</div><div class='del'>-    ja 'Green',  'ÎÐ',     'euc-jp'</div><div class='del'>-    ja 'Red',    'ÀÖ',     'euc-jp'</div><div class='del'>-    ja 'blue',   'ÀÄ',     'euc-jp'</div><div class='del'>-    ja 'green',  'ÎÐ',     'euc-jp'</div><div class='del'>-    ja 'red',    'ÀÖ',     'euc-jp'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkMsgCatalog.new('::tk') {</div><div class='del'>-    ja "&amp;Abort", 'Ãæ»ß', 'euc-jp'</div><div class='del'>-    ja "About..."</div><div class='del'>-    ja "All Files", '¤¹¤Ù¤Æ¤Î¥Õ¥¡¥¤¥ë', 'euc-jp'</div><div class='del'>-    ja "Application Error", '¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥¨¥é¡¼', 'euc-jp'</div><div class='del'>-    ja "&amp;Blue", 'ÀÄ', 'euc-jp'</div><div class='del'>-    ja "&amp;Cancel", '¼è¤ê¾Ã¤·', 'euc-jp'</div><div class='del'>-    ja "Cannot change to the directory \"%1\$s\".\nPermission denied.", "¥Ç¥£¥ì¥¯¥È¥ê \"%1\$s\" ¤ËÊÑ¹¹¤Ç¤­¤Þ¤»¤ó¡¥\nµö²Ä¤¬¤¢¤ê¤Þ¤»¤ó¡¥", 'euc-jp'</div><div class='del'>-    ja "Choose Directory", '¥Ç¥£¥ì¥¯¥È¥ê¤òÁªÂò', 'euc-jp'</div><div class='del'>-    ja "Clear", '¾Ãµî', 'euc-jp'</div><div class='del'>-    ja "Color", '¿§', 'euc-jp'</div><div class='del'>-    ja "Console", '¥³¥ó¥½¡¼¥ë', 'euc-jp'</div><div class='del'>-    ja "Copy", '¥³¥Ô¡¼', 'euc-jp'</div><div class='del'>-    ja "Cut", 'ÀÚ¤ê¼è¤ê', 'euc-jp'</div><div class='del'>-    ja "Delete", '¾Ãµî', 'euc-jp'</div><div class='del'>-    ja "Details &gt;&gt;", '¾ÜºÙ &gt;&gt;', 'euc-jp'</div><div class='del'>-    ja "Directory \"%1\$s\" does not exist.", '"%1$s" ¤È¤¤¤¦¥Ç¥£¥ì¥¯¥È¥ê¤ÏÂ¸ºß¤·¤Þ¤»¤ó¡¥', 'euc-jp'</div><div class='del'>-    ja "&amp;Directory:", '¥Ç¥£¥ì¥¯¥È¥ê', 'euc-jp'</div><div class='del'>-    ja "Error: %1\$s"</div><div class='del'>-    ja "Exit", '½ªÎ»', 'euc-jp'</div><div class='del'>-    ja "File \"%1\$s\" already exists.\nDo you want to overwrite it?", "\"%1\$s\" ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Ï´û¤ËÂ¸ºß¤·¤Æ¤¤¤Þ¤¹¡¥\n½ñ¤­´¹¤¨¤Þ¤¹¤«¡©", 'euc-jp'</div><div class='del'>-    ja "File \"%1\$s\" already exists.\n\n", "\"%1\$s\" ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Ï´û¤ËÂ¸ºß¤·¤Æ¤¤¤Þ¤¹¡¥\n\n", 'euc-jp'</div><div class='del'>-    ja "File \"%1\$s\" does not exist.", '"%1$s" ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤ÏÂ¸ºß¤·¤Þ¤»¤ó¡¥', 'euc-jp'</div><div class='del'>-    ja "File &amp;name:", '¥Õ¥¡¥¤¥ëÌ¾', 'euc-jp'</div><div class='del'>-    ja "File &amp;names:", '¥Õ¥¡¥¤¥ëÌ¾', 'euc-jp'</div><div class='del'>-    ja "Files of &amp;type:", '¥Õ¥¡¥¤¥ë·Á¼°', 'euc-jp'</div><div class='del'>-    ja "Fi&amp;les:", '¥Õ¥¡¥¤¥ë', 'euc-jp'</div><div class='del'>-    ja "&amp;Filter", '¥Õ¥£¥ë¥¿¡¼', 'euc-jp'</div><div class='del'>-    ja "Fil&amp;ter:", '¥Õ¥£¥ë¥¿¡¼', 'euc-jp'</div><div class='del'>-    ja "&amp;Green", 'ÎÐ', 'euc-jp'</div><div class='del'>-    ja "Hi", '¤³¤ó¤Ë¤Á¤Ï', 'euc-jp'</div><div class='del'>-    ja "Hide Console", '¥³¥ó¥½¡¼¥ë¤ò±£¤¹', 'euc-jp'</div><div class='del'>-    ja "&amp;Ignore", 'Ìµ»ë', 'euc-jp'</div><div class='del'>-    ja "Invalid file name \"%1\$s\".", '"%1$s" ¤ÏÉÔÀµ¤Ê¥Õ¥¡¥¤¥ëÌ¾¤Ç¤¹¡¥', 'euc-jp'</div><div class='del'>-    ja "Log Files", '¥í¥°¥Õ¥¡¥¤¥ë', 'euc-jp'</div><div class='del'>-    ja "&amp;No", '¤¤¤¤¤¨', 'euc-jp'</div><div class='del'>-    ja "&amp;OK", 'Î»²ò', 'euc-jp'</div><div class='del'>-    ja "OK", 'Î»²ò', 'euc-jp'</div><div class='del'>-    ja "Ok", 'Î»²ò', 'euc-jp'</div><div class='del'>-    ja "Open", '³«¤¯', 'euc-jp'</div><div class='del'>-    ja "&amp;Open", '³«¤¯', 'euc-jp'</div><div class='del'>-    ja "Open Multiple Files", 'Ê£¿ô¤Î¥Õ¥¡¥¤¥ë¤ò³«¤¯', 'euc-jp'</div><div class='del'>-    ja "Paste", 'Å½¤êÉÕ¤±', 'euc-jp'</div><div class='del'>-    ja "Quit", '½ªÎ»', 'euc-jp'</div><div class='del'>-    ja "&amp;Red", 'ÀÖ', 'euc-jp'</div><div class='del'>-    ja "Replace existing file?", '´ûÂ¸¤Î¥Õ¥¡¥¤¥ë¤òÃÖ¤­´¹¤¨¤Þ¤¹¤«¡©', 'euc-jp'</div><div class='del'>-    ja "&amp;Retry", 'ºÆ¼Â¹Ô', 'euc-jp'</div><div class='del'>-    ja "&amp;Save", 'ÊÝÂ¸', 'euc-jp'</div><div class='del'>-    ja "Save As", 'Ì¾Á°¤òÉÕ¤±¤ÆÊÝÂ¸', 'euc-jp'</div><div class='del'>-    ja "Save To Log", '¥í¥°¤òÊÝÂ¸', 'euc-jp'</div><div class='del'>-    ja "Select Log File", '¥í¥°¥Õ¥¡¥¤¥ë¤òÁªÂò', 'euc-jp'</div><div class='del'>-    ja "Select a file to source", '¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤òÁªÂò', 'euc-jp'</div><div class='del'>-    ja "&amp;Selection:", 'ÁªÂò', 'euc-jp'</div><div class='del'>-    ja "Skip Messages", '¥á¥Ã¥»¡¼¥¸¤ò¤È¤Ð¤¹', 'euc-jp'</div><div class='del'>-    ja "Source...", '¥½¡¼¥¹...', 'euc-jp'</div><div class='del'>-    ja "Tcl Scripts", 'Tcl ¥¹¥¯¥ê¥×¥È', 'euc-jp'</div><div class='del'>-    ja "Tcl for Windows"</div><div class='del'>-    ja "Text Files", '¥Æ¥­¥¹¥È¥Õ¥¡¥¤¥ë', 'euc-jp'</div><div class='del'>-    ja "&amp;Yes", '¤Ï¤¤', 'euc-jp'</div><div class='del'>-    ja "abort", 'Ãæ»ß', 'euc-jp'</div><div class='del'>-    ja "blue", 'ÀÄ', 'euc-jp'</div><div class='del'>-    ja "cancel", '¼è¤ê¾Ã¤·', 'euc-jp'</div><div class='del'>-    ja "extension", '³ÈÄ¥»Ò', 'euc-jp'</div><div class='del'>-    ja "extensions", '³ÈÄ¥»Ò', 'euc-jp'</div><div class='del'>-    ja "green", 'ÎÐ', 'euc-jp'</div><div class='del'>-    ja "ignore", 'Ìµ»ë', 'euc-jp'</div><div class='del'>-    ja "ok", 'Î»²ò', 'euc-jp'</div><div class='del'>-    ja "red", 'ÀÖ', 'euc-jp'</div><div class='del'>-    ja "retry", 'ºÆ¼Â¹Ô', 'euc-jp'</div><div class='del'>-    ja "yes", '¤Ï¤¤', 'euc-jp'</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/README b/ext/tk/sample/msgs_tk/README<br/>deleted file mode 100644<br/>index c7422e3a9b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-Almost all of Message-Catalog files in this directory are quoted </div><div class='del'>-from Tcl/Tk8.5a1 source archive (only a little are modified for</div><div class='del'>-'tkmsgcat-load_tk.rb'). Please read the file 'license.terms' in</div><div class='del'>-this directry (That was included in demo directory of Tcl/Tk8.5a1).</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/cs.msg b/ext/tk/sample/msgs_tk/cs.msg<br/>deleted file mode 100644<br/>index 697070985e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/cs.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/cs.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset cs "Application Error" "Chyba programu"</div><div class='del'>-    ::msgcat::mcset cs "Blue" "Modr\341"</div><div class='del'>-    ::msgcat::mcset cs "Color" "Barva"</div><div class='del'>-    ::msgcat::mcset cs "Delete" "Smazat"</div><div class='del'>-    ::msgcat::mcset cs "Error" "Chyba"</div><div class='del'>-    ::msgcat::mcset cs "Exit" "Konec"</div><div class='del'>-    ::msgcat::mcset cs "Green" "Zelen\341"</div><div class='del'>-    ::msgcat::mcset cs "Red" "\u010cerven\341"</div><div class='del'>-    ::msgcat::mcset cs "blue" "modr\341"</div><div class='del'>-    ::msgcat::mcset cs "green" "zelen\341"</div><div class='del'>-    ::msgcat::mcset cs "red" "\u010derven\341"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset cs "&amp;Abort" "&amp;P\u0159eru\u0161it"</div><div class='del'>-    ::msgcat::mcset cs "About..." "O programu..."</div><div class='del'>-    ::msgcat::mcset cs "All Files" "V\u0161echny soubory"</div><div class='del'>-    ::msgcat::mcset cs "Application Error" "Chyba programu"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Blue" "&amp;Modr\341"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Cancel" "&amp;Zru\u0161it"</div><div class='del'>-    ::msgcat::mcset cs "Cannot change to the directory \"%1\$s\".\nPermission denied." "Nemohu zm\u011bnit atku\341ln\355 adres\341\u0159 na \"%1\$s\".\nP\u0159\355stup odm\355tnut."</div><div class='del'>-    ::msgcat::mcset cs "Choose Directory" "V\375b\u011br adres\341\u0159e"</div><div class='del'>-    ::msgcat::mcset cs "Clear" "Smazat"</div><div class='del'>-    ::msgcat::mcset cs "Color" "Barva"</div><div class='del'>-    ::msgcat::mcset cs "Console" "Konzole"</div><div class='del'>-    ::msgcat::mcset cs "Copy" "Kop\355rovat"</div><div class='del'>-    ::msgcat::mcset cs "Cut" "Vy\u0159\355znout"</div><div class='del'>-    ::msgcat::mcset cs "Delete" "Smazat"</div><div class='del'>-    ::msgcat::mcset cs "Details &gt;&gt;" "Detaily &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset cs "Directory \"%1\$s\" does not exist." "Adres\341\u0159 \"%1\$s\" neexistuje."</div><div class='del'>-    ::msgcat::mcset cs "&amp;Directory:" "&amp;Adres\341\u0159:"</div><div class='del'>-    ::msgcat::mcset cs "Error: %1\$s" "Chyba: %1\$s"</div><div class='del'>-    ::msgcat::mcset cs "Exit" "Konec"</div><div class='del'>-    ::msgcat::mcset cs "File \"%1\$s\" already exists.\n\n" "Soubor \"%1\$s\" ji\u017e existuje.\n\n"</div><div class='del'>-    ::msgcat::mcset cs "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Soubor \"%1\$s\" ji\u017e existuje.\nChcete jej p\u0159epsat?"</div><div class='del'>-    ::msgcat::mcset cs "File \"%1\$s\" does not exist." "Soubor \"%1\$s\" neexistuje."</div><div class='del'>-    ::msgcat::mcset cs "File &amp;name:" "&amp;Jm\351no souboru:"</div><div class='del'>-    ::msgcat::mcset cs "File &amp;names:" "&amp;Jm\351na soubor\u016f:"</div><div class='del'>-    ::msgcat::mcset cs "Files of &amp;type:" "&amp;Typy soubor\u016f:"</div><div class='del'>-    ::msgcat::mcset cs "Fi&amp;les:" "Sou&amp;bory:"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Filter" "&amp;Filtr"</div><div class='del'>-    ::msgcat::mcset cs "Fil&amp;ter:" "Fil&amp;tr:"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Green" "Ze&amp;len\341"</div><div class='del'>-    ::msgcat::mcset cs "Hi"</div><div class='del'>-    ::msgcat::mcset cs "Hide Console" "Skr\375t konsolu"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Ignore" "&amp;Ignorovat"</div><div class='del'>-    ::msgcat::mcset cs "Invalid file name \"%1\$s\"." "\u0160patn\351 jm\351no souboru \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset cs "Log Files" "Log soubory"</div><div class='del'>-    ::msgcat::mcset cs "&amp;No" "&amp;Ne"</div><div class='del'>-    ::msgcat::mcset cs "&amp;OK"</div><div class='del'>-    ::msgcat::mcset cs "Ok"</div><div class='del'>-    ::msgcat::mcset cs "Open" "Otev\u0159\355t"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Open" "&amp;Otev\u0159\355t"</div><div class='del'>-    ::msgcat::mcset cs "Open Multiple Files" "Otev\u0159\355t v\355ce soubor\u016f"</div><div class='del'>-    ::msgcat::mcset cs "Paste" "Vlo\u017eit"</div><div class='del'>-    ::msgcat::mcset cs "Quit" "Skon\u010dit"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Red" " \u010ce&amp;rven\341"</div><div class='del'>-    ::msgcat::mcset cs "Replace existing file?" "Nahradit st\341vaj\355c\355 soubor?"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Retry" "Z&amp;novu"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Save" "&amp;Ulo\u017eit"</div><div class='del'>-    ::msgcat::mcset cs "Save As" "Ulo\u017eit jako"</div><div class='del'>-    ::msgcat::mcset cs "Save To Log" "Ulo\u017eit do logu"</div><div class='del'>-    ::msgcat::mcset cs "Select Log File" "Vybrat log soubor"</div><div class='del'>-    ::msgcat::mcset cs "Select a file to source" "Vybrat soubor k nahr\341n\355"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Selection:" "&amp;V\375b\u011br:"</div><div class='del'>-    ::msgcat::mcset cs "Skip Messages" "P\u0159esko\u010dit zpr\341vy"</div><div class='del'>-    ::msgcat::mcset cs "Source..." "Nahr\341t..."</div><div class='del'>-    ::msgcat::mcset cs "Tcl Scripts" "Tcl skripty"</div><div class='del'>-    ::msgcat::mcset cs "Tcl for Windows" "Tcl pro Windows"</div><div class='del'>-    ::msgcat::mcset cs "Text Files" "Textov\351 soubory"</div><div class='del'>-    ::msgcat::mcset cs "&amp;Yes" "&amp;Ano"</div><div class='del'>-    ::msgcat::mcset cs "abort" "p\u0159eru\u0161it"</div><div class='del'>-    ::msgcat::mcset cs "blue" "modr\341"</div><div class='del'>-    ::msgcat::mcset cs "cancel" "zru\u0161it"</div><div class='del'>-    ::msgcat::mcset cs "extension" "p\u0159\355pona"</div><div class='del'>-    ::msgcat::mcset cs "extensions" "p\u0159\355pony"</div><div class='del'>-    ::msgcat::mcset cs "green" "zelen\341"</div><div class='del'>-    ::msgcat::mcset cs "ignore" "ignorovat"</div><div class='del'>-    ::msgcat::mcset cs "ok"</div><div class='del'>-    ::msgcat::mcset cs "red" "\u010derven\341"</div><div class='del'>-    ::msgcat::mcset cs "retry" "znovu"</div><div class='del'>-    ::msgcat::mcset cs "yes" "ano"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/de.msg b/ext/tk/sample/msgs_tk/de.msg<br/>deleted file mode 100644<br/>index 437f2ed9e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/de.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/de.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,88 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset de "Application Error" "Applikationsfehler"</div><div class='del'>-    ::msgcat::mcset de "Blue" "Blau"</div><div class='del'>-    ::msgcat::mcset de "Color" "Farbe"</div><div class='del'>-    ::msgcat::mcset de "Delete" "L\u00f6schen"</div><div class='del'>-    ::msgcat::mcset de "Error" "Fehler"</div><div class='del'>-    ::msgcat::mcset de "Exit" "Ende"</div><div class='del'>-    ::msgcat::mcset de "Green" "Gr\u00fcn"</div><div class='del'>-    ::msgcat::mcset de "Red" "Rot"</div><div class='del'>-    ::msgcat::mcset de "blue" "blau"</div><div class='del'>-    ::msgcat::mcset de "green" "gr\u00fcn"</div><div class='del'>-    ::msgcat::mcset de "red" "rot"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset de "&amp;Abort" "&amp;Abbruch"</div><div class='del'>-    ::msgcat::mcset de "&amp;About..." "&amp;\u00dcber..."</div><div class='del'>-    ::msgcat::mcset de "All Files" "Alle Dateien"</div><div class='del'>-    ::msgcat::mcset de "Application Error" "Applikationsfehler"</div><div class='del'>-    ::msgcat::mcset de "&amp;Blue" "&amp;Blau"</div><div class='del'>-    ::msgcat::mcset de "&amp;Cancel" "&amp;Abbruch"</div><div class='del'>-    ::msgcat::mcset de "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kann nicht in das Verzeichnis \"%1\$s\" wechseln.\nKeine Rechte vorhanden."</div><div class='del'>-    ::msgcat::mcset de "Choose Directory" "W\u00e4hle Verzeichnis"</div><div class='del'>-    ::msgcat::mcset de "&amp;Clear" "&amp;R\u00fccksetzen"</div><div class='del'>-    ::msgcat::mcset de "&amp;Clear Console" "&amp;Konsole l\u00f6schen"</div><div class='del'>-    ::msgcat::mcset de "Color" "Farbe"</div><div class='del'>-    ::msgcat::mcset de "Console" "Konsole"</div><div class='del'>-    ::msgcat::mcset de "&amp;Copy" "&amp;Kopieren"</div><div class='del'>-    ::msgcat::mcset de "Cu&amp;t" "Aus&amp;schneiden"</div><div class='del'>-    ::msgcat::mcset de "&amp;Delete" "&amp;L\u00f6schen"</div><div class='del'>-    ::msgcat::mcset de "Details &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset de "Directory \"%1\$s\" does not exist." "Das Verzeichnis \"%1\$s\" existiert nicht."</div><div class='del'>-    ::msgcat::mcset de "&amp;Directory:" "&amp;Verzeichnis:"</div><div class='del'>-    ::msgcat::mcset de "&amp;Edit" "&amp;Bearbieten"</div><div class='del'>-    ::msgcat::mcset de "Error: %1\$s" "Fehler: %1\$s"</div><div class='del'>-    ::msgcat::mcset de "E&amp;xit" "&amp;Ende"</div><div class='del'>-    ::msgcat::mcset de "&amp;File" "&amp;Datei"</div><div class='del'>-    ::msgcat::mcset de "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Die Datei \"%1\$s\" ist bereits vorhanden.\nWollen sie diese Datei \u00fcberschreiben ?"</div><div class='del'>-    ::msgcat::mcset de "File \"%1\$s\" already exists.\n\n" "Die Datei \"%1\$s\" ist bereits vorhanden.\n\n"</div><div class='del'>-    ::msgcat::mcset de "File \"%1\$s\" does not exist." "Die Datei \"%1\$s\" existiert nicht."</div><div class='del'>-    ::msgcat::mcset de "File &amp;name:" "Datei&amp;name:"</div><div class='del'>-    ::msgcat::mcset de "File &amp;names:" "Datei&amp;namen:"</div><div class='del'>-    ::msgcat::mcset de "Files of &amp;type:" "Dateien des &amp;Typs:"</div><div class='del'>-    ::msgcat::mcset de "Fi&amp;les:" "Dat&amp;eien:"</div><div class='del'>-    ::msgcat::mcset de "&amp;Filter"</div><div class='del'>-    ::msgcat::mcset de "Fil&amp;ter:"</div><div class='del'>-    ::msgcat::mcset de "&amp;Green" "&amp;Gr\u00fcn"</div><div class='del'>-    ::msgcat::mcset de "&amp;Help" "&amp;Hilfe"</div><div class='del'>-    ::msgcat::mcset de "Hi" "Hallo"</div><div class='del'>-    ::msgcat::mcset de "&amp;Hide Console" "&amp;Konsole unsichtbar machen"</div><div class='del'>-    ::msgcat::mcset de "&amp;Ignore" "&amp;Ignorieren"</div><div class='del'>-    ::msgcat::mcset de "Invalid file name \"%1\$s\"." "Ung\u00fcltiger Dateiname \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset de "Log Files" "Protokolldatei"</div><div class='del'>-    ::msgcat::mcset de "&amp;No" "&amp;Nein"</div><div class='del'>-    ::msgcat::mcset de "OK"</div><div class='del'>-    ::msgcat::mcset de "Ok"</div><div class='del'>-    ::msgcat::mcset de "Open" "\u00d6ffnen"</div><div class='del'>-    ::msgcat::mcset de "&amp;Open" "\u00d6&amp;ffnen"</div><div class='del'>-    ::msgcat::mcset de "Open Multiple Files"</div><div class='del'>-    ::msgcat::mcset de "P&amp;aste" "E&amp;inf\u00fcgen"</div><div class='del'>-    ::msgcat::mcset de "&amp;Quit" "&amp;Beenden"</div><div class='del'>-    ::msgcat::mcset de "&amp;Red" "&amp;Rot"</div><div class='del'>-    ::msgcat::mcset de "Replace existing file?" "Existierende Datei ersetzen?"</div><div class='del'>-    ::msgcat::mcset de "&amp;Retry" "&amp;Wiederholen"</div><div class='del'>-    ::msgcat::mcset de "&amp;Save" "&amp;Speichern"</div><div class='del'>-    ::msgcat::mcset de "Save As" "Speichern unter"</div><div class='del'>-    ::msgcat::mcset de "Save To Log" "In Protokoll speichern"</div><div class='del'>-    ::msgcat::mcset de "Select Log File" "Protokolldatei ausw\u00e4hlen"</div><div class='del'>-    ::msgcat::mcset de "Select a file to source" "Auszuf\u00fchrende Datei ausw\u00e4hlen"</div><div class='del'>-    ::msgcat::mcset de "&amp;Selection:" "Auswah&amp;l:"</div><div class='del'>-    ::msgcat::mcset de "Skip Messages" "Weitere Nachrichten \u00fcberspringen"</div><div class='del'>-    ::msgcat::mcset de "&amp;Source..." "&amp;Ausf\u00fchren..."</div><div class='del'>-    ::msgcat::mcset de "Tcl Scripts" "Tcl-Skripte"</div><div class='del'>-    ::msgcat::mcset de "Tcl for Windows" "Tcl f\u00fcr Windows"</div><div class='del'>-    ::msgcat::mcset de "Text Files" "Textdateien"</div><div class='del'>-    ::msgcat::mcset de "&amp;Yes" "&amp;Ja"</div><div class='del'>-    ::msgcat::mcset de "abort" "abbrechen"</div><div class='del'>-    ::msgcat::mcset de "blue" "blau"</div><div class='del'>-    ::msgcat::mcset de "cancel" "abbrechen"</div><div class='del'>-    ::msgcat::mcset de "extension" "Erweiterung"</div><div class='del'>-    ::msgcat::mcset de "extensions" "Erweiterungen"</div><div class='del'>-    ::msgcat::mcset de "green" "gr\u00fcn"</div><div class='del'>-    ::msgcat::mcset de "ignore" "ignorieren"</div><div class='del'>-    ::msgcat::mcset de "ok"</div><div class='del'>-    ::msgcat::mcset de "red" "rot"</div><div class='del'>-    ::msgcat::mcset de "retry" "wiederholen"</div><div class='del'>-    ::msgcat::mcset de "yes" "ja"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/el.msg b/ext/tk/sample/msgs_tk/el.msg<br/>deleted file mode 100644<br/>index 1e3a539647..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/el.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/el.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,103 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset el "Application Error"  "\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2"</div><div class='del'>-    ::msgcat::mcset el "Blue"     "\u039c\u03c0\u03bb\u03b5"</div><div class='del'>-    ::msgcat::mcset el "Color"    "\u03a7\u03c1\u03ce\u03bc\u03b1"</div><div class='del'>-    ::msgcat::mcset el "Delete"   "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae"</div><div class='del'>-    ::msgcat::mcset el "Error"	  "\u039b\u03ac\u03b8\u03bf\u03c2"</div><div class='del'>-    ::msgcat::mcset el "Exit"     "\u0388\u03be\u03bf\u03b4\u03bf\u03c2"</div><div class='del'>-    ::msgcat::mcset el "Green"    "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf"</div><div class='del'>-    ::msgcat::mcset el "Red"      "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf"</div><div class='del'>-    ::msgcat::mcset el "blue"     "\u03bc\u03c0\u03bb\u03b5"</div><div class='del'>-    ::msgcat::mcset el "green"    "\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf"</div><div class='del'>-    ::msgcat::mcset el "red"      "\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# followings are same to original file included into Tk8.5a1's widget demos. </div><div class='del'>-</div><div class='del'>-## Messages for the Greek (Hellenic - "el") language.</div><div class='del'>-## Please report any changes/suggestions to:</div><div class='del'>-##    petasis@iit.demokritos.gr</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset el "&amp;Abort"              "\u03a4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2"</div><div class='del'>-    ::msgcat::mcset el "About..."           "\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac..."</div><div class='del'>-    ::msgcat::mcset el "All Files"          "\u038c\u03bb\u03b1 \u03c4\u03b1 \u0391\u03c1\u03c7\u03b5\u03af\u03b1"</div><div class='del'>-    ::msgcat::mcset el "Application Error"  "\u039b\u03ac\u03b8\u03bf\u03c2 \u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2"</div><div class='del'>-    ::msgcat::mcset el "&amp;Blue"               "\u039c\u03c0\u03bb\u03b5"</div><div class='del'>-    ::msgcat::mcset el "&amp;Cancel"             "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7"</div><div class='del'>-    ::msgcat::mcset el \</div><div class='del'>-"Cannot change to the directory \"%1\$s\".\nPermission denied." \</div><div class='del'>-"\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5 \u03c3\u03b5 \"%1\$s\".\n\u0397 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9."</div><div class='del'>-    ::msgcat::mcset el "Choose Directory"   "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u039a\u03b1\u03c4\u03b1\u03bb\u03cc\u03b3\u03bf\u03c5"</div><div class='del'>-    ::msgcat::mcset el "Clear"              "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2"</div><div class='del'>-    ::msgcat::mcset el "Color"              "\u03a7\u03c1\u03ce\u03bc\u03b1"</div><div class='del'>-    ::msgcat::mcset el "Console"            "\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1"</div><div class='del'>-    ::msgcat::mcset el "Copy"               "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae"</div><div class='del'>-    ::msgcat::mcset el "Cut"                "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae"</div><div class='del'>-    ::msgcat::mcset el "Delete"             "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae"</div><div class='del'>-    ::msgcat::mcset el "Details &gt;&gt;"         "\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2 &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset el "Directory \"%1\$s\" does not exist." \</div><div class='del'>-                                        "\u039f \u03ba\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2 \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9."</div><div class='del'>-    ::msgcat::mcset el "&amp;Directory:"         "&amp;\u039a\u03b1\u03c4\u03ac\u03bb\u03bf\u03b3\u03bf\u03c2:"</div><div class='del'>-    ::msgcat::mcset el "Error: %1\$s"       "\u039b\u03ac\u03b8\u03bf\u03c2: %1\$s"</div><div class='del'>-    ::msgcat::mcset el "Exit"               "\u0388\u03be\u03bf\u03b4\u03bf\u03c2"</div><div class='del'>-    ::msgcat::mcset el \</div><div class='del'>-               "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \</div><div class='del'>-               "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03ba\u03b1\u03bb\u03c5\u03c6\u03b8\u03b5\u03af;"</div><div class='del'>-    ::msgcat::mcset el "File \"%1\$s\" already exists.\n\n" \</div><div class='del'>-                   "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03ae\u03b4\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9.\n\n"</div><div class='del'>-    ::msgcat::mcset el "File \"%1\$s\" does not exist." \</div><div class='del'>-                   "\u03a4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \"%1\$s\" \u03b4\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9."</div><div class='del'>-    ::msgcat::mcset el "File &amp;name:"         "\u038c&amp;\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5:"</div><div class='del'>-    ::msgcat::mcset el "File &amp;names:"        "\u038c&amp;\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd:"</div><div class='del'>-    ::msgcat::mcset el "Files of &amp;type:"     "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5 &amp;\u03c4\u03cd\u03c0\u03bf\u03c5:"</div><div class='del'>-    ::msgcat::mcset el "Fi&amp;les:"             "\u0391\u03c1\u03c7\u03b5\u03af\u03b1:"</div><div class='del'>-    ::msgcat::mcset el "&amp;Filter"             "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf"</div><div class='del'>-    ::msgcat::mcset el "Fil&amp;ter:"            "\u03a6\u03af\u03bb\u03c4\u03c1\u03bf:"</div><div class='del'>-    ::msgcat::mcset el "&amp;Green"              "\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf"</div><div class='del'>-    ::msgcat::mcset el "Hi"                 "\u0393\u03b5\u03b9\u03b1"</div><div class='del'>-    ::msgcat::mcset el "Hide Console"       "\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03ba\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1\u03c2"</div><div class='del'>-    ::msgcat::mcset el "&amp;Ignore"             "\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7"</div><div class='del'>-    ::msgcat::mcset el "Invalid file name \"%1\$s\"." \</div><div class='del'>-                   "\u0386\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset el "Log Files"          "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2"</div><div class='del'>-    ::msgcat::mcset el "&amp;No"                 "\u038c\u03c7\u03b9"</div><div class='del'>-    ::msgcat::mcset el "&amp;OK"                 "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9"</div><div class='del'>-    ::msgcat::mcset el "&amp;Ok"                 "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9"</div><div class='del'>-    ::msgcat::mcset el "Open"               "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1"</div><div class='del'>-    ::msgcat::mcset el "&amp;Open"               "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1"</div><div class='del'>-    ::msgcat::mcset el "Open Multiple Files" \</div><div class='del'>-                                        "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bf\u03bb\u03bb\u03b1\u03c0\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd"</div><div class='del'>-    ::msgcat::mcset el "Paste"              "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7"</div><div class='del'>-    ::msgcat::mcset el "Quit"               "\u0388\u03be\u03bf\u03b4\u03bf\u03c2"</div><div class='del'>-    ::msgcat::mcset el "&amp;Red"                "\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf"</div><div class='del'>-    ::msgcat::mcset el "Replace existing file?" \</div><div class='del'>-                                        "\u0395\u03c0\u03b9\u03ba\u03ac\u03bb\u03c5\u03c8\u03b7 \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5;"</div><div class='del'>-    ::msgcat::mcset el "&amp;Retry"              "\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac"</div><div class='del'>-    ::msgcat::mcset el "&amp;Save"               "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7"</div><div class='del'>-    ::msgcat::mcset el "Save As"            "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03b1\u03bd"</div><div class='del'>-    ::msgcat::mcset el "Save To Log"        "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2"</div><div class='del'>-    ::msgcat::mcset el "Select Log File"    "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03b1\u03c4\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2"</div><div class='del'>-    ::msgcat::mcset el "Select a file to source" \</div><div class='del'>-                                        "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf \u03b3\u03b9\u03b1 \u03b5\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7"</div><div class='del'>-    ::msgcat::mcset el "&amp;Selection:"         "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae:"</div><div class='del'>-    ::msgcat::mcset el "Skip Messages"      "\u0391\u03c0\u03bf\u03c6\u03c5\u03b3\u03ae \u03bc\u03c5\u03bd\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd"</div><div class='del'>-    ::msgcat::mcset el "Source..."          "\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7..."</div><div class='del'>-    ::msgcat::mcset el "Tcl Scripts"        "Tcl Scripts"</div><div class='del'>-    ::msgcat::mcset el "Tcl for Windows"    "Tcl \u03b3\u03b9\u03b1 Windows"</div><div class='del'>-    ::msgcat::mcset el "Text Files"         "\u0391\u03c1\u03c7\u03b5\u03af\u03b1 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5"</div><div class='del'>-    ::msgcat::mcset el "&amp;Yes"                "\u039d\u03b1\u03b9"</div><div class='del'>-    ::msgcat::mcset el "abort"              "\u03c4\u03b5\u03c1\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03cc\u03c2"</div><div class='del'>-    ::msgcat::mcset el "blue"               "\u03bc\u03c0\u03bb\u03b5"</div><div class='del'>-    ::msgcat::mcset el "cancel"             "\u03b1\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7"</div><div class='del'>-    ::msgcat::mcset el "extension"          "\u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7"</div><div class='del'>-    ::msgcat::mcset el "extensions"         "\u03b5\u03c0\u03b5\u03ba\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2"</div><div class='del'>-    ::msgcat::mcset el "green"              "\u03c0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf"</div><div class='del'>-    ::msgcat::mcset el "ignore"             "\u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7"</div><div class='del'>-    ::msgcat::mcset el "ok"                 "\u03b5\u03bd\u03c4\u03ac\u03be\u03b5\u03b9"</div><div class='del'>-    ::msgcat::mcset el "red"                "\u03ba\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf"</div><div class='del'>-    ::msgcat::mcset el "retry"              "\u03c0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b7\u03c3\u03b5 \u03be\u03b1\u03bd\u03ac"</div><div class='del'>-    ::msgcat::mcset el "yes"                "\u03bd\u03b1\u03b9"</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/en.msg b/ext/tk/sample/msgs_tk/en.msg<br/>deleted file mode 100644<br/>index de586d195e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/en.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/en.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,83 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset en "Application Error"</div><div class='del'>-    ::msgcat::mcset en "Blue"</div><div class='del'>-    ::msgcat::mcset en "Color"</div><div class='del'>-    ::msgcat::mcset en "Delete"</div><div class='del'>-    ::msgcat::mcset en "Error"</div><div class='del'>-    ::msgcat::mcset en "Green"</div><div class='del'>-    ::msgcat::mcset en "Red"</div><div class='del'>-    ::msgcat::mcset en "blue"</div><div class='del'>-    ::msgcat::mcset en "green"</div><div class='del'>-    ::msgcat::mcset en "red"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset en "&amp;Abort"</div><div class='del'>-    ::msgcat::mcset en "About..."</div><div class='del'>-    ::msgcat::mcset en "All Files"</div><div class='del'>-    ::msgcat::mcset en "Application Error"</div><div class='del'>-    ::msgcat::mcset en "&amp;Blue"</div><div class='del'>-    ::msgcat::mcset en "&amp;Cancel"</div><div class='del'>-    ::msgcat::mcset en "Cannot change to the directory \"%1\$s\".\nPermission denied."</div><div class='del'>-    ::msgcat::mcset en "Choose Directory"</div><div class='del'>-    ::msgcat::mcset en "Clear"</div><div class='del'>-    ::msgcat::mcset en "Color"</div><div class='del'>-    ::msgcat::mcset en "Console"</div><div class='del'>-    ::msgcat::mcset en "Copy"</div><div class='del'>-    ::msgcat::mcset en "Cut"</div><div class='del'>-    ::msgcat::mcset en "Delete"</div><div class='del'>-    ::msgcat::mcset en "Details &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset en "Directory \"%1\$s\" does not exist."</div><div class='del'>-    ::msgcat::mcset en "&amp;Directory:"</div><div class='del'>-    ::msgcat::mcset en "Error: %1\$s"</div><div class='del'>-    ::msgcat::mcset en "Exit"</div><div class='del'>-    ::msgcat::mcset en "File \"%1\$s\" already exists.\nDo you want to overwrite it?"</div><div class='del'>-    ::msgcat::mcset en "File \"%1\$s\" already exists.\n\n"</div><div class='del'>-    ::msgcat::mcset en "File \"%1\$s\" does not exist."</div><div class='del'>-    ::msgcat::mcset en "File &amp;name:"</div><div class='del'>-    ::msgcat::mcset en "File &amp;names:"</div><div class='del'>-    ::msgcat::mcset en "Files of &amp;type:"</div><div class='del'>-    ::msgcat::mcset en "Fi&amp;les:"</div><div class='del'>-    ::msgcat::mcset en "&amp;Filter"</div><div class='del'>-    ::msgcat::mcset en "Fil&amp;ter:"</div><div class='del'>-    ::msgcat::mcset en "&amp;Green"</div><div class='del'>-    ::msgcat::mcset en "Hi"</div><div class='del'>-    ::msgcat::mcset en "Hide Console"</div><div class='del'>-    ::msgcat::mcset en "&amp;Ignore"</div><div class='del'>-    ::msgcat::mcset en "Invalid file name \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset en "Log Files"</div><div class='del'>-    ::msgcat::mcset en "&amp;No"</div><div class='del'>-    ::msgcat::mcset en "&amp;OK"</div><div class='del'>-    ::msgcat::mcset en "Ok"</div><div class='del'>-    ::msgcat::mcset en "Open"</div><div class='del'>-    ::msgcat::mcset en "&amp;Open"</div><div class='del'>-    ::msgcat::mcset en "Open Multiple Files"</div><div class='del'>-    ::msgcat::mcset en "Paste"</div><div class='del'>-    ::msgcat::mcset en "Quit"</div><div class='del'>-    ::msgcat::mcset en "&amp;Red"</div><div class='del'>-    ::msgcat::mcset en "Replace existing file?"</div><div class='del'>-    ::msgcat::mcset en "&amp;Retry"</div><div class='del'>-    ::msgcat::mcset en "&amp;Save"</div><div class='del'>-    ::msgcat::mcset en "Save As"</div><div class='del'>-    ::msgcat::mcset en "Save To Log"</div><div class='del'>-    ::msgcat::mcset en "Select Log File"</div><div class='del'>-    ::msgcat::mcset en "Select a file to source"</div><div class='del'>-    ::msgcat::mcset en "&amp;Selection:"</div><div class='del'>-    ::msgcat::mcset en "Skip Messages"</div><div class='del'>-    ::msgcat::mcset en "Source..."</div><div class='del'>-    ::msgcat::mcset en "Tcl Scripts"</div><div class='del'>-    ::msgcat::mcset en "Tcl for Windows"</div><div class='del'>-    ::msgcat::mcset en "Text Files"</div><div class='del'>-    ::msgcat::mcset en "&amp;Yes"</div><div class='del'>-    ::msgcat::mcset en "abort"</div><div class='del'>-    ::msgcat::mcset en "blue"</div><div class='del'>-    ::msgcat::mcset en "cancel"</div><div class='del'>-    ::msgcat::mcset en "extension"</div><div class='del'>-    ::msgcat::mcset en "extensions"</div><div class='del'>-    ::msgcat::mcset en "green"</div><div class='del'>-    ::msgcat::mcset en "ignore"</div><div class='del'>-    ::msgcat::mcset en "ok"</div><div class='del'>-    ::msgcat::mcset en "red"</div><div class='del'>-    ::msgcat::mcset en "retry"</div><div class='del'>-    ::msgcat::mcset en "yes"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/en_gb.msg b/ext/tk/sample/msgs_tk/en_gb.msg<br/>deleted file mode 100644<br/>index 1aa5b49380..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/en_gb.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/en_gb.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset en_gb Color Colour</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset en_gb Color Colour</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/eo.msg b/ext/tk/sample/msgs_tk/eo.msg<br/>deleted file mode 100644<br/>index e683cef297..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/eo.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/eo.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset eo "Application Error" "Aplikoerraro"</div><div class='del'>-    ::msgcat::mcset eo "Blue" "Blua"</div><div class='del'>-    ::msgcat::mcset eo "Color" "Farbo"</div><div class='del'>-    ::msgcat::mcset eo "Delete" "Forprenu"</div><div class='del'>-    ::msgcat::mcset eo "Error" "Eraro"</div><div class='del'>-    ::msgcat::mcset eo "Exit" "Eliru"</div><div class='del'>-    ::msgcat::mcset eo "Green" "Verda"</div><div class='del'>-    ::msgcat::mcset eo "Red" "Rosa"</div><div class='del'>-    ::msgcat::mcset eo "blue" "blua"</div><div class='del'>-    ::msgcat::mcset eo "green" "verda"</div><div class='del'>-    ::msgcat::mcset eo "red" "ru\u011da"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset eo "&amp;Abort" "&amp;\u0108esigo"</div><div class='del'>-    ::msgcat::mcset eo "&amp;About..." "Pri..."</div><div class='del'>-    ::msgcat::mcset eo "All Files" "\u0108ioj dosieroj"</div><div class='del'>-    ::msgcat::mcset eo "Application Error" "Aplikoerraro"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Blue" "&amp;Blua"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Cancel" "&amp;Rezignu"</div><div class='del'>-    ::msgcat::mcset eo "Cannot change to the directory \"%1\$s\".\nPermission denied." "Neeble \u0109angi al dosierulon \"%1\$s\".\nVi ne rajtas tion."</div><div class='del'>-    ::msgcat::mcset eo "Choose Directory" "Elektu Dosierujo"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Clear" "&amp;Klaru"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Clear Console" "&amp;Klaru konzolon"</div><div class='del'>-    ::msgcat::mcset eo "Color" "Farbo"</div><div class='del'>-    ::msgcat::mcset eo "Console" "Konzolo"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Copy" "&amp;Kopiu"</div><div class='del'>-    ::msgcat::mcset eo "Cu&amp;t" "&amp;Enpo\u015digu"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Delete" "&amp;Forprenu"</div><div class='del'>-    ::msgcat::mcset eo "Details &gt;&gt;" "Detaloj &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset eo "Directory \"%1\$s\" does not exist." "La dosierujo \"%1\$s\" ne ekzistas."</div><div class='del'>-    ::msgcat::mcset eo "&amp;Directory:" "&amp;Dosierujo:"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Edit" "&amp;Redaktu"</div><div class='del'>-    ::msgcat::mcset eo "Error: %1\$s" "Eraro: %1\$s"</div><div class='del'>-    ::msgcat::mcset eo "E&amp;xit" "&amp;Eliru"</div><div class='del'>-    ::msgcat::mcset eo "&amp;File" "&amp;Dosiero"</div><div class='del'>-    ::msgcat::mcset eo "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "La dosiero \"%1\$s\" jam ekzistas.\n\u0108u vi volas anstata\u00fbigi la dosieron?"</div><div class='del'>-    ::msgcat::mcset eo "File \"%1\$s\" already exists.\n\n" "La dosiero \"%1\$s\" jam egzistas. \n\n"</div><div class='del'>-    ::msgcat::mcset eo "File \"%1\$s\" does not exist." "La dosierp \"%1\$s\" ne estas."</div><div class='del'>-    ::msgcat::mcset eo "File &amp;name:" "Dosiero&amp;nomo:"</div><div class='del'>-    ::msgcat::mcset eo "File &amp;names:" "Dosiero&amp;nomoj:"</div><div class='del'>-    ::msgcat::mcset eo "Files of &amp;type:" "Dosieroj de &amp;Typo:"</div><div class='del'>-    ::msgcat::mcset eo "Fi&amp;les:" "Do&amp;sieroj:"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Filter" "&amp;Filtrilo"</div><div class='del'>-    ::msgcat::mcset eo "Fil&amp;ter:" "&amp;Filtrilo:"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Green" "&amp;Verda"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Help" "&amp;Helpu"</div><div class='del'>-    ::msgcat::mcset eo "Hi" "Saluton"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Hide Console" "&amp;Ka\u015du konzolon"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Ignore" "&amp;Ignoru"</div><div class='del'>-    ::msgcat::mcset eo "Invalid file name \"%1\$s\"." "Malvalida dosieronomo \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset eo "Log Files" "Protokolo"</div><div class='del'>-    ::msgcat::mcset eo "&amp;No" "&amp;Ne"</div><div class='del'>-    ::msgcat::mcset eo "OK"</div><div class='del'>-    ::msgcat::mcset eo "Ok"</div><div class='del'>-    ::msgcat::mcset eo "Open" "Malfermu"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Open" "&amp;Malfermu"</div><div class='del'>-    ::msgcat::mcset eo "Open Multiple Files" "Melfermu multan dosierojn"</div><div class='del'>-    ::msgcat::mcset eo "P&amp;aste" "&amp;Elpo\u015digi"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Quit" "&amp;Finigu"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Red" "&amp;Rosa"</div><div class='del'>-    ::msgcat::mcset eo "Replace existing file?" "\u0108u anstata\u00fbu ekzistantan dosieron?"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Retry" "&amp;Ripetu"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Save" "&amp;Savu"</div><div class='del'>-    ::msgcat::mcset eo "Save As" "Savu kiel"</div><div class='del'>-    ::msgcat::mcset eo "Save To Log" "Savu en protokolon"</div><div class='del'>-    ::msgcat::mcset eo "Select Log File" "Elektu prokolodosieron"</div><div class='del'>-    ::msgcat::mcset eo "Select a file to source" "Elektu dosieron por interpreti"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Selection:" "&amp;Elekto:"</div><div class='del'>-    ::msgcat::mcset eo "Skip Messages" "transsaltu pluajn mesa\u011dojn"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Source..." "&amp;Fontoprogramo..."</div><div class='del'>-    ::msgcat::mcset eo "Tcl Scripts" "Tcl-skriptoj"</div><div class='del'>-    ::msgcat::mcset eo "Tcl for Windows" "Tcl por vindoso"</div><div class='del'>-    ::msgcat::mcset eo "Text Files" "Tekstodosierojn"</div><div class='del'>-    ::msgcat::mcset eo "&amp;Yes" "&amp;Jes"</div><div class='del'>-    ::msgcat::mcset eo "abort" "\u0109esigo"</div><div class='del'>-    ::msgcat::mcset eo "blue" "blua"</div><div class='del'>-    ::msgcat::mcset eo "cancel" "rezignu"</div><div class='del'>-    ::msgcat::mcset eo "extension" "ekspansio"</div><div class='del'>-    ::msgcat::mcset eo "extensions" "ekspansioj"</div><div class='del'>-    ::msgcat::mcset eo "green" "verda"</div><div class='del'>-    ::msgcat::mcset eo "ignore" "ignorieren"</div><div class='del'>-    ::msgcat::mcset eo "red" "ru\u011da"</div><div class='del'>-    ::msgcat::mcset eo "retry" "ripetu"</div><div class='del'>-    ::msgcat::mcset eo "yes" "jes"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/es.msg b/ext/tk/sample/msgs_tk/es.msg<br/>deleted file mode 100644<br/>index ba981236a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/es.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/es.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset es "Application Error" "Error de la aplicaci\u00f3n"</div><div class='del'>-    ::msgcat::mcset es "Blue" "Azul"</div><div class='del'>-    ::msgcat::mcset es "Color" "Color"</div><div class='del'>-    ::msgcat::mcset es "Delete" "Borrar"</div><div class='del'>-    ::msgcat::mcset es "Error" "Error"</div><div class='del'>-    ::msgcat::mcset es "Exit" "Salir"</div><div class='del'>-    ::msgcat::mcset es "Green" "Verde"</div><div class='del'>-    ::msgcat::mcset es "Red" "Rojo"</div><div class='del'>-    ::msgcat::mcset es "blue" "azul"</div><div class='del'>-    ::msgcat::mcset es "green" "verde"</div><div class='del'>-    ::msgcat::mcset es "red" "rojo"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset es "&amp;Abort" "&amp;Abortar"</div><div class='del'>-    ::msgcat::mcset es "About..." "Acerca de ..."</div><div class='del'>-    ::msgcat::mcset es "All Files" "Todos los archivos"</div><div class='del'>-    ::msgcat::mcset es "Application Error" "Error de la aplicaci\u00f3n"</div><div class='del'>-    ::msgcat::mcset es "&amp;Blue" "&amp;Azul"</div><div class='del'>-    ::msgcat::mcset es "&amp;Cancel" "&amp;Cancelar"</div><div class='del'>-    ::msgcat::mcset es "Cannot change to the directory \"%1\$s\".\nPermission denied." "No es posible acceder al directorio \"%1\$s\".\nPermiso denegado."</div><div class='del'>-    ::msgcat::mcset es "Choose Directory" "Elegir directorio"</div><div class='del'>-    ::msgcat::mcset es "Clear" "Borrar"</div><div class='del'>-    ::msgcat::mcset es "Color" "Color"</div><div class='del'>-    ::msgcat::mcset es "Console" "Consola"</div><div class='del'>-    ::msgcat::mcset es "Copy" "Copiar"</div><div class='del'>-    ::msgcat::mcset es "Cut" "Cortar"</div><div class='del'>-    ::msgcat::mcset es "Delete" "Borrar"</div><div class='del'>-    ::msgcat::mcset es "Details &gt;&gt;" "Detalles &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset es "Directory \"%1\$s\" does not exist." "El directorio \"%1\$s\" no existe."</div><div class='del'>-    ::msgcat::mcset es "&amp;Directory:" "&amp;Directorio:"</div><div class='del'>-    ::msgcat::mcset es "Error: %1\$s" "Error: %1\$s"</div><div class='del'>-    ::msgcat::mcset es "Exit" "Salir"</div><div class='del'>-    ::msgcat::mcset es "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "El archivo \"%1\$s\" ya existe.\nDesea sobreescribirlo?"</div><div class='del'>-    ::msgcat::mcset es "File \"%1\$s\" already exists.\n\n" "El archivo \"%1\$s\" ya existe.\n\n"</div><div class='del'>-    ::msgcat::mcset es "File \"%1\$s\" does not exist." "El archivo \"%1\$s\" no existe."</div><div class='del'>-    ::msgcat::mcset es "File &amp;name:" "&amp;Nombre de archivo:"</div><div class='del'>-    ::msgcat::mcset es "File &amp;names:" "&amp;Nombres de archivo:"</div><div class='del'>-    ::msgcat::mcset es "Files of &amp;type:" "Archivos de &amp;tipo:"</div><div class='del'>-    ::msgcat::mcset es "Fi&amp;les:" "&amp;Archivos:"</div><div class='del'>-    ::msgcat::mcset es "&amp;Filter" "&amp;Filtro"</div><div class='del'>-    ::msgcat::mcset es "Fil&amp;ter:" "Fil&amp;tro:"</div><div class='del'>-    ::msgcat::mcset es "&amp;Green" "&amp;Verde"</div><div class='del'>-    ::msgcat::mcset es "Hi" "Hola"</div><div class='del'>-    ::msgcat::mcset es "Hide Console" "Esconder la consola"</div><div class='del'>-    ::msgcat::mcset es "&amp;Ignore" "&amp;Ignorar"</div><div class='del'>-    ::msgcat::mcset es "Invalid file name \"%1\$s\"." "Nombre de archivo inv\u00e1lido \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset es "Log Files" "Ficheros de traza"</div><div class='del'>-    ::msgcat::mcset es "&amp;No" "&amp;No"</div><div class='del'>-    ::msgcat::mcset es "&amp;OK" "&amp;OK"</div><div class='del'>-    ::msgcat::mcset es "Ok" "Ok"</div><div class='del'>-    ::msgcat::mcset es "Open" "Abrir"</div><div class='del'>-    ::msgcat::mcset es "&amp;Open" "&amp;Abrir"</div><div class='del'>-    ::msgcat::mcset es "Open Multiple Files" "Abrir m\u00faltiples archivos"</div><div class='del'>-    ::msgcat::mcset es "Paste" "Pegar"</div><div class='del'>-    ::msgcat::mcset es "Quit" "Abandonar"</div><div class='del'>-    ::msgcat::mcset es "&amp;Red" "&amp;Rojo"</div><div class='del'>-    ::msgcat::mcset es "Replace existing file?" "Reemplazar el archivo existente?"</div><div class='del'>-    ::msgcat::mcset es "&amp;Retry" "&amp;Reintentar"</div><div class='del'>-    ::msgcat::mcset es "&amp;Save" "&amp;Salvar"</div><div class='del'>-    ::msgcat::mcset es "Save As" "Salvar como"</div><div class='del'>-    ::msgcat::mcset es "Save To Log" "Salvar al archivo de traza"</div><div class='del'>-    ::msgcat::mcset es "Select Log File" "Elegir un archivo de traza"</div><div class='del'>-    ::msgcat::mcset es "Select a file to source" "Seleccionar un archivo a evaluar"</div><div class='del'>-    ::msgcat::mcset es "&amp;Selection:" "&amp;Selecci\u00f3n:"</div><div class='del'>-    ::msgcat::mcset es "Skip Messages" "Omitir los mensajes"</div><div class='del'>-    ::msgcat::mcset es "Source..." "Evaluar..."</div><div class='del'>-    ::msgcat::mcset es "Tcl Scripts" "Scripts Tcl"</div><div class='del'>-    ::msgcat::mcset es "Tcl for Windows" "Tcl para Windows"</div><div class='del'>-    ::msgcat::mcset es "Text Files" "Archivos de texto"</div><div class='del'>-    ::msgcat::mcset es "&amp;Yes" "&amp;S\u00ed" </div><div class='del'>-    ::msgcat::mcset es "abort" "abortar"</div><div class='del'>-    ::msgcat::mcset es "blue" "azul"</div><div class='del'>-    ::msgcat::mcset es "cancel" "cancelar"</div><div class='del'>-    ::msgcat::mcset es "extension" "extensi\u00f3n"</div><div class='del'>-    ::msgcat::mcset es "extensions" "extensiones"</div><div class='del'>-    ::msgcat::mcset es "green" "verde"</div><div class='del'>-    ::msgcat::mcset es "ignore" "ignorar"</div><div class='del'>-    ::msgcat::mcset es "ok" "ok"</div><div class='del'>-    ::msgcat::mcset es "red" "rojo"</div><div class='del'>-    ::msgcat::mcset es "retry" "reintentar"</div><div class='del'>-    ::msgcat::mcset es "yes" "s\u00ed"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/fr.msg b/ext/tk/sample/msgs_tk/fr.msg<br/>deleted file mode 100644<br/>index ebbba48ca1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/fr.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/fr.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset fr "Application Error" "Erreur d'application"</div><div class='del'>-    ::msgcat::mcset fr "Blue" "Bleu"</div><div class='del'>-    ::msgcat::mcset fr "Color" "Couleur"</div><div class='del'>-    ::msgcat::mcset fr "Delete" "Effacer"</div><div class='del'>-    ::msgcat::mcset fr "Error" "Erreur"</div><div class='del'>-    ::msgcat::mcset fr "Exit" "Quitter"</div><div class='del'>-    ::msgcat::mcset fr "Green" "Vert"</div><div class='del'>-    ::msgcat::mcset fr "Red" "Rouge"</div><div class='del'>-    ::msgcat::mcset fr "blue" "bleu"</div><div class='del'>-    ::msgcat::mcset fr "green" "vert"</div><div class='del'>-    ::msgcat::mcset fr "red" "rouge"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset fr "&amp;Abort" "&amp;Annuler"</div><div class='del'>-    ::msgcat::mcset fr "About..." "\u00c0 propos..."</div><div class='del'>-    ::msgcat::mcset fr "All Files" "Tous les fichiers"</div><div class='del'>-    ::msgcat::mcset fr "Application Error" "Erreur d'application"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Blue" "&amp;Bleu"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Cancel" "&amp;Annuler"</div><div class='del'>-    ::msgcat::mcset fr "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossible d'acc\u00e9der au r\u00e9pertoire \"%1\$s\".\nPermission refus\u00e9e."</div><div class='del'>-    ::msgcat::mcset fr "Choose Directory" "Choisir r\u00e9pertoire"</div><div class='del'>-    ::msgcat::mcset fr "Clear" "Effacer"</div><div class='del'>-    ::msgcat::mcset fr "Color" "Couleur"</div><div class='del'>-    ::msgcat::mcset fr "Console"</div><div class='del'>-    ::msgcat::mcset fr "Copy" "Copier"</div><div class='del'>-    ::msgcat::mcset fr "Cut" "Couper"</div><div class='del'>-    ::msgcat::mcset fr "Delete" "Effacer"</div><div class='del'>-    ::msgcat::mcset fr "Details &gt;&gt;" "D\u00e9tails &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset fr "Directory \"%1\$s\" does not exist." "Le r\u00e9pertoire \"%1\$s\" n'existe pas."</div><div class='del'>-    ::msgcat::mcset fr "&amp;Directory:" "&amp;R\u00e9pertoire:"</div><div class='del'>-    ::msgcat::mcset fr "Error: %1\$s" "Erreur: %1\$s"</div><div class='del'>-    ::msgcat::mcset fr "Exit" "Quitter"</div><div class='del'>-    ::msgcat::mcset fr "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\nVoulez-vous l'\u00e9craser?"</div><div class='del'>-    ::msgcat::mcset fr "File \"%1\$s\" already exists.\n\n" "Le fichier \"%1\$s\" existe d\u00e9j\u00e0.\n\n"</div><div class='del'>-    ::msgcat::mcset fr "File \"%1\$s\" does not exist." "Le fichier \"%1\$s\" n'existe pas."</div><div class='del'>-    ::msgcat::mcset fr "File &amp;name:" "&amp;Nom de fichier:"</div><div class='del'>-    ::msgcat::mcset fr "File &amp;names:" "&amp;Noms de fichiers:"</div><div class='del'>-    ::msgcat::mcset fr "Files of &amp;type:" "&amp;Type de fichiers:"</div><div class='del'>-    ::msgcat::mcset fr "Fi&amp;les:" "Fich&amp;iers:"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Filter" "&amp;Filtre"</div><div class='del'>-    ::msgcat::mcset fr "Fil&amp;ter:" "Fil&amp;tre:"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Green" "&amp;Vert"</div><div class='del'>-    ::msgcat::mcset fr "Hi" "Salut"</div><div class='del'>-    ::msgcat::mcset fr "Hide Console" "Cacher la Console"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Ignore" "&amp;Ignorer"</div><div class='del'>-    ::msgcat::mcset fr "Invalid file name \"%1\$s\"." "Nom de fichier invalide \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset fr "Log Files" "Fichiers de trace"</div><div class='del'>-    ::msgcat::mcset fr "&amp;No" "&amp;Non"</div><div class='del'>-    ::msgcat::mcset fr "&amp;OK"</div><div class='del'>-    ::msgcat::mcset fr "Ok"</div><div class='del'>-    ::msgcat::mcset fr "Open" "Ouvrir"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Open" "&amp;Ouvrir"</div><div class='del'>-    ::msgcat::mcset fr "Open Multiple Files" "Ouvrir plusieurs fichiers"</div><div class='del'>-    ::msgcat::mcset fr "Paste" "Coller"</div><div class='del'>-    ::msgcat::mcset fr "Quit" "Quitter"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Red" "&amp;Rouge"</div><div class='del'>-    ::msgcat::mcset fr "Replace existing file?" "Remplacer le fichier existant?"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Retry" "&amp;R\u00e9-essayer"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Save" "&amp;Sauvegarder"</div><div class='del'>-    ::msgcat::mcset fr "Save As" "Sauvegarder sous"</div><div class='del'>-    ::msgcat::mcset fr "Save To Log" "Sauvegarde au fichier de trace"</div><div class='del'>-    ::msgcat::mcset fr "Select Log File" "Choisir un fichier de trace"</div><div class='del'>-    ::msgcat::mcset fr "Select a file to source" "Choisir un fichier \u00e0 \u00e9valuer"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Selection:" "&amp;S\u00e9lection:"</div><div class='del'>-    ::msgcat::mcset fr "Skip Messages" "Omettre les messages"</div><div class='del'>-    ::msgcat::mcset fr "Source..." "\u00c9valuer..."</div><div class='del'>-    ::msgcat::mcset fr "Tcl Scripts" "Scripts Tcl"</div><div class='del'>-    ::msgcat::mcset fr "Tcl for Windows" "Tcl pour Windows"</div><div class='del'>-    ::msgcat::mcset fr "Text Files" "Fichiers texte"</div><div class='del'>-    ::msgcat::mcset fr "&amp;Yes" "&amp;Oui"</div><div class='del'>-    ::msgcat::mcset fr "abort" "abandonner"</div><div class='del'>-    ::msgcat::mcset fr "blue" "bleu"</div><div class='del'>-    ::msgcat::mcset fr "cancel" "annuler"</div><div class='del'>-    ::msgcat::mcset fr "extension"</div><div class='del'>-    ::msgcat::mcset fr "extensions"</div><div class='del'>-    ::msgcat::mcset fr "green" "vert"</div><div class='del'>-    ::msgcat::mcset fr "ignore" "ignorer"</div><div class='del'>-    ::msgcat::mcset fr "ok"</div><div class='del'>-    ::msgcat::mcset fr "red" "rouge"</div><div class='del'>-    ::msgcat::mcset fr "retry" "r\u00e9essayer"</div><div class='del'>-    ::msgcat::mcset fr "yes" "oui"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/it.msg b/ext/tk/sample/msgs_tk/it.msg<br/>deleted file mode 100644<br/>index b144fcc073..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/it.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/it.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,84 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset it "Application Error" "Errore dell' applicazione"</div><div class='del'>-    ::msgcat::mcset it "Blue" "Blu"</div><div class='del'>-    ::msgcat::mcset it "Color" "Colore"</div><div class='del'>-    ::msgcat::mcset it "Delete" "Incolla"</div><div class='del'>-    ::msgcat::mcset it "Error" "Errore"</div><div class='del'>-    ::msgcat::mcset it "Exit" "Esci"</div><div class='del'>-    ::msgcat::mcset it "Green" "Verde"</div><div class='del'>-    ::msgcat::mcset it "Red" "Rosso"</div><div class='del'>-    ::msgcat::mcset it "blue" "blu"</div><div class='del'>-    ::msgcat::mcset it "green" "verde"</div><div class='del'>-    ::msgcat::mcset it "red" "rosso"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset it "&amp;Abort" "&amp;Interrompi"</div><div class='del'>-    ::msgcat::mcset it "About..." "Informazioni ..."</div><div class='del'>-    ::msgcat::mcset it "All Files" "Tutti i file"</div><div class='del'>-    ::msgcat::mcset it "Application Error" "Errore dell' applicazione"</div><div class='del'>-    ::msgcat::mcset it "&amp;Blue" "&amp;Blu"</div><div class='del'>-    ::msgcat::mcset it "&amp;Cancel" "&amp;Annulla"</div><div class='del'>-    ::msgcat::mcset it "Cannot change to the directory \"%1\$s\".\nPermission denied." "Impossibile accedere alla directory \"%1\$s\".\nPermesso negato."</div><div class='del'>-    ::msgcat::mcset it "Choose Directory" "Scegli directory"</div><div class='del'>-    ::msgcat::mcset it "Clear" "Azzera"</div><div class='del'>-    ::msgcat::mcset it "Color" "Colore"</div><div class='del'>-    ::msgcat::mcset it "Console"</div><div class='del'>-    ::msgcat::mcset it "Copy" "Copia"</div><div class='del'>-    ::msgcat::mcset it "Cut" "Taglia"</div><div class='del'>-    ::msgcat::mcset it "Delete" "Incolla"</div><div class='del'>-    ::msgcat::mcset it "Details &gt;&gt;" "Dettagli &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset it "Directory \"%1\$s\" does not exist." "La directory \"%1\$s\" non esiste."</div><div class='del'>-    ::msgcat::mcset it "&amp;Directory:"</div><div class='del'>-    ::msgcat::mcset it "Error: %1\$s" "Errore: %1\$s"</div><div class='del'>-    ::msgcat::mcset it "Exit" "Esci"</div><div class='del'>-    ::msgcat::mcset it "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Il file \"%1\$s\" esiste gi\u00e0.\nVuoi sovrascriverlo?"</div><div class='del'>-    ::msgcat::mcset it "File \"%1\$s\" already exists.\n\n" "Il file \"%1\$s\" esiste gi\u00e0.\n\n"</div><div class='del'>-    ::msgcat::mcset it "File \"%1\$s\" does not exist." "Il file \"%1\$s\" non esiste."</div><div class='del'>-    ::msgcat::mcset it "File &amp;name:" "&amp;Nome del file:"</div><div class='del'>-    ::msgcat::mcset it "File &amp;names:" "&amp;Nomi dei file:"</div><div class='del'>-    ::msgcat::mcset it "Files of &amp;type:" "File di &amp;tipo:"</div><div class='del'>-    ::msgcat::mcset it "Fi&amp;les:" "Fi&amp;le:"</div><div class='del'>-    ::msgcat::mcset it "&amp;Filter" "&amp;Filtro"</div><div class='del'>-    ::msgcat::mcset it "Fil&amp;ter:" "Fil&amp;tro:"</div><div class='del'>-    ::msgcat::mcset it "&amp;Green" "&amp;Verde"</div><div class='del'>-    ::msgcat::mcset it "Hi" "Salve"</div><div class='del'>-    ::msgcat::mcset it "Hide Console" "Nascondi la console"</div><div class='del'>-    ::msgcat::mcset it "&amp;Ignore" "&amp;Ignora"</div><div class='del'>-    ::msgcat::mcset it "Invalid file name \"%1\$s\"." "Nome di file non valido \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset it "Log Files" "File di log"</div><div class='del'>-    ::msgcat::mcset it "&amp;No"</div><div class='del'>-    ::msgcat::mcset it "&amp;OK"</div><div class='del'>-    ::msgcat::mcset it "Ok"</div><div class='del'>-    ::msgcat::mcset it "&amp;Open" "A&amp;pri"</div><div class='del'>-    ::msgcat::mcset it "Open" "Apri"</div><div class='del'>-    ::msgcat::mcset it "Open Multiple Files" "Apri file multipli"</div><div class='del'>-    ::msgcat::mcset it "Paste" "Incolla"</div><div class='del'>-    ::msgcat::mcset it "Quit" "Esci"</div><div class='del'>-    ::msgcat::mcset it "&amp;Red" "&amp;Rosso"</div><div class='del'>-    ::msgcat::mcset it "Replace existing file?" "Sostituisci il file esistente?"</div><div class='del'>-    ::msgcat::mcset it "&amp;Retry" "&amp;Riprova"</div><div class='del'>-    ::msgcat::mcset it "&amp;Save" "&amp;Salva"</div><div class='del'>-    ::msgcat::mcset it "Save As" "Salva come"</div><div class='del'>-    ::msgcat::mcset it "Save To Log" "Salva il log"</div><div class='del'>-    ::msgcat::mcset it "Select Log File" "Scegli un file di log"</div><div class='del'>-    ::msgcat::mcset it "Select a file to source" "Scegli un file da eseguire"</div><div class='del'>-    ::msgcat::mcset it "&amp;Selection:" "&amp;Selezione:"</div><div class='del'>-    ::msgcat::mcset it "Skip Messages" "Salta i messaggi"</div><div class='del'>-    ::msgcat::mcset it "Source..." "Esegui..."</div><div class='del'>-    ::msgcat::mcset it "Tcl Scripts" "Scripts Tcl"</div><div class='del'>-    ::msgcat::mcset it "Tcl for Windows" "Tcl per Windows"</div><div class='del'>-    ::msgcat::mcset it "Text Files" "File di testo"</div><div class='del'>-    ::msgcat::mcset it "&amp;Yes" "&amp;Si"</div><div class='del'>-    ::msgcat::mcset it "abort" "interrompi"</div><div class='del'>-    ::msgcat::mcset it "blue" "blu"</div><div class='del'>-    ::msgcat::mcset it "cancel" "annulla"</div><div class='del'>-    ::msgcat::mcset it "extension" "estensione"</div><div class='del'>-    ::msgcat::mcset it "extensions" "estensioni"</div><div class='del'>-    ::msgcat::mcset it "green" "verde"</div><div class='del'>-    ::msgcat::mcset it "ignore" "ignora"</div><div class='del'>-    ::msgcat::mcset it "ok"</div><div class='del'>-    ::msgcat::mcset it "red" "rosso"</div><div class='del'>-    ::msgcat::mcset it "retry" "riprova"</div><div class='del'>-    ::msgcat::mcset it "yes" "si"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/ja.msg b/ext/tk/sample/msgs_tk/ja.msg<br/>deleted file mode 100644<br/>index 44a25839db..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/ja.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/ja.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset ja "Application Error"  "\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30A8\u30E9\u30FC"</div><div class='del'>-    ::msgcat::mcset ja "Blue"    "\u9752"</div><div class='del'>-    ::msgcat::mcset ja "Color"   "\u80CC\u666F\u8272"</div><div class='del'>-    ::msgcat::mcset ja "Delete"  "\u6D88\u53BB"</div><div class='del'>-    ::msgcat::mcset ja "Error"   "\u30A8\u30E9\u30FC"</div><div class='del'>-    ::msgcat::mcset ja "Exit"    "\u7D42\u4E86"</div><div class='del'>-    ::msgcat::mcset ja "Green"   "\u7DD1"</div><div class='del'>-    ::msgcat::mcset ja "Red"     "\u8D64"</div><div class='del'>-    ::msgcat::mcset ja "blue"    "\u9752"</div><div class='del'>-    ::msgcat::mcset ja "green"   "\u7DD1"</div><div class='del'>-    ::msgcat::mcset ja "red"     "\u8D64"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/license.terms b/ext/tk/sample/msgs_tk/license.terms<br/>deleted file mode 100644<br/>index 03ca6fcb31..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/license.terms?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/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/msgs_tk/nl.msg b/ext/tk/sample/msgs_tk/nl.msg<br/>deleted file mode 100644<br/>index d9642e808c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/nl.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/nl.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,123 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset nl "Application Error" "Toepassingsfout"</div><div class='del'>-    ::msgcat::mcset nl "Blue" "Blauw"</div><div class='del'>-    ::msgcat::mcset nl "Color" "Kleur"</div><div class='del'>-    ::msgcat::mcset nl "Delete" "Wissen"</div><div class='del'>-    ::msgcat::mcset nl "Error" "Fout"</div><div class='del'>-    ::msgcat::mcset nl "Exit" "Be\u00ebindigen"</div><div class='del'>-    ::msgcat::mcset nl "Green" "Groen"</div><div class='del'>-    ::msgcat::mcset nl "Red" "Rood"</div><div class='del'>-    ::msgcat::mcset nl "blue" "blauw"</div><div class='del'>-    ::msgcat::mcset nl "green" "groen"</div><div class='del'>-    ::msgcat::mcset nl "red" "rood"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset nl "\"%1\$s\" must be an absolute pathname" "\"%1\$s\" moet een absolute pad-naam zijn"</div><div class='del'>-    ::msgcat::mcset nl "%1\$s is not a toplevel window" "%1\$s is geen toplevel window"</div><div class='del'>-    ::msgcat::mcset nl ", or" ", of"</div><div class='del'>-    ::msgcat::mcset nl "-default, -icon, -message, -parent, -title, or -type" "-default, -icon, -message, -parent, -title, of -type"</div><div class='del'>-    ::msgcat::mcset nl "-initialdir, -mustexist, -parent, or -title" "-initialdir, -mustexist, -parent, of -title"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Abort" "&amp;Afbreken"</div><div class='del'>-    ::msgcat::mcset nl "About..." "Over..."</div><div class='del'>-    ::msgcat::mcset nl "All Files" "Alle Bestanden"</div><div class='del'>-    ::msgcat::mcset nl "Application Error" "Toepassingsfout"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Blue" "&amp;Blauw"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Cancel" "&amp;Annuleren"</div><div class='del'>-    ::msgcat::mcset nl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Kan niet naar map \"%1\$s\" gaan.\nU heeft hiervoor geen toestemming."</div><div class='del'>-    ::msgcat::mcset nl "Choose Directory" "Kies map"</div><div class='del'>-    ::msgcat::mcset nl "Clear" "Wissen"</div><div class='del'>-    ::msgcat::mcset nl "Clear entry, Press OK; Enter %1\$s, press OK" "Wis veld, Druk op OK; typ %1\$s in, druk op OK"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Clear Console" "&amp;Wis Console"</div><div class='del'>-    ::msgcat::mcset nl "Color" "Kleur"</div><div class='del'>-    ::msgcat::mcset nl "Console"</div><div class='del'>-    ::msgcat::mcset nl "Copy" "Kopi\u00ebren"</div><div class='del'>-    ::msgcat::mcset nl "Cut" "Knippen"</div><div class='del'>-    ::msgcat::mcset nl "Delete" "Wissen"</div><div class='del'>-    ::msgcat::mcset nl "Details"</div><div class='del'>-    ::msgcat::mcset nl "Details &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset nl "Directory \"%1\$s\" does not exist." "Map \"%1\$s\" bestaat niet."</div><div class='del'>-    ::msgcat::mcset nl "&amp;Directory:" "&amp;Map:"</div><div class='del'>-    ::msgcat::mcset nl "Edit" "Bewerken"</div><div class='del'>-    ::msgcat::mcset nl "Enter \"%1\$s\", press OK" "Typ \"%1\$s\", druk op OK"</div><div class='del'>-    ::msgcat::mcset nl "Enter \"%1\$s\", press OK, enter \"%2\$s\", press OK" "Typ \"%1\$s\", druk op OK, typ \"%2\$s\", druk op OK"</div><div class='del'>-    ::msgcat::mcset nl "Error: %1\$s" "Fout: %1\$s"</div><div class='del'>-    ::msgcat::mcset nl "Exit" "Be\u00ebindigen"</div><div class='del'>-    ::msgcat::mcset nl "File" "Bestand"</div><div class='del'>-    ::msgcat::mcset nl "File \"%1\$s\" already exists.\n\n" "Bestand \"%1\$s\" bestaat al.\n\n"</div><div class='del'>-    ::msgcat::mcset nl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Bestand \"%1\$s\" bestaat al.\nWilt u het overschrijven?"</div><div class='del'>-    ::msgcat::mcset nl "File \"%1\$s\" does not exist." "Bestand \"%1\$s\" bestaat niet."</div><div class='del'>-    ::msgcat::mcset nl "File &amp;name:" "Bestands&amp;naam:"</div><div class='del'>-    ::msgcat::mcset nl "File &amp;names:" "Bestands&amp;namen:"</div><div class='del'>-    ::msgcat::mcset nl "Files of &amp;type:" "Bestanden van het &amp;type:"</div><div class='del'>-    ::msgcat::mcset nl "Fi&amp;les:" "&amp;Bestanden:"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Filter"</div><div class='del'>-    ::msgcat::mcset nl "Fil&amp;ter:"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Green" "&amp;Groen"</div><div class='del'>-    ::msgcat::mcset nl "Hi" "H\u00e9"</div><div class='del'>-    ::msgcat::mcset nl "Hide Console" "Verberg Console"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Ignore" "&amp;Negeren"</div><div class='del'>-    ::msgcat::mcset nl "Invalid file name \"%1\$s\"." "Ongeldige bestandsnaam \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset nl "Log Files" "Log Bestanden"</div><div class='del'>-    ::msgcat::mcset nl "&amp;No" "&amp;Nee"</div><div class='del'>-    ::msgcat::mcset nl "&amp;OK"</div><div class='del'>-    ::msgcat::mcset nl "Ok"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Open" "&amp;Openen"</div><div class='del'>-    ::msgcat::mcset nl "Open" "Openen"</div><div class='del'>-    ::msgcat::mcset nl "Open Multiple Files" "Open meerdere bestanden"</div><div class='del'>-    ::msgcat::mcset nl "Paste" "Plakken"</div><div class='del'>-    ::msgcat::mcset nl "Please press %1\$s" "Druk op %1\$s, A.U.B."</div><div class='del'>-    ::msgcat::mcset nl "Please press ok" "Druk op ok, A.U.B."</div><div class='del'>-    ::msgcat::mcset nl "Press Cancel" "Druk op Annuleren"</div><div class='del'>-    ::msgcat::mcset nl "Press Ok" "Druk op Ok"</div><div class='del'>-    ::msgcat::mcset nl "Quit" "Stoppen"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Red" "&amp;Rood"</div><div class='del'>-    ::msgcat::mcset nl "Replace existing file?" "Vervang bestaand bestand?"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Retry" "&amp;Herhalen"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Save" "Op&amp;slaan"</div><div class='del'>-    ::msgcat::mcset nl "Save As" "Opslaan als"</div><div class='del'>-    ::msgcat::mcset nl "Save To Log" "Opslaan naar Log"</div><div class='del'>-    ::msgcat::mcset nl "Select Log File" "Selecteer Log bestand"</div><div class='del'>-    ::msgcat::mcset nl "Select a file to source" "Selecteer bronbestand"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Selection:" "&amp;Selectie:"</div><div class='del'>-    ::msgcat::mcset nl "Skip Messages" "Berichten overslaan"</div><div class='del'>-    ::msgcat::mcset nl "Source..." "Bron..."</div><div class='del'>-    ::msgcat::mcset nl "Tcl Scripts"</div><div class='del'>-    ::msgcat::mcset nl "Tcl for Windows" "Tcl voor Windows"</div><div class='del'>-    ::msgcat::mcset nl "Text Files" "Tekstbestanden"</div><div class='del'>-    ::msgcat::mcset nl "&amp;Yes" "&amp;Ja"</div><div class='del'>-    ::msgcat::mcset nl "abort" "afbreken"</div><div class='del'>-    ::msgcat::mcset nl "abort, retry, ignore, ok, cancel, no, or yes" "afbreken, opnieuw, negeren, ok, annuleren, nee, of ja"</div><div class='del'>-    ::msgcat::mcset nl "abortretryignore, ok, okcancel, retrycancel, yesno, or yesnocancel" "abortretryignore, ok, okcancel, retrycancel, yesno, of yesnocancel"</div><div class='del'>-    ::msgcat::mcset nl "bad %1\$s value \"%2\$s\": must be %3\$s" "verkeerde %1\$s waarde \"%2\$s\": moet zijn %3\$s"</div><div class='del'>-    ::msgcat::mcset nl "bad file type \"%1\$s\", should be" "verkeerd bestandstype \"%1\$s\", moet zijn"</div><div class='del'>-    ::msgcat::mcset nl "bad option \"%1\$s\": should be %2\$s" "verkeerde optie \"%1\$s\": moet zijn %2\$s"</div><div class='del'>-    ::msgcat::mcset nl "bad window path name \"%1\$s\"" "verkeerde window-padnaam \"%1\$s\""</div><div class='del'>-    ::msgcat::mcset nl "blue" "blauw"</div><div class='del'>-    ::msgcat::mcset nl "can't post %1\$s:  it isn't a descendant of %2\$s (this is a new requirement in Tk versions 3.0 and later)" "kan %1\$s niet verzenden:  het is geen afstammeling van %2\$s (dit is een nieuwe eis in Tk versies 3.0 en later)"</div><div class='del'>-    ::msgcat::mcset nl "cancel" "annuleren"</div><div class='del'>-    ::msgcat::mcset nl "default button index greater than number of buttons specified for tk_dialog" "default knop index is groter dan het aantal knoppen beschikbaar voor tk_dialog"</div><div class='del'>-    ::msgcat::mcset nl "display name to use (current one otherwise)" "te gebruiken schermnaam (anders huidige scherm)"</div><div class='del'>-    ::msgcat::mcset nl "error, info, question, or warning" "error, info, question, of warning"</div><div class='del'>-    ::msgcat::mcset nl "extension"</div><div class='del'>-    ::msgcat::mcset nl "extensions"</div><div class='del'>-    ::msgcat::mcset nl "focus group \"%1\$s\" doesn't exist" "focusgroep \"%1\$s\" bestaat niet"</div><div class='del'>-    ::msgcat::mcset nl "green" "groen"</div><div class='del'>-    ::msgcat::mcset nl "history event %1\$s"</div><div class='del'>-    ::msgcat::mcset nl "ignore" "negeren"</div><div class='del'>-    ::msgcat::mcset nl "invalid default button \"%1\$s\"" "ongeldige default knop \"%1\$s\""</div><div class='del'>-    ::msgcat::mcset nl "macType"</div><div class='del'>-    ::msgcat::mcset nl "macTypes"</div><div class='del'>-    ::msgcat::mcset nl "must specify a background color" "een achtergrondkleur is verplicht"</div><div class='del'>-    ::msgcat::mcset nl "name of the slave interpreter" "naam van de slaaf-interpreter"</div><div class='del'>-    ::msgcat::mcset nl "no winfo screen . nor env(DISPLAY)" "geen winfo scherm . noch env(DISPLAY)"</div><div class='del'>-    ::msgcat::mcset nl "ok"</div><div class='del'>-    ::msgcat::mcset nl "red" "rood"</div><div class='del'>-    ::msgcat::mcset nl "retry" "opnieuw"</div><div class='del'>-    ::msgcat::mcset nl "should contain 5 or 4 elements" "moet 4 of 5 elementen bevatten"</div><div class='del'>-    ::msgcat::mcset nl "spec"</div><div class='del'>-    ::msgcat::mcset nl "tk_chooseDirectory command" "tk_chooseDirectory opdracht"</div><div class='del'>-    ::msgcat::mcset nl "tk_chooseDirectory command, cancel gives null" "tk_chooseDirectory opdracht, annuleren geeft lege waarde"</div><div class='del'>-    ::msgcat::mcset nl "tk_chooseDirectory command, initialdir" "tk_chooseDirectory opdracht, initi\u00eble map"</div><div class='del'>-    ::msgcat::mcset nl "yes" "ja"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/pl.msg b/ext/tk/sample/msgs_tk/pl.msg<br/>deleted file mode 100644<br/>index 2699e42bdf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/pl.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/pl.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset pl "Application Error" "Bl\u0105d w Programie"</div><div class='del'>-    ::msgcat::mcset pl "Blue" "Niebieski"</div><div class='del'>-    ::msgcat::mcset pl "Color" "Kolor"</div><div class='del'>-    ::msgcat::mcset pl "Delete" "Usu\u0144"</div><div class='del'>-    ::msgcat::mcset pl "Error" "B\u0142\u0105d"</div><div class='del'>-    ::msgcat::mcset pl "Exit" "Zako\u0144cz"</div><div class='del'>-    ::msgcat::mcset pl "Green" "Zielony"</div><div class='del'>-    ::msgcat::mcset pl "Red" "Czerwonz"</div><div class='del'>-    ::msgcat::mcset pl "blue" "niebieski"</div><div class='del'>-    ::msgcat::mcset pl "green" "zielony"</div><div class='del'>-    ::msgcat::mcset pl "red" "czerwony"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset pl "&amp;Abort" "&amp;Anuluj"</div><div class='del'>-    ::msgcat::mcset pl "&amp;About..." "O Programie..."</div><div class='del'>-    ::msgcat::mcset pl "All Files" "Wszystkie pliki"</div><div class='del'>-    ::msgcat::mcset pl "Application Error" "Bl\u0105d w Programie"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Blue" "&amp;Niebieski"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Cancel" "&amp;Anuluj"</div><div class='del'>-    ::msgcat::mcset pl "Cannot change to the directory \"%1\$s\".\nPermission denied." "Katalog \"%1\$s\" nie mo\u017ce zosta\u0107 odczytany lub nie istnieje."</div><div class='del'>-    ::msgcat::mcset pl "Choose Directory" "Wybierz katalog"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Clear" "&amp;Wyczy\u015b\u0107"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Clear Console" "&amp;Wyczy\u015b\u0107 konsol\u0119"</div><div class='del'>-    ::msgcat::mcset pl "Color" "Kolor"</div><div class='del'>-    ::msgcat::mcset pl "Console" "Konsola"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Copy" "&amp;Kopiuj"</div><div class='del'>-    ::msgcat::mcset pl "Cu&amp;t" "&amp;Wytnij"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Delete" "&amp;Usu\u0144"</div><div class='del'>-    ::msgcat::mcset pl "Details &gt;&gt;" "Detale &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset pl "Directory \"%1\$s\" does not exist." "Katalog \"%1\$s\" nie istniej."</div><div class='del'>-    ::msgcat::mcset pl "&amp;Directory:" "&amp;Katalog:"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Edit" "&amp;Edytuj"</div><div class='del'>-    ::msgcat::mcset pl "Error: %1\$s" "B\u0142\u0105d: %1\$s"</div><div class='del'>-    ::msgcat::mcset pl "E&amp;xit" "&amp;Zako\u0144cz"</div><div class='del'>-    ::msgcat::mcset pl "&amp;File" "&amp;Plik"</div><div class='del'>-    ::msgcat::mcset pl "File \"%1\$s\" already exists.\nDo you want to overwrite it?" "Plik \"%1\$s\" ju\u017c istnieje.\nCzy chcesz go zast\u0105pi\u0107?"</div><div class='del'>-    ::msgcat::mcset pl "File \"%1\$s\" already exists.\n\n" "Plik \"%1\$s\" ju\u017c istnieje. \n\n"</div><div class='del'>-    ::msgcat::mcset pl "File \"%1\$s\" does not exist." "Plik \"%1\$s\" nie istnieje."</div><div class='del'>-    ::msgcat::mcset pl "File &amp;name:" "Nazwa &amp;pliku:"</div><div class='del'>-    ::msgcat::mcset pl "File &amp;names:" "Nazwy &amp;plik\u00f3w:"</div><div class='del'>-    ::msgcat::mcset pl "Files of &amp;type:" "Pliki &amp;typu:"</div><div class='del'>-    ::msgcat::mcset pl "Fi&amp;les:" "Pli&amp;ki:"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Filter" "&amp;Filter"</div><div class='del'>-    ::msgcat::mcset pl "Fil&amp;ter:" "&amp;Filter:"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Green" "&amp;Zielony"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Help" "&amp;Pomoc"</div><div class='del'>-    ::msgcat::mcset pl "Hi" "Witaj"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Hide Console" "&amp;Schowaj konsol\u0119"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Ignore" "&amp;Ignoruj"</div><div class='del'>-    ::msgcat::mcset pl "Invalid file name \"%1\$s\"." "Niew\u0142a\u015bciwa nazwa pliku \"%1\$s\"."</div><div class='del'>-    ::msgcat::mcset pl "Log Files" "Protoko\u0142uj"</div><div class='del'>-    ::msgcat::mcset pl "&amp;No" "&amp;Nie"</div><div class='del'>-    ::msgcat::mcset pl "OK"</div><div class='del'>-    ::msgcat::mcset pl "Ok"</div><div class='del'>-    ::msgcat::mcset pl "Open" "Wczytaj"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Open" "&amp;Wczytaj"</div><div class='del'>-    ::msgcat::mcset pl "Open Multiple Files" "Wczytuj wiele plik\u00f3w"</div><div class='del'>-    ::msgcat::mcset pl "P&amp;aste" "&amp;Wklej"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Quit" "&amp;Zako\u0144cz"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Red" "&amp;Czerwonz"</div><div class='del'>-    ::msgcat::mcset pl "Replace existing file?" "Czy zost\u0105pi\u0107 instniej\u0105cy plik?"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Retry" "&amp;Powt\u00f3rz"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Save" "&amp;Zapisz"</div><div class='del'>-    ::msgcat::mcset pl "Save As" "Zapisz jako"</div><div class='del'>-    ::msgcat::mcset pl "Save To Log" "Wpisz do protoko\u0142u"</div><div class='del'>-    ::msgcat::mcset pl "Select Log File" "Wybierz plik proko\u0142u"</div><div class='del'>-    ::msgcat::mcset pl "Select a file to source" "Wybierz plik do wykonania"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Selection:" "&amp;Wyb\u00f3r:"</div><div class='del'>-    ::msgcat::mcset pl "Skip Messages" "Omi\u0144 pozosta\u0142e komunikaty"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Source..." "&amp;Kod \u017ar\u00f3d\u0142owy..."</div><div class='del'>-    ::msgcat::mcset pl "Tcl Scripts" "Tcl-skrypty"</div><div class='del'>-    ::msgcat::mcset pl "Tcl for Windows" "Tcl dla Okienek (Windows)"</div><div class='del'>-    ::msgcat::mcset pl "Text Files" "Pliki Tekstowe"</div><div class='del'>-    ::msgcat::mcset pl "&amp;Yes" "&amp;Tak"</div><div class='del'>-    ::msgcat::mcset pl "abort" "zako\u0144cz"</div><div class='del'>-    ::msgcat::mcset pl "blue" "niebieski"</div><div class='del'>-    ::msgcat::mcset pl "cancel" "anuluj"</div><div class='del'>-    ::msgcat::mcset pl "extension" "rozszerzenie"</div><div class='del'>-    ::msgcat::mcset pl "extensions" "rozszerzenia"</div><div class='del'>-    ::msgcat::mcset pl "green" "zielony"</div><div class='del'>-    ::msgcat::mcset pl "ignore" "ignoruj"</div><div class='del'>-    ::msgcat::mcset pl "red" "czerwony"</div><div class='del'>-    ::msgcat::mcset pl "retry" "potw\u00f3rz"</div><div class='del'>-    ::msgcat::mcset pl "yes" "tak"</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/msgs_tk/ru.msg b/ext/tk/sample/msgs_tk/ru.msg<br/>deleted file mode 100644<br/>index a1192b7095..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/msgs_tk/ru.msg?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/msgs_tk/ru.msg</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-namespace eval ::tkmsgcat_demo {</div><div class='del'>-    ::msgcat::mcset ru "Application Error" "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435"</div><div class='del'>-    ::msgcat::mcset ru "Blue" " \u0413\u043e\u043b\u0443\u0431\u043e\u0439"</div><div class='del'>-    ::msgcat::mcset ru "Color" "\u0426\u0432\u0435\u0442"</div><div class='del'>-    ::msgcat::mcset ru "Delete" "\u0423\u0434\u0430\u043b\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Error" "\u041e\u0448\u0438\u0431\u043a\u0430"</div><div class='del'>-    ::msgcat::mcset ru "Exit" "\u0412\u044b\u0445\u043e\u0434"</div><div class='del'>-    ::msgcat::mcset ru "Green" "\u0417\u0435\u043b\u0435\u043d\u044b\u0439"</div><div class='del'>-    ::msgcat::mcset ru "Red" "\u041a\u0440\u0430\u0441\u043d\u044b\u0439"</div><div class='del'>-    ::msgcat::mcset ru "blue" " \u0433\u043e\u043b\u0443\u0431\u043e\u0439"</div><div class='del'>-    ::msgcat::mcset ru "green" " \u0437\u0435\u043b\u0435\u043d\u044b\u0439"</div><div class='del'>-    ::msgcat::mcset ru "red" " \u043a\u0440\u0430\u0441\u043d\u044b\u0439"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval ::tk {</div><div class='del'>-    ::msgcat::mcset ru "&amp;Abort" "&amp;\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "About..." "\u041f\u0440\u043e..."</div><div class='del'>-    ::msgcat::mcset ru "All Files" "\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b"</div><div class='del'>-    ::msgcat::mcset ru "Application Error" "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Blue" " &amp;\u0413\u043e\u043b\u0443\u0431\u043e\u0439"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Cancel" "\u041e\u0442&amp;\u043c\u0435\u043d\u0430"</div><div class='del'>-    ::msgcat::mcset ru "Cannot change to the directory \"%1\$s\".\nPermission denied." \</div><div class='del'>-			"\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \"%1\$s\".\n\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430"</div><div class='del'>-    ::msgcat::mcset ru "Choose Directory" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433"</div><div class='del'>-    ::msgcat::mcset ru "Clear" "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Color" "\u0426\u0432\u0435\u0442"</div><div class='del'>-    ::msgcat::mcset ru "Console" "\u041a\u043e\u043d\u0441\u043e\u043b\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Copy" "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Cut" "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Delete" "\u0423\u0434\u0430\u043b\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Details &gt;&gt;" "\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 &gt;&gt;"</div><div class='del'>-    ::msgcat::mcset ru "Directory \"%1\$s\" does not exist." "\u041a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \"%1\$s\" \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442."</div><div class='del'>-    ::msgcat::mcset ru "&amp;Directory:" "&amp;\u041a\u0430\u0442\u0430\u043b\u043e\u0433:"</div><div class='del'>-    ::msgcat::mcset ru "Error: %1\$s" "\u041e\u0448\u0438\u0431\u043a\u0430: %1\$s" </div><div class='del'>-    ::msgcat::mcset ru "Exit" "\u0412\u044b\u0445\u043e\u0434"</div><div class='del'>-    ::msgcat::mcset ru "File \"%1\$s\" already exists.\nDo you want to overwrite it?" \</div><div class='del'>-			    "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e?"</div><div class='del'>-    ::msgcat::mcset ru "File \"%1\$s\" already exists.\n\n" "\u0424\u0430\u0439\u043b \"%1\$s\" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.\n\n"</div><div class='del'>-    ::msgcat::mcset ru "File \"%1\$s\" does not exist." "\u0424\u0430\u0439\u043b \"%1\$s\" \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d."</div><div class='del'>-    ::msgcat::mcset ru "File &amp;name:" "&amp;\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430:"</div><div class='del'>-    ::msgcat::mcset ru "File &amp;names:" "&amp;\u0418\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432:"</div><div class='del'>-    ::msgcat::mcset ru "Files of &amp;type:" "&amp;\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432:"</div><div class='del'>-    ::msgcat::mcset ru "Fi&amp;les:" "\u0424\u0430\u0439&amp;\u043b\u044b:"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Filter" "&amp;\u0424\u0438\u043b\u044c\u0442\u0440"</div><div class='del'>-    ::msgcat::mcset ru "Fil&amp;ter:" "\u0424\u0438\u043b\u044c&amp;\u0442\u0440:"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Green" " &amp;\u0417\u0435\u043b\u0435\u043d\u044b\u0439"</div><div class='del'>-    ::msgcat::mcset ru "Hi" "\u041f\u0440\u0438\u0432\u0435\u0442"</div><div class='del'>-    ::msgcat::mcset ru "Hide Console" "\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Ignore" "&amp;\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Invalid file name \"%1\$s\"." "\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \"%1\$s\"." </div><div class='del'>-    ::msgcat::mcset ru "Log Files" "\u0424\u0430\u0439\u043b\u044b \u0436\u0443\u0440\u043d\u0430\u043b\u0430"</div><div class='del'>-    ::msgcat::mcset ru "&amp;No" "&amp;\u041d\u0435\u0442"</div><div class='del'>-    ::msgcat::mcset ru "&amp;OK" "&amp;\u041e\u041a"</div><div class='del'>-    ::msgcat::mcset ru "Ok" "\u0414\u0430"</div><div class='del'>-    ::msgcat::mcset ru "Open" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Open" "&amp;\u041e\u0442\u043a\u0440\u044b\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Open Multiple Files" "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432"</div><div class='del'>-    ::msgcat::mcset ru "Paste" "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Quit" "\u0412\u044b\u0445\u043e\u0434"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Red" " &amp;\u041a\u0440\u0430\u0441\u043d\u044b\u0439"</div><div class='del'>-    ::msgcat::mcset ru "Replace existing file?" "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u0430\u0439\u043b?"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Retry" "&amp;\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Save" "&amp;\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "Save As" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a"</div><div class='del'>-    ::msgcat::mcset ru "Save To Log" "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0436\u0443\u0440\u043d\u0430\u043b"</div><div class='del'>-    ::msgcat::mcset ru "Select Log File" "\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0436\u0443\u0440\u043d\u0430\u043b"</div><div class='del'>-    ::msgcat::mcset ru "Select a file to source" "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Selection:" "&amp;Selection:"</div><div class='del'>-    ::msgcat::mcset ru "Skip Messages" "\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f"</div><div class='del'>-    ::msgcat::mcset ru "Source..." "\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b..."</div><div class='del'>-    ::msgcat::mcset ru "Tcl Scripts" "\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 TCL"</div><div class='del'>-    ::msgcat::mcset ru "Tcl for Windows" "TCL \u0434\u043b\u044f Windows"</div><div class='del'>-    ::msgcat::mcset ru "Text Files" "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b"</div><div class='del'>-    ::msgcat::mcset ru "&amp;Yes" "&amp;\u0414\u0430"</div><div class='del'>-    ::msgcat::mcset ru "abort" "\u043e\u0442\u043c\u0435\u043d\u0430"</div><div class='del'>-    ::msgcat::mcset ru "blue" " \u0433\u043e\u043b\u0443\u0431\u043e\u0439"</div><div class='del'>-    ::msgcat::mcset ru "cancel" "\u043e\u0442\u043c\u0435\u043d\u0430"</div><div class='del'>-    ::msgcat::mcset ru "extension" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435"</div><div class='del'>-    ::msgcat::mcset ru "extensions" "\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f"</div><div class='del'>-    ::msgcat::mcset ru "green" " \u0437\u0435\u043b\u0435\u043d\u044b\u0439"</div><div class='del'>-    ::msgcat::mcset ru "ignore" "\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "ok" "\u043e\u043a"</div><div class='del'>-    ::msgcat::mcset ru "red" " \u043a\u0440\u0430\u0441\u043d\u044b\u0439"</div><div class='del'>-    ::msgcat::mcset ru "retry" "\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c"</div><div class='del'>-    ::msgcat::mcset ru "yes" "\u0434\u0430"</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/multi-ip_sample.rb b/ext/tk/sample/multi-ip_sample.rb<br/>deleted file mode 100644<br/>index 8d6e1bc626..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/multi-ip_sample.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/multi-ip_sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# This script is a sample of MultiTkIp class</div><div class='del'>-</div><div class='del'>-require "multi-tk"</div><div class='del'>-</div><div class='del'>-# create slave interpreters</div><div class='del'>-trusted_slave = MultiTkIp.new_slave</div><div class='del'>-safe_slave1   = MultiTkIp.new_safeTk</div><div class='del'>-safe_slave2   = MultiTkIp.new_safeTk('fill'=&gt;:none, 'expand'=&gt;false)</div><div class='del'>-#safe_slave2   = MultiTkIp.new_safeTk('fill'=&gt;:none)</div><div class='del'>-#safe_slave2   = MultiTkIp.new_safeTk('expand'=&gt;false)</div><div class='del'>-</div><div class='del'>-cmd = Proc.new{|txt|</div><div class='del'>-  #####################</div><div class='del'>-  ## from TkTimer2.rb</div><div class='del'>-</div><div class='del'>-  if TkCore::INTERP.safe?</div><div class='del'>-    # safeTk doesn't have permission to call 'wm' command</div><div class='del'>-  else</div><div class='del'>-    root = TkRoot.new(:title=&gt;'timer sample')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  label = TkLabel.new(:parent=&gt;root, :relief=&gt;:raised, :width=&gt;10) \</div><div class='del'>-                  .pack(:side=&gt;:bottom, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-  tick = proc{|aobj|</div><div class='del'>-    cnt = aobj.return_value + 5</div><div class='del'>-    label.text format("%d.%02d", *(cnt.divmod(100)))</div><div class='del'>-    cnt</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  timer = TkTimer.new(50, -1, tick).start(0, proc{ label.text('0.00'); 0 })</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  TkButton.new(:text=&gt;'Start') {</div><div class='del'>-    command proc{ timer.continue unless timer.running? }</div><div class='del'>-    pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(:text=&gt;'Restart') {</div><div class='del'>-    command proc{ timer.restart(0, proc{ label.text('0.00'); 0 }) }</div><div class='del'>-    pack('side'=&gt;'right','fill'=&gt;'both','expand'=&gt;'yes')</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(:text=&gt;'Stop') {</div><div class='del'>-    command proc{ timer.stop if timer.running? }</div><div class='del'>-    pack('side'=&gt;'right','fill'=&gt;'both','expand'=&gt;'yes')</div><div class='del'>-  }</div><div class='del'>-=end</div><div class='del'>-  b_start = TkButton.new(:text=&gt;'Start', :state=&gt;:disabled) {</div><div class='del'>-    pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  }</div><div class='del'>-  b_stop  = TkButton.new(:text=&gt;'Stop', :state=&gt;:normal) {</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'>-  b_start.command {</div><div class='del'>-    timer.continue</div><div class='del'>-    b_stop.state(:normal)</div><div class='del'>-    b_start.state(:disabled)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  b_stop.command {</div><div class='del'>-    timer.stop</div><div class='del'>-    b_start.state(:normal)</div><div class='del'>-    b_stop.state(:disabled)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkButton.new(:text=&gt;'Reset', :state=&gt;:normal) {</div><div class='del'>-    command { timer.reset }</div><div class='del'>-    pack('side'=&gt;'right', 'fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  ev_quit = TkVirtualEvent.new('Control-c', 'Control-q')</div><div class='del'>-  Tk.root.bind(ev_quit, proc{Tk.exit}).focus</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# call on the default master interpreter</div><div class='del'>-trusted_slave.eval_proc(cmd, 'trusted')  # label -&gt; .w00012</div><div class='del'>-safe_slave1.eval_proc(cmd, 'safe1')      # label -&gt; .w00016</div><div class='del'>-safe_slave2.eval_proc(cmd, 'safe2')      # label -&gt; .w00020</div><div class='del'>-cmd.call('master')                       # label -&gt; .w00024</div><div class='del'>-</div><div class='del'>-#second_master = MultiTkIp.new(&amp;cmd)</div><div class='del'>-</div><div class='del'>-TkTimer.new(2000, -1, proc{p ['safe1', safe_slave1.deleted?]}).start</div><div class='del'>-TkTimer.new(2000, -1, proc{p ['safe2', safe_slave2.deleted?]}).start</div><div class='del'>-TkTimer.new(2000, -1, proc{p ['trusted', trusted_slave.deleted?]}).start</div><div class='del'>-</div><div class='del'>-TkTimer.new(5000, 1, </div><div class='del'>-            proc{</div><div class='del'>-              safe_slave1.eval_proc{Tk.root.destroy}</div><div class='del'>-              safe_slave1.delete</div><div class='del'>-              print "*** The safe_slave1 is deleted by the timer.\n"</div><div class='del'>-            }).start</div><div class='del'>-</div><div class='del'>-TkTimer.new(10000, 1, </div><div class='del'>-            proc{</div><div class='del'>-              trusted_slave.eval_proc{Tk.root.destroy}</div><div class='del'>-              trusted_slave.delete</div><div class='del'>-              print "*** The trusted_slave is deleted by the timer.\n"</div><div class='del'>-            }).start</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/multi-ip_sample2.rb b/ext/tk/sample/multi-ip_sample2.rb<br/>deleted file mode 100644<br/>index f4a45d8d9a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/multi-ip_sample2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/multi-ip_sample2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +0,0 @@</div><div class='del'>-require 'multi-tk.rb'</div><div class='del'>-</div><div class='del'>-th = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;'this is a primary master').pack</div><div class='del'>-</div><div class='del'>-ip1 = MultiTkIp.new_slave(:safe=&gt;1)</div><div class='del'>-ip2 = MultiTkIp.new_slave(:safe=&gt;2)</div><div class='del'>-</div><div class='del'>-cmd = proc{|s|</div><div class='del'>-  require 'tk'</div><div class='del'>-</div><div class='del'>-  TkButton.new(:text=&gt;'b1: p self', :command=&gt;proc{p self}).pack(:fill=&gt;:x)</div><div class='del'>-  sleep s</div><div class='del'>-  TkButton.new(:text=&gt;'b2: p $SAFE', :command=&gt;proc{p $SAFE}).pack(:fill=&gt;:x)</div><div class='del'>-  sleep s</div><div class='del'>-  TkButton.new(:text=&gt;'b3: p MultiTkIp.ip_name', </div><div class='del'>-               :command=&gt;proc{p MultiTkIp.ip_name}).pack(:fill=&gt;:x)</div><div class='del'>-  sleep s</div><div class='del'>-  TkButton.new(:text=&gt;'EXIT', :command=&gt;proc{exit}).pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-  Tk.mainloop</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Thread.new{ip1.eval_proc(cmd, 1.1)}</div><div class='del'>-Thread.new{ip2.eval_proc(cmd, 0.3)}</div><div class='del'>-cmd.call(0.7)</div><div class='del'>-</div><div class='del'>-th.join</div><div class='head'>diff --git a/ext/tk/sample/optobj_sample.rb b/ext/tk/sample/optobj_sample.rb<br/>deleted file mode 100644<br/>index cafacbdd17..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/optobj_sample.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/optobj_sample.rb</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'>-#  sample script of Tk::OptionObj</div><div class='del'>-#</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-optobj = Tk::OptionObj.new('foreground'=&gt;'red', 'background'=&gt;'black')</div><div class='del'>-</div><div class='del'>-f = TkFrame.new.pack(:side=&gt;:left, :anchor=&gt;:n, :padx=&gt;5, :pady=&gt;30)</div><div class='del'>-</div><div class='del'>-b1 = TkButton.new(f, :text=&gt;'AAA').pack(:fill=&gt;:x)</div><div class='del'>-b2 = TkButton.new(f, :text=&gt;'BBB').pack(:fill=&gt;:x)</div><div class='del'>-b3 = TkButton.new(f, :text=&gt;'CCC').pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-optobj.assign( b1, </div><div class='del'>-              [ b2, 'configure', </div><div class='del'>-                { 'foreground'=&gt;'background', </div><div class='del'>-                  'background'=&gt;'foreground' } ], </div><div class='del'>-              [ b3, nil, </div><div class='del'>-                { 'foreground'=&gt;'background', </div><div class='del'>-                  'activeforeground'=&gt;nil, </div><div class='del'>-                  'background'=&gt;['foreground', 'activeforeground'] } ] )</div><div class='del'>-</div><div class='del'>-optobj.update('activeforeground'=&gt;'yellow')</div><div class='del'>-</div><div class='del'>-TkButton.new(f){</div><div class='del'>-  configure( optobj.assign(self) + {:text=&gt;'DDD'} )</div><div class='del'>-  pack(:fill=&gt;:x)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkButton.new(f){</div><div class='del'>-  configure( optobj.assign([self, nil, </div><div class='del'>-                             {'foreground'=&gt;'activeforeground', </div><div class='del'>-                              'background'=&gt;'foreground', </div><div class='del'>-                              'activeforeground'=&gt;'background'}]) \</div><div class='del'>-             + {:text=&gt;'EEE', :relief=&gt;:groove, :borderwidth=&gt;5} )</div><div class='del'>-  pack(:fill=&gt;:x)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-optobj.notify  # To apply the convert_key ( 3rd element of widget info </div><div class='del'>-               # (that is, {'foreground'=&gt;'activeforeground', ,,, } ) </div><div class='del'>-               # of the 'EEE' button </div><div class='del'>-</div><div class='del'>-TkButton.new(f, :text=&gt;'toggle', </div><div class='del'>-             :command=&gt;proc{</div><div class='del'>-               fg = optobj['foreground']</div><div class='del'>-               bg = optobj['background']</div><div class='del'>-               optobj.configure('foreground'=&gt;bg, 'background'=&gt;fg)</div><div class='del'>-             }).pack(:fill=&gt;:x, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-TkButton.new(f, :text=&gt;'exit', </div><div class='del'>-                :command=&gt;proc{exit}).pack(:fill=&gt;:x, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-TkFrame.new{|f|</div><div class='del'>-  pack(:side=&gt;:right, :expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-  TkLabel.new(f, :text=&gt;'source::').pack(:anchor=&gt;:w)</div><div class='del'>-  TkFrame.new(f){|ff|</div><div class='del'>-    TkText.new(ff){</div><div class='del'>-      yscrollbar(TkScrollbar.new(ff){pack(:fill=&gt;:y, :side=&gt;:right)})</div><div class='del'>-      insert('end', File.read(__FILE__))</div><div class='del'>-      pack(:side=&gt;:left, :expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-    }</div><div class='del'>-    pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/propagate.rb b/ext/tk/sample/propagate.rb<br/>deleted file mode 100644<br/>index 800cef553d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/propagate.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/propagate.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +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;"Please click the bottom frame").pack</div><div class='del'>-</div><div class='del'>-f = TkFrame.new(:width=&gt;400, :height=&gt;100, :background=&gt;'yellow', </div><div class='del'>-                :relief=&gt;'ridge', :borderwidth=&gt;5).pack</div><div class='del'>-</div><div class='del'>-# TkPack.propagate(f, false) # &lt;== important!!</div><div class='del'>-f.pack_propagate(false)      # &lt;== important!!</div><div class='del'>-</div><div class='del'>-list = (1..3).collect{|n|</div><div class='del'>-  TkButton.new(f, :text=&gt;"button#{'-X'*n}"){</div><div class='del'>-    command proc{</div><div class='del'>-      puts "button#{'-X'*n}"</div><div class='del'>-      self.unpack</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-list.unshift(nil)</div><div class='del'>-</div><div class='del'>-f.bind('1', proc{</div><div class='del'>-         w = list.shift</div><div class='del'>-         w.unpack if w</div><div class='del'>-         list.push(w)</div><div class='del'>-         list[0].pack(:expand=&gt;true, :anchor=&gt;:center) if list[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/remote-ip_sample.rb b/ext/tk/sample/remote-ip_sample.rb<br/>deleted file mode 100644<br/>index 3696a20852..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/remote-ip_sample.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/remote-ip_sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'remote-tk'</div><div class='del'>-</div><div class='del'>-puts &lt;&lt;EOM</div><div class='del'>-This sample controls the other Tk interpreter (Ruby/Tk, Tcl/Tk, and so on)</div><div class='del'>-which running on the other process. For this purpose, Ruby/Tk uses Tcl/Tk's </div><div class='del'>-'send' command. Availability of the command depends on your GUI environment. </div><div class='del'>-If this script doesn't work, please check your environment (see Tcl/Tk FAQ).</div><div class='del'>-EOM</div><div class='del'>-#'</div><div class='del'>-</div><div class='del'>-unless (wish = TkWinfo.interps.find{|ip| ip =~ /^wish/})</div><div class='del'>-  puts ''</div><div class='del'>-  puts 'Please start "wish" (Tcl/Tk shell) before running this sample script.'</div><div class='del'>-  exit 1</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ip = RemoteTkIp.new(wish)</div><div class='del'>-ip.eval_proc{TkButton.new(:command=&gt;proc{puts 'This procesure is on the controller-ip (Ruby/Tk)'}, :text=&gt;'print on Ruby/Tk (controller-ip)').pack(:fill=&gt;:x)}</div><div class='del'>-ip.eval_proc{TkButton.new(:command=&gt;'puts {This procesure is on the remote-ip (wish)}', :text=&gt;'print on wish (remote-ip)').pack(:fill=&gt;:x)}</div><div class='del'>-</div><div class='del'>-# If your remote-ip is Ruby/Tk, you can control the remote Ruby by </div><div class='del'>-# 'ruby' or 'ruby_eval' or 'ruby_cmd' on the Tk interpreter. </div><div class='del'>-if ip.is_rubytk?</div><div class='del'>-  ip.eval_proc{TkButton.new(:command=&gt;'ruby {p 111; p Array.new(3,"ruby")}', :text=&gt;'ruby cmd on the remote-ip').pack(:fill=&gt;:x)}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ip.eval_proc{TkButton.new(:command=&gt;'exit', :text=&gt;'QUIT').pack(:fill=&gt;:x)}</div><div class='del'>-</div><div class='del'>-TkButton.new(:command=&gt;proc{exit}, :text=&gt;'QUIT', </div><div class='del'>-             :padx=&gt;10, :pady=&gt;7).pack(:padx=&gt;10, :pady=&gt;7)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/remote-ip_sample2.rb b/ext/tk/sample/remote-ip_sample2.rb<br/>deleted file mode 100644<br/>index e12b2a96c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/remote-ip_sample2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/remote-ip_sample2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'remote-tk'</div><div class='del'>-</div><div class='del'>-# start sub-process</div><div class='del'>-ip_name = 'remote_ip'</div><div class='del'>-ip_list = TkWinfo.interps</div><div class='del'>-fork{</div><div class='del'>-  exec "/usr/bin/env ruby -r tk -e \"Tk.appname('#{ip_name}');Tk.mainloop\""</div><div class='del'>-}</div><div class='del'>-sleep 1 until (app = (TkWinfo.interps - ip_list)[0]) &amp;&amp; app =~ /^#{ip_name}/</div><div class='del'>-p TkWinfo.interps</div><div class='del'>-</div><div class='del'>-# create RemoteTkIp object</div><div class='del'>-ip = RemoteTkIp.new(app)</div><div class='del'>-</div><div class='del'>-# setup remote-ip window</div><div class='del'>-btns = []</div><div class='del'>-ip.eval_proc{</div><div class='del'>-  btns &lt;&lt; </div><div class='del'>-    TkButton.new(:command=&gt;proc{</div><div class='del'>-                   puts 'This procesure is on the controller-ip (Ruby-side)'</div><div class='del'>-                 }, </div><div class='del'>-                 :text=&gt;'print on controller-ip (Ruby-side)').pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-  btns &lt;&lt; </div><div class='del'>-    TkButton.new(:command=&gt;</div><div class='del'>-                   'puts {This procesure is on the remote-ip (Tk-side)}',</div><div class='del'>-                 :text=&gt;'print on remote-ip (Tk-side)').pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-  btns &lt;&lt; </div><div class='del'>-    TkButton.new(:command=&gt;</div><div class='del'>-                   'ruby {</div><div class='del'>-                     puts "This procedure is on the remote-ip (Ruby-side)"</div><div class='del'>-                     p Array.new(3,"ruby")</div><div class='del'>-                    }', </div><div class='del'>-                 :text=&gt;'ruby cmd on the remote-ip').pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-  TkButton.new(:command=&gt;'exit', :text=&gt;'QUIT').pack(:fill=&gt;:x)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# setup controller-ip window</div><div class='del'>-btns.each_with_index{|btn, idx|</div><div class='del'>-  # The scope of the eval-block of 'eval_proc' method is different from </div><div class='del'>-  # the enternal. 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'>-  TkButton.new(:command=&gt;proc{ip.eval_proc(btn){|b| b.flash}}, </div><div class='del'>-               :text=&gt;"flash button-#{idx}", </div><div class='del'>-               :padx=&gt;10).pack(:padx=&gt;10, :pady=&gt;2)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkButton.new(:command=&gt;proc{exit}, :text=&gt;'QUIT', </div><div class='del'>-             :padx=&gt;10, :pady=&gt;7).pack(:padx=&gt;10, :pady=&gt;7)</div><div class='del'>-</div><div class='del'>-# start eventloop</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/resource.en b/ext/tk/sample/resource.en<br/>deleted file mode 100644<br/>index 39b4013971..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/resource.en?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/resource.en</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-!</div><div class='del'>-!  see Tcl/Tk's "options" manual for "Database Name" and "Database Class"</div><div class='del'>-!</div><div class='del'>-*BtnFrame.borderWidth: 5</div><div class='del'>-*BtnFrame.relief: ridge</div><div class='del'>-*BtnFrame.Button.background: wheat</div><div class='del'>-*BtnFrame.Button.foreground: red</div><div class='del'>-*hello.text: HELLO</div><div class='del'>-*quit.text: QUIT</div><div class='del'>-*BTN_CMD.show_msg: {|arg| print "($SAFE=#{$SAFE}) ";\</div><div class='del'>-                          print "Hello!! This is a sample of #{arg}.";\</div><div class='del'>-                          print "(&lt;&lt;&lt; $SAFE=#{$SAFE})\n"}</div><div class='del'>-*BTN_CMD.bye_msg:  {print "($SAFE=#{$SAFE} &gt;&gt;&gt;) Good-bye¡¥(&lt;&lt;&lt; $SAFE=#{$SAFE})\n"}</div><div class='head'>diff --git a/ext/tk/sample/resource.ja b/ext/tk/sample/resource.ja<br/>deleted file mode 100644<br/>index a61390f95d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/resource.ja?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/resource.ja</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-!</div><div class='del'>-!  see Tcl/Tk's "options" manual for "Database Name" and "Database Class"</div><div class='del'>-!</div><div class='del'>-*BtnFrame.borderWidth: 5</div><div class='del'>-*BtnFrame.relief: ridge</div><div class='del'>-*BtnFrame.Button.background: wheat</div><div class='del'>-*BtnFrame.Button.foreground: red</div><div class='del'>-*hello.text: ¤³¤ó¤Ë¤Á¤Ï</div><div class='del'>-*quit.text: ½ªÎ»</div><div class='del'>-*BTN_CMD.show_msg: {|arg| print "($SAFE=#{$SAFE} &gt;&gt;&gt;) ";\</div><div class='del'>-                          print "¤³¤ó¤Ë¤Á¤Ï¡ª¡ª #{arg} ¤Î¥µ¥ó¥×¥ë¤Ç¤¹¡¥";\</div><div class='del'>-                          print "(&lt;&lt;&lt; $SAFE=#{$SAFE})\n"}</div><div class='del'>-*BTN_CMD.bye_msg:  {print "($SAFE=#{$SAFE} &gt;&gt;&gt;) ¤µ¤è¤¦¤Ê¤é¡¥(&lt;&lt;&lt; $SAFE=#{$SAFE})\n"}</div><div class='head'>diff --git a/ext/tk/sample/safe-tk.rb b/ext/tk/sample/safe-tk.rb<br/>deleted file mode 100644<br/>index e2289697e0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/safe-tk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/safe-tk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,115 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# This script is a sample of MultiTkIp class</div><div class='del'>-</div><div class='del'>-require "multi-tk"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;'This is the Default Master Ipnterpreter').pack(:padx=&gt;5, :pady=&gt;3)</div><div class='del'>-TkButton.new(:text=&gt;'QUIT', :command=&gt;proc{exit}).pack(:pady=&gt;3)</div><div class='del'>-TkFrame.new(:borderwidth=&gt;2, :height=&gt;3, </div><div class='del'>-            :relief=&gt;:sunken).pack(:fill=&gt;:x, :expand=&gt;true,</div><div class='del'>-                                   :padx=&gt;10, :pady=&gt;7)</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-puts "---- create a safe slave IP with Ruby's safe-level == 1 ----------"</div><div class='del'>-ip = MultiTkIp.new_safe_slave(1)</div><div class='del'>-</div><div class='del'>-puts "\n---- create procs ----------"</div><div class='del'>-puts 'x = proc{p [\'proc x\', "$SAFE==#{$SAFE}"]; exit}'</div><div class='del'>-x = proc{p ['proc x', "$SAFE==#{$SAFE}"]; exit}</div><div class='del'>-TkLabel.new(:text=&gt;'x = proc{p [\'proc x\', "$SAFE==#{$SAFE}"]; exit}', </div><div class='del'>-            :anchor=&gt;:w).pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-puts 'y = proc{|label| p [\'proc y\', "$SAFE==#{$SAFE}", label]; label.text($SAFE)}'</div><div class='del'>-y = proc{|label| p ['proc y', "$SAFE==#{$SAFE}", label]; label.text($SAFE)}</div><div class='del'>-TkLabel.new(:text=&gt;'y = proc{|label| p [\'proc y\', "$SAFE==#{$SAFE}", label]; label.text($SAFE)}', </div><div class='del'>-            :anchor=&gt;:w).pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-puts 'z = proc{p [\'proc z\', "$SAFE==#{$SAFE}"]; exit}'</div><div class='del'>-z = proc{p ['proc z', "$SAFE==#{$SAFE}"]; exit}</div><div class='del'>-TkLabel.new(:text=&gt;'z = proc{p [\'proc z\', "$SAFE==#{$SAFE}"]; exit}', </div><div class='del'>-            :anchor=&gt;:w).pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-puts "\n---- call 1st eval_proc ----------"</div><div class='del'>-print 'lbl = '</div><div class='del'>-p lbl = ip.eval_proc{</div><div class='del'>-  TkLabel.new(:text=&gt;"1st eval_proc : $SAFE == #{$SAFE}").pack</div><div class='del'>-</div><div class='del'>-  f = TkFrame.new.pack</div><div class='del'>-  TkLabel.new(f, :text=&gt;"$SAFE == ").pack(:side=&gt;:left)</div><div class='del'>-  # TkLabel.new(f, :text=&gt;" (&lt;-- 'lbl' widget is here)").pack(:side=&gt;:right)</div><div class='del'>-  l = TkLabel.new(f).pack(:side=&gt;:right)</div><div class='del'>-</div><div class='del'>-  TkButton.new(:text=&gt;':command=&gt;proc{l.text($SAFE)}', </div><div class='del'>-               :command=&gt;proc{l.text($SAFE)}).pack(:fill=&gt;:x, :padx=&gt;5)</div><div class='del'>-  TkButton.new(:text=&gt;':command=&gt;x', :command=&gt;x).pack(:fill=&gt;:x, :padx=&gt;5)</div><div class='del'>-  TkButton.new(:text=&gt;':command=&gt;proc{exit}', </div><div class='del'>-               :command=&gt;proc{exit}).pack(:fill=&gt;:x, :padx=&gt;5)</div><div class='del'>-  TkFrame.new(:borderwidth=&gt;2, :height=&gt;3, </div><div class='del'>-              :relief=&gt;:sunken).pack(:fill=&gt;:x, :expand=&gt;true,</div><div class='del'>-                                     :padx=&gt;10, :pady=&gt;7)</div><div class='del'>-  l # return the label widget</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-puts "\n---- change the safe slave IP's safe-level ==&gt; 3 ----------"</div><div class='del'>-ip.safe_level = 3</div><div class='del'>-</div><div class='del'>-puts "\n---- call 2nd eval_proc ----------"</div><div class='del'>-p ip.eval_proc(proc{</div><div class='del'>-                 TkLabel.new(:text=&gt;"2nd eval_proc : $SAFE == #{$SAFE}").pack</div><div class='del'>-                 f = TkFrame.new.pack</div><div class='del'>-                 TkLabel.new(f, :text=&gt;"$SAFE == ").pack(:side=&gt;:left)</div><div class='del'>-                 l = TkLabel.new(f, :text=&gt;$SAFE).pack(:side=&gt;:right)</div><div class='del'>-                 TkButton.new(:text=&gt;':command=&gt;proc{l.text($SAFE)}', </div><div class='del'>-                              :command=&gt;proc{l.text($SAFE)}).pack(:fill=&gt;:x, </div><div class='del'>-                                                                  :padx=&gt;5)</div><div class='del'>-                 TkButton.new(:text=&gt;':command=&gt;proc{y.call(l)}', </div><div class='del'>-                              :command=&gt;proc{y.call(l)}).pack(:fill=&gt;:x, </div><div class='del'>-                                                              :padx=&gt;5)</div><div class='del'>-                 TkButton.new(:text=&gt;':command=&gt;proc{Thread.new(l, &amp;y).value}',</div><div class='del'>-                              :command=&gt;proc{</div><div class='del'>-                                Thread.new(l, &amp;y).value</div><div class='del'>-                              }).pack(:fill=&gt;:x, :padx=&gt;5)</div><div class='del'>-                 TkButton.new(:text=&gt;':command=&gt;proc{z.call}', </div><div class='del'>-                              :command=&gt;proc{z.call}).pack(:fill=&gt;:x, :padx=&gt;5)</div><div class='del'>-                 TkFrame.new(:borderwidth=&gt;2, :height=&gt;3, </div><div class='del'>-                             :relief=&gt;:sunken).pack(:fill=&gt;:x, :expand=&gt;true,</div><div class='del'>-                                                    :padx=&gt;10, :pady=&gt;7)</div><div class='del'>-               })</div><div class='del'>-</div><div class='del'>-puts "\n---- call 1st and 2nd eval_str ----------"</div><div class='del'>-p bind = ip.eval_str('</div><div class='del'>-  TkLabel.new(:text=&gt;"1st and 2nd eval_str : $SAFE == #{$SAFE}").pack</div><div class='del'>-  f = TkFrame.new.pack</div><div class='del'>-  TkLabel.new(f, :text=&gt;"$SAFE == ").pack(:side=&gt;:left)</div><div class='del'>-  l = TkLabel.new(f, :text=&gt;$SAFE).pack(:side=&gt;:right)</div><div class='del'>-  TkButton.new(:text=&gt;":command=&gt;proc{y.call(l)}", </div><div class='del'>-               :command=&gt;proc{y.call(l)}).pack(:fill=&gt;:x, :padx=&gt;5)</div><div class='del'>-  binding</div><div class='del'>-', binding)</div><div class='del'>-</div><div class='del'>-p ip.eval_str("</div><div class='del'>-  TkButton.new(:text=&gt;':command=&gt;proc{ l.text = $SAFE }', </div><div class='del'>-               :command=&gt;proc{ l.text = $SAFE }).pack(:fill=&gt;:x, :padx=&gt;5)</div><div class='del'>-  TkFrame.new(:borderwidth=&gt;2, :height=&gt;3, </div><div class='del'>-              :relief=&gt;:sunken).pack(:fill=&gt;:x, :expand=&gt;true,</div><div class='del'>-                                     :padx=&gt;10, :pady=&gt;7)</div><div class='del'>-", bind)</div><div class='del'>-</div><div class='del'>-puts "\n---- change the safe slave IP's safe-level ==&gt; 4 ----------"</div><div class='del'>-ip.safe_level = 4</div><div class='del'>-</div><div class='del'>-puts "\n---- call 3rd and 4th eval_proc ----------"</div><div class='del'>-p ip.eval_proc{</div><div class='del'>-  TkLabel.new(:text=&gt;"3rd and 4th eval_proc : $SAFE == #{$SAFE}").pack</div><div class='del'>-}</div><div class='del'>-p ip.eval_proc{</div><div class='del'>-  TkButton.new(:text=&gt;':command=&gt;proc{ lbl.text = $SAFE }', </div><div class='del'>-               :command=&gt;proc{ lbl.text = $SAFE }).pack(:fill=&gt;:x, :padx=&gt;5)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-puts "\n---- start event-loop ( current $SAFE == #{$SAFE} ) ----------"</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/scrollframe.rb b/ext/tk/sample/scrollframe.rb<br/>deleted file mode 100644<br/>index b0ac6d3874..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/scrollframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/scrollframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,237 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  Tk::ScrollFrame class</div><div class='del'>-#</div><div class='del'>-#    This widget class is a frame widget with scrollbars.</div><div class='del'>-#    The ScrollFrame doesn't propagate the size of embedded widgets.</div><div class='del'>-#    When it is configured, scrollregion of the container is changed.</div><div class='del'>-#</div><div class='del'>-#    Scrollbars can be toggled by Tk::ScrollFrame#vscroll &amp; hscroll.</div><div class='del'>-#    If horizontal or virtical scrollbar is turned off, the horizontal </div><div class='del'>-#    or virtical size of embedded widgets is propagated.</div><div class='del'>-#</div><div class='del'>-#                         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 Tk::ScrollFrame &lt; TkFrame</div><div class='del'>-  include TkComposite</div><div class='del'>-</div><div class='del'>-  DEFAULT_WIDTH  = 200</div><div class='del'>-  DEFAULT_HEIGHT = 200</div><div class='del'>-</div><div class='del'>-  def initialize_composite(keys={})</div><div class='del'>-    @frame.configure(:width=&gt;DEFAULT_WIDTH, :height=&gt;DEFAULT_HEIGHT)</div><div class='del'>-</div><div class='del'>-    # create scrollbars</div><div class='del'>-    @h_scroll = TkScrollbar.new(@frame, 'orient'=&gt;'horizontal')</div><div class='del'>-    @v_scroll = TkScrollbar.new(@frame, 'orient'=&gt;'vertical')</div><div class='del'>-</div><div class='del'>-    # create a canvas widget</div><div class='del'>-    @canvas = TkCanvas.new(@frame, </div><div class='del'>-                           :borderwidth=&gt;0, :selectborderwidth=&gt;0, </div><div class='del'>-                           :highlightthickness=&gt;0)</div><div class='del'>-</div><div class='del'>-    # allignment</div><div class='del'>-    TkGrid.rowconfigure(@frame, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-    @canvas.grid('row'=&gt;0, 'column'=&gt;0, 'sticky'=&gt;'news')</div><div class='del'>-    @frame.grid_propagate(false)</div><div class='del'>-</div><div class='del'>-    # assign scrollbars</div><div class='del'>-    @canvas.xscrollbar(@h_scroll)</div><div class='del'>-    @canvas.yscrollbar(@v_scroll)</div><div class='del'>-</div><div class='del'>-    # convert hash keys</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    # check options for the frame</div><div class='del'>-    framekeys = {}</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 @classname = keys.delete('class')</div><div class='del'>-      framekeys['class'] = @classname</div><div class='del'>-    end</div><div class='del'>-    if @colormap  = keys.delete('colormap')</div><div class='del'>-      framekeys['colormap'] = @colormap</div><div class='del'>-    end</div><div class='del'>-    if @container = keys.delete('container')</div><div class='del'>-      framekeys['container'] = @container</div><div class='del'>-    end</div><div class='del'>-    if @visual    = keys.delete('visual')</div><div class='del'>-      framekeys['visual'] = @visual</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'>-</div><div class='del'>-    # create base frame</div><div class='del'>-    @base = TkFrame.new(@canvas, framekeys)</div><div class='del'>-</div><div class='del'>-    # embed base frame</div><div class='del'>-    @cwin = TkcWindow.new(@canvas, [0, 0], :window=&gt;@base, :anchor=&gt;'nw')</div><div class='del'>-    @canvas.scrollregion(@cwin.bbox)</div><div class='del'>-</div><div class='del'>-    # binding to reset scrollregion</div><div class='del'>-    @base.bind('Configure'){ _reset_scrollregion(nil, nil) }</div><div class='del'>-</div><div class='del'>-    # set default receiver of method calls</div><div class='del'>-    @path = @base.path</div><div class='del'>-</div><div class='del'>-    # scrollbars ON</div><div class='del'>-    vscroll(keys.delete('vscroll'){true})</div><div class='del'>-    hscroll(keys.delete('hscroll'){true})</div><div class='del'>-</div><div class='del'>-    # please check the differences of the following definitions</div><div class='del'>-    option_methods(</div><div class='del'>-      :scrollbarwidth</div><div class='del'>-    )</div><div class='del'>-</div><div class='del'>-    # set receiver widgets for configure methods (with alias)</div><div class='del'>-    delegate_alias('scrollbarrelief', 'relief', @h_scroll, @v_scroll)</div><div class='del'>-</div><div class='del'>-    # set receiver widgets for configure methods</div><div class='del'>-    delegate('DEFAULT', @base)</div><div class='del'>-    delegate('background', @frame, @base, @canvas, @h_scroll, @v_scroll)</div><div class='del'>-    delegate('width', @frame)</div><div class='del'>-    delegate('height', @frame)</div><div class='del'>-    delegate('activebackground', @h_scroll, @v_scroll)</div><div class='del'>-    delegate('troughcolor', @h_scroll, @v_scroll)</div><div class='del'>-    delegate('repeatdelay', @h_scroll, @v_scroll)</div><div class='del'>-    delegate('repeatinterval', @h_scroll, @v_scroll)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-</div><div class='del'>-    # do configure</div><div class='del'>-    configure keys unless keys.empty?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # callback for Configure event</div><div class='del'>-  def _reset_scrollregion(h_mod=nil, v_mod=nil)</div><div class='del'>-    cx1, cy1, cx2, cy2 = @canvas.scrollregion</div><div class='del'>-    x1, y1, x2, y2 = @cwin.bbox</div><div class='del'>-    @canvas.scrollregion([x1, y1, x2, y2])</div><div class='del'>-</div><div class='del'>-    if h_mod.nil? &amp;&amp; v_mod.nil?</div><div class='del'>-      if x2 != cx2 &amp;&amp; TkGrid.info(@h_scroll).size == 0</div><div class='del'>-        @frame.grid_propagate(true)</div><div class='del'>-        @canvas.width  = x2</div><div class='del'>-        Tk.update_idletasks</div><div class='del'>-        @frame.grid_propagate(false)</div><div class='del'>-      end</div><div class='del'>-      if y2 != cy2 &amp;&amp; TkGrid.info(@v_scroll).size == 0</div><div class='del'>-        @frame.grid_propagate(true)</div><div class='del'>-        @canvas.height = y2</div><div class='del'>-        Tk.update_idletasks</div><div class='del'>-        @frame.grid_propagate(false)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @h_scroll.ungrid if h_mod == false</div><div class='del'>-      @v_scroll.ungrid if v_mod == false</div><div class='del'>-</div><div class='del'>-      h_flag = (TkGrid.info(@h_scroll).size == 0)</div><div class='del'>-      v_flag = (TkGrid.info(@v_scroll).size == 0)</div><div class='del'>-</div><div class='del'>-      @frame.grid_propagate(true)</div><div class='del'>-</div><div class='del'>-      @canvas.width  = (h_flag)? x2: @canvas.winfo_width</div><div class='del'>-      @canvas.height = (v_flag)? y2: @canvas.winfo_height</div><div class='del'>-</div><div class='del'>-      @h_scroll.grid('row'=&gt;1, 'column'=&gt;0, 'sticky'=&gt;'ew') if h_mod</div><div class='del'>-      @v_scroll.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'ns') if v_mod</div><div class='del'>-</div><div class='del'>-      Tk.update_idletasks</div><div class='del'>-</div><div class='del'>-      @frame.grid_propagate(false)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_reset_scrollregion</div><div class='del'>-</div><div class='del'>-  # forbid to change binding of @base frame</div><div class='del'>-  def bind(*args)</div><div class='del'>-    @frame.bind(*args)</div><div class='del'>-  end</div><div class='del'>-  def bind_append(*args)</div><div class='del'>-    @frame.bind_append(*args)</div><div class='del'>-  end</div><div class='del'>-  def bind_remove(*args)</div><div class='del'>-    @frame.bind_remove(*args)</div><div class='del'>-  end</div><div class='del'>-  def bindinfo(*args)</div><div class='del'>-    @frame.bindinfo(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set width of scrollbar</div><div class='del'>-  def scrollbarwidth(width = nil)</div><div class='del'>-    if width</div><div class='del'>-      @h_scroll.width(width)</div><div class='del'>-      @v_scroll.width(width)</div><div class='del'>-    else</div><div class='del'>-      @h_scroll.width</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # vertical scrollbar : ON/OFF</div><div class='del'>-  def vscroll(mode)</div><div class='del'>-    Tk.update_idletasks</div><div class='del'>-    st = TkGrid.info(@v_scroll)</div><div class='del'>-    if mode &amp;&amp; st.size == 0 then</div><div class='del'>-      @v_scroll.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'ns')</div><div class='del'>-      _reset_scrollregion(nil, true)</div><div class='del'>-    elsif !mode &amp;&amp; st.size != 0 then</div><div class='del'>-      _reset_scrollregion(nil, false)</div><div class='del'>-    else</div><div class='del'>-      _reset_scrollregion(nil, nil)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # horizontal scrollbar : ON/OFF</div><div class='del'>-  def hscroll(mode)</div><div class='del'>-    Tk.update_idletasks</div><div class='del'>-    st = TkGrid.info(@h_scroll)</div><div class='del'>-    if mode &amp;&amp; st.size == 0 then</div><div class='del'>-      _reset_scrollregion(true, nil)</div><div class='del'>-    elsif !mode &amp;&amp; st.size != 0 then</div><div class='del'>-      _reset_scrollregion(false, nil)</div><div class='del'>-    else</div><div class='del'>-      _reset_scrollregion(nil, nil)</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'>-# test</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  f = Tk::ScrollFrame.new(:scrollbarwidth=&gt;10, :width=&gt;300, :height=&gt;200)</div><div class='del'>-  f.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-  TkButton.new(f, :text=&gt;'foo button', :command=&gt;proc{puts 'foo'}).pack</div><div class='del'>-  TkButton.new(f, :text=&gt;'baaar button', :command=&gt;proc{puts 'baaar'}).pack</div><div class='del'>-  TkButton.new(f, :text=&gt;'baz button', :command=&gt;proc{puts 'baz'}).pack</div><div class='del'>-  TkButton.new(f, :text=&gt;'hoge hoge button', </div><div class='del'>-               :command=&gt;proc{puts 'hoge hoge'}).pack(:side=&gt;:bottom)</div><div class='del'>-</div><div class='del'>-  # f.hscroll(false)</div><div class='del'>-</div><div class='del'>-  Tk.after(3000){</div><div class='del'>-    t = TkText.new(f).pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-    t.insert(:end, 'Here is a text widget')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Tk.after(6000){ f.vscroll(false) }</div><div class='del'>-</div><div class='del'>-  Tk.after(9000){ f.vscroll(true) }</div><div class='del'>-</div><div class='del'>-  Tk.after(12000){ f.hscroll(false) }</div><div class='del'>-</div><div class='del'>-  Tk.after(15000){ f.hscroll(true) }</div><div class='del'>-</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/batsu.gif b/ext/tk/sample/tcltklib/batsu.gif<br/>deleted file mode 100644<br/>index 880cc73e09..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/batsu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/batsu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tcltklib/lines0.tcl b/ext/tk/sample/tcltklib/lines0.tcl<br/>deleted file mode 100644<br/>index 8ed3c5e1c1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/lines0.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/lines0.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,42 +0,0 @@</div><div class='del'>-#! /usr/local/bin/wish</div><div class='del'>-</div><div class='del'>-proc drawlines {} {</div><div class='del'>-    puts [clock format [clock seconds]]</div><div class='del'>-</div><div class='del'>-    for {set j 0} {$j &lt; 100} {incr j} {</div><div class='del'>-	puts -nonewline "*"</div><div class='del'>-	flush stdout</div><div class='del'>-	if {$j &amp; 1} {</div><div class='del'>-	    set c "blue"</div><div class='del'>-	} {</div><div class='del'>-	    set c "red"</div><div class='del'>-	}</div><div class='del'>-	for {set i 0} {$i &lt; 100} {incr i} {</div><div class='del'>-#	    .a create line $i 0 0 [expr 500 - $i] -fill $c</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    puts [clock format [clock seconds]]</div><div class='del'>-</div><div class='del'>-    for {set j 0} {$j &lt; 100} {incr j} {</div><div class='del'>-	puts -nonewline "*"</div><div class='del'>-	flush stdout</div><div class='del'>-	if {$j &amp; 1} {</div><div class='del'>-	    set c "blue"</div><div class='del'>-	} {</div><div class='del'>-	    set c "red"</div><div class='del'>-	}</div><div class='del'>-	for {set i 0} {$i &lt; 100} {incr i} {</div><div class='del'>-	    .a create line $i 0 0 [expr 500 - $i] -fill $c</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    puts [clock format [clock seconds]]</div><div class='del'>-#    destroy .</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-canvas .a -height 500 -width 500</div><div class='del'>-button .b -text draw -command drawlines</div><div class='del'>-pack .a .b -side left</div><div class='del'>-</div><div class='del'>-# eof</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/lines1.rb b/ext/tk/sample/tcltklib/lines1.rb<br/>deleted file mode 100644<br/>index 9f21ae6377..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/lines1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/lines1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,50 +0,0 @@</div><div class='del'>-#! /usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "tcltk"</div><div class='del'>-</div><div class='del'>-def drawlines()</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-</div><div class='del'>-  for j in 0 .. 99</div><div class='del'>-    print "*"</div><div class='del'>-    $stdout.flush</div><div class='del'>-    if (j &amp; 1) != 0</div><div class='del'>-      col = "blue"</div><div class='del'>-    else</div><div class='del'>-      col = "red"</div><div class='del'>-    end</div><div class='del'>-    for i in 0 .. 99</div><div class='del'>-#      $a.e("create line", i, 0, 0, 500 - i, "-fill", col)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-</div><div class='del'>-  for j in 0 .. 99</div><div class='del'>-    print "*"</div><div class='del'>-    $stdout.flush</div><div class='del'>-    if (j &amp; 1) != 0</div><div class='del'>-      col = "blue"</div><div class='del'>-    else</div><div class='del'>-      col = "red"</div><div class='del'>-    end</div><div class='del'>-    for i in 0 .. 99</div><div class='del'>-      $a.e("create line", i, 0, 0, 500 - i, "-fill", col)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-#  $ip.commands()["destroy"].e($root)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$ip = TclTkInterpreter.new()</div><div class='del'>-$root = $ip.rootwidget()</div><div class='del'>-$a = TclTkWidget.new($ip, $root, "canvas", "-height 500 -width 500")</div><div class='del'>-$c = TclTkCallback.new($ip, proc{drawlines()})</div><div class='del'>-$b = TclTkWidget.new($ip, $root, "button", "-text draw -command", $c)</div><div class='del'>-</div><div class='del'>-$ip.commands()["pack"].e($a, $b, "-side left")</div><div class='del'>-</div><div class='del'>-TclTk.mainloop</div><div class='del'>-</div><div class='del'>-# eof</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/lines2.rb b/ext/tk/sample/tcltklib/lines2.rb<br/>deleted file mode 100644<br/>index e459589f50..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/lines2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/lines2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,54 +0,0 @@</div><div class='del'>-#! /usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-def drawlines()</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-</div><div class='del'>-  for j in 0 .. 99</div><div class='del'>-    print "*"</div><div class='del'>-    $stdout.flush</div><div class='del'>-    if (j &amp; 1) != 0</div><div class='del'>-      col = "blue"</div><div class='del'>-    else</div><div class='del'>-      col = "red"</div><div class='del'>-    end</div><div class='del'>-    for i in 0 .. 99</div><div class='del'>-#      TkcLine.new($a, i, 0, 0, 500 - i, "-fill", col)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-</div><div class='del'>-  for j in 0 .. 99</div><div class='del'>-    print "*"</div><div class='del'>-    $stdout.flush</div><div class='del'>-    if (j &amp; 1) != 0</div><div class='del'>-      col = "blue"</div><div class='del'>-    else</div><div class='del'>-      col = "red"</div><div class='del'>-    end</div><div class='del'>-    for i in 0 .. 99</div><div class='del'>-      TkcLine.new($a, i, 0, 0, 500 - i, "-fill", col)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-#  Tk.root.destroy</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$a = TkCanvas.new{</div><div class='del'>-  height(500)</div><div class='del'>-  width(500)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$b = TkButton.new{</div><div class='del'>-  text("draw")</div><div class='del'>-  command(proc{drawlines()})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkPack.configure($a, $b, {"side"=&gt;"left"})</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='del'>-</div><div class='del'>-# eof</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/lines3.rb b/ext/tk/sample/tcltklib/lines3.rb<br/>deleted file mode 100644<br/>index caa50f92e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/lines3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/lines3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,54 +0,0 @@</div><div class='del'>-#! /usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-def drawlines()</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-</div><div class='del'>-  for j in 0 .. 99</div><div class='del'>-    print "*"</div><div class='del'>-    $stdout.flush</div><div class='del'>-    if (j &amp; 1) != 0</div><div class='del'>-      col = "blue"</div><div class='del'>-    else</div><div class='del'>-      col = "red"</div><div class='del'>-    end</div><div class='del'>-    for i in 0 .. 99</div><div class='del'>-#      $a.create(TkcLine, i, 0, 0, 500 - i, "fill"=&gt;col)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-</div><div class='del'>-  for j in 0 .. 99</div><div class='del'>-    print "*"</div><div class='del'>-    $stdout.flush</div><div class='del'>-    if (j &amp; 1) != 0</div><div class='del'>-      col = "blue"</div><div class='del'>-    else</div><div class='del'>-      col = "red"</div><div class='del'>-    end</div><div class='del'>-    for i in 0 .. 99</div><div class='del'>-      $a.create(TkcLine, i, 0, 0, 500 - i, "fill"=&gt;col)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-#  Tk.root.destroy</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$a = TkCanvas.new{</div><div class='del'>-  height(500)</div><div class='del'>-  width(500)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$b = TkButton.new{</div><div class='del'>-  text("draw")</div><div class='del'>-  command(proc{drawlines()})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkPack.configure($a, $b, {"side"=&gt;"left"})</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='del'>-</div><div class='del'>-# eof</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/lines4.rb b/ext/tk/sample/tcltklib/lines4.rb<br/>deleted file mode 100644<br/>index 7a1175bce0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/lines4.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/lines4.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,54 +0,0 @@</div><div class='del'>-#! /usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-def drawlines()</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-</div><div class='del'>-  for j in 0 .. 99</div><div class='del'>-    print "*"</div><div class='del'>-    $stdout.flush</div><div class='del'>-    if (j &amp; 1) != 0</div><div class='del'>-      col = "blue"</div><div class='del'>-    else</div><div class='del'>-      col = "red"</div><div class='del'>-    end</div><div class='del'>-    for i in 0 .. 99</div><div class='del'>-#      TkCore::INTERP.__invoke($a.path, "create", "line", i.to_s, '0', '0', (500 - i).to_s, "-fill", col)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-</div><div class='del'>-  for j in 0 .. 99</div><div class='del'>-    print "*"</div><div class='del'>-    $stdout.flush</div><div class='del'>-    if (j &amp; 1) != 0</div><div class='del'>-      col = "blue"</div><div class='del'>-    else</div><div class='del'>-      col = "red"</div><div class='del'>-    end</div><div class='del'>-    for i in 0 .. 99</div><div class='del'>-      TkCore::INTERP.__invoke($a.path, "create", "line", i.to_s, '0', '0', (500 - i).to_s, "-fill", col)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  print Time.now, "\n"</div><div class='del'>-#  Tk.root.destroy</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$a = TkCanvas.new{</div><div class='del'>-  height(500)</div><div class='del'>-  width(500)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$b = TkButton.new{</div><div class='del'>-  text("draw")</div><div class='del'>-  command(proc{drawlines()})</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkPack.configure($a, $b, {"side"=&gt;"left"})</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='del'>-</div><div class='del'>-# eof</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/maru.gif b/ext/tk/sample/tcltklib/maru.gif<br/>deleted file mode 100644<br/>index 2c0202892e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/maru.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/maru.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tcltklib/safeTk.rb b/ext/tk/sample/tcltklib/safeTk.rb<br/>deleted file mode 100644<br/>index 5d2c60e700..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/safeTk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/safeTk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tcltklib'</div><div class='del'>-</div><div class='del'>-master = TclTkIp.new</div><div class='del'>-slave_name = 'slave0'</div><div class='del'>-slave = master.create_slave(slave_name, true)</div><div class='del'>-master._eval("::safe::interpInit #{slave_name}")</div><div class='del'>-master._eval("::safe::loadTk #{slave_name}")</div><div class='del'>-</div><div class='del'>-master._invoke('label', '.l1', '-text', 'master')</div><div class='del'>-master._invoke('pack', '.l1', '-padx', '30', '-pady', '50')</div><div class='del'>-master._eval('label .l2 -text {root widget of master-ip}')</div><div class='del'>-master._eval('pack .l2 -padx 30 -pady 50')</div><div class='del'>-</div><div class='del'>-slave._invoke('label', '.l1', '-text', 'slave')</div><div class='del'>-slave._invoke('pack', '.l1', '-padx', '30', '-pady', '50')</div><div class='del'>-slave._eval('label .l2 -text {root widget of slave-ip}')</div><div class='del'>-slave._eval('pack .l2 -padx 30 -pady 20')</div><div class='del'>-slave._eval('label .l3 -text {( container frame widget of master-ip )}')</div><div class='del'>-slave._eval('pack .l3 -padx 30 -pady 20')</div><div class='del'>-</div><div class='del'>-TclTkLib.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/sample0.rb b/ext/tk/sample/tcltklib/sample0.rb<br/>deleted file mode 100644<br/>index cd4c8069b4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/sample0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/sample0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-#! /usr/local/bin/ruby -vd</div><div class='del'>-</div><div class='del'>-# tcltklib ¥é¥¤¥Ö¥é¥ê¤Î¥Æ¥¹¥È</div><div class='del'>-</div><div class='del'>-require "tcltklib"</div><div class='del'>-</div><div class='del'>-def test</div><div class='del'>-  # ¥¤¥ó¥¿¥×¥ê¥¿¤òÀ¸À®¤¹¤ë</div><div class='del'>-  ip1 = TclTkIp.new()</div><div class='del'>-</div><div class='del'>-  # É¾²Á¤·¤Æ¤ß¤ë</div><div class='del'>-  print ip1._return_value().inspect, "\n"</div><div class='del'>-  print ip1._eval("puts {abc}").inspect, "\n"</div><div class='del'>-</div><div class='del'>-  # ¥Ü¥¿¥ó¤òºî¤Ã¤Æ¤ß¤ë</div><div class='del'>-  print ip1._return_value().inspect, "\n"</div><div class='del'>-  print ip1._eval("button .lab -text exit -command \"destroy .\"").inspect,</div><div class='del'>-    "\n"</div><div class='del'>-  print ip1._return_value().inspect, "\n"</div><div class='del'>-  print ip1._eval("pack .lab").inspect, "\n"</div><div class='del'>-  print ip1._return_value().inspect, "\n"</div><div class='del'>-</div><div class='del'>-  # ¥¤¥ó¥¿¥×¥ê¥¿¤«¤é ruby ¥³¥Þ¥ó¥É¤òÉ¾²Á¤·¤Æ¤ß¤ë</div><div class='del'>-#  print ip1._eval(%q/ruby {print "print by ruby\n"}/).inspect, "\n"</div><div class='del'>-  print ip1._eval(%q+puts [ruby {print "print by ruby\n"; "puts by tcl/tk"}]+).inspect, "\n"</div><div class='del'>-  print ip1._return_value().inspect, "\n"</div><div class='del'>-</div><div class='del'>-  # ¤â¤¦°ì¤Ä¥¤¥ó¥¿¥×¥ê¥¿¤òÀ¸À®¤·¤Æ¤ß¤ë</div><div class='del'>-  ip2 = TclTkIp.new()</div><div class='del'>-  ip2._eval("button .lab -text test -command \"puts test ; destroy .\"")</div><div class='del'>-  ip2._eval("pack .lab")</div><div class='del'>-</div><div class='del'>-  TclTkLib.mainloop</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-test</div><div class='del'>-GC.start</div><div class='del'>-</div><div class='del'>-print "exit\n"</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/sample1.rb b/ext/tk/sample/tcltklib/sample1.rb<br/>deleted file mode 100644<br/>index 13df440751..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/sample1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/sample1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,634 +0,0 @@</div><div class='del'>-#! /usr/local/bin/ruby -d</div><div class='del'>-#! /usr/local/bin/ruby</div><div class='del'>-# -d ¥ª¥×¥·¥ç¥ó¤òÉÕ¤±¤ë¤È, ¥Ç¥Ð¥Ã¥°¾ðÊó¤òÉ½¼¨¤¹¤ë.</div><div class='del'>-</div><div class='del'>-# tcltk ¥é¥¤¥Ö¥é¥ê¤Î¥µ¥ó¥×¥ë</div><div class='del'>-</div><div class='del'>-# ¤Þ¤º, ¥é¥¤¥Ö¥é¥ê¤ò require ¤¹¤ë.</div><div class='del'>-require "tcltk"</div><div class='del'>-</div><div class='del'>-# °Ê²¼¤Ï, Test1 ¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Î initialize() ¤Ç,</div><div class='del'>-# tcl/tk ¤Ë´Ø¤¹¤ë½èÍý¤ò¹Ô¤¦Îã¤Ç¤¢¤ë.</div><div class='del'>-# É¬¤º¤·¤â¤½¤Î¤è¤¦¤Ë¤¹¤ëÉ¬Í×¤ÏÌµ¤¯,</div><div class='del'>-# (¤â¤·, ¤½¤¦¤·¤¿¤±¤ì¤Ð) class ¤Î³°¤Ç tcl/tk ¤Ë´Ø¤¹¤ë½èÍý¤ò¹Ô¤Ã¤Æ¤âÎÉ¤¤.</div><div class='del'>-</div><div class='del'>-class Test1</div><div class='del'>-  # ½é´ü²½(¥¤¥ó¥¿¥×¥ê¥¿¤òÀ¸À®¤·¤Æ¥¦¥£¥¸¥§¥Ã¥È¤òÀ¸À®¤¹¤ë).</div><div class='del'>-  def initialize()</div><div class='del'>-</div><div class='del'>-    #### »È¤¦Á°¤Î¤ª¤Þ¤¸¤Ê¤¤</div><div class='del'>-</div><div class='del'>-    # ¥¤¥ó¥¿¥×¥ê¥¿¤ÎÀ¸À®.</div><div class='del'>-    ip = TclTkInterpreter.new()</div><div class='del'>-    # ¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ò c ¤ËÀßÄê¤·¤Æ¤ª¤¯.</div><div class='del'>-    c = ip.commands()</div><div class='del'>-    # »ÈÍÑ¤¹¤ë¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ÏÊÑ¿ô¤ËÆþ¤ì¤Æ¤ª¤¯.</div><div class='del'>-    append, bind, button, destroy, incr, info, label, place, set, wm =</div><div class='del'>-      c.values_at(</div><div class='del'>-      "append", "bind", "button", "destroy", "incr", "info", "label", "place",</div><div class='del'>-      "set", "wm")</div><div class='del'>-</div><div class='del'>-    #### tcl/tk ¤Î¥³¥Þ¥ó¥É¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È(TclTkCommand)¤ÎÁàºî</div><div class='del'>-</div><div class='del'>-    # ¼Â¹Ô¤¹¤ë»þ¤Ï, e() ¥á¥½¥Ã¥É¤ò»È¤¦.</div><div class='del'>-    # (°Ê²¼¤Ï, tcl/tk ¤Ë¤ª¤±¤ë info command r* ¤ò¼Â¹Ô.)</div><div class='del'>-    print info.e("command", "r*"), "\n"</div><div class='del'>-    # °ú¿ô¤Ï, ¤Þ¤È¤á¤¿Ê¸»úÎó¤Ë¤·¤Æ¤âÆ±¤¸.</div><div class='del'>-    print info.e("command r*"), "\n"</div><div class='del'>-    # ÊÑ¿ô¤òÍÑ¤¤¤Ê¤¯¤È¤â¼Â¹Ô¤Ç¤­¤ë¤¬, ¸«¤¿¤á¤¬°­¤¤.</div><div class='del'>-    print c["info"].e("command", "r*"), "\n"</div><div class='del'>-    # ¥¤¥ó¥¿¥×¥ê¥¿¤Î¥á¥½¥Ã¥É¤È¤·¤Æ¤â¼Â¹Ô¤Ç¤­¤ë¤¬, ¸úÎ¨¤¬°­¤¤.</div><div class='del'>-    print ip.info("command", "r*"), "\n"</div><div class='del'>-</div><div class='del'>-    ####</div><div class='del'>-</div><div class='del'>-    # °Ê²¼, À¸À®¤·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ÏÊÑ¿ô¤ËÂåÆþ¤·¤Æ¤ª¤«¤Ê¤¤¤È</div><div class='del'>-    # GC ¤ÎÂÐ¾Ý¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦.</div><div class='del'>-</div><div class='del'>-    #### tcl/tk ¤ÎÊÑ¿ô¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È(TclTkVariable)¤ÎÁàºî</div><div class='del'>-</div><div class='del'>-    # À¸À®¤ÈÆ±»þ¤ËÃÍ¤òÀßÄê¤¹¤ë.</div><div class='del'>-    v1 = TclTkVariable.new(ip, "20")</div><div class='del'>-    # ÆÉ¤ß½Ð¤·¤Ï get ¥á¥½¥Ã¥É¤ò»È¤¦.</div><div class='del'>-    print v1.get(), "\n"</div><div class='del'>-    # ÀßÄê¤Ï set ¥á¥½¥Ã¥É¤ò»È¤¦.</div><div class='del'>-    v1.set(40)</div><div class='del'>-    print v1.get(), "\n"</div><div class='del'>-    # set ¥³¥Þ¥ó¥É¤ò»È¤Ã¤ÆÆÉ¤ß½Ð¤·, ÀßÄê¤Ï²ÄÇ½¤À¤¬¸«¤¿¤á¤¬°­¤¤.</div><div class='del'>-    # e() ¥á¥½¥Ã¥ÉÅù¤Î°ú¿ô¤ËÄ¾ÀÜ TclTkObject ¤ä¿ôÃÍ¤ò½ñ¤¤¤Æ¤âÎÉ¤¤.</div><div class='del'>-    set.e(v1, 30)</div><div class='del'>-    print set.e(v1), "\n"</div><div class='del'>-    # tcl/tk ¤Î¥³¥Þ¥ó¥É¤ÇÊÑ¿ô¤òÁàºî¤Ç¤­¤ë.</div><div class='del'>-    incr.e(v1)</div><div class='del'>-    print v1.get(), "\n"</div><div class='del'>-    append.e(v1, 10)</div><div class='del'>-    print v1.get(), "\n"</div><div class='del'>-</div><div class='del'>-    #### tcl/tk ¤Î¥¦¥£¥¸¥§¥Ã¥È¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È(TclTkWidget)¤ÎÁàºî</div><div class='del'>-</div><div class='del'>-    # ¥ë¡¼¥È¥¦¥£¥¸¥§¥Ã¥È¤ò¼è¤ê½Ð¤¹.</div><div class='del'>-    root = ip.rootwidget()</div><div class='del'>-    # ¥¦¥£¥¸¥§¥Ã¥È¤ÎÁàºî.</div><div class='del'>-    root.e("configure -height 300 -width 300")</div><div class='del'>-    # ¥¿¥¤¥È¥ë¤òÉÕ¤±¤ë¤È¤­¤Ï wm ¤ò»È¤¦.</div><div class='del'>-    wm.e("title", root, $0)</div><div class='del'>-    # ¿Æ¥¦¥£¥¸¥§¥Ã¥È¤È¥³¥Þ¥ó¥É¤ò»ØÄê¤·¤Æ, ¥¦¥£¥¸¥§¥Ã¥È¤òºî¤ë.</div><div class='del'>-    l1 = TclTkWidget.new(ip, root, label, "-text {type `x' to print}")</div><div class='del'>-    # place ¤¹¤ë¤ÈÉ½¼¨¤µ¤ì¤ë.</div><div class='del'>-    place.e(l1, "-x 0 -rely 0.0 -relwidth 1 -relheight 0.1")</div><div class='del'>-    # ¥³¥Þ¥ó¥ÉÌ¾¤ÏÊ¸»úÎó¤Ç»ØÄê¤·¤Æ¤âÎÉ¤¤¤¬, ¸«¤¿¤á¤¬°­¤¤.</div><div class='del'>-    # (¥³¥Þ¥ó¥ÉÌ¾¤ÏÆÈÎ©¤·¤¿°ú¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤.)</div><div class='del'>-    l2 = TclTkWidget.new(ip, root, "label")</div><div class='del'>-    # ¥¦¥£¥¸¥§¥Ã¥È¤ÎÁàºî.</div><div class='del'>-    l2.e("configure -text {type `q' to exit}")</div><div class='del'>-    place.e(l2, "-x 0 -rely 0.1 -relwidth 1 -relheight 0.1")</div><div class='del'>-</div><div class='del'>-    #### tcl/tk ¤Î¥³¡¼¥ë¥Ð¥Ã¥¯¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È(TclTkCallback)¤ÎÁàºî</div><div class='del'>-</div><div class='del'>-    # ¥³¡¼¥ë¥Ð¥Ã¥¯¤òÀ¸À®¤¹¤ë.</div><div class='del'>-    c1 = TclTkCallback.new(ip, proc{sample(ip, root)})</div><div class='del'>-    # ¥³¡¼¥ë¥Ð¥Ã¥¯¤ò»ý¤Ä¥¦¥£¥¸¥§¥Ã¥È¤òÀ¸À®¤¹¤ë.</div><div class='del'>-    b1 = TclTkWidget.new(ip, root, button, "-text sample -command", c1)</div><div class='del'>-    place.e(b1, "-x 0 -rely 0.2 -relwidth 1 -relheight 0.1")</div><div class='del'>-    # ¥¤¥Ù¥ó¥È¥ë¡¼¥×¤òÈ´¤±¤ë¤Ë¤Ï destroy.e(root) ¤¹¤ë.</div><div class='del'>-    c2 = TclTkCallback.new(ip, proc{destroy.e(root)})</div><div class='del'>-    b2 = TclTkWidget.new(ip, root, button, "-text exit -command", c2)</div><div class='del'>-    place.e(b2, "-x 0 -rely 0.3 -relwidth 1 -relheight 0.1")</div><div class='del'>-</div><div class='del'>-    #### ¥¤¥Ù¥ó¥È¤Î¥Ð¥¤¥ó¥É</div><div class='del'>-    # script ¤ÎÄÉ²Ã (bind tag sequence +script) ¤Ïº£¤Î¤È¤³¤í¤Ç¤­¤Ê¤¤.</div><div class='del'>-    # (¥¤¥Æ¥ì¡¼¥¿ÊÑ¿ô¤ÎÀßÄê¤¬¤¦¤Þ¤¯¤¤¤«¤Ê¤¤.)</div><div class='del'>-</div><div class='del'>-    # ´ðËÜÅª¤Ë¤Ï¥¦¥£¥¸¥§¥Ã¥È¤ËÂÐ¤¹¤ë¥³¡¼¥ë¥Ð¥Ã¥¯¤ÈÆ±¤¸.</div><div class='del'>-    c3 = TclTkCallback.new(ip, proc{print("q pressed\n"); destroy.e(root)})</div><div class='del'>-    bind.e(root, "q", c3)</div><div class='del'>-    # bind ¥³¥Þ¥ó¥É¤Ç % ÃÖ´¹¤Ë¤è¤ê¥Ñ¥é¥á¡¼¥¿¤ò¼õ¤±¼è¤ê¤¿¤¤¤È¤­¤Ï,</div><div class='del'>-    # proc{} ¤Î¸å¤í¤ËÊ¸»úÎó¤Ç»ØÄê¤¹¤ë¤È,</div><div class='del'>-    # ÃÖ´¹·ë²Ì¤ò¥¤¥Æ¥ì¡¼¥¿ÊÑ¿ô¤òÄÌ¤·¤Æ¼õ¤±¼è¤ë¤³¤È¤¬¤Ç¤­¤ë.</div><div class='del'>-    # ¤¿¤À¤· proc{} ¤Î¸å¤í¤ÎÊ¸»úÎó¤Ï,</div><div class='del'>-    # bind ¥³¥Þ¥ó¥É¤ËÍ¿¤¨¤ë¥³¡¼¥ë¥Ð¥Ã¥¯°Ê³°¤Ç»ØÄê¤·¤Æ¤Ï¤¤¤±¤Ê¤¤.</div><div class='del'>-    c4 = TclTkCallback.new(ip, proc{|i| print("#{i} pressed\n")}, "%A")</div><div class='del'>-    bind.e(root, "x", c4)</div><div class='del'>-    # TclTkCallback ¤ò GC ¤ÎÂÐ¾Ý¤Ë¤·¤¿¤±¤ì¤Ð,</div><div class='del'>-    # dcb() (¤Þ¤¿¤Ï deletecallbackkeys()) ¤¹¤ëÉ¬Í×¤¬¤¢¤ë.</div><div class='del'>-    cb = [c1, c2, c3, c4]</div><div class='del'>-    c5 = TclTkCallback.new(ip, proc{|w| TclTk.dcb(cb, root, w)}, "%W")</div><div class='del'>-    bind.e(root, "&lt;Destroy&gt;", c5)</div><div class='del'>-    cb.push(c5)</div><div class='del'>-</div><div class='del'>-    #### tcl/tk ¤Î¥¤¥á¡¼¥¸¤ËÂÐ±þ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È(TclTkImage)¤ÎÁàºî</div><div class='del'>-</div><div class='del'>-    # ¥Ç¡¼¥¿¤ò»ØÄê¤·¤ÆÀ¸À®¤¹¤ë.</div><div class='del'>-    i1 = TclTkImage.new(ip, "photo", "-file maru.gif")</div><div class='del'>-    # ¥é¥Ù¥ë¤ËÄ¥¤êÉÕ¤±¤Æ¤ß¤ë.</div><div class='del'>-    l3 = TclTkWidget.new(ip, root, label, "-relief raised -image", i1)</div><div class='del'>-    place.e(l3, "-x 0 -rely 0.4 -relwidth 0.2 -relheight 0.2")</div><div class='del'>-    # ¶õ¤Î¥¤¥á¡¼¥¸¤òÀ¸À®¤·¤Æ¸å¤ÇÁàºî¤¹¤ë.</div><div class='del'>-    i2 = TclTkImage.new(ip, "photo")</div><div class='del'>-    # ¥¤¥á¡¼¥¸¤òÁàºî¤¹¤ë.</div><div class='del'>-    i2.e("copy", i1)</div><div class='del'>-    i2.e("configure -gamma 0.5")</div><div class='del'>-    l4 = TclTkWidget.new(ip, root, label, "-relief raised -image", i2)</div><div class='del'>-    place.e(l4, "-relx 0.2 -rely 0.4 -relwidth 0.2 -relheight 0.2")</div><div class='del'>-</div><div class='del'>-    ####</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # ¥µ¥ó¥×¥ë¤Î¤¿¤á¤Î¥¦¥£¥¸¥§¥Ã¥È¤òÀ¸À®¤¹¤ë.</div><div class='del'>-  def sample(ip, parent)</div><div class='del'>-    bind, button, destroy, grid, toplevel, wm = ip.commands().values_at(</div><div class='del'>-      "bind", "button", "destroy", "grid", "toplevel", "wm")</div><div class='del'>-</div><div class='del'>-    ## toplevel</div><div class='del'>-</div><div class='del'>-    # ¿·¤·¤¤¥¦¥¤¥ó¥É¥¦¤ò³«¤¯¤Ë¤Ï, toplevel ¤ò»È¤¦.</div><div class='del'>-    t1 = TclTkWidget.new(ip, parent, toplevel)</div><div class='del'>-    # ¥¿¥¤¥È¥ë¤òÉÕ¤±¤Æ¤ª¤¯</div><div class='del'>-    wm.e("title", t1, "sample")</div><div class='del'>-</div><div class='del'>-    # ¥¦¥£¥¸¥§¥Ã¥È¤¬ÇË²õ¤µ¤ì¤¿¤È¤­, ¥³¡¼¥ë¥Ð¥Ã¥¯¤¬ GC ¤ÎÂÐ¾Ý¤Ë¤Ê¤ë¤è¤¦¤Ë¤¹¤ë.</div><div class='del'>-    cb = []</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{|w| TclTk.dcb(cb, t1, w)}, "%W"))</div><div class='del'>-    bind.e(t1, "&lt;Destroy&gt;", c)</div><div class='del'>-</div><div class='del'>-    # ¥Ü¥¿¥ó¤ÎÀ¸À®.</div><div class='del'>-    wid = []</div><div class='del'>-    # toplevel ¥¦¥£¥¸¥§¥Ã¥È¤òÇË²õ¤¹¤ë¤Ë¤Ï destroy ¤¹¤ë.</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{destroy.e(t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text close -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_label(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text label -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_button(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text button -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_checkbutton(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text checkbutton -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_radiobutton(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text radiobutton -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_scale(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text scale -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_entry(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text entry -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_text(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text text -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_raise(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text raise/lower -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_modal(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text message/modal -command",</div><div class='del'>-      c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_menu(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text menu -command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_listbox(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text listbox/scrollbar",</div><div class='del'>-      "-command", c))</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{test_canvas(ip, t1)}))</div><div class='del'>-    wid.push(TclTkWidget.new(ip, t1, button, "-text canvas -command", c))</div><div class='del'>-</div><div class='del'>-    # grid ¤ÇÉ½¼¨¤¹¤ë.</div><div class='del'>-    ro = co = 0</div><div class='del'>-    wid.each{|w|</div><div class='del'>-      grid.e(w, "-row", ro, "-column", co, "-sticky news")</div><div class='del'>-      ro += 1</div><div class='del'>-      if ro == 7</div><div class='del'>-        ro = 0</div><div class='del'>-        co += 1</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # inittoplevel(ip, parent, title)</div><div class='del'>-  #   °Ê²¼¤Î½èÍý¤ò¤Þ¤È¤á¤Æ¹Ô¤¦.</div><div class='del'>-  #       1. toplevel ¥¦¥£¥¸¥§¥Ã¥È¤òºîÀ®¤¹¤ë.</div><div class='del'>-  #       2. ¥³¡¼¥ë¥Ð¥Ã¥¯¤òÅÐÏ¿¤¹¤ëÇÛÎó¤òÍÑ°Õ¤·, toplevel ¥¦¥£¥¸¥§¥Ã¥È¤Î</div><div class='del'>-  #         &lt;Destroy&gt; ¥¤¥Ù¥ó¥È¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯¤òºï½ü¤¹¤ë¼êÂ³¤­¤òÅÐÏ¿¤¹¤ë.</div><div class='del'>-  #       3. ¥¯¥í¡¼¥º¥Ü¥¿¥ó¤òºî¤ë.</div><div class='del'>-  #     ºîÀ®¤·¤¿ toplevel ¥¦¥£¥¸¥§¥Ã¥È, ¥¯¥í¡¼¥º¥Ü¥¿¥ó, ¥³¡¼¥ë¥Ð¥Ã¥¯ÅÐÏ¿ÍÑÊÑ¿ô</div><div class='del'>-  #     ¤òÊÖ¤¹.</div><div class='del'>-  #   ip: ¥¤¥ó¥¿¥×¥ê¥¿</div><div class='del'>-  #   parent: ¿Æ¥¦¥£¥¸¥§¥Ã¥È</div><div class='del'>-  #   title: toplevel ¥¦¥£¥¸¥§¥Ã¥È¤Î¥¦¥¤¥ó¥É¥¦¤Î¥¿¥¤¥È¥ë</div><div class='del'>-  def inittoplevel(ip, parent, title)</div><div class='del'>-    bind, button, destroy, toplevel, wm = ip.commands().values_at(</div><div class='del'>-      "bind", "button", "destroy", "toplevel", "wm")</div><div class='del'>-</div><div class='del'>-    # ¿·¤·¤¤¥¦¥¤¥ó¥É¥¦¤ò³«¤¯¤Ë¤Ï, toplevel ¤ò»È¤¦.</div><div class='del'>-    t1 = TclTkWidget.new(ip, parent, toplevel)</div><div class='del'>-    # ¥¿¥¤¥È¥ë¤òÉÕ¤±¤Æ¤ª¤¯</div><div class='del'>-    wm.e("title", t1, title)</div><div class='del'>-</div><div class='del'>-    # ¥¦¥£¥¸¥§¥Ã¥È¤¬ÇË²õ¤µ¤ì¤¿¤È¤­, ¥³¡¼¥ë¥Ð¥Ã¥¯¤¬ GC ¤ÎÂÐ¾Ý¤Ë¤Ê¤ë¤è¤¦¤Ë¤¹¤ë.</div><div class='del'>-    cb = []</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{|w| TclTk.dcb(cb, t1, w)}, "%W"))</div><div class='del'>-    bind.e(t1, "&lt;Destroy&gt;", c)</div><div class='del'>-    # close ¥Ü¥¿¥ó¤òºî¤Ã¤Æ¤ª¤¯.</div><div class='del'>-    # toplevel ¥¦¥£¥¸¥§¥Ã¥È¤òÇË²õ¤¹¤ë¤Ë¤Ï destroy ¤¹¤ë.</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{destroy.e(t1)}))</div><div class='del'>-    b1 = TclTkWidget.new(ip, t1, button, "-text close -command", c)</div><div class='del'>-</div><div class='del'>-    return t1, b1, cb</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # label ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_label(ip, parent)</div><div class='del'>-    button, global, label, pack = ip.commands().values_at(</div><div class='del'>-      "button", "global", "label", "pack")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "label")</div><div class='del'>-</div><div class='del'>-    ## label</div><div class='del'>-</div><div class='del'>-    # ¤¤¤í¤¤¤í¤Ê·Á¤Î¥é¥Ù¥ë.</div><div class='del'>-    l1 = TclTkWidget.new(ip, t1, label, "-text {default(flat)}")</div><div class='del'>-    l2 = TclTkWidget.new(ip, t1, label, "-text raised -relief raised")</div><div class='del'>-    l3 = TclTkWidget.new(ip, t1, label, "-text sunken -relief sunken")</div><div class='del'>-    l4 = TclTkWidget.new(ip, t1, label, "-text groove -relief groove")</div><div class='del'>-    l5 = TclTkWidget.new(ip, t1, label, "-text ridge -relief ridge")</div><div class='del'>-    l6 = TclTkWidget.new(ip, t1, label, "-bitmap error")</div><div class='del'>-    l7 = TclTkWidget.new(ip, t1, label, "-bitmap questhead")</div><div class='del'>-</div><div class='del'>-    # pack ¤·¤Æ¤âÉ½¼¨¤µ¤ì¤ë.</div><div class='del'>-    pack.e(b1, l1, l2, l3, l4, l5, l6, l7, "-pady 3")</div><div class='del'>-</div><div class='del'>-    ## -textvariable</div><div class='del'>-</div><div class='del'>-    # tcltk ¥é¥¤¥Ö¥é¥ê¤Î¼ÂÁõ¤Ç¤Ï, ¥³¡¼¥ë¥Ð¥Ã¥¯¤Ï tcl/tk ¤Î``¼êÂ³¤­''¤òÄÌ¤·¤Æ</div><div class='del'>-    # ¸Æ¤Ð¤ì¤ë. ¤·¤¿¤¬¤Ã¤Æ, ¥³¡¼¥ë¥Ð¥Ã¥¯¤ÎÃæ¤Ç(Âç°è)ÊÑ¿ô¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤È¤­¤Ï,</div><div class='del'>-    # global ¤¹¤ëÉ¬Í×¤¬¤¢¤ë.</div><div class='del'>-    # global ¤¹¤ëÁ°¤ËÊÑ¿ô¤ËÃÍ¤òÀßÄê¤·¤Æ¤·¤Þ¤¦¤È¥¨¥é¡¼¤Ë¤Ê¤ë¤Î¤Ç,</div><div class='del'>-    # tcl/tk ¤Ë¤ª¤±¤ëÉ½¸½·Á¤À¤±À¸À®¤·¤Æ, ¼ÂºÝ¤ËÃÍ¤òÀßÄê¤·¤Ê¤¤¤è¤¦¤Ë,</div><div class='del'>-    # 2 ÈÖÌÜ¤Î°ú¿ô¤Ë¤Ï nil ¤òÍ¿¤¨¤ë.</div><div class='del'>-    v1 = TclTkVariable.new(ip, nil)</div><div class='del'>-    global.e(v1)</div><div class='del'>-    v1.set(100)</div><div class='del'>-    # -textvariable ¤ÇÊÑ¿ô¤òÀßÄê¤¹¤ë.</div><div class='del'>-    l6 = TclTkWidget.new(ip, t1, label, "-textvariable", v1)</div><div class='del'>-    # ¥³¡¼¥ë¥Ð¥Ã¥¯¤ÎÃæ¤«¤éÊÑ¿ô¤òÁàºî¤¹¤ë.</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      global.e(v1); v1.set(v1.get().to_i + 10)}))</div><div class='del'>-    b2 = TclTkWidget.new(ip, t1, button, "-text +10 -command", c)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      global.e(v1); v1.set(v1.get().to_i - 10)}))</div><div class='del'>-    b3 = TclTkWidget.new(ip, t1, button, "-text -10 -command", c)</div><div class='del'>-    pack.e(l6, b2, b3)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # button ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_button(ip, parent)</div><div class='del'>-    button, pack = ip.commands().values_at("button", "pack")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "button")</div><div class='del'>-</div><div class='del'>-    ## button</div><div class='del'>-</div><div class='del'>-    # ¥³¡¼¥ë¥Ð¥Ã¥¯Æâ¤Ç»²¾È¤¹¤ëÊÑ¿ô¤ÏÀè¤ËÀë¸À¤·¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤.</div><div class='del'>-    b3 = b4 = nil</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{b3.e("flash"); b4.e("flash")}))</div><div class='del'>-    b2 = TclTkWidget.new(ip, t1, button, "-text flash -command", c)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{b2.e("configure -state normal")}))</div><div class='del'>-    b3 = TclTkWidget.new(ip, t1, button, "-text normal -command", c)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{b2.e("configure -state disabled")}))</div><div class='del'>-    b4 = TclTkWidget.new(ip, t1, button, "-text disable -command", c)</div><div class='del'>-    pack.e(b1, b2, b3, b4)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # checkbutton ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_checkbutton(ip, parent)</div><div class='del'>-    checkbutton, global, pack = ip.commands().values_at(</div><div class='del'>-      "checkbutton", "global", "pack")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "checkbutton")</div><div class='del'>-</div><div class='del'>-    ## checkbutton</div><div class='del'>-</div><div class='del'>-    v1 = TclTkVariable.new(ip, nil)</div><div class='del'>-    global.e(v1)</div><div class='del'>-    # -variable ¤ÇÊÑ¿ô¤òÀßÄê¤¹¤ë.</div><div class='del'>-    ch1 = TclTkWidget.new(ip, t1, checkbutton, "-onvalue on -offvalue off",</div><div class='del'>-      "-textvariable", v1, "-variable", v1)</div><div class='del'>-    pack.e(b1, ch1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # radiobutton ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_radiobutton(ip, parent)</div><div class='del'>-    global, label, pack, radiobutton = ip.commands().values_at(</div><div class='del'>-      "global", "label", "pack", "radiobutton")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "radiobutton")</div><div class='del'>-</div><div class='del'>-    ## radiobutton</div><div class='del'>-</div><div class='del'>-    v1 = TclTkVariable.new(ip, nil)</div><div class='del'>-    global.e(v1)</div><div class='del'>-    # ¥Ì¥ë¥¹¥È¥ê¥ó¥°¤Ï "{}" ¤Ç»ØÄê¤¹¤ë.</div><div class='del'>-    v1.set("{}")</div><div class='del'>-    l1 = TclTkWidget.new(ip, t1, label, "-textvariable", v1)</div><div class='del'>-    # -variable ¤ÇÆ±¤¸ÊÑ¿ô¤ò»ØÄê¤¹¤ë¤ÈÆ±¤¸¥°¥ë¡¼¥×¤Ë¤Ê¤ë.</div><div class='del'>-    ra1 = TclTkWidget.new(ip, t1, radiobutton,</div><div class='del'>-      "-text radio1 -value r1 -variable", v1)</div><div class='del'>-    ra2 = TclTkWidget.new(ip, t1, radiobutton,</div><div class='del'>-      "-text radio2 -value r2 -variable", v1)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{global.e(v1); v1.set("{}")}))</div><div class='del'>-    ra3 = TclTkWidget.new(ip, t1, radiobutton,</div><div class='del'>-      "-text clear -value r3 -variable", v1, "-command", c)</div><div class='del'>-    pack.e(b1, l1, ra1, ra2, ra3)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # scale ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_scale(ip, parent)</div><div class='del'>-    global, pack, scale = ip.commands().values_at(</div><div class='del'>-      "global", "pack", "scale")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "scale")</div><div class='del'>-</div><div class='del'>-    ## scale</div><div class='del'>-</div><div class='del'>-    v1 = TclTkVariable.new(ip, nil)</div><div class='del'>-    global.e(v1)</div><div class='del'>-    v1.set(219)</div><div class='del'>-    # ¥³¡¼¥ë¥Ð¥Ã¥¯Æâ¤Ç»²¾È¤¹¤ëÊÑ¿ô¤ÏÀè¤ËÀë¸À¤·¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤.</div><div class='del'>-    sca1 = nil</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{global.e(v1); v = v1.get();</div><div class='del'>-      sca1.e("configure -background", format("#%02x%02x%02x", v, v, v))}))</div><div class='del'>-    sca1 = TclTkWidget.new(ip, t1, scale,</div><div class='del'>-      "-label scale -orient h -from 0 -to 255 -variable", v1, "-command", c)</div><div class='del'>-    pack.e(b1, sca1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # entry ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_entry(ip, parent)</div><div class='del'>-    button, entry, global, pack = ip.commands().values_at(</div><div class='del'>-      "button", "entry", "global", "pack")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "entry")</div><div class='del'>-</div><div class='del'>-    ## entry</div><div class='del'>-</div><div class='del'>-    v1 = TclTkVariable.new(ip, nil)</div><div class='del'>-    global.e(v1)</div><div class='del'>-    # ¥Ì¥ë¥¹¥È¥ê¥ó¥°¤Ï "{}" ¤Ç»ØÄê¤¹¤ë.</div><div class='del'>-    v1.set("{}")</div><div class='del'>-    en1 = TclTkWidget.new(ip, t1, entry, "-textvariable", v1)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      global.e(v1); print(v1.get(), "\n"); v1.set("{}")}))</div><div class='del'>-    b2 = TclTkWidget.new(ip, t1, button, "-text print -command", c)</div><div class='del'>-    pack.e(b1, en1, b2)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # text ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_text(ip, parent)</div><div class='del'>-    button, pack, text = ip.commands().values_at(</div><div class='del'>-      "button", "pack", "text")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "text")</div><div class='del'>-</div><div class='del'>-    ## text</div><div class='del'>-</div><div class='del'>-    te1 = TclTkWidget.new(ip, t1, text)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      # 1 ¹ÔÌÜ¤Î 0 Ê¸»úÌÜ¤«¤éºÇ¸å¤Þ¤Ç¤òÉ½¼¨¤·, ºï½ü¤¹¤ë.</div><div class='del'>-      print(te1.e("get 1.0 end")); te1.e("delete 1.0 end")}))</div><div class='del'>-    b2 = TclTkWidget.new(ip, t1, button, "-text print -command", c)</div><div class='del'>-    pack.e(b1, te1, b2)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # raise/lower ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_raise(ip, parent)</div><div class='del'>-    button, frame, lower, pack, raise = ip.commands().values_at(</div><div class='del'>-      "button", "frame", "lower", "pack", "raise")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "raise/lower")</div><div class='del'>-</div><div class='del'>-    ## raise/lower</div><div class='del'>-</div><div class='del'>-    # button ¤ò±£¤¹¥Æ¥¹¥È¤Î¤¿¤á¤Ë, frame ¤ò»È¤¦.</div><div class='del'>-    f1 = TclTkWidget.new(ip, t1, frame)</div><div class='del'>-    # ¥³¡¼¥ë¥Ð¥Ã¥¯Æâ¤Ç»²¾È¤¹¤ëÊÑ¿ô¤ÏÀè¤ËÀë¸À¤·¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤.</div><div class='del'>-    b2 = nil</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{raise.e(f1, b2)}))</div><div class='del'>-    b2 = TclTkWidget.new(ip, t1, button, "-text raise -command", c)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{lower.e(f1, b2)}))</div><div class='del'>-    b3 = TclTkWidget.new(ip, t1, button, "-text lower -command", c)</div><div class='del'>-    lower.e(f1, b3)</div><div class='del'>-</div><div class='del'>-    pack.e(b2, b3, "-in", f1)</div><div class='del'>-    pack.e(b1, f1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # modal ¤Ê¥¦¥£¥¸¥§¥Ã¥È¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_modal(ip, parent)</div><div class='del'>-    button, frame, message, pack, tk_chooseColor, tk_getOpenFile,</div><div class='del'>-      tk_messageBox = ip.commands().values_at(</div><div class='del'>-      "button", "frame", "message", "pack", "tk_chooseColor",</div><div class='del'>-      "tk_getOpenFile", "tk_messageBox")</div><div class='del'>-    # ºÇ½é¤Ë load ¤µ¤ì¤Æ¤¤¤Ê¤¤¥é¥¤¥Ö¥é¥ê¤Ï ip.commands() ¤ËÂ¸ºß¤·¤Ê¤¤¤Î¤Ç,</div><div class='del'>-    # TclTkLibCommand ¤òÀ¸À®¤¹¤ëÉ¬Í×¤¬¤¢¤ë.</div><div class='del'>-    tk_dialog = TclTkLibCommand.new(ip, "tk_dialog")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "message/modal")</div><div class='del'>-</div><div class='del'>-    ## message</div><div class='del'>-</div><div class='del'>-    mes = "¤³¤ì¤Ï message ¥¦¥£¥¸¥§¥Ã¥È¤Î¥Æ¥¹¥È¤Ç¤¹."</div><div class='del'>-    mes += "°Ê²¼¤Ï modal ¤Ê¥¦¥£¥¸¥§¥Ã¥È¤Î¥Æ¥¹¥È¤Ç¤¹."</div><div class='del'>-    me1 = TclTkWidget.new(ip, t1, message, "-text {#{mes}}")</div><div class='del'>-</div><div class='del'>-    ## modal</div><div class='del'>-</div><div class='del'>-    # tk_messageBox</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      print tk_messageBox.e("-type yesnocancel -message messageBox",</div><div class='del'>-      "-icon error -default cancel -title messageBox"), "\n"}))</div><div class='del'>-    b2 = TclTkWidget.new(ip, t1, button, "-text messageBox -command", c)</div><div class='del'>-    # tk_dialog</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      # ¥¦¥£¥¸¥§¥Ã¥ÈÌ¾¤òÀ¸À®¤¹¤ë¤¿¤á¤Ë¥À¥ß¡¼¤Î frame ¤òÀ¸À®.</div><div class='del'>-      print tk_dialog.e(TclTkWidget.new(ip, t1, frame),</div><div class='del'>-      "dialog dialog error 2 yes no cancel"), "\n"}))</div><div class='del'>-    b3 = TclTkWidget.new(ip, t1, button, "-text dialog -command", c)</div><div class='del'>-    # tk_chooseColor</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      print tk_chooseColor.e("-title chooseColor"), "\n"}))</div><div class='del'>-    b4 = TclTkWidget.new(ip, t1, button, "-text chooseColor -command", c)</div><div class='del'>-    # tk_getOpenFile</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      print tk_getOpenFile.e("-defaultextension .rb",</div><div class='del'>-      "-filetypes {{{Ruby Script} {.rb}} {{All Files} {*}}}",</div><div class='del'>-      "-title getOpenFile"), "\n"}))</div><div class='del'>-    b5 = TclTkWidget.new(ip, t1, button, "-text getOpenFile -command", c)</div><div class='del'>-</div><div class='del'>-    pack.e(b1, me1, b2, b3, b4, b5)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # menu ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_menu(ip, parent)</div><div class='del'>-    global, menu, menubutton, pack = ip.commands().values_at(</div><div class='del'>-      "global", "menu", "menubutton", "pack")</div><div class='del'>-    tk_optionMenu = TclTkLibCommand.new(ip, "tk_optionMenu")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "menu")</div><div class='del'>-</div><div class='del'>-    ## menu</div><div class='del'>-</div><div class='del'>-    # menubutton ¤òÀ¸À®¤¹¤ë.</div><div class='del'>-    mb1 = TclTkWidget.new(ip, t1, menubutton, "-text menu")</div><div class='del'>-    # menu ¤òÀ¸À®¤¹¤ë.</div><div class='del'>-    me1 = TclTkWidget.new(ip, mb1, menu)</div><div class='del'>-    # mb1 ¤«¤é me1 ¤¬µ¯Æ°¤µ¤ì¤ë¤è¤¦¤Ë¤¹¤ë.</div><div class='del'>-    mb1.e("configure -menu", me1)</div><div class='del'>-</div><div class='del'>-    # cascade ¤Çµ¯Æ°¤µ¤ì¤ë menu ¤òÀ¸À®¤¹¤ë.</div><div class='del'>-    me11 = TclTkWidget.new(ip, me1, menu)</div><div class='del'>-    # radiobutton ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-    v1 = TclTkVariable.new(ip, nil); global.e(v1); v1.set("r1")</div><div class='del'>-    me11.e("add radiobutton -label radio1 -value r1 -variable", v1)</div><div class='del'>-    me11.e("add radiobutton -label radio2 -value r2 -variable", v1)</div><div class='del'>-    me11.e("add radiobutton -label radio3 -value r3 -variable", v1)</div><div class='del'>-    # cascade ¤Ë¤è¤ê mb11 ¤¬µ¯Æ°¤µ¤ì¤ë¤è¤¦¤Ë¤¹¤ë.</div><div class='del'>-    me1.e("add cascade -label cascade -menu", me11)</div><div class='del'>-</div><div class='del'>-    # checkbutton ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-    v2 = TclTkVariable.new(ip, nil); global.e(v2); v2.set("none")</div><div class='del'>-    me1.e("add checkbutton -label check -variable", v2)</div><div class='del'>-    # separator ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-    me1.e("add separator")</div><div class='del'>-    # command ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-    v3 = nil</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      global.e(v1, v2, v3); print "v1: ", v1.get(), ", v2: ", v2.get(),</div><div class='del'>-      ", v3: ", v3.get(), "\n"}))</div><div class='del'>-    me1.e("add command -label print -command", c)</div><div class='del'>-</div><div class='del'>-    ## tk_optionMenu</div><div class='del'>-</div><div class='del'>-    v3 = TclTkVariable.new(ip, nil); global.e(v3); v3.set("opt2")</div><div class='del'>-    om1 = TclTkWidget.new(ip, t1, tk_optionMenu, v3, "opt1 opt2 opt3 opt4")</div><div class='del'>-</div><div class='del'>-    pack.e(b1, mb1, om1, "-side left")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # listbox ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_listbox(ip, parent)</div><div class='del'>-    clipboard, frame, grid, listbox, lower, menu, menubutton, pack, scrollbar,</div><div class='del'>-      selection = ip.commands().values_at(</div><div class='del'>-      "clipboard", "frame", "grid", "listbox", "lower", "menu", "menubutton",</div><div class='del'>-      "pack", "scrollbar", "selection")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "listbox")</div><div class='del'>-</div><div class='del'>-    ## listbox/scrollbar</div><div class='del'>-</div><div class='del'>-    f1 = TclTkWidget.new(ip, t1, frame)</div><div class='del'>-    # ¥³¡¼¥ë¥Ð¥Ã¥¯Æâ¤Ç»²¾È¤¹¤ëÊÑ¿ô¤ÏÀè¤ËÀë¸À¤·¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤.</div><div class='del'>-    li1 = sc1 = sc2 = nil</div><div class='del'>-    # ¼Â¹Ô»þ¤Ë, ¸å¤í¤Ë¥Ñ¥é¥á¡¼¥¿¤¬¤Ä¤¯¥³¡¼¥ë¥Ð¥Ã¥¯¤Ï,</div><div class='del'>-    # ¥¤¥Æ¥ì¡¼¥¿ÊÑ¿ô¤Ç¤½¤Î¥Ñ¥é¥á¡¼¥¿¤ò¼õ¤±¼è¤ë¤³¤È¤¬¤Ç¤­¤ë.</div><div class='del'>-    # (Ê£¿ô¤Î¥Ñ¥é¥á¡¼¥¿¤Ï¤Ò¤È¤Ä¤ÎÊ¸»úÎó¤Ë¤Þ¤È¤á¤é¤ì¤ë.)</div><div class='del'>-    cb.push(c1 = TclTkCallback.new(ip, proc{|i| li1.e("xview", i)}))</div><div class='del'>-    cb.push(c2 = TclTkCallback.new(ip, proc{|i| li1.e("yview", i)}))</div><div class='del'>-    cb.push(c3 = TclTkCallback.new(ip, proc{|i| sc1.e("set", i)}))</div><div class='del'>-    cb.push(c4 = TclTkCallback.new(ip, proc{|i| sc2.e("set", i)}))</div><div class='del'>-    # listbox</div><div class='del'>-    li1 = TclTkWidget.new(ip, f1, listbox,</div><div class='del'>-      "-xscrollcommand", c3, "-yscrollcommand", c4,</div><div class='del'>-      "-selectmode extended -exportselection true")</div><div class='del'>-    for i in 1..20</div><div class='del'>-      li1.e("insert end {line #{i} line #{i} line #{i} line #{i} line #{i}}")</div><div class='del'>-    end</div><div class='del'>-    # scrollbar</div><div class='del'>-    sc1 = TclTkWidget.new(ip, f1, scrollbar, "-orient horizontal -command", c1)</div><div class='del'>-    sc2 = TclTkWidget.new(ip, f1, scrollbar, "-orient vertical -command", c2)</div><div class='del'>-</div><div class='del'>-    ## selection/clipboard</div><div class='del'>-</div><div class='del'>-    mb1 = TclTkWidget.new(ip, t1, menubutton, "-text edit")</div><div class='del'>-    me1 = TclTkWidget.new(ip, mb1, menu)</div><div class='del'>-    mb1.e("configure -menu", me1)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      # clipboard ¤ò¥¯¥ê¥¢.</div><div class='del'>-      clipboard.e("clear")</div><div class='del'>-      # selection ¤«¤éÊ¸»úÎó¤òÆÉ¤ß¹þ¤ß clipboard ¤ËÄÉ²Ã¤¹¤ë.</div><div class='del'>-      clipboard.e("append {#{selection.e('get')}}")}))</div><div class='del'>-    me1.e("add command -label {selection -&gt; clipboard} -command",c)</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{</div><div class='del'>-      # li1 ¤ò¥¯¥ê¥¢.</div><div class='del'>-      li1.e("delete 0 end")</div><div class='del'>-      # clipboard ¤«¤éÊ¸»úÎó¤ò¼è¤ê½Ð¤·, 1 ¹Ô¤º¤Ä</div><div class='del'>-      selection.e("get -selection CLIPBOARD").split(/\n/).each{|line|</div><div class='del'>-        # li1 ¤ËÁÞÆþ¤¹¤ë.</div><div class='del'>-        li1.e("insert end {#{line}}")}}))</div><div class='del'>-    me1.e("add command -label {clipboard -&gt; listbox} -command",c)</div><div class='del'>-</div><div class='del'>-    grid.e(li1, "-row 0 -column 0 -sticky news")</div><div class='del'>-    grid.e(sc1, "-row 1 -column 0 -sticky ew")</div><div class='del'>-    grid.e(sc2, "-row 0 -column 1 -sticky ns")</div><div class='del'>-    grid.e("rowconfigure", f1, "0 -weight 100")</div><div class='del'>-    grid.e("columnconfigure", f1, "0 -weight 100")</div><div class='del'>-    f2 = TclTkWidget.new(ip, t1, frame)</div><div class='del'>-    lower.e(f2, b1)</div><div class='del'>-    pack.e(b1, mb1, "-in", f2, "-side left")</div><div class='del'>-    pack.e(f2, f1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # canvas ¤Î¥µ¥ó¥×¥ë.</div><div class='del'>-  def test_canvas(ip, parent)</div><div class='del'>-    canvas, lower, pack = ip.commands().values_at("canvas", "lower", "pack")</div><div class='del'>-    t1, b1, cb = inittoplevel(ip, parent, "canvas")</div><div class='del'>-</div><div class='del'>-    ## canvas</div><div class='del'>-</div><div class='del'>-    ca1 = TclTkWidget.new(ip, t1, canvas, "-width 400 -height 300")</div><div class='del'>-    lower.e(ca1, b1)</div><div class='del'>-    # rectangle ¤òºî¤ë.</div><div class='del'>-    idr = ca1.e("create rectangle 10 10 20 20")</div><div class='del'>-    # oval ¤òºî¤ë.</div><div class='del'>-    ca1.e("create oval 60 10 100 50")</div><div class='del'>-    # polygon ¤òºî¤ë.</div><div class='del'>-    ca1.e("create polygon 110 10 110 30 140 10")</div><div class='del'>-    # line ¤òºî¤ë.</div><div class='del'>-    ca1.e("create line 150 10 150 30 190 10")</div><div class='del'>-    # arc ¤òºî¤ë.</div><div class='del'>-    ca1.e("create arc 200 10 250 50 -start 0 -extent 90 -style pieslice")</div><div class='del'>-    # i1 ¤ÏËÜÅö¤Ï, ¤É¤³¤«¤ÇÇË²õ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤¬, ÌÌÅÝ¤Ê¤Î¤ÇÊü¤Ã¤Æ¤¢¤ë.</div><div class='del'>-    i1 = TclTkImage.new(ip, "photo", "-file maru.gif")</div><div class='del'>-    # image ¤òºî¤ë.</div><div class='del'>-    ca1.e("create image 100 100 -image", i1)</div><div class='del'>-    # bitmap ¤òºî¤ë.</div><div class='del'>-    ca1.e("create bitmap 260 50 -bitmap questhead")</div><div class='del'>-    # text ¤òºî¤ë.</div><div class='del'>-    ca1.e("create text 320 50 -text {drag rectangle}")</div><div class='del'>-    # window ¤òºî¤ë(¥¯¥í¡¼¥º¥Ü¥¿¥ó).</div><div class='del'>-    ca1.e("create window 200 200 -window", b1)</div><div class='del'>-</div><div class='del'>-    # bind ¤Ë¤è¤ê rectangle ¤ò drag ¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë.</div><div class='del'>-    cb.push(c = TclTkCallback.new(ip, proc{|i|</div><div class='del'>-      # i ¤Ë x ¤È y ¤ò¼õ¤±¼è¤ë¤Î¤Ç, ¼è¤ê½Ð¤¹.</div><div class='del'>-      x, y = i.split(/ /); x = x.to_f; y = y.to_f</div><div class='del'>-      # ºÂÉ¸¤òÊÑ¹¹¤¹¤ë.</div><div class='del'>-      ca1.e("coords current #{x - 5} #{y - 5} #{x + 5} #{y + 5}")},</div><div class='del'>-      # x, y ºÂÉ¸¤ò¶õÇò¤Ç¶èÀÚ¤Ã¤¿¤â¤Î¤ò¥¤¥Æ¥ì¡¼¥¿ÊÑ¿ô¤ØÅÏ¤¹¤è¤¦¤Ë»ØÄê.</div><div class='del'>-      "%x %y"))</div><div class='del'>-    # rectangle ¤Ë bind ¤¹¤ë.</div><div class='del'>-    ca1.e("bind", idr, "&lt;B1-Motion&gt;", c)</div><div class='del'>-</div><div class='del'>-    pack.e(ca1)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# test driver</div><div class='del'>-</div><div class='del'>-if ARGV.size == 0</div><div class='del'>-  print "#{$0} n ¤Ç, n ¸Ä¤Î¥¤¥ó¥¿¥×¥ê¥¿¤òµ¯Æ°¤·¤Þ¤¹.\n"</div><div class='del'>-  n = 1</div><div class='del'>-else</div><div class='del'>-  n = ARGV[0].to_i</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-print "start\n"</div><div class='del'>-ip = []</div><div class='del'>-</div><div class='del'>-# ¥¤¥ó¥¿¥×¥ê¥¿, ¥¦¥£¥¸¥§¥Ã¥ÈÅù¤ÎÀ¸À®.</div><div class='del'>-for i in 1 .. n</div><div class='del'>-  ip.push(Test1.new())</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# ÍÑ°Õ¤¬¤Ç¤­¤¿¤é¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ËÆþ¤ë.</div><div class='del'>-TclTk.mainloop()</div><div class='del'>-print "exit from mainloop\n"</div><div class='del'>-</div><div class='del'>-# ¥¤¥ó¥¿¥×¥ê¥¿¤¬ GC ¤µ¤ì¤ë¤«¤Î¥Æ¥¹¥È.</div><div class='del'>-ip = []</div><div class='del'>-print "GC.start\n" if $DEBUG</div><div class='del'>-GC.start() if $DEBUG</div><div class='del'>-print "end\n"</div><div class='del'>-</div><div class='del'>-exit</div><div class='del'>-</div><div class='del'>-# end</div><div class='head'>diff --git a/ext/tk/sample/tcltklib/sample2.rb b/ext/tk/sample/tcltklib/sample2.rb<br/>deleted file mode 100644<br/>index 110e81ebc4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tcltklib/sample2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tcltklib/sample2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,451 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-#----------------------&gt; pretty simple othello game &lt;-----------------------</div><div class='del'>-# othello.rb</div><div class='del'>-#</div><div class='del'>-# version 0.3</div><div class='del'>-# maeda shugo (shuto@po.aianet.ne.jp)</div><div class='del'>-#---------------------------------------------------------------------------</div><div class='del'>-</div><div class='del'>-#       Sep. 17, 1997   modified by Y. Shigehiro for tcltk library</div><div class='del'>-#          maeda shugo (shugo@po.aianet.ne.jp) »á¤Ë¤è¤ë</div><div class='del'>-#          (ruby/tk ¤Ç½ñ¤«¤ì¤Æ¤¤¤¿) ruby ¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à</div><div class='del'>-#               http://www.aianet.or.jp/~shugo/ruby/othello.rb.gz</div><div class='del'>-#          ¤ò tcltk ¥é¥¤¥Ö¥é¥ê¤ò»È¤¦¤è¤¦¤Ë, µ¡³£Åª¤ËÊÑ¹¹¤·¤Æ¤ß¤Þ¤·¤¿.</div><div class='del'>-#</div><div class='del'>-#          ¤Ê¤ë¤Ù¤¯¥ª¥ê¥¸¥Ê¥ë¤ÈÆ±¤¸¤Ë¤Ê¤ë¤è¤¦¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹.</div><div class='del'>-</div><div class='del'>-require "observer"</div><div class='del'>-require "tcltk"</div><div class='del'>-$ip = TclTkInterpreter.new()</div><div class='del'>-$root = $ip.rootwidget()</div><div class='del'>-$button, $canvas, $checkbutton, $frame, $label, $pack, $update, $wm =</div><div class='del'>-   $ip.commands().values_at(</div><div class='del'>-   "button", "canvas", "checkbutton", "frame", "label", "pack", "update", "wm")</div><div class='del'>-</div><div class='del'>-class Othello</div><div class='del'>-   </div><div class='del'>-   EMPTY = 0</div><div class='del'>-   BLACK = 1</div><div class='del'>-   WHITE = - BLACK</div><div class='del'>-   </div><div class='del'>-   attr :in_com_turn</div><div class='del'>-   attr :game_over</div><div class='del'>-   </div><div class='del'>-   class Board</div><div class='del'>-   </div><div class='del'>-      include Observable</div><div class='del'>-      </div><div class='del'>-      DIRECTIONS = [</div><div class='del'>-         [-1, -1], [-1, 0], [-1, 1],</div><div class='del'>-         [ 0, -1],          [ 0, 1],</div><div class='del'>-         [ 1, -1], [ 1, 0], [ 1, 1]</div><div class='del'>-      ]</div><div class='del'>-      </div><div class='del'>-      attr_accessor :com_disk</div><div class='del'>-   </div><div class='del'>-      def initialize(othello)</div><div class='del'>-         @othello = othello</div><div class='del'>-         reset</div><div class='del'>-      end</div><div class='del'>-   </div><div class='del'>-      def notify_observers(*arg)</div><div class='del'>-         if @observer_peers != nil</div><div class='del'>-            super(*arg)</div><div class='del'>-         end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def reset</div><div class='del'>-         @data = [</div><div class='del'>-            [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='del'>-            [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='del'>-            [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='del'>-            [EMPTY, EMPTY, EMPTY, WHITE, BLACK, EMPTY, EMPTY, EMPTY],</div><div class='del'>-            [EMPTY, EMPTY, EMPTY, BLACK, WHITE, EMPTY, EMPTY, EMPTY],</div><div class='del'>-            [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='del'>-            [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY],</div><div class='del'>-            [EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY]</div><div class='del'>-         ]</div><div class='del'>-         changed</div><div class='del'>-         notify_observers</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def man_disk</div><div class='del'>-         return - @com_disk</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def other_disk(disk)</div><div class='del'>-         return - disk</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def get_disk(row, col)</div><div class='del'>-         return @data[row][col]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def reverse_to(row, col, my_disk, dir_y, dir_x)</div><div class='del'>-         y = row</div><div class='del'>-         x = col</div><div class='del'>-         begin</div><div class='del'>-            y += dir_y</div><div class='del'>-            x += dir_x</div><div class='del'>-            if y &lt; 0 || x &lt; 0 || y &gt; 7 || x &gt; 7 ||</div><div class='del'>-                  @data[y][x] == EMPTY</div><div class='del'>-               return</div><div class='del'>-            end</div><div class='del'>-         end until @data[y][x] == my_disk</div><div class='del'>-         begin</div><div class='del'>-            @data[y][x] = my_disk</div><div class='del'>-            changed</div><div class='del'>-            notify_observers(y, x)</div><div class='del'>-            y -= dir_y</div><div class='del'>-            x -= dir_x</div><div class='del'>-         end until y == row &amp;&amp; x == col</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def put_disk(row, col, disk)</div><div class='del'>-         @data[row][col] = disk</div><div class='del'>-         changed</div><div class='del'>-         notify_observers(row, col)</div><div class='del'>-         DIRECTIONS.each do |dir|</div><div class='del'>-            reverse_to(row, col, disk, *dir)</div><div class='del'>-         end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def count_disk(disk)</div><div class='del'>-         num = 0</div><div class='del'>-         @data.each do |rows|</div><div class='del'>-            rows.each do |d|</div><div class='del'>-               if d == disk</div><div class='del'>-                  num += 1</div><div class='del'>-               end</div><div class='del'>-            end</div><div class='del'>-         end</div><div class='del'>-         return num</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def count_point_to(row, col, my_disk, dir_y, dir_x)</div><div class='del'>-         return 0 if @data[row][col] != EMPTY</div><div class='del'>-         count = 0</div><div class='del'>-         loop do</div><div class='del'>-            row += dir_y</div><div class='del'>-            col += dir_x</div><div class='del'>-            break if row &lt; 0 || col &lt; 0 || row &gt; 7 || col &gt; 7</div><div class='del'>-            case @data[row][col]</div><div class='del'>-            when my_disk</div><div class='del'>-               return count</div><div class='del'>-            when other_disk(my_disk)</div><div class='del'>-               count += 1</div><div class='del'>-            when EMPTY</div><div class='del'>-               break</div><div class='del'>-            end</div><div class='del'>-         end</div><div class='del'>-         return 0</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def count_point(row, col, my_disk)</div><div class='del'>-         count = 0</div><div class='del'>-         DIRECTIONS.each do |dir|</div><div class='del'>-            count += count_point_to(row, col, my_disk, *dir)</div><div class='del'>-         end</div><div class='del'>-         return count</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def corner?(row, col)</div><div class='del'>-         return (row == 0 &amp;&amp; col == 0) ||</div><div class='del'>-            (row == 0 &amp;&amp; col == 7) ||</div><div class='del'>-            (row == 7 &amp;&amp; col == 0) ||</div><div class='del'>-            (row == 7 &amp;&amp; col == 7)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def search(my_disk)</div><div class='del'>-         max = 0</div><div class='del'>-         max_row = nil</div><div class='del'>-         max_col = nil</div><div class='del'>-         for row in 0 .. 7</div><div class='del'>-            for col in 0 .. 7</div><div class='del'>-               buf = count_point(row, col, my_disk)</div><div class='del'>-               if (corner?(row, col) &amp;&amp; buf &gt; 0) || max &lt; buf</div><div class='del'>-                  max = buf</div><div class='del'>-                  max_row = row</div><div class='del'>-                  max_col = col</div><div class='del'>-               end</div><div class='del'>-            end</div><div class='del'>-         end</div><div class='del'>-         return max_row, max_col</div><div class='del'>-      end</div><div class='del'>-   end #--------------------------&gt; class Board ends here</div><div class='del'>-   </div><div class='del'>-   class BoardView &lt; TclTkWidget</div><div class='del'>-      </div><div class='del'>-      BACK_GROUND_COLOR = "DarkGreen"</div><div class='del'>-      HILIT_BG_COLOR = "green"</div><div class='del'>-      BORDER_COLOR = "black"</div><div class='del'>-      BLACK_COLOR = "black"</div><div class='del'>-      WHITE_COLOR = "white"</div><div class='del'>-      STOP_COLOR = "red"</div><div class='del'>-      </div><div class='del'>-      attr :left</div><div class='del'>-      attr :top</div><div class='del'>-      attr :right</div><div class='del'>-      attr :bottom</div><div class='del'>-      </div><div class='del'>-      class Square</div><div class='del'>-         </div><div class='del'>-         attr :oval, TRUE</div><div class='del'>-         attr :row</div><div class='del'>-         attr :col</div><div class='del'>-         </div><div class='del'>-         def initialize(view, row, col)</div><div class='del'>-            @view = view</div><div class='del'>-            @id = @view.e("create rectangle", </div><div class='del'>-                          *(view.tk_rect(view.left + col,</div><div class='del'>-                                         view.top + row,</div><div class='del'>-                                         view.left + col + 1,</div><div class='del'>-                                         view.top + row + 1) \</div><div class='del'>-                            &lt;&lt; "-fill #{BACK_GROUND_COLOR}") )</div><div class='del'>-            @row = row</div><div class='del'>-            @col = col</div><div class='del'>-            @view.e("itemconfigure", @id,</div><div class='del'>-              "-width 0.5m -outline #{BORDER_COLOR}")</div><div class='del'>-            @view.e("bind", @id, "&lt;Any-Enter&gt;", TclTkCallback.new($ip, proc{</div><div class='del'>-               if @oval == nil</div><div class='del'>-                  view.e("itemconfigure", @id, "-fill #{HILIT_BG_COLOR}")</div><div class='del'>-               end</div><div class='del'>-            }))</div><div class='del'>-            @view.e("bind", @id, "&lt;Any-Leave&gt;", TclTkCallback.new($ip, proc{</div><div class='del'>-               view.e("itemconfigure", @id, "-fill #{BACK_GROUND_COLOR}")</div><div class='del'>-            }))</div><div class='del'>-            @view.e("bind", @id, "&lt;ButtonRelease-1&gt;", TclTkCallback.new($ip,</div><div class='del'>-               proc{</div><div class='del'>-               view.click_square(self)</div><div class='del'>-            }))</div><div class='del'>-         end</div><div class='del'>-         </div><div class='del'>-         def blink(color)</div><div class='del'>-            @view.e("itemconfigure", @id, "-fill #{color}")</div><div class='del'>-            $update.e()</div><div class='del'>-            sleep(0.1)</div><div class='del'>-            @view.e("itemconfigure", @id, "-fill #{BACK_GROUND_COLOR}")</div><div class='del'>-         end</div><div class='del'>-      end #-----------------------&gt; class Square ends here</div><div class='del'>-   </div><div class='del'>-      def initialize(othello, board)</div><div class='del'>-         super($ip, $root, $canvas)</div><div class='del'>-         @othello = othello</div><div class='del'>-         @board = board</div><div class='del'>-         @board.add_observer(self)</div><div class='del'>-         </div><div class='del'>-         @squares = Array.new(8)</div><div class='del'>-         for i in 0 .. 7</div><div class='del'>-            @squares[i] = Array.new(8)</div><div class='del'>-         end</div><div class='del'>-         @left = 1</div><div class='del'>-         @top = 0.5</div><div class='del'>-         @right = @left + 8</div><div class='del'>-         @bottom = @top + 8</div><div class='del'>-         </div><div class='del'>-         i = self.e("create rectangle", *tk_rect(@left, @top, @right, @bottom))</div><div class='del'>-         self.e("itemconfigure", i,</div><div class='del'>-            "-width 1m -outline #{BORDER_COLOR} -fill #{BACK_GROUND_COLOR}")</div><div class='del'>-</div><div class='del'>-         for row in 0 .. 7</div><div class='del'>-            for col in 0 .. 7</div><div class='del'>-               @squares[row][col] = Square.new(self, row, col)</div><div class='del'>-            end</div><div class='del'>-         end</div><div class='del'>-         </div><div class='del'>-         update</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def tk_rect(left, top, right, bottom)</div><div class='del'>-         return left.to_s + "c", top.to_s + "c",</div><div class='del'>-            right.to_s + "c", bottom.to_s + "c"</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def clear</div><div class='del'>-         each_square do |square|</div><div class='del'>-            if square.oval != nil</div><div class='del'>-               self.e("delete", square.oval)</div><div class='del'>-               square.oval = 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 draw_disk(row, col, disk)</div><div class='del'>-         if disk == EMPTY</div><div class='del'>-            if @squares[row][col].oval != nil</div><div class='del'>-               self.e("delete", @squares[row][col].oval)</div><div class='del'>-               @squares[row][col].oval = nil</div><div class='del'>-            end</div><div class='del'>-            return</div><div class='del'>-         end</div><div class='del'>-            </div><div class='del'>-         $update.e()</div><div class='del'>-         sleep(0.05)</div><div class='del'>-         oval = @squares[row][col].oval</div><div class='del'>-         if oval == nil</div><div class='del'>-            oval = self.e("create oval", *tk_rect(@left + col + 0.2,</div><div class='del'>-                                           @top + row + 0.2,</div><div class='del'>-                                           @left + col + 0.8,</div><div class='del'>-                                           @top + row + 0.8))</div><div class='del'>-            @squares[row][col].oval = oval</div><div class='del'>-         end</div><div class='del'>-         case disk</div><div class='del'>-         when BLACK</div><div class='del'>-            color = BLACK_COLOR</div><div class='del'>-         when WHITE</div><div class='del'>-            color = WHITE_COLOR</div><div class='del'>-         else</div><div class='del'>-            fail format("Unknown disk type: %d", disk)</div><div class='del'>-         end</div><div class='del'>-         self.e("itemconfigure", oval, "-outline #{color} -fill #{color}")</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def update(row = nil, col = nil)</div><div class='del'>-         if row &amp;&amp; col</div><div class='del'>-            draw_disk(row, col, @board.get_disk(row, col))</div><div class='del'>-         else</div><div class='del'>-            each_square do |square|</div><div class='del'>-               draw_disk(square.row, square.col,</div><div class='del'>-                         @board.get_disk(square.row, square.col))</div><div class='del'>-            end</div><div class='del'>-         end</div><div class='del'>-         @othello.show_point</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def each_square</div><div class='del'>-         @squares.each do |rows|</div><div class='del'>-            rows.each do |square|</div><div class='del'>-               yield(square)</div><div class='del'>-            end</div><div class='del'>-         end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def click_square(square)</div><div class='del'>-         if @othello.in_com_turn || @othello.game_over ||</div><div class='del'>-               @board.count_point(square.row,</div><div class='del'>-                                  square.col,</div><div class='del'>-                                  @board.man_disk) == 0</div><div class='del'>-            square.blink(STOP_COLOR)</div><div class='del'>-            return</div><div class='del'>-         end</div><div class='del'>-         @board.put_disk(square.row, square.col, @board.man_disk)</div><div class='del'>-         @othello.com_turn</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      private :draw_disk</div><div class='del'>-      public :update</div><div class='del'>-   end #----------------------&gt; class BoardView ends here</div><div class='del'>-   </div><div class='del'>-   def initialize</div><div class='del'>-      @msg_label = TclTkWidget.new($ip, $root, $label)</div><div class='del'>-      $pack.e(@msg_label)</div><div class='del'>-      </div><div class='del'>-      @board = Board.new(self)</div><div class='del'>-      @board_view = BoardView.new(self, @board)</div><div class='del'>-      #### added by Y. Shigehiro</div><div class='del'>-      ## board_view ¤ÎÂç¤­¤µ¤òÀßÄê¤¹¤ë.</div><div class='del'>-      x1, y1, x2, y2 = @board_view.e("bbox all").split(/ /).collect{|i| i.to_f}</div><div class='del'>-      @board_view.e("configure -width", x2 - x1)</div><div class='del'>-      @board_view.e("configure -height", y2 - y1)</div><div class='del'>-      ## scrollregion ¤òÀßÄê¤¹¤ë.</div><div class='del'>-      @board_view.e("configure -scrollregion {", @board_view.e("bbox all"),</div><div class='del'>-         "}")</div><div class='del'>-      #### ¤³¤³¤Þ¤Ç</div><div class='del'>-      $pack.e(@board_view, "-fill both -expand true")</div><div class='del'>-      </div><div class='del'>-      panel = TclTkWidget.new($ip, $root, $frame)</div><div class='del'>-      </div><div class='del'>-      @play_black = TclTkWidget.new($ip, panel, $checkbutton,</div><div class='del'>-        "-text {com is black} -command", TclTkCallback.new($ip, proc{</div><div class='del'>-         switch_side</div><div class='del'>-      }))</div><div class='del'>-      $pack.e(@play_black, "-side left")</div><div class='del'>-            </div><div class='del'>-      quit = TclTkWidget.new($ip, panel, $button, "-text Quit -command",</div><div class='del'>-         TclTkCallback.new($ip, proc{</div><div class='del'>-         exit</div><div class='del'>-      }))</div><div class='del'>-      $pack.e(quit, "-side right -fill x")</div><div class='del'>-      </div><div class='del'>-      reset = TclTkWidget.new($ip, panel, $button, "-text Reset -command",</div><div class='del'>-         TclTkCallback.new($ip, proc{</div><div class='del'>-         reset_game</div><div class='del'>-      }))</div><div class='del'>-      $pack.e(reset, "-side right -fill x")</div><div class='del'>-      </div><div class='del'>-      $pack.e(panel, "-side bottom -fill x")</div><div class='del'>-      </div><div class='del'>-#      root = Tk.root</div><div class='del'>-      $wm.e("title", $root, "Othello")</div><div class='del'>-      $wm.e("iconname", $root, "Othello")</div><div class='del'>-      </div><div class='del'>-      @board.com_disk = WHITE</div><div class='del'>-      @game_over = FALSE</div><div class='del'>-      </div><div class='del'>-      TclTk.mainloop</div><div class='del'>-   end</div><div class='del'>-   </div><div class='del'>-   def switch_side</div><div class='del'>-      if @in_com_turn</div><div class='del'>-         @play_black.e("toggle")</div><div class='del'>-      else</div><div class='del'>-         @board.com_disk = @board.man_disk</div><div class='del'>-         com_turn unless @game_over</div><div class='del'>-      end</div><div class='del'>-   end</div><div class='del'>-   </div><div class='del'>-   def reset_game</div><div class='del'>-      if @board.com_disk == BLACK</div><div class='del'>-         @board.com_disk = WHITE</div><div class='del'>-         @play_black.e("toggle")</div><div class='del'>-      end</div><div class='del'>-      @board_view.clear</div><div class='del'>-      @board.reset</div><div class='del'>-      $wm.e("title", $root, "Othello")</div><div class='del'>-      @game_over = FALSE</div><div class='del'>-   end</div><div class='del'>-      </div><div class='del'>-   def com_turn</div><div class='del'>-      @in_com_turn = TRUE</div><div class='del'>-      $update.e()</div><div class='del'>-      sleep(0.5)</div><div class='del'>-      begin</div><div class='del'>-         com_disk = @board.count_disk(@board.com_disk)</div><div class='del'>-         man_disk = @board.count_disk(@board.man_disk)</div><div class='del'>-         if @board.count_disk(EMPTY) == 0</div><div class='del'>-            if man_disk == com_disk</div><div class='del'>-               $wm.e("title", $root, "{Othello - Draw!}")</div><div class='del'>-            elsif man_disk &gt; com_disk</div><div class='del'>-               $wm.e("title", $root, "{Othello - You Win!}")</div><div class='del'>-            else</div><div class='del'>-               $wm.e("title", $root, "{Othello - You Loose!}")</div><div class='del'>-            end</div><div class='del'>-            @game_over = TRUE</div><div class='del'>-            break</div><div class='del'>-         elsif com_disk == 0</div><div class='del'>-            $wm.e("title", $root, "{Othello - You Win!}")</div><div class='del'>-            @game_over = TRUE</div><div class='del'>-            break</div><div class='del'>-         elsif man_disk == 0</div><div class='del'>-            $wm.e("title", $root, "{Othello - You Loose!}")</div><div class='del'>-            @game_over = TRUE</div><div class='del'>-            break</div><div class='del'>-         end</div><div class='del'>-         row, col = @board.search(@board.com_disk)</div><div class='del'>-         break if row == nil || col == nil</div><div class='del'>-         @board.put_disk(row, col, @board.com_disk)</div><div class='del'>-      end while @board.search(@board.man_disk) == [nil, nil]</div><div class='del'>-      @in_com_turn = FALSE</div><div class='del'>-   end</div><div class='del'>-</div><div class='del'>-   def show_point</div><div class='del'>-      black = @board.count_disk(BLACK)</div><div class='del'>-      white = @board.count_disk(WHITE)</div><div class='del'>-      @msg_label.e("configure -text",</div><div class='del'>-         %Q/{#{format("BLACK: %.2d    WHITE: %.2d", black, white)}}/)</div><div class='del'>-   end</div><div class='del'>-end #----------------------&gt; class Othello ends here</div><div class='del'>-</div><div class='del'>-Othello.new</div><div class='del'>-</div><div class='del'>-#----------------------------------------------&gt; othello.rb ends here</div><div class='head'>diff --git a/ext/tk/sample/tkalignbox.rb b/ext/tk/sample/tkalignbox.rb<br/>deleted file mode 100644<br/>index 32915a5e69..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkalignbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkalignbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,225 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkalignbox.rb : align widgets with same width/height</div><div class='del'>-# </div><div class='del'>-#                                            by Hidetoshi NAGAI</div><div class='del'>-#</div><div class='del'>-#  The box size depends on 'reqheight' and 'reqwidth' of contained widgets. </div><div class='del'>-#  If you want to give the box size when those requested sizes are 0, </div><div class='del'>-#  please set box.propagate = false (See the test routine at the tail of </div><div class='del'>-#  this file).</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkAlignBox &lt; TkFrame</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    if self.class == TkAlignBox</div><div class='del'>-      fail RuntimeError, "TkAlignBox is an abstract class"</div><div class='del'>-    end</div><div class='del'>-    @padx = 0</div><div class='del'>-    @pady = 0</div><div class='del'>-    if args[-1].kind_of? Hash</div><div class='del'>-      keys = _symbolkey2str(args.pop)</div><div class='del'>-      @padx = keys.delete('padx') || 0</div><div class='del'>-      @pady = keys.delete('pady') || 0</div><div class='del'>-      args.push(keys)</div><div class='del'>-    end</div><div class='del'>-    super(*args)</div><div class='del'>-    @max_width = 0</div><div class='del'>-    @max_height = 0</div><div class='del'>-    @propagate = true</div><div class='del'>-    @widgets = []</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _set_framesize</div><div class='del'>-    fail RuntimeError, "TkAlignBox is an abstract class"</div><div class='del'>-  end</div><div class='del'>-  private :_set_framesize</div><div class='del'>-</div><div class='del'>-  def _place_config(widget, idx, cnt)</div><div class='del'>-    fail RuntimeError, "TkAlignBox is an abstract class"</div><div class='del'>-  end</div><div class='del'>-  private :_place_config</div><div class='del'>-</div><div class='del'>-  def align</div><div class='del'>-    widgets = []</div><div class='del'>-    @widgets.each{|w| widgets &lt;&lt; w if w.winfo_exist?}</div><div class='del'>-    @widgets = widgets</div><div class='del'>-    cnt = @widgets.size.to_f</div><div class='del'>-    @widgets.each_with_index{|w, idx| _place_config(w, idx, cnt)}</div><div class='del'>-    @widgets = widgets</div><div class='del'>-    _set_framesize if @propagate</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add(*widgets)</div><div class='del'>-    widgets.each{|w|</div><div class='del'>-      unless w.kind_of? TkWindow</div><div class='del'>-        fail RuntimeError, "#{w.inspect} is not a widget instance."</div><div class='del'>-      end</div><div class='del'>-      @widgets.delete(w)</div><div class='del'>-      @widgets &lt;&lt; w</div><div class='del'>-      sz = w.winfo_reqwidth</div><div class='del'>-      @max_width = sz if @max_width &lt; sz</div><div class='del'>-      sz = w.winfo_reqheight</div><div class='del'>-      @max_height = sz if @max_height &lt; sz</div><div class='del'>-    }</div><div class='del'>-    align</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def &lt;&lt;(widget)</div><div class='del'>-    add(widget)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, widget)</div><div class='del'>-    unless widget.kind_of? TkWindow</div><div class='del'>-      fail RuntimeError, "#{widget.inspect} is not a widget instance."</div><div class='del'>-    end</div><div class='del'>-    @widgets.delete(widget)</div><div class='del'>-    @widgets[idx,0] = widget</div><div class='del'>-    sz = widget.winfo_reqwidth</div><div class='del'>-    @max_width = sz if @max_width &lt; sz</div><div class='del'>-    sz = widget.winfo_reqheight</div><div class='del'>-    @max_height = sz if @max_height &lt; sz</div><div class='del'>-    align</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(idx)</div><div class='del'>-    ret = @widgets.delete_at(idx)</div><div class='del'>-    @req_size = 0</div><div class='del'>-    @widget.each{|w|</div><div class='del'>-      sz = w.winfo_reqwidth</div><div class='del'>-      @max_width = sz if @max_width &lt; sz</div><div class='del'>-      sz = w.winfo_reqheight</div><div class='del'>-      @max_height = sz if @max_height &lt; sz</div><div class='del'>-    }</div><div class='del'>-    align</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def padx(size = nil)</div><div class='del'>-    if size</div><div class='del'>-      @padx = size</div><div class='del'>-      align</div><div class='del'>-    else</div><div class='del'>-      @padx</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pady(size = nil)</div><div class='del'>-    if size</div><div class='del'>-      @pady = size</div><div class='del'>-      align</div><div class='del'>-    else</div><div class='del'>-      @pady</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  attr_accessor :propagate</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkHBox &lt; TkAlignBox</div><div class='del'>-  def _set_framesize</div><div class='del'>-    bd = self.borderwidth</div><div class='del'>-    self.width((@max_width + 2*@padx) * @widgets.size + 2*bd)</div><div class='del'>-    self.height(@max_height + 2*@pady + 2*bd)</div><div class='del'>-  end</div><div class='del'>-  private :_set_framesize</div><div class='del'>-</div><div class='del'>-  def _place_config(widget, idx, cnt)</div><div class='del'>-    widget.place_in(self, </div><div class='del'>-                    'relx'=&gt;idx/cnt, 'x'=&gt;@padx, </div><div class='del'>-                    'rely'=&gt;0, 'y'=&gt;@pady, </div><div class='del'>-                    'relwidth'=&gt;1.0/cnt, 'width'=&gt;-2*@padx, </div><div class='del'>-                    'relheight'=&gt;1.0, 'height'=&gt;-2*@pady)</div><div class='del'>-  end</div><div class='del'>-  private :_place_config</div><div class='del'>-end</div><div class='del'>-TkHLBox = TkHBox</div><div class='del'>-</div><div class='del'>-class TkHRBox &lt; TkHBox</div><div class='del'>-  def _place_config(widget, idx, cnt)</div><div class='del'>-    widget.place_in(self, </div><div class='del'>-                    'relx'=&gt;(cnt - idx - 1)/cnt, 'x'=&gt;@padx, </div><div class='del'>-                    'rely'=&gt;0, 'y'=&gt;@pady, </div><div class='del'>-                    'relwidth'=&gt;1.0/cnt, 'width'=&gt;-2*@padx, </div><div class='del'>-                    'relheight'=&gt;1.0, 'height'=&gt;-2*@pady)</div><div class='del'>-  end</div><div class='del'>-  private :_place_config</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkVBox &lt; TkAlignBox</div><div class='del'>-  def _set_framesize</div><div class='del'>-    bd = self.borderwidth</div><div class='del'>-    self.width(@max_width + 2*@padx + 2*bd)</div><div class='del'>-    self.height((@max_height + 2*@pady) * @widgets.size + 2*bd)</div><div class='del'>-  end</div><div class='del'>-  private :_set_framesize</div><div class='del'>-</div><div class='del'>-  def _place_config(widget, idx, cnt)</div><div class='del'>-    widget.place_in(self, </div><div class='del'>-                    'relx'=&gt;0, 'x'=&gt;@padx, </div><div class='del'>-                    'rely'=&gt;idx/cnt, 'y'=&gt;@pady, </div><div class='del'>-                    'relwidth'=&gt;1.0, 'width'=&gt;-2*@padx, </div><div class='del'>-                    'relheight'=&gt;1.0/cnt, 'height'=&gt;-2*@pady)</div><div class='del'>-  end</div><div class='del'>-  private :_place_config</div><div class='del'>-end</div><div class='del'>-TkVTBox = TkVBox</div><div class='del'>-</div><div class='del'>-class TkVBBox &lt; TkVBox</div><div class='del'>-  def _place_config(widget, idx, cnt)</div><div class='del'>-    widget.place_in(self, </div><div class='del'>-                    'relx'=&gt;0, 'x'=&gt;@padx, </div><div class='del'>-                    'rely'=&gt;(cnt - idx - 1)/cnt, 'y'=&gt;@pady, </div><div class='del'>-                    'relwidth'=&gt;1.0, 'width'=&gt;-2*@padx, </div><div class='del'>-                    'relheight'=&gt;1.0/cnt, 'height'=&gt;-2*@pady)</div><div class='del'>-  end</div><div class='del'>-  private :_place_config</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-################################################</div><div class='del'>-# test</div><div class='del'>-################################################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  f = TkHBox.new(:borderwidth=&gt;3, :relief=&gt;'ridge').pack</div><div class='del'>-  f.add(TkButton.new(f, :text=&gt;'a'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aa', :font=&gt;'Helvetica 16'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aaa'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aaaa'))</div><div class='del'>-</div><div class='del'>-  f = TkHBox.new(:borderwidth=&gt;3, :relief=&gt;'ridge', </div><div class='del'>-                 :padx=&gt;7, :pady=&gt;3, :background=&gt;'yellow').pack</div><div class='del'>-  f.add(TkButton.new(f, :text=&gt;'a'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aa', :font=&gt;'Helvetica 16'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aaa'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aaaa'))</div><div class='del'>-</div><div class='del'>-  f = TkVBox.new(:borderwidth=&gt;5, :relief=&gt;'groove').pack</div><div class='del'>-  f.add(TkButton.new(f, :text=&gt;'a'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aa', :font=&gt;'Helvetica 30'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aaa'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aaaa'))</div><div class='del'>-</div><div class='del'>-  f = TkHRBox.new(:borderwidth=&gt;3, :relief=&gt;'raised').pack(:fill=&gt;:x)</div><div class='del'>-  f.add(TkButton.new(f, :text=&gt;'a'),</div><div class='del'>-        TkButton.new(f, :text=&gt;'aa'), </div><div class='del'>-        TkButton.new(f, :text=&gt;'aaa'))</div><div class='del'>-</div><div class='del'>-  f = TkVBBox.new(:borderwidth=&gt;3, :relief=&gt;'ridge').pack(:fill=&gt;:x)</div><div class='del'>-  f.propagate = false</div><div class='del'>-  f.height 100</div><div class='del'>-  f.add(TkFrame.new(f){|ff| </div><div class='del'>-          TkButton.new(ff, :text=&gt;'a').pack(:pady=&gt;4, :padx=&gt;6, </div><div class='del'>-                                            :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-        }, </div><div class='del'>-        TkFrame.new(f){|ff| </div><div class='del'>-          TkButton.new(ff, :text=&gt;'aa').pack(:pady=&gt;4, :padx=&gt;6, </div><div class='del'>-                                             :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-        }, </div><div class='del'>-        TkFrame.new(f){|ff| </div><div class='del'>-          TkButton.new(ff, :text=&gt;'aaaa').pack(:pady=&gt;4, :padx=&gt;6, </div><div class='del'>-                                               :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-        })</div><div class='del'>-</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkballoonhelp.rb b/ext/tk/sample/tkballoonhelp.rb<br/>deleted file mode 100644<br/>index c2c95f771d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkballoonhelp.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkballoonhelp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,194 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tkballoonhelp.rb : simple balloon help widget</div><div class='del'>-#                       by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-# Add a balloon help to a widget. </div><div class='del'>-# This widget has only poor featureas. If you need more useful features, </div><div class='del'>-# please try to use the Tix extension of Tcl/Tk under Ruby/Tk.</div><div class='del'>-# </div><div class='del'>-# The interval time to display a balloon help is defined 'interval' option</div><div class='del'>-# (default is 1000ms). </div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkBalloonHelp&lt;TkLabel</div><div class='del'>-  def _balloon_binding(interval)</div><div class='del'>-    @timer = TkAfter.new(interval, 1, proc{show})</div><div class='del'>-    def @timer.interval(val)</div><div class='del'>-      @sleep_time = val</div><div class='del'>-    end</div><div class='del'>-    @bindtag = TkBindTag.new</div><div class='del'>-    @bindtag.bind('Enter',  proc{@timer.start})</div><div class='del'>-    @bindtag.bind('Motion', proc{@timer.restart; erase})</div><div class='del'>-    @bindtag.bind('Any-ButtonPress', proc{@timer.restart; erase})</div><div class='del'>-    @bindtag.bind('Leave',  proc{@timer.stop; erase})</div><div class='del'>-    tags = @parent.bindtags</div><div class='del'>-    idx = tags.index(@parent)</div><div class='del'>-    unless idx</div><div class='del'>-      ppath = TkComm.window(@parent.path)</div><div class='del'>-      idx = tags.index(ppath) || 0</div><div class='del'>-    end</div><div class='del'>-    tags[idx,0] = @bindtag</div><div class='del'>-    @parent.bindtags(tags)</div><div class='del'>-  end</div><div class='del'>-  private :_balloon_binding</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil, keys={})</div><div class='del'>-    @parent = parent || Tk.root</div><div class='del'>-</div><div class='del'>-    @frame = TkToplevel.new(@parent)</div><div class='del'>-    @frame.withdraw</div><div class='del'>-    @frame.overrideredirect(true)</div><div class='del'>-    @frame.transient(TkWinfo.toplevel(@parent))</div><div class='del'>-    @epath = @frame.path</div><div class='del'>-</div><div class='del'>-    if 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'>-    @command = keys.delete('command')</div><div class='del'>-</div><div class='del'>-    @interval = keys.delete('interval'){1000}</div><div class='del'>-    _balloon_binding(@interval)</div><div class='del'>-</div><div class='del'>-    @label = TkLabel.new(@frame, 'background'=&gt;'bisque').pack</div><div class='del'>-    @label.configure(_symbolkey2str(keys)) unless keys.empty?</div><div class='del'>-    @path = @label</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 interval(val)</div><div class='del'>-    if val</div><div class='del'>-      @timer.interval(val)</div><div class='del'>-    else</div><div class='del'>-      @interval</div><div class='del'>-    end</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'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show</div><div class='del'>-    x = TkWinfo.pointerx(@parent)</div><div class='del'>-    y = TkWinfo.pointery(@parent)</div><div class='del'>-    @frame.geometry("+#{x+1}+#{y+1}")</div><div class='del'>-</div><div class='del'>-    if @command</div><div class='del'>-      case @command.arity</div><div class='del'>-      when 0</div><div class='del'>-        @command.call</div><div class='del'>-      when 2</div><div class='del'>-        @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent))</div><div class='del'>-      when 3</div><div class='del'>-        @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent), </div><div class='del'>-                      self)</div><div class='del'>-      else</div><div class='del'>-        @command.call(x - TkWinfo.rootx(@parent), y - TkWinfo.rooty(@parent), </div><div class='del'>-                      self, @parent)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @frame.deiconify</div><div class='del'>-    @frame.raise</div><div class='del'>-</div><div class='del'>-    @org_cursor = @parent['cursor']</div><div class='del'>-    @parent.cursor('crosshair') </div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def erase</div><div class='del'>-    @parent.cursor(@org_cursor) </div><div class='del'>-    @frame.withdraw</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def destroy</div><div class='del'>-    @frame.destroy</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-################################################</div><div class='del'>-# test</div><div class='del'>-################################################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  TkButton.new('text'=&gt;'This button has a balloon help') {|b|</div><div class='del'>-    pack('fill'=&gt;'x')</div><div class='del'>-    TkBalloonHelp.new(b, 'text'=&gt;' Message ')</div><div class='del'>-  }</div><div class='del'>-  TkButton.new('text'=&gt;'This button has another balloon help') {|b|</div><div class='del'>-    pack('fill'=&gt;'x')</div><div class='del'>-    TkBalloonHelp.new(b, 'text'=&gt;'configured message', </div><div class='del'>-                      'interval'=&gt;200, 'font'=&gt;'courier', </div><div class='del'>-                      'background'=&gt;'gray', 'foreground'=&gt;'red')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  sb = TkScrollbox.new.pack(:fill=&gt;:x)</div><div class='del'>-  sb.insert(:end, *%w(aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll mmm))</div><div class='del'>-=begin</div><div class='del'>-  # CASE1 : command takes no arguemnt</div><div class='del'>-  bh = TkBalloonHelp.new(sb, :interval=&gt;500, </div><div class='del'>-                         :relief=&gt;:ridge, :background=&gt;'white', </div><div class='del'>-                         :command=&gt;proc{</div><div class='del'>-                           y = TkWinfo.pointery(sb) - TkWinfo.rooty(sb)</div><div class='del'>-                           bh.text "current index == #{sb.nearest(y)}"</div><div class='del'>-                         })</div><div class='del'>-=end</div><div class='del'>-=begin</div><div class='del'>-  # CASE2 : command takes 2 arguemnts</div><div class='del'>-  bh = TkBalloonHelp.new(sb, :interval=&gt;500, </div><div class='del'>-                         :relief=&gt;:ridge, :background=&gt;'white', </div><div class='del'>-                         :command=&gt;proc{|x, y|</div><div class='del'>-                           bh.text "current index == #{sb.nearest(y)}"</div><div class='del'>-                         })</div><div class='del'>-=end</div><div class='del'>-=begin</div><div class='del'>-  # CASE3 : command takes 3 arguemnts</div><div class='del'>-  TkBalloonHelp.new(sb, :interval=&gt;500, </div><div class='del'>-                    :relief=&gt;:ridge, :background=&gt;'white', </div><div class='del'>-                    :command=&gt;proc{|x, y, bhelp|</div><div class='del'>-                      bhelp.text "current index == #{sb.nearest(y)}"</div><div class='del'>-                    })</div><div class='del'>-=end</div><div class='del'>-=begin</div><div class='del'>-  # CASE4a : command is a Proc object and takes 4 arguemnts</div><div class='del'>-  cmd = proc{|x, y, bhelp, parent|</div><div class='del'>-    bhelp.text "current index == #{parent.nearest(y)}"</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkBalloonHelp.new(sb, :interval=&gt;500, </div><div class='del'>-                    :relief=&gt;:ridge, :background=&gt;'white', </div><div class='del'>-                    :command=&gt;cmd)</div><div class='del'>-</div><div class='del'>-  sb2 = TkScrollbox.new.pack(:fill=&gt;:x)</div><div class='del'>-  sb2.insert(:end, *%w(AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL MMM))</div><div class='del'>-  TkBalloonHelp.new(sb2, :interval=&gt;500, </div><div class='del'>-                    :padx=&gt;5, :relief=&gt;:raised, </div><div class='del'>-                    :background=&gt;'gray25', :foreground=&gt;'white',</div><div class='del'>-                    :command=&gt;cmd)</div><div class='del'>-=end</div><div class='del'>-#=begin</div><div class='del'>-  # CASE4b : command is a Method object and takes 4 arguemnts</div><div class='del'>-  def set_msg(x, y, bhelp, parent)</div><div class='del'>-    bhelp.text "current index == #{parent.nearest(y)}"</div><div class='del'>-  end</div><div class='del'>-  cmd = self.method(:set_msg)</div><div class='del'>-</div><div class='del'>-  TkBalloonHelp.new(sb, :interval=&gt;500, </div><div class='del'>-                    :relief=&gt;:ridge, :background=&gt;'white', </div><div class='del'>-                    :command=&gt;cmd)</div><div class='del'>-</div><div class='del'>-  sb2 = TkScrollbox.new.pack(:fill=&gt;:x)</div><div class='del'>-  sb2.insert(:end, *%w(AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL MMM))</div><div class='del'>-  TkBalloonHelp.new(sb2, :interval=&gt;500, </div><div class='del'>-                    :padx=&gt;5, :relief=&gt;:raised, </div><div class='del'>-                    :background=&gt;'gray25', :foreground=&gt;'white',</div><div class='del'>-                    :command=&gt;cmd)</div><div class='del'>-#=end</div><div class='del'>-</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkbiff.rb b/ext/tk/sample/tkbiff.rb<br/>deleted file mode 100644<br/>index c6699629cc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkbiff.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkbiff.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,155 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-if ARGV[0] != '-d'</div><div class='del'>-  unless $DEBUG</div><div class='del'>-    exit if fork</div><div class='del'>-  end</div><div class='del'>-else</div><div class='del'>-  ARGV.shift</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if ARGV.length == 0</div><div class='del'>-  if ENV['MAIL']</div><div class='del'>-    $spool = ENV['MAIL']</div><div class='del'>-  else  </div><div class='del'>-    $spool = '/var/spool/mail/' + ENV['USER']</div><div class='del'>-  end</div><div class='del'>-else </div><div class='del'>-  $spool = ARGV[0]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require "parsedate"</div><div class='del'>-require "base64"</div><div class='del'>-</div><div class='del'>-include ParseDate</div><div class='del'>-</div><div class='del'>-class Mail</div><div class='del'>-  def Mail.new(f)</div><div class='del'>-    if !f.kind_of?(IO)</div><div class='del'>-      f = open(f, "r")</div><div class='del'>-      me = super</div><div class='del'>-      f.close</div><div class='del'>-    else</div><div class='del'>-      me = super</div><div class='del'>-    end</div><div class='del'>-    return me</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(f)</div><div class='del'>-    @header = {}</div><div class='del'>-    @body = []</div><div class='del'>-    while line = f.gets()</div><div class='del'>-      line.chop!</div><div class='del'>-      next if /^From / =~ line  # skip From-line  </div><div class='del'>-      break if /^$/ =~ line     # end of header</div><div class='del'>-      if /^(\S+):\s*(.*)/ =~ line</div><div class='del'>-        @header[attr = $1.capitalize] = $2</div><div class='del'>-      elsif attr</div><div class='del'>-        sub(/^\s*/, '')</div><div class='del'>-        @header[attr] += "\n" + $_</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    return unless $_</div><div class='del'>-</div><div class='del'>-    while line = f.gets()</div><div class='del'>-      break if /^From / =~ line</div><div class='del'>-      @body.push($_)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def header</div><div class='del'>-    return @header</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def body</div><div class='del'>-    return @body</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require "tkscrollbox"</div><div class='del'>-</div><div class='del'>-my_appname = Tk.appname('tkbiff')</div><div class='del'>-$top = TkRoot.new</div><div class='del'>-if ((TkWinfo.interps($top) - [my_appname]).find{|ip| ip =~ /^tkbiff/})</div><div class='del'>-  STDERR.print("Probably other 'tkbiff's are running. Bye.\n")</div><div class='del'>-  exit</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$top.withdraw</div><div class='del'>-$list = TkScrollbox.new($top) {</div><div class='del'>-  relief 'raised'</div><div class='del'>-  width 80</div><div class='del'>-  height 8</div><div class='del'>-  setgrid 'yes'</div><div class='del'>-  pack</div><div class='del'>-}</div><div class='del'>-TkButton.new($top) {</div><div class='del'>-  text 'Dismiss'</div><div class='del'>-  command proc {$top.withdraw}</div><div class='del'>-  pack('fill'=&gt;'both','expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-$top.bind "Control-c", proc{exit}</div><div class='del'>-$top.bind "Control-q", proc{exit}</div><div class='del'>-$top.bind "space", proc{exit}</div><div class='del'>-</div><div class='del'>-$spool_size = 0</div><div class='del'>-$check_time = Time.now</div><div class='del'>-</div><div class='del'>-def check</div><div class='del'>-  $check_time = Time.now</div><div class='del'>-  size = File.size($spool)</div><div class='del'>-  if size and size != $spool_size</div><div class='del'>-    $spool_size = size</div><div class='del'>-    pop_up if size &gt; 0</div><div class='del'>-  end</div><div class='del'>-  Tk.after 5000, proc{check}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if defined? Thread</div><div class='del'>-  Thread.start do</div><div class='del'>-    loop do</div><div class='del'>-      sleep 600</div><div class='del'>-      if Time.now - $check_time &gt; 200</div><div class='del'>-        Tk.after 5000, proc{check}</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 pop_up</div><div class='del'>-  outcount = 0;</div><div class='del'>-  $list.delete 0, 'end'</div><div class='del'>-  f = open($spool, "r")</div><div class='del'>-  while !f.eof?</div><div class='del'>-    mail = Mail.new(f)</div><div class='del'>-    date, from, subj =  mail.header['Date'], mail.header['From'], mail.header['Subject']</div><div class='del'>-    next if !date</div><div class='del'>-    y = m = d = 0</div><div class='del'>-    y, m, d = parsedate(date) if date</div><div class='del'>-    from = "sombody@somewhere" if ! from</div><div class='del'>-    subj = "(nil)" if ! subj</div><div class='del'>-    from = decode_b(from)</div><div class='del'>-    subj = decode_b(subj)</div><div class='del'>-    $list.insert 'end', format('%-02d/%02d/%02d [%-28.28s] %s',y,m,d,from,subj)</div><div class='del'>-    outcount += 1</div><div class='del'>-  end</div><div class='del'>-  f.close</div><div class='del'>-  if outcount == 0</div><div class='del'>-    $list.insert 'end', "You have no mail."</div><div class='del'>-  else</div><div class='del'>-    $list.see 'end'</div><div class='del'>-  end</div><div class='del'>-  $top.deiconify</div><div class='del'>-  Tk.after 2000, proc{$top.iconify}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$list.insert 'end', "You have no mail."</div><div class='del'>-check</div><div class='del'>-Tk.after 2000, proc{$top.iconify}</div><div class='del'>-begin</div><div class='del'>-  Tk.mainloop</div><div class='del'>-rescue</div><div class='del'>-  `echo #$! &gt; /tmp/tkbiff`</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkbrowse.rb b/ext/tk/sample/tkbrowse.rb<br/>deleted file mode 100644<br/>index 4893f57f95..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkbrowse.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkbrowse.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,79 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# This script generates a directory browser, which lists the working</div><div class='del'>-# directory and allows you to open files or subdirectories by</div><div class='del'>-# double-clicking.</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'>-require "tkscrollbox"</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'>-$dirlist = {}</div><div class='del'>-</div><div class='del'>-def browsedir (dir)</div><div class='del'>-  if $dirlist.key? dir</div><div class='del'>-    $dirlist[dir]</div><div class='del'>-  else</div><div class='del'>-    top = if $dirlist.size &gt; 0 then TkToplevel.new else nil end</div><div class='del'>-    list = TkScrollbox.new(top) {</div><div class='del'>-      relief 'raised'</div><div class='del'>-      width 20</div><div class='del'>-      height 20</div><div class='del'>-      setgrid 'yes'</div><div class='del'>-      pack</div><div class='del'>-    }</div><div class='del'>-    list.insert 'end', *`ls #{dir}`.split</div><div class='del'>-</div><div class='del'>-    # Set up bindings for the browser.</div><div class='del'>-</div><div class='del'>-    list.focus</div><div class='del'>-    list.bind "Control-q", proc{exit}</div><div class='del'>-    list.bind "Control-c", proc{exit}</div><div class='del'>-    list.bind "Control-p", proc{</div><div class='del'>-      print "selection &lt;", TkSelection.get, "&gt;\n"</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    list.bind "Double-Button-1", proc{</div><div class='del'>-      for i in TkSelection.get.split</div><div class='del'>-        print "clicked ", i, "\n"</div><div class='del'>-        browse dir, i</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    $dirlist[dir] = list</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def browse (dir, file)</div><div class='del'>-  file="#{dir}/#{file}"</div><div class='del'>-  if File.directory? file</div><div class='del'>-    browsedir(file)</div><div class='del'>-  else</div><div class='del'>-    if File.file? file</div><div class='del'>-      if ENV['EDITOR']</div><div class='del'>-        system format("%s %s&amp;", ENV['EDITOR'], file)</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'>-      STDERR.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'>-if ARGV.length&gt;0 </div><div class='del'>-  dir = ARGV[0]</div><div class='del'>-else</div><div class='del'>-  dir="."</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-browsedir(dir)</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkcombobox.rb b/ext/tk/sample/tkcombobox.rb<br/>deleted file mode 100644<br/>index 1840270951..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkcombobox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkcombobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,426 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tkcombobox.rb : TkAutoScrollbox &amp; TkCombobox</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 TkAutoScrollbox &lt; TkListbox</div><div class='del'>-  include TkComposite</div><div class='del'>-</div><div class='del'>-  @@up_bmp = TkBitmapImage.new(:data=&gt;&lt;&lt;EOD)</div><div class='del'>-#define up_arrow_width 9</div><div class='del'>-#define up_arrow_height 9</div><div class='del'>-static unsigned char up_arrow_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x38, 0x00, 0x38, 0x00, 0x7c, 0x00,</div><div class='del'>-   0x7c, 0x00, 0xfe, 0x00, 0x00, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-  @@down_bmp = TkBitmapImage.new(:data=&gt;&lt;&lt;EOD)</div><div class='del'>-#define up_arrow_width 9</div><div class='del'>-#define up_arrow_height 9</div><div class='del'>-static unsigned char down_arrow_bits[] = {</div><div class='del'>-   0x00, 0x00, 0xfe, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x38, 0x00, 0x38, 0x00,</div><div class='del'>-   0x10, 0x00, 0x10, 0x00, 0x00, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-  ############################</div><div class='del'>-  private</div><div class='del'>-  ############################</div><div class='del'>-  def initialize_composite(keys={})</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    @initwait = keys.delete('startwait'){300}</div><div class='del'>-    @interval = keys.delete('interval'){150}</div><div class='del'>-    @initwait -= @interval</div><div class='del'>-    @initwait = 0 if @initwait &lt; 0</div><div class='del'>-</div><div class='del'>-    @lbox = TkListbox.new(@frame, :borderwidth=&gt;0)</div><div class='del'>-    @path = @lbox.path</div><div class='del'>-    TkPack.propagate(@lbox, false)</div><div class='del'>-</div><div class='del'>-    @scr = TkScrollbar.new(@frame, :width=&gt;10)</div><div class='del'>-</div><div class='del'>-    @lbox.yscrollcommand(proc{|*args| @scr.set(*args); _config_proc})</div><div class='del'>-    @scr.command(proc{|*args| @lbox.yview(*args); _config_proc})</div><div class='del'>-</div><div class='del'>-    @up_arrow   = TkLabel.new(@lbox, :image=&gt;@@up_bmp, </div><div class='del'>-                              :relief=&gt;:raised, :borderwidth=&gt;1)</div><div class='del'>-    @down_arrow = TkLabel.new(@lbox, :image=&gt;@@down_bmp, </div><div class='del'>-                              :relief=&gt;:raised, :borderwidth=&gt;1)</div><div class='del'>-</div><div class='del'>-    _init_binding</div><div class='del'>-</div><div class='del'>-    @lbox.pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;:true)</div><div class='del'>-</div><div class='del'>-    delegate('DEFAULT', @lbox)</div><div class='del'>-    delegate('background', @frame, @scr)</div><div class='del'>-    delegate('activebackground', @scr)</div><div class='del'>-    delegate('troughcolor', @scr)</div><div class='del'>-    delegate('repeatdelay', @scr)</div><div class='del'>-    delegate('repeatinterval', @scr)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-</div><div class='del'>-    delegate_alias('arrowrelief', 'relief', @up_arrow, @down_arrow)</div><div class='del'>-    delegate_alias('arrowborderwidth', 'borderwidth', @up_arrow, @down_arrow)</div><div class='del'>-</div><div class='del'>-    scrollbar(keys.delete('scrollbar')){false}</div><div class='del'>-</div><div class='del'>-    configure keys unless keys.empty?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _show_up_arrow</div><div class='del'>-    unless @up_arrow.winfo_mapped?</div><div class='del'>-      @up_arrow.pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _show_down_arrow</div><div class='del'>-    unless @down_arrow.winfo_mapped?</div><div class='del'>-      @down_arrow.pack(:side=&gt;:bottom, :fill=&gt;:x) </div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _set_sel(idx)</div><div class='del'>-      @lbox.activate(idx)</div><div class='del'>-      @lbox.selection_clear(0, 'end')</div><div class='del'>-      @lbox.selection_set(idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _check_sel(cidx, tidx = nil, bidx = nil)</div><div class='del'>-    _set_sel(cidx)</div><div class='del'>-    unless tidx</div><div class='del'>-      tidx = @lbox.nearest(0) </div><div class='del'>-      tidx += 1 if tidx &gt; 0</div><div class='del'>-    end</div><div class='del'>-    unless bidx</div><div class='del'>-      bidx = @lbox.nearest(10000) </div><div class='del'>-      bidx -= 1 if bidx &lt; @lbox.index('end') - 1</div><div class='del'>-    end</div><div class='del'>-    if cidx &gt; bidx</div><div class='del'>-      _set_sel(bidx)</div><div class='del'>-    end</div><div class='del'>-    if cidx &lt; tidx</div><div class='del'>-      _set_sel(tidx)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _up_proc</div><div class='del'>-    cidx = @lbox.curselection[0]</div><div class='del'>-    idx = @lbox.nearest(0)</div><div class='del'>-    if idx &gt;= 0</div><div class='del'>-      @lbox.see(idx - 1)</div><div class='del'>-      _set_sel(idx)</div><div class='del'>-      @up_arrow.pack_forget if idx == 1</div><div class='del'>-      @up_timer.stop if idx == 0</div><div class='del'>-      _show_down_arrow if @lbox.bbox('end') == []</div><div class='del'>-    end</div><div class='del'>-    if cidx &amp;&amp; cidx &gt; 0 &amp;&amp; (idx == 0 || cidx == @lbox.nearest(10000))</div><div class='del'>-      _set_sel(cidx - 1)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _down_proc</div><div class='del'>-    cidx = @lbox.curselection[0]</div><div class='del'>-    eidx = @lbox.index('end') - 1</div><div class='del'>-    idx = @lbox.nearest(10000)</div><div class='del'>-    if idx &lt;= eidx</div><div class='del'>-      @lbox.see(idx + 1)</div><div class='del'>-      _set_sel(cidx + 1) if cidx &lt; eidx</div><div class='del'>-      @down_arrow.pack_forget if idx + 1 == eidx</div><div class='del'>-      @down_timer.stop if idx == eidx</div><div class='del'>-      _show_up_arrow if @lbox.bbox(0) == []</div><div class='del'>-    end</div><div class='del'>-    if cidx &amp;&amp; cidx &lt; eidx &amp;&amp; (eidx == idx || cidx == @lbox.nearest(0))</div><div class='del'>-      _set_sel(cidx + 1)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _key_UP_proc</div><div class='del'>-    cidx = @lbox.curselection[0]</div><div class='del'>-    _set_sel(cidx = @lbox.index('activate')) unless cidx</div><div class='del'>-    cidx -= 1</div><div class='del'>-    if cidx == 0</div><div class='del'>-      @up_arrow.pack_forget</div><div class='del'>-    elsif cidx == @lbox.nearest(0)</div><div class='del'>-      @lbox.see(cidx - 1)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _key_DOWN_proc</div><div class='del'>-    cidx = @lbox.curselection[0]</div><div class='del'>-    _set_sel(cidx = @lbox.index('activate')) unless cidx</div><div class='del'>-    cidx += 1</div><div class='del'>-    if cidx == @lbox.index('end') - 1</div><div class='del'>-      @down_arrow.pack_forget</div><div class='del'>-    elsif cidx == @lbox.nearest(10000)</div><div class='del'>-      @lbox.see(cidx + 1)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _config_proc</div><div class='del'>-    if @lbox.size == 0</div><div class='del'>-      @up_arrow.pack_forget</div><div class='del'>-      @down_arrow.pack_forget</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-    tidx = @lbox.nearest(0)</div><div class='del'>-    bidx = @lbox.nearest(10000)</div><div class='del'>-    if tidx &gt; 0</div><div class='del'>-      _show_up_arrow</div><div class='del'>-      tidx += 1</div><div class='del'>-    else</div><div class='del'>-      @up_arrow.pack_forget unless @up_timer.running?</div><div class='del'>-    end</div><div class='del'>-    if bidx &lt; @lbox.index('end') - 1</div><div class='del'>-      _show_down_arrow</div><div class='del'>-      bidx -= 1</div><div class='del'>-    else</div><div class='del'>-      @down_arrow.pack_forget unless @down_timer.running?</div><div class='del'>-    end</div><div class='del'>-    cidx = @lbox.curselection[0]</div><div class='del'>-    _check_sel(cidx, tidx, bidx) if cidx</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _init_binding</div><div class='del'>-    @up_timer = TkAfter.new(@interval, -1, proc{_up_proc})</div><div class='del'>-    @down_timer = TkAfter.new(@interval, -1, proc{_down_proc})</div><div class='del'>-</div><div class='del'>-    @up_timer.set_start_proc(@initwait, proc{})</div><div class='del'>-    @down_timer.set_start_proc(@initwait, proc{})</div><div class='del'>-</div><div class='del'>-    @up_arrow.bind('Enter', proc{@up_timer.start})</div><div class='del'>-    @up_arrow.bind('Leave', proc{@up_timer.stop if @up_arrow.winfo_mapped?})</div><div class='del'>-    @down_arrow.bind('Enter', proc{@down_timer.start})</div><div class='del'>-    @down_arrow.bind('Leave', proc{@down_timer.stop if @down_arrow.winfo_mapped?})</div><div class='del'>-</div><div class='del'>-    @lbox.bind('Configure', proc{_config_proc})</div><div class='del'>-    @lbox.bind('Enter', proc{|y| _set_sel(@lbox.nearest(y))}, '%y')</div><div class='del'>-    @lbox.bind('Motion', proc{|y| </div><div class='del'>-                 @up_timer.stop if @up_timer.running?</div><div class='del'>-                 @down_timer.stop if @down_timer.running?</div><div class='del'>-                 _check_sel(@lbox.nearest(y))</div><div class='del'>-               }, '%y')</div><div class='del'>-</div><div class='del'>-    @lbox.bind('Up', proc{_key_UP_proc})</div><div class='del'>-    @lbox.bind('Down', proc{_key_DOWN_proc})</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 scrollbar(mode)</div><div class='del'>-    if mode</div><div class='del'>-      @scr.pack(:side=&gt;:right, :fill=&gt;:y)</div><div class='del'>-    else</div><div class='del'>-      @scr.pack_forget</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 TkCombobox &lt; TkEntry</div><div class='del'>-  include TkComposite</div><div class='del'>-</div><div class='del'>-  @@down_btn_bmp = TkBitmapImage.new(:data=&gt;&lt;&lt;EOD)</div><div class='del'>-#define down_arrow_width 11</div><div class='del'>-#define down_arrow_height 11</div><div class='del'>-static unsigned char down_arrow_bits[] = {</div><div class='del'>-   0x00, 0x00, 0xfe, 0x03, 0xfc, 0x01, 0xfc, 0x01, 0xf8, 0x00, 0xf8, 0x00,</div><div class='del'>-   0x70, 0x00, 0x70, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-  @@up_btn_bmp = TkBitmapImage.new(:data=&gt;&lt;&lt;EOD)</div><div class='del'>-#define up_arrow_width 11</div><div class='del'>-#define up_arrow_height 11</div><div class='del'>-static unsigned char up_arrow_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x70, 0x00, 0xf8, 0x00,</div><div class='del'>-   0xf8, 0x00, 0xfc, 0x01, 0xfc, 0x01, 0xfe, 0x03, 0x00, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-  def _button_proc(dir = true)</div><div class='del'>-    @btn.relief(:sunken)</div><div class='del'>-    x = @frame.winfo_rootx</div><div class='del'>-    y = @frame.winfo_rooty</div><div class='del'>-    if dir</div><div class='del'>-      @top.geometry("+#{x}+#{y + @frame.winfo_height}")</div><div class='del'>-    else</div><div class='del'>-      @btn.image(@@up_btn_bmp)</div><div class='del'>-      @top.geometry("+#{x}+#{y - @top.winfo_reqheight}")</div><div class='del'>-    end</div><div class='del'>-    @top.deiconify</div><div class='del'>-    @lst.focus</div><div class='del'>-</div><div class='del'>-    if (idx = values.index(@ent.value))</div><div class='del'>-      @lst.see(idx - 1)</div><div class='del'>-      @lst.activate(idx)</div><div class='del'>-      @lst.selection_set(idx)</div><div class='del'>-    elsif @lst.size &gt; 0</div><div class='del'>-      @lst.see(0)</div><div class='del'>-      @lst.activate(0)</div><div class='del'>-      @lst.selection_set(0)</div><div class='del'>-    end</div><div class='del'>-    @top.grab</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      @var.tkwait</div><div class='del'>-      if (idx = @var.to_i) &gt;= 0</div><div class='del'>-        @ent.value = @lst.get(idx)</div><div class='del'>-      end</div><div class='del'>-      @top.withdraw</div><div class='del'>-      @btn.relief(:raised)</div><div class='del'>-      @btn.image(@@down_btn_bmp)</div><div class='del'>-    rescue</div><div class='del'>-    ensure</div><div class='del'>-      begin</div><div class='del'>-        @top.grab(:release)</div><div class='del'>-        @ent.focus</div><div class='del'>-      rescue</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_button_proc</div><div class='del'>-</div><div class='del'>-  def _init_bindings</div><div class='del'>-    @btn.bind('1', proc{_button_proc(true)})</div><div class='del'>-    @btn.bind('3', proc{_button_proc(false)})</div><div class='del'>-</div><div class='del'>-    @lst.bind('1', proc{|y| @var.value = @lst.nearest(y)}, '%y')</div><div class='del'>-    @lst.bind('Return', proc{@var.value = @lst.curselection[0]})</div><div class='del'>-</div><div class='del'>-    cancel = TkVirtualEvent.new('2', '3', 'Escape')</div><div class='del'>-    @lst.bind(cancel, proc{@var.value = -1})</div><div class='del'>-  end</div><div class='del'>-  private :_init_bindings</div><div class='del'>-</div><div class='del'>-  def initialize_composite(keys={})</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    @btn = TkLabel.new(@frame, :relief=&gt;:raised, :borderwidth=&gt;3, </div><div class='del'>-                       :image=&gt;@@down_btn_bmp).pack(:side=&gt;:right, </div><div class='del'>-                                                    :ipadx=&gt;2, :fill=&gt;:y)</div><div class='del'>-    @ent = TkEntry.new(@frame).pack(:side=&gt;:left)</div><div class='del'>-    @path = @ent.path</div><div class='del'>-</div><div class='del'>-    @top = TkToplevel.new(@btn, :borderwidth=&gt;1, :relief=&gt;:raised) {</div><div class='del'>-      withdraw</div><div class='del'>-      transient</div><div class='del'>-      overrideredirect(true)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    startwait = keys.delete('startwait'){300}</div><div class='del'>-    interval = keys.delete('interval'){150}</div><div class='del'>-    @lst = TkAutoScrollbox.new(@top, </div><div class='del'>-                               :startwait=&gt;startwait, </div><div class='del'>-                               :interval=&gt;interval).pack(:fill=&gt;:both, </div><div class='del'>-                                                         :expand=&gt;true)</div><div class='del'>-    @ent_list = []</div><div class='del'>-</div><div class='del'>-    @var = TkVariable.new</div><div class='del'>-</div><div class='del'>-    _init_bindings</div><div class='del'>-</div><div class='del'>-    delegate('DEFAULT', @ent)</div><div class='del'>-    delegate('height', @lst)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-</div><div class='del'>-    delegate('arrowrelief', @lst)</div><div class='del'>-    delegate('arrowborderwidth', @lst)</div><div class='del'>-</div><div class='del'>-    if mode = keys.delete('scrollbar')</div><div class='del'>-      scrollbar(mode)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    configure keys unless keys.empty?</div><div class='del'>-  end</div><div class='del'>-  private :initialize_composite</div><div class='del'>-</div><div class='del'>-  def scrollbar(mode)</div><div class='del'>-    @lst.scrollbar(mode)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _reset_width</div><div class='del'>-    len = @ent.width</div><div class='del'>-    @lst.get(0, 'end').each{|l| len = l.length if l.length &gt; len}</div><div class='del'>-    @lst.width(len + 1)</div><div class='del'>-  end</div><div class='del'>-  private :_reset_width</div><div class='del'>-</div><div class='del'>-  def add(ent)</div><div class='del'>-    ent = ent.to_s</div><div class='del'>-    unless @ent_list.index(ent)</div><div class='del'>-      @ent_list &lt;&lt; ent</div><div class='del'>-      @lst.insert('end', ent)</div><div class='del'>-    end</div><div class='del'>-    _reset_width</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def remove(ent)</div><div class='del'>-    ent = ent.to_s</div><div class='del'>-    @ent_list.delete(ent)</div><div class='del'>-    if idx = @lst.get(0, 'end').index(ent)</div><div class='del'>-      @lst.delete(idx)</div><div class='del'>-    end</div><div class='del'>-    _reset_width</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def values(ary = nil)</div><div class='del'>-    if ary</div><div class='del'>-      @lst.delete(0, 'end')</div><div class='del'>-      @ent_list.clear</div><div class='del'>-      ary.each{|ent| add(ent)}</div><div class='del'>-      _reset_width</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      @lst.get(0, 'end')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def see(idx)</div><div class='del'>-    @lst.see(@lst.index(idx) - 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def list_index(idx)</div><div class='del'>-    @lst.index(idx)</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'>-# test</div><div class='del'>-################################################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  v = TkVariable.new</div><div class='del'>-  e = TkCombobox.new(:height=&gt;7, :scrollbar=&gt;true, :textvariable=&gt;v, </div><div class='del'>-                     :arrowrelief=&gt;:flat, :arrowborderwidth=&gt;0, </div><div class='del'>-                     :startwait=&gt;400, :interval=&gt;200).pack</div><div class='del'>-  e.values(%w(aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu))</div><div class='del'>-  #e.see(e.list_index('end') - 2)</div><div class='del'>-  e.value = 'cc'</div><div class='del'>-  TkFrame.new{|f|</div><div class='del'>-    fnt = TkFont.new('Helvetica 10')</div><div class='del'>-    TkLabel.new(f, :font=&gt;fnt, :text=&gt;'TkCombobox value :').pack(:side=&gt;:left)</div><div class='del'>-    TkLabel.new(f, :font=&gt;fnt, :textvariable=&gt;v).pack(:side=&gt;:left)</div><div class='del'>-  }.pack</div><div class='del'>-</div><div class='del'>-  TkFrame.new(:relief=&gt;:raised, :borderwidth=&gt;2, </div><div class='del'>-              :height=&gt;3).pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;5, :pady=&gt;3)</div><div class='del'>-</div><div class='del'>-  l = TkAutoScrollbox.new(nil, :relief=&gt;:groove, :borderwidth=&gt;4, </div><div class='del'>-                          :width=&gt;20).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  (0..20).each{|i| l.insert('end', "line #{i}")}</div><div class='del'>-</div><div class='del'>-  TkFrame.new(:relief=&gt;:ridge, :borderwidth=&gt;3){</div><div class='del'>-    TkButton.new(self, :text=&gt;'ON', </div><div class='del'>-                 :command=&gt;proc{l.scrollbar(true)}).pack(:side=&gt;:left)</div><div class='del'>-    TkButton.new(self, :text=&gt;'OFF', </div><div class='del'>-                 :command=&gt;proc{l.scrollbar(false)}).pack(:side=&gt;:right)</div><div class='del'>-    pack(:fill=&gt;:x)</div><div class='del'>-  }</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkdialog.rb b/ext/tk/sample/tkdialog.rb<br/>deleted file mode 100644<br/>index 00cc12ab11..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkdialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkdialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-root = TkFrame.new</div><div class='del'>-top = TkFrame.new(root) {</div><div class='del'>-  relief 'raised'</div><div class='del'>-  border 1</div><div class='del'>-}</div><div class='del'>-msg = TkMessage.new(top) {</div><div class='del'>-  text "File main.c hasn't been saved to disk since \</div><div class='del'>-it was last modified.  What should I do?" </div><div class='del'>-  justify 'center'</div><div class='del'>-  aspect 200</div><div class='del'>-  font '-Adobe-helvetica-medium-r-normal--*-240*'</div><div class='del'>-  pack('padx'=&gt;5, 'pady'=&gt;5, 'expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-top.pack('fill'=&gt;'both')</div><div class='del'>-root.pack</div><div class='del'>-</div><div class='del'>-bot = TkFrame.new(root) {</div><div class='del'>-  relief 'raised'</div><div class='del'>-  border 1</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkFrame.new(bot) { |left|</div><div class='del'>-  relief 'sunken'</div><div class='del'>-  border 1</div><div class='del'>-  pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;10, 'pady'=&gt; 10)</div><div class='del'>-  TkButton.new(left) {</div><div class='del'>-    text "Save File"</div><div class='del'>-    command "quit 'save'"</div><div class='del'>-    pack('expand'=&gt;'yes','padx'=&gt;6,'pady'=&gt; 6)</div><div class='del'>-    top.bind "Enter", proc{state 'active'}</div><div class='del'>-    msg.bind "Enter", proc{state 'active'}</div><div class='del'>-    bot.bind "Enter", proc{state 'active'}</div><div class='del'>-    top.bind "Leave", proc{state 'normal'}</div><div class='del'>-    msg.bind "Leave", proc{state 'normal'}</div><div class='del'>-    bot.bind "Leave", proc{state 'normal'}</div><div class='del'>-    Tk.root.bind "ButtonRelease-1", proc{quit 'save'}</div><div class='del'>-    Tk.root.bind "Return", proc{quit 'save'}</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-TkButton.new(bot) {</div><div class='del'>-  text "Quit Anyway"</div><div class='del'>-  command "quit 'quit'"</div><div class='del'>-  pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;10)</div><div class='del'>-}</div><div class='del'>-TkButton.new(bot) {</div><div class='del'>-  text "Return To Editor"</div><div class='del'>-  command "quit 'return'"</div><div class='del'>-  pack('side'=&gt;'left', 'expand'=&gt;'yes', 'padx'=&gt;10)</div><div class='del'>-}</div><div class='del'>-bot.pack</div><div class='del'>-root.pack('side'=&gt;'top', 'fill'=&gt;'both', 'expand'=&gt;'yes')</div><div class='del'>-</div><div class='del'>-def quit(button)</div><div class='del'>-  print "You pressed the \"#{button}\" button;  bye-bye!\n"</div><div class='del'>-  exit</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt<br/>deleted file mode 100644<br/>index 71e359559a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-</div><div class='del'>-  #########################################################################</div><div class='del'>-  ### The following text is the original file of the Tcl/Tk extension.  ###</div><div class='del'>-  ### Icon data files ( those are 'tkIcons', 'tkIcons-sample.kde', and  ###</div><div class='del'>-  ### 'tkIcons.kde' ) are quoted from the source archive of ICONS       ###</div><div class='del'>-  ### extension. As the following document describes, those icon images ###</div><div class='del'>-  ### are not applied the license.                                      ###</div><div class='del'>-  #########################################################################</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-IMPORTANT LICENSE INFORMATION</div><div class='del'>-=============================</div><div class='del'>-</div><div class='del'>-The following terms (based on the standard TCL/TK license) apply to all files</div><div class='del'>-contained in this package, &lt;b&gt;except&lt;/b&gt; the icon images.</div><div class='del'>-</div><div class='del'>-The icon images can be freely distributed. If you require clarification of</div><div class='del'>-copyright/license details for the images, please contact the appropriate</div><div class='del'>-creator/maintainer.</div><div class='del'>-</div><div class='del'>-ICONS: LICENSE TERMS</div><div class='del'>-====================</div><div class='del'>-</div><div class='del'>-This software (ICONS) is Copyright 2002 by Adrian Davis (adrian@satisoft.com).</div><div class='del'>-The following terms apply to all files associated with the software except</div><div class='del'>-where noted above. </div><div class='del'>-</div><div class='del'>-The author hereby grants 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</div><div class='del'>-this 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</div><div class='del'>-where 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 POSSIBILITY</div><div class='del'>-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,</div><div class='del'>-OR 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,</div><div class='del'>-the software shall be classified as "Commercial Computer Software"</div><div class='del'>-and the Government shall have only "Restricted Rights" as defined in</div><div class='del'>-Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing,</div><div class='del'>-the 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/tkextlib/ICONS/tkIcons b/ext/tk/sample/tkextlib/ICONS/tkIcons<br/>deleted file mode 100644<br/>index 0d5b2c8695..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/ICONS/tkIcons?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/ICONS/tkIcons</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,195 +0,0 @@</div><div class='del'>-actattach16:act act16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBPz+/AQCBAAAACH5BAEAAAAALAAAAAAQABAAAAI2hAOCxg2h0nJHyEshi9HpxU1GOCLdZoKpQ15nibUoprKp9lh2oucUxsBRXsJh4Hjs/QTMpr8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actbookmark16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy+vERGRFRWVDQ2NKSmpAQCBKyurMTGxISChJyanHR2dIyKjGxubHRydGRmZIyOjFxeXHx6fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICACwWieY1CibCCsrBkMb0zchSEcNYskCtqBBzshFkOGQFk0IRqOxqPBODRHCMhCQKteRc9FI/KQWGOIyFYgkDC+gPR4snCcfRGKOIKIgSMQE31+f4OEYCZ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actbookmarknew16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy6vERGRFRWVDQyNKSipAQCBMTGxKyurISChJSSlJyanHR2dIyKjPz+xISGhPz+BGxubMTCBHx+fPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVfICACwWieY1CibCCsrBkMb0zchTEcNYsIiYHiwIOdEAvigdFQGE0Ix4NBbSAgsWjk+jBIAlcUYrJASChnSXZSoUDelKfoKpFALJA61ueGI2IAZmhogGFmCGGAgXsifiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actcheck16:act act16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBMT+xATCBASCBARCBAQCBEQCBAAAACH5BAEAAAAALAAAAAAQABAAAAM2CLrc/itAF8RkdVyVye4FpzUgJwijORCGUhDDOZbLG6Nd2xjwibIQ2y80sRGIl4IBuWk6Af4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actcross16:act act16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/PwCBMQCBEQCBIQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMuCLrc/hCGFyYLQjQsquLDQ2ScEEJjZkYfyQKlJa2j7AQnMM7NfucLze1FLD78CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actexit16:act act16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBDQyNHR2dCH5BAEAAAAALAAAAAAQABAAAAI4hI+pFrHb3nEg1iWiDiINCwYDko0V9XUTda6I1TIsUMpGinyzbB6ZeGuoEr+GUDL4CXqSphPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-acthelp16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQ6XAQCBCyCvARSjAQ+ZGSm1ARCbEyWzESOxIy63ARalAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EEgQqhUz00GEJx2WFUY3BZw5HYh4cu6mSkEy06B72LHkiYFST0NRLIaa4I0oQyZhTKInSq2eAlaaMAuYEv0RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actitemadd16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBARCZPz+/Mzq9BTC3ITC1HSyzGSivAw+XBSStIS6zHy2zAQCDFyatAQOHFSStEyOtAQSJBSq1DR2nCxunCRmlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICCOQTmeaCAMRIC+AVu47xkTBl2Ld16XQNYBQTQBVIOkMHFQJBeMI4tAbSSu2IRDSnhAvFfI97sFRM6RwOMacbjLKckVvgvIJ5EdSU7J648VgXQ7Dmd/hyJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actitemdelete16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBARCZPz+/Mzq9BTC3AQCDAQOHFSStAQSJAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQwEMhJq704681n+GAISoEwnGg6EAUQrEQsz4ThEkeu77kNIAagMEj0dY7IpHI58UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actlock16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJEQ+FExGHCQiDBwaDGxiLHxyNHRuPIR+TIyGZJSSfFxaRFxWJGRiLJyaXNzWpNTOnMzGnLy2hJSKTGReLKyqjPTu1NzarMS+jLSyfKyibJySXIyGVCQeDLSytPT29Ozu7OTi5NTS1KyurJSSjGxqVFxaXLS2tKSebOzuzLSufJSOXExGLGRiTExONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwGCgGhkhkQDBoEpLKQoBACAyOUID1qTVwoQGvMPxNFgVjAxp6QCQUicSCwVgkG44HJCKRRCYUCAxIFRYXhxgZGhYbHINEHR4fGCAhIiMkFSVKJicoKSoFKwMsLZtDLison6GjLA92qCueoAUvpC2xQhWqrLYDErmEMDEXlDIwMxAHukI0NS01EzY2NAmPAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actredo16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxOHBxSHBRGHKzCtNzu3MTSzBQ2FLzSxIzCjCSKFCyeHDzCLAxGHAwuFDSCNBxKLES+NHSmfBQ6FBxWJAQaDAQWFAw+HDSyLJzOnISyjMTexAQOBAwmDAw+FMzizAQODDymNKzWrAQKDAwaDEy6TFTGTFSyXDyKTAQCBAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ2QIBwSCwaj0hAICBICgcDQsEgaB4PiIRiW0AEiE3sdsFgcK2CBsCheEAcjgYjoigwJRM2pUK0XDAKGRobDRwKHUcegAsfExUdIEcVCgshImojfEUkCiUmJygHACkqHEQpqKkpogAgK5FOQywtprFDKRwptrZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actreload16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCRaJBxWJBxOHBRGBCxeLLTatCSKFCymJBQ6BAwmBNzu3AQCBAQOBCRSJKzWrGy+ZDy+NBxSHFSmTBxWHLTWtCyaHCSSFCx6PETKNBQ+FBwaHCRKJMTixLy6vExOTKyqrFxaXDQyNDw+PBQSFHx6fCwuLJyenDQ2NISChLSytJSSlFxeXAwODCQmJBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIBQGBAMBALCcCksGA4IQkJBUDIDC6gVwGhshY5HlMn9DiCRL1MyYE8iiapaSKlALBdMRiPckDkdeXt9HgxkGhWDXB4fH4ZMGnxcICEiI45kQiQkDCUmJZskmUIiJyiPQgyoQwwpH35LqqgMKiEjq5obqh8rLCMtowAkLqovuH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actrun16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/ISChKSipMTCxLS2tLy+vMzOzMTGxNTS1AAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARlEMgJQqDYyiDGrR8oWJxnCcQXDMU4GEYqFN4UEHB+FEhtv7EBIYEohkjBkwJBqggEMB+ncHhaBsDUZmbAXq67EecQ02x2CMWzkAs504gCO3qcDZjkl11FMJVIN0cqHSpuGYYSfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actstop16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/Gw6NGQuLHQ6NGQmJFweHFQaFPTm5PTa3PTW1Oy+vOS6tNSinKReVDQWFPz+/Nx6fNyCfNyGhNR+dMxybMRiXLxGRIwWFNx2dNx+fNx2bMxuZLQWFBwWFPTu7Pzy9NRqZNRuZMRSVLwmJGwWFNR2dMQiHPTKxMxmXMQyLMxmZNx6dMxiXMRSRMRaVKxybMxaVEQWFMQuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaaQIAQEBAMCAWDYcgkHhAJxYLRcDQBggckIplQKpaLdRh4YDIaSWa94Vw6woAHgv6AMKGPaMQhwQMJJRkfhHmEJhdvRCcgGSCEkCgpbnAECiorGYYfLCItlAAFCygQj5AfbYlwBQwVE5AukG6KBi8tMC0fLi0pHxyzcAAxFxwmMny/wEwOxMm/qlcdJCSJ1H5XQh3a28HY3kx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actundo16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxSHBxOHMTSzNzu3KzCtBRGHCSKFIzCjLzSxBQ2FAxGHDzCLCyeHBQ+FHSmfAwuFBxKLDSCNMzizISyjJzOnDSyLAw+FAQSDAQeDBxWJAwmDAQOBKzWrDymNAQaDAQODAwaDDyKTFSyXFTGTEy6TAQCBAQKDAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ1QIBwSCwaj0hiQCBICpcDQsFgGAaIguhhi0gohIsrQEDYMhiNrRfgeAQC5fMCAolIDhD2hFI5WC4YRBkaBxsOE2l/RxsHHA4dHmkfRyAbIQ4iIyQlB5NFGCAACiakpSZEJyinTgAcKSesACorgU4mJ6uxR35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actunlock16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJExGHEQ+FCQiDBwaDBweDGxiLHxyNHRuPIR+RIyGZJSSfFxaRGxmLJyaXNzWpNTOnMzGnMS+jJSKTGReLKyqjPTu1NzarLSufKyibJySXIyGVGxiNFxaXLSytPT29Ozu7OTi5NTS1KyurGxqVCQeDJSSjLS2tNTW1KSmpGRiLKSebOzuzJSOXExONExGLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaVQIBwOAwYA8SkMCAYOAnKYiFAIAQGyOgVCggYuEovVxztMpdnwAGRSCgUCwOjIeQ6HpCIZDKRUNYMRBUWF4UYGRoWGxyBRR0eHxgaICEiIyR0QyUmJygpKgUrAxMsLUQlKyieoKIuEAunK52fBS8DLiywQySpnjC1Mbi6QjIzNBeSIBY1EQfDQgosLAEUNjY3Co1DfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appbook16:app app16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBDyKhDSChGSinFSWlEySjCx+fHSqrGSipESOjCR6dKTGxISytIy6vFSalBxydAQeHHyurAxubARmZCR+fBx2dDyKjPz+/MzKzLTS1IyOjAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOZGmKQXCWqTCoa0oUxnDAZIrsSaEMCxwgwGggHI3E47eA4AKRogQxcy0mFFhgEW3MCoOKBZsdUrhFxSUMyT7P3bAlhcnk4BoHvb4RBuABGHwpJn+BGX1CLAGJKzmKjpF+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appbookopen16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExCNGSenHRmVCwqJPTq1GxeTHRqXPz+/DwyJPTq3Ny+lOzexPzy5HRuVFSWlNzClPTexIR2ZOzevPz29AxqbPz6/IR+ZDyKjPTy5IyCZPz27ESOjJySfDSGhPTm1PTizJSKdDSChNzWxMS2nIR6ZKyijNzOrOzWtIx+bLSifNTGrMy6lIx+ZCRWRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQEAAQCwWBYJiYEAoGAFIw0E5QCScAIVikUgQqNargtFwdB9KSDhxiEjMiUlgHlB3E48IpdKdLCxzEAQJFxUTblwJGH9zGQgVGhUbbhxdG4wBHQQaCwaTb10emB8EBiAhInp8CSKYIw8kDRSfDiUmJ4xCIxMoKSoRJRMrJyy5uhMtLisTLCQkC8bHGBMj1daARgEjLyN03kPZc09FfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appboxes16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBATCBMT+/AT+/ASChATCxPz+xPz+BISCBMTCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrwYBCFqvhs3DNYXjChRlWBRjIRqGN4UuEUczMZxsDeXykdEsDQVVSLhQxhBCkVlmXA+KVHFYhFYOoHbMGN6pTQaW8YYiQmcG+q16a0+Zipw+4e9B/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-appbox16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xISCBMTCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECKoR6ys2IVqokF08yMTA1gwkYX5WQK5ma4VceTYPxXnBWdtY6+0834/Bowgzm6APWRQcH4TiMhPK2WYRiZWW7XK7/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appbrowser16:app app16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxONCROfCRKfKx6LNy+bNTOpGSS1DRupAwyXBRSnPTSjPTqvOzqzMzSvHSSlKy6ZDxutAxCpBQ2XBxepLTKvPzqzPzy5OTShLS2dLSqRFR2jBRerBQ+jOTixOzetNS2XHx6XDR2tCRexBwyTDyKzOTavPzq1OzKdCx23BRKtCQ6VCQmHFSa7IyirOzSnGSGpIR+bFSO1DyK7DR+5CRixBw2VDQuHFye7IS27NzGXISuhEyS5DR25BRWxBQ+lBQyXCQqPCxSfGyu7GyerKy2ZFR+rERqfCRmxBROtBQ+fBwuTBwmNDSW9JyabLyqRIx+TExSXBQ6bAQCBBQ6ZBxapDR+zBxq3LyaLJySRHxqPGxeNBxGbCRmrHRyRERONDRKNDQ2JCQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeygACCg4SFhgABAQIDh4MBBAUGBwgDCYcKCwwNDg8QERIThRQVFhcNGBkaGxwdoYMDHhcXHxggISIjEiSvJSYXJwsoISkpIyorLIIDLS4WLzAxMjM0NSo2N8o4OS46OzwzPSk+P0BBgkI8Q0NERUZHCEhJSktMgwk4Qy1NTk9QUVJLphCiUsWKlStYsmjZQiJgIS4KuijQ4iXAFxYCDVFJwGUFmDBhMjYSw0KMyEYoBfkJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appcalc16:app app16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChPz+/AQCBCH5BAEAAAAALAAAAAAQABAAAAI4hI9pwe0Ogpi00hHF2LzzzFlTsIHD45SSx6oCeW4wjK2tl83y7t64pIsJaxrfh2bEAJIlhRPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appclock16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAALy+vAQCBPwCBMQCBIQCBISChPz+/MTCxCH5BAAAAAAALAAAAAAQABAAAANbCLHcrSLKOZcYmDSCsR1aUABAsXDDJwJGa5SBFwgaWxbCG3CWaBwG3C8Y67FawpYiNQscg65fsVkYuoAmJs1pBR522lQB6ILJLqHRwQQOZzYdZnw+dzruDIA/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appdate16:app app16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPzerPyqXMRaBIQCBISChPz+/KSipMTCxPz+BMTCBPwCBPz+xPzCxMQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVxICCOQGCeJjkGwkC8RFEEavkax2G8dB0QuRyhhzoBg8MSYsncJXKJZIDZHCoWP1ogGIwGrtnSgUFmHLyNRHhrdpjRamnO/SYkromHdnxwnwkKVxByZW8DgQsQM2JcfwZXO0MBCZSVBgMuLzJaRZ0pfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-apppencil16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/IQCBMQCBPzCxAQCBPz+/MTCxISChDQyNKSipEQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARDEMhJZRBD1H2z3lMnjKCFjUJQimOgcmcbELCXzjXq0hV785WCQYcDFQjDXeloMByKG6YTAdwIDAlqSZJSVFeKLcUfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appsheet16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+/Pz+/KSipPz+BAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANFCBDc7iqIKUW98WkWpx1DAIphR41ouWya+YVpoBAaCKtMoRfsyue8WGC3YxBii5+RtiEWmASFdDVs6GRTKfCa7UK6AH8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-apptool16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChGRmZMTCxKSipLS2tHx6fPz+/OTm5FxaXOzu7DQyNMzOzAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhAq7wYBDECKVSGBcbRfcEYauSZXgFCrEEXgDCSeIEyzKSXZoBYVCoJVIqBGByKu0Cy8QHxmgNngWCkGgqsGWFseu6oMApoXHAWhWnKrv0UqeYDe0YO10/6fhJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-apptools16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExKTERCRAQCBOzu7Nze3MzKzLy+vCxqZBQ2NJyanKyqrGRiZDRydKza3FRWVPT29LSytDw6PMTm5EySjCxaXGRaJFSanCRSVGxqbPTmvMSqVJTW1GSurHS6vOzq7KSipISChFRKHJSGNPz23GxKFBQ6PKyurCwqLMyufJx2RAQGBJSWlEwyDIRiLNy+lLSKVDwmDJRuNOTOrLyabGRCFDx2dKSCVOzWtHzCxOTGnNSyhAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQIBwCAgIBAOiUiggFAyHASKxDAwUC8Zg0HAglA9IZPGQABoTSqJCFTIOEIsFgHBcEhhHUpKJFCwaGxYYHB0VEx4IEh8gIQwiIyQbJRMcHokmEicfDygAkCkqJQgIGG0rLElCLS4vMCWqQwMCQg0UMTIzNDVLQjaIGDE3ODQlS785CEkxKjowvEOHybG4O6JDCdNKuDUxRAmxRDHeveUAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appuser16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxISChMT+/ATCxASChFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMg5gw00yyDGIAR1YUDggeFWFIZhnSBZrsZxdIOFEGTA2oeBAHeyuGwvzxBlYdUOLROMFzDQntJPrNoqAKUBaqnV+k57ZORruykHDj2LqIzUVKp1u0iuB/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-appusers16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxISChAT+BMRaBPyqXARCBPz+/FxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEIRJa5Ui673nsGAgeKE1Bl9AUEXbiqTlFlZaGUZoszm4BzhDAVf5BYbAXI+TAR6CS2ZGSZSEiIIqYIsSIEaJ7GRrlY7J1lKA7I8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-appwp16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBKSinJyOfPz27Pzy7AwKDExOTJyWlERCRKSelPz69LyyrKymnPz+/MS2fDQyJAQCBOTazLSiXOzivMS2jKSSVOzmxPz25NzSpPTu5KyebOzixNTGjOTWpMSydMSybCwqFGReVKyaXNzSnGxeNJSCVMS2nPz23MSuZIR+bJyShLyqnOTOtGxiXIR6XOTSvIx6RMSubIyCdKSalMS6pOTWxMzKvKSabJyKTOzezHxuPGRmZKyurMTCvPTq3AAAACH5BAEAAAAALAAAAAAQABAAAAajQIBwCAgIiEhiYEA4FgwHRDKhIBAWz4OhgGQ0FAPHA7qFEBONb0Qy0ULeQ2+aUrFcMI+3GYBOZzQbHB0eHyAhIQByDREiEwMjFRIkJQImAgJ+jScjHigkKSorLC0AKg2NFSMoki4qCy+IQgITKDAxkjIzNDWkQxQoJaskMgk2Eb1DNzgoOCoHDDY5yEIwJToAOzw9ET7TQiREAhkZ3kmy5QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cal1day16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANOCLrMEUDIOUS9AFLLhx8LIRZjKYZmMRCkaChFLHty/AIiS3y6q+QtT49wq8VotRtQJGwRf6Zmrlj7DJLQXsupTJmeEIN4TB5nII20wp8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-cal5days16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANMCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiIdMmcec7jy53q81qP9OO5VMAj8RXTFWzOZW95HDLdEEM4LA4nIE0zgp/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cal7days16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANPCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiwcp0fucsj873qvGMv5Jw2FIACUsW4WakGW1O046I05qmGYBhTC6TM5CGWuFPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calappointment16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxPz+BISCBISChKSipAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARbEMhJaQhA6D1E/wDGeeRgDhOhFoTBEi+REgdrIHScSEVvAD9Xr7cDqGSGpFEnQSqTv2NxCFQOiU1VEAiTZmstHFg1vQKuw+LxxfYaV/AuOQRI2O/4ewhT6Uv8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calbell16:cal cal16 16:photo:16 16:R0lGODlhDwAOAIIAAPwCBISCBPz+BIQCBMTCxISChPz+/AQCBCH5BAEAAAAALAAAAAAPAA4AAAM+CLrR+zCIAWsgLVRGRBhOVQiG94WPVAbHaZHYAWqRYLbge88RsbInGuBCEhRYrZYm4xk4nYdoKzKIbiKHawIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-callist16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/KSipPzerMRaBEQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARDEMhJaQhA6D1E/wDGeeRgDhOhruyatjBRSIRxxOsMEAdC0BUZDcfSEYvDo3Bn++2Cxt7RqFxWhZiCdsvdhjCVsMQfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calmonth16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANSCLrMEUDIOUS9AFLLhx8LIRZjKYbiRxLFIBpK0Q6z7MkwkJIe8b0KEeuWchFysuStVsjtfMbeMQitWpG25YfmNK1WU53XNIUYzug0OgNpuBX+BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-caltoday16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxKSipPyCBMRaBPyqXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARTEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyIQhFfiBIAfuFzaAioBIJBCummRYPCaDPh3vhwsOZdihNfa8Ub/AJXemFZPPNBvGwG672yFMZS7xRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-caltodo16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBAT+BAQC/AQCjPz+/MTCxPzCxKSipPwCBMQCBIQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARaEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyMYhFXiuFwZiA6qZYbbqJX5BIw2RAPxwAAWCyWMCCsiXFGEEErKz6LQZfOqiTR1YJiGq1rFyyHmo2+/1EKbCl/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connecting16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZbihUiz60FPnfaA0iBpBVGdHEYWxToEoSHBRHHM9AgSEQRcj+AYkYAJxIPKQFUJiOdTJQFIDU6dYzKKFhTCM+E5g4mXaDAyrlogEG+DGTecA7wsP8EcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connectno16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBAQCBERCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEMhJq704axBEHoPUEdhQGMNYFuwxkKInDYjBniEnwMCQIIebSzXx/WwsFK+YMABZikWuYlrUCtZpEYv4WRPaHhb064YB41kCfJFSQBh/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-connectyes16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipDQyNMTCxMTGxISChFxaXMzGzAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZxCjgsAtDtUlCOA1gJQ4kl/IDatAoF7xxkS6GgEBr6jAobCyBX42SQBxMOx6A8MhiGASR8YDgrYsNEeJ0zaEGZY7uoH2oB6nOUwtbdLaVOeTUwo/8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-devcdmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-devcdunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-devdiskmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKROzSrOzKpOTGnLSafLySZKxuLMSOVPTWvPzixLSehNyibOzOrGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTOpHxOJKyKXFw+HKSipISChMTCxFxaXIRiPNSWXExOTOS2hLR+PLRyLPTWtMyOTASCBARCBPz+/DTSJIyKjIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwrA3HQ7scQAqFAcEQOUi0zAkFUSFYLghMBloUCDQNGxwdHhwHekcfICEhICIfIxkLJBABJUYCICABIhAOBiYnKJaXmH4CGSkYCCqkSAEfTKenrkOwsrQll0IrS7G5uwArLLaxLbXCLsTFLyDBKy4wZEVHvCwsRn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-devdiskunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKRPTWtOzKpOTGnLSafLySZKxuLMSOVOzOrPzm1LSehNyibGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTWvHxOJKyKXFw+HPTOpKSipISChMTCxFxaXIRiPHxaNLRyLNSWXExOTPzixOS2hLR+PMyOTPz+/IyKjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwGgiD46FdDiCFwoDQAEe0TMkEQSFULIcLBloUCDIaDRscHRsNHhhHHyAhISAiHyMkJSYQASdGAiAgASIQKA0pKguXmJl+AiQGFwgrpUgBH0yoqK9DsbO1J5hbsrq8SrgstlJFHy0gwMVFR1J+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-devfloppymount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVrICCOQBCQKBkIw5mqLFG47zoQ+FwbN57TosDhgPD5dMEEIqE04kwlBWKBUEiNVYFpyqAyGEUCgqEtERiNNMLhQKzLQYJg7n7Y4aMAwbCUPvAQeWNgfzQQETAIhSMQEogwgBITQEGGEREmfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-devfloppyunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVCH5BAEAAAAALAAAAAAQABAAAARcEMgJQqCYBjFu1hxReN82EOhYGieaklJwHIjrqnGCJLqNWhUFYoFQCG1FgWXIIDIYNQKCoawQGI0swuFAbKsxgmDsfZjBkwDBsNM90Jot9A3DbBD0Dwiur9QnfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-devnetwork16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBISChPz+/Nza3ARaZESanCyKlARudARGTLy+vNzq7ARmbMTCxARufAROVMzOzKSipARyfOzq7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVmICAGZFmKQiACweCSBImq41AYB5IodLq2hwWO0ejRWDac48Gb/QKNqNRoqspmrVcAUuIJBANS8sBIFCORUgooPEh4J8B67NgdsVBp9C5XWfl9LRMTCyReX19hARNojWlWLH+AAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-devpc16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBISChHx+fPz+/AQCBAQC/AT+/AQCxAQChAT+BLy+vAR+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEIAgqK1YzsG754QUDERpmkEpkkXrtoK6EcVgHIibhnNx564Yb0TDvQq7FQ34EiqPOhnREqhWSUPsyZSQAbbg7GcMEgwUiYVivTa1R+y4XEGoWO/4AMAfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-devscanner16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MT+/ASChARCRATCxMTCxFxaXKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJgqWBVivEldkUdKSXhVjZfenommglDERh3Tc4E4ZRHAGgkEPr9X6H5AHBERSMRyWzkug8jQXFEhWoOo8dRYxqLXSmGjIJnVaz29Q3fAP3RwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-devscreen16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXFRSVPz+/PT29OTm5OTi5DQyNDw+PERGRExKTHx+fISChIyKjHRydFxeXDQ2NCQmJBQSFAQCBERCRMTGxHR2dGRiZExOTDw6PCQiJAwODCwuLFRWVOzu7BweHAwKDCwqLHx6fBQWFGxqbGRmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIBwSCwKAwKkMslEAgSDqDRKqBYKhkNgcDggEorkMrDQchkNhuOhgEQkk0l5S2lUGpYLJqPZTAwMHB0DCmhqAW0Rfh5zAxgOkBcCFAcfIBMECxwBBAEPFw8dChkhcBMDDAcdnQqtFKSWcQMimx4dGRkQBxGxsg6bBQEawx8jl3GnJFoFHRNXVVNRJYIFDAsL1tgiDiQXFx0HABwcXeQH5OjkRutEfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-devspeaker16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXAT+/DQyNATCxMTCxPz+/AQCBKSipASChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgJQqCXziDG2JoUEENhZBkmHIWJVptAmqcIW/Js1MiF56TBzkckAAcHoa9nMRKeA4TyJk0knsHhTeK5khBaH2VwLYVh40TJhQ6RzeIQV32Quz8hfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editcopy16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXPwCBNze3GxubERCRPz+/Pz29Pzy5OTe3LS2tAQCBPTq3PTizLyulKyqrOzexLymhLy+vPTy9OzWvLyifMTCxHRydOzSrLyihPz6/OTKpLyabOzu7OTm5MS2nMSqjKSipDQyNJyenLSytOTi5NTS1JyanNTW1JSWlLy6vKyurAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAaUQIBwCAgYj0eAYLkcEJBIZWFaGBie0ICUOnBiowKq4YBIKIbJcGG8YDQUDoHTKGU/HhBFpHrVIiQHbQ8TFAoVBRZeSoEIgxcYhhkSAmZKghcXGht6EhwdDmcRHh4NHxgbmwkcCwIgZwqwsbAhCR0CCiIKWQAOCQkjJAolJrpQShK2wicoxVEJKSMqDiAizLuysiF+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editcut16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIwhI9pwaHrGFRBNDdPlYB3bWHQ1YXPtYln+iCpmqCDp6El7Ylsp6ssR1uYSKuW0V8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-editdelete16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPT29GxubMzOzDQyNIyKjHRydERCROTi3IyKhPz29Ox6bPzCxPzy7PTm3NS6rIQCBMxCNPTq3PTi1PTezMyynPTm1PTaxOzWvMyulOzGrMymhPTq5OzOtNTKxNTOzNTCtNS+rMSehAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaKQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhSEQkFgrBAcr1URiPhKAsDD3QB8RhA3FM0IlLHnyUTVBMSFBUWfl0XGBMTGBcZGodmcQWKjpAbHIgIBY2LHRoempOdjooTGx8giIOPFYofISJ+DyMXI6AfFySyfiUmJSUnKBYcICIpfgELzM3OZX5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edit16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaVMR+RPzKjNze3AQCBMR6RPzGjPyODPz+/MzOzPyKDPyKBPz29OTWzPyGDPyGBOx6BOza1OR2BKROBNSOXKRKBBwOBOzu7PTWxPzizOySZPyCDFxaXOy2lNRyRMxmJCQOBPTm1OzStPTKrMR+XIRWLFxGNCQSBDQyNIRSNDQuJERGRLyqlNzSvIx6ZKRuVEw6LLSyrLymhKSShBwaFFROTJyWjMS+vNzW1OTazNzKrHRqXOzezOTOpPTq3OzWvOTStLyedMS+rLy2pMSynMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAewgAAAAYSFhoQCA4IBBI2OjgUGBwiLBAmXlpcKkgsMlZcJBA0JDpIPEBGVjwkSBgOnExSfmBIVBxAMExYXswkYGRobHLq8gh2PHhoeHyAWIYKzIiMkJSYnKCnQg5YNHtQqKywtK9qMBC4vMDEBMjIz2dCMDTQ1Njc4OToz5PEEOzw3ZPToMcLHO23HfogQ0QMIkCA+hPBbhAPHECJFjMyYIUQIvEUpUqwQOXKkSEF+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editpaste16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQiFHRqNIx+LFxSBDw6PKSaRPz+/NTOjKyiZDw+POTe3AQCBIR2HPT23Ly2dIR2FMTCxLS2tCQmJKSipExGLHx+fHR2dJyenJyanJSSlERCRGRmZNTW1ERGRNze3GxubBweHMzOzJSWlIyOjHRydPz29MzKzIyKjPTq3Ly2rLy+vISGhPzy5LymhISChPTizOzWvKyurPTexOzSrDQyNHx6fCwuLGxqbOzKpMSabAQGBMS2nLyulMSidAAAACH5BAEAAAAALAAAAAAQABAAAAa7QIBQGBAMCMMkoMAsGA6IBKFZECoWDEbDgXgYIIRIRDJZMigUMKHCrlgul7KCgcloNJu8fsMpFzoZgRoeHx0fHwsgGyEACiIjIxokhAeVByUmG0snkpIbC5YHF4obBREkJCgon5YmKQsqDAUrqiwsrAcmLSkpLrISLC/CrCYOKTAxvgUywhYvGx+6xzM0vjUSNhdvn7zIMdUMNxw4IByKH8fINDk6DABZWTsbYzw9Li4+7UoAHvD+4X6CAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editshred16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbGxubMzOzPz69DQyNIyKjERCRPz29PT29OTi3IyKhPz27PTu5PTy5Pz6/Pzy7PTq3OzexLyqlPTm1PTizOzavLyqjOzWvOzaxLyifOzizOTOpAQCBOzezAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaEQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhWEQkFYYHkeqkMxKFBFpq9jgdkEGlPqwrJhCIY2N8FFRYUFxcYGX9dgRKEGhiHiYEOhBcbGBwdiQEOARcBGwEeAZllAgEUnQEfoQEgmp4hrCKtrwEYsrRlTiMBJAG8syN/IyMAxMXHSH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edittrash16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipFxaXPz+/MTCxISChDQyNCH5BAEAAAAALAAAAAAQABAAAANQCKrRsZA5EYZ7K5BdugkdlQVCsRHdoGLMRwqw8UWvIKvGwTICQdmGgY7W+92GEJKPdNwBlMYgMlNkSp3QgOxKXAKFWE0UHHlObI3yyFH2JwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-fileclose16:file file16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCQiJBwaHAQCBDQyNDw6PFxaXFRSVERGRCwqLAwODGRiZHx6fPz+/GxqbAwKDCQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVaICCOZGmeqBgEwjCkRGEcSKK4JrEcBrMgAdeLVDg0GguGsYEbBQyGYyN6FDoPDIf0+LCKBIgetQERDgGDBGIpNY8GioAU0m6KXFw883w3+/l9f4AkfimGIn4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-filedocument16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJSWjPz+/Ozq7GxqbJyanPT29HRydMzOzDQyNIyKjERCROTi3Pz69PTy7Pzy7PTu5Ozm3LyqlJyWlJSSjJSOhOzi1LyulPz27PTq3PTm1OzezLyqjIyKhJSKfOzaxPz29OzizLyidIyGdIyCdOTOpLymhOzavOTStMTCtMS+rMS6pMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaQQIAQECgajcNkQMBkDgKEQFK4LFgLhkMBIVUKroWEYlEgMLxbBKLQUBwc52HgAQ4LBo049atWQyIPA3pEdFcQEhMUFYNVagQWFxgZGoxfYRsTHB0eH5UJCJAYICEinUoPIxIcHCQkIiIllQYEGCEhJicoKYwPmiQeKisrKLFKLCwtLi8wHyUlMYwM0tPUDH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-filefind16:file file16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBCQmJDw+PBQSFAQCBMza3NTm5MTW1HyChOT29Ozq7MTq7Kze5Kzm7Oz6/NTy9Iza5GzGzKzS1Nzy9Nz29Kzq9HTGzHTK1Lza3AwKDLzu9JTi7HTW5GTCzITO1Mzq7Hza5FTK1ESyvHzKzKzW3DQyNDyqtDw6PIzW5HzGzAT+/Dw+RKyurNTOzMTGxMS+tJSGdATCxHRydLSqpLymnLSijBweHERCRNze3Pz69PTy9Oze1OTSxOTGrMSqlLy+vPTu5OzSvMymjNTGvNS+tMy2pMyunMSefAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe4gACCAAECA4OIiAIEBQYHBAKJgwIICQoLDA0IkZIECQ4PCxARCwSSAxITFA8VEBYXGBmJAQYLGhUbHB0eH7KIGRIMEBAgISIjJKaIJQQLFxERIialkieUGigpKRoIBCqJKyyLBwvJAioEyoICLS4v6QQwMQQyLuqLli8zNDU2BCf1lN3AkUPHDh49fAQAAEnGD1MCCALZEaSHkIUMBQS8wWMIkSJGhBzBmFEGgRsBUqpMiSgdAD+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-filenew16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz6/GxubNTKxDQyNIyKhHRydERCROTi3PT29Pz29Pzy7PTq3My2pPzu5PTi1NS+rPTq5PTezMyynPTm1Pz69OzWvMyqjPTu5PTm3OzOtOzGrMSehNTCtNS+tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ/QAAgQCwWhUhhQMBkDgKEQFIpKFgLhgMiOl1eC4iEYrtIer+MxsFRRgYe3wLkMWC0qXE5/T6sfiMSExR8Z1YRFRMWF4RwYIcYFhkahH6AGBuRk2YCCBwSFZgdHR6UgB8gkR0hpJsSGCAZoiEiI4QKtyQlFBQeHrVmC8HCw21+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileopen16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBOSmZPzSnPzChPzGhPyuZEwyHExOTFROTFxaVFRSTMSGTPT29Ozu7Nze3NTS1MzKzMTGxLy6vLS2tLSytDQyNOTm5OTi5Ly+vKyqrKSmpIyOjLR+RNTW1MzOzJyenGxqZBweHKSinJSWlExKTMTCxKyurGxubBQSFAwKDJyanERCRERGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaRQIBwGCgGhkhkEWA8HpNPojFJFU6ryitTiw0IBgRBkxsYFAiGtDodDZwPCERCEV8sEk0CI9FoOB4BEBESExQVFgEEBw8PFxcYEBIZGhscCEwdCxAPGA8eHxkUGyAhIkwHEREQqxEZExUjJCVWCBAZJhEmGRUnoygpQioZGxsnxsQrHByzQiJxz3EsLSwWpkJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileprint16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRKNAQCBPz+/MTCxExKLPTq5Pz29Pz6/OzezPT29PTu7PTy7NzClOzm1PTu5LSabJyanPTm3FxaXOzCjOTKrOzi1OzaxOTSvJyenGRmZLyyTKSipDQyNERCROTi5Hx+fMzKzJSSlIyOjISChLS2tAT+BDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaYQIBwKAwIBMTkMDAYEApIpVBgOCAOg4RRGlAoEAuGIdGITgWOq4LxcCQgZkEkIHksHgYJOR6ZQCgVFhYJFxgTBVMZihoCfxUYDWUbUBGKGREcjBoQEB2TAB4CAx+Vl5WMhyACHiEhH6IfIiMktCQgE0cZJQStr6O2t6EARxO6vK6iEx4dZsMCxbsmBB4nzUTEutVSSUdmfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filesave16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBFRSVMTCxKyurPz+/JSWlFRWVJyenKSipJSSlOzu7ISChISGhIyOjHR2dJyanIyKjHx6fMzOzGRiZAQGBFxeXGRmZHRydGxqbAwODOTm5ExOTERGRExKTHx+fGxubNza3Dw+PDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaAQIAQECgOj0jBgFAoBpBHpaFAbRqRh0F1a30ClAhuNZHwZhViqgFhJizSjIZXQCAoHOKHYw5xRBiAElQTFAoVQgINFBYXGBkZFxYHGRqIDBQbmRwdHgKeH2YgHpmkIR0HAhFeTqSZIhwCFIdIrBsjAgcPXlBERZ4Gu7xCRZVDfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLARqnAQ+ZHR2dKyqrNTOzHx2fCQiJMTi9NTu9HzC3AxmnAQ+XPTm7Dy67DymzITC3IzG5AxypHRydKymrMzOzOzu7BweHByy9AyGtFyy1IzG3NTu/ARupFRSVByazBR6rAyGvFyuzJTK3MTm9BR+tAxWhHS61MTi7Pz+/IymvCxulBRelAx2rHS63Pz6/PTy9PTu9Nza3ISitBRupFSixNTS1CxqnDQyNMzGzOTi5MTCxMTGxGxubGxqbLy2vLSutGRiZLy6vLSytKyurDQuNFxaXKSipDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYHCImDBgkKCwwNBQIBBw4Bhw8QERITFJYEFQUFnoIPFhcYoRkaFBscHR4Ggh8gIRciEiMQJBkltCa6JyUoKSkXKhIrLCQYuQAPLS4TEyUhKb0qLzDVAjEFMjMuNBMoNcw21QY3ODkFOjs82RM1PfDzFRU3fOggcM7Fj2pAgggRokOHDx9DhhAZUqQaISBGhjwMEvEIkiIHEgUAkgSJkiNLmFSMJChAEydPGBSBwvJQgAc0/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folderhtml16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBERGRBQWFMzKzOzq7CwqLDw6NARqnAQ+XHR2dKyqrOTm5ExKTERCRHRydMTi7NTu9HS+1KSmpBweHDy67DyixHS61ITG3AxypByu7DxinBw+ZERmdIySjITC3ARypExOTDRurIR2RPTSdJyulEyGvBw+bFSyzJTK3LzKvPzivOTixNTChLSybGyCfCRSnBQqRASGtFyuzDw+PCRShPzy5OzerOTShKyaTEx6pCxerGRufBR+rOTezPTShNy6bER+1BxCfBQuRAxelFSixBw2VISq3GySrPTWlHyanIyitFSO3IymtCRujAxWhCRqlCQ6XGyWvNS2bFyGvDxuvCRSpLy+vMS+vGxqbFyO1GSi3EyO1FRaVCQuPLS2tDxyzKyWNFxaNCQyPGxubCxajERSVExKNJyenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfZgACCAAECg4eIAAMEBQICBomDBwgJCgsEDA0BDg8BhwYQERKUDxOYDAyeghQVFhehGBmVlwwOqxobHB0eH6EfIAkPIYIiIyQlJhsnKBcpvrYiKissLS4vMDEyFjOvNAA1LDY3ODk6Oyc8PTIyFzQ1Jj42P0A6QTtCQ0REIEUORkdIkihZwsSekBhNnDyBciCKiSNSplDRUcWKkRhXCGDJYgiGli1cpuTocsILjytfFmRpACAGRTBhRogZgzHlAjKGWnIoY+bMgRgBDHRBo/LAIZoxuhwKatRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folderlocked16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQSFMzKzOTm5CwuLERCRARqnAQ+XHR2dKSmpOzm5GxqbCQiJMTi7NTu9HS+1HRydOTm1Ozq7Dy67DyixHS61ITC3AxypERGRBweHByu7ASGtFyy1DSOtDRmfExOTBSazBR+rCwqLAxWhAxelByGtDSaxAwODHy+1Dw+PPT29IyqvCxujOzu7NTW1Nza3ExGJJyebKyqfMTCpFRSPOTi5DQqHOTezDw2NMTGxKyqhMTGrGxmXDQ2NMTCxMTGpHx6bHx2bBQWFIyOXDQuDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQICBomDBwgJCgsEDAKFDQGHDg8QEZQSlxMUDJ2CDhUWF6AYGZWXFBqCGxwdFh4XGK8fIAohtiIIIx25EZwBDREHgiQjJSYmGScoKSoRKQ8rggIsDC0uJS4oGygoAyjdAAcsLxQUMDEyMzQ1EzapBy8MDDc36tFwgONFjlQ6dgCEEZBHDx8+ctRIRehHAyAwZASZIGRIEBoUBwUwIGMCiwFEaBQJichIjo9FZLBsacRIAB0A/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-foldernew16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBPz+hPz+BOSmZPzSnPzChFxaXMTCBPyuZPz+xPzGhEwyHExOTPz+/MSGTFROTPT29OTm5KyurDQyNNza3Ozq5Nze3LR+RLy+vJyenMzKzNTS1Ly6vJSWlFRSTMzOzMTGxLS2tKSmpGxubBQSFAwKDKSinJyanIyOjCQiJERCRERGRBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaNQIBwSCwaj8ikcokMCIqBaEDoBAQG1meAUDAQpIcBQoy1dg2JdBqhECgQ1IWB0WgcBIOBwIHXBwwPEBEREhIBbG4IExR/DBUVFhIXV2NjDVYYDY8SFU4ZVxpVAQwbGxynGxkdTh6XVh8gGSGzGSITIxokJUImGSMTwLcnKCkprgAqDSt1zCssKxQtQ35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folderopen16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOzi1Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fISCfMTCvAQ6XARqnJSKfIx6XPz6/MzKxJTa9Mzq9JzO5PTy7OzizJSOhIyCdOTi5Dy65FTC7HS2zMzm7OTSvNTCnIRyVNza3Dw+PASq5BSGrFyqzMyyjMzOzAR+zBRejBxqnBx+rHRmTPTy9IyqvDRylFxaXNze3DRujAQ2VLSyrDQ2NNTW1NTS1AQ6VJyenGxqbMTGxLy6vGRiZKyurKyqrKSmpDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBYwQnRESEREIoRMUE6IVChYGERcYGaoRGhsbHBQdHgu2HyAhGSK6qxsjJCUmJwARKCkpKsjKqislLNIRLS4vLykw2MkRMRAGhDIJMzTiLzDXETUQ0gAGCgU2HjM35N3AkYMdAB0EbCjcwcPCDBguevjIR0jHDwgWLACBECRIBB8GJekQMiRIjhxEIlBMFOBADR9FIhiJ5OnAEQB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailforward16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRydHxubHxmZGxiXHRmZFxOTFxGPFxKTPwCBLymlMy+pOze3PTq3PTu5Pzy7LSmnOTaxOzm5LyqlNzOtPz69Pz27MzCtLyqrPT27IRubPzuzNTGvNTCxLSelPz25Bw+ZFxKPPzy1Pz65LyupBxKdCxWfPTm1Pz23LyinBxGbGzO5DRafBxWfBxajCymxHTS5BxSdBxKbFTK3EzG1CSGvCyKvCSSxCSavGTO5GRaVPzqzFzK5EzG3BSCtAwiPGxaVPTivPzy3NzKpBxObCRefBxqlPTmzJR2bKyahAwyRPzmvOTOpKyObNS+nPz21AQOFKyOfPzuxAQCBGRORLSadPzyzLymjMy2lOzetDwuJFRCPEw6NEQ6LEQyLEQ6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAfhgAABAgIDBAQFBgcIBwmOCQIKCwwNDg8OEBESjY8CDBMUFRYVFxgZDJyOGhsPChwVHR4fFSAhjwkaIiMOJBQQDRUVJSa3GicoHw4pEA8SGSorLI8tLtQu19gqLzDECTEyMzQ14zY1Njc3ODkqCTo7MjIxNCs5PD03PjctPwlAQUIihhBpQbCIihtG+CUocASFkAhIkogQ8kFJwkcFlogIkoRJEydPnkBR6GiAxiQLgiiIIkXElFQJqESoMsRKkAhXqkhhApNKFSxZggTJ4nHIEJhaDhzYwoVLFy1avHyB6ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mailget16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAxKdBRSfCyGvFSm1BxKfCSWzCyWzBRCXCRKfBwuRAQGDDw6PHy23Cym1CSSxByCxBxunBQSFKyurMTCxExihNza3NTW1JSSlMzKzFxaXLS2tNze3KSipCQmJGxmbNTS1KSepLy2vISGhJSWlHx+fERGRPz6/IyKjDw+POzq7JyenMzOzKSmpCwuLDQyNIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQIBwGBAIAsOkUjAgFJRQQMHgjC4PBIEVgAh4D4aEYrGAMhINxwPyiCgYSsmEUmk82grLRZJkYCgXaAEKFxYZcEISGhsZFxwFeY0WHR5CDB8dGCAXG5shGxQicBIMpSMUGxgTGSQlpQwSJicnEwwdI7gdKAwTsykpKiobr8QMKxeHDBcsGRvOzxsT0i0uL9HSHdkT2ZkoMJXF4a8AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mail16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGxaVOTe1Oze3OTWxOTWvNzStNzKpEQ6LOTezPz+/Pzy7Pz69Pz27Pz25Pz21PzuzPzuxEQyLLyinLSmnPz67Pz23LSafKyObDwuJMzCtLSelPzy1My6nLymjNTCxLyqnPzq1LyihKyOfOzavOzetEQ6NPTq3NzOtLymnNTGxJR2bOTOpPTivNTGvLymlKSShKyahEw+NOTe3PTm1Pzu1Pzy3FRCPPz65LSadFxGPOzm3PzqzPTmzPzmvEw6NCH5BAEAAAAALAAAAAAQABAAAAaqQIBwSCwaj8ikMhloOp/QpmAgqAoIhELBUDgcEIGEYrFgNBoLx+IBiRwkgQnFoWAwKhWLhX3BZAILGhsCDXgODhwdGB5vgAofICBlDiEiIx4kJSYBJ2UoEykqHSMrLC0nLWAnFS4UCycvMAcEMR0RLTIBMwaSahw0NTYtFwclNwEdLws4eoc2DxwQOR06ASk7PBAhIRE9Pj0tLSUY1T8I5gjn6Qgy7D8SfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailreplyall16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBLymlMy6pOTa1PTq3PTu5Pz27Dw+POzi3PTm1OTWvPz25FRSVERCRLympPzuzPTu7NTGvFxaXKSmpPzu1Pz65Hx6fHxqZPzq1Pz23HR2dBw+ZHx+fISChJSWlDQmJHRydCxWfBxGbJyenExKTHRiXPzqzPzy3CQmJDRafGTO5ExOTERKTGxWVCRSfHTS5CymxBxajBxWfPTmvPzy1CyixCSaxCySxDSaxDSWxDSSvDyaxGS21PTmzPz21AwiPBRejCSavByGtCSezEzG3FzK5FzG3GzO5FTK3CQ2bPTixBxqlCRefBxSdBxSfBx2nCQ+dHxmXPzmvLSafAwmRAwyRPzyzDw6POzavNzKpAQOFPzuxBwWTBw2ZGRORLyWdMy2lOzetPTivAQCBKyObOTOpAweNBwWVEQyLEw2LEQ2LDwuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAf4gAABAgMEBQUGBwgJCguOCwEMDQ4PEBESDA4TjY8DFAwVERYXGBkRm4+QGhsMHB0eGB8bDpyOARogEBceIRgXv8COIiMkGB4lJSYnIcwoKb/DGyoXKywtKS4pHinMLzAxJDIzNDUtNjcv6B0hLzgfMh85OjstPDw99zwd7T4/LTVAgggZQqSIECNHevSAgSSJkiVMmjh5AiWKlClAiFARUeVHFSVWmLS40gNLlh5agGzh0kWDlwZfrIDREKaCAjEqrFA5MMYLmTAxlJTxYoZMozNozqRRs4ZNmy5s3LwhA0dBnDNn5MxBoAABnTp17IitowDrmQV+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailreply16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTEw+NFxKTFxGPPwCBLymnMy6pOTa1PTm1Pzy7LymlOzi3HxqZOTWvPz69Pz25My+tLympFRGRHxuZPzu1LymjNTGvNTCxBw+ZPz23PzuzPz65PTu5NzOtCxWfBxKbPzq1DRafGTO5BxGbPzy9HTS5CymxBxajHRiXPzqzCyixCSaxCySxDSaxDSSvGS21GxWVAwmRBRejCSavByGtCSezEzG3FzK5FzG3CQ2bPzuxAwiPBxqlBxKdCRefBxWfBxSdBxSfBx2nCQ+dPzy1CRqlAwyRDQmJPTmvPTixLSafOTOpAQOFPz21BwWTBw2ZPzmvNS6nPTivAQCBAweNBwWVNzKpPzyzLyihGRORLyWdMy2lOzetKyObEQyLEw6NEw2LDwuJEQ2LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfqgAABAgMEBQUGBwgJCguOCwEMDQ4PEJYRDhKNjxMPDBQVFhAXGBUSGY8LGhsQHB0VHh8gFQ6bjgEhIiMMJCUmFbS2CwMnG6IoKSorI7WpEycWFiUsLSou1yXXji8wFiopMTIzNDUz4zbZNxsbODk6Ozw9Pj8pPzEzQDdB60JDOkRFjBw5giRJDCWdlmxwIIRJExAWKDRyMgTIiydLoESRImQKlSUSF1SxUoXAlSBRsGSJoCVICIlbqlThcoBClC5eYFD4EiVIFwUyqywAE0ZMlqNjpJDpIkUBl0dlFChAYOZMmTJoyqQR5icQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mailsend16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBHxqZLyqlMy6pOze3PTq3PTu5Pz27Pzy7LyinOTaxOzi3Ozq3LymlOTOtPz69Pzy5My+tLympPzqzNTGvLSelPzy3BxGbBQ6VPzuzPz65LyupNzOtPz+/GzO5BRejPzq1Pz23LymjHTS5CyixCSavBxqlPz25LymnGTO5CymxCSaxByGtHRiXPzy1CySxCSezGxWVPzuxKyOhMy6nDSaxEzG3PTivNzKpKyOfPzu1FzK5PTmzJR2ZLyihLSWfKyObOzmzPzmvDyaxOzavLSafGRORMy2lOzetDwuJEw6NEw2LEQyLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfUgAABAgMEBQUGBwgJCguOCwwNDg8QERITFBUWjY8DFxgZGhsaHB0aD5yODB4TGB+kICEaIiOPCwEkJRcmJyYPKCIpKrWqKywTmC0SIi4vMDHEDCsyMg8zEyI0NTY3z7U4Hhs5Mx+0IyI6OyPrIzw9Gys+PxIy2EBBxAs8Qjk5Q0RFWFxAZySfgSMsilRAkiRECHQ08hHgJ0TJkCU/mECU2ISEkowUlpAQ4QTfowNPoAzJIeRJCyjm8kVRIkWIzSkXhwxJtYAKgp9VrFi5QoWKFZ5+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav1downarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PUZi0zmTtypflV0VdRJbm6fgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-nav1leftarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAP///wAAACH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxqdwoNGTmgvy9px/IEWBWRkKZ2oWrKu4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav1rightarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxCtwoNHTmpvy3rxnnwQh1mUI52o6rCu6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav1uparrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PWwhxzmetzFpxnnxfRJbmufgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-nav2downarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+pq+EPXYpxUckoO3AjbF3dJwahllXe6AFgC8d+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav2leftarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pyxf5VohmSlsxmpjTzAHeN5ak6UHpqKRi2GpwvH3Q3eT64RcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav2rightarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pq5HOAjQyVnqfhHue7oAaKH5kiW0AmnLqaHomkj02g+e6XwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav2uparrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIghI+pyxfR0HsRzNnuXVqn3mVQZWFRyIDjp65Ga5Ly4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-navback16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRSdBRObCQ2TBxObISevAQCBNzu/BRGZPz6/FzC3Pz+/HTS5ByyzJze7Mzq9ITC3AQWLAyWvBSavFyuxAwaLAwSHBRafBSOrDzW5AyixCS61ETW3CzG1AQeLAweLAxefBSStEze7CSWtCyatBSCnBRWfAwmPBRWdByixAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZiQIBwSCwah4HjUTBQFgkFg3MoKBykU0QhoUAIAuAksbpgNByPxQMSGVsVDYlkIqdUiJYLJqORbDgcHRseRR8gISIaEyMkGCVYRBEmeyAnlgaQkSgpmU4RAZ1OKqFOpFNGfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-navdown16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObCRKZBxCXAwyTKTK3Ozy/NTm9GSivAQWHNzu/FzC3IzO5CySrAQOHAyuzETS3CSWtAyOtETa5Aw2VLze7ByWtBy61BSavAxWdBRCXAwqPAQCBDR+nKTe7FS+1Eze7ByixBRmjPz+/AyexAyixAQKFBRqjAQGDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZeQIBwSCwaj0hAYCkYEJLKguGASEADigWj4bgaHpBINykwSCYRa5HCFFQsF0xGo9lwhpSOwfORYC4gISJ3RAQdIyQYJSAlImNrh4uNJkl5CoKUUBQnjlB4KJ6hokN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-navforward16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAwyTBRObAw2VDR+nCRKZOzy/KTe7Pz+/KTK3Nzu/Lze7FS+1AyexAyuzBSavAyOtBSmzOTy/BRqjNTm9IzO5ETS3ETa5By61AyixByixBRmjAQGDBxCXGSivCySrCSWtBTC3AQOHAQWHAxWdEze7AQKFBRCXAwqPAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZjQIBwSCwahYGjUjBQGgWEpHNYMBCaT4G2UDggos+EwmBYMBpf6VBgYDgeEMgjIpmoAQVKxXLBPDIXGhscRB0eHyAgDSGBGyJFASMiIiMkJYImUwAnmJqbjp4AKCmhAKSlTn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-navhome16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tJRqRGQqBNy6pIyKjDwGBPTe1JSWlDQyNOTGrNRiBGwmBIRaLNymdLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbIiorLB4XEltDrhcaLS4vtbcJra8bMDHAGrcyrTMXHjA0NSypEsO6EzY3IzU4OdoTzK0BCAkDMgkIOjJlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-navup16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObAwSHBRSdISevBRWfAweLNzu/BSOrAQWLPz6/FzC3DzW5BxObHTS5ByyzAyixEze7BSStBRWdAyWvByixAQSHCQ2TAQCBBRGZJze7CS61BSavAxefMzq9ETW3CSWtAwmPPz+/CzG1ITC3FyuxBSCnAQeLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZfQIBwSCwaj8hhQJAkDggFQxMQIBwQhUSyqlgwsFpjg6BwPCARySSstC4eFAqEURlYhoMLBpPRUDYcHXt7RgUeFB8gIU0BIoiKjAcUIwiLSQUkJRsmGIwJJwmEU6OkfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-playeject16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+py+0R3IFQUtruXVqn3kkWyIARR4rqKvoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-playend16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+py8Eb3ENRggrxjRnrVIWcIoYd91FaenysMU6wTNeLXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-playpause16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+py+1vgoxzyUCxrZd18ClfmIyVyJ1lqkHuC0N+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-playstart16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pyxudwlNyguqkqRZh3h0gl43hpoElqlHt9UKw7NG27BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-playstop16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+1vgpySUWpvXXqrHmSaeJEYhKYq6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textblock16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py40Bo5SOzRvrwlgrfnkJOIkPaaaJXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textbold16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIihI+py70BowPQ1HZpwNv212Vg9IGHmIjoWa4ey5DSRNd+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-textbottom16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIVhI+py+0Po5y0hYtzrkB7zH0fN/kFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textcenter16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsnRkqtDnhu1zHfFSpjaY4PavgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textitalic16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+0BgztwUmmjBXX3jE0auHHhM5Yq4xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textleft16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsgRoqr3Vnt102fFSJjUC6nlPoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textmiddle16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIXhI+py+0PT5i01pisphjt3UmfFZYm5hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textmove16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsg2kfZvblXbwTg10WlA4rjyvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textright16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+pm+EPIZstSrqsDhhv1ylfFE5jiYwX6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textsortdec16:text text16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BPwCBAQCBAQC/FxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM5CBDM+uKp8KiMsmaAs82dtnGeCHnNp4TjNQ4jq8CbDNOroIe3ROyEx2A4vOgkOBzgFxQ6Xa0owJ8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textsortinc16:text text16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BAQC/AQCBPwCBFxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM4CAqxLm61CGBs81FMrQxgpnhKJlaXFJHUGg0w7DrDUmvtPQo8qyuEHoHW6hEVv+DQFvuhWtCFPwEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIlhI8Jwe2/AmpTynqPTXSqrnBM+I0kdmpmGmUp+K4nPMvhYx9+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-texttop16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIWhI9pwe2uYnq0yQtqxbz7D4biSIZ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-textunder16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pu+FxXoOIKpds1oBH7hlYxYxRCaIZ01lhJbHy9tTv7BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewchoose16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMzCLrcGlAs6UAYgwLdLtEcI4ygQo7VVp2oupGpG4vmaUVTemX523qlFcw0a4RqNlkx5k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewdetailed16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMmCLrc/i1IAVkYg1Z1iRYUKCqitp1oikqBWV3ZOnhkWNagqu+qnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewicon16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrcG1AwGOQbw6qANeCEB3pCSZpO6pgowJZqLKuUGE0dnuEhf8IL1kz1shSHDX8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewmag-16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ+QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7Kmpl0CtLGLvbW2Zn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewmag16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ8QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7GLArS5Q7O1tmZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewmag+16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6cAsLECrqeys7WxpqZdtK9Ct8C0fsHAZn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewmulticolumn16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrc/ixI0WSgKoyBl+beQFACpo1AqXbKCr1wLAMWS08hGG3dSZqin4sxnBmPD38CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewtext16:view view16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIchI+py40BTQSwuovp3DXkv1ia1IHmIXLiyWJ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewtree16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBDQyNPz+/PzerAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAMuCLHcri4yGISlj4kxcANgNRBQCIbL6U1Su7bB62rXvGydG25kqpwfIGxILBr9CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actattach22:act act22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBMTCxPz+/DQyNKSipAQCBISChFxaXDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARrEMgJgqA4zzus/gLhFd5HCcZAXqsphYPUdhcYFNRcZnvdtpnDqPTbUWgAJKBYwzBlw+bRo3xmkNWoBgm0OrVLn3GC9RgCk8DhUw7c0rHPr4CDu5SYQNyEt7uSY3p/UAKFhYKDSQOLiwgFdhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actbookmark22:act act22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBCQmJCwqLMTGxAQCBBwaHMTCxLSytERGRFRWVLy+vKyqrKSmpHR2dJSSlJyanISGhGxubIyOjKyurGxqbFxeXGRmZHx+fKSipLy6vGRiZLS2tFRSVHRydJSWlHx6fCH5BAEAAAAALAAAAAAWABYAAAWWICCOZGmewamaQrq+wUC8azHINGocOI38iIRAceDNaISFYklkGHOEhoNBfUAOhuOLEJE8HoPiRKFdESiQBqViuTDIUAsEcyAeGJmyiqC5RCwJGg0YcEh9D0V3Dxt6JwQVDRYVHBUdi40mjw0PTgwQHgeYJQQJfxUXFxAOoTkFpQ0fsRSimQkWEQ0VtI62HLt7vjl7JQYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actbookmarknew22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCwqLCQiJCQmJMTGxAQCBLy+vLSytERGRFRWVKyurKyqrLS2tKSmpHR2dJSWlKSipISGhGxubIyOjGxqbIyKjFxaXGRmZHx+fPz+NGRiZPz+ZPz+HMTCBKSiHPz+jFxeXPz+XPz+tPz+zPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAamQIBwSCwaj4Gj0hgQLJ+AAaEAVQoI06pRYDhkoYgwIhEgKBTfZ2FhaBsYDS8VWnA8Go0FJIKeqyUTDw8EDHBpSwUUFQ4UFhcYDQYFfkoFFxEQDG8KEAUZlEeWGBIakw4FG1STiBoYBRwdBR4fHgUdHKBEBSCnIR8iIyIfIblFu6ceIyQjtcXGCbLKzAUKzrq+wMLEVa+xs7W31kOTk6nkWuOf6Ea5QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actexit22:act act22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBHR2dDQyNCH5BAEAAAAALAAAAAAWABYAAAJOhI+py90RnIMyRUOxhDfzJkACdoXBuEDDkQFDi5go0MrKx16kns80b7qdELCgBYaEGWwL5nG1ePFiKp9A6kuYRNuho8vxVrrZivmMRtMLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-acthelp22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBCQuNBwiJAwiLAwaJAwSHAwSFIy+3ERynCw2PCQuPAwmPCxOZCxWdJzG3FSazBwmNAQKDAQGBDRmhBQyTDxujDR2rIy21AwWJDyGxCxmjAwmNDRihAQOFDxmhCxunBQWFAwaLCRahDR6rESGvDQ2PCRWdDRunDSGvCRSdAwWHCwuLDSOzHSmxDyKxBxCZBwqNHSu1DyOzAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAahQIBwCAgIBAPCoGAgOoeBAyKhWCwYDUf0CX1AIhLiJEGpBLiAAaRxdgYsl7Ybk8igBZoN5xmAdDxoanp8HyANISF8EBsiXBMjJBolBEQmGHFoRScbKHIKDykqK5lFAZRCnyknTaROLA8tq61OChgtKqyzQgEYEJi6UC4vI3LAASkbMBPARAEBdszR0sACEaPSMTIQM8W6KzNl3bo0NOJDdEEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actlock22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBHRudFxaXExGTERCRAwGDGxubPz+/Pz2/Ozm7Nza3NTS1KympFRSVHR2dNTO1JSSlKyqrKSipDQyNMTGxDw+PLSutKymrMTCxAQCBHRqLBQODJyanDQuFFxSJFRSJFRGJERCHExCHISChHxyLEQ6HGRaJExKHLSmbLy2fOzitPz23KSiZHxuNHxyNJSOTNTOnMTCjLSudKSaXJSKRJyOTOTetNzWpHxuPOTi5MzKzLS2tFxWXOzq7Ly6vOTe5Ix+RLSqdNzSpLyydKyqbKyiZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgMEBQKEjI0GBwgJCgsMDY2XjwkOAgQBDxCLl4QNCaGCBBGWooINCAqqrBKgqwATFKaDFRYVtBMXsIMNGBm0GRADjQIJxKIaGxwdHh8gISIhGyMZzIwkGholJiYfJiAfJyEZISDbg90oKCkqKwcHKyooLC0f7IIuLzD2YMSQgW8GDRri+AFoUMOGvRsxUhSsQQPHvmQSchyQtEAHhh0WJHDQcJERjwsKDvRI0BGDjwgicXhQyCOjSgUKPO6AObIkIQESfmxk6REDT4s0bfaYpDNkT4VAha5s+TLmzEYtatwIOHAiDZIKNQAJYk9IjCFEisyoocFEB4UACtBpm0t3LiF4gQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actredo22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3Pz+/JTWbHy+VHTCTMTivPT69BxGDESuJDyiHESiHEymJIzKZAQCBFS2LFzKNGzWPDRqHCxqDFSqLHy2XESCHAwaBAQOBBQqBDyWJHyqZDyKFGSiVESeJBQ6BAwSBGTGPFyWPFSSLEyOLESGJBQiDAwiBBQmDCRGFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaoQIBwSCwaj8hkMcBkKpcBwYAwEDif0YLhwEUkFItFMkAwMBoOR+PxgHwjRDggamhIJpQ8ZbKGKOQLcgEFdhUWEYgRF3sNfhELBHALAhgZFhobRBwREhQdEAIEHpIKHwsaSJwUDQgQIJINARxKESESDQ0dgCIjSpAkDAwPco+ZSJAlJicnKHIAIrNHidOIQxunT0kpCyrZSCss0d5Fj6jjRonn6uvs2QZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actreload22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBCRSFCRSHBw+DBxCFCQ6FBwyDBQWBBxGFCxyLGTChMzqzLzmvHzKjDyOTER+RERyNDSqXNzy3LzivFS+fCyCPBQmBCQiBBxKFBQqDOTy3LTitES2dDR+PCxuJOT25KTarCx+PESSTCxKHDSeVCyKRNT21ESWVDSGPBQyDAQCBBQSFDRuLDSyZDySTGzChCRiJKSmpExKTDS2ZGzGhLy+vGxqbISChDSKRMzKzGxubDQ2NIyOjCQiJCwqLBQWFCwuLKSipERCRERGRHR2dAwKDDw6PFRWVIyKjCQmJFRSVBwaHKyurAQGBExOTBweHFxeXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf9gACCg4IBAgMEBQYHhI2ECAkKCwwNDg8QBAOOhAQREhMUFQgWBxcHGBmbggkaGxwPB4yDB6SbBJIKHQaqtY0eHyAhsqrDgx4aCiKpqoQHAyMjJBMKJaSxzAAHIRsmJgonKA0LHSmDKiuOBywRLSQuLyEwwyoxMuiN6iUzNBXy5jU2bsgoJugABBz95uXQsUMGD3vpPPgTpKIGwx4+HMr4kW4YkCA2hAzxAQSIECI+imBTwVIFESNHerRUgc0cEiFHkjiiyYzeDiVLdvLcySSkkKGEWiZVweSGkIHMmvQosoQlkaZOjvhosvKJjIAxoOAsgpRZkQNLnvSoqspAIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actrun22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAwKDAwKBCQiHNze3AQCBBwWFDw6NPTy9PTy/Dw2NKyytOTi3LS2tMTKzMzOxLy+tLy+vBQODNze5NTS1JyalIyCbIx6VIRyVISGfJyelOTq7EQ+NMTGxKyurGxeRLyKPOSmROSuVOy2XOSiTLzCzNTOzDw+NCwqLHxuVOy6bPzGfOSuXNTW1LSyrMSWRNymTOSmTKSCTPTGjPzSnPzWnMyaVBQSDMTCxPz+/KyahNSeRHxeLJRyTPzmtPzarOy6fJyajNza1Ly6vLyulFRCJPzirPTOlMS2pNTSzMTCvJyenBQWFNzKtPz6vPzyvPzqtOzGlOTe1AwGBFxWTLy6tPTm1PzSpPzutPz2xPTSnOTSxOy2dPzapPzerOzm5IR+dPzu5Pzu1PzqxPzy5Pz+9GRiXGxuZKympHR2bOTm5Pz6/MzSzBwaFJSSjCQmHPz2/AwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeEAQKIjIIDBAQDjYMFBoMHCAkKgwYFhwULDAUKCg0ODxCkBQgRnoUSExMUDxUWFxgZGpAbFIuGHB0eHyAhIiMkIB8lJieIKCUpJCTGIyorLCktKIUDpC4YLzAxIjIyMzQ1NhgdpJI3ODktJTowOyM8Ejc9Pj9AQUIEclAocCMIBQhDiOwgoaKIoCI+jBxBkkSJkCWemIyq0GSHCBVHihRx8gRKFCmpKhGaQqWKFYZXsGR5kkXLFgRUXBUqkCGCFS5AjnTx0sXKlyA6CRVgAAHMAilhxIwhU6ZFkBY5kgKYUoXBAzMKzixZ4AJNGgVm1KxhM0WpmQpUMtooaOPGxAM3Nw60oYLGjNYCbzYJOgAnRzNBJ95oPYQCgpJtkwzFoULlRuRPiy9fNhAIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actstop22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAASC/CQKDBwKDCwODNyKjPzq7My+vIxiXAQCBOSOjPz6/OSelNySjNyGhMR+fLRaTGQ2LPz+/Nx+dNR2bNRybMxuZMxeXMxiZLQSFJQaHFwqJNyKhOSCfNyCfNR6dMxmXMxWVMRORLQODOR+fOSSjNR2dMQ2LJQWFMRWTLwWDNSCfMxeVLwaFKQODNR+fNx+fMxiXKQSDOSWlMRSTMxaVMQ6NMxORMQyJOTS1MxqXLwWFLRORMxKPMQaHMxKTLQWFCH5BAEAAAAALAAAAAAWABYAAAb2QIBwSCwajwGBcikIHIsDQmFKNRwQT2EgoVgsGOCG4wHBIgmRhWRCqVQsF0xGYyYGNgoGh9PpeCQfICEic3UAAWgLIxwRJBsbHSUREyYYJ3RDAQULexGejhueESgpl3WaCxsqJKKsChEUKywtmFoFDC4vCayikzCyMbWHt38NCTKiHhUfMyzBdQIFKsodob0VNDWzwppuKxMRrx6iNjcitNA4bh+iEzkwojc66JkOOxcf7G35PBE9KS1MEUGgIQOIFfk++KjRw9wJgUUIZvhRoyLDFCliQDQisUWLGCJOeNx4hKCGkyhPGnqCoKVLl1liypyZxUAQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actundo22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3PT69MTivHy+VJTWbIzKZEymJESmFESiHDyiHESqLAQCBFzKNGzWPFS2LNTmzCxqDDRqHPz+/KTGnBQqBAQOBAwaBESCHHy2XBxGDOzy7HTCTEyyJDSqFHzWTAwSBBQ6BIy+dESKJFySPFSSNAwiBCRGFBQmDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMsBkKotMwYAwEDiXgYLhwD0gCFZiQKxNKBYMRqPh+D6G16y5AYnYIxBJAyF4AwITTAUJdBESD4gPFBV6Fn6ABBcJDIYPGEQZGhQbHAIdfx4JHw2VSBodGwWfAR4LDSALfkgYAQurBiAhICKfSSMkvQElGyYnGyi9Rxkdj4nOskUYyU9FpxnURikdGtjRKivdRKfQ2Inh5+jpRwZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actunlock22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBGxqbFxaXExOTEQ+RAQCBPz+/PTy9Ozq7Nza3NTS1KSipFRSVOTi5Hx2fJSSlKyqrJyenJyWnDw6PMzKzKyurDQyNFxWXMTCxJyanHRuLHxuLGReJFxSLFROJFxWJExCHERCHBQODISChHxyLHRqNIRyNHRmLLSqbKyiZLy6fOTarPz67Pzy3OzitKymZFxSJJySTNTSnPTy3NzSpMTChLSydKyqbKSaXJySVIyGRGReLPz23NTOnMzCjHxuPLy2vKSmpOTe5LS2tLSutHxuNHRuPMS+xFxWLIR+RDw2HFRKJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SDAQIDBAUChY2EAQYHCAkKCwyOjZANDgIEAQoPjJiDAg2iggQQp5gMBwmrDBESl6MTFKuoFQSjABYRF40CGAW8BRm7hQwNxBobHB0eHx4gISIjBdiEAhYFJBslHOHSHh4hBSHlxIUmJygpKissBiwtLi8pGjDqhBoxMjMuaNSwcSMFjhw6dnjYRyrGCh4ueviw4Q5HDB0/PjAUJCBCAwMIGiiggAEIBFk/FgYLIgRkggQkhxAJkqGExkYMFnxsIGRkSQgLHhRRWUjAggQgG8AsSWRBBiP6VrYMOfKIyaBDNwLo+HHSUplOSyDRqiEHjRkretRQkcLgxayNF0wksQGQxsSKMTIq0QpgCba/gAE7IhMIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-appbook22:app app22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBDyGhCyCfFSWlESOjDyKjDSGhCx+fGSinGSenFyanEySjHSqpHSqrGympEySlBx2dISytHyyrCR6dKTGxHyurHSurHyytGSipCR6fARmZFSalEyWlBRubAxubBRydDyKhDSChLSytPz+/MzKzIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbFQIBwSCwaj8ikMhBQIpmCQdM5ZBIKhgNiugwkFAsCI7pNMhuOxkNBgBgEiAi3GkBLJpJHYgEpaClyREwVFhcSEhgOGQoMfgMaERtcARQBFRMYExZ6HB0FUYAekkIBHxqWFmlrC1haESAfG6MBGx+VFRgKYH0hInGRklO0ppYXCwwMWQiQHkwjgrWnFRdYZHIBJCTP0LaWGAcDW9jZ2nMAw9IWTOQkJSZMRsOV49nu8E+19PbmR7TY+1TovONH5V7Ag0QMBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appbookopen22:app app22 22:photo:22 22:R0lGODlhFgAWAIYAAAQCBAQ2NPwCBHSurIS2tBx2dBweHPz+/Ozm1GxiTGyqpPz6/Pz69GSqpOzaxPzy5HxuVLSmlOTazPz27PT29NzClPTexHxuXLSmjAxqbFSinPTy9KyehNy+lPTy5Pz29HxyXNzWxKSahOzexPzy7IR2ZOTWtESenPTy7KSWfIyCbKyijAQGBDyalPTu3KSSdDSOjJyOdCSGhPzu3OzizJSGdPTq1PTq3JySdMy6lAyKhOzWtOzi1OTOrJyKbMS2nJySfMS+rAwCBNzOrNTCpNzKpJSGZKyafLSifLyylIx+ZHx6ZDSChAQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAWABYAAAf/gAABAoSFhoeHAAMAiI2IAAQFjI6EAAaJkQeTjwAICYkKBQcLm5WdBwyfhgChB66bp64HCQC1lQ2irqQCAA4PowsLEBESE4wAuLIHFAAVFr+uDBcYxRm1GrmuGxwdFh4Mrh8gGCET1gDYyhsiFSMkDAsMDCUYJhvnJ9kHKCnODwwfPlBQsULCPRYAWogK9sHFiwoOPEyQh0JFPXO1YBSYwBEFghjdHkwQOYGgwQwIZRR44GHGDBogabhAsYEEihrUMAIoUMCEDRs3HODIYQHFA6MPcJA7KICFjgw7eIzo4cOfiwc/gKwIUm2SkKdDdlDt4AABDaU/iIRwwbTSUyJFOow4S3Hkx9oNDDZgXPU0h1wcSIgEGUw4ibVET5WoWMKksePHpdxmyKADAEIWly9HJtQkQJMmlAgZCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-apppencil22:app app22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/IQCBPwCBPyChMQCBPzCxAQCBPz+/MzKzISChKyqrDQyNEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARYEMhJ6wxiEMtpIAWxddwXiqRlikSQeiAbuC+wirNR322gv7zcLobzDU+9XypoBBKTR1lz+RTWDgip8nUwZK1XLyIx5XoVicX2RUAo1DVKi7GOBxjxfNwQAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-apptool22:app app22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBISChFxaXNze3NTS1Ly6vKSipNTO1Ly2vNza3Pz+/MzOzOTe5DQyNOzu7MTCxGRmZMTGxPTy9Ozm7Hx6fPTu9MzGzGxmbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAW1ICCOZGmeaEoGbBsI6joMRGEcbQwESDIrtVtAF1gwDLNaAmfKiVgLBJKgwB1KxQZrBHU0FAXmavFoQLYiB6TxFXMj5AZBwnJI2I3wcNWALyYEcgoKXxRhOHs7XxEVCwsWFgoUDRYUFwwQB25ZCxiNjo6GkwUXN2NsCxEYqhUHoQ0MEglYRQQXErcHrI55FycuB2YSmoyOBTEtB2sXuhU6XAENC2a6z9AKCwq+1tAN3E2J3ySkIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-connecting22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxOTi5AQGBNze3Ly6vISChNza3FxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAAR4EMhJqwzY6omD+MNGdR8YilNZnug0qGzrqrL1lnV1fyJBVB6VQEMoGH4ADGwQkxQPBwMiKGA2J8VEAnq0tgiKg5aL/C7C2gTjKCM0zowDQ8tuNQznNL7cKzjOUQsNfER+gguIg19+Pm6ChBZFDmWNi5M5FIyYFHQRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connectno22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBERCBAQCBPz+/MTCxOTi5Nze3OTm5Ly6vNza3ISChFxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAARiEMhJq7046827/+AVCKE0Dh9BAGdaGISAToFGFMcBU+11I4hDYseSZQiKwwKoI/QwBIYiuFDCZseGdIlYEjUNg1SpY6w2N4cUIW6cjwW1lsFwo+MqgtZuw0/ydw5vH34lBhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-connectyes22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBKyirPz+/KymrOTi5KSipMzCzNza3OTe5Ozi7MzGzPTq9OTm5ISChMS+xFxaXNze3GReZIyCjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWLICCOZGmeaBkAQpoGg7C6JizTQT7CxPwOwFWgYPChYIXkIHC4uQKGAiKRKCyNpxxUUVViVYNFLkqtLo+DAkMMLXQPXwAy2WCTF4544FGtKuwPDhB6DnxuUmyCcXIQhV1uYoMuEAcOBxEKCHg6TzGFCJUSizuejROKOAM9OY2SnUU7nD89NCcDsLUnIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-devscreen22:dev dev22 22:photo:22 22:R0lGODlhFgAWAIcAAPwCBAQCBPTy9PTu9Ozq7OTi5Nze3OTe5Nza3NzW3NTS1MzOzMzKzMzGzMTCxMTGxOzm7AwGDBQOFBQSFCQeHCwmLCwuLDQyNDw6PERCRFROVEQ+RDQ2NLy+vKSipISChGxqbExKTOzu7OTm5Pz+/GRiZMS+xLy6vBQWFLy2vCwiHFQ+NMSmfNSyhIxmTDwuLJx+bLS2tCwmHMyyhMyqfPTqpPzyvLSWbLSWfPzitIx+ZDw2PAwKDCQiJGxWRPTmrPTerMyuhPzqtPz63PTWnPz6zNy+nIRiVDQuLKyWbOTanPz21NS2jNS6lDQqJHRaTPzmrPTSnPzyxOTClPz2xNSuhPTqxPzuvOzSpAQGDOTKnMy2jOzSrPTu1NzKnOzOnBwWHJRuXLSWdPTatPzqvNzClCwmJOzSnOTOnPTuxOzKlOzerOzarOzitJR6ZNTO1IxmXPTWrNSyjPzOjPTSpLSehHRqZOzirOTCjPS+fPzGhOy6bOzKhGROPMy2lPz+1PzmtKRyRHRiNNTCdPz+zNzCjEQ2NKySdDQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAj/AAEIHEiwoMGBARIqXMhQIUIBAwYQIFCggIEDCBIoULBgAYMGDgIIDEBAwMSKBRBk3NjxAciQIwdACBBBwgQKFSxcwJBBwwYMHBx0EAmA5EwPH0CEsCChoYgOQ0cSGCHhA4kSS5syJGDiBNEAFVGUKKEBAwWFFM6SNJHi64gDFEKE4FBBggoKK1i0cPECxokYXw0gsECYggQZM2jAqGHjBo4cOtqOxLhDAg8ePXz8ABJEyBAWRIoYOfJipEoMCZEkuaFkSAslS5jUGJKkSRAnRREo0JDwCZQoTKQAmUKlihQrVa5gKZ1lI+oAK7QM2cJlSZMuU4Z4+TJEx0iNOwKAggkjZkyOFmS8kClzpcUQLRRGbjRD4MgZNEzSqKG+ZgobI2248dUbDDDwABzcxSEHEFpgEcUcdMRRhx1fFejAAx0cgcYdSxiBRx566LEHH0d8QFRRNC3Uhx985CHEH0MAEkhCBxWkgiCDFEFIEYUYUmONMhyCRxVH/PgjBYioYJAdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editcopy22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFPz+/DQyNISChDw6PMzKzMTGxERGRIyKjFxaXMTCvKSmpHR2dPz6/Pz29PTq3MS2rPz69MTCxFxWVHx6dJyWjNzSzPz27Pzy7Pzu5PTm3NTKvIR+fJyGfHxuZHxqXNTCtPTq5PTi1PTezNS+rExOTFRORMyylPTaxOzWxOzSvNze3NTOxMy2nMyulMyqjAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbYQIBwSCwahYGkUnk0BgTQ6IAQaBKfUWhBYKhaAU+CgXAQIAyChLeJzSIQhcH6GFaM0QtGY5kstqEODw8QEQELAhJTc08KBBMEFBUWDRcBE1pca20SGBkaEBscAY5maFRIAgoLHRQRHh8gIQFlZnByqA8ZGSIQIyQjJQEmYgJ5p2ACrK4gJx4gKIZZAgdeAQ4ZI9kjKSor0AwEjeAs1S0cHAslLi4vMDDRWeRIfEsxMeET4ATyVoYLC5fizXEiAR84BeMG+pEm8EsAFhAjSlR4hR6fLxiF0AkCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-editcut22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBAwCBPz+/OTi5JyanOzq7DQyNGxqbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARbEMhJq704gxBE0Bf3cZo4kRJqBQNRfBucyudgvJS6VaxLzyMa6/bLiWA9HOg4VIIkL5vzuRkcpkvRIIAorphJLzBW84WEuRZWp6uaT7J2Sh1Hit3OY/ZO7WvsEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editdelete22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAASC/FRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanPz+/Ozu7BQSFCwqLDw+POTi5PTu7MzKxIR+fCQmJPz6/Oze1NTGvPz69Pzy7Pz29LyyrPy+vPyupPTm1BQWFIQCBPwCBMS6rPzSzNTOxPTi1NS+rPTezNzOxPTizOzWxMy2pOzaxMy2nPTaxOzOtMyynOzSvMyqjPx+fOzGpMSihPTq3OzKrOTCpNzKxNTCtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf8gACCAQIDBAUGBwgJCgsLgpCRAAwNlZYODxALEY+SkAMNEqKjEw0UD5yegqCjrRMVEqidkgWhraMWF7GptLa3EgEWFRSOnhW+vxgZEBqzkBvItxwdHryRCNGjHyAhHSLOgtgSI60c2yQjJd+eJqEnKK0hJCgnJSngAO0SF+8qEvL0VrBogW+BLX4oVKgIyMIFQU8KfDV4R+8FDBcxZBREthAFiRIsOsygsVEUh4Un3pGoUcPGjZInK65QicPlxg8oX5RwqNJGjo0hdJwQ6EIkjRM6dvDYCKIHSBc1Ztjw4eOH0oIrsgIJEqSFDBo0cuTgsdSTo7No0xYTZCcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edit22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBISGhISChHx+fHx6fHR2dGxqbGxubGRmZGRiZFxeXFxaXFRSVIxSLPyuXMzKzMzKxMTCtExOTPzqrPz+/NTS1MS+tOSaVPyWNPz6/IxeNPzavPyKBNTW1PyCBPyGBJxmNPzOpLx6PNRqBMSCRNySTPyCDPSGBMxiBKROBHRydPSylOyydMxmBJxKBAwODPS2lPTq3OyabJxGBPTy5PTGrOyOXPR+DPz69PzmzPzevNxuPORqLMReFPzy7MyCXKxiNIRKHBQWFNTOxPzixJRaPFxONHRqVPz27PTy7PzStCwqJDQyLJSGdIx6ZPz29PTu5HRmTLSKbMSGZHROPFxKPJSKfJyShKyehMyuhDQmHEQuJJyOfLSijMSynMS6pLSefDQyNHx2bKSahLyqhLymhOzi1FRGNIR+bNzKtOTOtOTKrOTKpLyedAQCBFRWVPTq5NzOvLyunLSmlNTCrOTOrNzGrLyidMS+rLyynKyijLymjLyqjAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gAAAAQECAwQFBQYHBggJCgsLDAwADQ6CAQ8QD5ydEJ+gERKWE4ICDxSpqhWqqhYNFxMYphCtqaytGRoXGxgcggSoth25u70eH8APFR0VzMzNziAXIRjIvwAFwq3EqSLUGB/iI4LathS4JCXVJh8nKCmCKrXDFCss1eIfLS4v8ssdmgWsAGNDDBnt3s3wJ+jAtlUhaNSwccNEi4WCBBl4SAHHihw6ZOzg0QNjRgAG6KXK4CNEjBU/gDQI8kLISQAIADobAoMIzCINjLw4YvNkAno4kCRRUuNHESNLmDRxUjSjAlRPfECJImUKlSpMrFzBIqWqoKtJaWSJomULAy5XXrp4+QKGYcYFoCBEWRImi5gmY7CQyVLGriAGD2jEMHMmCxc0Xb6kUbOGTRs3N988gLM4jpw5Y+iwqcOGjZ07mE8yiGABz5c8c/Ts4cOnDJkybS7fdMO7t+/fvDMaCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editpaste22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQWFDw6FHRuFGRaBFxSBAQCBAQKBCQiBIx6HPz6/NTOfKyiXDQuFOTm5Pz+/Ozu7PTq5Pz63PTyxNTOjKSeRExGLMTGxMzKzNTS1NTW1Dw2NKSmpKyqrKSipJyanNzWlLy6ZLSuVIx6FISChIyKhJSSlCQiJLS2tDw6NDQyNCQiFCQmHBQSDGRiZHRydGxubHx6dGxqbFxeXGRmZFxaXCwuLOzq7KyurHx+fDwmFEQuFCweFCQWDBQODBwaHBweHKSinJSWlOTi5JyepHR2dDw6PBQSFNze3ERGRIyKjIyOjISGhPz29Pzy7MS2rMzOzFRWVHx2dHxybDQiFPz27Pzu5PTq3PTm1NTCtJyGdHxuZHxqXPzq3PTaxNS6pFxWVFRKRNS2nPTi1PTStNSulNzOxNSynMymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwABAgMEBYSLggaOjgcICQoLDA2Pj4MGDg8QEZ4FDxITFBUWFxcYGRobjQ8cHR4fCQ8gCyEiFSMWJCUkJieNEB4dKB4pKissK8wrLS4vMDHBAAYQHx8dFx0fJDIzNDU0M+IyHzaNNyg43Ng5Ojs7Ojw9Pj9AMkCNDiZB/h9CSOx4QLCgihItqBkYgqIDESElitAYWJCgkQcXjjRCgi1Ihw4BB5LAQOLCgyQYHihpUU3DBw5ElpAgAYNixSRJjKjQaECDCRPZPDB5IbIGSQwKLnh4wbInLA4kmJB4oaPiAwVNnER40hRK1BIAaVatUZJEFCkmpmjgCeWDCalFe4q4oFKwSRUrEa5gycLzwq8lUnPQ4PEgSpYcUZ5o2cIlS1O/JHLEDdfjQZMIVrpgweLFy5e+M6WSmBGlxYMYYBRzCaOFi5imHWBIfOEiShLTVjaP6eyFTBmN1TA5OvLDjJksWb58OVMGDRqWjAYdmU79SIvpjqJr104nEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editshred22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBFRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanOze1Pz+/Ozu7BQSFCwqLDw+POTi5MzKxPTu7LyyrIR+fCQmJPz6/Pz69Pzy7Pz29OzaxPTu5PTq3PTm3My6pPzu5PTq5NS+rPTm1PTi1PTezOzWxPz27MyynOzSvMyulOzOtOzKrMymhOzGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbpQIAwIBgMCAXDAZFQLBbCqJTRqFobjgdkEYFKowPJZEyeUBqVR/crHDTKZYplovZKCW84+YKZZNZSBXl6EwEEBhVPXxZihGMaGRscdkIdg4QeEnVfCH2OHyAhIhuUAAiXZSEhIyQlJqWnjiEnKCWupRWoYyEgJK0SKaUKjam0JCorLMFfC6iqx8giLa/MGAsT1wsuCyULKwssC9RSzdkfCyALKuALLQsvpeXYIQso3gsiCzALMfENC+dGcMNHUAY/f+jq3ctncMYCGggFrsvHcEGNh/EyPFmg8cmrJxAVkVO0EUDJklHoBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-edittrash22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBERGRExOTDQyNISChBQSFCQiJCwuLPT29Nze3GxqbDw6PGxubHR2dJyanLSytJSWlJSSlOzq7Pz6/Nza3Ly6vFRWVBQWFIyKjMTCxHx6fIyOjLS2tOTi5PTy9OTm5Hx+fNTW1KyurKSmpJyenExKTMzKzKSipFxeXCwqLMzOzKyqrMTGxLy+vHRydBwaHNTS1DQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb8QIBwSCwaj8KAMoA8LgUDQsFwQByay4RiwWg4GA9IRGk0SCYJSsUCsVwwGQ1EsmESD5xOp+L5gDwhBRIZDhcDdkMGDgEiIxAkJQ8Ok5MmAohDAQ1xJxUlKCUlEg0pKpiZJRoLCxmtCw1eURhOcR4rbQ8cGRwLAwgGtBYTDywtGRKjvQTARgEZLhMcKC0OrQMvAirMRc7CHCTU1g2+20TO0NIn1RwDCya/wdHT1Rnt5LToKOq79trx0tR02YPX7Jm8fRxMOIhSLhOJE/LCJSTlr5kFEBQsWDiR4UGGBgsuHDg1BEYAfTE6oEBR4AIBAiS5yWBAAAGBAyaPGAgCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-fileclose22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBERGRERCRDw6PCwqLExOTFRWVHRydGxqbGRiZCQiJISChIyKjHx6fDQyNBwaHJSWlKSipBQWFJyanPz+/JSSlCQmJAwKDCwuLBweHBQSFGxubExKTISGhDQ2NFxeXFRSVDw+PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbZQIBwSCwaj8jkMSAYDAgEJbFgOBwQCUOAoJAaFgvGonHIBhyP5BcSgUAYDWxggD4WFmx3e3HQngkSRgYMEBMUFG4MCId0BGlEAQeEhocVDYcUdBYKF0QCB3gRlJgUAQEYBBkaRAMbDZMMpAYcT46rQwMJrgsdC6QcfwoPnUMOBgkIV6SHHg6bw0QEAQYfBpggBZjPGsRD0gEchxwCIR6HChnQRQ8DIU4DTR4Em+ncRw8O+fmoXPXdRg+gQLFgIYM/KRIkoDP4QMKFf0o0aBAh4qGUixgzCrETBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-filefind22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQSFJyanLS6vLzCxISChNTe3OTu9Oz6/Nzy9Nzy/NTy/OT2/Nzi5Mzu9Lzq9KTe7LTq9PT+/Pz+/Nz2/Mzu/Kzm9Jza5HzK1LTi9PTu9IzW5ITO3FxaXNT2/KTi7Iza7GzC1LzW3FRSVMzO1MTq7HTS3Fy6zFS2vKzm7Lze5MTGzHzS5FTG1Ey2xEyyvJze7JzW3ITa5FTK3EymrGS+zFxWXKymrMzi7ESirEyqvLSyrKze7MzOzMTCxKSepAz+/NzW3MzKzBwWHLzS3ERCRAzi3KyurNze3MzGzLy2vLSutCQiJAyytHRydOTe5MTGxLy6tLyqpKyelJSCdOze3NS+tLyupLSmnKSOhCwuLPzy9Pzu7Oze1OzazOTOvMyihOTi5PTm3Pzi1PTazPTWxOzOtNSunDQyNPzy7Pzu5OzKrNzSzNzGvNS6rMyynMymjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwGFhYOIiYQBAgMEAwKHiokBBQYHCAkKCwwFAZOEBQ0IDAsODxARCZ6gAAEGEhMSFBUWFxgZCJ+TjBoMEpkRERscGBGRih0BBAgeFBQOER8gISEfIruIIwEkCCUVwhcgJicoKSrZg9srCRkRGdMsLS4vMNiK2wIKMRsbMiwzXtCocSydIBs3AuCIwIFDiBMucugAoWvSiB2VNPDg0ELHwA0MkCXr4aNSggg8NoDIQOFHgBtAkgURMiDAEAFEVBCJFKCIkSMGOyDRkETJEkOFmABoUsRJQkQdnkzQACWKlBtTplBR6qopxkFRJ0ytYuWKFCxZtBBq+hRA2AlbRrh08fLlCxi1a51g+dQhDFwuYsaQKWPmDBpKXgNETaNGjJgyhNfcVdTTiWI2XpK0cePmzRk4YA5T5otGixY0qFOXbgXAQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filenew22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBExOTERCRDw6PCwuLBwaHAwODAQCBOze1NTW1OTi5Nze3MTGxLS2tJyanPz+/Ozu7OTi3BQSFCwqLDw+PDQyNFRSVPTu7MzKxLyyrIR+fCQmJPz6/NTOxPz69Pzy7PTu5Pz29Pzu5PTq5PTm1My6pBQWFPTq3PTm3NS+rAwKDPTi1PTezOzWxMy2pPz27PTazOzSvMyynOzaxOzOtPTaxOzKrMyqjOzGpMymhPTizOTCpNzSzNTGvMymjMSihCH5BAEAAAAALAAAAAAWABYAAAboQIBwSCwaiYGAYEAgFAqGg/Q4DCASCsTiymgcHAcqQLB4mM+QiIQBppLPcMjkwQ4bB2X4maKgt4sVCHpnFhQTElNFE3mDDxcYGRp2RBuMgxwIHX9EBZZwHh8gCBmTQ52NISEiIyQlpUImng8hHyInKAgprwAqgnC0IKwrLLpGB4wctLYkwy0uuwd9Z8AnJywsLcVFx2YcL7UnJCwwLTEy0GXJoSgrCCwzNDTnxgjeH9UrKzXwNDY36LRGhEOwLx4NHDmgJbh3QoeOgv127EhojEeHDj16pEhRQoZHHzl+QJNCsqTJSXaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileopen22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQWDCwaDDwmFPSubPzGhPzCfPy2dOSmZPzKlPzSnPzOlPzKjBQODPzChPzWnPy2bPSmXPyuZOyeXIRSLEQuFEwyHEQqFDQiFCweDKRuPFRSTPT29PTy9Ozq7OTi3Nze3NTW1MzOzMTGxMTCxLy6tLSytKyurDQyNMzKxOTm5OTi5Nza1NTS1MTCvLS2tLSyrKSmpJyenJSWlIyKjHx+fFxeXBwaHKxuPMzKzLy6vIyOjHx6fDw6NPy6dGxubLy+vISChCQmJNza3KyqrBQSFLR2RKSinJyanGxqZAwGBJSSlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeDAYqKiIeLj4wBjQCMhY+NkoiLk5qbhQIDoJyGBAUGBwgEo4MECQoLDA2pDrS1tKQPEAwHERITE77AvxKqhAQNDA8UFRYXFs8YBAQZGqGPxw0RGxwdHR4eHyAhIiMkJSYnKCgpBAYPEhcqHyssLS4kLzAxMjM0NTY3cBA4UCAHBw8gVnhgEcKFjhc7UPDj0cMHAAI/KFgY4YLFio/jRpTYsW8GDyCSCEQw2DChOHIqgsCQSEPIEEEEJFhAoUNECCJEyOk4d6KIyRtGcB7hIJKjixEjHu4oimSGEIs4d8IIUoKECnNB0ElMwkNJJgBLlJBAcQKGiR07KGAURVGViY0mhIwwSTKjr99+THjUoIg0r48hTRIrRtxkiOMhDgrZCQQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-fileprint22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxaXDQyNFxSTPTizOzi1FxORDw2NExKLPTi1Pzy9Pz6/FRWVPz29Pz2/PTy7PTu9OzezPzu5OzavAQCBPzy7PTm3OzazOzKrPTu5FxSRERCRGReXPTq5Pzu7ExGTMS+xKSmpOTKpPTq3JSCDNzSfHRydLyadOzCjOzOtOzSvLyyTMTCxKSipGRiZFROLPz+/KyurJyenJyWnGxmbLSabOzClOzm7LSutJSWlJSSlJyanGxqbNze3OTm5IyGjNTO1Nza3NzW3OTe5IyKjHx6fMzGzMTGxMzOzNTW1IR+hISGhKymrLy6vLSytERGRGxubKyqrLy2vLS2tDQ2NEQ+RASKBAT+BFxeXHRudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAgOEiYqEAgQFBgcGi5MICQoLmAQDh5OEDA2YCw4ODxARApKUCaGYEAsSCRMUnQysCwoVEhYXGLOLCBCgDqK5GQUXGooCAhscBB0euBUZEAUJvQgIgx8gIR8iCSPiHuIFEREDJCXaANwhJhsnKCnWERcRKiopFCvsBywhQrRwQWGAPAz5EhpQ9wIABRgKYsiYMTEEDQocatiwkUIEP18fbkCAAcMBjhwzdOyQwYNCgBMfKJSgMItBjxs+btwgCSGGjhw/ZoRgQKGZCRMUPgABEgSIkCE3SZok8qNqkR85NtDUEcPIkaVAkCR5SrJBDCVKlmzQ6pCCiRlMTJo4YUH3K5AeMBYYWctW0BOaUH60cBJFypQmII6wyEpFQBVFMSm4UAI3hJUrOGh8oOJrklYKWIromJGDR99Ogz5j4ZGlM+pEnwmBCwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filesave22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBGxqbAQCBLy+vERCRExKTHRydIyKjMTCxFxaXGRiZFRSVFRWVPz6/Nze3Nzm5Pz+/JyanDw+PExOTHR2dMTGxBQWFLSytHx+fISChOzy9Ly6vAQGBJSWlMzKzAwODJSSlHx6fIyOjOTi5DQ2NISGhGxubCwuLOzq7ERGRFxeXNTW1CwqLPT29Dw6PGRmZKSmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBQGBAMj8ikUDAgFAzKKCBwQCQUCcICKh0SEAhGw5EIZAmBrgCxeDQgcDJWyz0GIggJfL+XGwQJRxNgC3yGDwwUFUZDFhdthnwMGAZNQwEZFwQakXANBBQbHIIdERIBnRAOiR4ERx8gsSEMBBmGCyEGG3YGBwcgIr8UCwQHECOgG4xCtRkEJAvBJRklJgkSFBQeJ68hJiEoESkFKiEZIbkGARsLlwEGExENGhorGSkpFAYm66NDLAECpGiBYsUIFA8wLHBBQMWLVkdUCFCwaYVFBOymkVCgYEMgOykEpICBccMBAhhELFigTEqAAgIIwCiQ4eRKDyS6EAlJIAI0EpaudF4iIKDAAn9CkRT5eMROEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-foldernew22:folder folder22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBNzaTPT2FISCBCQaDPz+BExKBDwmFPSubPzChPzCfPy2dPz6BMzOTAQCBOSmZPzKlPzSnPzOlPzKjBQODPz+rPz+3PzWnPyuZPSmXNyaXPTyhISCLIRSLEQuFEwyHPy2bKRuPFRSTPT29PTy9Ozq7Pz+xJyanDQyNPzGhMzKzOTi3Nza3OTiVBQWFDwqFKxuPOTi5JSSjISChHR2dGRmZFxeXPS2dNTSzNTS1OTm5KSipLS2tLSytKyqpIyKhGRiZNze3NTW1MTGxMTCvLy6tIyKjCQmJMTCxMzOzMzKxJyenHx6fLR2RLy6vJSSlHx+fDw6NLy+vIyOjAwGBGxqZKyurCwuLBQSFJSWlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLjI2MAY6HAgOHBJYEhJCDBQaDmgcICQoLB4MGDA0OAQUBDg2cAAcPEBESE6QUuQasFRYVq5SxCRcSCggYGRjIGgYbFs8bHIMHExIJGR0eHx7cB83PFhsDDuTUEyAhIiMjJCQluwEmvsAnKAcp1x4qKyUrLLupWrByxcnFiwQIYIggEaNEiRgBZMyYQaNADRs2REA6cCODBxw5+OnQgWMHjx4+BND4MQOIg1gI0gUREkTHiplDhhApEoCGkRlHBL3I8MEHEhz+WAhJogTJySVMfthwIehAExE5jubAkYQpESc8fOx4AiXKNA8+ekhBgqSpzh5hPHcsmVLjpSAqVZBY6VGkiJMiPQKLnTvjCiEsWU4o3nGC8YksMmT8YCmC6iAXKLRc2cz5yGYtR0JjKWQgEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mailforward22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBJR2dLyijPTixPz69Pzq3Pzy3Pzu5PTu7Ozi1LyelOzavPz+/DwqLLyafPTmvPz67Pz29Pzy7LSWlPzmzPz6/LyajPTitOTSzMyurPz25PTatPTi3KyOjPzuxAwqVDQiJHxiZPTetKySlPzqvPz27BQ6bAwmTPTexLyinNzGxDRunPzy5KySjCQ+ZNzq9KTO7JzC3Nzq/Ozu/LzW7FSm1BR6vGSWvFyq1AyGxAxytAx6vBSKxAxSjMyujLSunES+5BSi1ByGvAQCBNzCrOTaxNTOvMS6rKyelCx6rBx6tBQKDOTWvPzu1PTq1OzezAQOHAxGdBROhAQGFPzy1NzOvIRqXLyynOzarPz21Jx2XPTWrLSShAw2XKSCbPzuzAwePAQCDPzyzPzqzPTmxOzWtAwGBKyObOTSrNzGrKyGbOzatEQyNKyCZOzWrOTGpNS2lCweHCQaHCQWFBwSFBQODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBhBwgQKFSpY0HgBQwYNGzh0mDhRAAUPHziACEGBpYgRJDiUGEkSwoCQJk6opNASRQoOFETQJDkggwoOJlYApcCihQuVL2DUhBDjhIqjJmRwwDCDhswaNm5MjYHjKggOOU7o0CGTA9gdYknG2KCCBw8VJVL0uBgihAUfP+CSNGCjsI/DiBPbAMJBsEQbQYQM+UG5smUiRYw0jlvYxhEkSYyIHm1EyRLTTH40EZvAyZPOR4pAmU07ipIkUKQ0mQIhAZUqVq5gKXzkSBYtyLVEyd1ki8QFXLp4+WJFQowbYLJnD5NbzJiJCjaQnhnvpYwZM0/OPFlvQ/f3iQvQpBlvQc0aCWy4VKnCpY0Y5yQxgEYXZFjghgwZUOHGCW90YQEccUwloBwGyjAHHXUoSAMZb0xhx1QOoMHDHSfIwSEOdTjhAQ1d4MFbTQ6Q4MYacrzxhhx04JCHHhvQsMeLJPHRBxpr+LHCGnusgccfgKixQR1ATtTBlDDAEIggggxCCCGFbLGFHVFKZEdAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mailget22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQ6bCQ+ZAwePKTC5Ozu/NTi9GSWvAwSJGSu3JS+5CR+rAQOHPTy/AyKzES23AwOHCw+bOTq/BR6xES+5AwmTBw6ZMTW9Ax6tByi1BRGdAw2XAQCBDQuNDRupKzS9FSm1BR2vBym3EzC7CSGxBROhNTW1Pz+/OTm5NTO1AQGFNzW3Ozq7Ozm7IyKjJyWnMzOzNzq9Nze3OTa5Ly6vCQiJGReZISChKyqrAwqVBRWlOTi5MS6xJSWlNza3OTe5Ly2vGxmbKymrIyGjMzGzISGhKSepCQmJDw6PHR2dJSOlPTy9MTGxLy+vLS2tMzKzLSutMTCxLSytKSipJyenKyurJyanCwqLCwmLCwuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBhgIBA4SLjAABBAUGBwiNlY4FCQoLDJaNAQ0ODwsQnYwREhMUE5ylFYYRFhcYGRgaGxsDHJUdFR4SHyAhEyIjJCUcuo0cJr0nExihxgwoyYscKSnMHicOIw4lKissLdWDHC4vMCu9McYqMjMyNOUANTY3OPEoOTolDCszdrSgwaMcBxs9TMxYOCMHBx8zfPj48QNINQ5BbMBIIUShDIUoTAhR94PHPEEHbQwZckOGjBQviMxYUWQIDCMmdXE4gqRnkiFETAxR8iKFjJU2evZEdmLJkgJIbqS4wXJIUapImj5FtuSEVyRVV1IVi4RIChhEkLVAgcJHEqVwVJUmYdKkiRNkALMRecKECRG/ff8CEQJFCA5kMKJEoUHDCQ/HkB9LmWKECpUeyKoIMSLEyosen0OD7iH2xg1dV7BkqXGlBpbWNTq4Zn2khu0aAAwEAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mail22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBDQyNCwqLCQiJBwaHBQSFAwKDAQCBDw6PPz+/Pz69Pz27PTy7PTy5PTu5PTu3PTu1PTq1PTqzOzmzPzuvOzitPTmvOzivAQGBDw+POzevPz67Pz25Pz23Pzy1PzyzPzqvOTavERCRKSilPz21OTevIR+ZExKTOTi3JyanLS2tPz6/Pz65KyihJSKbMS6lExOTNTW1JSWlJSKZMSylNTOrNTKpFRSVPz29MTCxPTmzKymjIyCdOTWxOzexOTWrBQWFFRWVOzu7MzKxJyalOzatLSulMzKtOzmxOTarFxaXKyqnPTmtIyGdIR+bOzetOzixBweHGRiZOzm3NzWzNzSrOTetGRmZOzizOTexOzm1JSKdGxqbHRydJySdHR2dOzapHx6fKyijOTixCwuLHx+fFxeXERGRDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLAQECjwORAwSUBZYFBpkHmwgJCgsMDA0OD6UQERITFBMVFhcVGBkangq1ChsLGxwcHQ0dHR4fICEGIiMSCbS3uLq8wCQUJSYGJygpKhQJKyvLLM4Nwi0uLwUwDQsxMtmeuQveHR8UMzQ1NgU3Dgo41jk6ns0cKOzgYaOHjx9AgjTAUUvIECLZNmxoUISHkSM9KiBJQkCJA4kKEoBQoWJJAiYtmjh5AmVCsCJRpHzckKCCySlUUvBYUqUHDysSPnxIEuXKA5pPRiRwxwFLFhRaIEDYUoEChCcDuECoOWKFuwW7nHkg4WELkw8/BHRRwESpt10dU8SSHevlRxIBX6C0WBE27q8GZMkKbTADjIAwYlb4GLMYShYoPTRo6FGiSJEKPyzMIFMmzJcvXbhwkSLFjJkbQW6cOHNGhAgEAdAsmk27tm0ABgIBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mailreplyall22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBLyejPTixPz29PTu3Pzu5Pzy7Ozi1LyelPTavPz+/DwqLPz67PTetPz69ERCRLSWlPTmzPz6/OzexLyajPzqvDw+PDQ2NMyurDQiJPz23PTatJyenAQCBPTevPz25LSajOzq7HxiZPTexPz65JyanBQ6bKSmpBwuTOTi5OzaxBRCdHySvGRiZHx6fBQSFERGRNzq9IyOjHx+fGxqbPzu3BwaHFSq3Aw6XAxKfPzy3Gy63ByWzJzO7Mzi9OzavBRytAx6vCSazGRKTPzy1AQKHBRGdBRyrDy63ES+3Cym1CR6rBwWVAQSLAx+xCyCtBRmnPzuzAQWLAwePPzyzKSCbAQOJByGvOTWvPTmxBQODFQ6PPTWrPzqzOzatAwGBKyObLSWfPTivKyCZEQyNKyGZOzWrOzWtOTSrOTGpNS2lJx2XDQmJCweHCQaHCQWFBwSFBQKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpkzGjhAoYMGjZMpMghQgcNFjh4mODhA4gQGkSIHAmBwAgNJEpo8KDSxAkUGjhMSEGz5gUVIiKs2PmBRQudHiwQpUnAxYsXImB0aBqjBcuoU0fKmPGChgUNH2qIqGHjg9u3bicWIFs2rYgbNnDkyGFhb8cccQ3ouJqWQo0dPFr0WMy4h48LFj4gsKriB5AeNngEaSGks+chPnwQOXFAh4oXRYxk9nAEyY7XO2wksWHDx5ATCDIoUXEBsYclTJo4cWJhuIjhSXacSPBEiZLMQY4wgRKluvXqUpyIsDElAxUqVaxcwcGCPQuWLOixaNHCZAsXBU+oqKDSxQqULF6ifNmyn/8VMOtxwcAK36kQRhdJQIFFEmKM4eCDYGyhhYAEkqFEGSuYYcUZLaDxXRpqSNRCEu6twYaFZXTQhgRd2NCCG9918AYELTjoXgNuKAFHB2RQEUYHVbQQRwlUpPHGGFwkyQUEDsgxx4lh9BhCBy2U8UQJcrSg5JIQ0FEHG3bc0QGYK+CRhx57PEGlkhM9sAEffKTQhx9+/AEIIIGoEUgLLRRFR0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailreply22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBMSihPTixPz69PTq5Pzy1Pzu5PTq1Pzy7Pzu7Ozi1LyelPTavPz+/DwqLLSajPTetPz27LSWlPzmzPz6/PTexPz67Pz29OTSzMyurPz25LyajBRCdPzuvDQmJOzexPTevOzq5BQ6bBwuTDQiJHxiZPz23Pz65LyinPzmvBxCbHySvAQCBOTi3OTq9CweHOzaxFSq3Aw6XGy63ByWzJzO7Mzi9OzavNzq9BRytAx6vBR6tPzy3AwOHDy63Ax+xCSazCym1CR6rBwWVOzizAQSLES+3CyCtBRyrBRmnGRKTPzu1MzGtAxKfAQWLAwePPTizMy6nByGvNzWxOzWrNzOtBQKDJR2ZNS2lPTmvBQODPTatKSCbOTaxLyqlAQKHFQ6PPzyzPzqzPTu1PTivOzWtKyObPzuzOTOtLSWfPzqvAwGBKyCZPTWrPTmxNzKrEQyNOzatOTGpJx2XCQaHCQWFBwSFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYuIDBQgYNGzh08DCR4oQPIDqEmDBhJQYRIzqQIFkSAoESJCKkDGFiwgkUKTpMwECz5IASKjqsSMlSA4sWQjG4qGnzhYoQSmF0iCFjBgmWGWhQrVHCxg2sOHLo2MGjB0sLYmsWQHq1p4wdPtqemGDhB1UDQFSouKHi7oQgQmSwUMyYxcQDZQWz2EFiCJEiRoyQyLzZyGIIB47YKLwDSRAiSZSoXq1kCRHNLBK8YGKjCYskTp4ogeKkt+8oUaBImZKAAxMmVKrctqL7ihTnz7FkAT5FC4cKFbZwadIFdxcvX8KLss8iJcoUBUcq2KgAJoxyMTy4jCFTxoxEHl2GLyCDncmWM2hUIQMPY2CXhhoTfTEcA2tgVwEba7Thxhs88FdBD/ZB8MUUHMJBRhw2sAGCHBKU4UaFc1RAhxnhcdhhHUzYAUIcFdxRAh4R5KGHinu4OIVEDqTBRx81xhGHHzD8wQYQetDRI4cTAcIHGWT0EQgZa1ApCBqDcBAID1Q94IEHLtBAAyGEFGKIIWqYYQYPYNZkQEAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailsend22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAIR6fIRydHxubHRqbHRmZGxeXGxaXGRWVFxSVFxOTFRGRExCREw+PEQ6PDw2NDwuLPwCBLSijOzixPz69PTq3PTu5PTu3PTu7OTi1KyelOzavPz+/DQqLPz67LSafOzetPz27Pz29KyajPTmzPz6/NzSzLyurCwiJPz25Ozi3JyOjPzuxBRGbAwSHOzexPz23KSSlPzqvBROdISavBxSdAwaLHRiZLSinNTGxMy+vBxGZNzu9BSGrAwWJMSyrKSSjFy61ETO3BRWfPz65PTqzHTK3ByqzBSWxEzW5AQWJOTWxBRCXOTu9BSOvDzO3ByavBRKbOzaxOzizKSWlCQ2TAQCBJza7BRWdNzSxJSCbMzq9BSOtCSKrAwiPOTavPzy3LymlCySrAwmPFRKTPzy1NTGrPzu1JR+bOzatPzyzCy61ByGpOzWtJyCbPTmvPzuzIS+3FymxCSuzBR6nJyCZOTWvKSObMSujOzivAwKDOTSrNzKrJyGbDwyNOzWrMy2lIx2XBwWFBQSFBQODAwGBAQGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYqMDxAoYMGjZwmEixg4cPGzqA6BBiAggRIzaQGEkSwgAMJCKgnNBhQogSJlKGOFHTpgYUG0TsnJBCxQoSE1i0KErAxYsOJJRuuAAjhkwZM2jUqGnDBQoUHTbciIEjx4YNOmbs4CGjB8kCZlGAALHBx4+YcTcACcJDyFSJBo6iGNIhhQkiG8BOKGLkCBK6SSQisHoWhZIbG5bMYALECI8mTZw8gTL1QJQXZ6VMiUylSpUlVpoYaXLFtm0EGmCjwJLlA2O9MrRsccKlC8kEXr7AdgEmwtkhX2SQ2BIkjBiSYzSQr/nyhUKZLIrJJOcexvlEBV7IvCBjRkmAMzHOaufhxDvJBWiQISAFxUUQQRovJNeEGmu4JxEDbKQhXxsfuFDGGW68IQMcccgxRxUkNRDhC3R8QMQIdZwXQ11JJGFbiB+QYccHaaTxhgt13OFBDGTgkUdRDrhAhx5k2JjGCB/swYcXMXwAYk190OGHHx/4wUaVepTxByAaoPEkSQ5wwMEJZAZipiCDDJIHIYV8OZEdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav1downarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBBQSFAQGBDQyNExKTHx6fGxqbFxeXGRiZFRWVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFxaXDw6PPz+/MTCxLS2tIyKjKSmpKSipJyanAwODDQ2NHRydERCRFRSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZzQIBwSCwaj8ikcslsOp/OgHRKlQoCgymRUDAcEIkwYgxWFBYERpHQcDwgEclEQmk8DhWL2kiIXDBwExMNGRoJaUkEEH8bEQ0cGgcWAksEHX8QHBKSHk1sfxMHH5ROBBsOICGkT2wiq1CIULKztLW2t0h2QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav1leftarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ5QIBwSCwaj8ikchgQLJGBgfNZDBAKBirRekBMtYGEYsHIgsWNhOO7tCrShDU18Hg/CJAIG0o4wCUQcksTFBUSCRYSEnpUFxgIGQkJGYyNGggbHBaVjR2QCxEeWkITHQ4IH3tPFwEMA2ajAKUgqlQTTbFEE7W5vUgGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav1rightarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNGReZAQCBMTCxGRiZMzGzOTm5LSytPTy9Pz+/CwqLOTi5Ly6vCwmLMzKzJyanJSSlBQWFKymrIyGjCQeJJyWnISChISGhHx2fKyurDw6PAwODHx6fHRydDw2PERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ2QIBwSCwaj8hkMRBQKgOCgRMZIBSk06XhEM0SA4iE4uoVLhCMhqLrdSAekMgYO5VM4BQ521mxIC4UFxBWdEkSERYYFxETGQGFSBKCGBEaGRuQSBwdeZaPXpsQCB6YZQMdEI6ZSgMepKusHh+wrCC0rLdlursGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav1uparrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBFxeXDw+PMTGxHRudPz+/JSSlLSytIyKjHR2dISChIyGjIyOjLSutLy6vKSepJyanISGhJSOlOzm7Ozu7MzGzKyurJyenDQyNGReZKSmpIR+hCwuLCQiJBwaHBQSFAwKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZtQIBwSCwaj8ikcslsOp9QYyAQFQYEAyr0Sihkn1fDAeHVLsOJNELxVaITC0bDUU6GH5AIQ8KYrNtFVxQVFBYWFxgRCREYdUQZGhYEDwgIGxAHCQocCgWOQhmhGR0epR8gqCFTq1Wtrq+wsUt0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav2downarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAQGBBwaHDQyNExKTHx6fGxqbFxeXGRiZFRSVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFRWVDw6PPz+/MTCxLS2tGRmZDQ2NAwODJyanKSmpKSipIyKjHRydBQSFERCRExOTFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAasQIBwSCwah4FkQKBsDpoBIqFgOCASCYRWm1AUFgRGkdBwPCARiWRCaTwOFYvYSIhcMOiJpJGZaDYcR0IEHXceEQ0fICEWIoJDhHcQHxIHgI9SEHeVG46YUh8OISOen1INCqWmUnOYTUxQAU9NUlRWWFtbCiRgrYNlZ2lriG8lYUd1khETE24gCZeCkRgeFBAQIAeNn9OTlXKrBJoYnKrcoaPmpmSpq3S+7u50QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav2leftarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAavQIBwSCwaj8gkMiBYNpeDZzEQXRIKBmPgmtUSDgipcAsWjxOKBaN7Tq+n6EbCIQ3E5+KtQk6gjwl7CX11D3sPBBARTQGFDYeJT2R8EhB0koKUfgATFBUSCRYSEoqcnqCiikMXGAgZCQkZqautr7FiFxoIGxwWqQC4ury+qh2tCxEexMbIRhMdDggfYs7Q0kcXAQwDbELY2txEziBmmx3jSRNMR+nk4e2b70ry80QGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav2rightarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTGxOzm7CwqLLy2vPTy9Pz+/Ly6vCQiJLSytLS2tLSutOTi5MzGzKSepIyKjJSOlKSmpMzKzJyanIyOjBwaHIyGjISGhJSSlISChBQSFJyenIR+hGxubDw+PHRydHR2dEQ+RHx6fERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8hkIIBcJgEBweAYnTYJUmMAa9USClniFtwlGg6IRFhoUKTXwwWj0FB3F46Hwl6UQyISfAB+EROCQgsUFRYSF3yJEIyBaxgWDBkaGRtclQwSHBIbEGEdGx4fGhcOICEDGBsWHBmqIq1CHRIWGRMMIyRTHRy6Er22tyONq8YdJRe0xkIDwr2/QwMfliMmZQADIxasZd4e4UYDIr7c59rc0eVFA+/m0EQD9PDt0flP/P3+BkEAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-nav2uparrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBGReZDQyNMTCxHx6fPz+/JyWnKyurHx2fDw6PJSSlISGhIyKjIyGjISChLy6vJyanOTm5PTy9OTi5MzKzLSytKSepMTGxMzGzLS2tLSutKymrHRydCQiJCwmLBwWHAwODLy2vHx+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAajQIBwSCwaj8RAAMkUBgSDZdP4JBSi06TAcEAkFNLp07BgLLzY5njRcDzO3zB1C4lEGI83Wj58SiYUFRUWdg0XEXFFAwIYGRoWGxwRZQUFHZdgRAObmx4fHiChISFKpVlKWUdPaalOAlasp1sHG4myZGZ7Yltsbgu1mUhjdRF5egmxfQJ/gYOFdrZDi40iFgiSCw8jBQmYcpydn6Ego6WorUwGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-navback22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRGZAxCZGyavExmjHyatOTy9CxihISevPz+/KzO3BRylAw+XAQCBDRWbPz6/FzC3CSuzDyexJzO5Mzq9CxSdAQOFISmxNzu9HTS5BSmxAyexDSuzJTa7Mzu9Kzi7GS21CRmjAQOHHSWtLze7AyWvHzG3BRihAQKFCTO3BS+1AyixBSWvBSOtBSStAQWJBSixDzW5BTC3BSqzBS21CTC1ETW3AQSHEze7BRqlBRmjAQCDBR+pBRefBRSdCH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMqBcMpvHgGAANQYIhWdVGDAcENQtIJBQLBgNx0MQaDuQXcghIplQDhBIxXKJYiAZGhscHR4VHyAhIiNWJBklGhIbJoQnFCcTKIxFKSgbKissJi0mJi4vLiYoMEcXKDEyMzQ1Nje2NisoOEg4KDU5K6g6OwwoKAN9SCOeMmgwz884PEq9PT4NYkPLP9jZQikN3d4AKVrjKePp3gZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-navdown22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRKZDRSbBxCXJTC1Mzi7Nzq9NTm9Bx2nAQCBNzu9JzG3Hy+1HzG3IzO5BRmjPz6/LTe7Dy61AyStCTC1FzC1AyGrETS3ETC1ETa5BRulAyuzBRylAw+XMTe7Gy+3CSqzAyexBTC3DR+nIS21KTW5Nzu/KzO3FzC3Pz+/ByixEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaRQIBwSCwaj8ikcnkMBAQDgjPAFAYKhsMBkVBUAYEFo+F4QLzVQEQyoVTOX/XBcsHA0+vMRbNBMwkRDhxuHX5GTlIeHh8gISIjFAEeiVRECiQlDAUmgxQjIhwiJHdFlycoKSIUFCEjGiGkRpcqCxYijxorsUezcxYsuoZJsxLAu0qXB7DCTJfHVQrMX9PU1Uh0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-navforward22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBBxCXDR+nIS21Aw+XJTC1Nzu/KzO3Pz+/Nzq9Pz6/MTe7KTW5FzC1Nzu9CRKZMzi7IzK3Lzi7LTe7HzG3Gy+3AyuzAyexFzC3DRSbHy+1Dy61CSqzAySvAyStLze7IzO5AyGrETa5ByixBRmjCTC1ETS3BTC3Bx2nAyWvEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaYQIBwSCwaj8hkMqBsBgTN5IAAjRoDBaq1aDggtMuAWDzoJhTgY+CwYLgZDccDwkgXI5IJZVGxXDAZGnR2QxsLHB0PHRgeHyAZDyFfVUQDCyIgIyCPIB+QJCUmlEMBEiInKCQnKSkeKSQeomoqJrUmKiArKSwZsmoCwMEBGCyxo1EGHr3HUQEEvltCBtDRAAbMW0zV29xDBkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-navhome22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQiJNze3ERCROTi5MzGzLy6vDw6PKyqrKyurBQSFGRiZGxqbGRmZISChEQ+RExKTExOTHRydDQyNOTe5FROVLSurCwqLMTCxPT29Pz6/LSutFxeXLyytLSytPz+/JSWlKympPTq7KSipNzW3BwaHHx6fKx2VJRWNHQmBFweDOzq7Ly+vNTW1JxWNLSajPTe1Ny6pKxWJNTS1IyOjJRmbPTi3OzKrNSSXMSGVHQiBHx+fJSSlPzy9IxOVOzWxOSyjNSCPLxeDJyWnIRGTOTGtMxmDLRWBHwqBIxGTLRSDDQuNNSunKxKBGwyNMSafMxqHMReDKRGDPTu9LxuPLxaDJQ+DIR+hGQqNIQyBGQiBNTO1EQKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAYSIiYQCAwQCiokEhwACBQYHBAiQhAiHlQYJCgkEC5uCkp8MDQ4NDwylmwgQlgQRERIEBBOkmxQVBgQWFwUFFxEEDLyJGAUZtQoFGhsFHLYdyoOVHsEf0SAbIAUex8mwlAUhtSIFG+3uIyTWvAIGJMEkJe76GyXbEeWUBJg4USKaBhQpVKzYoIFFiwYUBBJa8MAFCw0vYMSQMWOhBhoTKCQSUKMEiw02buDIoWOHBg0GeIhEFKAHDR8afgAJImSIioYliMws1MPkhiJGchxBkmTDCBo1hg4KQMTiBiUyhBxZ8pNFiR5MEtU0WqSJVidJNDyNKraHC5xPNKBEkTLlJ5WvUgWNvfikyhArV34+7ZEXQAAsB2iUyHLlihYtW0pwOYAFgyJDmDNr7jIIWiAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-navup22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBHSWtBRmjAQOHISmxNzu9BSmxBRihHyatPz6/Lze7CTO3BSixHTS5BTC3DzW5ByyzPz+/OTy9AyexEze7ByixGyavKzO3FzC3AyWvBS+1BR+pAQKFCRGZExmjCxihBRylCSuzBSWvBS21BSOtBRSdAw+XAxCZDyexDSyzCTC1JzO5JTa7DSuzETW3BRqlAQWJDRWbOT2/Mzq9HzG3JzS5Kzi7BSStGS21CxSdCRmjAQOFAQSHAAAACH5BAEAAAAALAAAAAAWABYAAAaeQIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbUGFAtGw0GFfheHByQi4S6/E8pDUoFYLm5kAEPJaBAVGxIcER0JHlEfICEiIxUkGyUmIgknKIhXASkonCorgSwmKQGcKE9IAi0uLxUwMTJWMzQ1NiYwBLBQHws1N7avXgs4NjkcCblMATU6KhvGyG87PAnUKV1MAj0+2zIFp1bg4eJJdkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-playeject22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAwKDJSWlFRSVBQSFKymrOzq7HRydERCRPz+/MzGzISGhJyenKSmpGxqbJyWnJSOlKSepLy2vIyOjGRiZPTu9IyGjLSutFxaXExOTHx2fGReZAQCBAQGBBwaHCQiJLSytKyurJSSlFxeXNze3LS2tIyKjFxWXHRudAwGDBQOFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbVKFQsGItBdBhpgh4PxIJvRC8cA4oiMy8bvQhJhMAYTFBVOURAWEw0QFxcMERAYCBluVxobDxkVHJocmBwEGgmEQx0dHh0CpKmkH6odVlanBR8FtAIFtiCkSB0LISEiGCIGIxAPDySuRwIOBwrOzwoHJRHJRh0jJgMj2gMnERQUCNVFHQQoCBvo6CkICATjRB0qp7b1K6qv+foyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-playend22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTCxGReZBQSFOzm7AwKDKymrJSSlFRSVCwqLLy6vPTy9OTe5Ozq7CQiJLSytOTi5BwaHPz+/HRydMzKzKSepJSOlKSipJyanIyGjIyKjKyurISGhMzGzJyWnHR2dISChIyOjLSutDw+PERCRHx6fJSWlIR+hJyenGRmZHx2fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8ikMBBQKgOCgRMZIBSkxYHWoDVWD9EigpBQLLBERsPxCA8NDUhjgTBGJJNGG02RVBQWdUV3FxgZe0IGfoAGdhoXGxwdiAYef4FGFBoeHB8dGSBRihUhIo1FBhkbIyMkJRYmAwYal4JEBh2RChIWJ1IIGxUZFqdECCgkHR6wWAYpFR2YWSobvL5vFgfDaEMDIivMRBEsD9HcQgMWvecDLB0tZ0btsfJa9vLXU/X6/P3+b0EAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-playpause22:play play22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBAwODMTCxKSmpJSWlFRSVAQGBBwaHLSutOzq7Ly6vCQeJPz+/Hx2fBQWFGxubLSytJSOlBQOFAwKDJSSlJyWnIyOjHRydNze3GRiZAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWBICCOZGmeaKqubOumQSDEgRjPMSoMRGEcol3vh0IkFAtDDWBEKlGMRKPgEIii0yrqIS1ArADu9KuLNCSOSdCMVp8ohEZFC4DL6SaBpXGh6/l4JX8XZACDhXkYCn1LAoqMUBAZEhBLDJKUSyYBGmhPAJyemiU0NDaloy+qq6ytI8whACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-playstart22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExOTAwKDAQGBJSSlHx+fBQSFMTCxKymrFRSVOzu7GxqbLSytLy6vJyanPz+/GReZBwaHHRydKSepKSipGRiZJyWnAwODLSutKSmpISChPTu9ISGhFxaXJSWlIyGjJSOlERCRIyKjDw2PIyOjLy2vOzm7Dw6PLS2tCQmJOTe5GxmbDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa7QIBwSCwaj8ik0hgQLJGBgbMoqBIKU2LAcMgOEQmFYeEFbBmNMgDhYDwWBC0k4pCoJ46IgRIXBioRCRYXamwRGBQIfgaBFhiERhkaenxmCoEbBhyQRYaIGVsdghgem4UWegcEBB8UHhsgIaZGBBgRIpUIIxQhChginEQIIBEklWslFyYnBsFfFCi4WQgpFBwqFxNGKxcsxl4IAS0NZEYCF3vlwgEfUuZV8JEuI2pPAARN9kcE9fr+SwaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-playstop22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAwKDBQSFBwaHCQmJJSSlISChJSOlJSWlGxqbGRiZNTS1PTy9Pz+/Ozm7OTi5FRSVIyKjOTe5MTCxIR+hExOTHR2dLy6vLSytLy2vHRydFxWXIyGjIyOjPz2/FRWVHx6fExKTMzOzJyanKSmpKyqrKSipAQGBLSutHx2fDw6PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcslsAgKCAWEQjQ4KgSwyYDAcugZEQqFYYJECA6PhaLcfEEUkgJZAGJB8fkKpWOhHAxcOGBQZGBoaGQgbHIBGAhUOGR0SBxISBh4Xf0iCHxQSlRIIXhsgj0UCIaCXmJgHGyKpRJ+hmB5dHQqOaCENIx0epBIkBhdzngoPGCQlJifQJBvJRygRKRcKGxcXGypys1srEREc5SLnICLiR1koLFVUWfRO9vf4+UwyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-textblock22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUWzvNzo33GfFl5jVlonlTrr1DbvFi9vjeeNUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textbold22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIxhI+py+0Powm0VnknjVkH2AEhE45LZ55Wqn6e65TsMc5eYosbksswubJIhsSiccgvAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-textcenter22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUbz3Sh7yIWfFHKjVl4nmFrr1Lpr7LwkjeeIUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textitalic22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py+0P4wqUSlQvttrkDnyaOHIdeaGRupplAIauVM3xjeeOUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textleft22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+pyw0Bo5zB2UXz3Sp7yG2fFJajVjonmIor2TJvfL0wjecIXQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textright22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUfz3SZ7yIXdF4kWqZkbCqoMO7kXLC+wVOe6YRQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text22:text text22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBBwaHAwKDBQSFLy+vLS2tJSWlBQWFKyqrFRSVCwqLDQyNNTS1GxqbFxaXJyanIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAVcICCOZGmKQSoMaZsShBsQBdAapHvgaIDUqUPJlRjSbAoT0fRDKgODRbF0PLUYjZO2F2Bst9evNix+dsvDlGKK5jraudQb7qbX6a2HEJ+ycyF+LRE8ZTI+fX5oGCEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textunder22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIvhI+py+0PowmUnhpeVVnb1DkbCI1I2JhX+Z0sOr2cTHpwK7a4rUr+hAnufsTirwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewchoose22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz69PTq5Pz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq70466Cl+AMxBVwnFIVRAmQHCIeBrC1L3tQgJ/SaEbeeC1PLBHE2ybFI9A1HzstHEIK6YCmhDTmBybQaHYJn7QC5zKeytIQe1+pKNE6P2yMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewdetailed22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAQ+EMhJq7046817+MLQUQFRGMc4lQaSAkcMx3QltMmrDrSu/sCgEPgJhIiFk89DaL1qPRnlhsgBebWhdstVESIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewicon22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz69PTq5AQCBPz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARWEMhJq7046z2DF0PlBeAVEERhiKhqHgWyUgEsX0KczFOO7JeBYciTCImc5ITIXDKHyqhU9AnRqq9UEVDTvmLbGhin2/qAliOUot5OLc81IO5+2+8WewQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewmag-22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbKQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/avno2BBf/MCClSob4iBIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewmag22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbIQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/cunr9S8gAIRFhTCLAgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewmag+22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbQQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/4zT766vRI+fvHD4CPgwcJ9qg0UB85JA0dDjEQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewmulticolumn22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq7046813+MJQfUF4BURhHGO6noSBsEcNoDJtS4KcsJQe4ncZ1HYT47HDbDqfUAnJRJmKLIGCCjjJbmE5wBI3EyOFxKCPS1EiJW52dE6vZyIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewtext22:view view22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIkhI+py+0Po2ShBlOxzbP7n2yaJoLm+ZTcxqHuC6hXzML2HVEFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewtree22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz+/Pz69Pzu5PTq5OzaxBQOFOzKpFRWVFxWXOzexPTexCH5BAEAAAAALAAAAAAWABYAAARPEMhJq704g6A779kHCORAgNskFMYhakE8FkjyBcoWv+JwJItXaELYCTFHlCSpZKKcoB5jYHpOGgUadLKbIRw3jhEzQDyCSuI4zW673yhDBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde b/ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde<br/>deleted file mode 100644<br/>index 51f76a0488..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,658 +0,0 @@</div><div class='del'>-1downarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PUZi0zmTtypflV0VdRJbm6fgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-1leftarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAP///wAAACH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxqdwoNGTmgvy9px/IEWBWRkKZ2oWrKu4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-1rightarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxCtwoNHTmpvy3rxnnwQh1mUI52o6rCu6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-1uparrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PWwhxzmetzFpxnnxfRJbmufgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-2downarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+pq+EPXYpxUckoO3AjbF3dJwahllXe6AFgC8d+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-2leftarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pyxf5VohmSlsxmpjTzAHeN5ak6UHpqKRi2GpwvH3Q3eT64RcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-2rightarrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pq5HOAjQyVnqfhHue7oAaKH5kiW0AmnLqaHomkj02g+e6XwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-2uparrow-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIghI+pyxfR0HsRzNnuXVqn3mVQZWFRyIDjp65Ga5Ly4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-abs-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAQABAAAAIwhI95ocn2GlySTiME1iC+DIKdNWxANl4HaqWr055cy6Bs6dahmJsyXVFFJJ7gyF8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-airbrush-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPzCxMQCBIQCBPz+/MTCxKSipFxaXDQyNISChAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARUEMhJZxCjanBH3hY2EFJgVt0YcEW7liLxBoVxzPHL2msqUzSeT2c5HBC5jQmROKgAhCgKEVBQo6YAqVQIHBQ93ZbmBWt+nDJRgiYMvmuoThWXT/wRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-attach-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBPz+/AQCBAAAACH5BAEAAAAALAAAAAAQABAAAAI2hAOCxg2h0nJHyEshi9HpxU1GOCLdZoKpQ15nibUoprKp9lh2oucUxsBRXsJh4Hjs/QTMpr8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-back-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRSdBRObCQ2TBxObISevAQCBNzu/BRGZPz6/FzC3Pz+/HTS5ByyzJze7Mzq9ITC3AQWLAyWvBSavFyuxAwaLAwSHBRafBSOrDzW5AyixCS61ETW3CzG1AQeLAweLAxefBSStEze7CSWtCyatBSCnBRWfAwmPBRWdByixAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZiQIBwSCwah4HjUTBQFgkFg3MoKBykU0QhoUAIAuAksbpgNByPxQMSGVsVDYlkIqdUiJYLJqORbDgcHRseRR8gISIaEyMkGCVYRBEmeyAnlgaQkSgpmU4RAZ1OKqFOpFNGfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-blend-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBARCRAQCBASChATCxATCBASCBAAAACH5BAEAAAAALAAAAAAQABAAAANHCLrc/izISauYI5NduvlXMIjEQBSnUYCYxnmsSJrouhqh6J4wLo0mWuqWy5heN58seBrGdEdeMgQsNW0ggXbL7Qog4HDDnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-bookmark_add-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy6vERGRFRWVDQyNKSipAQCBMTGxKyurISChJSSlJyanHR2dIyKjPz+xISGhPz+BGxubMTCBHx+fPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVfICACwWieY1CibCCsrBkMb0zchTEcNYsIiYHiwIOdEAvigdFQGE0Ix4NBbSAgsWjk+jBIAlcUYrJASChnSXZSoUDelKfoKpFALJA61ueGI2IAZmhogGFmCGGAgXsifiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-bookmark_folder-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExKTBQWFOTi5OTm5CwqLPz+/PTy9Ozu7FRSVNza3PT29KSmpAQ6XARqnNTS1JyenGRiZJTa9Mzq9JzO5MTGxIyOjKSipFxeXMzOzDw+PDy65FTC7HS2zMzm7MzKzKSenASq5Bx+rBSGrFyqzLSytDw6NAR+zBRejBxqnLSyrERCRIyqvDRujKyurMTCvOzq7AQ2VDQ2NNze3KyqrGxqbLS2tLy6vCwuLDw6PAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAawQIAQEBAMh4GjcEAoCAQGYSCpDBwQiQJBEVhQj1YGo1DoNqZTx8PhODAWZUik0ZAkHRNKZe0IWC4RGBkBGhsOHB0eFR97bBdcICEbAA4iIyQlioxrGhEmJ5QoKSoqJCOZiw4rGixEYi0uo6WYDi8wkwAsCTFksLIuMi+tADMLNAsLEBAgLSMpMjW4RCc2MCAgFjA3MA4R0kgzGS84Ny8vDqBKSDkKETUOOurqAQagfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-bookmark-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy+vERGRFRWVDQ2NKSmpAQCBKyurMTGxISChJyanHR2dIyKjGxubHRydGRmZIyOjFxeXHx6fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICACwWieY1CibCCsrBkMb0zchSEcNYskCtqBBzshFkOGQFk0IRqOxqPBODRHCMhCQKteRc9FI/KQWGOIyFYgkDC+gPR4snCcfRGKOIKIgSMQE31+f4OEYCZ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-bookmark_toolbar-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy6vERGRFRWVDQ2NKSipAQCBKyqrMTCxKyurISGhJSSlJyanHR2dIyKjGxubIyOjISChHx+fPz+/MTGxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVpICACwWieY1CibCCsrBkMb0zchTEcNYskCsXiwIOdEAzioeFIGE2IB6RBbT5HiAhEIpk6Y9kJBMJoHK6iLIU8kZxFlXhlIp/XJ4BKUIGoWIJ9f3x5e32FeoB5goGAfokTCJEIFJKTlX4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-bottom-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObCRKZBxCXAwyTKTK3Ozy/NTm9GSivAQWHNzu/FzC3IzO5CySrAQOHAyuzETS3CSWtAyOtETa5Aw2VLze7ByWtBy61BSavAxWdBRCXAwqPAQCBDR+nKTe7FS+1Eze7ByixBRmjPz+/AyexAyixAQKFBRqjAQGDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZhQIBwSCwaj0hAYCkYEJLKguGASEADigWj4bgaHpBINykwSCYRa5HCFFQsF0xGo9lwhpSOwfORYC4gISJ3RAQdIyQYJSAlImNrh4uNJkl5CoKUUBQnjlB4KFAcoqOknkh+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-brace-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAQABAAAAI2hI9pEXq8mnsNzggsEMJwbHGimFXS4HUfpKUIq3QJ036vuakyWvbjCJLYbL2WgyW5WIw3g78AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-brackets-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAQABAAAAIzhI8JwXocllMxTlSREGY/2W2iJ1nAEAJklpCfeXAJG8sY6JGowY7jW0sBL0NiqTGBAPwFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-charset-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAInhI+pqxH8kFsvsgtm1vvEaoBZSH6j5FSaRY4me4pyq1ochuf6fvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-colorize-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPz+BAQCBPz+/MTCxISC/AQChMTC/ERCBPyqXMRaBATCxASChPzerKSipMT+/MQCBATCBASCBARCRISChMT+xDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVnICAGgWieZyCQKGuqZPkGgwyv60gONRDvNlqt9Pv5BgRCYVj8IQ3L4qE4KFiZzRiP90MgEj+FYtGLIRiJQaMxUDjIxFoi8YBAIo3FQjIJ7iAUERNqDTI6PBGJfT0oFVpsMSgzkSh+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-colorpicker-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBARCBDQyNMT+xATCBASCBPz+/FxaXISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EMhJZRCjahBIMdlmeV8gBl3xCabWGarBihwBz+eB2O0WHIFEp1f5BU1EilFI4wCZtGWy+JwWj00OynrNTvwRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-completion-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/Ly+vHx+fAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM/CLrcGjBKCYK4+NoMs+jWIBIdZ50QuWGgMASD+oGnO5beR+x7UE3AyGKV0wxnpeSxyDoGN74Hszl8QhxYhj8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-configure-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChGRmZMTCxKSipLS2tHx6fPz+/OTm5FxaXOzu7DQyNMzOzAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhAq7wYBDECKVSGBcbRfcEYauSZXgFCrEEXgDCSeIEyzKSXZoBYVCoJVIqBGByKu0Cy8QHxmgNngWCkGgqsGWFseu6oMApoXHAWhWnKrv0UqeYDe0YO10/6fhJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-connect_creating-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZbihUiz60FPnfaA0iBpBVGdHEYWxToEoSHBRHHM9AgSEQRcj+AYkYAJxIPKQFUJiOdTJQFIDU6dYzKKFhTCM+E5g4mXaDAyrlogEG+DGTecA7wsP8EcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connect_established-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipDQyNMTCxMTGxISChFxaXMzGzAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZxCjgsAtDtUlCOA1gJQ4kl/IDatAoF7xxkS6GgEBr6jAobCyBX42SQBxMOx6A8MhiGASR8YDgrYsNEeJ0zaEGZY7uoH2oB6nOUwtbdLaVOeTUwo/8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connect_no-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBAQCBERCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEMhJq704axBEHoPUEdhQGMNYFuwxkKInDYjBniEnwMCQIIebSzXx/WwsFK+YMABZikWuYlrUCtZpEYv4WRPaHhb064YB41kCfJFSQBh/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-contents2-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBDyKhDSChGSinFSWlEySjCx+fHSqrGSipESOjCR6dKTGxISytIy6vFSalBxydAQeHHyurAxubARmZCR+fBx2dDyKjPz+/MzKzLTS1IyOjAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOZGmKQXCWqTCoa0oUxnDAZIrsSaEMCxwgwGggHI3E47eA4AKRogQxcy0mFFhgEW3MCoOKBZsdUrhFxSUMyT7P3bAlhcnk4BoHvb4RBuABGHwpJn+BGX1CLAGJKzmKjpF+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-contents-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExCNGSenHRmVCwqJPTq1GxeTHRqXPz+/DwyJPTq3Ny+lOzexPzy5HRuVFSWlNzClPTexIR2ZOzevPz29AxqbPz6/IR+ZDyKjPTy5IyCZPz27ESOjJySfDSGhPTm1PTizJSKdDSChNzWxMS2nIR6ZKyijNzOrOzWtIx+bLSifNTGrMy6lIx+ZCRWRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQEAAQCwWBYJiYEAoGAFIw0E5QCScAIVikUgQqNargtFwdB9KSDhxiEjMiUlgHlB3E48IpdKdLCxzEAQJFxUTblwJGH9zGQgVGhUbbhxdG4wBHQQaCwaTb10emB8EBiAhInp8CSKYIw8kDRSfDiUmJ4xCIxMoKSoRJRMrJyy5uhMtLisTLCQkC8bHGBMj1daARgEjLyN03kPZc09FfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-contexthelp-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQChAQCBAAAACH5BAEAAAAALAAAAAAQABAAAAIzhH+hIeiwVmtOUcjENaxqjVjhByaBSZZVl24Y1V6iEVMzkD4bqD700bshgh1fzwd0IfwFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-crop-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMT+xATCBASCBISChPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAM0CLrc/iG+FsQgYapKbp7c4IFCZ2FQOQQE6oSl9Koxabrz/eVDDXat3atAlEEMSKFmyfAnAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-decrypted-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJExGHEQ+FCQiDBwaDBweDGxiLHxyNHRuPIR+RIyGZJSSfFxaRGxmLJyaXNzWpNTOnMzGnMS+jJSKTGReLKyqjPTu1NzarLSufKyibJySXIyGVGxiNFxaXLSytPT29Ozu7OTi5NTS1KyurGxqVCQeDJSSjLS2tNTW1KSmpGRiLKSebOzuzJSOXExONExGLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaVQIBwOAwYA8SkMCAYOAnKYiFAIAQGyOgVCggYuEovVxztMpdnwAGRSCgUCwOjIeQ6HpCIZDKRUNYMRBUWF4UYGRoWGxyBRR0eHxgaICEiIyR0QyUmJygpKgUrAxMsLUQlKyieoKIuEAunK52fBS8DLiywQySpnjC1Mbi6QjIzNBeSIBY1EQfDQgosLAEUNjY3Co1DfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-down-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObCRKZBxCXAwyTKTK3Ozy/NTm9GSivAQWHNzu/FzC3IzO5CySrAQOHAyuzETS3CSWtAyOtETa5Aw2VLze7ByWtBy61BSavAxWdBRCXAwqPAQCBDR+nKTe7FS+1Eze7ByixBRmjPz+/AyexAyixAQKFBRqjAQGDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZeQIBwSCwaj0hAYCkYEJLKguGASEADigWj4bgaHpBINykwSCYRa5HCFFQsF0xGo9lwhpSOwfORYC4gISJ3RAQdIyQYJSAlImNrh4uNJkl5CoKUUBQnjlB4KJ6hokN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editclear-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIuhI+pm+EPnwmi2msDoLgLzQWDV4HlSJof6qki+W0n7LKdCpdyrm/Rr2EIhwp/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editcopy-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXPwCBNze3GxubERCRPz+/Pz29Pzy5OTe3LS2tAQCBPTq3PTizLyulKyqrOzexLymhLy+vPTy9OzWvLyifMTCxHRydOzSrLyihPz6/OTKpLyabOzu7OTm5MS2nMSqjKSipDQyNJyenLSytOTi5NTS1JyanNTW1JSWlLy6vKyurAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAaUQIBwCAgYj0eAYLkcEJBIZWFaGBie0ICUOnBiowKq4YBIKIbJcGG8YDQUDoHTKGU/HhBFpHrVIiQHbQ8TFAoVBRZeSoEIgxcYhhkSAmZKghcXGht6EhwdDmcRHh4NHxgbmwkcCwIgZwqwsbAhCR0CCiIKWQAOCQkjJAolJrpQShK2wicoxVEJKSMqDiAizLuysiF+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editcut-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIwhI9pwaHrGFRBNDdPlYB3bWHQ1YXPtYln+iCpmqCDp6El7Ylsp6ssR1uYSKuW0V8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-editdelete-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPT29GxubMzOzDQyNIyKjHRydERCROTi3IyKhPz29Ox6bPzCxPzy7PTm3NS6rIQCBMxCNPTq3PTi1PTezMyynPTm1PTaxOzWvMyulOzGrMymhPTq5OzOtNTKxNTOzNTCtNS+rMSehAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaKQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhSEQkFgrBAcr1URiPhKAsDD3QB8RhA3FM0IlLHnyUTVBMSFBUWfl0XGBMTGBcZGodmcQWKjpAbHIgIBY2LHRoempOdjooTGx8giIOPFYofISJ+DyMXI6AfFySyfiUmJSUnKBYcICIpfgELzM3OZX5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edit-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaVMR+RPzKjNze3AQCBMR6RPzGjPyODPz+/MzOzPyKDPyKBPz29OTWzPyGDPyGBOx6BOza1OR2BKROBNSOXKRKBBwOBOzu7PTWxPzizOySZPyCDFxaXOy2lNRyRMxmJCQOBPTm1OzStPTKrMR+XIRWLFxGNCQSBDQyNIRSNDQuJERGRLyqlNzSvIx6ZKRuVEw6LLSyrLymhKSShBwaFFROTJyWjMS+vNzW1OTazNzKrHRqXOzezOTOpPTq3OzWvOTStLyedMS+rLy2pMSynMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAewgAAAAYSFhoQCA4IBBI2OjgUGBwiLBAmXlpcKkgsMlZcJBA0JDpIPEBGVjwkSBgOnExSfmBIVBxAMExYXswkYGRobHLq8gh2PHhoeHyAWIYKzIiMkJSYnKCnQg5YNHtQqKywtK9qMBC4vMDEBMjIz2dCMDTQ1Njc4OToz5PEEOzw3ZPToMcLHO23HfogQ0QMIkCA+hPBbhAPHECJFjMyYIUQIvEUpUqwQOXKkSEF+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editpaste-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQiFHRqNIx+LFxSBDw6PKSaRPz+/NTOjKyiZDw+POTe3AQCBIR2HPT23Ly2dIR2FMTCxLS2tCQmJKSipExGLHx+fHR2dJyenJyanJSSlERCRGRmZNTW1ERGRNze3GxubBweHMzOzJSWlIyOjHRydPz29MzKzIyKjPTq3Ly2rLy+vISGhPzy5LymhISChPTizOzWvKyurPTexOzSrDQyNHx6fCwuLGxqbOzKpMSabAQGBMS2nLyulMSidAAAACH5BAEAAAAALAAAAAAQABAAAAa7QIBQGBAMCMMkoMAsGA6IBKFZECoWDEbDgXgYIIRIRDJZMigUMKHCrlgul7KCgcloNJu8fsMpFzoZgRoeHx0fHwsgGyEACiIjIxokhAeVByUmG0snkpIbC5YHF4obBREkJCgon5YmKQsqDAUrqiwsrAcmLSkpLrISLC/CrCYOKTAxvgUywhYvGx+6xzM0vjUSNhdvn7zIMdUMNxw4IByKH8fINDk6DABZWTsbYzw9Li4+7UoAHvD+4X6CAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editshred-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbGxubMzOzPz69DQyNIyKjERCRPz29PT29OTi3IyKhPz27PTu5PTy5Pz6/Pzy7PTq3OzexLyqlPTm1PTizOzavLyqjOzWvOzaxLyifOzizOTOpAQCBOzezAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaEQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhWEQkFYYHkeqkMxKFBFpq9jgdkEGlPqwrJhCIY2N8FFRYUFxcYGX9dgRKEGhiHiYEOhBcbGBwdiQEOARcBGwEeAZllAgEUnQEfoQEgmp4hrCKtrwEYsrRlTiMBJAG8syN/IyMAxMXHSH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edittrash-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipFxaXPz+/MTCxISChDQyNCH5BAEAAAAALAAAAAAQABAAAANQCKrRsZA5EYZ7K5BdugkdlQVCsRHdoGLMRwqw8UWvIKvGwTICQdmGgY7W+92GEJKPdNwBlMYgMlNkSp3QgOxKXAKFWE0UHHlObI3yyFH2JwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-encrypted-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJEQ+FExGHCQiDBwaDGxiLHxyNHRuPIR+TIyGZJSSfFxaRFxWJGRiLJyaXNzWpNTOnMzGnLy2hJSKTGReLKyqjPTu1NzarMS+jLSyfKyibJySXIyGVCQeDLSytPT29Ozu7OTi5NTS1KyurJSSjGxqVFxaXLS2tKSebOzuzLSufJSOXExGLGRiTExONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwGCgGhkhkQDBoEpLKQoBACAyOUID1qTVwoQGvMPxNFgVjAxp6QCQUicSCwVgkG44HJCKRRCYUCAxIFRYXhxgZGhYbHINEHR4fGCAhIiMkFSVKJicoKSoFKwMsLZtDLison6GjLA92qCueoAUvpC2xQhWqrLYDErmEMDEXlDIwMxAHukI0NS01EzY2NAmPAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-eraser-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAAT+BMTC/AQCBISC/AQChPzCxPz+/MQCBIQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EMhJZRA120GwnsEgdh8QiqKXnSi5oqNKsbFWGEYrT8Vx4JydpOf7uSrEIkIISPqWtkIS+pH2qCUptgTYavwRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-exec-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBEQ+PBwaHLy+vMzOzGxqZHx+dKyqnKymnIR+dNTW1MTCxJyOfLySVMSaVMSeVMSebJyWhOSmTOSuVNyubPS+dKSWhHR2dDw+PIyKhNymTNSaTEw+JOy+fPzSnLSyrISChDQyNDw6NMzKzLy2rMyiXGxWLAQCBHRqTPzerNy+lMzGvCwuLAwKDDQyLJyWlNy6jPTGhGxaRGxiRPz2vOTStLy2tFRSTMS+tOzGlPzmtPTixGRiXCwqJLy6tOTWxPTq1MzKxMzOxISCfHRybLS2tHR2bCQmJExORMTCvMTGxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeogACCg4SFhoIBAYeDAogDA4oAjYQCBAEFBgcICQUBCpODAQsMDQ4PEBGWhgUMDxITFBUUFheDGAYZCA0aGxwcHR4QHwwgISILIyQlGiYnJygpKisEIywALS4vMBoxMjM0KTU2LC2ENzg5wDo6Owo8hT0+Lx8/OztAQR9C1oInQz4FMBAp8sEIhgIEMpwYdASJCwAYkihR5OLGkUUAMmTACK8Hx4+C/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-exit-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBDQyNHR2dCH5BAEAAAAALAAAAAAQABAAAAI4hI+pFrHb3nEg1iWiDiINCwYDko0V9XUTda6I1TIsUMpGinyzbB6ZeGuoEr+GUDL4CXqSphPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-fileclose-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCQiJBwaHAQCBDQyNDw6PFxaXFRSVERGRCwqLAwODGRiZHx6fPz+/GxqbAwKDCQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVaICCOZGmeqBgEwjCkRGEcSKK4JrEcBrMgAdeLVDg0GguGsYEbBQyGYyN6FDoPDIf0+LCKBIgetQERDgGDBGIpNY8GioAU0m6KXFw883w3+/l9f4AkfimGIn4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-filefind-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBCQmJDw+PBQSFAQCBMza3NTm5MTW1HyChOT29Ozq7MTq7Kze5Kzm7Oz6/NTy9Iza5GzGzKzS1Nzy9Nz29Kzq9HTGzHTK1Lza3AwKDLzu9JTi7HTW5GTCzITO1Mzq7Hza5FTK1ESyvHzKzKzW3DQyNDyqtDw6PIzW5HzGzAT+/Dw+RKyurNTOzMTGxMS+tJSGdATCxHRydLSqpLymnLSijBweHERCRNze3Pz69PTy9Oze1OTSxOTGrMSqlLy+vPTu5OzSvMymjNTGvNS+tMy2pMyunMSefAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe4gACCAAECA4OIiAIEBQYHBAKJgwIICQoLDA0IkZIECQ4PCxARCwSSAxITFA8VEBYXGBmJAQYLGhUbHB0eH7KIGRIMEBAgISIjJKaIJQQLFxERIialkieUGigpKRoIBCqJKyyLBwvJAioEyoICLS4v6QQwMQQyLuqLli8zNDU2BCf1lN3AkUPHDh49fAQAAEnGD1MCCALZEaSHkIUMBQS8wWMIkSJGhBzBmFEGgRsBUqpMiSgdAD+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-filenew-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz6/GxubNTKxDQyNIyKhHRydERCROTi3PT29Pz29Pzy7PTq3My2pPzu5PTi1NS+rPTq5PTezMyynPTm1Pz69OzWvMyqjPTu5PTm3OzOtOzGrMSehNTCtNS+tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ/QAAgQCwWhUhhQMBkDgKEQFIpKFgLhgMiOl1eC4iEYrtIer+MxsFRRgYe3wLkMWC0qXE5/T6sfiMSExR8Z1YRFRMWF4RwYIcYFhkahH6AGBuRk2YCCBwSFZgdHR6UgB8gkR0hpJsSGCAZoiEiI4QKtyQlFBQeHrVmC8HCw21+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileopen-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBOSmZPzSnPzChPzGhPyuZEwyHExOTFROTFxaVFRSTMSGTPT29Ozu7Nze3NTS1MzKzMTGxLy6vLS2tLSytDQyNOTm5OTi5Ly+vKyqrKSmpIyOjLR+RNTW1MzOzJyenGxqZBweHKSinJSWlExKTMTCxKyurGxubBQSFAwKDJyanERCRERGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaRQIBwGCgGhkhkEWA8HpNPojFJFU6ryitTiw0IBgRBkxsYFAiGtDodDZwPCERCEV8sEk0CI9FoOB4BEBESExQVFgEEBw8PFxcYEBIZGhscCEwdCxAPGA8eHxkUGyAhIkwHEREQqxEZExUjJCVWCBAZJhEmGRUnoygpQioZGxsnxsQrHByzQiJxz3EsLSwWpkJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileprint-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRKNAQCBPz+/MTCxExKLPTq5Pz29Pz6/OzezPT29PTu7PTy7NzClOzm1PTu5LSabJyanPTm3FxaXOzCjOTKrOzi1OzaxOTSvJyenGRmZLyyTKSipDQyNERCROTi5Hx+fMzKzJSSlIyOjISChLS2tAT+BDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaYQIBwKAwIBMTkMDAYEApIpVBgOCAOg4RRGlAoEAuGIdGITgWOq4LxcCQgZkEkIHksHgYJOR6ZQCgVFhYJFxgTBVMZihoCfxUYDWUbUBGKGREcjBoQEB2TAB4CAx+Vl5WMhyACHiEhH6IfIiMktCQgE0cZJQStr6O2t6EARxO6vK6iEx4dZsMCxbsmBB4nzUTEutVSSUdmfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filequickprint-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+/ISChERCBDQyNPz+xPz+BFxaXPwCBMTCxAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMhAq5UYBME7D9kkBMNGjqHmeWBoDhwsEIS7coVx1NhbCrmdzROk9SyU4GEJ2twECISOUNokEopsVrobKCgCrZa73IHFYy4VyZ5WNIO4vBhvse8gfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filesave-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBFRSVMTCxKyurPz+/JSWlFRWVJyenKSipJSSlOzu7ISChISGhIyOjHR2dJyanIyKjHx6fMzOzGRiZAQGBFxeXGRmZHRydGxqbAwODOTm5ExOTERGRExKTHx+fGxubNza3Dw+PDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaAQIAQECgOj0jBgFAoBpBHpaFAbRqRh0F1a30ClAhuNZHwZhViqgFhJizSjIZXQCAoHOKHYw5xRBiAElQTFAoVQgINFBYXGBkZFxYHGRqIDBQbmRwdHgKeH2YgHpmkIR0HAhFeTqSZIhwCFIdIrBsjAgcPXlBERZ4Gu7xCRZVDfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-fill-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBMT+xASCBMQCBATCBPwCBIQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARSEMhJq50hXBvE0JsUEMXwhYFBmOeVDsVqgpS6luRc32RR6hLCTSCQ/VqEwwDhK5Z+Ao3wEPAViL6BR6PSZKyCa6uLAbcAZEznLDHQ1BZDiOKPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-filter-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipMTCxISChMTGxAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM3CLrcDiGGt6IQQ7pI8PjSVHUeqFVBNxRfFjXSZYqwENoUNFx4rve+wI6WEwKLQ5/CSCw2lQ9/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-find-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1ISChOTy9Mzq7Kze5Kzm7HyChOT29Oz6/Nzy9Lzu7JTW3GTCzERCRLza3NTy9Nz29Mzu9Kzq9Ize7HTGzHzK1AwKDMTq7JTi7HTW5HzGzKzS1IzW5Hza5FTK1ESyvLTa3HTK1GzG1DyqtLzu9IzK1AT+/Dw+RAQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaSQIAQEBAMhkjBUEAoGA4EJXKJSCQUC0ZDCmg0hATHAxKRTCIEYYMiMFYsF0xGs+FUOl0BJRAweCIRHyATIRhpRAEAHSILIyQgJSYhJ4dIBBEoISkmKiuVSQgRIyEsEQgELVNCLgQVCiJRLQSfli9pMAQxMrRcQ1G6tAC9AL+7al+qxALACG1Kw8oxBGt7yWBpfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-finish-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAwyTBRObAw2VDR+nAQCBCRKZOzy/KTe7Pz+/KTK3Nzu/Lze7FS+1AyexAyuzBSavAyOtBSmzOTy/BRqjNTm9IzO5ETS3ETa5By61AyixByixBRmjAQGDBxCXGSivCySrCSWtBTC3AQOHAQWHAxWdEze7AQKFBRCXAwqPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZtQIBwSCwahYGjUjBQGgWE5LCgNBwITSFVKOgKDAZEIqodChSLw4HRcIyTW4Dg0HhAIhGIZEIJxA0VFhcYGRAaGBscHXEeHyAhIQ4iiBwjAHEBJCMjJCUmiSdlRyigU0oolURxRSmrTpevsUN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-flag-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBMTCxPz+/MQCBPzCxPwCBAAAACH5BAEAAAAALAAAAAAQABAAAAM5CLrcruG9QCULokqKR44NJQykQGgXSRaEcYJLsLLu6wSFoRMvCuk1kO9ni8GMt6MForQMl89NxJ8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_new-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBPz+hPz+BOSmZPzSnPzChFxaXMTCBPyuZPz+xPzGhEwyHExOTPz+/MSGTFROTPT29OTm5KyurDQyNNza3Ozq5Nze3LR+RLy+vJyenMzKzNTS1Ly6vJSWlFRSTMzOzMTGxLS2tKSmpGxubBQSFAwKDKSinJyanIyOjCQiJERCRERGRBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaNQIBwSCwaj8ikcokMCIqBaEDoBAQG1meAUDAQpIcBQoy1dg2JdBqhECgQ1IWB0WgcBIOBwIHXBwwPEBEREhIBbG4IExR/DBUVFhIXV2NjDVYYDY8SFU4ZVxpVAQwbGxynGxkdTh6XVh8gGSGzGSITIxokJUImGSMTwLcnKCkprgAqDSt1zCssKxQtQ35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-forward-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAwyTBRObAw2VDR+nCRKZOzy/KTe7Pz+/KTK3Nzu/Lze7FS+1AyexAyuzBSavAyOtBSmzOTy/BRqjNTm9IzO5ETS3ETa5By61AyixByixBRmjAQGDBxCXGSivCySrCSWtBTC3AQOHAQWHAxWdEze7AQKFBRCXAwqPAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZjQIBwSCwahYGjUjBQGgWEpHNYMBCaT4G2UDggos+EwmBYMBpf6VBgYDgeEMgjIpmoAQVKxXLBPDIXGhscRB0eHyAgDSGBGyJFASMiIiMkJYImUwAnmJqbjp4AKCmhAKSlTn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-frac-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBAQGBIQChCH5BAEAAAAALAAAAAAQABAAAAInhA9hig0SAmQOxeouPrFTzHzbCAzmiZ4k2S1ryHKsoo3tptXg3fgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-frameprint-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRKNAQCBPz+/MTCxExKLPTq5Pz29Pz6/OzezPTy7PT29NzClPTu7PTu5PTm3LSabJyanOzi1FxaXOzCjOTKrOTSvJyenGRmZLyyTKSipDQyNERCROTi5MzKzIyOjLS2tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaPQIBwKAwIBMTkMDAYEApIpVBgOCAOg4RRGlAsEAqFIcGITqnWRcPxSEDMgkhAonA4DO3yMD6BUCoSCYIWEwVTF4gYAhAMFRUMZRlQEYgXERqKGBAQG5IAHAIDHYiUEUcDpwIcHh4doR0fH02zqAIXIASsrqi0TQBHE7e5HqG0Zr8CwSC9qFJHxbRSU7W1fkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-gear-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChMTCxDQyNFxaXKSipPz+/CH5BAEAAAAALAAAAAAQABAAAANdCLobwbAFMciLwBFSihBEFHSG8QnmpQQEBX6loI5G5QTlcMgrZSmEmsGxKqRWNV3hMrFlBtDoA1eTEaKHJdMYhR6+gxkF++UMGbiDzvDVioyHAJSHcchuGLQq4k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-gohome-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tJRqRGQqBNy6pIyKjDwGBPTe1JSWlDQyNOTGrNRiBGwmBIRaLNymdLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbIiorLB4XEltDrhcaLS4vtbcJra8bMDHAGrcyrTMXHjA0NSypEsO6EzY3IzU4OdoTzK0BCAkDMgkIOjJlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-goto-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBEQCBAAAACH5BAEAAAAALAAAAAAQABAAAAIohI8RyKciVnMwTlrlDfkm5QFgaHBWMo0lp22dZ57wO8vpGrLk2iJ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-help-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQ6XAQCBCyCvARSjAQ+ZGSm1ARCbEyWzESOxIy63ARalAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EEgQqhUz00GEJx2WFUY3BZw5HYh4cu6mSkEy06B72LHkiYFST0NRLIaa4I0oQyZhTKInSq2eAlaaMAuYEv0RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-history-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBEQ2LEw6POTSrOzWtNS2lAQCBOzatPTm3PTq3MyyjEw+NOzm1Pz29Pz+/Pz6/Pz27FRGPFxKRPTu3Pzy7Pz69Pz67KSGbPzy3Pzu3PTizPzu1Pzq1PTmzOzaxPTixPTmxOzWvOTOtKyWdOTGpOTStNS+nIRmVLymhNzCnOzavLyefAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIBwGCgOj0jBgFAwGJDJAyJBUDihwgWj4XhAqhEJNDKhVLwUSUDyPJIrlgYlLSG0hYELhgLJTBJOd1kaGxgYHB0egkQfHBwgHyEigkUBIwMkBwcEJSZ3ARYWJCcnKCYpJJ5HAQUqFhSjJysoKItOCgehJBISI4tCtyERa79HTrx2WEiBUH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-idea-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+BPzerPz+xPyqXPz+/ISChFxaXKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARMEEgZap14BjG6CJkmEMVQCF+4mQPBpthWtuYJxkJJGK6dbQRCgMBB3XCDzQamMhpDGlvuCFUyoQDLBUsJHBDUKuKQCKsUCIVZtc34IwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-int-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBIQChAQCBAwODAQGBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCKqx/iw0CNukzuJ8d1yCAAziIyliCKjck1ZuaV4igZ1r+raongE4j8YT6QiJC38CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-locationbar_erase-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIshI+py40Bo1SywgSFiDq+oG3hZHDhVpUmagFrl7pgN3oqPNuqpe+8Awwi/AUAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-lock-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJEQ+FExGHCQiDBwaDGxiLHxyNHRuPIR+TIyGZJSSfFxaRFxWJGRiLJyaXNzWpNTOnMzGnLy2hJSKTGReLKyqjPTu1NzarMS+jLSyfKyibJySXIyGVCQeDLSytPT29Ozu7OTi5NTS1KyurJSSjGxqVFxaXLS2tKSebOzuzLSufJSOXExGLGRiTExONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwGCgGhkhkQDBoEpLKQoBACAyOUID1qTVwoQGvMPxNFgVjAxp6QCQUicSCwVgkG44HJCKRRCYUCAxIFRYXhxgZGhYbHINEHR4fGCAhIiMkFSVKJicoKSoFKwMsLZtDLison6GjLA92qCueoAUvpC2xQhWqrLYDErmEMDEXlDIwMxAHukI0NS01EzY2NAmPAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-lsub-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBIQChAAAACH5BAEAAAAALAAAAAAQABAAAAImhI+pFu2+QpxKVppsxkh3fnhh9DyGcC6IwLbqir4HK58tLcfx6xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-lsup-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBAAAACH5BAEAAAAALAAAAAAQABAAAAIlhI95YawYonwp0uoukFO7rCXCSJKPcKYKuqqii7BvS892XJZ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mail_forward-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRydHxubHxmZGxiXHRmZFxOTFxGPFxKTPwCBLymlMy+pOze3PTq3PTu5Pzy7LSmnOTaxOzm5LyqlNzOtPz69Pz27MzCtLyqrPT27IRubPzuzNTGvNTCxLSelPz25Bw+ZFxKPPzy1Pz65LyupBxKdCxWfPTm1Pz23LyinBxGbGzO5DRafBxWfBxajCymxHTS5BxSdBxKbFTK3EzG1CSGvCyKvCSSxCSavGTO5GRaVPzqzFzK5EzG3BSCtAwiPGxaVPTivPzy3NzKpBxObCRefBxqlPTmzJR2bKyahAwyRPzmvOTOpKyObNS+nPz21AQOFKyOfPzuxAQCBGRORLSadPzyzLymjMy2lOzetDwuJFRCPEw6NEQ6LEQyLEQ6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAfhgAABAgIDBAQFBgcIBwmOCQIKCwwNDg8OEBESjY8CDBMUFRYVFxgZDJyOGhsPChwVHR4fFSAhjwkaIiMOJBQQDRUVJSa3GicoHw4pEA8SGSorLI8tLtQu19gqLzDECTEyMzQ14zY1Njc3ODkqCTo7MjIxNCs5PD03PjctPwlAQUIihhBpQbCIihtG+CUocASFkAhIkogQ8kFJwkcFlogIkoRJEydPnkBR6GiAxiQLgiiIIkXElFQJqESoMsRKkAhXqkhhApNKFSxZggTJ4nHIEJhaDhzYwoVLFy1avHyB6ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mail_generic-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGxaVOTe1Oze3OTWxOTWvNzStNzKpEQ6LOTezPz+/Pzy7Pz69Pz27Pz25Pz21PzuzPzuxEQyLLyinLSmnPz67Pz23LSafKyObDwuJMzCtLSelPzy1My6nLymjNTCxLyqnPzq1LyihKyOfOzavOzetEQ6NPTq3NzOtLymnNTGxJR2bOTOpPTivNTGvLymlKSShKyahEw+NOTe3PTm1Pzu1Pzy3FRCPPz65LSadFxGPOzm3PzqzPTmzPzmvEw6NCH5BAEAAAAALAAAAAAQABAAAAaqQIBwSCwaj8ikMhloOp/QpmAgqAoIhELBUDgcEIGEYrFgNBoLx+IBiRwkgQnFoWAwKhWLhX3BZAILGhsCDXgODhwdGB5vgAofICBlDiEiIx4kJSYBJ2UoEykqHSMrLC0nLWAnFS4UCycvMAcEMR0RLTIBMwaSahw0NTYtFwclNwEdLws4eoc2DxwQOR06ASk7PBAhIRE9Pj0tLSUY1T8I5gjn6Qgy7D8SfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mail_get-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAxKdBRSfCyGvFSm1BxKfCSWzCyWzBRCXCRKfBwuRAQGDDw6PHy23Cym1CSSxByCxBxunBQSFKyurMTCxExihNza3NTW1JSSlMzKzFxaXLS2tNze3KSipCQmJGxmbNTS1KSepLy2vISGhJSWlHx+fERGRPz6/IyKjDw+POzq7JyenMzOzKSmpCwuLDQyNIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQIBwGBAIAsOkUjAgFJRQQMHgjC4PBIEVgAh4D4aEYrGAMhINxwPyiCgYSsmEUmk82grLRZJkYCgXaAEKFxYZcEISGhsZFxwFeY0WHR5CDB8dGCAXG5shGxQicBIMpSMUGxgTGSQlpQwSJicnEwwdI7gdKAwTsykpKiobr8QMKxeHDBcsGRvOzxsT0i0uL9HSHdkT2ZkoMJXF4a8AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mail_replyall-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBLymlMy6pOTa1PTq3PTu5Pz27Dw+POzi3PTm1OTWvPz25FRSVERCRLympPzuzPTu7NTGvFxaXKSmpPzu1Pz65Hx6fHxqZPzq1Pz23HR2dBw+ZHx+fISChJSWlDQmJHRydCxWfBxGbJyenExKTHRiXPzqzPzy3CQmJDRafGTO5ExOTERKTGxWVCRSfHTS5CymxBxajBxWfPTmvPzy1CyixCSaxCySxDSaxDSWxDSSvDyaxGS21PTmzPz21AwiPBRejCSavByGtCSezEzG3FzK5FzG3GzO5FTK3CQ2bPTixBxqlCRefBxSdBxSfBx2nCQ+dHxmXPzmvLSafAwmRAwyRPzyzDw6POzavNzKpAQOFPzuxBwWTBw2ZGRORLyWdMy2lOzetPTivAQCBKyObOTOpAweNBwWVEQyLEw2LEQ2LDwuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAf4gAABAgMEBQUGBwgJCguOCwEMDQ4PEBESDA4TjY8DFAwVERYXGBkRm4+QGhsMHB0eGB8bDpyOARogEBceIRgXv8COIiMkGB4lJSYnIcwoKb/DGyoXKywtKS4pHinMLzAxJDIzNDUtNjcv6B0hLzgfMh85OjstPDw99zwd7T4/LTVAgggZQqSIECNHevSAgSSJkiVMmjh5AiWKlClAiFARUeVHFSVWmLS40gNLlh5agGzh0kWDlwZfrIDREKaCAjEqrFA5MMYLmTAxlJTxYoZMozNozqRRs4ZNmy5s3LwhA0dBnDNn5MxBoAABnTp17IitowDrmQV+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mail_reply-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTEw+NFxKTFxGPPwCBLymnMy6pOTa1PTm1Pzy7LymlOzi3HxqZOTWvPz69Pz25My+tLympFRGRHxuZPzu1LymjNTGvNTCxBw+ZPz23PzuzPz65PTu5NzOtCxWfBxKbPzq1DRafGTO5BxGbPzy9HTS5CymxBxajHRiXPzqzCyixCSaxCySxDSaxDSSvGS21GxWVAwmRBRejCSavByGtCSezEzG3FzK5FzG3CQ2bPzuxAwiPBxqlBxKdCRefBxWfBxSdBxSfBx2nCQ+dPzy1CRqlAwyRDQmJPTmvPTixLSafOTOpAQOFPz21BwWTBw2ZPzmvNS6nPTivAQCBAweNBwWVNzKpPzyzLyihGRORLyWdMy2lOzetKyObEQyLEw6NEw2LDwuJEQ2LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfqgAABAgMEBQUGBwgJCguOCwEMDQ4PEJYRDhKNjxMPDBQVFhAXGBUSGY8LGhsQHB0VHh8gFQ6bjgEhIiMMJCUmFbS2CwMnG6IoKSorI7WpEycWFiUsLSou1yXXji8wFiopMTIzNDUz4zbZNxsbODk6Ozw9Pj8pPzEzQDdB60JDOkRFjBw5giRJDCWdlmxwIIRJExAWKDRyMgTIiydLoESRImQKlSUSF1SxUoXAlSBRsGSJoCVICIlbqlThcoBClC5eYFD4EiVIFwUyqywAE0ZMlqNjpJDpIkUBl0dlFChAYOZMmTJoyqQR5icQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mail_send-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBHxqZLyqlMy6pOze3PTq3PTu5Pz27Pzy7LyinOTaxOzi3Ozq3LymlOTOtPz69Pzy5My+tLympPzqzNTGvLSelPzy3BxGbBQ6VPzuzPz65LyupNzOtPz+/GzO5BRejPzq1Pz23LymjHTS5CyixCSavBxqlPz25LymnGTO5CymxCSaxByGtHRiXPzy1CySxCSezGxWVPzuxKyOhMy6nDSaxEzG3PTivNzKpKyOfPzu1FzK5PTmzJR2ZLyihLSWfKyObOzmzPzmvDyaxOzavLSafGRORMy2lOzetDwuJEw6NEw2LEQyLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfUgAABAgMEBQUGBwgJCguOCwwNDg8QERITFBUWjY8DFxgZGhsaHB0aD5yODB4TGB+kICEaIiOPCwEkJRcmJyYPKCIpKrWqKywTmC0SIi4vMDHEDCsyMg8zEyI0NTY3z7U4Hhs5Mx+0IyI6OyPrIzw9Gys+PxIy2EBBxAs8Qjk5Q0RFWFxAZySfgSMsilRAkiRECHQ08hHgJ0TJkCU/mECU2ISEkowUlpAQ4QTfowNPoAzJIeRJCyjm8kVRIkWIzSkXhwxJtYAKgp9VrFi5QoWKFZ5+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-matrix-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBIQChCH5BAEAAAAALAAAAAAQABAAAAIrhI9pwQHt4Jru2Vsjna919lXKeEimh6UZp1lrCEvkfILyirOby3q1OEv4CwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-misc-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChMTCxDQyNFxaXKSipPz+/CH5BAEAAAAALAAAAAAQABAAAANdCLobwbAFMciLwBFSihBEFHSG8QnmpQQEBX6loI5G5QTlcMgrZSmEmsGxKqRWNV3hMrFlBtDoA1eTEaKHJdMYhR6+gxkF++UMGbiDzvDVioyHAJSHcchuGLQq4k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-move-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhA8RyKja2HtRrmrxNfDszm3JMpXmiULg6Hyto4kYO49Tfdc04xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-news_subscribe-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/ERCBDQyNAQCBPz+/FxaXIQCBMQCBKSipMTCxATCBMT+xISChASCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARsEEgZxLxYDlJsvsJGDN0nFQRhpKR3DSJxrGMphYQgpDI9WLhdTtjjAFApXZI30m2UQwICVigcEzzolKAYIAIFBAKbQjQX3YGGISZvFtzFQr1uDxT4PH0yYE8FCg0/Jn0MAwsNOiY3IQMBEn4RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-news_unsubscribe-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/ERCBDQyNAQCBPz+/FxaXIQCBMQCBMTCxPzCxKSipAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARiEEgZxLxYDlJsvsJGDN0nFQRhpKR3DSJxrGMphYQgpDI9WLhdTtjjAFApXZI30m2UwxjsiOApB4kNLFtQKKopxeCQxR4GAJIXPCInzmhN9zvCljNq8ZvswmzhZHEfOhpofhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-next-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFwyXAQCBOze9BwCHNx21LQCvPSi5NRi7AAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ3EMhJqwUhAMG7DQOxdVwFFuI1nYZIethwIK0aFwjtwrfh15cAYUjcvWyvkm1Z4TGfkyN0avFHAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-ok-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBMT+xATCBASCBARCBAQCBEQCBAAAACH5BAEAAAAALAAAAAAQABAAAAM2CLrc/itAF8RkdVyVye4FpzUgJwijORCGUhDDOZbLG6Nd2xjwibIQ2y80sRGIl4IBuWk6Af4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-openterm-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXFRSVPz+/PT29OTm5OTi5DQyNDw+PERGRExKTHx+fISChIyKjHRydFxeXDQ2NCQmJBQSFAQCBERCRMTGxHR2dGRiZExOTDw6PCQiJAwODCwuLFRWVOzu7BweHAwKDCwqLHx6fBQWFGxqbGRmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIBwSCwKAwKkMslEAgSDqDRKqBYKhkNgcDggEorkMrDQchkNhuOhgEQkk0l5S2lUGpYLJqPZTAwMHB0DCmhqAW0Rfh5zAxgOkBcCFAcfIBMECxwBBAEPFw8dChkhcBMDDAcdnQqtFKSWcQMimx4dGRkQBxGxsg6bBQEawx8jl3GnJFoFHRNXVVNRJYIFDAsL1tgiDiQXFx0HABwcXeQH5OjkRutEfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-paintbrush-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTC/AQChPz+/MTCxKSipDQyNCH5BAEAAAAALAAAAAAQABAAAAM7CLrMIS2qN2Sj1U4xugaYZxFE1wUaURQnKpFBYQTuFRiyXDsCd8y7RYhmCQ2IkiHywmkFN84ibfrxJwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-paren-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAQABAAAAI3hI+JEQq8mnvyzSOhEWJ3CgLcOILV4IlfUx1cwirfYiEvXL83arANSer5UipM5tIzXjRCh8ZfAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-pencil-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/IQCBMQCBPzCxAQCBPz+/MTCxISChDQyNKSipEQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARDEMhJZRBD1H2z3lMnjKCFjUJQimOgcmcbELCXzjXq0hV785WCQYcDFQjDXeloMByKG6YTAdwIDAlqSZJSVFeKLcUfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-player_eject-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+py+0R3IFQUtruXVqn3kkWyIARR4rqKvoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-player_end-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+py8Eb3ENRggrxjRnrVIWcIoYd91FaenysMU6wTNeLXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-player_pause-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+py+1vgoxzyUCxrZd18ClfmIyVyJ1lqkHuC0N+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-player_start-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pyxudwlNyguqkqRZh3h0gl43hpoElqlHt9UKw7NG27BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-player_stop-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+1vgpySUWpvXXqrHmSaeJEYhKYq6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-previous-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBFwyXOzC7PTq9OTK7IQyhBwCHNRi7LQCzPSi5IQ6jLwKzORy7AAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ8EMhJKwg4W5o1EGAIbt8wEERhHJ0mIEmiLAH5IYxi1JcnvTOeTdDYcVo1gfHY+hxs0IkvSpV2qtgswB8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-prod-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBIQChCH5BAEAAAAALAAAAAAQABAAAAIihI+py50Bo4SKHlsDwk9fn21gJzIcV37miKpuZ0nOTBt+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-queue-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBMTC/Pz+/CH5BAEAAAAALAAAAAAQABAAAAI5hI+pFrEahGgPtCinS2GMlknU0Xkflm2l6YEiw8aRGssTXLe3lZsznvuRViwholEcLZCfynGT8BcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-redo-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxOHBxSHBRGHKzCtNzu3MTSzBQ2FLzSxIzCjCSKFCyeHDzCLAxGHAwuFDSCNBxKLES+NHSmfBQ6FBxWJAQaDAQWFAw+HDSyLJzOnISyjMTexAQOBAwmDAw+FMzizAQODDymNKzWrAQKDAwaDEy6TFTGTFSyXDyKTAQCBAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ2QIBwSCwaj0hAICBICgcDQsEgaB4PiIRiW0AEiE3sdsFgcK2CBsCheEAcjgYjoigwJRM2pUK0XDAKGRobDRwKHUcegAsfExUdIEcVCgshImojfEUkCiUmJygHACkqHEQpqKkpogAgK5FOQywtprFDKRwptrZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-reload-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCRaJBxWJBxOHBRGBCxeLLTatCSKFCymJBQ6BAwmBNzu3AQCBAQOBCRSJKzWrGy+ZDy+NBxSHFSmTBxWHLTWtCyaHCSSFCx6PETKNBQ+FBwaHCRKJMTixLy6vExOTKyqrFxaXDQyNDw+PBQSFHx6fCwuLJyenDQ2NISChLSytJSSlFxeXAwODCQmJBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIBQGBAMBALCcCksGA4IQkJBUDIDC6gVwGhshY5HlMn9DiCRL1MyYE8iiapaSKlALBdMRiPckDkdeXt9HgxkGhWDXB4fH4ZMGnxcICEiI45kQiQkDCUmJZskmUIiJyiPQgyoQwwpH35LqqgMKiEjq5obqh8rLCMtowAkLqovuH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-remove-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/PwCBMQCBEQCBIQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMuCLrc/hCGFyYLQjQsquLDQ2ScEEJjZkYfyQKlJa2j7AQnMM7NfucLze1FLD78CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-revert-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAAQCBPwCBPz+/PTizCQeHDQyNBweHAQGBAwKBDQ2NPzu5PTi3ERGRCQiJHR2dPTi1CwqLPz6/Mya/Mxm/GQCzFRWVGRmZAwODFxeXExOTExKTERCRBQWFMTCxKSipMzKzCH5BAEAAAEALAAAAAAQABAAAAV9ICCOQWkGIiqsQloCKCqy7UC8MC4URSsMhsDBNWOJEK4TYJfoGU8vmmJBGI5SyyYj0XDQjMvVQwBxRCQTilowFGwrjG5kTo+0x4OdpcLvV0YXIhcGGH0ZFRobOSccfB2PHR4FiyYAGQwdAI8eEAdQKBsZmR+RBpSVVyMHfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-rotate_ccw-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBFxaXIQChEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM0CLrcHjA6JcK4ET68MrNDoIgjOYbdJ4IXagIa3IqVFAMEOqpfn067ErBxG0qGsCJyyQT4EwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-rotate_cw-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBIQChFxaXEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMzCLrcHjA6FaG4YbS6At5BR31UKI4mADGhd31rpbmCuZ6qQLA8XvqT2+QhHLKKxqSy4U8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-rotate-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBFxaXIQChEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM0CLrcHjA6JcK4ET68MrNDoIgjOYbdJ4IXagIa3IqVFAMEOqpfn067ErBxG0qGsCJyyQT4EwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-rsub-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBIQChAAAACH5BAEAAAAALAAAAAAQABAAAAInhI8Jwd26YJBUTVvT1Rlt3x2f6DjQeQiGigLCC7crK7+yC9sty/oFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-rsup-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBIQChAQCBAAAACH5BAEAAAAALAAAAAAQABAAAAImhI+pGtZ7gpwQyWofnnQ7I4SiuAjlqZgpmqgti7gxfMh1OY6LXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-run-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/ISChKSipMTCxLS2tLy+vMzOzMTGxNTS1AAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARlEMgJQqDYyiDGrR8oWJxnCcQXDMU4GEYqFN4UEHB+FEhtv7EBIYEohkjBkwJBqggEMB+ncHhaBsDUZmbAXq67EecQ02x2CMWzkAs504gCO3qcDZjkl11FMJVIN0cqHSpuGYYSfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-signature-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAFxaXPwCBAQCBDQyNPz+/KSipERCBAQChISCBMTCBPz+xMTC/AQC/MTCxPzerAAAACH5BAEAAAEALAAAAAAQABAAAARwEMhJZwgCiM17DoMkEGRpAmGhmSxhAOrakim6DgeLJApRhCPCgJRT8AhGEVFIQigAxgSQsBgwms8oIrDKDZNGxJY7GuYQULHhQj4shAmAuNAQsFc9xY4uUNgvMiQOBIMOfncjeUhICocXAx6RfwF+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-spellcheck-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPzCxPwCBMQCBIQCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLrcGuHBNZ+NIOJ9O4MTaH2e1nDoiFYZJjgwIAzwy8yEgy84RhWDQa4HCwAHxJgxSPApC83YyQnwJwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-sqrt-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBIQChAQCBAwODAQGBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMyCLrcDiHK6eIL9WmsmwWCAAyiwkGKGILihzLq8p1s9onE9a48Iy28ko/WgRCLyGTDnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-stamp-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xMTCBISCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANCCLrR+zAIMQKMguh6GR2g1QEBCBLiGGjo+DSpS3IqXNqxNAnwzisSk3BowRltM8IAZVMqi84lLNoqUVfLrOhoVPgTACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-start-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRSdBRObCQ2TAQCBBxObISevNzu/BRGZPz6/FzC3Pz+/HTS5ByyzJze7Mzq9ITC3AQWLAyWvBSavFyuxAwaLAQSHBRWfBSOrDzW5AyixCS61ETW3CzG1AQeLAweLAxefBSStEze7CSWtCyatBSCnAwmPBRWdByixAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZrQIBwSCwah4HjUTBQEogFw/M4BQgMh2pxijAkFAhBYJwUPq8LRsPxWDwgkSHhelA0JJIJnlKRWy4YGRoSGxwcHRsecgAfICEiGhMjJBglVVMRgBkgJp0El0MRJyhaRFqipUoAFqmqrapHfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-stop-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/Gw6NGQuLHQ6NGQmJFweHFQaFPTm5PTa3PTW1Oy+vOS6tNSinKReVDQWFPz+/Nx6fNyCfNyGhNR+dMxybMRiXLxGRIwWFNx2dNx+fNx2bMxuZLQWFBwWFPTu7Pzy9NRqZNRuZMRSVLwmJGwWFNR2dMQiHPTKxMxmXMQyLMxmZNx6dMxiXMRSRMRaVKxybMxaVEQWFMQuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaaQIAQEBAMCAWDYcgkHhAJxYLRcDQBggckIplQKpaLdRh4YDIaSWa94Vw6woAHgv6AMKGPaMQhwQMJJRkfhHmEJhdvRCcgGSCEkCgpbnAECiorGYYfLCItlAAFCygQj5AfbYlwBQwVE5AukG6KBi8tMC0fLi0pHxyzcAAxFxwmMny/wEwOxMm/qlcdJCSJ1H5XQh3a28HY3kx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-sum-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBIQChCH5BAEAAAAALAAAAAAQABAAAAIdhI+py60BowyPJriwQ3qb7oGNyJCZtZHixHpu4xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_block-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py40Bo5SOzRvrwlgrfnkJOIkPaaaJXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_bold-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIihI+py70BowPQ1HZpwNv212Vg9IGHmIjoWa4ey5DSRNd+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-text-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIlhI8Jwe2/AmpTynqPTXSqrnBM+I0kdmpmGmUp+K4nPMvhYx9+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-text_italic-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+0BgztwUmmjBXX3jE0auHHhM5Yq4xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_under-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pu+FxXoOIKpds1oBH7hlYxYxRCaIZ01lhJbHy9tTv7BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-toggle_log-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBATCxMTCBPz+xPz+/ERCBASChISCBARCRAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEIQJqpXBBjFI1oGncYU4EUXxSWQZlum6DXDQpeo0tR6KqqgdLXiLBWepHgyYIxF/TKHv9XvtDDfb0So5YHuTgThYCXgH4Q6hqvEGEIm4PLGSyHX4OkZv8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-top-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBBRObAQSHBRSdISevBRWfAweLNzu/BSOrAQWLPz6/FzC3DzW5BxObHTS5ByyzAyixEze7BSStBRWdAyWvByixCQ2TBRGZJze7CS61BSavAxefMzq9ETW3CSWtAwmPPz+/CzG1ITC3FyuxBSCnAQeLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZjQIBwSCwSA8ik0kgUDJhGQsFwgA4FBUTCoLBiF4zGtmt0FBYPSEQyoZCvWQakUok0LISnkHBBYjIVGhscS0UGHRUeHyBWAAIhiYuNAggVIgmMVgYjJBolAZMKJgpIjaanRH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-transform-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCBPz+/Pz+xFxaXAQChAAAACH5BAEAAAAALAAAAAAQABAAAANOCLrcEDAGt4K4F46wmcVCQIzE4F1DukksehVkiUlDYcdfCAyEGI+D2aP3G+UmPF/MAJpwnpuNgMmcKHKgabWSvRi+ums3a32wzmWKw58AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-undo-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxSHBxOHMTSzNzu3KzCtBRGHCSKFIzCjLzSxBQ2FAxGHDzCLCyeHBQ+FHSmfAwuFBxKLDSCNMzizISyjJzOnDSyLAw+FAQSDAQeDBxWJAwmDAQOBKzWrDymNAQaDAQODAwaDDyKTFSyXFTGTEy6TAQCBAQKDAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ1QIBwSCwaj0hiQCBICpcDQsFgGAaIguhhi0gohIsrQEDYMhiNrRfgeAQC5fMCAolIDhD2hFI5WC4YRBkaBxsOE2l/RxsHHA4dHmkfRyAbIQ4iIyQlB5NFGCAACiakpSZEJyinTgAcKSesACorgU4mJ6uxR35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-unlock-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJExGHEQ+FCQiDBwaDBweDGxiLHxyNHRuPIR+RIyGZJSSfFxaRGxmLJyaXNzWpNTOnMzGnMS+jJSKTGReLKyqjPTu1NzarLSufKyibJySXIyGVGxiNFxaXLSytPT29Ozu7OTi5NTS1KyurGxqVCQeDJSSjLS2tNTW1KSmpGRiLKSebOzuzJSOXExONExGLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaVQIBwOAwYA8SkMCAYOAnKYiFAIAQGyOgVCggYuEovVxztMpdnwAGRSCgUCwOjIeQ6HpCIZDKRUNYMRBUWF4UYGRoWGxyBRR0eHxgaICEiIyR0QyUmJygpKgUrAxMsLUQlKyieoKIuEAunK52fBS8DLiywQySpnjC1Mbi6QjIzNBeSIBY1EQfDQgosLAEUNjY3Co1DfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-up-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObAwSHBRSdISevBRWfAweLNzu/BSOrAQWLPz6/FzC3DzW5BxObHTS5ByyzAyixEze7BSStBRWdAyWvByixAQSHCQ2TAQCBBRGZJze7CS61BSavAxefMzq9ETW3CSWtAwmPPz+/CzG1ITC3FyuxBSCnAQeLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZfQIBwSCwaj8hhQJAkDggFQxMQIBwQhUSyqlgwsFpjg6BwPCARySSstC4eFAqEURlYhoMLBpPRUDYcHXt7RgUeFB8gIU0BIoiKjAcUIwiLSQUkJRsmGIwJJwmEU6OkfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-view_choose-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMzCLrcGlAs6UAYgwLdLtEcI4ygQo7VVp2oupGpG4vmaUVTemX523qlFcw0a4RqNlkx5k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-view_detailed-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMmCLrc/i1IAVkYg1Z1iRYUKCqitp1oikqBWV3ZOnhkWNagqu+qnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-view_icon-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrcG1AwGOQbw6qANeCEB3pCSZpO6pgowJZqLKuUGE0dnuEhf8IL1kz1shSHDX8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewmag--16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ+QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7Kmpl0CtLGLvbW2Zn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewmag-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ8QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7GLArS5Q7O1tmZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewmag+-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6cAsLECrqeys7WxpqZdtK9Ct8C0fsHAZn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-view_multicolumn-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrc/ixI0WSgKoyBl+beQFACpo1AqXbKCr1wLAMWS08hGG3dSZqin4sxnBmPD38CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-view_text-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIchI+py40BTQSwuovp3DXkv1ia1IHmIXLiyWJ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-view_tree-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBDQyNPz+/PzerAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAMuCLHcri4yGISlj4kxcANgNRBQCIbL6U1Su7bB62rXvGydG25kqpwfIGxILBr9CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-window_fullscreen-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBNTW1MzOzMTGxLy6vKyurJyenHR2dOTm5Pz+/IQCBOTm1Pz+9Pz+7Pz+5OTmzOTmxOTm3Pz+3OTmvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVuICCOZAkEaKquqzAQRWEYR32gSK7vO5oowKAQmPAtjkPFccEwLoaNhuPYDCSeT2B0+lhAfMHF1kF+PL5W7ZhrjqAk4gW53J0s3AG4nP6Y2BcUKAxLZn1+S4EBDAwQEIsUDBQRFJSJLJcoJpojfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-window_new-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXGRmZFRWVGQmhFwmfFxeXOTm5MTCxLyWzLySzKyCvKSCvJxyrJRmrIxipIxWpNze3AQCBMTGxJRWtJRatIxOrIRCpHw+pHw6nHQ2lGwulOzu7Pz+/Pz+9Ozu5Pz+7NzexPz+5Pz+hPz+3NzevPz+BMTCBNzetMTCDPz+xNze1NzezPwCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACwALAAAAAAQABAAAAaVQEBAMCAUj0aCYFkwHBAJhWLBYDQcD8ghIjhIJhRKxXLBZDQaiYQLABDe8PiSu+HY7/dOh+PhQvB4eh8fIH6Adh2DHyGFAn+BiQAiISMkhnmSIQAlI5KXHIkfAiUmpCUnhoKLISgpIikmAlwqtCArkiUlIhwiuSKyEcHCESausMEsycrJEaaly9ARIizN1NPQ0dfJfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-window_nofullscreen-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBNTW1MzOzMTGxLy6vKyurJyenHR2dIQCBPz+/OTm5Pz+9OTm1Pz+7OTmzPz+5OTmxPz+3OTmvOTm3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVsICCOZAkEaKquqzAQRWEYR32gSK7vO5oowKAQmEAtfr9hgpFoGBWJpDDqcAaOUSHDEU08nkOG2AGBfK/aMYQMiRi7Ywe5674yE3I2JCqZoChLeGwSEgmFfgFNDQ8NjQ0TEROSRSyVKSaYI34hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-wizard-16:actions actions16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+xPz+BMTCBPz+/MTCxISChDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAREEMhJg6BYWhAGv5k2EKMXToSgEqc1DEIhvGAWpOvJFSXZyoXOxxY0BDahQDGg4xgOxmbgiWDqpoeqlGrVcZuSbLfpjwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-abbrowser-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBKSipMTCxISChPyqXPzerPz+xPz+/FxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARhEMgJQqC4Xms1tkIgDEMYXpMYEEJRCIT6Ea5R2DHFtQZBG6dNoHQrsAyH14DDWiENBsQhBtskEs4Dohe4oiqE5So2zElECEKCrCYgQmcRVnRKnFIdC0L4/az7GXiBg4N+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-access-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGRufLzi7PT6/NTq9OTy9MTm7LTW5LTS5LTO5KzC1FyGrExSXHzG3Gy+3FSStPz+/ESGpFSmxEySvEyKrER6nERylExqjFSSrKze7EyCrDxulKzG3GSuzGSitEyWvER2nEx6pKzO5DxmhLze7DxqjExihERadLS6xERulEyOrLTC1KzK3ERWbERujFRefGR+nKTO3LS6zLS+zFRmbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAa1QEBgSCwWhYIBocA0CA6IhEKwYAQKDccDAolIJpSK5aKwFhyYDGSQoWgqm4uFYyV0PAeIIPIeayZlVw4OFV19FxoSGoFnH1tcayASIRciVgYfEWoQIxcLk4gHlxQCnJBcJBUSdAEHhQediSV5ExWBBxYQGSZelLkHJyhWsHmSISkHKpsrViwWJ1xPXCAtesIBCiUaGHm6LiYvLybXMAQCMQosBwcoMjIzMTQMAC0M9vf49wB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-acroread-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAASC/PwCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIlhI+pELshmkOhzmTvyZrFDglRxVEiGUoUualtx7gOC36gDGt+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-agent-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipISChPz+BMTCBISCBERCBCH5BAEAAAAALAAAAAAQABAAAANLCLrcHkFBt4IY8EYKYCAT9xVBYRhbM5KFeaRVy56oSsgQ/TLrB567ym10ChiCnRIRaJx8lDdd86UkEWjHaURZwlKRHpM0xPOYGf4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-aktion-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAI5hG+hIuigAmMvLTlfnJiePQndt4SMFFioeaagaEbvySlQF6I2BLPRwYntDLlaylH8VXLDpaiJ8BcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-alevt-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/Pz+/AQCBAT+BPwCBAT+/Pz+BMTCxCH5BAEAAAAALAAAAAAQABAAAANFCLrc/i3ISadQYQhSehFecAGiYJ6oiJmaZrymSrKCJhinXLYmHo+l2skn0KGOPwyBUHPhOrqKVIWsmhqHyqhhPUG+Cn8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-applixware-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBKSipAAAACH5BAEAAAAALAAAAAAQABAAAAIyhI+pGbsBHYtHCGARbMhms1HVB0TieJhcl23liXkinAmhy7732UL9GnsZeixczChB+AsAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-ark-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/PwCBAQCBPyCBPzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANCCLoQwTBK6dy8WNQgptAbB33DQGzlx3xE65RpBwgtCw9sR7e1gO8EGYs3DMoUH5rPqFylSrzaygcjHqdQVUYL8ScAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-arts-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPz+/KSipPwCBISChAT+BARCBMTCxDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAMALAAAAAAQABAAAARTEIQ5xbgYAwJksFhhaFTVdeLpURYwAOL7cp6gpmcZHEQPGyIOLRAkiI4GTqmIDG5QwGihuRIBU8boasLzZbEd082QK7VkrvTwo2pvP5m4GxHP+CMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-background-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAAQCBJx6NJR2LIxyNJR6NKSORKyaTJyGRJyORKSWTJyKRKSWRKyOPKSKPHRKLEwiFDwSDEQeDGxGJLSeTKSSRKyaVLyaPLyaTGQqFFwyHGwyFEQWFDQKDDQKFEwmFMSiTMyiVJRuNLx+LOS2VOy2ZNSKTFQeFGRGJLyqXMymVOSiVOy6ZOymZKxyTEQODDQOFLymVKxuNMRyJOSeNMx2FLxiJLRiHFQaDDwOFDQODFw+HLSiVHxSLFQiFIQ+HKxmNJxOLJRSLIxGHDwODGw+HNSSPOSWNNRyFOyyVOSOPARihNSORKRSFLR6TPz+/MTCxKTi9JTW7GSy1Lx2THw+FNSOXJRWNISChASq3ASWxARynEQaFMx+JJRSJFRWVARafARSdHxeLFw6HPz+7Pz+5GxKJDwSFIRSNHxGNPz+3MSCPNSWTMyGNPz+9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAfXgACCg4SFggECAgMEBQYHBwgJCAoLggsMDA0ODxAREg0TCxQVghYWFxgZGhscHR4LE7GCHyAhIiMkJSatJyi+giApGCokKywtLhwvBzAwgiMxGDIzNDU2Nzg5OjsTghc8PT4/QEFC2EMeCZUARKpFRkdISUr09YIYET0qS0wqTUpOnkCJIkWQhxsbpsigUsWKkidXsGTRIkjHgy0YuMjoYkKJFy9KvoARFEZMBAg3UkIA6MTJGDKCBpQ5aebMGTQsx4xJU/FBBIxq1rAB4KTNS56Gkg7yEwgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-bell-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBEwuFLR6PLRqJHQ6DNyuhLx6LKxiHDwiDMSOXLx2NKxaHAQCBHxSLGw+FKRyLFRSHLR6NIRKFExGHNTStOzm1KyqfIRmNHx6PIyGRFxeJNzavOzq1MTGpKymfKyqhKSmdGxqNDw+FPTy7KyuhNzevISGTJSSXLy6jOzq3Ly+lJyabHRyNCQmDKSifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ6QIBwGCgOj8iAYEAIIJ+BguGAeCYTigXDegw0DI4tl/gQj4WB8hkAgUQeEsaEC6FULBdMRjN/QjYcHR4fICEiVn8jFCAkHxiHfiUjHRYfHyZmR4kdICAeJ5lCECgVKSorJysrLC1IEBgVFSgunSAaoWwTIi28DL5HfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-blender-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBDwiDPSyNOyKLDweBFQuDFQyDPSeNEQmDIxSHFQ2DEQqDARWjARGdASO5AR6xAQiPOymNAQ2XARqtAQKHOSmNEQiDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVqICCOQBCQKBkIA5G+63C+RW3UrIsSQt8fA+CMREAQgIkaUEdSsBK6hZBUeJ4YjRLQIKoOBgVAw/GAAAqRk+EJBkgmDQrAUDGxTAMBAgCR89oFOgF5YQAWdy8EeTeILyV5jY5nBAGFkpJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-clock-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPzerPyqXMRaBIQCBISChPz+/KSipMTCxPz+BMTCBPwCBPz+xPzCxMQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVxICCOQGCeJjkGwkC8RFEEavkax2G8dB0QuRyhhzoBg8MSYsncJXKJZIDZHCoWP1ogGIwGrtnSgUFmHLyNRHhrdpjRamnO/SYkromHdnxwnwkKVxByZW8DgQsQM2JcfwZXO0MBCZSVBgMuLzJaRZ0pfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-colors-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBAQC/MQCxATCxATCBPyqXPwCBPzerAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgZ6rwYBCFsvtXWeWA1DBU3ggRhomJQBm14dlJYFFXrbjKNwVDZ9Vw4TWWoKyCDgcNhyXQClVLpMmANIRAhLdGa+36j07GrfM4GiKTAGfsOlmYZfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-cookie-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBNzeDJR+BOzmVNSqPOSmBNSCBKRCJFwuBOSOjMRSTLRaXFQODMxiXOS6vIwiJGwKDHx6fKyqrMSOjNRWVLRaVFwCBJyanJSKhHRydPTy9PT29OyytIQSFPz+/JSSlOTGxIQyLMTGxNTW1Nze3Ozq7OTe3FxSTGxqZNza3Ozu7OTm5MzKzLy6vLS2tNTS1FRKPGxWRMSypJyOhKSOfPTu7LyupFQ6HMzOzEw+NJR2XKyOdFxGNHRSNJx6XGRCLHRCDMy+tGxONDwaBHRiVDwyLEQuHJRyVJyCZLSilIxiPIRePHxOJIRWJFwyFEwqDCwWBBQOBDweBKSCbHRKLHRKHIROHGQyBFwyDDQaBIxqTHxOLGQ2DDwiDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe4gACCgwABAoSIiAMEiY0ABQaHjoQHCJOECQoLDJeCDQ4PEJMRERITFBUWFxgZhKQaGhsKHB0WHrcfEQARGxu3HiAKIRgiIyQlJicoGym+KissLRIuIi8jJTAwJjEyGzIYKxszNDU2Nzg5MDY6OyQ8PT4jP0BBQkNERUZHOkhJSktMZDQBcsTJEyhRpOybcuSIEipVrFxBgEVKFigATkiRgkSLki1UgFzh8kRKFEQbN3aR0qULIT+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-date-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPzerPyqXMRaBIQCBISChPz+/KSipMTCxPz+BMTCBPwCBPz+xPzCxMQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVxICCOQGCeJjkGwkC8RFEEavkax2G8dB0QuRyhhzoBg8MSYsncJXKJZIDZHCoWP1ogGIwGrtnSgUFmHLyNRHhrdpjRamnO/SYkromHdnxwnwkKVxByZW8DgQsQM2JcfwZXO0MBCZSVBgMuLzJaRZ0pfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-dlgedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCxFxaXKSipPz+/AQChAAAACH5BAEAAAAALAAAAAAQABAAAANLCLHcrSLKOVccAuvMLf2Rlw0bYRKFGBGZWQioRc4kPKfB+qFFL9ODF+EmKxh6vZOreETCbLiMESkcxnIgATXK2XgFqmxI4SgvAP4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-emacs-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBDQyNKSipPz+/FxaXISChMTCxCH5BAEAAAAALAAAAAAQABAAAANJCBASoXCFoVi8VdL6HHQeB4YjSAxnYQygSLzoSTjbEs9vMF86cbyH34NX+AELQ4zO+Nopm6cBC1PBEQwG6gd3SGo7Xa1STIb4EwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-email-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGRWVAQCBOTWvKSShDwyLOTazOTaxPTuzLSilOzi1OzezPzy7Pzu1NTKtKySfPzy5Ozm3Pzy3PTq1NTCrMS2rNzWvNzOvMy+rLSmlPz69LSejIx2bPz29ISChPz6/Oze1HR2dOTi5Pz+/EQyLJyanKSipOTm5MTCxHx+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaGQIBwSAQEAoJi8RgYEApK49FgOCAS0CFTsVAwEA2CIysMJB6QCEQyoVQsZOMFk3loJoeNAk4MGBQOFAQcDw8IfFoLDB0cEBMICIRxAV6NEB4aHwICk4wLIBYhIiObSxwLBSQkJaOlfQUFpCYnIyMoSVGbtQK3UQCbKCYprkq8m8S+uL4AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-energy-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBBQSFASiBHS2/JzK/KzW/JzO/ASWBATCBASKBHy+/Hy6/ByuHASCBAR+BATOBARyBIzC/MS+BASeBASOBARaBFym/Pz6BASuBEyW5AR2BJS+7Gyq7PT2BARKBDyC1FSS3IR+BJyaBLy2BPz+BCxuxAQ+BDw+BOzmBARiBCxyxBxetPTyBAQCPAxOpAQ6BAQ6jAQ2fAQ2hLy6BAQubAQydAQmXAQmVAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQIBwSCwaj0hAYBkQBJDLAaFgOBCWxcAAkVAsGIyG4/EUBh4ICCIicUAgkwTZjKBULISL3oHJzAMaDhscHYEODhMeExEfSyAhGxsgICIYHiMWJCUYSyYYJw8kIigoKSomKxgmSywYfC0YGCJ8rSwuS7EYJBYYLi+xE5tkARMoMCoYEzEiJDIzMjQiSzExMxGkNTY2NTc4NTNPTOLjWElHfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-enhanced_browsing-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBOTWzIyCrFRSTMy+tCQmVOzi3ExKhAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARFEMhJq6UhyHy3GNmnAeNEFAZwpuRRBiIMkkOBjKuKTsHtgbISybTLYX6hGc+lSxk3tVtMVOkFck9MMNjB7jqkEQdMlvgjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-filetypes-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+/ISChKSipPz+/PyqXMTCxFxaXPzerPz+xAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARfEEgZqg0zV8EHF5XWEUMxkBwGBB9REIZLfBgrkEaen+l6F4cYgpA4vEC+ASIYSxQRnlrncEgoFFQP0laCHpSmnk+AEJQ8ZeRkw0mDVJT3JZQZw+trC77Ouu8pfn8AfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-fonts-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+/KSipMTCxPwCBFxaXMQCBCH5BAEAAAAALAAAAAAQABAAAANBCLoQ/C+I4GAMY1ZGN80UJ2jA0BFbUxhjF6BWsQroawEyWhN37vKxQo0ChPhOPaGDIhhADr5FinE4TG5PrBbiTwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-gimp-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChPz+/FxaXMTCxAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM6CLrc/izAJVWoD4MgtL2R0F2k6HFiOgjDSRBq0FLUKxYDTmKBnf6gGqz3egWFhEvSQ9kxJ9CotOFPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-go-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBERGRFRSVDw6PDQ2NDw+PPz+/ERCROTi5Pz6/AQCBKyurERGPOzq7ISGhNTS1DQyNLSytExKTLy+vKx+RGRiZPTipEQ6LOzu7PT29JSOjOzWlEw+LIyKjIx+dLy6vOy6ZEwuFHQ+DCwqLGQ6HNSWPMymfIxmPMyqjKSipCwuLMzKzHx+fBweHOTm5GxubJSSlAQGBHR2dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAadQIBwGAgIiMXhgAAoGAwH4QCRKAgVCwSB8AwwCo2n9ZpwMMSFhyEBGQoLEa5BMnkO3G/Kef2sMIdfCxYXT2oGGAIHCk0ZCBobHE8dHk8MFR+LgSAhXSIRdmNCBxScBiObCAYZI25wJE8SJSYECVVDCg8dERchJygPKSqsQgQNKwQFCw8fLC0KLi+LxH9YMDFX0ngAzzLZ2m4K3kN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-gv-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIxhI+pwaHZ2jNMWMFmvXk1GznHF4DhWF4cJlKpynpwB73ms3Etiq00EAr+hJGJ0eAvAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-gvim-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+BPz+/ASCBMTCxISChAQChCH5BAEAAAAALAAAAAAQABAAAANUCBDMEqupNWoNJNgBV/mfwYCFqASgmA1h57VaO71lXLtPytZEBggZ0E7Vy2BQJEaRcDghP6iGb/IsNKBWKghZzb5EUau4g1KFz1QId+ydRRZwiD8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-help_index-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBPwCBAQC/IQCBATCxMT+/Pz+/ISChAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEIRJJZ1ACjF3GGAYaKNFDNfXldLJqmQWcKhcW6tkl1NhFJhdRmIwHIq8m8R3LAIlykCxiZQNl8XsU3eVZg0Y2LD3CyAQlassbEaz1N32Gz5m+SMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-hwinfo-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBBQ+XBRCZAw+XAw6XBRCXCRObCxihCxqjCRijBRSfAwyVCxehDx6nER+pPz+/BxKZAwmPFyWtGyevCRSbBxWfAxGbHSqxGSatCxulBxahBRKbAQiNEyKrBRKdAw6ZAwiNESSLCyCDBxWBDRulBwyRHS6ZDSWHCyKFDQyNCxqlAQmRAwiPMzalPyCBMQCBCx+DAwuRBQqPITCdFxaXCyOFAQeNAwmRAxKdPz6/GyyVMTCxKSirAQCBGzKZAwqTAweNFyuRDyeJFzCTITOdAQiPAQaNHzCbES6NEy6PESyNDyqLDymJPz+xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfBgACCAAECAwSDiYMFBgcICQoLC4qCBQwNDg8PEJERlAYNEhOaFBUWnokBBw4SFxgOGRobCxyJBQkNHZoPpR4fICEiIiMBCSSYmgoKFgslJicoKQQKCSoZmgW+KywtLi8pMDEbFRqaAcwyMyc0NSkiNjc4ObsrKyU6Ozw97j4lNhGSfsgAEkQIDxr7YAwh0qKIDSM2jgRpgbDHPhFIMiZRsoTJkhMgobUDMKKkySYjUKockYJSypcrWypKQbOmTT+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-icons-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPz+/ISChIQChFxaXKSipPzCxPzC/MQCBISCBPyqXMT+/MTCxPwCBMQCxMT+xPz+xMTCBPzerPz+BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV+IBCMZBkAqCgMa8uyJxoMRFHUtz3Eqk0MBhxBwJsRaqTcLhUQ3AyHAMI0EtEI0pGrpU38SANFQazYGY+LqUChYDQUxCbB8YjOFJAIpGEePOpZAhITIxJxAg8JDwQPMxISERESfXSVTRIQAZKHLyuOFI8US1RNnTApqCJUAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-iconthemes-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPz+xISCBPz+/ISChPz+BIQChFxaXMRaBPyqXIQCBPzC/MT+/MTCxMQCxPzCxMT+xMTCBPzerMQCBPwCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAWLIBCMwhgMJqCKRBEIpWAMBRGsQXG8sIAiLpwNZpAFEAcbjlc0OI9BVcAWSDgHT9MtF1AsZrmamNpNBAyjwgCxpo0U5h1jOhg0HAMbPHB4QNIDEQIRDi5xfgFzBBITIxJUBQ8UD305EhIwEi45FQ+dFVMSES+PIy2nLgUSBpcGQVomqKc3K7WwIwB+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-input_devices_settings-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxHx+fISChKSipKSirATCxAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARQEMgQpL03iEEx1gOxdR5YbCJXZUbqjusUhGitZkFri0VFUodXoTfjWCi6oY8Skxl6k4FhxZRRRxMC1TBdWn0CAbcZQFAH4WnGjDPiPICYPwIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kab-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChFxaXKSipDQyNAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANICLocHiyqIMQYUE5Ses8S1V0FGInFIJTalKpsS5FxKDxB/EzV4GUBQsXR87BQnRtNtxphfJ9FAAqbRqUXVfPaMH5MDRx44U8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kappfinder-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExOTDw+PExKTPz+/ISChAQCBPz6/FRSVIyKjJSSlIyOjGRmZNTS1Ozq7Ozu7AxyzPTy9ERCRBQWFIyqxPT29AQ2vOTi5IzG7DR2zNze3Nza3BQSFISy5CRyvBQenISmvBQitMzOzAQGBAw6rDR61Hx6fMzKzAz+/IzW7ASyvCwuLMTGxMTCxBwWFDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQAAgEBAYj0ahckAoEJ5QgkE5fBYO0SeCOigkFE2DeEFgUAUNBwGBeBAcCMHirF4gnhBCBCE5PydqBBQVFhdTSgJPBk8YGRQaG4dCiQQcDh0eHyAhIiN+BHYXJCUNIggmfhUOAQgbJ6YCKGcVKSUaChwGHCYqCyuIDhkhGyIsLcccCL6TFxsNJ8fRLS7KvyNi2GIrAQwK1AsvVOJULi4AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-karm-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBPz+/ISChMTC/MTCxPzCxMQCBPwCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEIRJa5Ui66H3FETHdcTwdcIofkVbUIJbmAEoZl95aoXxUrNdpnAIDFomgRA3yxxhIdxAlaKhAgUNYshyYVGxnMZInS6VzVSQPG0bkWaJZT4B+CMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kcalc-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBATCxARCRASChAT+BMTCxFxaXEQCBPzCxPwCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEIBAq5U4iM17wJMwjORIfJkYFCs7nKA2rJQLp0Su66ikGcAg8OYTGA6BA/KAIIYsFudPGJQal8uAFVqxUg2JxBYbUGh7k5J6BppwKyB/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kcharselect-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChPz+/MTCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANBCLrR+zCIGWCcI1cLpNCa5YHZsCmj2QTlxrZmmRFVSs4E7X13TqMTXsl36gSHuSIQQ+QYP0kncPCTokzWh3LhTwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kchart-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+/ATCBAS6BPyqXPzerPz6/Pz+BPwC/MQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARcEMgJQqB4WiFulhvXfaEwiJ4mEgExFCMVcENgBEXepdVhG7dcABGr/IJCQ8ICAt4IUIuSKAW2XMOD0qC42AIHV4277YIqKHKCy5txbIoyDy2Nr80yjyVwn5OYfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kcmdevices-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPyCBPyqXPzerPz+xPz+/AAAACH5BAEAAAAALAAAAAAQABAAAANMCLrcHjA6BcW4Q8AWLL7EFSwdOIRoOAKBiZ5EPJYvBMeDba5BQfg52ik4KPgKOVYqZiwYjLzb7/c0JCnSo3VFasFEXE5kMymbzwp/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kcmdf-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBATCBMT+/AT+/ASChATCxPz+xPz+BISCBMTCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrwYBCFqvhs3DNYXjChRlWBRjIRqGN4UuEUczMZxsDeXykdEsDQVVSLhQxhBCkVlmXA+KVHFYhFYOoHbMGN6pTQaW8YYiQmcG+q16a0+Zipw+4e9B/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kcmdrkonqi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPzerPz+/PyqXMTCxPz+xAAAACH5BAEAAAAALAAAAAAQABAAAANKCAoRy+6pIESkVuLaKl8b53lOaA3EyIXBUBjpWHKDYNhxNrWv/aaRiWBwKwoIDZCH2EN+TMQjyzR0yhgqiyo4vT4wl48E8g0C/AkAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kcmkicker-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBFxaXPz+/ISChMTCxPzerPyqXDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgQqr11AjG6/4FGDEVZBOapWSXbToFhoKkZUjJGEEJvyUDDYQaKATElBOJklB0OgY5SWgnmpFJm4PkMjDxLFYXFGSCyN8mocDaD0xsSO6wUS6K1FBzDD/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kcmkwm-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCRiXCRaVPz+/CRmZFRWVISGhMTCxESSjPT29DR6dDyOhDyCfPTy9CxqZOzu7Ozq7ERubOTm5ARehAxefPz6/ByaxBSOvBSGrAxynAxqlBR6nBRylAxmhARWdFxaXCH5BAEAAAAALAAAAAAQABAAAAWHICCKQTCeqCgMhJCihXEYSPuKRWIoC6PYsEZikHA4FA4CEJdoJh4QgXRwiOAeQudDIpEZIpPwhCImhyGGAmBSOVgumExG055w1ZPZhpPpUDwzExBqAAUDhxUVTQ0QEgWOOIcDiU1QjoSFFYiKDZYFmAWJlE9bkCM5iouWpiIfBa6frrKYAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kcmmemory-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChAQCBMTCxCH5BAEAAAAALAAAAAAQABAAAAI6hA+Bu+HCmgiiRuNoHZBRXQlc84TmcHzm2WVryE1YvMaZIdbVd2zw7lj4bDKGbxK8hHgX3K2JUDD8BQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kcmmidi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBFxaXKSipMTCxPz+/AAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLEL/pDJAONs1V2W1ebWJ46kKJxomi5D2QZEwRSyVMNyngf7Eg8FYHAIZMRoyCSNMSA0n85oszTxJwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kcmpartitions-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBATCBMT+/AT+/ASChATCxPz+xPz+BISCBMTCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrwYBCFqvhs3DNYXjChRlWBRjIRqGN4UuEUczMZxsDeXykdEsDQVVSLhQxhBCkVlmXA+KVHFYhFYOoHbMGN6pTQaW8YYiQmcG+q16a0+Zipw+4e9B/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kcmpci-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAADQyNATCBASCBKSipFxaXAQCBMTC/ISChAQC/IQCBPyCBPz+xPwCBMTCxPz+/AAAACH5BAEAAAwALAAAAAAQABAAAARVEMhJqww4a33F+EL4jUI3EEXoEWzaFbAKzyUQeLihDqrpHQhBQkHyqY49iWCxbDKfJQbASYUCpJbslcHter+NQ3gsLo8bBYd6zWYf0u24GjWr22f+CAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kcmprocessor-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipMTCxISChFxaXDQyNAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLrc/jDGQCWgIleH88jCdgXgB4JVQJxsVgQXIQvrWdwwJc/0jcOG0Y7gqwQVQR3R+EgyJcGjZUoF+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kcmscsi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCxKSipISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANCCLoQwZAFIV6UYgxi79Qa52WDE3bKV6YOpFpO3L5pJcckLBB8/wQEDezWAQpZqIWxFNAUkqkg6HmJOqGuArUqwfoTACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kcmsound-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQC/AQCxFxaXAQChAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLrcDiE+F4SQU4UBLH6VoHjT1okQR6mnuTYuJMWaGlkXW2u4QOipRYDws82AjJsHKez9MgrigAkF+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kcmsystem-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBGxqFAQCBPz+/PTqtOTOfMSyPNze3Ozi5KyeLMTCxMzGzKSipOTe5MTGxAAAACH5BAEAAAAALAAAAAAQABAAAARfEMhJQah4ihFunsFAEIVXCVJACIJhoBK6CerawsA8HAhbuAnYZrBDKBYMWpCy4S2QSRazyBIwrrjcoNFQzK4KR1bQcHhZjGM2BgWLMYJ2enForHPJtNj+kfHvcB8AfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kcmx-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIAAAASC/PwCBCH5BAEAAAAALAAAAAAQABAAAAIlhI+pm+HB4HkS1flszOCq7C2Qw0wdJ2Lk16BGeK5dSZX2jS9+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kcontrol-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/CRyBBxSBExOTNzipOTijOz67NT21LzutJTmlGzaXPz+/OTi5AQCBLy+JKSiJES2NES2LESyLDQyNLy+vLzWhLzWjLS2tGRiZDymJASChIQCBDyuLLzShDyiJMQ2LATCxMQKDDSaHDSWFCQ6tMT+/PzCxLzuvCyKDDSSFKyqrMTCxGzabDw+PISChASSBAT+BDzOPNTW3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAacQEBgSAwIBsikkFAwHBAJhWBBpTIaAccDAolEJIKJWEzBMiuWCyYjaLjd5exDIsE02A1NY9OIMzkcHRkebW99WFoVahkfbSANIYdCBh52IiOFb2VCByIWIh0kbSUNJpIBJ6CgKJlwDUIJKSooswIUt7crrwEsKC2+rC7CLzAuuzEoycmtbgAAAtDR0DLGztYALbm426/Wht9vzn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kcron-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAADxePARCBAQuBNTS1OTi3LSytAQeBMTC/Pz+/AQCBOTi5MTCtISCZAQiBISCfKSipFRWZGRiZERCRHRyZMTOxDxOPMTCxIyCjCQiJAQOBLS2tAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAWFIBCMpCCQpDgQLFusLVEYAXEgOJIQOXIkNF5v19MFWQrCgsFYxIC1InEYvOWmuF9QKrw2aoSkYtksOBwEaBeXeEAiiIdD8rUNJw8EBUGobIcQFggXLglgCohLGA95CQMOGVFDEQ4YGhERdAEWCZ2dDwsSEHMOEA0ABqmqGRkGDQ2pDRV+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kdevelop-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBGSKXEx6RFR+RFSORISidJzCjJS+hISydHSqZDxuNIyuhKzOpLTSrKTGlHyybGyqVDx2LHyedKzKpLzWtMzexLzavIS2fFyWTDyCLCxiHNTmzPT29PT69NTm1GSWVESKNCRmFOz27Pz69PT27MTKxJymnIS6dESGNDR6HFyCTIy2fNzm1Ozy5JyenISKhISOhMTKvESGLBxaFOzy7JSWlIySjCx2FBxGDIyOjOTu5BQ+DFSGRDR+JCx6FBxODDx2NGyaXCRyFCx2HCRqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAexgACCg4SFhgABAgMEh4MFBQYHCAkCCocLDA0MDgcPEAQRhRITFBUWDAcXEBgZGoQIFBscHRweBgkfICGDAQcUIiMdJCUmJxgoKbsAKissLSQuLzAxFgQyKTOCKgk0NS/fNiQtBBk3OIIEEC0cMDkvJiQ6ICk3O4M8FCQcNjAcJBM9fPwgBCQICxI0XtBgQeCGEHuEFGCYwILFBAJCHh7SEGJIRiI/IDaagSNko5OF/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kdisknav-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBERCBBQWFPz+xPz+BISCBERCRPz+/OTm5HRydAQ+XHR2dKSmpNTS1Hy+1AxypNTu9ITC3ARypExOTFSyzHS61JTK3MTi7CwqLBR+rASGtDyixFyuzDw+PAxWhAxmnBRypISitCRujAxelAxmlFSixMzKzCRqlMzOzMTGxMS+vGxubLy+vLy6vKyurCwuLGRiZLSytFxaXJyenGxqbDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAafQIAQEBAYh0jkQEAoFAxJ5EGAaAoSh8BBEUBSrQtGw5EodwHfgsBgeEAWijGW2XTaDRHJJExBrwl1AhUWFxgRDwdCGWkCGhsbHB0WGB5CjB8fICGOGxaJaWwGIiMfJCUTJh50dk4ODiejHyiff2oGDikqK7osiUIGai0pJyouxi+9v2pEMDEyLTIyDckCy0gBMDM0DTU2flFDARk3AH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kdmconfig-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxISChMT+/ATCxASChFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMg5gw00yyDGIAR1YUDggeFWFIZhnSBZrsZxdIOFEGTA2oeBAHeyuGwvzxBlYdUOLROMFzDQntJPrNoqAKUBaqnV+k57ZORruykHDj2LqIzUVKp1u0iuB/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kdvi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/MTCxCH5BAEAAAAALAAAAAAQABAAAAJCRI4ZwCYPo1gsiIHHxY86KXmWdiGkCA1Wp6Htc07NOsEv2oVyldLHbuBgEhORJhOxGEkkiLJybCZ3iqrD08hmF/4CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-keditbookmarks-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy+vERGRFRWVDQ2NKSmpAQCBKyurMTGxISChJyanHR2dIyKjGxubHRydGRmZIyOjFxeXHx6fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICACwWieY1CibCCsrBkMb0zchSEcNYskCtqBBzshFkOGQFk0IRqOxqPBODRHCMhCQKteRc9FI/KQWGOIyFYgkDC+gPR4snCcfRGKOIKIgSMQE31+f4OEYCZ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBASCBPz+xPyqXERCBARCBISChMTCxPz+/FxaXAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARXEMgpQ6B4WnGzDgJHWWMYdkAwEF1QFKe2oqDZztr7GpfKjrvAAeFDpQq8ISIRYBotSoTUkiC2ostqYps49BSKIVfaBbcC4MMWcTAbU+iw21NBk+gjuj8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-key_bindings-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChPz+/MTCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANMCAoRy2IEuYIQDsrBld0NN4XaJF5iCppWxBGtCscEAbkDfH2wh+ogiudD5AhvoZWoJEFtckBTE1dzKKfQjMtUjfQUzizjeBN7HgB/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-keyboard-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChPz+/MTCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANBCLrR+zCIGWCcI1cLpNCa5YHZsCmj2QTlxrZmmRFVSs4E7X13TqMTXsl36gSHuSIQQ+QYP0kncPCTokzWh3LhTwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-keyboard_layout-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBPwCBMT+/AQC/Pz+/PzCxKSipISChAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARSEEgZqr1hUjFIEQXBZVogDt/XYWxgoEVFzEUt3MGNm7SND4aarPfBFQYCQmtpiTErh+ahMK1SqVHoYcvtUptX67SWDXTPXWltva5q0WfEs+WPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-keystone-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCxISChPz+/MT+/AAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM/CBDcHkoFQasVUIrBe8fRNDwMAWpjUThmtmxk0IYwOaPx/V6XG3hAjmsRa0Qkg6NSOVo6F0nG88g4TUNDpT8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kfax-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+/MTCxISChERCBFxaXPwCBAT+BARCRAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARVEMhJQ6C4imEzDkLIXR4ADqFAThYRoFu4ti6YbhfdFm+aEzWgAWhB5QyGAMEwWA4PlpyFCWwOkAhCgla1EqxXKbD7vSJnyuUXyV5JuOxtqZV0z+3+CAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kfind-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExOTDw+PExKTPz+/ISChAQCBPz6/FRSVIyKjJSSlIyOjGRmZNTS1Ozq7Ozu7AxyzPTy9ERCRBQWFIyqxPT29AQ2vOTi5IzG7DR2zNze3Nza3BQSFISy5CRyvBQenISmvBQitMzOzAQGBAw6rDR61Hx6fMzKzAz+/IzW7ASyvCwuLMTGxMTCxBwWFDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQAAgEBAYj0ahckAoEJ5QgkE5fBYO0SeCOigkFE2DeEFgUAUNBwGBeBAcCMHirF4gnhBCBCE5PydqBBQVFhdTSgJPBk8YGRQaG4dCiQQcDh0eHyAhIiN+BHYXJCUNIggmfhUOAQgbJ6YCKGcVKSUaChwGHCYqCyuIDhkhGyIsLcccCL6TFxsNJ8fRLS7KvyNi2GIrAQwK1AsvVOJULi4AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kfloppy-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBISChKSipFxaXPyCBAQChMQCBPz+/AQC/MTCxATCxAQCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgZgggz5zAIBp9GFV8oSqRkikFanapBVgccGAiJBDWL74jd4UUxGBI/IcJQMigSimPSsMDcEFCFVkptKhCDgSBB7m4sA2y5eqqMF2YYKMBgys8nfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kfm-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBGRiZERGRPz+/MTCxAQCBMTGxPzerLy+vLy6vPyqXLS2tLSytKyurKyqrKSmpKSipJyenISChJyanJSWlJSSlIyOjIyKjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV+IBCMZCAIQKoGw0C8MFEUqmgYrTwXL50GhtegcCgedr4AIpEYHhQKopEWSCwYw1fUeBQxGo3hiBCIUR2OxyAwG8OoD0hkICFABMiZKBKZ0GNkPiIUFBUuEoiIMisVFRZ/MWwqAheVfxICdZIpmZZ1kYIAMxcuJWWhKXl5Kn4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kfm_home-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tJRqRGQqBNy6pIyKjDwGBPTe1JSWlDQyNOTGrNRiBGwmBIRaLNymdLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbIiorLB4XEltDrhcaLS4vtbcJra8bMDHAGrcyrTMXHjA0NSypEsO6EzY3IzU4OdoTzK0BCAkDMgkIOjJlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kfract-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBAQCxAAAACH5BAEAAAAALAAAAAAQABAAAAInhI+pyxudwoNACiFbuBzHt3XeEYbiBF5mN5HpyayqVrY0hdj4vvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kghostview-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/MTCxCH5BAEAAAAALAAAAAAQABAAAAJCRI4ZwCYPo1gsiIHHxY86KXmWdiGkCA1Wp6Htc07NOsEv2oVyldLHbuBgEhORJhOxGEkkiLJybCZ3iqrD08hmF/4CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-khelpcenter-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/FRWVExOTKwCBJQCBIwaHFRSVPz6/LxSVOSqrNyanIQKDHwKDHwCBPz+/OTm5Ozu7JwCBMRKTMxubLxCRNTW1IyOjDQyNEwCBGQCBJyanMRaXNyOjKQODIRydKQqLOzCxEQCBNze3Ly6vJQKDDQ2NIQCBCwCBGwCBFwCBDw6PNyipDwCBKSipEQ6PDw+PJR2dMRiZHwSFPz29BQSFIwODJwuLMTGxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAabQIBwSCwaAQHBgFA4Cg2BwwGRUCwYxobD8YBEBpLJoEGMUA4VywWTaUQOmstww+l45MKM5/DAf0AIDSFFBiIHI3IEHCSDRgEOFSUAJhQNJ0coYikAKpB4RQwrJiycWy0uRQ2AKKQAL3wwKEMCMDEdGEMvWxIKDTICIzMQKZdDKQ0dMSAxBzMPGjRGGCkoNTYaNzTRThgnJ9pFfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-khexedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTC/Pz+/MTCxFxaXPz+xPyCBKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARZEEgZ6rw4CB3wrJUggt03nANIoCUQoDDcvqJAaHXqunBxywFDZWArDHy4lOEwTBEKgYJRyeQJEIEnYrQsvU63abBKIYq2m+4s5mTeTLVRSFdmyy6kvGXijwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kicker-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/FxaXMTCxDQyNAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECLrcEDDKGYQV4+qbie9eGIJEVxTe+QmjUFgnXLLr615oF8x2v0I8DWpF2GV6slkLKSMdYT4nS0WgSkXYAWUbcXgX/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kiconedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwC/AQCBMRaBPyqXPzerPyCBPzCxPwCBPz+xMTCBPz+BISCBMT+xATCBAT+BASCBMTC/AQCxAQC/AQChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOpBicZQoEwjAE6hgQQwvH81AU8OnfuR3QYDgcgAKhjGj8+UgzQkHHw+2mQlQpgEAkFInEYnGDhr/h8VPGYDQcjcZj/iiv4u84vQ6FQCISERETgxN2AX6AgoQThlBOkCR+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-killustrator-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+/Pz+/KSipPzerPyqXAAAACH5BAEAAAAALAAAAAAQABAAAANHCLrcGzBK+YK4OAcAx4AXIURj4J2fJYhWh35pOHKoG8+mFxS5HimmXU8HBH4MQyJD+FI+kM3Ug9eENALQk9VhDW4c1y/YnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCxCH5BAEAAAAALAAAAAAQABAAAAIghI+pFrHbXmpRMmoBxXB75IWcKIKk022ZunJtdlSw5BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kjots-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPzerISChPz+/MTCxMTC/AAAACH5BAEAAAAALAAAAAAQABAAAAM8CAHc7kGsR1mc9d1Md/icIgXDB1YXMZQnZBJEIbdKABPGTbSfnuc8mw8W1OlotYER2fgod5iMKRqiNvwJACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-klaptopdaemon-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipAT+BISChFxaXPz+BMRaBPyCBMTCBDQyNAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARtEIBAq5w1TBGEGIM2ESTlVUNhaAFJUAcXgAXCZkFyJEoiIArWYQjj+Xi2yfBA0SU6CuAts4MCk4EdcxbznFhOCsjrWUxRhbRBBk48Z6kCZ2GeuN9xucF8FqcEBnt1OW4saSp7IoRPEjgiGBV+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-klipper-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFQyDEwuFEQuDISGhFRSVEQqFEQuFPz+/PTy7Nze3PT29Ozu7DQyNJx6VIxuRIRiLEwuDIxSFHxSHKSipLSytGRiZGRCHDwmFOzm3HxOHIRWHOTazHRCFHxOFEwyFNTKvHROHFxeXJRqLIxWFFw6DFQ2DNTCrIRaJJxuPMSynHRKHIxqRMSqjGRGHMSifJxeFKyGXHxKFLyaXKyObGxGFEwyDKyOXIxeHKSOdFQ6FIx2THRKFFw+FKx6NKRmFKxuFLyCPLyOTLyabLSefLyijFw6FJRmJIxWHHRGFFQ2FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfFgAAAAQIDBAWIiAMGA4IABwgJCgUICwwKDQ4PEBGCEQsSEwUUFQQWDRepGJ4ZEggIDbENrxobAZ4cHa+7uxAeH4IGICEIIsbGFggjJCWCJicovLwpIcAAGCorCBbc3AoILB2rgy2u0q8OLrcAJS8wr8nJrzEy6yUz79sivDQ1jQA2buB4tU8eghw6xgnYwePcqxcdbAjq4eMHECA+ggiZMYRIESPjShyBgQPJBB48OsiokaTDOoACItgwYULJhw8BbIzzEwgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kljettool-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxKSipISChFxaXATCBDQyNATCxASChAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMg5Q6CYBiFsxhvXXZklimRlDWenBQNRzKJRXCsxHPFcIDGcILYbGHqzAY41NCQSiuNgMLPAmNTElFoFWKecqe8mCRAIq6nt5imb0TC2wZByny3zdslMr3+8fgB+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-klpq-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxFxaXISChPz+/ISCBPz+BKSipAT+BAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJqwUh3xqEz8EWDKT3aVNAFAVBDqYQYitbjARhGDJt34Nc4SBAZAomoDAhKAwyTZZp5XE+O0lp9QVFeLNWUpflJXheTww2ijiLKSBPW/C+xOmzjQRU8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kmail-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPyqXPz+/PzerMTCxFxaXIQCBPyCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMgJgrWU4iAGIUFWFYMldF+okUPJeeAUDEY7FFzXqnNdkIGDgHAKzWgsDuJAFBhbtd1peTAWDFjpaZg6skonYfOZzC3HlduuMj1UZUDZ6RMblTTDokylQYsyFwB+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kmenuedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxAT+/ATCxASChPyqXPz+xMRaBISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEMhAq5UY2B3yFGDIYcFgnuNErGwQCl1VzHSJBsbBUSxBIbnEC0YrxICHhFKZCiATlldn8gSlNE7YEurRQHdd19Aa3m6nmV0F448AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kmid-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBKSipISChMTCxPz+BAT+BFxaXPwCBATCxARCRAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARUEMgJgqVYWsFv3lwoeFMwEIQYkkFhouoQlIFhHvCgz9oxjoeDblc6+Q4B4ZBXCSBQx+GIZhNAOURaACsYypq0kNeSSLC2uxm5fGZqAgqFO0OjT/wRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kmidi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/Lz+/CH5BAEAAAAALAAAAAAQABAAAAIzhI+By7oBo5RH2GvDRRhre0xiVHXZVpqfEI5iKkQxalzQIIPGhI+pSAN4cjqA68VIHvwFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kmix-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXAT+/DQyNATCxMTCxPz+/AQCBKSipASChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgJQqCXziDG2JoUEENhZBkmHIWJVptAmqcIW/Js1MiF56TBzkckAAcHoa9nMRKeA4TyJk0knsHhTeK5khBaH2VwLYVh40TJhQ6RzeIQV32Quz8hfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-knewsticker-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBMTCBPz+xPzCxISCBKSipISChCH5BAEAAAEALAAAAAAQABAAAANTCBCsysEpseQDI08KSPdYNmwUYSraUDRC64iAMbIuLGtOS423BhKFmgj2C+5EhsOoWEsOnB0FsKl0jnLUp3IG0O2sMNpRVHBAJpjyA8KOmNsMfwIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-knode-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAABwaDAQCBPwCBDw6NERCFJSWJAwGBLy+rPz+7IyOJJyeLBQWDIRqZIxydPzCxDQuHPTWzOSypBweDKyqLJyWJKySjPTOxKSCfOyCfOyKhJSSJJSSLFRWTDw+NOSqnOR+dOyWjOzGvNza1ERGFJSWLLy+ZPTGvOTOxOSSjOy6rLSypJSWjKSinAwODHR2HISCJOTWtPTe1Pz+9Ozu5IyKfNzazPy6tExCHMzKfPTy7KyupKSmnEQ2HHx+HKSiLKSiJPz65OzuzOTmrKSmLIyKJLS2TPTyxOzuvNTSlLy6fHx6RLy+RJyaNLS2NNTSnLy6lLy6dMzKpGxqXCQiDKyuNMS+PLy6VMTGPMzKrOzq1CwmDLy+PMzGTNTWxMzOxERCPKSiNCQmJERCRERCHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAQABAAAAffgAABAoQBhoOEAgOGBAUEAocBBoOLBwgBBAkKBAsMAQ0ODwOWEBEBEhMUFAQVFhejCBYYGRCGGhsKFBwdlh4fICEIIoMjBRQkJSYnKCkWCCorLIMtLgUvCjAxMjIzNCw1KoY2NxovFDjbMjk6OjuHNjw9Pj8lMggIQEFCATaDBD4JhhApgsDIESFIkigxJGDEkiJFmDQB4uQJFBxPokgRMIVKkypFrFxBgCVjlnuXtARQUGTLFS4yunipgRLBF0I3moChgsQeAg5hxDBMNCUAlyAcOCBKxJTQmKVNBfgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-knotes-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBISChMTCxPz+xPwCBPz+/ISCBPz+BMTCBIQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARIEMhJZQg1z6vzxR0VCKE4gCE2lhcRnF1LuAInBjNRfDMn64WCQRCcHS6IRE6nyB0Sx0ACkcwloFiflKp8Pm2bbRblkYJZHX8EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-knotify-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/Pz+BPyqXMRaBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMyCLoQznAFIUKE09krZ+VS9XBaMBBbZKIBUaSYa40kTIPNhyvazje+G2gFI8l8jaLCnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-konqueror-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxONCROfCRKfKx6LNy+bNTOpGSS1DRupAwyXBRSnPTSjPTqvOzqzMzSvHSSlKy6ZDxutAxCpBQ2XBxepLTKvPzqzPzy5OTShLS2dLSqRFR2jBRerBQ+jOTixOzetNS2XHx6XDR2tCRexBwyTDyKzOTavPzq1OzKdCx23BRKtCQ6VCQmHFSa7IyirOzSnGSGpIR+bFSO1DyK7DR+5CRixBw2VDQuHFye7IS27NzGXISuhEyS5DR25BRWxBQ+lBQyXCQqPCxSfGyu7GyerKy2ZFR+rERqfCRmxBROtBQ+fBwuTBwmNDSW9JyabLyqRIx+TExSXBQ6bAQCBBQ6ZBxapDR+zBxq3LyaLJySRHxqPGxeNBxGbCRmrHRyRERONDRKNDQ2JCQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeygACCg4SFhgABAQIDh4MBBAUGBwgDCYcKCwwNDg8QERIThRQVFhcNGBkaGxwdoYMDHhcXHxggISIjEiSvJSYXJwsoISkpIyorLIIDLS4WLzAxMjM0NSo2N8o4OS46OzwzPSk+P0BBgkI8Q0NERUZHCEhJSktMgwk4Qy1NTk9QUVJLphCiUsWKlStYsmjZQiJgIS4KuijQ4iXAFxYCDVFJwGUFmDBhMjYSw0KMyEYoBfkJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-konsole-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXFRSVPz+/PT29OTm5OTi5DQyNDw+PERGRExKTHx+fISChIyKjHRydFxeXDQ2NCQmJBQSFAQCBERCRMTGxHR2dGRiZExOTDw6PCQiJAwODCwuLFRWVOzu7BweHAwKDCwqLHx6fBQWFGxqbGRmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIBwSCwKAwKkMslEAgSDqDRKqBYKhkNgcDggEorkMrDQchkNhuOhgEQkk0l5S2lUGpYLJqPZTAwMHB0DCmhqAW0Rfh5zAxgOkBcCFAcfIBMECxwBBAEPFw8dChkhcBMDDAcdnQqtFKSWcQMimx4dGRkQBxGxsg6bBQEawx8jl3GnJFoFHRNXVVNRJYIFDAsL1tgiDiQXFx0HABwcXeQH5OjkRutEfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-korganizer-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBASCBISChFxaXPz+/Pz+vKSipLy+/MTCxPz+BPyqXLxaBAQ+BPy+vAAAACH5BAEAAAAALAAAAAAQABAAAARmEIRJqw1ikM37FsFQjMZ4lAVKBESBjCYsFiuBkkk5KG1dJL+CZjBYMES+l2x3RCBqtxHBOFD6DkHmAQj0yXgzmFdIhY2erBJBwTiczDSWq0Eg1gvYrvyHxcMdUEojYWIYHocbDX4RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-korn-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBMTCxPz+/PwCBMQCBFxaXISChKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARSEMgQpL03CEExDkO4dR6ghSFBkJa2CSlRcNX0voNQ5Ebn3pvdAWHo/W6IHUJwGFCAm+SrSTm+ZgcY6XnDhlim3wwxKNYymiX17HmCSxO4/OKPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kpackage-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xERCBMTCBISCBDQyNAAAACH5BAEAAAAALAAAAAAQABAAAANPCLoR+7AJ0SALYkxd79za12FgOTlAQBDhRxUFqrKEG8PyOqwEfMeKwGDI8zVGul0vFsAFdaxB43ecKZfUKm1lZD6ERZgBZWn0OpYvGeJPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kpager-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBFxaXISChASChATCxKSipMTCxDQyNERCBPz+/MTC/AAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARWEMhJZ7hADFI4+RpwBYBxFJ1HmMiYJUgiJPI8Bwmp7HyvyBOfMCHR+QwzhAAhMvZKSFgRIOwtJczqboFoBasGGVNUKVNGaEyTlEYL1sX2pYXOyO8XfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kpaint-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPz+BAQCBMTCxPz+/PwCBPzCxPz+xPyqXASCBMQCxAQC/AQChPyCBATCBMT+/ATCxASChIQCBKSipISChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV1ICCOYxCI5kmigTCYBKGW7WAH8QyYrn3LNFesYDgEjCVXIRYzGgWqgA2BICQUx9pMSkUssgsbFOWighW+7c24KDAKDccjCjVCHAEGo/GYl+wPLwwRfF8oT2mDAwuGWVJiARERAxITJkhaJhMSlJY7NDQpAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kpixmap2bitmap-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwC/AQCBMRaBPyqXPzerPyCBPzCxPwCBPz+xMTCBPz+BISCBMT+xATCBAT+BASCBMTC/AQCxAQC/AQChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOpBicZQoEwjAE6hgQQwvH81AU8OnfuR3QYDgcgAKhjGj8+UgzQkHHw+2mQlQpgEAkFInEYnGDhr/h8VPGYDQcjcZj/iiv4u84vQ6FQCISERETgxN2AX6AgoQThlBOkCR+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kpm-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxKSipPz+/ISChAQChMTCBATCBPyqXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARbEIBAa5BYUsHF+FQ2EUTHfUOoFQVpeuAVGAbrnmg603U7FD8UxXDgGQgoYMyAIBoSyI9Sx2seoj/lRlDFTmUBDs0L0gg2CGwFs93oWJdMOwCPiybhguout2f8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kppp-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAAT+BGSOhERadDxKbDRKZExWXKzG/KzO9KS+tER+lBQyNERaVOTu5PT6/OTy9Lza5LTatISylHSilCQ6LNzq9MTa/LzevKzKzIS6dBwuZISi9MzizLTW3Iyy1IymjHyGbCwuLDRGXHya3HSe9Jy+/MTe5Pz+nPzmhOTSbGyGXGx+XCwyLHyinISe/NzifFRKTFRqXCQmJExSVFyafFyC9MTCvAQCBMTCxExKTDw+PMTGxLy+vNTS1Ly6vMzOzNza3MzKzHRybERCPDQyNPzCxPQODHR6dAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAengACCggECAwQBg4qDBQIGBwgJCouDCwwNDg8QERITlIUUDhUWFxgBC4mKGRoGFQcbHB0eHyCLISIjJCUmJygpKiuLEywjLRYuLy8pMDGLATIzNMk1Nck2lCDJN9TcLziKOTg63DvcPD0ygjk+P9zcQDVBQekAQkMgPjzcPfLy1wAgiBQBAYIHkH5BbPwTBGKIQBBBjAQBsXCRDYJGZFSkJOhIM45+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kpresenter-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwC/AQCBMQCxPwCBAT+/MTCBASChATCxPz+BPz+/ASCBAT+BKSipAQC/AQChARCBCH5BAEAAAAALAAAAAAQABAAAARhEMhJq70YhM2D5UIYDARHBUWxEcRgHKgncWyLuPEc1MOAJLfBRsNSEBYbH8kw3BEUyABjZHzJdsiGI6AYLBQG5qykDSy+jwdLpimj1aVhe7tIr00a6Q4uP02dfRVygRZ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kruler-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBFRGDPTijPzmnKSGDOzWdPTahOTGXOzOZOTKXNzCTNy6RNS2NMyqHNSuJCH5BAEAAAAALAAAAAAQABAAAARkEMhJKwg4643FEIQHimHRfaiYmoFxvMLhwi5r3IaA37rBIomgABhEDBM/hHLJVCBYCwFjYVxQBdYFi8GQertSLqshaJgFZbK5wXI4BO63W/Bwt+HzON7BKvj/gIAcgxoWhhN+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kscd-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBKSipFxaXARCRPyqXPwCBAT+BMTCxMT+/AT+/PzCxASCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARbEIRJa5Ui672nsNYgegFhFoRhCuJAEgcsE+wYfHIc0y3JbT2QsOJCGG+/zyShMCICregEsUgEnNCe6/rsPkPTY2LxZLEOh4DEqbBmRQyGen0kjgB4ySSPp+D9EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kscreensaver-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXAQCBOzu7Ozq7OTi5Pz+7Pz+xISChHx+fMTCBARWlARepOTm5ISCBNze3ARalARanKSmpARSlHzC9ARGfLy+vKSipARKhAROhARKfJyenNTW1AROjARSjMTCxJyanNTS1JSWlMzOzNza3MzKzJSSlMTGxLy6vLSytKyqrAT+BIyOjPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAalQEBgOBQYj0fhYEAoCAyHqPRgDAyIggPikOAeFFVCYMHImqnfaiPAKH8VcLij+ghAGJFFlnuUCAJ1ExR5AnACFRUWF39/CxETXQoYGRoaFht/HAEdE2AeGRgVFBUfIH8hmx4doBihGokifyMPAiQcISEjJR+7HyZ/JScfFigpKSoSFxsiKywCAEjR0QDU1AIJFi0tFgnP1dYJ4QgJ4+Xe1tLTAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-ksirc-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAAT+BMROTPz+/KQGBFxaXAQCBDQyNGSGzDRivAw6lAQmbCRGlAw2jHSS1BxGpAwiVGyO1CRWvBRKtJSq3AxCrEx2xAxGtAw+pAw6nDRmxAQmZAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVYICCOQBCQKCoMaRsMbCvPNE3cRA0QRWEciIQigQLyfAtGqtFwPI6GFgQReex60WJEYr36UpOtQgQlUQAVieUyLoskY8Bhi3liEZJ6MaOmWCgJGjYGhCl+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-ksnapshot-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBATCBFxaXISChAT+BASCBAT+/PwCBPzCxAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEMhJKw3YViw6HkRgBUVnCkG4GUV5otthsO6A3KJEHm6R3AOYTtAy2QqzHCDwMpiSk8DsxIFGpc6T9YJ9GpSb7laDSYI1yzNa448AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kspreadcalc-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBATCxARCRASChAT+BMTCxFxaXEQCBPzCxPwCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEIBAq5U4iM17wJMwjORIfJkYFCs7nKA2rJQLp0Su66ikGcAg8OYTGA6BA/KAIIYsFudPGJQal8uAFVqxUg2JxBYbUGh7k5J6BppwKyB/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kspread-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+/Pz+/KSipPz+BAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANFCBDc7iqIKUW98WkWpx1DAIphR41ouWya+YVpoBAaCKtMoRfsyue8WGC3YxBii5+RtiEWmASFdDVs6GRTKfCa7UK6AH8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-ksysctrl-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBISChHx+fPz+/AQCBAQC/AT+/AQCxAQChAT+BLy+vAR+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEIAgqK1YzsG754QUDERpmkEpkkXrtoK6EcVgHIibhnNx564Yb0TDvQq7FQ34EiqPOhnREqhWSUPsyZSQAbbg7GcMEgwUiYVivTa1R+y4XEGoWO/4AMAfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-ksysguard-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBExKTERCRERGRAQCBFxeXKSinIyOjJSWlKyurKyqrKSqxPTy9LSmxNzS1Nzm7JyitJyipMzOzLS2tOz6/OzW1Ozy9Oy6vNyCjNRydMR+lNza3LSurFReZMTG3Pz29OSmrMx6hDw6PKS2zMTCvOyytOSWnMzi5MTa3NTS1LzCvNTe5Pzm7PTK1PS6vOSapMyKjNTy9KzCzMzS1GxqbISKxOzq7Ozm5Oza3MyytLzS1Nz29OTy9LTS5GyGtOTe3MzKzOT29OTm5KS2vKSurNzy9LTW5OTi5Mza7NTm5KS61KyytOT2/HyChHSChHx6fNTy/LzKzMTCxLS+vMze5KSmpLzS3Ky61JSSlLTGzLTa5FRSVJyanKSipJSWnJyWlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfagACCggECAQEDBIOLAAEFBgcHCAgJAYqLAQoICwwNDg8QERKXjQYTFBUWFxgZGhsJHJcdHB4fHxUgrCEiIyQCjRwWthUlJiG7IycoKQQBKisfLC0uLzACJzExMjMBNBI1Njc4FTkBOjs8PT4/3UBBQjc8FkNEQTtFRUZHhyQySEkHOAyxgOCcEhkSLC1ZwSRGEx1OnBx4EgNKFCmKAkyh0uNADBpDOpyQ0YNEAEJVIFjBZg/bFRIRSAXAwiFLDyNaesiYEJMRgS1cupDg4OXLFlI+DwkQgBSAn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-ksysv-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCxISChIQCBAT+BAAAACH5BAEAAAAALAAAAAAQABAAAANWCLoQzlA5IVyIK1S9L7PDsFHBIJXDFFaViYYEUQpy6orEqq12Aw+FmkjQQxEKwQCBSCz5BrGYkuc06nKU4s8gW4q0UAN3+q3CZJfJRhJ6fDwZOGbhTwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-ktalkd-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBKSipMTCxARCRFxaXASChDQyNATCxISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEMgZqqXU6gCuDIJQDQTBBQX3hUFpmN2hFaxhIPCJDrRo46dPglf7BTvDXsB2OwaSCd8tZ0kWgZ3Uk+hDvHRV5bfyybACPNmkY2EVZKpM5UBPre8fD94fAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kthememgr-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBASCBATCBAQCBDQyNPz+/MTCBPz+xISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhJaw1V6Bs0HgIWYFMnhSERkiU6ekM1FO9IGMcxIFK3jgGDzRADhAypQipI7A0OId1IaGhKntHDjWogTLCB3JbpvULD2ir5i0SPDYjy9ZgWDuQUwqBLLFq+ehZ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-ktimemon-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPz+BHSG5PxSVDRW9PwuLPQKDFze1AQi7CH5BAEAAAAALAAAAAAQABAAAANDCLrc/lCFGeKi1YktAH5c92mcR4HloA4P4RLAyjovLLdvvD5FX+gqgGFoUPh+N2IRcAQcngch0ehzQqVDas/6xBb9CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-ktip-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBGxubFxeXAQCBOzu7OTi5NTS1PT29Pz6/Ozq7Nza3PTy9Pz+/Nze3MzKzMzOzOTm5MTCxLS2tKSipNTW1Ly+vKyqrMTGxJyenISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVwICCOQRkIY0oORFEYqCoGw4EcSaHEarAgDESu4RioBIMfA1doPIwpZGJBhTQMEWh04GoqDBLtCKkYNL5hGUAwoZQfFYs46lBQLnK1SICJUCR5egMZGBgZcyoDGAwTh3oiAxMMhogpioyOjwADnIh+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-kuser-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxISChAT+BMRaBPyqXARCBPz+/FxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEIRJa5Ui673nsGAgeKE1Bl9AUEXbiqTlFlZaGUZoszm4BzhDAVf5BYbAXI+TAR6CS2ZGSZSEiIIqYIsSIEaJ7GRrlY7J1lKA7I8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kview-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPz+BAQCBPz+/PzCxFxaXPwCBPyCBPzerPz+xASCBMTC/PyqXATCxMT+/ATCBASChIQCBAQChISChMTCxKSipARCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV0ICCOYxCQaBkIwpmKJsu6qDkIREDMZFwUAYNwRVuxgLfDAUGEsRIJo2LRapUE0ABDsa1aAcZoo+stsnIMwcDQcDQUV9MjF4Q4GJFiQJJuGSYOFHkwezJ+ExUUEicmYDITARATAoomLiuQJhKTlTRgepYBfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kwin-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBFxaXISChASChATCxKSipMTCxDQyNERCBPz+/MTC/AAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARWEMhJZ7hADFI4+RpwBYBxFJ1HmMiYJUgiJPI8Bwmp7HyvyBOfMCHR+QwzhAAhMvZKSFgRIOwtJczqboFoBasGGVNUKVNGaEyTlEYL1sX2pYXOyO8XfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kword-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBPz+/FxaXISChPwCBEQCBIQCBMQCBMTC/ASChARCRAQC/AQChMTCxAAAACH5BAEAAAAALAAAAAAQABAAAARiEMgpQ6B4WnGzDkLIeVs4DAIBWFcpnKJVzCUcz8ZxVOKN/AWNKRQo5HQYELHwQxQSHR7HqDuwMIRisxBQLBbRFdUaYCwYjUZHywIxGI53K0jolRkJdLkhtKwaeWpJYW0AfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-kwrite-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBKSinJyOfPz27Pzy7AwKDExOTJyWlERCRKSelPz69LyyrKymnPz+/MS2fDQyJAQCBOTazLSiXOzivMS2jKSSVOzmxPz25NzSpPTu5KyebOzixNTGjOTWpMSydMSybCwqFGReVKyaXNzSnGxeNJSCVMS2nPz23MSuZIR+bJyShLyqnOTOtGxiXIR6XOTSvIx6RMSubIyCdKSalMS6pOTWxMzKvKSabJyKTOzezHxuPGRmZKyurMTCvPTq3AAAACH5BAEAAAAALAAAAAAQABAAAAajQIBwCAgIiEhiYEA4FgwHRDKhIBAWz4OhgGQ0FAPHA7qFEBONb0Qy0ULeQ2+aUrFcMI+3GYBOZzQbHB0eHyAhIQByDREiEwMjFRIkJQImAgJ+jScjHigkKSorLC0AKg2NFSMoki4qCy+IQgITKDAxkjIzNDWkQxQoJaskMgk2Eb1DNzgoOCoHDDY5yEIwJToAOzw9ET7TQiREAhkZ3kmy5QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-laptop_battery-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipAT+BISChFxaXPz+BMRaBPyCBMTCBDQyNAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARtEIBAq5w1TBGEGIM2ESTlVUNhaAFJUAcXgAXCZkFyJEoiIArWYQjj+Xi2yfBA0SU6CuAts4MCk4EdcxbznFhOCsjrWUxRhbRBBk48Z6kCZ2GeuN9xucF8FqcEBnt1OW4saSp7IoRPEjgiGBV+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-laptop_pcmcia-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwC/AQCBMRaBMTCxPyqXKSipFxaXASChISChMTCBPz+BPz+/PwCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARfEMhJaw3Y2iDGyJoUEIVRfIHGEcaBHCc4jcWbGG2cAuuhKIZE4mX68EgI3M/wORgQGAHr4HICD4NCKoBIJqsv7w6DKDgNi0VuN+O+GIxFl00hlxjakIhbo4cwfnoWfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-locale-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/AQCBPz+/MTCxISChMxKTKSipFxaXERGRGxqbCQiJDQ2NJQaHMwmJDQyNFRSVOR6fGwSFNxSVKQqLFQODJwaHOyGhOySlNRCRMSuBPz65PzupPyCBJyOLMxyJOTKRLSiNIR6JExCFGxaHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaPQEBgGAAYhcWjUMAUEAMDQtIIZRauBaZhKhwIsFjBgFu9HgKHrHNI9QYQCQQarWB313D5Ik68BxgIDQwOCgcJD2wBWwENEBANEQwMEBITFEIOQhWNkhENFhcYl0l/GRobHB0MGBAeo1QdHxsaICEfpyAiQlQhICMiHyMgs8FKASMjRiK/yLrGStDRXNFGfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-looknfeel-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/ERGRExKTLy+vKSmpAQCBPTy9Pz+/IwKFLQWNPT29GwOFExOTIyKPHx2NPz2pIQSHLwWNMzGXFxaLLSytERCHCQmJNze3GxubLS2tHR2dAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAWNICCKgVCWYwoEwUAMhXEQhhocRuHCMpIgiJVBptC9DojDIrFYwRS4wgGJZAIYuwL00Ej6FjOGEXZwPByQCNjAyrnKj4NkAqYUBIIoXC5pVGYUFgIXU2Z8fgdGFhgZiRqHf1EDFgCJGAcafX9aUSIFlxoFBX8vMYmemKJSY6Ijn6oHF26tKbAEGCaUKX4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-lyx-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBAQChARCRKSipASChFxaXISChPyCBATCxPyqXMT+/Pz+xPzerPz+/AAAACH5BAEAAAAALAAAAAAQABAAAARZEMg5Q6C4BnGzHsRgeVZRGIbYaekxuAFijUGRBOqMKPxlJQsLQxjoVWyWBsMxNEp+iRuj2VvVCklHLCZjiRrawGFmNQUajQ129RwYyCMSau2pcNh1AB7jjwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mathematica-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChPwC/FxaXIQCBAQCxAQC/KSipAQChPyqXPyCBEQCBARCBASCBDQyNCH5BAEAAAAALAAAAAAQABAAAARlEMhJ6wxChiFFCBUhENtQGIcBUghWDsHxWck7wMpKfXz/ZYBAYeCpKRQLWwkjMCpQJQ3TE8gdUgxPUMDlflINhzfocJB6BNEDqLnKpgRLTJZjBuIUAf1TExR0EyRASWmAFocAfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mouse-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBDQyNKSipPz+/MTCxISChPzCxATCBISC/MTC/AAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARSEIRJqw0Sg32rAANBFNwlhIQhGkNGAaSaouW0iYUBEIdYgzsUIqHAuWAoQlGEE9gMJKaU8IPupqLWy3qVkioAFqkLc9nCg3G5oxFr2ecavOOPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mozilla-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/JxqBHRKBGw6BHwuBHQuBKwmBKQmBIRWBGRGBMQeBKwaBHxSBFQ6BDwaBEwqBEQuBGQuBFQOBGwSBGxGBHQ+BOQiBPQmBLQaBKQaBCQGBIwWBLQeBDwKBHQSBGQ+BIRaBHweBIQWBNQiBKQeBJw6BPxGBNQuBLwiBPwmBKweBIQiBJQmBHwyBIxeBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZzQIBwSCwahYHA8SgYLI2EwpMoMBwQU2FCsRAYGQ3HwwGJSCYPCNnRoAgrlgsmo8hkLJpNpEjhbBYdHhYZEh9HICEiGRMjJAxPJSYmJxkoSocjKSorExYNSwMXLAwgDhYVSwUtRAMORwGfRR8uRpdGWEJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-multimedia-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBIR+hKSipPz+/MTCxMRaBMTGxOTe5MzGzNyytPyqrPyurLz+tKzqrPTy9LSytNTS1Pz6/Nze3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAWAICCKQWmOKFAKQ9uWacAOJcEWQjDKrxHYJZxONRAQaL+c76DjyY4D4A+RC9B8xkPiQKCySsjAQZAojHMva9pk8iGrCsWC0Wg4HCvT4wApyO0FEAcRJhKGhzUEioolDw8TgYQBEYITCIQqE4IRCnQOEXyYJAFxCwt1dzAxbCcjfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAAQChPwCBAQCBPz+/MTCxKSipFxaXAAAACH5BAEAAAEALAAAAAAQABAAAANDCBoK8TAC8Vy8QUyGr9BaFwmDZonZp66sIhBwLBMFlRl4rhv1IxiDoHDYuw1yw2Dxl0wugTqnjdkUPmezJWv7QXX8CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-netscape-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAEyStPwCBNTKrHRqPAxSfLR6VNzWvAQCBEyOrFxGPMSWdKx6XPz69Ozm1PTy7NTOtOTOxKRqRGxCJPz6/MzGnMS6jDwmHEyGpPz+/Hx2bGxiPOTexFxWNLSmhMy6jLyGXNSqjHxSLLyuhMSyhLSqhDQeDJyWdJyOVNTKtPTu5KSONMS+rLyqdMy+lFxSNOTezKySPEw+FEQ6JKSOPDw6LNSylHxSNKyWPLSeXExGLDQuFIRiRCRCVEwyJAwODLyyjIx+TNzaxMy+jBwaHNzGvMS2hMS2jKSWXGw+JFw6LKR2XCQ6TDw2HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAfVgAABg4QCA4SIBAQFiAYHiIQICQoLAQwNDg0PgxARg4oSChMOBg0UAgYVBRaDFxcIGA4ZGhscHB0eHISKoxkfARsHICEiI7oBrg0kGiUfpCEBJiIngygbKQ0bG5kjKisbFSwtAi4HLx0cBwYiMDEyJh4zMjSKKBQuNTY3Mb8vODk6kLky0GEHjxUyeiigMMPHJ0UCKvw4sQFIECEqhgQUSCSChRFFWhg5MkMjkk9JlJRY4uIEixk5fOhAsuOkqyFLXF1oQYOJTiQIAigaqohCD6JD/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-noatun-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBCQ2PARehAwODASCtASi5ASq7JTK5PT29MzS1JyipISGjAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARlEMgJgrg3zDHkCEQoEhrnVYXBDUVRdmagHjT7AnExHPtg3LldzYXr4FA6juHnMXZkqaiGMpEtOdOmETpAIEy473fV9Xphq7P6DEgMFIpFWm1sJ+4JBec8SFAnd3pveH+AeHcSfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-package_applications-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXGRmZFRWVARehAxehFxeXOTm5MTGxKze7JzO3ITC1HSyzGSmvFSWtESKpCx6nBxulNze3MTCxAQCBByezByWxBSOtBSGrAx2nAxqlARijARafARWdARSdARKbARGZARCXOzu7Pz+/Pz+9Ozu5Nza3Pz+7NzexPz+5NzivGxqbGxubNze1NS+vPTCvMzKzLz6vLzevPwCBNzevAwOBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADIALAAAAAAQABAAAAamQEBAMCAMikfjQMAsGA6IhGLBaDgeEEJEMhFIJBRKxXLBYDKajeTQBQAGG05n7vl8QABBNyTq+/8iIyRdJSJrgCMjJiYnhCIHEn+JiygpXQaGB32JKgErKiuNAoV+iQIGLBItLhOOgYkrmAYvLikwl6+Lo5gTtjFdLMHCKy8vEyITxV2tzBMFMTCWIgYlEzLX2NcwMy4vstngAS4tLyUGNODprdl+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-package_development-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/GxKFAQCBNSyhFQ2FOTGnJRuNOzWtPz23FRWVERGRJSGNMyyZHRydOzu7PTy9Ly6vOzq7Nza3JyanMTCxHQCBLxWVKQaHOTm5NyOjMxqbJQSFHwGBDw+POTi5LQiJJwWFPz+/Pz6/PT29NyWlMReXNyenLQqLIwSFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ9QIBwSCQGBMWkMDAgKIuBgsH5FBIO0+oSka0mFAsGtdpwLMbPxONBgCDJEQkEMnkn1RLKRGF3+CtCDRJ7AoUSEgAWFw+AChB8hYUYGRobHIwAHZGbHh8gayEhIqGiIw9+GBgSJBoliiGUrhcOJq0WJyAbKBUhnrocDr4ofkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-package_editors-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBLS2tHx6fOTm5Ozq7OTi5Hx+fPTy9Ozu7PT29Ly+vMTCxPz6/IRuPHROLPz+/LyOdLSCTNSmnOS6vPzmzISGhExOTJSCZPTSxPTKtPS6jPSujNyKZGxqbDQyNDw+PHRaTKRqVLRqRLxqTMxmPOR6NKyurDQqLExCRFxKLKRSFNza3KyqrKSmpDQ6PGwyBNze3NTS1LSytAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaWQIBwSCwahwFA8kgMOAVLpjMgGBCixamgECAYsELtoUAuXJtPRCCRMBu44ecBoVC0F2aC8qkIKBAICQx5X3INh3UMbQMOD05/AQ0QDQoMERITFBUVThZ1Cg0XFxgZGhobHB1KHp4NCR8gISIjJCQlJmGsCAULAicoKSoqDytIrAkGBCwMLS4vKTBNrAUJCzEBMjMuM35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-package_favourite-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+xISCBMTCBPyCBMQCBIQCBPwCBPzCxAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEEgZwrQzVyFq6Bj1gQOxgcBYDSzhnl7Azm7tpWT7VhdHmoFXzweqmYZE4I5C5AQKhkMAYbCMfM9EIWBAIKzNLNRbTRHCBUT6ewn6TOlyJuX2sOftS8YfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-package_games-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBPz+xISCBMTCBPwCBMTCxMQCBPz+/KSipISChAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrQzVyFq6Bj1gQMxgsBYDSxhqunKtu5bpSQdFDfFkS9DgHD5cTwBIdFnFLiSw2IzGGX+AocDNHQ6GhCJQCJsGRqThm/CoMBUCNc1W9HWmD2Jdsh+CfkjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-package-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xISCBMTCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECKoR6ys2IVqokF08yMTA1gwkYX5WQK5ma4VceTYPxXnBWdtY6+0834/Bowgzm6APWRQcH4TiMhPK2WYRiZWW7XK7/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-package_graphics-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/MQmJPz+/LwuLLw2NLQiJNTKVNTOZOyydNRaXMxGRJQmJFQuXFRypFySdHS+VLTOfNzWhJQeHFwCBGyGtHyqlIzKdPTapAQCBGRCbKTSjOzqxLzG3MzmxJyanBQSFJSSlBwaHCQmJGxqbFxaXNzmxPzmzOSenExKTLSytAwKDAQGBMTS5LzerOSaTFRWVHR2dJzOhLTKdNyiNDw6PFxeXDw+PLSmvKS2zIyynLzSjNTKXNSGNIx2lIx6tISavNzSbLwmJHRWfNzWfIRurIyexOSmPJweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAejgACCg4SFAYWIgwECAQMEA4mCBYwGBwgICQoFhowLDA0ODxARCAQSkp0TgwwUFRYHFxeLARITGIUZFBobEgUBC7aRHB0eBcC3iRgfGAIgISKRGCMeIhgkJSYniBkoKSgqKywtES6bgy8iMCgYyhwxMjOb7Bg0NTYr7Dc4OTo7PPIrQoRgJ6iHjx8xgMwIEgmAkIMxhsw4lYgBkSI5LEQwcsRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-package_multimedia-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXHx+fHR2dGxubISChNTS1MzKzLS2tLSmpNSytAQCBOzu7Ozm1Nza3MTGxNS+vOy6vPy2tOTStOzq7Pz6/Nze3MTCxOzOvNTqvLT2tDw+BOTm5MzOzPy+tLz+tLz2tOTi5LSynLz6tPz+/NTW1KSipMy6THx6fMTKxKyOLNTGVPTmbLTOtBQOBBQSBKySLHReFLzKvLzavAQGBCQiDNzKVOTSXLSWLNzGVLyiPNTCTOTaZLymPMSqROzebOzeZMSuPBwaDMyyRFRKHAwKBOzibMSmPMy6RLSaNLyaNDwyFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfKgACCgwECAwQBg4qCBQUGBwgJCgsLiwAFDA0OBg8QERITlYMFFBUMFgYXEBIYGRoboxwMFRQdCAoeGR8glAABBgshFA8BCxsiI5QklY4lJQYbJiQbypQnACgpB5ALy92UKissAAQXDyktlBUuLzALMeG+MjPKNDU2LDc47yqC1Qs5dODYwYJHj3f/Yrxb4QPHiR9Aqr0I4kNFDCExdgxRQaSItyA8jJw4YvFFjBdCGtCotECFjhssVgRR8W8QkgVJlOBb8k3UID+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-package_network-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBPz+/CRKfERCRAQCBFxONKx6LDw+PDR2rAwyXMzOzOzq7AwKDHSSlKy2ZDxutAxCpExOTBRavBQ+fBQ2XOTi5OzWhFRSVBw2VGRmZDw6POzKdCQ6ZBRKrCQmHAwODIyirGSGpIR+bCRixBRKtCQ6VDQ2JBw2XIS27DRKNISuhESK5DR+5BQ+jCQqPCxSfFSa5Gyu7GyerOzetBw+XBwuTBwmNFSa7Eye7DSW9JyabLyqRBQ+dBRerDR+zDx+3Bxq3LyaLJySRHxqPGxeNBRSnCRmrHRyRERONDw+NCQuLCwqHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeygACCg4SFhoeEAQGJigIChQEDBIIFBgEHBAgCCYMBCgQBCwyhDA0ODxCcAAqRihGXiooSExSCsYoVDBYEFwEEEBiCrBmgGgUbigMcHRgeth8gAR8hIgQECyMkJSaCAicoICkqASssvi0YLoIvMDExMg4zrjQTNTaDCTcxODk6OwQYJmCYNIhHDx8/gAQRMoRIDRcEBwkoYqTIkSMFkNiISCjBCR40UiQxwdGQEg9LSvoJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-package_settings-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChGRmZMTCxKSipLS2tHx6fPz+/OTm5FxaXOzu7DQyNMzOzAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhAq7wYBDECKVSGBcbRfcEYauSZXgFCrEEXgDCSeIEyzKSXZoBYVCoJVIqBGByKu0Cy8QHxmgNngWCkGgqsGWFseu6oMApoXHAWhWnKrv0UqeYDe0YO10/6fhJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-package_system-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBGxqFAQCBPz+/PTqtOTOfMSyPNze3Ozi5KyeLMTCxMzGzKSipOTe5MTGxAAAACH5BAEAAAAALAAAAAAQABAAAARfEMhJQah4ihFunsFAEIVXCVJACIJhoBK6CerawsA8HAhbuAnYZrBDKBYMWpCy4S2QSRazyBIwrrjcoNFQzK4KR1bQcHhZjGM2BgWLMYJ2enForHPJtNj+kfHvcB8AfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-package_toys-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBJxyLJRqJGxKFIReHKR6NJx2NMSmbEwyFKyGTMSibFw6FMSqdCQWDIxeHNS6hAQCBDQiDNS+jOzexCwiDCQiHLyeXFxGHLSWXJwuJGweFHQiFMx2bLRGNGQeFNTClOzSrLxKPLQ+LLxOPGxOHIxmLEwWDOzatNS+lKyKTIRiJJx2PIRmPJRuNKyGRIReJJxuLKyKRMSqbKSCPEw6HNzKnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAauQIAQEBAMhITCcTg0CA6IhGJwICyYwgWjEQg4HIgHBCuMBCCSM6FBHiIOk4cg0hYiKAFFxUJBtC8YGQgBFhAaBVdMAw8bHB0eHh0cGh9LAAMgAxAhHiKPIxAkH1cXEiVjJiQnKCljECoWCAgEFGUrKBYsYwARKnQIRxG0Ky0QtAAIvwcuAwQpLxDCGDAIMTKyMSczs7sQATQz2mMIMyAXu0IQNDUu6AgQ6EPwu35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-package_utilities-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExKTERCRAQCBOzu7Nze3MzKzLy+vCxqZBQ2NJyanKyqrGRiZDRydKza3FRWVPT29LSytDw6PMTm5EySjCxaXGRaJFSanCRSVGxqbPTmvMSqVJTW1GSurHS6vOzq7KSipISChFRKHJSGNPz23GxKFBQ6PKyurCwqLMyufJx2RAQGBJSWlEwyDIRiLNy+lLSKVDwmDJRuNOTOrLyabGRCFDx2dKSCVOzWtHzCxOTGnNSyhAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQIBwCAgIBAOiUiggFAyHASKxDAwUC8Zg0HAglA9IZPGQABoTSqJCFTIOEIsFgHBcEhhHUpKJFCwaGxYYHB0VEx4IEh8gIQwiIyQbJRMcHokmEicfDygAkCkqJQgIGG0rLElCLS4vMCWqQwMCQg0UMTIzNDVLQjaIGDE3ODQlS785CEkxKjowvEOHybG4O6JDCdNKuDUxRAmxRDHeveUAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-package_wordprocessing-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBHx6fPT29FxaXPTy9AQCBHRydPT25Pz6/ERGRIR6PJyORHR2LDQyNLy+vNTW1Ozq7Ozu7LSiVKSiTIyKJJyenMTCxMTGxNTGlNTSjLyyRExGTExKTBwaHOzivMy+XBQWFExOTNzOhIyKjFxeXDQuNMSyjNzOnBQSFNTGjDQuLCQiJAwODCwqLGRmZHR2dAwKDCwmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAafQIAwQCwWhcihYMkUDJLIAKG5fEILhoOAgGAmCgXFgsEoNByOxwMCiTTAEsmEAq5ULJbLxQEuYCQZGn0JGwkcCR1gCUIeHyCJfX2JIUIHIiANCQMGIwYkCSUgi0KPHSYdJyAnKCkdHQ1IrhgdGCC1s7UqSCsdKLi0wL2xHY/FxMcssS0JIS4vIy8uIQktHUkgKygsMNwwKCAxUOLjAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-panel-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/FxaXMTCxDQyNAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECLrcEDDKGYQV4+qbie9eGIJEVxTe+QmjUFgnXLLr615oF8x2v0I8DWpF2GV6slkLKSMdYT4nS0WgSkXYAWUbcXgX/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-panel_settings-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCxPz+/PzerISChPyqXAAAACH5BAEAAAAALAAAAAAQABAAAANKCLobwRAG4SJw7w5BswoEkQXbRn0h5ggF14FhbIhb68SiOgnbLRsPEovjwwVLRIdhCfwMiR/VZ1A7WS4tntWyynquq+01+h1//AkAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-password-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCBPz+BISCBPz+xAAAACH5BAEAAAAALAAAAAAQABAAAANECLrcGi6CIAKUKwxSb/ZasXWPMFwBQRQiZwlqAVnEGbRwKz/ndMep3QNUqKV6kpQh6HFoCIaBMDmQTpOsJsaC6XoZ/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-penguin-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/ISChPz+BMTCBISCBAAAACH5BAEAAAAALAAAAAAQABAAAANHCLrRsTC6F6UId1TYiNtMQRQNqARDOlAgJrzlhr7vqlUufbHMoMO8k+8XY4yGtc9pREIORKRTYVoYDgxUVmBqmGCLJzDYnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-pixie-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXPz+/DQyNAQCBKSipPz+xPzerPyqXPyCBERCBISCBMTCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARdEMg5Q6C4BjEGyZIlCEFHfJQonEERnB8sE6RxIMkAnGtPBzacjqBQLBiMxS+Y2xmRx+WtSTgmkwQLcwhNKqRCz3VRBOeGvh5wqpPMzO3JQFBguWAYxeiNwnRAEn4RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-plan-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxPz+/Pz+xMTCBISChASCBMRaBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEIRJKwU4iD23FwEmDeAwBGYaZiehWutEFK6JqtlM7KZhHhOJbuizIUKBHVGFOOaUPgPlGEsSDNjbKWBgcT0oX5CV2qakIg24OTGA0sxjeSWpUC2ivESf90cAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-proxy-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/KSipFxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANGCAHcziuIuFy44045WxhZpkxCB4GEKA1lpIAiVG7XB1bjPMHxqds3y++S6nGOL1ikpYlkbBSZM/oYfXBVaS8LuXCr2IY/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-pybliographic-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBMTG5OTi7Nze/NTS5LSuxOTm/MTCxGxaFIRmFJR6JLy+zOzq9IRqJJR2HLSaNKSirNTOxKySLIR6VLS2vOzu/LSqhNzOXHxqNMzK1KSGJHxmFKSabLy2pIx2JJyCJIRyNNS+VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZhQIBwSCwaj8WAEplULpkAZ0AQgEaVA4K0alQWDAdEQrHgNguMRsHxgJiJgcEg0pA4Jk84ZVCoWC4TGG9CAQkZGnUIG3lDAQocCh0eFB+MjRsgIAsLIYNwASKCnk2WVkR+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-realplayer-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIYAAAwWVBwC7BwC9BQC3BQOvBQCtBQCrBQCvBQO1AwKPAwOVBwC/AwGnAwCXAQGNAQCJAQCHAQGLAQGTAwKjBwG7AQCNAQKRAQGDAQCBAQGJAQGPAQGFAQKVAQGBGRiZBweHFxaXDw+PExKRBQSFERGPFxeXCQqJLy+vAwCjJSanFRSVLzCxJSSjIyGhGxubNTW1KyurAQGHAwODKyqrHR2dBwO7AwSZCwqRDQyLCwuLAQKFAwSjAQCLAQCFAQCDAwSbAwGbBQKvBQCzBQC1AQSNBQKtAwOdBQKnBQCxAQabCwOLDQSNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAe/gAABAgGFAwQFBgcIgwEJCguRDA0ODxCXERITFBUWCwMNDxcYpKUYGRobFQEcFx0dGLCxrx6kFQcYHyAhIiIhIyQlJiekESgYHikqKywtLi0vIDCkMQQbLiQyMzQgLDQzJSCkMjU2NzIYOCYyOSYmH+gYOjUBOzw9PT6mGD4P/AORahj4IaECBFI9gAQhJSSSw0g2fGggsEAIw4eRhhBhEGBBgCKkjAgZSRLFESFIRibZx5KlkpYtlbyEuW+Jn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-remote-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBDQyNISChJyGPGReLAQCBMy+hERCHKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARFEEgZqp0Y1KxD9twEapg1kqhwBgKFvqIIjgMRdy4wFIaNbiiCYXDIAUcH328EQsxiIBXAqWn9MtTSTZLNybizEweY8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-samba-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIUAAAQCBDQyNFRWVASC/Pz+/PTW1OyytNTW9LSy7PTGxOSenNx2dMTG9Jye5OSKjNxiZMw6PIyK5GRi3AwODMwmJLQCBCQmzPS+DPTejPTaJLR+DPT21OzqtNT21MTCxPTyxOTmnNzedMTyxPz6/ISChOTijNzaZMzOPIzijMzKJLS2BPT29Nza3PTmxKSipOzu7LyGJPTKRNSeDFxaXERCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAMALAAAAAAQABAAAAacQIBwCAgIBsjkAEAoGJgHxFC5TCgWAEajyFUCHA8IICJhTggAr4NSGVsAF8wlnSQWBYLMRUNHMjccTB0AGh5dfh8gIQAiAAJCIyRCfiUmJwEokARok0slKSqPApukAZNDRpqbkZMjSROOI5srLAGwS34tGgEuBCMvAjCBA64ALRgxuyzAMnItQmgaMRcypjMByNR9QjQ0adzeaX5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-scsi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCxKSipISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANCCLoQwZAFIV6UYgxi79Qa52WDE3bKV6YOpFpO3L5pJcckLBB8/wQEDezWAQpZqIWxFNAUkqkg6HmJOqGuArUqwfoTACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-style-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBOzqBLS2BPz+HPz+rPz+BPz+lPz+zPz+9Pz+1Pz+nPz+hNyuhPz+pIQCBMTCBIQyBPz+/MTCxFwmfCQiJIxOrHw6nJRWtJxmvJxuvJxyvAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVvICACwWieYiCUwVCiKVEEhjHA6YEcxooHBURCsXihaAYGglEzngKBhsMmMDhH0YcBAu16SY2IKiApm81RMXTCblPelDCrXJlI6hSL5SJOSewVdRMUGHtGZICChHsmZHeAgxkaG41/bWxnjV6bUH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-terminal-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTCxISChPz+/MT+/AAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM/CBDcHkoFQasVUIrBe8fRNDwMAWpjUThmtmxk0IYwOaPx/V6XG3hAjmsRa0Qkg6NSOVo6F0nG88g4TUNDpT8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-wabi-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/ISChPz+xAQC/AQCxPz+BFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARUEMhJgw20XsHxvIEwcKQHBESaDkShmqhKsMb7tW1RHPwOH4ZdYcBDGH+8A2JgLH2MzZHAJgmRBAgZAabNqg7cJMGb5BKSZF4Yfb5Uzmp3piqfS/wRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-window_list-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCRiXCRaVPz+/CRmZFRWVISGhMTCxESSjPT29DR6dDyOhDyCfPTy9CxqZOzu7Ozq7ERubOTm5ARehAxefPz6/ByaxBSOvBSGrAxynAxqlBR6nBRylAxmhARWdFxaXCH5BAEAAAAALAAAAAAQABAAAAWHICCKQTCeqCgMhJCihXEYSPuKRWIoC6PYsEZikHA4FA4CEJdoJh4QgXRwiOAeQudDIpEZIpPwhCImhyGGAmBSOVgumExG055w1ZPZhpPpUDwzExBqAAUDhxUVTQ0QEgWOOIcDiU1QjoSFFYiKDZYFmAWJlE9bkCM5iouWpiIfBa6frrKYAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-winprops-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPz+/ASChATCxISChFxaXKSipPz+xMTCxMTCBPwCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAoALAAAAAAQABAAAARXEMhJqwxAjM23wBMhjGQJEFKhriwrGUcsE3JsvPWBFAAiT7BaIYAA/HAxWk9CO9wAwd0SkJA9g8NiomnDoYqnHDAGroqRyVy3F2i7326LnKKo2+94hT8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-wp-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBAQCxAQChKSipPz+xPz+/ARCRFxaXEQCBMTCxPyqXDQyNPzerISChISCBASCBERCBMTC/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAV1ICCOZDkGgSgMg0AUZWAExyHc7YCQclLYtxtieAoUEApFUIBgnRYMhUHRCDYcDoUIRUhOlYLkYwcIDLvSpAsBiYx0CPQUgXNv4V0ZWEByDBgRcTMGDislTX+CMgISJk1+AQ4zWiYiCCiRDmRbmJ2eKZWhAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-xapp-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChAQCBAAAACH5BAEAAAAALAAAAAAQABAAAAIyhI9pIa0nYAtPUGlTRszJ10UA8xiNRZZmJKoA25boqW7npeHvlKRHyIn9aKYaz6XwFwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-xcalc-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChPz+/AQCBCH5BAEAAAAALAAAAAAQABAAAAI4hI9pwe0Ogpi00hHF2LzzzFlTsIHD45SSx6oCeW4wjK2tl83y7t64pIsJaxrfh2bEAJIlhRPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-xclipboard-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/MTCxPz+xPzerMRaBISChCH5BAEAAAAALAAAAAAQABAAAANICLoQwdBJIaRjgYbBR66Lo1nfowTER61aWGRd1y5GyrLm+QrxMJ81FQ4T2MV+jUPwBgpVdrdcQ6AUIj8Ha/N06Hq/UpLY5E8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-xclock-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAALy+vAQCBPwCBMQCBIQCBISChPz+/MTCxCH5BAAAAAAALAAAAAAQABAAAANbCLHcrSLKOZcYmDSCsR1aUABAsXDDJwJGa5SBFwgaWxbCG3CWaBwG3C8Y67FawpYiNQscg65fsVkYuoAmJs1pBR522lQB6ILJLqHRwQQOZzYdZnw+dzruDIA/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-xconsole-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/ISChMTCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLrcGjBKCYK4OGcohv/gxw2aRgyjYJXCmVpr5loke82dfaO03vI5Ha5mwxGOyOSRF2qKKpMoxEFl+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-xedit-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBMRaBPyCBMQCBMTCxPz+BPz+/KSipFxaXPzerPyqXIQCBARCRDQyNISChCH5BAEAAAAALAAAAAAQABAAAARnEMg5gw00yyDGIJi2FUHhDWEWeEXrgaphHEOBJF8KBLKyLINEIAHbyA6/hbDACDSMBt9PIBA6n4HfIElFXTeKg2LbtTSeu7BiPegIvuA1mwrfOB5r4PusCjimZmgUF4F8IhJnhiJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-xemacs-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBDQyNKSipPz+/FxaXISChMTCxCH5BAEAAAAALAAAAAAQABAAAANJCBASoXCFoVi8VdL6HHQeB4YjSAxnYQygSLzoSTjbEs9vMF86cbyH34NX+AELQ4zO+Nopm6cBC1PBEQwG6gd3SGo7Xa1STIb4EwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-xeyes-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAI4hI+py50Bw4lyBiEggFjvi2VcqIFhdnaDSabZKrbjS3W1OHz2CkJD/vHlKD/Er2g4Ah3MptPgLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-xfig-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+BMTCBISCBARCBATCBASCBCH5BAEAAAAALAAAAAAQABAAAANQCLocwbAJ8SIMYgwHHO9Opk2V5xGEplZK0alaui0eDLOB8QTykOKGQ6mnKQWFPILDN8sdng7l69c5CjuKAHNnZb2KnUOhcG3MsmMv7aK2+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-xfmail-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPyqXMRaBPz+/AAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANACLHcAVCJSWcYLwaxSPAXBj2bswyiIlUWSr5muGhbdaZjTd1ZzvKMFaOFcbCIpiOnGGs2FM5gLkLrTalQLMCfAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-xload-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+py+3hEoxnUmBpyBjNzWXfJnkGKJ4dBlbjS7Jni9Zsjec66hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-xmag-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipMTCxPz+/IQCBPyCBMRaBCH5BAEAAAAALAAAAAAQABAAAANICKrR+6+JIRxkc4RBww1TQBBNB21io2rRRKpltaDvis4hvJmzBmuslo+zkZ0yu0rBcwJ1AgXD8gJQMaJTaqRwyGqvzO9M4U8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-xosview-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIMAAPwC/AQCBPz+/MTCxAQChPyCBAT+BPz+BAT+/PwCBAQC/AAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARFEIRJa5Ui663HFEQojqEXCAVhrCxLmGB4kCJM03aIHEdC5rfaJ6UotlavT3AEIxaNLuAyd2wlT0thYMDter0BiWU8AfgjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-xpaint-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBPzerMQCBPz+/AQCxPz+BMTCBASCBPyCBPzC/PyqXMQCxIQChKSipMRaBDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVtICCOYmCaZGoKLBuMbykMA1EURFwCgWAQwKBAxxMQDocgAjEkrYAsoS6QGEYJCgWhWVq4tgJGY+iAVbcBB5jLq/aMbzJsYXK0Arky7JFY+BcJDyckDgEPh4d1aUSFJ2l6ARApDpSUKkQpmSJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-xv-16:apps apps16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPyqXPz+xPyCBPwCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM8CLrc/jC+oIK9Lgg7RuietWhCSWkkVZUbEBBnWxXFSVP1eLt7kPM3X86nEhJrtx/P0tuNilCVZEqtNvwJACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-3floppy_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVrICCOQBCQKBkIw5mqLFG47zoQ+FwbN57TosDhgPD5dMEEIqE04kwlBWKBUEiNVYFpyqAyGEUCgqEtERiNNMLhQKzLQYJg7n7Y4aMAwbCUPvAQeWNgfzQQETAIhSMQEogwgBITQEGGEREmfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-3floppy_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVCH5BAEAAAAALAAAAAAQABAAAARcEMgJQqCYBjFu1hxReN82EOhYGieaklJwHIjrqnGCJLqNWhUFYoFQCG1FgWXIIDIYNQKCoawQGI0swuFAbKsxgmDsfZjBkwDBsNM90Jot9A3DbBD0Dwiur9QnfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-5floppy_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBFxaXPz+/DQyNISChASCBARCBMT+xAT+BAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARMEMgJQqCYBiFu1sIwdJ+0hSKZnZw4ehPLoW88c0Q7X7JABLlbp+eT/UyzgpADqwgKxKYpeIMZQNWJ4YBhWRHcrgpgQCSkJu3hYPFHAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-5floppy_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBFxaXPz+/DQyNISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM+CLoQwZAFIV6UYox61cwaF32UtlkLSYFnulJEuT6qQATxW9W2enurgo6CaggKvKIn91K6mh0gMepydqwAfwIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-cdaudio_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-cdaudio_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cdrom_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-cdrom_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cdwriter_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBFxaXISChERCBMTCxKSipAQCBMTCBPzCxPz+xPzerMT+xDQyNMTC/ASCBPyqXPz+BARCBAT+BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAWIICCKgWAGYyoKA+EWhGGogOAaB6Lr8ygUCYWCkEMoEovBSHZUFI8LGYloODJkhWijMbMdiAwBQEbYxmpExFlkgN3QrliXAcvNAuVt4coYKtQ9BlwLCQQFMAlVSmwEUX8IB1UJiQAObEE6BA9VEDMOEUsDDzoHkZ4LoCkyqyIOCxI9NCOfETJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cdwriter_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXISChERCBMTCxKSipAQCBMTCBPzCxPz+xPzerMT+xDQyNMTC/PyqXPz+BCH5BAEAAAAALAAAAAAQABAAAAR3EEgZhA0zSzGIL4RhaIDgGQeiquMkFImiECmiJMswibdS3wsRhWa4MUSFYKMxMh1oDAFARFiGSjTEVWIAnbCeUJMBSo0C1WXhyJgptC0Dc5EgFECJoo5LCL4RB0UJeRkGMSoEDkUPLYUDDioHgY0kIpYkmJkAfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-dvd_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-dvd_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-hdd_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKROzSrOzKpOTGnLSafLySZKxuLMSOVPTWvPzixLSehNyibOzOrGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTOpHxOJKyKXFw+HKSipISChMTCxFxaXIRiPNSWXExOTOS2hLR+PLRyLPTWtMyOTASCBARCBPz+/DTSJIyKjIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwrA3HQ7scQAqFAcEQOUi0zAkFUSFYLghMBloUCDQNGxwdHhwHekcfICEhICIfIxkLJBABJUYCICABIhAOBiYnKJaXmH4CGSkYCCqkSAEfTKenrkOwsrQll0IrS7G5uwArLLaxLbXCLsTFLyDBKy4wZEVHvCwsRn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-hdd_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKRPTWtOzKpOTGnLSafLySZKxuLMSOVOzOrPzm1LSehNyibGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTWvHxOJKyKXFw+HPTOpKSipISChMTCxFxaXIRiPHxaNLRyLNSWXExOTPzixOS2hLR+PMyOTPz+/IyKjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwGgiD46FdDiCFwoDQAEe0TMkEQSFULIcLBloUCDIaDRscHRsNHhhHHyAhISAiHyMkJSYQASdGAiAgASIQKA0pKguXmJl+AiQGFwgrpUgBH0yoqK9DsbO1J5hbsrq8SrgstlJFHy0gwMVFR1J+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-memory-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChAQCBMTCxCH5BAEAAAAALAAAAAAQABAAAAI6hA+Bu+HCmgiiRuNoHZBRXQlc84TmcHzm2WVryE1YvMaZIdbVd2zw7lj4bDKGbxK8hHgX3K2JUDD8BQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mo_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBKSipDQyNPz+/MTC/PzC/ISChASCBARCBMT+xAT+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJQqCYBjFu1hxBeN82iCIJDgWaYhtntC4ZCzItdhWOD7mdwHLrAAczoKViIh6Vto5lcDjglppp9UpCTALULRaASGS5E4TCnB2rFyqJO5Gw+CMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mo_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipDQyNPz+/MTC/PzC/ISChCH5BAEAAAAALAAAAAAQABAAAANHCLoQwZAFMV6UlBB759Aahw0FGEITZZQmlwoqq1UNDA/xLDhvhQ8rnKPh4f2EropjcDjAhpJl8ylaBJhTaCelvRC7XqLXnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nfs_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBExKTGRmZPz+/ExOTMTCxAQCBDw6PCwqLIyCRHxyNCQiJOzmxMSybFxSHHRmLIx+NFROHERCRFxaXASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVWICCOZGmeaEoGKiCwwUAI5zsUBnAUQ0CLNhxLFEDwDAnFzTAsBRYJRsORSwUeDUiEWYtJIhFj7+eKCUdPHmxyNj0nFABXRam0RBSLvZW/VFN1FQYGfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nfs_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBExKTGRmZPz+/ExOTMTCxAQCBDw6PCwqLIyCRHxyNCQiJOzmxMSybFxSHHRmLIx+NFROHERCRFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVLICCOZGmeaEoGKiCwwUAI5zsUBnAUQ0CLNhxLFEDwDAnFzTAsBRYJRsORSwUeDUiEWYtJIhFj7+eKCUdPHmxyNj0nOa6q2qrbW/4QACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-printer1-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBFRWVPz+/Ly+vISChMTCxFxaXPT29DQyNJSSlHR2dERCRFRSVERGRBSmnExOTExKTAT+/NTW1MzOzMzKzMTGxLy6vLS2tGRiZFxeXOTm5IyKjISGhLSytKyqrGRmZNTS1Nze3Nza3Hx6fKSmpKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaUQIBwSCwaA0ikkRgQDJCE5LFgOAicUKUwUCAgBuDE9RkFcL3ggbgQUCwYyIIA8VU32ASDwoEcIAoHCQkHbA8EBBARSX0DXQEPEgQCDYpJExQVAWCHBwcNDUkKChQWBBcYARkanaABExsbHB0FGB4fIKoHAWYhpCIBIyQLJSAJGbtbULUTISa4yEVJJSbO0EtmUkR+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-printer2-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBKSipAQCBPz+xPz+/MTCBISCBISChMTCxFxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMggqrwYVDGGzRLXEZ0HhgMpFIXxZZzRBsHxXquAUHqCCBgB6YcoFhNAXMWISCQOv6Dt6DMmQwQntHjwXTVL6mH83Ry31qBO8CSQSmVg2GM74aAVij2UTPojACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-scanner-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MT+/ASChARCRATCxMTCxFxaXKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJgqWBVivEldkUdKSXhVjZfenommglDERh3Tc4E4ZRHAGgkEPr9X6H5AHBERSMRyWzkug8jQXFEhWoOo8dRYxqLXSmGjIJnVaz29Q3fAP3RwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-tablet-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBMTC/Pz+/MTCxFxaXKSipAAAACH5BAEAAAAALAAAAAAQABAAAANECLrc/iosCUEQlEYdRp6dZ4lgKBBEp1kmmpLRMBQu6qWLEdYBn+81F0wnC8oCK+LAQDgGDIaG0vOMPnRIaEUBtW6//gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-zip_mount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BAQCBFxaXMTCxPz+/ASChPwCBKSipASCBARCBMT+xAT+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJQqCYBiFs1lwwdF8VEsR4YVuXoirYFcWbkmY31wPqma2ZwReqBEODQutwEY04oeWqMniGOEzW4HAVZAEImVSCSLDGYIX5/EMoFtNSOWHxRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-zip_unmount-16:devices devices16 16:photo:16 16:R0lGODlhEAAQAIIAAPz+BAQCBFxaXMTCxPz+/ASChPwCBKSipCH5BAEAAAAALAAAAAAQABAAAANICLoQwZAFIVyUNIx6WybE9kBTFYIiVhXFGXJetbYDaHnlathZk2eDQunw0GwomeGoMThmKETS4PAURCMlZccHXXYct60Y4E8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-blockdevice-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBMT+/ATCBAT+/ARCRPz+xARCBPz+BATCxISCBDQyNMTCBCH5BAEAAAAALAAAAAAQABAAAARhEMgZwrwYBCFsvhs3eF8wDMJAVBVmnupazKRmGDFxzMVBBjcDQXfYHRA/QmKpKBYRSMoysVgwGEeoJ1ClLhpXhlbiqJobjcA1Sn48qug06+JwP+I1UMCNzmcqaR8lghN+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-chardevice-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBMTCxISChPz+/MQCBPwCBAAAACH5BAEAAAAALAAAAAAQABAAAANCCBDcHkoFQasVUIrBe8fRNDwMAWojMTZmtmzByp6v7LQhTOLadbkxj3AUWZAcxcUgyYwQm8wYoOCCLgoGK5Nq9ScAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-desktop-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExKTDQyNHRydFRWVKyqpGxubExOTERCRLy6vFxaXBweHFRKPFxeXAQCBIyKjCwqLMS+tKyurDw+PNze3ERGPPTu5Pz+/Pz6/Nza3MzOzKSipISChOzq7NTW1Ly+vHx2ZOzm3Ix2XJx2XIyOjKyqrJSSlPTexPTixKR2VKxyPCQiJPTy9JSWlHRmTOzSrMzKzJyCbKR+XCwuLOTi5CQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQIBwKAwIiEjkgJBsAgoGwcE5RCQUgAWj0WwcHA8FRLhAcIcKhyIiMSwcwglc2ABTDA2Eo9KQoy0PFxgYGRobDxwBDHRgF44YHQ4bHgkfHBUMHQ8gFp2dISIjEQwfBwIkJR0mICcoJycpKgweCisAEAcPGSwtLi8vsQkNtkMrBxswCQ8uMTINY0kzBCQwNB/DVAArBC0NNdlDM9BDfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-file_broken-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXDQyNAQCBMTCxPz+/KSipPz+xPzerAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEEgQahVijMmD/oRAbBw1FCgaFFrppeo5didsZTSMDoRBSi/dgfUz6Va7HPIQGB6KnpW0EEB4Oshp5ZlTFRBfFs3ZLDihtTAYwZ14nGbzoS3JfO4ffwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-file_important-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBExGTKQqLPz+/KQqNAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLoQwZAFIV6Es15Jqd2ZtzXUMIhXZqJYaZ5aK7zwp6h0zc05i+c6Eg8oCnWOR0eHQGEKnEWHdDoF+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-file_locked-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXDQyNAQCBMTCxPz+/KSipPz+xISCBERCBAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEEgQahVijMmD/oRAbBw1FCgaFFrppeo5didsZTSMDoRBSi/dgfUz6Sq7XGp1CByKQZUUWjsgrtcENYXNUodWhAahVRa65G9hmGgnnpzMZ/7xRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_blue-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLARqnAQ+ZHR2dKyqrNTOzHx2fCQiJMTi9NTu9HzC3AxmnAQ+XPTm7Dy67DymzITC3IzG5AxypHRydKymrMzOzOzu7BweHByy9AyGtFyy1IzG3NTu/ARupFRSVByazBR6rAyGvFyuzJTK3MTm9BR+tAxWhHS61MTi7Pz+/IymvCxulBRelAx2rHS63Pz6/PTy9PTu9Nza3ISitBRupFSixNTS1CxqnDQyNMzGzOTi5MTCxMTGxGxubGxqbLy2vLSutGRiZLy6vLSytKyurDQuNFxaXKSipDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYHCImDBgkKCwwNBQIBBw4Bhw8QERITFJYEFQUFnoIPFhcYoRkaFBscHR4Ggh8gIRciEiMQJBkltCa6JyUoKSkXKhIrLCQYuQAPLS4TEyUhKb0qLzDVAjEFMjMuNBMoNcw21QY3ODkFOjs82RM1PfDzFRU3fOggcM7Fj2pAgggRokOHDx9DhhAZUqQaISBGhjwMEvEIkiIHEgUAkgSJkiNLmFSMJChAEydPGBSBwvJQgAc0/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_blue_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOzi1Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fISCfMTCvAQ6XARqnJSKfIx6XPz6/MzKxJTa9Mzq9JzO5PTy7OzizJSOhIyCdOTi5Dy65FTC7HS2zMzm7OTSvNTCnIRyVNza3Dw+PASq5BSGrFyqzMyyjMzOzAR+zBRejBxqnBx+rHRmTPTy9IyqvDRylFxaXNze3DRujAQ2VLSyrDQ2NNTW1NTS1AQ6VJyenGxqbMTGxLy6vGRiZKyurKyqrKSmpDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBYwQnRESEREIoRMUE6IVChYGERcYGaoRGhsbHBQdHgu2HyAhGSK6qxsjJCUmJwARKCkpKsjKqislLNIRLS4vLykw2MkRMRAGhDIJMzTiLzDXETUQ0gAGCgU2HjM35N3AkYMdAB0EbCjcwcPCDBguevjIR0jHDwgWLACBECRIBB8GJekQMiRIjhxEIlBMFOBADR9FIhiJ5OnAEQB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_cyan-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHNTKzOzq7ExGTCwqLERCRBSKjBRSVGxubKymrNTS1Hx2fCQiJMzq7NTy7IzKxHR2dFTW1Ey2rITKzNzy9JTSzBySlHRydKSipDTW1ByelGzCvIzOzByOjFRSVCy2rCSalGS+tJzSzBxudCR6hCSCjITGxMTm5Pz+/JSutDyChBxydCyOlITKxPz6/PTy9Nza3ISqrGSyrOzm7MzKzDQyNMzGzNze3OTi5MTCxNTO1Ly6vLSutGRiZKyurHRudDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe2gACCAAECg4eIAAMEBQYGB4mDCAkKCwwNjYUOAYcPEBESlBMMjAUFnIIPFBUWEBcYGQoaG5gGggMcHRUeFh+fGCCVIakiICMduiQWJa4fCKkdJicoCcjJKSrPAAIrBSwtLtMv1jDaCDEyMgUzNC3SKCA12gYFMjY2KzMzN98uLdo4cujYoa9BAx4IeSywJSgAjgU8evTIgdDHj4WJHAL54cPiDyAMIzkMsSGIkCGREAU4gAOAn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_cyan_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFNze3Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fIyCdMzGxAxOTBSGhIx6XJSKfMzKzERGRAxOVKTq5Mzy7KTW1Ozi1OzizEzSxGTWzHzCvNTq5OTSvNTCnIRyVNTS1BzKvCSalGy6tAQ6XMyyjMzOzDw+PByqtCR6fCyGjHRmTMS+vJSytDyChCyWlGReVOTi5AxGRKyurDQ2NNza3NTW1AxKTJyenGxqbMTCxMTGxLy6vLS2tLSurKyqrCwuLFxaXKSmpDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfEgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBZcQnRESEREIDwoPExSipBUWFxgZGhIXFwkbHBQToQQGFx0eHxoguhEXHCEiIyQGABclJiYnycsSKCkjKisAESwtLi7Y2soXLzDUAaMxMuYuM9kXNDDiAAYFBTU15NGTYeMGNQA4ahAgkEMHiQoxZrTYwWMfIRw9fKio8MMHECAReByUhIPGDSBBhAyJYDFRACJFeBi5cCSSpwM4APgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLARqnAQ+ZHR2dKyqrNTOzHx2fCQiJMTi9NTu9HzC3AxmnAQ+XPTm7Dy67DymzITC3IzG5AxypHRydKymrMzOzOzu7BweHByy9AyGtFyy1IzG3NTu/ARupFRSVByazBR6rAyGvFyuzJTK3MTm9BR+tAxWhHS61MTi7Pz+/IymvCxulBRelAx2rHS63Pz6/PTy9PTu9Nza3ISitBRupFSixNTS1CxqnDQyNMzGzOTi5MTCxMTGxGxubGxqbLy2vLSutGRiZLy6vLSytKyurDQuNFxaXKSipDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYHCImDBgkKCwwNBQIBBw4Bhw8QERITFJYEFQUFnoIPFhcYoRkaFBscHR4Ggh8gIRciEiMQJBkltCa6JyUoKSkXKhIrLCQYuQAPLS4TEyUhKb0qLzDVAjEFMjMuNBMoNcw21QY3ODkFOjs82RM1PfDzFRU3fOggcM7Fj2pAgggRokOHDx9DhhAZUqQaISBGhjwMEvEIkiIHEgUAkgSJkiNLmFSMJChAEydPGBSBwvJQgAc0/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_green-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHNTK1Ozq7ExGTCwqLERCRByGRBROLGxubKymrNTS1Hx2fCQiJMzm1NTy3ITGnKSipFzShFSydIzKnMzq1Nzy5JzSrByKTBweHDzOdCSaTGy+jJTOrFRSVDSuZCySVMzq3IzKpBxuRCR+TCSCVGy6hPz+/JSunDyCXCSOTCyWVCyeVPz6/PTy9IyqlCSCTGSuhPTu9Ozm7Nza3Dx+VBxyRDQyNMzGzNze3OTi5MTGxMTCxLy6vLSutGRiZLSytDQuNKyqrHRudDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe+gACCAAECg4eIAAMEBQYGB4mDCAkKCwwNjYUOAYcPEBESlA4TjAUFnIIPFBUWFxgZGpWXjYIbHB0VHhKtER+UCyC1ISIdxbkSGSMYJAiCByIlJicaxbgoEhDNAAYpBSorJScnLC0uHRLaCC8wMAUNMeAnMgkz2gY0NDUFKTYNBDE3cKzQlkPHDh42djRo0KNhjwUGBgXIscAHgQY6fPz4AQRioolBhGwUIiRIxEiEhoCYQKSIEZSHAhzIAcBPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder_green_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFNze3Ozq7ERCRCwqLPz+/PTy9PT29FRSVHRydIR+fISCfOzu7OTm5OTi5MzGxAxOLByCRJSKfIRyVERGRKTmvNTu3KTWvOzi1OzizIx6XIyCdFTOfGzSjITClAxGJOTSvNTCnNTW1Dw+PAxKJCTCVCyWVGy2jAQ6XMyyjMzKzByuZCR+TCyGVNTm3HRmTLy6vJSypESCXGReVLSurDQ2NNTS1MzOzKSipGRiZMTGxMTCxJyanDQyNLSytKyqrCwuLDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCowLAQYMAYiTDQ4FCgoPEBESnBMUExMIoBUWFaEKBRIXExgZGqoTChscFR0epQYTHyAhGrkUIhMcIyQWJSYAJygpKSrIyissFi0GABMuLzAv19kaMRMyM+ABojQ15ObYEzYz0wAGBQUbBPHkYNQQcQMcABwEEhLIkUMHjRQvTuzIRwgHjx45evTwMWPGiR8GJQGxcWNGkBtCTlBMFGDIgh9CJhCJ1OkADgB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_grey-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLHx2fKyqrNTS1PTy9CQiJNza3OTi5GxubJSSlISChLSytFxWXDQuNKSipBweHISGhFxaXIR+hLSutFROVHR2dFRSVGReZKymrLy6vFxeXNTW1Pz+/KSepERGRPz6/PTu9Ozm7DQyNMzGzMTCxMTGxGxqbNTO1Ly2vHRydKyurHRudDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAawQIAQEBAMj0jAgFAwHBDJoUGASCgWDEMxETg2HA8FFaJgFgpdYSMiUYAnlErCsmgKL5iMJqJwPzYcCB0eahAZH4gSESAhYAoGQggiBh4eFB8iehEWI5AABiQFFpMeHCIiiCWeJicMDAUOEZMcHBkSngYMKCkpJA4OBCWTk0IqKw8PvwsLLCwtLBCeRCouLC8vK80wGzEHSQEqHxMhMBMyLtLfKh4WCjM0UUgBCCoAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_grey_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExOTBQWFNze3Ozq7ERGRCwqLPz+/PTy9Ozu7OTi5HRydIR+fISCfPT29Pz6/PTy7MTCxCwuLJSKfIx6XMzKzDQyNOzizJSOhIyCdOTm5Dw+PJSSlKSipLy+vOzi1OTSvNTCnIRyVNTW1GRiZFxaXAQ6XMyyjNTS1GRmZFxeXHRmTFRWVKSmpKyurMzOzGxqbMTGxLS2tJyenKyqrDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAauQIAQEBAMj0jAgFAwCA7JYwCRUCwWgoCBEUBOG47CAxJhSrqT5wERplQoC8ijYDEcJASJ4HKIYDAZFRoFGxwXHR4eH3lqICEiIyQcAAcMJSaIeHonKCMpkxMqAismKyuIixMsH5MBDw8eJS0mJpcdByYSkwAcEQUEBC4lo7UHL7sXwMAkKTAeogceu0QXMRIwFjISMxITNNNDARcmLx8zNTUH4F64NDUTNlHsk35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_home-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tKx6XGQqBNy6pIyKjDwGBOzOvJSWlDQyNIRaLNRiBGwmBNyidLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbKiQrLB4XEltDrhcaKi0utbcJra8bLzDAGrcxrTIXHi8zNCypEsO6EzU2IzQ3ONoTzK0BCAkDMQkIOTFlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_html-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBERGRBQWFMzKzOzq7CwqLDw6NARqnAQ+XHR2dKyqrOTm5ExKTERCRHRydMTi7NTu9HS+1KSmpBweHDy67DyixHS61ITG3AxypByu7DxinBw+ZERmdIySjITC3ARypExOTDRurIR2RPTSdJyulEyGvBw+bFSyzJTK3LzKvPzivOTixNTChLSybGyCfCRSnBQqRASGtFyuzDw+PCRShPzy5OzerOTShKyaTEx6pCxerGRufBR+rOTezPTShNy6bER+1BxCfBQuRAxelFSixBw2VISq3GySrPTWlHyanIyitFSO3IymtCRujAxWhCRqlCQ6XGyWvNS2bFyGvDxuvCRSpLy+vMS+vGxqbFyO1GSi3EyO1FRaVCQuPLS2tDxyzKyWNFxaNCQyPGxubCxajERSVExKNJyenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfZgACCAAECg4eIAAMEBQICBomDBwgJCgsEDA0BDg8BhwYQERKUDxOYDAyeghQVFhehGBmVlwwOqxobHB0eH6EfIAkPIYIiIyQlJhsnKBcpvrYiKissLS4vMDEyFjOvNAA1LDY3ODk6Oyc8PTIyFzQ1Jj42P0A6QTtCQ0REIEUORkdIkihZwsSekBhNnDyBciCKiSNSplDRUcWKkRhXCGDJYgiGli1cpuTocsILjytfFmRpACAGRTBhRogZgzHlAjKGWnIoY+bMgRgBDHRBo/LAIZoxuhwKatRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder_image-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPz+BAQCBExKTBQWFMzKzOTm5CwuLERCRARqnAQ+XHR2dKSmpHRydCQiJMTi7NTu9HS+1Dy67DyixITC3BR2pBweHByu7ASGtFSyzHS61AxypExOTBSazBRupJQOFBSCtDxKfKTa9AxelNz61MTaxDw+PPzGpLweHJTO3ESu3DRilFymXCxKRBRypBR+rDwCBNxmVORiRKQWFCyKvJTWhDSOPCRONFSixDQaHNROPNQ2JLRubHTC5DR6rHx6fFSqRCRyLGRmXGxqbIymtCRujAxWhMySjMQ2JMyqrKTW5ERijJSenFSGXGRmZLy+vMTGxMTCvERGRMxCNOzq7NTe5LSurISKhHR2fLy6vLS2tKyurGxubCwqLOSKfOzy9Nza3KSmrIyGjGxmZKyqrIRqZIyKjFxaXJyenDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAffgACCAAECg4eIAAMEBQICBomDBwgJCguMAoUMAYcNDg8QlAyXBaWcgg0REhCfExSVpIYAFRYXEhgZE60aCQwbghUcHRQXtri6DxMHgh4fICEiIyTFtxkOJQAeJicoKSojKywtLsUZJS8wMTIpMyA0NTYKIiIaNwc4OTo7PD0+P0BBhAwhUkTFAQNGjiBJomQJExsMmjh5AkVIFANQpEyhsqSKlStXmmDJomVLFC5Gunj5QiALmDAKxGSpMsYiAC5kqjhZUOaKmUdmzoAJgkaQgQYCmogJEmRQAC5pAPgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder_important-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBExGTKQqLPz+/KQqNAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM7CLoQwZAFIV6Es15Jqd2ZtzXUMIhXZqJYaZ5aK7zwp6h0zc05i+c6Eg8oCnWOR0eHQGEKnEWHdDoF+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_locked-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQSFMzKzOTm5CwuLERCRARqnAQ+XHR2dKSmpOzm5GxqbCQiJMTi7NTu9HS+1HRydOTm1Ozq7Dy67DyixHS61ITC3AxypERGRBweHByu7ASGtFyy1DSOtDRmfExOTBSazBR+rCwqLAxWhAxelByGtDSaxAwODHy+1Dw+PPT29IyqvCxujOzu7NTW1Nza3ExGJJyebKyqfMTCpFRSPOTi5DQqHOTezDw2NMTGxKyqhMTGrGxmXDQ2NMTCxMTGpHx6bHx2bBQWFIyOXDQuDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQICBomDBwgJCgsEDAKFDQGHDg8QEZQSlxMUDJ2CDhUWF6AYGZWXFBqCGxwdFh4XGK8fIAohtiIIIx25EZwBDREHgiQjJSYmGScoKSoRKQ8rggIsDC0uJS4oGygoAyjdAAcsLxQUMDEyMzQ1EzapBy8MDDc36tFwgONFjlQ6dgCEEZBHDx8+ctRIRehHAyAwZASZIGRIEBoUBwUwIGMCiwFEaBQJichIjo9FZLBsacRIAB0A/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_man-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFMzKzOzq5ERCRCwqLARqnAQ+XHR2dKSmpHRydCQiJMTi7NTu9HS+1KyqrMzOzOTi5Ozu5Dy67DyixHS61ITC3ARypOzq7ERGRFRWVJyanByu7ASGtFyy1Hy+1FRSVOzu7BSazBR+rFSyzJTK3Dw+PFxaXPTy7LSyrAxWhAxelLy6vMTGxNTS1Ly6tFyuzMS+vPz69NTW1MTCvIyOjPT29OTm5HRybFSixLy+tLS2tISGhGxubIymtCRujCRqlHx6fNza1GRiZMTCxGxqZLy+vFxeXLSytKyurGxqbISChFxeZDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAffgACCAAECg4eIAAMEBQYCB4mDBggJCguMBgEGDAGHDQ4PEJQKERITFBOdgg0VFhegGBmVlxobABwdHh8WIBchsLIKIiIjCyQZJR+7JhcnoBAoKSoqKywtLi8wMbsyrwYpGhowHTMqNCqkyR8XKBwTNTY3KjgFOTopLS0ZO98wPD0+JhR490MAkCAshHyTsCLCEAlEYEgoIsCIjRlHDNzy0UFBDBtIbBzZ4KJHBB0aAQhIoqCHESQ9dAjooWQJE1uCBBRpkoSDExEcUnRYwOTJIQECNmwQwEFQgANQAPgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOzi1Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fISCfMTCvAQ6XARqnJSKfIx6XPz6/MzKxJTa9Mzq9JzO5PTy7OzizJSOhIyCdOTi5Dy65FTC7HS2zMzm7OTSvNTCnIRyVNza3Dw+PASq5BSGrFyqzMyyjMzOzAR+zBRejBxqnBx+rHRmTPTy9IyqvDRylFxaXNze3DRujAQ2VLSyrDQ2NNTW1NTS1AQ6VJyenGxqbMTGxLy6vGRiZKyurKyqrKSmpDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBYwQnRESEREIoRMUE6IVChYGERcYGaoRGhsbHBQdHgu2HyAhGSK6qxsjJCUmJwARKCkpKsjKqislLNIRLS4vLykw2MkRMRAGhDIJMzTiLzDXETUQ0gAGCgU2HjM35N3AkYMdAB0EbCjcwcPCDBguevjIR0jHDwgWLACBECRIBB8GJekQMiRIjhxEIlBMFOBADR9FIhiJ5OnAEQB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_orange-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHNTO1Ozq7ExGTDQuNERCRJxmDFw6DGxubKymrMzOzOzu7Hx2fCwqLOzaxPTm1NSyfKSipBweHOSmRMSKRNy2jJxuFFw+DKyqrOSeJKxqFMyaXNSyhNSufFRSVMSCJKRyHLRuFMSORNy6nPTezHxaFIxmFJxqDJxyHPz+/LyqjJR2NPz6/NTS1KyehIxqNJRmDLyWXPTu9PTy9Ozm7Nza3MzKzMzK1OTi5MTCxMTGxDQ2NMzGzLy+vLy2vKyurGRiZLSytLy6vFxaXHRudDw6PDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe/gACCAAECg4eIAAMEBQYGB4mDCAkKCwwNDgYBBg8BhxAREhOUDxSMBQWeghUWFxOhGBkaCxuMBqscHRceHyCwCbMhqyIZIx0kJR4gJicSIAiCECMoKSorKyS6yhHQAAYsBS0uKSkZHSsdHc+CCC8vqDAxMtQzJDTdBjU2NwUsODg5Wsxz0e2ADhw7/sEgwKOHwwW3BAXwsYAHARg/eAAJIgRiogAHhhApEoSIkCERI4E0QmHDESSREAWAkASAn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_orange_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOTm5ERCRCwqLPz+/PTy9PTy7OTi5FRSVHRydISCfIR+fPT29Ozu7MTCxFw+BJxqBFQ+BJSOhIRyVMTGxPzSlPzmxOTGnOzizIx6XIyCdOyeLPSuTNSubOTSvNTCnNza3Dw+POSGBLRyDMyeXAQ6XMyyjMzKzMyWBKx6FJx2FHRmTLy+xDw6PLyqjJR2LJRyDFxaXOzq7JRuLEw2BKyurDQyNNze3NTW1NTS1MzOzJyenDQ2NGxqbLy6vJyanGRiZLS2tKyqrCwuLKSmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfEgACCAAECg4eIAAMEBAUCBomHAQcICQoECwEFDAGIkw0OBA8PEIwRnRITFBIHDRAVFhWipBcFEhgZGhMSEg8bGxUcHQQKth4fIBoburwbISIWIyQAEiUmJicnyrooKRYqBdQrEywt1yfJGxQuLzCEozEyM+XnEjQv4QAFEDUKCjE2JrRoYeMGjmkAchAYoWPEDh49YrBQ5SMfoR9AXvRQcSFCkBcUhFgcFCDHEBxBiOAoQgFhpABGaPg4IiFHJE8GbPoJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder_red-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExKTBwWHMzKzOzm7ERCRExGTCwqLIw6FFQiDHx2fKyqrOzu7CQiJOzOxPTe1MySfKymrOzq7Nx2TLxmTNSelJQ+FMzOzNxiNKw+HMR6ZMyWhNSajHRydFRSVLxSLJRKJKRKJKQ+HNSWhNSmnHQ6FIRGHJRCHPz6/LSajIRONPTu9Nza3KyShLR6ZPz+/DQyNOTi5NTS1MTCxGxubGxqbMzGzLy6vLSytGRiZHRudDw6PAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIAQEBAMj0jAgFAwHBDJoSGhWDAIDUHgsAgcHQ9IhLqQMAsTr9BBqUTClktVgmkYhIOMprLhdOBUHh9rICEiIyN8JCVwdwAOIiYnJyiHiRtvjgYpBSorJgknIpYRmikpLAUtLp+hIy+aLKkFMC0tGJ4mK44xBDKqLTMEBDTFNY5EMTY0MzM3NDg4OR7IQwExOjnROTk6B1FC1x8SEjs84EcBCDEAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_red_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOTi5OTm5CwqLPz+/PTy9Ozu7Nze3Ozq7HRydISCfPT29PTy7MTGxFQiDIw6FJSKfIx6XPz6/MzKzERGRNyypPTWzOzi1OzizIyCdDw+PNRuTNyCZMSSfOzW1OTSvNTCnIRyVNTS1ERCRMxGFJxGJIRKJLyCbAQ6XMyyjLRWFHRmTLy+xLSelIxWPEQeBGReVIxOJIRSPKyurDQyNNTW1JxOLEwiDKSipGRiZMTCxLy6vJyenLS2tCwuLFxaXKSmpDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe+gACCAAECg4eIAAMEBQICBomHAQcICQoLAoUMAYiTDQ0LDg4PCgQQnBESEREHoBMUEwUVDgsWFxEYGRiqEQ8aG68cBQQdER4fIBghu6saIiMkJSYAEScoKSrJyxIrLNEd1C0p1ygo2coRLi/gAaIwMSnx5SoyM+uCHQ8LChrv8TQ1ZNiYBuCGgoMKcJSwACNHCh07wAkK0IFHj4UQevjwEeGHREk3ZtjwAcSGjQgfEwUIIuTHEJSROhkgAsBPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder_sound-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFMzOzOTm5ERCRCwqLARqnAQ+XHR2dKyqrMzKzHRydCQiJMTi7NTu9HS61KSmpDy67DyexExSVITC3AxypBweHByu7FRiZDRiZHy+1ARypExaXBy2xGRqZFSyzJTK3AQ+RByqtASCtASGtFyuzDw+PATC1ByGlFxeXISGhJSWlFRWVAxmlBR2pBR+rAQ2PAS2xHS2vMTCxJyenLS2tCRujAxWhAxelFSixAQaHARibARudAR2hEySnPTy9Nza3GRiZNTS1IymtCRqlARWXDyCjPz6/MTGxLy+vMS+vGxqbAQiJARaZEx+hLy6vKyurERGRBQuNCw6PISanFxaXDw6PCQ2NDRGRDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfYgACCAAECg4eIAAMEBQYCB4mDBggJCgsMBQIBBg0Bhw4PEBGUDRKMBQWegg4TFBUVEBYXlZeNghgZGhsCFRyhFh0JDRWCAx4fGg0gCiERIqEcBoIjHyQeDcMlJhQnEQ8oANQpKissLS4vMDEmJhEoMjPxNDU2Ny44OTo6FzsGPD0+fgABEUTIECIMiuAzIk3GkR5IbgRJMoSAkiVKmDSRBsDJEyg1hBQYUqNGlBtSGkwZRGUDEyILWCxYcmPBgiYrB1WxEsBTgANXbCwYggVRFi2Ifm4B4CcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_tar-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFMzKzOTm5ERCRCwqLARqnAQ+XHR2dKSmpHRydCQiJMTi7NTu9Hy+1ARypDy67DyixHS61ITC3Ozq7BweHJySbJyWbAxypExOTPz21KyqjPz67OzmxFSyzJTK3LSujASGtDw+PKSehPz69Pz23OzitPTqvOzerKSaZBR2pBR+rKSefMy+dKyeTIR2NAxWhAxelFSixJyadOzirLyubLyqVJySPHRmJIymtCRujCRqlPTqzOzW5OzSzNzSrLyqXLSeTJSGNMTGxMS+vLy6vGxqbJSKZOzOxNzGtNzOhKSSRIR+LGReHLy+vKyurOTWlHxyJFxSFLS2tKyqrERGRHRuRNzKfNTGdGxeJGxiNFxaXJyenDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfcgACCAAECg4eIAAMEBQYCB4mDBggJCguMAgEGDAGHDQ4PEBEJDJcFp52CDRITFKAVo6UEFgaCFxgZGRgUFa8apBsAuhwdHh+5IBQhrwYZIh3PHdAdGSMTyQ4kJR4mJycdKCkqKywtIyMUJC4cKR7EKC8wMTIzMxE0BjUmJjY2NzgwcuggsIOHjB7NfPwAEkTIkBxEdBQxUuQIEgNJgihZwgRGEyJOnhyBciTKxSRSpDBh0iRGjClUjlSJYgXJFQBYbmTREmOLDi4BDnTxsgDJl0E5uXBBFBQMAD+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder_txt-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAMR6RPwCBAQCBExKTPzGjBQWFMzOzOTm5ERCRCwqLPyGBPzKjARqnAQ+XHR2dKSmpMzKzHRydPyGDNTu9Hy+1OR2BNSOXHS+1MTi7ITC3AxypOzq7KRKBPyCDOySZPzizPTWxFSyzHS61ITG3FROTCQSBMxmJNRyROy2lOy2nASGtDyixJTK3FxGNIRWLMR+XPzStPTKrBRupBR+tFyuzDw+PDQuJIRSNAxWhAxmnBR2pBR+rPT29FxaVEw6LKRuVIx6ZISitCRujAxelAxmlFSixOzu7JyWjBwaFKSShNTW1MTGxDQ2NMTCxNze3Nza3HRqXMS+vGxubGRiZLSytCwuLERGRJyenGxqbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAfLgAABgwIDg4eIAQSCBQYHCAMJiYMKCwAMDQ4PEAcDAggRApQSlhMUmJqOBweiFQoKBBYXGBMZGpkPBhsIHBUdHh8gISIjtCOoJCUcJicoHykqK8MstBQIASUtLi8wMTIzKtE0Ihg1gwg2Ny8xKDg5OjvhItcBCDw9Pj9AQUI4Q0QMipirZ2TDERJIkihZwg+HEHpMmjg58OQIFANLomSUQi+AACZTohiAkDEKFSocJwmoMoWKSSoPpFiZdEhAgh5XHmBhQjORTZ5+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_video-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExOTBQWFMzKzOTm5ERCRCwqLARqnAQ+XHR2dKSmpHRydCQiJMTi7NTu9Hy+1Hx6dJyenLy6vIyOjDy67DyixHS61ITC3ARypOzq7ERGRFxaPKyqrBweHByu7ASGtFSyzITG3KSOPKyurBSazBR+rJTK3HS+1Hx6ZNzObAxWhAxelAxmlBRupBR+tFyuzDw+POzibNzOZIyqvCRujLyiPJyCPJSWlNTS1ISitFSixHxiFGxeJFxWLExKNCRqlDw2BFROHHxqPMSqVISChMzOzGxqZISCbLSaRKSWTFxWPNzGZNTCZLy+vLSytGxubJSSfGRiTMyyVLymTLyiRMSqTEQ+JGxqbNS+XNzKZOTWbLy2ZFxaXDw6PIyGbOzidOzifMy6XCwmFGxmXDw6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfigACCAAECg4eIAAMEBQYCB4mDBggJCguMAgEGDAGHDQ4PEJQREowFBZ0TFA0VFhegGBkJEZcaGxwdHh8gFiEXGKAiowIjHCQlCCYgvL4noCgGKSoGCyssLS4vyxYwrzEyM9MSNDUrK9jKIBcGNiMjNwY4Gjk65dcIOwY8PT0+PwYUAuTIQaDeCiAGgggZMoQDEQNFchghMIHiEQNIkihZwoRJkx8RCDhxMuEJFAMGokiZQoRKFStXjpQk0QHLBgDRrEzJomULlwFHukhYgMWLIANfwIAJw+WKmDFkAjQoA8BPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folder_violet-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLHQWhEQOVHR2dKyqrNTS1PTy9Hx2fCQiJOTK7OzW9LyKzGxubLRW1JxOtLyCzMSS1HwijKSipLQ61HwinKxuvHQajFRSVJQytIQqlKRqvMSe1GQebHQihLSCxNzG5Pz+/KyStHQ6hPz6/PTu9Nza3KSGrJxmrOzm7MzOzDw6PDQyNOTi5MzGzMTCxGxqbLy6vLSytHRudGRiZLy2vDQuNFxaXDQ6NCH5BAEAAAAALAAAAAAQABAAAAaoQIAQEBAMj0jAgFAwHBDJoSGhWDAaDkPxEThCIpIJlcJgFgpdIaRiuYAxGcVD02gKBxuOpXPBvD1VH2ogISEceiIXI2ATBmohJAklGYaIJieOAAIoBSkqJCUlHJUmmQYrDiwFLS6foRwvpqkwMCstDTGtJCoyQjMELTQttw01Nsc3B0MBMxQ2DSfGNjg5OplHzDs5ODw5DMlRQgE9PhoMOjPh2BA/AH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_violet_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOTi5OTm5CwqLPz+/PTy7Ozu7HRydISCfPT29Ozq7Nze3MTGxEQOTGwahDwKRJSKfIx6XOzi1Pz6/MTKxNSi5OTS7Mym1OzizJSOhIyCdDw+PKxSzLRq1LSCxOTSvNTCnIRyVNTW1JwixHwqlKRutOTS5AQ6XMyyjNTS1JwerHQmfIQylHRmTLzCvKyWtHRChHwuhFxaXERCRHQ+fLSytDQ2NKSmpGxqbLy6vDwOTJyenDQyNKyqrCwuLDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQICBomHAQcICYwChQoBiJMLCwUMBw0NDg+bEBESEAcLDRMUExUMFggXAhAYGRoREBAIGxscFB0EBB4QHyAhGrq8EBsiIyQlHgAQJicnKMspuyorJCzVEi0uLy7Z2xopEDAx1QEMDDIzLjTZ2hI174I2CQ0EHMi4ge7EDQk4qgHI4aChAxYsLsg4J0GHQkI5dsSIeCFGDB49fFwcFOBHDRw8cOAAAmEkpyA1fOjoISQSJwPV/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_wordprocessing-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExOTBQSFMzKzOTm5ERCRDQuLARqnAQ+XHRydKSmpExKTCQiHMTi7NTu9HS+1HR2dCQiJDy67DyixHS61ITC3AxypKyqrBweHGxqbGRmZFxaXFRSVERGRPz+/ITG3JyalOze1PTm3Ozi1PTm1Hx2bJTK3IyOjPTy9CQqJFyuzDw+PNTGnDQyNPTq3Ozq7MS2hASGtKyaXCwqHBwaHFxWTKyahLSijKyehHRmXHRqNFSixHxyNAwKDERCPAQGBCwqLIymtCRujAxWhCRqlMS+vMTGxIyCVJSSfLy6vLS2tLSytGxubCwqJExGJEQ+JBQWFJyanDw6NDQ2NBQaFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfUgACCAAECg4eIAAMEBQIGB4mDBggJCguMDAEGCgGHDQ4PEJQRlwWmnYISExQVoBYXCREYjAaCGREaGxwdHh8PIJQKhgAhIiMkJSQkJhUnrrUGKCkf1B8pGyoUK60sLSouIS8vMCUhBw0xMjIVBjM0NTY3ODk5Og0NOwgXPCw9AD4BBvwwMABIgCBChhApUqtBhgw1INaIWMPIESMaGiIRsbFjkhpKlmDQYKgGx5MdDyxhgqFJLSdPoMiU+YRGFA5SRk4RRCWDix9TnFRxISiAE6J+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_yellow-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ExGTCwqLERCRJSSDFxWDGxubKyqrNTS1Hx2fCQiJOzqzPTy1NTKfHRydOTWTMSyTNTKjNzOjJyWFHR2dKymrOTaLKyaFLyyRMS6ZFRSVLy2JKSeHNTOnNTKhHR2FISGHIyKHKyeFOzmxPz+/LS2lIyCNJSWJMzKfPz6/PTy9Nze3KyqhLS2XPTu9Ozm7Nza3MzK1LSyjIyONDQyNOTi5NTO1MTGxMTCxMzGzLy6vLSutGRiZLy2vKyurKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe0gACCAAECg4eIAAMEBQYGB4mDCAkKCwwNjYUOAYcPEBESlBMMjAUFnIIPFBUWnxcYChkajAaCAxscHR4SrREWlBkfqSAYIRy5uyKfIwipISQlJhgnx7oSKM0ABikFKivQCSwn1C3ZCC4vLwUwMd/RGDLZBjPqNCk1NTY33zjZOQQ1dOBrsIMHjx49FtQSFCDHgh47GvhA+AOIwkQNgwARUnHIxUiEcnwgwmBBDpCHAjw46ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folder_yellow_open-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFNze3Ozq7ERCRCwqLPz+/PTy9PT29FRSVHRydIR+fISCfOzu7OTm5MTCxFRWBIyOFFRSBJSKfIRyVOzqnPTuzNzapOzi1OzizIx6XIyCdNzORNzSZMTCfOzqzOTSvNTCnNTW1NTGFKSaHLy6ZAQ6XMyyjMzKzDw+PLS+DHyGHIySJHRmTLy+xLS2lIyKPISGJGReVOTi5ISGNExKBKyqrDQyNNza3NTS1JyeJKSipGxqbMzOzLS2tJyanKyurLy6vKyutCwuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYCB4mHAQgJCowLAQYMAYiTDQ4FCgoPEBARnBITFBIIoBUWFaEKBREGFBcYGaoUChobFRwdBRAGEh4fIBkhuqsbIiMWJAYAFCUmJifJG7ooKRYqK9QsLS4T19kZGxIvMNMBojEyMy4u5xQ0EeEABgUFBDUxbJBzYeMGjmkAchBYqGPHjggxeMy40UMfoRw+IvxQoSICEBgUgiCUlIOGkCFAiOCgYDFRgCILgqxsGYnQgRwA/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-ftp-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3LSyrJyanPz+/Ozq7GxqbDxinBw+ZERmdIySjHRydMzOzPT29CwuNDRurIR2RPTSdJyulEyGvBw+bLzCxIyKhGxubERCRLzKvPzivPTmxNTChLSybGyCfCRSnBQqPLy6vLy2rCRShOTixPzy5OzerOTShLyaVEx6nCxerGRyhOTi3OzaxPTShNy6bEx6rER6zDRitBxCfPTq3LyulBw2VISq3GySrPTWlHyanIyitFSO3PTm1Ozi1LyqjDQyNCQ6XHSq3GyWvDxuvCRSpLSqpOzezAQCBCxGZCRKZExGLDQuHAwaLBQWHKymnOzexARCBJzOnGy2bDyePCxKJOzWvLymhAx6DAyGDDROLOTOpHRmVLyidLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfRgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZMICQoLlwwNDgQPghAREhMUCBUWBRcMGBmnEBobHB0eHyAhIg4CIxenJCUmJygpKisVLAIGLSMPJBQuJi8wMTIzNCEWJjU2Dzc4OTo7PD0yK94DPj9AQUIUQ0QwFDFFRjchRz5IbARJEkLJkiVMmDRx8uQBlCgbgDyQMmUKlYpTqlSsYsXFFSwTK2bRMmWkyCxbuICkmKVlySwvpXTh4mWilJs4c3bB8uXLqUEBHggdSvSBn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-link-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBFxaXPz+/AQCBKSipAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMgCLrc/jDKSau9OL/AuwxCKAzfOIwlcZIRKLJQMMyz5CcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-network-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBISChPz+/Nza3ARaZESanCyKlARudARGTLy+vNzq7ARmbMTCxARufAROVMzOzKSipARyfOzq7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVmICAGZFmKQiACweCSBImq41AYB5IodLq2hwWO0ejRWDac48Gb/QKNqNRoqspmrVcAUuIJBANS8sBIFCORUgooPEh4J8B67NgdsVBp9C5XWfl9LRMTCyReX19hARNojWlWLH+AAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-pipe-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBISChMTCxPz+/ARCBFxaXASChCH5BAEAAAAALAAAAAAQABAAAAM2CLoazpAFIV6UYZB6Yd5BtwRbEYqkYIqAQRir6KpnN8cdCddXivcbAy+S2qEOAuPx8MtZRP4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-shredder-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBERCBAQCBMTCBPz+xFxaXPz+/AQChISCBISC/DQyNPz+BARCRAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARcEMgZhBUzgzuIH4G2FYThnZUlCab5Ed0hC6nZ3Yh8JIKyLjCYboeZKIK6BDHTGwyViopEoWAkdwfqoKhIKLFUwXY79coUtLG4CFAcOOstWyNWyEXMO57p2/vxfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-socket-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+xMTCBFxaXKSipDQyNPz+/MTCxISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARKEMgZpr1SjFqx1QHoTaA4AuV2EmmHEUUxsKoHB7FMGPbhI7gCgnchII6+AyJBtBhjx0KC2TsIp9QXcpm1HafNEQF8mhAOCdfEHwEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-trashcan_empty-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBKSipERCBARCRPz+/MTCxISChFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARREEgZapiYWjGIvVNQjEZ5BKUAApVgjEWJzCtAnIGgC8eZ5bre7ICosQQFVY9Y/CGVwiYmlwwsac7qVRp6WqNGKpQZ9m7DojH2t+lVMtMP3B8BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-trashcan_full-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/Pz+xATCxMTCxMTCBKSipPyqXISCBFxaXISChAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARbEIAQJJU4BzEoIdSFbcNQnIVhBJ02GAeFIGxZjUl8KoHRagfeYqgo3kaxQOEwXPAyk4Mgtgg6jxYp1foETgPEKzSgBXOx0W9VIfZu2d3R5t3WhA5BEdQSQgP8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-www-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3LSyrJyanPz+/Ozq7GxqbDxinBw+ZERmdIySjHRydMzOzPT29CwuNDRurIR2RPTSdJyulEyGvBw+bLzCxIyKhGxubERCPLzKvPzivOTixNTChLSybGyCfCRSnBQqPLy6vOTi3Ly2rCRShPzy5OzerLyaVEx6nCxerGRyhOTezPTShNy6bEx6rER6zDRitBxCfPTu5PTq3LyqjBw2VISq3GySrPTWlHyanIyitFSO3LSqpPTm1DQyNCQ6XHSq3GyWvDxuvCRSpKyurOzizAQCBCxGZCRKZExGLDQuHAwaLBQWHKymnPTmxOzaxHx+fMTCvOzWvLymhHRmVExGPOTOpExOTERCRLyedBwaHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfWgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZMICQoLlwwNDgQPghAREhMUCBUWBRcMGBmnEBobHB0eHyAhIg4jJBenJRwmJxIoKSoVKwIGwg8lFCwmLS4vMDEyIRYzNDUPNjc4OTo7PDAq3T0+Pj0/QBRBQi4UL0NENiFFPkbijoRAkiSJEiVLmDR54OQJFHEPREQRIWWihYlRMkCZQuXBgyIBihSpIjLAowBWroj7gaUIlpYvXWLJUuWKlgdbHvz44XHnzgdVami5qUinR50/efoJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-zip-16:filesystems filesystems16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBIQChPzC/AQCBMQCxAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMeCBCh/i+IAesShNo4+v5gKI5kaZ7oxzCilLVvq/kJACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-cal1day-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANOCLrMEUDIOUS9AFLLhx8LIRZjKYZmMRCkaChFLHty/AIiS3y6q+QtT49wq8VotRtQJGwRf6Zmrlj7DJLQXsupTJmeEIN4TB5nII20wp8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-cal5days-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANMCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiIdMmcec7jy53q81qP9OO5VMAj8RXTFWzOZW95HDLdEEM4LA4nIE0zgp/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cal7days-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANPCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiwcp0fucsj873qvGMv5Jw2FIACUsW4WakGW1O046I05qmGYBhTC6TM5CGWuFPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calappointment-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxPz+BISCBISChKSipAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARbEMhJaQhA6D1E/wDGeeRgDhOhFoTBEi+REgdrIHScSEVvAD9Xr7cDqGSGpFEnQSqTv2NxCFQOiU1VEAiTZmstHFg1vQKuw+LxxfYaV/AuOQRI2O/4ewhT6Uv8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calbell-16:korganizer korganizer16 16:photo:16 16:R0lGODlhDwAOAIIAAPwCBISCBPz+BIQCBMTCxISChPz+/AQCBCH5BAEAAAAALAAAAAAPAA4AAAM+CLrR+zCIAWsgLVRGRBhOVQiG94WPVAbHaZHYAWqRYLbge88RsbInGuBCEhRYrZYm4xk4nYdoKzKIbiKHawIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-callist-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/KSipPzerMRaBEQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARDEMhJaQhA6D1E/wDGeeRgDhOhruyatjBRSIRxxOsMEAdC0BUZDcfSEYvDo3Bn++2Cxt7RqFxWhZiCdsvdhjCVsMQfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calmonth-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANSCLrMEUDIOUS9AFLLhx8LIRZjKYbiRxLFIBpK0Q6z7MkwkJIe8b0KEeuWchFysuStVsjtfMbeMQitWpG25YfmNK1WU53XNIUYzug0OgNpuBX+BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-caltoday-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxKSipPyCBMRaBPyqXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARTEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyIQhFfiBIAfuFzaAioBIJBCummRYPCaDPh3vhwsOZdihNfa8Ub/AJXemFZPPNBvGwG672yFMZS7xRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-caltodo-16:korganizer korganizer16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBAT+BAQC/AQCjPz+/MTCxPzCxKSipPwCBMQCBIQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARaEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyMYhFXiuFwZiA6qZYbbqJX5BIw2RAPxwAAWCyWMCCsiXFGEEErKz6LQZfOqiTR1YJiGq1rFyyHmo2+/1EKbCl/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-adjustcol-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBGRiZAQCBPz+/CH5BAEAAAAALAAAAAAQABAAAAI7hI8JAWL+IgvwUSSY2Lz7VTXXkS2NdJ6TwiSaB3PNQNdCbc/4cO9OjwPmhDQiTxfcHY1MpE35g0IB/gIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-adjustrow-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBGRiZAQCBPz+/CH5BAEAAAAALAAAAAAQABAAAAI5hI8JEcItooxG1oEzBoJ7oWlHd4VbNZpbx3LqUFGuajTPhI8kSLfsO0rRUCXT5wPkyHhGhsOJs/gLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-black_sum-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIdhI+py60BY2QwhVYdytpw/WFXF1LjcW6S1LVu6xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_all-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIjhI+pq+FuHjwyRInqfRkDTXkgQ5YLOH6it00pyqqcPJk26RcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_bottom-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAInRIynGe0PFTQz2kdxzHf72iSiRDpc2F1niaafBroYQNe2fdx6HfgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_fall-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIrRIyneRYP4wPUKWmr3E5b+DVh9GkYuFALiqnsJp6nObYZB5ow2a3Jvwv6CwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-border_horizontal-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAImRIynGe0PFTQz2kdxzHf7CoTiSB7kKUpa1Vlc86rtSjvxnOSL4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_inside-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIrRIygxxYPF4zzyenqxfVk2m0g9lnKiabqqoYl43YwGcqiFWv22zRnD/AXAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-border_left-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAInBHKJmxYPY3TyVCozsjMbrk3gM27KyZDlioVQS3qwO7Nl6KC6q/kFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_outline-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIrhI8ZybgQYoTy2YqtwVTunVVfN3HQsaTnc5Kp2Ibw5Zm0PHJ2w7O8I5P5CwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-border_remove-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIjRIynGe0PFTQz2kdxzHf72iSiRDpc2F1niaafBrraSMuQXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_right-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAInRIynaOEPH5hRRVrzbJBLn32g1TXJuWBdpYYiy47hBl+yRqH6HfoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_top-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAImhI8ZyRgPo3xgVnmnprbvnUEhx1XmgpLRmH7e+rowFssleuaBXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_up-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAItRIynwOEPH0vRuGkjnFKjpmgX2FVkuBwNhapZKZ3VyMKcGJPv5eJmAkz5RP4CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_vertical-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAAQCBPwCBCH5BAEAAAEALAAAAAAQABAAAAIrRIygxxYPF4zzyenqxfVk2m0g9llmsiCmVjJh65Jh59GtGMuzqqQNDQz4CwAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cell_edit-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIshI+pm+EPnwmi2msDoLgLzQWDV4HlSJof6qki+W0nrMKlbN9bxGvMDwwG/QUAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-cell_layout-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+/PzerMTCxPyqXHx+fAAAACH5BAEAAAAALAAAAAAQABAAAANCCLrc/i3ISacKIuutA8ACxWUeJg0DqBHhd6ZiRpQBag9F2n13FRis0q1QUAmCvFuKRTAYWhIi0bhz+SqQrHbL9ScAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-chart-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAQCxAQC/AT+/MTC/Pz+BAAAACH5BAEAAAAALAAAAAAQABAAAANMCLocHiyuIASU6lE7Xx7DdgEBQVwBKE4mqlZjeT4vl7VFkYZUjOuGkMFiuJ1yKUNAWTQGkEKDknUESpdXkkYjnWIWzOVX0SyPJwx/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-comment-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+BPz+/Hx+BAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM5CLrc/i3ISacKYuStuwhAMBATKRHkAGJeu60qagqmuHK4B6Pn3N0u147Ha8FyOVCowlRCntAo1J8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-deletecell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+/PwCBMQCBISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANICLrc/i3ISacKIuutA8BcKAwfNwwmQYDZoJ6tWrBZoRKuXIb2XRS7UG4wC25yOIGHFvu9PJ8KcRbQOVzAheoxbRCyDOKj4E8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-delete_table-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+/PwCBMQCBISChAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANPCLHcDDCIOSUVAaqLeY5O+G2XRQVDdA0DNxCEwrwEu9AFORVw3ee6Cu8HFKFgA2AQQ6uNTJNXYZgCNZKFBay4IhQuMBUFW/LKZlkHoOBPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-dissociatecell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAASC/AQCBPz+/PwCBCH5BAEAAAAALAAAAAAQABAAAAI0hI+pm+EPoQlC0GqxnfV2HUzR6HDWgA5Bqppr+qIhcMUqO5Oki+M87KN1ejCRTsJIKhP+AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-first_letter_upper-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIohI+py72RIJOHRmBt3QaGz2GVBGJfKW4aiXhX2sHxbKKneDv6zht+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fontsizedown-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAInhI+pELHqmIkQNZrwfXYvzE1fBUrWoZniOjWdp0agjLL2i7rhDvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-fontsizeup-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pEeoNIFyIzXStw3q/T4VVhJHHlDGjgZ6n1bLyCrqPyuJe4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-funct-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+py60R3IkRVHQzo9BwD1qhqGneRU4gSqlVJ8Zy0mKPhOe6XwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-insertcell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBPz+/Pz+BATCBAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAM7CLoa/k7IKQCEdNobc+UOMCijCD5jGjAMOowrIc/Wm77ATIe2leuETcrEYpSOJ88HpNxwmqdi40Tl+BMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-inserttable-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIuRI6JwCH/HBSBmUlxbarvO0nQJ0aa5XWodjZsiKbJGrbgaMuzW8M87jPoDgx/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-lower-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIqhI+pELHqmIkQNZrwfXYvzE0QKGniQWmNhbYSeqXn6zJOBJLTuuuh4i8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mergecell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ATCBCH5BAEAAAAALAAAAAAQABAAAAIyhI+pm+EPoQlC0GqxnfV2HUzR6HDWgKZpCFyBCrMurMoPvZovPsgd39MBbaQI44hU+AsAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-money-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+BPwCBASCBATCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM+CLrcHMHJIEaUD16sqIUcQAne5pQaBglkZS6lxb6dRoIAQTzuphcFXWeW0xl/utIPGDQOSUdnA7IUhoocfwIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-oscilloscope-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBOTm5Hx+fLy+vAQCfAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANKCLrcGjDK+IS9494AgrbEJ3CeUBRWpp2daaHhhZKuq75jh8pxTRaEQbAgFAIHv1VvR/vsdrnSCmdpagYnjfXS27Q+N29nQuYA/AkAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-percent-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIkhI+py70RUHxxQmosu6BOdWkNR35PVm1etqEsaKXnwTn2DfgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-precminus-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAIthH8RiJvrmHogVoXNtFRDpjUf6JWkeUoXlpGBAMfC+cowbd+uwL54/rMFZf4CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-precplus-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAQABAAAAI2hG8Rp4y9IGgszqhyspLueYHih43hiX7Iui5XprGTQNeCPNNBje86L9vBdr2a7xY0AllHm78AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-removecell-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAAQCBASC/Pz+/PwCBCH5BAEAAAEALAAAAAAQABAAAAI5hG+hq+IvAGPwydlqxAohvnjHMChkR6YDcKaougZqCMdyGYqSG+jXKQtoNkGTUHPBDJMTH+jJ8RcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-removecomment-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/AQCBPz+BPz+/Hx+BPwCBMQCBISChCH5BAEAAAAALAAAAAAQABAAAANVCLrc/i3ISacKYuStuwhAMBATKRHkUIScUBSeahhigBbzK+HGgXmHmYHXC41MqKDwcGDFMryCz4gi3YQwkKiFY+ZAoYrUF5g1HV3G7DFuFBvSx8GfAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-resizecol-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBFxaXAQCBDQyNPz+/AAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMyCLrcG0A4CZ90saohuv+XEgxYxkDhQp2lyIBwKhB0bct2TuB6zfe7F5D26xV1x9zFnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-resizerow-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBFxaXAQCBPz+/CH5BAEAAAAALAAAAAAQABAAAAIyhI+pmxHinph0GnqH3hoIDwocd3zZ2F0lmoInWq5s/I60xw5hmF8WPnNAhJUK44hM+AsAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-series-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBGRiZAAAACH5BAEAAAAALAAAAAAQABAAAAIjhI+py+0fUGRhGrswVtr1FgiGsGlhZVWAuarr9byyB8f24hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-sort_decrease-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BPwCBAQCBAQC/FxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM5CBDM+uKp8KiMsmaAs82dtnGeCHnNp4TjNQ4jq8CbDNOroIe3ROyEx2A4vOgkOBzgFxQ6Xa0owJ8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-sort_incr-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BAQC/AQCBPwCBFxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM4CAqxLm61CGBs81FMrQxgpnhKJlaXFJHUGg0w7DrDUmvtPQo8qyuEHoHW6hEVv+DQFvuhWtCFPwEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-special_paste-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+xPz+BNTS1MzGLMRaBMzOzPz+rPyqXPz+/MzGNDQyNKSipAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARoEMgJQhBySGx7IEQwFKMWGKgRHNZRIAJSVAm6usIwCEo+BDWVJ/CKzYAplWJZItGSgSVPZBEgU9EFQyGyWoK25XJ4DTO2iob6CxVLe2ys4rw9e8HKd8ybVJ7ndgEVQz09e1YUEmQefhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-strike_out-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBGRiZAAAACH5BAEAAAAALAAAAAAQABAAAAIghI+py+0BgwOS1gXnuS/b6ClCpCUcclJMmKIGWcby5BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_bottom-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIVhI+py+0Po5y0hYtzrkB7zH0fN/kFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-text_center-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsnRkqtDnhu1zHfFSpjaY4PavgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-text_left-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsgRoqr3Vnt102fFSJjUC6nlPoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-text_middle-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIXhI+py+0PT5i01pisphjt3UmfFZYm5hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_multirow-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsg2kfZvblXbwTg10WlA4rjyvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-text_right-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+pm+EPIZstSrqsDhhv1ylfFE5jiYwX6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_top-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIWhI9pwe2uYnq0yQtqxbz7D4biSIZ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-upper-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pEeoNIFyIzXStw3q/dR2hhEVcJqamuq6Z9brlNtKMeHuKXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-vertical_text-16:kspread kspread16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIihI+pFrHqQHynTRrvyxQ12YWQWJGMpC0f2E1psr4eaj5+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-applix-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRSVFxaXFxeXNze3Ly2rJyanOTi3Pz+/Ozq7HRydFxaVISGhGxubMzOzDQuLExKTCwqLIyKjGxqbERCRCwuLJSSlOTi5BQSFPT29IyKhDQyNISChDw6PBweHMS6pPz69Pz29PTq3Ozm3MSynMTGxAwKDPTu5Ozi1LyulExOTCQiJPTm1OzezLyqlLSyrDw2NOTazOzizOzaxLyqjKSipBwaHOTStLymhLymfGRmXNzKtOTOpLyidMTCtMS+rCH5BAEAAAAALAAAAAAQABAAAAa9QIAQEBAMikfjcCkgOJ2FgCGwFAYOiCwioUAYFtUrgtFFNBzeB5OAgESyEsWEUjFYAJYJ4hLBoDMHBRobAAaGehwdHnoZCQcfEUKHCBQBAxsgISIjJIRCeSUmHAYmJSInKCmRkgYqGw4ZKxMiLC0unoUvFBQQMBQRMTIzNBVDFjUrGwO9Nh8zNzi4BhM2LyIvGhgLNzc5akM6DsEyMjsfPDw9uAALPj4/HyQ0ND31q0ICFRv6FTAb/xE2+AkCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-binary2-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSVFxaXFxeXFRWVNze3Ly2tJyalHR2dISCfLSyrPTy9Pz+/Ozq7GxubJyanKSmpMTCxMzKzLy6vNTS1JSSlCwuLLy6tMzGxOTi3KSipKyurHx6fOTi5IyKjGxqbERGRDQyNMzOzOzu7GxmZIyKhHRydLS2tNTW1ERCROzm5MS6pIyOjDw+PPTu5PTq3LSqnOTazOzi1GRmZJSWlCQeHPTm1OzizLyqjISGhExOTGxqZDw6PNzSxOzaxGRiZExKTCQiHEQ+NLyulOzavOzWvLymhHRybLyypNTGtOTOpOzexLyidMTCtMS+rMSynLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfqgACCAAECAwQCiIiDjAIFj48GAgcBjIIICQoLDAwNDgwPA4MIBhAREgkTmw4UDBUWAxcYFAUZGggbHB0eDh8gIQkiHSMeFRoUDyQRIxkGJRYmFScTKCcHCCkgJyoNGSsWHCwKCCgIASAgLQoZLi8wISUbEyQUJAEDKQEKMS8yMBYeZmCgMcEcghog9tm4gSNEjgEPdEDYEQJEDR4aetzwgcPCjw8VfiAAwqNFECFDehApYiSEoCMQBVjQkQBJkpVKjFhgNGBGzSRLVhZRwsTloAFNmjhZ8WQIDiZQoOwcFMCCVQshrmYN4ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-binary-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz69HRydMzOzDQyNIyKhERCRPT29GxubPTy7Pzy7PTu5Ozm3LyulPTq3Ozi1OzezLyqjPz27OzaxLymhPz29OTStLyifPTm1OzavOTOpLyedMS+rMS6pMSynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaJQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOq0WDgVEQrFdKAXfhJWRODTMQ6+64BAMGHAq+pB4hCF2eURoVwgREhMUgl5/EBUWimdWB4cVDxcYiwJiGQcVfBobmhwPEgkWFg8dmWcQEgcWFw99HpoVFR8XGiAhISKLI8EkJRgYGyK/SgvLzM0LfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-colorscm-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIcAAPz+BFxaXNze3Ly2rJyanPz+/Ozq7GxqbJxaLLxOFLQ+HLQ6NMSOnOzi5GxubMzOzDQyNMx6JOSSXOSedNx+ZMxaXLQ6ZKRalNzW3IyKjERCRNSWPPTKnNReNMRGVLxalJRGpHRanNTS3PTy9OTi3ISGfLySNOzCfPTatOy2dNxuFMw6DJxGrHROvEROnHyKrMSmTOzanNzShOSqRNyCFMxCHJxGnFxavDxqxCRmrCxijPTq3Ozm3LyulLyyZOTenNTGZMS6VISKbCyCzASGxAR6rBxmhKyqpOzi1JyuXLTShJzKdHS+XES2XCy6pDSy3Bym3AySxAR2pBxadKyinPTm1OzezLyqjGSWTHS6ZFy+ZCyyVCS2dDy61Dyq1CSOtBRqjExqZKyilOzaxLymhDyeTCSuVByyZCS6hDS2vDSatCx2lCxabIR+dBSKTByeZCSmhCymnCyanCR6hNTCrOTOpLyedCxmVCR+bCR2bCRmZExqbMy+pOTStKSelKyejMSynLyqlLymfLyifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAjqAAEIBBCgoEGDAxMGEMCQ4YAABAIkFLiwgMUCBg4UiJgQQQIFCxg0sOjgwUYIAiNImEChgoULGApkcHBAA8oNHDhI6ODhA4gQIkaQGFACgokTKFKoWGGBRQsXLwQIHQABRgwZM2jUsHEDRw4dA3bw6AHBxw8ZQIIIGUKESBEjR3YgIZtEyRImTZw8gRJFyhQqVaxcgYAli5YtXJx08fIFTBgxVsaQQVnGzBk0TtKoWcOmzZExklECcPMGThw5czqLoYOijh3RAO7gyaNnTxsxfOr0cQ2boBg/f44AChRI0KDXCiEoX84cgp+AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-core-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/PzuBFxaVNza3Ly2tJyanPyuBPQCBPz+/Ozq7GxqbFRSVHx6dKSmpHRybMzOzDQyNGRiZHRydHx2fExKRCwqLPTy9ISGhERCRCwuLERGTIyOjBQSFGReXJSSlFRSTDQ2NAwKDNze3OTi3Ly2rFxaXAQCBFxeXMzKxOzm3LyqlDw6NCQiJFROTLy2pDw+PGRiXMS2pOzi1CwqJBwaHAwODAQGDJSOhOzWvLymhKSajNTGrJyWhOTOpLSyrKymlKSelMS+rLyidMTCtMS6tMS6pMSynLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgAAAAQAChoeHgoqCAgOOjgQCBQKCBoMABwMImwgJCggFC4sGDAQNDZoIDg+gEAcABhESEwoUFQsWFw4KGBmCGhsFGwoLEBwYCRYEFxCEHRceFwofIBwhDSIjJBCCCxISDiUaGRwmJygpKr4AGAIl4issISYtLuncgi8YLxAs5SYwYshQgQ8AixksaNSwYYLDDRc4chS0USMEQxMhHOjYEbEggBUWTQhwwANiD4mLBPj4AYTHjyA9cPQQsq7bkCFEihhRkSPHkSMeBUDIAGFo0aMZ/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-deb-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/FxaXNza3Nze3Ly2rJyanPz+/Ozu7GxqbPz6/JwCBMw+PMQCBLQCBNx6fPT29GxubMzOzIyKhDQyNLwqLLRWVLxaXNyurERCRMzKxOzq5Ozq7MQ2NMRmZLwCDOTi3Ly2tMReXOS2tMTCvPTu5Ozm3LyulMSSlNTOxPTq3Ozi1OSytPTm1OzezLyqjNyqpLxaVNzSxOzaxPTy9Ozm1OzexOzavLymhOzWvOTOpOTStLyidMyShMSulLyifLyedCH5BAEAAAAALAAAAAAQABAAAAa0QIAQECgajcNkQDAYCASEQCGQFC4NWMMBkZhWFQtGw/EwQCIGyWSoaFAqFgblIkEgMGthQ5HRbAQcFAcaBGp6DQEJCx0XFx4ZGx8geQ1ECyECByIMIyQlJnkMRBwnBwYODSgpKqB6RCIcK6gEKiwtLpQKiS8WMAQxKi0yuEOICTM0LSo0NTY2N3kAbhoHBzQ0zjg50EkKHC80LCo2ODo5O9FEBCE8Pe49Pj8/6QET9vf4E35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-document2-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJSWjPz+/Ozq7GxqbJyanPT29HRydMzOzDQyNIyKjERCROTi3Pz69PTy7Pzy7PTu5Ozm3LyqlJyWlJSSjJSOhOzi1LyulPz27PTq3PTm1OzezLyqjIyKhJSKfOzaxPz29OzizLyidIyGdIyCdOTOpLymhOzavOTStMTCtMS+rMS6pMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaQQIAQECgajcNkQMBkDgKEQFK4LFgLhkMBIVUKroWEYlEgMLxbBKLQUBwc52HgAQ4LBo049atWQyIPA3pEdFcQEhMUFYNVagQWFxgZGoxfYRsTHB0eH5UJCJAYICEinUoPIxIcHCQkIiIllQYEGCEhJicoKYwPmiQeKisrKLFKLCwtLi8wHyUlMYwM0tPUDH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-document-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz69HRydMzOzDQyNIyKhERCRFQ6LJSKfNTOxJSOhPT29PTy7PTu5Ozm3LyulOzi1PTq3OzezLyqjOzavPz29Pzy7OzWvLymhOTOpOzaxOTStLyedMS+rMTCtMS6pMSynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaLQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOq0WCAREQrFdKAVXKyNxaJgBjgck4khLBAPGm4r+ghETeHtEfVaAFBUWg15gjReKZ4YTFBgYGRpvcQoPDggRnwwMG5hnHB2UFxcbHh+LAh0YDA+zDyCtZ5UXIRsiIiAjiyQlJCYnGhofI8BKC83Ozwt+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-dvi-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/FxaXNze3Ly2pJyanKyijPz+/Ozq7GxubIx+RIRyLHRyVGxqbMzOzDQyNHxyTHRqNGxiJHRiLJySVIyKhERCRGQmLMy6ZNS+TMSuPLSePIRaNGReLHRuTPT29FxOFKymdIRmLHRiHGxKLDQuDPTy7Ly2tHQqLLwyPIxqVGw6LIx2LGRSHDwyDDwyFNTOxOzm3LyqlIQuNLy+zKSGdKSSfJRSRKSSNExKJLSmnOzi1LyulIyCZIxiPJyGLExGFOTSvOzezLyqjLyyXAQCBNzGRLyeREw+DFRONNzSvOzaxGxqVKSelJSCNEQ6DFRKFKSajMS2pNzOtOTStLyidEQ+FLSunOTOpIyKdMSulLymhLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgACCAAGFhoaDiQECjIwDAQQBiYIBBQUGmAcIBpGTCQqgC5gMDZwOgw8KEBESEwkGFAgMFacAFhcYGRobEBwdHgIDFKcWHwYgBiEhIiMkAyUCJg4nKCgp1SorLC0uBC8wMQ4yMzQnNTM2Nx84LTkNOjunNjY88z0+Hz8kOUBBQqdDiHQoYiREhBZHkORIouSfIAghjCiI8IHEEiYDgAApUAtAEwgfnDzBASWKFCBTqHQE8ONIFRwErFxRcuWKSkU8sBTIkSWLFi1btqwM4KCo0aMO/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-font_bitmap-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/FRWVFxaXNze3Ly2tJyanPz+/Ozq7GxubGxqbNTS1DQyNPS+vPw2NNQeHFw6PPTy9IyKjERCRPzi5PyGhHRWVOTi5PT29OTi3IyKhPza3LySlLQGBGQCBNza3Pz69PTy7MS6pKRubPy6vGQ2NKRSVIxmZPTq3LyqjLQqLHRydPxydHwCBNTSzPTu5Ozi1MSynKQCBOQ+PKwCBIReXJwCBExOTMzGtOzezOzWvEQeHLSytOR+fIxaTOzexLymhEwCBDweHNTOzPTm1LRORIQ6PJyOfOTOpOTe1OTSvLyedMTCtMS+rLyulLyifAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe6gACCAAEChYeGg4oCA42NBAEFAYqCAQMGmAYHCAaSlJaZmAkKnQuKAQwNDg8QBhEJCRKmgwITFA4VFgYXGAQZs5UaGxwdHgYfIAMhwAAiIyQlHCYgECcnKMwpKSoKKywtLicvMMwcHDEyMjM0L+3YgzUsNgH0HCw3ODnvgjU6OwMvBvCQ0cNHjh+zOgAJIqTaECJFOhg5gvAUEmsvksBAAeOIEmYBbixhEgJGExROlHw8taCly5cL/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-font_truetype-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSTFxaXFxeXNze3Ly6vJyanPz+/Ozq7GxubHx6fCwuLDQyNIyKjKSmpPTy9PT29HRydMzOzCQmJAQCBKyqrFRSVLy+vGRiZNTS1GxqbERCRMzKzJyenOTm5JSWlLy2rIyKhMzK9KSm1Kyq3OTi3OTi5JyezBQSJExOTLy6/CwuXLy+5LyulMTC3LSytHx+7Ly2pLSyxLyqlNza3Gxq1OTWxMS6pLyqjPzy7OzexPTq3LyynOzWvLymhPTy7DQ2bOTOpGRmhERCfNzGpLyedMTCtMy+rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfIgACCAAECA4WHhoOLAgSOjgUBBgGLggEEB5kHCAkHBgKCCgsKBgwNDg8HEBESngwAExQVBhYXGBmZDREaGwuDHB0CHh+4qgQgIa+CBMEiIyQiJNAlIMoAJgYDJygpKisWLAMtvoIe2S4pLzArMTIBM9YHBRUeNAQ1KwU2NzjWFAwDDEDIgS+GDh39Fl3ykGMHPh46evggJ2gAgR87HAKZYSOID2uECGQUMkRIAiJBioAUYMTIkRs8cODwUUSlQgY4GSzQuVOnn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-font_type1-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/FxaXNze3Ly2rJyanExKRPz+/Ozq7GRmZPz6/HRydMzOzDQyNJRmZPSmpIQuLGwWFKxeXPTy7IyKhNxSVGxCRLy6vPQ+PPT29GQ2LPTCxOROTPz69KQ2NPSGhPTq3Ozm5LyqlGwODPxiZOzi1LyulLwKDORydBQSDOx+fNw+PNS2tOzi3PTm1OzezLyqjNQaHPRubJx+fMS6rOzizOzaxMwuLKQWFHRaXOQuLJSShNzOvOzavOzWvLymfCwiHHx6dOzexOTOpOTStLyedMTCtMS+rMS6pMSulLymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfFgACCAAGFhoaDiQECjIwDAQQBiYIFAgaXBgcIBgQFk4uYBgkKC5wMiQ0ODxAOERITCggFp4MUFRYCFxUCGAIDE7QAFBkWCRobChIcEr60HR0IHAYeHQQYEh8gIbQbIgjGIw8WEtgkJacmJyjfKSoFKywfLS4vpzAxEAgnHSYyJjMkaNSoB0CEChs3cMjIYULHDho8evig9aPiAQFAHAap0UPIREXYPpAIEnGIECLBABQoYmTGESRIfCQhglIRg5s4czLwEwgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-gf-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPz+BFxaXDQyNAQCBMTCxPz+/ISChKSipERCBMTC/Pz+xPzerMQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARwEEgQahVijMmD/oRAbBw1FCgaFFrppeo5UtILWxlAGNWZHocA4bAxGAnDg9GA8LQCxGTQoHwVNYYEMEHtKYrEA0tctVIOo0Fl2Ct8AQLlKMnzLFg1KIHBCGoUbiR5VSd3C28TThpubgqIEhkfkh9+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-html-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRaVNze3Ly2tJyanPz+/Ozq7GxqbDxinBw+ZERmdIySjMzOzPT29DQyNDRurIR2RPTSdJyulFSGxLzCxIyKjHRydERCRLzKvPzivPTmxNTChLSybGyCfCRSpBQqRLy6vPTy7OTi3IyKhCRShOTixPzy5OzerOTShLyaVEx6nCxerGRyhOzi1LSyrEyGvOzaxPTShNy6bEx6rDxyzDRitCRCfPTq3LyulBw2VISq3GySrPTWlHyanIyitEyO1ER6zBxCfLSqnCQ6XHSq3GyWvFyGvDxuvLSqpPTm1OzezLyqjCxajFyO1GSi3NS2bKyaTCQuPGRufOzexLSmlER2vKyWNFxaNHx6dLyunOzWvLymfERSVExKNDRCNKyilMy+pOTOpLyifFxaVLyidMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfYgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZMICQoLlwcMDQQOgg8QERITnhQFFRYHF6cPGBkaGxwdHh8gISIDI6ckJSYnKCkqKwksAiEtLg4kLzAhMTIzNDU2HxQ3NzgOOTo7PD0+P0A1QR8uNy1CDkMvREUyRjNHHjkfSElKlpxi0sTJjydQAiSIIkXIFBhUTn14UIWGFQhXHHzAkgWGli2nAHxIwIRLFy8bv4DREkZMSEEfYo4hQAVMGJZkXhIaIERImTJmlogRc0ZnAAdIkyp14CcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-image-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPz+BFxaXNze3Nza3Nza1LS2tJyanPz+/PTu5GRqZOTi3HRydMzOzDQyNJQOFDxKfKTW5OTy/OT23MTaxISKhGxmZERCRCwuLJQSFPzGpLweHJTO3ESu3DRilNz61FymXCxKRMTCxPTy7Ly2rIyKhDwCBORiRKQWFEy23CyKvJTWhDSOPCRONDQaHNROPNQ2JLRubHTC5DR6rHR+jFSqRCRyLGxqbOzm3LyulCwqLMySjMQ2JMyqrERijJSenFSGXGRmXMS6tPTq3Ozi1MS+vMxCNKyqrHR2dPTm1OzezOSKfNTe5KSmpIyGjLy2pOzWvLyqjIRqZIyKjHR2fExKTHx2bLyynOzexLymhERGRGRmZKSWhMS6pOTOpLyedMTCtMS6rMSulLymfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfcgACCAAGFhoaDiQECAwICBAUBBgGJggEEB5kHCAkHk5UBCpqZCwyeDYIOAA8QERITmRQLFRYXABgZGhscHR4fICEiAiMkDSUmJicoKQ8qKywLAwgKIxctLi8wMTIzNDUJNiEINzgNOTo7PBA9Pj/QQEFCQzg5F0RFEQQ+RhRHswVIkpS7oEMJgiUhCjBpcqSCkyFPoNjKEYVJCCNSpgSgUsXKlSdYUAG4kCOLlgpAgFTZwuVJFyy2Bi0gEsSJzZYuvYi09OULGC44wmAR48VLDkU5zClt0OACUz+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-info-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJyanDROXHSSpISetPz+/Nzm7GxqbGyGnMTS3MzW3JyuvERujLzG1HRydMzOzPT29DQyNMze5Iy2zLTS3Cx+pCRijLS+zIyKhGxubERCRFR6lGSivFyavISuxAxajBRejAxGdDxihJyyvCR6pBRqnAxelAxOfPTu5OTi3IyqvFSOtJy+1IyyzFxyhOzm3LyqlGySrAxejAQ6ZFxqfMzKxPTq3Ozi1LyulCxulAQuVISKjMzGvPTm1OzezLyqjBwmLBROdExOTKSinNTOvOzexBQeLAw2XAQmTCwyPLy2pOzaxOTWxLyedCQmJAQKFAQWJKSalOzavOzWvOTOpLymhKyqpMS+rOTStMSulLymfLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgACCAAGFhoaDiQECjIwDAQQBiYIFBgcImAkKCJGJCwwNDg8QmBESEwQUgg4VFhcYGBkaCBsRHB2qHgwfIAghIiMkAhMCAxsUJSYhJygiKc4qCysrLAPILS4oLwgwKcExEisyMxQFNBg1Nb7ONjc4OTo7yAU8IiIIDiIqPT4/QEFCVA0hooJBAg0eehQxciQIEnKCktiYqGQJEwJNnCB5AkWVoChSpkwpQmXAkypWrmDxKAhSlixaTlrZcqWjIi0/BmjhsgNLFy82BwWgQDQK0aNE/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-kmultiple-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXPz+/AQCBISChPz+xMTCxPzerKSipAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEIRJgb04iLEJwaAmjMTwgVbAjeaESmNcGMGrxmOhDqE8HAOVJ7MSFH4qhOmiOQIPNIGB4JJwnIaDaFaTUL4iYxc0MJidQVvROc4Yfz+a+g3V2sAVfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-log-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJyanPz+/OTm5GxqbMTCxARiTARSPARCNAQ6LAQyJGx+fGxubMzOzDQyNCxGPARyVARqTARaRLSyBCRGHFRuZIyKhERCRDRuXAx+ZPz+BIyOBFRybOTi3AyGbAx2XExaDBROLOzm3PTy7DRORDyeXBx2VEymVHyuJGRyDPTu5LyqlFyGTBxaNAxqVDR6PARKNPTq3Ozi1LyulCRuTCxeNBSCZDxmJEx6bOzWvPTm1OzezLyqjCSSdCSmhBySdBR+ZARqVEx+bNzSxOzizESCdAQCBNzOvOzexLymhOTStOTOpMS6pLyedMS+rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfIgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkYIICQkKCgsLDA0ODxCbEQASExQJFRYXpBgZDwcaqxscrgkdHqMfBiADGasIIRwiHSMdJB0YJSYCA6snKCkqFgorHSwdIC0lLqsvvx0wMTIWMxgCNDU2xzcdOBw5EzoKOzw9Pj/WgAQRIiTEkAlEihg5wgMgACRBkpwQIpGDRCVLeDCJACGJx48gAzRxspHQoZNPRkJZNSjAkygDntiwwYQJlJWKIujcyTOCn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-make-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxWVFxaVOTi3Nza3LS2tJyalGRmZMTCxPTy9Pz69Pz+/Ozq7GxubJyWnFRWVHx6fHRydMzKzDQyNHx2bHx+dIyKjERCRGRiZKyilLSifMTCtLy+tISGhOS2bPzerPzuvOzetJSSjFxaXOzu7PTy7MS6pGxqbKSWdPS+dMSidOTerPzqtISCfKyurOzq5LSqnMzKxPS6ZEw6HJSKbOTStHR2dMzGvPTq3OzizLyulFRSTOyyVNymXOy+dKyqpPTm1OzezLyqjJyCTOSqTOSmRLSupNzSxOzaxOzexOzWvOTOpKyinMS6rNTGrLyedMSynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfagACCAAEChoeGg4oCAwQEjQUCBgGKggcICQoKCwwNCg4CiwQPCBAFmRESCwYTghQCEgYHDBUSChYNDRetGAQZGhscHAIFDAoDHB2tAQYeHyAhIiMIJAolBCYTAicoKSorLBItGC4DLy8wExExKjIzNB81CBI2Nzg5Oq07KDw9Ph4mdgj4IQFIECGtHrgYQqRIjQoPjBzJkQMJQgANkrngYGFAhB8UkyjR0EpQAAkUKkQQkCGHEiVLLg6y8IDJhiZOXsJ8UtLkhpsmoAgRouIJT0UPJihdynSCn0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-man-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXFRWVNze3OTi3Ly2tJyanNza1Pz+/Ozq7GxubMzOzDQyNOzq5KSmpNTS1IyKjGxqbERCRPTy7PT29LSytOTi5MTCvMTCxLy6vMS6rISChLy+vPz69HR2dLSyrLy2rNTW1IyOjOzu7OTm5HRybHx2ZNTOxLyulLS2tIyKhHRuVMS+tHx6fGRmZLyqjISGhJyenMTCtGxqZGxmVMS2pFxeZGxiTMSynLymhHx6dGRiZFxeXFRSVLyifGxmTKSSfLyidMS+rLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAEChYeGg4oBAwMEjQUCBgGKggEHCJkICQoIBgKKkgSamQoLngyWDQ4PpAgQChESqQACExQVFgkXGA8ZBBobtAENDQsGHB0dEx4fBCC0AhYhGCIjFA0kJSYnKMMPHCkqFg0DIQorLN6WCx8OLQsHIQsuKxovtIQwMR4ZHDIYZtCogU+RjQAeUmDAkELBDRw58hHSsWMDjx4XV6DwIZGYCRc/aNz4AeRFkI4sZAipgePFCx9BhkgUwKCmzZsM/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-metafont-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJSWlPz+/Ozq7GxqbKSajPT29GxubNTS1DQyNIyKjERCROzi5Ly+vKyqrKSipKSmpKyurISChKyinHRybISGhGRiXJyanIyOjFxeXJyenJSSjMzGxMzOzMTGxLS2tISGjExOTLyulMTCxISWpGx6jExifFxufJyepJymrFRSVLSupLyqjERKROza1OTKzNS6vGRmZLy6vPz29Hx6dMTCvHRydJSKfOTStLymhNTCxLSOjKx6fMS6pLyifLSytHx+fOzWvOTOpLyedMSulLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFCJKKApcFCQoLBQQMnqAFDQoHDqeDAQ8QERITBhQVFhWnF4IVsxgKGRobHB0DrxUeHyAhIiMeGCQVFCWvACYCJygWKSoTFxcD1oMJGissJiwjFC0ZLi+nMBoLMTIPFDMzDS00FvEAYlyQUMNGiBs4OuQgoWMHj2sDe/j44aNCBh1AdgS5BoCGBhNChlxAQGRHESMcYXCI5sHCkRdIkKBUxKCmzZsM/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-midi-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Nza3Ly2tJyanPz69Pz+/ISChOzm3GxqbKSipAQCBHRydMzOzDQyNIyKhERCRPT29OTi3PTu5PTy7LyqjOzi1OzezOzWvLyidOzaxOTOpMS6pMSynLymhLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaOQIAQECgajcOjUTAYEAKFgDBgOFQNiMHhkFAYosQFg2HNbg0Nx/dB3W7NW0hDEWEjxm+BWzIhINhVbnBUFH12eAeDFRQUFoBuiVoGRRQXjgGQiQQLCwELBZaHZJGMARgLGZeZCARRUKgaom8DCAEZGwscqm5YrZyfHLFKRQQdHhYWHxogD0NED9DR0g9+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mime_empty-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz69HRydMzOzDQyNIyKhERCRPT29PTy7Pzy7PTu5Ozm3LyulPTq3Ozi1PTm1OzezLyqjOzexOzavPz29OzWvLymhOzizOTOpOTStLyedMS+rMTCtMSynLymfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOq1eEQnFdqEUXK2MxKFBHnqvDsGA0aaaz4iHvE68WxEQERITfG+ADxQVhGV/DxEWFBcYhQIIgBEUFBkak2UbgYkZHBwdlIgUHh4aHB+lZZkVF6sgHyGFIiMiAyQYGCUhtkoLw8TFC35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-misc_doc-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSVFxaXFxeXFRWVOTi3NzW1Nze3Ly2rJyanPz+/Ozq7GxqbMzOzDQyNHRydExKRERGRExKTERCRCQiJIyKjCwuLGxubDw+PDw6PDQ2NBweHAQCBPT29IyKhNz+3HzmfDTCNASaBBxaHCQmJPz69PTu5JTqlGTOZCSmJAR+BBxSHOzm3LyqlFTKVASCBARmBBxGHNTSzPTq3Ozi1MSynAyeDAROBCQ+JBQSFNTOxPTm1OzezLyqjCwuNAQyBCQ2JMzGtOzexAwODOzaxOzWvLymhMzCrOTOpNTKvMS+rLyifMTCtLyulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfcgACCAAECAwQCiIiDjAMFBgeRCAMJAYyCAQUKmwoLDAoJA5eZnJsMDaAOAA8BEBESExETFAsVDwwTFgAXAhgOGBkaGhscHQUIHqoDAR8gISIjJBQGJSbHugMSJygpKisU0x0mLC2qAhEuKS8wMRsbMiYzNDW6ARM26zc4ORQ6Mzs8evgAACGDChg3fgDhF6SAECE9VEXQYKGiDwtDKAQRQqSIEV25KGzIQZIDhSNFiiAxomoQAwM6kgRRgiQlkiW6BgVIwkQJghpNeixx4qQlJiAWHCh1kFSpBT+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-netscape_doc-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNTW1Nze3Ly2rJyanPz+/Ozq7GxubPz6/OTi1Ozq3GxiTMzOzCwuLMSijGROLLSqjGRiZOze1LSOdIyKjEw+NHxGJNSqjMTGxPTy7Ozm1NzWxLSSfFw+LMzKvHRuVKyeZHxybOTazOTi3Ly2tDQyNOzm3MS6jFxaRPTu5LyulOzi1KSehMTCxKSOdHxuRMzCpJSGXOTStLyqlHRqRIR2TFRKLLyedLyqdGxWLIR6XOzezJyCZJySbEQqHKyKdFRONJSKfOzaxNTCpKSWbJSSjExKNHxuNOzWvLymhIyKhOTOpHRydHx6bIR+dOTOrLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgACCAAGFhoaDiQECA40CBAEFAYmCAQMGmAYHCAmSlAEKCwyZCA2dDoIPEIsREgkTFBUICBaoABcYGRobHAodHhkDBBW2AB8fIBwMESEiIxokJSaDJxAUKAwQESkaKicrqBssLS4vBzAfMTIRMwo00zU2LTc4OToQOzU3DDwr04Ixeljw8QNIiCBCYgyJUIxIESMfjuxAwoDDkCRK/j244CNHjhBIPDxYMoPJA1sXIDRxkuOIkycXHsyAEqUYoRk7GDAh8uJFDhw4/lUy4aCo0aJE/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-news-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/AQCBERCBPz+/FxaXIQCBMQCBMTCxISChKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARXEEgZwrxYikFsvtUwBN0nEWIhkh4YiIOhjiX1hqIsHlb4jr8VwoJa/XCCBG4ZZA2bRxEi0QkgeLAloUZKYGEDhLgG6H5JBEFrYg4ItmsMCaGomFyEiz8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-pdf-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAASC/FxaXNze3Nza3LyypJSSlPz+/Pz69Pzq5Ozq7GxqbJyanNyGhNx6dGxubMzOzDQyNERCRPz6/My+vLxaVJxeXKSmpNTGxIyKjNTS1OTi5OzCxLRSVMTCxKyWjOTi3Ly2tIyKhLxmZLSWlOTe3MzKzOza3MyytNyOjAQCBKyqrOzm3LyulPSajMRWXOSGhOyGhKxiXOzi1OxyXKRORIxSTNTKzMy6vLyenLRubLwqLMxiZNSurJRybOzezLyqjJxCRGxSTLy6vGQiJMw+LJR+dMzCrOzaxIyOjKyurHxydNxWPNTCrOTStLymhIR2dKyKhIxuZIR+dJyShOTOpHRmZKSKhJyCdKyilMSulNTCpLyedMS+rMS6pLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfQgACCAAGFhoaDiQECAwKMBAEFAYmCAQMGBwgHCQoGC5OKAgYMDZcODwYFEIkREhMUFRYXGA4OEauCGRkaGxwZHR4ZHyAhuAAdCQgiFR8aHSMkHwS4JRomIicoJykqHh0rLKstLhQcFC8wMR0FHgQy4TM0HDU2Nzg5Ojs8PQQ+P6tAggjRVaLEjiFEihg58k+QBSQdQCTpoITIkhBMmjgxVsBCxydQokiZYoTKxkRVrFy5EgJLFi1NqGwxRohLBy5dsmT54cXLTEUQggodCsFPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-pk-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/IQChFxaXDQyNAQCBPzC/MTCxMQCxPz+/ISChKSipERCBMTC/Pz+xPzerMQCBCH5BAEAAAAALAAAAAAQABAAAAR6EIAQhLVjECJlKISwjcZgcFNxhATiugKyTaP4wu0JiOyNXBqAIWFpvRQKgUHBSTgNS4UzseBxBMxoMiG1NTcJBpLBLTaaTIVM3fXuFKeQMmk7AwbSU5QocsgkFnAPD0kbFBQdO1hELQ4fK4lWLQ0IASsoEhojIwEjfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-postscript-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxWVFRWVFxaXOTi3Nze3LS2tKSajPT29Pz+/Ozq7GxqbJyanISChPz6/HRydNTS1CwqLMTCxISGhOzu7ERCRDQyNERGRLy2rIyKhExOTAQCBKyqrOTm5KSmpHR2dNza3AQGBNzSxOzm3LyulBweHBQSFKSilOzaxAwKDOzezDw6PJSSlDw+PKSelNzOvLymhAwODNzGrOTStLyqjExKRHRqZLymfMTCvMS+tMS6rLyynMS6pOTOpLyifMTCtMS+rMS2pMSynLyidLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfPgACCAAECA4aIA4OLAgSOBQQGAgcBi4KNCAmaCgsJDAKWjQkNCA4JDxCeEYwSDQ4TFKMPCxUWAA0BEQ0GDggQDxcIBBgZthobExwICB0eFRsSHcOrER8QCwYIIA8bIRwiIyS2JSYVHgsQzhsbJygEJKsl6ykeH9zrJyIq4gAp6xsrWLT45+IFChi2YqwLwcLEvxgHZMygsarBOgsCBGioUcNGxBk3bA0SgCOHjh0oeczo4WPVoAA/fgAJIoQGjSFEiIgUNCCCBZ8Wggq14CcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-readme-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJyanDROXHSSpISetPz+/Nzm7GxqbGyGnMTS3MzW3JyuvERujLzG1HRydMzOzPT29DQyNMze5Iy2zLTS3Cx+pCRijLS+zIyKhGxubERCRFR6lGSivFyavISuxAxajBRejAxGdDxihJyyvCR6pBRqnAxelAxOfPTu5OTi3IyqvFSOtJy+1IyyzFxyhOzm3LyqlGySrAxejAQ6ZFxqfMzKxPTq3Ozi1LyulCxulAQuVISKjMzGvPTm1OzezLyqjBwmLBROdExOTKSinNTOvOzexBQeLAw2XAQmTCwyPLy2pOzaxOTWxLyedCQmJAQKFAQWJKSalOzavOzWvOTOpLymhKyqpMS+rOTStMSulLymfLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfVgACCAAGFhoaDiQECjIwDAQQBiYIFBgcImAkKCJGJCwwNDg8QmBESEwQUgg4VFhcYGBkaCBsRHB2qHgwfIAghIiMkAhMCAxsUJSYhJygiKc4qCysrLAPILS4oLwgwKcExEisyMxQFNBg1Nb7ONjc4OTo7yAU8IiIIDiIqPT4/QEFCVA0hooJBAg0eehQxciQIEnKCktiYqGQJEwJNnCB5AkWVoChSpkwpQmXAkypWrmDxKAhSlixaTlrZcqWjIi0/BmjhsgNLFy82BwWgQDQK0aNE/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-recycled-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2rJyanGRmZKyqrMTGxPz+/Ozq7KSinOTi3LzatLTGpJSSlMzKzGxubMzWzPT29DQyNMS+rOTy5KzWlEymLDSSDKTClIyKjGxqbERCRGx+bNzu1Hy+ZESeHDSWDCyKDCyGFMTKxHx6fOTi5ISCfFRuVKzGnJzKjDSOFJy2lNTSzJSSjPTy7Ozm3FR6RJzChGSqRFSePHyqdMzOzLSytNTOvLyulExyREyWPESSJMS+vKyurMzKxPTq3Ozi1BxeDDSCHNTS1Ly+vHx+dIyOfPTm1OzezLyqjBw6FBxmDFSKRMzGxERONOzavBQ6DBROBHSOdCxeLDRCJKSelOzexOzWvLymfCw6LBxGHFRiTOTOpERGRKyqpMy+rLyedMTCtLy2pMSynMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfWgACCAAGFhoaDiQECjIwDAQQBiYIFBgcImAkFCJGJCgsMDQ4PmBAREgQTghQVFhcYGZYIGhAbHKodHh8gISIjJCUCEiYDJxMoKSogGCsjLC0GLgkvMAMTMTIzIjQ1LDYHNxo4CTA5Ezo7PDstEQ8HPT4nP0BB5jpCQxFE7kU3RkcHkCRRomoJkyYHnBQZ0OEJARxJoBAUFEWKjilUolSxMiDJFSxZVAnSEmVLFC4EBnzE0iVkIi8EvnwBs5JlGJGCAogRQ2EMmTJZsoS5qWiC0aNIJ/gJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-resource-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSVFxaXFxeXFRWVOTi3NzW1Nze3Ly2rJyanPz+/Ozq7GxqbMzOzDQyNHRydExKRERGRExKTERCRCQiJIyKjCwuLGxubDw+PDw6PDQ2NBweHAQCBPT29IyKhNz+3HzmfDTCNASaBBxaHCQmJPz69PTu5JTqlGTOZCSmJAR+BBxSHOzm3LyqlFTKVASCBARmBBxGHNTSzPTq3Ozi1MSynAyeDAROBCQ+JBQSFNTOxPTm1OzezLyqjCwuNAQyBCQ2JMzGtOzexAwODOzaxOzWvLymhMzCrOTOpNTKvMS+rLyifMTCtLyulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfcgACCAAECAwQCiIiDjAMFBgeRCAMJAYyCAQUKmwoLDAoJA5eZnJsMDaAOAA8BEBESExETFAsVDwwTFgAXAhgOGBkaGhscHQUIHqoDAR8gISIjJBQGJSbHugMSJygpKisU0x0mLC2qAhEuKS8wMRsbMiYzNDW6ARM26zc4ORQ6Mzs8evgAACGDChg3fgDhF6SAECE9VEXQYKGiDwtDKAQRQqSIEV25KGzIQZIDhSNFiiAxomoQAwM6kgRRgiQlkiW6BgVIwkQJghpNeixx4qQlJiAWHCh1kFSpBT+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-rpm-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/FRaVNze3Ly2tJyanFRSVOTi3PT29Pz+/Ozq7GxqbFxaXHRydNzazDQyNIyKjERCRGRmZExOTLyipOSytLy6vIyCfBweHMzOzNS+vMRqZMRSTNzGxAQCBLxCPMzGvLyulCQmJPz69IxKRIwWFLSGfLyynAwODERGRMTGxGRiXLyqjHR6dIyOjBQWFLSqnNTCpNTKtLyidPTm1OzezOzavOzWvOTOpMTCtMy+rMSynLymfLyedAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAazQIAQECgajcNkQMBkDgKEQFJYMBwQ2ITiEJ0uDFjsgdHgOpIFQRj7UCggZyEksIgoJBPKwVCxnBUXEgwYBgkGGRobHAYDDgUdFx1fawceHh8gDiEdnEthIgcjJCUmDh0nKJwdCCmcKh0WJiumQh0sFR0tFyYuLycwK5u1nBYsFwMuJicTs0MdEhUpDRkxMRkwMDJxQl8zBjM0NTY3N9poKTg5JjorKzsyPNtEDvT19CH0fkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-shellscript2-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3LyypJyanPz+/Ozq7GxqbPT29HRydMzOzPz69DQyNHRaJKyONJR2LJyCJKyCHKSCHMSqZNTOvIyKjGxubERCRGxSFIxyRKR+HMyeHOTCLMSOHLyWFMzGtIyKhHx2bKSGZNyiFHxeDOTi3Ly2rMyudOTCpOTKxLyqjJR2VJxuDLSGHLSunPTu5Ozm3LyulJx6NNSyXOTCjOzWvPzi3MyqhGxSLFQ2DLSKLNSqTPTWtPzq7NS2nIxyVIx6ZOzezFxCFOy2POSyROTGlPTazPTWxLSiZLSSVMy+rOzaxKyCJMyeNOSyTNy+dLymXLyePNyqPKSWfOTStLymfKR6HMyaPMyaNJR6TMy6pFxKLHxWFKR2FIxiDOTOpLyedMTCtIyCbMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfQgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZOVlwgJCgsEDIINDg8QERITFAUVFgcXpYIYGRobHB0eHwgCAyC0giEiIg8bIyQCCCUmtCInKCkpKissLS4vMDGlMjM0NQsINjc4OQ0U26U6OzQ8CAg9Pj8uQBRBKgxCQ0QzRUY2jiDRkURJkCX5ADBp4uQJjRNQokhpMSUIlSqlcFjpQOQKESlYWmTRQuUirS1cumy04qWBlhpUvoARRihMGDFaBoxRUQXMTEUMggodysBPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-shellscript-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRWVFxaXNza3OTi3Nze3Ly2tJyanPz+/Ozq7GxubNzSxMzOzMTGxHRybDQyNLy+vHRydHx6fKSipISChIyKjGxqbERCRCwuLLy6vGRiZExKTCQiJAwKDLSytLy2rJSSlHx+fDw6PKyqrBQWFPTu5Ozm3LyulLS2tCQmJAQCBPTq3Ozi1MSynCwqLAQGBOTazOzizOzezLyqjBweHNzSvOzaxKyurHRuZNzOtLymhDw+PIyCdOzWvOTOpLyidNzKtOTStLyifMTCtMS+rLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfZgACCAAEChYeGg4oCAwQFjgYBBwGKggEECJkICQoIkwADCwwNDY2mDA4Lng8QDhESsLARExQVDhYXGBkWExIaGw8cHR4SCQQfFQ8eFgUgIQEiwiMSBMYfGB4atwEXDyQd0wQlJicPKAHoFyIpJCoeDgMrLC0YKBsX6i4kL+4OMDEyZijr5oLGNxUqUCioEcPGDAwjPNyI6MEDChQjcOSwsUDHgw07RIgI4KCkAgs8cvTw8eOBogAxQtXIASTISiEuBwUYMoRIixYnZggpUgTDywdIkWJIitRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-sound-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXFRWVExSVNze3Ozi1Ly2rJSWlPz+/Gx6dNTS1Ozq7GxubGxqbDRmbDQyNFRiXBy6xFRmZLy6vIyKjERCRAQ+RBy2xByqtHRydIyOjPT29PTy9OTi3ISGhAQ2PATC1ByGlPz6/MS2pAS2xHS2vMTCxJyenLS2tPTq3Ozm3LSmnAQaHARibARudAR2hEySnOTm5MzGvLyulARKTARWXDyCjOzaxAQiJEx+hNza3MzCtOzexOzavLymhBQuNCxqdLy+vKSelOzWvLymfDxOVISipAQCBNzOtOTOpFRybKSejMS6pOTStLyedMS+rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfLgACCAAEChYeGg4oDBAUEjwYBBwGKggEICQkKCAsMCJOVAw0OA4wIDZsHD4oQERINDRMIFA0MFauCFhcYARkJGhscHRMeuB8RICEQHgcaBCIcBSOrHyTWJSYnKB4KHCkqK6ssLS4vMA0LMRoyKe0zuDQ1LTYoHBwU7Ck374M4NTkmdHDIsKMAjx4+cAn6ASSIAhRCdvDgMYSIQkJFjBzJsALJjSFJLCoSUKCIkiVMegxpksTJxQATnjwZMWMGER9OXI58wLOnzwd+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-source_c-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1LyqlPTm1OzizOzWvLymhGxudGRmdFxedFRWdERKdDQ+dHR2dFxidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGhYMJHCq4FuYJBQUEQN5RGlWYBQVFheEVWEYFRkaG40RXw2JGX6MaIiRHGCccQKAkRodHh4fjQ+tICEiIyQkJY0mJg8FJwWzJbVKD7gnI7K+v3EOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-source_cpp-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNHR2bERCROTi3IyKhIyOjPTy7Pz29PTq3Ozm3LyqlPTu5Ozi1LyulPzy7LyqjPTm1OzizOzWvLymhHRydHR2ZHR2XHRyTHRyRHRyPHR2dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGhYMJHCq4FuYJBQUEQN5RGlWYBUWFxiEVWEVGRYaG40RXw0ckV8djYaZFh5gnGgKnx4fICAhjSIPrSMkJCUmJ6woBQ8FJAUlJ7VKDygPD7G9vo0OycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-source_f-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNGR2ZERCROTi3IyKhIyOjPTy7PTm1LyqlPzy7PTq3LyulLyqjPTu5OzexOzWvLymhHRydHR2bFx2XFx2VFR2TEx2RHR2dFR2VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGo4MJHCq4FuYJBQUdnlEaVZgCgYVFoNVYRcYGBEZjBFfDRePEgkajIUXGxgVYJxoCp+hHBwdHowfIK4PDyEiIyStJSUFDwUmJiS2Sq8PILG+v4wOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-source-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMS+rPT29GxubMzOzPz69DQyNMTCtHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1MSynPz27PTm1OzizOzaxOzWvLymhLyifOzexLyedLymfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaJQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJSCx7WAgBwi52FAsi4oBINJnCpAqCkPChUSA3tEEmoFahUWFxiGSwphGRYaGxyQEn4NHZVfj2iLlR5qoHICGYyWHyAhIpB9Dxp+IYAjsGokaiFqJZAJDwkDHBwYJiW+Sg7LzM0OfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-source_h-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxubPT29IyKjMTCtMzOzDQyNHRydERCROTi3IyChIyOjPzy7Pz27PTu5Ozm3LyulPz29PTq3Ozi1Pz69LymhOzizLyqjPTm1OzWvIyGhIR6dIRubIRmZHxaVHxSTHxCPIRydIReXHxWVHxKRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOl0mFFbEYVEgMJQC8DXRODjOw8DjGhYMIHCq4FuIKBASDwN5RGlWYBMUFRaEVWEXFBgZjEoPXxoSkX4bjYaZGBxgHZ2AkR4cHx+cSiAJCRAhIiMkJSaNCREgBScFKCkqtkq4sLK0JsFxDMrLzAx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-source_java-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRWVFxaXNza3OTi3Nze3Ly2tJyanPz+/Ozq7GxubFRWXHRydMzOzDQyLIyKjGxqbERCRCwuLHx6dKSinKymnLyyrNza1PTy9Ly2rIyKhDQyNGReXKyejKSWhIx+bJSCdIRuZCQiJISCfGxaPJSKdHxuVHReRHxiVHxeVGRGPKSajMS+tMSynAQCBFxeXGROLFxCLFxCNFw6LGxiXFxiZMTCtOzi1ERGRLSytJSWlERKTNzSxOzaxKymlOTi5JSSjISChBwaFNzGrLyqjKSmpDw+PMS+rOTStLyqlLyifGRmZKyqpLyidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfWgACCAAEChYeGg4oCAwQFjgYBBwGKggEECJkICQoIk5ULmJoIDA2eDoqXowgPDBAREoIRExQVFhYEBA0XGBkaGwAcHR4dHx4gIRMGDBcEFg4iIyQlJicoISkqISssBC0OLi8lMDAxMiozNDUUNjctEjg5OjklDCEcOy4OFDw9Pg4QfuQAEgTCDglCHAQYMaQHEVRFBhRhIACHAyMLIHg4guShIAg6KDwYMYHBhBVJhiBRgmrQkhxMKlBo0ULlkCYtLbGwYYNmCyJNguYk5KBoUQlGi/oJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-source_l-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1LyqlPTm1OzizOzWvLymhGxudGRmdFxedFRWdERKdDQ+dHR2dFxidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGhYMJHCq4FuYJBQUEQN5RGlWYBQVFheEVWEYFRkaG40RXw2JGX6MaIiRHGCccQKAkRodHh4fjQ+tICEiIyQkJY0mJg8FJwWzJbVKD7gnI7K+v3EOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-source_moc-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIQAAPz+BKSipISChERCBPz+/AQCBMTC/MTCxISC/FxaXDQyNASChARCRPzCxAQC/PzerMRaBPyCBPyqXISCBPwC/MQCxIQChATCxMT+xATCBASCBIQCBARCBPwCBMQCBMTCBCH5BAEAAAAALAAAAAAQABAAAAWOICACQRkI6DCuJOG+JysGL1wIMm0YNHEUBNwqsDMgEL5AIqEYIhZPxqtwUI0CzwRDSih4E6KGeLl1vB4FMAASkTC1icmjmxZBKBXL4YLJaAoPgWoQEBsbGX4JHHR1Ih0eChkTGoqADQ9qMwR+GhwcXlSZAAJzDQNogZeiAUBeaAcNHw2iAygocQkCuQN+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-source_o-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNGR2ZERCROTi3IyKhIyOjPTy7PTm1LyqlPzy7PTq3LyulLyqjPTu5OzexOzWvLymhHRydHR2bFx2XFx2VFR2TEx2RHR2dFR2VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGo4MJHCq4FuYJBQUdnlEaVZgCgYVFoNVYRcYGBEZjBFfDRePEgkajIUXGxgVYJxoCp+hHBwdHowfIK4PDyEiIyStJSUFDwUmJiS2Sq8PILG+v4wOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-source_p-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxDQyNPz+/FxaXKSipPz+xPzerISChATCBARCBASCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARVEEgQqrUz3yqGCJlUESRZEFVooWZAfJpbEkU9gNMqo4KBi7vSAfWjyFxIUnEkJAwPy9EugEDFSE+nMzojVKvLREGsKCgWjMVybDaj0eH2OZ2Objb+CAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-source_pl-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMS+rPT29GxubMzOzPz69DQyNMTCtHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1MSynPz27PTm1OzizOzaxOzWvLymhLyifOzexLyedLymfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaJQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJSCx7WAgBwi52FAsi4oBINJnCpAqCkPChUSA3tEEmoFahUWFxiGSwphGRYaGxyQEn4NHZVfj2iLlR5qoHICGYyWHyAhIpB9Dxp+IYAjsGokaiFqJZAJDwkDHBwYJiW+Sg7LzM0OfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-source_py-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNza1Nze3Ly2rJyanPz+/Ozq7GxqbPz6/NTSzDQyNKSujIyKhHRydERCRGR2PHyaLLzObIyqNKzCZIymRKy6jPTy7OTi3ISChFx+HISaNKyuPJyaBKTCRKS+VISiVGyKJHSGPLzWdKS+TMzefISCJHRiBGySJJSyNLTGbKzKRHSaHJSWhLyulHSKNJy6RKzCXISWRLTOZJSuVIyuJGyOHHyWLOzaxJSqTGyGJJSmXHySPJS+JHSOHIy2JHR2XLyqlERaHGSGHFRqJHSOJGR+JFxmPNTOxIySbHyORHSWJPTm1ISiHHyiJFRuHMSqjPTu5OzexFx6LMTCtMS+rJyidISqJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfKgACCAAGFhoaDiQECAwMCAgQBBQGJggEDBpkGBwgJk5WXmgYJCAqeC4kFAwysCQYNDggPqIMQERITFBUWFxgEGagaGhsVHB0eH8ggvQQLISIjJCUmJygpKissLRcuCy8wMSMqMhszMzQ1Njc43QA5Njo0Ozw9Pig/LCxAQbRCOkM2iBQxgsLGjyJH+CXKoEABkiRKWCxhQYQBLUsYLhxgwkRJEydPoFwkhCEKRylKbNSYIlIRASpVCFj5UeMKhJaDAizYybPnAj+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-source_s-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbIyKjMTCtPT29GxubMzOzPz69DQyNHRydERCROTi3IyKhIyOjPzy7PTu5Ozm3LyqjPz29PTq3Ozi1LyqlPTm1OzizOzWvLymhGxudGRmdFxedFRWdERKdDQ+dHR2dFxidAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaHQIAQECgajcNkQMBkDgKEQFK4LFgLhkMhOl0iElbFgtEgOJQC8BXxOEDOw0DkGhYMJHCq4FuYJBQUEQN5RGlWYBQVFheEVWEYFRkaG40RXw2JGX6MaIiRHGCccQKAkRodHh4fjQ+tICEiIyQkJY0mJg8FJwWzJbVKD7gnI7K+v3EOycrLDn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-source_y-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxubPT29IyKjMTCtMzOzDQyNHRydERCROTi3IyChIyOjPzy7Pz27PTu5Ozm3LyulPz29PTq3Ozi1Pz69LymhOzizLyqjPTm1OzWvIyGhIR6dIRubIRmZHxaVHxSTHxCPIRydIReXHxWVHxKRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIAQECgajcNkQMBkDgKEQFK4LFgLhgMiOl0mFFbEYVEgMJQC8DXRODjOw8DjGhYMIHCq4FuIKBASDwN5RGlWYBMUFRaEVWEXFBgZjEoPXxoSkX4bjYaZGBxgHZ2AkR4cHx+cSiAJCRAhIiMkJSaNCREgBScFKCkqtkq4sLK0JsFxDMrLzAx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-tar-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaXNze3Ly2tJyanPz+/Ozq7GxqbJySbJyadPT29Pz69GxubMzOzDQyNPz21LSujPz25OzmxNTS1IyKhERCRKyqjLy2rKSehPz67Pz23OzerKSaZMzGxPTy7PTqvOzirMy+dKyeTIR2NPTq3LyubLyqVJySPHxyJOzi1LyunPTqzOzW5OzSzNzOrJSGNGxiNLy2pPTm1OzezLyqjJSKZOTStOzOxNzGtOTSjKSSRIR+LGReHLyynOzexLymhOTWlNzOhFxSFHRuRNzKfNTGdHxuLGxeJIyCbMy6pLyifLyqlNS+pOTOpLyedHRydJySfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfLgACCAAGFhoaDiQECjIwDAQQBiYKLBZYFBgcFkZMICAkICgULDA0LBA6Cnw8QERKgExQHDBWpCBAQFrm4EAkKAhcUqRgRGRqsGxIbHB0eAgOpCRofCw8WICEiIwMkJBDRCwsgICUmIico3CkqtissLS7mJy8wMTIzNKk1Njc4OSI6Xuzg0WOGjx/6gOQIEkTHiB0ohKjwYQOhoCEliBQxcuQIDCRJbNhQkmoQRhgflzAR2cRJSUFPekDpQbMHjR9OXCpywLOnTwd+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-tex-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxDQyNPz+/FxaXAQChKSipPz+xPzerAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARgEEgQqrUz3yqGCJlUESRZEFU4lkQREJ/2skU9BEaezzmRCwccwDCc+XwIFGhI0ZEMxiURxzIQkghp0+qjJlDDHdRnQPSyGu4oEfguRTrs9fqmWAjfPHpSkWMReyIbg34RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-tgz-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBIQChFxaXMQCxNze3Ly2tJyanPzC/Pz+/OTi3GxubJySbJyWbPT29MzOzPz69DQyNPz21LSujPz67OzmxJyadNTS1IyKjGxqbERCRKyqjLymhLy2rIyKhKSehPz23Pz+9OTevOzmtKSaZMzGxPTu5PTqzMy+dKyeTIR2NPTq3LyulOzirLyubLyqVJySPHxyJOzi1OzW5OzOxNzOrJSGNHRmJOzezJSKZOTSjGReHLyunOzaxOTWlNzOhKSSRIR+LFxSFLyynOzWvHRuRNzKfNTGdGxeJGxiNIyCbMy6pNS+pNzSrAQCBHRydLSunMSynAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfYgACCAQKFhoaCiQOEBI2NBQIGAooHjAiXCAkKCJIAAZ8BCwsMCw2XCg4PBhCCohESExQVCxYXChgZrAsSvBIaGxIbDA0JHB2sHh8gHx8SISIiIyQlBBysFR8mzBIiJygpBSUqK9cPEywiLS4oLzAFKjHkAAwmMjM06y81NgUmNxuscNCYQSIHuxopdOy4wQMgABw9cvjw8SMFEBhBhPAY4hAAkRZFjKQ4cgRJEiWgAiTy2AKJSSFLmAQ4MKDJSidPFggRAmXFhgADNthMJACC0aMQAjRZ6icQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-txt-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaVPzKjMR6RNze3Ly2tJyanPyODPz+/Ozq7GxqbPyKBPyGDPzGjPT29HRydMzOzDQuJOx6BPyGBPyKDOTWzIyKjERGRDQyNKROBOR2BOzezIyKhBwOBKRKBNSOXOza1CQOBPyCDOySZPzizPTWxPTy7Pz69Pz29PTq3LyqlMxmJNRyROy2lPTu5OTi3MSulFxGNIRWLMR+XPTKrOzStPTm3IRSNOzizOzavLymhLSyrEw6LKRuVIx6ZNzSvOzexNzWxNzW1FROTBwaFKSShOzWvOTOpOTazJyWjHRqXNzKrOTStLyifMS+vMS+rMS6pLymfLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfOgACCAAGFhoaDAgOCAQSOjgUBBgGCB4qEBAiaCAkKCJMACwwNA42bCA4PEA4GERITFKQVpwgWDwoXGBkaE6MDG6cOBAUcGB0eGgsTDR8gmw4OGwURACHIIiMkJSYIJygpKSoYgtYrLC0kLdAuKS8w1IIdMTIzNDUbLjYpG+KDABcRbtRrYWMDjhw6xg0KsCMAjx4+fmwAEiShvwBCChgYQqSIkRpHdMBjZCIFkh1JlCxhcqSJQkZOnjyBAgOGjihSpLwkhAFDBJ9Ae0bwEwgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-unknown-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXIyKjNTW1Nze3LS2tJyanER2RGS+VPz+/PTu5GxqbPz69BQ6BCxeLFSqRPT29HRydMzOzDQyNERmPKSypCRWHIyKhERCRDyGPKz2nESiLBxGHCyCHGxubPz6/PTy7Ozi1Ly2rKSipOzm3LyqlKSWhCRyFOzizLymhNTKtNzOvOzaxOTStPz27OzWvOTOpLSupLyedMS+rMS6pMSulLyqjLymfLyifAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAamQIAQECgajcOkYEBoDgoBQyAJOCCuiENCsWBIh9aGw9F4HCARiXciRDQoBUnlYRlcIgsMG5CxXAgMGhscBRAEBRd7AB0eBBoIgxUfICEiikSPgyMMIAokJZcBkBybJgomIaBJAZoMpyCmqkMBFCcVCrgKKAwpoSorKqchKCwtvasIFBIhLiYvLzDHsxQNMcMKLDAwMqEz3jQ1NTY3ONyrE+jp6hN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-vcalendar-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXDQyNAQCBMTCxPz+/ISChAQChKSipAQC/Pz+xPzerPyqXMRaBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARyEEgQahVijMmD/oRAbBw1FCgaFFrpEbB6jt1g3OpFAscxwATUiIAgBRKJXiqIYJEMBQNSWSAYgptrMDo9FJqKrHArTR4WLGisSkbebE12gXFFGRBFyd3eaFSvbx1xCDBXC2E1e1EECo07ABkaBh4fGn4RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-vcard-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXDQyNAQCBMTCxPz+/ISChKSipISC/ERCBMTC/Pz+xPzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARvEEgQahVijMmD/oRAbBw1FCgaFFrppeo5drKhXqQUEIfREyweqWIoHo4GDYtkGxwQ0CjitEkUrCyfYjtdbJoFW/agmLJWWZSY3B0EbGJ4uAwcHlK2HpTg7YgHBgQjDH0THoGBCwULjDkAGR+RH34RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-video-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaTFxaXIxuHJyCLHx6ZLy6vJSSlNze3Ly2rMy2RNS+TKyqrMzKzPz+/Ozq7GxubJyanLSePKySNKSSPNTS1JSWlDQyNMSqPLSmVNzKZJyenIyKjHRydGxqbERCROTWXNS6XOzidNzOZPT29MS6rISChLSulMy2TLyeNKSOPJyCPOTi3JSSfHxiFGxaJFxWLFROLPTu5Ozm3ISCdDw2BFRKHHxqPFxWPLymTMzCvPTq3OzezKSWTMzCbNzGZExKNHx6dLyqjMy6XMSqTMSmTEQ+JHRybMSynISCbMyyVOTWbLy2ZBQWFGxqZOzifDw6LCwiDISCZJR6LIRqJBwWDExKRHRuXHxmJGxeJFxSHCQiFFRGFGRSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfhgACCAAECAoWHhoMDBAUGBwiRkQkCBwGCCgsLBQwNDp8ODxAOEQIAChITFJwVoA4QnhYXEhgZBRoFG62fHB0eHxcgIQUiIyO5uyQIJSYXJwUoKSoUKwEWniQkLCUXHy0DLi8vMDEfBw0kMjMnFwAfNDU2Nzc4OTgmOjs87ILvEj04NPj4ASRICR5C2vVrEWAIEQwSihg5giThIHdJiCgJMWIJkyZOLA4K8CHJkycimEAJEcWJQkECEHyQEqIHFAJTqFSxcjGAjhIfrlzAkkWLDS1bel5Y+mELly5YCEyQ4CcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-wordprocessing-16:mimetypes mimetypes16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFRSVFxaXFxWTNze3Ly2rJyanPz+/Ozq7GxqbHR2dHRydGRmZERGRMzOzCwqLJyWjOzi1Oze1PTm1PTm3IyKjDQyNERCPPTy7HRmXCwqJPT29DQ2NNTGnOzm3PTq3CQqJMS2hDQuLKyaXCQmHBwaHKyahLSijKyehBQaFCQiHHRqNPTu5LyulCwuLHxyNAQGBBQSFERCRBweHOzezIyCVJSSfOzavLyqjOzexOzWvLymhExGJEQ+JExCJExGLCwqHOTOpDw6POTStLyifMTCtMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfWgACCAAECAwIChYeDjAIEj48FAgYBjIIBBAeaBwgJBwYDjAoLDIkNmgsOnw+CEBESExQSEgsHFQsJDRYAFxWbmhgZGhsEBRUcHQ8cEB4fzhAWICEYxSIjJCUDJicnKBkpKissFC0uLwAwMDEyFzHpDxgfES27DyozMyX6+TMTEzQtWJWoIYGgQRsl/t3AsStFQRoGIYrIkUPHDhcANPDo0cMHxx9AUtzQEWQHKwAcSDy4IAQbh5FDghDZNShAkZsFjBzBgaQnh0YcHojgIMIFBwtBXfgJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-1downarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBBQSFAQGBDQyNExKTHx6fGxqbFxeXGRiZFRWVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFxaXDw6PPz+/MTCxLS2tIyKjKSmpKSipJyanAwODDQ2NHRydERCRFRSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZzQIBwSCwaj8ikcslsOp/OgHRKlQoCgymRUDAcEIkwYgxWFBYERpHQcDwgEclEQmk8DhWL2kiIXDBwExMNGRoJaUkEEH8bEQ0cGgcWAksEHX8QHBKSHk1sfxMHH5ROBBsOICGkT2wiq1CIULKztLW2t0h2QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-1leftarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ5QIBwSCwaj8ikchgQLJGBgfNZDBAKBirRekBMtYGEYsHIgsWNhOO7tCrShDU18Hg/CJAIG0o4wCUQcksTFBUSCRYSEnpUFxgIGQkJGYyNGggbHBaVjR2QCxEeWkITHQ4IH3tPFwEMA2ajAKUgqlQTTbFEE7W5vUgGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-1rightarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNGReZAQCBMTCxGRiZMzGzOTm5LSytPTy9Pz+/CwqLOTi5Ly6vCwmLMzKzJyanJSSlBQWFKymrIyGjCQeJJyWnISChISGhHx2fKyurDw6PAwODHx6fHRydDw2PERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ2QIBwSCwaj8hkMRBQKgOCgRMZIBSk06XhEM0SA4iE4uoVLhCMhqLrdSAekMgYO5VM4BQ521mxIC4UFxBWdEkSERYYFxETGQGFSBKCGBEaGRuQSBwdeZaPXpsQCB6YZQMdEI6ZSgMepKusHh+wrCC0rLdlursGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-1uparrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBFxeXDw+PMTGxHRudPz+/JSSlLSytIyKjHR2dISChIyGjIyOjLSutLy6vKSepJyanISGhJSOlOzm7Ozu7MzGzKyurJyenDQyNGReZKSmpIR+hCwuLCQiJBwaHBQSFAwKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZtQIBwSCwaj8ikcslsOp9QYyAQFQYEAyr0Sihkn1fDAeHVLsOJNELxVaITC0bDUU6GH5AIQ8KYrNtFVxQVFBYWFxgRCREYdUQZGhYEDwgIGxAHCQocCgWOQhmhGR0epR8gqCFTq1Wtrq+wsUt0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-2downarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAQGBBwaHDQyNExKTHx6fGxqbFxeXGRiZFRSVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFRWVDw6PPz+/MTCxLS2tGRmZDQ2NAwODJyanKSmpKSipIyKjHRydBQSFERCRExOTFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAasQIBwSCwah4FkQKBsDpoBIqFgOCASCYRWm1AUFgRGkdBwPCARiWRCaTwOFYvYSIhcMOiJpJGZaDYcR0IEHXceEQ0fICEWIoJDhHcQHxIHgI9SEHeVG46YUh8OISOen1INCqWmUnOYTUxQAU9NUlRWWFtbCiRgrYNlZ2lriG8lYUd1khETE24gCZeCkRgeFBAQIAeNn9OTlXKrBJoYnKrcoaPmpmSpq3S+7u50QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-2leftarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAavQIBwSCwaj8gkMiBYNpeDZzEQXRIKBmPgmtUSDgipcAsWjxOKBaN7Tq+n6EbCIQ3E5+KtQk6gjwl7CX11D3sPBBARTQGFDYeJT2R8EhB0koKUfgATFBUSCRYSEoqcnqCiikMXGAgZCQkZqautr7FiFxoIGxwWqQC4ury+qh2tCxEexMbIRhMdDggfYs7Q0kcXAQwDbELY2txEziBmmx3jSRNMR+nk4e2b70ry80QGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-2rightarrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTGxOzm7CwqLLy2vPTy9Pz+/Ly6vCQiJLSytLS2tLSutOTi5MzGzKSepIyKjJSOlKSmpMzKzJyanIyOjBwaHIyGjISGhJSSlISChBQSFJyenIR+hGxubDw+PHRydHR2dEQ+RHx6fERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8hkIIBcJgEBweAYnTYJUmMAa9USClniFtwlGg6IRFhoUKTXwwWj0FB3F46Hwl6UQyISfAB+EROCQgsUFRYSF3yJEIyBaxgWDBkaGRtclQwSHBIbEGEdGx4fGhcOICEDGBsWHBmqIq1CHRIWGRMMIyRTHRy6Er22tyONq8YdJRe0xkIDwr2/QwMfliMmZQADIxasZd4e4UYDIr7c59rc0eVFA+/m0EQD9PDt0flP/P3+BkEAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-2uparrow-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBGReZDQyNMTCxHx6fPz+/JyWnKyurHx2fDw6PJSSlISGhIyKjIyGjISChLy6vJyanOTm5PTy9OTi5MzKzLSytKSepMTGxMzGzLS2tLSutKymrHRydCQiJCwmLBwWHAwODLy2vHx+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAajQIBwSCwaj8RAAMkUBgSDZdP4JBSi06TAcEAkFNLp07BgLLzY5njRcDzO3zB1C4lEGI83Wj58SiYUFRUWdg0XEXFFAwIYGRoWGxwRZQUFHZdgRAObmx4fHiChISFKpVlKWUdPaalOAlasp1sHG4myZGZ7Yltsbgu1mUhjdRF5egmxfQJ/gYOFdrZDi40iFgiSCw8jBQmYcpydn6Ego6WorUwGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-abs-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAWABYAAAJLhI+pF+vW4HMR1InqxbJzBiLCeIxCaIkneQJk6rkl+2qlONzeNi+2YvKhEIOW4iczvJSoSDDIbCpbq2oGBXUtd59r7IPshsHdB70AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-airbrush-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/AQCBPyChMwCBIQCBPz+/MzKzKyqrISChDQyNPwCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAR8EMhJKw3BahvEyNvWDV+ojQMBAhgmeukaFHSxTqh6FYZx3CyYbtf7XYRAFs8nQ56WxiBpyOEdjLkkrnA9IAKGqXbnTYAP1NDMe0Z8JYR4nPP1seEqTHpWZMupVHx2by03Q4JXbxuBfYoaaVZ3i4YKbo4WaQAKBCxjcEAGEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appearance-22:actions actions22 22:photo:22 22:R0lGODlhFwAWAIYAAPz+BAQCBBweHPTy7Ozq5ExKRPTu5NzStLy2lCQmJAQGBOTezNTKrLyylNTKpOzm3NzWvOzm1MTCpNzaxISuvBSGvLy+pKSehOTexISutKTa7IzS7GSarJTW9HTK7CyazBRypMzGpDw2LOTaxEyKpCSSxARGbERCROTizMS6nDx2jARajIR+bOzi1OTi1MzCnLy6lOSupNx6dGS2rJS6pMy+pOS2pNxGTKwaLDSmpHTOzES2tIyuhLSmjPyqrMw6RLSOhLzSrGyqbFSmXJSyhNTOtGTCvLzm5CyOjEQ+NPRqbOxOVKyKfMzizKzepFyuZJSqlBR6fCRmZJSKdDw6NLxqZLQiNIwyNLSejDSCRJzWnEyiVHySbBRiZDQyJMSijGS6ZHSCZJyafDRmPISKbJyifDw6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAXABYAAAf/gACCg4SFhoYBAgGHjIQBAwQEBYwBlYiQAwYGi4UBBwcInIIJA6WRBAqdCwcMDA2pggEEDpUODwSiAAEQnwwHnI8RwBIGsLoLExQVFg4XiwEPD6IKGBjAExkaGxUcocfSgwHV1uITFR0eHyAhIroRERLAC/PVIxMkJSUgJvHH1RAKTixAgQzZhAkpVKwwwYKWrgnzFrRY4IIgBoMTRryQAGPjs4zzYsgYQdIgsgMzaNRw0CCBLgn2bNzAceMgSZITcujYwaNGj2sjcPjw8QNIECFDiEgoYuSIDiQOkoSTMAGHkiU4mAhp4uQJDyhRjOSQMiUXFQdVrOC4giWLFidbRri8QBKlyxQviIp8udKjRhYwYLKEedFAjJgvucI5cFBEgoMxkMm82PjFmCERix1wLCNmcg8viRGZ6aHZcQ8zoRtVWp16UCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-attach-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBMTCxPz+/DQyNKSipAQCBISChFxaXDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARrEMgJgqA4zzus/gLhFd5HCcZAXqsphYPUdhcYFNRcZnvdtpnDqPTbUWgAJKBYwzBlw+bRo3xmkNWoBgm0OrVLn3GC9RgCk8DhUw7c0rHPr4CDu5SYQNyEt7uSY3p/UAKFhYKDSQOLiwgFdhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-back-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRGZAxCZGyavExmjHyatOTy9CxihISevPz+/KzO3BRylAw+XAQCBDRWbPz6/FzC3CSuzDyexJzO5Mzq9CxSdAQOFISmxNzu9HTS5BSmxAyexDSuzJTa7Mzu9Kzi7GS21CRmjAQOHHSWtLze7AyWvHzG3BRihAQKFCTO3BS+1AyixBSWvBSOtBSStAQWJBSixDzW5BTC3BSqzBS21CTC1ETW3AQSHEze7BRqlBRmjAQCDBR+pBRefBRSdCH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMqBcMpvHgGAANQYIhWdVGDAcENQtIJBQLBgNx0MQaDuQXcghIplQDhBIxXKJYiAZGhscHR4VHyAhIiNWJBklGhIbJoQnFCcTKIxFKSgbKissJi0mJi4vLiYoMEcXKDEyMzQ1Nje2NisoOEg4KDU5K6g6OwwoKAN9SCOeMmgwz884PEq9PT4NYkPLP9jZQikN3d4AKVrjKePp3gZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-blend-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQmJAQyNAQ6PARGRARSVARmZARubARuXARmTARiPAReLARaHARKBAROBAQCBERydESChESOjESanESmpESytES+vETKzETKtETCpES+lES2fESybESqXESiRAQ+PARiZARybASGhASWlASmpAS6tASynASqhASiZASaTASSNASKHAR+BARiBARydAR+fAS2tARKTDRaXARaXASOjASKdASCZAR+TAR2PARuJARqFAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa3QIBwSCwaj8ikcslcBp6CAaFQMBwOiIRiwWg4HA9hAAKJSCaUiuVywWQ0G07H4wkDxp8CKCQakUolJicoKSorLC12eHouL34lMIKEhoiKEFMgLn0kMIGDhSyVYhADjJuAkoWHiaMEMXuOnJ6Tq5alBpp+nSeflKx3l6a6s6CiwKWZm52pvpaue8rEzaPIubLMta2Mscu9ob8BMgIfBDPJNDQ1Njc4OTotDXYP8/T19vZN+fr7SXRBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-bookmark_add-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCwqLCQiJCQmJMTGxAQCBLy+vLSytERGRFRWVKyurKyqrLS2tKSmpHR2dJSWlKSipISGhGxubIyOjGxqbIyKjFxaXGRmZHx+fPz+NGRiZPz+ZPz+HMTCBKSiHPz+jFxeXPz+XPz+tPz+zPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAamQIBwSCwaj4Gj0hgQLJ+AAaEAVQoI06pRYDhkoYgwIhEgKBTfZ2FhaBsYDS8VWnA8Go0FJIKeqyUTDw8EDHBpSwUUFQ4UFhcYDQYFfkoFFxEQDG8KEAUZlEeWGBIakw4FG1STiBoYBRwdBR4fHgUdHKBEBSCnIR8iIyIfIblFu6ceIyQjtcXGCbLKzAUKzrq+wMLEVa+xs7W31kOTk6nkWuOf6Ea5QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-bookmark-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBCQmJCwqLMTGxAQCBBwaHMTCxLSytERGRFRWVLy+vKyqrKSmpHR2dJSSlJyanISGhGxubIyOjKyurGxqbFxeXGRmZHx+fKSipLy6vGRiZLS2tFRSVHRydJSWlHx6fCH5BAEAAAAALAAAAAAWABYAAAWWICCOZGmewamaQrq+wUC8azHINGocOI38iIRAceDNaISFYklkGHOEhoNBfUAOhuOLEJE8HoPiRKFdESiQBqViuTDIUAsEcyAeGJmyiqC5RCwJGg0YcEh9D0V3Dxt6JwQVDRYVHBUdi40mjw0PTgwQHgeYJQQJfxUXFxAOoTkFpQ0fsRSimQkWEQ0VtI62HLt7vjl7JQYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_all-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI+hI+pyw0Bo5wR0TttUJDv0yWhRopfaYzguaKt6aasrGFYbVPxM/O7Snv9WEAfTIgMKpNGWU63emYc1GrVUAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_bottom-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIyhI+pyw3xIpwyOgOv1dvl+2lhMzIlyZ1KQLUVm8Zch4ozbcq6l7L+D4QhgsTf7Xi0FwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_fall-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI/hI+pyw3xIpwypgBRdg/v9h2eyBnZCIKYxX2oEsJruVKjHS8vk3duKZnpHKjeRSTU0HYpTcxWgRqB1KrVYC8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_horizontal-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIyhI+pyw3xIpwyOgOv1dvl+2lhMzIlyZ1KwLbuyybw7KY216Einpv377FRhhUV78igFwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_inside-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI7hI+pyw3xIgxTRvcg1oku3njbBx4liV3dqYbsSsXyLBr0Pad1iCovsmOwgjbdz9TrGHWWSeWZikoXhgIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_left-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI6hI+pyw0Rnox0ygNXdG9z43Xal30gUiYhk5LoenJQRVtti5FwE+Kx4+O9RrIda6gwDmvMi+kJjTIMBQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-border_outline-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI8hI+pyw0Bo5ww0SttcKci/ymgMTZl+Yjbt3Jn26lautX0A+OizHJkjsrper7XbkZ0ATEYDZPii0qnU3sBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_remove-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIthI+pyw3xIpwyOgOv1dvl+2lhMzIlyZ1KQLUVm8Zch4ozbcq6F7s+fgsKb4YCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_right-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI7hI+pyw3xIpzyQRdVuIZj+3nHhogOiZng+I1qoqIdRVfbWy5y1u5M7MFphB1dsDULGXO15goJjUoRhgIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_top-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIyhI+pyw0Bo5ww0SvdCdrw7oGfNnZlczIpKorc+8RwZbZgXOc2uevOqpjJhrCb8QgwFAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-border_up-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI/hI+pyw3xIpwyOgNRyPq+zTkcuIQKaV3T1pgHinmfm7AUedMa64Vw3bLJMr9TiZcSFUsnkw54q0Rl1KrVYSgAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-border_vertical-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI6hI+pyw3xIgxTRvcg1oku3njbBx4liV3dqYbsalFeJTp1iCovcjNsb9iZhMFcJwXUxTJLYuoJjR7sBQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-bottom-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRKZDRSbBxCXJTC1Mzi7Nzq9NTm9Bx2nAQCBNzu9JzG3Hy+1HzG3IzO5BRmjPz6/LTe7Dy61AyStCTC1FzC1AyGrETS3ETC1ETa5BRulAyuzBRylAw+XMTe7Gy+3CSqzAyexBTC3DR+nIS21KTW5Nzu/KzO3FzC3Pz+/ByixEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaXQIBwSCwaj8ikcnkMBAQDgjPAFAYKhsMBkVBUAYEFo+F4QLzVQEQyoVTOX/XBcsHA0+vMRbNBMwkRDhxuHX5GTlIeHh8gISIjFAEeiVRECiQlDAUmgxQjIhwiJHdFlycoKSIUFCEjGiGkRpcqCxYijxorsUezcxYsuoZJsxLAu0qXB7DCTJfHvArR0tPSSNTX1V/a20J2QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-brace-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAWABYAAAJRhI+pGbHYVHzQnUnrtXn7/gEYIJRHKRgYZraGuXLp28LcNL/Dqd4cYmJYRqegsKcY5DRIUhHYFDlQJGMuVn1ljdhqjhoiZrogKbMjFh/LHUMBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-brackets-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAWABYAAAJRhI+pyw0Bg3vxwImu0Zha2XkbaAjmYQrjh6qnCpwcB8evTGp1PKDrnzglZqTWDsg5DI5IUE1Yatpc0BrRFr2xfiljJlecXEPjDjG5iIRDCHsBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-centrejust-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIhhI+py+1vgpy0TogztlT7j3CiBJbZWJlqg4rry7jw/BoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-charset-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIIAAPwCBAQCBAQGBFxaXAwKDBQWFAAAAAAAACH5BAEAAAAALAAAAAAWABYAAANLCLrc/jDKuQK1zmKo3/YVJSpBSZYmKaTkAAwYoQwFELjvpisyaTM7H6AH+3lQMZQwExrOOiBh7/cJGokaXHGpQVaUo7B4TC6bw4AEACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-colorize-22:actions actions22 22:photo:22 22:R0lGODlhFwAWAIYAAPz+BAQCBBweHPTy7Ozq5ExKRPTu5NzStLy2lCQmJAQGBOTezNTKrLyylNTKpOzm3NzWvOzm1MTCpNzaxISuvBSGvLy+pKSehOTexISutKTa7IzS7GSarJTW9HTK7CyazBRypMzGpDw2LOTaxEyKpCSSxARGbERCROTizMS6nDx2jARajIR+bOzi1OTi1MzCnLy6lOSupNx6dGS2rJS6pMy+pOS2pNxGTKwaLDSmpHTOzES2tIyuhLSmjPyqrMw6RLSOhLzSrGyqbFSmXJSyhNTOtGTCvLzm5CyOjEQ+NPRqbOxOVKyKfMzizKzepFyuZJSqlBR6fCRmZJSKdDw6NLxqZLQiNIwyNLSejDSCRJzWnEyiVHySbBRiZDQyJMSijGS6ZHSCZJyafDRmPISKbJyifDw6LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAXABYAAAf/gACCg4SFhoYBAgGHjIQBAwQEBYwBlYiQAwYGi4UBBwcInIIJA6WRBAqdCwcMDA2pggEEDpUODwSiAAEQnwwHnI8RwBIGsLoLExQVFg4XiwEPD6IKGBjAExkaGxUcocfSgwHV1uITFR0eHyAhIroRERLAC/PVIxMkJSUgJvHH1RAKTixAgQzZhAkpVKwwwYKWrgnzFrRY4IIgBoMTRryQAGPjs4zzYsgYQdIgsgMzaNRw0CCBLgn2bNzAceMgSZITcujYwaNGj2sjcPjw8QNIECFDiEgoYuSIDiQOkoSTMAGHkiU4mAhp4uQJDyhRjOSQMiUXFQdVrOC4giWLFidbRri8QBKlyxQviIp8udKjRhYwYLKEedFAjJgvucI5cFBEgoMxkMm82PjFmCERix1wLCNmcg8viRGZ6aHZcQ8zoRtVWp16UCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-colorpicker-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBMT+xASaBASyBASCBARCBPz+/KyqrISChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARZEMhJ6wzBahvEyNvWEcMXcgJBFuApjavRhlgaz6J9u5dQDAUZ73VA+FhDQOAQQCQEQt6ymcjgREznlZatJpXdLZYq1ky137M3qS5zwl8lOR5IIDBx5TpviAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-configure-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBISChFxaXNze3NTS1Ly6vKSipNTO1Ly2vNza3Pz+/MzOzOTe5DQyNOzu7MTCxGRmZMTGxPTy9Ozm7Hx6fPTu9MzGzGxmbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAW1ICCOZGmeaEoGbBsI6joMRGEcbQwESDIrtVtAF1gwDLNaAmfKiVgLBJKgwB1KxQZrBHU0FAXmavFoQLYiB6TxFXMj5AZBwnJI2I3wcNWALyYEcgoKXxRhOHs7XxEVCwsWFgoUDRYUFwwQB25ZCxiNjo6GkwUXN2NsCxEYqhUHoQ0MEglYRQQXErcHrI55FycuB2YSmoyOBTEtB2sXuhU6XAENC2a6z9AKCwq+1tAN3E2J3ySkIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-connect_creating-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxOTi5AQGBNze3Ly6vISChNza3FxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAAR4EMhJqwzY6omD+MNGdR8YilNZnug0qGzrqrL1lnV1fyJBVB6VQEMoGH4ADGwQkxQPBwMiKGA2J8VEAnq0tgiKg5aL/C7C2gTjKCM0zowDQ8tuNQznNL7cKzjOUQsNfER+gguIg19+Pm6ChBZFDmWNi5M5FIyYFHQRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connect_established-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBKyirPz+/KymrOTi5KSipMzCzNza3OTe5Ozi7MzGzPTq9OTm5ISChMS+xFxaXNze3GReZIyCjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWLICCOZGmeaBkAQpoGg7C6JizTQT7CxPwOwFWgYPChYIXkIHC4uQKGAiKRKCyNpxxUUVViVYNFLkqtLo+DAkMMLXQPXwAy2WCTF4544FGtKuwPDhB6DnxuUmyCcXIQhV1uYoMuEAcOBxEKCHg6TzGFCJUSizuejROKOAM9OY2SnUU7nD89NCcDsLUnIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-connect_no-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBERCBAQCBPz+/MTCxOTi5Nze3OTm5Ly6vNza3ISChFxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAARiEMhJq7046827/+AVCKE0Dh9BAGdaGISAToFGFMcBU+11I4hDYseSZQiKwwKoI/QwBIYiuFDCZseGdIlYEjUNg1SpY6w2N4cUIW6cjwW1lsFwo+MqgtZuw0/ydw5vH34lBhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-contents2-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBDyGhCyCfFSWlESOjDyKjDSGhCx+fGSinGSenFyanEySjHSqpHSqrGympEySlBx2dISytHyyrCR6dKTGxHyurHSurHyytGSipCR6fARmZFSalEyWlBRubAxubBRydDyKhDSChLSytPz+/MzKzIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbFQIBwSCwaj8ikMhBQIpmCQdM5ZBIKhgNiugwkFAsCI7pNMhuOxkNBgBgEiAi3GkBLJpJHYgEpaClyREwVFhcSEhgOGQoMfgMaERtcARQBFRMYExZ6HB0FUYAekkIBHxqWFmlrC1haESAfG6MBGx+VFRgKYH0hInGRklO0ppYXCwwMWQiQHkwjgrWnFRdYZHIBJCTP0LaWGAcDW9jZ2nMAw9IWTOQkJSZMRsOV49nu8E+19PbmR7TY+1TovONH5V7Ag0QMBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-contents-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAAQCBAQ2NPwCBHSurIS2tBx2dBweHPz+/Ozm1GxiTGyqpPz6/Pz69GSqpOzaxPzy5HxuVLSmlOTazPz27PT29NzClPTexHxuXLSmjAxqbFSinPTy9KyehNy+lPTy5Pz29HxyXNzWxKSahOzexPzy7IR2ZOTWtESenPTy7KSWfIyCbKyijAQGBDyalPTu3KSSdDSOjJyOdCSGhPzu3OzizJSGdPTq1PTq3JySdMy6lAyKhOzWtOzi1OTOrJyKbMS2nJySfMS+rAwCBNzOrNTCpNzKpJSGZKyafLSifLyylIx+ZHx6ZDSChAQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAWABYAAAf/gAABAoSFhoeHAAMAiI2IAAQFjI6EAAaJkQeTjwAICYkKBQcLm5WdBwyfhgChB66bp64HCQC1lQ2irqQCAA4PowsLEBESE4wAuLIHFAAVFr+uDBcYxRm1GrmuGxwdFh4Mrh8gGCET1gDYyhsiFSMkDAsMDCUYJhvnJ9kHKCnODwwfPlBQsULCPRYAWogK9sHFiwoOPEyQh0JFPXO1YBSYwBEFghjdHkwQOYGgwQwIZRR44GHGDBogabhAsYEEihrUMAIoUMCEDRs3HODIYQHFA6MPcJA7KICFjgw7eIzo4cOfiwc/gKwIUm2SkKdDdlDt4AABDaU/iIRwwbTSUyJFOow4S3Hkx9oNDDZgXPU0h1wcSIgEGUw4ibVET5WoWMKksePHpdxmyKADAEIWly9HJtQkQJMmlAgZCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-contexthelp-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBAQChAAAACH5BAEAAAAALAAAAAAWABYAAAJQhI8Qy5F/ghBsLuOgpHHy+0hZ94HINiqWwoQrtjYpNqJ0A8Hcjbs73yPNZEHVDygTJohJWqiZe0JPM5ajtXxFMkXnklqNgsPiWzmHPatzhgIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-crop-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBMT+xASyBASCBASaBISChMTCxPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARUEMhJq704681r+EFHBcIwEKFImmfKkURhoh1cyO0rxEWZa7bezIUJ7gg04O62A22MyeeyF1XymrUSs5pZmbA61u+FLBOBhrThozq4D2cgYo6IawwRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-decrypted-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBGxqbFxaXExOTEQ+RAQCBPz+/PTy9Ozq7Nza3NTS1KSipFRSVOTi5Hx2fJSSlKyqrJyenJyWnDw6PMzKzKyurDQyNFxWXMTCxJyanHRuLHxuLGReJFxSLFROJFxWJExCHERCHBQODISChHxyLHRqNIRyNHRmLLSqbKyiZLy6fOTarPz67Pzy3OzitKymZFxSJJySTNTSnPTy3NzSpMTChLSydKyqbKSaXJySVIyGRGReLPz23NTOnMzCjHxuPLy2vKSmpOTe5LS2tLSutHxuNHRuPMS+xFxWLIR+RDw2HFRKJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SDAQIDBAUChY2EAQYHCAkKCwyOjZANDgIEAQoPjJiDAg2iggQQp5gMBwmrDBESl6MTFKuoFQSjABYRF40CGAW8BRm7hQwNxBobHB0eHx4gISIjBdiEAhYFJBslHOHSHh4hBSHlxIUmJygpKissBiwtLi8pGjDqhBoxMjMuaNSwcSMFjhw6dnjYRyrGCh4ueviw4Q5HDB0/PjAUJCBCAwMIGiiggAEIBFk/FgYLIgRkggQkhxAJkqGExkYMFnxsIGRkSQgLHhRRWUjAggQgG8AsSWRBBiP6VrYMOfKIyaBDNwLo+HHSUplOSyDRqiEHjRkretRQkcLgxayNF0wksQGQxsSKMTIq0QpgCba/gAE7whEIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-down-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRKZDRSbBxCXJTC1Mzi7Nzq9NTm9Bx2nAQCBNzu9JzG3Hy+1HzG3IzO5BRmjPz6/LTe7Dy61AyStCTC1FzC1AyGrETS3ETC1ETa5BRulAyuzBRylAw+XMTe7Gy+3CSqzAyexBTC3DR+nIS21KTW5Nzu/KzO3FzC3Pz+/ByixEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaRQIBwSCwaj8ikcnkMBAQDgjPAFAYKhsMBkVBUAYEFo+F4QLzVQEQyoVTOX/XBcsHA0+vMRbNBMwkRDhxuHX5GTlIeHh8gISIjFAEeiVRECiQlDAUmgxQjIhwiJHdFlycoKSIUFCEjGiGkRpcqCxYijxorsUezcxYsuoZJsxLAu0qXB7DCTJfHVQrMX9PU1Uh0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editclear-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAWABYAAAJBhI+py+0PYZi0WnqC2Lx7HhjaR3YhMArBUHpnuramCLLy9tY3TuP2nfPtVD3VTxY0DpNDHqo5E12mlYj1is1e7QUAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editcopy-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFPz+/DQyNISChDw6PMzKzMTGxERGRIyKjFxaXMTCvKSmpHR2dPz6/Pz29PTq3MS2rPz69MTCxFxWVHx6dJyWjNzSzPz27Pzy7Pzu5PTm3NTKvIR+fJyGfHxuZHxqXNTCtPTq5PTi1PTezNS+rExOTFRORMyylPTaxOzWxOzSvNze3NTOxMy2nMyulMyqjAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbYQIBwSCwahYGkUnk0BgTQ6IAQaBKfUWhBYKhaAU+CgXAQIAyChLeJzSIQhcH6GFaM0QtGY5kstqEODw8QEQELAhJTc08KBBMEFBUWDRcBE1pca20SGBkaEBscAY5maFRIAgoLHRQRHh8gIQFlZnByqA8ZGSIQIyQjJQEmYgJ5p2ACrK4gJx4gKIZZAgdeAQ4ZI9kjKSor0AwEjeAs1S0cHAslLi4vMDDRWeRIfEsxMeET4ATyVoYLC5fizXEiAR84BeMG+pEm8EsAFhAjSlR4hR6fLxiF0AkCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-editcut-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBAwCBPz+/OTi5JyanOzq7DQyNGxqbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARbEMhJq704gxBE0Bf3cZo4kRJqBQNRfBucyudgvJS6VaxLzyMa6/bLiWA9HOg4VIIkL5vzuRkcpkvRIIAorphJLzBW84WEuRZWp6uaT7J2Sh1Hit3OY/ZO7WvsEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editdelete-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAASC/FRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanPz+/Ozu7BQSFCwqLDw+POTi5PTu7MzKxIR+fCQmJPz6/Oze1NTGvPz69Pzy7Pz29LyyrPy+vPyupPTm1BQWFIQCBPwCBMS6rPzSzNTOxPTi1NS+rPTezNzOxPTizOzWxMy2pOzaxMy2nPTaxOzOtMyynOzSvMyqjPx+fOzGpMSihPTq3OzKrOTCpNzKxNTCtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf8gACCAQIDBAUGBwgJCgsLgpCRAAwNlZYODxALEY+SkAMNEqKjEw0UD5yegqCjrRMVEqidkgWhraMWF7GptLa3EgEWFRSOnhW+vxgZEBqzkBvItxwdHryRCNGjHyAhHSLOgtgSI60c2yQjJd+eJqEnKK0hJCgnJSngAO0SF+8qEvL0VrBogW+BLX4oVKgIyMIFQU8KfDV4R+8FDBcxZBREthAFiRIsOsygsVEUh4Un3pGoUcPGjZInK65QicPlxg8oX5RwqNJGjo0hdJwQ6EIkjRM6dvDYCKIHSBc1Ztjw4eOH0oIrsgIJEqSFDBo0cuTgsdSTo7No0xYTZCcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edit-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBISGhISChHx+fHx6fHR2dGxqbGxubGRmZGRiZFxeXFxaXFRSVIxSLPyuXMzKzMzKxMTCtExOTPzqrPz+/NTS1MS+tOSaVPyWNPz6/IxeNPzavPyKBNTW1PyCBPyGBJxmNPzOpLx6PNRqBMSCRNySTPyCDPSGBMxiBKROBHRydPSylOyydMxmBJxKBAwODPS2lPTq3OyabJxGBPTy5PTGrOyOXPR+DPz69PzmzPzevNxuPORqLMReFPzy7MyCXKxiNIRKHBQWFNTOxPzixJRaPFxONHRqVPz27PTy7PzStCwqJDQyLJSGdIx6ZPz29PTu5HRmTLSKbMSGZHROPFxKPJSKfJyShKyehMyuhDQmHEQuJJyOfLSijMSynMS6pLSefDQyNHx2bKSahLyqhLymhOzi1FRGNIR+bNzKtOTOtOTKrOTKpLyedAQCBFRWVPTq5NzOvLyunLSmlNTCrOTOrNzGrLyidMS+rLyynKyijLymjLyqjAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gAAAAQECAwQFBQYHBggJCgsLDAwADQ6CAQ8QD5ydEJ+gERKWE4ICDxSpqhWqqhYNFxMYphCtqaytGRoXGxgcggSoth25u70eH8APFR0VzMzNziAXIRjIvwAFwq3EqSLUGB/iI4LathS4JCXVJh8nKCmCKrXDFCss1eIfLS4v8ssdmgWsAGNDDBnt3s3wJ+jAtlUhaNSwccNEi4WCBBl4SAHHihw6ZOzg0QNjRgAG6KXK4CNEjBU/gDQI8kLISQAIADobAoMIzCINjLw4YvNkAno4kCRRUuNHESNLmDRxUjSjAlRPfECJImUKlSpMrFzBIqWqoKtJaWSJomULAy5XXrp4+QKGYcYFoCBEWRImi5gmY7CQyVLGriAGD2jEMHMmCxc0Xb6kUbOGTRs3N988gLM4jpw5Y+iwqcOGjZ07mE8yiGABz5c8c/Ts4cOnDJkybS7fdMO7t+/fvDMaCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editpaste-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQWFDw6FHRuFGRaBFxSBAQCBAQKBCQiBIx6HPz6/NTOfKyiXDQuFOTm5Pz+/Ozu7PTq5Pz63PTyxNTOjKSeRExGLMTGxMzKzNTS1NTW1Dw2NKSmpKyqrKSipJyanNzWlLy6ZLSuVIx6FISChIyKhJSSlCQiJLS2tDw6NDQyNCQiFCQmHBQSDGRiZHRydGxubHx6dGxqbFxeXGRmZFxaXCwuLOzq7KyurHx+fDwmFEQuFCweFCQWDBQODBwaHBweHKSinJSWlOTi5JyepHR2dDw6PBQSFNze3ERGRIyKjIyOjISGhPz29Pzy7MS2rMzOzFRWVHx2dHxybDQiFPz27Pzu5PTq3PTm1NTCtJyGdHxuZHxqXPzq3PTaxNS6pFxWVFRKRNS2nPTi1PTStNSulNzOxNSynMymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwABAgMEBYSLggaOjgcICQoLDA2Pj4MGDg8QEZ4FDxITFBUWFxcYGRobjQ8cHR4fCQ8gCyEiFSMWJCUkJieNEB4dKB4pKissK8wrLS4vMDHBAAYQHx8dFx0fJDIzNDU0M+IyHzaNNyg43Ng5Ojs7Ojw9Pj9AMkCNDiZB/h9CSOx4QLCgihItqBkYgqIDESElitAYWJCgkQcXjjRCgi1Ihw4BB5LAQOLCgyQYHihpUU3DBw5ElpAgAYNixSRJjKjQaECDCRPZPDB5IbIGSQwKLnh4wbInLA4kmJB4oaPiAwVNnER40hRK1BIAaVatUZJEFCkmpmjgCeWDCalFe4q4oFKwSRUrEa5gycLzwq8lUnPQ4PEgSpYcUZ5o2cIlS1O/JHLEDdfjQZMIVrpgweLFy5e+M6WSmBGlxYMYYBRzCaOFi5imHWBIfOEiShLTVjaP6eyFTBmN1TA5OvLDjJksWb58OVMGDRqWjAYdmU79SIvpjqJr104nEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editshred-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBFRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanOze1Pz+/Ozu7BQSFCwqLDw+POTi5MzKxPTu7LyyrIR+fCQmJPz6/Pz69Pzy7Pz29OzaxPTu5PTq3PTm3My6pPzu5PTq5NS+rPTm1PTi1PTezOzWxPz27MyynOzSvMyulOzOtOzKrMymhOzGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbpQIAwIBgMCAXDAZFQLBbCqJTRqFobjgdkEYFKowPJZEyeUBqVR/crHDTKZYplovZKCW84+YKZZNZSBXl6EwEEBhVPXxZihGMaGRscdkIdg4QeEnVfCH2OHyAhIhuUAAiXZSEhIyQlJqWnjiEnKCWupRWoYyEgJK0SKaUKjam0JCorLMFfC6iqx8giLa/MGAsT1wsuCyULKwssC9RSzdkfCyALKuALLQsvpeXYIQso3gsiCzALMfENC+dGcMNHUAY/f+jq3ctncMYCGggFrsvHcEGNh/EyPFmg8cmrJxAVkVO0EUDJklHoBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-edittrash-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBERGRExOTDQyNISChBQSFCQiJCwuLPT29Nze3GxqbDw6PGxubHR2dJyanLSytJSWlJSSlOzq7Pz6/Nza3Ly6vFRWVBQWFIyKjMTCxHx6fIyOjLS2tOTi5PTy9OTm5Hx+fNTW1KyurKSmpJyenExKTMzKzKSipFxeXCwqLMzOzKyqrMTGxLy+vHRydBwaHNTS1DQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb8QIBwSCwaj8KAMoA8LgUDQsFwQByay4RiwWg4GA9IRGk0SCYJSsUCsVwwGQ1EsmESD5xOp+L5gDwhBRIZDhcDdkMGDgEiIxAkJQ8Ok5MmAohDAQ1xJxUlKCUlEg0pKpiZJRoLCxmtCw1eURhOcR4rbQ8cGRwLAwgGtBYTDywtGRKjvQTARgEZLhMcKC0OrQMvAirMRc7CHCTU1g2+20TO0NIn1RwDCya/wdHT1Rnt5LToKOq79trx0tR02YPX7Jm8fRxMOIhSLhOJE/LCJSTlr5kFEBQsWDiR4UGGBgsuHDg1BEYAfTE6oEBR4AIBAiS5yWBAAAGBAyaPGAgCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-encrypted-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBHRudFxaXExGTERCRAwGDGxubPz+/Pz2/Ozm7Nza3NTS1KympFRSVHR2dNTO1JSSlKyqrKSipDQyNMTGxDw+PLSutKymrMTCxAQCBHRqLBQODJyanDQuFFxSJFRSJFRGJERCHExCHISChHxyLEQ6HGRaJExKHLSmbLy2fOzitPz23KSiZHxuNHxyNJSOTNTOnMTCjLSudKSaXJSKRJyOTOTetNzWpHxuPOTi5MzKzLS2tFxWXOzq7Ly6vOTe5Ix+RLSqdNzSpLyydKyqbKyiZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgMEBQKEjI0GBwgJCgsMDY2XjwkOAgQBDxCLl4QNCaGCBBGWooINCAqqrBKgqwATFKaDFRYVtBMXsIMNGBm0GRADjQIJxKIaGxwdHh8gISIhGyMZzIwkGholJiYfJiAfJyEZISDbg90oKCkqKwcHKyooLC0f7IIuLzD2YMSQgW8GDRri+AFoUMOGvRsxUhSsQQPHvmQSchyQtEAHhh0WJHDQcJERjwsKDvRI0BGDjwgicXhQyCOjSgUKPO6AObIkIQESfmxk6REDT4s0bfaYpDNkT4VAha5s+TLmzEYtatwIOHAiDZIKNQAJYk9IjCFEisyoocFEB4UACtBpm0t3LiEsgQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-eraser-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBMTC/AQChAQCBISC/PzCxPz+/MQCBIQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARfEMhJKwhi2F0DIRnHeR+oiRRZmqikrmD7wgI6r+EI4+d2l7lNwWDYsTiFw4FI61mSymXxE3xGo8xqBXpVGrQUbveAcG7H0bKowEar12wx2SyMp+lI+7s1ie/5fX8tBhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-exec-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAwKDAwKBCQiHNze3AQCBBwWFDw6NPTy9PTy/Dw2NKyytOTi3LS2tMTKzMzOxLy+tLy+vBQODNze5NTS1JyalIyCbIx6VIRyVISGfJyelOTq7EQ+NMTGxKyurGxeRLyKPOSmROSuVOy2XOSiTLzCzNTOzDw+NCwqLHxuVOy6bPzGfOSuXNTW1LSyrMSWRNymTOSmTKSCTPTGjPzSnPzWnMyaVBQSDMTCxPz+/KyahNSeRHxeLJRyTPzmtPzarOy6fJyajNza1Ly6vLyulFRCJPzirPTOlMS2pNTSzMTCvJyenBQWFNzKtPz6vPzyvPzqtOzGlOTe1AwGBFxWTLy6tPTm1PzSpPzutPz2xPTSnOTSxOy2dPzapPzerOzm5IR+dPzu5Pzu1PzqxPzy5Pz+9GRiXGxuZKympHR2bOTm5Pz6/MzSzBwaFJSSjCQmHPz2/AwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeEAQKIjIIDBAQDjYMFBoMHCAkKgwYFhwULDAUKCg0ODxCkBQgRnoUSExMUDxUWFxgZGpAbFIuGHB0eHyAhIiMkIB8lJieIKCUpJCTGIyorLCktKIUDpC4YLzAxIjIyMzQ1NhgdpJI3ODktJTowOyM8Ejc9Pj9AQUIEclAocCMIBQhDiOwgoaKIoCI+jBxBkkSJkCWemIyq0GSHCBVHihRx8gRKFCmpKhGaQqWKFYZXsGR5kkXLFgRUXBUqkCGCFS5AjnTx0sXKlyA6CRVgAAHMAilhxIwhU6ZFkBY5kgKYUoXBAzMKzixZ4AJNGgVm1KxhM0WpmQpUMtooaOPGxAM3Nw60oYLGjNYCbzYJOgAnRzNBJ95oPYQCgpJtkwzFoULlRuRPiy9fNhAIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-exit-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBHR2dDQyNCH5BAEAAAAALAAAAAAWABYAAAJOhI+py90RnIMyRUOxhDfzJkACdoXBuEDDkQFDi5go0MrKx16kns80b7qdELCgBYaEGWwL5nG1ePFiKp9A6kuYRNuho8vxVrrZivmMRtMLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-fileclose-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBERGRERCRDw6PCwqLExOTFRWVHRydGxqbGRiZCQiJISChIyKjHx6fDQyNBwaHJSWlKSipBQWFJyanPz+/JSSlCQmJAwKDCwuLBweHBQSFGxubExKTISGhDQ2NFxeXFRSVDw+PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbZQIBwSCwaj8jkMSAYDAgEJbFgOBwQCUOAoJAaFgvGonHIBhyP5BcSgUAYDWxggD4WFmx3e3HQngkSRgYMEBMUFG4MCId0BGlEAQeEhocVDYcUdBYKF0QCB3gRlJgUAQEYBBkaRAMbDZMMpAYcT46rQwMJrgsdC6QcfwoPnUMOBgkIV6SHHg6bw0QEAQYfBpggBZjPGsRD0gEchxwCIR6HChnQRQ8DIU4DTR4Em+ncRw8O+fmoXPXdRg+gQLFgIYM/KRIkoDP4QMKFf0o0aBAh4qGUixgzCrETBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-filefind-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQSFJyanLS6vLzCxISChNTe3OTu9Oz6/Nzy9Nzy/NTy/OT2/Nzi5Mzu9Lzq9KTe7LTq9PT+/Pz+/Nz2/Mzu/Kzm9Jza5HzK1LTi9PTu9IzW5ITO3FxaXNT2/KTi7Iza7GzC1LzW3FRSVMzO1MTq7HTS3Fy6zFS2vKzm7Lze5MTGzHzS5FTG1Ey2xEyyvJze7JzW3ITa5FTK3EymrGS+zFxWXKymrMzi7ESirEyqvLSyrKze7MzOzMTCxKSepAz+/NzW3MzKzBwWHLzS3ERCRAzi3KyurNze3MzGzLy2vLSutCQiJAyytHRydOTe5MTGxLy6tLyqpKyelJSCdOze3NS+tLyupLSmnKSOhCwuLPzy9Pzu7Oze1OzazOTOvMyihOTi5PTm3Pzi1PTazPTWxOzOtNSunDQyNPzy7Pzu5OzKrNzSzNzGvNS6rMyynMymjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwGFhYOIiYQBAgMEAwKHiokBBQYHCAkKCwwFAZOEBQ0IDAsODxARCZ6gAAEGEhMSFBUWFxgZCJ+TjBoMEpkRERscGBGRih0BBAgeFBQOER8gISEfIruIIwEkCCUVwhcgJicoKSrZg9srCRkRGdMsLS4vMNiK2wIKMRsbMiwzXtCocSydIBs3AuCIwIFDiBMucugAoWvSiB2VNPDg0ELHwA0MkCXr4aNSggg8NoDIQOFHgBtAkgURMiDAEAFEVBCJFKCIkSMGOyDRkETJEkOFmABoUsRJQkQdnkzQACWKlBtTplBR6qopxkFRJ0ytYuWKFCxZtBBq+hRA2AlbRrh08fLlCxi1a51g+dQhDFwuYsaQKWPmDBpKXgNETaNGjJgyhNfcVdTTiWI2XpK0cePmzRk4YA5T5otGixY0qFOXbgXAQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filenew-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBExOTERCRDw6PCwuLBwaHAwODAQCBOze1NTW1OTi5Nze3MTGxLS2tJyanPz+/Ozu7OTi3BQSFCwqLDw+PDQyNFRSVPTu7MzKxLyyrIR+fCQmJPz6/NTOxPz69Pzy7PTu5Pz29Pzu5PTq5PTm1My6pBQWFPTq3PTm3NS+rAwKDPTi1PTezOzWxMy2pPz27PTazOzSvMyynOzaxOzOtPTaxOzKrMyqjOzGpMymhPTizOTCpNzSzNTGvMymjMSihCH5BAEAAAAALAAAAAAWABYAAAboQIBwSCwaiYGAYEAgFAqGg/Q4DCASCsTiymgcHAcqQLB4mM+QiIQBppLPcMjkwQ4bB2X4maKgt4sVCHpnFhQTElNFE3mDDxcYGRp2RBuMgxwIHX9EBZZwHh8gCBmTQ52NISEiIyQlpUImng8hHyInKAgprwAqgnC0IKwrLLpGB4wctLYkwy0uuwd9Z8AnJywsLcVFx2YcL7UnJCwwLTEy0GXJoSgrCCwzNDTnxgjeH9UrKzXwNDY36LRGhEOwLx4NHDmgJbh3QoeOgv127EhojEeHDj16pEhRQoZHHzl+QJNCsqTJSXaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileopen-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQWDCwaDDwmFPSubPzGhPzCfPy2dOSmZPzKlPzSnPzOlPzKjBQODPzChPzWnPy2bPSmXPyuZOyeXIRSLEQuFEwyHEQqFDQiFCweDKRuPFRSTPT29PTy9Ozq7OTi3Nze3NTW1MzOzMTGxMTCxLy6tLSytKyurDQyNMzKxOTm5OTi5Nza1NTS1MTCvLS2tLSyrKSmpJyenJSWlIyKjHx+fFxeXBwaHKxuPMzKzLy6vIyOjHx6fDw6NPy6dGxubLy+vISChCQmJNza3KyqrBQSFLR2RKSinJyanGxqZAwGBJSSlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeDAYqKiIeLj4wBjQCMhY+NkoiLk5qbhQIDoJyGBAUGBwgEo4MECQoLDA2pDrS1tKQPEAwHERITE77AvxKqhAQNDA8UFRYXFs8YBAQZGqGPxw0RGxwdHR4eHyAhIiMkJSYnKCgpBAYPEhcqHyssLS4kLzAxMjM0NTY3cBA4UCAHBw8gVnhgEcKFjhc7UPDj0cMHAAI/KFgY4YLFio/jRpTYsW8GDyCSCEQw2DChOHIqgsCQSEPIEEEEJFhAoUNECCJEyOk4d6KIyRtGcB7hIJKjixEjHu4oimSGEIs4d8IIUoKECnNB0ElMwkNJJgBLlJBAcQKGiR07KGAURVGViY0mhIwwSTKjr99+THjUoIg0r48hTRIrRtxkiOMhDgrZCQQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-fileprint-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxaXDQyNFxSTPTizOzi1FxORDw2NExKLPTi1Pzy9Pz6/FRWVPz29Pz2/PTy7PTu9OzezPzu5OzavAQCBPzy7PTm3OzazOzKrPTu5FxSRERCRGReXPTq5Pzu7ExGTMS+xKSmpOTKpPTq3JSCDNzSfHRydLyadOzCjOzOtOzSvLyyTMTCxKSipGRiZFROLPz+/KyurJyenJyWnGxmbLSabOzClOzm7LSutJSWlJSSlJyanGxqbNze3OTm5IyGjNTO1Nza3NzW3OTe5IyKjHx6fMzGzMTGxMzOzNTW1IR+hISGhKymrLy6vLSytERGRGxubKyqrLy2vLS2tDQ2NEQ+RASKBAT+BFxeXHRudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAgOEiYqEAgQFBgcGi5MICQoLmAQDh5OEDA2YCw4ODxARApKUCaGYEAsSCRMUnQysCwoVEhYXGLOLCBCgDqK5GQUXGooCAhscBB0euBUZEAUJvQgIgx8gIR8iCSPiHuIFEREDJCXaANwhJhsnKCnWERcRKiopFCvsBywhQrRwQWGAPAz5EhpQ9wIABRgKYsiYMTEEDQocatiwkUIEP18fbkCAAcMBjhwzdOyQwYNCgBMfKJSgMItBjxs+btwgCSGGjhw/ZoRgQKGZCRMUPgABEgSIkCE3SZok8qNqkR85NtDUEcPIkaVAkCR5SrJBDCVKlmzQ6pCCiRlMTJo4YUH3K5AeMBYYWctW0BOaUH60cBJFypQmII6wyEpFQBVFMSm4UAI3hJUrOGh8oOJrklYKWIromJGDR99Ogz5j4ZGlM+pEnwmBCwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filesave-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBGxqbAQCBLy+vERCRExKTHRydIyKjMTCxFxaXGRiZFRSVFRWVPz6/Nze3Nzm5Pz+/JyanDw+PExOTHR2dMTGxBQWFLSytHx+fISChOzy9Ly6vAQGBJSWlMzKzAwODJSSlHx6fIyOjOTi5DQ2NISGhGxubCwuLOzq7ERGRFxeXNTW1CwqLPT29Dw6PGRmZKSmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBQGBAMj8ikUDAgFAzKKCBwQCQUCcICKh0SEAhGw5EIZAmBrgCxeDQgcDJWyz0GIggJfL+XGwQJRxNgC3yGDwwUFUZDFhdthnwMGAZNQwEZFwQakXANBBQbHIIdERIBnRAOiR4ERx8gsSEMBBmGCyEGG3YGBwcgIr8UCwQHECOgG4xCtRkEJAvBJRklJgkSFBQeJ68hJiEoESkFKiEZIbkGARsLlwEGExENGhorGSkpFAYm66NDLAECpGiBYsUIFA8wLHBBQMWLVkdUCFCwaYVFBOymkVCgYEMgOykEpICBccMBAhhELFigTEqAAgIIwCiQ4eRKDyS6EAlJIAI0EpaudF4iIKDAAn9CkRT5eMROEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fill-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/AQCBMT+xASCBMQCBASaBPyChASyBATCBPwCBARmBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAASCEMhJq704axB2DkLnVeAwiCNHDMWZcsbaul5ZyCaKBcZwFDcgDRNbHX7AmW4SMx2MSOFQQlitEAhosrVcDQQE7NMXzVGqA6xAgCUckabQpJoIYBFsxBspUKBiHQEHaoNvBQJTgBIBdnh5B4hLihONeJBTc0uMaphMS4uRGQYfny9EEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-filter-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBAwKDMzKzMTGxNTS1MzOzAQGBLS2tLy+vKyqrLSytLy6vMTCxBQWFKyurCQmJBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAV7ICCOZGmeaHoGbKuOAjsQhVG764EgyT7YhaCBVQogFMhFImEABoUBknFxRDAazac2Kg00djystkA0sQ4BgzgYK6+Ch/bBseOmAmMD4gF5ifBCDwoRfiOABgyEhYYFCA6LUo19kH+Nj5QAaQh2kHibmJkFBJydpKCnfnYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-find-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQSFJSWlFxaXJyanKy2tLzCxDw+PHyChNTa3Nzq7Nz29NTy9Mzu9OT29Nzi5Oz6/Mzy9Kzi7Jze5Lze5Nzy9JyenIyKjHR2dMTu9Kzm7JzW3ITW3ISChGxubERGROz+/Lzq9IzW5HzK1LTm7FRSVHTS3GS+zLTS1DQ2NMzOzMTq7Lzq7ITW5FS2vMTi5ExOTKTm7EzCzEy2vEyutJTa5FTK1ESirGy+zMzi5ESerESmtITa5OTy9KTe5KyqrAz+/Azi3ASutERCRExKTFRWVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCggGFhYOIAAIDiYUEBQYFAoeJAweKhAgJCgsLDA0OCAGJg4wBCA8QDhENEhMUFaKDFhcYgwEJCxAQDBkaGxwSFaMAFh0eAx8AAQIKECAODCEaIiMjJJMAtQMlygEGEBkVva4mJycTKKMYJd0pyyoOKyssGhMtIycuGi/EMB/vlhmoQEFDjHsmZMygUUMdqWUCGgCbYMKEjRk3cEjI9jBADg3Wzs3QsYOHA2IdO1SQkI/GjRMtFhBA2RFBDwk+OASrMPMHkIe3AhBA8QLFzAAHgvyg2dEQMSEHPCwltQgooSFSmVpSxKjjh6wPtwINgHVqsVpWESEFeywZ17RkED2s40YEgFirlIq4SwvUQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-finish-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBBxCXDR+nIS21Aw+XJTC1Nzu/KzO3Pz+/Nzq9Pz6/MTe7KTW5FzC1Nzu9CRKZMzi7IzK3Lzi7LTe7HzG3Gy+3AyuzAyexFzC3DRSbHy+1Dy61CSqzAySvAyStLze7IzO5AyGrEze7BRmjCTC1ETS3ETa5BTC3Bx2nAyWvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAakQIBwSCwaj8hkMqBsBgTN5IAAJQqqykCBasUmDQcEV3gtBs7oATihGJeJgcOCQWc0HA8Ig/seRiQTFAsVFhcYGRp6VH1CGwscHQ8dGB4fIBkPIWKMAAMLIiAjIJcgH5gkGSWcARIiJicoJikpHikoHqqrKiW8JSogKymoqgCrV8cCARgkuFWcRwYeqVjPRgEExEPVRQbZ2l5IBuBRQ0zk5+hRBkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder_new-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBNzaTPT2FISCBCQaDPz+BExKBDwmFPSubPzChPzCfPy2dPz6BMzOTAQCBOSmZPzKlPzSnPzOlPzKjBQODPz+rPz+3PzWnPyuZPSmXNyaXPTyhISCLIRSLEQuFEwyHPy2bKRuPFRSTPT29PTy9Ozq7Pz+xJyanDQyNPzGhMzKzOTi3Nza3OTiVBQWFDwqFKxuPOTi5JSSjISChHR2dGRmZFxeXPS2dNTSzNTS1OTm5KSipLS2tLSytKyqpIyKhGRiZNze3NTW1MTGxMTCvLy6tIyKjCQmJMTCxMzOzMzKxJyenHx6fLR2RLy6vJSSlHx+fDw6NLy+vIyOjAwGBGxqZKyurCwuLBQSFJSWlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLjI2MAY6HAgOHBJYEhJCDBQaDmgcICQoLB4MGDA0OAQUBDg2cAAcPEBESE6QUuQasFRYVq5SxCRcSCggYGRjIGgYbFs8bHIMHExIJGR0eHx7cB83PFhsDDuTUEyAhIiMjJCQluwEmvsAnKAcp1x4qKyUrLLupWrByxcnFiwQIYIggEaNEiRgBZMyYQaNADRs2REA6cCODBxw5+OnQgWMHjx4+BND4MQOIg1gI0gUREkTHiplDhhApEoCGkRlHBL3I8MEHEhz+WAhJogTJySVMfthwIehAExE5jubAkYQpESc8fOx4AiXKNA8+ekhBgqSpzh5hPHcsmVLjpSAqVZBY6VGkiJMiPQKLnTvjCiEsWU4o3nGC8YksMmT8YCmC6iAXKLRc2cz5yGYtR0JjKWQgEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-forward-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBBxCXDR+nIS21Aw+XJTC1Nzu/KzO3Pz+/Nzq9Pz6/MTe7KTW5FzC1Nzu9CRKZMzi7IzK3Lzi7LTe7HzG3Gy+3AyuzAyexFzC3DRSbHy+1Dy61CSqzAySvAyStLze7IzO5AyGrETa5ByixBRmjCTC1ETS3BTC3Bx2nAyWvEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaYQIBwSCwaj8hkMqBsBgTN5IAAjRoDBaq1aDggtMuAWDzoJhTgY+CwYLgZDccDwkgXI5IJZVGxXDAZGnR2QxsLHB0PHRgeHyAZDyFfVUQDCyIgIyCPIB+QJCUmlEMBEiInKCQnKSkeKSQeomoqJrUmKiArKSwZsmoCwMEBGCyxo1EGHr3HUQEEvltCBtDRAAbMW0zV29xDBkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-frac-22:actions actions22 22:photo:22 22:R0lGODlhFwAWAIIAAPwCBAQCBAwODAwKDAQGBIQChAAAAAAAACH5BAEAAAAALAAAAAAXABYAAANICLrc/iwEJSEUQA45LcOKMHWeU5XWiUYZsZClOIjj+naqrS9F7/9A326YCYBypREOpMPBVifjkBRw7SpIG+eJIg2IWC5UikoAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-frameprint-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxaXDQyNFxSTPTizOzi1FxORDw2NExKLPTi1Pzy9Pz6/FRWVPz29Pz2/PTu9PTu5OzezPzu5OzavAQCBPzy7PTm3OzazOzOtPTu7ERCRGReXPzu7PTq5OzKrExGTMS+xKSmpOTKpPTq3JSCDNzSfHRydLyadOzCjOzSvLyyTMTCxKSipGxmbOzClFROLPz+/LSutJSWlJyWnOzm7JSSlJyenOTe5OTi5MzKzASKBAT+BNzW3OTm5KyurMzGzMTGxMzOzNTW1KyqrLy2vERGRGxubIyGjLSytGRiZISChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAgOEiYqEAgQFBgcGi5MICQoLmAQDh5OEDA2YCw4LDxARApKUCaGYDwsSCRMUnQysCxUKEhYXGLOLCBCgow4VEhkFF6mMAhobBRAcChUVGR0FCR4UCAiDHyAhHyIJCRAjHOUJEREDJCXcAN4hJhonKBjXESn5Kdkq7wcrQoRg0YLCgBMuRFxIwTCFgXYvAFCA0SCGjBkYQxQMUE8EBhEUVPj6QOMBDBgLLM6oYYMFhYkvYcSkwOAGDho3TyqIUaPGyZ9AKXzIoWMHDx44bvQ4+WAi0KA1fPwAEiTIjyBCkDp9KlMiBRMzhhAhsqLsD64/fQEo8tLIERZIH8Ru5arow8skSmTMDdpJQ0y0XTsJ2gtU8GCZMBMbCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-funct-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI+hI+py+0PIwhUohpMXfl6103h1nTUNproEU6am62v1pLsPX/siO9Jiou9TD2XyHfMGUs65aVmiUqn1CrCUAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-gear-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFCQiJERGRBwaHFxeXHx+fDw+PGRmZExOTGxubKSipDQyNHx6fIyKjJSSlJyanISGhISChLS2tIyOjHR2dAwKDAQGBJyenAQCBCwqLLy+vKyqrAwODMTGxKyurFRWVLSytLy6vMTCxMzOzGRiZNTW1CwuLMzKzFxaXJSWlOTm5Nze3Ozu7OTi5Ozq7GxqbDw6PHRydAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBwSBwGBMVkMjAgFAwHBFJpPB4SiQJCsWAQqEJB4prdNhQNx7QYIFwLD0ikQZdMHgelOPGYULQVDg4QEAVfRAEBBwUTEE0WFwcYhAuNF0QDBQULDwwZGUIaEAuVGxgBRAIFEhwHHUQMCxwTHAVrAAwFFRwKFkQZsxseDqBDGXMSHwfFQiAhIiMeJApEBwcOcahDJcLSJCYcGkQKcRAnQhkF0SgmEykHXkObox8q1iEjKN8rENqYD7MmeBCmzwSLFS1I3AqzYIPDESS+sWCxgQMLEgOSJKjozeAKFyskCDigQFwSBhJMjDDhAlyLFyVA+dIzAUUKEi0eaNhAIg8YGiEMenkwASNDDBkLqRQAEEAkup9KDkEFgC4IACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-gohome-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQiJNze3ERCROTi5MzGzLy6vDw6PKyqrKyurBQSFGRiZGxqbGRmZISChEQ+RExKTExOTHRydDQyNOTe5FROVLSurCwqLMTCxPT29Pz6/LSutFxeXLyytLSytPz+/JSWlKympPTq7KSipNzW3BwaHHx6fKx2VJRWNHQmBFweDOzq7Ly+vNTW1JxWNLSajPTe1Ny6pKxWJNTS1IyOjJRmbPTi3OzKrNSSXMSGVHQiBHx+fJSSlPzy9IxOVOzWxOSyjNSCPLxeDJyWnIRGTOTGtMxmDLRWBHwqBIxGTLRSDDQuNNSunKxKBGwyNMSafMxqHMReDKRGDPTu9LxuPLxaDJQ+DIR+hGQqNIQyBGQiBNTO1EQKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAYSIiYQCAwQCiokEhwACBQYHBAiQhAiHlQYJCgkEC5uCkp8MDQ4NDwylmwgQlgQRERIEBBOkmxQVBgQWFwUFFxEEDLyJGAUZtQoFGhsFHLYdyoOVHsEf0SAbIAUex8mwlAUhtSIFG+3uIyTWvAIGJMEkJe76GyXbEeWUBJg4USKaBhQpVKzYoIFFiwYUBBJa8MAFCw0vYMSQMWOhBhoTKCQSUKMEiw02buDIoWOHBg0GeIhEFKAHDR8afgAJImSIioYliMws1MPkhiJGchxBkmTDCBo1hg4KQMTiBiUyhBxZ8pNFiR5MEtU0WqSJVidJNDyNKraHC5xPNKBEkTLlJ5WvUgWNvfikyhArV34+7ZEXQAAsB2iUyHLlihYtW0pwOYAFgyJDmDNr7jIIWiAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-goto-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBBQSDAwODAQCBCwiHDQuJExCNFRCNAwGBDwuJEw+NFxKPBQODEQ6LFxOPEw6NCwmHDQmJBwaFCQaFEQ2LCQeFDwyJBwWFDwyLDQqJAwKBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWSICCOJBkEQqmWA1EYR4Gsq5Aoy2EYKU0yDcPCkSP4SgShw2FoDI6jQeNxYD6MUBFCEXxAelkRgxCRhEWQiW/wXE2CataAUmiXKo+Fwg6YWxQWfCQEAxckUgoYDRSCR4gKB4ZnFVwUCgUMZ30KCRQUhJpzBRQQjUcSnmyaM32mPgQNmZpRBwmSsxAZBBqzUa4iBiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-help-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBCQuNBwiJAwiLAwaJAwSHAwSFIy+3ERynCw2PCQuPAwmPCxOZCxWdJzG3FSazBwmNAQKDAQGBDRmhBQyTDxujDR2rIy21AwWJDyGxCxmjAwmNDRihAQOFDxmhCxunBQWFAwaLCRahDR6rESGvDQ2PCRWdDRunDSGvCRSdAwWHCwuLDSOzHSmxDyKxBxCZBwqNHSu1DyOzAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAahQIBwCAgIBAPCoGAgOoeBAyKhWCwYDUf0CX1AIhLiJEGpBLiAAaRxdgYsl7Ybk8igBZoN5xmAdDxoanp8HyANISF8EBsiXBMjJBolBEQmGHFoRScbKHIKDykqK5lFAZRCnyknTaROLA8tq61OChgtKqyzQgEYEJi6UC4vI3LAASkbMBPARAEBdszR0sACEaPSMTIQM8W6KzNl3bo0NOJDdEEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-int-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIIAAPwCBIQChAQCBBwaHAQGBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAANJCLrc/iDAuYKlU0r8NHfXB24iEyrCIAjAynakQLQuDS+vrTcnI1M9HyaIykFOKwUhZ6zEWC5oU9GrRY+kkqdUiXCdWW74SzYkAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-leftjust-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIihI+py+1vgpy0Tohzs1T7z3CiBJbQWJnqg4rre7jwTBtGAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-locationbar_erase-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBPz+/AAAACH5BAEAAAAALAAAAAAWABYAAAJChI+py+0PX5i0VmbzVboHPgmCJVoJJY5haR5VGsCa+6ZqZ2Sy95E2n0OVdi2A8EacIIS+YpC3WUIpi6kygs1qsYYCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-lock-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBHRudFxaXExGTERCRAwGDGxubPz+/Pz2/Ozm7Nza3NTS1KympFRSVHR2dNTO1JSSlKyqrKSipDQyNMTGxDw+PLSutKymrMTCxAQCBHRqLBQODJyanDQuFFxSJFRSJFRGJERCHExCHISChHxyLEQ6HGRaJExKHLSmbLy2fOzitPz23KSiZHxuNHxyNJSOTNTOnMTCjLSudKSaXJSKRJyOTOTetNzWpHxuPOTi5MzKzLS2tFxWXOzq7Ly6vOTe5Ix+RLSqdNzSpLyydKyqbKyiZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgMEBQKEjI0GBwgJCgsMDY2XjwkOAgQBDxCLl4QNCaGCBBGWooINCAqqrBKgqwATFKaDFRYVtBMXsIMNGBm0GRADjQIJxKIaGxwdHh8gISIhGyMZzIwkGholJiYfJiAfJyEZISDbg90oKCkqKwcHKyooLC0f7IIuLzD2YMSQgW8GDRri+AFoUMOGvRsxUhSsQQPHvmQSchyQtEAHhh0WJHDQcJERjwsKDvRI0BGDjwgicXhQyCOjSgUKPO6AObIkIQESfmxk6REDT4s0bfaYpDNkT4VAha5s+TLmzEYtatwIOHAiDZIKNQAJYk9IjCFEisyoocFEB4UACtBpm0t3LiF4gQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-lsub-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBIQChAAAACH5BAEAAAAALAAAAAAWABYAAAI9hI+pe+EPHTNhgjox04srn4CI2FgkZaaZurGd+5nRfAiCYVuJzfN6jbvdfrshEZE7ApNGXa+nZDaVVIOhAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-lsup-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAI5hI+pF2G9YpszKgcgtgtyuX2I44UcRYkM5qmWAMcyzAn1/eKRnfe7vuD9fEGgQlgkHo2JmRPpStgLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mail_forward-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBJR2dLyijPTixPz69Pzq3Pzy3Pzu5PTu7Ozi1LyelOzavPz+/DwqLLyafPTmvPz67Pz29Pzy7LSWlPzmzPz6/LyajPTitOTSzMyurPz25PTatPTi3KyOjPzuxAwqVDQiJHxiZPTetKySlPzqvPz27BQ6bAwmTPTexLyinNzGxDRunPzy5KySjCQ+ZNzq9KTO7JzC3Nzq/Ozu/LzW7FSm1BR6vGSWvFyq1AyGxAxytAx6vBSKxAxSjMyujLSunES+5BSi1ByGvAQCBNzCrOTaxNTOvMS6rKyelCx6rBx6tBQKDOTWvPzu1PTq1OzezAQOHAxGdBROhAQGFPzy1NzOvIRqXLyynOzarPz21Jx2XPTWrLSShAw2XKSCbPzuzAwePAQCDPzyzPzqzPTmxOzWtAwGBKyObOTSrNzGrKyGbOzatEQyNKyCZOzWrOTGpNS2lCweHCQaHCQWFBwSFBQODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBhBwgQKFSpY0HgBQwYNGzh0mDhRAAUPHziACEGBpYgRJDiUGEkSwoCQJk6opNASRQoOFETQJDkggwoOJlYApcCihQuVL2DUhBDjhIqjJmRwwDCDhswaNm5MjYHjKggOOU7o0CGTA9gdYknG2KCCBw8VJVL0uBgihAUfP+CSNGCjsI/DiBPbAMJBsEQbQYQM+UG5smUiRYw0jlvYxhEkSYyIHm1EyRLTTH40EZvAyZPOR4pAmU07ipIkUKQ0mQIhAZUqVq5gKXzkSBYtyLVEyd1ki8QFXLp4+WJFQowbYLJnD5NbzJiJCjaQnhnvpYwZM0/OPFlvQ/f3iQvQpBlvQc0aCWy4VKnCpY0Y5yQxgEYXZFjghgwZUOHGCW90YQEccUwloBwGyjAHHXUoSAMZb0xhx1QOoMHDHSfIwSEOdTjhAQ1d4MFbTQ6Q4MYacrzxhhx04JCHHhvQsMeLJPHRBxpr+LHCGnusgccfgKixQR1ATtTBlDDAEIggggxCCCGFbLGFHVFKZEdAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mail_generic-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBDQyNCwqLCQiJBwaHBQSFAwKDAQCBDw6PPz+/Pz69Pz27PTy7PTy5PTu5PTu3PTu1PTq1PTqzOzmzPzuvOzitPTmvOzivAQGBDw+POzevPz67Pz25Pz23Pzy1PzyzPzqvOTavERCRKSilPz21OTevIR+ZExKTOTi3JyanLS2tPz6/Pz65KyihJSKbMS6lExOTNTW1JSWlJSKZMSylNTOrNTKpFRSVPz29MTCxPTmzKymjIyCdOTWxOzexOTWrBQWFFRWVOzu7MzKxJyalOzatLSulMzKtOzmxOTarFxaXKyqnPTmtIyGdIR+bOzetOzixBweHGRiZOzm3NzWzNzSrOTetGRmZOzizOTexOzm1JSKdGxqbHRydJySdHR2dOzapHx6fKyijOTixCwuLHx+fFxeXERGRDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLAQECjwORAwSUBZYFBpkHmwgJCgsMDA0OD6UQERITFBMVFhcVGBkangq1ChsLGxwcHQ0dHR4fICEGIiMSCbS3uLq8wCQUJSYGJygpKhQJKyvLLM4Nwi0uLwUwDQsxMtmeuQveHR8UMzQ1NgU3Dgo41jk6ns0cKOzgYaOHjx9AgjTAUUvIECLZNmxoUISHkSM9KiBJQkCJA4kKEoBQoWJJAiYtmjh5AmVCsCJRpHzckKCCySlUUvBYUqUHDysSPnxIEuXKA5pPRiRwxwFLFhRaIEDYUoEChCcDuECoOWKFuwW7nHkg4WELkw8/BHRRwESpt10dU8SSHevlRxIBX6C0WBE27q8GZMkKbTADjIAwYlb4GLMYShYoPTRo6FGiSJEKPyzMIFMmzJcvXbhwkSLFjJkbQW6cOHNGhAgEAdAsmk27tm0ABgIBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mail_get-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQ6bCQ+ZAwePKTC5Ozu/NTi9GSWvAwSJGSu3JS+5CR+rAQOHPTy/AyKzES23AwOHCw+bOTq/BR6xES+5AwmTBw6ZMTW9Ax6tByi1BRGdAw2XAQCBDQuNDRupKzS9FSm1BR2vBym3EzC7CSGxBROhNTW1Pz+/OTm5NTO1AQGFNzW3Ozq7Ozm7IyKjJyWnMzOzNzq9Nze3OTa5Ly6vCQiJGReZISChKyqrAwqVBRWlOTi5MS6xJSWlNza3OTe5Ly2vGxmbKymrIyGjMzGzISGhKSepCQmJDw6PHR2dJSOlPTy9MTGxLy+vLS2tMzKzLSutMTCxLSytKSipJyenKyurJyanCwqLCwmLCwuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBhgIBA4SLjAABBAUGBwiNlY4FCQoLDJaNAQ0ODwsQnYwREhMUE5ylFYYRFhcYGRgaGxsDHJUdFR4SHyAhEyIjJCUcuo0cJr0nExihxgwoyYscKSnMHicOIw4lKissLdWDHC4vMCu9McYqMjMyNOUANTY3OPEoOTolDCszdrSgwaMcBxs9TMxYOCMHBx8zfPj48QNINQ5BbMBIIUShDIUoTAhR94PHPEEHbQwZckOGjBQviMxYUWQIDCMmdXE4gqRnkiFETAxR8iKFjJU2evZEdmLJkgJIbqS4wXJIUapImj5FtuSEVyRVV1IVi4RIChhEkLVAgcJHEqVwVJUmYdKkiRNkALMRecKECRG/ff8CEQJFCA5kMKJEoUHDCQ/HkB9LmWKECpUeyKoIMSLEyosen0OD7iH2xg1dV7BkqXGlBpbWNTq4Zn2khu0aAAwEAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mail_replyall-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBLyejPTixPz29PTu3Pzu5Pzy7Ozi1LyelPTavPz+/DwqLPz67PTetPz69ERCRLSWlPTmzPz6/OzexLyajPzqvDw+PDQ2NMyurDQiJPz23PTatJyenAQCBPTevPz25LSajOzq7HxiZPTexPz65JyanBQ6bKSmpBwuTOTi5OzaxBRCdHySvGRiZHx6fBQSFERGRNzq9IyOjHx+fGxqbPzu3BwaHFSq3Aw6XAxKfPzy3Gy63ByWzJzO7Mzi9OzavBRytAx6vCSazGRKTPzy1AQKHBRGdBRyrDy63ES+3Cym1CR6rBwWVAQSLAx+xCyCtBRmnPzuzAQWLAwePPzyzKSCbAQOJByGvOTWvPTmxBQODFQ6PPTWrPzqzOzatAwGBKyObLSWfPTivKyCZEQyNKyGZOzWrOzWtOTSrOTGpNS2lJx2XDQmJCweHCQaHCQWFBwSFBQKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpkzGjhAoYMGjZMpMghQgcNFjh4mODhA4gQGkSIHAmBwAgNJEpo8KDSxAkUGjhMSEGz5gUVIiKs2PmBRQudHiwQpUnAxYsXImB0aBqjBcuoU0fKmPGChgUNH2qIqGHjg9u3bicWIFs2rYgbNnDkyGFhb8cccQ3ouJqWQo0dPFr0WMy4h48LFj4gsKriB5AeNngEaSGks+chPnwQOXFAh4oXRYxk9nAEyY7XO2wksWHDx5ATCDIoUXEBsYclTJo4cWJhuIjhSXacSPBEiZLMQY4wgRKluvXqUpyIsDElAxUqVaxcwcGCPQuWLOixaNHCZAsXBU+oqKDSxQqULF6ifNmyn/8VMOtxwcAK36kQRhdJQIFFEmKM4eCDYGyhhYAEkqFEGSuYYcUZLaDxXRpqSNRCEu6twYaFZXTQhgRd2NCCG9918AYELTjoXgNuKAFHB2RQEUYHVbQQRwlUpPHGGFwkyQUEDsgxx4lh9BhCBy2U8UQJcrSg5JIQ0FEHG3bc0QGYK+CRhx57PEGlkhM9sAEffKTQhx9+/AEIIIGoEUgLLRRFR0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mail_reply-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBMSihPTixPz69PTq5Pzy1Pzu5PTq1Pzy7Pzu7Ozi1LyelPTavPz+/DwqLLSajPTetPz27LSWlPzmzPz6/PTexPz67Pz29OTSzMyurPz25LyajBRCdPzuvDQmJOzexPTevOzq5BQ6bBwuTDQiJHxiZPz23Pz65LyinPzmvBxCbHySvAQCBOTi3OTq9CweHOzaxFSq3Aw6XGy63ByWzJzO7Mzi9OzavNzq9BRytAx6vBR6tPzy3AwOHDy63Ax+xCSazCym1CR6rBwWVOzizAQSLES+3CyCtBRyrBRmnGRKTPzu1MzGtAxKfAQWLAwePPTizMy6nByGvNzWxOzWrNzOtBQKDJR2ZNS2lPTmvBQODPTatKSCbOTaxLyqlAQKHFQ6PPzyzPzqzPTu1PTivOzWtKyObPzuzOTOtLSWfPzqvAwGBKyCZPTWrPTmxNzKrEQyNOzatOTGpJx2XCQaHCQWFBwSFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYuIDBQgYNGzh08DCR4oQPIDqEmDBhJQYRIzqQIFkSAoESJCKkDGFiwgkUKTpMwECz5IASKjqsSMlSA4sWQjG4qGnzhYoQSmF0iCFjBgmWGWhQrVHCxg2sOHLo2MGjB0sLYmsWQHq1p4wdPtqemGDhB1UDQFSouKHi7oQgQmSwUMyYxcQDZQWz2EFiCJEiRoyQyLzZyGIIB47YKLwDSRAiSZSoXq1kCRHNLBK8YGKjCYskTp4ogeKkt+8oUaBImZKAAxMmVKrctqL7ihTnz7FkAT5FC4cKFbZwadIFdxcvX8KLss8iJcoUBUcq2KgAJoxyMTy4jCFTxoxEHl2GLyCDncmWM2hUIQMPY2CXhhoTfTEcA2tgVwEba7Thxhs88FdBD/ZB8MUUHMJBRhw2sAGCHBKU4UaFc1RAhxnhcdhhHUzYAUIcFdxRAh4R5KGHinu4OIVEDqTBRx81xhGHHzD8wQYQetDRI4cTAcIHGWT0EQgZa1ApCBqDcBAID1Q94IEHLtBAAyGEFGKIIWqYYQYPYNZkQEAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mail_send-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAIR6fIRydHxubHRqbHRmZGxeXGxaXGRWVFxSVFxOTFRGRExCREw+PEQ6PDw2NDwuLPwCBLSijOzixPz69PTq3PTu5PTu3PTu7OTi1KyelOzavPz+/DQqLPz67LSafOzetPz27Pz29KyajPTmzPz6/NzSzLyurCwiJPz25Ozi3JyOjPzuxBRGbAwSHOzexPz23KSSlPzqvBROdISavBxSdAwaLHRiZLSinNTGxMy+vBxGZNzu9BSGrAwWJMSyrKSSjFy61ETO3BRWfPz65PTqzHTK3ByqzBSWxEzW5AQWJOTWxBRCXOTu9BSOvDzO3ByavBRKbOzaxOzizKSWlCQ2TAQCBJza7BRWdNzSxJSCbMzq9BSOtCSKrAwiPOTavPzy3LymlCySrAwmPFRKTPzy1NTGrPzu1JR+bOzatPzyzCy61ByGpOzWtJyCbPTmvPzuzIS+3FymxCSuzBR6nJyCZOTWvKSObMSujOzivAwKDOTSrNzKrJyGbDwyNOzWrMy2lIx2XBwWFBQSFBQODAwGBAQGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYqMDxAoYMGjZwmEixg4cPGzqA6BBiAggRIzaQGEkSwgAMJCKgnNBhQogSJlKGOFHTpgYUG0TsnJBCxQoSE1i0KErAxYsOJJRuuAAjhkwZM2jUqGnDBQoUHTbciIEjx4YNOmbs4CGjB8kCZlGAALHBx4+YcTcACcJDyFSJBo6iGNIhhQkiG8BOKGLkCBK6SSQisHoWhZIbG5bMYALECI8mTZw8gTL1QJQXZ6VMiUylSpUlVpoYaXLFtm0EGmCjwJLlA2O9MrRsccKlC8kEXr7AdgEmwtkhX2SQ2BIkjBiSYzSQr/nyhUKZLIrJJOcexvlEBV7IvCBjRkmAMzHOaufhxDvJBWiQISAFxUUQQRovJNeEGmu4JxEDbKQhXxsfuFDGGW68IQMcccgxRxUkNRDhC3R8QMQIdZwXQ11JJGFbiB+QYccHaaTxhgt13OFBDGTgkUdRDrhAhx5k2JjGCB/swYcXMXwAYk190OGHHx/4wUaVepTxByAaoPEkSQ5wwMEJZAZipiCDDJIHIYV8OZEdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-matrix-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBIQChCH5BAEAAAAALAAAAAAWABYAAAJHhI+pyw0Bw4sTVmmw1C/3/20ex2VUtJ2Uwx7oBb9eR45ziNfgy6tW2+pZhJicjXbTiZA7X2q4AjqIsajSuDsuty5n9SddGAoAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-message_get-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxatHx+/Hx69GRixFRWtHR29FxaxHx6/Gxq9ExKxGRm/FRW9Dw+xFxavFxazFRS1ExO9ERC/DQy5CQmzBwaxBQSpCwqLMS+xBwatExK/DQy9CQm/BQW3AQCjJyavAQCBMzGzAwOtDQ21DQy/Cwq/BQW9AwK5JSStOTi5AwKDKyurMTGxLS2xISGpNTS1IyKjJyanMTCxAQC1MzKzNza3MzOzCQiJGxqbHx6fKyqrLy61NTO1JSSlNTW1NzW3Nze3HRydKSipISChDw6PLy+vFxaXPTy9ISGhPz+/Ly6vLSytJSWlHx+fCQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgIDBISLjIWHiY2RggWHBgeSkYYICQqYjQUICwwNnoMFDg8QDBESExQVFpgXGBkQERoSGxwdHh8gkiAhGCIjJCUmJx4oKb+NKissIS0iHcgeLi8pzI0gMDEyLzIiM9c0NTU2zYQ3ODk6L/A7yvDnPBjqgiA5PTYvPvU+fvh4AeQFDXwgggTBwEIIOB8sakB0iO7gIH05hvToIeQFBo4eNwoJEaIZiAtEUgbhWGQjRxk9hhhJSeQXiCM4jxBxyXMjEiI5bR5JQnRnT5dDiNCgIcNmCiBAfAShSZVmECVKltgc+MIGCxlgw4pdskKHEJtMZRTJuqStW7dCImLEYGLTrJC4PeYy0asXxpAhTZpdGHzBSWHDiBPfWCzIQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-misc-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFCQiJERGRBwaHFxeXHx+fDw+PGRmZExOTGxubKSipDQyNHx6fIyKjJSSlJyanISGhISChLS2tIyOjHR2dAwKDAQGBJyenAQCBCwqLLy+vKyqrAwODMTGxKyurFRWVLSytLy6vMTCxMzOzGRiZNTW1CwuLMzKzFxaXJSWlOTm5Nze3Ozu7OTi5Ozq7GxqbDw6PHRydAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBwSBwGBMVkMjAgFAwHBFJpPB4SiQJCsWAQqEJB4prdNhQNx7QYIFwLD0ikQZdMHgelOPGYULQVDg4QEAVfRAEBBwUTEE0WFwcYhAuNF0QDBQULDwwZGUIaEAuVGxgBRAIFEhwHHUQMCxwTHAVrAAwFFRwKFkQZsxseDqBDGXMSHwfFQiAhIiMeJApEBwcOcahDJcLSJCYcGkQKcRAnQhkF0SgmEykHXkObox8q1iEjKN8rENqYD7MmeBCmzwSLFS1I3AqzYIPDESS+sWCxgQMLEgOSJKjozeAKFyskCDigQFwSBhJMjDDhAlyLFyVA+dIzAUUKEi0eaNhAIg8YGiEMenkwASNDDBkLqRQAEEAkup9KDkEFACUIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-move-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAI6hI8RyJ26nAQQzlbrdWrP7nHRNh5gwpxmaZxWylJdRtf2fcux2rr7n8LsQrxQzyhE9mhIplKjPE5wBQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-news_subscribe-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAASC/Dw6PAQCBHRydPT29GxqbCQiJPz+9PTy9JwCBKwqLPz6/GRiZERCRPz+/FRSVDQyNBQSFBwaHDQ2NKSipJyanHx+fMzOzNza3FTCFGRmZCwqLAwODLzqpCwuLExOTLzqrFTGFAQGBES+BETCBEzCDDSqBBQ+BLTqnBRCBFRWVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb0QIBwCAgIiMgkckAoHJVQgEFAOCCc0WThcEgoDgvGMztFJLiJ83Ws3C4ODIY1jUCIlQ0Bd+FwMLZmCXV3Qw8CCAICfW9wBQhddVgAEIcCCwuJDlxWBQx1AhFPjlyJlwISj1ZWBJQTAImIerGqVwgEiAwUR46ysAeJcKoEoYkTVLGPvrWVDBUWEwEXF1aziMGfAhhiAhAVFdKPyMux2YkAEc3fF3WcdQTAGYkQQxAF3uAIGggbCBwCHfEEeEBiIB0+BB8cgHAQogMIKPXurRMxgkQJExjZELT3jUGDEyhMpDhxIouUOB8qqAhZ0iS9CJMStTQQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-next-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBOze9ORy7Pzy/PSi5LQCvNSG1JQ2nNx21LQCzMRGzNRy3KQCpLwKzAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq704axC671WAfR8VCOKUbudApCBHksVgHO+5agFiHwVBAuYZ+RQLBmLHatgMS8mMyREsDI7oRipEeLWsKVG8Fce26EspzeaR2vDQNE7PGCIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-openterm-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIcAAPwCBAQCBPTy9PTu9Ozq7OTi5Nze3OTe5Nza3NzW3NTS1MzOzMzKzMzGzMTCxMTGxOzm7AwGDBQOFBQSFCQeHCwmLCwuLDQyNDw6PERCRFROVEQ+RDQ2NLy+vKSipISChGxqbExKTOzu7OTm5Pz+/GRiZMS+xLy6vBQWFLy2vCwiHFQ+NMSmfNSyhIxmTDwuLJx+bLS2tCwmHMyyhMyqfPTqpPzyvLSWbLSWfPzitIx+ZDw2PAwKDCQiJGxWRPTmrPTerMyuhPzqtPz63PTWnPz6zNy+nIRiVDQuLKyWbOTanPz21NS2jNS6lDQqJHRaTPzmrPTSnPzyxOTClPz2xNSuhPTqxPzuvOzSpAQGDOTKnMy2jOzSrPTu1NzKnOzOnBwWHJRuXLSWdPTatPzqvNzClCwmJOzSnOTOnPTuxOzKlOzerOzarOzitJR6ZNTO1IxmXPTWrNSyjPzOjPTSpLSehHRqZOzirOTCjPS+fPzGhOy6bOzKhGROPMy2lPz+1PzmtKRyRHRiNNTCdPz+zNzCjEQ2NKySdDQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAj/AAEIHEiwoMGBARIqXMhQIUIBAwYQIFCggIEDCBIoULBgAYMGDgIIDEBAwMSKBRBk3NjxAciQIwdACBBBwgQKFSxcwJBBwwYMHBx0EAmA5EwPH0CEsCChoYgOQ0cSGCHhA4kSS5syJGDiBNEAFVGUKKEBAwWFFM6SNJHi64gDFEKE4FBBggoKK1i0cPECxokYXw0gsECYggQZM2jAqGHjBo4cOtqOxLhDAg8ePXz8ABJEyBAWRIoYOfJipEoMCZEkuaFkSAslS5jUGJKkSRAnRREo0JDwCZQoTKQAmUKlihQrVa5gKZ1lI+oAK7QM2cJlSZMuU4Z4+TJEx0iNOwKAggkjZkyOFmS8kClzpcUQLRRGbjRD4MgZNEzSqKG+ZgobI2248dUbDDDwABzcxSEHEFpgEcUcdMRRhx1fFejAAx0cgcYdSxiBRx566LEHH0d8QFRRNC3Uhx985CHEH0MAEkhCBxWkgiCDFEFIEYUYUmONMhyCRxVH/PgjBYioYJAdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-paintbrush-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBMTC/AQCtAQCdPz+/MzKzOzu7KyqrCwuLAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARZEMhJ6wxiDMsp1lvHfRohWuRAmOeVlUTQSukqz3U8A/nd9rtCAWTbAQoGg0q3OyANCOYPA0UgfCdMJnHFimre72sZ7pBWiTLqRUirK5hV7A0P2O3GvD5PjwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-paren-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBBQSFCH5BAEAAAAALAAAAAAWABYAAAJThI+pGou9oDuS1hlqnkxu/niVQB6kYHzAiJYoUK7paLrxpr6GMJjWeqlFGirEaQhcDHQJnEQX2/1kMBv08Yu1ttNkFRr1ikHjIiYYjDjSWLIbUAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-pencil-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/IQCBPwCBPyChMQCBPzCxAQCBPz+/MzKzISChKyqrDQyNEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARYEMhJ6wxiEMtpIAWxddwXiqRlikSQeiAbuC+wirNR322gv7zcLobzDU+9XypoBBKTR1lz+RTWDgip8nUwZK1XLyIx5XoVicX2RUAo1DVKi7GOBxjxfNwQAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-percent-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIzhI+py+0P4wkU1XfDhBdo/zndF4qh1pkGKYFk2XpTqoJr9G5YfmOz3hixfBZa7IhMJg0FACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-player_eject-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAwKDJSWlFRSVBQSFKymrOzq7HRydERCRPz+/MzGzISGhJyenKSmpGxqbJyWnJSOlKSepLy2vIyOjGRiZPTu9IyGjLSutFxaXExOTHx2fGReZAQCBAQGBBwaHCQiJLSytKyurJSSlFxeXNze3LS2tIyKjFxWXHRudAwGDBQOFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbVKFQsGItBdBhpgh4PxIJvRC8cA4oiMy8bvQhJhMAYTFBVOURAWEw0QFxcMERAYCBluVxobDxkVHJocmBwEGgmEQx0dHh0CpKmkH6odVlanBR8FtAIFtiCkSB0LISEiGCIGIxAPDySuRwIOBwrOzwoHJRHJRh0jJgMj2gMnERQUCNVFHQQoCBvo6CkICATjRB0qp7b1K6qv+foyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-player_end-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTCxGReZBQSFOzm7AwKDKymrJSSlFRSVCwqLLy6vPTy9OTe5Ozq7CQiJLSytOTi5BwaHPz+/HRydMzKzKSepJSOlKSipJyanIyGjIyKjKyurISGhMzGzJyWnHR2dISChIyOjLSutDw+PERCRHx6fJSWlIR+hJyenGRmZHx2fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8ikMBBQKgOCgRMZIBSkxYHWoDVWD9EigpBQLLBERsPxCA8NDUhjgTBGJJNGG02RVBQWdUV3FxgZe0IGfoAGdhoXGxwdiAYef4FGFBoeHB8dGSBRihUhIo1FBhkbIyMkJRYmAwYal4JEBh2RChIWJ1IIGxUZFqdECCgkHR6wWAYpFR2YWSobvL5vFgfDaEMDIivMRBEsD9HcQgMWvecDLB0tZ0btsfJa9vLXU/X6/P3+b0EAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-player_pause-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBAwODMTCxKSmpJSWlFRSVAQGBBwaHLSutOzq7Ly6vCQeJPz+/Hx2fBQWFGxubLSytJSOlBQOFAwKDJSSlJyWnIyOjHRydNze3GRiZAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWBICCOZGmeaKqubOumQSDEgRjPMSoMRGEcol3vh0IkFAtDDWBEKlGMRKPgEIii0yrqIS1ArADu9KuLNCSOSdCMVp8ohEZFC4DL6SaBpXGh6/l4JX8XZACDhXkYCn1LAoqMUBAZEhBLDJKUSyYBGmhPAJyemiU0NDaloy+qq6ytI8whACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-player_start-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExOTAwKDAQGBJSSlHx+fBQSFMTCxKymrFRSVOzu7GxqbLSytLy6vJyanPz+/GReZBwaHHRydKSepKSipGRiZJyWnAwODLSutKSmpISChPTu9ISGhFxaXJSWlIyGjJSOlERCRIyKjDw2PIyOjLy2vOzm7Dw6PLS2tCQmJOTe5GxmbDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa7QIBwSCwaj8ik0hgQLJGBgbMoqBIKU2LAcMgOEQmFYeEFbBmNMgDhYDwWBC0k4pCoJ46IgRIXBioRCRYXamwRGBQIfgaBFhiERhkaenxmCoEbBhyQRYaIGVsdghgem4UWegcEBB8UHhsgIaZGBBgRIpUIIxQhChginEQIIBEklWslFyYnBsFfFCi4WQgpFBwqFxNGKxcsxl4IAS0NZEYCF3vlwgEfUuZV8JEuI2pPAARN9kcE9fr+SwaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-player_stop-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAwKDBQSFBwaHCQmJJSSlISChJSOlJSWlGxqbGRiZNTS1PTy9Pz+/Ozm7OTi5FRSVIyKjOTe5MTCxIR+hExOTHR2dLy6vLSytLy2vHRydFxWXIyGjIyOjPz2/FRWVHx6fExKTMzOzJyanKSmpKyqrKSipAQGBLSutHx2fDw6PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcslsAgKCAWEQjQ4KgSwyYDAcugZEQqFYYJECA6PhaLcfEEUkgJZAGJB8fkKpWOhHAxcOGBQZGBoaGQgbHIBGAhUOGR0SBxISBh4Xf0iCHxQSlRIIXhsgj0UCIaCXmJgHGyKpRJ+hmB5dHQqOaCENIx0epBIkBhdzngoPGCQlJifQJBvJRygRKRcKGxcXGypys1srEREc5SLnICLiR1koLFVUWfRO9vf4+UwyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-prec_minus-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBKSipPz+/CH5BAEAAAAALAAAAAAWABYAAAJAhI+py62RgnRnGguZ3BlTYIHdl13jh3goFpIleggvTK8ctw76Pswav/MtAkCd8NHj9HLFY6S4JEGdqdumtjAUAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-prec_plus-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBKSipPz+/CH5BAEAAAAALAAAAAAWABYAAAJHhI+py22hgjwSonktxBZU7GnhkyXc6JmmeDpnG2lg1YCOInT3zrvfxwsMhsSBrkYUDo8MpTEZNH6M0SV058xWi1Tsj9ZjGAoAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-previous-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBOzC7PTq9NSG1MxW3LQCzNRi7MRGzLQCvPz2/NRq3ORy7HQCdJwClAAAACH5BAEAAAAALAAAAAAWABYAAARUEMhJq70Yh813rl1HheInBYIwrEJwktxJFEbRmuOBJIXivp5LQLcj+HCnBaPBMBhdMBBjw0w8ccEA0/EzdQHaHywmnIyDyDSIrG4LQ+64OSqvx+kRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-prod-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBIQChCH5BAEAAAAALAAAAAAWABYAAAI7hI+py+1/gpy0hlVRZlP19mmSE0YjeIoXuqpkarYYbJQeDdiJrrs77gvOZDVg7Eb8JXtFSpMJiUoB9AIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-queue-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIIAAPwCBAQCBKSipMTC/Pz+/AAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAANfCLrc/jDKEGQMQlDLKM5aZQXDQIHZ9nhleaLqEhAE1bofKCozXZO3l0bmK9qCQ2LRCDQlAb3lkoTZQaVS6jOKpWmt3O5X2fU6wWXfuBM2mmINCpbKkavho56VI9s7DAkAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-redo-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3Pz+/JTWbHy+VHTCTMTivPT69BxGDESuJDyiHESiHEymJIzKZAQCBFS2LFzKNGzWPDRqHCxqDFSqLHy2XESCHAwaBAQOBBQqBDyWJHyqZDyKFGSiVESeJBQ6BAwSBGTGPFyWPFSSLEyOLESGJBQiDAwiBBQmDCRGFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaoQIBwSCwaj8hkMcBkKpcBwYAwEDif0YLhwEUkFItFMkAwMBoOR+PxgHwjRDggamhIJpQ8ZbKGKOQLcgEFdhUWEYgRF3sNfhELBHALAhgZFhobRBwREhQdEAIEHpIKHwsaSJwUDQgQIJINARxKESESDQ0dgCIjSpAkDAwPco+ZSJAlJicnKHIAIrNHidOIQxunT0kpCyrZSCss0d5Fj6jjRonn6uvs2QZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-reload-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBCRSFCRSHBw+DBxCFCQ6FBwyDBQWBBxGFCxyLGTChMzqzLzmvHzKjDyOTER+RERyNDSqXNzy3LzivFS+fCyCPBQmBCQiBBxKFBQqDOTy3LTitES2dDR+PCxuJOT25KTarCx+PESSTCxKHDSeVCyKRNT21ESWVDSGPBQyDAQCBBQSFDRuLDSyZDySTGzChCRiJKSmpExKTDS2ZGzGhLy+vGxqbISChDSKRMzKzGxubDQ2NIyOjCQiJCwqLBQWFCwuLKSipERCRERGRHR2dAwKDDw6PFRWVIyKjCQmJFRSVBwaHKyurAQGBExOTBweHFxeXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf9gACCg4IBAgMEBQYHhI2ECAkKCwwNDg8QBAOOhAQREhMUFQgWBxcHGBmbggkaGxwPB4yDB6SbBJIKHQaqtY0eHyAhsqrDgx4aCiKpqoQHAyMjJBMKJaSxzAAHIRsmJgonKA0LHSmDKiuOBywRLSQuLyEwwyoxMuiN6iUzNBXy5jU2bsgoJugABBz95uXQsUMGD3vpPPgTpKIGwx4+HMr4kW4YkCA2hAzxAQSIECI+imBTwVIFESNHerRUgc0cEiFHkjiiyYzeDiVLdvLcySSkkKGEWiZVweSGkIHMmvQosoQlkaZOjvhosvKJjIAxoOAsgpRZkQNLnvSoqspAIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-revert-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAAQCBPwCBPz+/BQSFPTy9CQiJNTW1ERCRLSytAQGBISChMzKzFRWVDQyNCwqLMTCxFxeXOTm1KSipPz69BweHHR2dJSWlMya/Mxm/GQCzOzWxGRmZPzOzMzOzMzOnExOTDw6PNze3Ozq7OTi5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAWABYAAAbrQIBwSAwYAwDjUCloOgUDQlJJFCKfzoLAMF0ih9jmASGQfq3IBECgYC8YCsah4Rgc7+Bw2fCY4pNrCg8QboIIEX5HXXoEjWZ3eAIMgxITcRRVmVdOE50TBRV6TkJsD3EWDBUOoRcXGBmwsAJqT44aoKJNtAoVDAwWFRUFGwKxxhkCQhMEyxEcGrfEuWoGBgsdDwseHhQQvt++Hx8HmUQU4OHiICAJkHcDDB8hBCIj1QYfDomQAOIiHwxCPBiYr507JeNGAOQz8IC+g0YKrAtxAMQDBBgPFDB4EACIAwIHDkQAAhNEKuUStDMQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-rightjust-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIhhI+py+1vgpy0Toizjvbur3WiBJbhSJnqgorri7nwDBoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-rsub-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBIQChAAAACH5BAEAAAAALAAAAAAWABYAAAI+hI+pFu3f1gmSVUBrlnt19SUhMk5XaWnnqrYc+2rQfNWHIBi4feP+zssBdkJez5gAIodDYbH2+yGBymXCUAAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-rsup-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBIQChAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAI6hI+pyxBhXlOv1omggxon6VFdGG1laFmkyQLCC8fvJNB2U+M3k/P70gP+FEHiMFFEHhFJJk0GXUkNBQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-run-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBOzq5MzOzPTy9KyurNze3PTy7IyOjOTi5MTGxNza3MTCxMzKzHx+fOTm5NTSzNTS1NTW1FxaXAQGBLy+vJSWlGxqbGRmZIyKhDw6PAQGDJyenAwKDLy6vLSytBQSFLy6tKyqrHR2dLS2tJyanJSSlISGhKSmpCQiJISGjCwqLBwaHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbcQIBwSCwaj8RAAMkUBgSDZdMpBQQIharyGDAclsoDYhtIKKrDwMEgUBMWiwSj3HCg0w+DfgGJQAYSDRMUTAELBhJ8fw0KFXdJBwkLEhYXGAUNDBUZj0pXkxYaARsIDRUMHJ5pAgQHkxEYUh0JFR4fHAVZTgMFCAt+sUIgBB4hIggOI1pKCQO8CB0gAgYkJGNbRQEKEYwNCa7VIhOPaRAKCpoV1QUl5E5mDJrFJAW4JuRlCuMnKB+94yVQ2DGi7QSYABcQgACTDF+VFChULJsiZIUCiRS5sMjIsQidIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-showmenu-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBBwaHERCRIyKjBQi/ERO7HR+1Ly+1Pz+/Ozq7MTCxOzu7NTS1AAAAAAAACH5BAEAAAAALAAAAAAWABYAAARkEMhJq7046z2D/2AoDAQVFGiqqsaBmGH8jWWX3Hiu3+YdKglPMIDrDXc+Is92zAmFi5pECWIkjySj0EkUZplb3JP4nV65WCmAqhR3yeo2Emmc0zsyGc3U6Pv/gAAKHISFhoQGEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-signature-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAISGhISChHx+fHx6fHR2dHRydGxubGxqbGRmZGRiZFxeXFxaXFRWVFRSVExOTPwCBAQCBMzKzMzOzMTCtMS2dJSCTCwqLPz+/PTu1MzCtERCRMSydPTqxPz+9Pz6/MS+rNzKlKSSVOTarPz69ISCtGxurJyaxPT29MS6pOzmvNzSnHRyrPz29OTi5LyqXOzavMy6fFxanHR2rOzq5JyKTOzizPTqzKyWVGxqpPTy7LymZGRipLSy1PTu5KSSZFRKLExKTGRaNPz27PTq3LSiXPTq1GRWNDQ2NMTC3FxSNLymXGxqrPzy7IRyPDQyNCQmJGRinJSCdHxuVBQSDPTy5PTm1IR2RJyOfKSSfBweHGRenFxepNzGrKyejNS+pNTCnNzCpLyedBwaFBQWFNzOrOTOtOTOrBQSFOzStOTKpAwKBMS+tMS6rMS2nMSylMSulLymhLymfAQGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAA8ALAAAAAAWABYAAAf/gAAAAQIDBAUGBwgJCgsMDQ4OD5MPEAEREpmYmJqaE5IPFBUWAxEXp6ipqJ+TFRgVBaaqsxcZGhUVGxwdBrK0qB4fFSAhIiMYCLIkJSa0JygVKSIhKSoJvhcrqh4sLRUuKR4vITAL2DGpMiMzNBs1FzYiKjcMER6oOKglLDkVOinwRMCAAcKBrx33eMTwkKPHPx8/RGxwEaICkIMXcOBgMaJfCgw/fMCgWCGIhoMlSOQQkmMIkSJGUoysGOTBEVlIZMTg16NHhSJJZCqhOenmqSU5cDDB0JJIzJlNak5yYoqHDBY7hmgN8aPGhhslKU16EgHJDiY9oGz9EcJFkChSaKaIfUC2I5UhMarU+GElyJUrWHzIFZslAtqWVbRs4dIFi5cvYMKImTsmQs8qVVrUePGCDJcyZkCEGUzpTAQMmGts5ozGTJo0XEbPVTNhDRsUbdy82Q0HTpwwwNXMlQOhuPHjyIWLNRAIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-spellcheck-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAASC/AQCBFxaXBQWFAwKDPzCxPwaHPwiJNQGBOxKTPQ6PNQCBGwCBPQ+POwCBPwqLMwCBHwCBBwCBFQCBLQCBPwCBBQCBCQCBPQCBOQCBDQCBFwCBJQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWGICCOZGmeaAoErMi+4xuQgQAI8yoKw2rfOZ1LRIgJh0hhDncsyXKypNMIKAKbNGpwFjxukcza7jt8xmCAgkpVMKxRhQOCnTAVFAtGqtBwLEgFDxAREigBExQVFRAibYNdJhaIigmODBdvF4gYDwoZDBpvIhKIGYOFoi4bHBGQogESqKlvBiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-sqrt-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIIAAPwCBIQChAQCBBwaHAQGBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAANPCLrc/jDCQKutkcqQJeCP5k3g6IjCIAjAynYt0brzUn7gW++i0i8CGcNiuyl0NlyysYKhXgQdUvmcNZtDTo/mmvo+ptMvjDOSzWey+mFIAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-start-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBCRGZAxCZGyavExmjHyatOTy9CxihISevPz+/KzO3BRylAw+XDRWbPz6/FzC3CSuzDyexJzO5Mzq9CxSdAQOFISmxNzu9HTS5BSmxAyexDSuzJTa7Mzu9Kzi7GS21CRmjAQOHHSWtLze7AyWvHzG3BRihCTO3BS+1AyixBSWvBSOtBSStAQWJDzW5BTC3BSqzBS21CTC1ETW3AQSHEze7BRqlBRmjAQCDBR+pBRefBRSdAQKFAAAACH5BAEAAAAALAAAAAAWABYAAAa0QIBwSCwaj8ikMqBcMpsCQTEwIDQBUWKgYHgqs8LAAZGwQqWAgGLBaDgEj0Fgjh5mxRBERDKhICAQFRYXRVEBGBAZGhscHR4VHyAhIiOFAiQZJRoSGyaNJxQnEyiVRFEoGykqKyYsJiYtLi0mKC+WFygrMDEyMzQ1wDQqKDaWADYoMzcqsjg5DSgoBISmaCOoMG4v29s2OsZCyDs8DldgQtc95WdFPg7rV0Y+XvHt9ff4SXRBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-stop-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAASC/CQKDBwKDCwODNyKjPzq7My+vIxiXAQCBOSOjPz6/OSelNySjNyGhMR+fLRaTGQ2LPz+/Nx+dNR2bNRybMxuZMxeXMxiZLQSFJQaHFwqJNyKhOSCfNyCfNR6dMxmXMxWVMRORLQODOR+fOSSjNR2dMQ2LJQWFMRWTLwWDNSCfMxeVLwaFKQODNR+fNx+fMxiXKQSDOSWlMRSTMxaVMQ6NMxORMQyJOTS1MxqXLwWFLRORMxKPMQaHMxKTLQWFCH5BAEAAAAALAAAAAAWABYAAAb2QIBwSCwajwGBcikIHIsDQmFKNRwQT2EgoVgsGOCG4wHBIgmRhWRCqVQsF0xGYyYGNgoGh9PpeCQfICEic3UAAWgLIxwRJBsbHSUREyYYJ3RDAQULexGejhueESgpl3WaCxsqJKKsChEUKywtmFoFDC4vCayikzCyMbWHt38NCTKiHhUfMyzBdQIFKsodob0VNDWzwppuKxMRrx6iNjcitNA4bh+iEzkwojc66JkOOxcf7G35PBE9KS1MEUGgIQOIFfk++KjRw9wJgUUIZvhRoyLDFCliQDQisUWLGCJOeNx4hKCGkyhPGnqCoKVLl1liypyZxUAQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-sum-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBIQChCH5BAEAAAAALAAAAAAWABYAAAIyhI+py+1/gpyUMrvm1bdhFTgfhIykYZ4pyZ2o5EZwDLSurc7ZFnqZDgLKKsQe7QihFwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_block-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUWzvNzo33GfFl5jVlonlTrr1DbvFi9vjeeNUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_bold-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIxhI+py+0Powm0VnknjVkH2AEhE45LZ55Wqn6e65TsMc5eYosbksswubJIhsSiccgvAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-text_center-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUbz3Sh7yIWfFHKjVl4nmFrr1Lpr7LwkjeeIUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBBwaHAwKDBQSFLy+vLS2tJSWlBQWFKyqrFRSVCwqLDQyNNTS1GxqbFxaXJyanIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAVcICCOZGmKQSoMaZsShBsQBdAapHvgaIDUqUPJlRjSbAoT0fRDKgODRbF0PLUYjZO2F2Bst9evNix+dsvDlGKK5jraudQb7qbX6a2HEJ+ycyF+LRE8ZTI+fX5oGCEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_italic-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py+0P4wqUSlQvttrkDnyaOHIdeaGRupplAIauVM3xjeeOUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_left-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+pyw0Bo5zB2UXz3Sp7yG2fFJajVjonmIor2TJvfL0wjecIXQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_right-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUfz3SZ7yIXdF4kWqZkbCqoMO7kXLC+wVOe6YRQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text_under-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIvhI+py+0PowmUnhpeVVnb1DkbCI1I2JhX+Z0sOr2cTHpwK7a4rUr+hAnufsTirwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-toggle_log-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIYAAAQCBAQ2NPwCBATW1KSWfBweHATS1Pz+/Ozm1GxiTATOzPz6/Pz69ATGxKSahOzaxPzy5HxuVLSmlOTazPz27AS+vPT29NzClPTexHxuXLSmjAyKhPTy9KyehNy+lPTy5Pz29HxyXNzWxAS2tOzexPzy7IR6ZASytPTy7ASurPTu3KSSdIx+bASqrJyOdIyCbASmpJySfPzu3OzizJyKbKyijASipJSGdOTWtPTq1PTq3NS+lJySdOzWtOzi1My6lMS+rOTOrMS2nNTGrNTCpNzKpJSGZKyafLSifIx+ZHx6ZFR6bFR+dAQyNAQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAWABYAAAf/gAABAoSFhoeHAAMAiI2IigSMjoQABYkGBAeSjwAICYkKmQublJ0HDJ+GAA0OB66bpq4HCQC1lA2ZrqMCAA8QBwvBERITFIwAFa2yFgAXGL+uDBkaxRu1FQQLshwdHhgfDK4gIRoiFNYAI8quHA4XJCUMCwwMJhLm6Ce5rigEzhAMQICwYKLcuVopWgUDoWLFhQcfKNCjwOLeQQAtCFDYiAKBC28QKITk8MIgOhgxIHyQIWOGi4cfIHAogYJGjWq1bNzAkSOHjgc0dmBAgQKCUR43S1jjVeFGDx8PcNAAKePDjxg1gOCThOxFEBxBgpJQMQGpkCETEIBYSqkpkSJGOYTyOCJkgg4OIDaybXvjh5ELLpAMUYEAgQ7COPbyTWJEiY3HkCOTaruESYVamDPbQtTESedJhOgEAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-top-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAw2VHSWtBRihAQOHISmxNzu9BSmxHyatPz6/Lze7CTO3AyixAQSHHTS5BTC3DzW5ByyzPz+/OTy9AyexEze7GyavKzO3FzC3AyWvBSqzBR+pAQKFCRGZExmjCxihBRylCSuzBSWvBS21BSStBRSdAw+XAxCZDyexDSuzCTC1BSOtJzO5JTa7ETW3BRqlAQWJDRWbOT2/Mzq9HzG3BRmjJzS5Kzi7GS21BS+1CxSdCRmjAQOFAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaoQIBwSCwaj8jkMMBsOp3Ip7SpHAoGhELVKDAcENmtNaFYMBoEh1hAPjwgEUlYyZ5QHpIKxALWIgUXFBgZCBUaG3AcBB1HAh4fICEiFRUjJCUhBCYnjEQCAignoikqhissKAKiJwFJAS0uKhovMDFiADIzNDUsLza2Yh4KNDcsEbW3Ago4NSUrBMBbAjQ5KRo60Mk7PATdKH5bAT0xDg4xPa236uvsShRBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-undo-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3PT69MTivHy+VJTWbIzKZEymJESmFESiHDyiHESqLAQCBFzKNGzWPFS2LNTmzCxqDDRqHPz+/KTGnBQqBAQOBAwaBESCHHy2XBxGDOzy7HTCTEyyJDSqFHzWTAwSBBQ6BIy+dESKJFySPFSSNAwiBCRGFBQmDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMsBkKotMwYAwEDiXgYLhwD0gCFZiQKxNKBYMRqPh+D6G16y5AYnYIxBJAyF4AwITTAUJdBESD4gPFBV6Fn6ABBcJDIYPGEQZGhQbHAIdfx4JHw2VSBodGwWfAR4LDSALfkgYAQurBiAhICKfSSMkvQElGyYnGyi9Rxkdj4nOskUYyU9FpxnURikdGtjRKivdRKfQ2Inh5+jpRwZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-up-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBHSWtBRmjAQOHISmxNzu9BSmxBRihHyatPz6/Lze7CTO3BSixHTS5BTC3DzW5ByyzPz+/OTy9AyexEze7ByixGyavKzO3FzC3AyWvBS+1BR+pAQKFCRGZExmjCxihBRylCSuzBSWvBS21BSOtBRSdAw+XAxCZDyexDSyzCTC1JzO5JTa7DSuzETW3BRqlAQWJDRWbOT2/Mzq9HzG3JzS5Kzi7BSStGS21CxSdCRmjAQOFAQSHAAAACH5BAEAAAAALAAAAAAWABYAAAaeQIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbUGFAtGw0GFfheHByQi4S6/E8pDUoFYLm5kAEPJaBAVGxIcER0JHlEfICEiIxUkGyUmIgknKIhXASkonCorgSwmKQGcKE9IAi0uLxUwMTJWMzQ1NiYwBLBQHws1N7avXgs4NjkcCblMATU6KhvGyG87PAnUKV1MAj0+2zIFp1bg4eJJdkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-view_choose-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz69PTq5Pz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq70466Cl+AMxBVwnFIVRAmQHCIeBrC1L3tQgJ/SaEbeeC1PLBHE2ybFI9A1HzstHEIK6YCmhDTmBybQaHYJn7QC5zKeytIQe1+pKNE6P2yMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-view_detailed-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAQ+EMhJq7046817+MLQUQFRGMc4lQaSAkcMx3QltMmrDrSu/sCgEPgJhIiFk89DaL1qPRnlhsgBebWhdstVESIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-view_icon-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz69PTq5AQCBPz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARWEMhJq7046z2DF0PlBeAVEERhiKhqHgWyUgEsX0KczFOO7JeBYciTCImc5ITIXDKHyqhU9AnRqq9UEVDTvmLbGhin2/qAliOUot5OLc81IO5+2+8WewQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewmag--22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbKQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/avno2BBf/MCClSob4iBIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewmag-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbIQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/cunr9S8gAIRFhTCLAgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewmag+-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbQQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/4zT766vRI+fvHD4CPgwcJ9qg0UB85JA0dDjEQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-view_multicolumn-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq7046813+MJQfUF4BURhHGO6noSBsEcNoDJtS4KcsJQe4ncZ1HYT47HDbDqfUAnJRJmKLIGCCjjJbmE5wBI3EyOFxKCPS1EiJW52dE6vZyIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-view_sidetree-22:actions actions22 22:photo:22 22:R0lGODlhFgAVAIUAAPwCBFRWVFxWXFxaXExKTNTO1NTS1Nze3Hx6fLSutMzGzLy6vMTCxDQyNMzOzPT29Pz6/Pz+/PTu9Ozq7OTi5Pz2/Ozm7MzKzGxmbIyKjAQCBPTy9FROVFRSVPTq5OzOpMS+xPzu5OTKpExOTJSOlOzu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABUAAAb/QIBwSCwaAQFBcqlsLgcBAnFQqBqqhwIiUVB4F4wGMeB4QMyPSCFQkEwmlMlCPKRC7pCKmjpxTyxzUwVmEBF6FxiDbxZyUnUFdxERhQUZbX4TDBlEAgUVkQ8DogEDAqYBTwEaAw54eQNusRMPs319Gp0PFZ8PAhMRGpLCwxOrFw/IFRuwwMICHAIEkhK4lxK0A7/Bkh0RHtvFAwp9D27MGugRAh4f29TithIW2c2SBOjgqwxv/AIS9cOEvQPBiBEFetsidOhAQFqEcCDgWLBAwR9AARFCuMPFAMwCEAsQpuMQQkS+EQ1SNkBAwuKwe+kiUDuSzU0JPyUm5HSj4Qi+Bp9A8QEIAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-view_text-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIkhI+py+0Po2ShBlOxzbP7n2yaJoLm+ZTcxqHuC6hXzML2HVEFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-view_tree-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz+/Pz69Pzu5PTq5OzaxBQOFOzKpFRWVFxWXOzexPTexCH5BAEAAAAALAAAAAAWABYAAARPEMhJq704g6A779kHCORAgNskFMYhakE8FkjyBcoWv+JwJItXaELYCTFHlCSpZKKcoB5jYHpOGgUadLKbIRw3jhEzQDyCSuI4zW673yhDBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-window_fullscreen-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBNTW1NTS1MzOzMTGxLy+vLy6vLS2tKyurKyqrKSmpKSipJyenMzKzMTCxLSytFxaXPz+/Pz+9Pz+7IQCBMzOvMzOtPz+1MzOrPz+5Pz+3MzOpMzOnMzOxAAAACH5BAEAAAAALAAAAAAWABYAAAWxICCOZGmeKBqsbOu+rjAQRFEYxoEkibIwjUZMRnAUHjkEpPcLriLQqHQ6XRUk2Kw2O+lSKIUVoUKubLflikVcPnO75cvKkXZL4HG2pK31lilqc1lmfRNfgBQYGBlidl5fGhobGxqMAQNnXYaQkZOLjVgVmpsUkRoVnpZje2SkphtlGBUcbH+br5NptAF0rYe4G4plHSseaaW4irLDcxYOFtDRFhnU1B3X1zDa2indIwYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-window_nofullscreen-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBNTW1NTS1MzOzMTGxLy+vLy6vLS2tKyurKyqrKSmpKSipJyenMzKzMTCxLSytFxaXPz+/Pz+9Pz+7IQCBMzOvMzOtPz+5Pz+3MzOrPz+1Pz+zMzOpPz+xMzOxMzOnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbKQIBwSCwaj0hkYMlsOp9OwYBAKBQMhgMikVAsGI1GVEpwFB5ZBKT7DS8j8Lh8Pl8WJPiJfr/PTygUBUsEEhV4h4h+ExUUFoMVkIWJhxWLkBeDhZCGiXqbFRiYAYSanId7mxihSwOlphJ6gJ8ZGksOiqd/gKoYGRmipIh7gBSqvhkbtaOuw7sYn8mseJuxxcabGxwdmZ/EvL6f2o+Qz869yBUem9sBH4sYf7znG/Qb6h4gSx8fDh8W/wA1CBTYoSCIfFASQknCcIiBIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-wizard-22:actions actions22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBNzaTPz6BAQCBPz+BExKBMzOTPz+rPz+3ISCBPTyhISCLISChPz+xOTiVPz+/MTCxKSipKyqrExOTDw+PDQyNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAV+ICCOZAkEZqoKqoqKAzHAb1sIxhAQwWAQhRaJd0AcdgkhqaBAOBUL5WjAaD6TUqog0DAildqcg+cDtgaPACTCiM0AOhV6sG4DWOAHnf2uyfV1b1lsgVIwEgwTFHaGA2yKFYJgiJCSQo6JFJGGcJSalkKPn5wimZukAJWoIgYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/ICONS/tkIcons.kde b/ext/tk/sample/tkextlib/ICONS/tkIcons.kde<br/>deleted file mode 100644<br/>index 0d5b2c8695..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/ICONS/tkIcons.kde?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/ICONS/tkIcons.kde</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,195 +0,0 @@</div><div class='del'>-actattach16:act act16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBPz+/AQCBAAAACH5BAEAAAAALAAAAAAQABAAAAI2hAOCxg2h0nJHyEshi9HpxU1GOCLdZoKpQ15nibUoprKp9lh2oucUxsBRXsJh4Hjs/QTMpr8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actbookmark16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy+vERGRFRWVDQ2NKSmpAQCBKyurMTGxISChJyanHR2dIyKjGxubHRydGRmZIyOjFxeXHx6fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICACwWieY1CibCCsrBkMb0zchSEcNYskCtqBBzshFkOGQFk0IRqOxqPBODRHCMhCQKteRc9FI/KQWGOIyFYgkDC+gPR4snCcfRGKOIKIgSMQE31+f4OEYCZ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actbookmarknew16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCwqLLSytLy6vERGRFRWVDQyNKSipAQCBMTGxKyurISChJSSlJyanHR2dIyKjPz+xISGhPz+BGxubMTCBHx+fPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVfICACwWieY1CibCCsrBkMb0zchTEcNYsIiYHiwIOdEAvigdFQGE0Ix4NBbSAgsWjk+jBIAlcUYrJASChnSXZSoUDelKfoKpFALJA61ueGI2IAZmhogGFmCGGAgXsifiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actcheck16:act act16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBMT+xATCBASCBARCBAQCBEQCBAAAACH5BAEAAAAALAAAAAAQABAAAAM2CLrc/itAF8RkdVyVye4FpzUgJwijORCGUhDDOZbLG6Nd2xjwibIQ2y80sRGIl4IBuWk6Af4EACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actcross16:act act16 16:photo:16 16:R0lGODlhEAAQAIIAAASC/PwCBMQCBEQCBIQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMuCLrc/hCGFyYLQjQsquLDQ2ScEEJjZkYfyQKlJa2j7AQnMM7NfucLze1FLD78CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actexit16:act act16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBDQyNHR2dCH5BAEAAAAALAAAAAAQABAAAAI4hI+pFrHb3nEg1iWiDiINCwYDko0V9XUTda6I1TIsUMpGinyzbB6ZeGuoEr+GUDL4CXqSphPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-acthelp16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQ6XAQCBCyCvARSjAQ+ZGSm1ARCbEyWzESOxIy63ARalAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQ/EEgQqhUz00GEJx2WFUY3BZw5HYh4cu6mSkEy06B72LHkiYFST0NRLIaa4I0oQyZhTKInSq2eAlaaMAuYEv0RACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actitemadd16:act act16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBARCZPz+/Mzq9BTC3ITC1HSyzGSivAw+XBSStIS6zHy2zAQCDFyatAQOHFSStEyOtAQSJBSq1DR2nCxunCRmlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVbICCOQTmeaCAMRIC+AVu47xkTBl2Ld16XQNYBQTQBVIOkMHFQJBeMI4tAbSSu2IRDSnhAvFfI97sFRM6RwOMacbjLKckVvgvIJ5EdSU7J648VgXQ7Dmd/hyJ+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actitemdelete16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBARCZPz+/Mzq9BTC3AQCDAQOHFSStAQSJAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAQwEMhJq704681n+GAISoEwnGg6EAUQrEQsz4ThEkeu77kNIAagMEj0dY7IpHI58UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actlock16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJEQ+FExGHCQiDBwaDGxiLHxyNHRuPIR+TIyGZJSSfFxaRFxWJGRiLJyaXNzWpNTOnMzGnLy2hJSKTGReLKyqjPTu1NzarMS+jLSyfKyibJySXIyGVCQeDLSytPT29Ozu7OTi5NTS1KyurJSSjGxqVFxaXLS2tKSebOzuzLSufJSOXExGLGRiTExONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwGCgGhkhkQDBoEpLKQoBACAyOUID1qTVwoQGvMPxNFgVjAxp6QCQUicSCwVgkG44HJCKRRCYUCAxIFRYXhxgZGhYbHINEHR4fGCAhIiMkFSVKJicoKSoFKwMsLZtDLison6GjLA92qCueoAUvpC2xQhWqrLYDErmEMDEXlDIwMxAHukI0NS01EzY2NAmPAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actredo16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxOHBxSHBRGHKzCtNzu3MTSzBQ2FLzSxIzCjCSKFCyeHDzCLAxGHAwuFDSCNBxKLES+NHSmfBQ6FBxWJAQaDAQWFAw+HDSyLJzOnISyjMTexAQOBAwmDAw+FMzizAQODDymNKzWrAQKDAwaDEy6TFTGTFSyXDyKTAQCBAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ2QIBwSCwaj0hAICBICgcDQsEgaB4PiIRiW0AEiE3sdsFgcK2CBsCheEAcjgYjoigwJRM2pUK0XDAKGRobDRwKHUcegAsfExUdIEcVCgshImojfEUkCiUmJygHACkqHEQpqKkpogAgK5FOQywtprFDKRwptrZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actreload16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCRaJBxWJBxOHBRGBCxeLLTatCSKFCymJBQ6BAwmBNzu3AQCBAQOBCRSJKzWrGy+ZDy+NBxSHFSmTBxWHLTWtCyaHCSSFCx6PETKNBQ+FBwaHCRKJMTixLy6vExOTKyqrFxaXDQyNDw+PBQSFHx6fCwuLJyenDQ2NISChLSytJSSlFxeXAwODCQmJBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIBQGBAMBALCcCksGA4IQkJBUDIDC6gVwGhshY5HlMn9DiCRL1MyYE8iiapaSKlALBdMRiPckDkdeXt9HgxkGhWDXB4fH4ZMGnxcICEiI45kQiQkDCUmJZskmUIiJyiPQgyoQwwpH35LqqgMKiEjq5obqh8rLCMtowAkLqovuH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actrun16:act act16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/ISChKSipMTCxLS2tLy+vMzOzMTGxNTS1AAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARlEMgJQqDYyiDGrR8oWJxnCcQXDMU4GEYqFN4UEHB+FEhtv7EBIYEohkjBkwJBqggEMB+ncHhaBsDUZmbAXq67EecQ02x2CMWzkAs504gCO3qcDZjkl11FMJVIN0cqHSpuGYYSfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actstop16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAASC/Gw6NGQuLHQ6NGQmJFweHFQaFPTm5PTa3PTW1Oy+vOS6tNSinKReVDQWFPz+/Nx6fNyCfNyGhNR+dMxybMRiXLxGRIwWFNx2dNx+fNx2bMxuZLQWFBwWFPTu7Pzy9NRqZNRuZMRSVLwmJGwWFNR2dMQiHPTKxMxmXMQyLMxmZNx6dMxiXMRSRMRaVKxybMxaVEQWFMQuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaaQIAQEBAMCAWDYcgkHhAJxYLRcDQBggckIplQKpaLdRh4YDIaSWa94Vw6woAHgv6AMKGPaMQhwQMJJRkfhHmEJhdvRCcgGSCEkCgpbnAECiorGYYfLCItlAAFCygQj5AfbYlwBQwVE5AukG6KBi8tMC0fLi0pHxyzcAAxFxwmMny/wEwOxMm/qlcdJCSJ1H5XQh3a28HY3kx+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actundo16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBxSHBxOHMTSzNzu3KzCtBRGHCSKFIzCjLzSxBQ2FAxGHDzCLCyeHBQ+FHSmfAwuFBxKLDSCNMzizISyjJzOnDSyLAw+FAQSDAQeDBxWJAwmDAQOBKzWrDymNAQaDAQODAwaDDyKTFSyXFTGTEy6TAQCBAQKDAwiFBQyHAwSFAwmHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ1QIBwSCwaj0hiQCBICpcDQsFgGAaIguhhi0gohIsrQEDYMhiNrRfgeAQC5fMCAolIDhD2hFI5WC4YRBkaBxsOE2l/RxsHHA4dHmkfRyAbIQ4iIyQlB5NFGCAACiakpSZEJyinTgAcKSesACorgU4mJ6uxR35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actunlock16:act act16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaVAQCBKSipDQyNMTCxISChFxaLFxSJExGHEQ+FCQiDBwaDBweDGxiLHxyNHRuPIR+RIyGZJSSfFxaRGxmLJyaXNzWpNTOnMzGnMS+jJSKTGReLKyqjPTu1NzarLSufKyibJySXIyGVGxiNFxaXLSytPT29Ozu7OTi5NTS1KyurGxqVCQeDJSSjLS2tNTW1KSmpGRiLKSebOzuzJSOXExONExGLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaVQIBwOAwYA8SkMCAYOAnKYiFAIAQGyOgVCggYuEovVxztMpdnwAGRSCgUCwOjIeQ6HpCIZDKRUNYMRBUWF4UYGRoWGxyBRR0eHxgaICEiIyR0QyUmJygpKgUrAxMsLUQlKyieoKIuEAunK52fBS8DLiywQySpnjC1Mbi6QjIzNBeSIBY1EQfDQgosLAEUNjY3Co1DfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appbook16:app app16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBDyKhDSChGSinFSWlEySjCx+fHSqrGSipESOjCR6dKTGxISytIy6vFSalBxydAQeHHyurAxubARmZCR+fBx2dDyKjPz+/MzKzLTS1IyOjAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVkICCOZGmKQXCWqTCoa0oUxnDAZIrsSaEMCxwgwGggHI3E47eA4AKRogQxcy0mFFhgEW3MCoOKBZsdUrhFxSUMyT7P3bAlhcnk4BoHvb4RBuABGHwpJn+BGX1CLAGJKzmKjpF+IQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appbookopen16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBExCNGSenHRmVCwqJPTq1GxeTHRqXPz+/DwyJPTq3Ny+lOzexPzy5HRuVFSWlNzClPTexIR2ZOzevPz29AxqbPz6/IR+ZDyKjPTy5IyCZPz27ESOjJySfDSGhPTm1PTizJSKdDSChNzWxMS2nIR6ZKyijNzOrOzWtIx+bLSifNTGrMy6lIx+ZCRWRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQEAAQCwWBYJiYEAoGAFIw0E5QCScAIVikUgQqNargtFwdB9KSDhxiEjMiUlgHlB3E48IpdKdLCxzEAQJFxUTblwJGH9zGQgVGhUbbhxdG4wBHQQaCwaTb10emB8EBiAhInp8CSKYIw8kDRSfDiUmJ4xCIxMoKSoRJRMrJyy5uhMtLisTLCQkC8bHGBMj1daARgEjLyN03kPZc09FfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appboxes16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMT+xAT+BASCBATCBMT+/AT+/ASChATCxPz+xPz+BISCBMTCBAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEEgZwrwYBCFqvhs3DNYXjChRlWBRjIRqGN4UuEUczMZxsDeXykdEsDQVVSLhQxhBCkVlmXA+KVHFYhFYOoHbMGN6pTQaW8YYiQmcG+q16a0+Zipw+4e9B/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-appbox16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBPz+xISCBMTCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANECKoR6ys2IVqokF08yMTA1gwkYX5WQK5ma4VceTYPxXnBWdtY6+0834/Bowgzm6APWRQcH4TiMhPK2WYRiZWW7XK7/gQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appbrowser16:app app16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxONCROfCRKfKx6LNy+bNTOpGSS1DRupAwyXBRSnPTSjPTqvOzqzMzSvHSSlKy6ZDxutAxCpBQ2XBxepLTKvPzqzPzy5OTShLS2dLSqRFR2jBRerBQ+jOTixOzetNS2XHx6XDR2tCRexBwyTDyKzOTavPzq1OzKdCx23BRKtCQ6VCQmHFSa7IyirOzSnGSGpIR+bFSO1DyK7DR+5CRixBw2VDQuHFye7IS27NzGXISuhEyS5DR25BRWxBQ+lBQyXCQqPCxSfGyu7GyerKy2ZFR+rERqfCRmxBROtBQ+fBwuTBwmNDSW9JyabLyqRIx+TExSXBQ6bAQCBBQ6ZBxapDR+zBxq3LyaLJySRHxqPGxeNBxGbCRmrHRyRERONDRKNDQ2JCQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAeygACCg4SFhgABAQIDh4MBBAUGBwgDCYcKCwwNDg8QERIThRQVFhcNGBkaGxwdoYMDHhcXHxggISIjEiSvJSYXJwsoISkpIyorLIIDLS4WLzAxMjM0NSo2N8o4OS46OzwzPSk+P0BBgkI8Q0NERUZHCEhJSktMgwk4Qy1NTk9QUVJLphCiUsWKlStYsmjZQiJgIS4KuijQ4iXAFxYCDVFJwGUFmDBhMjYSw0KMyEYoBfkJBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appcalc16:app app16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBISChPz+/AQCBCH5BAEAAAAALAAAAAAQABAAAAI4hI9pwe0Ogpi00hHF2LzzzFlTsIHD45SSx6oCeW4wjK2tl83y7t64pIsJaxrfh2bEAJIlhRPhLwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appclock16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAALy+vAQCBPwCBMQCBIQCBISChPz+/MTCxCH5BAAAAAAALAAAAAAQABAAAANbCLHcrSLKOZcYmDSCsR1aUABAsXDDJwJGa5SBFwgaWxbCG3CWaBwG3C8Y67FawpYiNQscg65fsVkYuoAmJs1pBR522lQB6ILJLqHRwQQOZzYdZnw+dzruDIA/AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appdate16:app app16 16:photo:16 16:R0lGODlhEAAQAIQAAASC/AQCBPzerPyqXMRaBIQCBISChPz+/KSipMTCxPz+BMTCBPwCBPz+xPzCxMQCBISCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVxICCOQGCeJjkGwkC8RFEEavkax2G8dB0QuRyhhzoBg8MSYsncJXKJZIDZHCoWP1ogGIwGrtnSgUFmHLyNRHhrdpjRamnO/SYkromHdnxwnwkKVxByZW8DgQsQM2JcfwZXO0MBCZSVBgMuLzJaRZ0pfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-apppencil16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAASC/IQCBMQCBPzCxAQCBPz+/MTCxISChDQyNKSipEQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARDEMhJZRBD1H2z3lMnjKCFjUJQimOgcmcbELCXzjXq0hV785WCQYcDFQjDXeloMByKG6YTAdwIDAlqSZJSVFeKLcUfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-appsheet16:app app16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBAT+/Pz+/KSipPz+BAAAAAAAACH5BAEAAAAALAAAAAAQABAAAANFCBDc7iqIKUW98WkWpx1DAIphR41ouWya+YVpoBAaCKtMoRfsyue8WGC3YxBii5+RtiEWmASFdDVs6GRTKfCa7UK6AH8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-apptool16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBISChGRmZMTCxKSipLS2tHx6fPz+/OTm5FxaXOzu7DQyNMzOzAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAReEMhAq7wYBDECKVSGBcbRfcEYauSZXgFCrEEXgDCSeIEyzKSXZoBYVCoJVIqBGByKu0Cy8QHxmgNngWCkGgqsGWFseu6oMApoXHAWhWnKrv0UqeYDe0YO10/6fhJ+EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-apptools16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBExKTERCRAQCBOzu7Nze3MzKzLy+vCxqZBQ2NJyanKyqrGRiZDRydKza3FRWVPT29LSytDw6PMTm5EySjCxaXGRaJFSanCRSVGxqbPTmvMSqVJTW1GSurHS6vOzq7KSipISChFRKHJSGNPz23GxKFBQ6PKyurCwqLMyufJx2RAQGBJSWlEwyDIRiLNy+lLSKVDwmDJRuNOTOrLyabGRCFDx2dKSCVOzWtHzCxOTGnNSyhAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAahQIBwCAgIBAOiUiggFAyHASKxDAwUC8Zg0HAglA9IZPGQABoTSqJCFTIOEIsFgHBcEhhHUpKJFCwaGxYYHB0VEx4IEh8gIQwiIyQbJRMcHokmEicfDygAkCkqJQgIGG0rLElCLS4vMCWqQwMCQg0UMTIzNDVLQjaIGDE3ODQlS785CEkxKjowvEOHybG4O6JDCdNKuDUxRAmxRDHeveUAfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appuser16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MTCxISChMT+/ATCxASChFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMg5gw00yyDGIAR1YUDggeFWFIZhnSBZrsZxdIOFEGTA2oeBAHeyuGwvzxBlYdUOLROMFzDQntJPrNoqAKUBaqnV+k57ZORruykHDj2LqIzUVKp1u0iuB/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-appusers16:app app16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxISChAT+BMRaBPyqXARCBPz+/FxaXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARLEIRJa5Ui673nsGAgeKE1Bl9AUEXbiqTlFlZaGUZoszm4BzhDAVf5BYbAXI+TAR6CS2ZGSZSEiIIqYIsSIEaJ7GRrlY7J1lKA7I8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-appwp16:app app16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBKSinJyOfPz27Pzy7AwKDExOTJyWlERCRKSelPz69LyyrKymnPz+/MS2fDQyJAQCBOTazLSiXOzivMS2jKSSVOzmxPz25NzSpPTu5KyebOzixNTGjOTWpMSydMSybCwqFGReVKyaXNzSnGxeNJSCVMS2nPz23MSuZIR+bJyShLyqnOTOtGxiXIR6XOTSvIx6RMSubIyCdKSalMS6pOTWxMzKvKSabJyKTOzezHxuPGRmZKyurMTCvPTq3AAAACH5BAEAAAAALAAAAAAQABAAAAajQIBwCAgIiEhiYEA4FgwHRDKhIBAWz4OhgGQ0FAPHA7qFEBONb0Qy0ULeQ2+aUrFcMI+3GYBOZzQbHB0eHyAhIQByDREiEwMjFRIkJQImAgJ+jScjHigkKSorLC0AKg2NFSMoki4qCy+IQgITKDAxkjIzNDWkQxQoJaskMgk2Eb1DNzgoOCoHDDY5yEIwJToAOzw9ET7TQiREAhkZ3kmy5QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cal1day16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANOCLrMEUDIOUS9AFLLhx8LIRZjKYZmMRCkaChFLHty/AIiS3y6q+QtT49wq8VotRtQJGwRf6Zmrlj7DJLQXsupTJmeEIN4TB5nII20wp8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-cal5days16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANMCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiIdMmcec7jy53q81qP9OO5VMAj8RXTFWzOZW95HDLdEEM4LA4nIE0zgp/AgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-cal7days16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANPCLrMEUDIOUS9AFLLhx8LIRZjKYbj55GioRRwoQ5x4QIiwcp0fucsj873qvGMv5Jw2FIACUsW4WakGW1O046I05qmGYBhTC6TM5CGWuFPAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calappointment16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxPz+BISCBISChKSipAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARbEMhJaQhA6D1E/wDGeeRgDhOhFoTBEi+REgdrIHScSEVvAD9Xr7cDqGSGpFEnQSqTv2NxCFQOiU1VEAiTZmstHFg1vQKuw+LxxfYaV/AuOQRI2O/4ewhT6Uv8EQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calbell16:cal cal16 16:photo:16 16:R0lGODlhDwAOAIIAAPwCBISCBPz+BIQCBMTCxISChPz+/AQCBCH5BAEAAAAALAAAAAAPAA4AAAM+CLrR+zCIAWsgLVRGRBhOVQiG94WPVAbHaZHYAWqRYLbge88RsbInGuBCEhRYrZYm4xk4nYdoKzKIbiKHawIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-callist16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/KSipPzerMRaBEQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARDEMhJaQhA6D1E/wDGeeRgDhOhruyatjBRSIRxxOsMEAdC0BUZDcfSEYvDo3Bn++2Cxt7RqFxWhZiCdsvdhjCVsMQfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-calmonth16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBAQC/AQCjPz+/MTCxKSipAAAACH5BAEAAAEALAAAAAAQABAAAANSCLrMEUDIOUS9AFLLhx8LIRZjKYbiRxLFIBpK0Q6z7MkwkJIe8b0KEeuWchFysuStVsjtfMbeMQitWpG25YfmNK1WU53XNIUYzug0OgNpuBX+BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-caltoday16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBPwCBAQC/AQCjPz+/MTCxKSipPyCBMRaBPyqXAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARTEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyIQhFfiBIAfuFzaAioBIJBCummRYPCaDPh3vhwsOZdihNfa8Ub/AJXemFZPPNBvGwG672yFMZS7xRwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-caltodo16:cal cal16 16:photo:16 16:R0lGODlhEAAQAIMAAAQCBAT+BAQC/AQCjPz+/MTCxPzCxKSipPwCBMQCBIQCBAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAARaEMhJaQhA6D1E/wDGeeRgDhOhFmurpi5LyMYhFXiuFwZiA6qZYbbqJX5BIw2RAPxwAAWCyWMCCsiXFGEEErKz6LQZfOqiTR1YJiGq1rFyyHmo2+/1EKbCl/gjACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connecting16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZbihUiz60FPnfaA0iBpBVGdHEYWxToEoSHBRHHM9AgSEQRcj+AYkYAJxIPKQFUJiOdTJQFIDU6dYzKKFhTCM+E5g4mXaDAyrlogEG+DGTecA7wsP8EcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connectno16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBPz+BMTCBAQCBERCBPz+/MTCxMTGxISChFxaXMzGzKSipAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARPEMhJq704axBEHoPUEdhQGMNYFuwxkKInDYjBniEnwMCQIIebSzXx/WwsFK+YMABZikWuYlrUCtZpEYv4WRPaHhb064YB41kCfJFSQBh/BAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-connectyes16:connect connect16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/KSipDQyNMTCxMTGxISChFxaXMzGzAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARaEMhJZxCjgsAtDtUlCOA1gJQ4kl/IDatAoF7xxkS6GgEBr6jAobCyBX42SQBxMOx6A8MhiGASR8YDgrYsNEeJ0zaEGZY7uoH2oB6nOUwtbdLaVOeTUwo/8UcAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-devcdmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tOzOvNTqvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/LzKvMTCxDQyNASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAa0QIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTBqUiuUCVmAeiYzmsKlwOt/AAKFIFAIIFx4WHyAhUwIDIgsZFyMkFxchJSYmiBkSBBoIJJwIGgOhiCYFJSEnFyQjFwNZewABISAfFiYnCAEmCREIrwAIFhwVGwcaBAkPGApsQsAVFA0GBQMRbxBTKM0ODQwTEq192ClDgROkBHvYKuNJUu5CKCorX1RDKCkpUn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-devcdunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXISChNTS1MzKzMTGxMy+vNSytAQCBOzq7OTi5Nza3Oy6vPy2tOTStPz6/Ozu7Nze3MTKxOS2tNzmvLT2tDw+BPTy9MzOzLS2tPy+tLz+tLz2tLSynLzqvLzavLTOtNTW1KSipPz+/MTCxLy6vDQyNOTm5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAapQIBQGBAYA8Ok0DggFAwHBEIJECQUi8GT0XBMh9YHJDKQTLqUigWsuDwSmMxBQ9lwvoEBQpEoBBAWHRseHyBTAgMhCxgWIiMWFiASJCSHEgQSGQgjmwglGKCHBQUSICYWIyIWAwshIVMBIB8eFSQmCAEFCREIekIIFRsUGgcZEgkPFydrvxUUDg0GBSEREGJfv9AMEySsJxDYQ4DcEhh64UpS6lTs7QB+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-devdiskmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKROzSrOzKpOTGnLSafLySZKxuLMSOVPTWvPzixLSehNyibOzOrGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTOpHxOJKyKXFw+HKSipISChMTCxFxaXIRiPNSWXExOTOS2hLR+PLRyLPTWtMyOTASCBARCBPz+/DTSJIyKjIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaTQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwrA3HQ7scQAqFAcEQOUi0zAkFUSFYLghMBloUCDQNGxwdHhwHekcfICEhICIfIxkLJBABJUYCICABIhAOBiYnKJaXmH4CGSkYCCqkSAEfTKenrkOwsrQll0IrS7G5uwArLLaxLbXCLsTFLyDBKy4wZEVHvCwsRn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-devdiskunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBDQyNIRuVKyCXMSKRPTWtOzKpOTGnLSafLySZKxuLMSOVOzOrPzm1LSehNyibGxaVJx+XOzGnFw2FJRuPKx+TPTSrHRWPKyKZPTWvHxOJKyKXFw+HPTOpKSipISChMTCxFxaXIRiPHxaNLRyLNSWXExOTPzixOS2hLR+PMyOTPz+/IyKjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaIQIBwCAgYA8SkMCAYDARI5ZJQMBwQiWgyoFgwGgiD46FdDiCFwoDQAEe0TMkEQSFULIcLBloUCDIaDRscHRsNHhhHHyAhISAiHyMkJSYQASdGAiAgASIQKA0pKguXmJl+AiQGFwgrpUgBH0yoqK9DsbO1J5hbsrq8SrgstlJFHy0gwMVFR1J+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-devfloppymount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVASCBARCBDTSJIT+bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVrICCOQBCQKBkIw5mqLFG47zoQ+FwbN57TosDhgPD5dMEEIqE04kwlBWKBUEiNVYFpyqAyGEUCgqEtERiNNMLhQKzLQYJg7n7Y4aMAwbCUPvAQeWNgfzQQETAIhSMQEogwgBITQEGGEREmfiEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-devfloppyunmount16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBMTCxARmZPz+/FSWlLSytKSipERCRIyOjISChOTm5HRydNza3GRiZFRSVCH5BAEAAAAALAAAAAAQABAAAARcEMgJQqCYBjFu1hxReN82EOhYGieaklJwHIjrqnGCJLqNWhUFYoFQCG1FgWXIIDIYNQKCoawQGI0swuFAbKsxgmDsfZjBkwDBsNM90Jot9A3DbBD0Dwiur9QnfhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-devnetwork16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBAQCBISChPz+/Nza3ARaZESanCyKlARudARGTLy+vNzq7ARmbMTCxARufAROVMzOzKSipARyfOzq7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVmICAGZFmKQiACweCSBImq41AYB5IodLq2hwWO0ejRWDac48Gb/QKNqNRoqspmrVcAUuIJBANS8sBIFCORUgooPEh4J8B67NgdsVBp9C5XWfl9LRMTCyReX19hARNojWlWLH+AAH4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-devpc16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBISChHx+fPz+/AQCBAQC/AT+/AQCxAQChAT+BLy+vAR+BAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARYEIAgqK1YzsG754QUDERpmkEpkkXrtoK6EcVgHIibhnNx564Yb0TDvQq7FQ34EiqPOhnREqhWSUPsyZSQAbbg7GcMEgwUiYVivTa1R+y4XEGoWO/4AMAfAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-devscanner16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBAQCBPz+/MT+/ASChARCRATCxMTCxFxaXKSipDQyNAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARTEMgJgqWBVivEldkUdKSXhVjZfenommglDERh3Tc4E4ZRHAGgkEPr9X6H5AHBERSMRyWzkug8jQXFEhWoOo8dRYxqLXSmGjIJnVaz29Q3fAP3RwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-devscreen16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXFRSVPz+/PT29OTm5OTi5DQyNDw+PERGRExKTHx+fISChIyKjHRydFxeXDQ2NCQmJBQSFAQCBERCRMTGxHR2dGRiZExOTDw6PCQiJAwODCwuLFRWVOzu7BweHAwKDCwqLHx6fBQWFGxqbGRmZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAanQIBwSCwKAwKkMslEAgSDqDRKqBYKhkNgcDggEorkMrDQchkNhuOhgEQkk0l5S2lUGpYLJqPZTAwMHB0DCmhqAW0Rfh5zAxgOkBcCFAcfIBMECxwBBAEPFw8dChkhcBMDDAcdnQqtFKSWcQMimx4dGRkQBxGxsg6bBQEawx8jl3GnJFoFHRNXVVNRJYIFDAsL1tgiDiQXFx0HABwcXeQH5OjkRutEfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-devspeaker16:dev dev16 16:photo:16 16:R0lGODlhEAAQAIMAAPwCBFxaXAT+/DQyNATCxMTCxPz+/AQCBKSipASChAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAARWEMgJQqCXziDG2JoUEENhZBkmHIWJVptAmqcIW/Js1MiF56TBzkckAAcHoa9nMRKeA4TyJk0knsHhTeK5khBaH2VwLYVh40TJhQ6RzeIQV32Quz8hfwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editcopy16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAFxaXPwCBNze3GxubERCRPz+/Pz29Pzy5OTe3LS2tAQCBPTq3PTizLyulKyqrOzexLymhLy+vPTy9OzWvLyifMTCxHRydOzSrLyihPz6/OTKpLyabOzu7OTm5MS2nMSqjKSipDQyNJyenLSytOTi5NTS1JyanNTW1JSWlLy6vKyurAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAaUQIBwCAgYj0eAYLkcEJBIZWFaGBie0ICUOnBiowKq4YBIKIbJcGG8YDQUDoHTKGU/HhBFpHrVIiQHbQ8TFAoVBRZeSoEIgxcYhhkSAmZKghcXGht6EhwdDmcRHh4NHxgbmwkcCwIgZwqwsbAhCR0CCiIKWQAOCQkjJAolJrpQShK2wicoxVEJKSMqDiAizLuysiF+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editcut16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIEAAPwCBAQCBPz+/ISChCH5BAEAAAAALAAAAAAQABAAAAIwhI9pwaHrGFRBNDdPlYB3bWHQ1YXPtYln+iCpmqCDp6El7Ylsp6ssR1uYSKuW0V8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-editdelete16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPT29GxubMzOzDQyNIyKjHRydERCROTi3IyKhPz29Ox6bPzCxPzy7PTm3NS6rIQCBMxCNPTq3PTi1PTezMyynPTm1PTaxOzWvMyulOzGrMymhPTq5OzOtNTKxNTOzNTCtNS+rMSehAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaKQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhSEQkFgrBAcr1URiPhKAsDD3QB8RhA3FM0IlLHnyUTVBMSFBUWfl0XGBMTGBcZGodmcQWKjpAbHIgIBY2LHRoempOdjooTGx8giIOPFYofISJ+DyMXI6AfFySyfiUmJSUnKBYcICIpfgELzM3OZX5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edit16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBFxaVMR+RPzKjNze3AQCBMR6RPzGjPyODPz+/MzOzPyKDPyKBPz29OTWzPyGDPyGBOx6BOza1OR2BKROBNSOXKRKBBwOBOzu7PTWxPzizOySZPyCDFxaXOy2lNRyRMxmJCQOBPTm1OzStPTKrMR+XIRWLFxGNCQSBDQyNIRSNDQuJERGRLyqlNzSvIx6ZKRuVEw6LLSyrLymhKSShBwaFFROTJyWjMS+vNzW1OTazNzKrHRqXOzezOTOpPTq3OzWvOTStLyedMS+rLy2pMSynMSulAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAewgAAAAYSFhoQCA4IBBI2OjgUGBwiLBAmXlpcKkgsMlZcJBA0JDpIPEBGVjwkSBgOnExSfmBIVBxAMExYXswkYGRobHLq8gh2PHhoeHyAWIYKzIiMkJSYnKCnQg5YNHtQqKywtK9qMBC4vMDEBMjIz2dCMDTQ1Njc4OToz5PEEOzw3ZPToMcLHO23HfogQ0QMIkCA+hPBbhAPHECJFjMyYIUQIvEUpUqwQOXKkSEF+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editpaste16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQiFHRqNIx+LFxSBDw6PKSaRPz+/NTOjKyiZDw+POTe3AQCBIR2HPT23Ly2dIR2FMTCxLS2tCQmJKSipExGLHx+fHR2dJyenJyanJSSlERCRGRmZNTW1ERGRNze3GxubBweHMzOzJSWlIyOjHRydPz29MzKzIyKjPTq3Ly2rLy+vISGhPzy5LymhISChPTizOzWvKyurPTexOzSrDQyNHx6fCwuLGxqbOzKpMSabAQGBMS2nLyulMSidAAAACH5BAEAAAAALAAAAAAQABAAAAa7QIBQGBAMCMMkoMAsGA6IBKFZECoWDEbDgXgYIIRIRDJZMigUMKHCrlgul7KCgcloNJu8fsMpFzoZgRoeHx0fHwsgGyEACiIjIxokhAeVByUmG0snkpIbC5YHF4obBREkJCgon5YmKQsqDAUrqiwsrAcmLSkpLrISLC/CrCYOKTAxvgUywhYvGx+6xzM0vjUSNhdvn7zIMdUMNxw4IByKH8fINDk6DABZWTsbYzw9Li4+7UoAHvD+4X6CAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editshred16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbGxubMzOzPz69DQyNIyKjERCRPz29PT29OTi3IyKhPz27PTu5PTy5Pz6/Pzy7PTq3OzexLyqlPTm1PTizOzavLyqjOzWvOzaxLyifOzizOTOpAQCBOzezAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaEQAAgQCwahcihYMkcBAiBpLJApRoOBWgyIKhWEQkFYYHkeqkMxKFBFpq9jgdkEGlPqwrJhCIY2N8FFRYUFxcYGX9dgRKEGhiHiYEOhBcbGBwdiQEOARcBGwEeAZllAgEUnQEfoQEgmp4hrCKtrwEYsrRlTiMBJAG8syN/IyMAxMXHSH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edittrash16:edit edit16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBAQCBKSipFxaXPz+/MTCxISChDQyNCH5BAEAAAAALAAAAAAQABAAAANQCKrRsZA5EYZ7K5BdugkdlQVCsRHdoGLMRwqw8UWvIKvGwTICQdmGgY7W+92GEJKPdNwBlMYgMlNkSp3QgOxKXAKFWE0UHHlObI3yyFH2JwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-fileclose16:file file16 16:photo:16 16:R0lGODlhEAAQAIQAAPwCBCQiJBwaHAQCBDQyNDw6PFxaXFRSVERGRCwqLAwODGRiZHx6fPz+/GxqbAwKDCQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVaICCOZGmeqBgEwjCkRGEcSKK4JrEcBrMgAdeLVDg0GguGsYEbBQyGYyN6FDoPDIf0+LCKBIgetQERDgGDBGIpNY8GioAU0m6KXFw883w3+/l9f4AkfimGIn4hACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-filedocument16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJSWjPz+/Ozq7GxqbJyanPT29HRydMzOzDQyNIyKjERCROTi3Pz69PTy7Pzy7PTu5Ozm3LyqlJyWlJSSjJSOhOzi1LyulPz27PTq3PTm1OzezLyqjIyKhJSKfOzaxPz29OzizLyidIyGdIyCdOTOpLymhOzavOTStMTCtMS+rMS6pMSynMSulLyedAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaQQIAQECgajcNkQMBkDgKEQFK4LFgLhkMBIVUKroWEYlEgMLxbBKLQUBwc52HgAQ4LBo049atWQyIPA3pEdFcQEhMUFYNVagQWFxgZGoxfYRsTHB0eH5UJCJAYICEinUoPIxIcHCQkIiIllQYEGCEhJicoKYwPmiQeKisrKLFKLCwtLi8wHyUlMYwM0tPUDH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-filefind16:file file16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBCQmJDw+PBQSFAQCBMza3NTm5MTW1HyChOT29Ozq7MTq7Kze5Kzm7Oz6/NTy9Iza5GzGzKzS1Nzy9Nz29Kzq9HTGzHTK1Lza3AwKDLzu9JTi7HTW5GTCzITO1Mzq7Hza5FTK1ESyvHzKzKzW3DQyNDyqtDw6PIzW5HzGzAT+/Dw+RKyurNTOzMTGxMS+tJSGdATCxHRydLSqpLymnLSijBweHERCRNze3Pz69PTy9Oze1OTSxOTGrMSqlLy+vPTu5OzSvMymjNTGvNS+tMy2pMyunMSefAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAe4gACCAAECA4OIiAIEBQYHBAKJgwIICQoLDA0IkZIECQ4PCxARCwSSAxITFA8VEBYXGBmJAQYLGhUbHB0eH7KIGRIMEBAgISIjJKaIJQQLFxERIialkieUGigpKRoIBCqJKyyLBwvJAioEyoICLS4v6QQwMQQyLuqLli8zNDU2BCf1lN3AkUPHDh49fAQAAEnGD1MCCALZEaSHkIUMBQS8wWMIkSJGhBzBmFEGgRsBUqpMiSgdAD+BAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-filenew16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFxaXNze3Ly2rJyanPz+/Ozq7GxqbPz6/GxubNTKxDQyNIyKhHRydERCROTi3PT29Pz29Pzy7PTq3My2pPzu5PTi1NS+rPTq5PTezMyynPTm1Pz69OzWvMyqjPTu5PTm3OzOtOzGrMSehNTCtNS+tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ/QAAgQCwWhUhhQMBkDgKEQFIpKFgLhgMiOl1eC4iEYrtIer+MxsFRRgYe3wLkMWC0qXE5/T6sfiMSExR8Z1YRFRMWF4RwYIcYFhkahH6AGBuRk2YCCBwSFZgdHR6UgB8gkR0hpJsSGCAZoiEiI4QKtyQlFBQeHrVmC8HCw21+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileopen16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBOSmZPzSnPzChPzGhPyuZEwyHExOTFROTFxaVFRSTMSGTPT29Ozu7Nze3NTS1MzKzMTGxLy6vLS2tLSytDQyNOTm5OTi5Ly+vKyqrKSmpIyOjLR+RNTW1MzOzJyenGxqZBweHKSinJSWlExKTMTCxKyurGxubBQSFAwKDJyanERCRERGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaRQIBwGCgGhkhkEWA8HpNPojFJFU6ryitTiw0IBgRBkxsYFAiGtDodDZwPCERCEV8sEk0CI9FoOB4BEBESExQVFgEEBw8PFxcYEBIZGhscCEwdCxAPGA8eHxkUGyAhIkwHEREQqxEZExUjJCVWCBAZJhEmGRUnoygpQioZGxsnxsQrHByzQiJxz3EsLSwWpkJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileprint16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBFRKNAQCBPz+/MTCxExKLPTq5Pz29Pz6/OzezPT29PTu7PTy7NzClOzm1PTu5LSabJyanPTm3FxaXOzCjOTKrOzi1OzaxOTSvJyenGRmZLyyTKSipDQyNERCROTi5Hx+fMzKzJSSlIyOjISChLS2tAT+BDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaYQIBwKAwIBMTkMDAYEApIpVBgOCAOg4RRGlAoEAuGIdGITgWOq4LxcCQgZkEkIHksHgYJOR6ZQCgVFhYJFxgTBVMZihoCfxUYDWUbUBGKGREcjBoQEB2TAB4CAx+Vl5WMhyACHiEhH6IfIiMktCQgE0cZJQStr6O2t6EARxO6vK6iEx4dZsMCxbsmBB4nzUTEutVSSUdmfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filesave16:file file16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBFRSVMTCxKyurPz+/JSWlFRWVJyenKSipJSSlOzu7ISChISGhIyOjHR2dJyanIyKjHx6fMzOzGRiZAQGBFxeXGRmZHRydGxqbAwODOTm5ExOTERGRExKTHx+fGxubNza3Dw+PDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaAQIAQECgOj0jBgFAoBpBHpaFAbRqRh0F1a30ClAhuNZHwZhViqgFhJizSjIZXQCAoHOKHYw5xRBiAElQTFAoVQgINFBYXGBkZFxYHGRqIDBQbmRwdHgKeH2YgHpmkIR0HAhFeTqSZIhwCFIdIrBsjAgcPXlBERZ4Gu7xCRZVDfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-folder16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBwWHMzKzOzq7ERCRExGTCwqLARqnAQ+ZHR2dKyqrNTOzHx2fCQiJMTi9NTu9HzC3AxmnAQ+XPTm7Dy67DymzITC3IzG5AxypHRydKymrMzOzOzu7BweHByy9AyGtFyy1IzG3NTu/ARupFRSVByazBR6rAyGvFyuzJTK3MTm9BR+tAxWhHS61MTi7Pz+/IymvCxulBRelAx2rHS63Pz6/PTy9PTu9Nza3ISitBRupFSixNTS1CxqnDQyNMzGzOTi5MTCxMTGxGxubGxqbLy2vLSutGRiZLy6vLSytKyurDQuNFxaXKSipDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQYHCImDBgkKCwwNBQIBBw4Bhw8QERITFJYEFQUFnoIPFhcYoRkaFBscHR4Ggh8gIRciEiMQJBkltCa6JyUoKSkXKhIrLCQYuQAPLS4TEyUhKb0qLzDVAjEFMjMuNBMoNcw21QY3ODkFOjs82RM1PfDzFRU3fOggcM7Fj2pAgggRokOHDx9DhhAZUqQaISBGhjwMEvEIkiIHEgUAkgSJkiNLmFSMJChAEydPGBSBwvJQgAc0/QQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folderhtml16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBERGRBQWFMzKzOzq7CwqLDw6NARqnAQ+XHR2dKyqrOTm5ExKTERCRHRydMTi7NTu9HS+1KSmpBweHDy67DyixHS61ITG3AxypByu7DxinBw+ZERmdIySjITC3ARypExOTDRurIR2RPTSdJyulEyGvBw+bFSyzJTK3LzKvPzivOTixNTChLSybGyCfCRSnBQqRASGtFyuzDw+PCRShPzy5OzerOTShKyaTEx6pCxerGRufBR+rOTezPTShNy6bER+1BxCfBQuRAxelFSixBw2VISq3GySrPTWlHyanIyitFSO3IymtCRujAxWhCRqlCQ6XGyWvNS2bFyGvDxuvCRSpLy+vMS+vGxqbFyO1GSi3EyO1FRaVCQuPLS2tDxyzKyWNFxaNCQyPGxubCxajERSVExKNJyenAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfZgACCAAECg4eIAAMEBQICBomDBwgJCgsEDA0BDg8BhwYQERKUDxOYDAyeghQVFhehGBmVlwwOqxobHB0eH6EfIAkPIYIiIyQlJhsnKBcpvrYiKissLS4vMDEyFjOvNAA1LDY3ODk6Oyc8PTIyFzQ1Jj42P0A6QTtCQ0REIEUORkdIkihZwsSekBhNnDyBciCKiSNSplDRUcWKkRhXCGDJYgiGli1cpuTocsILjytfFmRpACAGRTBhRogZgzHlAjKGWnIoY+bMgRgBDHRBo/LAIZoxuhwKatRPIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-folderlocked16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQSFMzKzOTm5CwuLERCRARqnAQ+XHR2dKSmpOzm5GxqbCQiJMTi7NTu9HS+1HRydOTm1Ozq7Dy67DyixHS61ITC3AxypERGRBweHByu7ASGtFyy1DSOtDRmfExOTBSazBR+rCwqLAxWhAxelByGtDSaxAwODHy+1Dw+PPT29IyqvCxujOzu7NTW1Nza3ExGJJyebKyqfMTCpFRSPOTi5DQqHOTezDw2NMTGxKyqhMTGrGxmXDQ2NMTCxMTGpHx6bHx2bBQWFIyOXDQuDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfDgACCAAECg4eIAAMEBQICBomDBwgJCgsEDAKFDQGHDg8QEZQSlxMUDJ2CDhUWF6AYGZWXFBqCGxwdFh4XGK8fIAohtiIIIx25EZwBDREHgiQjJSYmGScoKSoRKQ8rggIsDC0uJS4oGygoAyjdAAcsLxQUMDEyMzQ1EzapBy8MDDc36tFwgONFjlQ6dgCEEZBHDx8+ctRIRehHAyAwZASZIGRIEBoUBwUwIGMCiwFEaBQJichIjo9FZLBsacRIAB0A/AQCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-foldernew16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAQCBPz+hPz+BOSmZPzSnPzChFxaXMTCBPyuZPz+xPzGhEwyHExOTPz+/MSGTFROTPT29OTm5KyurDQyNNza3Ozq5Nze3LR+RLy+vJyenMzKzNTS1Ly6vJSWlFRSTMzOzMTGxLS2tKSmpGxubBQSFAwKDKSinJyanIyOjCQiJERCRERGRBweHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaNQIBwSCwaj8ikcokMCIqBaEDoBAQG1meAUDAQpIcBQoy1dg2JdBqhECgQ1IWB0WgcBIOBwIHXBwwPEBEREhIBbG4IExR/DBUVFhIXV2NjDVYYDY8SFU4ZVxpVAQwbGxynGxkdTh6XVh8gGSGzGSITIxokJUImGSMTwLcnKCkprgAqDSt1zCssKxQtQ35BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-folderopen16:folder folder16 16:photo:16 16:R0lGODlhEAAQAIYAAPwCBAQCBExKTBQWFOzi1Ozq7ERCRCwqLPz+/PT29Ozu7OTm5FRSVHRydIR+fISCfMTCvAQ6XARqnJSKfIx6XPz6/MzKxJTa9Mzq9JzO5PTy7OzizJSOhIyCdOTi5Dy65FTC7HS2zMzm7OTSvNTCnIRyVNza3Dw+PASq5BSGrFyqzMyyjMzOzAR+zBRejBxqnBx+rHRmTPTy9IyqvDRylFxaXNze3DRujAQ2VLSyrDQ2NNTW1NTS1AQ6VJyenGxqbMTGxLy6vGRiZKyurKyqrKSmpDw6PDw6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAfCgACCAAECg4eIAAMEBQYCB4mHAQgJCgsLDAEGDQGIkw4PBQkJBYwQnRESEREIoRMUE6IVChYGERcYGaoRGhsbHBQdHgu2HyAhGSK6qxsjJCUmJwARKCkpKsjKqislLNIRLS4vLykw2MkRMRAGhDIJMzTiLzDXETUQ0gAGCgU2HjM35N3AkYMdAB0EbCjcwcPCDBguevjIR0jHDwgWLACBECRIBB8GJekQMiRIjhxEIlBMFOBADR9FIhiJ5OnAEQB+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailforward16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRydHxubHxmZGxiXHRmZFxOTFxGPFxKTPwCBLymlMy+pOze3PTq3PTu5Pzy7LSmnOTaxOzm5LyqlNzOtPz69Pz27MzCtLyqrPT27IRubPzuzNTGvNTCxLSelPz25Bw+ZFxKPPzy1Pz65LyupBxKdCxWfPTm1Pz23LyinBxGbGzO5DRafBxWfBxajCymxHTS5BxSdBxKbFTK3EzG1CSGvCyKvCSSxCSavGTO5GRaVPzqzFzK5EzG3BSCtAwiPGxaVPTivPzy3NzKpBxObCRefBxqlPTmzJR2bKyahAwyRPzmvOTOpKyObNS+nPz21AQOFKyOfPzuxAQCBGRORLSadPzyzLymjMy2lOzetDwuJFRCPEw6NEQ6LEQyLEQ6NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAQABAAAAfhgAABAgIDBAQFBgcIBwmOCQIKCwwNDg8OEBESjY8CDBMUFRYVFxgZDJyOGhsPChwVHR4fFSAhjwkaIiMOJBQQDRUVJSa3GicoHw4pEA8SGSorLI8tLtQu19gqLzDECTEyMzQ14zY1Njc3ODkqCTo7MjIxNCs5PD03PjctPwlAQUIihhBpQbCIihtG+CUocASFkAhIkogQ8kFJwkcFlogIkoRJEydPnkBR6GiAxiQLgiiIIkXElFQJqESoMsRKkAhXqkhhApNKFSxZggTJ4nHIEJhaDhzYwoVLFy1avHyB6ScQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mailget16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAxKdBRSfCyGvFSm1BxKfCSWzCyWzBRCXCRKfBwuRAQGDDw6PHy23Cym1CSSxByCxBxunBQSFKyurMTCxExihNza3NTW1JSSlMzKzFxaXLS2tNze3KSipCQmJGxmbNTS1KSepLy2vISGhJSWlHx+fERGRPz6/IyKjDw+POzq7JyenMzOzKSmpCwuLDQyNIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaeQIBwGBAIAsOkUjAgFJRQQMHgjC4PBIEVgAh4D4aEYrGAMhINxwPyiCgYSsmEUmk82grLRZJkYCgXaAEKFxYZcEISGhsZFxwFeY0WHR5CDB8dGCAXG5shGxQicBIMpSMUGxgTGSQlpQwSJicnEwwdI7gdKAwTsykpKiobr8QMKxeHDBcsGRvOzxsT0i0uL9HSHdkT2ZkoMJXF4a8AfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mail16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBGxaVOTe1Oze3OTWxOTWvNzStNzKpEQ6LOTezPz+/Pzy7Pz69Pz27Pz25Pz21PzuzPzuxEQyLLyinLSmnPz67Pz23LSafKyObDwuJMzCtLSelPzy1My6nLymjNTCxLyqnPzq1LyihKyOfOzavOzetEQ6NPTq3NzOtLymnNTGxJR2bOTOpPTivNTGvLymlKSShKyahEw+NOTe3PTm1Pzu1Pzy3FRCPPz65LSadFxGPOzm3PzqzPTmzPzmvEw6NCH5BAEAAAAALAAAAAAQABAAAAaqQIBwSCwaj8ikMhloOp/QpmAgqAoIhELBUDgcEIGEYrFgNBoLx+IBiRwkgQnFoWAwKhWLhX3BZAILGhsCDXgODhwdGB5vgAofICBlDiEiIx4kJSYBJ2UoEykqHSMrLC0nLWAnFS4UCycvMAcEMR0RLTIBMwaSahw0NTYtFwclNwEdLws4eoc2DxwQOR06ASk7PBAhIRE9Pj0tLSUY1T8I5gjn6Qgy7D8SfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailreplyall16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBLymlMy6pOTa1PTq3PTu5Pz27Dw+POzi3PTm1OTWvPz25FRSVERCRLympPzuzPTu7NTGvFxaXKSmpPzu1Pz65Hx6fHxqZPzq1Pz23HR2dBw+ZHx+fISChJSWlDQmJHRydCxWfBxGbJyenExKTHRiXPzqzPzy3CQmJDRafGTO5ExOTERKTGxWVCRSfHTS5CymxBxajBxWfPTmvPzy1CyixCSaxCySxDSaxDSWxDSSvDyaxGS21PTmzPz21AwiPBRejCSavByGtCSezEzG3FzK5FzG3GzO5FTK3CQ2bPTixBxqlCRefBxSdBxSfBx2nCQ+dHxmXPzmvLSafAwmRAwyRPzyzDw6POzavNzKpAQOFPzuxBwWTBw2ZGRORLyWdMy2lOzetPTivAQCBKyObOTOpAweNBwWVEQyLEw2LEQ2LDwuJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAf4gAABAgMEBQUGBwgJCguOCwEMDQ4PEBESDA4TjY8DFAwVERYXGBkRm4+QGhsMHB0eGB8bDpyOARogEBceIRgXv8COIiMkGB4lJSYnIcwoKb/DGyoXKywtKS4pHinMLzAxJDIzNDUtNjcv6B0hLzgfMh85OjstPDw99zwd7T4/LTVAgggZQqSIECNHevSAgSSJkiVMmjh5AiWKlClAiFARUeVHFSVWmLS40gNLlh5agGzh0kWDlwZfrIDREKaCAjEqrFA5MMYLmTAxlJTxYoZMozNozqRRs4ZNmy5s3LwhA0dBnDNn5MxBoAABnTp17IitowDrmQV+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailreply16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTEw+NFxKTFxGPPwCBLymnMy6pOTa1PTm1Pzy7LymlOzi3HxqZOTWvPz69Pz25My+tLympFRGRHxuZPzu1LymjNTGvNTCxBw+ZPz23PzuzPz65PTu5NzOtCxWfBxKbPzq1DRafGTO5BxGbPzy9HTS5CymxBxajHRiXPzqzCyixCSaxCySxDSaxDSSvGS21GxWVAwmRBRejCSavByGtCSezEzG3FzK5FzG3CQ2bPzuxAwiPBxqlBxKdCRefBxWfBxSdBxSfBx2nCQ+dPzy1CRqlAwyRDQmJPTmvPTixLSafOTOpAQOFPz21BwWTBw2ZPzmvNS6nPTivAQCBAweNBwWVNzKpPzyzLyihGRORLyWdMy2lOzetKyObEQyLEw6NEw2LDwuJEQ2LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfqgAABAgMEBQUGBwgJCguOCwEMDQ4PEJYRDhKNjxMPDBQVFhAXGBUSGY8LGhsQHB0VHh8gFQ6bjgEhIiMMJCUmFbS2CwMnG6IoKSorI7WpEycWFiUsLSou1yXXji8wFiopMTIzNDUz4zbZNxsbODk6Ozw9Pj8pPzEzQDdB60JDOkRFjBw5giRJDCWdlmxwIIRJExAWKDRyMgTIiydLoESRImQKlSUSF1SxUoXAlSBRsGSJoCVICIlbqlThcoBClC5eYFD4EiVIFwUyqywAE0ZMlqNjpJDpIkUBl0dlFChAYOZMmTJoyqQR5icQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mailsend16:mail mail16 16:photo:16 16:R0lGODlhEAAQAIYAAIx+fIRubHxubHxqbHxmZGxeXHRmZGROTFRCPFxKTFxGPPwCBHxqZLyqlMy6pOze3PTq3PTu5Pz27Pzy7LyinOTaxOzi3Ozq3LymlOTOtPz69Pzy5My+tLympPzqzNTGvLSelPzy3BxGbBQ6VPzuzPz65LyupNzOtPz+/GzO5BRejPzq1Pz23LymjHTS5CyixCSavBxqlPz25LymnGTO5CymxCSaxByGtHRiXPzy1CySxCSezGxWVPzuxKyOhMy6nDSaxEzG3PTivNzKpKyOfPzu1FzK5PTmzJR2ZLyihLSWfKyObOzmzPzmvDyaxOzavLSafGRORMy2lOzetDwuJEw6NEw2LEQyLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAQABAAAAfUgAABAgMEBQUGBwgJCguOCwwNDg8QERITFBUWjY8DFxgZGhsaHB0aD5yODB4TGB+kICEaIiOPCwEkJRcmJyYPKCIpKrWqKywTmC0SIi4vMDHEDCsyMg8zEyI0NTY3z7U4Hhs5Mx+0IyI6OyPrIzw9Gys+PxIy2EBBxAs8Qjk5Q0RFWFxAZySfgSMsilRAkiRECHQ08hHgJ0TJkCU/mECU2ISEkowUlpAQ4QTfowNPoAzJIeRJCyjm8kVRIkWIzSkXhwxJtYAKgp9VrFi5QoWKFZ5+AgEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav1downarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PUZi0zmTtypflV0VdRJbm6fgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-nav1leftarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAP///wAAACH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxqdwoNGTmgvy9px/IEWBWRkKZ2oWrKu4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav1rightarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIdhI+pyxCtwoNHTmpvy3rxnnwQh1mUI52o6rCu6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav1uparrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIYhI+py+0PWwhxzmetzFpxnnxfRJbmufgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-nav2downarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+pq+EPXYpxUckoO3AjbF3dJwahllXe6AFgC8d+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav2leftarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pyxf5VohmSlsxmpjTzAHeN5ak6UHpqKRi2GpwvH3Q3eT64RcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav2rightarrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAImhI+pq5HOAjQyVnqfhHue7oAaKH5kiW0AmnLqaHomkj02g+e6XwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav2uparrow16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIghI+pyxfR0HsRzNnuXVqn3mVQZWFRyIDjp65Ga5Ly4hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-navback16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRSdBRObCQ2TBxObISevAQCBNzu/BRGZPz6/FzC3Pz+/HTS5ByyzJze7Mzq9ITC3AQWLAyWvBSavFyuxAwaLAwSHBRafBSOrDzW5AyixCS61ETW3CzG1AQeLAweLAxefBSStEze7CSWtCyatBSCnBRWfAwmPBRWdByixAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZiQIBwSCwah4HjUTBQFgkFg3MoKBykU0QhoUAIAuAksbpgNByPxQMSGVsVDYlkIqdUiJYLJqORbDgcHRseRR8gISIaEyMkGCVYRBEmeyAnlgaQkSgpmU4RAZ1OKqFOpFNGfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-navdown16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObCRKZBxCXAwyTKTK3Ozy/NTm9GSivAQWHNzu/FzC3IzO5CySrAQOHAyuzETS3CSWtAyOtETa5Aw2VLze7ByWtBy61BSavAxWdBRCXAwqPAQCBDR+nKTe7FS+1Eze7ByixBRmjPz+/AyexAyixAQKFBRqjAQGDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZeQIBwSCwaj0hAYCkYEJLKguGASEADigWj4bgaHpBINykwSCYRa5HCFFQsF0xGo9lwhpSOwfORYC4gISJ3RAQdIyQYJSAlImNrh4uNJkl5CoKUUBQnjlB4KJ6hokN+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-navforward16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBAwyTBRObAw2VDR+nCRKZOzy/KTe7Pz+/KTK3Nzu/Lze7FS+1AyexAyuzBSavAyOtBSmzOTy/BRqjNTm9IzO5ETS3ETa5By61AyixByixBRmjAQGDBxCXGSivCySrCSWtBTC3AQOHAQWHAxWdEze7AQKFBRCXAwqPAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZjQIBwSCwahYGjUjBQGgWEpHNYMBCaT4G2UDggos+EwmBYMBpf6VBgYDgeEMgjIpmoAQVKxXLBPDIXGhscRB0eHyAgDSGBGyJFASMiIiMkJYImUwAnmJqbjp4AKCmhAKSlTn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-navhome16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBDw6PBQWFCQiJAQCBFxeXMTCxJyanDwyLDQqLFRSVLSytJSSlISChCQmJERGRFRWVGxubKSmpJyenGRmZLy+vOzq7OTi5Ly6vGRiZPTy9Pz6/OTm5ExOTPT29BwaHNza3NS6tJRqRGQqBNy6pIyKjDwGBPTe1JSWlDQyNOTGrNRiBGwmBIRaLNymdLxWBHxGFNySXCwqLKyqrNR6LKxGBNTS1NTW1Jw+BEweDDQ2NAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaoQIBwCAgIiEjAgAAoGA6I5DBBUBgWjIZDqnwYGgVIoTGQQgyRiGRCgZCR1nTFcsFkHm9hBp2paDYbHAsZHW9eERkYGh4eGx4ag3gfSgMTIBshIiMkGyAlCCZTEpciJyQjGxcoKUQBEhcbIiorLB4XEltDrhcaLS4vtbcJra8bMDHAGrcyrTMXHjA0NSypEsO6EzY3IzU4OdoTzK0BCAkDMgkIOjJlAH5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-navup16:nav nav16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBBRObAwSHBRSdISevBRWfAweLNzu/BSOrAQWLPz6/FzC3DzW5BxObHTS5ByyzAyixEze7BSStBRWdAyWvByixAQSHCQ2TAQCBBRGZJze7CS61BSavAxefMzq9ETW3CSWtAwmPPz+/CzG1ITC3FyuxBSCnAQeLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZfQIBwSCwaj8hhQJAkDggFQxMQIBwQhUSyqlgwsFpjg6BwPCARySSstC4eFAqEURlYhoMLBpPRUDYcHXt7RgUeFB8gIU0BIoiKjAcUIwiLSQUkJRsmGIwJJwmEU6OkfkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-playeject16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+py+0R3IFQUtruXVqn3kkWyIARR4rqKvoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-playend16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+py8Eb3ENRggrxjRnrVIWcIoYd91FaenysMU6wTNeLXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-playpause16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIfhI+py+1vgoxzyUCxrZd18ClfmIyVyJ1lqkHuC0N+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-playstart16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pyxudwlNyguqkqRZh3h0gl43hpoElqlHt9UKw7NG27BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-playstop16:play play16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+1vgpySUWpvXXqrHmSaeJEYhKYq6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textblock16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py40Bo5SOzRvrwlgrfnkJOIkPaaaJXwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textbold16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIihI+py70BowPQ1HZpwNv212Vg9IGHmIjoWa4ey5DSRNd+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-textbottom16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIVhI+py+0Po5y0hYtzrkB7zH0fN/kFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textcenter16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsnRkqtDnhu1zHfFSpjaY4PavgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textitalic16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+py+0BgztwUmmjBXX3jE0auHHhM5Yq4xcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textleft16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsgRoqr3Vnt102fFSJjUC6nlPoFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textmiddle16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIXhI+py+0PT5i01pisphjt3UmfFZYm5hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textmove16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIbhI+pm+EPIZsg2kfZvblXbwTg10WlA4rjyvgFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textright16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIahI+pm+EPIZstSrqsDhhv1ylfFE5jiYwX6hcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textsortdec16:text text16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BPwCBAQCBAQC/FxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM5CBDM+uKp8KiMsmaAs82dtnGeCHnNp4TjNQ4jq8CbDNOroIe3ROyEx2A4vOgkOBzgFxQ6Xa0owJ8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-textsortinc16:text text16 16:photo:16 16:R0lGODlhEAAQAIIAAAT+BAQC/AQCBPwCBFxaXAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAM4CAqxLm61CGBs81FMrQxgpnhKJlaXFJHUGg0w7DrDUmvtPQo8qyuEHoHW6hEVv+DQFvuhWtCFPwEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIlhI8Jwe2/AmpTynqPTXSqrnBM+I0kdmpmGmUp+K4nPMvhYx9+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-texttop16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIWhI9pwe2uYnq0yQtqxbz7D4biSIZ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-textunder16:text text16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIjhI+pu+FxXoOIKpds1oBH7hlYxYxRCaIZ01lhJbHy9tTv7BcAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewchoose16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMzCLrcGlAs6UAYgwLdLtEcI4ygQo7VVp2oupGpG4vmaUVTemX523qlFcw0a4RqNlkx5k8AACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewdetailed16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMmCLrc/i1IAVkYg1Z1iRYUKCqitp1oikqBWV3ZOnhkWNagqu+qnwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewicon16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrcG1AwGOQbw6qANeCEB3pCSZpO6pgowJZqLKuUGE0dnuEhf8IL1kz1shSHDX8CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewmag-16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ+QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7Kmpl0CtLGLvbW2Zn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewmag16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAZ8QIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6eUAFCusJSzr7GLArS5Q7O1tmZ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewmag+16:view view16 16:photo:16 16:R0lGODlhEAAQAIUAAPwCBCQmJDw+PAwODAQCBMza3NTm5MTW1HyChOTy9Mzq7Kze5Kzm7OT29Oz6/Nzy9Lzu7JTW3GTCzLza3NTy9Nz29Ize7HTGzHzK1AwKDMTq7Kzq9JTi7HTW5HzGzMzu9KzS1IzW5Iza5FTK1ESyvLTa3HTK1GzGzGzG1DyqtIzK1AT+/AQGBATCxHRydMTCxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaBQIAQEBAMhkikgFAwHAiC5FCASCQUCwYiKiU0HA9IRAIhSAcTSuXBsFwwk0wyYNBANpyOxPMxIzMgCyEiHSMkGCV+SAQQJicoJCllUgBUECEeKhAIBCuUSxMKIFArBIpJBCxmLQQuL6cAsLECrqeys7WxpqZdtK9Ct8C0fsHAZn5BACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewmulticolumn16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAPwCBDQyNAQCBPz+/PzerAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAMwCLrc/ixI0WSgKoyBl+beQFACpo1AqXbKCr1wLAMWS08hGG3dSZqin4sxnBmPD38CACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewtext16:view view16 16:photo:16 16:R0lGODlhEAAQAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAQABAAAAIchI+py40BTQSwuovp3DXkv1ia1IHmIXLiyWJ+AQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewtree16:view view16 16:photo:16 16:R0lGODlhEAAQAIIAAAQCBPwCBDQyNPz+/PzerAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAMuCLHcri4yGISlj4kxcANgNRBQCIbL6U1Su7bB62rXvGydG25kqpwfIGxILBr9CQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actattach22:act act22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBMTCxPz+/DQyNKSipAQCBISChFxaXDw6PAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARrEMgJgqA4zzus/gLhFd5HCcZAXqsphYPUdhcYFNRcZnvdtpnDqPTbUWgAJKBYwzBlw+bRo3xmkNWoBgm0OrVLn3GC9RgCk8DhUw7c0rHPr4CDu5SYQNyEt7uSY3p/UAKFhYKDSQOLiwgFdhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actbookmark22:act act22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBCQmJCwqLMTGxAQCBBwaHMTCxLSytERGRFRWVLy+vKyqrKSmpHR2dJSSlJyanISGhGxubIyOjKyurGxqbFxeXGRmZHx+fKSipLy6vGRiZLS2tFRSVHRydJSWlHx6fCH5BAEAAAAALAAAAAAWABYAAAWWICCOZGmewamaQrq+wUC8azHINGocOI38iIRAceDNaISFYklkGHOEhoNBfUAOhuOLEJE8HoPiRKFdESiQBqViuTDIUAsEcyAeGJmyiqC5RCwJGg0YcEh9D0V3Dxt6JwQVDRYVHBUdi40mjw0PTgwQHgeYJQQJfxUXFxAOoTkFpQ0fsRSimQkWEQ0VtI62HLt7vjl7JQYhACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actbookmarknew22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCwqLCQiJCQmJMTGxAQCBLy+vLSytERGRFRWVKyurKyqrLS2tKSmpHR2dJSWlKSipISGhGxubIyOjGxqbIyKjFxaXGRmZHx+fPz+NGRiZPz+ZPz+HMTCBKSiHPz+jFxeXPz+XPz+tPz+zPz+/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAamQIBwSCwaj4Gj0hgQLJ+AAaEAVQoI06pRYDhkoYgwIhEgKBTfZ2FhaBsYDS8VWnA8Go0FJIKeqyUTDw8EDHBpSwUUFQ4UFhcYDQYFfkoFFxEQDG8KEAUZlEeWGBIakw4FG1STiBoYBRwdBR4fHgUdHKBEBSCnIR8iIyIfIblFu6ceIyQjtcXGCbLKzAUKzrq+wMLEVa+xs7W31kOTk6nkWuOf6Ea5QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actexit22:act act22 22:photo:22 22:R0lGODlhFgAWAIEAAPwCBAQCBHR2dDQyNCH5BAEAAAAALAAAAAAWABYAAAJOhI+py90RnIMyRUOxhDfzJkACdoXBuEDDkQFDi5go0MrKx16kns80b7qdELCgBYaEGWwL5nG1ePFiKp9A6kuYRNuho8vxVrrZivmMRtMLACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-acthelp22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBCQuNBwiJAwiLAwaJAwSHAwSFIy+3ERynCw2PCQuPAwmPCxOZCxWdJzG3FSazBwmNAQKDAQGBDRmhBQyTDxujDR2rIy21AwWJDyGxCxmjAwmNDRihAQOFDxmhCxunBQWFAwaLCRahDR6rESGvDQ2PCRWdDRunDSGvCRSdAwWHCwuLDSOzHSmxDyKxBxCZBwqNHSu1DyOzAQSHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAahQIBwCAgIBAPCoGAgOoeBAyKhWCwYDUf0CX1AIhLiJEGpBLiAAaRxdgYsl7Ybk8igBZoN5xmAdDxoanp8HyANISF8EBsiXBMjJBolBEQmGHFoRScbKHIKDykqK5lFAZRCnyknTaROLA8tq61OChgtKqyzQgEYEJi6UC4vI3LAASkbMBPARAEBdszR0sACEaPSMTIQM8W6KzNl3bo0NOJDdEEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actlock22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBHRudFxaXExGTERCRAwGDGxubPz+/Pz2/Ozm7Nza3NTS1KympFRSVHR2dNTO1JSSlKyqrKSipDQyNMTGxDw+PLSutKymrMTCxAQCBHRqLBQODJyanDQuFFxSJFRSJFRGJERCHExCHISChHxyLEQ6HGRaJExKHLSmbLy2fOzitPz23KSiZHxuNHxyNJSOTNTOnMTCjLSudKSaXJSKRJyOTOTetNzWpHxuPOTi5MzKzLS2tFxWXOzq7Ly6vOTe5Ix+RLSqdNzSpLyydKyqbKyiZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBAgMEBQKEjI0GBwgJCgsMDY2XjwkOAgQBDxCLl4QNCaGCBBGWooINCAqqrBKgqwATFKaDFRYVtBMXsIMNGBm0GRADjQIJxKIaGxwdHh8gISIhGyMZzIwkGholJiYfJiAfJyEZISDbg90oKCkqKwcHKyooLC0f7IIuLzD2YMSQgW8GDRri+AFoUMOGvRsxUhSsQQPHvmQSchyQtEAHhh0WJHDQcJERjwsKDvRI0BGDjwgicXhQyCOjSgUKPO6AObIkIQESfmxk6REDT4s0bfaYpDNkT4VAha5s+TLmzEYtatwIOHAiDZIKNQAJYk9IjCFEisyoocFEB4UACtBpm0t3LiF4gQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-actredo22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3Pz+/JTWbHy+VHTCTMTivPT69BxGDESuJDyiHESiHEymJIzKZAQCBFS2LFzKNGzWPDRqHCxqDFSqLHy2XESCHAwaBAQOBBQqBDyWJHyqZDyKFGSiVESeJBQ6BAwSBGTGPFyWPFSSLEyOLESGJBQiDAwiBBQmDCRGFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaoQIBwSCwaj8hkMcBkKpcBwYAwEDif0YLhwEUkFItFMkAwMBoOR+PxgHwjRDggamhIJpQ8ZbKGKOQLcgEFdhUWEYgRF3sNfhELBHALAhgZFhobRBwREhQdEAIEHpIKHwsaSJwUDQgQIJINARxKESESDQ0dgCIjSpAkDAwPco+ZSJAlJicnKHIAIrNHidOIQxunT0kpCyrZSCss0d5Fj6jjRonn6uvs2QZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actreload22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBCRSFCRSHBw+DBxCFCQ6FBwyDBQWBBxGFCxyLGTChMzqzLzmvHzKjDyOTER+RERyNDSqXNzy3LzivFS+fCyCPBQmBCQiBBxKFBQqDOTy3LTitES2dDR+PCxuJOT25KTarCx+PESSTCxKHDSeVCyKRNT21ESWVDSGPBQyDAQCBBQSFDRuLDSyZDySTGzChCRiJKSmpExKTDS2ZGzGhLy+vGxqbISChDSKRMzKzGxubDQ2NIyOjCQiJCwqLBQWFCwuLKSipERCRERGRHR2dAwKDDw6PFRWVIyKjCQmJFRSVBwaHKyurAQGBExOTBweHFxeXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf9gACCg4IBAgMEBQYHhI2ECAkKCwwNDg8QBAOOhAQREhMUFQgWBxcHGBmbggkaGxwPB4yDB6SbBJIKHQaqtY0eHyAhsqrDgx4aCiKpqoQHAyMjJBMKJaSxzAAHIRsmJgonKA0LHSmDKiuOBywRLSQuLyEwwyoxMuiN6iUzNBXy5jU2bsgoJugABBz95uXQsUMGD3vpPPgTpKIGwx4+HMr4kW4YkCA2hAzxAQSIECI+imBTwVIFESNHerRUgc0cEiFHkjiiyYzeDiVLdvLcySSkkKGEWiZVweSGkIHMmvQosoQlkaZOjvhosvKJjIAxoOAsgpRZkQNLnvSoqspAIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-actrun22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAwKDAwKBCQiHNze3AQCBBwWFDw6NPTy9PTy/Dw2NKyytOTi3LS2tMTKzMzOxLy+tLy+vBQODNze5NTS1JyalIyCbIx6VIRyVISGfJyelOTq7EQ+NMTGxKyurGxeRLyKPOSmROSuVOy2XOSiTLzCzNTOzDw+NCwqLHxuVOy6bPzGfOSuXNTW1LSyrMSWRNymTOSmTKSCTPTGjPzSnPzWnMyaVBQSDMTCxPz+/KyahNSeRHxeLJRyTPzmtPzarOy6fJyajNza1Ly6vLyulFRCJPzirPTOlMS2pNTSzMTCvJyenBQWFNzKtPz6vPzyvPzqtOzGlOTe1AwGBFxWTLy6tPTm1PzSpPzutPz2xPTSnOTSxOy2dPzapPzerOzm5IR+dPzu5Pzu1PzqxPzy5Pz+9GRiXGxuZKympHR2bOTm5Pz6/MzSzBwaFJSSjCQmHPz2/AwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeEAQKIjIIDBAQDjYMFBoMHCAkKgwYFhwULDAUKCg0ODxCkBQgRnoUSExMUDxUWFxgZGpAbFIuGHB0eHyAhIiMkIB8lJieIKCUpJCTGIyorLCktKIUDpC4YLzAxIjIyMzQ1NhgdpJI3ODktJTowOyM8Ejc9Pj9AQUIEclAocCMIBQhDiOwgoaKIoCI+jBxBkkSJkCWemIyq0GSHCBVHihRx8gRKFCmpKhGaQqWKFYZXsGR5kkXLFgRUXBUqkCGCFS5AjnTx0sXKlyA6CRVgAAHMAilhxIwhU6ZFkBY5kgKYUoXBAzMKzixZ4AJNGgVm1KxhM0WpmQpUMtooaOPGxAM3Nw60oYLGjNYCbzYJOgAnRzNBJ95oPYQCgpJtkwzFoULlRuRPiy9fNhAIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actstop22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAASC/CQKDBwKDCwODNyKjPzq7My+vIxiXAQCBOSOjPz6/OSelNySjNyGhMR+fLRaTGQ2LPz+/Nx+dNR2bNRybMxuZMxeXMxiZLQSFJQaHFwqJNyKhOSCfNyCfNR6dMxmXMxWVMRORLQODOR+fOSSjNR2dMQ2LJQWFMRWTLwWDNSCfMxeVLwaFKQODNR+fNx+fMxiXKQSDOSWlMRSTMxaVMQ6NMxORMQyJOTS1MxqXLwWFLRORMxKPMQaHMxKTLQWFCH5BAEAAAAALAAAAAAWABYAAAb2QIBwSCwajwGBcikIHIsDQmFKNRwQT2EgoVgsGOCG4wHBIgmRhWRCqVQsF0xGYyYGNgoGh9PpeCQfICEic3UAAWgLIxwRJBsbHSUREyYYJ3RDAQULexGejhueESgpl3WaCxsqJKKsChEUKywtmFoFDC4vCayikzCyMbWHt38NCTKiHhUfMyzBdQIFKsodob0VNDWzwppuKxMRrx6iNjcitNA4bh+iEzkwojc66JkOOxcf7G35PBE9KS1MEUGgIQOIFfk++KjRw9wJgUUIZvhRoyLDFCliQDQisUWLGCJOeNx4hKCGkyhPGnqCoKVLl1liypyZxUAQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actundo22:act act22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBCReDJzGjMzivOTu3PT69MTivHy+VJTWbIzKZEymJESmFESiHDyiHESqLAQCBFzKNGzWPFS2LNTmzCxqDDRqHPz+/KTGnBQqBAQOBAwaBESCHHy2XBxGDOzy7HTCTEyyJDSqFHzWTAwSBBQ6BIy+dESKJFySPFSSNAwiBCRGFBQmDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMsBkKotMwYAwEDiXgYLhwD0gCFZiQKxNKBYMRqPh+D6G16y5AYnYIxBJAyF4AwITTAUJdBESD4gPFBV6Fn6ABBcJDIYPGEQZGhQbHAIdfx4JHw2VSBodGwWfAR4LDSALfkgYAQurBiAhICKfSSMkvQElGyYnGyi9Rxkdj4nOskUYyU9FpxnURikdGtjRKivdRKfQ2Inh5+jpRwZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-actunlock22:act act22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBGxqbFxaXExOTEQ+RAQCBPz+/PTy9Ozq7Nza3NTS1KSipFRSVOTi5Hx2fJSSlKyqrJyenJyWnDw6PMzKzKyurDQyNFxWXMTCxJyanHRuLHxuLGReJFxSLFROJFxWJExCHERCHBQODISChHxyLHRqNIRyNHRmLLSqbKyiZLy6fOTarPz67Pzy3OzitKymZFxSJJySTNTSnPTy3NzSpMTChLSydKyqbKSaXJySVIyGRGReLPz23NTOnMzCjHxuPLy2vKSmpOTe5LS2tLSutHxuNHRuPMS+xFxWLIR+RDw2HFRKJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SDAQIDBAUChY2EAQYHCAkKCwyOjZANDgIEAQoPjJiDAg2iggQQp5gMBwmrDBESl6MTFKuoFQSjABYRF40CGAW8BRm7hQwNxBobHB0eHx4gISIjBdiEAhYFJBslHOHSHh4hBSHlxIUmJygpKissBiwtLi8pGjDqhBoxMjMuaNSwcSMFjhw6dnjYRyrGCh4ueviw4Q5HDB0/PjAUJCBCAwMIGiiggAEIBFk/FgYLIgRkggQkhxAJkqGExkYMFnxsIGRkSQgLHhRRWUjAggQgG8AsSWRBBiP6VrYMOfKIyaBDNwLo+HHSUplOSyDRqiEHjRkretRQkcLgxayNF0wksQGQxsSKMTIq0QpgCba/gAE7IhMIACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-appbook22:app app22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBDyGhCyCfFSWlESOjDyKjDSGhCx+fGSinGSenFyanEySjHSqpHSqrGympEySlBx2dISytHyyrCR6dKTGxHyurHSurHyytGSipCR6fARmZFSalEyWlBRubAxubBRydDyKhDSChLSytPz+/MzKzIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbFQIBwSCwaj8ikMhBQIpmCQdM5ZBIKhgNiugwkFAsCI7pNMhuOxkNBgBgEiAi3GkBLJpJHYgEpaClyREwVFhcSEhgOGQoMfgMaERtcARQBFRMYExZ6HB0FUYAekkIBHxqWFmlrC1haESAfG6MBGx+VFRgKYH0hInGRklO0ppYXCwwMWQiQHkwjgrWnFRdYZHIBJCTP0LaWGAcDW9jZ2nMAw9IWTOQkJSZMRsOV49nu8E+19PbmR7TY+1TovONH5V7Ag0QMBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-appbookopen22:app app22 22:photo:22 22:R0lGODlhFgAWAIYAAAQCBAQ2NPwCBHSurIS2tBx2dBweHPz+/Ozm1GxiTGyqpPz6/Pz69GSqpOzaxPzy5HxuVLSmlOTazPz27PT29NzClPTexHxuXLSmjAxqbFSinPTy9KyehNy+lPTy5Pz29HxyXNzWxKSahOzexPzy7IR2ZOTWtESenPTy7KSWfIyCbKyijAQGBDyalPTu3KSSdDSOjJyOdCSGhPzu3OzizJSGdPTq1PTq3JySdMy6lAyKhOzWtOzi1OTOrJyKbMS2nJySfMS+rAwCBNzOrNTCpNzKpJSGZKyafLSifLyylIx+ZHx6ZDSChAQuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAWABYAAAf/gAABAoSFhoeHAAMAiI2IAAQFjI6EAAaJkQeTjwAICYkKBQcLm5WdBwyfhgChB66bp64HCQC1lQ2irqQCAA4PowsLEBESE4wAuLIHFAAVFr+uDBcYxRm1GrmuGxwdFh4Mrh8gGCET1gDYyhsiFSMkDAsMDCUYJhvnJ9kHKCnODwwfPlBQsULCPRYAWogK9sHFiwoOPEyQh0JFPXO1YBSYwBEFghjdHkwQOYGgwQwIZRR44GHGDBogabhAsYEEihrUMAIoUMCEDRs3HODIYQHFA6MPcJA7KICFjgw7eIzo4cOfiwc/gKwIUm2SkKdDdlDt4AABDaU/iIRwwbTSUyJFOow4S3Hkx9oNDDZgXPU0h1wcSIgEGUw4ibVET5WoWMKksePHpdxmyKADAEIWly9HJtQkQJMmlAgZCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-apppencil22:app app22 22:photo:22 22:R0lGODlhFgAWAIMAAASC/IQCBPwCBPyChMQCBPzCxAQCBPz+/MzKzISChKyqrDQyNEQCBAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARYEMhJ6wxiEMtpIAWxddwXiqRlikSQeiAbuC+wirNR322gv7zcLobzDU+9XypoBBKTR1lz+RTWDgip8nUwZK1XLyIx5XoVicX2RUAo1DVKi7GOBxjxfNwQAQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-apptool22:app app22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBISChFxaXNze3NTS1Ly6vKSipNTO1Ly2vNza3Pz+/MzOzOTe5DQyNOzu7MTCxGRmZMTGxPTy9Ozm7Hx6fPTu9MzGzGxmbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAW1ICCOZGmeaEoGbBsI6joMRGEcbQwESDIrtVtAF1gwDLNaAmfKiVgLBJKgwB1KxQZrBHU0FAXmavFoQLYiB6TxFXMj5AZBwnJI2I3wcNWALyYEcgoKXxRhOHs7XxEVCwsWFgoUDRYUFwwQB25ZCxiNjo6GkwUXN2NsCxEYqhUHoQ0MEglYRQQXErcHrI55FycuB2YSmoyOBTEtB2sXuhU6XAENC2a6z9AKCwq+1tAN3E2J3ySkIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-connecting22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBISCBAQCBPz+/MTCxOTi5AQGBNze3Ly6vISChNza3FxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAAR4EMhJqwzY6omD+MNGdR8YilNZnug0qGzrqrL1lnV1fyJBVB6VQEMoGH4ADGwQkxQPBwMiKGA2J8VEAnq0tgiKg5aL/C7C2gTjKCM0zowDQ8tuNQznNL7cKzjOUQsNfER+gguIg19+Pm6ChBZFDmWNi5M5FIyYFHQRACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-connectno22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBPz+BMTCBERCBAQCBPz+/MTCxOTi5Nze3OTm5Ly6vNza3ISChFxaXKSipAAAACH5BAEAAAAALAAAAAAWABYAAARiEMhJq7046827/+AVCKE0Dh9BAGdaGISAToFGFMcBU+11I4hDYseSZQiKwwKoI/QwBIYiuFDCZseGdIlYEjUNg1SpY6w2N4cUIW6cjwW1lsFwo+MqgtZuw0/ydw5vH34lBhEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-connectyes22:connect connect22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBKyirPz+/KymrOTi5KSipMzCzNza3OTe5Ozi7MzGzPTq9OTm5ISChMS+xFxaXNze3GReZIyCjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWLICCOZGmeaBkAQpoGg7C6JizTQT7CxPwOwFWgYPChYIXkIHC4uQKGAiKRKCyNpxxUUVViVYNFLkqtLo+DAkMMLXQPXwAy2WCTF4544FGtKuwPDhB6DnxuUmyCcXIQhV1uYoMuEAcOBxEKCHg6TzGFCJUSizuejROKOAM9OY2SnUU7nD89NCcDsLUnIQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-devscreen22:dev dev22 22:photo:22 22:R0lGODlhFgAWAIcAAPwCBAQCBPTy9PTu9Ozq7OTi5Nze3OTe5Nza3NzW3NTS1MzOzMzKzMzGzMTCxMTGxOzm7AwGDBQOFBQSFCQeHCwmLCwuLDQyNDw6PERCRFROVEQ+RDQ2NLy+vKSipISChGxqbExKTOzu7OTm5Pz+/GRiZMS+xLy6vBQWFLy2vCwiHFQ+NMSmfNSyhIxmTDwuLJx+bLS2tCwmHMyyhMyqfPTqpPzyvLSWbLSWfPzitIx+ZDw2PAwKDCQiJGxWRPTmrPTerMyuhPzqtPz63PTWnPz6zNy+nIRiVDQuLKyWbOTanPz21NS2jNS6lDQqJHRaTPzmrPTSnPzyxOTClPz2xNSuhPTqxPzuvOzSpAQGDOTKnMy2jOzSrPTu1NzKnOzOnBwWHJRuXLSWdPTatPzqvNzClCwmJOzSnOTOnPTuxOzKlOzerOzarOzitJR6ZNTO1IxmXPTWrNSyjPzOjPTSpLSehHRqZOzirOTCjPS+fPzGhOy6bOzKhGROPMy2lPz+1PzmtKRyRHRiNNTCdPz+zNzCjEQ2NKySdDQmJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAj/AAEIHEiwoMGBARIqXMhQIUIBAwYQIFCggIEDCBIoULBgAYMGDgIIDEBAwMSKBRBk3NjxAciQIwdACBBBwgQKFSxcwJBBwwYMHBx0EAmA5EwPH0CEsCChoYgOQ0cSGCHhA4kSS5syJGDiBNEAFVGUKKEBAwWFFM6SNJHi64gDFEKE4FBBggoKK1i0cPECxokYXw0gsECYggQZM2jAqGHjBo4cOtqOxLhDAg8ePXz8ABJEyBAWRIoYOfJipEoMCZEkuaFkSAslS5jUGJKkSRAnRREo0JDwCZQoTKQAmUKlihQrVa5gKZ1lI+oAK7QM2cJlSZMuU4Z4+TJEx0iNOwKAggkjZkyOFmS8kClzpcUQLRRGbjRD4MgZNEzSqKG+ZgobI2248dUbDDDwABzcxSEHEFpgEcUcdMRRhx1fFejAAx0cgcYdSxiBRx566LEHH0d8QFRRNC3Uhx985CHEH0MAEkhCBxWkgiCDFEFIEYUYUmONMhyCRxVH/PgjBYioYJAdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editcopy22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFPz+/DQyNISChDw6PMzKzMTGxERGRIyKjFxaXMTCvKSmpHR2dPz6/Pz29PTq3MS2rPz69MTCxFxWVHx6dJyWjNzSzPz27Pzy7Pzu5PTm3NTKvIR+fJyGfHxuZHxqXNTCtPTq5PTi1PTezNS+rExOTFRORMyylPTaxOzWxOzSvNze3NTOxMy2nMyulMyqjAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbYQIBwSCwahYGkUnk0BgTQ6IAQaBKfUWhBYKhaAU+CgXAQIAyChLeJzSIQhcH6GFaM0QtGY5kstqEODw8QEQELAhJTc08KBBMEFBUWDRcBE1pca20SGBkaEBscAY5maFRIAgoLHRQRHh8gIQFlZnByqA8ZGSIQIyQjJQEmYgJ5p2ACrK4gJx4gKIZZAgdeAQ4ZI9kjKSor0AwEjeAs1S0cHAslLi4vMDDRWeRIfEsxMeET4ATyVoYLC5fizXEiAR84BeMG+pEm8EsAFhAjSlR4hR6fLxiF0AkCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-editcut22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBAwCBPz+/OTi5JyanOzq7DQyNGxqbAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARbEMhJq704gxBE0Bf3cZo4kRJqBQNRfBucyudgvJS6VaxLzyMa6/bLiWA9HOg4VIIkL5vzuRkcpkvRIIAorphJLzBW84WEuRZWp6uaT7J2Sh1Hit3OY/ZO7WvsEQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editdelete22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAASC/FRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanPz+/Ozu7BQSFCwqLDw+POTi5PTu7MzKxIR+fCQmJPz6/Oze1NTGvPz69Pzy7Pz29LyyrPy+vPyupPTm1BQWFIQCBPwCBMS6rPzSzNTOxPTi1NS+rPTezNzOxPTizOzWxMy2pOzaxMy2nPTaxOzOtMyynOzSvMyqjPx+fOzGpMSihPTq3OzKrOTCpNzKxNTCtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf8gACCAQIDBAUGBwgJCgsLgpCRAAwNlZYODxALEY+SkAMNEqKjEw0UD5yegqCjrRMVEqidkgWhraMWF7GptLa3EgEWFRSOnhW+vxgZEBqzkBvItxwdHryRCNGjHyAhHSLOgtgSI60c2yQjJd+eJqEnKK0hJCgnJSngAO0SF+8qEvL0VrBogW+BLX4oVKgIyMIFQU8KfDV4R+8FDBcxZBREthAFiRIsOsygsVEUh4Un3pGoUcPGjZInK65QicPlxg8oX5RwqNJGjo0hdJwQ6EIkjRM6dvDYCKIHSBc1Ztjw4eOH0oIrsgIJEqSFDBo0cuTgsdSTo7No0xYTZCcQACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-edit22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBISGhISChHx+fHx6fHR2dGxqbGxubGRmZGRiZFxeXFxaXFRSVIxSLPyuXMzKzMzKxMTCtExOTPzqrPz+/NTS1MS+tOSaVPyWNPz6/IxeNPzavPyKBNTW1PyCBPyGBJxmNPzOpLx6PNRqBMSCRNySTPyCDPSGBMxiBKROBHRydPSylOyydMxmBJxKBAwODPS2lPTq3OyabJxGBPTy5PTGrOyOXPR+DPz69PzmzPzevNxuPORqLMReFPzy7MyCXKxiNIRKHBQWFNTOxPzixJRaPFxONHRqVPz27PTy7PzStCwqJDQyLJSGdIx6ZPz29PTu5HRmTLSKbMSGZHROPFxKPJSKfJyShKyehMyuhDQmHEQuJJyOfLSijMSynMS6pLSefDQyNHx2bKSahLyqhLymhOzi1FRGNIR+bNzKtOTOtOTKrOTKpLyedAQCBFRWVPTq5NzOvLyunLSmlNTCrOTOrNzGrLyidMS+rLyynKyijLymjLyqjAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gAAAAQECAwQFBQYHBggJCgsLDAwADQ6CAQ8QD5ydEJ+gERKWE4ICDxSpqhWqqhYNFxMYphCtqaytGRoXGxgcggSoth25u70eH8APFR0VzMzNziAXIRjIvwAFwq3EqSLUGB/iI4LathS4JCXVJh8nKCmCKrXDFCss1eIfLS4v8ssdmgWsAGNDDBnt3s3wJ+jAtlUhaNSwccNEi4WCBBl4SAHHihw6ZOzg0QNjRgAG6KXK4CNEjBU/gDQI8kLISQAIADobAoMIzCINjLw4YvNkAno4kCRRUuNHESNLmDRxUjSjAlRPfECJImUKlSpMrFzBIqWqoKtJaWSJomULAy5XXrp4+QKGYcYFoCBEWRImi5gmY7CQyVLGriAGD2jEMHMmCxc0Xb6kUbOGTRs3N988gLM4jpw5Y+iwqcOGjZ07mE8yiGABz5c8c/Ts4cOnDJkybS7fdMO7t+/fvDMaCAQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-editpaste22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQWFDw6FHRuFGRaBFxSBAQCBAQKBCQiBIx6HPz6/NTOfKyiXDQuFOTm5Pz+/Ozu7PTq5Pz63PTyxNTOjKSeRExGLMTGxMzKzNTS1NTW1Dw2NKSmpKyqrKSipJyanNzWlLy6ZLSuVIx6FISChIyKhJSSlCQiJLS2tDw6NDQyNCQiFCQmHBQSDGRiZHRydGxubHx6dGxqbFxeXGRmZFxaXCwuLOzq7KyurHx+fDwmFEQuFCweFCQWDBQODBwaHBweHKSinJSWlOTi5JyepHR2dDw6PBQSFNze3ERGRIyKjIyOjISGhPz29Pzy7MS2rMzOzFRWVHx2dHxybDQiFPz27Pzu5PTq3PTm1NTCtJyGdHxuZHxqXPzq3PTaxNS6pFxWVFRKRNS2nPTi1PTStNSulNzOxNSynMymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwABAgMEBYSLggaOjgcICQoLDA2Pj4MGDg8QEZ4FDxITFBUWFxcYGRobjQ8cHR4fCQ8gCyEiFSMWJCUkJieNEB4dKB4pKissK8wrLS4vMDHBAAYQHx8dFx0fJDIzNDU0M+IyHzaNNyg43Ng5Ojs7Ojw9Pj9AMkCNDiZB/h9CSOx4QLCgihItqBkYgqIDESElitAYWJCgkQcXjjRCgi1Ihw4BB5LAQOLCgyQYHihpUU3DBw5ElpAgAYNixSRJjKjQaECDCRPZPDB5IbIGSQwKLnh4wbInLA4kmJB4oaPiAwVNnER40hRK1BIAaVatUZJEFCkmpmjgCeWDCalFe4q4oFKwSRUrEa5gycLzwq8lUnPQ4PEgSpYcUZ5o2cIlS1O/JHLEDdfjQZMIVrpgweLFy5e+M6WSmBGlxYMYYBRzCaOFi5imHWBIfOEiShLTVjaP6eyFTBmN1TA5OvLDjJksWb58OVMGDRqWjAYdmU79SIvpjqJr104nEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-editshred22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBFRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwKDAQCBExOTNze3NTW1MTGxLS2tJyanOze1Pz+/Ozu7BQSFCwqLDw+POTi5MzKxPTu7LyyrIR+fCQmJPz6/Pz69Pzy7Pz29OzaxPTu5PTq3PTm3My6pPzu5PTq5NS+rPTm1PTi1PTezOzWxPz27MyynOzSvMyulOzOtOzKrMymhOzGpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbpQIAwIBgMCAXDAZFQLBbCqJTRqFobjgdkEYFKowPJZEyeUBqVR/crHDTKZYplovZKCW84+YKZZNZSBXl6EwEEBhVPXxZihGMaGRscdkIdg4QeEnVfCH2OHyAhIhuUAAiXZSEhIyQlJqWnjiEnKCWupRWoYyEgJK0SKaUKjam0JCorLMFfC6iqx8giLa/MGAsT1wsuCyULKwssC9RSzdkfCyALKuALLQsvpeXYIQso3gsiCzALMfENC+dGcMNHUAY/f+jq3ctncMYCGggFrsvHcEGNh/EyPFmg8cmrJxAVkVO0EUDJklHoBAEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-edittrash22:edit edit22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBERGRExOTDQyNISChBQSFCQiJCwuLPT29Nze3GxqbDw6PGxubHR2dJyanLSytJSWlJSSlOzq7Pz6/Nza3Ly6vFRWVBQWFIyKjMTCxHx6fIyOjLS2tOTi5PTy9OTm5Hx+fNTW1KyurKSmpJyenExKTMzKzKSipFxeXCwqLMzOzKyqrMTGxLy+vHRydBwaHNTS1DQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb8QIBwSCwaj8KAMoA8LgUDQsFwQByay4RiwWg4GA9IRGk0SCYJSsUCsVwwGQ1EsmESD5xOp+L5gDwhBRIZDhcDdkMGDgEiIxAkJQ8Ok5MmAohDAQ1xJxUlKCUlEg0pKpiZJRoLCxmtCw1eURhOcR4rbQ8cGRwLAwgGtBYTDywtGRKjvQTARgEZLhMcKC0OrQMvAirMRc7CHCTU1g2+20TO0NIn1RwDCya/wdHT1Rnt5LToKOq79trx0tR02YPX7Jm8fRxMOIhSLhOJE/LCJSTlr5kFEBQsWDiR4UGGBgsuHDg1BEYAfTE6oEBR4AIBAiS5yWBAAAGBAyaPGAgCACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-fileclose22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBERGRERCRDw6PCwqLExOTFRWVHRydGxqbGRiZCQiJISChIyKjHx6fDQyNBwaHJSWlKSipBQWFJyanPz+/JSSlCQmJAwKDCwuLBweHBQSFGxubExKTISGhDQ2NFxeXFRSVDw+PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbZQIBwSCwaj8jkMSAYDAgEJbFgOBwQCUOAoJAaFgvGonHIBhyP5BcSgUAYDWxggD4WFmx3e3HQngkSRgYMEBMUFG4MCId0BGlEAQeEhocVDYcUdBYKF0QCB3gRlJgUAQEYBBkaRAMbDZMMpAYcT46rQwMJrgsdC6QcfwoPnUMOBgkIV6SHHg6bw0QEAQYfBpggBZjPGsRD0gEchxwCIR6HChnQRQ8DIU4DTR4Em+ncRw8O+fmoXPXdRg+gQLFgIYM/KRIkoDP4QMKFf0o0aBAh4qGUixgzCrETBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-filefind22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQSFJyanLS6vLzCxISChNTe3OTu9Oz6/Nzy9Nzy/NTy/OT2/Nzi5Mzu9Lzq9KTe7LTq9PT+/Pz+/Nz2/Mzu/Kzm9Jza5HzK1LTi9PTu9IzW5ITO3FxaXNT2/KTi7Iza7GzC1LzW3FRSVMzO1MTq7HTS3Fy6zFS2vKzm7Lze5MTGzHzS5FTG1Ey2xEyyvJze7JzW3ITa5FTK3EymrGS+zFxWXKymrMzi7ESirEyqvLSyrKze7MzOzMTCxKSepAz+/NzW3MzKzBwWHLzS3ERCRAzi3KyurNze3MzGzLy2vLSutCQiJAyytHRydOTe5MTGxLy6tLyqpKyelJSCdOze3NS+tLyupLSmnKSOhCwuLPzy9Pzu7Oze1OzazOTOvMyihOTi5PTm3Pzi1PTazPTWxOzOtNSunDQyNPzy7Pzu5OzKrNzSzNzGvNS6rMyynMymjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCgwGFhYOIiYQBAgMEAwKHiokBBQYHCAkKCwwFAZOEBQ0IDAsODxARCZ6gAAEGEhMSFBUWFxgZCJ+TjBoMEpkRERscGBGRih0BBAgeFBQOER8gISEfIruIIwEkCCUVwhcgJicoKSrZg9srCRkRGdMsLS4vMNiK2wIKMRsbMiwzXtCocSydIBs3AuCIwIFDiBMucugAoWvSiB2VNPDg0ELHwA0MkCXr4aNSggg8NoDIQOFHgBtAkgURMiDAEAFEVBCJFKCIkSMGOyDRkETJEkOFmABoUsRJQkQdnkzQACWKlBtTplBR6qopxkFRJ0ytYuWKFCxZtBBq+hRA2AlbRrh08fLlCxi1a51g+dQhDFwuYsaQKWPmDBpKXgNETaNGjJgyhNfcVdTTiWI2XpK0cePmzRk4YA5T5otGixY0qFOXbgXAQCAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filenew22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBExOTERCRDw6PCwuLBwaHAwODAQCBOze1NTW1OTi5Nze3MTGxLS2tJyanPz+/Ozu7OTi3BQSFCwqLDw+PDQyNFRSVPTu7MzKxLyyrIR+fCQmJPz6/NTOxPz69Pzy7PTu5Pz29Pzu5PTq5PTm1My6pBQWFPTq3PTm3NS+rAwKDPTi1PTezOzWxMy2pPz27PTazOzSvMyynOzaxOzOtPTaxOzKrMyqjOzGpMymhPTizOTCpNzSzNTGvMymjMSihCH5BAEAAAAALAAAAAAWABYAAAboQIBwSCwaiYGAYEAgFAqGg/Q4DCASCsTiymgcHAcqQLB4mM+QiIQBppLPcMjkwQ4bB2X4maKgt4sVCHpnFhQTElNFE3mDDxcYGRp2RBuMgxwIHX9EBZZwHh8gCBmTQ52NISEiIyQlpUImng8hHyInKAgprwAqgnC0IKwrLLpGB4wctLYkwy0uuwd9Z8AnJywsLcVFx2YcL7UnJCwwLTEy0GXJoSgrCCwzNDTnxgjeH9UrKzXwNDY36LRGhEOwLx4NHDmgJbh3QoeOgv127EhojEeHDj16pEhRQoZHHzl+QJNCsqTJSXaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-fileopen22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQWDCwaDDwmFPSubPzGhPzCfPy2dOSmZPzKlPzSnPzOlPzKjBQODPzChPzWnPy2bPSmXPyuZOyeXIRSLEQuFEwyHEQqFDQiFCweDKRuPFRSTPT29PTy9Ozq7OTi3Nze3NTW1MzOzMTGxMTCxLy6tLSytKyurDQyNMzKxOTm5OTi5Nza1NTS1MTCvLS2tLSyrKSmpJyenJSWlIyKjHx+fFxeXBwaHKxuPMzKzLy6vIyOjHx6fDw6NPy6dGxubLy+vISChCQmJNza3KyqrBQSFLR2RKSinJyanGxqZAwGBJSSlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeDAYqKiIeLj4wBjQCMhY+NkoiLk5qbhQIDoJyGBAUGBwgEo4MECQoLDA2pDrS1tKQPEAwHERITE77AvxKqhAQNDA8UFRYXFs8YBAQZGqGPxw0RGxwdHR4eHyAhIiMkJSYnKCgpBAYPEhcqHyssLS4kLzAxMjM0NTY3cBA4UCAHBw8gVnhgEcKFjhc7UPDj0cMHAAI/KFgY4YLFio/jRpTYsW8GDyCSCEQw2DChOHIqgsCQSEPIEEEEJFhAoUNECCJEyOk4d6KIyRtGcB7hIJKjixEjHu4oimSGEIs4d8IIUoKECnNB0ElMwkNJJgBLlJBAcQKGiR07KGAURVGViY0mhIwwSTKjr99+THjUoIg0r48hTRIrRtxkiOMhDgrZCQQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-fileprint22:file file22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBFxaXDQyNFxSTPTizOzi1FxORDw2NExKLPTi1Pzy9Pz6/FRWVPz29Pz2/PTy7PTu9OzezPzu5OzavAQCBPzy7PTm3OzazOzKrPTu5FxSRERCRGReXPTq5Pzu7ExGTMS+xKSmpOTKpPTq3JSCDNzSfHRydLyadOzCjOzOtOzSvLyyTMTCxKSipGRiZFROLPz+/KyurJyenJyWnGxmbLSabOzClOzm7LSutJSWlJSSlJyanGxqbNze3OTm5IyGjNTO1Nza3NzW3OTe5IyKjHx6fMzGzMTGxMzOzNTW1IR+hISGhKymrLy6vLSytERGRGxubKyqrLy2vLS2tDQ2NEQ+RASKBAT+BFxeXHRudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAgOEiYqEAgQFBgcGi5MICQoLmAQDh5OEDA2YCw4ODxARApKUCaGYEAsSCRMUnQysCwoVEhYXGLOLCBCgDqK5GQUXGooCAhscBB0euBUZEAUJvQgIgx8gIR8iCSPiHuIFEREDJCXaANwhJhsnKCnWERcRKiopFCvsBywhQrRwQWGAPAz5EhpQ9wIABRgKYsiYMTEEDQocatiwkUIEP18fbkCAAcMBjhwzdOyQwYNCgBMfKJSgMItBjxs+btwgCSGGjhw/ZoRgQKGZCRMUPgABEgSIkCE3SZok8qNqkR85NtDUEcPIkaVAkCR5SrJBDCVKlmzQ6pCCiRlMTJo4YUH3K5AeMBYYWctW0BOaUH60cBJFypQmII6wyEpFQBVFMSm4UAI3hJUrOGh8oOJrklYKWIromJGDR99Ogz5j4ZGlM+pEnwmBCwQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-filesave22:file file22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBGxqbAQCBLy+vERCRExKTHRydIyKjMTCxFxaXGRiZFRSVFRWVPz6/Nze3Nzm5Pz+/JyanDw+PExOTHR2dMTGxBQWFLSytHx+fISChOzy9Ly6vAQGBJSWlMzKzAwODJSSlHx6fIyOjOTi5DQ2NISGhGxubCwuLOzq7ERGRFxeXNTW1CwqLPT29Dw6PGRmZKSmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAb/QIBQGBAMj8ikUDAgFAzKKCBwQCQUCcICKh0SEAhGw5EIZAmBrgCxeDQgcDJWyz0GIggJfL+XGwQJRxNgC3yGDwwUFUZDFhdthnwMGAZNQwEZFwQakXANBBQbHIIdERIBnRAOiR4ERx8gsSEMBBmGCyEGG3YGBwcgIr8UCwQHECOgG4xCtRkEJAvBJRklJgkSFBQeJ68hJiEoESkFKiEZIbkGARsLlwEGExENGhorGSkpFAYm66NDLAECpGiBYsUIFA8wLHBBQMWLVkdUCFCwaYVFBOymkVCgYEMgOykEpICBccMBAhhELFigTEqAAgIIwCiQ4eRKDyS6EAlJIAI0EpaudF4iIKDAAn9CkRT5eMROEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-foldernew22:folder folder22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBNzaTPT2FISCBCQaDPz+BExKBDwmFPSubPzChPzCfPy2dPz6BMzOTAQCBOSmZPzKlPzSnPzOlPzKjBQODPz+rPz+3PzWnPyuZPSmXNyaXPTyhISCLIRSLEQuFEwyHPy2bKRuPFRSTPT29PTy9Ozq7Pz+xJyanDQyNPzGhMzKzOTi3Nza3OTiVBQWFDwqFKxuPOTi5JSSjISChHR2dGRmZFxeXPS2dNTSzNTS1OTm5KSipLS2tLSytKyqpIyKhGRiZNze3NTW1MTGxMTCvLy6tIyKjCQmJMTCxMzOzMzKxJyenHx6fLR2RLy6vJSSlHx+fDw6NLy+vIyOjAwGBGxqZKyurCwuLBQSFJSWlCwqLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLjI2MAY6HAgOHBJYEhJCDBQaDmgcICQoLB4MGDA0OAQUBDg2cAAcPEBESE6QUuQasFRYVq5SxCRcSCggYGRjIGgYbFs8bHIMHExIJGR0eHx7cB83PFhsDDuTUEyAhIiMjJCQluwEmvsAnKAcp1x4qKyUrLLupWrByxcnFiwQIYIggEaNEiRgBZMyYQaNADRs2REA6cCODBxw5+OnQgWMHjx4+BND4MQOIg1gI0gUREkTHiplDhhApEoCGkRlHBL3I8MEHEhz+WAhJogTJySVMfthwIehAExE5jubAkYQpESc8fOx4AiXKNA8+ekhBgqSpzh5hPHcsmVLjpSAqVZBY6VGkiJMiPQKLnTvjCiEsWU4o3nGC8YksMmT8YCmC6iAXKLRc2cz5yGYtR0JjKWQgEAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mailforward22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBJR2dLyijPTixPz69Pzq3Pzy3Pzu5PTu7Ozi1LyelOzavPz+/DwqLLyafPTmvPz67Pz29Pzy7LSWlPzmzPz6/LyajPTitOTSzMyurPz25PTatPTi3KyOjPzuxAwqVDQiJHxiZPTetKySlPzqvPz27BQ6bAwmTPTexLyinNzGxDRunPzy5KySjCQ+ZNzq9KTO7JzC3Nzq/Ozu/LzW7FSm1BR6vGSWvFyq1AyGxAxytAx6vBSKxAxSjMyujLSunES+5BSi1ByGvAQCBNzCrOTaxNTOvMS6rKyelCx6rBx6tBQKDOTWvPzu1PTq1OzezAQOHAxGdBROhAQGFPzy1NzOvIRqXLyynOzarPz21Jx2XPTWrLSShAw2XKSCbPzuzAwePAQCDPzyzPzqzPTmxOzWtAwGBKyObOTSrNzGrKyGbOzatEQyNKyCZOzWrOTGpNS2lCweHCQaHCQWFBwSFBQODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBhBwgQKFSpY0HgBQwYNGzh0mDhRAAUPHziACEGBpYgRJDiUGEkSwoCQJk6opNASRQoOFETQJDkggwoOJlYApcCihQuVL2DUhBDjhIqjJmRwwDCDhswaNm5MjYHjKggOOU7o0CGTA9gdYknG2KCCBw8VJVL0uBgihAUfP+CSNGCjsI/DiBPbAMJBsEQbQYQM+UG5smUiRYw0jlvYxhEkSYyIHm1EyRLTTH40EZvAyZPOR4pAmU07ipIkUKQ0mQIhAZUqVq5gKXzkSBYtyLVEyd1ki8QFXLp4+WJFQowbYLJnD5NbzJiJCjaQnhnvpYwZM0/OPFlvQ/f3iQvQpBlvQc0aCWy4VKnCpY0Y5yQxgEYXZFjghgwZUOHGCW90YQEccUwloBwGyjAHHXUoSAMZb0xhx1QOoMHDHSfIwSEOdTjhAQ1d4MFbTQ6Q4MYacrzxhhx04JCHHhvQsMeLJPHRBxpr+LHCGnusgccfgKixQR1ATtTBlDDAEIggggxCCCGFbLGFHVFKZEdAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mailget22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBBQ6bCQ+ZAwePKTC5Ozu/NTi9GSWvAwSJGSu3JS+5CR+rAQOHPTy/AyKzES23AwOHCw+bOTq/BR6xES+5AwmTBw6ZMTW9Ax6tByi1BRGdAw2XAQCBDQuNDRupKzS9FSm1BR2vBym3EzC7CSGxBROhNTW1Pz+/OTm5NTO1AQGFNzW3Ozq7Ozm7IyKjJyWnMzOzNzq9Nze3OTa5Ly6vCQiJGReZISChKyqrAwqVBRWlOTi5MS6xJSWlNza3OTe5Ly2vGxmbKymrIyGjMzGzISGhKSepCQmJDw6PHR2dJSOlPTy9MTGxLy+vLS2tMzKzLSutMTCxLSytKSipJyenKyurJyanCwqLCwmLCwuLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4IBhgIBA4SLjAABBAUGBwiNlY4FCQoLDJaNAQ0ODwsQnYwREhMUE5ylFYYRFhcYGRgaGxsDHJUdFR4SHyAhEyIjJCUcuo0cJr0nExihxgwoyYscKSnMHicOIw4lKissLdWDHC4vMCu9McYqMjMyNOUANTY3OPEoOTolDCszdrSgwaMcBxs9TMxYOCMHBx8zfPj48QNINQ5BbMBIIUShDIUoTAhR94PHPEEHbQwZckOGjBQviMxYUWQIDCMmdXE4gqRnkiFETAxR8iKFjJU2evZEdmLJkgJIbqS4wXJIUapImj5FtuSEVyRVV1IVi4RIChhEkLVAgcJHEqVwVJUmYdKkiRNkALMRecKECRG/ff8CEQJFCA5kMKJEoUHDCQ/HkB9LmWKECpUeyKoIMSLEyosen0OD7iH2xg1dV7BkqXGlBpbWNTq4Zn2khu0aAAwEAgAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-mail22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBDQyNCwqLCQiJBwaHBQSFAwKDAQCBDw6PPz+/Pz69Pz27PTy7PTy5PTu5PTu3PTu1PTq1PTqzOzmzPzuvOzitPTmvOzivAQGBDw+POzevPz67Pz25Pz23Pzy1PzyzPzqvOTavERCRKSilPz21OTevIR+ZExKTOTi3JyanLS2tPz6/Pz65KyihJSKbMS6lExOTNTW1JSWlJSKZMSylNTOrNTKpFRSVPz29MTCxPTmzKymjIyCdOTWxOzexOTWrBQWFFRWVOzu7MzKxJyalOzatLSulMzKtOzmxOTarFxaXKyqnPTmtIyGdIR+bOzetOzixBweHGRiZOzm3NzWzNzSrOTetGRmZOzizOTexOzm1JSKdGxqbHRydJySdHR2dOzapHx6fKyijOTixCwuLHx+fFxeXERGRDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4SFhoeIiYqLAQECjwORAwSUBZYFBpkHmwgJCgsMDA0OD6UQERITFBMVFhcVGBkangq1ChsLGxwcHQ0dHR4fICEGIiMSCbS3uLq8wCQUJSYGJygpKhQJKyvLLM4Nwi0uLwUwDQsxMtmeuQveHR8UMzQ1NgU3Dgo41jk6ns0cKOzgYaOHjx9AgjTAUUvIECLZNmxoUISHkSM9KiBJQkCJA4kKEoBQoWJJAiYtmjh5AmVCsCJRpHzckKCCySlUUvBYUqUHDysSPnxIEuXKA5pPRiRwxwFLFhRaIEDYUoEChCcDuECoOWKFuwW7nHkg4WELkw8/BHRRwESpt10dU8SSHevlRxIBX6C0WBE27q8GZMkKbTADjIAwYlb4GLMYShYoPTRo6FGiSJEKPyzMIFMmzJcvXbhwkSLFjJkbQW6cOHNGhAgEAdAsmk27tm0ABgIBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-mailreplyall22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBLyejPTixPz29PTu3Pzu5Pzy7Ozi1LyelPTavPz+/DwqLPz67PTetPz69ERCRLSWlPTmzPz6/OzexLyajPzqvDw+PDQ2NMyurDQiJPz23PTatJyenAQCBPTevPz25LSajOzq7HxiZPTexPz65JyanBQ6bKSmpBwuTOTi5OzaxBRCdHySvGRiZHx6fBQSFERGRNzq9IyOjHx+fGxqbPzu3BwaHFSq3Aw6XAxKfPzy3Gy63ByWzJzO7Mzi9OzavBRytAx6vCSazGRKTPzy1AQKHBRGdBRyrDy63ES+3Cym1CR6rBwWVAQSLAx+xCyCtBRmnPzuzAQWLAwePPzyzKSCbAQOJByGvOTWvPTmxBQODFQ6PPTWrPzqzOzatAwGBKyObLSWfPTivKyCZEQyNKyGZOzWrOzWtOTSrOTGpNS2lJx2XDQmJCweHCQaHCQWFBwSFBQKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpkzGjhAoYMGjZMpMghQgcNFjh4mODhA4gQGkSIHAmBwAgNJEpo8KDSxAkUGjhMSEGz5gUVIiKs2PmBRQudHiwQpUnAxYsXImB0aBqjBcuoU0fKmPGChgUNH2qIqGHjg9u3bicWIFs2rYgbNnDkyGFhb8cccQ3ouJqWQo0dPFr0WMy4h48LFj4gsKriB5AeNngEaSGks+chPnwQOXFAh4oXRYxk9nAEyY7XO2wksWHDx5ATCDIoUXEBsYclTJo4cWJhuIjhSXacSPBEiZLMQY4wgRKluvXqUpyIsDElAxUqVaxcwcGCPQuWLOixaNHCZAsXBU+oqKDSxQqULF6ifNmyn/8VMOtxwcAK36kQRhdJQIFFEmKM4eCDYGyhhYAEkqFEGSuYYcUZLaDxXRpqSNRCEu6twYaFZXTQhgRd2NCCG9918AYELTjoXgNuKAFHB2RQEUYHVbQQRwlUpPHGGFwkyQUEDsgxx4lh9BhCBy2U8UQJcrSg5JIQ0FEHG3bc0QGYK+CRhx57PEGlkhM9sAEffKTQhx9+/AEIIIGoEUgLLRRFR0AAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailreply22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAJR6fIxydIxubIRqbIRmZHxeXHRaXHRWVGxSVGROTFxGRFxCRFQ+PEw6PEw2NEQuLPwCBMSihPTixPz69PTq5Pzy1Pzu5PTq1Pzy7Pzu7Ozi1LyelPTavPz+/DwqLLSajPTetPz27LSWlPzmzPz6/PTexPz67Pz29OTSzMyurPz25LyajBRCdPzuvDQmJOzexPTevOzq5BQ6bBwuTDQiJHxiZPz23Pz65LyinPzmvBxCbHySvAQCBOTi3OTq9CweHOzaxFSq3Aw6XGy63ByWzJzO7Mzi9OzavNzq9BRytAx6vBR6tPzy3AwOHDy63Ax+xCSazCym1CR6rBwWVOzizAQSLES+3CyCtBRyrBRmnGRKTPzu1MzGtAxKfAQWLAwePPTizMy6nByGvNzWxOzWrNzOtBQKDJR2ZNS2lPTmvBQODPTatKSCbOTaxLyqlAQKHFQ6PPzyzPzqzPTu1PTivOzWtKyObPzuzOTOtLSWfPzqvAwGBKyCZPTWrPTmxNzKrEQyNOzatOTGpJx2XCQaHCQWFBwSFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYuIDBQgYNGzh08DCR4oQPIDqEmDBhJQYRIzqQIFkSAoESJCKkDGFiwgkUKTpMwECz5IASKjqsSMlSA4sWQjG4qGnzhYoQSmF0iCFjBgmWGWhQrVHCxg2sOHLo2MGjB0sLYmsWQHq1p4wdPtqemGDhB1UDQFSouKHi7oQgQmSwUMyYxcQDZQWz2EFiCJEiRoyQyLzZyGIIB47YKLwDSRAiSZSoXq1kCRHNLBK8YGKjCYskTp4ogeKkt+8oUaBImZKAAxMmVKrctqL7ihTnz7FkAT5FC4cKFbZwadIFdxcvX8KLss8iJcoUBUcq2KgAJoxyMTy4jCFTxoxEHl2GLyCDncmWM2hUIQMPY2CXhhoTfTEcA2tgVwEba7Thxhs88FdBD/ZB8MUUHMJBRhw2sAGCHBKU4UaFc1RAhxnhcdhhHUzYAUIcFdxRAh4R5KGHinu4OIVEDqTBRx81xhGHHzD8wQYQetDRI4cTAcIHGWT0EQgZa1ApCBqDcBAID1Q94IEHLtBAAyGEFGKIIWqYYQYPYNZkQEAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-mailsend22:mail mail22 22:photo:22 22:R0lGODlhFgAWAIcAAIR6fIRydHxubHRqbHRmZGxeXGxaXGRWVFxSVFxOTFRGRExCREw+PEQ6PDw2NDwuLPwCBLSijOzixPz69PTq3PTu5PTu3PTu7OTi1KyelOzavPz+/DQqLPz67LSafOzetPz27Pz29KyajPTmzPz6/NzSzLyurCwiJPz25Ozi3JyOjPzuxBRGbAwSHOzexPz23KSSlPzqvBROdISavBxSdAwaLHRiZLSinNTGxMy+vBxGZNzu9BSGrAwWJMSyrKSSjFy61ETO3BRWfPz65PTqzHTK3ByqzBSWxEzW5AQWJOTWxBRCXOTu9BSOvDzO3ByavBRKbOzaxOzizKSWlCQ2TAQCBJza7BRWdNzSxJSCbMzq9BSOtCSKrAwiPOTavPzy3LymlCySrAwmPFRKTPzy1NTGrPzu1JR+bOzatPzyzCy61ByGpOzWtJyCbPTmvPzuzIS+3FymxCSuzBR6nJyCZOTWvKSObMSujOzivAwKDOTSrNzKrJyGbDwyNOzWrMy2lIx2XBwWFBQSFBQODAwGBAQGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAWABYAAAj/AAEEEDCAQAEDBxAkULCAQQMHDyBInBgggoQJFCpYqMDxAoYMGjZwmEixg4cPGzqA6BBiAggRIzaQGEkSwgAMJCKgnNBhQogSJlKGOFHTpgYUG0TsnJBCxQoSE1i0KErAxYsOJJRuuAAjhkwZM2jUqGnDBQoUHTbciIEjx4YNOmbs4CGjB8kCZlGAALHBx4+YcTcACcJDyFSJBo6iGNIhhQkiG8BOKGLkCBK6SSQisHoWhZIbG5bMYALECI8mTZw8gTL1QJQXZ6VMiUylSpUlVpoYaXLFtm0EGmCjwJLlA2O9MrRsccKlC8kEXr7AdgEmwtkhX2SQ2BIkjBiSYzSQr/nyhUKZLIrJJOcexvlEBV7IvCBjRkmAMzHOaufhxDvJBWiQISAFxUUQQRovJNeEGmu4JxEDbKQhXxsfuFDGGW68IQMcccgxRxUkNRDhC3R8QMQIdZwXQ11JJGFbiB+QYccHaaTxhgt13OFBDGTgkUdRDrhAhx5k2JjGCB/swYcXMXwAYk190OGHHx/4wUaVepTxByAaoPEkSQ5wwMEJZAZipiCDDJIHIYV8OZEdAQEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-nav1downarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBBQSFAQGBDQyNExKTHx6fGxqbFxeXGRiZFRWVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFxaXDw6PPz+/MTCxLS2tIyKjKSmpKSipJyanAwODDQ2NHRydERCRFRSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZzQIBwSCwaj8ikcslsOp/OgHRKlQoCgymRUDAcEIkwYgxWFBYERpHQcDwgEclEQmk8DhWL2kiIXDBwExMNGRoJaUkEEH8bEQ0cGgcWAksEHX8QHBKSHk1sfxMHH5ROBBsOICGkT2wiq1CIULKztLW2t0h2QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav1leftarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ5QIBwSCwaj8ikchgQLJGBgfNZDBAKBirRekBMtYGEYsHIgsWNhOO7tCrShDU18Hg/CJAIG0o4wCUQcksTFBUSCRYSEnpUFxgIGQkJGYyNGggbHBaVjR2QCxEeWkITHQ4IH3tPFwEMA2ajAKUgqlQTTbFEE7W5vUgGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav1rightarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNGReZAQCBMTCxGRiZMzGzOTm5LSytPTy9Pz+/CwqLOTi5Ly6vCwmLMzKzJyanJSSlBQWFKymrIyGjCQeJJyWnISChISGhHx2fKyurDw6PAwODHx6fHRydDw2PERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZ2QIBwSCwaj8hkMRBQKgOCgRMZIBSk06XhEM0SA4iE4uoVLhCMhqLrdSAekMgYO5VM4BQ521mxIC4UFxBWdEkSERYYFxETGQGFSBKCGBEaGRuQSBwdeZaPXpsQCB6YZQMdEI6ZSgMepKusHh+wrCC0rLdlursGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav1uparrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBFxeXDw+PMTGxHRudPz+/JSSlLSytIyKjHR2dISChIyGjIyOjLSutLy6vKSepJyanISGhJSOlOzm7Ozu7MzGzKyurJyenDQyNGReZKSmpIR+hCwuLCQiJBwaHBQSFAwKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAZtQIBwSCwaj8ikcslsOp9QYyAQFQYEAyr0Sihkn1fDAeHVLsOJNELxVaITC0bDUU6GH5AIQ8KYrNtFVxQVFBYWFxgRCREYdUQZGhYEDwgIGxAHCQocCgWOQhmhGR0epR8gqCFTq1Wtrq+wsUt0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav2downarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAQGBBwaHDQyNExKTHx6fGxqbFxeXGRiZFRSVDw+PAwKDJSWlOzu7LSytJyenJSSlISGhISChIyOjFRWVDw6PPz+/MTCxLS2tGRmZDQ2NAwODJyanKSmpKSipIyKjHRydBQSFERCRExOTFxaXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAasQIBwSCwah4FkQKBsDpoBIqFgOCASCYRWm1AUFgRGkdBwPCARiWRCaTwOFYvYSIhcMOiJpJGZaDYcR0IEHXceEQ0fICEWIoJDhHcQHxIHgI9SEHeVG46YUh8OISOen1INCqWmUnOYTUxQAU9NUlRWWFtbCiRgrYNlZ2lriG8lYUd1khETE24gCZeCkRgeFBAQIAeNn9OTlXKrBJoYnKrcoaPmpmSpq3S+7u50QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav2leftarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExKTJSSlHx6fAQGBOzu7GxqbJyenPz+/LSytFxaXMTCxGRiZKSmpISGhFxeXISChAwKDFRWVHRydJSWlBQSFERCRIyKjDQ2NIyOjLS2tDw6PBwaHFRSVDw+PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAavQIBwSCwaj8gkMiBYNpeDZzEQXRIKBmPgmtUSDgipcAsWjxOKBaN7Tq+n6EbCIQ3E5+KtQk6gjwl7CX11D3sPBBARTQGFDYeJT2R8EhB0koKUfgATFBUSCRYSEoqcnqCiikMXGAgZCQkZqautr7FiFxoIGxwWqQC4ury+qh2tCxEexMbIRhMdDggfYs7Q0kcXAQwDbELY2txEziBmmx3jSRNMR+nk4e2b70ry80QGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-nav2rightarrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTGxOzm7CwqLLy2vPTy9Pz+/Ly6vCQiJLSytLS2tLSutOTi5MzGzKSepIyKjJSOlKSmpMzKzJyanIyOjBwaHIyGjISGhJSSlISChBQSFJyenIR+hGxubDw+PHRydHR2dEQ+RHx6fERCRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8hkIIBcJgEBweAYnTYJUmMAa9USClniFtwlGg6IRFhoUKTXwwWj0FB3F46Hwl6UQyISfAB+EROCQgsUFRYSF3yJEIyBaxgWDBkaGRtclQwSHBIbEGEdGx4fGhcOICEDGBsWHBmqIq1CHRIWGRMMIyRTHRy6Er22tyONq8YdJRe0xkIDwr2/QwMfliMmZQADIxasZd4e4UYDIr7c59rc0eVFA+/m0EQD9PDt0flP/P3+BkEAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-nav2uparrow22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBGReZDQyNMTCxHx6fPz+/JyWnKyurHx2fDw6PJSSlISGhIyKjIyGjISChLy6vJyanOTm5PTy9OTi5MzKzLSytKSepMTGxMzGzLS2tLSutKymrHRydCQiJCwmLBwWHAwODLy2vHx+fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAajQIBwSCwaj8RAAMkUBgSDZdP4JBSi06TAcEAkFNLp07BgLLzY5njRcDzO3zB1C4lEGI83Wj58SiYUFRUWdg0XEXFFAwIYGRoWGxwRZQUFHZdgRAObmx4fHiChISFKpVlKWUdPaalOAlasp1sHG4myZGZ7Yltsbgu1mUhjdRF5egmxfQJ/gYOFdrZDi40iFgiSCw8jBQmYcpydn6Ego6WorUwGQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-navback22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRGZAxCZGyavExmjHyatOTy9CxihISevPz+/KzO3BRylAw+XAQCBDRWbPz6/FzC3CSuzDyexJzO5Mzq9CxSdAQOFISmxNzu9HTS5BSmxAyexDSuzJTa7Mzu9Kzi7GS21CRmjAQOHHSWtLze7AyWvHzG3BRihAQKFCTO3BS+1AyixBSWvBSOtBSStAQWJBSixDzW5BTC3BSqzBS21CTC1ETW3AQSHEze7BRqlBRmjAQCDBR+pBRefBRSdCH5BAEAAAAALAAAAAAWABYAAAalQIBwSCwaj8ikMqBcMpvHgGAANQYIhWdVGDAcENQtIJBQLBgNx0MQaDuQXcghIplQDhBIxXKJYiAZGhscHR4VHyAhIiNWJBklGhIbJoQnFCcTKIxFKSgbKissJi0mJi4vLiYoMEcXKDEyMzQ1Nje2NisoOEg4KDU5K6g6OwwoKAN9SCOeMmgwz884PEq9PT4NYkPLP9jZQikN3d4AKVrjKePp3gZBACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-navdown22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VCRKZDRSbBxCXJTC1Mzi7Nzq9NTm9Bx2nAQCBNzu9JzG3Hy+1HzG3IzO5BRmjPz6/LTe7Dy61AyStCTC1FzC1AyGrETS3ETC1ETa5BRulAyuzBRylAw+XMTe7Gy+3CSqzAyexBTC3DR+nIS21KTW5Nzu/KzO3FzC3Pz+/ByixEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaRQIBwSCwaj8ikcnkMBAQDgjPAFAYKhsMBkVBUAYEFo+F4QLzVQEQyoVTOX/XBcsHA0+vMRbNBMwkRDhxuHX5GTlIeHh8gISIjFAEeiVRECiQlDAUmgxQjIhwiJHdFlycoKSIUFCEjGiGkRpcqCxYijxorsUezcxYsuoZJsxLAu0qXB7DCTJfHVQrMX9PU1Uh0QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-navforward22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBBxCXDR+nIS21Aw+XJTC1Nzu/KzO3Pz+/Nzq9Pz6/MTe7KTW5FzC1Nzu9CRKZMzi7IzK3Lzi7LTe7HzG3Gy+3AyuzAyexFzC3DRSbHy+1Dy61CSqzAySvAyStLze7IzO5AyGrETa5ByixBRmjCTC1ETS3BTC3Bx2nAyWvEze7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAaYQIBwSCwaj8hkMqBsBgTN5IAAjRoDBaq1aDggtMuAWDzoJhTgY+CwYLgZDccDwkgXI5IJZVGxXDAZGnR2QxsLHB0PHRgeHyAZDyFfVUQDCyIgIyCPIB+QJCUmlEMBEiInKCQnKSkeKSQeomoqJrUmKiArKSwZsmoCwMEBGCyxo1EGHr3HUQEEvltCBtDRAAbMW0zV29xDBkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-navhome22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIYAAPwCBAQCBCQiJNze3ERCROTi5MzGzLy6vDw6PKyqrKyurBQSFGRiZGxqbGRmZISChEQ+RExKTExOTHRydDQyNOTe5FROVLSurCwqLMTCxPT29Pz6/LSutFxeXLyytLSytPz+/JSWlKympPTq7KSipNzW3BwaHHx6fKx2VJRWNHQmBFweDOzq7Ly+vNTW1JxWNLSajPTe1Ny6pKxWJNTS1IyOjJRmbPTi3OzKrNSSXMSGVHQiBHx+fJSSlPzy9IxOVOzWxOSyjNSCPLxeDJyWnIRGTOTGtMxmDLRWBHwqBIxGTLRSDDQuNNSunKxKBGwyNMSafMxqHMReDKRGDPTu9LxuPLxaDJQ+DIR+hGQqNIQyBGQiBNTO1EQKBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAf/gACCg4QBAYSIiYQCAwQCiokEhwACBQYHBAiQhAiHlQYJCgkEC5uCkp8MDQ4NDwylmwgQlgQRERIEBBOkmxQVBgQWFwUFFxEEDLyJGAUZtQoFGhsFHLYdyoOVHsEf0SAbIAUex8mwlAUhtSIFG+3uIyTWvAIGJMEkJe76GyXbEeWUBJg4USKaBhQpVKzYoIFFiwYUBBJa8MAFCw0vYMSQMWOhBhoTKCQSUKMEiw02buDIoWOHBg0GeIhEFKAHDR8afgAJImSIioYliMws1MPkhiJGchxBkmTDCBo1hg4KQMTiBiUyhBxZ8pNFiR5MEtU0WqSJVidJNDyNKraHC5xPNKBEkTLlJ5WvUgWNvfikyhArV34+7ZEXQAAsB2iUyHLlihYtW0pwOYAFgyJDmDNr7jIIWiAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-navup22:nav nav22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAw2VAQCBHSWtBRmjAQOHISmxNzu9BSmxBRihHyatPz6/Lze7CTO3BSixHTS5BTC3DzW5ByyzPz+/OTy9AyexEze7ByixGyavKzO3FzC3AyWvBS+1BR+pAQKFCRGZExmjCxihBRylCSuzBSWvBS21BSOtBRSdAw+XAxCZDyexDSyzCTC1JzO5JTa7DSuzETW3BRqlAQWJDRWbOT2/Mzq9HzG3JzS5Kzi7BSStGS21CxSdCRmjAQOFAQSHAAAACH5BAEAAAAALAAAAAAWABYAAAaeQIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbUGFAtGw0GFfheHByQi4S6/E8pDUoFYLm5kAEPJaBAVGxIcER0JHlEfICEiIxUkGyUmIgknKIhXASkonCorgSwmKQGcKE9IAi0uLxUwMTJWMzQ1NiYwBLBQHws1N7avXgs4NjkcCblMATU6KhvGyG87PAnUKV1MAj0+2zIFp1bg4eJJdkEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-playeject22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAwKDJSWlFRSVBQSFKymrOzq7HRydERCRPz+/MzGzISGhJyenKSmpGxqbJyWnJSOlKSepLy2vIyOjGRiZPTu9IyGjLSutFxaXExOTHx2fGReZAQCBAQGBBwaHCQiJLSytKyurJSSlFxeXNze3LS2tIyKjFxWXHRudAwGDBQOFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcqkMCJjHwIBQgBIDhgMiUbVKFQsGItBdBhpgh4PxIJvRC8cA4oiMy8bvQhJhMAYTFBVOURAWEw0QFxcMERAYCBluVxobDxkVHJocmBwEGgmEQx0dHh0CpKmkH6odVlanBR8FtAIFtiCkSB0LISEiGCIGIxAPDySuRwIOBwrOzwoHJRHJRh0jJgMj2gMnERQUCNVFHQQoCBvo6CkICATjRB0qp7b1K6qv+foyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-playend22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNFxeXAQCBMTCxGReZBQSFOzm7AwKDKymrJSSlFRSVCwqLLy6vPTy9OTe5Ozq7CQiJLSytOTi5BwaHPz+/HRydMzKzKSepJSOlKSipJyanIyGjIyKjKyurISGhMzGzJyWnHR2dISChIyOjLSutDw+PERCRHx6fJSWlIR+hJyenGRmZHx2fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa6QIBwSCwaj8ikMBBQKgOCgRMZIBSkxYHWoDVWD9EigpBQLLBERsPxCA8NDUhjgTBGJJNGG02RVBQWdUV3FxgZe0IGfoAGdhoXGxwdiAYef4FGFBoeHB8dGSBRihUhIo1FBhkbIyMkJRYmAwYal4JEBh2RChIWJ1IIGxUZFqdECCgkHR6wWAYpFR2YWSobvL5vFgfDaEMDIivMRBEsD9HcQgMWvecDLB0tZ0btsfJa9vLXU/X6/P3+b0EAACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-playpause22:play play22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBAwODMTCxKSmpJSWlFRSVAQGBBwaHLSutOzq7Ly6vCQeJPz+/Hx2fBQWFGxubLSytJSOlBQOFAwKDJSSlJyWnIyOjHRydNze3GRiZAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAWBICCOZGmeaKqubOumQSDEgRjPMSoMRGEcol3vh0IkFAtDDWBEKlGMRKPgEIii0yrqIS1ArADu9KuLNCSOSdCMVp8ohEZFC4DL6SaBpXGh6/l4JX8XZACDhXkYCn1LAoqMUBAZEhBLDJKUSyYBGmhPAJyemiU0NDaloy+qq6ytI8whACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-playstart22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBDQyNAQCBExOTAwKDAQGBJSSlHx+fBQSFMTCxKymrFRSVOzu7GxqbLSytLy6vJyanPz+/GReZBwaHHRydKSepKSipGRiZJyWnAwODLSutKSmpISChPTu9ISGhFxaXJSWlIyGjJSOlERCRIyKjDw2PIyOjLy2vOzm7Dw6PLS2tCQmJOTe5GxmbDQ2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa7QIBwSCwaj8ik0hgQLJGBgbMoqBIKU2LAcMgOEQmFYeEFbBmNMgDhYDwWBC0k4pCoJ46IgRIXBioRCRYXamwRGBQIfgaBFhiERhkaenxmCoEbBhyQRYaIGVsdghgem4UWegcEBB8UHhsgIaZGBBgRIpUIIxQhChginEQIIBEklWslFyYnBsFfFCi4WQgpFBwqFxNGKxcsxl4IAS0NZEYCF3vlwgEfUuZV8JEuI2pPAARN9kcE9fr+SwaCAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-playstop22:play play22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBAQCBAwKDBQSFBwaHCQmJJSSlISChJSOlJSWlGxqbGRiZNTS1PTy9Pz+/Ozm7OTi5FRSVIyKjOTe5MTCxIR+hExOTHR2dLy6vLSytLy2vHRydFxWXIyGjIyOjPz2/FRWVHx6fExKTMzOzJyanKSmpKyqrKSipAQGBLSutHx2fDw6PAwODAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAa1QIBwSCwaj8ikcslsAgKCAWEQjQ4KgSwyYDAcugZEQqFYYJECA6PhaLcfEEUkgJZAGJB8fkKpWOhHAxcOGBQZGBoaGQgbHIBGAhUOGR0SBxISBh4Xf0iCHxQSlRIIXhsgj0UCIaCXmJgHGyKpRJ+hmB5dHQqOaCENIx0epBIkBhdzngoPGCQlJifQJBvJRygRKRcKGxcXGypys1srEREc5SLnICLiR1koLFVUWfRO9vf4+UwyQQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-textblock22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUWzvNzo33GfFl5jVlonlTrr1DbvFi9vjeeNUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textbold22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIxhI+py+0Powm0VnknjVkH2AEhE45LZ55Wqn6e65TsMc5eYosbksswubJIhsSiccgvAAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-textcenter22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUbz3Sh7yIWfFHKjVl4nmFrr1Lpr7LwkjeeIUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textitalic22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py+0P4wqUSlQvttrkDnyaOHIdeaGRupplAIauVM3xjeeOUQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textleft22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+pyw0Bo5zB2UXz3Sp7yG2fFJajVjonmIor2TJvfL0wjecIXQAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textright22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAImhI+py30Bo5zBWUfz3SZ7yIXdF4kWqZkbCqoMO7kXLC+wVOe6YRQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-text22:text text22 22:photo:22 22:R0lGODlhFgAWAIQAAPwCBAQCBBwaHAwKDBQSFLy+vLS2tJSWlBQWFKyqrFRSVCwqLDQyNNTS1GxqbFxaXJyanIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAVcICCOZGmKQSoMaZsShBsQBdAapHvgaIDUqUPJlRjSbAoT0fRDKgODRbF0PLUYjZO2F2Bst9evNix+dsvDlGKK5jraudQb7qbX6a2HEJ+ycyF+LRE8ZTI+fX5oGCEAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-textunder22:text text22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIvhI+py+0PowmUnhpeVVnb1DkbCI1I2JhX+Z0sOr2cTHpwK7a4rUr+hAnufsTirwAAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewchoose22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz69PTq5Pz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq70466Cl+AMxBVwnFIVRAmQHCIeBrC1L3tQgJ/SaEbeeC1PLBHE2ybFI9A1HzstHEIK6YCmhDTmBybQaHYJn7QC5zKeytIQe1+pKNE6P2yMAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewdetailed22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAQ+EMhJq7046817+MLQUQFRGMc4lQaSAkcMx3QltMmrDrSu/sCgEPgJhIiFk89DaL1qPRnlhsgBebWhdstVESIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewicon22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz69PTq5AQCBPz+/OzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARWEMhJq7046z2DF0PlBeAVEERhiKhqHgWyUgEsX0KczFOO7JeBYciTCImc5ITIXDKHyqhU9AnRqq9UEVDTvmLbGhin2/qAliOUot5OLc81IO5+2+8WewQAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewmag-22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbKQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/avno2BBf/MCClSob4iBIAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewmag22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbIQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/47vrq9P3s/cunr9S8gAIRFhTCLAgAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewmag+22:view view22 22:photo:22 22:R0lGODlhFgAWAIUAAPwCBBQSFJyanKy2tLzCxHyChNTa3Nzq7Nz29Nzy9Mzy9MTu9OTy9Nzi5Oz6/OT29MTi5Kzi7NTy9KTm7JzW3ITO1Lzq7IzW5HzK1LS+vMTq7Jze7ITW3GTCzGS+zLTS1MzOzLzq9Kzm7Jze5ITW5HTS3FS2vLze5EzCzEyyvEyutJTa5NTu9ITa5FTK1ESirLTm7Mzi5FS6xEy2vESerESmtFSutESmrKyqrAz+/Dw+RAzi3ASutHRydAQCBAAAACH5BAEAAAAALAAAAAAWABYAAAbQQIBQGCgWh8jksCgYEAaCozIZKBgOiIRiwSgEpstCw/HYQiKRhBcMCBgQDodkMaFU0t9pQHCIyy0TFxgYEVF6GQ4LCQkaERscHR4RH3lUIAkWCyEiIyQlHiYjEJVIAQQJJ2gjJSUoKSorlHoCLBQcHC0lLikvHjCGejEiHBgeMjM0NRwPpFQFDBHFNjceHAjAYFWoI7cnCVE4OWxtex8QH1EBOjs4zUpGUjw6Pe3j2fP19u/4zT766vRI+fvHD4CPgwcJ9qg0UB85JA0dDjEQBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='del'>-viewmulticolumn22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBFRSVExKTDQyNPz+/Pz69PTq5AQCBOzaxOTKpAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARTEMhJq7046813+MJQfUF4BURhHGO6noSBsEcNoDJtS4KcsJQe4ncZ1HYT47HDbDqfUAnJRJmKLIGCCjjJbmE5wBI3EyOFxKCPS1EiJW52dE6vZyIAIf5oQ3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-viewtext22:view view22 22:photo:22 22:R0lGODlhFgAWAIAAAPwCBAQCBCH5BAEAAAAALAAAAAAWABYAAAIkhI+py+0Po2ShBlOxzbP7n2yaJoLm+ZTcxqHuC6hXzML2HVEFACH+aENyZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2ZWxjb3IuY29tADs=</div><div class='del'>-viewtree22:view view22 22:photo:22 22:R0lGODlhFgAWAIMAAPwCBAQCBFRSVExKTDQyNPz+/Pz69Pzu5PTq5OzaxBQOFOzKpFRWVFxWXOzexPTexCH5BAEAAAAALAAAAAAWABYAAARPEMhJq704g6A779kHCORAgNskFMYhakE8FkjyBcoWv+JwJItXaELYCTFHlCSpZKKcoB5jYHpOGgUadLKbIRw3jhEzQDyCSuI4zW673yhDBAAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/ICONS/viewIcons.rb b/ext/tk/sample/tkextlib/ICONS/viewIcons.rb<br/>deleted file mode 100644<br/>index fc88eb5c85..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/ICONS/viewIcons.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/ICONS/viewIcons.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,329 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#   viewIcons.rb</div><div class='del'>-#</div><div class='del'>-#     --  Display icons from icon library.</div><div class='del'>-#</div><div class='del'>-#     --  Copy the clicked icon data (command string of creating </div><div class='del'>-#         a TkPhotoImage instance) to the clipboard.</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/ICONS'</div><div class='del'>-</div><div class='del'>-class ViewIcons</div><div class='del'>-  #####################################</div><div class='del'>-  private</div><div class='del'>-  #####################################</div><div class='del'>-  def _create_controls</div><div class='del'>-    @controls = base = TkFrame.new</div><div class='del'>-    columns = TkFrame.new(base)</div><div class='del'>-    line1 = TkFrame.new(base, :height=&gt;2, :borderwidth=&gt;1, :relief=&gt;:sunken)</div><div class='del'>-    line2 = TkFrame.new(base, :height=&gt;2, :borderwidth=&gt;1, :relief=&gt;:sunken)</div><div class='del'>-</div><div class='del'>-    lbl_library = TkLabel.new(base, :font=&gt;@boldfont, :text=&gt;'Library')</div><div class='del'>-    lbl_groups  = TkLabel.new(base, :font=&gt;@boldfont, :text=&gt;'Groups')</div><div class='del'>-    lbl_columns = TkLabel.new(base, :font=&gt;@boldfont, :text=&gt;'Columns')</div><div class='del'>-</div><div class='del'>-    ent_library = TkEntry.new(base, :width=&gt;50, :textvariable=&gt;@library)</div><div class='del'>-    ent_groups  = TkEntry.new(base, :width=&gt;50, :textvariable=&gt;@groups)</div><div class='del'>-</div><div class='del'>-    btn_browse = TkButton.new(base, :text=&gt;'Browse', </div><div class='del'>-                                    :command=&gt;method(:select_icons))</div><div class='del'>-    btn_view   = TkButton.new(base, :text=&gt;'View',</div><div class='del'>-                                    :command=&gt;method(:display_icons))</div><div class='del'>-    btn_exit   = TkButton.new(base, :text=&gt;'Exit', :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-    @column_btns = {}</div><div class='del'>-    6.step(20, 2){|i|</div><div class='del'>-      @column_btns[i] = TkButton.new(columns, </div><div class='del'>-                                     :text=&gt;i.to_s, :width=&gt;2, </div><div class='del'>-                                     :command=&gt;proc{set_columns(i)}</div><div class='del'>-                                     ).pack(:side=&gt;:left)</div><div class='del'>-    }</div><div class='del'>-    @column_btns[@columns][:relief] = :sunken</div><div class='del'>-</div><div class='del'>-    lbl_library.grid(:row=&gt;0, :column=&gt;0, :padx=&gt;4)</div><div class='del'>-    ent_library.grid(:row=&gt;0, :column=&gt;1)</div><div class='del'>-    btn_browse.grid(:row=&gt;0, :column=&gt;2, :padx=&gt;4, :pady=&gt;2, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-    line1.grid(:row=&gt;1, :column=&gt;0, :pady=&gt;2, :columnspan=&gt;3, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-    lbl_groups.grid(:row=&gt;2, :column=&gt;0, :padx=&gt;4)</div><div class='del'>-    ent_groups.grid(:row=&gt;2, :column=&gt;1)</div><div class='del'>-    btn_view.grid(:row=&gt;2, :column=&gt;2, :padx=&gt;4, :pady=&gt;2, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-    line1.grid(:row=&gt;3, :column=&gt;0, :pady=&gt;2, :columnspan=&gt;3, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-    lbl_columns.grid(:row=&gt;4, :column=&gt;0, :padx=&gt;4)</div><div class='del'>-    columns.grid(:row=&gt;4, :column=&gt;1, :padx=&gt;2, :sticky=&gt;:ew)</div><div class='del'>-    btn_exit.grid(:row=&gt;4, :column=&gt;2, :padx=&gt;4, :pady=&gt;2, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-    base.pack</div><div class='del'>-</div><div class='del'>-    ent_library.bind('Return', method(:display_icons), '')</div><div class='del'>-    ent_groups.bind('Return', method(:display_icons), '')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create_display</div><div class='del'>-    base = TkFrame.new(:borderwidth=&gt;2, :relief=&gt;:sunken)</div><div class='del'>-</div><div class='del'>-    @icons_window = icons = TkCanvas.new(base)</div><div class='del'>-    xscr = icons.xscrollbar(TkScrollbar.new(base))</div><div class='del'>-    yscr = icons.yscrollbar(TkScrollbar.new(base))</div><div class='del'>-</div><div class='del'>-    icons.grid(:row=&gt;0, :column=&gt;0, :sticky=&gt;:news)</div><div class='del'>-    yscr.grid(:row=&gt;0, :column=&gt;1, :sticky=&gt;:ns)</div><div class='del'>-    xscr.grid(:row=&gt;1, :column=&gt;0, :sticky=&gt;:ew)</div><div class='del'>-    base.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-    base.grid_columnconfigure(1, :weight=&gt;0)</div><div class='del'>-    base.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    base.grid_rowconfigure(1, :weight=&gt;0)</div><div class='del'>-    # yscr.pack(:side=&gt;:right, :fill=&gt;:y)</div><div class='del'>-    # xscr.pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-    # icons.pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    @icons_layout = TkFrame.new(icons).pack</div><div class='del'>-    TkcWindow.create(icons, 0, 0, :anchor=&gt;:nw, :window=&gt;@icons_layout)</div><div class='del'>-    @icons_layout.bind('Configure', method(:layout_resize), '')</div><div class='del'>-</div><div class='del'>-    base.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create_info_window</div><div class='del'>-    @info_window = TkToplevel.new(:background=&gt;'lightyellow', :borderwidth=&gt;1, </div><div class='del'>-                                  :relief=&gt;:solid){|w|</div><div class='del'>-      lbl_name = TkLabel.new(w, :text=&gt;'Name', :background=&gt;'lightyellow', </div><div class='del'>-                             :font=&gt;@boldfont, :justify=&gt;:left)</div><div class='del'>-      lbl_grps = TkLabel.new(w, :text=&gt;'Groups', :background=&gt;'lightyellow', </div><div class='del'>-                             :font=&gt;@boldfont, :justify=&gt;:left)</div><div class='del'>-      lbl_type = TkLabel.new(w, :text=&gt;'Type', :background=&gt;'lightyellow', </div><div class='del'>-                             :font=&gt;@boldfont, :justify=&gt;:left)</div><div class='del'>-      lbl_size = TkLabel.new(w, :text=&gt;'Size', :background=&gt;'lightyellow', </div><div class='del'>-                             :font=&gt;@boldfont, :justify=&gt;:left)</div><div class='del'>-</div><div class='del'>-      lbl_name.grid(:row=&gt;0, :column=&gt;0, :sticky=&gt;:w)</div><div class='del'>-      lbl_grps.grid(:row=&gt;1, :column=&gt;0, :sticky=&gt;:w)</div><div class='del'>-      lbl_type.grid(:row=&gt;2, :column=&gt;0, :sticky=&gt;:w)</div><div class='del'>-      lbl_size.grid(:row=&gt;3, :column=&gt;0, :sticky=&gt;:w)</div><div class='del'>-</div><div class='del'>-      @name = TkLabel.new(w, :background=&gt;'lightyellow', :justify=&gt;:left)</div><div class='del'>-      @grps = TkLabel.new(w, :background=&gt;'lightyellow', :justify=&gt;:left)</div><div class='del'>-      @type = TkLabel.new(w, :background=&gt;'lightyellow', :justify=&gt;:left)</div><div class='del'>-      @size = TkLabel.new(w, :background=&gt;'lightyellow', :justify=&gt;:left)</div><div class='del'>-</div><div class='del'>-      @name.grid(:row=&gt;0, :column=&gt;1, :sticky=&gt;:w)</div><div class='del'>-      @grps.grid(:row=&gt;1, :column=&gt;1, :sticky=&gt;:w)</div><div class='del'>-      @type.grid(:row=&gt;2, :column=&gt;1, :sticky=&gt;:w)</div><div class='del'>-      @size.grid(:row=&gt;3, :column=&gt;1, :sticky=&gt;:w)</div><div class='del'>-</div><div class='del'>-      def name(txt)</div><div class='del'>-        @name['text'] = txt</div><div class='del'>-      end</div><div class='del'>-      def groups(txt)</div><div class='del'>-        @grps['text'] = txt</div><div class='del'>-      end</div><div class='del'>-      def type(txt)</div><div class='del'>-        @type['text'] = txt</div><div class='del'>-      end</div><div class='del'>-      def size(txt)</div><div class='del'>-        @size['text'] = txt</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      overrideredirect(true)</div><div class='del'>-      withdraw</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(init_path = Tk::LIBRARY)</div><div class='del'>-    init_path = Tk::LIBRARY unless init_path</div><div class='del'>-    init_path = File.expand_path(init_path)</div><div class='del'>-    if File.directory?(init_path)</div><div class='del'>-      @initial_dir  = init_path</div><div class='del'>-      @initial_file = 'tkIcons'</div><div class='del'>-    else</div><div class='del'>-      @initial_dir  = File.dirname(init_path)</div><div class='del'>-      @initial_file = File.basename(init_path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if Tk::PLATFORM['platform'] == 'unix'</div><div class='del'>-      TkOption.add('*HighlightThickness', 0)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @columns = 14</div><div class='del'>-    @command = ""</div><div class='del'>-</div><div class='del'>-    @delay_timer = nil</div><div class='del'>-</div><div class='del'>-    dummy = TkLabel.new</div><div class='del'>-    @font = dummy.font</div><div class='del'>-    @boldfont = TkFont.new(@font, :weight=&gt;:bold)</div><div class='del'>-    @icons = {}</div><div class='del'>-    @icon_name = {}</div><div class='del'>-    @icon_info = {}</div><div class='del'>-</div><div class='del'>-    @library = TkVariable.new(File.join(@initial_dir, @initial_file))</div><div class='del'>-    @groups  = TkVariable.new('*')</div><div class='del'>-</div><div class='del'>-    _create_controls</div><div class='del'>-</div><div class='del'>-    _create_display</div><div class='del'>-</div><div class='del'>-    _create_info_window</div><div class='del'>-</div><div class='del'>-    Tk.root.title('viewIcons')</div><div class='del'>-    layout_resize</div><div class='del'>-    Tk.root.resizable(false, true)</div><div class='del'>-</div><div class='del'>-    display_icons</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def init_info(item, name)</div><div class='del'>-    @icon_name[item] = name</div><div class='del'>-</div><div class='del'>-    item.bind('Button-1', method(:clip_info),  '%W')</div><div class='del'>-    item.bind('Enter',    method(:delay_info), '%W')</div><div class='del'>-    item.bind('Leave',    method(:cancel_info), '')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delay_info(item)</div><div class='del'>-    cancel_info</div><div class='del'>-    @delay_timer = TkTimer.new(200, 1, proc{ show_info(item) }).start</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cancel_info</div><div class='del'>-    if @delay_timer</div><div class='del'>-      @delay_timer.cancel </div><div class='del'>-      @delay_timer = nil</div><div class='del'>-    end</div><div class='del'>-    @info_window.withdraw</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_info(item)</div><div class='del'>-    name, groups, type, size = @icon_info[@icon_name[item]]</div><div class='del'>-    @info_window.name(name)</div><div class='del'>-    @info_window.groups(groups)</div><div class='del'>-    @info_window.type(type)</div><div class='del'>-    @info_window.size(size)</div><div class='del'>-</div><div class='del'>-    info_x = item.winfo_rootx + 10</div><div class='del'>-    info_y = item.winfo_rooty + item.winfo_height</div><div class='del'>-</div><div class='del'>-    @info_window.geometry("+#{info_x}+#{info_y}")</div><div class='del'>-    @info_window.deiconify</div><div class='del'>-</div><div class='del'>-    @info_window.raise</div><div class='del'>-</div><div class='del'>-    @delay_timer = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def primary_transfer(offset, max_chars)</div><div class='del'>-    @command</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lost_selection</div><div class='del'>-    @command = ""</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clip_info(item)</div><div class='del'>-    name = @icon_name[item]</div><div class='del'>-    data_width = 60</div><div class='del'>-</div><div class='del'>-    cmd = "#{name} = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')\n"</div><div class='del'>-</div><div class='del'>-    icon_data = Tk::ICONS.query(name, :file=&gt;@library.value, :items=&gt;'d')[0][0]</div><div class='del'>-</div><div class='del'>-    icon_data.scan(/.{1,#{data_width}}/m){|s| cmd &lt;&lt; '   ' &lt;&lt; s &lt;&lt; "\n"}</div><div class='del'>-</div><div class='del'>-    cmd &lt;&lt; "EOD\n"</div><div class='del'>-</div><div class='del'>-    @command = cmd</div><div class='del'>-</div><div class='del'>-    TkClipboard.clear</div><div class='del'>-    TkClipboard.append(@command)</div><div class='del'>-</div><div class='del'>-    if Tk::PLATFORM['platform'] == 'unix'</div><div class='del'>-      TkSelection.handle(Tk.root, method(:primary_transfer), </div><div class='del'>-                         :selection=&gt;'PRIMARY')</div><div class='del'>-      TkSelection.set_owner(Tk.root, :selection=&gt;'PRIMARY', </div><div class='del'>-                            :command=&gt;method(:lost_selection))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    Tk.bell</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def layout_resize</div><div class='del'>-    Tk.update</div><div class='del'>-    bbox = @icons_window.bbox('all')</div><div class='del'>-    width = @controls.winfo_width - @icons_window.yscrollbar.winfo_width - 8</div><div class='del'>-</div><div class='del'>-    @icons_window.configure(:width=&gt;width, :scrollregion=&gt;bbox, </div><div class='del'>-                            :xscrollincrement=&gt;'0.1i', </div><div class='del'>-                            :yscrollincrement=&gt;'0.1i')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_icons</div><div class='del'>-    new_lib = Tk.getOpenFile(:initialdir=&gt;@initial_dir, </div><div class='del'>-                             :initialfile=&gt;'tkIcons', </div><div class='del'>-                             :title=&gt;'Select Icon Library', </div><div class='del'>-                             :filetypes=&gt;[</div><div class='del'>-                               ['Icon Libraries', ['tkIcons*']], </div><div class='del'>-                               ['All Files', ['*']]</div><div class='del'>-                             ])</div><div class='del'>-</div><div class='del'>-    @library.value = new_lib if new_lib.length != 0</div><div class='del'>-    display_icons</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display_icons</div><div class='del'>-    column = 0</div><div class='del'>-    limit = @columns - 1</div><div class='del'>-    row = 0</div><div class='del'>-</div><div class='del'>-    unless File.exist?(@library.value)</div><div class='del'>-      Tk.messageBox(:icon=&gt;'warning', :message=&gt;'File does not exist', </div><div class='del'>-                    :title=&gt;'viewIcons')</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    cursor = Tk.root[:cursor]</div><div class='del'>-    Tk.root[:cursor] = 'watch'</div><div class='del'>-</div><div class='del'>-    Tk::ICONS.delete(@icons)</div><div class='del'>-</div><div class='del'>-    @icons_frame.destroy if @icons_frame</div><div class='del'>-    @icons_frame = TkFrame.new(@icons_layout).pack</div><div class='del'>-</div><div class='del'>-    @icons = Tk::ICONS.create(:file=&gt;@library.value, :group=&gt;@groups.value)</div><div class='del'>-</div><div class='del'>-    Tk::ICONS.query(:file=&gt;@library.value, :group=&gt;@groups.value).each{|inf|</div><div class='del'>-      name = inf[0]</div><div class='del'>-      @icon_info[name] = inf</div><div class='del'>-</div><div class='del'>-      lbl = TkLabel.new(@icons_frame, :image=&gt;"::icon::#{name}")</div><div class='del'>-      lbl.grid(:column=&gt;column, :row=&gt;row, :padx=&gt;3, :pady=&gt;3)</div><div class='del'>-      # lbl.grid_columnconfigure column</div><div class='del'>-</div><div class='del'>-      init_info(lbl, name)</div><div class='del'>-</div><div class='del'>-      if column == limit</div><div class='del'>-        column = 0</div><div class='del'>-        row += 1</div><div class='del'>-      else</div><div class='del'>-        column += 1</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tk.root[:cursor] = cursor</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_columns(columns)</div><div class='del'>-    @columns = columns</div><div class='del'>-    6.step(20, 2){|i| @column_btns[i][:relief] = :raised }</div><div class='del'>-    @column_btns[@columns][:relief] = :sunken</div><div class='del'>-    display_icons</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ViewIcons.new(ARGV[0])</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/barchart5.rb b/ext/tk/sample/tkextlib/blt/barchart5.rb<br/>deleted file mode 100644<br/>index db181d10ca..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/barchart5.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/barchart5.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,101 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-load File.join(File.dirname(File.expand_path(__FILE__)), </div><div class='del'>-               'scripts', 'stipples.rb')</div><div class='del'>-</div><div class='del'>-TkOption.add('*graph.x.Title', 'X Axis Label')</div><div class='del'>-TkOption.add('*graph.y.Title', 'Y Axis Label')</div><div class='del'>-TkOption.add('*graph.title', 'A Simple Barchart')</div><div class='del'>-TkOption.add('*graph.x.Font', 'Times 10')</div><div class='del'>-TkOption.add('*graph.Element.Relief', :raised)</div><div class='del'>-</div><div class='del'>-visual = Tk.root.winfo_screenvisual</div><div class='del'>-if visual != 'staticgray' &amp;&amp; visual != 'grayscale'</div><div class='del'>-  TkOption.add('*graph.LineMarker.color', 'yellow')</div><div class='del'>-  TkOption.add('*graph.Element.Background', 'white')</div><div class='del'>-  TkOption.add('*graph.Legend.activeForeground', 'pink')</div><div class='del'>-  TkOption.add('*print.background', 'yellow')</div><div class='del'>-  TkOption.add('*quit.background',  'red')</div><div class='del'>-  TkOption.add('*graph.background', 'palegreen')</div><div class='del'>-  TkOption.add('*graph.plotBackground', 'lightblue')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-htext = Tk::BLT::Htext.new(:widgetname=&gt;'.htext', :text=&gt;&lt;&lt;EOD)</div><div class='del'>-    This is an example of the barchart widget.  The barchart has </div><div class='del'>-    many components; x and y axis, legend, crosshairs, elements, etc.  </div><div class='del'>-    To create a postscript file "bar.ps", press the %%</div><div class='del'>-</div><div class='del'>-    ruby {</div><div class='del'>-    b = TkButton.new(Tk::BLT::Htext::Htext_Widget.window, </div><div class='del'>-                     :widgetname=&gt;'print', :text=&gt;'Print', </div><div class='del'>-                     :command=&gt;proc{</div><div class='del'>-                        $graph.postsript(:output=&gt;'bar.ps')</div><div class='del'>-                     })</div><div class='del'>-    Tk::BLT::Htext::Htext_Widget.window.append(b)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-%% button.  </div><div class='del'>-%%</div><div class='del'>-</div><div class='del'>-    ruby {</div><div class='del'>-    $graph = Tk::BLT::Barchart.new(:widgetname=&gt;'.htext.graph', </div><div class='del'>-                                   :relief=&gt;:raised, :borderwidth=&gt;2)</div><div class='del'>-    $graph.xaxis_configure(:rotate=&gt;90, :stepsize=&gt;0)</div><div class='del'>-    Tk::BLT::Htext::Htext_Widget.window.append($graph, </div><div class='del'>-                                               :fill=&gt;:both, :padx=&gt;4)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-%%</div><div class='del'>-    Hit the %%</div><div class='del'>-</div><div class='del'>-    ruby {</div><div class='del'>-    b = TkButton.new(Tk::BLT::Htext::Htext_Widget.window, </div><div class='del'>-                     :widgetname=&gt;'quit', :text=&gt;'Quit', </div><div class='del'>-                     :command=&gt;proc{ exit })</div><div class='del'>-    Tk::BLT::Htext::Htext_Widget.window.append(b)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-%% button when you've seen enough.%%</div><div class='del'>-</div><div class='del'>-    ruby {</div><div class='del'>-    l = TkLabel.new(Tk::BLT::Htext::Htext_Widget.window, :bitmap=&gt;'BLT')</div><div class='del'>-    Tk::BLT::Htext::Htext_Widget.window.append(l, :padx=&gt;20)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-%%</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-names = %w(One Two Three Four Five Six Seven Eight)</div><div class='del'>-if visual == 'staticgray' || visual == 'grayscale'</div><div class='del'>-  fgcolors = %w(white white white white white white white white)</div><div class='del'>-  bgcolors = %w(black black black black black black black black)</div><div class='del'>-else</div><div class='del'>-  fgcolors = %w(yellow orange red magenta purple blue cyan green)</div><div class='del'>-  bgcolors = %w(yellow4 orange4 red4 magenta4 purple4 blue4 cyan4 green4)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-numColors = names.length</div><div class='del'>-</div><div class='del'>-Tk::TCL_PRECISION.value = 15</div><div class='del'>-</div><div class='del'>-x = Tk::BLT::Vector.new</div><div class='del'>-y = Tk::BLT::Vector.new</div><div class='del'>-x.seq(-5.0, 5.0, 0.2)</div><div class='del'>-y.expr("sin(#{x})")</div><div class='del'>-barWidth = 0.19</div><div class='del'>-</div><div class='del'>-$graph.element_create('sin', :relief=&gt;:raised, :borderwidth=&gt;1, </div><div class='del'>-                      :x=&gt;x, :y=&gt;y, :barwidth=&gt;barWidth)</div><div class='del'>-</div><div class='del'>-Tk::BLT::Table.add(Tk.root, htext, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-Tk.root.minsize(0, 0)</div><div class='del'>-</div><div class='del'>-Tk::BLT.zoom_stack($graph)</div><div class='del'>-Tk::BLT.crosshairs($graph)</div><div class='del'>-Tk::BLT.active_legend($graph)</div><div class='del'>-Tk::BLT.closest_point($graph)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/calendar.rb b/ext/tk/sample/tkextlib/blt/calendar.rb<br/>deleted file mode 100644<br/>index 4fc6d64d9e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/calendar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/calendar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,117 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-require 'date'</div><div class='del'>-</div><div class='del'>-dir = File.join(File.dirname(File.expand_path(__FILE__)), 'images')</div><div class='del'>-file = File.join(dir, 'chalk.gif')</div><div class='del'>-active = File.join(dir, 'rain.gif')</div><div class='del'>-</div><div class='del'>-texture1 = TkPhotoImage.new(:file=&gt;file)</div><div class='del'>-texture2 = TkPhotoImage.new(:file=&gt;active)</div><div class='del'>-</div><div class='del'>-TkOption.add('*Tile', texture1)</div><div class='del'>-</div><div class='del'>-TkOption.add('*HighlightThickness', 0)</div><div class='del'>-TkOption.add('*calendar.weekframe*Tile', texture2)</div><div class='del'>-TkOption.add('*Calendar.Label.borderWidth', 0)</div><div class='del'>-TkOption.add('*Calendar.Label.relief', :sunken)</div><div class='del'>-TkOption.add('*Calendar.Frame.borderWidth', 2)</div><div class='del'>-TkOption.add('*Calendar.Frame.relief', :raised)</div><div class='del'>-TkOption.add('*Calendar.Label.font', 'Helvetica 11')</div><div class='del'>-TkOption.add('*Calendar.Label.foreground', 'navyblue')</div><div class='del'>-TkOption.add('*button.foreground', 'navyblue')</div><div class='del'>-TkOption.add('*background', 'grey85')</div><div class='del'>-TkOption.add('*Label.ipadX', 200)</div><div class='del'>-</div><div class='del'>-TkOption.add('*tile', texture2)</div><div class='del'>-</div><div class='del'>-class BLT_Calendar_sample</div><div class='del'>-  @@monthInfo = [</div><div class='del'>-    nil,  # dummy</div><div class='del'>-    ['January', 31], </div><div class='del'>-    ['February', 28], </div><div class='del'>-    ['March', 31], </div><div class='del'>-    ['April', 30], </div><div class='del'>-    ['May', 31], </div><div class='del'>-    ['June', 30], </div><div class='del'>-    ['July', 31], </div><div class='del'>-    ['August', 31], </div><div class='del'>-    ['Septembar', 30], </div><div class='del'>-    ['October', 31], </div><div class='del'>-    ['November', 30], </div><div class='del'>-    ['December', 31]</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  @@abbrDays = [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ]</div><div class='del'>-</div><div class='del'>-  def initialize()</div><div class='del'>-    today = Date.today</div><div class='del'>-</div><div class='del'>-    if TkComm.bool(Tk.info(:commands, '.calendar'))</div><div class='del'>-      Tk.destroy('.calendar')</div><div class='del'>-    end</div><div class='del'>-    cal = Tk::BLT::Tile::Frame.new(:widgetname=&gt;'.calendar', </div><div class='del'>-                                   :classname=&gt;'Calendar', </div><div class='del'>-                                   :width=&gt;'3i', :height=&gt;'3i')</div><div class='del'>-</div><div class='del'>-    mon = Tk::BLT::Tile::Label.new(cal, :font=&gt;'Courier 14 bold', </div><div class='del'>-                                   :text=&gt;"#{@@monthInfo[today.month][0]} " + </div><div class='del'>-                                          "#{today.year}")</div><div class='del'>-    Tk::BLT::Table.add(cal, mon, [1, 0], :cspan=&gt;7, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-    week_f = Tk::BLT::Tile::Frame.new(cal, :widgetname=&gt;'weekframe', </div><div class='del'>-                                      :relief=&gt;:sunken, :borderwidth=&gt;1)</div><div class='del'>-    Tk::BLT::Table.add(cal, week_f, [2, 0], :columnspan=&gt;7, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-    @@abbrDays.each_with_index{|dayName, idx|</div><div class='del'>-      Tk::BLT::Table.add(cal, </div><div class='del'>-                         Tk::BLT::Tile::Label.new(cal, :text=&gt;dayName, </div><div class='del'>-                                                  :font=&gt;'Helvetica 12'), </div><div class='del'>-                         [2, idx], :pady=&gt;2, :padx=&gt;2)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tk::BLT::Table.itemconfigure(cal, 'c*', 'r2', :pad=&gt;4)</div><div class='del'>-</div><div class='del'>-    numDays = @@monthInfo[today.month][1]</div><div class='del'>-    week = 0</div><div class='del'>-    cnt = 1</div><div class='del'>-</div><div class='del'>-    wkday = today.wday - ((today.day - 1) % 7)</div><div class='del'>-    wkday += 7 if wkday &lt; 0</div><div class='del'>-</div><div class='del'>-    while cnt &lt;= numDays</div><div class='del'>-      Tk::BLT::Table.add(cal, </div><div class='del'>-                         Tk::BLT::Tile::Label.new(cal, :text=&gt;cnt){</div><div class='del'>-                           self.configure(:borderwidth=&gt;1, </div><div class='del'>-                                          :relief=&gt;:sunken) if cnt == today.day</div><div class='del'>-                         }, </div><div class='del'>-                         [week+3, wkday], :fill=&gt;:both, :ipadx=&gt;10, :ipady=&gt;4)</div><div class='del'>-      cnt += 1</div><div class='del'>-      wkday += 1</div><div class='del'>-      if wkday == 7</div><div class='del'>-        week += 1</div><div class='del'>-        wkday = 0</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    Tk::BLT::Tile::Frame.new(cal, :borderwidth=&gt;1, :relief=&gt;:sunken){|f|</div><div class='del'>-      Tk::BLT::Table.add(f, </div><div class='del'>-                         Tk::BLT::Tile::Button.new(f, :widgetname=&gt;'button', </div><div class='del'>-                                                   :command=&gt;proc{exit}, </div><div class='del'>-                                                   :borderwidth=&gt;2, </div><div class='del'>-                                                   :text=&gt;'Quit'), </div><div class='del'>-                         :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-      Tk::BLT::Table.add(cal, f, [week+4, 5], :cspan=&gt;2, :pady=&gt;4)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tk::BLT::Table.add(Tk.root, cal, :fill=&gt;:both)</div><div class='del'>-    Tk::BLT::Table.itemconfigure(cal, 'r0', :resize=&gt;:none)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-BLT_Calendar_sample.new</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/graph6.rb b/ext/tk/sample/tkextlib/blt/graph6.rb<br/>deleted file mode 100644<br/>index f899b44115..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/graph6.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/graph6.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2222 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-Tk::TCL_PRECISION.value = 15</div><div class='del'>-</div><div class='del'>-[</div><div class='del'>-  ['*Graph.Width', '10i'], </div><div class='del'>-  ['*Graph.leftMargin', '.75i'], </div><div class='del'>-  ['*Graph.Height', '6i'], </div><div class='del'>-  ['*Graph.plotBackground', 'black'], </div><div class='del'>-  ['*LineMarker.color', 'white'], </div><div class='del'>-  ['*LineMarker.Dashes', 5], </div><div class='del'>-  ['*TextMarker.foreground', 'white'], </div><div class='del'>-  ['*TextMarker.Background', ''], </div><div class='del'>-</div><div class='del'>-  ['*Graph.x.hide', true], </div><div class='del'>-  ['*Graph.x.title', ''], </div><div class='del'>-  ['*Graph.y.rotate', 90], </div><div class='del'>-  # ['*Graph.y.stepSize', 2.0], </div><div class='del'>-  ['*Graph.title', ''], </div><div class='del'>-  ['*graph.Title', 'Example s27'], </div><div class='del'>-  ['*graph.x.hide', false], </div><div class='del'>-  ['*graph.topMargin', 0], </div><div class='del'>-  ['*graph.bottomMargin', 0], </div><div class='del'>-  ['*x.Title', 'Time'], </div><div class='del'>-  ['*y.Title', 'Signals'], </div><div class='del'>-  ['*Pixels', 1], </div><div class='del'>-</div><div class='del'>-  ['*Reduce', 0.5], </div><div class='del'>-  ['*bufferElements', false], </div><div class='del'>-</div><div class='del'>-  ['*Element.color', 'green4'], </div><div class='del'>-  ['*Element.ScaleSymbols', true], </div><div class='del'>-  ['*Element.Color', 'grey70'], </div><div class='del'>-  ['*Element.Symbol', :none], </div><div class='del'>-  ['*Element.LineWidth', 1], </div><div class='del'>-  # ['*Element.Smooth', :natural], </div><div class='del'>-  ['*Element.Smooth', :catrom], </div><div class='del'>-</div><div class='del'>-  ['*activeLine.LineWidth', 2], </div><div class='del'>-  ['*activeLine.Color', 'white'], </div><div class='del'>-  ['*activeLine.Color', 'green1'], </div><div class='del'>-</div><div class='del'>-  # ['*Legend.Hide', true], </div><div class='del'>-  ['*Legend.Position', :right], </div><div class='del'>-  ['*Legend.Relief', :flat], </div><div class='del'>-  ['*Legend.activeRelief', :sunken], </div><div class='del'>-  ['*Legend.borderWidth', 2], </div><div class='del'>-  #['*Legend.Font', '-*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*'], </div><div class='del'>-  ['*Legend.Font', 'Helvetica -10'], </div><div class='del'>-  ['*Grid.hide', false], </div><div class='del'>-  ['*Grid.dashes', [1, 5]], </div><div class='del'>-</div><div class='del'>-  # ['*foreground', 'white'], </div><div class='del'>-  ['*zoomOutline.outline', 'yellow'], </div><div class='del'>-].each{|k, v| TkOption.add(k, v)}</div><div class='del'>-</div><div class='del'>-##############################</div><div class='del'>-</div><div class='del'>-class BLT_Graph_Demo</div><div class='del'>-  def initialize</div><div class='del'>-    @graph = Tk::BLT::Graph.new(:widgetname=&gt;'graph')</div><div class='del'>-</div><div class='del'>-    @root = Tk.root</div><div class='del'>-    @root.minsize(0, 0)</div><div class='del'>-</div><div class='del'>-    _set_vectors()</div><div class='del'>-    (1..39).each{|i| @graph.element_create("V#{i}", :x=&gt;@x, :y=&gt;@v[i])}</div><div class='del'>-</div><div class='del'>-    @top = Tk::BLT::Tile::Toplevel.new</div><div class='del'>-=begin</div><div class='del'>-    legend = Tk::BLT::Graph.new(@top, :widgetname=&gt;'legend', </div><div class='del'>-                                :without_creating=&gt;true)</div><div class='del'>-    @graph.legend_configure(:position=&gt;legend)</div><div class='del'>-=end</div><div class='del'>-    # legend = @graph.legend_window_create(@top, :widgetname=&gt;'legend')</div><div class='del'>-    legend = @graph.legend_window_create(@top)</div><div class='del'>-    legend.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    Tk::BLT::Table.add(@root, @graph, [0,0], :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-    @quit_btn = Tk::BLT::Tile::Button.new(:text=&gt;' quit ', :background=&gt;'red', </div><div class='del'>-                                          :command=&gt;proc{exit})</div><div class='del'>-    Tk::BLT::Table.add(@root, @quit_btn, [1,0], :anchor=&gt;:e, :padx=&gt;10)</div><div class='del'>-</div><div class='del'>-    @graph.zoom_stack</div><div class='del'>-    @graph.crosshairs</div><div class='del'>-    @graph.closest_point</div><div class='del'>-    @graph.print_key</div><div class='del'>-</div><div class='del'>-    @graph.legend_bind(:all, 'ButtonRelease-1', </div><div class='del'>-                       proc{|w| highlightTrace(w)}, '%W')</div><div class='del'>-    @graph.legend_bind(:all, 'ButtonRelease-3', </div><div class='del'>-                       proc{|w|</div><div class='del'>-                         w.legend_deactivate('*')</div><div class='del'>-                         active = w.element_activate</div><div class='del'>-                         w.element_deactivate(*active)</div><div class='del'>-                       }, '%W')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def _set_vectors</div><div class='del'>-    @x = Tk::BLT::Vector.new(:variable=&gt;'')</div><div class='del'>-    @v = []</div><div class='del'>-    (1..39).each{|i| @v[i] = Tk::BLT::Vector.new(:variable=&gt;'')}</div><div class='del'>-</div><div class='del'>-    @x.set(&lt;&lt;-'EOD')</div><div class='del'>-    0 1e-10 2e-10 3e-10 4e-10 5e-10 6e-10 7e-10 8e-10 9e-10 </div><div class='del'>-    1e-09 1.1e-09 1.2e-09 1.3e-09 1.4e-09 1.5e-09 1.6e-09 1.7e-09 </div><div class='del'>-    1.8e-09 1.9e-09 2e-09 2.1e-09 2.2e-09 2.3e-09 2.4e-09 2.5e-09 </div><div class='del'>-    2.6e-09 2.7e-09 2.8e-09 2.9e-09 3e-09 3.1e-09 3.2e-09 3.3e-09 </div><div class='del'>-    3.4e-09 3.5e-09 3.6e-09 3.7e-09 3.8e-09 3.9e-09 4e-09 4.1e-09 </div><div class='del'>-    4.2e-09 4.3e-09 4.4e-09 4.5e-09 4.6e-09 4.7e-09 4.8e-09 </div><div class='del'>-    4.9e-09 5e-09 5.1e-09 5.2e-09 5.3e-09 5.4e-09 5.5e-09 5.6e-09 </div><div class='del'>-    5.7e-09 5.8e-09 5.9e-09 6e-09 6.1e-09 6.2e-09 6.3e-09 6.4e-09 </div><div class='del'>-    6.5e-09 6.6e-09 6.7e-09 6.8e-09 6.9e-09 7e-09 7.1e-09 7.2e-09 </div><div class='del'>-    7.3e-09 7.4e-09 7.5e-09 7.6e-09 7.7e-09 7.8e-09 7.9e-09 </div><div class='del'>-    8e-09 8.1e-09 8.2e-09 8.3e-09 8.4e-09 8.5e-09 8.6e-09 8.7e-09 </div><div class='del'>-    8.8e-09 8.9e-09 9e-09 9.1e-09 9.2e-09 9.3e-09 9.4e-09 9.5e-09 </div><div class='del'>-    9.6e-09 9.7e-09 9.8e-09 9.9e-09 1e-08 1.01e-08 1.02e-08 </div><div class='del'>-    1.03e-08 1.04e-08 1.05e-08 1.06e-08 1.07e-08 1.08e-08 1.09e-08 </div><div class='del'>-    1.1e-08 1.11e-08 1.12e-08 1.13e-08 1.14e-08 1.15e-08 1.16e-08 </div><div class='del'>-    1.17e-08 1.18e-08 1.19e-08 1.2e-08 1.21e-08 1.22e-08 1.23e-08 </div><div class='del'>-    1.24e-08 1.25e-08 1.26e-08 1.27e-08 1.28e-08 1.29e-08 1.3e-08 </div><div class='del'>-    1.31e-08 1.32e-08 1.33e-08 1.34e-08 1.35e-08 1.36e-08 1.37e-08 </div><div class='del'>-    1.38e-08 1.39e-08 1.4e-08 1.41e-08 1.42e-08 1.43e-08 1.44e-08 </div><div class='del'>-    1.45e-08 1.46e-08 1.47e-08 1.48e-08 1.49e-08 1.5e-08 1.51e-08 </div><div class='del'>-    1.52e-08 1.53e-08 1.54e-08 1.55e-08 1.56e-08 1.57e-08 1.58e-08 </div><div class='del'>-    1.59e-08 1.6e-08 1.61e-08 1.62e-08 1.63e-08 1.64e-08 1.65e-08 </div><div class='del'>-    1.66e-08 1.67e-08 1.68e-08 1.69e-08 1.7e-08 1.71e-08 1.72e-08 </div><div class='del'>-    1.73e-08 1.74e-08 1.75e-08 1.76e-08 1.77e-08 1.78e-08 1.79e-08 </div><div class='del'>-    1.8e-08 1.81e-08 1.82e-08 1.83e-08 1.84e-08 1.85e-08 1.86e-08 </div><div class='del'>-    1.87e-08 1.88e-08 1.89e-08 1.9e-08 1.91e-08 1.92e-08 1.93e-08 </div><div class='del'>-    1.94e-08 1.95e-08 1.96e-08 1.97e-08 1.98e-08 1.99e-08 2e-08 </div><div class='del'>-    2.01e-08 2.02e-08 2.03e-08 2.04e-08 2.05e-08 2.06e-08 2.07e-08 </div><div class='del'>-    2.08e-08 2.09e-08 2.1e-08 2.11e-08 2.12e-08 2.13e-08 2.14e-08 </div><div class='del'>-    2.15e-08 2.16e-08 2.17e-08 2.18e-08 2.19e-08 2.2e-08 2.21e-08 </div><div class='del'>-    2.22e-08 2.23e-08 2.24e-08 2.25e-08 2.26e-08 2.27e-08 2.28e-08 </div><div class='del'>-    2.29e-08 2.3e-08 2.31e-08 2.32e-08 2.33e-08 2.34e-08 2.35e-08 </div><div class='del'>-    2.36e-08 2.37e-08 2.38e-08 2.39e-08 2.4e-08 2.41e-08 2.42e-08 </div><div class='del'>-    2.43e-08 2.44e-08 2.45e-08 2.46e-08 2.47e-08 2.48e-08 2.49e-08 </div><div class='del'>-    2.5e-08 2.51e-08 2.52e-08 2.53e-08 2.54e-08 2.55e-08 2.56e-08 </div><div class='del'>-    2.57e-08 2.58e-08 2.59e-08 2.6e-08 2.61e-08 2.62e-08 2.63e-08 </div><div class='del'>-    2.64e-08 2.65e-08 2.66e-08 2.67e-08 2.68e-08 2.69e-08 2.7e-08 </div><div class='del'>-    2.71e-08 2.72e-08 2.73e-08 2.74e-08 2.75e-08 2.76e-08 2.77e-08 </div><div class='del'>-    2.78e-08 2.79e-08 2.8e-08 2.81e-08 2.82e-08 2.83e-08 2.84e-08 </div><div class='del'>-    2.85e-08 2.86e-08 2.87e-08 2.88e-08 2.89e-08 2.9e-08 2.91e-08 </div><div class='del'>-    2.92e-08 2.93e-08 2.94e-08 2.95e-08 2.96e-08 2.97e-08 2.98e-08 </div><div class='del'>-    2.99e-08 3e-08 3.01e-08 3.02e-08 3.03e-08 3.04e-08 3.05e-08 </div><div class='del'>-    3.06e-08 3.07e-08 3.08e-08 3.09e-08 3.1e-08 3.11e-08 3.12e-08 </div><div class='del'>-    3.13e-08 3.14e-08 3.15e-08 3.16e-08 3.17e-08 3.18e-08 3.19e-08 </div><div class='del'>-    3.2e-08 3.21e-08 3.22e-08 3.23e-08 3.24e-08 3.25e-08 3.26e-08 </div><div class='del'>-    3.27e-08 3.28e-08 3.29e-08 3.3e-08 3.31e-08 3.32e-08 3.33e-08 </div><div class='del'>-    3.34e-08 3.35e-08 3.36e-08 3.37e-08 3.38e-08 3.39e-08 3.4e-08 </div><div class='del'>-    3.41e-08 3.42e-08 3.43e-08 3.44e-08 3.45e-08 3.46e-08 3.47e-08 </div><div class='del'>-    3.48e-08 3.49e-08 3.5e-08 3.51e-08 3.52e-08 3.53e-08 3.54e-08 </div><div class='del'>-    3.55e-08 3.56e-08 3.57e-08 3.58e-08 3.59e-08 3.6e-08 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[1].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[2].set(&lt;&lt;-'EOD')</div><div class='del'>-    0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 </div><div class='del'>-    5.32907e-15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[3].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 8.88178e-16 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 2.13718e-14 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[4].set(&lt;&lt;-'EOD')</div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[5].set(&lt;&lt;-'EOD')</div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[6].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 8.88178e-16 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 4 3 2 1 2.13718e-14 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 </div><div class='del'>-    0 0 0 0 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[7].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.16904 4.84159 3.34542 0.317102 0.103304 0.0275721 0.0221534 </div><div class='del'>-    0.017689 0.0142639 0.0113974 0.00918238 0.00742541 0.00616602 </div><div class='del'>-    0.00481195 0.00397049 -0.0659889 -0.025671 0.165495 0.986891 </div><div class='del'>-    3.05229 4.55511 4.91611 4.98192 4.99428 4.99833 4.99095 </div><div class='del'>-    4.97295 4.95493 4.93428 4.90723 4.94799 4.98584 4.99566 </div><div class='del'>-    4.99813 4.99907 4.99947 4.99965 4.99976 4.99984 4.99989 </div><div class='del'>-    4.99992 4.99994 4.99996 4.99998 5.00002 5.00006 5.00002 </div><div class='del'>-    4.99996 4.99994 4.99999 5.00003 5.00002 5 4.99997 4.99997 </div><div class='del'>-    4.99997 4.99997 4.99997 4.99996 4.99997 4.99997 4.99998 </div><div class='del'>-    4.99998 4.99999 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5 5 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99998 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5.16575 </div><div class='del'>-    4.69986 2.43862 0.0230224 0.035229 -0.0210607 -0.0292766 </div><div class='del'>-    -0.0172693 -0.00271479 -0.000912251 -0.000349106 -0.000116866 </div><div class='del'>-    -4.24733e-05 -1.39536e-05 -3.01179e-05 -0.0657192 -0.0204835 </div><div class='del'>-    0.183378 1.07181 3.118 4.46472 4.84158 4.94795 4.98173 4.99236 </div><div class='del'>-    4.99762 5.01939 5.0433 5.05332 5.04959 5.03955 5.02851 5.02052 </div><div class='del'>-    5.01422 5.00965 5.00631 5.00405 5.00248 5.00083 5.00012 </div><div class='del'>-    5.00209 5.00387 5.00347 4.99917 4.99213 4.98411 4.97521 </div><div class='del'>-    4.96332 4.94601 4.9304 4.94633 4.97936 4.99264 4.99685 4.99857 </div><div class='del'>-    4.99925 4.99954 4.9997 4.99973 4.9997 4.99973 4.99979 4.99983 </div><div class='del'>-    4.99986 4.99988 4.9999 4.9999 4.99992 4.99993 4.99994 4.99995 </div><div class='del'>-    4.99996 4.99996 4.99997 4.99997 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    5 5 5 5.00001 5.00001 5.00001 5.00001 5.00002 5.00002 5.00002 </div><div class='del'>-    5.00002 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 5 5 5.14242 4.76101 3.16003 0.299374 </div><div class='del'>-    0.0645506 -0.000498424 -2.45108e-05 -2.27986e-05 -5.24401e-05 </div><div class='del'>-    -4.9884e-05 -4.92491e-05 -2.93354e-05 -3.21402e-05 -2.11851e-05 </div><div class='del'>-    -3.37925e-05 -0.0657892 -0.020563 0.182582 1.06058 3.12484 </div><div class='del'>-    4.46552 4.84146 4.95102 4.98556 4.99472 4.99806 4.99909 </div><div class='del'>-    4.99955 4.99976 4.99994 4.99992 5.00029 4.99967 4.99849 </div><div class='del'>-    4.99736 4.99884 5.00099 5.00377 5.00215 4.99994 4.99893 </div><div class='del'>-    4.99788 4.99862 5.00055 5.00134 5.00127 5.00073 5.00039 </div><div class='del'>-    5.00018 5.00006 5.00001 4.99985 5.00026 5.00018 5.00003 </div><div class='del'>-    4.99981 4.99985 4.99987 4.99985 4.99982 4.99982 4.99982 </div><div class='del'>-    4.99983 4.99985 4.99987 4.99989 4.99991 4.99992 4.99994 </div><div class='del'>-    4.99995 4.99995 4.99994 4.99994 4.99996 4.99999 5.00002 </div><div class='del'>-    5.00008 5.00009 5.00006 5.00001 5 4.99999 4.99998 4.99997 </div><div class='del'>-    4.99996 4.99997 4.99997 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99998 4.99998 </div><div class='del'>-    4.99998 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[8].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.03758 5.04711 4.96911 4.20882 3.96295 4.01117 4.15521 </div><div class='del'>-    4.2967 4.42274 4.5295 4.6176 4.69014 4.74831 4.7966 4.83537 </div><div class='del'>-    4.80526 4.787 4.79295 4.88588 5.08978 5.15615 5.10778 5.07718 </div><div class='del'>-    5.06652 5.08225 4.9744 4.52977 3.77452 2.69426 1.15294 0.245509 </div><div class='del'>-    0.0981544 0.0567527 0.0367487 0.0252578 0.0180599 0.0133837 </div><div class='del'>-    0.0101497 0.0078616 0.00620186 0.00499056 0.0041027 0.00344223 </div><div class='del'>-    0.00295808 0.00260089 0.00229887 0.00200817 0.00176397 0.00160116 </div><div class='del'>-    0.00147381 0.00134645 0.00125029 0.00116043 0.00107371 0.00101981 </div><div class='del'>-    0.000965921 0.000912028 0.000858135 0.000804242 0.000761669 </div><div class='del'>-    0.00072672 0.000691771 0.000656823 0.000621874 0.000588722 </div><div class='del'>-    0.00057041 0.000552098 0.000533785 0.000515473 0.000497162 </div><div class='del'>-    0.00047885 0.000460537 0.000442226 0.000423914 0.000405601 </div><div class='del'>-    0.000388399 0.000378694 0.000368989 0.000359284 0.00034958 </div><div class='del'>-    0.000339875 0.00033017 0.000320465 0.00031076 0.000301055 </div><div class='del'>-    0.00029135 0.000282207 0.000276247 0.000270287 0.000264327 </div><div class='del'>-    0.000258367 0.000252407 0.000246447 0.000240487 0.000234527 </div><div class='del'>-    0.000228567 0.000222607 0.000217086 0.000213696 0.000210307 </div><div class='del'>-    0.000206918 0.000203528 0.000200139 0.00019675 0.00019336 </div><div class='del'>-    0.000189971 0.000186582 0.000183192 0.000179803 0.000176414 </div><div class='del'>-    0.000173025 0.000169635 0.000166246 0.000162857 0.000159467 </div><div class='del'>-    0.000156078 0.000152689 0.000149299 0.00014591 0.00014255 </div><div class='del'>-    0.0316021 0.163272 0.348732 0.603651 0.35745 0.135965 0.0707354 </div><div class='del'>-    0.0314595 0.0201047 0.00994945 0.00389601 0.00138839 0.00060778 </div><div class='del'>-    0.000329648 0.000492396 -0.0732035 -0.0844077 -0.0789062 </div><div class='del'>-    -0.0390837 0.0197559 0.0183094 -0.00180099 -0.0189565 -0.0424144 </div><div class='del'>-    -0.0735904 -0.0892423 0.285039 1.13702 2.10809 2.95826 3.60164 </div><div class='del'>-    4.0435 4.35771 4.57254 4.71769 4.81329 4.87534 4.91487 4.94264 </div><div class='del'>-    4.97375 5.01526 5.06517 5.10154 5.06259 4.89005 4.5787 4.12226 </div><div class='del'>-    3.46151 2.49023 1.2586 0.32725 0.116753 0.0701865 0.0455509 </div><div class='del'>-    0.0286914 0.0178176 0.0117599 0.00902715 0.00760583 0.00637745 </div><div class='del'>-    0.00543811 0.00439377 0.00352448 0.0030151 0.00285771 0.002465 </div><div class='del'>-    0.00203114 0.00173004 0.0014839 0.00125177 0.00105327 0.000894905 </div><div class='del'>-    0.000766372 0.000658894 0.000569105 0.000492114 0.000427938 </div><div class='del'>-    0.000370217 0.000314758 0.000266569 0.000233726 0.000209048 </div><div class='del'>-    0.000191957 0.000177169 0.000166604 0.000161 0.000157314 </div><div class='del'>-    0.000143828 0.000130342 0.000116857 0.000103371 8.98855e-05 </div><div class='del'>-    7.63998e-05 6.29141e-05 5.76583e-05 5.30027e-05 4.8347e-05 </div><div class='del'>-    4.36913e-05 3.90357e-05 3.438e-05 2.97243e-05 2.72507e-05 </div><div class='del'>-    2.59083e-05 2.45659e-05 2.32235e-05 2.18811e-05 2.05387e-05 </div><div class='del'>-    1.91963e-05 1.78539e-05 1.65115e-05 1.51691e-05 1.38267e-05 </div><div class='del'>-    1.24843e-05 1.11419e-05 9.79954e-06 8.51574e-06 7.69807e-06 </div><div class='del'>-    6.8804e-06 6.06273e-06 5.24506e-06 0.0287318 0.0317111 -0.0320087 </div><div class='del'>-    -0.103609 0.0369639 0.0121128 0.00961197 0.00934971 0.00820853 </div><div class='del'>-    0.00699769 0.00607002 0.00535541 0.00476552 0.00427601 0.00376357 </div><div class='del'>-    -0.073012 -0.0866964 -0.0809538 -0.038005 0.0277001 0.0188906 </div><div class='del'>-    0.00614597 0.00373629 0.00489787 0.0146573 0.0191052 0.0151708 </div><div class='del'>-    0.0124224 0.0105859 0.00879272 0.00729464 0.0070047 0.00449575 </div><div class='del'>-    -0.00626652 -0.0252417 -0.0147287 0.022538 0.0822905 0.0947372 </div><div class='del'>-    0.0657516 0.0445506 0.0316753 0.0220971 0.0158101 0.0140971 </div><div class='del'>-    0.0161498 0.0139876 0.0122447 0.0106994 0.009397 0.00822236 </div><div class='del'>-    0.00686509 0.00797431 0.00751269 0.00671173 0.00595243 0.00524633 </div><div class='del'>-    0.00459528 0.00401688 0.00350109 0.00303954 0.00260569 0.00222792 </div><div class='del'>-    0.00191033 0.00163917 0.00140949 0.00121464 0.0010471 0.000900638 </div><div class='del'>-    0.000768847 0.000645236 0.000524807 0.000460275 0.000442237 </div><div class='del'>-    0.000446775 0.000397026 0.000301585 0.000228994 0.000190894 </div><div class='del'>-    0.000166569 0.000152261 0.000137953 0.000123644 0.000109336 </div><div class='del'>-    9.50281e-05 8.56557e-05 7.78437e-05 7.00318e-05 6.22198e-05 </div><div class='del'>-    5.44079e-05 4.87539e-05 4.57761e-05 4.27982e-05 3.98203e-05 </div><div class='del'>-    3.68425e-05 3.38646e-05 3.08868e-05 2.79089e-05 2.4931e-05 </div><div class='del'>-    2.19532e-05 1.89753e-05 1.75244e-05 1.64095e-05 1.52946e-05 </div><div class='del'>-    1.41797e-05 1.30648e-05 1.19499e-05 1.0835e-05 9.72011e-06 </div><div class='del'>-    8.60521e-06 7.4903e-06 6.5117e-06 6.10334e-06 5.69497e-06 </div><div class='del'>-    5.2866e-06 4.87824e-06 4.46987e-06 4.06151e-06 3.65314e-06 </div><div class='del'>-    3.24477e-06 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[9].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 1.99708 2.07867 2.01211 2.43309 3.27194 3.63896 </div><div class='del'>-    3.90426 4.11074 4.27932 4.41496 4.52543 4.61491 4.68862 </div><div class='del'>-    4.7479 4.79666 4.72895 4.68886 4.70354 4.81353 5.01568 5.14184 </div><div class='del'>-    5.10482 5.07362 5.05143 5.03638 5.02323 5.01465 5.00853 </div><div class='del'>-    5.00383 4.99985 5.00454 5.00652 5.00546 5.00411 5.003 5.00214 </div><div class='del'>-    5.00151 5.00106 5.00073 5.0005 5.00034 5.00023 5.00015 5.0001 </div><div class='del'>-    5.00005 5 5.00001 5.00005 5.00005 5.00003 5 4.99998 4.99996 </div><div class='del'>-    4.99994 4.99995 4.99997 4.99998 5 5.00001 5.00002 5.00002 </div><div class='del'>-    5.00003 5.00003 5.00003 5.00003 5.00003 5.00003 5.00002 </div><div class='del'>-    5.00002 5.00001 5.00001 5.00001 5 5 5 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 5 5 5 5 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.17392 4.94828 3.78491 </div><div class='del'>-    1.52079 0.608874 0.244031 0.127087 0.0552995 0.0361032 0.0169025 </div><div class='del'>-    0.006364 0.00217624 0.000921391 0.000457305 0.000786754 </div><div class='del'>-    -0.120016 -0.148054 -0.15898 -0.0801463 0.16463 0.174017 </div><div class='del'>-    0.0799249 0.0318788 0.0129696 0.00483397 0.0025677 0.0042079 </div><div class='del'>-    0.00350003 0.00178404 -8.72902e-05 -0.00128497 -0.00142213 </div><div class='del'>-    -0.00130018 -0.00106874 -0.000789207 -0.000824335 -0.00104518 </div><div class='del'>-    -0.00136799 -0.004366 -0.0102621 -0.0109254 -0.00649259 </div><div class='del'>-    -0.00194842 0.00029793 0.00148673 0.00221085 0.00228291 </div><div class='del'>-    0.00185261 0.00139687 0.00148183 0.00562266 0.00844119 0.00754627 </div><div class='del'>-    0.00657396 0.00591212 0.00539269 0.0049282 0.00448417 0.0040572 </div><div class='del'>-    0.00363719 0.00320392 0.00279607 0.00243938 0.00211505 0.00182302 </div><div class='del'>-    0.00156254 0.0013341 0.00113834 0.000971865 0.00082776 0.000706193 </div><div class='del'>-    0.000602499 0.000515059 0.000441401 0.00037897 0.000325459 </div><div class='del'>-    0.00028083 0.000242096 0.000207274 0.000176444 0.000150372 </div><div class='del'>-    0.000126407 0.000103373 9.05522e-05 8.53555e-05 8.63685e-05 </div><div class='del'>-    9.02593e-05 8.37346e-05 7.72099e-05 7.06852e-05 6.41605e-05 </div><div class='del'>-    5.76358e-05 5.11112e-05 4.45865e-05 4.08176e-05 3.72497e-05 </div><div class='del'>-    3.36818e-05 3.01138e-05 2.65459e-05 2.2978e-05 1.94101e-05 </div><div class='del'>-    1.76154e-05 1.67399e-05 1.58645e-05 1.4989e-05 1.41136e-05 </div><div class='del'>-    1.32381e-05 1.23626e-05 1.14872e-05 1.06117e-05 9.73629e-06 </div><div class='del'>-    8.86083e-06 7.98538e-06 7.10993e-06 6.23447e-06 5.44363e-06 </div><div class='del'>-    5.32578e-06 5.20792e-06 5.09007e-06 4.97222e-06 0.0784323 </div><div class='del'>-    0.0474527 -0.0764232 -0.151146 0.0615785 0.0144489 0.00974161 </div><div class='del'>-    0.00947176 0.00849005 0.00728201 0.00630581 0.00554032 0.00487809 </div><div class='del'>-    0.00441504 0.00384139 -0.118943 -0.149894 -0.161173 -0.0825299 </div><div class='del'>-    0.171686 0.176912 0.0816085 0.0335236 0.013791 0.0056976 </div><div class='del'>-    0.00238833 0.00105348 0.000526199 0.00025969 0.000396026 </div><div class='del'>-    0.000837835 0.00170131 0.00196699 -0.000553314 -0.0061621 </div><div class='del'>-    -0.0111895 -0.0142698 -0.0124608 -0.00795847 -0.00467822 </div><div class='del'>-    -0.0043058 -0.00874449 -0.0118584 -0.00871386 -0.00377892 </div><div class='del'>-    1.95244e-05 0.00218952 0.00325486 0.00386497 0.00422837 </div><div class='del'>-    0.00446883 0.00447065 0.00486647 0.00547838 0.00565398 0.00559092 </div><div class='del'>-    0.00538752 0.00507015 0.00466305 0.00420756 0.00373465 0.00328404 </div><div class='del'>-    0.00287059 0.00250057 0.00216124 0.00184861 0.00156815 0.00134624 </div><div class='del'>-    0.00117857 0.00103412 0.0008948 0.000761012 0.000619853 </div><div class='del'>-    0.000462614 0.000319965 0.000287666 0.000356415 0.000379946 </div><div class='del'>-    0.000339183 0.00027972 0.000252982 0.000226244 0.000199507 </div><div class='del'>-    0.000172769 0.000146031 0.000130097 0.000117578 0.000105059 </div><div class='del'>-    9.25401e-05 8.00213e-05 7.11204e-05 6.67061e-05 6.22918e-05 </div><div class='del'>-    5.78775e-05 5.34632e-05 4.90489e-05 4.46346e-05 4.02203e-05 </div><div class='del'>-    3.5806e-05 3.13916e-05 2.69773e-05 2.4827e-05 2.31747e-05 </div><div class='del'>-    2.15225e-05 1.98702e-05 1.8218e-05 1.65658e-05 1.49135e-05 </div><div class='del'>-    1.32613e-05 1.1609e-05 9.95678e-06 8.50108e-06 7.86765e-06 </div><div class='del'>-    7.23422e-06 6.60079e-06 5.96736e-06 5.33393e-06 4.7005e-06 </div><div class='del'>-    4.06707e-06 3.43363e-06 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[10].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 1.99308 2.16619 2.46661 3.09359 3.76864 4.31299 </div><div class='del'>-    4.65564 4.83425 4.92153 4.96157 4.98063 4.98649 4.99039 </div><div class='del'>-    4.9945 4.9972 4.96206 4.89882 4.83865 4.83202 4.91016 5.04479 </div><div class='del'>-    5.06078 5.04827 5.03474 5.0246 5.01639 5.00996 5.00569 5.00239 </div><div class='del'>-    5.00043 5.00296 5.00437 5.00382 5.00287 5.00208 5.00148 </div><div class='del'>-    5.00104 5.00073 5.0005 5.00034 5.00023 5.00016 5.00011 5.00008 </div><div class='del'>-    5.00007 5.00007 5.00004 5 4.99998 4.99998 4.99997 4.99998 </div><div class='del'>-    4.99999 5 5 5.00001 5.00001 5.00001 5.00002 5.00002 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5 5 5 5 5 5 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 5 5 5 5 5 5 5 5 5 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 5.10081 </div><div class='del'>-    5.10949 4.98359 5.00733 5.15145 4.37298 2.36126 0.470759 </div><div class='del'>-    0.0577238 0.0115884 0.00262611 0.000671499 0.000389038 0.000291291 </div><div class='del'>-    0.000317347 -0.0167823 -0.0158344 -0.0140559 0.0104849 0.0865874 </div><div class='del'>-    0.107813 0.0524688 0.0214369 0.00876443 0.00341595 0.00170778 </div><div class='del'>-    0.00259042 0.0022241 0.00118519 1.10217e-06 -0.000784506 </div><div class='del'>-    -0.000948169 -0.000856256 -0.000696719 -0.000485987 -0.000724787 </div><div class='del'>-    -0.000981491 -0.001454 -0.00552498 -0.0114992 -0.0105266 </div><div class='del'>-    -0.00543527 -0.000982798 0.00127356 0.00224212 0.00275439 </div><div class='del'>-    0.00281098 0.0025471 0.00230368 0.00222576 0.00485522 0.00729453 </div><div class='del'>-    0.00691796 0.0062615 0.00573987 0.0052688 0.00481185 0.00436934 </div><div class='del'>-    0.00394326 0.00352712 0.00309978 0.00270038 0.00235335 0.00203742 </div><div class='del'>-    0.00175256 0.00150067 0.00128126 0.00109323 0.000933619 </div><div class='del'>-    0.000795113 0.000678182 0.00057843 0.000494345 0.000423609 </div><div class='del'>-    0.000363821 0.000312766 0.000269856 0.000232389 0.000198382 </div><div class='del'>-    0.000168126 0.00014267 0.000119293 9.69034e-05 8.5669e-05 </div><div class='del'>-    8.26828e-05 8.64066e-05 9.26665e-05 8.5454e-05 7.82416e-05 </div><div class='del'>-    7.10291e-05 6.38167e-05 5.66043e-05 4.93918e-05 4.21794e-05 </div><div class='del'>-    3.86073e-05 3.53007e-05 3.19941e-05 2.86876e-05 2.5381e-05 </div><div class='del'>-    2.20744e-05 1.87678e-05 1.70933e-05 1.62648e-05 1.54363e-05 </div><div class='del'>-    1.46079e-05 1.37794e-05 1.2951e-05 1.21225e-05 1.12941e-05 </div><div class='del'>-    1.04656e-05 9.63716e-06 8.80871e-06 7.98026e-06 7.1518e-06 </div><div class='del'>-    6.32335e-06 5.5374e-06 5.08959e-06 4.64178e-06 4.19397e-06 </div><div class='del'>-    3.74616e-06 0.0438026 0.0242078 -0.0602019 -0.0840866 0.00148461 </div><div class='del'>-    -0.00292489 0.000442098 0.00219489 0.00281478 0.00290756 </div><div class='del'>-    0.00277945 0.00263896 0.00240099 0.00223283 0.001947 -0.0153629 </div><div class='del'>-    -0.0148815 -0.0128673 0.0126017 0.0905161 0.11051 0.0538958 </div><div class='del'>-    0.022562 0.00935726 0.00397422 0.00172534 0.000790207 0.000416322 </div><div class='del'>-    0.000191632 0.000469721 0.0009779 0.00192566 0.00200688 </div><div class='del'>-    -0.0016502 -0.00733932 -0.0128113 -0.0147608 -0.0115456 </div><div class='del'>-    -0.00668995 -0.00401368 -0.00463908 -0.0101197 -0.0118993 </div><div class='del'>-    -0.0076276 -0.00262656 0.000813059 0.00264455 0.00350796 </div><div class='del'>-    0.00399494 0.0043049 0.00451658 0.00444739 0.00503842 0.00559516 </div><div class='del'>-    0.00568213 0.00556459 0.0053176 0.00496654 0.00454337 0.00408592 </div><div class='del'>-    0.00362171 0.00317793 0.00277001 0.00240394 0.00207009 0.00176575 </div><div class='del'>-    0.00149725 0.00129045 0.00114257 0.00101135 0.000871672 </div><div class='del'>-    0.000723764 0.000580438 0.000427507 0.000296956 0.000281834 </div><div class='del'>-    0.000376628 0.000412266 0.000367547 0.000295305 0.000264513 </div><div class='del'>-    0.000233721 0.000202929 0.000172137 0.000141345 0.000124721 </div><div class='del'>-    0.000112577 0.000100433 8.82893e-05 7.61453e-05 6.75517e-05 </div><div class='del'>-    6.33609e-05 5.91701e-05 5.49792e-05 5.07884e-05 4.65976e-05 </div><div class='del'>-    4.24067e-05 3.82159e-05 3.40251e-05 2.98342e-05 2.56434e-05 </div><div class='del'>-    2.36401e-05 2.21181e-05 2.05961e-05 1.90741e-05 1.75521e-05 </div><div class='del'>-    1.60301e-05 1.45081e-05 1.29861e-05 1.14641e-05 9.94208e-06 </div><div class='del'>-    8.59252e-06 7.96439e-06 7.33626e-06 6.70813e-06 6.07999e-06 </div><div class='del'>-    5.45186e-06 4.82373e-06 4.1956e-06 3.56747e-06 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[11].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 1.73419 1.42874 1.04055 0.943004 0.268275 0.0826455 </div><div class='del'>-    0.0388346 0.0214104 0.0135431 0.00961322 0.00712846 0.00588262 </div><div class='del'>-    0.00432397 0.00377774 0.00270134 -0.00393731 -0.00542187 </div><div class='del'>-    -0.00126596 0.0113777 0.0134522 0.00477056 -0.00211067 -0.00229253 </div><div class='del'>-    -0.00173355 -0.00122404 -0.00113426 -0.000744931 -0.000520112 </div><div class='del'>-    -0.000410048 -0.000220439 0.000508104 5.15856e-05 -0.000112593 </div><div class='del'>-    -0.000118917 -9.57394e-05 -7.15727e-05 -5.11847e-05 -3.58275e-05 </div><div class='del'>-    -2.47166e-05 -1.68866e-05 -1.14082e-05 -7.66646e-06 -5.12139e-06 </div><div class='del'>-    -3.63426e-06 -3.01815e-06 -2.64862e-06 -1.4947e-06 -1.91403e-07 </div><div class='del'>-    -2.5763e-08 -7.73699e-07 -1.52164e-06 -1.07268e-06 -3.81696e-07 </div><div class='del'>-    2.6727e-07 4.75489e-07 6.83708e-07 8.91926e-07 1.10014e-06 </div><div class='del'>-    1.30836e-06 1.2482e-06 1.00726e-06 7.66311e-07 5.25364e-07 </div><div class='del'>-    2.84417e-07 6.27857e-08 7.43904e-10 -6.12979e-08 -1.2334e-07 </div><div class='del'>-    -1.85382e-07 -2.47423e-07 -3.09465e-07 -3.71507e-07 -4.33549e-07 </div><div class='del'>-    -4.95591e-07 -5.57633e-07 -6.04571e-07 -5.4944e-07 -4.9431e-07 </div><div class='del'>-    -4.3918e-07 -3.84049e-07 -3.28919e-07 -2.73789e-07 -2.18659e-07 </div><div class='del'>-    -1.63528e-07 -1.08398e-07 -5.32678e-08 1.062e-09 5.08502e-08 </div><div class='del'>-    1.00638e-07 1.50427e-07 2.00215e-07 2.50003e-07 2.99791e-07 </div><div class='del'>-    3.4958e-07 3.99368e-07 4.49156e-07 4.98944e-07 5.34512e-07 </div><div class='del'>-    5.01032e-07 4.67553e-07 4.34073e-07 4.00593e-07 3.67113e-07 </div><div class='del'>-    3.33633e-07 3.00153e-07 2.66674e-07 2.33194e-07 1.99714e-07 </div><div class='del'>-    1.66234e-07 1.32754e-07 9.92744e-08 6.57945e-08 3.23147e-08 </div><div class='del'>-    -1.16513e-09 -3.4645e-08 -6.81248e-08 -1.01605e-07 -1.35084e-07 </div><div class='del'>-    -1.68564e-07 -2.18729e-07 0.0114926 -0.0245378 -0.111828 </div><div class='del'>-    0.0964775 1.61491 3.22668 4.22041 4.54492 4.82845 4.94868 </div><div class='del'>-    4.98588 4.99609 4.9981 4.99908 4.99788 4.98395 4.99294 4.99724 </div><div class='del'>-    5.01939 5.0471 5.00902 4.98194 4.98496 4.99188 4.99623 4.99862 </div><div class='del'>-    5.00025 4.99974 4.99953 4.99946 4.99958 5.00012 4.99997 </div><div class='del'>-    4.99992 4.99988 4.99985 4.9998 4.9997 4.9988 4.99806 4.99982 </div><div class='del'>-    5.00143 5.00159 5.00098 5.00053 5.00028 5.00007 4.99977 </div><div class='del'>-    4.99992 5.00005 5.00133 5.0009 4.99993 4.99972 4.99975 4.9998 </div><div class='del'>-    4.99982 4.99983 4.99983 4.99983 4.99983 4.99984 4.99986 </div><div class='del'>-    4.99987 4.99989 4.9999 4.99991 4.99992 4.99994 4.99995 4.99995 </div><div class='del'>-    4.99996 4.99997 4.99997 4.99998 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    5 5 5 5.00001 5.00001 5.00001 5.00002 5.00002 5.00002 5.00002 </div><div class='del'>-    5.00002 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 5 5 5.01457 4.99482 4.96561 4.99326 </div><div class='del'>-    5.03452 5.00424 5.00101 5.00045 5.00004 4.99965 4.99997 </div><div class='del'>-    4.99994 4.99958 4.99999 4.99936 4.9839 4.99248 4.99717 5.01976 </div><div class='del'>-    5.04869 5.0087 4.98143 4.98488 4.99199 4.99622 4.9983 4.99928 </div><div class='del'>-    4.99971 4.99986 5.00031 5.00022 5.00035 5.0001 4.99884 4.99811 </div><div class='del'>-    4.99803 4.99887 5.00078 5.00151 5.00116 5.00007 4.99843 </div><div class='del'>-    4.99915 5.00107 5.00168 5.00141 5.00092 5.00055 5.0003 5.00016 </div><div class='del'>-    5.0001 5.00001 5.00016 5.0002 5.00009 4.99993 4.99975 4.99984 </div><div class='del'>-    4.99991 4.99991 4.99982 4.99974 4.99974 4.99985 4.99995 </div><div class='del'>-    4.99999 4.99998 5.00004 5.00013 5.00015 5.00007 4.99988 </div><div class='del'>-    4.99982 4.99985 4.99995 5.00006 5.0002 5.00025 5.0002 5.00009 </div><div class='del'>-    5.00006 5.00004 5.00002 5 4.99998 4.99997 4.99998 4.99998 </div><div class='del'>-    4.99999 4.99999 4.99999 5 5 5 5 5 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99998 4.99998 4.99998 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[12].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.16975 4.78685 2.94241 0.126698 0.0487004 -0.00422591 </div><div class='del'>-    -0.00130689 -0.000486756 -0.000195875 -0.000108988 -6.66736e-05 </div><div class='del'>-    -7.26005e-05 -5.63608e-05 -3.81859e-05 -2.123e-05 -0.0646846 </div><div class='del'>-    -0.0184474 0.182248 1.06731 3.10988 4.46133 4.84133 4.95113 </div><div class='del'>-    4.98364 4.99455 4.99694 4.99727 4.9994 4.99975 5.0001 5.00132 </div><div class='del'>-    5.00089 5.00039 5.00019 5.00011 5.00006 5.00005 5.00004 </div><div class='del'>-    5.00001 4.99992 4.99992 5.00002 5.00013 5.00017 5.00009 </div><div class='del'>-    4.99992 4.99991 4.99994 4.99996 4.99998 4.99999 5.00001 </div><div class='del'>-    5.00004 5.00006 5.00005 5.00004 5.00003 5.00002 5.00001 </div><div class='del'>-    5 4.99999 4.99999 4.99998 4.99998 4.99997 4.99997 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 5 5.14699 4.78074 </div><div class='del'>-    3.19424 0.305663 0.0611255 -0.00179951 -0.0012032 0.000405978 </div><div class='del'>-    0.000989399 0.000445194 0.000191447 8.30476e-05 3.96236e-05 </div><div class='del'>-    1.91866e-05 1.70665e-05 -0.0655239 -0.0210234 0.1827 1.06848 </div><div class='del'>-    3.11554 4.46518 4.84212 4.94853 4.98244 4.99434 4.9997 5.00081 </div><div class='del'>-    5.00009 4.99972 4.99985 4.99974 4.9995 4.99949 4.99958 4.99973 </div><div class='del'>-    4.99948 4.99914 4.99874 4.99946 5.00309 5.0091 5.01576 5.01835 </div><div class='del'>-    5.01852 5.0176 5.01625 5.01479 5.01345 5.01264 5.011 5.01092 </div><div class='del'>-    5.01344 5.01363 5.01289 5.01184 5.01071 5.00956 5.00848 </div><div class='del'>-    5.00751 5.00663 5.00577 5.00497 5.00427 5.00365 5.0031 5.00264 </div><div class='del'>-    5.00224 5.00191 5.00163 5.00138 5.00117 5.00099 5.00083 </div><div class='del'>-    5.00071 5.00061 5.00053 5.00045 5.00037 5.00029 5.00022 </div><div class='del'>-    5.00019 5.0002 5.00023 5.00024 5.00023 5.00023 5.00022 5.0002 </div><div class='del'>-    5.00018 5.00016 5.00014 5.00011 5.00009 5.00007 5.00006 </div><div class='del'>-    5.00005 5.00005 5.00004 5.00003 5.00002 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 </div><div class='del'>-    5.00002 5.00001 5.00001 5.00001 5.14298 4.79809 3.32704 </div><div class='del'>-    0.498385 0.105773 0.0160646 0.0319912 0.0299434 0.0240102 </div><div class='del'>-    0.0185844 0.0130411 0.0106532 0.00864871 0.00744519 0.00660887 </div><div class='del'>-    -0.0612913 -0.0203719 0.174998 0.991787 3.06292 4.60005 </div><div class='del'>-    4.93058 4.98917 5.00033 4.9999 4.99909 4.9966 4.9955 4.99488 </div><div class='del'>-    4.99374 4.9943 5.00131 5.00506 4.99311 4.96288 4.93567 4.92439 </div><div class='del'>-    4.94236 4.9732 4.98864 4.99458 5.00031 5.00694 5.01525 5.01945 </div><div class='del'>-    5.01998 5.01953 5.01874 5.01766 5.0164 5.01509 5.01326 5.01423 </div><div class='del'>-    5.01455 5.01361 5.01245 5.01122 5.01002 5.00888 5.00783 </div><div class='del'>-    5.00687 5.00596 5.00514 5.00442 5.00379 5.00325 5.00279 </div><div class='del'>-    5.0024 5.00208 5.0018 5.00153 5.00126 5.00107 5.00094 5.00085 </div><div class='del'>-    5.00078 5.00072 5.00063 5.00053 5.00042 5.00038 5.00034 </div><div class='del'>-    5.0003 5.00027 5.00023 5.00021 5.00019 5.00017 5.00015 5.00013 </div><div class='del'>-    5.00012 5.00011 5.0001 5.0001 5.00009 5.00008 5.00007 5.00007 </div><div class='del'>-    5.00006 5.00005 5.00005 5.00004 5.00004 5.00003 5.00003 </div><div class='del'>-    5.00002 5.00002 5.00002 5.00001 5.00001 5 5 5 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00002 5.00002 5.00002 5.00002 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[13].set(&lt;&lt;-'EOD')</div><div class='del'>-    9.73784e-10 0.0189926 0.0926769 0.206309 0.111533 0.0953491 </div><div class='del'>-    0.0426966 0.0214177 0.0117943 0.00741442 0.00528816 0.00398417 </div><div class='del'>-    0.0032967 0.00266499 0.00206647 0.00158788 -0.0371391 -0.0439528 </div><div class='del'>-    -0.0408653 -0.0188706 0.0150241 0.0126852 0.00209817 -0.000239206 </div><div class='del'>-    -5.31488e-05 0.000876324 -0.00451221 -0.0165223 -0.0284127 </div><div class='del'>-    -0.0427584 -0.0502453 -0.0257366 -0.00903938 -0.00376456 </div><div class='del'>-    -0.00233385 -0.00169922 -0.00130397 -0.00102542 -0.000811435 </div><div class='del'>-    -0.000648115 -0.000529266 -0.00043795 -0.00036574 -0.00030716 </div><div class='del'>-    -0.00026221 -0.000229662 -0.000205112 -0.000181038 -0.000162045 </div><div class='del'>-    -0.000148988 -0.000137633 -0.000126278 -0.000115562 -0.000104976 </div><div class='del'>-    -9.49324e-05 -9.0585e-05 -8.62375e-05 -8.18901e-05 -7.75426e-05 </div><div class='del'>-    -7.31952e-05 -6.93752e-05 -6.59106e-05 -6.24461e-05 -5.89815e-05 </div><div class='del'>-    -5.55169e-05 -5.22412e-05 -5.05263e-05 -4.88114e-05 -4.70966e-05 </div><div class='del'>-    -4.53817e-05 -4.36668e-05 -4.19519e-05 -4.0237e-05 -3.85222e-05 </div><div class='del'>-    -3.68073e-05 -3.50924e-05 -3.34782e-05 -3.25442e-05 -3.16102e-05 </div><div class='del'>-    -3.06763e-05 -2.97423e-05 -2.88083e-05 -2.78744e-05 -2.69404e-05 </div><div class='del'>-    -2.60064e-05 -2.50725e-05 -2.41385e-05 -2.32635e-05 -2.27232e-05 </div><div class='del'>-    -2.21829e-05 -2.16426e-05 -2.11023e-05 -2.0562e-05 -2.00217e-05 </div><div class='del'>-    -1.94814e-05 -1.89411e-05 -1.84007e-05 -1.78604e-05 -1.73647e-05 </div><div class='del'>-    -1.70853e-05 -1.68059e-05 -1.65265e-05 -1.62471e-05 -1.59677e-05 </div><div class='del'>-    -1.56883e-05 -1.54089e-05 -1.51295e-05 -1.48501e-05 -1.45707e-05 </div><div class='del'>-    -1.42913e-05 -1.40119e-05 -1.37325e-05 -1.34531e-05 -1.31737e-05 </div><div class='del'>-    -1.28943e-05 -1.26149e-05 -1.23355e-05 -1.20561e-05 -1.17767e-05 </div><div class='del'>-    -1.14973e-05 -1.10954e-05 0.0152675 0.0228237 -0.00460678 </div><div class='del'>-    -0.0341525 0.0232109 -0.0138039 -0.0416538 -0.0458764 -0.0201967 </div><div class='del'>-    -0.00878316 -0.00379173 -0.00164621 -0.000785131 -0.00037575 </div><div class='del'>-    -0.000352375 -0.0545586 -0.0746881 -0.0771865 -0.05386 -0.0022199 </div><div class='del'>-    0.0136703 0.00633526 0.00138826 -0.00108934 0.0038886 0.0298077 </div><div class='del'>-    0.0475776 0.0481003 0.0464167 0.047818 0.042789 0.035207 </div><div class='del'>-    0.0264423 0.0193959 0.0151614 0.00624257 -0.00913057 -0.0310696 </div><div class='del'>-    -0.0430238 0.016426 0.189762 0.49025 0.820116 1.13919 1.43549 </div><div class='del'>-    1.70658 1.95183 2.17414 2.38506 2.5657 2.73958 2.97905 3.21403 </div><div class='del'>-    3.43025 3.62645 3.8028 3.96002 4.09996 4.22443 4.33427 4.42886 </div><div class='del'>-    4.51097 4.5817 4.64326 4.6957 4.74132 4.7797 4.81298 4.84102 </div><div class='del'>-    4.86512 4.88523 4.90224 4.91649 4.92846 4.93868 4.94755 </div><div class='del'>-    4.95483 4.96114 4.96682 4.97161 4.97502 4.9776 4.97944 4.98141 </div><div class='del'>-    4.98319 4.98467 4.98585 4.9869 4.98796 4.98902 4.99008 4.99114 </div><div class='del'>-    4.9922 4.99326 4.9938 4.99429 4.99479 4.99528 4.99578 4.99628 </div><div class='del'>-    4.99677 4.99704 4.99718 4.99733 4.99747 4.99762 4.99777 </div><div class='del'>-    4.99791 4.99806 4.9982 4.99835 4.9985 4.99864 4.99879 4.99893 </div><div class='del'>-    4.99907 4.99916 4.99925 4.99934 4.99943 5.01473 4.92293 </div><div class='del'>-    4.61974 4.0316 3.7835 3.74195 3.78344 3.87272 3.97386 4.07319 </div><div class='del'>-    4.16686 4.25256 4.33126 4.40264 4.46697 4.49249 4.51807 </div><div class='del'>-    4.55803 4.64055 4.78574 4.86074 4.88334 4.8999 4.91455 4.92814 </div><div class='del'>-    4.93926 4.94761 4.95433 4.95907 4.9654 4.98317 5.0208 5.05134 </div><div class='del'>-    4.85852 4.16041 3.00077 1.68376 0.672707 0.240838 0.0794725 </div><div class='del'>-    -0.0106347 -0.00879443 0.107196 0.368163 0.701424 1.03581 </div><div class='del'>-    1.3601 1.6678 1.95731 2.22701 2.47544 2.69099 2.92327 3.16648 </div><div class='del'>-    3.3877 3.59067 3.77344 3.93584 4.08066 4.20863 4.32065 4.41791 </div><div class='del'>-    4.50211 4.57423 4.63614 4.68888 4.73377 4.7721 4.80519 4.83338 </div><div class='del'>-    4.85732 4.87815 4.89514 4.90927 4.92108 4.93122 4.94014 </div><div class='del'>-    4.94845 4.95601 4.96251 4.96576 4.969 4.97225 4.9755 4.97874 </div><div class='del'>-    4.98087 4.98265 4.98442 4.9862 4.98797 4.98924 4.9899 4.99055 </div><div class='del'>-    4.9912 4.99186 4.99251 4.99316 4.99381 4.99447 4.99512 4.99577 </div><div class='del'>-    4.99609 4.99634 4.99659 4.99683 4.99708 4.99732 4.99757 </div><div class='del'>-    4.99782 4.99806 4.99831 4.99853 4.99863 4.99873 4.99883 </div><div class='del'>-    4.99893 4.99903 4.99913 4.99923 4.99933 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[14].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 2.00147 1.85141 1.0654 0.275481 0.205547 0.0712627 </div><div class='del'>-    0.0313387 0.0151431 0.00864531 0.00593861 0.00438111 0.0037479 </div><div class='del'>-    0.00305857 0.00221221 0.0017081 -0.0896128 -0.109079 -0.121356 </div><div class='del'>-    -0.0542001 0.175821 0.177442 0.0814591 0.0333042 0.0134909 </div><div class='del'>-    0.00625777 0.00100092 -0.00552776 -0.00411139 -0.00150395 </div><div class='del'>-    -0.000564784 3.48169e-05 -0.000287014 -0.000538515 -0.000456537 </div><div class='del'>-    -0.000325677 -0.000275468 -0.000166452 -8.27481e-05 -8.28704e-05 </div><div class='del'>-    -7.47644e-05 -4.60552e-05 -2.61481e-06 2.26359e-05 2.53852e-05 </div><div class='del'>-    -1.39853e-06 -4.23456e-05 -4.0907e-05 -2.8501e-05 -1.5945e-05 </div><div class='del'>-    -9.01122e-06 -2.07747e-06 1.49328e-06 4.38398e-06 6.84248e-06 </div><div class='del'>-    4.76711e-06 2.69173e-06 6.16362e-07 -1.45901e-06 -3.53438e-06 </div><div class='del'>-    -4.14256e-06 -3.76238e-06 -3.3822e-06 -3.00202e-06 -2.62184e-06 </div><div class='del'>-    -2.24878e-06 -1.93456e-06 -1.62033e-06 -1.3061e-06 -9.91867e-07 </div><div class='del'>-    -6.77638e-07 -3.63409e-07 -4.91792e-08 2.6505e-07 5.7928e-07 </div><div class='del'>-    8.93509e-07 1.16076e-06 1.11055e-06 1.06034e-06 1.01014e-06 </div><div class='del'>-    9.59927e-07 9.09719e-07 8.59511e-07 8.09302e-07 7.59094e-07 </div><div class='del'>-    7.08886e-07 6.58678e-07 5.99251e-07 4.87523e-07 3.75795e-07 </div><div class='del'>-    2.64068e-07 1.5234e-07 4.06119e-08 -7.1116e-08 -1.82844e-07 </div><div class='del'>-    -2.94572e-07 -4.063e-07 -5.18027e-07 -6.08517e-07 -5.95879e-07 </div><div class='del'>-    -5.83241e-07 -5.70604e-07 -5.57966e-07 -5.45328e-07 -5.3269e-07 </div><div class='del'>-    -5.20053e-07 -5.07415e-07 -4.94777e-07 -4.8214e-07 -4.69502e-07 </div><div class='del'>-    -4.56864e-07 -4.44226e-07 -4.31589e-07 -4.18951e-07 -4.06313e-07 </div><div class='del'>-    -3.93676e-07 -3.81038e-07 -3.684e-07 -3.55762e-07 -3.43125e-07 </div><div class='del'>-    1.06736e-05 0.0797407 0.0437947 -0.0645098 -0.0877312 0.0653203 </div><div class='del'>-    -0.00621184 -0.0353188 -0.0491378 -0.0251957 -0.0110996 </div><div class='del'>-    -0.00481123 -0.0020941 -0.000998038 -0.000478747 -0.000445332 </div><div class='del'>-    -0.102046 -0.135753 -0.154351 -0.0827509 0.163348 0.174012 </div><div class='del'>-    0.0794822 0.0310624 0.0112213 0.00249061 0.00130764 0.00181315 </div><div class='del'>-    0.00163875 0.00101454 0.000497435 0.000195258 5.31901e-05 </div><div class='del'>-    2.4607e-05 6.62736e-05 7.90718e-05 4.0372e-05 -0.000141184 </div><div class='del'>-    -0.000280623 5.5608e-05 0.000799565 0.000920189 0.000931616 </div><div class='del'>-    0.000494527 0.000162303 -8.24884e-05 -0.000183938 -0.000203899 </div><div class='del'>-    -0.000144788 -9.87063e-05 -0.000227929 2.93932e-05 0.000208563 </div><div class='del'>-    1.88958e-06 -7.6335e-05 -0.000172472 -0.000165656 -0.000145889 </div><div class='del'>-    -0.000177311 -0.000191058 -0.000168287 -0.00015755 -0.00013142 </div><div class='del'>-    -8.10488e-05 -6.36115e-05 -7.8699e-05 -8.11282e-05 -7.98625e-05 </div><div class='del'>-    -5.98807e-05 -3.40879e-05 -1.95464e-05 -1.79247e-05 -4.45514e-05 </div><div class='del'>-    -7.47995e-05 -8.7682e-05 -7.50806e-05 -3.25561e-05 -4.34114e-05 </div><div class='del'>-    -7.69099e-05 -0.000141101 -0.00018743 -0.000148471 -5.06546e-05 </div><div class='del'>-    0.000120195 0.000177635 0.000177052 0.000146344 9.75126e-05 </div><div class='del'>-    8.31233e-05 6.8734e-05 5.43447e-05 3.99554e-05 2.55661e-05 </div><div class='del'>-    1.11768e-05 -3.21253e-06 -3.88937e-06 -3.56628e-06 -3.24318e-06 </div><div class='del'>-    -2.92008e-06 -2.59699e-06 -2.27389e-06 -1.9508e-06 -1.73227e-06 </div><div class='del'>-    -1.56796e-06 -1.40365e-06 -1.23934e-06 -1.07503e-06 -9.10722e-07 </div><div class='del'>-    -7.46412e-07 -5.82101e-07 -4.1779e-07 -2.5348e-07 -8.91694e-08 </div><div class='del'>-    7.51412e-08 2.39452e-07 4.03762e-07 5.95733e-07 1.00771e-06 </div><div class='del'>-    1.41969e-06 1.83167e-06 2.24365e-06 0.0828257 0.231038 0.465438 </div><div class='del'>-    1.54516 2.8461 3.19221 3.40395 3.6382 3.80758 3.93848 4.04882 </div><div class='del'>-    4.15428 4.247 4.32917 4.40235 4.36941 4.397 4.48862 4.64552 </div><div class='del'>-    4.86595 5.03475 5.0348 5.02627 5.01967 5.01542 5.00925 4.98613 </div><div class='del'>-    4.9519 4.91581 4.87357 4.82302 4.80403 4.82565 4.86102 4.89483 </div><div class='del'>-    4.92253 4.94428 4.96257 4.97608 4.98373 4.98823 4.99182 </div><div class='del'>-    4.99437 4.99635 4.99745 4.99802 4.99843 4.99873 4.99895 </div><div class='del'>-    4.99912 4.99925 4.99931 4.99962 4.99973 4.99972 4.99971 </div><div class='del'>-    4.9997 4.99969 4.9997 4.99971 4.99973 4.99974 4.99976 4.99978 </div><div class='del'>-    4.9998 4.99982 4.99985 4.99987 4.99989 4.9999 4.99991 4.99991 </div><div class='del'>-    4.99993 4.99994 4.99997 5.00001 5.00006 5.00008 5.00006 </div><div class='del'>-    5.00002 5 4.99999 4.99998 4.99997 4.99995 4.99995 4.99995 </div><div class='del'>-    4.99995 4.99995 4.99995 4.99995 4.99996 4.99997 4.99997 </div><div class='del'>-    4.99998 4.99999 5 5 5.00001 5.00002 5.00002 5.00002 5.00002 </div><div class='del'>-    5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5 5 5 4.99999 4.99999 4.99999 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[15].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 2.00199 2.08919 1.84314 1.08254 0.214737 0.0377351 </div><div class='del'>-    0.00952455 0.00232763 0.000563614 0.000263477 0.000148642 </div><div class='del'>-    0.000285086 0.000242592 7.34699e-05 -1.53467e-05 -0.0161874 </div><div class='del'>-    -0.0157876 -0.0141194 0.0132576 0.0903272 0.109938 0.0535295 </div><div class='del'>-    0.0224216 0.00940945 0.00466825 -0.000649972 -0.00654752 </div><div class='del'>-    -0.00333248 -0.00103671 -0.000508276 -5.8896e-05 -0.00043938 </div><div class='del'>-    -0.000544704 -0.00044444 -0.000307093 -0.00024517 -0.000154538 </div><div class='del'>-    -8.78602e-05 -7.10461e-05 -6.06485e-05 -3.91039e-05 -8.45988e-06 </div><div class='del'>-    9.43442e-06 1.28351e-05 -2.16734e-06 -2.6142e-05 -2.54768e-05 </div><div class='del'>-    -1.88997e-05 -1.17906e-05 -7.3808e-06 -2.97101e-06 1.19146e-07 </div><div class='del'>-    2.94246e-06 5.38942e-06 3.88851e-06 2.38761e-06 8.86704e-07 </div><div class='del'>-    -6.14201e-07 -2.11511e-06 -2.59565e-06 -2.38885e-06 -2.18205e-06 </div><div class='del'>-    -1.97525e-06 -1.76845e-06 -1.56241e-06 -1.36258e-06 -1.16276e-06 </div><div class='del'>-    -9.62939e-07 -7.63116e-07 -5.63293e-07 -3.6347e-07 -1.63647e-07 </div><div class='del'>-    3.61756e-08 2.35999e-07 4.35822e-07 6.07653e-07 5.90323e-07 </div><div class='del'>-    5.72994e-07 5.55665e-07 5.38336e-07 5.21007e-07 5.03678e-07 </div><div class='del'>-    4.86349e-07 4.6902e-07 4.51691e-07 4.34361e-07 4.11899e-07 </div><div class='del'>-    3.60315e-07 3.08731e-07 2.57146e-07 2.05562e-07 1.53977e-07 </div><div class='del'>-    1.02393e-07 5.08082e-08 -7.76222e-10 -5.23607e-08 -1.03945e-07 </div><div class='del'>-    -1.47815e-07 -1.54225e-07 -1.60635e-07 -1.67045e-07 -1.73455e-07 </div><div class='del'>-    -1.79864e-07 -1.86274e-07 -1.92684e-07 -1.99094e-07 -2.05504e-07 </div><div class='del'>-    -2.11914e-07 -2.18324e-07 -2.24734e-07 -2.31144e-07 -2.37554e-07 </div><div class='del'>-    -2.43964e-07 -2.50373e-07 -2.56783e-07 -2.63193e-07 -2.69603e-07 </div><div class='del'>-    -2.76013e-07 -2.82423e-07 2.92534e-06 0.0446777 0.024278 </div><div class='del'>-    -0.0518987 -0.0636547 0.00983929 -0.000518204 -0.000265194 </div><div class='del'>-    0.000154772 0.000299538 3.12715e-05 -3.18225e-05 -2.48268e-05 </div><div class='del'>-    -1.16701e-05 -6.05117e-06 7.61116e-06 -0.0163668 -0.0158244 </div><div class='del'>-    -0.0141177 0.0100085 0.0857144 0.107784 0.051862 0.0204448 </div><div class='del'>-    0.00629858 0.000967736 0.00121674 0.00190276 0.00154009 </div><div class='del'>-    0.000860922 0.000410386 0.000164585 3.99493e-05 1.93797e-05 </div><div class='del'>-    5.67594e-05 0.000110126 2.49925e-05 -7.17815e-05 -0.000142299 </div><div class='del'>-    -1.63109e-05 0.000439529 0.000562489 0.000594599 0.000326164 </div><div class='del'>-    0.000126423 -4.26063e-05 -0.000122927 -0.000114152 -6.72706e-05 </div><div class='del'>-    -6.41242e-05 -0.000135588 2.61507e-05 0.000134036 6.43734e-06 </div><div class='del'>-    -4.6223e-05 -0.000112047 -0.000101388 -8.67847e-05 -0.000117664 </div><div class='del'>-    -0.000133957 -0.000116558 -0.000100873 -7.65448e-05 -4.44964e-05 </div><div class='del'>-    -3.6677e-05 -5.26632e-05 -5.45172e-05 -5.13545e-05 -3.73869e-05 </div><div class='del'>-    -1.99732e-05 -1.0907e-05 -1.10081e-05 -3.02609e-05 -5.18517e-05 </div><div class='del'>-    -6.13597e-05 -5.30706e-05 -2.39572e-05 -3.24146e-05 -5.70062e-05 </div><div class='del'>-    -0.000103448 -0.000135376 -0.0001024 -2.39007e-05 0.000110929 </div><div class='del'>-    0.000151226 0.000142044 0.000105922 5.62834e-05 4.78476e-05 </div><div class='del'>-    3.94117e-05 3.09759e-05 2.25401e-05 1.41042e-05 5.66837e-06 </div><div class='del'>-    -2.76747e-06 -3.08639e-06 -2.81341e-06 -2.54043e-06 -2.26745e-06 </div><div class='del'>-    -1.99447e-06 -1.72149e-06 -1.44851e-06 -1.26226e-06 -1.12096e-06 </div><div class='del'>-    -9.79661e-07 -8.38363e-07 -6.97065e-07 -5.55768e-07 -4.1447e-07 </div><div class='del'>-    -2.73173e-07 -1.31875e-07 9.42259e-09 1.5072e-07 2.92018e-07 </div><div class='del'>-    4.33315e-07 5.74613e-07 7.10363e-07 8.01984e-07 8.93604e-07 </div><div class='del'>-    9.85225e-07 1.07685e-06 0.04474 0.0928765 0.141327 0.0176048 </div><div class='del'>-    -0.071675 -0.0124613 0.989022 2.28104 3.40619 4.21417 4.67173 </div><div class='del'>-    4.87438 4.96044 4.98996 4.99858 4.96672 4.89502 4.79391 </div><div class='del'>-    4.76433 4.8387 4.98612 5.0161 5.01722 5.01437 5.01256 4.99827 </div><div class='del'>-    4.95807 4.9209 4.88217 4.83006 4.78461 4.80759 4.85548 4.89604 </div><div class='del'>-    4.9254 4.94617 4.96126 4.97374 4.98255 4.98792 4.99126 4.99361 </div><div class='del'>-    4.99554 4.99699 4.99792 4.99846 4.99881 4.99905 4.99924 </div><div class='del'>-    4.99938 4.99949 4.99955 4.9997 4.9998 4.99982 4.99982 4.99982 </div><div class='del'>-    4.99982 4.99982 4.99983 4.99984 4.99985 4.99986 4.99987 </div><div class='del'>-    4.99988 4.99989 4.9999 4.99992 4.99993 4.99994 4.99995 4.99995 </div><div class='del'>-    4.99996 4.99996 4.99998 4.99999 5.00001 5.00002 5.00002 </div><div class='del'>-    5.00001 5.00001 5 4.99999 4.99999 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[16].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 1.73073 1.50572 1.89001 3.39004 4.36034 4.79012 </div><div class='del'>-    4.93798 4.98305 4.99539 4.9979 4.99904 4.99772 4.9983 4.99935 </div><div class='del'>-    4.99975 4.98837 4.99456 4.99728 5.01838 5.04568 5.00759 </div><div class='del'>-    4.98112 4.98479 4.99197 4.99641 4.99747 4.99775 5.00043 </div><div class='del'>-    5.0007 5.00035 5.00023 4.99976 5.00002 5.00007 5.0002 4.99993 </div><div class='del'>-    5.00003 5.00021 5.00006 4.99993 4.99992 5.00002 5.00013 </div><div class='del'>-    5.00017 5.00009 4.99992 4.99991 4.99993 4.99996 4.99998 </div><div class='del'>-    4.99999 5.00001 5.00003 5.00005 5.00004 5.00004 5.00003 </div><div class='del'>-    5.00002 5.00001 5 4.99999 4.99999 4.99998 4.99998 4.99997 </div><div class='del'>-    4.99997 4.99998 4.99998 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00002 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 5 5.01498 4.99342 4.96899 5.00301 5.02627 4.9977 </div><div class='del'>-    4.99548 4.99757 5.00277 5.00245 5.0014 5.00069 5.00032 5.00014 </div><div class='del'>-    5.00009 4.9867 4.99262 4.99607 5.01805 5.04713 5.00927 4.98184 </div><div class='del'>-    4.98483 4.9914 4.99616 4.99902 4.9999 4.99987 4.99979 4.99981 </div><div class='del'>-    4.99989 4.99994 4.99998 5.0002 5.00001 5.00008 5.00008 5.0001 </div><div class='del'>-    5.00021 5.00032 5.00025 5.00019 5.00006 5.00007 4.99994 </div><div class='del'>-    4.99997 4.99999 5.00023 5.00008 4.99993 4.99998 4.99986 </div><div class='del'>-    4.99982 5.00003 4.99985 4.99996 5.00014 5 4.99984 4.99979 </div><div class='del'>-    4.99982 4.99993 5.00008 5.00011 5.00002 4.99996 4.9999 4.99994 </div><div class='del'>-    5.00001 5.00007 5.00009 4.99995 4.99978 4.99971 4.99976 </div><div class='del'>-    4.99997 4.99996 4.99989 4.99972 4.99955 4.99953 4.99959 </div><div class='del'>-    4.99976 4.9999 5.00005 5.00023 5.00039 5.00034 5.00029 5.00024 </div><div class='del'>-    5.00019 5.00014 5.00009 5.00004 5.00003 5.00002 5.00001 </div><div class='del'>-    5 5 4.99999 4.99998 4.99998 4.99998 4.99998 4.99998 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 </div><div class='del'>-    5.00001 5.00002 5.00003 5.00004 5.01564 5.03395 5.04932 </div><div class='del'>-    5.11868 3.92502 1.31888 0.163888 0.0946876 0.0789578 0.0565084 </div><div class='del'>-    0.0260333 0.0156986 0.00907667 0.00613629 0.00468417 -0.00174008 </div><div class='del'>-    -0.0021422 0.000586962 0.0124937 0.0147977 0.00838454 0.00039383 </div><div class='del'>-    -0.000522021 -0.000426598 -0.000290214 -0.00173713 -0.00384132 </div><div class='del'>-    -0.00382945 -0.00429219 -0.00580193 -0.00393246 0.0017543 </div><div class='del'>-    0.00423045 0.00408931 0.0031976 0.00245457 0.00187293 0.00159068 </div><div class='del'>-    0.00105697 0.000609902 0.000358825 0.000334125 0.000212708 </div><div class='del'>-    0.000168116 8.97349e-05 5.21578e-05 3.84527e-05 2.93033e-05 </div><div class='del'>-    2.10067e-05 1.59954e-05 1.13917e-05 5.49738e-06 2.77217e-05 </div><div class='del'>-    6.51259e-06 -6.65468e-06 2.09837e-06 -6.617e-06 -4.80187e-06 </div><div class='del'>-    1.55031e-06 4.26536e-06 7.69457e-07 -1.46213e-06 -7.25202e-07 </div><div class='del'>-    3.26501e-06 6.55807e-06 7.524e-06 6.07209e-06 6.00701e-06 </div><div class='del'>-    5.41166e-06 3.86573e-06 1.10651e-06 -2.74603e-06 -2.18566e-06 </div><div class='del'>-    2.3658e-06 8.59956e-06 8.35046e-06 2.90621e-06 -8.75982e-07 </div><div class='del'>-    -1.87189e-06 -2.1528e-06 -1.94875e-06 -1.74471e-06 -1.54067e-06 </div><div class='del'>-    -1.33662e-06 -1.13258e-06 -8.40567e-07 -5.20743e-07 -2.00918e-07 </div><div class='del'>-    1.18906e-07 4.38731e-07 6.11382e-07 6.01529e-07 5.91675e-07 </div><div class='del'>-    5.81822e-07 5.71968e-07 5.62115e-07 5.52261e-07 5.42407e-07 </div><div class='del'>-    5.32554e-07 5.227e-07 5.12847e-07 4.72812e-07 4.26137e-07 </div><div class='del'>-    3.79462e-07 3.32786e-07 2.86111e-07 2.39436e-07 1.92761e-07 </div><div class='del'>-    1.46086e-07 9.94107e-08 5.27356e-08 -2.77779e-10 -7.98079e-08 </div><div class='del'>-    -1.59338e-07 -2.38868e-07 -3.18398e-07 -3.97928e-07 -4.77458e-07 </div><div class='del'>-    -5.56988e-07 -6.36519e-07 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[17].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.16963 4.84136 3.33754 0.316206 0.103113 0.0273341 0.0221102 </div><div class='del'>-    0.0177008 0.0143758 0.0115203 0.00929231 0.00752716 0.00625439 </div><div class='del'>-    0.00489872 0.00403656 -0.0657317 -0.0256467 0.165394 0.985963 </div><div class='del'>-    3.05067 4.55799 4.89728 4.92464 4.8882 4.90592 4.97315 4.99241 </div><div class='del'>-    4.99694 4.99845 4.99905 4.99939 4.99959 4.99971 4.9998 4.99986 </div><div class='del'>-    4.9999 4.99993 4.99995 4.99996 4.99997 4.99998 4.99998 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 5 5.00001 5.00003 5.00005 </div><div class='del'>-    5.00004 5.00002 5 4.99999 4.99999 4.99998 4.99998 4.99997 </div><div class='del'>-    4.99997 4.99998 4.99998 4.99999 4.99999 5 5 5 5 5 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00002 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5 5 5 5 </div><div class='del'>-    5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 5 5 5 5 5 5 5.00025 5.1657 4.69981 2.43895 </div><div class='del'>-    0.0229743 0.0351406 -0.0211974 -0.0312063 -0.0160331 -0.0021718 </div><div class='del'>-    -0.000766597 -0.000251052 -5.49363e-05 -3.36364e-06 -2.01983e-06 </div><div class='del'>-    -9.70575e-06 -0.0657007 -0.0205247 0.183332 1.07163 3.11839 </div><div class='del'>-    4.46213 4.84163 4.95195 4.99159 5.02084 5.04029 5.04138 </div><div class='del'>-    5.0271 5.00445 4.97957 4.95702 4.95231 4.97819 4.99191 4.9963 </div><div class='del'>-    4.99822 4.99878 4.99903 4.99925 4.99942 4.9995 4.99954 4.99957 </div><div class='del'>-    4.99961 4.99966 4.9997 4.99974 4.99977 4.99981 4.99983 4.99986 </div><div class='del'>-    4.99988 4.9999 4.99991 4.99992 4.99994 4.99995 4.99995 4.99996 </div><div class='del'>-    4.99997 4.99997 4.99998 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 </div><div class='del'>-    5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5 5 5 4.99999 4.99998 4.99997 4.99996 5.14239 4.76219 </div><div class='del'>-    3.16574 0.299969 0.0631609 -0.00118611 -0.00026052 -5.96333e-05 </div><div class='del'>-    -1.44904e-05 -4.3859e-06 -2.99454e-06 1.10547e-06 4.84662e-06 </div><div class='del'>-    1.30971e-05 2.23082e-05 -0.0655844 -0.0204818 0.182507 1.05954 </div><div class='del'>-    3.12277 4.46735 4.83915 4.94512 4.97679 4.98654 4.9966 5.00833 </div><div class='del'>-    5.00776 5.00432 5.00199 5.00086 5.00033 5.00008 5 5.00001 </div><div class='del'>-    5 5.00005 5.00002 4.99981 4.99991 4.99998 4.99979 4.99979 </div><div class='del'>-    4.99984 4.9998 4.9998 5.00006 5.00002 5.00001 5 5 4.99992 </div><div class='del'>-    4.99998 4.99999 5.00002 5.00014 4.99999 4.99987 4.99993 </div><div class='del'>-    5.00003 5.00011 5.00005 4.99996 4.99987 4.99985 4.99994 </div><div class='del'>-    5.00009 5.0001 5 4.99993 4.99997 5.00008 5.00015 5.00021 </div><div class='del'>-    5.00021 5.00007 4.99978 4.99965 4.99973 4.9999 4.99992 4.99995 </div><div class='del'>-    4.99997 4.99999 5.00001 5.00002 5.00001 5.00001 5.00001 </div><div class='del'>-    5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 5 5 5 5 5 5.00001 5.00001 5.00001 5.00002 </div><div class='del'>-    5.00002 5.00002 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[18].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.0333 5.02472 4.92559 4.18383 3.93923 3.9961 4.14293 </div><div class='del'>-    4.28591 4.41336 4.52157 4.61101 4.68472 4.7439 4.79294 4.83239 </div><div class='del'>-    4.80697 4.78808 4.79322 4.8838 5.08529 5.21863 4.88852 3.90198 </div><div class='del'>-    2.14586 0.383977 0.101103 0.0525711 0.0318287 0.020895 0.0146908 </div><div class='del'>-    0.010831 0.00830272 0.00656377 0.00532066 0.00440078 0.00369956 </div><div class='del'>-    0.00315713 0.00272614 0.00237965 0.00209659 0.00186339 0.00167014 </div><div class='del'>-    0.0015081 0.00137172 0.00125607 0.00115393 0.00106076 0.000980166 </div><div class='del'>-    0.000918015 0.000862837 0.00080766 0.000763488 0.000721541 </div><div class='del'>-    0.000680825 0.000653026 0.000625226 0.000597426 0.000569627 </div><div class='del'>-    0.000541827 0.000519087 0.000499756 0.000480424 0.000461093 </div><div class='del'>-    0.000441761 0.000423291 0.000411941 0.00040059 0.00038924 </div><div class='del'>-    0.000377889 0.000366539 0.000355188 0.000343838 0.000332487 </div><div class='del'>-    0.000321137 0.000309786 0.000299055 0.000292509 0.000285963 </div><div class='del'>-    0.000279417 0.000272871 0.000266325 0.000259779 0.000253233 </div><div class='del'>-    0.000246686 0.00024014 0.000233594 0.000227387 0.0002231 </div><div class='del'>-    0.000218813 0.000214526 0.00021024 0.000205953 0.000201666 </div><div class='del'>-    0.000197379 0.000193092 0.000188805 0.000184519 0.000180526 </div><div class='del'>-    0.000177963 0.0001754 0.000172837 0.000170274 0.000167711 </div><div class='del'>-    0.000165148 0.000162585 0.000160022 0.000157459 0.000154895 </div><div class='del'>-    0.000152332 0.000149769 0.000147206 0.000144643 0.00014208 </div><div class='del'>-    0.000139517 0.000136954 0.000134391 0.000131828 0.000129265 </div><div class='del'>-    0.000126702 0.000132838 0.0311184 0.163151 0.34986 0.604501 </div><div class='del'>-    0.357125 0.136137 0.0711304 0.0346959 0.0212674 0.00872193 </div><div class='del'>-    0.00252206 0.000455269 7.59332e-05 2.91532e-05 0.000320562 </div><div class='del'>-    -0.0720911 -0.0840491 -0.0791345 -0.0404143 0.0182035 -0.0235871 </div><div class='del'>-    -0.0426072 -0.0597501 0.00824773 0.481404 1.32496 2.11949 </div><div class='del'>-    2.57317 2.58202 2.15054 1.33786 0.45702 0.153772 0.0913584 </div><div class='del'>-    0.0604989 0.0421591 0.0271456 0.0170021 0.0115815 0.00907886 </div><div class='del'>-    0.00742466 0.00626096 0.00531127 0.00450501 0.00381927 0.00323718 </div><div class='del'>-    0.00274374 0.00232494 0.00196885 0.00166686 0.00141134 0.00119437 </div><div class='del'>-    0.0010109 0.000855534 0.000723378 0.000611408 0.000516704 </div><div class='del'>-    0.000436769 0.000369523 0.000313026 0.00026526 0.000223976 </div><div class='del'>-    0.000188972 0.000159042 0.000134148 0.000112688 9.49738e-05 </div><div class='del'>-    7.97877e-05 6.721e-05 5.65115e-05 4.77194e-05 4.03591e-05 </div><div class='del'>-    3.42848e-05 2.92627e-05 2.50435e-05 2.1412e-05 1.84532e-05 </div><div class='del'>-    1.58624e-05 1.34673e-05 1.14461e-05 1.00935e-05 9.12375e-06 </div><div class='del'>-    8.50202e-06 7.81431e-06 7.20729e-06 6.73936e-06 6.3702e-06 </div><div class='del'>-    5.90049e-06 5.43077e-06 4.96105e-06 4.49133e-06 4.02162e-06 </div><div class='del'>-    3.5519e-06 3.08218e-06 2.79099e-06 2.51281e-06 2.23463e-06 </div><div class='del'>-    1.95645e-06 1.67827e-06 1.40009e-06 1.12191e-06 1.01376e-06 </div><div class='del'>-    9.9375e-07 9.73741e-07 9.53733e-07 9.33724e-07 9.13715e-07 </div><div class='del'>-    8.93707e-07 8.73698e-07 8.5369e-07 8.33681e-07 8.13673e-07 </div><div class='del'>-    7.93664e-07 7.73655e-07 7.53647e-07 7.21781e-07 5.956e-07 </div><div class='del'>-    4.69419e-07 3.43239e-07 2.17058e-07 0.0284032 0.0374438 </div><div class='del'>-    -0.0157543 -0.0680497 0.0504768 0.0100294 0.00222261 0.000528697 </div><div class='del'>-    0.000132929 3.99489e-05 2.46066e-05 4.56327e-06 -6.54853e-06 </div><div class='del'>-    1.33783e-05 -3.68221e-05 -0.0724498 -0.0843663 -0.0792935 </div><div class='del'>-    -0.0406426 0.0200019 0.0426259 0.0220753 0.00668555 -0.000968483 </div><div class='del'>-    0.024662 0.0383437 0.0911513 0.087848 0.0602076 0.0390559 </div><div class='del'>-    0.0260573 0.0180444 0.012974 0.00985409 0.00788132 0.0064228 </div><div class='del'>-    0.005545 0.00453571 0.00364245 0.00310278 0.00270523 0.00236439 </div><div class='del'>-    0.0020945 0.00186808 0.00167493 0.00151731 0.00138594 0.00126945 </div><div class='del'>-    0.00116695 0.0010762 0.000996366 0.000928387 0.000864414 </div><div class='del'>-    0.000808258 0.000759574 0.000713865 0.000666712 0.000632716 </div><div class='del'>-    0.000601262 0.000572163 0.000543986 0.000515253 0.0004897 </div><div class='del'>-    0.000468112 0.000449313 0.000432981 0.000417911 0.000401307 </div><div class='del'>-    0.000382712 0.000366678 0.000355736 0.000349171 0.000335727 </div><div class='del'>-    0.000317091 0.000296086 0.000283543 0.000277366 0.000272233 </div><div class='del'>-    0.000267001 0.000263147 0.000256699 0.000250251 0.000243803 </div><div class='del'>-    0.000237355 0.000230907 0.000225424 0.000220247 0.000215069 </div><div class='del'>-    0.000209892 0.000204714 0.000200213 0.000196548 0.000192884 </div><div class='del'>-    0.00018922 0.000185556 0.000181892 0.000178228 0.000174564 </div><div class='del'>-    0.0001709 0.000167236 0.000163572 0.000160824 0.000158279 </div><div class='del'>-    0.000155733 0.000153187 0.000150641 0.000148095 0.000145549 </div><div class='del'>-    0.000143003 0.000140457 0.000137911 0.000135457 0.000133386 </div><div class='del'>-    0.000131315 0.000129245 0.000127174 0.000125103 0.000123032 </div><div class='del'>-    0.000120961 0.000118891 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[19].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 1.99994 2.0833 2.01627 2.42503 3.25769 3.62134 3.88827 </div><div class='del'>-    4.09688 4.26773 4.40529 4.51734 4.60827 4.68313 4.74346 </div><div class='del'>-    4.79302 4.72815 4.68959 4.70421 4.81316 5.01375 5.14493 </div><div class='del'>-    5.10305 5.0699 5.04484 5.03751 5.03348 5.02504 5.01799 5.01271 </div><div class='del'>-    5.00895 5.00628 5.0044 5.00309 5.00216 5.00151 5.00105 5.00073 </div><div class='del'>-    5.00051 5.00034 5.00023 5.00015 5.0001 5.00007 5.00003 4.99998 </div><div class='del'>-    4.99993 4.99993 4.99995 4.99999 5.00001 5.00003 5.00002 </div><div class='del'>-    5.00001 5 5 5 5 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.00017 5.17398 </div><div class='del'>-    4.94779 3.78508 1.52302 0.608808 0.244311 0.126053 0.0597175 </div><div class='del'>-    0.038422 0.0158174 0.00481338 0.00107847 0.000301256 0.000114861 </div><div class='del'>-    0.00059489 -0.118904 -0.147478 -0.158986 -0.080544 0.165361 </div><div class='del'>-    0.171378 0.0776087 0.0435738 0.0428235 0.0423755 0.0347695 </div><div class='del'>-    0.0225061 0.0155539 0.0121357 0.0107997 0.0103976 0.0124406 </div><div class='del'>-    0.016814 0.0167556 0.0149852 0.01459 0.0141182 0.0131934 </div><div class='del'>-    0.0120286 0.0108692 0.0097184 0.00855881 0.00744912 0.00643877 </div><div class='del'>-    0.00554044 0.00475165 0.00406535 0.00347158 0.00295981 0.00251995 </div><div class='del'>-    0.00214318 0.00182101 0.00154613 0.00131196 0.0011119 0.000941587 </div><div class='del'>-    0.000796999 0.000674582 0.000571283 0.000484276 0.000410649 </div><div class='del'>-    0.000347005 0.000292984 0.000246715 0.000208143 0.00017489 </div><div class='del'>-    0.000147412 0.000123854 0.000104332 8.77229e-05 7.40686e-05 </div><div class='del'>-    6.2637e-05 5.32e-05 4.53946e-05 3.88343e-05 3.31864e-05 </div><div class='del'>-    2.85905e-05 2.45725e-05 2.08671e-05 1.77301e-05 1.55911e-05 </div><div class='del'>-    1.40153e-05 1.29421e-05 1.18693e-05 1.09815e-05 1.03484e-05 </div><div class='del'>-    9.87664e-06 9.14446e-06 8.41228e-06 7.68011e-06 6.94793e-06 </div><div class='del'>-    6.21575e-06 5.48357e-06 4.7514e-06 4.38454e-06 4.04432e-06 </div><div class='del'>-    3.7041e-06 3.36388e-06 3.02366e-06 2.68344e-06 2.34322e-06 </div><div class='del'>-    2.15196e-06 2.03791e-06 1.92386e-06 1.80982e-06 1.69577e-06 </div><div class='del'>-    1.58173e-06 1.46768e-06 1.35363e-06 1.23959e-06 1.12554e-06 </div><div class='del'>-    1.0115e-06 8.9745e-07 7.83404e-07 6.69358e-07 4.76113e-07 </div><div class='del'>-    -3.47071e-07 -1.17025e-06 -1.99344e-06 -2.81662e-06 0.0783754 </div><div class='del'>-    0.0500262 -0.0659563 -0.120914 0.0815957 0.0154255 0.00347177 </div><div class='del'>-    0.000840357 0.000214582 6.54655e-05 3.91709e-05 8.07396e-06 </div><div class='del'>-    -4.44265e-07 1.74384e-05 -4.52725e-05 -0.119379 -0.147984 </div><div class='del'>-    -0.159247 -0.0824604 0.169014 0.177628 0.0758742 0.010558 </div><div class='del'>-    -0.0346506 -0.0710288 -0.0838952 -0.0599521 -0.034568 -0.0181615 </div><div class='del'>-    -0.00968034 -0.00547115 -0.00333511 -0.00232468 -0.00181159 </div><div class='del'>-    -0.00143841 -0.00116601 -0.000839755 -0.000569764 -0.000578683 </div><div class='del'>-    -0.000490551 -0.000411712 -0.000437859 -0.000408185 -0.000356644 </div><div class='del'>-    -0.000311332 -0.000269006 -0.000221396 -0.000210054 -0.0001923 </div><div class='del'>-    -0.000175122 -0.000161039 -0.0001428 -0.000126123 -0.000127893 </div><div class='del'>-    -8.14516e-05 -0.000120166 -0.000154909 -0.000112733 -8.40377e-05 </div><div class='del'>-    -7.11342e-05 -8.09538e-05 -9.77789e-05 -9.82402e-05 -7.73531e-05 </div><div class='del'>-    -5.28255e-05 -3.1096e-05 -1.87967e-05 -1.96552e-05 -4.16655e-05 </div><div class='del'>-    -5.77185e-05 -5.24142e-05 -2.83153e-05 -1.90012e-05 -1.54415e-05 </div><div class='del'>-    -2.52569e-05 -6.23747e-05 -0.000130543 -0.000149394 -0.000110886 </div><div class='del'>-    -4.35517e-05 -4.17084e-05 -3.98651e-05 -3.80218e-05 -3.61785e-05 </div><div class='del'>-    -3.43352e-05 -3.36249e-05 -3.32729e-05 -3.29208e-05 -3.25687e-05 </div><div class='del'>-    -3.22166e-05 -3.17143e-05 -3.10258e-05 -3.03372e-05 -2.96486e-05 </div><div class='del'>-    -2.89601e-05 -2.82715e-05 -2.75829e-05 -2.68944e-05 -2.62058e-05 </div><div class='del'>-    -2.55173e-05 -2.48287e-05 -2.43043e-05 -2.38159e-05 -2.33276e-05 </div><div class='del'>-    -2.28393e-05 -2.2351e-05 -2.18626e-05 -2.13743e-05 -2.0886e-05 </div><div class='del'>-    -2.03977e-05 -1.99093e-05 -1.945e-05 -1.91122e-05 -1.87744e-05 </div><div class='del'>-    -1.84366e-05 -1.80987e-05 -1.77609e-05 -1.74231e-05 -1.70853e-05 </div><div class='del'>-    -1.67474e-05 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[20].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 1.99724 2.17266 2.48439 3.15933 3.85231 4.38091 </div><div class='del'>-    4.69033 4.85034 4.92851 4.96453 4.98188 4.98736 4.991 4.99482 </div><div class='del'>-    4.9973 4.96422 4.89989 4.83907 4.83151 4.90868 5.04854 5.06104 </div><div class='del'>-    5.04571 5.03219 5.03025 5.02273 5.01707 5.0123 5.0087 5.00611 </div><div class='del'>-    5.00429 5.00301 5.00211 5.00148 5.00103 5.00072 5.0005 5.00035 </div><div class='del'>-    5.00024 5.00016 5.00011 5.00007 5.00005 5.00003 5.00001 </div><div class='del'>-    4.99999 4.99998 4.99998 4.99998 4.99998 4.99998 4.99999 </div><div class='del'>-    5 5 5.00001 5.00001 5.00002 5.00002 5.00002 5.00002 5.00002 </div><div class='del'>-    5.00002 5.00001 5.00001 5 5 5 5 5 5 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5 5 5 5 </div><div class='del'>-    5 5 4.99981 5.10081 5.10903 4.98404 5.00999 5.14946 4.36501 </div><div class='del'>-    2.23938 0.325144 0.00660272 -0.0102186 -0.0082401 -0.00556785 </div><div class='del'>-    -0.00374178 -0.00264763 -0.00202823 -0.0182241 -0.0169551 </div><div class='del'>-    -0.0150395 0.0103736 0.0877592 0.104382 0.0515938 0.0373818 </div><div class='del'>-    0.0411547 0.0397009 0.0308946 0.0205793 0.0154037 0.0129191 </div><div class='del'>-    0.0119327 0.011527 0.0124295 0.0161152 0.0161076 0.0145391 </div><div class='del'>-    0.0144541 0.0139287 0.0129215 0.0117239 0.0105795 0.00942983 </div><div class='del'>-    0.00827423 0.00718354 0.00619954 0.00532868 0.00456631 0.00390448 </div><div class='del'>-    0.00333254 0.00284003 0.00241714 0.00205524 0.0017458 0.00148202 </div><div class='del'>-    0.00125739 0.0010655 0.000902213 0.000763611 0.000646279 </div><div class='del'>-    0.000547291 0.000463934 0.000393401 0.000332424 0.000280655 </div><div class='del'>-    0.000236328 0.000199386 0.000167536 0.000141218 0.000118654 </div><div class='del'>-    9.99559e-05 8.40479e-05 7.09694e-05 6.00188e-05 5.09786e-05 </div><div class='del'>-    4.3502e-05 3.72191e-05 3.18114e-05 2.74071e-05 2.35539e-05 </div><div class='del'>-    1.99967e-05 1.69871e-05 1.49449e-05 1.3451e-05 1.24492e-05 </div><div class='del'>-    1.14256e-05 1.05669e-05 9.94487e-06 9.47514e-06 8.77318e-06 </div><div class='del'>-    8.07123e-06 7.36927e-06 6.66731e-06 5.96536e-06 5.2634e-06 </div><div class='del'>-    4.56144e-06 4.23044e-06 3.92649e-06 3.62254e-06 3.31858e-06 </div><div class='del'>-    3.01463e-06 2.71068e-06 2.40673e-06 2.23063e-06 2.12082e-06 </div><div class='del'>-    2.01102e-06 1.90121e-06 1.7914e-06 1.68159e-06 1.57178e-06 </div><div class='del'>-    1.46197e-06 1.35216e-06 1.24235e-06 1.13255e-06 1.02274e-06 </div><div class='del'>-    9.12929e-07 8.0312e-07 6.33171e-07 -1.51288e-08 -6.63428e-07 </div><div class='del'>-    -1.31173e-06 -1.96003e-06 0.0437517 0.0265689 -0.0515377 </div><div class='del'>-    -0.0658688 0.010727 -0.000511921 -8.36924e-05 2.13278e-05 </div><div class='del'>-    1.45207e-05 4.54862e-06 -6.14726e-06 2.0062e-06 1.02709e-06 </div><div class='del'>-    1.4152e-05 -3.08225e-05 -0.0166501 -0.0157139 -0.013957 </div><div class='del'>-    0.0107537 0.0873717 0.111302 0.0454129 -0.00530142 -0.0468336 </div><div class='del'>-    -0.0790063 -0.0826944 -0.0534753 -0.0288705 -0.0149009 -0.00801592 </div><div class='del'>-    -0.0046342 -0.00291835 -0.00213019 -0.00170055 -0.001352 </div><div class='del'>-    -0.00110593 -0.000742655 -0.000532042 -0.000544742 -0.000479206 </div><div class='del'>-    -0.000407307 -0.000403575 -0.000366209 -0.000324161 -0.000286183 </div><div class='del'>-    -0.000247579 -0.000214281 -0.000203435 -0.000186896 -0.000171033 </div><div class='del'>-    -0.00015779 -0.000145259 -0.000128069 -0.000122647 -9.89398e-05 </div><div class='del'>-    -0.000114926 -0.000132195 -0.000107872 -8.91015e-05 -7.87996e-05 </div><div class='del'>-    -8.14061e-05 -8.9098e-05 -8.83368e-05 -7.6122e-05 -6.14668e-05 </div><div class='del'>-    -4.75402e-05 -3.81855e-05 -3.69696e-05 -4.78656e-05 -5.61346e-05 </div><div class='del'>-    -5.35007e-05 -4.1459e-05 -3.35411e-05 -2.52374e-05 -2.37479e-05 </div><div class='del'>-    -4.6406e-05 -9.41884e-05 -0.000109222 -8.52676e-05 -4.25166e-05 </div><div class='del'>-    -4.10125e-05 -3.95085e-05 -3.80045e-05 -3.65004e-05 -3.49964e-05 </div><div class='del'>-    -3.41627e-05 -3.3541e-05 -3.29193e-05 -3.22976e-05 -3.16758e-05 </div><div class='del'>-    -3.10334e-05 -3.03653e-05 -2.96971e-05 -2.9029e-05 -2.83609e-05 </div><div class='del'>-    -2.76928e-05 -2.70246e-05 -2.63565e-05 -2.56884e-05 -2.50203e-05 </div><div class='del'>-    -2.43521e-05 -2.38716e-05 -2.34324e-05 -2.29932e-05 -2.25539e-05 </div><div class='del'>-    -2.21147e-05 -2.16755e-05 -2.12362e-05 -2.0797e-05 -2.03578e-05 </div><div class='del'>-    -1.99186e-05 -1.95079e-05 -1.9217e-05 -1.8926e-05 -1.8635e-05 </div><div class='del'>-    -1.8344e-05 -1.8053e-05 -1.7762e-05 -1.74711e-05 -1.71801e-05 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[21].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.86175 1.73273 1.42016 1.02483 0.944013 0.274107 0.0823742 </div><div class='del'>-    0.0379366 0.020816 0.0132952 0.00955525 0.00717008 0.00592286 </div><div class='del'>-    0.00437379 0.00383557 0.00273694 -0.0037467 -0.0054191 -0.00131454 </div><div class='del'>-    0.0112179 0.0133918 0.00519747 -0.00260113 -0.00252847 -0.00181292 </div><div class='del'>-    0.000183398 -0.000667607 -0.000750747 -0.000594314 -0.000433904 </div><div class='del'>-    -0.000308985 -0.000217858 -0.000152926 -0.000107454 -7.54076e-05 </div><div class='del'>-    -5.2675e-05 -3.66299e-05 -2.54341e-05 -1.75095e-05 -1.18848e-05 </div><div class='del'>-    -7.97289e-06 -5.30239e-06 -3.53615e-06 -2.38504e-06 -2.40158e-06 </div><div class='del'>-    -3.84485e-06 -5.29435e-06 -2.57099e-06 1.95189e-06 3.55083e-06 </div><div class='del'>-    2.06179e-06 5.72753e-07 3.30469e-07 3.40296e-07 3.60221e-07 </div><div class='del'>-    4.86081e-07 6.1194e-07 7.37799e-07 8.63659e-07 9.89518e-07 </div><div class='del'>-    9.21274e-07 7.22275e-07 5.23276e-07 3.24277e-07 1.25278e-07 </div><div class='del'>-    -5.59467e-08 -9.03265e-08 -1.24706e-07 -1.59086e-07 -1.93466e-07 </div><div class='del'>-    -2.27846e-07 -2.62226e-07 -2.96605e-07 -3.30985e-07 -3.65365e-07 </div><div class='del'>-    -3.99745e-07 -4.24266e-07 -3.82163e-07 -3.40061e-07 -2.97959e-07 </div><div class='del'>-    -2.55857e-07 -2.13755e-07 -1.71652e-07 -1.2955e-07 -8.7448e-08 </div><div class='del'>-    -4.53457e-08 -3.24353e-09 3.76901e-08 7.19937e-08 1.06297e-07 </div><div class='del'>-    1.40601e-07 1.74904e-07 2.09208e-07 2.43512e-07 2.77815e-07 </div><div class='del'>-    3.12119e-07 3.46422e-07 3.80726e-07 4.04507e-07 3.77191e-07 </div><div class='del'>-    3.49876e-07 3.22561e-07 2.95246e-07 2.67931e-07 2.40616e-07 </div><div class='del'>-    2.13301e-07 1.85986e-07 1.58671e-07 1.31356e-07 1.04041e-07 </div><div class='del'>-    7.67256e-08 4.94105e-08 2.20955e-08 -5.21962e-09 -3.25347e-08 </div><div class='del'>-    -5.98498e-08 -8.71649e-08 -1.1448e-07 -1.41795e-07 -1.6911e-07 </div><div class='del'>-    7.87893e-06 0.0114592 -0.0245712 -0.111637 0.0961324 1.61168 </div><div class='del'>-    3.22343 4.20442 4.53535 4.83834 4.95464 4.98874 4.99746 </div><div class='del'>-    4.99883 4.99948 4.99815 4.98431 4.99298 4.99718 5.01948 </div><div class='del'>-    5.04749 5.008 4.98243 4.98985 4.99781 4.99887 4.99679 4.99616 </div><div class='del'>-    4.99743 4.99859 4.99936 4.99972 5.00058 5.00123 5.0002 4.99945 </div><div class='del'>-    4.99983 4.9998 4.99966 4.99958 4.99956 4.99956 4.99956 4.99958 </div><div class='del'>-    4.99961 4.99965 4.99969 4.99973 4.99977 4.9998 4.99983 4.99985 </div><div class='del'>-    4.99987 4.99989 4.99991 4.99992 4.99993 4.99994 4.99995 </div><div class='del'>-    4.99996 4.99997 4.99997 4.99998 4.99998 4.99998 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 </div><div class='del'>-    5.00002 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5 5 5 4.99999 4.99998 4.99997 4.99996 5.01454 </div><div class='del'>-    4.99566 4.96796 4.99819 5.03232 5.00034 4.99867 4.99937 </div><div class='del'>-    4.99977 4.99992 4.99997 4.99999 5.00001 5.00021 4.99974 </div><div class='del'>-    4.98462 4.99301 4.99723 5.01936 5.04807 5.00929 4.9789 4.97876 </div><div class='del'>-    4.98244 4.9863 4.99575 5.0069 5.00863 5.00624 5.00357 5.0019 </div><div class='del'>-    5.00098 5.00048 5.00025 5.00016 5.00011 5.00013 5.00009 </div><div class='del'>-    4.99982 4.99994 5.00005 4.99994 4.99988 4.99989 4.99997 </div><div class='del'>-    5.00003 5.00005 5.00002 5.00001 5.00001 5.00001 4.99993 </div><div class='del'>-    4.99999 5 5.00021 4.99997 4.99981 5 5.00009 5.0001 5.00001 </div><div class='del'>-    4.99991 4.9999 5 5.00011 5.00017 5.00018 5.00018 5.00014 </div><div class='del'>-    5.00007 4.99999 4.9999 4.9999 5.00001 5.00016 5.00014 4.99999 </div><div class='del'>-    4.99993 4.99999 5.00009 5.00007 5.00006 5.00004 5.00003 </div><div class='del'>-    5.00001 5.00001 5 4.99999 4.99998 4.99997 4.99997 4.99997 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99999 4.99999 4.99999 </div><div class='del'>-    5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00002 </div><div class='del'>-    5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5 5 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[22].set(&lt;&lt;-'EOD')</div><div class='del'>-    7.10441e-10 0.00107105 0.000637109 -0.00236346 -0.018079 </div><div class='del'>-    -0.0120077 -0.00217059 0.00266679 0.00403383 0.00403836 </div><div class='del'>-    0.00356705 0.00303303 0.00244716 0.00198586 0.0016855 0.00136497 </div><div class='del'>-    -3.96022e-05 -0.000367409 -3.77079e-05 0.00194085 0.00506964 </div><div class='del'>-    -0.0400214 -0.0402572 0.0524434 0.286234 0.803011 1.44795 </div><div class='del'>-    2.02473 2.54768 3.02748 3.4415 3.78287 4.09667 4.35152 4.53987 </div><div class='del'>-    4.67614 4.77407 4.84319 4.89227 4.92702 4.95119 4.96764 </div><div class='del'>-    4.97846 4.98557 4.98982 4.99209 4.99371 4.99569 4.99727 </div><div class='del'>-    4.99802 4.99834 4.99867 4.99892 4.99915 4.99936 4.99939 </div><div class='del'>-    4.99943 4.99946 4.9995 4.99953 4.99957 4.9996 4.99963 4.99967 </div><div class='del'>-    4.9997 4.99973 4.99974 4.99975 4.99976 4.99977 4.99978 4.9998 </div><div class='del'>-    4.99981 4.99982 4.99983 4.99984 4.99985 4.99986 4.99986 </div><div class='del'>-    4.99986 4.99987 4.99987 4.99988 4.99988 4.99989 4.99989 </div><div class='del'>-    4.9999 4.9999 4.9999 4.9999 4.99991 4.99991 4.99991 4.99991 </div><div class='del'>-    4.99992 4.99992 4.99992 4.99992 4.99993 4.99993 4.99993 </div><div class='del'>-    4.99993 4.99993 4.99993 4.99993 4.99993 4.99994 4.99994 </div><div class='del'>-    4.99994 4.99994 4.99994 4.99994 4.99994 4.99994 4.99995 </div><div class='del'>-    4.99995 4.99995 4.99995 4.99995 4.99995 4.99995 5.00145 </div><div class='del'>-    5.00659 5.01209 5.01931 5.00279 4.99273 4.99217 4.99295 </div><div class='del'>-    4.99471 4.99594 4.99696 4.9978 4.99844 4.99891 4.99924 4.99635 </div><div class='del'>-    4.99699 4.99813 5.00068 5.00307 5.0588 4.96365 4.54012 3.6307 </div><div class='del'>-    2.35176 1.0322 0.354379 0.115986 0.0435668 0.0245112 0.020786 </div><div class='del'>-    0.0164656 0.0118409 0.00849698 0.00597078 0.0040105 0.0026076 </div><div class='del'>-    0.0016597 0.00118185 0.00121067 0.00153587 0.00174836 0.00136519 </div><div class='del'>-    -0.000189116 -0.00315555 -0.00646603 -0.00898042 -0.010203 </div><div class='del'>-    -0.0110896 -0.0123764 -0.00953841 -0.00225795 0.000818314 </div><div class='del'>-    0.00152252 0.00150269 0.00119025 0.000767068 0.000308852 </div><div class='del'>-    -3.79272e-05 -0.00019691 -0.000186642 -9.73653e-05 -8.49784e-06 </div><div class='del'>-    2.04147e-05 -9.91086e-06 -1.55959e-05 -1.80499e-05 -1.77097e-05 </div><div class='del'>-    -1.51548e-05 -1.1978e-05 -9.84916e-06 -1.29728e-05 -1.67235e-05 </div><div class='del'>-    -1.74153e-05 -1.39958e-05 -5.92272e-06 -8.08216e-06 -1.53077e-05 </div><div class='del'>-    -2.92531e-05 -3.91049e-05 -2.98935e-05 -7.32122e-06 3.18534e-05 </div><div class='del'>-    4.39134e-05 4.18753e-05 3.22759e-05 1.86766e-05 1.58432e-05 </div><div class='del'>-    1.30098e-05 1.01765e-05 7.34312e-06 4.50975e-06 1.67639e-06 </div><div class='del'>-    -1.15697e-06 -1.23877e-06 -1.11991e-06 -1.00106e-06 -8.82208e-07 </div><div class='del'>-    -7.63355e-07 -6.44502e-07 -5.2565e-07 -4.29318e-07 -3.44661e-07 </div><div class='del'>-    -2.60004e-07 -1.75347e-07 -9.06904e-08 -6.03349e-09 7.86234e-08 </div><div class='del'>-    1.6328e-07 2.47937e-07 3.32594e-07 4.17251e-07 5.01908e-07 </div><div class='del'>-    5.86565e-07 6.71222e-07 7.36123e-07 6.43886e-07 5.5165e-07 </div><div class='del'>-    4.59414e-07 3.67178e-07 0.000334759 -4.60833e-05 -0.00106139 </div><div class='del'>-    -0.00166624 0.000859563 0.00102606 0.00410037 0.00419931 </div><div class='del'>-    0.00518997 0.00459791 0.00503125 0.00523877 0.00452158 0.00339924 </div><div class='del'>-    0.00233399 0.000876915 0.000546439 0.000444299 0.000983968 </div><div class='del'>-    0.00119304 -0.0429422 -0.0403983 0.0534896 0.288013 0.807345 </div><div class='del'>-    1.44247 2.03448 2.57021 3.05049 3.47332 3.8131 4.1009 4.34677 </div><div class='del'>-    4.53512 4.67127 4.76531 4.82526 4.86593 4.89586 4.91904 </div><div class='del'>-    4.93806 4.95348 4.96597 4.97629 4.9843 4.98983 4.99335 4.9957 </div><div class='del'>-    4.99741 4.99864 4.99946 4.99994 5.00047 5.00073 5.00086 </div><div class='del'>-    5.00092 5.00094 5.00091 5.00087 5.00081 5.00074 5.00067 </div><div class='del'>-    5.00059 5.00052 5.00046 5.0004 5.00034 5.0003 5.00026 5.00022 </div><div class='del'>-    5.00019 5.00016 5.00014 5.00012 5.0001 5.00009 5.00007 5.00006 </div><div class='del'>-    5.00006 5.00005 5.00004 5.00004 5.00004 5.00003 5.00003 </div><div class='del'>-    5.00003 5.00002 5.00002 5.00002 5.00002 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5 5 5 5 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 5 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00002 5.00002 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[23].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.00284 5.01266 5.01895 4.98936 4.99575 4.99217 4.99545 </div><div class='del'>-    4.99775 4.99894 4.99946 4.99968 4.99975 4.99977 4.99986 </div><div class='del'>-    4.9999 4.99528 4.99808 5.00039 5.00392 5.00512 4.99985 4.99863 </div><div class='del'>-    4.99942 4.99992 5.00017 4.99897 4.99803 4.99784 4.99739 </div><div class='del'>-    4.99883 5.00365 5.00298 5.00133 5.00048 5.00019 5.00008 </div><div class='del'>-    5.00005 5.00004 5.00003 5.00002 5.00002 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5 5 4.99999 4.99997 4.99995 4.99996 </div><div class='del'>-    4.99998 5 5.00001 5.00001 5.00002 5.00002 5.00003 5.00003 </div><div class='del'>-    5.00002 5.00002 5.00001 5.00001 5 5 5 5 5 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00002 </div><div class='del'>-    5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5 5 5 5 5 5 5 5.00217 5.00108 4.99547 4.99658 5.00667 </div><div class='del'>-    4.99641 4.99532 4.99938 5.00328 5.00222 5.00114 5.00052 </div><div class='del'>-    5.00024 5.00011 5.00009 4.99285 4.99591 4.99897 5.00403 </div><div class='del'>-    5.00786 5.00318 4.99942 4.9992 4.99949 5.001 5.00408 5.00319 </div><div class='del'>-    5.00063 4.99995 5.00014 4.99982 4.99832 4.99838 4.99865 </div><div class='del'>-    4.99912 4.99836 4.99735 4.99606 4.99814 5.00958 5.02973 </div><div class='del'>-    5.05293 5.06103 4.99342 4.80726 4.50744 4.07509 3.41358 </div><div class='del'>-    2.37924 1.03194 0.261552 0.142392 0.0904482 0.0555071 0.0322869 </div><div class='del'>-    0.018289 0.0113802 0.00875182 0.00757055 0.00629906 0.00523 </div><div class='del'>-    0.00403349 0.0031953 0.00280864 0.00286119 0.00250389 0.00202815 </div><div class='del'>-    0.001723 0.00147312 0.0012411 0.00104401 0.000886204 0.000758277 </div><div class='del'>-    0.000651915 0.00056348 0.000487966 0.000424048 0.000365613 </div><div class='del'>-    0.000308178 0.000258725 0.000228061 0.000207976 0.000198491 </div><div class='del'>-    0.00018518 0.000172716 0.000163197 0.000155007 0.000141734 </div><div class='del'>-    0.000128461 0.000115188 0.000101915 8.86417e-05 7.53686e-05 </div><div class='del'>-    6.20956e-05 5.69164e-05 5.23275e-05 4.77385e-05 4.31495e-05 </div><div class='del'>-    3.85605e-05 3.39716e-05 2.93826e-05 2.69449e-05 2.56224e-05 </div><div class='del'>-    2.42999e-05 2.29774e-05 2.16549e-05 2.03324e-05 1.90099e-05 </div><div class='del'>-    1.76873e-05 1.63648e-05 1.50423e-05 1.37198e-05 1.23973e-05 </div><div class='del'>-    1.10748e-05 9.75232e-06 8.48447e-06 7.65129e-06 6.81811e-06 </div><div class='del'>-    5.98494e-06 5.15176e-06 0.00056893 -0.00787906 -0.0217381 </div><div class='del'>-    -0.0370066 -0.00770505 0.00659312 0.00975477 0.00949456 </div><div class='del'>-    0.00777552 0.00655645 0.00568776 0.00508782 0.00458121 0.00410187 </div><div class='del'>-    0.00365665 0.0015121 0.00160863 0.00263181 0.00638941 0.00772607 </div><div class='del'>-    0.00225583 0.0010843 0.000882939 0.000801563 0.00075632 </div><div class='del'>-    0.000554992 0.000435131 0.0003474 0.000217667 0.000491602 </div><div class='del'>-    0.0012267 0.00250446 0.000212058 -0.0174972 -0.0527527 -0.0479071 </div><div class='del'>-    0.194908 1.45838 3.40677 4.49242 4.86894 4.97215 5.01218 </div><div class='del'>-    5.04342 5.06228 5.03069 4.87169 4.57056 4.11523 3.38264 </div><div class='del'>-    2.19691 0.715839 0.172818 0.102162 0.0627162 0.0363388 0.020289 </div><div class='del'>-    0.0119414 0.00826608 0.0066417 0.00549092 0.00492505 0.00439443 </div><div class='del'>-    0.0037156 0.00306471 0.00247451 0.00195965 0.0014822 0.0010815 </div><div class='del'>-    0.000904464 0.0010514 0.00152308 0.00120752 0.000228447 </div><div class='del'>-    -0.00102833 -0.00116644 -0.00042067 4.78758e-05 5.09599e-05 </div><div class='del'>-    -4.45756e-05 -3.22966e-06 3.81163e-05 7.94622e-05 0.000120808 </div><div class='del'>-    0.000162154 0.000161895 0.000148481 0.000135068 0.000121654 </div><div class='del'>-    0.000108241 9.81453e-05 9.2164e-05 8.61827e-05 8.02014e-05 </div><div class='del'>-    7.42201e-05 6.82388e-05 6.22576e-05 5.62763e-05 5.0295e-05 </div><div class='del'>-    4.43137e-05 3.83324e-05 3.54323e-05 3.321e-05 3.09877e-05 </div><div class='del'>-    2.87654e-05 2.65431e-05 2.43209e-05 2.20986e-05 1.98763e-05 </div><div class='del'>-    1.7654e-05 1.54317e-05 1.34612e-05 1.25441e-05 1.1627e-05 </div><div class='del'>-    1.07099e-05 9.79276e-06 8.87564e-06 7.95851e-06 7.04139e-06 </div><div class='del'>-    6.12427e-06 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[24].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.01099 5.00866 4.97845 4.92369 4.9273 4.97413 4.9929 </div><div class='del'>-    4.99826 4.99958 4.99978 5.00005 4.99968 4.99959 5.00014 </div><div class='del'>-    4.99979 4.99914 4.99982 5.00023 5.00295 5.00664 4.99854 </div><div class='del'>-    4.99647 5.00438 5.01722 5.03681 5.04766 5.04799 5.04867 </div><div class='del'>-    5.04873 5.04685 5.04413 5.0367 5.02505 5.01726 5.01183 5.00806 </div><div class='del'>-    5.00549 5.00371 5.00246 5.00162 5.00105 5.00069 5.00045 </div><div class='del'>-    5.00031 5.00024 5.00019 5.00012 5.00007 5.00004 5.00001 </div><div class='del'>-    4.99998 4.99999 4.99999 5 5.00001 5.00001 5.00002 5.00002 </div><div class='del'>-    5.00003 5.00003 5.00003 5.00002 5.00002 5.00001 5.00001 </div><div class='del'>-    5.00001 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    5 5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5.00418 4.99953 4.99152 </div><div class='del'>-    4.99807 5.00497 5.00112 5.00055 5.00038 5.00018 5.00006 </div><div class='del'>-    5.00006 5.00007 5.00006 5.00004 5.00004 4.99853 4.99945 </div><div class='del'>-    4.99998 5.00304 5.00935 5.00742 4.99181 4.97421 4.93603 </div><div class='del'>-    4.8853 4.8927 4.93984 4.97458 4.99039 4.99614 4.99801 4.99851 </div><div class='del'>-    4.99869 4.99924 5.00108 5.00181 5.00119 5.00059 5.00031 </div><div class='del'>-    5.00022 5.00018 5.00011 5.00001 5.00006 4.99981 4.99977 </div><div class='del'>-    4.99982 5.00012 4.99993 5.00008 5.00043 5.00048 5.00024 </div><div class='del'>-    5.00008 4.99984 4.99993 5.00011 4.99996 4.9998 4.99977 4.9998 </div><div class='del'>-    4.99993 5.00008 5.00011 5.00002 4.99995 4.99989 4.99993 </div><div class='del'>-    5 5.00007 5.00009 4.99994 4.99977 4.9997 4.99975 4.99996 </div><div class='del'>-    4.99996 4.99988 4.9997 4.99952 4.9995 4.99956 4.99973 4.99988 </div><div class='del'>-    5.00005 5.00025 5.00042 5.00036 5.00031 5.00025 5.0002 5.00014 </div><div class='del'>-    5.00009 5.00003 5.00002 5.00001 5.00001 5 4.99999 4.99998 </div><div class='del'>-    4.99998 4.99997 4.99998 4.99998 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 5.00284 </div><div class='del'>-    5.00442 5.00381 4.98997 4.99092 5.00733 5.07791 4.98237 </div><div class='del'>-    4.86434 4.76835 4.74067 4.79278 4.85094 4.90068 4.93603 </div><div class='del'>-    4.95698 4.96984 4.97856 4.98869 4.99904 5.0005 4.99524 5.00181 </div><div class='del'>-    5.01878 5.05177 5.07986 4.98917 4.56217 3.68 2.3539 1.18541 </div><div class='del'>-    0.505772 0.221044 0.115287 0.0760938 0.0589194 0.0476784 </div><div class='del'>-    0.0457213 0.0412911 0.033889 0.0259741 0.0191452 0.0139018 </div><div class='del'>-    0.0100235 0.00711788 0.00497657 0.00349368 0.00250021 0.00176179 </div><div class='del'>-    0.00121843 0.000838368 0.000582711 0.000423458 0.000294608 </div><div class='del'>-    0.000201251 0.000133748 8.6227e-05 5.44252e-05 3.30514e-05 </div><div class='del'>-    1.93926e-05 1.09814e-05 5.29857e-06 1.92247e-06 3.08708e-07 </div><div class='del'>-    -3.74311e-07 -6.11121e-07 -7.27807e-07 -4.87604e-07 -4.80493e-07 </div><div class='del'>-    -9.15925e-07 -2.03774e-06 -4.01128e-06 -2.46644e-06 2.10626e-06 </div><div class='del'>-    8.22422e-06 1.04922e-05 9.83047e-06 7.27106e-06 3.29654e-06 </div><div class='del'>-    -2.06736e-06 -2.18019e-06 -2.29303e-06 -2.40586e-06 -2.51869e-06 </div><div class='del'>-    -2.63153e-06 -2.24615e-06 -1.70325e-06 -1.16036e-06 -6.17468e-07 </div><div class='del'>-    -7.45754e-08 2.45198e-07 2.88285e-07 3.31373e-07 3.7446e-07 </div><div class='del'>-    4.17548e-07 4.60635e-07 5.03723e-07 5.4681e-07 5.89898e-07 </div><div class='del'>-    6.32985e-07 6.76073e-07 6.19054e-07 5.4001e-07 4.60967e-07 </div><div class='del'>-    3.81923e-07 3.02879e-07 2.23836e-07 1.44792e-07 6.57488e-08 </div><div class='del'>-    -1.32948e-08 -9.23383e-08 -1.6698e-07 -2.23206e-07 -2.79432e-07 </div><div class='del'>-    -3.35658e-07 -3.91884e-07 -4.48109e-07 -5.04335e-07 -5.60561e-07 </div><div class='del'>-    -6.16787e-07 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[25].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.34824 1.35838 1.36465 1.34675 1.29167 1.23161 1.2201 1.2185 </div><div class='del'>-    1.2181 1.21798 1.21793 1.21788 1.21785 1.21782 1.21779 1.21776 </div><div class='del'>-    1.21655 1.21656 1.21669 1.21871 1.22421 1.22247 1.21858 </div><div class='del'>-    1.2228 1.23803 1.27737 1.10647 0.395248 0.0600669 0.027687 </div><div class='del'>-    0.0192374 0.015425 0.0130881 0.00977445 0.00696598 0.00491122 </div><div class='del'>-    0.00341952 0.00237078 0.00162339 0.00109178 0.000726647 </div><div class='del'>-    0.000478886 0.00031568 0.000207902 0.000143494 0.000109768 </div><div class='del'>-    8.62987e-05 5.69775e-05 3.36547e-05 2.30356e-05 1.86108e-05 </div><div class='del'>-    1.41861e-05 1.08293e-05 7.68835e-06 4.79593e-06 4.51019e-06 </div><div class='del'>-    4.22444e-06 3.9387e-06 3.65295e-06 3.36721e-06 3.04559e-06 </div><div class='del'>-    2.69981e-06 2.35403e-06 2.00825e-06 1.66247e-06 1.34508e-06 </div><div class='del'>-    1.26225e-06 1.17941e-06 1.09657e-06 1.01373e-06 9.30893e-07 </div><div class='del'>-    8.48054e-07 7.65216e-07 6.82378e-07 5.9954e-07 5.16702e-07 </div><div class='del'>-    4.37489e-07 3.82774e-07 3.2806e-07 2.73346e-07 2.18632e-07 </div><div class='del'>-    1.63917e-07 1.09203e-07 5.4489e-08 -2.2523e-10 -5.49395e-08 </div><div class='del'>-    -1.09654e-07 -1.52862e-07 -1.3079e-07 -1.08718e-07 -8.6646e-08 </div><div class='del'>-    -6.45739e-08 -4.25019e-08 -2.04298e-08 1.64229e-09 2.37144e-08 </div><div class='del'>-    4.57864e-08 6.78585e-08 8.71693e-08 9.30725e-08 9.89758e-08 </div><div class='del'>-    1.04879e-07 1.10782e-07 1.16685e-07 1.22589e-07 1.28492e-07 </div><div class='del'>-    1.34395e-07 1.40298e-07 1.46201e-07 1.52105e-07 1.58008e-07 </div><div class='del'>-    1.63911e-07 1.69814e-07 1.75718e-07 1.81621e-07 1.87524e-07 </div><div class='del'>-    1.93427e-07 1.9933e-07 2.05234e-07 2.11137e-07 2.19788e-07 </div><div class='del'>-    0.000393944 -0.000218983 -0.00105784 0.00172403 -0.00027134 </div><div class='del'>-    -0.000204147 8.79968e-06 5.93762e-05 5.83554e-05 4.13815e-05 </div><div class='del'>-    3.71369e-05 3.03372e-05 2.25336e-05 1.5986e-05 1.07284e-05 </div><div class='del'>-    -7.5239e-05 5.60593e-05 6.97571e-05 0.000667617 0.000960856 </div><div class='del'>-    0.00131749 -0.00759564 -0.0217897 -0.0450321 -0.076646 -0.128569 </div><div class='del'>-    -0.186391 -0.202175 -0.206953 -0.2082 -0.208416 -0.208669 </div><div class='del'>-    -0.208934 -0.209111 -0.209234 -0.209329 -0.209389 -0.209416 </div><div class='del'>-    -0.2094 -0.209329 -0.20926 -0.209204 -0.209208 -0.209285 </div><div class='del'>-    -0.209454 -0.209641 -0.20977 -0.209811 -0.209833 -0.209887 </div><div class='del'>-    -0.209653 -0.209127 -0.208893 -0.208811 -0.208777 -0.208758 </div><div class='del'>-    -0.208747 -0.20874 -0.208726 -0.208697 -0.208657 -0.208611 </div><div class='del'>-    -0.208565 -0.208524 -0.208488 -0.208451 -0.208412 -0.208373 </div><div class='del'>-    -0.208333 -0.208294 -0.208256 -0.208219 -0.208183 -0.208145 </div><div class='del'>-    -0.208107 -0.208066 -0.208029 -0.207993 -0.207959 -0.207923 </div><div class='del'>-    -0.207883 -0.207838 -0.207789 -0.207747 -0.20771 -0.207675 </div><div class='del'>-    -0.207642 -0.207605 -0.207568 -0.207531 -0.207494 -0.207457 </div><div class='del'>-    -0.20742 -0.207383 -0.207346 -0.207308 -0.207271 -0.207233 </div><div class='del'>-    -0.207196 -0.207158 -0.207121 -0.207084 -0.207046 -0.207009 </div><div class='del'>-    -0.206972 -0.206935 -0.206898 -0.206861 -0.206823 -0.206786 </div><div class='del'>-    -0.206749 -0.206712 -0.206675 -0.206638 -0.2066 -0.206563 </div><div class='del'>-    -0.206526 -0.206489 -0.206452 -0.206415 -0.203384 -0.20015 </div><div class='del'>-    -0.196872 -0.205024 -0.210727 -0.206779 -0.0685263 0.586138 </div><div class='del'>-    1.4665 2.22945 2.77554 3.076 3.24926 3.34515 3.40164 3.43006 </div><div class='del'>-    3.43713 3.43075 3.42886 3.4384 3.46567 3.49025 3.51287 3.53821 </div><div class='del'>-    3.57841 3.39846 2.80753 2.22947 1.7549 1.30429 0.707786 </div><div class='del'>-    0.303206 0.131352 0.0671706 0.0429955 0.032461 0.0257161 </div><div class='del'>-    0.0239521 0.0217397 0.0179705 0.0138745 0.0102813 0.00749643 </div><div class='del'>-    0.0054328 0.00386817 0.0027004 0.00189442 0.00135552 0.000954715 </div><div class='del'>-    0.000659981 0.000453435 0.000313993 0.000231347 0.000159665 </div><div class='del'>-    0.000108122 7.10528e-05 4.50233e-05 2.77892e-05 1.62765e-05 </div><div class='del'>-    8.9893e-06 4.5471e-06 1.54614e-06 -1.6542e-07 -8.68508e-07 </div><div class='del'>-    -1.04369e-06 -9.63086e-07 -8.44294e-07 -6.57339e-07 -7.35885e-07 </div><div class='del'>-    -9.80056e-07 -1.39772e-06 -2.10199e-06 -1.37474e-06 6.13269e-07 </div><div class='del'>-    3.3028e-06 4.60941e-06 4.91053e-06 4.14186e-06 2.45258e-06 </div><div class='del'>-    -8.7388e-09 -3.59647e-07 -7.10554e-07 -1.06146e-06 -1.41237e-06 </div><div class='del'>-    -1.76328e-06 -1.63073e-06 -1.34534e-06 -1.05995e-06 -7.74561e-07 </div><div class='del'>-    -4.8917e-07 -2.95733e-07 -2.16326e-07 -1.3692e-07 -5.75135e-08 </div><div class='del'>-    2.18929e-08 1.01299e-07 1.80706e-07 2.60112e-07 3.39519e-07 </div><div class='del'>-    4.18925e-07 4.98332e-07 4.83984e-07 4.4901e-07 4.14035e-07 </div><div class='del'>-    3.79061e-07 3.44087e-07 3.09112e-07 2.74138e-07 2.39163e-07 </div><div class='del'>-    2.04189e-07 1.69215e-07 1.26002e-07 4.83213e-08 -2.9359e-08 </div><div class='del'>-    -1.07039e-07 -1.8472e-07 -2.624e-07 -3.4008e-07 -4.1776e-07 </div><div class='del'>-    -4.95441e-07 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[26].set(&lt;&lt;-'EOD')</div><div class='del'>-    7.10441e-10 0.000309731 -0.000308186 -0.001694 -0.00360784 </div><div class='del'>-    8.40909e-05 0.00203175 0.0012896 0.000596548 0.000277191 </div><div class='del'>-    0.000161134 0.000120439 8.4915e-05 9.49929e-05 6.18812e-05 </div><div class='del'>-    1.65433e-05 1.89682e-05 3.97578e-05 4.95446e-05 0.000225325 </div><div class='del'>-    0.000214579 -0.00230134 -0.000451102 0.00997237 0.0341443 </div><div class='del'>-    0.0449314 0.0424411 0.0341996 0.0315315 0.0308892 0.0291614 </div><div class='del'>-    0.024365 0.0190282 0.0188976 0.017238 0.0138526 0.0105645 </div><div class='del'>-    0.00778548 0.00561753 0.0039871 0.00279554 0.00194075 0.0013468 </div><div class='del'>-    0.000934775 0.000664723 0.000498911 0.000377384 0.000254183 </div><div class='del'>-    0.000163421 0.000120773 9.65058e-05 7.22384e-05 5.60316e-05 </div><div class='del'>-    4.14549e-05 2.79516e-05 2.57096e-05 2.34677e-05 2.12257e-05 </div><div class='del'>-    1.89837e-05 1.67417e-05 1.46737e-05 1.27228e-05 1.07719e-05 </div><div class='del'>-    8.82099e-06 6.87009e-06 5.0896e-06 4.71705e-06 4.34451e-06 </div><div class='del'>-    3.97196e-06 3.59941e-06 3.22686e-06 2.85431e-06 2.48176e-06 </div><div class='del'>-    2.10921e-06 1.73666e-06 1.36411e-06 1.02855e-06 9.42931e-07 </div><div class='del'>-    8.57316e-07 7.71701e-07 6.86086e-07 6.00471e-07 5.14856e-07 </div><div class='del'>-    4.29241e-07 3.43626e-07 2.58011e-07 1.72396e-07 9.85409e-08 </div><div class='del'>-    9.14091e-08 8.42773e-08 7.71456e-08 7.00138e-08 6.2882e-08 </div><div class='del'>-    5.57503e-08 4.86185e-08 4.14867e-08 3.4355e-08 2.72232e-08 </div><div class='del'>-    2.05821e-08 1.63235e-08 1.2065e-08 7.80643e-09 3.54786e-09 </div><div class='del'>-    -7.10696e-10 -4.96926e-09 -9.22782e-09 -1.34864e-08 -1.77449e-08 </div><div class='del'>-    -2.20035e-08 -2.62621e-08 -3.05206e-08 -3.47792e-08 -3.90378e-08 </div><div class='del'>-    -4.32963e-08 -4.75549e-08 -5.18134e-08 -5.6072e-08 -6.03306e-08 </div><div class='del'>-    -6.45891e-08 -6.88477e-08 -8.76373e-06 0.000131607 -0.00021685 </div><div class='del'>-    -0.000433027 0.00047234 0.000211593 -0.000189601 3.2492e-05 </div><div class='del'>-    0.000575955 7.72235e-05 -0.000285172 -0.000242061 -0.000135112 </div><div class='del'>-    -3.50117e-05 -2.75868e-05 5.48974e-05 1.80604e-07 5.48911e-05 </div><div class='del'>-    3.97478e-05 0.000192909 0.000297932 0.00402253 -0.0122366 </div><div class='del'>-    -0.047853 -0.0963082 -0.108071 -0.0567275 -0.0239271 -0.0178628 </div><div class='del'>-    -0.0233027 -0.031853 -0.0400843 -0.0482725 -0.0576154 -0.0627218 </div><div class='del'>-    -0.0511236 -0.0279524 -0.0150986 -0.00931091 -0.00652876 </div><div class='del'>-    -0.00479286 -0.00344346 -0.00249578 -0.0019532 -0.00157977 </div><div class='del'>-    -0.00131848 -0.00111251 -0.000939229 -0.000797445 -0.000708384 </div><div class='del'>-    -0.000630452 -0.000539722 -0.000508862 -0.000480596 -0.000439484 </div><div class='del'>-    -0.000407217 -0.000363866 -0.000329506 -0.000318642 -0.000307362 </div><div class='del'>-    -0.000286511 -0.000266253 -0.000242943 -0.000218107 -0.000204661 </div><div class='del'>-    -0.00020241 -0.000194435 -0.000185062 -0.000173042 -0.000160549 </div><div class='del'>-    -0.000151407 -0.000145626 -0.000145976 -0.000147342 -0.000145288 </div><div class='del'>-    -0.000137979 -0.000124481 -0.000123218 -0.000127453 -0.000139006 </div><div class='del'>-    -0.000145486 -0.000129764 -9.82749e-05 -4.72596e-05 -3.08671e-05 </div><div class='del'>-    -3.28834e-05 -4.52254e-05 -6.25389e-05 -6.32516e-05 -6.39643e-05 </div><div class='del'>-    -6.4677e-05 -6.53897e-05 -6.61023e-05 -6.6815e-05 -6.75277e-05 </div><div class='del'>-    -6.61005e-05 -6.45173e-05 -6.29341e-05 -6.13509e-05 -5.97676e-05 </div><div class='del'>-    -5.81844e-05 -5.66012e-05 -5.54231e-05 -5.4455e-05 -5.3487e-05 </div><div class='del'>-    -5.25189e-05 -5.15508e-05 -5.05828e-05 -4.96147e-05 -4.86466e-05 </div><div class='del'>-    -4.76785e-05 -4.67105e-05 -4.57424e-05 -4.47743e-05 -4.38063e-05 </div><div class='del'>-    -4.28382e-05 -4.18821e-05 -4.10211e-05 -4.016e-05 -3.9299e-05 </div><div class='del'>-    -3.8438e-05 4.29885e-05 5.14113e-05 -0.000127986 -0.000611463 </div><div class='del'>-    -0.000149428 0.000882394 0.00297059 -0.00405825 -0.00591067 </div><div class='del'>-    -0.00546997 -0.00158744 0.00190677 0.00298403 0.00268595 </div><div class='del'>-    0.00196161 0.00130289 0.000783347 0.000520683 0.000565306 </div><div class='del'>-    0.00053419 -0.00224696 -0.000920818 0.0132755 0.0322504 </div><div class='del'>-    0.0442808 0.0638615 0.0701007 0.0539356 0.0247771 0.056244 </div><div class='del'>-    0.294266 0.831368 1.45424 2.02898 2.54559 2.9937 3.35333 </div><div class='del'>-    3.72609 4.06363 4.32789 4.52413 4.66504 4.7652 4.83637 4.88631 </div><div class='del'>-    4.92109 4.94464 4.96046 4.97218 4.98079 4.98679 4.99076 </div><div class='del'>-    4.99361 4.99555 4.99686 4.99783 4.99853 4.99902 4.99936 </div><div class='del'>-    4.99959 4.99973 4.99983 4.9999 4.99993 4.99996 4.99998 5 </div><div class='del'>-    5.00001 5 4.99999 4.99997 4.99994 4.99993 4.99994 4.99996 </div><div class='del'>-    4.99999 5.00004 5.00006 5.00005 5.00003 5.00002 5.00001 </div><div class='del'>-    5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    5 5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99998 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[27].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 4.99984 4.99796 4.99478 4.9889 4.98738 4.98896 4.99087 </div><div class='del'>-    4.99262 4.99419 4.99552 4.99659 4.99743 4.99807 4.99855 </div><div class='del'>-    4.9989 4.99894 4.99908 4.99935 5.00001 5.0007 5.00132 5.00032 </div><div class='del'>-    4.99976 5.00134 5.00339 5.00315 5.00157 5.00091 5.00058 </div><div class='del'>-    5.00012 4.99944 4.99886 4.9994 4.99934 4.99899 4.99876 4.99868 </div><div class='del'>-    4.99872 4.99883 4.99898 4.99914 4.9993 4.99944 4.99956 4.99967 </div><div class='del'>-    4.99976 4.99982 4.99986 4.9999 4.99993 4.99997 4.99997 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.00009 5.00028 5.00015 4.99983 </div><div class='del'>-    5.00036 4.99996 4.99834 4.99783 5.00383 5.00734 5.00387 </div><div class='del'>-    5.00058 4.99893 4.99836 4.99832 4.99854 4.99873 4.99905 </div><div class='del'>-    4.99927 4.99952 4.99969 4.99834 4.99536 4.99163 4.99073 </div><div class='del'>-    5.0053 5.03631 5.03103 4.9008 4.62503 4.21887 3.70902 3.09967 </div><div class='del'>-    2.35791 1.41912 0.519675 0.210458 0.131362 0.0980819 0.0708209 </div><div class='del'>-    0.0471701 0.0323272 0.0253535 0.0199144 0.0152615 0.0117228 </div><div class='del'>-    0.00917696 0.00738117 0.00609292 0.00512664 0.00436184 0.0037961 </div><div class='del'>-    0.00331639 0.00289006 0.0025477 0.00226529 0.00202925 0.00182793 </div><div class='del'>-    0.00165474 0.00150531 0.00137529 0.00125983 0.00115603 0.00106455 </div><div class='del'>-    0.000982977 0.000911255 0.000846819 0.000790092 0.000738698 </div><div class='del'>-    0.000692816 0.00065107 0.000613595 0.000579642 0.000548935 </div><div class='del'>-    0.00052106 0.000495598 0.000472174 0.000450849 0.000431118 </div><div class='del'>-    0.000412667 0.000395868 0.000381319 0.000368487 0.000357327 </div><div class='del'>-    0.000344212 0.000330334 0.00031622 0.000303298 0.000295809 </div><div class='del'>-    0.00028832 0.000280831 0.000273342 0.000265853 0.000258364 </div><div class='del'>-    0.000250875 0.000245118 0.000239488 0.000233857 0.000228227 </div><div class='del'>-    0.000222596 0.000216966 0.000211336 0.000207047 0.000203455 </div><div class='del'>-    0.000199863 0.00019627 0.000192678 0.000189085 0.000185493 </div><div class='del'>-    0.0001819 0.000178308 0.000174716 0.000171123 0.000167531 </div><div class='del'>-    0.000163938 0.000160346 0.000156835 0.000153973 0.00015111 </div><div class='del'>-    0.000148248 0.000145385 0.000296579 -3.96718e-05 -0.000449085 </div><div class='del'>-    0.000323433 0.000750086 0.000268264 0.000149028 -0.000100249 </div><div class='del'>-    7.00956e-05 0.00012605 0.00022592 0.000193036 0.000120453 </div><div class='del'>-    8.07865e-05 7.65771e-05 -3.27828e-05 0.000116759 0.000169498 </div><div class='del'>-    0.000409804 0.000414965 0.00092323 -0.00590633 -0.0175477 </div><div class='del'>-    -0.032433 -0.0559842 -0.0820373 0.0688484 0.626629 1.32929 </div><div class='del'>-    2.01657 2.60925 3.12329 3.38952 3.14128 2.38463 1.23802 </div><div class='del'>-    0.316019 0.107832 0.0694707 0.051837 0.035247 0.0209999 </div><div class='del'>-    0.0116618 0.00967674 0.00789182 0.00574566 0.00386872 0.00258612 </div><div class='del'>-    0.00167126 0.00104169 0.000641093 0.000401246 0.000277928 </div><div class='del'>-    0.000171775 0.000102266 5.89376e-05 3.29258e-05 1.80463e-05 </div><div class='del'>-    1.0057e-05 6.4571e-06 5.10093e-06 4.06791e-06 3.62716e-06 </div><div class='del'>-    3.63321e-06 3.99625e-06 4.64368e-06 5.20886e-06 4.77728e-06 </div><div class='del'>-    3.23919e-06 1.14113e-06 -1.29416e-06 -4.15607e-06 -1.88532e-06 </div><div class='del'>-    5.24411e-06 1.38678e-05 1.28823e-05 3.6758e-06 -2.52285e-06 </div><div class='del'>-    -3.97133e-06 -4.03071e-06 -3.37154e-06 -2.71238e-06 -2.05321e-06 </div><div class='del'>-    -1.39404e-06 -7.34872e-07 -3.73325e-07 -1.05873e-07 1.61578e-07 </div><div class='del'>-    4.2903e-07 6.96482e-07 8.18468e-07 7.60065e-07 7.01662e-07 </div><div class='del'>-    6.43258e-07 5.84855e-07 5.26452e-07 4.68049e-07 4.09646e-07 </div><div class='del'>-    3.51243e-07 2.9284e-07 2.34437e-07 1.71213e-07 1.06928e-07 </div><div class='del'>-    4.2644e-08 -2.16403e-08 -8.59247e-08 -1.50209e-07 -2.14493e-07 </div><div class='del'>-    -2.78778e-07 -3.43062e-07 -4.07346e-07 -4.55065e-07 -4.3348e-07 </div><div class='del'>-    -4.11896e-07 -3.90311e-07 -3.68726e-07 -3.47141e-07 -3.25556e-07 </div><div class='del'>-    -3.03971e-07 -2.82386e-07 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[28].set(&lt;&lt;-'EOD')</div><div class='del'>-    0.368163 0.361756 0.327463 0.269513 0.149476 0.0805716 0.0501146 </div><div class='del'>-    0.03403 0.0230886 0.0160474 0.0116071 0.00870013 0.00679614 </div><div class='del'>-    0.00542384 0.00432512 0.00340653 -0.00129719 -0.00399429 </div><div class='del'>-    -0.00318719 0.00443085 0.0150156 0.0334147 0.0132288 -0.0189751 </div><div class='del'>-    -0.0508377 -0.0252174 -0.0142489 -0.00675908 -0.0038653 </div><div class='del'>-    -0.00243423 -0.00168891 -0.00120901 -0.000900426 -0.000685575 </div><div class='del'>-    -0.000557595 -0.000457268 -0.000377427 -0.000315269 -0.000266613 </div><div class='del'>-    -0.000228397 -0.000198283 -0.000174248 -0.000154886 -0.00013892 </div><div class='del'>-    -0.000125864 -0.000115189 -0.000105841 -9.66611e-05 -8.84262e-05 </div><div class='del'>-    -8.23872e-05 -7.74668e-05 -7.25463e-05 -6.79992e-05 -6.35276e-05 </div><div class='del'>-    -5.92413e-05 -5.68994e-05 -5.45574e-05 -5.22154e-05 -4.98735e-05 </div><div class='del'>-    -4.75315e-05 -4.54981e-05 -4.36726e-05 -4.18471e-05 -4.00216e-05 </div><div class='del'>-    -3.81961e-05 -3.64559e-05 -3.54209e-05 -3.43858e-05 -3.33508e-05 </div><div class='del'>-    -3.23157e-05 -3.12807e-05 -3.02456e-05 -2.92105e-05 -2.81755e-05 </div><div class='del'>-    -2.71404e-05 -2.61054e-05 -2.51232e-05 -2.44984e-05 -2.38736e-05 </div><div class='del'>-    -2.32487e-05 -2.26239e-05 -2.19991e-05 -2.13742e-05 -2.07494e-05 </div><div class='del'>-    -2.01246e-05 -1.94998e-05 -1.88749e-05 -1.82865e-05 -1.79044e-05 </div><div class='del'>-    -1.75224e-05 -1.71403e-05 -1.67582e-05 -1.63762e-05 -1.59941e-05 </div><div class='del'>-    -1.56121e-05 -1.523e-05 -1.4848e-05 -1.44659e-05 -1.41138e-05 </div><div class='del'>-    -1.39075e-05 -1.37011e-05 -1.34947e-05 -1.32883e-05 -1.30819e-05 </div><div class='del'>-    -1.28755e-05 -1.26691e-05 -1.24627e-05 -1.22563e-05 -1.205e-05 </div><div class='del'>-    -1.18436e-05 -1.16372e-05 -1.14308e-05 -1.12244e-05 -1.1018e-05 </div><div class='del'>-    -1.08116e-05 -1.06052e-05 -1.03988e-05 -1.01924e-05 -9.98605e-06 </div><div class='del'>-    -9.77966e-06 -2.85319e-05 0.00281092 0.00180106 -0.000981083 </div><div class='del'>-    0.00551926 -0.00119763 -0.0295069 -0.0367677 0.064749 0.119022 </div><div class='del'>-    0.0882007 0.0552062 0.03418 0.0223243 0.015545 0.011949 </div><div class='del'>-    0.00757134 0.00667655 0.00583243 0.00644443 0.00650959 -0.0302575 </div><div class='del'>-    -0.0437806 -0.0355466 0.0381776 0.282109 0.674178 1.07582 </div><div class='del'>-    1.45189 1.789 2.08649 2.34663 2.57245 2.81211 3.04778 3.2523 </div><div class='del'>-    3.45877 3.65593 3.83396 3.9923 4.13368 4.25864 4.36719 4.46064 </div><div class='del'>-    4.54086 4.60962 4.66835 4.71838 4.76094 4.79716 4.82796 </div><div class='del'>-    4.85413 4.87634 4.89518 4.91116 4.92476 4.93631 4.94608 </div><div class='del'>-    4.95434 4.9613 4.96715 4.97211 4.97638 4.98001 4.98312 4.98571 </div><div class='del'>-    4.98795 4.98979 4.99138 4.99269 4.99381 4.99474 4.99551 </div><div class='del'>-    4.99615 4.99668 4.99713 4.99752 4.99783 4.99811 4.99836 </div><div class='del'>-    4.99858 4.99873 4.99884 4.99892 4.999 4.99907 4.99912 4.99916 </div><div class='del'>-    4.99921 4.99926 4.99932 4.99937 4.99942 4.99948 4.99953 </div><div class='del'>-    4.99956 4.99958 4.99961 4.99963 4.99966 4.99968 4.99971 </div><div class='del'>-    4.99972 4.99973 4.99974 4.99975 4.99976 4.99977 4.99978 </div><div class='del'>-    4.99979 4.9998 4.9998 4.99981 4.99982 4.99983 4.99984 4.99985 </div><div class='del'>-    4.99986 4.99986 4.99987 4.99987 5.00498 5.00354 4.99359 </div><div class='del'>-    4.98981 5.00498 5.00099 5.00041 5.00022 5.00015 5.00012 </div><div class='del'>-    5.0001 5.00008 5.00005 5.00003 5 4.99431 4.99459 4.99591 </div><div class='del'>-    5.00087 5.01029 5.03935 4.92784 4.51643 3.78356 2.68745 </div><div class='del'>-    1.43417 0.583128 0.205094 0.0777337 0.0391566 0.02723 0.023883 </div><div class='del'>-    0.018808 0.010165 0.00254623 -0.00377463 -0.0038097 0.00144145 </div><div class='del'>-    0.00267231 0.00193045 0.00144538 0.00121758 0.00112893 0.00109424 </div><div class='del'>-    0.0010226 0.000948072 0.000882573 0.000826996 0.000776391 </div><div class='del'>-    0.000729719 0.000686499 0.000647333 0.000610108 0.000575631 </div><div class='del'>-    0.000545069 0.000515485 0.000488514 0.000465316 0.000443215 </div><div class='del'>-    0.000422454 0.00040292 0.00038488 0.000368472 0.000353628 </div><div class='del'>-    0.000339643 0.000326197 0.000313483 0.000302884 0.000294038 </div><div class='del'>-    0.000284003 0.000270941 0.000254925 0.000246511 0.000244089 </div><div class='del'>-    0.000245538 0.000242099 0.000235728 0.000227482 0.000218001 </div><div class='del'>-    0.000207257 0.000202127 0.000196997 0.000191868 0.000186738 </div><div class='del'>-    0.000181608 0.00017758 0.000173899 0.000170219 0.000166538 </div><div class='del'>-    0.000162857 0.000159576 0.00015679 0.000154005 0.000151219 </div><div class='del'>-    0.000148433 0.000145647 0.000142861 0.000140076 0.00013729 </div><div class='del'>-    0.000134504 0.000131718 0.000129603 0.000127635 0.000125668 </div><div class='del'>-    0.0001237 0.000121732 0.000119765 0.000117797 0.000115829 </div><div class='del'>-    0.000113862 0.000111894 0.000109993 0.000108372 0.000106751 </div><div class='del'>-    0.00010513 0.000103509 0.000101887 0.000100266 9.86449e-05 </div><div class='del'>-    9.70237e-05 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[29].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 4.99899 4.99654 4.99327 4.9863 4.98954 4.99212 4.99378 </div><div class='del'>-    4.9951 4.99624 4.99715 4.99786 4.99839 4.99879 4.99909 4.99931 </div><div class='del'>-    4.99922 4.99933 4.99971 5.00064 5.00084 5.00123 4.99865 </div><div class='del'>-    4.99853 4.99983 5.00457 5.00242 5.00105 5.00062 5.00042 </div><div class='del'>-    4.99971 4.9994 4.9992 4.9996 4.99955 4.99932 4.99918 4.99915 </div><div class='del'>-    4.99919 4.99927 4.99937 4.99948 4.99957 4.99966 4.99974 </div><div class='del'>-    4.9998 4.99985 4.99989 4.99992 4.99993 4.99994 4.99994 4.99996 </div><div class='del'>-    4.99998 5 5 5.00001 5.00001 5.00001 5.00002 5.00002 5.00001 </div><div class='del'>-    5.00001 5.00001 5 5 5 5 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 </div><div class='del'>-    5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00002 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5 5 5 5 5 5 4.9997 4.99998 4.99954 4.99963 </div><div class='del'>-    5.00059 4.99945 4.99732 4.99957 5.00919 5.00558 5.00033 </div><div class='del'>-    4.99851 4.9983 4.99854 4.99871 4.99928 4.99914 4.99939 4.99952 </div><div class='del'>-    4.9998 4.99976 4.99744 4.99598 4.99478 4.99806 5.01911 5.04602 </div><div class='del'>-    5.05469 5.01317 4.89484 4.69655 4.42036 4.06069 3.60793 </div><div class='del'>-    3.12531 2.72975 2.45187 2.25081 2.09841 1.98509 1.90211 </div><div class='del'>-    1.84084 1.79411 1.7574 1.72763 1.70283 1.68188 1.66389 1.64823 </div><div class='del'>-    1.63438 1.62201 1.61088 1.60081 1.59163 1.58323 1.57549 </div><div class='del'>-    1.56835 1.56173 1.55558 1.54985 1.54451 1.53951 1.53479 </div><div class='del'>-    1.53035 1.52615 1.5222 1.51845 1.5149 1.51153 1.50834 1.50529 </div><div class='del'>-    1.5024 1.49964 1.497 1.49449 1.49208 1.48977 1.48755 1.48542 </div><div class='del'>-    1.48336 1.48138 1.47948 1.47765 1.4759 1.47419 1.47255 1.47096 </div><div class='del'>-    1.46949 1.46823 1.46696 1.4657 1.46444 1.46317 1.46191 1.46065 </div><div class='del'>-    1.45956 1.4585 1.45743 1.45636 1.45529 1.45422 1.45315 1.45226 </div><div class='del'>-    1.45145 1.45064 1.44983 1.44902 1.44821 1.4474 1.44659 1.44579 </div><div class='del'>-    1.44498 1.44417 1.44336 1.44255 1.44174 1.44094 1.44019 </div><div class='del'>-    1.43944 1.43868 1.43793 1.43765 1.43679 1.43515 1.43405 </div><div class='del'>-    1.43478 1.43387 1.43345 1.43184 1.43086 1.43021 1.43003 </div><div class='del'>-    1.42988 1.42944 1.42883 1.42818 1.42702 1.42642 1.42595 </div><div class='del'>-    1.42586 1.42616 1.42783 1.41733 1.38106 1.30738 1.3877 2.09819 </div><div class='del'>-    3.05285 3.58059 3.77601 3.87609 4.02557 4.24887 4.4608 4.60411 </div><div class='del'>-    4.72109 4.8255 4.90465 4.97379 5.01253 5.01532 5.01239 5.0092 </div><div class='del'>-    5.00665 5.00474 5.00333 5.00232 5.00163 5.00117 5.00082 </div><div class='del'>-    5.00057 5.00039 5.00027 5.00019 5.00013 5.00009 5.00006 </div><div class='del'>-    5.00004 5.00003 5.00002 5.00001 5.00001 5 5 5 4.99998 4.99995 </div><div class='del'>-    4.99992 4.99996 5.00005 5.00012 5.00008 4.99996 4.9999 4.99985 </div><div class='del'>-    4.99986 4.99997 5.00021 5.0003 5.00024 5.00009 5.00007 5.00005 </div><div class='del'>-    5.00003 5.00001 4.99998 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    5 5 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00002 5.00002 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99998 </div><div class='del'>-    4.99998 4.99998 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[30].set(&lt;&lt;-'EOD')</div><div class='del'>-    7.10441e-10 5.70385e-05 0.000226143 0.000131916 -0.000887764 </div><div class='del'>-    -8.01837e-05 -3.49653e-05 9.40039e-05 0.000118663 0.000108025 </div><div class='del'>-    8.6059e-05 6.33268e-05 4.99295e-05 3.16843e-05 3.60692e-05 </div><div class='del'>-    2.07572e-05 -8.6375e-05 3.44583e-05 8.07397e-05 0.000196296 </div><div class='del'>-    0.000115615 -7.12768e-05 -0.000129812 -4.18679e-05 7.94364e-05 </div><div class='del'>-    0.000182034 -5.41226e-05 -0.000451819 -0.000713937 -0.00129863 </div><div class='del'>-    -0.00262186 -0.00213417 -0.00133767 0.000775698 0.000969902 </div><div class='del'>-    0.000549281 0.000280946 0.000140321 8.6919e-05 7.22446e-05 </div><div class='del'>-    6.5631e-05 6.45263e-05 6.63087e-05 7.17391e-05 7.59042e-05 </div><div class='del'>-    7.59172e-05 7.03353e-05 6.33558e-05 5.31136e-05 4.64278e-05 </div><div class='del'>-    4.40594e-05 4.16909e-05 4.05674e-05 3.96957e-05 3.87875e-05 </div><div class='del'>-    3.74977e-05 3.62079e-05 3.49181e-05 3.36283e-05 3.23385e-05 </div><div class='del'>-    3.12427e-05 3.02775e-05 2.93124e-05 2.83472e-05 2.7382e-05 </div><div class='del'>-    2.64613e-05 2.59077e-05 2.5354e-05 2.48004e-05 2.42468e-05 </div><div class='del'>-    2.36931e-05 2.31395e-05 2.25859e-05 2.20322e-05 2.14786e-05 </div><div class='del'>-    2.0925e-05 2.03916e-05 1.9995e-05 1.95984e-05 1.92019e-05 </div><div class='del'>-    1.88053e-05 1.84087e-05 1.80122e-05 1.76156e-05 1.7219e-05 </div><div class='del'>-    1.68225e-05 1.64259e-05 1.6051e-05 1.57991e-05 1.55471e-05 </div><div class='del'>-    1.52952e-05 1.50433e-05 1.47913e-05 1.45394e-05 1.42875e-05 </div><div class='del'>-    1.40356e-05 1.37836e-05 1.35317e-05 1.32978e-05 1.31513e-05 </div><div class='del'>-    1.30048e-05 1.28583e-05 1.27118e-05 1.25653e-05 1.24188e-05 </div><div class='del'>-    1.22724e-05 1.21259e-05 1.19794e-05 1.18329e-05 1.16864e-05 </div><div class='del'>-    1.15399e-05 1.13934e-05 1.12469e-05 1.11005e-05 1.0954e-05 </div><div class='del'>-    1.08075e-05 1.0661e-05 1.05145e-05 1.0368e-05 1.02215e-05 </div><div class='del'>-    1.76447e-05 7.21516e-05 -3.59786e-05 -0.000159618 0.000156236 </div><div class='del'>-    0.000135106 -0.000336402 -0.000302283 0.000699323 0.000473866 </div><div class='del'>-    -0.000156146 -0.000225625 -0.000123592 -3.78116e-05 8.47472e-06 </div><div class='del'>-    2.43387e-06 -7.44762e-05 7.80111e-05 9.43608e-05 0.000170159 </div><div class='del'>-    8.83919e-05 -0.00018802 -0.000373512 -0.000390597 0.000156875 </div><div class='del'>-    0.0032343 0.00776304 -0.000566905 -0.00760695 -0.0159226 </div><div class='del'>-    -0.0245989 -0.0331402 -0.0100902 0.067837 0.266702 0.910818 </div><div class='del'>-    1.82282 2.69714 3.43247 3.98325 4.32893 4.51529 4.67087 </div><div class='del'>-    4.79288 4.87574 4.92797 4.95902 4.97655 4.98622 4.99195 </div><div class='del'>-    4.99526 4.99735 4.9991 4.99974 4.99982 4.99974 4.99961 4.9995 </div><div class='del'>-    4.99943 4.9994 4.9994 4.99942 4.99944 4.99948 4.99952 4.99956 </div><div class='del'>-    4.99961 4.99965 4.9997 4.99974 4.99977 4.99981 4.99983 4.99986 </div><div class='del'>-    4.99988 4.9999 4.99991 4.99992 4.99993 4.99994 4.99995 4.99995 </div><div class='del'>-    4.99996 4.99997 4.99997 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 5 </div><div class='del'>-    5 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 5 5.00019 4.99888 4.99663 4.99457 4.99902 </div><div class='del'>-    5.00229 5.00323 5.00302 5.0023 5.0015 5.00085 5.00041 5.00013 </div><div class='del'>-    4.99993 4.99979 4.99948 4.99954 4.99983 5.00055 5.00109 </div><div class='del'>-    5.00009 4.9987 4.998 4.99755 4.99676 4.99618 5.01091 5.05272 </div><div class='del'>-    5.04156 4.80112 4.27692 3.42343 2.23953 0.967179 0.429813 </div><div class='del'>-    0.540757 1.32991 2.32147 3.14903 3.78143 4.22325 4.47978 </div><div class='del'>-    4.59448 4.69875 4.79798 4.87419 4.92339 4.95249 4.97174 </div><div class='del'>-    4.98408 4.99124 4.99478 4.99729 4.99868 4.9992 4.99941 4.99947 </div><div class='del'>-    4.99946 4.99943 4.9994 4.99939 4.9994 4.99942 4.99946 4.99951 </div><div class='del'>-    4.99956 4.99961 4.99967 4.99973 4.99977 4.9998 4.99981 4.99983 </div><div class='del'>-    4.99984 4.99987 4.99992 5.00001 5.00005 5.00001 4.99994 </div><div class='del'>-    4.99995 4.99995 4.99996 4.99996 4.99996 4.99997 4.99997 </div><div class='del'>-    4.99997 4.99998 4.99998 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 5 5 5 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5 5 5 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99998 4.99998 4.99998 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[31].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.8179e-09 -5.28841e-06 -1.44913e-05 -3.62932e-05 -9.75719e-05 </div><div class='del'>-    0.000141781 3.73396e-05 -1.65603e-05 -1.5271e-05 -6.73884e-06 </div><div class='del'>-    4.40157e-06 -4.85345e-06 -1.02964e-05 2.03126e-05 -1.89457e-05 </div><div class='del'>-    -8.75564e-06 7.67422e-06 4.71103e-06 1.29798e-05 6.13469e-06 </div><div class='del'>-    -1.14363e-05 -0.0394563 -0.0477298 -0.0622012 -0.0519225 </div><div class='del'>-    0.262499 0.943611 1.67052 2.31017 2.84028 3.28467 3.61582 </div><div class='del'>-    3.85887 4.13011 4.36511 4.54063 4.67013 4.76408 4.83263 </div><div class='del'>-    4.8825 4.91837 4.94373 4.96117 4.97318 4.98093 4.98562 4.98906 </div><div class='del'>-    4.99267 4.99539 4.99666 4.99731 4.99797 4.99844 4.99887 </div><div class='del'>-    4.99927 4.99933 4.99938 4.99944 4.99949 4.99955 4.9996 4.99965 </div><div class='del'>-    4.9997 4.99975 4.9998 4.99985 4.99986 4.99987 4.99989 4.9999 </div><div class='del'>-    4.99991 4.99992 4.99993 4.99995 4.99996 4.99997 4.99998 </div><div class='del'>-    4.99998 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5.00001 </div><div class='del'>-    5.00001 5.00001 5 5 5 5 5 5 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99997 5.00002 5.00004 5.0001 5.0001 4.99987 5.00009 </div><div class='del'>-    5.00021 5.00002 5.00004 4.99988 5.00013 4.99993 5.00026 </div><div class='del'>-    4.99973 5 5.00006 5.00009 5.00004 5.00004 5.04854 4.82711 </div><div class='del'>-    4.04208 2.64155 0.838902 0.19014 0.0982549 0.0723197 0.0576863 </div><div class='del'>-    0.0427644 0.0301979 0.020146 0.0135728 0.00980358 0.00774482 </div><div class='del'>-    0.00586604 0.0036687 0.00211511 0.00121906 0.000647581 0.000828436 </div><div class='del'>-    0.00190938 0.00224254 0.00199956 0.00165488 0.00135612 0.00113715 </div><div class='del'>-    0.000984181 0.000877175 0.000789973 0.000741139 0.000689338 </div><div class='del'>-    0.000625676 0.000586082 0.000550152 0.000529573 0.000505606 </div><div class='del'>-    0.000482117 0.000460574 0.000441649 0.000424674 0.000408398 </div><div class='del'>-    0.000391914 0.000376272 0.000361487 0.000348181 0.000336045 </div><div class='del'>-    0.000324466 0.000313545 0.000303046 0.000293056 0.00028356 </div><div class='del'>-    0.000274586 0.000266155 0.000258279 0.000250938 0.000243789 </div><div class='del'>-    0.000236912 0.000230244 0.000224186 0.000219291 0.000215346 </div><div class='del'>-    0.000212468 0.000207291 0.000200862 0.00019368 0.000186767 </div><div class='del'>-    0.000183515 0.000180263 0.00017701 0.000173758 0.000170506 </div><div class='del'>-    0.000167253 0.000164001 0.000161164 0.000158357 0.00015555 </div><div class='del'>-    0.000152743 0.000149936 0.000147129 0.000144322 0.000142066 </div><div class='del'>-    0.000140096 0.000138127 0.000136157 0.000134187 0.000132218 </div><div class='del'>-    0.000130248 0.000128278 0.000126308 0.000124339 0.000122369 </div><div class='del'>-    0.000120399 0.000118429 0.00011646 0.000114527 0.000112892 </div><div class='del'>-    0.000111258 0.000109623 0.000107988 0.000103598 6.86052e-05 </div><div class='del'>-    3.337e-05 7.00783e-05 0.000218764 0.000221318 0.000118593 </div><div class='del'>-    -0.000113962 5.78552e-05 9.42068e-05 0.000237037 0.000171302 </div><div class='del'>-    0.0001033 6.16066e-05 5.52908e-05 6.30233e-05 7.01897e-05 </div><div class='del'>-    8.48573e-05 0.000106859 8.37213e-05 -0.0391541 -0.047722 </div><div class='del'>-    -0.0618454 -0.0169804 0.345725 1.03426 1.74825 2.37152 2.88737 </div><div class='del'>-    3.32173 3.66761 3.9707 4.17762 3.98832 3.30483 2.09737 0.710892 </div><div class='del'>-    0.148159 0.0707463 0.0555808 0.045618 0.0319116 0.0199589 </div><div class='del'>-    0.0133357 0.00898528 0.00586075 0.00375478 0.00245443 0.00156038 </div><div class='del'>-    0.000962344 0.000590953 0.000375107 0.000250243 0.00015882 </div><div class='del'>-    0.000100203 6.18122e-05 3.7372e-05 2.23009e-05 1.32569e-05 </div><div class='del'>-    8.29437e-06 5.72457e-06 3.96832e-06 2.98935e-06 2.59699e-06 </div><div class='del'>-    2.75024e-06 3.38689e-06 4.0453e-06 3.50095e-06 1.64988e-06 </div><div class='del'>-    -3.84371e-07 -2.03828e-06 -3.46401e-06 -1.24301e-06 4.63458e-06 </div><div class='del'>-    1.14104e-05 1.02619e-05 2.15487e-06 -2.98487e-06 -3.67221e-06 </div><div class='del'>-    -2.94279e-06 -2.58649e-06 -2.23019e-06 -1.87389e-06 -1.5176e-06 </div><div class='del'>-    -1.1613e-06 -7.92127e-07 -4.18889e-07 -4.56502e-08 3.27588e-07 </div><div class='del'>-    7.00827e-07 8.79539e-07 8.17025e-07 7.5451e-07 6.91996e-07 </div><div class='del'>-    6.29481e-07 5.66966e-07 5.04452e-07 4.41937e-07 3.79422e-07 </div><div class='del'>-    3.16908e-07 2.54393e-07 1.90078e-07 1.25366e-07 6.0654e-08 </div><div class='del'>-    -4.05776e-09 -6.87696e-08 -1.33481e-07 -1.98193e-07 -2.62905e-07 </div><div class='del'>-    -3.27617e-07 -3.92329e-07 -4.40392e-07 -4.18802e-07 -3.97213e-07 </div><div class='del'>-    -3.75624e-07 -3.54035e-07 -3.32446e-07 -3.10856e-07 -2.89267e-07 </div><div class='del'>-    -2.67678e-07 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[32].set(&lt;&lt;-'EOD')</div><div class='del'>-    1.10294 1.10297 1.10291 1.10277 1.10259 1.10294 1.10313 </div><div class='del'>-    1.10306 1.10299 1.10296 1.10295 1.10295 1.10294 1.10294 </div><div class='del'>-    1.10294 1.10294 1.10294 1.10294 1.10294 1.10296 1.10296 </div><div class='del'>-    1.00547 0.998599 1.5201 2.49297 3.31258 3.73162 3.84757 </div><div class='del'>-    3.92505 4.02965 4.16599 4.30294 4.41541 4.52886 4.64414 </div><div class='del'>-    4.73865 4.81065 4.86391 4.90315 4.93188 4.95258 4.96726 </div><div class='del'>-    4.97738 4.98436 4.98888 4.99162 4.99363 4.99573 4.99731 </div><div class='del'>-    4.99804 4.99843 4.99881 4.99909 4.99934 4.99957 4.9996 4.99964 </div><div class='del'>-    4.99967 4.9997 4.99973 4.99977 4.9998 4.99983 4.99986 4.99988 </div><div class='del'>-    4.99991 4.99992 4.99992 4.99993 4.99994 4.99994 4.99995 </div><div class='del'>-    4.99996 4.99996 4.99997 4.99997 4.99998 4.99998 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 5 5 5 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 5.00028 4.99988 4.99968 </div><div class='del'>-    5.00019 4.99987 5.00021 4.99973 4.99977 4.99996 4.99997 </div><div class='del'>-    5.0002 4.99957 5.00026 4.99947 5.00074 5.00003 4.99987 4.99979 </div><div class='del'>-    5.00008 4.99997 5.08794 5.05993 4.76875 3.99197 3.10174 </div><div class='del'>-    2.5197 2.21771 2.04 1.92235 1.83874 1.77592 1.72665 1.686 </div><div class='del'>-    1.65276 1.6286 1.61299 1.60039 1.58934 1.57954 1.57083 1.56306 </div><div class='del'>-    1.55604 1.54963 1.54375 1.53832 1.53331 1.52865 1.52432 </div><div class='del'>-    1.52026 1.51645 1.51287 1.50949 1.50629 1.50327 1.50039 </div><div class='del'>-    1.49766 1.49505 1.49257 1.49019 1.48792 1.48574 1.48365 </div><div class='del'>-    1.48164 1.47971 1.47784 1.47604 1.47431 1.47264 1.47102 </div><div class='del'>-    1.46945 1.46794 1.46647 1.46505 1.46367 1.46233 1.46103 </div><div class='del'>-    1.45976 1.45853 1.45733 1.45616 1.45502 1.45392 1.45284 </div><div class='del'>-    1.45179 1.45076 1.44975 1.4488 1.44795 1.44711 1.44626 1.44541 </div><div class='del'>-    1.44457 1.44372 1.44287 1.44212 1.44138 1.44063 1.43989 </div><div class='del'>-    1.43914 1.4384 1.43766 1.43701 1.43641 1.43581 1.43522 1.43462 </div><div class='del'>-    1.43402 1.43342 1.43282 1.43223 1.43163 1.43103 1.43043 </div><div class='del'>-    1.42984 1.42924 1.42865 1.42808 1.42752 1.42695 1.42639 </div><div class='del'>-    1.42584 1.42529 1.42472 1.42412 1.42365 1.42326 1.42304 </div><div class='del'>-    1.42162 1.42082 1.42032 1.42029 1.42026 1.41995 1.41947 </div><div class='del'>-    1.41894 1.41841 1.4179 1.41742 1.41699 1.41656 1.32097 1.30963 </div><div class='del'>-    1.78765 2.64656 3.35764 3.747 3.86589 3.94217 4.04185 4.18453 </div><div class='del'>-    4.3561 4.53439 4.68621 4.74905 4.77848 4.84629 4.91261 4.97541 </div><div class='del'>-    5.01284 5.01548 5.01248 5.00924 5.00666 5.00475 5.00334 </div><div class='del'>-    5.00234 5.00164 5.00118 5.00083 5.00058 5.0004 5.00028 5.00019 </div><div class='del'>-    5.00013 5.00009 5.00007 5.00004 5.00003 5.00002 5.00001 </div><div class='del'>-    5.00001 5.00001 5 5 4.99999 4.99995 4.99992 4.99996 5.00006 </div><div class='del'>-    5.00012 5.00009 4.99997 4.9999 4.99985 4.99986 4.99997 5.00021 </div><div class='del'>-    5.00031 5.00024 5.0001 5.00007 5.00005 5.00003 5.00001 4.99998 </div><div class='del'>-    4.99998 4.99999 4.99999 4.99999 5 5 5 5 5 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00002 5.00002 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5 5 5 5 </div><div class='del'>-    5 4.99999 4.99999 4.99999 4.99998 4.99998 4.99998 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[33].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.00012 5.00023 5.0003 4.99972 4.99988 4.99984 4.99991 </div><div class='del'>-    4.99996 4.99999 5.00008 5.00009 4.99986 5.00003 5.00007 </div><div class='del'>-    4.99995 4.9999 4.99997 5.00013 5.00014 5.00013 4.99701 4.99763 </div><div class='del'>-    4.99742 4.99998 5.02836 5.07262 4.96856 4.57267 3.85637 </div><div class='del'>-    2.79544 1.45942 0.408016 0.084885 0.0271375 0.0119294 0.00707546 </div><div class='del'>-    0.0051087 0.00373035 0.00264737 0.00186477 0.00130379 0.000915857 </div><div class='del'>-    0.000653121 0.000483893 0.000380852 0.000302362 0.000219498 </div><div class='del'>-    0.000154435 0.000121928 0.000104026 8.61242e-05 7.48526e-05 </div><div class='del'>-    6.49216e-05 5.56238e-05 5.29689e-05 5.03139e-05 4.7659e-05 </div><div class='del'>-    4.5004e-05 4.23491e-05 4.00356e-05 3.79522e-05 3.58687e-05 </div><div class='del'>-    3.37852e-05 3.17018e-05 2.97592e-05 2.89804e-05 2.82016e-05 </div><div class='del'>-    2.74228e-05 2.66441e-05 2.58653e-05 2.50865e-05 2.43077e-05 </div><div class='del'>-    2.35289e-05 2.27501e-05 2.19714e-05 2.12346e-05 2.07821e-05 </div><div class='del'>-    2.03295e-05 1.98769e-05 1.94244e-05 1.89718e-05 1.85192e-05 </div><div class='del'>-    1.80667e-05 1.76141e-05 1.71615e-05 1.6709e-05 1.62828e-05 </div><div class='del'>-    1.60061e-05 1.57294e-05 1.54527e-05 1.5176e-05 1.48993e-05 </div><div class='del'>-    1.46226e-05 1.43459e-05 1.40692e-05 1.37925e-05 1.35158e-05 </div><div class='del'>-    1.3262e-05 1.31191e-05 1.29761e-05 1.28332e-05 1.26903e-05 </div><div class='del'>-    1.25474e-05 1.24045e-05 1.22615e-05 1.21186e-05 1.19757e-05 </div><div class='del'>-    1.18328e-05 1.16898e-05 1.15469e-05 1.1404e-05 1.12611e-05 </div><div class='del'>-    1.11182e-05 1.09752e-05 1.08323e-05 1.06894e-05 1.05465e-05 </div><div class='del'>-    1.04036e-05 1.02606e-05 1.00185e-05 3.8343e-05 -3.06781e-05 </div><div class='del'>-    -0.000111758 0.000111673 0.000130815 -0.000210491 -0.000231304 </div><div class='del'>-    0.000310226 0.000265303 3.0878e-05 -4.48405e-05 -1.2852e-05 </div><div class='del'>-    -7.84469e-06 3.29986e-05 -1.23286e-05 -6.07871e-05 5.35082e-05 </div><div class='del'>-    7.69194e-05 0.000126221 6.57178e-05 0.00223349 -0.0148854 </div><div class='del'>-    -0.0476636 -0.0491447 0.220125 1.11174 2.03988 2.90209 3.61069 </div><div class='del'>-    4.13554 4.50679 4.71501 4.83916 4.91027 4.95284 4.98086 </div><div class='del'>-    4.99151 4.98651 4.97113 4.95075 4.93102 4.93683 4.95457 </div><div class='del'>-    4.97071 4.98212 4.98948 4.99386 4.99636 4.99785 4.9987 4.99927 </div><div class='del'>-    4.99989 5.00014 5.00007 4.99988 4.99982 4.99976 4.99973 </div><div class='del'>-    4.99972 4.99972 4.99973 4.99974 4.99975 4.99977 4.99979 </div><div class='del'>-    4.99981 4.99984 4.99986 4.99988 4.99989 4.99991 4.99992 </div><div class='del'>-    4.99993 4.99994 4.99995 4.99996 4.99996 4.99997 4.99997 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 5 5 5 5.00001 5.00001 5.00001 5.00002 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5 5 5 5 5 5 5 5 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 5 5.00012 4.99946 4.99839 4.99733 </div><div class='del'>-    4.99948 5.00114 5.00158 5.00147 5.00113 5.00073 5.00043 </div><div class='del'>-    5.0002 5.00006 4.99995 4.99986 4.99973 4.99976 4.9999 5.00029 </div><div class='del'>-    5.00055 4.99704 4.99734 4.9972 5.00278 5.03354 5.07184 4.94057 </div><div class='del'>-    4.51936 3.75638 2.60982 1.23803 0.315016 0.0796102 0.0252894 </div><div class='del'>-    0.0165723 0.0827785 0.491298 1.40686 2.33436 3.1251 3.7691 </div><div class='del'>-    4.22201 4.49976 4.68115 4.80513 4.88509 4.93208 4.95861 </div><div class='del'>-    4.97579 4.98655 4.99268 4.99571 4.99771 4.99881 4.99929 </div><div class='del'>-    4.99954 4.99965 4.9997 4.99971 4.99971 4.99971 4.99971 4.99972 </div><div class='del'>-    4.99974 4.99976 4.99978 4.99981 4.99984 4.99987 4.99989 </div><div class='del'>-    4.99991 4.99991 4.99992 4.99992 4.99993 4.99997 5.00003 </div><div class='del'>-    5.00006 5.00004 5.00001 5 4.99999 4.99998 4.99998 4.99997 </div><div class='del'>-    4.99997 4.99997 4.99998 4.99998 4.99998 4.99999 4.99999 </div><div class='del'>-    4.99999 4.99999 5 5 5 5 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5 5 5 5 5 5 5 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99998 4.99998 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[34].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.00207 5.00813 5.01486 5.00156 5.0018 4.99861 4.99844 </div><div class='del'>-    4.99888 4.9993 4.99956 4.99971 4.99979 4.99983 4.99987 4.99989 </div><div class='del'>-    4.99671 4.9974 4.99864 5.00131 5.00377 5.0021 5.00039 4.99993 </div><div class='del'>-    5.00004 5.0009 5.00109 4.99636 4.98617 4.96778 4.92047 4.89528 </div><div class='del'>-    4.91112 4.9559 4.98286 4.99369 4.99812 4.99951 4.99994 5.00014 </div><div class='del'>-    5.00008 4.99994 4.99984 4.99989 4.99998 5.00004 5.00004 </div><div class='del'>-    5.00006 5.00005 5.00001 4.99997 4.99992 4.99993 4.99994 </div><div class='del'>-    4.99996 4.99996 4.99996 4.99996 4.99996 4.99996 4.99996 </div><div class='del'>-    4.99996 4.99996 4.99996 4.99996 4.99996 4.99996 4.99996 </div><div class='del'>-    4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 </div><div class='del'>-    4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 </div><div class='del'>-    4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 4.99997 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 5.00131 5.00072 4.9977 4.99811 </div><div class='del'>-    5.00325 4.99647 4.98948 4.99459 5.00262 5.00276 5.00156 </div><div class='del'>-    5.00072 5.0003 5.00013 4.99995 4.99668 4.99775 4.99917 5.00173 </div><div class='del'>-    5.00386 5.00188 4.99888 4.99757 4.99951 5.01712 5.0557 5.07088 </div><div class='del'>-    5.07704 5.07758 5.06958 5.04223 5.03331 5.0279 5.03408 5.07611 </div><div class='del'>-    5.01911 4.68594 3.99152 2.92195 1.69878 0.809 0.344091 0.154663 </div><div class='del'>-    0.0788717 0.0467212 0.0336168 0.0280514 0.0254947 0.024173 </div><div class='del'>-    0.0223567 0.0220555 0.0271514 0.0295872 0.0296052 0.0283971 </div><div class='del'>-    0.0264726 0.0241813 0.0218244 0.0195349 0.017368 0.0152495 </div><div class='del'>-    0.013295 0.0115444 0.00996982 0.00857091 0.00733891 0.00627261 </div><div class='del'>-    0.0053494 0.00456316 0.00388373 0.00331073 0.00282181 0.00240991 </div><div class='del'>-    0.00206389 0.00177187 0.00152283 0.00131167 0.00112558 0.000954373 </div><div class='del'>-    0.000805726 0.00069326 0.000600991 0.000525743 0.00047355 </div><div class='del'>-    0.00044359 0.000434815 0.000436053 0.000402511 0.000368969 </div><div class='del'>-    0.000335427 0.000301886 0.000268344 0.000234802 0.00020126 </div><div class='del'>-    0.000184967 0.000169932 0.000154896 0.000139861 0.000124825 </div><div class='del'>-    0.00010979 9.47546e-05 8.67896e-05 8.24901e-05 7.81906e-05 </div><div class='del'>-    7.38911e-05 6.95915e-05 6.5292e-05 6.09925e-05 5.66929e-05 </div><div class='del'>-    5.23934e-05 4.80939e-05 4.37943e-05 3.94948e-05 3.51953e-05 </div><div class='del'>-    3.08957e-05 2.67968e-05 2.42936e-05 2.17904e-05 1.92872e-05 </div><div class='del'>-    1.6784e-05 0.00125927 -0.00794344 -0.0305499 -0.0621697 </div><div class='del'>-    -0.0463796 -0.0224608 -0.00538381 0.00546086 0.0108675 0.012883 </div><div class='del'>-    0.0131787 0.0127271 0.0119702 0.0110398 0.0100635 0.00649617 </div><div class='del'>-    0.00489388 0.00545863 0.0098351 0.0167428 0.0126563 0.00697542 </div><div class='del'>-    0.00427027 0.00330002 0.00390774 0.00408999 -0.00259143 </div><div class='del'>-    -0.0160578 -0.0451849 -0.0409651 0.1301 0.597429 1.3848 </div><div class='del'>-    2.63426 3.81272 4.51373 4.8412 4.98731 4.88165 4.37165 3.40034 </div><div class='del'>-    2.17681 1.12217 0.505129 0.219703 0.104992 0.0622333 0.0448317 </div><div class='del'>-    0.0355782 0.0311867 0.0293529 0.0274615 0.0288739 0.0307845 </div><div class='del'>-    0.0304909 0.029245 0.0273602 0.0251006 0.022697 0.0202765 </div><div class='del'>-    0.0179357 0.0157106 0.0136562 0.0117951 0.0101273 0.00865784 </div><div class='del'>-    0.00739394 0.00634364 0.00551356 0.00480538 0.00415747 0.00356084 </div><div class='del'>-    0.00297585 0.00236711 0.00181853 0.00160713 0.00169822 0.00166542 </div><div class='del'>-    0.00145504 0.00120252 0.00109259 0.000982658 0.00087273 </div><div class='del'>-    0.000762802 0.000652874 0.000584068 0.000528263 0.000472458 </div><div class='del'>-    0.000416653 0.000360848 0.000321155 0.000301442 0.000281729 </div><div class='del'>-    0.000262016 0.000242303 0.00022259 0.000202877 0.000183164 </div><div class='del'>-    0.000163451 0.000143738 0.000124025 0.000114582 0.000107399 </div><div class='del'>-    0.000100216 9.30332e-05 8.58502e-05 7.86672e-05 7.14841e-05 </div><div class='del'>-    6.43011e-05 5.7118e-05 4.9935e-05 4.35378e-05 4.04281e-05 </div><div class='del'>-    3.73184e-05 3.42088e-05 3.10991e-05 2.79894e-05 2.48798e-05 </div><div class='del'>-    2.17701e-05 1.86604e-05 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[35].set(&lt;&lt;-'EOD')</div><div class='del'>-    7.24585e-12 2.21843e-05 3.20014e-05 1.25076e-05 -2.44947e-05 </div><div class='del'>-    1.8425e-05 5.50546e-06 3.53025e-05 -1.07551e-05 -3.94383e-06 </div><div class='del'>-    -2.27848e-06 -9.04789e-05 7.44215e-05 -2.7662e-05 0.000200038 </div><div class='del'>-    -2.11998e-05 -2.09011e-05 2.37098e-05 2.18751e-05 -2.28422e-05 </div><div class='del'>-    -6.23659e-05 3.58241e-05 1.76386e-05 -4.28311e-05 0.000355626 </div><div class='del'>-    0.00156903 0.00100999 -0.0085304 -0.02067 -0.0389485 -0.0651568 </div><div class='del'>-    -0.128475 -0.314362 -0.406837 -0.421558 -0.421277 -0.418176 </div><div class='del'>-    -0.414481 -0.410845 -0.407348 -0.403971 -0.400716 -0.397582 </div><div class='del'>-    -0.394563 -0.391658 -0.388866 -0.386178 -0.383585 -0.381094 </div><div class='del'>-    -0.378789 -0.376569 -0.37435 -0.372256 -0.370188 -0.36815 </div><div class='del'>-    -0.366422 -0.364694 -0.362967 -0.361239 -0.359511 -0.357888 </div><div class='del'>-    -0.356334 -0.354781 -0.353227 -0.351674 -0.350152 -0.348888 </div><div class='del'>-    -0.347625 -0.346361 -0.345098 -0.343834 -0.342571 -0.341307 </div><div class='del'>-    -0.340044 -0.33878 -0.337517 -0.336279 -0.335215 -0.334152 </div><div class='del'>-    -0.333088 -0.332024 -0.330961 -0.329897 -0.328833 -0.32777 </div><div class='del'>-    -0.326706 -0.325642 -0.324601 -0.323683 -0.322766 -0.321849 </div><div class='del'>-    -0.320932 -0.320014 -0.319097 -0.31818 -0.317263 -0.316345 </div><div class='del'>-    -0.315428 -0.314545 -0.313825 -0.313106 -0.312387 -0.311667 </div><div class='del'>-    -0.310948 -0.310228 -0.309509 -0.308789 -0.30807 -0.307351 </div><div class='del'>-    -0.306631 -0.305912 -0.305192 -0.304473 -0.303754 -0.303034 </div><div class='del'>-    -0.302315 -0.301595 -0.300876 -0.300157 -0.299437 -0.298716 </div><div class='del'>-    -0.29798 -0.297329 -0.296691 -0.295837 -0.29516 -0.294725 </div><div class='del'>-    -0.294044 -0.292917 -0.292351 -0.291965 -0.291365 -0.290687 </div><div class='del'>-    -0.290027 -0.289376 -0.288772 -0.288193 -0.287505 -0.286892 </div><div class='del'>-    -0.28626 -0.285714 -0.284545 -0.289246 -0.298717 -0.298492 </div><div class='del'>-    -0.214163 0.181451 0.0749974 0.0454707 0.0292987 0.0196837 </div><div class='del'>-    0.0124119 0.00884715 0.00527181 0.00585821 0.0296361 0.169856 </div><div class='del'>-    0.361207 0.538856 0.67469 0.685933 0.392802 0.17772 0.0813085 </div><div class='del'>-    0.0424601 0.0246654 0.0175258 0.0144256 0.0129859 0.012205 </div><div class='del'>-    0.0112846 0.010933 0.0134813 0.0147254 0.0147981 0.0142156 </div><div class='del'>-    0.0132732 0.0121355 0.0109587 0.00981238 0.00872731 0.00767007 </div><div class='del'>-    0.00669346 0.00581341 0.00502167 0.00431819 0.00369842 0.00316168 </div><div class='del'>-    0.00269663 0.00230035 0.00195801 0.00166928 0.00142286 0.00121522 </div><div class='del'>-    0.00104072 0.000893384 0.000767675 0.000661268 0.000567659 </div><div class='del'>-    0.000481766 0.000407101 0.000350044 0.000302721 0.000263424 </div><div class='del'>-    0.000236813 0.00022199 0.000218182 0.000219548 0.0002027 </div><div class='del'>-    0.000185853 0.000169006 0.000152158 0.000135311 0.000118463 </div><div class='del'>-    0.000101616 9.33782e-05 8.57685e-05 7.81588e-05 7.0549e-05 </div><div class='del'>-    6.29393e-05 5.53296e-05 4.77199e-05 4.36954e-05 4.15296e-05 </div><div class='del'>-    3.93637e-05 3.71978e-05 3.50319e-05 3.28661e-05 3.07002e-05 </div><div class='del'>-    2.85343e-05 2.63685e-05 2.42026e-05 2.20367e-05 1.98709e-05 </div><div class='del'>-    1.7705e-05 1.55391e-05 1.34772e-05 1.22416e-05 1.10061e-05 </div><div class='del'>-    9.77055e-06 8.535e-06 0.000631271 -0.00362586 -0.0146235 </div><div class='del'>-    -0.0308486 -0.0237466 -0.0117522 -0.00304171 0.00251033 </div><div class='del'>-    0.00531986 0.0063897 0.00657351 0.00636494 0.00599705 0.00553442 </div><div class='del'>-    0.00505994 0.00330925 0.00246671 0.0027006 0.00473161 0.00830333 </div><div class='del'>-    0.00649147 0.00356815 0.00217448 0.00187579 0.00270447 0.00219543 </div><div class='del'>-    -0.00546118 -0.0179576 -0.0445306 -0.0649309 0.0197935 0.473629 </div><div class='del'>-    0.87268 0.269542 0.0086094 0.0844602 0.606456 1.04929 0.906014 </div><div class='del'>-    0.916205 0.919425 0.872867 0.556244 0.262457 0.11838 0.0571226 </div><div class='del'>-    0.0333451 0.0237133 0.0185096 0.0159617 0.0148663 0.0138683 </div><div class='del'>-    0.0144081 0.0153797 0.0152551 0.0146487 0.0137192 0.0125973 </div><div class='del'>-    0.0113996 0.0101903 0.00901851 0.00790495 0.00687502 0.00593994 </div><div class='del'>-    0.00510092 0.00436111 0.00372439 0.0031945 0.00277537 0.00241888 </div><div class='del'>-    0.002095 0.00179943 0.00150419 0.00119264 0.00090934 0.000802394 </div><div class='del'>-    0.000852816 0.000838368 0.000730842 0.000601028 0.000546616 </div><div class='del'>-    0.000492205 0.000437793 0.000383381 0.000328969 0.00029454 </div><div class='del'>-    0.000266428 0.000238317 0.000210205 0.000182093 0.000162091 </div><div class='del'>-    0.000152145 0.000142198 0.000132252 0.000122306 0.000112359 </div><div class='del'>-    0.000102413 9.24665e-05 8.25201e-05 7.25738e-05 6.26274e-05 </div><div class='del'>-    5.78553e-05 5.42216e-05 5.05878e-05 4.69541e-05 4.33204e-05 </div><div class='del'>-    3.96867e-05 3.60529e-05 3.24192e-05 2.87855e-05 2.51518e-05 </div><div class='del'>-    2.19153e-05 2.03406e-05 1.8766e-05 1.71913e-05 1.56167e-05 </div><div class='del'>-    1.4042e-05 1.24674e-05 1.08927e-05 9.31806e-06 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[36].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.01426 5.02852 5.01923 4.77685 4.56471 4.52338 4.56813 </div><div class='del'>-    4.63122 4.693 4.74776 4.79385 4.83258 4.86358 4.88918 4.91021 </div><div class='del'>-    4.90553 4.89733 4.89554 4.91953 5.00757 5.07101 5.06318 </div><div class='del'>-    5.05241 5.05535 5.08042 5.07251 4.90973 4.56136 3.98637 </div><div class='del'>-    3.237 2.67216 2.33678 2.13529 2.00544 1.91429 1.84638 1.79461 </div><div class='del'>-    1.75338 1.71958 1.69175 1.6686 1.64918 1.63258 1.61836 1.60607 </div><div class='del'>-    1.59506 1.58483 1.57575 1.56847 1.56193 1.55538 1.54968 </div><div class='del'>-    1.54416 1.5388 1.53523 1.53165 1.52807 1.52449 1.52091 1.51771 </div><div class='del'>-    1.51477 1.51182 1.50888 1.50593 1.50309 1.50113 1.49917 </div><div class='del'>-    1.4972 1.49524 1.49328 1.49132 1.48935 1.48739 1.48543 1.48346 </div><div class='del'>-    1.48157 1.48012 1.47868 1.47724 1.47579 1.47435 1.47291 </div><div class='del'>-    1.47146 1.47002 1.46857 1.46713 1.46574 1.46462 1.4635 1.46238 </div><div class='del'>-    1.46126 1.46014 1.45902 1.4579 1.45678 1.45567 1.45455 1.45349 </div><div class='del'>-    1.45275 1.45201 1.45127 1.45053 1.44979 1.44905 1.44831 </div><div class='del'>-    1.44757 1.44683 1.44609 1.44535 1.44461 1.44387 1.44313 </div><div class='del'>-    1.44239 1.44165 1.44091 1.44017 1.43943 1.43869 1.43795 </div><div class='del'>-    1.43721 1.43874 1.43976 1.43619 1.43182 1.43726 1.43084 </div><div class='del'>-    1.42587 1.42383 1.42642 1.42728 1.42736 1.4271 1.42669 1.42621 </div><div class='del'>-    1.42569 1.41703 1.41244 1.41019 1.41199 1.41833 1.42502 </div><div class='del'>-    1.41504 1.37535 1.28381 1.44779 2.33713 3.25835 3.67554 </div><div class='del'>-    3.84975 4.01125 4.2253 4.45433 4.62215 4.74478 4.82998 4.8868 </div><div class='del'>-    4.92396 4.94768 4.96498 4.98537 5.0128 5.04467 5.06722 5.06535 </div><div class='del'>-    5.01475 4.91956 4.80647 4.7242 4.7059 4.73552 4.76379 4.81684 </div><div class='del'>-    4.87376 4.92276 4.96112 4.9884 5.0045 5.00999 5.00933 5.00619 </div><div class='del'>-    5.00384 5.00342 5.00373 5.00362 5.00309 5.00272 5.00239 </div><div class='del'>-    5.00204 5.00172 5.00146 5.00124 5.00105 5.00089 5.00076 </div><div class='del'>-    5.00065 5.00057 5.00048 5.00041 5.00034 5.00028 5.00023 </div><div class='del'>-    5.00019 5.00015 5.00015 5.00016 5.0002 5.00023 5.00021 5.00019 </div><div class='del'>-    5.00017 5.00015 5.00012 5.0001 5.00008 5.00007 5.00006 5.00005 </div><div class='del'>-    5.00004 5.00003 5.00002 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00002 5.00002 5.00002 5.00002 </div><div class='del'>-    5.00002 5.00002 5.00002 5.00002 5.00002 5.00002 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00062 4.99506 4.9835 4.96726 4.9728 4.97877 </div><div class='del'>-    4.98675 4.9966 5.00406 5.00679 5.00629 5.00561 5.00487 5.00429 </div><div class='del'>-    5.00384 5.002 5.00164 5.00229 5.00484 5.00769 5.00019 5.00242 </div><div class='del'>-    5.01319 5.0335 5.07265 5.10129 5.11485 5.12551 5.13953 5.16048 </div><div class='del'>-    5.18862 5.22811 5.25656 5.25627 5.19975 4.9139 4.24745 3.43732 </div><div class='del'>-    2.8202 2.43224 2.17409 2.01333 1.93951 1.94622 1.98861 2.02217 </div><div class='del'>-    2.05383 2.08376 2.11184 2.13793 2.16191 2.18267 2.20502 </div><div class='del'>-    2.22837 2.24958 2.26901 2.28648 2.302 2.31582 2.32802 2.33869 </div><div class='del'>-    2.34795 2.35596 2.36282 2.3687 2.37371 2.37797 2.38161 2.38476 </div><div class='del'>-    2.38743 2.3897 2.39168 2.39329 2.39463 2.39575 2.39671 2.39756 </div><div class='del'>-    2.39835 2.39907 2.39968 2.39999 2.4003 2.40061 2.40091 2.40122 </div><div class='del'>-    2.40142 2.40159 2.40176 2.40193 2.4021 2.40222 2.40228 2.40234 </div><div class='del'>-    2.4024 2.40247 2.40253 2.40259 2.40265 2.40271 2.40277 2.40284 </div><div class='del'>-    2.40287 2.40289 2.40291 2.40294 2.40296 2.40298 2.40301 </div><div class='del'>-    2.40303 2.40305 2.40308 2.4031 2.40311 2.40312 2.40313 2.40314 </div><div class='del'>-    2.40315 2.40316 2.40317 2.40318 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[37].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.01732 5.03181 5.05944 5.12686 5.20725 5.28103 5.31254 </div><div class='del'>-    5.32901 5.33709 5.3408 5.34257 5.34311 5.34347 5.34386 5.34411 </div><div class='del'>-    5.3406 5.33484 5.32942 5.32904 5.33644 5.34869 5.35001 5.34882 </div><div class='del'>-    5.34758 5.34672 5.34599 5.34496 5.34364 5.34165 5.33712 </div><div class='del'>-    5.33502 5.3366 5.34067 5.34306 5.34398 5.34434 5.34442 5.34443 </div><div class='del'>-    5.34443 5.34441 5.34439 5.34437 5.34437 5.34438 5.34438 </div><div class='del'>-    5.34438 5.34438 5.34438 5.34437 5.34437 5.34436 5.34436 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 5.34437 </div><div class='del'>-    5.34437 5.34437 5.34437 5.34437 5.34437 5.35377 5.35451 </div><div class='del'>-    5.34265 5.34488 5.35861 5.28622 4.90033 4.75027 4.89731 </div><div class='del'>-    4.97098 4.99293 4.99832 4.99909 4.99956 4.99858 4.99829 </div><div class='del'>-    4.9998 5.00035 5.0038 5.00989 5.00251 4.99438 4.9953 4.99761 </div><div class='del'>-    4.99985 5.00152 5.0011 5.00046 4.99996 4.99925 4.99862 4.99919 </div><div class='del'>-    4.99961 5.00048 5.00234 4.99654 4.98235 4.95936 4.83738 </div><div class='del'>-    4.53021 4.21004 4.00593 3.91207 3.88059 3.87822 3.89117 </div><div class='del'>-    3.91278 3.94044 3.97376 4.01152 4.05052 4.10679 4.17908 </div><div class='del'>-    4.25673 4.33414 4.40875 4.47879 4.54342 4.60258 4.65595 </div><div class='del'>-    4.70291 4.74414 4.78018 4.81185 4.83915 4.86291 4.88301 </div><div class='del'>-    4.90048 4.91528 4.92802 4.9387 4.94777 4.95539 4.9618 4.96725 </div><div class='del'>-    4.97195 4.97588 4.97932 4.98247 4.98512 4.98697 4.98831 </div><div class='del'>-    4.98919 4.99015 4.99101 4.99169 4.99222 4.99282 4.99341 </div><div class='del'>-    4.994 4.9946 4.99519 4.99578 4.99638 4.99667 4.99693 4.9972 </div><div class='del'>-    4.99747 4.99773 4.998 4.99827 4.99841 4.99849 4.99856 4.99864 </div><div class='del'>-    4.99872 4.9988 4.99888 4.99896 4.99904 4.99911 4.99919 4.99927 </div><div class='del'>-    4.99935 4.99943 4.9995 4.99955 4.9996 4.99965 4.9997 5.00736 </div><div class='del'>-    4.98252 4.87516 4.66727 4.49142 4.43103 4.4301 4.4571 4.49729 </div><div class='del'>-    4.5407 4.5835 4.62363 4.66114 4.69577 4.72738 4.74632 4.75971 </div><div class='del'>-    4.77576 4.80671 4.87073 4.91665 4.93252 4.94418 4.95331 </div><div class='del'>-    4.96094 4.96727 4.97148 4.97471 4.97612 4.98276 5.00247 </div><div class='del'>-    5.04086 5.08628 5.10673 5.08887 5.0564 5.02767 5.01336 4.99685 </div><div class='del'>-    4.97422 4.90866 4.67035 4.33117 4.07888 3.94432 3.89105 </div><div class='del'>-    3.88174 3.89292 3.91442 3.94564 3.98708 4.0355 4.09134 4.16315 </div><div class='del'>-    4.24088 4.31918 4.39527 4.46693 4.53337 4.59405 4.6486 4.69693 </div><div class='del'>-    4.73938 4.77617 4.80809 4.83551 4.85895 4.87894 4.89596 </div><div class='del'>-    4.91081 4.92417 4.93651 4.94552 4.95198 4.9565 4.96096 4.96523 </div><div class='del'>-    4.96972 4.97428 4.97868 4.98064 4.9826 4.98455 4.98651 4.98847 </div><div class='del'>-    4.98967 4.99064 4.9916 4.99257 4.99353 4.99422 4.99457 4.99493 </div><div class='del'>-    4.99528 4.99563 4.99598 4.99633 4.99668 4.99703 4.99738 </div><div class='del'>-    4.99773 4.9979 4.99804 4.99817 4.9983 4.99843 4.99856 4.99869 </div><div class='del'>-    4.99883 4.99896 4.99909 4.99921 4.99926 4.99931 4.99937 </div><div class='del'>-    4.99942 4.99948 4.99953 4.99959 4.99964 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[38].set(&lt;&lt;-'EOD')</div><div class='del'>-    4.49849 4.53282 4.58329 4.66625 4.83345 4.97823 5.0207 5.01816 </div><div class='del'>-    5.01116 5.00595 5.00296 5.00148 5.00073 5.00062 5.00033 </div><div class='del'>-    5.0003 4.99864 4.99661 4.99652 4.99928 5.00361 5.12573 5.17251 </div><div class='del'>-    5.22612 5.33479 5.44503 5.44432 5.44379 5.44334 5.443 5.44276 </div><div class='del'>-    5.44258 5.44246 5.44238 5.44232 5.44228 5.44225 5.44223 </div><div class='del'>-    5.44221 5.4422 5.44219 5.44219 5.44218 5.44218 5.44218 5.44218 </div><div class='del'>-    5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 </div><div class='del'>-    5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 </div><div class='del'>-    5.44217 5.44217 5.44217 5.44217 5.44217 5.44217 5.44216 </div><div class='del'>-    5.44216 5.44216 5.44216 5.44216 5.44216 5.44216 5.44216 </div><div class='del'>-    5.44216 5.44216 5.44216 5.44216 5.44216 5.44216 5.44216 </div><div class='del'>-    5.44216 5.44216 5.44216 5.44216 5.44215 5.44215 5.44215 </div><div class='del'>-    5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 </div><div class='del'>-    5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 </div><div class='del'>-    5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 5.44215 </div><div class='del'>-    5.44214 5.44214 5.44214 5.44214 5.44214 5.44214 5.44214 </div><div class='del'>-    5.44214 5.44214 5.44214 5.44214 5.44212 5.45159 5.45236 </div><div class='del'>-    5.44064 5.44307 5.45616 5.38122 4.77163 3.53297 2.74466 </div><div class='del'>-    2.34448 2.11802 1.9783 1.88656 1.82001 1.77389 1.72955 1.69632 </div><div class='del'>-    1.66971 1.6526 1.65236 1.56034 1.53764 1.97139 2.75096 3.39212 </div><div class='del'>-    3.74042 3.82345 3.85696 3.88547 3.91862 3.9585 4.00467 4.05903 </div><div class='del'>-    4.1254 4.19533 4.26791 4.34517 4.42112 4.49238 4.55807 4.6179 </div><div class='del'>-    4.6713 4.71815 4.75889 4.79418 4.82456 4.85062 4.87291 4.89196 </div><div class='del'>-    4.90823 4.92209 4.93388 4.9439 4.95242 4.95968 4.96585 4.97108 </div><div class='del'>-    4.9755 4.97923 4.98237 4.98503 4.98732 4.98927 4.99094 4.99233 </div><div class='del'>-    4.99353 4.99452 4.99538 4.99608 4.99668 4.99718 4.9976 4.99794 </div><div class='del'>-    4.99822 4.99847 4.99867 4.99884 4.99899 4.99913 4.99924 </div><div class='del'>-    4.99932 4.99938 4.99943 4.99947 4.99951 4.99953 4.99955 </div><div class='del'>-    4.99958 4.99961 4.99964 4.99967 4.99969 4.99972 4.99975 </div><div class='del'>-    4.99977 4.99978 4.99979 4.99981 4.99982 4.99983 4.99985 </div><div class='del'>-    4.99986 4.99986 4.99987 4.99987 4.99988 4.99988 4.99988 </div><div class='del'>-    4.99989 4.99989 4.9999 4.9999 4.99991 4.99991 4.99992 4.99992 </div><div class='del'>-    4.99993 4.99993 4.99993 4.99994 5.00381 5.00064 4.99246 </div><div class='del'>-    4.99823 5.00349 5.00076 5.00033 5.00015 5.00009 5.00007 </div><div class='del'>-    5.00005 5.00004 5.00003 5.00002 4.99988 4.99732 4.99728 </div><div class='del'>-    4.9978 5.00187 5.00927 5.08712 5.07654 4.92855 4.4863 3.76162 </div><div class='del'>-    3.00049 2.49834 2.20883 2.03492 1.92384 1.84676 1.79021 </div><div class='del'>-    1.74716 1.7132 1.68576 1.66309 1.64406 1.62785 1.61383 1.60162 </div><div class='del'>-    1.59081 1.58117 1.57253 1.56473 1.55765 1.55117 1.54527 </div><div class='del'>-    1.53988 1.53485 1.53012 1.5257 1.5216 1.51773 1.51411 1.51071 </div><div class='del'>-    1.50746 1.50438 1.50146 1.49868 1.49603 1.4935 1.49109 1.48878 </div><div class='del'>-    1.48657 1.48445 1.48242 1.48046 1.47858 1.47677 1.47502 </div><div class='del'>-    1.47333 1.4717 1.47012 1.46859 1.46711 1.46568 1.46428 1.46292 </div><div class='del'>-    1.4616 1.46034 1.45923 1.45812 1.45701 1.4559 1.45479 1.45378 </div><div class='del'>-    1.45279 1.45181 1.45082 1.44983 1.44893 1.44813 1.44732 </div><div class='del'>-    1.44652 1.44571 1.44491 1.4441 1.4433 1.44249 1.44169 1.44089 </div><div class='del'>-    1.44019 1.43951 1.43883 1.43815 1.43747 1.4368 1.43612 1.43544 </div><div class='del'>-    1.43476 1.43408 1.43342 1.43283 1.43223 1.43163 1.43104 </div><div class='del'>-    1.43044 1.42984 1.42924 1.42865 </div><div class='del'>-    EOD</div><div class='del'>-</div><div class='del'>-    @v[39].set(&lt;&lt;-'EOD')</div><div class='del'>-    5 5.01048 5.01221 4.98887 4.76261 4.54943 4.51564 4.56249 </div><div class='del'>-    4.62621 4.68843 4.74374 4.79044 4.82972 4.86127 4.88724 </div><div class='del'>-    4.90862 4.90791 4.89858 4.89589 4.91767 5.00405 5.16956 </div><div class='del'>-    5.12391 4.7557 3.87953 3.01124 2.48482 2.20424 2.03812 1.92679 </div><div class='del'>-    1.84956 1.79256 1.74907 1.71487 1.68724 1.6644 1.64513 1.6287 </div><div class='del'>-    1.61446 1.60197 1.59095 1.58117 1.57245 1.5646 1.55752 1.55109 </div><div class='del'>-    1.54516 1.53958 1.53444 1.53008 1.52606 1.52205 1.51843 </div><div class='del'>-    1.5149 1.51146 1.50893 1.50639 1.50387 1.50133 1.4988 1.49651 </div><div class='del'>-    1.49436 1.49222 1.49007 1.48793 1.48585 1.48433 1.4828 1.48128 </div><div class='del'>-    1.47975 1.47823 1.4767 1.47518 1.47365 1.47213 1.4706 1.46912 </div><div class='del'>-    1.46795 1.46678 1.46561 1.46444 1.46327 1.4621 1.46093 1.45976 </div><div class='del'>-    1.45859 1.45741 1.45628 1.45534 1.45441 1.45347 1.45254 </div><div class='del'>-    1.4516 1.45067 1.44973 1.4488 1.44786 1.44693 1.44604 1.44539 </div><div class='del'>-    1.44475 1.4441 1.44345 1.44281 1.44216 1.44151 1.44086 1.44022 </div><div class='del'>-    1.43957 1.43892 1.43828 1.43763 1.43698 1.43633 1.43569 </div><div class='del'>-    1.43504 1.43439 1.43375 1.4331 1.43245 1.4318 1.43157 1.43089 </div><div class='del'>-    1.43001 1.43042 1.42899 1.42439 1.42216 1.43447 1.44048 </div><div class='del'>-    1.43705 1.43314 1.43039 1.42861 1.42739 1.42651 1.42548 </div><div class='del'>-    1.42488 1.4243 1.42392 1.4235 1.32443 1.31149 1.78169 2.64844 </div><div class='del'>-    3.43211 3.95252 4.20231 4.3746 4.49948 4.58929 4.65742 4.71183 </div><div class='del'>-    4.77057 4.83196 4.88354 4.92894 4.96625 4.99235 5.00651 </div><div class='del'>-    5.00941 5.00813 5.00689 5.00588 5.00504 5.00431 5.00368 </div><div class='del'>-    5.00314 5.00268 5.00228 5.00194 5.00165 5.0014 5.00118 5.001 </div><div class='del'>-    5.00085 5.00072 5.00061 5.00052 5.00044 5.00037 5.00031 </div><div class='del'>-    5.00027 5.00022 5.00019 5.00016 5.00013 5.00011 5.00009 </div><div class='del'>-    5.00008 5.00007 5.00006 5.00005 5.00004 5.00003 5.00003 </div><div class='del'>-    5.00003 5.00002 5.00002 5.00002 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 5.00001 </div><div class='del'>-    5.00001 5.00001 5 5 5 5 5 4.99999 4.99999 4.99999 4.99998 </div><div class='del'>-    4.99998 4.99998 4.99998 4.99998 4.99998 4.99998 4.99999 </div><div class='del'>-    4.99999 4.99999 4.99999 4.99999 4.99999 5 5 5 5 5.00001 </div><div class='del'>-    5.00002 5.00003 5.00004 5.00022 4.99974 4.99942 4.99997 </div><div class='del'>-    5.00063 5.00002 5.00003 4.99994 4.99998 4.99999 5 5 5 5 </div><div class='del'>-    5 4.99981 4.99998 5.00004 5.00036 5.00049 5.12012 5.16315 </div><div class='del'>-    5.19712 5.21835 4.87874 4.10151 3.31555 2.74207 2.38075 </div><div class='del'>-    2.15872 2.01614 1.91886 1.84852 1.79401 1.75052 1.71508 </div><div class='del'>-    1.68672 1.66467 1.64602 1.62985 1.61576 1.60343 1.59256 </div><div class='del'>-    1.58287 1.57418 1.56632 1.55922 1.55282 1.54687 1.54132 </div><div class='del'>-    1.53618 1.53143 1.52698 1.52282 1.51895 1.51527 1.5118 1.50851 </div><div class='del'>-    1.5054 1.50244 1.49963 1.49695 1.4944 1.49196 1.48963 1.4874 </div><div class='del'>-    1.48527 1.48322 1.48124 1.47934 1.47751 1.47574 1.47403 </div><div class='del'>-    1.47239 1.4708 1.46926 1.46777 1.46632 1.46491 1.46355 1.46237 </div><div class='del'>-    1.4612 1.46002 1.45884 1.45766 1.45659 1.45555 1.45451 1.45346 </div><div class='del'>-    1.45242 1.45147 1.45062 1.44978 1.44894 1.44809 1.44725 </div><div class='del'>-    1.4464 1.44556 1.44472 1.44387 1.44303 1.4423 1.44159 1.44088 </div><div class='del'>-    1.44017 1.43947 1.43876 1.43805 1.43734 1.43664 1.43593 </div><div class='del'>-    1.43524 1.43462 1.434 1.43338 1.43276 1.43213 1.43151 1.43089 </div><div class='del'>-    1.43027 </div><div class='del'>-    EOD</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def highlightTrace(graph)</div><div class='del'>-    entry = graph.legend_get(:current)</div><div class='del'>-    active_list = graph.legend_activate</div><div class='del'>-    if active_list.include?(entry)</div><div class='del'>-      graph.legend_deactivate(entry)</div><div class='del'>-      graph.element_deactivate(entry)</div><div class='del'>-    else</div><div class='del'>-      graph.legend_activate(entry)</div><div class='del'>-      graph.element_activate(entry)</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'>-BLT_Graph_Demo.new</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/graph7.rb b/ext/tk/sample/tkextlib/blt/graph7.rb<br/>deleted file mode 100644<br/>index 27fbe53d97..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/graph7.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/graph7.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-length = 250000</div><div class='del'>-graph = Tk::BLT::Graph.new(:title=&gt;"Scatter Plot\n#{length} points")</div><div class='del'>-graph.xaxis_configure(:loose=&gt;false, :title=&gt;'X Axis Label')</div><div class='del'>-graph.yaxis_configure(:title=&gt;'Y Axis Label')</div><div class='del'>-graph.legend_configure(:activerelief=&gt;:sunken, :background=&gt;'')</div><div class='del'>-</div><div class='del'>-Tk::BLT::Table.add(Tk.root, graph, [0,0], :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-v_x = Tk::BLT::Vector.new(length)</div><div class='del'>-v_y = Tk::BLT::Vector.new(length)</div><div class='del'>-v_x.expr("random(#{v_x})")</div><div class='del'>-v_y.expr("random(#{v_y})")</div><div class='del'>-v_x.sort(v_y)</div><div class='del'>-</div><div class='del'>-plot = Tk::BLT::PlotComponent::Element.new(graph, :symbol=&gt;:square, </div><div class='del'>-                                           :color=&gt;'green4', :fill=&gt;'green2', </div><div class='del'>-                                           :linewidth=&gt;0, :outlinewidth=&gt;1, </div><div class='del'>-                                           :pixels=&gt;4, :label=&gt;'plot', </div><div class='del'>-                                           :xdata=&gt;v_x, :ydata=&gt;v_y)</div><div class='del'>-</div><div class='del'>-Tk.root.minsize(0, 0)</div><div class='del'>-</div><div class='del'>-#graph.zoom_stack</div><div class='del'>-#graph.crosshairs</div><div class='del'>-#graph.active_legend</div><div class='del'>-#graph.closest_point</div><div class='del'>-Tk::BLT.zoom_stack(graph)</div><div class='del'>-Tk::BLT.crosshairs(graph)</div><div class='del'>-Tk::BLT.active_legend(graph)</div><div class='del'>-Tk::BLT.closest_point(graph)</div><div class='del'>-</div><div class='del'>-Tk::BLT::Busy.hold(graph)</div><div class='del'>-Tk.update</div><div class='del'>-Tk::BLT::Busy.release(graph)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/graph7a.rb b/ext/tk/sample/tkextlib/blt/graph7a.rb<br/>deleted file mode 100644<br/>index a014f72fc7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/graph7a.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/graph7a.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,63 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-file = File.join(File.dirname(File.expand_path(__FILE__)), </div><div class='del'>-                 'images', 'buckskin.gif')</div><div class='del'>-bgTexture = TkPhotoImage.new(:file=&gt;file)</div><div class='del'>-</div><div class='del'>-TkOption.add('*Graph.Tile', bgTexture)</div><div class='del'>-TkOption.add('*Label.Tile', bgTexture)</div><div class='del'>-TkOption.add('*Frame.Tile', bgTexture)</div><div class='del'>-TkOption.add('*Htext.Tile', bgTexture)</div><div class='del'>-TkOption.add('*TileOffset', 0)</div><div class='del'>-TkOption.add('*HighlightThickness',   0)</div><div class='del'>-TkOption.add('*Element.ScaleSybols',  false)</div><div class='del'>-TkOption.add('*Element.Smooth',       :linear)</div><div class='del'>-TkOption.add('*activeLine.Color',     'yellow4')</div><div class='del'>-TkOption.add('*activeLine.Fill',      'yellow')</div><div class='del'>-TkOption.add('*activeLine.LineWidth', 0)</div><div class='del'>-TkOption.add('*Element.Pixels',       3)</div><div class='del'>-TkOption.add('*Graph.halo',           '7i')</div><div class='del'>-</div><div class='del'>-if Tk.root.winfo_screenvisual != 'staticgray'</div><div class='del'>-  TkOption.add('*print.background', 'yellow')</div><div class='del'>-  TkOption.add('*quit.background',  'red')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-length = 250000</div><div class='del'>-graph = Tk::BLT::Graph.new(:title=&gt;"Scatter Plot\n#{length} points")</div><div class='del'>-graph.xaxis_configure(:loose=&gt;false, :title=&gt;'X Axis Label')</div><div class='del'>-graph.yaxis_configure(:title=&gt;'Y Axis Label')</div><div class='del'>-graph.legend_configure(:activerelief=&gt;:sunken, :background=&gt;'')</div><div class='del'>-</div><div class='del'>-Tk::BLT::Table.add(Tk.root, graph, [0,0], :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-v_x = Tk::BLT::Vector.new(length)</div><div class='del'>-v_y = Tk::BLT::Vector.new(length)</div><div class='del'>-v_x.expr("random(#{v_x})")</div><div class='del'>-v_y.expr("random(#{v_y})")</div><div class='del'>-v_x.sort(v_y)</div><div class='del'>-</div><div class='del'>-plot = Tk::BLT::PlotComponent::Element.new(graph, :symbol=&gt;:square, </div><div class='del'>-                                           :color=&gt;'green4', :fill=&gt;'green2', </div><div class='del'>-                                           :linewidth=&gt;0, :outlinewidth=&gt;1, </div><div class='del'>-                                           :pixels=&gt;4, :label=&gt;'plot', </div><div class='del'>-                                           :xdata=&gt;v_x, :ydata=&gt;v_y)</div><div class='del'>-</div><div class='del'>-Tk.root.minsize(0, 0)</div><div class='del'>-</div><div class='del'>-#graph.zoom_stack</div><div class='del'>-#graph.crosshairs</div><div class='del'>-#graph.active_legend</div><div class='del'>-#graph.closest_point</div><div class='del'>-Tk::BLT.zoom_stack(graph)</div><div class='del'>-Tk::BLT.crosshairs(graph)</div><div class='del'>-Tk::BLT.active_legend(graph)</div><div class='del'>-Tk::BLT.closest_point(graph)</div><div class='del'>-</div><div class='del'>-Tk::BLT::Busy.hold(graph)</div><div class='del'>-Tk.update</div><div class='del'>-Tk::BLT::Busy.release(graph)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/graph7b.rb b/ext/tk/sample/tkextlib/blt/graph7b.rb<br/>deleted file mode 100644<br/>index c589f18d86..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/graph7b.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/graph7b.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,41 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-length = 250000</div><div class='del'>-graph = Tk::BLT::Graph.new(:title=&gt;"Scatter Plot\n#{length} points")</div><div class='del'>-graph.xaxis_configure(:loose=&gt;false, :title=&gt;'X Axis Label')</div><div class='del'>-graph.yaxis_configure(:title=&gt;'Y Axis Label')</div><div class='del'>-graph.legend_configure(:activerelief=&gt;:sunken, :background=&gt;'')</div><div class='del'>-</div><div class='del'>-Tk::BLT::Table.add(Tk.root, graph, [0,0], :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-x = Array.new(length)</div><div class='del'>-y = Array.new(length)</div><div class='del'>-(0...length).each{|i|</div><div class='del'>-  x[i] = rand</div><div class='del'>-  y[i] = rand</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-plot = Tk::BLT::PlotComponent::Element.new(graph, :symbol=&gt;:square, </div><div class='del'>-                                           :color=&gt;'green4', :fill=&gt;'green2', </div><div class='del'>-                                           :linewidth=&gt;0, :outlinewidth=&gt;1, </div><div class='del'>-                                           :pixels=&gt;4, :label=&gt;'plot', </div><div class='del'>-                                           :xdata=&gt;x, :ydata=&gt;y)</div><div class='del'>-</div><div class='del'>-Tk.root.minsize(0, 0)</div><div class='del'>-</div><div class='del'>-#graph.zoom_stack</div><div class='del'>-#graph.crosshairs</div><div class='del'>-#graph.active_legend</div><div class='del'>-#graph.closest_point</div><div class='del'>-Tk::BLT.zoom_stack(graph)</div><div class='del'>-Tk::BLT.crosshairs(graph)</div><div class='del'>-Tk::BLT.active_legend(graph)</div><div class='del'>-Tk::BLT.closest_point(graph)</div><div class='del'>-</div><div class='del'>-Tk::BLT::Busy.hold(graph)</div><div class='del'>-Tk.update</div><div class='del'>-Tk::BLT::Busy.release(graph)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/graph7c.rb b/ext/tk/sample/tkextlib/blt/graph7c.rb<br/>deleted file mode 100644<br/>index 495b66f4af..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/graph7c.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/graph7c.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,45 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-length = 250000</div><div class='del'>-graph = Tk::BLT::Graph.new(:title=&gt;"Scatter Plot\n#{length} points")</div><div class='del'>-graph.xaxis_configure(:loose=&gt;false, :title=&gt;'X Axis Label')</div><div class='del'>-graph.yaxis_configure(:title=&gt;'Y Axis Label')</div><div class='del'>-graph.legend_configure(:activerelief=&gt;:sunken, :background=&gt;'')</div><div class='del'>-</div><div class='del'>-Tk::BLT::Table.add(Tk.root, graph, [0,0], :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-v_x = Tk::BLT::Vector.new(length)</div><div class='del'>-v_y = Tk::BLT::Vector.new(length)</div><div class='del'>-x = Array.new(length)</div><div class='del'>-y = Array.new(length)</div><div class='del'>-(0...length).each{|i|</div><div class='del'>-  x[i] = rand</div><div class='del'>-  y[i] = rand</div><div class='del'>-}</div><div class='del'>-v_x.set(x)</div><div class='del'>-v_y.set(y)</div><div class='del'>-</div><div class='del'>-plot = Tk::BLT::PlotComponent::Element.new(graph, :symbol=&gt;:square, </div><div class='del'>-                                           :color=&gt;'green4', :fill=&gt;'green2', </div><div class='del'>-                                           :linewidth=&gt;0, :outlinewidth=&gt;1, </div><div class='del'>-                                           :pixels=&gt;4, :label=&gt;'plot', </div><div class='del'>-                                           :xdata=&gt;v_x, :ydata=&gt;v_y)</div><div class='del'>-</div><div class='del'>-Tk.root.minsize(0, 0)</div><div class='del'>-</div><div class='del'>-#graph.zoom_stack</div><div class='del'>-#graph.crosshairs</div><div class='del'>-#graph.active_legend</div><div class='del'>-#graph.closest_point</div><div class='del'>-Tk::BLT.zoom_stack(graph)</div><div class='del'>-Tk::BLT.crosshairs(graph)</div><div class='del'>-Tk::BLT.active_legend(graph)</div><div class='del'>-Tk::BLT.closest_point(graph)</div><div class='del'>-</div><div class='del'>-Tk::BLT::Busy.hold(graph)</div><div class='del'>-Tk.update</div><div class='del'>-Tk::BLT::Busy.release(graph)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/images/buckskin.gif b/ext/tk/sample/tkextlib/blt/images/buckskin.gif<br/>deleted file mode 100644<br/>index e2d7be9d62..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/images/buckskin.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/images/buckskin.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/images/chalk.gif b/ext/tk/sample/tkextlib/blt/images/chalk.gif<br/>deleted file mode 100644<br/>index 30d29a7221..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/images/chalk.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/images/chalk.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/images/qv100.t.gif b/ext/tk/sample/tkextlib/blt/images/qv100.t.gif<br/>deleted file mode 100644<br/>index 1e738ee86b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/images/qv100.t.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/images/qv100.t.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/images/rain.gif b/ext/tk/sample/tkextlib/blt/images/rain.gif<br/>deleted file mode 100644<br/>index d7bb417939..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/images/rain.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/images/rain.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/images/sample.gif b/ext/tk/sample/tkextlib/blt/images/sample.gif<br/>deleted file mode 100644<br/>index 1d8a4010c3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/images/sample.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/images/sample.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/pareto.rb b/ext/tk/sample/tkextlib/blt/pareto.rb<br/>deleted file mode 100644<br/>index 94d5f3f97f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/pareto.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/pareto.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,90 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-# Example of a pareto chart.</div><div class='del'>-#</div><div class='del'>-# The pareto chart mixes line and bar elements in the same graph.</div><div class='del'>-# Each processing operating is represented by a bar element.  The</div><div class='del'>-# total accumulated defects is displayed with a single line element.</div><div class='del'>-b = Tk::BLT::Barchart.new(:title=&gt;'Defects Found During Inspection', </div><div class='del'>-                          :font=&gt;'Helvetica 12', :plotpady=&gt;[12, 4], </div><div class='del'>-                          :width=&gt;'6i', :height=&gt;'5i')</div><div class='del'>-Tk::BLT::Table.add(Tk.root, b, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-data = [</div><div class='del'>-  ["Spot Weld",  82,   'yellow'], </div><div class='del'>-  ["Lathe",      49,   'orange'], </div><div class='del'>-  ["Gear Cut",   38,   'green'], </div><div class='del'>-  ["Drill",      24,   'blue'], </div><div class='del'>-  ["Grind",      17,   'red'], </div><div class='del'>-  ["Lapping",    12,   'brown'], </div><div class='del'>-  ["Press",       8,   'purple'], </div><div class='del'>-  ["De-burr",     4,   'pink'], </div><div class='del'>-  ["Packaging",   3,   'cyan'], </div><div class='del'>-  ["Other",      12,   'magenta']</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-# Create an X-Y graph line element to trace the accumulated defects.</div><div class='del'>-b.line_create('accum', :label=&gt;'', :symbol=&gt;:none, :color=&gt;'red')</div><div class='del'>-</div><div class='del'>-# Define a bitmap to be used to stipple the background of each bar.</div><div class='del'>-pattern1 = Tk::BLT::Bitmap.define([ [4, 4], [1, 2, 4, 8] ])</div><div class='del'>-</div><div class='del'>-# For each process, create a bar element to display the magnitude.</div><div class='del'>-count = 0</div><div class='del'>-sum   = 0</div><div class='del'>-ydata = [0]</div><div class='del'>-xdata = [0]</div><div class='del'>-labels = []</div><div class='del'>-</div><div class='del'>-data.each{|label, value, color|</div><div class='del'>-  count += 1</div><div class='del'>-  b.element_create(label, :xdata=&gt;count, :ydata=&gt;value, :foreground=&gt;color, </div><div class='del'>-                   :relief=&gt;:solid, :borderwidth=&gt;1, :stipple=&gt;pattern1, </div><div class='del'>-                   :background=&gt;'lightblue')</div><div class='del'>-  labels[count] = label</div><div class='del'>-  # Get the total number of defects.</div><div class='del'>-  sum += value</div><div class='del'>-  ydata &lt;&lt; sum</div><div class='del'>-  xdata &lt;&lt; count</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Configure the coordinates of the accumulated defects, </div><div class='del'>-# now that we know what they are.</div><div class='del'>-b.element_configure('accum', :xdata=&gt;xdata, :ydata=&gt;ydata)</div><div class='del'>-</div><div class='del'>-# Add text markers to label the percentage of total at each point.</div><div class='del'>-xdata.zip(ydata){|x, y|</div><div class='del'>-  percent = (y * 100.0) / sum</div><div class='del'>-  if x == 0</div><div class='del'>-    text = ' 0%'</div><div class='del'>-  else</div><div class='del'>-    text = '%.1f' % percent</div><div class='del'>-  end</div><div class='del'>-  b.marker_create(:text, :coords=&gt;[x, y], :text=&gt;text, :font=&gt;'Helvetica 10', </div><div class='del'>-                  :foreground=&gt;'red4', :anchor=&gt;:center, :yoffset=&gt;-5)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Display an auxillary y-axis for percentages.</div><div class='del'>-b.axis_configure('y2', :hide=&gt;false, :min=&gt;0.0, :max=&gt;100.0, </div><div class='del'>-                 :title=&gt;'Percentage')</div><div class='del'>-</div><div class='del'>-# Title the y-axis</div><div class='del'>-b.axis_configure('y', :title=&gt;'Defects')</div><div class='del'>-</div><div class='del'>-# Configure the x-axis to display the process names, instead of numbers.</div><div class='del'>-b.axis_configure('x', :title=&gt;'Process', :rotate=&gt;90, :subdivisions=&gt;0, </div><div class='del'>-                 :command=&gt;proc{|w, val|</div><div class='del'>-                   val = val.round</div><div class='del'>-                   labels[val]? labels[val]: val</div><div class='del'>-                  })</div><div class='del'>-</div><div class='del'>-# No legend needed.</div><div class='del'>-b.legend_configure(:hide=&gt;true)</div><div class='del'>-</div><div class='del'>-# Configure the grid lines.</div><div class='del'>-b.gridline_configure(:mapx=&gt;:x, :color=&gt;'lightblue')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/plot1.rb b/ext/tk/sample/tkextlib/blt/plot1.rb<br/>deleted file mode 100644<br/>index 07dff48292..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/plot1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/plot1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,9 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-graph = Tk::BLT::Graph.new.pack</div><div class='del'>-plot = Tk::BLT::PlotComponent::Element.new(graph, :linewidth=&gt;0, :label=&gt;'foo')</div><div class='del'>-plot.data([[1.0, 3.4], [1.1, 2.8], [1.2, 3.1], [1.4, 2.9]].flatten)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/plot1b.rb b/ext/tk/sample/tkextlib/blt/plot1b.rb<br/>deleted file mode 100644<br/>index eb41e361f9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/plot1b.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/plot1b.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-graph = Tk::BLT::Graph.new.pack</div><div class='del'>-plot = graph.element_create</div><div class='del'>-plot.configure(:linewidth=&gt;0, :label=&gt;'foo', </div><div class='del'>-               :data=&gt;[[1.0, 3.4], [1.1, 2.8], [1.2, 3.1], [1.4, 2.9]].flatten)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/readme.txt b/ext/tk/sample/tkextlib/blt/readme.txt<br/>deleted file mode 100644<br/>index fe12dd88a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/readme.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/readme.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-The scripts and image files in this directory are based on demo files</div><div class='del'>-of Tcl/Tk's BLT extention. </div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/scripts/stipples.rb b/ext/tk/sample/tkextlib/blt/scripts/stipples.rb<br/>deleted file mode 100644<br/>index 47f3c4d063..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/scripts/stipples.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/scripts/stipples.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,156 +0,0 @@</div><div class='del'>-$stipples = {} unless $stipples</div><div class='del'>-</div><div class='del'>-$stipples['bdiagonal1'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define bdiagonal1_width 8</div><div class='del'>-#define bdiagonal1_height 8</div><div class='del'>-static unsigned char bdiagonal1_bits[] = {</div><div class='del'>-   0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['bdiagonal2'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define bdiagonal2_width 8</div><div class='del'>-#define bdiagonal2_height 8</div><div class='del'>-static unsigned char bdiagonal2_bits[] = {</div><div class='del'>-   0x08, 0x04, 0x02, 0x01, 0x80, 0x40, 0x20, 0x10};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['checker2'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define checker2_width 8</div><div class='del'>-#define checker2_height 8</div><div class='del'>-static unsigned char checker2_bits[] = {</div><div class='del'>-   0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-$stipples['checker3'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define checker3_width 8</div><div class='del'>-#define checker3_height 8</div><div class='del'>-static unsigned char checker3_bits[] = {</div><div class='del'>-   0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['cross1'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define cross1_width 8</div><div class='del'>-#define cross1_height 8</div><div class='del'>-static unsigned char cross_bits[] = {</div><div class='del'>-   0xff, 0xaa, 0xff, 0xaa, 0xff, 0xaa, 0xff, 0xaa};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['cross2'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define cross2_width 8</div><div class='del'>-#define cross2_height 8</div><div class='del'>-static unsigned char cross2_bits[] = {</div><div class='del'>-   0xff, 0x88, 0x88, 0x88, 0xff, 0x88, 0x88, 0x88};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['cross3'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define cross3_width 8</div><div class='del'>-#define cross3_height 8</div><div class='del'>-static unsigned char cross3_bits[] = {</div><div class='del'>-   0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['crossdiag'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define crossdiag_width 8</div><div class='del'>-#define crossdiag_height 8</div><div class='del'>-static unsigned char crossdiag2_bits[] = {</div><div class='del'>-   0x18, 0x24, 0x42, 0x81, 0x81, 0x42, 0x24, 0x18};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['dot1'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define dot1_width 8</div><div class='del'>-#define dot1_height 8</div><div class='del'>-static unsigned char dot1_bits[] = {</div><div class='del'>-   0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['dot2'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define dot2_width 8</div><div class='del'>-#define dot2_height 8</div><div class='del'>-static unsigned char dot2_bits[] = {</div><div class='del'>-   0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['dot3'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define dot3_width 8</div><div class='del'>-#define dot3_height 8</div><div class='del'>-static unsigned char dot3_bits[] = {</div><div class='del'>-   0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['dot4'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define dot4_width 8</div><div class='del'>-#define dot4_height 8</div><div class='del'>-static unsigned char dot4_bits[] = {</div><div class='del'>-   0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['fdiagonal1'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define fdiagonal1_width 8</div><div class='del'>-#define fdiagonal1_height 8</div><div class='del'>-static unsigned char fdiagonal1_bits[] = {</div><div class='del'>-   0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['fdiagonal2'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define fdiagonal2_width 8</div><div class='del'>-#define fdiagonal2_height 8</div><div class='del'>-static unsigned char fdiagonal2_bits[] = {</div><div class='del'>-   0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['hline1'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define hline1_width 8</div><div class='del'>-#define hline1_height 8</div><div class='del'>-static unsigned char hline1_bits[] = {</div><div class='del'>-   0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['hline2'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define hline2_width 8</div><div class='del'>-#define hline2_height 8</div><div class='del'>-static unsigned char hline2_bits[] = {</div><div class='del'>-   0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['lbottom'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define lbottom_width 8</div><div class='del'>-#define lbottom_height 8</div><div class='del'>-static unsigned char lbottom_bits[] = {</div><div class='del'>-   0x00, 0x11, 0x11, 0x77, 0x00, 0x11, 0x11, 0x77};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['ltop'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define ltop_width 8</div><div class='del'>-#define ltop_height 8</div><div class='del'>-static unsigned char ltop_bits[] = {</div><div class='del'>-   0xee, 0x88, 0x88, 0x00, 0xee, 0x88, 0x88, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['rbottom'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define rbottom_width 8</div><div class='del'>-#define rbottom_height 8</div><div class='del'>-static unsigned char rbottom_bits[] = {</div><div class='del'>-   0x00, 0x88, 0x88, 0xee, 0x00, 0x88, 0x88, 0xee};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['rtop'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define rtop_width 8</div><div class='del'>-#define rtop_height 8</div><div class='del'>-static unsigned char rtop_bits[] = {</div><div class='del'>-   0x77, 0x11, 0x11, 0x00, 0x77, 0x11, 0x11, 0x00};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['vline1'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define vline1_width 8</div><div class='del'>-#define vline1_height 8</div><div class='del'>-static unsigned char vline1_bits[] = {</div><div class='del'>-   0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55};</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-$stipples['vline2'] = Tk::BLT::Bitmap.new(&lt;&lt;EOD)</div><div class='del'>-#define vline2_width 8</div><div class='del'>-#define vline2_height 8</div><div class='del'>-static unsigned char vline2_bits[] = {</div><div class='del'>-   0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33};</div><div class='del'>-EOD</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/winop1.rb b/ext/tk/sample/tkextlib/blt/winop1.rb<br/>deleted file mode 100644<br/>index e94138cd94..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/winop1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/winop1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-file = File.join(File.dirname(File.expand_path(__FILE__)), </div><div class='del'>-                 'images', 'sample.gif')</div><div class='del'>-if File.exist?(file)</div><div class='del'>-  src = TkPhotoImage.new(:file=&gt;file)</div><div class='del'>-else</div><div class='del'>-  fail RuntimeError, 'no image file'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-width = src.width</div><div class='del'>-height = src.height</div><div class='del'>-</div><div class='del'>-TkOption.add('*Label.font', '*helvetica*10*')</div><div class='del'>-TkOption.add('*Label.background', 'white')</div><div class='del'>-</div><div class='del'>-l_img0 = TkLabel.new(:image=&gt;src)</div><div class='del'>-l_hdr0 = TkLabel.new(:text=&gt;"#{width} x #{height}")</div><div class='del'>-l_ftr0 = TkLabel.new(:text=&gt;'100%')</div><div class='del'>-Tk.root.background('white')</div><div class='del'>-</div><div class='del'>-(2..10).each{|i|</div><div class='del'>-  iw = width/i</div><div class='del'>-  ih = height/i</div><div class='del'>-  r = '%6g'%(100.0/i)</div><div class='del'>-  dst = TkPhotoImage.new(:width=&gt;iw, :height=&gt;ih)</div><div class='del'>-  Tk::BLT::Winop.image_resample(src, dst, :sinc)</div><div class='del'>-  l_hdr = TkLabel.new(:text=&gt;"#{iw} x #{ih}")</div><div class='del'>-  l_ftr = TkLabel.new(:text=&gt;"#{r}%")</div><div class='del'>-  l_img = TkLabel.new(:image=&gt;dst)</div><div class='del'>-  Tk::BLT::Table.add(Tk.root, </div><div class='del'>-                     [0,i], l_hdr, </div><div class='del'>-                     [1,i], l_img, </div><div class='del'>-                     [2,i], l_ftr)</div><div class='del'>-  Tk.update</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/blt/winop2.rb b/ext/tk/sample/tkextlib/blt/winop2.rb<br/>deleted file mode 100644<br/>index 1f674ee893..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/blt/winop2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/blt/winop2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,28 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/blt'</div><div class='del'>-</div><div class='del'>-file = File.join(File.dirname(File.expand_path(__FILE__)), </div><div class='del'>-                 'images', 'qv100.t.gif')</div><div class='del'>-if File.exist?(file)</div><div class='del'>-  src = TkPhotoImage.new(:file=&gt;file)</div><div class='del'>-else</div><div class='del'>-  fail RuntimeError, 'no image file'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-width = src.width</div><div class='del'>-height = src.height</div><div class='del'>-</div><div class='del'>-TkOption.add('*Label.font', '*helvetica*10*')</div><div class='del'>-TkOption.add('*Label.background', 'white')</div><div class='del'>-</div><div class='del'>-[0, 90, 180, 270, 360, 45].each_with_index{|r, i|</div><div class='del'>-  dest = TkPhotoImage.new</div><div class='del'>-  Tk::BLT::Winop.image_rotate(src, dest, r)</div><div class='del'>-  l_txt = TkLabel.new(:text=&gt;"#{r} degrees")</div><div class='del'>-  l_img = TkLabel.new(:image=&gt;dest)</div><div class='del'>-  Tk::BLT::Table.add(Tk.root, [0,i], l_img, [1,i], l_txt)</div><div class='del'>-  Tk.update</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt<br/>deleted file mode 100644<br/>index 0c4c16fe47..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +0,0 @@</div><div class='del'>-</div><div class='del'>-  ######################################################################</div><div class='del'>-  ###  The following text is the original 'LICENSE.txt' of BWidget   ###</div><div class='del'>-  ###  extension.                                                    ###</div><div class='del'>-  ###  Original Tcl source files are not include in this directry,   ###</div><div class='del'>-  ###  because of all of them are rewrited to Ruby files.            ###</div><div class='del'>-  ###  However, the bitmap data files ('bwidgtet.xbm' and 'x1.xbm')  ###</div><div class='del'>-  ###  included in this directory are quoted from BWidget source     ###</div><div class='del'>-  ###  archive. So, those bitmaps are under the following license.   ###</div><div class='del'>-  ######################################################################</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-BWidget ToolKit</div><div class='del'>-Copyright (c) 1998-1999 UNIFIX. </div><div class='del'>-Copyright (c) 2001-2002 ActiveState Corp. </div><div class='del'>-</div><div class='del'>-The following terms apply to all files associated with the software</div><div class='del'>-unless explicitly 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/tkextlib/bwidget/basic.rb b/ext/tk/sample/tkextlib/bwidget/basic.rb<br/>deleted file mode 100644<br/>index c1521651fd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/basic.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/basic.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,198 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  basic demo  ---  called from demo.rb</div><div class='del'>-#</div><div class='del'>-unless Object.const_defined?('DemoVar')</div><div class='del'>-  fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module DemoBasic</div><div class='del'>-  @@var   = TkVariable.new_hash</div><div class='del'>-  @@after = nil</div><div class='del'>-  @@count = 0</div><div class='del'>-</div><div class='del'>-  def self.create(nb)</div><div class='del'>-    frame = nb.insert('end', 'demoBasic', :text=&gt;'Basic')</div><div class='del'>-    topf  = TkFrame.new(frame)</div><div class='del'>-</div><div class='del'>-    titf1 = Tk::BWidget::TitleFrame.new(topf, :text=&gt;'Label')</div><div class='del'>-    titf2 = Tk::BWidget::TitleFrame.new(topf, :text=&gt;'Entry')</div><div class='del'>-</div><div class='del'>-    titf3 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'Button and ArrowButton')</div><div class='del'>-</div><div class='del'>-    _label(titf1.get_frame)</div><div class='del'>-    _entry(titf2.get_frame)</div><div class='del'>-    _button(titf3.get_frame)</div><div class='del'>-</div><div class='del'>-    Tk.pack(titf1, titf2, :side=&gt;:left, :fill=&gt;:both, :padx=&gt;4, :expand=&gt;true)</div><div class='del'>-    topf.pack(:pady=&gt;2, :fill=&gt;:x)</div><div class='del'>-    titf3.pack(:pady=&gt;2, :padx=&gt;4, :fill=&gt;:x)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._label(parent)</div><div class='del'>-    lab = Tk::BWidget::Label.new(parent, :text=&gt;'This is a Label widget', </div><div class='del'>-                                 :helptext=&gt;'Label widget')</div><div class='del'>-    chk = TkCheckbutton.new(parent, :text=&gt;'Disabled', </div><div class='del'>-                            :variable=&gt;@@var.ref(lab, 'state'), </div><div class='del'>-                            :onvalue=&gt;'disabled', :offvalue=&gt;'normal', </div><div class='del'>-                            :command=&gt;proc{lab[:state] = @@var[lab, 'state']})</div><div class='del'>-    lab.pack(:anchor=&gt;:w, :pady=&gt;4)</div><div class='del'>-    chk.pack(:anchor=&gt;:w)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._entry(parent)</div><div class='del'>-    ent = Tk::BWidget::Entry.new(parent, :text=&gt;'Press enter', </div><div class='del'>-                                 :helptext=&gt;'Entry widtet', </div><div class='del'>-                                 :command=&gt;proc{</div><div class='del'>-                                   @@var['entcmd'] = 'command called'</div><div class='del'>-                                   Tk.after(500, proc{@@var['entcmd'] = ''})</div><div class='del'>-                                 })</div><div class='del'>-</div><div class='del'>-    chk1 = TkCheckbutton.new(parent, :text=&gt;'Disabled', </div><div class='del'>-                             :variable=&gt;@@var.ref(ent, 'state'), </div><div class='del'>-                             :onvalue=&gt;'disabled', :offvalue=&gt;'normal', </div><div class='del'>-                             :command=&gt;proc{ent.state = @@var[ent, 'state']})</div><div class='del'>-</div><div class='del'>-    chk2 = TkCheckbutton.new(parent, :text=&gt;'Non editable', </div><div class='del'>-                             :variable=&gt;@@var.ref(ent, 'editable'), </div><div class='del'>-                             :onvalue=&gt;false, :offvalue=&gt;true, </div><div class='del'>-                             :command=&gt;proc{</div><div class='del'>-                               ent.editable = @@var[ent, 'editable']</div><div class='del'>-                             })</div><div class='del'>-</div><div class='del'>-    lab = TkLabel.new(parent, :textvariable=&gt;@@var.ref('entcmd'), </div><div class='del'>-                      :foreground=&gt;'red')</div><div class='del'>-</div><div class='del'>-    ent.pack(:pady=&gt;4, :anchor=&gt;:w)</div><div class='del'>-    Tk.pack(chk1, chk2, :anchor=&gt;:w)</div><div class='del'>-    lab.pack(:pady=&gt;4)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._button(parent)</div><div class='del'>-    frame = TkFrame.new(parent)</div><div class='del'>-    but  = Tk::BWidget::Button.new(frame, :text=&gt;'Press me!', </div><div class='del'>-                                   :repeatdelay=&gt;300, </div><div class='del'>-                                   :command=&gt;proc{_butcmd('command')}, </div><div class='del'>-                                   :helptext=&gt;'This is a Button widget')</div><div class='del'>-</div><div class='del'>-    sep1 = Tk::BWidget::Separator.new(frame, :orient=&gt;:vertical)</div><div class='del'>-    arr1 = Tk::BWidget::ArrowButton.new(frame, :type=&gt;:button, </div><div class='del'>-                :width=&gt;25, :height=&gt;25, :repeatdelay=&gt;300, </div><div class='del'>-                :command=&gt;proc{_butcmd('command')}, </div><div class='del'>-                :helptext=&gt;"This is an ArrowButton widget\nof type button")</div><div class='del'>-</div><div class='del'>-    sep2 = Tk::BWidget::Separator.new(frame, :orient=&gt;:vertical)</div><div class='del'>-    arr2 = Tk::BWidget::ArrowButton.new(frame, :type=&gt;:arrow, </div><div class='del'>-                :width=&gt;25, :height=&gt;25, :relief=&gt;:sunken, </div><div class='del'>-                :ipadx=&gt;0, :ipady=&gt;0, :repeatdelay=&gt;300, </div><div class='del'>-                :command=&gt;proc{_butcmd('command')}, </div><div class='del'>-                :helptext=&gt;"This is an ArrowButton widget\nof type arrow")</div><div class='del'>-</div><div class='del'>-    but.pack(:side=&gt;:left, :padx=&gt;4)</div><div class='del'>-    sep1.pack(:side=&gt;:left, :padx=&gt;4, :fill=&gt;:y)</div><div class='del'>-    arr1.pack(:side=&gt;:left, :padx=&gt;4)</div><div class='del'>-    sep2.pack(:side=&gt;:left, :padx=&gt;4, :fill=&gt;:y)</div><div class='del'>-    arr2.pack(:side=&gt;:left, :padx=&gt;4)</div><div class='del'>-    frame.pack</div><div class='del'>-</div><div class='del'>-    Tk::BWidget::Separator.new(parent, </div><div class='del'>-                               :orient=&gt;:horizontal).pack(:fill=&gt;:x, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-    labf1 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Command', </div><div class='del'>-                                        :side=&gt;:top, :anchor=&gt;:w, </div><div class='del'>-                                        :relief=&gt;:sunken, :borderwidth=&gt;1)</div><div class='del'>-    subf = labf1.get_frame</div><div class='del'>-    chk1 = TkCheckbutton.new(subf, :text=&gt;'Disabled', </div><div class='del'>-                             :variable=&gt;@@var.ref('bstate'), </div><div class='del'>-                             :onvalue=&gt;'disabled', :offvalue=&gt;'normal', </div><div class='del'>-                             :command=&gt;proc{_bstate(@@var['bstate'], </div><div class='del'>-                                                     but, arr1, arr2)})</div><div class='del'>-    chk2 = TkCheckbutton.new(subf, :text=&gt;"Use armcommand/\ndisarmcommand", </div><div class='del'>-                             :variable=&gt;@@var.ref('barmcmd'), </div><div class='del'>-                             :command=&gt;proc{_barmcmd(@@var['barmcmd'], </div><div class='del'>-                                                     but, arr1, arr2)})</div><div class='del'>-    Tk.pack(chk1, chk2, :anchor=&gt;:w)</div><div class='del'>-</div><div class='del'>-    label = TkLabel.new(parent, :textvariable=&gt;@@var.ref('butcmd'), </div><div class='del'>-                        :foreground=&gt;'red').pack(:side=&gt;:bottom, :pady=&gt;4)</div><div class='del'>-</div><div class='del'>-    labf2 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Direction', </div><div class='del'>-                                        :side=&gt;:top, :anchor=&gt;:w, </div><div class='del'>-                                        :relief=&gt;:sunken, :borderwidth=&gt;1)</div><div class='del'>-    subf = labf2.get_frame</div><div class='del'>-    @@var['bside'] = :top</div><div class='del'>-    [:top, :left, :bottom, :right].each{|dir|</div><div class='del'>-      TkRadiobutton.new(subf, :text=&gt;"#{dir} arrow", </div><div class='del'>-                        :variable=&gt;@@var.ref('bside'), :value=&gt;dir, </div><div class='del'>-                        :command=&gt;proc{_bside(@@var['bside'], arr1, arr2)}</div><div class='del'>-                        ).pack(:anchor=&gt;:w)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    labf3 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Relief', </div><div class='del'>-                                        :side=&gt;:top, :anchor=&gt;:w, </div><div class='del'>-                                        :relief=&gt;:sunken, :borderwidth=&gt;1)</div><div class='del'>-    subf = labf3.get_frame</div><div class='del'>-    @@var['brelief'] = :raised</div><div class='del'>-    [ %w(raised sunken ridge groove), %w(flat solid link)].each{|lrelief|</div><div class='del'>-      f = TkFrame.new(subf)</div><div class='del'>-      lrelief.each{|relief|</div><div class='del'>-        TkRadiobutton.new(f, :text=&gt;relief, </div><div class='del'>-                          :variable=&gt;@@var.ref('brelief'), :value=&gt;relief, </div><div class='del'>-                          :command=&gt;proc{</div><div class='del'>-                            _brelief(@@var['brelief'], but, arr1, arr2)</div><div class='del'>-                          }).pack(:anchor=&gt;:w)</div><div class='del'>-      }</div><div class='del'>-      f.pack(:side=&gt;:left, :padx=&gt;2, :anchor=&gt;:n)</div><div class='del'>-    }</div><div class='del'>-    Tk.pack(labf1, labf2, labf3, :side=&gt;:left, :fill=&gt;:y, :padx=&gt;4)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._bstate(state, but, arr1, arr2)</div><div class='del'>-    [but, arr1, arr2].each{|b| b[:state] = state}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._brelief(relief, but, arr1, arr2)</div><div class='del'>-    but[:relief] = relief</div><div class='del'>-    if relief.to_s != 'link'</div><div class='del'>-      [arr1, arr2].each{|arr| arr[:relief] = relief}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._bside(side, *args)</div><div class='del'>-    args.each{|arr| arr[:dir] = side}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._barmcmd(value, but, arr1, arr2)</div><div class='del'>-    if TkComm.bool(value)</div><div class='del'>-      but.configure(:armcommand=&gt;proc{_butcmd('arm')}, </div><div class='del'>-                    :disarmcommand=&gt;proc{_butcmd('disarm')}, </div><div class='del'>-                    :command=&gt;'')</div><div class='del'>-      [arr1, arr2].each{|arr|</div><div class='del'>-        arr.configure(:armcommand=&gt;proc{_butcmd('arm')}, </div><div class='del'>-                      :disarmcommand=&gt;proc{_butcmd('disarm')}, </div><div class='del'>-                      :command=&gt;'')</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      but.configure(:armcommand=&gt;'', :disarmcommand=&gt;'', </div><div class='del'>-                    :command=&gt;proc{_butcmd('command')})</div><div class='del'>-      [arr1, arr2].each{|arr|</div><div class='del'>-        arr.configure(:armcommand=&gt;'', :disarmcommand=&gt;'', </div><div class='del'>-                      :command=&gt;proc{_butcmd('command')})</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._butcmd(reason)</div><div class='del'>-    unless @@after</div><div class='del'>-      @@after = TkTimer.new(500, 1, proc{@@var['butcmd'] = ''})</div><div class='del'>-    end</div><div class='del'>-    @@after.stop</div><div class='del'>-    if (reason == 'arm')</div><div class='del'>-      @@count += 1</div><div class='del'>-      @@var['butcmd'] = "#{reason} command called (#{@@count})"</div><div class='del'>-    else</div><div class='del'>-      @@count = 0</div><div class='del'>-      @@var['butcmd'] = "#{reason} command called"</div><div class='del'>-    end</div><div class='del'>-    @@after.start</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/bwidget/bwidget.xbm b/ext/tk/sample/tkextlib/bwidget/bwidget.xbm<br/>deleted file mode 100644<br/>index 5451ebb9c0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/bwidget.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/bwidget.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-#define bwidget_width 76</div><div class='del'>-#define bwidget_height 64</div><div class='del'>-static char bwidget_bits[] = {</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0x00,0xb6,0x6d,0xdb,0x16,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0xdb,0xb6,0x6d,0xab,0x00,0x00,0x00,0x00,0xf0,0x00,0x55,0x55,0x55,0x75,</div><div class='del'>- 0x01,0x00,0x00,0x00,0xf0,0x00,0x6d,0xdb,0xb6,0xad,0x02,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0xb6,0x6d,0xdb,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0x55,0x55,0x55,0x55,</div><div class='del'>- 0x05,0x00,0x00,0x00,0xf0,0x00,0xda,0xb6,0xad,0x6d,0x0b,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0x6b,0x03,0xc0,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0x56,0x05,0x00,0x55,</div><div class='del'>- 0x0d,0x00,0x00,0x00,0xf0,0x00,0xbb,0x05,0x80,0xdb,0x06,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0xca,0x06,0x00,0x6c,0x0b,0x00,0x00,0x00,0xf0,0x00,0xb6,0x02,0x00,0xaa,</div><div class='del'>- 0x0a,0x00,0x00,0x00,0xf0,0x00,0xab,0x05,0x00,0x6c,0x0b,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0xdd,0x06,0x00,0xb6,0x05,0x00,0x00,0x00,0xf0,0x00,0xaa,0x02,0x00,0x55,</div><div class='del'>- 0x05,0x00,0x00,0x00,0xf0,0x00,0xb7,0x05,0xc0,0xda,0x02,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0xd9,0x06,0x50,0x6b,0x01,0x00,0x00,0x00,0xf0,0x00,0x56,0xb5,0xad,0xad,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0x00,0xdb,0xd6,0x76,0x15,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0x6a,0xab,0xaa,0x2d,0x00,0x00,0x00,0x00,0xf0,0x00,0x56,0x75,0xad,0xb6,</div><div class='del'>- 0x02,0x00,0x00,0x00,0xf0,0x00,0xbb,0xad,0xd6,0xaa,0x05,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0xca,0xb6,0x6b,0xdb,0x2a,0x00,0x00,0x00,0xf0,0x00,0x77,0xd5,0x5c,0x6d,</div><div class='del'>- 0x2d,0x00,0x00,0x00,0xf0,0x00,0x99,0x05,0x00,0xaa,0x56,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0xee,0x06,0x00,0x6c,0xbb,0x00,0x00,0x00,0xf0,0x00,0xaa,0x02,0x00,0xb0,</div><div class='del'>- 0x55,0x00,0x00,0x00,0xf0,0x00,0x55,0x05,0x00,0xa8,0xd6,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0xee,0x06,0x00,0xd0,0x6a,0x00,0x00,0x00,0xf0,0x00,0x55,0x03,0x00,0x68,</div><div class='del'>- 0xb7,0xfc,0x00,0x7e,0xf0,0x00,0x6d,0x05,0x00,0xa8,0xaa,0xfc,0x80,0x7e,0xf0,</div><div class='del'>- 0x00,0xb6,0x05,0x00,0x50,0xbb,0xfe,0x01,0x7e,0xf0,0x00,0x55,0x05,0x00,0x78,</div><div class='del'>- 0xad,0xfe,0x81,0x1f,0xf0,0x00,0xb6,0x05,0x00,0xa4,0xb5,0xfe,0x81,0x1f,0xf0,</div><div class='del'>- 0x00,0x5b,0x05,0x80,0xba,0x56,0xfe,0x83,0x1f,0xf0,0x00,0xaa,0x6b,0x5b,0xd5,</div><div class='del'>- 0x5a,0xff,0x85,0x1f,0xf0,0x00,0xdb,0x5a,0xad,0x57,0x2b,0xff,0xc7,0x0f,0xf0,</div><div class='del'>- 0x00,0x6d,0xad,0xd5,0x6a,0x0d,0xff,0xc7,0x0f,0xf0,0x00,0xaa,0xd6,0xb6,0xba,</div><div class='del'>- 0x05,0xdf,0xc7,0x0f,0xf0,0x00,0xb7,0xb5,0x5a,0xab,0x8a,0xdf,0xcf,0x0f,0xf0,</div><div class='del'>- 0x00,0xd9,0x5a,0xab,0x6d,0x8f,0xcf,0xef,0x07,0xf0,0x00,0x56,0xad,0x75,0xb5,</div><div class='del'>- 0xaf,0x8f,0xef,0x07,0xf0,0x00,0xb5,0xeb,0x5a,0x00,0x9f,0xcf,0xef,0x07,0xf0,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0x8f,0xff,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0x87,0xff,0x03,0xf0,0x00,0x00,0x00,0x00,0x00,0xff,0x03,0xff,0x03,0xf0,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfe,0x03,0xff,0x03,0xf0,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0x03,0xff,0x01,0xf0,0x00,0x00,0x00,0x00,0x00,0xfc,0x01,0xff,0x03,0xf0,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfe,0x01,0xfe,0x01,0xf0,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x01,0xfe,0x01,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0};</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/bwidget/demo.rb b/ext/tk/sample/tkextlib/bwidget/demo.rb<br/>deleted file mode 100644<br/>index 785d2681a8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/demo.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/demo.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,243 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/bwidget'</div><div class='del'>-</div><div class='del'>-module DemoVar</div><div class='del'>-  @_wfont    = nil</div><div class='del'>-  @notebook  = nil</div><div class='del'>-  @mainframe = nil</div><div class='del'>-  @status    = TkVariable.new</div><div class='del'>-  @prgtext   = TkVariable.new</div><div class='del'>-  @prgindic  = TkVariable.new</div><div class='del'>-  @font      = nil</div><div class='del'>-  @font_name = nil</div><div class='del'>-  @toolbar1  = TkVariable.new(true)</div><div class='del'>-  @toolbar2  = TkVariable.new(true)</div><div class='del'>-end</div><div class='del'>-class &lt;&lt; DemoVar</div><div class='del'>-  attr_accessor :_wfont, :notebook, :mainframe, :font, :font_name</div><div class='del'>-  attr_reader   :status, :prgtext, :prgindic, :toolbar1, :toolbar2</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class BWidget_Demo</div><div class='del'>-  DEMODIR = File.dirname(File.expand_path(__FILE__))</div><div class='del'>-</div><div class='del'>-  %w(manager basic select dnd tree tmpldlg).each{|f|</div><div class='del'>-    require File.join(DEMODIR, f &lt;&lt; '.rb')</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def initialize</div><div class='del'>-    TkOption.add('*TitleFrame.l.font', 'helvetica 11 bold italic')</div><div class='del'>-</div><div class='del'>-    root = TkRoot.new(:title=&gt;'BWidget demo')</div><div class='del'>-    root.withdraw</div><div class='del'>-</div><div class='del'>-    _create</div><div class='del'>-</div><div class='del'>-    Tk::BWidget.place(root, 0, 0, :center)</div><div class='del'>-    root.deiconify</div><div class='del'>-    root.raise</div><div class='del'>-    root.focus(true)</div><div class='del'>-</div><div class='del'>-    root.geometry(root.geometry)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create</div><div class='del'>-    DemoVar.prgtext.value = 'Please wait while loading font...'</div><div class='del'>-    DemoVar.prgindic.value = -1</div><div class='del'>-</div><div class='del'>-    intro = _create_intro</div><div class='del'>-</div><div class='del'>-    Tk.update</div><div class='del'>-</div><div class='del'>-    Tk::BWidget::SelectFont.load_font</div><div class='del'>-</div><div class='del'>-    descmenu = [</div><div class='del'>-      '&amp;File', 'all', 'file', 0, [</div><div class='del'>-        ['command', 'E&amp;xit', [], 'Exit BWidget demo', [], </div><div class='del'>-          {:command=&gt;proc{exit}}]</div><div class='del'>-      ], </div><div class='del'>-      '&amp;Options', 'all', 'options', 0, [</div><div class='del'>-        ['checkbutton', 'Toolbar &amp;1', ['all', 'option'], </div><div class='del'>-          'Show/hide toolbar 1', [], </div><div class='del'>-          { :variable=&gt;DemoVar.toolbar1, </div><div class='del'>-            :command=&gt;proc{</div><div class='del'>-              DemoVar.mainframe.show_toolbar(0, DemoVar.toolbar1.value)</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-        ['checkbutton', 'Toolbar &amp;2', ['all', 'option'], </div><div class='del'>-          'Show/hide toolbar 2', [], </div><div class='del'>-          { :variable=&gt;DemoVar.toolbar2, </div><div class='del'>-            :command=&gt;proc{</div><div class='del'>-              DemoVar.mainframe.show_toolbar(1, DemoVar.toolbar2.value)</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'>-    DemoVar.prgtext.value = 'Creating MainFrame...'</div><div class='del'>-    DemoVar.prgindic.value = 0</div><div class='del'>-</div><div class='del'>-    DemoVar.mainframe = Tk::BWidget::MainFrame.new(</div><div class='del'>-                                :menu=&gt;descmenu, </div><div class='del'>-                                :textvariable=&gt;DemoVar.status, </div><div class='del'>-                                :progressvar=&gt;DemoVar.prgindic</div><div class='del'>-                        )</div><div class='del'>-</div><div class='del'>-    # toobar 1 creation</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-</div><div class='del'>-    DemoVar.mainframe.add_toolbar{|tb1|</div><div class='del'>-      Tk::BWidget::ButtonBox.new(tb1, :spacing=&gt;0, :padx=&gt;1, :pady=&gt;1){|bbox|</div><div class='del'>-        add(:image=&gt;Tk::BWidget::Bitmap.new('new'), </div><div class='del'>-            :highlightthickness=&gt;0, :takefocus=&gt;0, :relief=&gt;:link, </div><div class='del'>-            :borderwidth=&gt;1, :padx=&gt;1, :pady=&gt;1, </div><div class='del'>-            :command=&gt;proc{puts 'select "Create a new file" icon'}, </div><div class='del'>-            :helptext=&gt;"Create a new file")</div><div class='del'>-</div><div class='del'>-        add(:image=&gt;Tk::BWidget::Bitmap.new('open'), </div><div class='del'>-            :highlightthickness=&gt;0, :takefocus=&gt;0, :relief=&gt;:link, </div><div class='del'>-            :borderwidth=&gt;1, :padx=&gt;1, :pady=&gt;1, </div><div class='del'>-            :command=&gt;proc{puts 'select "Open an existing file" icon'}, </div><div class='del'>-            :helptext=&gt;"Open an existing file")</div><div class='del'>-</div><div class='del'>-        add(:image=&gt;Tk::BWidget::Bitmap.new('save'), </div><div class='del'>-            :highlightthickness=&gt;0, :takefocus=&gt;0, :relief=&gt;:link, </div><div class='del'>-            :borderwidth=&gt;1, :padx=&gt;1, :pady=&gt;1, </div><div class='del'>-            :command=&gt;proc{puts 'select "Save file" icon'}, </div><div class='del'>-            :helptext=&gt;"Save file")</div><div class='del'>-</div><div class='del'>-        pack(:side=&gt;:left, :anchor=&gt;:w)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      Tk::BWidget::Separator.new(tb1, :orient=&gt;:vertical){</div><div class='del'>-        pack(:side=&gt;:left, :fill=&gt;:y, :padx=&gt;4, :anchor=&gt;:w)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      DemoVar.prgindic.numeric += 1</div><div class='del'>-</div><div class='del'>-      Tk::BWidget::ButtonBox.new(tb1, :spacing=&gt;0, :padx=&gt;1, :pady=&gt;1){|bbox|</div><div class='del'>-        add(:image=&gt;Tk::BWidget::Bitmap.new('cut'), </div><div class='del'>-            :highlightthickness=&gt;0, :takefocus=&gt;0, :relief=&gt;:link, </div><div class='del'>-            :borderwidth=&gt;1, :padx=&gt;1, :pady=&gt;1, </div><div class='del'>-            :command=&gt;proc{puts 'select "Cut selection" icon'}, </div><div class='del'>-            :helptext=&gt;"Cut selection")</div><div class='del'>-</div><div class='del'>-        add(:image=&gt;Tk::BWidget::Bitmap.new('copy'), </div><div class='del'>-            :highlightthickness=&gt;0, :takefocus=&gt;0, :relief=&gt;:link, </div><div class='del'>-            :borderwidth=&gt;1, :padx=&gt;1, :pady=&gt;1, </div><div class='del'>-            :command=&gt;proc{puts 'select "Copy selection" icon'}, </div><div class='del'>-            :helptext=&gt;"Copy selection")</div><div class='del'>-</div><div class='del'>-        add(:image=&gt;Tk::BWidget::Bitmap.new('paste'), </div><div class='del'>-            :highlightthickness=&gt;0, :takefocus=&gt;0, :relief=&gt;:link, </div><div class='del'>-            :borderwidth=&gt;1, :padx=&gt;1, :pady=&gt;1, </div><div class='del'>-            :command=&gt;proc{puts 'select "Paste selection" icon'}, </div><div class='del'>-            :helptext=&gt;"Paste selection")</div><div class='del'>-</div><div class='del'>-        pack(:side=&gt;:left, :anchor=&gt;:w)</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # toolbar 2 creation</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-</div><div class='del'>-    tb2 = DemoVar.mainframe.add_toolbar</div><div class='del'>-    DemoVar._wfont = Tk::BWidget::SelectFont::Toolbar.new(tb2, </div><div class='del'>-                       :command=&gt;proc{update_font(DemoVar._wfont[:font])}</div><div class='del'>-                     )</div><div class='del'>-    DemoVar.font = DemoVar._wfont[:font]</div><div class='del'>-    DemoVar._wfont.pack(:side=&gt;:left, :anchor=&gt;:w)</div><div class='del'>-</div><div class='del'>-    DemoVar.mainframe.add_indicator(</div><div class='del'>-      :text=&gt;"BWidget #{Tk::BWidget.package_version}"</div><div class='del'>-    )</div><div class='del'>-    DemoVar.mainframe.add_indicator(:textvariable=&gt;'tk_patchLevel')</div><div class='del'>-</div><div class='del'>-    # NoteBook creation</div><div class='del'>-    DemoVar.notebook = Tk::BWidget::NoteBook.new(DemoVar.mainframe.get_frame)</div><div class='del'>-</div><div class='del'>-    DemoVar.prgtext.value = "Creating Manager..."</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-    DemoManager.create(DemoVar.notebook)</div><div class='del'>-</div><div class='del'>-    DemoVar.prgtext.value = "Creating Basic..."</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-    DemoBasic.create(DemoVar.notebook)</div><div class='del'>-</div><div class='del'>-    DemoVar.prgtext.value = "Creating Select..."</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-    DemoSelect.create(DemoVar.notebook)</div><div class='del'>-</div><div class='del'>-    DemoVar.prgtext.value = "Creating Dialog..."</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-    DemoDialog.create(DemoVar.notebook)</div><div class='del'>-</div><div class='del'>-    DemoVar.prgtext.value = "Creating Drag and Drop..."</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-    DemoDnD.create(DemoVar.notebook)</div><div class='del'>-</div><div class='del'>-    DemoVar.prgtext.value = "Creating Tree..."</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-    DemoTree.create(DemoVar.notebook)</div><div class='del'>-</div><div class='del'>-    DemoVar.prgtext.value = "Done"</div><div class='del'>-    DemoVar.prgindic.numeric += 1</div><div class='del'>-</div><div class='del'>-    DemoVar.notebook.compute_size</div><div class='del'>-    DemoVar.notebook.pack(:fill=&gt;:both, :expand=&gt;true, :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-    DemoVar.notebook.raise(DemoVar.notebook.get_page(0))</div><div class='del'>-</div><div class='del'>-    DemoVar.mainframe.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    Tk.update_idletasks</div><div class='del'>-</div><div class='del'>-    intro.destroy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def update_font(newfont)</div><div class='del'>-    root = Tk.root</div><div class='del'>-    root[:cursor] = 'watch'</div><div class='del'>-    if newfont != '' &amp;&amp; DemoVar.font != newfont</div><div class='del'>-      DemoVar._wfont[:font] = newfont</div><div class='del'>-      DemoVar.notebook[:font] = newfont</div><div class='del'>-      DemoVar.font = newfont</div><div class='del'>-    end</div><div class='del'>-    root[:cursor] = ''</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _create_intro</div><div class='del'>-    top = TkToplevel.new(:relief=&gt;:raised, :borderwidth=&gt;2)</div><div class='del'>-    top.withdraw</div><div class='del'>-    top.overrideredirect(true)</div><div class='del'>-</div><div class='del'>-    ximg  = TkLabel.new(top, :bitmap=&gt;"@#{File.join(DEMODIR,'x1.xbm')}", </div><div class='del'>-                        :foreground=&gt;'grey90', :background=&gt;'white')</div><div class='del'>-    bwimg = TkLabel.new(ximg, :bitmap=&gt;"@#{File.join(DEMODIR,'bwidget.xbm')}",</div><div class='del'>-                        :foreground=&gt;'grey90', :background=&gt;'white')</div><div class='del'>-    frame = TkFrame.new(ximg, :background=&gt;'white')</div><div class='del'>-    TkLabel.new(frame, :text=&gt;'Loading demo', </div><div class='del'>-                :background=&gt;'white', :font=&gt;'times 8').pack</div><div class='del'>-    TkLabel.new(frame, :textvariable=&gt;DemoVar.prgtext, </div><div class='del'>-                :background=&gt;'white', :font=&gt;'times 8', :width=&gt;35).pack</div><div class='del'>-    Tk::BWidget::ProgressBar.new(frame, :width=&gt;50, :height=&gt;10, </div><div class='del'>-                                 :background=&gt;'white', </div><div class='del'>-                                 :variable=&gt;DemoVar.prgindic, </div><div class='del'>-                                 :maximum=&gt;10).pack</div><div class='del'>-    frame.place(:x=&gt;0, :y=&gt;0, :anchor=&gt;:nw)</div><div class='del'>-    bwimg.place(:relx=&gt;1, :rely=&gt;1, :anchor=&gt;:se)</div><div class='del'>-    ximg.pack</div><div class='del'>-    Tk::BWidget.place(top, 0, 0, :center)</div><div class='del'>-    top.deiconify</div><div class='del'>-</div><div class='del'>-    top</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module DemoVar</div><div class='del'>-  Demo = BWidget_Demo.new</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/bwidget/dnd.rb b/ext/tk/sample/tkextlib/bwidget/dnd.rb<br/>deleted file mode 100644<br/>index 1c8b036530..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/dnd.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/dnd.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  dnd demo  ---  called from demo.rb</div><div class='del'>-#</div><div class='del'>-unless Object.const_defined?('DemoVar')</div><div class='del'>-  fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module DemoDnD</div><div class='del'>-  def self.create(nb)</div><div class='del'>-    frame = nb.insert('end', 'demoDnD', :text=&gt;'Drag and Drop')</div><div class='del'>-</div><div class='del'>-    titf1 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'Drag source')</div><div class='del'>-    subf = titf1.get_frame</div><div class='del'>-</div><div class='del'>-    ent1 = Tk::BWidget::LabelEntry.new(subf, :label=&gt;'Entry', </div><div class='del'>-                                       :labelwidth=&gt;14, :dragenabled=&gt;true, </div><div class='del'>-                                       :dragevent=&gt;3)</div><div class='del'>-    labf1 = Tk::BWidget::LabelFrame.new(subf, :text=&gt;'Label (text)', </div><div class='del'>-                                        :width=&gt;14)</div><div class='del'>-    f = labf1.get_frame</div><div class='del'>-    lab = Tk::BWidget::Label.new(f, :text=&gt;'Drag this text', </div><div class='del'>-                                 :dragenabled=&gt;true, :dragevent=&gt;3).pack</div><div class='del'>-</div><div class='del'>-    labf2 = Tk::BWidget::LabelFrame.new(subf, :text=&gt;'Label (bitmap)', </div><div class='del'>-                                        :width=&gt;14)</div><div class='del'>-    f = labf2.get_frame</div><div class='del'>-    lab = Tk::BWidget::Label.new(f, :bitmap=&gt;'info', </div><div class='del'>-                                 :dragenabled=&gt;true, :dragevent=&gt;3).pack</div><div class='del'>-</div><div class='del'>-    Tk.pack(ent1, labf1, labf2, :side=&gt;:top, :fill=&gt;:x, :pady=&gt;4)</div><div class='del'>-</div><div class='del'>-    titf2 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'Drop targets')</div><div class='del'>-    subf = titf2.get_frame</div><div class='del'>-</div><div class='del'>-    ent1 = Tk::BWidget::LabelEntry.new(subf, :label=&gt;'Entry', </div><div class='del'>-                                       :labelwidth=&gt;14, :dropenabled=&gt;true)</div><div class='del'>-    labf1 = Tk::BWidget::LabelFrame.new(subf, :text=&gt;'Label', :width=&gt;14)</div><div class='del'>-    f = labf1.get_frame</div><div class='del'>-    lab = Tk::BWidget::Label.new(f, :dropenabled=&gt;true, </div><div class='del'>-                                 :highlightthickness=&gt;1).pack(:fill=&gt;:x)</div><div class='del'>-    Tk.pack(ent1, labf1, :side=&gt;:top, :fill=&gt;:x, :pady=&gt;4)</div><div class='del'>-    Tk.pack(titf1, titf2, :pady=&gt;4)</div><div class='del'>-</div><div class='del'>-    frame</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/bwidget/manager.rb b/ext/tk/sample/tkextlib/bwidget/manager.rb<br/>deleted file mode 100644<br/>index 776cb3065b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/manager.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/manager.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,150 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  manager demo  ---  called from demo.rb</div><div class='del'>-#</div><div class='del'>-unless Object.const_defined?('DemoVar')</div><div class='del'>-  fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module DemoManager</div><div class='del'>-  @@progress    = TkVariable.new(false)</div><div class='del'>-  @@status      = TkVariable.new('Compute in progress...')</div><div class='del'>-  @@homogeneous = TkVariable.new(false)</div><div class='del'>-  @@constw      = TkVariable.new</div><div class='del'>-  @@afterobj    = nil</div><div class='del'>-</div><div class='del'>-  def self.create(nb)</div><div class='del'>-    frame = nb.insert('end', 'demoManager', :text=&gt;'Manager')</div><div class='del'>-</div><div class='del'>-    topf = TkFrame.new(frame)</div><div class='del'>-    titf1 = Tk::BWidget::TitleFrame.new(topf, :text=&gt;"MainFrame")</div><div class='del'>-    titf2 = Tk::BWidget::TitleFrame.new(topf, :text=&gt;"NoteBook")</div><div class='del'>-    titf3 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;"Paned &amp; ScrolledWindow")</div><div class='del'>-</div><div class='del'>-    _mainframe(titf1.get_frame)</div><div class='del'>-    _notebook(titf2.get_frame)</div><div class='del'>-    _paned(titf3.get_frame)</div><div class='del'>-</div><div class='del'>-    Tk.pack(titf1, titf2, :padx=&gt;4, :side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-    Tk.pack(topf, :fill=&gt;:x, :pady=&gt;2)</div><div class='del'>-    Tk.pack(titf3, :pady=&gt;2, :padx=&gt;4, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    frame</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._mainframe(parent)</div><div class='del'>-    labf1 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Toolbar', </div><div class='del'>-                                        :side=&gt;:top, :anchor=&gt;:w, </div><div class='del'>-                                        :relief=&gt;:sunken, :borderwidth=&gt;2)</div><div class='del'>-    subf = labf1.get_frame</div><div class='del'>-    chk1 = TkCheckbutton.new(subf, :text=&gt;'View toolbar 1', </div><div class='del'>-                             :variable=&gt;DemoVar.toolbar1, </div><div class='del'>-                             :command=&gt;proc{</div><div class='del'>-                               DemoVar.mainframe.show_toolbar(</div><div class='del'>-                                  0, DemoVar.toolbar1.value</div><div class='del'>-                               )</div><div class='del'>-                             })</div><div class='del'>-    chk2 = TkCheckbutton.new(subf, :text=&gt;'View toolbar 2', </div><div class='del'>-                             :variable=&gt;DemoVar.toolbar2, </div><div class='del'>-                             :command=&gt;proc{</div><div class='del'>-                               DemoVar.mainframe.show_toolbar(</div><div class='del'>-                                  1, DemoVar.toolbar2.value</div><div class='del'>-                               )</div><div class='del'>-                             })</div><div class='del'>-</div><div class='del'>-    Tk.pack(chk1, chk2, :anchor=&gt;:w, :fill=&gt;:x)</div><div class='del'>-    labf1.pack(:fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-    labf2 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Status bar', </div><div class='del'>-                                        :side=&gt;:top, :anchor=&gt;:w, </div><div class='del'>-                                        :relief=&gt;:sunken, :borderwidth=&gt;2)</div><div class='del'>-    subf = labf2.get_frame</div><div class='del'>-    chk1 = TkCheckbutton.new(subf, :text=&gt;"Show Progress\nindicator", </div><div class='del'>-                             :justify=&gt;:left, :variable=&gt;@@progress, </div><div class='del'>-                             :command=&gt;proc{ _show_progress })</div><div class='del'>-    chk1.pack(:anchor=&gt;:w, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-    Tk.pack(labf1, labf2, :side=&gt;:left, :padx=&gt;4, :fill=&gt;:both)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._notebook(parent)</div><div class='del'>-    TkCheckbutton.new(parent, :text=&gt;'Homogeneous label', </div><div class='del'>-                      :variable=&gt;@@homogeneous, </div><div class='del'>-                      :command=&gt;proc{</div><div class='del'>-                        DemoVar.notebook[:homogeneous] = @@homogeneous.value</div><div class='del'>-                      }).pack(:side=&gt;:left, :anchor=&gt;:n, :fill=&gt;:x)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._paned(parent)</div><div class='del'>-    pw1   = Tk::BWidget::PanedWindow.new(parent, :side=&gt;:top)</div><div class='del'>-    pane  = pw1.add(:minsize=&gt;100)</div><div class='del'>-</div><div class='del'>-    pw2   = Tk::BWidget::PanedWindow.new(pane, :side=&gt;:left)</div><div class='del'>-    pane1 = pw2.add(:minsize=&gt;100)</div><div class='del'>-    pane2 = pw2.add(:minsize=&gt;100)</div><div class='del'>-</div><div class='del'>-    pane3 = pw1.add(:minsize=&gt;100)</div><div class='del'>-</div><div class='del'>-    [pane1, pane2].each{|pane|</div><div class='del'>-      sw = Tk::BWidget::ScrolledWindow.new(pane)</div><div class='del'>-      lb = TkListbox.new(sw, :height=&gt;8, :width=&gt;20, :highlightthickness=&gt;0)</div><div class='del'>-      (1..8).each{|i| lb.insert('end', "Valur #{i}") }</div><div class='del'>-      sw.set_widget(lb)</div><div class='del'>-      sw.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    sw = Tk::BWidget::ScrolledWindow.new(pane3, :relief=&gt;:sunken, </div><div class='del'>-                                         :borderwidth=&gt;2)</div><div class='del'>-    sf = Tk::BWidget::ScrollableFrame.new(sw)</div><div class='del'>-    sw.set_widget(sf)</div><div class='del'>-    subf = sf.get_frame</div><div class='del'>-    lab = TkLabel.new(subf, :text=&gt;'This is a ScrollableFrame')</div><div class='del'>-    chk = TkCheckbutton.new(subf, :text=&gt;'Constrained with', </div><div class='del'>-                            :variable=&gt;@@constw, :command=&gt;proc{</div><div class='del'>-                              sf['constrainedwidth'] = @@constw.value</div><div class='del'>-                            })</div><div class='del'>-    lab.pack</div><div class='del'>-    chk.pack(:anchor=&gt;:w)</div><div class='del'>-    chk.bind('FocusIn', proc{sf.see(chk)})</div><div class='del'>-    (0..20).each{|i|</div><div class='del'>-      ent = TkEntry.new(subf, :width=&gt;50).pack(:fill=&gt;:x, :pady=&gt;4)</div><div class='del'>-      ent.bind('FocusIn', proc{sf.see(ent)})</div><div class='del'>-      ent.insert('end', "Text field #{i}")</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tk.pack(sw, pw2, pw1, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._show_progress</div><div class='del'>-    unless @@afterobj</div><div class='del'>-      @@afterobj = TkTimer.new(30, -1, proc{_update_progress})</div><div class='del'>-    end</div><div class='del'>-    if @@progress.bool</div><div class='del'>-      DemoVar.status.value = 'Compute in progress...'</div><div class='del'>-      DemoVar.prgindic.value = 0</div><div class='del'>-      DemoVar.mainframe.show_statusbar(:progression)</div><div class='del'>-      @@afterobj.start unless @@afterobj.running?</div><div class='del'>-    else</div><div class='del'>-      DemoVar.status.value = ''</div><div class='del'>-      DemoVar.mainframe.show_statusbar(:status)</div><div class='del'>-      @@afterobj.stop</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._update_progress</div><div class='del'>-    if @@progress.bool</div><div class='del'>-      if DemoVar.prgindic.numeric &lt; 100</div><div class='del'>-        DemoVar.prgindic.numeric += 5</div><div class='del'>-      else</div><div class='del'>-        @@progress.value = false</div><div class='del'>-        DemoVar.mainframe.show_statusbar(:status)</div><div class='del'>-        DemoVar.status.value = 'Done'</div><div class='del'>-        @@afterobj.stop</div><div class='del'>-        Tk.after(500, proc{ DemoVar.status.value = '' })</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @@afterobj.stop</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='head'>diff --git a/ext/tk/sample/tkextlib/bwidget/select.rb b/ext/tk/sample/tkextlib/bwidget/select.rb<br/>deleted file mode 100644<br/>index ea24b47e2e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/select.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/select.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,82 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  select demo  ---  called from demo.rb</div><div class='del'>-#</div><div class='del'>-unless Object.const_defined?('DemoVar')</div><div class='del'>-  fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module DemoSelect</div><div class='del'>-  @@var = TkVariable.new_hash</div><div class='del'>-</div><div class='del'>-  def self.create(nb)</div><div class='del'>-    frame = nb.insert('end', 'demoSelect', :text=&gt;'Spin &amp; Combo')</div><div class='del'>-</div><div class='del'>-    titf1 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'SpinBox')</div><div class='del'>-    subf = titf1.get_frame</div><div class='del'>-    spin = Tk::BWidget::SpinBox.new(subf, :range=&gt;[1, 100, 1], </div><div class='del'>-                                    :textvariable=&gt;@@var.ref('spin', 'var'), </div><div class='del'>-                                    :helptext=&gt;'This is the SpinBox')</div><div class='del'>-    ent = Tk::BWidget::LabelEntry.new(subf, :label=&gt;'Linked var', </div><div class='del'>-                                      :labelwidth=&gt;10, :labelanchor=&gt;:w,  </div><div class='del'>-                                      :textvariable=&gt;@@var.ref('spin', 'var'), </div><div class='del'>-                                      :editable=&gt;0, </div><div class='del'>-                                      :helptext=&gt;"This is an Entry reflecting\nthe linked var of SpinBox")</div><div class='del'>-    labf = Tk::BWidget::LabelFrame.new(subf, :text=&gt;'Options', </div><div class='del'>-                                       :side=&gt;:top, :anchor=&gt;:w, </div><div class='del'>-                                       :relief=&gt;:sunken, :borderwidth=&gt;1, </div><div class='del'>-                                       :helptext=&gt;'Modify some options of SpinBox')</div><div class='del'>-    subf = labf.get_frame</div><div class='del'>-    chk1 = TkCheckbutton.new(subf, :text=&gt;'Non editable', </div><div class='del'>-                             :variable=&gt;@@var.ref('spin', 'editable'), </div><div class='del'>-                             :onvalue=&gt;false, :offvalue=&gt;true, </div><div class='del'>-                             :command=&gt;proc{</div><div class='del'>-                               spin.editable(@@var['spin', 'editable'])</div><div class='del'>-                             })</div><div class='del'>-    chk2 = TkCheckbutton.new(subf, :text=&gt;'Disabled', </div><div class='del'>-                             :variable=&gt;@@var.ref('spin', 'state'), </div><div class='del'>-                             :onvalue=&gt;'disabled', :offvalue=&gt;'normal', </div><div class='del'>-                             :command=&gt;proc{</div><div class='del'>-                               spin.state(@@var['spin', 'state'])</div><div class='del'>-                             })</div><div class='del'>-    Tk.pack(chk1, chk2, :side=&gt;:left, :anchor=&gt;:w)</div><div class='del'>-    Tk.pack(spin, ent, labf, :pady=&gt;4, :fill=&gt;:x)</div><div class='del'>-    titf1.pack</div><div class='del'>-</div><div class='del'>-    titf2 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'ComboBox')</div><div class='del'>-    subf = titf2.get_frame</div><div class='del'>-    combo = Tk::BWidget::ComboBox.new(subf,</div><div class='del'>-                                      :textvariable=&gt;@@var.ref('combo', 'var'),</div><div class='del'>-                                      :values=&gt;[</div><div class='del'>-                                        'first value', 'second value', </div><div class='del'>-                                        'third value', 'fourth value', </div><div class='del'>-                                        'fifth value'</div><div class='del'>-                                      ], </div><div class='del'>-                                      :helptext=&gt;'This is the ComboBox')</div><div class='del'>-    ent = Tk::BWidget::LabelEntry.new(subf, :label=&gt;'Linked var', </div><div class='del'>-                                      :labelwidth=&gt;10, :labelanchor=&gt;:w, </div><div class='del'>-                                      :textvariable=&gt;@@var.ref('combo', 'var'),</div><div class='del'>-                                      :editable=&gt;0, :helptext=&gt;"This is an Entry reflecting\nthe linked var of ComboBox")</div><div class='del'>-    labf = Tk::BWidget::LabelFrame.new(subf, :text=&gt;'Options', :side=&gt;:top, </div><div class='del'>-                                       :anchor=&gt;:w, :relief=&gt;:sunken, </div><div class='del'>-                                       :borderwidth=&gt;1, :helptext=&gt;'Modify some options of ComboBox')</div><div class='del'>-    subf = labf.get_frame</div><div class='del'>-    chk1 = TkCheckbutton.new(subf, :text=&gt;'Non editable', </div><div class='del'>-                             :variable=&gt;@@var.ref('combo', 'editable'), </div><div class='del'>-                             :onvalue=&gt;false, :offvalue=&gt;true, </div><div class='del'>-                             :command=&gt;proc{</div><div class='del'>-                               combo.editable(@@var['combo', 'editable'])</div><div class='del'>-                             })</div><div class='del'>-    chk2 = TkCheckbutton.new(subf, :text=&gt;'Disabled', </div><div class='del'>-                             :variable=&gt;@@var.ref('combo', 'state'), </div><div class='del'>-                             :onvalue=&gt;'disabled', :offvalue=&gt;'normal', </div><div class='del'>-                             :command=&gt;proc{</div><div class='del'>-                               combo.state(@@var['combo', 'state'])</div><div class='del'>-                             })</div><div class='del'>-</div><div class='del'>-    Tk.pack(chk1, chk2, :side=&gt;:left, :anchor=&gt;:w)</div><div class='del'>-    Tk.pack(combo, ent, labf, :pady=&gt;4, :fill=&gt;:x)</div><div class='del'>-    Tk.pack(titf1, titf2, :pady=&gt;4)</div><div class='del'>-</div><div class='del'>-    frame</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/bwidget/tmpldlg.rb b/ext/tk/sample/tkextlib/bwidget/tmpldlg.rb<br/>deleted file mode 100644<br/>index 3d19c8d092..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/tmpldlg.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/tmpldlg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,221 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  templdlg demo  ---  called from demo.rb</div><div class='del'>-#</div><div class='del'>-unless Object.const_defined?('DemoVar')</div><div class='del'>-  fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module DemoDialog</div><div class='del'>-  @@tmpl      = TkVariable.new_hash</div><div class='del'>-  @@msg       = TkVariable.new_hash</div><div class='del'>-  @@msgdlg    = nil</div><div class='del'>-  @@progmsg   = TkVariable.new</div><div class='del'>-  @@progval   = TkVariable.new</div><div class='del'>-  @@progdlg   = nil</div><div class='del'>-  @@resources = TkVariable.new('en')</div><div class='del'>-</div><div class='del'>-  def self.create(nb)</div><div class='del'>-    frame = nb.insert('end', 'demoDlg', :text=&gt;'Dialog')</div><div class='del'>-</div><div class='del'>-    titf1 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'Resources')</div><div class='del'>-    titf2 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'Template Dialog')</div><div class='del'>-    titf3 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'Message Dialog')</div><div class='del'>-    titf4 = Tk::BWidget::TitleFrame.new(frame, :text=&gt;'Other dialog')</div><div class='del'>-</div><div class='del'>-    subf = titf1.get_frame</div><div class='del'>-    cmd = proc{ TkOption.read_file(File.join(Tk::BWidget::LIBRARY, 'lang', </div><div class='del'>-                                             @@resources.value + '.rc')) }</div><div class='del'>-    Tk.pack(TkRadiobutton.new(subf, :text=&gt;'English', :value=&gt;'en', </div><div class='del'>-                              :variable=&gt;@@resources, :command=&gt;cmd), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'French', :value=&gt;'fr', </div><div class='del'>-                              :variable=&gt;@@resources, :command=&gt;cmd), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'German', :value=&gt;'de', </div><div class='del'>-                              :variable=&gt;@@resources, :command=&gt;cmd), </div><div class='del'>-            :side=&gt;:left)</div><div class='del'>-</div><div class='del'>-    _tmpldlg(titf2.get_frame)</div><div class='del'>-    _msgdlg(titf3.get_frame)</div><div class='del'>-    _stddlg(titf4.get_frame)</div><div class='del'>-</div><div class='del'>-    titf1.pack(:fill=&gt;:x, :pady=&gt;2, :padx=&gt;2)</div><div class='del'>-    titf4.pack(:side=&gt;:bottom, :fill=&gt;:x, :pady=&gt;2, :padx=&gt;2)</div><div class='del'>-    Tk.pack(titf2, titf3, :side=&gt;:left, :padx=&gt;2, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._tmpldlg(parent)</div><div class='del'>-    @@tmpl['side'] = :bottom</div><div class='del'>-    @@tmpl['anchor'] = :c</div><div class='del'>-</div><div class='del'>-    labf1 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Button side', </div><div class='del'>-                                        :side=&gt;:top, :anchor=&gt;:w, </div><div class='del'>-                                        :relief=&gt;:sunken, :borderwidth=&gt;1)</div><div class='del'>-    subf = labf1.get_frame</div><div class='del'>-    Tk.pack(TkRadiobutton.new(subf, :text=&gt;'Bottom', :value=&gt;:bottom, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('side'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Left', :value=&gt;:left, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('side'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Right', :value=&gt;:right, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('side'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Top', :value=&gt;:top, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('side'), :anchor=&gt;:w), </div><div class='del'>-            :fill=&gt;:x, :anchor=&gt;:w)</div><div class='del'>-</div><div class='del'>-    labf2 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Button anchor', </div><div class='del'>-                                        :side=&gt;:top, :anchor=&gt;:w, </div><div class='del'>-                                        :relief=&gt;:sunken, :borderwidth=&gt;1)</div><div class='del'>-    subf = labf2.get_frame</div><div class='del'>-    Tk.pack(TkRadiobutton.new(subf, :text=&gt;'North', :value=&gt;:n, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('anchor'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'West', :value=&gt;:w, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('anchor'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'East', :value=&gt;:e, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('anchor'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'South', :value=&gt;:s, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('anchor'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Center', :value=&gt;:c, </div><div class='del'>-                              :variable=&gt;@@tmpl.ref('anchor'), :anchor=&gt;:w), </div><div class='del'>-            :fill=&gt;:x, :anchor=&gt;:w)</div><div class='del'>-</div><div class='del'>-    sep = Tk::BWidget::Separator.new(parent, :orient=&gt;:horizontal)</div><div class='del'>-    button = TkButton.new(parent, :text=&gt;'Show', :command=&gt;proc{_show_tmpldlg})</div><div class='del'>-</div><div class='del'>-    button.pack(:side=&gt;:bottom)</div><div class='del'>-    sep.pack(:side=&gt;:bottom, :fill=&gt;:x, :pady=&gt;10)</div><div class='del'>-    Tk.pack(labf1, labf2, :side=&gt;:left, :padx=&gt;4, :anchor=&gt;:n)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._msgdlg(parent)</div><div class='del'>-    @@msg['type'] = 'ok'</div><div class='del'>-    @@msg['icon'] = 'info'</div><div class='del'>-</div><div class='del'>-    labf1 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Type', :side=&gt;:top, </div><div class='del'>-                                        :anchor=&gt;:w, :relief=&gt;:sunken, </div><div class='del'>-                                        :borderwidth=&gt;1)</div><div class='del'>-    subf = labf1.get_frame</div><div class='del'>-    Tk.pack(TkRadiobutton.new(subf, :text=&gt;'Ok', :value=&gt;'ok', </div><div class='del'>-                              :variable=&gt;@@msg.ref('type'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Ok, Cancel', :value=&gt;'okcancel', </div><div class='del'>-                              :variable=&gt;@@msg.ref('type'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Retry, Cancel', </div><div class='del'>-                              :value=&gt;'retrycancel', </div><div class='del'>-                              :variable=&gt;@@msg.ref('type'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Yes, No', :value=&gt;'yesno', </div><div class='del'>-                              :variable=&gt;@@msg.ref('type'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Yes, No, Cancel', </div><div class='del'>-                              :value=&gt;'yesnocancel', </div><div class='del'>-                              :variable=&gt;@@msg.ref('type'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Abort, Retry, Ignore', </div><div class='del'>-                              :value=&gt;'abortretryignore', </div><div class='del'>-                              :variable=&gt;@@msg.ref('type'), :anchor=&gt;:w), </div><div class='del'>-            :fill=&gt;:x, :anchor=&gt;:w)</div><div class='del'>-</div><div class='del'>-    Tk.pack(TkRadiobutton.new(subf, :text=&gt;'User', :value=&gt;'user', </div><div class='del'>-                              :variable=&gt;@@msg.ref('type'), :anchor=&gt;:w), </div><div class='del'>-            Tk::BWidget::Entry.new(subf, :textvariable=&gt;@@msg.ref('buttons')),</div><div class='del'>-            :side=&gt;:left)</div><div class='del'>-</div><div class='del'>-    labf2 = Tk::BWidget::LabelFrame.new(parent, :text=&gt;'Icon', :side=&gt;:top, </div><div class='del'>-                                        :anchor=&gt;:w, :relief=&gt;:sunken, </div><div class='del'>-                                        :borderwidth=&gt;1)</div><div class='del'>-    subf = labf2.get_frame</div><div class='del'>-    Tk.pack(TkRadiobutton.new(subf, :text=&gt;'Information', :value=&gt;'info', </div><div class='del'>-                              :variable=&gt;@@msg.ref('icon'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Question',    :value=&gt;'question', </div><div class='del'>-                              :variable=&gt;@@msg.ref('icon'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Warning',     :value=&gt;'warning', </div><div class='del'>-                              :variable=&gt;@@msg.ref('icon'), :anchor=&gt;:w), </div><div class='del'>-            TkRadiobutton.new(subf, :text=&gt;'Error',       :value=&gt;'error', </div><div class='del'>-                              :variable=&gt;@@msg.ref('icon'), :anchor=&gt;:w), </div><div class='del'>-            :fill=&gt;:x, :anchor=&gt;:w)</div><div class='del'>-</div><div class='del'>-    sep = Tk::BWidget::Separator.new(parent, :orient=&gt;:horizontal)</div><div class='del'>-    button = TkButton.new(parent, :text=&gt;'Show', :command=&gt;proc{_show_msgdlg})</div><div class='del'>-</div><div class='del'>-    button.pack(:side=&gt;:bottom)</div><div class='del'>-    sep.pack(:side=&gt;:bottom, :fill=&gt;:x, :pady=&gt;10)</div><div class='del'>-    Tk.pack(labf1, labf2, :side=&gt;:left, :padx=&gt;4, :anchor=&gt;:n)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._stddlg(parent)</div><div class='del'>-    Tk.pack(TkButton.new(parent, :text=&gt;'Select a color '){|w|</div><div class='del'>-              command(proc{DemoDialog._show_color(w)})</div><div class='del'>-            }, </div><div class='del'>-            TkButton.new(parent, :text=&gt;'Font selector dialog', </div><div class='del'>-                         :command=&gt;proc{_show_fontdlg}), </div><div class='del'>-            TkButton.new(parent, :text=&gt;'Progression dialog', </div><div class='del'>-                         :command=&gt;proc{_show_progdlg}), </div><div class='del'>-            TkButton.new(parent, :text=&gt;'Password dialog', </div><div class='del'>-                         :command=&gt;proc{_show_passdlg}), </div><div class='del'>-            :side=&gt;:left, :padx=&gt;5, :anchor=&gt;:w)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._show_color(w)</div><div class='del'>-    dlg = Tk::BWidget::SelectColor.new(w, :color=&gt;w.background)</div><div class='del'>-    color = dlg.menu([:below, w])</div><div class='del'>-    unless color.empty?</div><div class='del'>-      w.background(color)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._show_tmpldlg</div><div class='del'>-    dlg = Tk::BWidget::Dialog.new(:relative=&gt;Tk.root, :modal=&gt;:local, </div><div class='del'>-                                  :separator=&gt;true, :title=&gt;'Template dialog', </div><div class='del'>-                                  :side=&gt;@@tmpl['side'], </div><div class='del'>-                                  :anchor=&gt;@@tmpl['anchor'], </div><div class='del'>-                                  :default=&gt;0, :cancel=&gt;1)</div><div class='del'>-    dlg.add('name'=&gt;'ok')</div><div class='del'>-    dlg.add('name'=&gt;'cancel')</div><div class='del'>-    TkMessage.new(dlg.get_frame, :text=&gt;"Template\nDialog", :justify=&gt;:center, </div><div class='del'>-                  :anchor=&gt;:c, :width=&gt;80).pack(:fill=&gt;:both, :expand=&gt;true, </div><div class='del'>-                                                :padx=&gt;100, :pady=&gt;100)</div><div class='del'>-    dlg.draw</div><div class='del'>-    dlg.destroy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._show_msgdlg</div><div class='del'>-    @@msgdlg.destroy if @@msgdlg</div><div class='del'>-    @@msgdlg = Tk::BWidget::MessageDlg.new(:relative=&gt;Tk.root, </div><div class='del'>-                                           :message=&gt;'Message for MessageBox', </div><div class='del'>-                                           :type=&gt;@@msg['type'], </div><div class='del'>-                                           :icon=&gt;@@msg['icon'], </div><div class='del'>-                                           :buttons=&gt;@@msg['buttons'])</div><div class='del'>-    @@msgdlg.create</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._show_fontdlg</div><div class='del'>-    font = Tk::BWidget::SelectFont.new(:relative=&gt;Tk.root, </div><div class='del'>-                                       :font=&gt;DemoVar.font).create</div><div class='del'>-    DemoVar::Demo.update_font(font)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._show_progdlg</div><div class='del'>-    @@progmsg.value = "Compute in progress..."</div><div class='del'>-    @@progval.value = 0</div><div class='del'>-</div><div class='del'>-    @@progdlg = Tk::BWidget::ProgressDlg.new(:relative=&gt;Tk.root, </div><div class='del'>-                                             :title=&gt;'Wait...', </div><div class='del'>-                                             :type=&gt;'infinite', :width=&gt;20, </div><div class='del'>-                                             :textvariable=&gt;@@progmsg, </div><div class='del'>-                                             :variable=&gt;@@progval, </div><div class='del'>-                                             :stop=&gt;'Stop') {</div><div class='del'>-      command(proc{self.destroy})</div><div class='del'>-      create</div><div class='del'>-    }</div><div class='del'>-    _update_progdlg</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._update_progdlg</div><div class='del'>-    TkTimer.new(20, -1, proc{</div><div class='del'>-                  if @@progdlg &amp;&amp; @@progdlg.winfo_exist?</div><div class='del'>-                    @@progval.value = 2</div><div class='del'>-                  else</div><div class='del'>-                    stop</div><div class='del'>-                  end</div><div class='del'>-                }).start</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._show_passdlg</div><div class='del'>-    Tk::BWidget::PasswdDlg.new(:relative=&gt;Tk.root).create</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/bwidget/tree.rb b/ext/tk/sample/tkextlib/bwidget/tree.rb<br/>deleted file mode 100644<br/>index e1fcaa774f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/tree.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/tree.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,289 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  templdlg demo  ---  called from demo.rb</div><div class='del'>-#</div><div class='del'>-unless Object.const_defined?('DemoVar')</div><div class='del'>-  fail RuntimeError, "This is NOT a stand alone script. This script is called from 'demo.rb'. "</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module DemoTree</div><div class='del'>-  @@count = 0</div><div class='del'>-  @@dblclick = false</div><div class='del'>-  @@top = nil</div><div class='del'>-</div><div class='del'>-  def self.create(nb)</div><div class='del'>-    frame = nb.insert('end', 'demoTree', :text=&gt;'Tree')</div><div class='del'>-    pw = Tk::BWidget::PanedWindow.new(frame, :side=&gt;:top)</div><div class='del'>-</div><div class='del'>-    pane = pw.add(:weight=&gt;1)</div><div class='del'>-    title = Tk::BWidget::TitleFrame.new(pane, :text=&gt;'Directory tree')</div><div class='del'>-    sw = Tk::BWidget::ScrolledWindow.new(title.get_frame, </div><div class='del'>-                                         :relief=&gt;:sunken, :borderwidth=&gt;2)</div><div class='del'>-    tree = Tk::BWidget::Tree.new(sw, :relief=&gt;:flat, :borderwidth=&gt;0, </div><div class='del'>-                                 :width=&gt;15, :highlightthickness=&gt;0, </div><div class='del'>-                                 :redraw=&gt;false, :dropenabled=&gt;true, </div><div class='del'>-                                 :dragenabled=&gt;true, :dragevent=&gt;3, </div><div class='del'>-                                 :droptypes=&gt;[</div><div class='del'>-                                   'TREE_NODE', [</div><div class='del'>-                                     :copy, [], </div><div class='del'>-                                     :move, [],</div><div class='del'>-                                     :link, []</div><div class='del'>-                                   ], </div><div class='del'>-                                   'LISTBOX_ITEM', [</div><div class='del'>-                                     :copy, [], </div><div class='del'>-                                     :move, [],</div><div class='del'>-                                     :link, []</div><div class='del'>-                                   ]</div><div class='del'>-                                 ], </div><div class='del'>-                                 :opencmd=&gt;proc{|node| </div><div class='del'>-                                   moddir(1, tree, node)</div><div class='del'>-                                 }, </div><div class='del'>-                                 :closecmd=&gt;proc{|node| </div><div class='del'>-                                   moddir(0, tree, node)</div><div class='del'>-                                 })</div><div class='del'>-    sw.set_widget(tree)</div><div class='del'>-</div><div class='del'>-    sw.pack(:side=&gt;:top, :expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-    title.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    pane = pw.add(:weight=&gt;2)</div><div class='del'>-    lf = Tk::BWidget::TitleFrame.new(pane, :text=&gt;'Content')</div><div class='del'>-    sw = Tk::BWidget::ScrolledWindow.new(lf.get_frame, </div><div class='del'>-                                         :scrollbar=&gt;:horizontal, </div><div class='del'>-                                         :auto=&gt;:none, :relief=&gt;:sunken, </div><div class='del'>-                                         :borderwidth=&gt;2)</div><div class='del'>-</div><div class='del'>-    list = Tk::BWidget::ListBox.new(sw, :relief=&gt;:flat, :borderwidth=&gt;0, </div><div class='del'>-                                    :highlightthickness=&gt;0, :width=&gt;20, </div><div class='del'>-                                    :multicolumn=&gt;true, :redraw=&gt;false, </div><div class='del'>-                                    :dragevent=&gt;3, :dropenabled=&gt;true, </div><div class='del'>-                                    :dragenabled=&gt;true, </div><div class='del'>-                                 :droptypes=&gt;[</div><div class='del'>-                                      'TREE_NODE', [</div><div class='del'>-                                        :copy, [], </div><div class='del'>-                                        :move, [],</div><div class='del'>-                                        :link, []</div><div class='del'>-                                      ], </div><div class='del'>-                                      'LISTBOX_ITEM', [</div><div class='del'>-                                        :copy, [], </div><div class='del'>-                                        :move, [],</div><div class='del'>-                                        :link, []</div><div class='del'>-                                      ]</div><div class='del'>-                                    ])</div><div class='del'>-    sw.set_widget(list)</div><div class='del'>-</div><div class='del'>-    Tk.pack(sw, lf, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    pw.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-    tree.textbind('ButtonPress-1',</div><div class='del'>-                  proc{|node, ev| select('tree', 1, tree, list, node)})</div><div class='del'>-    tree.textbind('Double-ButtonPress-1', </div><div class='del'>-                  proc{|node, ev| select('tree', 2, tree, list, node)})</div><div class='del'>-</div><div class='del'>-    list.textbind('ButtonPress-1',</div><div class='del'>-                  proc{|node, ev| select('list', 1, tree, list, node)})</div><div class='del'>-    list.textbind('Double-ButtonPress-1', </div><div class='del'>-                  proc{|node, ev| select('list', 2, tree, list, node)})</div><div class='del'>-</div><div class='del'>-    list.imagebind('Double-ButtonPress-1', </div><div class='del'>-                   proc{|node, ev| select('list', 2, tree, list, node)})</div><div class='del'>-</div><div class='del'>-    nb.itemconfigure('demoTree', </div><div class='del'>-                     :createcmd=&gt;proc{|*args| init(tree, list, *args)}, </div><div class='del'>-                     :raisecmd=&gt;proc{</div><div class='del'>-                       Tk.root.geometry =~ </div><div class='del'>-                         /\d+x\d+([+-]{1,2}\d+)([+-]{1,2}\d+)/</div><div class='del'>-                       global_w = ($1 || 0).to_i</div><div class='del'>-                       global_h = ($2 || 0).to_i</div><div class='del'>-                       if @@top</div><div class='del'>-                         Tk::BWidget.place(@@top, 0, 0, :at, </div><div class='del'>-                            global_w - Tk.root.winfo_screenwidth, global_h)</div><div class='del'>-                         @@top.deiconify</div><div class='del'>-                         Tk.root.bind('Unmap', proc{@@top.withdraw})</div><div class='del'>-                         Tk.root.bind('Map',   proc{@@top.deiconify})</div><div class='del'>-                         Tk.root.bind('Configure', proc{|w|</div><div class='del'>-                                if w == Tk.root</div><div class='del'>-                                  Tk.root.geometry =~ </div><div class='del'>-                                    /\d+x\d+([+-]{1,2}\d+)([+-]{1,2}\d+)/</div><div class='del'>-                                  global_w = ($1 || 0).to_i</div><div class='del'>-                                  global_h = ($2 || 0).to_i</div><div class='del'>-                                  Tk::BWidget.place(@@top, 0, 0, :at, </div><div class='del'>-                                       global_w - Tk.root.winfo_screenwidth, </div><div class='del'>-                                       global_h)</div><div class='del'>-                                end</div><div class='del'>-                         }, '%W')</div><div class='del'>-                       end</div><div class='del'>-                     }, </div><div class='del'>-                     :leavecmd=&gt;proc{</div><div class='del'>-                       @@top.withdraw if @@top</div><div class='del'>-                       Tk.root.bind_remove('Unmap')</div><div class='del'>-                       Tk.root.bind_remove('Map')</div><div class='del'>-                       Tk.root.bind_remove('Configure')</div><div class='del'>-                       true</div><div class='del'>-                     })</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.init(tree, list, *args)</div><div class='del'>-    @@count = 0</div><div class='del'>-    if Tk::PLATFORM['platform'] == 'unix'</div><div class='del'>-      rootdir = File.expand_path('~')</div><div class='del'>-    else</div><div class='del'>-      rootdir = 'c:'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tree.insert('end', 'root', 'home', </div><div class='del'>-                :text=&gt;rootdir, :data=&gt;rootdir, :open=&gt;true, </div><div class='del'>-                :image=&gt;Tk::BWidget::Bitmap.new('openfold'))</div><div class='del'>-    getdir(tree, 'home', rootdir)</div><div class='del'>-    select('tree', 1, tree, list, 'home')</div><div class='del'>-    tree.redraw(true)</div><div class='del'>-    list.redraw(true)</div><div class='del'>-</div><div class='del'>-    @@top = TkToplevel.new</div><div class='del'>-    @@top.withdraw</div><div class='del'>-    @@top.protocol('WM_DELETE_WINDOW'){</div><div class='del'>-      # don't kill me</div><div class='del'>-    }</div><div class='del'>-    @@top.resizable(false, false)</div><div class='del'>-    @@top.title('Drag rectangle to scroll directory tree')</div><div class='del'>-    @@top.transient(Tk.root)</div><div class='del'>-    Tk::BWidget::ScrollView.new(@@top, :window=&gt;tree, :fill=&gt;'white', </div><div class='del'>-                                :width=&gt;300, :height=&gt;300, :relief=&gt;:sunken, </div><div class='del'>-                                :bd=&gt;1).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.getdir(tree, node, path)</div><div class='del'>-    lentries = Dir.glob(File.join(path, '*')).sort</div><div class='del'>-    lfiles = []</div><div class='del'>-    lentries.each{|f|</div><div class='del'>-      basename = File.basename(f)      </div><div class='del'>-      if File.directory?(f)</div><div class='del'>-        Tk::BWidget::Tree::Node.new(tree, node, </div><div class='del'>-                                    :index=&gt;'end', :text=&gt;basename, </div><div class='del'>-                                    :image=&gt;Tk::BWidget::Bitmap.new('folder'), </div><div class='del'>-                                    :drawcross=&gt;:allways, :data=&gt;f)</div><div class='del'>-        @@count += 1</div><div class='del'>-      else</div><div class='del'>-        lfiles &lt;&lt; basename</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    tree.itemconfigure(node, :drawcross=&gt;:auto, :data=&gt;lfiles)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.moddir(idx, tree, node)</div><div class='del'>-    if (idx != 0 &amp;&amp; tree.itemcget(node, :drawcross).to_s == 'allways')</div><div class='del'>-      getdir(tree, node, tree.itemcget(node, :data))</div><div class='del'>-      if tree.nodes(node).empty?</div><div class='del'>-        tree.itemconfigure(node, :image=&gt;Tk::BWidget::Bitmap.new('folder'))</div><div class='del'>-      else</div><div class='del'>-        tree.itemconfigure(node, :image=&gt;Tk::BWidget::Bitmap.new('openfold'))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      img = %w(folder openfold)[idx] || 'openfold'</div><div class='del'>-      tree.itemconfigure(node, :image=&gt;Tk::BWidget::Bitmap.new(img))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.select(where, num, tree, list, node)</div><div class='del'>-    @@dblclick = true</div><div class='del'>-    if num == 1</div><div class='del'>-      if (where == 'tree' &amp;&amp; </div><div class='del'>-          tree.selection_get.find{|x|</div><div class='del'>-            TkUtil._get_eval_string(x) == TkUtil._get_eval_string(node)</div><div class='del'>-          })</div><div class='del'>-        @@dblclick = false</div><div class='del'>-        Tk.after(500, proc{edit('tree', tree, list, node)})</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      if (where == 'list' &amp;&amp; </div><div class='del'>-          list.selection_get.find{|x|</div><div class='del'>-            TkUtil._get_eval_string(x) == TkUtil._get_eval_string(node)</div><div class='del'>-          })</div><div class='del'>-        @@dblclick = false</div><div class='del'>-        Tk.after(500, proc{edit('list', tree, list, node)})</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      if where == 'tree'</div><div class='del'>-        select_node(tree, list, node)</div><div class='del'>-      else</div><div class='del'>-        list.selection_set(node)</div><div class='del'>-      end</div><div class='del'>-    elsif (where == 'list' &amp;&amp; tree.exist?(node))</div><div class='del'>-      parent = tree.parent(node)</div><div class='del'>-      while TkUtil._get_eval_string(parent) != 'root'</div><div class='del'>-        tree.itemconfigure(parent, :open=&gt;true)</div><div class='del'>-        parent = tree.parent(parent)</div><div class='del'>-      end</div><div class='del'>-      select_node(tree, list, node)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.select_node(tree, list, node)</div><div class='del'>-    tree.selection_set(node)</div><div class='del'>-    Tk.update</div><div class='del'>-    list.delete(*(list.items(0, 'end')))</div><div class='del'>-</div><div class='del'>-    dir = tree.itemcget(node, :data)</div><div class='del'>-    if tree.itemcget(node, :drawcross).to_s == 'allways'</div><div class='del'>-      getdir(tree, node, dir)</div><div class='del'>-      dir = tree.itemcget(node, :data)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tree.nodes(node).each{|subnode|</div><div class='del'>-      list.insert('end', subnode, </div><div class='del'>-                  :text=&gt;tree.itemcget(subnode, :text), </div><div class='del'>-                  :image=&gt;Tk::BWidget::Bitmap.new('folder'))</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    TkComm.simplelist(dir).each{|f|</div><div class='del'>-      Tk::BWidget::ListBox::Item.new(list, 'end', :text=&gt;f, </div><div class='del'>-                                     :image=&gt;Tk::BWidget::Bitmap.new('file'))</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.edit(where, tree, list, node)</div><div class='del'>-    return if @@dblclick</div><div class='del'>-</div><div class='del'>-    if (where == 'tree' &amp;&amp; </div><div class='del'>-        tree.selection_get.find{|x|</div><div class='del'>-          TkUtil._get_eval_string(x) == TkUtil._get_eval_string(node)</div><div class='del'>-        })</div><div class='del'>-      res = tree.edit(node, tree.itemcget(node, :text))</div><div class='del'>-      if res != ''</div><div class='del'>-        tree.itemconfigure(node, :text=&gt;res)</div><div class='del'>-        if list.exist?(node)</div><div class='del'>-          list.itemconfigure(node, :text=&gt;res)</div><div class='del'>-        end</div><div class='del'>-        tree.selection_set(node)</div><div class='del'>-      end</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if (where == 'list')</div><div class='del'>-      res = list.edit(node, list.igemcget(node, :text))</div><div class='del'>-      if res != ''</div><div class='del'>-        list.itemconfigure(node, :text=&gt;res)</div><div class='del'>-        if tree.exist?(node)</div><div class='del'>-          tree.itemconfigure(node, :text=&gt;res)</div><div class='del'>-        else</div><div class='del'>-          cursel = tree.selection_get[0]</div><div class='del'>-          index  = list.index(node) - tree.nodes(cursel).size</div><div class='del'>-          data   = TkComm.simplelist(tree.itemcget(cursel, :data))</div><div class='del'>-          data[index] = res</div><div class='del'>-          tree.itemconfigure(cursel, :date=&gt;data)</div><div class='del'>-        end</div><div class='del'>-        list.selection_set(node)</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.expand(tree, but)</div><div class='del'>-    unless (cur = tree.selection_get).empty?</div><div class='del'>-      if TkComm.bool(but)</div><div class='del'>-        tree.opentree(cur)</div><div class='del'>-      else</div><div class='del'>-        tree.closetree(cur)</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/sample/tkextlib/bwidget/x1.xbm b/ext/tk/sample/tkextlib/bwidget/x1.xbm<br/>deleted file mode 100644<br/>index 6137a118f8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/bwidget/x1.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/bwidget/x1.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2258 +0,0 @@</div><div class='del'>-#define x1_width 626</div><div class='del'>-#define x1_height 428</div><div class='del'>-static char x1_bits[] = {</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x80,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x3f,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xc0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x07,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x01,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x07,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x0f,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf8,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0x3f,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x3f,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xe0,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x1f,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x07,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x01,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x01,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x01,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc0,0xff,0x07,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x07,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf8,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xfc,0xff,0x0f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfe,0xff,0x0f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x80,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xc0,0xff,0xff,0x1f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xe0,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x1f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x07,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0x01,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x01,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0x7f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x3f,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0x1f,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x07,0x00,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0x03,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0x01,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0x00,0x00,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x07,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x80,0x7f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0xe0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x0f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,</div><div class='del'>- 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x80,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x07,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x80,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x3f,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x06,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xfd,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x3f,0xfc,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfc,0x00,0x00,0x00,0x00,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0xfc,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x0f,0xfc,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0xfc,0x00,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0xfc,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x07,0xfc,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfc,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0xfc,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xfc,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0xfc,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xfc,0x00,0x00,0x80,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0xfc,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0xfc,0x00,0x00,0xe0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0xfc,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0xfc,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xfc,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x0f,0x00,0xfc,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xfc,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xfc,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0xfc,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xfc,0x00,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xfc,0x00,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0xfc,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xfc,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0xfc,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xfc,0x00,0xf0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0xfc,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfc,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfc,0x00,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x03,0x00,0x00,0xfc,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xfc,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xfc,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x00,0xfc,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xfc,0x00,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xfc,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0x00,0xfc,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfc,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0xe0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfc,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x0f,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x07,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x7f,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x01,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xe0,</div><div class='del'>- 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x80,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x80,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0xc0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xe0,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0x00,0xf8,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xfc,0xff,0xff,0x03,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x01,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x07,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x07,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xf0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x03,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x03,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x01,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x3f,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x3f,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0xff,0xff,0x1f,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xf0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0x07,0x00,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x01,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xe0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x80,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0x03,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x03,0x00,</div><div class='del'>- 0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xc0,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x7f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x7f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xf8,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,</div><div class='del'>- 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xf0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xc0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x01,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x7f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0x1f,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xc0,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0x7f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xf8,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xfc,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0x01,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfe,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x07,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xc0,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0xc0,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf8,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x1f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x80,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xf8,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x80,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0xc0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x80,</div><div class='del'>- 0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,</div><div class='del'>- 0x00,0xfc};</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt<br/>deleted file mode 100644<br/>index 22f787609d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,42 +0,0 @@</div><div class='del'>-</div><div class='del'>-  #######################################################################</div><div class='del'>-  ###  The following text is the original 'license.terms' of iwidges  ###</div><div class='del'>-  ###  extension.                                                     ###</div><div class='del'>-  ###  Original Tcl source files are not include in this directry,    ###</div><div class='del'>-  ###  because of all of them are rewrited to Ruby files.             ###</div><div class='del'>-  ###  However, the image data files in the 'images' directory are    ###</div><div class='del'>-  ###  quoted from iwidgets source archive.                           ###</div><div class='del'>-  #######################################################################</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-This software is copyrighted by DSC Technologies and private individual </div><div class='del'>-contributors.  The copyright holder is specifically listed in the header </div><div class='del'>-of each file.  The following terms apply to all files associated with the</div><div class='del'>-software unless explicitly disclaimed in individual files by private</div><div class='del'>-contributors.</div><div class='del'>-</div><div class='del'>-Copyright 1997 DSC Technologies Corporation</div><div class='del'>-</div><div class='del'>-Permission to use, copy, modify, distribute and license this software and </div><div class='del'>-its documentation for any purpose, and without fee or written agreement </div><div class='del'>-with DSC, is hereby granted, provided that the above copyright notice </div><div class='del'>-appears in all copies and that both the copyright notice and warranty </div><div class='del'>-disclaimer below appear in supporting documentation, and that the names of</div><div class='del'>-DSC Technologies Corporation or DSC Communications Corporation not be used </div><div class='del'>-in advertising or publicity pertaining to the software without specific, </div><div class='del'>-written prior permission.</div><div class='del'>-</div><div class='del'>-DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL</div><div class='del'>-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-INFRINGEMENT.</div><div class='del'>-THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND </div><div class='del'>-DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,</div><div class='del'>-ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL DSC BE LIABLE FOR ANY</div><div class='del'>-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER</div><div class='del'>-RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF</div><div class='del'>-CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN</div><div class='del'>-CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</div><div class='del'>-</div><div class='del'>-RESTRICTED RIGHTS: Use, duplication or disclosure by the government</div><div class='del'>-is subject to the restrictions as set forth in subparagraph (c) (1) (ii)</div><div class='del'>-of the Rights in Technical Data and Computer Software Clause as DFARS</div><div class='del'>-252.227-7013 and FAR 52.227-19.</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm<br/>deleted file mode 100644<br/>index 7498e15de2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#define Tool_32_box_width 32</div><div class='del'>-#define Tool_32_box_height 32</div><div class='del'>-static unsigned char Tool_32_box_bits[] = {</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x20, 0x00, 0x00, 0x08,</div><div class='del'>-  0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,</div><div class='del'>-  0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,</div><div class='del'>-  0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,</div><div class='del'>-  0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,</div><div class='del'>-  0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08,</div><div class='del'>-  0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif<br/>deleted file mode 100644<br/>index bd45628aa7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif<br/>deleted file mode 100644<br/>index f91b9e9d1e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif<br/>deleted file mode 100644<br/>index 7319f1dcb0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif<br/>deleted file mode 100644<br/>index 4258b17591..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif<br/>deleted file mode 100644<br/>index e462be033f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif<br/>deleted file mode 100644<br/>index dddcb8044b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif<br/>deleted file mode 100644<br/>index bc8f18c00d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm<br/>deleted file mode 100644<br/>index 4622ae978b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#define lineOp_width 32</div><div class='del'>-#define lineOp_height 32</div><div class='del'>-static unsigned char lineOp_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,</div><div class='del'>-   0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00,</div><div class='del'>-   0x80, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,</div><div class='del'>-   0x00, 0x3c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,</div><div class='del'>-   0x00, 0xe0, 0x01, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00,</div><div class='del'>-   0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3c, 0x00,</div><div class='del'>-   0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x01,</div><div class='del'>-   0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x0f,</div><div class='del'>-   0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif<br/>deleted file mode 100644<br/>index 4a5be66e76..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif<br/>deleted file mode 100644<br/>index 9c68ad35f5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif<br/>deleted file mode 100644<br/>index bed862c8c4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm<br/>deleted file mode 100644<br/>index 856bd43785..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#define ovalOp_width 32</div><div class='del'>-#define ovalOp_height 32</div><div class='del'>-static unsigned char ovalOp_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00,</div><div class='del'>-   0x00, 0x1c, 0x70, 0x00, 0x00, 0x03, 0x80, 0x01, 0x80, 0x00, 0x00, 0x02,</div><div class='del'>-   0x40, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x10,</div><div class='del'>-   0x10, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20,</div><div class='del'>-   0x08, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x10,</div><div class='del'>-   0x10, 0x00, 0x00, 0x10, 0x20, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x04,</div><div class='del'>-   0x80, 0x00, 0x00, 0x02, 0x00, 0x03, 0x80, 0x01, 0x00, 0x1c, 0x70, 0x00,</div><div class='del'>-   0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif<br/>deleted file mode 100644<br/>index 9974f23bf5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm<br/>deleted file mode 100644<br/>index c50aa4c5f3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#define dotPencilOp_width 32</div><div class='del'>-#define dotPencilOp_height 32</div><div class='del'>-static unsigned char dotPencilOp_bits[] = {</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x12, 0x00,</div><div class='del'>-  0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x80, 0x04, 0x00,</div><div class='del'>-  0x00, 0x80, 0x04, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00,</div><div class='del'>-  0x00, 0x20, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00,</div><div class='del'>-  0x00, 0x90, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00,</div><div class='del'>-  0x00, 0x24, 0x00, 0x18, 0x00, 0x24, 0x00, 0x18, 0x00, 0x12, 0x00, 0x00,</div><div class='del'>-  0x00, 0x12, 0x00, 0x30, 0x00, 0x0e, 0x00, 0x30, 0x00, 0x06, 0x00, 0x00,</div><div class='del'>-  0x00, 0x06, 0x0c, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x30, 0xa0, 0x01,</div><div class='del'>-  0x00, 0x60, 0xb0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif<br/>deleted file mode 100644<br/>index 2b595bb9b7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif<br/>deleted file mode 100644<br/>index d321f17457..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif<br/>deleted file mode 100644<br/>index 00d26febf6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif<br/>deleted file mode 100644<br/>index d1ceb1a5c4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif<br/>deleted file mode 100644<br/>index f885c9ca5f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm b/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm<br/>deleted file mode 100644<br/>index ffb0686303..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,14 +0,0 @@</div><div class='del'>-#define font_edit_width 32</div><div class='del'>-#define font_edit_height 32</div><div class='del'>-static unsigned char font_edit_bits[] = {</div><div class='del'>-  0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1c,</div><div class='del'>-  0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x80, 0x7b,</div><div class='del'>-  0x00, 0x00, 0x80, 0x7e, 0x00, 0x00, 0xc0, 0xfd, 0x00, 0x00, 0x60, 0xfb,</div><div class='del'>-  0x00, 0x00, 0xb0, 0xf7, 0x00, 0x00, 0xd0, 0xef, 0x00, 0x00, 0xf8, 0xdf,</div><div class='del'>-  0x00, 0x00, 0xd4, 0x7f, 0x00, 0x00, 0xaa, 0x1f, 0x00, 0x00, 0x15, 0x0f,</div><div class='del'>-  0x00, 0x80, 0x82, 0x06, 0x03, 0x40, 0x01, 0x01, 0x07, 0xa0, 0x80, 0x00,</div><div class='del'>-  0x0f, 0x10, 0x40, 0x00, 0x1f, 0x08, 0x20, 0x00, 0x3b, 0xe4, 0x1f, 0x00,</div><div class='del'>-  0x73, 0x1a, 0x00, 0x00, 0xe3, 0x07, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00,</div><div class='del'>-  0xe3, 0x03, 0x00, 0x00, 0x7b, 0x07, 0x00, 0x00, 0x1f, 0x06, 0x00, 0x00,</div><div class='del'>-  0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,</div><div class='del'>-  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb<br/>deleted file mode 100644<br/>index 2b7cd45205..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-# sample 1</div><div class='del'>-p bb1 = Tk::Iwidgets::Buttonbox.new</div><div class='del'>-p bb1.add('Yes',   :text=&gt;'Yes',   :command=&gt;proc{puts 'Yes'})</div><div class='del'>-p bb1.add('No',    :text=&gt;'No',    :command=&gt;proc{puts 'No'})</div><div class='del'>-p bb1.add('Maybe', :text=&gt;'Maybe', :command=&gt;proc{puts 'Maybe'})</div><div class='del'>-bb1.default('Yes')</div><div class='del'>-bb1.pack(:expand=&gt;true, :fill=&gt;:both, :pady=&gt;5)</div><div class='del'>-print "\n"</div><div class='del'>-</div><div class='del'>-# sample 2</div><div class='del'>-p bb2 = Tk::Iwidgets::Buttonbox.new</div><div class='del'>-p btn1 = bb2.add(:text=&gt;'Yes',   :command=&gt;proc{puts 'Yes'})</div><div class='del'>-p btn2 = bb2.add(:text=&gt;'No',    :command=&gt;proc{puts 'No'})</div><div class='del'>-p btn3 = bb2.add(:text=&gt;'Maybe', :command=&gt;proc{puts 'Maybe'})</div><div class='del'>-bb2.default(btn1)</div><div class='del'>-bb2.pack(:expand=&gt;true, :fill=&gt;:both, :pady=&gt;5)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb b/ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb<br/>deleted file mode 100644<br/>index 4dd929c035..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Calendar.new(:command=&gt;proc{|arg| puts(arg.date)}, </div><div class='del'>-                           :weekendbackground=&gt;'mistyrose', </div><div class='del'>-                           :weekdaybackground=&gt;'ghostwhite', </div><div class='del'>-                           :outline=&gt;'black', :startday=&gt;'wednesday', </div><div class='del'>-                           :days=&gt;%w(We Th Fr Sa Su Mo Tu)).pack</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb<br/>deleted file mode 100644<br/>index c7c043000a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Canvasprintbox.new(:orient=&gt;:landscape, :stretch=&gt;1) \</div><div class='del'>-  .pack(:padx=&gt;10, :pady=&gt;10, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb<br/>deleted file mode 100644<br/>index ea8d63e6eb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Canvasprintdialog.new.activate</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb<br/>deleted file mode 100644<br/>index bae0eba73a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,12 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-cb = Tk::Iwidgets::Checkbox.new</div><div class='del'>-cb.add('bold',      :text=&gt;'Bold')</div><div class='del'>-cb.add('italic',    :text=&gt;'Italic')</div><div class='del'>-cb.add('underline', :text=&gt;'Underline')</div><div class='del'>-cb.select('underline')</div><div class='del'>-cb.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb<br/>deleted file mode 100644<br/>index ec9c7a1df3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Non-editable Dropdown Combobox</div><div class='del'>-#</div><div class='del'>-cb1 = Tk::Iwidgets::Combobox.new(:labeltext=&gt;'Month:', </div><div class='del'>-                                 :selectioncommand=&gt;proc{</div><div class='del'>-                                   puts(cb1.get_curselection)</div><div class='del'>-                                 }, </div><div class='del'>-                                 :editable=&gt;false, :listheight=&gt;185, </div><div class='del'>-                                 :popupcursor=&gt;'hand1')</div><div class='del'>-</div><div class='del'>-cb1.insert_list('end', *%w(Jan Feb Mar Apr May June Jul Aug Sept Oct Nov Dec))</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Editable Dropdown Combobox</div><div class='del'>-#</div><div class='del'>-cb2 = Tk::Iwidgets::Combobox.new(:labeltext=&gt;'Operating System:', </div><div class='del'>-                                 :selectioncommand=&gt;proc{</div><div class='del'>-                                   puts(cb2.get_curselection)</div><div class='del'>-                                 })</div><div class='del'>-</div><div class='del'>-cb2.insert_list('end', *%w(Linux HP-UX SunOS Solaris Irix))</div><div class='del'>-cb2.insert_entry('end', 'L')</div><div class='del'>-</div><div class='del'>-cb1.pack(:padx=&gt;10, :pady=&gt;10, :fill=&gt;:x)</div><div class='del'>-cb2.pack(:padx=&gt;10, :pady=&gt;10, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb b/ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb<br/>deleted file mode 100644<br/>index 5727879217..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Dateentry.new.pack</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb b/ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb<br/>deleted file mode 100644<br/>index 12d498245d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-df = Tk::Iwidgets::Datefield.new(:command=&gt;proc{puts(df.get)})</div><div class='del'>-df.pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;10,  :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb<br/>deleted file mode 100644<br/>index 3449cd4b3d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-d = Tk::Iwidgets::Dialog.new(:modality=&gt;:application)</div><div class='del'>-</div><div class='del'>-d.buttonconfigure('OK', :command=&gt;proc{puts 'OK'; d.deactivate true})</div><div class='del'>-d.buttonconfigure('Apply', :command=&gt;proc{puts 'Apply'})</div><div class='del'>-d.buttonconfigure('Cancel', :command=&gt;proc{puts 'Cancel'; d.deactivate false})</div><div class='del'>-d.buttonconfigure('Help', :command=&gt;proc{puts 'Help'})</div><div class='del'>-</div><div class='del'>-TkListbox.new(d.child_site, :relief=&gt;:sunken).pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-if TkComm.bool(d.activate)</div><div class='del'>-  puts "Exit via OK button"</div><div class='del'>-else</div><div class='del'>-  puts "Exit via Cancel button"</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb b/ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb<br/>deleted file mode 100644<br/>index 197521e0a4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb</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'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-ds = Tk::Iwidgets::Dialogshell.new(:modality=&gt;:none)</div><div class='del'>-</div><div class='del'>-ds.add('OK', :text=&gt;'OK', :command=&gt;proc{puts 'OK'; ds.deactivate})</div><div class='del'>-ds.add('Cancel', :text=&gt;'Cancel', :command=&gt;proc{puts 'Cancel'; ds.deactivate})</div><div class='del'>-ds.default('OK')</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'ACTIVATE', :padx=&gt;7, :pady=&gt;7, </div><div class='del'>-             :command=&gt;proc{puts ds.activate}).pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb<br/>deleted file mode 100644<br/>index 85c5d03d17..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-djl = Tk::Iwidgets::Disjointlistbox.new.pack(:fill=&gt;:both, :expand=&gt;true, </div><div class='del'>-                                             :padx=&gt;10,  :pady=&gt;10)</div><div class='del'>-djl.set_lhs(*[0,2,4,5])</div><div class='del'>-djl.set_rhs(3,6)</div><div class='del'>-</div><div class='del'>-djl.insert_lhs(1,7,8)</div><div class='del'>-djl.insert_rhs(9)</div><div class='del'>-</div><div class='del'>-p djl.get_lhs</div><div class='del'>-p djl.get_rhs</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb b/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb<br/>deleted file mode 100644<br/>index 856d883a92..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.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'>-#</div><div class='del'>-#  use Tk::UTF8_String() for a utf8 charecter</div><div class='del'>-#</div><div class='del'>-#########################################################</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-TkOption.add('*textBackground', 'white')</div><div class='del'>-</div><div class='del'>-ef  = Tk::Iwidgets::Entryfield.new(:command=&gt;proc{puts "Return Pressed"})</div><div class='del'>-</div><div class='del'>-fef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Fixed:', </div><div class='del'>-                                   :fixed=&gt;10, :width=&gt;12)</div><div class='del'>-</div><div class='del'>-nef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Numeric:', </div><div class='del'>-                                   :validate=&gt;:numeric, :width=&gt;12)</div><div class='del'>-</div><div class='del'>-aef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Alphabetic:', </div><div class='del'>-                                   :validate=&gt;:alphabetic, :width=&gt;12, </div><div class='del'>-                                   :invalid=&gt;proc{</div><div class='del'>-                                     puts "Alphabetic contents invalid"</div><div class='del'>-                                   })</div><div class='del'>-</div><div class='del'>-pef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Password:', :width=&gt;12, </div><div class='del'>-                                   :show=&gt;Tk::UTF8_String("\267"),  </div><div class='del'>-                                                         ## &lt;=== utf8 character</div><div class='del'>-                                   :command=&gt;proc{puts "Return Pressed"})</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Labeledwidget.alignlabels(ef, fef, nef, aef, pef)</div><div class='del'>-</div><div class='del'>-ef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-fef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-nef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-aef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-pef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb<br/>deleted file mode 100644<br/>index 4a4c2e7eb7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#########################################################</div><div class='del'>-#</div><div class='del'>-#  set $KCODE to 'utf' for a utf8 charecter</div><div class='del'>-#</div><div class='del'>-#########################################################</div><div class='del'>-$KCODE='utf'</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-TkOption.add('*textBackground', 'white')</div><div class='del'>-</div><div class='del'>-ef  = Tk::Iwidgets::Entryfield.new(:command=&gt;proc{puts "Return Pressed"})</div><div class='del'>-</div><div class='del'>-fef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Fixed:', </div><div class='del'>-                                   :fixed=&gt;10, :width=&gt;12)</div><div class='del'>-</div><div class='del'>-nef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Numeric:', </div><div class='del'>-                                   :validate=&gt;:numeric, :width=&gt;12)</div><div class='del'>-</div><div class='del'>-aef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Alphabetic:', </div><div class='del'>-                                   :validate=&gt;:alphabetic, :width=&gt;12, </div><div class='del'>-                                   :invalid=&gt;proc{</div><div class='del'>-                                     puts "Alphabetic contents invalid"</div><div class='del'>-                                   })</div><div class='del'>-</div><div class='del'>-pef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Password:', :width=&gt;12, </div><div class='del'>-                                   :show=&gt;"\267",  ## &lt;=== utf8 character</div><div class='del'>-                                   :command=&gt;proc{puts "Return Pressed"})</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Labeledwidget.alignlabels(ef, fef, nef, aef, pef)</div><div class='del'>-</div><div class='del'>-ef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-fef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-nef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-aef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-pef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb b/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb<br/>deleted file mode 100644<br/>index bddd542f64..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#########################################################</div><div class='del'>-#</div><div class='del'>-#  set Tk.encoding = 'utf-8' for a utf8 charecter</div><div class='del'>-#</div><div class='del'>-#########################################################</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk.encoding = 'utf-8'</div><div class='del'>-</div><div class='del'>-TkOption.add('*textBackground', 'white')</div><div class='del'>-</div><div class='del'>-ef  = Tk::Iwidgets::Entryfield.new(:command=&gt;proc{puts "Return Pressed"})</div><div class='del'>-</div><div class='del'>-fef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Fixed:', </div><div class='del'>-                                   :fixed=&gt;10, :width=&gt;12)</div><div class='del'>-</div><div class='del'>-nef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Numeric:', </div><div class='del'>-                                   :validate=&gt;:numeric, :width=&gt;12)</div><div class='del'>-</div><div class='del'>-aef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Alphabetic:', </div><div class='del'>-                                   :validate=&gt;:alphabetic, :width=&gt;12, </div><div class='del'>-                                   :invalid=&gt;proc{</div><div class='del'>-                                     puts "Alphabetic contents invalid"</div><div class='del'>-                                   })</div><div class='del'>-</div><div class='del'>-pef = Tk::Iwidgets::Entryfield.new(:labeltext=&gt;'Password:', :width=&gt;12, </div><div class='del'>-                                   :show=&gt;"\267",  ## &lt;=== utf8 character</div><div class='del'>-                                   :command=&gt;proc{puts "Return Pressed"})</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Labeledwidget.alignlabels(ef, fef, nef, aef, pef)</div><div class='del'>-</div><div class='del'>-ef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-fef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-nef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-aef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-pef.pack(:fil=&gt;:x,  :expand=&gt;true, :padx=&gt;10, :pady=&gt;5)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb b/ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb<br/>deleted file mode 100644<br/>index 6971052b60..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,20 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Extbutton.new(:text=&gt;'Bitmap example', :bitmap=&gt;'info', </div><div class='del'>-                            :background=&gt;'bisque',  :activeforeground=&gt;'red', </div><div class='del'>-                            :bitmapforeground=&gt;'blue', :defaultring=&gt;true, </div><div class='del'>-                            :command=&gt;proc{</div><div class='del'>-                              puts "Bisque is beautiful"</div><div class='del'>-                            }).pack(:expand=&gt;true)</div><div class='del'>-</div><div class='del'>-#img = TkPhotoImage.new(:file=&gt;File.join(File.dirname(File.expand_path(__FILE__)), '../../../images/earthris.gif'))</div><div class='del'>-img = TkPhotoImage.new(:file=&gt;File.join(File.dirname(File.expand_path(__FILE__)), '../catalog_demo/images/clear.gif'))</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Extbutton.new(:text=&gt;'Image example', :relief=&gt;:ridge, </div><div class='del'>-                            :image=&gt;img, :imagepos=&gt;:e, :font=&gt;'9x15bold', </div><div class='del'>-                            :activebackground=&gt;'lightyellow', </div><div class='del'>-                            :background=&gt;'lightgreen').pack(:expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb<br/>deleted file mode 100644<br/>index 4738084d9d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Extfileselectionbox.new.pack(:padx=&gt;10, :pady=&gt;10, </div><div class='del'>-                                           :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb<br/>deleted file mode 100644<br/>index c1a9b3defd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mainloop = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Non-modal example</div><div class='del'>-#</div><div class='del'>-nmfsd = Tk::Iwidgets::Extfileselectiondialog.new(:title=&gt;'Non-Modal')</div><div class='del'>-nmfsd.buttonconfigure('OK', :command=&gt;proc{</div><div class='del'>-                        puts "You selected #{nmfsd.get}"</div><div class='del'>-                        nmfsd.deactivate</div><div class='del'>-                      })</div><div class='del'>-nmfsd.activate</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Modal example</div><div class='del'>-#</div><div class='del'>-mfsd = Tk::Iwidgets::Extfileselectiondialog.new(:modality=&gt;:application)</div><div class='del'>-mfsd.center</div><div class='del'>-if TkComm.bool(mfsd.activate)</div><div class='del'>-  puts "You selected #{mfsd.get}"</div><div class='del'>-else</div><div class='del'>-  puts "You cancelled the dialog"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-mainloop.join</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb b/ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb<br/>deleted file mode 100644<br/>index 7b87a029ed..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Feedback.new(:labeltext=&gt;'Status', :steps=&gt;20){|fb|</div><div class='del'>-  pack(:padx=&gt;10, :pady=&gt;10, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  TkTimer.new(500, 20, proc{fb.step}).start(2500)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb<br/>deleted file mode 100644<br/>index 2ad3adb974..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Fileselectionbox.new.pack(:padx=&gt;10, :pady=&gt;10, </div><div class='del'>-                                        :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb<br/>deleted file mode 100644<br/>index ff22b2f643..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,28 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mainloop = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Non-modal example</div><div class='del'>-#</div><div class='del'>-nmfsd = Tk::Iwidgets::Fileselectiondialog.new(:title=&gt;'Non-Modal')</div><div class='del'>-nmfsd.buttonconfigure('OK', :command=&gt;proc{</div><div class='del'>-                        puts "You selected #{nmfsd.get}"</div><div class='del'>-                        nmfsd.deactivate</div><div class='del'>-                      })</div><div class='del'>-nmfsd.activate</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Modal example</div><div class='del'>-#</div><div class='del'>-mfsd = Tk::Iwidgets::Fileselectiondialog.new(:modality=&gt;:application)</div><div class='del'>-mfsd.center</div><div class='del'>-if TkComm.bool(mfsd.activate)</div><div class='del'>-  puts "You selected #{mfsd.get}"</div><div class='del'>-else</div><div class='del'>-  puts "You cancelled the dialog"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-mainloop.join</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb<br/>deleted file mode 100644<br/>index 110efb9b96..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,15 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mainloop = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-st = Tk::Iwidgets::Scrolledtext.new.pack</div><div class='del'>-st.insert('end', "Now is the time for all good men\n")</div><div class='del'>-st.insert('end', "to come to the aid of their country")</div><div class='del'>-</div><div class='del'>-fd = Tk::Iwidgets::Finddialog.new(:textwidget=&gt;st)</div><div class='del'>-fd.center(st)</div><div class='del'>-fd.activate</div><div class='del'>-</div><div class='del'>-mainloop.join</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb b/ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb<br/>deleted file mode 100644<br/>index ddb08d8b78..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-def get_files(file)</div><div class='del'>-  dir = (file.empty?)? ENV['HOME'] : TkComm._fromUTF8(file)</div><div class='del'>-  Dir.chdir(dir) rescue return ''</div><div class='del'>-  Dir['*'].sort.collect{|f|</div><div class='del'>-    [TkComm._toUTF8(File.join(dir, f)), TkComm._toUTF8(f)]</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Hierarchy.new(:querycommand=&gt;proc{|arg| get_files(arg.node)}, </div><div class='del'>-                            :visibleitems=&gt;'30x15', </div><div class='del'>-                            :labeltext=&gt;ENV['HOME']).pack(:side=&gt;:left, </div><div class='del'>-                                                          :expand=&gt;true, </div><div class='del'>-                                                          :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-# Tk::Iwidgets::Hierarchy.new(:querycommand=&gt;[proc{|n| get_files(n)}, '%n'], </div><div class='del'>-#                           :visibleitems=&gt;'30x15', </div><div class='del'>-#                           :labeltext=&gt;ENV['HOME']).pack(:side=&gt;:left, </div><div class='del'>-#                                                         :expand=&gt;true, </div><div class='del'>-#                                                         :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb b/ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb<br/>deleted file mode 100644<br/>index f9c92bf6dc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb</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'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mainloop = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-dir  = '/usr/local/ActiveTcl/demos/IWidgets/html/'</div><div class='del'>-href = [ 'hyperhelp.n', 'buttonbox.n', 'calendar.n' ]</div><div class='del'>-</div><div class='del'>-hh = Tk::Iwidgets::Hyperhelp.new(:topics=&gt;href, :helpdir=&gt;dir)</div><div class='del'>-hh.show_topic('hyperhelp.n')</div><div class='del'>-hh.activate</div><div class='del'>-</div><div class='del'>-mainloop.join</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb b/ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb<br/>deleted file mode 100644<br/>index 4e2e21e727..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb</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'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-lf = Tk::Iwidgets::Labeledframe.new(:labeltext=&gt;'Entry Frame', :labelpos=&gt;:n)</div><div class='del'>-lf.pack(:fill=&gt;:both, :expand=&gt;true, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-cs = lf.child_site</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Entryfield.new(cs, :labeltext=&gt;'Name:').pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-Tk::Iwidgets::Spinint.new(cs, :labeltext=&gt;'Number:').pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-Tk::Iwidgets::Pushbutton.new(cs, :text=&gt;'Details:').pack(:side=&gt;:top, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb b/ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb<br/>deleted file mode 100644<br/>index 1d2e0a98a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-lw = Tk::Iwidgets::Labeledwidget.new(:labeltext=&gt;'Canvas Widget', </div><div class='del'>-                                     :labelpos=&gt;:s)</div><div class='del'>-lw.pack(:fill=&gt;:both, :expand=&gt;true, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-cw = TkCanvas.new(lw.child_site, :relief=&gt;:raised, :width=&gt;200, :height=&gt;200, </div><div class='del'>-                  :borderwidth=&gt;3, :background=&gt;:white)</div><div class='del'>-cw.pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb b/ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb<br/>deleted file mode 100644<br/>index b87a6d27f9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,64 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mw = Tk::Iwidgets::Mainwindow.new</div><div class='del'>-</div><div class='del'>-mw.menubar.add(:menubutton, 'file', :text=&gt;'File', :underline=&gt;0, </div><div class='del'>-               :padx=&gt;8, :pady=&gt;2, :menu=&gt;[</div><div class='del'>-                 [:options, {:tearoff=&gt;false}], </div><div class='del'>-</div><div class='del'>-                 [:command, 'new', {</div><div class='del'>-                     :label=&gt;'New', :underline=&gt;0, </div><div class='del'>-                     :helpstr=&gt;'Create a new file'</div><div class='del'>-                   }</div><div class='del'>-                 ], </div><div class='del'>-</div><div class='del'>-                 [:command, 'open', {</div><div class='del'>-                     :label=&gt;'Open ...', :underline=&gt;0, </div><div class='del'>-                     :helpstr=&gt;'Open an existing file'</div><div class='del'>-                   }</div><div class='del'>-                 ], </div><div class='del'>-</div><div class='del'>-                 [:command, 'save', {</div><div class='del'>-                     :label=&gt;'Save', :underline=&gt;0, </div><div class='del'>-                     :helpstr=&gt;'Save the current file'</div><div class='del'>-                   }</div><div class='del'>-                 ], </div><div class='del'>-</div><div class='del'>-                 [:command, 'saveas', {</div><div class='del'>-                     :label=&gt;'Save As', :underline=&gt;5, </div><div class='del'>-                     :helpstr=&gt;'Save the file as a different name'</div><div class='del'>-                   }</div><div class='del'>-                 ], </div><div class='del'>-</div><div class='del'>-                 [:command, 'print', {</div><div class='del'>-                     :label=&gt;'Print', :underline=&gt;0, </div><div class='del'>-                     :helpstr=&gt;'Print the file'</div><div class='del'>-                   }</div><div class='del'>-                 ], </div><div class='del'>-</div><div class='del'>-                 [:separator, 'sep1'], </div><div class='del'>-</div><div class='del'>-                 [:command, 'close', {</div><div class='del'>-                     :label=&gt;'Close', :underline=&gt;0, </div><div class='del'>-                     :helpstr=&gt;'Close the file'</div><div class='del'>-                   }</div><div class='del'>-                 ], </div><div class='del'>-</div><div class='del'>-                 [:separator, 'sep2'], </div><div class='del'>-</div><div class='del'>-                 [:command, 'exit', {</div><div class='del'>-                     :label=&gt;'Exit', :underline=&gt;1, </div><div class='del'>-                     :helpstr=&gt;'Exit this application'</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'>-Tk::Iwidgets::Scrolledtext.new(mw.child_site).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-mw.activate</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb b/ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb<br/>deleted file mode 100644<br/>index 891761adc1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,124 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-helpvar = TkVariable.new</div><div class='del'>-viewmode = TkVariable.new</div><div class='del'>-</div><div class='del'>-menu_spec = [</div><div class='del'>-  [:menubutton, 'file', {</div><div class='del'>-      :text=&gt;'File', :menu=&gt;[</div><div class='del'>-        [:options, {:tearoff=&gt;false}], </div><div class='del'>-</div><div class='del'>-        [:command, 'new', {</div><div class='del'>-            :label=&gt;'New', :helpstr=&gt;'Open new document', </div><div class='del'>-            :command=&gt;proc{puts 'NEW'}</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-</div><div class='del'>-        [:command, 'close', {</div><div class='del'>-            :label=&gt;'Close', :helpstr=&gt;'Close current document', </div><div class='del'>-            :command=&gt;proc{puts 'CLOSE'}</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-</div><div class='del'>-        [:separator, 'sep1'], </div><div class='del'>-</div><div class='del'>-        [:command, 'exit', {</div><div class='del'>-            :label=&gt;'Exit', :helpstr=&gt;'Exit application', </div><div class='del'>-            :command=&gt;proc{exit}</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'>-  [:menubutton, 'edit', {</div><div class='del'>-      :text=&gt;'Edit', :menu=&gt;[</div><div class='del'>-        [:options, {:tearoff=&gt;false}], </div><div class='del'>-</div><div class='del'>-        [:command, 'undo', {</div><div class='del'>-            :label=&gt;'Undo', :underline=&gt;0, </div><div class='del'>-            :helpstr=&gt;'Undo last command', </div><div class='del'>-            :command=&gt;proc{puts 'UNDO'}</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-</div><div class='del'>-        [:separator, 'sep2'], </div><div class='del'>-</div><div class='del'>-        [:command, 'cut', {</div><div class='del'>-            :label=&gt;'Cut', :underline=&gt;1, </div><div class='del'>-            :helpstr=&gt;'Cut selection to clipboard', </div><div class='del'>-            :command=&gt;proc{puts 'CUT'}</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-</div><div class='del'>-        [:command, 'copy', {</div><div class='del'>-            :label=&gt;'Copy', :underline=&gt;1, </div><div class='del'>-            :helpstr=&gt;'Copy selection to clipboard', </div><div class='del'>-            :command=&gt;proc{puts 'COPY'}</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-</div><div class='del'>-        [:command, 'paste', {</div><div class='del'>-            :label=&gt;'Paste', :underline=&gt;0, </div><div class='del'>-            :helpstr=&gt;'Paste clipboard contents', </div><div class='del'>-            :command=&gt;proc{puts 'PASTE'}</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'>-  [:menubutton, 'options', {</div><div class='del'>-      :text=&gt;'Options', :menu=&gt;[</div><div class='del'>-        [:options, {:tearoff=&gt;false, :selectcolor=&gt;'blue'}], </div><div class='del'>-</div><div class='del'>-        [:radiobutton, 'byName', {</div><div class='del'>-            :variable=&gt;viewmode, :value=&gt;'NAME', </div><div class='del'>-            :label=&gt;'by Name', :helpstr=&gt;'View files by name order', </div><div class='del'>-            :command=&gt;proc{puts 'NAME'}</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-</div><div class='del'>-        [:radiobutton, 'byDate', {</div><div class='del'>-            :variable=&gt;viewmode, :value=&gt;'DATE', </div><div class='del'>-            :label=&gt;'by Date', :helpstr=&gt;'View files by date order', </div><div class='del'>-            :command=&gt;proc{puts 'DATE'}</div><div class='del'>-          }</div><div class='del'>-        ], </div><div class='del'>-</div><div class='del'>-        [:cascade, 'prefs', {</div><div class='del'>-            :label=&gt;'Preferences', :menu=&gt;[</div><div class='del'>-              [:command, 'colors', {</div><div class='del'>-                  :label=&gt;'Colors...', :helpstr=&gt;'Change text colors', </div><div class='del'>-                  :command=&gt;proc{puts 'COLORS'}</div><div class='del'>-                }</div><div class='del'>-              ], </div><div class='del'>-</div><div class='del'>-              [:command, 'fonts', {</div><div class='del'>-                  :label=&gt;'Fonts...', :helpstr=&gt;'Change text font', </div><div class='del'>-                  :command=&gt;proc{puts 'COLORS'}</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'>-  ]</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-#mb = Tk::Iwidgets::Menubar.new(:helpvariable=&gt;helpvar, </div><div class='del'>-#                              :menubuttons=&gt;menu_spec)</div><div class='del'>-mb = Tk::Iwidgets::Menubar.new(:helpvariable=&gt;helpvar)</div><div class='del'>-mb.configure(:menubuttons=&gt;menu_spec)</div><div class='del'>-</div><div class='del'>-fr = TkFrame.new(:width=&gt;300, :height=&gt;300)</div><div class='del'>-ef = TkEntry.new(:textvariable=&gt;helpvar)</div><div class='del'>-</div><div class='del'>-mb.pack(:anchor=&gt;:nw, :fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-fr.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-ef.pack(:anchor=&gt;:sw, :fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb<br/>deleted file mode 100644<br/>index d6f2292650..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,44 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-helpvar = TkVariable.new</div><div class='del'>-viewmode = TkVariable.new</div><div class='del'>-</div><div class='del'>-mb = Tk::Iwidgets::Menubar.new</div><div class='del'>-mb.menubuttons = [</div><div class='del'>-  [:menubutton, 'file', {</div><div class='del'>-      :text=&gt;'File', :menu=&gt;[</div><div class='del'>-        [:command,   'new',   {:label=&gt;'New'}], </div><div class='del'>-        [:command,   'close', {:label=&gt;'Close'}], </div><div class='del'>-        [:separator, 'sep1'], </div><div class='del'>-        [:command,   'quit',  {:label=&gt;'Quit'}]</div><div class='del'>-      ]</div><div class='del'>-    }</div><div class='del'>-  ], </div><div class='del'>-  [:menubutton, 'edit', {:text=&gt;'Edit'}]</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-mb.add(:command, '.edit.undo', :label=&gt;'Undo', :underline=&gt;0)</div><div class='del'>-mb.add(:separator, '.edit.sep2')</div><div class='del'>-mb.add(:command, '.edit.cut',   :label=&gt;'Cut',   :underline=&gt;1)</div><div class='del'>-mb.add(:command, '.edit.copy',  :label=&gt;'Copy',  :underline=&gt;1)</div><div class='del'>-mb.add(:command, '.edit.paste', :label=&gt;'Paste', :underline=&gt;0)</div><div class='del'>-</div><div class='del'>-mb.add(:menubutton, '.options', :text=&gt;'Options', :menu=&gt;[</div><div class='del'>-         [:radiobutton, 'byName', {</div><div class='del'>-             :variable=&gt;viewmode, :value=&gt;'NAME', :label=&gt;'by Name'}</div><div class='del'>-         ], </div><div class='del'>-         [:radiobutton, 'byDate', {</div><div class='del'>-             :variable=&gt;viewmode, :value=&gt;'DATE', :label=&gt;'by Date'}</div><div class='del'>-         ]</div><div class='del'>-       ])</div><div class='del'>-</div><div class='del'>-mb.add(:cascade, '.options.prefs', :label=&gt;'Preferences', :menu=&gt;[</div><div class='del'>-         [:command, 'colors', {:label=&gt;'Colors...'}], </div><div class='del'>-         [:command, 'fonts',  {:label=&gt;'Fonts...'}]</div><div class='del'>-       ])</div><div class='del'>-</div><div class='del'>-mb.pack(:side=&gt;:left, :anchor=&gt;:nw, :fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb b/ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb<br/>deleted file mode 100644<br/>index 3221dbc30c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mb = Tk::Iwidgets::Messagebox.new(:hscrollmode=&gt;:dynamic, </div><div class='del'>-                                  :labeltext=&gt;'Messages', :labelpos=&gt;:n, </div><div class='del'>-                                  :height=&gt;120, :width=&gt;550, </div><div class='del'>-                                  :savedir=&gt;'/tmp', :textbackground=&gt;'#d9d9d9')</div><div class='del'>-mb.pack(:padx=&gt;5, :pady=&gt;5, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-mb.type_add('ERROR', :background=&gt;'red', :foreground=&gt;'white', :bell=&gt;true)</div><div class='del'>-mb.type_add('WARNING', :background=&gt;'yellow', :foreground=&gt;'black')</div><div class='del'>-mb.type_add('INFO', :background=&gt;'white', :foreground=&gt;'black')</div><div class='del'>-</div><div class='del'>-mb.issue('This is an error message in red with a beep', 'ERROR')</div><div class='del'>-mb.issue('This warning message in yellow', 'WARNING')</div><div class='del'>-mb.issue('This is an informational message', 'INFO')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb<br/>deleted file mode 100644<br/>index 2f0e3648a6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mb = Tk::Iwidgets::Messagebox.new(:hscrollmode=&gt;:dynamic, </div><div class='del'>-                                  :labeltext=&gt;'Messages', :labelpos=&gt;:n, </div><div class='del'>-                                  :height=&gt;120, :width=&gt;550, </div><div class='del'>-                                  :savedir=&gt;'/tmp', :textbackground=&gt;'#d9d9d9')</div><div class='del'>-mb.pack(:padx=&gt;5, :pady=&gt;5, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-error   = mb.type_add(:background=&gt;'red', :foreground=&gt;'white', :bell=&gt;true)</div><div class='del'>-warning = mb.type_add(:background=&gt;'yellow', :foreground=&gt;'black')</div><div class='del'>-info    = mb.type_add(:background=&gt;'white', :foreground=&gt;'black')</div><div class='del'>-</div><div class='del'>-mb.issue('This is an error message in red with a beep', error)</div><div class='del'>-mb.issue('This warning message in yellow', warning)</div><div class='del'>-mb.issue('This is an informational message', info)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb<br/>deleted file mode 100644<br/>index 6c6bfbca3f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,44 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mainloop = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Standard question message dialog used for confirmation.</div><div class='del'>-#</div><div class='del'>-md = Tk::Iwidgets::Messagedialog.new(:title=&gt;'Message Dialog', </div><div class='del'>-                                     :text=&gt;'Are you sure ? ', </div><div class='del'>-                                     :bitmap=&gt;'questhead', :modality=&gt;:global)</div><div class='del'>-</div><div class='del'>-md.buttonconfigure('OK', :text=&gt;'Yes')</div><div class='del'>-md.buttonconfigure('Cancel', :text=&gt;'No')</div><div class='del'>-</div><div class='del'>-if TkComm.bool(md.activate)</div><div class='del'>-  md.text('Are you really sure ? ')</div><div class='del'>-  if TkComm.bool(md.activate)</div><div class='del'>-    puts 'Yes'</div><div class='del'>-  else</div><div class='del'>-    puts 'No'</div><div class='del'>-  end</div><div class='del'>-else</div><div class='del'>-  puts 'No'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-md.destroy</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Copyright notice with automatic deactivation.</div><div class='del'>-#</div><div class='del'>-bmp = '@' + File.join(File.dirname(File.expand_path(__FILE__)), '../catalog_demo/images/text.xbm')</div><div class='del'>-</div><div class='del'>-cr = Tk::Iwidgets::Messagedialog.new(:title=&gt;'Copyright', </div><div class='del'>-                                     :bitmap=&gt;bmp, :imagepos=&gt;:n, </div><div class='del'>-                                     :text=&gt;"Copyright 200x XXX Corporation\nAll rights reserved")</div><div class='del'>-</div><div class='del'>-cr.hide('Cancel')</div><div class='del'>-</div><div class='del'>-cr.activate</div><div class='del'>-Tk.after(7000, proc{cr.deactivate; Tk.root.destroy})</div><div class='del'>-</div><div class='del'>-mainloop.join</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb b/ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb<br/>deleted file mode 100644<br/>index e33b81eb6f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-# Create the tabnotebook widget and pack it.</div><div class='del'>-nb = Tk::Iwidgets::Notebook.new(:width=&gt;100, :height=&gt;100)</div><div class='del'>-nb.pack(:anchor=&gt;:nw, :fill=&gt;:both, :expand=&gt;true, </div><div class='del'>-        :side=&gt;:left, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-# Add two pages to the tabnotebook,</div><div class='del'>-# labelled "Page One" and "Page Two"</div><div class='del'>-nb.add(:label=&gt;'Page One')</div><div class='del'>-nb.add(:label=&gt;'Page Two')</div><div class='del'>-</div><div class='del'>-# Get the child site frames of these two pages.</div><div class='del'>-page1CS = nb.child_site(0)</div><div class='del'>-page2CS = nb.child_site('Page Two')</div><div class='del'>-</div><div class='del'>-# Create buttons on each page of the tabnotebook.</div><div class='del'>-TkButton.new(page1CS, :text=&gt;'Button One').pack</div><div class='del'>-TkButton.new(page2CS, :text=&gt;'Button Two').pack</div><div class='del'>-</div><div class='del'>-# Select the first page of the tabnotebook.</div><div class='del'>-nb.select(0)</div><div class='del'>-</div><div class='del'>-# Create the scrollbar and associate teh scrollbar</div><div class='del'>-# and the notebook together, then pack the scrollbar</div><div class='del'>-nb.scrollbar(TkScrollbar.new).pack(:fill=&gt;:y, :expand=&gt;true, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb<br/>deleted file mode 100644<br/>index 649de4f024..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-# Create the tabnotebook widget and pack it.</div><div class='del'>-nb = Tk::Iwidgets::Notebook.new(:width=&gt;100, :height=&gt;100)</div><div class='del'>-nb.pack(:anchor=&gt;:nw, :fill=&gt;:both, :expand=&gt;true, </div><div class='del'>-        :side=&gt;:top, :padx=&gt;10, :pady=&gt;0)</div><div class='del'>-</div><div class='del'>-# Add two pages to the tabnotebook,</div><div class='del'>-# labelled "Page One" and "Page Two"</div><div class='del'>-nb.add(:label=&gt;'Page One')</div><div class='del'>-nb.add(:label=&gt;'Page Two')</div><div class='del'>-</div><div class='del'>-# Get the child site frames of these two pages.</div><div class='del'>-page1CS = nb.child_site(0)</div><div class='del'>-page2CS = nb.child_site('Page Two')</div><div class='del'>-</div><div class='del'>-# Create buttons on each page of the tabnotebook.</div><div class='del'>-TkButton.new(page1CS, :text=&gt;'Button One').pack</div><div class='del'>-TkButton.new(page2CS, :text=&gt;'Button Two').pack</div><div class='del'>-</div><div class='del'>-# Select the first page of the tabnotebook.</div><div class='del'>-nb.select(0)</div><div class='del'>-</div><div class='del'>-# Create the scrollbar and associate teh scrollbar</div><div class='del'>-# and the notebook together, then pack the scrollbar</div><div class='del'>-nb.xscrollbar(TkScrollbar.new).pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb b/ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb<br/>deleted file mode 100644<br/>index 1fd7a5bc05..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb</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'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-om = Tk::Iwidgets::Optionmenu.new(:labelmargin=&gt;5, :labelpos=&gt;:w, </div><div class='del'>-                                  :labeltext=&gt;"Operating System :")</div><div class='del'>-</div><div class='del'>-om.insert('end', 'Unix', 'VMS', 'Linux', 'OS/2', 'Windows NT', 'DOS')</div><div class='del'>-om.sort_ascending</div><div class='del'>-om.select('Linux')</div><div class='del'>-</div><div class='del'>-om.pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb b/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb<br/>deleted file mode 100644<br/>index 6e4458e508..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-pw = Tk::Iwidgets::Panedwindow.new(:width=&gt;300, :height=&gt;300)</div><div class='del'>-</div><div class='del'>-pw.add('top')</div><div class='del'>-pw.add('middle', :margin=&gt;10)</div><div class='del'>-pw.add('bottom', :margin=&gt;10, :minimum=&gt;10)</div><div class='del'>-</div><div class='del'>-pw.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-pw.child_site_list.each{|pane|</div><div class='del'>-  TkButton.new(pane, :text=&gt;pane.path, :relief=&gt;:raised, </div><div class='del'>-               :borderwidth=&gt;2).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-pw.fraction(50,30,20)</div><div class='del'>-pw.paneconfigure(0, :minimum=&gt;20)</div><div class='del'>-pw.paneconfigure('bottom', :margin=&gt;15)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb<br/>deleted file mode 100644<br/>index 6779cb57db..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-pw = Tk::Iwidgets::Panedwindow.new(:width=&gt;300, :height=&gt;300)</div><div class='del'>-</div><div class='del'>-top = pw.add</div><div class='del'>-middle = pw.add(:margin=&gt;10)</div><div class='del'>-bottom = pw.add(:margin=&gt;10, :minimum=&gt;10)</div><div class='del'>-</div><div class='del'>-pw.pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-pw.child_site_list.each{|pane|</div><div class='del'>-  TkButton.new(pane, :text=&gt;pane.path, :relief=&gt;:raised, </div><div class='del'>-               :borderwidth=&gt;2).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-pw.fraction(50,30,20)</div><div class='del'>-pw.paneconfigure(0, :minimum=&gt;20)  # 0 == pw.index(top)</div><div class='del'>-pw.paneconfigure(bottom, :margin=&gt;15)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb<br/>deleted file mode 100644<br/>index 2c643e56f7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mainloop = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-TkOption.add('*textBackground', 'white')</div><div class='del'>-</div><div class='del'>-pd = Tk::Iwidgets::Promptdialog.new(:modality=&gt;:global, :title=&gt;'Password', </div><div class='del'>-                                    :labeltext=&gt;'Password:', :show=&gt;'*')</div><div class='del'>-pd.hide('Apply')</div><div class='del'>-</div><div class='del'>-if TkComm.bool(pd.activate)</div><div class='del'>-  puts "Password entered: #{pd.get}"</div><div class='del'>-else</div><div class='del'>-  puts "Password prompt cancelled"</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb b/ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb<br/>deleted file mode 100644<br/>index 6e1c3fffe3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,9 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Pushbutton.new(:text=&gt;'Hello', </div><div class='del'>-                             :command=&gt;proc{puts 'Hello World'}, </div><div class='del'>-                             :defaultring=&gt;true).pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb<br/>deleted file mode 100644<br/>index 9cd6a002b0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-rb = Tk::Iwidgets::Radiobox.new(:labeltext=&gt;'Fonts')</div><div class='del'>-rb.add('times',     :text=&gt;'Times')</div><div class='del'>-rb.add('helvetica', :text=&gt;'Helvetica')</div><div class='del'>-rb.add('courier',   :text=&gt;'Courier')</div><div class='del'>-rb.add('symbol',    :text=&gt;'Symbol')</div><div class='del'>-rb.select('courier')</div><div class='del'>-rb.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb<br/>deleted file mode 100644<br/>index 92c94b96bb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-sc = Tk::Iwidgets::Scrolledcanvas.new</div><div class='del'>-</div><div class='del'>-sc.create(TkcRectangle, 100, 100, 400, 400, :fill=&gt;'red')</div><div class='del'>-TkcRectangle.new(sc, 300, 300, 600, 600, :fill=&gt;'green')</div><div class='del'>-TkcRectangle.new(sc, [[200, 200], [500, 500]], :fill=&gt;'blue')</div><div class='del'>-</div><div class='del'>-sc.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb<br/>deleted file mode 100644<br/>index 5219847c9c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-sf = Tk::Iwidgets::Scrolledframe.new(:width=&gt;150, :height=&gt;180, </div><div class='del'>-                                     :labeltext=&gt;'scrolledframe')</div><div class='del'>-cs = sf.child_site</div><div class='del'>-</div><div class='del'>-TkButton.new(cs, :text=&gt;'Hello').pack(:pady=&gt;10)</div><div class='del'>-TkButton.new(cs, :text=&gt;'World').pack(:pady=&gt;10)</div><div class='del'>-TkButton.new(cs, :text=&gt;'This is a test').pack(:pady=&gt;10)</div><div class='del'>-TkButton.new(cs, :text=&gt;'This is a really big button').pack(:pady=&gt;10)</div><div class='del'>-TkButton.new(cs, :text=&gt;'This is another really big button').pack(:pady=&gt;10)</div><div class='del'>-TkButton.new(cs, :text=&gt;'This is the last really big button').pack(:pady=&gt;10)</div><div class='del'>-</div><div class='del'>-sf.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb<br/>deleted file mode 100644<br/>index 04334b8da8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,15 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-TkOption.add('*textBackground', 'white')</div><div class='del'>-</div><div class='del'>-sh = Tk::Iwidgets::Scrolledhtml.new(:fontname=&gt;'helvetica', </div><div class='del'>-                                    :linkcommand=&gt;proc{|href|</div><div class='del'>-                                      sh.import_link(href)</div><div class='del'>-                                    })</div><div class='del'>-sh.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-sh.import(Tk.getOpenFile(:title=&gt;'select HTML document'))</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb<br/>deleted file mode 100644<br/>index 0b69751911..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-TkOption.add('*textBackground', 'white')</div><div class='del'>-</div><div class='del'>-slb = Tk::Iwidgets::Scrolledlistbox.new(:selectmode=&gt;:single, </div><div class='del'>-                                        :vscrollmode=&gt;:static,</div><div class='del'>-                                        :hscrollmode=&gt;:dynamic,</div><div class='del'>-                                        :labeltext=&gt;'List', </div><div class='del'>-                                        :selectioncommand=&gt;proc{</div><div class='del'>-                                          puts(slb.get_curselection)</div><div class='del'>-                                        }, </div><div class='del'>-                                        :dblclickcommand=&gt;proc{</div><div class='del'>-                                          puts('Double Click')</div><div class='del'>-                                          puts(slb.get_curselection)</div><div class='del'>-                                        })</div><div class='del'>-slb.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-slb.insert('end', *['Hello', 'Out There', 'World'])</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb b/ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb<br/>deleted file mode 100644<br/>index dd1a99a829..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,11 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-st = Tk::Iwidgets::Scrolledtext.new(:hscrollmode=&gt;:dynamic, :wrap=&gt;:none, </div><div class='del'>-                                    :labeltext=&gt;'Password File')</div><div class='del'>-st.pack(:expand=&gt;true, :fill=&gt;:both, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-st.import('/etc/passwd')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb b/ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb<br/>deleted file mode 100644<br/>index a5d623ae80..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-TkOption.add('*textBackground', 'white')</div><div class='del'>-</div><div class='del'>-sb = Tk::Iwidgets::Selectionbox.new.pack(:padx=&gt;10, :pady=&gt;10, </div><div class='del'>-                                         :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-sb.insert_items('end', *['Hello', 'Out There', 'World'])</div><div class='del'>-</div><div class='del'>-TkLabel.new(sb.child_site, </div><div class='del'>-            :text=&gt;'Child Site is Here').pack(:fill=&gt;:x, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-sb.insert_items(2, 'Cruel Cruel')</div><div class='del'>-</div><div class='del'>-sb.selection_set(1)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb b/ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb<br/>deleted file mode 100644<br/>index f40b419180..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,12 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-mainloop = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'QUIT', </div><div class='del'>-             :command=&gt;proc{Tk.root.destroy}).pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Selectiondialog.new.activate</div><div class='del'>-</div><div class='del'>-mainloop.join</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/shell.rb b/ext/tk/sample/tkextlib/iwidgets/sample/shell.rb<br/>deleted file mode 100644<br/>index c44b5554a6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/shell.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/shell.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-sh = Tk::Iwidgets::Shell.new(:modality=&gt;:application, </div><div class='del'>-                             :padx=&gt;20, :pady=&gt;20, :title=&gt;'Shell')</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'ACTIVATE', :padx=&gt;7, :pady=&gt;7, </div><div class='del'>-             :command=&gt;proc{puts sh.activate}).pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-TkLabel.new(sh.child_site, :text=&gt;'SHELL').pack</div><div class='del'>-TkButton.new(sh.child_site, :text=&gt;'YES', </div><div class='del'>-             :command=&gt;proc{sh.deactivate 'press YES'}).pack(:fill=&gt;:x)</div><div class='del'>-TkButton.new(sh.child_site, :text=&gt;'NO', </div><div class='del'>-             :command=&gt;proc{sh.deactivate 'press NO'}).pack(:fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb b/ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb<br/>deleted file mode 100644<br/>index 17197a66b7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Spindate.new.pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb b/ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb<br/>deleted file mode 100644<br/>index 0bcdefb763..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-TkOption.add('*textBackground', 'white')</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Spinint.new(:labeltext=&gt;'Temperature', :labelpos=&gt;:w, :width=&gt;5, </div><div class='del'>-                          :fixed=&gt;true, :range=&gt;[32, 212]).pack(:pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb b/ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb<br/>deleted file mode 100644<br/>index 295d38ee96..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-class Spinner_demo &lt; TkWindow</div><div class='del'>-  Months = %w(January February March April May June July August September October November December)</div><div class='del'>-</div><div class='del'>-  def block_input(c)</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def spin_month(step)</div><div class='del'>-    index = Months.index(@spinner.get) + step</div><div class='del'>-    index = 11 if index &lt; 0</div><div class='del'>-    index = 0 if index &gt; 11</div><div class='del'>-</div><div class='del'>-    @spinner.value = Months[index]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(parent=nil)</div><div class='del'>-    @spinner = Tk::Iwidgets::Spinner.new(parent, :labeltext=&gt;'Month : ', </div><div class='del'>-                                         :width=&gt;10, :fixed=&gt;10, </div><div class='del'>-                                         :validate=&gt;proc{|c| block_input}, </div><div class='del'>-                                         :decrement=&gt;proc{spin_month -1}, </div><div class='del'>-                                         :increment=&gt;proc{spin_month 1})</div><div class='del'>-    @path = @spinner</div><div class='del'>-    @spinner.insert(0, Months[0])</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Spinner_demo.new.pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb b/ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb<br/>deleted file mode 100644<br/>index 2c13884b94..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Spintime.new.pack(:padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb b/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb<br/>deleted file mode 100644<br/>index 6f1ecc4fa4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,26 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-# Create the tabnotebook widget and pack it.</div><div class='del'>-tn = Tk::Iwidgets::Tabnotebook.new(:width=&gt;300, :height=&gt;100)</div><div class='del'>-tn.pack(:anchor=&gt;:nw, :fill=&gt;:both, :expand=&gt;true, </div><div class='del'>-        :side=&gt;:left, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-# Add two pages to the tabnotebook,</div><div class='del'>-# labelled "Page One" and "Page Two"</div><div class='del'>-tn.add(:label=&gt;'Page One')</div><div class='del'>-tn.add(:label=&gt;'Page Two')</div><div class='del'>-</div><div class='del'>-# Get the child site frames of these two pages.</div><div class='del'>-page1CS = tn.child_site(0)</div><div class='del'>-page2CS = tn.child_site('Page Two')</div><div class='del'>-</div><div class='del'>-# Create buttons on each page of the tabnotebook.</div><div class='del'>-TkButton.new(page1CS, :text=&gt;'Button One').pack</div><div class='del'>-TkButton.new(page2CS, :text=&gt;'Button Two').pack</div><div class='del'>-</div><div class='del'>-# Select the first page of the tabnotebook.</div><div class='del'>-tn.select(0)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb b/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb<br/>deleted file mode 100644<br/>index 4a5eef5a8f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-# Create the tabnotebook widget and pack it.</div><div class='del'>-tn = Tk::Iwidgets::Tabnotebook.new(:width=&gt;300, :height=&gt;100)</div><div class='del'>-tn.pack(:anchor=&gt;:nw, :fill=&gt;:both, :expand=&gt;true, </div><div class='del'>-        :side=&gt;:top, :padx=&gt;10, :pady=&gt;0)</div><div class='del'>-</div><div class='del'>-# Add two pages to the tabnotebook,</div><div class='del'>-# labelled "Page One" and "Page Two"</div><div class='del'>-tn.add(:label=&gt;'Page One')</div><div class='del'>-tn.add(:label=&gt;'Page Two')</div><div class='del'>-</div><div class='del'>-# Get the child site frames of these two pages.</div><div class='del'>-page1CS = tn.child_site(0)</div><div class='del'>-page2CS = tn.child_site('Page Two')</div><div class='del'>-</div><div class='del'>-# Create buttons on each page of the tabnotebook.</div><div class='del'>-TkButton.new(page1CS, :text=&gt;'Button One').pack</div><div class='del'>-TkButton.new(page2CS, :text=&gt;'Button Two').pack</div><div class='del'>-</div><div class='del'>-# Select the first page of the tabnotebook.</div><div class='del'>-tn.select(0)</div><div class='del'>-</div><div class='del'>-# Create the scrollbar</div><div class='del'>-# and the notebook together, then pack the scrollbar</div><div class='del'>-tn.xscrollbar(TkScrollbar.new).pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb b/ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb<br/>deleted file mode 100644<br/>index 90be46b40b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-# Create a listbox with two items (one and two)</div><div class='del'>-l = TkListbox.new(:selectmode=&gt;:single, :exportselection=&gt;false).pack</div><div class='del'>-l.insert('end', 'one')</div><div class='del'>-l.insert('end', 'two')</div><div class='del'>-l.selection_set(0)</div><div class='del'>-</div><div class='del'>-# Define a proc that knows how to select an item</div><div class='del'>-# from a list given an index from the tabset -command callback.</div><div class='del'>-selectItem = proc{|item|</div><div class='del'>-  l.selection_clear(l.curselection)</div><div class='del'>-  l.selection_set(item)</div><div class='del'>-  l.see(item)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Create a tabset, set its -command to call selectItem</div><div class='del'>-# Add two labels to the tabset (one and two).</div><div class='del'>-ts = Tk::Iwidgets::Tabset.new(:command=&gt;selectItem)</div><div class='del'>-ts.add(:label=&gt;1)</div><div class='del'>-ts.add(:label=&gt;2)</div><div class='del'>-ts.select(0)</div><div class='del'>-ts.pack(:fill=&gt;:x, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-# Define a proc that knows how to select a tab</div><div class='del'>-# given a y pixel coordinate from the list..</div><div class='del'>-selectTab = proc{|y| ts.select(l.nearest(y)) }</div><div class='del'>-</div><div class='del'>-# bind button 1 press to the selectTab procedure.</div><div class='del'>-l.bind('ButtonPress-1', proc{|y| selectTab.call(y) }, '%y')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb b/ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb<br/>deleted file mode 100644<br/>index 465939947b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Timeentry.new.pack</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb b/ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb<br/>deleted file mode 100644<br/>index bb5945048d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-tf = Tk::Iwidgets::Timefield.new(:command=&gt;proc{puts(tf.get)})</div><div class='del'>-tf.pack(:fill=&gt;:x, :expand=&gt;true, :padx=&gt;10,  :pady=&gt;10)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb b/ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb<br/>deleted file mode 100644<br/>index 355466eb1a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,152 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-##########################################</div><div class='del'>-# icon images</div><div class='del'>-editcopy22 = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-   R0lGODlhFgAWAIUAAPwCBBQSFPz+/DQyNISChDw6PMzKzMTGxERGRIyKjFxa</div><div class='del'>-   XMTCvKSmpHR2dPz6/Pz29PTq3MS2rPz69MTCxFxWVHx6dJyWjNzSzPz27Pzy</div><div class='del'>-   7Pzu5PTm3NTKvIR+fJyGfHxuZHxqXNTCtPTq5PTi1PTezNS+rExOTFRORMyy</div><div class='del'>-   lPTaxOzWxOzSvNze3NTOxMy2nMyulMyqjAQCBAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAbY</div><div class='del'>-   QIBwSCwahYGkUnk0BgTQ6IAQaBKfUWhBYKhaAU+CgXAQIAyChLeJzSIQhcH6</div><div class='del'>-   GFaM0QtGY5kstqEODw8QEQELAhJTc08KBBMEFBUWDRcBE1pca20SGBkaEBsc</div><div class='del'>-   AY5maFRIAgoLHRQRHh8gIQFlZnByqA8ZGSIQIyQjJQEmYgJ5p2ACrK4gJx4g</div><div class='del'>-   KIZZAgdeAQ4ZI9kjKSor0AwEjeAs1S0cHAslLi4vMDDRWeRIfEsxMeET4ATy</div><div class='del'>-   VoYLC5fizXEiAR84BeMG+pEm8EsAFhAjSlR4hR6fLxiF0AkCACH+aENyZWF0</div><div class='del'>-   ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29yIDE5</div><div class='del'>-   OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cuZGV2</div><div class='del'>-   ZWxjb3IuY29tADs=</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-editcut22 = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-   R0lGODlhFgAWAIMAAPwCBAQCBAwCBPz+/OTi5JyanOzq7DQyNGxqbAAAAAAA</div><div class='del'>-   AAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAARbEMhJq704gxBE</div><div class='del'>-   0Bf3cZo4kRJqBQNRfBucyudgvJS6VaxLzyMa6/bLiWA9HOg4VIIkL5vzuRkc</div><div class='del'>-   pkvRIIAorphJLzBW84WEuRZWp6uaT7J2Sh1Hit3OY/ZO7WvsEQAh/mhDcmVh</div><div class='del'>-   dGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAx</div><div class='del'>-   OTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRl</div><div class='del'>-   dmVsY29yLmNvbQA7</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-editpaste22 = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-   R0lGODlhFgAWAIYAAPwCBBQWFDw6FHRuFGRaBFxSBAQCBAQKBCQiBIx6HPz6</div><div class='del'>-   /NTOfKyiXDQuFOTm5Pz+/Ozu7PTq5Pz63PTyxNTOjKSeRExGLMTGxMzKzNTS</div><div class='del'>-   1NTW1Dw2NKSmpKyqrKSipJyanNzWlLy6ZLSuVIx6FISChIyKhJSSlCQiJLS2</div><div class='del'>-   tDw6NDQyNCQiFCQmHBQSDGRiZHRydGxubHx6dGxqbFxeXGRmZFxaXCwuLOzq</div><div class='del'>-   7KyurHx+fDwmFEQuFCweFCQWDBQODBwaHBweHKSinJSWlOTi5JyepHR2dDw6</div><div class='del'>-   PBQSFNze3ERGRIyKjIyOjISGhPz29Pzy7MS2rMzOzFRWVHx2dHxybDQiFPz2</div><div class='del'>-   7Pzu5PTq3PTm1NTCtJyGdHxuZHxqXPzq3PTaxNS6pFxWVFRKRNS2nPTi1PTS</div><div class='del'>-   tNSulNzOxNSynMymhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAA</div><div class='del'>-   LAAAAAAWABYAAAf/gACCgwABAgMEBYSLggaOjgcICQoLDA2Pj4MGDg8QEZ4F</div><div class='del'>-   DxITFBUWFxcYGRobjQ8cHR4fCQ8gCyEiFSMWJCUkJieNEB4dKB4pKissK8wr</div><div class='del'>-   LS4vMDHBAAYQHx8dFx0fJDIzNDU0M+IyHzaNNyg43Ng5Ojs7Ojw9Pj9AMkCN</div><div class='del'>-   DiZB/h9CSOx4QLCgihItqBkYgqIDESElitAYWJCgkQcXjjRCgi1Ihw4BB5LA</div><div class='del'>-   QOLCgyQYHihpUU3DBw5ElpAgAYNixSRJjKjQaECDCRPZPDB5IbIGSQwKLnh4</div><div class='del'>-   wbInLA4kmJB4oaPiAwVNnER40hRK1BIAaVatUZJEFCkmpmjgCeWDCalFe4q4</div><div class='del'>-   oFKwSRUrEa5gycLzwq8lUnPQ4PEgSpYcUZ5o2cIlS1O/JHLEDdfjQZMIVrpg</div><div class='del'>-   weLFy5e+M6WSmBGlxYMYYBRzCaOFi5imHWBIfOEiShLTVjaP6eyFTBmN1TA5</div><div class='del'>-   OvLDjJksWb58OVMGDRqWjAYdmU79SIvpjqJr104nEAAh/mhDcmVhdGVkIGJ5</div><div class='del'>-   IEJNUFRvR0lGIFBybyB2ZXJzaW9uIDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5</div><div class='del'>-   OTguIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQpodHRwOi8vd3d3LmRldmVsY29y</div><div class='del'>-   LmNvbQA7</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-editdelete22 = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-   R0lGODlhFgAWAIYAAASC/FRSVExKTERCRDw6PDQyNCwuLBweHBwaHAwODAwK</div><div class='del'>-   DAQCBExOTNze3NTW1MTGxLS2tJyanPz+/Ozu7BQSFCwqLDw+POTi5PTu7MzK</div><div class='del'>-   xIR+fCQmJPz6/Oze1NTGvPz69Pzy7Pz29LyyrPy+vPyupPTm1BQWFIQCBPwC</div><div class='del'>-   BMS6rPzSzNTOxPTi1NS+rPTezNzOxPTizOzWxMy2pOzaxMy2nPTaxOzOtMyy</div><div class='del'>-   nOzSvMyqjPx+fOzGpMSihPTq3OzKrOTCpNzKxNTCtAAAAAAAAAAAAAAAAAAA</div><div class='del'>-   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-   AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAA</div><div class='del'>-   LAAAAAAWABYAAAf8gACCAQIDBAUGBwgJCgsLgpCRAAwNlZYODxALEY+SkAMN</div><div class='del'>-   EqKjEw0UD5yegqCjrRMVEqidkgWhraMWF7GptLa3EgEWFRSOnhW+vxgZEBqz</div><div class='del'>-   kBvItxwdHryRCNGjHyAhHSLOgtgSI60c2yQjJd+eJqEnKK0hJCgnJSngAO0S</div><div class='del'>-   F+8qEvL0VrBogW+BLX4oVKgIyMIFQU8KfDV4R+8FDBcxZBREthAFiRIsOsyg</div><div class='del'>-   sVEUh4Un3pGoUcPGjZInK65QicPlxg8oX5RwqNJGjo0hdJwQ6EIkjRM6dvDY</div><div class='del'>-   CKIHSBc1Ztjw4eOH0oIrsgIJEqSFDBo0cuTgsdSTo7No0xYTZCcQACH+aENy</div><div class='del'>-   ZWF0ZWQgYnkgQk1QVG9HSUYgUHJvIHZlcnNpb24gMi41DQqpIERldmVsQ29y</div><div class='del'>-   IDE5OTcsMTk5OC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCmh0dHA6Ly93d3cu</div><div class='del'>-   ZGV2ZWxjb3IuY29tADs=</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-text22 = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-   R0lGODlhFgAWAIQAAPwCBAQCBBwaHAwKDBQSFLy+vLS2tJSWlBQWFKyqrFRS</div><div class='del'>-   VCwqLDQyNNTS1GxqbFxaXJyanIyOjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-   AAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAWABYAAAVcICCOZGmK</div><div class='del'>-   QSoMaZsShBsQBdAapHvgaIDUqUPJlRjSbAoT0fRDKgODRbF0PLUYjZO2F2Bs</div><div class='del'>-   t9evNix+dsvDlGKK5jraudQb7qbX6a2HEJ+ycyF+LRE8ZTI+fX5oGCEAIf5o</div><div class='del'>-   Q3JlYXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxD</div><div class='del'>-   b3IgMTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3</div><div class='del'>-   dy5kZXZlbGNvci5jb20AOw==</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-##########################################</div><div class='del'>-</div><div class='del'>-bmp_dir = File.join(File.dirname(File.expand_path(__FILE__)), </div><div class='del'>-                    '../catalog_demo/images')</div><div class='del'>-</div><div class='del'>-##########################################</div><div class='del'>-</div><div class='del'>-status_var = TkVariable.new</div><div class='del'>-radio_var  = TkVariable.new</div><div class='del'>-check_var1 = TkVariable.new</div><div class='del'>-check_var2 = TkVariable.new</div><div class='del'>-</div><div class='del'>-tb = Tk::Iwidgets::Toolbar.new(:helpvariable=&gt;status_var)</div><div class='del'>-</div><div class='del'>-##########################################</div><div class='del'>-</div><div class='del'>-tb.add(:button, :helpstr=&gt;'Copy It', :image=&gt;editcopy22, </div><div class='del'>-       :balloonstr=&gt;'Copy', :command=&gt;proc{puts 'Copy It'})</div><div class='del'>-</div><div class='del'>-tb.add(:button, :helpstr=&gt;'Cut It', :image=&gt;editcut22, </div><div class='del'>-       :balloonstr=&gt;'Cut', :command=&gt;proc{puts 'Cut It'})</div><div class='del'>-</div><div class='del'>-tb.add(:button, :helpstr=&gt;'Paste It', :image=&gt;editpaste22, </div><div class='del'>-       :balloonstr=&gt;'Paste', :command=&gt;proc{puts 'Paste It'})</div><div class='del'>-</div><div class='del'>-tb.add(:button, :helpstr=&gt;'Delete It', :image=&gt;editdelete22, </div><div class='del'>-       :balloonstr=&gt;'Delete', :command=&gt;proc{puts 'Delete It'})</div><div class='del'>-</div><div class='del'>-#--------------------------------</div><div class='del'>-</div><div class='del'>-tb.add(:frame, :borderwidth=&gt;1, :width=&gt;10, :height=&gt;10)</div><div class='del'>-</div><div class='del'>-#--------------------------------</div><div class='del'>-</div><div class='del'>-tb.add(:radiobutton, :variable=&gt;radio_var, :value=&gt;'Box', </div><div class='del'>-       :bitmap=&gt;"@#{bmp_dir}/box.xbm", </div><div class='del'>-       :helpstr=&gt;'Radio Button #1', :balloonstr=&gt;'Radio', </div><div class='del'>-       :command=&gt;proc{puts 'Radio Button "Box"'})</div><div class='del'>-</div><div class='del'>-tb.add(:radiobutton, :variable=&gt;radio_var, :value=&gt;'Line', </div><div class='del'>-       :bitmap=&gt;"@#{bmp_dir}/line.xbm", </div><div class='del'>-       :helpstr=&gt;'Radio Button #2', :balloonstr=&gt;'Radio', </div><div class='del'>-       :command=&gt;proc{puts 'Radio Button "Line"'})</div><div class='del'>-</div><div class='del'>-tb.add(:radiobutton, :variable=&gt;radio_var, :value=&gt;'Oval', </div><div class='del'>-       :bitmap=&gt;"@#{bmp_dir}/oval.xbm", </div><div class='del'>-       :helpstr=&gt;'Radio Button #3', :balloonstr=&gt;'Radio', </div><div class='del'>-       :command=&gt;proc{puts 'Radio Button "Oval"'})</div><div class='del'>-</div><div class='del'>-#--------------------------------</div><div class='del'>-</div><div class='del'>-tb.add(:frame, :borderwidth=&gt;1, :width=&gt;10, :height=&gt;10)</div><div class='del'>-</div><div class='del'>-#--------------------------------</div><div class='del'>-</div><div class='del'>-tb.add(:checkbutton, :variable=&gt;check_var1, :onvalue=&gt;'yes', :offvalue=&gt;'no', </div><div class='del'>-       :image=&gt;text22, :command=&gt;proc{puts 'Checkbutton 1'})</div><div class='del'>-</div><div class='del'>-tb.add(:checkbutton, :variable=&gt;check_var2, :onvalue=&gt;'yes', :offvalue=&gt;'no', </div><div class='del'>-       :bitmap=&gt;"@#{bmp_dir}/points.xbm", :command=&gt;proc{puts 'Checkbutton 2'})</div><div class='del'>-</div><div class='del'>-tb.pack(:side=&gt;:top, :anchor=&gt;:nw)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/iwidgets/sample/watch.rb b/ext/tk/sample/tkextlib/iwidgets/sample/watch.rb<br/>deleted file mode 100644<br/>index 808c798aec..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/iwidgets/sample/watch.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/iwidgets/sample/watch.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/iwidgets'</div><div class='del'>-</div><div class='del'>-Thread.new{</div><div class='del'>-  trap('INT') {puts 'catch SIGINT'}</div><div class='del'>-  sleep 5</div><div class='del'>-  trap('INT', 'DEFAULT')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk::Iwidgets::Watch.new(:state=&gt;:disabled, :showampm=&gt;:no, </div><div class='del'>-                        :width=&gt;155, :height=&gt;155){|w|</div><div class='del'>-  w.pack(:padx=&gt;10, :pady=&gt;10, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  # TkTimer.new(1000, -1, proc{w.show; Tk.update}).start</div><div class='del'>-  TkTimer.new(25, -1, proc{w.show; Tk.update}).start</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt<br/>deleted file mode 100644<br/>index 272853870c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-</div><div class='del'>-  &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  The following text is the original 'license.term' of tklib    &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  extension.                                                    &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  Original Tcl files are not include in this directry, because  &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  of all of them are rewrited to Ruby files.                    &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div class='del'>-</div><div class='del'>-This software is copyrighted by Ajuba Solutions and other parties.</div><div class='del'>-The following terms apply to all files associated with the software unless</div><div class='del'>-explicitly 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/tkextlib/tcllib/datefield.rb b/ext/tk/sample/tkextlib/tcllib/datefield.rb<br/>deleted file mode 100644<br/>index cfeca0c6de..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tcllib/datefield.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tcllib/datefield.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +0,0 @@</div><div class='del'>-#!/usr/bin/ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib/datefield'</div><div class='del'>-require 'parsedate'</div><div class='del'>-</div><div class='del'>-Tk.root.title('Datefield example')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-my_date1 = TkVariable.new</div><div class='del'>-my_date2 = TkVariable.new</div><div class='del'>-my_date1.trace('w'){</div><div class='del'>-  begin</div><div class='del'>-    t = Time.local(*(ParseDate.parsedate(my_date1.value)))</div><div class='del'>-    my_date2.value = t.strftime('%A')</div><div class='del'>-  rescue</div><div class='del'>-    # ignore error</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-df = Tk::Tcllib::Datefield.new(:textvariable=&gt;my_date1)</div><div class='del'>-Tk.grid(TkLabel.new(:text=&gt;'Enter a date:', :anchor=&gt;:e), df, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(TkLabel.new(:text=&gt;'That date ia a:', :anchor=&gt;:e), </div><div class='del'>-        TkLabel.new(:textvariable=&gt;my_date2, :relief=&gt;:sunken, :width=&gt;12), </div><div class='del'>-        :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-df.set_focus</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tcllib/plotdemos1.rb b/ext/tk/sample/tkextlib/tcllib/plotdemos1.rb<br/>deleted file mode 100644<br/>index 053b0de085..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tcllib/plotdemos1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tcllib/plotdemos1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,158 +0,0 @@</div><div class='del'>-#!/usr/bin/ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib/plotchart'</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-c1 = TkCanvas.new(:background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-c2 = TkCanvas.new(:background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-c3 = TkCanvas.new(:background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-Tk.pack(c1,c2,c3, :fill=&gt;:both, :side=&gt;:top)</div><div class='del'>-</div><div class='del'>-h = TkToplevel.new(:title=&gt;'h')</div><div class='del'>-hc1 = TkCanvas.new(h, :background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-hc2 = TkCanvas.new(h, :background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-Tk.pack(hc1,hc2, :fill=&gt;:both, :side=&gt;:top)</div><div class='del'>-</div><div class='del'>-v = TkToplevel.new(:title=&gt;'v')</div><div class='del'>-vc1 = TkCanvas.new(v, :background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-vc2 = TkCanvas.new(v, :background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-vc3 = TkCanvas.new(v, :background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-Tk.pack(vc1,vc2,vc3, :fill=&gt;:both, :side=&gt;:top)</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::XYPlot.new(c1, [0.0, 100.0, 10.0], </div><div class='del'>-                                          [0.0, 100.0, 20.0])</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-xd =    5.0</div><div class='del'>-yd =   20.0</div><div class='del'>-xold =  0.0</div><div class='del'>-yold = 50.0</div><div class='del'>-</div><div class='del'>-s.dataconfig('series1', :color=&gt;'red')</div><div class='del'>-</div><div class='del'>-(0..19).each{|i|</div><div class='del'>-  xnew = xold + xd</div><div class='del'>-  ynew = yold + (rand() - 0.5) * yd</div><div class='del'>-  ynew2 = yold + (rand() - 0.5) * 2.0 * yd</div><div class='del'>-  s.plot('series1', xnew, ynew)</div><div class='del'>-  s.plot('series2', xnew, ynew2)</div><div class='del'>-  xold = xnew</div><div class='del'>-  yold = ynew</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-s.xtext "X-coordinate"</div><div class='del'>-s.ytext "Y-data"</div><div class='del'>-s.title "Aha!"</div><div class='del'>-</div><div class='del'>-c1.wait_visibility</div><div class='del'>-</div><div class='del'>-s.save_plot "aha.ps"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::Piechart.new(c2)</div><div class='del'>-</div><div class='del'>-s.plot([ ["Long names", 10], ["Short names", 30], </div><div class='del'>-         ["Average", 40],    ["Ultra-short names", 5] ])</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Note: title should be shifted up</div><div class='del'>-#       - distinguish a separate title area</div><div class='del'>-#</div><div class='del'>-s.title "Okay - this works"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::PolarPlot.new(c3, [3.0, 1.0])</div><div class='del'>-</div><div class='del'>-0.step(359, 10){|angle|</div><div class='del'>-  rad = 1.0+Math.cos(angle*Math::PI/180.0)</div><div class='del'>-  s.plot('cardioid', rad, angle)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-s.title "Cardioid"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::Barchart.new(hc1, %w(A B C D E), </div><div class='del'>-                                        [0.0, 10.0, 2.0], 2)</div><div class='del'>-</div><div class='del'>-s.plot('series1', [1.0, 4.0, 6.0, 1.0, 7.0], 'red')</div><div class='del'>-s.plot('series2', [0.0, 3.0, 7.0, 9.3, 2.0], 'green')</div><div class='del'>-s.title "Arbitrary data"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::Barchart.new(hc2, %w(A B C D E), </div><div class='del'>-                                        [0.0, 20.0, 5.0], :stacked)</div><div class='del'>-</div><div class='del'>-s.plot('series1', [1.0, 4.0, 6.0, 1.0, 7.0], 'red')</div><div class='del'>-s.plot('series2', [0.0, 3.0, 7.0, 9.3, 2.0], 'green')</div><div class='del'>-s.title "Stacked diagram"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::HorizontalBarchart.new(vc1, [0.0, 10.0, 2.0], </div><div class='del'>-                                                  %w(A B C D E), 2)</div><div class='del'>-</div><div class='del'>-s.plot('series1', [1.0, 4.0, 6.0, 1.0, 7.0], 'red')</div><div class='del'>-s.plot('series2', [0.0, 3.0, 7.0, 9.3, 2.0], 'green')</div><div class='del'>-s.title "Arbitrary data"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::HorizontalBarchart.new(vc2, [0.0, 20.0, 5.0], </div><div class='del'>-                                                  %w(A B C D E), :stacked)</div><div class='del'>-</div><div class='del'>-s.plot('series1', [1.0, 4.0, 6.0, 1.0, 7.0], 'red')</div><div class='del'>-s.plot('series2', [0.0, 3.0, 7.0, 9.3, 2.0], 'green')</div><div class='del'>-s.title "Stacked diagram"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::Timechart.new(vc3, "1 january 2004", </div><div class='del'>-                                              "31 december 2004", 4)</div><div class='del'>-</div><div class='del'>-s.period("Spring", "1 march 2004", "1 june 2004", 'green')</div><div class='del'>-s.period("Summer", "1 june 2004", "1 september 2004", 'yellow')</div><div class='del'>-s.vertline("1 jan", "1 january 2004")</div><div class='del'>-s.vertline("1 apr", "1 april 2004")</div><div class='del'>-s.vertline("1 jul", "1 july 2004")</div><div class='del'>-s.vertline("1 oct", "1 october 2004")</div><div class='del'>-s.milestone("Longest day", "21 july 2004")</div><div class='del'>-s.title "Seasons (northern hemisphere)"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-z = TkToplevel.new(:title=&gt;'3D')</div><div class='del'>-</div><div class='del'>-zc1 = TkCanvas.new(z, :background=&gt;'white', :width=&gt;400, :height=&gt;300)</div><div class='del'>-zc2 = TkCanvas.new(z, :background=&gt;'white', :width=&gt;400, :height=&gt;250)</div><div class='del'>-Tk.pack(zc1,zc2)</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::Plot3D.new(zc1, </div><div class='del'>-                                      [0, 10, 3], [-10, 10, 10], [0, 10, 2.5])</div><div class='del'>-</div><div class='del'>-s.title "3D Plot"</div><div class='del'>-s.plot_function{|x, y|</div><div class='del'>-  # cowboyhat</div><div class='del'>-  x1 = x.to_f/9.0</div><div class='del'>-  y1 = y.to_f/9.0</div><div class='del'>-  3.0 * (1.0-(x1*x1+y1*y1))*(1.0-(x1*x1+y1*y1))</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::Plot3D.new(zc2, </div><div class='del'>-                                      [0, 10, 3], [-10, 10, 10], [0, 10, 2.5])</div><div class='del'>-s.title "3D Plot - data "</div><div class='del'>-s.colour("green", "black")</div><div class='del'>-s.plot_data([ [1.0, 2.0, 1.0, 0.0], </div><div class='del'>-              [1.1, 3.0, 1.1, -0.5], </div><div class='del'>-              [3.0, 1.0, 4.0, 5.0] ])</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tcllib/plotdemos2.rb b/ext/tk/sample/tkextlib/tcllib/plotdemos2.rb<br/>deleted file mode 100644<br/>index 33a6f29940..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tcllib/plotdemos2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tcllib/plotdemos2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,71 +0,0 @@</div><div class='del'>-#!/usr/bin/ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib/plotchart'</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-c1 = TkCanvas.new(:background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-c2 = TkCanvas.new(:background=&gt;'white', :width=&gt;400, :height=&gt;200)</div><div class='del'>-Tk.pack(c1,c2, :fill=&gt;:both, :side=&gt;:top)</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-# Set up a strip chart</div><div class='del'>-###############################</div><div class='del'>-slipchart = Tk::Tcllib::Plotchart::Stripchart.new(c1, [0.0, 100.0, 10.0], </div><div class='del'>-                                                      [0.0, 100.0, 20.0])</div><div class='del'>-</div><div class='del'>-TkTimer.new(500, -1, proc{|obj| # obj --&gt; TkTimer object</div><div class='del'>-              slipchart, xold, xd, yold, yd = obj.return_value</div><div class='del'>-              xnew = xold + xd</div><div class='del'>-              ynew = yold + (rand() - 0.5) * yd</div><div class='del'>-              ynew2 = yold + (rand() - 0.5) * 2.0 * yd</div><div class='del'>-              slipchart.plot('series1', xnew, ynew)</div><div class='del'>-              slipchart.plot('series2', xnew, ynew2)</div><div class='del'>-              obj.stop if xnew &gt;= 200</div><div class='del'>-              [slipchart, xnew, xd, ynew, yd] # return_value</div><div class='del'>-            }).start(100, proc{</div><div class='del'>-                       # init return_value</div><div class='del'>-                       [slipchart, 0.0, 15.0, 50.0, 30.0]</div><div class='del'>-                     })</div><div class='del'>-</div><div class='del'>-slipchart.title "Aha!"</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-# Set up an isometric plot</div><div class='del'>-###############################</div><div class='del'>-s = Tk::Tcllib::Plotchart::IsometricPlot.new(c2, [0.0, 100.0], [0.0, 200.0], </div><div class='del'>-                                             :noaxes)</div><div class='del'>-</div><div class='del'>-s.set_zoom_pan</div><div class='del'>-</div><div class='del'>-s.plot('rectangle',        [10.0, 10.0, 50.0, 50.0], 'green')</div><div class='del'>-s.plot('filled-rectangle', [20.0, 20.0, 40.0, 40.0], 'red')</div><div class='del'>-s.plot('filled-circle',    [70.0, 70.0, 40.0], 'yellow')</div><div class='del'>-s.plot('circle',           [70.0, 70.0, 42.0])</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-# Check the symbols</div><div class='del'>-###############################</div><div class='del'>-h = TkToplevel.new(:title=&gt;'h')</div><div class='del'>-c = TkCanvas.new(h, :bg=&gt;'white', :width=&gt;400, :height=&gt;200).pack(:fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-s = Tk::Tcllib::Plotchart::XYPlot.new(c, [0.0, 100.0, 10.0], </div><div class='del'>-                                         [0.0, 100.0, 20.0]) </div><div class='del'>-s.dataconfig('series1', :colour=&gt;'red',   :type=&gt;:symbol)</div><div class='del'>-s.dataconfig('series2', :colour=&gt;'green', :type=&gt;:both)</div><div class='del'>-</div><div class='del'>-s.yconfig(:format=&gt;"%12.2e")</div><div class='del'>-</div><div class='del'>-x = 5.0</div><div class='del'>-%w(plus cross circle up down dot upfilled downfilled).each{|sym|</div><div class='del'>-  s.dataconfig('series1', :symbol=&gt;sym)</div><div class='del'>-  s.dataconfig('series2', :symbol=&gt;sym)</div><div class='del'>-  s.plot('series1', x, 50.0)</div><div class='del'>-  s.plot('series2', x, 20)</div><div class='del'>-  x += 10</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-##############################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tcllib/plotdemos3.rb b/ext/tk/sample/tkextlib/tcllib/plotdemos3.rb<br/>deleted file mode 100644<br/>index 2b5c7642bb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tcllib/plotdemos3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tcllib/plotdemos3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,83 +0,0 @@</div><div class='del'>-#!/usr/bin/ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib/plotchart'</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-# Set up a strip chart</div><div class='del'>-###############################</div><div class='del'>-</div><div class='del'>-Tk::Tcllib::Plotchart::Stripchart.new([0.0, 100.0, 10.0], </div><div class='del'>-                                      [0.0, 100.0, 20.0], </div><div class='del'>-                                      :background=&gt;'white', </div><div class='del'>-                                      :width=&gt;400, :height=&gt;200){|chart|</div><div class='del'>-  title "Aha!"</div><div class='del'>-  pack(:fill=&gt;:both, :side=&gt;:top)</div><div class='del'>-</div><div class='del'>-  series1 = Tk::Tcllib::Plotchart::PlotSeries.new(chart)</div><div class='del'>-  series2 = Tk::Tcllib::Plotchart::PlotSeries.new(chart)</div><div class='del'>-</div><div class='del'>-  xd = 15.0</div><div class='del'>-  yd = 30.0</div><div class='del'>-</div><div class='del'>-  TkTimer.new(500, -1, proc{|obj| # obj --&gt; TkTimer object</div><div class='del'>-                xold, yold = obj.return_value</div><div class='del'>-                xnew = xold + xd</div><div class='del'>-                ynew = yold + (rand() - 0.5) * yd</div><div class='del'>-                ynew2 = yold + (rand() - 0.5) * 2.0 * yd</div><div class='del'>-</div><div class='del'>-                series1.plot(xnew, ynew)</div><div class='del'>-                series2.plot(xnew, ynew2)</div><div class='del'>-</div><div class='del'>-                obj.stop if xnew &gt;= 200</div><div class='del'>-</div><div class='del'>-                [xnew, ynew] # return_value</div><div class='del'>-              }).start(100, proc{ [0.0, 50.0] }) # init return_value</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-# Set up an isometric plot</div><div class='del'>-###############################</div><div class='del'>-Tk::Tcllib::Plotchart::IsometricPlot.new([0.0, 100.0], [0.0, 200.0], :noaxes, </div><div class='del'>-                                         :background=&gt;'white', </div><div class='del'>-                                         :width=&gt;400, :height=&gt;200){|chart|</div><div class='del'>-  pack(:fill=&gt;:both, :side=&gt;:top)</div><div class='del'>-  set_zoom_pan</div><div class='del'>-</div><div class='del'>-  chart.plot('rectangle',        [10.0, 10.0, 50.0, 50.0], 'green')</div><div class='del'>-  chart.plot('filled-rectangle', [20.0, 20.0, 40.0, 40.0], 'red')</div><div class='del'>-  chart.plot('filled-circle',    [70.0, 70.0, 40.0], 'yellow')</div><div class='del'>-  chart.plot('circle',           [70.0, 70.0, 42.0])</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-###############################</div><div class='del'>-# Check the symbols</div><div class='del'>-###############################</div><div class='del'>-TkToplevel.new(:title=&gt;'h'){|h|</div><div class='del'>-  Tk::Tcllib::Plotchart::XYPlot.new(h, [0.0, 100.0, 10.0], </div><div class='del'>-                                       [0.0, 100.0, 20.0], </div><div class='del'>-                                    :bg=&gt;'white', </div><div class='del'>-                                    :width=&gt;400, :height=&gt;200){|chart|</div><div class='del'>-    pack(:fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-    yconfig(:format=&gt;"%12.2e")</div><div class='del'>-</div><div class='del'>-    series1 = Tk::Tcllib::Plotchart::PlotSeries.new(chart, :colour=&gt;'red', </div><div class='del'>-                                                    :type=&gt;:symbol)</div><div class='del'>-    series2 = Tk::Tcllib::Plotchart::PlotSeries.new(chart, :colour=&gt;'green', </div><div class='del'>-                                                    :type=&gt;:both)</div><div class='del'>-</div><div class='del'>-    x = 5.0</div><div class='del'>-    %w(plus cross circle up down dot upfilled downfilled).each{|sym|</div><div class='del'>-      series1.dataconfig(:symbol=&gt;sym)</div><div class='del'>-      series2.dataconfig(:symbol=&gt;sym)</div><div class='del'>-      series1.plot(x, 50.0)</div><div class='del'>-      series2.plot(x, 20)</div><div class='del'>-      x += 10</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'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tcllib/xyplot.rb b/ext/tk/sample/tkextlib/tcllib/xyplot.rb<br/>deleted file mode 100644<br/>index 8f8c3eb880..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tcllib/xyplot.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tcllib/xyplot.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-#!/usr/bin/ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tcllib/plotchart'</div><div class='del'>-</div><div class='del'>-TkCanvas.new(:background=&gt;'white', :width=&gt;400, :height=&gt;200){|c|</div><div class='del'>-  pack(:fill=&gt;:both)</div><div class='del'>-  Tk::Tcllib::Plotchart::XYPlot.new(c, [0.0, 100.0, 10.0], </div><div class='del'>-                                       [0.0, 100.0, 20.0]){</div><div class='del'>-    [ [0.0, 32.0], [10.0, 50.0], [25.0, 60.0], [78.0, 11.0] ].each{|x, y|</div><div class='del'>-      plot('series1', x, y)</div><div class='del'>-    }</div><div class='del'>-    title("Data series")</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt<br/>deleted file mode 100644<br/>index 2326ef21fa..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-</div><div class='del'>-  ######################################################################</div><div class='del'>-  ###  The following text is the original 'license.terms' of tile    ###</div><div class='del'>-  ###  extension.                                                    ###</div><div class='del'>-  ######################################################################</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-LICENSE ("MIT-style")</div><div class='del'>-</div><div class='del'>-This software is Copyright (C) 2003 Joe English and other parties.</div><div class='del'>-</div><div class='del'>-The following terms apply to all files associated with this software</div><div class='del'>-unless explicitly disclaimed in individual files.  </div><div class='del'>-</div><div class='del'>-The author(s) 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 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'>-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.  IN NO EVENT</div><div class='del'>-shall the AUTHORS of THIS SOFTWARE be LIABLE to ANY PARTY for</div><div class='del'>-DIRECT, INDIRECT, SPECIAL, INCIDENTAL, or CONSEQUENTIAL DAMAGES</div><div class='del'>-arising out of the USE of THIS SOFTWARE and its DOCUMENTATION.</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/demo.rb b/ext/tk/sample/tkextlib/tile/demo.rb<br/>deleted file mode 100644<br/>index 633a072460..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/demo.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/demo.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,983 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# Demo for 'tile' package.</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-demodir = File.dirname($0)</div><div class='del'>-themesdir = File.join(demodir, 'themes')</div><div class='del'>-Tk::AUTO_PATH.lappend('.', demodir, themesdir)</div><div class='del'>-</div><div class='del'>-Dir.foreach(themesdir){|name|</div><div class='del'>-  next if name == '.' || name == '..'</div><div class='del'>-  dir = File.join(themesdir, name)</div><div class='del'>-  Tk::AUTO_PATH.lappend(dir) if File.directory?(dir)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-require 'tkextlib/tile'</div><div class='del'>-</div><div class='del'>-def version?(ver)</div><div class='del'>-  TkPackage.vcompare(Tk::Tile.package_version, ver) &gt;= 0</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# define Tcl/Tk procedures for compatibility</div><div class='del'>-Tk::Tile.__define_LoadImages_proc_for_compatibility__!</div><div class='del'>-Tk::Tile::Style.__define_wrapper_proc_for_compatibility__!</div><div class='del'>-</div><div class='del'>-unless Tk::Tile::Style.theme_names.include?('step')</div><div class='del'>-  Tk::Tile::Style.theme_create('step')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.load_tclscript(File.join(demodir, 'toolbutton.tcl'))</div><div class='del'>-Tk.load_tclscript(File.join(demodir, 'repeater.tcl'))</div><div class='del'>-</div><div class='del'>-# This forces an update of the available packages list. It's required</div><div class='del'>-# for package names to find the themes in demos/themes/*.tcl</div><div class='del'>-## Tk.tk_call(TkPackage.unknown_proc, 'Tcl', TkPackage.provide('Tcl'))</div><div class='del'>-##  --&gt; This doesn't work. </div><div class='del'>-##      Because, unknown_proc may be "command + some arguments".</div><div class='del'>-Tk.ip_eval("#{TkPackage.unknown_proc}  Tcl #{TkPackage.provide('Tcl')}")</div><div class='del'>-</div><div class='del'>-TkRoot.new{</div><div class='del'>-  title 'Tile demo'</div><div class='del'>-  iconname 'Tile demo'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# The descriptive names of the builtin themes.</div><div class='del'>-$THEMELIST = [</div><div class='del'>-  ['default', 'Default'], </div><div class='del'>-  ['classic', 'Classic'], </div><div class='del'>-  ['alt', 'Revitalized'], </div><div class='del'>-  ['winnative', 'Windows native'], </div><div class='del'>-  ['xpnative', 'XP Native'], </div><div class='del'>-  ['aqua', 'Aqua'], </div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-$V = TkVariable.new_hash(:THEME      =&gt; 'default', </div><div class='del'>-                         :COMPOUND   =&gt; 'top', </div><div class='del'>-                         :CONSOLE    =&gt; false, </div><div class='del'>-                         :MENURADIO1 =&gt; 'One', </div><div class='del'>-                         :MENUCHECK1 =&gt; true,</div><div class='del'>-                         :PBMODE     =&gt; 'determinate',</div><div class='del'>-                         :SELECTED   =&gt; true,</div><div class='del'>-                         :CHOICE     =&gt; 2)</div><div class='del'>-</div><div class='del'>-# Add in any available loadable themes.</div><div class='del'>-TkPackage.names.find_all{|n| n =~ /^(tile|ttk)::theme::/}.each{|pkg|</div><div class='del'>-  name = pkg.split('::')[-1]</div><div class='del'>-  unless $THEMELIST.assoc(name)</div><div class='del'>-    $THEMELIST &lt;&lt; [name, Tk.tk_call('string', 'totitle', name)]</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Add theme definition written by ruby</div><div class='del'>-$RUBY_THEMELIST = []</div><div class='del'>-begin</div><div class='del'>-  load(File.join(demodir, 'themes', 'kroc.rb'), true)</div><div class='del'>-rescue =&gt; e</div><div class='del'>-raise e</div><div class='del'>-  $RUBY_THEMELIST &lt;&lt; ['kroc-rb', 'Kroc (by Ruby)', false]</div><div class='del'>-else</div><div class='del'>-  $RUBY_THEMELIST &lt;&lt; ['kroc-rb', 'Kroc (by Ruby)', true]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def makeThemeControl(parent)</div><div class='del'>-  c = Tk::Tile::Labelframe.new(parent, :text=&gt;'Theme')</div><div class='del'>-  $THEMELIST.each{|theme, name|</div><div class='del'>-    b = Tk::Tile::Radiobutton.new(c, :text=&gt;name, :value=&gt;theme, </div><div class='del'>-                                  :variable=&gt;$V.ref(:THEME), </div><div class='del'>-                                  :command=&gt;proc{setTheme(theme)})</div><div class='del'>-    b.grid(:sticky=&gt;:ew)</div><div class='del'>-    unless (TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/})</div><div class='del'>-      b.ttk_state(:disabled)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-  $RUBY_THEMELIST.each{|theme, name, available|</div><div class='del'>-    b = Tk::Tile::Radiobutton.new(c, :text=&gt;name, :value=&gt;theme, </div><div class='del'>-                                  :variable=&gt;$V.ref(:THEME), </div><div class='del'>-                                  :command=&gt;proc{setTheme(theme)})</div><div class='del'>-    b.grid(:sticky=&gt;:ew)</div><div class='del'>-    b.ttk_state(:disabled) unless available</div><div class='del'>-  }</div><div class='del'>-  c</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def makeThemeMenu(parent)</div><div class='del'>-  m = TkMenu.new(parent)</div><div class='del'>-  $THEMELIST.each{|theme, name|</div><div class='del'>-    m.add(:radiobutton, :label=&gt;name, :variable=&gt;$V.ref(:THEME), </div><div class='del'>-          :value=&gt;theme, :command=&gt;proc{setTheme(theme)})</div><div class='del'>-    unless (TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/})</div><div class='del'>-      m.entryconfigure(:end, :state=&gt;:disabled)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-  $RUBY_THEMELIST.each{|theme, name, available|</div><div class='del'>-    m.add(:radiobutton, :label=&gt;name, :variable=&gt;$V.ref(:THEME), </div><div class='del'>-          :value=&gt;theme, :command=&gt;proc{setTheme(theme)})</div><div class='del'>-    m.entryconfigure(:end, :state=&gt;:disabled) unless available</div><div class='del'>-  }</div><div class='del'>-  m</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def setTheme(theme)</div><div class='del'>-  if (pkg = TkPackage.names.find{|n| n =~ /(tile|ttk)::theme::#{theme}/})</div><div class='del'>-    unless Tk::Tile::Style.theme_names.find{|n| n == theme}</div><div class='del'>-      TkPackage.require(pkg)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  Tk::Tile::Style.theme_use(theme)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Load icons...</div><div class='del'>-#</div><div class='del'>-$BUTTONS = ['open', 'new', 'save']</div><div class='del'>-$CHECKBOXES = ['bold', 'italic']</div><div class='del'>-$ICON = {}</div><div class='del'>-</div><div class='del'>-def loadIcons(file)</div><div class='del'>-  Tk.load_tclscript(file)</div><div class='del'>-  img_data = TkVarAccess.new('ImgData')</div><div class='del'>-  img_data.keys.each{|icon|</div><div class='del'>-    $ICON[icon] = TkPhotoImage.new(:data=&gt;img_data[icon])</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-loadIcons(File.join(demodir, 'iconlib.tcl'))</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Utilities:</div><div class='del'>-#</div><div class='del'>-def foreachWidget(wins, cmd)</div><div class='del'>-  wins.each{|w|</div><div class='del'>-    cmd.call(w)</div><div class='del'>-    foreachWidget(w.winfo_children, cmd)</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# sbstub</div><div class='del'>-#	Used as the :command option for a scrollbar,</div><div class='del'>-#	updates the scrollbar's position.</div><div class='del'>-#</div><div class='del'>-def sbstub(sb, cmd, num, units = 'units')</div><div class='del'>-  num = TkComm.number(num)</div><div class='del'>-  case cmd.to_s</div><div class='del'>-  when 'moveto'</div><div class='del'>-    sb.set(num, num+0.5)</div><div class='del'>-</div><div class='del'>-  when 'scroll'</div><div class='del'>-    if units.to_s == 'pages'</div><div class='del'>-      delta = 0.2</div><div class='del'>-    else</div><div class='del'>-      delta = 0.05</div><div class='del'>-    end</div><div class='del'>-    current = sb.get</div><div class='del'>-    sb.set(current[0] + delta * num, current[1] + delta * num)</div><div class='del'>-  end</div><div class='del'>-end    </div><div class='del'>-</div><div class='del'>-# ... for debugging:</div><div class='del'>-TkBindTag::ALL.bind('ButtonPress-3', proc{|w| $W = w}, '%W')</div><div class='del'>-TkBindTag::ALL.bind('Control-ButtonPress-3', proc{|w| w.set_focus}, '%W')</div><div class='del'>-</div><div class='del'>-def showHelp()</div><div class='del'>-  Tk.messageBox(:message=&gt;'No help yet...')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# See toolbutton.tcl.</div><div class='del'>-TkOption.add('*Toolbar.relief', :groove)</div><div class='del'>-TkOption.add('*Toolbar.borderWidth', 2)</div><div class='del'>-</div><div class='del'>-TkOption.add('*Toolbar.Button.Pad', 2)</div><div class='del'>-</div><div class='del'>-$ROOT = Tk.root</div><div class='del'>-$BASE = $ROOT</div><div class='del'>-Tk.destroy(*($ROOT.winfo_children))</div><div class='del'>-</div><div class='del'>-$TOOLBARS = []</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Toolbar button standard vs. tile comparison:</div><div class='del'>-#</div><div class='del'>-def makeToolbars</div><div class='del'>-  #</div><div class='del'>-  # Tile toolbar:</div><div class='del'>-  #</div><div class='del'>-  tb = Tk::Tile::Frame.new($BASE, :class=&gt;'Toolbar')</div><div class='del'>-  $TOOLBARS &lt;&lt; tb</div><div class='del'>-  i = 0</div><div class='del'>-  $BUTTONS.each{|icon|</div><div class='del'>-    i += 1</div><div class='del'>-    Tk::Tile::Button.new(tb, :text=&gt;icon, :image=&gt;$ICON[icon], </div><div class='del'>-                         :compound=&gt;$V[:COMPOUND], </div><div class='del'>-                         :style=&gt;:Toolbutton).grid(:row=&gt;0, :column=&gt;i, </div><div class='del'>-                                                   :sticky=&gt;:news)</div><div class='del'>-  }</div><div class='del'>-  $CHECKBOXES.each{|icon|</div><div class='del'>-    i += 1</div><div class='del'>-    Tk::Tile::Checkbutton.new(tb, :text=&gt;icon, :image=&gt;$ICON[icon], </div><div class='del'>-                              :variable=&gt;$V.ref(icon), </div><div class='del'>-                              :compound=&gt;$V[:COMPOUND], </div><div class='del'>-                              :style=&gt;:Toolbutton).grid(:row=&gt;0, :column=&gt;i, </div><div class='del'>-                                                        :sticky=&gt;:news)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  mb = Tk::Tile::Menubutton.new(tb, :text=&gt;'toolbar', :image=&gt;$ICON['file'], </div><div class='del'>-                                :compound=&gt;$V[:COMPOUND])</div><div class='del'>-  mb.configure(:menu=&gt;makeCompoundMenu(mb))</div><div class='del'>-  i += 1</div><div class='del'>-  mb.grid(:row=&gt;0, :column=&gt;i, :sticky=&gt;:news)</div><div class='del'>-</div><div class='del'>-  i += 1</div><div class='del'>-  tb.grid_columnconfigure(i, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Standard toolbar:</div><div class='del'>-  #</div><div class='del'>-  tb = TkFrame.new($BASE, :class=&gt;'Toolbar')</div><div class='del'>-  $TOOLBARS &lt;&lt; tb</div><div class='del'>-  i = 0</div><div class='del'>-  $BUTTONS.each{|icon|</div><div class='del'>-    i += 1</div><div class='del'>-    TkButton.new(tb, :text=&gt;icon, :image=&gt;$ICON[icon], </div><div class='del'>-                 :compound=&gt;$V[:COMPOUND], :relief=&gt;:flat, </div><div class='del'>-                 :overrelief=&gt;:raised).grid(:row=&gt;0, :column=&gt;i, </div><div class='del'>-                                            :sticky=&gt;:news)</div><div class='del'>-  }</div><div class='del'>-  $CHECKBOXES.each{|icon|</div><div class='del'>-    i += 1</div><div class='del'>-    TkCheckbutton.new(tb, :text=&gt;icon, :image=&gt;$ICON[icon], </div><div class='del'>-                      :variable=&gt;$V.ref(icon), :compound=&gt;$V[:COMPOUND], </div><div class='del'>-                      :indicatoron=&gt;false, :selectcolor=&gt;'', :relief=&gt;:flat, </div><div class='del'>-                      :overrelief=&gt;:raised).grid(:row=&gt;0, :column=&gt;i, </div><div class='del'>-                                                 :sticky=&gt;:news)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  mb = TkMenubutton.new(tb, :text=&gt;'toolbar', :image=&gt;$ICON['file'], </div><div class='del'>-                        :compound=&gt;$V[:COMPOUND])</div><div class='del'>-  mb.configure(:menu=&gt;makeCompoundMenu(mb))</div><div class='del'>-  i += 1</div><div class='del'>-  mb.grid(:row=&gt;0, :column=&gt;i, :sticky=&gt;:news)</div><div class='del'>-</div><div class='del'>-  i += 1</div><div class='del'>-  tb.grid_columnconfigure(i, :weight=&gt;1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Toolbar :compound control:</div><div class='del'>-#</div><div class='del'>-def makeCompoundMenu(mb)</div><div class='del'>-  menu = TkMenu.new(mb)</div><div class='del'>-  %w(text image none top bottom left right center).each{|str|</div><div class='del'>-    menu.add(:radiobutton, :label=&gt;Tk.tk_call('string', 'totitle', str), </div><div class='del'>-             :variable=&gt;$V.ref(:COMPOUND), :value=&gt;str, </div><div class='del'>-             :command=&gt;proc{ changeToolbars() })</div><div class='del'>-  }</div><div class='del'>-  menu</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-makeToolbars()</div><div class='del'>-</div><div class='del'>-## CONTROLS</div><div class='del'>-control = Tk::Tile::Frame.new($BASE)</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Overall theme control:</div><div class='del'>-#</div><div class='del'>-makeThemeControl(control).grid(:sticky=&gt;:news, :padx=&gt;6, :ipadx=&gt;6)</div><div class='del'>-control.grid_rowconfigure(99, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-def changeToolbars</div><div class='del'>-  foreachWidget($TOOLBARS, </div><div class='del'>-                proc{|w|</div><div class='del'>-                  begin</div><div class='del'>-                    w.compound($V[:COMPOUND])</div><div class='del'>-                  rescue</div><div class='del'>-                  end</div><div class='del'>-                })</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def scrolledWidget(parent, klass, themed, *args)</div><div class='del'>-  if themed</div><div class='del'>-    f = Tk::Tile::Frame.new(parent)</div><div class='del'>-    t = klass.new(f, *args)</div><div class='del'>-    vs = Tk::Tile::Scrollbar.new(f)</div><div class='del'>-    hs = Tk::Tile::Scrollbar.new(f)</div><div class='del'>-  else</div><div class='del'>-    f = TkFrame.new(parent)</div><div class='del'>-    t = klass.new(f, *args)</div><div class='del'>-    vs = TkScrollbar.new(f)</div><div class='del'>-    hs = TkScrollbar.new(f)</div><div class='del'>-  end</div><div class='del'>-  t.yscrollbar(vs)</div><div class='del'>-  t.xscrollbar(hs)</div><div class='del'>-</div><div class='del'>-  TkGrid.configure(t, vs, :sticky=&gt;:news)</div><div class='del'>-  TkGrid.configure(hs, 'x', :sticky=&gt;:news)</div><div class='del'>-  TkGrid.rowconfigure(f, 0, :weight=&gt;1)</div><div class='del'>-  TkGrid.columnconfigure(f, 0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-  [f, t]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Notebook demonstration:</div><div class='del'>-#</div><div class='del'>-def makeNotebook</div><div class='del'>-  nb = Tk::Tile::Notebook.new($BASE, :padding=&gt;6)</div><div class='del'>-  nb.enable_traversal</div><div class='del'>-  client = Tk::Tile::Frame.new(nb)</div><div class='del'>-  nb.add(client, :text=&gt;'Demo', :underline=&gt;0)</div><div class='del'>-  nb.select(client)</div><div class='del'>-</div><div class='del'>-  scales = Tk::Tile::Frame.new(nb)</div><div class='del'>-  nb.add(scales, :text=&gt;'Scales')</div><div class='del'>-  combo = Tk::Tile::Frame.new(nb)</div><div class='del'>-  nb.add(combo, :text=&gt;'Combobox', :underline=&gt;7)</div><div class='del'>-  tree = Tk::Tile::Frame.new(nb)</div><div class='del'>-  nb.add(tree, :text=&gt;'Tree')</div><div class='del'>-  others = Tk::Tile::Frame.new(nb)</div><div class='del'>-  nb.add(others, :text=&gt;'Others', :underline=&gt;4)</div><div class='del'>-</div><div class='del'>-  [nb, client, scales, combo, tree, others]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-nb, client, scales, combo, tree, others = makeNotebook()</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Side-by side check, radio, and menu button comparison:</div><div class='del'>-#</div><div class='del'>-def fillMenu(menu)</div><div class='del'>-  %w(above below left right flush).each{|dir|</div><div class='del'>-    menu.add(:command, :label=&gt;Tk.tk_call('string', 'totitle', dir), </div><div class='del'>-             :command=&gt;proc{ menu.winfo_parent.direction(dir) })</div><div class='del'>-  }</div><div class='del'>-  menu.add(:cascade, :label=&gt;'Submenu', :menu=&gt;(submenu = TkMenu.new(menu)))</div><div class='del'>-  submenu.add(:command, :label=&gt;'Subcommand 1')</div><div class='del'>-  submenu.add(:command, :label=&gt;'Subcommand 2')</div><div class='del'>-  submenu.add(:command, :label=&gt;'Subcommand 3')</div><div class='del'>-</div><div class='del'>-  menu.add(:separator)</div><div class='del'>-  menu.add(:command, :label=&gt;'Quit', :command=&gt;proc{Tk.root.destroy})</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-l = Tk::Tile::Labelframe.new(client, :text=&gt;'Themed', :padding=&gt;6)</div><div class='del'>-r = TkLabelframe.new(client, :text=&gt;'Standard', :padx=&gt;6, :pady=&gt;6)</div><div class='del'>-</div><div class='del'>-## Styled frame</div><div class='del'>-cb = Tk::Tile::Checkbutton.new(l, :text=&gt;'Checkbutton', </div><div class='del'>-                               :variable=&gt;$V.ref(:SELECTED), :underline=&gt;2)</div><div class='del'>-rb1 = Tk::Tile::Radiobutton.new(l, :text=&gt;'One', :variable=&gt;$V.ref(:CHOICE), </div><div class='del'>-                                :value=&gt;1, :underline=&gt;0)</div><div class='del'>-rb2 = Tk::Tile::Radiobutton.new(l, :text=&gt;'Two', :variable=&gt;$V.ref(:CHOICE), </div><div class='del'>-                                :value=&gt;2)</div><div class='del'>-rb3 = Tk::Tile::Radiobutton.new(l, :text=&gt;'Three', </div><div class='del'>-                                :variable=&gt;$V.ref(:CHOICE), </div><div class='del'>-                                :value=&gt;3, :underline=&gt;0)</div><div class='del'>-btn = Tk::Tile::Button.new(l, :text=&gt;'Button', :underline=&gt;0)</div><div class='del'>-</div><div class='del'>-mb = Tk::Tile::Menubutton.new(l, :text=&gt;'Menubutton', :underline=&gt;2)</div><div class='del'>-m = TkMenu.new(mb)</div><div class='del'>-mb.menu(m)</div><div class='del'>-fillMenu(m)</div><div class='del'>-</div><div class='del'>-$entryText = TkVariable.new('Entry widget')</div><div class='del'>-e = Tk::Tile::Entry.new(l, :textvariable=&gt;$entryText)</div><div class='del'>-e.selection_range(6, :end)</div><div class='del'>-</div><div class='del'>-ltext_f, ltext = scrolledWidget(l, TkText, true, </div><div class='del'>-                                :width=&gt;12, :height=&gt;5, :wrap=&gt;:none)</div><div class='del'>-# NOTE TO MAINTAINERS: </div><div class='del'>-# The checkbuttons are -sticky ew / -expand x  on purpose:</div><div class='del'>-# it demonstrates one of the differences between TCheckbuttons</div><div class='del'>-# and standard checkbuttons.</div><div class='del'>-#</div><div class='del'>-Tk.grid(cb, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(rb1, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(rb2, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(rb3, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(btn, :sticky=&gt;:ew, :padx=&gt;2, :pady=&gt;2)</div><div class='del'>-Tk.grid(mb, :sticky=&gt;:ew, :padx=&gt;2, :pady=&gt;2)</div><div class='del'>-Tk.grid(e, :sticky=&gt;:ew, :padx=&gt;2, :pady=&gt;2)</div><div class='del'>-Tk.grid(ltext_f, :sticky=&gt;:news)</div><div class='del'>-</div><div class='del'>-TkGrid.columnconfigure(l, 0, :weight=&gt;1)</div><div class='del'>-TkGrid.rowconfigure(l, 7, :weight=&gt;1) # text widget (grid is a PITA)</div><div class='del'>-</div><div class='del'>-## Orig frame</div><div class='del'>-cb = TkCheckbutton.new(r, :text=&gt;'Checkbutton', :variable=&gt;$V.ref(:SELECTED))</div><div class='del'>-rb1 = TkRadiobutton.new(r, :text=&gt;'One', </div><div class='del'>-                        :variable=&gt;$V.ref(:CHOICE), :value=&gt;1)</div><div class='del'>-rb2 = TkRadiobutton.new(r, :text=&gt;'Two', :variable=&gt;$V.ref(:CHOICE), </div><div class='del'>-                        :value=&gt;2, :underline=&gt;1)</div><div class='del'>-rb3 = TkRadiobutton.new(r, :text=&gt;'Three', </div><div class='del'>-                        :variable=&gt;$V.ref(:CHOICE), :value=&gt;3)</div><div class='del'>-btn = TkButton.new(r, :text=&gt;'Button')</div><div class='del'>-</div><div class='del'>-mb = TkMenubutton.new(r, :text=&gt;'Menubutton', :underline=&gt;3, :takefocus=&gt;true)</div><div class='del'>-m = TkMenu.new(mb)</div><div class='del'>-mb.menu(m)</div><div class='del'>-$V[:rmbIndicatoron] = mb.indicatoron</div><div class='del'>-m.add(:checkbutton, :label=&gt;'Indicator?', #'</div><div class='del'>-      :variable=&gt;$V.ref(:rmbIndicatoron), </div><div class='del'>-      :command=&gt;proc{mb.indicatoron($V[:rmbIndicatoron])})</div><div class='del'>-m.add(:separator)</div><div class='del'>-fillMenu(m)</div><div class='del'>-</div><div class='del'>-e = TkEntry.new(r, :textvariable=&gt;$entryText)</div><div class='del'>-</div><div class='del'>-rtext_f, rtext = scrolledWidget(r, TkText, false, </div><div class='del'>-                                :width=&gt;12, :height=&gt;5, :wrap=&gt;:none)</div><div class='del'>-</div><div class='del'>-Tk.grid(cb, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(rb1, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(rb2, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(rb3, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(btn, :sticky=&gt;:ew, :padx=&gt;2, :pady=&gt;2)</div><div class='del'>-Tk.grid(mb, :sticky=&gt;:ew, :padx=&gt;2, :pady=&gt;2)</div><div class='del'>-Tk.grid(e, :sticky=&gt;:ew, :padx=&gt;2, :pady=&gt;2)</div><div class='del'>-Tk.grid(rtext_f, :sticky=&gt;:news)</div><div class='del'>-</div><div class='del'>-TkGrid.columnconfigure(l, 0, :weight=&gt;1)</div><div class='del'>-TkGrid.rowconfigure(l, 7, :weight=&gt;1) # text widget (grid is a PITA)</div><div class='del'>-</div><div class='del'>-Tk.grid(l, r, :sticky=&gt;:news, :padx=&gt;6, :pady=&gt;6)</div><div class='del'>-TkGrid.rowconfigure(client, 0, :weight=&gt;1)</div><div class='del'>-TkGrid.columnconfigure(client, [0, 1], :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Add some text to the text boxes:</div><div class='del'>-#</div><div class='del'>-msgs = [</div><div class='del'>-"The cat crept into the crypt, crapped and crept out again", </div><div class='del'>-"Peter Piper picked a peck of pickled peppers", </div><div class='del'>-"How much wood would a woodchuck chuck if a woodchuck could chuck wood", </div><div class='del'>-"He thrusts his fists against the posts and still insists he sees the ghosts",</div><div class='del'>-"Who put the bomb in the bom-b-bom-b-bom,",</div><div class='del'>-"Is this your sister's sixth zither, sir?",</div><div class='del'>-"Who put the ram in the ramalamadingdong?",</div><div class='del'>-"I am not the pheasant plucker, I'm the pheasant plucker's mate."</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-nmsgs = msgs.size</div><div class='del'>-(0...50).each{|n|</div><div class='del'>-  msg = msgs[n % nmsgs]</div><div class='del'>-  ltext.insert(:end, "#{n}: #{msg}\n")</div><div class='del'>-  rtext.insert(:end, "#{n}: #{msg}\n")</div><div class='del'>-}</div><div class='del'>-#</div><div class='del'>-# Scales and sliders pane:</div><div class='del'>-#</div><div class='del'>-l = Tk::Tile::Labelframe.new(scales, :text=&gt;'Themed', :padding=&gt;6)</div><div class='del'>-r = TkLabelframe.new(scales, :text=&gt;'Standard', :padx=&gt;6, :pady=&gt;6)</div><div class='del'>-</div><div class='del'>-if version?('0.6')</div><div class='del'>-</div><div class='del'>-  # thremed frame</div><div class='del'>-  scale = Tk::Tile::Scale.new(l, :orient=&gt;:horizontal, :from=&gt;0, :to=&gt;100,</div><div class='del'>-          :variable=&gt;$V.ref(:SCALE))</div><div class='del'>-  vscale = Tk::Tile::Scale.new(l, :orient=&gt;:vertical, :from=&gt;0, :to=&gt;100,</div><div class='del'>-          :variable=&gt;$V.ref(:VSCALE))</div><div class='del'>-  progress = Tk::Tile::Progressbar.new(l, :orient=&gt;:horizontal, :maximum=&gt;100)</div><div class='del'>-  vprogress = Tk::Tile::Progressbar.new(l, :orient=&gt;:vertical, :maximum=&gt;100)</div><div class='del'>-</div><div class='del'>-  if true</div><div class='del'>-    def progress.inverted(w, value)</div><div class='del'>-      if w.mode == 'indeterminate'</div><div class='del'>-        w.value(value)</div><div class='del'>-      else</div><div class='del'>-        w.value(w.maximum - value)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    scale.command {|value| progress.value(value)}</div><div class='del'>-    vscale.command {|value| progress.inverted(vprogress, value) }</div><div class='del'>-  else</div><div class='del'>-    # This would also work, but the Tk scale widgets </div><div class='del'>-    # in the right hand pane cause some interference when </div><div class='del'>-    # in autoincrement/indeterminate mode.</div><div class='del'>-    #</div><div class='del'>-    progress.variable $V.ref(:SCALE)</div><div class='del'>-    vprogress.variable $V.ref(:VSCALE)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  scale.set(50)</div><div class='del'>-  vscale.set(50)</div><div class='del'>-</div><div class='del'>-  lmode = Tk::Tile::Label.new(l, :text=&gt;'Progress bar mode')</div><div class='del'>-  pbmode0 = Tk::Tile::Radiobutton.new(l, :variable=&gt;$V.ref(:PBMODE),</div><div class='del'>-          :text=&gt;'determinate', :value=&gt;'determinate',</div><div class='del'>-          :command=&gt;proc{pbMode(progress, vprogress)})</div><div class='del'>-  pbmode1 = Tk::Tile::Radiobutton.new(l, :variable=&gt;$V.ref(:PBMODE),</div><div class='del'>-          :text=&gt;'indeterminate', :value=&gt;'indeterminate',</div><div class='del'>-          :command=&gt;proc{pbMode(progress, vprogress)})</div><div class='del'>-  def pbMode(progress, vprogress)</div><div class='del'>-    if vprogress.mode != $V[:PBMODE]</div><div class='del'>-      vprogress.value(vprogress.maximum - vprogress.value)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    progress.mode $V[:PBMODE]</div><div class='del'>-    vprogress.mode $V[:PBMODE]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  start = Tk::Tile::Button.new(l, :text=&gt;"Start",</div><div class='del'>-          :command=&gt;proc{pbStart(progress, vprogress)})</div><div class='del'>-  def pbStart(progress, vprogress)</div><div class='del'>-    # $V[:PBMODE] = 'indeterminate'</div><div class='del'>-    pbMode(progress, vprogress)</div><div class='del'>-    progress.start 10</div><div class='del'>-    vprogress.start</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  stop = Tk::Tile::Button.new(l, :text=&gt;'Stop',</div><div class='del'>-          :command=&gt;proc{pbStop(progress, vprogress)})</div><div class='del'>-  def pbStop(progress, vprogress)</div><div class='del'>-    progress.stop</div><div class='del'>-    vprogress.stop</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk.grid(scale, :columnspan=&gt;2, :sticky=&gt;'ew')</div><div class='del'>-  Tk.grid(progress, :columnspan=&gt;2, :sticky=&gt;'ew')</div><div class='del'>-  Tk.grid(vscale, vprogress, :sticky=&gt;'nws')</div><div class='del'>-</div><div class='del'>-  Tk.grid(lmode, :sticky=&gt;'we', :columnspan=&gt;2)</div><div class='del'>-  Tk.grid(pbmode0, :sticky=&gt;'we', :columnspan=&gt;2)</div><div class='del'>-  Tk.grid(pbmode1, :sticky=&gt;'we', :columnspan=&gt;2)</div><div class='del'>-  Tk.grid(start, :sticky=&gt;'we', :columnspan=&gt;2)</div><div class='del'>-  Tk.grid(stop, :sticky=&gt;'we', :columnspan=&gt;2)</div><div class='del'>-</div><div class='del'>-  l.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-  l.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-  l.grid_rowconfigure(99, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-  # standard frame</div><div class='del'>-  TkScale.new(r, :orient=&gt;:horizontal, :from=&gt;0, :to=&gt;100,</div><div class='del'>-          :variable=&gt;$V.ref(:SCALE)).grid(:sticky=&gt;'news')</div><div class='del'>-  TkScale.new(r, :orient=&gt;:vertical, :from=&gt;0, :to=&gt;100,</div><div class='del'>-          :variable=&gt;$V.ref(:VSCALE)).grid(:sticky=&gt;'nws')</div><div class='del'>-</div><div class='del'>-  r.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-  r.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-  r.grid_rowconfigure(99, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-else # tile 0.5 or earlier</div><div class='del'>-</div><div class='del'>-  # themed frame</div><div class='del'>-  scale = Tk::Tile::Scale.new(l, :variable=&gt;$V.ref(:SCALE),</div><div class='del'>-          :orient=&gt;:horizontal, :from=&gt;0, :to=&gt;100)</div><div class='del'>-  vscale = Tk::Tile::Scale.new(l, :variable=&gt;$V.ref(:VSCALE),</div><div class='del'>-          :orient=&gt;:vertical, :from=&gt;-25, :to=&gt;25)</div><div class='del'>-</div><div class='del'>-  progress = Tk::Tile::Progress.new(l,</div><div class='del'>-          :orient=&gt;:horizontal, :from=&gt;0, :to=&gt;100)</div><div class='del'>-  vprogress = Tk::Tile::Progress.new(l,</div><div class='del'>-          :orient=&gt;:vertical, :from=&gt;-25, :to=&gt;25)</div><div class='del'>-</div><div class='del'>-  if true</div><div class='del'>-    scale.command{|value| progress.set(value)}</div><div class='del'>-    vscale.command{|value| vprogress.set(value)}</div><div class='del'>-  else # this would also work. (via TkVariable#trace)</div><div class='del'>-    v1 = scale.variable</div><div class='del'>-    v2 = vscale.variable</div><div class='del'>-    v1.trace('w', proc{ progress.set(v1.value) })</div><div class='del'>-    v2.trace('w', proc{ vprogress.set(v2.value) })</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Tk.grid(scale, :columnspan=&gt;2, :sticky=&gt;:ew)</div><div class='del'>-  Tk.grid(progress, :columnspan=&gt;2, :sticky=&gt;:ew)</div><div class='del'>-  Tk.grid(vscale, vprogress, :sticky=&gt;:nws)</div><div class='del'>-  TkGrid.columnconfigure(l, 0, :weight=&gt;1)</div><div class='del'>-  TkGrid.columnconfigure(l, 1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-  # standard frame</div><div class='del'>-  TkScale.new(r, :variable=&gt;$V.ref(:SCALE),</div><div class='del'>-          :orient=&gt;:horizontal, :from=&gt;0, :to=&gt;100).grid(:sticky=&gt;'news')</div><div class='del'>-  TkScale.new(r, :variable=&gt;$V.ref(:VSCALE),</div><div class='del'>-          :orient=&gt;:vertical, :from=&gt;-25, :to=&gt;25).grid(:sticky=&gt;'nws')</div><div class='del'>-</div><div class='del'>-  TkGrid.columnconfigure(r, 0, :weight=&gt;1)</div><div class='del'>-  TkGrid.columnconfigure(r, 1, :weight=&gt;1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# layout frames</div><div class='del'>-Tk.grid(l, r, :sticky=&gt;'nwes', :padx=&gt;6, :pady=&gt;6)</div><div class='del'>-scales.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-scales.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-scales.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Command box:</div><div class='del'>-#</div><div class='del'>-cmd = Tk::Tile::Frame.new($BASE)</div><div class='del'>-b_close = Tk::Tile::Button.new(cmd, :text=&gt;'Close', </div><div class='del'>-                               :underline=&gt;0, :default=&gt;:normal, </div><div class='del'>-                               :command=&gt;proc{Tk.root.destroy})</div><div class='del'>-b_help = Tk::Tile::Button.new(cmd, :text=&gt;'Help', :underline=&gt;0, </div><div class='del'>-                              :default=&gt;:normal, :command=&gt;proc{showHelp()})</div><div class='del'>-Tk.grid('x', b_close, b_help, :pady=&gt;[6, 4], :padx=&gt;4)</div><div class='del'>-TkGrid.columnconfigure(cmd, 0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Set up accelerators:</div><div class='del'>-#</div><div class='del'>-$ROOT.bind('KeyPress-Escape', proc{Tk.event_generate(b_close, '&lt;Invoke&gt;')})</div><div class='del'>-$ROOT.bind('&lt;Help&gt;', proc{Tk.event_generate(b_help, '&lt;Invoke&gt;')})</div><div class='del'>-Tk::Tile::KeyNav.enableMnemonics($ROOT)</div><div class='del'>-Tk::Tile::KeyNav.defaultButton(b_help)</div><div class='del'>-</div><div class='del'>-Tk.grid($TOOLBARS[0], '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid($TOOLBARS[1], '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(control,      nb,  :sticky=&gt;:news)</div><div class='del'>-Tk.grid(cmd,          '-', :sticky=&gt;:ew)</div><div class='del'>-TkGrid.columnconfigure($ROOT, 1, :weight=&gt;1)</div><div class='del'>-TkGrid.rowconfigure($ROOT, 2, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Add a menu</div><div class='del'>-#</div><div class='del'>-menu = TkMenu.new($BASE)</div><div class='del'>-$ROOT.menu(menu)</div><div class='del'>-m_file = TkMenu.new(menu, :tearoff=&gt;0)</div><div class='del'>-menu.add(:cascade, :label=&gt;'File', :underline=&gt;0, :menu=&gt;m_file)</div><div class='del'>-m_file.add(:command, :label=&gt;'Open', :underline=&gt;0, </div><div class='del'>-           :compound=&gt;:left, :image=&gt;$ICON['open'])</div><div class='del'>-m_file.add(:command, :label=&gt;'Save', :underline=&gt;0, </div><div class='del'>-           :compound=&gt;:left, :image=&gt;$ICON['save'])</div><div class='del'>-m_file.add(:separator)</div><div class='del'>-m_f_test = TkMenu.new(menu, :tearoff=&gt;0)</div><div class='del'>-m_file.add(:cascade, :label=&gt;'Test submenu', :underline=&gt;0, :menu=&gt;m_f_test)</div><div class='del'>-m_file.add(:checkbutton, :label=&gt;'Text check', :underline=&gt;5, </div><div class='del'>-           :variable=&gt;$V.ref(:MENUCHECK1))</div><div class='del'>-m_file.insert(:end, :separator)</div><div class='del'>-</div><div class='del'>-if Tk.windowingsystem != 'x11'</div><div class='del'>-  TkConsole.create</div><div class='del'>-  m_file.insert(:end, :checkbutton, :label=&gt;'Console', :underline=&gt;5, </div><div class='del'>-                :variable=&gt;$V.ref(:CONSOLE), :command=&gt;proc{toggle_console()})</div><div class='del'>-  def toggle_console</div><div class='del'>-    if TkComm.bool($V[:CONSOLE])</div><div class='del'>-      TkConsole.show</div><div class='del'>-    else</div><div class='del'>-      TkConsole.hide</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-m_file.add(:command, :label=&gt;'Exit', :underline=&gt;1, </div><div class='del'>-           :command=&gt;proc{Tk.event_generate(b_close, '&lt;Invoke&gt;')})</div><div class='del'>-</div><div class='del'>-%w(One Two Three Four).each{|lbl|</div><div class='del'>-  m_f_test.add(:radiobutton, :label=&gt;lbl, :variable=&gt;$V.ref(:MENURADIO1))</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Add Theme menu.</div><div class='del'>-#</div><div class='del'>-menu.add(:cascade, :label=&gt;'Theme', :underline=&gt;3, </div><div class='del'>-         :menu=&gt;makeThemeMenu(menu))</div><div class='del'>-</div><div class='del'>-setTheme($V[:THEME])</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Combobox demo pane:</div><div class='del'>-#</div><div class='del'>-values = %w(list abc def ghi jkl mno pqr stu vwx yz)</div><div class='del'>-2.times {|i|</div><div class='del'>-  cb = Tk::Tile::Combobox.new(</div><div class='del'>-    combo, :values=&gt;values, :textvariable=&gt;$V.ref(:COMBO))</div><div class='del'>-  cb.pack(:side=&gt;:top, :padx=&gt;2, :pady=&gt;2, :expand=&gt;false, :fill=&gt;:x)</div><div class='del'>-  if i == 1</div><div class='del'>-    cb.ttk_state :readonly</div><div class='del'>-    begin</div><div class='del'>-      cb.current = 3 # ignore if unsupported (tile0.4)</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'>-#</div><div class='del'>-# Treeview widget demo pane:</div><div class='del'>-#</div><div class='del'>-if version?('0.5')</div><div class='del'>-</div><div class='del'>-  treeview = nil # avoid 'undefined' error</div><div class='del'>-  scrollbar = Tk::Tile::Scrollbar.new(tree,</div><div class='del'>-      :command=&gt;proc{|*args| treeview.yview(*args)})</div><div class='del'>-  treeview = Tk::Tile::Treeview.new(tree, :columns=&gt;%w(Class), :padding=&gt;4,</div><div class='del'>-      :yscrollcommand=&gt;proc{|*args| scrollbar.set(*args)})</div><div class='del'>-</div><div class='del'>-  Tk.grid(treeview, scrollbar, :sticky=&gt;'news')</div><div class='del'>-  tree.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-  tree.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-  tree.grid_propagate(0)</div><div class='del'>-</div><div class='del'>-  # Add initial tree node: </div><div class='del'>-  # Later nodes will be added in &lt;&lt;TreeviewOpen&gt;&gt; binding.</div><div class='del'>-  treeview.insert('', 0, :id=&gt;'.', :text=&gt;'Main Window', :open=&gt;false,</div><div class='del'>-      :values=&gt;[TkWinfo.classname('.')])</div><div class='del'>-  treeview.headingconfigure('#0', :text=&gt;'Widget')</div><div class='del'>-  treeview.headingconfigure('Class', :text=&gt;'Class')</div><div class='del'>-  treeview.bind('&lt;TreeviewOpen&gt;', proc{fillTree(treeview)})</div><div class='del'>-</div><div class='del'>-  def fillTree(treeview)</div><div class='del'>-    id = treeview.focus_item</div><div class='del'>-    unless TkWinfo.exist?(id)</div><div class='del'>-      treeview.delete(id)</div><div class='del'>-    end</div><div class='del'>-    # Replace tree item children with current list of child windows.</div><div class='del'>-    treeview.delete(treeview.children(id))</div><div class='del'>-    for child in TkWinfo.children(id)</div><div class='del'>-      treeview.insert(id, :end, :id=&gt;child, :text=&gt;TkWinfo.appname(child),</div><div class='del'>-          :open=&gt;false, :values=&gt;[TkWinfo.classname(child)])</div><div class='del'>-      unless TkWinfo.children(child).empty?</div><div class='del'>-        # insert dummy child to show [+] indicator</div><div class='del'>-        treeview.insert(child, :end)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-else</div><div class='del'>-  Tk::Tile::Label.new(tree,</div><div class='del'>-      :text=&gt;'Treeview is supported on tile 0.5 or later...').pack</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Other demos:</div><div class='del'>-#</div><div class='del'>-$Timers = {:StateMonitor=&gt;nil, :FocusMonitor=&gt;nil}</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  msg = Tk::Tile::Label.new(others, :justify=&gt;:left, :wraplength=&gt;300)</div><div class='del'>-rescue</div><div class='del'>-  msg = TkMessage.new(others, :aspect=&gt;200)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$Desc = {}</div><div class='del'>-</div><div class='del'>-showDescription = TkBindTag.new</div><div class='del'>-showDescription.bind('Enter', proc{|w| msg.text($Desc[w.path])}, '%W')</div><div class='del'>-showDescription.bind('Leave', proc{|w| msg.text('')}, '%W')</div><div class='del'>-</div><div class='del'>-[</div><div class='del'>-  [ :trackStates, "Widget states...",  </div><div class='del'>-    "Display/modify widget state bits" ], </div><div class='del'>-</div><div class='del'>-  [ :scrollbarResizeDemo,  "Scrollbar resize behavior...", </div><div class='del'>-    "Shows how Tile and standard scrollbars differ when they're sized too large" ], </div><div class='del'>-</div><div class='del'>-  [ :trackFocus, "Track keyboard focus..." , </div><div class='del'>-    "Display the name of the widget that currently has focus" ],</div><div class='del'>-</div><div class='del'>-  [ :repeatDemo, "Repeating buttons...",</div><div class='del'>-    "Demonstrates custom classes (see demos/repeater.tcl)" ]</div><div class='del'>-</div><div class='del'>-].each{|demo_cmd, label, description|</div><div class='del'>-  b = Tk::Tile::Button.new(others, :text=&gt;label, </div><div class='del'>-                           :command=&gt;proc{ self.__send__(demo_cmd) })</div><div class='del'>-  $Desc[b.path] = description</div><div class='del'>-  b.bindtags &lt;&lt;= showDescription</div><div class='del'>-</div><div class='del'>-  b.pack(:side=&gt;:top, :expand=&gt;false, :fill=&gt;:x, :padx=&gt;6, :pady=&gt;6)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-msg.pack(:side=&gt;:bottom, :expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Scrollbar resize demo:</div><div class='del'>-#</div><div class='del'>-$scrollbars = nil</div><div class='del'>-</div><div class='del'>-def scrollbarResizeDemo</div><div class='del'>-  if $scrollbars</div><div class='del'>-    begin</div><div class='del'>-      $scrollbars.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  $scrollbars = TkToplevel.new(:title=&gt;'Scrollbars', :geometry=&gt;'200x200')</div><div class='del'>-  f = TkFrame.new($scrollbars, :height=&gt;200)</div><div class='del'>-  tsb = Tk::Tile::Scrollbar.new(f, :command=&gt;proc{|*args| sbstub(tsb, *args)})</div><div class='del'>-  sb = TkScrollbar.new(f, :command=&gt;proc{|*args| sbstub(sb, *args)})</div><div class='del'>-  Tk.grid(tsb, sb, :sticky=&gt;:news)</div><div class='del'>-</div><div class='del'>-  sb.set(0, 0.5)  # prevent backwards-compatibility mode for old SB</div><div class='del'>-</div><div class='del'>-  f.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-  f.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-  f.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-  f.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Track focus demo:</div><div class='del'>-#</div><div class='del'>-$FocusInf = TkVariable.new_hash</div><div class='del'>-$focus = nil</div><div class='del'>-</div><div class='del'>-def trackFocus</div><div class='del'>-  if $focus</div><div class='del'>-    begin</div><div class='del'>-      $focus.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  $focus = TkToplevel.new(:title=&gt;'Keyboard focus')</div><div class='del'>-  i = 0</div><div class='del'>-  [</div><div class='del'>-    ["Focus widget:", :Widget], </div><div class='del'>-    ["Class:", :WidgetClass], </div><div class='del'>-    ["Next:", :WidgetNext], </div><div class='del'>-    ["Grab:", :Grab], </div><div class='del'>-    ["Status:", :GrabStatus]</div><div class='del'>-  ].each{|label, var_index|</div><div class='del'>-    Tk.grid(Tk::Tile::Label.new($focus, :text=&gt;label, :anchor=&gt;:e), </div><div class='del'>-            Tk::Tile::Label.new($focus, </div><div class='del'>-                                :textvariable=&gt;$FocusInf.ref(var_index), </div><div class='del'>-                                :width=&gt;40, :anchor=&gt;:w, :relief=&gt;:groove), </div><div class='del'>-            :sticky=&gt;:ew)</div><div class='del'>-    i += 1</div><div class='del'>-  }</div><div class='del'>-  $focus.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-  $focus.grid_rowconfigure(i, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-  $focus.bind('Destroy', proc{Tk.after_cancel($Timers[:FocusMonitor])})</div><div class='del'>-  focusMonitor</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def focusMonitor</div><div class='del'>-  $FocusInf[:Widget] = focus_win = Tk.focus</div><div class='del'>-  if focus_win</div><div class='del'>-    $FocusInf[:WidgetClass] = focus_win.winfo_classname</div><div class='del'>-    $FocusInf[:WidgetNext] = Tk.focus_next(focus_win)</div><div class='del'>-  else</div><div class='del'>-    $FocusInf[:WidgetClass] = $FocusInf[:WidgetNext] = ''</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $FocusInf[:Grab] = grab_wins = Tk.current_grabs</div><div class='del'>-  unless grab_wins.empty?</div><div class='del'>-    $FocusInf[:GrabStatus] = grab_wins[0].grab_status</div><div class='del'>-  else  </div><div class='del'>-    $FocusInf[:GrabStatus] = ''</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $Timers[:FocusMonitor] = Tk.after(200, proc{ focusMonitor() })</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Widget state demo:</div><div class='del'>-#</div><div class='del'>-$Widget = TkVariable.new</div><div class='del'>-</div><div class='del'>-TkBindTag::ALL.bind('Control-Shift-ButtonPress-1', </div><div class='del'>-                    proc{|w|</div><div class='del'>-                      $Widget.value = w</div><div class='del'>-                      updateStates()</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W')</div><div class='del'>-$states_list = %w(active disabled focus pressed selected </div><div class='del'>-                  background indeterminate invalid default)</div><div class='del'>-$states_btns = {}</div><div class='del'>-$states = nil</div><div class='del'>-</div><div class='del'>-$State = TkVariable.new_hash</div><div class='del'>-</div><div class='del'>-def trackStates</div><div class='del'>-  if $states</div><div class='del'>-    begin</div><div class='del'>-      $state.destroy</div><div class='del'>-    rescue</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  $states = TkToplevel.new(:title=&gt;'Widget states')</div><div class='del'>-</div><div class='del'>-  l_inf = Tk::Tile::Label.new($states, :text=&gt;"Press Control-Shift-Button-1 on any widget")</div><div class='del'>-</div><div class='del'>-  l_lw = Tk::Tile::Label.new($states, :text=&gt;'Widget:', </div><div class='del'>-                             :anchor=&gt;:e, :relief=&gt;:groove)</div><div class='del'>-  l_w = Tk::Tile::Label.new($states, :textvariable=&gt;$Widget, </div><div class='del'>-                             :anchor=&gt;:w, :relief=&gt;:groove)</div><div class='del'>-</div><div class='del'>-  Tk.grid(l_inf, '-', :sticky=&gt;:ew, :padx=&gt;6, :pady=&gt;6)</div><div class='del'>-  Tk.grid(l_lw, l_w, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-  $states_list.each{|st|</div><div class='del'>-    cb = Tk::Tile::Checkbutton.new($states, :text=&gt;st, </div><div class='del'>-                                   :variable=&gt;$State.ref(st), </div><div class='del'>-                                   :command=&gt;proc{ changeState(st) })</div><div class='del'>-    $states_btns[st] = cb</div><div class='del'>-    Tk.grid('x', cb, :sticky=&gt;:nsew)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  $states.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-  f_cmd = Tk::Tile::Frame.new($states)</div><div class='del'>-  Tk.grid('x', f_cmd, :sticky=&gt;:nse)</div><div class='del'>-</div><div class='del'>-  b_close = Tk::Tile::Button.new(f_cmd, :text=&gt;'Close', </div><div class='del'>-                                 :command=&gt;proc{ $states.destroy })</div><div class='del'>-  Tk.grid('x', b_close, :padx=&gt;4, :pady=&gt;[6,4])</div><div class='del'>-  f_cmd.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-  $states.bind('KeyPress-Escape', proc{Tk.event_generate(b_close, '&lt;Invoke&gt;')})</div><div class='del'>-</div><div class='del'>-  $states.bind('Destroy', proc{Tk.after_cancel($Timers[:StateMonitor])})</div><div class='del'>-  stateMonitor()</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def stateMonitor</div><div class='del'>-  updateStates() if $Widget.value != ''</div><div class='del'>-  $Timers[:StateMonitor] = Tk.after(200, proc{ stateMonitor() })</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def updateStates</div><div class='del'>-  $states_list.each{|st|</div><div class='del'>-    begin</div><div class='del'>-      $State[st] = $Widget.window.ttk_instate(st)</div><div class='del'>-    rescue</div><div class='del'>-      $states_btns[st].ttk_state('disabled')</div><div class='del'>-    else</div><div class='del'>-      $states_btns[st].ttk_state('!disabled')</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def changeState(st)</div><div class='del'>-  if $Widget.value != ''</div><div class='del'>-    if $State.bool_element(st)</div><div class='del'>-      $Widget.window.ttk_state(st)</div><div class='del'>-    else</div><div class='del'>-      $Widget.window.ttk_state("!#{st}")</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'>-# Repeating buttons demo:</div><div class='del'>-#</div><div class='del'>-def repeatDemo</div><div class='del'>-  if defined?($repeatDemo) &amp;&amp; $repeatDemo.exist?</div><div class='del'>-    $repeatDemo.deiconify; return</div><div class='del'>-  end</div><div class='del'>-  $repeatDemo = TkToplevel.new(:title=&gt;'Repeating button')</div><div class='del'>-</div><div class='del'>-  f = Tk::Tile::Frame.new($repeatDemo)</div><div class='del'>-  b = Tk::Tile::Button.new(f, :class=&gt;'Repeater', :text=&gt;'Press and hold')</div><div class='del'>-  if version?('0.6')</div><div class='del'>-    p = Tk::Tile::Progressbar.new(f, :orient=&gt;:horizontal, :maximum=&gt;10)</div><div class='del'>-  else # progressbar is not supported</div><div class='del'>-    p = Tk::Tile::Progress.new(f, :orient=&gt;:horizontal, :from=&gt;0, :to=&gt;10)</div><div class='del'>-    def p.step</div><div class='del'>-      i = self.get + 1</div><div class='del'>-      i = self.from if i &gt; self.to</div><div class='del'>-      self.set(i)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  b.command {p.step}</div><div class='del'>-</div><div class='del'>-  b.pack(:side=&gt;:left, :expand=&gt;false, :fill=&gt;:none, :padx=&gt;6, :pady=&gt;6)</div><div class='del'>-  p.pack(:side=&gt;:right, :expand=&gt;true, :fill=&gt;:x, :padx=&gt;6, :pady=&gt;6)</div><div class='del'>-  f.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/iconlib.tcl b/ext/tk/sample/tkextlib/tile/iconlib.tcl<br/>deleted file mode 100644<br/>index 9a93ece504..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/iconlib.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/iconlib.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,110 +0,0 @@</div><div class='del'>-array set ImgData {</div><div class='del'>-bold {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI6hI+py60U3wj+</div><div class='del'>-RYQFJYRvEWFBCeFbRFhQQvhG8YPgX0RYUEL4FhEWlBC+RYQFJYQPFN8IPqYut/8hBQA7}</div><div class='del'>-copy {R0lGODlhEAAQAJEAANnZ2QAAAP///wAAhCH5BAEAAAAALAAAAAAQABAAAAJUhI8JFJ/gY4iI</div><div class='del'>-UEL4FyIiFIXgW0iEUDgfACBI9pzMAAGRiIghWSMDECR7JEKGtkFIRFBG+TIQKDQxtgzcDcmX</div><div class='del'>-IfgwQrFlCD4MyZch+EDzj+Bj6mYBADs=}</div><div class='del'>-cut {R0lGODlhEAAQAJEAANnZ2QAAAAAAhP///yH5BAEAAAAALAAAAAAQABAAAAJFhI+pcUHwEeIi</div><div class='del'>-E0gACIKPEAFBIXy0gMg8EhM+YmQiKSL4eAIiJMI/EQEhQGYGYiQIQAg+iAkIATIzECMBIgT/</div><div class='del'>-RBARERlSADs=}</div><div class='del'>-dragfile {R0lGODlhGAAYAKIAANnZ2TMzM////wAAAJmZmf///////////yH5BAEAAAAALAAAAAAYABgA</div><div class='del'>-AAPACBi63IqgC4GiyxwogaAbKLrMgSKBoBoousyBogEACIGiyxwoKgGAECI4uiyCExMTOACB</div><div class='del'>-osuNpDoAGCI4uiyCIkREOACBosutSDoAgSI4usyCIjQAGCi63Iw0ACEoOLrMgiI0ABgoutyM</div><div class='del'>-NAAhKDi6zIIiNAAYKLrcjDQAISg4usyCIjQAGCi63Iw0AIGiiqPLIyhCA4CBosvNSAMQKKo4</div><div class='del'>-ujyCIjQAGCi63Iw0AIGiy81IAxCBpMu9GAMAgKPL3QgJADs=}</div><div class='del'>-dragicon {R0lGODlhGAAYALMAANnZ2TMzM/////8zM8zMzGYAAAAAAJmZmQCZMwAzZgCZzGZmZv//////</div><div class='del'>-/////////yH5BAEAAAAALAAAAAAYABgAAAT/EMAgJ60SAjlBgEJOSoMIEMgZoJCT0iADBFIG</div><div class='del'>-KOSkNMwAAABhwiHnIEKIIIQQAQIZhBBwyDmKEMIEE0yABoAghIBDzlGEENDIaQAIQgg45BwF</div><div class='del'>-CinPOccAECYcUiKEEBFCiHPgMQAEIcQYYyABBUGIQCHlMQCEScZAAhKEEApCECGOARAEIQQp</div><div class='del'>-BRGIpAyCJCGOASBAISdEcqJAVBLiGABggELOAJGUKyiVhDgGABigkJMEhNAKSqkEhTgGgCCl</div><div class='del'>-FCQEGIJSSiUhjgEgQCEnJVBJmYQ4BoAAhZyTQCVnEuIYAAIUckoCk5xSiGMACFDISSs9BoBg</div><div class='del'>-rRXQMQAEKOSklR4DEUAI8MhJ6wwGAACgkZNWCkAEADs=}</div><div class='del'>-error {R0lGODlhIAAgAKIAANnZ2YQAAP8AAISEhP///////////////yH5BAEAAAAALAAAAAAgACAA</div><div class='del'>-AAP/CLoMGLqKoMvtGIqiqxEYCLrcioGiyxwIusyBgaLLLRiBoMsQKLrcjYGgu4Giy+2CAkFX</div><div class='del'>-A0WX2wXFIOgGii7trkCEohsDCACBoktEKLpKhISiGwAIECiqSKooukiqKKoxgACBooukKiIo</div><div class='del'>-SKooujGDECi6iqQqsopEV2MQAkV3kXQZRXdjEAJFl5F0FUWXY3ACRZcFSRdFlyVwJlB0WZB0</div><div class='del'>-UXRZAmcCRZeRdBVFl2NwAkV3kXQZRXdjcAJFV5FURVaR6GoMDgSKLpKqiKAgqaLoxgwOBIoq</div><div class='del'>-kiqKLpIqimrM4ECg6BIRiq4SIaHoxgyCBoou7a5AhKIbMzgAAIGiy+2CTWJmBhAAAkWX2wXF</div><div class='del'>-zCDoBooud2PMDIKuRqDocgtGzMwg6O4Eii5z4Kgi6DIMhqLoagQGjiqCLvPgYOgqji6CLrfi</div><div class='del'>-6DIj6HI7jq4i6DIkADs=}</div><div class='del'>-file {R0lGODlhCwANAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAALAA0AAAIyhI9G8Q0AguSH</div><div class='del'>-AMQdxQgxEyEFQfItICQokYgEBMm3gBCKLRIQJN8CQii2SECQfAug+FgAOw==}</div><div class='del'>-folder {R0lGODlhEAANAKIAANnZ2YSEhMbGxv//AP///wAAAP///////yH5BAEAAAAALAAAAAAQAA0A</div><div class='del'>-AANjCIqhiqDLITgyEgi6GoIjIyMYugCBpMsaWBA0giMjIzgyUYBBMjIoIyODEgVBODIygiMj</div><div class='del'>-E1gQJIMyMjIoI1GAQSMjODIyghMFQSgjI4MyMhJYEDSCIyMjODJRgKHLXAiApcucADs=}</div><div class='del'>-hourglass {R0lGODlhIAAgAKIAANnZ2YAAAAAAAP8AAP///8DAwICAgP///yH5BAEAAAAALAAAAAAgACAA</div><div class='del'>-AAPZCLrc/jDKSau9OGcUuqyCoMvNGENVhaMrCLrcjaLLgqDL7WhFVIVVZoKgy+1oRUSFVWaC</div><div class='del'>-oMvtaEVEhVVmgqDL7WhFRIVVZoKgy+1oVVaCJWaCoMvtgKxISrBMEHS5fZEVSRkKgi63NzIq</div><div class='del'>-EwRdbndkVCYIutzeyIqqDAVBl9sXWRFJYZkg6HI7ICsiKqwyEwRdbkcrIhKsMhMEXW5HKyIp</div><div class='del'>-lDITBF1uRysyEiwxEwRdbkcrIyuUEhMEXW5H0WVB0OVujKGqwtEVBF1uRtHlRdDl9odRTlrt</div><div class='del'>-xRmjBAA7}</div><div class='del'>-info {R0lGODlhIAAgAKIAANnZ2YSEhMbGxv///wAA/wAAAP///////yH5BAEAAAAALAAAAAAgACAA</div><div class='del'>-AAP/CLoMGLqKoMvtGCo4uhKBgaDLDRghOLqsghEIuryBgqPLPSiBoMsQOLojhEQkOLpTCLob</div><div class='del'>-OLqKpIujq4WgC4Gju0i6OLpbCKohOLorhEQkOLorhaAQOLrc3qgCIARHl9sbSQUEji4j6RKO</div><div class='del'>-Lk9hQODosiKp4ujyFIbi6LIiqeLo8hSG4uiyIqni6PIUhuLosiKp4ujyFIYKji4PkiqOLkth</div><div class='del'>-BASOLg+SKo4uV2AEhODoMpIqju5KYShA4Ogqku7i6E4FRgAAYOHocvugiohAUC0cXe7GiohA</div><div class='del'>-0IUSHF3uQamICATdrULB0WUVrIqIQNBlCCwVHF2pwsJQRdDlDYyoKsHRPMLQDQRdbsDQqBmc</div><div class='del'>-wlBF0OV2jJqZwggEXW5vVDMVgaDL7Y5qKgJBl9sfVUUg6HL7AxSKoMvtr1AEgi5DAgA7}</div><div class='del'>-italic {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAIrhI+py+1A4hN8</div><div class='del'>-hIjINBITPlpEZBqJCR8tIjKNxISPFhGZQOITfExdbv9FCgA7}</div><div class='del'>-new {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAJFhI95FN8IvgXJ</div><div class='del'>-jyD4ECQ/JAh+kPyICIIdJP+CYAfJvyDYQfIvCHaQ/AuCHST/gmAHyb8g2EHyLwh2kPwLgk3x</div><div class='del'>-MQg+pu4WADs=}</div><div class='del'>-open {R0lGODlhEAAQAKIAANnZ2QAAAP//AP///4SEAP///////////yH5BAEAAAAALAAAAAAQABAA</div><div class='del'>-AANZCLrczigUQZc1EDQgEHSZAwMgIhB0NQIDQkYwdANBNUZwZGQEJxBUQwZlZGRQAkE1RnAE</div><div class='del'>-Q5dVcCSQdDcAYySQdDcAISSQdDcAASKQdDcAAQBDlwNBl9sfApQAOw==}</div><div class='del'>-openfold {R0lGODlhEAANAKIAANnZ2YSEhP///8bGxv//AAAAAP///////yH5BAEAAAAALAAAAAAQAA0A</div><div class='del'>-AANgCIqhiqDLgaIaCLoagkNDIxi6AIFCQ0M4KKpRgCFDQzg0NIQThaHLSxgVKLochRMVMkhD</div><div class='del'>-Q4M0VBFYEDKEQ0NDOFFRgCE0NEhDQ4MVBRAoNDSEQ0NRWAAYuqyFBQBYurwJADs=}</div><div class='del'>-overstrike {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI3hI+py80Uh+Aj</div><div class='del'>-RFhQCP8iMILgWwRGEHyLwAiCbxEYQfCB4iPBhwiMIPgXYREEHyEiguBj6nI7FQA7}</div><div class='del'>-palette {R0lGODlhEAAQAKIAANnZ2QAAAP//AP////8A/4QAhP8AAAD//yH5BAEAAAAALAAAAAAQABAA</div><div class='del'>-AANtCLrcjqGBoMsRKCMTgaALMSgDAYMSCKoxgAFBITgSAIAQEhUIARCAEgAQOBAwghMQEwga</div><div class='del'>-MoIjIxAIEgCAEBEyKBAgg4GgGxAIYTGCgaALcRgQIIGgCwEYICODgaALITgyEoGguxiqCLrc</div><div class='del'>-/lChBAA7}</div><div class='del'>-passwd {R0lGODlhIAAgAMQAANnZ2QAAAICAgICAAP///7CwsMDAwMjIAPjIAOjo6Pj4AODg4HBwcMj4</div><div class='del'>-ANjY2JiYANDQ0MjIyPj4yKCgoMiYAMjImDAwAMjIMJiYmJCQkP//////////////////////</div><div class='del'>-/yH5BAEAAAAALAAAAAAgACAAAAX/ICCOIhiIIgiII1maZSCMQnCeJyAIQiAIAiAMwxCcJwkk</div><div class='del'>-EAQRCIUwGMSBDEEAAuJIlgKRJEEgGAMRBIGiDENQlqNAJAsYCEwgEEEgBAHSIEMAAuJIAgKR</div><div class='del'>-LEsgGEMgCEJgBMqhHENQlgJILMsSCMRABEFgGAESHMcRgIA4kgKxOIsTBAOhKAITKEGDHMhD</div><div class='del'>-kqIAEqAjisJAgIooBkpwNMcTgIA4jgLhOBAkEAOhKIoSKEGDIMcTkKQICgQEQQIxEIqiBEpw</div><div class='del'>-IMdxPAEIiCMJCEQUMUQ0EIqiHIfSIM3xBGUpCiABCUQyEMqhHMiBHMjxBCAgjuQoEAKxRANB</div><div class='del'>-HMqhHM1x/zxDUJajQIACsUTDQBAEIR3IcQRDAALiSIoCYQiEE03gII7HQR3BEICAOJICYRSC</div><div class='del'>-QDjRNE1CAAzVQR3WE5AkAAqEUQiFQEARBAUAAAzHQR3BEICAOI4CUQhFIBAREwXjUFUHdQRD</div><div class='del'>-QJJAABbCFAhEJBgBAADAMAwXdQRDAALiCAhEIRQCYRiCEZDjUFFHMAQkIBAFOAmTQBiFUAQg</div><div class='del'>-II7AUFXUEQwBCQjEJExBkBRCEZCjMIBD9RxDAALiGEzCFBBYIRTBOI7AQB1DMIoCMQkYGAjL</div><div class='del'>-JEwBCIgjOVDDEJCAQGACJiTTJEwBSY5BEJAiSCCwTAiCZBKmAATEkSzNQBCCYCDBJgELTNMk</div><div class='del'>-g0AMEgwTAhAQR7I0zYARgvM8TyAIznMMAQA7}</div><div class='del'>-paste {R0lGODlhEAAQAKIAANnZ2QAAAP//AISEAISEhP///wAAhP///yH5BAEAAAAALAAAAAAQABAA</div><div class='del'>-AANwCLrcjqGBoKsYqiKrCDSGBkMiJJCGAgCDKBB0gwYDIKYwdJUIAyBokIaGBmloAhBiaAgH</div><div class='del'>-TdcCEIKGBsmwVM0AIYaGcAxL1coQgoYGySoisMzMAoeGxrB01QJpaMiwMHTLAEPVsHTVEHTR</div><div class='del'>-dBlBlxswAQA7}</div><div class='del'>-print {R0lGODlhEAAQAKIAANnZ2QAAAP///4SEhP//AP///////////yH5BAEAAAAALAAAAAAQABAA</div><div class='del'>-AANZCLrcjqG7CLqBoquBoBuCoSqBoBsouhoIuiEYqrKBoIGiqwEYEIChyxAIEYGgywEYgKHL</div><div class='del'>-DAgRCLozgwABARgIukSEABEBGLq8gAEQCLobgAEAgKHLgaDLzZgAOw==}</div><div class='del'>-question {R0lGODlhIAAgAKIAANnZ2YSEhMbGxv///wAAAAAA/////////yH5BAEAAAAALAAAAAAgACAA</div><div class='del'>-AAP/CLoMGLqKoMvtGCo4uhKBgaDLDRghOLqsghEIuryBgqPLPSiBoMsQOLrcjYSgu4GjO4Kl</div><div class='del'>-Kzi6Qwi6EDi6I4UyU1VYgqM7hKAagqM7VTg6VYWFoztCCAqBo6tVWDVThVU4ukqBACE4ulqF</div><div class='del'>-VSNVWIWjq0IYEDi6K4UlU1VYOLpMgRA4uryCpTi6PIShOLq8hVU4uqyEoTi6vIUlOLqshKE4</div><div class='del'>-uryFhaPLSxgqOLrc3kgoAgJHl0ewSnB0eQhDIQRHl6uwCkeXhTAUIHB0uQqrcHSZAiMAAJBw</div><div class='del'>-dFcKS3B0lwIjAkGVcHS5GykiAkEXSHB0uQeFIiIQdJcIBUeXVZAoIgJBT5chkFRwdIUICUMV</div><div class='del'>-QZc3MIKIBEcJQzcQdLkBQ4NmcAhDFUGX2zFoZggjEHS5vRHNUASCLrc7oqEIBF1uf0QUgaDL</div><div class='del'>-7Q9QKIIut79CEQi6DAkAOw==}</div><div class='del'>-redo {R0lGODlhEAAQAJEAANnZ2QAAhP///////yH5BAEAAAAALAAAAAAQABAAAAIvhI+py+1vSByC</div><div class='del'>-jxAYQXDMwsyAggQAQBB8iwgMgg8REQgUwqbYBDsIPqYutz+MgBQAOw==}</div><div class='del'>-save {R0lGODlhEAAQAJEAANnZ2QAAAISEAP///yH5BAEAAAAALAAAAAAQABAAAAJWhI9pFB8RIIRC</div><div class='del'>-+BYQFqQQvkWEBSmEbyFhQQrhW0hYkEL4FhIWpBC+hYQFSYxvIgFAoXy0AAiSGP8kAIIkxgcI</div><div class='del'>-CSBEQvEBQgIIkVB8gJAAAhgfj+BjWgEAOw==}</div><div class='del'>-underline {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI3hI+py60UBy4I</div><div class='del'>-vkVcBMG/iIsg+BdxEQT/Ii6C4F/ERRD8i7gIgn8RF0HwkWITfExFin8EH1OXCwA7}</div><div class='del'>-undo {R0lGODlhEAAQAJEAANnZ2QAAhP///////yH5BAEAAAAALAAAAAAQABAAAAIuhI+py+2vSByC</div><div class='del'>-HxdxQCHsCIg7oAAAEUHwLTAiKIQPgRSbYMfd3VEIH1OX2x8mUgA7}</div><div class='del'>-warning {R0lGODlhIAAgAKIAANnZ2YSEAP//AMbGxgAAAISEhP///////yH5BAEAAAAALAAAAAAgACAA</div><div class='del'>-AAP/CLq8gREIutz+KESGEHS5vVGIiAxSIehy+6JAUaUqBF1uBxQoukOFhaDL7RgoukKFhaDL</div><div class='del'>-3RgoujqEVQi63IyBortUWAi63IuBostDWIWgy60YIjKERCMiSFUIutyAISKCpCoiOFSFoMsd</div><div class='del'>-KCpIqiKCQlUIusyBooqkKiIoQ1UIuryBooqkiqJKVQi6rIGii6SKojpUWAi6DIGiG0RIgaJL</div><div class='del'>-VQi6HCi6MoREg6I7VFgIuhsoukqEhKKrVFgIuhoouhuEgaKrQ1iFoAuBortDOCi6S4WFoBso</div><div class='del'>-uiyEostDWIWgGii63K6IqgAAIVB0WQaJBkV3h7AKAAJFl4WQiFB0mQoLRyBQdFkJiQhFl4ew</div><div class='del'>-CgJFl3WQaFB0WQirIFB0ud0RVVWg6HJ7o6GqAgwUXW5fNFRVhQCBpMvti0oVABCwdLndEehi</div><div class='del'>-6XI7I4AEADs=}</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/readme.txt b/ext/tk/sample/tkextlib/tile/readme.txt<br/>deleted file mode 100644<br/>index a76b3338f7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/readme.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/readme.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-All of *.tcl and under themes/ directory (except kroc.rb) are </div><div class='del'>-quoted from Tcl/Tk's Tile extension. Please read Orig_LICENSE.txt. </div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/repeater.tcl b/ext/tk/sample/tkextlib/tile/repeater.tcl<br/>deleted file mode 100644<br/>index 652ba8ab17..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/repeater.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/repeater.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,117 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-#</div><div class='del'>-# Demonstration of custom classes.</div><div class='del'>-#</div><div class='del'>-# The Tile button doesn't have built-in support for autorepeat.</div><div class='del'>-# Instead of adding -repeatdelay and -repeatinterval options,</div><div class='del'>-# and all the extra binding scripts required to deal with them,</div><div class='del'>-# we create a custom widget class for autorepeating buttons.</div><div class='del'>-#</div><div class='del'>-# Usage:</div><div class='del'>-#	ttk::button .b -class Repeater [... other options ...]</div><div class='del'>-#</div><div class='del'>-# TODO:</div><div class='del'>-#	Use system settings for repeat interval and initial delay.</div><div class='del'>-#</div><div class='del'>-# Notes:</div><div class='del'>-#	Repeater buttons work more like scrollbar arrows than</div><div class='del'>-#	Tk repeating buttons: they fire once immediately when</div><div class='del'>-#	first pressed, and $State(delay) specifies the initial </div><div class='del'>-#	interval before the button starts autorepeating.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-namespace eval tile::Repeater {</div><div class='del'>-    variable State</div><div class='del'>-    set State(timer) 	{}	;# [after] id of repeat script</div><div class='del'>-    set State(interval)	100	;# interval between repetitions</div><div class='del'>-    set State(delay)	300	;# delay after initial invocation</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-### Class bindings.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-bind Repeater &lt;Enter&gt;		{ %W state active }</div><div class='del'>-bind Repeater &lt;Leave&gt;		{ %W state !active }</div><div class='del'>-</div><div class='del'>-bind Repeater &lt;Key-space&gt; 	{ tile::Repeater::Activate %W }</div><div class='del'>-bind Repeater &lt;&lt;Invoke&gt;&gt; 	{ tile::Repeater::Activate %W }</div><div class='del'>-</div><div class='del'>-bind Repeater &lt;ButtonPress-1&gt; 	{ tile::Repeater::Press %W }</div><div class='del'>-bind Repeater &lt;ButtonRelease-1&gt; { tile::Repeater::Release %W }</div><div class='del'>-bind Repeater &lt;B1-Leave&gt; 	{ tile::Repeater::Pause %W }</div><div class='del'>-bind Repeater &lt;B1-Enter&gt; 	{ tile::Repeater::Resume %W } ;# @@@ see below</div><div class='del'>-</div><div class='del'>-# @@@ Workaround for metacity-induced bug:</div><div class='del'>-bind Repeater &lt;B1-Enter&gt; \</div><div class='del'>-    { if {"%d" ne "NotifyUngrab"} { tile::Repeater::Resume %W } }</div><div class='del'>-</div><div class='del'>-### Binding procedures.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-## Activate -- Keyboard activation binding. </div><div class='del'>-#	Simulate clicking the button, and invoke the command once. </div><div class='del'>-#</div><div class='del'>-proc tile::Repeater::Activate {w} {</div><div class='del'>-    $w instate disabled { return }</div><div class='del'>-    set oldState [$w state pressed]</div><div class='del'>-    update idletasks; after 100</div><div class='del'>-    $w state $oldState</div><div class='del'>-    after idle [list $w invoke]</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Press -- ButtonPress-1 binding.</div><div class='del'>-#	Invoke the command once and start autorepeating after </div><div class='del'>-#	$State(delay) milliseconds.</div><div class='del'>-#</div><div class='del'>-proc tile::Repeater::Press {w} {</div><div class='del'>-    variable State</div><div class='del'>-    $w instate disabled { return }</div><div class='del'>-    $w state pressed</div><div class='del'>-    $w invoke</div><div class='del'>-    after cancel $State(timer)</div><div class='del'>-    set State(timer) [after $State(delay) [list tile::Repeater::Repeat $w]]</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Release -- ButtonRelease binding.</div><div class='del'>-#	Stop repeating.</div><div class='del'>-#</div><div class='del'>-proc tile::Repeater::Release {w} {</div><div class='del'>-    variable State</div><div class='del'>-    $w state !pressed</div><div class='del'>-    after cancel $State(timer)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Pause -- B1-Leave binding</div><div class='del'>-#	Temporarily suspend autorepeat.</div><div class='del'>-#</div><div class='del'>-proc tile::Repeater::Pause {w} {</div><div class='del'>-    variable State</div><div class='del'>-    $w state !pressed</div><div class='del'>-    after cancel $State(timer)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Resume -- B1-Enter binding</div><div class='del'>-#	Resume autorepeat.</div><div class='del'>-#</div><div class='del'>-proc tile::Repeater::Resume {w} {</div><div class='del'>-    variable State</div><div class='del'>-    $w instate disabled { return }</div><div class='del'>-    $w state pressed</div><div class='del'>-    $w invoke</div><div class='del'>-    after cancel $State(timer)</div><div class='del'>-    set State(timer) [after $State(interval) [list tile::Repeater::Repeat $w]]</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-## Repeat -- Timer script</div><div class='del'>-#	Invoke the command and reschedule another repetition </div><div class='del'>-#	after $State(interval) milliseconds.</div><div class='del'>-#</div><div class='del'>-proc tile::Repeater::Repeat {w} {</div><div class='del'>-    variable State</div><div class='del'>-    $w instate disabled { return }</div><div class='del'>-    $w invoke</div><div class='del'>-    set State(timer) [after $State(interval) [list tile::Repeater::Repeat $w]]</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#*EOF*</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl b/ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl<br/>deleted file mode 100644<br/>index 37e3d07ff7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,149 +0,0 @@</div><div class='del'>-# blue.tcl - Copyright (C) 2004 Pat Thoyts &lt;patthoyts@users.sourceforge.net&gt;</div><div class='del'>-#</div><div class='del'>-# blue.tcl,v 1.27 2005/10/08 14:56:57 jenglish Exp</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-namespace eval tile::theme::blue {</div><div class='del'>-</div><div class='del'>-    package provide tile::theme::blue 0.7</div><div class='del'>-</div><div class='del'>-    set imgdir [file join [file dirname [info script]] blue]</div><div class='del'>-    array set I [tile::LoadImages $imgdir *.gif]</div><div class='del'>-</div><div class='del'>-    array set colors {</div><div class='del'>-	-frame  	"#6699cc"</div><div class='del'>-	-lighter	"#bcd2e8"</div><div class='del'>-	-window	 	"#e6f3ff"</div><div class='del'>-	-selectbg	"#ffff33"</div><div class='del'>-	-selectfg	"#000000"</div><div class='del'>-	-disabledfg	"#666666"</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    style theme create blue -settings {</div><div class='del'>-</div><div class='del'>-	style default . \</div><div class='del'>-	    -borderwidth 	1 \</div><div class='del'>-	    -background 	$colors(-frame) \</div><div class='del'>-	    -fieldbackground	$colors(-window) \</div><div class='del'>-	    -troughcolor	$colors(-lighter) \</div><div class='del'>-	    -selectbackground	$colors(-selectbg) \</div><div class='del'>-	    -selectforeground	$colors(-selectfg) \</div><div class='del'>-	    ;</div><div class='del'>-	style map . -foreground [list disabled $colors(-disabledfg)]</div><div class='del'>-</div><div class='del'>-	## Buttons.</div><div class='del'>-	#</div><div class='del'>-	style default TButton -padding "10 0"</div><div class='del'>-	style layout TButton {</div><div class='del'>-	    Button.button -children {</div><div class='del'>-		Button.focus -children {</div><div class='del'>-		    Button.padding -children {</div><div class='del'>-			Button.label</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	style element create button image $I(button-n) \</div><div class='del'>-	    -map [list pressed $I(button-p)  active $I(button-h)] \</div><div class='del'>-	    -border 4 -sticky ew</div><div class='del'>-</div><div class='del'>-	style element create Checkbutton.indicator image $I(check-nu) \</div><div class='del'>-	    -width 24 -sticky w -map [list \</div><div class='del'>-		{!disabled active selected} $I(check-hc) \</div><div class='del'>-		{!disabled active} $I(check-hu) \</div><div class='del'>-		{!disabled selected} $I(check-nc) ]</div><div class='del'>-</div><div class='del'>-	style element create Radiobutton.indicator image $I(radio-nu) \</div><div class='del'>-	    -width 24 -sticky w -map [list \</div><div class='del'>-		{!disabled active selected} $I(radio-hc) \</div><div class='del'>-		{!disabled active} $I(radio-hu) \</div><div class='del'>-		selected $I(radio-nc) ]</div><div class='del'>-</div><div class='del'>-	style default TMenubutton -relief raised -padding {10 2}</div><div class='del'>-</div><div class='del'>-	## Toolbar buttons.</div><div class='del'>-	#</div><div class='del'>-	style default Toolbutton \</div><div class='del'>-	    -width 0 -relief flat -borderwidth 2 -padding 4 \</div><div class='del'>-	    -background $colors(-frame) -foreground #000000 ;</div><div class='del'>-	style map Toolbutton -background [list active $colors(-selectbg)] </div><div class='del'>-	style map Toolbutton -foreground [list active $colors(-selectfg)] </div><div class='del'>-	style map Toolbutton -relief {</div><div class='del'>-	    disabled 	flat</div><div class='del'>-	    selected	sunken  </div><div class='del'>-	    pressed 	sunken  </div><div class='del'>-	    active  	raised</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	## Entry widgets.</div><div class='del'>-	#</div><div class='del'>-	style default TEntry \</div><div class='del'>-	    -selectborderwidth 1 -padding 2 -insertwidth 2 -font TkTextFont</div><div class='del'>-	style default TCombobox \</div><div class='del'>-	    -selectborderwidth 1 -padding 2 -insertwidth 2 -font TkTextFont</div><div class='del'>-</div><div class='del'>-	## Notebooks.</div><div class='del'>-	#</div><div class='del'>-	style default TNotebook.Tab -padding {4 2 4 2}</div><div class='del'>-	style map TNotebook.Tab \</div><div class='del'>-	    -background \</div><div class='del'>-		[list selected $colors(-frame) active $colors(-lighter)] \</div><div class='del'>-	    -padding [list selected {4 4 4 2}]</div><div class='del'>-</div><div class='del'>-	## Labelframes.</div><div class='del'>-	#</div><div class='del'>-	style default TLabelframe -borderwidth 2 -relief groove</div><div class='del'>-</div><div class='del'>-	## Scrollbars.</div><div class='del'>-	#</div><div class='del'>-	style layout Vertical.TScrollbar {</div><div class='del'>-	    Scrollbar.trough -children {</div><div class='del'>-		Scrollbar.uparrow -side top</div><div class='del'>-		Scrollbar.downarrow -side bottom</div><div class='del'>-		Scrollbar.uparrow -side bottom</div><div class='del'>-		Vertical.Scrollbar.thumb -side top -expand true -sticky ns</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	style layout Horizontal.TScrollbar {</div><div class='del'>-	    Scrollbar.trough -children {</div><div class='del'>-		Scrollbar.leftarrow -side left</div><div class='del'>-		Scrollbar.rightarrow -side right</div><div class='del'>-		Scrollbar.leftarrow -side right</div><div class='del'>-		Horizontal.Scrollbar.thumb -side left -expand true -sticky we</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	style element create Horizontal.Scrollbar.thumb image $I(sb-thumb) \</div><div class='del'>-	    -map [list {pressed !disabled} $I(sb-thumb-p)] -border 3</div><div class='del'>-</div><div class='del'>-	style element create Vertical.Scrollbar.thumb image $I(sb-vthumb) \</div><div class='del'>-	    -map [list {pressed !disabled} $I(sb-vthumb-p)] -border 3</div><div class='del'>-</div><div class='del'>-	foreach dir {up down left right} {</div><div class='del'>-	    style element create ${dir}arrow image $I(arrow${dir}) \</div><div class='del'>-		-map [list \</div><div class='del'>-		    disabled $I(arrow${dir}) \</div><div class='del'>-		    pressed $I(arrow${dir}-p) \</div><div class='del'>-		    active $I(arrow${dir}-h)] \</div><div class='del'>-	        -border 1 -sticky {}</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	## Scales.</div><div class='del'>-	#</div><div class='del'>-	style element create Scale.slider \</div><div class='del'>-	    image $I(slider) -map [list {pressed !disabled} $I(slider-p)]</div><div class='del'>-</div><div class='del'>-	style element create Vertical.Scale.slider \</div><div class='del'>-	    image $I(vslider) -map [list {pressed !disabled} $I(vslider-p)]</div><div class='del'>-</div><div class='del'>-	style element create Horizontal.Progress.bar \</div><div class='del'>-	    image $I(sb-thumb) -border 2</div><div class='del'>-	style element create Vertical.Progress.bar \</div><div class='del'>-	    image $I(sb-vthumb) -border 2</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif<br/>deleted file mode 100644<br/>index 3c1be9d880..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif<br/>deleted file mode 100644<br/>index 1cb36ec554..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif<br/>deleted file mode 100644<br/>index e363c362ed..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif<br/>deleted file mode 100644<br/>index cbc3db2756..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif<br/>deleted file mode 100644<br/>index 14d541b03e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif<br/>deleted file mode 100644<br/>index 32584a34b2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif<br/>deleted file mode 100644<br/>index 913e9da94b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif<br/>deleted file mode 100644<br/>index d02208fcf7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif<br/>deleted file mode 100644<br/>index 2b0f1fd07b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif<br/>deleted file mode 100644<br/>index 6059bae094..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif<br/>deleted file mode 100644<br/>index 20b6a824f4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif<br/>deleted file mode 100644<br/>index 5857616228..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif<br/>deleted file mode 100644<br/>index 0947f43b90..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif<br/>deleted file mode 100644<br/>index d9845283a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf b/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf<br/>deleted file mode 100644<br/>index e38ed19e61..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcf</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif<br/>deleted file mode 100644<br/>index e819b1b951..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif<br/>deleted file mode 100644<br/>index b753aead97..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif<br/>deleted file mode 100644<br/>index 74dbb799a2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif<br/>deleted file mode 100644<br/>index 8f3d9114a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif<br/>deleted file mode 100644<br/>index 6f360ffd62..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif<br/>deleted file mode 100644<br/>index f7c21fb0c3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif<br/>deleted file mode 100644<br/>index a006630388..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif<br/>deleted file mode 100644<br/>index 0281de37d8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif<br/>deleted file mode 100644<br/>index 58ec60c1db..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif<br/>deleted file mode 100644<br/>index 6cfaa416d1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif<br/>deleted file mode 100644<br/>index d9bfc0a7be..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif<br/>deleted file mode 100644<br/>index 930d7fd9ff..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif<br/>deleted file mode 100644<br/>index 060be5dd41..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif<br/>deleted file mode 100644<br/>index c1c089de3e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif<br/>deleted file mode 100644<br/>index 1805c2dc7c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif<br/>deleted file mode 100644<br/>index bc37b31c3d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif b/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif<br/>deleted file mode 100644<br/>index d3745c7f62..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl<br/>deleted file mode 100644<br/>index 4facac70d8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-# Package index for tile demo pixmap themes.</div><div class='del'>-</div><div class='del'>-if {[file isdirectory [file join $dir blue]]} {</div><div class='del'>-    package ifneeded tile::theme::blue 0.7 \</div><div class='del'>-        [list source [file join $dir blue.tcl]]</div><div class='del'>-}</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl<br/>deleted file mode 100644<br/>index 79fcd7c04e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,194 +0,0 @@</div><div class='del'>-# keramik.tcl - </div><div class='del'>-#</div><div class='del'>-# A sample pixmap theme for the tile package.</div><div class='del'>-#</div><div class='del'>-#  Copyright (c) 2004 Googie</div><div class='del'>-#  Copyright (c) 2004 Pat Thoyts &lt;patthoyts@users.sourceforge.net&gt;</div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-package require Tk 8.4;                 # minimum version for Tile</div><div class='del'>-package require tile 0.5;               # depends upon tile 0.5</div><div class='del'>-</div><div class='del'>-namespace eval tile {</div><div class='del'>-    namespace eval theme {</div><div class='del'>-        namespace eval keramik {</div><div class='del'>-            variable version 0.3.2</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval tile::theme::keramik {</div><div class='del'>-</div><div class='del'>-    variable imgdir [file join [file dirname [info script]] keramik]</div><div class='del'>-    variable I</div><div class='del'>-    array set I [tile::LoadImages $imgdir *.gif]</div><div class='del'>-</div><div class='del'>-    variable colors</div><div class='del'>-    array set colors {</div><div class='del'>-        -frame      "#cccccc"</div><div class='del'>-        -lighter    "#cccccc"</div><div class='del'>-        -window     "#ffffff"</div><div class='del'>-        -selectbg   "#eeeeee"</div><div class='del'>-        -selectfg   "#000000"</div><div class='del'>-        -disabledfg "#aaaaaa"</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    style theme create keramik -parent alt -settings {</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        # -----------------------------------------------------------------</div><div class='del'>-        # Theme defaults</div><div class='del'>-        #</div><div class='del'>-        style default . \</div><div class='del'>-            -borderwidth 1 \</div><div class='del'>-            -background $colors(-frame) \</div><div class='del'>-            -troughcolor $colors(-lighter) \</div><div class='del'>-            -font TkDefaultFont \</div><div class='del'>-            ;</div><div class='del'>-</div><div class='del'>-        style map . -foreground [list disabled $colors(-disabledfg)]</div><div class='del'>-                </div><div class='del'>-        # -----------------------------------------------------------------</div><div class='del'>-        # Button elements</div><div class='del'>-        #  - the button has a large rounded border and needs a bit of</div><div class='del'>-        #    horizontal padding.</div><div class='del'>-        #  - the checkbutton and radiobutton have the focus drawn around </div><div class='del'>-        #    the whole widget - hence the new layouts.</div><div class='del'>-        #</div><div class='del'>-        style layout TButton {</div><div class='del'>-            Button.background</div><div class='del'>-            Button.button -children {</div><div class='del'>-                Button.focus -children {</div><div class='del'>-                    Button.label</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        style layout Toolbutton {</div><div class='del'>-            Toolbutton.background</div><div class='del'>-            Toolbutton.button -children {</div><div class='del'>-                Toolbutton.focus -children {</div><div class='del'>-                    Toolbutton.label</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        style element create button image $I(button-n) \</div><div class='del'>-            -border {8 6 8 16} -padding {6 6} -sticky news \</div><div class='del'>-            -map [list {pressed !disabled} $I(button-p) \</div><div class='del'>-                      {active !selected}  $I(button-h) \</div><div class='del'>-                      selected $I(button-s) \</div><div class='del'>-                      disabled $I(button-d)]</div><div class='del'>-        style default TButton -padding {10 6}</div><div class='del'>-</div><div class='del'>-        style element create Toolbutton.button image $I(tbar-n) \</div><div class='del'>-            -border {2 8 2 16} -padding {2 2} -sticky news \</div><div class='del'>-            -map [list {pressed !disabled} $I(tbar-p) \</div><div class='del'>-                      {active !selected}   $I(tbar-a) \</div><div class='del'>-                      selected             $I(tbar-p)]</div><div class='del'>-</div><div class='del'>-        style element create Checkbutton.indicator image $I(check-u) \</div><div class='del'>-            -width 20 -sticky w \</div><div class='del'>-            -map [list selected $I(check-c)]</div><div class='del'>-</div><div class='del'>-        style element create Radiobutton.indicator image $I(radio-u) \</div><div class='del'>-            -width 20 -sticky w \</div><div class='del'>-            -map [list  selected $I(radio-c)]</div><div class='del'>-</div><div class='del'>-        # The layout for the menubutton is modified to have a button element</div><div class='del'>-        # drawn on top of the background. This means we can have transparent</div><div class='del'>-        # pixels in the button element. Also, the pixmap has a special</div><div class='del'>-        # region on the right for the arrow. So we draw the indicator as a</div><div class='del'>-        # sibling element to the button, and draw it after (ie on top of) the</div><div class='del'>-        # button image.</div><div class='del'>-        style layout TMenubutton {</div><div class='del'>-            Menubutton.background</div><div class='del'>-            Menubutton.button -children {</div><div class='del'>-                Menubutton.focus -children {</div><div class='del'>-                    Menubutton.padding -children {</div><div class='del'>-                        Menubutton.label -side left -expand true</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            Menubutton.indicator -side right</div><div class='del'>-        }</div><div class='del'>-        style element create Menubutton.button image $I(mbut-n) \</div><div class='del'>-            -map [list {active !disabled} $I(mbut-a) \</div><div class='del'>-                      {pressed !disabled} $I(mbut-a) \</div><div class='del'>-                      {disabled}          $I(mbut-d)] \</div><div class='del'>-            -border {7 10 29 15} -padding {7 4 29 4} -sticky news</div><div class='del'>-        style element create Menubutton.indicator image $I(mbut-arrow-n) \</div><div class='del'>-            -width 11 -sticky w -padding {0 0 18 0}</div><div class='del'>-</div><div class='del'>-        # -----------------------------------------------------------------</div><div class='del'>-        # Scrollbars, scale and progress elements</div><div class='del'>-        #  - the scrollbar has three arrow buttons, two at the bottom and</div><div class='del'>-        #    one at the top.</div><div class='del'>-        #</div><div class='del'>-        style layout Vertical.TScrollbar {</div><div class='del'>-            Scrollbar.background </div><div class='del'>-            Scrollbar.trough -children {</div><div class='del'>-                Scrollbar.uparrow -side top</div><div class='del'>-                Scrollbar.downarrow -side bottom</div><div class='del'>-                Scrollbar.uparrow -side bottom</div><div class='del'>-                Vertical.Scrollbar.thumb -side top -expand true -sticky ns</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        </div><div class='del'>-        style layout Horizontal.TScrollbar {</div><div class='del'>-            Scrollbar.background </div><div class='del'>-            Scrollbar.trough -children {</div><div class='del'>-                Scrollbar.leftarrow -side left</div><div class='del'>-                Scrollbar.rightarrow -side right</div><div class='del'>-                Scrollbar.leftarrow -side right</div><div class='del'>-                Horizontal.Scrollbar.thumb -side left -expand true -sticky we</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        style default TScrollbar -width 16</div><div class='del'>-</div><div class='del'>-        style element create Horizontal.Scrollbar.thumb image $I(hsb-n) \</div><div class='del'>-            -border {6 4} -width 15 -height 16 -sticky news \</div><div class='del'>-            -map [list {pressed !disabled} $I(hsb-p)]</div><div class='del'>-        </div><div class='del'>-        style element create Vertical.Scrollbar.thumb image $I(vsb-n) \</div><div class='del'>-            -border {4 6} -width 16 -height 15 -sticky news \</div><div class='del'>-            -map [list {pressed !disabled} $I(vsb-p)]</div><div class='del'>-        </div><div class='del'>-        style element create Scale.slider image $I(hslider-n) \</div><div class='del'>-            -border 3</div><div class='del'>-        </div><div class='del'>-        style element create Vertical.Scale.slider image $I(vslider-n) \</div><div class='del'>-            -border 3</div><div class='del'>-        </div><div class='del'>-        style element create Horizontal.Progress.bar image $I(hsb-n) \</div><div class='del'>-            -border {6 4}</div><div class='del'>-        </div><div class='del'>-        style element create Vertical.Progress.bar image $I(vsb-n) \</div><div class='del'>-            -border {4 6}</div><div class='del'>-        </div><div class='del'>-        style element create uparrow image $I(arrowup-n) \</div><div class='del'>-            -map [list {pressed !disabled} $I(arrowup-p)]</div><div class='del'>-                  </div><div class='del'>-        style element create downarrow image $I(arrowdown-n) \</div><div class='del'>-            -map [list {pressed !disabled} $I(arrowdown-p)]</div><div class='del'>-</div><div class='del'>-        style element create rightarrow image $I(arrowright-n) \</div><div class='del'>-            -map [list {pressed !disabled} $I(arrowright-p)]</div><div class='del'>-</div><div class='del'>-        style element create leftarrow image $I(arrowleft-n) \</div><div class='del'>-            -map [list {pressed !disabled} $I(arrowleft-p)]</div><div class='del'>-        </div><div class='del'>-        # -----------------------------------------------------------------</div><div class='del'>-        # Notebook elements</div><div class='del'>-        #</div><div class='del'>-        style element create tab image $I(tab-n) \</div><div class='del'>-            -map [list selected $I(tab-p) active $I(tab-p)] \</div><div class='del'>-            -border {6 6 6 2} -height 12</div><div class='del'>-</div><div class='del'>-	## Labelframes.</div><div class='del'>-	#</div><div class='del'>-	style default TLabelframe -borderwidth 2 -relief groove</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-package provide tile::theme::keramik $::tile::theme::keramik::version</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif<br/>deleted file mode 100644<br/>index 2d84f29c60..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif<br/>deleted file mode 100644<br/>index 52ee752641..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif<br/>deleted file mode 100644<br/>index ff309c56f2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif<br/>deleted file mode 100644<br/>index 2159f274a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif<br/>deleted file mode 100644<br/>index 905fa7ed1d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif<br/>deleted file mode 100644<br/>index 0323332f30..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif<br/>deleted file mode 100644<br/>index 20dcadb30e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif<br/>deleted file mode 100644<br/>index 129169e4c4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif<br/>deleted file mode 100644<br/>index fe9bf98f81..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif<br/>deleted file mode 100644<br/>index 210734d1ae..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif<br/>deleted file mode 100644<br/>index 5e1eafa854..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif<br/>deleted file mode 100644<br/>index bfd74889f8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif<br/>deleted file mode 100644<br/>index 1095ed7583..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif<br/>deleted file mode 100644<br/>index 06e8795df8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif<br/>deleted file mode 100644<br/>index 3c02fcbe81..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif<br/>deleted file mode 100644<br/>index 1d93973c75..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif<br/>deleted file mode 100644<br/>index 18fbae08ab..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif<br/>deleted file mode 100644<br/>index 334e8e4a40..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif<br/>deleted file mode 100644<br/>index 2e2f1c2f10..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif<br/>deleted file mode 100644<br/>index 48197cbfc9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif<br/>deleted file mode 100644<br/>index 4a294b4984..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif<br/>deleted file mode 100644<br/>index 65c0e4efa2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif<br/>deleted file mode 100644<br/>index c8257c9336..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif<br/>deleted file mode 100644<br/>index 215a73821c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif<br/>deleted file mode 100644<br/>index 03099a95be..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif<br/>deleted file mode 100644<br/>index abec6aba40..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif<br/>deleted file mode 100644<br/>index 2c223ba2c5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif<br/>deleted file mode 100644<br/>index 77ef8a26cf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif<br/>deleted file mode 100644<br/>index 3179b87ad9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif<br/>deleted file mode 100644<br/>index be01e4a72a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif<br/>deleted file mode 100644<br/>index 0bb39e91ff..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif b/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif<br/>deleted file mode 100644<br/>index cf03d7f325..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl<br/>deleted file mode 100644<br/>index 4bb89aa8a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,15 +0,0 @@</div><div class='del'>-# pkgIndex.tcl for additional tile pixmap themes.</div><div class='del'>-#</div><div class='del'>-# We don't provide the package is the image subdirectory isn't present,</div><div class='del'>-# or we don't have the right version of Tcl/Tk</div><div class='del'>-#</div><div class='del'>-# To use this automatically within tile, the tile-using application should</div><div class='del'>-# use tile::availableThemes and tile::setTheme </div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-if {![file isdirectory [file join $dir keramik]]} { return }</div><div class='del'>-if {![package vsatisfies [package provide Tcl] 8.4]} { return }</div><div class='del'>-</div><div class='del'>-package ifneeded tile::theme::keramik 0.3.2 \</div><div class='del'>-    [list source [file join $dir keramik.tcl]]</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc.rb b/ext/tk/sample/tkextlib/tile/themes/kroc.rb<br/>deleted file mode 100644<br/>index 27006d847f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,226 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# kroc.rb </div><div class='del'>-#</div><div class='del'>-# based on:</div><div class='del'>-#   &gt;&gt; kroc.tcl - Copyright (C) 2004 David Zolli &lt;kroc@kroc.tk&gt;</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-imgdir = File.join(File.dirname(__FILE__), 'kroc', 'kroc')</div><div class='del'>-$images = Tk::Tile.load_images(imgdir, '*.gif')</div><div class='del'>-</div><div class='del'>-if TkPackage.vcompare(Tk::Tile.package_version, '0.5') &gt;= 0</div><div class='del'>-  $TNotebook_Tab = Tk::Tile::TNotebook.style('Tab')</div><div class='del'>-else</div><div class='del'>-  $TNotebook_Tab = 'Tab.TNotebook'</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def kroc_rb_settings</div><div class='del'>-  # Tk::Tile::Style.default(TkRoot, :background=&gt;'#FCB64F', </div><div class='del'>-  #                         :troughcolor=&gt;'#F8C278', :borderwidth=&gt;1)</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.default(Tk.root, :background=&gt;'#FCB64F', </div><div class='del'>-  #                         :troughcolor=&gt;'#F8C278', :borderwidth=&gt;1)</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.default('.', :background=&gt;'#FCB64F', </div><div class='del'>-  #                         :troughcolor=&gt;'#F8C278', :borderwidth=&gt;1)</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.default(nil, :background=&gt;'#FCB64F', </div><div class='del'>-  #                         :troughcolor=&gt;'#F8C278', :borderwidth=&gt;1)</div><div class='del'>-  #   or</div><div class='del'>-  Tk::Tile::Style.default(:background=&gt;'#FCB64F', :troughcolor=&gt;'#F8C278', </div><div class='del'>-                          :borderwidth=&gt;1)</div><div class='del'>-  # Tk::Tile::Style.default(TkRoot, :font=&gt;Tk::Tile::Font::Default, </div><div class='del'>-  #                         :borderwidth=&gt;1)</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.default(Tk.root, :font=&gt;Tk::Tile::Font::Default, </div><div class='del'>-  #                         :borderwidth=&gt;1)</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.default('.', :font=&gt;Tk::Tile::Font::Default, </div><div class='del'>-  #                         :borderwidth=&gt;1)</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.default(nil, :font=&gt;Tk::Tile::Font::Default, </div><div class='del'>-  #                         :borderwidth=&gt;1)</div><div class='del'>-  #   or</div><div class='del'>-  Tk::Tile::Style.default(:font=&gt;Tk::Tile::Font::Default, :borderwidth=&gt;1)</div><div class='del'>-</div><div class='del'>-  # Tk::Tile::Style.map(TkRoot, :background=&gt;[:active, '#694418'])</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.map(Tk.root, :background=&gt;[:active, '#694418'])</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.map('.', :background=&gt;[:active, '#694418'])</div><div class='del'>-  #   or</div><div class='del'>-  # Tk::Tile::Style.map(nil, :background=&gt;[:active, '#694418'])</div><div class='del'>-  #   or</div><div class='del'>-  Tk::Tile::Style.map(:background=&gt;[:active, '#694418'])</div><div class='del'>-  Tk::Tile::Style.map(:foreground=&gt;[:disabled, '#B2B2B2', :active, '#FFE7CB'])</div><div class='del'>-</div><div class='del'>-  # Tk::Tile::Style.default('TButton', :padding=&gt;[10,4])</div><div class='del'>-  Tk::Tile::Style.default(Tk::Tile::TButton, :padding=&gt;[10,4])</div><div class='del'>-</div><div class='del'>-  # Tk::Tile::Style.default('TNotebook.Tab', </div><div class='del'>-  Tk::Tile::Style.default($TNotebook_Tab, </div><div class='del'>-                          :padding=&gt;[10, 3], :font=&gt;Tk::Tile::Font::Default)</div><div class='del'>-  # Tk::Tile::Style.map('TNotebook.Tab', </div><div class='del'>-  Tk::Tile::Style.map($TNotebook_Tab, </div><div class='del'>-                      :background=&gt;[:selected, '#FCB64F', '', '#FFE6BA'], </div><div class='del'>-                      :foreground=&gt;['', 'black'], </div><div class='del'>-                      :padding=&gt;[:selected, [10, 6, 10, 3]])</div><div class='del'>-</div><div class='del'>-  # Tk::Tile::Style.map('TScrollbar', </div><div class='del'>-  Tk::Tile::Style.map(Tk::Tile::TScrollbar, </div><div class='del'>-                      :background=&gt;[:pressed, '#694418'], </div><div class='del'>-                      :arrowcolor=&gt;[:pressed, '#FEF7CB'], </div><div class='del'>-                      :relief=&gt;[:pressed, :sunken])</div><div class='del'>-</div><div class='del'>-  # Tk::Tile::Style.layout('Vertical.TScrollbar', </div><div class='del'>-  Tk::Tile::Style.layout(Tk::Tile.style('Vertical', Tk::Tile::TScrollbar), </div><div class='del'>-                         ['Scrollbar.trough', {:children=&gt;[</div><div class='del'>-                             'Scrollbar.uparrow',   {:side=&gt;:top}, </div><div class='del'>-                             'Scrollbar.downarrow', {:side=&gt;:bottom}, </div><div class='del'>-                             'Scrollbar.uparrow',   {:side=&gt;:bottom}, </div><div class='del'>-                             'Scrollbar.thumb',  {:side=&gt;:top, :expand=&gt;true}</div><div class='del'>-                           ]}</div><div class='del'>-                         ])</div><div class='del'>-</div><div class='del'>-  # Tk::Tile::Style.layout('Horizontal.TScrollbar', </div><div class='del'>-  Tk::Tile::Style.layout(Tk::Tile.style('Horizontal', Tk::Tile::TScrollbar), </div><div class='del'>-                         ['Scrollbar.trough', {:children=&gt;[</div><div class='del'>-                             'Scrollbar.leftarrow',   {:side=&gt;:left}, </div><div class='del'>-                             'Scrollbar.rightarrow', {:side=&gt;:right}, </div><div class='del'>-                             'Scrollbar.leftarrow',   {:side=&gt;:right}, </div><div class='del'>-                             'Scrollbar.thumb',  {:side=&gt;:left, :expand=&gt;true}</div><div class='del'>-                           ]}</div><div class='del'>-                         ])</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Elements:</div><div class='del'>-  #</div><div class='del'>-  if Tk::Tile::TILE_SPEC_VERSION_ID &gt;= 8</div><div class='del'>-    Tk::Tile::Style.element_create('Button.button', </div><div class='del'>-                                   :image, </div><div class='del'>-                                   [ $images['button-n'],</div><div class='del'>-                                     :pressed, $images['button-p'], </div><div class='del'>-                                     :active,  $images['button-h'], </div><div class='del'>-                                   ], :border=&gt;3, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-    Tk::Tile::Style.element_create('Checkbutton.indicator', </div><div class='del'>-                                   :image, </div><div class='del'>-                                   [ $images['check-nu'],</div><div class='del'>-                                     [:pressed, :selected],$images['check-nc'],</div><div class='del'>-                                     :pressed,             $images['check-nu'],</div><div class='del'>-                                     [:active, :selected], $images['check-hc'],</div><div class='del'>-                                     :active,              $images['check-hu'],</div><div class='del'>-                                     :selected,            $images['check-nc'],</div><div class='del'>-                                   ], :sticky=&gt;:w)</div><div class='del'>-</div><div class='del'>-    Tk::Tile::Style.element_create('Radiobutton.indicator', </div><div class='del'>-                                   :image, </div><div class='del'>-                                   [ $images['radio-nu'],</div><div class='del'>-                                     [:pressed,:selected],$images['radio-nc'],</div><div class='del'>-                                     :pressed,            $images['radio-nu'],</div><div class='del'>-                                     [:active,:selected], $images['radio-hc'],</div><div class='del'>-                                     :active,             $images['radio-hu'],</div><div class='del'>-                                     :selected,           $images['radio-nc'],</div><div class='del'>-                                   ], :sticky=&gt;:w)</div><div class='del'>-</div><div class='del'>-  elsif TkPackage.vcompare(Tk::Tile.package_version, '0.5') &gt;= 0</div><div class='del'>-    Tk::Tile::Style.element_create('Button.button', </div><div class='del'>-                                   :image, $images['button-n'],</div><div class='del'>-                                   :map=&gt;[</div><div class='del'>-                                     :pressed, $images['button-p'], </div><div class='del'>-                                     :active,  $images['button-h'], </div><div class='del'>-                                   ], :border=&gt;3, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-    Tk::Tile::Style.element_create('Checkbutton.indicator', </div><div class='del'>-                                   :image, $images['check-nu'],</div><div class='del'>-                                   :map=&gt;[</div><div class='del'>-                                     [:pressed, :selected],$images['check-nc'],</div><div class='del'>-                                     :pressed,             $images['check-nu'],</div><div class='del'>-                                     [:active, :selected], $images['check-hc'],</div><div class='del'>-                                     :active,              $images['check-hu'],</div><div class='del'>-                                     :selected,            $images['check-nc'],</div><div class='del'>-                                   ], :sticky=&gt;:w)</div><div class='del'>-</div><div class='del'>-    Tk::Tile::Style.element_create('Radiobutton.indicator', </div><div class='del'>-                                   :image, $images['radio-nu'],</div><div class='del'>-                                   :map=&gt;[</div><div class='del'>-                                     [:pressed, :selected],$images['radio-nc'],</div><div class='del'>-                                     :pressed,             $images['radio-nu'],</div><div class='del'>-                                     [:active, :selected], $images['radio-hc'],</div><div class='del'>-                                     :active,              $images['radio-hu'],</div><div class='del'>-                                     :selected,            $images['radio-nc'],</div><div class='del'>-                                   ], :sticky=&gt;:w)</div><div class='del'>-</div><div class='del'>-  else # tile 0.4 or earlier</div><div class='del'>-    Tk::Tile::Style.element_create('Button.button', :pixmap, </div><div class='del'>-                                   :images=&gt;[</div><div class='del'>-                                     :pressed, $images['button-p'], </div><div class='del'>-                                     :active,  $images['button-h'], </div><div class='del'>-                                     '',       $images['button-n']</div><div class='del'>-                                   ], :border=&gt;3, :tiling=&gt;:tile)</div><div class='del'>-</div><div class='del'>-    Tk::Tile::Style.element_create('Checkbutton.indicator', :pixmap, </div><div class='del'>-                                   :images=&gt;[</div><div class='del'>-                                     [:pressed, :selected],$images['check-nc'],</div><div class='del'>-                                     :pressed,             $images['check-nu'],</div><div class='del'>-                                     [:active, :selected], $images['check-hc'],</div><div class='del'>-                                     :active,              $images['check-hu'],</div><div class='del'>-                                     :selected,            $images['check-nc'],</div><div class='del'>-                                     '',                   $images['check-nu'],</div><div class='del'>-                                   ], :tiling=&gt;:fixed)</div><div class='del'>-</div><div class='del'>-    Tk::Tile::Style.element_create('Radiobutton.indicator', :pixmap, </div><div class='del'>-                                   :images=&gt;[</div><div class='del'>-                                     [:pressed, :selected],$images['radio-nc'],</div><div class='del'>-                                     :pressed,             $images['radio-nu'],</div><div class='del'>-                                     [:active, :selected], $images['radio-hc'],</div><div class='del'>-                                     :active,              $images['radio-hu'],</div><div class='del'>-                                     :selected,            $images['radio-nc'],</div><div class='del'>-                                     '',                   $images['radio-nu'],</div><div class='del'>-                                   ], :tiling=&gt;:fixed)</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Settings:</div><div class='del'>-  #</div><div class='del'>-  # Tk::Tile::Style.layout(Tk::Tile::TButton, </div><div class='del'>-  Tk::Tile::Style.layout('TButton', [</div><div class='del'>-      'Button.button', {:children=&gt;[</div><div class='del'>-           'Button.focus', {:children=&gt;[</div><div class='del'>-                'Button.padding', {:children=&gt;[</div><div class='del'>-                    'Button.label', {:expand=&gt;true, :sticky=&gt;''}</div><div class='del'>-                ]}</div><div class='del'>-           ]}</div><div class='del'>-      ]}</div><div class='del'>-  ])</div><div class='del'>-</div><div class='del'>-  # Tk::Tile::Style.layout(Tk::Tile::TCheckbutton, </div><div class='del'>-  Tk::Tile::Style.layout('TCheckbutton', [</div><div class='del'>-      'Checkbutton.background', # this is not needed in tile 0.5 or later</div><div class='del'>-      'Checkbutton.border', {:children=&gt;[</div><div class='del'>-           'Checkbutton.padding', {:children=&gt;[</div><div class='del'>-                'Checkbutton.indicator', {:side=&gt;:left}, </div><div class='del'>-                'Checkbutton.focus', {:side=&gt;:left, :children=&gt;[</div><div class='del'>-                    'Checkbutton.label'</div><div class='del'>-                ]}</div><div class='del'>-           ]}</div><div class='del'>-      ]}</div><div class='del'>-  ])</div><div class='del'>-</div><div class='del'>-  # Tk::Tile::Style.layout(Tk::Tile::TRadiobutton, </div><div class='del'>-  Tk::Tile::Style.layout('TRadiobutton', [</div><div class='del'>-      'Radiobutton.background', # this is not needed in tile 0.5 or later</div><div class='del'>-      'Radiobutton.border', {:children=&gt;[</div><div class='del'>-           'Radiobutton.padding', {:children=&gt;[</div><div class='del'>-                'Radiobutton.indicator', {:side=&gt;:left}, </div><div class='del'>-                'Radiobutton.focus', {:expand=&gt;true, :sticky=&gt;:w, :children=&gt;[</div><div class='del'>-                    'Radiobutton.label', {:side=&gt;:right, :expand=&gt;true}</div><div class='del'>-                ]}</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'>-Tk::Tile::Style.theme_create('kroc-rb', :parent=&gt;'alt', </div><div class='del'>-                             :settings=&gt;proc{ kroc_rb_settings() })</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl<br/>deleted file mode 100644<br/>index 73548acef2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,163 +0,0 @@</div><div class='del'>-# kroc.tcl - Copyright (C) 2004 David Zolli &lt;kroc@kroc.tk&gt;</div><div class='del'>-#</div><div class='del'>-# A sample pixmap theme for the tile package.</div><div class='del'>-</div><div class='del'>-#package require tile::pixmap</div><div class='del'>-</div><div class='del'>-namespace eval tile {</div><div class='del'>-    namespace eval kroc {</div><div class='del'>-        variable version 0.0.1</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-namespace eval tile::kroc {</div><div class='del'>-    </div><div class='del'>-    set imgdir [file join [file dirname [info script]] kroc]</div><div class='del'>-    array set Images [tile::LoadImages $imgdir *.gif]</div><div class='del'>-    </div><div class='del'>-    if {[package vsatisfies [package provide tile] 0.5]} {</div><div class='del'>-        set TNoteBook_Tab TNotebook.Tab</div><div class='del'>-    } else {</div><div class='del'>-        set TNoteBook_Tab Tab.TNotebook</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    style theme create kroc -parent alt -settings {</div><div class='del'>-        </div><div class='del'>-        style default . -background #FCB64F -troughcolor #F8C278 -borderwidth 1</div><div class='del'>-	style default . -font TkDefaultFont -borderwidth 1</div><div class='del'>-        style map . -background [list active #694418]</div><div class='del'>-        style map . -foreground [list disabled #B2B2B2 active #FFE7CB]</div><div class='del'>-        </div><div class='del'>-        style default TButton -padding "10 4"</div><div class='del'>-        </div><div class='del'>-        style default $TNoteBook_Tab -padding {10 3} -font TkDefaultFont</div><div class='del'>-        style map $TNoteBook_Tab \</div><div class='del'>-                -background [list selected #FCB64F {} #FFE6BA] \</div><div class='del'>-                -foreground [list {} black] \</div><div class='del'>-                -padding [list selected {10 6 10 3}]</div><div class='del'>-</div><div class='del'>-        style map TScrollbar \</div><div class='del'>-		-background	{ pressed #694418} \</div><div class='del'>-                -arrowcolor	{ pressed #FFE7CB } \</div><div class='del'>-                -relief		{ pressed sunken } \</div><div class='del'>-                ;</div><div class='del'>-        </div><div class='del'>-        style layout Vertical.TScrollbar {</div><div class='del'>-            Scrollbar.trough -children {</div><div class='del'>-                Scrollbar.uparrow -side top</div><div class='del'>-                Scrollbar.downarrow -side bottom</div><div class='del'>-                Scrollbar.uparrow -side bottom</div><div class='del'>-                Scrollbar.thumb -side top -expand true</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        </div><div class='del'>-        style layout Horizontal.TScrollbar {</div><div class='del'>-            Scrollbar.trough -children {</div><div class='del'>-                Scrollbar.leftarrow -side left</div><div class='del'>-                Scrollbar.rightarrow -side right</div><div class='del'>-                Scrollbar.leftarrow -side right</div><div class='del'>-                Scrollbar.thumb -side left -expand true</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        </div><div class='del'>-        #</div><div class='del'>-        # Elements:</div><div class='del'>-        #</div><div class='del'>-        if {[package vsatisfies [package provide tile] 0.5]} {</div><div class='del'>-            </div><div class='del'>-            style element create Button.button image $Images(button-n) \</div><div class='del'>-                -map [list  \</div><div class='del'>-                    pressed		$Images(button-p) \</div><div class='del'>-                    active		$Images(button-h) \</div><div class='del'>-                    ] -border 3 -sticky ew</div><div class='del'>-            </div><div class='del'>-            style element create Checkbutton.indicator image $Images(check-nu) \</div><div class='del'>-                -map [list \</div><div class='del'>-                    {pressed selected}	$Images(check-nc) \</div><div class='del'>-                    pressed		$Images(check-nu) \</div><div class='del'>-                    {active selected}	$Images(check-hc) \</div><div class='del'>-                    active		$Images(check-hu) \</div><div class='del'>-                    selected		$Images(check-nc) \</div><div class='del'>-                    ] -sticky w</div><div class='del'>-            </div><div class='del'>-            style element create Radiobutton.indicator image $Images(radio-nu) \</div><div class='del'>-                -map [list \</div><div class='del'>-                    {pressed selected}	$Images(radio-nc) \</div><div class='del'>-                    pressed		$Images(radio-nu) \</div><div class='del'>-                    {active selected}	$Images(radio-hc) \</div><div class='del'>-                    active		$Images(radio-hu) \</div><div class='del'>-                    selected		$Images(radio-nc) \</div><div class='del'>-                    ] -sticky w</div><div class='del'>-            </div><div class='del'>-        } else {</div><div class='del'>-            </div><div class='del'>-            style element create Button.button pixmap -images [list  \</div><div class='del'>-                    pressed		$Images(button-p) \</div><div class='del'>-                    active		$Images(button-h) \</div><div class='del'>-                    {}			$Images(button-n) \</div><div class='del'>-                    ] -border 3 -tiling tile</div><div class='del'>-            </div><div class='del'>-            style element create Checkbutton.indicator pixmap -images [list \</div><div class='del'>-                    {pressed selected}	$Images(check-nc) \</div><div class='del'>-                    pressed		$Images(check-nu) \</div><div class='del'>-                    {active selected}	$Images(check-hc) \</div><div class='del'>-                    active		$Images(check-hu) \</div><div class='del'>-                    selected		$Images(check-nc) \</div><div class='del'>-                    {}			$Images(check-nu) \</div><div class='del'>-                    ] -tiling fixed</div><div class='del'>-            </div><div class='del'>-            style element create Radiobutton.indicator pixmap -images [list \</div><div class='del'>-                    {pressed selected}	$Images(radio-nc) \</div><div class='del'>-                    pressed		$Images(radio-nu) \</div><div class='del'>-                    {active selected}	$Images(radio-hc) \</div><div class='del'>-                    active		$Images(radio-hu) \</div><div class='del'>-                    selected		$Images(radio-nc) \</div><div class='del'>-                    {}			$Images(radio-nu) \</div><div class='del'>-                    ] -tiling fixed</div><div class='del'>-            </div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        #</div><div class='del'>-        # Settings: (*button.background is not needed in tile 0.5 or above)</div><div class='del'>-        #</div><div class='del'>-        style layout TButton {</div><div class='del'>-	    Button.button -children {</div><div class='del'>-		Button.focus -children {</div><div class='del'>-		    Button.padding -children {</div><div class='del'>-			Button.label -expand true -sticky {}</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        style layout TCheckbutton {</div><div class='del'>-	    Checkbutton.border -children {</div><div class='del'>-		Checkbutton.background</div><div class='del'>-		Checkbutton.padding -children {</div><div class='del'>-		    Checkbutton.indicator -side left</div><div class='del'>-		    Checkbutton.focus -side left -children {</div><div class='del'>-			Checkbutton.label</div><div class='del'>-		    }</div><div class='del'>-		}</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        </div><div class='del'>-        style layout TRadiobutton {</div><div class='del'>-            Radiobutton.border -children {</div><div class='del'>-                Radiobutton.background</div><div class='del'>-                Radiobutton.padding -children  {</div><div class='del'>-                    Radiobutton.indicator -side left</div><div class='del'>-                    Radiobutton.focus -expand true -sticky w -children {</div><div class='del'>-                        Radiobutton.label -side right -expand 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'>-# -------------------------------------------------------------------------</div><div class='del'>-</div><div class='del'>-package provide tile::theme::kroc $::tile::kroc::version</div><div class='del'>-</div><div class='del'>-# -------------------------------------------------------------------------</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif<br/>deleted file mode 100644<br/>index e7a140dede..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif<br/>deleted file mode 100644<br/>index 78b506ddeb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif<br/>deleted file mode 100644<br/>index a5a4e90be1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif<br/>deleted file mode 100644<br/>index 41503c5ebd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif<br/>deleted file mode 100644<br/>index b3e512ca67..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif<br/>deleted file mode 100644<br/>index a28c288fce..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif<br/>deleted file mode 100644<br/>index 5c23931bbc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif<br/>deleted file mode 100644<br/>index 359fe1cc8b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif<br/>deleted file mode 100644<br/>index 9f46b37926..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif<br/>deleted file mode 100644<br/>index 6437f33a7a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif b/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif<br/>deleted file mode 100644<br/>index 2d2aac8597..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl<br/>deleted file mode 100644<br/>index 179077917c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,15 +0,0 @@</div><div class='del'>-# pkgIndex.tcl for additional tile pixmap themes.</div><div class='del'>-#</div><div class='del'>-# We don't provide the package is the image subdirectory isn't present,</div><div class='del'>-# or we don't have the right version of Tcl/Tk</div><div class='del'>-#</div><div class='del'>-# To use this automatically within tile, the tile-using application should</div><div class='del'>-# use tile::availableThemes and tile::setTheme </div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-if {![file isdirectory [file join $dir kroc]]} { return }</div><div class='del'>-if {![package vsatisfies [package provide Tcl] 8.4]} { return }</div><div class='del'>-</div><div class='del'>-package ifneeded tile::theme::kroc 0.0.1 \</div><div class='del'>-    [list source [file join $dir kroc.tcl]]</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl b/ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl<br/>deleted file mode 100644<br/>index e39aff6f44..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-# pkgIndex.tcl for additional tile pixmap themes.</div><div class='del'>-#</div><div class='del'>-# We don't provide the package is the image subdirectory isn't present,</div><div class='del'>-# or we don't have the right version of Tcl/Tk</div><div class='del'>-#</div><div class='del'>-# To use this automatically within tile, the tile-using application should</div><div class='del'>-# use tile::availableThemes and tile::setTheme </div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-if {![file isdirectory [file join $dir plastik]]} { return }</div><div class='del'>-if {![package vsatisfies [package provide Tcl] 8.4]} { return }</div><div class='del'>-</div><div class='del'>-package ifneeded tile::theme::plastik 0.3.1 \</div><div class='del'>-    [list source [file join $dir plastik.tcl]]</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl<br/>deleted file mode 100644<br/>index ea6ed74162..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,125 +0,0 @@</div><div class='del'>-# plastik.tcl - Copyright (C) 2004 Googie</div><div class='del'>-#</div><div class='del'>-# A sample pixmap theme for the tile package.</div><div class='del'>-#</div><div class='del'>-#  Copyright (c) 2004 Googie</div><div class='del'>-#  Copyright (c) 2005 Pat Thoyts &lt;patthoyts@users.sourceforge.net&gt;</div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-package require Tk 8.4</div><div class='del'>-package require tile 0.5</div><div class='del'>-</div><div class='del'>-namespace eval tile::theme::plastik {</div><div class='del'>-</div><div class='del'>-    variable version 0.3.1</div><div class='del'>-    package provide tile::theme::plastik $version</div><div class='del'>-</div><div class='del'>-    variable imgdir [file join [file dirname [info script]] plastik]</div><div class='del'>-    variable Images;</div><div class='del'>-    array set Images [tile::LoadImages $imgdir *.gif]</div><div class='del'>-</div><div class='del'>-    variable colors</div><div class='del'>-    array set colors {</div><div class='del'>-    	-frame 		"#cccccc"</div><div class='del'>-	-disabledfg	"#aaaaaa"</div><div class='del'>-	-selectbg	"#657a9e"</div><div class='del'>-	-selectfg	"#ffffff"</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-style theme create plastik -parent default -settings {</div><div class='del'>-    style default . \</div><div class='del'>-    	-background $colors(-frame) \</div><div class='del'>-	-troughcolor $colors(-frame) \</div><div class='del'>-	-selectbackground $colors(-selectbg) \</div><div class='del'>-	-selectforeground $colors(-selectfg) \</div><div class='del'>-	-font TkDefaultFont \</div><div class='del'>-	-borderwidth 1 \</div><div class='del'>-	;</div><div class='del'>-</div><div class='del'>-    style map . -foreground [list disabled $colors(-disabledfg)]</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Layouts:</div><div class='del'>-    #</div><div class='del'>-    style layout Vertical.TScrollbar {</div><div class='del'>-        Scrollbar.background</div><div class='del'>-        Scrollbar.trough -children {</div><div class='del'>-            Scrollbar.uparrow -side top</div><div class='del'>-            Scrollbar.downarrow -side bottom</div><div class='del'>-            Scrollbar.uparrow -side bottom</div><div class='del'>-            Vertical.Scrollbar.thumb -side top -expand true -sticky ns</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    style layout Horizontal.TScrollbar {</div><div class='del'>-        Scrollbar.background</div><div class='del'>-        Scrollbar.trough -children {</div><div class='del'>-            Scrollbar.leftarrow -side left</div><div class='del'>-            Scrollbar.rightarrow -side right</div><div class='del'>-            Scrollbar.leftarrow -side right</div><div class='del'>-            Horizontal.Scrollbar.thumb -side left -expand true -sticky we</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    style layout TButton {</div><div class='del'>-        Button.button -children {</div><div class='del'>-	    Button.focus -children {</div><div class='del'>-		Button.padding -children {</div><div class='del'>-		    Button.label -side left -expand 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'>-    # Elements:</div><div class='del'>-    #</div><div class='del'>-    style element create Button.button image $Images(button-n) \</div><div class='del'>-    	-border 4 -sticky ew \</div><div class='del'>-    	-map [list pressed $Images(button-p)  active $Images(button-h)]</div><div class='del'>-</div><div class='del'>-    style element create Checkbutton.indicator image $Images(check-nu) \</div><div class='del'>-	-sticky {} -map [list \</div><div class='del'>-	    {active selected}     $Images(check-hc) \</div><div class='del'>-	    {pressed selected}    $Images(check-pc) \</div><div class='del'>-	    active                $Images(check-hu) \</div><div class='del'>-	    selected              $Images(check-nc) \</div><div class='del'>-	]</div><div class='del'>-</div><div class='del'>-    style element create Radiobutton.indicator image $Images(radio-nu) \</div><div class='del'>-	-sticky {} -map [list \</div><div class='del'>-	    {active selected}     $Images(radio-hc) \</div><div class='del'>-	    {pressed selected}    $Images(radio-pc) \</div><div class='del'>-	    active                $Images(radio-hu) \</div><div class='del'>-	    selected              $Images(radio-nc) \</div><div class='del'>-	]</div><div class='del'>-</div><div class='del'>-    style element create Horizontal.Scrollbar.thumb \</div><div class='del'>-    	image $Images(hsb-n) -border 3 -sticky ew</div><div class='del'>-    style element create Vertical.Scrollbar.thumb \</div><div class='del'>-    	image $Images(vsb-n) -border 3 -sticky ns</div><div class='del'>-</div><div class='del'>-    style element create Scale.slider \</div><div class='del'>-    	image $Images(hslider-n) -sticky {}</div><div class='del'>-    style element create Vertical.Scale.slider \</div><div class='del'>-    	image $Images(vslider-n) -sticky {}</div><div class='del'>-</div><div class='del'>-    style element create Scrollbar.uparrow image $Images(arrowup-n) \</div><div class='del'>-    	-map [list pressed $Images(arrowup-p)] -sticky {}</div><div class='del'>-    style element create Scrollbar.downarrow image $Images(arrowdown-n) \</div><div class='del'>-    	-map [list pressed $Images(arrowdown-p)] -sticky {}</div><div class='del'>-    style element create Scrollbar.leftarrow image $Images(arrowleft-n) \</div><div class='del'>-    	-map [list pressed $Images(arrowleft-p)] -sticky {}</div><div class='del'>-    style element create Scrollbar.rightarrow image $Images(arrowright-n) \</div><div class='del'>-    	-map [list pressed $Images(arrowright-p)] -sticky {}</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Settings:</div><div class='del'>-    #</div><div class='del'>-    style default TButton -width -10</div><div class='del'>-    style default TNotebook.Tab -padding {6 2 6 2}</div><div class='del'>-    style default TLabelframe -borderwidth 2 -relief groove</div><div class='del'>-</div><div class='del'>-} }</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif<br/>deleted file mode 100644<br/>index d914e7a3d3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif<br/>deleted file mode 100644<br/>index abffaa49f6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif<br/>deleted file mode 100644<br/>index 9939ae1d50..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif<br/>deleted file mode 100644<br/>index 1a45ef2e4b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif<br/>deleted file mode 100644<br/>index f4b563fed2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif<br/>deleted file mode 100644<br/>index 5459d5e615..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif<br/>deleted file mode 100644<br/>index 118290cd95..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif<br/>deleted file mode 100644<br/>index 89f9b38c73..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif<br/>deleted file mode 100644<br/>index 548f3769df..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif<br/>deleted file mode 100644<br/>index 49a25909f3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif<br/>deleted file mode 100644<br/>index e83f7ed985..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif<br/>deleted file mode 100644<br/>index b279fa50d8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif<br/>deleted file mode 100644<br/>index 5b4fb4f037..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif<br/>deleted file mode 100644<br/>index b139e02a09..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif<br/>deleted file mode 100644<br/>index fbe391f9d8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif<br/>deleted file mode 100644<br/>index 75a3bd635c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif<br/>deleted file mode 100644<br/>index b8ea07ea92..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif<br/>deleted file mode 100644<br/>index ce8f28404f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif<br/>deleted file mode 100644<br/>index 33917715b0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif<br/>deleted file mode 100644<br/>index 88925d0e1d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif<br/>deleted file mode 100644<br/>index f8723d367a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif<br/>deleted file mode 100644<br/>index fb5140e6a1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif<br/>deleted file mode 100644<br/>index 176225d9e1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif<br/>deleted file mode 100644<br/>index 85bac4579e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif b/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif<br/>deleted file mode 100644<br/>index cf887f9855..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tile/toolbutton.tcl b/ext/tk/sample/tkextlib/tile/toolbutton.tcl<br/>deleted file mode 100644<br/>index 4e08034e31..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tile/toolbutton.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tile/toolbutton.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,152 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-#</div><div class='del'>-# Demonstration of custom widget styles.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# ~ BACKGROUND</div><div class='del'>-#</div><div class='del'>-# Checkbuttons in toolbars have a very different appearance </div><div class='del'>-# than regular checkbuttons: there's no indicator, they</div><div class='del'>-# "pop up" when the mouse is over them, and they appear sunken</div><div class='del'>-# when selected.</div><div class='del'>-# </div><div class='del'>-# Tk added partial support for toolbar-style buttons in 8.4 </div><div class='del'>-# with the "-overrelief" option, and TIP #82 added further</div><div class='del'>-# support with the "-offrelief" option.  So to get a toolbar-style </div><div class='del'>-# checkbutton, you can configure it with:</div><div class='del'>-#</div><div class='del'>-# checkbutton .cb \</div><div class='del'>-#     -indicatoron false -selectcolor {} -relief flat -overrelief raised</div><div class='del'>-#</div><div class='del'>-# Behind the scenes, Tk has a lot of rather complicated logic</div><div class='del'>-# to implement this checkbutton style; see library/button.tcl,</div><div class='del'>-# generic/tkButton.c, and the platform-specific files unix/tkUnixButton.c</div><div class='del'>-# et al. for the full details.</div><div class='del'>-#</div><div class='del'>-# The tile widget set has a better way: custom styles.</div><div class='del'>-# Since the appearance is completely controlled by the theme engine,</div><div class='del'>-# we can define a new "Toolbutton" style and just use:</div><div class='del'>-#</div><div class='del'>-# checkbutton .cb -style Toolbutton</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# ~ DEMONSTRATION</div><div class='del'>-#</div><div class='del'>-# The tile built-in themes (default, "alt", windows, and XP) </div><div class='del'>-# already include Toolbutton styles.  This script will add</div><div class='del'>-# them to the "step" and "blue" themes as a demonstration.</div><div class='del'>-#</div><div class='del'>-# (Note: Pushbuttons and radiobuttons can also use the "Toolbutton" </div><div class='del'>-# style; see demo.tcl.)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-style theme settings "step" {</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# First, we use [style layout] to define what elements to</div><div class='del'>-# use and how they're arranged.  Toolbuttons are pretty</div><div class='del'>-# simple, consisting of a border, some internal padding,</div><div class='del'>-# and a label.  (See also the TScrollbar layout definition </div><div class='del'>-# in demos/blue.tcl for a more complicated layout spec.)</div><div class='del'>-#</div><div class='del'>-    style layout Toolbutton {</div><div class='del'>-        Toolbutton.background</div><div class='del'>-        Toolbutton.border -children {</div><div class='del'>-            Toolbutton.padding -children {</div><div class='del'>-                Toolbutton.label</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-# (Actually the above isn't strictly necessary, since the same layout </div><div class='del'>-# is defined in the default theme; we could have inherited it </div><div class='del'>-# instead.)</div><div class='del'>-#</div><div class='del'>-# Next, specify default values for element options.</div><div class='del'>-# For many options (like -background), the defaults</div><div class='del'>-# inherited from the parent style are sufficient.</div><div class='del'>-#</div><div class='del'>-    style default Toolbutton -width 0 -padding 1 -relief flat -borderwidth 2</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Finally, use [style map] to specify state-specific </div><div class='del'>-# resource values.  We want a flat relief if the widget is</div><div class='del'>-# disabled, sunken if it's selected (on) or pressed, </div><div class='del'>-# and raised when it's active (the mouse pointer is</div><div class='del'>-# over the widget).  Each state-value pair is checked</div><div class='del'>-# in order, and the first matching state takes precedence.</div><div class='del'>-#</div><div class='del'>-    style map Toolbutton -relief {</div><div class='del'>-	disabled 	flat</div><div class='del'>-    	selected	sunken  </div><div class='del'>-	pressed 	sunken  </div><div class='del'>-	active		raised</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Now for the "blue" theme.  (Since the purpose of this</div><div class='del'>-# theme is to show what *can* be done, not necessarily what</div><div class='del'>-# *should* be done, the following makes some questionable</div><div class='del'>-# design decisions from an aesthetic standpoint.)</div><div class='del'>-#</div><div class='del'>-if {![catch {package require tile::theme::blue}]} {</div><div class='del'>-style theme settings "blue" {</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Default values:</div><div class='del'>-    #</div><div class='del'>-    style default Toolbutton \</div><div class='del'>-    	-width 0 -relief flat -borderwidth 2 \</div><div class='del'>-	-background #6699CC -foreground #000000 ;</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Configure state-specific values for -relief, as before:</div><div class='del'>-    #</div><div class='del'>-    style map Toolbutton -relief {</div><div class='del'>-	disabled 	flat</div><div class='del'>-    	selected	sunken  </div><div class='del'>-	pressed 	sunken  </div><div class='del'>-	active		raised</div><div class='del'>-    } </div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Adjust the -padding at the same time, to enhance</div><div class='del'>-    # the raised/sunken illusion:</div><div class='del'>-    #</div><div class='del'>-    style default Toolbutton -padding 4</div><div class='del'>-    style map Toolbutton -padding {</div><div class='del'>-	disabled	{4}</div><div class='del'>-	selected	{6 6 2 2}</div><div class='del'>-	pressed		{6 6 2 2}</div><div class='del'>-	active		{2 2 6 6}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # ... and change the foreground and background colors</div><div class='del'>-    # when the mouse cursor is over the widget:</div><div class='del'>-    #</div><div class='del'>-    style map Toolbutton -background {</div><div class='del'>-	active  	#008800</div><div class='del'>-    } -foreground {</div><div class='del'>-	active  	#FFFFFF</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'>-# ~ A final note:  </div><div class='del'>-#</div><div class='del'>-# TIP #82 also says: "When -indicatoron is off and the button itself</div><div class='del'>-# is on, the relief continues to be hard-coded to sunken. For symmetry,</div><div class='del'>-# we might consider adding another -onrelief option to cover this</div><div class='del'>-# case. But it is difficult to imagine ever wanting to change the</div><div class='del'>-# value of -onrelief so it has been omitted from this TIP.</div><div class='del'>-# If there as strong desire to have -onrelief, it can be added later."</div><div class='del'>-# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</div><div class='del'>-#</div><div class='del'>-# The Tile project aims to make sure that this never needs to happen.</div><div class='del'>-#</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt b/ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt<br/>deleted file mode 100644<br/>index 2b3757bb23..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,12 +0,0 @@</div><div class='del'>-</div><div class='del'>-The following text is the original 'COPYRIGHT' file of tkHTML. </div><div class='del'>-</div><div class='del'>------------------------------------------------------------------------</div><div class='del'>-Most of the source code for the Tk Html widget has been place in the</div><div class='del'>-public domain.  You can do with it whatever you want.  However, some</div><div class='del'>-files have been copied from other sources and contain copyrights.</div><div class='del'>-A copyright notice appears separately at the top of each source file.</div><div class='del'>------------------------------------------------------------------------</div><div class='del'>-</div><div class='del'>-In this sample, HTML documents are quoted in the 'tests' directory of</div><div class='del'>-tkHTML source tree. There were no copyright notice in the directory. </div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/README b/ext/tk/sample/tkextlib/tkHTML/README<br/>deleted file mode 100644<br/>index 1208e270b4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,12 +0,0 @@</div><div class='del'>-</div><div class='del'>-   [ TkHtml widget example ]</div><div class='del'>-</div><div class='del'>-The directory page1 -- page4 are referd from "test" directory of </div><div class='del'>-original TkHtml extension's source archive. </div><div class='del'>-( see http://www.hwaci.com/sw/tkhtml/index.html )</div><div class='del'>-</div><div class='del'>-You can see the HTML documents on the 'hv.rb' or 'ss.rb' sample script.</div><div class='del'>-</div><div class='del'>- e.g. </div><div class='del'>-   LD_LIBRARY_PATH=/usr/local/ActiveTcl/lib:$LD_LIBRARY_PATH /usr/local/bin/ruby ./hv.rb page1/index.html</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/hv.rb b/ext/tk/sample/tkextlib/tkHTML/hv.rb<br/>deleted file mode 100644<br/>index a4d78ea5b1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/hv.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/hv.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,313 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# This script implements the "hv" application.  Type "hv FILE" to</div><div class='del'>-# view FILE as HTML.</div><div class='del'>-#</div><div class='del'>-# This application is used for testing the HTML widget.  It can</div><div class='del'>-# also server as an example of how to use the HTML widget.</div><div class='del'>-# </div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tkHTML'</div><div class='del'>-</div><div class='del'>-root = TkRoot.new(:title=&gt;'HTML File Viewer', :iconname=&gt;'HV')</div><div class='del'>-</div><div class='del'>-file = ARGV[0]</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# These images are used in place of GIFs or of form elements</div><div class='del'>-#</div><div class='del'>-biggray = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-    R0lGODdhPAA+APAAALi4uAAAACwAAAAAPAA+AAACQISPqcvtD6OctNqLs968+w+G4kiW5omm</div><div class='del'>-    6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNFgsAO///</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-smgray = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-    R0lGODdhOAAYAPAAALi4uAAAACwAAAAAOAAYAAACI4SPqcvtD6OctNqLs968+w+G4kiW5omm</div><div class='del'>-    6sq27gvH8kzX9m0VADv/</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-nogifbig = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-    R0lGODdhJAAkAPEAAACQkADQ0PgAAAAAACwAAAAAJAAkAAACmISPqcsQD6OcdJqKM71PeK15</div><div class='del'>-    AsSJH0iZY1CqqKSurfsGsex08XuTuU7L9HywHWZILAaVJssvgoREk5PolFo1XrHZ29IZ8oo0</div><div class='del'>-    HKEYVDYbyc/jFhz2otvdcyZdF68qeKh2DZd3AtS0QWcDSDgWKJXY+MXS9qY4+JA2+Vho+YPp</div><div class='del'>-    FzSjiTIEWslDQ1rDhPOY2sXVOgeb2kBbu1AAADv/</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-nogifsm = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-    R0lGODdhEAAQAPEAAACQkADQ0PgAAAAAACwAAAAAEAAQAAACNISPacHtD4IQz80QJ60as25d</div><div class='del'>-    3idKZdR0IIOm2ta0Lhw/Lz2S1JqvK8ozbTKlEIVYceWSjwIAO///</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# define variables</div><div class='del'>-#</div><div class='del'>-ul_hyper = TkVariable.new(0)</div><div class='del'>-show_tbl = TkVariable.new(0)</div><div class='del'>-show_img = TkVariable.new(1)</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# A font chooser routine.</div><div class='del'>-#</div><div class='del'>-# html[:fontcommand] = pick_font</div><div class='del'>-pick_font = proc{|size, attrs|</div><div class='del'>-  puts "FontCmd: #{size} #{attrs}"</div><div class='del'>-  [ ((attrs =~ /fixed/)? 'courier': 'charter'), </div><div class='del'>-    (12 * (1.2**(size.to_f - 4.0))).to_i, </div><div class='del'>-    ((attrs =~ /italic/)? 'italic': 'roman'), </div><div class='del'>-    ((attrs =~ /bold/)? 'bold': 'normal') ].join(' ') </div><div class='del'>-} </div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# This routine is called for each form element</div><div class='del'>-#</div><div class='del'>-form_cmd = proc{|n, cmd, style, *args|</div><div class='del'>-  # puts "FormCmd: $n $cmd $args"</div><div class='del'>-  case cmd</div><div class='del'>-  when 'select', 'textarea', 'input'</div><div class='del'>-    TkLabel.new(:widgetname=&gt;args[0], :image=&gt;nogifsm)</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# This routine is called for every &lt;IMG&gt; markup</div><div class='del'>-#</div><div class='del'>-images   = {}</div><div class='del'>-old_imgs = {}</div><div class='del'>-big_imgs = {}</div><div class='del'>-</div><div class='del'>-hotkey   = {}</div><div class='del'>-</div><div class='del'>-move_big_image = proc{|b|</div><div class='del'>-  if big_imgs.key?(b)</div><div class='del'>-    b.copy(big_imgs[b])</div><div class='del'>-    big_imgs[b].delete</div><div class='del'>-    big_imgs.delete(b)</div><div class='del'>-    Tk.update</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-image_cmd = proc{|*args|</div><div class='del'>-  if show_img.bool</div><div class='del'>-    smgray</div><div class='del'>-  else</div><div class='del'>-    fn = args[0]</div><div class='del'>-</div><div class='del'>-    if old_imgs.key?(fn)</div><div class='del'>-      images[fn] = old_imgs[fn]</div><div class='del'>-      old_imgs.delete(fn)</div><div class='del'>-      images[fn]</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        img = TkPhotoImage.new(:file=&gt;fn)</div><div class='del'>-      rescue</div><div class='del'>-        smgray</div><div class='del'>-      else</div><div class='del'>-        if img.width * img.height &gt; 20000</div><div class='del'>-          b = TkPhotoImage.new(:width=&gt;img.width, :height=&gt;img.height)</div><div class='del'>-          big_imgs[b] = img</div><div class='del'>-          img = b</div><div class='del'>-          Tk.after_idle(proc{ move_big_image.call(b) })</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        images[fn] = img</div><div class='del'>-        img</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'>-# This routine is called for every &lt;SCRIPT&gt; markup</div><div class='del'>-#</div><div class='del'>-script_cmd = proc{|*args|</div><div class='del'>-  # puts "ScriptCmd: #{args.inspect}"</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# This routine is called for every &lt;APPLET&gt; markup</div><div class='del'>-#</div><div class='del'>-applet_cmd = proc{|w, arglist| </div><div class='del'>-  # puts "AppletCmd: w=#{w} arglist=#{arglist}"</div><div class='del'>-  TkLabel.new(w, :text=&gt;"The Applet #{w}", :bd=&gt;2, :relief=&gt;raised)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Construct the main HTML viewer</div><div class='del'>-#</div><div class='del'>-html = Tk::HTML_Widget.new(:padx=&gt;5, :pady=&gt;9, </div><div class='del'>-                           :formcommand=&gt;form_cmd, </div><div class='del'>-                           :imagecommand=&gt;image_cmd, </div><div class='del'>-                           :scriptcommand=&gt;script_cmd, </div><div class='del'>-                           :appletcommand=&gt;applet_cmd, </div><div class='del'>-                           :underlinehyperlinks=&gt;0, </div><div class='del'>-                           :bg=&gt;'white', :tablerelief=&gt;:raised)</div><div class='del'>-vscr = html.yscrollbar(TkScrollbar.new)</div><div class='del'>-hscr = html.xscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-Tk.grid(html, vscr, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(hscr,       :sticky=&gt;:ew)</div><div class='del'>-Tk.root.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_columnconfigure(1, :weight=&gt;0)</div><div class='del'>-Tk.root.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfigure(1, :weight=&gt;0)</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# This procedure is called when the user clicks on a hyperlink.</div><div class='del'>-#</div><div class='del'>-priv = {}</div><div class='del'>-last_file = ''</div><div class='del'>-</div><div class='del'>-# Read a file</div><div class='del'>-#</div><div class='del'>-read_file = proc{|name|</div><div class='del'>-  begin</div><div class='del'>-    fp = open(name, 'r')</div><div class='del'>-    ret = fp.read(File.size(name))</div><div class='del'>-  rescue</div><div class='del'>-    ret = nil</div><div class='del'>-    fp = nil</div><div class='del'>-    Tk.messageBox(:icon=&gt;'error', :message=&gt;"fail to open '#{name}'", </div><div class='del'>-                  :type=&gt;:ok)</div><div class='del'>-  ensure</div><div class='del'>-    fp.close if fp</div><div class='del'>-  end</div><div class='del'>-  ret</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Clear the screen.</div><div class='del'>-#</div><div class='del'>-clear_screen = proc{</div><div class='del'>-  html.clear</div><div class='del'>-  old_imgs.clear</div><div class='del'>-  big_imgs.clear</div><div class='del'>-  hotkey.clear</div><div class='del'>-  images.each{|k, v| old_imgs[k] = v }</div><div class='del'>-  images.clear</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Load a file into the HTML widget</div><div class='del'>-#</div><div class='del'>-load_file = proc{|name|</div><div class='del'>-  if (doc = read_file.call(name))</div><div class='del'>-    clear_screen.call</div><div class='del'>-    last_file = name</div><div class='del'>-    html.configure(:base=&gt;name)</div><div class='del'>-    html.parse(doc)</div><div class='del'>-    old_imgs.clear</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-href_binding = proc{|x, y|</div><div class='del'>-  # koba &amp; dg marking text</div><div class='del'>-  html.selection_clear</div><div class='del'>-  priv['mark'] = "@#{x},#{y}"</div><div class='del'>-  lst = html.href(x, y)</div><div class='del'>-</div><div class='del'>-  unless lst.size.zero?</div><div class='del'>-    lnk, target = lst</div><div class='del'>-</div><div class='del'>-    if lnk != ""</div><div class='del'>-      if lnk =~ /^#{last_file}#(.*)$/</div><div class='del'>-        html.yview($1)</div><div class='del'>-      else</div><div class='del'>-        load_file.call(lnk)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-html.clipping_window.bind('1', href_binding, '%x %y')</div><div class='del'>-</div><div class='del'>-# marking text with the mouse and copying to the clipboard just with tkhtml2.0 working</div><div class='del'>-html.clipping_window.bind('B1-Motion', proc{|w, x, y|</div><div class='del'>-                            w.selection_set(priv['mark'], "@#{x},#{y}")</div><div class='del'>-                            TkClipboard.clear</div><div class='del'>-                            # avoid tkhtml0.0 errors </div><div class='del'>-                            # anyone can fix this for tkhtml0.0</div><div class='del'>-                            begin</div><div class='del'>-                              TkClipboard.append(TkSelection.get)</div><div class='del'>-                            rescue</div><div class='del'>-                            end</div><div class='del'>-                          }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-# This procedure is called when the user selects the File/Open</div><div class='del'>-# menu option.</div><div class='del'>-#</div><div class='del'>-last_dir = Dir.pwd</div><div class='del'>-sel_load = proc{</div><div class='del'>-  filetypes = [</div><div class='del'>-    ['Html Files', ['.html', '.htm']], </div><div class='del'>-    ['All Files', '*']</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  f = Tk.getOpenFile(:initialdir=&gt;last_dir, :filetypes=&gt;filetypes)</div><div class='del'>-  if f != ''</div><div class='del'>-    load_file.call(f)</div><div class='del'>-    last_dir = File.dirname(f)</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# Refresh the current file.</div><div class='del'>-#</div><div class='del'>-refresh = proc{|*args|</div><div class='del'>-  load_file.call(last_file)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# This binding changes the cursor when the mouse move over</div><div class='del'>-# top of a hyperlink.</div><div class='del'>-#</div><div class='del'>-Tk::HTML_Widget::ClippingWindow.bind('Motion', proc{|w, x, y|</div><div class='del'>-                                       parent = w.winfo_parent</div><div class='del'>-                                       url = parent.href(x, y)</div><div class='del'>-                                       unless url.empty?</div><div class='del'>-                                         parent[:cursor] = 'hand2'</div><div class='del'>-                                       else</div><div class='del'>-                                         parent[:cursor] = ''</div><div class='del'>-                                       end</div><div class='del'>-                                     }, '%W %x %y')</div><div class='del'>-#</div><div class='del'>-# Setup menu</div><div class='del'>-#</div><div class='del'>-menu_spec = [</div><div class='del'>-  [['File', 0], </div><div class='del'>-    ['Open',    sel_load, 0], </div><div class='del'>-    ['Refresh', refresh,   0], </div><div class='del'>-    '---',</div><div class='del'>-    ['Exit', proc{exit}, 1]], </div><div class='del'>-</div><div class='del'>-  [['View', 0], </div><div class='del'>-    ['Underline Hyperlinks', ul_hyper], </div><div class='del'>-    ['Show Table Structure', show_tbl], </div><div class='del'>-    ['Show Images',          show_img]]</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-mbar = Tk.root.add_menubar(menu_spec)</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Setup trace</div><div class='del'>-#</div><div class='del'>-ul_hyper.trace('w', proc{ </div><div class='del'>-                 html[:underlinehyperlinks] = ul_hyper.value</div><div class='del'>-                 refresh.call</div><div class='del'>-               })</div><div class='del'>-</div><div class='del'>-show_tbl.trace('w', proc{</div><div class='del'>-                 if show_tbl.bool</div><div class='del'>-                   html[:tablerelief] = :flat</div><div class='del'>-                 else</div><div class='del'>-                   html[:tablerelief] = :raised</div><div class='del'>-                 end</div><div class='del'>-                 refresh.call</div><div class='del'>-               })</div><div class='del'>-</div><div class='del'>-show_img.trace('w', refresh)</div><div class='del'>-</div><div class='del'>-# If an arguent was specified, read it into the HTML widget.</div><div class='del'>-#</div><div class='del'>-Tk.update</div><div class='del'>-if file &amp;&amp; file != ""</div><div class='del'>-  load_file.call(file)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#####################################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image1 b/ext/tk/sample/tkextlib/tkHTML/page1/image1<br/>deleted file mode 100644<br/>index 31e96b6797..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image1?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image1</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image10 b/ext/tk/sample/tkextlib/tkHTML/page1/image10<br/>deleted file mode 100644<br/>index 80a8f81686..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image10?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image10</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image11 b/ext/tk/sample/tkextlib/tkHTML/page1/image11<br/>deleted file mode 100644<br/>index e8cb01d450..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image11?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image11</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image12 b/ext/tk/sample/tkextlib/tkHTML/page1/image12<br/>deleted file mode 100644<br/>index c317bbd5cc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image12?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image12</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image13 b/ext/tk/sample/tkextlib/tkHTML/page1/image13<br/>deleted file mode 100644<br/>index ac4b3cd594..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image13?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image13</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image14 b/ext/tk/sample/tkextlib/tkHTML/page1/image14<br/>deleted file mode 100644<br/>index c3b02558e3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image14?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image14</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image2 b/ext/tk/sample/tkextlib/tkHTML/page1/image2<br/>deleted file mode 100644<br/>index da26d7092e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image2?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image2</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image3 b/ext/tk/sample/tkextlib/tkHTML/page1/image3<br/>deleted file mode 100644<br/>index d91cdfafab..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image3?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image3</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image4 b/ext/tk/sample/tkextlib/tkHTML/page1/image4<br/>deleted file mode 100644<br/>index 5fdf70c0e5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image4?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image4</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image5 b/ext/tk/sample/tkextlib/tkHTML/page1/image5<br/>deleted file mode 100644<br/>index 67cd14d78d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image5?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image5</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image6 b/ext/tk/sample/tkextlib/tkHTML/page1/image6<br/>deleted file mode 100644<br/>index 9e05aa0f36..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image6?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image6</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image7 b/ext/tk/sample/tkextlib/tkHTML/page1/image7<br/>deleted file mode 100644<br/>index 879656d45c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image7?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image7</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image8 b/ext/tk/sample/tkextlib/tkHTML/page1/image8<br/>deleted file mode 100644<br/>index 8c647c4f00..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image8?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image8</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/image9 b/ext/tk/sample/tkextlib/tkHTML/page1/image9<br/>deleted file mode 100644<br/>index 3a7707589b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/image9?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/image9</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page1/index.html b/ext/tk/sample/tkextlib/tkHTML/page1/index.html<br/>deleted file mode 100644<br/>index 9efac7f7af..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page1/index.html?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page1/index.html</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,115 +0,0 @@</div><div class='del'>-&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;Slashdot:News for Nerds. Stuff that Matters.&lt;/TITLE&gt;  &lt;/HEAD&gt;</div><div class='del'>-&lt;BODY bgcolor="#000000" text="#000000" link="#006666" vlink="#000000"&gt;</div><div class='del'>-&lt;center&gt;&lt;a href="http://209.207.224.220/redir.pl?1463" target="_top"&gt;&lt;img src="image1" alt="Click Here to enter the Sweepstakes" border="2" width="468" height="60"&gt;&lt;/a&gt;&lt;/center&gt; &lt;TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"&gt;&lt;TR&gt;&lt;TD WIDTH="1"&gt;&lt;SCRIPT LANGUAGE="JAVASCRIPT"&gt;</div><div class='del'>-&lt;!-- now="now" ="" new="new" Date();="Date();" tail="tail" ="" now.getTime();="now.getTime();" document.write("&lt;IMG="document.write("&lt;IMG" SRC="http://209.207.224.245/Slashdot/pc.gif?/slashhead.inc,"+" tail="tail" +="+" "=""" WIDTH="1" HEIGHT="1&gt;&lt;BR&gt;");" --&gt;</div><div class='del'>-&lt;/SCRIPT&gt;</div><div class='del'>-&lt;NOSCRIPT&gt;</div><div class='del'>-&lt;IMG SRC="image2" WIDTH="1" HEIGHT="1"&gt;</div><div class='del'>-&lt;/NOSCRIPT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE bgcolor="#FFFFFF" cellpadding="0" cellspacing="0" border="0" width="99%" align="center"&gt;</div><div class='del'>- &lt;TR&gt;</div><div class='del'>-  &lt;TD valign="top" align="left" valign="top"&gt;&lt;A href="http://slashdot.org/"&gt;&lt;IMG src="image3" width="275" height="72" border="0" alt="Welcome to Slashdot"&gt;&lt;/A&gt;&lt;/TD&gt;</div><div class='del'>-   &lt;TD&gt;&lt;A href="http://slashdot.org/search.pl?topic=linux"&gt;&lt;IMG SRC="image4" width="60" height="70" border="0" alt="Linux"&gt;&lt;/A&gt;&lt;/TD&gt;</div><div class='del'>-&lt;TD&gt;&lt;A href="http://slashdot.org/search.pl?topic=news"&gt;&lt;IMG SRC="image5" width="34" height="44" border="0" alt="News"&gt;&lt;/A&gt;&lt;/TD&gt;</div><div class='del'>-&lt;TD&gt;&lt;A href="http://slashdot.org/search.pl?topic=usa"&gt;&lt;IMG SRC="image6" width="80" height="61" border="0" alt="United States"&gt;&lt;/A&gt;&lt;/TD&gt;</div><div class='del'>-&lt;TD&gt;&lt;A href="http://slashdot.org/search.pl?topic=ed"&gt;&lt;IMG SRC="image7" width="87" height="64" border="0" alt="Education"&gt;&lt;/A&gt;&lt;/TD&gt;</div><div class='del'>-&lt;TD&gt;&lt;A href="http://slashdot.org/search.pl?topic=space"&gt;&lt;IMG SRC="image8" width="73" height="59" border="0" alt="Space"&gt;&lt;/A&gt;&lt;/TD&gt;</div><div class='del'>-</div><div class='del'>-&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;TABLE width="99%" align="center" cellpadding="0" cellspacing="0" border="0" bgcolor="#FFFFFF"&gt;&lt;TR&gt;</div><div class='del'>-&lt;TD valign="top" rowspan="5"&gt;&lt;NOBR&gt;&lt;FONT size="2"&gt;&lt;B&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/faq.shtml"&gt;faq&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/code.shtml"&gt;code&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/awards.shtml"&gt;awards&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="http://Andover.Net/privacy.html"&gt;privacy&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="http://slashnet.org"&gt;slashNET&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/search.pl"&gt;older stuff&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="http://cmdrtaco.net"&gt;rob's page&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/users.pl?op=preferences"&gt;preferences&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="http://Andover.Net"&gt;andover.net&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/submit.pl"&gt;submit story&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/advertising.shtml"&gt;advertising&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/supporters.shtml"&gt;supporters&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/pollBooth.pl"&gt;past polls&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/topics.shtml"&gt;topics&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/about.shtml"&gt;about&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/jobs.shtml"&gt;jobs&lt;/A&gt; &lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;A href="/hof.shtml"&gt;hof&lt;/A&gt;</div><div class='del'>-</div><div class='del'>-&lt;/B&gt;&lt;/FONT&gt;&lt;/NOBR&gt;</div><div class='del'>- &lt;P&gt;&lt;TABLE border="0" cellpadding="1" cellspacing="0" align="center" bgcolor="#CCCCCC"&gt;&lt;TR&gt;</div><div class='del'>-  &lt;TD&gt;&lt;FONT size="2" color="#000000"&gt;&lt;B&gt; Sections&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>- &lt;TR&gt;&lt;TD&gt;&lt;TABLE border="0" cellspacing="1" cellpadding="1" bgcolor="#FFFFFF" width="100%"&gt;&lt;TR&gt;&lt;TD&gt;&lt;FONT color="#000000" size="2"&gt;&lt;NOBR&gt;</div><div class='del'>-1/23&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=apache"&gt;apache&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/29 (3)&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=askslashdot"&gt;askslashdot&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/27&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=awards"&gt;awards&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/29 (2)&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=books"&gt;books&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/27&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=bsd"&gt;bsd&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/28 (2)&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=features"&gt;features&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/28 (2)&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=interviews"&gt;interviews&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/19&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=radio"&gt;radio&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/27 (2)&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=science"&gt;science&lt;/A&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-1/28 (3)&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=yro"&gt;yro&lt;/A&gt;&lt;/B&gt;&lt;BR&gt; &lt;/NOBR&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;TR&gt;</div><div class='del'>-  &lt;TD&gt;&lt;A href="http://andover.net"&gt;&lt;FONT size="2" color="#000000"&gt;&lt;B&gt;Andover.Net&lt;/B&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>- &lt;TR&gt;&lt;TD&gt;&lt;TABLE border="0" cellspacing="1" cellpadding="1" bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;FONT color="#000000" size="2"&gt;&lt;NOBR&gt;&lt;A href="http://www.andovernews.com"&gt;AndoverNews&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.askreggie.com"&gt;Ask Reggie&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.davecentral.com"&gt;DaveCentral&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.freecode.com"&gt;FreeCode&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.mediabuilder.com"&gt;MediaBuilder&lt;/A&gt;&lt;BR&gt; &lt;/NOBR&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;</div><div class='del'>- &lt;P&gt;&lt;/P&gt;</div><div class='del'>-&lt;/TD&gt;&lt;TD valign="top" align="left"&gt;&lt;FONT color="#000000"&gt; &lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Who Bought Linux.Net?&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=linux"&gt;&lt;IMG src="image4" width="60" height="70" border="0" align="right" hspace="20" vspace="10" alt="Linux"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="http://CmdrTaco.net"&gt;CmdrTaco&lt;/A&gt; on Saturday January 29, @10:52AM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the this-game-again dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; So Fred VanKampen (who has to hold the record for most money made by reselling two domain names) e-mailed us to say that the Domain Name for 'Linux.Net' has been sold. He won't say to whom, but it supposedly will be announced at LinuxWorld next week. Of course we have no idea what he got for the entry, but the rumors were that he made several million when he sold &lt;A href="http://www.linux.com"&gt;Linux.com&lt;/A&gt; to &lt;A href="http://www.valinux.com"&gt;VA Linux&lt;/A&gt;. Hopefully he'll take me for a ride in his yacht. ;) &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/articles/00/01/29/0837235.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/29/0837235&amp;mode=thread&amp;threshold=0"&gt;58&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/29/0837235&amp;mode=thread&amp;threshold=-1"&gt;62&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Book Reviews: E-Mails from (Over?) The Edge&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=news"&gt;&lt;IMG src="image5" width="34" height="44" border="0" align="right" hspace="20" vspace="10" alt="News"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="http://hemos.net"&gt;Hemos&lt;/A&gt; on Saturday January 29, @10:43AM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the touching-story dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; I'd like to thank the author of this book for sending it to me. Nick's written a book that's touching and endearing, and one that's well worth reading for everyone who's ever had social struggles to deal with. As well, his involvement with the fine folks of &lt;a href="http://www.thevenue.org"&gt;TheVenue&lt;/a&gt;. I'll warn you - it's not a tech text. But it's still worth reading. Click below to read more. &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/books/00/01/24/1146250.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;A href="http://slashdot.org/article.pl?sid=00/01/24/1146250&amp;mode=nocomment"&gt;6197 bytes in body&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/24/1146250&amp;mode=thread&amp;threshold=0"&gt;6&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/24/1146250&amp;mode=thread&amp;threshold=-1"&gt;22&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Linux Kernel 2.3.41&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=linux"&gt;&lt;IMG src="image4" width="60" height="70" border="0" align="right" hspace="20" vspace="10" alt="Linux"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="http://CmdrTaco.net"&gt;CmdrTaco&lt;/A&gt; on Saturday January 29, @10:21AM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the download-compile-reboot-repeat dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; &lt;A href="mailto:bwhitehead@nospam.acm.org"&gt;sdriver&lt;/A&gt; writes &lt;I&gt;"For those of us who enjoy *panic*, *oops*, and suddenly seeing their video BIOS... the newest version is out! Be the first on your block to submit a new patch! ;) "&lt;/I&gt; If you don't know where to get it, you probably should stick to your warm and cuddly 2.2.x kernel *grin*. Now outta my way, I wanna crash my laptop! &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/articles/00/01/29/0834223.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/29/0834223&amp;mode=thread&amp;threshold=0"&gt;52&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/29/0834223&amp;mode=thread&amp;threshold=-1"&gt;57&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Congress Still Figuring Out E-Mail&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=usa"&gt;&lt;IMG src="image6" width="80" height="61" border="0" align="right" hspace="20" vspace="10" alt="United States"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="mailto:roblimo@slashdot.org"&gt;Roblimo&lt;/A&gt; on Saturday January 29, @07:28AM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the voice-of-the-people-can-get-awfully-loud dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; Jett writes &lt;I&gt;" &lt;A href="http://www.vote.com/"&gt;Vote.com&lt;/A&gt; has &lt;A href="http://www.vote.com/magazine/editorials/editorial1843752.phtml"&gt;an interesting article&lt;/A&gt; in their Webmag Fifth Estate about how congressmen have responded to the popularity of e-mail in their daily operations. Quote: 'Of the 440 voting and non-voting House of Representatives members, 22 have no e-mail at all. Even House Speaker Dennis Hastert is wired only halfway -- his office receives e-mail, but does not respond to it. And while all U.S. senators have e-mail, they, like their House counterparts, routinely shun non-constituent mail -- even though they chair committees whose decisions affect the entire country.'"&lt;/I&gt; &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/articles/00/01/28/2311232.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/28/2311232&amp;mode=thread&amp;threshold=0"&gt;66&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/28/2311232&amp;mode=thread&amp;threshold=-1"&gt;66&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Ask Slashdot: Sci Fi Literature 101?&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=ed"&gt;&lt;IMG src="image7" width="87" height="64" border="0" align="right" hspace="20" vspace="10" alt="Education"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="http://exit118.com/"&gt;Cliff&lt;/A&gt; on Saturday January 29, @06:56AM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the recommendations-wanted dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; ohlaadee asks: &lt;I&gt;"My niece (she's 13) wants to start reading science fiction. I do too. I gave us both Asimov's &lt;/I&gt;_The Foundation_&lt;I&gt;&amp;nbsp; for Christmas. We'll read it together. I suppose we could spend the rest of our lives just reading Asimov, but I'm wondering what books and movies you folks would come up with? What does the /. recommended Science Fiction 101 list include?"&lt;/I&gt; &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/askslashdot/00/01/22/1946244.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/22/1946244&amp;mode=thread&amp;threshold=0"&gt;345&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/22/1946244&amp;mode=thread&amp;threshold=-1"&gt;345&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Could Distributed.Net Help the Mars Polar Lander?&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=space"&gt;&lt;IMG src="image8" width="73" height="59" border="0" align="right" hspace="20" vspace="10" alt="Space"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="mailto:roblimo@slashdot.org"&gt;Roblimo&lt;/A&gt; on Saturday January 29, @03:35AM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the food-for-thought dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; Anonymous Coward writes &lt;I&gt;"This official JPL &lt;A href="http://mpfwww.jpl.nasa.gov/msp98/news/mpl000127.html"&gt;press release&lt;/A&gt; describes the current attempt to listen for faint signals from the Mars Lander. They get three windows a day, and it takes 18 hours to process data because the signal is so weak (if it's really there). Too bad they don't have a deal with &lt;A href="http://www.distributed.net"&gt; distributed.net&lt;/A&gt;."&lt;/I&gt; Interesting thought. Is anyone at distributed.net or JPL interested in pursuing it? &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/articles/00/01/28/2318246.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/28/2318246&amp;mode=thread&amp;threshold=0"&gt;99&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/28/2318246&amp;mode=thread&amp;threshold=-1"&gt;102&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;iCrave TV Loses Battle against U.S. Broadcasters&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=tv"&gt;&lt;IMG src="image10" width="50" height="50" border="0" align="right" hspace="20" vspace="10" alt="Television"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="mailto:roblimo@slashdot.org"&gt;Roblimo&lt;/A&gt; on Saturday January 29, @12:21AM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the shut-down-just-before-the-super-bowl dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; &lt;A href="mailto:doran@brandx.net"&gt;Doran&lt;/A&gt; writes &lt;I&gt;"C|Net has &lt;a href="http://news.cnet.com/news/0-1004-200-1535528.html"&gt;this story&lt;/a&gt; about how the Canadian company &lt;a href="http://www.icravetv.com"&gt;iCraveTV.com&lt;/a&gt; has lost its latest battle in U.S. courts over whether it can rebroadcast TV signals over the Web. The broadcasters say it's theft, while iCraveTV sez it's just doing what's legal for other cable TV companies in Canada (ie. rebroadcasting TV). Of course, by framing the streaming video iCraveTV is doing more than just rebroadcasting, they're also adding more commercial content, which the broadcasters feel dilutes their TV commercials. "&lt;/I&gt; &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/articles/00/01/29/0010203.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/29/0010203&amp;mode=thread&amp;threshold=0"&gt;152&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/29/0010203&amp;mode=thread&amp;threshold=-1"&gt;170&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Win2k Security holes found&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=microsoft"&gt;&lt;IMG src="image11" width="75" height="55" border="0" align="right" hspace="20" vspace="10" alt="Microsoft"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="mailto:heunique@slashdot.org"&gt;HeUnique&lt;/A&gt; on Friday January 28, @04:58PM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the and-it's-not-even-out-yet dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; According to a story posted by &lt;a href="http://www.zdnn.com"&gt;ZDNN&lt;/a&gt;, &lt;a href="http://www.zdnet.com/zdnn/stories/news/0,4586,2429334,00.html?chkpt=zdnntop"&gt;two security holes&lt;/a&gt; have been found on Windows 2000, and that's even before the official release of Windows 2000! Administrators who rush to incorporate the patch from MS beware - according to one of the talkback posts on ZDNN, the patch creates a new problem with Windows 2000 news server service. &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/articles/00/01/28/1653228.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/28/1653228&amp;mode=thread&amp;threshold=0"&gt;510&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/28/1653228&amp;mode=thread&amp;threshold=-1"&gt;534&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Encryption Debate at Mitnick Trial&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=encryption"&gt;&lt;IMG src="image12" width="80" height="70" border="0" align="right" hspace="20" vspace="10" alt="Encryption"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="http://hemos.net"&gt;Hemos&lt;/A&gt; on Friday January 28, @03:33PM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the gimmie-the-data dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; A number of people have written about &lt;A HREF="http://nytimes.com/library/tech/00/01/cyber/cyberlaw/28law.html"&gt;the latest twist&lt;/a&gt; in the Mitnick case. Kevin wants to get his data back, but the government is refusing to do so until he gives them the key. Apparently, the government is unable to crack the encryption that he's got on it - you'd think after having the data for five years, they'd be able to brute-force the darn thing. It's a NYT article - free login required. &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/articles/00/01/28/1320253.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/28/1320253&amp;mode=thread&amp;threshold=0"&gt;504&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/28/1320253&amp;mode=thread&amp;threshold=-1"&gt;521&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;TABLE width="99%" cellpadding="0" cellspacing="0" border="0"&gt;&lt;TR&gt;&lt;TD valign="top" bgcolor="#006666"&gt;&lt;IMG src="image9" width="13" height="16" alt="" align="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Forum: Future Ports of Games to Linux&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;A href="http://slashdot.org/search.pl?topic=games"&gt;&lt;IMG src="image13" width="80" height="56" border="0" align="right" hspace="20" vspace="10" alt="Games"&gt;&lt;/A&gt; &lt;B&gt;Posted by &lt;A href="http://CmdrTaco.net"&gt;CmdrTaco&lt;/A&gt; on Friday January 28, @02:26PM&lt;/B&gt;&lt;BR&gt; &lt;FONT size="2"&gt;&lt;B&gt;from the it's-been-awhile dept.&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; It's been a long time since I posted an open forum like this, but I'm curious what people think on this one. What games do you most want to see ported to Linux in the next few months? Of course, for me personally it's StarCraft and Diablo 2, but I'm curious what games have come out or are due soon that people would most like to see a port of (and note that WINE doesn't count. ;) &lt;P&gt;&lt;B&gt;( &lt;/B&gt;&lt;A href="http://slashdot.org/articles/00/01/28/1257211.shtml"&gt;&lt;B&gt;Read More...&lt;/B&gt;&lt;/A&gt; | &lt;B&gt;&lt;A href="http://slashdot.org/article.pl?sid=00/01/28/1257211&amp;mode=thread&amp;threshold=0"&gt;648&lt;/A&gt; of &lt;A href="http://slashdot.org/article.pl?sid=00/01/28/1257211&amp;mode=thread&amp;threshold=-1"&gt;652&lt;/A&gt; &lt;/B&gt;comments &lt;B&gt;)&lt;/B&gt; &lt;P&gt;&lt;/TD&gt;&lt;TD width="210" align="center" valign="top"&gt;&lt;TABLE cellpadding="1" cellspacing="0" border="0" width="200" align="center"&gt; &lt;TR bgcolor="#006666"&gt; &lt;TD valign="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;&lt;A HREF="/index.pl?section=features"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Features&lt;/FONT&gt;&lt;/A&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;TR&gt;&lt;TD bgcolor="#CCCCCC"&gt;&lt;FONT color="#000000" size="2"&gt;&lt;A href="/vote.pl"&gt;Voting has begun&lt;/A&gt; for the $100k &lt;A href="/index.pl?section=awards"&gt;Slashdot Beanie Awards&lt;/A&gt;. Talk amongst yourselves and choose who deserves the cash. &lt;P&gt;The latest installment of &lt;A href="http://www.thesync.com/geeks"&gt;Geeks in Space&lt;/A&gt; is up at &lt;A href="http://www.thesync.com"&gt;The Sync&lt;/A&gt;. Listen to CmdrTaco, Hemos, and Nate talk about the latest events to happen - or not happen in the computer world. &lt;P&gt;Perhaps you are seeking Jon Katz's series of articles related to recent events in Colorado. These articles include &lt;A href="/article.pl?sid=99/04/25/1438249"&gt;Voices from the Hellmouth&lt;/A&gt;, &lt;A href="/article.pl?sid=99/04/27/0310247"&gt;More Stories from the Hellmouth&lt;/A&gt; or &lt;A href="/article.pl?sid=99/04/29/0124247"&gt;The Price of Being Different&lt;/A&gt;, &lt;P&gt;For something different, try reading a little essay &lt;A href="/article.pl?sid=99/03/31/0137221"&gt;Thoughts from the Furnace&lt;/A&gt; about the internet, and flame. &lt;p&gt; And for a bit of an amusing take on the Open Source world, check out &lt;a href="/article.pl?sid=99/08/24/1327256&amp;mode=thread"&gt;Open Source as an Ant Farm&lt;/a&gt; &lt;P&gt;&lt;B&gt;Update: 01/03 03:10&lt;/B&gt; by &lt;B&gt;&lt;A href="http://cowboyneal.org"&gt;CowboyNeal&lt;/a&gt;&lt;/B&gt;: &lt;P align="right"&gt;&lt;B&gt;&lt;A href="/features/"&gt;Past Features&lt;/A&gt;&lt;/B&gt; &lt;!-- end="end" features="features" block="block" --&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt;&lt;P&gt; &lt;TABLE cellpadding="1" cellspacing="0" border="0" width="200" align="center"&gt; &lt;TR bgcolor="#006666"&gt; &lt;TD valign="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;&lt;A HREF="http://slashdot.org/index.pl?section=askslashdot"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Ask Slashdot&lt;/FONT&gt;&lt;/A&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;TR&gt;&lt;TD bgcolor="#CCCCCC"&gt;&lt;FONT color="#000000" size="2"&gt;&lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1946244"&gt;Sci Fi Literature 101?&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/192226"&gt;Linux and Satellite Internet Services&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1843258"&gt;Open Defensive Patents?&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1825252"&gt;Technologies That Shaped the Last Century?&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1958212"&gt;Disk Repair Tools for Linux?&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1955215"&gt;Why Can't the Command-Line be More Standardized?&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1928235"&gt;Packet Radio Networking with PalmOS?&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1817211"&gt;Cheap Rackmount Enclosures/Systems?&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1950249"&gt;Open Source Software and Tax Breaks?&lt;/A&gt; &lt;li&gt;&lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1917207"&gt;Building an Upgradable Dual Processor System&lt;/A&gt; &lt;P&gt; if you have a question for Ask Slashdot, send it to &lt;A href="mailto:askslashdot@slashdot.org"&gt;askslashdot@slashdot.org&lt;/A&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt;&lt;P&gt; &lt;TABLE cellpadding="1" cellspacing="0" border="0" width="200" align="center"&gt; &lt;TR bgcolor="#006666"&gt; &lt;TD valign="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;&lt;A HREF="/users.pl"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Slashdot Login&lt;/FONT&gt;&lt;/A&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;TR&gt;&lt;TD bgcolor="#CCCCCC"&gt;&lt;FONT color="#000000" size="2"&gt;&lt;FORM action="/users.pl" METHOD="POST"&gt; &lt;B&gt;Nickname:&lt;/B&gt;&lt;BR&gt; &lt;INPUT type="text" name="unickname" size="20" value=""&gt;&lt;BR&gt; &lt;B&gt;Password:&lt;/B&gt;&lt;BR&gt; &lt;INPUT type="hidden" name="returnto" value="index.pl"&gt; &lt;INPUT type="password" name="upasswd" size="20"&gt;&lt;BR&gt; &lt;INPUT type="submit" name="op" value="userlogin"&gt; &lt;/FORM&gt; Don't have an account yet? &lt;A href="/users.pl"&gt;Go Create One&lt;/A&gt;. A user account will allow you to customize all these &lt;A href="/cheesyportal.shtml"&gt;nutty little boxes&lt;/A&gt;, tailor the stories you see, as well as remember your comment viewing preferences.&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt;&lt;P&gt; &lt;TABLE cellpadding="1" cellspacing="0" border="0" width="200" align="center"&gt; &lt;TR bgcolor="#006666"&gt; &lt;TD valign="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Slashdot Poll&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;TR&gt;&lt;TD bgcolor="#CCCCCC"&gt;&lt;FONT color="#000000" size="2"&gt;&lt;FORM action="http://slashdot.org/pollBooth.pl"&gt; &lt;INPUT type="hidden" name="qid" value="techadvance"&gt; &lt;B&gt;The Tech Advance I Most Want Is:&lt;/B&gt;&lt;BR&gt;&lt;INPUT type="radio" name="aid" value="1"&gt;Nanotechnology&lt;BR&gt;&lt;INPUT type="radio" name="aid" value="2"&gt;Cold Fusion&lt;BR&gt;&lt;INPUT type="radio" name="aid" value="3"&gt;Powerful Fuel Cells&lt;BR&gt;&lt;INPUT type="radio" name="aid" value="4"&gt;Hard Wiring my Body&lt;BR&gt;&lt;INPUT type="radio" name="aid" value="5"&gt;Universal Strong Crypto&lt;BR&gt;&lt;INPUT type="radio" name="aid" value="6"&gt;Interstellar Travel&lt;BR&gt;&lt;INPUT type="radio" name="aid" value="7"&gt;Cybernetic Body Armor&lt;BR&gt;&lt;INPUT type="radio" name="aid" value="8"&gt;ColecoVision&lt;BR&gt;&lt;INPUT type="submit" value="Vote"&gt; [ &lt;A href="http://slashdot.org/pollBooth.pl?qid=techadvance&amp;aid=-1"&gt;&lt;B&gt;Results&lt;/B&gt;&lt;/A&gt; | &lt;A href="http://slashdot.org/pollBooth.pl?"&gt;&lt;B&gt;Polls&lt;/B&gt;&lt;/A&gt; ] &lt;BR&gt;Comments:&lt;B&gt;656&lt;/B&gt; | Votes:&lt;B&gt;29121&lt;/B&gt;&lt;/FORM&gt; &lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt;&lt;P&gt; &lt;TABLE cellpadding="1" cellspacing="0" border="0" width="200" align="center"&gt; &lt;TR bgcolor="#006666"&gt; &lt;TD valign="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Older Stuff&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;TR&gt;&lt;TD bgcolor="#CCCCCC"&gt;&lt;FONT color="#000000" size="2"&gt;&lt;P&gt;&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=&amp;issue=730512&amp;mode=thread"&gt;&lt;FONT size="4"&gt;Friday&lt;/FONT&gt;&lt;/A&gt; January 28&lt;/B&gt; &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/28/1110258.shtml"&gt;Abstract Programming and GPL Enforcement&lt;/A&gt; (235) &lt;LI&gt;&lt;A href="http://slashdot.org/interviews/00/01/28/1225206.shtml"&gt;Interview: FreeDOS Leader Jim Hall Answers&lt;/A&gt; (86) &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/28/116240.shtml"&gt;Open Source's Achilles Heel&lt;/A&gt; (466) &lt;LI&gt;&lt;A href="http://slashdot.org/features/00/01/26/1915230.shtml"&gt;The Virtue of Communal Instincts&lt;/A&gt; (237) &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/28/0723223.shtml"&gt;Gartner Group Debunking Open Source Myths&lt;/A&gt; (165) &lt;LI&gt;&lt;A href="http://slashdot.org/yro/00/01/28/0917229.shtml"&gt;DoubleClick Taken to Court&lt;/A&gt; (310) &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/28/0718209.shtml"&gt;Updated Slash &amp; Server 51&lt;/A&gt; (81) &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/28/089230.shtml"&gt;XMMS 1.0.0 Released&lt;/A&gt; (128) &lt;LI&gt;&lt;A href="http://slashdot.org/askslashdot/00/01/22/192226.shtml"&gt;Linux and Satellite Internet Services&lt;/A&gt; (138) &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/27/1811221.shtml"&gt;UN Wants to Combat Online Racism&lt;/A&gt; (531) &lt;P&gt;&lt;B&gt;&lt;A href="http://slashdot.org/index.pl?section=&amp;issue=730511&amp;mode=thread"&gt;&lt;FONT size="4"&gt;Thursday&lt;/FONT&gt;&lt;/A&gt; January 27&lt;/B&gt; &lt;LI&gt;&lt;A href="http://slashdot.org/yro/00/01/27/2330205.shtml"&gt;Crackdowns, Fools and the MPAA&lt;/A&gt; (351) &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/27/0832215.shtml"&gt;Heroes of Might and Magic III Demo Released&lt;/A&gt; (157) &lt;LI&gt;&lt;A href="http://slashdot.org/science/00/01/27/1345241.shtml"&gt;Sandia Labs Venture Into Nanotechnology&lt;/A&gt; (117) &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/27/0931237.shtml"&gt;CA Announces Program Ports to Linux&lt;/A&gt; (195) &lt;LI&gt;&lt;A href="http://slashdot.org/interviews/00/01/27/1118251.shtml"&gt;Interview: Larry Augustin Finally Answers&lt;/A&gt; (210) &lt;LI&gt;&lt;A href="http://slashdot.org/awards/00/01/27/0855252.shtml"&gt;Final Call for Voting in Slashdot's Beanie Awards&lt;/A&gt; (178) &lt;LI&gt;&lt;A href="http://slashdot.org/features/00/01/26/197211.shtml"&gt;Transmeta Code Morphing != Just In Time&lt;/A&gt; (449) &lt;LI&gt;&lt;A href="http://slashdot.org/books/00/01/24/1150256.shtml"&gt;Intrusion Detection&lt;/A&gt; (65) &lt;LI&gt;&lt;A href="http://slashdot.org/science/00/01/27/0824239.shtml"&gt;Using Enzymes to Help Fight CO2 Build-Up&lt;/A&gt; (165) &lt;LI&gt;&lt;A href="http://slashdot.org/articles/00/01/27/0712217.shtml"&gt;Jon Johansen on ABC World News Tonight&lt;/A&gt; (415) &lt;P align="right"&gt;&lt;BR&gt;&lt;A href="http://slashdot.org/search.pl?section=&amp;min=30"&gt;&lt;B&gt;Older Articles&lt;/B&gt;&lt;/A&gt;&lt;BR&gt;&lt;A href="http://slashdot.org/index.pl?section=&amp;mode=thread&amp;issue=730512"&gt;&lt;B&gt;Yesterday's Edition&lt;/B&gt;&lt;/A&gt; &lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt;&lt;P&gt; &lt;TABLE cellpadding="1" cellspacing="0" border="0" width="200" align="center"&gt; &lt;TR bgcolor="#006666"&gt; &lt;TD valign="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;&lt;A HREF="/index.pl?section=books"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Book Reviews&lt;/FONT&gt;&lt;/A&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;TR&gt;&lt;TD bgcolor="#CCCCCC"&gt;&lt;FONT color="#000000" size="2"&gt;&lt;p&gt;Jon Katz, Resident Gasbag, has a new, very appropriate book coming out soon, &lt;a href="http://www.thinkgeek.com"&gt;Geeks&lt;/a&gt;. Preorder now and receive the book early. &lt;p&gt;For probably the best fiction read around, check out Neal Stephenson's &lt;cite&gt;&lt;a href="/article.pl?sid=99/06/23/139229&amp;mode=thread"&gt;Cryptonomicon&lt;/a&gt;&lt;/cite&gt;, an engaging read about WWII, cryptography and buried treasure. And data vaults. &lt;p&gt;If you've been doing a lot of work in Perl, you've probably figured out you really need &lt;cite&gt;&lt;a href="/article.pl?sid=99/05/10/2238254&amp;mode=thread"&gt;Perl in a Nutshell&lt;/a&gt;&lt;/cite&gt; or &lt;cite&gt;&lt;a href="/article.pl?sid=99/01/29/1035246&amp;mode=thread"&gt;The Perl Cookbook&lt;/a&gt;&lt;/cite&gt;. If you're still learning, grab &lt;cite&gt;&lt;a href="/books/older/980526096229.shtml"&gt;Programming Perl&lt;/a&gt;&lt;/cite&gt;. &lt;p&gt;And if you want to learn more about how to become a better coder, grab &lt;cite&gt;&lt;a href="/article.pl?sid=99/06/28/1417229&amp;mode=thread"&gt;The Unified Software Development Process&lt;/a&gt;&lt;/cite&gt; or &lt;cite&gt;&lt;a href="/article.pl?sid=99/04/08/1512209&amp;mode=thread"&gt;The Practice of Programming&lt;/cite&gt;&lt;/a&gt; Additionally, check out &lt;cite&gt;&lt;a href="http://slashdot.org/article.pl?sid=99/09/16/1333202&amp;mode=thread"&gt;Refactoring: Improving the Design of Existing Code&lt;/a&gt;&lt;/cite&gt; . &lt;p&gt;Developing a large application? Grab Eric Greenberg's excellent &lt;cite&gt;&lt;a href="/article.pl?sid=99/07/13/1943258&amp;mode=thread"&gt;Network Application Frameworks&lt;/cite&gt;&lt;/a&gt;. &lt;P&gt;Visit &lt;A href="/index.pl?section=books"&gt;Our Book Reviews Section&lt;/A&gt; for more. &lt;br&gt; &lt;B&gt;Update: 11/12 05:19&lt;/B&gt; by &lt;B&gt;&lt;A href="mailto:hemos@slashdot.org"&gt;H&lt;/A&gt;&lt;/B&gt;:&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt;&lt;P&gt; &lt;TABLE cellpadding="1" cellspacing="0" border="0" width="200" align="center"&gt; &lt;TR bgcolor="#006666"&gt; &lt;TD valign="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;Quick Links&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;TR&gt;&lt;TD bgcolor="#CCCCCC"&gt;&lt;FONT color="#000000" size="2"&gt;&lt;B&gt;Cool Sites:&lt;/B&gt; &lt;LI&gt;&lt;A href="http://www.linux.com"&gt;Linux.com&lt;/A&gt; (What &lt;B&gt;is&lt;/B&gt; Linux?) &lt;LI&gt;&lt;A href="http://everything.blockstackers.com"&gt;Everything&lt;/A&gt; (Blow your Mind) &lt;LI&gt;&lt;A href="http://www.geekculture.com/geekycomics/Aftery2k/aftery2kmain.html"&gt;After Y2k&lt;/A&gt; (&lt;I&gt;This&lt;/I&gt; is Post-Apocalyptic?) &lt;LI&gt;&lt;A href="http://www.userfriendly.org"&gt;User Friendly&lt;/A&gt; (Laugh) &lt;LI&gt;&lt;A href="http://themes.org"&gt;Themes.org&lt;/A&gt; (Make X Perty) &lt;P&gt;&lt;B&gt;Support Slashdot:&lt;/B&gt; &lt;LI&gt;&lt;A href="http://www.thinkgeek.com"&gt;ThinkGeek&lt;/A&gt; (Clothe Yourself in Slashdot) &lt;LI&gt;&lt;A href="http://cdnow.com/from=sr-302791"&gt;CDnow&lt;/A&gt; (Support &lt;A href="http://www.cdnow.com/gift/malda@slashdot.org"&gt;Rob's Who Habit&lt;/A&gt;) &lt;LI&gt;&lt;A href="http://adfu.slashdot.org"&gt;Slashdot Advertiser Index&lt;/A&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt;&lt;P&gt; &lt;TABLE cellpadding="1" cellspacing="0" border="0" width="200" align="center"&gt; &lt;TR bgcolor="#006666"&gt; &lt;TD valign="top"&gt;&lt;FONT size="4" color="#FFFFFF" face="arial,helvetica"&gt;&lt;B&gt;&lt;A HREF="http://freshmeat.net"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Freshmeat&lt;/FONT&gt;&lt;/A&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt;&lt;TR&gt;&lt;TD bgcolor="#CCCCCC"&gt;&lt;FONT color="#000000" size="2"&gt;&lt;P&gt;&lt;FONT size="4" color="#006666"&gt;&lt;B&gt;January&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949208399.html"&gt;We should get this out of the door now&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949159642.html"&gt;Is Linux for Crazies?&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949156343.html"&gt;SQN Linux 1.6&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949156277.html"&gt;Limo 0.3.2&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949156237.html"&gt;Fusion GS 1.3&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949145887.html"&gt;MMR 1.5.4&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949142835.html"&gt;KUPS 0.3.4&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949142815.html"&gt;3DSE patch for XMMS 4&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949139763.html"&gt;Linux 2.3.41&lt;/A&gt; &lt;LI&gt;&lt;A href="http://freshmeat.net/news/2000/01/29/949139751.html"&gt;Free Code for Linux S/390&lt;/A&gt; &lt;FORM METHOD="post" ACTION="http://core.freshmeat.net/search.php3"&gt; &lt;FONT size="3" color="#006666"&gt;&lt;B&gt;Search Freshmeat:&lt;/B&gt;&lt;/FONT&gt;&lt;BR&gt; &lt;INPUT TYPE="hidden" NAME="link" VALUE="freshmeat.net"&gt; &lt;INPUT TYPE="text" NAME="query"&gt; &lt;/FORM&gt; &lt;P align="right"&gt;&lt;A href="http://freshmeat.net"&gt;&lt;B&gt;More Meat...&lt;/B&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt;&lt;P&gt; &lt;/FONT&gt;&lt;/TD&gt;</div><div class='del'>-         &lt;/TR&gt;</div><div class='del'>-        &lt;/TABLE&gt;&lt;TABLE cellpadding="0" cellspacing="0" border="0" width="99%" align="center" bgcolor="ffffff"&gt;</div><div class='del'>-            &lt;TR&gt;</div><div class='del'>-             &lt;TD colspan="4" align="center"&gt;&lt;IMG src="image14" alt="" width="80%" height="1" hspace="10" vspace="30"&gt;&lt;/TD&gt;</div><div class='del'>-            &lt;/TR&gt;&lt;TR&gt;</div><div class='del'>-             &lt;TD align="center"&gt;&lt;FONT size="2" face="arial,helvetica"&gt;</div><div class='del'>-  &lt;FORM method="GET" action="http://slashdot.org/search.pl"&gt;</div><div class='del'>-         &lt;INPUT type="name" name="query" value="" width="20" size="20" length="20"&gt;</div><div class='del'>-        &lt;INPUT type="submit" value="Search"&gt;</div><div class='del'>-  &lt;/FORM&gt;</div><div class='del'>-  &lt;/FONT&gt;</div><div class='del'>-  &lt;/TD&gt;</div><div class='del'>-  &lt;TD bgcolor="#ffffff" width="25"&gt;  &amp;nbsp; &lt;/TD&gt;</div><div class='del'>-  &lt;TD align="center"&gt;</div><div class='del'>-    &lt;FONT size="2" face="arial,helvetica"&gt;&lt;I&gt;Wasn't there something about a PASCAL programmer knowing the value of</div><div class='del'>-everything and the Wirth of nothing?</div><div class='del'>-&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/I&gt;&lt;/FONT&gt;</div><div class='del'>-    &lt;/FONT&gt;</div><div class='del'>-  &lt;/TD&gt;&lt;/TR&gt;</div><div class='del'>-  &lt;TR&gt;&lt;TD colspan="4" align="center"&gt;</div><div class='del'>-  &lt;FONT size="1" color="#006666" face="arial,helvetica"&gt;</div><div class='del'>-</div><div class='del'>- All trademarks and copyrights on this</div><div class='del'>-  page are owned by their respective owners.  Comments</div><div class='del'>-  are owned by the Poster.</div><div class='del'>-  The Rest © 1997-2000 &lt;A href="http://Andover.Net"&gt;Andover.Net&lt;/A&gt;.</div><div class='del'>-&lt;/FONT&gt;&lt;/CENTER&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;CENTER&gt;</div><div class='del'>-          &lt;FONT size="2" color="#006666"&gt;</div><div class='del'>-</div><div class='del'>-         [ &lt;A href="http://slashdot.org/"&gt;&lt;Font color="#ffffff"&gt;home&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://slashdot.org/awards.shtml"&gt;&lt;Font color="#ffffff"&gt;awards&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://slashdot.org/supporters.shtml"&gt;&lt;FONT color="#ffffff"&gt;supporters&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://CmdrTaco.net"&gt;&lt;FONT color="#ffffff"&gt;rob's homepage&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://slashdot.org/submit.pl"&gt;&lt;FONT color="#ffffff"&gt;contribute story&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://slashdot.org/search.pl"&gt;&lt;FONT color="#ffffff"&gt;older articles&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://Andover.Net"&gt;&lt;FONT color="#ffffff"&gt;Andover.Net&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://slashdot.org/advertising.shtml"&gt;&lt;FONT color="#ffffff"&gt;advertising&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://slashdot.org/pollBooth.pl"&gt;&lt;FONT color="#ffffff"&gt;past polls&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://slashdot.org/about.shtml"&gt;&lt;FONT color="#ffffff"&gt;about&lt;/FONT&gt;&lt;/A&gt; |</div><div class='del'>-         &lt;A href="http://slashdot.org/faq.shtml"&gt;&lt;FONT color="#ffffff"&gt;faq&lt;/FONT&gt;&lt;/A&gt; ]</div><div class='del'>-           &lt;/FONT&gt;</div><div class='del'>-          &lt;/CENTER&gt;</div><div class='del'>-&lt;/BODY&gt;</div><div class='del'>-&lt;/HTML&gt;</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image1 b/ext/tk/sample/tkextlib/tkHTML/page2/image1<br/>deleted file mode 100644<br/>index 2ed6ddcfe1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image1?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image1</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image10 b/ext/tk/sample/tkextlib/tkHTML/page2/image10<br/>deleted file mode 100644<br/>index 3021b68990..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image10?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image10</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image11 b/ext/tk/sample/tkextlib/tkHTML/page2/image11<br/>deleted file mode 100644<br/>index 41d1fe3666..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image11?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image11</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image12 b/ext/tk/sample/tkextlib/tkHTML/page2/image12<br/>deleted file mode 100644<br/>index 655a686541..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image12?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image12</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image13 b/ext/tk/sample/tkextlib/tkHTML/page2/image13<br/>deleted file mode 100644<br/>index 97d5950e8c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image13?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image13</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image14 b/ext/tk/sample/tkextlib/tkHTML/page2/image14<br/>deleted file mode 100644<br/>index 6d73ad833c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image14?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image14</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image15 b/ext/tk/sample/tkextlib/tkHTML/page2/image15<br/>deleted file mode 100644<br/>index 90cc3b2b16..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image15?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image15</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image16 b/ext/tk/sample/tkextlib/tkHTML/page2/image16<br/>deleted file mode 100644<br/>index 93aa853cf1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image16?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image16</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image17 b/ext/tk/sample/tkextlib/tkHTML/page2/image17<br/>deleted file mode 100644<br/>index f46f0308cd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image17?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image17</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image18 b/ext/tk/sample/tkextlib/tkHTML/page2/image18<br/>deleted file mode 100644<br/>index 3badd5e909..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image18?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image18</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image19 b/ext/tk/sample/tkextlib/tkHTML/page2/image19<br/>deleted file mode 100644<br/>index bd4f6d9677..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image19?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image19</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image2 b/ext/tk/sample/tkextlib/tkHTML/page2/image2<br/>deleted file mode 100644<br/>index 7566dda25d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image2?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image2</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image20 b/ext/tk/sample/tkextlib/tkHTML/page2/image20<br/>deleted file mode 100644<br/>index 358fa95f63..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image20?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image20</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image21 b/ext/tk/sample/tkextlib/tkHTML/page2/image21<br/>deleted file mode 100644<br/>index c81aa52588..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image21?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image21</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image22 b/ext/tk/sample/tkextlib/tkHTML/page2/image22<br/>deleted file mode 100644<br/>index 6cbd63022a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image22?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image22</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image23 b/ext/tk/sample/tkextlib/tkHTML/page2/image23<br/>deleted file mode 100644<br/>index e8173a7456..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image23?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image23</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image24 b/ext/tk/sample/tkextlib/tkHTML/page2/image24<br/>deleted file mode 100644<br/>index bffd4b4956..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image24?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image24</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image25 b/ext/tk/sample/tkextlib/tkHTML/page2/image25<br/>deleted file mode 100644<br/>index c656fa4f30..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image25?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image25</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image26 b/ext/tk/sample/tkextlib/tkHTML/page2/image26<br/>deleted file mode 100644<br/>index bc93fdb259..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image26?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image26</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image27 b/ext/tk/sample/tkextlib/tkHTML/page2/image27<br/>deleted file mode 100644<br/>index 6ad0eff1e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image27?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image27</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image28 b/ext/tk/sample/tkextlib/tkHTML/page2/image28<br/>deleted file mode 100644<br/>index 88f0d7cea6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image28?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image28</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image29 b/ext/tk/sample/tkextlib/tkHTML/page2/image29<br/>deleted file mode 100644<br/>index e0704183b3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image29?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image29</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image3 b/ext/tk/sample/tkextlib/tkHTML/page2/image3<br/>deleted file mode 100644<br/>index ac3fa33e6f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image3?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image3</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image30 b/ext/tk/sample/tkextlib/tkHTML/page2/image30<br/>deleted file mode 100644<br/>index 4a41950434..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image30?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image30</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image31 b/ext/tk/sample/tkextlib/tkHTML/page2/image31<br/>deleted file mode 100644<br/>index 60f13ed564..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image31?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image31</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image32 b/ext/tk/sample/tkextlib/tkHTML/page2/image32<br/>deleted file mode 100644<br/>index 04ddc4e8d7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image32?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image32</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image33 b/ext/tk/sample/tkextlib/tkHTML/page2/image33<br/>deleted file mode 100644<br/>index c1ecfff6c4..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image33?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image33</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image34 b/ext/tk/sample/tkextlib/tkHTML/page2/image34<br/>deleted file mode 100644<br/>index 3dfd5d76e2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image34?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image34</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image35 b/ext/tk/sample/tkextlib/tkHTML/page2/image35<br/>deleted file mode 100644<br/>index aea44f3017..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image35?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image35</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image36 b/ext/tk/sample/tkextlib/tkHTML/page2/image36<br/>deleted file mode 100644<br/>index baef0e0380..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image36?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image36</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image37 b/ext/tk/sample/tkextlib/tkHTML/page2/image37<br/>deleted file mode 100644<br/>index 6c6ba52b45..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image37?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image37</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image38 b/ext/tk/sample/tkextlib/tkHTML/page2/image38<br/>deleted file mode 100644<br/>index e298e04b29..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image38?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image38</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image39 b/ext/tk/sample/tkextlib/tkHTML/page2/image39<br/>deleted file mode 100644<br/>index e16e2f10d5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image39?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image39</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image4 b/ext/tk/sample/tkextlib/tkHTML/page2/image4<br/>deleted file mode 100644<br/>index 9e5e46b7e5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image4?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image4</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image5 b/ext/tk/sample/tkextlib/tkHTML/page2/image5<br/>deleted file mode 100644<br/>index 646a6d9a51..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image5?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image5</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image6 b/ext/tk/sample/tkextlib/tkHTML/page2/image6<br/>deleted file mode 100644<br/>index 7df417c710..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image6?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image6</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image7 b/ext/tk/sample/tkextlib/tkHTML/page2/image7<br/>deleted file mode 100644<br/>index 0e6ac10aff..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image7?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image7</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image8 b/ext/tk/sample/tkextlib/tkHTML/page2/image8<br/>deleted file mode 100644<br/>index ba7fb476b9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image8?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image8</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/image9 b/ext/tk/sample/tkextlib/tkHTML/page2/image9<br/>deleted file mode 100644<br/>index b1cad73ae9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/image9?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/image9</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page2/index.html b/ext/tk/sample/tkextlib/tkHTML/page2/index.html<br/>deleted file mode 100644<br/>index 7eaf2d2cc9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page2/index.html?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page2/index.html</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,433 +0,0 @@</div><div class='del'>-&lt;html&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;Tcl Resource Center&lt;/title&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-</div><div class='del'>-&lt;body bgcolor="white" text="black"&gt;</div><div class='del'>-</div><div class='del'>-    &lt;!-- MenuTopLevel Resource Software Extensions --&gt;</div><div class='del'>-    &lt;table border="0" cellpadding="0" cellspacing="0"&gt;</div><div class='del'>-      &lt;tr&gt;</div><div class='del'>-        &lt;td width="120" valign="TOP"&gt;&lt;a href="/"&gt;&lt;img src="image1" width="120" height="79" alt="Scriptics" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-        &lt;td valign="top" width="548"&gt;</div><div class='del'>-        </div><div class='del'>-          &lt;!-- Table to hold tabs --&gt;</div><div class='del'>-          &lt;table cellpadding="0" cellspacing="0" border="0" width="548"&gt;</div><div class='del'>-            &lt;tr&gt;</div><div class='del'>-              &lt;td valign="top" align="right" colspan="15" width="548"&gt;&lt;a name="TOP"&gt;&lt;img src="image2" width="548" height="9" alt="Tcl/Tk" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-            &lt;/tr&gt;</div><div class='del'>-            &lt;tr&gt;</div><div class='del'>-              &lt;td valign="top" align="right" colspan="15" width="548"&gt;&lt;img src="image3" width="482" height="34" alt="Scripting Solutions for eBusiness Integration" border="0"&gt;&lt;/td&gt;</div><div class='del'>-            &lt;/tr&gt;</div><div class='del'>-            &lt;tr&gt;</div><div class='del'>-              &lt;td width="18" valign="TOP"&gt;&lt;img src="image4" width="18" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="58"&gt;&lt;a href="/products/" onMouseOver="msover(4, 'http://images.scriptics.com/images/ProductsMouseOff.gif') ; return true ;" onMouseOut="msover(4, 'http://images.scriptics.com/images/ProductsOff.gif') ; return true ;"&gt;&lt;img src="image5" width="58" height="36" alt="Products" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="14" valign="TOP"&gt;&lt;img src="image6" width="14" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="69"&gt;&lt;a href="/customers/" onMouseOver="msover(6, 'http://images.scriptics.com/images/CustomersMouseOff.gif') ; return true ;" onMouseOut="msover(6, 'http://images.scriptics.com/images/CustomersOff.gif') ; return true ;"&gt;&lt;img src="image7" width="69" height="36" alt="Customers" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="14" valign="TOP"&gt;&lt;img src="image6" width="14" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="60"&gt;&lt;a href="/partners/" onMouseOver="msover(8, 'http://images.scriptics.com/images/PartnersMouseOff.gif') ; return true ;" onMouseOut="msover(8, 'http://images.scriptics.com/images/PartnersOff.gif') ; return true ;"&gt;&lt;img src="image8" width="60" height="36" alt="Partners" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="14" valign="TOP"&gt;&lt;img src="image6" width="14" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="56"&gt;&lt;a href="/services/" onMouseOver="msover(10, 'http://images.scriptics.com/images/ServicesMouseOff.gif') ; return true ;" onMouseOut="msover(10, 'http://images.scriptics.com/images/ServicesOff.gif') ; return true ;"&gt;&lt;img src="image9" width="56" height="36" alt="Services" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="14" valign="TOP"&gt;&lt;img src="image10" width="14" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="88"&gt;&lt;a href="/resource/" onMouseOver="msover(12, 'http://images.scriptics.com/images/ResourceMouseOn.gif') ; return true ;" onMouseOut="msover(12, 'http://images.scriptics.com/images/ResourceOn.gif') ; return true ;"&gt;&lt;img src="image11" width="88" height="36" alt="Tcl Resources" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="14" valign="TOP"&gt;&lt;img src="image12" width="14" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="57"&gt;&lt;a href="/company/" onMouseOver="msover(14, 'http://images.scriptics.com/images/CompanyMouseOff.gif') ; return true ;" onMouseOut="msover(14, 'http://images.scriptics.com/images/CompanyOff.gif') ; return true ;"&gt;&lt;img src="image13" width="57" height="36" alt="Company" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="8" valign="TOP"&gt;&lt;img src="image14" width="8" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="50" valign="TOP"&gt;&lt;img src="image15" width="50" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-              &lt;td width="14" valign="TOP"&gt;&lt;img src="image16" width="14" height="36" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-            &lt;/tr&gt;</div><div class='del'>-          &lt;/table&gt;</div><div class='del'>-        &lt;/td&gt;</div><div class='del'>-      &lt;/tr&gt;</div><div class='del'>-    &lt;/table&gt; &lt;script language="Javascript"&gt;</div><div class='del'>-   &lt;!--</div><div class='del'>-	function msover(num, file )</div><div class='del'>-	{</div><div class='del'>-	    old = (((navigator.appName=='Netscape') &amp;&amp;</div><div class='del'>-	              (parseInt(navigator.appVersion)&lt;=3.0 )))</div><div class='del'>-	  if ( !old ) {</div><div class='del'>-		document.images[num].src=file</div><div class='del'>-	  }</div><div class='del'>-        }</div><div class='del'>-	//--&gt;</div><div class='del'>-   &lt;/SCRIPT&gt; </div><div class='del'>-	</div><div class='del'>-&lt;!-- MenuSubLevel Resource Software Extensions Tk --&gt;</div><div class='del'>-</div><div class='del'>-&lt;table cellpadding="0" cellspacing="0" border="0"&gt;</div><div class='del'>-</div><div class='del'>-&lt;!-- Left Hand Column--&gt;</div><div class='del'>-</div><div class='del'>-&lt;tr&gt;&lt;td valign="top" width="120"&gt;&lt;table cellpadding="0" cellspacing="0" border="0" width="120"&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image17" width="120" height="4" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/software/"&gt;&lt;img src="image18" width="120" height="11" alt="Software" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image19" width="120" height="4" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/software/tcltk/"&gt;&lt;img src="image20" width="120" height="11" alt="Tcl/Tk Core" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image19" width="120" height="4" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/software/applications/"&gt;&lt;img src="image21" width="120" height="11" alt="Applications" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image22" width="120" height="4" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/software/extensions/"&gt;&lt;img src="image23" width="120" height="11" alt="Extensions" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image24" width="120" height="6" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/software/patches/"&gt;&lt;img src="image25" width="120" height="11" alt="Patches" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image19" width="120" height="4" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/software/java/"&gt;&lt;img src="image26" width="120" height="11" alt="Tcl &amp;amp; Java" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image19" width="120" height="4" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/software/ports/"&gt;&lt;img src="image27" width="120" height="11" alt="Tcl/Tk Ports" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image19" width="120" height="4" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/software/tools/"&gt;&lt;img src="image28" width="120" height="11" alt="Tools" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image29" width="120" height="6" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/doc/"&gt;&lt;img src="image30" width="120" height="11" alt="Documentation" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image31" width="120" height="5" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/resource/community/"&gt;&lt;img src="image32" width="120" height="11" alt="Community" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image31" width="120" height="5" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/live/bydate"&gt;&lt;img src="image33" width="120" height="11" alt="What's New" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image31" width="120" height="5" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/forms/urlnote.html"&gt;&lt;img src="image34" width="120" height="11" alt="Add URL" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image31" width="120" height="5" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/live/keyword"&gt;&lt;img src="image35" width="120" height="11" alt="Keyword Search" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image31" width="120" height="5" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;a href="/live/sitemap"&gt;&lt;img src="image36" width="120" height="11" alt="Index" border="0"&gt;&lt;/a&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="120" valign="TOP"&gt;&lt;img src="image37" width="120" height="6" alt="" border="0"&gt;&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;!-- End Left Column --&gt;&lt;/td&gt;&lt;!-- Right Hand Column --&gt;&lt;td valign="top" width="548" align="left"&gt;&lt;table cellpadding="0" cellspacing="0" border="0" width="548"&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;td width="295" valign="TOP"&gt;&lt;img src="image38" width="295" height="42" alt="Resource" border="0"&gt;&lt;/td&gt;</div><div class='del'>-      &lt;td width="187" valign="bottom" align="right"&gt;&lt;FORM action="/live/keyword"&gt;&lt;img src="image39" width="46" height="24" alt="" border="0"&gt;&lt;INPUT TYPE="TEXT" SIZE="10" MAXLENGTH="35" NAME="keywords"&gt;&lt;INPUT type="IMAGE" border="0" img="img" src="http://images.scriptics.com/images/Go.gif" value="submit" width="33" height="24"&gt;&lt;/FORM&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-  &lt;/table&gt;</div><div class='del'>-  &lt;!-- 2 Columns for spacer --&gt;</div><div class='del'>-  &lt;table cellpadding="0" cellspacing="0" border="0" width="548"&gt;</div><div class='del'>-    &lt;tr&gt;</div><div class='del'>-      &lt;!-- Spacer Column --&gt;</div><div class='del'>-      &lt;td valign="top" width="10"&gt;</div><div class='del'>-      &amp;nbsp;</div><div class='del'>-      &lt;/td&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      &lt;td valign="top" width="548"&gt;&lt;font face="Geneva, Helvetica, Arial" size="2"&gt;&lt;h1&gt;Tcl Resource Center&lt;/h1&gt;</div><div class='del'>-&lt;font size="+1"&gt;&lt;a href="/resource/"&gt;Top&lt;/a&gt;&amp;gt;&lt;a href="/resource/software/" =""&gt;Software Central&lt;/a&gt;&amp;gt;&lt;a href="/resource/software/extensions/" =""&gt;Extensions&lt;/a&gt;&amp;gt;Tk Widgets&lt;/font&gt;&lt;font size="-1"&gt;&lt;br&gt;Viewed by name (&lt;a href="/resource/software/extensions/tk/?sortby=date"&gt;By date&lt;/a&gt;)&lt;/font&gt;&lt;br&gt;</div><div class='del'>-&lt;p&gt;Tk is a toolkit for building graphical user interfaces with Tcl.</div><div class='del'>-    Your Tcl/Tk scripts run on UNIX, Windows, and Macintosh.&lt;p&gt;</div><div class='del'>-&lt;font face="Geneva, Helvetica, Arial"&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/font&gt;&lt;dl&gt;</div><div class='del'>-&lt;dt&gt;&lt;b&gt;&lt;a href="http://marge.phys.washington.edu/%7Ezager/blt80-unoff-exe.zip" =""&gt;BLT 8.0 Unofficial zip and DLL&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;This is a compiled version of BLT 8.0 "unofficial" for</div><div class='del'>-the Windows platform. &lt;a href="/live/annotate?url=http%3a%2f%2fmarge%2ephys%2ewashington%2eedu%2f%257Ezager%2fblt80%2dunoff%2dexe%2ezip"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(September 24, 1999 06:31)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="ftp://ftp.neosoft.com/languages/tcl/sorted/unknown/blt8.0p2-unoff.tgz" =""&gt;BLT 8.0p2 Unofficial tar file&lt;/a&gt;&lt;a name="bltunoff"&gt;&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;This is a contributed patch to make BLT compatible with Tcl/Tk 8.0p2.  While still "unofficial", it is widely used.</div><div class='del'>-    Make sure you get the 8.0p2 version because the 8.0 version does</div><div class='del'>-    not compile under windows.</div><div class='del'>-    There is also a &lt;a href="ftp://ftp.neosoft.com/languages/sorted/devel/blt2.3-8.1.tar.gz"&gt;2.3-8.1 version&lt;/a&gt; that has been patched to work with 8.1.</div><div class='del'>-    &lt;a href="ftp://ftp.neosoft.com/languages/tcl/sorted/unknown/blt8.0p2-unoff.README"&gt;README file&lt;/a&gt;. &lt;a href="/live/annotate?url=ftp%3a%2f%2fftp%2eneosoft%2ecom%2flanguages%2ftcl%2fsorted%2funknown%2fblt8%2e0p2%2dunoff%2etgz"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 30, 1999 06:38)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.tcltk.com/blt/" =""&gt;BLT Home Page&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;George Howlett&lt;/b&gt;, Version &lt;b&gt;2.3&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;Tk 4.1 through Tk 8.1&lt;/b&gt;</div><div class='del'>-&lt;br&gt;&lt;a href="ftp://ftp.tcltk.com/pub/blt/"&gt;Download&lt;/a&gt;, &lt;a href="ftp://ftp.tcltk.com/pub/blt/BLT2.3.tar.gz"&gt;BLT2.3.tar.gz&lt;/a&gt;, &lt;a href="ftp://ftp.tcltk.com/pub/blt/BLT2.4h.tar.gz"&gt;BLT2.4h.tar.gz&lt;/a&gt;, &lt;a href="ftp://ftp.tcltk.com/pub/blt/BLT2.4i.tar.gz"&gt;BLT2.4i.tar.gz&lt;/a&gt;, &lt;a href="ftp://ftp.tcltk.com/pub/blt/blt2.4i-for-8.0.exe"&gt;blt2.4i-for-8.0.exe&lt;/a&gt;, &lt;a href="ftp://ftp.tcltk.com/pub/blt/blt2.4i-for-8.1.exe"&gt;blt2.4i-for-8.1.exe&lt;/a&gt;&lt;br&gt;BLT is a set of widgets for Tk, including a graph widget,</div><div class='del'>-bar chart, drag&amp;drop, a simple command tracer, and much more.</div><div class='del'>-The 2.4 release, which is still under development, works with 8.0</div><div class='del'>-or higher.</div><div class='del'>-There are also an "&lt;a href="#bltunoff"&gt;unofficial&lt;/a&gt;" release for 8.0p2</div><div class='del'>-and 8.1a2 that were not done by the author. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2etcltk%2ecom%2fblt%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(October 26, 1999 09:43)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.unifix-online.com/BWidget/index.html" =""&gt;BWidget&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;A set of native Tk 8.x Widgets using Tcl8.x namespaces. </div><div class='del'>-The ToolKit is available under Unix/X11 and Windows.</div><div class='del'>-The BWidget(s) have a professional look&amp;feel as in other </div><div class='del'>-well known Toolkits (Tix or Incr Widget) but the concept is </div><div class='del'>-radically different because everything is native </div><div class='del'>-so no platform compilation, no compiled extension</div><div class='del'>-library are needed. The code is 100 Pure Tcl/Tk. </div><div class='del'>-More 30 components : Notebook, PageManager, Tree, PanedWindow, ButtonBox,</div><div class='del'>-ScrollView, ComboBox, SpinBox, ListBox, SelectFont, SelectColor,</div><div class='del'>-ProgressBare ... &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2eunifix%2donline%2ecom%2fBWidget%2findex%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(September 06, 1999 09:58)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://purl.oclc.org/net/nijtmans/dash.html" =""&gt;Dash Patch for Tk&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;This patch has many enhancements to the Tk and its canvas</div><div class='del'>-widget, including dashed lines, smoothed polygons,</div><div class='del'>-and performance enhancements. &lt;a href="/live/annotate?url=http%3a%2f%2fpurl%2eoclc%2eorg%2fnet%2fnijtmans%2fdash%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(November 21, 1999 06:33)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.hwaci.com/sw/et" =""&gt;Embedded Tk (et)&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:drh@acm.org" =""&gt;Richard Hipp&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;8.0b5&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;Tk 4.0, 4.1, 4.2, 8.0&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www.hwaci.com/sw/et/et80b5.tar.gz"&gt;et80b5.tar.gz&lt;/a&gt;&lt;br&gt;Embedded Tk or ``ET'' is tool for making stand-alone executables out of a mixture of C or C++ and Tcl/Tk.</div><div class='del'>-Using ET you can invoke a short Tcl/Tk script in the middle of a C routine, or you can invoke a C routine in the</div><div class='del'>-middle of a Tcl/Tk script. ET also bundles external Tcl/Tk scripts (including the standard Tcl/Tk startup scripts)</div><div class='del'>-into the executable so that the executable can be run on another binary-compatible computer that doesn't have</div><div class='del'>-Tcl/Tk installed.  &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2ehwaci%2ecom%2fsw%2fet"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 19, 1999 15:35)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.purl.org/net/hobbs/tcl/script/tkcon/" =""&gt;Enhanced Tk Console (TkCon)&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:jeffrey.hobbs@oen.siemens.de" =""&gt;Jeff Hobbs&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;1.3&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;Tk 4.1 through Tk 8.1&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www.purl.org/net/hobbs/tcl/script/tkcon/tkcon.tar.gz"&gt;tkcon.tar.gz&lt;/a&gt;&lt;br&gt;TkCon is a replacement for the standard console that comes with Tk (on Windows/Mac, but also works on</div><div class='del'>-</div><div class='del'>-Unix). The console itself provides many more features than the standard console.  &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2epurl%2eorg%2fnet%2fhobbs%2ftcl%2fscript%2ftkcon%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:06)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.scriptmeridian.org/projects/tk/" =""&gt;Frontier-Tk ScriptMeridian project&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;This project seeks to integrate the Tk toolkit</div><div class='del'>-with the Frontier scripting language. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2escriptmeridian%2eorg%2fprojects%2ftk%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 19, 1999 15:36)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://purl.oclc.org/net/nijtmans/img.html" =""&gt;Img image format extension&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;This package enhances Tk, adding support for many other Image formats: </div><div class='del'>-BMP, XBM, XPM, GIF (with transparency), PNG,</div><div class='del'>-JPEG, TIFF and postscript.</div><div class='del'>-This is implemented as a shared library that can be dynamically loaded into </div><div class='del'>-Tcl/Tk.</div><div class='del'>- &lt;a href="/live/annotate?url=http%3a%2f%2fpurl%2eoclc%2eorg%2fnet%2fnijtmans%2fimg%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(November 21, 1999 06:35)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://purl.oclc.org/net/oakley/tcl/mclistbox/index.html" =""&gt;mclistbox - a multi-column listbox widget&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;mclistbox is a multi-column listbox that is</div><div class='del'>-written in pure tcl and runs on all platforms</div><div class='del'>-that support tcl/tk 8.0 or higher. This widget</div><div class='del'>-requires no other extensions; it is completely</div><div class='del'>-standalone. &lt;a href="/live/annotate?url=http%3a%2f%2fpurl%2eoclc%2eorg%2fnet%2foakley%2ftcl%2fmclistbox%2findex%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 19, 1999 15:37)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://home.t-online.de/home/dshepherd/tkview.htm" =""&gt;MFC views C++ class for embedding Tk&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;The idea of embedding Tk in MFC windows always seemed very enticing but information was sparse and contradictory - on a</div><div class='del'>- scale between "very easy" and "not yet possible". The only thing for it was to have a go and lo, it wasn't that hard after all.  </div><div class='del'>- CTkView is a C++ class which can be used in MFC SDI or MDI applications. An instance of CTkView hosts an embedded Tk</div><div class='del'>- toplevel widget and performs some management chores for the widget so that it can size, update and react correctly to Windows</div><div class='del'>- events.   &lt;a href="/live/annotate?url=http%3a%2f%2fhome%2et%2donline%2ede%2fhome%2fdshepherd%2ftkview%2ehtm"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 19, 1999 15:38)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.cs.umd.edu/hcil/pad++" =""&gt;Pad++&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:pad-info@cs.umd.edu" =""&gt;Ben Bederson et al&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;0.9p1&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;8.0&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www.cs.umd.edu/hcil/pad++/download.html"&gt;download.html&lt;/a&gt;&lt;br&gt;Pad++ is a Tk widget that provides a Zoomable User Interface (ZUI) that supports real-time interactive zoomable graphics in a fashion similar to the Tk Canvas widget.  Pad++ supports tens of thousands of objects which include text, images, graphics, portals, lenses, simple html (and more), including transparency and rotation. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2ecs%2eumd%2eedu%2fhcil%2fpad%2b%2b"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 19, 1999 15:39)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://home.t-online.de/home/sesam.com/freeware.htm" =""&gt;Progressbar&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;Progressbar is a megawidget written in pure tcl (ie: no compiling required - runs on all platforms Macintosh, Unix, Windows). </div><div class='del'>-Its primary purpose is to show the progress of any action in percent. &lt;a href="/live/annotate?url=http%3a%2f%2fhome%2et%2donline%2ede%2fhome%2fsesam%2ecom%2ffreeware%2ehtm"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(January 24, 2000 09:19)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://jfontain.free.fr/" =""&gt;scwoop (Simple Composite Widget Object Oriented Package)&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;Scwoop is a composite widget (also known as mega widget) extension to the great Tk widget library. Scwoop is</div><div class='del'>-entirely written in Tcl using the stooop (Simple Tcl Only Object Oriented Programming) extension. &lt;a href="/live/annotate?url=http%3a%2f%2fjfontain%2efree%2efr%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(January 09, 2000 02:10)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www2.clearlight.com/~oakley/tcl/supertext.html" =""&gt;Supertext - tk text widget with unlimited undo&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:oakley@channelpoint.com" =""&gt;Bryan Oakley&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;1.0b1&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;Tcl 8.0&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www2.clearlight.com/~oakley/tcl/supertext.tcl"&gt;supertext.tcl&lt;/a&gt;&lt;br&gt;Supertext is a package that provides a tk text widget with full undo and the ability to execute procedures both before and after a text</div><div class='del'>-widget command has been processed. Supertext may be used as-is, or for the brave it may be used in place of the standard text</div><div class='del'>-widget.  &lt;a href="/live/annotate?url=http%3a%2f%2fwww2%2eclearlight%2ecom%2f%7eoakley%2ftcl%2fsupertext%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:06)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.hwaci.com/sw/tk/nbpi.html" =""&gt;Tabbed Notebook Widget&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:drh@acm.org" =""&gt;Richard Hipp&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;1.0&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;Tk 4.1 or later.&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www.hwaci.com/sw/tk/notebook.tcl"&gt;notebook.tcl&lt;/a&gt;&lt;br&gt;This implements a tabbed notebook using</div><div class='del'>-a canvas widget and embedded frames.</div><div class='del'>-This is pure Tcl</div><div class='del'>-code - not a C extension. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2ehwaci%2ecom%2fsw%2ftk%2fnbpi%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:08)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.tcltk.com/ellson/ftp/Gdtclft2.0.README" =""&gt;Tcl GD - graphics&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;John Ellson and Spencer Thomas&lt;/b&gt;, Version &lt;b&gt;2.0&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;8.0 and higher&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www.tcltk.com/ellson/ftp/Gdtclft2.0.tar.gz"&gt;Gdtclft2.0.tar.gz&lt;/a&gt;&lt;br&gt;</div><div class='del'>-	Thomas Boutell's Gd package provides a convenient way to generate</div><div class='del'>-	    PNG images with a C program. If you prefer Tcl for CGI</div><div class='del'>-		applications, you'll want the TCL GD extension. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2etcltk%2ecom%2fellson%2fftp%2fGdtclft2%2e0%2eREADME"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 19, 1999 14:52)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.stratasys.com/software/metagui" =""&gt;The Meta-GUI Tools&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;The Meta-GUI tools provide a framework for quickly building full</div><div class='del'>-GUI applications. The GUI is rendered by a run-time engine</div><div class='del'>-based on a hierarchical set of definitions you provide. At the bottom</div><div class='del'>-of the hierarchy are abstract data types such as length, angle,</div><div class='del'>-string, etc., and these are used to progressively build up frames,</div><div class='del'>-dialogs, toolbars, menus, and operations. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2estratasys%2ecom%2fsoftware%2fmetagui"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:10)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://jfontain.free.fr/" =""&gt;Tkpiechart Home Page&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;Tkpiechart is a Tcl-only extension that allows the programmer to create and dynamically update 2D or 3D pie</div><div class='del'>-charts in a Tcl/Tk application.  This uses the stooop package and builds</div><div class='del'>-pie charts on a Tk canvas. &lt;a href="/live/annotate?url=http%3a%2f%2fjfontain%2efree%2efr%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(January 09, 2000 02:12)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.cygnus.com/~irox/tkprint/" =""&gt;TkPrint&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;TkPrint is an extension that allows you to print from a</div><div class='del'>-        Tk widget. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2ecygnus%2ecom%2f%7eirox%2ftkprint%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(October 11, 1999 09:58)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.purl.org/net/hobbs/tcl/capp/" =""&gt;TkTable Home Page&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;The TkTable widget.  The &lt;code&gt;table&lt;/code&gt; command creates a </div><div class='del'>-2-dimensional grid of cells. The table can use a Tcl array variable or Tcl</div><div class='del'>-</div><div class='del'>-command for data storage and retrieval. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2epurl%2eorg%2fnet%2fhobbs%2ftcl%2fcapp%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(November 18, 1999 09:25)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://ftp.austintx.net/users/jatucker/TkTextmatrix/default.htm" =""&gt;TkTextMatrix (spreadsheet)&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:jatucker@austin.dsccc.com" =""&gt;John Arthur Tucker&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;4.1&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;Tk 4.1&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://ftp.austintx.net/users/jatucker/TkTextmatrix/download.htm"&gt;download.htm&lt;/a&gt;, &lt;a href="http://ftp.austintx.net/users/jatucker/TkTextmatrix/textmatrix4.1.tar.gz"&gt;textmatrix4.1.tar.gz&lt;/a&gt;&lt;br&gt;A Tcl/Tk spreadsheet widget, TkTextmatrix, which is implemented in C++ and is</div><div class='del'>-             basically a Tk Canvas widget plus extra behavior for manipulating rows and columns of cell</div><div class='del'>-             items many times faster than with a plain Tk Canvas.  It actually inserts text nearly as fast</div><div class='del'>-             as the Tk Text widget.  If you work with or are interested in creating your own Tcl/Tk widgets</div><div class='del'>-             in C++,  you might want to take a look at the C++ widget library included with this</div><div class='del'>-             distribution. &lt;a href="/live/annotate?url=http%3a%2f%2fftp%2eaustintx%2enet%2fusers%2fjatucker%2fTkTextmatrix%2fdefault%2ehtm"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:14)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.cs.umd.edu/~bederson/Togl.html" =""&gt;ToGL - a Tk Open GL widget&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;Togl is a Tk widget for OpenGL rendering. Togl is based on OGLTK, originally written by Benjamin Bederson at the</div><div class='del'>-University of New Mexico (who has since moved to the University of Maryland). Togl adds the new features: </div><div class='del'>-&lt;ul&gt;</div><div class='del'>-&lt;li&gt;     color-index mode support including color allocation functions </div><div class='del'>-&lt;li&gt;     support for requesting stencil, accumulation, alpha buffers, etc </div><div class='del'>-&lt;li&gt;     multiple OpenGL drawing widgets </div><div class='del'>-&lt;li&gt;     OpenGL extension testing from Tcl </div><div class='del'>-&lt;li&gt;     simple, portable font support </div><div class='del'>-&lt;li&gt;     overlay plane support </div><div class='del'>-&lt;/ul&gt;</div><div class='del'>-Togl allows one to create and manage a special Tk/OpenGL widget with Tcl and render into it with a C program. That is,</div><div class='del'>-a typical Togl program will have Tcl code for managing the user interface and a C program for computations and</div><div class='del'>-OpenGL rendering.  &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2ecs%2eumd%2eedu%2f%7ebederson%2fTogl%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:14)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.hwaci.com/sw/tk/treepi.html" =""&gt;Tree Widget&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;This implements a tree display in a canvas widget.</div><div class='del'>-It is similar in layout to that of the</div><div class='del'>-Windows explorer file viewer.  This is pure Tcl</div><div class='del'>-code - not a C extension. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2ehwaci%2ecom%2fsw%2ftk%2ftreepi%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(September 29, 1999 14:37)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.du.edu/~mschwart/tcl-tk.htm" =""&gt;Windows Extensions for Tcl/Tk (Michael Schwartz)&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;This site has pointers to several extensions specific to the</div><div class='del'>-Windows platform.  The extensions provide printing,</div><div class='del'>-a MAPI interface to send email, and an interface to manipulate</div><div class='del'>-.INI files, among other things. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2edu%2eedu%2f%7emschwart%2ftcl%2dtk%2ehtm"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(October 07, 1999 10:50)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.tcltk.com/iwidgets/" =""&gt;[incr Widgets] Home Page&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;[incr Widgets] is a set of megawidgets (combo boxes, etc.) that are</div><div class='del'>-upon the [incr Tcl] object system and the [incr Tk] megawidget</div><div class='del'>-framework.  This comes bundled with the</div><div class='del'>-&lt;a href="http://www.tcltk.com/itcl/"&gt;[incr Tcl]&lt;/a&gt; distributions. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2etcltk%2ecom%2fiwidgets%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(September 05, 1999 16:08)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www1.clearlight.com/~oakley/tcl/combobox/index.html" =""&gt;combobox&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:oakley@channelpoint.com" =""&gt;Bryan Oakley&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;1.03&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;8.x&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www1.clearlight.com/~oakley/tcl/combobox/combobox.tcl"&gt;combobox.tcl&lt;/a&gt;&lt;br&gt;combobox is a pure-tcl implementation of a combobox widget. It is</div><div class='del'>-entirely self contained and does not require any other OO or megawidget</div><div class='del'>-extension. It supports both editable and non-editable entries, and</div><div class='del'>-provides the ability to call a procedure anytime the value of the combobox</div><div class='del'>-changes. &lt;a href="/live/annotate?url=http%3a%2f%2fwww1%2eclearlight%2ecom%2f%7eoakley%2ftcl%2fcombobox%2findex%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:15)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.multimania.com/droche/rnotebook/index.html" =""&gt;Rnotebook&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:dan@lectra.com" =""&gt;Daniel Roche&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;1.0&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;8.0 or higher&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www.multimania.com/droche/rnotebook/index.html"&gt;index.html&lt;/a&gt;&lt;br&gt;This implements a resizeable notebook</div><div class='del'>-widget in pure tcl/tk &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2emultimania%2ecom%2fdroche%2frnotebook%2findex%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 19, 1999 15:39)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.tregar.com/samdi.html" =""&gt;saMDI v1.0a1 Multi-Document Interface Extension&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;A multi-document interface (MDI) extension for TCL/Tk 8.0.</div><div class='del'>-This is a common interface format in Microsoft Windows that lets a parent window contain multiple child windows.</div><div class='del'>-In effect you get a window manager inside a window!</div><div class='del'>-Uses and includes the STOOOP object-oriented extension by</div><div class='del'>-Jean-Luc Fontaine.</div><div class='del'>-saMDI v1.0a1 GPL Copyright 1998 Sam Tregar. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2etregar%2ecom%2fsamdi%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:07)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://tix.mne.com/htdocs/tix/index.html" =""&gt;Tix Support Site&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:tix@mne.com" =""&gt;Ioi Lam, (adopted by Gregg Squires)&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;4.1&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;Tcl 7.4 through Tcl 8.0&lt;/b&gt;</div><div class='del'>-&lt;br&gt;&lt;a href="ftp://ftp.tix.mne.com/pub/tix/"&gt;Download&lt;/a&gt;, &lt;a href="ftp://ftp.tix.mne.com/pub/tix/Tix4.1.0.006.tar.gz"&gt;Tix4.1.0.006.tar.gz&lt;/a&gt;, &lt;a href="ftp://ftp.tix.mne.com/pub/tix/Tix41p6.zip"&gt;Tix41p6.zip&lt;/a&gt;, &lt;a href="ftp://ftp.tix.mne.com/pub/tix/win41p6bin.zip"&gt;win41p6bin.zip&lt;/a&gt;&lt;br&gt;&lt;b&gt;Tix has found a new home!&lt;/b&gt;</div><div class='del'>- &lt;br&gt;</div><div class='del'>- Tix provides over 40 new Tk including the</div><div class='del'>-combo box, file selection dialogs, paned widget,</div><div class='del'>-notebook, hierarchical list, directory tree, and more.</div><div class='del'>-  &lt;a href="/live/annotate?url=http%3a%2f%2ftix%2emne%2ecom%2fhtdocs%2ftix%2findex%2ehtml"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:11)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="ftp://ftp.archive.eso.org/pub/tree" =""&gt;Tk Tree Widget (C++)&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;Tk Tree widget for Tcl8.0.3.</div><div class='del'>-</div><div class='del'>-This version contains (optional) support for \[incr Tcl\] and \[incr Tk\]</div><div class='del'>-version 3.0.</div><div class='del'>-&lt;br&gt;</div><div class='del'>-With the tree widget, you can display a tree in a Tk canvas. The nodes</div><div class='del'>-can be made up of any number of canvas items or even other Tk widgets.</div><div class='del'>-You create the objects that make up a node and the line that connects</div><div class='del'>-it to its parent and pass them to the tree widget. After this the tree</div><div class='del'>-widget manages the positions of the nodes and end points of the tree</div><div class='del'>-lines.  Operations are available for inserting, moving and removing</div><div class='del'>-nodes and subtrees and for querrying the position of a node in the</div><div class='del'>-tree. The tree can be displayed horizontally or vertically.</div><div class='del'>- &lt;a href="/live/annotate?url=ftp%3a%2f%2fftp%2earchive%2eeso%2eorg%2fpub%2ftree"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 25, 1999 03:14)&lt;/font&gt;&lt;/i&gt;&lt;dt&gt;&lt;b&gt;&lt;a href="http://www.purl.org/net/hobbs/tcl/script/widget/" =""&gt;widget, simple megawidget package&lt;/a&gt;&lt;/b&gt;</div><div class='del'>-&lt;dd&gt;</div><div class='del'>-			Author &lt;b&gt;&lt;a href="mailto:jeffrey.hobbs@oen.siemens.de" =""&gt;Jeffrey Hobbs&lt;/a&gt;&lt;/b&gt;, Version &lt;b&gt;0.9&lt;/b&gt;,</div><div class='del'>-			Works with &lt;b&gt;Tcl/Tk 8.0 or higher&lt;/b&gt;</div><div class='del'>-&lt;br&gt;Download: &lt;a href="http://www.purl.org/net/hobbs/tcl/script/widget/widget-0.9.tar.gz"&gt;widget-0.9.tar.gz&lt;/a&gt;&lt;br&gt;This is a package of</div><div class='del'>- megawidgets (i.e., compound widgets) that work almost exactly like Tk widgets.</div><div class='del'>- You can also build your own new megawidgets. </div><div class='del'>-Includes: combobox, hierarchy, console, progressbar,</div><div class='del'>-tabnotebook, validating entry, pane geometry manager, baloon help. &lt;a href="/live/annotate?url=http%3a%2f%2fwww%2epurl%2eorg%2fnet%2fhobbs%2ftcl%2fscript%2fwidget%2f"&gt;Edit&lt;/a&gt;</div><div class='del'>- &lt;i&gt;&lt;font size="-1"&gt;(August 23, 1999 12:16)&lt;/font&gt;&lt;/i&gt;&lt;/dl&gt;</div><div class='del'>-&lt;hr&gt;&lt;p&gt;&lt;center&gt;&lt;font size="-1" face="Geneva, Helvetica, Arial"&gt;&lt;br&gt;&lt;a href="#TOP"&gt;&lt;b&gt;Top&lt;/b&gt;&lt;/a&gt;&lt;br&gt;&lt;!-- key ResourceSoftwareExtensions --&gt;&lt;a href="/"&gt;Home&lt;/a&gt;</div><div class='del'>- | &lt;a href="/products/"&gt;Products&lt;/a&gt;</div><div class='del'>- | &lt;a href="/customers/"&gt;Customers&lt;/a&gt;</div><div class='del'>- | &lt;a href="/partners/"&gt;Partners&lt;/a&gt;</div><div class='del'>- | &lt;a href="/services/"&gt;Services&lt;/a&gt;</div><div class='del'>- | &lt;a href="/resource/"&gt;Tcl Resources&lt;/a&gt;</div><div class='del'>- | &lt;a href="/company/"&gt;Company&lt;/a&gt;</div><div class='del'>-&lt;br&gt;&lt;a href="/live/keyword"&gt;Search&lt;/a&gt;</div><div class='del'>- | &lt;a href="/live/map"&gt;Site Map&lt;/a&gt;</div><div class='del'>- | &lt;a href="/company/feedback.html?url=%2fresource%2fsoftware%2fextensions%2ftk%2f"&gt;Feedback&lt;/a&gt;</div><div class='del'>- | &lt;a href="/company/contact.html"&gt;Contact Us&lt;/a&gt;</div><div class='del'>- | &lt;a href="mailto:info@scriptics.com"&gt;info@scriptics.com&lt;/a&gt;</div><div class='del'>-</div><div class='del'>- &lt;SCRIPT LANGUAGE="Javascript"&gt;</div><div class='del'>-&lt;!--</div><div class='del'>-         browser = (((navigator.appName == "Netscape") &amp;&amp;(parseInt(navigator.appVersion) &gt;= 3 )) || ((navigator.appName =="Microsoft Internet Explorer") &amp;&amp; (parseInt(navigator.appVersion) &gt;= 4 )))</div><div class='del'>-</div><div class='del'>-  if ( browser )</div><div class='del'>-   {</div><div class='del'>-        over = new MakeImageArray(10)</div><div class='del'>-        over[0].src = "http://images.scriptics.com/images/ProductsMouseOff.gif"</div><div class='del'>-        over[1].src = "http://images.scriptics.com/images/CustomersMouseOff.gif"</div><div class='del'>-        over[2].src = "http://images.scriptics.com/images/PartnersMouseOff.gif"</div><div class='del'>-        over[3].src = "http://images.scriptics.com/images/ServicesMouseOff.gif"</div><div class='del'>-        over[4].src = "http://images.scriptics.com/images/ResourceMouseOff.gif"</div><div class='del'>-        over[5].src = "http://images.scriptics.com/images/CompanyMouseOff.gif"</div><div class='del'>-        over[6].src = "http://images.scriptics.com/images/homeMainRollover1.gif"</div><div class='del'>-        over[7].src = "http://images.scriptics.com/images/homeMainRollover2.gif"</div><div class='del'>-        over[8].src = "http://images.scriptics.com/images/homeMainRollover3.gif"</div><div class='del'>-        over[9].src = "http://images.scriptics.com/images/homeMainRollover3.gif"</div><div class='del'>-</div><div class='del'>-  }</div><div class='del'>-  </div><div class='del'>-  function MakeImageArray(n)  {</div><div class='del'>-        this.length = n</div><div class='del'>-        for (var i = 0; i&lt;=n; i++)="i++)" {="{" this[i]="this[i]" ="" new="new" Image()="Image()" }="}" return="return" this="this" }="}" //="//" --="--"&gt;</div><div class='del'>-  &lt;/SCRIPT&gt;&lt;br&gt;</div><div class='del'>-    &lt;font size="2"&gt;</div><div class='del'>-    &amp;copy; 1998-2000 Scriptics Corporation.  All rights reserved.</div><div class='del'>-    &lt;a href="/legal_notice.html"&gt;Legal Notice&lt;/a&gt; | &lt;A href="" /privacy.html="/privacy.html"&gt; </div><div class='del'>-    Privacy Statement&lt;/a&gt;</div><div class='del'>-    &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/Body&gt;</div><div class='del'>-&lt;/Html&gt;
\ No newline at end of file</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image1 b/ext/tk/sample/tkextlib/tkHTML/page3/image1<br/>deleted file mode 100644<br/>index 814d1e8f08..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image1?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image1</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image10 b/ext/tk/sample/tkextlib/tkHTML/page3/image10<br/>deleted file mode 100644<br/>index 45001faf05..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image10?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image10</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image11 b/ext/tk/sample/tkextlib/tkHTML/page3/image11<br/>deleted file mode 100644<br/>index 7c4c170f21..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image11?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image11</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image12 b/ext/tk/sample/tkextlib/tkHTML/page3/image12<br/>deleted file mode 100644<br/>index 903e7344a6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image12?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image12</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image13 b/ext/tk/sample/tkextlib/tkHTML/page3/image13<br/>deleted file mode 100644<br/>index 226d4f68c2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image13?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image13</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image14 b/ext/tk/sample/tkextlib/tkHTML/page3/image14<br/>deleted file mode 100644<br/>index 8e8c71814c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image14?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image14</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image2 b/ext/tk/sample/tkextlib/tkHTML/page3/image2<br/>deleted file mode 100644<br/>index 2ddeb3258c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image2?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image2</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image3 b/ext/tk/sample/tkextlib/tkHTML/page3/image3<br/>deleted file mode 100644<br/>index 1651ba7e41..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image3?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image3</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image4 b/ext/tk/sample/tkextlib/tkHTML/page3/image4<br/>deleted file mode 100644<br/>index b565c8dd0e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image4?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image4</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image5 b/ext/tk/sample/tkextlib/tkHTML/page3/image5<br/>deleted file mode 100644<br/>index e1268b81c0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image5?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image5</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image6 b/ext/tk/sample/tkextlib/tkHTML/page3/image6<br/>deleted file mode 100644<br/>index 1a6b260b40..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image6?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image6</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image7 b/ext/tk/sample/tkextlib/tkHTML/page3/image7<br/>deleted file mode 100644<br/>index cec7aa04d8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image7?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image7</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image8 b/ext/tk/sample/tkextlib/tkHTML/page3/image8<br/>deleted file mode 100644<br/>index ad0d748d65..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image8?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image8</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/image9 b/ext/tk/sample/tkextlib/tkHTML/page3/image9<br/>deleted file mode 100644<br/>index 46ade3018b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/image9?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/image9</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page3/index.html b/ext/tk/sample/tkextlib/tkHTML/page3/index.html<br/>deleted file mode 100644<br/>index ce92e8a22e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page3/index.html?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page3/index.html</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2787 +0,0 @@</div><div class='del'>-&lt;html&gt;&lt;body bgcolor="white"&gt;</div><div class='del'>-&lt;hr&gt;</div><div class='del'>-&lt;h1 align="center"&gt;Embedding Tcl in C/C++ Applications&lt;/h1&gt;</div><div class='del'>-</div><div class='del'>-    &lt;table width="100%"&gt;</div><div class='del'>-    &lt;tr&gt;&lt;td valign="top" align="left" width="46%"&gt;</div><div class='del'>-    &lt;b&gt;Presented At:&lt;/b&gt;</div><div class='del'>-  &lt;blockquote&gt;</div><div class='del'>-     The&amp;nbsp;Tcl2K&amp;nbsp;Conference&lt;br&gt;</div><div class='del'>-     Austin, Texas&lt;br&gt;</div><div class='del'>-     &lt;nobr&gt;9:00am, February 15, 2000&lt;/nobr&gt;&lt;br&gt;</div><div class='del'>-  &lt;/blockquote&gt;</div><div class='del'>-    &lt;/td&gt;</div><div class='del'>-    &lt;td width="5%"&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-    &lt;td valign="top" align="left" width="46%"&gt;</div><div class='del'>-    &lt;b&gt;Instructor:&lt;/b&gt;</div><div class='del'>-  &lt;blockquote&gt;</div><div class='del'>-     D. Richard Hipp&lt;br&gt;</div><div class='del'>-     drh@hwaci.com&lt;br&gt;</div><div class='del'>-     http://www.hwaci.com/drh/&lt;br&gt;</div><div class='del'>-     704.948.4565</div><div class='del'>-  &lt;/blockquote&gt;</div><div class='del'>-    &lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-    &lt;/table&gt;&lt;p&gt;</div><div class='del'>-  &lt;center&gt;&lt;table border="2"&gt;</div><div class='del'>-  &lt;tr&gt;&lt;td&gt;</div><div class='del'>-  &lt;p align="center"&gt;</div><div class='del'>-  Copies of these notes, example source code,&lt;br&gt;and other</div><div class='del'>-  resources related to this tutorial&lt;br&gt;are available online at</div><div class='del'>-  &lt;a href="http://www.hwaci.com/tcl2k/"&gt;</div><div class='del'>-  http://www.hwaci.com/tcl2k/&lt;/a&gt;&lt;/p&gt;</div><div class='del'>-  &lt;p align="center"&gt;&lt;small&gt;$Id$&lt;/small&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-  &lt;/table&gt;</div><div class='del'>-  &lt;/center&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Tutorial Outline&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Introduction&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Building It Yourself&lt;/li&gt;</div><div class='del'>-&lt;ul&gt;&lt;li&gt;"Hello, World!" using Tcl&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Tcl scripts as C strings&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Adding new Tcl commands&lt;/li&gt;</div><div class='del'>-&lt;li&gt;A tour of the Tcl API&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Tcl initialization scripts&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Adding Tk&lt;/li&gt;</div><div class='del'>-&lt;/ul&gt;&lt;li&gt;Tools Survey&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Mktclapp&lt;/li&gt;</div><div class='del'>-&lt;ul&gt;&lt;li&gt;"Hello World" using mktclapp&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Adding C code&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Other Features&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Invoking Tcl from C&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Running mktclapp directly&lt;/li&gt;</div><div class='del'>-&lt;li&gt;Real-world examples&lt;/li&gt;</div><div class='del'>-&lt;/ul&gt;&lt;li&gt;Summary&lt;/li&gt;</div><div class='del'>-&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Embedding Tcl in C/C++ Applications&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;You know how to program in Tcl/Tk&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;You know how to program in C/C++&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;This tutorial is about how to do both at the same time.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Why Mix C With Tcl/Tk?&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Use C for the things C is good at and Tcl for the things</div><div class='del'>-  Tcl is good at.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Generate standalone executables.</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;Eliminate the need to install Tcl/Tk.&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Prevent problems when the wrong version of Tcl/Tk is installed.&lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Prevent end users from changing the source code.</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;Keeps users from creating new bugs.&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Protects proprietary code.&lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Office politics&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Use Tcl/Tk as a portability layer for a large C program&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Use Tcl as a testing interface&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Why Mix C With Tcl/Tk?&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;blockquote&gt;&lt;big&gt;&lt;b&gt;</div><div class='del'>-  "Use C for the things C is good at and use Tcl/Tk for the things</div><div class='del'>-  Tcl/Tk is good at."</div><div class='del'>-  &lt;/b&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;</div><div class='del'>-</div><div class='del'>-    &lt;table width="100%"&gt;</div><div class='del'>-    &lt;tr&gt;&lt;td valign="top" align="left" width="46%"&gt;</div><div class='del'>-    &lt;b&gt;C is good at:&lt;/b&gt;</div><div class='del'>-  &lt;ul&gt;</div><div class='del'>-  &lt;li&gt;Speed&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Complex data structures&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Computation&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Interacting with hardware&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Byte-by-byte data analysis&lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;</div><div class='del'>-    &lt;/td&gt;</div><div class='del'>-    &lt;td width="5%"&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-    &lt;td valign="top" align="left" width="46%"&gt;</div><div class='del'>-    &lt;b&gt;Tcl/Tk is good at:&lt;/b&gt;</div><div class='del'>-  &lt;ul&gt;</div><div class='del'>-  &lt;li&gt;Building a user interface&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Manipulation of strings&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Portability&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Opening sockets&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Handling events&lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;</div><div class='del'>-    &lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-    &lt;/table&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Programming Models&lt;/h2&gt;</div><div class='del'>-&lt;table width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;&lt;b&gt;Mainstream Tcl Programming Model:&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;/td&gt;</div><div class='del'>-&lt;td width="2%"&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;&lt;b&gt;Embedded Tcl Programming Model:&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;Add bits of C code to a large Tcl program&lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;/td&gt;</div><div class='del'>-&lt;td width="2%"&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;Add bits of Tcl code to a large C program&lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;Main Tcl script loads extensions written in C&lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;/td&gt;</div><div class='del'>-&lt;td width="2%"&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;Main C procedure invokes the Tcl interpreter&lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;Tcl/Tk is a programming language&lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;/td&gt;</div><div class='del'>-&lt;td width="2%"&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;Tcl/Tk is a C library&lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;center&gt;&lt;img src="image1"&gt;&lt;br&gt;</div><div class='del'>-  Most of the Tcl2K conference is about&lt;/center&gt;</div><div class='del'>-&lt;/td&gt;</div><div class='del'>-&lt;td width="2%"&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top" width="49%"&gt;</div><div class='del'>-</div><div class='del'>-  &lt;center&gt;&lt;img src="image1"&gt;&lt;br&gt;</div><div class='del'>-  This tutorial is about&lt;/center&gt;</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;"Hello, World!" Using The Tcl Library&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Always include &amp;lt;tcl.h&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Create a new Tcl interpreter&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;"puts&amp;nbsp;{Hello,&amp;nbsp;World!}");&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Execute a Tcl command.&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Compiling "Hello, World!"&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;Unix:&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;tt&gt;</div><div class='del'>-  $ gcc hello.c -ltcl -lm -ldl&lt;br&gt;</div><div class='del'>-  $ ./a.out&lt;br&gt;</div><div class='del'>-  Hello, World!&lt;/tt&gt;&lt;/blockquote&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;&lt;b&gt;Windows using Cygwin:&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;tt&gt;</div><div class='del'>-  C:&gt; gcc hello.c -ltcl80 -lm&lt;br&gt;</div><div class='del'>-  C:&gt; a.exe&lt;br&gt;</div><div class='del'>-  Hello, World!&lt;/tt&gt;&lt;/blockquote&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;&lt;b&gt;Windows using Mingw32:&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;tt&gt;</div><div class='del'>-  C:&gt; gcc -mno-cygwin hello.c -ltcl82 -lm&lt;br&gt;</div><div class='del'>-  &lt;/tt&gt;&lt;/blockquote&gt;</div><div class='del'>-&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;Also works with VC++&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Where Does &lt;tt&gt;-ltcl&lt;/tt&gt; Come From On Unix?&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;Build it yourself using these steps:&lt;/p&gt;&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Get tcl8.2.2.tar.gz from Scriptics&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;zcat tcl8.2.2.tar.gz | tar vx &lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;cd tcl8.2.2/unix&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;./configure --disable-shared&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;make&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Move &lt;b&gt;libtcl8.2.a&lt;/b&gt; to your lib directory.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Copy &lt;b&gt;../generic/tcl.h&lt;/b&gt; into /usr/include.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;What Other Libraries Are Required For Unix?&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;The sequence of &lt;b&gt;-l&lt;/b&gt; options after &lt;b&gt;-ltcl&lt;/b&gt;</div><div class='del'>-  varies from system to system&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Observe what libraries the TCL makefile inserts when</div><div class='del'>-  it is building &lt;b&gt;tclsh&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Examples in this talk are for RedHat Linux 6.0 for Intel&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;How To Compile Under Unix Without Installing Tcl&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;Specify the *.a file directly:&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-  $ gcc -I../tcl8.2.2/generic hello.c \ </div><div class='del'>-      ../tcl8.2.2/unix/libtcl8.2.a -lm -ldl</div><div class='del'>-  $ strip a.out</div><div class='del'>-  $ ./a.out</div><div class='del'>-  Hello, World!&lt;/pre&gt;&lt;/blockquote&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;Or, tell the C compiler where to look for *.a files:&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-  $ gcc -I../tcl8.2.2/generic hello.c \ </div><div class='del'>-      -L../tcl8.2.2/unix -ltcl -lm -ldl</div><div class='del'>-  $ strip a.out</div><div class='del'>-  $ ./a.out</div><div class='del'>-  Hello, World!&lt;/pre&gt;&lt;/blockquote&gt;</div><div class='del'>-&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;The &lt;tt&gt;-I../tcl8.2.2&lt;/tt&gt; argument</div><div class='del'>-  tells the compiler where to</div><div class='del'>-  find &lt;tt&gt;&amp;lt;tcl.h&amp;gt;&lt;/tt&gt;.&lt;/p&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;What's "Cygwin"?&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;An implementation of GCC/G++ and all development tools</div><div class='del'>-  for Windows95/98/NT/2000&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Available for free download at</div><div class='del'>-  &lt;blockquote&gt;</div><div class='del'>-  &lt;tt&gt;http://sourceware.cygnus.com/cygwin/&lt;/tt&gt;</div><div class='del'>-  &lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Also available shrink-wrapped at your local software retailer or</div><div class='del'>-  online at</div><div class='del'>-  &lt;blockquote&gt;</div><div class='del'>-  &lt;tt&gt;http://www.cygnus.com/cygwin/index.html&lt;/tt&gt;</div><div class='del'>-  &lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Programs compiled using Cygwin require a special</div><div class='del'>-  DLL (&lt;b&gt;cygwin1.dll&lt;/b&gt;) that provides a POSIX system API&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Cygwin1.dll cannot be shipped with proprietary programs</div><div class='del'>-  without purchasing a license from Cygnus.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Mingw32 is the same compiler as Cygwin, but generates</div><div class='del'>-  binaries that do not use cygwin1.dll&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Where Does &lt;tt&gt;-ltcl82&lt;/tt&gt; Come From On Windows?&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;Build it like this:&lt;/p&gt;&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Get &lt;b&gt;tcl82.lib&lt;/b&gt; and &lt;b&gt;tcl82.dll&lt;/b&gt; from Scriptics.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;echo EXPORTS &gt;tcl82.def&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;nm tcl82.lib | grep 'T _' | sed 's/.* T _//' &gt;&gt;tcl82.def&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;dlltool --def tcl82.def --dllname tcl82.dll --output-lib libtcl82.a&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Move &lt;b&gt;libtcl82.a&lt;/b&gt; to the lib directory and &lt;b&gt;tcl82.dll&lt;/b&gt;</div><div class='del'>-  to the bin directory.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Where Does Your Code Go?&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Your&amp;nbsp;application&amp;nbsp;code&amp;nbsp;goes&amp;nbsp;here&amp;nbsp;*/&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Insert C code here to do whatever it is your program is</div><div class='del'>-  suppose to do&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Building A Simple TCLSH&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;*z;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;zLine[2000];&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;while(&amp;nbsp;fgets(zLine,sizeof(zLine),stdin)&amp;nbsp;){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Get one line of input&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zLine);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Execute the input as Tcl.&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;z&amp;nbsp;=&amp;nbsp;Tcl_GetStringResult(interp);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;z[0]&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("¸üÿ¿PX¶\n",&amp;nbsp;z);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Print result if not empty&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;What if user types more than 2000 characters?&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Building A Simple TCLSH&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;Use TCL to handle input.  Allows input lines of unlimited length.&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-/*&amp;nbsp;Tcl&amp;nbsp;code&amp;nbsp;to&amp;nbsp;implement&amp;nbsp;the&lt;br&gt;</div><div class='del'>-**&amp;nbsp;input&amp;nbsp;loop&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"while&amp;nbsp;{![eof&amp;nbsp;stdin]}&amp;nbsp;{\n"&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;set&amp;nbsp;line&amp;nbsp;[gets&amp;nbsp;stdin]\n"&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Get one line of input&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;set&amp;nbsp;result&amp;nbsp;[eval&amp;nbsp;$line]\n"&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Execute input as Tcl&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;if&amp;nbsp;{$result!=\"\"}&amp;nbsp;{puts&amp;nbsp;$result}\n"&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Print result&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;"}\n"&lt;br&gt;</div><div class='del'>-;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zLoop);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Run the Tcl input loop&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;But what about commands that span multiple lines of input?&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Better Handling Of Command-Line Input&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;The file "input.tcl"&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;set&amp;nbsp;line&amp;nbsp;{}&lt;br&gt;</div><div class='del'>-while&amp;nbsp;{![eof&amp;nbsp;stdin]}&amp;nbsp;{&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;{$line!=""}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;-nonewline&amp;nbsp;"&gt;&amp;nbsp;"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;-nonewline&amp;nbsp;"%&amp;nbsp;"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;flush&amp;nbsp;stdout&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Prompt for user input.  The prompt is normally &amp;quot;%&amp;quot;</div><div class='del'>-  but changes to &amp;quot;&amp;gt;&amp;quot; if the current line is a continuation.&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;append&amp;nbsp;line&amp;nbsp;[gets&amp;nbsp;stdin]&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[info&amp;nbsp;complete&amp;nbsp;$line]}&amp;nbsp;{&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[catch&amp;nbsp;{uplevel&amp;nbsp;#0&amp;nbsp;$line}&amp;nbsp;result]}&amp;nbsp;{&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;If the command is complete, execute it.&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;stderr&amp;nbsp;"Error:&amp;nbsp;$result"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;{$result!=""}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;$result&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&amp;nbsp;line&amp;nbsp;{}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;append&amp;nbsp;line&amp;nbsp;\n&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;If the command is incomplete, append a newline and get</div><div class='del'>-  another line of text.&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Better Handling Of Command-Line Input&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;The file "input.c"&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;"source&amp;nbsp;input.tcl");&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Read and execute the input loop&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;But now the program is not standalone!&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Converting Scripts Into C Strings&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"set&amp;nbsp;line&amp;nbsp;{}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"while&amp;nbsp;{![eof&amp;nbsp;stdin]}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;if&amp;nbsp;{$line!=\"\"}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;-nonewline&amp;nbsp;\"&gt;&amp;nbsp;\"\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;-nonewline&amp;nbsp;\"%&amp;nbsp;\"\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;flush&amp;nbsp;stdout\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;append&amp;nbsp;line&amp;nbsp;[gets&amp;nbsp;stdin]\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[info&amp;nbsp;complete&amp;nbsp;$line]}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[catch&amp;nbsp;{uplevel&amp;nbsp;#0&amp;nbsp;$line}&amp;nbsp;result]}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;stderr&amp;nbsp;\"Error:&amp;nbsp;$result\"\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;{$result!=\"\"}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;$result\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&amp;nbsp;line&amp;nbsp;{}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;append&amp;nbsp;line&amp;nbsp;\\n\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}\n"&lt;br&gt;</div><div class='del'>-;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Compile Tcl Scripts Into C Programs&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Actual&amp;nbsp;code&amp;nbsp;omitted&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Copy and paste the converted Tcl script here&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Execute the Tcl code&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Converting Scripts To Strings&lt;br&gt;Using SED Or TCLSH&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;sed&amp;nbsp;-e&amp;nbsp;'s/\\/\\\\/g'&amp;nbsp;\&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Convert &lt;b&gt;\&lt;/b&gt; into &lt;b&gt;\\&lt;/b&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;'s/"/\\"/g'&amp;nbsp;\&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Convert &lt;b&gt;"&lt;/b&gt; into &lt;b&gt;\"&lt;/b&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;'s/^/&amp;nbsp;&amp;nbsp;"/'&amp;nbsp;\&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Add &lt;b&gt;"&lt;/b&gt; to start of each line&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;'s/$/\\n"/'&amp;nbsp;input.tcl&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Add &lt;b&gt;\n"&lt;/b&gt; to end of each line&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;br&gt;</div><div class='del'>-while&amp;nbsp;{![eof&amp;nbsp;stdin]}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;set&amp;nbsp;line&amp;nbsp;[gets&amp;nbsp;stdin]&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;regsub&amp;nbsp;-all&amp;nbsp;{\}&amp;nbsp;$line&amp;nbsp;{&amp;amp;&amp;amp;}&amp;nbsp;line&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Convert &lt;b&gt;\&lt;/b&gt; into &lt;b&gt;\\&lt;/b&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;regsub&amp;nbsp;-all&amp;nbsp;{"}&amp;nbsp;$line&amp;nbsp;{\"}&amp;nbsp;line&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Convert &lt;b&gt;"&lt;/b&gt; into &lt;b&gt;\"&lt;/b&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;"\"$line\\n\""&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Add &lt;b&gt;"&lt;/b&gt; in front and &lt;b&gt;\n"&lt;/b&gt; at the end&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Converting Scripts Into C Strings&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;You may want to save space by removing comments and extra whitespace</div><div class='del'>-  from scripts.&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"set&amp;nbsp;line&amp;nbsp;{}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"while&amp;nbsp;{![eof&amp;nbsp;stdin]}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"if&amp;nbsp;{$line!=\"\"}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"puts&amp;nbsp;-nonewline&amp;nbsp;\"&gt;&amp;nbsp;\"\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}&amp;nbsp;else&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"puts&amp;nbsp;-nonewline&amp;nbsp;\"%&amp;nbsp;\"\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"flush&amp;nbsp;stdout\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"append&amp;nbsp;line&amp;nbsp;[gets&amp;nbsp;stdin]\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"if&amp;nbsp;{[info&amp;nbsp;complete&amp;nbsp;$line]}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"if&amp;nbsp;{[catch&amp;nbsp;{uplevel&amp;nbsp;#0&amp;nbsp;$line}&amp;nbsp;result]}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"puts&amp;nbsp;stderr&amp;nbsp;\"Error:&amp;nbsp;$result\"\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}&amp;nbsp;elseif&amp;nbsp;{$result!=\"\"}&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"puts&amp;nbsp;$result\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"set&amp;nbsp;line&amp;nbsp;{}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}&amp;nbsp;else&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"append&amp;nbsp;line&amp;nbsp;\\n\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}\n"&lt;br&gt;</div><div class='del'>-;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Converting Scripts To Strings&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;sed&amp;nbsp;-e&amp;nbsp;'s/\\/\\\\/g'&amp;nbsp;\&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;-e&amp;nbsp;'s/"/\\"/g'&amp;nbsp;\&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;'/^&amp;nbsp;*#/d'&amp;nbsp;\&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Delete lines that begin with #&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;'/^&amp;nbsp;*$/d'&amp;nbsp;\&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Delete blank lines&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;'s/^&amp;nbsp;*/&amp;nbsp;&amp;nbsp;"/'&amp;nbsp;\&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Delete leading spaces&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;-e&amp;nbsp;'s/$/\\n"/'&amp;nbsp;input.tcl&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-while&amp;nbsp;{![eof&amp;nbsp;stdin]}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;set&amp;nbsp;line&amp;nbsp;[gets&amp;nbsp;stdin]&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;set&amp;nbsp;line&amp;nbsp;[string&amp;nbsp;trimleft&amp;nbsp;$line]&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Remove leading space&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;{$line==""}&amp;nbsp;continue&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Delete blank lines&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[string&amp;nbsp;index&amp;nbsp;$line&amp;nbsp;0]=="#"}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Delete lines starting with #&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;regsub&amp;nbsp;-all&amp;nbsp;{\}&amp;nbsp;$line&amp;nbsp;{&amp;amp;&amp;amp;}&amp;nbsp;line&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;regsub&amp;nbsp;-all&amp;nbsp;{"}&amp;nbsp;$line&amp;nbsp;{\"}&amp;nbsp;line&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;puts&amp;nbsp;"\"$line\\n\""&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Removing Comments Or Leading Space&lt;br&gt;Will Break Some Tcl Scripts!&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;image&amp;nbsp;create&amp;nbsp;bitmap&amp;nbsp;smiley&amp;nbsp;-data&amp;nbsp;{&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#define&amp;nbsp;smile_width&amp;nbsp;15&lt;br&gt;</div><div class='del'>-#define&amp;nbsp;smile_height&amp;nbsp;15&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;These lines begin with # but are not comment&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;static&amp;nbsp;unsigned&amp;nbsp;char&amp;nbsp;smile_bits[]&amp;nbsp;=&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;0xc0,&amp;nbsp;0x01,&amp;nbsp;0x30,&amp;nbsp;0x06,&amp;nbsp;0x0c,&amp;nbsp;0x18,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;0x04,&amp;nbsp;0x10,&amp;nbsp;0x22,&amp;nbsp;0x22,&amp;nbsp;0x52,&amp;nbsp;0x25,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;0x01,&amp;nbsp;0x40,&amp;nbsp;0x01,&amp;nbsp;0x40,&amp;nbsp;0x01,&amp;nbsp;0x40,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;0x12,&amp;nbsp;0x24,&amp;nbsp;0xe2,&amp;nbsp;0x23,&amp;nbsp;0x04,&amp;nbsp;0x10,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;0x0c,&amp;nbsp;0x18,&amp;nbsp;0x30,&amp;nbsp;0x06,&amp;nbsp;0xc0,&amp;nbsp;0x01};&lt;br&gt;</div><div class='del'>-}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-text&amp;nbsp;.t&lt;br&gt;</div><div class='del'>-pack&amp;nbsp;.t&lt;br&gt;</div><div class='del'>-.t&amp;nbsp;insert&amp;nbsp;end&amp;nbsp;[string&amp;nbsp;trim&amp;nbsp;{&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;She&amp;nbsp;walks&amp;nbsp;in&amp;nbsp;beauty,&amp;nbsp;like&amp;nbsp;the&amp;nbsp;night&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Of&amp;nbsp;cloudless&amp;nbsp;climes&amp;nbsp;and&amp;nbsp;starry&amp;nbsp;skies;&lt;br&gt;</div><div class='del'>-And&amp;nbsp;all&amp;nbsp;that's&amp;nbsp;best&amp;nbsp;of&amp;nbsp;dark&amp;nbsp;and&amp;nbsp;bright&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Meet&amp;nbsp;in&amp;nbsp;her&amp;nbsp;aspect&amp;nbsp;and&amp;nbsp;her&amp;nbsp;eyes;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Indentation is deleted on lines 2</div><div class='del'>-  and 4&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}]&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;Problems like these are rare&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Adding A "continue" Command&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;set&amp;nbsp;line&amp;nbsp;{}&lt;br&gt;</div><div class='del'>-while&amp;nbsp;{![eof&amp;nbsp;stdin]}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if&amp;nbsp;{$line!=""}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;-nonewline&amp;nbsp;"&gt;&amp;nbsp;"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;-nonewline&amp;nbsp;"%&amp;nbsp;"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;flush&amp;nbsp;stdout&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;append&amp;nbsp;line&amp;nbsp;[gets&amp;nbsp;stdin]&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[info&amp;nbsp;complete&amp;nbsp;$line]}&amp;nbsp;{&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[lindex&amp;nbsp;$line&amp;nbsp;0]=="continue"}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Break out of the loop if the command</div><div class='del'>-  is "continue"&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;{[catch&amp;nbsp;{uplevel&amp;nbsp;#0&amp;nbsp;$line}&amp;nbsp;result]}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;stderr&amp;nbsp;"Error:&amp;nbsp;$result"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;{$result!=""}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;puts&amp;nbsp;$result&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&amp;nbsp;line&amp;nbsp;{}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;append&amp;nbsp;line&amp;nbsp;\n&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Stop For Tcl Input At Various Points&lt;br&gt;In A C Program&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Tcl&amp;nbsp;Input&amp;nbsp;loop&amp;nbsp;as&amp;nbsp;a&amp;nbsp;C&amp;nbsp;string&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Application&amp;nbsp;C&amp;nbsp;code&amp;nbsp;*/&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Do some computation&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Stop for some Tcl input&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;More&amp;nbsp;application&amp;nbsp;C&amp;nbsp;code&amp;nbsp;*/&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Do more computation&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Stop for more Tcl input&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Finish&amp;nbsp;up&amp;nbsp;the&amp;nbsp;application&amp;nbsp;*/&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Finish the computation&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Using Tcl For Testing&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Tcl&amp;nbsp;Input&amp;nbsp;loop&amp;nbsp;as&amp;nbsp;a&amp;nbsp;C&amp;nbsp;string&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-#ifdef&amp;nbsp;TESTING&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Create interpreter only if TESTING</div><div class='del'>- is defined&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;br&gt;</div><div class='del'>-#endif&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Application&amp;nbsp;C&amp;nbsp;code&amp;nbsp;*/&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#ifdef&amp;nbsp;TESTING&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-#endif&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Accept command-line input only if TESTING</div><div class='del'>-  is defined&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;More&amp;nbsp;application&amp;nbsp;C&amp;nbsp;code&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-#ifdef&amp;nbsp;TESTING&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-#endif&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Finish&amp;nbsp;up&amp;nbsp;the&amp;nbsp;application&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Creating A New Tcl Command In C&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;NewCmd(&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;void&amp;nbsp;*clientData,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;int&amp;nbsp;argc,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;**argv&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;The Tcl command is implemented as</div><div class='del'>-  a C function with four arguments.&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;printf("Hello,&amp;nbsp;World!\n");&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Returns TCL_OK or TCL_ERROR&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Tcl&amp;nbsp;code&amp;nbsp;omitted...&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_CreateCommand(interp,&amp;nbsp;"helloworld",&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NewCmd,&amp;nbsp;0,&amp;nbsp;0);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Tell the interpreter which C function to call when the</div><div class='del'>-  "helloworld" Tcl command is executed&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Linkage From Tcl To C&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p align="center"&gt;&lt;img src="image4"&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;3rd parameter of Tcl_CreateCommand() is a pointer to the C subroutine</div><div class='del'>- that implements the command.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;4th parameter to Tcl_CreateCommand() becomes the 1st parameter to </div><div class='del'>- the C routine whenever the Tcl command is executed.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;1st parameter to Tcl_CreateCommand() must be a valid Tcl interpreter.</div><div class='del'>- The same pointer appears as the second parameter to the C routine</div><div class='del'>- whenever the Tcl command is executed.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Linkage From Tcl To C&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p align="center"&gt;&lt;img src="image5"&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;5th parameter of Tcl_CreateCommand() is a pointer to the C subroutine</div><div class='del'>- that is called when the Tcl command is deleted.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;4th parameter to Tcl_CreateCommand() becomes the 1st parameter to </div><div class='del'>- the C routine.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;When To Use A Delete Proc&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;Examples of where the delete proc is used in standard Tcl/Tk:&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;button&amp;nbsp;.b&amp;nbsp;-text&amp;nbsp;Hello&lt;br&gt;</div><div class='del'>-pack&amp;nbsp;.b&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;rename&amp;nbsp;.b&amp;nbsp;{}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Deleting the &lt;b&gt;.b&lt;/b&gt; command causes the button to be destroyed&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;image&amp;nbsp;create&amp;nbsp;photo&amp;nbsp;smiley&amp;nbsp;\&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-file&amp;nbsp;smiley.gif&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;rename&amp;nbsp;smiley&amp;nbsp;{}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Deleting the &lt;b&gt;smiley&lt;/b&gt; command destroys the image and reclaims the</div><div class='del'>-  memory used to hold the image&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Always use a delete proc if the clientData is a pointer to</div><div class='del'>-  malloced memory or some other resource that needs freeing&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Delete procs are never used in the Tcl core but are used</div><div class='del'>-  extensively in Tk&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Linkage From Tcl To C&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;The &lt;tt&gt;argc&lt;/tt&gt; and &lt;tt&gt;argv&lt;/tt&gt; parameters work just like in </div><div class='del'>- &lt;tt&gt;main()&lt;/tt&gt;&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;helloworld&amp;nbsp;one&amp;nbsp;{two&amp;nbsp;three}&amp;nbsp;four&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;tt&gt;argc = 4&lt;br&gt;</div><div class='del'>-  argv[0] = "helloworld"&lt;br&gt;</div><div class='del'>-  argv[1] = "one"&lt;br&gt;</div><div class='del'>-  argv[2] = "two three"&lt;br&gt;</div><div class='del'>-  argv[3] = "four"&lt;br&gt;</div><div class='del'>-  argv[4] = NULL&lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;A Short-Cut&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;In a program with many new Tcl commands implemented in C, it becomes</div><div class='del'>-  tedious to type the same four parameters over and over again.  So</div><div class='del'>-  we define a short-cut.&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#define&amp;nbsp;TCLARGS&amp;nbsp;\&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;void&amp;nbsp;*clientData,&amp;nbsp;\&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp,&amp;nbsp;\&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;argc,&amp;nbsp;\&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char&amp;nbsp;*argv&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Define TCLARGS once in a header file&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;int&amp;nbsp;NewCmd(TCLARGS){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Use the TCLARGS macro to define new C functions</div><div class='del'>-  that implement Tcl commands.&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;implementation...&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;For brevity, we will use the TCLARGS macro during the</div><div class='del'>-  rest of this talk.&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Returning A Value From C Back To Tcl&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;int&amp;nbsp;NewCmd(TCLARGS){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Note that the C function returns an "int"&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Return value is TCL_OK or TCL_ERROR&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;TCL_OK and TCL_ERROR are defined in &amp;lt;tcl.h&amp;gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Other valid return values TCL_RETURN, TCL_BREAK and TCL_CONTINUE</div><div class='del'>-  are rarely used&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Common mistake: forgetting to return TCL_OK&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Returning A Value From C Back To Tcl&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;int&amp;nbsp;NewCmd(TCLARGS){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_SetResult(interp,"Hello!",TCL_STATIC);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Set the result to "Hello!"&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Result should be the text of an error message if you </div><div class='del'>-  return TCL_ERROR.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;3rd argument to Tcl_SetResult() can be TCL_STATIC,</div><div class='del'>-  TCL_DYNAMIC, TCL_VOLATILE, or a function pointer.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Also consider using Tcl_AppendResult().&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Direct access to &lt;tt&gt;interp-&gt;result&lt;/tt&gt; is deprecated.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;See the man pages for details.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The Tcl_Obj Interface&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;A new way to write Tcl commands in C code&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;First introduced in Tcl8.0&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Can be much faster, especially for lists or numeric values.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Able to handle arbitrary binary data.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;More difficult to program.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The Tcl_Obj Interface&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;int&amp;nbsp;NewObjCmd(&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;void&amp;nbsp;*clientData,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;int&amp;nbsp;objc,&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Obj&amp;nbsp;*const*&amp;nbsp;objv&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;4th parameter is an array Tcl_Objs, not an array of strings&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Implementation...&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;br&gt;</div><div class='del'>-}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Tcl&amp;nbsp;code&amp;nbsp;omitted...&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_CreateObjCommand(interp,&amp;nbsp;"newcmd",&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NewObjCmd,&amp;nbsp;0,&amp;nbsp;0);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Use a different function to register the command&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The Tcl_Obj Interface&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;There are countless access methods for reading information from and</div><div class='del'>-  placing information in Tcl_Objs.  Always use the access methods.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Details provided at Lee Bernhard's talk this afternoon.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Definitely use Tcl_Objs if you are writing a new Tcl extension.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Tcl_Objs address some of the weaknesses of Tcl relative to C/C++.</div><div class='del'>-  &lt;ul&gt;</div><div class='del'>-  &lt;li&gt; Tcl_Objs are faster &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; Tcl_Objs work with binary data &lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;</div><div class='del'>-  But C/C++ is faster still and better for working with binary data.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;When mixing C/C++ with Tcl/Tk the benefits of Tcl_Objs are</div><div class='del'>-  less important.  Using Tcl_Objs in this context may not be</div><div class='del'>-  worth the extra trouble.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;This talk will focus on the string interface.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Nickel Tour Of The Tcl API&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;Memory allocation functions&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Alloc&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Free&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Realloc&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;p&gt;&lt;b&gt;Functions useful in the implementation of new  Tcl commands&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_AppendElement&lt;br&gt;</div><div class='del'>-  Tcl_AppendResult&lt;br&gt;</div><div class='del'>-  Tcl_GetBoolean&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_GetDouble&lt;br&gt;</div><div class='del'>-  Tcl_GetInt&lt;br&gt;</div><div class='del'>-  Tcl_GetStringResult&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_ResetResult&lt;br&gt;</div><div class='del'>-  Tcl_SetResult&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;p&gt;&lt;b&gt;Functions for controlling the Tcl interpreter&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_CreateCommand&lt;br&gt;</div><div class='del'>-  Tcl_CreateInterp&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_CreateObjCommand&lt;br&gt;</div><div class='del'>-  Tcl_DeleteCommand&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_DeleteInterp&lt;br&gt;</div><div class='del'>-  Tcl_Exit&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Nickel Tour Of The Tcl API&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;I/O functions&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Close&lt;br&gt;</div><div class='del'>-  Tcl_Eof&lt;br&gt;</div><div class='del'>-  Tcl_Flush&lt;br&gt;</div><div class='del'>-  Tcl_GetChannel&lt;br&gt;</div><div class='del'>-  Tcl_GetChannelMode&lt;br&gt;</div><div class='del'>-  Tcl_GetChannelName&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Gets&lt;br&gt;</div><div class='del'>-  Tcl_OpenCommandChannel&lt;br&gt;</div><div class='del'>-  Tcl_OpenFileChannel&lt;br&gt;</div><div class='del'>-  Tcl_OpenTcpClient&lt;br&gt;</div><div class='del'>-  Tcl_OpenTcpServer&lt;br&gt;</div><div class='del'>-  Tcl_Read&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Seek&lt;br&gt;</div><div class='del'>-  Tcl_Tell&lt;br&gt;</div><div class='del'>-  Tcl_Ungets&lt;br&gt;</div><div class='del'>-  Tcl_Write&lt;br&gt;</div><div class='del'>-  Tcl_WriteChars&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;p&gt;&lt;b&gt;Names and meanings of system error codes&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_ErrnoId&lt;br&gt;</div><div class='del'>-  Tcl_ErrnoMsg&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_GetErrno&lt;br&gt;</div><div class='del'>-  Tcl_SetErrno&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_SignalId&lt;br&gt;</div><div class='del'>-  Tcl_SignalMsg&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Nickel Tour Of The Tcl API&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;General Operating System Calls&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Access&lt;br&gt;</div><div class='del'>-  Tcl_Chdir&lt;br&gt;</div><div class='del'>-  Tcl_GetCwd&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_GetHostName&lt;br&gt;</div><div class='del'>-  Tcl_GetNameOfExecutable&lt;br&gt;</div><div class='del'>-  Tcl_Sleep&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Stat&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;p&gt;&lt;b&gt;String Manipulation And Comparison&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Concat&lt;br&gt;</div><div class='del'>-  Tcl_Merge&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_SplitList&lt;br&gt;</div><div class='del'>-  Tcl_StringCaseMatch&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_StringMatch&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;p&gt;&lt;b&gt;Dynamically Resizable Strings&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="49%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_DStringAppend&lt;br&gt;</div><div class='del'>-  Tcl_DStringAppendElement&lt;br&gt;</div><div class='del'>-  Tcl_DStringEndSublist&lt;br&gt;</div><div class='del'>-  Tcl_DStringInit&lt;br&gt;</div><div class='del'>-  Tcl_DStringLength&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="49%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_DStringResult&lt;br&gt;</div><div class='del'>-  Tcl_DStringSetLength&lt;br&gt;</div><div class='del'>-  Tcl_DStringStartSublist&lt;br&gt;</div><div class='del'>-  Tcl_DStringValue&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Nickel Tour Of The Tcl API&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;Event Handlers&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="49%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_CancelIdleCall&lt;br&gt;</div><div class='del'>-  Tcl_CreateChannelHandler&lt;br&gt;</div><div class='del'>-  Tcl_CreateTimerHandler&lt;br&gt;</div><div class='del'>-  Tcl_DeleteChannelHandler&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="49%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_DeleteTimerHandler&lt;br&gt;</div><div class='del'>-  Tcl_DoOneEvent&lt;br&gt;</div><div class='del'>-  Tcl_DoWhenIdle&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;p&gt;&lt;b&gt;Functions For Reading And Writing Tcl Variables&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_GetVar&lt;br&gt;</div><div class='del'>-  Tcl_GetVar2&lt;br&gt;</div><div class='del'>-  Tcl_LinkVar&lt;br&gt;</div><div class='del'>-  Tcl_SetVar&lt;br&gt;</div><div class='del'>-  Tcl_SetVar2&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_TraceVar&lt;br&gt;</div><div class='del'>-  Tcl_TraceVar2&lt;br&gt;</div><div class='del'>-  Tcl_UnlinkVar&lt;br&gt;</div><div class='del'>-  Tcl_UnsetVar&lt;br&gt;</div><div class='del'>-  Tcl_UnsetVar2&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_UntraceVar&lt;br&gt;</div><div class='del'>-  Tcl_UntraceVar2&lt;br&gt;</div><div class='del'>-  Tcl_UpdateLinkedVar&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;p&gt;&lt;b&gt;Functions For Executing Tcl Code&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_Eval&lt;br&gt;</div><div class='del'>-  Tcl_EvalFile&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_EvalObj&lt;br&gt;</div><div class='del'>-  Tcl_GlobalEval&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="32%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_GlobalEvalObj&lt;br&gt;</div><div class='del'>-  Tcl_VarEval&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Nickel Tour Of The Tcl API&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;Functions For Dealing With Unicode&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;center&gt;&lt;table width="90%"&gt;&lt;tr&gt;</div><div class='del'>-&lt;td width="49%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_NumUtfChars&lt;br&gt;</div><div class='del'>-  Tcl_UniCharAtIndex&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsAlnum&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsAlpha&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsControl&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsDigit&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsGraph&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsLower&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsPrint&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsPunct&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsSpace&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsUpper&lt;br&gt;</div><div class='del'>-  Tcl_UniCharIsWordChar&lt;br&gt;</div><div class='del'>-  Tcl_UniCharLen&lt;br&gt;</div><div class='del'>-  Tcl_UniCharNcmp&lt;br&gt;</div><div class='del'>-  Tcl_UniCharToLower&lt;br&gt;</div><div class='del'>-  Tcl_UniCharToTitle&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td width="49%" valign="top"&gt;&lt;small&gt;&lt;tt&gt;</div><div class='del'>-  Tcl_UniCharToUpper&lt;br&gt;</div><div class='del'>-  Tcl_UniCharToUtf&lt;br&gt;</div><div class='del'>-  Tcl_UniCharToUtfDString&lt;br&gt;</div><div class='del'>-  Tcl_UtfAtIndex&lt;br&gt;</div><div class='del'>-  Tcl_UtfBackslash&lt;br&gt;</div><div class='del'>-  Tcl_UtfCharComplete&lt;br&gt;</div><div class='del'>-  Tcl_UtfFindFirst&lt;br&gt;</div><div class='del'>-  Tcl_UtfFindLast&lt;br&gt;</div><div class='del'>-  Tcl_UtfNcasecmp&lt;br&gt;</div><div class='del'>-  Tcl_UtfNcmp&lt;br&gt;</div><div class='del'>-  Tcl_UtfNext&lt;br&gt;</div><div class='del'>-  Tcl_UtfPrev&lt;br&gt;</div><div class='del'>-  Tcl_UtfToLower&lt;br&gt;</div><div class='del'>-  Tcl_UtfToTitle&lt;br&gt;</div><div class='del'>-  Tcl_UtfToUniChar&lt;br&gt;</div><div class='del'>-  Tcl_UtfToUniCharDString&lt;br&gt;</div><div class='del'>-  Tcl_UtfToUpper&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;/table&gt;&lt;/center&gt;</div><div class='del'>-  &lt;p&gt;&lt;b&gt;Functions For Dealing With Tcl_Objs&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;i&gt;Too numerous to list...&lt;/i&gt;&lt;/blockquote&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Documentation Of The Tcl API&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Tcl comes with excellent man pages&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;"Use the source, Luke"&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;See &lt;tt&gt;tclDecl.h&lt;/tt&gt; for a list of API functions&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The header comments on the implementation of API functions usually</div><div class='del'>-  gives a good description of what the function does and how it should</div><div class='del'>-  be used.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Most API functions are used within Tcl and Tk.  Use grep to locate</div><div class='del'>-  examples.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Initialization Scripts&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Run the mini TCLSH implemented above and execute the &lt;tt&gt;parray&lt;/tt&gt; command&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;It doesn't work!  What's wrong? &lt;/p&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;parray&lt;/tt&gt; is really a Tcl proc that is read in when the</div><div class='del'>- interpreter is initialized. &lt;/p&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;parray&lt;/tt&gt; (and several other commands) are stored in a</div><div class='del'>-  handful of &amp;quot;Initialization Scripts&amp;quot; &lt;/p&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;All the initialization scripts are stored in the </div><div class='del'>- &amp;quot;Tcl Library&amp;quot; - a directory on the host</div><div class='del'>- computer. &lt;/p&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;Invoke the Tcl_Init() function to locate and read the</div><div class='del'>- Tcl initialization scripts.&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The &lt;tt&gt;Tcl_Init()&lt;/tt&gt; Function&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Tcl&amp;nbsp;code&amp;nbsp;omitted...&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Init(interp);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Locate and read the initialization scripts&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Call&amp;nbsp;Tcl_CreateCommand()?&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;But Tcl_Init() can fail. We need to check its return value...&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The &lt;tt&gt;Tcl_Init()&lt;/tt&gt; Function&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zInputLoop[]&amp;nbsp;=&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Tcl&amp;nbsp;code&amp;nbsp;omitted...&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;Tcl_Init(interp)!=TCL_OK&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fprintf(stderr,"Tcl_Init()&amp;nbsp;failed:&amp;nbsp;¸üÿ¿PX¶",&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tcl_GetStringResult(interp));&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Print error message if Tcl_Init() fails&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Call&amp;nbsp;Tcl_CreateCommand()?&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;But now the program is not standalone.&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;How &lt;tt&gt;Tcl_Init()&lt;/tt&gt; Works&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Computes the value of variable &lt;tt&gt;tcl_libPath&lt;/tt&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Invokes the procedure named &amp;quot;&lt;tt&gt;tclInit&lt;/tt&gt;&amp;quot;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;A default &lt;tt&gt;tclInit&lt;/tt&gt; procedure is built into Tcl.</div><div class='del'>-  You can define an alternative &lt;tt&gt;tclInit&lt;/tt&gt; procedure</div><div class='del'>-  prior to calling &lt;tt&gt;Tcl_Init()&lt;/tt&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The Default &lt;tt&gt;initTcl&lt;/tt&gt; Procedure&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;set&amp;nbsp;errors&amp;nbsp;{}&lt;br&gt;</div><div class='del'>-set&amp;nbsp;dirs&amp;nbsp;{}&lt;br&gt;</div><div class='del'>-if&amp;nbsp;{[info&amp;nbsp;exists&amp;nbsp;tcl_library]}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;lappend&amp;nbsp;dirs&amp;nbsp;$tcl_library&lt;br&gt;</div><div class='del'>-}&amp;nbsp;else&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[info&amp;nbsp;exists&amp;nbsp;env(TCL_LIBRARY)]}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lappend&amp;nbsp;dirs&amp;nbsp;$env(TCL_LIBRARY)&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;lappend&amp;nbsp;dirs&amp;nbsp;$tclDefaultLibrary&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;unset&amp;nbsp;tclDefaultLibrary&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;set&amp;nbsp;dirs&amp;nbsp;[concat&amp;nbsp;$dirs&amp;nbsp;$tcl_libPath]&lt;br&gt;</div><div class='del'>-}&lt;br&gt;</div><div class='del'>-foreach&amp;nbsp;i&amp;nbsp;$dirs&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;set&amp;nbsp;tcl_library&amp;nbsp;$i&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;set&amp;nbsp;tclfile&amp;nbsp;[file&amp;nbsp;join&amp;nbsp;$i&amp;nbsp;init.tcl]&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if&amp;nbsp;{[file&amp;nbsp;exists&amp;nbsp;$tclfile]}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;{![catch&amp;nbsp;{uplevel&amp;nbsp;#0&amp;nbsp;[list&amp;nbsp;source&amp;nbsp;$tclfile]}&amp;nbsp;msg]}&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;append&amp;nbsp;errors&amp;nbsp;"$tclfile:&amp;nbsp;$msg\n$errorInfo\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-}&lt;br&gt;</div><div class='del'>-error&amp;nbsp;"Can't&amp;nbsp;find&amp;nbsp;a&amp;nbsp;usable&amp;nbsp;init.tcl&amp;nbsp;..."&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The Default Initialization Sequence&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;The &lt;tt&gt;tclInit&lt;/tt&gt; procedure locates and sources the &lt;tt&gt;init.tcl&lt;/tt&gt;</div><div class='del'>-  script.  The directory that contains &lt;tt&gt;init.tcl&lt;/tt&gt; is stored in</div><div class='del'>-  the &lt;tt&gt;tcl_library&lt;/tt&gt; variable.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The &lt;tt&gt;init.tcl&lt;/tt&gt; script creates an &lt;tt&gt;unknown&lt;/tt&gt; procedure.</div><div class='del'>-  The &lt;tt&gt;unknown&lt;/tt&gt; procedure will run whenever Tcl encounters an</div><div class='del'>-  unknown command.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The &lt;tt&gt;unknown&lt;/tt&gt; procedure consults the file &lt;tt&gt;tclIndex&lt;/tt&gt; in the</div><div class='del'>-  &lt;tt&gt;tcl_library&lt;/tt&gt; directory to see if the command is defined by one of</div><div class='del'>-  the initialization scripts.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The &lt;tt&gt;unknown&lt;/tt&gt; procedure sources any needed initialization scripts</div><div class='del'>-  and retries the command.&lt;/li&gt;&lt;/ul&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;Commands defined in the initialization scripts are loaded</div><div class='del'>-  on demand.&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Standalone Initialization Techniques&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;Manually execute all initialization scripts&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;ul&gt;&lt;li&gt;Convert all initialization scripts into C strings and</div><div class='del'>-  put them in the executable.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Call &lt;tt&gt;Tcl_Eval()&lt;/tt&gt; on each initialization script and omit the</div><div class='del'>-  call to &lt;tt&gt;Tcl_Init()&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Or, redefine &lt;tt&gt;tclInit&lt;/tt&gt; so that it does not attempt to source</div><div class='del'>-  &lt;tt&gt;init.tcl&lt;/tt&gt; then call &lt;tt&gt;Tcl_Eval()&lt;/tt&gt; on each initialization</div><div class='del'>-  script after &lt;tt&gt;Tcl_Init()&lt;/tt&gt; returns.&lt;/li&gt;&lt;/ul&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;This approach is not recommended&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Standalone Initialization Techniques&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;Redefining the builtin &lt;tt&gt;source&lt;/tt&gt; command&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;ul&gt;&lt;li&gt;Convert all initialization scripts into C strings and</div><div class='del'>-  put them in the executable.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Create a new &lt;tt&gt;source&lt;/tt&gt; command that</div><div class='del'>-  calls &lt;tt&gt;Tcl_Eval()&lt;/tt&gt; on the appropriate built-in string</div><div class='del'>-  instead of reading from the disk.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Read from disk if the named file is not one that is built in.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Redefining &lt;tt&gt;source&lt;/tt&gt;&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;static&amp;nbsp;char&amp;nbsp;zInitTcl[]&amp;nbsp;=&amp;nbsp;"...";&lt;br&gt;</div><div class='del'>-static&amp;nbsp;char&amp;nbsp;zParrayTcl[]&amp;nbsp;=&amp;nbsp;"...";&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Scripts &lt;tt&gt;init.tcl&lt;/tt&gt; and &lt;tt&gt;parray.tcl&lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;NewSourceCmd(TCLARGS){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;!strcmp(argv[1],"/builtin/init.tcl")&amp;nbsp;)&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInitTcl);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if(&amp;nbsp;!strcmp(argv[1],"/builtin/parray.tcl")&amp;nbsp;)&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zParrayTcl);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Call &lt;tt&gt;Tcl_Eval()&lt;/tt&gt; on builtin strings if the names match&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;Tcl_EvalFile(interp,&amp;nbsp;argv[1]);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Call &lt;tt&gt;Tcl_EvalFile()&lt;/tt&gt; if no match&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;setenv("TCL_LIBRARY","/builtin");&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Causes &lt;tt&gt;tclInit&lt;/tt&gt; to look for &lt;tt&gt;init.tcl&lt;/tt&gt; in &lt;tt&gt;/builtin&lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_CreateCommand(interp,&amp;nbsp;"source",&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NewSourceCmd,&amp;nbsp;0,&amp;nbsp;0);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Redefine &lt;tt&gt;source&lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Init(interp);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Redefining &lt;tt&gt;source&lt;/tt&gt;&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;This approach works for all versions of Tcl and Tk.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Also need to redefine the "&lt;tt&gt;file exists&lt;/tt&gt;" Tcl command since it</div><div class='del'>-  too is used by &lt;tt&gt;tclInit&lt;/tt&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;To verify that the program is really standalone, remove the call</div><div class='del'>-  to &lt;tt&gt;Tcl_EvalFile()&lt;/tt&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Standalone Initialization Techniques&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;Use the &lt;tt&gt;Tcl&lt;/tt&gt;*&lt;tt&gt;InsertProc()&lt;/tt&gt; functions&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-&lt;ul&gt;&lt;li&gt;Three routines that overload basic file I/O operations:</div><div class='del'>-  &lt;ul&gt;</div><div class='del'>-  &lt;li&gt; &lt;tt&gt;TclStatInsertProc()&lt;/tt&gt; &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; &lt;tt&gt;TclAccessInsertProc()&lt;/tt&gt; &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; &lt;tt&gt;TclOpenFileChannelInsertProc()&lt;/tt&gt; &lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Allows us to implement a virtual filesystem that overlays the</div><div class='del'>-  real filesystem.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The virtual filesystem contains all the initialization scripts</div><div class='del'>-  as compiled-in strings.  The initialization scripts look like</div><div class='del'>-  they are resident on disk even though they are built in.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;These functions first appeared in Tcl8.0.3.  </div><div class='del'>-  Presumably to support TclPro Wrapper.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The only documentation is comments on the code. </div><div class='del'>-  See the Tcl source file &lt;tt&gt;generic/tclIOUtil.c&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The &lt;tt&gt;TclStatInsertProc()&lt;/tt&gt; Function&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Sole argument is a pointer to a function whose interface is the</div><div class='del'>-  same as &lt;tt&gt;stat()&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Functions are stacked. Tcl tries each &lt;tt&gt;stat&lt;/tt&gt; function on the</div><div class='del'>-  list, beginning with the most recently inserted, until one succeeds.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The &lt;tt&gt;TclStatInsertProc()&lt;/tt&gt; Function&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tclInt.h&gt;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Rather than &lt;tt&gt;&amp;lt;tcl.h&amp;gt;&lt;/tt&gt;!&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;int&lt;br&gt;</div><div class='del'>-BltinFileStat(char&amp;nbsp;*path,struct&amp;nbsp;stat&amp;nbsp;*buf){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;*zData;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;int&amp;nbsp;nData;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;zData&amp;nbsp;=&amp;nbsp;FindBuiltinFile(path,&amp;nbsp;0,&amp;nbsp;&amp;amp;nData);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Check if &lt;tt&gt;path&lt;/tt&gt; is a builtin&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;zData==0&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;-1;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Fail if &lt;tt&gt;path&lt;/tt&gt; is not a builtin&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;memset(buf,&amp;nbsp;0,&amp;nbsp;sizeof(*buf));&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;buf-&gt;st_mode&amp;nbsp;=&amp;nbsp;0400;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;buf-&gt;st_size&amp;nbsp;=&amp;nbsp;nData;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Success if it is builtin&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;TclStatInsertProc(BltinFileStat);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Register new &lt;tt&gt;stat&lt;/tt&gt; function&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Init(interp);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The &lt;tt&gt;TclAccessInsertProc()&lt;/tt&gt; Function&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tclInt.h&gt;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Rather than &lt;tt&gt;&amp;lt;tcl.h&amp;gt;&lt;/tt&gt;!&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-/*&amp;nbsp;BltinFileStat()&amp;nbsp;not&amp;nbsp;shown...&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-static&amp;nbsp;int&lt;br&gt;</div><div class='del'>-BltinFileAccess(char&amp;nbsp;*path,&amp;nbsp;int&amp;nbsp;mode){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;*zData;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;mode&amp;nbsp;&amp;amp;&amp;nbsp;3&amp;nbsp;)&amp;nbsp;return&amp;nbsp;-1;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;All builtins are read-only&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;zData&amp;nbsp;=&amp;nbsp;FindBuiltinFile(path,&amp;nbsp;0,&amp;nbsp;&amp;amp;nData);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Check if &lt;tt&gt;path&lt;/tt&gt; is a builtin&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;zData==0&amp;nbsp;)&amp;nbsp;return&amp;nbsp;-1;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Fail if &lt;tt&gt;path&lt;/tt&gt; is not a builtin&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Success if it is builtin&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;TclStatInsertProc(BltinFileStat);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;TclAccessInsertProc(BltinFileAccess);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Register new &lt;tt&gt;stat&lt;/tt&gt; and &lt;tt&gt;access&lt;/tt&gt; functions&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Init(interp);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zInputLoop);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The &lt;tt&gt;TclOpenFileChannelInsertProc()&lt;/tt&gt; Function&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;static&amp;nbsp;Tcl_Channel&amp;nbsp;BuiltinFileOpen(&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp,&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;The&amp;nbsp;TCL&amp;nbsp;interpreter&amp;nbsp;doing&amp;nbsp;the&amp;nbsp;open&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;*zFilename,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;file&amp;nbsp;to&amp;nbsp;open&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;*modeString,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Mode&amp;nbsp;string&amp;nbsp;for&amp;nbsp;the&amp;nbsp;open&amp;nbsp;(ignored)&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;int&amp;nbsp;permissions&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Permissions&amp;nbsp;for&amp;nbsp;a&amp;nbsp;newly&amp;nbsp;created&amp;nbsp;file&amp;nbsp;(ignored)&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;*zData;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;BuiltinFileStruct&amp;nbsp;*p;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;int&amp;nbsp;nData;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;zName[50];&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Channel&amp;nbsp;chan;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;static&amp;nbsp;int&amp;nbsp;count&amp;nbsp;=&amp;nbsp;1;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;zData&amp;nbsp;=&amp;nbsp;FindBuiltinFile(zFilename,&amp;nbsp;1,&amp;nbsp;&amp;amp;nData);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if(&amp;nbsp;zData==0&amp;nbsp;)&amp;nbsp;return&amp;nbsp;NULL;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;p&amp;nbsp;=&amp;nbsp;(BuiltinFileStruct*)Tcl_Alloc(&amp;nbsp;sizeof(BuiltinFileStruct)&amp;nbsp;);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if(&amp;nbsp;p==0&amp;nbsp;)&amp;nbsp;return&amp;nbsp;NULL;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;p-&gt;zData&amp;nbsp;=&amp;nbsp;zData;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;p-&gt;nData&amp;nbsp;=&amp;nbsp;nData;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;p-&gt;cursor&amp;nbsp;=&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;sprintf(zName,"etbi_bffffc7c_8049b04",((int)BuiltinFileOpen)&gt;&gt;12,count++);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;chan&amp;nbsp;=&amp;nbsp;Tcl_CreateChannel(&amp;amp;builtinChannelType,&amp;nbsp;zName,&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(ClientData)p,&amp;nbsp;TCL_READABLE);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;chan;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;The &lt;tt&gt;TclOpenFileChannelInsertProc()&lt;/tt&gt; Function&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;static&amp;nbsp;Tcl_ChannelType&amp;nbsp;builtinChannelType&amp;nbsp;=&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"builtin",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Type&amp;nbsp;name.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Always&amp;nbsp;non-blocking.*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;BuiltinFileClose,&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Close&amp;nbsp;proc.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;BuiltinFileInput,&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Input&amp;nbsp;proc.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;BuiltinFileOutput,&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Output&amp;nbsp;proc.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;BuiltinFileSeek,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Seek&amp;nbsp;proc.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Set&amp;nbsp;option&amp;nbsp;proc.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Get&amp;nbsp;option&amp;nbsp;proc.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;BuiltinFileWatch,&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Watch&amp;nbsp;for&amp;nbsp;events&amp;nbsp;on&amp;nbsp;console.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;BuiltinFileHandle,&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Get&amp;nbsp;a&amp;nbsp;handle&amp;nbsp;from&amp;nbsp;the&amp;nbsp;device.&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-};&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;</div><div class='del'>-  &lt;p&gt;For additional information see:&lt;/p&gt;</div><div class='del'>-  &lt;ul&gt;</div><div class='del'>-  &lt;li&gt;The man page for &lt;tt&gt;Tcl_CreateChannel()&lt;/tt&gt;&lt;/li&gt;</div><div class='del'>-  &lt;li&gt;Tk source code file &lt;tt&gt;generic/tkConsole.c&lt;/tt&gt;&lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Initializing Tk&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;All the same initialization script issues as Tcl&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Tk initialization scripts are in a different directory</div><div class='del'>-  than the Tcl initialization scripts - the "Tk Library"&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Call &lt;tt&gt;Tk_Init()&lt;/tt&gt; after &lt;tt&gt;Tcl_Init()&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Must have an event loop or Tk will not work!&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Implementing An Event Loop&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;button&amp;nbsp;.b&amp;nbsp;-text&amp;nbsp;Hello&amp;nbsp;-command&amp;nbsp;exit&lt;br&gt;</div><div class='del'>-pack&amp;nbsp;.b&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Create a Tk interface&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;bind&amp;nbsp;.&amp;nbsp;&amp;lt;Destroy&gt;&amp;nbsp;{&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if&amp;nbsp;{![winfo&amp;nbsp;exists&amp;nbsp;.]}&amp;nbsp;exit&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Close the application when the main window</div><div class='del'>-  is destroyed&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;while&amp;nbsp;1&amp;nbsp;{vwait&amp;nbsp;forever}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;The event loop&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;"Hello, World!" Using Tk&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tk.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;static&amp;nbsp;char&amp;nbsp;zHello[]&amp;nbsp;=&amp;nbsp;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;The application code&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;"button&amp;nbsp;.b&amp;nbsp;"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-text&amp;nbsp;{Hello,&amp;nbsp;World}&amp;nbsp;"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-command&amp;nbsp;exit\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"pack&amp;nbsp;.b\n";&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;static&amp;nbsp;char&amp;nbsp;zEventLoop[]&amp;nbsp;=&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;The event loop&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;"bind&amp;nbsp;.&amp;nbsp;&amp;lt;Destroy&gt;&amp;nbsp;{\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"&amp;nbsp;&amp;nbsp;if&amp;nbsp;{![winfo&amp;nbsp;exists&amp;nbsp;.]}&amp;nbsp;exit\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"}\n"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;"while&amp;nbsp;1&amp;nbsp;{vwait&amp;nbsp;forever}\n";&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_Interp&amp;nbsp;*interp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;interp&amp;nbsp;=&amp;nbsp;Tcl_CreateInterp();&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Init(interp);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tk_Init(interp);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;We really should check the return values of the init functions...&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zHello);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_Eval(interp,&amp;nbsp;zEventLoop);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;The event loop never returns&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*NOTREACHED*/&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Compiling "Hello, World!" For Tk&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;&lt;b&gt;Unix:&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-  $ gcc hello.c -ltk -L/usr/X11R6/lib \ </div><div class='del'>-        -lX11 -ltcl -lm -ldl</div><div class='del'>-  $ ./a.out&lt;/pre&gt;&lt;/blockquote&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;&lt;b&gt;Windows using Cygwin:&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-  C:&gt; gcc hello.c -mwindows -ltk80 -ltcl80 -lm</div><div class='del'>-  C:&gt; a.exe&lt;/pre&gt;&lt;/blockquote&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;&lt;b&gt;Windows using Mingw32:&lt;/b&gt;&lt;/p&gt;</div><div class='del'>-  &lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-  C:&gt; gcc -mno-cygwin hello.c -mwindows \ </div><div class='del'>-           -ltk82 -ltcl82 -lm</div><div class='del'>-  C:&gt; a.exe&lt;/pre&gt;&lt;/blockquote&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Making The Program Standalone&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;To make a Tcl application standalone you have to convert the following</div><div class='del'>-     initialization scripts to C strings and compile them into the</div><div class='del'>-     executable:&lt;/p&gt;</div><div class='del'>-  &lt;table&gt;&lt;tr&gt;</div><div class='del'>-  &lt;td valign="top"&gt;&lt;tt&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;auto.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;history.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;init.tcl</div><div class='del'>-  &lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-  &lt;td valign="top"&gt;&lt;tt&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;ldAout.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;package.tcl</div><div class='del'>-  &lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-  &lt;td valign="top"&gt;&lt;tt&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;parray.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;safe.tcl</div><div class='del'>-  &lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-  &lt;td valign="top"&gt;&lt;tt&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;tclIndex&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;word.tcl</div><div class='del'>-  &lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-  &lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;To make a Tk application standalone requires these additional</div><div class='del'>-     initialization scripts from the Tk Library:&lt;/p&gt;</div><div class='del'>-  &lt;table&gt;&lt;tr&gt;</div><div class='del'>-  &lt;td valign="top"&gt;&lt;tt&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;bgerror.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;button.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;clrpick.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;comdlg.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;console.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;dialog.tcl</div><div class='del'>-  &lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-  &lt;td valign="top"&gt;&lt;tt&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;entry.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;focus.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;listbox.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;menu.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;msgbox.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;optMenu.tcl</div><div class='del'>-  &lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-  &lt;td valign="top"&gt;&lt;tt&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;palette.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;safetk.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;scale.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;scrlbar.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;tclIndex&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;tearoff.tcl</div><div class='del'>-  &lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-  &lt;td valign="top"&gt;&lt;tt&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;text.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;tk.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;tkfbox.tcl&lt;br&gt;</div><div class='del'>-    &amp;nbsp;&amp;nbsp;xmfbox.tcl</div><div class='del'>-  &lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-  &lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-  &lt;p&gt;Total of about 13K lines and 400K bytes of text or 9K lines and</div><div class='del'>-     250K bytes if you strip comments and leading spaces&lt;/p&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;A Review Of The Features We Want&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ol type="A"&gt;</div><div class='del'>-  &lt;li value="1"&gt;</div><div class='del'>-  Combine C/C++ with Tcl/Tk into a single executable.&lt;/dd&gt;</div><div class='del'>-  &lt;/li&gt;&lt;/ol&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ol type="A"&gt;</div><div class='del'>-  &lt;li value="2"&gt;</div><div class='del'>-  The executable should be standalone.  It must not depend</div><div class='del'>-  on files not normally found on the system.</div><div class='del'>-  &lt;/li&gt;&lt;/ol&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ol type="A"&gt;</div><div class='del'>-  &lt;li value="3"&gt;</div><div class='del'>-  It should be difficult for end users to alter the program</div><div class='del'>-  (and introduce bugs).</div><div class='del'>-  &lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Available Programming Aids&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;p&gt;Several tools are available.  The chart below shows which tools</div><div class='del'>- help achieve which objectives.&lt;/p&gt;</div><div class='del'>-</div><div class='del'>- &lt;center&gt;&lt;table border="2"&gt;</div><div class='del'>- &lt;tr&gt;</div><div class='del'>-   &lt;td&gt;&lt;/td&gt;</div><div class='del'>-   &lt;td colspan="3" align="center"&gt;</div><div class='del'>-      &lt;b&gt;Features The Tool Helps To Achieve&lt;/b&gt;&lt;/td&gt;</div><div class='del'>- &lt;/tr&gt;</div><div class='del'>- &lt;tr&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;b&gt;Tool Name&lt;/b&gt;&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;Mix C and Tcl&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;Standalone&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;Hide Source&lt;/td&gt;</div><div class='del'>- &lt;/tr&gt;</div><div class='del'>- &lt;tr&gt;</div><div class='del'>-   &lt;td&gt;SWIG&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>- &lt;/tr&gt;</div><div class='del'>- &lt;tr&gt;</div><div class='del'>-   &lt;td&gt;TclPro Wrapper&lt;/td&gt;</div><div class='del'>-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>- &lt;/tr&gt;</div><div class='del'>- &lt;tr&gt;</div><div class='del'>-   &lt;td&gt;FreeWrap&lt;/td&gt;</div><div class='del'>-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>- &lt;/tr&gt;</div><div class='del'>- &lt;tr&gt;</div><div class='del'>-   &lt;td&gt;Wrap&lt;/td&gt;</div><div class='del'>-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>-   &lt;td&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>- &lt;/tr&gt;</div><div class='del'>- &lt;tr&gt;</div><div class='del'>-   &lt;td&gt;mktclapp&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>-   &lt;td align="center"&gt;&lt;img src="image6"&gt;&lt;/td&gt;</div><div class='del'>- &lt;/tr&gt;</div><div class='del'>- &lt;/table&gt;&lt;/center&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;SWIG&lt;/h2&gt;</div><div class='del'>-&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image7"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Creates an interface between an existing C/C++ library and a high-level</div><div class='del'>-  programming language.  Support for:</div><div class='del'>-  &lt;ul&gt;</div><div class='del'>-  &lt;li&gt; Tcl/Tk &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; Perl &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; Python &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; Java &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; Eiffel &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; Guile &lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;No changes required to C/C++ code.  Can be used with legacy libraries.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Generates an extension, not a standalone binary&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The tutorial on SWIG was yesterday afternoon.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;http://www.swig.org/&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Wrapper Programs&lt;/h2&gt;</div><div class='del'>-&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image8"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Convert a pure Tcl/Tk program into a standalone binary&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Several wrapper programs are available:</div><div class='del'>-  &lt;ul&gt;</div><div class='del'>-  &lt;li&gt; TclPro Wrapper - http://www.scriptics.com/ &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; FreeWrap - http://www.albany.net/~dlabelle/freewrap/freewrap.html &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; Wrap - http://members1.chello.nl/~j.nijtmans/wrap.html &lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;No C compiler required!&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;TclPro will convert Tcl script into bytecode so that it cannot be</div><div class='del'>-  easily read by the end user.  FreeWrap encrypts the scripts.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;FreeWrap uses compression on its executable. </div><div class='del'>-  Wrap uses compression on both the executable and on the bundled script files.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Usually include extensions like winico and/or BLT&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;mktclapp&lt;/h2&gt;</div><div class='del'>-&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image9"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Mix C/C++ with Tcl/Tk into a standalone binary&lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;ul&gt;&lt;li&gt;&lt;tt&gt;mktclapp&lt;/tt&gt; generates an application initialization file</div><div class='del'>-  that contains Tcl scripts as strings and makes all necessary calls </div><div class='del'>-  to &lt;tt&gt;Tcl_Init&lt;/tt&gt;, &lt;tt&gt;Tcl_CreateCommand&lt;/tt&gt;, </div><div class='del'>-  &lt;tt&gt;Tcl&lt;/tt&gt;*&lt;tt&gt;InsertProc&lt;/tt&gt;, etc.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Features to make it easier to write new Tcl command in C&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;xmktclapp.tcl&lt;/tt&gt; provides a GUI interface to &lt;tt&gt;mktclapp&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;http://www.hwaci.com/sw/mktclapp/&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;"Hello, World!" Using Mktclapp&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Download &lt;tt&gt;mktclapp.c&lt;/tt&gt; and &lt;tt&gt;xmktclapp.tcl&lt;/tt&gt; from</div><div class='del'>-  http://www.hwaci.com/sw/mktclapp/&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Compile &lt;tt&gt;mktclapp&lt;/tt&gt;:</div><div class='del'>-  &lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-  cc -o mktclapp mktclapp.c</div><div class='del'>-  &lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Create "Hello, World!" as a Tcl script in file &lt;tt&gt;hw.tcl&lt;/tt&gt;:</div><div class='del'>-  &lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-  button .b -text {Hello, World!} -command exit</div><div class='del'>-  pack .b</div><div class='del'>-  &lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Launch xmktclapp:</div><div class='del'>-  &lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-  wish xmktclapp.tcl</div><div class='del'>-  &lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;"Hello, World!" Using Mktclapp&lt;/h2&gt;</div><div class='del'>-&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Set "Command Line Input?" to "None"&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Set "Standalone?" to "Yes"&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Enter "&lt;tt&gt;hw.mta&lt;/tt&gt;" for the Configuration File&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Enter "&lt;tt&gt;hw.c&lt;/tt&gt;" for the Output C File&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top" align="right"&gt;&lt;img src="image10"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;"Hello, World!" Using Mktclapp&lt;/h2&gt;</div><div class='del'>-&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Go to the "Tcl Scripts" page&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Press "Insert" and add &lt;tt&gt;hw.tcl&lt;/tt&gt; to the list of</div><div class='del'>-  Tcl scripts&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Change the "Startup Script" to be &lt;tt&gt;hw.tcl&lt;/tt&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Select File/Build and File/Exit&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top" align="right"&gt;&lt;img src="image11"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;"Hello, World!" Using Mktclapp&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Mktclapp generates &lt;tt&gt;hw.c&lt;/tt&gt;.</div><div class='del'>-  Compile it something like this:</div><div class='del'>-  &lt;pre&gt;</div><div class='del'>-  cc hw.c -ltk -L/usr/X11R6/lib -lX11 -ltcl -lm -ldl</div><div class='del'>-  &lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Or, if using Cygwin:</div><div class='del'>-  &lt;pre&gt;</div><div class='del'>-  gcc hw.c -mwindows -ltk80 -ltcl80 -lm</div><div class='del'>-  &lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Or, if using Mingw32:</div><div class='del'>-  &lt;pre&gt;</div><div class='del'>-  gcc -mno-cygwin hw.c -mwindows -ltk82 -ltcl82 -lm</div><div class='del'>-  &lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;And you're done!&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Adding C Code To Your Program&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;Put the new C code in a new source file named "&lt;tt&gt;add.c&lt;/tt&gt;"&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;"hw.h"&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Generated by mktclapp&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;int&amp;nbsp;ET_COMMAND_add(ET_TCLARGS){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;tt&gt;ET_TCLARGS&lt;/tt&gt; is a macro defined in &lt;tt&gt;hw.h&lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;int&amp;nbsp;a,&amp;nbsp;b;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;zResult[30];&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;a&amp;nbsp;=&amp;nbsp;atoi(argv[1]);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;b&amp;nbsp;=&amp;nbsp;atoi(argv[2]);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;sprintf(zResult,&amp;nbsp;"-1073742724",&amp;nbsp;a+b);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_SetResult(interp,&amp;nbsp;zResult,&amp;nbsp;TCL_VOLATILE);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Adding C Code To Your Program&lt;/h2&gt;</div><div class='del'>-&lt;table width="100%"&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Go to the "C/C++ Modules" page of xmktclapp.tcl&lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;ul&gt;&lt;li&gt;Press "Insert" and add &lt;tt&gt;add.c&lt;/tt&gt; to the list of</div><div class='del'>-  C/C++ modules&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Select File/Build and File/Exit&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top" align="right"&gt;&lt;img src="image12"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Adding C Code To Your Program&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Compile as follows:</div><div class='del'>-  &lt;pre&gt;</div><div class='del'>-  cc add.c hw.c -ltk -L/usr/X11R6/lib -ltcl -lm -ldl</div><div class='del'>-  &lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Or construct a Makefile that compiles &lt;tt&gt;add.c&lt;/tt&gt; into &lt;tt&gt;add.o&lt;/tt&gt;</div><div class='del'>-  and &lt;tt&gt;hw.c&lt;/tt&gt; into &lt;tt&gt;hw.o&lt;/tt&gt; and then links them.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Compile the same way for Windows except use the usual Windows</div><div class='del'>-  libraries and options...&lt;/li&gt;&lt;/ul&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;Don't have to worry with &lt;tt&gt;Tcl_CreateCommand()&lt;/tt&gt; - Mktclapp takes</div><div class='del'>-  care of that automatically.&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Checking Parameters In The &lt;tt&gt;add&lt;/tt&gt; Command&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;Modify &lt;tt&gt;add.c&lt;/tt&gt; to insure the &lt;tt&gt;add&lt;/tt&gt; command</div><div class='del'>-  is called with exactly two integer arguments&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;"hw.h"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;ET_COMMAND_add(ET_TCLARGS){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;int&amp;nbsp;a,&amp;nbsp;b;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;char&amp;nbsp;zResult[30];&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;argc!=3&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tcl_AppendResult(interp,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"wrong&amp;nbsp;#&amp;nbsp;args:&amp;nbsp;should&amp;nbsp;be:&amp;nbsp;\"",&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;argv[0],&amp;nbsp;"&amp;nbsp;VALUE&amp;nbsp;VALUE\"",&amp;nbsp;0);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Report an error if there are not exactly</div><div class='del'>-  2 arguments&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;Tcl_GetInt(interp,&amp;nbsp;argv[1],&amp;nbsp;&amp;amp;a)!=TCL_OK&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Report an error if the first argument is</div><div class='del'>-  not an integer&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;Tcl_GetInt(interp,&amp;nbsp;argv[2],&amp;nbsp;&amp;amp;b)!=TCL_OK&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Do the same for the second argument&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;sprintf(zResult,&amp;nbsp;"-1073742724",&amp;nbsp;a+b);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_SetResult(interp,&amp;nbsp;zResult,&amp;nbsp;TCL_VOLATILE);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Using The Tcl_Obj Interface&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;In the file &lt;tt&gt;objadd.c&lt;/tt&gt; put this code:&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;"hw.h"&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;ET_OBJCOMMAND_add2(ET_OBJARGS){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;int&amp;nbsp;a,&amp;nbsp;b;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Use "&lt;tt&gt;ET_OBJCOMMAND&lt;/tt&gt;" instead of "&lt;tt&gt;ET_COMMAND&lt;/tt&gt;" and</div><div class='del'>-  "&lt;tt&gt;ET_OBJARGS&lt;/tt&gt;" instead of "&lt;tt&gt;ET_TCLARGS&lt;/tt&gt;"&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;objc!=3&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tcl_WrongNumArgs(interp,&amp;nbsp;1,&amp;nbsp;objv,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"number&amp;nbsp;number");&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;A special routine for "wrong # args" error&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;Tcl_GetIntFromObj(interp,&amp;nbsp;objv[1],&amp;nbsp;&amp;amp;a)&amp;nbsp;){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Instead of &lt;tt&gt;Tcl_GetInt&lt;/tt&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if(&amp;nbsp;Tcl_GetIntFromObj(interp,&amp;nbsp;objv[2],&amp;nbsp;&amp;amp;b)&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_SetIntObj(Tcl_GetObjResult(interp),&amp;nbsp;a+b);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Result stored as integer, not a string&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Speed Of Tcl_Obj Versus "char*"  Interfaces&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Compile both &lt;tt&gt;add&lt;/tt&gt; and &lt;tt&gt;add2&lt;/tt&gt; into the same executable.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Compare their speeds:</div><div class='del'>-  &lt;pre&gt;</div><div class='del'>-   time {add 123456 654321} 10000</div><div class='del'>-  &lt;font color="blue"&gt;26 microseconds per iteration&lt;/font&gt;</div><div class='del'>-   time {add2 123456 654321} 10000</div><div class='del'>-  &lt;font color="blue"&gt;4 microseconds per iteration&lt;/font&gt;</div><div class='del'>-  &lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The Tcl_Obj version is 650 faster!&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Replace the addition with a "real" computation that takes</div><div class='del'>-  10 milliseconds.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Now the Tcl_Obj version is only 0.2 faster!&lt;/li&gt;&lt;/ul&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;In many real-world problems, the Tcl_Obj interface has no noticeable</div><div class='del'>-  speed advantage over the string interface.&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;More About Built-in Tcl Scripts&lt;/h2&gt;</div><div class='del'>-&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image11"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Comments and leading white-space are removed from the</div><div class='del'>-  script by default.  Use the "Don't Strip Comments"</div><div class='del'>-  button to change this.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The file name must exactly match the name that is</div><div class='del'>-  used by the &lt;tt&gt;source&lt;/tt&gt; command.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Locations Of Libraries&lt;/h2&gt;</div><div class='del'>-&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image13"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Tells mktclapp where to look for script libraries.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;All Tcl scripts in the indicated directories are</div><div class='del'>-  compiled into the &lt;tt&gt;appinit.c&lt;/tt&gt; file.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Comments and extra white-space are removed. </div><div class='del'>-  There is no way to turn this off.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Built-in Binary Data Files&lt;/h2&gt;</div><div class='del'>-&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image14"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Arbitrary files become part of the virtual filesystem&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;No comment or white-space removal is attempted&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Useful for images or other binary data&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;New Commands In Namespaces&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;Two underscores (__)  are replaced by two colons (::) in</div><div class='del'>-  command names, thus giving the ability to define new commands</div><div class='del'>-  in a namespace&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;hw.h&gt;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;ET_COMMAND_adder__add(ET_TCLARGS){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;int&amp;nbsp;a,&amp;nbsp;b;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Creates the Tcl command called "&lt;tt&gt;adder::add&lt;/tt&gt;"&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;char&amp;nbsp;*zResult[30];&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if(&amp;nbsp;argc!=3&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tcl_AppendResult(interp,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"wrong&amp;nbsp;#&amp;nbsp;args:&amp;nbsp;should&amp;nbsp;be:&amp;nbsp;\"",&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;argv[0],&amp;nbsp;"&amp;nbsp;VALUE&amp;nbsp;VALUE\"",&amp;nbsp;0);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if(&amp;nbsp;Tcl_GetInt(interp,&amp;nbsp;argv[1],&amp;nbsp;&amp;amp;a)!=TCL_OK&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;if(&amp;nbsp;Tcl_GetInt(interp,&amp;nbsp;argv[1],&amp;nbsp;&amp;amp;b)!=TCL_OK&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;sprintf(zResult,&amp;nbsp;"-1073742724",&amp;nbsp;a+b);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_SetResult(interp,&amp;nbsp;zResult,&amp;nbsp;TCL_VOLATILE);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Adding Your Own &lt;tt&gt;main()&lt;/tt&gt;&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Application&amp;nbsp;specific&amp;nbsp;initialization&amp;nbsp;*/&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Et_Init(argc,&amp;nbsp;argv);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Never returns!&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*NOTREACHED*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;img src="image3"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td valign="top"&gt;&lt;b&gt;The "Autofork" feature is disabled if you supply your own &lt;tt&gt;main()&lt;/tt&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Initializing The Tcl Interpreter&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;counter&amp;nbsp;=&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;Et_Init(argc,&amp;nbsp;argv);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;/*NOTREACHED*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;Et_AppInit(Tcl_Interp&amp;nbsp;*interp){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;Blt_Init(Interp)&amp;nbsp;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_ERROR;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Example: Initialize an extension&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Tcl_LinkVar(interp,&amp;nbsp;"counter",&amp;nbsp;&amp;amp;counter,&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TCL_LINK_INT);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Or link a C variable to a Tcl variable&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return&amp;nbsp;TCL_OK;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Return TCL_OK if successful&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Writing Your Own Event Loop&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;void&amp;nbsp;Et_CustomMainLoop(Tcl_Interp&amp;nbsp;*interp){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Replaces the default event loop&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;return;&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Ex: Return without handling any events.&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Et_Init(argc,&amp;nbsp;argv);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;This now returns after initializing Tcl&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Application&amp;nbsp;code&amp;nbsp;here&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Writing Your Own Event Loop&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;&amp;lt;tcl.h&gt;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-void&amp;nbsp;Et_CustomMainLoop(Tcl_Interp&amp;nbsp;*interp){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;for(;;){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tcl_DoOneEvent(TCL_ALL_EVENTS|TCL_DONT_WAIT);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*&amp;nbsp;Other&amp;nbsp;processing...&amp;nbsp;*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Intermix processing and event handling&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;}&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-int&amp;nbsp;main(int&amp;nbsp;argc,&amp;nbsp;char&amp;nbsp;**argv){&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;Et_Init(argc,&amp;nbsp;argv);&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Never returns&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;&amp;nbsp;&amp;nbsp;/*NOTREACHED*/&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;return&amp;nbsp;0;&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Mktclapp Initialization Sequence&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Initialization starts when the &lt;tt&gt;Et_Init()&lt;/tt&gt; </div><div class='del'>-  function is called either by client code or by</div><div class='del'>-  the &lt;tt&gt;main()&lt;/tt&gt; that mktclapp generates&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Create the main Tcl interpreter&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Construct the virtual filesystem overlay by redefining</div><div class='del'>-  the &lt;tt&gt;source&lt;/tt&gt; command and by using the </div><div class='del'>-  &lt;tt&gt;Tcl&lt;/tt&gt;*&lt;tt&gt;InsertProc()&lt;/tt&gt; functions&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Call &lt;tt&gt;Et_PreInit()&lt;/tt&gt; if the client defines it&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Call &lt;tt&gt;Tcl_Init()&lt;/tt&gt; and &lt;tt&gt;Tk_Init()&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Call &lt;tt&gt;Tcl_CreateCommand()&lt;/tt&gt; and &lt;tt&gt;Tcl_CreateObjCommand()&lt;/tt&gt;</div><div class='del'>-  for every &lt;tt&gt;ET_COMMAND_&lt;/tt&gt;* and &lt;tt&gt;ET_OBJCOMMAND_&lt;/tt&gt;* function</div><div class='del'>-  in the client code&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Call &lt;tt&gt;Et_AppInit()&lt;/tt&gt; if the client defines it&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Run the main Tcl script if there is one&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Call &lt;tt&gt;Et_CustomMainLoop()&lt;/tt&gt; if defined by client code or</div><div class='del'>-  else run the built-in event loop&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Invoking Tcl From C&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Use one of the built-in evaluation functions:</div><div class='del'>-  &lt;center&gt;&lt;table width="80%"&gt;</div><div class='del'>-  &lt;tr&gt;&lt;td valign="top" width="50%"&gt;&lt;ul&gt;</div><div class='del'>-     &lt;li&gt; Tcl_Eval() &lt;/li&gt;</div><div class='del'>-     &lt;li&gt; Tcl_VarEval() &lt;/li&gt;</div><div class='del'>-     &lt;li&gt; Tcl_EvalFile() &lt;/li&gt;</div><div class='del'>-     &lt;li&gt; Tcl_GlobalEval() &lt;/li&gt;</div><div class='del'>-     &lt;/ul&gt;&lt;/td&gt;</div><div class='del'>-  &lt;td valign="top" width="50%"&gt;&lt;ul&gt;</div><div class='del'>-     &lt;li&gt; Tcl_EvalObj() &lt;/li&gt;</div><div class='del'>-     &lt;li&gt; Tcl_GlobalEvalObj() &lt;/li&gt;</div><div class='del'>-   &lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-  &lt;/table&gt;&lt;/center&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Mktclapp provides evaluation functions with variable argument</div><div class='del'>-  lists as in &lt;tt&gt;printf()&lt;/tt&gt;:</div><div class='del'>-  &lt;ul&gt;</div><div class='del'>-  &lt;li&gt; Et_EvalF() &lt;/li&gt;</div><div class='del'>-  &lt;li&gt; Et_GlobalEvalF() &lt;/li&gt;</div><div class='del'>-  &lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Mktclapp provides a global variable &lt;tt&gt;Et_Interp&lt;/tt&gt; which is</div><div class='del'>-  a pointer to the main interpreter&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Invoking Tcl From C&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;Example:  A C function that pops up an error message dialog box&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;"appinit.h"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-void&amp;nbsp;ErrMsg(char&amp;nbsp;*zMsg){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_SetVar(Et_Interp,&amp;nbsp;"zMsg",&amp;nbsp;zMsg,&amp;nbsp;TCL_GLOBAL_ONLY);&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_GlobalEval(Et_Interp,&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"tk_messageBox&amp;nbsp;-icon&amp;nbsp;error&amp;nbsp;-msg&amp;nbsp;$zMsg&amp;nbsp;-type&amp;nbsp;ok");&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Tcl_UnsetVar(Et_Interp,&amp;nbsp;"zMsg",&amp;nbsp;TCL_GLOBAL_ONLY);&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Invoking Tcl From C&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;The same C function implemented using &lt;tt&gt;Et_EvalF()&lt;/tt&gt; instead</div><div class='del'>-  of &lt;tt&gt;Tcl_GlobalEval()&lt;/tt&gt;&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;"appinit.h"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-void&amp;nbsp;ErrMsg(char&amp;nbsp;*zMsg){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Et_EvalF(Et_Interp,&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"tk_messageBox&amp;nbsp;-icon&amp;nbsp;error&amp;nbsp;-msg&amp;nbsp;{¸üÿ¿PX¶}&amp;nbsp;-type&amp;nbsp;ok",&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zMsg);&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;</div><div class='del'>-  Suppose the function is called as follows:</div><div class='del'>-  &lt;blockquote&gt;</div><div class='del'>-    &lt;tt&gt;ErrMsg("Syntax error near \"}\"");&lt;/tt&gt;</div><div class='del'>-  &lt;/blockquote&gt;</div><div class='del'>-  &lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;</div><div class='del'>-  The command that gets executed is:</div><div class='del'>-  &lt;pre&gt;</div><div class='del'>-    tk_messageBox -icon error -msg \ </div><div class='del'>-        {Syntax error near "}"} -type ok</div><div class='del'>-  &lt;/pre&gt;</div><div class='del'>-  &lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-</div><div class='del'>-  &lt;ul&gt;&lt;li&gt;</div><div class='del'>-  But this is an ill-formed Tcl command!</div><div class='del'>-  &lt;/li&gt;&lt;/ul&gt;</div><div class='del'>-&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Invoking Tcl From C&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;Use the "&lt;tt&gt;&lt;/tt&gt;" format to generate a quoted string&lt;/p&gt;&lt;p&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#include&amp;nbsp;"appinit.h"&lt;br&gt;</div><div class='del'>-&amp;nbsp;&lt;br&gt;</div><div class='del'>-void&amp;nbsp;ErrMsg(char&amp;nbsp;*zMsg){&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;Et_EvalF(Et_Interp,&amp;nbsp;&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"tk_messageBox&amp;nbsp;-icon&amp;nbsp;error&amp;nbsp;-msg&amp;nbsp;\"%\"&amp;nbsp;-type&amp;nbsp;ok",&lt;br&gt;</div><div class='del'>-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;zMsg);&lt;br&gt;</div><div class='del'>-}&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;The &lt;tt&gt;&lt;/tt&gt; puts a backslash before all characters that</div><div class='del'>-  are special to Tcl&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The Tcl command becomes:</div><div class='del'>-  &lt;pre&gt;</div><div class='del'>-    tk_messageBox -icon error -msg \ </div><div class='del'>-        "Syntax error near \"\}\"" -type ok</div><div class='del'>-  &lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Other Functions Provided By Mktclapp&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;void Et_ResultF(Tcl_Interp*, ...);&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;char *Et_DStringAppendF(Tcl_DString*, ...);&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;int Et_AppendObjF(Tcl_Obj*, ...);&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;char *mprintf(const char *format, ...);&lt;br&gt;</div><div class='del'>-  char *vmprintf(const char *format, va_list);&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;tt&gt;void Et_NewBuiltinFile(char *filename, char *data, int amt);&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Operating Mktclapp From The Command Line&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Generate the &lt;tt&gt;appinit.h&lt;/tt&gt; header file like this:</div><div class='del'>-  &lt;blockquote&gt;</div><div class='del'>-  &lt;tt&gt;mktclapp -header &amp;gt;appinit.h&lt;/tt&gt;</div><div class='del'>-  &lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Generate the &lt;tt&gt;appinit.c&lt;/tt&gt; file like this:</div><div class='del'>-  &lt;blockquote&gt;</div><div class='del'>-  &lt;tt&gt;mktclapp -f appinit.mta &gt;appinit.c&lt;/tt&gt;</div><div class='del'>-  &lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The &lt;tt&gt;*.mta&lt;/tt&gt; file is just a list of command-line options&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Enter</div><div class='del'>-  &lt;blockquote&gt;</div><div class='del'>-  &lt;tt&gt;mktclapp -help&lt;/tt&gt;</div><div class='del'>-  &lt;/blockquote&gt;</div><div class='del'>-  to get a list of available options&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Look at MTA files generated by xmktclapp.tcl for examples&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Format Of An MTA File&lt;/h2&gt;</div><div class='del'>-&lt;table cellspacing="0" cellpadding="0" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;#&amp;nbsp;Configuration&amp;nbsp;file&amp;nbsp;generated&amp;nbsp;by&amp;nbsp;xmktclapp&lt;br&gt;</div><div class='del'>-#&amp;nbsp;Hand&amp;nbsp;editing&amp;nbsp;is&amp;nbsp;not&amp;nbsp;recommended&lt;br&gt;</div><div class='del'>-#&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Comments begin with one #&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;##&amp;nbsp;Autofork&amp;nbsp;No&lt;br&gt;</div><div class='del'>-##&amp;nbsp;CFile:add.c&amp;nbsp;1&lt;br&gt;</div><div class='del'>-##&amp;nbsp;CFile:objadd.c&amp;nbsp;1&lt;br&gt;</div><div class='del'>-##&amp;nbsp;CmdLine&amp;nbsp;Console&lt;br&gt;</div><div class='del'>-##&amp;nbsp;ConfigFile&amp;nbsp;hw.mta&lt;br&gt;</div><div class='del'>-##&amp;nbsp;Data:check.gif&amp;nbsp;1&lt;br&gt;</div><div class='del'>-##&amp;nbsp;MainScript&amp;nbsp;hw.tcl&lt;br&gt;</div><div class='del'>-##&amp;nbsp;Mode&amp;nbsp;Tcl/Tk&lt;br&gt;</div><div class='del'>-##&amp;nbsp;NoSource&amp;nbsp;No&lt;br&gt;</div><div class='del'>-##&amp;nbsp;OutputFile&amp;nbsp;hw.c&lt;br&gt;</div><div class='del'>-##&amp;nbsp;Shroud&amp;nbsp;No&lt;br&gt;</div><div class='del'>-##&amp;nbsp;Standalone&amp;nbsp;Yes&lt;br&gt;</div><div class='del'>-##&amp;nbsp;TclFile:hw.tcl&amp;nbsp;1&lt;br&gt;</div><div class='del'>-##&amp;nbsp;TclLib&amp;nbsp;/usr/lib/tcl8.0&lt;br&gt;</div><div class='del'>-##&amp;nbsp;TkLib&amp;nbsp;/usr/lib/tk8.0&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;Lines beginning with two #s are used</div><div class='del'>-  by xmktclapp.tcl and ignored by mktclapp&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;tr&gt;&lt;td valign="center"&gt;</div><div class='del'>-&lt;small&gt;&lt;tt&gt;-console&lt;br&gt;</div><div class='del'>--main-script&amp;nbsp;"hw.tcl"&lt;br&gt;</div><div class='del'>--tcl-library&amp;nbsp;"/usr/lib/tcl8.0"&lt;br&gt;</div><div class='del'>--tk-library&amp;nbsp;"/usr/lib/tk8.0"&lt;br&gt;</div><div class='del'>-"add.c"&lt;br&gt;</div><div class='del'>-"objadd.c"&lt;br&gt;</div><div class='del'>--i&amp;nbsp;"check.gif"&lt;br&gt;</div><div class='del'>--strip-tcl&amp;nbsp;"hw.tcl"&lt;/tt&gt;&lt;/small&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;&lt;img src="image2"&gt;&lt;/td&gt;</div><div class='del'>-&lt;td&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-&lt;td valign="center"&gt;All other lines are read by mktclapp and</div><div class='del'>-  ignored by xmktclapp.tcl&lt;/td&gt;</div><div class='del'>-&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='del'>-&lt;h2 align="center"&gt;Summary&lt;/h2&gt;</div><div class='del'>-&lt;p&gt;&lt;ul&gt;&lt;li&gt;Use Tcl for the things Tcl is good at and use C/C++ for the things that</div><div class='del'>-  C/C++ is good at&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Use wrapper programs to make pure Tcl programs standalone&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Use mktclapp to combine Tcl/Tk with C/C++ into a standalone&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</div><div class='del'>-&lt;br clear="both"&gt;&lt;p&gt;&lt;hr&gt;&lt;/p&gt;</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image1 b/ext/tk/sample/tkextlib/tkHTML/page4/image1<br/>deleted file mode 100644<br/>index da26d7092e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image1?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image1</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image2 b/ext/tk/sample/tkextlib/tkHTML/page4/image2<br/>deleted file mode 100644<br/>index e176a96a55..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image2?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image2</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image3 b/ext/tk/sample/tkextlib/tkHTML/page4/image3<br/>deleted file mode 100644<br/>index e829d3712c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image3?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image3</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image4 b/ext/tk/sample/tkextlib/tkHTML/page4/image4<br/>deleted file mode 100644<br/>index f14ea13547..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image4?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image4</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image5 b/ext/tk/sample/tkextlib/tkHTML/page4/image5<br/>deleted file mode 100644<br/>index 4ef6277226..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image5?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image5</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image6 b/ext/tk/sample/tkextlib/tkHTML/page4/image6<br/>deleted file mode 100644<br/>index 1adb261b40..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image6?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image6</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image7 b/ext/tk/sample/tkextlib/tkHTML/page4/image7<br/>deleted file mode 100644<br/>index ba0d26ec18..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image7?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image7</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image8 b/ext/tk/sample/tkextlib/tkHTML/page4/image8<br/>deleted file mode 100644<br/>index 8b81d58e27..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image8?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image8</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/image9 b/ext/tk/sample/tkextlib/tkHTML/page4/image9<br/>deleted file mode 100644<br/>index f0a352f9d0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/image9?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/image9</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/page4/index.html b/ext/tk/sample/tkextlib/tkHTML/page4/index.html<br/>deleted file mode 100644<br/>index c7bfde35a5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/page4/index.html?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/page4/index.html</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,768 +0,0 @@</div><div class='del'>-&lt;!DOCTYPE HTML="HTML" PUBLIC="PUBLIC" "-//W3C//DTD=""-//W3C//DTD" HTML="HTML" 4.0="4.0" Transitional//EN"="Transitional//EN""&gt;</div><div class='del'>-&lt;HTML&gt;</div><div class='del'>-&lt;HEAD&gt;</div><div class='del'>-&lt;TITLE&gt;[fm] welcome to freshmeat.net&lt;/TITLE&gt;</div><div class='del'>-&lt;STYLE TYPE="text/css"&gt;&lt;!-- A:link {text-decoration: none}A:visited{text-decoration:none}A:active{text-decoration:none}--&gt;&lt;/STYLE&gt;</div><div class='del'>-&lt;/HEAD&gt;</div><div class='del'>-&lt;BODY MARGINWIDTH="0" MARGINHEIGHT="0" LEFTMARGIN="0" RIGHTMARGIN="0" TOPMARGIN="0" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#336699" VLINK="#336699" ALINK="#336699"&gt;</div><div class='del'>-&lt;BR&gt;&lt;CENTER&gt;&lt;TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"&gt;&lt;TR&gt;&lt;TD WIDTH="1"&gt;&lt;SCRIPT LANGUAGE="JAVASCRIPT"&gt;</div><div class='del'>-&lt;!--</div><div class='del'>-now = new Date();</div><div class='del'>-tail = now.getTime();</div><div class='del'>-document.write("&lt;IMG SRC='http://209.207.224.246/FreshMeat/Core/pc.gif?/index.php3," + tail + "' WIDTH=1 HEIGHT=1&gt;&lt;BR&gt;");</div><div class='del'>-//--&gt;</div><div class='del'>-&lt;/SCRIPT&gt;</div><div class='del'>-&lt;NOSCRIPT&gt;</div><div class='del'>-&lt;IMG SRC="image1" WIDTH="1" HEIGHT="1"&gt;&lt;BR&gt;</div><div class='del'>-&lt;/NOSCRIPT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"&gt;&lt;TR&gt;&lt;TD WIDTH="468"&gt;&lt;SCRIPT LANGUAGE="JAVASCRIPT"&gt;</div><div class='del'>-&lt;!--</div><div class='del'>-now = new Date();</div><div class='del'>-tail = now.getTime();</div><div class='del'>-AltText = "\"Please click here.\"";</div><div class='del'>-document.write("&lt;A HREF='http://ads.freshmeat.net/cgi-bin/ad_click.pl?index,tsof0001en'&gt;")</div><div class='del'>-document.write("&lt;IMG SRC='http://ads.freshmeat.net/tsof0001en.gif?" + tail + "' WIDTH=468 HEIGHT=60 ALT=" + AltText + "&gt;&lt;/A&gt;&lt;BR&gt;");</div><div class='del'>-//--&gt;</div><div class='del'>-&lt;/SCRIPT&gt;</div><div class='del'>-&lt;NOSCRIPT&gt;</div><div class='del'>-&lt;A HREF="http://ads.freshmeat.net/cgi-bin/ad_click.pl?index,tsof0001en"&gt;&lt;IMG SRC="image2" WIDTH="468" HEIGHT="60" ALT="Please click here."&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&lt;/NOSCRIPT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" BORDER="0" WIDTH="97%"&gt;&lt;TR&gt;</div><div class='del'>-&lt;TD ALIGN="left" VALIGN="bottom"&gt;&lt;A HREF="/"&gt;&lt;IMG SRC="image3" BORDER="0" ALT="freshmeat.net" WIDTH="300" HEIGHT="65"&gt;&lt;/A&gt;&lt;/TD&gt;</div><div class='del'>-&lt;TD VALIGN="bottom" ALIGN="left" ROWSPAN="2"&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;FORM METHOD="get" ACTION="/search.php3"&gt;</div><div class='del'>-&lt;SMALL&gt;find: &lt;INPUT TYPE="text" SIZE="15" NAME="query"&gt;&lt;/SMALL&gt;&lt;/FORM&gt;&lt;/FONT&gt;&lt;/TD&gt;</div><div class='del'>-&lt;TD ALIGN="right" VALIGN="bottom"&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;A HREF="http://www.linux.com"&gt;&lt;FONT COLOR="#000000"&gt;&lt;B&gt;&lt;SMALL&gt;linux.com partner&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="1" BORDER="0" WIDTH="100%"&gt;&lt;TR&gt;</div><div class='del'>-&lt;TD ALIGN="right"&gt;&lt;SMALL&gt;&lt;NOBR&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;B&gt;&lt;A HREF="/"&gt;news&lt;/A&gt; |&lt;BR&gt;</div><div class='del'>-&lt;A HREF="/appindex/"&gt;appindex&lt;/A&gt; |&lt;BR&gt;</div><div class='del'>-&lt;A HREF="/editorials/"&gt;editorials&lt;/A&gt; |&lt;/B&gt;&lt;/FONT&gt;&lt;/NOBR&gt;&lt;/SMALL&gt;&lt;/TD&gt;</div><div class='del'>-&lt;TD ALIGN="right"&gt;&lt;SMALL&gt;&lt;NOBR&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;B&gt;&lt;A HREF="/lounge/"&gt;lounge&lt;/A&gt; |&lt;BR&gt;</div><div class='del'>-&lt;A HREF="/contrib.php3"&gt;contribute&lt;/A&gt; |&lt;BR&gt;</div><div class='del'>-&lt;A HREF="/feedback.php3"&gt;feedback&lt;/A&gt; |&lt;/B&gt;&lt;/FONT&gt;&lt;/NOBR&gt;&lt;/SMALL&gt;&lt;/TD&gt;</div><div class='del'>-&lt;TD ALIGN="right"&gt;&lt;SMALL&gt;&lt;NOBR&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;B&gt;&lt;A HREF="/about.php3"&gt;about&lt;/A&gt; |&lt;BR&gt;</div><div class='del'>-&lt;A HREF="/awards.php3"&gt;awards&lt;/A&gt; |&lt;BR&gt;</div><div class='del'>-&lt;A HREF="/faq.php3"&gt;FAQ&lt;/A&gt; |&lt;/B&gt;&lt;/FONT&gt;&lt;/NOBR&gt;&lt;/SMALL&gt;&lt;/TD&gt;</div><div class='del'>-&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;</div><div class='del'>-&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="0" BORDER="0"&gt;</div><div class='del'>-&lt;TR BGCOLOR="#000000"&gt;&lt;TD&gt;&lt;IMG SRC="image4" WIDTH="1" HEIGHT="2" ALT=""&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" BORDER="0" WIDTH="100%" BGCOLOR="#BBDDFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" VALIGN="top"&gt;</div><div class='del'>-&lt;BR&gt;</div><div class='del'>-&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;sort by: [ &lt;A HREF="/news/2000/01/29/"&gt;date&lt;/A&gt; | &lt;A HREF="/news/list.php3?day=/2000/01/29/&amp;orderby=name"&gt;name&lt;/A&gt; | &lt;A HREF="/news/list.php3?day=/2000/01/29/&amp;orderby=urgency"&gt;urgency&lt;/A&gt; ]&lt;/B&gt;&lt;/SMALL&gt;&lt;BR&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="top" ALIGN="center"&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;We should get this out of the door now&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:scoop@freshmeat.net"&gt;scoop&lt;/A&gt; - January 29th 2000, 23:59 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;P&gt;Everyone else is talking about it, so we should announce it ourselves</div><div class='del'>-before you start to think it's a government hoax. &lt;A HREF="http://server51.freshmeat.net/"&gt;Server 51&lt;/A&gt; is our new hosting service for Open Source projects, based on Super Cool Space Alien Technology(TM). We hadn't planned to announce it quite so soon, and it's still in the alpha stage as we work day and night at integrating SCSAT with our terrestrial systems, but feel free to take a look around and see what's going on. When we're out of the testing stage and ready to make room for your project, we'll send word via your implants. Be listening.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949208399.html"&gt;comments (8)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;Category: freshmeat</div><div class='del'>-&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>- 	&lt;A HREF="http://server51.freshmeat.net"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt;  &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;Is Linux for Crazies?&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:jeff.covey@pobox.com"&gt;jeff covey&lt;/A&gt; - January 29th 2000, 23:59 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;P&gt;Ray Woodcock writes: "In terms relevant to Linux, this freshmeat</div><div class='del'>-editorial glances at the tendency of mainstream viewpoints to dismiss</div><div class='del'>-other viewpoints as 'fringe,' the propensity of dissident movements to</div><div class='del'>-splinter into factions before they can effectively counter their</div><div class='del'>-primary adversaries, and the difficulty of creating stability without</div><div class='del'>-squelching curiosity."</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949208340.html"&gt;comments (2), 2065 words in body&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;Category: Editorial</div><div class='del'>-&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-   &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;RabbIT 2.0.2&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:d94-rol@nada.kth.se"&gt;Ernimril&lt;/A&gt; - January 29th 2000, 18:29 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;RabbIt is the mutating, caching webproxy which is used to speed up surfing over slow links like modems. It does this by removing advertising and background images and scaling down images to low quality JPEGs. RabbIT is written in Java and should be able to run on any platform. It does depend upon an image converter if imagescaleing is on. The recommended image converter is "convert" from the ImageMagick package.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Fixes have been made for a few bugs concerning keep alive and the HTTP response header, a bug with NT and cache directories, a bug concerning requests without a response body, a bug in GZIPHandler that caused it to not gzip already compressed (gzip or compress) streams, a bug in HTTPHeader regarding response phrases that are multiline, and a few bugs in ImageHandler and NCache. GZIPHandler has been built as an intermediate(*) to FilterHandler (this means that it is possible to gzip text/plain, etc., without filtering those streams) uuencoding has been added to the Coder, RabbIT now uses HTTP/1.1, HTMLParser now compiles cleanly with Jikes, and GeneralHeader has been created to allow for HTTPFooter (which is useful when sending chunked data).</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949188564.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: freely distributable&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/daemons/proxy.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Daemons/Proxy&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/902659138/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/902659138/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt;  	&lt;A HREF="/appindex/1998/08/09/902659138.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;nmpg 1.1.3&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:narkos@linuxmail.org"&gt;Joel Lindau&lt;/A&gt; - January 29th 2000, 18:18 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;nmpg is a small command-driven frontend and network-jukebox for mpg123.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Bugfixes, better memory managment, a new .nmpgrc parser, and new options.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949187896.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: OpenSource&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/console/sound.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Console/Sound&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/935430877/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/935430877/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/935430877/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/08/23/935430877.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;mod_dtcl 0.7.3&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:davidw@prosa.it"&gt;David Welton&lt;/A&gt; - January 29th 2000, 18:11 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;Mod_dtcl is a free/open source implementation of server-parsed Tcl under Apache. It allows you to tightly integrate HTML with Tcl, a widely-used scripting language with many years of development invested in it. There are also many external Tcl modules that you can load into mod_dtcl, to create images, access databases, etc.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; A major overhaul of header handling and internal buffering, and the addition of the ability to handle binary data.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949187471.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/web/development.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Web/Development&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/917925309/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/917925309/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/917925309/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/02/01/917925309.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;CoreLinux++ 0.4.6&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:frankc@users.sourceforge.net"&gt;Frank V. Castellucci&lt;/A&gt; - January 29th 2000, 18:07 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;CoreLinux++ is an initiative to normalize methods and conventions for OOA/OOD/C++ development for Linux, materialized in a set of Open Source C++ class libraries (libcorelinux++ and libcoreframework++) to support common patterns and exploit the C++ standards.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; This release adds AbstractFactory and AssociativeIterator analysis, design, implementations, test code, a CVS daily tarball, a Patch Submission facility and updated FAQ, Web Pages, and defect reporting guidelines.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; medium</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949187233.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: LGPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/development/libraries.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Development/Libraries&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/944077775/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/944077775/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/944077775/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/12/01/944077775.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;scribe 0.2&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:kahlage@logoncafe.net"&gt;ChromeBob&lt;/A&gt; - January 29th 2000, 12:12 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;scribe writes functions prototypes for your C code, so you don't have to. It also compares unique functions between source code files and will 'extern' when appropriate. C++ methods support is also planned.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; A fix for an fflush() bug and better documentation.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949165962.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/development/tools.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Development/Tools&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/946661656/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/946661656/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt;  	&lt;A HREF="/appindex/1999/12/31/946661656.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;E theme updater 0.1&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:hallvar@ii.uib.no"&gt;Hallvar Helleseth&lt;/A&gt; - January 29th 2000, 12:04 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;E theme Updater is a bash script to automatically update all of your Enlightenment themes from e.themes.org.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Initial release.</div><div class='del'>-</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949165472.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/console/misc.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Console/Misc&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/949164501/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/949164501/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt;  	&lt;A HREF="/appindex/2000/01/29/949164501.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;Powertweak-Linux 0.1.7&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:dave@denial.force9.co.uk"&gt;Dave Jones&lt;/A&gt; - January 29th 2000, 12:03 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;Powertweak-Linux is a port of the Microsoft Windows tool of the same name rewritten from the ground up. Its main function is to tune your system to its optimal performance settings. Currently, it tunes PCI chipsets and can set /proc/sys entries.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; A major GUI overhaul, the ability to generate configuration files, extended PCI information tabs, extra information support for the Matrox G200, and numerous other bugfixes &amp; improvements.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949165416.html"&gt;comments (2)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/console/system.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Console/System&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/930836224/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/930836224/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/930836224/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/07/01/930836224.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;Pexeso Beta&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:pavolkrigler@pobox.sk"&gt;Pavol Krigler&lt;/A&gt; - January 29th 2000, 11:55 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;pexeso is a simple graphic card game for one or two players.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Initial public release.</div><div class='del'>-</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164956.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: Freeware&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/console/games.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Console/Games&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/949141436/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/949141436/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt;  	&lt;A HREF="/appindex/2000/01/29/949141436.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;XZX 2.9.2&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:Erik.Kunze@fantasy.muc.de"&gt;E. Kunze&lt;/A&gt; - January 29th 2000, 11:54 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;XZX is a portable emulator of ZX Spectrum 48K/128K/+3 (8-bit home computers made by Sir Clive Sinclair) and Pentagon/Scorpion (Spectrum clones made in Russia) for machines running UNIX and the X Window system. XZX is completely written in C and emulates Spectrum 48K, 128K, +2 and +3, Pentagon and Scorpion, Interface I with up to 8 microdrives, Multiface 128 and Multiface 3, BetaDisk 128 interface by Technology Research Ltd with 4 disk drives, +D interface by Miles Gordon Technology with 2 disk drives, Kempston mouse, Kempston joystick and built-in machine code monitor.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Lots of feature improvement and bug fixes. Most parts of the audio support has been rewritten for different UNICES.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164896.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: Shareware&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/x11/emulators.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;X11/Emulators&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/936956384/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/936956384/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/936956384/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/09/10/936956384.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;DistroLib 0.4&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:phir@gcu-squad.org"&gt;PhiR&lt;/A&gt; - January 29th 2000, 11:54 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;DistroLib is an abstraction library designed to make the development of distributed application easier. Its main target is currently compute-bound tasks based on a one server, many clients model (much like distributed.net), but it is quite generic and could be used for any client/server app. It is lightweight, easy-to-use, and relies heavily on threads.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Important bug fixes and command history support.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164869.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/development/libraries.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Development/Libraries&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/942588431/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/942588431/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/942588431/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/11/14/942588431.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;ToutDoux 1.1.7&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:yeupou@altern.org"&gt;yeupou&lt;/A&gt; - January 29th 2000, 11:54 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;ToutDoux is a project manager which lets you design a plan of action using a tree structure, with translations in French and English.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; A new menu and XML standard for save files.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164843.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/gnome/tools.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;GNOME/Tools&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/944433411/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/944433411/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt;  	&lt;A HREF="/appindex/1999/12/05/944433411.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;goMP 1.0.3&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:dioxine@poulet.org"&gt;Gautier&lt;/A&gt; - January 29th 2000, 11:52 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;goMP is a set of CGI scripts that allows you to remotely control, via a Web browser, a computer acting as an MP3 jukebox. This program is very useful for someone who's got a dedicated computer with a lot of MP3 files but that doesn't have any output and input devices except network and sound card. It's main advantages are built-in cataloging, fast access to music, and no special software needed on the client side.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Bugfixes, a password-protected config page, basic search function, easier installation thanks to an install script, and relocation of HTML docs and CGIs to a subdirectory.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; medium</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164772.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: Artistic&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/web/tools.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Web/Tools&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/948492962/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/948492962/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/948492962/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/2000/01/21/948492962.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;APSEND 1.40&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:sventek@gmx.net"&gt;M.K.&lt;/A&gt; - January 29th 2000, 11:50 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;APSEND is a TCP/IP packet sender to test firewalls and other network applications. It also includes a syn flood option, the land DoS attack, and a DoS attack against tcpdump running on a UNIX-based system. Future updates will include support for a scripting language to construct TCP packets and a few more options and protocols like UDP and ICMP. A port of APSEND from Perl to C is planned as well.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; The stream attack, bugfixes, and rewrites for parts of the code.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164633.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/console/networking.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Console/Networking&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/941654429/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/941654429/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/941654429/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/11/03/941654429.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;ecasound 1.6.12r10&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:kaiv@wakkanet.fi"&gt;Kai Vehmanen&lt;/A&gt; - January 29th 2000, 11:48 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;Ecasound is a software package designed for multitrack audio processing. It can be used for simple tasks like audio playback, recording and format conversions, as well as for multitrack effect processing, mixing, recording and signal recycling. Ecasound supports a wide range of audio inputs, outputs and effect algorithms. Ecasound has a chain-based design that allows effects to be easily combined both in series and in parallel. Oscillators and MIDI-CCs can be used for controlling effect parameters. Includes a versatile console mode interface, a Qt-based X-interface and various command-line utils suitable for batch processing.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Support for 24- and 32-bit audio formats and for ALSA 0.5, multichannel noisegate, a new 2nd order lowpass filter, some ia-mode commands, and various bugfixes and low-level improvements.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164529.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/console/sound.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Console/Sound&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/931819147/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/931819147/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/931819147/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/07/12/931819147.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;SCEZ 20000129&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:m032@mbsks.franken.de"&gt;endergone Zwiebeltuete&lt;/A&gt; - January 29th 2000, 11:46 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;SCEZ is a library that should make the handling of smart cards (not memory cards) and card readers as simple as possible and be at the same time small and easily portable. Currently supported are Dumb Mouse, CT-API and Towitoko readers and Schlumberger Cryptoflex, Gemplus GPK4000, GSM SIM and Telesec SigG cards. A PKCS#15 implementation is in the design phase. There are ports to PalmOS and MS-Windows available.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; More card and reader drivers, and an application to read out GSM SIM card (phone book and SMS) and write it to the card.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164394.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: BSD type&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/development/libraries.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Development/Libraries&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/939677525/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/939677525/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt;  	&lt;A HREF="/appindex/1999/10/11/939677525.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;Comicq 0.2.0&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:terminal6@submail.net"&gt;Terminal6&lt;/A&gt; - January 29th 2000, 11:45 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;COMICQ is a command line ICQ messaging tool that allows a user to connect to ICQ using your UIN and password, then sends a message to the destination UIN.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Several bugfixes, icq99a compliance, and a new option --ip that allows you to get any user's IP by their UIN.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164350.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/console/communication.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Console/Communication&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/948389309/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/948389309/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt;  	&lt;A HREF="/appindex/2000/01/20/948389309.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;senv 0.2&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:kojak@ids.pl"&gt;Zbyszek Sobiecki&lt;/A&gt; - January 29th 2000, 11:44 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;Senv allows you to run programs with a specified environment. It can set uid, gid, root directory, working directory, limits, and environment variables. It is useful in init scripts and as a shell for users for setting resource limits and environment variables. You can create sets of configurations and specify the one to use from command line.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Login shell limits and environment setting for users, permanent resource limits for specified groups of users and environment variables, and other minor bugfixes.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949164259.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: GPL&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/console/administration.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;Console/Administration&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/944953892/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt;  &lt;A HREF="http://apps.freshmeat.net/changelog/944953892/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/12/11/944953892.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="97%" BORDER="0" BGCOLOR="#000000"&gt;&lt;TR&gt;&lt;TD COLSPAN="2"&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="3" WIDTH="100%" BORDER="0" BGCOLOR="#FFFFFF"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;&lt;FONT SIZE="+2"&gt;XZX 2.9.2&lt;/FONT&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;SMALL&gt;&lt;B&gt;&lt;A HREF="mailto:Erik.Kunze@fantasy.muc.de"&gt;E. Kunze&lt;/A&gt; - January 29th 2000, 10:55 EST&lt;/B&gt;&lt;/SMALL&gt;</div><div class='del'>-&lt;DIV ALIGN="justify"&gt;&lt;P&gt;XZX is a portable emulator of ZX Spectrum 48K/128K/+3 (8-bit home computers made by Sir Clive Sinclair) and Pentagon/Scorpion (Spectrum clones made in Russia) for machines running UNIX and the X Window system. XZX is completely written in C and emulates Spectrum 48K, 128K, +2 and +3, Pentagon and Scorpion, Interface I with up to 8 microdrives, Multiface 128 and Multiface 3, BetaDisk 128 interface by Technology Research Ltd with 4 disk drives, +D interface by Miles Gordon Technology with 2 disk drives, Kempston mouse, Kempston joystick and built-in machine code monitor.&lt;/DIV&gt;</div><div class='del'>-&lt;P&gt;&lt;B&gt;Changes:&lt;/B&gt; Lots of feature improvement and bug fixes. Most parts of the audio support has been rewritten for different UNICES.</div><div class='del'>-&lt;P&gt;&lt;B&gt;Urgency:&lt;/B&gt; low</div><div class='del'>-&lt;P ALIGN="right"&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/949161354.html"&gt;comments (0)&lt;/A&gt; ]&lt;/B&gt;</div><div class='del'>-&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD VALIGN="middle"&gt;</div><div class='del'>-&amp;nbsp;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#FFFFFF"&gt;&lt;B&gt;&lt;SMALL&gt;License: Shareware&lt;/SMALL&gt;&lt;/B&gt;&lt;BR&gt;</div><div class='del'>-&lt;B&gt;&lt;SMALL&gt;&amp;nbsp;Category: &lt;A HREF="/appindex/x11/emulators.html"&gt;&lt;FONT COLOR="#FFFFFF"&gt;X11/Emulators&lt;/FONT&gt;&lt;/A&gt;&lt;/SMALL&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN="right"&gt;</div><div class='del'>-&lt;A HREF="http://apps.freshmeat.net/download/936956384/"&gt;&lt;IMG SRC="image6" WIDTH="21" HEIGHT="21" BORDER="0" ALT="download"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/homepage/936956384/"&gt;&lt;IMG SRC="image5" WIDTH="21" HEIGHT="21" BORDER="0" ALT="homepage"&gt;&lt;/A&gt; &lt;A HREF="http://apps.freshmeat.net/changelog/936956384/"&gt;&lt;IMG SRC="image8" WIDTH="21" HEIGHT="21" BORDER="0" ALT="changelog"&gt;&lt;/A&gt; 	&lt;A HREF="/appindex/1999/09/10/936956384.html"&gt;&lt;IMG SRC="image7" WIDTH="21" HEIGHT="21" BORDER="0" ALT="appindex record"&gt;&lt;/A&gt; &amp;nbsp;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;HR WIDTH="0" SIZE="0"&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-&lt;P&gt;&lt;SMALL&gt;&lt;CENTER&gt;&lt;B&gt;[ &lt;A HREF="/news/2000/01/29/"&gt;full page for today&lt;/A&gt; | &lt;A HREF="/news/2000/01/28/"&gt;yesterday's edition&lt;/A&gt; ]&lt;/SMALL&gt;&lt;/B&gt;&lt;/CENTER&gt;&lt;/FONT&gt;&lt;/TD&gt;&lt;TD WIDTH="27%" VALIGN="top" ALIGN="center"&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;navigator&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/"&gt;&lt;FONT COLOR="#000000"&gt;full page for today&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/"&gt;&lt;FONT COLOR="#000000"&gt;yesterday's edition&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="news://news.freshmeat.net/"&gt;&lt;FONT COLOR="#000000"&gt;&lt;B&gt;new:&lt;/B&gt; fm news via NNTP&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;eye catcher&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;B&gt;Free Shirts&lt;/B&gt;&lt;BR&gt;We give away a free freshmeat t-shirt every week for the best comment added to an application announcement or story posted on freshmeat.</div><div class='del'>-&lt;P&gt;&lt;B&gt;#freshmeat&lt;/B&gt;&lt;BR&gt;If you want to chat about what's new on freshmeat and hang out with other fm lounge lizards and the fm staff, head over to #freshmeat on irc.freshmeat.net, part of &lt;A HREF="http://openprojects.nu/"&gt;The Open Projects Network&lt;/A&gt;.</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;site notes&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949208399.html"&gt;&lt;FONT COLOR="#000000"&gt;We should get this out of the door now (Jan 29th)&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/01/946704535.html"&gt;&lt;FONT COLOR="#000000"&gt;freshmeat Y2K report (Jan 01st)&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/1999/08/16/934862340.html"&gt;&lt;FONT COLOR="#000000"&gt;Assorted freshmeat notes (Aug 16th)&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;recent editorials&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949208340.html"&gt;&lt;FONT COLOR="#000000"&gt;Is Linux for Crazies? (Jan 29th)&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/22/948603540.html"&gt;&lt;FONT COLOR="#000000"&gt;A New Business Plan for Free Software (Jan 22nd)&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/15/947998740.html"&gt;&lt;FONT COLOR="#000000"&gt;Is Linux Going to Reunite the UNIX Market? (Jan 15th)&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;andover.net&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-&lt;BR&gt;&lt;CENTER&gt;&lt;A HREF="http://andover.net"&gt;&lt;IMG SRC="image9" BORDER="0" WIDTH="150" HEIGHT="43" ALT="Mirror Logo"&gt;&lt;/A&gt;&lt;/CENTER&gt;&lt;P&gt;</div><div class='del'>-- &lt;A HREF="http://www.animfactory.com/"&gt;&lt;FONT COLOR="#000000"&gt;Animation Factory&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.davecentral.com/"&gt;&lt;FONT COLOR="#000000"&gt;DaveCentral&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.freecode.com/"&gt;&lt;FONT COLOR="#000000"&gt;FreeCode&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.InternetTrafficReport.com/"&gt;&lt;FONT COLOR="#000000"&gt;Internet Traffic Report&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.ITManagersJournal.com/"&gt;&lt;FONT COLOR="#000000"&gt;IT Manager's Journal&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.mediabuilder.com/"&gt;&lt;FONT COLOR="#000000"&gt;MediaBuilder&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/"&gt;&lt;FONT COLOR="#000000"&gt;Slashdot&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.slaughterhouse.com/"&gt;&lt;FONT COLOR="#000000"&gt;Slaughterhouse&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.techmailings.com/"&gt;&lt;FONT COLOR="#000000"&gt;TechMailings&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.techsightings.com/"&gt;&lt;FONT COLOR="#000000"&gt;TechSightings&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&lt;BR&gt;&lt;CENTER&gt;&lt;B&gt;E-Commerce&lt;/B&gt;&lt;/CENTER&gt;&lt;P&gt;</div><div class='del'>-- &lt;A HREF="http://www.thinkgeek.com"&gt;&lt;FONT COLOR="#000000"&gt;ThinkGeek (Stuff for smart masses)&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;supported sites&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="http://www.userfriendly.org"&gt;&lt;FONT COLOR="#000000"&gt;Userfriendly.org&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com"&gt;&lt;FONT COLOR="#000000"&gt;SecurityFocus&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://copyleft.net"&gt;&lt;FONT COLOR="#000000"&gt;copyleft&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://filewatcher.org"&gt;&lt;FONT COLOR="#000000"&gt;Filewatcher&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linux.com"&gt;&lt;FONT COLOR="#000000"&gt;Linux.com&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org"&gt;&lt;FONT COLOR="#000000"&gt;LinuxTelephony&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtoday.com"&gt;&lt;FONT COLOR="#000000"&gt;LinuxToday&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://openprojects.nu/services/irc.html"&gt;&lt;FONT COLOR="#000000"&gt;Openprojects&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com"&gt;&lt;FONT COLOR="#000000"&gt;32bitsonline&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.gnu.org"&gt;&lt;FONT COLOR="#000000"&gt;The GNU Project&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="/news/2000/01/29/"&gt;&lt;font color="#000000"&gt;saturday&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949208399.html"&gt;&lt;FONT COLOR="#000000"&gt;We should get this out of the door now&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949208340.html"&gt;&lt;FONT COLOR="#000000"&gt;Is Linux for Crazies?&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949188564.html"&gt;&lt;FONT COLOR="#000000"&gt;RabbIT 2.0.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949187896.html"&gt;&lt;FONT COLOR="#000000"&gt;nmpg 1.1.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949187471.html"&gt;&lt;FONT COLOR="#000000"&gt;mod_dtcl 0.7.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949187233.html"&gt;&lt;FONT COLOR="#000000"&gt;CoreLinux++ 0.4.6&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949165962.html"&gt;&lt;FONT COLOR="#000000"&gt;scribe 0.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949165472.html"&gt;&lt;FONT COLOR="#000000"&gt;E theme updater 0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949165416.html"&gt;&lt;FONT COLOR="#000000"&gt;Powertweak-Linux 0.1.7&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164956.html"&gt;&lt;FONT COLOR="#000000"&gt;Pexeso Beta&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164896.html"&gt;&lt;FONT COLOR="#000000"&gt;XZX 2.9.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164869.html"&gt;&lt;FONT COLOR="#000000"&gt;DistroLib 0.4&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164843.html"&gt;&lt;FONT COLOR="#000000"&gt;ToutDoux 1.1.7&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164772.html"&gt;&lt;FONT COLOR="#000000"&gt;goMP 1.0.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164633.html"&gt;&lt;FONT COLOR="#000000"&gt;APSEND 1.40&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164529.html"&gt;&lt;FONT COLOR="#000000"&gt;ecasound 1.6.12r10&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164394.html"&gt;&lt;FONT COLOR="#000000"&gt;SCEZ 20000129&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164350.html"&gt;&lt;FONT COLOR="#000000"&gt;Comicq 0.2.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949164259.html"&gt;&lt;FONT COLOR="#000000"&gt;senv 0.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949161354.html"&gt;&lt;FONT COLOR="#000000"&gt;XZX 2.9.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949161036.html"&gt;&lt;FONT COLOR="#000000"&gt;log4j 0.7.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949156343.html"&gt;&lt;FONT COLOR="#000000"&gt;SQN Linux 1.6&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949156277.html"&gt;&lt;FONT COLOR="#000000"&gt;Limo 0.3.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949156237.html"&gt;&lt;FONT COLOR="#000000"&gt;Fusion GS 1.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949145887.html"&gt;&lt;FONT COLOR="#000000"&gt;MMR 1.5.4&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949142835.html"&gt;&lt;FONT COLOR="#000000"&gt;KUPS 0.3.4&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949142815.html"&gt;&lt;FONT COLOR="#000000"&gt;3DSE patch for XMMS 4&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949139763.html"&gt;&lt;FONT COLOR="#000000"&gt;Linux 2.3.41&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949139751.html"&gt;&lt;FONT COLOR="#000000"&gt;Free Code for Linux S/390&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135979.html"&gt;&lt;FONT COLOR="#000000"&gt;CircleMUD 3.0 beta patchlevel 17&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135938.html"&gt;&lt;FONT COLOR="#000000"&gt;NiL Isn't Liero 000128&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135913.html"&gt;&lt;FONT COLOR="#000000"&gt;OpenSSH Unix Port 1.2.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135889.html"&gt;&lt;FONT COLOR="#000000"&gt;KBoxes! 1.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135867.html"&gt;&lt;FONT COLOR="#000000"&gt;phpLanParty 0.23&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135509.html"&gt;&lt;FONT COLOR="#000000"&gt;DGen/SDL 1.20&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135482.html"&gt;&lt;FONT COLOR="#000000"&gt;EdcomLib 1.0 alpha 5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135309.html"&gt;&lt;FONT COLOR="#000000"&gt;Etherboot 4.4.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135205.html"&gt;&lt;FONT COLOR="#000000"&gt;BLADE 0.18.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135115.html"&gt;&lt;FONT COLOR="#000000"&gt;Sapphire 0.13.7&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949135070.html"&gt;&lt;FONT COLOR="#000000"&gt;ippl 1.99.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134977.html"&gt;&lt;FONT COLOR="#000000"&gt;Saint 1.5patch1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134943.html"&gt;&lt;FONT COLOR="#000000"&gt;Zircon 1.18.232&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134927.html"&gt;&lt;FONT COLOR="#000000"&gt;nmap 2.3BETA14&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134901.html"&gt;&lt;FONT COLOR="#000000"&gt;xterm patch #124&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134817.html"&gt;&lt;FONT COLOR="#000000"&gt;MyThreads-Links v0.5.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134633.html"&gt;&lt;FONT COLOR="#000000"&gt;sudo 1.6.2p1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134552.html"&gt;&lt;FONT COLOR="#000000"&gt;MIT Photonic-Bands 0.10&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134246.html"&gt;&lt;FONT COLOR="#000000"&gt;Launcher 0.86&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134179.html"&gt;&lt;FONT COLOR="#000000"&gt;nano 0.8.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134103.html"&gt;&lt;FONT COLOR="#000000"&gt;Gtk-- 1.1.8&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949134049.html"&gt;&lt;FONT COLOR="#000000"&gt;tkchooser 0.65&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949133420.html"&gt;&lt;FONT COLOR="#000000"&gt;XShipWars 1.33a&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/29/949133280.html"&gt;&lt;FONT COLOR="#000000"&gt;Lamerpad 0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="/news/2000/01/28/"&gt;&lt;font color="#000000"&gt;friday&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949117833.html"&gt;&lt;FONT COLOR="#000000"&gt;fsv 0.9&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949117711.html"&gt;&lt;FONT COLOR="#000000"&gt;popsneaker 0.1.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949114716.html"&gt;&lt;FONT COLOR="#000000"&gt;eyep-updater.sh 1.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949113240.html"&gt;&lt;FONT COLOR="#000000"&gt;W3Mail 0.5.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949113214.html"&gt;&lt;FONT COLOR="#000000"&gt;The Urgent Decision 0.9.9&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949112269.html"&gt;&lt;FONT COLOR="#000000"&gt;LTSP 1.02&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949112198.html"&gt;&lt;FONT COLOR="#000000"&gt;Production BASIC 0.2.12&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949112123.html"&gt;&lt;FONT COLOR="#000000"&gt;Postfix 19991231-pl03&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949109732.html"&gt;&lt;FONT COLOR="#000000"&gt;Mp3 Commander 0.7&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949109324.html"&gt;&lt;FONT COLOR="#000000"&gt;iManager 1.0.1b&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949108399.html"&gt;&lt;FONT COLOR="#000000"&gt;Eterm 0.9&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949108308.html"&gt;&lt;FONT COLOR="#000000"&gt;dqd_dirindex 1.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949108087.html"&gt;&lt;FONT COLOR="#000000"&gt;Tidings 1.0.4&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949108026.html"&gt;&lt;FONT COLOR="#000000"&gt;localscan 2.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949107922.html"&gt;&lt;FONT COLOR="#000000"&gt;WMKeyboard 0.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949107834.html"&gt;&lt;FONT COLOR="#000000"&gt;fcmp 1.0.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949107767.html"&gt;&lt;FONT COLOR="#000000"&gt;Akkord 0.3.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949107649.html"&gt;&lt;FONT COLOR="#000000"&gt;HiM 0.1.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949106305.html"&gt;&lt;FONT COLOR="#000000"&gt;cdrecord 1.8&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949103400.html"&gt;&lt;FONT COLOR="#000000"&gt;eMixer 0.05.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949103187.html"&gt;&lt;FONT COLOR="#000000"&gt;FreeVSD 1.4.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949103096.html"&gt;&lt;FONT COLOR="#000000"&gt;Common C++ Libraries 0.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949095155.html"&gt;&lt;FONT COLOR="#000000"&gt;Moonshine 1.0beta2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949095112.html"&gt;&lt;FONT COLOR="#000000"&gt;swim 0.3.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949095009.html"&gt;&lt;FONT COLOR="#000000"&gt;Xmame/xmess 0.36b15.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949094448.html"&gt;&lt;FONT COLOR="#000000"&gt;pcmcia-cs 3.1.9&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949091509.html"&gt;&lt;FONT COLOR="#000000"&gt;gPS 0.5.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949091415.html"&gt;&lt;FONT COLOR="#000000"&gt;Snort 1.5.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949090436.html"&gt;&lt;FONT COLOR="#000000"&gt;Pygmy Linux 0.7 beta&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949090237.html"&gt;&lt;FONT COLOR="#000000"&gt;Intro to Bash Programming HOWTO 0.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949084379.html"&gt;&lt;FONT COLOR="#000000"&gt;GNU Pth 1.3b2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949084356.html"&gt;&lt;FONT COLOR="#000000"&gt;Laonux 0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949084304.html"&gt;&lt;FONT COLOR="#000000"&gt;x-wvdial 0.12&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949084188.html"&gt;&lt;FONT COLOR="#000000"&gt;Intro to Bash Programming HOWTO 0.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949084106.html"&gt;&lt;FONT COLOR="#000000"&gt;Catalog 1.02&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949084062.html"&gt;&lt;FONT COLOR="#000000"&gt;harvest 1.5.20-kj-0.9&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949068306.html"&gt;&lt;FONT COLOR="#000000"&gt;wmseti 0.3.0a&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949057272.html"&gt;&lt;FONT COLOR="#000000"&gt;RIG 1.02&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949057019.html"&gt;&lt;FONT COLOR="#000000"&gt;FreeAddr 0.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949056939.html"&gt;&lt;FONT COLOR="#000000"&gt;GtkAda 1.2.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949056664.html"&gt;&lt;FONT COLOR="#000000"&gt;dot.conf 0.6.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949055099.html"&gt;&lt;FONT COLOR="#000000"&gt;dep.pl 1.28.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949054980.html"&gt;&lt;FONT COLOR="#000000"&gt;Prae's Scripts 1.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949044301.html"&gt;&lt;FONT COLOR="#000000"&gt;Project Clock 0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949044285.html"&gt;&lt;FONT COLOR="#000000"&gt;Xtheater 0.2.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949040013.html"&gt;&lt;FONT COLOR="#000000"&gt;i-no Chart 0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949039945.html"&gt;&lt;FONT COLOR="#000000"&gt;spliff 0.8.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949038953.html"&gt;&lt;FONT COLOR="#000000"&gt;Regexx 0.95&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949038316.html"&gt;&lt;FONT COLOR="#000000"&gt;RBook 0.5.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949036742.html"&gt;&lt;FONT COLOR="#000000"&gt;RIG 1.01&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949036714.html"&gt;&lt;FONT COLOR="#000000"&gt;wchat 1.2.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/28/949036428.html"&gt;&lt;FONT COLOR="#000000"&gt;PCCS MySQLDatabase Admin Tool 1.2.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="/news/2000/01/27/"&gt;&lt;font color="#000000"&gt;thursday&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949033332.html"&gt;&lt;FONT COLOR="#000000"&gt;CADUBI 1.1b1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949032987.html"&gt;&lt;FONT COLOR="#000000"&gt;Angus' Chess Clock 0.8.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949032555.html"&gt;&lt;FONT COLOR="#000000"&gt;MP3 Report Generator 1.0.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949032518.html"&gt;&lt;FONT COLOR="#000000"&gt;4DOM 0.9.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949032386.html"&gt;&lt;FONT COLOR="#000000"&gt;4XSLT 0.8.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949031346.html"&gt;&lt;FONT COLOR="#000000"&gt;OpenNaken 1.10&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949025747.html"&gt;&lt;FONT COLOR="#000000"&gt;iManager 1.0b&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949025168.html"&gt;&lt;FONT COLOR="#000000"&gt;QuakeForge 0.1.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949023271.html"&gt;&lt;FONT COLOR="#000000"&gt;pylice 0.7.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949023250.html"&gt;&lt;FONT COLOR="#000000"&gt;Solfege 0.6.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949023151.html"&gt;&lt;FONT COLOR="#000000"&gt;xinetd 2.1.8.7p1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949022849.html"&gt;&lt;FONT COLOR="#000000"&gt;jac 0.13&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949022803.html"&gt;&lt;FONT COLOR="#000000"&gt;Xmms 1.0.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949022319.html"&gt;&lt;FONT COLOR="#000000"&gt;KSrnd 0.97&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949021877.html"&gt;&lt;FONT COLOR="#000000"&gt;getpg / UW-IMAP 0.54&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949021849.html"&gt;&lt;FONT COLOR="#000000"&gt;getpg 0.53&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949021824.html"&gt;&lt;FONT COLOR="#000000"&gt;setserial 2.17&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949021250.html"&gt;&lt;FONT COLOR="#000000"&gt;Pan 0.7.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949021216.html"&gt;&lt;FONT COLOR="#000000"&gt;jwhois 2.4.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949021126.html"&gt;&lt;FONT COLOR="#000000"&gt;Kmp3 1.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949020964.html"&gt;&lt;FONT COLOR="#000000"&gt;xPine 0.0.12&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949019905.html"&gt;&lt;FONT COLOR="#000000"&gt;Avenger's News System 2.1 Alpha&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949019709.html"&gt;&lt;FONT COLOR="#000000"&gt;RIG 1.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949019321.html"&gt;&lt;FONT COLOR="#000000"&gt;scroller 1.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949018347.html"&gt;&lt;FONT COLOR="#000000"&gt;Perl EyeP Client 0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949017796.html"&gt;&lt;FONT COLOR="#000000"&gt;sfront 0.54&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949017631.html"&gt;&lt;FONT COLOR="#000000"&gt;XFrisk 1.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949016202.html"&gt;&lt;FONT COLOR="#000000"&gt;Moffy 0.0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949015348.html"&gt;&lt;FONT COLOR="#000000"&gt;Solid POP3 0.14&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949014200.html"&gt;&lt;FONT COLOR="#000000"&gt;php3guest 1.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949013630.html"&gt;&lt;FONT COLOR="#000000"&gt;crUD 01.27.2000&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949013380.html"&gt;&lt;FONT COLOR="#000000"&gt;crUD 01.27.2000&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949012979.html"&gt;&lt;FONT COLOR="#000000"&gt;Free Pascal Compiler 0.99.14&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949012771.html"&gt;&lt;FONT COLOR="#000000"&gt;gtk-font-hack 0.2-gtk-1.2.6&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949009233.html"&gt;&lt;FONT COLOR="#000000"&gt;Linux 2.2.15pre5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/949005620.html"&gt;&lt;FONT COLOR="#000000"&gt;krunseti 0.2.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948996446.html"&gt;&lt;FONT COLOR="#000000"&gt;CompuPic 5.0.1036&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948995905.html"&gt;&lt;FONT COLOR="#000000"&gt;gfontview 0.3.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948995819.html"&gt;&lt;FONT COLOR="#000000"&gt;authlocal 1.0.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948995600.html"&gt;&lt;FONT COLOR="#000000"&gt;bigwig 1.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948995501.html"&gt;&lt;FONT COLOR="#000000"&gt;CAFire 0.0.11&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948995429.html"&gt;&lt;FONT COLOR="#000000"&gt;ANVLOGIN 2.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948994944.html"&gt;&lt;FONT COLOR="#000000"&gt;sawmill.el 1.9&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948994810.html"&gt;&lt;FONT COLOR="#000000"&gt;Perlsh 20000127&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948994776.html"&gt;&lt;FONT COLOR="#000000"&gt;sitescooper 2.1.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948994691.html"&gt;&lt;FONT COLOR="#000000"&gt;MHDns 1.4&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948994419.html"&gt;&lt;FONT COLOR="#000000"&gt;JChemPaint 0.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948994364.html"&gt;&lt;FONT COLOR="#000000"&gt;Filesystems HOWTO 0.7.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948994343.html"&gt;&lt;FONT COLOR="#000000"&gt;KSnes9x 1.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948993513.html"&gt;&lt;FONT COLOR="#000000"&gt;Mozilla M13&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948993439.html"&gt;&lt;FONT COLOR="#000000"&gt;edna 0.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948993409.html"&gt;&lt;FONT COLOR="#000000"&gt;GMasqdialer 0.99.8&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948993341.html"&gt;&lt;FONT COLOR="#000000"&gt;spliff 0.8&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948992808.html"&gt;&lt;FONT COLOR="#000000"&gt;MultiSeti 0.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970667.html"&gt;&lt;FONT COLOR="#000000"&gt;rude 0.50&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970605.html"&gt;&lt;FONT COLOR="#000000"&gt;cgi-util++ 0.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970479.html"&gt;&lt;FONT COLOR="#000000"&gt;Cricket 0.72&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970458.html"&gt;&lt;FONT COLOR="#000000"&gt;nuni 0.04&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970379.html"&gt;&lt;FONT COLOR="#000000"&gt;Ksetiwatch 0.3.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970358.html"&gt;&lt;FONT COLOR="#000000"&gt;SiteMgrYAP 0.1.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970322.html"&gt;&lt;FONT COLOR="#000000"&gt;phpLanParty 0.21&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970285.html"&gt;&lt;FONT COLOR="#000000"&gt;Glitter Newsreader 0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970263.html"&gt;&lt;FONT COLOR="#000000"&gt;Fastresolve 2.4&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970164.html"&gt;&lt;FONT COLOR="#000000"&gt;ColdSync 1.1.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970080.html"&gt;&lt;FONT COLOR="#000000"&gt;DDD 3.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948970032.html"&gt;&lt;FONT COLOR="#000000"&gt;X Northern Captain 4.2.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969919.html"&gt;&lt;FONT COLOR="#000000"&gt;abcde 1.0.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969659.html"&gt;&lt;FONT COLOR="#000000"&gt;Gnapster 1.3.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969551.html"&gt;&lt;FONT COLOR="#000000"&gt;xmix 1.0 Alpha&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969488.html"&gt;&lt;FONT COLOR="#000000"&gt;gtktetcolor 0.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969412.html"&gt;&lt;FONT COLOR="#000000"&gt;muttzilla 0.40&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969395.html"&gt;&lt;FONT COLOR="#000000"&gt;muttzilla 0.40&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969337.html"&gt;&lt;FONT COLOR="#000000"&gt;asp2php 0.73.6&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969217.html"&gt;&lt;FONT COLOR="#000000"&gt;mod_ticket 1.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948969078.html"&gt;&lt;FONT COLOR="#000000"&gt;MegaHAL for Eggdrop .01&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948968456.html"&gt;&lt;FONT COLOR="#000000"&gt;Jetty 2.3.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948968386.html"&gt;&lt;FONT COLOR="#000000"&gt;xlpotdb 1.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948968341.html"&gt;&lt;FONT COLOR="#000000"&gt;Koala Complete MUD Server 0.1.1a&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948968255.html"&gt;&lt;FONT COLOR="#000000"&gt;mcountd 0.4&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948967933.html"&gt;&lt;FONT COLOR="#000000"&gt;cdbackup 0.5.0&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="/news/2000/01/27/948967908.html"&gt;&lt;FONT COLOR="#000000"&gt;The Java SSH/Telnet Application/Applet 2.0 RC1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="http://slashdot.org"&gt;&lt;font color="#000000"&gt;slashdot&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/29/1534255"&gt;&lt;FONT COLOR="#000000"&gt;Petition Apple for Linux QuickTime&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/29/1223249"&gt;&lt;FONT COLOR="#000000"&gt;GNUstep 0.6.5 freeze&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/28/2324203"&gt;&lt;FONT COLOR="#000000"&gt;YETI@Home&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/29/1024215"&gt;&lt;FONT COLOR="#000000"&gt;Documents Unsealed in Microsoft/Caldera Case&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/29/0837235"&gt;&lt;FONT COLOR="#000000"&gt;Who Bought Linux.Net?&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/24/1146250"&gt;&lt;FONT COLOR="#000000"&gt;E-Mails from (Over?) The Edge&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/29/0834223"&gt;&lt;FONT COLOR="#000000"&gt;Linux Kernel 2.3.41&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/28/2311232"&gt;&lt;FONT COLOR="#000000"&gt;Congress Still Figuring Out E-Mail&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/22/1946244"&gt;&lt;FONT COLOR="#000000"&gt;Sci Fi Literature 101?&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://slashdot.org/article.pl?sid=00/01/28/2318246"&gt;&lt;FONT COLOR="#000000"&gt;Could Distributed.Net Help the Mars Polar Lander?&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="http://www.securityfocus.com"&gt;&lt;font color="#000000"&gt;securityfocus&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=news&amp;id=http://www.zdnet.com/zdnn/stories/news/0,4586,2429334,00.html?chkpt=zdnntop"&gt;&lt;FONT COLOR="#000000"&gt;Win2000 security hole a 'major threat'&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=news&amp;id=http://www.computerworld.com/home/print.nsf/all/000128e45a"&gt;&lt;FONT COLOR="#000000"&gt;Visa acknowledges cracker break-ins&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=news&amp;id=http://www.zdnet.com/sr/stories/column/0,4712,2429536,00.html"&gt;&lt;FONT COLOR="#000000"&gt;What's Wrong With Microsoft  Security?&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=news&amp;id=http://www.zdnet.com/pcweek/stories/news/0,4153,2429334,00.html"&gt;&lt;FONT COLOR="#000000"&gt;Microsoft posts first Win2K security patch&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=tools&amp;id=1018"&gt;&lt;FONT COLOR="#000000"&gt;Libnids 1.12&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=news&amp;id=http://www.theregister.co.uk/000127-000005.html"&gt;&lt;FONT COLOR="#000000"&gt;New hack attack is greater threat than imagined&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=news&amp;id=http://www.mercurycenter.com/svtech/news/indepth/docs/hacker012700.htm"&gt;&lt;FONT COLOR="#000000"&gt;Student charged with hacking&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=library&amp;id=63"&gt;&lt;FONT COLOR="#000000"&gt;Building and Managing Virtual Private Networks (book)&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=library&amp;id=111"&gt;&lt;FONT COLOR="#000000"&gt;Threats, Vulnerabilities and Real-Worl Responses: The Foundations of the TruSecure Process&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.securityfocus.com/level2/?go=library&amp;id=1701"&gt;&lt;FONT COLOR="#000000"&gt;The Hundredth Window : Protecting Your Privacy and Security in the Age of the Internet (boo&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="http://www.bebits.com"&gt;&lt;font color="#000000"&gt;bebits&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/706/"&gt;&lt;FONT COLOR="#000000"&gt;Pe 3.0a3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/757/"&gt;&lt;FONT COLOR="#000000"&gt;Rarscript 1.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/736/"&gt;&lt;FONT COLOR="#000000"&gt;CD Manager 0.66a beta&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/174/"&gt;&lt;FONT COLOR="#000000"&gt;TraX 1.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/785/"&gt;&lt;FONT COLOR="#000000"&gt;BeMath 1.2.2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/784/"&gt;&lt;FONT COLOR="#000000"&gt;simple blackjack 1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/758/"&gt;&lt;FONT COLOR="#000000"&gt;HtmlTree 0.5.3&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/783/"&gt;&lt;FONT COLOR="#000000"&gt;Yacp 0.1&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/222/"&gt;&lt;FONT COLOR="#000000"&gt;TicTacToe 1.5&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.bebits.com/app/706/"&gt;&lt;FONT COLOR="#000000"&gt;Pe 3.0a2&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="http://linuxtoday.com"&gt;&lt;font color="#000000"&gt;linuxtoday&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="http://linuxtoday.com/story.php3?sn=15878"&gt;&lt;FONT COLOR="#000000"&gt;Linux Journal: KDE--The Next Generation&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://linuxtoday.com/story.php3?sn=15876"&gt;&lt;FONT COLOR="#000000"&gt;Kernel Cousin gimp-devel #11 Is Out&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://linuxtoday.com/story.php3?sn=15875"&gt;&lt;FONT COLOR="#000000"&gt;Infoworld: Corel Linux OS ideal for the desktop&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://linuxtoday.com/story.php3?sn=15874"&gt;&lt;FONT COLOR="#000000"&gt;Technology Evaluation: IBM Jumps on the Linux Bandwagon with Both Feet, Sort Of&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://linuxtoday.com/story.php3?sn=15873"&gt;&lt;FONT COLOR="#000000"&gt;Tobias Hövekamp: European Union acknowledges&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF=""&gt;&lt;FONT COLOR="#000000"&gt;&amp;&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF=""&gt;&lt;FONT COLOR="#000000"&gt;#34;Open Source Software&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF=""&gt;&lt;FONT COLOR="#000000"&gt;&amp;&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF=""&gt;&lt;FONT COLOR="#000000"&gt;#34;&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="http://www.linuxtelephony.org"&gt;&lt;font color="#000000"&gt;linuxtelephony&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=208&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;Traverse Technologies releases NETspider-U in US&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=207&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;Quicknet releases new GPL'd Linux Drivers!&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=206&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;Natural Microsystems Delivers Carrier-Class Linux&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=205&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;Quicknet is hiring programmers of all kinds!&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=204&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;Babylon MLPPP Software Released under GPL&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=202&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;Linux Telephony Server Project?&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=203&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;Vovida Networks to Hire Telephony Software Engineers&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=200&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;SPIRO-Linux Introduces Web-Enabled Phone Administration&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=199&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;LinuxTelephony sponsors area at LinuxFest 2000&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.linuxtelephony.org/article.cgi?i=198&amp;r=0"&gt;&lt;FONT COLOR="#000000"&gt;GSM-Mobile Switching Center (MSC) with Linux-PC&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;TABLE BORDER="0" CELLPADDING="1" CELLSPACING="0" BGCOLOR="#000000" WIDTH="97%"&gt;&lt;TR&gt;&lt;TD&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" BORDER="0" CELLSPACING="1" CELLPADDING="3"&gt;</div><div class='del'>-&lt;TR&gt;&lt;TD ALIGN="center" BGCOLOR="#EEEEEE"&gt;&lt;B&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;FONT COLOR="#000000"&gt;&lt;a href="http://www.32bitsonline.com"&gt;&lt;font color="#000000"&gt;32bitsonline&lt;/font&gt;&lt;/a&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD BGCOLOR="#FFFFFF"&gt;&lt;SMALL&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/article.php3?file=issues/200001/homeworld&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;Game: Homeworld&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/news.php3?news=news/200001/nb200001271a&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;DVD Lawsuit Spreads Its Own 'Trade Secrets'&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/news.php3?news=news/200001/nb200001272&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;Register.com Adds 'One-step' Domain Registration&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/article.php3?file=issues/200001/webevent&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;WebEvent: Keeping you organized&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/news.php3?news=news/200001/nb200001273a&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;Y2K Officers Defend $100 Bil Investment&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/article.php3?file=issues/200001/jan2000_john_berger&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;DON'T BE FOOLED&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/news.php3?news=news/200001/nb200001274&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;Microsoft Scorns Think-Tank's Breakup Idea&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/news.php3?news=news/200001/nb200001275a&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;Yahoo Accused Of Stalking Internet Users&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/news.php3?news=news/200001/nb200001276a&amp;page=1</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;eToys.com Settles Spat With Swiss Artist Group&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-- &lt;A HREF="http://www.32bitsonline.com/</div><div class='del'>-"&gt;&lt;FONT COLOR="#000000"&gt;[more articles/news]&lt;/FONT&gt;&lt;/A&gt;&lt;BR&gt;</div><div class='del'>-&amp;nbsp;&lt;/FONT&gt;&lt;/SMALL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;P&gt;</div><div class='del'>-&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;</div><div class='del'>-&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;TABLE WIDTH="100%" CELLPADDING="0" CELLSPACING="0" BORDER="0"&gt;</div><div class='del'>-&lt;TR BGCOLOR="#000000"&gt;&lt;TD&gt;&lt;IMG SRC="image4" WIDTH="1" HEIGHT="2" ALT=""&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;/CENTER&gt;</div><div class='del'>-&lt;TABLE CELLSPACING="0" CELLPADDING="2" WIDTH="100%" BORDER="0"&gt;&lt;TR&gt;</div><div class='del'>-&lt;TD VALIGN="top" ALIGN="center"&gt;&lt;FONT FACE="Lucida,Verdana,Helvetica,Arial"&gt;&lt;SMALL&gt;copyright © 1997-2000 &lt;A HREF="http://andover.net"&gt;Andover.Net&lt;/A&gt; -</div><div class='del'>-icons courtesy of &lt;A HREF="mailto:tigert@gimp.org"&gt;tigert@gimp.org&lt;/A&gt; -</div><div class='del'>-code revision &lt;A HREF="http://freshmeat.net/ChangeLog"&gt;20000101&lt;/A&gt; -</div><div class='del'>-our &lt;A HREF="http://www.andover.net/privacy.html"&gt;privacy policy&lt;/A&gt;&lt;/SMALL&gt;&lt;/FONT&gt;&lt;/TD&gt;</div><div class='del'>-&lt;/TR&gt;&lt;/TABLE&gt;</div><div class='del'>-&lt;/BODY&gt;</div><div class='del'>-&lt;/HTML&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkHTML/ss.rb b/ext/tk/sample/tkextlib/tkHTML/ss.rb<br/>deleted file mode 100644<br/>index 1c13d7ac34..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkHTML/ss.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkHTML/ss.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,436 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-# This script implements the "ss" application.  "ss" implements</div><div class='del'>-# a presentation slide-show based on HTML slides.</div><div class='del'>-# </div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tkHTML'</div><div class='del'>-</div><div class='del'>-file = ARGV[0]</div><div class='del'>-</div><div class='del'>-class TkHTML_File_Viewer</div><div class='del'>-  include TkComm</div><div class='del'>-</div><div class='del'>-# These are images to use with the actual image specified in a</div><div class='del'>-# "&lt;img&gt;" markup can't be found.</div><div class='del'>-#</div><div class='del'>-@@biggray = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-    R0lGODdhPAA+APAAALi4uAAAACwAAAAAPAA+AAACQISPqcvtD6OctNqLs968+w+G4kiW5omm</div><div class='del'>-    6sq27gvH8kzX9o3n+s73/g8MCofEovGITCqXzKbzCY1Kp9Sq9YrNFgsAO///</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-@@smgray = TkPhotoImage.new(:data=&gt;&lt;&lt;'EOD')</div><div class='del'>-    R0lGODdhOAAYAPAAALi4uAAAACwAAAAAOAAYAAACI4SPqcvtD6OctNqLs968+w+G4kiW5omm</div><div class='del'>-    6sq27gvH8kzX9m0VADv/</div><div class='del'>-EOD</div><div class='del'>-</div><div class='del'>-  def initialize(file = nil)</div><div class='del'>-    @root  = TkRoot.new(:title=&gt;'HTML File Viewer', :iconname=&gt;'HV')</div><div class='del'>-    @fswin = nil</div><div class='del'>-</div><div class='del'>-    @html = nil</div><div class='del'>-    @html_fs = nil</div><div class='del'>-</div><div class='del'>-    @hotkey = {}</div><div class='del'>-</div><div class='del'>-    @applet_arg = TkVarAccess.new_hash('AppletArg')</div><div class='del'>-</div><div class='del'>-    @images   = {}</div><div class='del'>-    @old_imgs = {}</div><div class='del'>-    @big_imgs = {}</div><div class='del'>-</div><div class='del'>-    @last_dir = Dir.pwd</div><div class='del'>-</div><div class='del'>-    @last_file = ''</div><div class='del'>-</div><div class='del'>-    @key_block = false</div><div class='del'>-</div><div class='del'>-    Tk::HTML_Widget::ClippingWindow.bind('1', </div><div class='del'>-                                         proc{|w, ksym| key_press(w, ksym)}, </div><div class='del'>-                                         '%W Down')</div><div class='del'>-    Tk::HTML_Widget::ClippingWindow.bind('3', </div><div class='del'>-                                         proc{|w, ksym| key_press(w, ksym)}, </div><div class='del'>-                                         '%W Up')</div><div class='del'>-    Tk::HTML_Widget::ClippingWindow.bind('2', </div><div class='del'>-                                         proc{|w, ksym| key_press(w, ksym)}, </div><div class='del'>-                                         '%W Down')</div><div class='del'>-</div><div class='del'>-    Tk::HTML_Widget::ClippingWindow.bind('KeyPress', </div><div class='del'>-                                         proc{|w, ksym| key_press(w, ksym)}, </div><div class='del'>-                                         '%W %K')</div><div class='del'>-</div><div class='del'>-    ############################################</div><div class='del'>-    #</div><div class='del'>-    # Build the half-size view of the page</div><div class='del'>-    #</div><div class='del'>-    menu_spec = [</div><div class='del'>-      [['File', 0], </div><div class='del'>-        ['Open',        proc{sel_load()},   0], </div><div class='del'>-        ['Full Screen', proc{fullscreen()}, 0], </div><div class='del'>-        ['Refresh',     proc{refresh()},    0], </div><div class='del'>-        '---',</div><div class='del'>-        ['Exit', proc{exit}, 1]]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    mbar = @root.add_menubar(menu_spec)</div><div class='del'>-</div><div class='del'>-    @html = Tk::HTML_Widget.new(:width=&gt;512, :height=&gt;384, </div><div class='del'>-                                :padx=&gt;5, :pady=&gt;9, </div><div class='del'>-                                :formcommand=&gt;proc{|*args| form_cmd(*args)},</div><div class='del'>-                                :imagecommand=&gt;proc{|*args|</div><div class='del'>-                                  image_cmd(1, *args)</div><div class='del'>-                                }, </div><div class='del'>-                                :scriptcommand=&gt;proc{|*args|</div><div class='del'>-                                  script_cmd(*args)</div><div class='del'>-                                }, </div><div class='del'>-                                :appletcommand=&gt;proc{|*args|</div><div class='del'>-                                  applet_cmd(*args)</div><div class='del'>-                                }, </div><div class='del'>-                                :hyperlinkcommand=&gt;proc{|*args| </div><div class='del'>-                                  hyper_cmd(*args)</div><div class='del'>-                                }, </div><div class='del'>-                                :fontcommand=&gt;proc{|*args|</div><div class='del'>-                                  pick_font(*args)</div><div class='del'>-                                }, </div><div class='del'>-                                :appletcommand=&gt;proc{|*args|</div><div class='del'>-                                  run_applet('small', *args)</div><div class='del'>-                                }, </div><div class='del'>-                                :bg=&gt;'white', :tablerelief=&gt;:raised)</div><div class='del'>-</div><div class='del'>-    @html.token_handler('meta', proc{|*args| meta(@html, *args)})</div><div class='del'>-</div><div class='del'>-    vscr = @html.yscrollbar(TkScrollbar.new)</div><div class='del'>-    hscr = @html.xscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-    Tk.grid(@html, vscr, :sticky=&gt;:news)</div><div class='del'>-    Tk.grid(hscr,       :sticky=&gt;:ew)</div><div class='del'>-    @root.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-    @root.grid_columnconfigure(1, :weight=&gt;0)</div><div class='del'>-    @root.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    @root.grid_rowconfigure(1, :weight=&gt;0)</div><div class='del'>-</div><div class='del'>-    ############################################</div><div class='del'>-</div><div class='del'>-    @html.clipwin.focus</div><div class='del'>-</div><div class='del'>-    # If an arguent was specified, read it into the HTML widget.</div><div class='del'>-    #</div><div class='del'>-    Tk.update</div><div class='del'>-    if file &amp;&amp; file != ""</div><div class='del'>-      load_file(file)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # A font chooser routine.</div><div class='del'>-  #</div><div class='del'>-  # html[:fontcommand] = pick_font</div><div class='del'>-  def pick_font(size, attrs)</div><div class='del'>-    # puts "FontCmd: #{size} #{attrs}"</div><div class='del'>-    [ ((attrs =~ /fixed/)? 'courier': 'charter'), </div><div class='del'>-      (12 * (1.2**(size.to_f - 4.0))).to_i, </div><div class='del'>-      ((attrs =~ /italic/)? 'italic': 'roman'), </div><div class='del'>-      ((attrs =~ /bold/)? 'bold': 'normal') ].join(' ')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This routine is called to pick fonts for the fullscreen view.</div><div class='del'>-  #</div><div class='del'>-  def pick_font_fs(size, attrs)</div><div class='del'>-    baseFontSize = 24</div><div class='del'>-</div><div class='del'>-    # puts "FontCmd: #{size} #{attrs}"</div><div class='del'>-    [ ((attrs =~ /fixed/)? 'courier': 'charter'), </div><div class='del'>-      (baseFontSize * (1.2**(size.to_f - 4.0))).to_i, </div><div class='del'>-      ((attrs =~ /italic/)? 'italic': 'roman'), </div><div class='del'>-      ((attrs =~ /bold/)? 'bold': 'normal')  ].join(' ')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  #</div><div class='del'>-  def hyper_cmd(*args)</div><div class='del'>-    puts "HyperlinkCommand: #{args.inspect}"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This routine is called to run an applet</div><div class='del'>-  #</div><div class='del'>-  def run_applet(size, w, arglist)</div><div class='del'>-    applet_arg.value = Hash[*simplelist(arglist)]</div><div class='del'>-</div><div class='del'>-    return unless @applet_arg.key?('src')</div><div class='del'>-</div><div class='del'>-    src = @html.remove(@applet_arg['src'])</div><div class='del'>-</div><div class='del'>-    @applet_arg['window'] = w</div><div class='del'>-    @applet_arg['fontsize'] = size</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      Tk.load_tclscript(src)</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      puts "Applet error: #{e.message}"</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 form_cmd(n, cmd, *args)</div><div class='del'>-    # p [n, cmd, *args]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  #</div><div class='del'>-  def move_big_image(b)</div><div class='del'>-    return unless @big_imgs.key?(b)</div><div class='del'>-    b.copy(@big_imgs[b])</div><div class='del'>-    @big_imgs[b].delete</div><div class='del'>-    @big_imgs.delete(b)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def image_cmd(hs, *args)</div><div class='del'>-    fn = args[0]</div><div class='del'>-</div><div class='del'>-    if @old_imgs.key?(fn)</div><div class='del'>-      return (@images[fn] = @old_imgs.delete(fn))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      img = TkPhotoImage.new(:file=&gt;fn)</div><div class='del'>-    rescue</div><div class='del'>-      return ((hs)? @@smallgray: @@biggray)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if hs</div><div class='del'>-      img2 = TkPhotoImage.new</div><div class='del'>-      img2.copy(img, :subsample=&gt;[2,2])</div><div class='del'>-      img.delete</div><div class='del'>-      img = img2</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if img.width * img.height &gt; 20000</div><div class='del'>-      b = TkPhotoImage.new(:width=&gt;img.width, :height=&gt;img.height)</div><div class='del'>-      @big_imgs[b] = img</div><div class='del'>-      img = b</div><div class='del'>-      Tk.after_idle(proc{ move_big_image(b) })</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @images[fn] = img</div><div class='del'>-</div><div class='del'>-    img</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This routine is called for every &lt;SCRIPT&gt; markup</div><div class='del'>-  #</div><div class='del'>-  def script_cmd(*args)</div><div class='del'>-    # puts "ScriptCmd: #{args.inspect}"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This routine is called for every &lt;APPLET&gt; markup</div><div class='del'>-  #</div><div class='del'>-  def applet_cmd(w, arglist)</div><div class='del'>-    # puts "AppletCmd: w=#{w} arglist=#{arglist}"</div><div class='del'>-    #TkLabel.new(w, :text=&gt;"The Applet #{w}", :bd=&gt;2, :relief=&gt;raised)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This binding fires when there is a click on a hyperlink</div><div class='del'>-  #</div><div class='del'>-  def href_binding(w, x, y)</div><div class='del'>-    lst = w.href(x, y)</div><div class='del'>-    unless lst.empty?</div><div class='del'>-      process_url(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'>-  def sel_load</div><div class='del'>-    filetypes = [</div><div class='del'>-      ['Html Files', ['.html', '.htm']], </div><div class='del'>-      ['All Files', '*']</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    f = Tk.getOpenFile(:initialdir=&gt;@last_dir, :filetypes=&gt;filetypes)</div><div class='del'>-    if f != ''</div><div class='del'>-      load_file(f)</div><div class='del'>-      @last_dir = File.dirname(f)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Clear the screen.</div><div class='del'>-  #</div><div class='del'>-  def clear_screen</div><div class='del'>-    if @html_fs &amp;&amp; @html_fs.exist?</div><div class='del'>-      w = @html_fs</div><div class='del'>-    else</div><div class='del'>-      w = @html</div><div class='del'>-    end</div><div class='del'>-    w.clear</div><div class='del'>-    @old_imgs.clear</div><div class='del'>-    @big_imgs.clear</div><div class='del'>-    @hotkey.clear</div><div class='del'>-    @images.each{|k, v| @old_imgs[k] = v }</div><div class='del'>-    @images.clear</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Read a file</div><div class='del'>-  #</div><div class='del'>-  def read_file(name)</div><div class='del'>-    begin</div><div class='del'>-      fp = open(name, 'r')</div><div class='del'>-      ret = fp.read(File.size(name))</div><div class='del'>-    rescue</div><div class='del'>-      ret = nil</div><div class='del'>-      fp = nil</div><div class='del'>-      Tk.messageBox(:icon=&gt;'error', :message=&gt;"fail to open '#{name}'", </div><div class='del'>-                    :type=&gt;:ok)</div><div class='del'>-    ensure</div><div class='del'>-      fp.close if fp</div><div class='del'>-    end</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Process the given URL</div><div class='del'>-  #</div><div class='del'>-  def process_url(url)</div><div class='del'>-    case url[0]</div><div class='del'>-    when /^file:/</div><div class='del'>-      load_file(url[0][5..-1])</div><div class='del'>-    when /^exec:/</div><div class='del'>-      Tk.ip_eval(url[0][5..-1].tr('\\', ' '))</div><div class='del'>-    else</div><div class='del'>-      load_file(url[0])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Load a file into the HTML widget</div><div class='del'>-  #</div><div class='del'>-  def load_file(name)</div><div class='del'>-    return unless (doc = read_file(name))</div><div class='del'>-    clear_screen()</div><div class='del'>-    @last_file = name</div><div class='del'>-    if @html_fs &amp;&amp; @html_fs.exist?</div><div class='del'>-      w = @html_fs</div><div class='del'>-    else</div><div class='del'>-      w = @html</div><div class='del'>-    end</div><div class='del'>-    w.configure(:base=&gt;name)</div><div class='del'>-    w.parse(doc)</div><div class='del'>-    w.configure(:cursor=&gt;'top_left_arrow')</div><div class='del'>-    @old_imgs.clear</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Refresh the current file.</div><div class='del'>-  #</div><div class='del'>-  def refresh(*args)</div><div class='del'>-    load_file(@last_file) if @last_file</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This routine is called whenever a "&lt;meta&gt;" markup is seen.</div><div class='del'>-  #</div><div class='del'>-  def meta(w, tag, alist)</div><div class='del'>-    v = Hash[*simplelist(alist)]</div><div class='del'>-</div><div class='del'>-    if v.key?('key') &amp;&amp; v.key?('href')</div><div class='del'>-      @hotkey[v['key']] = w.resolve(v['href'])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if v.key?('next')</div><div class='del'>-      @hotkey['Down'] =v['next']</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if v.key?('prev')</div><div class='del'>-      @hotkey['Up'] =v['prev']</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if v.key?('other')</div><div class='del'>-      @hotkey['o'] =v['other']</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Go from full-screen mode back to window mode.</div><div class='del'>-  #</div><div class='del'>-  def fullscreen_off</div><div class='del'>-    @fswin.destroy</div><div class='del'>-    @root.deiconify</div><div class='del'>-    Tk.update</div><div class='del'>-    @root.raise</div><div class='del'>-    @html.clipwin.focus</div><div class='del'>-    clear_screen()</div><div class='del'>-    @old_imgs.clear</div><div class='del'>-    refresh()</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Go from window mode to full-screen mode.</div><div class='del'>-  #</div><div class='del'>-  def fullscreen</div><div class='del'>-    if @fswin &amp;&amp; @fswin.exist?</div><div class='del'>-      @fswin.deiconify</div><div class='del'>-      Tk.update</div><div class='del'>-      @fswin.raise</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    width  =  @root.winfo_screenwidth</div><div class='del'>-    height =  @root.winfo_screenheight</div><div class='del'>-    @fswin = TkToplevel.new(:overrideredirect=&gt;true, </div><div class='del'>-                            :geometry=&gt;"#{width}x#{height}+0+0")</div><div class='del'>-</div><div class='del'>-    @html_fs = Tk::HTML_Widget.new(@fswin, :padx=&gt;5, :pady=&gt;9, </div><div class='del'>-                                   :formcommand=&gt;proc{|*args|</div><div class='del'>-                                     form_cmd(*args)</div><div class='del'>-                                   },</div><div class='del'>-                                   :imagecommand=&gt;proc{|*args| </div><div class='del'>-                                     image_cmd(0, *args)</div><div class='del'>-                                   }, </div><div class='del'>-                                   :scriptcommand=&gt;proc{|*args|</div><div class='del'>-                                     script_cmd(*args)</div><div class='del'>-                                   }, </div><div class='del'>-                                   :appletcommand=&gt;proc{|*args|</div><div class='del'>-                                     applet_cmd(*args)</div><div class='del'>-                                   }, </div><div class='del'>-                                   :hyperlinkcommand=&gt;proc{|*args| </div><div class='del'>-                                     hyper_cmd(*args)</div><div class='del'>-                                   }, </div><div class='del'>-                                   :appletcommand=&gt;proc{|*args|</div><div class='del'>-                                     run_applet('big', *args)</div><div class='del'>-                                   }, </div><div class='del'>-                                   :fontcommand=&gt;proc{|*args|</div><div class='del'>-                                     pick_font_fs(*args)</div><div class='del'>-                                   }, </div><div class='del'>-                                   :bg=&gt;'white', :tablerelief=&gt;:raised, </div><div class='del'>-                                   :cursor=&gt;:tcross) {</div><div class='del'>-      pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-      token_handler('meta', proc{|*args| meta(self, *args)})</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    clear_screen()</div><div class='del'>-    @old_imgs.clear</div><div class='del'>-    refresh()</div><div class='del'>-    Tk.update</div><div class='del'>-    @html_fs.clipwin.focus</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  #</div><div class='del'>-  def key_press(w, keysym)</div><div class='del'>-    return if @key_block</div><div class='del'>-    @key_block = true</div><div class='del'>-    Tk.after(250, proc{@key_block = false})</div><div class='del'>-</div><div class='del'>-    if @hotkey.key?(keysym)</div><div class='del'>-      process_url(@hotkey[keysym])</div><div class='del'>-    end</div><div class='del'>-    case keysym</div><div class='del'>-    when 'Escape'</div><div class='del'>-      if @fswin &amp;&amp; @fswin.exist?</div><div class='del'>-        fullscreen_off()</div><div class='del'>-      else</div><div class='del'>-        fullscreen()</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'>-TkHTML_File_Viewer.new(file)</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkimg/demo.rb b/ext/tk/sample/tkextlib/tkimg/demo.rb<br/>deleted file mode 100644<br/>index a0c4d1b64f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkimg/demo.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkimg/demo.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1478 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#  Tk::Img demo</div><div class='del'>-#</div><div class='del'>-#    --  This script is based on demo.tcl of Tcl/Tk's 'Img' extention. </div><div class='del'>-#        Image data in this script is those of demo.tcl.</div><div class='del'>-#        Please read 'license_terms_of_Img_extension' file.</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tkimg'</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Make the Image format available.</div><div class='del'>-#</div><div class='del'>-class TkImg_demo</div><div class='del'>-  def initialize</div><div class='del'>-    img_version = Tk::Img.package_version</div><div class='del'>-</div><div class='del'>-    @typeFrame = Hash.new</div><div class='del'>-    @imgPriv = Hash.new</div><div class='del'>-</div><div class='del'>-    root = TkRoot.new(:title=&gt;'Tests for available image formats')</div><div class='del'>-</div><div class='del'>-    root.winfo_children.each{|w| w.destroy}</div><div class='del'>-    TkImage.names{|img| img.delete}</div><div class='del'>-</div><div class='del'>-    f = TkFrame.new</div><div class='del'>-    TkButton.new(f, :text=&gt;'Dismiss', :command=&gt;proc{exit}).pack(:side=&gt;:left)</div><div class='del'>-    f.pack(:side=&gt;:top, :expand=&gt;:y, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-    TkMessage.new(:aspect=&gt;900, :text=&gt;format('This page shows the available image formats of the Img extension (Img version %s, using Tcl/Tk %s)', img_version, Tk::TK_PATCHLEVEL)).pack(:side=&gt;:top, :expand=&gt;:y, :fill=&gt;:both)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-##############################</div><div class='del'>-</div><div class='del'>-  def update_animated_gif(w, method, num)</div><div class='del'>-    return unless @imgPriv[w]</div><div class='del'>-</div><div class='del'>-    if @imgPriv[w][:args]</div><div class='del'>-      im = TkPhotoImage.new</div><div class='del'>-      im.copy(@imgPriv[w][num])</div><div class='del'>-      num += 1</div><div class='del'>-      begin</div><div class='del'>-        im.configure(@imgPriv[w][:args].merge(:format=&gt;[:gif, {:index=&gt;num}]))</div><div class='del'>-        im.configure(:data=&gt;'', :file=&gt;'') #free storage</div><div class='del'>-        @imgPriv[w][num] = im</div><div class='del'>-      rescue</div><div class='del'>-        @imgPriv[w].delete(:args)</div><div class='del'>-        if num &gt; 1</div><div class='del'>-          num = 0</div><div class='del'>-          im = @imgPriv[w][num]</div><div class='del'>-        else</div><div class='del'>-          # this is not an animated GIF; just stop</div><div class='del'>-          @imgPriv[w].delete(0)</div><div class='del'>-          return</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      num += 1</div><div class='del'>-      num = 0 unless @imgPriv[w][num]</div><div class='del'>-      im = @imgPriv[w][num]</div><div class='del'>-    end</div><div class='del'>-    begin</div><div class='del'>-      w.__send__(method, im)</div><div class='del'>-      Tk.update_idletasks</div><div class='del'>-      Tk.after(20, proc{update_animated_gif(w, method, num)})</div><div class='del'>-    rescue</div><div class='del'>-      @imgPriv[w].delete(:args)</div><div class='del'>-      @imgPriv[w].each{|im|</div><div class='del'>-        @im.delete</div><div class='del'>-        @imgPriv.delete(im)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_animated_gif(keys)</div><div class='del'>-    w = TkLabel.new</div><div class='del'>-    begin</div><div class='del'>-      im = TkPhotoImage.new(keys.merge(:format=&gt;[:gif, {:index=&gt;0}]))</div><div class='del'>-      im.configure(:data=&gt;'', :file=&gt;'', :format=&gt;'') #free storage</div><div class='del'>-      w.image(im)</div><div class='del'>-      @imgPriv[w] ||= Hash.new</div><div class='del'>-      @imgPriv[w][0] = im</div><div class='del'>-      @imgPriv[w][:args] = keys</div><div class='del'>-      Tk.update_idletasks</div><div class='del'>-      Tk.after(20, proc{update_animated_gif(w, :image, 0)})</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      w.configure(:text=&gt;"error displaying animated gif:\n#{e.message}", </div><div class='del'>-                  :image=&gt;'', :relief=&gt;:ridge)</div><div class='del'>-    end</div><div class='del'>-    w.pack</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_image(fmt, type, data)</div><div class='del'>-    fmt = fmt.to_s.capitalize</div><div class='del'>-    unless @typeFrame[fmt]</div><div class='del'>-      @typeFrame[fmt] = TkFrame.new.pack(:side=&gt;:top, :expand=&gt;true, :fill=&gt;:x)</div><div class='del'>-      TkLabel.new(@typeFrame[fmt], :text=&gt;"#{fmt} :  ").pack(:side=&gt;:left)</div><div class='del'>-    end</div><div class='del'>-    begin</div><div class='del'>-      f = TkFrame.new(@typeFrame[fmt], </div><div class='del'>-                      :borderwidth=&gt;2, :relief=&gt;:ridge).pack(:side=&gt;:left)</div><div class='del'>-      im = TkPhotoImage.new(:data=&gt;data)</div><div class='del'>-      im['data'] = ''</div><div class='del'>-      TkLabel.new(f, :image=&gt;im).pack</div><div class='del'>-      TkLabel.new(f, :text=&gt;type, :borderwidth=&gt;0, :pady=&gt;0, :padx=&gt;2, </div><div class='del'>-                  :font=&gt;'Helvetica 8').pack</div><div class='del'>-    rescue =&gt; e</div><div class='del'>-      TkMessage.new(f, :text=&gt;"error displaying #{type} image: #{e.message}", </div><div class='del'>-                    :aspect=&gt;250).pack</div><div class='del'>-    end</div><div class='del'>-    Tk.update</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'>-demo = TkImg_demo.new</div><div class='del'>-</div><div class='del'>-##############</div><div class='del'>-</div><div class='del'>-demo.show_animated_gif(:data=&gt;&lt;&lt;'ENDofIMG')</div><div class='del'>-R0lGODlhYgIEAIIAAQAAACQAJEkASW0AbZIAkrYAttsA2/8A/yH/C05FVFNDQVBFMi4wAwEA</div><div class='del'>-AAAh+QQABgD/ACwAAAAAYgIEAAIDuUg63CMwwiCCvQAHwLv/YCiOZGmeaKqubOu+pZXNV03d</div><div class='del'>-kuAwysLoucjNlpFtYMikcslsOp+ijbRow1EiD12jtyA4INnJZGg8HmfQtHrNbrPP6KqlEgRq</div><div class='del'>-B17vzi6ukKVmHXBuhIWGh4RTcXJ0QQ8OeVx6XzlWVTRoiJqbnJ0tGmUXdDhgd1uTP2FCo5dT</div><div class='del'>-g56wsbKaoYBzVlimPJJ7QX9EirPCw8RttTZ1ul29Er81mMXR0tMvxzXJO1wAACH5BAAGAP8A</div><div class='del'>-LAAAAABiAgQAAgPdCLrc/jDKSau9OOuNAwjgB46kEJjnKazr0A5wTBDDbBc4buz74f/AoHBI</div><div class='del'>-LBqPSCGPh7M5abQYTOBysVYprAlFCo0+YI9CzCmbz+i0es1uu9/wOFrsqYtE3S73yq9SpTBP</div><div class='del'>-BDk5PEmHiImKRQYHTISDNjWTMX9UfFuZIFwkY3RhcqGio6SlpqeoqRt2dXmuWyqZV1Z/UjM1</div><div class='del'>-ToQFS46Lvr/AQUu6BYK4gJe0V7Eprl+sXqrS09TV1tfYbKxhziqxmFOAgYKDOrs9wenqSY07</div><div class='del'>-uznklFKXmCzN3aB22fv81AAAIfkEAAYA/wAspgAAABgBBAACA+YIEQrNS61Jg1hX6C2GHiBI</div><div class='del'>-DERpFkShFkZrHHAsz3Rt06/Lrqk5jqFQ58PheI5B0s+HWrFch9dtSp26dDyULwnqeIoay+Qi</div><div class='del'>-rkAcZ4YDrVY/IOaxGGz0IkPLknN3rfr/MToGTilaJSRcR3RgikF5JyuDfYCUVFeDKj0mSkle</div><div class='del'>-Q4sYcXFvaA1rDxIScKIZYUVfiUA+PU6Tlbc4US07PJs/nYqLQ4kieZkqki24yzJXe5qziEHD</div><div class='del'>-dHNloqqpbqfcbquiGK2MH0mzkJG2zLfOhObSQsHC1OVKTLVQUurrWL1biZ9grIFLs2YbNwAh</div><div class='del'>-+QQABgD/ACyHAAAAVwEEAAID/ggQy94uyCloFTgPsYf/AyGOYmGaRnoYR+u+cCzPcZqeJyl6</div><div class='del'>-xMdhm4zwUgkUJ8iFkqFgKptQCQRJMRqJwqAPtCMVCDhDwcaimc9mslhs0vXeoJ9caL1Q748n</div><div class='del'>-tMl89PFURURXQx4cH11eYChjKmiPkC5kOGCVIyCYWkN2VoB8fXtOS34RgJybGkCZbosnZJGw</div><div class='del'>-aCw3bF9tXSFxhqhXnb5JSUt6CsKlxneDqHIdqyEjOI0qZbHUMGq1bs6Yh3NDdb93U1Ki41Hi</div><div class='del'>-poSEqYZcuYphr9XykjbQrLnbHbwYEkd4xQ2GERvoZxQ6LIUOrWLlKtq8h5Ps6ci0SxknQOVE</div><div class='del'>-Ddy4HvGPQVMIC1Hk4QZavIfUZq3J8YUEPl0WL3qaIIwjMQAh+QQABgD/ACxlAAAAmwEEAAID</div><div class='del'>-/ggRCr1qSSlWDVXorYfwQxgSxECSBVGsheEaB3zMdG3feF7DbsumJ5JJJPpwjhnLZMloPp4M</div><div class='del'>-h3RKrVqv2KxW2nRGmBQlBnP0dD7EYfDne8l08DjcbfgFhaW0cX8ciy9LD05RUREOhQ2GYEoa</div><div class='del'>-ZGQbIGlDJmsqPy9ymZo0PD11Kyp3anogfX5igamGh1utrq+uhFBQYBm2j5CSIncnLHWYm8Fx</div><div class='del'>-bj52QZOSSBeNp2BfEIVeU4PUi0mOSJFoaXcpvnTC4TnExiejRdrK2IsSgrKIsPHyr4OJ7GHL</div><div class='del'>-thxmkSN4vZdauIghriCnF2yAmBOCzoiZPkkAOav3JEs0d+z0ZdPFMgvFJWAGCxL7pPBYHiJ8</div><div class='del'>-TElcNGuey5cwW97Dp6yDpBK82LgJaXAki47IGqq7xm4WPCoAACH5BAAGAP8ALEYAAADZAQQA</div><div class='del'>-AgP+GKC7yiHKGYSo1Wo9xPgfMYhEWRZoYaiGcbxwLM90Tbf4ihKFSYqgjnBDjFwuGMoD0Fgy</div><div class='del'>-n9CodEqtWq/YrHa7hTgaTSXySCZ6PMFQyJdC5Vy2uFz+VqV8pFH6czYfM0pKYF4MYE0OD4ET</div><div class='del'>-Y4BEfHt6eDt2OAdwc5iZLzhtO3iQIBYdGhgWpYoTYUxOXK2ur7CxrV5fqBR/GWZDaT9sPG4s</div><div class='del'>-l5rDNi4tdpOfQGlno6SmSEkUiISDT4mJtYpkubq7Qb0mbSuVwsTnmzltPJ96oY9+uNGKiLWy</div><div class='del'>-9/j5+l3YqrZl3UT12YPnxLg36BLCULdOmbt38bjNC3TISSEqSyRQE1M8yo8QXiMk/XJTSaFC</div><div class='del'>-hg19gIp4auI0Vhf3yZxJUx8EbP/K6EIDLqSvgy1MJlSno0cPlcsg+gEkTZBGVlMAACH5BAAG</div><div class='del'>-AP8ALCYAAAAXAgQAAgP+CAHaHQtKKGioV+itRx/gQIBESRTnWRRGexhHLM90bd9127Jrao7A</div><div class='del'>-kMfDKVommMnisYwwHM+odEqtWq/YrHbL7Xq/YIaTCVEoj5YiZ8gmiX6l1UrnguHu+DvdIEeh</div><div class='del'>-4EJsAkRqGBoXZxJmEU2NYo9mYoyJFRwZG22Bbz99LHR5oKEydDxyPiUimiCDrIeViK9ni4wP</div><div class='del'>-kGG3uLm6u7y9tmO1iRKuGZeYmUDJJn18OqLPoKQ9fyZuga2Er4fCioqRTVFlZWTcxJVFQx9u</div><div class='del'>-yioqPM7Q8TbSptRBI0KthRvF3OLitnwJHEiwoMErk5jMOmMIVqFMIdjFmeMJhh15GF/o6HRK</div><div class='del'>-qhq+VayyWYLlr5GTcVjAlTS0DyIJOBPlfMqI0WKzeoA+htCnph+3SFAOCh1KtGivk/+EnWs5</div><div class='del'>-KJDEFMzg0ZS3BydMVSL5aStJ6woAIfkEAAYA/wAsBwAAAFUCBAACA/4ICqEd8MUJRQ0i65GH</div><div class='del'>-F55HEMM4FkShFgZrHHAsz3Rt10aer6s5lqEQqKPRYI6WI+XBYDYYi+diSq1ar9isdsvter/g</div><div class='del'>-sHhMLkebUEhziUkai8ROMOQ78Vy6m37Pf+1aPXUlJEJCcG9ubGpOaWlPUowSSxYZbW1FHCBz</div><div class='del'>-g3V3eC98oaIwfi07KCkmQIQfH4eUsBdLa4tnUma4ubq7vL2+v1mPUGiKE7GVh4V0Pz53pjmj</div><div class='del'>-0X06LD2oqqxBG4dKiRS0TrdTkcURlBWwmJqaIqsmqDw6oNL0NPKeddnaHJlwl0qKGgkTB6yg</div><div class='del'>-wYMIEyq8Qm5RsXOW4PCbGIREp3jy5tXbWE4KUCBsm4aI5HYuSUBJDoZZgQTu4aVkm5ZdVCFv</div><div class='del'>-o01SB/589AFkzshXAE8KXEi0qNGjSMlEajnpJcxN+exUy3OTIzUeUXvue4WsXC0mWAAAIfkE</div><div class='del'>-AAYA/wAsAAAAAGICBAACA/4YotIuA8JBKxkk60KKN6BxiEdpnmiqrmhoeF6naVXdRI/DBAq/</div><div class='del'>-8MAAQDgsEgHIpHLJbDqf0Kh0Sq1ar9isdsvterdEIW8IJAfPv0XOEalZZjJYwcWq2++i0Fwu</div><div class='del'>-m2HcbWs5PWoMgm01F4obci90d5CRJS5yHBw0GX8UEpw6D4RnY0FGYUVfp6ipqqusra6vXKVk</div><div class='del'>-pqFBhYM5gYkYcJWOIZLBdnovMH2YbjcSOLc+hA2GyoB/cBmWe8DC2ivExpdw05vMn4W1o2Wi</div><div class='del'>-sOrr7O3u7/BVoujz5mrQhxNuF7zWHTCPtgmcNALEHmPg+NnohOvHs3yILPRjBBAYiYHaXBRD</div><div class='del'>-6CtnmiBP5mqZGhmvpMmTKFOqbBJGTEgg+D5GlFjt2pyAGIVR4lNNU7JxnhwCACH5BAAGAP8A</div><div class='del'>-LAAAAABiAgQAAgPtWLZ7/jDKSaU5rOhCuu9DKA5CKJRnGgjB6rJt3AIxDdzBbet87//AoHBI</div><div class='del'>-LBqPyKRyyWw6n9CodOrL8ay5rFa2YsG8qRNJXAoRRB8CZ6NgYCrweJxhUNjd8rz+QWevPwMg</div><div class='del'>-ImUoYWEtX1wzNFg2jVSQkZKTlJWWl5iZTo+OW4qIMYZhJKQjgWlqbHQXe61wFwt2bQ2utROw</div><div class='del'>-sX6oZqYoY4YvLp81WY47msjJysvMzc7PxjPEw2DVKWOmvKceaxurtuB8GLl1Dazhtn0bqGdn</div><div class='del'>-vb/AXsPE0dD29/j5+vvLVtHzJ7qIKpSNXSpVtNCly1AAACH5BAAGAP8ALAAAAABiAgQAAgPV</div><div class='del'>-eLq8diYWUwqxJJOx9/iDEIpCaZpBmQZs6wYAC8QwPd94ru987//AoHBILBqPyKRyyWw6n9Ao</div><div class='del'>-Elaj0l4tlYC1PZVCoHBnnLFUJpF0Y81uOyCTc0Wj4YRBJO9qu8LKqjaAUoOEhYaHiImKi4yN</div><div class='del'>-TzUxN1STflxZXiZgInccdGZyaQ9uo24PoXFmdHacJCOYKXx8lZRXM5COuLm6u7y9vr+KtJSz</div><div class='del'>-e1perpwZnRqfaGqk0GunZxd0yh54mq8qxFaRwODh4uPk5eaEVVbdxpibm3fWZXLOotEAADs=</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('bmp', '1-bit', &lt;&lt;'ENDofIMG')</div><div class='del'>-Qk3OAQAAAAAAAD4AAAAoAAAAIgAAADIAAAABAAEAAAAAAJABAABtCwAAbQsAAAIAAAACAAAA</div><div class='del'>-MzPMAMwzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAZmTKAAAAAABIRIwAAAAAAEZAigAAAAAAQECIAAAAAAAAAAgAAAAAAAAEAA</div><div class='del'>-AAAAAAABQAAAAAAAAAPAAAAAAAAAB+AAAAAAAAAC4AAAAAAAAALgAAAAAAAAAsAAAAAAAAAC</div><div class='del'>-wAAAAAAAAALgAAAAAAAABuAAAAAAAAAG4AAAAAAAAAbgAAAAAAAABuAAAAAAAAAG4AAAAAAA</div><div class='del'>-AAfgAAAAAAAAA+AAAAAAAAADcAAAAAAAAAPwAAAAAAAAA/AAAAAAAAAD+AAAAAAAAAP4AAAA</div><div class='del'>-AAAAA/gAAAAAAAAD4AAAAAAAAAHgAAAAAAAAAfAAAAAAAAAA+AAAAAAAAAB8AAAAAAAAADgA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('bmp', '4-bit', &lt;&lt;'ENDofIMG')</div><div class='del'>-Qk1aBAAAAAAAAHIAAAAoAAAAIgAAADIAAAABAAQAAAAAAOgDAABtCwAAbQsAAA8AAAAPAAAA</div><div class='del'>-////AAD//wDMzP8AmZn/AGaZ/wAzM8wAmZnMAGaZzAAzZswAzMyZAJmZmQDMZjMAZjNmADMz</div><div class='del'>-ZgBmMzMABWMgAAAAAAAAAAAAAAAAAAAAAAAFVVVVVVVVVVVVVVVVVVVVUAAAAAVVVVVVVVVV</div><div class='del'>-VVVVVVVVVVVQAAAABVVVVVVVVVVVVVVVVVVVVVAAAAAFVVVVVVVVVVVVVVVVVVVVUAAAAAVV</div><div class='del'>-VVVVVVVVVVVVVVVVVVWAAAAABVVVVVVVVVVVVVVVVVVVVVAAAAAFVVBVU3VSVVNVB1UFBVVV</div><div class='del'>-UAAAAAVVUFU1VVNVVVUFVQBVVVVgAAAABVVQVVUFU1VVVQVVBVVVVTAAAAAIVVBVVVVTVXVV</div><div class='del'>-BVUFVVVVMAAAAAVVVVVVVVFVFVVVVQVVVVUgAAAABVVVVVVVVVUFVVVVVVVVVSAAAAAHVVVV</div><div class='del'>-VVVVW5tVVVVVVVVVAAAAAAZVVVVVVVW8u2VVVVVVVVUAAAAAA1VVVVVVW7W7tVVVVVVVVQAA</div><div class='del'>-AAADVVVVVVWCtbuzVVVVVVVVAAAAAANVVVVVVVW1vrJVVVVVVVUAAAAAAlVVVVVVWLW7UFVV</div><div class='del'>-VVVVVQAAAAACVVVVVVVatbtVVVVVVVVVAAAAAABVVVVVVVq3u8NVVVVVVVUAAAAAAFVVVVVV</div><div class='del'>-XrS74VVVVVVVVQAAAAAAVVVVVVWLtbuyVVVVVVVVAAAAAABVVVVVVUu1u7BVVVVVVVUAAAAA</div><div class='del'>-AFVVVVVVO7W7sFVVVVVVVQAAAAAAVVVVVVUbtbu6VVVVVVVVAAAAAABVVVVVVSu9u1VVVVVV</div><div class='del'>-VVUAAAAAAFVVVVVVJb67tVVVVVVVVQAAAAAAVVVVVVVVu6u7VVVVVVVVAAAAAABVVVVVVVW7</div><div class='del'>-u7slVVVVVVUAAAAAAFVVVVVVVbu7u1VVVVVVVQAAAAACVVVVVVVVu7u7wlRVVVVVAAAAAAJV</div><div class='del'>-VVVVVVW7u7uwV1VVVVUAAAAAA1VVVVVVVbu7u7BVhVVVVSAAAAADVVVVVYVVu7vFAFUVVVVV</div><div class='del'>-MAAAAAZVVVVVhVUbu7VVVRVXVVVgAAAAB1VVVVVVVVu7u1VVFVFVVVAAAAAFVVVVVVhVVLu7</div><div class='del'>-xVVVVVVVgAAAAAVVVVVVUVVVK7u1VVVVVVVQAAAACFVVVVhRVVVQq7VVVVVVVVAAAAAFVVVV</div><div class='del'>-VFV1VVUgBVVVVVVVUAAAAAVVVVVUVRVVVVVVVVVVVVVQAAAABVVVVViFUVVVVVVVVVVVVVAA</div><div class='del'>-AAAFVVVVVRVUFVVVVVVVVVVVUAAAAAVVVVVVVVVVVVVVVVVVVVVQAAAABVVVVVVVVVVVVVVV</div><div class='del'>-VVVVVVIAAAAFVVVVVVVVVVVVVVVVVVVVUQAAAAVVVVVVVVVVVVVVVTdVVVVWAAAAAAAhNnWF</div><div class='del'>-VVVVVVcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==}</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-if false</div><div class='del'>-demo.show_image('bmp', '4-bit-RLE', &lt;&lt;'ENDofIMG')</div><div class='del'>-Qk1sAwAAAAAAAHYAAAAoAAAAIgAAADIAAAABAAQAAgAAAPYCAAAAAAAAAAAAABAAAAAQAAAA</div><div class='del'>-////AMzM/wAA//8AmZn/AJmZzABmmcwAMzPMADNmzABmmf8AmZmZAMxmMwBmM2YAZjMzADMz</div><div class='del'>-ZgDMzJkAAAAAAAAGBkMQABwAAAACBh5mAmAAAAIGHmYCYAAAAgYeZgJgAAACBh5mAmAAAAIG</div><div class='del'>-HmYCcAAAAgYeZgJgAAAAIgZmYGZjVmFmY2YFZgYGZmZgAAAAACIGZmBmNmZjZmZmBmYAZmZm</div><div class='del'>-QAAAAAAiBmZgZmYGY2ZmZgZmBmZmZjAAAAAAIgdmYGZmZmNmVmYGZgZmZmYwAAAAAgYKZgAW</div><div class='del'>-YmYmZmZmBmZmZhAAAAACBg5mAgYOZgIQAAACBQxmAARq6g5mAgAAAAIEDGYABquqRgAMZgIA</div><div class='del'>-AAACAwpmAAhqpqqmDGYCAAAAAgMKZgAIcaaqowxmAgAAAAIDDGYABqasoQAMZgIAAAACAQpm</div><div class='del'>-AAhnpqpgDGYCAAAAAgEKZgAGaaaqAA5mAgAAAAIACmYACGmlqrMMZgIAAAACAApmAAhsqKrC</div><div class='del'>-DGYCAAAAAgAKZgAIeqaqoQxmAgAAAAIACmYACIqmqqAMZgIAAAACAApmAAg6pqqgDGYCAAAA</div><div class='del'>-AgAKZgAIKqaqqQxmAgAAAAIACmYABhqtqgAOZgIAAAACAApmAAgWrKqmDGYCAAAAAgAMZgAG</div><div class='del'>-qpqqAAxmAgAAAAIADGYACKqqqhYKZgIAAAACAAxmAAaqqqoADGYCAAAAAgEMZgAKqqqqsWgA</div><div class='del'>-CGYCAAAAAgEMZgAKqqqqoGUACGYCAAAAAgMMZgAUqqqqoGZ2ZmZmEAAAAgMIZgAYdmaqqrYA</div><div class='del'>-ZiZmZmYwAAACBAhmABh2ZiqqpmZmJmVmZkAAAAIFDGYAFGqqqmZmJmJmZmAAAAIGCGYADGdm</div><div class='del'>-aKqqtgpmAnAAAAIGCGYADGJmZhqqpgpmAmAAAAAWB2ZmZmdiZmZgmqYACmYCYAAAABYGZmZm</div><div class='del'>-aGZWZmYQBgAKZgJgAAAADgZmZmZoZiYAEmYCYAAAAA4GZmZmZ3ZiABJmAmAAAAIGCGYABiZo</div><div class='del'>-JgAQZgJgAAACBh5mAmAAAAIGHmYCYQAAAgYeZgJiAAACBhZmAAo1ZmZmZAAAAAAMAAASNFZ2</div><div class='del'>-CGYCZQwAAAAiAAAB</div><div class='del'>-ENDofIMG</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-demo.show_image('bmp', '8-bit', &lt;&lt;'ENDofIMG')</div><div class='del'>-Qk0CCAAAAAAAAPoAAAAoAAAAIgAAADIAAAABAAgAAAAAAAgHAABtCwAAbQsAADEAAAAxAAAA</div><div class='del'>-////AMz//wAA//8AzMz/AJnM/wAAzP8AmZn/AGaZ/wAAmf8AZmb/ADNm/wAzM/8A/8zMAMzM</div><div class='del'>-zACZmcwAZpnMAACZzABmZswAM2bMAABmzAAzM8wAADPMAAAAzAD/zJkAzMyZAMyZmQCZmZkA</div><div class='del'>-ZmaZAGYzmQAzM5kAzJlmAJlmZgBmZmYAZjNmADMzZgDMmTMAmWYzAJkzMwBmMzMAmWYAAJkz</div><div class='del'>-AAAAAN0A7u7uAN3d3QC7u7sAqqqqAIiIiAB3d3cAVVVVAAARDgYDKgAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAVFRUVFRUVFRUVFBQUFBQUFRUVFRUVFRUVFRUVFRUVFQAAAAAV</div><div class='del'>-FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFQAAAAAVFRUVFRUVFRUVFRUVFRUVFRUV</div><div class='del'>-FRUVFRUVFRUVFRUVFAAAAAAVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFAAAAAAV</div><div class='del'>-FRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVEgAAAAAVFRUVFhUVFRYVFRUWFRUVERUV</div><div class='del'>-FhUVFRYVFhUVFRUVEQAAAAAUFRUWABEVFQYPFhUDERUWBhUVKg8VFAAUABQVFRUVEQAAAAAU</div><div class='del'>-FRUWABYVBhQWFRUGFBUWERUWABYVFgAAFRUVFRUVDgAAAAAUFRUVABUVFBEAFhUGFBUUFRUV</div><div class='del'>-ABUVFgARFRUVFRUVBgAAAAASFRUWABUVFRUVFRUGFBUPFhUWABYVFgAVFBUVFRUVBgAAAAAR</div><div class='del'>-FRUVFhUVFRUVFRUEFBUEFhUVFhUVFQAWFRUVFRUVAwAAAAARFRUVFRUVFRUVFRUVFRUrHRUV</div><div class='del'>-FRUVFRUVFRUVFRUVAwAAAAAPFRUVFRUVFRUVFRUVFCQYKBUVFRUVFRUVFRUVFRUVKgAAAAAO</div><div class='del'>-FRUVFRUVFRUVFRUUJyEeKA4VFRUVFRUVFRUVFRUVAAAAAAAGFRUVFRUVFRUVFRYeKB0kKCQU</div><div class='del'>-FRUVFRUVFRUVFRUVAAAAAAAGFRUVFRUVFRUVFRIDKBQnKCgGFRUVFRUVFRUVFRUVAAAAAAAG</div><div class='del'>-FRUVFRUVFRUVFRUVJxEnJigDFRUVFRUVFRUVFRUVAAAAAAADFRUVFRUVFRUVFRUSKBEnKAkq</div><div class='del'>-FRUVFRUVFRUVFRUVAAAAAAADFRUVFRUVFRUVFRUuJxEoKBEWFRUVFRUVFRUVFRUVAAAAAAAr</div><div class='del'>-FRUVFRUVFRUVFRYvKA8oKCEGFRUVFRUVFRUVFRUVAAAAAAAqFRUVFRUVFRUVFRQmKAcoKCYE</div><div class='del'>-FRUVFRUVFRUVFRUVAAAAAAAAFRUVFRUVFRUVFRIoJwkoKCgDFRUVFRUVFRUVFRUVAAAAAAAA</div><div class='del'>-FRUVFRUVFRUVFQcoJxEnKCgBFRUVFRUVFRUVFRUUAAAAAAAAFRUVFRUVFRUVFQYoKBQnKCgq</div><div class='del'>-FhUVFRUVFRUVFRUUAAAAAAAAFRUVFRUVFRUVFQQoKBQkKCgsFhUVFRUVFRUVFRUUAAAAAAAA</div><div class='del'>-FRUVFRUVFRUVFQMkKCIjKB0RFRUVFRUVFRUVFRUUAAAAAAAAFRUVFRUVFRUVFQMUKCYeKCgV</div><div class='del'>-FRUVFRUVFRUVFRUVAAAAAAAAFRUVFRUVFRUVFRUVKCgaKCgnFRUVFRUVFRUVFRUVAAAAAAAA</div><div class='del'>-FRUVFRUVFRUVFRUUKCgkKCgoAxYVFRUVFRUVFRUVAAAAAAArFRUVFRUVFRUVFRURKCgoKCgo</div><div class='del'>-ERQVFRUVFRUVFRUVAAAAAAADFRUVFRUVFRUVFRURKCgoKCgoIQMWCBUVFRUVFRUVAAAAAAAD</div><div class='del'>-FRUVFRUVFRUVFRURKCgoKCgoKAAWEBYVFRUVFRUVKgAAAAAGFRUVFRUVFRUVFRUUJygoKCgo</div><div class='del'>-KAAWFRMVFRUVFRUVAwAAAAAGFRUVFRUVFRUTFhUWHigoKCEUKgAWFgIVFRUVFRUVBgAAAAAO</div><div class='del'>-FRUVFRUVFRUTFRUVBCgoKCgUFRYVFgIWFRAWFRUVDgAAAAAPFRUVFRUVFRUVFRUVFR4oKCgo</div><div class='del'>-FRUVFQIVFQUVFRUVEQAAAAARFRUVFRUVFRUVExUVFQckKCgoIRUVFRYVFRUVFRUVEgAAAAAR</div><div class='del'>-FRUVFRUVFRUWAhYVFRYDJygoKB0VFRUVFRUVFRUVFAAAAAASFRUVFRUVFRMVBRUVFRUWKhko</div><div class='del'>-KBQVFRUVFRUVFRUVFQAAAAAUFRUVFRUVFQgWFRAVFRUVFgMAKxYVFRUVFRUVFRUVFQAAAAAU</div><div class='del'>-FRUVFRUVFQgWFQIWFRUVFRUWFhUVFRUVFRUVFRUVFQAAAAAUFRUVFRUVFRMTFRUFFhUVFRUV</div><div class='del'>-FRUVFRUVFRUVFRUVFQAAAAAVFRUVFRUVFRYFFhUIAhYVFRUVFRUVFRUVFRUVFRUVFQAAAAAV</div><div class='del'>-FRUVFRUVFRUVFRUVFhUVFRUVFRUVFRUVFRUVFRUVFQAAAAAVFRUVFRUVFRUVFRUVFRUVFRUV</div><div class='del'>-FRUVFRUVFRUVFRUVFQMAAAAVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFQQAAAAV</div><div class='del'>-FRUVFRUVFRUVFRUVFRUVFRUVFRUVFAYPEREUFBQVFQ4AAAAAACoDBAYODxESFBQVFRUVFRUV</div><div class='del'>-FQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-if false</div><div class='del'>-demo.show_image('bmp', '8-bit-RLE', &lt;&lt;'ENDofIMG')</div><div class='del'>-Qk22CAAAAAAAADYEAAAoAAAAIgAAADIAAAABAAgAAQAAAIAEAAAAAAAAAAAAAAABAAAAAQAA</div><div class='del'>-////AO7u7gDMzP8Amcz/AJmZ/wCZmcwAZpnMAGZmzAAzZswAMzPMAAAzzAAAAMwAAMz/AACZ</div><div class='del'>-/wAA//8AAGbMAACZzADd3d0AzJmZAJkzAACZZgAAMzOZAGaZ/wCZZjMAZjNmAMyZZgCZmZkA</div><div class='del'>-ZjMzADMzZgDMmTMAu7u7AMz//wBmZv8Ad3d3AIiIiADMzJkAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG</div><div class='del'>-AAcFBAIBHAAAAAEACgoGCRAKAQAAAAEAIAoBAAAAAQAfCgEJAQAAAAEAHwoBCQEAAAABAB8K</div><div class='del'>-AQgBAAAAAQAECgAWCwoKCgsKCgoLCgoKBwoKCwoKCgsKCwUKAQcBAAAAABwACQoKCwAHCgoE</div><div class='del'>-BgsKAgcKCwQKCgEGCgkACQAJBAoBBwEAAAAAGgAJCgoLAAsKBAkLCgoECQoLBwoLAAsKCwAA</div><div class='del'>-BgoBBQEAAAAAGgAJCgoKAAoKCQcACwoECQoJCgoKAAoKCwAHBgoBBAEAAAAABgAICgoLAAcK</div><div class='del'>-AA4ECQoGCwoLAAsKCwAKCQUKAQQBAAAAAAYABwoKCgsHCgANAwkKAwsKCgsKCgoACwAGCgEC</div><div class='del'>-AQAAAAEAAQcOCgERARUOCgECAQAAAAEAAQYMCgAECRcjEw4KAQEBAAAAAQABBQsKAAYJFBgZ</div><div class='del'>-EwUNCgEAAQAAAAEAAQQKCgAICxkTFRcTFwkMCgEAAQAAAAEAAQQKCgAICAITCRQTEwQMCgEA</div><div class='del'>-AQAAAAEAAQQMCgAGFAcUGxMCDAoBAAEAAAABAAECCwoABwgTBxQTIAEADAoBAAEAAAABAAEC</div><div class='del'>-CwoAByIUBxMTBwsADAoBAAEAAAABAAERCgoACAshEwYTExgEDAoBAAEAAAABAAEBCgoACAkb</div><div class='del'>-ExYTExsDDAoBAAEAAAABAAEACgoACAgTFCATExMCDAoBAAEAAAABAAEACgoACBYTFAcUExMf</div><div class='del'>-CwoAAwkAAAAAAAEAAQAKCgAJBBMTCRQTEwELAAoKAAMJAAAAAAABAAEACgoACQMTEwkXExMe</div><div class='del'>-CwAKCgADCQAAAAAAAQABAAoKAAgCFxMcHRMVBwsKAAMJAAAAAAABAAEACgoABwIJExsZExMA</div><div class='del'>-DQoBAAEAAAABAAEADAoABhMTGhMTFAwKAQABAAAAAQABAAsKAAkJExMXExMTAgsACgoBAAEA</div><div class='del'>-AAABAAERCwoBBwYTAQcBCQoKAQABAAAAAQABAgsKAQcGEwAEGAILDQgKAQABAAAAAQABAgsK</div><div class='del'>-AQcHEwAEAAsQCwcKAQEBAAAAAQABBAsKAQkBFAYTAAQACwoPBwoBAgEAAAABAAEECAoADw8L</div><div class='del'>-CgsZExMTGAkBAAsLDgAHCgEEAQAAAAEAAQUICgAFDwoKCgMABBMADwkKCwoLDgsKEAsKCgoF</div><div class='del'>-AAAAAAEAAQYNCgEZBBMECgAEDgoKDAQKAQcBAAAAAQABBwkKAA4PCgoKFhcTExMYCgoKCwcK</div><div class='del'>-AQgBAAAAAQABBwgKAAwLDgsKCgsCFBMTExUKCgEJAQAAAAEAAQgHCgADDwoMAAQKAAYLARIT</div><div class='del'>-EwkLCgEAAAABAAEJBwoABA0LChAECgAFCwIAEQsACwoBAAAAAQABCQcKAAUNCwoOCwAFCgEL</div><div class='del'>-AQsMCgEAAAABAAEJBwoABg8PCgoMCxIKAQAAAAEACAoABwsMCwoNDgsAEQoBAAAAAQANCgEL</div><div class='del'>-EgoBAAAAAQAgCgECAAABACAKAQMAAAEAFgoACwkEBgcHCQkJCgoFAAAAAA0AAAABAgMEBQYH</div><div class='del'>-CAkJAAgKAQYMAAAAIgAAAQ==</div><div class='del'>-ENDofIMG</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-demo.show_image('bmp', '32-bit', &lt;&lt;'ENDofIMG')</div><div class='del'>-Qk2GFAAAAAAAADYAAAAoAAAAIgAAADIAAAABABgAAAAAAFAUAABtCwAAbQsAAAAAAAAAAAAA</div><div class='del'>-////ZmbMmZnMmZn/zMz/7u7u////////////////////////////////////////////////</div><div class='del'>-////////////////////////////////////////////////////////////////AAD///8A</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wzM8wzM8wzM8wzM8wzM8wzM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8z///8AAP///wAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzP///wAA////ADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMMzPM////AAD///8AM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wzM8z///8AAP///wAzzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzDNmzP///wAA////ADPMADPMADPMADPMAADMADPMADPM</div><div class='del'>-ADPMAADMADPMADPMADPMAADMADPMADPMADPMZmbMADPMADPMAADMADPMADPMADPMAADMADPM</div><div class='del'>-AADMADPMADPMADPMADPMADPMZmbM////AAD///8zM8wAM8wAM8wAAMz///9mZswAM8wAM8yZ</div><div class='del'>-mf9mmcwAAMwAM8zMzP9mZswAM8wAAMyZmf8AM8wAM8zu7u5mmcwAM8wzM8z///8zM8z///8z</div><div class='del'>-M8wAM8wAM8wAM8wAM8xmZsz///8AAP///zMzzAAzzAAzzAAAzP///wAAzAAzzJmZ/zMzzAAA</div><div class='del'>-zAAzzAAzzJmZ/zMzzAAzzAAAzGZmzAAzzAAAzP///wAAzAAzzAAAzP///////wAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzJmZzP///wAA////MzPMADPMADPMADPM////ADPMADPMMzPMZmbM////AADM</div><div class='del'>-ADPMmZn/MzPMADPMMzPMADPMADPMADPM////ADPMADPMAADM////ZmbMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMmZn/////AAD///8zZswAM8wAM8wAAMz///8AM8wAM8wAM8wAM8wAM8wAM8wAM8yZ</div><div class='del'>-mf8zM8wAM8xmmcwAAMwAM8wAAMz///8AAMwAM8wAAMz///8AM8wzM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8yZmf////8AAP///2ZmzAAzzAAzzAAzzAAAzAAzzAAzzAAzzAAzzAAzzAAzzAAzzJnM/zMz</div><div class='del'>-zAAzzJnM/wAAzAAzzAAzzAAAzAAzzAAzzAAzzP///wAAzAAzzAAzzAAzzAAzzAAzzAAzzMzM</div><div class='del'>-/////wAA////ZmbMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM</div><div class='del'>-3d3dMzOZADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMzMz/////</div><div class='del'>-AAD///9mmcwAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wzM8yZZjPMzJmZ</div><div class='del'>-MwAAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8zu7u7///8AAP//</div><div class='del'>-/5mZzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzDMzzJlmAGYzZsyZZpkzAJmZ</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzP///////wAA////mZn/</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMAADMzJlmmTMAMzOZmWYzmTMAmWYzMzPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM////////AAD///+Zmf8AM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wzZszMzP+ZMwAzM8yZZgCZMwCZMwCZmf8AM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8z///////8AAP///5mZ/wAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzJlmAGZmzJlmAGYzM5kzAMzM/wAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzP///////wAA////zMz/ADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMM2bMmTMAZmbMmWYAmTMAZmb/7u7uADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPM////////AAD////MzP8AM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8yIiIiZZgBmZsyZMwCZMwBmZswAAMwAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8z///////8AAP///93d3QAzzAAzzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAAzHd3d5kzAGaZzJkzAJkzAGYzZpmZ/wAzzAAzzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzP///////wAA////7u7uADPMADPMADPMADPMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMMzPMZjMzmTMAZpn/mTMAmTMAZjMzmcz/ADPMADPMADPMADPMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPM////////AAD///////8AM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wzZsyZMwCZZgBmZv+ZMwCZMwCZMwDMzP8AM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8z///////8AAP///////wAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzGaZ</div><div class='del'>-/5kzAJlmAGZmzJlmAJkzAJkzAMz//wAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zDMzzP///////wAA////////ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMmZn/mTMA</div><div class='del'>-mTMAMzPMmWYAmTMAmTMA7u7uAADMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMMzPM</div><div class='del'>-////////AAD///////8AM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8yZzP+ZMwCZMwAz</div><div class='del'>-M8yZZjOZMwCZMwC7u7sAAMwAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wzM8z/////</div><div class='del'>-//8AAP///////wAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzMzM/5lmM5kzADMzZsyZ</div><div class='del'>-M5kzADMzmWZmzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzDMzzP///////wAA</div><div class='del'>-////////ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMzMz/MzPMmTMAZjMzzJlmmTMA</div><div class='del'>-mTMAADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM////////AAD/////</div><div class='del'>-//8AM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8yZMwCZMwCZmZmZMwCZMwCZ</div><div class='del'>-ZgAAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8z///////8AAP///////wAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzDMzzJkzAJkzAJlmM5kzAJkzAJkzAMzM</div><div class='del'>-/wAAzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzP///////wAA////3d3dADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMZmbMmTMAmTMAmTMAmTMAmTMAmTMAZmbMMzPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM////////AAD////MzP8AM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8xmZsyZMwCZMwCZMwCZMwCZMwCZMwBmM2bMzP8AAMwA</div><div class='del'>-mf8AM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8z///////8AAP///8zM/wAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzGZmzJkzAJkzAJkzAJkzAJkzAJkzAJkzAP///wAAzACZzAAA</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzO7u7v///wAA////mZn/ADPMADPMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMMzPMmWYAmTMAmTMAmTMAmTMAmTMAmTMA////AADMADPMAGbMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMzMz/////AAD///+Zmf8AM8wAM8wAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAZswAAMwAM8wAAMzMmWaZMwCZMwCZMwBmM2YzM8zu7u7///8AAMwAAMwA//8AM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8yZmf////8AAP///5mZzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzABm</div><div class='del'>-zAAzzAAzzAAzzJnM/5kzAJkzAJkzAJkzADMzzAAzzAAAzAAzzAAAzAD//wAAzAAzzACZzAAA</div><div class='del'>-zAAzzAAzzAAzzJmZzP///wAA////ZpnMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMzJlmmTMAmTMAmTMAmTMAADPMADPMADPMADPMAP//ADPMADPMAMz/ADPMADPM</div><div class='del'>-ADPMADPMZmbM////AAD///9mZswAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAZswAM8wA</div><div class='del'>-M8wAM8xmmf+ZZjOZMwCZMwCZMwBmM2YAM8wAM8wAM8wAAMwAM8wAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wzZsz///8AAP///2ZmzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAAzAD//wAAzAAzzAAz</div><div class='del'>-zAAAzMzM/5lmAJkzAJkzAJkzADMzmQAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzDMz</div><div class='del'>-zP///wAA////M2bMADPMADPMADPMADPMADPMADPMADPMAGbMADPMAMz/ADPMADPMADPMADPM</div><div class='del'>-AADM7u7uzJmZmTMAmTMAMzPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM////</div><div class='del'>-AAD///8zM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAmf8AAMwAM8wAmcwAM8wAM8wAM8wAM8wA</div><div class='del'>-AMzMzP/////d3d0AAMwAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8z///8AAP//</div><div class='del'>-/zMzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzACZ/wAAzAAzzAD//wAAzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAAzAAAzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzP///wAA////MzPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMAGbMAGbMADPMADPMAMz/AADMADPMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM////AAD///8AM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAAMwAzP8AAMwAM8wAmf8A//8AAMwAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8z///8AAP///wAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAAzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzP///wAA////ADPMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPMADPM</div><div class='del'>-ADPMADPMADPMADPMADPMADPMADPMADPMADPMzMz/AAD///8AM8wAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wA</div><div class='del'>-M8wAM8wAM8wAM8wAM8wAM8wAM8wAM8yZzP8AAP///wAzzAAzzAAzzAAzzAAzzAAzzAAzzAAz</div><div class='del'>-zAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzDMzzJmZ/2aZzGZm</div><div class='del'>-zGZmzDMzzDMzzDMzzAAzzAAzzJmZzAAA////////////7u7uzMz/mcz/mZn/mZnMZpnMZmbM</div><div class='del'>-M2bMMzPMMzPMADPMADPMADPMADPMADPMADPMADPMADPMZpnM////////////////////////</div><div class='del'>-////////////////////////AAD/////////////////////////////////////////////</div><div class='del'>-////////////////////////////////////////////////////////////////////////</div><div class='del'>-//////////////////8AAA==</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('gif', 'gif87a', &lt;&lt;'ENDofIMG')</div><div class='del'>-R0lGODdhQAAoAPcAAAAAADgoOHBgYJiIkIB4iJCAiIB4gGBIUGhggKiYmLCYoLiooHBocMCA</div><div class='del'>-eJBocLCYmMCooKiQkKCAgGBASIiAiGhYeLiQiIhoaJhwcJh4gMCYkMCgoMCoqKiQiEBAWEg4</div><div class='del'>-QMiwoMioqMComLCIiFhAWIBgaJhweHBgcLiQkIiAgDg4UIhwgHhgYJh4cMiooFBQcGBYeJiA</div><div class='del'>-iIBwgIh4iKCAiKB4eHhYYGhIWKiIiEhAWFBIYEhAaEhIaHBYcHBgeFBQeHBogHBQYHBQWGBA</div><div class='del'>-UFhQaGBYaFhYeKCIkLCQmHhYaGBIWLCYiFBAYEhAYFhQYFBIaFhYcKCIiKCQkKiIkLCIgHBQ</div><div class='del'>-aIhwcJiAeIBgcJBwcLCQiKiAeKB4gHhwgNCwqMiwqIBoeHBYaJh4eMCYmJBweGhYYNC4qEg4</div><div class='del'>-UEA4WGBQWEBAYFBQaHBoeFhQcGhgeGhYcMiwsJB4cGBIYNjIwEAwSMCgmHhocFBAWNDAuNDI</div><div class='del'>-uIBweGBYcHhoeDgwQGhgaKCIgNjQuKiAgNjIuKiIgKCAeKCQiEhIWFBIUGBQaNC4sGBQcGBY</div><div class='del'>-YMi4sGhYWFhIYFhIaFhQWHhoaLCQkDg4SHBgaJB4gJB4eLiYmLiomGhYaEhIYFhYaIh4gHho</div><div class='del'>-gGhgcIBoaGBIaHhgcNDAsFBAUGhQYLigoLioqJiIgGhQaFA4SFhIWHhweFBIWJiAgIh4eFhI</div><div class='del'>-UHBYYIhweEg4WLiYkDg4WGBQYEA4SEA4UMCwqIhocHhgaJB4iJCAgFhASEBAUEhAUIBocFhA</div><div class='del'>-UKCQmHhgeEgwSNjQwEg4SLCgmDgwUGhQWLCgoEAwUFBASLigmEAwQGhIUFg4SIhoeEgwQKiY</div><div class='del'>-kFA4UDgwSJiIiIBwcKiQmLCooLCYkDgoQP//////////////////////////////////////</div><div class='del'>-////////////////////////////////////////////////////////////////////////</div><div class='del'>-/////////////////////////////////ywAAAAAQAAoAAAI/gABCBxIsKDBggEEDBhAoICB</div><div class='del'>-AwcjSpxIMSKCBAoWIGDQoIGDBxAURJBAoKLJkwcnUKgQoYEFlxcwdOyYoYGGDRw6eEDJc+IH</div><div class='del'>-CSBCiHg5YiaJEjM7mjgBAkUKAip6Sh24YqYGmUkbYGDRwoWGlxocvIABI4aMGVN70qiRNSkL</div><div class='del'>-Gzda4BhhIoeOHTx6+PjxwwcCIGlPouiI4WUDFkFYCLlhYwiLBkU73iBShAgRAkaMHCGAIDBF</div><div class='del'>-JBpmXkiiZMiQCagzLEFRgi0GDUyaONHx5MkLKFFCSOns+eCUBlRKVIErxIYVG1ewsMiixYSW</div><div class='del'>-LVxQkIDRpDqRJF1gVPDyhQDg3gSB/mQAwyKMmBJjpoAhU6bKCjMgMGxZAuIMmjRq0KhpsmbN</div><div class='del'>-EjZtuHEEAgQ4Ad5ACLxRQhkZwBHHGHKMAcccdFxhBgpU1FGDHUzc0QESduDhxRx56DEHHnvs</div><div class='del'>-4R0ffRzYhREwYOHHH4BUEQgZYYlgoSBfjCHIBh0MAoEdAxBSiCGHIJLIHHCYwEEFQHRhx4Ew</div><div class='del'>-LLCHIm4sIggjc9RhgQhzgEAIIGSEAAIgjShhwhwN4MGEI4/sAIkjSEQiCRJYuAHEJL0RwMge</div><div class='del'>-ejzBBiV6VGKJFpcMskUcFyQygoiEbAABJn9kogkaa+RgwCZEMEEEBlNw4gMbiPQ2QyeefAKK</div><div class='del'>-GpT0cAIk/jjEgQIKggAiiAMgUAFZIkiEIkokozyigyakLFLBGzb8IcUDPXjSGxArlGJKKKcg</div><div class='del'>-sQAqdojAlQMaCDLGHIlk8EkqiFhQBxJL5BAGE0yo4gQaTBTAQAYc2NGDZ4UAYcoOhfBxwiql</div><div class='del'>-nFGGDQ3UwMIFGsyBAgs19MBKDg0IQUoroqCRgweO5OCKJjo4osEYBXjySmAE/JBCDHBMUUkT</div><div class='del'>-T6AxiktgvXTDDbDEUoEsF8ySQxl8LJEGLTugUUQtllBQyyqW8DFyWggY8UYoHPBxxh1O0PDA</div><div class='del'>-GA0g1ZEQQphQwhus2GJDEGh4cAstbjSBBhF7aEJEEzwYQUQnaQSWHQ+o4BIG/i5gPFIKHl8k</div><div class='del'>-ZYENGOSiixysqHHGLYbE4IQTt1TQhA6o8KDJGjy8YJkiJPOlCAw7OPKEB7LccYsQoUFWxwSq</div><div class='del'>-2EFJETo8ogoaThSRwy2y4KEGBaDwUIQfu1DiwyOBNc3DGrzI0cYdnNyRQx+vuCRIAyD0wokS</div><div class='del'>-aehgSw60+GIILbSoYMstpvwywxM88PAEETwQQTIMCOwBBjAdfMFIFBcEQ4IIDdTaAjAJgMQd</div><div class='del'>-UnGGJJTtdpMI3yRUAAEP4AUIT9DECRxhN2EoIAZ7IAUkAhECDgwDDLYgxgREgQk8FMNWcxAF</div><div class='del'>-BwjRhztEQRWtoIQdbHGGHOCBFmqAgRr2kIm6pWUC/p3wwRFAMYM/6IIUR0gAE+Rwh2DIwRgo</div><div class='del'>-wEMe5jAHQQhCFHFoBAAycYxXxMER27MBMtTACtkU4QyeUYACStGEO8QADA/wRAAEIoMsiOEK</div><div class='del'>-NxACCEAgiDwIAg+l+EQyAnCKDljAFLbghTHKp4Yi9IBznlEGBxLhiGUsgQOM+EQWAPABKkBC</div><div class='del'>-DBEIRC/iIApbCQICgxhCMERAiBZYwRLMmIAxFgAK7r3gCb1hAwXwYIUogKIMQSBEHprhDCVc</div><div class='del'>-4BNVnAMgABEm+hTgGYcoAzQWIAIsTOABaSBEFNIAiSfIAjwIYEQIZIGFMIAhDW/IAy6igYNE</div><div class='del'>-fEEUiWDEJcRgjBsEgRTM/pDDH5jRAUbgwhQJcIUkaAAEWvziQAjgQCnukIBW6KEWVsDDLFhA</div><div class='del'>-hQuEwAUjAMEsZnGBPwhBAtI4AAMaEYEOfAIAyjjGNOKgByLM8UADUAYnEmCJLwQBB3jAhRYG</div><div class='del'>-gTAN4CALWajDEWBxAV1MIBIMcIItjCEQSEShEqoYBTUOJBBbFACAqWjGBl5BhS+gQAs4mEYH</div><div class='del'>-COHPXmCBEBMYxjQC0IhbVEMglEgDKX5xBgpSVSAEqAAnTtGMB4CBEApAAS6yMIhmlMISlmjG</div><div class='del'>-IKxxjFnc4AgCsIMqXMEJXujhF7eABFPvKhAEsMENqliAFHpBCRvUAQKm4IAVxBCFBSijFA8Y</div><div class='del'>-2MQAjDENUrjCClaohB2KAAlWcJYgCLjGABKAjVYsIBsJuEQEmoGJbJjiuNpIQDY4UYAC8EEP</div><div class='del'>-kegEA9zwBk38tiAIMEB0swGBbGDjGM2QhDIeMItsONe9MrWGMKxhXU8Q4aDfLcgkCpCCCCRA</div><div class='del'>-G0hQQAKU4d4FGDgbyiBuBAZQAArIAAZ7yEF+IwIER8wAGxherwKOcQllTGMaSJBCBGLAi1Os</div><div class='del'>-gBJ2nbBEoFCAAUQhCtiIQASEIeMB0IAG1rAsH5ywDRWbJACdmEFDdlGAGMyAxF1gAwzuQNWA</div><div class='del'>-AAA7</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('gif', 'gif89a', &lt;&lt;'ENDofIMG')</div><div class='del'>-R0lGODlhQAAoAPcAAMnJyTgoOHBgYJiIkIB4iJCAiIB4gGBIUGhggKiYmLCYoLiooHBocMCA</div><div class='del'>-eJBocLCYmMCooKiQkKCAgGBASIiAiGhYeLiQiIhoaJhwcJh4gMCYkMCgoMCoqKiQiEBAWEg4</div><div class='del'>-QMiwoMioqMComLCIiFhAWIBgaJhweHBgcLiQkIiAgDg4UIhwgHhgYJh4cMiooFBQcGBYeJiA</div><div class='del'>-iIBwgIh4iKCAiKB4eHhYYGhIWKiIiEhAWFBIYEhAaEhIaHBYcHBgeFBQeHBogHBQYHBQWGBA</div><div class='del'>-UFhQaGBYaFhYeKCIkLCQmHhYaGBIWLCYiFBAYEhAYFhQYFBIaFhYcKCIiKCQkKiIkLCIgHBQ</div><div class='del'>-aIhwcJiAeIBgcJBwcLCQiKiAeKB4gHhwgNCwqMiwqIBoeHBYaJh4eMCYmJBweGhYYNC4qEg4</div><div class='del'>-UEA4WGBQWEBAYFBQaHBoeFhQcGhgeGhYcMiwsJB4cGBIYNjIwEAwSMCgmHhocFBAWNDAuNDI</div><div class='del'>-uIBweGBYcHhoeDgwQGhgaKCIgNjQuKiAgNjIuKiIgKCAeKCQiEhIWFBIUGBQaNC4sGBQcGBY</div><div class='del'>-YMi4sGhYWFhIYFhIaFhQWHhoaLCQkDg4SHBgaJB4gJB4eLiYmLiomGhYaEhIYFhYaIh4gHho</div><div class='del'>-gGhgcIBoaGBIaHhgcNDAsFBAUGhQYLigoLioqJiIgGhQaFA4SFhIWHhweFBIWJiAgIh4eFhI</div><div class='del'>-UHBYYIhweEg4WLiYkDg4WGBQYEA4SEA4UMCwqIhocHhgaJB4iJCAgFhASEBAUEhAUIBocFhA</div><div class='del'>-UKCQmHhgeEgwSNjQwEg4SLCgmDgwUGhQWLCgoEAwUFBASLigmEAwQGhIUFg4SIhoeEgwQKiY</div><div class='del'>-kFA4UDgwSJiIiIBwcKiQmLCooLCYkDgoQP//////////////////////////////////////</div><div class='del'>-////////////////////////////////////////////////////////////////////////</div><div class='del'>-/////////////////////////////////yH5BAEAAAAALAAAAABAACgAAAj+AAEIHEiwoMGC</div><div class='del'>-AQQMGECggIEDByNKnEgxIoIEChYgYNCggYMHEBREkECgosmTBydQqBChgQWXFzB07JihgYYN</div><div class='del'>-HDp4QMlz4gcJIEKIeDliJokSMzuaOAECRQoCKnpKHbhipgaZSRtgYNHChYaXGhy8gAEjhowZ</div><div class='del'>-U3vSqJE1KQsbN1rgGGEih44dPHr4+PHDBwIgaU+i6IjhZQMWQVgIuWFjCIsGRTveIFKECBEC</div><div class='del'>-RowcIYAgMEUkGmZeSKJkyJAJqDMsQVGCLQYNTJo40fHkyQsoUUJI6ez54JQGVEpUgSvEhhUb</div><div class='del'>-V7CwyKLFhJYtXFCQgNGkOpEkXWBU8PKFAODeBIH+ZADDIoyYEmOmgCFTpsoKMyAwbFkC4gya</div><div class='del'>-NGrQqGmyZs0SNm24cQQCBDgB3kAIvFFCGRnAEccYcowBxxx0XGEGClTUUYMdTNzRARJ24OHF</div><div class='del'>-HHnoMQcee+zhHR99HNiFETBg4ccfgFQRCBlhiWChIF+MIcgGHQwCgR0DEFKIIYcgksgccJjA</div><div class='del'>-QQVAdGHHgTAssIcibiwiCCNz1GGBCHOAQAggZIQAAiCNKGHCHA3gwYQjj+wAiSNIRCIJEli4</div><div class='del'>-AcQkvRHAyB56PMEGJXpUYokWlwyyRRwXJDKCiIRsAAEmf2SiCRpr5GDAJkQwQQQGU3DiAxuI</div><div class='del'>-9DZDJ558AooalPRwAiT+OMSBAgqCACKIAyBQAVkiSIQiSiSjPKKDJqQsUsEbNvwhxQM9eNIb</div><div class='del'>-ECuUYkoopyCxACp2iMCVAxoIMsYciWTwSSqIWFAHEkvkEAYTTKjiBBpMFMBABhzY0YNnhQBh</div><div class='del'>-yg6F8HHCKqWcUYYNDdTAwgUazIECCzX0wEoODQhBSiuioJGDB47k4IomOjiiwRgFePJKYAT8</div><div class='del'>-kEIMcExRSRNPoDGKS2C9dMMNsMRSgSwXzJJDGXwskQYtO6BRRC2WUFDLKpbwMXJaCBjxRigc</div><div class='del'>-8HHGHU7Q8MAYDSDVkRBCmFDCG6zYYkMQaHhwCy1uNIEGEXtoQkQTPBhBRCdpBJYdD6jgEgb+</div><div class='del'>-LmA8UgoeXyRlgQ0Y5KKLHKyoccYthsTghBO3VNCEDqjwoMkaPLxgmSIk86UIDDs48oQHstxx</div><div class='del'>-ixChQVbHBKrYQUkROjyiChpOFJHDLbLgoQYFoPBQhB+7UOLDI4E1zcMavMjRxh2c3JFDH6+4</div><div class='del'>-JEgDIPTCiRJp6GBLDrT4YggttKhgyy2m/DLDEzzw8AQRPBBBMgwI7AEGMB18wUgUFwRDgggN</div><div class='del'>-1NoCMAmAxB1ScYYklO12kwjfJFQAAQ/gBQhP0MQJHGE3YSggBnsgBSQCEQIODAMMtiDGBESB</div><div class='del'>-CTwUw1ZzEAUHCNGHO0RBFa2ghB1scYYc4IEWaoCBGvaQibqlZQL+nfDBEUAxgz/oghRHSAAT</div><div class='del'>-5HCHYMjBGCjAQx7mMAdBCEIUcWgEADJxjFfEwRHbswEy1MAK2RThDJ5RgAJK0YQ7xAAMD/BE</div><div class='del'>-AAQigyyI4Qo3EAIIQCCIPAgCD6X4RDICcIoOWMAUtuCFMcqnhiL0gHOeUQYHEuGIZSyBA4z4</div><div class='del'>-RBYA8AEqQEIMEQhEL+IgClsJAgKDGEIwRECIFljBEsyYgDEWAAruveAJvWEDBfBghSiAogxB</div><div class='del'>-IEQemuEMJVzgE1WcAyAAESb6FOAZhygDNBYgAixM4AFpIEQU0gCJJ8gCPAhgRAhkgYUwgCEN</div><div class='del'>-b8gDLqKBg0R8QRSJYMQlxGCMGwSBFMz+kMMfmNEBRuDCFAlwhSRoAARa/OJACOBAKe6QgFbo</div><div class='del'>-oRZWwMMsWECFC4TABSMAwSxmcYE/CEEC0jgAAxoRgQ58AgDKOMY04qAHIszxQANQBicSYIkv</div><div class='del'>-BAEHeMCFFgaBMA3gIAtZqMMRYHEBXUwgEgxwgi2MIRBIRKESqhgFNQ4kEFsUAICpaMYGXkGF</div><div class='del'>-L6BACziYRgcI4c9eYIEQExjGNALQiFtUQyCUSAMpfnEGClJVIASoACdO0YwHgIEQCkABLrIw</div><div class='del'>-iGaUwhKWaMYgrHGMWdzgCAKwgypcwQle6OEXt4AEU+8qEASwwQ2qWIAUekEJG9QBAqbggBXE</div><div class='del'>-EIUFKKMUDxjYxACMMQ1SuMIKVqiEHYoACVZwliAIuMYAEoCNViwgGwm4RASagYlsmOK42khA</div><div class='del'>-NjhRgALwQQ+R6AQD3PAGTfy2IAgwQHSzAYFsYOMYzZCEMh4wi2w4170ytYYwrGFdTxDhoN8t</div><div class='del'>-yCQKkIIIJEAbSFBAApTh3gUYOBvKIG4EBlAACsgABnvIQX4jAgRHzAAbGF6vAo5xCWVMYxpI</div><div class='del'>-kEIEYsCLU6yAEnadsESgUIABRCEK2IhABIQh4wHQgAbWsCwfnLANFZskAJ2YQUN2UYAYzIDE</div><div class='del'>-XWADDO5A1YAAADs=</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-teapot = &lt;&lt;'ENDofIMG'</div><div class='del'>-",</div><div class='del'>-".. c #998074",</div><div class='del'>-"#. c #84aadc",</div><div class='del'>-"a. c #c47e55",</div><div class='del'>-"b. c #4c6ea0",</div><div class='del'>-"c. c #d48a64",</div><div class='del'>-"d. c #ecccbc",</div><div class='del'>-"e. c #8c6252",</div><div class='del'>-"f. c #b1a094",</div><div class='del'>-"g. c #714628",</div><div class='del'>-"h. c #af8a76",</div><div class='del'>-"i. c #2c5284",</div><div class='del'>-"j. c #98745f",</div><div class='del'>-"k. c #8f5124",</div><div class='del'>-"l. c #844614",</div><div class='del'>-"m. c #5074a6",</div><div class='del'>-"n. c #aeb2b9",</div><div class='del'>-"o. c #3e291c",</div><div class='del'>-"p. c #44689b",</div><div class='del'>-"q. c #4c2705",</div><div class='del'>-"r. c #1b2b43",</div><div class='del'>-"s. c #e1c8bb",</div><div class='del'>-"t. c #dd782d",</div><div class='del'>-"u. c #9c5824",</div><div class='del'>-"v. c #547aac",</div><div class='del'>-"w. c #906e5a",</div><div class='del'>-"x. c #545253",</div><div class='del'>-"y. c #e07e33",</div><div class='del'>-"z. c #bcaeac",</div><div class='del'>-"A. c #aeb6bc",</div><div class='del'>-"B. c #6f737b",</div><div class='del'>-"C. c #7e5942",</div><div class='del'>-"D. c #b55e1a",</div><div class='del'>-"E. c #7c5134",</div><div class='del'>-"F. c #8c7a70",</div><div class='del'>-"G. c #62524d",</div><div class='del'>-"H. c #bc8a6c",</div><div class='del'>-"I. c #936754",</div><div class='del'>-"J. c #6e6d75",</div><div class='del'>-"K. c #8cb0e2",</div><div class='del'>-"L. c #d4beb4",</div><div class='del'>-"M. c #2a201a",</div><div class='del'>-"N. c #c48664",</div><div class='del'>-"O. c #412105",</div><div class='del'>-"P. c #a95a19",</div><div class='del'>-"Q. c #747a7c",</div><div class='del'>-"R. c #2a2e33",</div><div class='del'>-"S. c #484c53",</div><div class='del'>-"T. c #8690a1",</div><div class='del'>-"U. c #6c524c",</div><div class='del'>-"V. c #505967",</div><div class='del'>-"W. c #040204",</div><div class='del'>-"X. c #8cb6e4",</div><div class='del'>-"Y. c #8f4912",</div><div class='del'>-"Z. c #846e5c",</div><div class='del'>-"0. c #244a7c",</div><div class='del'>-"1. c #dcc2b6",</div><div class='del'>-"2. c #33261b",</div><div class='del'>-"3. c #81736c",</div><div class='del'>-"4. c #3c3b46",</div><div class='del'>-"5. c #735f53",</div><div class='del'>-"6. c #545e69",</div><div class='del'>-"7. c #bc7c58",</div><div class='del'>-"8. c #4c2f1d",</div><div class='del'>-"9. c #a4806b",</div><div class='del'>-".# c #604c4c",</div><div class='del'>-"## c #d4916b",</div><div class='del'>-"a# c #5c80b2",</div><div class='del'>-"b# c #e3d3cd",</div><div class='del'>-"c# c #c8ad9a",</div><div class='del'>-"d# c #bf6c2e",</div><div class='del'>-"e# c #08121c",</div><div class='del'>-"f# c #9c5e34",</div><div class='del'>-"g# c #9298a1",</div><div class='del'>-"h# c #8b7f7c",</div><div class='del'>-"i# c #835f44",</div><div class='del'>-"j# c #a46e54",</div><div class='del'>-"k# c #474649",</div><div class='del'>-"l# c #a65d26",</div><div class='del'>-"m# c #be6420",</div><div class='del'>-"n# c #7c9ed2",</div><div class='del'>-"o# c #ac622c",</div><div class='del'>-"p# c #726e6c",</div><div class='del'>-"q# c #e1a684",</div><div class='del'>-"r# c #a48676",</div><div class='del'>-"s# c #54464c",</div><div class='del'>-"t# c #a0a4ac",</div><div class='del'>-"u# c #b37b5a",</div><div class='del'>-"v# c #947a70",</div><div class='del'>-"w# c #543d31",</div><div class='del'>-"x# c #743e12",</div><div class='del'>-"y# c #98bcee",</div><div class='del'>-"z# c #d49e7c",</div><div class='del'>-"A# c #64320c",</div><div class='del'>-"B# c #d4cac6",</div><div class='del'>-"C# c #2c3642",</div><div class='del'>-"D# c #6e686b",</div><div class='del'>-"E# c #5c463e",</div><div class='del'>-"F# c #7f7575",</div><div class='del'>-"G# c #bcb2b0",</div><div class='del'>-"H# c #979dac",</div><div class='del'>-"I# c #a47a61",</div><div class='del'>-"J# c #8c9094",</div><div class='del'>-"K# c #1c262c",</div><div class='del'>-"L# c #d3c3bc",</div><div class='del'>-"M# c #9cc2f4",</div><div class='del'>-"N# c #af7455",</div><div class='del'>-"O# c #fcad5f",</div><div class='del'>-"P# c #6486b8",</div><div class='del'>-"Q# c #d4742d",</div><div class='del'>-"R# c #6d4e3d",</div><div class='del'>-"S# c #242224",</div><div class='del'>-"T# c #3b444c",</div><div class='del'>-"U# c #181515",</div><div class='del'>-"V# c #6e4024",</div><div class='del'>-"W# c #749bcc",</div><div class='del'>-"X# c #afabac",</div><div class='del'>-"Y# c #7e6a64",</div><div class='del'>-"Z# c #343634",</div><div class='del'>-"0# c #e8ac8a",</div><div class='del'>-"1# c #343a44",</div><div class='del'>-"2# c #b18f7a",</div><div class='del'>-"3# c #dda07f",</div><div class='del'>-"4# c #6f380d",</div><div class='del'>-"5# c #2f5684",</div><div class='del'>-"6# c #a08d86",</div><div class='del'>-"7# c #5f6068",</div><div class='del'>-"8# c #625751",</div><div class='del'>-"9# c #16253b",</div><div class='del'>-".a c #94b6e9",</div><div class='del'>-"#a c #dfcec8",</div><div class='del'>-"aa c #3c6194",</div><div class='del'>-"ba c #ecdad3",</div><div class='del'>-"ca c #948a89",</div><div class='del'>-"da c #a4c8fa",</div><div class='del'>-"ea c #bcb6b8",</div><div class='del'>-"fa c #604432",</div><div class='del'>-"ga c #cc6d29",</div><div class='del'>-"ha c #949ea4",</div><div class='del'>-"ia c #413024",</div><div class='del'>-"ja c #a48a7a",</div><div class='del'>-"ka c #9a867d",</div><div class='del'>-"la c #1c1a1c",</div><div class='del'>-"ma c #342116",</div><div class='del'>-"na c #bc8364",</div><div class='del'>-"oa c #9c8674",</div><div class='del'>-"pa c #844e25",</div><div class='del'>-"qa c #3c4a5c",</div><div class='del'>-"ra c #582c0d",</div><div class='del'>-"sa c #c7835a",</div><div class='del'>-"ta c #613c24",</div><div class='del'>-"ua c #614b41",</div><div class='del'>-"va c #adaeb5",</div><div class='del'>-"wa c #805c4c",</div><div class='del'>-"xa c #0a0b0f",</div><div class='del'>-"ya c #c4b2ac",</div><div class='del'>-"za c #648abc",</div><div class='del'>-"Aa c #af846a",</div><div class='del'>-"Ba c #c68a69",</div><div class='del'>-"Ca c #483c39",</div><div class='del'>-"Da c #7f400d",</div><div class='del'>-"Ea c #646e74",</div><div class='del'>-"Fa c #a85515",</div><div class='del'>-"Ga c #042244",</div><div class='del'>-"Ha c #816759",</div><div class='del'>-"Ia c #95817c",</div><div class='del'>-"Ja c #9c9aa1",</div><div class='del'>-"Ka c #9c6b54",</div><div class='del'>-"La c #7e4924",</div><div class='del'>-"Ma c #0c1a2c",</div><div class='del'>-"Na c #5f595f",</div><div class='del'>-"Oa c #6f615e",</div><div class='del'>-"Pa c #474149",</div><div class='del'>-"Qa c #8c9aac",</div><div class='del'>-"Ra c #cbbeb8",</div><div class='del'>-"Sa c #806e68",</div><div class='del'>-"Ta c #82624e",</div><div class='del'>-"Ua c #949294",</div><div class='del'>-"Va c #b4652c",</div><div class='del'>-"Wa c #9c9ea4",</div><div class='del'>-"Xa c #72574c",</div><div class='del'>-"Ya c #2a303e",</div><div class='del'>-"Za c #bc9175",</div><div class='del'>-"0a c #9c7a64",</div><div class='del'>-"1a c #261a13",</div><div class='del'>-"2a c #aca6ac",</div><div class='del'>-"3a c #341a04",</div><div class='del'>-"4a c #593520",</div><div class='del'>-"5a c #d49878",</div><div class='del'>-"6a c #26282c",</div><div class='del'>-"7a c #475261",</div><div class='del'>-"8a c #3f3535",</div><div class='del'>-"9a c #63676f",</div><div class='del'>-".b c #a47255",</div><div class='del'>-"#b c #bc967c",</div><div class='del'>-"ab c #52433a",</div><div class='del'>-"bb c #80a4d6",</div><div class='del'>-"cb c #544c4c",</div><div class='del'>-"db c #bc723c",</div><div class='del'>-"eb c #645e54",</div><div class='del'>-"fb c #a4abb4",</div><div class='del'>-"gb c #c89070",</div><div class='del'>-"hb c #8c7469",</div><div class='del'>-"ib c #c7b8b3",</div><div class='del'>-"                                                                                                                                ",</div><div class='del'>-"                                                                                                                                ",</div><div class='del'>-"                                                                                                                                ",</div><div class='del'>-"                                                            wawae.e.wa                                                          ",</div><div class='del'>-"                                                          .#j#N#7.a.db.#                                                        ",</div><div class='del'>-"                                                            8.g.x#C.o.                                                          ",</div><div class='del'>-"                                                  N#DaA#raY.Xa4aV#4aPas#q.W.W.6a                                                ",</div><div class='del'>-"                                            i#O.l.4.4.4.4.4.s#wa7.N#wawaXawawawaA#q.C.                                          ",</div><div class='del'>-"                                        3a3a4#wawawae.e.e.I.j#m#d#VaN#KaI.e.e.e.e.waDaO..#j#j#N#N#j#fa                          ",</div><div class='del'>-"                                        O.A#wae.e.I.e.I.I.Kal#m#m#D.u.KaKaKaKaI.e.I.e.Da3aXaE#C#W.o.C.                          ",</div><div class='del'>-"                                      w#e.k.I.I.Kaf#KaKaKaKal#m#m#D.l#j#Kaj#KaKaKaKaKaFai#u.    GaDaI.                          ",</div><div class='del'>-"                                      .#waKaI.KaKaj#j#j#j#j#VaD.m#FaVaj#j#j#j#j#j#j#KaKae.U.    9#o.Ka                          ",</div><div class='del'>-"                                      .#Xae.Kaj#j#N#N#N#N#N#j#N#j#N#N#N#N#N#dbdbN#N#N#I.waU.  e#M.taPa                          ",</div><div class='del'>-"                                    .#U.Xawae.Kaj#N#7.dbj#a.a.a.a.a.a.a.j#7.sa##naj#I.e.waXaU.Yama.#                            ",</div><div class='del'>-"                                    .#U.Xawae.I.Ka.bna3#0#3###sasaa.sac.##Ba7.u#N#Kaf#f#waXaU.4.s#Pa                            ",</div><div class='del'>-"      j#N#5aW.Y.u#j#R#            8a.#XaXae.e.I.KaN#naz#0#q#gb7.7.N#N#N#u#nau#N#N#Kaf#f#e.waU.LaU.                              ",</div><div class='del'>-"        4.Hahb.bI.j#KaY.          s#U.XaXawae.KaKaN#na3#0#3#gbna7.N#u#u#N#7.u#N#.bj#KaI.e.waXa.#                                ",</div><div class='del'>-"              G.2#e.KaI.E#        .#U.Xawae.P.Kaj#N#H.z#q#3#gb7.7.7.7.N#N#u#u#N#.bj#KaI.e.TaXaU.0.                              ",</div><div class='del'>-"                Ca.#e.j#Va  5#aa0.MaU.Xawak.d#I.j#I#N.5a3#5aBa7.dbN#N#dbN#N#u#I#j#KaKaI.e.waXaU.0.i.p.                          ",</div><div class='del'>-"                  abU.I.KapaaaaaxaGaU.C.wau.VaKaj#I#na5a5agbN.u#N#7.N#N#N#N#N#.bj#KaKaI.e.waXa.#R#m.m.m.p.                      ",</div><div class='del'>-"            zaW#0.0.s#waKam#0.0.e#GaU.C.k.l#I.KaKa.bnagbgbBa7.u#7.N#N#N#N#N#.bj#j#KaKaI.e.waXa.#.#b.m.m.i.i.0.                  ",</div><div class='del'>-"    5#aaW#W#n#aaaa0.U..#e.Kau.ta4aLak.k.u.o#e.KaKa.bu#H.H.nau#N#N#N#N#N#N#j#N#j#KaKaI.I.e.waXa.#fab.m.i.i.i.i.i.0.              ",</div><div class='del'>-"p.p.p.aan#W#0.0.0.0.p.uaU.KaKal#o#d#gal#o#o#e.I.Kaj#N#Aau#u#N#N#N#.bN#N#j#.bj#j#KaKaI.I.e.waXa.#E#m.m.v.m.i.i.m.n#bbn#          ",</div><div class='del'>-"p.p.n#n#n#p.0.0.0.0.0.xa.#waKaKagaQ#t.y.d#dbi#e.I.Ka.bN#I#N#N#N#N#.bN#N#j#N#j#KaKaI.f#e.waXaU.U.w#5#m.m.i.i.i.m.bbbbbbbbaa      ",</div><div class='del'>-"n#n#n#n#n#n#0.aaaap.aaaas#s#waKaj#na##O#dbl#wae.I.I.j.j#j#j#j#j#j#j#.bj#j#j#KaKaKaI.e.e.waXaE.Hai.m.m.i.i.i.i.p.p.bbb.b.p.p.aa  ",</div><div class='del'>-"p.bbn#bbp.p.p.p.p.p.aaaaaaua..#be.Kaj#j#u.XawaTae.I.KaKaKaKaj#j#j#j#j#KaKaKaKaKaI.I.i#waXawaR#uav.m.m.v.v.i.b.bbbbbbbbp.p.b.p.p.",</div><div class='del'>-"bbp.p.p.p.p.p.n#p.0.0.0.0.p.8#Oa2#ZaZaZak.XaXawae.e.e.I.KaKaKaj#KaKaKaKaI.w.I.I.I.e.waXa0aXa5.5#i.m.m.v.v.p.p.#.#.#.#.#.#.b.bb#.",</div><div class='del'>-"bbW#p.p.p.n#bbbbp.0.0.0.0.0.0.0.x.D#3.3.w.waU.wawae.e.e.e.f#I.I.I.I.I.I.I.f#e.e.wawaXae.w.ua4.5#5#i.7ai.b.b.b.p.b.#.#.#.p.b.b.#.",</div><div class='del'>-"p.bbp.bbbbp.p.p.p.0.0.6.p.p.p.0.0.0.0.9#R#wae.9.j.wawae.Tae.e.e.e.I.e.Tai#e.wawaw.Aaw.hbOa6aC#5#m.v.v.#.p.p.b.b.p.#.#.b.b.p.p.b.",</div><div class='del'>-"0.0.0.p.p.p.p.aa0.0.p.p.p.p.p.p.0.0.p.qaT#s#Z.0a..h.I#I#ZaZaI#gbI#.bH..b.bH.h.j.r#HaU.PaV.V.Na1#v.m.K.K.K.#.b.#.#.#.#.K.p.b.m.p.",</div><div class='del'>-"0.0.0.0.p.0.0.0.0.0.0.p.p.p.p.0.0.p.p.qaqaqa2.iaR#HaY#ja2#2#I#Za2#0a2#2#h.jaoaF.8#V.6aC#C#C#CaNab.bbbbK.#.b.b.b.#.K.K.#.#.#.X.#.",</div><div class='del'>-"b.b.p.p.p.0.i.0.0.0.0.p.0.0.0.i.0.0.qaqak#6aR.6a3aiawaY#OaOaOaD#Iah#D#OaF#cbPa6a6aW.V.6.1#C#7ap#b.b.b.b.b.b.b.b.b.K.K.#.b.b.b.b.",</div><div class='del'>-"bb#.#.#.#.b.b.i.0.p.p.p.0.b.b.0.0.0.qar.YaYaYaR.K#Z#E.xa1a2.S#.#x.x.S.R.laU#1#W.W.9a6.J#J#T.7av#K.K.K.K.b.b.m.m.b.m.K.b.p.m.b.b.",</div><div class='del'>-"#.#.#.#.#.#.K.#.#.#.#.#.#.b.b.b.#.p.qaqaYaR.YaR.Pa6ak#S#lalaW.W.xaW.W.W.W.U#U#ebT.hag#g#haT.7ac#K.K.K.K.K.K.b.b.#.K.K.K.K.m.b.b.",</div><div class='del'>-"#.#.#.b.b.b.b.#.#.bb#.#.#.b.K.bbK.#.T.T.J#R.YaS.S.x.ebebR.2.S#S#S#T#S#S#S.9a7aEaEafbhag#6.7aV.m.K.K.K.K.X.K.m.X.K.K..a.aX.K.b.m.",</div><div class='del'>-"b.b.p.b.p.b.p.K.K.K.b.b.b.b.#.#.#.#.T.T.J#UaJ#J#g#g#haWaWa7#9a2at#fbA.t#9a6.9aJ.EaEafbV.6.V.Nam.b.m..a.am.b.m.m.m.K.X.K..a.a.am.",</div><div class='del'>-"  p.b.p.p.b.p.K.b.b.p.b.b.b.b.K.#.K.7a7aV.9aWat#X#WahaH#ha6.t#n.n.n.n.fbfb9a9an.t#t#fbfb7aV.7#m.m.m..am.m.m.m.m.m.m..a.a.am.m.m.",</div><div class='del'>-"  b.p.b.#.#.#.#.#.b.b.b.b.b.b.K.Pax.V.7aNa7#7#t#vafbB.B.B.B.B.n.A.A.A.fbfb9aA.t#t#fbfbQaH#7#D#m.X..a.a.aX.v.v.v.v.m.m..am.v.m.m.",</div><div class='del'>-"    #.K.K.K.K.K.#.b.b.b.b.K.K.K.T.S.V.9aB.ebNaV.p#9a9aB.D#9a9aB.A.A.A.9aB.B.Eafbn.t#g#hat#X#m..ay#y#y#y#.ay#v.v.v..aX.y#.av.v.v.",</div><div class='del'>-"    #.K.K.#.K.K.K.K.K.K.K.K.K.QaT.V.7#Ea9af.f.2at#OaD#F#Q.J.9aEaB.Ea9a6.Ea9aEaV.H#H#t#2aD#J.v.m.y#y#y#y#X..ay#y#y#y#y#y#.ay#.av.",</div><div class='del'>-"      K.K.K.K.b.b.b.b.K.K.K.K.g#g#t#D#fbWag#c#X#2a2aeb7#D#Q.vaA.2at#p#9a6.V.7#7#9avaSaSaSav.m.v.v.y#.ay#X.v.v.v.v.y#y#y#y#y#y#y#",</div><div class='del'>-"      K.K.b.m.b.b.b.b.K.K.K.K.Ja7#7#6.2az.#ac#z.G#eaG#p#2a2a2at#t#t#t#7#9aD#J.SaL#RaRaF#v.v.v.v.v.v.y#m.v.v.a#a#v.v.M#M#M#y#y#  ",</div><div class='del'>-"        b.b.m.b.m.b.b.b.K.X.7#7#7#7#D#3.1.z.yac#yaibh#caB#L#eaz.z.z.z.z.F#h##ab##aL#ibibv.a#m.m.v.y#M#y#a#v.v.v.a#a#a#a#M#      ",</div><div class='del'>-"        p.b.m.b.b.m.b.b.m.b.7#9a9aSahb..m..ayayahbhbF.h#Ias.RaRaibibL.L#kab#bab#1.L.L.y#y#a#v.v.M#y#y#M#y#v.a#a#a#v.a#a#        ",</div><div class='del'>-"          b.m.b.b.X.K..aK.b.7#D#F#hbv#m.b.m.m.F.F.F.v#v#F.v#L.L.L.L#..ka6#h.s.1.L#1.y#M#y#daM#M#day#y#M#M#M#a#a#a#a#            ",</div><div class='del'>-"          p.b.X.X.X.X.X.X.X.9aD#6#..m..aX.y#m.m.F.v#v#v#....1.Ia....kakar#r#r#1.s.M#M#y#a#a#a#M#M#y#y#daM#dadada                ",</div><div class='del'>-"            .a.aX..aX..aX..aD#SaF..ay#y#.aX..am.m.........s.s.9.9.r#r#r#r#kakar#M#M#a#a#a#a#a#a#M#M#M#M#dadada                  ",</div><div class='del'>-"            K.X..a.a.a.a.aH#vab#1.y#X.X.y#y#y#y#v.v...s.d.d.d.s.r#r#h.jajajar#a#M#v.a#a#a#a#a#a#P#dadadaM#                      "};</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('xpm', 'color', "/* XPM */</div><div class='del'>-static char * teapot[] = {</div><div class='del'>-\"64 48 204 2\",</div><div class='del'>-\"   c #145ec4#{teapot}")</div><div class='del'>-</div><div class='del'>-demo.show_image('xpm', 'transparent', "/* XPM */</div><div class='del'>-static char * teapot[] = {</div><div class='del'>-\"64 48 204 2\",</div><div class='del'>-\"   s None c None#{teapot}")</div><div class='del'>-</div><div class='del'>-demo.show_image('xbm', 'bitmap', &lt;&lt;'ENDofIMG')</div><div class='del'>-#define flagup_width 48</div><div class='del'>-#define flagup_height 48</div><div class='del'>-static char flagup_bits[] = {</div><div class='del'>-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00,</div><div class='del'>-   0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xef, 0x6a, 0x00,</div><div class='del'>-   0x00, 0x00, 0xc0, 0x7b, 0x75, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x6a, 0x00,</div><div class='del'>-   0x00, 0x00, 0x30, 0x60, 0x75, 0x00, 0x00, 0x00, 0x18, 0xe0, 0x7f, 0x00,</div><div class='del'>-   0x00, 0x00, 0x0c, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x06, 0xe0, 0x04, 0x00,</div><div class='del'>-   0x00, 0x00, 0x03, 0xe0, 0x04, 0x00, 0x00, 0x80, 0x01, 0xe0, 0x06, 0x00,</div><div class='del'>-   0x00, 0xc0, 0x1f, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x7f, 0xe0, 0x07, 0x00,</div><div class='del'>-   0x00, 0x70, 0xe0, 0xe0, 0x05, 0x00, 0x00, 0x38, 0x80, 0xe1, 0x04, 0x00,</div><div class='del'>-   0x00, 0x18, 0x80, 0xf1, 0x04, 0x00, 0x00, 0x0c, 0x00, 0xfb, 0x04, 0x00,</div><div class='del'>-   0x00, 0x0c, 0x00, 0xff, 0x04, 0x00, 0x00, 0x86, 0x1f, 0xee, 0x04, 0x00,</div><div class='del'>-   0x00, 0x06, 0x06, 0xe6, 0x04, 0x00, 0x00, 0x06, 0x00, 0xe6, 0x04, 0x00,</div><div class='del'>-   0x00, 0x06, 0x00, 0xe6, 0x04, 0x00, 0x00, 0x06, 0x00, 0x66, 0x04, 0x00,</div><div class='del'>-   0x7f, 0x56, 0x52, 0x06, 0xe4, 0xff, 0x00, 0x76, 0x55, 0x06, 0x04, 0x00,</div><div class='del'>-   0x00, 0x56, 0x57, 0x06, 0x04, 0x00, 0x00, 0x56, 0x55, 0x06, 0x06, 0x00,</div><div class='del'>-   0x00, 0x56, 0xd5, 0x06, 0x03, 0x00, 0x00, 0x06, 0x00, 0x86, 0x01, 0x00,</div><div class='del'>-   0x54, 0x06, 0x00, 0xc6, 0x54, 0x55, 0xaa, 0x06, 0x00, 0x66, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x06, 0x00, 0x36, 0x55, 0x55, 0xaa, 0x06, 0x00, 0xbe, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0xfe, 0xff, 0x6f, 0x55, 0x55, 0xaa, 0xfc, 0xff, 0xa7, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x01, 0x88, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x8d, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x8d, 0x60, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa0, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x8d, 0x50, 0x55, 0x55, 0xaa, 0xaa, 0x8a, 0xa8, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x95, 0x54, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x2a,</div><div class='del'>-   0x54, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('png', 'color', &lt;&lt;'ENDofIMG')</div><div class='del'>-iVBORw0KGgoAAAANSUhEUgAAAC4AAAAjCAIAAAETQp8oAAAIVklEQVR4nNVXPYgbSRb+xm7B</div><div class='del'>-K5CgC07QtaCDOvBCDeyAFAxIwQYdbKCBDeTgQBMqtOGCcTYOvXDBODjwHBzsBHcwExzMBAtW</div><div class='del'>-4GN7YQ1ScKAOBNPBLFcLHugGC7pgBf0WeuGC1vz6h7XZ4O5DIJp69dX3qr969Rp4A3erv69H</div><div class='del'>-YQn8aasDxh0Aw66JTtPU5ZIIhLsAvIZXw9rLJItfvd74vVzNepPx3Rh2DQAPwPFO3zqenaaO</div><div class='del'>-GcAdAAdRkuf50TQxyv8Q0gqh0ZWYNQDD0GRpHrbVJHFRYvtGE9H9nr7/dAwg8OkugLldmFaz</div><div class='del'>-1fDLtXKj1eytt76fv9JKKkkmaE5/yFbMD0IzDA2A3UEbQFsHH6bs7rsGvt0dnC9yu1heRTwZ</div><div class='del'>-dKPkHMDhTj9OXp0tXpelCBp0F8DXo/DLjp5ni+3uxou5fXT/c5Tl/HwxPcvO3dIDkOXFxGYA</div><div class='del'>-0tz+5/neNJooRSqVqi1DE3iXqyhJp2n+1dODooBjVpKKAm2t7gAIpCACgHUlD6IkXFfj2HaN</div><div class='del'>-YnBs3Ur2oK0BHO/030zqDgBmVpIAVPv924AI7cDvt3X16L0/usKzUcjAo4MIwKjftjb1SRAR</div><div class='del'>-g6/UVjje6T8bhXvDlZ/3Rt3Di/QOJ6fa9wEMu6arJJFwXGSOT6b2NsvEppPTNMnSZ6Owa4I0</div><div class='del'>-5Ulsn+8OAIABIh34WvuCKIotAN/Hg377293BDRZFBCDNmQABxNbN0vwwig93BrHNJnHS1TLL</div><div class='del'>-nE/U7xqfJBhp6m5rAdDTSkkaz6xWUitSvhCCRk9Pjnf6StHR1BYFGGwUSYLRgZKUZO4Gi1Ey</div><div class='del'>-shYAEQE4iJJwPSgKMLD1dEwQAI6myf2n469O4rZWSorxzD48iFAdxcsXEZ1aJfyJtbF1/bYO</div><div class='del'>-TaCV/ACD+PRrI//3MOzeOC+/yrvX4RM96Lcz50ah8Wm1EXfePwdAaIKvR/1RaKrHve0wSTMA</div><div class='del'>-RYHMrU7A26vTs2HY39Tj2AJAWdYEDqOkBPaGYbJ4XTKWS14syyRdnF33S1v7Twbdb3cHO/02</div><div class='del'>-gJP4FMVFCpKIiIFh15Agm7rM5Qykeb5a5pJlFJrT1B1ESdjWD/pmkmRK0ZNRtxpNUzfsmszl</div><div class='del'>-He0nNo2SbBzbyrWhCa4yapuWcywEqFZblmXLl2se/JpQ0h/HPypJZ855pbeh1d++m5vA37yn</div><div class='del'>-7in55+3eX17EZXmhRQkBIM/ZprkkAlAwj2d2Z9ADUDBCo9e1ZObK0NUsAno6uMpIXnhX+jSz</div><div class='del'>-WeZYK+kTJok9ffZA+qKtVV5wASYSBBARAbHNK8YVi80LBjsUbSUlyCcIwDEe7o/jxFa+cK5w</div><div class='del'>-edEzgZJUERWMauiCJXMdHez2e0+jxLq8ykJJGvXbjw8nWx2tCFGSHU+tUTItWCuSAiDW/jUt</div><div class='del'>-xxNLwMOjKCDSSkpJWVEUBZjZOpfmeWWvqc2Ysd0zVU49rR4eRVcsjpkgKmICigJ7J7GSlOYM</div><div class='del'>-4NHR1KZ5Fbm9P54kqSTR0XLromhcnSMGtCQGADqaxv22BiG68FXljgpPx/Etr1+dI1+AiHyi</div><div class='del'>-/SgGsN0zkogvRg+iBL8Gxzv9qlP4eFye8f8/mOBG87b2rrjfHMc7/cTlKKClJEJi87ZRW1+d</div><div class='del'>-XAZ8cNV9P9o6eDzojGN73RfPdwdpxvvjWeBLZrbSFQU62mfm63N/GymBTx2tQqOVpP1xEiUr</div><div class='del'>-u/fbOuxom7loZisjEVFeMDPGcWayj5XSb+vtnk7zQiv55GSyagcBAFW7l2SpL3Wlwye639OD</div><div class='del'>-rnHMB9GMIHySjlcbQQQi2NT5hIub6EJKtbG54ywviJAzJ9Z1dNA1KrZpynwysePYjmM7Co0v</div><div class='del'>-5eNBL0rS/atzTbkrtPI7WgEYdo0QSHN2jnPmwgFUZAygmNjs5mu5wg3b+oRHg24BuEoqMwP9</div><div class='del'>-ts6ZT2ZWCwJB+X7qeNDWmXM508ODVYnqmkAAu6P7+4djx4VPomeCtlbMvPVG79PVwVZXE4TR</div><div class='del'>-FCf545Mpbl3QXKL/WWtdSbtY4sJULSkWeWE+qb9IUikEL1n9rv7P6Q+b91SNsB1+/v08WXLZ</div><div class='del'>-8LyG8DbX1XfJebEsG1RrNuvlz7UFMzNMS36mpJLStOQ9JQXVXi+WX2xq55YP//GyWv12r/Dl</div><div class='del'>-5qcN8uz5AkAJnKZ506/XBVyBl/GP1bfd5sYn38/Ts9R58DqfNj/f3PhjGB6+mJIg5zhc18uC</div><div class='del'>-Pc9rCmop0fLrLxNb92oM1D14WP0AqIZYlgBwdqtBvY604CRnm7MAfCGUL2c26xrdM0oH0qVF</div><div class='del'>-1fjHNus9OuA8VUgPdwZEAFj7xMwMntnMpnnmOPBldR0QkZQkJVXI8sIE/uVX6u1dMcpvNRtl</div><div class='del'>-WTYEbbb8L3t/yF6X4/mZzYqax3WvweBwo5XY5e/qxMuyLPngu6Srm8uyXFcytouWlH+fzL1f</div><div class='del'>-vB/yZVPWWlK2pHDlUklyy7LRIM/zxFq5VoNjbjUbZVl7MbdvkcI/8eanzWWJhVvOX7lv/n02</div><div class='del'>-P89Vs9HAWp0aUlKNUfcECSzc8l7L9+u1+bn7JrZfbLSIoJpkAvnXf83P3dItueF5Rknlk1cT</div><div class='del'>-S8bPv/BPZck/lbJBql43SjouyxKVlLcU/mejkFEcRtYEghlEJASKAlIgL+CYcy62jE7ZEcgx</div><div class='del'>-XxZWE/ijsFP1G9cJCXgy7PpCAOACKedaSkEAsL1/Ffm2ElfAKGkCJyWBwcWqDhDRUbQqJI/6</div><div class='del'>-nTRxDEQzezkvydzjk2hvO7xeuAAw8Oho+paFbuItUqQkgACkqVOSSICIolliL+hHoUkd5znW</div><div class='del'>-FVl3o2Ax4+FB5BMB7yhkHyQFgGPurfs2ZRCc42tVFcPQnNr8/V2Qe1dBfS9ue2Vv2CUhiGia</div><div class='del'>-2Oczm7mPIf04/BfyDD1tMD0WfgAAAABJRU5ErkJggg==</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('png', 'grayscale', &lt;&lt;'ENDofIMG')</div><div class='del'>-iVBORw0KGgoAAAANSUhEUgAAAC4AAAAjCAAAAAG5S1ejAAAEJElEQVR4nKWTXUwcZRiFH2YG</div><div class='del'>-ZpiBLsx2wW6ZpU1YC+3axWClf7ZKY5NVozHRxIYaL0xq1YuGeOFVRW40TXthk4aLxsT/xJjG</div><div class='del'>-+tdiGkUl1nQV6rYokuy2IFugy8/irp3dHXYGvFiwBdQ08Vx9+d73Oznfe84LAIjQNv+ELdBy</div><div class='del'>-aVqTRBSh/8p6aGMZWpDomBwwETg7020sL0NjG0XsTTT9GmlSdreji1xZ555bvzmyVvcNAI/s</div><div class='del'>-pRX/8lfi4uHoREIEnrnEKwNjcxUibdt+39PX6gwNTEkkB0l+3VPtdgclQI8fs0zd8gvoMkZX</div><div class='del'>-MBywY3B0Ox0FKoGcTvtKhQuQa5tBuvXmkHOCx4Y1xS7o6Qg29vFi6DvMe79paRjP5sIgAL/1</div><div class='del'>-jxwKJC4ewS72+kp7WfX4UQRgFUlBjA1/2R7t25DQdpbZiQJPU5V1xVMuqW+9ykc+X37WKJLC</div><div class='del'>-AmD8gkJX0HIOS3S3f+B3h48jAVNI0Viztbub4wCdC+rUf/3J7eEBOgr6l0Dbr4TUpffBl0Jw</div><div class='del'>-cARr5qYvL2wPM1d8bv65a3kzPTKKBHU7AuFT53eAS3FaSsdyynQcRGiNxXaVff9wfa+Of/rB</div><div class='del'>-T66OpgkmRNiYkkssj6CuDusJ6s4YDTUHTjsCuEiNauQu7MNqXJ8LekGoRwAVXNGkV+1/33Wn</div><div class='del'>-mVdERYx5EWDCttbJqpQ5NqCRSgV0UbE0BBjzP/XpBDn90Te3ll3q8aXXqGIVAvSInau8rrSV</div><div class='del'>-m5iaY9DaU6TUdyKAKVUhWh/qSU6Owmv9mv9wIQ+OxynqbpZ6IQ6cAgrzURXtc/ZoDnQtGWFH</div><div class='del'>-6z/OW/t/dhkARbfR2DGer5avbnyZZWleCv/+C13AkYmP3bkxqy73X+y6v9F9NgLNW8Sf7DJs</div><div class='del'>-yzI+X8ne3DK99r0YoDNSEUHbdb95RiozLWR5TM2ABP79fyRlc8gfiKZ7wuFQ5dOR01CU8vpp</div><div class='del'>-kZMp05St+UFrga4IQN3npMg7W2/8UCm5k9uT2TcgID7/rqkF/LnDANTvkNYNvlMIZn6L73re</div><div class='del'>-YfWMEdEynm8bSkIXs3Lppki21G3fsGpr3bU1yvS21InFHO8sjTMfryzNXIxbmyPXhPrm0Bkl</div><div class='del'>-fXdGKr/DfVl2ZEEQqJhl9O91SF+fFMtWR+8KeKdsogdSxe3ynCdnR0dn3IqmuFyKkqwxFtmN</div><div class='del'>-alutu2/qx3FRsZuGXFm7a8OsL+r5ikSFx53Vb5RJomBWO30L7WaDNTN8fthTrLrmZHnGVz58</div><div class='del'>-4Z4ST81nU3/Khl6SnbWy5ZVGxu5btOmQfa7GUmRLzZhmU0oyu8B4SOwEEJ/VsFJVCq/ftCm/</div><div class='del'>-xnDZOVC+gCd/dnqB+NsH1QzgnLzFxoX2CoGELiu9kxBKpo1JAOv4ygwvhsDcNC6lTgF7h25u</div><div class='del'>-g7mivaD9QKlyOZxcUVyJvwDv65E2xA9RYAAAAABJRU5ErkJggg==</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('png', 'transparent color', &lt;&lt;'ENDofIMG')</div><div class='del'>-iVBORw0KGgoAAAANSUhEUgAAAC4AAAAjCAYAAAGcIAh/AAAIl0lEQVR4nOWYIXDjyNLHf7p6</div><div class='del'>-oMU0TIIDtcxhNhT0Mi9LoD+2y7JsF+6xhG3YBSYsYWt2gg6zWcS+gSM2w9RsPiDbiS/Z/e7u</div><div class='del'>-3b33ql5Xqcoujbp7unv+/+6B70i2//HLskn3G8f8xLJaO34COJ3WqX30+BgwIiCML7oYiKps</div><div class='del'>-Xcw+362pjDyp+Z6t/19Op3UC+AfA3fk8uahsHj1RFdgZv247QgjcPnRZXRV/3txBmtqmvecZ</div><div class='del'>-wGlTp94HmknFuou0nWNeW0SEdzPLu8tVBlAWkg4hnE9smtkSFyMAE1tx0z5y1rxh6zzDALcP</div><div class='del'>-3WE975s6nTbjlj8tJmn8qPwnAvh75NdPi9TUo5Wfnr/4spgeTN+cz5MtJF2u1kDO1JbpH/CU</div><div class='del'>-4AfnuTht0sfbNrNVxWJW03aOresz2KWwDwNr1wPgg+N/v12kh3ZNVQmVN1QTk5q6HBfvpTLC</div><div class='del'>-ow/8fHnNMEBUpTLCMIwh/QmgNDmyq7k3leG67bLmTcVq67JpXaEoWxefdryY2ARjVX0vMj8B</div><div class='del'>-6M4ccEjz3yoipElZpPnOQ+A4IL9Hvi6bpMDH6zYDWM4nyTlPITkigqKHtUdJvzufp6/LJl2c</div><div class='del'>-Ph3ci+U03TyL0836EVuMB+10WqdpZRDJiTrQR+X+wWWvKl87z/rR0/Wer8smTesyea+st45v</div><div class='del'>-nxajAR1jYMsiWVuQi9BuHQBFAe/nk/Trbu2R8mqXfx8UAXJg6yIbH7hpt9ycL9LW9ay3HVNr</div><div class='del'>-6PtIIcJ8WlOIAQXv4+thAZjZisoIq43DVgZbCVWRk+fC8vKeu/M5VSXcPrhsGEBR6kowArUt</div><div class='del'>-qYzQ9fGl8roytG7coux2MRZwyaiI7O3lKhNyYASNd5er7Of7bTaxFZXJWW0cH3bJPqrRr8sm</div><div class='del'>-tY+OKi9YO8fWxWw+sampS2xl/nxNF8LfjEz/qXI6fYkdf/iE/lYKkfR+PqGPkWVTp2IPZ7xS</div><div class='del'>-ij+Spi7TL8t5Wu6YBODirKHzI/AOA/Tx6fj/MPtfT5tEzqG0bCGpObHctB0K2cVpk1wMhKCo</div><div class='del'>-KlFBBFbbEQIOnk9skb4spunXT4t0Ph+57X77CMOzEBjZgRPZ6bROkgvOR/oYUMCHcFB8pHzZ</div><div class='del'>-1Dz6yHXb0Uws7+d1Wnc9VSV8WT6xmPeR02md+hg4sQWd87Rdn622Luv6mO3DB88S6nce5jm4</div><div class='del'>-PiIiLKY1nQ8Uec6ymaTrdpuZWpKPgQLBB8VFzeqySLYyByfPrlbHnlf5eKRDUJzfdVXAoMpq</div><div class='del'>-4zhfzHb/oaktb6xBVWnq8qAYQICZLY+Vm6cKwhTCxvX0UbGVoRBYd47Hr++TKXImtiIMyoAi</div><div class='del'>-kiOMWCTA1gX2xg7KXRhQlMjApDIYhEJG2I0KH65WbDvHvo5jHIhhYFaPSLg3MCiHNU/K+8iJ</div><div class='del'>-Lfk0n3HZdrgYDmGojLCcT/h8s+btiaUSaLs+u3tw1JXBD4qtBJMDotjiN57frR0CfLhtKUWw</div><div class='del'>-lcEYoR+GEW5VcTFmPoQDSz64PlOFs1kNjGU6sxUfbtvjOo+qmZAfrArjibu431KZsTIAPt4+</div><div class='del'>-ZM6HQ37OrlbZuvMYyTmxhrfPYPkIWxSwRnaeCbcP22w+sQnhwJPAgWn2crnavnrSj7ClyMek</div><div class='del'>-FCJcteMHZ7MaszuV+3XXbffHSePufJ72be1fKoXIfycT1WXxYuP/NBH9lXJ3Pk9dDDCANQYR</div><div class='del'>-6FxgUle8/fn+aO2/zPGJLdPnxQmrrXtRyN8+LZLvlavVhrIYsdaZyDDAiS1Q1Rf6/lbHy0LS</div><div class='del'>-ia1oaktlhKtVR9u5oyGzObG4PtJu3GEIEhHCoKjCattT93+h4/OJTWcziw8DtjJ8uV+zdfEo</div><div class='del'>-kvuZqes9hbEHpwuR9G5mWUxroirX7QYhpxBD1NHhcQPj43ykEFJUXgLiPpUhKn0YEIGgSudG</div><div class='del'>-/pjWFVvn8arcrx2rrctWWzc2WMbweTGj7Xy6OgJHIcQBWxWc2AoYp5w8H2eLGJWgyhABGRgD</div><div class='del'>-Ow62qj9up168LIT0cTFlAOK+KdNxOptPLEGV+43D5uNtS1UU+KgsJpY+RoIKH66fqGJalykH</div><div class='del'>-Pi3fcXWzIupAITmzumRiK1T1iFqey9SW6e3UIuTUVth2gc/3D8f8tpeoZAKc7JsQfRopVZUY</div><div class='del'>-BuZvSjY+oAq+j1SFcLnaIiKYAu4+LVNZjNgdd7yoGoiMTA8j3blecVFpapvmE5sWE5v2v+cT</div><div class='del'>-m0yRs+l6alsQox6cftVxANl1XTw7zY8+4MKA5BAH6H3k28axcYHC5Pg4cN12PLpAZeDq4xl3</div><div class='del'>-X86Tj0pQuG87Fic1tjTjEKdgCqjLAhiQ3WaKMZGHB8bgBB3P1Q8d34sflC4oLig5UOQ5VWHY</div><div class='del'>-uJ5pbZnVFbY0RD8cRv2t65l9vM40eCo8N+eLHVoothBUFUXZuB7nA31UysIc+gERwZjxkd3/</div><div class='del'>-PgzUZcHza7dXHd+3OnU1Lp7XJeeLE3SAm3WH6weiBoTxbqK2hkrM2BnqOHecXa6yR9fjY+Rs</div><div class='del'>-9gYfFB+VtfP4fmDrw+GurXlTYQzYaozx3mGT7xr5GMeLpOKph37V8XbjUFVyGSPUdj2fb9fc</div><div class='del'>-PDwiuWCLEbqMEQyC98pkRxS1LZjWI4L8z3WbqSoi0JyU2FLoo2YPrs9cH7POBQZVqkKoqwoQ</div><div class='del'>-8nxEsxAUEcEWBVNb4eMxln8XcsZboIGb1lGXOapjJPJ8bEpNDmF3pRZ04G1t8RoRZIfNT+xY</div><div class='del'>-l0VaNif7zvmFTYH05XRKsTtbOoDXgDWGfFfoZ1fH332fgIbxVqQuI8aMJaDD065FhNv2CbM/</div><div class='del'>-zk+S7yK6y9hz6fqYfb5v08VZ84JIYLxd+Xj78F1XXpPvOm7M07n2Po6Tzq6pbjcdLurB+LKp</div><div class='del'>-R/QI8KaSo3cH55Tsw3W7a3FfUvgflR9SflRl9qbAeQUZCenqN2PDaVOnRxd+9wQQ9eWm/oy8</div><div class='del'>-quTidJokH280HzrHt42jfyWK/075P4AQnUfVTZNLAAAAAElFTkSuQmCC</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('png', 'transparent grayscale', &lt;&lt;'ENDofIMG')</div><div class='del'>-iVBORw0KGgoAAAANSUhEUgAAAC4AAAAjCAQAAAE2KcD0AAAFPElEQVR4nMXWXYicZxUH8N+z</div><div class='del'>-M3HezCy76axJzJrtR8jWVVc29IMtTTG6hUqqqL1QWlrxQmirXpTihRdSY4pUSws1IIEWBesH</div><div class='del'>-CAZFapNaSISgpUurJra2i7u2IWs+dpNMnbWzndfM9Hixs5tNmrYJCv7vHvi///ec85z/OQ/L</div><div class='del'>-kODeeMZ1fq+LsTjolIqixAejx3jqj5EFknfEWFBke5zwkga62O01+9LAO38INsW9QeKmmHG1</div><div class='del'>-vzrgapkttiWqkWA0hsziSr/1CX+T25fAp+Km4PZg8F2CfCseipGga+HwxYBvxur4hWQoigtp</div><div class='del'>-T7grHk3rbXHAVKJIzQRq9sZ+a/XpixHFBZGqaQ/LNVTlBnVRVcKAPWnEeBrWMrXw7+uD7WfF</div><div class='del'>-3EVTFdvSxaaiFJfFaGAxlLfinmj7fuIzcUhFpmUZfXvUND2a+Gr0uT+x1+cxFhsc1zDvQOrE</div><div class='del'>-CC97wWH3xHDM+JMHg5YV+uNSKz2PHrfEQ2eK24OaLgVTDnnKtpj0Rx8wo+IG3VpmLFNnSNW4</div><div class='del'>-futUZb7tW9b6Xcq1rFe2QdU/ztAHvIgMe9KIXDvdl4rYl7aln6VBfcbtSEupnkTRpKk0Grkt</div><div class='del'>-9mHHUsV3nl378kV31f8SH1/qkbe91UVU4hanbI0ylhXybIzE12JrwN0OI/caOqPgDL4SK+xI</div><div class='del'>-rI5rPK2d7opZdU3zSsYXC7kxNhs2blf6g82gV6adxmKlo5oyp0yf6Zmtpu1xrc/Gi9a6O2DG</div><div class='del'>-WJyy0SsOpvE0nRiJjvq/UHJUZovDun0ynkyVOKak5kQaiH7c7IFF9V7UHVFB07NuQ26TKzSN</div><div class='del'>-RH+nJkOL9HIn3kk1/cpe8NPodaWG0zIFmYIp/Yv0WS25y5WUFc172EsqqKsbVlWQyVUW6UcN</div><div class='del'>-utWvzVow9Kf9wHW6HUz7XWrOOmUFaxbp+xXs1KNfrzm5ptl00puYSLkbJZkhO1OH3khFa1CQ</div><div class='del'>-+7mqGh5LR8AD6QUVg+5Ly3qmbbW2ZF8ajaLnwXTnpnctu/lOz5RlKp5I3KiinWDP2w+k7XH7</div><div class='del'>-hVuk8v9008DSz9/VTBeG7XHMaWuVvOJDvv7fiA/GHZ5dKvODMeuX+jQdlduoucS7yMVQjUGb</div><div class='del'>-9Nndmd6jca2C57R0oyWXG/BEuoDIR2PMKe/3E1MdehWHrXIgUYmP+piGJxV1a8hRUnJUOebP</div><div class='del'>-NONg3OGfakoaXjVo2KQ5+42ncVvjEl9wIH6VFhKt6zeIsSipqWtoKMmFCfk5dVg6luM2bXWc</div><div class='del'>-1nad1z3jEkV9aq5X84bvJRiOgi/7sYaKYYOaHcssYCg2K7rchMfTslk6nwqu6EjTVHeVQ3Iz</div><div class='del'>-qnbJ9PhuVIM65v1bjrbjTtoUo3F9bIrRGI1eL9tgzuPL9ymsxGkwbVbJvBnjpqxSs9srqr7h</div><div class='del'>-kaiZt9cN+mVaeqwXCtrKCgoKOG7ewlPgnC0w57gTCrq916SPGNbvpBYm3ZnqVtim5E2rNbVM</div><div class='del'>-OuI1fTIVmV69Mpma9RYedcvEj2DAgKvcqmmvY15X1LJBr4qW1XF/+rtTblRTM2HWIbMY0WMd</div><div class='del'>-Mpmyklnz+s4Vf05TpumgH9ons1q3XiUzNmq6wjAeSU3vcY33qaWJdDS96g1Vl0lKGuoyawyp</div><div class='del'>-ndstcE+0PG29XKYkVzavoeFqdUWNjicH4maFZW+DQnxJBbm6NTJ853wmOm2dAb1aHQtnfpPg</div><div class='del'>-c/Fn7c4oZjr9KO5eMgrt9Jjz4yzxVbowo6ok87wTCbZGzZyBzgnytOOCBu859m/4sGOK6ktL</div><div class='del'>-4qZ49byboHEBU2kZ5c5YKfMX42oX/849L/4D4jD0vGNZ6YMAAAAASUVORK5CYII=</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('jpeg', 'color', &lt;&lt;'ENDofIMG')</div><div class='del'>-/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof</div><div class='del'>-Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwh</div><div class='del'>-MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAAR</div><div class='del'>-CAAmADkDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA</div><div class='del'>-AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK</div><div class='del'>-FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG</div><div class='del'>-h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl</div><div class='del'>-5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA</div><div class='del'>-AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk</div><div class='del'>-NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE</div><div class='del'>-hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk</div><div class='del'>-5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzLyJSuV5FIsUm4DAzW1Ywpb3sbPhoQ4LA</div><div class='del'>-jPGea6jWdH0W6EdxYLJA78gICUb169KIq8JTutDWnSnUmqcFds4y2e5jkzGrOVGTt7Ct2aae</div><div class='del'>-ZFzGSR6cmni1t4RiFWCseRknJHf+f51MsZG4JHwP4hXmVaqctEfVYDLqsKbTla+43S7NZLkr</div><div class='del'>-dHamMEgg9R6isDVtDu7KdjFGZoOodOcD3rowWIVRkbDuUHI3DFbWnOs1n9pIIMZwwIzyBxwe</div><div class='del'>-v/16ujWs9iK+VQqfFN3W3Yo6Pp/n6LbXFx9rWeCNifLbjac9T6YxXN+a/wDzy/SvedC13S5/</div><div class='del'>-DtnZ3ckZmMQSVVTK8cYJ6HI96tfZvC3/AD42/wD35NdfM5dT5Pdtp3PBtEji1CVTtyR1U9vc</div><div class='del'>-11WpXOnRW9rYwWxB6O+/n2OOgrm40EZyg2n2rTm8M6xp+lrrk1q76bIu4hcMwB74zkD3/TFV</div><div class='del'>-KcXRcFHXudWGm6deM+axUmCQytGjrIi8Kyg81NFKrxqogVsMWk5OH78j8/YfnQ1hKlrbXU8F</div><div class='del'>-xCk43ws67d4/L3H5j1rLurqVLhhno2RXlKErn2f1qEIKV7xL77QN21VxwMdqdLdvBpbpDveS</div><div class='del'>-5cJGiHBzyMj8/wBB61i3OoySJjhR3C0+71FYYfIjncSgbSUOMj0J/mBW1OlJSuzz8fmsY0nG</div><div class='del'>-kvQ6qO4ubaLyt8fnR/Idh3AEdfyNQeVrH/QQuf8Avv8A+tWd4fu0j0dePnEjIM+vU/zqz/aq</div><div class='del'>-f8/J/wC/h/xotNSaifEO6bsVo1yy8DmvetkF3HbaW0INuYFMiYwpXA4wKKK7Y7HWtzSvNPs7</div><div class='del'>-ywezurdJLYrjyyOgx29D6EcivGviF4EtfDlnFqVpeSvFLMsPkSKCVJVjncO3y9MfjRRRUirX</div><div class='del'>-NKdWcfdi9DhbW3YRS3a7cW+GOepycDA+vWsaS3AcqScjvRRUU9zOcnLVlqx8+Elll43qoH1r</div><div class='del'>-K2L70UVaerMluf/Z</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('jpeg', 'grayscale', &lt;&lt;'ENDofIMG')</div><div class='del'>-/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof</div><div class='del'>-Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAmADkBAREA/8QAHwAA</div><div class='del'>-AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR</div><div class='del'>-BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RF</div><div class='del'>-RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip</div><div class='del'>-qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEB</div><div class='del'>-AAA/APMvIlK5XkUixSbgMDNX7Z7mOTMas5UZO3sK3Zpp5kXMZJHpyan0uzWS5K3R2pjBIIPU</div><div class='del'>-eorA1bQ7uynYxRmaDqHTnA966/R9P8/Rba4uPtazwRsT5bcbTnqfTGK5vzX/AOeX6VFYwpb3</div><div class='del'>-sbPhoQ4LAjPGea6jWdH0W6EdxYLJA78gICUb169KzBa28IxCrBWPIyTkjv8Az/OpljI3BI+B</div><div class='del'>-/EKcCxCqMjYdyg5G4Yra051ms/tJBBjOGBGeQOOD1/8Ar16PoWu6XP4ds7O7kjMxiCSqqZXj</div><div class='del'>-jBPQ5HvVr7N4W/58bf8A78mvBtEji1CVTtyR1U9vc11WpXOnRW9rYwWxB6O+/n2OOgrDmCQy</div><div class='del'>-tGjrIi8Kyg81NFKrxqogVsMWk5OH78j8/YfnUT7QN21VxwMdqdLdvBpbpDveS5cJGiHBzyMj</div><div class='del'>-8/0HrWnHcXNtF5W+Pzo/kOw7gCOv5GoPK1j/AKCFz/33/wDWrIjQRnKDafatObwzrGn6WuuT</div><div class='del'>-Wrvpsi7iFwzAHvjOQPf9MVE1hKlrbXU8FxCk43ws67d4/L3H5j1rLurqVLhhno2RVa51GSRM</div><div class='del'>-cKO4Wn3eorDD5Ec7iUDaShxkehP8wK0vD92kejrx84kZBn16n+dWf7VT/n5P/fw/41WjXLLw</div><div class='del'>-Oa962QXcdtpbQg25gUyJjClcDjArSvNPs7ywezurdJLYrjyyOgx29D6EcivGviF4EtfDlnFq</div><div class='del'>-VpeSvFLMsPkSKCVJVjncO3y9MfjXC2tuwilu124t8Mc9Tk4GB9etY0luA5Uk5HerVj58JLLL</div><div class='del'>-xvVQPrWVsX3r/9k=</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('jpeg', 'progressive color', &lt;&lt;'ENDofIMG')</div><div class='del'>-/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof</div><div class='del'>-Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwh</div><div class='del'>-MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wgAR</div><div class='del'>-CAAmADkDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAQDBQYBAv/EABkBAAIDAQAA</div><div class='del'>-AAAAAAAAAAAAAAECAAMFBP/aAAwDAQACEAMQAAABzA7aRqV/vvl1eIWLrCCt3stuTgrWtaNs</div><div class='del'>-PsV5dljqXX57XwtLMSLehdazjQjUSQBZVQK//8QAHhAAAgIDAQEBAQAAAAAAAAAAAQIAAwQR</div><div class='del'>-EiEQBRP/2gAIAQEAAQUC0ZoxegSSZUm2toZDTXuncQcvdTS05UTXyv1KL6jj84spAsNjVhT4</div><div class='del'>-QfIW1UGZRq6DyHGurq4PLMemsJjWaGO2qf6wTxg9aOn6GCuOir4VibHz/8QAHxEAAgEEAgMA</div><div class='del'>-AAAAAAAAAAAAAQIAAwQQERIxEyFB/9oACAEDAQE/AVUseIlC3YL3HtQ3ZxTPFwdzygDfyV7o</div><div class='del'>-BdLlWI9CE7x//8QAGxEAAwEBAAMAAAAAAAAAAAAAAAECESEQEjH/2gAIAQIBAT8BXxsqukWb</div><div class='del'>-o2vTMMZMvTu8EUifH//EACgQAAEDAwIDCQAAAAAAAAAAAAIAAREQITESUQMiMhMjM0FScYGR</div><div class='del'>-of/aAAgBAQAGPwKllhcys0shItUs3ksJtkxBLKyxTVsgAnaYuugfqggwqMrHvS2SwotLLxCp</div><div class='del'>-27j3boSdiacVhnuvldX7QeFHLF1oIZHZNxBN4d4h05emmaf/xAAgEAEAAwACAgIDAAAAAAAA</div><div class='del'>-AAABABEhMUFRcWGBEJHx/9oACAEBAAE/IcshZFgLXiHkBRkjX2ZMMXcupaDQ7fZRlXxwzq2m</div><div class='del'>-HKvtNw8afMR+4nAyQDPwUhn1PcOblWCA4SAgq7fyjXNBFYupQJoHCzZ/Qg6ZDC0rzWJF3bSr</div><div class='del'>-hl7gHj1CvvTIIebEpAaSnHFp1UQioh8wNbjHv6jUa7TSpzzsEon/2gAMAwEAAgADAAAAEIb7</div><div class='del'>-MuvRaP43Yv/EABoRAQADAQEBAAAAAAAAAAAAAAEAETEhUXH/2gAIAQMBAT8QGjax8NL2bzZn</div><div class='del'>-k1Ubj8VKe1w5H5Gxahs6xyN0w2f/xAAaEQEBAQEBAQEAAAAAAAAAAAABABEhMUFR/9oACAEC</div><div class='del'>-AQE/EBu05G8Fg+WvqUj1+xtC02FE8QZt6h63/8QAJBABAAICAgIBBAMAAAAAAAAAAQARITFB</div><div class='del'>-UWGRcaGx0fCB4fH/2gAIAQEAAT8QvtkSkKLl8RFvQllJTrLEKYaUR2dkTm2mejzMlLHRa9vV</div><div class='del'>-VP3kopAoS8XmEZJwK929QBQEyWtpz9/cQpiOEFAWXobKVLxEVQS8hjDv+46IjecMUumzzP8A</div><div class='del'>-cRqyTa48sXGOt/w1ogxTIDmGiosjXPJ78HuVGgwVxK9tt03ks9/Q7nZ8b0E36Z+z/EFWbeJY</div><div class='del'>-AwKAPNXYefpUHWepPryezuBl6sSs4HJFYsll1Z0v3CYYxDfe37zz/b8yzAZldCmppUMURDFp</div><div class='del'>-Y0Vx09JklKrxFSl046V/MBjlFe22ij53AGls5lpwah8z5p//2Q==</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('jpeg', 'progressive grayscale', &lt;&lt;'ENDofIMG')</div><div class='del'>-/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof</div><div class='del'>-Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wgALCAAmADkBAREA/8QAGgAA</div><div class='del'>-AgMBAQAAAAAAAAAAAAAAAgQDBQYBAP/aAAgBAQAAAAHMenfNC3rRtFT67pJcFaomPWQTaBWP</div><div class='del'>-rMsW9ZxtElKr/8QAHhAAAgIDAQEBAQAAAAAAAAAAAQIAAwQREiEQBRP/2gAIAQEAAQUC0Zox</div><div class='del'>-egSSZUm2toZDTXuncQcvdTS05UTXyv1KL6jj84spAsNjVhT4QfIW1UGZRq6DyHGurq4PLMem</div><div class='del'>-sJjWaGO2qf6wTxg9aOn6GCuOir4VibHz/8QAKBAAAQMDAgMJAAAAAAAAAAAAAgABERAhMRJR</div><div class='del'>-AyIyEyMzQVJxgZGh/9oACAEBAAY/AqWWFzKzSyEi1SzeSwm2TEEsrLFNWyACdpi66B+qCDCo</div><div class='del'>-yse9LZLCi0svEKnbuPduhJ2JpxWGe6+V1ftB4UcsXWghkdk3EE3h3iHTl6aZp//EACAQAQAD</div><div class='del'>-AAICAgMAAAAAAAAAAAEAESExQVFxYYEQkfH/2gAIAQEAAT8hyyFkWAteIeQFGSNfZkwxdy6l</div><div class='del'>-oNDt9lGVfHDOraYcq+03Dxp8xH7icDJAM/BSGfU9w5uVYIDhICCrt/KNc0EVi6lAmgcLNn9C</div><div class='del'>-DpkMLSvNYkXdtKuGXuAePUK+9Mgh5sSkBpKccWnVRCKiHzA1uMe/qNRrtNKnPOwSif/aAAgB</div><div class='del'>-AQAAABCrPPK25v/EACQQAQACAgICAQQDAAAAAAAAAAEAESExQVFhkXGhsdHwgeHx/9oACAEB</div><div class='del'>-AAE/EL7ZEpCi5fERb0JZSU6yxCmGlEdnZE5tpno8zJSx0Wvb1VT95KKQKEvF5hGScCvdvUAU</div><div class='del'>-BMlrac/f3EKYjhBQFl6GylS8RFUEvIYw7/uOiI3nDFLps8z/AHEask2uPLFxjrf8NaIMUyA5</div><div class='del'>-hoqLI1zye/B7lRoMFcSvbbdN5LPf0O52fG9BN+mfs/xBVm3iWAMCgDzV2Hn6VB1nqT68ns7g</div><div class='del'>-ZerErOByRWLJZdWdL9wmGMQ33t+88/2/MswGZXQpqaVDFEQxaWNFcdPSZJSq8RUpdOOlfzAY</div><div class='del'>-5RXttoo+dwBpbOZacGofM+af/9k=</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('tiff', 'uncompressed', &lt;&lt;'ENDofIMG')</div><div class='del'>-TU0AKgAAHggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAADb///bttu2tv+Sttu2ttvb2/8AJEkAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////b//+229u2</div><div class='del'>-29vb2/+2ttttttu2ttu22//b//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAJAC229skbZLb//+2tv8AJEkkbZJtkrbb///b//9tktvb//8A</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSttu2</div><div class='del'>-29u2ttvb2/8AAAC229skbZIAACSSttu229uSttsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAJCQAJCSSttsAAACS</div><div class='del'>-ttvb//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAASUkAAABJbZIAACQkAACStrYASQDb2/8AAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////29v//9v/29v///8AAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AABtJACSbSS2bUnbkm22km3btm22kkn/25L//9ttJAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSSSSSSSTbkm2SSSSSSSSSJACSSSS2</div><div class='del'>-bUm2bUm2bUn/27b//9v/////////////27b/tm3btm3//9v/27b//////////////9skAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAkAABJAAAAAACSSSRJAABtJABtJACSbSSSSSTbtm22km3btm3btm3btm22km3/</div><div class='del'>-km22bUn/25L/27b/25Lbtm3btpLbkm3/27bbtpLbtm22km3/25L/27b//7b/27b//////9v/</div><div class='del'>-/////9v/////tpL/km1tJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtAABJAABJAABJAACSJCRJ</div><div class='del'>-AABtJABtAACSSSRtJACSbSSSSSTbkm222222km22bUm2kknbtpLb25K2km22kknbtpLbtm3b</div><div class='del'>-tpLbtm22km3btpK2km3btpLb25L//9v/25L/25Lb29v//7b/27b//7b/27b/25Lb29v/27bb</div><div class='del'>-tpL//9v//////7b///////////////+2bUkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div><div class='del'>-AAAAAAAAAAAAAAAAAABJAABJAABJAABJAABJJACSSSSSJABtSQCSSSSSSSSSSSSSJCSSSSS2</div><div class='del'>-bUmSSSSSJABtJABtAACSSSS2kkm2bUnbkkm2kkn/25K2kknbtm22km3bkm22km3/tm3btm3b</div><div class='del'>-tm3btpLbkm22km22kkm2kknbtm3bkpL/25L/27b//7b/27b//7b/////tm3btpL/27b/tm3b</div><div class='del'>-tpLbtm3//7b/25L//9v/////////////////////2/8AAAAAAAAAAAAAAACSSSQkAABtJABJ</div><div class='del'>-AABtJABJAABJAABJAACSSSRtSQBtJABtSSS2kkmSJCSSJCSSSSSSSSSSSSSSSSSSSSSSSSRt</div><div class='del'>-JACSSSSSSSS2bUm2km3//9u2bUm2bUm2bUm2SSS2bUm2bUm2km2SSSSSSSTbtm3btpL/25K2</div><div class='del'>-km3btkm2km3btm22km3bkm3btpL/25K2tm3bkm22km3btm22bUm2bUm2bUm2kkm2bUnbtm22</div><div class='del'>-tm3bkm3b25L//9v///////////8ADgEAAAMAAAABAEAAAAEBAAMAAAABACgAAAECAAMAAAAD</div><div class='del'>-AAAetgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAESAAMAAAABAAEAAAEV</div><div class='del'>-AAMAAAABAAMAAAEWAAMAAAABACgAAAEXAAQAAAABAAAeAAEaAAUAAAABAAAevAEbAAUAAAAB</div><div class='del'>-AAAexAEcAAMAAAABAAEAAAEoAAMAAAABAAIAAAAAAAAACAAIAAgSwAAAAAQAABLAAAAABAAA</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('tiff', 'packbits compressed', &lt;&lt;'ENDofIMG')</div><div class='del'>-TU0AKgAABAqBAMEAgQDBAIEAwQCBAMEAgQDBAIEAwQCBAMEAgQDBAIEAwQCBAMEAgQDBAIEA</div><div class='del'>-wQCBAMEAgQDBAIEAwQCbAAvb///bttu2tv+Sttv/tv7bA/8AJEm8AKEA/v8G2///ttvbtv3b</div><div class='del'>-Df+2ttttttu2ttu22//b//+/AKMACCQAttvbJG2S2////7YR/wAkSSRtkm2Sttv//9v//22S</div><div class='del'>-/9v//8IAoQADkrbbtv/b/7b+2wD//gARttvbJG2SAAAkkrbbttvbkrbbwgCcAAAk9wD/JAUA</div><div class='del'>-JCSSttv+AAGStv/b///CAJcA/0n+AAJJbZL/AP8k/wAIkra2AEkA29v/wgCBAMEAgQDBAIEA</div><div class='del'>-wQCBAMEAgQDBAIEAwQCBAMEAgQDBAIEAwQCBAMEAgQDBAIEAwQD9///b//8B2///2/7/gQDQ</div><div class='del'>-AB5tJACSbSS2bUnbkm22km3btm22kkn/25L//9ttJAAkgQDgACOSSSSSSSTbkm2SSSSSSSSS</div><div class='del'>-JACSSSS2bUm2bUm2bUn/27b//9v3/w3btv+2bdu2bf//2//btvb/AdskigADJAAASfwAU5JJ</div><div class='del'>-JEkAAG0kAG0kAJJtJJJJJNu2bbaSbdu2bdu2bdu2bbaSbf+SbbZtSf/bkv/btv/bktu2bdu2</div><div class='del'>-ktuSbf/bttu2ktu2bbaSbf/bkv/btv//tv/btvz/ANv8/wDb/f8GtpL/km1tJLUAYm0AAEkA</div><div class='del'>-AEkAAEkAAJIkJEkAAG0kAG0AAJJJJG0kAJJtJJJJJNuSbbbbbbaSbbZtSbaSSdu2ktvbkraS</div><div class='del'>-bbaSSdu2ktu2bdu2ktu2bbaSbdu2kraSbdu2ktvbkv//2//bkv/bkv7b//8Mtv/btv//tv/b</div><div class='del'>-tv/bkv7bCP/bttu2kv//2/z/ALb1/wK2bUnXAH9JAABJAABJAABJAABJJACSSSSSJABtSQCS</div><div class='del'>-SSSSSSSSSSSSJCSSSSS2bUmSSSSSJABtJABtAACSSSS2kkm2bUnbkkm2kkn/25K2kknbtm22</div><div class='del'>-km3bkm22km3/tm3btm3btm3btpLbkm22km22kkm2kknbtm3bkpL/25L/27b//7b/2wO2//+2</div><div class='del'>-/f8Ztm3btpL/27b/tm3btpLbtm3//7b/25L//9vx/wHb//UAAZJJ/yT/AH9tJABJAABtJABJ</div><div class='del'>-AABJAABJAACSSSRtSQBtJABtSSS2kkmSJCSSJCSSSSSSSSSSSSSSSSSSSSSSSSRtJACSSSSS</div><div class='del'>-SSS2bUm2km3//9u2bUm2bUm2bUm2SSS2bUm2bUm2km2SSSSSSSTbtm3btpL/25K2km3btkm2</div><div class='del'>-km3btm22km3bkjBt27aS/9uStrZt25JttpJt27Zttm1Jtm1Jtm1JtpJJtm1J27ZttrZt25Jt</div><div class='del'>-29uS///b+P8ADgEAAAMAAAABAEAAAAEBAAMAAAABACgAAAECAAMAAAADAAAEuAEDAAMAAAAB</div><div class='del'>-gAUAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEW</div><div class='del'>-AAMAAAABACgAAAEXAAQAAAABAAAEAgEaAAUAAAABAAAEvgEbAAUAAAABAAAExgEcAAMAAAAB</div><div class='del'>-AAEAAAEoAAMAAAABAAIAAAAAAAAACAAIAAgSwAAAAAQAABLAAAAABAAA</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-if false</div><div class='del'>-demo.show_image('tiff', 'pixarlog compressed', &lt;&lt;'ENDofIMG')</div><div class='del'>-TU0AKgAAA3Z4nO2aIWzbUBCGz7HjYyVTNDAp0CgKDRorCauiSGFjRmWRxs0rlQ2FlUWKrLKQ</div><div class='del'>-sIDK1BoyjFRUjZSF7f13eYnjpZOmdeuU3Wc1se+dn17uf/ee5SuRYRiGYRiGYRiGYRiGYRiG</div><div class='del'>-YRg/YxVt3EG04IpLJkqocJ8VD6S1746ELsOP8UNMxO1J9MbDPQs2EvOKcV66uOsZoo34lwxb</div><div class='del'>-JraMfEsif+S06Lrj74/5XNi2iG6jdbCKruMRz3gdfKUbF/OFi/c0vHbzfNvqBDl1giENKHdt</div><div class='del'>-492dI/7sdIElMRV+i0l0G62igcx3ZMBhnUFc0ebV4fZzeBfDfx2ofyGr1DycOt+3/RXnALIB</div><div class='del'>-63rTqnYo9SVYBxptVS11+WDz//WZh/MQ8Z5E8/AiwjdmPnTg9qfg1sV+Hn7gabiK3gWbSDPl</div><div class='del'>-rcdsGIZhGIZhGIZhGIZhnCebXc1IKxeJ2LSGkbija+8G/zAXEd4LDqkTbFuo091T312l8iYd</div><div class='del'>-79JhK7ngGY+dNSfoklKP38eX4VOMt73NN77Gr4B3tP4NOeLbCWY84qfYt18x4ntPUCd133XG</div><div class='del'>-zv+RSOp5RD57DlRSiSo5Y59RY1HQV2fH1KRyunbDy/D/0VRjr3HVirQqMuJJxO2UvDY+R4hm</div><div class='del'>-DKUe3RXywudIHbVrdBe8lNzJJfK08y2kQr5k7RfXS0ZeZaJNIfYl+35S8dF7j1fI8dHV8fmC</div><div class='del'>-P7P23OO7+Dl8/idVvZCYz7hpz6VyNHKz/6ACxj8kqLNk5MWxIrkoktKhP0Re49uX+qtWxUtn</div><div class='del'>-1cjP2Nvhi8/h7vyg7FDUXLKe+7o6tEKs/bgrGUEiFfdTeqji6qN1evSaiLYH34X4/piVaOnx</div><div class='del'>-Qzx1Gr72f03MX9xdEdlcVh5dhZaMLBkS1XJCuZJxo1XXKOwWsOld6nPQbiC9asT70l+5+93Q</div><div class='del'>-cMFY//rSk1eBaj7IgaoxW3wGlXu710X7QetwpxnRqTxSEHlEupJZk+x3v2xnIRk1VMvk3oJp</div><div class='del'>-32tz7a2Du7svVNl0tUFdmtt+NiNWOuf1vE6+m/8aUR/5bSuTqBYu06/2UTjeLU7h8+h+r6nf</div><div class='del'>-ZfAMMKYbUaTH3+Lj+1Tf+n4E/6K2c+kKqS26Py0k7xDTmcz+tPZ04VUmyTLvX4p/wdR4Gsm4</div><div class='del'>-uV54beCT1Z5edCVNpc/TSn0HoOsh4gAOAQAAAwAAAAEAQAAAAQEAAwAAAAEAKAAAAQIAAwAA</div><div class='del'>-AAMAAAQkAQMAAwAAAAGAjQAAAQYAAwAAAAEAAgAAAREABAAAAAEAAAAIARIAAwAAAAEAAQAA</div><div class='del'>-ARUAAwAAAAEAAwAAARYAAwAAAAEAKAAAARcABAAAAAEAAANuARoABQAAAAEAAAQqARsABQAA</div><div class='del'>-AAEAAAQyARwAAwAAAAEAAQAAASgAAwAAAAEAAgAAAAAAAAAIAAgACBLAAAAABAAAEsAAAAAE</div><div class='del'>-AAA=</div><div class='del'>-ENDofIMG</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if false</div><div class='del'>-demo.show_image('tiff', 'logluv compressed', &lt;&lt;'ENDofIMG')</div><div class='del'>-TU0AKgAAAAgADgEAAAMAAAABAEAAAAEBAAMAAAABACgAAAECAAMAAAADAAAAtgEDAAMAAAAB</div><div class='del'>-h3QAAAEGAAMAAAABAAIAAAERAAQAAAABAAAAAAESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEW</div><div class='del'>-AAMAAAABACgAAAEXAAQAAAABAAAAAAEaAAUAAAABAAAAvAEbAAUAAAABAAAAxAEcAAMAAAAB</div><div class='del'>-AAEAAAEoAAMAAAABAAIAAAAAAAAAEAAQABASwAAAAAQAABLAAAAABAAA</div><div class='del'>-ENDofIMG</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-demo.show_image('tiff', 'jpeg compressed', &lt;&lt;'ENDofIMG')</div><div class='del'>-TU0AKgAABID/2P/AABEIACgAQAMAEQABEQACEQD/2gAMAwAAAQACAAA/APn+vn+vn+iiiiii</div><div class='del'>-iiiiiiiiiiiiiiiiiiiiiiiiiiitK28O63e28VxaaNqE8ExIilitXZXIODtIGDyCOPStO18O</div><div class='del'>-a5e28VxaaNqNxBLny5IrV3V8Eg4IGDyCPqDWtZ+FvEOo2kd3Y6Dql1bS/wCrmgs5HR+SOCBg</div><div class='del'>-8gj6g1m1mkEEgggjqDWUysjFWUqwOCCMEGikpKKKKKKKKKKKKKKUHBB449RRXdXHxU16+nt5</div><div class='del'>-Ll1j8li5MDOTIxdWJYOzKSMMF3KwG4jHTHo83xl8QXs8U92Y1aJWASAMAxZkO472ZSQA4G5W</div><div class='del'>-A3YwRjb6mfjj4guZ4pblYYhEr/u7VWHmMzIcszuwyAHC5Vgu7G054x/GPiGDxNqtvqEcLRz/</div><div class='del'>-AGcR3LFAvmSB3wwwTxsKcEnbjaCQorA8e+J7bxbrdvqcEDRzfZViunaNU82QM3zgAnjaUGCT</div><div class='del'>-jG0HAFcx8QfFlt4z1221aK18i4+yrFdt5ap50iu+HwCTymzgkkY25IUE87XLVydFFFFFFFFF</div><div class='del'>-FFFFFFFFFFFFFFFFFFe2vceH9WtktdR8KaRGsEu53hjW2Z8ZH3o1jP8AeG32B6/d7l/E9hqU</div><div class='del'>-ENvqHhjSkWKUNKUt47Z2IJHDRiM+oK5xx7Db0t34mjvrWK3u9F0vEcoeUxWkdvI2MjAaJUOO</div><div class='del'>-eV6d/TFlfhp4BvnlmZtYtCHG6G3uUKJk9F3Izce7ZP542IfDXgG5trm4uv7YtJlOfJhnURAs</div><div class='del'>-TiNMxuxwM43NkgZ61p2lh4Lube5muodVhmDMdlvdII0JJwqgxuxA46tkj8cT23wi+HtwIsat</div><div class='del'>-raF/veZcQx4PoN0QJ+vA4zV+x8C/Dm6it92rauJJOH33McIVs8gb4cnjvwDjOfS5p+geAZoo</div><div class='del'>-BcXuqmWRQGYXEcKo2eRhoiTgc54HB554zofgFayMfM8XeSp+ZC2nggr0/wCeo7+38jitB8H9</div><div class='del'>-OLAXfi9bVXXfG72PyuucZB8z1BH4fXEUHw70/wDdte+IzaxyLvjZrLO5ckZA3jnIx6Z79cNm</div><div class='del'>-+AEUkFwNO8YQXF3EuRFLYtGh/wB5w7bRjnODS3HwYtJYpF0fxfbXlzHgvHNZvEqg9CWVnwMc</div><div class='del'>-5x0/HEt18NNPc+VpPimG7uVAaRJ7NokQHHJZWf37c44zms4fs++JyCf7Y8P/AC5zi5lOB68R</div><div class='del'>-9ODVdfgZr7KP+J54fDEkbBcysw9yBGePft3qOH4S6lLGr/2/oCgnH/HxK2PQnbGeD69B3xkZ</div><div class='del'>-w7z4N+MrW8lgjs7O5RGwJor+FUf3AdlbGeOQOlYM/wAL/E0V08McdhOik7ZV1CGNZAP4gJGV</div><div class='del'>-sfUDofSsV/Aeti9kt4jYShSdsxvookcDuPNZTjnuAfbg1n6h8MPGumiMy+HbybzM4+x7brGM</div><div class='del'>-Z3eUW29e+M846GoL34aeMrHZu8P3dxuyM2O26C4x97yi23qOuM0tz8PPFlvs2aLNeb8/8g90</div><div class='del'>-vNuMfe8ktt68ZxnnHQ1//9kAAA8BAAADAAAAAQBAAAABAQADAAAAAQAoAAABAgADAAAAAwAA</div><div class='del'>-BToBAwADAAAAAQAHAAABBgADAAAAAQACAAABEQAEAAAAAQAAAAgBEgADAAAAAQABAAABFQAD</div><div class='del'>-AAAAAQADAAABFgADAAAAAQAoAAABFwAEAAAAAQAABHcBGgAFAAAAAQAABUABGwAFAAAAAQAA</div><div class='del'>-BUgBHAADAAAAAQABAAABKAADAAAAAQACAAABWwAHAAABIQAABVAAAAAAAAgACAAIEsAAAAAE</div><div class='del'>-AAASwAAAAAQAAP/Y/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQu</div><div class='del'>-JyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQF</div><div class='del'>-BgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0Kx</div><div class='del'>-wRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlq</div><div class='del'>-c3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT</div><div class='del'>-1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9k=</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-demo.show_image('tiff', 'deflate compressed', &lt;&lt;'ENDofIMG')</div><div class='del'>-TU0AKgAAAah4nO2Y643EMAiEXQzNUIyboRiaoRh2ADuP+7N70knZkxhZlmNH2fkMRPGO0Wq1</div><div class='del'>-Wq1Wq9Vqtb5L5m5qqi7Rm5kP4qdNfSSHc3dYDtfmMD8TQS3mn3b3TjRgm6YEgsaeYzwRg4TC</div><div class='del'>-9PcjRMLYzpmxcABW8+ifNviJ6DIktLKN/vv3/xRHwXJuPoV5HTwqKK1Wq9VqtVqtz+VxwMjv</div><div class='del'>-8ej/39fUpCGTdLLJVJmm6NlNQIQlev+AhyVMaDBfA6GYAU41nFrzqLSFSw3GjJf6ZeEpUvwu</div><div class='del'>-bxDOcFREAkpXRKph7IjRzOjAvEnOC9jzcC7rnlp13YB29ip4wvxT1Jn+qwlthMQ5QWDbwlsE</div><div class='del'>-RTis4uQX+cZl+zCPQfWWGZgsEkfHhaML3KyQN901lIjwL/6a4GvL5EEK4QErneKSKqPW0qaD</div><div class='del'>-+awarnpJlkTIOnI9Aic1o1LsuEHuMdIyHTgrPyVTVKsM/YfuRzY4odxz3v2KBfaf021aDQqi</div><div class='del'>-E2q3SYs0QxN1cdSOHnW0i8uWyYoR79dFIK95nedr5HhObRRmctXuUC9uNR31AAAOAQAAAwAA</div><div class='del'>-AAEAQAAAAQEAAwAAAAEAKAAAAQIAAwAAAAMAAAJWAQMAAwAAAAGAsgAAAQYAAwAAAAEAAgAA</div><div class='del'>-AREABAAAAAEAAAAIARIAAwAAAAEAAQAAARUAAwAAAAEAAwAAARYAAwAAAAEAKAAAARcABAAA</div><div class='del'>-AAEAAAGfARoABQAAAAEAAAJcARsABQAAAAEAAAJkARwAAwAAAAEAAQAAASgAAwAAAAEAAgAA</div><div class='del'>-AAAAAAAIAAgACBLAAAAABAAAEsAAAAAEAAA=</div><div class='del'>-ENDofIMG</div><div class='del'>-</div><div class='del'>-if Tk::PLATFORM['platform'] != 'windows'</div><div class='del'>-demo.show_image('other', 'postscript', &lt;&lt;'ENDofIMG')</div><div class='del'>-%!PS-Adobe-3</div><div class='del'>-%%Title: postscript.ps</div><div class='del'>-%%BoundingBox: 66 648 146 720</div><div class='del'>-%%Pages: 1</div><div class='del'>-%%DocumentProcSets: Adobe_distill 0.96</div><div class='del'>-%%EndComments</div><div class='del'>-%%BeginProcSet: Adobe_distill 0.96</div><div class='del'>-/PROLOGUE 30 40 add dict def</div><div class='del'>- % 30 procedure entries + room for 40 cached font dictionaries</div><div class='del'>- PROLOGUE begin</div><div class='del'>- /clip { } def    % causes problems. remove if "clip" is needed</div><div class='del'>- /bdef { bind def } bind def	/ldef { load def } bdef</div><div class='del'>- /T { moveto show } bdef	/A { moveto ashow } bdef</div><div class='del'>- /W { moveto widthshow } bdef	/AW { moveto awidthshow } bdef</div><div class='del'>- /f /fill ldef			/R { { rlineto } repeat } bdef</div><div class='del'>- /r /rlineto ldef		/L { { lineto } repeat } bdef</div><div class='del'>- /m /moveto ldef		/l { moveto lineto stroke } bdef</div><div class='del'>- /x { 0 rlineto } bdef		/y { 0 exch rlineto } bdef</div><div class='del'>- /c /curveto ldef		/cp /closepath ldef</div><div class='del'>- /s /stroke ldef		/w /setlinewidth ldef</div><div class='del'>- /g /setgray ldef		/j /setlinejoin ldef</div><div class='del'>- /d /setdash ldef		/F /setfont ldef</div><div class='del'>- /C /setcmykcolor where { /setcmykcolor get }{ %ifelse</div><div class='del'>-   { %def</div><div class='del'>-     1 sub 3 { 3 index add neg dup 0 lt { pop 0 } if 3 1 roll } repeat</div><div class='del'>-     setrgbcolor</div><div class='del'>-   } bind</div><div class='del'>- } ifelse def</div><div class='del'>- /selectfont where { pop }{ %ifelse</div><div class='del'>-     /selectfont { exch findfont exch scalefont setfont } bdef</div><div class='del'>- } ifelse</div><div class='del'>- /MF { exch findfont exch makefont setfont } bdef</div><div class='del'>- /FF /selectfont ldef</div><div class='del'>- /DF { selectfont currentfont def } bdef</div><div class='del'>- /BEGINPAGE { pop /pagesave save def } bdef</div><div class='del'>- /ENDPAGE { pop pagesave restore showpage } def</div><div class='del'>- /REMAP { %def</div><div class='del'>-   FontDirectory 2 index known { pop pop pop } { %ifelse</div><div class='del'>-     findfont dup length dict begin</div><div class='del'>-       { 1 index /FID ne {def}{pop pop} ifelse } forall</div><div class='del'>-       exch dup length 0 gt { /Encoding exch def }{ pop } ifelse</div><div class='del'>-     currentdict end definefont pop</div><div class='del'>-   } ifelse</div><div class='del'>- } bdef</div><div class='del'>- /RECODE { %def</div><div class='del'>-    3 -1 roll 1 index findfont /Encoding get 256 array copy exch</div><div class='del'>-    0 exch { %forall</div><div class='del'>-     dup type/nametype eq</div><div class='del'>-       { 3 {2 index} repeat put pop 1 add }{ exch pop }ifelse</div><div class='del'>-    } forall pop 3 1 roll REMAP</div><div class='del'>- } bdef</div><div class='del'>- end %PROLOGUE</div><div class='del'>-%%EndProcSet: Adobe_distill 0.96</div><div class='del'>-%%EndProlog</div><div class='del'>-%%BeginSetup</div><div class='del'>-PROLOGUE begin</div><div class='del'>-%%EndSetup</div><div class='del'>-%%Page: 1 1</div><div class='del'>-1 BEGINPAGE</div><div class='del'>-1 g</div><div class='del'>-2 setlinecap</div><div class='del'>-144 53 m</div><div class='del'>-390 x</div><div class='del'>--19 y</div><div class='del'>--390 x</div><div class='del'>-eofill</div><div class='del'>-0 g</div><div class='del'>-1.268 w</div><div class='del'>-0 setlinecap</div><div class='del'>-4 setmiterlimit</div><div class='del'>-[] 0 d</div><div class='del'>-109.698 714.182 m</div><div class='del'>-111.525 713.672 112.472 713.234 113.624 712.431 c</div><div class='del'>--22.3128 -25.8381 r</div><div class='del'>-97.4019 682.652 103.794 672.84 100.329 664.844 c</div><div class='del'>-102.034 675.687 90.7436 683.82 84.1099 684.842 c</div><div class='del'>-25.588 29.3407 r</div><div class='del'>-f</div><div class='del'>-1.0361 w</div><div class='del'>-f</div><div class='del'>-f</div><div class='del'>-91.8805 654.468 m</div><div class='del'>-96.0255 654.285 100.155 654.188 104.481 654.188 c</div><div class='del'>-113.804 654.188 122.752 654.636 131.141 655.44 c</div><div class='del'>-134.222 655.737 136.724 658.133 137.108 661.279 c</div><div class='del'>-137.79 666.855 138.107 672.696 138.107 678.705 c</div><div class='del'>-138.107 684.714 137.79 690.555 137.108 696.131 c</div><div class='del'>-136.724 699.277 134.222 701.674 131.141 701.97 c</div><div class='del'>-127.476 702.321 123.704 702.604 119.84 702.813 c</div><div class='del'>-119.84 702.813 103.842 668.373 102.231 664.827 c</div><div class='del'>-99.8549 659.595 96.601 655.765 91.8805 654.468 c</div><div class='del'>-f</div><div class='del'>-0.7851 w</div><div class='del'>-77.8202 655.44 m</div><div class='del'>-74.7171 655.948 72.2887 657.716 71.8525 661.279 c</div><div class='del'>-71.1725 666.855 70.8549 672.696 70.8549 678.705 c</div><div class='del'>-70.8549 684.714 71.1725 690.555 71.8525 696.131 c</div><div class='del'>-72.2381 699.277 74.7417 701.674 77.8202 701.97 c</div><div class='del'>-82.1335 702.383 86.5932 702.702 91.1764 702.916 c</div><div class='del'>-8.16241 9.07727 r</div><div class='del'>-99.2863 711.98 101.266 712.345 102.996 711.921 c</div><div class='del'>--28.4564 -32.9334 r</div><div class='del'>-80.6983 681.906 98.7446 677.354 98.7446 666.708 c</div><div class='del'>-98.7446 655.332 86.3243 654.054 77.8202 655.44 c</div><div class='del'>-f</div><div class='del'>-0.0843 w</div><div class='del'>-139.67 644.154 m</div><div class='del'>-140.194 644.154 140.619 644.576 140.619 645.098 c</div><div class='del'>-140.619 645.619 140.194 646.042 139.67 646.042 c</div><div class='del'>-139.146 646.042 138.721 645.619 138.721 645.098 c</div><div class='del'>-138.721 644.576 139.146 644.154 139.67 644.154 c</div><div class='del'>-1 ENDPAGE</div><div class='del'>-%%Trailer</div><div class='del'>-end %PROLOGUE</div><div class='del'>-%%Pages: 1</div><div class='del'>-%%EOF</div><div class='del'>-ENDofIMG</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if false</div><div class='del'>-demo.show_image('other', 'pdf', &lt;&lt;'ENDofIMG')</div><div class='del'>-JVBERi0xLjIKJcfsj6IKNCAwIG9iago8PC9MZW5ndGggNSAwIFIvRmlsdGVyIC9GbGF0ZURl</div><div class='del'>-Y29kZT4+CnN0cmVhbQp4nF1TSY7cQAy7+xX1AkFbaXlG3jBAgAAzh/z/Esp2uyeDPhhUayEp</div><div class='del'>-FZMsnt/9/fg6/h6y/hzCHdS1UlyodH0dIrJJNyIWlLpE1OcLrGQOjLg6MOIm6+NoMULWiopN</div><div class='del'>-bevz6HRiaUQ0aKMHW1L7itQitGA2UvwdDuhoIaw8zSN3UOVqTnILNLAiXQVy3NNvCvQs+M57</div><div class='del'>-Zv4Gj6LivWK7UxS0dDCknBGl2jNY6MKoKmBkljwYfQUD2d8ZqjkKgINASEyEfCq208nc0Fon</div><div class='del'>-YSdZIiFy7IldQmbACe4FraKUfVYkzEAgarhgIBJyvIGi+IYrCWqm4I6UJ4mvV4PmfTW4J3TI</div><div class='del'>-tZCHQzdmDqeLY7Jgpf6IAG7KKVAsLAMBxWIEqrEvuAAc8xXp2Rtgkdhp038B7PfcCyQZ5WDV</div><div class='del'>-oXIuWGdCI387SO/GjezVgcZyuRaAP1b3gXVmopb1ZfXXkSM/z6Imx+4xpHAsseGHgD2abFzu</div><div class='del'>-2+qEzjwjl9fJN4vb6zd+ef1Ebq+fDrfZz4zH7GFhc0O32cPSJR+zXzIes0vnMPZlNk73ejWT</div><div class='del'>-gFNDYs/IOM3tkTXmGUbMsaPF9cAwq8KuyNwxFMc4gJY+d47S0Td/68nSNxkiUNpz159H8Twg</div><div class='del'>-g1LkcKyGBe6TkQYL3jhwTDwreSJ7gw9eZeBY3GZpPBU/FjY7/HX8A9+h3WJlbmRzdHJlYW0K</div><div class='del'>-ZW5kb2JqCjUgMCBvYmoKNTE2CmVuZG9iagozIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9NZWRp</div><div class='del'>-YUJveCBbMCAwIDYxMiA3OTJdCi9QYXJlbnQgMiAwIFIKL1Jlc291cmNlcyA8PCAvUHJvY1Nl</div><div class='del'>-dCBbL1BERl0KPj4KL0NvbnRlbnRzIDQgMCBSCj4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBl</div><div class='del'>-IC9QYWdlcyAvS2lkcyBbCjMgMCBSCl0gL0NvdW50IDEKPj4KZW5kb2JqCjEgMCBvYmoKPDwg</div><div class='del'>-L1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSCj4+CmVuZG9iago2IDAgb2JqCjw8IC9DcmVh</div><div class='del'>-dGlvbkRhdGUgKEQ6MTk5NzEyMDUyMjU2MzcpCi9Qcm9kdWNlciAoQWxhZGRpbiBHaG9zdHNj</div><div class='del'>-cmlwdCA1LjEwKQo+PgplbmRvYmoKeHJlZgowIDcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAw</div><div class='del'>-MDAwNzk5IDAwMDAwIG4gCjAwMDAwMDA3NDAgMDAwMDAgbiAKMDAwMDAwMDYyMCAwMDAwMCBu</div><div class='del'>-IAowMDAwMDAwMDE1IDAwMDAwIG4gCjAwMDAwMDA2MDEgMDAwMDAgbiAKMDAwMDAwMDg0OCAw</div><div class='del'>-MDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDcgL1Jvb3QgMSAwIFIgL0luZm8gNiAwIFIKPj4K</div><div class='del'>-c3RhcnR4cmVmCjkzOQolJUVPRgo=</div><div class='del'>-ENDofIMG</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#######################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension b/ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension<br/>deleted file mode 100644<br/>index 7f515feee8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,41 +0,0 @@</div><div class='del'>-This software is copyrighted by Jan Nijtmans (the maintainer)</div><div class='del'>-and a lot of other people who contributed code (most notably</div><div class='del'>-Andreas Kupries, Thomas G. Lane, Ioi K. Lam, Mario Weilguni</div><div class='del'>-and Roger E Critchlow Jr).</div><div class='del'>-The following terms apply to all files associated with the</div><div class='del'>-software unless explicitly 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/tkextlib/tkimg/readme.txt b/ext/tk/sample/tkextlib/tkimg/readme.txt<br/>deleted file mode 100644<br/>index 4d9774492c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tkimg/readme.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tkimg/readme.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-The script 'demo.rb' is based on 'demo.tcl' of Tcl/Tk's 'Img' extention. </div><div class='del'>-Image data in 'demo.rb' is those of 'demo.tcl'.</div><div class='del'>-Please read 'license_terms_of_Img_extension' file.</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt<br/>deleted file mode 100644<br/>index dd176a7ccf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,52 +0,0 @@</div><div class='del'>-</div><div class='del'>-  #######################################################################</div><div class='del'>-  ###  The following text is the original 'license.txt' of tktable    ###</div><div class='del'>-  ###  extension.                                                     ###</div><div class='del'>-  ###  Original Tcl source files are not include in this directry,    ###</div><div class='del'>-  ###  because of all of them are rewrited to Ruby files.             ###</div><div class='del'>-  ###  However, the image data file is quoted from iwidgets source    ###</div><div class='del'>-  ###  archive.                                                       ###</div><div class='del'>-  #######################################################################</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-		   * COPYRIGHT AND LICENSE TERMS *</div><div class='del'>-</div><div class='del'>-(This file blatantly stolen from Tcl/Tk license and adapted - thus assume</div><div class='del'>-it falls under similar license terms).</div><div class='del'>-</div><div class='del'>-This software is copyrighted by Jeffrey Hobbs &lt;jeff.hobbs@acm.org&gt;.  The</div><div class='del'>-following terms apply to all files associated with the software unless</div><div class='del'>-explicitly disclaimed in individual files.</div><div class='del'>-</div><div class='del'>-The authors hereby grant permission to use, copy, modify, distribute, and</div><div class='del'>-license this software and its documentation for any purpose, provided that</div><div class='del'>-existing copyright notices are retained in all copies and that this notice</div><div class='del'>-is included verbatim in any distributions.  No written agreement, license,</div><div class='del'>-or royalty fee is required for any of the authorized uses.</div><div class='del'>-</div><div class='del'>-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR</div><div class='del'>-DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT</div><div class='del'>-OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF,</div><div class='del'>-EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 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 IS</div><div class='del'>-PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO</div><div class='del'>-OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR</div><div class='del'>-MODIFICATIONS.</div><div class='del'>-</div><div class='del'>-RESTRICTED RIGHTS: Use, duplication or disclosure by the U.S. government</div><div class='del'>-is subject to the restrictions as set forth in subparagraph (c) (1) (ii)</div><div class='del'>-of the Rights in Technical Data and Computer Software Clause as DFARS</div><div class='del'>-252.227-7013 and FAR 52.227-19.</div><div class='del'>-</div><div class='del'>-SPECIAL NOTES:</div><div class='del'>-</div><div class='del'>-This software also falls under the bourbon_ware clause:</div><div class='del'>-</div><div class='del'>-    Should you find this software useful in your daily work, you should</div><div class='del'>-    feel obliged to take the author out for a drink if the opportunity</div><div class='del'>-    presents itself.  The user may feel exempt from this clause if they</div><div class='del'>-    are under 21 or think the author has already partaken of too many</div><div class='del'>-    drinks.</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/basic.rb b/ext/tk/sample/tkextlib/tktable/basic.rb<br/>deleted file mode 100644<br/>index 0d2d48893a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/basic.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/basic.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,60 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-##</div><div class='del'>-## basic.rb</div><div class='del'>-##</div><div class='del'>-## This demo shows the basic use of the table widget</div><div class='del'>-## </div><div class='del'>-## ( based on 'basic.tcl' included source archive of tktable extension )</div><div class='del'>-##</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tktable'</div><div class='del'>-</div><div class='del'>-ary  = TkVariable.new_hash</div><div class='del'>-rows = 8</div><div class='del'>-cols = 8</div><div class='del'>-</div><div class='del'>-# fill table variable</div><div class='del'>-((-(rows))..rows).each{|x|</div><div class='del'>-  ((-(cols))..cols).each{|y|</div><div class='del'>-    ary[x,y] = "r#{x},c#{y}"</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-lbl = TkLabel.new(:text=&gt;"TkTable v1 Example")</div><div class='del'>-</div><div class='del'>-table = Tk::TkTable.new(:rows=&gt;rows, :cols=&gt;cols, :variable=&gt;ary, </div><div class='del'>-                        :width=&gt;6, :height=&gt;6, </div><div class='del'>-                        :titlerows=&gt;1, :titlecols=&gt;2, </div><div class='del'>-                        :roworigin=&gt;-1, :colorigin=&gt;-2, </div><div class='del'>-                        :rowstretchmode=&gt;:last, :colstretchmode=&gt;:last,</div><div class='del'>-                        :rowtagcommand=&gt;proc{|row|</div><div class='del'>-                          row = Integer(row)</div><div class='del'>-                          (row&gt;0 &amp;&amp; row%2 == 1)? 'OddRow': ''</div><div class='del'>-                        }, </div><div class='del'>-                        :coltagcommand=&gt;proc{|col|</div><div class='del'>-                          col = Integer(col)</div><div class='del'>-                          (col&gt;0 &amp;&amp; col%2 == 1)? 'OddCol': ''</div><div class='del'>-                        }, </div><div class='del'>-                        :selectmode=&gt;:extended, :sparsearray=&gt;false)</div><div class='del'>-</div><div class='del'>-sx = table.xscrollbar(TkScrollbar.new)</div><div class='del'>-sy = table.yscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-btn = TkButton.new(:text=&gt;'Exit', :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.grid(lbl, '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(table, sy, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(sx, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(btn, :sticky=&gt;:ew, :columnspan=&gt;2)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfig(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfig(1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-table.tag_configure('OddRow', :bg=&gt;'orange', :fg=&gt;'purple')</div><div class='del'>-table.tag_configure('OddCol', :bg=&gt;'brown', :fg=&gt;'pink')</div><div class='del'>-</div><div class='del'>-table.set_width([-2, 7], [-1, 7], [1, 5], [2, 8], [4, 14])</div><div class='del'>-</div><div class='del'>-puts "Table is #{table.path} with array #{(table['variable'])}"</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/buttons.rb b/ext/tk/sample/tkextlib/tktable/buttons.rb<br/>deleted file mode 100644<br/>index b21e8673c2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/buttons.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/buttons.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,76 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-##</div><div class='del'>-## buttons.rb</div><div class='del'>-##</div><div class='del'>-## demonstrates the simulation of a button array</div><div class='del'>-##</div><div class='del'>-## ( based on 'buttons.tcl' included source archive of tktable extension )</div><div class='del'>-##</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tktable'</div><div class='del'>-</div><div class='del'>-# create the table</div><div class='del'>-tab  = TkVariable.new_hash</div><div class='del'>-rows = 20</div><div class='del'>-cols = 20</div><div class='del'>-</div><div class='del'>-table = Tk::TkTable.new(:rows=&gt;rows + 1, :cols=&gt;cols + 1, </div><div class='del'>-                        :variable=&gt;tab, :titlerows=&gt;1, :titlecols=&gt;1, </div><div class='del'>-                        :roworigin=&gt;-1, :colorigin=&gt;-1, </div><div class='del'>-                        :colwidth=&gt;4, :width=&gt;8, :height=&gt;8, </div><div class='del'>-                        :cursor=&gt;'top_left_arrow', :borderwidth=&gt;2, </div><div class='del'>-                        :flashmode=&gt;false, :state=&gt;:disabled)</div><div class='del'>-</div><div class='del'>-sx = table.xscrollbar(TkScrollbar.new)</div><div class='del'>-sy = table.yscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-Tk.grid(table, sy, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(sx, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfig(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfig(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-# set up tags for the various states of the buttons</div><div class='del'>-table.tag_configure('OFF', :bg=&gt;'red',    :relief=&gt;:raised)</div><div class='del'>-table.tag_configure('ON',  :bg=&gt;'green',  :relief=&gt;:sunken)</div><div class='del'>-table.tag_configure('sel', :bg=&gt;'gray75', :relief=&gt;:flat)</div><div class='del'>-</div><div class='del'>-# clean up if mouse leaves the widget</div><div class='del'>-table.bind('Leave', proc{|w| w.selection_clear_all}, '%W')</div><div class='del'>-</div><div class='del'>-# highlight the cell under the mouse</div><div class='del'>-table.bind('Motion', proc{|w, x, y|</div><div class='del'>-             Tk.callback_break if w.selection_include?(TkComm._at(x,y))</div><div class='del'>-             w.selection_clear_all</div><div class='del'>-             w.selection_set(TkComm._at(x,y))</div><div class='del'>-             Tk.callback_break</div><div class='del'>-             ## "break" prevents the call to tkTableCheckBorder</div><div class='del'>-           }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-# mousebutton 1 toggles the value of the cell</div><div class='del'>-# use of "selection includes" would work here</div><div class='del'>-table.bind('1', proc{|w, x, y|</div><div class='del'>-             #rc = w.curselection[0]</div><div class='del'>-             rc = w.index(TkComm._at(x,y))</div><div class='del'>-             if tab[rc] == 'ON'</div><div class='del'>-               tab[rc] = 'OFF'</div><div class='del'>-               w.tag_cell('OFF', rc)</div><div class='del'>-             else</div><div class='del'>-               tab[rc] = 'ON'</div><div class='del'>-               w.tag_cell('ON', rc)</div><div class='del'>-             end}, '%W %x %y')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# inititialize the array, titles, and celltags</div><div class='del'>-0.step(rows){|i|</div><div class='del'>-  tab[i,-1] = i</div><div class='del'>-  0.step(cols){|j|</div><div class='del'>-    if i == 0</div><div class='del'>-      tab[-1,j] = j</div><div class='del'>-    end </div><div class='del'>-    tab[i,j] = "OFF"</div><div class='del'>-    table.tag_cell('OFF', "#{i},#{j}")</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/command.rb b/ext/tk/sample/tkextlib/tktable/command.rb<br/>deleted file mode 100644<br/>index bf36159ccc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/command.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/command.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,89 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-##</div><div class='del'>-## command.rb</div><div class='del'>-##</div><div class='del'>-## This demo shows the use of the table widget's -command options</div><div class='del'>-##</div><div class='del'>-## ( based on 'command.tcl' included source archive of tktable extension )</div><div class='del'>-##</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tktable'</div><div class='del'>-</div><div class='del'>-# create the table</div><div class='del'>-data = TkVariable.new_hash</div><div class='del'>-rows = 10</div><div class='del'>-cols = 10</div><div class='del'>-</div><div class='del'>-# fill table variable</div><div class='del'>-((-(rows))..rows).each{|x|</div><div class='del'>-  ((-(cols))..cols).each{|y|</div><div class='del'>-    data[x,y] = "#{x} x #{y}"</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-lbl = TkLabel.new(:text=&gt;"TkTable :command Example")</div><div class='del'>-cur_var = TkVariable.new</div><div class='del'>-current = TkLabel.new(:textvariable=&gt;cur_var, :width=&gt;5)</div><div class='del'>-ent_var = TkVariable.new</div><div class='del'>-entry = TkEntry.new(:textvariable=&gt;ent_var)</div><div class='del'>-</div><div class='del'>-table = Tk::TkTable.new(:rows=&gt;rows, :cols=&gt;cols, </div><div class='del'>-                        :command=&gt;[proc{|mode, cell, val|</div><div class='del'>-                          if (mode == :w)</div><div class='del'>-                            data[cell] = val</div><div class='del'>-                          else</div><div class='del'>-                            begin</div><div class='del'>-                              data[cell]  # exist</div><div class='del'>-                            rescue</div><div class='del'>-                              ''          # not exist</div><div class='del'>-                            end</div><div class='del'>-                          end</div><div class='del'>-                        }, '%i %C %s'], </div><div class='del'>-                        :width=&gt;6, :height=&gt;6, </div><div class='del'>-                        :titlerows=&gt;1, :titlecols=&gt;1, </div><div class='del'>-                        :roworigin=&gt;-1, :colorigin=&gt;-1, </div><div class='del'>-                        :rowstretchmode=&gt;:last, :colstretchmode=&gt;:last,</div><div class='del'>-                        :rowtagcommand=&gt;proc{|row|</div><div class='del'>-                          row = Integer(row)</div><div class='del'>-                          (row&gt;0 &amp;&amp; row%2 == 1)? 'OddRow': ''</div><div class='del'>-                        },</div><div class='del'>-                        :coltagcommand=&gt;proc{|col|</div><div class='del'>-                          col = Integer(col)</div><div class='del'>-                          (col&gt;0 &amp;&amp; col%2 == 1)? 'OddCol': ''</div><div class='del'>-                        }, </div><div class='del'>-                        :selectmode=&gt;:extended, :flashmode=&gt;true, </div><div class='del'>-                        :rowstretch=&gt;:unset, :colstretch=&gt;:unset,</div><div class='del'>-                        :browsecommand=&gt;[proc{|w, s|</div><div class='del'>-                          cur_var.value = s</div><div class='del'>-                          ent_var.value = w.get(s)</div><div class='del'>-                        }, '%W %S'], </div><div class='del'>-                        :validate=&gt;true, </div><div class='del'>-                        :validatecommand=&gt;proc{|e| </div><div class='del'>-                          ent_var.value = e.new_value; true</div><div class='del'>-                        })</div><div class='del'>-=begin</div><div class='del'>-                        :validatecommand=&gt;[</div><div class='del'>-                          proc{|s| </div><div class='del'>-                            ent_var.value = s; true</div><div class='del'>-                          }, '%S'])</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-sx = table.xscrollbar(TkScrollbar.new)</div><div class='del'>-sy = table.yscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-entry.bind('Return', proc{|w| table.curvalue = w.value}, '%W')</div><div class='del'>-</div><div class='del'>-Tk.grid(lbl, '-', '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(current, entry, '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(table, '-', sy, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(sx, '-', :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfig(1, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfig(2, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-table.tag_configure('OddRow', :bg=&gt;'orange', :fg=&gt;'purple')</div><div class='del'>-table.tag_configure('OddCol', :bg=&gt;'brown', :fg=&gt;'pink')</div><div class='del'>-</div><div class='del'>-puts "Table is #{table.path}"</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/debug.rb b/ext/tk/sample/tkextlib/tktable/debug.rb<br/>deleted file mode 100644<br/>index d5cd5e49ba..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/debug.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/debug.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,101 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-##</div><div class='del'>-## debug.rb</div><div class='del'>-##</div><div class='del'>-## This demo uses most features of the table widget</div><div class='del'>-##</div><div class='del'>-## ( based on 'debug.tcl' included source archive of tktable extension )</div><div class='del'>-##</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tktable'</div><div class='del'>-</div><div class='del'>-# create the table</div><div class='del'>-ary  = TkVariable.new_hash</div><div class='del'>-rows = 25</div><div class='del'>-cols = 20</div><div class='del'>-</div><div class='del'>-# fill table variable</div><div class='del'>-((-(rows))..rows).each{|x|</div><div class='del'>-  ((-(cols))..cols).each{|y|</div><div class='del'>-    ary[x,y] = "r#{x},c#{y}"</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-lbl = TkLabel.new(:text=&gt;"TkTable v2 Example")</div><div class='del'>-</div><div class='del'>-table = Tk::TkTable.new(:rows=&gt;rows, :cols=&gt;cols, :variable=&gt;ary, </div><div class='del'>-                        :width=&gt;6, :height=&gt;6, </div><div class='del'>-                        :titlerows=&gt;1, :titlecols=&gt;2, </div><div class='del'>-                        :roworigin=&gt;-5, :colorigin=&gt;-2, </div><div class='del'>-                        :coltagcommand=&gt;proc{|col|</div><div class='del'>-                          col = Integer(col)</div><div class='del'>-                          (col&gt;0 &amp;&amp; col%2 == 1)? 'OddCol': ''</div><div class='del'>-                        }, </div><div class='del'>-                        :selectmode=&gt;:extended, :flashmode=&gt;true, </div><div class='del'>-                        :rowstretch=&gt;:unset, :colstretch=&gt;:unset,</div><div class='del'>-                        :selecttitles=&gt;false, :drawmode=&gt;:single)</div><div class='del'>-</div><div class='del'>-sx = table.xscrollbar(TkScrollbar.new)</div><div class='del'>-sy = table.yscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-btn = TkButton.new(:text=&gt;'Exit', :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.grid(lbl, '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(table, sy, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(sx, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(btn, :sticky=&gt;:ew, :columnspan=&gt;2)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfig(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfig(1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-table.tag_configure('OddCol', :bg=&gt;'brown', :fg=&gt;'pink')</div><div class='del'>-table.tag_configure('title',  :bg=&gt;'red',   :fg=&gt;'green', :relief=&gt;:sunken)</div><div class='del'>-table.tag_configure('dis',    :state=&gt;:disabled)</div><div class='del'>-</div><div class='del'>-first = table[:colorigin]</div><div class='del'>-%w(n s e w nw ne sw se c).each_with_index{|anchor, idx|</div><div class='del'>-  table.tag_configure(anchor, :anchor=&gt;anchor)</div><div class='del'>-  table.tag_row(anchor, idx)</div><div class='del'>-  table.set([idx,first], anchor)</div><div class='del'>-}</div><div class='del'>-courier = TkFont.new(:family=&gt;'Courier', :size=&gt;10)</div><div class='del'>-table.tag_configure('s', :font=&gt;courier, :justify=&gt;:center)</div><div class='del'>-</div><div class='del'>-logo = TkPhotoImage.new(:file=&gt;File.join(File.dirname(File.expand_path(__FILE__)), 'tcllogo.gif'))</div><div class='del'>-table.tag_configure('logo', :image=&gt;logo, :showtext=&gt;true)</div><div class='del'>-table.tag_cell('logo', [1,2], [2,3], [4,1])</div><div class='del'>-table.tag_cell('dis', [2,1], [1,-1], [3,0])</div><div class='del'>-table.set_width([-2,8], [-1,9], [0, 12], [4, 14])</div><div class='del'>-</div><div class='del'>-table.set([1,1], "multi-line\ntext\nmight be\ninteresting", </div><div class='del'>-          [3,2], "more\nmulti-line\nplaying\n", </div><div class='del'>-          [2,2], "null\0byte")</div><div class='del'>-</div><div class='del'>-# This is in the row span</div><div class='del'>-l = TkLabel.new(table, :text=&gt;'Window s', :bg=&gt;'yellow')</div><div class='del'>-table.window_configure([6,0], :sticky=&gt;:s, :window=&gt;l)</div><div class='del'>-</div><div class='del'>-# This is in the row titles</div><div class='del'>-l = TkLabel.new(table, :text=&gt;'Window ne', :bg=&gt;'yellow')</div><div class='del'>-table.window_configure([4,-1], :sticky=&gt;:ne, :window=&gt;l)</div><div class='del'>-</div><div class='del'>-# This will get swallowed by a span</div><div class='del'>-l = TkLabel.new(table, :text=&gt;'Window ew', :bg=&gt;'yellow')</div><div class='del'>-table.window_configure([5,3], :sticky=&gt;:ew, :window=&gt;l)</div><div class='del'>-</div><div class='del'>-# This is in the col titles</div><div class='del'>-l = TkLabel.new(table, :text=&gt;'Window news', :bg=&gt;'yellow')</div><div class='del'>-table.window_configure([-5,1], :sticky=&gt;:news, :window=&gt;l)</div><div class='del'>-</div><div class='del'>-l = TkLabel.new(table.winfo_parent, :text=&gt;'Sibling l', :bg=&gt;'orange')</div><div class='del'>-table.window_configure([5,1], :sticky=&gt;:news, :window=&gt;l)</div><div class='del'>-</div><div class='del'>-if table.span_list.empty?</div><div class='del'>-  table.set_spans([-1,-2], [0,3], [1,2], [0,5], [3,2], [2,2], [6,0], [4,0])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-puts "Table is #{table.path} with array #{(table['variable'])}"</div><div class='del'>-</div><div class='del'>-# table.postscript(:file=&gt;'out.ps', :first=&gt;:origin, :last=&gt;[2,2])</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/dynarows.rb b/ext/tk/sample/tkextlib/tktable/dynarows.rb<br/>deleted file mode 100644<br/>index d083e26559..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/dynarows.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/dynarows.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,99 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-##</div><div class='del'>-## dynarows.rb</div><div class='del'>-##</div><div class='del'>-## This demos shows the use of the validation mechanism of the table</div><div class='del'>-## and uses the table's cache (no -command or -variable) with a cute</div><div class='del'>-## dynamic row routine.</div><div class='del'>-## </div><div class='del'>-## ( based on 'dynarows.tcl' included source archive of tktable extension )</div><div class='del'>-##</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tktable'</div><div class='del'>-</div><div class='del'>-def table_validate(w, idx)</div><div class='del'>-  return unless idx =~ /^(\d+),(\d+)$/</div><div class='del'>-  row = Integer($1)</div><div class='del'>-  col = Integer($2)</div><div class='del'>-  val = w.get(idx)</div><div class='del'>-</div><div class='del'>- [w, idx]</div><div class='del'>-  nrows = w[:rows]</div><div class='del'>-  return if row == nrows - 1 &amp;&amp; val == ''</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    time = Tk.tk_call('clock', 'scan', val)</div><div class='del'>-    date = []</div><div class='del'>-    Tk.tk_call('clock', 'format', time, </div><div class='del'>-               :format=&gt;'%m %d %Y').split(' ').each{|item|</div><div class='del'>-      date &lt;&lt; item.sub(/^\s*0*/,'')</div><div class='del'>-    }</div><div class='del'>-    w.set(idx, date.join('/'))</div><div class='del'>-    if row == nrows - 1</div><div class='del'>-      if w.get([row,1]) != '' &amp;&amp; w.get([row,2]) != ''</div><div class='del'>-        w.tag_row_reset(row)</div><div class='del'>-        w.set([row,0], row)</div><div class='del'>-        nrows += 1</div><div class='del'>-        row += 1</div><div class='del'>-        w.configure(:rows=&gt;nrows)</div><div class='del'>-        w.tag_row('unset', row)</div><div class='del'>-        w.set([row,0], '*')</div><div class='del'>-        w.see([row,1])</div><div class='del'>-        w.activate([row,1])</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  rescue</div><div class='del'>-    Tk.bell</div><div class='del'>-    w.activate(idx)</div><div class='del'>-    w.selection_clear_all</div><div class='del'>-    w.selection_set(:active)</div><div class='del'>-    w.see(:active)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-lbl = TkLabel.new(:text=&gt;"Dynamic Date Validated Rows")</div><div class='del'>-</div><div class='del'>-table = Tk::TkTable.new(:rows=&gt;2, :cols=&gt;3, :cache=&gt;1, :selecttype=&gt;:row, </div><div class='del'>-                        :titlerows=&gt;1, :titlecols=&gt;1, :height=&gt;5, </div><div class='del'>-                        :colstretch=&gt;:unset, :rowstretch=&gt;:unset, </div><div class='del'>-                        :autoclear=&gt;true, </div><div class='del'>-                        :browsecommand=&gt;[</div><div class='del'>-                          proc{|w,s| table_validate(w, s)}, </div><div class='del'>-                          '%W %s'</div><div class='del'>-                        ])</div><div class='del'>-table.set([0,1], 'Begin', [0,2], 'End', [1,0], '*')</div><div class='del'>-table.tag_configure('unset', :fg=&gt;'#008811')</div><div class='del'>-table.tag_configure('title', :fg=&gt;'red')</div><div class='del'>-table.tag_row('unset', 1)</div><div class='del'>-table.set_width(0,3)</div><div class='del'>-</div><div class='del'>-sx = table.xscrollbar(TkScrollbar.new)</div><div class='del'>-sy = table.yscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-Tk.grid(lbl, '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(table, sy, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(sx, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfig(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfig(1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-rtn_proc = proc{|w|</div><div class='del'>-  r = w.row_index(:active)</div><div class='del'>-  c = w.col_index(:active)</div><div class='del'>-</div><div class='del'>-  if c == 2</div><div class='del'>-    r += 1</div><div class='del'>-    w.activate([r,1])</div><div class='del'>-  else</div><div class='del'>-    c += 1</div><div class='del'>-    w.activate([r,c])</div><div class='del'>-  end</div><div class='del'>-  w.see(:active)</div><div class='del'>-  Tk.callback_break</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-table.bind('Return', rtn_proc, '%W')</div><div class='del'>-table.bind('KP_Enter', rtn_proc, '%W')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/maxsize.rb b/ext/tk/sample/tkextlib/tktable/maxsize.rb<br/>deleted file mode 100644<br/>index aff68ff377..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/maxsize.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/maxsize.rb</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'>-## maxsize.rb</div><div class='del'>-##</div><div class='del'>-## This demo uses a really big table.  The big startup time is in</div><div class='del'>-## filling the table's Tcl array var.</div><div class='del'>-## </div><div class='del'>-## ( based on 'maxsize.tcl' included source archive of tktable extension )</div><div class='del'>-##</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tktable'</div><div class='del'>-</div><div class='del'>-ary  = TkVariable.new_hash</div><div class='del'>-rows = 40000</div><div class='del'>-cols = 10</div><div class='del'>-</div><div class='del'>-# fill table variable</div><div class='del'>-((-(rows))..rows).each{|x|</div><div class='del'>-  ((-(cols))..cols).each{|y|</div><div class='del'>-    ary[x,y] = "#{x},#{y}"</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-lbl = TkLabel.new(:text=&gt;"TkTable v2 Example")</div><div class='del'>-</div><div class='del'>-table = Tk::TkTable.new(:rows=&gt;rows, :cols=&gt;cols, :variable=&gt;ary, </div><div class='del'>-                        :width=&gt;6, :height=&gt;8, </div><div class='del'>-                        :titlerows=&gt;1, :titlecols=&gt;1, </div><div class='del'>-                        :coltagcommand=&gt;proc{|col|</div><div class='del'>-                          col = Integer(col)</div><div class='del'>-                          (col&gt;0 &amp;&amp; col%2 == 1)? 'OddCol': ''</div><div class='del'>-                        }, </div><div class='del'>-                        :selectmode=&gt;:extended, </div><div class='del'>-                        :colstretch=&gt;:unset, :rowstretch=&gt;:unset, </div><div class='del'>-                        :selecttitles=&gt;false, :drawmode=&gt;:slow)</div><div class='del'>-</div><div class='del'>-sx = table.xscrollbar(TkScrollbar.new)</div><div class='del'>-sy = table.yscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-btn = TkButton.new(:text=&gt;'Exit', :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.grid(lbl, '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(table, sy, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(sx, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(btn, :sticky=&gt;:ew, :columnspan=&gt;2)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfig(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfig(1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-table.tag_configure('OddCol', :bg=&gt;'brown', :fg=&gt;'pink')</div><div class='del'>-table.tag_configure('title',  :bg=&gt;'red',   :fg=&gt;'blue', :relief=&gt;:sunken)</div><div class='del'>-table.tag_configure('dis',    :state=&gt;:disabled)</div><div class='del'>-</div><div class='del'>-first = table[:colorigin]</div><div class='del'>-%w(n s e w nw ne sw se c).each_with_index{|anchor, idx|</div><div class='del'>-  table.tag_configure(anchor, :anchor=&gt;anchor)</div><div class='del'>-  table.tag_row(anchor, idx)</div><div class='del'>-  table.set([idx,first], anchor)</div><div class='del'>-}</div><div class='del'>-courier = TkFont.new(:family=&gt;'Courier', :size=&gt;10)</div><div class='del'>-table.tag_configure('s', :font=&gt;courier, :justify=&gt;:center)</div><div class='del'>-</div><div class='del'>-table.set_width([-2, 8], [-1, 9], [0, 12], [4, 14])</div><div class='del'>-</div><div class='del'>-puts "Table is #{table.path} with array #{(table['variable'])}"</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/spreadsheet.rb b/ext/tk/sample/tkextlib/tktable/spreadsheet.rb<br/>deleted file mode 100644<br/>index 9da896f5a7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/spreadsheet.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/spreadsheet.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,137 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-##</div><div class='del'>-## spreadsheet.rb</div><div class='del'>-##</div><div class='del'>-## This demos shows how you can simulate a 3D table</div><div class='del'>-## and has other basic features to begin a basic spreadsheet</div><div class='del'>-## </div><div class='del'>-## ( based on 'spreadsheet.tcl' included source archive of tktable extension )</div><div class='del'>-##</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tktable'</div><div class='del'>-</div><div class='del'>-rows = 10</div><div class='del'>-cols = 10</div><div class='del'>-cur_var = TkVariable.new</div><div class='del'>-table_list = Hash.new{|hash, key| hash[key] = TkVariable.new_hash}</div><div class='del'>-page = TkVariable.new('AA')</div><div class='del'>-color = Hash.new('pink')</div><div class='del'>-color['AA'] = 'orange'</div><div class='del'>-color['BB'] = 'blue'</div><div class='del'>-color['CC'] = 'green'</div><div class='del'>-</div><div class='del'>-def colorize(num)</div><div class='del'>-  num = Integer(num)</div><div class='del'>-  return 'colored' if (num &gt; 0 &amp;&amp; num % 2 == 1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fill_table(tbl_list, page, r=10, c=10)</div><div class='del'>-  ary = tbl_list[page]</div><div class='del'>-</div><div class='del'>-  (0...r).each{|i|</div><div class='del'>-    (0...c).each{|j|</div><div class='del'>-      if i!=0 &amp;&amp; j!=0</div><div class='del'>-        ary[i,j] = "#{page} #{i},#{j}"</div><div class='del'>-      elsif i!=0</div><div class='del'>-        ary[i,j] = i.to_s</div><div class='del'>-      else</div><div class='del'>-        ary[i,j] = (64+j).chr</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def changepage(tbl_list, tbl, ent, col, var, elem, op)</div><div class='del'>-  if elem != ''</div><div class='del'>-    page = var[elem]</div><div class='del'>-  else</div><div class='del'>-    page = var.value</div><div class='del'>-  end</div><div class='del'>-  if tbl[:variable] != tbl_list[page].id</div><div class='del'>-    tbl.selection_clear_all</div><div class='del'>-    tbl.variable(tbl_list[page])</div><div class='del'>-    ent.textvariable(tbl_list[page].ref('active'))</div><div class='del'>-    tbl.activate('origin')</div><div class='del'>-    tbl.tag_configure('colored', :bg=&gt;col[page])</div><div class='del'>-    tbl.see('active')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-lbl = TkLabel.new(:text=&gt;"TkTable v1 Spreadsheet Example")</div><div class='del'>-</div><div class='del'>-current = TkLabel.new(:textvariable=&gt;cur_var, :width=&gt;5)</div><div class='del'>-entry = TkEntry.new(:textvariable=&gt;table_list[page.value].ref('active'))</div><div class='del'>-lpage = TkLabel.new(:text=&gt;'PAGE:', :width=&gt;6, :anchor=&gt;:e)</div><div class='del'>-optmenu = TkOptionMenubutton.new(page, *(%w(AA BB CC DD)))</div><div class='del'>-</div><div class='del'>-fill_table(table_list, page.value)</div><div class='del'>-fill_table(table_list, 'BB', Integer(rows/2), Integer(cols/2))</div><div class='del'>-</div><div class='del'>-table = Tk::TkTable.new(:rows=&gt;rows, :cols=&gt;cols, :width=&gt;5, :height=&gt;5, </div><div class='del'>-                        :variable=&gt;table_list[page.value], </div><div class='del'>-                        :titlerows=&gt;1, :titlecols=&gt;1, </div><div class='del'>-                        :coltagcommand=&gt;proc{|n| colorize(n)},</div><div class='del'>-                        :flashmode=&gt;true, :selectmode=&gt;:extended, </div><div class='del'>-                        :colstretch=&gt;:unset, :rowstretch=&gt;:unset, </div><div class='del'>-                        :browsecommand=&gt;proc{|e| cur_var.value = e.new_index})</div><div class='del'>-</div><div class='del'>-page.trace(:w, proc{|var, elem, op| </div><div class='del'>-             changepage(table_list, table, entry, color, var, elem, op)</div><div class='del'>-           })</div><div class='del'>-</div><div class='del'>-table.tag_configure('colored', :bg=&gt;color[page.value])</div><div class='del'>-table.tag_configure('title',   :fg=&gt;'red', :relief=&gt;:groove)</div><div class='del'>-table.tag_configure('blue',    :bg=&gt;'blue')</div><div class='del'>-table.tag_configure('green',   :bg=&gt;'green')</div><div class='del'>-</div><div class='del'>-table.tag_cell('green', [6,3], [5,7], [4,9])</div><div class='del'>-table.tag_cell('blue', [8,8])</div><div class='del'>-table.tag_row('blue', 7)</div><div class='del'>-table.tag_col('blue', 6, 8)</div><div class='del'>-table.set_width([0, 3], [2, 7])</div><div class='del'>-</div><div class='del'>-sx = table.xscrollbar(TkScrollbar.new)</div><div class='del'>-sy = table.yscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-btn = TkButton.new(:text=&gt;'Exit', :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.grid(lbl, '-', '-', '-', '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(current, entry, lpage, optmenu, '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(table, '-', '-', '-', sy, :sticky=&gt;:ns)</div><div class='del'>-Tk.grid(sx, '-', '-', '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(btn, '-', '-', '-', '-', :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfig(1, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfig(2, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-table.grid_configure(:sticky=&gt;:news)</div><div class='del'>-</div><div class='del'>-entry.bind('Return', proc{</div><div class='del'>-             r = table.row_index(:active)</div><div class='del'>-             c = table.col_index(:active)</div><div class='del'>-             rmax = table[:rows]</div><div class='del'>-             cmax = table[:cols]</div><div class='del'>-</div><div class='del'>-             c += 1</div><div class='del'>-             if c == cmax</div><div class='del'>-               c = table[:titlecols]</div><div class='del'>-               r += 1</div><div class='del'>-               if r == rmax</div><div class='del'>-                 r = table[:titlerows]</div><div class='del'>-               end</div><div class='del'>-             end</div><div class='del'>-             table.activate([r, c])</div><div class='del'>-             table.see('active')</div><div class='del'>-           })</div><div class='del'>-</div><div class='del'>-menu = TkMenu.new</div><div class='del'>-m_file = TkMenu.new(menu)</div><div class='del'>-Tk.root.menu(menu)</div><div class='del'>-menu.add(:cascade, :label=&gt;'File', :underline=&gt;0, :menu=&gt;m_file)</div><div class='del'>-m_file.add(:command, :label=&gt;'Fill Array', </div><div class='del'>-           :command=&gt;proc{ fill_table(table_list, page.value) })</div><div class='del'>-m_file.add(:command, :label=&gt;'Quit', :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-puts "Table is #{table.path} with array #{(table['variable'])}"</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/tcllogo.gif b/ext/tk/sample/tkextlib/tktable/tcllogo.gif<br/>deleted file mode 100755<br/>index 4603d4ff41..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/tcllogo.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/tcllogo.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/tktable/valid.rb b/ext/tk/sample/tkextlib/tktable/valid.rb<br/>deleted file mode 100644<br/>index e5d3f11d84..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/tktable/valid.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/tktable/valid.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,88 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-##</div><div class='del'>-## valid.rb</div><div class='del'>-##</div><div class='del'>-## This demos shows the use of the validation mechanism of the table</div><div class='del'>-## and uses the table's cache (no -command or -variable)</div><div class='del'>-## </div><div class='del'>-## ( based on 'valid.tcl' included source archive of tktable extension )</div><div class='del'>-##</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/tktable'</div><div class='del'>-</div><div class='del'>-rows = 10</div><div class='del'>-cols = 10</div><div class='del'>-</div><div class='del'>-def colorize(num)</div><div class='del'>-  num = Integer(num)</div><div class='del'>-  return 'colored' if (num &gt; 0 &amp;&amp; num % 2 == 1)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def fill_headers(w, r=10, c=10)</div><div class='del'>-  (1..(r-1)).each{|i| w.set([i,0], i.to_s)}</div><div class='del'>-</div><div class='del'>-  (1..(c-1)).each{|j|</div><div class='del'>-    if j % 3 == 1</div><div class='del'>-      w.set([0,j], 'AlphaNum')</div><div class='del'>-    elsif j % 2 == 1</div><div class='del'>-      w.set([0,j], 'Alpha')</div><div class='del'>-    elsif j != 0</div><div class='del'>-      w.set([0,j], 'Real')</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def validate_proc(c, val)</div><div class='del'>-  if c % 3 == 1</div><div class='del'>-    # AlphaNum</div><div class='del'>-    regexp = /^[A-Za-z0-9 ]*$/</div><div class='del'>-  elsif c % 2 == 1</div><div class='del'>-    # Alpha</div><div class='del'>-    regexp = /^[A-Za-z ]*$/</div><div class='del'>-  elsif c != 0</div><div class='del'>-    # 'Real'</div><div class='del'>-    regexp = /^[-+]?[0-9]*\.?[0-9]*([0-9]\.?e[-+]?[0-9]*)?$/</div><div class='del'>-  end</div><div class='del'>-  if val =~ regexp</div><div class='del'>-    return true</div><div class='del'>-  else</div><div class='del'>-    Tk.bell</div><div class='del'>-    return false</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-lbl = TkLabel.new(:text=&gt;"TkTable v1 Validated Table Example")</div><div class='del'>-</div><div class='del'>-table = Tk::TkTable.new(:rows=&gt;rows, :cols=&gt;cols, :cache=&gt;1, </div><div class='del'>-                        :width=&gt;5, :height=&gt;5, :titlerows=&gt;1, :titlecols=&gt;1, </div><div class='del'>-                        :coltagcommand=&gt;proc{|n| colorize(n)},</div><div class='del'>-                        :flashmode=&gt;true, :selectmode=&gt;:extended, </div><div class='del'>-                        :colstretch=&gt;:unset, :rowstretch=&gt;:unset, </div><div class='del'>-                        :validate=&gt;true, </div><div class='del'>-                        :validatecommand=&gt;proc{|e|</div><div class='del'>-                          unless e.widget.tag_include?('title', e.index)</div><div class='del'>-                            validate_proc(e.column, e.new_value)</div><div class='del'>-                          end } )</div><div class='del'>-</div><div class='del'>-fill_headers(table)</div><div class='del'>-</div><div class='del'>-table.tag_configure('colored', :bg=&gt;'lightblue')</div><div class='del'>-table.tag_configure('title',   :fg=&gt;'red')</div><div class='del'>-table.set_width(0,3)</div><div class='del'>-</div><div class='del'>-sx = table.xscrollbar(TkScrollbar.new)</div><div class='del'>-sy = table.yscrollbar(TkScrollbar.new)</div><div class='del'>-</div><div class='del'>-btn = TkButton.new(:text=&gt;'Exit', :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.grid(lbl, '-', :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(table, sy, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(sx, :sticky=&gt;:ew)</div><div class='del'>-Tk.grid(btn, '-', :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfig(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfig(1, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-puts "Table is #{table.path}"</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/bitmaps.rb b/ext/tk/sample/tkextlib/treectrl/bitmaps.rb<br/>deleted file mode 100644<br/>index 745e6a2e5b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/bitmaps.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/bitmaps.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,76 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Demo: Bitmaps</div><div class='del'>-#</div><div class='del'>-def demoBitmaps(t)</div><div class='del'>-  #if $Version_1_1_OrLater</div><div class='del'>-  if @has_bgimg</div><div class='del'>-    t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-                :selectmode=&gt;:browse, :orient=&gt;:horizontal, :wrap=&gt;'5 items', </div><div class='del'>-                :showheader=&gt;false, :backgroundimage=&gt;@images['sky'])</div><div class='del'>-  else</div><div class='del'>-    t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-                :selectmode=&gt;:browse, :orient=&gt;:horizontal, :wrap=&gt;'5 items', </div><div class='del'>-                :showheader=&gt;false)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if $HasColumnCreate</div><div class='del'>-    t.column_create(:itembackground=&gt;['gray90', []])</div><div class='del'>-  else</div><div class='del'>-    t.column_configure(0, :itembackground=&gt;['gray90', []])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('elemTxt', :text, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('elemSelTxt', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[@SystemHighlight, ['selected', 'focus']])</div><div class='del'>-  t.element_create('elemSelBmp', :rect, :outlinewidth=&gt;4, </div><div class='del'>-                   :outline=&gt;[@SystemHighlight, ['selected', 'focus']])</div><div class='del'>-  t.element_create('elemBmp', :bitmap, </div><div class='del'>-                   :foreground=&gt;[@SystemHighlight, ['selected', 'focus']], </div><div class='del'>-                   :background=&gt;'linen', </div><div class='del'>-                   :bitmap=&gt;['question' ['selected']])</div><div class='del'>-</div><div class='del'>-  s = t.style_create('STYLE', :orient=&gt;:vertical)</div><div class='del'>-  t.style_elements(s, ['elemSelBmp', 'elemBmp', 'elemSelTxt', 'elemTxt'])</div><div class='del'>-  t.style_layout(s, 'elemSelBmp', :union=&gt;'elemBmp', :ipadx=&gt;6, :ipady=&gt;6)</div><div class='del'>-  t.style_layout(s, 'elemBmp',    :pady=&gt;[0, 6], :expand=&gt;:we)</div><div class='del'>-  t.style_layout(s, 'elemSelTxt', :union=&gt;'elemTxt', :ipadx=&gt;2)</div><div class='del'>-  t.style_layout(s, 'elemTxt',    :expand=&gt;:we)</div><div class='del'>-</div><div class='del'>-  # Set default item style</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.defaultstyle = [s]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  bitmap_names = %w(error gray75 gray50 gray25 gray12 </div><div class='del'>-                    hourglass info questhead question warning)</div><div class='del'>-</div><div class='del'>-  bitmap_names.each{|name|</div><div class='del'>-    i = t.item_create</div><div class='del'>-    unless $Version_1_1_OrLater</div><div class='del'>-      t.item_style_set(i, 0, s)</div><div class='del'>-    end</div><div class='del'>-    t.item_text(i, 0, name)</div><div class='del'>-    t.item_element_configure(i, 0, 'elemBmp', :bitmap=&gt;name)</div><div class='del'>-    t.item_lastchild(:root, i)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  bitmap_names.each{|name|</div><div class='del'>-    i = t.item_create</div><div class='del'>-    t.item_style_set(i, 0, s)</div><div class='del'>-    t.item_text(i, 0, name)</div><div class='del'>-    if true</div><div class='del'>-      t.item_element_configure(i, 0, 'elemBmp', :bitmap=&gt;name, </div><div class='del'>-                               :foreground=&gt;['brown', ''], </div><div class='del'>-                               :background=&gt;['', ''])</div><div class='del'>-    else</div><div class='del'>-      t.item_element_configure(i, 0, 'elemBmp', :bitmap=&gt;name, </div><div class='del'>-                               :foreground=&gt;[</div><div class='del'>-                                 @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                                 'brown', []</div><div class='del'>-                               ], </div><div class='del'>-                               :background=&gt;['', []])</div><div class='del'>-    end</div><div class='del'>-    t.item_lastchild(:root, i)</div><div class='del'>-  }</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/demo.rb b/ext/tk/sample/tkextlib/treectrl/demo.rb<br/>deleted file mode 100644<br/>index eed95d0e1c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/demo.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/demo.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1311 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/treectrl'</div><div class='del'>-</div><div class='del'>-$ScriptDir = File.dirname(File.expand_path(__FILE__))</div><div class='del'>-</div><div class='del'>-$HasColumnCreate = Tk::TreeCtrl::HasColumnCreateCommand</div><div class='del'>-</div><div class='del'>-$Version_1_1_OrLater = (TkPackage.vcompare(Tk::TreeCtrl.package_version, '1.1') &gt;= 0)</div><div class='del'>-</div><div class='del'>-#if Hash.instance_methods.include?(:key)</div><div class='del'>-if TkCore::WITH_RUBY_VM  ### Ruby 1.9 !!!!</div><div class='del'>-  # ruby 1.9.x --&gt; use Hash#key</div><div class='del'>-  # Because Hash#index show warning "Hash#index is deprecated; use Hash#key".</div><div class='del'>-else</div><div class='del'>-  # ruby 1.8.x --&gt; use Hash#index</div><div class='del'>-  class Hash</div><div class='del'>-    alias key index</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TkTreeCtrl_demo</div><div class='del'>-  def initialize(dir)</div><div class='del'>-    @ScriptDir = dir || '.'</div><div class='del'>-</div><div class='del'>-    @thisPlatform = Tk::PLATFORM['platform']</div><div class='del'>-    if @thisPlatform == 'unix' &amp;&amp; Tk.windowingsystem == 'aqua'</div><div class='del'>-      @thisPlatform = 'macosx'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @RandomN = [500]</div><div class='del'>-</div><div class='del'>-    @images = Hash.new</div><div class='del'>-    @sel_images = Hash.new</div><div class='del'>-</div><div class='del'>-    @popup = Hash.new</div><div class='del'>-    @mTree = Hash.new</div><div class='del'>-    @mHeader = Hash.new</div><div class='del'>-</div><div class='del'>-    @non_clear_list = []</div><div class='del'>-</div><div class='del'>-    @demoCmd = Hash.new</div><div class='del'>-    @demoFile = Hash.new</div><div class='del'>-</div><div class='del'>-    # Get default colors</div><div class='del'>-    w = TkListbox.new</div><div class='del'>-    @SystemButtonFace    = w[:highlightbackground]</div><div class='del'>-    @SystemHighlight     = w[:selectbackground]</div><div class='del'>-    @SystemHighlightText = w[:selectforeground]</div><div class='del'>-    w.destroy</div><div class='del'>-</div><div class='del'>-    ####################</div><div class='del'>-</div><div class='del'>-    make_source_window()</div><div class='del'>-    make_menubar()</div><div class='del'>-    make_main_window()</div><div class='del'>-</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      begin</div><div class='del'>-        @tree2[:backgroundimage]</div><div class='del'>-        @has_bgimg = true</div><div class='del'>-      rescue</div><div class='del'>-        @has_bgimg = false</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @has_bgimg = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ####################</div><div class='del'>-</div><div class='del'>-    make_list_popup()</div><div class='del'>-    make_header_popup()</div><div class='del'>-</div><div class='del'>-    init_pics('sky')</div><div class='del'>-</div><div class='del'>-    ####################</div><div class='del'>-</div><div class='del'>-    @tree2.bind('ButtonPress-3', </div><div class='del'>-                proc{|w, x, y, rootx, rooty|</div><div class='del'>-                  show_list_popup(w, x, y, rootx, rooty)</div><div class='del'>-                }, '%W %x %y %X %Y')</div><div class='del'>-</div><div class='del'>-    # Allow "scan" bindings</div><div class='del'>-    if @thisPlatform == 'windows'</div><div class='del'>-      @tree2.bind_remove('Control-ButtonPress-3')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ####################</div><div class='del'>-</div><div class='del'>-    init_demo_scripts_module()</div><div class='del'>-    load_demo_scripts()</div><div class='del'>-    init_demo_list()</div><div class='del'>-</div><div class='del'>-    ####################</div><div class='del'>-</div><div class='del'>-    @tree1.notify_bind(@tree1, 'Selection', </div><div class='del'>-                       proc{|c, t|</div><div class='del'>-                         if c == 1</div><div class='del'>-                           item = t.selection_get[0]</div><div class='del'>-                           demo_set(@demoCmd[item], @demoFile[item])</div><div class='del'>-                         end</div><div class='del'>-                       }, '%c %T')</div><div class='del'>-</div><div class='del'>-    # When one item is selected in the demo list, display the styles in </div><div class='del'>-    # that item.</div><div class='del'>-    # See DemoClear for why the tag "DontDelete" is used</div><div class='del'>-    @tree2.notify_bind('DontDelete', 'Selection', </div><div class='del'>-                       proc{|c, t|</div><div class='del'>-                         display_styles_in_item(t.selection_get[0]) if c == 1</div><div class='del'>-                       }, '%c %T')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##########################</div><div class='del'>-</div><div class='del'>-  def init_pics(*args)</div><div class='del'>-    args.each{|pat|</div><div class='del'>-      unless TkImage.names.find{|img| (name = @images.key(img)) &amp;&amp; File.fnmatch(pat, name)}</div><div class='del'>-        Dir.glob(File.join(@ScriptDir, 'pics', "#{pat}.gif")).each{|file|</div><div class='del'>-          name = File.basename(file, '.gif')</div><div class='del'>-          img = TkPhotoImage.new(:file=&gt;file)</div><div class='del'>-          @images[name] = img</div><div class='del'>-          @sel_images[name] = TkPhotoImage.new</div><div class='del'>-          @sel_images[name].copy(img)</div><div class='del'>-          Tk::TreeCtrl.image_tint(@sel_images[name], @SystemHighlight, 128)</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'>-  ##########################</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def make_menubar</div><div class='del'>-    menuspec = [</div><div class='del'>-      [['File']]</div><div class='del'>-    ]</div><div class='del'>-    if Tk::PLATFORM['platform'] != 'unix'</div><div class='del'>-      TkConsole.create</div><div class='del'>-      TkConsole.eval('.console conf -height 8')</div><div class='del'>-      menuspec[0] &lt;&lt; ['Console', proc{</div><div class='del'>-          if TkComm.bool(TkConsole.eval('winfo ismapped .'))</div><div class='del'>-            TkConsole.hide</div><div class='del'>-          else</div><div class='del'>-            TkConsole.show</div><div class='del'>-          end</div><div class='del'>-        }]</div><div class='del'>-    end</div><div class='del'>-    menuspec[0] &lt;&lt; ['View Source', proc{toggle_source_window()}]</div><div class='del'>-    menuspec[0] &lt;&lt; ['Quit', proc{exit}]</div><div class='del'>-    Tk.root.add_menubar(menuspec)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_source_window</div><div class='del'>-    @src_top = TkToplevel.new</div><div class='del'>-    f = TkFrame.new(@src_top, :borderwidth=&gt;0)</div><div class='del'>-    case @thisPlatform</div><div class='del'>-    when 'macintosh', 'macos'</div><div class='del'>-      font = TkFont.new(['Geneva', 9])</div><div class='del'>-    when 'unix'</div><div class='del'>-      font = TkFont.new(['Courier', -12])</div><div class='del'>-    else</div><div class='del'>-      font = TkFont.new(['Courier', 9])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @src_txt = TkText.new(f, :font=&gt;font, :tabs=&gt;font.measure('1234'), </div><div class='del'>-                          :wrap=&gt;:none)</div><div class='del'>-    xscr = @src_txt.xscrollbar(TkScrollbar.new(f))</div><div class='del'>-    yscr = @src_txt.yscrollbar(TkScrollbar.new(f))</div><div class='del'>-</div><div class='del'>-    f.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-    f.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-    f.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    @src_txt.grid(:row=&gt;0, :column=&gt;0, :sticky=&gt;:news)</div><div class='del'>-    xscr.grid(:row=&gt;1, :column=&gt;0, :sticky=&gt;:we)</div><div class='del'>-    yscr.grid(:row=&gt;0, :column=&gt;1, :sticky=&gt;:ns)</div><div class='del'>-</div><div class='del'>-    @src_top.protocol('WM_DELETE_WINDOW', proc{@src_top.withdraw})</div><div class='del'>-    @src_top.geometry('-0+0')</div><div class='del'>-    @src_top.withdraw</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_source(file)</div><div class='del'>-    @src_top.title("Demo Source: #{file}")</div><div class='del'>-    @src_txt.value = IO.read(File.join(@ScriptDir, file))</div><div class='del'>-    @src_txt.set_insert('1.0')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def toggle_source_window</div><div class='del'>-    if @src_top.winfo_mapped?</div><div class='del'>-      @src_top.withdraw</div><div class='del'>-    else</div><div class='del'>-      @src_top.deiconify</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tree_plus_scrollbars_in_a_frame(parent, h, v)</div><div class='del'>-    f = TkFrame.new(parent, :borderwidth=&gt;1, :relief=&gt;:sunken)</div><div class='del'>-    case @thisPlatform</div><div class='del'>-    when 'macintosh'</div><div class='del'>-      font = TkFont.new(['Geneva', 9])</div><div class='del'>-    when 'macos'</div><div class='del'>-      font = TkFont.new(['Lucida Grande', 11])</div><div class='del'>-    when 'unix'</div><div class='del'>-      font = TkFont.new(['Helvetica', -12])</div><div class='del'>-    else</div><div class='del'>-      # There is a bug on my Win98 box with Tk_MeasureChars() and</div><div class='del'>-      # MS Sans Serif 8.</div><div class='del'>-      font = TkFont.new(['MS Sans', 8])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    tree = Tk::TreeCtrl.new(f, :highlightthickness=&gt;0, </div><div class='del'>-                            :borderwidth=&gt;0, :font=&gt;font)</div><div class='del'>-    tree[:xscrollincrement] = 20</div><div class='del'>-    tree.debug_configure(:enable=&gt;false, :display=&gt;false)</div><div class='del'>-</div><div class='del'>-    if h</div><div class='del'>-      h_scr = TkScrollbar.new(f, :orient=&gt;:horizontal, </div><div class='del'>-                              :command=&gt;proc{|*args| tree.xview(*args)})</div><div class='del'>-      tree.notify_bind(h_scr, 'Scroll-x', </div><div class='del'>-                       proc{|w, l, u| w.set(l, u)}, '%W %l %u')</div><div class='del'>-      h_scr.bind('ButtonPress-1', proc{tree.set_focus})</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if v</div><div class='del'>-      v_scr = TkScrollbar.new(f, :orient=&gt;:vertical, </div><div class='del'>-                              :command=&gt;proc{|*args| tree.yview(*args)})</div><div class='del'>-      tree.notify_bind(v_scr, 'Scroll-y', </div><div class='del'>-                       proc{|w, l, u| w.set(l, u)}, '%W %l %u')</div><div class='del'>-      v_scr.bind('ButtonPress-1', proc{tree.set_focus})</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    f.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-    f.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    tree.grid(:row=&gt;0, :column=&gt;0, :sticky=&gt;:news)</div><div class='del'>-    h_scr.grid(:row=&gt;1, :column=&gt;0, :sticky=&gt;:we) if h</div><div class='del'>-    v_scr.grid(:row=&gt;0, :column=&gt;1, :sticky=&gt;:ns) if v</div><div class='del'>-</div><div class='del'>-    [f, tree]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_main_window</div><div class='del'>-    Tk.root.title('Tk::TreeCtrl Demo')</div><div class='del'>-</div><div class='del'>-    case @thisPlatform</div><div class='del'>-    when 'macintosh', 'macosx'</div><div class='del'>-      Tk.root.geometry('+40+40')</div><div class='del'>-    else</div><div class='del'>-      Tk.root.geometry('+0+30')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    pane1 = TkPanedWindow.new(:orient=&gt;:vertical, :borderwidth=&gt;0)</div><div class='del'>-    pane2 = TkPanedWindow.new(:orient=&gt;:horizontal, :borderwidth=&gt;0)</div><div class='del'>-</div><div class='del'>-    # Tree + scrollbar: demos</div><div class='del'>-    f1, @tree1 = tree_plus_scrollbars_in_a_frame(nil, false, true)</div><div class='del'>-    @tree1.configure(:showbuttons=&gt;false, :showlines=&gt;:false, </div><div class='del'>-                    :showroot=&gt;false, :height=&gt;100)</div><div class='del'>-    if $HasColumnCreate</div><div class='del'>-      @tree1.column_create(:text=&gt;'List of Demos', </div><div class='del'>-                           :expand=&gt;true, :button=&gt;false)</div><div class='del'>-    else</div><div class='del'>-      @tree1.column_configure(0, :text=&gt;'List of Demos', </div><div class='del'>-                              :expand=&gt;true, :button=&gt;false)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Tree + scrollbar: styles + elements in list</div><div class='del'>-    f4, @tree4 = tree_plus_scrollbars_in_a_frame(nil, false, true)</div><div class='del'>-    @tree4.configure(:showroot=&gt;false, :height=&gt;140)</div><div class='del'>-    if $HasColumnCreate</div><div class='del'>-      @tree4.column_create(:text=&gt;'Elements and Styles', </div><div class='del'>-                           :expand=&gt;true, :button=&gt;false)</div><div class='del'>-    else</div><div class='del'>-      @tree4.column_configure(0, :text=&gt;'Elements and Styles', </div><div class='del'>-                              :expand=&gt;true, :button=&gt;false)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Tree + scrollbar: styles + elements in selected item</div><div class='del'>-    f3, @tree3 = tree_plus_scrollbars_in_a_frame(nil, false, true)</div><div class='del'>-    @tree3.configure(:showroot=&gt;false)</div><div class='del'>-    if $HasColumnCreate</div><div class='del'>-      @tree3.column_create(:text=&gt;'Styles in Item', </div><div class='del'>-                           :expand=&gt;true, :button=&gt;false)</div><div class='del'>-    else</div><div class='del'>-      @tree3.column_configure(0, :text=&gt;'Styles in Item', </div><div class='del'>-                              :expand=&gt;true, :button=&gt;false)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    pane1.add(f1, f4, f3, :height=&gt;150)</div><div class='del'>-    pane1.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-    # Frame on right</div><div class='del'>-    f2_base = TkFrame.new</div><div class='del'>-</div><div class='del'>-    # Tree + scrollbars</div><div class='del'>-    f2, @tree2 = tree_plus_scrollbars_in_a_frame(f2_base, true, true)</div><div class='del'>-    @tree2.configure(:indent=&gt;19)</div><div class='del'>-    @tree2.debug_configure(:enable=&gt;false, :display=&gt;true, </div><div class='del'>-                           :erasecolor=&gt;'pink', :displaydelay=&gt;30)</div><div class='del'>-</div><div class='del'>-    # Give it a big border to debug drawing</div><div class='del'>-    @tree2.configure(:borderwidth=&gt;6, :relief=&gt;:ridge, :highlightthickness=&gt;3)</div><div class='del'>-</div><div class='del'>-    f2_base.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-    f2_base.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-    f2.grid(:row=&gt;0, :column=&gt;0, :sticky=&gt;:news, :pady=&gt;0)</div><div class='del'>-</div><div class='del'>-    pane2.add(pane1, :width=&gt;200)</div><div class='del'>-    pane2.add(f2_base, :width=&gt;450)</div><div class='del'>-</div><div class='del'>-    pane2.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-    ###</div><div class='del'>-    # A treectrl widget can generate the following built-in events:</div><div class='del'>-    # &lt;ActiveItem&gt; called when the active item changes</div><div class='del'>-    # &lt;Collapse-before&gt; called before an item is closed</div><div class='del'>-    # &lt;Collapse-after&gt; called after an item is closed</div><div class='del'>-    # &lt;Expand-before&gt; called before an item is opened</div><div class='del'>-    # &lt;Expand-after&gt; called after an item is opened</div><div class='del'>-    # &lt;Selection&gt; called when items are added to or removed from the selection</div><div class='del'>-    # &lt;Scroll-x&gt; called when horizontal scroll position changes</div><div class='del'>-    # &lt;Scroll-y&gt; called when vertical scroll position changes</div><div class='del'>-    #</div><div class='del'>-    # The application programmer can define custom events to be</div><div class='del'>-    # generated by the "T notify generate" command. The following events</div><div class='del'>-    # are generated by the example bindings.</div><div class='del'>-</div><div class='del'>-    @tree2.notify_install_event('Header')</div><div class='del'>-    @tree2.notify_install_detail('Header', 'invoke')</div><div class='del'>-</div><div class='del'>-    @tree2.notify_install_event('Drag')</div><div class='del'>-    @tree2.notify_install_detail('Drag', 'begin')</div><div class='del'>-    @tree2.notify_install_detail('Drag', 'end')</div><div class='del'>-    @tree2.notify_install_detail('Drag', 'receive')</div><div class='del'>-</div><div class='del'>-    @tree2.notify_install_event('Edit')</div><div class='del'>-    @tree2.notify_install_detail('Edit', 'accept')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_list_popup</div><div class='del'>-    @popup[:bgimg] = TkVariable.new</div><div class='del'>-    @popup[:bgmode] = TkVariable.new</div><div class='del'>-    @popup[:debug] = Hash.new{|h, k| h[k] = TkVariable.new}</div><div class='del'>-    @popup[:doublebuffer] = TkVariable.new</div><div class='del'>-    @popup[:linestyle] = TkVariable.new</div><div class='del'>-    @popup[:orient] = TkVariable.new</div><div class='del'>-    @popup[:selectmode] = TkVariable.new</div><div class='del'>-    @popup[:show] = Hash.new{|h, k| h[k] = TkVariable.new}</div><div class='del'>-</div><div class='del'>-    menuspec = [</div><div class='del'>-      [ 'Collapse', [], nil, '', {:menu_config=&gt;{:tearoff=&gt;false}} ], </div><div class='del'>-</div><div class='del'>-      [ 'Expand',   [], nil, '', {:menu_config=&gt;{:tearoff=&gt;false}} ]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    # if $Version_1_1_OrLater</div><div class='del'>-    if @has_bgimg</div><div class='del'>-      menuspec &lt;&lt; \</div><div class='del'>-      [ 'Background Image', </div><div class='del'>-        [</div><div class='del'>-          [ 'none', [@popup[:bgimg], 'none'], nil, '', </div><div class='del'>-            {:command=&gt;proc{@tree2.backgroundimage = ''}} ], </div><div class='del'>-          [ 'sky',  [@popup[:bgimg], 'sky'],  nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.backgroundimage = @images[@popup[:bgimg].value]}} ]</div><div class='del'>-        ], </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}}</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    menuspec.concat([</div><div class='del'>-      [ 'Background Mode', </div><div class='del'>-        %w(column index row visindex).collect{|val|</div><div class='del'>-          [ val, [@popup[:bgmode], val] , nil, '', </div><div class='del'>-            {:command=&gt;proc{@tree2.backgroundmode = @popup[:bgmode].value}} ]</div><div class='del'>-        }, </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}}</div><div class='del'>-      ],</div><div class='del'>-</div><div class='del'>-      [ 'Debug', </div><div class='del'>-        [</div><div class='del'>-          [ 'Data',    @popup[:debug][:data],    nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.debug_configure(:data=&gt;@popup[:debug][:data].value)</div><div class='del'>-              }</div><div class='del'>-            } ], </div><div class='del'>-          [ 'Display', @popup[:debug][:display], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.debug_configure(:display=&gt;@popup[:debug][:display].value)</div><div class='del'>-              }</div><div class='del'>-            } ], </div><div class='del'>-          [ 'Enable',  @popup[:debug][:enable],  nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.debug_configure(:enable=&gt;@popup[:debug][:enable].value)</div><div class='del'>-              }</div><div class='del'>-            } ]</div><div class='del'>-        ], </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}}</div><div class='del'>-      ],</div><div class='del'>-</div><div class='del'>-      [ 'Buffering', </div><div class='del'>-        [</div><div class='del'>-          [ 'none',   [@popup[:doublebuffer], 'none'],   nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.doublebuffer = @popup[:doublebuffer].value</div><div class='del'>-              }</div><div class='del'>-            } ], </div><div class='del'>-          [ 'item',   [@popup[:doublebuffer], 'item'],   nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.doublebuffer = @popup[:doublebuffer].value</div><div class='del'>-              }</div><div class='del'>-            } ], </div><div class='del'>-          [ 'window', [@popup[:doublebuffer], 'window'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.doublebuffer = @popup[:doublebuffer].value</div><div class='del'>-              }</div><div class='del'>-            } ]</div><div class='del'>-        ],</div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}}</div><div class='del'>-      ],</div><div class='del'>-</div><div class='del'>-      [ 'Line style', </div><div class='del'>-        [</div><div class='del'>-          [ 'dot',   [@popup[:linestyle], 'dot'],   nil, '', </div><div class='del'>-            {:command=&gt;proc{@tree2.linestyle = @popup[:linestyle].value}} ], </div><div class='del'>-          [ 'solid', [@popup[:linestyle], 'solid'], nil, '', </div><div class='del'>-            {:command=&gt;proc{@tree2.linestyle = @popup[:linestyle].value}} ]</div><div class='del'>-        ], </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}}</div><div class='del'>-      ],</div><div class='del'>-</div><div class='del'>-      [ 'Orient', </div><div class='del'>-        [</div><div class='del'>-          [ 'Horizontal', [@popup[:orient], 'horizontal'], nil, '', </div><div class='del'>-            {:command=&gt;proc{@tree2.orient = @popup[:orient].value}} ], </div><div class='del'>-          [ 'Vertical',   [@popup[:orient], 'vertical'],   nil, '', </div><div class='del'>-            {:command=&gt;proc{@tree2.orient = @popup[:orient].value}} ]</div><div class='del'>-        ], </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}}</div><div class='del'>-      ],</div><div class='del'>-</div><div class='del'>-      [ 'Selectmode', </div><div class='del'>-        %w(list browse extended multiple single).collect{|val|</div><div class='del'>-          [ val, [@popup[:selectmode], val] , nil, '', </div><div class='del'>-            {:command=&gt;proc{@tree2.selectmode = @popup[:selectmode].value}} ]</div><div class='del'>-        }, </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}}</div><div class='del'>-      ],</div><div class='del'>-</div><div class='del'>-      [ 'Show', </div><div class='del'>-        [</div><div class='del'>-          [ 'Buttons', @popup[:show][:buttons], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.showbuttons = @popup[:show][:buttons].value</div><div class='del'>-              }</div><div class='del'>-            } ], </div><div class='del'>-          [ 'Header', @popup[:show][:header], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.showheader = @popup[:show][:header].value</div><div class='del'>-              }</div><div class='del'>-            } ], </div><div class='del'>-          [ 'Lines', @popup[:show][:lines], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.showlines = @popup[:show][:lines].value</div><div class='del'>-              }</div><div class='del'>-            } ], </div><div class='del'>-          [ 'Root', @popup[:show][:root], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.showroot = @popup[:show][:root].value</div><div class='del'>-              }</div><div class='del'>-            } ], </div><div class='del'>-          [ 'Root Button', @popup[:show][:rootbutton], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.showrootbutton = @popup[:show][:rootbutton].value</div><div class='del'>-              }</div><div class='del'>-            } ]</div><div class='del'>-        ], </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}}</div><div class='del'>-      ],</div><div class='del'>-</div><div class='del'>-      [ 'Visible', [], nil, '', {:menu_config=&gt;{:tearoff=&gt;false}} ]</div><div class='del'>-    ])</div><div class='del'>-</div><div class='del'>-    m = TkMenu.new_menuspec(menuspec, @tree2, false)</div><div class='del'>-    @non_clear_list &lt;&lt; m</div><div class='del'>-    @mTree[@tree2] = m</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_list_popup(w, x, y, rootx, rooty)</div><div class='del'>-    id = w.identify(x, y)</div><div class='del'>-    unless id.empty?</div><div class='del'>-      if id[0] == 'header'</div><div class='del'>-        col = id[1]</div><div class='del'>-        @popup[:column].value = col</div><div class='del'>-        @popup[:arrow].value = w.column_cget(col, :arrow)</div><div class='del'>-        @popup[:arrowside].value = w.column_cget(col, :arrowside)</div><div class='del'>-        @popup[:arrowgravity].value = w.column_cget(col, :arrowgravity)</div><div class='del'>-        @popup[:expand].value = w.column_cget(col, :expand)</div><div class='del'>-        @popup[:squeeze].value = w.column_cget(col, :squeeze)</div><div class='del'>-        @popup[:justify].value = w.column_cget(col, :justify)</div><div class='del'>-        @mHeader[w].popup(rootx, rooty)</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    m = @mTree[w].entrycget('Collapse', :menu)</div><div class='del'>-    m.delete(0, :end)</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      m.add_command(:label=&gt;'All', :command=&gt;proc{w.item_collapse(:all)})</div><div class='del'>-    else</div><div class='del'>-      m.add_command(:label=&gt;'All', :command=&gt;proc{w.collapse(:all)})</div><div class='del'>-    end</div><div class='del'>-    unless id.empty?</div><div class='del'>-      if id[0] == 'item'</div><div class='del'>-        item = id[1]</div><div class='del'>-        if $Version_1_1_OrLater</div><div class='del'>-          m.add_command(:label=&gt;"Item #{item}", </div><div class='del'>-                        :command=&gt;proc{w.item_collapse(item)})</div><div class='del'>-          m.add_command(:label=&gt;"Item #{item} (recurse)", </div><div class='del'>-                        :command=&gt;proc{w.item_collapse_recurse(item)})</div><div class='del'>-        else</div><div class='del'>-          m.add_command(:label=&gt;"Item #{item}", </div><div class='del'>-                        :command=&gt;proc{w.collapse(item)})</div><div class='del'>-          m.add_command(:label=&gt;"Item #{item} (recurse)", </div><div class='del'>-                        :command=&gt;proc{w.collapse_recurse(item)})</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    m = @mTree[w].entrycget('Expand', :menu)</div><div class='del'>-    m.delete(0, :end)</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      m.add_command(:label=&gt;'All', :command=&gt;proc{w.item_expand(:all)})</div><div class='del'>-    else</div><div class='del'>-      m.add_command(:label=&gt;'All', :command=&gt;proc{w.expand(:all)})</div><div class='del'>-    end</div><div class='del'>-    unless id.empty?</div><div class='del'>-      if id[0] == 'item'</div><div class='del'>-        item = id[1]</div><div class='del'>-        if $Version_1_1_OrLater</div><div class='del'>-          m.add_command(:label=&gt;"Item #{item}", </div><div class='del'>-                        :command=&gt;proc{w.item_expand(item)})</div><div class='del'>-          m.add_command(:label=&gt;"Item #{item} (recurse)", </div><div class='del'>-                        :command=&gt;proc{w.item_expand_recurse(item)})</div><div class='del'>-        else</div><div class='del'>-          m.add_command(:label=&gt;"Item #{item}", </div><div class='del'>-                        :command=&gt;proc{w.expand(item)})</div><div class='del'>-          m.add_command(:label=&gt;"Item #{item} (recurse)", </div><div class='del'>-                        :command=&gt;proc{w.expand_recurse(item)})</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    [:data, :display, :enable].each{|k|</div><div class='del'>-      @popup[:debug][k].value = w.debug_cget(k)</div><div class='del'>-    }</div><div class='del'>-    # if $Version_1_1_OrLater</div><div class='del'>-    if @has_bgimg</div><div class='del'>-      @popup[:bgimg].value = @images.key(w[:backgroundimage])</div><div class='del'>-    end</div><div class='del'>-    @popup[:bgmode].value = w[:backgroundmode]</div><div class='del'>-    @popup[:doublebuffer].value = w[:doublebuffer]</div><div class='del'>-    @popup[:linestyle].value = w[:linestyle]</div><div class='del'>-    @popup[:orient].value = w[:orient]</div><div class='del'>-    @popup[:selectmode].value = w[:selectmode]</div><div class='del'>-    @popup[:show][:buttons].value = w[:showbuttons]</div><div class='del'>-    @popup[:show][:header].value = w[:showheader]</div><div class='del'>-    @popup[:show][:lines].value = w[:showlines]</div><div class='del'>-    @popup[:show][:root].value = w[:showroot]</div><div class='del'>-    @popup[:show][:rootbutton].value = w[:showrootbutton]</div><div class='del'>-</div><div class='del'>-    m = @mTree[w].entrycget('Visible', :menu)</div><div class='del'>-    m.delete(0, :end)</div><div class='del'>-    @popup[:visible] = []</div><div class='del'>-    (0...(w.numcolumns)).each{|i|</div><div class='del'>-      @popup[:visible][i] = TkVariable.new(w.column_cget(i, :visible))</div><div class='del'>-      txt = w.column_cget(i, :text)</div><div class='del'>-      img_name = w.column_cget(i, :image)</div><div class='del'>-      img_name = @images.key(img_name) if img_name.kind_of?(TkImage)</div><div class='del'>-      m.add_checkbutton(:variable=&gt;@popup[:visible][i], </div><div class='del'>-                        :label=&gt;"Column #{i} \"#{txt}\" [#{img_name}]", </div><div class='del'>-                        :command=&gt;proc{w.column_configure(i, :visible=&gt;@popup[:visible][i].value)})</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @mTree[w].popup(rootx, rooty)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_header_popup</div><div class='del'>-    @popup[:column] = TkVariable.new unless @popup[:column]</div><div class='del'>-    @popup[:arrow] = TkVariable.new</div><div class='del'>-    @popup[:arrowside] = TkVariable.new</div><div class='del'>-    @popup[:arrowgravity] = TkVariable.new</div><div class='del'>-    @popup[:expand] = TkVariable.new</div><div class='del'>-    @popup[:squeeze] = TkVariable.new</div><div class='del'>-    @popup[:justify] = TkVariable.new</div><div class='del'>-</div><div class='del'>-    menuspec = [</div><div class='del'>-      [ 'Arrow', </div><div class='del'>-        [</div><div class='del'>-          [ 'None', [@popup[:arrow], 'none'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, :arrow=&gt;:none)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-          [ 'Up', [@popup[:arrow], 'up'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, :arrow=&gt;:up)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-          [ 'Down', [@popup[:arrow], 'down'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, :arrow=&gt;:down)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-</div><div class='del'>-          '---', </div><div class='del'>-</div><div class='del'>-          [ 'Side Left', [@popup[:arrowside], 'left'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, </div><div class='del'>-                                        :arrowside=&gt;:left)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-          [ 'Side Right', [@popup[:arrowside], 'right'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, </div><div class='del'>-                                        :arrowside=&gt;:right)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-</div><div class='del'>-          '---', </div><div class='del'>-</div><div class='del'>-          [ 'Gravity Left', [@popup[:arrowgravity], 'left'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, </div><div class='del'>-                                        :arrowgravity=&gt;:left)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-          [ 'Gravity Right', [@popup[:arrowgravity], 'right'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, </div><div class='del'>-                                        :arrowgravity=&gt;:right)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-        ], </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}} ], </div><div class='del'>-</div><div class='del'>-      [ 'Expand',  @popup[:expand],  nil, '', </div><div class='del'>-        {:command=&gt;proc{</div><div class='del'>-            @tree2.column_configure(@popup[:column].value, </div><div class='del'>-                                    :expand=&gt;@popup[:expand].value)</div><div class='del'>-          }</div><div class='del'>-        } ],</div><div class='del'>-</div><div class='del'>-      [ 'Squeeze', @popup[:squeeze], nil, '', </div><div class='del'>-        {:command=&gt;proc{</div><div class='del'>-            @tree2.column_configure(@popup[:column].value, </div><div class='del'>-                                    :squeeze=&gt;@popup[:squeeze].value)</div><div class='del'>-          }</div><div class='del'>-        } ],</div><div class='del'>-</div><div class='del'>-      [ 'Justify', </div><div class='del'>-        [</div><div class='del'>-          [ 'Left', [@popup[:justify], 'left'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, :justify=&gt;:left)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-          [ 'Center', [@popup[:justify], 'center'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, </div><div class='del'>-                                        :justify=&gt;:center)</div><div class='del'>-              }</div><div class='del'>-            } ],</div><div class='del'>-          [ 'Right', [@popup[:justify], 'right'], nil, '', </div><div class='del'>-            {:command=&gt;proc{</div><div class='del'>-                @tree2.column_configure(@popup[:column].value, </div><div class='del'>-                                        :justify=&gt;:right)</div><div class='del'>-              }</div><div class='del'>-            } ]</div><div class='del'>-        ], </div><div class='del'>-        nil, '', {:menu_config=&gt;{:tearoff=&gt;false}} ]</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    m = TkMenu.new_menuspec(menuspec, @tree2, false)</div><div class='del'>-    @non_clear_list &lt;&lt; m</div><div class='del'>-    @mHeader[@tree2] = m</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ###########################</div><div class='del'>-</div><div class='del'>-  def init_demo_scripts_module</div><div class='del'>-    @demo_scripts = Module.new</div><div class='del'>-</div><div class='del'>-    master = self</div><div class='del'>-</div><div class='del'>-    has_bgimg = @has_bgimg</div><div class='del'>-</div><div class='del'>-    scriptDir = @ScriptDir</div><div class='del'>-</div><div class='del'>-    thisPlatform = @thisPlatform</div><div class='del'>-</div><div class='del'>-    randomN = @RandomN</div><div class='del'>-</div><div class='del'>-    images = @images</div><div class='del'>-    sel_images = @sel_images</div><div class='del'>-</div><div class='del'>-    systemButtonFace = @SystemButtonFace</div><div class='del'>-    systemHighlight  = @SystemHighlight</div><div class='del'>-    systemHighlightText = @SystemHighlightText</div><div class='del'>-</div><div class='del'>-    def master._pub_display_styles_in_item(item)</div><div class='del'>-      display_styles_in_item(item)</div><div class='del'>-    end</div><div class='del'>-    proc_disp_styles_in_item = proc{|item| </div><div class='del'>-      master._pub_display_styles_in_item(item)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @demo_scripts.instance_eval{</div><div class='del'>-      @master = master</div><div class='del'>-</div><div class='del'>-      @has_bgimg = has_bgimg</div><div class='del'>-</div><div class='del'>-      @display_styles_in_item = proc_disp_styles_in_item</div><div class='del'>-</div><div class='del'>-      @Priv = TkVarAccess.new('::TreeCtrl::Priv')</div><div class='del'>-</div><div class='del'>-      @ScriptDir = scriptDir</div><div class='del'>-</div><div class='del'>-      @thisPlatform = thisPlatform</div><div class='del'>-</div><div class='del'>-      @RandomN = randomN</div><div class='del'>-</div><div class='del'>-      @images = images</div><div class='del'>-      @sel_images = sel_images</div><div class='del'>-</div><div class='del'>-      @SystemButtonFace = systemButtonFace</div><div class='del'>-      @SystemHighlight  = systemHighlight</div><div class='del'>-      @SystemHighlightText = systemHighlightText</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; @demo_scripts</div><div class='del'>-      def _get_binding</div><div class='del'>-        binding</div><div class='del'>-      end</div><div class='del'>-      private :_get_binding</div><div class='del'>-</div><div class='del'>-      def load_demo(file)</div><div class='del'>-        puts "load \"#{file}\"" if $DEBUG</div><div class='del'>-        begin</div><div class='del'>-          eval(IO.readlines(file).join, _get_binding())</div><div class='del'>-        rescue Exception =&gt; e</div><div class='del'>-          bt = e.backtrace</div><div class='del'>-</div><div class='del'>-          if bt[0] =~ /^([^:]+):(\d+):/</div><div class='del'>-            errline = $2.to_i</div><div class='del'>-          else</div><div class='del'>-            raise e</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          if bt[1] =~ /^([^:]+):(\d+):/</div><div class='del'>-            bt.unshift("#{file}:#{errline - $2.to_i + 1}")</div><div class='del'>-            raise e</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'>-      def init_pics(*args)</div><div class='del'>-        @master.init_pics(*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 load_demo_scripts</div><div class='del'>-    # demo sources</div><div class='del'>-    [</div><div class='del'>-      'bitmaps',  </div><div class='del'>-      'explorer', </div><div class='del'>-      'help', </div><div class='del'>-      'imovie', </div><div class='del'>-      'layout', </div><div class='del'>-      'mailwasher', </div><div class='del'>-      'outlook-folders', </div><div class='del'>-      'outlook-newgroup', </div><div class='del'>-      'random', </div><div class='del'>-      'www-options'</div><div class='del'>-    ].each{|f|</div><div class='del'>-      @demo_scripts.load_demo(File.join(@ScriptDir, "#{f}.rb"))</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 init_demo_list</div><div class='del'>-    @tree1.element_create('e1', :text, </div><div class='del'>-                          :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-    @tree1.element_create('e2', :rect, :showfocus=&gt;true, </div><div class='del'>-                          :fill=&gt;[</div><div class='del'>-                            @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                            'gray', ['selected', '!focus'], </div><div class='del'>-                          ])</div><div class='del'>-    @tree1.style_create('s1')</div><div class='del'>-    @tree1.style_elements('s1', ['e2', 'e1'])</div><div class='del'>-</div><div class='del'>-    # Tk listbox has linespace + 1 height</div><div class='del'>-    @tree1.style_layout('s1', 'e2', :union=&gt;['e1'], </div><div class='del'>-                        :ipadx=&gt;2, :ipady=&gt;[0, 1], :iexpand=&gt;:e)</div><div class='del'>-</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      @tree1.defaultstyle = 's1'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###</div><div class='del'>-    [</div><div class='del'>-      ["Random #{@RandomN[0]} Items", :demoRandom, 'random.rb'], </div><div class='del'>-      ["Random #{@RandomN[0]} Items, Button Images", :demoRandom2, 'random.rb'], </div><div class='del'>-      ["Outlook Express (Folders)", :demoOutlookFolders, 'outlook-folders.rb'],</div><div class='del'>-      ["Outlook Express (Newsgroup)", :demoOutlookNewsgroup, 'outlook-newgroup.rb'], </div><div class='del'>-      ["Explorer (Details)", :demoExplorerDetails, 'explorer.rb'], </div><div class='del'>-      ["Explorer (List)", :demoExplorerList, 'explorer.rb'], </div><div class='del'>-      ["Explorer (Large icons)", :demoExplorerLargeIcons, 'explorer.rb'], </div><div class='del'>-      ["Explorer (Small icons)", :demoExplorerSmallIcons, 'explorer.rb'], </div><div class='del'>-      ["Internet Options", :demoInternetOptions, 'www-options.rb'], </div><div class='del'>-      ["Help Contents", :demoHelpContents, 'help.rb'], </div><div class='del'>-      ["Layout", :demoLayout, 'layout.rb'], </div><div class='del'>-      ["MailWasher", :demoMailWasher, 'mailwasher.rb'], </div><div class='del'>-      ["Bitmaps", :demoBitmaps, 'bitmaps.rb'], </div><div class='del'>-      ["iMovie", :demoIMovie, 'imovie.rb']</div><div class='del'>-    ].each{|label, cmd, file|</div><div class='del'>-      item = @tree1.item_create</div><div class='del'>-      @tree1.item_lastchild(:root, item)</div><div class='del'>-      unless $Version_1_1_OrLater</div><div class='del'>-        @tree1.item_style_set(item, 0, 's1')</div><div class='del'>-      end</div><div class='del'>-      @tree1.item_text(item, 0, label)</div><div class='del'>-      @demoCmd[item] = cmd</div><div class='del'>-      @demoFile[item] = file</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @tree1.yview_moveto(0.0)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def demo_set(cmd, file)</div><div class='del'>-    demo_clear()</div><div class='del'>-    clicks = Tk::Clock.clicks</div><div class='del'>-    @demo_scripts.__send__(cmd, @tree2)</div><div class='del'>-    clicks = Tk::Clock.clicks - clicks</div><div class='del'>-    puts "set list in #{'%.2g'%(clicks/1000000.0)} seconds (#{clicks} clicks)"</div><div class='del'>-    @tree2.xview_moveto(0)</div><div class='del'>-    @tree2.yview_moveto(0)</div><div class='del'>-    Tk.update</div><div class='del'>-    display_styles_in_list()</div><div class='del'>-    show_source(file)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display_styles_in_list</div><div class='del'>-    # Create elements and styles the first time this is called</div><div class='del'>-    if @tree4.style_names.empty?</div><div class='del'>-      @tree4.element_create('e1', :text, </div><div class='del'>-                            :fill=&gt;[@SystemHighlightText,['selected','focus']])</div><div class='del'>-      @tree4.element_create('e2', :text, </div><div class='del'>-                            :fill=&gt;[</div><div class='del'>-                              @SystemHighlightText, ['selected','focus'], </div><div class='del'>-                              '', ['selected','!focus'], </div><div class='del'>-                              'blue', []</div><div class='del'>-                            ])</div><div class='del'>-      @tree4.element_create('e3', :rect, :showfocus=&gt;true, </div><div class='del'>-                            :fill=&gt;[</div><div class='del'>-                              @SystemHighlight, ['selected','focus'],</div><div class='del'>-                              'gray', ['selected', '!focus']</div><div class='del'>-                            ])</div><div class='del'>-</div><div class='del'>-      @tree4.style_create('s1')</div><div class='del'>-      @tree4.style_elements('s1', ['e3', 'e1'])</div><div class='del'>-      @tree4.style_layout('s1', 'e3', :union=&gt;['e1'], :ipadx=&gt;1, :ipady=&gt;[0,1])</div><div class='del'>-</div><div class='del'>-      @tree4.style_create('s2')</div><div class='del'>-      @tree4.style_elements('s2', ['e3', 'e1', 'e2'])</div><div class='del'>-      @tree4.style_layout('s2', 'e1', :padx=&gt;[0,4])</div><div class='del'>-      @tree4.style_layout('s2', 'e3', :union=&gt;['e1', 'e2'], </div><div class='del'>-                          :ipadx=&gt;1, :ipady=&gt;[0,1])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Clear the list</div><div class='del'>-    @tree4.item_delete(:all)</div><div class='del'>-    </div><div class='del'>-    # One item for each element in the demo list</div><div class='del'>-    @tree2.element_names.sort.each{|elem|</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        item = @tree4.item_create(:button=&gt;true)</div><div class='del'>-        @tree4.item_collapse(item)</div><div class='del'>-      else</div><div class='del'>-        item = @tree4.item_create</div><div class='del'>-        @tree4.item_hasbutton(item, true)</div><div class='del'>-        @tree4.collapse(item)</div><div class='del'>-      end</div><div class='del'>-      @tree4.item_style_set(item, 0, 's1')</div><div class='del'>-      @tree4.item_text(item, 0, </div><div class='del'>-                       "Element #{elem} (#{@tree2.element_type(elem)})")</div><div class='del'>-</div><div class='del'>-      # One item for each configuration option for this element</div><div class='del'>-      @tree2.element_configinfo(elem).each{|name, x, y, default, current|</div><div class='del'>-        item2 = @tree4.item_create</div><div class='del'>-</div><div class='del'>-        if default == current</div><div class='del'>-          @tree4.item_style_set(item2, 0, 's1')</div><div class='del'>-          @tree4.item_complex(item2, [</div><div class='del'>-                                ['e1', {:text=&gt;"#{name} #{current.inspect}"}]</div><div class='del'>-                              ])</div><div class='del'>-        else</div><div class='del'>-          @tree4.item_style_set(item2, 0, 's2')</div><div class='del'>-          @tree4.item_complex(item2, [</div><div class='del'>-                                ['e1', {:text=&gt;name}], </div><div class='del'>-                                ['e2', {:text=&gt;current.inspect}]</div><div class='del'>-                              ])</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        @tree4.item_lastchild(item, item2)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      @tree4.item_lastchild(:root, item)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # One item for each style in the demo list</div><div class='del'>-    @tree2.style_names.sort.each{|sty|</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        item = @tree4.item_create(:button=&gt;true)</div><div class='del'>-        @tree4.item_collapse(item)</div><div class='del'>-      else</div><div class='del'>-        item = @tree4.item_create</div><div class='del'>-        @tree4.item_hasbutton(item, true)</div><div class='del'>-        @tree4.collapse(item)</div><div class='del'>-      end</div><div class='del'>-      @tree4.item_style_set(item, 0, 's1')</div><div class='del'>-      @tree4.item_text(item, 0, "Style #{sty}")</div><div class='del'>-</div><div class='del'>-      # One item for each element in the style</div><div class='del'>-      @tree2.style_elements(sty).each{|elem|</div><div class='del'>-        if $Version_1_1_OrLater</div><div class='del'>-          item2 = @tree4.item_create(:button=&gt;true)</div><div class='del'>-          @tree4.item_collapse(item2)</div><div class='del'>-        else</div><div class='del'>-          item2 = @tree4.item_create</div><div class='del'>-          @tree4.item_hasbutton(item2, true)</div><div class='del'>-          @tree4.collapse(item2)</div><div class='del'>-        end</div><div class='del'>-        @tree4.item_style_set(item2, 0, 's1')</div><div class='del'>-        @tree4.item_text(item2, 0, </div><div class='del'>-                         "Element #{elem} (#{@tree2.element_type(elem)})")</div><div class='del'>-</div><div class='del'>-        # One item for each layout option for this element in this style</div><div class='del'>-        @tree2.style_layout(sty, elem).each{|k, v|</div><div class='del'>-          item3 = @tree4.item_create</div><div class='del'>-          unless $Version_1_1_OrLater</div><div class='del'>-            @tree4.item_hasbutton(item3, false)</div><div class='del'>-          end</div><div class='del'>-          @tree4.item_style_set(item3, 0, 's1')</div><div class='del'>-          @tree4.item_text(item3, 0, "#{k} #{v.inspect}")</div><div class='del'>-          @tree4.item_lastchild(item2, item3)</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        @tree4.item_lastchild(item, item2)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      @tree4.item_lastchild(:root, item)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @tree4.xview_moveto(0)</div><div class='del'>-    @tree4.yview_moveto(0)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display_styles_in_item(item)</div><div class='del'>-    @tree3.column_configure(0, :text=&gt;"Styles in item #{@tree2.index(item)}")</div><div class='del'>-</div><div class='del'>-    # Create elements and styles the first time this is called</div><div class='del'>-    if @tree3.style_names.empty?</div><div class='del'>-      @tree3.element_create('e1', :text, </div><div class='del'>-                            :fill=&gt;[@SystemHighlightText,['selected','focus']])</div><div class='del'>-      @tree3.element_create('e2', :text, </div><div class='del'>-                            :fill=&gt;[</div><div class='del'>-                              @SystemHighlightText, ['selected','focus'], </div><div class='del'>-                              '', ['selected','!focus'], </div><div class='del'>-                              'blue', []</div><div class='del'>-                            ])</div><div class='del'>-      @tree3.element_create('e3', :rect, :showfocus=&gt;true, </div><div class='del'>-                            :fill=&gt;[</div><div class='del'>-                              @SystemHighlight, ['selected','focus'],</div><div class='del'>-                              'gray', ['selected', '!focus']</div><div class='del'>-                            ])</div><div class='del'>-</div><div class='del'>-      @tree3.style_create('s1')</div><div class='del'>-      @tree3.style_elements('s1', ['e3', 'e1'])</div><div class='del'>-      @tree3.style_layout('s1', 'e3', :union=&gt;['e1'], :ipadx=&gt;1, :ipady=&gt;[0,1])</div><div class='del'>-</div><div class='del'>-      @tree3.style_create('s2')</div><div class='del'>-      @tree3.style_elements('s2', ['e3', 'e1', 'e2'])</div><div class='del'>-      @tree3.style_layout('s2', 'e1', :padx=&gt;[0,4])</div><div class='del'>-      @tree3.style_layout('s2', 'e3', :union=&gt;['e1', 'e2'], </div><div class='del'>-                          :ipadx=&gt;1, :ipady=&gt;[0,1])</div><div class='del'>-    end</div><div class='del'>-    # Clear the list</div><div class='del'>-    @tree3.item_delete(:all)</div><div class='del'>-</div><div class='del'>-    # One item for each item-column</div><div class='del'>-    column = 0</div><div class='del'>-    @tree2.item_style_set(item).each{|sty|</div><div class='del'>-      item2 = @tree3.item_create</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        @tree3.item_collapse(item2)</div><div class='del'>-      else</div><div class='del'>-        @tree3.collapse(item2)</div><div class='del'>-      end</div><div class='del'>-      @tree3.item_style_set(item2, 0, 's1')</div><div class='del'>-      @tree3.item_element_configure(item2, 0, 'e1', </div><div class='del'>-                                    :text=&gt;"Column #{column}: Style #{sty}")</div><div class='del'>-</div><div class='del'>-      button = false</div><div class='del'>-</div><div class='del'>-      # One item for each element in this style</div><div class='del'>-      unless sty.to_s.empty?</div><div class='del'>-        @tree2.item_style_elements(item, column).each{|elem|</div><div class='del'>-          button = true</div><div class='del'>-          if $Version_1_1_OrLater</div><div class='del'>-            item3 = @tree3.item_create(:button=&gt;true)</div><div class='del'>-          else</div><div class='del'>-            item3 = @tree3.item_create</div><div class='del'>-            @tree3.item_hasbutton(item3, true)</div><div class='del'>-          end</div><div class='del'>-          if $Version_1_1_OrLater</div><div class='del'>-            @tree3.item_collapse(item3)</div><div class='del'>-          else</div><div class='del'>-            @tree3.collapse(item3)</div><div class='del'>-          end</div><div class='del'>-          @tree3.item_style_set(item3, 0, 's1')</div><div class='del'>-          @tree3.item_element_configure(item3, 0, 'e1', </div><div class='del'>-                                        :text=&gt;"Element #{elem} (#{@tree2.element_type(elem)})")</div><div class='del'>-</div><div class='del'>-          # One item for each configuration option in this element</div><div class='del'>-          @tree2.item_element_configinfo(item, column, elem) \</div><div class='del'>-          .each{|name, x, y, default, current|</div><div class='del'>-            item4 = @tree3.item_create</div><div class='del'>-            masterDefault = @tree2.element_cget(elem, name)</div><div class='del'>-            sameAsMaster = (masterDefault == current)</div><div class='del'>-            if !sameAsMaster &amp;&amp; current == ''</div><div class='del'>-              sameAsMaster = true</div><div class='del'>-              current = masterDefault</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if sameAsMaster</div><div class='del'>-              @tree3.item_style_set(item4, 0, 's1')</div><div class='del'>-              @tree3.item_complex(item4, [</div><div class='del'>-                                    ['e1', </div><div class='del'>-                                      {:text=&gt;"#{name} #{current.inspect}"}]</div><div class='del'>-                                  ])</div><div class='del'>-            else</div><div class='del'>-              @tree3.item_style_set(item4, 0, 's2')</div><div class='del'>-              @tree3.item_complex(item4, [</div><div class='del'>-                                    ['e1', {:text=&gt;name}], </div><div class='del'>-                                    ['e2', {:text=&gt;current.inspect}]</div><div class='del'>-                                  ])</div><div class='del'>-            end</div><div class='del'>-            @tree3.item_lastchild(item3, item4)</div><div class='del'>-          }</div><div class='del'>-          @tree3.item_lastchild(item2, item3)</div><div class='del'>-        }</div><div class='del'>-        if $Version_1_1_OrLater</div><div class='del'>-          @tree3.item_configure(item2, :button=&gt;true) if button</div><div class='del'>-        else</div><div class='del'>-          @tree3.item_hasbutton(item2, true) if button</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      @tree3.item_lastchild(:root, item2)</div><div class='del'>-      column += 1</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @tree3.xview_moveto(0)</div><div class='del'>-    @tree3.yview_moveto(0)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def demo_clear</div><div class='del'>-    # Clear the demo list</div><div class='del'>-    @tree2.item_delete(:all)</div><div class='del'>-</div><div class='del'>-    # Clear all bindings on the demo list added by the previous demo.</div><div class='del'>-    # This is why DontDelete is used for the &lt;Selection&gt; binding.</div><div class='del'>-    @tree2.notify_bindinfo(@tree2).each{|ev|</div><div class='del'>-      @tree2.notify_bind_remove(@tree2, ev)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Clear all run-time states</div><div class='del'>-    @tree2.state_names.each{|st| @tree2.state_undefine(st) }</div><div class='del'>-</div><div class='del'>-    # Clear the styles-in-item list</div><div class='del'>-    @tree3.item_delete(:all)</div><div class='del'>-</div><div class='del'>-    # Delete columns in demo list</div><div class='del'>-    while (@tree2.numcolumns &gt; 0)</div><div class='del'>-      @tree2.column_delete(0)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Delete all styles in demo list</div><div class='del'>-    @tree2.style_delete(*(@tree2.style_names))</div><div class='del'>-</div><div class='del'>-    # Delete all elements in demo list</div><div class='del'>-    @tree2.element_delete(*(@tree2.element_names))</div><div class='del'>-</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      @tree2.item_configure(:root, :button=&gt;false)</div><div class='del'>-      @tree2.item_expand(:root)</div><div class='del'>-    else</div><div class='del'>-      @tree2.item_hasbutton(:root, false)</div><div class='del'>-      @tree2.expand(:root)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Restore some happy defaults to the demo list</div><div class='del'>-    # if $Version_1_1_OrLater</div><div class='del'>-    if @has_bgimg</div><div class='del'>-      @tree2.configure(:orient=&gt;:vertical, :wrap=&gt;'', </div><div class='del'>-                       :xscrollincrement=&gt;0, :yscrollincrement=&gt;0, </div><div class='del'>-                       :itemheight=&gt;0, :showheader=&gt;true, </div><div class='del'>-                       :background=&gt;'white', :scrollmargin=&gt;0, </div><div class='del'>-                       :xscrolldelay=&gt;50, :yscrolldelay=&gt;50, </div><div class='del'>-                       :openbuttonimage=&gt;'', :closedbuttonimage=&gt;'', </div><div class='del'>-                       :backgroundmode=&gt;:row, :treecolumn=&gt;0, :indent=&gt;19, </div><div class='del'>-                       :defaultstyle=&gt;'', :backgroundimage=&gt;'')</div><div class='del'>-    else</div><div class='del'>-      @tree2.configure(:orient=&gt;:vertical, :wrap=&gt;'', </div><div class='del'>-                       :xscrollincrement=&gt;0, :yscrollincrement=&gt;0, </div><div class='del'>-                       :itemheight=&gt;0, :showheader=&gt;true, </div><div class='del'>-                       :background=&gt;'white', :scrollmargin=&gt;0, </div><div class='del'>-                       :xscrolldelay=&gt;50, :yscrolldelay=&gt;50, </div><div class='del'>-                       :openbuttonimage=&gt;'', :closedbuttonimage=&gt;'', </div><div class='del'>-                       :backgroundmode=&gt;:row, :treecolumn=&gt;0, :indent=&gt;19)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Restore default bindings to the demo list</div><div class='del'>-    @tree2.bindtags = [ @tree2, Tk::TreeCtrl, @tree2.winfo_toplevel, :all ]</div><div class='del'>-</div><div class='del'>-    @tree2.winfo_children.each{|w| </div><div class='del'>-      w.destroy unless @non_clear_list.include?(w)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-TkTreeCtrl_demo.new($ScriptDir)</div><div class='del'>-</div><div class='del'>-##############################################</div><div class='del'>-</div><div class='del'>-def cursor_window(top = nil)</div><div class='del'>-  top.destroy if top.kind_of?(TkWindow) &amp;&amp; top.winfo_exist?</div><div class='del'>-  top = TkToplevel.new(:title=&gt;'Cursor Window')</div><div class='del'>-</div><div class='del'>-  c = TkCanvas.new(top, :background=&gt;'white', </div><div class='del'>-                   :width=&gt;50*10, :highlightthickness=&gt;0, </div><div class='del'>-                   :borderwidth=&gt;0).pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-  cursors = %w(</div><div class='del'>-	X_cursor</div><div class='del'>-	arrow</div><div class='del'>-	based_arrow_down</div><div class='del'>-	based_arrow_up</div><div class='del'>-	boat</div><div class='del'>-	bogosity</div><div class='del'>-	bottom_left_corner</div><div class='del'>-	bottom_right_corner</div><div class='del'>-	bottom_side</div><div class='del'>-	bottom_tee</div><div class='del'>-	box_spiral</div><div class='del'>-	center_ptr</div><div class='del'>-	circle</div><div class='del'>-	clock</div><div class='del'>-	coffee_mug</div><div class='del'>-	cross</div><div class='del'>-	cross_reverse</div><div class='del'>-	crosshair</div><div class='del'>-	diamond_cross</div><div class='del'>-	dot</div><div class='del'>-	dotbox</div><div class='del'>-	double_arrow</div><div class='del'>-	draft_large</div><div class='del'>-	draft_small</div><div class='del'>-	draped_box</div><div class='del'>-	exchange</div><div class='del'>-	fleur</div><div class='del'>-	gobbler</div><div class='del'>-	gumby</div><div class='del'>-	hand1</div><div class='del'>-	hand2</div><div class='del'>-	heart</div><div class='del'>-	icon</div><div class='del'>-	iron_cross</div><div class='del'>-	left_ptr</div><div class='del'>-	left_side</div><div class='del'>-	left_tee</div><div class='del'>-	leftbutton</div><div class='del'>-	ll_angle</div><div class='del'>-	lr_angle</div><div class='del'>-	man</div><div class='del'>-	middlebutton</div><div class='del'>-	mouse</div><div class='del'>-	pencil</div><div class='del'>-	pirate</div><div class='del'>-	plus</div><div class='del'>-	question_arrow</div><div class='del'>-	right_ptr</div><div class='del'>-	right_side</div><div class='del'>-	right_tee</div><div class='del'>-	rightbutton</div><div class='del'>-	rtl_logo</div><div class='del'>-	sailboat</div><div class='del'>-	sb_down_arrow</div><div class='del'>-	sb_h_double_arrow</div><div class='del'>-	sb_left_arrow</div><div class='del'>-	sb_right_arrow</div><div class='del'>-	sb_up_arrow</div><div class='del'>-	sb_v_double_arrow</div><div class='del'>-	shuttle</div><div class='del'>-	sizing</div><div class='del'>-	spider</div><div class='del'>-	spraycan</div><div class='del'>-	star</div><div class='del'>-	target</div><div class='del'>-	tcross</div><div class='del'>-	top_left_arrow</div><div class='del'>-	top_left_corner</div><div class='del'>-	top_right_corner</div><div class='del'>-	top_side</div><div class='del'>-	top_tee</div><div class='del'>-	trek</div><div class='del'>-	ul_angle</div><div class='del'>-	umbrella</div><div class='del'>-	ur_angle</div><div class='del'>-	watch</div><div class='del'>-	xterm</div><div class='del'>-    )</div><div class='del'>-</div><div class='del'>-  orig_cursor = c.cursor</div><div class='del'>-  col = 0</div><div class='del'>-  row = 0</div><div class='del'>-</div><div class='del'>-  cursors.each{|cur|</div><div class='del'>-    x = col * 50</div><div class='del'>-    y = row * 40</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      c.cursor = cur</div><div class='del'>-</div><div class='del'>-      r = TkcRectangle.new(c, x, y, x+50, y+40, </div><div class='del'>-                           :fill=&gt;'gray90', :outline=&gt;'black', :width=&gt;2)</div><div class='del'>-      t = TkcText.new(c, x+50/2, y+4, :text=&gt;cur, :anchor=&gt;:n, :width=&gt;42)</div><div class='del'>-</div><div class='del'>-      col += 1</div><div class='del'>-      if col &gt;= 10</div><div class='del'>-        col = 0</div><div class='del'>-        row += 1</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      r.bind('Enter', proc{c.cursor = cur; r.fill = 'linen'})</div><div class='del'>-      r.bind('Leave', proc{c.cursor = ''; r.fill = 'gray90'})</div><div class='del'>-</div><div class='del'>-      t.bind('Enter', proc{c.cursor = cur})</div><div class='del'>-      t.bind('Leave', proc{c.cursor = ''})</div><div class='del'>-    rescue</div><div class='del'>-      c.cursor = orig_cursor</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  c.cursor = orig_cursor</div><div class='del'>-  c.height = (row + 1) * 40</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-cursor_window()</div><div class='del'>-</div><div class='del'>-##############################################</div><div class='del'>-</div><div class='del'>-# A little screen magnifier for X11</div><div class='del'>-if Tk::PLATFORM['platform'] == 'unix' &amp;&amp; Tk.windowingsystem != 'aqua'</div><div class='del'>-  def show_loupe(setting=nil)</div><div class='del'>-    loupe = (setting.kind_of?(Hash))? setting: {}</div><div class='del'>-    loupe[:zoom] = 3 unless loupe[:zoom]</div><div class='del'>-    loupe[:x] = 0 unless loupe[:x]</div><div class='del'>-    loupe[:y] = 0 unless loupe[:y]</div><div class='del'>-    loupe[:auto] = true unless loupe[:auto]</div><div class='del'>-    loupe[:delay] = 500 unless loupe[:delay]</div><div class='del'>-    loupe[:image] = </div><div class='del'>-      TkPhotoImage.new(:width=&gt;150, :height=&gt;150) unless loupe[:image]</div><div class='del'>-</div><div class='del'>-    top = TkToplevel.new(:geometry=&gt;'-0+30', </div><div class='del'>-                         :title=&gt;'A little screen magnifier for X11')</div><div class='del'>-    TkLabel.new(top, :image=&gt;loupe[:image]).pack</div><div class='del'>-</div><div class='del'>-    TkTimer.new(proc{loupe[:delay]}, -1, proc{</div><div class='del'>-                  x, y = TkWinfo.pointerxy(Tk.root)</div><div class='del'>-                  if loupe[:auto] || loupe[:x] != x || loupe[:y] != y</div><div class='del'>-                    w = loupe[:image].width</div><div class='del'>-                    h = loupe[:image].height</div><div class='del'>-                    Tk::TreeCtrl.loupe(loupe[:image], x, y, w, h, loupe[:zoom])</div><div class='del'>-                    loupe[:x] = x</div><div class='del'>-                    loupe[:y] = y</div><div class='del'>-                  end</div><div class='del'>-                }).start</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  show_loupe()</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-##############################################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/explorer.rb b/ext/tk/sample/tkextlib/treectrl/explorer.rb<br/>deleted file mode 100644<br/>index 242777cbce..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/explorer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/explorer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,430 +0,0 @@</div><div class='del'>-</div><div class='del'>-def demoExplorerAux(t, dir_proc, file_proc)</div><div class='del'>-  base_dir = File.dirname(File.dirname(@ScriptDir))</div><div class='del'>-</div><div class='del'>-  clicks = Tk::Clock.clicks</div><div class='del'>-  globDirs = Dir.glob(File.join(base_dir, '*')).find_all{|file|</div><div class='del'>-    FileTest.directory?(file)</div><div class='del'>-  }</div><div class='del'>-  clickGlobDirs = Tk::Clock.clicks - clicks</div><div class='del'>-</div><div class='del'>-  clicks = Tk::Clock.clicks</div><div class='del'>-  list = globDirs.sort</div><div class='del'>-  clickSortDirs = Tk::Clock.clicks - clicks</div><div class='del'>-</div><div class='del'>-  clicks = Tk::Clock.clicks</div><div class='del'>-  list.each{|file| dir_proc.call(file)}</div><div class='del'>-  clickAddDirs = Tk::Clock.clicks - clicks</div><div class='del'>-</div><div class='del'>-  clicks = Tk::Clock.clicks</div><div class='del'>-  globFiles = Dir.glob(File.join(base_dir, '*')).find_all{|file|</div><div class='del'>-    FileTest.file?(file)</div><div class='del'>-  }</div><div class='del'>-  clickGlobFiles = Tk::Clock.clicks - clicks</div><div class='del'>-</div><div class='del'>-  clicks = Tk::Clock.clicks</div><div class='del'>-  list = globFiles.sort</div><div class='del'>-  clickSortFiles = Tk::Clock.clicks - clicks</div><div class='del'>-</div><div class='del'>-  clicks = Tk::Clock.clicks</div><div class='del'>-  list.each{|file| file_proc.call(file)}</div><div class='del'>-  clickAddFiles = Tk::Clock.clicks - clicks</div><div class='del'>-</div><div class='del'>-  gd = '%.2g' % (clickGlobDirs / 1000000.0)</div><div class='del'>-  sd = '%.2g' % (clickSortDirs / 1000000.0)</div><div class='del'>-  ad = '%.2g' % (clickAddDirs  / 1000000.0)</div><div class='del'>-  gf = '%.2g' % (clickGlobFiles / 1000000.0)</div><div class='del'>-  sf = '%.2g' % (clickSortFiles / 1000000.0)</div><div class='del'>-  af = '%.2g' % (clickAddFiles  / 1000000.0)</div><div class='del'>-</div><div class='del'>-  puts "dirs(#{globDirs.length}) glob/sort/add #{gd}/#{sd}/#{ad}    files(#{globFiles.length}) glob/sort/add #{gf}/#{sf}/#{af}"</div><div class='del'>-</div><div class='del'>-  @Priv[:DirCnt, t] = globDirs.length</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Demo: explorer files</div><div class='del'>-#</div><div class='del'>-def demoExplorerDetails(t)</div><div class='del'>-  height = t.font.metrics(:linespace)</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-</div><div class='del'>-  t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-              :itemheight=&gt;height, :selectmode=&gt;:extended, </div><div class='del'>-              :xscrollincrement=&gt;20, :scrollmargin=&gt;16, </div><div class='del'>-              :xscrolldelay=&gt;[500, 50], :yscrolldelay=&gt;[500, 50])</div><div class='del'>-</div><div class='del'>-  init_pics('small-*')</div><div class='del'>-</div><div class='del'>-  if $HasColumnCreate</div><div class='del'>-    t.column_create(:text=&gt;'Name', :tag=&gt;'name', </div><div class='del'>-                    :width=&gt;200, :arrow=&gt;:up, :arrowpad=&gt;6)</div><div class='del'>-    t.column_create(:text=&gt;'Size', :tag=&gt;'size', :justify=&gt;:right, </div><div class='del'>-                    :width=&gt;60, :arrowside=&gt;:left, :arrowgravity=&gt;:right)</div><div class='del'>-    t.column_create(:text=&gt;'Type', :tag=&gt;'type', :width=&gt;120)</div><div class='del'>-    t.column_create(:text=&gt;'Modified', :tag=&gt;'modified', :width=&gt;130)</div><div class='del'>-  else</div><div class='del'>-    t.column_configure(0, :text=&gt;'Name', :tag=&gt;'name', </div><div class='del'>-                       :width=&gt;200, :arrow=&gt;:up, :arrowpad=&gt;6)</div><div class='del'>-    t.column_configure(1, :text=&gt;'Size', :tag=&gt;'size', :justify=&gt;:right, </div><div class='del'>-                       :width=&gt;60, :arrowside=&gt;:left, :arrowgravity=&gt;:right)</div><div class='del'>-    t.column_configure(2, :text=&gt;'Type', :tag=&gt;'type', :width=&gt;120)</div><div class='del'>-    t.column_configure(3, :text=&gt;'Modified', :tag=&gt;'modified', :width=&gt;130)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('e1', :image, </div><div class='del'>-                   :image=&gt;[</div><div class='del'>-                     @sel_images['small-folder'], ['selected'], </div><div class='del'>-                     @images['small-folder'], []</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('e2', :text, :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('txtType', :text, :lines=&gt;1)</div><div class='del'>-  t.element_create('txtSize', :text, :lines=&gt;1, </div><div class='del'>-                   :datatype=&gt;:integer, :format=&gt;'%dKB')</div><div class='del'>-  t.element_create('txtDate', :text, :lines=&gt;1, </div><div class='del'>-                   :datatype=&gt;:time, :format=&gt;'%d/%m/%y %I:%M %p')</div><div class='del'>-  t.element_create('e4', :rect, :showfocus=&gt;true,</div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray', ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-</div><div class='del'>-  # image + text</div><div class='del'>-  s = t.style_create('styName', :orient=&gt;:horizontal)</div><div class='del'>-  t.style_elements(s, ['e4', 'e1', 'e2'])</div><div class='del'>-  t.style_layout(s, 'e1', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e2', :padx=&gt;[2,0], :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e4', :union=&gt;['e2'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  # column 1: text</div><div class='del'>-  s = t.style_create('stySize')</div><div class='del'>-  t.style_elements(s, ['txtSize'])</div><div class='del'>-  t.style_layout(s, 'txtSize', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-</div><div class='del'>-  # column 2: text</div><div class='del'>-  s = t.style_create('styType')</div><div class='del'>-  t.style_elements(s, ['txtType'])</div><div class='del'>-  t.style_layout(s, 'txtType', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-</div><div class='del'>-  # column 3: text</div><div class='del'>-  s = t.style_create('styDate')</div><div class='del'>-  t.style_elements(s, ['txtDate'])</div><div class='del'>-  t.style_layout(s, 'txtDate', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-</div><div class='del'>-  @Priv[:edit, t] = ['e2']</div><div class='del'>-  @Priv[:sensitive, t] = [ ['name', 'styName', 'e1', 'e2'] ]</div><div class='del'>-  @Priv[:dragimage, t] = [ ['name', 'styName', 'e1', 'e2'] ]</div><div class='del'>-</div><div class='del'>-  t.notify_bind(t, 'Edit-accept', </div><div class='del'>-                proc{|w, i, tt| w.item_text(i, 0, tt)}, '%T %I %t')</div><div class='del'>-</div><div class='del'>-  dir_proc = proc{|file|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    t.item_style_set(item, 0, 'styName', 2, 'styType', 3, 'styDate')</div><div class='del'>-    t.item_complex(item, </div><div class='del'>-                   [['e2', {:text=&gt;File.basename(file)}]], </div><div class='del'>-                   [], </div><div class='del'>-                   [['txtType', {:text=&gt;'Folder'}]], </div><div class='del'>-                   [['txtDate', {:data=&gt;File.mtime(file).tv_sec}]])</div><div class='del'>-    t.item_lastchild(:root, item)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  file_proc = proc{|file|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    t.item_style_set(item, 0, 'styName', 1, 'stySize', </div><div class='del'>-                           2, 'styType', 3, 'styDate')</div><div class='del'>-</div><div class='del'>-    ext = File.extname(file)</div><div class='del'>-    case ext</div><div class='del'>-    when '.dll'</div><div class='del'>-      img = 'small-dll'</div><div class='del'>-    when '.exe'</div><div class='del'>-      img = 'small-exe'</div><div class='del'>-    when '.txt'</div><div class='del'>-      img = 'small-txt'</div><div class='del'>-    else</div><div class='del'>-      img = 'small-file'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    type = ext.upcase</div><div class='del'>-    type = type[1..-1] &lt;&lt; ' ' unless type.empty?</div><div class='del'>-    type &lt;&lt; 'File'</div><div class='del'>-</div><div class='del'>-    t.item_complex(item, </div><div class='del'>-                   [ </div><div class='del'>-                     ['e1', {:image=&gt;[@sel_images[img], ['selected'], </div><div class='del'>-                                      @images[img], []]}],</div><div class='del'>-                     ['e2', {:text=&gt;File.basename(file)}]</div><div class='del'>-                   ], </div><div class='del'>-                   [ ['txtSize', {:data=&gt;File.size(file)/1024 + 1}] ], </div><div class='del'>-                   [ ['txtType', {:text=&gt;type}] ], </div><div class='del'>-                   [ ['txtDate', {:data=&gt;File.mtime(file).tv_sec}] ]</div><div class='del'>-                   )</div><div class='del'>-    t.item_lastchild(:root, item)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  demoExplorerAux(t, dir_proc, file_proc)</div><div class='del'>-</div><div class='del'>-  @SortColumn = 0</div><div class='del'>-  t.notify_bind(t, 'Header-invoke', </div><div class='del'>-                proc{|w, c| explorerHeaderInvoke(t, w, c)}, '%T %C')</div><div class='del'>-</div><div class='del'>-  t.bindtags = [ t, 'TreeCtrlFileList', Tk::TreeCtrl, t.winfo_toplevel, :all ]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def explorerHeaderInvoke(t, w, c)</div><div class='del'>-  if (c == @SortColumn)</div><div class='del'>-    if t.column_cget(@SortColumn, :arrow) == 'down'</div><div class='del'>-      order = :increasing</div><div class='del'>-      arrow = :up</div><div class='del'>-    else</div><div class='del'>-      order = :decreasing</div><div class='del'>-      arrow = :down</div><div class='del'>-    end</div><div class='del'>-  else</div><div class='del'>-    if t.column_cget(@SortColumn, :arrow) == 'down'</div><div class='del'>-      order = :decreasing</div><div class='del'>-      arrow = :down</div><div class='del'>-    else</div><div class='del'>-      order = :increasing</div><div class='del'>-      arrow = :up</div><div class='del'>-    end</div><div class='del'>-    t.column_configure(@SortColumn, :arrow=&gt;:none)</div><div class='del'>-    @SortColumn = c</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.column_configure(c, :arrow=&gt;arrow)</div><div class='del'>-  dirCount = TkComm.number(@Priv[:DirCnt, t])</div><div class='del'>-  lastDir = dirCount - 1</div><div class='del'>-  case t.column_cget(c, :tag)</div><div class='del'>-  when 'name'</div><div class='del'>-    if dirCount &gt; 0</div><div class='del'>-      t.item_sort(:root, order, {:last=&gt;"root child #{lastDir}"}, </div><div class='del'>-                  {:column=&gt;c, :dictionary=&gt;true})</div><div class='del'>-    end</div><div class='del'>-    if dirCount &lt; t.numitems - 1</div><div class='del'>-      t.item_sort(:root, order, {:first=&gt;"root child #{dirCount}"}, </div><div class='del'>-                  {:column=&gt;c, :dictionary=&gt;true})</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  when 'size'</div><div class='del'>-    if dirCount &lt; t.numitems - 1</div><div class='del'>-      t.item_sort(:root, order, {:first=&gt;"root child #{dirCount}"}, </div><div class='del'>-                  {:column=&gt;c, :integer=&gt;true}, </div><div class='del'>-                  {:column=&gt;'name', :dictionary=&gt;true})</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  when 'type'</div><div class='del'>-    if dirCount &lt; t.numitems - 1</div><div class='del'>-      t.item_sort(:root, order, {:first=&gt;"root child #{dirCount}"}, </div><div class='del'>-                  {:column=&gt;c, :dictionary=&gt;true}, </div><div class='del'>-                  {:column=&gt;'name', :dictionary=&gt;true})</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  when 'modified'</div><div class='del'>-    if dirCount &gt; 0</div><div class='del'>-      t.item_sort(:root, order, {:last=&gt;"root child #{lastDir}"}, </div><div class='del'>-                  {:column=&gt;c, :integer=&gt;true}, </div><div class='del'>-                  {:column=&gt;'name', :dictionary=&gt;true})</div><div class='del'>-    end</div><div class='del'>-    if dirCount &lt; t.numitems - 1</div><div class='del'>-      t.item_sort(:root, order, {:first=&gt;"root child #{dirCount}"}, </div><div class='del'>-                  {:column=&gt;c, :integer=&gt;true}, </div><div class='del'>-                  {:column=&gt;'name', :dictionary=&gt;true})</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 demoExplorerLargeIcons(t)</div><div class='del'>-  # Item height is 32 for icon, 4 padding, 3 lines of text</div><div class='del'>-  itemHeight = 32 + 4 + t.font.metrics(:linespace) * 3</div><div class='del'>-</div><div class='del'>-  t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-              :selectmode=&gt;:extended, :wrap=&gt;:window, :orient=&gt;:horizontal, </div><div class='del'>-              :itemheight=&gt;itemHeight, :showheader=&gt;false, :scrollmargin=&gt;16, </div><div class='del'>-              :xscrolldelay=&gt;[500, 50], :yscrolldelay=&gt;[500, 50])</div><div class='del'>-</div><div class='del'>-  init_pics('big-*')</div><div class='del'>-</div><div class='del'>-  if $HasColumnCreate</div><div class='del'>-    t.column_create(:width=&gt;75)</div><div class='del'>-  else</div><div class='del'>-    t.column_configure(0, :width=&gt;75)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('elemImg', :image, </div><div class='del'>-                   :image=&gt;[</div><div class='del'>-                     @sel_images['big-folder'], ['selected'], </div><div class='del'>-                     @images['big-folder'], []</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('elemTxt', :text, :justify=&gt;:center, </div><div class='del'>-                   :lines=&gt;1, :width=&gt;71, :wrap=&gt;:word, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('elemSel', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray', ['selected']</div><div class='del'>-                   ])</div><div class='del'>-</div><div class='del'>-  # image + text</div><div class='del'>-  s = t.style_create('STYLE', :orient=&gt;:vertical)</div><div class='del'>-  t.style_elements(s, ['elemSel', 'elemImg', 'elemTxt'])</div><div class='del'>-  t.style_layout(s, 'elemImg', :expand=&gt;:we)</div><div class='del'>-  t.style_layout(s, 'elemTxt', </div><div class='del'>-                 :pady=&gt;[4,0], :padx=&gt;2, :squeeze=&gt;:x, :expand=&gt;:we)</div><div class='del'>-  t.style_layout(s, 'elemSel', :union=&gt;['elemTxt'])</div><div class='del'>-</div><div class='del'>-  @Priv[:edit, t] = ['elemTxt']</div><div class='del'>-  @Priv[:sensitive, t] = [ [0, 'STYLE', 'elemImg', 'elemTxt'] ]</div><div class='del'>-  @Priv[:dragimage, t] = [ [0, 'STYLE', 'elemImg', 'elemTxt'] ]</div><div class='del'>-</div><div class='del'>-  t.notify_bind(t, 'Edit-accept', </div><div class='del'>-                proc{|w, i, tt| w.item_text(i, 0, tt)}, '%T %I %t')</div><div class='del'>-</div><div class='del'>-  dir_proc = proc{|file|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    t.item_style_set(item, 0, 'STYLE')</div><div class='del'>-    t.item_text(item, 0, File.basename(file))</div><div class='del'>-    t.item_lastchild(:root, item)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  file_proc = proc{|file|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    t.item_style_set(item, 0, 'STYLE')</div><div class='del'>-</div><div class='del'>-    ext = File.extname(file)</div><div class='del'>-    case ext</div><div class='del'>-    when '.dll'</div><div class='del'>-      img = 'big-dll'</div><div class='del'>-    when '.exe'</div><div class='del'>-      img = 'big-exe'</div><div class='del'>-    when '.txt'</div><div class='del'>-      img = 'big-txt'</div><div class='del'>-    else</div><div class='del'>-      img = 'big-file'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    type = ext.upcase</div><div class='del'>-    type = type[1..-1] &lt;&lt; ' ' unless type.empty?</div><div class='del'>-    type &lt;&lt; 'File'</div><div class='del'>-</div><div class='del'>-    t.item_complex(item, </div><div class='del'>-                   [ </div><div class='del'>-                     ['elemImg', {:image=&gt;[@sel_images[img], ['selected'], </div><div class='del'>-                                           @images[img], []]}],</div><div class='del'>-                     ['elemTxt', {:text=&gt;File.basename(file)}]</div><div class='del'>-                   ])</div><div class='del'>-    t.item_lastchild(:root, item)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  demoExplorerAux(t, dir_proc, file_proc)</div><div class='del'>-</div><div class='del'>-  t.activate(t.index('root firstchild'))</div><div class='del'>-</div><div class='del'>-  t.notify_bind(t, 'ActiveItem', </div><div class='del'>-                proc{|w, a, c|</div><div class='del'>-                  w.item_element_configure(a, 0, 'elemTxt', :lines=&gt;'')</div><div class='del'>-                  w.item_element_configure(c, 0, 'elemTxt', :lines=&gt;3)</div><div class='del'>-                }, '%T %p %c')</div><div class='del'>-</div><div class='del'>-  t.bindtags = [ t, 'TreeCtrlFileList', Tk::TreeCtrl, t.winfo_toplevel, :all ]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Tree is horizontal, wrapping occurs at right edge of window, each item</div><div class='del'>-# is as wide as the smallest needed multiple of 110 pixels</div><div class='del'>-def demoExplorerSmallIcons(t)</div><div class='del'>-  demoExplorerList(t)</div><div class='del'>-  t.configure(:orient=&gt;:horizontal, :xscrollincrement=&gt;0)</div><div class='del'>-  t.column_configure(0, :width=&gt;'', :stepwidth=&gt;110, :widthhack=&gt;false)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Tree is vertical, wrapping occurs at bottom of window, each range has the</div><div class='del'>-# same width (as wide as the longest item), xscrollincrement is by range</div><div class='del'>-def demoExplorerList(t)</div><div class='del'>-  height = t.font.metrics(:linespace) + 2</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-</div><div class='del'>-  t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-              :itemheight=&gt;height, :selectmode=&gt;:extended, :wrap=&gt;:window, </div><div class='del'>-              :showheader=&gt;false, :scrollmargin=&gt;16, </div><div class='del'>-              :xscrolldelay=&gt;[500, 50], :yscrolldelay=&gt;[500, 50])</div><div class='del'>-</div><div class='del'>-  init_pics('small-*')</div><div class='del'>-</div><div class='del'>-  if $HasColumnCreate</div><div class='del'>-    t.column_create(:widthhack=&gt;true)</div><div class='del'>-  else</div><div class='del'>-    t.column_configure(0, :widthhack=&gt;true)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('elemImg', :image, </div><div class='del'>-                   :image=&gt;[</div><div class='del'>-                     @sel_images['small-folder'], ['selected'], </div><div class='del'>-                     @images['small-folder'], []</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('elemTxt', :text, :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('elemSel', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray', ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-</div><div class='del'>-  # image + text</div><div class='del'>-  s = t.style_create('STYLE')</div><div class='del'>-  t.style_elements(s, ['elemSel', 'elemImg', 'elemTxt'])</div><div class='del'>-  t.style_layout(s, 'elemImg', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'elemTxt', :squeeze=&gt;:x, :expand=&gt;:ns, :padx=&gt;[2,0])</div><div class='del'>-  t.style_layout(s, 'elemSel', :union=&gt;['elemTxt'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  @Priv[:edit, t] = ['elemTxt']</div><div class='del'>-  @Priv[:sensitive, t] = [ [0, 'STYLE', 'elemImg', 'elemTxt'] ]</div><div class='del'>-  @Priv[:dragimage, t] = [ [0, 'STYLE', 'elemImg', 'elemTxt'] ]</div><div class='del'>-</div><div class='del'>-  t.notify_bind(t, 'Edit-accept', </div><div class='del'>-                proc{|w, i, tt| w.item_text(i, 0, tt)}, '%T %I %t')</div><div class='del'>-</div><div class='del'>-  dir_proc = proc{|file|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    t.item_style_set(item, 0, 'STYLE')</div><div class='del'>-    t.item_text(item, 0, File.basename(file))</div><div class='del'>-    t.item_lastchild(:root, item)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  file_proc = proc{|file|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    t.item_style_set(item, 0, 'STYLE')</div><div class='del'>-</div><div class='del'>-    ext = File.extname(file)</div><div class='del'>-    case ext</div><div class='del'>-    when '.dll'</div><div class='del'>-      img = 'small-dll'</div><div class='del'>-    when '.exe'</div><div class='del'>-      img = 'small-exe'</div><div class='del'>-    when '.txt'</div><div class='del'>-      img = 'small-txt'</div><div class='del'>-    else</div><div class='del'>-      img = 'small-file'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    type = ext.upcase</div><div class='del'>-    type = type[1..-1] &lt;&lt; ' ' unless type.empty?</div><div class='del'>-    type &lt;&lt; 'File'</div><div class='del'>-</div><div class='del'>-    t.item_complex(item, </div><div class='del'>-                   [ </div><div class='del'>-                     ['elemImg', {:image=&gt;[@sel_images[img], ['selected'], </div><div class='del'>-                                           @images[img], []]}],</div><div class='del'>-                     ['elemTxt', {:text=&gt;File.basename(file)}]</div><div class='del'>-                   ])</div><div class='del'>-    t.item_lastchild(:root, item)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  demoExplorerAux(t, dir_proc, file_proc)</div><div class='del'>-</div><div class='del'>-  t.activate(t.item_firstchild(:root))</div><div class='del'>-</div><div class='del'>-  t.bindtags = [ t, 'TreeCtrlFileList', Tk::TreeCtrl, t.winfo_toplevel, :all ]</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/help.rb b/ext/tk/sample/tkextlib/treectrl/help.rb<br/>deleted file mode 100644<br/>index af026fc006..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/help.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/help.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,404 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Demo: Help contents</div><div class='del'>-#</div><div class='del'>-def demoHelpContents(t)</div><div class='del'>-  height = t.font.metrics(:linespace)</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-  t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-              :itemheight=&gt;height, :selectmode=&gt;:browse)</div><div class='del'>-</div><div class='del'>-  init_pics('help-*')</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.column_create(:text=&gt;'Help Contents')</div><div class='del'>-  else # TreeCtrl 1.0</div><div class='del'>-    t.column_configure(0, :text=&gt;'Help Contents')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Define a new item state</div><div class='del'>-  t.state_define('mouseover')</div><div class='del'>-</div><div class='del'>-  t.element_create('e1', :image, :image=&gt;@images['help-page'])</div><div class='del'>-  t.element_create('e2', :image, :image=&gt;[</div><div class='del'>-                     @images['help-book-open'], ['open'], </div><div class='del'>-                     @images['help-book-closed'], [], </div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('e3', :text, </div><div class='del'>-                   :font=&gt;[t.font.dup.underline(true), ['mouseover']], </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlightText, ['selected', 'focus'], </div><div class='del'>-                     'blue', ['mouseover']</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('e4', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[@SystemHighlight, ['selected', 'focus']])</div><div class='del'>-</div><div class='del'>-  # book</div><div class='del'>-  s = t.style_create('s1')</div><div class='del'>-  t.style_elements(s, ['e4', 'e1', 'e3'])</div><div class='del'>-  t.style_layout(s, 'e1', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e4', :union=&gt;['e3'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  # page</div><div class='del'>-  s = t.style_create('s2')</div><div class='del'>-  t.style_elements(s, ['e4', 'e2', 'e3'])</div><div class='del'>-  t.style_layout(s, 'e2', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e4', :union=&gt;['e3'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  parentList = [:root, '', '', '', '', '', '']</div><div class='del'>-  parent = :root</div><div class='del'>-  [</div><div class='del'>-     [0, 's1', "Welcome to Help"], </div><div class='del'>-     [0, 's2', "Introducing Windows 98"], </div><div class='del'>-        [1, 's2', "How to Use Help"], </div><div class='del'>-           [2, 's1', "Find a topic"], </div><div class='del'>-           [2, 's1', "Get more out of help"],</div><div class='del'>-        [1, 's2', "Register Your Software"],</div><div class='del'>-           [2, 's1', "Registering Windows 98 online"], </div><div class='del'>-        [1, 's2', "What's New in Windows 98"], </div><div class='del'>-           [2, 's1', "Innovative, easy-to-use features"], </div><div class='del'>-           [2, 's1', "Improved reliability"], </div><div class='del'>-           [2, 's1', "A faster operating system"], </div><div class='del'>-           [2, 's1', "True Web integration"], </div><div class='del'>-           [2, 's1', "More entertaining and fun"], </div><div class='del'>-        [1, 's2', "If You're New to Windows 98"], </div><div class='del'>-           [2, 's2', "Tips for Macintosh Users"], </div><div class='del'>-              [3, 's1', "Why does the mouse have two buttons?"]</div><div class='del'>-  ].each{|depth, style, text|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    t.item_style_set(item, 0, style)</div><div class='del'>-    t.item_element_configure(item, 0, 'e3', :text=&gt;text)</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      t.item_collapse(item)</div><div class='del'>-    else # TreeCtrl 1.0</div><div class='del'>-      t.collapse(item)</div><div class='del'>-    end</div><div class='del'>-    t.item_lastchild(parentList[depth], item)</div><div class='del'>-    depth += 1</div><div class='del'>-    parentList[depth] = item</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp = TkBindTag.new</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Double-ButtonPress-1', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      if w.identify(x, y)[0] == 'header'</div><div class='del'>-                        Tk::TreeCtrl::BindCallback.doubleButton1(w, x, y)</div><div class='del'>-                      else</div><div class='del'>-                        helpButton1(w, x, y)</div><div class='del'>-                      end</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('ButtonPress-1', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      helpButton1(w, x, y)</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Button1-Motion', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      helpMotion1(w, x, y)</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Button1-Leave', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      helpLeave1(w, x, y)</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('ButtonRelease-1', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      helpRelease1(w, x, y)</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Motion', proc{|w, x, y| helpMotion(w, x, y) }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Leave', proc{|w, x, y| helpMotion(w, x, y) }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('KeyPress-Return', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      if w.selection_get.length == 1</div><div class='del'>-                        if $Version_1_1_OrLater</div><div class='del'>-                          w.item_toggle(w.selection_get[0])</div><div class='del'>-                        else # TreeCtrl 1.0</div><div class='del'>-                          w.toggle(w.selection_get[0])</div><div class='del'>-                        end</div><div class='del'>-                      end</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  @Priv[:help, :prev] = ''</div><div class='del'>-</div><div class='del'>-  t.bindtags = [ t, treeCtrlHelp, Tk::TreeCtrl, t.winfo_toplevel, :all ]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# This is an alternate implementation that does not define a new item state</div><div class='del'>-# to change the appearance of the item under the cursor.</div><div class='del'>-def demoHelpContents2(t)</div><div class='del'>-  height = t.font.metrics(:linespace)</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-  t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-              :itemheight=&gt;height, :selectmode=&gt;:browse)</div><div class='del'>-</div><div class='del'>-  init_pics('help-*')</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.column_create(:text=&gt;'Help Contents')</div><div class='del'>-  else # TreeCtrl 1.0</div><div class='del'>-    t.column_configure(0, :text=&gt;'Help Contents')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('e1', :image, :image=&gt;@images['help-page'])</div><div class='del'>-  t.element_create('e2', :image, :image=&gt;[</div><div class='del'>-                     @images['help-book-open'], ['open'], </div><div class='del'>-                     @images['help-book-closed'], [], </div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('e3', :text, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlightText, ['selected', 'focus'], </div><div class='del'>-                     'blue', []</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('e4', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[@SystemHighligh, ['selected', 'focus']])</div><div class='del'>-  t.element_create('e5', :text, :font=&gt;t.font.dup.underline(true), </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlightText, ['selected', 'focus'], </div><div class='del'>-                     'blue', []</div><div class='del'>-                   ])</div><div class='del'>-</div><div class='del'>-  # book</div><div class='del'>-  s = t.style_create('s1')</div><div class='del'>-  t.style_elements(s, ['e4', 'e1', 'e3'])</div><div class='del'>-  t.style_layout(s, 'e1', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e4', :union=&gt;['e3'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  # page</div><div class='del'>-  s = t.style_create('s2')</div><div class='del'>-  t.style_elements(s, ['e4', 'e2', 'e3'])</div><div class='del'>-  t.style_layout(s, 'e2', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e4', :union=&gt;['e3'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  # book (focus)</div><div class='del'>-  s = t.style_create('s1.f')</div><div class='del'>-  t.style_elements(s, ['e4', 'e1', 'e5'])</div><div class='del'>-  t.style_layout(s, 'e1', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e5', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e4', :union=&gt;['e5'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  # page (focus)</div><div class='del'>-  s = t.style_create('s2')</div><div class='del'>-  t.style_elements(s, ['e4', 'e2', 'e5'])</div><div class='del'>-  t.style_layout(s, 'e2', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e5', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e4', :union=&gt;['e5'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  parentList = [:root, '', '', '', '', '', '']</div><div class='del'>-  parent = :root</div><div class='del'>-  [</div><div class='del'>-     [0, 's1', "Welcome to Help"], </div><div class='del'>-     [0, 's2', "Introducing Windows 98"], </div><div class='del'>-        [1, 's2', "How to Use Help"], </div><div class='del'>-           [2, 's1' "Find a topic"], </div><div class='del'>-           [2, 's1', "Get more out of help"],</div><div class='del'>-        [1, 's2', "Register Your Software"],</div><div class='del'>-           [2, 's1', "Registering Windows 98 online"], </div><div class='del'>-        [1, 's2', "What's New in Windows 98"], </div><div class='del'>-           [2, 's1', "Innovative, easy-to-use features"], </div><div class='del'>-           [2, 's1', "Improved reliability"], </div><div class='del'>-           [2, 's1', "A faster operating system"], </div><div class='del'>-           [2, 's1', "True Web integration"], </div><div class='del'>-           [2, 's1', "More entertaining and fun"], </div><div class='del'>-        [1, 's2', "If You're New to Windows 98"], </div><div class='del'>-           [2, 's2', "Tips for Macintosh Users"], </div><div class='del'>-              [3, 's1', "Why does the mouse have two buttons?"]</div><div class='del'>-  ].each{|depth, style, text|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    t.item_style_set(item, 0, style)</div><div class='del'>-    t.item_element_configure(item, 0, 'e3', :text=&gt;text)</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      t.item_collapse(item)</div><div class='del'>-    else # TreeCtrl 1.0</div><div class='del'>-      t.collapse(item)</div><div class='del'>-    end</div><div class='del'>-    t.item_lastchild(parentList[depth], item)</div><div class='del'>-    depth += 1</div><div class='del'>-    parentList[depth] = item</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp = TkBindTag.new</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Double-ButtonPress-1', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      if w.identify(x, y)[0] == 'header'</div><div class='del'>-                        Tk::TreeCtrl::BindCallback.doubleButton1(w, x, y)</div><div class='del'>-                      else</div><div class='del'>-                        helpButton1(w, x, y)</div><div class='del'>-                      end</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('ButtonPress-1', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      helpButton1(w, x, y)</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Button1-Motion', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      helpMotion1(w, x, y)</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Button1-Leave', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      helpLeave1(w, x, y)</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('ButtonRelease-1', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      helpRelease1(w, x, y)</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Motion', proc{|w, x, y| helpMotion(w, x, y) }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('Leave', proc{|w, x, y| helpMotion(w, x, y) }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlHelp.bind('KeyPress-Return', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      if w.selection_get.length == 1</div><div class='del'>-                        w.item_toggle(w.selection_get[0])</div><div class='del'>-                      end</div><div class='del'>-                      Tk.callback_break</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  @Priv[:help, :prev] = ''</div><div class='del'>-</div><div class='del'>-  t.bindtags = [ t, treeCtrlHelp, Tk::TreeCtrl, t.winfo_toplevel, :all ]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def helpButton1(w, x, y)</div><div class='del'>-  w.set_focus</div><div class='del'>-  id = w.identify(x, y)</div><div class='del'>-  @Priv['buttonMode'] = ''</div><div class='del'>-  if id[0] == 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.buttonPress1(w, x, y)</div><div class='del'>-  elsif id[0] == 'item'</div><div class='del'>-    item = id[1]</div><div class='del'>-    # didn't click an element</div><div class='del'>-    return if id.length != 6</div><div class='del'>-    if w.selection_includes(item)</div><div class='del'>-      w.toggle(item)</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-    if w.selection_get.length &gt; 0</div><div class='del'>-      item2 = w.selection_get[0]</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        w.item_collapse(item2)</div><div class='del'>-      else # TreeCtrl 1.0</div><div class='del'>-        w.collapse(item2)</div><div class='del'>-      end</div><div class='del'>-      w.item_ancestors(item2).each{|i|</div><div class='del'>-        if $Version_1_1_OrLater</div><div class='del'>-          w.item_collapse(i) if w.compare(item, '!=', i)</div><div class='del'>-        else # TreeCtrl 1.0</div><div class='del'>-          w.collapse(i) if w.compare(item, '!=', i)</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    w.activate(item)</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      w.item_ancestors(item).each{|i|</div><div class='del'>-        w.item_expand(i)</div><div class='del'>-      }</div><div class='del'>-      w.item_toggle(item)</div><div class='del'>-    else # TreeCtrl 1.0</div><div class='del'>-      w.expand(*(w.item_ancestors(item)))</div><div class='del'>-      w.toggle(item)</div><div class='del'>-    end</div><div class='del'>-    w.selection_modify(item, :all)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def helpMotion1(w, x, y)</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'resize', 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.motion1(w, x, y)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def helpLeave1(w, x, y)</div><div class='del'>-  # This is called when I do ButtonPress-1 on Unix for some reason,</div><div class='del'>-  # and buttonMode is undefined.</div><div class='del'>-  return unless @Priv.exist?('buttonMode')</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'header'</div><div class='del'>-    w.column_configure(@Priv['column'], :sunken=&gt;false)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def helpRelease1(w, x, y)</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'resize', 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.release1(w, x, y)</div><div class='del'>-  end</div><div class='del'>-  @Priv['buttonMode'] = ''</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def helpMotion(w, x, y)</div><div class='del'>-  id = w.identify(x, y)</div><div class='del'>-  if id.empty?</div><div class='del'>-  elsif id[0] == 'header'</div><div class='del'>-  elsif id[0] == 'item'</div><div class='del'>-    item = id[1]</div><div class='del'>-    if id.length == 6</div><div class='del'>-      if @Priv[:help, :prev] != TkComm._get_eval_string(item)</div><div class='del'>-        if @Priv[:help, :prev] != ''</div><div class='del'>-          w.item_state_set(@Priv[:help, :prev], '!mouseover')</div><div class='del'>-        end</div><div class='del'>-        w.item_state_set(item, 'mouseover')</div><div class='del'>-        @Priv[:help, :prev] = item</div><div class='del'>-      end</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  if @Priv[:help, :prev] != ''</div><div class='del'>-    w.item_state_set(@Priv[:help, :prev], '!mouseover')</div><div class='del'>-    @Priv[:help, :prev] = ''</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Alternate implementation doesn't rely on mouseover state</div><div class='del'>-def helpMotion2(w, x, y)</div><div class='del'>-  id = w.identify(x, y)</div><div class='del'>-  if id[0] == 'header'</div><div class='del'>-  elsif !id.empty?</div><div class='del'>-    item = id[1]</div><div class='del'>-    if id.kength == 6</div><div class='del'>-      if @Priv[:help, :prev] != TkComm._get_eval_string(item)</div><div class='del'>-        if @Priv[:help, :prev] != ''</div><div class='del'>-          style = w.item_style_set(@Priv[:help, :prev], 0)</div><div class='del'>-          style.sub!(/\.f$/, '')</div><div class='del'>-          w.item_style_map(@Priv[:help, :prev], 0, style, ['e5', 'e3'])</div><div class='del'>-        end</div><div class='del'>-        style = w.item_style_set(item, 0)</div><div class='del'>-        w.item_style_map(item, 0, style + '.f', ['e3', 'e5'])</div><div class='del'>-        @Priv[:help, :prev] = item</div><div class='del'>-      end</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  if @Priv[:help, :prev] != ''</div><div class='del'>-    style = w.item_style_set(@Priv[:help, :prev], 0)</div><div class='del'>-    style.sub!(/\.f$/, '')</div><div class='del'>-    w.item_style_map(@Priv[:help, :prev], 0, style, ['e5', 'e3'])</div><div class='del'>-    @Priv[:help, :prev] = ''</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/imovie.rb b/ext/tk/sample/tkextlib/treectrl/imovie.rb<br/>deleted file mode 100644<br/>index d61bf9a7c3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/imovie.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/imovie.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,130 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Demo: iMovie</div><div class='del'>-#</div><div class='del'>-def demoIMovie(t)</div><div class='del'>-  t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-              :selectmode=&gt;:browse, :orient=&gt;:horizontal, :wrap=&gt;:window, </div><div class='del'>-              :showheader=&gt;false, :background=&gt;'#dcdcdc')</div><div class='del'>-</div><div class='del'>-  if $HasColumnCreate</div><div class='del'>-    t.column_create</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  init_pics('imovie-*')</div><div class='del'>-</div><div class='del'>-  case @thisPlatform</div><div class='del'>-  when 'macintosh', 'macosx'</div><div class='del'>-    font1 = TkFont.new(['Geneva', 9])</div><div class='del'>-    font2 = TkFont.new(['Geneva', 10])</div><div class='del'>-  when 'unix'</div><div class='del'>-    font1 = TkFont.new(['Helvetica', -12])</div><div class='del'>-    font2 = TkFont.new(['Helvetica', -14])</div><div class='del'>-  else</div><div class='del'>-    font1 = TkFont.new(['Helvetica', 8])</div><div class='del'>-    font2 = TkFont.new(['Helvetica', 10])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('elemTime', :text, :font=&gt;font1)</div><div class='del'>-  t.element_create('elemName', :text, :font=&gt;font2, :lines=&gt;1, :width=&gt;80)</div><div class='del'>-  t.element_create('elemRect', :rect, :outline=&gt;'#827878', :outlinewidth=&gt;1, </div><div class='del'>-                   :fill=&gt;['#ffdc5a', ['selected'], 'white', []])</div><div class='del'>-  t.element_create('elemImg', :image)</div><div class='del'>-  t.element_create('elemShadow', :rect, :outline=&gt;'gray', :outlinewidth=&gt;1, </div><div class='del'>-                   :open=&gt;:wn)</div><div class='del'>-</div><div class='del'>-  s = t.style_create('STYLE', :orient=&gt;:vertical)</div><div class='del'>-  t.style_elements(s, [</div><div class='del'>-                     'elemShadow', 'elemRect', 'elemTime', </div><div class='del'>-                     'elemImg', 'elemName'</div><div class='del'>-                   ])</div><div class='del'>-  t.style_layout(s, 'elemShadow', :detach=&gt;true, </div><div class='del'>-                 :padx=&gt;[1,2], :pady=&gt;[1,2], :iexpand=&gt;:es)</div><div class='del'>-  t.style_layout(s, 'elemTime', :padx=&gt;[2,0])</div><div class='del'>-  t.style_layout(s, 'elemImg', :pady=&gt;[0,1])</div><div class='del'>-  t.style_layout(s, 'elemName', :expand=&gt;:we, :ipady=&gt;[0,2], :padx=&gt;[0,3], </div><div class='del'>-                 :squeeze=&gt;:x)</div><div class='del'>-  t.style_layout(s, 'elemRect', :union=&gt;['elemTime', 'elemImg', 'elemName'], </div><div class='del'>-                 :ipadx=&gt;6, :padx=&gt;[0,3], :pady=&gt;[0,3])</div><div class='del'>-</div><div class='del'>-  # Set default item style</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.defaultstyle([s])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  (0..4).each{|i|</div><div class='del'>-    [</div><div class='del'>-      ['15:20', 'Clip 1', @images['imovie-01']], </div><div class='del'>-      ['19:18', 'Clip 2', @images['imovie-02']], </div><div class='del'>-      ['07:20', 'Clip 3', @images['imovie-03']], </div><div class='del'>-      ['07:20', 'Clip 4', @images['imovie-04']], </div><div class='del'>-      ['07:20', 'Clip 5', @images['imovie-05']], </div><div class='del'>-      ['07:20', 'Clip 6', @images['imovie-06']], </div><div class='del'>-      ['07:20', 'Clip 7', @images['imovie-07']]</div><div class='del'>-    ].each{|time, name, image|</div><div class='del'>-      item = t.item_create</div><div class='del'>-      unless $Version_1_1_OrLater</div><div class='del'>-        t.item_style_set(item, 0, s)</div><div class='del'>-      end</div><div class='del'>-      t.item_element_configure(item, 0, 'elemTime', :text=&gt;time)</div><div class='del'>-      t.item_element_configure(item, 0, 'elemName', :text=&gt;name)</div><div class='del'>-      t.item_element_configure(item, 0, 'elemImg', :image=&gt;image)</div><div class='del'>-      t.item_lastchild(:root, item)</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  t.notify_bind(t, 'Edit-accept', proc{|w, i, c, e, tt|</div><div class='del'>-                  w.item_element_configure(i, c, e, :text=&gt;tt)</div><div class='del'>-                }, '%T %I %C %E %t')</div><div class='del'>-</div><div class='del'>-  iMovie = TkBindTag.new</div><div class='del'>-  iMovie.bind('ButtonPress-1', proc{|w, x, y|</div><div class='del'>-                iMovieButton1(w, x, y)</div><div class='del'>-              }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  t.bindtags = [t, iMovie, Tk::TreeCtrl, t.winfo_toplevel, TkBindTag::ALL]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def iMovieButton1(w, x, y)</div><div class='del'>-  w.set_focus</div><div class='del'>-  id = w.identify(x,y)</div><div class='del'>-</div><div class='del'>-  if id.empty?</div><div class='del'>-    # Click outside any item</div><div class='del'>-</div><div class='del'>-  elsif id[0] == 'header'</div><div class='del'>-    # Click in header</div><div class='del'>-    Tk::TreeCtrl::BindCallback.buttonPress1(w, x, y)</div><div class='del'>-</div><div class='del'>-  elsif id[0] == 'item'</div><div class='del'>-    # Click in item</div><div class='del'>-    Tk::TreeCtrl::BindCallback.buttonPress1(w, x, y)</div><div class='del'>-    Tk.update</div><div class='del'>-    where, item, arg1, arg2, arg3, arg4 = id</div><div class='del'>-    case arg1</div><div class='del'>-    when 'column'</div><div class='del'>-      i = id[1]</div><div class='del'>-      if id.length == 6</div><div class='del'>-        e = id[-1]</div><div class='del'>-        if e == 'elemName'</div><div class='del'>-          exists = TkWinfo.exist?(w.path + '.entry')</div><div class='del'>-          Tk::TreeCtrl::BindCallback.entryOpen(w, i, 0, e)</div><div class='del'>-          ent = TkComm.window(w.path + '.entry')</div><div class='del'>-          unless exists</div><div class='del'>-            ent.configure(:borderwidth=&gt;0, :justify=&gt;:center, </div><div class='del'>-                          :background=&gt;'#ffdc5a')</div><div class='del'>-            x1, y1, x2, y2 = w.item_bbox(i, 0, e)</div><div class='del'>-            ent.place(:y=&gt;y1 - 1)</div><div class='del'>-          end</div><div class='del'>-          ent.selection_clear</div><div class='del'>-          x1, y1, x2, y2 = w.item_bbox(i)</div><div class='del'>-          ent.place(:x=&gt;x1 + 1, :width=&gt;x2 - x1 - 5)</div><div class='del'>-          puts "@#{x - (x1 + 1)}"</div><div class='del'>-          # ent.icursor = ent.index("@#{x - (x1 + 1)}")</div><div class='del'>-          ent.icursor = ent.index(TkComm._at(x - (x1 + 1)))</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'>-  Tk.callback_break</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/layout.rb b/ext/tk/sample/tkextlib/treectrl/layout.rb<br/>deleted file mode 100644<br/>index 745ac86f36..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/layout.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/layout.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,159 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Demo: Layout</div><div class='del'>-#</div><div class='del'>-def demoLayout(t)</div><div class='del'>-  t.configure(:showroot=&gt;false, :showrootbutton=&gt;true, :showbuttons=&gt;true, </div><div class='del'>-              :showlines=&gt;true, :itemheight=&gt;0, :selectmode=&gt;:browse)</div><div class='del'>-</div><div class='del'>-  if $HasColumnCreate</div><div class='del'>-    t.column_create(:text=&gt;'Layout')</div><div class='del'>-  else</div><div class='del'>-    t.column_configure(0, :text=&gt;'Layout')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('e1', :rect, :width=&gt;30, :height=&gt;30, :fill=&gt;'gray20')</div><div class='del'>-  t.element_create('e2', :rect, :width=&gt;30, :height=&gt;30, :fill=&gt;'gray40', </div><div class='del'>-                   :outline=&gt;'blue', :outlinewidth=&gt;3)</div><div class='del'>-  t.element_create('e3', :rect, :fill=&gt;'gray60')</div><div class='del'>-  t.element_create('e4', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], 'gray80', []</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('e5', :rect, :fill=&gt;'{sky blue}', :width=&gt;20, :height=&gt;20)</div><div class='del'>-  t.element_create('e6', :rect, :fill=&gt;'{sea green}', :width=&gt;30, :height=&gt;16)</div><div class='del'>-  t.element_create('e7', :rect, :fill=&gt;'{sky blue}', :width=&gt;30, :height=&gt;16)</div><div class='del'>-  t.element_create('e8', :rect, :fill=&gt;'gray70', :height=&gt;1)</div><div class='del'>-</div><div class='del'>-  s = t.style_create('s1')</div><div class='del'>-  t.style_elements(s, ['e4', 'e3', 'e1', 'e2', 'e5', 'e6', 'e7'])</div><div class='del'>-  t.style_layout(s, 'e1', :padx=&gt;[28, 4], :pady=&gt;4)</div><div class='del'>-  t.style_layout(s, 'e2', :expand=&gt;:es, :padx=&gt;[0, 38])</div><div class='del'>-  t.style_layout(s, 'e3', :union=&gt;['e1', 'e2'], :ipadx=&gt;4, :ipady=&gt;4, :pady=&gt;2)</div><div class='del'>-  t.style_layout(s, 'e4', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-  t.style_layout(s, 'e5', :detach=&gt;true, :padx=&gt;[2,0], :pady=&gt;2, :iexpand=&gt;:s)</div><div class='del'>-  t.style_layout(s, 'e6', :detach=&gt;true, :expand=&gt;:ws, </div><div class='del'>-                 :padx=&gt;[0,2], :pady=&gt;[2,0])</div><div class='del'>-  t.style_layout(s, 'e7', :detach=&gt;true, :expand=&gt;:wn, </div><div class='del'>-                 :padx=&gt;[0,2], :pady=&gt;[0,2])</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    i = t.item_create(:button=&gt;true)</div><div class='del'>-  else</div><div class='del'>-    i = t.item_create</div><div class='del'>-    t.item_hasbutton(i, true)</div><div class='del'>-  end</div><div class='del'>-  t.item_style_set(i, 0, s)</div><div class='del'>-  t.item_lastchild(:root, i)</div><div class='del'>-  parent = i</div><div class='del'>-</div><div class='del'>-  i = t.item_create()</div><div class='del'>-  unless $Version_1_1_OrLater</div><div class='del'>-    t.item_hasbutton(i, false)</div><div class='del'>-  end</div><div class='del'>-  t.item_style_set(i, 0, s)</div><div class='del'>-  t.item_lastchild(parent, i)</div><div class='del'>-</div><div class='del'>-  ### </div><div class='del'>-</div><div class='del'>-  s = t.style_create('s2')</div><div class='del'>-  t.style_elements(s, ['e4', 'e3', 'e1'])</div><div class='del'>-  t.style_layout(s, 'e1', :padx=&gt;8, :pady=&gt;8, :iexpand=&gt;:e)</div><div class='del'>-  t.style_layout(s, 'e3', :union=&gt;['e1'], :ipadx=&gt;[20,4], :ipady=&gt;[4,12])</div><div class='del'>-  t.style_layout(s, 'e4', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    i = t.item_create(:button=&gt;true)</div><div class='del'>-  else</div><div class='del'>-    i = t.item_create</div><div class='del'>-    t.item_hasbutton(i, true)</div><div class='del'>-  end</div><div class='del'>-  t.item_style_set(i, 0, s)</div><div class='del'>-  t.item_lastchild(:root, i)</div><div class='del'>-</div><div class='del'>-  i2 = t.item_create()</div><div class='del'>-  unless $Version_1_1_OrLater</div><div class='del'>-    t.item_hasbutton(i2, false)</div><div class='del'>-  end</div><div class='del'>-  t.item_style_set(i2, 0, s)</div><div class='del'>-  t.item_lastchild(i, i2)</div><div class='del'>-</div><div class='del'>-  ### </div><div class='del'>-</div><div class='del'>-  s = t.style_create('s3')</div><div class='del'>-  t.style_elements(s, ['e4', 'e3', 'e1', 'e5', 'e6'])</div><div class='del'>-  t.style_layout(s, 'e4', :union=&gt;['e1', 'e6'], :ipadx=&gt;8, :ipady=&gt;[8,0])</div><div class='del'>-  t.style_layout(s, 'e3', :union=&gt;['e1', 'e5'], :ipadx=&gt;4, :ipady=&gt;4)</div><div class='del'>-  t.style_layout(s, 'e5', :ipady=&gt;[0,20])</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    i = t.item_create(:button=&gt;true)</div><div class='del'>-  else</div><div class='del'>-    i = t.item_create</div><div class='del'>-    t.item_hasbutton(i, true)</div><div class='del'>-  end</div><div class='del'>-  t.item_style_set(i, 0, s)</div><div class='del'>-  t.item_lastchild(:root, i)</div><div class='del'>-</div><div class='del'>-  i2 = t.item_create()</div><div class='del'>-  unless $Version_1_1_OrLater</div><div class='del'>-    t.item_hasbutton(i2, false)</div><div class='del'>-  end</div><div class='del'>-  t.item_style_set(i2, 0, s)</div><div class='del'>-  t.item_lastchild(i, i2)</div><div class='del'>-</div><div class='del'>-  ### </div><div class='del'>-</div><div class='del'>-  t.element_create('eb', :border, :background=&gt;@SystemButtonFace, </div><div class='del'>-                   :relief=&gt;[:sunken, ['selected'], :raised, []], </div><div class='del'>-                   :thickness=&gt;2, :filled=&gt;true)</div><div class='del'>-  t.element_create('et', :text)</div><div class='del'>-</div><div class='del'>-  text = "Here is a text element surrounded by a border element.\nResize the column to watch me wrap."</div><div class='del'>-</div><div class='del'>-  s = t.style_create('e4')</div><div class='del'>-  t.style_elements(s, ['eb', 'et'])</div><div class='del'>-  t.style_layout(s, 'eb', :union=&gt;['et'], :ipadx=&gt;2, :ipady=&gt;2)</div><div class='del'>-  t.style_layout(s, 'et', :squeeze=&gt;:x)</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    i = t.item_create(:button=&gt;true)</div><div class='del'>-  else</div><div class='del'>-    i = t.item_create</div><div class='del'>-    t.item_hasbutton(i, true)</div><div class='del'>-  end</div><div class='del'>-  t.item_style_set(i, 0, s)</div><div class='del'>-  t.item_text(i, 0, text)</div><div class='del'>-  t.item_lastchild(:root, i)</div><div class='del'>-  parent = i</div><div class='del'>-</div><div class='del'>-  i = t.item_create()</div><div class='del'>-  unless $Version_1_1_OrLater</div><div class='del'>-    t.item_hasbutton(i, false)</div><div class='del'>-  end</div><div class='del'>-  t.item_style_set(i, 0, s)</div><div class='del'>-  t.item_text(i, 0, text)</div><div class='del'>-  t.item_lastchild(parent, i)</div><div class='del'>-</div><div class='del'>-  ### </div><div class='del'>-</div><div class='del'>-  styleNum = 5</div><div class='del'>-  [ </div><div class='del'>-    [:horizontal, [:s, :ns, :n]], </div><div class='del'>-    [:vertical,   [:e, :we, :w]]</div><div class='del'>-  ].each{|orient, expandList|</div><div class='del'>-    expandList.each{|expand|</div><div class='del'>-      s = t.style_create("s#{styleNum}", :orient=&gt;orient)</div><div class='del'>-      t.style_elements(s, ['e4', 'e8', 'e2', 'e5', 'e6'])</div><div class='del'>-      t.style_layout(s, 'e4', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-      t.style_layout(s, 'e8', :detach=&gt;true, :expand=&gt;:n, :iexpand=&gt;:e)</div><div class='del'>-      t.style_layout(s, 'e2', :expand=&gt;expand)</div><div class='del'>-      t.style_layout(s, 'e5', :expand=&gt;expand)</div><div class='del'>-      t.style_layout(s, 'e6', :expand=&gt;expand)</div><div class='del'>-      styleNum += 1</div><div class='del'>-</div><div class='del'>-      i = t.item_create()</div><div class='del'>-      t.item_style_set(i, 0, s)</div><div class='del'>-      t.item_lastchild(:root, i)</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/mailwasher.rb b/ext/tk/sample/tkextlib/treectrl/mailwasher.rb<br/>deleted file mode 100644<br/>index 836e1e87de..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/mailwasher.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/mailwasher.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,269 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Demo: MailWasher</div><div class='del'>-#</div><div class='del'>-def demoMailWasher(t)</div><div class='del'>-  init_pics('*checked')</div><div class='del'>-</div><div class='del'>-  height = t.font.metrics(:linespace) + 2</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-</div><div class='del'>-  t.configure(:showroot=&gt;false, :showrootbutton=&gt;false, :showbuttons=&gt;false, </div><div class='del'>-              :showlines=&gt;false, :itemheight=&gt;height, :selectmode=&gt;:browse, </div><div class='del'>-              :xscrollincrement=&gt;1)</div><div class='del'>-</div><div class='del'>-  pad = 4</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.column_create(:text=&gt;'Delete', :textpadx=&gt;pad, :tag=&gt;'delete')</div><div class='del'>-    t.column_create(:text=&gt;'Bounce', :textpadx=&gt;pad, :tag=&gt;'bounce')</div><div class='del'>-    t.column_create(:text=&gt;'Status', :width=&gt;80, :textpadx=&gt;pad, </div><div class='del'>-                    :tag=&gt;'status')</div><div class='del'>-    t.column_create(:text=&gt;'Size', :width=&gt;40, :textpadx=&gt;pad, </div><div class='del'>-                    :justify=&gt;:right, :tag=&gt;'size')</div><div class='del'>-    t.column_create(:text=&gt;'From', :width=&gt;140, :textpadx=&gt;pad, :tag=&gt;'from')</div><div class='del'>-    t.column_create(:text=&gt;'Subject', :width=&gt;240, :textpadx=&gt;pad, </div><div class='del'>-                    :tag=&gt;'subject')</div><div class='del'>-    t.column_create(:text=&gt;'Received', :textpadx=&gt;pad, :arrow=&gt;:up, </div><div class='del'>-                    :arrowpad=&gt;[4,0], :tag=&gt;'received')</div><div class='del'>-    t.column_create(:text=&gt;'Attachments', :textpadx=&gt;pad, :tag=&gt;'attachments')</div><div class='del'>-</div><div class='del'>-    t.state_define('CHECK')</div><div class='del'>-</div><div class='del'>-    t.element_create('imgCheck', :image, :image=&gt;[</div><div class='del'>-                       @images['checked'], ['CHECK'], @images['unchecked'], []</div><div class='del'>-                     ])</div><div class='del'>-</div><div class='del'>-  else # TreeCtrl 1.0</div><div class='del'>-    t.column_configure(0, :text=&gt;'Delete', :textpadx=&gt;pad, :tag=&gt;'delete')</div><div class='del'>-    t.column_configure(1, :text=&gt;'Bounce', :textpadx=&gt;pad, :tag=&gt;'bounce')</div><div class='del'>-    t.column_configure(2, :text=&gt;'Status', :width=&gt;80, :textpadx=&gt;pad, </div><div class='del'>-                       :tag=&gt;'status')</div><div class='del'>-    t.column_configure(3, :text=&gt;'Size', :width=&gt;40, :textpadx=&gt;pad, </div><div class='del'>-                       :justify=&gt;:right, :tag=&gt;'size')</div><div class='del'>-    t.column_configure(4, :text=&gt;'From', :width=&gt;140, :textpadx=&gt;pad, </div><div class='del'>-                       :tag=&gt;'from')</div><div class='del'>-    t.column_configure(5, :text=&gt;'Subject', :width=&gt;240, :textpadx=&gt;pad, </div><div class='del'>-                       :tag=&gt;'subject')</div><div class='del'>-    t.column_configure(6, :text=&gt;'Received', :textpadx=&gt;pad, :arrow=&gt;:up, </div><div class='del'>-                       :arrowpad=&gt;[4,0], :tag=&gt;'received')</div><div class='del'>-    t.column_configure(7, :text=&gt;'Attachments', :textpadx=&gt;pad, </div><div class='del'>-                       :tag=&gt;'attachments')</div><div class='del'>-</div><div class='del'>-    t.element_create('imgOff', :image, :image=&gt;@images['unchecked'])</div><div class='del'>-    t.element_create('imgOn', :image, :image=&gt;@images['checked'])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('border', :rect, :open=&gt;:nw, :outline=&gt;'gray', </div><div class='del'>-                   :outlinewidth=&gt;1, :fill=&gt;[@SystemHighlight, ['selected']])</div><div class='del'>-  t.element_create('txtAny', :text, :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected']])</div><div class='del'>-  t.element_create('txtNone', :text, :text=&gt;'none', :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected']])</div><div class='del'>-  t.element_create('txtYes', :text, :text=&gt;'yes', :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected']])</div><div class='del'>-  t.element_create('txtNormal', :text, :text=&gt;'Normal', :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected'], '#006800', []])</div><div class='del'>-  t.element_create('txtPossSpam', :text, :text=&gt;'Possible Spam', :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected'], '#787800', []])</div><div class='del'>-  t.element_create('txtProbSpam', :text, :text=&gt;'Probably Spam', :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected'], '#FF9000', []])</div><div class='del'>-  t.element_create('txtBlacklist', :text, :text=&gt;'Blacklisted', :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected'], '#FF5800', []])</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    s = t.style_create('styCheck')</div><div class='del'>-    t.style_elements(s, ['border', 'imgCheck'])</div><div class='del'>-    t.style_layout(s, 'border', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-    t.style_layout(s, 'imgCheck', :expand=&gt;:news)</div><div class='del'>-  else</div><div class='del'>-    ['Off', 'On'].each{|name|</div><div class='del'>-      s = t.style_create('sty' &lt;&lt; name)</div><div class='del'>-      i = 'img' &lt;&lt; name</div><div class='del'>-      t.style_elements(s, ['border', i])</div><div class='del'>-      t.style_layout(s, 'border', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-      t.style_layout(s, i, :expand=&gt;:news)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  pad = 4</div><div class='del'>-</div><div class='del'>-  %w(Any None Yes Normal PossSpam ProbSpam Blacklist).each{|name|</div><div class='del'>-    s = t.style_create('sty' &lt;&lt; name)</div><div class='del'>-    e = 'txt' &lt;&lt; name</div><div class='del'>-    t.style_elements(s, ['border', e])</div><div class='del'>-    t.style_layout(s, 'border', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-    t.style_layout(s, e, :padx=&gt;pad, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  [</div><div class='del'>-    ['baldy@spammer.com',  "Your hair is thinning"], </div><div class='del'>-    ['flat@spammer.com', "Your breasts are too small"], </div><div class='del'>-    ['tiny@spammer.com',  "Your penis is too small"], </div><div class='del'>-    ['dumbass@spammer.com', "You are not very smart"], </div><div class='del'>-    ['bankrobber@spammer.com', "You need more money"], </div><div class='del'>-    ['loser@spammer.com', "You need better friends"], </div><div class='del'>-    ['gossip@spammer.com', "Find out what your coworkers think about you"], </div><div class='del'>-    ['whoami@spammer.com', "Find out what you think about yourself"],</div><div class='del'>-    ['downsized@spammer.com', "You need a better job"], </div><div class='del'>-    ['poorhouse@spammer.com', "Your mortgage is a joke"], </div><div class='del'>-    ['spam4ever@spammer.com', "You need more spam"]</div><div class='del'>-  ].each{|frm, subj|</div><div class='del'>-    item = t.item_create</div><div class='del'>-    status = ['styNormal','styPossSpam','styProbSpam','styBlacklist'][rand(4)]</div><div class='del'>-    attachments = ['styNone','styYes'][rand(2)]</div><div class='del'>-</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      delete = [false, true][rand(2)]</div><div class='del'>-      bounce = [false, true][rand(2)]</div><div class='del'>-      t.item_style_set(item, </div><div class='del'>-                       0, 'styCheck', 1, 'styCheck', 2, status, 3, 'styAny', </div><div class='del'>-                       4, 'styAny', 5, 'styAny', 6, 'styAny', 7, attachments)</div><div class='del'>-      t.item_state_forcolumn(item, 'delete', 'CHECK') if delete</div><div class='del'>-      t.item_state_forcolumn(item, 'bounce', 'CHECK') if bounce</div><div class='del'>-</div><div class='del'>-    else # TreeCtrl 1.0</div><div class='del'>-      delete = ['styOn', 'styOff'][rand(2)]</div><div class='del'>-      bounce = ['styOn', 'styOff'][rand(2)]</div><div class='del'>-      t.item_style_set(item, </div><div class='del'>-                       0, delete, 1, bounce, 2, status, 3, 'styAny', </div><div class='del'>-                       4, 'styAny', 5, 'styAny', 6, 'styAny', 7, attachments)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    bytes = 512 + rand(1024 * 12)</div><div class='del'>-    size = "#{bytes / 1024 + 1}KB"</div><div class='del'>-    seconds = Tk::Clock.seconds - rand(100000)</div><div class='del'>-    received = Tk::Clock.format(seconds, '%d/%m/%y %I:%M %p')</div><div class='del'>-    t.item_text(item, 3, size, 4, frm, 5, subj, 6, received)</div><div class='del'>-    t.item_lastchild(:root, item)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  sortColumn = 6</div><div class='del'>-  t.notify_bind(t, 'Header-invoke', </div><div class='del'>-                proc{|c, w|</div><div class='del'>-                  if c == sortColumn</div><div class='del'>-                    if w.column_cget(sortColumn, :arrow) == 'down'</div><div class='del'>-                      order = :increasing</div><div class='del'>-                      arrow = :up</div><div class='del'>-                    else</div><div class='del'>-                      order = :decreasing</div><div class='del'>-                      arrow = :down</div><div class='del'>-                    end</div><div class='del'>-                  else</div><div class='del'>-                    if w.column_cget(sortColumn, :arrow) == 'down'</div><div class='del'>-                      order = :decreasing</div><div class='del'>-                      arrow = :down</div><div class='del'>-                    else</div><div class='del'>-                      order = :increasing</div><div class='del'>-                      arrow = :up</div><div class='del'>-                    end</div><div class='del'>-                    w.column_configure(sortColumn, :arrow=&gt;:none)</div><div class='del'>-                    sortColumn = c</div><div class='del'>-                  end</div><div class='del'>-                  w.column_configure(c, :arrow=&gt;arrow)</div><div class='del'>-                  case w.column_cget(c, :tag)</div><div class='del'>-                  when 'bounce', 'delete'</div><div class='del'>-                    w.item_sort(:root, order, </div><div class='del'>-                                { </div><div class='del'>-                                  :column=&gt;c, </div><div class='del'>-                                  :command=&gt;proc{|item1, item2|</div><div class='del'>-                                    compareOnOff(w, c, item1, item2)</div><div class='del'>-                                  }</div><div class='del'>-                                }, </div><div class='del'>-                                { :column=&gt;'subject', :dictionary=&gt;true })</div><div class='del'>-                  when 'status'</div><div class='del'>-                    w.item_sort(:root, order, </div><div class='del'>-                                { :column=&gt;c, :dictionary=&gt;true })</div><div class='del'>-                  when 'from'</div><div class='del'>-                    w.item_sort(:root, order, </div><div class='del'>-                                { :column=&gt;c, :dictionary=&gt;true }, </div><div class='del'>-                                { :column=&gt;'subject', :dictionary=&gt;true })</div><div class='del'>-                  when 'subject'</div><div class='del'>-                    w.item_sort(:root, order, </div><div class='del'>-                                { :column=&gt;c, :dictionary=&gt;true })</div><div class='del'>-                  when 'size'</div><div class='del'>-                    w.item_sort(:root, order, </div><div class='del'>-                                { :column=&gt;c, :dictionary=&gt;true }, </div><div class='del'>-                                { :column=&gt;'subject', :dictionary=&gt;true })</div><div class='del'>-                  when 'received'</div><div class='del'>-                    w.item_sort(:root, order, </div><div class='del'>-                                { :column=&gt;c, :dictionary=&gt;true }, </div><div class='del'>-                                { :column=&gt;'subject', :dictionary=&gt;true })</div><div class='del'>-                  when 'attachments'</div><div class='del'>-                    w.item_sort(:root, order, </div><div class='del'>-                                { :column=&gt;c, :dictionary=&gt;true }, </div><div class='del'>-                                { :column=&gt;'subject', :dictionary=&gt;true })</div><div class='del'>-                  end</div><div class='del'>-                }, '%C %T')</div><div class='del'>-</div><div class='del'>-  mailWasher = TkBindTag.new</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    mailWasher.bind('ButtonPress-1', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      id = w.identify(x, y)</div><div class='del'>-                      if id.empty?</div><div class='del'>-                      elsif id[0] == 'header'</div><div class='del'>-                      else</div><div class='del'>-                        what, item, where, arg1, arg2, arg3 = id</div><div class='del'>-                        if where == 'column'</div><div class='del'>-                          tag = w.column_cget(arg1, :tag)</div><div class='del'>-                          if tag == 'delete' || tag == 'bounce'</div><div class='del'>-                            w.item_state_forcolumn(item, arg1, '~CHECK')</div><div class='del'>-                          end</div><div class='del'>-                        end</div><div class='del'>-                      end</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-  else # TreeCtrl 1.0</div><div class='del'>-    mailWasher.bind('ButtonPress-1', </div><div class='del'>-                    proc{|w, x, y|</div><div class='del'>-                      id = w.identify(x, y)</div><div class='del'>-                      if id.empty?</div><div class='del'>-                      elsif id[0] == 'header'</div><div class='del'>-                      else</div><div class='del'>-                        what, item, where, arg1, arg2, arg3 = id</div><div class='del'>-                        if where == 'column'</div><div class='del'>-                          tag = w.column_cget(arg1, :tag)</div><div class='del'>-                          if tag == 'delete' || tag == 'bounce'</div><div class='del'>-                            style = w.item_style_set(item, arg1)</div><div class='del'>-                            if style == 'styOn'</div><div class='del'>-                              style = 'styOff'</div><div class='del'>-                            else</div><div class='del'>-                              style = 'styOn'</div><div class='del'>-                            end</div><div class='del'>-                            w.item_style_set(item, arg1, style)</div><div class='del'>-                            @display_styles_in_item.call(item)</div><div class='del'>-                          end</div><div class='del'>-                        end</div><div class='del'>-                      end</div><div class='del'>-                    }, '%W %x %y')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.bindtags = [t, mailWasher, Tk::TreeCtrl, t.winfo_toplevel, TkBindTag::ALL]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $Version_1_1_OrLater</div><div class='del'>-  def compareOnOff(w, c, item1, item2)</div><div class='del'>-    s1 = w.item_state_forcolumn(item1, c)</div><div class='del'>-    s2 = w.item_state_forcolumn(item2, c)</div><div class='del'>-    if (s1 == s2)</div><div class='del'>-      0</div><div class='del'>-    elsif (s1 == 'CHECK')</div><div class='del'>-      -1</div><div class='del'>-    else</div><div class='del'>-      1</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-else # TreeCtrl 1.0</div><div class='del'>-  def compareOnOff(w, c, item1, item2)</div><div class='del'>-    s1 = w.item_style_set(item1, c)</div><div class='del'>-    s2 = w.item_style_set(item2, c)</div><div class='del'>-    if (s1 == s2)</div><div class='del'>-      0</div><div class='del'>-    elsif (s1 == 'styOff')</div><div class='del'>-      -1</div><div class='del'>-    else</div><div class='del'>-      1</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/outlook-folders.rb b/ext/tk/sample/tkextlib/treectrl/outlook-folders.rb<br/>deleted file mode 100644<br/>index c3af86868e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/outlook-folders.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/outlook-folders.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,124 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Demo: Outlook Express folder list</div><div class='del'>-#</div><div class='del'>-def demoOutlookFolders(t)</div><div class='del'>-  init_pics('outlook-*')</div><div class='del'>-</div><div class='del'>-  height = t.font.metrics(:linespace) + 2</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-</div><div class='del'>-  t.configure(:itemheight=&gt;height, :selectmode=&gt;:browse, :showlines=&gt;true, </div><div class='del'>-              :showroot=&gt;true, :showrootbutton=&gt;false, :showbuttons=&gt;true)</div><div class='del'>-</div><div class='del'>-  if $HasColumnCreate</div><div class='del'>-    t.column_create(:text=&gt;'Folders')</div><div class='del'>-  else</div><div class='del'>-    t.column_configure(0, :text=&gt;'Folders')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('e1', :image)</div><div class='del'>-  t.element_create('e2', :text, :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('e3', :text, :lines=&gt;1, :font=&gt;t.font.dup.weight(:bold), </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('e4', :text, :fill=&gt;'blue')</div><div class='del'>-  t.element_create('e5', :image, :image=&gt;@images['outlook-folder'])</div><div class='del'>-  t.element_create('e6', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray', ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-</div><div class='del'>-  # image + text</div><div class='del'>-  s = t.style_create('s1')</div><div class='del'>-  t.style_elements(s, ['e6', 'e1', 'e2'])</div><div class='del'>-  t.style_layout(s, 'e1', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e2', :padx=&gt;[4,0], :expand=&gt;:ns, :squeeze=&gt;:x)</div><div class='del'>-  t.style_layout(s, 'e6', :union=&gt;['e2'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  # image + text + text</div><div class='del'>-  s = t.style_create('s2')</div><div class='del'>-  t.style_elements(s, ['e6', 'e1', 'e3', 'e4'])</div><div class='del'>-  t.style_layout(s, 'e1', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :padx=&gt;4, :expand=&gt;:ns, :squeeze=&gt;:x)</div><div class='del'>-  t.style_layout(s, 'e4', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e6', :union=&gt;['e3'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  # folder + text</div><div class='del'>-  s = t.style_create('s3')</div><div class='del'>-  t.style_elements(s, ['e6', 'e5', 'e2'])</div><div class='del'>-  t.style_layout(s, 'e5', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e2', :padx=&gt;[4,0], :expand=&gt;:ns, :squeeze=&gt;:x)</div><div class='del'>-  t.style_layout(s, 'e6', :union=&gt;['e2'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  # folder + text + text</div><div class='del'>-  s = t.style_create('s4')</div><div class='del'>-  t.style_elements(s, ['e6', 'e5', 'e3', 'e4'])</div><div class='del'>-  t.style_layout(s, 'e5', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :padx=&gt;4, :expand=&gt;:ns, :squeeze=&gt;:x)</div><div class='del'>-  t.style_layout(s, 'e4', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e6', :union=&gt;['e3'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  t.item_style_set(:root, 0, 's1')</div><div class='del'>-  t.item_complex(:root, </div><div class='del'>-                 [</div><div class='del'>-                   ['e1', {:image=&gt;@images['outlook-main']}], </div><div class='del'>-                   ['e2', {:text=&gt;'Outlook Express'}]</div><div class='del'>-                 ])</div><div class='del'>-</div><div class='del'>-  parentList = [:root, '', '', '', '', '', '']</div><div class='del'>-  parent = :root</div><div class='del'>-  [</div><div class='del'>-     [0, :local, "Local Folders", true, 0], </div><div class='del'>-        [1, :inbox, 'Inbox', false, 5], </div><div class='del'>-        [1, :outbox, 'Outbox', false, 0], </div><div class='del'>-        [1, :sent, "Sent Items", false, 0], </div><div class='del'>-        [1, :deleted, "Deleted Items", false, 50], </div><div class='del'>-        [1, :draft, 'Drafts', false, 0], </div><div class='del'>-        [1, :folder, "Messages to Dad", false, 0], </div><div class='del'>-        [1, :folder, "Messages to Sis", false, 0], </div><div class='del'>-        [1, :folder, "Messages to Me", false, 0], </div><div class='del'>-           [2, :folder, "2001", false, 0], </div><div class='del'>-           [2, :folder, "2000", false, 0], </div><div class='del'>-           [2, :folder, "1999", false, 0], </div><div class='del'>-     [0, :server, "news.gmane.org", true, 0], </div><div class='del'>-        [1, :group, "gmane.comp.lang.lua.general", false, 498]</div><div class='del'>-  ].each{|depth, img, text, button, unread|</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      item = t.item_create(:button=&gt;button)</div><div class='del'>-    else</div><div class='del'>-      item = t.item_create</div><div class='del'>-      t.item_hasbutton(item, button)</div><div class='del'>-    end</div><div class='del'>-    if img == :folder</div><div class='del'>-      if unread != 0</div><div class='del'>-        t.item_style_set(item, 0, 's4')</div><div class='del'>-        t.item_complex(item, </div><div class='del'>-                       [['e3', {:text=&gt;text}], ['e4', {:text=&gt;"(#{unread})"}]])</div><div class='del'>-      else</div><div class='del'>-        t.item_style_set(item, 0, 's3')</div><div class='del'>-        t.item_complex(item, [['e2', {:text=&gt;text}]])</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if unread != 0</div><div class='del'>-        t.item_style_set(item, 0, 's2')</div><div class='del'>-        t.item_complex(item, </div><div class='del'>-                       [</div><div class='del'>-                         ['e1', {:image=&gt;@images["outlook-#{img}"]}], </div><div class='del'>-                         ['e3', {:text=&gt;text}], </div><div class='del'>-                         ['e4', {:text=&gt;"(#{unread})"}]</div><div class='del'>-                       ])</div><div class='del'>-      else</div><div class='del'>-        t.item_style_set(item, 0, 's1')</div><div class='del'>-        t.item_complex(item, </div><div class='del'>-                       [</div><div class='del'>-                         ['e1', {:image=&gt;@images["outlook-#{img}"]}], </div><div class='del'>-                         ['e2', {:text=&gt;text}]</div><div class='del'>-                       ])</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    t.item_lastchild(parentList[depth], item)</div><div class='del'>-    depth += 1</div><div class='del'>-    parentList[depth] = item</div><div class='del'>-  }</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb b/ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb<br/>deleted file mode 100644<br/>index d7e7f7e004..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,448 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Demo: Outlook Express newsgroup messages</div><div class='del'>-#</div><div class='del'>-def demoOutlookNewsgroup(t)</div><div class='del'>-  init_pics('outlook-*')</div><div class='del'>-</div><div class='del'>-  height = t.font.metrics(:linespace)</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-  t.configure(:itemheight=&gt;height, :selectmode=&gt;:browse, :showlines=&gt;false, </div><div class='del'>-              :showroot=&gt;false, :showrootbutton=&gt;false, :showbuttons=&gt;true)</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.column_create(:image=&gt;@images['outlook-clip'], :tag=&gt;'clip')</div><div class='del'>-    t.column_create(:image=&gt;@images['outlook-arrow'], :tag=&gt;'arrow')</div><div class='del'>-    t.column_create(:image=&gt;@images['outlook-watch'], :tag=&gt;'watch')</div><div class='del'>-    t.column_create(:text=&gt;'Subject', :width=&gt;250, :tag=&gt;'subject')</div><div class='del'>-    t.column_create(:text=&gt;'From', :width=&gt;150, :tag=&gt;'from')</div><div class='del'>-    t.column_create(:text=&gt;'Sent', :width=&gt;150, :tag=&gt;'sent')</div><div class='del'>-    t.column_create(:text=&gt;'Size', :width=&gt;60, :justify=&gt;:right, :tag=&gt;'size')</div><div class='del'>-  else # TreeCtrl 1.0</div><div class='del'>-    t.column_configure(0, :image=&gt;@images['outlook-clip'], :tag=&gt;'clip')</div><div class='del'>-    t.column_configure(1, :image=&gt;@images['outlook-arrow'], :tag=&gt;'arrow')</div><div class='del'>-    t.column_configure(2, :image=&gt;@images['outlook-watch'], :tag=&gt;'watch')</div><div class='del'>-    t.column_configure(3, :text=&gt;'Subject', :width=&gt;250, :tag=&gt;'subject')</div><div class='del'>-    t.column_configure(4, :text=&gt;'From', :width=&gt;150, :tag=&gt;'from')</div><div class='del'>-    t.column_configure(5, :text=&gt;'Sent', :width=&gt;150, :tag=&gt;'sent')</div><div class='del'>-    t.column_configure(6, :text=&gt;'Size', :width=&gt;60, :justify=&gt;:right, </div><div class='del'>-                       :tag=&gt;'size')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Would be nice if I could specify a column -tag too</div><div class='del'>-  t.treecolumn = 3</div><div class='del'>-</div><div class='del'>-  # State for a read message</div><div class='del'>-  t.state_define('read')</div><div class='del'>-</div><div class='del'>-  # State for a message with unread descendants</div><div class='del'>-  t.state_define('unread')</div><div class='del'>-</div><div class='del'>-  t.element_create('elemImg', :image, </div><div class='del'>-                   :image=&gt;[</div><div class='del'>-                     @sel_images['outlook-read-2'], </div><div class='del'>-                          ['selected', 'read', 'unread', '!open'], </div><div class='del'>-                     @images['outlook-read-2'], ['read', 'unread', '!open'],</div><div class='del'>-                     @sel_images['outlook-read'], ['selected', 'read'], </div><div class='del'>-                     @images['outlook-read'], ['read'], </div><div class='del'>-                     @sel_images['outlook-unread'], ['selected'], </div><div class='del'>-                     @images['outlook-unread'], []</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('elemTxt', :text, :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']], </div><div class='del'>-                   :font=&gt;[</div><div class='del'>-                     t.font.dup.weight(:bold), ['read', 'unread', '!open'], </div><div class='del'>-                     t.font.dup.weight(:bold), ['!read']</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('sel.e', :rect, :open=&gt;:e, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray',  ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('sel.w', :rect, :open=&gt;:w, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray',  ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('sel.we', :rect, :open=&gt;:we, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray',  ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-</div><div class='del'>-  # Image + text</div><div class='del'>-  s = t.style_create('s1')</div><div class='del'>-  t.style_elements(s, ['sel.e', 'elemImg', 'elemTxt'])</div><div class='del'>-  t.style_layout(s, 'elemImg', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'elemTxt', :padx=&gt;[2,6], :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.e', :union=&gt;['elemTxt'], </div><div class='del'>-                 :iexpand=&gt;:nes, :ipadx=&gt;[2,0])</div><div class='del'>-</div><div class='del'>-  # Text</div><div class='del'>-  s = t.style_create('s2.we')</div><div class='del'>-  t.style_elements(s, ['sel.we', 'elemTxt'])</div><div class='del'>-  t.style_layout(s, 'elemTxt', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.we', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-</div><div class='del'>-  # Text</div><div class='del'>-  s = t.style_create('s2.w')</div><div class='del'>-  t.style_elements(s, ['sel.w', 'elemTxt'])</div><div class='del'>-  t.style_layout(s, 'elemTxt', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.w', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-</div><div class='del'>-  # Set default item style</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.defaultstyle = ['', '', '', 's1', 's2.we', 's2.we', 's2.w']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  msgCnt = 100</div><div class='del'>-  thread = 0</div><div class='del'>-</div><div class='del'>-  @Message = Hash.new{|k, v| k[v] = Hash.new}</div><div class='del'>-  @Message[:count][0] = 0</div><div class='del'>-</div><div class='del'>-  items = [t.index(:root)]</div><div class='del'>-</div><div class='del'>-  (1...(msgCnt)).each{|i|</div><div class='del'>-    item_i = t.item_create</div><div class='del'>-    item_j = nil</div><div class='del'>-    j = nil</div><div class='del'>-    loop {</div><div class='del'>-      j = rand(i)</div><div class='del'>-      item_j = items[j]</div><div class='del'>-      break if j == 0</div><div class='del'>-      next if t.depth(item_j) == 5</div><div class='del'>-      next if @Message[:count][@Message[:thread][item_j]] == 15</div><div class='del'>-      break</div><div class='del'>-    }</div><div class='del'>-    t.item_lastchild(item_j, item_i)</div><div class='del'>-</div><div class='del'>-    @Message[:read][item_i] = (rand(2) == 0)</div><div class='del'>-    if j == 0</div><div class='del'>-      thread += 1</div><div class='del'>-      @Message[:thread][item_i] = thread</div><div class='del'>-      @Message[:seconds][item_i] = (Tk::Clock.seconds - rand(500000))</div><div class='del'>-      @Message[:seconds2][item_i] = @Message[:seconds][item_i]</div><div class='del'>-      @Message[:count][thread] = 1</div><div class='del'>-    else</div><div class='del'>-      @Message[:thread][item_i] = @Message[:thread][item_j]</div><div class='del'>-      @Message[:seconds][item_i] = (@Message[:seconds2][item_j] + rand(10000))</div><div class='del'>-      @Message[:seconds2][item_i] = @Message[:seconds][item_i]</div><div class='del'>-      @Message[:seconds2][item_j] = @Message[:seconds][item_i]</div><div class='del'>-      @Message[:count][@Message[:thread][item_j]] += 1</div><div class='del'>-    end</div><div class='del'>-    items &lt;&lt; item_i</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  (1...(msgCnt)).each{|i|</div><div class='del'>-    item_i = items[i]</div><div class='del'>-    subject = "This is thread number #{@Message[:thread][item_i]}"</div><div class='del'>-    from = 'somebody@somewhere.net'</div><div class='del'>-    sent = Tk::Clock.format(@Message[:seconds][item_i], "%d/%m/%y %I:%M %p")</div><div class='del'>-    size = "#{1 + rand(10)}KB"</div><div class='del'>-</div><div class='del'>-    # This message has been read</div><div class='del'>-    t.item_state_set(item_i, 'read') if @Message[:read][item_i]</div><div class='del'>-</div><div class='del'>-    # This message has unread descendants</div><div class='del'>-    t.item_state_set(item_i, 'unread')  if anyUnreadDescendants(t, item_i)</div><div class='del'>-</div><div class='del'>-    if t.item_numchildren(item_i) &gt; 0</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        t.item_configure(item_i, :button=&gt;true)</div><div class='del'>-      else # TreeCtrl 1.0</div><div class='del'>-        t.item_hasbutton(item_i, true)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Collapse some messages</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        t.item_collapse(item_i) if rand(2) == 0</div><div class='del'>-      else # TreeCtrl 1.0</div><div class='del'>-        t.collapse(item_i) if rand(2) == 0</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless $Version_1_1_OrLater</div><div class='del'>-      t.item_style_set(item_i, 3, 's1', 4, 's2.we', 5, 's2.we', 6, 's2.w')</div><div class='del'>-    end</div><div class='del'>-    t.item_text(item_i, 3, subject, 4, from, 5, sent, 6, size)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # Do something when the selection changes</div><div class='del'>-  t.notify_bind(t, 'Selection', </div><div class='del'>-                proc{|w|</div><div class='del'>-                  if w.selection_count == 1</div><div class='del'>-                    # One item is selected</div><div class='del'>-                    if @Message[:afterId][:id]</div><div class='del'>-                      Tk.after_cancel(@Message[:afterId][:id]) </div><div class='del'>-                    end</div><div class='del'>-                    @Message[:afterId][:item] = w.selection_get[0]</div><div class='del'>-                    @Message[:afterId][:id] = Tk.after(500, proc{</div><div class='del'>-                                                         messageReadDelayed(w)</div><div class='del'>-                                                       })</div><div class='del'>-                  end</div><div class='del'>-                }, '%T')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def messageReadDelayed(t)</div><div class='del'>-  @Message[:afterId].delete(:id)</div><div class='del'>-  i = @Message[:afterId][:item]</div><div class='del'>-  return unless t.selection_includes(i)</div><div class='del'>-</div><div class='del'>-  # This message is not read</div><div class='del'>-  unless @Message[:read][i]</div><div class='del'>-    # Read the message</div><div class='del'>-    t.item_state_set(i, 'read')</div><div class='del'>-    @Message[:read][i] = true</div><div class='del'>-</div><div class='del'>-    # Check ancestors (except root)</div><div class='del'>-    t.item_ancestors(i)[0..-2].each{|i2|</div><div class='del'>-      # This ancestor has no more unread descendants</div><div class='del'>-      t.item_state_set(i2, '!unread') unless anyUnreadDescendants(t, i2)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Alternate implementation which does not rely on run-time states</div><div class='del'>-def demoOutlookNewsgroup2(t)</div><div class='del'>-  init_pics('outlook-*')</div><div class='del'>-</div><div class='del'>-  height = t.font.metrics(:linespace)</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-  t.configure(:itemheight=&gt;height, :selectmode=&gt;:browse, :showlines=&gt;false, </div><div class='del'>-              :showroot=&gt;false, :showrootbutton=&gt;false, :showbuttons=&gt;true)</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.column_create(:image=&gt;@images['outlook-clip'], :tag=&gt;'clip')</div><div class='del'>-    t.column_create(:image=&gt;@images['outlook-arrow'], :tag=&gt;'arrow')</div><div class='del'>-    t.column_create(:image=&gt;@images['outlook-watch'], :tag=&gt;'watch')</div><div class='del'>-    t.column_create(:text=&gt;'Subject', :width=&gt;250, :tag=&gt;'subject')</div><div class='del'>-    t.column_create(:text=&gt;'From', :width=&gt;150, :tag=&gt;'from')</div><div class='del'>-    t.column_create(:text=&gt;'Sent', :width=&gt;150, :tag=&gt;'sent')</div><div class='del'>-    t.column_create(:text=&gt;'Size', :width=&gt;60, :justify=&gt;:right, :tag=&gt;'size')</div><div class='del'>-  else # TreeCtrl 1.0</div><div class='del'>-    t.column_configure(0, :image=&gt;@images['outlook-clip'], :tag=&gt;'clip')</div><div class='del'>-    t.column_configure(1, :image=&gt;@images['outlook-arrow'], :tag=&gt;'arrow')</div><div class='del'>-    t.column_configure(2, :image=&gt;@images['outlook-watch'], :tag=&gt;'watch')</div><div class='del'>-    t.column_configure(3, :text=&gt;'Subject', :width=&gt;250, :tag=&gt;'subject')</div><div class='del'>-    t.column_configure(4, :text=&gt;'From', :width=&gt;150, :tag=&gt;'from')</div><div class='del'>-    t.column_configure(5, :text=&gt;'Sent', :width=&gt;150, :tag=&gt;'sent')</div><div class='del'>-    t.column_configure(6, :text=&gt;'Size', :width=&gt;60, :justify=&gt;:right, </div><div class='del'>-                       :tag=&gt;'size')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.treecolumn = 3</div><div class='del'>-</div><div class='del'>-  t.element_create('image.unread', :image, :image=&gt;@images['outlook-unread'])</div><div class='del'>-  t.element_create('image.read', :image, :image=&gt;@images['outlook-read'])</div><div class='del'>-  t.element_create('image.read2', :image, :image=&gt;@images['outlook-read-2'])</div><div class='del'>-  t.element_create('text.read', :text, :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('text.unread', :text, :lines=&gt;1, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']], </div><div class='del'>-                   :font=&gt;t.font.dup.weight(:bold))</div><div class='del'>-  t.element_create('sel.e', :rect, :open=&gt;:e, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray',  ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('sel.w', :rect, :open=&gt;:w, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray',  ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('sel.we', :rect, :open=&gt;:we, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray',  ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-</div><div class='del'>-  # Image + text</div><div class='del'>-  s = t.style_create('unread')</div><div class='del'>-  t.style_elements(s, ['sel.e', 'image.unread', 'text.unread'])</div><div class='del'>-  t.style_layout(s, 'image.unread', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'text.unread', :padx=&gt;[2,6], :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.e', :union=&gt;['text.unread'], </div><div class='del'>-                 :iexpand=&gt;:nes, :ipadx=&gt;[2,0])</div><div class='del'>-</div><div class='del'>-  # Image + text</div><div class='del'>-  s = t.style_create('read')</div><div class='del'>-  t.style_elements(s, ['sel.e', 'image.read', 'text.read'])</div><div class='del'>-  t.style_layout(s, 'image.read', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'text.read', :padx=&gt;[2,6], :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.e', :union=&gt;['text.read'], </div><div class='del'>-                 :iexpand=&gt;:nes, :ipadx=&gt;[2,0])</div><div class='del'>-</div><div class='del'>-  # Image + text</div><div class='del'>-  s = t.style_create('read2')</div><div class='del'>-  t.style_elements(s, ['sel.e', 'image.read2', 'text.unread'])</div><div class='del'>-  t.style_layout(s, 'image.read2', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'text.unread', :padx=&gt;[2,6], :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.e', :union=&gt;['text.unread'], </div><div class='del'>-                 :iexpand=&gt;:nes, :ipadx=&gt;[2,0])</div><div class='del'>-</div><div class='del'>-  # Text</div><div class='del'>-  s = t.style_create('unread.we')</div><div class='del'>-  t.style_elements(s, ['sel.we', 'text.unread'])</div><div class='del'>-  t.style_layout(s, 'text.unread', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.we', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-</div><div class='del'>-  # Text</div><div class='del'>-  s = t.style_create('read.we')</div><div class='del'>-  t.style_elements(s, ['sel.we', 'text.read'])</div><div class='del'>-  t.style_layout(s, 'text.read', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.we', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-</div><div class='del'>-  # Text</div><div class='del'>-  s = t.style_create('unread.w')</div><div class='del'>-  t.style_elements(s, ['sel.w', 'text.unread'])</div><div class='del'>-  t.style_layout(s, 'text.unread', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.w', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-</div><div class='del'>-  # Text</div><div class='del'>-  s = t.style_create('read.w')</div><div class='del'>-  t.style_elements(s, ['sel.w', 'text.read'])</div><div class='del'>-  t.style_layout(s, 'text.read', :padx=&gt;6, :squeeze=&gt;:x, :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'sel.w', :detach=&gt;true, :iexpand=&gt;:es)</div><div class='del'>-</div><div class='del'>-  msgCnt = 100</div><div class='del'>-  thread = 0</div><div class='del'>-</div><div class='del'>-  @Message = Hash.new{|k, v| k[v] = Hash.new}</div><div class='del'>-  @Message[:count][0] = 0</div><div class='del'>-</div><div class='del'>-  (1...(msgCnt)).each{|i|</div><div class='del'>-    t.item_create</div><div class='del'>-    j = nil</div><div class='del'>-    loop {</div><div class='del'>-      j = rand(i)</div><div class='del'>-      break if j == 0</div><div class='del'>-      next if t.depth(j) == 5</div><div class='del'>-      next if @Message[:count][@Message[:thread][j]] == 15</div><div class='del'>-      break</div><div class='del'>-    }</div><div class='del'>-    t.item_lastchild(j, i)</div><div class='del'>-</div><div class='del'>-    @Message[:read][i] = (rand(2) == 0)</div><div class='del'>-    if j == 0</div><div class='del'>-      thread += 1</div><div class='del'>-      @Message[:thread][i] = thread</div><div class='del'>-      @Message[:seconds][i] = (Tk::Clock.seconds - rand(500000))</div><div class='del'>-      @Message[:seconds2][i] = @Message[:seconds][i]</div><div class='del'>-      @Message[:count][thread] = 1</div><div class='del'>-    else</div><div class='del'>-      @Message[:thread][i] = @Message[:thread][j]</div><div class='del'>-      @Message[:seconds][i] = (@Message[:seconds2][j] + rand(10000))</div><div class='del'>-      @Message[:seconds2][i] = @Message[:seconds][i]</div><div class='del'>-      @Message[:seconds2][j] = @Message[:seconds][i]</div><div class='del'>-      @Message[:count][@Message[:thread][j]] += 1</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  (1...(msgCnt)).each{|i|</div><div class='del'>-    subject = "This is thread number #{@Message[:thread][i]}"</div><div class='del'>-    from = 'somebody@somewhere.net'</div><div class='del'>-    sent = Tk::Clock.format(@Message[:seconds][i], "%d/%m/%y %I:%M %p")</div><div class='del'>-    size = "#{1 + rand(10)}KB"</div><div class='del'>-    if @Message[:read][i]</div><div class='del'>-      style = 'read'</div><div class='del'>-      style2 = 'read2'</div><div class='del'>-    else</div><div class='del'>-      style = 'unread'</div><div class='del'>-      style2 = 'unread2'</div><div class='del'>-    end</div><div class='del'>-    t.item_style_set(i, 3, style, 4, "#{style2}.we", 5, "#{style2}.we", </div><div class='del'>-                     6, "#{style2}.w")</div><div class='del'>-    t.item_text(i, 3, subject, 4, from, 5, sent, 6, size)</div><div class='del'>-    if t.item_numchildren(i) &gt; 0</div><div class='del'>-      t.item_configure(item_i, :button=&gt;true)</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # Do something when the selection changes</div><div class='del'>-  t.notify_bind(t, 'Selection', </div><div class='del'>-                proc{|w|</div><div class='del'>-                  if w.selection_count == 1</div><div class='del'>-                    i = t.selection_get[0]</div><div class='del'>-                    unless @Message[:read][i]</div><div class='del'>-                      if t.item_isopen(i) || !anyUnreadDescendants(t, i)</div><div class='del'>-                        # unread -&gt; read</div><div class='del'>-                        t.item_style_map(i, 'subject', 'read', </div><div class='del'>-                                         ['text.unread', 'text.read'])</div><div class='del'>-                        t.item_style_map(i, 'from', 'read.we', </div><div class='del'>-                                         ['text.unread', 'text.read'])</div><div class='del'>-                        t.item_style_map(i, 'sent', 'read.we', </div><div class='del'>-                                         ['text.unread', 'text.read'])</div><div class='del'>-                        t.item_style_map(i, 'size', 'read.w', </div><div class='del'>-                                         ['text.unread', 'text.read'])</div><div class='del'>-                      else</div><div class='del'>-                        # unread -&gt; read2</div><div class='del'>-                        t.item_style_map(i, 'subject', 'read2', </div><div class='del'>-                                         ['text.unread', 'text.unread'])</div><div class='del'>-                      end</div><div class='del'>-</div><div class='del'>-                      @Message[:read][i] = true</div><div class='del'>-                      @display_styles_in_item.call(i)</div><div class='del'>-                    end</div><div class='del'>-                  end</div><div class='del'>-                }, '%T')</div><div class='del'>-</div><div class='del'>-  t.notify_bind(t, 'Expand-after', </div><div class='del'>-                proc{|w, i|</div><div class='del'>-                  if @Messge[:read][i] &amp;&amp; anyUnreadDescendants(t, i)</div><div class='del'>-                    # read2 -&gt; read</div><div class='del'>-                    t.item_style_map(i, 'subject', 'read', </div><div class='del'>-                                     ['text.unread', 'text.read'])</div><div class='del'>-                    # unread -&gt; read</div><div class='del'>-                    t.item_style_map(i, 'from', 'read.we', </div><div class='del'>-                                     ['text.unread', 'text.read'])</div><div class='del'>-                    t.item_style_map(i, 'sent', 'read.we', </div><div class='del'>-                                     ['text.unread', 'text.read'])</div><div class='del'>-                    t.item_style_map(i, 'size', 'read.w', </div><div class='del'>-                                     ['text.unread', 'text.read'])</div><div class='del'>-                  end</div><div class='del'>-                }, '%T %I')</div><div class='del'>-</div><div class='del'>-  t.notify_bind(t, 'Collapse-after', </div><div class='del'>-                proc{|w, i|</div><div class='del'>-                  if @Messge[:read][i] &amp;&amp; anyUnreadDescendants(t, i)</div><div class='del'>-                    # read -&gt; read2</div><div class='del'>-                    t.item_style_map(i, 'subject', 'read2', </div><div class='del'>-                                     ['text.read', 'text.unread'])</div><div class='del'>-                    # read -&gt; unread</div><div class='del'>-                    t.item_style_map(i, 'from', 'unread.we', </div><div class='del'>-                                     ['text.read', 'text.unread'])</div><div class='del'>-                    t.item_style_map(i, 'sent', 'unread.we', </div><div class='del'>-                                     ['text.read', 'text.unread'])</div><div class='del'>-                    t.item_style_map(i, 'size', 'unread.w', </div><div class='del'>-                                     ['text.read', 'text.unread'])</div><div class='del'>-                  end</div><div class='del'>-                }, '%T %I')</div><div class='del'>-</div><div class='del'>-  (1...(msgCnt)).each{|i|</div><div class='del'>-    if rand(2) == 0</div><div class='del'>-      if t.item_numchildren(i) &gt; 0</div><div class='del'>-        if $Version_1_1_OrLater</div><div class='del'>-          t.item_collapse(i)</div><div class='del'>-        else # TreeCtrl 1.0</div><div class='del'>-          t.collapse(i)</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'>-def anyUnreadDescendants(t, i)</div><div class='del'>-  itemList = []</div><div class='del'>-  item = t.item_firstchild(i)</div><div class='del'>-  itemList.push(item) if item != ''</div><div class='del'>-</div><div class='del'>-  while item = itemList.pop</div><div class='del'>-    return true unless @Message[:read][item]</div><div class='del'>-</div><div class='del'>-    item2 = t.item_nextsibling(item)</div><div class='del'>-    itemList.push(item2) if item2 != ''</div><div class='del'>-    item2 = t.item_firstchild(item)</div><div class='del'>-    itemList.push(item2) if item2 != ''</div><div class='del'>-  end</div><div class='del'>-  false</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/big-dll.gif b/ext/tk/sample/tkextlib/treectrl/pics/big-dll.gif<br/>deleted file mode 100644<br/>index 09170c0e26..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/big-dll.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/big-dll.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/big-exe.gif b/ext/tk/sample/tkextlib/treectrl/pics/big-exe.gif<br/>deleted file mode 100644<br/>index e19aac1a2d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/big-exe.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/big-exe.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/big-file.gif b/ext/tk/sample/tkextlib/treectrl/pics/big-file.gif<br/>deleted file mode 100644<br/>index 6c752312a3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/big-file.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/big-file.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/big-folder.gif b/ext/tk/sample/tkextlib/treectrl/pics/big-folder.gif<br/>deleted file mode 100644<br/>index 186c9749fd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/big-folder.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/big-folder.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/big-txt.gif b/ext/tk/sample/tkextlib/treectrl/pics/big-txt.gif<br/>deleted file mode 100644<br/>index a93492586e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/big-txt.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/big-txt.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/checked.gif b/ext/tk/sample/tkextlib/treectrl/pics/checked.gif<br/>deleted file mode 100644<br/>index 3b9b176ab3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/checked.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/checked.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/file.gif b/ext/tk/sample/tkextlib/treectrl/pics/file.gif<br/>deleted file mode 100644<br/>index a64c2a06bd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/file.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/file.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gif b/ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gif<br/>deleted file mode 100644<br/>index 0a064376c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/folder-open.gif b/ext/tk/sample/tkextlib/treectrl/pics/folder-open.gif<br/>deleted file mode 100644<br/>index 3fac27ffd9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/folder-open.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/folder-open.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gif b/ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gif<br/>deleted file mode 100644<br/>index 0a0497bfa3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gif b/ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gif<br/>deleted file mode 100644<br/>index 40656c5194..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/help-page.gif b/ext/tk/sample/tkextlib/treectrl/pics/help-page.gif<br/>deleted file mode 100644<br/>index e1ce1d72f5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/help-page.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/help-page.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gif b/ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gif<br/>deleted file mode 100644<br/>index 5fd9215551..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gif b/ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gif<br/>deleted file mode 100644<br/>index 3d2d1c17c2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gif b/ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gif<br/>deleted file mode 100644<br/>index 9fccf12b51..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gif b/ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gif<br/>deleted file mode 100644<br/>index eff851c9bb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gif b/ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gif<br/>deleted file mode 100644<br/>index ad00c827f6..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gif b/ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gif<br/>deleted file mode 100644<br/>index 238bf162ac..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gif b/ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gif<br/>deleted file mode 100644<br/>index a9287e1b1c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gif b/ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gif<br/>deleted file mode 100644<br/>index e64866a394..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gif b/ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gif<br/>deleted file mode 100644<br/>index cf652beff2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/internet-print.gif b/ext/tk/sample/tkextlib/treectrl/pics/internet-print.gif<br/>deleted file mode 100644<br/>index 7ac25b10e9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/internet-print.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/internet-print.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gif b/ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gif<br/>deleted file mode 100644<br/>index 90ef62971f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gif b/ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gif<br/>deleted file mode 100644<br/>index 9de742c198..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/internet-search.gif b/ext/tk/sample/tkextlib/treectrl/pics/internet-search.gif<br/>deleted file mode 100644<br/>index 1f9a047701..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/internet-search.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/internet-search.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/internet-security.gif b/ext/tk/sample/tkextlib/treectrl/pics/internet-security.gif<br/>deleted file mode 100644<br/>index 86d3943786..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/internet-security.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/internet-security.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gif b/ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gif<br/>deleted file mode 100644<br/>index 81302c80c1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gif b/ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gif<br/>deleted file mode 100644<br/>index 0a2cd80040..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gif<br/>deleted file mode 100644<br/>index b1c2afd426..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gif<br/>deleted file mode 100644<br/>index 8578132702..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gif<br/>deleted file mode 100644<br/>index 7cc8369b4b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gif<br/>deleted file mode 100644<br/>index f19585050f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gif<br/>deleted file mode 100644<br/>index b3f733563b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gif<br/>deleted file mode 100644<br/>index 29ad9b466e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gif<br/>deleted file mode 100644<br/>index f41d804444..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gif<br/>deleted file mode 100644<br/>index 0c74970d32..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gif<br/>deleted file mode 100644<br/>index 92325fa85f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gif<br/>deleted file mode 100644<br/>index c7e80527a0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gif<br/>deleted file mode 100644<br/>index 2f15a3af05..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gif<br/>deleted file mode 100644<br/>index a6f956207a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gif<br/>deleted file mode 100644<br/>index 963b56c4c9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gif<br/>deleted file mode 100644<br/>index c950845d62..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gif<br/>deleted file mode 100644<br/>index 3df4b99439..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gif b/ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gif<br/>deleted file mode 100644<br/>index 87ec861312..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/sky.gif b/ext/tk/sample/tkextlib/treectrl/pics/sky.gif<br/>deleted file mode 100644<br/>index b7fbf14a0a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/sky.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/sky.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/small-dll.gif b/ext/tk/sample/tkextlib/treectrl/pics/small-dll.gif<br/>deleted file mode 100644<br/>index d8875ec23f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/small-dll.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/small-dll.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/small-exe.gif b/ext/tk/sample/tkextlib/treectrl/pics/small-exe.gif<br/>deleted file mode 100644<br/>index 69d30beacd..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/small-exe.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/small-exe.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/small-file.gif b/ext/tk/sample/tkextlib/treectrl/pics/small-file.gif<br/>deleted file mode 100644<br/>index f340662879..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/small-file.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/small-file.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/small-folder.gif b/ext/tk/sample/tkextlib/treectrl/pics/small-folder.gif<br/>deleted file mode 100644<br/>index ad1b24da84..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/small-folder.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/small-folder.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/small-txt.gif b/ext/tk/sample/tkextlib/treectrl/pics/small-txt.gif<br/>deleted file mode 100644<br/>index cdc7cbfe99..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/small-txt.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/small-txt.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/pics/unchecked.gif b/ext/tk/sample/tkextlib/treectrl/pics/unchecked.gif<br/>deleted file mode 100644<br/>index 833e48268b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/pics/unchecked.gif?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/pics/unchecked.gif</a><br/>+++ /dev/null</div>Binary files differ<div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/random.rb b/ext/tk/sample/tkextlib/treectrl/random.rb<br/>deleted file mode 100644<br/>index 2c9e614aa5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/random.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/random.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,508 +0,0 @@</div><div class='del'>-# </div><div class='del'>-def random_N</div><div class='del'>-  @RandomN[0] || 500</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Demo: random N items</div><div class='del'>-#</div><div class='del'>-def demoRandom(t)</div><div class='del'>-  init_pics('folder-*', 'small-*')</div><div class='del'>-</div><div class='del'>-  height = t.font.metrics(:linespace)</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-  t.configure(:itemheight=&gt;height, :selectmode=&gt;:extended, </div><div class='del'>-              :showroot=&gt;true, :showrootbutton=&gt;true, :showbuttons=&gt;true, </div><div class='del'>-              :showlines=&gt;true, :scrollmargin=&gt;16, </div><div class='del'>-              :xscrolldelay=&gt;[500, 50], :yscrolldelay=&gt;[500, 50])</div><div class='del'>-</div><div class='del'>-  if $Version_1_1_OrLater</div><div class='del'>-    t.column_create(:expand=&gt;true, :text=&gt;'Item', </div><div class='del'>-                    :itembackground=&gt;['#e0e8f0', []], :tag=&gt;'item')</div><div class='del'>-    t.column_create(:text=&gt;'Parent', :justify=&gt;:center, </div><div class='del'>-                    :itembackground=&gt;['gray90', []], :tag=&gt;'parent')</div><div class='del'>-    t.column_create(:text=&gt;'Depth', :justify=&gt;:center, </div><div class='del'>-                    :itembackground=&gt;['linen', []], :tag=&gt;'depth')</div><div class='del'>-  else # TreeCtrl 1.0</div><div class='del'>-    t.column_configure(0, :expand=&gt;true, :text=&gt;'Item', </div><div class='del'>-                       :itembackground=&gt;['#e0e8f0', []], :tag=&gt;'item')</div><div class='del'>-    t.column_configure(1, :text=&gt;'Parent', :justify=&gt;:center, </div><div class='del'>-                       :itembackground=&gt;['gray90', []], :tag=&gt;'parent')</div><div class='del'>-    t.column_configure(2, :text=&gt;'Depth', :justify=&gt;:center, </div><div class='del'>-                       :itembackground=&gt;['linen', []], :tag=&gt;'depth')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.element_create('e1', :image, :image=&gt;[</div><div class='del'>-                     @images['folder-open'], ['open'], </div><div class='del'>-                     @images['folder-closed'], []</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('e2', :image, :image=&gt;@images['small-file'])</div><div class='del'>-  t.element_create('e3', :text, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('e4', :text, :fill=&gt;'blue')</div><div class='del'>-  t.element_create('e6', :text)</div><div class='del'>-  t.element_create('e5', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[</div><div class='del'>-                     @SystemHighlight, ['selected', 'focus'], </div><div class='del'>-                     'gray', ['selected', '!focus']</div><div class='del'>-                   ])</div><div class='del'>-</div><div class='del'>-  s = t.style_create('s1')</div><div class='del'>-  t.style_elements(s, ['e5', 'e1', 'e3', 'e4'])</div><div class='del'>-  t.style_layout(s, 'e1', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e4', :padx=&gt;[0,6], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e5', :union=&gt;['e3'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  s = t.style_create('s2')</div><div class='del'>-  t.style_elements(s, ['e5', 'e2', 'e3'])</div><div class='del'>-  t.style_layout(s, 'e2', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e5', :union=&gt;['e3'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  s = t.style_create('s3')</div><div class='del'>-  t.style_elements(s, ['e6'])</div><div class='del'>-  t.style_layout(s, 'e6', :padx=&gt;6, :expand=&gt;:ns)</div><div class='del'>-</div><div class='del'>-  @Priv[:sensitive, t] = [</div><div class='del'>-    [:item, 's1',  'e5', 'e1', 'e3'], </div><div class='del'>-    [:item, 's2',  'e5', 'e2', 'e3']</div><div class='del'>-  ]</div><div class='del'>-  @Priv[:dragimage, t] = [</div><div class='del'>-    [:item, 's1',  'e1', 'e3'], </div><div class='del'>-    [:item, 's2',  'e2', 'e3']</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  clicks = Tk::Clock.clicks</div><div class='del'>-  items = [ t.index(:root) ]</div><div class='del'>-  (1...(random_N())).each{|i|</div><div class='del'>-    item_i = t.item_create</div><div class='del'>-    item_j = nil</div><div class='del'>-    loop {</div><div class='del'>-      j = rand(i)</div><div class='del'>-      item_j = items[j]</div><div class='del'>-      break if t.depth(item_j) &lt; 5</div><div class='del'>-    }</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      t.item_collapse(item_i) if rand(2) == 0</div><div class='del'>-    else # TreeCtrl 1.0</div><div class='del'>-      t.collapse(item_i) if rand(2) == 0</div><div class='del'>-    end</div><div class='del'>-    if rand(2) == 0</div><div class='del'>-      t.item_lastchild(item_j, item_i)</div><div class='del'>-    else</div><div class='del'>-      t.item_firstchild(item_j, item_i)</div><div class='del'>-    end</div><div class='del'>-    items &lt;&lt; item_i</div><div class='del'>-  }</div><div class='del'>-  puts "created #{random_N() - 1} items in #{Tk::Clock.clicks - clicks} clicks"</div><div class='del'>-</div><div class='del'>-  clicks = Tk::Clock.clicks</div><div class='del'>-  (0...(random_N())).each{|i|</div><div class='del'>-    item_i = items[i]</div><div class='del'>-    numChildren = t.item_numchildren(item_i)</div><div class='del'>-    if numChildren &gt; 0</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        t.item_configure(item_i, :button=&gt;true)</div><div class='del'>-      else # TreeCtrl 1.0</div><div class='del'>-        t.item_hasbutton(item_i, true)</div><div class='del'>-      end</div><div class='del'>-      t.item_style_set(item_i, 0, 's1', 1, 's3', 2, 's3')</div><div class='del'>-      t.item_complex(item_i, </div><div class='del'>-                     [ ['e3', {:text=&gt;"Item #{i}"}], </div><div class='del'>-                       ['e4', {:text=&gt;"(#{numChildren})"}] ], </div><div class='del'>-                     [ ['e6', {:text=&gt;"#{t.item_parent(item_i)}"}] ], </div><div class='del'>-                     [ ['e6', {:text=&gt;"#{t.depth(item_i)}"}] ])</div><div class='del'>-    else</div><div class='del'>-      t.item_style_set(item_i, 1, 's3', 2, 's3', 0, 's2')</div><div class='del'>-      t.item_complex(item_i, </div><div class='del'>-                     [ ['e3', {:text=&gt;"Item #{i}"}] ], </div><div class='del'>-                     [ ['e6', {:text=&gt;"#{t.item_parent(item_i)}"}] ], </div><div class='del'>-                     [ ['e6', {:text=&gt;"#{t.depth(item_i)}"}] ])</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-  puts "configured #{random_N()} items in #{Tk::Clock.clicks - clicks} clicks"</div><div class='del'>-</div><div class='del'>-  treeCtrlRandom = TkBindTag.new</div><div class='del'>-</div><div class='del'>-  treeCtrlRandom.bind('Double-ButtonPress-1', </div><div class='del'>-                      proc{|w, x, y|</div><div class='del'>-                        Tk::TreeCtrl::BindCallback.doubleButton1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlRandom.bind('Control-ButtonPress-1', </div><div class='del'>-                      proc{|w, x, y|</div><div class='del'>-                        @Priv['selectMode'] = :toggle</div><div class='del'>-                        randomButton1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlRandom.bind('Shift-ButtonPress-1', </div><div class='del'>-                      proc{|w, x, y|</div><div class='del'>-                        @Priv['selectMode'] = :add</div><div class='del'>-                        randomButton1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlRandom.bind('ButtonPress-1', </div><div class='del'>-                      proc{|w, x, y|</div><div class='del'>-                        @Priv['selectMode'] = :set</div><div class='del'>-                        randomButton1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlRandom.bind('Button1-Motion', </div><div class='del'>-                      proc{|w, x, y|</div><div class='del'>-                        randomMotion1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlRandom.bind('Button1-Leave', </div><div class='del'>-                      proc{|w, x, y|</div><div class='del'>-                        randomLeave1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  treeCtrlRandom.bind('ButtonRelease-1', </div><div class='del'>-                      proc{|w, x, y|</div><div class='del'>-                        randomRelease1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  t.bindtags = [ t, treeCtrlRandom, Tk::TreeCtrl, t.winfo_toplevel, :all ]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def randomButton1(t, x, y)</div><div class='del'>-  t.set_focus</div><div class='del'>-  id = t.identify(x, y)</div><div class='del'>-  puts id.inspect</div><div class='del'>-  @Priv['buttonMode'] = ''</div><div class='del'>-</div><div class='del'>-  # Click outside any item</div><div class='del'>-  if id.empty?</div><div class='del'>-    t.selection_clear</div><div class='del'>-</div><div class='del'>-  # Click in header</div><div class='del'>-  elsif id[0] == 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.buttonPress1(t, x, y)</div><div class='del'>-</div><div class='del'>-  # Click in item</div><div class='del'>-  else</div><div class='del'>-    where, item, arg1, arg2, arg3, arg4 = id</div><div class='del'>-    case arg1</div><div class='del'>-    when 'button'</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        t.item_toggle(item)</div><div class='del'>-      else # TreeCtrl 1.0</div><div class='del'>-        t.toggle(item)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when 'line'</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        t.item_toggle(arg2)</div><div class='del'>-      else # TreeCtrl 1.0</div><div class='del'>-        t.toggle(arg2)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when 'column'</div><div class='del'>-      ok = false</div><div class='del'>-      # Clicked an element</div><div class='del'>-      if id.length == 6</div><div class='del'>-        column = id[3]</div><div class='del'>-        e = id[5]</div><div class='del'>-        @Priv.list_element(:sensitive, t).each{|lst|</div><div class='del'>-          c, s, *eList = TkComm.simplelist(lst)</div><div class='del'>-          next if column != t.column_index(c)</div><div class='del'>-          next if t.item_style_set(item, c) != s</div><div class='del'>-          next if eList.find{|le| le == e} == nil</div><div class='del'>-          ok = true</div><div class='del'>-          break</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      unless ok</div><div class='del'>-        t.selection_clear</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @Priv[:drag, :motion] = 0</div><div class='del'>-      @Priv[:drag, :x] = t.canvasx(x)</div><div class='del'>-      @Priv[:drag, :y] = t.canvasy(y)</div><div class='del'>-      @Priv[:drop] = ''</div><div class='del'>-</div><div class='del'>-      if @Priv['selectMode'] == 'add'</div><div class='del'>-          Tk::TreeCtrl::BindCallback.beginExtend(t, item)</div><div class='del'>-      elsif @Priv['selectMode'] == 'toggle'</div><div class='del'>-          Tk::TreeCtrl::BindCallback.beginToggle(t, item)</div><div class='del'>-      elsif ! t.selection_includes(item)</div><div class='del'>-          Tk::TreeCtrl::BindCallback.beginSelect(t, item)</div><div class='del'>-      end</div><div class='del'>-      t.activate(item)</div><div class='del'>-</div><div class='del'>-      if t.selection_includes(item)</div><div class='del'>-        @Priv['buttonMode'] = 'drag'</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 randomMotion1(t, x, y)</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'resize', 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.motion1(t, x, y)</div><div class='del'>-  when 'drag'</div><div class='del'>-    randomAutoScanCheck(t, x, y)</div><div class='del'>-    randomMotion(t, x, y)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def randomMotion(t, x, y)</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'resize', 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.motion1(t, x, y)</div><div class='del'>-</div><div class='del'>-  when 'drag'</div><div class='del'>-    # Detect initial mouse movement</div><div class='del'>-    unless @Priv.bool_element(:drag, :motion)</div><div class='del'>-      @Priv[:selection] = t.selection_get</div><div class='del'>-      @Priv[:drop] = ''</div><div class='del'>-      t.dragimage_clear</div><div class='del'>-      # For each selected item, add 2nd and 3rd elements of</div><div class='del'>-      # column "item" to the dragimage</div><div class='del'>-      @Priv.list_element(:selection).each{|i|</div><div class='del'>-        @Priv.list_element(:dragimage,t).each{|lst|</div><div class='del'>-          c, s, *eList = TkComm.simplelist(lst)</div><div class='del'>-          if t.item_style_set(i, c) == s</div><div class='del'>-            t.dragimage_add(i, c, *eList)</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      @Priv[:drag,:motion] = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find the item under the cursor</div><div class='del'>-    cursor = 'X_cursor'</div><div class='del'>-    drop = ''</div><div class='del'>-    id = t.identify(x, y)</div><div class='del'>-    ok = false</div><div class='del'>-    if !id.empty? &amp;&amp; id[0] == 'item' &amp;&amp; id.length == 6</div><div class='del'>-      item = id[1]</div><div class='del'>-      column = id[3]</div><div class='del'>-      e = id[5]</div><div class='del'>-      @Priv.list_element(:sensitive,t).each{|lst|</div><div class='del'>-        c, s, *eList = TkComm.simplelist(lst)</div><div class='del'>-        next if column != t.column_index(c)</div><div class='del'>-        next if t.item_style_set(item, c) != s</div><div class='del'>-        next unless eList.find{|val| val.to_s == e.to_s}</div><div class='del'>-        ok = true</div><div class='del'>-        break</div><div class='del'>-      }</div><div class='del'>-      ok = true if @Priv.list_element(:sensitive,t).find{|val| TkComm.simplelist(val).index(e)}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if ok</div><div class='del'>-      # If the item is not in the pre-drag selection</div><div class='del'>-      # (i.e. not being dragged) see if we can drop on it</div><div class='del'>-      unless @Priv.list_element(:selection).find{|val| val.to_s == item.to_s}</div><div class='del'>-        drop = item</div><div class='del'>-        # We can drop if dragged item isn't an ancestor</div><div class='del'>-        @Priv.list_element(:selection).each{|item2|</div><div class='del'>-          if t.item_isancestor(item2, item)</div><div class='del'>-            drop = ''</div><div class='del'>-            break</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        if drop != ''</div><div class='del'>-          x1, y1, x2, y2 = t.item_bbox(drop)</div><div class='del'>-          if y &lt; y1 + 3</div><div class='del'>-            cursor = 'top_side'</div><div class='del'>-            @Priv[:drop,:pos] = 'prevsibling'</div><div class='del'>-          elsif y &gt;= y2 - 3</div><div class='del'>-            cursor = 'bottom_side'</div><div class='del'>-            @Priv[:drop,:pos] = 'nextsibling'</div><div class='del'>-          else</div><div class='del'>-            cursor = ''</div><div class='del'>-            @Priv[:drop,:pos] = 'lastchild'</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'>-    t[:cursor] = cursor if t[:cursor] != cursor</div><div class='del'>-</div><div class='del'>-    # Select the item under the cursor (if any) and deselect</div><div class='del'>-    # the previous drop-item (if any)</div><div class='del'>-    t.selection_modify(drop, @Priv[:drop])</div><div class='del'>-    @Priv[:drop] = drop</div><div class='del'>-</div><div class='del'>-    # Show the dragimage in its new position</div><div class='del'>-    x = t.canvasx(x) - @Priv.numeric_element(:drag,:x)</div><div class='del'>-    y = t.canvasx(y) - @Priv.numeric_element(:drag,:y)</div><div class='del'>-    t.dragimage_offset(x, y)</div><div class='del'>-    t.dragimage_configure(:visible=&gt;true)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def randomLeave1(t, x, y)</div><div class='del'>-  # This is called when I do ButtonPress-1 on Unix for some reason,</div><div class='del'>-  # and buttonMode is undefined.</div><div class='del'>-  return unless @Priv.exist?('buttonMode')</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.leave1(t, x, y)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def randomRelease1(t, x, y)</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'resize', 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.release1(t, x, y)</div><div class='del'>-  when 'drag'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.autoScanCancel(t)</div><div class='del'>-    t.dragimage_configure(:visible=&gt;false)</div><div class='del'>-    t.selection_modify('', @Priv[:drop])</div><div class='del'>-    t[:cursor] = ''</div><div class='del'>-    if @Priv[:drop] != ''</div><div class='del'>-      randomDrop(t, @Priv[:drop], @Priv.list_element(:selection), </div><div class='del'>-                 @Priv[:drop, :pos])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  @Priv['buttonMode'] = ''</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def randomDrop(t, target, src, pos)</div><div class='del'>-  parentList = []</div><div class='del'>-  case pos</div><div class='del'>-  when 'lastchild'</div><div class='del'>-    parent = target</div><div class='del'>-  when 'prevsibling'</div><div class='del'>-    parent = t.item_parent(target)</div><div class='del'>-  when 'nextsibling'</div><div class='del'>-    parent = t.item_parent(target)</div><div class='del'>-  end</div><div class='del'>-  src.each{|item|</div><div class='del'>-    # Ignore any item whose ancestor is also selected</div><div class='del'>-    ignore = false</div><div class='del'>-    t.item_ancestors(item).each{|ancestor|</div><div class='del'>-      if src.find{|val| val.to_s == ancestor.to_s}</div><div class='del'>-        ignore = true</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    next if ignore</div><div class='del'>-</div><div class='del'>-    # Update the old parent of this moved item later</div><div class='del'>-    unless parentList.find{|val| val.to_s == item.to_s}</div><div class='del'>-      parentList &lt;&lt; t.item_parent(item)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Add to target</div><div class='del'>-    t.__send__("item_#{pos}", target, item)</div><div class='del'>-</div><div class='del'>-    # Update text: parent</div><div class='del'>-    t.item_element_configure(item, 'parent', 'e6', :text=&gt;parent)</div><div class='del'>-</div><div class='del'>-    # Update text: depth</div><div class='del'>-    t.item_element_configure(item, 'depth', 'e6', :text=&gt;t.depth(item))</div><div class='del'>-</div><div class='del'>-    # Recursively update text: depth</div><div class='del'>-    itemList = []</div><div class='del'>-    item = t.item_firstchild(item)</div><div class='del'>-    itemList &lt;&lt; item if item != ''</div><div class='del'>-</div><div class='del'>-    while item = itemList.pop</div><div class='del'>-      t.item_element_configure(item, 'depth', 'e6', :text=&gt;t.depth(item))</div><div class='del'>-</div><div class='del'>-      item2 = t.item_nextsibling(item)</div><div class='del'>-      itemList &lt;&lt; item2 if item2 != ''</div><div class='del'>-</div><div class='del'>-      item2 = t.item_firstchild(item)</div><div class='del'>-      itemList &lt;&lt; item2 if item2 != ''</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # Update items that lost some children</div><div class='del'>-  parentList.each{|item|</div><div class='del'>-    numChildren = t.item_numchildren(item)</div><div class='del'>-    if numChildren == 0</div><div class='del'>-      if $Version_1_1_OrLater</div><div class='del'>-        t.item_configure(item, :button=&gt;false)</div><div class='del'>-      else # TreeCtrl 1.0</div><div class='del'>-        t.item_hasbutton(item, false)</div><div class='del'>-      end</div><div class='del'>-      t.item_style_map(item, 'item', 's2', ['e3', 'e3'])</div><div class='del'>-    else</div><div class='del'>-      t.item_element_configure(item, 'item', 'e4', :text=&gt;"(#{numChildren})")</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # Update the target that gained some children</div><div class='del'>-  if t.item_style_set(parent, 0) != 's1'</div><div class='del'>-    if $Version_1_1_OrLater</div><div class='del'>-      t.item_configure(parent, :button=&gt;true)</div><div class='del'>-    else # TreeCtrl 1.0</div><div class='del'>-      t.item_hasbutton(parent, true)</div><div class='del'>-    end</div><div class='del'>-    t.item_style_map(parent, 'item', 's1', ['e3', 'e3'])</div><div class='del'>-  end</div><div class='del'>-  numChildren = t.item_numchildren(parent)</div><div class='del'>-  t.item_element_configure(parent, 'item', 'e4', :text=&gt;"(#{numChildren})")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Same as TreeCtrl::AutoScanCheck, but calls RandomMotion and</div><div class='del'>-# RandomAutoScanCheckAux</div><div class='del'>-def randomAutoScanCheck(t, x, y)</div><div class='del'>-  x1, y1, x2, y2 = t.contentbox</div><div class='del'>-  margin = t.winfo_pixels(t.scrollmargin)</div><div class='del'>-  if x &lt; x1 + margin || x &gt;= x2 - margin || y &lt; y1 + margin || y &gt;= y2 - margin</div><div class='del'>-    if ! @Priv.exist?(:autoscan, :afterId, t)</div><div class='del'>-      if y &gt;= y2 - margin</div><div class='del'>-        t.yview(:scroll, 1, :units)</div><div class='del'>-        delay = t.yscrolldelay</div><div class='del'>-      elsif y &lt; y1 + margin</div><div class='del'>-        t.yview(:scroll, -1, :units)</div><div class='del'>-        delay = t.yscrolldelay</div><div class='del'>-      elsif x &gt;= x2 - margin</div><div class='del'>-        t.xview(:scroll, 1, :units)</div><div class='del'>-        delay = t.xscrolldelay</div><div class='del'>-      elsif x &lt; x1 + margin</div><div class='del'>-        t.xview(:scroll, -1, :units)</div><div class='del'>-        delay = t.xscrolldelay</div><div class='del'>-      end</div><div class='del'>-      if @Priv.exist?(:autoscan, :scanning, t)</div><div class='del'>-        delay = delay[1] if delay.kind_of?(Array)</div><div class='del'>-      else</div><div class='del'>-        delay = delay[0] if delay.kind_of?(Array)</div><div class='del'>-        @Priv[:autoscan, :scanning, t] = true</div><div class='del'>-      end</div><div class='del'>-      case @Priv['buttonMode']</div><div class='del'>-      when 'drag', 'marquee'</div><div class='del'>-        randomMotion(t, x, y)</div><div class='del'>-      end</div><div class='del'>-      @Priv[:autoscan, :afterId, t] = </div><div class='del'>-        Tk.after(delay, proc{ randomAutoScanCheckAux(t) })</div><div class='del'>-    end</div><div class='del'>-    return</div><div class='del'>-  end</div><div class='del'>-  Tk::TreeCtrl::BindCallback.autoScanCancel(t)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def randomAutoScanCheckAux(t)</div><div class='del'>-  @Priv.unset(:autoscan, :afterId, t)</div><div class='del'>-  x = t.winfo_pointerx - t.winfo_rootx</div><div class='del'>-  y = t.winfo_pointery - t.winfo_rooty</div><div class='del'>-  randomAutoScanCheck(t, x, y)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Demo: random N items, button images</div><div class='del'>-#</div><div class='del'>-def demoRandom2(t)</div><div class='del'>-  demoRandom(t)</div><div class='del'>-</div><div class='del'>-  init_pics('mac-*')</div><div class='del'>-</div><div class='del'>-  t.configure(:openbuttonimage=&gt;@images['mac-collapse'], </div><div class='del'>-              :closedbuttonimage=&gt;@images['mac-expand'], </div><div class='del'>-              :showlines=&gt;false)</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/readme.txt b/ext/tk/sample/tkextlib/treectrl/readme.txt<br/>deleted file mode 100644<br/>index 9f26ac069c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/readme.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/readme.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-The scripts and image files in this directory are based on demo files</div><div class='del'>-of Tcl/Tk's TreeCtrl extention. </div><div class='head'>diff --git a/ext/tk/sample/tkextlib/treectrl/www-options.rb b/ext/tk/sample/tkextlib/treectrl/www-options.rb<br/>deleted file mode 100644<br/>index efa55ca06c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/treectrl/www-options.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/treectrl/www-options.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,303 +0,0 @@</div><div class='del'>-def demoInternetOptions (t)</div><div class='del'>-  @Option = TkVarAccess.new_hash('::Option')</div><div class='del'>-</div><div class='del'>-  height = t.font.metrics(:linespace) + 2</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-  t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-              :itemheight=&gt;height, :selectmode=&gt;:browse)</div><div class='del'>-</div><div class='del'>-  init_pics('internet-*')</div><div class='del'>-</div><div class='del'>-  if $HasColumnCreate</div><div class='del'>-    t.column_create(:text=&gt;'Internet Options')</div><div class='del'>-  else</div><div class='del'>-    t.column_configure(0, :text=&gt;'Internet Options')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  t.state_define('check')</div><div class='del'>-  t.state_define('radio')</div><div class='del'>-  t.state_define('on')</div><div class='del'>-</div><div class='del'>-  t.element_create('e1', :image, :image=&gt;[</div><div class='del'>-                     @images['internet-check-on'],  ['check', 'on'], </div><div class='del'>-                     @images['internet-check-off'], ['check'], </div><div class='del'>-                     @images['internet-radio-on'],  ['radio', 'on'], </div><div class='del'>-                     @images['internet-radio-off'], ['radio']</div><div class='del'>-                   ])</div><div class='del'>-  t.element_create('e2', :text, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('e3', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[@SystemHighlight, ['selected', 'focus']])</div><div class='del'>-</div><div class='del'>-  s = t.style_create('s1')</div><div class='del'>-  t.style_elements(s, ['e3', 'e1', 'e2'])</div><div class='del'>-  t.style_layout(s, 'e1', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e2', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :union=&gt;['e2'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  parentList = [:root, '', '', '', '', '', '']</div><div class='del'>-  parent = :root</div><div class='del'>-  [</div><div class='del'>-    [0, :print, "Printing", "", ""], </div><div class='del'>-        [1, :off, "Print background colors and images", "o1", ""], </div><div class='del'>-    [0, :search, "Search from Address bar", "", ""], </div><div class='del'>-        [1, :search, "When searching", "", ""], </div><div class='del'>-            [2, :off, "Display results, and go to the most likely sites", </div><div class='del'>-                                                                 "o2", "r1"], </div><div class='del'>-            [2, :off, "Do not search from the Address bar", "o3", "r1"], </div><div class='del'>-            [2, :off, "Just display the results in the main window", </div><div class='del'>-                                                                 "o4", "r1"],</div><div class='del'>-            [2, :on, "Just go to the most likely site", "o5", "r1"], </div><div class='del'>-    [0, :security, "Security", "", ""], </div><div class='del'>-        [1, :on, "Check for publisher's certificate revocation", "o5", ""], </div><div class='del'>-        [1, :off, "Check for server certificate revocation (requires restart)",</div><div class='del'>-                                                                 "o6", ""]</div><div class='del'>-  ].each{|depth, setting, text, option, group|</div><div class='del'>-    item = t.item_create()</div><div class='del'>-    t.item_style_set(item, 0, 's1')</div><div class='del'>-    t.item_element_configure(item, 0, 'e2', :text=&gt;text)</div><div class='del'>-    @Option[:option, item] = option</div><div class='del'>-    @Option[:group, item] = group</div><div class='del'>-    if setting == :on || setting == :off</div><div class='del'>-      @Option[:setting, item] = setting</div><div class='del'>-      if group == ''</div><div class='del'>-        t.item_state_set(item, 'check')</div><div class='del'>-        if setting == :on</div><div class='del'>-          t.item_state_set(item, 'on')</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if setting == :on</div><div class='del'>-          @Option[:current, group] = item</div><div class='del'>-          t.item_state_set(item, 'on')</div><div class='del'>-        end</div><div class='del'>-        t.item_state_set(item, 'radio')</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      t.item_element_configure(item, 0, 'e1', </div><div class='del'>-                               :image=&gt;@images["internet-#{setting}"])</div><div class='del'>-    end</div><div class='del'>-    t.item_lastchild(parentList[depth], item)</div><div class='del'>-    depth += 1</div><div class='del'>-    parentList[depth] = item</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  treeCtrlOption = TkBindTag.new</div><div class='del'>-  treeCtrlOption.bind('Double-ButtonPress-1', proc{|w, x, y|</div><div class='del'>-                        Tk::TreeCtrl::BindCallback.doubleButton1(w, x, y)</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-  treeCtrlOption.bind('ButtonPress-1', proc{|w, x, y|</div><div class='del'>-                        optionButton1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-  treeCtrlOption.bind('Button1-Motion', proc{|w, x, y|</div><div class='del'>-                        optionMotion1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-  treeCtrlOption.bind('Button1-Leave', proc{|w, x, y|</div><div class='del'>-                        optionLeave1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-  treeCtrlOption.bind('ButtonRelease-1', proc{|w, x, y|</div><div class='del'>-                        optionRelease1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  t.bindtags = [</div><div class='del'>-    t, treeCtrlOption, Tk::TreeCtrl, t.winfo_toplevel, TkBindTag::ALL</div><div class='del'>-  ]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def optionButton1(w, x, y)</div><div class='del'>-  w.set_focus</div><div class='del'>-  id = w.identify(x, y)</div><div class='del'>-  if id[0] == 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.buttonPress1(w, x, y)</div><div class='del'>-  elsif id.empty?</div><div class='del'>-    @Priv['buttonMode'] = ''</div><div class='del'>-  else</div><div class='del'>-    @Priv['buttonMode'] = ''</div><div class='del'>-    item = id[1]</div><div class='del'>-    w.selection_modify(item, :all)</div><div class='del'>-    w.activate(item)</div><div class='del'>-    return if @Option[:option, item] == ''</div><div class='del'>-    group = @Option[:group, item]</div><div class='del'>-    if group == ''</div><div class='del'>-      # a checkbutton</div><div class='del'>-      w.item_state_set(item, '~on')</div><div class='del'>-      if @Option[:setting, item] == 'on'</div><div class='del'>-        setting = :off</div><div class='del'>-      else</div><div class='del'>-        setting = :on</div><div class='del'>-      end</div><div class='del'>-      @Option[:setting, item] = setting</div><div class='del'>-    else</div><div class='del'>-      # a radiobutton</div><div class='del'>-      current = @Option[:current, group]</div><div class='del'>-      return if current == item.to_s</div><div class='del'>-      w.item_state_set(current, '!on')</div><div class='del'>-      w.item_state_set(item, 'on')</div><div class='del'>-      @Option[:setting, item] = :on</div><div class='del'>-      @Option[:current, group] = item</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Alternate implementation that doesn't rely on run-time styles</div><div class='del'>-def demoInternetOptions_2(t)</div><div class='del'>-  height = t.font.metrics(:linespace) + 2</div><div class='del'>-  height = 18 if height &lt; 18</div><div class='del'>-  t.configure(:showroot=&gt;false, :showbuttons=&gt;false, :showlines=&gt;false, </div><div class='del'>-              :itemheight=&gt;height, :selectmode=&gt;:browse)</div><div class='del'>-</div><div class='del'>-  init_pics('internet-*')</div><div class='del'>-</div><div class='del'>-  t.column_configure(0, :text=&gt;'Internet Options')</div><div class='del'>-</div><div class='del'>-  t.element_create('e1', :image)</div><div class='del'>-  t.element_create('e2', :text, </div><div class='del'>-                   :fill=&gt;[@SystemHighlightText, ['selected', 'focus']])</div><div class='del'>-  t.element_create('e3', :rect, :showfocus=&gt;true, </div><div class='del'>-                   :fill=&gt;[@SystemHighlight, ['selected', 'focus']])</div><div class='del'>-</div><div class='del'>-  s = t.style_create('s1')</div><div class='del'>-  t.style_elements('s1', ['e3', 'e1', 'e2'])</div><div class='del'>-  t.style_layout(s, 'e1', :padx=&gt;[0,4], :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e2', :expand=&gt;:ns)</div><div class='del'>-  t.style_layout(s, 'e3', :union=&gt;['e2'], :iexpand=&gt;:ns, :ipadx=&gt;2)</div><div class='del'>-</div><div class='del'>-  parentList = [:root, '', '', '', '', '', '']</div><div class='del'>-  parent = :root</div><div class='del'>-  [</div><div class='del'>-    [0, :print, "Printing", "", ""], </div><div class='del'>-        [1, :off, "Print background colors and images", "o1", ""], </div><div class='del'>-    [0, :search, "Search from Address bar", "", ""], </div><div class='del'>-        [1, :search, "When searching", "", ""], </div><div class='del'>-            [2, :off, "Display results, and go to the most likely sites", </div><div class='del'>-                                                                 "o2", "r1"], </div><div class='del'>-            [2, :off, "Do not search from the Address bar", "o3", "r1"], </div><div class='del'>-            [2, :off, "Just display the results in the main window", </div><div class='del'>-                                                                 "o4", "r1"],</div><div class='del'>-            [2, :on, "Just go to the most likely site", "o5", "r1"], </div><div class='del'>-    [0, :security, "Security", "", ""], </div><div class='del'>-        [1, :on, "Check for publisher's certificate revocation", "o5", ""], </div><div class='del'>-        [1, :off, "Check for server certificate revocation (requires restart)",</div><div class='del'>-                                                                 "o6", ""]</div><div class='del'>-  ].each{|depth, setting, text, option, group|</div><div class='del'>-    item = t.item_create()</div><div class='del'>-    t.item_style_set(item, 0, 's1')</div><div class='del'>-    t.item_element_configure(item, 0, 'e2', :text=&gt;text)</div><div class='del'>-    @Option[:option, item] = option</div><div class='del'>-    @Option[:group, item] = group</div><div class='del'>-    if setting == :on || setting == :off</div><div class='del'>-      @Option[:setting, item] = setting</div><div class='del'>-      if group == ''</div><div class='del'>-        img = @images["internet-check-#{setting}"]</div><div class='del'>-        t.item_element_configure(item, 0, 'e1', :image=&gt;img)</div><div class='del'>-      else</div><div class='del'>-        if setting == :on</div><div class='del'>-          @Option[:current, group] = item</div><div class='del'>-        end</div><div class='del'>-        img = @images["internet-radio-#{setting}"]</div><div class='del'>-        t.item_element_configure(item, 0, 'e1', :image=&gt;img)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      t.item_element_configure(item, 0, 'e1', </div><div class='del'>-                               :image=&gt;@images["internet-#{setting}"])</div><div class='del'>-    end</div><div class='del'>-    t.item_lastchild(parentList[depth], item)</div><div class='del'>-    depth += 1</div><div class='del'>-    parentList[depth] = item</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  treeCtrlOption = TkBindTag.new</div><div class='del'>-  treeCtrlOption.bind('Double-ButtonPress-1', proc{|w, x, y|</div><div class='del'>-                        Tk::TreeCtrl::BindCallback.doubleButton1(w, x, y)</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-  treeCtrlOption.bind('ButtonPress-1', proc{|w, x, y|</div><div class='del'>-                        optionButton1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-  treeCtrlOption.bind('Button1-Motion', proc{|w, x, y|</div><div class='del'>-                        optionMotion1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-  treeCtrlOption.bind('Button1-Leave', proc{|w, x, y|</div><div class='del'>-                        optionLeave1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-  treeCtrlOption.bind('ButtonRelease-1', proc{|w, x, y|</div><div class='del'>-                        optionRelease1(w, x, y)</div><div class='del'>-                        Tk.callback_break</div><div class='del'>-                      }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-  t.bindtags = [</div><div class='del'>-    t, treeCtrlOption, Tk::TreeCtrl, t.winfo_toplevel, TkBindTag::ALL</div><div class='del'>-  ]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def optionButton1_2(w, x, y)</div><div class='del'>-  w.set_focus</div><div class='del'>-  id = w.identify(x, y)</div><div class='del'>-  if id[0] == 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.buttonPress1(w, x, y)</div><div class='del'>-  elsif id.empty?</div><div class='del'>-    @Priv['buttonMode'] = ''</div><div class='del'>-  else</div><div class='del'>-    @Priv['buttonMode'] = ''</div><div class='del'>-    item = id[1]</div><div class='del'>-    w.selection_modify(item, :all)</div><div class='del'>-    w.activate(item)</div><div class='del'>-    return if @Option[:option, item] == ''</div><div class='del'>-    group = @Option[:group, item]</div><div class='del'>-    if group == ''</div><div class='del'>-      # a checkbutton</div><div class='del'>-      if @Option[:setting, item] == 'on'</div><div class='del'>-        setting = :off</div><div class='del'>-      else</div><div class='del'>-        setting = :on</div><div class='del'>-      end</div><div class='del'>-      w.item_element_configure(item, 0, 'e1', </div><div class='del'>-                               :image=&gt;@images["internet-check-#{setting}"])</div><div class='del'>-      @Option[:setting, item] = setting</div><div class='del'>-    else</div><div class='del'>-      # a radiobutton</div><div class='del'>-      current = @Option[:current, group]</div><div class='del'>-      return if current == item.to_s</div><div class='del'>-      w.item_element_configure(current, 0, 'e1', </div><div class='del'>-                               :image=&gt;@images["internet-radio-off"])</div><div class='del'>-      w.item_element_configure(item, 0, 'e1', </div><div class='del'>-                               :image=&gt;@images["internet-radio-on"])</div><div class='del'>-      @Option[:setting, item] = :on</div><div class='del'>-      @Option[:current, group] = item</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def optionMotion1(w, x, y)</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'resize', 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.motion1(w, x, y)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def optionLeave1(w, x, y)</div><div class='del'>-  # This is called when I do ButtonPress-1 on Unix for some reason,</div><div class='del'>-  # and buttonMode is undefined.</div><div class='del'>-  begin</div><div class='del'>-    mode = @Priv['buttonMode']</div><div class='del'>-  rescue</div><div class='del'>-  else</div><div class='del'>-    case mode</div><div class='del'>-    when 'header'</div><div class='del'>-      t.column_configure(@Priv['column'], :sunken=&gt;false)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def optionRelease1(w, x, y)</div><div class='del'>-  case @Priv['buttonMode']</div><div class='del'>-  when 'resize', 'header'</div><div class='del'>-    Tk::TreeCtrl::BindCallback.release1(w, x, y)</div><div class='del'>-  end</div><div class='del'>-  @Priv['buttonMode'] = ''</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt b/ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt<br/>deleted file mode 100644<br/>index f5f2f770cf..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-</div><div class='del'>-  &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  The following text is the original 'license.txt' of vu extension.  &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  Original Tcl source files are not include in this directry,        &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  because of all of them are rewrited to Ruby files.                 &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  However, the bitmap data file included in this directory is the    &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  same file of vu extension. So, the bitmap data file is under the   &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  following license.                                                 &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div class='del'>-</div><div class='del'>-		   * COPYRIGHT AND LICENSE TERMS *</div><div class='del'>-</div><div class='del'>-(This file blatantly stolen from Tcl/Tk license and adapted - thus assume</div><div class='del'>-it falls under similar license terms).</div><div class='del'>-</div><div class='del'>-This software is copyrighted by Jeffrey Hobbs &lt;jeff.hobbs@acm.org&gt; and</div><div class='del'>-others.  The following terms apply to all files associated with the</div><div class='del'>-software unless explicitly disclaimed in individual files.</div><div class='del'>-</div><div class='del'>-The authors hereby grant permission to use, copy, modify, distribute, and</div><div class='del'>-license this software and its documentation for any purpose, provided that</div><div class='del'>-existing copyright notices are retained in all copies and that this notice</div><div class='del'>-is included verbatim in any distributions.  No written agreement, license,</div><div class='del'>-or royalty fee is required for any of the authorized uses.</div><div class='del'>-</div><div class='del'>-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR</div><div class='del'>-DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT</div><div class='del'>-OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF,</div><div class='del'>-EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE 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 IS</div><div class='del'>-PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO</div><div class='del'>-OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR</div><div class='del'>-MODIFICATIONS.</div><div class='del'>-</div><div class='del'>-RESTRICTED RIGHTS: Use, duplication or disclosure by the U.S. government</div><div class='del'>-is subject to the restrictions as set forth in subparagraph (c) (1) (ii)</div><div class='del'>-of the Rights in Technical Data and Computer Software Clause as DFARS</div><div class='del'>-252.227-7013 and FAR 52.227-19.</div><div class='del'>-</div><div class='del'>-SPECIAL NOTES:</div><div class='del'>-</div><div class='del'>-This software also falls under the bourbon_ware clause:</div><div class='del'>-</div><div class='del'>-    Should you find this software useful in your daily work, you should</div><div class='del'>-    feel obliged to take the author out for a drink if the opportunity</div><div class='del'>-    presents itself.  The user may feel exempt from this clause if they</div><div class='del'>-    are under 21 or think the author has already partaken of too many</div><div class='del'>-    drinks.</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/README.txt b/ext/tk/sample/tkextlib/vu/README.txt<br/>deleted file mode 100644<br/>index ce5f371fac..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/README.txt?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/README.txt</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,50 +0,0 @@</div><div class='del'>-</div><div class='del'>-  &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  The following text is the original 'README.txt' of  &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;  vu extension demos.                                 &lt;&lt;&lt;</div><div class='del'>-  &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</div><div class='del'>-</div><div class='del'>-##</div><div class='del'>-## DESCRIPTION OF DEMOS</div><div class='del'>-##</div><div class='del'>-</div><div class='del'>-canvItems.tcl</div><div class='del'>-	old demo of all canvas chart items, useful to find memory leaks.</div><div class='del'>-	&lt;1&gt; prints out the additional memory usage (charts.so + script)</div><div class='del'>-</div><div class='del'>-canvSticker.tcl</div><div class='del'>-	Heribert Dahms original "demo.tcl"</div><div class='del'>-	&lt;p&gt; creates DEMO.ps</div><div class='del'>-</div><div class='del'>-canvSticker2.tcl</div><div class='del'>-	compares "sticker" and "text"; press &lt;1&gt;, &lt;2&gt; or &lt;1&gt; ...</div><div class='del'>-	&lt;p&gt; creates DEMO.ps</div><div class='del'>-</div><div class='del'>-dial.tcl</div><div class='del'>-	demo of variations of the dial widget.</div><div class='del'>-</div><div class='del'>-load.tcl</div><div class='del'>-	Just a utility file, not a real demo.</div><div class='del'>-</div><div class='del'>-m128_000.xbm</div><div class='del'>-	XBM pic used by sticker and canvItems demos</div><div class='del'>-</div><div class='del'>-oscilloscope.tcl</div><div class='del'>-	the heart of a Realtime Oscilloscope,where the PC´s joystick</div><div class='del'>-	port gives 4 digtal inputs and 4 analog 8 bit values with an</div><div class='del'>-	resolution of ~1 millisecond (!!!)  running Realtime Linux.</div><div class='del'>-	&lt;p&gt; creates DEMO.ps</div><div class='del'>-</div><div class='del'>-pie.tcl</div><div class='del'>-	The magic 3D spinning pie chart!</div><div class='del'>-</div><div class='del'>-vu.tcl</div><div class='del'>-	demo fo Vu widgets</div><div class='del'>-</div><div class='del'>-canvLabel.tcl</div><div class='del'>-	'label' is a canvas item just like 'text', but with -angle</div><div class='del'>-	rotation of the string.  This is not built in by default, as</div><div class='del'>-	it requires the internal Tk headers.</div><div class='del'>-	press &lt;1&gt;, &lt;2&gt; or &lt;1&gt; ...</div><div class='del'>-	&lt;p&gt; creates DEMO.ps</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/canvItems.rb b/ext/tk/sample/tkextlib/vu/canvItems.rb<br/>deleted file mode 100644<br/>index 33acf4f7e7..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/canvItems.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/canvItems.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,90 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/vu/charts'</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-xbm = File.join(File.dirname(File.expand_path(__FILE__)), 'm128_000.xbm')</div><div class='del'>-</div><div class='del'>-sval = [ 11, 22, 33, 44, 55, 66, 77, 88, 99 ]</div><div class='del'>-</div><div class='del'>-l0 = TkLabel.new(:width=&gt;128, :height=&gt;128, </div><div class='del'>-                 :bitmap=&gt;"@#{xbm}", :relief=&gt;:groove).pack(:side=&gt;:left)</div><div class='del'>-</div><div class='del'>-c0 = TkCanvas.new(:width=&gt;80, :height=&gt;80, </div><div class='del'>-                  :insertwidth=&gt;0, :highlightthickness=&gt;0, </div><div class='del'>-                  :selectborderwidth=&gt;0, :borderwidth=&gt;2, </div><div class='del'>-                  :relief=&gt;:ridge).place(:in=&gt;l0, :relx=&gt;0.5, :rely=&gt;0.5, </div><div class='del'>-                                         :anchor=&gt;:c)</div><div class='del'>-</div><div class='del'>-st = Tk::Vu::TkcStripchart.new(c0, 3, 3, 80, 80, </div><div class='del'>-                               :background=&gt;"#b7c0d7", :fill=&gt;'slategray3', </div><div class='del'>-                               :jumpscroll=&gt;1, :outline=&gt;'black', </div><div class='del'>-                               :scaleline=&gt;'blue', :stripline=&gt;'red', </div><div class='del'>-                               :selected=&gt;1, :values=&gt;sval)</div><div class='del'>-</div><div class='del'>-TkcText.create(c0, 40, 40, </div><div class='del'>-               :text=&gt;Tk::TCL_PATCHLEVEL, :fill=&gt;'cyan', :tags=&gt;'text')</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-l1 = TkLabel.new(:width=&gt;128, :height=&gt;128, </div><div class='del'>-                 :bitmap=&gt;"@#{xbm}", :relief=&gt;:groove).pack(:side=&gt;:left)</div><div class='del'>-</div><div class='del'>-c1 = TkCanvas.new(:width=&gt;80, :height=&gt;80, </div><div class='del'>-                  :insertwidth=&gt;0, :highlightthickness=&gt;0, </div><div class='del'>-                  :selectborderwidth=&gt;0, :borderwidth=&gt;2, </div><div class='del'>-                  :relief=&gt;:ridge).place(:in=&gt;l1, :relx=&gt;0.5, :rely=&gt;0.5, </div><div class='del'>-                                         :anchor=&gt;:c)</div><div class='del'>-</div><div class='del'>-bar1 = Tk::Vu::TkcBarchart.new(c1, 3, 3, 80, 80, </div><div class='del'>-                               :background=&gt;"#b7c0d7", :scalevalue=&gt;10.0, </div><div class='del'>-                               :autocolor=&gt;true, :selected=&gt;1, </div><div class='del'>-                               :outline=&gt;'black', :barline=&gt;'yellow', </div><div class='del'>-                               :scalelinestyle=&gt;0)</div><div class='del'>-</div><div class='del'>-bar2 = Tk::Vu::TkcBarchart.new(c1, 53, 3, 80, 80, </div><div class='del'>-                               :background=&gt;"#b7c0d7", :scalevalue=&gt;10.0, </div><div class='del'>-                               :autocolor=&gt;true, :selected=&gt;1, </div><div class='del'>-                               :outline=&gt;'black', :fill=&gt;"#b7c0d7", </div><div class='del'>-                               :barline=&gt;'red', :scalelinestyle=&gt;22)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-l2 = TkLabel.new(:width=&gt;128, :height=&gt;128, </div><div class='del'>-                 :bitmap=&gt;"@#{xbm}", :relief=&gt;:groove).pack(:side=&gt;:left)</div><div class='del'>-</div><div class='del'>-c2 = TkCanvas.new(:width=&gt;80, :height=&gt;80, </div><div class='del'>-                  :insertwidth=&gt;0, :highlightthickness=&gt;0, </div><div class='del'>-                  :selectborderwidth=&gt;0, :borderwidth=&gt;2, </div><div class='del'>-                  :relief=&gt;:ridge).place(:in=&gt;l2, :relx=&gt;0.5, :rely=&gt;0.5, </div><div class='del'>-                                         :anchor=&gt;:c)</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  stick = Tk::Vu::TkcSticker.new(c2, 3, 3, 80, 80, </div><div class='del'>-                                 :text=&gt;"Tcl/Tk", :space=&gt;0, :color=&gt;'red', </div><div class='del'>-                                 :outline=&gt;'red', :font=&gt;'Helvetica 14 bold', </div><div class='del'>-                                 :fill=&gt;'', :stipple=&gt;'', :bar=&gt;'blue', </div><div class='del'>-                                 :orient=&gt;:vertical, :anchor=&gt;:s, </div><div class='del'>-                                 :relheight=&gt;1.0, :relwidth=&gt;0.15, </div><div class='del'>-                                 :relx=&gt;0.1, :rely=&gt;0.0)</div><div class='del'>-rescue</div><div class='del'>-  stick = nil</div><div class='del'>-  TkcText.new(c2, 40, 10, :text=&gt;"No Sticker Item")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-c_do = proc{</div><div class='del'>-  st[:values]   = rand() * 100</div><div class='del'>-</div><div class='del'>-  bar1[:values] = rand() * 10</div><div class='del'>-  bar2[:values] = rand() * 10</div><div class='del'>-</div><div class='del'>-  stick[:rely]  = rand() * 100 * 0.01 if stick</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-c0.bind('1', c_do)</div><div class='del'>-</div><div class='del'>-TkTimer.new(100, -1, c_do).start</div><div class='del'>-</div><div class='del'>-Tk.root.bind('q', proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/canvSticker.rb b/ext/tk/sample/tkextlib/vu/canvSticker.rb<br/>deleted file mode 100644<br/>index e2cd604975..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/canvSticker.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/canvSticker.rb</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'>-require 'tk'</div><div class='del'>-require 'tkextlib/vu/charts'</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-Tk.root.geometry('+30+30')</div><div class='del'>-</div><div class='del'>-delay = 2000</div><div class='del'>-</div><div class='del'>-c = TkCanvas.new.pack</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  st = Tk::Vu::TkcSticker.new(c, 0, 0, 10, 10)</div><div class='del'>-rescue</div><div class='del'>-  Tk.messageBox(:type=&gt;'ok', :title=&gt;"No sticker Item", </div><div class='del'>-                :message=&gt;"This build of vu does not include the sticker item")</div><div class='del'>-  exit</div><div class='del'>-end</div><div class='del'>-#st.delete</div><div class='del'>-</div><div class='del'>-steps = []</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  # I used a 75dpi screen for testing, but others should make no difference!</div><div class='del'>-  puts 'You\'ll see a small upright rectangle with "He" inside.'</div><div class='del'>-  st = Tk::Vu::TkcSticker.new(c, '6m', '10m', '13m', '27m', :text=&gt;'Hello')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts 'You\'ll see the whole "Hello" drawn rotated 90 degrees.'</div><div class='del'>-  st[:orient] = :vertical</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts 'The rectangle shrinks and the text is clipped to "Hell"'</div><div class='del'>-  #st.coords('6m', '10m', '13m', '20m')</div><div class='del'>-  st.coords('6m', '10m', '13m', '17m')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts 'Now you\'ll read "ello"'</div><div class='del'>-  st[:lefttrunc] = true</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts 'Enlarging the rectangle shows the complete "Hello" again'</div><div class='del'>-  st.scale(0, 0, 3, 3)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts 'This time the text is repeated: "Hello", approx. 5mm space, "Hello"'</div><div class='del'>-  st[:space] = '5m'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts 'A vertical bar appears in the lower right region and text jumps to the left.'</div><div class='del'>-  st.configure(:anchor=&gt;:n, :relw=&gt;0.3, :relh=&gt;0.7, </div><div class='del'>-               :relx=&gt;0.6, :rely=&gt;0.3, :bar=&gt;'red')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts 'Paint the backgound.'</div><div class='del'>-  st[:fill] = 'yellow'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts "Let's test stippling."</div><div class='del'>-  st[:stipple] = 'gray25'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-steps &lt;&lt; proc{</div><div class='del'>-  puts 'Finally a large outline forces a single "Hello" and shrinks the bar.'</div><div class='del'>-  st[:width] = '6m'</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.root.bind('q', proc{exit})</div><div class='del'>-</div><div class='del'>-TkTimer.new(delay, 1, *steps).start</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/canvSticker2.rb b/ext/tk/sample/tkextlib/vu/canvSticker2.rb<br/>deleted file mode 100644<br/>index 548a72c2cb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/canvSticker2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/canvSticker2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,101 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/vu/charts'</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-c = TkCanvas.new.pack</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  st = Tk::Vu::TkcSticker.new(c, 0, 0, 10, 10)</div><div class='del'>-rescue</div><div class='del'>-  Tk.messageBox(:type=&gt;'ok', :title=&gt;"No sticker Item", </div><div class='del'>-                :message=&gt;"This build of vu does not include the sticker item")</div><div class='del'>-  exit</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-c.destroy</div><div class='del'>-</div><div class='del'>-#---</div><div class='del'>-#--- set STRING {{x0 y0 x1 y1} {...text...} {resize point: center}</div><div class='del'>-</div><div class='del'>-#sti_conf = [ [10, 10, 180, 180], "Sticker Ã¤Ã¶Ã¼ÃŸ@Â²Â³Â¼Â½Â¾",  :center ]</div><div class='del'>-#txt_conf = [ [210, 210],        "Text    Ã¤Ã¶Ã¼ÃŸ@Â²Â³Â¼Â½Â¾",  :center ]</div><div class='del'>-sti_conf = [ [10, 10, 350, 350], </div><div class='del'>-             Tk::UTF8_String('Sticker \u00E4\u00F6\u00FC\u00DF\u0040\u00B2\u00B3\u00BC\u00BD\u00BE'),</div><div class='del'>-             :center ]</div><div class='del'>-txt_conf = [ [250, 250],</div><div class='del'>-             Tk::UTF8_String('Text    \u00E4\u00F6\u00FC\u00DF\u0040\u00B2\u00B3\u00BC\u00BD\u00BE'),</div><div class='del'>-             :center ]</div><div class='del'>-</div><div class='del'>-#p sti_conf</div><div class='del'>-</div><div class='del'>-fnt = TkFont.new('Helvetica 24 bold')</div><div class='del'>-</div><div class='del'>-#---GUI</div><div class='del'>-c = TkCanvas.new(:width=&gt;500, :height=&gt;500, :bg=&gt;'aquamarine3').pack</div><div class='del'>-</div><div class='del'>-#---CRRW Use the technique of eval the coord ...</div><div class='del'>-sti = Tk::Vu::TkcSticker.new(c, sti_conf[0]){</div><div class='del'>-  anchor    sti_conf[2]</div><div class='del'>-  bar       'black'</div><div class='del'>-  color     'red'</div><div class='del'>-  fill      ''</div><div class='del'>-  font      fnt</div><div class='del'>-  lefttrunc 0</div><div class='del'>-  outline   ''</div><div class='del'>-  relheight 0.0</div><div class='del'>-  relwidth  0.0</div><div class='del'>-  relx      0.0</div><div class='del'>-  rely      0.0</div><div class='del'>-  space     0</div><div class='del'>-  stipple   ''</div><div class='del'>-  tags      'sti'</div><div class='del'>-  text      sti_conf[1]</div><div class='del'>-  width     0</div><div class='del'>-  orient    :vertical</div><div class='del'>-  minwidth  0</div><div class='del'>-  minheight 0</div><div class='del'>-  maxwidth  32767</div><div class='del'>-  maxheight 32767</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-txt = TkcText.new(c, txt_conf[0]){</div><div class='del'>-  activefill      ''</div><div class='del'>-  activestipple   ''</div><div class='del'>-  anchor          txt_conf[2]</div><div class='del'>-  disabledfill    ''</div><div class='del'>-  disabledstipple ''</div><div class='del'>-  fill            'blue'</div><div class='del'>-  font            fnt</div><div class='del'>-  justify         :left</div><div class='del'>-  offset          '0,0'</div><div class='del'>-  state           ''</div><div class='del'>-  stipple         ''</div><div class='del'>-  tags            ['tex']</div><div class='del'>-  text            txt_conf[1]</div><div class='del'>-  width           0</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#---BINDINGS</div><div class='del'>-c.bind('2', proc{</div><div class='del'>-         sti[:orient] = :horizontal</div><div class='del'>-         txt[:width] = 0  # horizontal</div><div class='del'>-       })</div><div class='del'>-</div><div class='del'>-c.bind('3', proc{</div><div class='del'>-         sti[:orient] = :vertical</div><div class='del'>-         txt[:width] = 1  # top down</div><div class='del'>-       })</div><div class='del'>-</div><div class='del'>-Tk.root.bind('p', proc{</div><div class='del'>-               c.postscript(:file=&gt;'DEMO.ps')</div><div class='del'>-               puts "DEMO.ps printed"</div><div class='del'>-             })</div><div class='del'>-</div><div class='del'>-Tk.root.bind('q', proc{exit})</div><div class='del'>-</div><div class='del'>-#####################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/dial_demo.rb b/ext/tk/sample/tkextlib/vu/dial_demo.rb<br/>deleted file mode 100644<br/>index 09bd3e9186..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/dial_demo.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/dial_demo.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,113 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/vu/dial'</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-v_volume = TkVariable.new</div><div class='del'>-v_speed  = TkVariable.new</div><div class='del'>-v_dir    = TkVariable.new</div><div class='del'>-v_rot    = TkVariable.new</div><div class='del'>-v_linked = TkVariable.new</div><div class='del'>-v_needle = TkVariable.new</div><div class='del'>-</div><div class='del'>-volume = Tk::Vu::Dial.new(:label=&gt;"Volume", :from=&gt;-0.1, :to=&gt;0.1, </div><div class='del'>-                          :resolution=&gt;0.001, :minortickinterval=&gt;0.01, </div><div class='del'>-                          :tickinterval=&gt;0.1, :beginangle=&gt;-20, </div><div class='del'>-                          :endangle=&gt;260, :variable=&gt;v_volume)</div><div class='del'>-</div><div class='del'>-speed = Tk::Vu::Dial.new(:label=&gt;"Speed", :from=&gt;2000, :to=&gt;100, </div><div class='del'>-                         :resolution=&gt;10, :tickinterval=&gt;100, </div><div class='del'>-                         :minortickinterval=&gt;0, :variable=&gt;v_speed, </div><div class='del'>-                         :showtags=&gt;:label, :showvalue=&gt;false)</div><div class='del'>-</div><div class='del'>-speed.set_tag_constrain(100, 'Fast', 2000, 'Slow')</div><div class='del'>-</div><div class='del'>-fwd  = Tk::Vu::Dial.new(:from=&gt;-10.0, :to=&gt;-20.0, :resolution=&gt;0.1, </div><div class='del'>-                        :tickinterval=&gt;5.0, :minortickinterval=&gt;1.0, </div><div class='del'>-                        :variable=&gt;v_dir)</div><div class='del'>-</div><div class='del'>-rev  = Tk::Vu::Dial.new(:from=&gt;-20.0, :to=&gt;-10.0, :resolution=&gt;0.1, </div><div class='del'>-                        :tickinterval=&gt;5.0, :minortickinterval=&gt;1.0, </div><div class='del'>-                        :variable=&gt;v_dir)</div><div class='del'>-</div><div class='del'>-small = Tk::Vu::Dial.new(:font=&gt;"Helvetica -10", :from=&gt;0, :to=&gt;10, </div><div class='del'>-                         :resolution=&gt;0.05, :tickinterval=&gt;2,</div><div class='del'>-                         :minortickinterval=&gt;0.5, :radius=&gt;20, </div><div class='del'>-                         :dialcolor=&gt;'red2', :activebackground=&gt;'red', </div><div class='del'>-                         :variable=&gt;v_rot)</div><div class='del'>-</div><div class='del'>-large = Tk::Vu::Dial.new(:font=&gt;"Helvetica -8", :from=&gt;0, :to=&gt;10, </div><div class='del'>-                         :resolution=&gt;0.05, :tickinterval=&gt;1,</div><div class='del'>-                         :minortickinterval=&gt;0.25, :radius=&gt;40, </div><div class='del'>-                         :dialcolor=&gt;'red2', :activebackground=&gt;'red', </div><div class='del'>-                         :variable=&gt;v_rot)</div><div class='del'>-</div><div class='del'>-turn = Tk::Vu::Dial.new(:needlecolor=&gt;'red', :label=&gt;"Linked", </div><div class='del'>-                        :variable=&gt;v_linked)</div><div class='del'>-</div><div class='del'>-scale = TkScale.new(:label=&gt;"Linked", :variable=&gt;v_linked)</div><div class='del'>-</div><div class='del'>-d1 = Tk::Vu::Dial.new(:resolution=&gt;0.0001, :from=&gt;-0.1, :to=&gt;0.1, </div><div class='del'>-                      :showvalue=&gt;true, :minortickinterval=&gt;0.01, </div><div class='del'>-                      :tickinterval=&gt;0.1, :radius=&gt;30, :label=&gt;"Dial", </div><div class='del'>-                      :beginangle=&gt;-20, :endangle=&gt;260, :variable=&gt;v_needle, </div><div class='del'>-                      :relief=&gt;:raised)</div><div class='del'>-</div><div class='del'>-d2 = Tk::Vu::Dial.new(:resolution=&gt;0.01, :from=&gt;-0.1, :to=&gt;0.1, </div><div class='del'>-                      :showvalue=&gt;true, :minortickinterval=&gt;0.01, </div><div class='del'>-                      :tickinterval=&gt;0.1, :radius=&gt;30, :label=&gt;"Dial 2", </div><div class='del'>-                      :beginangle=&gt;-20, :endangle=&gt;260, :variable=&gt;v_needle, </div><div class='del'>-                      :dialrelief=&gt;:flat, :needlecolor=&gt;'red', </div><div class='del'>-                      :needletype=&gt;:triangle, :relief=&gt;:sunken)</div><div class='del'>-</div><div class='del'>-d3 = Tk::Vu::Dial.new(:resolution=&gt;0.001, :from=&gt;-0.1, :to=&gt;0.1, </div><div class='del'>-                      :showvalue=&gt;true, :minortickinterval=&gt;0.01, </div><div class='del'>-                      :tickinterval=&gt;0.1, :radius=&gt;30, :label=&gt;"Dial 3", </div><div class='del'>-                      :beginangle=&gt;-20, :endangle=&gt;260, :variable=&gt;v_needle, </div><div class='del'>-                      :dialrelief=&gt;:flat, :needlecolor=&gt;'blue', </div><div class='del'>-                      :needletype=&gt;:arc, :relief=&gt;:ridge)</div><div class='del'>-</div><div class='del'>-f_btns = TkFrame.new</div><div class='del'>-f_sep  = TkFrame.new(:height=&gt;2, :relief=&gt;:sunken, :bd=&gt;1)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-v_volume.value = -0.1</div><div class='del'>-v_speed.value = 500</div><div class='del'>-</div><div class='del'>-update = TkTimer.new(proc{v_speed.numeric}, -1, proc{</div><div class='del'>-                       if v_volume == volume[:to]</div><div class='del'>-                         v_volume.numeric = volume[:from]</div><div class='del'>-                       else</div><div class='del'>-                         v_volume.numeric += volume[:resolution]</div><div class='del'>-                       end</div><div class='del'>-                     })</div><div class='del'>-</div><div class='del'>-b_start = TkButton.new(:text=&gt;"Start", :command=&gt;proc{update.start})</div><div class='del'>-b_stop  = TkButton.new(:text=&gt;"Stop",  :command=&gt;proc{update.stop})</div><div class='del'>-b_exit  = TkButton.new(:text=&gt;"Exit",  :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.grid(b_start, :in=&gt;f_btns, :sticky=&gt;:ew, :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-Tk.grid(b_stop,  :in=&gt;f_btns, :sticky=&gt;:ew, :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-f_btns.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-Tk.grid(f_btns, speed, volume, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(f_sep,  '-',   '-',    :sticky=&gt;:news)</div><div class='del'>-Tk.grid(fwd,    rev,   d1,     :sticky=&gt;:news)</div><div class='del'>-Tk.grid(small,  large, d2,     :sticky=&gt;:news)</div><div class='del'>-Tk.grid(turn,   scale, d3,     :sticky=&gt;:news)</div><div class='del'>-</div><div class='del'>-Tk.grid(b_exit, '-',   '-',    :sticky=&gt;:ew, :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_columnconfigure(1, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_columnconfigure(2, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfigure(2, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfigure(3, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfigure(4, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/m128_000.xbm b/ext/tk/sample/tkextlib/vu/m128_000.xbm<br/>deleted file mode 100644<br/>index 455e3c5e0f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/m128_000.xbm?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/m128_000.xbm</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,174 +0,0 @@</div><div class='del'>-#define m128_000_width 128</div><div class='del'>-#define m128_000_height 128</div><div class='del'>-static unsigned char m128_000_bits[] = {</div><div class='del'>-  0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,</div><div class='del'>-  0xff, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,</div><div class='del'>-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf0, 0xff, 0xff, 0xff,</div><div class='del'>-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,</div><div class='del'>-  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,</div><div class='del'>-  0xff, 0xff, 0xff, 0x03, 0xfc, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xea, 0x0f, 0xfc, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x0f,</div><div class='del'>-  0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3f, 0x7f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3f, 0xaf, 0xfa, 0xab, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xfa, 0xab, 0x3e,</div><div class='del'>-  0x5f, 0xf5, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0xf5, 0x57, 0x3d, 0xaf, 0x0e, 0xac, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0e, 0xac, 0x3e, 0x5f, 0x0d, 0x5c, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x0d, 0x5c, 0x3d,</div><div class='del'>-  0xaf, 0x03, 0xb0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0x03, 0xb0, 0x3e, 0x5f, 0x03, 0x70, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x03, 0x70, 0x3d, 0xaf, 0x03, 0xb0, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x03, 0xb0, 0x3e,</div><div class='del'>-  0x5f, 0x03, 0x70, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x03, 0x70, 0x3d, 0xaf, 0x03, 0xb0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x03, 0xb0, 0x3e, 0x5f, 0x03, 0x70, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x03, 0x70, 0x3d,</div><div class='del'>-  0xaf, 0x0e, 0xac, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0x0e, 0xac, 0x3e, 0x5f, 0x0d, 0x5c, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x0d, 0x5c, 0x3d, 0xaf, 0xfa, 0xab, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xfa, 0xab, 0x3e,</div><div class='del'>-  0x5f, 0xf5, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0xf5, 0x57, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e,</div><div class='del'>-  0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x3d, 0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d,</div><div class='del'>-  0xaf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0x3e, 0x5f, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3d, 0xaf, 0xfa, 0xab, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xfa, 0xab, 0x3e,</div><div class='del'>-  0x5f, 0xf5, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0xf5, 0x57, 0x3d, 0xaf, 0x0e, 0xac, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x0e, 0xac, 0x3e, 0x5f, 0x0d, 0x5c, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x0d, 0x5c, 0x3d,</div><div class='del'>-  0xaf, 0x03, 0xb0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0x03, 0xb0, 0x3e, 0x5f, 0x03, 0x70, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x03, 0x70, 0x3d, 0xaf, 0x03, 0xb0, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x03, 0xb0, 0x3e,</div><div class='del'>-  0x5f, 0x03, 0x70, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x03, 0x70, 0x3d, 0xaf, 0x03, 0xb0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x03, 0xb0, 0x3e, 0x5f, 0x03, 0x70, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x03, 0x70, 0x3d,</div><div class='del'>-  0xaf, 0x0e, 0xac, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0x0e, 0xac, 0x3e, 0x5f, 0x0d, 0x5c, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x0d, 0x5c, 0x3d, 0xaf, 0xfa, 0xab, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xfa, 0xab, 0x3e,</div><div class='del'>-  0x5f, 0xf5, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0xf5, 0x57, 0x3d, 0xbf, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x3f, 0x7f, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x3f,</div><div class='del'>-  0xfc, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,</div><div class='del'>-  0xaa, 0xaa, 0xea, 0x0f, 0xfc, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,</div><div class='del'>-  0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xd5, 0x0f, 0xf0, 0xff, 0xff, 0xff,</div><div class='del'>-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03,</div><div class='del'>-  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,</div><div class='del'>-  0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,</div><div class='del'>-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0xff,</div><div class='del'>-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,</div><div class='del'>-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/oscilloscope.rb b/ext/tk/sample/tkextlib/vu/oscilloscope.rb<br/>deleted file mode 100644<br/>index 2015e46645..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/oscilloscope.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/oscilloscope.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,68 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/vu/charts'</div><div class='del'>-</div><div class='del'>-#---USAGE</div><div class='del'>-info = "...the heart of a Realtime Oscilloscope, where the PCIs</div><div class='del'>-joystick port gives 4 digtal inputs and 4 analog 8 bit</div><div class='del'>-values with an resolution of ~1 millisecond (!!!)</div><div class='del'>-running Realtime Linux.</div><div class='del'>-&lt;p&gt; creates DEMO.ps</div><div class='del'>-&lt;B1-Motion&gt; see what happens"</div><div class='del'>-puts info</div><div class='del'>-</div><div class='del'>-#---GEOMETRY</div><div class='del'>-geo_fr  = [10, 10, 210, 180]</div><div class='del'>-geo_ch0 = [10, 10, 210,  90]</div><div class='del'>-geo_ch1 = [10, 90, 210, 180]</div><div class='del'>-geo_t1  = [15, 88]</div><div class='del'>-</div><div class='del'>-#---GUI</div><div class='del'>-c = TkCanvas.new(:width=&gt;220, :height=&gt;190).pack(:fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-</div><div class='del'>-#---background</div><div class='del'>-TkcRectangle.new(c, geo_fr, :width=&gt;4, :fill=&gt;'aquamarine3', </div><div class='del'>-                 :tags=&gt;['osc', 'frbg'])</div><div class='del'>-</div><div class='del'>-#---channel 0</div><div class='del'>-ch0 = Tk::Vu::TkcStripchart.new(c, geo_ch0, </div><div class='del'>-                                :fill=&gt;'', :jumpscroll=&gt;false, </div><div class='del'>-                                :outline=&gt;'', :scaleline=&gt;'', </div><div class='del'>-                                :stripline=&gt;'cyan', :tags=&gt;['osc', 'ch0'])</div><div class='del'>-</div><div class='del'>-#---channel 1</div><div class='del'>-ch1 = Tk::Vu::TkcStripchart.new(c, geo_ch1, </div><div class='del'>-                                :fill=&gt;'', :jumpscroll=&gt;0, </div><div class='del'>-                                :outline=&gt;'', :scaleline=&gt;'', </div><div class='del'>-                                :stripline=&gt;'red', :tags=&gt;['osc', 'ch1'])</div><div class='del'>-</div><div class='del'>-#---frame</div><div class='del'>-TkcRectangle.new(c, geo_fr, :width=&gt;4, :tags=&gt;['osc', 'frfg'])</div><div class='del'>-</div><div class='del'>-#---position</div><div class='del'>-txt1 = TkcText.new(c, geo_t1, :text=&gt;"B1-Motion: X:%X\tY:%Y", </div><div class='del'>-                   :anchor=&gt;:nw, :tags=&gt;['osc', 'txt1'])</div><div class='del'>-</div><div class='del'>-#---BINDINGS</div><div class='del'>-c.bind('B1-Motion', proc{|x, y, xx, yy|</div><div class='del'>-         ch0[:values] = x</div><div class='del'>-         ch1[:values] = y</div><div class='del'>-         txt1[:text] = "B1-Motion: X:#{xx}\tY:#{yy}"</div><div class='del'>-       }, '%x %y %X %Y')</div><div class='del'>-</div><div class='del'>-Tk.root.bind('v', proc{</div><div class='del'>-               puts ch0[:values].join(' ')</div><div class='del'>-               puts ch0[:values].size</div><div class='del'>-             })</div><div class='del'>-</div><div class='del'>-Tk.root.bind('p', proc{</div><div class='del'>-               c.postscript(:file=&gt;'DEMO.ps')</div><div class='del'>-               puts "DEMO.ps printed"</div><div class='del'>-             })</div><div class='del'>-</div><div class='del'>-Tk.root.bind('q', proc{exit})</div><div class='del'>-</div><div class='del'>-#####################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/pie.rb b/ext/tk/sample/tkextlib/vu/pie.rb<br/>deleted file mode 100644<br/>index ed598d6233..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/pie.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/pie.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tkextlib/vu/pie'</div><div class='del'>-</div><div class='del'>-pie = Tk::Vu::Pie.new(:label=&gt;"My Revolving Budget"){</div><div class='del'>-  itemconfigure('Welfare',   :value=&gt;3.004)</div><div class='del'>-  itemconfigure('Military',  :value=&gt;7.006)</div><div class='del'>-  itemconfigure('Transport', :value=&gt;1.6, :explode=&gt;15)</div><div class='del'>-  itemconfigure('Parks',     :value=&gt;0.9)</div><div class='del'>-  itemconfigure('Schools',   :value=&gt;2)</div><div class='del'>-  itemconfigure('Debt',      :value=&gt;4,   :explode=&gt;10)</div><div class='del'>-</div><div class='del'>-  configure(:angle=&gt;10, :origin=&gt;90, :shadow=&gt;10)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-spin = TkTimer.new(60, -1, proc{|obj|</div><div class='del'>-  pie.configure(:origin=&gt;pie[:origin] + 1)</div><div class='del'>-})</div><div class='del'>-</div><div class='del'>-f = TkFrame.new</div><div class='del'>-fast_btn = TkButton.new(f, :text=&gt;"Spin Faster", :command=&gt;proc{spin.start})</div><div class='del'>-slow_btn = TkButton.new(f, :text=&gt;"Spin Slower", :command=&gt;proc{spin.stop})</div><div class='del'>-quit_btn = TkButton.new(f, :text=&gt;"Exit", :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.grid(pie, :sticky=&gt;:news)</div><div class='del'>-Tk.grid(f, :sticky=&gt;:ew)</div><div class='del'>-</div><div class='del'>-Tk.pack(fast_btn, slow_btn, quit_btn, </div><div class='del'>-        :in=&gt;f, :side=&gt;:left, :fill=&gt;:both, :expand=&gt;true, :padx=&gt;6, :pady=&gt;4)</div><div class='del'>-</div><div class='del'>-Tk.root.grid_columnconfigure(0, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfigure(0, :weight=&gt;1)</div><div class='del'>-</div><div class='del'>-priv = { </div><div class='del'>-  :x=&gt;0, :y=&gt;0, :pie_in=&gt;false, :angle=&gt;pie[:angle], :origin=&gt;pie[:origin]</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-pie.bind('ButtonPress-1', proc{|w, x, y|</div><div class='del'>-             priv[:x] = x</div><div class='del'>-             priv[:y] = y</div><div class='del'>-             priv[:pie_in] = (w.winfo_width/1.8 &gt; x)</div><div class='del'>-             priv[:angle]  = w[:angle]</div><div class='del'>-             priv[:origin] = w[:origin]</div><div class='del'>-         }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-pie.bind('B1-Motion', proc{|w, x, y|</div><div class='del'>-           if priv[:pie_in]</div><div class='del'>-             w.configure(:angle=&gt;priv[:angle] + (priv[:y] - y)/3, </div><div class='del'>-                         :origin=&gt;(priv[:origin] + </div><div class='del'>-                                   ((w.winfo_height/2.2 &gt; y)? -1: 1) * </div><div class='del'>-                                   (priv[:x] - x)/3) % 360)</div><div class='del'>-           end</div><div class='del'>-         }, '%W %x %y')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkextlib/vu/vu_demo.rb b/ext/tk/sample/tkextlib/vu/vu_demo.rb<br/>deleted file mode 100644<br/>index d078ae16f2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkextlib/vu/vu_demo.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkextlib/vu/vu_demo.rb</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'>-require 'tk'</div><div class='del'>-require 'tkextlib/vu'</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-puts "Show off barchart and dial widgets"</div><div class='del'>-</div><div class='del'>-speed = TkVariable.new(0)</div><div class='del'>-</div><div class='del'>-dial = Tk::Vu::Dial.new(:resolution=&gt;0.001, :from=&gt;-0.1, :to=&gt;0.1, </div><div class='del'>-                        :showvalue=&gt;true, :minortickinterval=&gt;0.01, </div><div class='del'>-                        :tickinterval=&gt;0.1, :radius=&gt;50, :label=&gt;"Dial", </div><div class='del'>-                        :beginangle=&gt;-20, :endangle=&gt;260, :dialcolor=&gt;'red3', </div><div class='del'>-                        :active=&gt;'red2', :variable=&gt;speed)</div><div class='del'>-</div><div class='del'>-bar = Tk::Vu::Bargraph.new(:from=&gt;0, :to=&gt;100, :relief=&gt;:groove, </div><div class='del'>-                           :border=&gt;2, :label=&gt;"Bar Chart")</div><div class='del'>-</div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-green   = 25</div><div class='del'>-blue    = 50</div><div class='del'>-purple  = 75</div><div class='del'>-current = 50</div><div class='del'>-</div><div class='del'>-def rand_bool</div><div class='del'>-  </div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-update = TkTimer.new(200, -1, proc{</div><div class='del'>-                       if (rand() - 0.5 + speed.numeric * 3) &gt; 0</div><div class='del'>-                         current += 1</div><div class='del'>-                       else</div><div class='del'>-                         current -= 1</div><div class='del'>-                       end</div><div class='del'>-                       bar.set(current)</div><div class='del'>-                       if current &lt; green</div><div class='del'>-                         current = 100 if current &lt;= 0</div><div class='del'>-                         bar[:barcolor] = 'green'</div><div class='del'>-                       elsif current &lt; blue</div><div class='del'>-                         bar[:barcolor] = 'blue'</div><div class='del'>-                       elsif current &lt; purple</div><div class='del'>-                         bar[:barcolor] = 'purple'</div><div class='del'>-                       else</div><div class='del'>-                         bar[:barcolor] = 'red'</div><div class='del'>-                         current = 0 if current &gt;= 100</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'>-gobar = TkButton.new(:text=&gt;"Start", :command=&gt;proc{update.start})</div><div class='del'>-nobar = TkButton.new(:text=&gt;"Stop",  :command=&gt;proc{update.stop})</div><div class='del'>-quit  = TkButton.new(:text=&gt;"Exit",  :command=&gt;proc{exit})</div><div class='del'>-</div><div class='del'>-Tk.grid('x', gobar, :sticky=&gt;:ew, :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-Tk.grid(dial, bar, :sticky=&gt;:news)</div><div class='del'>-Tk.grid('x', nobar, :sticky=&gt;:ew, :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-Tk.grid(quit, '-', '-', :sticky=&gt;:ew, :padx=&gt;4, :pady=&gt;4)</div><div class='del'>-Tk.root.grid_columnconfigure(2, :weight=&gt;1)</div><div class='del'>-Tk.root.grid_rowconfigure(1, :weight=&gt;1)</div><div class='del'>-                       </div><div class='del'>-#######################################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkfrom.rb b/ext/tk/sample/tkfrom.rb<br/>deleted file mode 100644<br/>index 2cece7337e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkfrom.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkfrom.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,132 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require "parsedate"</div><div class='del'>-require "base64"</div><div class='del'>-</div><div class='del'>-include ParseDate</div><div class='del'>-</div><div class='del'>-class Mail</div><div class='del'>-  def Mail.new(f)</div><div class='del'>-    if !f.kind_of?(IO)</div><div class='del'>-      f = open(f, "r")</div><div class='del'>-      me = super(f)</div><div class='del'>-      f.close</div><div class='del'>-    else</div><div class='del'>-      me = super</div><div class='del'>-    end</div><div class='del'>-    return me</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(f)</div><div class='del'>-    @header = {}</div><div class='del'>-    @body = []</div><div class='del'>-    while line = f.gets()</div><div class='del'>-      $_.chop!</div><div class='del'>-      next if /^From / =~ line  # skip From-line  </div><div class='del'>-      break if /^$/ =~ line     # end of header</div><div class='del'>-      if /^(\S+):\s*(.*)/ =~ line</div><div class='del'>-        @header[attr = $1.capitalize] = $2</div><div class='del'>-      elsif attr</div><div class='del'>-        sub(/^\s*/, '')</div><div class='del'>-        @header[attr] += "\n" + $_</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    return unless $_</div><div class='del'>-</div><div class='del'>-    while line = f.gets()</div><div class='del'>-      break if /^From / =~ line</div><div class='del'>-      @body.push($_)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def header</div><div class='del'>-    return @header</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def body</div><div class='del'>-    return @body</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if ARGV.length == 0</div><div class='del'>-  if ENV['MAIL']</div><div class='del'>-    ARGV[0] = ENV['MAIL']</div><div class='del'>-  elsif ENV['USER']</div><div class='del'>-    ARGV[0] = '/var/spool/mail/' + ENV['USER']</div><div class='del'>-  elsif ENV['LOGNAME']</div><div class='del'>-    ARGV[0] = '/var/spool/mail/' + ENV['LOGNAME']</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-list = scroll = nil</div><div class='del'>-TkFrame.new{|f|</div><div class='del'>-  list = TkListbox.new(f) {</div><div class='del'>-    yscroll proc{|*idx|</div><div class='del'>-        scroll.set *idx</div><div class='del'>-    }</div><div class='del'>-    relief 'raised'</div><div class='del'>-#    geometry "80x5"</div><div class='del'>-    width 80</div><div class='del'>-    height 5</div><div class='del'>-    setgrid 'yes'</div><div class='del'>-    pack('side'=&gt;'left','fill'=&gt;'both','expand'=&gt;'yes')</div><div class='del'>-  }</div><div class='del'>-  scroll = TkScrollbar.new(f) {</div><div class='del'>-    command proc{|idx|</div><div class='del'>-      list.yview *idx</div><div class='del'>-    }</div><div class='del'>-    pack('side'=&gt;'right','fill'=&gt;'y')</div><div class='del'>-  }</div><div class='del'>-  pack</div><div class='del'>-}</div><div class='del'>-root = Tk.root</div><div class='del'>-TkButton.new(root) {</div><div class='del'>-  text 'Dismiss'</div><div class='del'>-  command proc {exit}</div><div class='del'>-  pack('fill'=&gt;'both','expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-root.bind "Control-c", proc{exit}</div><div class='del'>-root.bind "Control-q", proc{exit}</div><div class='del'>-root.bind "space", proc{exit}</div><div class='del'>-</div><div class='del'>-$outcount = 0;</div><div class='del'>-for file in ARGV</div><div class='del'>-  next unless File.exist?(file)</div><div class='del'>-  atime = File.atime(file)</div><div class='del'>-  mtime = File.mtime(file)</div><div class='del'>-  f = open(file, "r")</div><div class='del'>-  begin</div><div class='del'>-    until f.eof</div><div class='del'>-      mail = Mail.new(f)</div><div class='del'>-      date = mail.header['Date']</div><div class='del'>-      next unless date</div><div class='del'>-      from = mail.header['From']</div><div class='del'>-      subj = mail.header['Subject']</div><div class='del'>-      y = m = d = 0</div><div class='del'>-      y, m, d = parsedate(date) if date</div><div class='del'>-      from = "sombody@somewhere" unless from</div><div class='del'>-      subj = "(nil)" unless subj</div><div class='del'>-      from = decode_b(from)</div><div class='del'>-      subj = decode_b(subj)</div><div class='del'>-      list.insert 'end', format('%-02d/%02d/%02d [%-28.28s] %s',y,m,d,from,subj)</div><div class='del'>-      $outcount += 1</div><div class='del'>-    end</div><div class='del'>-  ensure</div><div class='del'>-    f.close</div><div class='del'>-    File.utime(atime, mtime, file)</div><div class='del'>-    list.see 'end'</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-limit = 10000</div><div class='del'>-if $outcount == 0</div><div class='del'>-  list.insert 'end', "You have no mail."</div><div class='del'>-  limit = 2000</div><div class='del'>-end</div><div class='del'>-Tk.after limit, proc{</div><div class='del'>-  exit</div><div class='del'>-}</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkhello.rb b/ext/tk/sample/tkhello.rb<br/>deleted file mode 100644<br/>index 3b505f4983..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkhello.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkhello.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-TkButton.new(nil, </div><div class='del'>-             :text =&gt; 'hello',</div><div class='del'>-             :command =&gt; proc{print "hello\n"}).pack(:fill=&gt;'x')</div><div class='del'>-TkButton.new(nil,</div><div class='del'>-             :text =&gt; 'quit',</div><div class='del'>-             :command =&gt; proc{exit}).pack(:fill=&gt;'x')</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkline.rb b/ext/tk/sample/tkline.rb<br/>deleted file mode 100644<br/>index 3124c2fe0c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkline.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkline.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,47 +0,0 @@</div><div class='del'>-</div><div class='del'>-require "tkclass"</div><div class='del'>-</div><div class='del'>-$tkline_init = FALSE</div><div class='del'>-def start_random</div><div class='del'>-  return if $tkline_init</div><div class='del'>-  $tkline_init = TRUE</div><div class='del'>-  if defined? Thread</div><div class='del'>-    Thread.start do</div><div class='del'>-      loop do</div><div class='del'>-        sleep 2</div><div class='del'>-        Line.new($c, rand(400), rand(200), rand(400), rand(200))</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'>-Label.new('text'=&gt;'Please press or drag button-1').pack</div><div class='del'>-</div><div class='del'>-$c = Canvas.new</div><div class='del'>-$c.pack</div><div class='del'>-$start_x = start_y = 0</div><div class='del'>-</div><div class='del'>-def do_press(x, y)</div><div class='del'>-  $start_x = x</div><div class='del'>-  $start_y = y</div><div class='del'>-  $current_line = Line.new($c, x, y, x, y)</div><div class='del'>-  start_random</div><div class='del'>-end</div><div class='del'>-def do_motion(x, y)</div><div class='del'>-  if $current_line</div><div class='del'>-    $current_line.coords $start_x, $start_y, x, y</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def do_release(x, y)</div><div class='del'>-  if $current_line</div><div class='del'>-    $current_line.coords $start_x, $start_y, x, y</div><div class='del'>-    $current_line.fill 'black'</div><div class='del'>-    $current_line = nil</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$c.bind("1", proc{|e| do_press e.x, e.y})</div><div class='del'>-$c.bind("B1-Motion", proc{|x, y| do_motion x, y}, "%x %y")</div><div class='del'>-$c.bind("ButtonRelease-1", proc{|x, y| do_release x, y}, "%x %y")</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkmenubutton.rb b/ext/tk/sample/tkmenubutton.rb<br/>deleted file mode 100644<br/>index 37f6128fd9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkmenubutton.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkmenubutton.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,135 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#  menubutton sample : based on sample menubuttons on the Tcl/Tk demo script</div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;'Sample of TkMenubutton').pack(:side=&gt;:top)</div><div class='del'>-</div><div class='del'>-TkFrame.new{|f|</div><div class='del'>-  pack(:side=&gt;:top) </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  TkMenubutton.new(:parent=&gt;f, :text=&gt;'Right', :underline=&gt;0, </div><div class='del'>-                   :direction=&gt;:right, :relief=&gt;:raised){|mb|</div><div class='del'>-    menu TkMenu.new(:parent=&gt;mb, :tearoff=&gt;0){</div><div class='del'>-      add(:command, :label=&gt;'Right menu: first item', </div><div class='del'>-                    :command=&gt;proc{print 'You have selected the first item' + </div><div class='del'>-                                         " from the Right menu.\n"})</div><div class='del'>-      add(:command, :label=&gt;'Right menu: second item', </div><div class='del'>-                    :command=&gt;proc{print 'You have selected the second item' + </div><div class='del'>-                                         " from the Right menu.\n"})</div><div class='del'>-    }</div><div class='del'>-    pack(:side=&gt;:left, :padx=&gt;25, :pady=&gt;25)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenubutton.new(:parent=&gt;f, :text=&gt;'Below', :underline=&gt;0, </div><div class='del'>-                   :direction=&gt;:below, :relief=&gt;:raised){|mb|</div><div class='del'>-    menu(TkMenu.new(:parent=&gt;mb, :tearoff=&gt;0){</div><div class='del'>-      add(:command, :label=&gt;'Below menu: first item', </div><div class='del'>-                    :command=&gt;proc{print 'You have selected the first item' + </div><div class='del'>-                                         " from the Below menu.\n"})</div><div class='del'>-      add(:command, :label=&gt;'Below menu: second item', </div><div class='del'>-                    :command=&gt;proc{print 'You have selected the second item' + </div><div class='del'>-                                         " from the Below menu.\n"})</div><div class='del'>-    })</div><div class='del'>-    pack(:side=&gt;:left, :padx=&gt;25, :pady=&gt;25)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenubutton.new(:parent=&gt;f, :text=&gt;'Above', :underline=&gt;0, </div><div class='del'>-                   :direction=&gt;:above, :relief=&gt;:raised){|mb|</div><div class='del'>-    menu TkMenu.new(:parent=&gt;mb, :tearoff=&gt;0){</div><div class='del'>-      add(:command, :label=&gt;'Above menu: first item', </div><div class='del'>-                    :command=&gt;proc{print 'You have selected the first item' + </div><div class='del'>-                                         " from the Above menu.\n"})</div><div class='del'>-      add(:command, :label=&gt;'Above menu: second item', </div><div class='del'>-                    :command=&gt;proc{print 'You have selected the second item' + </div><div class='del'>-                                         " from the Above menu.\n"})</div><div class='del'>-    }</div><div class='del'>-    pack(:side=&gt;:left, :padx=&gt;25, :pady=&gt;25)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkMenubutton.new(:parent=&gt;f, :text=&gt;'Left', :underline=&gt;0, </div><div class='del'>-                   :direction=&gt;:left, :relief=&gt;:raised){|mb|</div><div class='del'>-    menu(TkMenu.new(:parent=&gt;mb, :tearoff=&gt;0){</div><div class='del'>-      add(:command, :label=&gt;'Left menu: first item', </div><div class='del'>-                    :command=&gt;proc{print 'You have selected the first item' + </div><div class='del'>-                                         " from the Left menu.\n"})</div><div class='del'>-      add(:command, :label=&gt;'Left menu: second item', </div><div class='del'>-                    :command=&gt;proc{print 'You have selected the second item' + </div><div class='del'>-                                         " from the Left menu.\n"})</div><div class='del'>-    })</div><div class='del'>-    pack(:side=&gt;:left, :padx=&gt;25, :pady=&gt;25)</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-############################</div><div class='del'>-TkFrame.new(:borderwidth=&gt;2, :relief=&gt;:sunken, </div><div class='del'>-            :height=&gt;5).pack(:side=&gt;:top, :fill=&gt;:x, :padx=&gt;20)</div><div class='del'>-############################</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;'Sample of TkOptionMenu').pack(:side=&gt;:top)</div><div class='del'>-</div><div class='del'>-colors = %w(Black red4 DarkGreen NavyBlue gray75 Red Green Blue gray50 </div><div class='del'>-            Yellow Cyan Magenta White Brown DarkSeaGreen DarkViolet)</div><div class='del'>-</div><div class='del'>-TkFrame.new{|f|</div><div class='del'>-  pack(:side=&gt;:top) </div><div class='del'>-</div><div class='del'>-  b1 = TkOptionMenubutton . </div><div class='del'>-    new(:parent=&gt;f, :values=&gt;%w(one two three)) . </div><div class='del'>-    pack(:side=&gt;:left, :padx=&gt;25, :pady=&gt;25)</div><div class='del'>-</div><div class='del'>-  b2 = TkOptionMenubutton.new(:parent=&gt;f, :values=&gt;colors) {|optMB|</div><div class='del'>-    colors.each{|color|</div><div class='del'>-      no_sel = TkPhotoImage.new(:height=&gt;16, :width=&gt;16){</div><div class='del'>-        put 'gray50', *[ 0,  0, 16,  1]</div><div class='del'>-        put 'gray50', *[ 0,  1,  1, 16]</div><div class='del'>-        put 'gray75', *[ 0, 15, 16, 16]</div><div class='del'>-        put 'gray75', *[15,  1, 16, 16]</div><div class='del'>-        put color,    *[ 1,  1, 15, 15]</div><div class='del'>-      }</div><div class='del'>-      sel = TkPhotoImage.new(:height=&gt;16, :width=&gt;16){</div><div class='del'>-        put 'Black',  *[ 0,  0, 16,  2]</div><div class='del'>-        put 'Black',  *[ 0,  2,  2, 16]</div><div class='del'>-        put 'Black',  *[ 2, 14, 16, 16]</div><div class='del'>-        put 'Black',  *[14,  2, 16, 14]</div><div class='del'>-        put color,    *[ 2,  2, 14, 14]</div><div class='del'>-      }</div><div class='del'>-      optMB.entryconfigure(color, :hidemargin=&gt;1, </div><div class='del'>-                           :image=&gt;no_sel, :selectimage=&gt;sel)</div><div class='del'>-    }</div><div class='del'>-    optMB.menuconfigure(:tearoff, 1)</div><div class='del'>-    %w(Black gray75 gray50 White).each{|color|</div><div class='del'>-      optMB.entryconfigure(color, :columnbreak=&gt;true)</div><div class='del'>-    }</div><div class='del'>-    pack(:side=&gt;:left, :padx=&gt;25, :pady=&gt;25)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  TkButton.new(:parent=&gt;f){</div><div class='del'>-    text 'show values'</div><div class='del'>-    command proc{p [b1.value, b2.value]}</div><div class='del'>-    pack(:side=&gt;:left, :padx=&gt;25, :pady=&gt;5, :anchor=&gt;:s)</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-############################</div><div class='del'>-TkFrame.new(:borderwidth=&gt;2, :relief=&gt;:sunken, </div><div class='del'>-            :height=&gt;5).pack(:side=&gt;:top, :fill=&gt;:x, :padx=&gt;20)</div><div class='del'>-############################</div><div class='del'>-</div><div class='del'>-root = TkRoot.new(:title=&gt;'menubutton samples')</div><div class='del'>-</div><div class='del'>-TkButton.new(root, :text=&gt;'exit', :command=&gt;proc{exit}){</div><div class='del'>-  pack(:side=&gt;:top, :padx=&gt;25, :pady=&gt;5, :anchor=&gt;:e)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# VirtualEvent &lt;&lt;MenuSelect&gt;&gt; on Tcl/Tk ==&gt; '&lt;MenuSelect&gt;' on Ruby/Tk</div><div class='del'>-# ( remove the most external &lt;, &gt; for Ruby/Tk notation )</div><div class='del'>-TkMenu.bind('&lt;MenuSelect&gt;', proc{|widget|</div><div class='del'>-              p widget.entrycget('active', :label)</div><div class='del'>-            }, '%W')</div><div class='del'>-</div><div class='del'>-############################</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkmsgcat-load_rb.rb b/ext/tk/sample/tkmsgcat-load_rb.rb<br/>deleted file mode 100644<br/>index 5373e0086f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkmsgcat-load_rb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkmsgcat-load_rb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +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'>-demo_dir = File.dirname($0)</div><div class='del'>-msgcat_dir = [demo_dir, 'msgs_rb'].join(File::Separator)</div><div class='del'>-top_win = nil</div><div class='del'>-#msgcat = TkMsgCatalog.new('::tk')</div><div class='del'>-msgcat = TkMsgCatalog.new('::tkmsgcat_demo')</div><div class='del'>-default_locale = msgcat.locale</div><div class='del'>-#msgcat.load_rb(msgcat_dir)</div><div class='del'>-msgcat.load(msgcat_dir)</div><div class='del'>-</div><div class='del'>-col_proc = TkComm.install_bind(proc{|w, color, frame, label|</div><div class='del'>-                                 TkComm.window(frame).background(color)</div><div class='del'>-                                 Tk.update</div><div class='del'>-                                 TkComm.window(label).text(</div><div class='del'>-                                          msgcat["%1$s:: %2$s", 'Color', </div><div class='del'>-                                                 color.capitalize])</div><div class='del'>-                                 w.flash; w.flash</div><div class='del'>-                                 Tk.callback_break;</div><div class='del'>-                              }, "%W")</div><div class='del'>-</div><div class='del'>-del_proc = TkComm.install_cmd(proc{top_win.destroy; top_win = nil})</div><div class='del'>-</div><div class='del'>-err_proc = TkComm.install_cmd(proc{fail(RuntimeError, </div><div class='del'>-                                        msgcat['Application Error'])})</div><div class='del'>-</div><div class='del'>-show_sample = proc{|loc|</div><div class='del'>-  top_win = TkToplevel.new(:title=&gt;loc)</div><div class='del'>-</div><div class='del'>-  msgcat.locale = loc</div><div class='del'>-  #msgcat.load_rb(msgcat_dir)</div><div class='del'>-  msgcat.load(msgcat_dir)</div><div class='del'>-</div><div class='del'>-  TkLabel.new(top_win){</div><div class='del'>-    text "preferences:: #{msgcat.preferences.join(' ')}"</div><div class='del'>-    pack(:pady=&gt;10, :padx=&gt;10)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  lbl = TkLabel.new(top_win, :text=&gt;msgcat["%1$s:: %2$s", </div><div class='del'>-                                           'Color', '']).pack(:anchor=&gt;'w')</div><div class='del'>-</div><div class='del'>-  bg = TkFrame.new(top_win).pack(:ipadx=&gt;20, :ipady=&gt;10, </div><div class='del'>-                                 :expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-  TkFrame.new(bg){|f|</div><div class='del'>-    ['blue', 'green', 'red'].each{|col|</div><div class='del'>-      TkButton.new(f, :text=&gt;msgcat[col]){</div><div class='del'>-        bind('ButtonRelease-1', col_proc, "#{col} #{bg.path} #{lbl.path}")</div><div class='del'>-      }.pack(:fill=&gt;:x)</div><div class='del'>-    }</div><div class='del'>-  }.pack(:anchor=&gt;'center', :pady=&gt;15)</div><div class='del'>-</div><div class='del'>-  TkFrame.new(top_win){|f|</div><div class='del'>-    TkButton.new(f, :text=&gt;msgcat['Delete'], </div><div class='del'>-                 :command=&gt;del_proc).pack(:side=&gt;:right, :padx=&gt;5)</div><div class='del'>-    TkButton.new(f, :text=&gt;msgcat['Error'], </div><div class='del'>-                 :command=&gt;err_proc).pack(:side=&gt;:left, :padx=&gt;5)</div><div class='del'>-  }.pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-  top_win</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#  listbox for locale list</div><div class='del'>-TkLabel.new(:text=&gt;"Please click a locale.").pack(:padx=&gt;5, :pady=&gt;3)</div><div class='del'>-</div><div class='del'>-TkFrame.new{|f|</div><div class='del'>-  TkButton.new(f, :text=&gt;msgcat['Exit'], </div><div class='del'>-               :command=&gt;proc{exit}).pack(:side=&gt;:right, :padx=&gt;5)</div><div class='del'>-}.pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-f = TkFrame.new.pack(:side=&gt;:top, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-lbox = TkListbox.new(f).pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-lbox.yscrollbar(TkScrollbar.new(f, :width=&gt;12).pack(:side=&gt;:right, :fill=&gt;:y))</div><div class='del'>-</div><div class='del'>-lbox.bind('ButtonRelease-1'){|ev|</div><div class='del'>-  idx = lbox.index("@#{ev.x},#{ev.y}")</div><div class='del'>-  if idx == 0</div><div class='del'>-    loc = default_locale</div><div class='del'>-  else</div><div class='del'>-    loc = lbox.get(idx)</div><div class='del'>-  end</div><div class='del'>-  if top_win != nil &amp;&amp; top_win.exist?</div><div class='del'>-    top_win.destroy</div><div class='del'>-  end</div><div class='del'>-  top_win = show_sample.call(loc)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-lbox.insert('end', 'default')</div><div class='del'>-</div><div class='del'>-Dir.entries(msgcat_dir).sort.each{|f| </div><div class='del'>-  if f =~ /^(.*).msg$/</div><div class='del'>-    lbox.insert('end', $1)</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-top_win = show_sample.call(default_locale)</div><div class='del'>-</div><div class='del'>-#  start eventloop</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkmsgcat-load_rb2.rb b/ext/tk/sample/tkmsgcat-load_rb2.rb<br/>deleted file mode 100644<br/>index 55246545c8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkmsgcat-load_rb2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkmsgcat-load_rb2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,102 +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'>-demo_dir = File.dirname($0)</div><div class='del'>-msgcat_dir = [demo_dir, 'msgs_rb2'].join(File::Separator)</div><div class='del'>-top_win = nil</div><div class='del'>-#msgcat = TkMsgCatalog.new('::tk')</div><div class='del'>-msgcat = TkMsgCatalog.new('::tkmsgcat_demo')</div><div class='del'>-default_locale = msgcat.locale</div><div class='del'>-#msgcat.load_rb(msgcat_dir)</div><div class='del'>-msgcat.load(msgcat_dir)</div><div class='del'>-</div><div class='del'>-col_proc = TkComm.install_bind(proc{|w, color, frame, label|</div><div class='del'>-                                 TkComm.window(frame).background(color)</div><div class='del'>-                                 Tk.update</div><div class='del'>-                                 TkComm.window(label).text(</div><div class='del'>-                                          msgcat["%1$s:: %2$s", 'Color', </div><div class='del'>-                                                 color.capitalize])</div><div class='del'>-                                 w.flash; w.flash</div><div class='del'>-                                 Tk.callback_break;</div><div class='del'>-                              }, "%W")</div><div class='del'>-</div><div class='del'>-del_proc = TkComm.install_cmd(proc{top_win.destroy; top_win = nil})</div><div class='del'>-</div><div class='del'>-err_proc = TkComm.install_cmd(proc{fail(RuntimeError, </div><div class='del'>-                                        msgcat['Application Error'])})</div><div class='del'>-</div><div class='del'>-show_sample = proc{|loc|</div><div class='del'>-  top_win = TkToplevel.new(:title=&gt;loc)</div><div class='del'>-</div><div class='del'>-  msgcat.locale = loc</div><div class='del'>-  #msgcat.load_rb(msgcat_dir)</div><div class='del'>-  msgcat.load(msgcat_dir)</div><div class='del'>-</div><div class='del'>-  TkLabel.new(top_win){</div><div class='del'>-    text "preferences:: #{msgcat.preferences.join(' ')}"</div><div class='del'>-    pack(:pady=&gt;10, :padx=&gt;10)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  lbl = TkLabel.new(top_win, :text=&gt;msgcat["%1$s:: %2$s", </div><div class='del'>-                                           'Color', '']).pack(:anchor=&gt;'w')</div><div class='del'>-</div><div class='del'>-  bg = TkFrame.new(top_win).pack(:ipadx=&gt;20, :ipady=&gt;10, </div><div class='del'>-                                 :expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-  TkFrame.new(bg){|f|</div><div class='del'>-    ['blue', 'green', 'red'].each{|col|</div><div class='del'>-      TkButton.new(f, :text=&gt;msgcat[col]){</div><div class='del'>-        bind('ButtonRelease-1', col_proc, "#{col} #{bg.path} #{lbl.path}")</div><div class='del'>-      }.pack(:fill=&gt;:x)</div><div class='del'>-    }</div><div class='del'>-  }.pack(:anchor=&gt;'center', :pady=&gt;15)</div><div class='del'>-</div><div class='del'>-  TkFrame.new(top_win){|f|</div><div class='del'>-    TkButton.new(f, :text=&gt;msgcat['Delete'], </div><div class='del'>-                 :command=&gt;del_proc).pack(:side=&gt;:right, :padx=&gt;5)</div><div class='del'>-    TkButton.new(f, :text=&gt;msgcat['Error'], </div><div class='del'>-                 :command=&gt;err_proc).pack(:side=&gt;:left, :padx=&gt;5)</div><div class='del'>-  }.pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-  top_win</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#  listbox for locale list</div><div class='del'>-TkLabel.new(:text=&gt;"Please click a locale.").pack(:padx=&gt;5, :pady=&gt;3)</div><div class='del'>-</div><div class='del'>-TkFrame.new{|f|</div><div class='del'>-  TkButton.new(f, :text=&gt;msgcat['Exit'], </div><div class='del'>-               :command=&gt;proc{exit}).pack(:side=&gt;:right, :padx=&gt;5)</div><div class='del'>-}.pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-f = TkFrame.new.pack(:side=&gt;:top, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-lbox = TkListbox.new(f).pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-lbox.yscrollbar(TkScrollbar.new(f, :width=&gt;12).pack(:side=&gt;:right, :fill=&gt;:y))</div><div class='del'>-</div><div class='del'>-lbox.bind('ButtonRelease-1'){|ev|</div><div class='del'>-  idx = lbox.index("@#{ev.x},#{ev.y}")</div><div class='del'>-  if idx == 0</div><div class='del'>-    loc = default_locale</div><div class='del'>-  else</div><div class='del'>-    loc = lbox.get(idx)</div><div class='del'>-  end</div><div class='del'>-  if top_win != nil &amp;&amp; top_win.exist?</div><div class='del'>-    top_win.destroy</div><div class='del'>-  end</div><div class='del'>-  top_win = show_sample.call(loc)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-lbox.insert('end', 'default')</div><div class='del'>-</div><div class='del'>-Dir.entries(msgcat_dir).sort.each{|f| </div><div class='del'>-  if f =~ /^(.*).msg$/</div><div class='del'>-    lbox.insert('end', $1)</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-top_win = show_sample.call(default_locale)</div><div class='del'>-</div><div class='del'>-#  start eventloop</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkmsgcat-load_tk.rb b/ext/tk/sample/tkmsgcat-load_tk.rb<br/>deleted file mode 100644<br/>index 45d68e4e0b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkmsgcat-load_tk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkmsgcat-load_tk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,118 +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'>-demo_dir = File.dirname($0)</div><div class='del'>-msgcat_dir = [demo_dir, 'msgs_tk'].join(File::Separator)</div><div class='del'>-top_win = nil</div><div class='del'>-#msgcat = TkMsgCatalog.new('::tk')</div><div class='del'>-msgcat = TkMsgCatalog.new('::tkmsgcat_demo')</div><div class='del'>-default_locale = msgcat.locale</div><div class='del'>-msgcat.load_tk(msgcat_dir)</div><div class='del'>-</div><div class='del'>-col_proc = TkComm.install_bind(proc{|w, color, frame, label|</div><div class='del'>-                                 TkComm.window(frame).background(color)</div><div class='del'>-                                 Tk.update</div><div class='del'>-                                 TkComm.window(label).text(</div><div class='del'>-                                          msgcat.mc("%1$s:: %2$s", 'Color', </div><div class='del'>-                                                    color.capitalize))</div><div class='del'>-                                 w.flash; w.flash</div><div class='del'>-                                 Tk.callback_break;</div><div class='del'>-                              }, "%W")</div><div class='del'>-</div><div class='del'>-del_proc = TkComm.install_cmd(proc{top_win.destroy; top_win = nil})</div><div class='del'>-</div><div class='del'>-err_proc = TkComm.install_cmd(proc{fail(RuntimeError, </div><div class='del'>-                                        msgcat.mc('Application Error'))})</div><div class='del'>-</div><div class='del'>-show_sample = proc{|loc|</div><div class='del'>-  top_win = TkToplevel.new(:title=&gt;loc)</div><div class='del'>-</div><div class='del'>-  msgcat.locale = loc</div><div class='del'>-  msgcat.load_tk(msgcat_dir)</div><div class='del'>-</div><div class='del'>-  TkLabel.new(top_win){</div><div class='del'>-    text "preferences:: #{msgcat.preferences.join(' ')}"</div><div class='del'>-    pack(:pady=&gt;10, :padx=&gt;10)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  lbl = TkLabel.new(top_win, :text=&gt;msgcat.mc("%1$s:: %2$s", </div><div class='del'>-                                              'Color', '')).pack(:anchor=&gt;'w')</div><div class='del'>-</div><div class='del'>-  bg = TkFrame.new(top_win).pack(:ipadx=&gt;20, :ipady=&gt;10, </div><div class='del'>-                                 :expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-  TkFrame.new(bg){|f|</div><div class='del'>-    ['blue', 'green', 'red'].each{|col|</div><div class='del'>-      TkButton.new(f, :text=&gt;msgcat.mc(col)){</div><div class='del'>-        bind('ButtonRelease-1', col_proc, "#{col} #{bg.path} #{lbl.path}")</div><div class='del'>-      }.pack(:fill=&gt;:x)</div><div class='del'>-=begin</div><div class='del'>-      TkButton.new(f, :text=&gt;msgcat.mc(col), </div><div class='del'>-                   :command=&gt;proc{</div><div class='del'>-                     bg.background col</div><div class='del'>-                     lbl.text msgcat.mc("%1$s:: %2$s", 'Color', col.capitalize)</div><div class='del'>-                   }).pack(:fill=&gt;:x)</div><div class='del'>-=end</div><div class='del'>-    }</div><div class='del'>-  }.pack(:anchor=&gt;'center', :pady=&gt;15)</div><div class='del'>-</div><div class='del'>-  TkFrame.new(top_win){|f|</div><div class='del'>-    TkButton.new(f, :text=&gt;msgcat.mc('Delete'), </div><div class='del'>-                 :command=&gt;del_proc).pack(:side=&gt;:right, :padx=&gt;5)</div><div class='del'>-    TkButton.new(f, :text=&gt;msgcat.mc('Error'), </div><div class='del'>-                 :command=&gt;err_proc).pack(:side=&gt;:left, :padx=&gt;5)</div><div class='del'>-=begin</div><div class='del'>-    TkButton.new(f, :text=&gt;msgcat.mc('Delete'), </div><div class='del'>-                 :command=&gt;proc{</div><div class='del'>-                   top_win.destroy</div><div class='del'>-                   top_win = nil</div><div class='del'>-                 }).pack(:side=&gt;:right, :padx=&gt;5)</div><div class='del'>-    TkButton.new(f, :text=&gt;msgcat.mc('Error'), </div><div class='del'>-                 :command=&gt;proc{</div><div class='del'>-                   fail RuntimeError, msgcat.mc('Application Error')</div><div class='del'>-                 }).pack(:side=&gt;:left, :padx=&gt;5)</div><div class='del'>-=end</div><div class='del'>-  }.pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-  top_win</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#  listbox for locale list</div><div class='del'>-TkLabel.new(:text=&gt;"Please click a locale.").pack(:padx=&gt;5, :pady=&gt;3)</div><div class='del'>-</div><div class='del'>-TkFrame.new{|f|</div><div class='del'>-  TkButton.new(f, :text=&gt;msgcat.mc('Exit'), </div><div class='del'>-               :command=&gt;proc{exit}).pack(:side=&gt;:right, :padx=&gt;5)</div><div class='del'>-}.pack(:side=&gt;:bottom, :fill=&gt;:x)</div><div class='del'>-</div><div class='del'>-f = TkFrame.new.pack(:side=&gt;:top, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-lbox = TkListbox.new(f).pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-lbox.yscrollbar(TkScrollbar.new(f, :width=&gt;12).pack(:side=&gt;:right, :fill=&gt;:y))</div><div class='del'>-</div><div class='del'>-lbox.bind('ButtonRelease-1'){|ev|</div><div class='del'>-  idx = lbox.index("@#{ev.x},#{ev.y}")</div><div class='del'>-  if idx == 0</div><div class='del'>-    loc = default_locale</div><div class='del'>-  else</div><div class='del'>-    loc = lbox.get(idx)</div><div class='del'>-  end</div><div class='del'>-  if top_win != nil &amp;&amp; top_win.exist?</div><div class='del'>-    top_win.destroy</div><div class='del'>-  end</div><div class='del'>-  top_win = show_sample.call(loc)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-lbox.insert('end', 'default')</div><div class='del'>-</div><div class='del'>-Dir.entries(msgcat_dir).sort.each{|f| </div><div class='del'>-  if f =~ /^(.*).msg$/</div><div class='del'>-    lbox.insert('end', $1)</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-top_win = show_sample.call(default_locale)</div><div class='del'>-</div><div class='del'>-#  start eventloop</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkmulticolumnlist.rb b/ext/tk/sample/tkmulticolumnlist.rb<br/>deleted file mode 100644<br/>index 255eb691e5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkmulticolumnlist.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkmulticolumnlist.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,743 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tkmulticolumnlist.rb : multiple column list widget on scrollable frame</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 TkMultiColumnList &lt; TkText</div><div class='del'>-  include TkComposite</div><div class='del'>-</div><div class='del'>-  #   lbox_height : height of listboxes (pixel)</div><div class='del'>-  #   title_info  : array [ [&lt;title_string&gt;,&lt;init_width&gt;], ... ]</div><div class='del'>-  #   keys        : hash {&lt;option&gt;=&gt;&lt;value&gt;, ... }</div><div class='del'>-  def initialize_composite(lbox_height, title_info, keys={})</div><div class='del'>-    # argument check</div><div class='del'>-    if (! title_info.kind_of? Array) or (title_info.size &lt; 2)</div><div class='del'>-      raise</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # mode</div><div class='del'>-    @keep_minsize = true</div><div class='del'>-    @show_each_hscr = true</div><div class='del'>-    @show_win_hscr = true</div><div class='del'>-</div><div class='del'>-    # init arrays</div><div class='del'>-    @base_list  = []</div><div class='del'>-    @rel_list   = []</div><div class='del'>-    @title_list = []</div><div class='del'>-    @title_cmd  = []</div><div class='del'>-    @lbox_list  = []</div><div class='del'>-    @hscr_list  = []</div><div class='del'>-</div><div class='del'>-    # decide total width</div><div class='del'>-    @lbox_total = title_info.size</div><div class='del'>-    @width_total = 0</div><div class='del'>-    title_info.each{|title, width, cmd| </div><div class='del'>-      @width_total += width.to_f</div><div class='del'>-      @title_cmd &lt;&lt; cmd</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # rel-table of label=&gt;index</div><div class='del'>-    @name_index = {}</div><div class='del'>-</div><div class='del'>-    # size definition</div><div class='del'>-    @window_width = @width_total</div><div class='del'>-    @sash = 5</div><div class='del'>-    @scrbar_width = 15</div><div class='del'>-    @scrbar_border = 3</div><div class='del'>-    @lbox_border = 1</div><div class='del'>-    @title_border = 3</div><div class='del'>-    @h_l_thick = 0</div><div class='del'>-</div><div class='del'>-    # init status</div><div class='del'>-    @mode = :title</div><div class='del'>-    @command = nil</div><div class='del'>-</div><div class='del'>-    # virtical scrollbar</div><div class='del'>-    @v_scroll = TkYScrollbar.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                                 'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                 'width'=&gt;@scrbar_width)</div><div class='del'>-</div><div class='del'>-    # horizontal scrollbar</div><div class='del'>-    @h_scroll = TkXScrollbar.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                                 'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                 'width'=&gt;@scrbar_width)</div><div class='del'>-</div><div class='del'>-    # create base flames</div><div class='del'>-    @c_title = TkCanvas.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                            'width'=&gt;@window_width)</div><div class='del'>-    @f_title = TkFrame.new(@c_title, 'width'=&gt;@width_total)</div><div class='del'>-    @w_title = TkcWindow.new(@c_title, 0, 0, </div><div class='del'>-                             'window'=&gt;@f_title, 'anchor'=&gt;'nw')</div><div class='del'>-</div><div class='del'>-    @c_lbox  = TkCanvas.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                            'width'=&gt;@window_width)</div><div class='del'>-    @f_lbox  = TkFrame.new(@c_lbox, 'width'=&gt;@width_total)</div><div class='del'>-    @w_lbox  = TkcWindow.new(@c_lbox, 0, 0, 'window'=&gt;@f_lbox, 'anchor'=&gt;'nw')</div><div class='del'>-</div><div class='del'>-    @c_hscr  = TkCanvas.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                            'width'=&gt;@window_width)</div><div class='del'>-    @f_hscr  = TkFrame.new(@c_hscr, 'width'=&gt;@width_total)</div><div class='del'>-    @w_hscr  = TkcWindow.new(@c_hscr, 0, 0, 'window'=&gt;@f_hscr, 'anchor'=&gt;'nw')</div><div class='del'>-</div><div class='del'>-    # create each listbox</div><div class='del'>-    sum = 0.0</div><div class='del'>-    @rel_list &lt;&lt; sum/@width_total</div><div class='del'>-    title_info.each_with_index{|(label, width), idx|</div><div class='del'>-      # set relation between label and index</div><div class='del'>-      if @name_index.include?(label)</div><div class='del'>-        @name_index[label] &lt;&lt; idx</div><div class='del'>-      else</div><div class='del'>-        @name_index[label] = [idx]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # calculate relative positioning</div><div class='del'>-      sum += width</div><div class='del'>-      @rel_list &lt;&lt; sum/@width_total</div><div class='del'>-</div><div class='del'>-      # title field</div><div class='del'>-      f = TkFrame.new(@f_title, 'width'=&gt;width)</div><div class='del'>-      base = [f]</div><div class='del'>-</div><div class='del'>-      title = TkLabel.new(f, 'text'=&gt;label, 'borderwidth'=&gt;@title_border, </div><div class='del'>-                          'relief'=&gt;'raised', 'highlightthickness'=&gt;@h_l_thick)</div><div class='del'>-      title_binding(title, idx)</div><div class='del'>-      title.pack('fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-      @title_list &lt;&lt; title</div><div class='del'>-</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;1, </div><div class='del'>-              'relheight'=&gt;1.0, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-</div><div class='del'>-      # listbox field</div><div class='del'>-      f = TkFrame.new(@f_lbox, 'width'=&gt;width)</div><div class='del'>-      base &lt;&lt; f</div><div class='del'>-      @lbox_list &lt;&lt; TkText.new(f, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                               'borderwidth'=&gt;@lbox_border, </div><div class='del'>-                               'takefocus'=&gt;false, </div><div class='del'>-                               'wrap'=&gt;'none') {</div><div class='del'>-</div><div class='del'>-        bindtags(bindtags - [TkText])</div><div class='del'>-</div><div class='del'>-        @seltag = TkTextTag.new(self, 'background'=&gt;'#b3b3b3', </div><div class='del'>-                                'borderwidth'=&gt;1, 'relief'=&gt;'raised')</div><div class='del'>-        def self.nearest(y)</div><div class='del'>-          self.index("@1,#{y}").split('.')[0].to_i</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.select_clear(first, last=nil)</div><div class='del'>-          first = "#{first}.0" if first.kind_of?(Integer)</div><div class='del'>-          first = self.index(first.to_s + ' linestart')</div><div class='del'>-          last = first unless last</div><div class='del'>-          last = "#{last}.0" if first.kind_of?(Integer)</div><div class='del'>-          last = self.index(last.to_s + ' + 1 lines linestart')</div><div class='del'>-          @seltag.remove(first, last)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.select_set(first, last=nil)</div><div class='del'>-          first = "#{first}.0" if first.kind_of?(Integer)</div><div class='del'>-          first = self.index(first.to_s + ' linestart')</div><div class='del'>-          last = first unless last</div><div class='del'>-          last = "#{last}.0" if first.kind_of?(Integer)</div><div class='del'>-          last = self.index(last.to_s + ' + 1 lines linestart')</div><div class='del'>-          @seltag.add(first, last)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.select_index</div><div class='del'>-          self.index(@seltag.first).split('.')[0].to_i</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        pack('fill'=&gt;'both', 'expand'=&gt;true)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;1, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], 'relheight'=&gt;1.0)</div><div class='del'>-</div><div class='del'>-      # scrollbar field</div><div class='del'>-      f = TkFrame.new(@f_hscr, 'width'=&gt;width)</div><div class='del'>-      base &lt;&lt; f</div><div class='del'>-      @hscr_list &lt;&lt; TkXScrollbar.new(f, 'width'=&gt;@scrbar_width, </div><div class='del'>-                                     'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                     'highlightthickness'=&gt;@h_l_thick</div><div class='del'>-                                    ).pack('fill'=&gt;'x', 'anchor'=&gt;'w')</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;1, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-</div><div class='del'>-      @lbox_list[idx].xscrollbar(@hscr_list[idx])</div><div class='del'>-</div><div class='del'>-      # add new base</div><div class='del'>-      @base_list &lt;&lt; base</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # pad</div><div class='del'>-    @f_title_pad = TkFrame.new(@frame, 'relief'=&gt;'raised', </div><div class='del'>-                               'borderwidth'=&gt;@title_border, </div><div class='del'>-                               'highlightthickness'=&gt;@h_l_thick)</div><div class='del'>-</div><div class='del'>-    @f_scr_pad = TkFrame.new(@frame, 'relief'=&gt;'sunken', </div><div class='del'>-                             'borderwidth'=&gt;1, </div><div class='del'>-                             'highlightthickness'=&gt;@h_l_thick)</div><div class='del'>-</div><div class='del'>-    # height check</div><div class='del'>-    title_height = 0</div><div class='del'>-    @title_list.each{|w| </div><div class='del'>-      h = w.winfo_reqheight</div><div class='del'>-      title_height = h if title_height &lt; h</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    hscr_height = 0</div><div class='del'>-    @hscr_list.each{|w| </div><div class='del'>-      h = w.winfo_reqheight</div><div class='del'>-      hscr_height = h if hscr_height &lt; h</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @f_title.height title_height</div><div class='del'>-    @f_lbox.height lbox_height</div><div class='del'>-    @f_hscr.height hscr_height</div><div class='del'>-</div><div class='del'>-    # set control procedure for virtical scroll</div><div class='del'>-    @v_scroll.assign(*@lbox_list)</div><div class='del'>-</div><div class='del'>-    # set control procedure for horizoncal scroll</div><div class='del'>-    @h_scroll.assign(@c_title, @c_lbox, @c_hscr)</div><div class='del'>-</div><div class='del'>-    # binding for listboxes</div><div class='del'>-    @lbox_list.each_with_index{|l, idx| </div><div class='del'>-      l.bind('Button-1', proc{|w, y| </div><div class='del'>-               @frame.focus</div><div class='del'>-               select_line(w, w.nearest(y))</div><div class='del'>-             }, '%W %y')</div><div class='del'>-      l.bind('B1-Motion', proc{|w, y| </div><div class='del'>-               select_line(w, w.nearest(y))</div><div class='del'>-             }, '%W %y')</div><div class='del'>-      l.bind('Double-Button-1', proc{</div><div class='del'>-               @command.call(get_select) if @command</div><div class='del'>-             })</div><div class='del'>-</div><div class='del'>-      l.bind('Control-Home', proc{|w| select_line(w, 0)}, '%W')</div><div class='del'>-      l.bind('Control-End', proc{|w| select_line(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-      l.bind('Button-2', proc{|x, y| </div><div class='del'>-               @lbox_mark_x = x</div><div class='del'>-               @lbox_list.each{|lbox| lbox.scan_mark(x, y)}</div><div class='del'>-             }, '%x %y')</div><div class='del'>-      l.bind('B2-Motion', proc{|x, y| </div><div class='del'>-               @lbox_list.each{|lbox| lbox.scan_dragto(@lbox_mark_x, y)}</div><div class='del'>-               l.scan_dragto(x, y)</div><div class='del'>-             }, '%x %y')</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    bbox = @w_title.bbox</div><div class='del'>-    @c_title.height(bbox[3])</div><div class='del'>-    @c_title.scrollregion(bbox)</div><div class='del'>-</div><div class='del'>-    bbox = @w_lbox.bbox</div><div class='del'>-    @c_lbox.height(bbox[3])</div><div class='del'>-    @c_lbox.scrollregion(bbox)</div><div class='del'>-</div><div class='del'>-    if @show_each_hscr</div><div class='del'>-      bbox = @w_hscr.bbox</div><div class='del'>-      @c_hscr.height(bbox[3])</div><div class='del'>-      @c_hscr.scrollregion(bbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # binding</div><div class='del'>-    @frame.takefocus(true)</div><div class='del'>-    @frame.bind('Key-Up', proc{select_shift(@lbox_list[0], -1)})</div><div class='del'>-    @frame.bind('Key-Down', proc{select_shift(@lbox_list[0], 1)})</div><div class='del'>-    @frame.bind('Return', proc{@command.call(get_select) if @command})</div><div class='del'>-</div><div class='del'>-    # alignment</div><div class='del'>-    TkGrid.rowconfigure(@frame, 0, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.rowconfigure(@frame, 1, 'weight'=&gt;1)</div><div class='del'>-    TkGrid.rowconfigure(@frame, 2, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.rowconfigure(@frame, 3, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 0, 'weight'=&gt;1)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 1, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 2, 'weight'=&gt;0)</div><div class='del'>-    @v_scroll.grid('row'=&gt;1, 'column'=&gt;2, 'sticky'=&gt;'ns')</div><div class='del'>-    @c_title.grid('row'=&gt;0, 'column'=&gt;0, 'sticky'=&gt;'news')</div><div class='del'>-    @f_title_pad.grid('row'=&gt;0, 'column'=&gt;2, 'sticky'=&gt;'news')</div><div class='del'>-    @c_lbox.grid('row'=&gt;1, 'column'=&gt;0, 'sticky'=&gt;'news')</div><div class='del'>-    @c_hscr.grid('row'=&gt;2, 'column'=&gt;0, 'sticky'=&gt;'ew') if @show_each_hscr</div><div class='del'>-    @h_scroll.grid('row'=&gt;3, 'column'=&gt;0, 'sticky'=&gt;'ew') if @show_win_hscr</div><div class='del'>-    @f_scr_pad.grid('row'=&gt;2, 'rowspan'=&gt;2, 'column'=&gt;2, 'sticky'=&gt;'news')</div><div class='del'>-</div><div class='del'>-    # binding for 'Configure' event</div><div class='del'>-    @c_lbox.bind('Configure', </div><div class='del'>-                 proc{|height, width| reconstruct(height, width)}, </div><div class='del'>-                 '%h %w')</div><div class='del'>-</div><div class='del'>-    # set default receiver of method calls</div><div class='del'>-    @path = @frame.path</div><div class='del'>-</div><div class='del'>-    # configure options</div><div class='del'>-    keys = {} unless keys</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    # command</div><div class='del'>-    cmd = keys.delete('command')</div><div class='del'>-    command(cmd) if cmd</div><div class='del'>-</div><div class='del'>-    # 'scrollbarwidth' option == 'width' option of scrollbars</div><div class='del'>-    width = keys.delete('scrollbarwidth')</div><div class='del'>-    scrollbarwidth(width) if width</div><div class='del'>-</div><div class='del'>-    # options for listbox titles</div><div class='del'>-    title_font = keys.delete('titlefont')</div><div class='del'>-    titlefont(title_font) if title_font</div><div class='del'>-</div><div class='del'>-    title_fg = keys.delete('titleforeground')</div><div class='del'>-    titleforeground(title_fg) if title_fg</div><div class='del'>-</div><div class='del'>-    title_bg = keys.delete('titlebackground')</div><div class='del'>-    titlebackground(title_bg) if title_bg</div><div class='del'>-</div><div class='del'>-    # set receivers for configure methods</div><div class='del'>-    delegate('DEFAULT', *@lbox_list)</div><div class='del'>-    delegate('activebackground', @v_scroll, @h_scroll, *@hscr_list)</div><div class='del'>-    delegate('troughcolor', @v_scroll, @h_scroll, *@hscr_list)</div><div class='del'>-    delegate('repeatdelay', @v_scroll, @h_scroll, *@hscr_list)</div><div class='del'>-    delegate('repeatinterval', @v_scroll, @h_scroll, *@hscr_list)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-    delegate('width', @c_lbox, @c_title, @c_hscr)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-</div><div class='del'>-    # configure</div><div class='del'>-    configure(keys) if keys.size &gt; 0</div><div class='del'>-  end</div><div class='del'>-  private :initialize_composite</div><div class='del'>-</div><div class='del'>-  # keep_minsize?</div><div class='del'>-  def keep_minsize?</div><div class='del'>-    @keep_minsize</div><div class='del'>-  end</div><div class='del'>-  def keep_minsize(bool)</div><div class='del'>-    @keep_minsize = bool</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # each hscr</div><div class='del'>-  def show_each_hscr</div><div class='del'>-    @show_each_hscr = true</div><div class='del'>-    @c_hscr.grid('row'=&gt;2, 'column'=&gt;0, 'sticky'=&gt;'ew')</div><div class='del'>-  end</div><div class='del'>-  def hide_each_hscr</div><div class='del'>-    @show_each_hscr = false</div><div class='del'>-    @c_hscr.ungrid</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # window hscroll</div><div class='del'>-  def show_win_hscr</div><div class='del'>-    @show_win_hscr = true</div><div class='del'>-    @h_scroll.grid('row'=&gt;3, 'column'=&gt;0, 'sticky'=&gt;'ew')</div><div class='del'>-  end</div><div class='del'>-  def hide_win_hscr</div><div class='del'>-    @show_each_hscr = false</div><div class='del'>-    @h_scroll.ungrid</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set command</div><div class='del'>-  def command(cmd)</div><div class='del'>-    @command = cmd</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set scrollbar width</div><div class='del'>-  def scrollbarwidth(width)</div><div class='del'>-    @scrbar_width = width</div><div class='del'>-    @v_scroll['width'] = @scrbar_width</div><div class='del'>-    @h_scroll['width'] = @scrbar_width</div><div class='del'>-    @hscr_list.each{|hscr| hscr['width'] = @scrbar_width}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set scrollbar border</div><div class='del'>-  def scrollbarborder(width)</div><div class='del'>-    @scrbar_border = width</div><div class='del'>-    @v_scroll['border'] = @scrbar_border</div><div class='del'>-    @h_scroll['border'] = @scrbar_border</div><div class='del'>-    @hscr_list.each{|hscr| hscr['border'] = @scrbar_border}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set listbox borders</div><div class='del'>-  def listboxborder(width)</div><div class='del'>-    @lbox_border = width</div><div class='del'>-    @lbox_list.each{|w| w['border'] = @lbox_border}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set listbox relief</div><div class='del'>-  def listboxrelief(relief)</div><div class='del'>-    @lbox_list.each{|w| w['relief'] = relief}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title borders</div><div class='del'>-  def titleborder(width)</div><div class='del'>-    @title_border = width</div><div class='del'>-    @f_title_pad['border'] = @title_border</div><div class='del'>-    @title_list.each{|label| label['border'] = @title_border}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title font</div><div class='del'>-  def titlefont(font)</div><div class='del'>-    @title_list.each{|label| label['font'] = font}</div><div class='del'>-    title_height = 0</div><div class='del'>-    @title_list.each{|w| </div><div class='del'>-      h = w.winfo_reqheight</div><div class='del'>-      title_height = h if title_height &lt; h</div><div class='del'>-    }</div><div class='del'>-    @f_title.height title_height</div><div class='del'>-    bbox = @w_title.bbox</div><div class='del'>-    @c_title.height(bbox[3])</div><div class='del'>-    @c_title.scrollregion(bbox)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title foreground color</div><div class='del'>-  def titleforeground(fg)</div><div class='del'>-    @title_list.each{|label| label['foreground'] = fg}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title background color</div><div class='del'>-  def titlebackground(bg)</div><div class='del'>-    @f_title_pad['background'] = bg</div><div class='del'>-    @title_list.each{|label| label['background'] = bg}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title cmds</div><div class='del'>-  def titlecommand(idx, cmd=Proc.new)</div><div class='del'>-    @title_cmd[idx] = cmd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # call title cmds</div><div class='del'>-  def titleinvoke(idx)</div><div class='del'>-    @title_cmd[idx].call if @title_cmd[idx]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get label widgets of listbox titles</div><div class='del'>-  def titlelabels(*indices)</div><div class='del'>-    @title_list[*indices]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get listbox widgets</div><div class='del'>-  def columns(*indices)</div><div class='del'>-    @lbox_list[*indices]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*idx)</div><div class='del'>-    idx = idx.collect{|i|</div><div class='del'>-      if i.kind_of?(Integer)</div><div class='del'>-        "#{i}.0"</div><div class='del'>-      else</div><div class='del'>-        i.to_s</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    @lbox_list.collect{|lbox| lbox.delete(*idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(idx_s, idx_e=nil)</div><div class='del'>-    unless idx_e</div><div class='del'>-      if idx_s.kind_of?(Integer)</div><div class='del'>-        idx_s = "#{idx_s}.0"</div><div class='del'>-        idx_e = "#{idx_s} lineend"</div><div class='del'>-      else</div><div class='del'>-        idx_s = idx_s.to_s</div><div class='del'>-        idx_e = "#{idx_s} lineend"</div><div class='del'>-      end</div><div class='del'>-      @lbox_list.collect{|lbox|</div><div class='del'>-        lbox.get(idx_s, idx_e)</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      if idx_s.kind_of?(Integer)</div><div class='del'>-        idx_s = "#{idx_s}.0"</div><div class='del'>-      else</div><div class='del'>-        idx_s = idx_s.to_s</div><div class='del'>-      end</div><div class='del'>-      if idx_e.kind_of?(Integer)</div><div class='del'>-        idx_e = "#{idx_e}.end"</div><div class='del'>-      else</div><div class='del'>-        idx_e = "#{idx_e} lineend"</div><div class='del'>-      end</div><div class='del'>-      list = @lbox_list.collect{|lbox| lbox.get(idx_s, idx_e).split(/\n/)}</div><div class='del'>-      result = []</div><div class='del'>-      list[0].each_with_index{|line, index|</div><div class='del'>-        result &lt;&lt; list.collect{|lines| lines[index]}</div><div class='del'>-      }</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_select</div><div class='del'>-    get(@lbox_list[0].select_index)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _line_array_to_hash(line)</div><div class='del'>-    result = {}</div><div class='del'>-    @name_index.each_pair{|label, indices|</div><div class='del'>-      if indices.size == 1</div><div class='del'>-        result[label] = line[indices[0]]</div><div class='del'>-      else</div><div class='del'>-        result[label] = indices.collect{|index| line[index]}</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-  private :_line_array_to_hash</div><div class='del'>-</div><div class='del'>-  def get_by_hash(*idx)</div><div class='del'>-    get_result = get(*idx)</div><div class='del'>-    if idx.size == 1</div><div class='del'>-      _line_array_to_hash(get_result)</div><div class='del'>-    else</div><div class='del'>-      get_result.collect{|line| _line_array_to_hash(line)}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, *lines)</div><div class='del'>-    lbox_ins = []</div><div class='del'>-    (0..@lbox_list.size).each{lbox_ins &lt;&lt; []}</div><div class='del'>-</div><div class='del'>-    if idx.kind_of?(Integer)</div><div class='del'>-      idx = "#{idx}.0"</div><div class='del'>-    else</div><div class='del'>-      idx = idx.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @lbox_list[0].index('1.0 + 1 char') == @lbox_list[0].index('end')</div><div class='del'>-      cr = ""</div><div class='del'>-    else</div><div class='del'>-      cr = "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    lines.each{|line|</div><div class='del'>-      if line.kind_of? Hash</div><div class='del'>-        array = []</div><div class='del'>-        @name_index.each_pair{|label, indices|</div><div class='del'>-          if indices.size == 1</div><div class='del'>-            array[indices[0]] = line[label]</div><div class='del'>-          else</div><div class='del'>-            if line[label].kind_of? Array</div><div class='del'>-              indices.each_with_index{|index, num| </div><div class='del'>-                array[index] = line[label][num]</div><div class='del'>-              }</div><div class='del'>-            else</div><div class='del'>-              array[indices[0]] = line[label]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        line = array</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @name_index.each_pair{|label, indices|</div><div class='del'>-        if indices.size == 1</div><div class='del'>-          lbox_ins[indices[0]] &lt;&lt; line[indices[0]]</div><div class='del'>-        else</div><div class='del'>-          indices.each{|index| lbox_ins[index] &lt;&lt; line[index]}</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }   </div><div class='del'>-</div><div class='del'>-    @lbox_list.each_with_index{|lbox, index| </div><div class='del'>-      lbox.insert(idx, cr + lbox_ins[index].join("\n")) if lbox_ins[index]</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_clear(first, last=None)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.sel_clear(first, last=None)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_set(first, last=None)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.sel_set(first, last=None)}</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 reconstruct(height, width)</div><div class='del'>-    if @keep_minsize &amp;&amp; width &lt;= @width_total</div><div class='del'>-      @f_title.width(@width_total)</div><div class='del'>-      @f_lbox.width(@width_total)</div><div class='del'>-      @f_hscr.width(@width_total) if @show_each_hscr</div><div class='del'>-      @window_width = @width_total</div><div class='del'>-    else</div><div class='del'>-      @f_title.width(width)</div><div class='del'>-      @f_lbox.width(width)</div><div class='del'>-      @f_hscr.width(width) if @show_each_hscr</div><div class='del'>-      @window_width = width</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @f_lbox.height(height)</div><div class='del'>-</div><div class='del'>-    @c_title.scrollregion(@w_title.bbox)</div><div class='del'>-    @c_lbox.scrollregion(@w_lbox.bbox)</div><div class='del'>-    @c_hscr.scrollregion(@w_hscr.bbox) if @show_each_hscr</div><div class='del'>-</div><div class='del'>-    (0..(@rel_list.size - 2)).each{|idx|</div><div class='del'>-      title, lbox, hscr = @base_list[idx]</div><div class='del'>-      title.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-      lbox.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-                 'relheight'=&gt;1.0)</div><div class='del'>-      hscr.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def resize(x)</div><div class='del'>-    idx = @sel_sash</div><div class='del'>-    return if idx == 0</div><div class='del'>-</div><div class='del'>-    # adjustment of relative positioning</div><div class='del'>-    delta = (x - @x) / @frame_width</div><div class='del'>-    if delta &lt; @rel_list[idx-1] - @rel_list[idx] + (2*@sash/@frame_width)</div><div class='del'>-      delta = @rel_list[idx-1] - @rel_list[idx] + (2*@sash/@frame_width)</div><div class='del'>-    elsif delta &gt; @rel_list[idx+1] - @rel_list[idx] - (2*@sash/@frame_width)</div><div class='del'>-      delta = @rel_list[idx+1] - @rel_list[idx] - (2*@sash/@frame_width)</div><div class='del'>-    end</div><div class='del'>-    @rel_list[idx] += delta</div><div class='del'>-</div><div class='del'>-    # adjustment of leftside widget of the sash</div><div class='del'>-    title, lbox, hscr = @base_list[idx - 1]</div><div class='del'>-    title.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1])</div><div class='del'>-    lbox.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1], 'relheight'=&gt;1.0)</div><div class='del'>-    hscr.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1])</div><div class='del'>-</div><div class='del'>-    # adjustment of rightside widget of the sash</div><div class='del'>-    title, lbox, hscr = @base_list[idx]</div><div class='del'>-    title.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-                'relx'=&gt;@rel_list[idx])</div><div class='del'>-    lbox.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-               'relx'=&gt;@rel_list[idx], 'relheight'=&gt;1.0)</div><div class='del'>-    hscr.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-               'relx'=&gt;@rel_list[idx])</div><div class='del'>-</div><div class='del'>-    # update reference position</div><div class='del'>-    @x = x</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def motion_cb(w, x, idx)</div><div class='del'>-    if x &lt;= @sash &amp;&amp; idx &gt; 0</div><div class='del'>-      w.cursor 'sb_h_double_arrow'</div><div class='del'>-      @mode = :sash</div><div class='del'>-      @sel_sash = idx</div><div class='del'>-    elsif x &gt;= w.winfo_width - @sash &amp;&amp; idx &lt; @lbox_total - 1</div><div class='del'>-      w.cursor 'sb_h_double_arrow'</div><div class='del'>-      @mode = :sash</div><div class='del'>-      @sel_sash = idx + 1</div><div class='del'>-    else</div><div class='del'>-      w.cursor ""</div><div class='del'>-      @mode = :title</div><div class='del'>-      @sel_sash = 0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def title_binding(title, index)</div><div class='del'>-    title.bind('Motion', proc{|w, x, idx| motion_cb(w, x, idx.to_i)}, </div><div class='del'>-               "%W %x #{index}")</div><div class='del'>-</div><div class='del'>-    title.bind('Enter', proc{|w, x, idx| motion_cb(w, x, idx.to_i)}, </div><div class='del'>-               "%W %x #{index}")</div><div class='del'>-</div><div class='del'>-    title.bind('Leave', proc{|w| w.cursor ""}, "%W")</div><div class='del'>-</div><div class='del'>-    title.bind('Button-1', </div><div class='del'>-               proc{|w, x| </div><div class='del'>-                 if @mode == :sash</div><div class='del'>-                   @x = x</div><div class='del'>-                   @frame_width = TkWinfo.width(@f_title).to_f</div><div class='del'>-                 else</div><div class='del'>-                   title.relief 'sunken'</div><div class='del'>-                 end</div><div class='del'>-               }, </div><div class='del'>-               '%W %X')</div><div class='del'>-</div><div class='del'>-    title.bind('ButtonRelease-1', </div><div class='del'>-               proc{|w, x, idx| </div><div class='del'>-                 i = idx.to_i</div><div class='del'>-                 if @mode == :title &amp;&amp; @title_cmd[i].kind_of?(Proc)</div><div class='del'>-                   @title_cmd[i].call</div><div class='del'>-                 end</div><div class='del'>-                 title.relief 'raised'</div><div class='del'>-                 motion_cb(w,x,i)</div><div class='del'>-               }, </div><div class='del'>-               "%W %x #{index}")</div><div class='del'>-</div><div class='del'>-    title.bind('B1-Motion', proc{|x| resize(x) if @mode == :sash}, "%X")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def select_line(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.select_clear(1, 'end')</div><div class='del'>-      l.select_set(idx)</div><div class='del'>-    }</div><div class='del'>-    w.select_set(idx)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_shift(w, dir)</div><div class='del'>-    head = w.index('@1,1').split('.')[0].to_i</div><div class='del'>-    tail = w.index("@1,#{w.winfo_height - 1}").split('.')[0].to_i - 1</div><div class='del'>-    idx = w.select_index + dir</div><div class='del'>-    last = w.index('end - 1 char').split('.')[0].to_i</div><div class='del'>-    if idx &lt; 1</div><div class='del'>-      idx = 1</div><div class='del'>-    elsif idx &gt; last</div><div class='del'>-      idx = last</div><div class='del'>-    end</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.select_clear(1, 'end')</div><div class='del'>-      l.select_set(idx)</div><div class='del'>-    }</div><div class='del'>-    if head &gt; idx</div><div class='del'>-      @lbox_list.each{|l| l.yview('scroll', -1, 'units')}</div><div class='del'>-    elsif tail &lt; idx</div><div class='del'>-      @lbox_list.each{|l| l.yview('scroll', 1, 'units')}</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'>-# test</div><div class='del'>-################################################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  l = TkMultiColumnList.new(nil, 200, </div><div class='del'>-                            [ ['L1', 200, proc{p 'click L1'}], </div><div class='del'>-                              ['L2', 100], </div><div class='del'>-                              ['L3', 200] ], </div><div class='del'>-                            'width'=&gt;350, </div><div class='del'>-                            #'titleforeground'=&gt;'yellow', </div><div class='del'>-                            'titleforeground'=&gt;'white', </div><div class='del'>-                            #'titlebackground'=&gt;'navy',</div><div class='del'>-                            'titlebackground'=&gt;'blue',</div><div class='del'>-                            'titlefont'=&gt;'courier'</div><div class='del'>-                            ).pack('fill'=&gt;'both', 'expand'=&gt;true)</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', </div><div class='del'>-                   'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',</div><div class='del'>-                   'cccccccccccccccccccccccccccccccccccccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  p l.columns(1)</div><div class='del'>-  p l.columns(1..3)</div><div class='del'>-  p l.columns(1,2)</div><div class='del'>-</div><div class='del'>-  l.command proc{|line_info| p line_info}</div><div class='del'>-</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkmultilistbox.rb b/ext/tk/sample/tkmultilistbox.rb<br/>deleted file mode 100644<br/>index 6f956d0edb..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkmultilistbox.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkmultilistbox.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,654 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tkmultilistbox.rb : multiple listbox 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'>-class TkMultiListbox &lt; TkListbox</div><div class='del'>-  include TkComposite</div><div class='del'>-</div><div class='del'>-  #   lbox_height : height of listboxes (pixel)</div><div class='del'>-  #   title_info  : array [ [&lt;title_string&gt;,&lt;init_width&gt;], ... ]</div><div class='del'>-  #   keys        : hash {&lt;option&gt;=&gt;&lt;value&gt;, ... }</div><div class='del'>-  def initialize_composite(lbox_height, title_info, keys={})</div><div class='del'>-    # argument check</div><div class='del'>-    if (! title_info.kind_of? Array) or (title_info.size &lt; 2)</div><div class='del'>-      raise</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # decide total width</div><div class='del'>-    @width_total = 0</div><div class='del'>-    title_info.each{|title, width| @width_total += width.to_f}</div><div class='del'>-</div><div class='del'>-    # virtical scrollbar</div><div class='del'>-    @v_scroll = TkScrollbar.new(@frame, 'orient'=&gt;'vertical')</div><div class='del'>-</div><div class='del'>-    # init arrays</div><div class='del'>-    @base_list = []</div><div class='del'>-    @rel_list   = []</div><div class='del'>-    @title_list = []</div><div class='del'>-    @lbox_list  = []</div><div class='del'>-    @hscr_list  = []</div><div class='del'>-</div><div class='del'>-    # rel-table of label=&gt;index</div><div class='del'>-    @name_index = {}</div><div class='del'>-</div><div class='del'>-    # create base flames</div><div class='del'>-    @f_title = TkFrame.new(@frame, 'width'=&gt;@width_total)</div><div class='del'>-    @f_lbox  = TkFrame.new(@frame, </div><div class='del'>-                           'width'=&gt;@width_total, 'height'=&gt;lbox_height)</div><div class='del'>-    @f_hscr  = TkFrame.new(@frame, 'width'=&gt;@width_total, </div><div class='del'>-                           'height'=&gt;@v_scroll.cget('width') + </div><div class='del'>-                                     2 * @v_scroll.cget('borderwidth'))</div><div class='del'>-</div><div class='del'>-    # dummy label to keep the hight of title space</div><div class='del'>-    TkLabel.new(@f_title, 'text'=&gt;' ').pack</div><div class='del'>-</div><div class='del'>-    # create each listbox</div><div class='del'>-    sum = 0.0</div><div class='del'>-    @rel_list &lt;&lt; sum/@width_total</div><div class='del'>-    title_info.each_with_index{|(label, width), idx|</div><div class='del'>-      # set relation between label and index</div><div class='del'>-      if @name_index.include?(label)</div><div class='del'>-        @name_index[label] &lt;&lt; idx</div><div class='del'>-      else</div><div class='del'>-        @name_index[label] = [idx]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # calculate relative positioning</div><div class='del'>-      sum += width</div><div class='del'>-      @rel_list &lt;&lt; sum/@width_total</div><div class='del'>-</div><div class='del'>-      # title field</div><div class='del'>-      f = TkFrame.new(@f_title, 'width'=&gt;width)</div><div class='del'>-      base = [f]</div><div class='del'>-      @title_list &lt;&lt; TkLabel.new(f, 'text'=&gt;label).pack('fill'=&gt;'x')</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;-6, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-</div><div class='del'>-      # listbox field</div><div class='del'>-      f = TkFrame.new(@f_lbox, 'width'=&gt;width)</div><div class='del'>-      base &lt;&lt; f</div><div class='del'>-      @lbox_list &lt;&lt; TkListbox.new(f).pack('fill'=&gt;'both', 'expand'=&gt;true)</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;-4, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], 'relheight'=&gt;1.0)</div><div class='del'>-</div><div class='del'>-      # scrollbar field</div><div class='del'>-      f = TkFrame.new(@f_hscr, 'width'=&gt;width)</div><div class='del'>-      base &lt;&lt; f</div><div class='del'>-      @hscr_list &lt;&lt; TkScrollbar.new(f, 'orient'=&gt;'horizontal') . </div><div class='del'>-                                              pack('fill'=&gt;'x', 'anchor'=&gt;'w')</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;-4, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-</div><div class='del'>-      @lbox_list[idx].xscrollcommand proc{|first, last| </div><div class='del'>-        @hscr_list[idx].set first, last</div><div class='del'>-      }</div><div class='del'>-      @hscr_list[idx].command proc{|*args| @lbox_list[idx].xview *args}</div><div class='del'>-</div><div class='del'>-      # add new base</div><div class='del'>-      @base_list &lt;&lt; base</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # create tab</div><div class='del'>-    @tab_list = [nil]</div><div class='del'>-    (1..(@rel_list.size - 2)).each{|idx|</div><div class='del'>-      tab = TkFrame.new(@f_title, 'cursor'=&gt;'sb_h_double_arrow', </div><div class='del'>-                        'width'=&gt;6, 'borderwidth'=&gt;2, 'relief'=&gt;'raised')</div><div class='del'>-      @tab_list &lt;&lt; tab</div><div class='del'>-      tab.place('relx'=&gt;@rel_list[idx], 'anchor'=&gt;'ne', 'relheight'=&gt;0.95)</div><div class='del'>-      tab.bind('Button-1', </div><div class='del'>-               proc{|x| @x = x; @frame_width = TkWinfo.width(@f_title).to_f}, </div><div class='del'>-               '%X')</div><div class='del'>-      tab.bind('B1-Motion', proc{|x, idx| resize(x, idx.to_i)}, "%X #{idx}")</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # set control procedure for virtical scroll</div><div class='del'>-    @lbox_list.each{|lbox|</div><div class='del'>-      lbox.yscrollcommand proc{|first, last| </div><div class='del'>-        @v_scroll.set first, last</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    @v_scroll.command proc{|*args| @lbox_list.each{|lbox| lbox.yview *args} }</div><div class='del'>-</div><div class='del'>-    # binding for listboxes</div><div class='del'>-    @mode = {}</div><div class='del'>-    @mode['browse']   = browse_mode_bindtag</div><div class='del'>-    @mode['single']   = single_mode_bindtag</div><div class='del'>-    @mode['extended'] = extended_mode_bindtag</div><div class='del'>-    @mode['multiple'] = multiple_mode_bindtag</div><div class='del'>-    @current_mode = 'browse'</div><div class='del'>-    @lbox_list.each{|l| </div><div class='del'>-      l.bind('Shift-Key-Left', </div><div class='del'>-             proc{|w| focus_shift(w, -1); Tk.callback_break}, '%W')</div><div class='del'>-      l.bind('Shift-Key-Right', </div><div class='del'>-             proc{|w| focus_shift(w, 1); Tk.callback_break}, '%W')</div><div class='del'>-</div><div class='del'>-      l.bind('Button-2', proc{|x, y| </div><div class='del'>-               @lbox_mark_x = x</div><div class='del'>-               @lbox_list.each{|lbox| lbox.scan_mark(x, y)}</div><div class='del'>-             }, '%x %y')</div><div class='del'>-      l.bind('B2-Motion', proc{|x, y| </div><div class='del'>-               @lbox_list.each{|lbox| lbox.scan_dragto(@lbox_mark_x, y)}</div><div class='del'>-               l.scan_dragto(x, y)</div><div class='del'>-             }, '%x %y')</div><div class='del'>-</div><div class='del'>-      l.bindtags(l.bindtags.unshift(@mode[@current_mode]))</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # alignment</div><div class='del'>-    TkGrid.rowconfigure(@frame, 0, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.rowconfigure(@frame, 1, 'weight'=&gt;1)</div><div class='del'>-    TkGrid.rowconfigure(@frame, 2, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 0, 'weight'=&gt;1)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 1, 'weight'=&gt;0)</div><div class='del'>-    @v_scroll.grid('row'=&gt;1, 'column'=&gt;1, 'sticky'=&gt;'ns')</div><div class='del'>-    @f_title.grid('row'=&gt;0, 'column'=&gt;0, 'sticky'=&gt;'news')</div><div class='del'>-    @f_lbox.grid('row'=&gt;1, 'column'=&gt;0, 'sticky'=&gt;'news')</div><div class='del'>-    @f_hscr.grid('row'=&gt;2, 'column'=&gt;0, 'sticky'=&gt;'ew')</div><div class='del'>-</div><div class='del'>-    # binding for 'Configure' event</div><div class='del'>-    @frame.bind('Configure', proc{reconstruct})</div><div class='del'>-</div><div class='del'>-    # set default receiver of method calls</div><div class='del'>-    @path = @lbox_list[0].path</div><div class='del'>-</div><div class='del'>-    # configure options</div><div class='del'>-    keys = {} unless keys</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    # 'mode' option of listboxes</div><div class='del'>-    sel_mode = keys.delete('mode')</div><div class='del'>-    mode(sel_mode) if sel_mode</div><div class='del'>-</div><div class='del'>-    # 'scrollbarwidth' option == 'width' option of scrollbars</div><div class='del'>-    width = keys.delete('scrollbarwidth')</div><div class='del'>-    scrollbarwidth(width) if width</div><div class='del'>-</div><div class='del'>-    # options for listbox titles</div><div class='del'>-    title_font = keys.delete('titlefont')</div><div class='del'>-    title_fg = keys.delete('titleforeground')</div><div class='del'>-    title_bg = keys.delete('titlebackground')</div><div class='del'>-    if title_font or title_fg or title_bg</div><div class='del'>-      titleconfig(title_font, title_fg, title_bg)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # set receivers for configure methods</div><div class='del'>-    delegate('DEFAULT', *@lbox_list)</div><div class='del'>-    delegate('activebackground', @v_scroll, *@hscr_list)</div><div class='del'>-    delegate('troughcolor', @v_scroll, *@hscr_list)</div><div class='del'>-    delegate('repeatdelay', @v_scroll, *@hscr_list)</div><div class='del'>-    delegate('repeatinterval', @v_scroll, *@hscr_list)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-</div><div class='del'>-    # configure</div><div class='del'>-    configure(keys) if keys.size &gt; 0</div><div class='del'>-  end</div><div class='del'>-  private :initialize_composite</div><div class='del'>-</div><div class='del'>-  # set 'mode' option of listboxes</div><div class='del'>-  def mode(sel_mode)</div><div class='del'>-    @lbox_list.each{|l| </div><div class='del'>-      tags = l.bindtags</div><div class='del'>-      tags = tags - [ @mode[@current_mode] ]</div><div class='del'>-      l.bindtags(tags.unshift(@mode[sel_mode]))</div><div class='del'>-      @current_mode = sel_mode</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set scrollbar width</div><div class='del'>-  def scrollbarwidth(width)</div><div class='del'>-    @v_scroll['width'] = width</div><div class='del'>-    @hscr_list.each{|hscr| hscr['width'] = width}</div><div class='del'>-    @f_hscr['height'] = width + 2 * @v_scroll.cget('borderwidth')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set options of titles</div><div class='del'>-  def titleconfig(font, fg, bg)</div><div class='del'>-    keys = {}</div><div class='del'>-    keys['font'] = font if font</div><div class='del'>-    keys['foreground'] = fg if fg</div><div class='del'>-    keys['background'] = bg if bg</div><div class='del'>-    @title_list.each{|label| label.configure(keys)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get label widgets of listbox titles</div><div class='del'>-  def titlelabels(*indices)</div><div class='del'>-    @title_list[*indices]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get listbox widgets</div><div class='del'>-  def columns(*indices)</div><div class='del'>-    @lbox_list[*indices]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def activate(idx)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.activate(idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(idx)</div><div class='del'>-    @lbox_list.collect{|lbox| lbox.bbox(idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*idx)</div><div class='del'>-    @lbox_list.collect{|lbox| lbox.delete(*idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(*idx)</div><div class='del'>-    if idx.size == 1</div><div class='del'>-      @lbox_list.collect{|lbox| lbox.get(*idx)}</div><div class='del'>-    else</div><div class='del'>-      list = @lbox_list.collect{|lbox| lbox.get(*idx)}</div><div class='del'>-      result = []</div><div class='del'>-      list[0].each_with_index{|line, index|</div><div class='del'>-        result &lt;&lt; list.collect{|lines| lines[index]}</div><div class='del'>-      }</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _line_array_to_hash(line)</div><div class='del'>-    result = {}</div><div class='del'>-    @name_index.each_pair{|label, indices|</div><div class='del'>-      if indices.size == 1</div><div class='del'>-        result[label] = line[indices[0]]</div><div class='del'>-      else</div><div class='del'>-        result[label] = indices.collect{|index| line[index]}</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-  private :_line_array_to_hash</div><div class='del'>-</div><div class='del'>-  def get_by_hash(*idx)</div><div class='del'>-    get_result = get(*idx)</div><div class='del'>-    if idx.size == 1</div><div class='del'>-      _line_array_to_hash(get_result)</div><div class='del'>-    else</div><div class='del'>-      get_result.collect{|line| _line_array_to_hash(line)}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, *lines)</div><div class='del'>-    lbox_ins = []</div><div class='del'>-    (0..@lbox_list.size).each{lbox_ins &lt;&lt; []}</div><div class='del'>-</div><div class='del'>-    lines.each{|line|</div><div class='del'>-      if line.kind_of? Hash</div><div class='del'>-        array = []</div><div class='del'>-        @name_index.each_pair{|label, indices|</div><div class='del'>-          if indices.size == 1</div><div class='del'>-            array[indices[0]] = line[label]</div><div class='del'>-          else</div><div class='del'>-            if line[label].kind_of? Array</div><div class='del'>-              indices.each_with_index{|index, num| </div><div class='del'>-                array[index] = line[label][num]</div><div class='del'>-              }</div><div class='del'>-            else</div><div class='del'>-              array[indices[0]] = line[label]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        line = array</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @name_index.each_pair{|label, indices|</div><div class='del'>-        if indices.size == 1</div><div class='del'>-          lbox_ins[indices[0]] &lt;&lt; line[indices[0]]</div><div class='del'>-        else</div><div class='del'>-          indices.each{|index| lbox_ins[index] &lt;&lt; line[index]}</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }   </div><div class='del'>-</div><div class='del'>-    @lbox_list.each_with_index{|lbox, index| </div><div class='del'>-      lbox.insert(idx, *lbox_ins[index]) if lbox_ins[index]</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_anchor(index)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.selection_anchor(index)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.selection_clear(first, last=None)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.selection_set(first, last=None)}</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 reconstruct</div><div class='del'>-    (0..(@rel_list.size - 2)).each{|idx|</div><div class='del'>-      title, lbox, hscr = @base_list[idx]</div><div class='del'>-      title.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-      lbox.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-                 'relheight'=&gt;1.0)</div><div class='del'>-      hscr.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-</div><div class='del'>-      tab = @tab_list[idx]</div><div class='del'>-      tab.place('relx'=&gt;@rel_list[idx]) if tab</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def resize(x, idx)</div><div class='del'>-    # adjustment of relative positioning</div><div class='del'>-    delta = (x - @x) / @frame_width</div><div class='del'>-    if delta &lt; @rel_list[idx-1] - @rel_list[idx] + 0.02</div><div class='del'>-      delta = @rel_list[idx-1] - @rel_list[idx] + 0.02</div><div class='del'>-    elsif delta &gt; @rel_list[idx+1] - @rel_list[idx] - 0.02</div><div class='del'>-      delta = @rel_list[idx+1] - @rel_list[idx] - 0.02</div><div class='del'>-    end</div><div class='del'>-    @rel_list[idx] += delta</div><div class='del'>-</div><div class='del'>-    # adjustment of leftside widget of the tab</div><div class='del'>-    title, lbox, hscr = @base_list[idx - 1]</div><div class='del'>-    title.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1])</div><div class='del'>-    lbox.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1], 'relheight'=&gt;1.0)</div><div class='del'>-    hscr.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1])</div><div class='del'>-</div><div class='del'>-    # adjustment of the tab position</div><div class='del'>-    @tab_list[idx].place('relx'=&gt;@rel_list[idx])</div><div class='del'>-</div><div class='del'>-    # adjustment of rightside widget of the tab</div><div class='del'>-    title, lbox, hscr = @base_list[idx]</div><div class='del'>-    title.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-                'relx'=&gt;@rel_list[idx])</div><div class='del'>-    lbox.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-               'relx'=&gt;@rel_list[idx], 'relheight'=&gt;1.0)</div><div class='del'>-    hscr.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-               'relx'=&gt;@rel_list[idx])</div><div class='del'>-</div><div class='del'>-    # update reference position</div><div class='del'>-    @x = x</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #################################</div><div class='del'>-  def browse_mode_bindtag</div><div class='del'>-    t = TkBindTag.new</div><div class='del'>-    t.bind('Button-1', </div><div class='del'>-           proc{|w, y| w.focus; select_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('B1-Motion', proc{|w, y| select_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Shift-Button-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Key-Up', proc{|w| select_shift(w, -1)}, '%W')</div><div class='del'>-    t.bind('Key-Down', proc{|w| select_shift(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Home', proc{|w| select_line(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-End', proc{|w| select_line(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('space', proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Select', proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Control-slash', </div><div class='del'>-           proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-</div><div class='del'>-    t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def single_mode_bindtag</div><div class='del'>-    t = TkBindTag.new</div><div class='del'>-    t.bind('Button-1', </div><div class='del'>-           proc{|w, y| w.focus; select_only(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('ButtonRelease-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Shift-Button-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Key-Up', proc{|w| select_shift(w, -1)}, '%W')</div><div class='del'>-    t.bind('Key-Down', proc{|w| select_shift(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Home', proc{|w| select_line(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-End', proc{|w| select_line(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('space', proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Select', proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Control-slash', </div><div class='del'>-           proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Control-backslash', </div><div class='del'>-           proc{@lbox_list.each{|l| l.selection_clear(0, 'end')}})</div><div class='del'>-</div><div class='del'>-    t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def extended_mode_bindtag</div><div class='del'>-    t = TkBindTag.new</div><div class='del'>-    t.bind('Button-1', </div><div class='del'>-           proc{|w, y| w.focus; select_only(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('B1-Motion', proc{|w, y| select_range(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('ButtonRelease-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Shift-Button-1', </div><div class='del'>-           proc{|w, y| select_range(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('Shift-B1-Motion', </div><div class='del'>-           proc{|w, y| select_range(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Button-1', </div><div class='del'>-           proc{|w, y| select_toggle(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-B1-Motion', </div><div class='del'>-           proc{|w, y| select_drag(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Key-Up', proc{|w| active_shift(w, -1)}, '%W')</div><div class='del'>-    t.bind('Key-Down', proc{|w| active_shift(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Shift-Up', proc{|w| select_expand(w, -1)}, '%W')</div><div class='del'>-    t.bind('Shift-Down', proc{|w| select_expand(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Home', proc{|w| select_line2(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-End', proc{|w| select_line2(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Shift-Home', proc{|w| select_range(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-Shift-End', proc{|w| select_range(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('space', proc{|w| select_active(w)}, '%W')</div><div class='del'>-    t.bind('Select', proc{|w| select_active(w)}, '%W')</div><div class='del'>-    t.bind('Control-slash', proc{|w| select_all}, '%W')</div><div class='del'>-    t.bind('Control-backslash', proc{|w| clear_all}, '%W')</div><div class='del'>-</div><div class='del'>-    t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def multiple_mode_bindtag</div><div class='del'>-    t = TkBindTag.new</div><div class='del'>-    t.bind('Button-1', </div><div class='del'>-           proc{|w, y| w.focus; select_line3(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('ButtonRelease-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Key-Up', proc{|w| active_shift(w, -1)}, '%W')</div><div class='del'>-    t.bind('Key-Down', proc{|w| active_shift(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Home', proc{|w| select_line2(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-End', proc{|w| select_line2(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Shift-Home', proc{|w| active_line(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-Shift-End', proc{|w| active_line(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('space', proc{|w| select_active(w)}, '%W')</div><div class='del'>-    t.bind('Select', proc{|w| select_active(w)}, '%W')</div><div class='del'>-    t.bind('Control-slash', proc{|w| select_all}, '%W')</div><div class='del'>-    t.bind('Control-backslash', proc{|w| clear_all}, '%W')</div><div class='del'>-</div><div class='del'>-    t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def active_line(w, idx)</div><div class='del'>-    @lbox_list.each{|l| l.activate(idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_only(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      l.selection_set('anchor')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_range(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-      l.selection_set('anchor', idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_toggle(w, idx)</div><div class='del'>-    st = w.selection_includes(idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      if st == 1</div><div class='del'>-        l.selection_clear(idx)</div><div class='del'>-      else</div><div class='del'>-        l.selection_set(idx)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_drag(w, idx)</div><div class='del'>-    st = w.selection_includes('anchor')</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      if st == 1</div><div class='del'>-        l.selection_set('anchor', idx)</div><div class='del'>-      else</div><div class='del'>-        l.selection_clear('anchor', idx)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_line(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      l.selection_set('anchor')</div><div class='del'>-    }</div><div class='del'>-    w.selection_set('anchor')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_line2(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      l.selection_set('anchor')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_line3(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_set(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_active(w)</div><div class='del'>-    idx = l.activate(idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_set(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_expand(w, dir)</div><div class='del'>-    idx = w.index('active').to_i + dir</div><div class='del'>-    if idx &lt; 0</div><div class='del'>-      idx = 0</div><div class='del'>-    elsif idx &gt;= w.size</div><div class='del'>-      idx = w.size - 1</div><div class='del'>-    end</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_set(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def active_shift(w, dir)</div><div class='del'>-    idx = w.index('active').to_i + dir</div><div class='del'>-    if idx &lt; 0</div><div class='del'>-      idx = 0</div><div class='del'>-    elsif idx &gt;= w.size</div><div class='del'>-      idx = w.size - 1</div><div class='del'>-    end</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_shift(w, dir)</div><div class='del'>-    idx = w.index('anchor').to_i + dir</div><div class='del'>-    if idx &lt; 0</div><div class='del'>-      idx = 0</div><div class='del'>-    elsif idx &gt;= w.size</div><div class='del'>-      idx = w.size - 1</div><div class='del'>-    end</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      l.selection_set('anchor')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_all</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_set(0, 'end')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_all</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def focus_shift(w, dir)</div><div class='del'>-    idx = @lbox_list.index(w) + dir</div><div class='del'>-    return if idx &lt; 0</div><div class='del'>-    return if idx &gt;= @lbox_list.size</div><div class='del'>-    @lbox_list[idx].focus</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'>-# test</div><div class='del'>-################################################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  f = TkFrame.new(nil, 'width'=&gt;300, </div><div class='del'>-                  'height'=&gt;200).pack('fill'=&gt;'both', 'expand'=&gt;'true')</div><div class='del'>-  #f = TkFrame.new.pack('fill'=&gt;'both', 'expand'=&gt;'true')</div><div class='del'>-  l = TkMultiListbox.new(f, 150, </div><div class='del'>-                         [ ['L1', 100], </div><div class='del'>-                           ['L2', 200], </div><div class='del'>-                           ['L3', 50] ], </div><div class='del'>-                         'titlefont'=&gt;'courier', </div><div class='del'>-                         'titleforeground'=&gt;'yellow', </div><div class='del'>-                         'titlebackground'=&gt;'navy'</div><div class='del'>-                         ).pack('fill'=&gt;'both', 'expand'=&gt;true)</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  p l.columns(1)</div><div class='del'>-  p l.columns(1..3)</div><div class='del'>-  p l.columns(1,2)</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkmultilistframe.rb b/ext/tk/sample/tkmultilistframe.rb<br/>deleted file mode 100644<br/>index ef1a0a824d..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkmultilistframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkmultilistframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,940 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# tkmultilistframe.rb : multiple listbox widget on scrollable frame</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 TkMultiListFrame &lt; TkListbox</div><div class='del'>-  include TkComposite</div><div class='del'>-</div><div class='del'>-  #   lbox_height : height of listboxes (pixel)</div><div class='del'>-  #   title_info  : array [ [&lt;title_string&gt;,&lt;init_width&gt;], ... ]</div><div class='del'>-  #   keys        : hash {&lt;option&gt;=&gt;&lt;value&gt;, ... }</div><div class='del'>-  def initialize_composite(lbox_height, title_info, keys={})</div><div class='del'>-    # argument check</div><div class='del'>-    if (! title_info.kind_of? Array) or (title_info.size &lt; 2)</div><div class='del'>-      raise</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # mode</div><div class='del'>-    @keep_minsize = true</div><div class='del'>-    @show_each_hscr = true</div><div class='del'>-    @show_win_hscr = true</div><div class='del'>-</div><div class='del'>-    # init arrays</div><div class='del'>-    @base_list  = []</div><div class='del'>-    @rel_list   = []</div><div class='del'>-    @title_list = []</div><div class='del'>-    @title_cmd  = []</div><div class='del'>-    @lbox_list  = []</div><div class='del'>-    @hscr_list  = []</div><div class='del'>-</div><div class='del'>-    # decide total width</div><div class='del'>-    @lbox_total = title_info.size</div><div class='del'>-    @width_total = 0</div><div class='del'>-    title_info.each{|title, width, cmd| </div><div class='del'>-      @width_total += width.to_f</div><div class='del'>-      @title_cmd &lt;&lt; cmd</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # rel-table of label=&gt;index</div><div class='del'>-    @name_index = {}</div><div class='del'>-</div><div class='del'>-    # size definition</div><div class='del'>-    @window_width = @width_total</div><div class='del'>-    @sash = 5</div><div class='del'>-    @scrbar_width = 15</div><div class='del'>-    @scrbar_border = 3</div><div class='del'>-    @lbox_border = 1</div><div class='del'>-    @title_border = 3</div><div class='del'>-    @h_l_thick = 0</div><div class='del'>-</div><div class='del'>-    # init status</div><div class='del'>-    @mode = :title</div><div class='del'>-</div><div class='del'>-    # virtical scrollbar</div><div class='del'>-=begin</div><div class='del'>-    @v_scroll = TkScrollbar.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                                'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                'orient'=&gt;'vertical', 'width'=&gt;@scrbar_width)</div><div class='del'>-=end</div><div class='del'>-    @v_scroll = TkYScrollbar.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                                 'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                 'width'=&gt;@scrbar_width)</div><div class='del'>-</div><div class='del'>-    # horizontal scrollbar</div><div class='del'>-=begin</div><div class='del'>-    @h_scroll = TkScrollbar.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                                'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                'orient'=&gt;'horizontal', 'width'=&gt;@scrbar_width)</div><div class='del'>-=end</div><div class='del'>-    @h_scroll = TkXScrollbar.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                                 'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                 'width'=&gt;@scrbar_width)</div><div class='del'>-</div><div class='del'>-    # create base flames</div><div class='del'>-    @c_title = TkCanvas.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                            'width'=&gt;@window_width)</div><div class='del'>-    @f_title = TkFrame.new(@c_title, 'width'=&gt;@width_total)</div><div class='del'>-    @w_title = TkcWindow.new(@c_title, 0, 0, </div><div class='del'>-                             'window'=&gt;@f_title, 'anchor'=&gt;'nw')</div><div class='del'>-</div><div class='del'>-    @c_lbox  = TkCanvas.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                            'width'=&gt;@window_width)</div><div class='del'>-    @f_lbox  = TkFrame.new(@c_lbox, 'width'=&gt;@width_total)</div><div class='del'>-    @w_lbox  = TkcWindow.new(@c_lbox, 0, 0, 'window'=&gt;@f_lbox, 'anchor'=&gt;'nw')</div><div class='del'>-</div><div class='del'>-    @c_hscr  = TkCanvas.new(@frame, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                            'width'=&gt;@window_width)</div><div class='del'>-    @f_hscr  = TkFrame.new(@c_hscr, 'width'=&gt;@width_total)</div><div class='del'>-    @w_hscr  = TkcWindow.new(@c_hscr, 0, 0, 'window'=&gt;@f_hscr, 'anchor'=&gt;'nw')</div><div class='del'>-</div><div class='del'>-    # create each listbox</div><div class='del'>-    sum = 0.0</div><div class='del'>-    @rel_list &lt;&lt; sum/@width_total</div><div class='del'>-    title_info.each_with_index{|(label, width), idx|</div><div class='del'>-      # set relation between label and index</div><div class='del'>-      if @name_index.include?(label)</div><div class='del'>-        @name_index[label] &lt;&lt; idx</div><div class='del'>-      else</div><div class='del'>-        @name_index[label] = [idx]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # calculate relative positioning</div><div class='del'>-      sum += width</div><div class='del'>-      @rel_list &lt;&lt; sum/@width_total</div><div class='del'>-</div><div class='del'>-      # title field</div><div class='del'>-      f = TkFrame.new(@f_title, 'width'=&gt;width)</div><div class='del'>-      base = [f]</div><div class='del'>-</div><div class='del'>-      title = TkLabel.new(f, 'text'=&gt;label, 'borderwidth'=&gt;@title_border, </div><div class='del'>-                          'relief'=&gt;'raised', 'highlightthickness'=&gt;@h_l_thick)</div><div class='del'>-      title_binding(title, idx)</div><div class='del'>-      title.pack('fill'=&gt;'x')</div><div class='del'>-</div><div class='del'>-      @title_list &lt;&lt; title</div><div class='del'>-</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;1, </div><div class='del'>-              'relheight'=&gt;1.0, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-</div><div class='del'>-      # listbox field</div><div class='del'>-      f = TkFrame.new(@f_lbox, 'width'=&gt;width)</div><div class='del'>-      base &lt;&lt; f</div><div class='del'>-      @lbox_list &lt;&lt; TkListbox.new(f, 'highlightthickness'=&gt;@h_l_thick, </div><div class='del'>-                                  'borderwidth'=&gt;@lbox_border</div><div class='del'>-                                  ).pack('fill'=&gt;'both', 'expand'=&gt;true)</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;1, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], 'relheight'=&gt;1.0)</div><div class='del'>-</div><div class='del'>-      # scrollbar field</div><div class='del'>-      f = TkFrame.new(@f_hscr, 'width'=&gt;width)</div><div class='del'>-      base &lt;&lt; f</div><div class='del'>-=begin</div><div class='del'>-      @hscr_list &lt;&lt; TkScrollbar.new(f, 'orient'=&gt;'horizontal', </div><div class='del'>-                                    'width'=&gt;@scrbar_width, </div><div class='del'>-                                    'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                    'highlightthickness'=&gt;@h_l_thick</div><div class='del'>-                                    ).pack('fill'=&gt;'x', 'anchor'=&gt;'w')</div><div class='del'>-=end</div><div class='del'>-      @hscr_list &lt;&lt; TkXScrollbar.new(f, 'width'=&gt;@scrbar_width, </div><div class='del'>-                                     'borderwidth'=&gt;@scrbar_border, </div><div class='del'>-                                     'highlightthickness'=&gt;@h_l_thick</div><div class='del'>-                                    ).pack('fill'=&gt;'x', 'anchor'=&gt;'w')</div><div class='del'>-      f.place('relx'=&gt;@rel_list[idx], 'y'=&gt;0, 'anchor'=&gt;'nw', 'width'=&gt;1, </div><div class='del'>-              'relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-      @lbox_list[idx].xscrollcommand proc{|first, last| </div><div class='del'>-        @hscr_list[idx].set first, last</div><div class='del'>-      }</div><div class='del'>-      @hscr_list[idx].command proc{|*args| @lbox_list[idx].xview *args}</div><div class='del'>-=end</div><div class='del'>-      @lbox_list[idx].xscrollbar(@hscr_list[idx])</div><div class='del'>-</div><div class='del'>-      # add new base</div><div class='del'>-      @base_list &lt;&lt; base</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # pad</div><div class='del'>-    # @f_title_pad = TkFrame.new(@frame)</div><div class='del'>-    @f_title_pad = TkFrame.new(@frame, 'relief'=&gt;'raised', </div><div class='del'>-                               'borderwidth'=&gt;@title_border, </div><div class='del'>-                               'highlightthickness'=&gt;@h_l_thick)</div><div class='del'>-</div><div class='del'>-    @f_scr_pad = TkFrame.new(@frame, 'relief'=&gt;'sunken', </div><div class='del'>-                             'borderwidth'=&gt;1, </div><div class='del'>-                             'highlightthickness'=&gt;@h_l_thick)</div><div class='del'>-</div><div class='del'>-    # height check</div><div class='del'>-    title_height = 0</div><div class='del'>-    @title_list.each{|w| </div><div class='del'>-      h = w.winfo_reqheight</div><div class='del'>-      title_height = h if title_height &lt; h</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    hscr_height = 0</div><div class='del'>-    @hscr_list.each{|w| </div><div class='del'>-      h = w.winfo_reqheight</div><div class='del'>-      hscr_height = h if hscr_height &lt; h</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @f_title.height title_height</div><div class='del'>-    @f_lbox.height lbox_height</div><div class='del'>-    @f_hscr.height hscr_height</div><div class='del'>-</div><div class='del'>-    # set control procedure for virtical scroll</div><div class='del'>-=begin</div><div class='del'>-    @lbox_list.each{|lbox|</div><div class='del'>-      lbox.yscrollcommand proc{|first, last| </div><div class='del'>-        @v_scroll.set first, last</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    @v_scroll.command proc{|*args| @lbox_list.each{|lbox| lbox.yview *args} }</div><div class='del'>-=end</div><div class='del'>-    @v_scroll.assign(*@lbox_list)</div><div class='del'>-</div><div class='del'>-    # set control procedure for horizoncal scroll</div><div class='del'>-=begin</div><div class='del'>-    @c_title.xscrollcommand proc{|first, last| </div><div class='del'>-      @h_scroll.set first, last</div><div class='del'>-    }</div><div class='del'>-    @c_lbox.xscrollcommand proc{|first, last| </div><div class='del'>-      @h_scroll.set first, last</div><div class='del'>-    }</div><div class='del'>-    @c_hscr.xscrollcommand proc{|first, last| </div><div class='del'>-      @h_scroll.set first, last</div><div class='del'>-    }</div><div class='del'>-    @h_scroll.command proc{|*args| </div><div class='del'>-      @c_title.xview *args</div><div class='del'>-      @c_lbox.xview *args</div><div class='del'>-      @c_hscr.xview *args if @show_each_hscr</div><div class='del'>-    }</div><div class='del'>-=end</div><div class='del'>-    @h_scroll.assign(@c_title, @c_lbox, @c_hscr)</div><div class='del'>-</div><div class='del'>-    # binding for listboxes</div><div class='del'>-    @lbox_mode = {}</div><div class='del'>-    @lbox_mode['browse']   = browse_mode_bindtag</div><div class='del'>-    @lbox_mode['single']   = single_mode_bindtag</div><div class='del'>-    @lbox_mode['extended'] = extended_mode_bindtag</div><div class='del'>-    @lbox_mode['multiple'] = multiple_mode_bindtag</div><div class='del'>-    @current_mode = 'browse'</div><div class='del'>-    @lbox_list.each_with_index{|l, idx| </div><div class='del'>-      l.bind('Shift-Key-Left', </div><div class='del'>-             proc{|w| focus_shift(w, -1); Tk.callback_break}, '%W')</div><div class='del'>-      l.bind('Shift-Key-Right', </div><div class='del'>-             proc{|w| focus_shift(w, 1); Tk.callback_break}, '%W')</div><div class='del'>-</div><div class='del'>-      l.bind('Button-2', proc{|x, y| </div><div class='del'>-               @lbox_mark_x = x</div><div class='del'>-               @lbox_list.each{|lbox| lbox.scan_mark(x, y)}</div><div class='del'>-             }, '%x %y')</div><div class='del'>-      l.bind('B2-Motion', proc{|x, y| </div><div class='del'>-               @lbox_list.each{|lbox| lbox.scan_dragto(@lbox_mark_x, y)}</div><div class='del'>-               l.scan_dragto(x, y)</div><div class='del'>-             }, '%x %y')</div><div class='del'>-</div><div class='del'>-      l.bindtags(l.bindtags.unshift(@lbox_mode[@current_mode]))</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    bbox = @w_title.bbox</div><div class='del'>-    @c_title.height(bbox[3])</div><div class='del'>-    @c_title.scrollregion(bbox)</div><div class='del'>-</div><div class='del'>-    bbox = @w_lbox.bbox</div><div class='del'>-    @c_lbox.height(bbox[3])</div><div class='del'>-    @c_lbox.scrollregion(bbox)</div><div class='del'>-</div><div class='del'>-    if @show_each_hscr</div><div class='del'>-      bbox = @w_hscr.bbox</div><div class='del'>-      @c_hscr.height(bbox[3])</div><div class='del'>-      @c_hscr.scrollregion(bbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # alignment</div><div class='del'>-    TkGrid.rowconfigure(@frame, 0, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.rowconfigure(@frame, 1, 'weight'=&gt;1)</div><div class='del'>-    TkGrid.rowconfigure(@frame, 2, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.rowconfigure(@frame, 3, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 0, 'weight'=&gt;1)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 1, 'weight'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 2, 'weight'=&gt;0)</div><div class='del'>-    @v_scroll.grid('row'=&gt;1, 'column'=&gt;2, 'sticky'=&gt;'ns')</div><div class='del'>-    @c_title.grid('row'=&gt;0, 'column'=&gt;0, 'sticky'=&gt;'news')</div><div class='del'>-    @f_title_pad.grid('row'=&gt;0, 'column'=&gt;2, 'sticky'=&gt;'news')</div><div class='del'>-    @c_lbox.grid('row'=&gt;1, 'column'=&gt;0, 'sticky'=&gt;'news')</div><div class='del'>-    @c_hscr.grid('row'=&gt;2, 'column'=&gt;0, 'sticky'=&gt;'ew') if @show_each_hscr</div><div class='del'>-    @h_scroll.grid('row'=&gt;3, 'column'=&gt;0, 'sticky'=&gt;'ew') if @show_win_hscr</div><div class='del'>-    @f_scr_pad.grid('row'=&gt;2, 'rowspan'=&gt;2, 'column'=&gt;2, 'sticky'=&gt;'news')</div><div class='del'>-</div><div class='del'>-    # binding for 'Configure' event</div><div class='del'>-    @c_lbox.bind('Configure', </div><div class='del'>-                 proc{|height, width| reconstruct(height, width)}, </div><div class='del'>-                 '%h %w')</div><div class='del'>-</div><div class='del'>-    # set default receiver of method calls</div><div class='del'>-    @path = @lbox_list[0].path</div><div class='del'>-</div><div class='del'>-    # configure options</div><div class='del'>-    keys = {} unless keys</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    # 'mode' option of listboxes</div><div class='del'>-    sel_mode = keys.delete('mode')</div><div class='del'>-    mode(sel_mode) if sel_mode</div><div class='del'>-</div><div class='del'>-    # 'scrollbarwidth' option == 'width' option of scrollbars</div><div class='del'>-    width = keys.delete('scrollbarwidth')</div><div class='del'>-    scrollbarwidth(width) if width</div><div class='del'>-</div><div class='del'>-    # options for listbox titles</div><div class='del'>-    title_font = keys.delete('titlefont')</div><div class='del'>-    titlefont(title_font) if title_font</div><div class='del'>-</div><div class='del'>-    title_fg = keys.delete('titleforeground')</div><div class='del'>-    titleforeground(title_fg) if title_fg</div><div class='del'>-</div><div class='del'>-    title_bg = keys.delete('titlebackground')</div><div class='del'>-    titlebackground(title_bg) if title_bg</div><div class='del'>-</div><div class='del'>-    # set receivers for configure methods</div><div class='del'>-    delegate('DEFAULT', *@lbox_list)</div><div class='del'>-    delegate('activebackground', @v_scroll, @h_scroll, *@hscr_list)</div><div class='del'>-    delegate('troughcolor', @v_scroll, @h_scroll, *@hscr_list)</div><div class='del'>-    delegate('repeatdelay', @v_scroll, @h_scroll, *@hscr_list)</div><div class='del'>-    delegate('repeatinterval', @v_scroll, @h_scroll, *@hscr_list)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-    delegate('width', @c_lbox, @c_title, @c_hscr)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-</div><div class='del'>-    # configure</div><div class='del'>-    configure(keys) if keys.size &gt; 0</div><div class='del'>-  end</div><div class='del'>-  private :initialize_composite</div><div class='del'>-</div><div class='del'>-  # set 'mode' option of listboxes</div><div class='del'>-  def mode(sel_mode)</div><div class='del'>-    @lbox_list.each{|l| </div><div class='del'>-      tags = l.bindtags</div><div class='del'>-      tags = tags - [ @lbox_mode[@current_mode] ]</div><div class='del'>-      l.bindtags(tags.unshift(@lbox_mode[sel_mode]))</div><div class='del'>-      @current_mode = sel_mode</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # keep_minsize?</div><div class='del'>-  def keep_minsize?</div><div class='del'>-    @keep_minsize</div><div class='del'>-  end</div><div class='del'>-  def keep_minsize(bool)</div><div class='del'>-    @keep_minsize = bool</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # each hscr</div><div class='del'>-  def show_each_hscr</div><div class='del'>-    @show_each_hscr = true</div><div class='del'>-    @c_hscr.grid('row'=&gt;2, 'column'=&gt;0, 'sticky'=&gt;'ew')</div><div class='del'>-  end</div><div class='del'>-  def hide_each_hscr</div><div class='del'>-    @show_each_hscr = false</div><div class='del'>-    @c_hscr.ungrid</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # window hscroll</div><div class='del'>-  def show_win_hscr</div><div class='del'>-    @show_win_hscr = true</div><div class='del'>-    @h_scroll.grid('row'=&gt;3, 'column'=&gt;0, 'sticky'=&gt;'ew')</div><div class='del'>-  end</div><div class='del'>-  def hide_win_hscr</div><div class='del'>-    @show_each_hscr = false</div><div class='del'>-    @h_scroll.ungrid</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set scrollbar width</div><div class='del'>-  def scrollbarwidth(width)</div><div class='del'>-    @scrbar_width = width</div><div class='del'>-    @v_scroll['width'] = @scrbar_width</div><div class='del'>-    @h_scroll['width'] = @scrbar_width</div><div class='del'>-    @hscr_list.each{|hscr| hscr['width'] = @scrbar_width}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set scrollbar border</div><div class='del'>-  def scrollbarborder(width)</div><div class='del'>-    @scrbar_border = width</div><div class='del'>-    @v_scroll['border'] = @scrbar_border</div><div class='del'>-    @h_scroll['border'] = @scrbar_border</div><div class='del'>-    @hscr_list.each{|hscr| hscr['border'] = @scrbar_border}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set listbox borders</div><div class='del'>-  def listboxborder(width)</div><div class='del'>-    @lbox_border = width</div><div class='del'>-    @lbox_list.each{|w| w['border'] = @lbox_border}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set listbox relief</div><div class='del'>-  def listboxrelief(relief)</div><div class='del'>-    @lbox_list.each{|w| w['relief'] = relief}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title borders</div><div class='del'>-  def titleborder(width)</div><div class='del'>-    @title_border = width</div><div class='del'>-    @f_title_pad['border'] = @title_border</div><div class='del'>-    @title_list.each{|label| label['border'] = @title_border}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title font</div><div class='del'>-  def titlefont(font)</div><div class='del'>-    @title_list.each{|label| label['font'] = font}</div><div class='del'>-    title_height = 0</div><div class='del'>-    @title_list.each{|w| </div><div class='del'>-      h = w.winfo_reqheight</div><div class='del'>-      title_height = h if title_height &lt; h</div><div class='del'>-    }</div><div class='del'>-    @f_title.height title_height</div><div class='del'>-    bbox = @w_title.bbox</div><div class='del'>-    @c_title.height(bbox[3])</div><div class='del'>-    @c_title.scrollregion(bbox)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title foreground color</div><div class='del'>-  def titleforeground(fg)</div><div class='del'>-    @title_list.each{|label| label['foreground'] = fg}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title background color</div><div class='del'>-  def titlebackground(bg)</div><div class='del'>-    @f_title_pad['background'] = bg</div><div class='del'>-    @title_list.each{|label| label['background'] = bg}</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set title cmds</div><div class='del'>-  def titlecommand(idx, cmd=Proc.new)</div><div class='del'>-    @title_cmd[idx] = cmd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # call title cmds</div><div class='del'>-  def titleinvoke(idx)</div><div class='del'>-    @title_cmd[idx].call if @title_cmd[idx]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get label widgets of listbox titles</div><div class='del'>-  def titlelabels(*indices)</div><div class='del'>-    @title_list[*indices]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get listbox widgets</div><div class='del'>-  def columns(*indices)</div><div class='del'>-    @lbox_list[*indices]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def activate(idx)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.activate(idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bbox(idx)</div><div class='del'>-    @lbox_list.collect{|lbox| lbox.bbox(idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(*idx)</div><div class='del'>-    @lbox_list.collect{|lbox| lbox.delete(*idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get(*idx)</div><div class='del'>-    if idx.size == 1</div><div class='del'>-      @lbox_list.collect{|lbox| lbox.get(*idx)}</div><div class='del'>-    else</div><div class='del'>-      list = @lbox_list.collect{|lbox| lbox.get(*idx)}</div><div class='del'>-      result = []</div><div class='del'>-      list[0].each_with_index{|line, index|</div><div class='del'>-        result &lt;&lt; list.collect{|lines| lines[index]}</div><div class='del'>-      }</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _line_array_to_hash(line)</div><div class='del'>-    result = {}</div><div class='del'>-    @name_index.each_pair{|label, indices|</div><div class='del'>-      if indices.size == 1</div><div class='del'>-        result[label] = line[indices[0]]</div><div class='del'>-      else</div><div class='del'>-        result[label] = indices.collect{|index| line[index]}</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-  private :_line_array_to_hash</div><div class='del'>-</div><div class='del'>-  def get_by_hash(*idx)</div><div class='del'>-    get_result = get(*idx)</div><div class='del'>-    if idx.size == 1</div><div class='del'>-      _line_array_to_hash(get_result)</div><div class='del'>-    else</div><div class='del'>-      get_result.collect{|line| _line_array_to_hash(line)}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def insert(idx, *lines)</div><div class='del'>-    lbox_ins = []</div><div class='del'>-    (0..@lbox_list.size).each{lbox_ins &lt;&lt; []}</div><div class='del'>-</div><div class='del'>-    lines.each{|line|</div><div class='del'>-      if line.kind_of? Hash</div><div class='del'>-        array = []</div><div class='del'>-        @name_index.each_pair{|label, indices|</div><div class='del'>-          if indices.size == 1</div><div class='del'>-            array[indices[0]] = line[label]</div><div class='del'>-          else</div><div class='del'>-            if line[label].kind_of? Array</div><div class='del'>-              indices.each_with_index{|index, num| </div><div class='del'>-                array[index] = line[label][num]</div><div class='del'>-              }</div><div class='del'>-            else</div><div class='del'>-              array[indices[0]] = line[label]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        line = array</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @name_index.each_pair{|label, indices|</div><div class='del'>-        if indices.size == 1</div><div class='del'>-          lbox_ins[indices[0]] &lt;&lt; line[indices[0]]</div><div class='del'>-        else</div><div class='del'>-          indices.each{|index| lbox_ins[index] &lt;&lt; line[index]}</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    }   </div><div class='del'>-</div><div class='del'>-    @lbox_list.each_with_index{|lbox, index| </div><div class='del'>-      lbox.insert(idx, *lbox_ins[index]) if lbox_ins[index]</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_anchor(index)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.selection_anchor(index)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_clear(first, last=None)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.selection_clear(first, last=None)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def selection_set(first, last=None)</div><div class='del'>-    @lbox_list.each{|lbox| lbox.selection_set(first, last=None)}</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 reconstruct(height, width)</div><div class='del'>-    if @keep_minsize &amp;&amp; width &lt;= @width_total</div><div class='del'>-      @f_title.width(@width_total)</div><div class='del'>-      @f_lbox.width(@width_total)</div><div class='del'>-      @f_hscr.width(@width_total) if @show_each_hscr</div><div class='del'>-      @window_width = @width_total</div><div class='del'>-    else</div><div class='del'>-      @f_title.width(width)</div><div class='del'>-      @f_lbox.width(width)</div><div class='del'>-      @f_hscr.width(width) if @show_each_hscr</div><div class='del'>-      @window_width = width</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @f_lbox.height(height)</div><div class='del'>-</div><div class='del'>-    @c_title.scrollregion(@w_title.bbox)</div><div class='del'>-    @c_lbox.scrollregion(@w_lbox.bbox)</div><div class='del'>-    @c_hscr.scrollregion(@w_hscr.bbox) if @show_each_hscr</div><div class='del'>-</div><div class='del'>-    (0..(@rel_list.size - 2)).each{|idx|</div><div class='del'>-      title, lbox, hscr = @base_list[idx]</div><div class='del'>-      title.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-      lbox.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-                 'relheight'=&gt;1.0)</div><div class='del'>-      hscr.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx])</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def resize(x)</div><div class='del'>-    idx = @sel_sash</div><div class='del'>-    return if idx == 0</div><div class='del'>-</div><div class='del'>-    # adjustment of relative positioning</div><div class='del'>-    delta = (x - @x) / @frame_width</div><div class='del'>-    if delta &lt; @rel_list[idx-1] - @rel_list[idx] + (2*@sash/@frame_width)</div><div class='del'>-      delta = @rel_list[idx-1] - @rel_list[idx] + (2*@sash/@frame_width)</div><div class='del'>-    elsif delta &gt; @rel_list[idx+1] - @rel_list[idx] - (2*@sash/@frame_width)</div><div class='del'>-      delta = @rel_list[idx+1] - @rel_list[idx] - (2*@sash/@frame_width)</div><div class='del'>-    end</div><div class='del'>-    @rel_list[idx] += delta</div><div class='del'>-</div><div class='del'>-    # adjustment of leftside widget of the sash</div><div class='del'>-    title, lbox, hscr = @base_list[idx - 1]</div><div class='del'>-    title.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1])</div><div class='del'>-    lbox.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1], 'relheight'=&gt;1.0)</div><div class='del'>-    hscr.place('relwidth'=&gt;@rel_list[idx] - @rel_list[idx-1])</div><div class='del'>-</div><div class='del'>-    # adjustment of rightside widget of the sash</div><div class='del'>-    title, lbox, hscr = @base_list[idx]</div><div class='del'>-    title.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-                'relx'=&gt;@rel_list[idx])</div><div class='del'>-    lbox.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-               'relx'=&gt;@rel_list[idx], 'relheight'=&gt;1.0)</div><div class='del'>-    hscr.place('relwidth'=&gt;@rel_list[idx+1] - @rel_list[idx], </div><div class='del'>-               'relx'=&gt;@rel_list[idx])</div><div class='del'>-</div><div class='del'>-    # update reference position</div><div class='del'>-    @x = x</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def motion_cb(w, x, idx)</div><div class='del'>-    if x &lt;= @sash &amp;&amp; idx &gt; 0</div><div class='del'>-      w.cursor 'sb_h_double_arrow'</div><div class='del'>-      @mode = :sash</div><div class='del'>-      @sel_sash = idx</div><div class='del'>-    elsif x &gt;= w.winfo_width - @sash &amp;&amp; idx &lt; @lbox_total - 1</div><div class='del'>-      w.cursor 'sb_h_double_arrow'</div><div class='del'>-      @mode = :sash</div><div class='del'>-      @sel_sash = idx + 1</div><div class='del'>-    else</div><div class='del'>-      w.cursor ""</div><div class='del'>-      @mode = :title</div><div class='del'>-      @sel_sash = 0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def title_binding(title, index)</div><div class='del'>-    title.bind('Motion', proc{|w, x, idx| motion_cb(w, x, idx.to_i)}, </div><div class='del'>-               "%W %x #{index}")</div><div class='del'>-</div><div class='del'>-    title.bind('Enter', proc{|w, x, idx| motion_cb(w, x, idx.to_i)}, </div><div class='del'>-               "%W %x #{index}")</div><div class='del'>-</div><div class='del'>-    title.bind('Leave', proc{|w| w.cursor ""}, "%W")</div><div class='del'>-</div><div class='del'>-    title.bind('Button-1', </div><div class='del'>-               proc{|w, x| </div><div class='del'>-                 if @mode == :sash</div><div class='del'>-                   @x = x</div><div class='del'>-                   @frame_width = TkWinfo.width(@f_title).to_f</div><div class='del'>-                 else</div><div class='del'>-                   title.relief 'sunken'</div><div class='del'>-                 end</div><div class='del'>-               }, </div><div class='del'>-               '%W %X')</div><div class='del'>-</div><div class='del'>-    title.bind('ButtonRelease-1', </div><div class='del'>-               proc{|w, x, idx| </div><div class='del'>-                 i = idx.to_i</div><div class='del'>-                 if @mode == :title &amp;&amp; @title_cmd[i].kind_of?(Proc)</div><div class='del'>-                   @title_cmd[i].call</div><div class='del'>-                 end</div><div class='del'>-                 title.relief 'raised'</div><div class='del'>-                 motion_cb(w,x,i)</div><div class='del'>-               }, </div><div class='del'>-               "%W %x #{index}")</div><div class='del'>-</div><div class='del'>-    title.bind('B1-Motion', proc{|x| resize(x) if @mode == :sash}, "%X")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #################################</div><div class='del'>-  def browse_mode_bindtag</div><div class='del'>-    t = TkBindTag.new</div><div class='del'>-    t.bind('Button-1', </div><div class='del'>-           proc{|w, y| w.focus; select_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('B1-Motion', proc{|w, y| select_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Shift-Button-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Key-Up', proc{|w| select_shift(w, -1)}, '%W')</div><div class='del'>-    t.bind('Key-Down', proc{|w| select_shift(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Home', proc{|w| select_line(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-End', proc{|w| select_line(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('space', proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Select', proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Control-slash', </div><div class='del'>-           proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-</div><div class='del'>-    t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def single_mode_bindtag</div><div class='del'>-    t = TkBindTag.new</div><div class='del'>-    t.bind('Button-1', </div><div class='del'>-           proc{|w, y| w.focus; select_only(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('ButtonRelease-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Shift-Button-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Key-Up', proc{|w| select_shift(w, -1)}, '%W')</div><div class='del'>-    t.bind('Key-Down', proc{|w| select_shift(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Home', proc{|w| select_line(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-End', proc{|w| select_line(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('space', proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Select', proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Control-slash', </div><div class='del'>-           proc{|w| select_line(w, w.index('active').to_i)}, '%W')</div><div class='del'>-    t.bind('Control-backslash', </div><div class='del'>-           proc{@lbox_list.each{|l| l.selection_clear(0, 'end')}})</div><div class='del'>-</div><div class='del'>-    t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def extended_mode_bindtag</div><div class='del'>-    t = TkBindTag.new</div><div class='del'>-    t.bind('Button-1', </div><div class='del'>-           proc{|w, y| w.focus; select_only(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('B1-Motion', proc{|w, y| select_range(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('ButtonRelease-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Shift-Button-1', </div><div class='del'>-           proc{|w, y| select_range(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('Shift-B1-Motion', </div><div class='del'>-           proc{|w, y| select_range(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Button-1', </div><div class='del'>-           proc{|w, y| select_toggle(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-B1-Motion', </div><div class='del'>-           proc{|w, y| select_drag(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Key-Up', proc{|w| active_shift(w, -1)}, '%W')</div><div class='del'>-    t.bind('Key-Down', proc{|w| active_shift(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Shift-Up', proc{|w| select_expand(w, -1)}, '%W')</div><div class='del'>-    t.bind('Shift-Down', proc{|w| select_expand(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Home', proc{|w| select_line2(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-End', proc{|w| select_line2(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Shift-Home', proc{|w| select_range(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-Shift-End', proc{|w| select_range(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('space', proc{|w| select_active(w)}, '%W')</div><div class='del'>-    t.bind('Select', proc{|w| select_active(w)}, '%W')</div><div class='del'>-    t.bind('Control-slash', proc{|w| select_all}, '%W')</div><div class='del'>-    t.bind('Control-backslash', proc{|w| clear_all}, '%W')</div><div class='del'>-</div><div class='del'>-    t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def multiple_mode_bindtag</div><div class='del'>-    t = TkBindTag.new</div><div class='del'>-    t.bind('Button-1', </div><div class='del'>-           proc{|w, y| w.focus; select_line3(w, w.nearest(y))}, '%W %y')</div><div class='del'>-    t.bind('ButtonRelease-1', </div><div class='del'>-           proc{|w, y| active_line(w, w.nearest(y))}, '%W %y')</div><div class='del'>-</div><div class='del'>-    t.bind('Key-Up', proc{|w| active_shift(w, -1)}, '%W')</div><div class='del'>-    t.bind('Key-Down', proc{|w| active_shift(w, 1)}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Home', proc{|w| select_line2(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-End', proc{|w| select_line2(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('Control-Shift-Home', proc{|w| active_line(w, 0)}, '%W')</div><div class='del'>-    t.bind('Control-Shift-End', proc{|w| active_line(w, 'end')}, '%W')</div><div class='del'>-</div><div class='del'>-    t.bind('space', proc{|w| select_active(w)}, '%W')</div><div class='del'>-    t.bind('Select', proc{|w| select_active(w)}, '%W')</div><div class='del'>-    t.bind('Control-slash', proc{|w| select_all}, '%W')</div><div class='del'>-    t.bind('Control-backslash', proc{|w| clear_all}, '%W')</div><div class='del'>-</div><div class='del'>-    t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################</div><div class='del'>-  def active_line(w, idx)</div><div class='del'>-    @lbox_list.each{|l| l.activate(idx)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_only(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      l.selection_set('anchor')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_range(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-      l.selection_set('anchor', idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_toggle(w, idx)</div><div class='del'>-    st = w.selection_includes(idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      if st == 1</div><div class='del'>-        l.selection_clear(idx)</div><div class='del'>-      else</div><div class='del'>-        l.selection_set(idx)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_drag(w, idx)</div><div class='del'>-    st = w.selection_includes('anchor')</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      if st == 1</div><div class='del'>-        l.selection_set('anchor', idx)</div><div class='del'>-      else</div><div class='del'>-        l.selection_clear('anchor', idx)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_line(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      l.selection_set('anchor')</div><div class='del'>-    }</div><div class='del'>-    w.selection_set('anchor')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_line2(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      l.selection_set('anchor')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_line3(w, idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_set(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_active(w)</div><div class='del'>-    idx = l.activate(idx)</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_set(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_expand(w, dir)</div><div class='del'>-    idx = w.index('active').to_i + dir</div><div class='del'>-    if idx &lt; 0</div><div class='del'>-      idx = 0</div><div class='del'>-    elsif idx &gt;= w.size</div><div class='del'>-      idx = w.size - 1</div><div class='del'>-    end</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_set(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def active_shift(w, dir)</div><div class='del'>-    idx = w.index('active').to_i + dir</div><div class='del'>-    if idx &lt; 0</div><div class='del'>-      idx = 0</div><div class='del'>-    elsif idx &gt;= w.size</div><div class='del'>-      idx = w.size - 1</div><div class='del'>-    end</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_shift(w, dir)</div><div class='del'>-    idx = w.index('anchor').to_i + dir</div><div class='del'>-    if idx &lt; 0</div><div class='del'>-      idx = 0</div><div class='del'>-    elsif idx &gt;= w.size</div><div class='del'>-      idx = w.size - 1</div><div class='del'>-    end</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-      l.activate(idx)</div><div class='del'>-      l.selection_anchor(idx)</div><div class='del'>-      l.selection_set('anchor')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def select_all</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_set(0, 'end')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_all</div><div class='del'>-    @lbox_list.each{|l|</div><div class='del'>-      l.selection_clear(0, 'end')</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def focus_shift(w, dir)</div><div class='del'>-    idx = @lbox_list.index(w) + dir</div><div class='del'>-    return if idx &lt; 0</div><div class='del'>-    return if idx &gt;= @lbox_list.size</div><div class='del'>-    @lbox_list[idx].focus</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'>-# test</div><div class='del'>-################################################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  l = TkMultiListFrame.new(nil, 200, </div><div class='del'>-                           [ ['L1', 200, proc{p 'click L1'}], </div><div class='del'>-                             ['L2', 100], </div><div class='del'>-                             ['L3', 200] ], </div><div class='del'>-                           'width'=&gt;350, </div><div class='del'>-                           #'titleforeground'=&gt;'yellow', </div><div class='del'>-                           'titleforeground'=&gt;'white', </div><div class='del'>-                           #'titlebackground'=&gt;'navy',</div><div class='del'>-                           'titlebackground'=&gt;'blue',</div><div class='del'>-                           'titlefont'=&gt;'courier'</div><div class='del'>-                           ).pack('fill'=&gt;'both', 'expand'=&gt;true)</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', </div><div class='del'>-                   'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',</div><div class='del'>-                   'cccccccccccccccccccccccccccccccccccccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  l.insert('end', ['aaaaaaaaaaaaaaa','bbbbbbbbbbbbbb','ccccccccccccccccc'])</div><div class='del'>-  l.insert('end', [1,2,3])</div><div class='del'>-  l.insert('end', [4,5,6], [4,5,6])</div><div class='del'>-  p l.columns(1)</div><div class='del'>-  p l.columns(1..3)</div><div class='del'>-  p l.columns(1,2)</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tkoptdb-safeTk.rb b/ext/tk/sample/tkoptdb-safeTk.rb<br/>deleted file mode 100644<br/>index a06098323f..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkoptdb-safeTk.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkoptdb-safeTk.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-</div><div class='del'>-require 'multi-tk'</div><div class='del'>-</div><div class='del'>-TkMessage.new(:text =&gt; &lt;&lt;EOM).pack</div><div class='del'>-This is a sample of the safe-Tk slave interpreter. \</div><div class='del'>-On the slave interpreter, 'tkoptdb.rb' demo is running.</div><div class='del'>-( NOTE:: a safe-Tk interpreter can't read options \</div><div class='del'>-from a file. Options are given by the master interpreter \</div><div class='del'>-in this script. )</div><div class='del'>-The window shown this message is a root widget of \</div><div class='del'>-the default master interpreter. The other window \</div><div class='del'>-is a toplevel widget of the master interpreter, and it \</div><div class='del'>-has a container frame of the safe-Tk slave interpreter.</div><div class='del'>-'exit' on the slave interpreter exits the slave only. \</div><div class='del'>-You can also delete the slave by the button on the toplevel widget.</div><div class='del'>-EOM</div><div class='del'>-</div><div class='del'>-if ENV['LANG'] =~ /^ja/</div><div class='del'>-  # read Japanese resource</div><div class='del'>-  ent = TkOptionDB.read_entries(File.expand_path('resource.ja', </div><div class='del'>-                                                 File.dirname(__FILE__)),</div><div class='del'>-                                'euc-jp')</div><div class='del'>-else</div><div class='del'>-  # read English resource</div><div class='del'>-  ent = TkOptionDB.read_entries(File.expand_path('resource.en', </div><div class='del'>-                                                File.dirname(__FILE__)))</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-file = File.expand_path('tkoptdb.rb', File.dirname(__FILE__))</div><div class='del'>-</div><div class='del'>-ip = MultiTkIp.new_safeTk{</div><div class='del'>-  # When a block is given to 'new_safeTk' method, </div><div class='del'>-  # the block is evaluated on $SAFE==4.</div><div class='del'>-  ent.each{|pat, val| Tk.tk_call('option', 'add', pat, val)}</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-print "ip.eval_proc{$SAFE} ==&gt; ", ip.eval_proc{$SAFE}, "\n"</div><div class='del'>-</div><div class='del'>-print "\ncall 'ip.wait_on_mainloop = false'\n"</div><div class='del'>-print "If 'ip.wait_on_mainloop? == true', ", </div><div class='del'>-  "when 'mainloop' is called on 'ip.eval_proc', ", </div><div class='del'>-  "'ip.eval_proc' does't return while the root window exists.\n", </div><div class='del'>-  "If you want to avoid that, set wait_on_mainloop to false. ", </div><div class='del'>-  "Then the mainloop in the eval_proc returns soon ", </div><div class='del'>-  "and the following steps are evaluated. \n", </div><div class='del'>-  "If you hate the both of them, use 'ip.bg_eval_proc' or ", </div><div class='del'>-  "wrap 'ip.eval_proc' by a thread.\n"</div><div class='del'>-</div><div class='del'>-ip.wait_on_mainloop = false</div><div class='del'>-</div><div class='del'>-ret = ip.eval_proc{</div><div class='del'>-  # When a block is given to 'eval_proc' method, </div><div class='del'>-  # the block is evaluated on the IP's current safe level.</div><div class='del'>-  # So, the followings raises an exception. </div><div class='del'>-  # An Exception object of the exception is returned as a </div><div class='del'>-  # return value of this method.</div><div class='del'>-</div><div class='del'>-  load file</div><div class='del'>-}</div><div class='del'>-print "\nip.eval_proc{}, which includes insecure operiation in the given block, returns an exception object: ", ret.inspect, "\n"</div><div class='del'>-</div><div class='del'>-print "If a proc object is given, the proc is evaluated on the safe-level which is kept on the proc :: ip.eval_proc( proc{$SAFE} ) ==&gt; ", ip.eval_proc(proc{$SAFE}), "\n"</div><div class='del'>-</div><div class='del'>-safe0_cmd = Proc.new{</div><div class='del'>-  print 'safe0_cmd safe-level == ', $SAFE, "\n"</div><div class='del'>-  # This proc object keeps current safe-level ($SAFE==0). </div><div class='del'>-  load file</div><div class='del'>-}</div><div class='del'>-ip.eval_proc{safe0_cmd.call}</div><div class='del'>-</div><div class='del'>-# Tk.mainloop is ignored on the slave-IP</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkoptdb.rb b/ext/tk/sample/tkoptdb.rb<br/>deleted file mode 100644<br/>index 47784ea238..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkoptdb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkoptdb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,106 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#  sample script of TkOptionDB</div><div class='del'>-#</div><div class='del'>-#  If 'LANG' environment variable's value is started by 'ja',  </div><div class='del'>-#  then read Japanese resource data and display Japanese button text. </div><div class='del'>-#  In other case, read English resource data and display English text. </div><div class='del'>-#</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0 || !TkCore::INTERP.safe?</div><div class='del'>-  if ENV['LANG'] =~ /^ja/</div><div class='del'>-    # read Japanese resource</div><div class='del'>-    TkOptionDB.read_with_encoding(File.expand_path('resource.ja', </div><div class='del'>-                                                   File.dirname(__FILE__)), </div><div class='del'>-                                  'euc-jp')</div><div class='del'>-  else</div><div class='del'>-    # read English resource</div><div class='del'>-    TkOptionDB.readfile(File.expand_path('resource.en', </div><div class='del'>-                                         File.dirname(__FILE__)))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# 'show_msg' and 'bye_msg' procedures can be defined on BTN_CMD resource.</div><div class='del'>-# Those procedures are called under $SAFE==2</div><div class='del'>-cmd = TkOptionDB.new_proc_class(:BTN_CMD, [:show_msg, :bye_msg], 3) {</div><div class='del'>-  # If you want to check resource string (str), </div><div class='del'>-  # please define __check_proc_string__(str) like this.</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-    def __check_proc_string__(str)</div><div class='del'>-      print "($SAFE=#{$SAFE} &gt;&gt;&gt;) check!! str.tainted?::#{str.tainted?}"</div><div class='del'>-      str.untaint</div><div class='del'>-      print "==&gt;#{str.tainted?} (&lt;&lt;&lt; $SAFE=#{$SAFE}): "</div><div class='del'>-      str</div><div class='del'>-    end</div><div class='del'>-    private :__check_proc_string__</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# following two frame widgets use same database entry</div><div class='del'>-TkFrame.new(:class=&gt;'BtnFrame'){|f|</div><div class='del'>-  pack(:padx=&gt;5, :pady=&gt;5)</div><div class='del'>-  TkButton.new(:parent=&gt;f, :widgetname=&gt;'hello'){ </div><div class='del'>-    command proc{</div><div class='del'>-      print "($SAFE=#{$SAFE} &gt;&gt;&gt;) : "</div><div class='del'>-      cmd.show_msg(TkOptionDB.inspect)</div><div class='del'>-      print "(&lt;&lt;&lt; $SAFE=#{$SAFE})"</div><div class='del'>-    } </div><div class='del'>-    pack(:fill=&gt;:x, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(:command=&gt;proc{</div><div class='del'>-                 print "($SAFE=#{$SAFE} &gt;&gt;&gt;) : "</div><div class='del'>-                 cmd.bye_msg</div><div class='del'>-                 print "(&lt;&lt;&lt; $SAFE=#{$SAFE} ) : "</div><div class='del'>-                 exit</div><div class='del'>-               }, </div><div class='del'>-               :parent=&gt;f, :widgetname=&gt;'quit'){</div><div class='del'>-    pack(:fill=&gt;:x, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-class BtnFrame &lt; TkFrame; end</div><div class='del'>-BtnFrame.new{|f|</div><div class='del'>-  pack(:padx=&gt;5, :pady=&gt;5)</div><div class='del'>-  TkButton.new(:parent=&gt;f, :widgetname=&gt;'hello'){ </div><div class='del'>-    command proc{</div><div class='del'>-      print "($SAFE=#{$SAFE} &gt;&gt;&gt;) : "</div><div class='del'>-      cmd.show_msg(TkOptionDB.inspect)</div><div class='del'>-      print "(&lt;&lt;&lt; $SAFE=#{$SAFE})"</div><div class='del'>-    } </div><div class='del'>-    pack(:fill=&gt;:x, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(:command=&gt;proc{</div><div class='del'>-                 print "($SAFE=#{$SAFE} &gt;&gt;&gt;) : "</div><div class='del'>-                 cmd.bye_msg</div><div class='del'>-                 print "(&lt;&lt;&lt; $SAFE=#{$SAFE})"</div><div class='del'>-                 exit</div><div class='del'>-               }, </div><div class='del'>-               :parent=&gt;f, :widgetname=&gt;'quit'){</div><div class='del'>-    pack(:fill=&gt;:x, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# if unknown class, use default option values</div><div class='del'>-TkFrame.new(:class=&gt;'BtnFrame2'){|f|</div><div class='del'>-  pack(:padx=&gt;5, :pady=&gt;5)</div><div class='del'>-  TkButton.new(:parent=&gt;f, :widgetname=&gt;'hello'){ </div><div class='del'>-    command proc{</div><div class='del'>-      print "($SAFE=#{$SAFE} &gt;&gt;&gt;) : "</div><div class='del'>-      cmd.show_msg(TkOptionDB.inspect)</div><div class='del'>-      print "(&lt;&lt;&lt; $SAFE=#{$SAFE})"</div><div class='del'>-    } </div><div class='del'>-    pack(:fill=&gt;:x, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-  }</div><div class='del'>-  TkButton.new(:command=&gt;proc{</div><div class='del'>-                 print "($SAFE=#{$SAFE} &gt;&gt;&gt;) : "</div><div class='del'>-                 cmd.bye_msg</div><div class='del'>-                 print "(&lt;&lt;&lt; $SAFE=#{$SAFE})"</div><div class='del'>-                 exit</div><div class='del'>-               }, </div><div class='del'>-               :parent=&gt;f, :widgetname=&gt;'quit'){</div><div class='del'>-    pack(:fill=&gt;:x, :padx=&gt;10, :pady=&gt;10)</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tkrttimer.rb b/ext/tk/sample/tkrttimer.rb<br/>deleted file mode 100644<br/>index 0abd4ecbd2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tkrttimer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tkrttimer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,77 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# This script is a re-implementation of tktimer.rb with TkTimer(TkAfter) class.</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-root = TkRoot.new(:title=&gt;'realtime timer sample')</div><div class='del'>-</div><div class='del'>-f1 = TkFrame.new(:borderwidth=&gt;2, :relief=&gt;:ridge)</div><div class='del'>-f1.pack(:side=&gt;:bottom, :fill=&gt;:both)</div><div class='del'>-TkLabel.new(f1, :text=&gt;'use TkTimer (TkAfter) class').pack(:anchor=&gt;:center)</div><div class='del'>-label1 = TkLabel.new(:parent=&gt;f1, :relief=&gt;:raised, </div><div class='del'>-                     :width=&gt;10).pack(:fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-f2 = TkFrame.new(:borderwidth=&gt;2, :relief=&gt;:ridge)</div><div class='del'>-f2.pack(:side=&gt;:bottom, :fill=&gt;:both)</div><div class='del'>-TkLabel.new(f2, :text=&gt;'use TkRTTimer class').pack</div><div class='del'>-label2 = TkLabel.new(:parent=&gt;f2, :relief=&gt;:raised, </div><div class='del'>-                     :width=&gt;10).pack(:fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-TkLabel.new(:padx=&gt;10, :pady=&gt;5, :justify=&gt;'left', :text=&gt;&lt;&lt;EOT).pack</div><div class='del'>-Interval setting of each timer object is 10 ms.</div><div class='del'>-Each timer object counts up the value on each callback</div><div class='del'>-(the value is not the clock data).</div><div class='del'>-The count of the TkTimer object is delayed by execution </div><div class='del'>-time of callbacks and inaccuracy of interval.</div><div class='del'>-On the other hand, the count of the TkRTTimer object is </div><div class='del'>-not delayed. Its callback interval is not accurate too. </div><div class='del'>-But it can compute error correction about the time when </div><div class='del'>-a callback should start.</div><div class='del'>-EOT</div><div class='del'>-</div><div class='del'>-# define the procedure repeated by the TkTimer object</div><div class='del'>-tick = proc{|aobj| #&lt;== TkTimer object</div><div class='del'>-  cnt = aobj.return_value + 1  # return_value keeps a result of the last proc</div><div class='del'>-  label = aobj.current_args[0]</div><div class='del'>-  label.text format("%d.%02d", *(cnt.divmod(100)))</div><div class='del'>-  cnt #==&gt; return value is kept by TkTimer object</div><div class='del'>-      #    (so, can be send to the next repeat-proc)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-timer1 = TkTimer.new(10, -1, [tick, label1])    # 10 ms interval</div><div class='del'>-timer2 = TkRTTimer.new(10, -1, [tick, label2])  # 10 ms interval</div><div class='del'>-</div><div class='del'>-timer1.start(0, proc{ label1.text('0.00'); 0 })</div><div class='del'>-timer2.start(0, proc{ label2.text('0.00'); 0 })</div><div class='del'>-</div><div class='del'>-b_start = TkButton.new(:text=&gt;'Start', :state=&gt;:disabled) {</div><div class='del'>-  pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-b_stop  = TkButton.new(:text=&gt;'Stop', :state=&gt;:normal) {</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'>-b_start.command {</div><div class='del'>-  timer1.continue</div><div class='del'>-  timer2.continue</div><div class='del'>-  b_stop.state(:normal)</div><div class='del'>-  b_start.state(:disabled)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-b_stop.command {</div><div class='del'>-  timer1.stop</div><div class='del'>-  timer2.stop</div><div class='del'>-  b_start.state(:normal)</div><div class='del'>-  b_stop.state(:disabled)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'Reset', :state=&gt;:normal) {</div><div class='del'>-  command { timer1.reset; timer2.reset }</div><div class='del'>-  pack(:side=&gt;:right, :fill=&gt;:both, :expand=&gt;:yes)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-ev_quit = TkVirtualEvent.new('Control-c', 'Control-q')</div><div class='del'>-Tk.root.bind(ev_quit, proc{Tk.exit}).focus</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tksleep_sample.rb b/ext/tk/sample/tksleep_sample.rb<br/>deleted file mode 100644<br/>index 23f6eca54e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tksleep_sample.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tksleep_sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,29 +0,0 @@</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-v = TkVariable.new(0)</div><div class='del'>-l = TkLabel.new(:textvariable=&gt;v).pack(:pady=&gt;[1, 10])</div><div class='del'>-</div><div class='del'>-a = TkButton.new(:text=&gt;"button A :: proc{p ['AAA', v.value]}").pack(:fill=&gt;:x, :pady=&gt;[1, 15], :padx=&gt;15)</div><div class='del'>-a.command{p ['AAA', v.value]}</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;'Callback of the button B returns LIFO order').pack</div><div class='del'>-b = TkButton.new(:text=&gt;"button B :: proc{n = v.value; p ['B:start', n]; Tk.sleep(10000); p ['B:end', n]}").pack(:fill=&gt;:x, :pady=&gt;[1, 15], :padx=&gt;15)</div><div class='del'>-b.command{n = v.value; p ['B:start', n]; Tk.sleep(10000); p ['B:end', n]}</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;'Callback of the button C returns FIFO order').pack</div><div class='del'>-c = TkButton.new(:text=&gt;"button C :: proc{n = v.value; Thread.new{p ['C:start', n]; Tk.sleep(10000); p ['C:end', n]}}").pack(:fill=&gt;:x, :pady=&gt;[1, 15], :padx=&gt;15)</div><div class='del'>-c.command{n = v.value; Thread.new{p ['C:start', n]; Tk.sleep(10000); p ['C:end', n]}}</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;'Callback of the button D blocks eventloop (no respond to event)').pack</div><div class='del'>-d = TkButton.new(:text=&gt;"button D :: proc{n = v.value; p ['D:start', n]; sleep(10); p ['D:end', n]}").pack(:fill=&gt;:x, :pady=&gt;[1,15], :padx=&gt;15)</div><div class='del'>-d.command{n = v.value; p ['D:start', n]; sleep(10); p ['D:end', n]}</div><div class='del'>-</div><div class='del'>-TkLabel.new(:text=&gt;'Callback of the button E is another way to avoid eventloop blocking').pack</div><div class='del'>-e = TkButton.new(:text=&gt;"button E :: proc{n = v.value; Thread.new{p ['D:start', n]; sleep(10); p ['D:end', n]}}").pack(:fill=&gt;:x, :pady=&gt;[1,15], :padx=&gt;15)</div><div class='del'>-e.command{n = v.value; Thread.new{p ['D:start', n]; sleep(10); p ['D:end', n]}}</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'QUIT', :command=&gt;proc{exit}).pack</div><div class='del'>-</div><div class='del'>-TkTimer.new(500, -1){v.numeric += 1}.start</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tktextframe.rb b/ext/tk/sample/tktextframe.rb<br/>deleted file mode 100644<br/>index bdab057d34..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tktextframe.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktextframe.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,162 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  tktextframe.rb : a sample of TkComposite</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 TkTextFrame &lt; TkText</div><div class='del'>-  include TkComposite</div><div class='del'>-</div><div class='del'>-  def initialize_composite(keys={})</div><div class='del'>-    keys = _symbolkey2str(keys)</div><div class='del'>-</div><div class='del'>-    # create scrollbars</div><div class='del'>-    @v_scroll = TkScrollbar.new(@frame, 'orient'=&gt;'vertical')</div><div class='del'>-    @h_scroll = TkScrollbar.new(@frame, 'orient'=&gt;'horizontal')</div><div class='del'>-</div><div class='del'>-    # create a text widget</div><div class='del'>-    @text = TkText.new(@frame, 'wrap'=&gt;'none')</div><div class='del'>-</div><div class='del'>-    # set default receiver of method calls</div><div class='del'>-    @path = @text.path</div><div class='del'>-</div><div class='del'>-    # assign scrollbars</div><div class='del'>-    @text.xscrollbar(@h_scroll)</div><div class='del'>-    @text.yscrollbar(@v_scroll)</div><div class='del'>-</div><div class='del'>-    # allignment</div><div class='del'>-    TkGrid.rowconfigure(@frame, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-    TkGrid.columnconfigure(@frame, 0, 'weight'=&gt;1, 'minsize'=&gt;0)</div><div class='del'>-    @text.grid('row'=&gt;0, 'column'=&gt;0, 'sticky'=&gt;'news')</div><div class='del'>-</div><div class='del'>-    # scrollbars ON</div><div class='del'>-    vscroll(keys.delete('vscroll'){true})</div><div class='del'>-    hscroll(keys.delete('hscroll'){true})</div><div class='del'>-</div><div class='del'>-    # set background of the text widget</div><div class='del'>-=begin</div><div class='del'>-    color = keys.delete('textbackground')</div><div class='del'>-    textbackground(color) if color</div><div class='del'>-=end</div><div class='del'>-    # please check the differences of the following definitions</div><div class='del'>-    option_methods(</div><div class='del'>-       [:scrollbarwidth, :get_scrollbarwidth], </div><div class='del'>-       [:textbackground, nil, :textbg_info], </div><div class='del'>-       :textborderwidth, </div><div class='del'>-       :textrelief</div><div class='del'>-    )</div><div class='del'>-</div><div class='del'>-    # set receiver widgets for configure methods (with alias)</div><div class='del'>-    delegate_alias('scrollbarrelief', 'relief', @h_scroll, @v_scroll)</div><div class='del'>-</div><div class='del'>-    # set receiver widgets for configure methods</div><div class='del'>-    delegate('DEFAULT', @text)</div><div class='del'>-    delegate('background', @frame, @h_scroll, @v_scroll)</div><div class='del'>-    delegate('activebackground', @h_scroll, @v_scroll)</div><div class='del'>-    delegate('troughcolor', @h_scroll, @v_scroll)</div><div class='del'>-    delegate('repeatdelay', @h_scroll, @v_scroll)</div><div class='del'>-    delegate('repeatinterval', @h_scroll, @v_scroll)</div><div class='del'>-    delegate('borderwidth', @frame)</div><div class='del'>-    delegate('relief', @frame)</div><div class='del'>-</div><div class='del'>-    # do configure</div><div class='del'>-    configure keys unless keys.empty?</div><div class='del'>-  end</div><div class='del'>-  private :initialize_composite</div><div class='del'>-</div><div class='del'>-  # set background color of text widget</div><div class='del'>-  def textbackground(color = nil)</div><div class='del'>-    if color</div><div class='del'>-      @text.background(color)</div><div class='del'>-    else</div><div class='del'>-      @text.background</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def textbg_info</div><div class='del'>-    info = @text.configinfo(:background)</div><div class='del'>-    if TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      info[0] = 'textbackground'</div><div class='del'>-      info</div><div class='del'>-    else # ! TkComm::GET_CONFIGINFO_AS_ARRAY</div><div class='del'>-      {'textbackground' =&gt; info['background']}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get/set borderwidth of text widget</div><div class='del'>-  def set_textborderwidth(width)</div><div class='del'>-    @text.borderwidth(width)</div><div class='del'>-  end</div><div class='del'>-  def get_textborderwidth</div><div class='del'>-    @text.borderwidth</div><div class='del'>-  end</div><div class='del'>-  def textborderwidth(width = nil)</div><div class='del'>-    if width</div><div class='del'>-      set_textborderwidth(width)</div><div class='del'>-    else</div><div class='del'>-      get_textborderwidth</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # set relief of text widget</div><div class='del'>-  def textrelief(type)</div><div class='del'>-    @text.relief(type)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # get/set width of scrollbar</div><div class='del'>-  def get_scrollbarwidth</div><div class='del'>-    @v_scroll.width</div><div class='del'>-  end</div><div class='del'>-  def set_scrollbarwidth(width)</div><div class='del'>-    @v_scroll.width(width)</div><div class='del'>-    @h_scroll.width(width)</div><div class='del'>-  end</div><div class='del'>-  alias :scrollbarwidth :set_scrollbarwidth</div><div class='del'>-</div><div class='del'>-  # vertical scrollbar : ON/OFF</div><div class='del'>-  def vscroll(mode)</div><div class='del'>-    st = TkGrid.info(@v_scroll)</div><div class='del'>-    if mode &amp;&amp; st.size == 0 then</div><div class='del'>-      @v_scroll.grid('row'=&gt;0, 'column'=&gt;1, 'sticky'=&gt;'ns')</div><div class='del'>-    elsif !mode &amp;&amp; st.size != 0 then</div><div class='del'>-      @v_scroll.ungrid</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # horizontal scrollbar : ON/OFF</div><div class='del'>-  def hscroll(mode, wrap_mode="char")</div><div class='del'>-    st = TkGrid.info(@h_scroll)</div><div class='del'>-    if mode &amp;&amp; st.size == 0 then</div><div class='del'>-      @h_scroll.grid('row'=&gt;1, 'column'=&gt;0, 'sticky'=&gt;'ew')</div><div class='del'>-      wrap 'none'  # =&gt; self.wrap('none')</div><div class='del'>-    elsif !mode &amp;&amp; st.size != 0 then</div><div class='del'>-      @h_scroll.ungrid</div><div class='del'>-      wrap wrap_mode  # =&gt; self.wrap(wrap_mode)</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'>-</div><div class='del'>-################################################</div><div class='del'>-# test</div><div class='del'>-################################################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  f = TkFrame.new.pack('fill'=&gt;'x')</div><div class='del'>-  #t = TkTextFrame.new.pack</div><div class='del'>-  t = TkTextFrame.new(:textborderwidth=&gt;3, </div><div class='del'>-                      :textrelief=&gt;:ridge, </div><div class='del'>-                      :scrollbarrelief=&gt;:ridge).pack</div><div class='del'>-  p t.configinfo</div><div class='del'>-  TkButton.new(f, 'text'=&gt;'vscr OFF', </div><div class='del'>-               'command'=&gt;proc{t.vscroll(false)}).pack('side'=&gt;'right')</div><div class='del'>-  TkButton.new(f, 'text'=&gt;'vscr ON', </div><div class='del'>-               'command'=&gt;proc{t.vscroll(true)}).pack('side'=&gt;'right')</div><div class='del'>-  TkButton.new(f, 'text'=&gt;'hscr ON', </div><div class='del'>-               'command'=&gt;proc{t.hscroll(true)}).pack('side'=&gt;'left')</div><div class='del'>-  TkButton.new(f, 'text'=&gt;'hscr OFF', </div><div class='del'>-               'command'=&gt;proc{t.hscroll(false)}).pack('side'=&gt;'left')</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tktextio.rb b/ext/tk/sample/tktextio.rb<br/>deleted file mode 100644<br/>index 9f012feada..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tktextio.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktextio.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1060 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#  TkTextIO class :: handling I/O stream on a TkText widget</div><div class='del'>-#                             by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-#  NOTE: TkTextIO supports 'character' (not 'byte') access only. </div><div class='del'>-#        So, for example, TkTextIO#getc returns a character, TkTextIO#pos </div><div class='del'>-#        means the character position, TkTextIO#read(size) counts by </div><div class='del'>-#        characters, and so on.</div><div class='del'>-#        Of course, it is available to make TkTextIO class to suuport </div><div class='del'>-#        'byte' access. However, it may break multi-byte characters. </div><div class='del'>-#        and then, displayed string on the text widget may be garbled.</div><div class='del'>-#        I think that it is not good on the supposed situation of using </div><div class='del'>-#        TkTextIO. </div><div class='del'>-#</div><div class='del'>-require 'tk'</div><div class='del'>-require 'tk/text'</div><div class='del'>-require 'tk/textmark'</div><div class='del'>-require 'thread'</div><div class='del'>-</div><div class='del'>-class TkTextIO &lt; TkText</div><div class='del'>-  # keep safe level</div><div class='del'>-  @@create_queues = proc{ [Queue.new, Mutex.new, Queue.new, Mutex.new] }</div><div class='del'>-</div><div class='del'>-  OPT_DEFAULTS = {</div><div class='del'>-    'mode'       =&gt; nil,</div><div class='del'>-    'overwrite'  =&gt; false, </div><div class='del'>-    'text'       =&gt; nil, </div><div class='del'>-    'show'       =&gt; :pos, </div><div class='del'>-    'wrap'       =&gt; 'char', </div><div class='del'>-    'sync'       =&gt; true, </div><div class='del'>-    'prompt'     =&gt; nil, </div><div class='del'>-    'prompt_cmd' =&gt; nil, </div><div class='del'>-    'hist_size'  =&gt; 1000, </div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    opts = _get_io_params((keys.kind_of?(Hash))? keys: {})</div><div class='del'>-</div><div class='del'>-    super(keys)</div><div class='del'>-</div><div class='del'>-    @count_var = TkVariable.new</div><div class='del'>-</div><div class='del'>-    @write_buffer = ''</div><div class='del'>-    @read_buffer  = ''</div><div class='del'>-    @buf_size = 0</div><div class='del'>-    @buf_max = 1024</div><div class='del'>-</div><div class='del'>-    @write_buf_queue, @write_buf_mutex, </div><div class='del'>-    @read_buf_queue,  @read_buf_mutex  = @@create_queues.call</div><div class='del'>-</div><div class='del'>-    @idle_flush  = TkTimer.new(:idle, 1, proc{ @flusher.run rescue nil })</div><div class='del'>-    @timer_flush = TkTimer.new(250, -1, proc{ @flusher.run rescue nil })</div><div class='del'>-</div><div class='del'>-    @flusher = Thread.new{ loop { Thread.stop; flush() } }</div><div class='del'>-</div><div class='del'>-    @receiver = Thread.new{</div><div class='del'>-      begin</div><div class='del'>-        loop {</div><div class='del'>-          str = @write_buf_queue.deq</div><div class='del'>-          @write_buf_mutex.synchronize { @write_buffer &lt;&lt; str }</div><div class='del'>-          @idle_flush.start</div><div class='del'>-        }</div><div class='del'>-      ensure</div><div class='del'>-        @flusher.kill</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @timer_flush.start</div><div class='del'>-</div><div class='del'>-    _setup_io(opts)</div><div class='del'>-  end</div><div class='del'>-  private :create_self</div><div class='del'>-</div><div class='del'>-  def destroy</div><div class='del'>-    @flusher.kill rescue nil</div><div class='del'>-</div><div class='del'>-    @idle_flush.stop rescue nil</div><div class='del'>-    @timer_flush.stop rescue nil</div><div class='del'>-</div><div class='del'>-    @receiver.kill rescue nil</div><div class='del'>-</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 _get_io_params(keys)</div><div class='del'>-    opts = {}</div><div class='del'>-    self.class.const_get(:OPT_DEFAULTS).each{|k, v| </div><div class='del'>-      if keys.has_key?(k)</div><div class='del'>-        opts[k] = keys.delete(k)</div><div class='del'>-      else</div><div class='del'>-        opts[k] = v</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    opts</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _setup_io(opts)</div><div class='del'>-    unless defined? @txtpos</div><div class='del'>-      @txtpos = TkTextMark.new(self, '1.0')</div><div class='del'>-    else</div><div class='del'>-      @txtpos.set('1.0')</div><div class='del'>-    end</div><div class='del'>-    @txtpos.gravity = :left</div><div class='del'>-</div><div class='del'>-    @lineno = 0</div><div class='del'>-    @line_offset = 0</div><div class='del'>-</div><div class='del'>-    @hist_max = opts['hist_size'].to_i</div><div class='del'>-    @hist_index = 0</div><div class='del'>-    @history = Array.new(@hist_max)</div><div class='del'>-    @history[0] = ''</div><div class='del'>-</div><div class='del'>-    self['wrap'] = wrap</div><div class='del'>-</div><div class='del'>-    self.show_mode = opts['show']</div><div class='del'>-</div><div class='del'>-    self.value = opts['text'] if opts['text']</div><div class='del'>-</div><div class='del'>-    @overwrite = (opts['overwrite'])? true: false</div><div class='del'>-</div><div class='del'>-    @sync = opts['sync']</div><div class='del'>-</div><div class='del'>-    @prompt = opts['prompt']</div><div class='del'>-    @prompt_cmd = opts['prompt_cmd']</div><div class='del'>-</div><div class='del'>-    @open  = {:r =&gt; true,  :w =&gt; true}  # default is 'r+'</div><div class='del'>-</div><div class='del'>-    @console_mode = false</div><div class='del'>-    @end_of_stream = false</div><div class='del'>-    @console_buffer = nil</div><div class='del'>-</div><div class='del'>-    case opts['mode']</div><div class='del'>-    when nil</div><div class='del'>-      # do nothing</div><div class='del'>-</div><div class='del'>-    when :console, 'console'</div><div class='del'>-      @console_mode = true</div><div class='del'>-      # @console_buffer = TkTextIO.new(:mode=&gt;'r')</div><div class='del'>-      @console_buffer = self.class.new(:mode=&gt;'r')</div><div class='del'>-      self.show_mode = :insert</div><div class='del'>-</div><div class='del'>-    when 'r', 'rb'</div><div class='del'>-      @open[:r] = true; @open[:w] = nil</div><div class='del'>-</div><div class='del'>-    when 'r+', 'rb+', 'r+b'</div><div class='del'>-      @open[:r] = true; @open[:w] = true</div><div class='del'>-</div><div class='del'>-    when 'w', 'wb'</div><div class='del'>-      @open[:r] = nil;  @open[:w] = true</div><div class='del'>-      self.value=''</div><div class='del'>-</div><div class='del'>-    when 'w+', 'wb+', 'w+b'</div><div class='del'>-      @open[:r] = true; @open[:w] = true</div><div class='del'>-      self.value=''</div><div class='del'>-</div><div class='del'>-    when 'a', 'ab'</div><div class='del'>-      @open[:r] = nil;  @open[:w] = true</div><div class='del'>-      @txtpos.set('end - 1 char')</div><div class='del'>-      @txtpos.gravity = :right</div><div class='del'>-</div><div class='del'>-    when 'a+', 'ab+', 'a+b'</div><div class='del'>-      @open[:r] = true;  @open[:w] = true</div><div class='del'>-      @txtpos.set('end - 1 char')</div><div class='del'>-      @txtpos.gravity = :right</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      fail ArgumentError, "unknown mode `#{opts['mode']}'"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless defined? @ins_head</div><div class='del'>-      @ins_head = TkTextMark.new(self, 'insert')</div><div class='del'>-      @ins_head.gravity = :left</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless defined? @ins_tail</div><div class='del'>-      @ins_tail = TkTextMark.new(self, 'insert')</div><div class='del'>-      @ins_tail.gravity = :right</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless defined? @tmp_mark</div><div class='del'>-      @tmp_mark = TkTextMark.new(self, 'insert')</div><div class='del'>-      @tmp_mark.gravity = :left</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @console_mode</div><div class='del'>-      _set_console_line</div><div class='del'>-      _setup_console_bindings</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_get_io_params, :_setup_io</div><div class='del'>-</div><div class='del'>-  def _set_console_line</div><div class='del'>-    @tmp_mark.set(@ins_tail)</div><div class='del'>-</div><div class='del'>-    mark_set('insert', 'end')</div><div class='del'>-</div><div class='del'>-    prompt = ''</div><div class='del'>-    prompt &lt;&lt; @prompt_cmd.call if @prompt_cmd</div><div class='del'>-    prompt &lt;&lt; @prompt if @prompt</div><div class='del'>-    insert(@tmp_mark, prompt)</div><div class='del'>-</div><div class='del'>-    @ins_head.set(@ins_tail)</div><div class='del'>-    @ins_tail.set('insert')</div><div class='del'>-</div><div class='del'>-    @txtpos.set(@tmp_mark)</div><div class='del'>-</div><div class='del'>-    _see_pos</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _replace_console_line(str)</div><div class='del'>-    self.delete(@ins_head, @ins_tail)</div><div class='del'>-    self.insert(@ins_head, str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _get_console_line</div><div class='del'>-    @tmp_mark.set(@ins_tail)</div><div class='del'>-    s = self.get(@ins_head, @tmp_mark)</div><div class='del'>-    _set_console_line</div><div class='del'>-    s</div><div class='del'>-  end</div><div class='del'>-  private :_set_console_line, :_replace_console_line, :_get_console_line</div><div class='del'>-</div><div class='del'>-  def _cb_up</div><div class='del'>-    @history[@hist_index].replace(self.get(@ins_head, @ins_tail))</div><div class='del'>-    @hist_index += 1</div><div class='del'>-    @hist_index -= 1 if @hist_index &gt;= @hist_max || !@history[@hist_index]</div><div class='del'>-    _replace_console_line(@history[@hist_index]) if @history[@hist_index]</div><div class='del'>-    Tk.callback_break</div><div class='del'>-  end</div><div class='del'>-  def _cb_down</div><div class='del'>-    @history[@hist_index].replace(self.get(@ins_head, @ins_tail))</div><div class='del'>-    @hist_index -= 1</div><div class='del'>-    @hist_index = 0 if @hist_index &lt; 0</div><div class='del'>-    _replace_console_line(@history[@hist_index]) if @history[@hist_index]</div><div class='del'>-    Tk.callback_break</div><div class='del'>-  end</div><div class='del'>-  def _cb_left</div><div class='del'>-    if @console_mode &amp;&amp; compare('insert', '&lt;=', @ins_head)</div><div class='del'>-      mark_set('insert', @ins_head)</div><div class='del'>-      Tk.callback_break</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def _cb_backspace</div><div class='del'>-    if @console_mode &amp;&amp; compare('insert', '&lt;=', @ins_head)</div><div class='del'>-      Tk.callback_break</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def _cb_ctrl_a</div><div class='del'>-    if @console_mode</div><div class='del'>-      mark_set('insert', @ins_head)</div><div class='del'>-      Tk.callback_break</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def _cb_ctrl_u</div><div class='del'>-    if @console_mode</div><div class='del'>-      mark_set('insert', @ins_head)</div><div class='del'>-      delete('insert', 'insert lineend')</div><div class='del'>-      Tk.callback_break</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_cb_up, :_cb_down, :_cb_left, :_cb_backspace, </div><div class='del'>-          :_cb_ctrl_a, :_cb_ctrl_u</div><div class='del'>-</div><div class='del'>-  def _setup_console_bindings</div><div class='del'>-    @bindtag = TkBindTag.new</div><div class='del'>-</div><div class='del'>-    tags = self.bindtags</div><div class='del'>-    tags[tags.index(self)+1, 0] = @bindtag</div><div class='del'>-    self.bindtags = tags</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('Return'){</div><div class='del'>-      insert('end - 1 char', "\n")</div><div class='del'>-      if (str = _get_console_line)</div><div class='del'>-        @read_buf_queue.push(str)</div><div class='del'>-</div><div class='del'>-        @history[0].replace(str.chomp)</div><div class='del'>-        @history.pop</div><div class='del'>-        @history.unshift('')</div><div class='del'>-        @hist_index = 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      Tk.update</div><div class='del'>-      Tk.callback_break</div><div class='del'>-    }</div><div class='del'>-    @bindtag.bind('Alt-Return'){</div><div class='del'>-      Tk.callback_continue</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('FocusIn'){</div><div class='del'>-      if @console_mode</div><div class='del'>-        mark_set('insert', @ins_tail)</div><div class='del'>-        Tk.callback_break</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ins_mark = TkTextMark.new(self, 'insert')</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('ButtonPress'){</div><div class='del'>-      if @console_mode</div><div class='del'>-        ins_mark.set('insert')</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('ButtonRelease-1'){</div><div class='del'>-      if @console_mode &amp;&amp; compare('insert', '&lt;=', @ins_head)</div><div class='del'>-        mark_set('insert', ins_mark)</div><div class='del'>-        Tk.callback_break</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('ButtonRelease-2', '%x %y'){|x, y|</div><div class='del'>-      if @console_mode</div><div class='del'>-        # paste a text at 'insert' only</div><div class='del'>-        x1, y1, x2, y2 =  bbox(ins_mark)</div><div class='del'>-        unless x == x1 &amp;&amp; y == y1</div><div class='del'>-          Tk.event_generate(self, 'ButtonRelease-2', :x=&gt;x1, :y=&gt;y1)</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'>-</div><div class='del'>-    @bindtag.bind('Up'){ _cb_up }</div><div class='del'>-    @bindtag.bind('Control-p'){ _cb_up }</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('Down'){ _cb_down }</div><div class='del'>-    @bindtag.bind('Control-n'){ _cb_down }</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('Left'){ _cb_left }</div><div class='del'>-    @bindtag.bind('Control-b'){ _cb_left }</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('BackSpace'){ _cb_backspace }</div><div class='del'>-    @bindtag.bind('Control-h'){ _cb_backspace }</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('Home'){ _cb_ctrl_a }</div><div class='del'>-    @bindtag.bind('Control-a'){ _cb_ctrl_a }</div><div class='del'>-</div><div class='del'>-    @bindtag.bind('Control-u'){ _cb_ctrl_u }</div><div class='del'>-  end</div><div class='del'>-  private :_setup_console_bindings</div><div class='del'>-</div><div class='del'>-  def _block_read(size = nil, ret = '', block_mode = true)</div><div class='del'>-    return '' if size == 0</div><div class='del'>-    return nil if ! @read_buf_queue &amp;&amp; @read_buffer.empty?</div><div class='del'>-    ret = '' unless ret.kind_of?(String)</div><div class='del'>-    ret.replace('') unless ret.empty?</div><div class='del'>-</div><div class='del'>-    if block_mode == nil # partial</div><div class='del'>-      if @read_buffer.empty?</div><div class='del'>-        ret &lt;&lt; @read_buffer.slice!(0..-1)</div><div class='del'>-        return ret</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if size.kind_of?(Numeric)</div><div class='del'>-      loop{</div><div class='del'>-        @read_buf_mutex.synchronize {</div><div class='del'>-          buf_len = @read_buffer.length</div><div class='del'>-          if buf_len &gt;= size</div><div class='del'>-            ret &lt;&lt; @read_buffer.slice!(0, size)</div><div class='del'>-            return ret</div><div class='del'>-          else</div><div class='del'>-            ret &lt;&lt; @read_buffer.slice!(0..-1)</div><div class='del'>-            size -= buf_len</div><div class='del'>-            return ret unless @read_buf_queue</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        @read_buffer &lt;&lt; @read_buf_queue.pop</div><div class='del'>-      }</div><div class='del'>-    else # readline</div><div class='del'>-      rs = (size)? size: $/</div><div class='del'>-      rs = rs.to_s if rs.kind_of?(Regexp)</div><div class='del'>-      loop{</div><div class='del'>-        @read_buf_mutex.synchronize {</div><div class='del'>-          if (str = @read_buffer.slice!(/\A(.*)(#{rs})/m))</div><div class='del'>-            ret &lt;&lt; str</div><div class='del'>-            return ret</div><div class='del'>-          else</div><div class='del'>-            ret &lt;&lt; @read_buffer.slice!(0..-1)</div><div class='del'>-            return ret unless @read_buf_queue</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        @read_buffer &lt;&lt; @read_buf_queue.pop</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _block_write</div><div class='del'>-    ###### currently, not support</div><div class='del'>-  end</div><div class='del'>-  private :_block_read, :_block_write</div><div class='del'>-</div><div class='del'>-  ####################################</div><div class='del'>-</div><div class='del'>-  def &lt;&lt;(obj)</div><div class='del'>-    _write(obj)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def binmode</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clone</div><div class='del'>-    fail NotImplementedError, 'cannot clone TkTextIO'</div><div class='del'>-  end</div><div class='del'>-  def dup</div><div class='del'>-    fail NotImplementedError, 'cannot duplicate TkTextIO'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def close</div><div class='del'>-    close_read</div><div class='del'>-    close_write</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-  def close_read</div><div class='del'>-    @open[:r] = false if @open[:r]</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-  def close_write</div><div class='del'>-    @open[:w] = false if @opne[:w]</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def closed?(dir=nil)</div><div class='del'>-    case dir</div><div class='del'>-    when :r, 'r'</div><div class='del'>-      !@open[:r]</div><div class='del'>-    when :w, 'w'</div><div class='del'>-      !@open[:w]</div><div class='del'>-    else</div><div class='del'>-      !@open[:r] &amp;&amp; !@open[:w]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _check_readable</div><div class='del'>-    fail IOError, "not opened for reading" if @open[:r].nil?</div><div class='del'>-    fail IOError, "closed stream" if !@open[:r]</div><div class='del'>-  end</div><div class='del'>-  def _check_writable</div><div class='del'>-    fail IOError, "not opened for writing" if @open[:w].nil?</div><div class='del'>-    fail IOError, "closed stream" if !@open[:w]</div><div class='del'>-  end</div><div class='del'>-  private :_check_readable, :_check_writable</div><div class='del'>-</div><div class='del'>-  def each_line(rs = $/)</div><div class='del'>-    _check_readable</div><div class='del'>-    while(s = self.gets(rs))</div><div class='del'>-      yield(s)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias each each_line</div><div class='del'>-</div><div class='del'>-  def each_char</div><div class='del'>-    _check_readable</div><div class='del'>-    while(c = self.getc)</div><div class='del'>-      yield(c)</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias each_byte each_char</div><div class='del'>-</div><div class='del'>-  def eof?</div><div class='del'>-    compare(@txtpos, '==', 'end - 1 char')</div><div class='del'>-  end</div><div class='del'>-  alias eof eof?</div><div class='del'>-</div><div class='del'>-  def fcntl(*args)</div><div class='del'>-    fail NotImplementedError, "fcntl is not implemented on #{self.class}"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def fsync</div><div class='del'>-    0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def fileno</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def flush</div><div class='del'>-    Thread.pass</div><div class='del'>-    if @open[:w] || ! @write_buffer.empty?</div><div class='del'>-      @write_buf_mutex.synchronize {</div><div class='del'>-        _sync_write_buf(@write_buffer) </div><div class='del'>-        @write_buffer[0..-1] = ''</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 getc</div><div class='del'>-    return _block_read(1) if @console_mode</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    return nil if eof?</div><div class='del'>-    c = get(@txtpos)</div><div class='del'>-    @txtpos.set(@txtpos + '1 char')</div><div class='del'>-    _see_pos</div><div class='del'>-    c</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def gets(rs = $/)</div><div class='del'>-    return _block_read(rs) if @console_mode</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    return nil if eof?</div><div class='del'>-    _readline(rs)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ioctrl(*args)</div><div class='del'>-    fail NotImplementedError, 'iocntl is not implemented on TkTextIO'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def isatty</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-  def tty?</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lineno</div><div class='del'>-    @lineno + @line_offset</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lineno=(num)</div><div class='del'>-    @line_offset = num - @lineno</div><div class='del'>-    num</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def overwrite?</div><div class='del'>-    @overwrite</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def overwrite=(ovwt)</div><div class='del'>-    @overwrite = (ovwt)? true: false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pid</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def index_pos</div><div class='del'>-    index(@txtpos)</div><div class='del'>-  end</div><div class='del'>-  alias tell_index index_pos</div><div class='del'>-</div><div class='del'>-  def index_pos=(idx)</div><div class='del'>-    @txtpos.set(idx)</div><div class='del'>-    @txtpos.set('end - 1 char') if compare(@txtpos, '&gt;=', :end)</div><div class='del'>-    _see_pos</div><div class='del'>-    idx</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pos</div><div class='del'>-    s = get('1.0', @txtpos)</div><div class='del'>-    number(tk_call('string', 'length', s))</div><div class='del'>-  end</div><div class='del'>-  alias tell pos</div><div class='del'>-</div><div class='del'>-  def pos=(idx)</div><div class='del'>-    seek(idx, IO::SEEK_SET)</div><div class='del'>-    idx</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pos_gravity</div><div class='del'>-    @txtpos.gravity</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pos_gravity=(side)</div><div class='del'>-    @txtpos.gravity = side</div><div class='del'>-    side</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def print(arg=$_, *args)</div><div class='del'>-    _check_writable</div><div class='del'>-    args.unshift(arg)</div><div class='del'>-    args.map!{|val| (val == nil)? 'nil': val.to_s }</div><div class='del'>-    str = args.join($,)</div><div class='del'>-    str &lt;&lt; $\ if $\</div><div class='del'>-    _write(str)</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-  def printf(*args)</div><div class='del'>-    _check_writable</div><div class='del'>-    _write(sprintf(*args))</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def putc(c)</div><div class='del'>-    _check_writable</div><div class='del'>-    c = c.chr if c.kind_of?(Fixnum)</div><div class='del'>-    _write(c)</div><div class='del'>-    c</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def puts(*args)</div><div class='del'>-    _check_writable</div><div class='del'>-    if args.empty?</div><div class='del'>-      _write("\n")</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-    args.each{|arg|</div><div class='del'>-      if arg == nil</div><div class='del'>-        _write("nil\n")</div><div class='del'>-      elsif arg.kind_of?(Array)</div><div class='del'>-        puts(*arg)</div><div class='del'>-      elsif arg.kind_of?(String)</div><div class='del'>-        _write(arg.chomp)</div><div class='del'>-        _write("\n")</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          arg = arg.to_ary</div><div class='del'>-          puts(*arg)</div><div class='del'>-        rescue</div><div class='del'>-          puts(arg.to_s)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _read(len)</div><div class='del'>-    epos = @txtpos + "#{len} char"</div><div class='del'>-    s = get(@txtpos, epos)</div><div class='del'>-    @txtpos.set(epos)</div><div class='del'>-    @txtpos.set('end - 1 char') if compare(@txtpos, '&gt;=', :end)</div><div class='del'>-    _see_pos</div><div class='del'>-    s</div><div class='del'>-  end</div><div class='del'>-  private :_read</div><div class='del'>-</div><div class='del'>-  def read(len=nil, buf=nil)</div><div class='del'>-    return _block_read(len, buf) if @console_mode</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    if len</div><div class='del'>-      return "" if len == 0</div><div class='del'>-      return nil if eof?</div><div class='del'>-      s = _read(len)</div><div class='del'>-    else</div><div class='del'>-      s = get(@txtpos, 'end - 1 char')</div><div class='del'>-      @txtpos.set('end - 1 char')</div><div class='del'>-      _see_pos</div><div class='del'>-    end</div><div class='del'>-    buf.replace(s) if buf.kind_of?(String)</div><div class='del'>-    s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def readchar</div><div class='del'>-    return _block_read(1) if @console_mode</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    fail EOFError if eof?</div><div class='del'>-    c = get(@txtpos)</div><div class='del'>-    @txtpos.set(@txtpos + '1 char')</div><div class='del'>-    _see_pos</div><div class='del'>-    c</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _readline(rs = $/)</div><div class='del'>-    if rs == nil</div><div class='del'>-      s = get(@txtpos, 'end - 1 char')</div><div class='del'>-      @txtpos.set('end - 1 char')</div><div class='del'>-    elsif rs == ''</div><div class='del'>-      @count_var.value  # make it global</div><div class='del'>-      idx = tksearch_with_count([:regexp], @count_var, </div><div class='del'>-                                   "\n(\n)+", @txtpos, 'end - 1 char')</div><div class='del'>-      if idx</div><div class='del'>-        s = get(@txtpos, idx) &lt;&lt; "\n"</div><div class='del'>-        @txtpos.set("#{idx} + #{@count_var.value} char")</div><div class='del'>-        @txtpos.set('end - 1 char') if compare(@txtpos, '&gt;=', :end)</div><div class='del'>-      else</div><div class='del'>-        s = get(@txtpos, 'end - 1 char')</div><div class='del'>-        @txtpos.set('end - 1 char')</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @count_var.value  # make it global</div><div class='del'>-      idx = tksearch_with_count(@count_var, rs, @txtpos, 'end - 1 char')</div><div class='del'>-      if idx</div><div class='del'>-        s = get(@txtpos, "#{idx} + #{@count_var.value} char")</div><div class='del'>-        @txtpos.set("#{idx} + #{@count_var.value} char")</div><div class='del'>-        @txtpos.set('end - 1 char') if compare(@txtpos, '&gt;=', :end)</div><div class='del'>-      else</div><div class='del'>-        s = get(@txtpos, 'end - 1 char')</div><div class='del'>-        @txtpos.set('end - 1 char')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    _see_pos</div><div class='del'>-    @lineno += 1</div><div class='del'>-    $_ = s</div><div class='del'>-  end</div><div class='del'>-  private :_readline</div><div class='del'>-</div><div class='del'>-  def readline(rs = $/)</div><div class='del'>-    return _block_readline(rs) if @console_mode</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    fail EOFError if eof?</div><div class='del'>-    _readline(rs)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def readlines(rs = $/)</div><div class='del'>-    if @console_mode</div><div class='del'>-      lines = []</div><div class='del'>-      while (line = _block_readline(rs))</div><div class='del'>-        lines &lt;&lt; line</div><div class='del'>-      end</div><div class='del'>-      return lines</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    lines = []</div><div class='del'>-    until(eof?)</div><div class='del'>-      lines &lt;&lt; _readline(rs)</div><div class='del'>-    end</div><div class='del'>-    $_ = nil</div><div class='del'>-    lines</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def readpartial(maxlen, buf=nil)</div><div class='del'>-    #return @console_buffer.readpartial(maxlen, buf) if @console_mode</div><div class='del'>-    return _block_read(maxlen, buf, nil) if @console_mode</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    fail EOFError if eof?</div><div class='del'>-    s = _read(maxlen)</div><div class='del'>-    buf.replace(s) if buf.kind_of?(String)</div><div class='del'>-    s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def reopen(*args)</div><div class='del'>-    fail NotImplementedError, 'reopen is not implemented on TkTextIO'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rewind</div><div class='del'>-    @txtpos.set('1.0')</div><div class='del'>-    _see_pos</div><div class='del'>-    @lineno = 0</div><div class='del'>-    @line_offset = 0</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def seek(offset, whence=IO::SEEK_SET)</div><div class='del'>-    case whence</div><div class='del'>-    when IO::SEEK_SET</div><div class='del'>-      offset = "1.0 + #{offset} char" if offset.kind_of?(Numeric)</div><div class='del'>-      @txtpos.set(offset)</div><div class='del'>-</div><div class='del'>-    when IO::SEEK_CUR</div><div class='del'>-      offset = "#{offset} char" if offset.kind_of?(Numeric)</div><div class='del'>-      @txtpos.set(@txtpos + offset)</div><div class='del'>-</div><div class='del'>-    when IO::SEEK_END</div><div class='del'>-      offset = "#{offset} char" if offset.kind_of?(Numeric)</div><div class='del'>-      @txtpos.set("end - 1 char + #{offset}")</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      fail Errno::EINVAL, 'invalid whence argument'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @txtpos.set('end - 1 char') if compare(@txtpos, '&gt;=', :end)</div><div class='del'>-    _see_pos</div><div class='del'>-</div><div class='del'>-    0</div><div class='del'>-  end</div><div class='del'>-  alias sysseek seek</div><div class='del'>-</div><div class='del'>-  def _see_pos</div><div class='del'>-    see(@show) if @show</div><div class='del'>-  end</div><div class='del'>-  private :_see_pos</div><div class='del'>-</div><div class='del'>-  def show_mode</div><div class='del'>-    (@show == @txtpos)? :pos : @show</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def show_mode=(mode)</div><div class='del'>-    # define show mode  when file position is changed. </div><div class='del'>-    #  mode == :pos or "pos" or true :: see current file position. </div><div class='del'>-    #  mode == :insert or "insert"   :: see insert cursor position. </div><div class='del'>-    #  mode == nil or false          :: do nothing</div><div class='del'>-    #  else see 'mode' position ('mode' should be text index or mark)</div><div class='del'>-    case mode</div><div class='del'>-    when :pos, 'pos', true</div><div class='del'>-      @show = @txtpos</div><div class='del'>-    when :insert, 'insert'</div><div class='del'>-      @show = :insert</div><div class='del'>-    when nil, false</div><div class='del'>-      @show = false</div><div class='del'>-    else</div><div class='del'>-      begin</div><div class='del'>-        index(mode)</div><div class='del'>-      rescue</div><div class='del'>-        fail ArgumentError, 'invalid show-position'</div><div class='del'>-      end</div><div class='del'>-      @show = mode</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    _see_pos</div><div class='del'>-</div><div class='del'>-    mode</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stat</div><div class='del'>-    fail NotImplementedError, 'stat is not implemented on TkTextIO'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sync</div><div class='del'>-    @sync</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sync=(mode)</div><div class='del'>-    @sync = mode</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sysread(len, buf=nil)</div><div class='del'>-    return _block_read(len, buf) if @console_mode</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    fail EOFError if eof?</div><div class='del'>-    s = _read(len)</div><div class='del'>-    buf.replace(s) if buf.kind_of?(String)</div><div class='del'>-    s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def syswrite(obj)</div><div class='del'>-    _write(obj)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_io</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trancate(len)</div><div class='del'>-    delete("1.0 + #{len} char", :end)</div><div class='del'>-    0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ungetc(c)</div><div class='del'>-    if @console_mode</div><div class='del'>-      @read_buf_mutex.synchronize {</div><div class='del'>-        @read_buffer[0,0] = c.chr</div><div class='del'>-      }</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    _check_readable</div><div class='del'>-    c = c.chr if c.kind_of?(Fixnum)</div><div class='del'>-    if compare(@txtpos, '&gt;', '1.0')</div><div class='del'>-      @txtpos.set(@txtpos - '1 char')</div><div class='del'>-      delete(@txtpos)</div><div class='del'>-      insert(@txtpos, tk_call('string', 'range', c, 0, 1))</div><div class='del'>-      @txtpos.set(@txtpos - '1 char') if @txtpos.gravity == 'right'</div><div class='del'>-      _see_pos</div><div class='del'>-    else</div><div class='del'>-      fail IOError, 'cannot ungetc at head of stream'</div><div class='del'>-    end</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def _write(obj)</div><div class='del'>-    #s = _get_eval_string(obj)</div><div class='del'>-    s = (obj.kind_of?(String))? obj: obj.to_s</div><div class='del'>-    n = number(tk_call('string', 'length', s))</div><div class='del'>-    delete(@txtpos, @txtpos + "#{n} char") if @overwrite</div><div class='del'>-    self.insert(@txtpos, s)</div><div class='del'>-    @txtpos.set(@txtpos + "#{n} char")</div><div class='del'>-    @txtpos.set('end - 1 char') if compare(@txtpos, '&gt;=', :end)</div><div class='del'>-    _see_pos</div><div class='del'>-    Tk.update if @sync</div><div class='del'>-    n</div><div class='del'>-  end</div><div class='del'>-  private :_write</div><div class='del'>-=end</div><div class='del'>-#=begin</div><div class='del'>-  def _sync_write_buf(s)</div><div class='del'>-    if (n = number(tk_call('string', 'length', s))) &gt; 0</div><div class='del'>-      delete(@txtpos, @txtpos + "#{n} char") if @overwrite</div><div class='del'>-      self.insert(@txtpos, s)</div><div class='del'>-      #Tk.update</div><div class='del'>-</div><div class='del'>-      @txtpos.set(@txtpos + "#{n} char")</div><div class='del'>-      @txtpos.set('end - 1 char') if compare(@txtpos, '&gt;=', :end)</div><div class='del'>-</div><div class='del'>-      @ins_head.set(@txtpos) if compare(@txtpos, '&gt;', @ins_head)</div><div class='del'>-</div><div class='del'>-      _see_pos</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  private :_sync_write_buf</div><div class='del'>-</div><div class='del'>-  def _write(obj)</div><div class='del'>-    s = (obj.kind_of?(String))? obj: obj.to_s</div><div class='del'>-    n = number(tk_call('string', 'length', s))</div><div class='del'>-    @write_buf_queue.enq(s)</div><div class='del'>-    if @sync</div><div class='del'>-      Thread.pass</div><div class='del'>-      Tk.update</div><div class='del'>-    end</div><div class='del'>-    n</div><div class='del'>-  end</div><div class='del'>-  private :_write</div><div class='del'>-#=end</div><div class='del'>-</div><div class='del'>-  def write(obj)</div><div class='del'>-    _check_writable</div><div class='del'>-    _write(obj)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-####################</div><div class='del'>-#  TEST</div><div class='del'>-####################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  ev_loop = Thread.new{Tk.mainloop}</div><div class='del'>-</div><div class='del'>-  f = TkFrame.new.pack</div><div class='del'>-  #tio = TkTextIO.new(f, :show=&gt;:nil, </div><div class='del'>-  #tio = TkTextIO.new(f, :show=&gt;:pos, </div><div class='del'>-  tio = TkTextIO.new(f, :show=&gt;:insert, </div><div class='del'>-                     :text=&gt;"&gt;&gt;&gt; This is an initial text line. &lt;&lt;&lt;\n\n"){</div><div class='del'>-#    yscrollbar(TkScrollbar.new(f).pack(:side=&gt;:right, :fill=&gt;:y))</div><div class='del'>-    pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Tk.update</div><div class='del'>-</div><div class='del'>-  $stdin  = tio</div><div class='del'>-  $stdout = tio</div><div class='del'>-  $stderr = tio</div><div class='del'>-</div><div class='del'>-  STDOUT.print("\n========= TkTextIO#gets for inital text ========\n\n")</div><div class='del'>-</div><div class='del'>-  while(s = gets)</div><div class='del'>-    STDOUT.print(s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  STDOUT.print("\n============ put strings to TkTextIO ===========\n\n")</div><div class='del'>-</div><div class='del'>-  puts "On this sample, a text widget works as if it is a I/O stream."</div><div class='del'>-  puts "Please see the code."</div><div class='del'>-  puts</div><div class='del'>-  printf("printf message: %d %X\n", 123456, 255)</div><div class='del'>-  puts</div><div class='del'>-  printf("(output by 'p' method) This TkTextIO object is ...\n")</div><div class='del'>-  p tio</div><div class='del'>-  print(" [ Current wrap mode of this object is 'char'. ]\n")</div><div class='del'>-  puts</div><div class='del'>-  warn("This is a warning message generated by 'warn' method.")</div><div class='del'>-  puts</div><div class='del'>-  puts "current show_mode is #{tio.show_mode}."</div><div class='del'>-  if tio.show_mode == :pos</div><div class='del'>-    puts "So, you can see the current file position on this text widget."</div><div class='del'>-  else</div><div class='del'>-    puts "So, you can see the position '#{tio.show_mode}' on this text widget."</div><div class='del'>-  end</div><div class='del'>-  print("Please scroll up this text widget to see the head of lines.\n")</div><div class='del'>-  print("---------------------------------------------------------\n")</div><div class='del'>-</div><div class='del'>-  STDOUT.print("\n=============== TkTextIO#readlines =============\n\n")</div><div class='del'>-</div><div class='del'>-  tio.seek(0)</div><div class='del'>-  lines = readlines</div><div class='del'>-  STDOUT.puts(lines.inspect)</div><div class='del'>-</div><div class='del'>-  STDOUT.print("\n================== TkTextIO#each ===============\n\n")</div><div class='del'>-</div><div class='del'>-  tio.rewind</div><div class='del'>-  tio.each{|line| STDOUT.printf("%2d: %s\n", tio.lineno, line.chomp)}</div><div class='del'>-</div><div class='del'>-  STDOUT.print("\n================================================\n\n")</div><div class='del'>-</div><div class='del'>-  STDOUT.print("\n========= reverse order (seek by lines) ========\n\n")</div><div class='del'>-</div><div class='del'>-  tio.seek(-1, IO::SEEK_END)</div><div class='del'>-  begin</div><div class='del'>-    begin</div><div class='del'>-      tio.seek(:linestart, IO::SEEK_CUR)</div><div class='del'>-    rescue</div><div class='del'>-      # maybe use old version of tk/textmark.rb</div><div class='del'>-      tio.seek('0 char linestart', IO::SEEK_CUR)</div><div class='del'>-    end</div><div class='del'>-    STDOUT.print(gets)</div><div class='del'>-    tio.seek('-1 char linestart -1 char', IO::SEEK_CUR)</div><div class='del'>-  end while(tio.pos &gt; 0)</div><div class='del'>-</div><div class='del'>-  STDOUT.print("\n================================================\n\n")</div><div class='del'>-</div><div class='del'>-  tio.seek(0, IO::SEEK_END)</div><div class='del'>-</div><div class='del'>-  STDOUT.print("tio.sync ==  #{tio.sync}\n")</div><div class='del'>-#  tio.sync = false</div><div class='del'>-#  STDOUT.print("tio.sync ==  #{tio.sync}\n")</div><div class='del'>-</div><div class='del'>-  (0..10).each{|i|</div><div class='del'>-    STDOUT.print("#{i}\n")</div><div class='del'>-    s = ''</div><div class='del'>-    (0..1000).each{ s &lt;&lt; '*' }</div><div class='del'>-    print(s)</div><div class='del'>-  }</div><div class='del'>-  print("\n")</div><div class='del'>-  print("\n=========================================================\n\n")</div><div class='del'>-</div><div class='del'>-  s = ''</div><div class='del'>-  timer = TkTimer.new(:idle, -1, proc{</div><div class='del'>-                        #STDOUT.print("idle call\n")</div><div class='del'>-                        unless s.empty?</div><div class='del'>-                          print(s)</div><div class='del'>-                          s = ''</div><div class='del'>-                        end</div><div class='del'>-                      }).start</div><div class='del'>-  (0..10).each{|i|</div><div class='del'>-    STDOUT.print("#{i}\n")</div><div class='del'>-    (0..1000).each{ s &lt;&lt; '*' }</div><div class='del'>-  }</div><div class='del'>-#  timer.stop</div><div class='del'>-  until s.empty?</div><div class='del'>-    sleep 0.1</div><div class='del'>-  end</div><div class='del'>-  timer.stop</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  tio.sync = false</div><div class='del'>-  print("\n")</div><div class='del'>-  #(0..10000).each{ putc('*') }</div><div class='del'>-  (0..10).each{|i|</div><div class='del'>-    STDOUT.print("#{i}\n")</div><div class='del'>-    (0..1000).each{ putc('*') }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  (0..10).each{|i|</div><div class='del'>-    STDOUT.print("#{i}\n")</div><div class='del'>-    s = ''</div><div class='del'>-    (0..1000).each{ s &lt;&lt; '*' }</div><div class='del'>-    print(s)</div><div class='del'>-  }</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  num = 0</div><div class='del'>-#  io = TkTextIO.new(:mode=&gt;:console, :prompt=&gt;'').pack</div><div class='del'>-#=begin</div><div class='del'>-  io = TkTextIO.new(:mode=&gt;:console, </div><div class='del'>-                    :prompt_cmd=&gt;proc{</div><div class='del'>-                      s = "[#{num}]"</div><div class='del'>-                      num += 1</div><div class='del'>-                      s</div><div class='del'>-                    }, </div><div class='del'>-                    :prompt=&gt;'-&gt; ').pack</div><div class='del'>-#=end</div><div class='del'>-  Thread.new{loop{sleep 2; io.puts 'hoge'}}</div><div class='del'>-  Thread.new{loop{p io.gets}}</div><div class='del'>-</div><div class='del'>-  ev_loop.join</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tktimer.rb b/ext/tk/sample/tktimer.rb<br/>deleted file mode 100644<br/>index b1adb5b506..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tktimer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktimer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,50 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# This script generates a counter with start and stop buttons.</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-$label = TkLabel.new {</div><div class='del'>-  text '0.00'</div><div class='del'>-  relief 'raised'</div><div class='del'>-  width 10</div><div class='del'>-  pack('side'=&gt;'bottom', 'fill'=&gt;'both')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkButton.new {</div><div class='del'>-  text 'Start'</div><div class='del'>-  command proc {</div><div class='del'>-    if $stopped</div><div class='del'>-      $stopped = FALSE</div><div class='del'>-      tick</div><div class='del'>-    end</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'>-TkButton.new {</div><div class='del'>-  text 'Stop'</div><div class='del'>-  command proc{</div><div class='del'>-    exit if $stopped</div><div class='del'>-    $stopped = TRUE</div><div class='del'>-  }</div><div class='del'>-  pack('side'=&gt;'right','fill'=&gt;'both','expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-$seconds=0</div><div class='del'>-$hundredths=0</div><div class='del'>-$stopped=TRUE</div><div class='del'>-</div><div class='del'>-def tick</div><div class='del'>-  if $stopped then return end</div><div class='del'>-  Tk.after 50, proc{tick}</div><div class='del'>-  $hundredths+=5</div><div class='del'>-  if $hundredths &gt;= 100</div><div class='del'>-    $hundredths=0</div><div class='del'>-    $seconds+=1</div><div class='del'>-  end</div><div class='del'>-  $label.text format("%d.%02d", $seconds, $hundredths)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-root = Tk.root</div><div class='del'>-root.bind "Control-c", proc{root.destroy}</div><div class='del'>-root.bind "Control-q", proc{root.destroy}</div><div class='del'>-Tk.root.focus</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tktimer2.rb b/ext/tk/sample/tktimer2.rb<br/>deleted file mode 100644<br/>index dd31bb098e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tktimer2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktimer2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,47 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# This script is a re-implementation of tktimer.rb with TkTimer(TkAfter) class.</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-# new notation :</div><div class='del'>-#   * symbols are acceptable as keys or values of the option hash</div><div class='del'>-#   * the parent widget can be given by :parent key on the option hash </div><div class='del'>-root = TkRoot.new(:title=&gt;'timer sample')</div><div class='del'>-label = TkLabel.new(:parent=&gt;root, :relief=&gt;:raised, :width=&gt;10) \</div><div class='del'>-               .pack(:side=&gt;:bottom, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-# define the procedure repeated by the TkTimer object</div><div class='del'>-tick = proc{|aobj| #&lt;== TkTimer object</div><div class='del'>-  cnt = aobj.return_value + 5 # return_value keeps a result of the last proc</div><div class='del'>-  label.text format("%d.%02d", *(cnt.divmod(100)))</div><div class='del'>-  cnt #==&gt; return value is kept by TkTimer object</div><div class='del'>-      #    (so, can be send to the next repeat-proc)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-timer = TkTimer.new(50, -1, tick).start(0, proc{ label.text('0.00'); 0 })</div><div class='del'>-        # ==&gt; repeat-interval : (about) 50 ms,  </div><div class='del'>-        #     repeat : infinite (-1) times, </div><div class='del'>-        #     repeat-procedure : tick (only one, in this case)</div><div class='del'>-        #</div><div class='del'>-        # ==&gt; wait-before-call-init-proc : 0 ms, </div><div class='del'>-        #     init_proc : proc{ label.text('0.00'); 0 }</div><div class='del'>-        #</div><div class='del'>-        # (0ms)-&gt; init_proc -&gt;(50ms)-&gt; tick -&gt;(50ms)-&gt; tick -&gt;....</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'Start') {</div><div class='del'>-  command proc{ timer.continue unless timer.running? }</div><div class='del'>-  pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-TkButton.new(:text=&gt;'Restart') {</div><div class='del'>-  command proc{ timer.restart(0, proc{ label.text('0.00'); 0 }) }</div><div class='del'>-  pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-TkButton.new(:text=&gt;'Stop') {</div><div class='del'>-  command proc{ timer.stop if timer.running? }</div><div class='del'>-  pack('side'=&gt;'right','fill'=&gt;'both','expand'=&gt;'yes')</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-ev_quit = TkVirtualEvent.new('Control-c', 'Control-q')</div><div class='del'>-Tk.root.bind(ev_quit, proc{Tk.exit}).focus</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tktimer3.rb b/ext/tk/sample/tktimer3.rb<br/>deleted file mode 100644<br/>index e3bb4c3e4a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tktimer3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktimer3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,59 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-# This script is a re-implementation of tktimer.rb with TkTimer(TkAfter) class.</div><div class='del'>-</div><div class='del'>-require "tk"</div><div class='del'>-</div><div class='del'>-# new notation :</div><div class='del'>-#   * symbols are acceptable as keys or values of the option hash</div><div class='del'>-#   * the parent widget can be given by :parent key on the option hash </div><div class='del'>-root = TkRoot.new(:title=&gt;'timer sample')</div><div class='del'>-label = TkLabel.new(:parent=&gt;root, :relief=&gt;:raised, :width=&gt;10) \</div><div class='del'>-               .pack(:side=&gt;:bottom, :fill=&gt;:both)</div><div class='del'>-</div><div class='del'>-# define the procedure repeated by the TkTimer object</div><div class='del'>-tick = proc{|aobj| #&lt;== TkTimer object</div><div class='del'>-  cnt = aobj.return_value + 5 # return_value keeps a result of the last proc</div><div class='del'>-  label.text format("%d.%02d", *(cnt.divmod(100)))</div><div class='del'>-  cnt #==&gt; return value is kept by TkTimer object</div><div class='del'>-      #    (so, can be send to the next repeat-proc)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-timer = TkTimer.new(50, -1, tick).start(0, proc{ label.text('0.00'); 0 })</div><div class='del'>-        # ==&gt; repeat-interval : (about) 50 ms,  </div><div class='del'>-        #     repeat : infinite (-1) times, </div><div class='del'>-        #     repeat-procedure : tick (only one, in this case)</div><div class='del'>-        #</div><div class='del'>-        # ==&gt; wait-before-call-init-proc : 0 ms, </div><div class='del'>-        #     init_proc : proc{ label.text('0.00'); 0 }</div><div class='del'>-        #</div><div class='del'>-        # (0ms)-&gt; init_proc -&gt;(50ms)-&gt; tick -&gt;(50ms)-&gt; tick -&gt;....</div><div class='del'>-</div><div class='del'>-b_start = TkButton.new(:text=&gt;'Start', :state=&gt;:disabled) {</div><div class='del'>-  pack(:side=&gt;:left, :fill=&gt;:both, :expand=&gt;true)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-b_stop  = TkButton.new(:text=&gt;'Stop', :state=&gt;:normal) {</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'>-b_start.command {</div><div class='del'>-  timer.continue</div><div class='del'>-  b_stop.state(:normal)</div><div class='del'>-  b_start.state(:disabled)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-b_stop.command {</div><div class='del'>-  timer.stop</div><div class='del'>-  b_start.state(:normal)</div><div class='del'>-  b_stop.state(:disabled)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-TkButton.new(:text=&gt;'Reset', :state=&gt;:normal) {</div><div class='del'>-  command { timer.reset }</div><div class='del'>-  pack(:side=&gt;:right, :fill=&gt;:both, :expand=&gt;:yes)</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-ev_quit = TkVirtualEvent.new('Control-c', 'Control-q')</div><div class='del'>-Tk.root.bind(ev_quit, proc{Tk.exit}).focus</div><div class='del'>-</div><div class='del'>-Tk.mainloop</div><div class='head'>diff --git a/ext/tk/sample/tktree.rb b/ext/tk/sample/tktree.rb<br/>deleted file mode 100644<br/>index 56b7211c88..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tktree.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktree.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,103 +0,0 @@</div><div class='del'>-##########################################################################</div><div class='del'>-# TkTree widget class</div><div class='del'>-#</div><div class='del'>-#    see &lt;http://wiki.tcl.tk/10615&gt;</div><div class='del'>-#</div><div class='del'>-#  Note:  optional argument '-font' of the Tcl library is changed to </div><div class='del'>-#         'itemfont' on this Ruby library, because of avoiding font </div><div class='del'>-#         operation trouble in 'initialize' method  ( see the following </div><div class='del'>-#         test script ). </div><div class='del'>-#</div><div class='del'>-##########################################################################</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-class TkTree &lt; TkCanvas</div><div class='del'>-  TCL_SCRIPT_PATH = File.join(File.dirname(__FILE__), 'tktree.tcl')</div><div class='del'>-</div><div class='del'>-  def create_self(keys)</div><div class='del'>-    args = [@path]</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      font = keys.delete('itemfont')</div><div class='del'>-#      font = hash_kv(font) if font.kind_of?(Hash)</div><div class='del'>-      keys['font'] = font if font</div><div class='del'>-#      args.concat(hash_kv(keys))</div><div class='del'>-      args &lt;&lt; keys</div><div class='del'>-    end</div><div class='del'>-    begin</div><div class='del'>-      tk_call('::tktree::treecreate', *args)</div><div class='del'>-    rescue NameError, RuntimeError</div><div class='del'>-      Tk.load_tclscript(TkTree::TCL_SCRIPT_PATH)</div><div class='del'>-      tk_call('::tktree::treecreate', *args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def newitem(itempath, keys = nil)</div><div class='del'>-    if keys.kind_of?(Hash)</div><div class='del'>-      keys = _symbolkey2str(keys)</div><div class='del'>-      font = keys.delete('itemfont')</div><div class='del'>-#      font = hash_kv(font) if font.kind_of?(Hash)</div><div class='del'>-      keys['font'] = font if font</div><div class='del'>-#      tk_call('::tktree::newitem', @path, itempath, *hash_kv(keys))</div><div class='del'>-      tk_call('::tktree::newitem', @path, itempath, keys)</div><div class='del'>-    else</div><div class='del'>-      tk_call('::tktree::newitem', @path, itempath)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delitem(itempath)</div><div class='del'>-    tk_call('::tktree::delitem', @path, itempath)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def labelat(xpos, ypos)</div><div class='del'>-    tk_call('::tktree::delitem', @path, xpos, ypos)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def getselection</div><div class='del'>-    tk_call('::tktree::getselection', @path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def setselection(itempath)</div><div class='del'>-    tk_call('::tktree::getselection', @path, itempath)</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'>-# test script</div><div class='del'>-##########################################################################</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  TkLabel.new(:text=&gt;&lt;&lt;EOL, :relief=&gt;:ridge, :justify=&gt;:left).pack</div><div class='del'>-</div><div class='del'>- This is a sample to use a Tcl library script on Ruby/Tk. </div><div class='del'>- This sample loads tktree.tcl (see &lt;http://wiki.tcl.tk/10615&gt;) </div><div class='del'>- and calls functions of the Tcl script. </div><div class='del'>-EOL</div><div class='del'>-</div><div class='del'>-  items = %w(/group1/item1 /group1/item2 /group1/subgroup/item1 /group2/item1 /item1)</div><div class='del'>-</div><div class='del'>-  tr1 = TkTree.new.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-  tr1.focus</div><div class='del'>-</div><div class='del'>-  items.each{|item|</div><div class='del'>-    tr1.newitem(item, </div><div class='del'>-                :command=&gt;proc{Tk.messageBox(:message=&gt;"#{item} executed")})</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  f = TkFrame.new.pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-  tr2 = TkTree.new(f, :bg=&gt;'black', #:itemfont=&gt;{:family=&gt;'Times', :size=&gt;14}, </div><div class='del'>-                   :textcolor=&gt;'red', :bd=&gt;4, :relief=&gt;:ridge, </div><div class='del'>-                   :selectbackground=&gt;'darkBlue', :selectforeground=&gt;'yellow', </div><div class='del'>-                   :selectborderwidth=&gt;3, :linecolor=&gt;'yellow') {</div><div class='del'>-    yscrollbar(TkScrollbar.new(f, :width=&gt;10).pack(:side=&gt;:right, :fill=&gt;:y))</div><div class='del'>-    xscrollbar(TkScrollbar.new(f, :width=&gt;10).pack(:side=&gt;:bottom, :fill=&gt;:x))</div><div class='del'>-    pack(:expand=&gt;true, :fill=&gt;:both)</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  items.each{|item|</div><div class='del'>-    tr2.newitem(item, :textcolor=&gt;'green', :image=&gt;'', </div><div class='del'>-                :itemfont=&gt;{:family=&gt;'Times', :size=&gt;10}, </div><div class='del'>-                :command=&gt;proc{Tk.messageBox(:message=&gt;"#{item} executed")})</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Tk.mainloop</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/sample/tktree.tcl b/ext/tk/sample/tktree.tcl<br/>deleted file mode 100644<br/>index a5e47eb776..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/tktree.tcl?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/tktree.tcl</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,305 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#  This Tcl/Tk script is quoted from &lt;http://wiki.tcl.tk/10615&gt;.</div><div class='del'>-#</div><div class='del'>- package require Tk</div><div class='del'>-  namespace eval ::tktree {</div><div class='del'>-</div><div class='del'>-    # Images used for open and close state of subgroups</div><div class='del'>-    set ::tktree::imgcollapse [image create photo .tktreeopenbm -data {</div><div class='del'>-      R0lGODdhCQAJAIAAAAEBAf///ywAAAAACQAJAAACEISPoRvG614D80x5ZXyogwIAOw==}]</div><div class='del'>-    set ::tktree::imgexpand [image create photo .tktreeclosebm -data {</div><div class='del'>-      R0lGODdhCQAJAIAAAAEBAf///ywAAAAACQAJAAACEYSPoRu28KCSDSJLc44s3lMAADs=}]</div><div class='del'>-    ###Default images for groups and children</div><div class='del'>-    set ::tktree::imgsubgroups [image create photo .tktreeimgfolder -data {</div><div class='del'>-                R0lGODlhEAANAKIAANnZ2Xh4eLi4uPj4APj4+AAAAP///////yH5BAEAAAAA</div><div class='del'>-                LAAAAAAQAA0AAANkCIChiqDLITgyEgi6GoIjIyMYugCBpMsaWBA0giMjIzgy</div><div class='del'>-                UYBBMjIoIyODEgVBODIygiMjE1gQJIMyMjIoI1GAQSMjODIyghMFQSgjI4My</div><div class='del'>-                MhJYEDSCIyMjODJRgKHLXAiApcsMmAA7}]</div><div class='del'>-    set ::tktree::imgchildren [image create photo .tktreeimgfile -data {</div><div class='del'>-                R0lGODlhDQAQAKIAANnZ2Xh4ePj4+Li4uAAAAP///////////yH5BAEAAAAA</div><div class='del'>-                LAAAAAANABAAAANSGLoLgACBoqsRCBAoujqCASGDojtESCEihCREIjgUKLo8</div><div class='del'>-                hCGCpCsySIGiy0MYIki6IoMUKLo8hCGCpCsySIGiy0MYKLo8hIGiy0MYOLo8</div><div class='del'>-                SLrMCQA7}]</div><div class='del'>-</div><div class='del'>-    #### Swtich all subgroups of a layer to open or close</div><div class='del'>-    proc ::tktree::switchlayer {win opn {layer /}} {</div><div class='del'>-      variable cfg</div><div class='del'>-      foreach child $cfg($win,$layer:subgroups) {</div><div class='del'>-        set cfg($win,$child:open) $opn</div><div class='del'>-        switchlayer $win $opn $child</div><div class='del'>-      }</div><div class='del'>-      buildwhenidle $win</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ####  will open or close the item given</div><div class='del'>-    proc ::tktree::switchstate {win item} {</div><div class='del'>-      set ::tktree::cfg($win,$item:open) [expr ! $::tktree::cfg($win,$item:open)]</div><div class='del'>-      buildwhenidle $win</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### Select the next item up or down</div><div class='del'>-    proc ::tktree::updown {win down} {</div><div class='del'>-      variable cfg</div><div class='del'>-      set index [lsearch -exact $cfg($win,sortlist) $cfg($win,selection)]</div><div class='del'>-      if {$down} {incr index} {incr index -1}</div><div class='del'>-      if {$index &lt; 0} {set index end} elseif {$index &gt;= [llength $cfg($win,sortlist)]} {set index 0}</div><div class='del'>-      setselection $win [lindex $cfg($win,sortlist) $index]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### left-right button binding commands</div><div class='del'>-    proc ::tktree::leftright {win right} {</div><div class='del'>-      variable cfg</div><div class='del'>-      set item $cfg($win,selection)</div><div class='del'>-      set index [lsearch -exact $cfg($win,sortlist) $item]</div><div class='del'>-      set parentindex [lsearch -exact $cfg($win,sortlist) [file dirname $item]]</div><div class='del'>-      if {$parentindex == -1} {set parentindex [expr $index - 1]}</div><div class='del'>-      if {$cfg($win,$item:group)} {</div><div class='del'>-        if {$right} {</div><div class='del'>-          if {$cfg($win,$item:open)} {incr index} {set cfg($win,$item:open) 1}</div><div class='del'>-        } else {</div><div class='del'>-          if {$cfg($win,$item:open)} {set cfg($win,$item:open) 0} {set index $parentindex}</div><div class='del'>-        }</div><div class='del'>-      } else {</div><div class='del'>-        if {$right} {incr index} {set index $parentindex}</div><div class='del'>-      }</div><div class='del'>-      if {$index &lt; 0} {set index end} elseif {$index &gt;= [llength $cfg($win,sortlist)]} {set index 0}</div><div class='del'>-      setselection $win [lindex $cfg($win,sortlist) $index]</div><div class='del'>-      buildwhenidle $win</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### will return the pathname of the item at x and y cooridinates</div><div class='del'>-    proc ::tktree::labelat {win x y} {</div><div class='del'>-      set x [$win canvasx $x]; set y [$win canvasy $y]</div><div class='del'>-      foreach m [$win find overlapping $x $y $x $y] {</div><div class='del'>-        if {[info exists ::tktree::cfg($win,tag:$m)]} {return $::tktree::cfg($win,tag:$m)}</div><div class='del'>-      }</div><div class='del'>-      return ""</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### will return the path of the current selection in the given tree widget</div><div class='del'>-    proc ::tktree::getselection {win} {</div><div class='del'>-      return $::tktree::cfg($win,selection)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### adjust the scrollview to show the selected item as needed</div><div class='del'>-    proc ::tktree::scrolladjust {win tag} {</div><div class='del'>-      update</div><div class='del'>-      set item [$win bbox $tag]</div><div class='del'>-      set region [$win cget -scrollregion]</div><div class='del'>-      foreach {axis idx1 idx2} {yview 1 3 xview 0 2} {</div><div class='del'>-        set range [expr abs([lindex $region $idx2]) - abs([lindex $region $idx1])]</div><div class='del'>-        set itemtop [lindex $item $idx1];  set itembot [lindex $item $idx2]</div><div class='del'>-        set viewtop [expr $range * [lindex [$win $axis] 0]]</div><div class='del'>-        set viewbot [expr $range * [lindex [$win $axis] 1]]</div><div class='del'>-        if {$itembot &gt; $viewbot} {$win $axis moveto [expr ($itembot. - $viewbot + $viewtop) / $range]}</div><div class='del'>-        if {$itemtop &lt; $viewtop} {$win $axis moveto [expr $itemtop. / $range]}</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### will set the current selection to the given item on the given tree</div><div class='del'>-    proc ::tktree::setselection {win item} {</div><div class='del'>-      variable cfg</div><div class='del'>-      if {![llength $cfg($win,sortlist)]} {return}</div><div class='del'>-      if {$item eq ""} {set item [lindex $cfg($win,sortlist) 0]}</div><div class='del'>-      if {![info exists cfg($win,$item:tag)]} {set item [lindex $cfg($win,sortlist) 0]}</div><div class='del'>-      if {[$win gettags $cfg($win,$item:tag)] ne ""} {</div><div class='del'>-        $win select from $cfg($win,$item:tag) 0</div><div class='del'>-        $win select to $cfg($win,$item:tag) end</div><div class='del'>-        set cfg($win,selection) $item</div><div class='del'>-        scrolladjust $win $cfg($win,$item:tag)</div><div class='del'>-      } {</div><div class='del'>-        setselection $win "/[lindex $cfg($win,/:sortlist) 0]"</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### will delete the item given from the tree given</div><div class='del'>-    proc ::tktree::delitem {win item} {</div><div class='del'>-      variable cfg</div><div class='del'>-      if {$item eq "/"} {</div><div class='del'>-        array unset cfg $win,* ; catch {destroy $win}</div><div class='del'>-      } {</div><div class='del'>-        set group [file dirname $item]</div><div class='del'>-        if {$cfg($win,$item:group)} {set type subgroups} {set type children}</div><div class='del'>-        set index [lsearch -exact $cfg($win,$group:$type) $item]</div><div class='del'>-        set cfg($win,$group:$type) [lreplace $cfg($win,$group:$type) $index $index]</div><div class='del'>-        array unset cfg $win,$item*</div><div class='del'>-        buildwhenidle $win</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### create a new item in the tree and rebuild the widget</div><div class='del'>-    proc ::tktree::newitem {win item args} {</div><div class='del'>-      variable cfg</div><div class='del'>-      if {[string index $item 0] ne "/"} {set item /$item}</div><div class='del'>-      if {[string index $item end] eq "/"} {</div><div class='del'>-        set subgroup 1</div><div class='del'>-        set type subgroups</div><div class='del'>-        set item [string range $item 0 end-1]</div><div class='del'>-        set cfg($win,$item:command) [list ::tktree::switchstate $win $item]</div><div class='del'>-      } {</div><div class='del'>-        set subgroup 0</div><div class='del'>-        set type children</div><div class='del'>-        set cfg($win,$item:command) {}</div><div class='del'>-      }</div><div class='del'>-      #Build parent group if needed</div><div class='del'>-      set group [file dirname $item]</div><div class='del'>-      if {![info exists cfg($win,$group:open)]} {newitem $win "$group\/"}</div><div class='del'>-      lappend cfg($win,$group:$type) $item</div><div class='del'>-      #Configure the new item</div><div class='del'>-      set cfg($win,$item:group) $subgroup</div><div class='del'>-      set cfg($win,$item:subgroups) {}</div><div class='del'>-      set cfg($win,$item:children) {}</div><div class='del'>-      set cfg($win,$item:sortlist) {}</div><div class='del'>-      set cfg($win,$item:tags) {}</div><div class='del'>-      set cfg($win,$item:open) 0</div><div class='del'>-      set cfg($win,$item:image) {}</div><div class='del'>-      set cfg($win,$item:textcolor) $cfg($win,textcolor)</div><div class='del'>-      set cfg($win,$item:font) $cfg($win,font)</div><div class='del'>-      if {$cfg($win,images)} {set cfg($win,$item:image) [eval list \$::tktree::img$type]}</div><div class='del'>-      foreach {confitem confval} $args {</div><div class='del'>-        switch -exact -- $confitem {</div><div class='del'>-          -textcolor  {set cfg($win,$item:textcolor) $confval}</div><div class='del'>-          -command    {set cfg($win,$item:command)   $confval}</div><div class='del'>-          -image      {set cfg($win,$item:image)     $confval}</div><div class='del'>-          -font       {set cfg($win,$item:font)      $confval}</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      buildwhenidle $win</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### Draw the given layer of the tree on the canvas starting at xposition</div><div class='del'>-    proc ::tktree::buildlayer {win layer xpos} {</div><div class='del'>-      variable cfg</div><div class='del'>-      #Record y positions for vertical line later on</div><div class='del'>-      set ystart $cfg($win,y); set yend $cfg($win,y)</div><div class='del'>-      if {$layer eq "/"} {set cfg($win,sortlist) ""}</div><div class='del'>-      foreach child $cfg($win,$layer:sortlist) {</div><div class='del'>-        lappend cfg($win,sortlist) $child</div><div class='del'>-        #Check spacing required for images</div><div class='del'>-        set imgwidth 0; set imgheight 0</div><div class='del'>-        if {[string length $cfg($win,$child:image)]} {</div><div class='del'>-          set imgwidth [expr  ([image width $cfg($win,$child:image)] + 2) / 2]</div><div class='del'>-          set imgheight [expr ([image height $cfg($win,$child:image)] + 2) / 2]</div><div class='del'>-        }</div><div class='del'>-        #find X-axis points for image, horiz line, and text</div><div class='del'>-        if {$imgwidth} {</div><div class='del'>-          set centerX [expr $imgwidth + $xpos + 7]</div><div class='del'>-          set rightX  [expr $xpos + 7]</div><div class='del'>-          set textX   [expr ($imgwidth * 2) + $xpos + 10]</div><div class='del'>-        } {</div><div class='del'>-          set centerX [expr $xpos + 10]</div><div class='del'>-          set rightX  [expr $centerX + 4]</div><div class='del'>-          set textX   [expr $rightX + 1]</div><div class='del'>-        }</div><div class='del'>-        #Find the proper amount to increment the y axis</div><div class='del'>-        set fontheight [lindex [font metrics $cfg($win,$child:font)] 5]</div><div class='del'>-        set yincr [expr ($fontheight + 1) / 2]</div><div class='del'>-        if {$imgheight &gt; $yincr} {set yincr $imgheight}</div><div class='del'>-        incr cfg($win,y) $yincr</div><div class='del'>-        #Draw the horizonal line</div><div class='del'>-        $win create line $xpos $cfg($win,y) $rightX $cfg($win,y) -fill $cfg($win,linecolor)</div><div class='del'>-        set yend $cfg($win,y)</div><div class='del'>-        #Draw the image, if it exists</div><div class='del'>-        if {$imgwidth} {</div><div class='del'>-          set it [$win create image $centerX $cfg($win,y) -image $cfg($win,$child:image)]</div><div class='del'>-          $win bind $it &lt;1&gt; [list ::tktree::setselection $win $child]</div><div class='del'>-        }</div><div class='del'>-        #Draw text and store tags for reference</div><div class='del'>-        set cfg($win,$child:tag) [$win create text $textX $cfg($win,y) \</div><div class='del'>-            -text [file tail $child] -font $cfg($win,$child:font) -anchor w -tags x -fill $cfg($win,$child:textcolor)]</div><div class='del'>-        set cfg($win,tag:$cfg($win,$child:tag)) $child</div><div class='del'>-        #Command binding</div><div class='del'>-        $win bind $cfg($win,$child:tag) &lt;1&gt; [list ::tktree::setselection $win $child]</div><div class='del'>-        $win bind $cfg($win,$child:tag) &lt;Double-1&gt; $cfg($win,$child:command)</div><div class='del'>-        #next step up on the y axis</div><div class='del'>-        incr cfg($win,y) $yincr</div><div class='del'>-        #If its a group, add open-close functionality</div><div class='del'>-        if {$cfg($win,$child:group)} {</div><div class='del'>-          if {$cfg($win,$child:open)} {set img collapse} {set img expand}</div><div class='del'>-          set ocimg [$win create image $xpos [expr $cfg($win,y) - $yincr] -image [eval list \$::tktree::img$img]]</div><div class='del'>-          $win bind $ocimg &lt;1&gt; [list ::tktree::switchstate $win $child]</div><div class='del'>-          if {$cfg($win,$child:open)} {buildlayer $win $child $centerX}</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      #Vertical line</div><div class='del'>-      $win lower [$win create line $xpos [expr $ystart - 7] $xpos $yend -fill $cfg($win,linecolor)]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### sort the layer by subgroups then children</div><div class='del'>-    proc ::tktree::sortlayer {win {layer /}} {</div><div class='del'>-      variable cfg</div><div class='del'>-      set cfg($win,$layer:subgroups) [lsort -dictionary $cfg($win,$layer:subgroups)]</div><div class='del'>-      set cfg($win,$layer:children) [lsort -dictionary $cfg($win,$layer:children)]</div><div class='del'>-      set cfg($win,$layer:sortlist) [join [list $cfg($win,$layer:subgroups) $cfg($win,$layer:children)]]</div><div class='del'>-      foreach group $cfg($win,$layer:subgroups) {sortlayer $win $group}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### build the tree at the given path</div><div class='del'>-    proc ::tktree::buildtree {win} {</div><div class='del'>-      variable cfg</div><div class='del'>-      $win delete all</div><div class='del'>-      sortlayer $win</div><div class='del'>-      set xpos 5</div><div class='del'>-      set cfg($win,y) 5</div><div class='del'>-      #Draw global expand/contract button, if needed</div><div class='del'>-      if {[string length $cfg($win,/:subgroups)] &amp;&amp; $cfg($win,expandall)} {</div><div class='del'>-        set exp 0</div><div class='del'>-        foreach subgroup $cfg($win,/:subgroups) {incr exp $cfg($win,$subgroup:open)}</div><div class='del'>-        if {$exp} {set type collapse} {set type expand}</div><div class='del'>-        set ocimg [$win create image 1 1 -image [eval list \$::tktree::img$type] -anchor w]</div><div class='del'>-        $win bind $ocimg &lt;1&gt; [list ::tktree::switchlayer $win [expr ! $exp]]</div><div class='del'>-      }</div><div class='del'>-      #Build the layers and set initial selection</div><div class='del'>-      buildlayer $win / $xpos</div><div class='del'>-      $win config -scrollregion [$win bbox all]</div><div class='del'>-      setselection $win $cfg($win,selection)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### internal use - set up a handle to build the tree when everything is idle</div><div class='del'>-    proc ::tktree::buildwhenidle {win} {</div><div class='del'>-      catch {after cancel $::tktree::cfg($win,buildHandle)}</div><div class='del'>-      set ::tktree::cfg($win,buildHandle) [after idle [list ::tktree::buildtree $win]]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    #### will create a new tree widget at the given path</div><div class='del'>-    proc ::tktree::treecreate {win args} {</div><div class='del'>-      variable cfg</div><div class='del'>-      #Default configuration for new tree</div><div class='del'>-      set cfg($win,selection) {}</div><div class='del'>-      set cfg($win,selidx) {}</div><div class='del'>-      set cfg($win,/:subgroups) {}</div><div class='del'>-      set cfg($win,/:children) {}</div><div class='del'>-      set cfg($win,/:open) 1</div><div class='del'>-      set cfg($win,images) 1</div><div class='del'>-      set cfg($win,expandall) 1</div><div class='del'>-      set cfg($win,linecolor)  black</div><div class='del'>-      set cfg($win,textcolor)  black</div><div class='del'>-      set cfg($win,font) {-family Helvetica -size 10}</div><div class='del'>-      #Parse and setup custom configuration options</div><div class='del'>-      set canvascfg ""</div><div class='del'>-      foreach {item val} $args {</div><div class='del'>-        switch -- $item {</div><div class='del'>-          -linecolor            {set cfg($win,linecolor) $val}</div><div class='del'>-          -textcolor            {set cfg($win,textcolor) $val}</div><div class='del'>-          -font                 {set cfg($win,font) $val}</div><div class='del'>-          -images               {set cfg($win,images) $val}</div><div class='del'>-          -expandall            {set cfg($win,expandall) $val}</div><div class='del'>-          default               {lappend canvascfg $item $val}</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      #Build the canvas</div><div class='del'>-      eval {canvas $win -takefocus 1} $canvascfg</div><div class='del'>-      bind $win &lt;Destroy&gt; [list ::tktree::delitem $win /]</div><div class='del'>-      bind $win &lt;1&gt;  [list focus $win]</div><div class='del'>-      bind $win &lt;Return&gt; {eval $::tktree::cfg(%W,[::tktree::getselection %W]:command)}</div><div class='del'>-      bind $win &lt;space&gt; {eval $::tktree::cfg(%W,[::tktree::getselection %W]:command)}</div><div class='del'>-      bind $win &lt;Up&gt;    [list ::tktree::updown $win 0]</div><div class='del'>-      bind $win &lt;Down&gt;    [list ::tktree::updown $win 1]</div><div class='del'>-      bind $win &lt;Left&gt;    [list ::tktree::leftright $win 0]</div><div class='del'>-      bind $win &lt;Right&gt;    [list ::tktree::leftright $win 1]</div><div class='del'>-</div><div class='del'>-      #Build the tree when idle</div><div class='del'>-      buildwhenidle $win</div><div class='del'>-    }</div><div class='del'>- }</div><div class='del'>-</div><div class='head'>diff --git a/ext/tk/sample/ttk_wrapper.rb b/ext/tk/sample/ttk_wrapper.rb<br/>deleted file mode 100644<br/>index 1580668994..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/sample/ttk_wrapper.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/sample/ttk_wrapper.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,154 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#</div><div class='del'>-#  ttk_wrapper.rb  --  use Ttk widgets as default on old Ruby/Tk scripts</div><div class='del'>-#</div><div class='del'>-#                       by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)</div><div class='del'>-#</div><div class='del'>-version = '0.1.3'</div><div class='del'>-#</div><div class='del'>-##########################################################################</div><div class='del'>-#  parse commandline arguments</div><div class='del'>-##########################################################################</div><div class='del'>-require 'optparse'</div><div class='del'>-opt = OptionParser.new("Usage: #{$0} [options] rubytk_script" &lt;&lt; "\n    " &lt;&lt; </div><div class='del'>-                         "Ruby/Tk script wrapper. Use Ttk widgets as default.")</div><div class='del'>-opt.version = version</div><div class='del'>-</div><div class='del'>-OPTS = {}</div><div class='del'>-OPTS[:themedir] = []</div><div class='del'>-OPTS[:rb_theme] = []</div><div class='del'>-OPTS[:theme] = 'default'</div><div class='del'>-</div><div class='del'>-opt.on('-l', '--list', 'list available theme names'){|v| OPTS[:list] = true}</div><div class='del'>-opt.on('-t', '--theme theme', 'theme name'){|v| OPTS[:theme] = v}</div><div class='del'>-opt.on('-d', '--themedir themes_dir', 'directory of theme definitions'){|v| </div><div class='del'>-  OPTS[:themedir] &lt;&lt; v</div><div class='del'>-}</div><div class='del'>-opt.on('-r', '--rubytheme rb_theme', 'theme definition file (ruby script)'){|v|</div><div class='del'>-  OPTS[:rb_theme] &lt;&lt; v</div><div class='del'>-}</div><div class='del'>-opt.on('-v', '--verbose', 'print verbose messages'){|v| OPTS[:verbose] = true}</div><div class='del'>-</div><div class='del'>-opt.parse!(ARGV)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-##########################################################################</div><div class='del'>-#  load Ttk (Tile) extension</div><div class='del'>-##########################################################################</div><div class='del'>-require 'tk'</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  require 'tkextlib/tile'</div><div class='del'>-  Tk.default_widget_set = :Ttk</div><div class='del'>-rescue LoadError</div><div class='del'>-  if OPTS[:verbose]</div><div class='del'>-    print "warning: fail to load 'Ttk' extension. use standard widgets.\n" </div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if OPTS[:verbose]</div><div class='del'>-  print "current default widget set is '#{Tk.default_widget_set}'\n"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-##########################################################################</div><div class='del'>-# define Tcl/Tk procedures for compatibility.</div><div class='del'>-# those are required when want to use themes included </div><div class='del'>-# in "sample/tkextlib/tile/demo.rb".</div><div class='del'>-##########################################################################</div><div class='del'>-Tk::Tile.__define_LoadImages_proc_for_compatibility__!</div><div class='del'>-Tk::Tile::Style.__define_wrapper_proc_for_compatibility__!</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-##########################################################################</div><div class='del'>-#  use themes defined on the demo of Ttk (Tile) extension</div><div class='del'>-##########################################################################</div><div class='del'>-demodir = File.dirname(__FILE__)</div><div class='del'>-demo_themesdir = File.expand_path(File.join(demodir, 'tkextlib', 'tile', 'themes'))</div><div class='del'>-</div><div class='del'>-Tk::AUTO_PATH.lappend(*OPTS[:themedir]) unless OPTS[:themedir].empty?</div><div class='del'>-Tk::AUTO_PATH.lappend('.', demodir, demo_themesdir)</div><div class='del'>-</div><div class='del'>-OPTS[:themedir] &lt;&lt; demo_themesdir</div><div class='del'>-print "theme-dirs: #{OPTS[:themedir].inspect}\n" if OPTS[:verbose]</div><div class='del'>-</div><div class='del'>-OPTS[:themedir].each{|themesdir|</div><div class='del'>-  if File.directory?(themesdir)</div><div class='del'>-    Dir.foreach(themesdir){|name|</div><div class='del'>-      next if name == '.' || name == '..'</div><div class='del'>-      path = File.join(themesdir, name)</div><div class='del'>-      Tk::AUTO_PATH.lappend(path) if File.directory?(path)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# This forces an update of the available packages list. It's required</div><div class='del'>-# for package names to find the themes in demos/themes/*.tcl</div><div class='del'>-Tk.ip_eval("#{TkPackage.unknown_proc}  Tcl #{TkPackage.provide('Tcl')}")</div><div class='del'>-</div><div class='del'>-# load themes written in Ruby.</div><div class='del'>-themes_by_ruby = [File.join(demo_themesdir, 'kroc.rb')]</div><div class='del'>-themes_by_ruby.concat OPTS[:rb_theme]</div><div class='del'>-print "ruby-themes: #{themes_by_ruby.inspect}\n" if OPTS[:verbose]</div><div class='del'>-</div><div class='del'>-themes_by_ruby.each{|f|</div><div class='del'>-  begin</div><div class='del'>-    load(f, true)</div><div class='del'>-  rescue LoadError</div><div class='del'>-    print "fail to load \"#{f}\"\n" if OPTS[:verbose]</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'>-# ignore unsupported options of Ttk widgets</div><div class='del'>-##########################################################################</div><div class='del'>-TkConfigMethod.__set_IGNORE_UNKNOWN_CONFIGURE_OPTION__! true</div><div class='del'>-TkItemConfigMethod.__set_IGNORE_UNKNOWN_CONFIGURE_OPTION__! true</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-##########################################################################</div><div class='del'>-#  set theme of widget style</div><div class='del'>-##########################################################################</div><div class='del'>-if OPTS[:list] || OPTS[:verbose]</div><div class='del'>-  print "supported theme names: #{Tk::Tile.themes.inspect}\n" </div><div class='del'>-  exit if OPTS[:list] &amp;&amp; ARGV.empty?</div><div class='del'>-end</div><div class='del'>-print "use theme: \"#{OPTS[:theme]}\"\n" if OPTS[:theme] &amp;&amp; OPTS[:verbose]</div><div class='del'>-#setTheme(OPTS[:theme]) if OPTS[:theme]</div><div class='del'>-Tk::Tile.set_theme(OPTS[:theme]) if OPTS[:theme]</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-##########################################################################</div><div class='del'>-#  replace $0 and $RPAGRAM_NAME</div><div class='del'>-##########################################################################</div><div class='del'>-#  When the expand_path of the target script is long, ruby sometimes </div><div class='del'>-#  fails to set the path to $0 (the path string is trimmed).</div><div class='del'>-#  The following replaces $0 and $PROGNAME to avoid such trouble.</div><div class='del'>-progname_obj = $0.dup</div><div class='del'>-$program_name = progname_obj</div><div class='del'>-</div><div class='del'>-alias $REAL_PROGRAM_NAME $0</div><div class='del'>-alias $PROGRAM_NAME $program_name</div><div class='del'>-alias $0 $program_name</div><div class='del'>-</div><div class='del'>-trace_var(:$program_name){|val|</div><div class='del'>-  unless progname_obj.object_id == val.object_id</div><div class='del'>-    progname_obj.replace(val.to_s)</div><div class='del'>-    $program_name = progname_obj</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'>-#  load script</div><div class='del'>-##########################################################################</div><div class='del'>-if (path = ARGV.shift) &amp;&amp; (script = File.expand_path(path))</div><div class='del'>-  print "load script \"#{script}\"\n" if OPTS[:verbose]</div><div class='del'>-  $0 = script</div><div class='del'>-  load(script)</div><div class='del'>-else</div><div class='del'>-  print "Error: no script is given.\n"</div><div class='del'>-  print opt.help</div><div class='del'>-  exit(1)</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/stubs.c b/ext/tk/stubs.c<br/>deleted file mode 100644<br/>index 6d3b330f0e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/stubs.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/stubs.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,564 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  stubs.c - Tcl/Tk stubs support</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "stubs.h"</div><div class='del'>-#include &lt;tcl.h&gt;</div><div class='del'>-#include &lt;tk.h&gt;</div><div class='del'>-</div><div class='del'>-/*------------------------------*/</div><div class='del'>-</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-# include &lt;tkMac.h&gt;</div><div class='del'>-# include &lt;Quickdraw.h&gt;</div><div class='del'>-</div><div class='del'>-static int call_macinit = 0;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-_macinit()</div><div class='del'>-{</div><div class='del'>-    if (!call_macinit) {</div><div class='del'>-        tcl_macQdPtr = &amp;qd; /* setup QuickDraw globals */</div><div class='del'>-        Tcl_MacSetEventProc(TkMacConvertEvent); /* setup event handler */</div><div class='del'>-        call_macinit = 1;</div><div class='del'>-    }</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'>-static int nativethread_checked = 0;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-_nativethread_consistency_check(ip)</div><div class='del'>-    Tcl_Interp *ip;</div><div class='del'>-{</div><div class='del'>-    if (nativethread_checked || ip == (Tcl_Interp *)NULL) {</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* If the variable "tcl_platform(threaded)" exists,  </div><div class='del'>-       then the Tcl interpreter was compiled with threads enabled. */</div><div class='del'>-    if (Tcl_GetVar2(ip, "tcl_platform", "threaded", TCL_GLOBAL_ONLY) != (char*)NULL) {</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-        /* consistent */</div><div class='del'>-#else</div><div class='del'>-        rb_warn("Inconsistency. Loaded Tcl/Tk libraries are enabled nativethread-support. But `tcltklib' is not. The inconsistency causes SEGV or other troubles frequently.");</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-        rb_warning("Inconsistency.`tcltklib' is enabled nativethread-support. But loaded Tcl/Tk libraries are not. (Probably, the inconsistency doesn't cause any troubles.)");</div><div class='del'>-#else</div><div class='del'>-        /* consistent */</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(ip);</div><div class='del'>-</div><div class='del'>-    nativethread_checked = 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*------------------------------*/</div><div class='del'>-</div><div class='del'>-#if defined USE_TCL_STUBS &amp;&amp; defined USE_TK_STUBS</div><div class='del'>-</div><div class='del'>-#if defined _WIN32 || defined __CYGWIN__</div><div class='del'>-# include "util.h"</div><div class='del'>-# include &lt;windows.h&gt;</div><div class='del'>-  typedef HINSTANCE DL_HANDLE;</div><div class='del'>-# define DL_OPEN LoadLibrary</div><div class='del'>-# define DL_SYM GetProcAddress</div><div class='del'>-# define TCL_INDEX 4</div><div class='del'>-# define TK_INDEX 3</div><div class='del'>-# define TCL_NAME "tcl89%s"</div><div class='del'>-# define TK_NAME "tk89%s"</div><div class='del'>-# undef DLEXT</div><div class='del'>-# define DLEXT ".dll"</div><div class='del'>-#elif defined HAVE_DLOPEN</div><div class='del'>-# include &lt;dlfcn.h&gt;</div><div class='del'>-  typedef void *DL_HANDLE;</div><div class='del'>-# define DL_OPEN(file) dlopen(file, RTLD_LAZY|RTLD_GLOBAL)</div><div class='del'>-# define DL_SYM dlsym</div><div class='del'>-# define TCL_INDEX 8</div><div class='del'>-# define TK_INDEX 7</div><div class='del'>-# define TCL_NAME "libtcl8.9%s"</div><div class='del'>-# define TK_NAME "libtk8.9%s"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static DL_HANDLE tcl_dll = (DL_HANDLE)0;</div><div class='del'>-static DL_HANDLE tk_dll  = (DL_HANDLE)0;</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_open_tcl_dll(char *appname)</div><div class='del'>-#else</div><div class='del'>-ruby_open_tcl_dll(appname)</div><div class='del'>-    char *appname;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    void (*p_Tcl_FindExecutable)(const char *);</div><div class='del'>-    int n;</div><div class='del'>-    char *ruby_tcl_dll = 0;</div><div class='del'>-    char tcl_name[20];</div><div class='del'>-</div><div class='del'>-    if (tcl_dll) return TCLTK_STUBS_OK;</div><div class='del'>-</div><div class='del'>-    ruby_tcl_dll = getenv("RUBY_TCL_DLL");</div><div class='del'>-#if defined _WIN32</div><div class='del'>-    if (ruby_tcl_dll) ruby_tcl_dll = ruby_strdup(ruby_tcl_dll);</div><div class='del'>-#endif</div><div class='del'>-    if (ruby_tcl_dll) {</div><div class='del'>-        tcl_dll = (DL_HANDLE)DL_OPEN(ruby_tcl_dll);</div><div class='del'>-    } else {</div><div class='del'>-        snprintf(tcl_name, sizeof tcl_name, TCL_NAME, DLEXT);</div><div class='del'>-        /* examine from 8.9 to 8.1 */</div><div class='del'>-        for (n = '9'; n &gt; '0'; n--) {</div><div class='del'>-            tcl_name[TCL_INDEX] = n;</div><div class='del'>-            tcl_dll = (DL_HANDLE)DL_OPEN(tcl_name);</div><div class='del'>-            if (tcl_dll)</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if defined _WIN32</div><div class='del'>-    if (ruby_tcl_dll) ruby_xfree(ruby_tcl_dll);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (!tcl_dll)</div><div class='del'>-        return NO_TCL_DLL;</div><div class='del'>-</div><div class='del'>-    p_Tcl_FindExecutable = (void (*)(const char *))DL_SYM(tcl_dll, "Tcl_FindExecutable");</div><div class='del'>-    if (!p_Tcl_FindExecutable)</div><div class='del'>-        return NO_FindExecutable;</div><div class='del'>-</div><div class='del'>-    if (appname) {</div><div class='del'>-        p_Tcl_FindExecutable(appname);</div><div class='del'>-    } else {</div><div class='del'>-        p_Tcl_FindExecutable("ruby");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ruby_open_tk_dll()</div><div class='del'>-{</div><div class='del'>-    int n;</div><div class='del'>-    char *ruby_tk_dll = 0;</div><div class='del'>-    char tk_name[20];</div><div class='del'>-</div><div class='del'>-    if (!tcl_dll) {</div><div class='del'>-        /* int ret = ruby_open_tcl_dll(RSTRING_PTR(rb_argv0)); */</div><div class='del'>-        int ret = ruby_open_tcl_dll(rb_argv0 ? RSTRING_PTR(rb_argv0) : 0);</div><div class='del'>-        if (ret != TCLTK_STUBS_OK) return ret;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (tk_dll) return TCLTK_STUBS_OK;</div><div class='del'>-</div><div class='del'>-    ruby_tk_dll = getenv("RUBY_TK_DLL");</div><div class='del'>-    if (ruby_tk_dll) {</div><div class='del'>-        tk_dll = (DL_HANDLE)DL_OPEN(ruby_tk_dll);</div><div class='del'>-    } else {</div><div class='del'>-        snprintf(tk_name, sizeof tk_name, TK_NAME, DLEXT);</div><div class='del'>-        /* examine from 8.9 to 8.1 */</div><div class='del'>-        for (n = '9'; n &gt; '0'; n--) {</div><div class='del'>-            tk_name[TK_INDEX] = n;</div><div class='del'>-            tk_dll = (DL_HANDLE)DL_OPEN(tk_name);</div><div class='del'>-            if (tk_dll)</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!tk_dll)</div><div class='del'>-        return NO_TK_DLL;</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_open_tcltk_dll(char *appname)</div><div class='del'>-#else</div><div class='del'>-ruby_open_tcltk_dll(appname)</div><div class='del'>-    char *appname;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    return( ruby_open_tcl_dll(appname) || ruby_open_tk_dll() );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-tcl_stubs_init_p()</div><div class='del'>-{</div><div class='del'>-    return(tclStubsPtr != (TclStubs*)NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-tk_stubs_init_p()</div><div class='del'>-{</div><div class='del'>-    return(tkStubsPtr != (TkStubs*)NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-Tcl_Interp *</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_tcl_create_ip_and_stubs_init(int *st)</div><div class='del'>-#else</div><div class='del'>-ruby_tcl_create_ip_and_stubs_init(st)</div><div class='del'>-    int *st;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    Tcl_Interp *tcl_ip;</div><div class='del'>-</div><div class='del'>-    if (st) *st = 0;</div><div class='del'>-</div><div class='del'>-    if (tcl_stubs_init_p()) {</div><div class='del'>-        tcl_ip = Tcl_CreateInterp();</div><div class='del'>-</div><div class='del'>-        if (!tcl_ip) {</div><div class='del'>-            if (st) *st = FAIL_CreateInterp;</div><div class='del'>-            return (Tcl_Interp*)NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        _nativethread_consistency_check(tcl_ip);</div><div class='del'>-</div><div class='del'>-        return tcl_ip;</div><div class='del'>-</div><div class='del'>-    } else {</div><div class='del'>-        Tcl_Interp *(*p_Tcl_CreateInterp)();</div><div class='del'>-        Tcl_Interp *(*p_Tcl_DeleteInterp)();</div><div class='del'>-</div><div class='del'>-        if (!tcl_dll) {</div><div class='del'>-            /* int ret = ruby_open_tcl_dll(RSTRING_PTR(rb_argv0)); */</div><div class='del'>-            int ret = ruby_open_tcl_dll(rb_argv0 ? RSTRING_PTR(rb_argv0) : 0);</div><div class='del'>-</div><div class='del'>-            if (ret != TCLTK_STUBS_OK) {</div><div class='del'>-                if (st) *st = ret;</div><div class='del'>-                return (Tcl_Interp*)NULL;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        p_Tcl_CreateInterp </div><div class='del'>-            = (Tcl_Interp *(*)())DL_SYM(tcl_dll, "Tcl_CreateInterp");</div><div class='del'>-        if (!p_Tcl_CreateInterp) {</div><div class='del'>-            if (st) *st = NO_CreateInterp;</div><div class='del'>-            return (Tcl_Interp*)NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        p_Tcl_DeleteInterp </div><div class='del'>-            = (Tcl_Interp *(*)())DL_SYM(tcl_dll, "Tcl_DeleteInterp");</div><div class='del'>-        if (!p_Tcl_DeleteInterp) {</div><div class='del'>-            if (st) *st = NO_DeleteInterp;</div><div class='del'>-            return (Tcl_Interp*)NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        tcl_ip = (*p_Tcl_CreateInterp)();</div><div class='del'>-        if (!tcl_ip) {</div><div class='del'>-            if (st) *st = FAIL_CreateInterp;</div><div class='del'>-            return (Tcl_Interp*)NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!Tcl_InitStubs(tcl_ip, "8.1", 0)) {</div><div class='del'>-            if (st) *st = FAIL_Tcl_InitStubs;</div><div class='del'>-            (*p_Tcl_DeleteInterp)(tcl_ip);</div><div class='del'>-            return (Tcl_Interp*)NULL;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        _nativethread_consistency_check(tcl_ip);</div><div class='del'>-</div><div class='del'>-        return tcl_ip;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ruby_tcl_stubs_init()</div><div class='del'>-{</div><div class='del'>-    int st;</div><div class='del'>-    Tcl_Interp *tcl_ip;</div><div class='del'>-</div><div class='del'>-    if (!tcl_stubs_init_p()) {</div><div class='del'>-        tcl_ip = ruby_tcl_create_ip_and_stubs_init(&amp;st);</div><div class='del'>-</div><div class='del'>-        if (!tcl_ip) return st;</div><div class='del'>-</div><div class='del'>-        Tcl_DeleteInterp(tcl_ip);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_tk_stubs_init(Tcl_Interp *tcl_ip)</div><div class='del'>-#else</div><div class='del'>-ruby_tk_stubs_init(tcl_ip)</div><div class='del'>-    Tcl_Interp *tcl_ip;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    Tcl_ResetResult(tcl_ip);</div><div class='del'>-</div><div class='del'>-    if (tk_stubs_init_p()) {</div><div class='del'>-        if (Tk_Init(tcl_ip) == TCL_ERROR) {</div><div class='del'>-            return FAIL_Tk_Init;</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        int (*p_Tk_Init)(Tcl_Interp *);</div><div class='del'>-</div><div class='del'>-        if (!tk_dll) {</div><div class='del'>-            int ret = ruby_open_tk_dll();</div><div class='del'>-            if (ret != TCLTK_STUBS_OK) return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        p_Tk_Init = (int (*)(Tcl_Interp *))DL_SYM(tk_dll, "Tk_Init");</div><div class='del'>-        if (!p_Tk_Init)</div><div class='del'>-            return NO_Tk_Init;</div><div class='del'>-</div><div class='del'>-        if ((*p_Tk_Init)(tcl_ip) == TCL_ERROR)</div><div class='del'>-            return FAIL_Tk_Init;</div><div class='del'>-</div><div class='del'>-        if (!Tk_InitStubs(tcl_ip, "8.1", 0))</div><div class='del'>-            return FAIL_Tk_InitStubs;</div><div class='del'>-</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-        _macinit();</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_tk_stubs_safeinit(Tcl_Interp *tcl_ip)</div><div class='del'>-#else</div><div class='del'>-ruby_tk_stubs_safeinit(tcl_ip)</div><div class='del'>-    Tcl_Interp *tcl_ip;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    Tcl_ResetResult(tcl_ip);</div><div class='del'>-</div><div class='del'>-    if (tk_stubs_init_p()) {</div><div class='del'>-        if (Tk_SafeInit(tcl_ip) == TCL_ERROR)</div><div class='del'>-            return FAIL_Tk_Init;</div><div class='del'>-    } else {</div><div class='del'>-        int (*p_Tk_SafeInit)(Tcl_Interp *);</div><div class='del'>-</div><div class='del'>-        if (!tk_dll) {</div><div class='del'>-            int ret = ruby_open_tk_dll();</div><div class='del'>-            if (ret != TCLTK_STUBS_OK) return ret;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        p_Tk_SafeInit = (int (*)(Tcl_Interp *))DL_SYM(tk_dll, "Tk_SafeInit");</div><div class='del'>-        if (!p_Tk_SafeInit)</div><div class='del'>-            return NO_Tk_Init;</div><div class='del'>-</div><div class='del'>-        if ((*p_Tk_SafeInit)(tcl_ip) == TCL_ERROR)</div><div class='del'>-            return FAIL_Tk_Init;</div><div class='del'>-</div><div class='del'>-        if (!Tk_InitStubs(tcl_ip, "8.1", 0))</div><div class='del'>-            return FAIL_Tk_InitStubs;</div><div class='del'>-</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-        _macinit();</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ruby_tcltk_stubs()</div><div class='del'>-{</div><div class='del'>-    int st;</div><div class='del'>-    Tcl_Interp *tcl_ip;</div><div class='del'>-</div><div class='del'>-    /* st = ruby_open_tcltk_dll(RSTRING_PTR(rb_argv0)); */</div><div class='del'>-    st = ruby_open_tcltk_dll(rb_argv0 ? RSTRING_PTR(rb_argv0) : 0);</div><div class='del'>-    switch(st) {</div><div class='del'>-    case NO_FindExecutable:</div><div class='del'>-        return -7;</div><div class='del'>-    case NO_TCL_DLL:</div><div class='del'>-    case NO_TK_DLL:</div><div class='del'>-        return -1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    tcl_ip = ruby_tcl_create_ip_and_stubs_init(&amp;st);</div><div class='del'>-    if (!tcl_ip) {</div><div class='del'>-        switch(st) {</div><div class='del'>-        case NO_CreateInterp:</div><div class='del'>-        case NO_DeleteInterp:</div><div class='del'>-            return -2;</div><div class='del'>-        case FAIL_CreateInterp:</div><div class='del'>-            return -3;</div><div class='del'>-        case FAIL_Tcl_InitStubs:</div><div class='del'>-            return -5;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    st = ruby_tk_stubs_init(tcl_ip);</div><div class='del'>-    switch(st) {</div><div class='del'>-    case NO_Tk_Init:</div><div class='del'>-        Tcl_DeleteInterp(tcl_ip);</div><div class='del'>-        return -4;</div><div class='del'>-    case FAIL_Tk_Init:</div><div class='del'>-    case FAIL_Tk_InitStubs:</div><div class='del'>-        Tcl_DeleteInterp(tcl_ip);</div><div class='del'>-        return -6;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_DeleteInterp(tcl_ip);</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'>-#else /* ! USE_TCL_STUBS || ! USE_TK_STUBS) */</div><div class='del'>-/*###################################################*/</div><div class='del'>-</div><div class='del'>-static int open_tcl_dll = 0;</div><div class='del'>-static int call_tk_stubs_init = 0;</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_open_tcl_dll(char *appname)</div><div class='del'>-#else</div><div class='del'>-ruby_open_tcl_dll(appname)</div><div class='del'>-    char *appname;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    if (appname) {</div><div class='del'>-        Tcl_FindExecutable(appname);</div><div class='del'>-    } else {</div><div class='del'>-        Tcl_FindExecutable("ruby");</div><div class='del'>-    }</div><div class='del'>-    open_tcl_dll = 1;</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-ruby_open_tk_dll()</div><div class='del'>-{</div><div class='del'>-    if (!open_tcl_dll) {</div><div class='del'>-        /* ruby_open_tcl_dll(RSTRING_PTR(rb_argv0)); */</div><div class='del'>-        ruby_open_tcl_dll(rb_argv0 ? RSTRING_PTR(rb_argv0) : 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_open_tcltk_dll(char *appname)</div><div class='del'>-#else</div><div class='del'>-ruby_open_tcltk_dll(appname)</div><div class='del'>-    char *appname;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    return( ruby_open_tcl_dll(appname) || ruby_open_tk_dll() );</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-tcl_stubs_init_p()</div><div class='del'>-{</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-tk_stubs_init_p()</div><div class='del'>-{</div><div class='del'>-    return call_tk_stubs_init;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-Tcl_Interp *</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_tcl_create_ip_and_stubs_init(int *st)</div><div class='del'>-#else</div><div class='del'>-ruby_tcl_create_ip_and_stubs_init(st)</div><div class='del'>-    int *st;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    Tcl_Interp *tcl_ip;</div><div class='del'>-</div><div class='del'>-    if (!open_tcl_dll) {</div><div class='del'>-        /* ruby_open_tcl_dll(RSTRING_PTR(rb_argv0)); */</div><div class='del'>-        ruby_open_tcl_dll(rb_argv0 ? RSTRING_PTR(rb_argv0) : 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (st) *st = 0;</div><div class='del'>-    tcl_ip = Tcl_CreateInterp();</div><div class='del'>-    if (!tcl_ip) {</div><div class='del'>-        if (st) *st = FAIL_CreateInterp;</div><div class='del'>-        return (Tcl_Interp*)NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    _nativethread_consistency_check(tcl_ip);</div><div class='del'>-</div><div class='del'>-    return tcl_ip;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-ruby_tcl_stubs_init()</div><div class='del'>-{</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_tk_stubs_init(Tcl_Interp *tcl_ip)</div><div class='del'>-#else</div><div class='del'>-ruby_tk_stubs_init(tcl_ip)</div><div class='del'>-    Tcl_Interp *tcl_ip;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    if (Tk_Init(tcl_ip) == TCL_ERROR)</div><div class='del'>-        return FAIL_Tk_Init;</div><div class='del'>-</div><div class='del'>-    if (!call_tk_stubs_init) {</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-        _macinit();</div><div class='del'>-#endif</div><div class='del'>-        call_tk_stubs_init = 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-ruby_tk_stubs_safeinit(Tcl_Interp *tcl_ip)</div><div class='del'>-#else</div><div class='del'>-ruby_tk_stubs_safeinit(tcl_ip)</div><div class='del'>-    Tcl_Interp *tcl_ip;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    if (Tk_SafeInit(tcl_ip) == TCL_ERROR)</div><div class='del'>-        return FAIL_Tk_Init;</div><div class='del'>-</div><div class='del'>-    if (!call_tk_stubs_init) {</div><div class='del'>-#ifdef __MACOS__</div><div class='del'>-        _macinit();</div><div class='del'>-#endif</div><div class='del'>-        call_tk_stubs_init = 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return TCLTK_STUBS_OK;</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-</div><div class='del'>-    return FAIL_Tk_Init;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int </div><div class='del'>-ruby_tcltk_stubs()</div><div class='del'>-{</div><div class='del'>-    /* Tcl_FindExecutable(RSTRING_PTR(rb_argv0)); */</div><div class='del'>-    Tcl_FindExecutable(rb_argv0 ? RSTRING_PTR(rb_argv0) : 0);</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif</div><div class='head'>diff --git a/ext/tk/stubs.h b/ext/tk/stubs.h<br/>deleted file mode 100644<br/>index 7c913fb393..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/stubs.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/stubs.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#include &lt;tcl.h&gt;</div><div class='del'>-</div><div class='del'>-extern int ruby_open_tcl_dll(char *);</div><div class='del'>-extern int ruby_open_tk_dll();</div><div class='del'>-extern int ruby_open_tcltk_dll(char *);</div><div class='del'>-extern int tcl_stubs_init_p();</div><div class='del'>-extern int tk_stubs_init_p();</div><div class='del'>-extern Tcl_Interp *ruby_tcl_create_ip_and_stubs_init(int*);</div><div class='del'>-extern int ruby_tcl_stubs_init();</div><div class='del'>-extern int ruby_tk_stubs_init(Tcl_Interp*);</div><div class='del'>-extern int ruby_tk_stubs_safeinit(Tcl_Interp*);</div><div class='del'>-extern int ruby_tcltk_stubs();</div><div class='del'>-</div><div class='del'>-/* no error */</div><div class='del'>-#define TCLTK_STUBS_OK     (0)</div><div class='del'>-</div><div class='del'>-/* return value of ruby_open_tcl_dll() */</div><div class='del'>-#define NO_TCL_DLL         (1)</div><div class='del'>-#define NO_FindExecutable  (2)</div><div class='del'>-</div><div class='del'>-/* return value of ruby_open_tk_dll() */</div><div class='del'>-#define NO_TK_DLL         (-1)</div><div class='del'>-</div><div class='del'>-/* status value of ruby_tcl_create_ip_and_stubs_init(st) */</div><div class='del'>-#define NO_CreateInterp    (3)</div><div class='del'>-#define NO_DeleteInterp    (4)</div><div class='del'>-#define FAIL_CreateInterp  (5)</div><div class='del'>-#define FAIL_Tcl_InitStubs (6)</div><div class='del'>-</div><div class='del'>-/* return value of ruby_tk_stubs_init() */</div><div class='del'>-#define NO_Tk_Init         (7)</div><div class='del'>-#define FAIL_Tk_Init       (8)</div><div class='del'>-#define FAIL_Tk_InitStubs  (9)</div><div class='head'>diff --git a/ext/tk/tcltklib.c b/ext/tk/tcltklib.c<br/>deleted file mode 100644<br/>index 8701cfef27..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/tcltklib.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tcltklib.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10258 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- *      tcltklib.c</div><div class='del'>- *              Aug. 27, 1997   Y. Shigehiro</div><div class='del'>- *              Oct. 24, 1997   Y. Matsumoto</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#define TCLTKLIB_RELEASE_DATE "2008-05-23"</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-/* #include "ruby/ruby.h" */</div><div class='del'>-#include "ruby/signal.h"</div><div class='del'>-#include "ruby/encoding.h"</div><div class='del'>-#else</div><div class='del'>-/* #include "ruby.h" */</div><div class='del'>-#include "rubysig.h"</div><div class='del'>-#include "version.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#undef EXTERN   /* avoid conflict with tcl.h of tcl8.2 or before */</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-#include &lt;stdarg.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a,b)</div><div class='del'>-#else</div><div class='del'>-#include &lt;varargs.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a)</div><div class='del'>-#endif</div><div class='del'>-#include &lt;string.h&gt;</div><div class='del'>-#include &lt;tcl.h&gt;</div><div class='del'>-#include &lt;tk.h&gt;</div><div class='del'>-</div><div class='del'>-#include "stubs.h"</div><div class='del'>-</div><div class='del'>-#ifndef TCL_ALPHA_RELEASE</div><div class='del'>-#define TCL_ALPHA_RELEASE       0</div><div class='del'>-#define TCL_BETA_RELEASE        1</div><div class='del'>-#define TCL_FINAL_RELEASE       2</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static struct {</div><div class='del'>-  int major;</div><div class='del'>-  int minor;</div><div class='del'>-  int patchlevel;</div><div class='del'>-  int type;</div><div class='del'>-} tcltk_version = {0, 0, 0, 0};</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-set_tcltk_version()</div><div class='del'>-{</div><div class='del'>-    if (tcltk_version.major) return;</div><div class='del'>-</div><div class='del'>-    Tcl_GetVersion(&amp;(tcltk_version.major), </div><div class='del'>-		   &amp;(tcltk_version.minor), </div><div class='del'>-		   &amp;(tcltk_version.patchlevel), </div><div class='del'>-		   &amp;(tcltk_version.type));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-# ifndef CONST84</div><div class='del'>-#  if TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &lt;= 4 /* Tcl8.0.x -- 8.4b1 */</div><div class='del'>-#   define CONST84</div><div class='del'>-#  else /* unknown (maybe TCL_VERSION &gt;= 8.5) */</div><div class='del'>-#   ifdef CONST</div><div class='del'>-#    define CONST84 CONST</div><div class='del'>-#   else</div><div class='del'>-#    define CONST84</div><div class='del'>-#   endif</div><div class='del'>-#  endif</div><div class='del'>-# endif</div><div class='del'>-#else  /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-# ifdef CONST</div><div class='del'>-#  define CONST84 CONST</div><div class='del'>-# else</div><div class='del'>-#  define CONST</div><div class='del'>-#  define CONST84</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* copied from eval.c */</div><div class='del'>-#define TAG_RETURN      0x1</div><div class='del'>-#define TAG_BREAK       0x2</div><div class='del'>-#define TAG_NEXT        0x3</div><div class='del'>-#define TAG_RETRY       0x4</div><div class='del'>-#define TAG_REDO        0x5</div><div class='del'>-#define TAG_RAISE       0x6</div><div class='del'>-#define TAG_THROW       0x7</div><div class='del'>-#define TAG_FATAL       0x8</div><div class='del'>-</div><div class='del'>-/* for ruby_debug */</div><div class='del'>-#define DUMP1(ARG1) if (ruby_debug) { fprintf(stderr, "tcltklib: %s\n", ARG1); fflush(stderr); }</div><div class='del'>-#define DUMP2(ARG1, ARG2) if (ruby_debug) { fprintf(stderr, "tcltklib: ");\</div><div class='del'>-fprintf(stderr, ARG1, ARG2); fprintf(stderr, "\n"); fflush(stderr); }</div><div class='del'>-#define DUMP3(ARG1, ARG2, ARG3) if (ruby_debug) { fprintf(stderr, "tcltklib: ");\</div><div class='del'>-fprintf(stderr, ARG1, ARG2, ARG3); fprintf(stderr, "\n"); fflush(stderr); }</div><div class='del'>-/*</div><div class='del'>-#define DUMP1(ARG1)</div><div class='del'>-#define DUMP2(ARG1, ARG2)</div><div class='del'>-#define DUMP3(ARG1, ARG2, ARG3)</div><div class='del'>-*/</div><div class='del'>-</div><div class='del'>-/* release date */</div><div class='del'>-const char tcltklib_release_date[] = TCLTKLIB_RELEASE_DATE;</div><div class='del'>-</div><div class='del'>-/* finalize_proc_name */</div><div class='del'>-static char *finalize_hook_name = "INTERP_FINALIZE_HOOK";</div><div class='del'>-</div><div class='del'>-static void ip_finalize _((Tcl_Interp*));</div><div class='del'>-</div><div class='del'>-static int at_exit = 0;</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-static VALUE cRubyEncoding;</div><div class='del'>-</div><div class='del'>-/* encoding */</div><div class='del'>-static int ENCODING_INDEX_UTF8;</div><div class='del'>-static int ENCODING_INDEX_BINARY;</div><div class='del'>-#endif</div><div class='del'>-static VALUE ENCODING_NAME_UTF8;</div><div class='del'>-static VALUE ENCODING_NAME_BINARY;</div><div class='del'>-</div><div class='del'>-static VALUE create_dummy_encoding_for_tk_core _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE create_dummy_encoding_for_tk _((VALUE, VALUE));</div><div class='del'>-static int update_encoding_table _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE encoding_table_get_name_core _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE encoding_table_get_obj_core _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE encoding_table_get_name _((VALUE, VALUE));</div><div class='del'>-static VALUE encoding_table_get_obj _((VALUE, VALUE));</div><div class='del'>-static VALUE create_encoding_table _((VALUE));</div><div class='del'>-static VALUE ip_get_encoding_table _((VALUE));</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* for callback break &amp; continue */</div><div class='del'>-static VALUE eTkCallbackReturn;</div><div class='del'>-static VALUE eTkCallbackBreak;</div><div class='del'>-static VALUE eTkCallbackContinue;</div><div class='del'>-</div><div class='del'>-static VALUE eLocalJumpError;</div><div class='del'>-</div><div class='del'>-static VALUE eTkLocalJumpError;</div><div class='del'>-static VALUE eTkCallbackRetry;</div><div class='del'>-static VALUE eTkCallbackRedo;</div><div class='del'>-static VALUE eTkCallbackThrow;</div><div class='del'>-</div><div class='del'>-static VALUE tcltkip_class;</div><div class='del'>-</div><div class='del'>-static ID ID_at_enc;</div><div class='del'>-static ID ID_at_interp;</div><div class='del'>-</div><div class='del'>-static ID ID_encoding_name;</div><div class='del'>-static ID ID_encoding_table;</div><div class='del'>-</div><div class='del'>-static ID ID_stop_p;</div><div class='del'>-static ID ID_alive_p;</div><div class='del'>-static ID ID_kill;</div><div class='del'>-static ID ID_join;</div><div class='del'>-static ID ID_value;</div><div class='del'>-</div><div class='del'>-static ID ID_call;</div><div class='del'>-static ID ID_backtrace;</div><div class='del'>-static ID ID_message;</div><div class='del'>-</div><div class='del'>-static ID ID_at_reason;</div><div class='del'>-static ID ID_return;</div><div class='del'>-static ID ID_break;</div><div class='del'>-static ID ID_next;</div><div class='del'>-</div><div class='del'>-static ID ID_to_s;</div><div class='del'>-static ID ID_inspect;</div><div class='del'>-</div><div class='del'>-static VALUE ip_invoke_real _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE ip_invoke _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE ip_invoke_with_position _((int, VALUE*, VALUE, Tcl_QueuePosition));</div><div class='del'>-static VALUE tk_funcall _((VALUE(), int, VALUE*, VALUE));</div><div class='del'>-</div><div class='del'>-/* Tcl's object type */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static char *Tcl_ObjTypeName_ByteArray = "bytearray";</div><div class='del'>-static Tcl_ObjType *Tcl_ObjType_ByteArray;</div><div class='del'>-</div><div class='del'>-static char *Tcl_ObjTypeName_String    = "string";</div><div class='del'>-static Tcl_ObjType *Tcl_ObjType_String;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt;= 1)</div><div class='del'>-#define IS_TCL_BYTEARRAY(obj)    ((obj)-&gt;typePtr == Tcl_ObjType_ByteArray)</div><div class='del'>-#define IS_TCL_STRING(obj)       ((obj)-&gt;typePtr == Tcl_ObjType_String)</div><div class='del'>-#define IS_TCL_VALID_STRING(obj) ((obj)-&gt;bytes != (char*)NULL)</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_RB_HASH_LOOKUP</div><div class='del'>-#define rb_hash_lookup rb_hash_aref</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* safe Tcl_Eval and Tcl_GlobalEval */</div><div class='del'>-static int</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-tcl_eval(Tcl_Interp *interp, const char *cmd)</div><div class='del'>-#else</div><div class='del'>-tcl_eval(interp, cmd)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    const char *cmd; /* don't have to be writable */</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    char *buf = strdup(cmd);</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    Tcl_AllowExceptions(interp);</div><div class='del'>-    ret = Tcl_Eval(interp, buf);</div><div class='del'>-    free(buf);</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#undef Tcl_Eval</div><div class='del'>-#define Tcl_Eval tcl_eval</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-tcl_global_eval(Tcl_Interp *interp, const char *cmd)</div><div class='del'>-#else</div><div class='del'>-tcl_global_eval(interp, cmd)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    const char *cmd; /* don't have to be writable */</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    char *buf = strdup(cmd);</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    Tcl_AllowExceptions(interp);</div><div class='del'>-    ret = Tcl_GlobalEval(interp, buf);</div><div class='del'>-    free(buf);</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#undef Tcl_GlobalEval</div><div class='del'>-#define Tcl_GlobalEval tcl_global_eval</div><div class='del'>-</div><div class='del'>-/* Tcl_{Incr|Decr}RefCount for tcl7.x or earlier */</div><div class='del'>-#if TCL_MAJOR_VERSION &lt; 8</div><div class='del'>-#define Tcl_IncrRefCount(obj) (1)</div><div class='del'>-#define Tcl_DecrRefCount(obj) (1)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* Tcl_GetStringResult for tcl7.x or earlier */</div><div class='del'>-#if TCL_MAJOR_VERSION &lt; 8</div><div class='del'>-#define Tcl_GetStringResult(interp) ((interp)-&gt;result)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* Tcl_[GS]etVar2Ex for tcl8.0 */</div><div class='del'>-#if TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION == 0</div><div class='del'>-static Tcl_Obj *</div><div class='del'>-Tcl_GetVar2Ex(interp, name1, name2, flags)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    CONST char *name1;</div><div class='del'>-    CONST char *name2;</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    Tcl_Obj *nameObj1, *nameObj2 = NULL, *retObj;</div><div class='del'>-</div><div class='del'>-    nameObj1 = Tcl_NewStringObj((char*)name1, -1);</div><div class='del'>-    Tcl_IncrRefCount(nameObj1);</div><div class='del'>-</div><div class='del'>-    if (name2) {</div><div class='del'>-        nameObj2 = Tcl_NewStringObj((char*)name2, -1);</div><div class='del'>-        Tcl_IncrRefCount(nameObj2);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    retObj = Tcl_ObjGetVar2(interp, nameObj1, nameObj2, flags);</div><div class='del'>-</div><div class='del'>-    if (name2) {</div><div class='del'>-        Tcl_DecrRefCount(nameObj2);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_DecrRefCount(nameObj1);</div><div class='del'>-</div><div class='del'>-    return retObj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static Tcl_Obj *</div><div class='del'>-Tcl_SetVar2Ex(interp, name1, name2, newValObj, flags)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    CONST char *name1;</div><div class='del'>-    CONST char *name2;</div><div class='del'>-    Tcl_Obj *newValObj;</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    Tcl_Obj *nameObj1, *nameObj2 = NULL, *retObj;</div><div class='del'>-</div><div class='del'>-    nameObj1 = Tcl_NewStringObj((char*)name1, -1);</div><div class='del'>-    Tcl_IncrRefCount(nameObj1);</div><div class='del'>-</div><div class='del'>-    if (name2) {</div><div class='del'>-        nameObj2 = Tcl_NewStringObj((char*)name2, -1);</div><div class='del'>-        Tcl_IncrRefCount(nameObj2);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    retObj = Tcl_ObjSetVar2(interp, nameObj1, nameObj2, newValObj, flags);</div><div class='del'>-</div><div class='del'>-    if (name2) {</div><div class='del'>-        Tcl_DecrRefCount(nameObj2);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_DecrRefCount(nameObj1);</div><div class='del'>-</div><div class='del'>-    return retObj;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* from tkAppInit.c */</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &lt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &lt; 4)</div><div class='del'>-#  if !defined __MINGW32__ &amp;&amp; !defined __BORLANDC__</div><div class='del'>-/*</div><div class='del'>- * The following variable is a special hack that is needed in order for</div><div class='del'>- * Sun shared libraries to be used for Tcl.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-extern int matherr();</div><div class='del'>-int *tclDummyMathPtr = (int *) matherr;</div><div class='del'>-#  endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*---- module TclTkLib ----*/</div><div class='del'>-</div><div class='del'>-struct invoke_queue {</div><div class='del'>-    Tcl_Event ev;</div><div class='del'>-    int argc;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_Obj **argv;</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    char **argv;</div><div class='del'>-#endif</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int *done;</div><div class='del'>-    int safe_level;</div><div class='del'>-    VALUE result;</div><div class='del'>-    VALUE thread;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct eval_queue {</div><div class='del'>-    Tcl_Event ev;</div><div class='del'>-    char *str;</div><div class='del'>-    int len;</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int *done;</div><div class='del'>-    int safe_level;</div><div class='del'>-    VALUE result;</div><div class='del'>-    VALUE thread;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct call_queue {</div><div class='del'>-    Tcl_Event ev;</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int *done;</div><div class='del'>-    int safe_level;</div><div class='del'>-    VALUE result;</div><div class='del'>-    VALUE thread;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void </div><div class='del'>-invoke_queue_mark(struct invoke_queue *q)</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(q-&gt;interp);</div><div class='del'>-    rb_gc_mark(q-&gt;result);</div><div class='del'>-    rb_gc_mark(q-&gt;thread);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void </div><div class='del'>-eval_queue_mark(struct eval_queue *q)</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(q-&gt;interp);</div><div class='del'>-    rb_gc_mark(q-&gt;result);</div><div class='del'>-    rb_gc_mark(q-&gt;thread);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void </div><div class='del'>-call_queue_mark(struct call_queue *q)</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    for(i = 0; i &lt; q-&gt;argc; i++) {</div><div class='del'>-        rb_gc_mark(q-&gt;argv[i]);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_gc_mark(q-&gt;interp);</div><div class='del'>-    rb_gc_mark(q-&gt;result);</div><div class='del'>-    rb_gc_mark(q-&gt;thread);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE eventloop_thread;</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-Tcl_ThreadId tk_eventloop_thread_id;  /* native thread ID of Tcl interpreter */</div><div class='del'>-#endif</div><div class='del'>-static VALUE eventloop_stack;</div><div class='del'>-static int   window_event_mode = ( ~ TCL_IDLE_EVENTS | TCL_WINDOW_EVENTS );</div><div class='del'>-</div><div class='del'>-static VALUE watchdog_thread;</div><div class='del'>-</div><div class='del'>-Tcl_Interp  *current_interp;</div><div class='del'>-</div><div class='del'>-/* thread control strategy */ </div><div class='del'>-/* multi-tk works with the following settings only ???</div><div class='del'>-    : CONTROL_BY_STATUS_OF_RB_THREAD_WAITING_FOR_VALUE 1</div><div class='del'>-    : USE_TOGGLE_WINDOW_MODE_FOR_IDLE 0</div><div class='del'>-    : DO_THREAD_SCHEDULE_AT_CALLBACK_DONE 0</div><div class='del'>-*/</div><div class='del'>-#define CONTROL_BY_STATUS_OF_RB_THREAD_WAITING_FOR_VALUE 1</div><div class='del'>-#define USE_TOGGLE_WINDOW_MODE_FOR_IDLE 0</div><div class='del'>-#define DO_THREAD_SCHEDULE_AT_CALLBACK_DONE 0</div><div class='del'>-</div><div class='del'>-#if CONTROL_BY_STATUS_OF_RB_THREAD_WAITING_FOR_VALUE</div><div class='del'>-static int have_rb_thread_waiting_for_value = 0;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- *  'event_loop_max' is a maximum events which the eventloop processes in one </div><div class='del'>- *  term of thread scheduling. 'no_event_tick' is the count-up value when </div><div class='del'>- *  there are no event for processing. </div><div class='del'>- *  'timer_tick' is a limit of one term of thread scheduling. </div><div class='del'>- *  If 'timer_tick' == 0, then not use the timer for thread scheduling.</div><div class='del'>- */</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#define DEFAULT_EVENT_LOOP_MAX        800/*counts*/</div><div class='del'>-#define DEFAULT_NO_EVENT_TICK          10/*counts*/</div><div class='del'>-#define DEFAULT_NO_EVENT_WAIT          10/*milliseconds ( 1 -- 999 ) */</div><div class='del'>-#define WATCHDOG_INTERVAL              10/*milliseconds ( 1 -- 999 ) */</div><div class='del'>-#define DEFAULT_TIMER_TICK              0/*milliseconds ( 0 -- 999 ) */</div><div class='del'>-#define NO_THREAD_INTERRUPT_TIME      100/*milliseconds ( 1 -- 999 ) */</div><div class='del'>-#else /* ! RUBY_VM */</div><div class='del'>-#define DEFAULT_EVENT_LOOP_MAX        800/*counts*/</div><div class='del'>-#define DEFAULT_NO_EVENT_TICK          10/*counts*/</div><div class='del'>-#define DEFAULT_NO_EVENT_WAIT          20/*milliseconds ( 1 -- 999 ) */</div><div class='del'>-#define WATCHDOG_INTERVAL              10/*milliseconds ( 1 -- 999 ) */</div><div class='del'>-#define DEFAULT_TIMER_TICK              0/*milliseconds ( 0 -- 999 ) */</div><div class='del'>-#define NO_THREAD_INTERRUPT_TIME      100/*milliseconds ( 1 -- 999 ) */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int event_loop_max = DEFAULT_EVENT_LOOP_MAX;</div><div class='del'>-static int no_event_tick  = DEFAULT_NO_EVENT_TICK;</div><div class='del'>-static int no_event_wait  = DEFAULT_NO_EVENT_WAIT;</div><div class='del'>-static int timer_tick     = DEFAULT_TIMER_TICK;</div><div class='del'>-static int req_timer_tick = DEFAULT_TIMER_TICK;</div><div class='del'>-static int run_timer_flag = 0;</div><div class='del'>-</div><div class='del'>-static int event_loop_wait_event   = 0;</div><div class='del'>-static int event_loop_abort_on_exc = 1;</div><div class='del'>-static int loop_counter = 0;</div><div class='del'>-</div><div class='del'>-static int check_rootwidget_flag = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* call ruby interpreter */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int ip_ruby_eval _((ClientData, Tcl_Interp *, int, Tcl_Obj *CONST*));</div><div class='del'>-static int ip_ruby_cmd _((ClientData, Tcl_Interp *, int, Tcl_Obj *CONST*));</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static int ip_ruby_eval _((ClientData, Tcl_Interp *, int, char **));</div><div class='del'>-static int ip_ruby_cmd _((ClientData, Tcl_Interp *, int, char **));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-struct cmd_body_arg {</div><div class='del'>-    VALUE receiver;</div><div class='del'>-    ID    method;</div><div class='del'>-    VALUE args;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*----------------------------*/</div><div class='del'>-/* use Tcl internal functions */</div><div class='del'>-/*----------------------------*/</div><div class='del'>-#ifndef TCL_NAMESPACE_DEBUG</div><div class='del'>-#define TCL_NAMESPACE_DEBUG 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if TCL_NAMESPACE_DEBUG</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-EXTERN struct TclIntStubs *tclIntStubsPtr;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*-- Tcl_GetCurrentNamespace --*/</div><div class='del'>-#if TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &lt; 5</div><div class='del'>-/* Tcl7.x doesn't have namespace support.                            */</div><div class='del'>-/* Tcl8.5+ has definition of Tcl_GetCurrentNamespace() in tclDecls.h */</div><div class='del'>-#  ifndef Tcl_GetCurrentNamespace</div><div class='del'>-EXTERN Tcl_Namespace *  Tcl_GetCurrentNamespace _((Tcl_Interp *));</div><div class='del'>-#  endif</div><div class='del'>-#  if defined(USE_TCL_STUBS) &amp;&amp; !defined(USE_TCL_STUB_PROCS)</div><div class='del'>-#    ifndef Tcl_GetCurrentNamespace</div><div class='del'>-#      ifndef FunctionNum_of_GetCurrentNamespace</div><div class='del'>-#define FunctionNum_of_GetCurrentNamespace 124</div><div class='del'>-#      endif</div><div class='del'>-struct DummyTclIntStubs_for_GetCurrentNamespace {</div><div class='del'>-    int magic;</div><div class='del'>-    struct TclIntStubHooks *hooks;</div><div class='del'>-    void (*func[FunctionNum_of_GetCurrentNamespace])();</div><div class='del'>-    Tcl_Namespace * (*tcl_GetCurrentNamespace) _((Tcl_Interp *));</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define Tcl_GetCurrentNamespace \</div><div class='del'>-   (((struct DummyTclIntStubs_for_GetCurrentNamespace *)tclIntStubsPtr)-&gt;tcl_GetCurrentNamespace)</div><div class='del'>-#    endif</div><div class='del'>-#  endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* namespace check */</div><div class='del'>-/* ip_null_namespace(Tcl_Interp *interp) */</div><div class='del'>-#if TCL_MAJOR_VERSION &lt; 8</div><div class='del'>-#define ip_null_namespace(interp) (0)</div><div class='del'>-#else /* support namespace */</div><div class='del'>-#define ip_null_namespace(interp) \</div><div class='del'>-    (Tcl_GetCurrentNamespace(interp) == (Tcl_Namespace *)NULL)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* rbtk_invalid_namespace(tcltkip *ptr) */</div><div class='del'>-#if TCL_MAJOR_VERSION &lt; 8</div><div class='del'>-#define rbtk_invalid_namespace(ptr) (0)</div><div class='del'>-#else /* support namespace */</div><div class='del'>-#define rbtk_invalid_namespace(ptr) \</div><div class='del'>-    ((ptr)-&gt;default_ns == (Tcl_Namespace*)NULL || Tcl_GetCurrentNamespace((ptr)-&gt;ip) != (ptr)-&gt;default_ns)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*-- Tcl_PopCallFrame &amp; Tcl_PushCallFrame --*/</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-#  ifndef CallFrame</div><div class='del'>-typedef struct CallFrame {</div><div class='del'>-    Tcl_Namespace *nsPtr;</div><div class='del'>-    int dummy1;</div><div class='del'>-    int dummy2;</div><div class='del'>-    char *dummy3;</div><div class='del'>-    struct CallFrame *callerPtr;</div><div class='del'>-    struct CallFrame *callerVarPtr;</div><div class='del'>-    int level;</div><div class='del'>-    char *dummy7;</div><div class='del'>-    char *dummy8;</div><div class='del'>-    int dummy9;</div><div class='del'>-    char* dummy10;</div><div class='del'>-} CallFrame;</div><div class='del'>-#  endif</div><div class='del'>-</div><div class='del'>-#  if !defined(TclGetFrame) &amp;&amp; !defined(TclGetFrame_TCL_DECLARED)</div><div class='del'>-EXTERN int  TclGetFrame _((Tcl_Interp *, CONST char *, CallFrame **));</div><div class='del'>-#  endif</div><div class='del'>-#  if defined(USE_TCL_STUBS) &amp;&amp; !defined(USE_TCL_STUB_PROCS)</div><div class='del'>-#    ifndef TclGetFrame</div><div class='del'>-#      ifndef FunctionNum_of_GetFrame</div><div class='del'>-#define FunctionNum_of_GetFrame 32</div><div class='del'>-#      endif</div><div class='del'>-struct DummyTclIntStubs_for_GetFrame {</div><div class='del'>-    int magic;</div><div class='del'>-    struct TclIntStubHooks *hooks;</div><div class='del'>-    void (*func[FunctionNum_of_GetFrame])();</div><div class='del'>-    int (*tclGetFrame) _((Tcl_Interp *, CONST char *, CallFrame **));</div><div class='del'>-};</div><div class='del'>-#define TclGetFrame \</div><div class='del'>-   (((struct DummyTclIntStubs_for_GetFrame *)tclIntStubsPtr)-&gt;tclGetFrame)</div><div class='del'>-#    endif</div><div class='del'>-#  endif</div><div class='del'>-</div><div class='del'>-#  if !defined(Tcl_PopCallFrame) &amp;&amp; !defined(Tcl_PopCallFrame_TCL_DECLARED)</div><div class='del'>-EXTERN void Tcl_PopCallFrame _((Tcl_Interp *));</div><div class='del'>-EXTERN int  Tcl_PushCallFrame _((Tcl_Interp *, Tcl_CallFrame *, Tcl_Namespace *, int));</div><div class='del'>-#  endif</div><div class='del'>-#  if defined(USE_TCL_STUBS) &amp;&amp; !defined(USE_TCL_STUB_PROCS)</div><div class='del'>-#    ifndef Tcl_PopCallFrame</div><div class='del'>-#      ifndef FunctionNum_of_PopCallFrame</div><div class='del'>-#define FunctionNum_of_PopCallFrame 128</div><div class='del'>-#      endif</div><div class='del'>-struct DummyTclIntStubs_for_PopCallFrame {</div><div class='del'>-    int magic;</div><div class='del'>-    struct TclIntStubHooks *hooks;</div><div class='del'>-    void (*func[FunctionNum_of_PopCallFrame])();</div><div class='del'>-    void (*tcl_PopCallFrame) _((Tcl_Interp *));</div><div class='del'>-    int  (*tcl_PushCallFrame) _((Tcl_Interp *, Tcl_CallFrame *, Tcl_Namespace *, int));</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define Tcl_PopCallFrame \</div><div class='del'>-   (((struct DummyTclIntStubs_for_PopCallFrame *)tclIntStubsPtr)-&gt;tcl_PopCallFrame)</div><div class='del'>-#define Tcl_PushCallFrame \</div><div class='del'>-   (((struct DummyTclIntStubs_for_PopCallFrame *)tclIntStubsPtr)-&gt;tcl_PushCallFrame)</div><div class='del'>-#    endif</div><div class='del'>-#  endif</div><div class='del'>-</div><div class='del'>-#else /* Tcl7.x */</div><div class='del'>-#  ifndef CallFrame</div><div class='del'>-typedef struct CallFrame {</div><div class='del'>-    Tcl_HashTable varTable;</div><div class='del'>-    int level;</div><div class='del'>-    int argc;</div><div class='del'>-    char **argv;</div><div class='del'>-    struct CallFrame *callerPtr;</div><div class='del'>-    struct CallFrame *callerVarPtr;</div><div class='del'>-} CallFrame;</div><div class='del'>-#  endif</div><div class='del'>-#  ifndef Tcl_CallFrame</div><div class='del'>-#define Tcl_CallFrame CallFrame</div><div class='del'>-#  endif</div><div class='del'>-</div><div class='del'>-#  if !defined(TclGetFrame) &amp;&amp; !defined(TclGetFrame_TCL_DECLARED)</div><div class='del'>-EXTERN int  TclGetFrame _((Tcl_Interp *, CONST char *, CallFrame **));</div><div class='del'>-#  endif</div><div class='del'>-</div><div class='del'>-#  if !defined(Tcl_PopCallFrame) &amp;&amp; !defined(Tcl_PopCallFrame_TCL_DECLARED)</div><div class='del'>-typedef struct DummyInterp {</div><div class='del'>-    char *dummy1;</div><div class='del'>-    char *dummy2;</div><div class='del'>-    int  dummy3;</div><div class='del'>-    Tcl_HashTable dummy4;</div><div class='del'>-    Tcl_HashTable dummy5;</div><div class='del'>-    Tcl_HashTable dummy6;</div><div class='del'>-    int numLevels;</div><div class='del'>-    int maxNestingDepth;</div><div class='del'>-    CallFrame *framePtr;</div><div class='del'>-    CallFrame *varFramePtr;</div><div class='del'>-} DummyInterp;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-Tcl_PopCallFrame(interp)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-{</div><div class='del'>-    DummyInterp *iPtr = (DummyInterp*)interp;</div><div class='del'>-    CallFrame *frame = iPtr-&gt;varFramePtr;</div><div class='del'>-</div><div class='del'>-    /* **** DUMMY **** */</div><div class='del'>-    iPtr-&gt;framePtr = frame.callerPtr;</div><div class='del'>-    iPtr-&gt;varFramePtr = frame.callerVarPtr;</div><div class='del'>-</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* dummy */</div><div class='del'>-#define Tcl_Namespace char</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-Tcl_PushCallFrame(interp, framePtr, nsPtr, isProcCallFrame)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    Tcl_CallFrame *framePtr;</div><div class='del'>-    Tcl_Namespace *nsPtr;</div><div class='del'>-    int isProcCallFrame;</div><div class='del'>-{</div><div class='del'>-    DummyInterp *iPtr = (DummyInterp*)interp;</div><div class='del'>-    CallFrame *frame = (CallFrame *)framePtr;</div><div class='del'>-</div><div class='del'>-    /* **** DUMMY **** */</div><div class='del'>-    Tcl_InitHashTable(&amp;frame.varTable, TCL_STRING_KEYS);</div><div class='del'>-    if (iPtr-&gt;varFramePtr != NULL) {</div><div class='del'>-        frame.level = iPtr-&gt;varFramePtr-&gt;level + 1;</div><div class='del'>-    } else {</div><div class='del'>-        frame.level = 1;</div><div class='del'>-    }</div><div class='del'>-    frame.callerPtr = iPtr-&gt;framePtr;</div><div class='del'>-    frame.callerVarPtr = iPtr-&gt;varFramePtr;</div><div class='del'>-    iPtr-&gt;framePtr = &amp;frame;</div><div class='del'>-    iPtr-&gt;varFramePtr = &amp;frame;</div><div class='del'>-</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-#  endif</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif /* TCL_NAMESPACE_DEBUG */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*---- class TclTkIp ----*/</div><div class='del'>-struct tcltkip {</div><div class='del'>-    Tcl_Interp *ip;              /* the interpreter */</div><div class='del'>-#if TCL_NAMESPACE_DEBUG</div><div class='del'>-    Tcl_Namespace *default_ns;   /* default namespace */</div><div class='del'>-#endif</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    Tcl_ThreadId tk_thread_id;   /* native thread ID of Tcl interpreter */</div><div class='del'>-#endif</div><div class='del'>-    int has_orig_exit;           /* has original 'exit' command ? */</div><div class='del'>-    Tcl_CmdInfo orig_exit_info;  /* command info of original 'exit' command */</div><div class='del'>-    int ref_count;               /* reference count of rbtk_preserve_ip call */</div><div class='del'>-    int allow_ruby_exit;         /* allow exiting ruby by 'exit' function */</div><div class='del'>-    int return_value;            /* return value */</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static struct tcltkip *</div><div class='del'>-get_ip(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, struct tcltkip, ptr);</div><div class='del'>-    if (ptr == 0) {</div><div class='del'>-        /* rb_raise(rb_eTypeError, "uninitialized TclTkIp"); */</div><div class='del'>-        return((struct tcltkip *)NULL);</div><div class='del'>-    }</div><div class='del'>-    if (ptr-&gt;ip == (Tcl_Interp*)NULL) {</div><div class='del'>-        /* rb_raise(rb_eRuntimeError, "deleted IP"); */</div><div class='del'>-        return((struct tcltkip *)NULL);</div><div class='del'>-    }</div><div class='del'>-    return ptr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-deleted_ip(ptr)</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-{</div><div class='del'>-    if (!ptr || !ptr-&gt;ip || Tcl_InterpDeleted(ptr-&gt;ip)</div><div class='del'>-#if TCL_NAMESPACE_DEBUG</div><div class='del'>-          || rbtk_invalid_namespace(ptr)</div><div class='del'>-#endif</div><div class='del'>-    ) {</div><div class='del'>-        DUMP1("ip is deleted");</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'>-/* increment/decrement reference count of tcltkip */</div><div class='del'>-static int</div><div class='del'>-rbtk_preserve_ip(ptr)</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-{</div><div class='del'>-    ptr-&gt;ref_count++;</div><div class='del'>-    if (ptr-&gt;ip == (Tcl_Interp*)NULL) {</div><div class='del'>-        /* deleted IP */</div><div class='del'>-        ptr-&gt;ref_count = 0;</div><div class='del'>-    } else {</div><div class='del'>-        Tcl_Preserve((ClientData)ptr-&gt;ip);</div><div class='del'>-    }</div><div class='del'>-    return(ptr-&gt;ref_count);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rbtk_release_ip(ptr)</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-{</div><div class='del'>-    ptr-&gt;ref_count--;</div><div class='del'>-    if (ptr-&gt;ref_count &lt; 0) {</div><div class='del'>-        ptr-&gt;ref_count = 0;</div><div class='del'>-    } else if (ptr-&gt;ip == (Tcl_Interp*)NULL) {</div><div class='del'>-        /* deleted IP */</div><div class='del'>-        ptr-&gt;ref_count = 0;</div><div class='del'>-    } else {</div><div class='del'>-        Tcl_Release((ClientData)ptr-&gt;ip);</div><div class='del'>-    }</div><div class='del'>-    return(ptr-&gt;ref_count);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-create_ip_exc(VALUE interp, VALUE exc, const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-create_ip_exc(interp, exc, fmt, va_alist)</div><div class='del'>-    VALUE interp:</div><div class='del'>-    VALUE exc;</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'>-    va_list args;</div><div class='del'>-    char buf[BUFSIZ];</div><div class='del'>-    VALUE einfo;</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</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'>-    buf[BUFSIZ - 1] = '\0';</div><div class='del'>-    va_end(args);</div><div class='del'>-    einfo = rb_exc_new2(exc, buf);</div><div class='del'>-    rb_ivar_set(einfo, ID_at_interp, interp);</div><div class='del'>-    if (ptr) {</div><div class='del'>-        Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return einfo;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* stub status */</div><div class='del'>-static void</div><div class='del'>-tcl_stubs_check()</div><div class='del'>-{</div><div class='del'>-    if (!tcl_stubs_init_p()) {</div><div class='del'>-        int st = ruby_tcl_stubs_init();</div><div class='del'>-        switch(st) {</div><div class='del'>-        case TCLTK_STUBS_OK:</div><div class='del'>-            break;</div><div class='del'>-        case NO_TCL_DLL:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: fail to open tcl_dll");</div><div class='del'>-        case NO_FindExecutable:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: can't find Tcl_FindExecutable");</div><div class='del'>-        case NO_CreateInterp:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: can't find Tcl_CreateInterp()");</div><div class='del'>-        case NO_DeleteInterp:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: can't find Tcl_DeleteInterp()");</div><div class='del'>-        case FAIL_CreateInterp:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: fail to create a new IP to call Tcl_InitStubs()");</div><div class='del'>-        case FAIL_Tcl_InitStubs:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: fail to Tcl_InitStubs()");</div><div class='del'>-        default:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: unknown error(%d) on ruby_tcl_stubs_init()", st);</div><div class='del'>-        }</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'>-tcltkip_init_tk(interp)</div><div class='del'>-    VALUE interp;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    int  st;</div><div class='del'>-</div><div class='del'>-    if (Tcl_IsSafe(ptr-&gt;ip)) {</div><div class='del'>-        DUMP1("Tk_SafeInit");</div><div class='del'>-        st = ruby_tk_stubs_safeinit(ptr-&gt;ip);</div><div class='del'>-        switch(st) {</div><div class='del'>-        case TCLTK_STUBS_OK:</div><div class='del'>-            break;</div><div class='del'>-        case NO_Tk_Init:</div><div class='del'>-            return rb_exc_new2(rb_eLoadError, </div><div class='del'>-                               "tcltklib: can't find Tk_SafeInit()");</div><div class='del'>-        case FAIL_Tk_Init:</div><div class='del'>-            return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                 "tcltklib: fail to Tk_SafeInit(). %s", </div><div class='del'>-                                 Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-        case FAIL_Tk_InitStubs:</div><div class='del'>-            return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                 "tcltklib: fail to Tk_InitStubs(). %s", </div><div class='del'>-                                 Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-        default:</div><div class='del'>-            return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                 "tcltklib: unknown error(%d) on ruby_tk_stubs_safeinit", st);</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        DUMP1("Tk_Init");</div><div class='del'>-        st = ruby_tk_stubs_init(ptr-&gt;ip);</div><div class='del'>-        switch(st) {</div><div class='del'>-        case TCLTK_STUBS_OK:</div><div class='del'>-            break;</div><div class='del'>-        case NO_Tk_Init:</div><div class='del'>-            return rb_exc_new2(rb_eLoadError, </div><div class='del'>-                               "tcltklib: can't find Tk_Init()");</div><div class='del'>-        case FAIL_Tk_Init:</div><div class='del'>-            return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                 "tcltklib: fail to Tk_Init(). %s", </div><div class='del'>-                                 Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-        case FAIL_Tk_InitStubs:</div><div class='del'>-            return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                 "tcltklib: fail to Tk_InitStubs(). %s", </div><div class='del'>-                                 Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-        default:</div><div class='del'>-            return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                 "tcltklib: unknown error(%d) on ruby_tk_stubs_init", st);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tk_Init");</div><div class='del'>-    if (ruby_tk_stubs_init(ptr-&gt;ip) != TCLTK_STUBS_OK) {</div><div class='del'>-        return rb_exc_new2(rb_eRuntimeError, ptr-&gt;ip-&gt;result);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    ptr-&gt;tk_thread_id = Tcl_GetCurrentThread();</div><div class='del'>-#endif</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'>-/* treat excetiopn on Tcl side */</div><div class='del'>-static VALUE rbtk_pending_exception;</div><div class='del'>-static int rbtk_eventloop_depth = 0;</div><div class='del'>-static int rbtk_internal_eventloop_handler = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-pending_exception_check0()</div><div class='del'>-{</div><div class='del'>-    volatile VALUE exc = rbtk_pending_exception;</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(exc) &amp;&amp; rb_obj_is_kind_of(exc, rb_eException)) {</div><div class='del'>-        DUMP1("find a pending exception");</div><div class='del'>-        if (rbtk_eventloop_depth &gt; 0 </div><div class='del'>-	    || rbtk_internal_eventloop_handler &gt; 0</div><div class='del'>-	    ) {</div><div class='del'>-            return 1; /* pending */</div><div class='del'>-        } else {</div><div class='del'>-            rbtk_pending_exception = Qnil;</div><div class='del'>-</div><div class='del'>-            if (rb_obj_is_kind_of(exc, eTkCallbackRetry)) {</div><div class='del'>-                DUMP1("pending_exception_check0: call rb_jump_tag(retry)");</div><div class='del'>-                rb_jump_tag(TAG_RETRY);</div><div class='del'>-            } else if (rb_obj_is_kind_of(exc, eTkCallbackRedo)) {</div><div class='del'>-                DUMP1("pending_exception_check0: call rb_jump_tag(redo)");</div><div class='del'>-                rb_jump_tag(TAG_REDO);</div><div class='del'>-            } else if (rb_obj_is_kind_of(exc, eTkCallbackThrow)) {</div><div class='del'>-                DUMP1("pending_exception_check0: call rb_jump_tag(throw)");</div><div class='del'>-                rb_jump_tag(TAG_THROW);</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            rb_exc_raise(exc);</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        return 0;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-pending_exception_check1(thr_crit_bup, ptr)</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE exc = rbtk_pending_exception;</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(exc) &amp;&amp; rb_obj_is_kind_of(exc, rb_eException)) {</div><div class='del'>-        DUMP1("find a pending exception");</div><div class='del'>-</div><div class='del'>-        if (rbtk_eventloop_depth &gt; 0</div><div class='del'>-	    || rbtk_internal_eventloop_handler &gt; 0</div><div class='del'>-	    ) {</div><div class='del'>-            return 1; /* pending */</div><div class='del'>-        } else {</div><div class='del'>-            rbtk_pending_exception = Qnil;</div><div class='del'>-</div><div class='del'>-            if (ptr != (struct tcltkip *)NULL) {</div><div class='del'>-                /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-                rbtk_release_ip(ptr);</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-            if (rb_obj_is_kind_of(exc, eTkCallbackRetry)) {</div><div class='del'>-                DUMP1("pending_exception_check1: call rb_jump_tag(retry)");</div><div class='del'>-                rb_jump_tag(TAG_RETRY);</div><div class='del'>-            } else if (rb_obj_is_kind_of(exc, eTkCallbackRedo)) {</div><div class='del'>-                DUMP1("pending_exception_check1: call rb_jump_tag(redo)");</div><div class='del'>-                rb_jump_tag(TAG_REDO);</div><div class='del'>-            } else if (rb_obj_is_kind_of(exc, eTkCallbackThrow)) {</div><div class='del'>-                DUMP1("pending_exception_check1: call rb_jump_tag(throw)");</div><div class='del'>-                rb_jump_tag(TAG_THROW);</div><div class='del'>-            }</div><div class='del'>-            rb_exc_raise(exc);</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        return 0;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* call original 'exit' command */</div><div class='del'>-static void </div><div class='del'>-call_original_exit(ptr, state)</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-    int state;</div><div class='del'>-{</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    Tcl_CmdInfo *info;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_Obj *cmd_obj;</div><div class='del'>-    Tcl_Obj *state_obj;</div><div class='del'>-#endif</div><div class='del'>-    DUMP1("original_exit is called");</div><div class='del'>-</div><div class='del'>-    if (!(ptr-&gt;has_orig_exit)) return;</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-    info = &amp;(ptr-&gt;orig_exit_info);</div><div class='del'>-</div><div class='del'>-    /* memory allocation for arguments of this command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    state_obj = Tcl_NewIntObj(state);</div><div class='del'>-    Tcl_IncrRefCount(state_obj);</div><div class='del'>-</div><div class='del'>-    if (info-&gt;isNativeObjectProc) {</div><div class='del'>-        Tcl_Obj **argv;</div><div class='del'>-#define USE_RUBY_ALLOC 0</div><div class='del'>-#if USE_RUBY_ALLOC</div><div class='del'>-        argv = (Tcl_Obj **)ALLOC_N(Tcl_Obj *, 3);</div><div class='del'>-#else /* not USE_RUBY_ALLOC */</div><div class='del'>-        argv = (Tcl_Obj **)ckalloc(sizeof(Tcl_Obj *) * 3);</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Preserve((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-	cmd_obj = Tcl_NewStringObj("exit", 4);</div><div class='del'>-	Tcl_IncrRefCount(cmd_obj);</div><div class='del'>-</div><div class='del'>-        argv[0] = cmd_obj;</div><div class='del'>-        argv[1] = state_obj;</div><div class='del'>-        argv[2] = (Tcl_Obj *)NULL;</div><div class='del'>-</div><div class='del'>-        ptr-&gt;return_value </div><div class='del'>-            = (*(info-&gt;objProc))(info-&gt;objClientData, ptr-&gt;ip, 2, argv);</div><div class='del'>-</div><div class='del'>-	Tcl_DecrRefCount(cmd_obj);</div><div class='del'>-</div><div class='del'>-#if USE_RUBY_ALLOC</div><div class='del'>-        free(argv);</div><div class='del'>-#else /* not USE_RUBY_ALLOC */</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	Tcl_EventuallyFree((ClientData)argv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Release((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-        /* free(argv); */</div><div class='del'>-        ckfree((char*)argv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#undef USE_RUBY_ALLOC</div><div class='del'>-</div><div class='del'>-    } else {</div><div class='del'>-        /* string interface */</div><div class='del'>-        char **argv;</div><div class='del'>-#define USE_RUBY_ALLOC 0</div><div class='del'>-#if USE_RUBY_ALLOC</div><div class='del'>-        argv = (char **)ALLOC_N(char *, 3); /* XXXXXXXXXX */</div><div class='del'>-#else /* not USE_RUBY_ALLOC */</div><div class='del'>-        argv = (char **)ckalloc(sizeof(char *) * 3);</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Preserve((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-        argv[0] = "exit";</div><div class='del'>-        /* argv[1] = Tcl_GetString(state_obj); */</div><div class='del'>-        argv[1] = Tcl_GetStringFromObj(state_obj, (int*)NULL);</div><div class='del'>-        argv[2] = (char *)NULL;</div><div class='del'>-</div><div class='del'>-        ptr-&gt;return_value = (*(info-&gt;proc))(info-&gt;clientData, ptr-&gt;ip, </div><div class='del'>-                                            2, (CONST84 char **)argv);</div><div class='del'>-</div><div class='del'>-#if USE_RUBY_ALLOC</div><div class='del'>-        free(argv);</div><div class='del'>-#else /* not USE_RUBY_ALLOC */</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	Tcl_EventuallyFree((ClientData)argv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Release((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-        /* free(argv); */</div><div class='del'>-        ckfree((char*)argv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#undef USE_RUBY_ALLOC</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_DecrRefCount(state_obj);</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    {</div><div class='del'>-        /* string interface */</div><div class='del'>-        char **argv;</div><div class='del'>-#define USE_RUBY_ALLOC 0</div><div class='del'>-#if USE_RUBY_ALLOC</div><div class='del'>-        argv = (char **)ALLOC_N(char *, 3);</div><div class='del'>-#else /* not USE_RUBY_ALLOC */</div><div class='del'>-        argv = (char **)ckalloc(sizeof(char *) * 3);</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Preserve((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-        argv[0] = "exit";</div><div class='del'>-        argv[1] = RSTRING_PTR(rb_fix2str(INT2NUM(state), 10));</div><div class='del'>-        argv[2] = (char *)NULL;</div><div class='del'>-</div><div class='del'>-        ptr-&gt;return_value = (*(info-&gt;proc))(info-&gt;clientData, ptr-&gt;ip, </div><div class='del'>-                                            2, argv);</div><div class='del'>-</div><div class='del'>-#if USE_RUBY_ALLOC</div><div class='del'>-        free(argv);</div><div class='del'>-#else /* not USE_RUBY_ALLOC */</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	Tcl_EventuallyFree((ClientData)argv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Release((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-        /* free(argv); */</div><div class='del'>-        ckfree(argv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#undef USE_RUBY_ALLOC</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    DUMP1("complete original_exit");</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Tk_ThreadTimer */</div><div class='del'>-static Tcl_TimerToken timer_token = (Tcl_TimerToken)NULL;</div><div class='del'>-</div><div class='del'>-/* timer callback */</div><div class='del'>-static void _timer_for_tcl _((ClientData));</div><div class='del'>-static void</div><div class='del'>-_timer_for_tcl(clientData)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-{</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* struct invoke_queue *q, *tmp; */</div><div class='del'>-    /* VALUE thread; */</div><div class='del'>-</div><div class='del'>-    DUMP1("call _timer_for_tcl");</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    Tcl_DeleteTimerHandler(timer_token);</div><div class='del'>-</div><div class='del'>-    run_timer_flag = 1;</div><div class='del'>-</div><div class='del'>-    if (timer_tick &gt; 0) {</div><div class='del'>-        timer_token = Tcl_CreateTimerHandler(timer_tick, _timer_for_tcl, </div><div class='del'>-                                             (ClientData)0);</div><div class='del'>-    } else {</div><div class='del'>-        timer_token = (Tcl_TimerToken)NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* rb_thread_schedule(); */</div><div class='del'>-    /* tick_counter += event_loop_max; */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#if USE_TOGGLE_WINDOW_MODE_FOR_IDLE</div><div class='del'>-static int</div><div class='del'>-toggle_eventloop_window_mode_for_idle()</div><div class='del'>-{</div><div class='del'>-  if (window_event_mode &amp; TCL_IDLE_EVENTS) {</div><div class='del'>-    /* idle -&gt; event */</div><div class='del'>-    window_event_mode |= TCL_WINDOW_EVENTS;</div><div class='del'>-    window_event_mode &amp;= ~TCL_IDLE_EVENTS;</div><div class='del'>-    return 1;</div><div class='del'>-  } else {</div><div class='del'>-    /* event -&gt; idle */</div><div class='del'>-    window_event_mode |= TCL_IDLE_EVENTS;</div><div class='del'>-    window_event_mode &amp;= ~TCL_WINDOW_EVENTS;</div><div class='del'>-    return 0;</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_eventloop_window_mode(self, mode)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE mode;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-</div><div class='del'>-    if (RTEST(mode)) {</div><div class='del'>-      window_event_mode = ~0;</div><div class='del'>-    } else {</div><div class='del'>-      window_event_mode = ~(TCL_WINDOW_EVENTS | TCL_IDLE_EVENTS);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return mode;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-get_eventloop_window_mode(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    if ( ~window_event_mode ) {</div><div class='del'>-      return Qfalse;</div><div class='del'>-    } else {</div><div class='del'>-      return Qtrue;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_eventloop_tick(self, tick)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE tick;</div><div class='del'>-{</div><div class='del'>-    int ttick = NUM2INT(tick);</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-</div><div class='del'>-    if (ttick &lt; 0) {</div><div class='del'>-        rb_raise(rb_eArgError, </div><div class='del'>-                 "timer-tick parameter must be 0 or positive number");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /* delete old timer callback */</div><div class='del'>-    Tcl_DeleteTimerHandler(timer_token);</div><div class='del'>-</div><div class='del'>-    timer_tick = req_timer_tick = ttick;</div><div class='del'>-    if (timer_tick &gt; 0) {</div><div class='del'>-        /* start timer callback */</div><div class='del'>-        timer_token = Tcl_CreateTimerHandler(timer_tick, _timer_for_tcl, </div><div class='del'>-                                             (ClientData)0);</div><div class='del'>-    } else {</div><div class='del'>-        timer_token = (Tcl_TimerToken)NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    return tick;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-get_eventloop_tick(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return INT2NUM(timer_tick);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_set_eventloop_tick(self, tick)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE tick;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return get_eventloop_tick(self);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL) {</div><div class='del'>-        /* slave IP */</div><div class='del'>-        return get_eventloop_tick(self);</div><div class='del'>-    }</div><div class='del'>-    return set_eventloop_tick(self, tick);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_eventloop_tick(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return get_eventloop_tick(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_no_event_wait(self, wait)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE wait;</div><div class='del'>-{</div><div class='del'>-    int t_wait = NUM2INT(wait);</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-</div><div class='del'>-    if (t_wait &lt;= 0) {</div><div class='del'>-        rb_raise(rb_eArgError, </div><div class='del'>-                 "no_event_wait parameter must be positive number");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    no_event_wait = t_wait;</div><div class='del'>-</div><div class='del'>-    return wait;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-get_no_event_wait(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return INT2NUM(no_event_wait);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_set_no_event_wait(self, wait)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE wait;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return get_no_event_wait(self);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL) {</div><div class='del'>-        /* slave IP */</div><div class='del'>-        return get_no_event_wait(self);</div><div class='del'>-    }</div><div class='del'>-    return set_no_event_wait(self, wait);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_no_event_wait(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return get_no_event_wait(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_eventloop_weight(self, loop_max, no_event)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE loop_max;</div><div class='del'>-    VALUE no_event;</div><div class='del'>-{</div><div class='del'>-    int lpmax = NUM2INT(loop_max);</div><div class='del'>-    int no_ev = NUM2INT(no_event);</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-</div><div class='del'>-    if (lpmax &lt;= 0 || no_ev &lt;= 0) {</div><div class='del'>-        rb_raise(rb_eArgError, "weight parameters must be positive numbers");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    event_loop_max = lpmax;</div><div class='del'>-    no_event_tick  = no_ev;</div><div class='del'>-</div><div class='del'>-    return rb_ary_new3(2, loop_max, no_event);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-get_eventloop_weight(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_ary_new3(2, INT2NUM(event_loop_max), INT2NUM(no_event_tick));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_set_eventloop_weight(self, loop_max, no_event)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE loop_max;</div><div class='del'>-    VALUE no_event;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return get_eventloop_weight(self);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL) {</div><div class='del'>-        /* slave IP */</div><div class='del'>-        return get_eventloop_weight(self);</div><div class='del'>-    }</div><div class='del'>-    return set_eventloop_weight(self, loop_max, no_event);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_eventloop_weight(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return get_eventloop_weight(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_max_block_time(self, time)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE time;</div><div class='del'>-{</div><div class='del'>-    struct Tcl_Time tcl_time;</div><div class='del'>-    VALUE divmod;</div><div class='del'>-</div><div class='del'>-    switch(TYPE(time)) {</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-        /* time is micro-second value */</div><div class='del'>-        divmod = rb_funcall(time, rb_intern("divmod"), 1, LONG2NUM(1000000));</div><div class='del'>-        tcl_time.sec  = NUM2LONG(RARRAY_PTR(divmod)[0]);</div><div class='del'>-        tcl_time.usec = NUM2LONG(RARRAY_PTR(divmod)[1]);</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case T_FLOAT:</div><div class='del'>-        /* time is second value */</div><div class='del'>-        divmod = rb_funcall(time, rb_intern("divmod"), 1, INT2FIX(1));</div><div class='del'>-        tcl_time.sec  = NUM2LONG(RARRAY_PTR(divmod)[0]);</div><div class='del'>-        tcl_time.usec = (long)(NUM2DBL(RARRAY_PTR(divmod)[1]) * 1000000);</div><div class='del'>-</div><div class='del'>-    default:</div><div class='del'>-        {</div><div class='del'>-	    VALUE tmp = rb_funcall(time, ID_inspect, 0, 0);</div><div class='del'>-	    rb_raise(rb_eArgError, "invalid value for time: '%s'", </div><div class='del'>-		     StringValuePtr(tmp));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_SetMaxBlockTime(&amp;tcl_time);</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'>-lib_evloop_thread_p(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(eventloop_thread)) {</div><div class='del'>-        return Qnil;    /* no eventloop */</div><div class='del'>-    } else if (rb_thread_current() == eventloop_thread) {</div><div class='del'>-        return Qtrue;   /* is eventloop */</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;  /* not eventloop */</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_evloop_abort_on_exc(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    if (event_loop_abort_on_exc &gt; 0) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else if (event_loop_abort_on_exc == 0) {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    } else {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_evloop_abort_on_exc(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return lib_evloop_abort_on_exc(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_evloop_abort_on_exc_set(self, val)</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (RTEST(val)) {</div><div class='del'>-        event_loop_abort_on_exc =  1;</div><div class='del'>-    } else if (NIL_P(val)) {</div><div class='del'>-        event_loop_abort_on_exc = -1;</div><div class='del'>-    } else {</div><div class='del'>-        event_loop_abort_on_exc =  0;</div><div class='del'>-    }</div><div class='del'>-    return lib_evloop_abort_on_exc(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_evloop_abort_on_exc_set(self, val)</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return lib_evloop_abort_on_exc(self);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL) {</div><div class='del'>-        /* slave IP */</div><div class='del'>-        return lib_evloop_abort_on_exc(self);</div><div class='del'>-    }</div><div class='del'>-    return lib_evloop_abort_on_exc_set(self, val);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_num_of_mainwindows_core(self, argc, argv)</div><div class='del'>-    VALUE self;</div><div class='del'>-    int   argc;   /* dummy */</div><div class='del'>-    VALUE *argv;  /* dummy */</div><div class='del'>-{</div><div class='del'>-    if (tk_stubs_init_p()) {</div><div class='del'>-        return INT2FIX(Tk_GetNumMainWindows());</div><div class='del'>-    } else {</div><div class='del'>-        return INT2FIX(0);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_num_of_mainwindows(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#ifdef RUBY_VM  /* Ruby 1.9+ !!! */</div><div class='del'>-    return tk_funcall(lib_num_of_mainwindows_core, 0, (VALUE*)NULL, self);</div><div class='del'>-#else</div><div class='del'>-    return lib_num_of_mainwindows_core(self, 0, (VALUE*)NULL);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM  /* Ruby 1.9+ !!! */</div><div class='del'>-static VALUE</div><div class='del'>-call_DoOneEvent_core(flag_val)</div><div class='del'>-    VALUE flag_val;</div><div class='del'>-{</div><div class='del'>-    int flag;</div><div class='del'>-</div><div class='del'>-    flag = FIX2INT(flag_val);</div><div class='del'>-    if (Tcl_DoOneEvent(flag)) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-call_DoOneEvent(flag_val)</div><div class='del'>-    VALUE flag_val;</div><div class='del'>-{</div><div class='del'>-  return tk_funcall(call_DoOneEvent_core, 0, (VALUE*)NULL, flag_val);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else  /* Ruby 1.8- */</div><div class='del'>-static VALUE</div><div class='del'>-call_DoOneEvent(flag_val)</div><div class='del'>-    VALUE flag_val;</div><div class='del'>-{</div><div class='del'>-    int flag;</div><div class='del'>-</div><div class='del'>-    flag = FIX2INT(flag_val);</div><div class='del'>-    if (Tcl_DoOneEvent(flag)) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-eventloop_sleep(dummy)</div><div class='del'>-    VALUE dummy;</div><div class='del'>-{</div><div class='del'>-    struct timeval t;</div><div class='del'>-</div><div class='del'>-    t.tv_sec = (time_t)0;</div><div class='del'>-    t.tv_usec = (time_t)(no_event_wait*1000.0);</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#if 0</div><div class='del'>-    if (!ruby_native_thread_p()) {</div><div class='del'>-        rb_bug("cross-thread violation on eventloop_sleep()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-    if (!is_ruby_native_thread()) {</div><div class='del'>-        rb_bug("cross-thread violation on eventloop_sleep()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    DUMP2("eventloop_sleep: rb_thread_wait_for() at thread : %lx", rb_thread_current());</div><div class='del'>-    rb_thread_wait_for(t);</div><div class='del'>-    DUMP2("eventloop_sleep: finish at thread : %lx", rb_thread_current());</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#if 0</div><div class='del'>-    if (!ruby_native_thread_p()) {</div><div class='del'>-        rb_bug("cross-thread violation on eventloop_sleep()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-    if (!is_ruby_native_thread()) {</div><div class='del'>-        rb_bug("cross-thread violation on eventloop_sleep()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define USE_EVLOOP_THREAD_ALONE_CHECK_FLAG 0</div><div class='del'>-</div><div class='del'>-#if USE_EVLOOP_THREAD_ALONE_CHECK_FLAG</div><div class='del'>-static int</div><div class='del'>-get_thread_alone_check_flag()</div><div class='del'>-{</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-  return 0;</div><div class='del'>-#else</div><div class='del'>-  set_tcltk_version();</div><div class='del'>-</div><div class='del'>-  if (tcltk_version.major &lt; 8) {</div><div class='del'>-    /* Tcl/Tk 7.x */</div><div class='del'>-    return 1;</div><div class='del'>-  } else if (tcltk_version.major == 8) {</div><div class='del'>-    if (tcltk_version.minor &lt; 5) {</div><div class='del'>-      /* Tcl/Tk 8.0 - 8.4 */</div><div class='del'>-      return 1;</div><div class='del'>-    } else if (tcltk_version.minor == 5) {</div><div class='del'>-      if (tcltk_version.type &lt; TCL_FINAL_RELEASE) {</div><div class='del'>-	/* Tcl/Tk 8.5a? - 8.5b? */</div><div class='del'>-	return 1;</div><div class='del'>-      } else {</div><div class='del'>-	/* Tcl/Tk 8.5.x */</div><div class='del'>-	return 0;</div><div class='del'>-      }</div><div class='del'>-    } else {</div><div class='del'>-      /* Tcl/Tk 8.6 - 8.9 ?? */</div><div class='del'>-      return 0;</div><div class='del'>-    }</div><div class='del'>-  } else {</div><div class='del'>-    /* Tcl/Tk 9+ ?? */</div><div class='del'>-    return 0;</div><div class='del'>-  }</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-lib_eventloop_core(check_root, update_flag, check_var, interp)</div><div class='del'>-    int check_root;</div><div class='del'>-    int update_flag;</div><div class='del'>-    int *check_var;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE current = eventloop_thread;</div><div class='del'>-    int found_event = 1;</div><div class='del'>-    int event_flag;</div><div class='del'>-    struct timeval t;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    int status;</div><div class='del'>-    int depth = rbtk_eventloop_depth;</div><div class='del'>-#if USE_EVLOOP_THREAD_ALONE_CHECK_FLAG</div><div class='del'>-    int thread_alone_check_flag = 1;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (update_flag) DUMP1("update loop start!!");</div><div class='del'>-</div><div class='del'>-    t.tv_sec = (time_t)0;</div><div class='del'>-    t.tv_usec = (time_t)(no_event_wait*1000.0);</div><div class='del'>-</div><div class='del'>-    Tcl_DeleteTimerHandler(timer_token);</div><div class='del'>-    run_timer_flag = 0;</div><div class='del'>-    if (timer_tick &gt; 0) {</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-        timer_token = Tcl_CreateTimerHandler(timer_tick, _timer_for_tcl, </div><div class='del'>-                                             (ClientData)0);</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-    } else {</div><div class='del'>-        timer_token = (Tcl_TimerToken)NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if USE_EVLOOP_THREAD_ALONE_CHECK_FLAG</div><div class='del'>-    /* version check */</div><div class='del'>-    thread_alone_check_flag = get_thread_alone_check_flag();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    for(;;) {</div><div class='del'>-#if USE_EVLOOP_THREAD_ALONE_CHECK_FLAG</div><div class='del'>-        if (thread_alone_check_flag &amp;&amp; rb_thread_alone()) {</div><div class='del'>-#else</div><div class='del'>-        if (rb_thread_alone()) {</div><div class='del'>-#endif</div><div class='del'>-            DUMP1("no other thread");</div><div class='del'>-            event_loop_wait_event = 0;</div><div class='del'>-</div><div class='del'>-            if (update_flag) {</div><div class='del'>-                event_flag = update_flag | TCL_DONT_WAIT; /* for safety */</div><div class='del'>-            } else {</div><div class='del'>-	        event_flag = TCL_ALL_EVENTS;</div><div class='del'>-	        /* event_flag = TCL_ALL_EVENTS | TCL_DONT_WAIT; */</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            if (timer_tick == 0 &amp;&amp; update_flag == 0) {</div><div class='del'>-                timer_tick = NO_THREAD_INTERRUPT_TIME;</div><div class='del'>-                timer_token = Tcl_CreateTimerHandler(timer_tick, </div><div class='del'>-                                                     _timer_for_tcl, </div><div class='del'>-                                                     (ClientData)0);</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            if (check_var != (int *)NULL) {</div><div class='del'>-                if (*check_var || !found_event) {</div><div class='del'>-                    return found_event;</div><div class='del'>-                }</div><div class='del'>-                if (interp != (Tcl_Interp*)NULL </div><div class='del'>-                    &amp;&amp; Tcl_InterpDeleted(interp)) {</div><div class='del'>-                    /* IP for check_var is deleted */</div><div class='del'>-                    return 0;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            /* found_event = Tcl_DoOneEvent(event_flag); */</div><div class='del'>-            found_event = RTEST(rb_protect(call_DoOneEvent, </div><div class='del'>-                                           INT2FIX(event_flag), &amp;status)); </div><div class='del'>-            if (status) {</div><div class='del'>-                switch (status) {</div><div class='del'>-                case TAG_RAISE:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                    if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-                    if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                        rbtk_pending_exception </div><div class='del'>-                            = rb_exc_new2(rb_eException, "unknown exception");</div><div class='del'>-                    } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                        rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                        rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-                        if (!NIL_P(rbtk_pending_exception)) {</div><div class='del'>-                            if (rbtk_eventloop_depth == 0) {</div><div class='del'>-                                VALUE exc = rbtk_pending_exception;</div><div class='del'>-                                rbtk_pending_exception = Qnil;</div><div class='del'>-                                rb_exc_raise(exc);</div><div class='del'>-                            } else {</div><div class='del'>-                                return 0;</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'>-                case TAG_FATAL:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                    if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-                    if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                        rb_exc_raise(rb_exc_new2(rb_eFatal, "FATAL"));</div><div class='del'>-                    } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                        rb_exc_raise(rb_errinfo());</div><div class='del'>-#else</div><div class='del'>-                        rb_exc_raise(ruby_errinfo);</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'>-            if (depth != rbtk_eventloop_depth) {</div><div class='del'>-                DUMP2("DoOneEvent(1) abnormal exit!! %d", </div><div class='del'>-                      rbtk_eventloop_depth);</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            if (check_var != (int*)NULL &amp;&amp; !NIL_P(rbtk_pending_exception)) {</div><div class='del'>-                DUMP1("exception on wait");</div><div class='del'>-                return 0;</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            if (pending_exception_check0()) {</div><div class='del'>-                /* pending -&gt; upper level */</div><div class='del'>-                return 0;</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            if (update_flag != 0) {</div><div class='del'>-              if (found_event) {</div><div class='del'>-                DUMP1("next update loop");</div><div class='del'>-                continue;</div><div class='del'>-              } else {</div><div class='del'>-                DUMP1("update complete");</div><div class='del'>-                return 0;</div><div class='del'>-              }</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            DUMP1("trap check");</div><div class='del'>-            if (rb_trap_pending) {</div><div class='del'>-                run_timer_flag = 0;</div><div class='del'>-                if (rb_prohibit_interrupt || check_var != (int*)NULL) {</div><div class='del'>-                    /* pending or on wait command */</div><div class='del'>-                    return 0;</div><div class='del'>-                } else {</div><div class='del'>-                    rb_trap_exec();</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            DUMP1("check Root Widget");</div><div class='del'>-            if (check_root &amp;&amp; tk_stubs_init_p() &amp;&amp; Tk_GetNumMainWindows() == 0) {</div><div class='del'>-                run_timer_flag = 0;</div><div class='del'>-                if (rb_trap_pending) {</div><div class='del'>-                    if (rb_prohibit_interrupt || check_var != (int*)NULL) {</div><div class='del'>-                        /* pending or on wait command */</div><div class='del'>-                        return 0;</div><div class='del'>-                    } else {</div><div class='del'>-                        rb_trap_exec();</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'>-            if (loop_counter++ &gt; 30000) {</div><div class='del'>-                /* fprintf(stderr, "loop_counter &gt; 30000\n"); */</div><div class='del'>-                loop_counter = 0;</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-        } else {</div><div class='del'>-            int tick_counter;</div><div class='del'>-</div><div class='del'>-            DUMP1("there are other threads");</div><div class='del'>-            event_loop_wait_event = 1;</div><div class='del'>-</div><div class='del'>-            found_event = 1;</div><div class='del'>-</div><div class='del'>-            if (update_flag) {</div><div class='del'>-                event_flag = update_flag | TCL_DONT_WAIT; /* for safety */</div><div class='del'>-            } else {</div><div class='del'>-                event_flag = TCL_ALL_EVENTS | TCL_DONT_WAIT;</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            timer_tick = req_timer_tick;</div><div class='del'>-            tick_counter = 0;</div><div class='del'>-            while(tick_counter &lt; event_loop_max) {</div><div class='del'>-                if (check_var != (int *)NULL) {</div><div class='del'>-                    if (*check_var || !found_event) {</div><div class='del'>-                        return found_event;</div><div class='del'>-                    }</div><div class='del'>-                    if (interp != (Tcl_Interp*)NULL </div><div class='del'>-                        &amp;&amp; Tcl_InterpDeleted(interp)) {</div><div class='del'>-                        /* IP for check_var is deleted */</div><div class='del'>-                        return 0;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (NIL_P(eventloop_thread) || current == eventloop_thread) {</div><div class='del'>-                    int st;</div><div class='del'>-                    int status;</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-		    if (update_flag) {</div><div class='del'>-		      st = RTEST(rb_protect(call_DoOneEvent, </div><div class='del'>-					    INT2FIX(event_flag), &amp;status)); </div><div class='del'>-		    } else {</div><div class='del'>-		      st = RTEST(rb_protect(call_DoOneEvent, </div><div class='del'>-					    INT2FIX(event_flag &amp; window_event_mode), </div><div class='del'>-					    &amp;status)); </div><div class='del'>-#if USE_TOGGLE_WINDOW_MODE_FOR_IDLE</div><div class='del'>-		      if (!st) {</div><div class='del'>-			if (toggle_eventloop_window_mode_for_idle()) {</div><div class='del'>-			  /* idle-mode -&gt; event-mode*/</div><div class='del'>-			  tick_counter = event_loop_max;</div><div class='del'>-			} else {</div><div class='del'>-			  /* event-mode -&gt; idle-mode */</div><div class='del'>-			  tick_counter = 0;</div><div class='del'>-			}</div><div class='del'>-		      }</div><div class='del'>-#endif</div><div class='del'>-		    }</div><div class='del'>-#else</div><div class='del'>-                    /* st = Tcl_DoOneEvent(event_flag); */</div><div class='del'>-                    st = RTEST(rb_protect(call_DoOneEvent, </div><div class='del'>-                                          INT2FIX(event_flag), &amp;status)); </div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if CONTROL_BY_STATUS_OF_RB_THREAD_WAITING_FOR_VALUE</div><div class='del'>-		    if (have_rb_thread_waiting_for_value) {</div><div class='del'>-		      have_rb_thread_waiting_for_value = 0;</div><div class='del'>-		      rb_thread_schedule();</div><div class='del'>-		    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-                    if (status) {</div><div class='del'>-                        switch (status) {</div><div class='del'>-                        case TAG_RAISE:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                            if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-                            if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                                rbtk_pending_exception </div><div class='del'>-                                    = rb_exc_new2(rb_eException, </div><div class='del'>-                                                  "unknown exception");</div><div class='del'>-                            } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                                rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                                rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-                                if (!NIL_P(rbtk_pending_exception)) {</div><div class='del'>-                                    if (rbtk_eventloop_depth == 0) {</div><div class='del'>-                                        VALUE exc = rbtk_pending_exception;</div><div class='del'>-                                        rbtk_pending_exception = Qnil;</div><div class='del'>-                                        rb_exc_raise(exc);</div><div class='del'>-                                    } else {</div><div class='del'>-                                        return 0;</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'>-                        case TAG_FATAL:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                            if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-                            if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                                rb_exc_raise(rb_exc_new2(rb_eFatal, "FATAL"));</div><div class='del'>-                            } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                                rb_exc_raise(rb_errinfo());</div><div class='del'>-#else</div><div class='del'>-                                rb_exc_raise(ruby_errinfo);</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'>-                    if (depth != rbtk_eventloop_depth) {</div><div class='del'>-                        DUMP2("DoOneEvent(2) abnormal exit!! %d", </div><div class='del'>-                              rbtk_eventloop_depth);</div><div class='del'>-                        return 0;</div><div class='del'>-                    }</div><div class='del'>-</div><div class='del'>-                    DUMP1("trap check");</div><div class='del'>-                    if (rb_trap_pending) {</div><div class='del'>-                        run_timer_flag = 0;</div><div class='del'>-                        if (rb_prohibit_interrupt || check_var != (int*)NULL) {</div><div class='del'>-                            /* pending or on wait command */</div><div class='del'>-                            return 0;</div><div class='del'>-                        } else {</div><div class='del'>-                            rb_trap_exec();</div><div class='del'>-                        }</div><div class='del'>-                    }</div><div class='del'>-</div><div class='del'>-                    if (check_var != (int*)NULL </div><div class='del'>-                        &amp;&amp; !NIL_P(rbtk_pending_exception)) {</div><div class='del'>-                        DUMP1("exception on wait");</div><div class='del'>-                        return 0;</div><div class='del'>-                    }</div><div class='del'>-</div><div class='del'>-                    if (pending_exception_check0()) {</div><div class='del'>-                        /* pending -&gt; upper level */</div><div class='del'>-                        return 0;</div><div class='del'>-                    }</div><div class='del'>-</div><div class='del'>-                    if (st) {</div><div class='del'>-                        tick_counter++;</div><div class='del'>-                    } else {</div><div class='del'>-                        if (update_flag != 0) {</div><div class='del'>-                            DUMP1("update complete");</div><div class='del'>-                            return 0;</div><div class='del'>-                        }</div><div class='del'>-</div><div class='del'>-                        tick_counter += no_event_tick;</div><div class='del'>-</div><div class='del'>-                        /* rb_thread_wait_for(t); */</div><div class='del'>-</div><div class='del'>-                        rb_protect(eventloop_sleep, Qnil, &amp;status);</div><div class='del'>-</div><div class='del'>-                        if (status) {</div><div class='del'>-                            switch (status) {</div><div class='del'>-                            case TAG_RAISE:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                                if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-                                if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                                    rbtk_pending_exception </div><div class='del'>-                                        = rb_exc_new2(rb_eException, </div><div class='del'>-                                                      "unknown exception");</div><div class='del'>-                                } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                                    rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                                    rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-                                    if (!NIL_P(rbtk_pending_exception)) {</div><div class='del'>-                                        if (rbtk_eventloop_depth == 0) {</div><div class='del'>-                                            VALUE exc = rbtk_pending_exception;</div><div class='del'>-                                            rbtk_pending_exception = Qnil;</div><div class='del'>-                                            rb_exc_raise(exc);</div><div class='del'>-                                        } else {</div><div class='del'>-                                            return 0;</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'>-                            case TAG_FATAL:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                                if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-                                if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                                    rb_exc_raise(rb_exc_new2(rb_eFatal, </div><div class='del'>-                                                             "FATAL"));</div><div class='del'>-                                } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                                    rb_exc_raise(rb_errinfo());</div><div class='del'>-#else</div><div class='del'>-                                    rb_exc_raise(ruby_errinfo);</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='del'>-                } else {</div><div class='del'>-                    DUMP2("sleep eventloop %lx", current);</div><div class='del'>-                    DUMP2("eventloop thread is %lx", eventloop_thread);</div><div class='del'>-                    /* rb_thread_stop(); */</div><div class='del'>-                    rb_thread_sleep_forever();</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (!NIL_P(watchdog_thread) &amp;&amp; eventloop_thread != current) {</div><div class='del'>-                    return 1;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                DUMP1("trap check");</div><div class='del'>-                if (rb_trap_pending) {</div><div class='del'>-                    run_timer_flag = 0;</div><div class='del'>-                    if (rb_prohibit_interrupt || check_var != (int*)NULL) {</div><div class='del'>-                        /* pending or on wait command */</div><div class='del'>-                        return 0;</div><div class='del'>-                    } else {</div><div class='del'>-                        rb_trap_exec();</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                DUMP1("check Root Widget");</div><div class='del'>-                if (check_root &amp;&amp; tk_stubs_init_p() &amp;&amp; Tk_GetNumMainWindows() == 0) {</div><div class='del'>-                    run_timer_flag = 0;</div><div class='del'>-                    if (rb_trap_pending) {</div><div class='del'>-                        if (rb_prohibit_interrupt || check_var != (int*)NULL) {</div><div class='del'>-                            /* pending or on wait command */</div><div class='del'>-                            return 0;</div><div class='del'>-                        } else {</div><div class='del'>-                            rb_trap_exec();</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'>-                if (loop_counter++ &gt; 30000) {</div><div class='del'>-                    /* fprintf(stderr, "loop_counter &gt; 30000\n"); */</div><div class='del'>-                    loop_counter = 0;</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (run_timer_flag) {</div><div class='del'>-                    /*</div><div class='del'>-                    DUMP1("timer interrupt");</div><div class='del'>-                    run_timer_flag = 0;</div><div class='del'>-                    */</div><div class='del'>-                    break; /* switch to other thread */</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            DUMP1("thread scheduling");</div><div class='del'>-            rb_thread_schedule();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DUMP1("trap check &amp; thread scheduling");</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-        /* if (update_flag == 0) CHECK_INTS; */ /*XXXXXXXXXXXXX  TODO !!!! */</div><div class='del'>-#else</div><div class='del'>-        if (update_flag == 0) CHECK_INTS;</div><div class='del'>-#endif</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'>-</div><div class='del'>-struct evloop_params {</div><div class='del'>-    int check_root;</div><div class='del'>-    int update_flag;</div><div class='del'>-    int *check_var;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-lib_eventloop_main_core(args)</div><div class='del'>-    VALUE args;</div><div class='del'>-{</div><div class='del'>-    struct evloop_params *params = (struct evloop_params *)args;</div><div class='del'>-</div><div class='del'>-    check_rootwidget_flag = params-&gt;check_root;</div><div class='del'>-</div><div class='del'>-    if (lib_eventloop_core(params-&gt;check_root, </div><div class='del'>-                           params-&gt;update_flag, </div><div class='del'>-                           params-&gt;check_var, </div><div class='del'>-                           params-&gt;interp)) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-lib_eventloop_main(args)</div><div class='del'>-    VALUE args;</div><div class='del'>-{</div><div class='del'>-    return lib_eventloop_main_core(args);</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    int status = 0;</div><div class='del'>-</div><div class='del'>-    ret = rb_protect(lib_eventloop_main_core, args, &amp;status);</div><div class='del'>-</div><div class='del'>-    switch (status) {</div><div class='del'>-    case TAG_RAISE:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-        if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-        if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-            rbtk_pending_exception </div><div class='del'>-                = rb_exc_new2(rb_eException, "unknown exception");</div><div class='del'>-        } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-            rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-        }</div><div class='del'>-        return Qnil;</div><div class='del'>-</div><div class='del'>-    case TAG_FATAL:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-        if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-        if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-            rbtk_pending_exception = rb_exc_new2(rb_eFatal, "FATAL");</div><div class='del'>-        } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-            rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-        }</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-lib_eventloop_ensure(args)</div><div class='del'>-    VALUE args;</div><div class='del'>-{</div><div class='del'>-    struct evloop_params *ptr = (struct evloop_params *)args;</div><div class='del'>-    volatile VALUE current_evloop = rb_thread_current();</div><div class='del'>-</div><div class='del'>-    DUMP2("eventloop_ensure: current-thread : %lx", current_evloop);</div><div class='del'>-    DUMP2("eventloop_ensure: eventloop-thread : %lx", eventloop_thread);</div><div class='del'>-    if (eventloop_thread != current_evloop) {</div><div class='del'>-        DUMP2("finish eventloop %lx (NOT current eventloop)", current_evloop);</div><div class='del'>-</div><div class='del'>-	rb_thread_critical = ptr-&gt;thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        free(ptr);</div><div class='del'>-        /* ckfree((char*)ptr); */</div><div class='del'>-</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while((eventloop_thread = rb_ary_pop(eventloop_stack))) {</div><div class='del'>-        DUMP2("eventloop-ensure: new eventloop-thread -&gt; %lx", </div><div class='del'>-              eventloop_thread);</div><div class='del'>-</div><div class='del'>-        if (eventloop_thread == current_evloop) {</div><div class='del'>-            rbtk_eventloop_depth--;</div><div class='del'>-            DUMP2("eventloop %lx : back from recursive call", current_evloop);</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (NIL_P(eventloop_thread)) {</div><div class='del'>-          Tcl_DeleteTimerHandler(timer_token);</div><div class='del'>-          timer_token = (Tcl_TimerToken)NULL;</div><div class='del'>-</div><div class='del'>-          break; </div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* if (RTEST(rb_funcall(eventloop_thread, ID_alive_p, 0, 0))) { */</div><div class='del'>-	if (RTEST(rb_thread_alive_p(eventloop_thread))) {</div><div class='del'>-            DUMP2("eventloop-enshure: wake up parent %lx", eventloop_thread);</div><div class='del'>-            rb_thread_wakeup(eventloop_thread);</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'>-#ifdef RUBY_VM</div><div class='del'>-    if (NIL_P(eventloop_thread)) {</div><div class='del'>-        tk_eventloop_thread_id = (Tcl_ThreadId) 0;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = ptr-&gt;thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    free(ptr);</div><div class='del'>-    /* ckfree((char*)ptr);*/</div><div class='del'>-</div><div class='del'>-    DUMP2("finish current eventloop %lx", current_evloop);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_eventloop_launcher(check_root, update_flag, check_var, interp)</div><div class='del'>-    int check_root;</div><div class='del'>-    int update_flag;</div><div class='del'>-    int *check_var;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE parent_evloop = eventloop_thread;</div><div class='del'>-    struct evloop_params *args = ALLOC(struct evloop_params);</div><div class='del'>-    /* struct evloop_params *args = (struct evloop_params *)ckalloc(sizeof(struct evloop_params)); */</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    eventloop_thread = rb_thread_current();</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    tk_eventloop_thread_id = Tcl_GetCurrentThread();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (parent_evloop == eventloop_thread) {</div><div class='del'>-        DUMP2("eventloop: recursive call on %lx", parent_evloop);</div><div class='del'>-        rbtk_eventloop_depth++;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(parent_evloop) &amp;&amp; parent_evloop != eventloop_thread) {</div><div class='del'>-        DUMP2("wait for stop of parent_evloop %lx", parent_evloop);</div><div class='del'>-        while(!RTEST(rb_funcall(parent_evloop, ID_stop_p, 0))) {</div><div class='del'>-            DUMP2("parent_evloop %lx doesn't stop", parent_evloop);</div><div class='del'>-            rb_thread_run(parent_evloop);</div><div class='del'>-        }</div><div class='del'>-        DUMP1("succeed to stop parent");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_ary_push(eventloop_stack, parent_evloop);</div><div class='del'>-</div><div class='del'>-    DUMP3("tcltklib: eventloop-thread : %lx -&gt; %lx\n", </div><div class='del'>-                parent_evloop, eventloop_thread);</div><div class='del'>-</div><div class='del'>-    args-&gt;check_root   = check_root;</div><div class='del'>-    args-&gt;update_flag  = update_flag;</div><div class='del'>-    args-&gt;check_var    = check_var;</div><div class='del'>-    args-&gt;interp       = interp;</div><div class='del'>-    args-&gt;thr_crit_bup = rb_thread_critical;</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = Qfalse;</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-    return rb_ensure(lib_eventloop_main, (VALUE)args, </div><div class='del'>-                     lib_eventloop_ensure, (VALUE)args);</div><div class='del'>-#endif</div><div class='del'>-    return rb_ensure(lib_eventloop_main_core, (VALUE)args, </div><div class='del'>-                     lib_eventloop_ensure, (VALUE)args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* execute Tk_MainLoop */</div><div class='del'>-static VALUE</div><div class='del'>-lib_mainloop(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 check_rootwidget;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;check_rootwidget) == 0) {</div><div class='del'>-        check_rootwidget = Qtrue;</div><div class='del'>-    } else if (RTEST(check_rootwidget)) {</div><div class='del'>-        check_rootwidget = Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        check_rootwidget = Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return lib_eventloop_launcher(RTEST(check_rootwidget), 0, </div><div class='del'>-                                  (int*)NULL, (Tcl_Interp*)NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_mainloop(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'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL) {</div><div class='del'>-        /* slave IP */</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return lib_mainloop(argc, argv, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-watchdog_evloop_launcher(check_rootwidget)</div><div class='del'>-    VALUE check_rootwidget;</div><div class='del'>-{</div><div class='del'>-    return lib_eventloop_launcher(RTEST(check_rootwidget), 0, </div><div class='del'>-                                  (int*)NULL, (Tcl_Interp*)NULL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define EVLOOP_WAKEUP_CHANCE 3</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_watchdog_core(check_rootwidget)</div><div class='del'>-    VALUE check_rootwidget;</div><div class='del'>-{</div><div class='del'>-    VALUE evloop;</div><div class='del'>-    int   prev_val = -1;</div><div class='del'>-    int   chance = 0;</div><div class='del'>-    int   check = RTEST(check_rootwidget);</div><div class='del'>-    struct timeval t0, t1;</div><div class='del'>-</div><div class='del'>-    t0.tv_sec  = (time_t)0;</div><div class='del'>-    t0.tv_usec = (time_t)((NO_THREAD_INTERRUPT_TIME)*1000.0);</div><div class='del'>-    t1.tv_sec  = (time_t)0;</div><div class='del'>-    t1.tv_usec = (time_t)((WATCHDOG_INTERVAL)*1000.0);</div><div class='del'>-</div><div class='del'>-    /* check other watchdog thread */</div><div class='del'>-    if (!NIL_P(watchdog_thread)) {</div><div class='del'>-        if (RTEST(rb_funcall(watchdog_thread, ID_stop_p, 0))) {</div><div class='del'>-            rb_funcall(watchdog_thread, ID_kill, 0);</div><div class='del'>-        } else {</div><div class='del'>-            return Qnil;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    watchdog_thread = rb_thread_current();</div><div class='del'>-</div><div class='del'>-    /* watchdog start */</div><div class='del'>-    do {</div><div class='del'>-        if (NIL_P(eventloop_thread)</div><div class='del'>-            || (loop_counter == prev_val &amp;&amp; chance &gt;= EVLOOP_WAKEUP_CHANCE)) {</div><div class='del'>-            /* start new eventloop thread */</div><div class='del'>-            DUMP2("eventloop thread %lx is sleeping or dead", </div><div class='del'>-                  eventloop_thread);</div><div class='del'>-            evloop = rb_thread_create(watchdog_evloop_launcher, </div><div class='del'>-                                      (void*)&amp;check_rootwidget);</div><div class='del'>-            DUMP2("create new eventloop thread %lx", evloop);</div><div class='del'>-            loop_counter = -1;</div><div class='del'>-            chance = 0;</div><div class='del'>-            rb_thread_run(evloop);</div><div class='del'>-        } else {</div><div class='del'>-            prev_val = loop_counter;</div><div class='del'>-            if (RTEST(rb_funcall(eventloop_thread, ID_stop_p, 0))) {</div><div class='del'>-                ++chance;</div><div class='del'>-            } else {</div><div class='del'>-                chance = 0;</div><div class='del'>-            }</div><div class='del'>-            if (event_loop_wait_event) {</div><div class='del'>-                rb_thread_wait_for(t0);</div><div class='del'>-            } else {</div><div class='del'>-                rb_thread_wait_for(t1);</div><div class='del'>-            }</div><div class='del'>-            /* rb_thread_schedule(); */</div><div class='del'>-        }</div><div class='del'>-    } while(!check || !tk_stubs_init_p() || Tk_GetNumMainWindows() != 0);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-lib_watchdog_ensure(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    eventloop_thread = Qnil; /* stop eventloops */</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    tk_eventloop_thread_id = (Tcl_ThreadId) 0;</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'>-lib_mainloop_watchdog(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 check_rootwidget;</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    rb_raise(rb_eNotImpError, </div><div class='del'>-	     "eventloop_watchdog is not implemented on Ruby VM.");</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;check_rootwidget) == 0) {</div><div class='del'>-        check_rootwidget = Qtrue;</div><div class='del'>-    } else if (RTEST(check_rootwidget)) {</div><div class='del'>-        check_rootwidget = Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        check_rootwidget = Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_ensure(lib_watchdog_core, check_rootwidget, </div><div class='del'>-                     lib_watchdog_ensure, Qnil);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_mainloop_watchdog(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'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL) {</div><div class='del'>-        /* slave IP */</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return lib_mainloop_watchdog(argc, argv, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* thread-safe(?) interaction between Ruby and Tk */</div><div class='del'>-struct thread_call_proc_arg {</div><div class='del'>-    VALUE proc;</div><div class='del'>-    int *done;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-void </div><div class='del'>-_thread_call_proc_arg_mark(struct thread_call_proc_arg *q)</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(q-&gt;proc);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-_thread_call_proc_core(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct thread_call_proc_arg *q = (struct thread_call_proc_arg*)arg;</div><div class='del'>-    return rb_funcall(q-&gt;proc, ID_call, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-_thread_call_proc_ensure(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct thread_call_proc_arg *q = (struct thread_call_proc_arg*)arg;</div><div class='del'>-    *(q-&gt;done) = 1;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-_thread_call_proc(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct thread_call_proc_arg *q = (struct thread_call_proc_arg*)arg;</div><div class='del'>-</div><div class='del'>-    return rb_ensure(_thread_call_proc_core, (VALUE)q, </div><div class='del'>-                     _thread_call_proc_ensure, (VALUE)q);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-_thread_call_proc_value(th)</div><div class='del'>-    VALUE th;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(th, ID_value, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_thread_callback(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'>-    struct thread_call_proc_arg *q;</div><div class='del'>-    VALUE proc, th, ret;</div><div class='del'>-    int status, foundEvent;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;proc) == 0) {</div><div class='del'>-        proc = rb_block_proc();</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    q = (struct thread_call_proc_arg *)ALLOC(struct thread_call_proc_arg);</div><div class='del'>-    /* q = (struct thread_call_proc_arg *)ckalloc(sizeof(struct thread_call_proc_arg)); */</div><div class='del'>-    q-&gt;proc = proc;</div><div class='del'>-    q-&gt;done = (int*)ALLOC(int);</div><div class='del'>-    /* q-&gt;done = (int*)ckalloc(sizeof(int)); */</div><div class='del'>-    *(q-&gt;done) = 0;</div><div class='del'>-</div><div class='del'>-    /* create call-proc thread */</div><div class='del'>-    th = rb_thread_create(_thread_call_proc, (void*)q);</div><div class='del'>-</div><div class='del'>-    rb_thread_schedule();</div><div class='del'>-</div><div class='del'>-    /* start sub-eventloop */</div><div class='del'>-    foundEvent = RTEST(lib_eventloop_launcher(/* not check root-widget */0, 0, </div><div class='del'>-                                              q-&gt;done, (Tcl_Interp*)NULL));</div><div class='del'>-</div><div class='del'>-    /* if (RTEST(rb_funcall(th, ID_alive_p, 0))) { */</div><div class='del'>-    if (RTEST(rb_thread_alive_p(th))) {</div><div class='del'>-        rb_funcall(th, ID_kill, 0);</div><div class='del'>-        ret = Qnil;</div><div class='del'>-    } else {</div><div class='del'>-        ret = rb_protect(_thread_call_proc_value, th, &amp;status);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    free(q-&gt;done);</div><div class='del'>-    free(q);</div><div class='del'>-    /* ckfree((char*)q-&gt;done); */</div><div class='del'>-    /* ckfree((char*)q); */</div><div class='del'>-</div><div class='del'>-    if (NIL_P(rbtk_pending_exception)) {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-        /* return rb_errinfo(); */</div><div class='del'>-        if (status) {</div><div class='del'>-            rb_exc_raise(rb_errinfo());</div><div class='del'>-        }</div><div class='del'>-#else</div><div class='del'>-        /* return ruby_errinfo; */</div><div class='del'>-        if (status) {</div><div class='del'>-            rb_exc_raise(ruby_errinfo);</div><div class='del'>-        }</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-        VALUE exc = rbtk_pending_exception;</div><div class='del'>-        rbtk_pending_exception = Qnil;</div><div class='del'>-        /* return exc; */</div><div class='del'>-        rb_exc_raise(exc);</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'>-/* do_one_event */</div><div class='del'>-static VALUE</div><div class='del'>-lib_do_one_event_core(argc, argv, self, is_ip)</div><div class='del'>-    int   argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-    int   is_ip;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE vflags;</div><div class='del'>-    int flags;</div><div class='del'>-    int found_event;</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(eventloop_thread)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "eventloop is already running");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;vflags) == 0) {</div><div class='del'>-        flags = TCL_ALL_EVENTS | TCL_DONT_WAIT;</div><div class='del'>-    } else {</div><div class='del'>-        Check_Type(vflags, T_FIXNUM);</div><div class='del'>-        flags = FIX2INT(vflags);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4 || (rb_safe_level() &gt;=1 &amp;&amp; OBJ_TAINTED(vflags))) {</div><div class='del'>-      flags |= TCL_DONT_WAIT;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (is_ip) {</div><div class='del'>-        /* check IP */</div><div class='del'>-        struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-        /* ip is deleted? */</div><div class='del'>-        if (deleted_ip(ptr)) {</div><div class='del'>-            return Qfalse;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL) {</div><div class='del'>-            /* slave IP */</div><div class='del'>-            flags |= TCL_DONT_WAIT;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* found_event = Tcl_DoOneEvent(TCL_ALL_EVENTS | TCL_DONT_WAIT); */</div><div class='del'>-    found_event = Tcl_DoOneEvent(flags);</div><div class='del'>-</div><div class='del'>-    if (pending_exception_check0()) {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (found_event) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_do_one_event(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'>-    return lib_do_one_event_core(argc, argv, self, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_do_one_event(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'>-    return lib_do_one_event_core(argc, argv, self, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ip_set_exc_message(interp, exc)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    VALUE exc;</div><div class='del'>-{</div><div class='del'>-    char *buf;</div><div class='del'>-    Tcl_DString dstr;</div><div class='del'>-    volatile VALUE msg;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt; 0)</div><div class='del'>-    volatile VALUE enc;</div><div class='del'>-    Tcl_Encoding encoding;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    msg = rb_funcall(exc, ID_message, 0, 0);</div><div class='del'>-    StringValue(msg);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt; 0)</div><div class='del'>-    enc = rb_attr_get(exc, ID_at_enc);</div><div class='del'>-    if (NIL_P(enc)) {</div><div class='del'>-        enc = rb_attr_get(msg, ID_at_enc);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(enc)) {</div><div class='del'>-        encoding = (Tcl_Encoding)NULL;</div><div class='del'>-    } else if (TYPE(enc) == T_STRING) {</div><div class='del'>-        /* encoding = Tcl_GetEncoding(interp, RSTRING_PTR(enc)); */</div><div class='del'>-        encoding = Tcl_GetEncoding((Tcl_Interp*)NULL, RSTRING_PTR(enc));</div><div class='del'>-    } else {</div><div class='del'>-        enc = rb_funcall(enc, ID_to_s, 0, 0);</div><div class='del'>-        /* encoding = Tcl_GetEncoding(interp, RSTRING_PTR(enc)); */</div><div class='del'>-        encoding = Tcl_GetEncoding((Tcl_Interp*)NULL, RSTRING_PTR(enc));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* to avoid a garbled error message dialog */</div><div class='del'>-    /* buf = ALLOC_N(char, (RSTRING(msg)-&gt;len)+1);*/</div><div class='del'>-    /* memcpy(buf, RSTRING(msg)-&gt;ptr, RSTRING(msg)-&gt;len);*/</div><div class='del'>-    /* buf[RSTRING(msg)-&gt;len] = 0; */</div><div class='del'>-    buf = ALLOC_N(char, RSTRING_LEN(msg)+1);</div><div class='del'>-    /* buf = ckalloc(sizeof(char)*((RSTRING_LEN(msg))+1)); */</div><div class='del'>-    memcpy(buf, RSTRING_PTR(msg), RSTRING_LEN(msg));</div><div class='del'>-    buf[RSTRING_LEN(msg)] = 0;</div><div class='del'>-</div><div class='del'>-    Tcl_DStringInit(&amp;dstr);</div><div class='del'>-    Tcl_DStringFree(&amp;dstr);</div><div class='del'>-    Tcl_ExternalToUtfDString(encoding, buf, RSTRING_LEN(msg), &amp;dstr);</div><div class='del'>-</div><div class='del'>-    Tcl_AppendResult(interp, Tcl_DStringValue(&amp;dstr), (char*)NULL);</div><div class='del'>-    DUMP2("error message:%s", Tcl_DStringValue(&amp;dstr));</div><div class='del'>-    Tcl_DStringFree(&amp;dstr);</div><div class='del'>-    free(buf);</div><div class='del'>-    /* ckfree(buf); */</div><div class='del'>-</div><div class='del'>-#else /* TCL_VERSION &lt;= 8.0 */</div><div class='del'>-    Tcl_AppendResult(interp, RSTRING_PTR(msg), (char*)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-TkStringValue(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    switch(TYPE(obj)) {</div><div class='del'>-    case T_STRING:</div><div class='del'>-        return obj;</div><div class='del'>-</div><div class='del'>-    case T_NIL:</div><div class='del'>-        return rb_str_new2("");</div><div class='del'>-</div><div class='del'>-    case T_TRUE:</div><div class='del'>-        return rb_str_new2("1");</div><div class='del'>-</div><div class='del'>-    case T_FALSE:</div><div class='del'>-        return rb_str_new2("0");</div><div class='del'>-</div><div class='del'>-    case T_ARRAY:</div><div class='del'>-        return rb_funcall(obj, ID_join, 1, rb_str_new2(" "));</div><div class='del'>-</div><div class='del'>-    default:</div><div class='del'>-        if (rb_respond_to(obj, ID_to_s)) {</div><div class='del'>-            return rb_funcall(obj, ID_to_s, 0, 0);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_funcall(obj, ID_inspect, 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-tcl_protect_core(interp, proc, data) /* should not raise exception */</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    VALUE (*proc)();</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE ret, exc = Qnil;</div><div class='del'>-    int status = 0;</div><div class='del'>-    int thr_crit_bup = rb_thread_critical;</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = Qfalse;</div><div class='del'>-    ret = rb_protect(proc, data, &amp;status);</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-    if (status) {</div><div class='del'>-        char *buf;</div><div class='del'>-        VALUE old_gc;</div><div class='del'>-        volatile VALUE type, str;</div><div class='del'>-</div><div class='del'>-        old_gc = rb_gc_disable();</div><div class='del'>-</div><div class='del'>-        switch(status) {</div><div class='del'>-        case TAG_RETURN:</div><div class='del'>-            type = eTkCallbackReturn;</div><div class='del'>-            goto error;</div><div class='del'>-        case TAG_BREAK:</div><div class='del'>-            type = eTkCallbackBreak;</div><div class='del'>-            goto error;</div><div class='del'>-        case TAG_NEXT:</div><div class='del'>-            type = eTkCallbackContinue;</div><div class='del'>-            goto error;</div><div class='del'>-        error:</div><div class='del'>-            str = rb_str_new2("LocalJumpError: ");</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            rb_str_append(str, rb_obj_as_string(rb_errinfo()));</div><div class='del'>-#else</div><div class='del'>-            rb_str_append(str, rb_obj_as_string(ruby_errinfo));</div><div class='del'>-#endif</div><div class='del'>-            exc = rb_exc_new3(type, str);</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        case TAG_RETRY:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-            if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                DUMP1("rb_protect: retry");</div><div class='del'>-                exc = rb_exc_new2(eTkCallbackRetry, "retry jump error");</div><div class='del'>-            } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                exc = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                exc = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-            }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        case TAG_REDO:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-            if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                DUMP1("rb_protect: redo");</div><div class='del'>-                exc = rb_exc_new2(eTkCallbackRedo,  "redo jump error");</div><div class='del'>-            } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                exc = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                exc = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-            }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        case TAG_RAISE:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-            if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                exc = rb_exc_new2(rb_eException, "unknown exception");</div><div class='del'>-            } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                exc = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                exc = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-            }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        case TAG_FATAL:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-            if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                exc = rb_exc_new2(rb_eFatal, "FATAL");</div><div class='del'>-            } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                exc = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                exc = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-            }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        case TAG_THROW:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-            if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                DUMP1("rb_protect: throw");</div><div class='del'>-                exc = rb_exc_new2(eTkCallbackThrow,  "throw jump error");</div><div class='del'>-            } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                exc = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                exc = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-            }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        default:</div><div class='del'>-            buf = ALLOC_N(char, 256);</div><div class='del'>-            /* buf = ckalloc(sizeof(char) * 256); */</div><div class='del'>-            sprintf(buf, "unknown loncaljmp status %d", status);</div><div class='del'>-            exc = rb_exc_new2(rb_eException, buf);</div><div class='del'>-            free(buf);</div><div class='del'>-            /* ckfree(buf); */</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (old_gc == Qfalse) rb_gc_enable();</div><div class='del'>-</div><div class='del'>-        ret = Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    /* status check */</div><div class='del'>-    if (!NIL_P(exc)) {</div><div class='del'>-        volatile VALUE eclass = rb_obj_class(exc);</div><div class='del'>-        volatile VALUE backtrace;</div><div class='del'>-</div><div class='del'>-        DUMP1("(failed)");</div><div class='del'>-</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        DUMP1("set backtrace");</div><div class='del'>-        if (!NIL_P(backtrace = rb_funcall(exc, ID_backtrace, 0, 0))) {</div><div class='del'>-            backtrace = rb_ary_join(backtrace, rb_str_new2("\n"));</div><div class='del'>-            Tcl_AddErrorInfo(interp, StringValuePtr(backtrace));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        ip_set_exc_message(interp, exc);</div><div class='del'>-</div><div class='del'>-        if (eclass == eTkCallbackReturn)</div><div class='del'>-            return TCL_RETURN;</div><div class='del'>-</div><div class='del'>-        if (eclass == eTkCallbackBreak)</div><div class='del'>-            return TCL_BREAK;</div><div class='del'>-</div><div class='del'>-        if (eclass == eTkCallbackContinue)</div><div class='del'>-            return TCL_CONTINUE;</div><div class='del'>-</div><div class='del'>-        if (eclass == rb_eSystemExit || eclass == rb_eInterrupt) {</div><div class='del'>-            rbtk_pending_exception = exc;</div><div class='del'>-            return TCL_RETURN;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rb_obj_is_kind_of(exc, eTkLocalJumpError)) {</div><div class='del'>-            rbtk_pending_exception = exc;</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rb_obj_is_kind_of(exc, eLocalJumpError)) {</div><div class='del'>-            VALUE reason = rb_ivar_get(exc, ID_at_reason);</div><div class='del'>-</div><div class='del'>-            if (TYPE(reason) == T_SYMBOL) {</div><div class='del'>-                if (SYM2ID(reason) == ID_return)</div><div class='del'>-                    return TCL_RETURN;</div><div class='del'>-</div><div class='del'>-                if (SYM2ID(reason) == ID_break)</div><div class='del'>-                    return TCL_BREAK;</div><div class='del'>-</div><div class='del'>-                if (SYM2ID(reason) == ID_next)</div><div class='del'>-                    return TCL_CONTINUE;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* result must be string or nil */</div><div class='del'>-    if (!NIL_P(ret)) {</div><div class='del'>-        /* copy result to the tcl interpreter */</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        ret = TkStringValue(ret);</div><div class='del'>-        DUMP1("Tcl_AppendResult");</div><div class='del'>-        Tcl_AppendResult(interp, RSTRING_PTR(ret), (char *)NULL);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP2("(result) %s", NIL_P(ret) ? "nil" : RSTRING_PTR(ret));</div><div class='del'>-</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-tcl_protect(interp, proc, data)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    VALUE (*proc)();</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    int old_trapflag = rb_trap_immediate;</div><div class='del'>-    int code;</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#if 0</div><div class='del'>-    if (!ruby_native_thread_p()) {</div><div class='del'>-        rb_bug("cross-thread violation on tcl_protect()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-    if (!is_ruby_native_thread()) {</div><div class='del'>-        rb_bug("cross-thread violation on tcl_protect()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_trap_immediate = 0;</div><div class='del'>-    code = tcl_protect_core(interp, proc, data);</div><div class='del'>-    rb_trap_immediate = old_trapflag;</div><div class='del'>-</div><div class='del'>-    return code;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-ip_ruby_eval(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int argc;</div><div class='del'>-    Tcl_Obj *CONST argv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-ip_ruby_eval(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int argc;</div><div class='del'>-    char *argv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    char *arg;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    int code;</div><div class='del'>-</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                             "IP is deleted");</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* ruby command has 1 arg. */</div><div class='del'>-    if (argc != 2) {</div><div class='del'>-#if 0</div><div class='del'>-        rb_raise(rb_eArgError, </div><div class='del'>-                 "wrong number of arguments (%d for 1)", argc - 1);</div><div class='del'>-#else</div><div class='del'>-        char buf[sizeof(int)*8 + 1];</div><div class='del'>-        Tcl_ResetResult(interp);</div><div class='del'>-        sprintf(buf, "%d", argc-1);</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments (", </div><div class='del'>-                         buf, " for 1)", (char *)NULL);</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eArgError, </div><div class='del'>-                                             Tcl_GetStringResult(interp));</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* get C string from Tcl object */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    {</div><div class='del'>-      char *str;</div><div class='del'>-      int  len;</div><div class='del'>-</div><div class='del'>-      thr_crit_bup = rb_thread_critical;</div><div class='del'>-      rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-      str = Tcl_GetStringFromObj(argv[1], &amp;len);</div><div class='del'>-      arg = ALLOC_N(char, len + 1);</div><div class='del'>-      /* arg = ckalloc(sizeof(char) * (len + 1)); */</div><div class='del'>-      memcpy(arg, str, len);</div><div class='del'>-      arg[len] = 0;</div><div class='del'>-</div><div class='del'>-      rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    arg = argv[1];</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* evaluate the argument string by ruby */</div><div class='del'>-    DUMP2("rb_eval_string(%s)", arg);</div><div class='del'>-</div><div class='del'>-    code = tcl_protect(interp, rb_eval_string, (VALUE)arg);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    free(arg);</div><div class='del'>-    /* ckfree(arg); */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return code;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* Tcl command `ruby_cmd' */</div><div class='del'>-static VALUE</div><div class='del'>-ip_ruby_cmd_core(arg)</div><div class='del'>-    struct cmd_body_arg *arg;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    DUMP1("call ip_ruby_cmd_core");</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qfalse;</div><div class='del'>-    ret = rb_apply(arg-&gt;receiver, arg-&gt;method, arg-&gt;args);</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-    DUMP1("finish ip_ruby_cmd_core");</div><div class='del'>-</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define SUPPORT_NESTED_CONST_AS_IP_RUBY_CMD_RECEIVER 1</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_ruby_cmd_receiver_const_get(name)</div><div class='del'>-     char *name;</div><div class='del'>-{</div><div class='del'>-  volatile VALUE klass = rb_cObject;</div><div class='del'>-  char *head, *tail;</div><div class='del'>-  int state;</div><div class='del'>-</div><div class='del'>-#if SUPPORT_NESTED_CONST_AS_IP_RUBY_CMD_RECEIVER</div><div class='del'>-  klass = rb_eval_string_protect(name, &amp;state);</div><div class='del'>-  if (state) {</div><div class='del'>-    return Qnil;</div><div class='del'>-  } else {</div><div class='del'>-    return klass;</div><div class='del'>-  }</div><div class='del'>-#else</div><div class='del'>-  return rb_const_get(klass, rb_intern(name));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-  /* TODO!!!!!! */</div><div class='del'>-  /* support nest of classes/modules */</div><div class='del'>-</div><div class='del'>-  /* return rb_eval_string(name); */</div><div class='del'>-  /* return rb_eval_string_protect(name, &amp;state); */</div><div class='del'>-</div><div class='del'>-#if 0 /* doesn't work!! (fail to autoload?) */</div><div class='del'>-  /* duplicate */</div><div class='del'>-  head = name = strdup(name);</div><div class='del'>-</div><div class='del'>-  /* has '::' at head ? */</div><div class='del'>-  if (*head == ':')  head += 2;</div><div class='del'>-  tail = head; </div><div class='del'>-</div><div class='del'>-  /* search */</div><div class='del'>-  while(*tail) {</div><div class='del'>-    if (*tail == ':') {</div><div class='del'>-      *tail = '\0';</div><div class='del'>-      klass = rb_const_get(klass, rb_intern(head));</div><div class='del'>-      tail += 2;</div><div class='del'>-      head = tail;</div><div class='del'>-    } else {</div><div class='del'>-      tail++;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  free(name);</div><div class='del'>-  return rb_const_get(klass, rb_intern(head));</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_ruby_cmd_receiver_get(str)</div><div class='del'>-     char *str;</div><div class='del'>-{</div><div class='del'>-  volatile VALUE receiver;</div><div class='del'>-  volatile VALUE klass = rb_cObject;</div><div class='del'>-  int state;</div><div class='del'>-</div><div class='del'>-  if (str[0] == ':' || ('A' &lt;= str[0] &amp;&amp; str[0] &lt;= 'Z')) {</div><div class='del'>-    /* class | module | constant */</div><div class='del'>-#if SUPPORT_NESTED_CONST_AS_IP_RUBY_CMD_RECEIVER</div><div class='del'>-    receiver = ip_ruby_cmd_receiver_const_get(str);</div><div class='del'>-#else</div><div class='del'>-    receiver = rb_protect(ip_ruby_cmd_receiver_const_get, (VALUE)str, &amp;state);</div><div class='del'>-    if (state) return Qnil;</div><div class='del'>-#endif</div><div class='del'>-  } else if (str[0] == '$') {</div><div class='del'>-    /* global variable */</div><div class='del'>-    receiver = rb_gv_get(str);</div><div class='del'>-  } else {</div><div class='del'>-    /* global variable omitted '$' */</div><div class='del'>-    char *buf;</div><div class='del'>-    int len;</div><div class='del'>-</div><div class='del'>-    len = strlen(str);</div><div class='del'>-    buf = ALLOC_N(char, len + 2);</div><div class='del'>-    /* buf = ckalloc(sizeof(char) * (len + 2)); */</div><div class='del'>-    buf[0] = '$';</div><div class='del'>-    memcpy(buf + 1, str, len);</div><div class='del'>-    buf[len + 1] = 0;</div><div class='del'>-    receiver = rb_gv_get(buf);</div><div class='del'>-    free(buf);</div><div class='del'>-    /* ckfree(buf); */</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return receiver;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* ruby_cmd receiver method arg ... */</div><div class='del'>-static int</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-ip_ruby_cmd(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int argc;</div><div class='del'>-    Tcl_Obj *CONST argv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-ip_ruby_cmd(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int argc;</div><div class='del'>-    char *argv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    volatile VALUE receiver;</div><div class='del'>-    volatile ID method;</div><div class='del'>-    volatile VALUE args;</div><div class='del'>-    char *str;</div><div class='del'>-    int i;</div><div class='del'>-    int  len;</div><div class='del'>-    struct cmd_body_arg *arg;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    VALUE old_gc;</div><div class='del'>-    int code;</div><div class='del'>-</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                             "IP is deleted");</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (argc &lt; 3) {</div><div class='del'>-#if 0</div><div class='del'>-        rb_raise(rb_eArgError, "too few arguments");</div><div class='del'>-#else</div><div class='del'>-        Tcl_ResetResult(interp);</div><div class='del'>-        Tcl_AppendResult(interp, "too few arguments", (char *)NULL);</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eArgError, </div><div class='del'>-                                             Tcl_GetStringResult(interp));</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* get arguments from Tcl objects */</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-    old_gc = rb_gc_disable();</div><div class='del'>-</div><div class='del'>-    /* get receiver */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    str = Tcl_GetStringFromObj(argv[1], &amp;len);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    str = argv[1];</div><div class='del'>-#endif</div><div class='del'>-    DUMP2("receiver:%s",str);</div><div class='del'>-    /* receiver = rb_protect(ip_ruby_cmd_receiver_get, (VALUE)str, &amp;code); */</div><div class='del'>-    receiver = ip_ruby_cmd_receiver_get(str);</div><div class='del'>-    if (NIL_P(receiver)) {</div><div class='del'>-#if 0</div><div class='del'>-        rb_raise(rb_eArgError, </div><div class='del'>-                 "unknown class/module/global-variable '%s'", str);</div><div class='del'>-#else</div><div class='del'>-        Tcl_ResetResult(interp);</div><div class='del'>-        Tcl_AppendResult(interp, "unknown class/module/global-variable '", </div><div class='del'>-                         str, "'", (char *)NULL);</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eArgError, </div><div class='del'>-                                             Tcl_GetStringResult(interp));</div><div class='del'>-        if (old_gc == Qfalse) rb_gc_enable();</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* get metrhod */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    str = Tcl_GetStringFromObj(argv[2], &amp;len);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    str = argv[2];</div><div class='del'>-#endif</div><div class='del'>-    method = rb_intern(str);</div><div class='del'>-</div><div class='del'>-    /* get args */</div><div class='del'>-    args = rb_ary_new2(argc - 2);</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#else</div><div class='del'>-    RARRAY(args)-&gt;len = 0;</div><div class='del'>-#endif</div><div class='del'>-    for(i = 3; i &lt; argc; i++) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        str = Tcl_GetStringFromObj(argv[i], &amp;len);</div><div class='del'>-        DUMP2("arg:%s",str);</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-	rb_ary_push(args, rb_tainted_str_new(str, len));</div><div class='del'>-#else</div><div class='del'>-        RARRAY(args)-&gt;ptr[RARRAY(args)-&gt;len++] = rb_tainted_str_new(str, len);</div><div class='del'>-#endif</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        DUMP2("arg:%s",argv[i]);</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-	rb_ary_push(args, rb_tainted_str_new2(argv[i]));</div><div class='del'>-#else</div><div class='del'>-        RARRAY(args)-&gt;ptr[RARRAY(args)-&gt;len++] = rb_tainted_str_new2(argv[i]);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (old_gc == Qfalse) rb_gc_enable();</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* allocate */</div><div class='del'>-    arg = ALLOC(struct cmd_body_arg);</div><div class='del'>-    /* arg = (struct cmd_body_arg *)ckalloc(sizeof(struct cmd_body_arg)); */</div><div class='del'>-</div><div class='del'>-    arg-&gt;receiver = receiver;</div><div class='del'>-    arg-&gt;method = method;</div><div class='del'>-    arg-&gt;args = args;</div><div class='del'>-</div><div class='del'>-    /* evaluate the argument string by ruby */</div><div class='del'>-    code = tcl_protect(interp, ip_ruby_cmd_core, (VALUE)arg);</div><div class='del'>-</div><div class='del'>-    free(arg);</div><div class='del'>-    /* ckfree((char*)arg); */</div><div class='del'>-</div><div class='del'>-    return code;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*****************************/</div><div class='del'>-/* relpace of 'exit' command */</div><div class='del'>-/*****************************/</div><div class='del'>-static int</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-ip_InterpExitObjCmd(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int argc;</div><div class='del'>-    Tcl_Obj *CONST argv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-ip_InterpExitCommand(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int argc;</div><div class='del'>-    char *argv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    DUMP1("start ip_InterpExitCommand");</div><div class='del'>-    if (interp != (Tcl_Interp*)NULL </div><div class='del'>-        &amp;&amp; !Tcl_InterpDeleted(interp)</div><div class='del'>-#if TCL_NAMESPACE_DEBUG</div><div class='del'>-        &amp;&amp; !ip_null_namespace(interp)</div><div class='del'>-#endif</div><div class='del'>-        ) {</div><div class='del'>-        Tcl_ResetResult(interp);</div><div class='del'>-        /* Tcl_Preserve(interp); */</div><div class='del'>-        /* Tcl_Eval(interp, "interp eval {} {destroy .}; interp delete {}"); */</div><div class='del'>-        ip_finalize(interp);</div><div class='del'>-        Tcl_DeleteInterp(interp);</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-    }</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-ip_RubyExitObjCmd(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int argc;</div><div class='del'>-    Tcl_Obj *CONST argv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-ip_RubyExitCommand(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int argc;</div><div class='del'>-    char *argv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    int state;</div><div class='del'>-    char *cmd, *param;</div><div class='del'>-#if TCL_MAJOR_VERSION &lt; 8</div><div class='del'>-    char *endptr;</div><div class='del'>-    cmd = argv[0];</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    DUMP1("start ip_RubyExitCommand");</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    /* cmd = Tcl_GetString(argv[0]); */</div><div class='del'>-    cmd = Tcl_GetStringFromObj(argv[0], (int*)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (argc &lt; 1 || argc &gt; 2) {</div><div class='del'>-        /* arguemnt error */</div><div class='del'>-        Tcl_AppendResult(interp, </div><div class='del'>-                         "wrong number of arguments: should be \"", </div><div class='del'>-                         cmd, " ?returnCode?\"", (char *)NULL);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) return TCL_OK;</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4 || Tcl_IsSafe(interp)) {</div><div class='del'>-        ip_finalize(interp);</div><div class='del'>-        Tcl_DeleteInterp(interp);</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_OK;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch(argc) {</div><div class='del'>-    case 1:</div><div class='del'>-        /* rb_exit(0); */ /* not return if succeed */</div><div class='del'>-        Tcl_AppendResult(interp, </div><div class='del'>-                         "fail to call \"", cmd, "\"", (char *)NULL);</div><div class='del'>-</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eSystemExit, </div><div class='del'>-                                             Tcl_GetStringResult(interp));</div><div class='del'>-        rb_iv_set(rbtk_pending_exception, "status", INT2FIX(0));</div><div class='del'>-</div><div class='del'>-        return TCL_RETURN;</div><div class='del'>-</div><div class='del'>-    case 2:</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        if (Tcl_GetIntFromObj(interp, argv[1], &amp;state) == TCL_ERROR) {</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        /* param = Tcl_GetString(argv[1]); */</div><div class='del'>-        param = Tcl_GetStringFromObj(argv[1], (int*)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        state = (int)strtol(argv[1], &amp;endptr, 0);</div><div class='del'>-        if (*endptr) {</div><div class='del'>-            Tcl_AppendResult(interp, </div><div class='del'>-                             "expected integer but got \"", </div><div class='del'>-                             argv[1], "\"", (char *)NULL);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        param = argv[1];</div><div class='del'>-#endif</div><div class='del'>-        /* rb_exit(state); */ /* not return if succeed */</div><div class='del'>-</div><div class='del'>-        Tcl_AppendResult(interp, "fail to call \"", cmd, " ", </div><div class='del'>-                         param, "\"", (char *)NULL);</div><div class='del'>-</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eSystemExit, </div><div class='del'>-                                             Tcl_GetStringResult(interp));</div><div class='del'>-        rb_iv_set(rbtk_pending_exception, "status", INT2FIX(state));</div><div class='del'>-</div><div class='del'>-        return TCL_RETURN;</div><div class='del'>-</div><div class='del'>-    default:</div><div class='del'>-        /* arguemnt error */</div><div class='del'>-        Tcl_AppendResult(interp, </div><div class='del'>-                         "wrong number of arguments: should be \"", </div><div class='del'>-                         cmd, " ?returnCode?\"", (char *)NULL);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/**************************/</div><div class='del'>-/*  based on tclEvent.c   */</div><div class='del'>-/**************************/</div><div class='del'>-</div><div class='del'>-/*********************/</div><div class='del'>-/* replace of update */</div><div class='del'>-/*********************/</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int ip_rbUpdateObjCmd _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                               Tcl_Obj *CONST []));</div><div class='del'>-static int</div><div class='del'>-ip_rbUpdateObjCmd(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj *CONST objv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static int ip_rbUpdateCommand _((ClientData, Tcl_Interp *, int, char *[]));</div><div class='del'>-static int</div><div class='del'>-ip_rbUpdateCommand(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int objc;</div><div class='del'>-    char *objv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    int  optionIndex;</div><div class='del'>-    int  ret;</div><div class='del'>-    int  flags = 0;</div><div class='del'>-    static CONST char *updateOptions[] = {"idletasks", (char *) NULL};</div><div class='del'>-    enum updateOptions {REGEXP_IDLETASKS};</div><div class='del'>-</div><div class='del'>-    DUMP1("Ruby's 'update' is called");</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                             "IP is deleted");</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#if 0</div><div class='del'>-    if (!ruby_native_thread_p()) {</div><div class='del'>-        rb_bug("cross-thread violation on ip_ruby_eval()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-    if (!is_ruby_native_thread()) {</div><div class='del'>-        rb_bug("cross-thread violation on ip_ruby_eval()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    if (objc == 1) {</div><div class='del'>-        flags = TCL_DONT_WAIT;</div><div class='del'>-</div><div class='del'>-    } else if (objc == 2) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)updateOptions,</div><div class='del'>-                "option", 0, &amp;optionIndex) != TCL_OK) {</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        switch ((enum updateOptions) optionIndex) {</div><div class='del'>-            case REGEXP_IDLETASKS: {</div><div class='del'>-                flags = TCL_IDLE_EVENTS;</div><div class='del'>-                break;</div><div class='del'>-            }</div><div class='del'>-            default: {</div><div class='del'>-                rb_bug("ip_rbUpdateObjCmd: bad option index to UpdateOptions");</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-#else</div><div class='del'>-        if (strncmp(objv[1], "idletasks", strlen(objv[1])) != 0) {</div><div class='del'>-            Tcl_AppendResult(interp, "bad option \"", objv[1],</div><div class='del'>-                    "\": must be idletasks", (char *) NULL);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        flags = TCL_IDLE_EVENTS;</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-#ifdef Tcl_WrongNumArgs</div><div class='del'>-        Tcl_WrongNumArgs(interp, 1, objv, "[ idletasks ]");</div><div class='del'>-#else</div><div class='del'>-# if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        int  dummy;</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         Tcl_GetStringFromObj(objv[0], &amp;dummy), </div><div class='del'>-                         " [ idletasks ]\"", </div><div class='del'>-                         (char *) NULL);</div><div class='del'>-# else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         objv[0], " [ idletasks ]\"", (char *) NULL);</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_Preserve(interp);</div><div class='del'>-</div><div class='del'>-    /* call eventloop */</div><div class='del'>-    /* ret = lib_eventloop_core(0, flags, (int *)NULL);*/ /* ignore result */</div><div class='del'>-    ret = RTEST(lib_eventloop_launcher(0, flags, (int *)NULL, interp)); /* ignore result */</div><div class='del'>-</div><div class='del'>-    /* exception check */</div><div class='del'>-    if (!NIL_P(rbtk_pending_exception)) {</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-        if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)) {</div><div class='del'>-        */</div><div class='del'>-        if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)</div><div class='del'>-            || rb_obj_is_kind_of(rbtk_pending_exception, rb_eInterrupt)) {</div><div class='del'>-            return TCL_RETURN;</div><div class='del'>-        } else{</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* trap check */</div><div class='del'>-    if (rb_trap_pending) {</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-        return TCL_RETURN;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Must clear the interpreter's result because event handlers could</div><div class='del'>-     * have executed commands.</div><div class='del'>-     */</div><div class='del'>-</div><div class='del'>-    DUMP2("last result '%s'", Tcl_GetStringResult(interp));</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-    Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-    DUMP1("finish Ruby's 'update'");</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/**********************/</div><div class='del'>-/* update with thread */</div><div class='del'>-/**********************/</div><div class='del'>-struct th_update_param {</div><div class='del'>-    VALUE thread;</div><div class='del'>-    int   done;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void rb_threadUpdateProc _((ClientData));</div><div class='del'>-static void </div><div class='del'>-rb_threadUpdateProc(clientData)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-{</div><div class='del'>-    struct th_update_param *param = (struct th_update_param *) clientData;</div><div class='del'>-</div><div class='del'>-    DUMP1("threadUpdateProc is called");</div><div class='del'>-    param-&gt;done = 1;</div><div class='del'>-    rb_thread_wakeup(param-&gt;thread);</div><div class='del'>-</div><div class='del'>-    return;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int ip_rb_threadUpdateObjCmd _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                                       Tcl_Obj *CONST []));</div><div class='del'>-static int</div><div class='del'>-ip_rb_threadUpdateObjCmd(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj *CONST objv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static int ip_rb_threadUpdateCommand _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                                       char *[]));</div><div class='del'>-static int</div><div class='del'>-ip_rb_threadUpdateCommand(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int objc;</div><div class='del'>-    char *objv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    int  optionIndex;</div><div class='del'>-    int  flags = 0;</div><div class='del'>-    struct th_update_param *param;</div><div class='del'>-    static CONST char *updateOptions[] = {"idletasks", (char *) NULL};</div><div class='del'>-    enum updateOptions {REGEXP_IDLETASKS};</div><div class='del'>-    volatile VALUE current_thread = rb_thread_current();</div><div class='del'>-</div><div class='del'>-    DUMP1("Ruby's 'thread_update' is called");</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                             "IP is deleted");</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#if 0</div><div class='del'>-    if (!ruby_native_thread_p()) {</div><div class='del'>-        rb_bug("cross-thread violation on ip_rb_threadUpdateCommand()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-    if (!is_ruby_native_thread()) {</div><div class='del'>-        rb_bug("cross-thread violation on ip_rb_threadUpdateCommand()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (rb_thread_alone() </div><div class='del'>-        || NIL_P(eventloop_thread) || eventloop_thread == current_thread) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        DUMP1("call ip_rbUpdateObjCmd");</div><div class='del'>-        return ip_rbUpdateObjCmd(clientData, interp, objc, objv);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        DUMP1("call ip_rbUpdateCommand");</div><div class='del'>-        return ip_rbUpdateCommand(clientData, interp, objc, objv);</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP1("start Ruby's 'thread_update' body");</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    if (objc == 1) {</div><div class='del'>-        flags = TCL_DONT_WAIT;</div><div class='del'>-</div><div class='del'>-    } else if (objc == 2) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)updateOptions,</div><div class='del'>-                "option", 0, &amp;optionIndex) != TCL_OK) {</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        switch ((enum updateOptions) optionIndex) {</div><div class='del'>-            case REGEXP_IDLETASKS: {</div><div class='del'>-                flags = TCL_IDLE_EVENTS;</div><div class='del'>-                break;</div><div class='del'>-            }</div><div class='del'>-            default: {</div><div class='del'>-                rb_bug("ip_rb_threadUpdateObjCmd: bad option index to UpdateOptions");</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-#else</div><div class='del'>-        if (strncmp(objv[1], "idletasks", strlen(objv[1])) != 0) {</div><div class='del'>-            Tcl_AppendResult(interp, "bad option \"", objv[1],</div><div class='del'>-                    "\": must be idletasks", (char *) NULL);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        flags = TCL_IDLE_EVENTS;</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-#ifdef Tcl_WrongNumArgs</div><div class='del'>-        Tcl_WrongNumArgs(interp, 1, objv, "[ idletasks ]");</div><div class='del'>-#else</div><div class='del'>-# if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        int  dummy;</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         Tcl_GetStringFromObj(objv[0], &amp;dummy), </div><div class='del'>-                         " [ idletasks ]\"", </div><div class='del'>-                         (char *) NULL);</div><div class='del'>-# else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         objv[0], " [ idletasks ]\"", (char *) NULL);</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP1("pass argument check");</div><div class='del'>-</div><div class='del'>-    /* param = (struct th_update_param *)Tcl_Alloc(sizeof(struct th_update_param)); */</div><div class='del'>-    param = (struct th_update_param *)ckalloc(sizeof(struct th_update_param));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)param);</div><div class='del'>-#endif</div><div class='del'>-    param-&gt;thread = current_thread;</div><div class='del'>-    param-&gt;done = 0;</div><div class='del'>-</div><div class='del'>-    DUMP1("set idle proc");</div><div class='del'>-    Tcl_DoWhenIdle(rb_threadUpdateProc, (ClientData) param);</div><div class='del'>-</div><div class='del'>-    while(!param-&gt;done) {</div><div class='del'>-        DUMP1("wait for complete idle proc");</div><div class='del'>-        /* rb_thread_stop(); */</div><div class='del'>-        rb_thread_sleep_forever();</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	Tcl_EventuallyFree((ClientData)param, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)param);</div><div class='del'>-#else</div><div class='del'>-    /* Tcl_Free((char *)param); */</div><div class='del'>-    ckfree((char *)param);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    DUMP1("finish Ruby's 'thread_update'");</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/***************************/</div><div class='del'>-/* replace of vwait/tkwait */</div><div class='del'>-/***************************/</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int ip_rbVwaitObjCmd _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                               Tcl_Obj *CONST []));</div><div class='del'>-static int ip_rb_threadVwaitObjCmd _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                                      Tcl_Obj *CONST []));</div><div class='del'>-static int ip_rbTkWaitObjCmd _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                                Tcl_Obj *CONST []));</div><div class='del'>-static int ip_rb_threadTkWaitObjCmd _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                                       Tcl_Obj *CONST []));</div><div class='del'>-#else</div><div class='del'>-static int ip_rbVwaitCommand _((ClientData, Tcl_Interp *, int, char *[]));</div><div class='del'>-static int ip_rb_threadVwaitCommand _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                                       char *[]));</div><div class='del'>-static int ip_rbTkWaitCommand _((ClientData, Tcl_Interp *, int, char *[]));</div><div class='del'>-static int ip_rb_threadTkWaitCommand _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                                        char *[]));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static char *VwaitVarProc _((ClientData, Tcl_Interp *, </div><div class='del'>-                             CONST84 char *,CONST84 char *, int));</div><div class='del'>-static char *</div><div class='del'>-VwaitVarProc(clientData, interp, name1, name2, flags)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    Tcl_Interp *interp;         /* Interpreter containing variable. */</div><div class='del'>-    CONST84 char *name1;        /* Name of variable. */</div><div class='del'>-    CONST84 char *name2;        /* Second part of variable name. */</div><div class='del'>-    int flags;                  /* Information about what happened. */</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static char *VwaitVarProc _((ClientData, Tcl_Interp *, char *, char *, int));</div><div class='del'>-static char *</div><div class='del'>-VwaitVarProc(clientData, interp, name1, name2, flags)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    Tcl_Interp *interp;         /* Interpreter containing variable. */</div><div class='del'>-    char *name1;                /* Name of variable. */</div><div class='del'>-    char *name2;                /* Second part of variable name. */</div><div class='del'>-    int flags;                  /* Information about what happened. */</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    int *donePtr = (int *) clientData;</div><div class='del'>-</div><div class='del'>-    *donePtr = 1;</div><div class='del'>-    return (char *) NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int</div><div class='del'>-ip_rbVwaitObjCmd(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj *CONST objv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static int</div><div class='del'>-ip_rbVwaitCommand(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int objc;</div><div class='del'>-    char *objv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    int  ret, done, foundEvent;</div><div class='del'>-    char *nameString;</div><div class='del'>-    int  dummy;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    DUMP1("Ruby's 'vwait' is called");</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                             "IP is deleted");</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-    if (!rb_thread_alone() </div><div class='del'>-	&amp;&amp; eventloop_thread != Qnil</div><div class='del'>-	&amp;&amp; eventloop_thread != rb_thread_current()) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        DUMP1("call ip_rb_threadVwaitObjCmd");</div><div class='del'>-        return ip_rb_threadVwaitObjCmd(clientData, interp, objc, objv);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        DUMP1("call ip_rb_threadVwaitCommand");</div><div class='del'>-        return ip_rb_threadVwaitCommand(clientData, interp, objc, objv);</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    Tcl_Preserve(interp);</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#if 0</div><div class='del'>-    if (!ruby_native_thread_p()) {</div><div class='del'>-        rb_bug("cross-thread violation on ip_rbVwaitCommand()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-    if (!is_ruby_native_thread()) {</div><div class='del'>-        rb_bug("cross-thread violation on ip_rbVwaitCommand()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    if (objc != 2) {</div><div class='del'>-#ifdef Tcl_WrongNumArgs</div><div class='del'>-        Tcl_WrongNumArgs(interp, 1, objv, "name");</div><div class='del'>-#else</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        /* nameString = Tcl_GetString(objv[0]); */</div><div class='del'>-        nameString = Tcl_GetStringFromObj(objv[0], &amp;dummy);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        nameString = objv[0];</div><div class='del'>-#endif</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         nameString, " name\"", (char *) NULL);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_IncrRefCount(objv[1]);</div><div class='del'>-    /* nameString = Tcl_GetString(objv[1]); */</div><div class='del'>-    nameString = Tcl_GetStringFromObj(objv[1], &amp;dummy);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    nameString = objv[1];</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-    if (Tcl_TraceVar(interp, nameString,</div><div class='del'>-                     TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                     VwaitVarProc, (ClientData) &amp;done) != TCL_OK) {</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-    */</div><div class='del'>-    ret = Tcl_TraceVar(interp, nameString,</div><div class='del'>-                       TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                       VwaitVarProc, (ClientData) &amp;done);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    if (ret != TCL_OK) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[1]);</div><div class='del'>-#endif</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    done = 0;</div><div class='del'>-</div><div class='del'>-    foundEvent = RTEST(lib_eventloop_launcher(/* not check root-widget */0, </div><div class='del'>-                                              0, &amp;done, interp));</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    Tcl_UntraceVar(interp, nameString,</div><div class='del'>-                   TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                   VwaitVarProc, (ClientData) &amp;done);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* exception check */</div><div class='del'>-    if (!NIL_P(rbtk_pending_exception)) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[1]);</div><div class='del'>-#endif</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-        if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)) {</div><div class='del'>-*/</div><div class='del'>-        if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)</div><div class='del'>-            || rb_obj_is_kind_of(rbtk_pending_exception, rb_eInterrupt)) {</div><div class='del'>-            return TCL_RETURN;</div><div class='del'>-        } else{</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* trap check */</div><div class='del'>-    if (rb_trap_pending) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[1]);</div><div class='del'>-#endif</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-        return TCL_RETURN;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Clear out the interpreter's result, since it may have been set</div><div class='del'>-     * by event handlers.</div><div class='del'>-     */</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-    if (!foundEvent) {</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        Tcl_AppendResult(interp, "can't wait for variable \"", nameString,</div><div class='del'>-                         "\":  would wait forever", (char *) NULL);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[1]);</div><div class='del'>-#endif</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_DecrRefCount(objv[1]);</div><div class='del'>-#endif</div><div class='del'>-    Tcl_Release(interp);</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/**************************/</div><div class='del'>-/*  based on tkCmd.c      */</div><div class='del'>-/**************************/</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static char *WaitVariableProc _((ClientData, Tcl_Interp *, </div><div class='del'>-                                 CONST84 char *,CONST84 char *, int));</div><div class='del'>-static char *</div><div class='del'>-WaitVariableProc(clientData, interp, name1, name2, flags)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    Tcl_Interp *interp;         /* Interpreter containing variable. */</div><div class='del'>-    CONST84 char *name1;        /* Name of variable. */</div><div class='del'>-    CONST84 char *name2;        /* Second part of variable name. */</div><div class='del'>-    int flags;                  /* Information about what happened. */</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static char *WaitVariableProc _((ClientData, Tcl_Interp *, </div><div class='del'>-                                 char *, char *, int));</div><div class='del'>-static char *</div><div class='del'>-WaitVariableProc(clientData, interp, name1, name2, flags)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    Tcl_Interp *interp;         /* Interpreter containing variable. */</div><div class='del'>-    char *name1;                /* Name of variable. */</div><div class='del'>-    char *name2;                /* Second part of variable name. */</div><div class='del'>-    int flags;                  /* Information about what happened. */</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    int *donePtr = (int *) clientData;</div><div class='del'>-</div><div class='del'>-    *donePtr = 1;</div><div class='del'>-    return (char *) NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void WaitVisibilityProc _((ClientData, XEvent *));</div><div class='del'>-static void</div><div class='del'>-WaitVisibilityProc(clientData, eventPtr)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    XEvent *eventPtr;           /* Information about event (not used). */</div><div class='del'>-{</div><div class='del'>-    int *donePtr = (int *) clientData;</div><div class='del'>-</div><div class='del'>-    if (eventPtr-&gt;type == VisibilityNotify) {</div><div class='del'>-        *donePtr = 1;</div><div class='del'>-    }</div><div class='del'>-    if (eventPtr-&gt;type == DestroyNotify) {</div><div class='del'>-        *donePtr = 2;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void WaitWindowProc _((ClientData, XEvent *));</div><div class='del'>-static void</div><div class='del'>-WaitWindowProc(clientData, eventPtr)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    XEvent *eventPtr;           /* Information about event. */</div><div class='del'>-{</div><div class='del'>-    int *donePtr = (int *) clientData;</div><div class='del'>-</div><div class='del'>-    if (eventPtr-&gt;type == DestroyNotify) {</div><div class='del'>-        *donePtr = 1;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int</div><div class='del'>-ip_rbTkWaitObjCmd(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj *CONST objv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static int</div><div class='del'>-ip_rbTkWaitCommand(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int objc;</div><div class='del'>-    char *objv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    Tk_Window tkwin = (Tk_Window) clientData;</div><div class='del'>-    Tk_Window window;</div><div class='del'>-    int done, index;</div><div class='del'>-    static CONST char *optionStrings[] = { "variable", "visibility", "window",</div><div class='del'>-                                           (char *) NULL };</div><div class='del'>-    enum options { TKWAIT_VARIABLE, TKWAIT_VISIBILITY, TKWAIT_WINDOW };</div><div class='del'>-    char *nameString;</div><div class='del'>-    int ret, dummy;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    DUMP1("Ruby's 'tkwait' is called");</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                             "IP is deleted");</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-    if (!rb_thread_alone() </div><div class='del'>-	&amp;&amp; eventloop_thread != Qnil</div><div class='del'>-	&amp;&amp; eventloop_thread != rb_thread_current()) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        DUMP1("call ip_rb_threadTkWaitObjCmd");</div><div class='del'>-        return ip_rb_threadTkWaitObjCmd(clientData, interp, objc, objv);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        DUMP1("call ip_rb_threadTkWaitCommand");</div><div class='del'>-        return ip_rb_threadTkWwaitCommand(clientData, interp, objc, objv);</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    Tcl_Preserve(interp);</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    if (objc != 3) {</div><div class='del'>-#ifdef Tcl_WrongNumArgs</div><div class='del'>-        Tcl_WrongNumArgs(interp, 1, objv, "variable|visibility|window name");</div><div class='del'>-#else</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         Tcl_GetStringFromObj(objv[0], &amp;dummy), </div><div class='del'>-                         " variable|visibility|window name\"", </div><div class='del'>-                         (char *) NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         objv[0], " variable|visibility|window name\"", </div><div class='del'>-                         (char *) NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-    if (Tcl_GetIndexFromObj(interp, objv[1], </div><div class='del'>-                            (CONST84 char **)optionStrings, </div><div class='del'>-                            "option", 0, &amp;index) != TCL_OK) {</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-    */</div><div class='del'>-    ret = Tcl_GetIndexFromObj(interp, objv[1], </div><div class='del'>-                              (CONST84 char **)optionStrings, </div><div class='del'>-                              "option", 0, &amp;index);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    if (ret != TCL_OK) {</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    {</div><div class='del'>-        int c = objv[1][0];</div><div class='del'>-        size_t length = strlen(objv[1]);</div><div class='del'>-</div><div class='del'>-        if ((c == 'v') &amp;&amp; (strncmp(objv[1], "variable", length) == 0)</div><div class='del'>-            &amp;&amp; (length &gt;= 2)) {</div><div class='del'>-            index = TKWAIT_VARIABLE;</div><div class='del'>-        } else if ((c == 'v') &amp;&amp; (strncmp(objv[1], "visibility", length) == 0)</div><div class='del'>-                   &amp;&amp; (length &gt;= 2)) {</div><div class='del'>-            index = TKWAIT_VISIBILITY;</div><div class='del'>-        } else if ((c == 'w') &amp;&amp; (strncmp(objv[1], "window", length) == 0)) {</div><div class='del'>-            index = TKWAIT_WINDOW;</div><div class='del'>-        } else {</div><div class='del'>-            Tcl_AppendResult(interp, "bad option \"", objv[1],</div><div class='del'>-                             "\": must be variable, visibility, or window", </div><div class='del'>-                             (char *) NULL);</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_IncrRefCount(objv[2]);</div><div class='del'>-    /* nameString = Tcl_GetString(objv[2]); */</div><div class='del'>-    nameString = Tcl_GetStringFromObj(objv[2], &amp;dummy);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    nameString = objv[2];</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    switch ((enum options) index) {</div><div class='del'>-    case TKWAIT_VARIABLE:</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-        /*</div><div class='del'>-        if (Tcl_TraceVar(interp, nameString,</div><div class='del'>-                         TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                         WaitVariableProc, (ClientData) &amp;done) != TCL_OK) {</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        */</div><div class='del'>-        ret = Tcl_TraceVar(interp, nameString,</div><div class='del'>-                           TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                           WaitVariableProc, (ClientData) &amp;done);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        if (ret != TCL_OK) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        done = 0;</div><div class='del'>-        /* lib_eventloop_core(check_rootwidget_flag, 0, &amp;done); */</div><div class='del'>-        lib_eventloop_launcher(check_rootwidget_flag, 0, &amp;done, interp);</div><div class='del'>-</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        Tcl_UntraceVar(interp, nameString,</div><div class='del'>-                       TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                       WaitVariableProc, (ClientData) &amp;done);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        /* exception check */</div><div class='del'>-        if (!NIL_P(rbtk_pending_exception)) {</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-            /*</div><div class='del'>-            if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)) {</div><div class='del'>-            */</div><div class='del'>-            if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)</div><div class='del'>-                || rb_obj_is_kind_of(rbtk_pending_exception, rb_eInterrupt)) {</div><div class='del'>-                return TCL_RETURN;</div><div class='del'>-            } else{</div><div class='del'>-                return TCL_ERROR;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* trap check */</div><div class='del'>-        if (rb_trap_pending) {</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-            return TCL_RETURN;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case TKWAIT_VISIBILITY:</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-	/* This function works on the Tk eventloop thread only. */</div><div class='del'>-        if (!tk_stubs_init_p() || Tk_MainWindow(interp) == (Tk_Window)NULL) {</div><div class='del'>-            window = NULL;</div><div class='del'>-        } else {</div><div class='del'>-            window = Tk_NameToWindow(interp, nameString, tkwin);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (window == NULL) {</div><div class='del'>-            Tcl_AppendResult(interp, ": tkwait: ", </div><div class='del'>-                             "no main-window (not Tk application?)", </div><div class='del'>-                             (char*)NULL);</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tk_CreateEventHandler(window,</div><div class='del'>-                              VisibilityChangeMask|StructureNotifyMask,</div><div class='del'>-                              WaitVisibilityProc, (ClientData) &amp;done);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        done = 0;</div><div class='del'>-        /* lib_eventloop_core(check_rootwidget_flag, 0, &amp;done); */</div><div class='del'>-        lib_eventloop_launcher(check_rootwidget_flag, 0, &amp;done, interp);</div><div class='del'>-</div><div class='del'>-        /* exception check */</div><div class='del'>-        if (!NIL_P(rbtk_pending_exception)) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-            /*</div><div class='del'>-            if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)) {</div><div class='del'>-            */</div><div class='del'>-            if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)</div><div class='del'>-                || rb_obj_is_kind_of(rbtk_pending_exception, rb_eInterrupt)) {</div><div class='del'>-                return TCL_RETURN;</div><div class='del'>-            } else{</div><div class='del'>-                return TCL_ERROR;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* trap check */</div><div class='del'>-        if (rb_trap_pending) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-            return TCL_RETURN;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (done != 1) {</div><div class='del'>-            /*</div><div class='del'>-             * Note that we do not delete the event handler because it</div><div class='del'>-             * was deleted automatically when the window was destroyed.</div><div class='del'>-             */</div><div class='del'>-            thr_crit_bup = rb_thread_critical;</div><div class='del'>-            rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-            Tcl_ResetResult(interp);</div><div class='del'>-            Tcl_AppendResult(interp, "window \"", nameString,</div><div class='del'>-                             "\" was deleted before its visibility changed",</div><div class='del'>-                             (char *) NULL);</div><div class='del'>-</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        Tk_DeleteEventHandler(window,</div><div class='del'>-                              VisibilityChangeMask|StructureNotifyMask,</div><div class='del'>-                              WaitVisibilityProc, (ClientData) &amp;done);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case TKWAIT_WINDOW:</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-	/* This function works on the Tk eventloop thread only. */</div><div class='del'>-        if (!tk_stubs_init_p() || Tk_MainWindow(interp) == (Tk_Window)NULL) {</div><div class='del'>-            window = NULL;</div><div class='del'>-        } else {</div><div class='del'>-            window = Tk_NameToWindow(interp, nameString, tkwin);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        if (window == NULL) {</div><div class='del'>-            Tcl_AppendResult(interp, ": tkwait: ", </div><div class='del'>-                             "no main-window (not Tk application?)", </div><div class='del'>-                             (char*)NULL);</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tk_CreateEventHandler(window, StructureNotifyMask,</div><div class='del'>-                              WaitWindowProc, (ClientData) &amp;done);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        done = 0;</div><div class='del'>-        /* lib_eventloop_core(check_rootwidget_flag, 0, &amp;done); */</div><div class='del'>-        lib_eventloop_launcher(check_rootwidget_flag, 0, &amp;done, interp);</div><div class='del'>-</div><div class='del'>-        /* exception check */</div><div class='del'>-        if (!NIL_P(rbtk_pending_exception)) {</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-            /*</div><div class='del'>-            if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)) {</div><div class='del'>-            */</div><div class='del'>-            if (rb_obj_is_kind_of(rbtk_pending_exception, rb_eSystemExit)</div><div class='del'>-                || rb_obj_is_kind_of(rbtk_pending_exception, rb_eInterrupt)) {</div><div class='del'>-                return TCL_RETURN;</div><div class='del'>-            } else{</div><div class='del'>-                return TCL_ERROR;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* trap check */</div><div class='del'>-        if (rb_trap_pending) {</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-</div><div class='del'>-            return TCL_RETURN;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-         * Note:  there's no need to delete the event handler.  It was</div><div class='del'>-         * deleted automatically when the window was destroyed.</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'>-     * Clear out the interpreter's result, since it may have been set</div><div class='del'>-     * by event handlers.</div><div class='del'>-     */</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-    Tcl_Release(interp);</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/****************************/</div><div class='del'>-/* vwait/tkwait with thread */</div><div class='del'>-/****************************/</div><div class='del'>-struct th_vwait_param {</div><div class='del'>-    VALUE thread;</div><div class='del'>-    int   done;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static char *rb_threadVwaitProc _((ClientData, Tcl_Interp *, </div><div class='del'>-                                   CONST84 char *,CONST84 char *, int));</div><div class='del'>-static char *</div><div class='del'>-rb_threadVwaitProc(clientData, interp, name1, name2, flags)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    Tcl_Interp *interp;         /* Interpreter containing variable. */</div><div class='del'>-    CONST84 char *name1;        /* Name of variable. */</div><div class='del'>-    CONST84 char *name2;        /* Second part of variable name. */</div><div class='del'>-    int flags;                  /* Information about what happened. */</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static char *rb_threadVwaitProc _((ClientData, Tcl_Interp *, </div><div class='del'>-                                   char *, char *, int));</div><div class='del'>-static char *</div><div class='del'>-rb_threadVwaitProc(clientData, interp, name1, name2, flags)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    Tcl_Interp *interp;         /* Interpreter containing variable. */</div><div class='del'>-    char *name1;                /* Name of variable. */</div><div class='del'>-    char *name2;                /* Second part of variable name. */</div><div class='del'>-    int flags;                  /* Information about what happened. */</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    struct th_vwait_param *param = (struct th_vwait_param *) clientData;</div><div class='del'>-</div><div class='del'>-    if (flags &amp; (TCL_INTERP_DESTROYED | TCL_TRACE_DESTROYED)) {</div><div class='del'>-        param-&gt;done = -1;</div><div class='del'>-    } else {</div><div class='del'>-        param-&gt;done = 1;</div><div class='del'>-    }</div><div class='del'>-    if (param-&gt;done != 0) rb_thread_wakeup(param-&gt;thread);</div><div class='del'>-</div><div class='del'>-    return (char *)NULL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define TKWAIT_MODE_VISIBILITY 1</div><div class='del'>-#define TKWAIT_MODE_DESTROY    2</div><div class='del'>-</div><div class='del'>-static void rb_threadWaitVisibilityProc _((ClientData, XEvent *));</div><div class='del'>-static void</div><div class='del'>-rb_threadWaitVisibilityProc(clientData, eventPtr)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    XEvent *eventPtr;           /* Information about event (not used). */</div><div class='del'>-{</div><div class='del'>-    struct th_vwait_param *param = (struct th_vwait_param *) clientData;</div><div class='del'>-</div><div class='del'>-    if (eventPtr-&gt;type == VisibilityNotify) {</div><div class='del'>-        param-&gt;done = TKWAIT_MODE_VISIBILITY;</div><div class='del'>-    }</div><div class='del'>-    if (eventPtr-&gt;type == DestroyNotify) {</div><div class='del'>-        param-&gt;done = TKWAIT_MODE_DESTROY;</div><div class='del'>-    }</div><div class='del'>-    if (param-&gt;done != 0) rb_thread_wakeup(param-&gt;thread);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void rb_threadWaitWindowProc _((ClientData, XEvent *));</div><div class='del'>-static void</div><div class='del'>-rb_threadWaitWindowProc(clientData, eventPtr)</div><div class='del'>-    ClientData clientData;      /* Pointer to integer to set to 1. */</div><div class='del'>-    XEvent *eventPtr;           /* Information about event. */</div><div class='del'>-{</div><div class='del'>-    struct th_vwait_param *param = (struct th_vwait_param *) clientData;</div><div class='del'>-</div><div class='del'>-    if (eventPtr-&gt;type == DestroyNotify) {</div><div class='del'>-        param-&gt;done = TKWAIT_MODE_DESTROY;</div><div class='del'>-    }</div><div class='del'>-    if (param-&gt;done != 0) rb_thread_wakeup(param-&gt;thread);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int</div><div class='del'>-ip_rb_threadVwaitObjCmd(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj *CONST objv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static int</div><div class='del'>-ip_rb_threadVwaitCommand(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int objc;</div><div class='del'>-    char *objv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    struct th_vwait_param *param;</div><div class='del'>-    char *nameString;</div><div class='del'>-    int ret, dummy;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    volatile VALUE current_thread = rb_thread_current();</div><div class='del'>-</div><div class='del'>-    DUMP1("Ruby's 'thread_vwait' is called");</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                             "IP is deleted");</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rb_thread_alone() || eventloop_thread == current_thread) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        DUMP1("call ip_rbVwaitObjCmd");</div><div class='del'>-        return ip_rbVwaitObjCmd(clientData, interp, objc, objv);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        DUMP1("call ip_rbVwaitCommand");</div><div class='del'>-        return ip_rbVwaitCommand(clientData, interp, objc, objv);</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_Preserve(interp);</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    if (objc != 2) {</div><div class='del'>-#ifdef Tcl_WrongNumArgs</div><div class='del'>-        Tcl_WrongNumArgs(interp, 1, objv, "name");</div><div class='del'>-#else</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        /* nameString = Tcl_GetString(objv[0]); */</div><div class='del'>-        nameString = Tcl_GetStringFromObj(objv[0], &amp;dummy);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        nameString = objv[0];</div><div class='del'>-#endif</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         nameString, " name\"", (char *) NULL);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_IncrRefCount(objv[1]);</div><div class='del'>-    /* nameString = Tcl_GetString(objv[1]); */</div><div class='del'>-    nameString = Tcl_GetStringFromObj(objv[1], &amp;dummy);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    nameString = objv[1];</div><div class='del'>-#endif</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /* param = (struct th_vwait_param *)Tcl_Alloc(sizeof(struct th_vwait_param)); */</div><div class='del'>-    param = (struct th_vwait_param *)ckalloc(sizeof(struct th_vwait_param));</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)param);</div><div class='del'>-#endif</div><div class='del'>-    param-&gt;thread = current_thread;</div><div class='del'>-    param-&gt;done = 0;</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-    if (Tcl_TraceVar(interp, nameString,</div><div class='del'>-                     TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                     rb_threadVwaitProc, (ClientData) param) != TCL_OK) {</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-    */</div><div class='del'>-    ret = Tcl_TraceVar(interp, nameString,</div><div class='del'>-                       TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                       rb_threadVwaitProc, (ClientData) param);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    if (ret != TCL_OK) {</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	Tcl_EventuallyFree((ClientData)param, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-        Tcl_Release((ClientData)param);</div><div class='del'>-#else</div><div class='del'>-        /* Tcl_Free((char *)param); */</div><div class='del'>-        ckfree((char *)param);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[1]);</div><div class='del'>-#endif</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while(!param-&gt;done) {</div><div class='del'>-        /* rb_thread_stop(); */</div><div class='del'>-        rb_thread_sleep_forever();</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    if (param-&gt;done &gt; 0) {</div><div class='del'>-        Tcl_UntraceVar(interp, nameString,</div><div class='del'>-                       TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                       rb_threadVwaitProc, (ClientData) param);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)param, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)param);</div><div class='del'>-#else</div><div class='del'>-    /* Tcl_Free((char *)param); */</div><div class='del'>-    ckfree((char *)param);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_DecrRefCount(objv[1]);</div><div class='del'>-#endif</div><div class='del'>-    Tcl_Release(interp);</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int</div><div class='del'>-ip_rb_threadTkWaitObjCmd(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj *CONST objv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static int</div><div class='del'>-ip_rb_threadTkWaitCommand(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int objc;</div><div class='del'>-    char *objv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    struct th_vwait_param *param;</div><div class='del'>-    Tk_Window tkwin = (Tk_Window) clientData;</div><div class='del'>-    Tk_Window window;</div><div class='del'>-    int index;</div><div class='del'>-    static CONST char *optionStrings[] = { "variable", "visibility", "window",</div><div class='del'>-                                           (char *) NULL };</div><div class='del'>-    enum options { TKWAIT_VARIABLE, TKWAIT_VISIBILITY, TKWAIT_WINDOW };</div><div class='del'>-    char *nameString;</div><div class='del'>-    int ret, dummy;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    volatile VALUE current_thread = rb_thread_current();</div><div class='del'>-</div><div class='del'>-    DUMP1("Ruby's 'thread_tkwait' is called");</div><div class='del'>-    if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-        rbtk_pending_exception = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                             "IP is deleted");</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rb_thread_alone() || eventloop_thread == current_thread) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        DUMP1("call ip_rbTkWaitObjCmd");</div><div class='del'>-        return ip_rbTkWaitObjCmd(clientData, interp, objc, objv);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        DUMP1("call rb_VwaitCommand");</div><div class='del'>-        return ip_rbTkWaitCommand(clientData, interp, objc, objv);</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_Preserve(interp);</div><div class='del'>-    Tcl_Preserve(tkwin);</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    if (objc != 3) {</div><div class='del'>-#ifdef Tcl_WrongNumArgs</div><div class='del'>-        Tcl_WrongNumArgs(interp, 1, objv, "variable|visibility|window name");</div><div class='del'>-#else</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         Tcl_GetStringFromObj(objv[0], &amp;dummy), </div><div class='del'>-                         " variable|visibility|window name\"", </div><div class='del'>-                         (char *) NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        Tcl_AppendResult(interp, "wrong number of arguments: should be \"",</div><div class='del'>-                         objv[0], " variable|visibility|window name\"", </div><div class='del'>-                         (char *) NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        Tcl_Release(tkwin);</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-    /*</div><div class='del'>-    if (Tcl_GetIndexFromObj(interp, objv[1], </div><div class='del'>-                            (CONST84 char **)optionStrings, </div><div class='del'>-                            "option", 0, &amp;index) != TCL_OK) {</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-    */</div><div class='del'>-    ret = Tcl_GetIndexFromObj(interp, objv[1], </div><div class='del'>-                              (CONST84 char **)optionStrings, </div><div class='del'>-                              "option", 0, &amp;index);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    if (ret != TCL_OK) {</div><div class='del'>-        Tcl_Release(tkwin);</div><div class='del'>-        Tcl_Release(interp);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    {</div><div class='del'>-        int c = objv[1][0];</div><div class='del'>-        size_t length = strlen(objv[1]);</div><div class='del'>-</div><div class='del'>-        if ((c == 'v') &amp;&amp; (strncmp(objv[1], "variable", length) == 0)</div><div class='del'>-            &amp;&amp; (length &gt;= 2)) {</div><div class='del'>-            index = TKWAIT_VARIABLE;</div><div class='del'>-        } else if ((c == 'v') &amp;&amp; (strncmp(objv[1], "visibility", length) == 0)</div><div class='del'>-                   &amp;&amp; (length &gt;= 2)) {</div><div class='del'>-            index = TKWAIT_VISIBILITY;</div><div class='del'>-        } else if ((c == 'w') &amp;&amp; (strncmp(objv[1], "window", length) == 0)) {</div><div class='del'>-            index = TKWAIT_WINDOW;</div><div class='del'>-        } else {</div><div class='del'>-            Tcl_AppendResult(interp, "bad option \"", objv[1],</div><div class='del'>-                             "\": must be variable, visibility, or window", </div><div class='del'>-                             (char *) NULL);</div><div class='del'>-            Tcl_Release(tkwin);</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_IncrRefCount(objv[2]);</div><div class='del'>-    /* nameString = Tcl_GetString(objv[2]); */</div><div class='del'>-    nameString = Tcl_GetStringFromObj(objv[2], &amp;dummy);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    nameString = objv[2];</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* param = (struct th_vwait_param *)Tcl_Alloc(sizeof(struct th_vwait_param)); */</div><div class='del'>-    param = (struct th_vwait_param *)ckalloc(sizeof(struct th_vwait_param));</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)param);</div><div class='del'>-#endif</div><div class='del'>-    param-&gt;thread = current_thread;</div><div class='del'>-    param-&gt;done = 0;</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    switch ((enum options) index) {</div><div class='del'>-    case TKWAIT_VARIABLE:</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-        /* </div><div class='del'>-        if (Tcl_TraceVar(interp, nameString,</div><div class='del'>-                         TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                         rb_threadVwaitProc, (ClientData) param) != TCL_OK) {</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        */</div><div class='del'>-        ret = Tcl_TraceVar(interp, nameString,</div><div class='del'>-                         TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                         rb_threadVwaitProc, (ClientData) param);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        if (ret != TCL_OK) {</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-            Tcl_EventuallyFree((ClientData)param, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-            Tcl_Release(param);</div><div class='del'>-#else</div><div class='del'>-            /* Tcl_Free((char *)param); */</div><div class='del'>-            ckfree((char *)param);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-            Tcl_Release(tkwin);</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        while(!param-&gt;done) {</div><div class='del'>-            /* rb_thread_stop(); */</div><div class='del'>-            rb_thread_sleep_forever();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        if (param-&gt;done &gt; 0) {</div><div class='del'>-            Tcl_UntraceVar(interp, nameString,</div><div class='del'>-                           TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,</div><div class='del'>-                           rb_threadVwaitProc, (ClientData) param);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case TKWAIT_VISIBILITY:</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if 0 /* variable 'tkwin' must keep the token of MainWindow */</div><div class='del'>-        if (!tk_stubs_init_p() || Tk_MainWindow(interp) == (Tk_Window)NULL) {</div><div class='del'>-            window = NULL;</div><div class='del'>-        } else {</div><div class='del'>-            window = Tk_NameToWindow(interp, nameString, tkwin);</div><div class='del'>-        }</div><div class='del'>-#else</div><div class='del'>-        if (!tk_stubs_init_p() || tkwin == (Tk_Window)NULL) {</div><div class='del'>-            window = NULL;</div><div class='del'>-	} else {</div><div class='del'>-            /* Tk_NameToWindow() returns right token on non-eventloop thread */</div><div class='del'>-            Tcl_CmdInfo info;</div><div class='del'>-            if (Tcl_GetCommandInfo(interp, ".", &amp;info)) { /* check root */</div><div class='del'>-                window = Tk_NameToWindow(interp, nameString, tkwin);</div><div class='del'>-            } else {</div><div class='del'>-                window = NULL;</div><div class='del'>-            }</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        if (window == NULL) {</div><div class='del'>-            Tcl_AppendResult(interp, ": thread_tkwait: ", </div><div class='del'>-                             "no main-window (not Tk application?)", </div><div class='del'>-                             (char*)NULL);</div><div class='del'>-</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	    Tcl_EventuallyFree((ClientData)param, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-            Tcl_Release(param);</div><div class='del'>-#else</div><div class='del'>-            /* Tcl_Free((char *)param); */</div><div class='del'>-            ckfree((char *)param);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-            Tcl_Release(tkwin);</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-        Tcl_Preserve(window);</div><div class='del'>-</div><div class='del'>-        Tk_CreateEventHandler(window,</div><div class='del'>-                              VisibilityChangeMask|StructureNotifyMask,</div><div class='del'>-                              rb_threadWaitVisibilityProc, (ClientData) param);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        while(param-&gt;done != TKWAIT_MODE_VISIBILITY) {</div><div class='del'>-            if (param-&gt;done == TKWAIT_MODE_DESTROY) break;</div><div class='del'>-            /* rb_thread_stop(); */</div><div class='del'>-            rb_thread_sleep_forever();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        /* when a window is destroyed, no need to call Tk_DeleteEventHandler */</div><div class='del'>-        if (param-&gt;done != TKWAIT_MODE_DESTROY) {</div><div class='del'>-            Tk_DeleteEventHandler(window,</div><div class='del'>-                                  VisibilityChangeMask|StructureNotifyMask,</div><div class='del'>-                                  rb_threadWaitVisibilityProc, </div><div class='del'>-                                  (ClientData) param);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (param-&gt;done != 1) {</div><div class='del'>-            Tcl_ResetResult(interp);</div><div class='del'>-            Tcl_AppendResult(interp, "window \"", nameString,</div><div class='del'>-                             "\" was deleted before its visibility changed",</div><div class='del'>-                             (char *) NULL);</div><div class='del'>-</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-            Tcl_Release(window);</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	    Tcl_EventuallyFree((ClientData)param, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-            Tcl_Release(param);</div><div class='del'>-#else</div><div class='del'>-            /* Tcl_Free((char *)param); */</div><div class='del'>-            ckfree((char *)param);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-            Tcl_Release(tkwin);</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tcl_Release(window);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case TKWAIT_WINDOW:</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if 0 /* variable 'tkwin' must keep the token of MainWindow */</div><div class='del'>-        if (!tk_stubs_init_p() || Tk_MainWindow(interp) == (Tk_Window)NULL) {</div><div class='del'>-            window = NULL;</div><div class='del'>-        } else {</div><div class='del'>-            window = Tk_NameToWindow(interp, nameString, tkwin);</div><div class='del'>-        }</div><div class='del'>-#else</div><div class='del'>-        if (!tk_stubs_init_p() || tkwin == (Tk_Window)NULL) {</div><div class='del'>-            window = NULL;</div><div class='del'>-	} else {</div><div class='del'>-            /* Tk_NameToWindow() returns right token on non-eventloop thread */</div><div class='del'>-            Tcl_CmdInfo info;</div><div class='del'>-            if (Tcl_GetCommandInfo(interp, ".", &amp;info)) { /* check root */</div><div class='del'>-                window = Tk_NameToWindow(interp, nameString, tkwin);</div><div class='del'>-            } else {</div><div class='del'>-                window = NULL;</div><div class='del'>-            }</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[2]);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        if (window == NULL) {</div><div class='del'>-            Tcl_AppendResult(interp, ": thread_tkwait: ", </div><div class='del'>-                             "no main-window (not Tk application?)", </div><div class='del'>-                             (char*)NULL);</div><div class='del'>-</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	    Tcl_EventuallyFree((ClientData)param, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-            Tcl_Release(param);</div><div class='del'>-#else</div><div class='del'>-            /* Tcl_Free((char *)param); */</div><div class='del'>-            ckfree((char *)param);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-            Tcl_Release(tkwin);</div><div class='del'>-            Tcl_Release(interp);</div><div class='del'>-            return TCL_ERROR;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tcl_Preserve(window);</div><div class='del'>-</div><div class='del'>-        Tk_CreateEventHandler(window, StructureNotifyMask,</div><div class='del'>-                              rb_threadWaitWindowProc, (ClientData) param);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        while(param-&gt;done != TKWAIT_MODE_DESTROY) {</div><div class='del'>-            /* rb_thread_stop(); */</div><div class='del'>-            rb_thread_sleep_forever();</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tcl_Release(window);</div><div class='del'>-</div><div class='del'>-        /* when a window is destroyed, no need to call Tk_DeleteEventHandler</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        Tk_DeleteEventHandler(window, StructureNotifyMask,</div><div class='del'>-                              rb_threadWaitWindowProc, (ClientData) param);</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-        */</div><div class='del'>-</div><div class='del'>-        break;</div><div class='del'>-    } /* end of 'switch' statement */</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)param, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 1 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)param);</div><div class='del'>-#else</div><div class='del'>-    /* Tcl_Free((char *)param); */</div><div class='del'>-    ckfree((char *)param);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Clear out the interpreter's result, since it may have been set</div><div class='del'>-     * by event handlers.</div><div class='del'>-     */</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-</div><div class='del'>-    Tcl_Release(tkwin);</div><div class='del'>-    Tcl_Release(interp);</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_thread_vwait(self, var)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE var;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[2];</div><div class='del'>-    volatile VALUE cmd_str = rb_str_new2("thread_vwait");</div><div class='del'>-</div><div class='del'>-    argv[0] = cmd_str;</div><div class='del'>-    argv[1] = var;</div><div class='del'>-</div><div class='del'>-    return ip_invoke_with_position(2, argv, self, TCL_QUEUE_TAIL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_thread_tkwait(self, mode, target)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE mode;</div><div class='del'>-    VALUE target;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[3];</div><div class='del'>-    volatile VALUE cmd_str = rb_str_new2("thread_tkwait");</div><div class='del'>-</div><div class='del'>-    argv[0] = cmd_str;</div><div class='del'>-    argv[1] = mode;</div><div class='del'>-    argv[2] = target;</div><div class='del'>-</div><div class='del'>-    return ip_invoke_with_position(3, argv, self, TCL_QUEUE_TAIL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* delete slave interpreters */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static void</div><div class='del'>-delete_slaves(ip)</div><div class='del'>-    Tcl_Interp *ip;</div><div class='del'>-{</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    Tcl_Interp *slave;</div><div class='del'>-    Tcl_Obj *slave_list, *elem;</div><div class='del'>-    char *slave_name;</div><div class='del'>-    int i, len;</div><div class='del'>-</div><div class='del'>-    DUMP1("delete slaves");</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    if (!Tcl_InterpDeleted(ip) &amp;&amp; Tcl_Eval(ip, "interp slaves") == TCL_OK) {</div><div class='del'>-        slave_list = Tcl_GetObjResult(ip);</div><div class='del'>-        Tcl_IncrRefCount(slave_list);</div><div class='del'>-</div><div class='del'>-        if (Tcl_ListObjLength((Tcl_Interp*)NULL, slave_list, &amp;len) == TCL_OK) {</div><div class='del'>-            for(i = 0; i &lt; len; i++) {</div><div class='del'>-                Tcl_ListObjIndex((Tcl_Interp*)NULL, slave_list, i, &amp;elem);</div><div class='del'>-</div><div class='del'>-                if (elem == (Tcl_Obj*)NULL) continue;</div><div class='del'>-</div><div class='del'>-                Tcl_IncrRefCount(elem);</div><div class='del'>-</div><div class='del'>-                /* get slave */</div><div class='del'>-                /* slave_name = Tcl_GetString(elem); */</div><div class='del'>-                slave_name = Tcl_GetStringFromObj(elem, (int*)NULL);</div><div class='del'>-                DUMP2("delete slave:'%s'", slave_name);</div><div class='del'>-</div><div class='del'>-                Tcl_DecrRefCount(elem);</div><div class='del'>-</div><div class='del'>-                slave = Tcl_GetSlave(ip, slave_name);</div><div class='del'>-                if (slave == (Tcl_Interp*)NULL) continue;</div><div class='del'>-</div><div class='del'>-                /* call ip_finalize */</div><div class='del'>-                ip_finalize(slave);</div><div class='del'>-</div><div class='del'>-                Tcl_DeleteInterp(slave);</div><div class='del'>-                /* Tcl_Release(slave); */</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tcl_DecrRefCount(slave_list);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-}</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static void</div><div class='del'>-delete_slaves(ip)</div><div class='del'>-    Tcl_Interp *ip;</div><div class='del'>-{</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    Tcl_Interp *slave;</div><div class='del'>-    int argc;</div><div class='del'>-    char **argv;</div><div class='del'>-    char *slave_list;</div><div class='del'>-    char *slave_name;</div><div class='del'>-    int i, len;</div><div class='del'>-</div><div class='del'>-    DUMP1("delete slaves");</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    if (!Tcl_InterpDeleted(ip) &amp;&amp; Tcl_Eval(ip, "interp slaves") == TCL_OK) {</div><div class='del'>-        slave_list = ip-&gt;result;</div><div class='del'>-        if (Tcl_SplitList((Tcl_Interp*)NULL, </div><div class='del'>-                          slave_list, &amp;argc, &amp;argv) == TCL_OK) {</div><div class='del'>-            for(i = 0; i &lt; argc; i++) {</div><div class='del'>-                slave_name = argv[i];</div><div class='del'>-</div><div class='del'>-                DUMP2("delete slave:'%s'", slave_name);</div><div class='del'>-</div><div class='del'>-                slave = Tcl_GetSlave(ip, slave_name);</div><div class='del'>-                if (slave == (Tcl_Interp*)NULL) continue;</div><div class='del'>-</div><div class='del'>-                /* call ip_finalize */</div><div class='del'>-                ip_finalize(slave);</div><div class='del'>-</div><div class='del'>-                Tcl_DeleteInterp(slave);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* finalize operation */</div><div class='del'>-static void</div><div class='del'>-lib_mark_at_exit(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    at_exit = 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-ip_null_proc(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int argc;</div><div class='del'>-    Tcl_Obj *CONST argv[];</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-ip_null_proc(clientData, interp, argc, argv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    int argc;</div><div class='del'>-    char *argv[];</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-    return TCL_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ip_finalize(ip)</div><div class='del'>-    Tcl_Interp *ip;</div><div class='del'>-{</div><div class='del'>-    Tcl_CmdInfo info;</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    VALUE rb_debug_bup, rb_verbose_bup;</div><div class='del'>-          /* When ruby is exiting, printing debug messages in some callback </div><div class='del'>-             operations from Tcl-IP sometimes cause SEGV. I don't know the </div><div class='del'>-             reason. But I got SEGV when calling "rb_io_write(rb_stdout, ...)".</div><div class='del'>-             So, in some part of this function, debug mode and verbose mode </div><div class='del'>-             are disabled. If you know the reason, please fix it.</div><div class='del'>-                           --  Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)  */</div><div class='del'>-</div><div class='del'>-    DUMP1("start ip_finalize");</div><div class='del'>-</div><div class='del'>-    if (ip == (Tcl_Interp*)NULL) {</div><div class='del'>-        DUMP1("ip is NULL");</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_InterpDeleted(ip)) {</div><div class='del'>-        DUMP2("ip(%p) is already deleted", ip);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if TCL_NAMESPACE_DEBUG</div><div class='del'>-    if (ip_null_namespace(ip)) {</div><div class='del'>-        DUMP2("ip(%p) has null namespace", ip);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    rb_debug_bup   = ruby_debug;</div><div class='del'>-    rb_verbose_bup = ruby_verbose;</div><div class='del'>-</div><div class='del'>-    Tcl_Preserve(ip);</div><div class='del'>-</div><div class='del'>-    /* delete slaves */</div><div class='del'>-    delete_slaves(ip);</div><div class='del'>-</div><div class='del'>-    /* shut off some connections from Tcl-proc to Ruby */</div><div class='del'>-    if (at_exit) {</div><div class='del'>-	/* NOTE: Only when at exit. </div><div class='del'>-	   Because, ruby removes objects, which depends on the deleted </div><div class='del'>-	   interpreter, on some callback operations. </div><div class='del'>-	   It is important for GC. */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-	Tcl_CreateObjCommand(ip, "ruby", ip_null_proc, </div><div class='del'>-			     (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-	Tcl_CreateObjCommand(ip, "ruby_eval", ip_null_proc, </div><div class='del'>-			     (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-	Tcl_CreateObjCommand(ip, "ruby_cmd", ip_null_proc, </div><div class='del'>-			     (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-	Tcl_CreateCommand(ip, "ruby", ip_null_proc, </div><div class='del'>-			  (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-	Tcl_CreateCommand(ip, "ruby_eval", ip_null_proc, </div><div class='del'>-			  (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-	Tcl_CreateCommand(ip, "ruby_cmd", ip_null_proc, </div><div class='del'>-			  (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-	/* </div><div class='del'>-	  rb_thread_critical = thr_crit_bup;</div><div class='del'>-	  return;</div><div class='del'>-	*/</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* delete root widget */</div><div class='del'>-#if 1</div><div class='del'>-    DUMP1("check `destroy'");</div><div class='del'>-    if (Tcl_GetCommandInfo(ip, "destroy", &amp;info)) {</div><div class='del'>-        DUMP1("call `destroy .'");</div><div class='del'>-        Tcl_GlobalEval(ip, "catch {destroy .}");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#if 1</div><div class='del'>-    DUMP1("destroy root widget");</div><div class='del'>-    if (tk_stubs_init_p() &amp;&amp; Tk_MainWindow(ip) != (Tk_Window)NULL) {</div><div class='del'>-        /*</div><div class='del'>-	 *  On Ruby VM, this code piece may be not called, because </div><div class='del'>-	 *  Tk_MainWindow() returns NULL on a native thread except </div><div class='del'>-         *  the thread which initialize Tk environment.</div><div class='del'>-         *  Of course, that is a problem. But maybe not so serious.</div><div class='del'>-         *  All widgets are destroyed when the Tcl interp is deleted.</div><div class='del'>-         *  At then, Ruby may raise exceptions on the delete hook </div><div class='del'>-         *  callbacks which registered for the deleted widgets, and </div><div class='del'>-	 *  may fail to clear objects which depends on the widgets.</div><div class='del'>-         *  Although it is the problem, it is possibly avoidable by</div><div class='del'>-         *  rescuing exceptions and the finalize hook of the interp.</div><div class='del'>-         */</div><div class='del'>-        Tk_Window win = Tk_MainWindow(ip);</div><div class='del'>-</div><div class='del'>-        DUMP1("call Tk_DestroyWindow");</div><div class='del'>-        ruby_debug   = Qfalse;</div><div class='del'>-        ruby_verbose = Qnil;</div><div class='del'>-	if (! (((Tk_FakeWin*)win)-&gt;flags &amp; TK_ALREADY_DEAD)) {</div><div class='del'>-	  Tk_DestroyWindow(win);</div><div class='del'>-	}</div><div class='del'>-        ruby_debug   = rb_debug_bup;</div><div class='del'>-        ruby_verbose = rb_verbose_bup;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* call finalize-hook-proc */</div><div class='del'>-    DUMP1("check `finalize-hook-proc'");</div><div class='del'>-    if ( Tcl_GetCommandInfo(ip, finalize_hook_name, &amp;info)) {</div><div class='del'>-        DUMP2("call finalize hook proc '%s'", finalize_hook_name);</div><div class='del'>-        ruby_debug   = Qfalse;</div><div class='del'>-        ruby_verbose = Qnil;</div><div class='del'>-        Tcl_GlobalEval(ip, finalize_hook_name);</div><div class='del'>-        ruby_debug   = rb_debug_bup;</div><div class='del'>-        ruby_verbose = rb_verbose_bup;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP1("check `foreach' &amp; `after'");</div><div class='del'>-    if ( Tcl_GetCommandInfo(ip, "foreach", &amp;info)</div><div class='del'>-         &amp;&amp; Tcl_GetCommandInfo(ip, "after", &amp;info) ) {</div><div class='del'>-        DUMP1("cancel after callbacks");</div><div class='del'>-        ruby_debug   = Qfalse;</div><div class='del'>-        ruby_verbose = Qnil;</div><div class='del'>-        Tcl_GlobalEval(ip, "catch {foreach id [after info] {after cancel $id}}");</div><div class='del'>-        ruby_debug   = rb_debug_bup;</div><div class='del'>-        ruby_verbose = rb_verbose_bup;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_Release(ip);</div><div class='del'>-</div><div class='del'>-    DUMP1("finish ip_finalize");</div><div class='del'>-    ruby_debug   = rb_debug_bup;</div><div class='del'>-    ruby_verbose = rb_verbose_bup;</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* destroy interpreter */</div><div class='del'>-static void</div><div class='del'>-ip_free(ptr)</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-{</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    DUMP2("free Tcl Interp %lx", (unsigned long)ptr-&gt;ip);</div><div class='del'>-    if (ptr) {</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        if ( ptr-&gt;ip != (Tcl_Interp*)NULL </div><div class='del'>-             &amp;&amp; !Tcl_InterpDeleted(ptr-&gt;ip)</div><div class='del'>-             &amp;&amp; Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL </div><div class='del'>-             &amp;&amp; !Tcl_InterpDeleted(Tcl_GetMaster(ptr-&gt;ip)) ) {</div><div class='del'>-            DUMP2("parent IP(%lx) is not deleted", </div><div class='del'>-                  (unsigned long)Tcl_GetMaster(ptr-&gt;ip));</div><div class='del'>-            DUMP2("slave IP(%lx) should not be deleted", </div><div class='del'>-                  (unsigned long)ptr-&gt;ip);</div><div class='del'>-            free(ptr);</div><div class='del'>-            /* ckfree((char*)ptr); */</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ptr-&gt;ip == (Tcl_Interp*)NULL) {</div><div class='del'>-            DUMP1("ip_free is called for deleted IP");</div><div class='del'>-            free(ptr);</div><div class='del'>-            /* ckfree((char*)ptr); */</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ip_finalize(ptr-&gt;ip);</div><div class='del'>-        Tcl_DeleteInterp(ptr-&gt;ip); </div><div class='del'>-        Tcl_Release(ptr-&gt;ip); </div><div class='del'>-</div><div class='del'>-        ptr-&gt;ip = (Tcl_Interp*)NULL;</div><div class='del'>-        free(ptr);</div><div class='del'>-        /* ckfree((char*)ptr); */</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP1("complete freeing Tcl Interp");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* create and initialize interpreter */</div><div class='del'>-static VALUE ip_alloc _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-ip_alloc(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return Data_Wrap_Struct(self, 0, ip_free, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ip_replace_wait_commands(interp, mainWin)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    Tk_Window mainWin;</div><div class='del'>-{</div><div class='del'>-    /* replace 'vwait' command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"vwait\")");</div><div class='del'>-    Tcl_CreateObjCommand(interp, "vwait", ip_rbVwaitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"vwait\")");</div><div class='del'>-    Tcl_CreateCommand(interp, "vwait", ip_rbVwaitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* replace 'tkwait' command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"tkwait\")");</div><div class='del'>-    Tcl_CreateObjCommand(interp, "tkwait", ip_rbTkWaitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"tkwait\")");</div><div class='del'>-    Tcl_CreateCommand(interp, "tkwait", ip_rbTkWaitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* add 'thread_vwait' command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"thread_vwait\")");</div><div class='del'>-    Tcl_CreateObjCommand(interp, "thread_vwait", ip_rb_threadVwaitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"thread_vwait\")");</div><div class='del'>-    Tcl_CreateCommand(interp, "thread_vwait", ip_rb_threadVwaitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* add 'thread_tkwait' command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"thread_tkwait\")");</div><div class='del'>-    Tcl_CreateObjCommand(interp, "thread_tkwait", ip_rb_threadTkWaitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"thread_tkwait\")");</div><div class='del'>-    Tcl_CreateCommand(interp, "thread_tkwait", ip_rb_threadTkWaitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* replace 'update' command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"update\")");</div><div class='del'>-    Tcl_CreateObjCommand(interp, "update", ip_rbUpdateObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"update\")");</div><div class='del'>-    Tcl_CreateCommand(interp, "update", ip_rbUpdateCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* add 'thread_update' command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"thread_update\")");</div><div class='del'>-    Tcl_CreateObjCommand(interp, "thread_update", ip_rb_threadUpdateObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"thread_update\")");</div><div class='del'>-    Tcl_CreateCommand(interp, "thread_update", ip_rb_threadUpdateCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</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'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static int ip_rbNamespaceObjCmd _((ClientData, Tcl_Interp *, int,</div><div class='del'>-                                   Tcl_Obj *CONST []));</div><div class='del'>-static int</div><div class='del'>-ip_rbNamespaceObjCmd(clientData, interp, objc, objv)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj *CONST objv[];</div><div class='del'>-{</div><div class='del'>-    Tcl_CmdInfo info;</div><div class='del'>-    int ret;</div><div class='del'>-</div><div class='del'>-    if (!Tcl_GetCommandInfo(interp, "__orig_namespace_command__", &amp;(info))) {</div><div class='del'>-        Tcl_ResetResult(interp);</div><div class='del'>-        Tcl_AppendResult(interp, </div><div class='del'>-                         "invalid command name \"namespace\"", (char*)NULL);</div><div class='del'>-        return TCL_ERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rbtk_eventloop_depth++;</div><div class='del'>-    DUMP2("namespace wrapper enter depth == %d", rbtk_eventloop_depth);</div><div class='del'>-</div><div class='del'>-    if (info.isNativeObjectProc) {</div><div class='del'>-        ret = (*(info.objProc))(info.objClientData, interp, objc, objv);</div><div class='del'>-    } else {</div><div class='del'>-        /* string interface */</div><div class='del'>-        int i;</div><div class='del'>-        char **argv;</div><div class='del'>-</div><div class='del'>-        /* argv = (char **)Tcl_Alloc(sizeof(char *) * (objc + 1)); */</div><div class='del'>-        argv = (char **)ckalloc(sizeof(char *) * (objc + 1));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Preserve((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-        for(i = 0; i &lt; objc; i++) {</div><div class='del'>-            /* argv[i] = Tcl_GetString(objv[i]); */</div><div class='del'>-            argv[i] = Tcl_GetStringFromObj(objv[i], (int*)NULL);</div><div class='del'>-        }</div><div class='del'>-        argv[objc] = (char *)NULL;</div><div class='del'>-</div><div class='del'>-        ret = (*(info.proc))(info.clientData, interp, </div><div class='del'>-                              objc, (CONST84 char **)argv);</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	Tcl_EventuallyFree((ClientData)argv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Release((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-        /* Tcl_Free((char*)argv); */</div><div class='del'>-        ckfree((char*)argv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP2("namespace wrapper exit depth == %d", rbtk_eventloop_depth);</div><div class='del'>-    rbtk_eventloop_depth--;</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'>-static void</div><div class='del'>-ip_wrap_namespace_command(interp)</div><div class='del'>-    Tcl_Interp *interp; </div><div class='del'>-{</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_CmdInfo orig_info;</div><div class='del'>-</div><div class='del'>-    if (!Tcl_GetCommandInfo(interp, "namespace", &amp;(orig_info))) {</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (orig_info.isNativeObjectProc) {</div><div class='del'>-        Tcl_CreateObjCommand(interp, "__orig_namespace_command__", </div><div class='del'>-                             orig_info.objProc, orig_info.objClientData, </div><div class='del'>-                             orig_info.deleteProc);</div><div class='del'>-    } else {</div><div class='del'>-        Tcl_CreateCommand(interp, "__orig_namespace_command__", </div><div class='del'>-                          orig_info.proc, orig_info.clientData, </div><div class='del'>-                          orig_info.deleteProc);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Tcl_CreateObjCommand(interp, "namespace", ip_rbNamespaceObjCmd, </div><div class='del'>-                         (ClientData) 0, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* call when interpreter is deleted */</div><div class='del'>-static void</div><div class='del'>-ip_CallWhenDeleted(clientData, ip)</div><div class='del'>-    ClientData clientData;</div><div class='del'>-    Tcl_Interp *ip;</div><div class='del'>-{</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    /* Tk_Window main_win = (Tk_Window) clientData; */</div><div class='del'>-</div><div class='del'>-    DUMP1("start ip_CallWhenDeleted");</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    ip_finalize(ip);</div><div class='del'>-</div><div class='del'>-    DUMP1("finish ip_CallWhenDeleted");</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* initialize interpreter */</div><div class='del'>-static VALUE</div><div class='del'>-ip_init(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'>-    struct tcltkip *ptr;        /* tcltkip data struct */</div><div class='del'>-    VALUE argv0, opts;</div><div class='del'>-    int cnt;</div><div class='del'>-    int st;</div><div class='del'>-    int with_tk = 1;</div><div class='del'>-    Tk_Window mainWin = (Tk_Window)NULL;</div><div class='del'>-</div><div class='del'>-    /* security check */</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    if (rb_safe_level() &gt;= 4) {</div><div class='del'>-#else</div><div class='del'>-    if (ruby_safe_level &gt;= 4) {</div><div class='del'>-#endif</div><div class='del'>-        rb_raise(rb_eSecurityError, </div><div class='del'>-                 "Cannot create a TclTkIp object at level %d", </div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                 rb_safe_level()</div><div class='del'>-#else</div><div class='del'>-                 ruby_safe_level</div><div class='del'>-#endif</div><div class='del'>-                 );</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* create object */</div><div class='del'>-    Data_Get_Struct(self, struct tcltkip, ptr);</div><div class='del'>-    ptr = ALLOC(struct tcltkip);</div><div class='del'>-    /* ptr = (struct tcltkip *)ckalloc(sizeof(struct tcltkip)); */</div><div class='del'>-    DATA_PTR(self) = ptr;</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    ptr-&gt;tk_thread_id = 0;</div><div class='del'>-#endif</div><div class='del'>-    ptr-&gt;ref_count = 0;</div><div class='del'>-    ptr-&gt;allow_ruby_exit = 1;</div><div class='del'>-    ptr-&gt;return_value = 0;</div><div class='del'>-</div><div class='del'>-    /* from Tk_Main() */</div><div class='del'>-    DUMP1("Tcl_CreateInterp");</div><div class='del'>-    ptr-&gt;ip = ruby_tcl_create_ip_and_stubs_init(&amp;st);</div><div class='del'>-    if (ptr-&gt;ip == NULL) {</div><div class='del'>-        switch(st) {</div><div class='del'>-        case TCLTK_STUBS_OK:</div><div class='del'>-            break;</div><div class='del'>-        case NO_TCL_DLL:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: fail to open tcl_dll");</div><div class='del'>-        case NO_FindExecutable:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: can't find Tcl_FindExecutable");</div><div class='del'>-        case NO_CreateInterp:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: can't find Tcl_CreateInterp()");</div><div class='del'>-        case NO_DeleteInterp:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: can't find Tcl_DeleteInterp()");</div><div class='del'>-        case FAIL_CreateInterp:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: fail to create a new IP");</div><div class='del'>-        case FAIL_Tcl_InitStubs:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: fail to Tcl_InitStubs()");</div><div class='del'>-        default:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: unknown error(%d) on ruby_tcl_create_ip_and_stubs_init", st);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-#if TCL_NAMESPACE_DEBUG</div><div class='del'>-    DUMP1("get current namespace");</div><div class='del'>-    if ((ptr-&gt;default_ns = Tcl_GetCurrentNamespace(ptr-&gt;ip)) </div><div class='del'>-        == (Tcl_Namespace*)NULL) {</div><div class='del'>-      rb_raise(rb_eRuntimeError, "a new Tk interpreter has a NULL namespace");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rbtk_preserve_ip(ptr);</div><div class='del'>-    DUMP2("IP ref_count = %d", ptr-&gt;ref_count);</div><div class='del'>-    current_interp = ptr-&gt;ip;</div><div class='del'>-</div><div class='del'>-    ptr-&gt;has_orig_exit </div><div class='del'>-        = Tcl_GetCommandInfo(ptr-&gt;ip, "exit", &amp;(ptr-&gt;orig_exit_info));</div><div class='del'>-</div><div class='del'>-    /* from Tcl_AppInit() */</div><div class='del'>-    DUMP1("Tcl_Init");</div><div class='del'>-    if (Tcl_Init(ptr-&gt;ip) == TCL_ERROR) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "%s", Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* set variables */</div><div class='del'>-    cnt = rb_scan_args(argc, argv, "02", &amp;argv0, &amp;opts);</div><div class='del'>-    switch(cnt) {</div><div class='del'>-    case 2:</div><div class='del'>-        /* options */</div><div class='del'>-        if (NIL_P(opts) || opts == Qfalse) {</div><div class='del'>-            /* without Tk */</div><div class='del'>-            with_tk = 0;</div><div class='del'>-        } else {</div><div class='del'>-            /* Tcl_SetVar(ptr-&gt;ip, "argv", StringValuePtr(opts), 0); */</div><div class='del'>-            Tcl_SetVar(ptr-&gt;ip, "argv", StringValuePtr(opts), TCL_GLOBAL_ONLY);</div><div class='del'>-        }</div><div class='del'>-    case 1:</div><div class='del'>-        /* argv0 */</div><div class='del'>-        if (!NIL_P(argv0)) {</div><div class='del'>-            if (strncmp(StringValuePtr(argv0), "-e", 3) == 0</div><div class='del'>-                || strncmp(StringValuePtr(argv0), "-", 2) == 0) {</div><div class='del'>-                Tcl_SetVar(ptr-&gt;ip, "argv0", "ruby", TCL_GLOBAL_ONLY);</div><div class='del'>-            } else {</div><div class='del'>-                /* Tcl_SetVar(ptr-&gt;ip, "argv0", StringValuePtr(argv0), 0); */</div><div class='del'>-                Tcl_SetVar(ptr-&gt;ip, "argv0", StringValuePtr(argv0), </div><div class='del'>-                           TCL_GLOBAL_ONLY);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    case 0:</div><div class='del'>-        /* no args */</div><div class='del'>-        ;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* from Tcl_AppInit() */</div><div class='del'>-    if (with_tk) {</div><div class='del'>-        DUMP1("Tk_Init");</div><div class='del'>-        st = ruby_tk_stubs_init(ptr-&gt;ip);</div><div class='del'>-        switch(st) {</div><div class='del'>-        case TCLTK_STUBS_OK:</div><div class='del'>-            break;</div><div class='del'>-        case NO_Tk_Init:</div><div class='del'>-            rb_raise(rb_eLoadError, "tcltklib: can't find Tk_Init()");</div><div class='del'>-        case FAIL_Tk_Init:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: fail to Tk_Init(). %s", </div><div class='del'>-                     Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-        case FAIL_Tk_InitStubs:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: fail to Tk_InitStubs(). %s", </div><div class='del'>-                     Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-        default:</div><div class='del'>-            rb_raise(rb_eRuntimeError, "tcltklib: unknown error(%d) on ruby_tk_stubs_init", st);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        DUMP1("Tcl_StaticPackage(\"Tk\")");</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_StaticPackage(ptr-&gt;ip, "Tk", Tk_Init, Tk_SafeInit);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        Tcl_StaticPackage(ptr-&gt;ip, "Tk", Tk_Init,</div><div class='del'>-                          (Tcl_PackageInitProc *) NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-        /* set Tk thread ID */</div><div class='del'>-        ptr-&gt;tk_thread_id = Tcl_GetCurrentThread();</div><div class='del'>-#endif</div><div class='del'>-        /* get main window */</div><div class='del'>-        mainWin = Tk_MainWindow(ptr-&gt;ip);</div><div class='del'>-        Tk_Preserve((ClientData)mainWin);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* add ruby command to the interpreter */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"ruby\")");</div><div class='del'>-    Tcl_CreateObjCommand(ptr-&gt;ip, "ruby", ip_ruby_eval, (ClientData)NULL,</div><div class='del'>-                         (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"ruby_eval\")");</div><div class='del'>-    Tcl_CreateObjCommand(ptr-&gt;ip, "ruby_eval", ip_ruby_eval, (ClientData)NULL,</div><div class='del'>-                         (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"ruby_cmd\")");</div><div class='del'>-    Tcl_CreateObjCommand(ptr-&gt;ip, "ruby_cmd", ip_ruby_cmd, (ClientData)NULL,</div><div class='del'>-                         (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"ruby\")");</div><div class='del'>-    Tcl_CreateCommand(ptr-&gt;ip, "ruby", ip_ruby_eval, (ClientData)NULL,</div><div class='del'>-                      (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"ruby_eval\")");</div><div class='del'>-    Tcl_CreateCommand(ptr-&gt;ip, "ruby_eval", ip_ruby_eval, (ClientData)NULL,</div><div class='del'>-                      (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"ruby_cmd\")");</div><div class='del'>-    Tcl_CreateCommand(ptr-&gt;ip, "ruby_cmd", ip_ruby_cmd, (ClientData)NULL,</div><div class='del'>-                      (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* add 'interp_exit', 'ruby_exit' and replace 'exit' command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"interp_exit\")");</div><div class='del'>-    Tcl_CreateObjCommand(ptr-&gt;ip, "interp_exit", ip_InterpExitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"ruby_exit\")");</div><div class='del'>-    Tcl_CreateObjCommand(ptr-&gt;ip, "ruby_exit", ip_RubyExitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"exit\") --&gt; \"ruby_exit\"");</div><div class='del'>-    Tcl_CreateObjCommand(ptr-&gt;ip, "exit", ip_RubyExitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"interp_exit\")");</div><div class='del'>-    Tcl_CreateCommand(ptr-&gt;ip, "interp_exit", ip_InterpExitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"ruby_exit\")");</div><div class='del'>-    Tcl_CreateCommand(ptr-&gt;ip, "ruby_exit", ip_RubyExitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"exit\") --&gt; \"ruby_exit\"");</div><div class='del'>-    Tcl_CreateCommand(ptr-&gt;ip, "exit", ip_RubyExitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* replace vwait and tkwait */</div><div class='del'>-    ip_replace_wait_commands(ptr-&gt;ip, mainWin);</div><div class='del'>-</div><div class='del'>-    /* wrap namespace command */</div><div class='del'>-    ip_wrap_namespace_command(ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-    /* set finalizer */</div><div class='del'>-    Tcl_CallWhenDeleted(ptr-&gt;ip, ip_CallWhenDeleted, (ClientData)mainWin);</div><div class='del'>-</div><div class='del'>-    if (mainWin != (Tk_Window)NULL) {</div><div class='del'>-        Tk_Release((ClientData)mainWin);</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'>-ip_create_slave_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int   argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *master = get_ip(interp);</div><div class='del'>-    struct tcltkip *slave = ALLOC(struct tcltkip);</div><div class='del'>-    /* struct tcltkip *slave = (struct tcltkip *)ckalloc(sizeof(struct tcltkip)); */</div><div class='del'>-    VALUE safemode;</div><div class='del'>-    VALUE name;</div><div class='del'>-    int safe;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    Tk_Window mainWin;</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(master)) {</div><div class='del'>-        return rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                           "deleted master cannot create a new slave");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    name     = argv[0];</div><div class='del'>-    safemode = argv[1];</div><div class='del'>-</div><div class='del'>-    if (Tcl_IsSafe(master-&gt;ip) == 1) {</div><div class='del'>-        safe = 1;</div><div class='del'>-    } else if (safemode == Qfalse || NIL_P(safemode)) {</div><div class='del'>-        safe = 0;</div><div class='del'>-        /* rb_secure(4); */ /* already checked */</div><div class='del'>-    } else {</div><div class='del'>-        safe = 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-    /* init Tk */</div><div class='del'>-    if (RTEST(with_tk)) {</div><div class='del'>-        volatile VALUE exc;</div><div class='del'>-        if (!tk_stubs_init_p()) {</div><div class='del'>-            exc = tcltkip_init_tk(interp);</div><div class='del'>-            if (!NIL_P(exc)) {</div><div class='del'>-                rb_thread_critical = thr_crit_bup;</div><div class='del'>-                return exc;</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'>-    /* create slave-ip */</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    /* slave-&gt;tk_thread_id = 0; */</div><div class='del'>-    slave-&gt;tk_thread_id = master-&gt;tk_thread_id; /* == current thread */</div><div class='del'>-#endif</div><div class='del'>-    slave-&gt;ref_count = 0;</div><div class='del'>-    slave-&gt;allow_ruby_exit = 0;</div><div class='del'>-    slave-&gt;return_value = 0;</div><div class='del'>-</div><div class='del'>-    slave-&gt;ip = Tcl_CreateSlave(master-&gt;ip, StringValuePtr(name), safe);</div><div class='del'>-    if (slave-&gt;ip == NULL) {</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-        return rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                           "fail to create the new slave interpreter");</div><div class='del'>-    }</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-#if TCL_NAMESPACE_DEBUG</div><div class='del'>-    slave-&gt;default_ns = Tcl_GetCurrentNamespace(slave-&gt;ip);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    rbtk_preserve_ip(slave);</div><div class='del'>-</div><div class='del'>-    slave-&gt;has_orig_exit </div><div class='del'>-        = Tcl_GetCommandInfo(slave-&gt;ip, "exit", &amp;(slave-&gt;orig_exit_info));</div><div class='del'>-</div><div class='del'>-    /* replace 'exit' command --&gt; 'interp_exit' command */</div><div class='del'>-    mainWin = (tk_stubs_init_p())? Tk_MainWindow(slave-&gt;ip): (Tk_Window)NULL;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"exit\") --&gt; \"interp_exit\"");</div><div class='del'>-    Tcl_CreateObjCommand(slave-&gt;ip, "exit", ip_InterpExitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"exit\") --&gt; \"interp_exit\"");</div><div class='del'>-    Tcl_CreateCommand(slave-&gt;ip, "exit", ip_InterpExitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* replace vwait and tkwait */</div><div class='del'>-    ip_replace_wait_commands(slave-&gt;ip, mainWin);</div><div class='del'>-</div><div class='del'>-    /* wrap namespace command */</div><div class='del'>-    ip_wrap_namespace_command(slave-&gt;ip);</div><div class='del'>-</div><div class='del'>-    /* set finalizer */</div><div class='del'>-    Tcl_CallWhenDeleted(slave-&gt;ip, ip_CallWhenDeleted, (ClientData)mainWin);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    return Data_Wrap_Struct(CLASS_OF(interp), 0, ip_free, slave);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_create_slave(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'>-    struct tcltkip *master = get_ip(self);</div><div class='del'>-    VALUE safemode;</div><div class='del'>-    VALUE name;</div><div class='del'>-    VALUE callargv[2];</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(master)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, </div><div class='del'>-                 "deleted master cannot create a new slave interpreter");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* argument check */</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;name, &amp;safemode) == 1) {</div><div class='del'>-        safemode = Qfalse;</div><div class='del'>-    }</div><div class='del'>-    if (Tcl_IsSafe(master-&gt;ip) != 1</div><div class='del'>-        &amp;&amp; (safemode == Qfalse || NIL_P(safemode))) {</div><div class='del'>-        rb_secure(4);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    StringValue(name);</div><div class='del'>-    callargv[0] = name;</div><div class='del'>-    callargv[1] = safemode;</div><div class='del'>-</div><div class='del'>-    return tk_funcall(ip_create_slave_core, 2, callargv, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* self is slave of master? */</div><div class='del'>-static VALUE</div><div class='del'>-ip_is_slave_of_p(self, master)</div><div class='del'>-    VALUE self, master;</div><div class='del'>-{</div><div class='del'>-    if (!rb_obj_is_kind_of(master, tcltkip_class)) {</div><div class='del'>-        rb_raise(rb_eArgError, "expected TclTkIp object");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetMaster(get_ip(self)-&gt;ip) == get_ip(master)-&gt;ip) {</div><div class='del'>-      return Qtrue;</div><div class='del'>-    } else {</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'>-/* create console (if supported) */</div><div class='del'>-#if defined(MAC_TCL) || defined(__WIN32__)</div><div class='del'>-#if TCL_MAJOR_VERSION &lt; 8 \</div><div class='del'>-    || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION == 0) \</div><div class='del'>-    || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION == 1 \</div><div class='del'>-        &amp;&amp; (TCL_RELEASE_LEVEL == TCL_ALPHA_RELEASE \</div><div class='del'>-           || (TCL_RELEASE_LEVEL == TCL_BETA_RELEASE \</div><div class='del'>-               &amp;&amp; TCL_RELEASE_SERIAL &lt; 2) ) )</div><div class='del'>-EXTERN void TkConsoleCreate _((void));</div><div class='del'>-#endif</div><div class='del'>-#if TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION == 1 \</div><div class='del'>-    &amp;&amp; ( (TCL_RELEASE_LEVEL == TCL_FINAL_RELEASE \</div><div class='del'>-          &amp;&amp; TCL_RELEASE_SERIAL == 0) \</div><div class='del'>-       || (TCL_RELEASE_LEVEL == TCL_BETA_RELEASE \</div><div class='del'>-           &amp;&amp; TCL_RELEASE_SERIAL &gt;= 2) )</div><div class='del'>-EXTERN void TkConsoleCreate_ _((void));</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-static VALUE</div><div class='del'>-ip_create_console_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int   argc;   /* dummy */</div><div class='del'>-    VALUE *argv;  /* dummy */</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-</div><div class='del'>-    if (!tk_stubs_init_p()) {</div><div class='del'>-        tcltkip_init_tk(interp);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetVar(ptr-&gt;ip,"tcl_interactive",TCL_GLOBAL_ONLY) == (char*)NULL) {</div><div class='del'>-        Tcl_SetVar(ptr-&gt;ip, "tcl_interactive", "0", TCL_GLOBAL_ONLY);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 \</div><div class='del'>-    || (TCL_MAJOR_VERSION == 8 \</div><div class='del'>-        &amp;&amp; (TCL_MINOR_VERSION &gt; 1 \</div><div class='del'>-            || (TCL_MINOR_VERSION == 1 \</div><div class='del'>-                 &amp;&amp; TCL_RELEASE_LEVEL == TCL_FINAL_RELEASE \</div><div class='del'>-                 &amp;&amp; TCL_RELEASE_SERIAL &gt;= 1) ) )</div><div class='del'>-    Tk_InitConsoleChannels(ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-    if (Tk_CreateConsoleWindow(ptr-&gt;ip) != TCL_OK) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "fail to create console-window");</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-#if defined(MAC_TCL) || defined(__WIN32__)</div><div class='del'>-#if TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION == 1 \</div><div class='del'>-    &amp;&amp; ( (TCL_RELEASE_LEVEL == TCL_FINAL_RELEASE &amp;&amp; TCL_RELEASE_SERIAL == 0) \</div><div class='del'>-        || (TCL_RELEASE_LEVEL == TCL_BETA_RELEASE &amp;&amp; TCL_RELEASE_SERIAL &gt;= 2) )</div><div class='del'>-    TkConsoleCreate_();</div><div class='del'>-#else</div><div class='del'>-    TkConsoleCreate();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (TkConsoleInit(ptr-&gt;ip) != TCL_OK) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "fail to create console-window");</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return interp;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_create_console(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-    </div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return tk_funcall(ip_create_console_core, 0, (VALUE*)NULL, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* make ip "safe" */</div><div class='del'>-static VALUE</div><div class='del'>-ip_make_safe_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int   argc;   /* dummy */</div><div class='del'>-    VALUE *argv;  /* dummy */</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-    Tk_Window mainWin;</div><div class='del'>-    </div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return rb_exc_new2(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_MakeSafe(ptr-&gt;ip) == TCL_ERROR) {</div><div class='del'>-        /* return rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                              Tcl_GetStringResult(ptr-&gt;ip)); */</div><div class='del'>-        return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                             Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ptr-&gt;allow_ruby_exit = 0;</div><div class='del'>-</div><div class='del'>-    /* replace 'exit' command --&gt; 'interp_exit' command */</div><div class='del'>-    mainWin = (tk_stubs_init_p())? Tk_MainWindow(ptr-&gt;ip): (Tk_Window)NULL;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    DUMP1("Tcl_CreateObjCommand(\"exit\") --&gt; \"interp_exit\"");</div><div class='del'>-    Tcl_CreateObjCommand(ptr-&gt;ip, "exit", ip_InterpExitObjCmd, </div><div class='del'>-                         (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP1("Tcl_CreateCommand(\"exit\") --&gt; \"interp_exit\"");</div><div class='del'>-    Tcl_CreateCommand(ptr-&gt;ip, "exit", ip_InterpExitCommand, </div><div class='del'>-                      (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return interp;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_make_safe(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-    </div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return tk_funcall(ip_make_safe_core, 0, (VALUE*)NULL, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* is safe? */</div><div class='del'>-static VALUE</div><div class='del'>-ip_is_safe_p(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-    </div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_IsSafe(ptr-&gt;ip)) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* allow_ruby_exit? */</div><div class='del'>-static VALUE</div><div class='del'>-ip_allow_ruby_exit_p(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-    </div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (ptr-&gt;allow_ruby_exit) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* allow_ruby_exit = mode */</div><div class='del'>-static VALUE</div><div class='del'>-ip_allow_ruby_exit_set(self, val)</div><div class='del'>-    VALUE self, val;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-    Tk_Window mainWin;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_IsSafe(ptr-&gt;ip)) {</div><div class='del'>-        rb_raise(rb_eSecurityError, </div><div class='del'>-                 "insecure operation on a safe interpreter");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     *  Because of cross-threading, the following line may fail to find </div><div class='del'>-     *  the MainWindow, even if the Tcl/Tk interpreter has one or more.</div><div class='del'>-     *  But it has no problem. Current implementation of both type of </div><div class='del'>-     *  the "exit" command don't need maiinWin token.</div><div class='del'>-     */</div><div class='del'>-    mainWin = (tk_stubs_init_p())? Tk_MainWindow(ptr-&gt;ip): (Tk_Window)NULL;</div><div class='del'>-</div><div class='del'>-    if (RTEST(val)) {</div><div class='del'>-        ptr-&gt;allow_ruby_exit = 1;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        DUMP1("Tcl_CreateObjCommand(\"exit\") --&gt; \"ruby_exit\"");</div><div class='del'>-        Tcl_CreateObjCommand(ptr-&gt;ip, "exit", ip_RubyExitObjCmd, </div><div class='del'>-                             (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        DUMP1("Tcl_CreateCommand(\"exit\") --&gt; \"ruby_exit\"");</div><div class='del'>-        Tcl_CreateCommand(ptr-&gt;ip, "exit", ip_RubyExitCommand, </div><div class='del'>-                          (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-        return Qtrue;</div><div class='del'>-</div><div class='del'>-    } else {</div><div class='del'>-        ptr-&gt;allow_ruby_exit = 0;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        DUMP1("Tcl_CreateObjCommand(\"exit\") --&gt; \"interp_exit\"");</div><div class='del'>-        Tcl_CreateObjCommand(ptr-&gt;ip, "exit", ip_InterpExitObjCmd, </div><div class='del'>-                             (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        DUMP1("Tcl_CreateCommand(\"exit\") --&gt; \"interp_exit\"");</div><div class='del'>-        Tcl_CreateCommand(ptr-&gt;ip, "exit", ip_InterpExitCommand, </div><div class='del'>-                          (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL);</div><div class='del'>-#endif</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* delete interpreter */</div><div class='del'>-static VALUE</div><div class='del'>-ip_delete(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    if (ptr == (struct tcltkip *)NULL || ptr-&gt;ip == (Tcl_Interp*)NULL) {</div><div class='del'>-        DUMP1("delete deleted IP");</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    DUMP1("call ip_finalize");</div><div class='del'>-    ip_finalize(ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-    DUMP1("delete interp");</div><div class='del'>-    Tcl_DeleteInterp(ptr-&gt;ip);</div><div class='del'>-    Tcl_Release(ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</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'>-/* is deleted? */</div><div class='del'>-static VALUE</div><div class='del'>-ip_has_invalid_namespace_p(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    if (ptr == (struct tcltkip *)NULL || ptr-&gt;ip == (Tcl_Interp *)NULL) {</div><div class='del'>-        /* deleted IP */</div><div class='del'>-        return Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if TCL_NAMESPACE_DEBUG</div><div class='del'>-    if (rbtk_invalid_namespace(ptr)) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    return Qfalse;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_is_deleted_p(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    } else {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_has_mainwindow_p_core(self, argc, argv)</div><div class='del'>-    VALUE self;</div><div class='del'>-    int   argc;   /* dummy */</div><div class='del'>-    VALUE *argv;  /* dummy */</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    if (deleted_ip(ptr) || !tk_stubs_init_p()) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    } else if (Tk_MainWindow(ptr-&gt;ip) == (Tk_Window)NULL) {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    } else {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_has_mainwindow_p(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return tk_funcall(ip_has_mainwindow_p_core, 0, (VALUE*)NULL, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*** ruby string &lt;=&gt; tcl object ***/</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static VALUE</div><div class='del'>-get_str_from_obj(obj)</div><div class='del'>-    Tcl_Obj *obj;</div><div class='del'>-{</div><div class='del'>-    int len, binary = 0;</div><div class='del'>-    const char *s;</div><div class='del'>-    volatile VALUE str;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt;= 4)</div><div class='del'>-    int len2;</div><div class='del'>-    const char *s2;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION == 0</div><div class='del'>-    s = Tcl_GetStringFromObj(obj, &amp;len);</div><div class='del'>-#else</div><div class='del'>-#if TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &lt;= 3</div><div class='del'>-     /* TCL_VERSION 8.1 -- 8.3 */</div><div class='del'>-    if (Tcl_GetCharLength(obj) != Tcl_UniCharLen(Tcl_GetUnicode(obj))) {</div><div class='del'>-        /* possibly binary string */</div><div class='del'>-        s = Tcl_GetByteArrayFromObj(obj, &amp;len);</div><div class='del'>-        binary = 1;</div><div class='del'>-    } else {</div><div class='del'>-        /* possibly text string */</div><div class='del'>-        s = Tcl_GetStringFromObj(obj, &amp;len);</div><div class='del'>-    }</div><div class='del'>-#else /* TCL_VERSION &gt;= 8.4 */</div><div class='del'>-    if (IS_TCL_BYTEARRAY(obj)) {</div><div class='del'>-      s = Tcl_GetByteArrayFromObj(obj, &amp;len);</div><div class='del'>-      binary = 1;</div><div class='del'>-    } else {</div><div class='del'>-      s = Tcl_GetStringFromObj(obj, &amp;len);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    str = s ? rb_str_new(s, len) : rb_str_new2("");</div><div class='del'>-    if (binary) {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-      rb_enc_associate_index(str, ENCODING_INDEX_BINARY);</div><div class='del'>-#endif</div><div class='del'>-      rb_ivar_set(str, ID_at_enc, ENCODING_NAME_BINARY);</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt;= 1)</div><div class='del'>-    } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-      rb_enc_associate_index(str, ENCODING_INDEX_UTF8);</div><div class='del'>-#endif</div><div class='del'>-      rb_ivar_set(str, ID_at_enc, ENCODING_NAME_UTF8);</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static Tcl_Obj *</div><div class='del'>-get_obj_from_str(str)</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    const char *s = StringValuePtr(str);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION == 0</div><div class='del'>-    return Tcl_NewStringObj((char*)s, RSTRING_LEN(str));</div><div class='del'>-#else /* TCL_VERSION &gt;= 8.1 */</div><div class='del'>-    VALUE enc = rb_attr_get(str, ID_at_enc);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(enc)) {</div><div class='del'>-        StringValue(enc);</div><div class='del'>-        if (strcmp(RSTRING_PTR(enc), "binary") == 0) {</div><div class='del'>-            /* binary string */</div><div class='del'>-            return Tcl_NewByteArrayObj(s, RSTRING_LEN(str));</div><div class='del'>-        } else {</div><div class='del'>-            /* text string */</div><div class='del'>-            return Tcl_NewStringObj(s, RSTRING_LEN(str));</div><div class='del'>-        }</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    } else if (rb_enc_get_index(str) == ENCODING_INDEX_BINARY) {</div><div class='del'>-        /* binary string */</div><div class='del'>-        return Tcl_NewByteArrayObj(s, RSTRING_LEN(str));</div><div class='del'>-#endif</div><div class='del'>-    } else if (strlen(s) != RSTRING_LEN(str)) {</div><div class='del'>-        /* probably binary string */</div><div class='del'>-        return Tcl_NewByteArrayObj(s, RSTRING_LEN(str));</div><div class='del'>-    } else {</div><div class='del'>-        /* probably text string */</div><div class='del'>-        return Tcl_NewStringObj(s, RSTRING_LEN(str));</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-#endif /* ruby string &lt;=&gt; tcl object */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_result_string_obj(interp)</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-{</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_Obj *retObj;</div><div class='del'>-    volatile VALUE strval;</div><div class='del'>-</div><div class='del'>-    retObj = Tcl_GetObjResult(interp);</div><div class='del'>-    Tcl_IncrRefCount(retObj);</div><div class='del'>-    strval = get_str_from_obj(retObj);</div><div class='del'>-    OBJ_TAINT(strval);</div><div class='del'>-    Tcl_ResetResult(interp);</div><div class='del'>-    Tcl_DecrRefCount(retObj);</div><div class='del'>-    return strval;</div><div class='del'>-#else</div><div class='del'>-    return rb_tainted_str_new2(interp-&gt;result);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* call Tcl/Tk functions on the eventloop thread */</div><div class='del'>-static VALUE</div><div class='del'>-callq_safelevel_handler(arg, callq)</div><div class='del'>-    VALUE arg;</div><div class='del'>-    VALUE callq;</div><div class='del'>-{</div><div class='del'>-    struct call_queue *q;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(callq, struct call_queue, q);</div><div class='del'>-    DUMP2("(safe-level handler) $SAFE = %d", q-&gt;safe_level);</div><div class='del'>-    rb_set_safe_level(q-&gt;safe_level);</div><div class='del'>-    return((q-&gt;func)(q-&gt;interp, q-&gt;argc, q-&gt;argv));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int call_queue_handler _((Tcl_Event *, int));</div><div class='del'>-static int</div><div class='del'>-call_queue_handler(evPtr, flags)</div><div class='del'>-    Tcl_Event *evPtr;</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    struct call_queue *q = (struct call_queue *)evPtr;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    volatile VALUE q_dat;</div><div class='del'>-    volatile VALUE thread = q-&gt;thread;</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-</div><div class='del'>-    DUMP2("do_call_queue_handler : evPtr = %p", evPtr);</div><div class='del'>-    DUMP2("call_queue_handler thread : %lx", rb_thread_current());</div><div class='del'>-    DUMP2("added by thread : %lx", thread);</div><div class='del'>-</div><div class='del'>-    if (*(q-&gt;done)) {</div><div class='del'>-        DUMP1("processed by another event-loop");</div><div class='del'>-        return 0;</div><div class='del'>-    } else {</div><div class='del'>-        DUMP1("process it on current event-loop");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RTEST(rb_thread_alive_p(thread)) </div><div class='del'>-	&amp;&amp; ! RTEST(rb_funcall(thread, ID_stop_p, 0))) {</div><div class='del'>-      DUMP1("caller is not yet ready to receive the result -&gt; pending");</div><div class='del'>-      return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* process it */</div><div class='del'>-    *(q-&gt;done) = 1;</div><div class='del'>-</div><div class='del'>-    /* deleted ipterp ? */</div><div class='del'>-    ptr = get_ip(q-&gt;interp);</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        /* deleted IP --&gt; ignore */</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* incr internal handler mark */</div><div class='del'>-    rbtk_internal_eventloop_handler++;</div><div class='del'>-</div><div class='del'>-    /* check safe-level */</div><div class='del'>-    if (rb_safe_level() != q-&gt;safe_level) {</div><div class='del'>-        /* q_dat = Data_Wrap_Struct(rb_cData,0,-1,q); */</div><div class='del'>-        q_dat = Data_Wrap_Struct(rb_cData,call_queue_mark,-1,q);</div><div class='del'>-        ret = rb_funcall(rb_proc_new(callq_safelevel_handler, q_dat), </div><div class='del'>-                         ID_call, 0);</div><div class='del'>-        rb_gc_force_recycle(q_dat);</div><div class='del'>-	q_dat = (VALUE)NULL;</div><div class='del'>-    } else {</div><div class='del'>-        DUMP2("call function (for caller thread:%lx)", thread);</div><div class='del'>-        DUMP2("call function (current thread:%lx)", rb_thread_current());</div><div class='del'>-        ret = (q-&gt;func)(q-&gt;interp, q-&gt;argc, q-&gt;argv);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* set result */</div><div class='del'>-    RARRAY_PTR(q-&gt;result)[0] = ret;</div><div class='del'>-    ret = (VALUE)NULL;</div><div class='del'>-</div><div class='del'>-    /* decr internal handler mark */</div><div class='del'>-    rbtk_internal_eventloop_handler--;</div><div class='del'>-</div><div class='del'>-    /* complete */</div><div class='del'>-    *(q-&gt;done) = -1;</div><div class='del'>-</div><div class='del'>-    /* unlink ruby objects */</div><div class='del'>-    q-&gt;argv = (VALUE*)NULL;</div><div class='del'>-    q-&gt;interp = (VALUE)NULL;</div><div class='del'>-    q-&gt;result = (VALUE)NULL;</div><div class='del'>-    q-&gt;thread = (VALUE)NULL;</div><div class='del'>-</div><div class='del'>-    /* back to caller */</div><div class='del'>-    /* if (RTEST(rb_funcall(thread, ID_alive_p, 0, 0))) { */</div><div class='del'>-    if (RTEST(rb_thread_alive_p(thread))) {</div><div class='del'>-      DUMP2("back to caller (caller thread:%lx)", thread);</div><div class='del'>-      DUMP2("               (current thread:%lx)", rb_thread_current());</div><div class='del'>-#if CONTROL_BY_STATUS_OF_RB_THREAD_WAITING_FOR_VALUE</div><div class='del'>-      have_rb_thread_waiting_for_value = 1;</div><div class='del'>-      rb_thread_wakeup(thread);</div><div class='del'>-#else</div><div class='del'>-      rb_thread_run(thread);</div><div class='del'>-#endif</div><div class='del'>-      DUMP1("finish back to caller");</div><div class='del'>-#if DO_THREAD_SCHEDULE_AT_CALLBACK_DONE</div><div class='del'>-      rb_thread_schedule();</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-      DUMP2("caller is dead (caller thread:%lx)", thread);</div><div class='del'>-      DUMP2("               (current thread:%lx)", rb_thread_current());</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* end of handler : remove it */</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_funcall(func, argc, argv, obj)</div><div class='del'>-    VALUE (*func)();</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'>-    struct call_queue *callq;</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-    int  *alloc_done;</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    int  is_tk_evloop_thread;</div><div class='del'>-    volatile VALUE current = rb_thread_current();</div><div class='del'>-    volatile VALUE ip_obj = obj;</div><div class='del'>-    volatile VALUE result;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(ip_obj) &amp;&amp; rb_obj_is_kind_of(ip_obj, tcltkip_class)) {</div><div class='del'>-        ptr = get_ip(ip_obj);</div><div class='del'>-        if (deleted_ip(ptr)) return Qnil;</div><div class='del'>-    } else {</div><div class='del'>-        ptr = (struct tcltkip *)NULL;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    if (ptr) {</div><div class='del'>-      /* on Tcl interpreter */</div><div class='del'>-      is_tk_evloop_thread = (ptr-&gt;tk_thread_id == (Tcl_ThreadId) 0 </div><div class='del'>-			     || ptr-&gt;tk_thread_id == Tcl_GetCurrentThread());</div><div class='del'>-    } else {</div><div class='del'>-      /* on Tcl/Tk library */</div><div class='del'>-      is_tk_evloop_thread = (tk_eventloop_thread_id == (Tcl_ThreadId) 0 </div><div class='del'>-			     || tk_eventloop_thread_id == Tcl_GetCurrentThread());</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    is_tk_evloop_thread = 1;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (is_tk_evloop_thread</div><div class='del'>-	&amp;&amp; (NIL_P(eventloop_thread) || current == eventloop_thread)</div><div class='del'>-        ) {</div><div class='del'>-        if (NIL_P(eventloop_thread)) {</div><div class='del'>-            DUMP2("tk_funcall from thread:%lx but no eventloop", current);</div><div class='del'>-        } else {</div><div class='del'>-            DUMP2("tk_funcall from current eventloop %lx", current);</div><div class='del'>-        }</div><div class='del'>-        result = (func)(ip_obj, argc, argv);</div><div class='del'>-        if (rb_obj_is_kind_of(result, rb_eException)) {</div><div class='del'>-            rb_exc_raise(result);</div><div class='del'>-        }</div><div class='del'>-        return result;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP2("tk_funcall from thread %lx (NOT current eventloop)", current);</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /* allocate memory (argv cross over thread : must be in heap) */</div><div class='del'>-    if (argv) {</div><div class='del'>-        /* VALUE *temp = ALLOC_N(VALUE, argc); */</div><div class='del'>-        VALUE *temp = (VALUE*)ckalloc(sizeof(VALUE) * argc);</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Preserve((ClientData)temp); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-        MEMCPY(temp, argv, VALUE, argc);</div><div class='del'>-        argv = temp;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* allocate memory (keep result) */</div><div class='del'>-    /* alloc_done = (int*)ALLOC(int); */</div><div class='del'>-    alloc_done = (int*)ckalloc(sizeof(int));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)alloc_done); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-    *alloc_done = 0;</div><div class='del'>-</div><div class='del'>-    /* allocate memory (freed by Tcl_ServiceEvent) */</div><div class='del'>-    /* callq = (struct call_queue *)Tcl_Alloc(sizeof(struct call_queue)); */</div><div class='del'>-    callq = (struct call_queue *)ckalloc(sizeof(struct call_queue));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve(callq);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* allocate result obj */</div><div class='del'>-    result = rb_ary_new3(1, Qnil);</div><div class='del'>-</div><div class='del'>-    /* construct event data */</div><div class='del'>-    callq-&gt;done = alloc_done;</div><div class='del'>-    callq-&gt;func = func;</div><div class='del'>-    callq-&gt;argc = argc;</div><div class='del'>-    callq-&gt;argv = argv;</div><div class='del'>-    callq-&gt;interp = ip_obj;</div><div class='del'>-    callq-&gt;result = result;</div><div class='del'>-    callq-&gt;thread = current;</div><div class='del'>-    callq-&gt;safe_level = rb_safe_level();</div><div class='del'>-    callq-&gt;ev.proc = call_queue_handler;</div><div class='del'>-</div><div class='del'>-    /* add the handler to Tcl event queue */</div><div class='del'>-    DUMP1("add handler");</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    if (ptr &amp;&amp; ptr-&gt;tk_thread_id) {</div><div class='del'>-      /* Tcl_ThreadQueueEvent(ptr-&gt;tk_thread_id, </div><div class='del'>-			   &amp;(callq-&gt;ev), TCL_QUEUE_HEAD); */</div><div class='del'>-      Tcl_ThreadQueueEvent(ptr-&gt;tk_thread_id, </div><div class='del'>-			   (Tcl_Event*)callq, TCL_QUEUE_HEAD);</div><div class='del'>-      Tcl_ThreadAlert(ptr-&gt;tk_thread_id);</div><div class='del'>-    } else if (tk_eventloop_thread_id) {</div><div class='del'>-      /* Tcl_ThreadQueueEvent(tk_eventloop_thread_id, </div><div class='del'>-			   &amp;(callq-&gt;ev), TCL_QUEUE_HEAD); */</div><div class='del'>-      Tcl_ThreadQueueEvent(tk_eventloop_thread_id, </div><div class='del'>-			   (Tcl_Event*)callq, TCL_QUEUE_HEAD);</div><div class='del'>-      Tcl_ThreadAlert(tk_eventloop_thread_id);</div><div class='del'>-    } else {</div><div class='del'>-      /* Tcl_QueueEvent(&amp;(callq-&gt;ev), TCL_QUEUE_HEAD); */</div><div class='del'>-      Tcl_QueueEvent((Tcl_Event*)callq, TCL_QUEUE_HEAD);</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    /* Tcl_QueueEvent(&amp;(callq-&gt;ev), TCL_QUEUE_HEAD); */</div><div class='del'>-    Tcl_QueueEvent((Tcl_Event*)callq, TCL_QUEUE_HEAD);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* wait for the handler to be processed */</div><div class='del'>-    DUMP2("wait for handler (current thread:%lx)", current);</div><div class='del'>-    while(*alloc_done &gt;= 0) {</div><div class='del'>-      DUMP2("*** wait for handler (current thread:%lx)", current);</div><div class='del'>-      /* rb_thread_stop(); */</div><div class='del'>-      rb_thread_sleep_forever();</div><div class='del'>-      DUMP2("*** wakeup (current thread:%lx)", current);</div><div class='del'>-    }</div><div class='del'>-    DUMP2("back from handler (current thread:%lx)", current);</div><div class='del'>-</div><div class='del'>-    /* get result &amp; free allocated memory */</div><div class='del'>-    ret = RARRAY_PTR(result)[0];</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)alloc_done, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)alloc_done); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    /* free(alloc_done); */</div><div class='del'>-    ckfree((char*)alloc_done);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    /* if (argv) free(argv); */</div><div class='del'>-    if (argv) {</div><div class='del'>-      /* if argv != NULL, alloc as 'temp' */</div><div class='del'>-      int i;</div><div class='del'>-      for(i = 0; i &lt; argc; i++) { argv[i] = (VALUE)NULL; }</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-      Tcl_EventuallyFree((ClientData)argv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-      Tcl_Release((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-      ckfree((char*)argv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if 0 /* callq is freed by Tcl_ServiceEvent */</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release(callq);</div><div class='del'>-#else</div><div class='del'>-    ckfree((char*)callq);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* exception? */</div><div class='del'>-    if (rb_obj_is_kind_of(ret, rb_eException)) {</div><div class='del'>-        DUMP1("raise exception");</div><div class='del'>-        /* rb_exc_raise(ret); */</div><div class='del'>-	rb_exc_raise(rb_exc_new3(rb_obj_class(ret), </div><div class='del'>-				 rb_funcall(ret, ID_to_s, 0, 0)));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP1("exit tk_funcall");</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* eval string in tcl by Tcl_Eval() */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-struct call_eval_info {</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-    Tcl_Obj *cmd;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-call_tcl_eval(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct call_eval_info *inf = (struct call_eval_info *)arg;</div><div class='del'>-</div><div class='del'>-    Tcl_AllowExceptions(inf-&gt;ptr-&gt;ip);</div><div class='del'>-    inf-&gt;ptr-&gt;return_value = Tcl_EvalObj(inf-&gt;ptr-&gt;ip, inf-&gt;cmd);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_eval_real(self, cmd_str, cmd_len)</div><div class='del'>-    VALUE self;</div><div class='del'>-    char *cmd_str;</div><div class='del'>-    int  cmd_len;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    /* call Tcl_EvalObj() */</div><div class='del'>-    {</div><div class='del'>-      Tcl_Obj *cmd;</div><div class='del'>-</div><div class='del'>-      thr_crit_bup = rb_thread_critical;</div><div class='del'>-      rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-      cmd = Tcl_NewStringObj(cmd_str, cmd_len);</div><div class='del'>-      Tcl_IncrRefCount(cmd);</div><div class='del'>-</div><div class='del'>-      /* ip is deleted? */</div><div class='del'>-      if (deleted_ip(ptr)) {</div><div class='del'>-          Tcl_DecrRefCount(cmd);</div><div class='del'>-          rb_thread_critical = thr_crit_bup;</div><div class='del'>-          ptr-&gt;return_value = TCL_OK;</div><div class='del'>-          return rb_tainted_str_new2("");</div><div class='del'>-      } else {</div><div class='del'>-          int status;</div><div class='del'>-          struct call_eval_info inf;</div><div class='del'>-</div><div class='del'>-          /* Tcl_Preserve(ptr-&gt;ip); */</div><div class='del'>-          rbtk_preserve_ip(ptr);</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-          ptr-&gt;return_value = Tcl_EvalObj(ptr-&gt;ip, cmd);</div><div class='del'>-          /* ptr-&gt;return_value = Tcl_GlobalEvalObj(ptr-&gt;ip, cmd); */</div><div class='del'>-#else</div><div class='del'>-          inf.ptr = ptr;</div><div class='del'>-          inf.cmd = cmd;</div><div class='del'>-          ret = rb_protect(call_tcl_eval, (VALUE)&amp;inf, &amp;status);</div><div class='del'>-          switch(status) {</div><div class='del'>-          case TAG_RAISE:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-              if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-              if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                  rbtk_pending_exception = rb_exc_new2(rb_eException, </div><div class='del'>-                                                       "unknown exception");</div><div class='del'>-              } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                  rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                  rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-              }</div><div class='del'>-              break;</div><div class='del'>-</div><div class='del'>-          case TAG_FATAL:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-              if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-              if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-                  rbtk_pending_exception = rb_exc_new2(rb_eFatal, "FATAL");</div><div class='del'>-              } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-                  rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-                  rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-              }</div><div class='del'>-          }</div><div class='del'>-#endif</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      Tcl_DecrRefCount(cmd);</div><div class='del'>-</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (pending_exception_check1(thr_crit_bup, ptr)) {</div><div class='del'>-        rbtk_release_ip(ptr);</div><div class='del'>-        return rbtk_pending_exception;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (ptr-&gt;return_value == TCL_ERROR) {</div><div class='del'>-        if (event_loop_abort_on_exc &gt; 0 &amp;&amp; !Tcl_InterpDeleted(ptr-&gt;ip)) {</div><div class='del'>-            volatile VALUE exc;</div><div class='del'>-            exc = create_ip_exc(self, rb_eRuntimeError, </div><div class='del'>-                                "%s", Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-            rbtk_release_ip(ptr);</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return exc;</div><div class='del'>-        } else {</div><div class='del'>-            if (event_loop_abort_on_exc &lt; 0) {</div><div class='del'>-                rb_warning("%s (ignore)", Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-            } else {</div><div class='del'>-                rb_warn("%s (ignore)", Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-            }</div><div class='del'>-            Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-            rbtk_release_ip(ptr);</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return rb_tainted_str_new2("");</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* pass back the result (as string) */</div><div class='del'>-    ret =  ip_get_result_string_obj(ptr-&gt;ip);</div><div class='del'>-    rbtk_release_ip(ptr);</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-    return ret;</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    DUMP2("Tcl_Eval(%s)", cmd_str);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        ptr-&gt;return_value = TCL_OK;</div><div class='del'>-        return rb_tainted_str_new2("");</div><div class='del'>-    } else {</div><div class='del'>-        /* Tcl_Preserve(ptr-&gt;ip); */</div><div class='del'>-        rbtk_preserve_ip(ptr);</div><div class='del'>-        ptr-&gt;return_value = Tcl_Eval(ptr-&gt;ip, cmd_str);</div><div class='del'>-        /* ptr-&gt;return_value = Tcl_GlobalEval(ptr-&gt;ip, cmd_str); */</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (pending_exception_check1(thr_crit_bup, ptr)) {</div><div class='del'>-        rbtk_release_ip(ptr);</div><div class='del'>-        return rbtk_pending_exception;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (ptr-&gt;return_value == TCL_ERROR) {</div><div class='del'>-        volatile VALUE exc;</div><div class='del'>-</div><div class='del'>-        exc = create_ip_exc(self, rb_eRuntimeError, "%s", ptr-&gt;ip-&gt;result);</div><div class='del'>-</div><div class='del'>-        rbtk_release_ip(ptr);</div><div class='del'>-        return exc;</div><div class='del'>-    }</div><div class='del'>-    DUMP2("(TCL_Eval result) %d", ptr-&gt;return_value);</div><div class='del'>-</div><div class='del'>-    /* pass back the result (as string) */</div><div class='del'>-    ret =  ip_get_result_string_obj(ptr-&gt;ip);</div><div class='del'>-    rbtk_release_ip(ptr);</div><div class='del'>-    return ret;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-evq_safelevel_handler(arg, evq)</div><div class='del'>-    VALUE arg;</div><div class='del'>-    VALUE evq;</div><div class='del'>-{</div><div class='del'>-    struct eval_queue *q;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(evq, struct eval_queue, q);</div><div class='del'>-    DUMP2("(safe-level handler) $SAFE = %d", q-&gt;safe_level);</div><div class='del'>-    rb_set_safe_level(q-&gt;safe_level);</div><div class='del'>-    return ip_eval_real(q-&gt;interp, q-&gt;str, q-&gt;len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int eval_queue_handler _((Tcl_Event *, int));</div><div class='del'>-int</div><div class='del'>-eval_queue_handler(evPtr, flags)</div><div class='del'>-    Tcl_Event *evPtr;</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    struct eval_queue *q = (struct eval_queue *)evPtr;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    volatile VALUE q_dat;</div><div class='del'>-    volatile VALUE thread = q-&gt;thread;</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-</div><div class='del'>-    DUMP2("do_eval_queue_handler : evPtr = %p", evPtr);</div><div class='del'>-    DUMP2("eval_queue_thread : %lx", rb_thread_current());</div><div class='del'>-    DUMP2("added by thread : %lx", thread);</div><div class='del'>-</div><div class='del'>-    if (*(q-&gt;done)) {</div><div class='del'>-        DUMP1("processed by another event-loop");</div><div class='del'>-        return 0;</div><div class='del'>-    } else {</div><div class='del'>-        DUMP1("process it on current event-loop");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RTEST(rb_thread_alive_p(thread)) </div><div class='del'>-	&amp;&amp; ! RTEST(rb_funcall(thread, ID_stop_p, 0))) {</div><div class='del'>-      DUMP1("caller is not yet ready to receive the result -&gt; pending");</div><div class='del'>-      return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* process it */</div><div class='del'>-    *(q-&gt;done) = 1;</div><div class='del'>-</div><div class='del'>-    /* deleted ipterp ? */</div><div class='del'>-    ptr = get_ip(q-&gt;interp);</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        /* deleted IP --&gt; ignore */</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* incr internal handler mark */</div><div class='del'>-    rbtk_internal_eventloop_handler++;</div><div class='del'>-</div><div class='del'>-    /* check safe-level */</div><div class='del'>-    if (rb_safe_level() != q-&gt;safe_level) {</div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-#if 0</div><div class='del'>-    if (!ruby_native_thread_p()) {</div><div class='del'>-      rb_bug("cross-thread violation on eval_queue_handler()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#else</div><div class='del'>-    if (!is_ruby_native_thread()) {</div><div class='del'>-      rb_bug("cross-thread violation on eval_queue_handler()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-        /* q_dat = Data_Wrap_Struct(rb_cData,0,-1,q); */</div><div class='del'>-        q_dat = Data_Wrap_Struct(rb_cData,eval_queue_mark,-1,q);</div><div class='del'>-        ret = rb_funcall(rb_proc_new(evq_safelevel_handler, q_dat), </div><div class='del'>-                         ID_call, 0);</div><div class='del'>-        rb_gc_force_recycle(q_dat);</div><div class='del'>-	q_dat = (VALUE)NULL;</div><div class='del'>-    } else {</div><div class='del'>-        ret = ip_eval_real(q-&gt;interp, q-&gt;str, q-&gt;len);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* set result */</div><div class='del'>-    RARRAY_PTR(q-&gt;result)[0] = ret;</div><div class='del'>-    ret = (VALUE)NULL;</div><div class='del'>-</div><div class='del'>-    /* decr internal handler mark */</div><div class='del'>-    rbtk_internal_eventloop_handler--;</div><div class='del'>-</div><div class='del'>-    /* complete */</div><div class='del'>-    *(q-&gt;done) = -1;</div><div class='del'>-</div><div class='del'>-    /* unlink ruby objects */</div><div class='del'>-    q-&gt;interp = (VALUE)NULL;</div><div class='del'>-    q-&gt;result = (VALUE)NULL;</div><div class='del'>-    q-&gt;thread = (VALUE)NULL;</div><div class='del'>-</div><div class='del'>-    /* back to caller */</div><div class='del'>-    /* if (RTEST(rb_funcall(thread, ID_alive_p, 0, 0))) { */</div><div class='del'>-    if (RTEST(rb_thread_alive_p(thread))) {</div><div class='del'>-      DUMP2("back to caller (caller thread:%lx)", thread);</div><div class='del'>-      DUMP2("               (current thread:%lx)", rb_thread_current());</div><div class='del'>-#if CONTROL_BY_STATUS_OF_RB_THREAD_WAITING_FOR_VALUE</div><div class='del'>-      have_rb_thread_waiting_for_value = 1;</div><div class='del'>-      rb_thread_wakeup(thread);</div><div class='del'>-#else</div><div class='del'>-      rb_thread_run(thread);</div><div class='del'>-#endif</div><div class='del'>-      DUMP1("finish back to caller");</div><div class='del'>-#if DO_THREAD_SCHEDULE_AT_CALLBACK_DONE</div><div class='del'>-      rb_thread_schedule();</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-      DUMP2("caller is dead (caller thread:%lx)", thread);</div><div class='del'>-      DUMP2("               (current thread:%lx)", rb_thread_current());</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* end of handler : remove it */</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_eval(self, str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    struct eval_queue *evq;</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-#endif</div><div class='del'>-    char *eval_str;</div><div class='del'>-    int  *alloc_done;</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    volatile VALUE current = rb_thread_current();</div><div class='del'>-    volatile VALUE ip_obj = self;</div><div class='del'>-    volatile VALUE result;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    Tcl_QueuePosition position;</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-    StringValue(str);</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    ptr = get_ip(ip_obj);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-	(ptr-&gt;tk_thread_id == 0 || ptr-&gt;tk_thread_id == Tcl_GetCurrentThread())</div><div class='del'>-	&amp;&amp; </div><div class='del'>-#endif</div><div class='del'>-	(NIL_P(eventloop_thread) || current == eventloop_thread)</div><div class='del'>-	) {</div><div class='del'>-        if (NIL_P(eventloop_thread)) {</div><div class='del'>-            DUMP2("eval from thread:%lx but no eventloop", current);</div><div class='del'>-        } else {</div><div class='del'>-            DUMP2("eval from current eventloop %lx", current);</div><div class='del'>-        }</div><div class='del'>-        result = ip_eval_real(self, RSTRING_PTR(str), RSTRING_LEN(str));</div><div class='del'>-        if (rb_obj_is_kind_of(result, rb_eException)) {</div><div class='del'>-            rb_exc_raise(result);</div><div class='del'>-        }</div><div class='del'>-        return result;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP2("eval from thread %lx (NOT current eventloop)", current);</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /* allocate memory (keep result) */</div><div class='del'>-    /* alloc_done = (int*)ALLOC(int); */</div><div class='del'>-    alloc_done = (int*)ckalloc(sizeof(int));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)alloc_done); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-    *alloc_done = 0;</div><div class='del'>-</div><div class='del'>-    /* eval_str = ALLOC_N(char, RSTRING_LEN(str) + 1); */</div><div class='del'>-    eval_str = ckalloc(sizeof(char) * (RSTRING_LEN(str) + 1));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)eval_str); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-    memcpy(eval_str, RSTRING_PTR(str), RSTRING_LEN(str));</div><div class='del'>-    eval_str[RSTRING_LEN(str)] = 0;</div><div class='del'>-</div><div class='del'>-    /* allocate memory (freed by Tcl_ServiceEvent) */</div><div class='del'>-    /* evq = (struct eval_queue *)Tcl_Alloc(sizeof(struct eval_queue)); */</div><div class='del'>-    evq = (struct eval_queue *)ckalloc(sizeof(struct eval_queue));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve(evq);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* allocate result obj */</div><div class='del'>-    result = rb_ary_new3(1, Qnil);</div><div class='del'>-</div><div class='del'>-    /* construct event data */</div><div class='del'>-    evq-&gt;done = alloc_done;</div><div class='del'>-    evq-&gt;str = eval_str;</div><div class='del'>-    evq-&gt;len = RSTRING_LEN(str);</div><div class='del'>-    evq-&gt;interp = ip_obj;</div><div class='del'>-    evq-&gt;result = result;</div><div class='del'>-    evq-&gt;thread = current;</div><div class='del'>-    evq-&gt;safe_level = rb_safe_level();</div><div class='del'>-    evq-&gt;ev.proc = eval_queue_handler;</div><div class='del'>-</div><div class='del'>-    position = TCL_QUEUE_TAIL;</div><div class='del'>-</div><div class='del'>-    /* add the handler to Tcl event queue */</div><div class='del'>-    DUMP1("add handler");</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    if (ptr-&gt;tk_thread_id) {</div><div class='del'>-      /* Tcl_ThreadQueueEvent(ptr-&gt;tk_thread_id, &amp;(evq-&gt;ev), position); */</div><div class='del'>-      Tcl_ThreadQueueEvent(ptr-&gt;tk_thread_id, (Tcl_Event*)evq, position);</div><div class='del'>-      Tcl_ThreadAlert(ptr-&gt;tk_thread_id);</div><div class='del'>-    } else if (tk_eventloop_thread_id) {</div><div class='del'>-      Tcl_ThreadQueueEvent(tk_eventloop_thread_id, (Tcl_Event*)evq, position);</div><div class='del'>-      /* Tcl_ThreadQueueEvent(tk_eventloop_thread_id, </div><div class='del'>-			   &amp;(evq-&gt;ev), position); */</div><div class='del'>-      Tcl_ThreadAlert(tk_eventloop_thread_id);</div><div class='del'>-    } else {</div><div class='del'>-      /* Tcl_QueueEvent(&amp;(evq-&gt;ev), position); */</div><div class='del'>-      Tcl_QueueEvent((Tcl_Event*)evq, position);</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    /* Tcl_QueueEvent(&amp;(evq-&gt;ev), position); */</div><div class='del'>-    Tcl_QueueEvent((Tcl_Event*)evq, position);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* wait for the handler to be processed */</div><div class='del'>-    DUMP2("wait for handler (current thread:%lx)", current);</div><div class='del'>-    while(*alloc_done &gt;= 0) {</div><div class='del'>-      DUMP2("*** wait for handler (current thread:%lx)", current);</div><div class='del'>-      /* rb_thread_stop(); */</div><div class='del'>-      rb_thread_sleep_forever();</div><div class='del'>-      DUMP2("*** wakeup (current thread:%lx)", current);</div><div class='del'>-    }</div><div class='del'>-    DUMP2("back from handler (current thread:%lx)", current);</div><div class='del'>-</div><div class='del'>-    /* get result &amp; free allocated memory */</div><div class='del'>-    ret = RARRAY_PTR(result)[0];</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)alloc_done, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)alloc_done); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    /* free(alloc_done); */</div><div class='del'>-    ckfree((char*)alloc_done);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)eval_str, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)eval_str); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    /* free(eval_str); */</div><div class='del'>-    ckfree(eval_str);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#if 0 /* evq is freed by Tcl_ServiceEvent */</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release(evq);</div><div class='del'>-#else</div><div class='del'>-    ckfree((char*)evq);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (rb_obj_is_kind_of(ret, rb_eException)) {</div><div class='del'>-        DUMP1("raise exception");</div><div class='del'>-        /* rb_exc_raise(ret); */</div><div class='del'>-	rb_exc_raise(rb_exc_new3(rb_obj_class(ret), </div><div class='del'>-				 rb_funcall(ret, ID_to_s, 0, 0)));</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'>-/* restart Tk */</div><div class='del'>-static VALUE</div><div class='del'>-lib_restart_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int   argc;   /* dummy */</div><div class='del'>-    VALUE *argv;  /* dummy */</div><div class='del'>-{</div><div class='del'>-    volatile VALUE exc;</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* rb_secure(4); */ /* already checked */</div><div class='del'>-</div><div class='del'>-    /* tcl_stubs_check(); */ /* already checked */</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return rb_exc_new2(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /* Tcl_Preserve(ptr-&gt;ip); */</div><div class='del'>-    rbtk_preserve_ip(ptr);</div><div class='del'>-</div><div class='del'>-    /* destroy the root wdiget */</div><div class='del'>-    ptr-&gt;return_value = Tcl_Eval(ptr-&gt;ip, "destroy .");</div><div class='del'>-    /* ignore ERROR */</div><div class='del'>-    DUMP2("(TCL_Eval result) %d", ptr-&gt;return_value);</div><div class='del'>-    Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    /* delete namespace ( tested on tk8.4.5 ) */</div><div class='del'>-    ptr-&gt;return_value = Tcl_Eval(ptr-&gt;ip, "namespace delete ::tk::msgcat");</div><div class='del'>-    /* ignore ERROR */</div><div class='del'>-    DUMP2("(TCL_Eval result) %d", ptr-&gt;return_value);</div><div class='del'>-    Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* delete trace proc ( tested on tk8.4.5 ) */</div><div class='del'>-    ptr-&gt;return_value = Tcl_Eval(ptr-&gt;ip, "trace vdelete ::tk_strictMotif w ::tk::EventMotifBindings");</div><div class='del'>-    /* ignore ERROR */</div><div class='del'>-    DUMP2("(TCL_Eval result) %d", ptr-&gt;return_value);</div><div class='del'>-    Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-    /* execute Tk_Init or Tk_SafeInit */</div><div class='del'>-    exc = tcltkip_init_tk(interp);</div><div class='del'>-    if (!NIL_P(exc)) {</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-        rbtk_release_ip(ptr);</div><div class='del'>-        return exc;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-    rbtk_release_ip(ptr);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* return Qnil; */</div><div class='del'>-    return interp;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_restart(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return tk_funcall(lib_restart_core, 0, (VALUE*)NULL, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_restart(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "interpreter is deleted");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (Tcl_GetMaster(ptr-&gt;ip) != (Tcl_Interp*)NULL) {</div><div class='del'>-        /* slave IP */</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return lib_restart(self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_toUTF8_core(ip_obj, src, encodename)</div><div class='del'>-    VALUE ip_obj;</div><div class='del'>-    VALUE src;</div><div class='del'>-    VALUE encodename;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE str = src;</div><div class='del'>-</div><div class='del'>-#ifdef TCL_UTF_MAX</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    Tcl_Encoding encoding;</div><div class='del'>-    Tcl_DString dstr;</div><div class='del'>-    int taint_flag = OBJ_TAINTED(str);</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-    char *buf;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    if (NIL_P(src)) {</div><div class='del'>-      return rb_str_new2("");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#ifdef TCL_UTF_MAX</div><div class='del'>-    if (NIL_P(ip_obj)) {</div><div class='del'>-        interp = (Tcl_Interp *)NULL;</div><div class='del'>-    } else {</div><div class='del'>-        ptr = get_ip(ip_obj);</div><div class='del'>-</div><div class='del'>-        /* ip is deleted? */</div><div class='del'>-        if (deleted_ip(ptr)) {</div><div class='del'>-            interp = (Tcl_Interp *)NULL;</div><div class='del'>-        } else {</div><div class='del'>-            interp = ptr-&gt;ip;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(encodename)) {</div><div class='del'>-        if (TYPE(str) == T_STRING) {</div><div class='del'>-            volatile VALUE enc;</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            enc = rb_funcall(rb_obj_encoding(str), ID_to_s, 0, 0);</div><div class='del'>-#else</div><div class='del'>-            enc = rb_attr_get(str, ID_at_enc);</div><div class='del'>-#endif</div><div class='del'>-            if (NIL_P(enc)) {</div><div class='del'>-                if (NIL_P(ip_obj)) {</div><div class='del'>-                    encoding = (Tcl_Encoding)NULL;</div><div class='del'>-                } else {</div><div class='del'>-                    enc = rb_attr_get(ip_obj, ID_at_enc);</div><div class='del'>-                    if (NIL_P(enc)) {</div><div class='del'>-                        encoding = (Tcl_Encoding)NULL;</div><div class='del'>-                    } else {</div><div class='del'>-                        /* StringValue(enc); */</div><div class='del'>-                        enc = rb_funcall(enc, ID_to_s, 0, 0);</div><div class='del'>-                        /* encoding = Tcl_GetEncoding(interp, RSTRING_PTR(enc)); */</div><div class='del'>-			if (!RSTRING_LEN(enc)) {</div><div class='del'>-			  encoding = (Tcl_Encoding)NULL;</div><div class='del'>-			} else {</div><div class='del'>-			  encoding = Tcl_GetEncoding((Tcl_Interp*)NULL, </div><div class='del'>-						     RSTRING_PTR(enc));</div><div class='del'>-			  if (encoding == (Tcl_Encoding)NULL) {</div><div class='del'>-                            rb_warning("Tk-interp has unknown encoding information (@encoding:'%s')", RSTRING_PTR(enc));</div><div class='del'>-			  }</div><div class='del'>-			}</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-            } else {</div><div class='del'>-                StringValue(enc);</div><div class='del'>-                if (strcmp(RSTRING_PTR(enc), "binary") == 0) {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-		    rb_enc_associate_index(str, ENCODING_INDEX_BINARY);</div><div class='del'>-#endif</div><div class='del'>-		    rb_ivar_set(str, ID_at_enc, ENCODING_NAME_BINARY);</div><div class='del'>-                    rb_thread_critical = thr_crit_bup;</div><div class='del'>-                    return str;</div><div class='del'>-                }</div><div class='del'>-                /* encoding = Tcl_GetEncoding(interp, RSTRING_PTR(enc)); */</div><div class='del'>-                encoding = Tcl_GetEncoding((Tcl_Interp*)NULL, </div><div class='del'>-					   RSTRING_PTR(enc));</div><div class='del'>-                if (encoding == (Tcl_Encoding)NULL) {</div><div class='del'>-                    rb_warning("string has unknown encoding information (@encoding:'%s')", RSTRING_PTR(enc));</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-        } else {</div><div class='del'>-            encoding = (Tcl_Encoding)NULL;</div><div class='del'>-        }</div><div class='del'>-    } else {</div><div class='del'>-        StringValue(encodename);</div><div class='del'>-	if (strcmp(RSTRING_PTR(encodename), "binary") == 0) {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-	  rb_enc_associate_index(str, ENCODING_INDEX_BINARY);</div><div class='del'>-#endif</div><div class='del'>-	  rb_ivar_set(str, ID_at_enc, ENCODING_NAME_BINARY);</div><div class='del'>-	  rb_thread_critical = thr_crit_bup;</div><div class='del'>-	  return str;</div><div class='del'>-	}</div><div class='del'>-        /* encoding = Tcl_GetEncoding(interp, RSTRING_PTR(encodename)); */</div><div class='del'>-        encoding = Tcl_GetEncoding((Tcl_Interp*)NULL, RSTRING_PTR(encodename));</div><div class='del'>-        if (encoding == (Tcl_Encoding)NULL) {</div><div class='del'>-            /*</div><div class='del'>-            rb_warning("unknown encoding name '%s'", </div><div class='del'>-                       RSTRING_PTR(encodename));</div><div class='del'>-            */</div><div class='del'>-            rb_raise(rb_eArgError, "unknown encoding name '%s'", </div><div class='del'>-                     RSTRING_PTR(encodename));</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    StringValue(str);</div><div class='del'>-    if (!RSTRING_LEN(str)) {</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-        return str;</div><div class='del'>-    }</div><div class='del'>-    buf = ALLOC_N(char, RSTRING_LEN(str)+1);</div><div class='del'>-    /* buf = ckalloc(sizeof(char) * (RSTRING_LEN(str)+1)); */</div><div class='del'>-    memcpy(buf, RSTRING_PTR(str), RSTRING_LEN(str));</div><div class='del'>-    buf[RSTRING_LEN(str)] = 0;</div><div class='del'>-</div><div class='del'>-    Tcl_DStringInit(&amp;dstr);</div><div class='del'>-    Tcl_DStringFree(&amp;dstr);</div><div class='del'>-    /* Tcl_ExternalToUtfDString(encoding,buf,strlen(buf),&amp;dstr); */</div><div class='del'>-    Tcl_ExternalToUtfDString(encoding, buf, RSTRING_LEN(str), &amp;dstr);</div><div class='del'>-</div><div class='del'>-    /* str = rb_tainted_str_new2(Tcl_DStringValue(&amp;dstr)); */</div><div class='del'>-    /* str = rb_str_new2(Tcl_DStringValue(&amp;dstr)); */</div><div class='del'>-    str = rb_str_new(Tcl_DStringValue(&amp;dstr), Tcl_DStringLength(&amp;dstr));</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    rb_enc_associate_index(str, ENCODING_INDEX_UTF8);</div><div class='del'>-#endif</div><div class='del'>-    rb_ivar_set(str, ID_at_enc, ENCODING_NAME_UTF8);</div><div class='del'>-    if (taint_flag) OBJ_TAINT(str);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-    if (encoding != (Tcl_Encoding)NULL) {</div><div class='del'>-        Tcl_FreeEncoding(encoding);</div><div class='del'>-    }</div><div class='del'>-    */</div><div class='del'>-    Tcl_DStringFree(&amp;dstr);</div><div class='del'>-</div><div class='del'>-    free(buf);</div><div class='del'>-    /* ckfree(buf); */</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-#endif</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'>-lib_toUTF8(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 str, encodename;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;str, &amp;encodename) == 1) {</div><div class='del'>-        encodename = Qnil;</div><div class='del'>-    }</div><div class='del'>-    return lib_toUTF8_core(Qnil, str, encodename);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_toUTF8(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 str, encodename;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;str, &amp;encodename) == 1) {</div><div class='del'>-        encodename = Qnil;</div><div class='del'>-    }</div><div class='del'>-    return lib_toUTF8_core(self, str, encodename);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_fromUTF8_core(ip_obj, src, encodename)</div><div class='del'>-    VALUE ip_obj;</div><div class='del'>-    VALUE src;</div><div class='del'>-    VALUE encodename;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE str = src;</div><div class='del'>-</div><div class='del'>-#ifdef TCL_UTF_MAX</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    Tcl_Encoding encoding;</div><div class='del'>-    Tcl_DString dstr;</div><div class='del'>-    int taint_flag = OBJ_TAINTED(str);</div><div class='del'>-    char *buf;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    if (NIL_P(src)) {</div><div class='del'>-      return rb_str_new2("");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#ifdef TCL_UTF_MAX</div><div class='del'>-    if (NIL_P(ip_obj)) {</div><div class='del'>-        interp = (Tcl_Interp *)NULL;</div><div class='del'>-    } else if (get_ip(ip_obj) == (struct tcltkip *)NULL) {</div><div class='del'>-        interp = (Tcl_Interp *)NULL;</div><div class='del'>-    } else {</div><div class='del'>-        interp = get_ip(ip_obj)-&gt;ip;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(encodename)) {</div><div class='del'>-        volatile VALUE enc;</div><div class='del'>-</div><div class='del'>-        if (TYPE(str) == T_STRING) {</div><div class='del'>-            enc = rb_attr_get(str, ID_at_enc);</div><div class='del'>-            if (!NIL_P(enc)) {</div><div class='del'>-                StringValue(enc);</div><div class='del'>-                if (strcmp(RSTRING_PTR(enc), "binary") == 0) {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-		    rb_enc_associate_index(str, ENCODING_INDEX_BINARY);</div><div class='del'>-#endif</div><div class='del'>-		    rb_ivar_set(str, ID_at_enc, ENCODING_NAME_BINARY);</div><div class='del'>-                    rb_thread_critical = thr_crit_bup;</div><div class='del'>-                    return str;</div><div class='del'>-                }</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-	    } else if (rb_enc_get_index(str) == ENCODING_INDEX_BINARY) {</div><div class='del'>-	        rb_enc_associate_index(str, ENCODING_INDEX_BINARY);</div><div class='del'>-		rb_ivar_set(str, ID_at_enc, ENCODING_NAME_BINARY);</div><div class='del'>-		rb_thread_critical = thr_crit_bup;</div><div class='del'>-		return str;</div><div class='del'>-#endif</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (NIL_P(ip_obj)) {</div><div class='del'>-            encoding = (Tcl_Encoding)NULL;</div><div class='del'>-        } else {</div><div class='del'>-            enc = rb_attr_get(ip_obj, ID_at_enc);</div><div class='del'>-            if (NIL_P(enc)) {</div><div class='del'>-                encoding = (Tcl_Encoding)NULL;</div><div class='del'>-            } else {</div><div class='del'>-                /* StringValue(enc); */</div><div class='del'>-                enc = rb_funcall(enc, ID_to_s, 0, 0);</div><div class='del'>-                /* encoding = Tcl_GetEncoding(interp, RSTRING_PTR(enc)); */</div><div class='del'>-		if (!RSTRING_LEN(enc)) {</div><div class='del'>-		  encoding = (Tcl_Encoding)NULL;</div><div class='del'>-		} else {</div><div class='del'>-		  encoding = Tcl_GetEncoding((Tcl_Interp*)NULL, </div><div class='del'>-					     RSTRING_PTR(enc));</div><div class='del'>-		  if (encoding == (Tcl_Encoding)NULL) {</div><div class='del'>-                    rb_warning("Tk-interp has unknown encoding information (@encoding:'%s')", RSTRING_PTR(enc));</div><div class='del'>-		  } else {</div><div class='del'>-		    encodename = rb_obj_dup(enc);</div><div class='del'>-		  }</div><div class='del'>-		}</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    } else {</div><div class='del'>-        StringValue(encodename);</div><div class='del'>-</div><div class='del'>-        if (strcmp(RSTRING_PTR(encodename), "binary") == 0) {</div><div class='del'>-	    Tcl_Obj *tclstr;</div><div class='del'>-            char *s;</div><div class='del'>-            int  len;</div><div class='del'>-</div><div class='del'>-            StringValue(str);</div><div class='del'>-            tclstr = Tcl_NewStringObj(RSTRING_PTR(str), RSTRING_LEN(str));</div><div class='del'>-	    Tcl_IncrRefCount(tclstr);</div><div class='del'>-            s = Tcl_GetByteArrayFromObj(tclstr, &amp;len);</div><div class='del'>-            str = rb_tainted_str_new(s, len);</div><div class='del'>-	    s = (char*)NULL;</div><div class='del'>-	    Tcl_DecrRefCount(tclstr);</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-	    rb_enc_associate_index(str, ENCODING_INDEX_BINARY);</div><div class='del'>-#endif</div><div class='del'>-            rb_ivar_set(str, ID_at_enc, ENCODING_NAME_BINARY);</div><div class='del'>-</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return str;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* encoding = Tcl_GetEncoding(interp, RSTRING_PTR(encodename)); */</div><div class='del'>-        encoding = Tcl_GetEncoding((Tcl_Interp*)NULL, RSTRING_PTR(encodename));</div><div class='del'>-        if (encoding == (Tcl_Encoding)NULL) {</div><div class='del'>-            /* </div><div class='del'>-            rb_warning("unknown encoding name '%s'", </div><div class='del'>-                       RSTRING_PTR(encodename));</div><div class='del'>-            encodename = Qnil;</div><div class='del'>-            */</div><div class='del'>-            rb_raise(rb_eArgError, "unknown encoding name '%s'", </div><div class='del'>-                     RSTRING_PTR(encodename));</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    StringValue(str);</div><div class='del'>-</div><div class='del'>-    if (RSTRING_LEN(str) == 0) {</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-        return rb_tainted_str_new2("");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    buf = ALLOC_N(char, RSTRING_LEN(str)+1);</div><div class='del'>-    /* buf = ckalloc(sizeof(char) * (RSTRING_LEN(str)+1)); */</div><div class='del'>-    memcpy(buf, RSTRING_PTR(str), RSTRING_LEN(str));</div><div class='del'>-    buf[RSTRING_LEN(str)] = 0;</div><div class='del'>-</div><div class='del'>-    Tcl_DStringInit(&amp;dstr);</div><div class='del'>-    Tcl_DStringFree(&amp;dstr);</div><div class='del'>-    /* Tcl_UtfToExternalDString(encoding,buf,strlen(buf),&amp;dstr); */</div><div class='del'>-    Tcl_UtfToExternalDString(encoding,buf,RSTRING_LEN(str),&amp;dstr);</div><div class='del'>-</div><div class='del'>-    /* str = rb_tainted_str_new2(Tcl_DStringValue(&amp;dstr)); */</div><div class='del'>-    /* str = rb_str_new2(Tcl_DStringValue(&amp;dstr)); */</div><div class='del'>-    str = rb_str_new(Tcl_DStringValue(&amp;dstr), Tcl_DStringLength(&amp;dstr));</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    if (interp) {</div><div class='del'>-      /* can access encoding_table of TclTkIp */</div><div class='del'>-      /*   -&gt;  try to use encoding_table      */</div><div class='del'>-      VALUE tbl = ip_get_encoding_table(ip_obj);</div><div class='del'>-      VALUE encobj = encoding_table_get_obj(tbl, encodename);</div><div class='del'>-      rb_enc_associate_index(str, rb_to_encoding_index(encobj));</div><div class='del'>-    } else {</div><div class='del'>-      /* cannot access encoding_table of TclTkIp */</div><div class='del'>-      /*   -&gt;  try to find on Ruby Encoding      */</div><div class='del'>-      rb_enc_associate_index(str, rb_enc_find_index(RSTRING_PTR(encodename)));</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    rb_ivar_set(str, ID_at_enc, encodename);</div><div class='del'>-</div><div class='del'>-    if (taint_flag) OBJ_TAINT(str);</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-    if (encoding != (Tcl_Encoding)NULL) {</div><div class='del'>-        Tcl_FreeEncoding(encoding);</div><div class='del'>-    }</div><div class='del'>-    */</div><div class='del'>-    Tcl_DStringFree(&amp;dstr);</div><div class='del'>-</div><div class='del'>-    free(buf);</div><div class='del'>-    /* ckfree(buf); */</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-#endif</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'>-lib_fromUTF8(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 str, encodename;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;str, &amp;encodename) == 1) {</div><div class='del'>-        encodename = Qnil;</div><div class='del'>-    }</div><div class='del'>-    return lib_fromUTF8_core(Qnil, str, encodename);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_fromUTF8(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 str, encodename;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;str, &amp;encodename) == 1) {</div><div class='del'>-        encodename = Qnil;</div><div class='del'>-    }</div><div class='del'>-    return lib_fromUTF8_core(self, str, encodename);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_UTF_backslash_core(self, str, all_bs)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE str;</div><div class='del'>-    int all_bs;</div><div class='del'>-{</div><div class='del'>-#ifdef TCL_UTF_MAX</div><div class='del'>-    char *src_buf, *dst_buf, *ptr;</div><div class='del'>-    int read_len = 0, dst_len = 0;</div><div class='del'>-    int taint_flag = OBJ_TAINTED(str);</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    StringValue(str);</div><div class='del'>-    if (!RSTRING_LEN(str)) {</div><div class='del'>-        return str;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /* src_buf = ALLOC_N(char, RSTRING_LEN(str)+1); */</div><div class='del'>-    src_buf = ckalloc(sizeof(char) * (RSTRING_LEN(str)+1));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)src_buf); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-    memcpy(src_buf, RSTRING_PTR(str), RSTRING_LEN(str));</div><div class='del'>-    src_buf[RSTRING_LEN(str)] = 0;</div><div class='del'>-</div><div class='del'>-    /* dst_buf = ALLOC_N(char, RSTRING_LEN(str)+1); */</div><div class='del'>-    dst_buf = ckalloc(sizeof(char) * (RSTRING_LEN(str)+1));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)dst_buf); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    ptr = src_buf;</div><div class='del'>-    while(RSTRING_LEN(str) &gt; ptr - src_buf) {</div><div class='del'>-        if (*ptr == '\\' &amp;&amp; (all_bs || *(ptr + 1) == 'u')) {</div><div class='del'>-            dst_len += Tcl_UtfBackslash(ptr, &amp;read_len, (dst_buf + dst_len));</div><div class='del'>-            ptr += read_len;</div><div class='del'>-        } else {</div><div class='del'>-            *(dst_buf + (dst_len++)) = *(ptr++);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    str = rb_str_new(dst_buf, dst_len);</div><div class='del'>-    if (taint_flag) OBJ_TAINT(str);</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    rb_enc_associate_index(str, ENCODING_INDEX_UTF8);</div><div class='del'>-#endif</div><div class='del'>-    rb_ivar_set(str, ID_at_enc, ENCODING_NAME_UTF8);</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)src_buf, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)src_buf); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    /* free(src_buf); */</div><div class='del'>-    ckfree(src_buf);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)dst_buf, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)dst_buf); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    /* free(dst_buf); */</div><div class='del'>-    ckfree(dst_buf);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-#endif</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'>-lib_UTF_backslash(self, str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    return lib_UTF_backslash_core(self, str, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_Tcl_backslash(self, str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    return lib_UTF_backslash_core(self, str, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_get_system_encoding(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt; 0)</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-    return rb_str_new2(Tcl_GetEncodingName((Tcl_Encoding)NULL));</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'>-lib_set_system_encoding(self, enc_name)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE enc_name;</div><div class='del'>-{</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt; 0)</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    if (NIL_P(enc_name)) {</div><div class='del'>-        Tcl_SetSystemEncoding((Tcl_Interp *)NULL, (CONST char *)NULL);</div><div class='del'>-        return lib_get_system_encoding(self);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    enc_name = rb_funcall(enc_name, ID_to_s, 0, 0);</div><div class='del'>-    if (Tcl_SetSystemEncoding((Tcl_Interp *)NULL, </div><div class='del'>-                              StringValuePtr(enc_name)) != TCL_OK) {</div><div class='del'>-        rb_raise(rb_eArgError, "unknown encoding name '%s'", </div><div class='del'>-                 RSTRING_PTR(enc_name));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return enc_name;</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'>-</div><div class='del'>-/* invoke Tcl proc */</div><div class='del'>-struct invoke_info {</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-    Tcl_CmdInfo cmdinfo;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj **objv;</div><div class='del'>-#else</div><div class='del'>-    int argc;</div><div class='del'>-    char **argv;</div><div class='del'>-#endif</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-invoke_tcl_proc(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct invoke_info *inf = (struct invoke_info *)arg;</div><div class='del'>-    int i, len;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    int argc = inf-&gt;objc;</div><div class='del'>-    char **argv = (char **)NULL;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* memory allocation for arguments of this command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    if (!inf-&gt;cmdinfo.isNativeObjectProc) {</div><div class='del'>-        /* string interface */</div><div class='del'>-        /* argv = (char **)ALLOC_N(char *, argc+1);*/ /* XXXXXXXXXX */</div><div class='del'>-        argv = (char **)ckalloc(sizeof(char *)*(argc+1));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Preserve((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-        for (i = 0; i &lt; argc; ++i) {</div><div class='del'>-            argv[i] = Tcl_GetStringFromObj(inf-&gt;objv[i], &amp;len);</div><div class='del'>-        }</div><div class='del'>-        argv[argc] = (char *)NULL;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(inf-&gt;ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-    /* Invoke the C procedure */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    if (inf-&gt;cmdinfo.isNativeObjectProc) {</div><div class='del'>-        inf-&gt;ptr-&gt;return_value </div><div class='del'>-            = (*(inf-&gt;cmdinfo.objProc))(inf-&gt;cmdinfo.objClientData, </div><div class='del'>-                                        inf-&gt;ptr-&gt;ip, inf-&gt;objc, inf-&gt;objv);</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-#endif</div><div class='del'>-    {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        inf-&gt;ptr-&gt;return_value </div><div class='del'>-            = (*(inf-&gt;cmdinfo.proc))(inf-&gt;cmdinfo.clientData, inf-&gt;ptr-&gt;ip, </div><div class='del'>-                                     argc, (CONST84 char **)argv);</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)argv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Release((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-        /* free(argv); */</div><div class='del'>-        ckfree((char*)argv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        inf-&gt;ptr-&gt;return_value </div><div class='del'>-            = (*(inf-&gt;cmdinfo.proc))(inf-&gt;cmdinfo.clientData, inf-&gt;ptr-&gt;ip, </div><div class='del'>-                                     inf-&gt;argc, inf-&gt;argv);</div><div class='del'>-#endif</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'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static VALUE</div><div class='del'>-ip_invoke_core(interp, objc, objv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int objc;</div><div class='del'>-    Tcl_Obj **objv;</div><div class='del'>-#else</div><div class='del'>-static VALUE</div><div class='del'>-ip_invoke_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int argc;</div><div class='del'>-    char **argv;</div><div class='del'>-#endif</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-    Tcl_CmdInfo info;</div><div class='del'>-    char *cmd;</div><div class='del'>-    int  len;</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    int unknown_flag = 0;</div><div class='del'>-</div><div class='del'>-#if 1 /* wrap tcl-proc call */</div><div class='del'>-    struct invoke_info inf;</div><div class='del'>-    int status;</div><div class='del'>-    VALUE ret;</div><div class='del'>-#else</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    int argc = objc;</div><div class='del'>-    char **argv = (char **)NULL;</div><div class='del'>-    /* Tcl_Obj *resultPtr; */</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* get the data struct */</div><div class='del'>-    ptr = get_ip(interp);</div><div class='del'>-</div><div class='del'>-    /* get the command name string */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    cmd = Tcl_GetStringFromObj(objv[0], &amp;len);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    cmd = argv[0];</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* get the data struct */</div><div class='del'>-    ptr = get_ip(interp);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return rb_tainted_str_new2("");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Tcl_Preserve(ptr-&gt;ip); */</div><div class='del'>-    rbtk_preserve_ip(ptr);</div><div class='del'>-</div><div class='del'>-    /* map from the command name to a C procedure */</div><div class='del'>-    DUMP2("call Tcl_GetCommandInfo, %s", cmd);</div><div class='del'>-    if (!Tcl_GetCommandInfo(ptr-&gt;ip, cmd, &amp;info)) {</div><div class='del'>-        DUMP1("error Tcl_GetCommandInfo");</div><div class='del'>-        DUMP1("try auto_load (call 'unknown' command)");</div><div class='del'>-        if (!Tcl_GetCommandInfo(ptr-&gt;ip, </div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-                                "::unknown", </div><div class='del'>-#else</div><div class='del'>-                                "unknown", </div><div class='del'>-#endif</div><div class='del'>-                                &amp;info)) {</div><div class='del'>-            DUMP1("fail to get 'unknown' command");</div><div class='del'>-            /* if (event_loop_abort_on_exc || cmd[0] != '.') { */</div><div class='del'>-            if (event_loop_abort_on_exc &gt; 0) {</div><div class='del'>-                /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-                rbtk_release_ip(ptr);</div><div class='del'>-                /*rb_ip_raise(obj,rb_eNameError,"invalid command name `%s'",cmd);*/</div><div class='del'>-                return create_ip_exc(interp, rb_eNameError, </div><div class='del'>-                                     "invalid command name `%s'", cmd);</div><div class='del'>-            } else {</div><div class='del'>-                if (event_loop_abort_on_exc &lt; 0) {</div><div class='del'>-                    rb_warning("invalid command name `%s' (ignore)", cmd);</div><div class='del'>-                } else {</div><div class='del'>-                    rb_warn("invalid command name `%s' (ignore)", cmd);</div><div class='del'>-                }</div><div class='del'>-                Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-                /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-                rbtk_release_ip(ptr);</div><div class='del'>-                return rb_tainted_str_new2("");</div><div class='del'>-            }</div><div class='del'>-        } else {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            Tcl_Obj **unknown_objv;</div><div class='del'>-#else</div><div class='del'>-            char **unknown_argv;</div><div class='del'>-#endif</div><div class='del'>-            DUMP1("find 'unknown' command -&gt; set arguemnts");</div><div class='del'>-            unknown_flag = 1;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-            /* unknown_objv = (Tcl_Obj **)ALLOC_N(Tcl_Obj *, objc+2); */</div><div class='del'>-            unknown_objv = (Tcl_Obj **)ckalloc(sizeof(Tcl_Obj *) * (objc+2));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	    Tcl_Preserve((ClientData)unknown_objv); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-            unknown_objv[0] = Tcl_NewStringObj("::unknown", 9);</div><div class='del'>-            Tcl_IncrRefCount(unknown_objv[0]);</div><div class='del'>-            memcpy(unknown_objv + 1, objv, sizeof(Tcl_Obj *)*objc);</div><div class='del'>-            unknown_objv[++objc] = (Tcl_Obj*)NULL;</div><div class='del'>-            objv = unknown_objv;</div><div class='del'>-#else</div><div class='del'>-            /* unknown_argv = (char **)ALLOC_N(char *, argc+2); */</div><div class='del'>-            unknown_argv = (char **)ckalloc(sizeof(char *) * (argc+2));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	    Tcl_Preserve((ClientData)unknown_argv); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-            unknown_argv[0] = strdup("unknown");</div><div class='del'>-            memcpy(unknown_argv + 1, argv, sizeof(char *)*argc);</div><div class='del'>-            unknown_argv[++argc] = (char *)NULL;</div><div class='del'>-            argv = unknown_argv;</div><div class='del'>-#endif</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    DUMP1("end Tcl_GetCommandInfo");</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-#if 1 /* wrap tcl-proc call */</div><div class='del'>-    /* setup params */</div><div class='del'>-    inf.ptr = ptr;</div><div class='del'>-    inf.cmdinfo = info;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    inf.objc = objc;</div><div class='del'>-    inf.objv = objv;</div><div class='del'>-#else</div><div class='del'>-    inf.argc = argc;</div><div class='del'>-    inf.argv = argv;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* invoke tcl-proc */</div><div class='del'>-    ret = rb_protect(invoke_tcl_proc, (VALUE)&amp;inf, &amp;status);</div><div class='del'>-    switch(status) {</div><div class='del'>-    case TAG_RAISE:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-        if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-        if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-            rbtk_pending_exception = rb_exc_new2(rb_eException, </div><div class='del'>-                                                 "unknown exception");</div><div class='del'>-        } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-            rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-        </div><div class='del'>-    case TAG_FATAL:</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-        if (NIL_P(rb_errinfo())) {</div><div class='del'>-#else</div><div class='del'>-        if (NIL_P(ruby_errinfo)) {</div><div class='del'>-#endif</div><div class='del'>-            rbtk_pending_exception = rb_exc_new2(rb_eFatal, "FATAL");</div><div class='del'>-        } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            rbtk_pending_exception = rb_errinfo();</div><div class='del'>-#else</div><div class='del'>-            rbtk_pending_exception = ruby_errinfo;</div><div class='del'>-#endif</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#else /* !wrap tcl-proc call */</div><div class='del'>-</div><div class='del'>-    /* memory allocation for arguments of this command */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    if (!info.isNativeObjectProc) {</div><div class='del'>-        int i;</div><div class='del'>-</div><div class='del'>-        /* string interface */</div><div class='del'>-        /* argv = (char **)ALLOC_N(char *, argc+1); */</div><div class='del'>-        argv = (char **)ckalloc(sizeof(char *) * (argc+1));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Preserve((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-        for (i = 0; i &lt; argc; ++i) {</div><div class='del'>-            argv[i] = Tcl_GetStringFromObj(objv[i], &amp;len);</div><div class='del'>-        }</div><div class='del'>-        argv[argc] = (char *)NULL;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-</div><div class='del'>-    /* Invoke the C procedure */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    if (info.isNativeObjectProc) {</div><div class='del'>-        ptr-&gt;return_value = (*info.objProc)(info.objClientData, ptr-&gt;ip, </div><div class='del'>-                                            objc, objv);</div><div class='del'>-#if 0</div><div class='del'>-        /* get the string value from the result object */</div><div class='del'>-        resultPtr = Tcl_GetObjResult(ptr-&gt;ip);</div><div class='del'>-        Tcl_SetResult(ptr-&gt;ip, Tcl_GetStringFromObj(resultPtr, &amp;len),</div><div class='del'>-                      TCL_VOLATILE);</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-#endif</div><div class='del'>-    {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        ptr-&gt;return_value = (*info.proc)(info.clientData, ptr-&gt;ip, </div><div class='del'>-                                         argc, (CONST84 char **)argv);</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)argv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Release((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-        /* free(argv); */</div><div class='del'>-        ckfree((char*)argv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        ptr-&gt;return_value = (*info.proc)(info.clientData, ptr-&gt;ip, </div><div class='del'>-                                         argc, argv);</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-#endif /* ! wrap tcl-proc call */</div><div class='del'>-</div><div class='del'>-    /* free allocated memory for calling 'unknown' command */</div><div class='del'>-    if (unknown_flag) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(objv[0]);</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	Tcl_EventuallyFree((ClientData)objv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Release((ClientData)objv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-        /* free(objv); */</div><div class='del'>-        ckfree((char*)objv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        free(argv[0]);</div><div class='del'>-        /* ckfree(argv[0]); */</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-	Tcl_EventuallyFree((ClientData)argv, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-	Tcl_Release((ClientData)argv); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-        /* free(argv); */</div><div class='del'>-        ckfree((char*)argv);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* exception on mainloop */</div><div class='del'>-    if (pending_exception_check1(thr_crit_bup, ptr)) {</div><div class='del'>-        return rbtk_pending_exception;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    if (ptr-&gt;return_value == TCL_ERROR) {</div><div class='del'>-        if (event_loop_abort_on_exc &gt; 0 &amp;&amp; !Tcl_InterpDeleted(ptr-&gt;ip)) {</div><div class='del'>-</div><div class='del'>-            return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                 "%s", Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-        } else {</div><div class='del'>-            if (event_loop_abort_on_exc &lt; 0) {</div><div class='del'>-                rb_warning("%s (ignore)", Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-            } else {</div><div class='del'>-                rb_warn("%s (ignore)", Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-            }</div><div class='del'>-            Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-            return rb_tainted_str_new2("");</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* pass back the result (as string) */</div><div class='del'>-    return ip_get_result_string_obj(ptr-&gt;ip);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-static Tcl_Obj **</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-static char **</div><div class='del'>-#endif</div><div class='del'>-alloc_invoke_arguments(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_Obj **av;</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    char **av;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /* memory allocation */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    /* av = ALLOC_N(Tcl_Obj *, argc+1);*/ /* XXXXXXXXXX */</div><div class='del'>-    av = (Tcl_Obj**)ckalloc(sizeof(Tcl_Obj *)*(argc+1));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)av); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-    for (i = 0; i &lt; argc; ++i) {</div><div class='del'>-        av[i] = get_obj_from_str(argv[i]);</div><div class='del'>-        Tcl_IncrRefCount(av[i]);</div><div class='del'>-    }</div><div class='del'>-    av[argc] = NULL;</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    /* string interface */</div><div class='del'>-    /* av = ALLOC_N(char *, argc+1); */</div><div class='del'>-    av = (char**)ckalloc(sizeof(char *) * (argc+1));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)av); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-    for (i = 0; i &lt; argc; ++i) {</div><div class='del'>-        av[i] = strdup(StringValuePtr(argv[i]));</div><div class='del'>-    }</div><div class='del'>-    av[argc] = NULL;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    return av;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-free_invoke_arguments(argc, av)</div><div class='del'>-    int argc;</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_Obj **av;</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    char **av;</div><div class='del'>-#endif</div><div class='del'>-{</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'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        Tcl_DecrRefCount(av[i]);</div><div class='del'>-	av[i] = (Tcl_Obj*)NULL;</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        free(av[i]);</div><div class='del'>-	av[i] = (char*)NULL;</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)av, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)av); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    ckfree((char*)av);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)av, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)av); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    /* free(av); */</div><div class='del'>-    ckfree((char*)av);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_invoke_real(argc, argv, interp)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE interp;</div><div class='del'>-{</div><div class='del'>-    VALUE v;</div><div class='del'>-    struct tcltkip *ptr;        /* tcltkip data struct */</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_Obj **av = (Tcl_Obj **)NULL;</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    char **av = (char **)NULL;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    DUMP2("invoke_real called by thread:%lx", rb_thread_current());</div><div class='del'>-</div><div class='del'>-    /* get the data struct */</div><div class='del'>-    ptr = get_ip(interp);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return rb_tainted_str_new2("");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* allocate memory for arguments */</div><div class='del'>-    av = alloc_invoke_arguments(argc, argv);</div><div class='del'>-</div><div class='del'>-    /* Invoke the C procedure */</div><div class='del'>-    Tcl_ResetResult(ptr-&gt;ip);</div><div class='del'>-    v = ip_invoke_core(interp, argc, av);</div><div class='del'>-</div><div class='del'>-    /* free allocated memory */</div><div class='del'>-    free_invoke_arguments(argc, av);</div><div class='del'>-</div><div class='del'>-    return v;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-ivq_safelevel_handler(arg, ivq)</div><div class='del'>-    VALUE arg;</div><div class='del'>-    VALUE ivq;</div><div class='del'>-{</div><div class='del'>-    struct invoke_queue *q;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(ivq, struct invoke_queue, q);</div><div class='del'>-    DUMP2("(safe-level handler) $SAFE = %d", q-&gt;safe_level);</div><div class='del'>-    rb_set_safe_level(q-&gt;safe_level);</div><div class='del'>-    return ip_invoke_core(q-&gt;interp, q-&gt;argc, q-&gt;argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int invoke_queue_handler _((Tcl_Event *, int));</div><div class='del'>-int</div><div class='del'>-invoke_queue_handler(evPtr, flags)</div><div class='del'>-    Tcl_Event *evPtr;</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-    struct invoke_queue *q = (struct invoke_queue *)evPtr;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    volatile VALUE q_dat;</div><div class='del'>-    volatile VALUE thread = q-&gt;thread;</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-</div><div class='del'>-    DUMP2("do_invoke_queue_handler : evPtr = %p", evPtr);</div><div class='del'>-    DUMP2("invoke queue_thread : %lx", rb_thread_current());</div><div class='del'>-    DUMP2("added by thread : %lx", thread);</div><div class='del'>-</div><div class='del'>-    if (*(q-&gt;done)) {</div><div class='del'>-        DUMP1("processed by another event-loop");</div><div class='del'>-        return 0;</div><div class='del'>-    } else {</div><div class='del'>-        DUMP1("process it on current event-loop");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RTEST(rb_thread_alive_p(thread)) </div><div class='del'>-	&amp;&amp; ! RTEST(rb_funcall(thread, ID_stop_p, 0))) {</div><div class='del'>-      DUMP1("caller is not yet ready to receive the result -&gt; pending");</div><div class='del'>-      return 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* process it */</div><div class='del'>-    *(q-&gt;done) = 1;</div><div class='del'>-</div><div class='del'>-    /* deleted ipterp ? */</div><div class='del'>-    ptr = get_ip(q-&gt;interp);</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        /* deleted IP --&gt; ignore */</div><div class='del'>-        return 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* incr internal handler mark */</div><div class='del'>-    rbtk_internal_eventloop_handler++;</div><div class='del'>-</div><div class='del'>-    /* check safe-level */</div><div class='del'>-    if (rb_safe_level() != q-&gt;safe_level) {</div><div class='del'>-        /* q_dat = Data_Wrap_Struct(rb_cData,0,0,q); */</div><div class='del'>-        q_dat = Data_Wrap_Struct(rb_cData,invoke_queue_mark,-1,q);</div><div class='del'>-        ret = rb_funcall(rb_proc_new(ivq_safelevel_handler, q_dat), </div><div class='del'>-                         ID_call, 0);</div><div class='del'>-        rb_gc_force_recycle(q_dat);</div><div class='del'>-	q_dat = (VALUE)NULL;</div><div class='del'>-    } else {</div><div class='del'>-        DUMP2("call invoke_real (for caller thread:%lx)", thread);</div><div class='del'>-        DUMP2("call invoke_real (current thread:%lx)", rb_thread_current());</div><div class='del'>-        ret = ip_invoke_core(q-&gt;interp, q-&gt;argc, q-&gt;argv);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* set result */</div><div class='del'>-    RARRAY_PTR(q-&gt;result)[0] = ret;</div><div class='del'>-    ret = (VALUE)NULL;</div><div class='del'>-</div><div class='del'>-    /* decr internal handler mark */</div><div class='del'>-    rbtk_internal_eventloop_handler--;</div><div class='del'>-</div><div class='del'>-    /* complete */</div><div class='del'>-    *(q-&gt;done) = -1;</div><div class='del'>-</div><div class='del'>-    /* unlink ruby objects */</div><div class='del'>-    q-&gt;interp = (VALUE)NULL;</div><div class='del'>-    q-&gt;result = (VALUE)NULL;</div><div class='del'>-    q-&gt;thread = (VALUE)NULL;</div><div class='del'>-</div><div class='del'>-    /* back to caller */</div><div class='del'>-    /* if (RTEST(rb_funcall(thread, ID_alive_p, 0, 0))) { */</div><div class='del'>-    if (RTEST(rb_thread_alive_p(thread))) {</div><div class='del'>-      DUMP2("back to caller (caller thread:%lx)", thread);</div><div class='del'>-      DUMP2("               (current thread:%lx)", rb_thread_current());</div><div class='del'>-#if CONTROL_BY_STATUS_OF_RB_THREAD_WAITING_FOR_VALUE</div><div class='del'>-      have_rb_thread_waiting_for_value = 1;</div><div class='del'>-      rb_thread_wakeup(thread);</div><div class='del'>-#else</div><div class='del'>-      rb_thread_run(thread);</div><div class='del'>-#endif</div><div class='del'>-      DUMP1("finish back to caller");</div><div class='del'>-#if DO_THREAD_SCHEDULE_AT_CALLBACK_DONE</div><div class='del'>-      rb_thread_schedule();</div><div class='del'>-#endif</div><div class='del'>-    } else {</div><div class='del'>-      DUMP2("caller is dead (caller thread:%lx)", thread);</div><div class='del'>-      DUMP2("               (current thread:%lx)", rb_thread_current());</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* end of handler : remove it */</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_invoke_with_position(argc, argv, obj, position)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    Tcl_QueuePosition position;</div><div class='del'>-{</div><div class='del'>-    struct invoke_queue *ivq;</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    struct tcltkip *ptr;</div><div class='del'>-#endif</div><div class='del'>-    int  *alloc_done;</div><div class='del'>-    int  thr_crit_bup;</div><div class='del'>-    volatile VALUE current = rb_thread_current();</div><div class='del'>-    volatile VALUE ip_obj = obj;</div><div class='del'>-    volatile VALUE result;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    Tcl_Obj **av = (Tcl_Obj **)NULL;</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    char **av = (char **)NULL;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (argc &lt; 1) {</div><div class='del'>-        rb_raise(rb_eArgError, "command name missing");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    ptr = get_ip(ip_obj);</div><div class='del'>-    DUMP2("status: ptr-&gt;tk_thread_id %d", ptr-&gt;tk_thread_id);</div><div class='del'>-#endif</div><div class='del'>-    DUMP2("status: Tcl_GetCurrentThread %d", Tcl_GetCurrentThread());</div><div class='del'>-    DUMP2("status: eventloopt_thread %lx", eventloop_thread);</div><div class='del'>-</div><div class='del'>-    if (</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-	(ptr-&gt;tk_thread_id == 0 || ptr-&gt;tk_thread_id == Tcl_GetCurrentThread())</div><div class='del'>-	&amp;&amp; </div><div class='del'>-#endif</div><div class='del'>-	(NIL_P(eventloop_thread) || current == eventloop_thread)</div><div class='del'>-	) {</div><div class='del'>-        if (NIL_P(eventloop_thread)) {</div><div class='del'>-            DUMP2("invoke from thread:%lx but no eventloop", current);</div><div class='del'>-        } else {</div><div class='del'>-            DUMP2("invoke from current eventloop %lx", current);</div><div class='del'>-        }</div><div class='del'>-        result = ip_invoke_real(argc, argv, ip_obj);</div><div class='del'>-        if (rb_obj_is_kind_of(result, rb_eException)) {</div><div class='del'>-            rb_exc_raise(result);</div><div class='del'>-        }</div><div class='del'>-        return result;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP2("invoke from thread %lx (NOT current eventloop)", current);</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    /* allocate memory (for arguments) */</div><div class='del'>-    av = alloc_invoke_arguments(argc, argv);</div><div class='del'>-</div><div class='del'>-    /* allocate memory (keep result) */</div><div class='del'>-    /* alloc_done = (int*)ALLOC(int); */</div><div class='del'>-    alloc_done = (int*)ckalloc(sizeof(int));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)alloc_done); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-    *alloc_done = 0;</div><div class='del'>-</div><div class='del'>-    /* allocate memory (freed by Tcl_ServiceEvent) */</div><div class='del'>-    /* ivq = (struct invoke_queue *)Tcl_Alloc(sizeof(struct invoke_queue)); */</div><div class='del'>-    ivq = (struct invoke_queue *)ckalloc(sizeof(struct invoke_queue));</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)ivq); /* XXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* allocate result obj */</div><div class='del'>-    result = rb_ary_new3(1, Qnil);</div><div class='del'>-</div><div class='del'>-    /* construct event data */</div><div class='del'>-    ivq-&gt;done = alloc_done;</div><div class='del'>-    ivq-&gt;argc = argc;</div><div class='del'>-    ivq-&gt;argv = av;</div><div class='del'>-    ivq-&gt;interp = ip_obj;</div><div class='del'>-    ivq-&gt;result = result;</div><div class='del'>-    ivq-&gt;thread = current;</div><div class='del'>-    ivq-&gt;safe_level = rb_safe_level();</div><div class='del'>-    ivq-&gt;ev.proc = invoke_queue_handler;</div><div class='del'>-</div><div class='del'>-    /* add the handler to Tcl event queue */</div><div class='del'>-    DUMP1("add handler");</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    if (ptr-&gt;tk_thread_id) {</div><div class='del'>-      /* Tcl_ThreadQueueEvent(ptr-&gt;tk_thread_id, &amp;(ivq-&gt;ev), position); */</div><div class='del'>-      Tcl_ThreadQueueEvent(ptr-&gt;tk_thread_id, (Tcl_Event*)ivq, position);</div><div class='del'>-      Tcl_ThreadAlert(ptr-&gt;tk_thread_id);</div><div class='del'>-    } else if (tk_eventloop_thread_id) {</div><div class='del'>-      /* Tcl_ThreadQueueEvent(tk_eventloop_thread_id, </div><div class='del'>-			   &amp;(ivq-&gt;ev), position); */</div><div class='del'>-      Tcl_ThreadQueueEvent(tk_eventloop_thread_id, </div><div class='del'>-			   (Tcl_Event*)ivq, position);</div><div class='del'>-      Tcl_ThreadAlert(tk_eventloop_thread_id);</div><div class='del'>-    } else {</div><div class='del'>-      /* Tcl_QueueEvent(&amp;(ivq-&gt;ev), position); */</div><div class='del'>-      Tcl_QueueEvent((Tcl_Event*)ivq, position);</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    /* Tcl_QueueEvent(&amp;(ivq-&gt;ev), position); */</div><div class='del'>-    Tcl_QueueEvent((Tcl_Event*)ivq, position);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    /* wait for the handler to be processed */</div><div class='del'>-    DUMP2("wait for handler (current thread:%lx)", current);</div><div class='del'>-    while(*alloc_done &gt;= 0) {</div><div class='del'>-	/* rb_thread_stop(); */</div><div class='del'>-	rb_thread_sleep_forever();</div><div class='del'>-    }</div><div class='del'>-    DUMP2("back from handler (current thread:%lx)", current);</div><div class='del'>-</div><div class='del'>-    /* get result &amp; free allocated memory */</div><div class='del'>-    ret = RARRAY(result)-&gt;ptr[0];</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)alloc_done, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)alloc_done); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    /* free(alloc_done); */</div><div class='del'>-    ckfree((char*)alloc_done);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if 0 /* ivq is freed by Tcl_ServiceEvent */</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)ivq, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release(ivq);</div><div class='del'>-#else</div><div class='del'>-    ckfree((char*)ivq);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* free allocated memory */</div><div class='del'>-    free_invoke_arguments(argc, av);</div><div class='del'>-</div><div class='del'>-    /* exception? */</div><div class='del'>-    if (rb_obj_is_kind_of(ret, rb_eException)) {</div><div class='del'>-        DUMP1("raise exception");</div><div class='del'>-        /* rb_exc_raise(ret); */</div><div class='del'>-	rb_exc_raise(rb_exc_new3(rb_obj_class(ret), </div><div class='del'>-				 rb_funcall(ret, ID_to_s, 0, 0)));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DUMP1("exit ip_invoke");</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* get return code from Tcl_Eval() */</div><div class='del'>-static VALUE</div><div class='del'>-ip_retval(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr;        /* tcltkip data struct */</div><div class='del'>-</div><div class='del'>-    /* get the data strcut */</div><div class='del'>-    ptr = get_ip(self);</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return rb_tainted_str_new2("");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return (INT2FIX(ptr-&gt;return_value));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_invoke(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'>-    return ip_invoke_with_position(argc, argv, obj, TCL_QUEUE_TAIL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_invoke_immediate(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'>-    /* POTENTIALY INSECURE : can create infinite loop */</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    return ip_invoke_with_position(argc, argv, obj, TCL_QUEUE_HEAD);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* access Tcl variables */</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_variable2_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int   argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    volatile VALUE varname, index, flag;</div><div class='del'>-</div><div class='del'>-    varname = argv[0];</div><div class='del'>-    index   = argv[1];</div><div class='del'>-    flag    = argv[2];</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-    StringValue(varname);</div><div class='del'>-    if (!NIL_P(index)) StringValue(index);</div><div class='del'>-    */</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    {</div><div class='del'>-        Tcl_Obj *ret;</div><div class='del'>-        volatile VALUE strval;</div><div class='del'>-</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        /* ip is deleted? */</div><div class='del'>-        if (deleted_ip(ptr)) {</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return rb_tainted_str_new2("");</div><div class='del'>-        } else {</div><div class='del'>-            /* Tcl_Preserve(ptr-&gt;ip); */</div><div class='del'>-            rbtk_preserve_ip(ptr);</div><div class='del'>-            ret = Tcl_GetVar2Ex(ptr-&gt;ip, RSTRING_PTR(varname),</div><div class='del'>-                                NIL_P(index) ? NULL : RSTRING_PTR(index),</div><div class='del'>-                                FIX2INT(flag));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == (Tcl_Obj*)NULL) {</div><div class='del'>-            volatile VALUE exc;</div><div class='del'>-            /* exc = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                 Tcl_GetStringResult(ptr-&gt;ip)); */</div><div class='del'>-            exc = create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-            /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-            rbtk_release_ip(ptr);</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return exc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tcl_IncrRefCount(ret);</div><div class='del'>-        strval = get_str_from_obj(ret);</div><div class='del'>-        OBJ_TAINT(strval);</div><div class='del'>-        Tcl_DecrRefCount(ret);</div><div class='del'>-</div><div class='del'>-        /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-        rbtk_release_ip(ptr);</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-        return(strval);</div><div class='del'>-    }</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    {</div><div class='del'>-        char *ret;</div><div class='del'>-        volatile VALUE strval;</div><div class='del'>-</div><div class='del'>-        /* ip is deleted? */</div><div class='del'>-        if (deleted_ip(ptr)) {</div><div class='del'>-            return rb_tainted_str_new2("");</div><div class='del'>-        } else {</div><div class='del'>-            /* Tcl_Preserve(ptr-&gt;ip); */</div><div class='del'>-            rbtk_preserve_ip(ptr);</div><div class='del'>-            ret = Tcl_GetVar2(ptr-&gt;ip, RSTRING_PTR(varname), </div><div class='del'>-                              NIL_P(index) ? NULL : RSTRING_PTR(index),</div><div class='del'>-                              FIX2INT(flag));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == (char*)NULL) {</div><div class='del'>-            volatile VALUE exc;</div><div class='del'>-            exc = rb_exc_new2(rb_eRuntimeError, Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-            /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-            rbtk_release_ip(ptr);</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return exc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strval = rb_tainted_str_new2(ret);</div><div class='del'>-        /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-        rbtk_release_ip(ptr);</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        return(strval);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_variable2(self, varname, index, flag)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE index;</div><div class='del'>-    VALUE flag;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[3];</div><div class='del'>-    VALUE retval;</div><div class='del'>-</div><div class='del'>-    StringValue(varname);</div><div class='del'>-    if (!NIL_P(index)) StringValue(index);</div><div class='del'>-</div><div class='del'>-    argv[0] = varname;</div><div class='del'>-    argv[1] = index;</div><div class='del'>-    argv[2] = flag;</div><div class='del'>-</div><div class='del'>-    retval = tk_funcall(ip_get_variable2_core, 3, argv, self);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(retval)) {</div><div class='del'>-        return rb_tainted_str_new2("");</div><div class='del'>-    } else {</div><div class='del'>-        return retval;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_variable(self, varname, flag)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE flag;</div><div class='del'>-{</div><div class='del'>-    return ip_get_variable2(self, varname, Qnil, flag);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_set_variable2_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int   argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    volatile VALUE varname, index, value, flag;</div><div class='del'>-</div><div class='del'>-    varname = argv[0];</div><div class='del'>-    index   = argv[1];</div><div class='del'>-    value   = argv[2];</div><div class='del'>-    flag    = argv[3];</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-    StringValue(varname);</div><div class='del'>-    if (!NIL_P(index)) StringValue(index);</div><div class='del'>-    StringValue(value);</div><div class='del'>-    */</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    {</div><div class='del'>-        Tcl_Obj *valobj, *ret;</div><div class='del'>-        volatile VALUE strval;</div><div class='del'>-</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        valobj = get_obj_from_str(value);</div><div class='del'>-        Tcl_IncrRefCount(valobj);</div><div class='del'>-</div><div class='del'>-        /* ip is deleted? */</div><div class='del'>-        if (deleted_ip(ptr)) {</div><div class='del'>-            Tcl_DecrRefCount(valobj);</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return rb_tainted_str_new2("");</div><div class='del'>-        } else {</div><div class='del'>-            /* Tcl_Preserve(ptr-&gt;ip); */</div><div class='del'>-            rbtk_preserve_ip(ptr);</div><div class='del'>-            ret = Tcl_SetVar2Ex(ptr-&gt;ip, RSTRING_PTR(varname),</div><div class='del'>-                                NIL_P(index) ? NULL : RSTRING_PTR(index),</div><div class='del'>-                                valobj, FIX2INT(flag));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tcl_DecrRefCount(valobj);</div><div class='del'>-</div><div class='del'>-        if (ret == (Tcl_Obj*)NULL) {</div><div class='del'>-            volatile VALUE exc;</div><div class='del'>-            /* exc = rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                 Tcl_GetStringResult(ptr-&gt;ip)); */</div><div class='del'>-            exc = create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-            /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-            rbtk_release_ip(ptr);</div><div class='del'>-            rb_thread_critical = thr_crit_bup;</div><div class='del'>-            return exc;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tcl_IncrRefCount(ret);</div><div class='del'>-        strval = get_str_from_obj(ret);</div><div class='del'>-        OBJ_TAINT(strval);</div><div class='del'>-        Tcl_DecrRefCount(ret);</div><div class='del'>-</div><div class='del'>-        /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-        rbtk_release_ip(ptr);</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        return(strval);</div><div class='del'>-    }</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    {</div><div class='del'>-        CONST char *ret;</div><div class='del'>-        volatile VALUE strval;</div><div class='del'>-</div><div class='del'>-        /* ip is deleted? */</div><div class='del'>-        if (deleted_ip(ptr)) {</div><div class='del'>-            return rb_tainted_str_new2("");</div><div class='del'>-        } else {</div><div class='del'>-            /* Tcl_Preserve(ptr-&gt;ip); */</div><div class='del'>-            rbtk_preserve_ip(ptr);</div><div class='del'>-            ret = Tcl_SetVar2(ptr-&gt;ip, RSTRING_PTR(varname), </div><div class='del'>-                              NIL_P(index) ? NULL : RSTRING_PTR(index), </div><div class='del'>-                              RSTRING_PTR(value), FIX2INT(flag));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (ret == (char*)NULL) {</div><div class='del'>-            return rb_exc_new2(rb_eRuntimeError, ptr-&gt;ip-&gt;result);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        strval = rb_tainted_str_new2(ret);</div><div class='del'>-</div><div class='del'>-        /* Tcl_Release(ptr-&gt;ip); */</div><div class='del'>-        rbtk_release_ip(ptr);</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        return(strval);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_set_variable2(self, varname, index, value, flag)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE index;</div><div class='del'>-    VALUE value;</div><div class='del'>-    VALUE flag;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[4];</div><div class='del'>-    VALUE retval;</div><div class='del'>-</div><div class='del'>-    StringValue(varname);</div><div class='del'>-    if (!NIL_P(index)) StringValue(index);</div><div class='del'>-    StringValue(value);</div><div class='del'>-</div><div class='del'>-    argv[0] = varname;</div><div class='del'>-    argv[1] = index;</div><div class='del'>-    argv[2] = value;</div><div class='del'>-    argv[3] = flag;</div><div class='del'>-</div><div class='del'>-    retval = tk_funcall(ip_set_variable2_core, 4, argv, self);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(retval)) {</div><div class='del'>-        return rb_tainted_str_new2("");</div><div class='del'>-    } else {</div><div class='del'>-        return retval;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_set_variable(self, varname, value, flag)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE value;</div><div class='del'>-    VALUE flag;</div><div class='del'>-{</div><div class='del'>-    return ip_set_variable2(self, varname, Qnil, value, flag);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_unset_variable2_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int   argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-    volatile VALUE varname, index, flag;</div><div class='del'>-</div><div class='del'>-    varname = argv[0];</div><div class='del'>-    index   = argv[1];</div><div class='del'>-    flag    = argv[2];</div><div class='del'>-</div><div class='del'>-    /* </div><div class='del'>-    StringValue(varname);</div><div class='del'>-    if (!NIL_P(index)) StringValue(index);</div><div class='del'>-    */</div><div class='del'>-</div><div class='del'>-    /* ip is deleted? */</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ptr-&gt;return_value = Tcl_UnsetVar2(ptr-&gt;ip, RSTRING_PTR(varname), </div><div class='del'>-                                      NIL_P(index) ? NULL : RSTRING_PTR(index),</div><div class='del'>-                                      FIX2INT(flag));</div><div class='del'>-</div><div class='del'>-    if (ptr-&gt;return_value == TCL_ERROR) {</div><div class='del'>-        if (FIX2INT(flag) &amp; TCL_LEAVE_ERR_MSG) {</div><div class='del'>-            /* return rb_exc_new2(rb_eRuntimeError, </div><div class='del'>-                                  Tcl_GetStringResult(ptr-&gt;ip)); */</div><div class='del'>-            return create_ip_exc(interp, rb_eRuntimeError, </div><div class='del'>-                                 Tcl_GetStringResult(ptr-&gt;ip));</div><div class='del'>-        }</div><div class='del'>-        return Qfalse;</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'>-ip_unset_variable2(self, varname, index, flag)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE index;</div><div class='del'>-    VALUE flag;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[3];</div><div class='del'>-    VALUE retval;</div><div class='del'>-</div><div class='del'>-    StringValue(varname);</div><div class='del'>-    if (!NIL_P(index)) StringValue(index);</div><div class='del'>-</div><div class='del'>-    argv[0] = varname;</div><div class='del'>-    argv[1] = index;</div><div class='del'>-    argv[2] = flag;</div><div class='del'>-</div><div class='del'>-    retval = tk_funcall(ip_unset_variable2_core, 3, argv, self);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(retval)) {</div><div class='del'>-        return rb_tainted_str_new2("");</div><div class='del'>-    } else {</div><div class='del'>-        return retval;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_unset_variable(self, varname, flag)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE flag;</div><div class='del'>-{</div><div class='del'>-    return ip_unset_variable2(self, varname, Qnil, flag);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_global_var(self, varname)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-{</div><div class='del'>-    return ip_get_variable(self, varname, </div><div class='del'>-                           INT2FIX(TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_global_var2(self, varname, index)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE index;</div><div class='del'>-{</div><div class='del'>-    return ip_get_variable2(self, varname, index, </div><div class='del'>-                            INT2FIX(TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_set_global_var(self, varname, value)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    return ip_set_variable(self, varname, value, </div><div class='del'>-                           INT2FIX(TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_set_global_var2(self, varname, index, value)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE index;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    return ip_set_variable2(self, varname, index, value, </div><div class='del'>-                            INT2FIX(TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_unset_global_var(self, varname)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-{</div><div class='del'>-    return ip_unset_variable(self, varname, </div><div class='del'>-                             INT2FIX(TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_unset_global_var2(self, varname, index)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE varname;</div><div class='del'>-    VALUE index;</div><div class='del'>-{</div><div class='del'>-    return ip_unset_variable2(self, varname, index, </div><div class='del'>-                              INT2FIX(TCL_GLOBAL_ONLY | TCL_LEAVE_ERR_MSG));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* treat Tcl_List */</div><div class='del'>-static VALUE</div><div class='del'>-lib_split_tklist_core(ip_obj, list_str)</div><div class='del'>-    VALUE ip_obj;</div><div class='del'>-    VALUE list_str;</div><div class='del'>-{</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    volatile VALUE ary, elem;</div><div class='del'>-    int idx;</div><div class='del'>-    int taint_flag = OBJ_TAINTED(list_str);</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    int list_enc_idx;</div><div class='del'>-    volatile VALUE list_ivar_enc;</div><div class='del'>-#endif</div><div class='del'>-    int result;</div><div class='del'>-    VALUE old_gc;</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    if (NIL_P(ip_obj)) {</div><div class='del'>-        interp = (Tcl_Interp *)NULL;</div><div class='del'>-    } else if (get_ip(ip_obj) == (struct tcltkip *)NULL) {</div><div class='del'>-        interp = (Tcl_Interp *)NULL;</div><div class='del'>-    } else {</div><div class='del'>-        interp = get_ip(ip_obj)-&gt;ip;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    StringValue(list_str);</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    list_enc_idx = rb_enc_get_index(list_str);</div><div class='del'>-    list_ivar_enc = rb_ivar_get(list_str, ID_at_enc);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        /* object style interface */</div><div class='del'>-        Tcl_Obj *listobj;</div><div class='del'>-        int     objc;</div><div class='del'>-        Tcl_Obj **objv;</div><div class='del'>-        int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        listobj = get_obj_from_str(list_str);</div><div class='del'>-</div><div class='del'>-        Tcl_IncrRefCount(listobj);</div><div class='del'>-</div><div class='del'>-        result = Tcl_ListObjGetElements(interp, listobj, &amp;objc, &amp;objv);</div><div class='del'>-</div><div class='del'>-        if (result == TCL_ERROR) {</div><div class='del'>-            Tcl_DecrRefCount(listobj);</div><div class='del'>-            if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-                rb_raise(rb_eRuntimeError, "can't get elements from list");</div><div class='del'>-            } else {</div><div class='del'>-                rb_raise(rb_eRuntimeError, "%s", Tcl_GetStringResult(interp));</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        for(idx = 0; idx &lt; objc; idx++) {</div><div class='del'>-            Tcl_IncrRefCount(objv[idx]);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        thr_crit_bup = rb_thread_critical;</div><div class='del'>-        rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-        ary = rb_ary_new2(objc);</div><div class='del'>-        if (taint_flag) OBJ_TAINT(ary);</div><div class='del'>-</div><div class='del'>-        old_gc = rb_gc_disable();</div><div class='del'>-</div><div class='del'>-        for(idx = 0; idx &lt; objc; idx++) {</div><div class='del'>-            elem = get_str_from_obj(objv[idx]);</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-	    if (rb_enc_get_index(elem) == ENCODING_INDEX_BINARY) {</div><div class='del'>-	        rb_enc_associate_index(elem, ENCODING_INDEX_BINARY);</div><div class='del'>-		rb_ivar_set(elem, ID_at_enc, ENCODING_NAME_BINARY);</div><div class='del'>-	    } else {</div><div class='del'>-	        rb_enc_associate_index(elem, list_enc_idx);</div><div class='del'>-		rb_ivar_set(elem, ID_at_enc, list_ivar_enc);</div><div class='del'>-	    }</div><div class='del'>-#endif</div><div class='del'>-            if (taint_flag) OBJ_TAINT(elem);</div><div class='del'>-            /* RARRAY(ary)-&gt;ptr[idx] = elem; */</div><div class='del'>-	    rb_ary_push(ary, elem);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        /* RARRAY(ary)-&gt;len = objc; */</div><div class='del'>-</div><div class='del'>-        if (old_gc == Qfalse) rb_gc_enable();</div><div class='del'>-</div><div class='del'>-        rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-        for(idx = 0; idx &lt; objc; idx++) {</div><div class='del'>-            Tcl_DecrRefCount(objv[idx]);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        Tcl_DecrRefCount(listobj);</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        /* string style interface */</div><div class='del'>-        int  argc;</div><div class='del'>-        char **argv;</div><div class='del'>-</div><div class='del'>-        if (Tcl_SplitList(interp, RSTRING_PTR(list_str), </div><div class='del'>-                          &amp;argc, &amp;argv) == TCL_ERROR) {</div><div class='del'>-            if (interp == (Tcl_Interp*)NULL) {</div><div class='del'>-                rb_raise(rb_eRuntimeError, "can't get elements from list");</div><div class='del'>-            } else {</div><div class='del'>-                rb_raise(rb_eRuntimeError, "%s", interp-&gt;result);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ary = rb_ary_new2(argc);</div><div class='del'>-        if (taint_flag) OBJ_TAINT(ary);</div><div class='del'>-</div><div class='del'>-        old_gc = rb_gc_disable();</div><div class='del'>-</div><div class='del'>-        for(idx = 0; idx &lt; argc; idx++) {</div><div class='del'>-            if (taint_flag) {</div><div class='del'>-                elem = rb_tainted_str_new2(argv[idx]);</div><div class='del'>-            } else {</div><div class='del'>-                elem = rb_str_new2(argv[idx]);</div><div class='del'>-            }</div><div class='del'>-            /* rb_ivar_set(elem, ID_at_enc, rb_str_new2("binary")); */</div><div class='del'>-            /* RARRAY(ary)-&gt;ptr[idx] = elem; */</div><div class='del'>-	    rb_ary_push(ary, elem)</div><div class='del'>-        }</div><div class='del'>-        /* RARRAY(ary)-&gt;len = argc; */</div><div class='del'>-</div><div class='del'>-        if (old_gc == Qfalse) rb_gc_enable();</div><div class='del'>-#endif</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'>-lib_split_tklist(self, list_str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE list_str;</div><div class='del'>-{</div><div class='del'>-    return lib_split_tklist_core(Qnil, list_str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_split_tklist(self, list_str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE list_str;</div><div class='del'>-{</div><div class='del'>-    return lib_split_tklist_core(self, list_str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_merge_tklist(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'>-    int  num, len;</div><div class='del'>-    int  *flagPtr;</div><div class='del'>-    char *dst, *result;</div><div class='del'>-    volatile VALUE str;</div><div class='del'>-    int taint_flag = 0;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    VALUE old_gc;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) return rb_str_new2("");</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-    old_gc = rb_gc_disable();</div><div class='del'>-</div><div class='del'>-    /* based on Tcl/Tk's Tcl_Merge() */</div><div class='del'>-    /* flagPtr = ALLOC_N(int, argc); */</div><div class='del'>-    flagPtr = (int *)ckalloc(sizeof(int) * argc);</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)flagPtr); /* XXXXXXXXXX */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* pass 1 */</div><div class='del'>-    len = 1;</div><div class='del'>-    for(num = 0; num &lt; argc; num++) {</div><div class='del'>-        if (OBJ_TAINTED(argv[num])) taint_flag = 1;</div><div class='del'>-        dst = StringValuePtr(argv[num]);</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        len += Tcl_ScanCountedElement(dst, RSTRING_LEN(argv[num]),  </div><div class='del'>-                                      &amp;flagPtr[num]) + 1;</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        len += Tcl_ScanElement(dst, &amp;flagPtr[num]) + 1;</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* pass 2 */</div><div class='del'>-    /* result = (char *)Tcl_Alloc(len); */</div><div class='del'>-    result = (char *)ckalloc(len);</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Preserve((ClientData)result);</div><div class='del'>-#endif</div><div class='del'>-    dst = result;</div><div class='del'>-    for(num = 0; num &lt; argc; num++) {</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-        len = Tcl_ConvertCountedElement(RSTRING_PTR(argv[num]), </div><div class='del'>-                                        RSTRING_LEN(argv[num]), </div><div class='del'>-                                        dst, flagPtr[num]);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-        len = Tcl_ConvertElement(RSTRING_PTR(argv[num]), dst, flagPtr[num]);</div><div class='del'>-#endif</div><div class='del'>-        dst += len;</div><div class='del'>-        *dst = ' ';</div><div class='del'>-        dst++;</div><div class='del'>-    }</div><div class='del'>-    if (dst == result) {</div><div class='del'>-        *dst = 0;</div><div class='del'>-    } else {</div><div class='del'>-        dst[-1] = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)flagPtr, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)flagPtr);</div><div class='del'>-#else</div><div class='del'>-    /* free(flagPtr); */</div><div class='del'>-    ckfree((char*)flagPtr);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* create object */</div><div class='del'>-    str = rb_str_new(result, dst - result - 1);</div><div class='del'>-    if (taint_flag) OBJ_TAINT(str);</div><div class='del'>-#if 0 /* use Tcl_EventuallyFree */</div><div class='del'>-    Tcl_EventuallyFree((ClientData)result, TCL_DYNAMIC); /* XXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-#if 0 /* use Tcl_Preserve/Release */</div><div class='del'>-    Tcl_Release((ClientData)result); /* XXXXXXXXXXX */</div><div class='del'>-#else</div><div class='del'>-    /* Tcl_Free(result); */</div><div class='del'>-    ckfree(result);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (old_gc == Qfalse) rb_gc_enable();</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</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'>-lib_conv_listelement(self, src)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE src;</div><div class='del'>-{</div><div class='del'>-    int   len, scan_flag;</div><div class='del'>-    volatile VALUE dst;</div><div class='del'>-    int   taint_flag = OBJ_TAINTED(src);</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    StringValue(src);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    len = Tcl_ScanCountedElement(RSTRING_PTR(src), RSTRING_LEN(src), </div><div class='del'>-                                 &amp;scan_flag);</div><div class='del'>-    dst = rb_str_new(0, len + 1);</div><div class='del'>-    len = Tcl_ConvertCountedElement(RSTRING_PTR(src), RSTRING_LEN(src), </div><div class='del'>-                                    RSTRING_PTR(dst), scan_flag);</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt; 8 */</div><div class='del'>-    len = Tcl_ScanElement(RSTRING_PTR(src), &amp;scan_flag);</div><div class='del'>-    dst = rb_str_new(0, len + 1);</div><div class='del'>-    len = Tcl_ConvertElement(RSTRING_PTR(src), RSTRING_PTR(dst), scan_flag);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_str_resize(dst, len);</div><div class='del'>-    if (taint_flag) OBJ_TAINT(dst);</div><div class='del'>-</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-lib_getversion(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE type_name;</div><div class='del'>-</div><div class='del'>-    set_tcltk_version();</div><div class='del'>-</div><div class='del'>-    switch(tcltk_version.type) {</div><div class='del'>-    case TCL_ALPHA_RELEASE:</div><div class='del'>-      type_name = rb_str_new2("alpha");</div><div class='del'>-      break;</div><div class='del'>-    case TCL_BETA_RELEASE:</div><div class='del'>-      type_name = rb_str_new2("beta");</div><div class='del'>-      break;</div><div class='del'>-    case TCL_FINAL_RELEASE:</div><div class='del'>-      type_name = rb_str_new2("final");</div><div class='del'>-      break;</div><div class='del'>-    default:</div><div class='del'>-      type_name = rb_str_new2("unknown");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_ary_new3(5, INT2NUM(tcltk_version.major), </div><div class='del'>-		          INT2NUM(tcltk_version.minor), </div><div class='del'>-		          INT2NUM(tcltk_version.type), type_name, </div><div class='del'>-		          INT2NUM(tcltk_version.patchlevel));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tcltklib_compile_info()</div><div class='del'>-{</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    int size;</div><div class='del'>-    char form[] </div><div class='del'>-      = "tcltklib %s :: Ruby%s (%s) %s pthread :: Tcl%s(%s)/Tk%s(%s) %s";</div><div class='del'>-    char *info;</div><div class='del'>-</div><div class='del'>-    size = strlen(form)</div><div class='del'>-        + strlen(TCLTKLIB_RELEASE_DATE)</div><div class='del'>-        + strlen(RUBY_VERSION)</div><div class='del'>-        + strlen(RUBY_RELEASE_DATE)</div><div class='del'>-        + strlen("without") </div><div class='del'>-        + strlen(TCL_PATCH_LEVEL)</div><div class='del'>-        + strlen("without stub")</div><div class='del'>-        + strlen(TK_PATCH_LEVEL)</div><div class='del'>-        + strlen("without stub") </div><div class='del'>-        + strlen("unknown tcl_threads");</div><div class='del'>-</div><div class='del'>-    info = ALLOC_N(char, size);</div><div class='del'>-    /* info = ckalloc(sizeof(char) * size); */ /* SEGV */</div><div class='del'>-</div><div class='del'>-    sprintf(info, form,</div><div class='del'>-            TCLTKLIB_RELEASE_DATE, </div><div class='del'>-            RUBY_VERSION, RUBY_RELEASE_DATE, </div><div class='del'>-#ifdef HAVE_NATIVETHREAD</div><div class='del'>-            "with",</div><div class='del'>-#else</div><div class='del'>-            "without",</div><div class='del'>-#endif</div><div class='del'>-            TCL_PATCH_LEVEL, </div><div class='del'>-#ifdef USE_TCL_STUBS</div><div class='del'>-            "with stub",</div><div class='del'>-#else</div><div class='del'>-            "without stub",</div><div class='del'>-#endif</div><div class='del'>-            TK_PATCH_LEVEL, </div><div class='del'>-#ifdef USE_TK_STUBS</div><div class='del'>-            "with stub",</div><div class='del'>-#else</div><div class='del'>-            "without stub",</div><div class='del'>-#endif</div><div class='del'>-#ifdef WITH_TCL_ENABLE_THREAD</div><div class='del'>-# if WITH_TCL_ENABLE_THREAD</div><div class='del'>-            "with tcl_threads"</div><div class='del'>-# else</div><div class='del'>-            "without tcl_threads"</div><div class='del'>-# endif</div><div class='del'>-#else</div><div class='del'>-            "unknown tcl_threads"</div><div class='del'>-#endif</div><div class='del'>-        );</div><div class='del'>-</div><div class='del'>-    ret = rb_obj_freeze(rb_str_new2(info));</div><div class='del'>-</div><div class='del'>-    free(info);</div><div class='del'>-    /* ckfree(info); */</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'>-</div><div class='del'>-static VALUE</div><div class='del'>-create_dummy_encoding_for_tk_core(interp, name, error_mode)</div><div class='del'>-     VALUE interp;</div><div class='del'>-     VALUE name;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-</div><div class='del'>-  rb_secure(4);</div><div class='del'>-</div><div class='del'>-  StringValue(name);</div><div class='del'>-</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt;= 1)</div><div class='del'>-  if (Tcl_GetEncoding((Tcl_Interp*)NULL, RSTRING_PTR(name)) == (Tcl_Encoding)NULL) {</div><div class='del'>-    if (RTEST(error_mode)) {</div><div class='del'>-      rb_raise(rb_eArgError, "invalid Tk encoding name '%s'", </div><div class='del'>-	       RSTRING_PTR(name));</div><div class='del'>-    } else {</div><div class='del'>-      return Qnil;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-  if (RTEST(rb_define_dummy_encoding(RSTRING_PTR(name)))) {</div><div class='del'>-    int idx = rb_enc_find_index(StringValueCStr(name));</div><div class='del'>-    return rb_enc_from_encoding(rb_enc_from_index(idx));</div><div class='del'>-  } else {</div><div class='del'>-    if (RTEST(error_mode)) {</div><div class='del'>-      rb_raise(rb_eRuntimeError, "fail to create dummy encoding for '%s'",</div><div class='del'>-	       RSTRING_PTR(name));</div><div class='del'>-    } else {</div><div class='del'>-      return Qnil;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-#else</div><div class='del'>-    return name;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-static VALUE</div><div class='del'>-create_dummy_encoding_for_tk(interp, name)</div><div class='del'>-     VALUE interp;</div><div class='del'>-     VALUE name;</div><div class='del'>-{</div><div class='del'>-  return create_dummy_encoding_for_tk_core(interp, name, Qtrue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-static int</div><div class='del'>-update_encoding_table(table, interp, error_mode)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE interp;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  struct tcltkip *ptr;</div><div class='del'>-  int retry = 0;</div><div class='del'>-  int i, idx, objc;</div><div class='del'>-  Tcl_Obj **objv;</div><div class='del'>-  Tcl_Obj *enc_list;</div><div class='del'>-  volatile VALUE encname = Qnil;</div><div class='del'>-  volatile VALUE encobj = Qnil;</div><div class='del'>-</div><div class='del'>-  /* interpreter check */</div><div class='del'>-  if (NIL_P(interp)) return 0;</div><div class='del'>-  ptr = get_ip(interp);</div><div class='del'>-  if (ptr == (struct tcltkip *) NULL)  return 0;</div><div class='del'>-  if (deleted_ip(ptr)) return 0;</div><div class='del'>-</div><div class='del'>-  /* get Tcl's encoding list */</div><div class='del'>-  Tcl_GetEncodingNames(ptr-&gt;ip);</div><div class='del'>-  enc_list = Tcl_GetObjResult(ptr-&gt;ip);</div><div class='del'>-  Tcl_IncrRefCount(enc_list);</div><div class='del'>-</div><div class='del'>-  if (Tcl_ListObjGetElements(ptr-&gt;ip, enc_list, </div><div class='del'>-			     &amp;objc, &amp;objv) != TCL_OK) {</div><div class='del'>-    Tcl_DecrRefCount(enc_list);</div><div class='del'>-    /* rb_raise(rb_eRuntimeError, "failt to get Tcl's encoding names");*/</div><div class='del'>-    return 0;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /* check each encoding name */</div><div class='del'>-  for(i = 0; i &lt; objc; i++) {</div><div class='del'>-    encname = rb_str_new2(Tcl_GetString(objv[i]));</div><div class='del'>-    if (NIL_P(rb_hash_lookup(table, encname))) {</div><div class='del'>-      /* new Tk encoding -&gt; add to table */</div><div class='del'>-      idx = rb_enc_find_index(StringValueCStr(encname));</div><div class='del'>-      if (idx &lt; 0) {</div><div class='del'>-	encobj = create_dummy_encoding_for_tk_core(interp,encname,error_mode);</div><div class='del'>-      } else {</div><div class='del'>-	encobj = rb_enc_from_encoding(rb_enc_from_index(idx));</div><div class='del'>-      }</div><div class='del'>-      encname = rb_obj_freeze(encname);</div><div class='del'>-      rb_hash_aset(table, encname, encobj);</div><div class='del'>-      if (!NIL_P(encobj) &amp;&amp; NIL_P(rb_hash_lookup(table, encobj))) {</div><div class='del'>-	rb_hash_aset(table, encobj, encname);</div><div class='del'>-      }</div><div class='del'>-      retry = 1;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Tcl_DecrRefCount(enc_list);</div><div class='del'>-</div><div class='del'>-  return retry;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-encoding_table_get_name_core(table, enc_arg, error_mode)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE enc_arg;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  volatile VALUE enc = enc_arg;</div><div class='del'>-  volatile VALUE name = Qnil;</div><div class='del'>-  volatile VALUE tmp = Qnil;</div><div class='del'>-  volatile VALUE interp = rb_ivar_get(table, ID_at_interp);</div><div class='del'>-  struct tcltkip *ptr = (struct tcltkip *) NULL;</div><div class='del'>-  int idx;</div><div class='del'>-</div><div class='del'>-  /* deleted interp ? */</div><div class='del'>-  if (!NIL_P(interp)) {</div><div class='del'>-    ptr = get_ip(interp);</div><div class='del'>-    if (deleted_ip(ptr)) {</div><div class='del'>-      ptr = (struct tcltkip *) NULL;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /* encoding argument check */</div><div class='del'>-  /* 1st: default encoding setting of interp */</div><div class='del'>-  if (ptr &amp;&amp; NIL_P(enc)) {</div><div class='del'>-    if (rb_respond_to(interp, ID_encoding_name)) {</div><div class='del'>-      enc = rb_funcall(interp, ID_encoding_name, 0, 0);</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-  /* 2nd: encoding system of Tcl/Tk */</div><div class='del'>-  if (NIL_P(enc)) {</div><div class='del'>-    enc = rb_str_new2(Tcl_GetEncodingName((Tcl_Encoding)NULL));</div><div class='del'>-  }</div><div class='del'>-  /* 3rd: Encoding.default_external */</div><div class='del'>-  if (NIL_P(enc)) {</div><div class='del'>-    enc = rb_enc_default_external();</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (RTEST(rb_obj_is_kind_of(enc, cRubyEncoding))) {</div><div class='del'>-    /* Ruby's Encoding object */</div><div class='del'>-    name = rb_hash_lookup(table, enc);</div><div class='del'>-    if (!NIL_P(name)) {</div><div class='del'>-      /* find */</div><div class='del'>-      return name;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* is it new ? */</div><div class='del'>-    /* update check of Tk encoding names */</div><div class='del'>-    if (update_encoding_table(table, interp, error_mode)) {</div><div class='del'>-      /* add new relations to the table   */</div><div class='del'>-      /* RETRY: registered Ruby encoding? */</div><div class='del'>-      name = rb_hash_lookup(table, enc);</div><div class='del'>-      if (!NIL_P(name)) {</div><div class='del'>-	/* find */</div><div class='del'>-	return name;</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    /* fail to find */</div><div class='del'>-</div><div class='del'>-  } else {</div><div class='del'>-    /* String or Symbol? */</div><div class='del'>-    name = rb_funcall(enc, ID_to_s, 0, 0);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(rb_hash_lookup(table, name))) {</div><div class='del'>-      /* find */</div><div class='del'>-      return name;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* is it new ? */</div><div class='del'>-    idx = rb_enc_find_index(StringValueCStr(name));</div><div class='del'>-    if (idx &gt;= 0) {</div><div class='del'>-      enc = rb_enc_from_encoding(rb_enc_from_index(idx));</div><div class='del'>-</div><div class='del'>-      /* registered Ruby encoding? */</div><div class='del'>-      tmp = rb_hash_lookup(table, enc);</div><div class='del'>-      if (!NIL_P(tmp)) {</div><div class='del'>-	/* find */</div><div class='del'>-	return tmp;</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      /* update check of Tk encoding names */</div><div class='del'>-      if (update_encoding_table(table, interp, error_mode)) {</div><div class='del'>-	/* add new relations to the table   */</div><div class='del'>-	/* RETRY: registered Ruby encoding? */</div><div class='del'>-	tmp = rb_hash_lookup(table, enc);</div><div class='del'>-	if (!NIL_P(tmp)) {</div><div class='del'>-	  /* find */</div><div class='del'>-	  return tmp;</div><div class='del'>-	}</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    /* fail to find */</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (RTEST(error_mode)) {</div><div class='del'>-    enc = rb_funcall(enc_arg, ID_to_s, 0, 0);</div><div class='del'>-    rb_raise(rb_eArgError, "unsupported Tk encoding '%s'", RSTRING_PTR(enc));</div><div class='del'>-  }</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-static VALUE</div><div class='del'>-encoding_table_get_obj_core(table, enc, error_mode)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE enc;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  volatile VALUE obj = Qnil;</div><div class='del'>-</div><div class='del'>-  obj = rb_hash_lookup(table, </div><div class='del'>-		       encoding_table_get_name_core(table, enc, error_mode));</div><div class='del'>-  if (RTEST(rb_obj_is_kind_of(obj, cRubyEncoding))) {</div><div class='del'>-    return obj;</div><div class='del'>-  } else {</div><div class='del'>-    return Qnil;</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* ! RUBY_VM */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt;= 1)</div><div class='del'>-static int</div><div class='del'>-update_encoding_table(table, interp, error_mode)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE interp;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  struct tcltkip *ptr;</div><div class='del'>-  int retry = 0;</div><div class='del'>-  int i, idx, objc;</div><div class='del'>-  Tcl_Obj **objv;</div><div class='del'>-  Tcl_Obj *enc_list;</div><div class='del'>-  volatile VALUE encname = Qnil;</div><div class='del'>-  volatile VALUE encobj = Qnil;</div><div class='del'>-</div><div class='del'>-  /* interpreter check */</div><div class='del'>-  if (NIL_P(interp)) return 0;</div><div class='del'>-  ptr = get_ip(interp);</div><div class='del'>-  if (ptr == (struct tcltkip *) NULL)  return 0;</div><div class='del'>-  if (deleted_ip(ptr)) return 0;</div><div class='del'>-</div><div class='del'>-  /* get Tcl's encoding list */</div><div class='del'>-  Tcl_GetEncodingNames(ptr-&gt;ip);</div><div class='del'>-  enc_list = Tcl_GetObjResult(ptr-&gt;ip);</div><div class='del'>-  Tcl_IncrRefCount(enc_list);</div><div class='del'>-</div><div class='del'>-  if (Tcl_ListObjGetElements(ptr-&gt;ip, enc_list, &amp;objc, &amp;objv) != TCL_OK) {</div><div class='del'>-    Tcl_DecrRefCount(enc_list);</div><div class='del'>-    /* rb_raise(rb_eRuntimeError, "failt to get Tcl's encoding names"); */</div><div class='del'>-    return 0;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /* get encoding name and set it to table */</div><div class='del'>-  for(i = 0; i &lt; objc; i++) {</div><div class='del'>-    encname = rb_str_new2(Tcl_GetString(objv[i]));</div><div class='del'>-    if (NIL_P(rb_hash_lookup(table, encname))) {</div><div class='del'>-      /* new Tk encoding -&gt; add to table */</div><div class='del'>-      encname = rb_obj_freeze(encname);</div><div class='del'>-      rb_hash_aset(table, encname, encname);</div><div class='del'>-      retry = 1;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Tcl_DecrRefCount(enc_list);</div><div class='del'>-</div><div class='del'>-  return retry;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-encoding_table_get_name_core(table, enc, error_mode)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE enc;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  volatile VALUE name = Qnil;</div><div class='del'>-  int retry = 0;</div><div class='del'>-</div><div class='del'>-  enc = rb_funcall(enc, ID_to_s, 0, 0);</div><div class='del'>-  name = rb_hash_lookup(table, enc);</div><div class='del'>-</div><div class='del'>-  if (!NIL_P(name)) {</div><div class='del'>-    /* find */</div><div class='del'>-    return name;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /* update check */</div><div class='del'>-  if (update_encoding_table(table, rb_ivar_get(table, ID_at_interp), </div><div class='del'>-					       error_mode)) {</div><div class='del'>-    /* add new relations to the table   */</div><div class='del'>-    /* RETRY: registered Ruby encoding? */</div><div class='del'>-    name = rb_hash_lookup(table, enc);</div><div class='del'>-    if (!NIL_P(name)) {</div><div class='del'>-      /* find */</div><div class='del'>-      return name;</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  if (RTEST(error_mode)) {</div><div class='del'>-    rb_raise(rb_eArgError, "unsupported Tk encoding '%s'", RSTRING_PTR(enc));</div><div class='del'>-  }</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-static VALUE</div><div class='del'>-encoding_table_get_obj_core(table, enc, error_mode)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE enc;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  return encoding_table_get_name_core(table, enc, error_mode);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* Tcl/Tk 7.x or 8.0 */</div><div class='del'>-static VALUE</div><div class='del'>-encoding_table_get_name_core(table, enc, error_mode)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE enc;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-static VALUE</div><div class='del'>-encoding_table_get_obj_core(table, enc, error_mode)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE enc;</div><div class='del'>-     VALUE error_mode;</div><div class='del'>-{</div><div class='del'>-  return Qnil;</div><div class='del'>-}</div><div class='del'>-#endif /* end of dependency for the version of Tcl/Tk */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-encoding_table_get_name(table, enc)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE enc;</div><div class='del'>-{</div><div class='del'>-  return encoding_table_get_name_core(table, enc, Qtrue);</div><div class='del'>-}</div><div class='del'>-static VALUE</div><div class='del'>-encoding_table_get_obj(table, enc)</div><div class='del'>-     VALUE table;</div><div class='del'>-     VALUE enc;</div><div class='del'>-{</div><div class='del'>-  return encoding_table_get_obj_core(table, enc, Qtrue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-static VALUE</div><div class='del'>-create_encoding_table(interp)</div><div class='del'>-     VALUE interp;</div><div class='del'>-{</div><div class='del'>-  struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-  volatile VALUE table = rb_hash_new();</div><div class='del'>-  volatile VALUE encname = Qnil;</div><div class='del'>-  volatile VALUE encobj = Qnil;</div><div class='del'>-  int i, idx, objc;</div><div class='del'>-  Tcl_Obj **objv;</div><div class='del'>-  Tcl_Obj *enc_list;</div><div class='del'>-</div><div class='del'>-  rb_secure(4);</div><div class='del'>-</div><div class='del'>-  /* set 'binary' encoding */</div><div class='del'>-  encobj = rb_enc_from_encoding(rb_enc_from_index(ENCODING_INDEX_BINARY));</div><div class='del'>-  rb_hash_aset(table, ENCODING_NAME_BINARY, encobj);</div><div class='del'>-  rb_hash_aset(table, encobj, ENCODING_NAME_BINARY);</div><div class='del'>-	       </div><div class='del'>-</div><div class='del'>-  /* Tcl stub check */</div><div class='del'>-  tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-  /* get Tcl's encoding list */</div><div class='del'>-  Tcl_GetEncodingNames(ptr-&gt;ip);</div><div class='del'>-  enc_list = Tcl_GetObjResult(ptr-&gt;ip);</div><div class='del'>-  Tcl_IncrRefCount(enc_list);</div><div class='del'>-</div><div class='del'>-  if (Tcl_ListObjGetElements(ptr-&gt;ip, enc_list, &amp;objc, &amp;objv) != TCL_OK) {</div><div class='del'>-    Tcl_DecrRefCount(enc_list);</div><div class='del'>-    rb_raise(rb_eRuntimeError, "failt to get Tcl's encoding names");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /* get encoding name and set it to table */</div><div class='del'>-  for(i = 0; i &lt; objc; i++) {</div><div class='del'>-    int name2obj, obj2name;</div><div class='del'>-</div><div class='del'>-    name2obj = 1; obj2name = 1;</div><div class='del'>-    encname = rb_obj_freeze(rb_str_new2(Tcl_GetString(objv[i])));</div><div class='del'>-    idx = rb_enc_find_index(StringValueCStr(encname));</div><div class='del'>-    if (idx &lt; 0) {</div><div class='del'>-      /* fail to find ruby encoding -&gt; check known encoding */</div><div class='del'>-      if (strcmp(RSTRING_PTR(encname), "identity") == 0) {</div><div class='del'>-	name2obj = 1; obj2name = 0;</div><div class='del'>-	idx = ENCODING_INDEX_BINARY;</div><div class='del'>-</div><div class='del'>-      } else if (strcmp(RSTRING_PTR(encname), "shiftjis") == 0) {</div><div class='del'>-	name2obj = 1; obj2name = 0;</div><div class='del'>-	idx = rb_enc_find_index("Shift_JIS");</div><div class='del'>-</div><div class='del'>-      } else if (strcmp(RSTRING_PTR(encname), "unicode") == 0) {</div><div class='del'>-	name2obj = 1; obj2name = 0;</div><div class='del'>-	idx = ENCODING_INDEX_UTF8;</div><div class='del'>-</div><div class='del'>-      } else if (strcmp(RSTRING_PTR(encname), "symbol") == 0) {</div><div class='del'>-	name2obj = 1; obj2name = 0;</div><div class='del'>-	idx = rb_enc_find_index("ASCII-8BIT");</div><div class='del'>-</div><div class='del'>-      } else {</div><div class='del'>-	/* regist dummy encoding */</div><div class='del'>-	name2obj = 1; obj2name = 1;</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (idx &lt; 0) {</div><div class='del'>-      /* unknown encoding -&gt; create dummy */</div><div class='del'>-      encobj = create_dummy_encoding_for_tk(interp, encname);</div><div class='del'>-    } else {</div><div class='del'>-      encobj = rb_enc_from_encoding(rb_enc_from_index(idx));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (name2obj) {</div><div class='del'>-      DUMP2("create_encoding_table: name2obj: %s", RSTRING_PTR(encname));</div><div class='del'>-      rb_hash_aset(table, encname, encobj);</div><div class='del'>-    }</div><div class='del'>-    if (obj2name) {</div><div class='del'>-      DUMP2("create_encoding_table: obj2name: %s", RSTRING_PTR(encname));</div><div class='del'>-      rb_hash_aset(table, encobj, encname);</div><div class='del'>-    }</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Tcl_DecrRefCount(enc_list);</div><div class='del'>-</div><div class='del'>-  rb_ivar_set(table, ID_at_interp, interp);</div><div class='del'>-  rb_ivar_set(interp, ID_encoding_table, table);</div><div class='del'>-</div><div class='del'>-  return table;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* ! RUBY_VM */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt; 8 || (TCL_MAJOR_VERSION == 8 &amp;&amp; TCL_MINOR_VERSION &gt;= 1)</div><div class='del'>-static VALUE</div><div class='del'>-create_encoding_table(interp)</div><div class='del'>-     VALUE interp;</div><div class='del'>-{</div><div class='del'>-  struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-  volatile VALUE table = rb_hash_new();</div><div class='del'>-  volatile VALUE encname = Qnil;</div><div class='del'>-  int i, objc;</div><div class='del'>-  Tcl_Obj **objv;</div><div class='del'>-  Tcl_Obj *enc_list;</div><div class='del'>-</div><div class='del'>-  rb_secure(4);</div><div class='del'>-</div><div class='del'>-  /* set 'binary' encoding */</div><div class='del'>-  rb_hash_aset(table, ENCODING_NAME_BINARY, ENCODING_NAME_BINARY);</div><div class='del'>-</div><div class='del'>-  /* get Tcl's encoding list */</div><div class='del'>-  Tcl_GetEncodingNames(ptr-&gt;ip);</div><div class='del'>-  enc_list = Tcl_GetObjResult(ptr-&gt;ip);</div><div class='del'>-  Tcl_IncrRefCount(enc_list);</div><div class='del'>-</div><div class='del'>-  if (Tcl_ListObjGetElements(ptr-&gt;ip, enc_list, &amp;objc, &amp;objv) != TCL_OK) {</div><div class='del'>-    Tcl_DecrRefCount(enc_list);</div><div class='del'>-    rb_raise(rb_eRuntimeError, "failt to get Tcl's encoding names");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /* get encoding name and set it to table */</div><div class='del'>-  for(i = 0; i &lt; objc; i++) {</div><div class='del'>-    encname = rb_obj_freeze(rb_str_new2(Tcl_GetString(objv[i])));</div><div class='del'>-    rb_hash_aset(table, encname, encname);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Tcl_DecrRefCount(enc_list);</div><div class='del'>-</div><div class='del'>-  rb_ivar_set(table, ID_at_interp, interp);</div><div class='del'>-  rb_ivar_set(interp, ID_encoding_table, table);</div><div class='del'>-</div><div class='del'>-  return table;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#else /* Tcl/Tk 7.x or 8.0 */</div><div class='del'>-static VALUE</div><div class='del'>-create_encoding_table(interp)</div><div class='del'>-     VALUE interp;</div><div class='del'>-{</div><div class='del'>-  volatile VALUE table = rb_hash_new();</div><div class='del'>-  rb_secure(4);</div><div class='del'>-  rb_ivar_set(interp, ID_encoding_table, table);</div><div class='del'>-  return table;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_get_encoding_table(interp)</div><div class='del'>-     VALUE interp;</div><div class='del'>-{</div><div class='del'>-  volatile VALUE table = Qnil;</div><div class='del'>-</div><div class='del'>-  table = rb_ivar_get(interp, ID_encoding_table);</div><div class='del'>-</div><div class='del'>-  if (NIL_P(table)) {</div><div class='del'>-    /* initialize encoding_table */</div><div class='del'>-    table = create_encoding_table(interp);</div><div class='del'>-    rb_define_singleton_method(table, "get_name", encoding_table_get_name, 1);</div><div class='del'>-    rb_define_singleton_method(table, "get_obj",  encoding_table_get_obj,  1);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  return table;</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'>- *   The following is based on tkMenu.[ch] </div><div class='del'>- *   of Tcl/Tk (Tk8.0 -- Tk8.5b1) source code.</div><div class='del'>- */</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-</div><div class='del'>-#define MASTER_MENU             0</div><div class='del'>-#define TEAROFF_MENU            1</div><div class='del'>-#define MENUBAR                 2</div><div class='del'>-</div><div class='del'>-struct dummy_TkMenuEntry {</div><div class='del'>-    int type;</div><div class='del'>-    struct dummy_TkMenu *menuPtr;</div><div class='del'>-    /* , and etc.   */</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct dummy_TkMenu {</div><div class='del'>-    Tk_Window tkwin;</div><div class='del'>-    Display *display;</div><div class='del'>-    Tcl_Interp *interp;</div><div class='del'>-    Tcl_Command widgetCmd;</div><div class='del'>-    struct dummy_TkMenuEntry **entries;</div><div class='del'>-    int numEntries;</div><div class='del'>-    int active;</div><div class='del'>-    int menuType;     /* MASTER_MENU, TEAROFF_MENU, or MENUBAR */</div><div class='del'>-    Tcl_Obj *menuTypePtr;</div><div class='del'>-    /* , and etc.   */</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct dummy_TkMenuRef {</div><div class='del'>-    struct dummy_TkMenu *menuPtr;</div><div class='del'>-    char *dummy1;</div><div class='del'>-    char *dummy2;</div><div class='del'>-    char *dummy3;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#if 0 /* was available on Tk8.0 -- Tk8.4 */</div><div class='del'>-EXTERN struct dummy_TkMenuRef *TkFindMenuReferences(Tcl_Interp*, char*);</div><div class='del'>-#else /* based on Tk8.0 -- Tk8.5.0 */</div><div class='del'>-#define MENU_HASH_KEY "tkMenus"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_make_menu_embeddable_core(interp, argc, argv)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    int   argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-#if TCL_MAJOR_VERSION &gt;= 8</div><div class='del'>-    volatile VALUE menu_path;</div><div class='del'>-    struct tcltkip *ptr = get_ip(interp);</div><div class='del'>-    struct dummy_TkMenuRef *menuRefPtr = NULL;</div><div class='del'>-    XEvent event;</div><div class='del'>-    Tcl_HashTable *menuTablePtr;</div><div class='del'>-    Tcl_HashEntry *hashEntryPtr;</div><div class='del'>-</div><div class='del'>-    menu_path = argv[0];</div><div class='del'>-    StringValue(menu_path);</div><div class='del'>-</div><div class='del'>-#if 0 /* was available on Tk8.0 -- Tk8.4 */</div><div class='del'>-    menuRefPtr = TkFindMenuReferences(ptr-&gt;ip, RSTRING_PTR(menu_path));</div><div class='del'>-#else /* based on Tk8.0 -- Tk8.5b1 */</div><div class='del'>-    if ((menuTablePtr </div><div class='del'>-	 = (Tcl_HashTable *) Tcl_GetAssocData(ptr-&gt;ip, MENU_HASH_KEY, NULL))</div><div class='del'>-	!= NULL) {</div><div class='del'>-      if ((hashEntryPtr </div><div class='del'>-	   = Tcl_FindHashEntry(menuTablePtr, RSTRING_PTR(menu_path)))</div><div class='del'>-	  != NULL) {</div><div class='del'>-        menuRefPtr = (struct dummy_TkMenuRef *) Tcl_GetHashValue(hashEntryPtr);</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (menuRefPtr == (struct dummy_TkMenuRef *) NULL) {</div><div class='del'>-        rb_raise(rb_eArgError, "not a menu widget, or invalid widget path");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (menuRefPtr-&gt;menuPtr == (struct dummy_TkMenu *) NULL) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, </div><div class='del'>-		 "invalid menu widget (maybe already destroyed)");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if ((menuRefPtr-&gt;menuPtr)-&gt;menuType != MENUBAR) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, </div><div class='del'>-		 "target menu widget must be a MENUBAR type");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    (menuRefPtr-&gt;menuPtr)-&gt;menuType = TEAROFF_MENU;</div><div class='del'>-#if 0  /* cause SEGV */</div><div class='del'>-    {</div><div class='del'>-       /* char *s = "tearoff"; */</div><div class='del'>-       char *s = "normal";</div><div class='del'>-       /* Tcl_SetStringObj((menuRefPtr-&gt;menuPtr)-&gt;menuTypePtr, s, strlen(s));*/</div><div class='del'>-       (menuRefPtr-&gt;menuPtr)-&gt;menuTypePtr = Tcl_NewStringObj(s, strlen(s));</div><div class='del'>-       /* Tcl_IncrRefCount((menuRefPtr-&gt;menuPtr)-&gt;menuTypePtr); */</div><div class='del'>-       /* (menuRefPtr-&gt;menuPtr)-&gt;menuType = TEAROFF_MENU; */</div><div class='del'>-       (menuRefPtr-&gt;menuPtr)-&gt;menuType = MASTER_MENU;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if 0 /* was available on Tk8.0 -- Tk8.4 */</div><div class='del'>-    TkEventuallyRecomputeMenu(menuRefPtr-&gt;menuPtr);</div><div class='del'>-    TkEventuallyRedrawMenu(menuRefPtr-&gt;menuPtr, </div><div class='del'>-			   (struct dummy_TkMenuEntry *)NULL);</div><div class='del'>-#else /* based on Tk8.0 -- Tk8.5b1 */</div><div class='del'>-    memset((void *) &amp;event, 0, sizeof(event));</div><div class='del'>-    event.xany.type = ConfigureNotify;</div><div class='del'>-    event.xany.serial = NextRequest(Tk_Display((menuRefPtr-&gt;menuPtr)-&gt;tkwin));</div><div class='del'>-    event.xany.send_event = 0; /* FALSE */</div><div class='del'>-    event.xany.window = Tk_WindowId((menuRefPtr-&gt;menuPtr)-&gt;tkwin);</div><div class='del'>-    event.xany.display = Tk_Display((menuRefPtr-&gt;menuPtr)-&gt;tkwin);</div><div class='del'>-    event.xconfigure.window = event.xany.window;</div><div class='del'>-    Tk_HandleEvent(&amp;event);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#else /* TCL_MAJOR_VERSION &lt;= 7 */</div><div class='del'>-    rb_notimplement();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return interp;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ip_make_menu_embeddable(interp, menu_path)</div><div class='del'>-    VALUE interp;</div><div class='del'>-    VALUE menu_path;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[1];</div><div class='del'>-</div><div class='del'>-    argv[0] = menu_path;</div><div class='del'>-    return tk_funcall(ip_make_menu_embeddable_core, 1, argv, interp);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*###############################################*/</div><div class='del'>-</div><div class='del'>-/*---- initialization ----*/</div><div class='del'>-void</div><div class='del'>-Init_tcltklib()</div><div class='del'>-{</div><div class='del'>-    int  ret;</div><div class='del'>-</div><div class='del'>-    VALUE lib = rb_define_module("TclTkLib");</div><div class='del'>-    VALUE ip = rb_define_class("TclTkIp", rb_cObject);</div><div class='del'>-</div><div class='del'>-    VALUE ev_flag = rb_define_module_under(lib, "EventFlag");</div><div class='del'>-    VALUE var_flag = rb_define_module_under(lib, "VarAccessFlag");</div><div class='del'>-    VALUE release_type = rb_define_module_under(lib, "RELEASE_TYPE");</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    tcltkip_class = ip;</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    rb_global_variable(&amp;cRubyEncoding);</div><div class='del'>-    cRubyEncoding = rb_const_get(rb_cObject, rb_intern("Encoding"));</div><div class='del'>-</div><div class='del'>-    ENCODING_INDEX_UTF8   = rb_enc_to_index(rb_utf8_encoding());</div><div class='del'>-    ENCODING_INDEX_BINARY = rb_enc_find_index("binary");</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;ENCODING_NAME_UTF8);</div><div class='del'>-    rb_global_variable(&amp;ENCODING_NAME_BINARY);</div><div class='del'>-</div><div class='del'>-    ENCODING_NAME_UTF8   = rb_obj_freeze(rb_str_new2("utf-8"));</div><div class='del'>-    ENCODING_NAME_BINARY = rb_obj_freeze(rb_str_new2("binary"));</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;eTkCallbackReturn);</div><div class='del'>-    rb_global_variable(&amp;eTkCallbackBreak);</div><div class='del'>-    rb_global_variable(&amp;eTkCallbackContinue);</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;eventloop_thread);</div><div class='del'>-    rb_global_variable(&amp;eventloop_stack);</div><div class='del'>-    rb_global_variable(&amp;watchdog_thread);</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;rbtk_pending_exception);</div><div class='del'>-</div><div class='del'>-   /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_const(lib, "COMPILE_INFO", tcltklib_compile_info());</div><div class='del'>-</div><div class='del'>-    rb_define_const(lib, "RELEASE_DATE", </div><div class='del'>-                    rb_obj_freeze(rb_str_new2(tcltklib_release_date)));</div><div class='del'>-</div><div class='del'>-    rb_define_const(lib, "FINALIZE_PROC_NAME", </div><div class='del'>-                    rb_str_new2(finalize_hook_name));</div><div class='del'>-</div><div class='del'>-   /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_const(ev_flag, "NONE",      INT2FIX(0));</div><div class='del'>-    rb_define_const(ev_flag, "WINDOW",    INT2FIX(TCL_WINDOW_EVENTS));</div><div class='del'>-    rb_define_const(ev_flag, "FILE",      INT2FIX(TCL_FILE_EVENTS));</div><div class='del'>-    rb_define_const(ev_flag, "TIMER",     INT2FIX(TCL_TIMER_EVENTS));</div><div class='del'>-    rb_define_const(ev_flag, "IDLE",      INT2FIX(TCL_IDLE_EVENTS));</div><div class='del'>-    rb_define_const(ev_flag, "ALL",       INT2FIX(TCL_ALL_EVENTS));</div><div class='del'>-    rb_define_const(ev_flag, "DONT_WAIT", INT2FIX(TCL_DONT_WAIT));</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_const(var_flag, "NONE",           INT2FIX(0));</div><div class='del'>-    rb_define_const(var_flag, "GLOBAL_ONLY",    INT2FIX(TCL_GLOBAL_ONLY));</div><div class='del'>-#ifdef TCL_NAMESPACE_ONLY</div><div class='del'>-    rb_define_const(var_flag, "NAMESPACE_ONLY", INT2FIX(TCL_NAMESPACE_ONLY));</div><div class='del'>-#else /* probably Tcl7.6 */</div><div class='del'>-    rb_define_const(var_flag, "NAMESPACE_ONLY", INT2FIX(0));</div><div class='del'>-#endif</div><div class='del'>-    rb_define_const(var_flag, "LEAVE_ERR_MSG",  INT2FIX(TCL_LEAVE_ERR_MSG));</div><div class='del'>-    rb_define_const(var_flag, "APPEND_VALUE",   INT2FIX(TCL_APPEND_VALUE));</div><div class='del'>-    rb_define_const(var_flag, "LIST_ELEMENT",   INT2FIX(TCL_LIST_ELEMENT));</div><div class='del'>-#ifdef TCL_PARSE_PART1</div><div class='del'>-    rb_define_const(var_flag, "PARSE_VARNAME",  INT2FIX(TCL_PARSE_PART1));</div><div class='del'>-#else /* probably Tcl7.6 */</div><div class='del'>-    rb_define_const(var_flag, "PARSE_VARNAME",  INT2FIX(0));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(lib, "get_version", lib_getversion, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_const(release_type, "ALPHA", INT2FIX(TCL_ALPHA_RELEASE));</div><div class='del'>-    rb_define_const(release_type, "BETA",  INT2FIX(TCL_BETA_RELEASE));</div><div class='del'>-    rb_define_const(release_type, "FINAL", INT2FIX(TCL_FINAL_RELEASE));</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    eTkCallbackReturn = rb_define_class("TkCallbackReturn", rb_eStandardError);</div><div class='del'>-    eTkCallbackBreak = rb_define_class("TkCallbackBreak", rb_eStandardError);</div><div class='del'>-    eTkCallbackContinue = rb_define_class("TkCallbackContinue",</div><div class='del'>-                                          rb_eStandardError);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    eLocalJumpError = rb_const_get(rb_cObject, rb_intern("LocalJumpError"));</div><div class='del'>-</div><div class='del'>-    eTkLocalJumpError = rb_define_class("TkLocalJumpError", eLocalJumpError);</div><div class='del'>-</div><div class='del'>-    eTkCallbackRetry  = rb_define_class("TkCallbackRetry", eTkLocalJumpError);</div><div class='del'>-    eTkCallbackRedo   = rb_define_class("TkCallbackRedo",  eTkLocalJumpError);</div><div class='del'>-    eTkCallbackThrow  = rb_define_class("TkCallbackThrow", eTkLocalJumpError);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    ID_at_enc = rb_intern("@encoding");</div><div class='del'>-    ID_at_interp = rb_intern("@interp");</div><div class='del'>-    ID_encoding_name = rb_intern("encoding_name");</div><div class='del'>-    ID_encoding_table = rb_intern("encoding_table");</div><div class='del'>-</div><div class='del'>-    ID_stop_p = rb_intern("stop?");</div><div class='del'>-    ID_alive_p = rb_intern("alive?");</div><div class='del'>-    ID_kill = rb_intern("kill");</div><div class='del'>-    ID_join = rb_intern("join");</div><div class='del'>-    ID_value = rb_intern("value");</div><div class='del'>-</div><div class='del'>-    ID_call = rb_intern("call");</div><div class='del'>-    ID_backtrace = rb_intern("backtrace");</div><div class='del'>-    ID_message = rb_intern("message");</div><div class='del'>-</div><div class='del'>-    ID_at_reason = rb_intern("@reason");</div><div class='del'>-    ID_return = rb_intern("return");</div><div class='del'>-    ID_break = rb_intern("break");</div><div class='del'>-    ID_next = rb_intern("next");</div><div class='del'>-</div><div class='del'>-    ID_to_s = rb_intern("to_s");</div><div class='del'>-    ID_inspect = rb_intern("inspect");</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(lib, "mainloop", lib_mainloop, -1);</div><div class='del'>-    rb_define_module_function(lib, "mainloop_thread?", </div><div class='del'>-                              lib_evloop_thread_p, 0);</div><div class='del'>-    rb_define_module_function(lib, "mainloop_watchdog", </div><div class='del'>-                              lib_mainloop_watchdog, -1);</div><div class='del'>-    rb_define_module_function(lib, "do_thread_callback", </div><div class='del'>-                              lib_thread_callback, -1);</div><div class='del'>-    rb_define_module_function(lib, "do_one_event", lib_do_one_event, -1);</div><div class='del'>-    rb_define_module_function(lib, "mainloop_abort_on_exception", </div><div class='del'>-                             lib_evloop_abort_on_exc, 0);</div><div class='del'>-    rb_define_module_function(lib, "mainloop_abort_on_exception=",  </div><div class='del'>-                             lib_evloop_abort_on_exc_set, 1);</div><div class='del'>-    rb_define_module_function(lib, "set_eventloop_window_mode", </div><div class='del'>-			      set_eventloop_window_mode, 1);</div><div class='del'>-    rb_define_module_function(lib, "get_eventloop_window_mode", </div><div class='del'>-			      get_eventloop_window_mode, 0);</div><div class='del'>-    rb_define_module_function(lib, "set_eventloop_tick",set_eventloop_tick,1);</div><div class='del'>-    rb_define_module_function(lib, "get_eventloop_tick",get_eventloop_tick,0);</div><div class='del'>-    rb_define_module_function(lib, "set_no_event_wait", set_no_event_wait, 1);</div><div class='del'>-    rb_define_module_function(lib, "get_no_event_wait", get_no_event_wait, 0);</div><div class='del'>-    rb_define_module_function(lib, "set_eventloop_weight", </div><div class='del'>-                              set_eventloop_weight, 2);</div><div class='del'>-    rb_define_module_function(lib, "set_max_block_time", set_max_block_time,1);</div><div class='del'>-    rb_define_module_function(lib, "get_eventloop_weight", </div><div class='del'>-                              get_eventloop_weight, 0);</div><div class='del'>-    rb_define_module_function(lib, "num_of_mainwindows", </div><div class='del'>-                              lib_num_of_mainwindows, 0);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(lib, "_split_tklist", lib_split_tklist, 1);</div><div class='del'>-    rb_define_module_function(lib, "_merge_tklist", lib_merge_tklist, -1);</div><div class='del'>-    rb_define_module_function(lib, "_conv_listelement", </div><div class='del'>-                              lib_conv_listelement, 1);</div><div class='del'>-    rb_define_module_function(lib, "_toUTF8", lib_toUTF8, -1);</div><div class='del'>-    rb_define_module_function(lib, "_fromUTF8", lib_fromUTF8, -1);</div><div class='del'>-    rb_define_module_function(lib, "_subst_UTF_backslash", </div><div class='del'>-                              lib_UTF_backslash, 1);</div><div class='del'>-    rb_define_module_function(lib, "_subst_Tcl_backslash", </div><div class='del'>-                              lib_Tcl_backslash, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(lib, "encoding_system", </div><div class='del'>-                              lib_get_system_encoding, 0);</div><div class='del'>-    rb_define_module_function(lib, "encoding_system=", </div><div class='del'>-                              lib_set_system_encoding, 1);</div><div class='del'>-    rb_define_module_function(lib, "encoding", </div><div class='del'>-                              lib_get_system_encoding, 0);</div><div class='del'>-    rb_define_module_function(lib, "encoding=", </div><div class='del'>-                              lib_set_system_encoding, 1);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(ip, ip_alloc);</div><div class='del'>-    rb_define_method(ip, "initialize", ip_init, -1);</div><div class='del'>-    rb_define_method(ip, "create_slave", ip_create_slave, -1);</div><div class='del'>-    rb_define_method(ip, "slave_of?", ip_is_slave_of_p, 1);</div><div class='del'>-    rb_define_method(ip, "make_safe", ip_make_safe, 0);</div><div class='del'>-    rb_define_method(ip, "safe?", ip_is_safe_p, 0);</div><div class='del'>-    rb_define_method(ip, "allow_ruby_exit?", ip_allow_ruby_exit_p, 0);</div><div class='del'>-    rb_define_method(ip, "allow_ruby_exit=", ip_allow_ruby_exit_set, 1);</div><div class='del'>-    rb_define_method(ip, "delete", ip_delete, 0);</div><div class='del'>-    rb_define_method(ip, "deleted?", ip_is_deleted_p, 0);</div><div class='del'>-    rb_define_method(ip, "has_mainwindow?", ip_has_mainwindow_p, 0);</div><div class='del'>-    rb_define_method(ip, "invalid_namespace?", ip_has_invalid_namespace_p, 0);</div><div class='del'>-    rb_define_method(ip, "_eval", ip_eval, 1);</div><div class='del'>-    rb_define_method(ip, "_toUTF8", ip_toUTF8, -1);</div><div class='del'>-    rb_define_method(ip, "_fromUTF8", ip_fromUTF8, -1);</div><div class='del'>-    rb_define_method(ip, "_thread_vwait", ip_thread_vwait, 1);</div><div class='del'>-    rb_define_method(ip, "_thread_tkwait", ip_thread_tkwait, 2);</div><div class='del'>-    rb_define_method(ip, "_invoke", ip_invoke, -1);</div><div class='del'>-    rb_define_method(ip, "_immediate_invoke", ip_invoke_immediate, -1);</div><div class='del'>-    rb_define_method(ip, "_return_value", ip_retval, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(ip, "_create_console", ip_create_console, 0);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_method(ip, "create_dummy_encoding_for_tk", </div><div class='del'>-		     create_dummy_encoding_for_tk, 1);</div><div class='del'>-    rb_define_method(ip, "encoding_table", ip_get_encoding_table, 0);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_method(ip, "_get_variable", ip_get_variable, 2);</div><div class='del'>-    rb_define_method(ip, "_get_variable2", ip_get_variable2, 3);</div><div class='del'>-    rb_define_method(ip, "_set_variable", ip_set_variable, 3);</div><div class='del'>-    rb_define_method(ip, "_set_variable2", ip_set_variable2, 4);</div><div class='del'>-    rb_define_method(ip, "_unset_variable", ip_unset_variable, 2);</div><div class='del'>-    rb_define_method(ip, "_unset_variable2", ip_unset_variable2, 3);</div><div class='del'>-    rb_define_method(ip, "_get_global_var", ip_get_global_var, 1);</div><div class='del'>-    rb_define_method(ip, "_get_global_var2", ip_get_global_var2, 2);</div><div class='del'>-    rb_define_method(ip, "_set_global_var", ip_set_global_var, 2);</div><div class='del'>-    rb_define_method(ip, "_set_global_var2", ip_set_global_var2, 3);</div><div class='del'>-    rb_define_method(ip, "_unset_global_var", ip_unset_global_var, 1);</div><div class='del'>-    rb_define_method(ip, "_unset_global_var2", ip_unset_global_var2, 2);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_method(ip, "_make_menu_embeddable", ip_make_menu_embeddable, 1);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_method(ip, "_split_tklist", ip_split_tklist, 1);</div><div class='del'>-    rb_define_method(ip, "_merge_tklist", lib_merge_tklist, -1);</div><div class='del'>-    rb_define_method(ip, "_conv_listelement", lib_conv_listelement, 1);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_method(ip, "mainloop", ip_mainloop, -1);</div><div class='del'>-    rb_define_method(ip, "mainloop_watchdog", ip_mainloop_watchdog, -1);</div><div class='del'>-    rb_define_method(ip, "do_one_event", ip_do_one_event, -1);</div><div class='del'>-    rb_define_method(ip, "mainloop_abort_on_exception", </div><div class='del'>-                    ip_evloop_abort_on_exc, 0);</div><div class='del'>-    rb_define_method(ip, "mainloop_abort_on_exception=", </div><div class='del'>-                    ip_evloop_abort_on_exc_set, 1);</div><div class='del'>-    rb_define_method(ip, "set_eventloop_tick", ip_set_eventloop_tick, 1);</div><div class='del'>-    rb_define_method(ip, "get_eventloop_tick", ip_get_eventloop_tick, 0);</div><div class='del'>-    rb_define_method(ip, "set_no_event_wait", ip_set_no_event_wait, 1);</div><div class='del'>-    rb_define_method(ip, "get_no_event_wait", ip_get_no_event_wait, 0);</div><div class='del'>-    rb_define_method(ip, "set_eventloop_weight", ip_set_eventloop_weight, 2);</div><div class='del'>-    rb_define_method(ip, "get_eventloop_weight", ip_get_eventloop_weight, 0);</div><div class='del'>-    rb_define_method(ip, "set_max_block_time", set_max_block_time, 1);</div><div class='del'>-    rb_define_method(ip, "restart", ip_restart, 0);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    eventloop_thread = Qnil;</div><div class='del'>-</div><div class='del'>-#ifndef DEFAULT_EVENTLOOP_DEPTH</div><div class='del'>-#define DEFAULT_EVENTLOOP_DEPTH 7</div><div class='del'>-#endif </div><div class='del'>-    eventloop_stack = rb_ary_new2(DEFAULT_EVENTLOOP_DEPTH);</div><div class='del'>-    OBJ_TAINT(eventloop_stack);</div><div class='del'>-</div><div class='del'>-    watchdog_thread  = Qnil;</div><div class='del'>-</div><div class='del'>-    rbtk_pending_exception = Qnil;</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    /* if ruby-&gt;nativethread-supprt and tcltklib-&gt;doen't, </div><div class='del'>-       the following will cause link-error. */</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-    ruby_native_thread_p();</div><div class='del'>-#else</div><div class='del'>-    is_ruby_native_thread();</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    rb_set_end_proc(lib_mark_at_exit, 0);</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    ret = ruby_open_tcl_dll(rb_argv0 ? RSTRING_PTR(rb_argv0) : 0);</div><div class='del'>-    switch(ret) {</div><div class='del'>-    case TCLTK_STUBS_OK:</div><div class='del'>-        break;</div><div class='del'>-    case NO_TCL_DLL:</div><div class='del'>-        rb_raise(rb_eLoadError, "tcltklib: fail to open tcl_dll");</div><div class='del'>-    case NO_FindExecutable:</div><div class='del'>-        rb_raise(rb_eLoadError, "tcltklib: can't find Tcl_FindExecutable");</div><div class='del'>-    default:</div><div class='del'>-        rb_raise(rb_eLoadError, "tcltklib: unknown error(%d) on ruby_open_tcl_dll", ret);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* --------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-    /* Tcl stub check */</div><div class='del'>-    tcl_stubs_check();</div><div class='del'>-</div><div class='del'>-    Tcl_ObjType_ByteArray = Tcl_GetObjType(Tcl_ObjTypeName_ByteArray);</div><div class='del'>-    Tcl_ObjType_String    = Tcl_GetObjType(Tcl_ObjTypeName_String);</div><div class='del'>-</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/tkutil/.cvsignore b/ext/tk/tkutil/.cvsignore<br/>deleted file mode 100644<br/>index 90c83ed9b1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/tkutil/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tkutil/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-*.log</div><div class='del'>-*.def</div><div class='head'>diff --git a/ext/tk/tkutil/depend b/ext/tk/tkutil/depend<br/>deleted file mode 100644<br/>index fd63e230f0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/tkutil/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tkutil/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-tkutil.o: tkutil.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h</div><div class='head'>diff --git a/ext/tk/tkutil/extconf.rb b/ext/tk/tkutil/extconf.rb<br/>deleted file mode 100644<br/>index 015bc3a45e..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/tkutil/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tkutil/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-begin</div><div class='del'>-  has_tk = compiled?('tk')</div><div class='del'>-rescue NoMethodError</div><div class='del'>-  # Probably, called manually (NOT from 'extmk.rb'). Force to make Makefile.</div><div class='del'>-  has_tk = true</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if has_tk</div><div class='del'>-  require 'mkmf'</div><div class='del'>-  have_func("rb_obj_instance_exec", "ruby.h")</div><div class='del'>-  have_func("strndup", "string.h")</div><div class='del'>-  create_makefile('tkutil')</div><div class='del'>-end</div><div class='head'>diff --git a/ext/tk/tkutil/tkutil.c b/ext/tk/tkutil/tkutil.c<br/>deleted file mode 100644<br/>index 00d719143b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/tk/tkutil/tkutil.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/tk/tkutil/tkutil.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1799 +0,0 @@</div><div class='del'>-/************************************************</div><div class='del'>-</div><div class='del'>-  tkutil.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  created at: Fri Nov  3 00:47:54 JST 1995</div><div class='del'>-</div><div class='del'>-************************************************/</div><div class='del'>-</div><div class='del'>-#define TKUTIL_RELEASE_DATE "2008-05-23"</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-</div><div class='del'>-#ifdef RUBY_VM  /* Ruby 1.9 */</div><div class='del'>-/* #include "ruby/ruby.h" */</div><div class='del'>-#include "ruby/signal.h"</div><div class='del'>-#include "ruby/st.h"</div><div class='del'>-#else</div><div class='del'>-/* #include "ruby.h" */</div><div class='del'>-#include "rubysig.h"</div><div class='del'>-#include "version.h"</div><div class='del'>-#include "st.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE cMethod;</div><div class='del'>-</div><div class='del'>-static VALUE cTclTkLib;</div><div class='del'>-</div><div class='del'>-static VALUE cTkObject;</div><div class='del'>-static VALUE cTkCallbackEntry;</div><div class='del'>-</div><div class='del'>-static VALUE TK_None;</div><div class='del'>-</div><div class='del'>-static VALUE cCB_SUBST;</div><div class='del'>-static VALUE cSUBST_INFO;</div><div class='del'>-</div><div class='del'>-static VALUE ENCODING_NAME_UTF8; /* for saving GC cost */</div><div class='del'>-</div><div class='del'>-static ID ID_split_tklist;</div><div class='del'>-static ID ID_toUTF8;</div><div class='del'>-static ID ID_fromUTF8;</div><div class='del'>-static ID ID_path;</div><div class='del'>-static ID ID_at_path;</div><div class='del'>-static ID ID_at_enc;</div><div class='del'>-static ID ID_to_eval;</div><div class='del'>-static ID ID_to_s;</div><div class='del'>-static ID ID_source;</div><div class='del'>-static ID ID_downcase;</div><div class='del'>-static ID ID_install_cmd;</div><div class='del'>-static ID ID_merge_tklist;</div><div class='del'>-static ID ID_encoding;</div><div class='del'>-static ID ID_encoding_system;</div><div class='del'>-static ID ID_call;</div><div class='del'>-</div><div class='del'>-static ID ID_SUBST_INFO;</div><div class='del'>-</div><div class='del'>-static VALUE CALLBACK_TABLE;</div><div class='del'>-static unsigned long CALLBACK_ID_NUM = 0;</div><div class='del'>-</div><div class='del'>-/*************************************/</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_s_new(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = rb_class_new_instance(argc, argv, klass);</div><div class='del'>-</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-#ifndef HAVE_RB_OBJ_INSTANCE_EXEC</div><div class='del'>-      rb_obj_instance_eval(0, 0, obj);</div><div class='del'>-#else</div><div class='del'>-      rb_obj_instance_exec(1, &amp;obj, obj);</div><div class='del'>-#endif</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'>-</div><div class='del'>-static VALUE</div><div class='del'>-tkNone_to_s(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_str_new2("None");</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'>-tk_eval_cmd(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'>-    volatile VALUE cmd, rest;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "1*", &amp;cmd, &amp;rest);</div><div class='del'>-    return rb_eval_cmd(cmd, rest, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_do_callback(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 0</div><div class='del'>-    volatile VALUE id;</div><div class='del'>-    volatile VALUE rest;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "1*", &amp;id, &amp;rest);</div><div class='del'>-    return rb_apply(rb_hash_aref(CALLBACK_TABLE, id), ID_call, rest);</div><div class='del'>-#endif</div><div class='del'>-    return rb_funcall2(rb_hash_aref(CALLBACK_TABLE, argv[0]), </div><div class='del'>-                       ID_call, argc - 1, argv + 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char *cmd_id_head = "ruby_cmd TkUtil callback ";</div><div class='del'>-static char *cmd_id_prefix = "cmd";</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_install_cmd_core(cmd)</div><div class='del'>-    VALUE cmd;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE id_num;</div><div class='del'>-</div><div class='del'>-    id_num = ULONG2NUM(CALLBACK_ID_NUM++);</div><div class='del'>-    id_num = rb_funcall(id_num, ID_to_s, 0, 0);</div><div class='del'>-    id_num = rb_str_append(rb_str_new2(cmd_id_prefix), id_num);</div><div class='del'>-    rb_hash_aset(CALLBACK_TABLE, id_num, cmd);</div><div class='del'>-    return rb_str_append(rb_str_new2(cmd_id_head), id_num);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_install_cmd(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'>-    volatile VALUE cmd;</div><div class='del'>-</div><div class='del'>-#if 0</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;cmd) == 0) {</div><div class='del'>-        cmd = rb_block_proc();</div><div class='del'>-    }</div><div class='del'>-    return tk_install_cmd_core(cmd);</div><div class='del'>-#endif</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-        cmd = rb_block_proc();</div><div class='del'>-    } else {</div><div class='del'>-        cmd = argv[0];</div><div class='del'>-    }</div><div class='del'>-    return tk_install_cmd_core(cmd);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_uninstall_cmd(self, cmd_id)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE cmd_id;</div><div class='del'>-{</div><div class='del'>-    int head_len = strlen(cmd_id_head);</div><div class='del'>-    int prefix_len = strlen(cmd_id_prefix);</div><div class='del'>-</div><div class='del'>-    StringValue(cmd_id);</div><div class='del'>-    if (strncmp(cmd_id_head, RSTRING_PTR(cmd_id), head_len) != 0) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    if (strncmp(cmd_id_prefix, </div><div class='del'>-                RSTRING_PTR(cmd_id) + head_len, prefix_len) != 0) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_hash_delete(CALLBACK_TABLE, </div><div class='del'>-                          rb_str_new2(RSTRING_PTR(cmd_id) + head_len));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_toUTF8(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'>-    return rb_funcall2(cTclTkLib, ID_toUTF8, argc, argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_fromUTF8(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'>-    return rb_funcall2(cTclTkLib, ID_fromUTF8, argc, argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fromDefaultEnc_toUTF8(str, self)</div><div class='del'>-    VALUE str;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[1];</div><div class='del'>-</div><div class='del'>-    argv[0] = str;</div><div class='del'>-    return tk_toUTF8(1, argv, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-fromUTF8_toDefaultEnc(str, self)</div><div class='del'>-    VALUE str;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE argv[1];</div><div class='del'>-</div><div class='del'>-    argv[0] = str;</div><div class='del'>-    return tk_fromUTF8(1, argv, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-to_strkey(key, value, hash)</div><div class='del'>-    VALUE key;</div><div class='del'>-    VALUE value;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_hash_aset(hash, rb_funcall(key, ID_to_s, 0, 0), value);</div><div class='del'>-    return ST_CHECK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_symbolkey2str(self, keys)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE keys;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE new_keys = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    if NIL_P(keys) return new_keys;</div><div class='del'>-    keys = rb_convert_type(keys, T_HASH, "Hash", "to_hash");</div><div class='del'>-    st_foreach(RHASH_TBL(keys), to_strkey, new_keys);</div><div class='del'>-    return new_keys;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE get_eval_string_core _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE ary2list _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE ary2list2 _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE hash2list _((VALUE, VALUE));</div><div class='del'>-static VALUE hash2list_enc _((VALUE, VALUE));</div><div class='del'>-static VALUE hash2kv _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE hash2kv_enc _((VALUE, VALUE, VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ary2list(ary, enc_flag, self)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE enc_flag;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    int idx, idx2, size, size2, req_chk_flag;</div><div class='del'>-    volatile VALUE val, val2, str_val;</div><div class='del'>-    volatile VALUE dst;</div><div class='del'>-    volatile VALUE sys_enc, dst_enc, str_enc;</div><div class='del'>-</div><div class='del'>-    sys_enc = rb_funcall(cTclTkLib, ID_encoding, 0, 0);</div><div class='del'>-    if (NIL_P(sys_enc)) {</div><div class='del'>-      sys_enc = rb_funcall(cTclTkLib, ID_encoding_system, 0, 0);</div><div class='del'>-      sys_enc = rb_funcall(sys_enc, ID_to_s, 0, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if NIL_P(enc_flag) {</div><div class='del'>-        dst_enc = sys_enc;</div><div class='del'>-        req_chk_flag = 1;</div><div class='del'>-    } else if (TYPE(enc_flag) == T_TRUE || TYPE(enc_flag) == T_FALSE) {</div><div class='del'>-        dst_enc = enc_flag;</div><div class='del'>-        req_chk_flag = 0;</div><div class='del'>-    } else {</div><div class='del'>-        dst_enc = rb_funcall(enc_flag, ID_to_s, 0, 0);</div><div class='del'>-        req_chk_flag = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* size = RARRAY_LEN(ary); */</div><div class='del'>-    size = 0;</div><div class='del'>-    for(idx = 0; idx &lt; RARRAY_LEN(ary); idx++) {</div><div class='del'>-        if (TYPE(RARRAY_PTR(ary)[idx]) == T_HASH) {</div><div class='del'>-            size += 2 * RHASH_SIZE(RARRAY_PTR(ary)[idx]);</div><div class='del'>-        } else {</div><div class='del'>-            size++;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    dst = rb_ary_new2(size);</div><div class='del'>-    for(idx = 0; idx &lt; RARRAY_LEN(ary); idx++) {</div><div class='del'>-        val = RARRAY_PTR(ary)[idx];</div><div class='del'>-        str_val = Qnil;</div><div class='del'>-        switch(TYPE(val)) {</div><div class='del'>-        case T_ARRAY:</div><div class='del'>-            str_val = ary2list(val, enc_flag, self);</div><div class='del'>-            rb_ary_push(dst, str_val);</div><div class='del'>-</div><div class='del'>-            if (req_chk_flag) {</div><div class='del'>-                str_enc = rb_ivar_get(str_val, ID_at_enc);</div><div class='del'>-                if (!NIL_P(str_enc)) {</div><div class='del'>-                    str_enc = rb_funcall(str_enc, ID_to_s, 0, 0);</div><div class='del'>-                } else {</div><div class='del'>-                    str_enc = sys_enc;</div><div class='del'>-                }</div><div class='del'>-                if (!rb_str_cmp(str_enc, dst_enc)) {</div><div class='del'>-                    dst_enc = Qtrue;</div><div class='del'>-                    req_chk_flag = 0;</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'>-        case T_HASH:</div><div class='del'>-	    /* rb_ary_push(dst, hash2list(val, self)); */</div><div class='del'>-            if (RTEST(enc_flag)) {</div><div class='del'>-                val = hash2kv_enc(val, Qnil, self);</div><div class='del'>-            } else {</div><div class='del'>-                val = hash2kv(val, Qnil, self);</div><div class='del'>-            }</div><div class='del'>-            size2 = RARRAY_LEN(val);</div><div class='del'>-            for(idx2 = 0; idx2 &lt; size2; idx2++) {</div><div class='del'>-                val2 = RARRAY_PTR(val)[idx2];</div><div class='del'>-                switch(TYPE(val2)) {</div><div class='del'>-                case T_ARRAY:</div><div class='del'>-                    str_val = ary2list(val2, enc_flag, self);</div><div class='del'>-                    rb_ary_push(dst, str_val);</div><div class='del'>-                    break;</div><div class='del'>-</div><div class='del'>-                case T_HASH:</div><div class='del'>-                    if (RTEST(enc_flag)) {</div><div class='del'>-                        str_val = hash2list_enc(val2, self);</div><div class='del'>-                    } else {</div><div class='del'>-                        str_val = hash2list(val2, self);</div><div class='del'>-                    }</div><div class='del'>-                    rb_ary_push(dst, str_val);</div><div class='del'>-                    break;</div><div class='del'>-</div><div class='del'>-                default:</div><div class='del'>-                    if (val2 != TK_None) {</div><div class='del'>-                        str_val = get_eval_string_core(val2, enc_flag, self);</div><div class='del'>-                        rb_ary_push(dst, str_val);</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-</div><div class='del'>-                if (req_chk_flag) {</div><div class='del'>-                    str_enc = rb_ivar_get(str_val, ID_at_enc);</div><div class='del'>-                    if (!NIL_P(str_enc)) {</div><div class='del'>-                        str_enc = rb_funcall(str_enc, ID_to_s, 0, 0);</div><div class='del'>-                    } else {</div><div class='del'>-                        str_enc = sys_enc;</div><div class='del'>-                    }</div><div class='del'>-                    if (!rb_str_cmp(str_enc, dst_enc)) {</div><div class='del'>-                        dst_enc = Qtrue;</div><div class='del'>-                        req_chk_flag = 0;</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:</div><div class='del'>-            if (val != TK_None) {</div><div class='del'>-                str_val = get_eval_string_core(val, enc_flag, self);</div><div class='del'>-                rb_ary_push(dst, str_val);</div><div class='del'>-</div><div class='del'>-                if (req_chk_flag) {</div><div class='del'>-                    str_enc = rb_ivar_get(str_val, ID_at_enc);</div><div class='del'>-                    if (!NIL_P(str_enc)) {</div><div class='del'>-                        str_enc = rb_funcall(str_enc, ID_to_s, 0, 0);</div><div class='del'>-                    } else {</div><div class='del'>-                        str_enc = sys_enc;</div><div class='del'>-                    }</div><div class='del'>-                    if (!rb_str_cmp(str_enc, dst_enc)) {</div><div class='del'>-                        dst_enc = Qtrue;</div><div class='del'>-                        req_chk_flag = 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'>-    if (RTEST(dst_enc) &amp;&amp; !NIL_P(sys_enc)) {</div><div class='del'>-        for(idx = 0; idx &lt; RARRAY_LEN(dst); idx++) {</div><div class='del'>-            str_val = RARRAY_PTR(dst)[idx];</div><div class='del'>-            if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {</div><div class='del'>-                str_val = rb_funcall(self, ID_toUTF8, 1, str_val);</div><div class='del'>-            } else {</div><div class='del'>-                str_val = rb_funcall(cTclTkLib, ID_toUTF8, 1, str_val);</div><div class='del'>-            }</div><div class='del'>-            RARRAY_PTR(dst)[idx] = str_val;</div><div class='del'>-        }</div><div class='del'>-        val = rb_apply(cTclTkLib, ID_merge_tklist, dst);</div><div class='del'>-        if (TYPE(dst_enc) == T_STRING) {</div><div class='del'>-            val = rb_funcall(cTclTkLib, ID_fromUTF8, 2, val, dst_enc);</div><div class='del'>-            rb_ivar_set(val, ID_at_enc, dst_enc);</div><div class='del'>-        } else {</div><div class='del'>-            rb_ivar_set(val, ID_at_enc, ENCODING_NAME_UTF8);</div><div class='del'>-        }</div><div class='del'>-        return val;</div><div class='del'>-    } else {</div><div class='del'>-        return rb_apply(cTclTkLib, ID_merge_tklist, dst);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ary2list2(ary, enc_flag, self)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE enc_flag;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    int idx, size, req_chk_flag;</div><div class='del'>-    volatile VALUE val, str_val;</div><div class='del'>-    volatile VALUE dst;</div><div class='del'>-    volatile VALUE sys_enc, dst_enc, str_enc;</div><div class='del'>-</div><div class='del'>-    sys_enc = rb_funcall(cTclTkLib, ID_encoding, 0, 0);</div><div class='del'>-    if NIL_P(sys_enc) {</div><div class='del'>-      sys_enc = rb_funcall(cTclTkLib, ID_encoding_system, 0, 0);</div><div class='del'>-      sys_enc = rb_funcall(sys_enc, ID_to_s, 0, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if NIL_P(enc_flag) {</div><div class='del'>-        dst_enc = sys_enc;</div><div class='del'>-        req_chk_flag = 1;</div><div class='del'>-    } else if (TYPE(enc_flag) == T_TRUE || TYPE(enc_flag) == T_FALSE) {</div><div class='del'>-        dst_enc = enc_flag;</div><div class='del'>-        req_chk_flag = 0;</div><div class='del'>-    } else {</div><div class='del'>-        dst_enc = rb_funcall(enc_flag, ID_to_s, 0, 0);</div><div class='del'>-        req_chk_flag = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    size = RARRAY_LEN(ary);</div><div class='del'>-    dst = rb_ary_new2(size);</div><div class='del'>-    for(idx = 0; idx &lt; RARRAY_LEN(ary); idx++) {</div><div class='del'>-        val = RARRAY_PTR(ary)[idx];</div><div class='del'>-        str_val = Qnil;</div><div class='del'>-        switch(TYPE(val)) {</div><div class='del'>-        case T_ARRAY:</div><div class='del'>-            str_val = ary2list(val, enc_flag, self);</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        case T_HASH:</div><div class='del'>-            if (RTEST(enc_flag)) {</div><div class='del'>-                str_val = hash2list(val, self);</div><div class='del'>-            } else {</div><div class='del'>-                str_val = hash2list_enc(val, self);</div><div class='del'>-            }</div><div class='del'>-            break;</div><div class='del'>-</div><div class='del'>-        default:</div><div class='del'>-            if (val != TK_None) {</div><div class='del'>-                str_val = get_eval_string_core(val, enc_flag, self);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!NIL_P(str_val)) {</div><div class='del'>-            rb_ary_push(dst, str_val);</div><div class='del'>-</div><div class='del'>-            if (req_chk_flag) {</div><div class='del'>-                str_enc = rb_ivar_get(str_val, ID_at_enc);</div><div class='del'>-                if (!NIL_P(str_enc)) {</div><div class='del'>-                    str_enc = rb_funcall(str_enc, ID_to_s, 0, 0);</div><div class='del'>-                } else {</div><div class='del'>-                    str_enc = sys_enc;</div><div class='del'>-                }</div><div class='del'>-                if (!rb_str_cmp(str_enc, dst_enc)) {</div><div class='del'>-                    dst_enc = Qtrue;</div><div class='del'>-                    req_chk_flag = 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'>-    if (RTEST(dst_enc) &amp;&amp; !NIL_P(sys_enc)) {</div><div class='del'>-        for(idx = 0; idx &lt; RARRAY_LEN(dst); idx++) {</div><div class='del'>-            str_val = RARRAY_PTR(dst)[idx];</div><div class='del'>-            if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {</div><div class='del'>-                str_val = rb_funcall(self, ID_toUTF8, 1, str_val);</div><div class='del'>-            } else {</div><div class='del'>-                str_val = rb_funcall(cTclTkLib, ID_toUTF8, 1, str_val);</div><div class='del'>-            }</div><div class='del'>-            RARRAY_PTR(dst)[idx] = str_val;</div><div class='del'>-        }</div><div class='del'>-        val = rb_apply(cTclTkLib, ID_merge_tklist, dst);</div><div class='del'>-        if (TYPE(dst_enc) == T_STRING) {</div><div class='del'>-            val = rb_funcall(cTclTkLib, ID_fromUTF8, 2, val, dst_enc);</div><div class='del'>-            rb_ivar_set(val, ID_at_enc, dst_enc);</div><div class='del'>-        } else {</div><div class='del'>-            rb_ivar_set(val, ID_at_enc, ENCODING_NAME_UTF8);</div><div class='del'>-        }</div><div class='del'>-        return val;</div><div class='del'>-    } else {</div><div class='del'>-        return rb_apply(cTclTkLib, ID_merge_tklist, dst);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-key2keyname(key)</div><div class='del'>-    VALUE key;</div><div class='del'>-{</div><div class='del'>-    return rb_str_append(rb_str_new2("-"), rb_funcall(key, ID_to_s, 0, 0));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-assoc2kv(assoc, ary, self)</div><div class='del'>-    VALUE assoc;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    int i, j, len;</div><div class='del'>-    volatile VALUE pair;</div><div class='del'>-    volatile VALUE val;</div><div class='del'>-    volatile VALUE dst = rb_ary_new2(2 * RARRAY_LEN(assoc));</div><div class='del'>-</div><div class='del'>-    len = RARRAY_LEN(assoc);</div><div class='del'>-</div><div class='del'>-    for(i = 0; i &lt; len; i++) {</div><div class='del'>-        pair = RARRAY_PTR(assoc)[i];</div><div class='del'>-        if (TYPE(pair) != T_ARRAY) {</div><div class='del'>-            rb_ary_push(dst, key2keyname(pair));</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-        switch(RARRAY_LEN(assoc)) {</div><div class='del'>-        case 2:</div><div class='del'>-            rb_ary_push(dst, RARRAY_PTR(pair)[2]);</div><div class='del'>-</div><div class='del'>-        case 1:</div><div class='del'>-            rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0]));</div><div class='del'>-</div><div class='del'>-        case 0:</div><div class='del'>-            continue;</div><div class='del'>-</div><div class='del'>-        default:</div><div class='del'>-            rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0]));</div><div class='del'>-</div><div class='del'>-            val = rb_ary_new2(RARRAY_LEN(pair) - 1);</div><div class='del'>-            for(j = 1; j &lt; RARRAY_LEN(pair); j++) {</div><div class='del'>-                rb_ary_push(val, RARRAY_PTR(pair)[j]);</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            rb_ary_push(dst, val);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (NIL_P(ary)) {</div><div class='del'>-        return dst;</div><div class='del'>-    } else {</div><div class='del'>-        return rb_ary_plus(ary, dst);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-assoc2kv_enc(assoc, ary, self)</div><div class='del'>-    VALUE assoc;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    int i, j, len;</div><div class='del'>-    volatile VALUE pair;</div><div class='del'>-    volatile VALUE val;</div><div class='del'>-    volatile VALUE dst = rb_ary_new2(2 * RARRAY_LEN(assoc));</div><div class='del'>-</div><div class='del'>-    len = RARRAY_LEN(assoc);</div><div class='del'>-</div><div class='del'>-    for(i = 0; i &lt; len; i++) {</div><div class='del'>-        pair = RARRAY_PTR(assoc)[i];</div><div class='del'>-        if (TYPE(pair) != T_ARRAY) {</div><div class='del'>-            rb_ary_push(dst, key2keyname(pair));</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-        switch(RARRAY_LEN(assoc)) {</div><div class='del'>-        case 2:</div><div class='del'>-            rb_ary_push(dst, get_eval_string_core(RARRAY_PTR(pair)[2], Qtrue, self));</div><div class='del'>-</div><div class='del'>-        case 1:</div><div class='del'>-            rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0]));</div><div class='del'>-</div><div class='del'>-        case 0:</div><div class='del'>-            continue;</div><div class='del'>-</div><div class='del'>-        default:</div><div class='del'>-            rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0]));</div><div class='del'>-</div><div class='del'>-            val = rb_ary_new2(RARRAY_LEN(pair) - 1);</div><div class='del'>-            for(j = 1; j &lt; RARRAY_LEN(pair); j++) {</div><div class='del'>-                rb_ary_push(val, RARRAY_PTR(pair)[j]);</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            rb_ary_push(dst, get_eval_string_core(val, Qtrue, self));</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (NIL_P(ary)) {</div><div class='del'>-        return dst;</div><div class='del'>-    } else {</div><div class='del'>-        return rb_ary_plus(ary, dst);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-push_kv(key, val, args)</div><div class='del'>-    VALUE key;</div><div class='del'>-    VALUE val;</div><div class='del'>-    VALUE args;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = RARRAY_PTR(args)[0];</div><div class='del'>-</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-#if 0</div><div class='del'>-    rb_ary_push(ary, key2keyname(key));</div><div class='del'>-    if (val != TK_None) rb_ary_push(ary, val);</div><div class='del'>-#endif</div><div class='del'>-    rb_ary_push(ary, key2keyname(key));</div><div class='del'>-</div><div class='del'>-    if (val == TK_None) return ST_CHECK;</div><div class='del'>-</div><div class='del'>-    rb_ary_push(ary, get_eval_string_core(val, Qnil, RARRAY_PTR(args)[1]));</div><div class='del'>-</div><div class='del'>-    return ST_CHECK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hash2kv(hash, ary, self)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE dst = rb_ary_new2(2 * RHASH_SIZE(hash));</div><div class='del'>-    volatile VALUE args = rb_ary_new3(2, dst, self);</div><div class='del'>-</div><div class='del'>-    st_foreach(RHASH_TBL(hash), push_kv, args);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(ary)) {</div><div class='del'>-        return dst;</div><div class='del'>-    } else {</div><div class='del'>-        return rb_ary_concat(ary, dst);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-push_kv_enc(key, val, args)</div><div class='del'>-    VALUE key;</div><div class='del'>-    VALUE val;</div><div class='del'>-    VALUE args;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = RARRAY_PTR(args)[0];</div><div class='del'>-</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-#if 0</div><div class='del'>-    rb_ary_push(ary, key2keyname(key));</div><div class='del'>-    if (val != TK_None) {</div><div class='del'>-        rb_ary_push(ary, get_eval_string_core(val, Qtrue, </div><div class='del'>-                                              RARRAY_PTR(args)[1]));</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    rb_ary_push(ary, key2keyname(key));</div><div class='del'>-</div><div class='del'>-    if (val == TK_None) return ST_CHECK;</div><div class='del'>-</div><div class='del'>-    rb_ary_push(ary, get_eval_string_core(val, Qtrue, RARRAY_PTR(args)[1]));</div><div class='del'>-</div><div class='del'>-    return ST_CHECK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hash2kv_enc(hash, ary, self)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE dst = rb_ary_new2(2 * RHASH_SIZE(hash));</div><div class='del'>-    volatile VALUE args = rb_ary_new3(2, dst, self);</div><div class='del'>-</div><div class='del'>-    st_foreach(RHASH_TBL(hash), push_kv_enc, args);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(ary)) {</div><div class='del'>-        return dst;</div><div class='del'>-    } else {</div><div class='del'>-        return rb_ary_concat(ary, dst);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hash2list(hash, self)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return ary2list2(hash2kv(hash, Qnil, self), Qfalse, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hash2list_enc(hash, self)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return ary2list2(hash2kv_enc(hash, Qnil, self), Qfalse, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_hash_kv(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'>-    volatile VALUE hash, enc_flag, ary;</div><div class='del'>-</div><div class='del'>-    ary = Qnil;</div><div class='del'>-    enc_flag = Qnil;</div><div class='del'>-    switch(argc) {</div><div class='del'>-    case 3:</div><div class='del'>-        ary = argv[2];</div><div class='del'>-    case 2:</div><div class='del'>-        enc_flag = argv[1];</div><div class='del'>-    case 1:</div><div class='del'>-        hash = argv[0];</div><div class='del'>-        break;</div><div class='del'>-    case 0:</div><div class='del'>-        rb_raise(rb_eArgError, "too few arguments");</div><div class='del'>-    default: /* &gt;= 3 */</div><div class='del'>-        rb_raise(rb_eArgError, "too many arguments");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch(TYPE(hash)) {</div><div class='del'>-    case T_ARRAY:</div><div class='del'>-        if (RTEST(enc_flag)) {</div><div class='del'>-            return assoc2kv_enc(hash, ary, self);</div><div class='del'>-        } else {</div><div class='del'>-            return assoc2kv(hash, ary, self);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    case T_HASH:</div><div class='del'>-        if (RTEST(enc_flag)) {</div><div class='del'>-            return hash2kv_enc(hash, ary, self);</div><div class='del'>-        } else {</div><div class='del'>-            return hash2kv(hash, ary, self);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    case T_NIL:</div><div class='del'>-        if (NIL_P(ary)) {</div><div class='del'>-            return rb_ary_new();</div><div class='del'>-        } else {</div><div class='del'>-            return ary;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    default:</div><div class='del'>-        if (hash == TK_None) {</div><div class='del'>-            if (NIL_P(ary)) {</div><div class='del'>-                return rb_ary_new();</div><div class='del'>-            } else {</div><div class='del'>-                return ary;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        rb_raise(rb_eArgError, "Hash is expected for 1st argument");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-get_eval_string_core(obj, enc_flag, self)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE enc_flag;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    switch(TYPE(obj)) {</div><div class='del'>-    case T_FLOAT:</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-        return rb_funcall(obj, ID_to_s, 0, 0);</div><div class='del'>-</div><div class='del'>-    case T_STRING:</div><div class='del'>-        if (RTEST(enc_flag)) {</div><div class='del'>-            if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {</div><div class='del'>-                return rb_funcall(self, ID_toUTF8, 1, obj);</div><div class='del'>-            } else {</div><div class='del'>-                return fromDefaultEnc_toUTF8(obj, self);</div><div class='del'>-            }</div><div class='del'>-        } else {</div><div class='del'>-            return obj;</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    case T_SYMBOL:</div><div class='del'>-        if (RTEST(enc_flag)) {</div><div class='del'>-            if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) {</div><div class='del'>-                return rb_funcall(self, ID_toUTF8, 1, </div><div class='del'>-                                  rb_str_new2(rb_id2name(SYM2ID(obj))));</div><div class='del'>-            } else {</div><div class='del'>-                return fromDefaultEnc_toUTF8(rb_str_new2(rb_id2name(SYM2ID(obj))), self);</div><div class='del'>-            }</div><div class='del'>-        } else {</div><div class='del'>-#ifdef RUBY_VM</div><div class='del'>-            return rb_sym_to_s(obj);</div><div class='del'>-#else</div><div class='del'>-            return rb_str_new2(rb_id2name(SYM2ID(obj)));</div><div class='del'>-#endif</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    case T_HASH:</div><div class='del'>-        if (RTEST(enc_flag)) {</div><div class='del'>-            return hash2list_enc(obj, self);</div><div class='del'>-        } else {</div><div class='del'>-            return hash2list(obj, self);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-    case T_ARRAY:</div><div class='del'>-        return ary2list(obj, enc_flag, self);</div><div class='del'>-</div><div class='del'>-    case T_FALSE:</div><div class='del'>-        return rb_str_new2("0");</div><div class='del'>-</div><div class='del'>-    case T_TRUE:</div><div class='del'>-        return rb_str_new2("1");</div><div class='del'>-</div><div class='del'>-    case T_NIL:</div><div class='del'>-        return rb_str_new2("");</div><div class='del'>-</div><div class='del'>-    case T_REGEXP:</div><div class='del'>-        return rb_funcall(obj, ID_source, 0, 0);</div><div class='del'>-</div><div class='del'>-    default:</div><div class='del'>-        if (rb_obj_is_kind_of(obj, cTkObject)) {</div><div class='del'>-            /* return rb_str_new3(rb_funcall(obj, ID_path, 0, 0)); */</div><div class='del'>-            return get_eval_string_core(rb_funcall(obj, ID_path, 0, 0), </div><div class='del'>-                                        enc_flag, self);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (rb_obj_is_kind_of(obj, rb_cProc)</div><div class='del'>-            || rb_obj_is_kind_of(obj, cMethod)</div><div class='del'>-            || rb_obj_is_kind_of(obj, cTkCallbackEntry)) {</div><div class='del'>-            if (rb_obj_respond_to(self, ID_install_cmd, Qtrue)) {</div><div class='del'>-                return rb_funcall(self, ID_install_cmd, 1, obj);</div><div class='del'>-            } else {</div><div class='del'>-                return tk_install_cmd_core(obj);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (obj == TK_None)  return Qnil;</div><div class='del'>-</div><div class='del'>-        if (rb_obj_respond_to(obj, ID_to_eval, Qtrue)) {</div><div class='del'>-            /* return rb_funcall(obj, ID_to_eval, 0, 0); */</div><div class='del'>-            return get_eval_string_core(rb_funcall(obj, ID_to_eval, 0, 0), </div><div class='del'>-                                        enc_flag, self);</div><div class='del'>-        } else if (rb_obj_respond_to(obj, ID_path, Qtrue)) {</div><div class='del'>-            /* return rb_funcall(obj, ID_path, 0, 0); */</div><div class='del'>-            return get_eval_string_core(rb_funcall(obj, ID_path, 0, 0), </div><div class='del'>-                                        enc_flag, self);</div><div class='del'>-        } else if (rb_obj_respond_to(obj, ID_to_s, Qtrue)) {</div><div class='del'>-            return rb_funcall(obj, ID_to_s, 0, 0);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_warning("fail to convert '%s' to string for Tk", </div><div class='del'>-               RSTRING_PTR(rb_funcall(obj, rb_intern("inspect"), 0, 0)));</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'>-tk_get_eval_string(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'>-    volatile VALUE obj, enc_flag;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;obj, &amp;enc_flag) == 1) {</div><div class='del'>-        enc_flag = Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return get_eval_string_core(obj, enc_flag, self);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_get_eval_enc_str(self, obj)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (obj == TK_None) {</div><div class='del'>-        return obj;</div><div class='del'>-    } else {</div><div class='del'>-        return get_eval_string_core(obj, Qtrue, self);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tk_conv_args(argc, argv, self)</div><div class='del'>-    int   argc;</div><div class='del'>-    VALUE *argv; /* [0]:base_array, [1]:enc_mode, [2]..[n]:args */</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    int idx, size;</div><div class='del'>-    volatile VALUE dst;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    VALUE old_gc;</div><div class='del'>-</div><div class='del'>-    if (argc &lt; 2) {</div><div class='del'>-      rb_raise(rb_eArgError, "too few arguments");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-    old_gc = rb_gc_disable();</div><div class='del'>-</div><div class='del'>-    for(size = 0, idx = 2; idx &lt; argc; idx++) {</div><div class='del'>-        if (TYPE(argv[idx]) == T_HASH) {</div><div class='del'>-            size += 2 * RHASH_SIZE(argv[idx]);</div><div class='del'>-        } else {</div><div class='del'>-            size++;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* dst = rb_ary_new2(argc - 2); */</div><div class='del'>-    dst = rb_ary_new2(size);</div><div class='del'>-    for(idx = 2; idx &lt; argc; idx++) {</div><div class='del'>-        if (TYPE(argv[idx]) == T_HASH) {</div><div class='del'>-            if (RTEST(argv[1])) {</div><div class='del'>-                hash2kv_enc(argv[idx], dst, self);</div><div class='del'>-            } else {</div><div class='del'>-                hash2kv(argv[idx], dst, self);</div><div class='del'>-            }</div><div class='del'>-        } else if (argv[idx] != TK_None) {</div><div class='del'>-            rb_ary_push(dst, get_eval_string_core(argv[idx], argv[1], self));</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (old_gc == Qfalse) rb_gc_enable();</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    return rb_ary_plus(argv[0], dst);</div><div class='del'>-}</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'>-tcl2rb_bool(self, value)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    if (TYPE(value) == T_FIXNUM) {</div><div class='del'>-        if (NUM2INT(value) == 0) {</div><div class='del'>-            return Qfalse;</div><div class='del'>-        } else {</div><div class='del'>-            return Qtrue;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (TYPE(value) == T_TRUE || TYPE(value) == T_FALSE) {</div><div class='del'>-        return value;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_check_type(value, T_STRING);</div><div class='del'>-</div><div class='del'>-    value = rb_funcall(value, ID_downcase, 0);</div><div class='del'>-</div><div class='del'>-    if (RSTRING_PTR(value) == (char*)NULL) return Qnil;</div><div class='del'>-</div><div class='del'>-    if (RSTRING_PTR(value)[0] == '\0'</div><div class='del'>-        || strcmp(RSTRING_PTR(value), "0") == 0</div><div class='del'>-        || strcmp(RSTRING_PTR(value), "no") == 0</div><div class='del'>-        || strcmp(RSTRING_PTR(value), "off") == 0</div><div class='del'>-        || strcmp(RSTRING_PTR(value), "false") == 0) {</div><div class='del'>-        return Qfalse;</div><div class='del'>-    } else {</div><div class='del'>-        return Qtrue;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tkstr_to_dec(value)</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    return rb_cstr_to_inum(RSTRING_PTR(value), 10, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tkstr_to_int(value)</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    return rb_cstr_to_inum(RSTRING_PTR(value), 0, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tkstr_to_float(value)</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    return rb_float_new(rb_cstr_to_dbl(RSTRING_PTR(value), 1));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tkstr_invalid_numstr(value)</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eArgError, </div><div class='del'>-             "invalid value for Number: '%s'", RSTRING_PTR(value));</div><div class='del'>-    return Qnil; /*dummy*/</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tkstr_rescue_float(value)</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    return rb_rescue2(tkstr_to_float, value, </div><div class='del'>-                      tkstr_invalid_numstr, value, </div><div class='del'>-                      rb_eArgError, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tkstr_to_number(value)</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    rb_check_type(value, T_STRING);</div><div class='del'>-</div><div class='del'>-    if (RSTRING_PTR(value) == (char*)NULL) return INT2FIX(0);</div><div class='del'>-</div><div class='del'>-    return rb_rescue2(tkstr_to_int, value, </div><div class='del'>-                      tkstr_rescue_float, value, </div><div class='del'>-                      rb_eArgError, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tcl2rb_number(self, value)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    return tkstr_to_number(value);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tkstr_to_str(value)</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    char * ptr;</div><div class='del'>-    int len;</div><div class='del'>-</div><div class='del'>-    ptr = RSTRING_PTR(value);</div><div class='del'>-    len = RSTRING_LEN(value);</div><div class='del'>-</div><div class='del'>-    if (len &gt; 1 &amp;&amp; *ptr == '{' &amp;&amp; *(ptr + len - 1) == '}') {</div><div class='del'>-        return rb_str_new(ptr + 1, len - 2);</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'>-tcl2rb_string(self, value)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    rb_check_type(value, T_STRING);</div><div class='del'>-</div><div class='del'>-    if (RSTRING_PTR(value) == (char*)NULL) return rb_tainted_str_new2("");</div><div class='del'>-</div><div class='del'>-    return tkstr_to_str(value);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-tcl2rb_num_or_str(self, value)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE value;</div><div class='del'>-{</div><div class='del'>-    rb_check_type(value, T_STRING);</div><div class='del'>-</div><div class='del'>-    if (RSTRING_PTR(value) == (char*)NULL) return rb_tainted_str_new2("");</div><div class='del'>-</div><div class='del'>-    return rb_rescue2(tkstr_to_number, value, </div><div class='del'>-                      tkstr_to_str, value, </div><div class='del'>-                      rb_eArgError, 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'>-#define CBSUBST_TBL_MAX (256)</div><div class='del'>-struct cbsubst_info {</div><div class='del'>-    int   full_subst_length;</div><div class='del'>-    int   keylen[CBSUBST_TBL_MAX];</div><div class='del'>-    unsigned char  *key[CBSUBST_TBL_MAX];</div><div class='del'>-    unsigned char  type[CBSUBST_TBL_MAX];</div><div class='del'>-    ID    ivar[CBSUBST_TBL_MAX];</div><div class='del'>-    VALUE proc;</div><div class='del'>-    VALUE aliases;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-subst_mark(ptr)</div><div class='del'>-    struct cbsubst_info *ptr;</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(ptr-&gt;proc);</div><div class='del'>-    rb_gc_mark(ptr-&gt;aliases);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-subst_free(ptr)</div><div class='del'>-    struct cbsubst_info *ptr;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    if (ptr) {</div><div class='del'>-      for(i = 0; i &lt; CBSUBST_TBL_MAX; i++) {</div><div class='del'>-	if (ptr-&gt;key[i] != (unsigned char *)NULL) {</div><div class='del'>-	  free(ptr-&gt;key[i]);</div><div class='del'>-	  ptr-&gt;key[i] = (unsigned char *)NULL;</div><div class='del'>-	}</div><div class='del'>-      }</div><div class='del'>-      free(ptr);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct cbsubst_info *</div><div class='del'>-allocate_cbsubst_info()</div><div class='del'>-{</div><div class='del'>-  struct cbsubst_info *inf;</div><div class='del'>-  volatile VALUE proc, aliases;</div><div class='del'>-  int idx;</div><div class='del'>-</div><div class='del'>-  inf = ALLOC(struct cbsubst_info);</div><div class='del'>-</div><div class='del'>-  inf-&gt;full_subst_length = 0;</div><div class='del'>-</div><div class='del'>-  for(idx = 0; idx &lt; CBSUBST_TBL_MAX; idx++) {</div><div class='del'>-    inf-&gt;keylen[idx] = 0;</div><div class='del'>-    inf-&gt;key[idx]    = (unsigned char *) NULL;</div><div class='del'>-    inf-&gt;type[idx]   = '\0';</div><div class='del'>-    inf-&gt;ivar[idx]   = (ID) 0;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  proc = rb_hash_new();</div><div class='del'>-  inf-&gt;proc = proc;</div><div class='del'>-</div><div class='del'>-  aliases = rb_hash_new();</div><div class='del'>-  inf-&gt;aliases = aliases;</div><div class='del'>-</div><div class='del'>-  return inf;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-cbsubst_init()</div><div class='del'>-{</div><div class='del'>-    rb_const_set(cCB_SUBST, ID_SUBST_INFO, </div><div class='del'>-		 Data_Wrap_Struct(cSUBST_INFO, subst_mark, subst_free, </div><div class='del'>-				  allocate_cbsubst_info()));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cbsubst_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'>-    struct cbsubst_info *inf;</div><div class='del'>-    int idx, iv_idx;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(rb_const_get(rb_obj_class(self), ID_SUBST_INFO), </div><div class='del'>-                    struct cbsubst_info, inf);</div><div class='del'>-</div><div class='del'>-   idx = 0;</div><div class='del'>-    for(iv_idx = 0; iv_idx &lt; CBSUBST_TBL_MAX; iv_idx++) {</div><div class='del'>-      if ( inf-&gt;ivar[iv_idx] == (ID) 0 ) continue;</div><div class='del'>-      rb_ivar_set(self, inf-&gt;ivar[iv_idx], argv[idx++]);</div><div class='del'>-      if (idx &gt;= argc) break;</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'>-cbsubst_ret_val(self, val)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    /* This method may be overwritten on some sub-classes.                  */</div><div class='del'>-    /* This method is used for converting from ruby's callback-return-value */</div><div class='del'>-    /* to tcl's value (e.g. validation procedure of entry widget).          */</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-each_attr_def(key, value, klass)</div><div class='del'>-    VALUE key, value, klass;</div><div class='del'>-{</div><div class='del'>-    ID key_id, value_id;</div><div class='del'>-</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-</div><div class='del'>-    switch(TYPE(key)) {</div><div class='del'>-    case T_STRING:</div><div class='del'>-        key_id = rb_intern(RSTRING_PTR(key));</div><div class='del'>-        break;</div><div class='del'>-    case T_SYMBOL:</div><div class='del'>-        key_id = SYM2ID(key);</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        rb_raise(rb_eArgError, </div><div class='del'>-                 "includes invalid key(s). expected a String or a Symbol");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch(TYPE(value)) {</div><div class='del'>-    case T_STRING:</div><div class='del'>-        value_id = rb_intern(RSTRING_PTR(value));</div><div class='del'>-        break;</div><div class='del'>-    case T_SYMBOL:</div><div class='del'>-        value_id = SYM2ID(value);</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        rb_raise(rb_eArgError, </div><div class='del'>-                 "includes invalid value(s). expected a String or a Symbol");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_alias(klass, key_id, value_id);</div><div class='del'>-</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cbsubst_def_attr_aliases(self, tbl)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE tbl;</div><div class='del'>-{</div><div class='del'>-    struct cbsubst_info *inf;</div><div class='del'>-</div><div class='del'>-    if (TYPE(tbl) != T_HASH) {</div><div class='del'>-        rb_raise(rb_eArgError, "expected a Hash");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(rb_const_get(self, ID_SUBST_INFO), </div><div class='del'>-                    struct cbsubst_info, inf);</div><div class='del'>-</div><div class='del'>-    rb_hash_foreach(tbl, each_attr_def, self);</div><div class='del'>-</div><div class='del'>-    return rb_funcall(inf-&gt;aliases, rb_intern("update"), 1, tbl);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cbsubst_sym_to_subst(self, sym)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE sym;</div><div class='del'>-{</div><div class='del'>-    struct cbsubst_info *inf;</div><div class='del'>-    const char *str;</div><div class='del'>-    unsigned char *buf, *ptr;</div><div class='del'>-    int idx, len;</div><div class='del'>-    ID id;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-</div><div class='del'>-    if (TYPE(sym) != T_SYMBOL) return sym;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(rb_const_get(self, ID_SUBST_INFO), </div><div class='del'>-                    struct cbsubst_info, inf);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(ret = rb_hash_aref(inf-&gt;aliases, sym))) {</div><div class='del'>-      str = rb_id2name(SYM2ID(ret));</div><div class='del'>-    } else {</div><div class='del'>-      str = rb_id2name(SYM2ID(sym));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    id = rb_intern(RSTRING_PTR(rb_str_cat2(rb_str_new2("@"), str)));</div><div class='del'>-</div><div class='del'>-    for(idx = 0; idx &lt; CBSUBST_TBL_MAX; idx++) {</div><div class='del'>-      if (inf-&gt;ivar[idx] == id) break;</div><div class='del'>-    }</div><div class='del'>-    if (idx &gt;= CBSUBST_TBL_MAX)  return sym;</div><div class='del'>-</div><div class='del'>-    ptr = buf = ALLOC_N(char, inf-&gt;full_subst_length + 1);</div><div class='del'>-</div><div class='del'>-    *(ptr++) = '%';</div><div class='del'>-</div><div class='del'>-    if (len = inf-&gt;keylen[idx]) {</div><div class='del'>-      /* longname */</div><div class='del'>-      strncpy(ptr, inf-&gt;key[idx], len);</div><div class='del'>-      ptr += len;</div><div class='del'>-    } else {</div><div class='del'>-      /* single char */</div><div class='del'>-      *(ptr++) = idx;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    *(ptr++) = ' ';</div><div class='del'>-    *(ptr++) = '\0';</div><div class='del'>-</div><div class='del'>-    ret = rb_str_new2(buf);</div><div class='del'>-</div><div class='del'>-    free(buf);</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'>-cbsubst_get_subst_arg(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'>-    struct cbsubst_info *inf;</div><div class='del'>-    const char *str;</div><div class='del'>-    unsigned char *buf, *ptr;</div><div class='del'>-    int i, idx, len;</div><div class='del'>-    ID id;</div><div class='del'>-    volatile VALUE arg_sym, ret;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(rb_const_get(self, ID_SUBST_INFO), </div><div class='del'>-                    struct cbsubst_info, inf);</div><div class='del'>-</div><div class='del'>-    ptr = buf = ALLOC_N(char, inf-&gt;full_subst_length + 1);</div><div class='del'>-</div><div class='del'>-    for(i = 0; i &lt; argc; i++) {</div><div class='del'>-        switch(TYPE(argv[i])) {</div><div class='del'>-        case T_STRING:</div><div class='del'>-            str = RSTRING_PTR(argv[i]);</div><div class='del'>-            arg_sym = ID2SYM(rb_intern(str));</div><div class='del'>-            break;</div><div class='del'>-        case T_SYMBOL:</div><div class='del'>-            arg_sym = argv[i];</div><div class='del'>-            str = rb_id2name(SYM2ID(arg_sym));</div><div class='del'>-            break;</div><div class='del'>-        default:</div><div class='del'>-            rb_raise(rb_eArgError, "arg #%d is not a String or a Symbol", i);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        if (!NIL_P(ret = rb_hash_aref(inf-&gt;aliases, arg_sym))) {</div><div class='del'>-            str = rb_id2name(SYM2ID(ret));</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        id = rb_intern(RSTRING_PTR(rb_str_cat2(rb_str_new2("@"), str)));</div><div class='del'>-</div><div class='del'>-	for(idx = 0; idx &lt; CBSUBST_TBL_MAX; idx++) {</div><div class='del'>-	  if (inf-&gt;ivar[idx] == id) break;</div><div class='del'>-	}</div><div class='del'>-        if (idx &gt;= CBSUBST_TBL_MAX) {</div><div class='del'>-            rb_raise(rb_eArgError, "cannot find attribute :%s", str);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-	*(ptr++) = '%';</div><div class='del'>-</div><div class='del'>-	if (len = inf-&gt;keylen[idx]) {</div><div class='del'>-	  /* longname */</div><div class='del'>-	  strncpy(ptr, inf-&gt;key[idx], len);</div><div class='del'>-	  ptr += len;</div><div class='del'>-	} else {</div><div class='del'>-	  /* single char */</div><div class='del'>-	  *(ptr++) = idx;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	*(ptr++) = ' ';</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    *ptr = '\0';</div><div class='del'>-</div><div class='del'>-    ret = rb_str_new2(buf);</div><div class='del'>-</div><div class='del'>-    free(buf);</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'>-cbsubst_get_subst_key(self, str)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    struct cbsubst_info *inf;</div><div class='del'>-    volatile VALUE list;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-    VALUE keyval;</div><div class='del'>-    int i, len, keylen, idx;</div><div class='del'>-    unsigned char *buf, *ptr, *key;</div><div class='del'>-</div><div class='del'>-    list = rb_funcall(cTclTkLib, ID_split_tklist, 1, str);</div><div class='del'>-    len = RARRAY_LEN(list);</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(rb_const_get(self, ID_SUBST_INFO), </div><div class='del'>-                    struct cbsubst_info, inf);</div><div class='del'>-</div><div class='del'>-    ptr = buf = ALLOC_N(unsigned char, inf-&gt;full_subst_length + len + 1);</div><div class='del'>-</div><div class='del'>-    for(i = 0; i &lt; len; i++) {</div><div class='del'>-      keyval = RARRAY_PTR(list)[i];</div><div class='del'>-      key = (unsigned char*)RSTRING_PTR(keyval);</div><div class='del'>-      if (*key == '%') {</div><div class='del'>-	if (*(key + 2) == '\0') {</div><div class='del'>-	  /* single char */</div><div class='del'>-	  *(ptr++) = *(key + 1);</div><div class='del'>-	} else {</div><div class='del'>-	  /* search longname-key */</div><div class='del'>-	  keylen = RSTRING_LEN(keyval) - 1;</div><div class='del'>-	  for(idx = 0; idx &lt; CBSUBST_TBL_MAX; idx++) {</div><div class='del'>-	    if (inf-&gt;keylen[idx] != keylen) continue;</div><div class='del'>-	    if (inf-&gt;key[idx][0] != *(key + 1)) continue;</div><div class='del'>-	    if (strncmp(inf-&gt;key[idx], key + 1, keylen)) continue;</div><div class='del'>-	    break;</div><div class='del'>-	  }</div><div class='del'>-	  if (idx &lt; CBSUBST_TBL_MAX) {</div><div class='del'>-	    *(ptr++) = (unsigned char)idx;</div><div class='del'>-	  } else {</div><div class='del'>-	    *(ptr++) = ' ';</div><div class='del'>-	  }</div><div class='del'>-	}</div><div class='del'>-      } else {</div><div class='del'>-	*(ptr++) = ' ';</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    *ptr = '\0';</div><div class='del'>-</div><div class='del'>-    ret = rb_str_new2((const char*)buf);</div><div class='del'>-    free(buf);</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cbsubst_get_all_subst_keys(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct cbsubst_info *inf;</div><div class='del'>-    unsigned char *buf, *ptr;</div><div class='del'>-    unsigned char *keys_buf, *keys_ptr;</div><div class='del'>-    int idx, len;</div><div class='del'>-    volatile VALUE ret;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(rb_const_get(self, ID_SUBST_INFO), </div><div class='del'>-                    struct cbsubst_info, inf);</div><div class='del'>-</div><div class='del'>-    ptr = buf = ALLOC_N(unsigned char, inf-&gt;full_subst_length + 1);</div><div class='del'>-    keys_ptr = keys_buf = ALLOC_N(unsigned char, CBSUBST_TBL_MAX + 1);</div><div class='del'>-</div><div class='del'>-    for(idx = 0; idx &lt; CBSUBST_TBL_MAX; idx++) {</div><div class='del'>-      if (inf-&gt;ivar[idx] == (ID) 0) continue;</div><div class='del'>-</div><div class='del'>-      *(keys_ptr++) = (unsigned char)idx;</div><div class='del'>-</div><div class='del'>-      *(ptr++) = '%';</div><div class='del'>-</div><div class='del'>-      if (len = inf-&gt;keylen[idx]) {</div><div class='del'>-	/* longname */</div><div class='del'>-	strncpy(ptr, inf-&gt;key[idx], len);</div><div class='del'>-	ptr += len;</div><div class='del'>-      } else {</div><div class='del'>-	/* single char */</div><div class='del'>-	*(ptr++) = (unsigned char)idx;</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      *(ptr++) = ' ';</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    *ptr = '\0';</div><div class='del'>-    *keys_ptr = '\0';</div><div class='del'>-</div><div class='del'>-    ret = rb_ary_new3(2, rb_str_new2(keys_buf), rb_str_new2((const char*)buf));</div><div class='del'>-</div><div class='del'>-    free(buf);</div><div class='del'>-    free(keys_buf);</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'>-cbsubst_table_setup(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'>-  volatile VALUE key_inf;</div><div class='del'>-  volatile VALUE longkey_inf;</div><div class='del'>-  volatile VALUE proc_inf;</div><div class='del'>-  VALUE inf;</div><div class='del'>-  ID id;</div><div class='del'>-  struct cbsubst_info *subst_inf;</div><div class='del'>-  int idx, len;</div><div class='del'>-  unsigned char chr;</div><div class='del'>-</div><div class='del'>-  /* accept (key_inf, proc_inf) or (key_inf, longkey_inf, procinf) */</div><div class='del'>-  if (rb_scan_args(argc, argv, "21", &amp;key_inf, &amp;longkey_inf, &amp;proc_inf) == 2) {</div><div class='del'>-    proc_inf = longkey_inf;</div><div class='del'>-    longkey_inf = rb_ary_new();</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /* check the number of longkeys */</div><div class='del'>-  if (RARRAY_LEN(longkey_inf) &gt; 125 /* from 0x80 to 0xFD */) {</div><div class='del'>-    rb_raise(rb_eArgError, "too many longname-key definitions");</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /* init */</div><div class='del'>-  subst_inf = allocate_cbsubst_info();</div><div class='del'>-</div><div class='del'>-  /*</div><div class='del'>-   * keys : array of [subst, type, ivar]</div><div class='del'>-   *         subst ==&gt; char code or string</div><div class='del'>-   *         type  ==&gt; char code or string</div><div class='del'>-   *         ivar  ==&gt; symbol</div><div class='del'>-   */</div><div class='del'>-  len = RARRAY_LEN(key_inf);</div><div class='del'>-  for(idx = 0; idx &lt; len; idx++) {</div><div class='del'>-    inf = RARRAY_PTR(key_inf)[idx];</div><div class='del'>-    if (TYPE(inf) != T_ARRAY) continue;</div><div class='del'>-</div><div class='del'>-    if (TYPE(RARRAY_PTR(inf)[0]) == T_STRING) {</div><div class='del'>-      chr = *(RSTRING_PTR(RARRAY_PTR(inf)[0]));</div><div class='del'>-    } else {</div><div class='del'>-      chr = NUM2CHR(RARRAY_PTR(inf)[0]);</div><div class='del'>-    }</div><div class='del'>-    if (TYPE(RARRAY_PTR(inf)[1]) == T_STRING) {</div><div class='del'>-      subst_inf-&gt;type[chr] = *(RSTRING_PTR(RARRAY_PTR(inf)[1]));</div><div class='del'>-    } else {</div><div class='del'>-      subst_inf-&gt;type[chr] = NUM2CHR(RARRAY_PTR(inf)[1]);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    subst_inf-&gt;full_subst_length += 3;</div><div class='del'>-</div><div class='del'>-    id = SYM2ID(RARRAY_PTR(inf)[2]);</div><div class='del'>-    subst_inf-&gt;ivar[chr] = rb_intern(RSTRING_PTR(rb_str_cat2(rb_str_new2("@"), rb_id2name(id))));</div><div class='del'>-</div><div class='del'>-    rb_attr(self, id, 1, 0, Qtrue);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  /*</div><div class='del'>-   * longkeys : array of [name, type, ivar]</div><div class='del'>-   *         name ==&gt; longname key string</div><div class='del'>-   *         type ==&gt; char code or string</div><div class='del'>-   *         ivar ==&gt; symbol</div><div class='del'>-   */</div><div class='del'>-  len = RARRAY_LEN(longkey_inf);</div><div class='del'>-  for(idx = 0; idx &lt; len; idx++) {</div><div class='del'>-    inf = RARRAY_PTR(longkey_inf)[idx];</div><div class='del'>-    if (TYPE(inf) != T_ARRAY) continue;</div><div class='del'>-</div><div class='del'>-    chr = (unsigned char)(0x80 + idx);</div><div class='del'>-    subst_inf-&gt;keylen[chr] = RSTRING_LEN(RARRAY_PTR(inf)[0]);</div><div class='del'>-#if HAVE_STRNDUP</div><div class='del'>-    subst_inf-&gt;key[chr] = strndup(RSTRING_PTR(RARRAY_PTR(inf)[0]), </div><div class='del'>-				  RSTRING_LEN(RARRAY_PTR(inf)[0]));</div><div class='del'>-#else</div><div class='del'>-    subst_inf-&gt;key[chr] = malloc(RSTRING_LEN(RARRAY_PTR(inf)[0]) + 1);</div><div class='del'>-    if (subst_inf-&gt;key[chr]) {</div><div class='del'>-      strncpy(subst_inf-&gt;key[chr], RSTRING_PTR(RARRAY_PTR(inf)[0]),</div><div class='del'>-	      RSTRING_LEN(RARRAY_PTR(inf)[0]) + 1);</div><div class='del'>-      subst_inf-&gt;key[chr][RSTRING_LEN(RARRAY_PTR(inf)[0])] = '\0';</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if (TYPE(RARRAY_PTR(inf)[1]) == T_STRING) {</div><div class='del'>-      subst_inf-&gt;type[chr] = *(RSTRING_PTR(RARRAY_PTR(inf)[1]));</div><div class='del'>-    } else {</div><div class='del'>-      subst_inf-&gt;type[chr] = NUM2CHR(RARRAY_PTR(inf)[1]);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    subst_inf-&gt;full_subst_length += (subst_inf-&gt;keylen[chr] + 2);</div><div class='del'>-</div><div class='del'>-    id = SYM2ID(RARRAY_PTR(inf)[2]);</div><div class='del'>-    subst_inf-&gt;ivar[chr] = rb_intern(RSTRING_PTR(rb_str_cat2(rb_str_new2("@"), rb_id2name(id))));</div><div class='del'>-</div><div class='del'>-    rb_attr(self, id, 1, 0, Qtrue);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  /*</div><div class='del'>-   * procs : array of [type, proc]</div><div class='del'>-   *         type  ==&gt; char code or string</div><div class='del'>-   *         proc  ==&gt; proc/method/obj (must respond to 'call')</div><div class='del'>-   */</div><div class='del'>-  len = RARRAY_LEN(proc_inf);</div><div class='del'>-  for(idx = 0; idx &lt; len; idx++) {</div><div class='del'>-    inf = RARRAY_PTR(proc_inf)[idx];</div><div class='del'>-    if (TYPE(inf) != T_ARRAY) continue;</div><div class='del'>-    rb_hash_aset(subst_inf-&gt;proc, </div><div class='del'>-		 ((TYPE(RARRAY_PTR(inf)[0]) == T_STRING)? </div><div class='del'>-		  INT2FIX(*(RSTRING_PTR(RARRAY_PTR(inf)[0]))) : </div><div class='del'>-		  RARRAY_PTR(inf)[0]), </div><div class='del'>-		 RARRAY_PTR(inf)[1]);</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  rb_const_set(self, ID_SUBST_INFO, </div><div class='del'>-	       Data_Wrap_Struct(cSUBST_INFO, subst_mark, </div><div class='del'>-				subst_free, subst_inf));</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'>-cbsubst_get_extra_args_tbl(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</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'>-cbsubst_scan_args(self, arg_key, val_ary)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE arg_key;</div><div class='del'>-    VALUE val_ary;</div><div class='del'>-{</div><div class='del'>-    struct cbsubst_info *inf;</div><div class='del'>-    int idx;</div><div class='del'>-    unsigned char *keyptr = (unsigned char*)RSTRING_PTR(arg_key);</div><div class='del'>-    int keylen = RSTRING_LEN(arg_key);</div><div class='del'>-    int vallen = RARRAY_LEN(val_ary);</div><div class='del'>-    unsigned char type_chr;</div><div class='del'>-    volatile VALUE dst = rb_ary_new2(vallen);</div><div class='del'>-    volatile VALUE proc;</div><div class='del'>-    int thr_crit_bup;</div><div class='del'>-    VALUE old_gc;</div><div class='del'>-</div><div class='del'>-    thr_crit_bup = rb_thread_critical;</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-</div><div class='del'>-    old_gc = rb_gc_disable();</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(rb_const_get(self, ID_SUBST_INFO), </div><div class='del'>-                    struct cbsubst_info, inf);</div><div class='del'>-</div><div class='del'>-    for(idx = 0; idx &lt; vallen; idx++) {</div><div class='del'>-      if (idx &gt;= keylen) {</div><div class='del'>-	proc = Qnil;</div><div class='del'>-      } else if (*(keyptr + idx) == ' ') {</div><div class='del'>-	proc = Qnil;</div><div class='del'>-      } else {</div><div class='del'>-	if (type_chr = inf-&gt;type[*(keyptr + idx)]) {</div><div class='del'>-	  proc = rb_hash_aref(inf-&gt;proc, INT2FIX((int)type_chr));</div><div class='del'>-	} else {</div><div class='del'>-	  proc = Qnil;</div><div class='del'>-	}</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      if (NIL_P(proc)) {</div><div class='del'>-	rb_ary_push(dst, RARRAY_PTR(val_ary)[idx]);</div><div class='del'>-      } else {</div><div class='del'>-	rb_ary_push(dst, rb_funcall(proc, ID_call, 1, </div><div class='del'>-				    RARRAY_PTR(val_ary)[idx]));</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (old_gc == Qfalse) rb_gc_enable();</div><div class='del'>-    rb_thread_critical = thr_crit_bup;</div><div class='del'>-</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-cbsubst_inspect(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_str_new2("CallbackSubst");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-substinfo_inspect(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_str_new2("SubstInfo");</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'>-tk_cbe_inspect(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_str_new2("TkCallbackEntry");</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'>-tkobj_path(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_ivar_get(self, ID_at_path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*************************************/</div><div class='del'>-/* release date */</div><div class='del'>-const char tkutil_release_date[] = TKUTIL_RELEASE_DATE;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_tkutil()</div><div class='del'>-{</div><div class='del'>-    VALUE cTK = rb_define_class("TkKernel", rb_cObject);</div><div class='del'>-    VALUE mTK = rb_define_module("TkUtil");</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-</div><div class='del'>-    rb_define_const(mTK, "RELEASE_DATE", </div><div class='del'>-                    rb_obj_freeze(rb_str_new2(tkutil_release_date)));</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_global_variable(&amp;cMethod);</div><div class='del'>-    cMethod = rb_const_get(rb_cObject, rb_intern("Method"));</div><div class='del'>-</div><div class='del'>-    ID_path = rb_intern("path");</div><div class='del'>-    ID_at_path = rb_intern("@path");</div><div class='del'>-    ID_at_enc = rb_intern("@encoding");</div><div class='del'>-    ID_to_eval = rb_intern("to_eval");</div><div class='del'>-    ID_to_s = rb_intern("to_s");</div><div class='del'>-    ID_source = rb_intern("source");</div><div class='del'>-    ID_downcase = rb_intern("downcase");</div><div class='del'>-    ID_install_cmd = rb_intern("install_cmd");</div><div class='del'>-    ID_merge_tklist = rb_intern("_merge_tklist");</div><div class='del'>-    ID_encoding = rb_intern("encoding");</div><div class='del'>-    ID_encoding_system = rb_intern("encoding_system");</div><div class='del'>-    ID_call = rb_intern("call");</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    cCB_SUBST = rb_define_class_under(mTK, "CallbackSubst", rb_cObject);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "inspect", cbsubst_inspect, 0);</div><div class='del'>-</div><div class='del'>-    cSUBST_INFO = rb_define_class_under(cCB_SUBST, "Info", rb_cObject);</div><div class='del'>-    rb_define_singleton_method(cSUBST_INFO, "inspect", substinfo_inspect, 0);</div><div class='del'>-</div><div class='del'>-    ID_SUBST_INFO = rb_intern("SUBST_INFO");</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "ret_val", cbsubst_ret_val, 1);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "scan_args", cbsubst_scan_args, 2);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "_sym2subst", </div><div class='del'>-			       cbsubst_sym_to_subst, 1);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "subst_arg", </div><div class='del'>-                               cbsubst_get_subst_arg, -1);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "_get_subst_key", </div><div class='del'>-                               cbsubst_get_subst_key,  1);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "_get_all_subst_keys", </div><div class='del'>-                               cbsubst_get_all_subst_keys,  0);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "_setup_subst_table", </div><div class='del'>-                               cbsubst_table_setup, -1);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "_get_extra_args_tbl", </div><div class='del'>-                               cbsubst_get_extra_args_tbl,  0);</div><div class='del'>-    rb_define_singleton_method(cCB_SUBST, "_define_attribute_aliases", </div><div class='del'>-                               cbsubst_def_attr_aliases,  1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cCB_SUBST, "initialize", cbsubst_initialize, -1);</div><div class='del'>-</div><div class='del'>-    cbsubst_init();</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_global_variable(&amp;cTkCallbackEntry);</div><div class='del'>-    cTkCallbackEntry = rb_define_class("TkCallbackEntry", cTK);</div><div class='del'>-    rb_define_singleton_method(cTkCallbackEntry, "inspect", tk_cbe_inspect, 0);</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_global_variable(&amp;cTkObject);</div><div class='del'>-    cTkObject = rb_define_class("TkObject", cTK);</div><div class='del'>-    rb_define_method(cTkObject, "path", tkobj_path, 0);</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_require("tcltklib");</div><div class='del'>-    rb_global_variable(&amp;cTclTkLib);</div><div class='del'>-    cTclTkLib = rb_const_get(rb_cObject, rb_intern("TclTkLib"));</div><div class='del'>-    ID_split_tklist = rb_intern("_split_tklist");</div><div class='del'>-    ID_toUTF8 = rb_intern("_toUTF8");</div><div class='del'>-    ID_fromUTF8 = rb_intern("_fromUTF8");</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_define_singleton_method(cTK, "new", tk_s_new, -1);</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_global_variable(&amp;TK_None);</div><div class='del'>-    TK_None = rb_obj_alloc(rb_cObject);</div><div class='del'>-    rb_define_const(mTK, "None", TK_None);</div><div class='del'>-    rb_define_singleton_method(TK_None, "to_s", tkNone_to_s, 0);</div><div class='del'>-    rb_define_singleton_method(TK_None, "inspect", tkNone_to_s, 0);</div><div class='del'>-    OBJ_FREEZE(TK_None);</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_global_variable(&amp;CALLBACK_TABLE);</div><div class='del'>-    CALLBACK_TABLE = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_define_singleton_method(mTK, "eval_cmd", tk_eval_cmd, -1);</div><div class='del'>-    rb_define_singleton_method(mTK, "callback", tk_do_callback, -1);</div><div class='del'>-    rb_define_singleton_method(mTK, "install_cmd", tk_install_cmd, -1);</div><div class='del'>-    rb_define_singleton_method(mTK, "uninstall_cmd", tk_uninstall_cmd, 1);</div><div class='del'>-    rb_define_singleton_method(mTK, "_symbolkey2str", tk_symbolkey2str, 1);</div><div class='del'>-    rb_define_singleton_method(mTK, "hash_kv", tk_hash_kv, -1);</div><div class='del'>-    rb_define_singleton_method(mTK, "_get_eval_string", </div><div class='del'>-                               tk_get_eval_string, -1);</div><div class='del'>-    rb_define_singleton_method(mTK, "_get_eval_enc_str", </div><div class='del'>-                               tk_get_eval_enc_str, 1);</div><div class='del'>-    rb_define_singleton_method(mTK, "_conv_args", tk_conv_args, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(mTK, "bool", tcl2rb_bool, 1);</div><div class='del'>-    rb_define_singleton_method(mTK, "number", tcl2rb_number, 1);</div><div class='del'>-    rb_define_singleton_method(mTK, "string", tcl2rb_string, 1);</div><div class='del'>-    rb_define_singleton_method(mTK, "num_or_str", tcl2rb_num_or_str, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(mTK, "_toUTF8", tk_toUTF8, -1);</div><div class='del'>-    rb_define_method(mTK, "_fromUTF8", tk_fromUTF8, -1);</div><div class='del'>-    rb_define_method(mTK, "_symbolkey2str", tk_symbolkey2str, 1);</div><div class='del'>-    rb_define_method(mTK, "hash_kv", tk_hash_kv, -1);</div><div class='del'>-    rb_define_method(mTK, "_get_eval_string", tk_get_eval_string, -1);</div><div class='del'>-    rb_define_method(mTK, "_get_eval_enc_str", tk_get_eval_enc_str, 1);</div><div class='del'>-    rb_define_method(mTK, "_conv_args", tk_conv_args, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(mTK, "bool", tcl2rb_bool, 1);</div><div class='del'>-    rb_define_method(mTK, "number", tcl2rb_number, 1);</div><div class='del'>-    rb_define_method(mTK, "string", tcl2rb_string, 1);</div><div class='del'>-    rb_define_method(mTK, "num_or_str", tcl2rb_num_or_str, 1);</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-    rb_global_variable(&amp;ENCODING_NAME_UTF8);</div><div class='del'>-    ENCODING_NAME_UTF8 = rb_obj_freeze(rb_str_new2("utf-8"));</div><div class='del'>-</div><div class='del'>-    /* --------------------- */</div><div class='del'>-}</div><div class='head'>diff --git a/ext/win32ole/.cvsignore b/ext/win32ole/.cvsignore<br/>deleted file mode 100644<br/>index 4f6430def0..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/.cvsignore</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,4 +0,0 @@</div><div class='del'>-Makefile</div><div class='del'>-mkmf.log</div><div class='del'>-*.log</div><div class='del'>-.document</div><div class='head'>diff --git a/ext/win32ole/depend b/ext/win32ole/depend<br/>deleted file mode 100644<br/>index 4bf5ab5b94..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/depend?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/depend</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-win32ole.o : win32ole.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h </div><div class='head'>diff --git a/ext/win32ole/doc/win32ole.rd b/ext/win32ole/doc/win32ole.rd<br/>deleted file mode 100644<br/>index c563ce5d5b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/doc/win32ole.rd?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/doc/win32ole.rd</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,294 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-= Win32OLE extension module</div><div class='del'>-</div><div class='del'>-== WIN32OLE </div><div class='del'>-=== Constants</div><div class='del'>-: VERSION</div><div class='del'>-    The version number of WIN32OLE.</div><div class='del'>-</div><div class='del'>-: ARGV</div><div class='del'>-    The argument of the method invoked recently.</div><div class='del'>-    This constant is used to get value of argument </div><div class='del'>-    when the argument is passed by reference.</div><div class='del'>-</div><div class='del'>-=== Class Method</div><div class='del'>-: connect(oleserver)</div><div class='del'>-   returns running OLE automation object or WIN32OLE object from moniker.</div><div class='del'>-</div><div class='del'>-: const_load(ole [,obj])</div><div class='del'>-   defines the constants of OLE automation</div><div class='del'>-   server as 'obj' class constants. If 'obj' omitted, the default</div><div class='del'>-   is WIN32OLE.</div><div class='del'>-</div><div class='del'>-: new(oleserver)</div><div class='del'>-   returns OLE Automation object.</div><div class='del'>-</div><div class='del'>-: ole_free(obj)</div><div class='del'>-   invokes Release method of Dispatch interface of WIN32OLE object.</div><div class='del'>-   This method should not be used because this method exists for debugging WIN32OLE.</div><div class='del'>-</div><div class='del'>-: ole_reference_count(obj)</div><div class='del'>-   returns reference counter of Dispatch interface.</div><div class='del'>-   This method should not be used because this method exists for debugging WIN32OLE.</div><div class='del'>-</div><div class='del'>-: ole_show_help(info [,helpcontext])</div><div class='del'>-   displays helpfile.</div><div class='del'>-   The first argument specifies WIN32OLE_TYPE object or WIN32OLE_METHOD object </div><div class='del'>-   or helpfile.</div><div class='del'>-</div><div class='del'>-=== Method</div><div class='del'>-: self[property]</div><div class='del'>-   gets property of OLE object.</div><div class='del'>-</div><div class='del'>-: self[property]=</div><div class='del'>-   sets property of OLE object.</div><div class='del'>-</div><div class='del'>-: _invoke(dispid, args, types)</div><div class='del'>-   runs the early binding method.</div><div class='del'>-   The dispid specifies Dispatch ID, args specifies the array of arguments,</div><div class='del'>-   types specifies array of the type of arguments.</div><div class='del'>-</div><div class='del'>-: each {...}</div><div class='del'>-   Iterates over each item of OLE collection which has IEnumVARIANT</div><div class='del'>-   interface.</div><div class='del'>-</div><div class='del'>-: invoke(method, args,...)</div><div class='del'>-   runs OLE method.</div><div class='del'>-</div><div class='del'>-: ole_func_methods</div><div class='del'>-   returns array of WIN32OLE_METHOD object which corresponds with function.</div><div class='del'>-</div><div class='del'>-: ole_get_methods</div><div class='del'>-   returns array of WIN32OLE_METHOD object which corresponds with get properties.</div><div class='del'>-</div><div class='del'>-: ole_method(method)</div><div class='del'>-   returns WIN32OLE_METHOD object which coreesponds with method </div><div class='del'>-   which specified by argument.</div><div class='del'>-</div><div class='del'>-: ole_method_help(method)</div><div class='del'>-   alias of ole_method.</div><div class='del'>-</div><div class='del'>-: ole_methods</div><div class='del'>-   returns WIN32OLE_METHOD object which coreesponds with method.</div><div class='del'>-</div><div class='del'>-: ole_obj_help</div><div class='del'>-   returns WIN32OLE_TYPE object.</div><div class='del'>-</div><div class='del'>-: ole_put_methods</div><div class='del'>-   returns array of WIN32OLE_METHOD object which corresponds with put properties.</div><div class='del'>-</div><div class='del'>-: setproperty(property, key, val)</div><div class='del'>-   set property of OLE object. </div><div class='del'>-   This method is used when the property has argument.</div><div class='del'>-</div><div class='del'>-   For example, in VB</div><div class='del'>-     obj.item("key") = val</div><div class='del'>-   in Win32OLE</div><div class='del'>-     obj.setproperty("item", "key", val)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== WIN32OLE_EVENT class</div><div class='del'>-</div><div class='del'>-=== Class Method</div><div class='del'>-</div><div class='del'>-: new(ole, interface)</div><div class='del'>-   The new class method creates OLE event sink object to connect ole.</div><div class='del'>-   The ole must be WIN32OLE object, and interface is the interface</div><div class='del'>-   name of event.</div><div class='del'>-</div><div class='del'>-: message_loop</div><div class='del'>-    The message_loop class method translates and dispatches Windows </div><div class='del'>-    message.</div><div class='del'>-</div><div class='del'>-=== Method</div><div class='del'>-: on_event([event]){...}</div><div class='del'>-    defines the callback of event.</div><div class='del'>-    If event omitted, defines the callback of all events.</div><div class='del'>-</div><div class='del'>-: on_event_with_outargs([event]) {...}</div><div class='del'>-    defines the callback of event.</div><div class='del'>-    If you want modify argument in callback, </div><div class='del'>-</div><div class='del'>-== WIN32OLE_METHOD</div><div class='del'>-</div><div class='del'>-=== Class Methods</div><div class='del'>-: new(win32ole_type, method)    </div><div class='del'>-   creates WIN32OLE_METHOD object.</div><div class='del'>-</div><div class='del'>-=== Methods</div><div class='del'>-: dispid</div><div class='del'>-   returns Dispatch ID.</div><div class='del'>-</div><div class='del'>-: event?</div><div class='del'>-   returns true if the method is event.</div><div class='del'>-</div><div class='del'>-: event_interface</div><div class='del'>-   returns interface name of event if the method is event.</div><div class='del'>-</div><div class='del'>-: helpcontext</div><div class='del'>-   returns help context.</div><div class='del'>-</div><div class='del'>-: helpfile</div><div class='del'>-   returns help file.</div><div class='del'>-</div><div class='del'>-: invkind</div><div class='del'>-   returns invkind.</div><div class='del'>-</div><div class='del'>-: invoke_kind</div><div class='del'>-   returns invoke kind string.</div><div class='del'>-</div><div class='del'>-: name</div><div class='del'>-   returns name of method.</div><div class='del'>-</div><div class='del'>-: offset_vtbl</div><div class='del'>-   returns the offset of Vtbl.</div><div class='del'>-</div><div class='del'>-: params</div><div class='del'>-   returns array of WIN32OLE_PARAM object.</div><div class='del'>-</div><div class='del'>-: return_type</div><div class='del'>-   returns string of return value type of method.</div><div class='del'>-</div><div class='del'>-: return_vtype</div><div class='del'>-   returns number of return value type of method.</div><div class='del'>-</div><div class='del'>-: return_type_detail</div><div class='del'>-   returns detail information of return value type of method.</div><div class='del'>-</div><div class='del'>-: size_params</div><div class='del'>-   returns the size of arguments.</div><div class='del'>-</div><div class='del'>-: size_opt_params</div><div class='del'>-   returns the size of optional arguments.</div><div class='del'>-</div><div class='del'>-: visible?</div><div class='del'>-   returns true if the method is public.</div><div class='del'>-</div><div class='del'>-== WIN32OLE_PARAM</div><div class='del'>-: default</div><div class='del'>-   returns default value.</div><div class='del'>-</div><div class='del'>-: input?</div><div class='del'>-   returns true if argument is input.</div><div class='del'>-</div><div class='del'>-: optional?</div><div class='del'>-   returns true if argument is optional.</div><div class='del'>-</div><div class='del'>-: output?</div><div class='del'>-   returns true if argument is output.</div><div class='del'>-</div><div class='del'>-: name</div><div class='del'>-   returns name.</div><div class='del'>-</div><div class='del'>-: ole_type</div><div class='del'>-   returns type of argument.</div><div class='del'>-</div><div class='del'>-: ole_type_detail</div><div class='del'>-   returns detail information of type of argument.</div><div class='del'>-</div><div class='del'>-: retval?</div><div class='del'>-   returns true if argument is return value.</div><div class='del'>-</div><div class='del'>-== WIN32OLE_TYPE</div><div class='del'>-=== Class Methods</div><div class='del'>-: new(typelibrary, class)</div><div class='del'>-    returns WIN32OLE_TYPE object.</div><div class='del'>-</div><div class='del'>-: ole_classes(typelibrary)</div><div class='del'>-    returns array of WIN32OLE_TYPE objects defined by Type Library.</div><div class='del'>-</div><div class='del'>-: progids</div><div class='del'>-    returns array of ProgID.</div><div class='del'>-</div><div class='del'>-: typelibs</div><div class='del'>-    returns array of type libraries.</div><div class='del'>-</div><div class='del'>-=== Methods</div><div class='del'>-: guid</div><div class='del'>-   returns GUID.</div><div class='del'>-</div><div class='del'>-: helpfile</div><div class='del'>-   returns helpfile.</div><div class='del'>-</div><div class='del'>-: helpcontext</div><div class='del'>-   returns helpcontext.</div><div class='del'>-</div><div class='del'>-: helpstring</div><div class='del'>-   returns help string.</div><div class='del'>-</div><div class='del'>-: major_version</div><div class='del'>-   returns major version.</div><div class='del'>-</div><div class='del'>-: minor_version</div><div class='del'>-   returns minor version.</div><div class='del'>-</div><div class='del'>-: name</div><div class='del'>-   returns name.</div><div class='del'>-</div><div class='del'>-: ole_methods</div><div class='del'>-   returns array of WIN32OLE_METHOD objects.</div><div class='del'>-</div><div class='del'>-: ole_type</div><div class='del'>-   returns type of class.</div><div class='del'>-</div><div class='del'>-: progid</div><div class='del'>-   returns ProgID if it exists. If not found, then returns nil.</div><div class='del'>-</div><div class='del'>-: src_type</div><div class='del'>-   returns source class when the OLE class is 'Alias'.</div><div class='del'>-</div><div class='del'>-: typekind</div><div class='del'>-   returns number which represents type.</div><div class='del'>-</div><div class='del'>-: variables</div><div class='del'>-   returns array of variables defined in OLE class.</div><div class='del'>-</div><div class='del'>-: visible?</div><div class='del'>-   returns true if the OLE class is public.</div><div class='del'>-</div><div class='del'>-== WIN32OLE_VARIABLE</div><div class='del'>-=== Methods</div><div class='del'>-: name</div><div class='del'>-   returns the name.</div><div class='del'>-</div><div class='del'>-: ole_type</div><div class='del'>-   returns type</div><div class='del'>-</div><div class='del'>-: ole_type_detail</div><div class='del'>-   returns detail information of type.</div><div class='del'>-</div><div class='del'>-: value</div><div class='del'>-   returns value.</div><div class='del'>-</div><div class='del'>-: variable_kind</div><div class='del'>-   returns variable kind string.</div><div class='del'>-</div><div class='del'>-: varkind</div><div class='del'>-   returns the number which represents variable kind.</div><div class='del'>-</div><div class='del'>-== WIN32OLE::VARIANT</div><div class='del'>-=== Constants</div><div class='del'>-  *VT_I4</div><div class='del'>-  *VT_R4</div><div class='del'>-  *VT_R8</div><div class='del'>-  *VT_CY</div><div class='del'>-  *VT_DATE</div><div class='del'>-  *VT_BSTR</div><div class='del'>-  *VT_USERDEFINED</div><div class='del'>-  *VT_PTR</div><div class='del'>-  *VT_DISPATCH</div><div class='del'>-  *VT_ERROR</div><div class='del'>-  *VT_BOOL</div><div class='del'>-  *VT_VARIANT</div><div class='del'>-  *VT_UNKNOWN</div><div class='del'>-  *VT_I1</div><div class='del'>-  *VT_UI1</div><div class='del'>-  *VT_UI2</div><div class='del'>-  *VT_UI4</div><div class='del'>-  *VT_INT</div><div class='del'>-  *VT_UINT</div><div class='del'>-  *VT_ARRAY</div><div class='del'>-  *VT_BYREF</div><div class='del'>-</div><div class='del'>-=end</div><div class='del'>-</div><div class='head'>diff --git a/ext/win32ole/extconf.rb b/ext/win32ole/extconf.rb<br/>deleted file mode 100644<br/>index cee922554a..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,41 +0,0 @@</div><div class='del'>-#----------------------------------</div><div class='del'>-# extconf.rb</div><div class='del'>-# $Revision$</div><div class='del'>-# $Date$</div><div class='del'>-#----------------------------------</div><div class='del'>-require 'mkmf'</div><div class='del'>-</div><div class='del'>-dir_config("win32")</div><div class='del'>-</div><div class='del'>-SRCFILES=&lt;&lt;SRC</div><div class='del'>-win32ole.c</div><div class='del'>-SRC</div><div class='del'>-</div><div class='del'>-def create_docfile(src)</div><div class='del'>-  open(File.expand_path($srcdir) + "/.document", "w") {|ofs|</div><div class='del'>-    ofs.print src</div><div class='del'>-  }</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def create_win32ole_makefile</div><div class='del'>-  if have_library("ole32") and</div><div class='del'>-     have_library("oleaut32") and</div><div class='del'>-     have_library("uuid") and </div><div class='del'>-     have_library("user32") and</div><div class='del'>-     have_library("kernel32") and</div><div class='del'>-     have_library("advapi32") and</div><div class='del'>-     have_header("windows.h")</div><div class='del'>-    create_makefile("win32ole")</div><div class='del'>-    create_docfile(SRCFILES)</div><div class='del'>-  else</div><div class='del'>-    create_docfile("")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-case RUBY_PLATFORM</div><div class='del'>-when /mswin32/</div><div class='del'>-  $CFLAGS += ' /W3'</div><div class='del'>-when /cygwin/, /mingw/</div><div class='del'>-  $defs &lt;&lt; '-DNONAMELESSUNION'</div><div class='del'>-end</div><div class='del'>-create_win32ole_makefile</div><div class='head'>diff --git a/ext/win32ole/lib/win32ole/property.rb b/ext/win32ole/lib/win32ole/property.rb<br/>deleted file mode 100644<br/>index a68bad9af8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/lib/win32ole/property.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/lib/win32ole/property.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-# OLEProperty</div><div class='del'>-# helper class of Property with arguments.</div><div class='del'>-class OLEProperty</div><div class='del'>-  def initialize(obj, dispid, gettypes, settypes)</div><div class='del'>-    @obj = obj</div><div class='del'>-    @dispid = dispid</div><div class='del'>-    @gettypes = gettypes</div><div class='del'>-    @settypes = settypes</div><div class='del'>-  end</div><div class='del'>-  def [](*args)</div><div class='del'>-    @obj._getproperty(@dispid, args, @gettypes)</div><div class='del'>-  end</div><div class='del'>-  def []=(*args)</div><div class='del'>-    @obj._setproperty(@dispid, args, @settypes)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/sample/excel1.rb b/ext/win32ole/sample/excel1.rb<br/>deleted file mode 100644<br/>index e366a52839..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/excel1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/excel1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-require 'win32ole'</div><div class='del'>-</div><div class='del'>-#application = WIN32OLE.new('Excel.Application.5')</div><div class='del'>-application = WIN32OLE.new('Excel.Application')</div><div class='del'>-</div><div class='del'>-application.visible = TRUE</div><div class='del'>-workbook = application.Workbooks.Add();</div><div class='del'>-worksheet = workbook.Worksheets(1);</div><div class='del'>-worksheet.Range("A1:D1").value = ["North","South","East","West"];</div><div class='del'>-worksheet.Range("A2:B2").value = [5.2, 10];</div><div class='del'>-worksheet.Range("C2").value = 8;</div><div class='del'>-worksheet.Range("D2").value = 20;</div><div class='del'>-</div><div class='del'>-range = worksheet.Range("A1:D2");</div><div class='del'>-range.Select</div><div class='del'>-chart = workbook.Charts.Add;</div><div class='del'>-</div><div class='del'>-workbook.saved = TRUE;</div><div class='del'>-</div><div class='del'>-application.ActiveWorkbook.Close(0);</div><div class='del'>-application.Quit();</div><div class='del'>-</div><div class='head'>diff --git a/ext/win32ole/sample/excel2.rb b/ext/win32ole/sample/excel2.rb<br/>deleted file mode 100644<br/>index 46f459b36b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/excel2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/excel2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-require 'win32ole'</div><div class='del'>-</div><div class='del'>-#   -4100 is the value for the Excel constant xl3DColumn.</div><div class='del'>-ChartTypeVal = -4100;</div><div class='del'>-</div><div class='del'>-#   Creates OLE object to Excel</div><div class='del'>-#excel = WIN32OLE.new("excel.application.5")</div><div class='del'>-excel = WIN32OLE.new("excel.application")</div><div class='del'>-</div><div class='del'>-# Create and rotate the chart</div><div class='del'>-</div><div class='del'>-excel['Visible'] = TRUE;</div><div class='del'>-excel.Workbooks.Add();</div><div class='del'>-excel.Range("a1")['Value'] = 3;</div><div class='del'>-excel.Range("a2")['Value'] = 2;</div><div class='del'>-excel.Range("a3")['Value'] = 1;</div><div class='del'>-excel.Range("a1:a3").Select();</div><div class='del'>-excelchart = excel.Charts.Add();</div><div class='del'>-excelchart['Type'] = ChartTypeVal;</div><div class='del'>-</div><div class='del'>-i = 30</div><div class='del'>-i.step(180, 10) do |rot|</div><div class='del'>-#    excelchart['Rotation'] = rot;</div><div class='del'>-    excelchart.rotation=rot;</div><div class='del'>-end</div><div class='del'>-# Done, bye</div><div class='del'>-</div><div class='del'>-excel.ActiveWorkbook.Close(0);</div><div class='del'>-excel.Quit();</div><div class='del'>-</div><div class='head'>diff --git a/ext/win32ole/sample/excel3.rb b/ext/win32ole/sample/excel3.rb<br/>deleted file mode 100644<br/>index 0f96717063..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/excel3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/excel3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-require 'win32ole'</div><div class='del'>-</div><div class='del'>-#application = WIN32OLE.new('Excel.Application.5')</div><div class='del'>-application = WIN32OLE.new('Excel.Application')</div><div class='del'>-</div><div class='del'>-application.visible = TRUE</div><div class='del'>-workbook = application.Workbooks.Add();</div><div class='del'>-sheet = workbook.Worksheets(1);</div><div class='del'>-sheetS = workbook.Worksheets</div><div class='del'>-puts "The number of sheets is #{sheetS.count}"</div><div class='del'>-puts "Now add 2 sheets after of `#{sheet.name}`"</div><div class='del'>-sheetS.add({'count'=&gt;2, 'after'=&gt;sheet})</div><div class='del'>-puts "The number of sheets is #{sheetS.count}"</div><div class='head'>diff --git a/ext/win32ole/sample/ie.rb b/ext/win32ole/sample/ie.rb<br/>deleted file mode 100644<br/>index 11dc861e0b..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/ie.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/ie.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,11 +0,0 @@</div><div class='del'>-require 'win32ole'</div><div class='del'>-url = 'http://www.ruby-lang.org/'</div><div class='del'>-ie = WIN32OLE.new('InternetExplorer.Application')</div><div class='del'>-ie.visible = TRUE</div><div class='del'>-ie.gohome</div><div class='del'>-print "Now navigate Ruby home page... Please enter."</div><div class='del'>-gets</div><div class='del'>-ie.navigate(url)</div><div class='del'>-print "Now quit Internet Explorer... Please enter."</div><div class='del'>-gets</div><div class='del'>-ie.Quit()</div><div class='head'>diff --git a/ext/win32ole/sample/ieconst.rb b/ext/win32ole/sample/ieconst.rb<br/>deleted file mode 100644<br/>index 234272c7ed..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/ieconst.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/ieconst.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-require 'win32ole'</div><div class='del'>-</div><div class='del'>-ie = WIN32OLE.new('InternetExplorer.Application')</div><div class='del'>-=begin</div><div class='del'>-WIN32OLE.const_load(ie)</div><div class='del'>-WIN32OLE.constants.sort.each do |c|</div><div class='del'>-  puts "#{c} = #{WIN32OLE.const_get(c)}"</div><div class='del'>-end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-module IE_CONST</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-WIN32OLE.const_load(ie, IE_CONST)</div><div class='del'>-IE_CONST.constants.sort.each do |c|</div><div class='del'>-  puts "#{c} = #{IE_CONST.const_get(c)}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#------------------------------------------------------------</div><div class='del'>-# Remark!!! CONSTANTS has not tested enoughly!!!</div><div class='del'>-# CONSTANTS is alpha release.</div><div class='del'>-# If there are constants which first letter is not [a-zA-Z],</div><div class='del'>-# like a '_Foo', then maybe you can access the value by </div><div class='del'>-# using CONSTANTS['_Foo']</div><div class='del'>-#------------------------------------------------------------</div><div class='del'>-IE_CONST::CONSTANTS.each do |k, v|</div><div class='del'>-  puts "#{k} = #{v}"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-puts WIN32OLE::VERSION</div><div class='del'>-ie.quit</div><div class='del'>-</div><div class='head'>diff --git a/ext/win32ole/sample/ienavi.rb b/ext/win32ole/sample/ienavi.rb<br/>deleted file mode 100644<br/>index c7fa3f5ec2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/ienavi.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/ienavi.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,40 +0,0 @@</div><div class='del'>-require 'win32ole'</div><div class='del'>-</div><div class='del'>-$urls = []</div><div class='del'>-</div><div class='del'>-def navigate(url)</div><div class='del'>-  $urls &lt;&lt; url</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def stop_msg_loop</div><div class='del'>-  puts "Now Stop IE..."</div><div class='del'>-  $LOOP = FALSE;</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def default_handler(event, *args)</div><div class='del'>-  case event</div><div class='del'>-  when "BeforeNavigate"</div><div class='del'>-    puts "Now Navigate #{args[0]}..."</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-ie = WIN32OLE.new('InternetExplorer.Application')</div><div class='del'>-ie.visible = TRUE</div><div class='del'>-ie.gohome</div><div class='del'>-</div><div class='del'>-ev = WIN32OLE_EVENT.new(ie, 'DWebBrowserEvents')</div><div class='del'>-</div><div class='del'>-ev.on_event {|*args| default_handler(*args)}</div><div class='del'>-ev.on_event("NavigateComplete") {|url| navigate(url)}</div><div class='del'>-ev.on_event("Quit") {|*args| stop_msg_loop} </div><div class='del'>-</div><div class='del'>-$LOOP = TRUE</div><div class='del'>-while ($LOOP)</div><div class='del'>-  WIN32OLE_EVENT.message_loop</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-puts "You Navigated the URLs ..."</div><div class='del'>-$urls.each_with_index do |url, i|</div><div class='del'>-  puts "(#{i+1}) #{url}"</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/win32ole/sample/oledirs.rb b/ext/win32ole/sample/oledirs.rb<br/>deleted file mode 100644<br/>index 1c77e76f14..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/oledirs.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/oledirs.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,23 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# You need WSH(Windows Scripting Host) to run this script.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "win32ole"</div><div class='del'>-</div><div class='del'>-def listup(items)</div><div class='del'>-#  items.each do |i|</div><div class='del'>-  for i in items</div><div class='del'>-    puts i.name </div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-fs = WIN32OLE.new("Scripting.FileSystemObject")</div><div class='del'>-</div><div class='del'>-folder = fs.GetFolder(".")</div><div class='del'>-</div><div class='del'>-puts "--- folder of #{folder.path} ---"</div><div class='del'>-listup(folder.SubFolders)</div><div class='del'>-</div><div class='del'>-puts "--- files of #{folder.path} ---"</div><div class='del'>-listup(folder.Files)</div><div class='del'>-</div><div class='head'>diff --git a/ext/win32ole/sample/olegen.rb b/ext/win32ole/sample/olegen.rb<br/>deleted file mode 100644<br/>index 48d86893fe..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/olegen.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/olegen.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,348 +0,0 @@</div><div class='del'>-#-----------------------------</div><div class='del'>-# olegen.rb</div><div class='del'>-# $Date$</div><div class='del'>-# $Revision$</div><div class='del'>-#-----------------------------</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-</div><div class='del'>-class WIN32COMGen</div><div class='del'>-  def initialize(typelib)</div><div class='del'>-    @typelib = typelib</div><div class='del'>-    @reciever = ""</div><div class='del'>-  end</div><div class='del'>-  attr_reader :typelib</div><div class='del'>-</div><div class='del'>-  def ole_classes(typelib)</div><div class='del'>-    begin</div><div class='del'>-      @ole = WIN32OLE.new(typelib)</div><div class='del'>-      [@ole.ole_obj_help]</div><div class='del'>-    rescue</div><div class='del'>-      WIN32OLE_TYPE.ole_classes(typelib)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_args(method)</div><div class='del'>-    args = []</div><div class='del'>-    if method.size_opt_params &gt;= 0</div><div class='del'>-      size_required_params = method.size_params - method.size_opt_params</div><div class='del'>-    else</div><div class='del'>-      size_required_params = method.size_params - 1</div><div class='del'>-    end</div><div class='del'>-    size_required_params.times do |i|</div><div class='del'>-      if method.params[i] &amp;&amp; method.params[i].optional?</div><div class='del'>-        args.push "arg#{i}=nil"</div><div class='del'>-      else</div><div class='del'>-        args.push "arg#{i}"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if method.size_opt_params &gt;= 0</div><div class='del'>-      method.size_opt_params.times do |i|</div><div class='del'>-        args.push "arg#{i + size_required_params}=nil"</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      args.push "*arg"</div><div class='del'>-    end</div><div class='del'>-    args.join(", ")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_argtype(typedetails)</div><div class='del'>-    ts = ''</div><div class='del'>-    typedetails.each do |t|</div><div class='del'>-      case t</div><div class='del'>-      when 'CARRAY', 'VOID', 'UINT', 'RESULT', 'DECIMAL', 'I8', 'UI8' </div><div class='del'>-#	  raise "Sorry type\"" + t + "\" not supported"</div><div class='del'>-      ts &lt;&lt; "\"??? NOT SUPPORTED TYPE:`#{t}'\""</div><div class='del'>-      when 'USERDEFINED', 'Unknown Type 9'</div><div class='del'>-        ts &lt;&lt; 'VT_DISPATCH'</div><div class='del'>-        break;</div><div class='del'>-      when 'SAFEARRAY'</div><div class='del'>-        ts &lt;&lt; 'VT_ARRAY|'</div><div class='del'>-      when 'PTR'</div><div class='del'>-        ts &lt;&lt; 'VT_BYREF|'</div><div class='del'>-      when 'INT'</div><div class='del'>-        ts &lt;&lt; 'VT_I4'</div><div class='del'>-      else</div><div class='del'>-        if String === t</div><div class='del'>-          ts &lt;&lt; 'VT_' + t</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if ts.empty?</div><div class='del'>-      ts = 'VT_VARIANT'</div><div class='del'>-    elsif ts[-1] == ?|</div><div class='del'>-	ts += 'VT_VARIANT'</div><div class='del'>-    end</div><div class='del'>-    ts</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_argtypes(method, proptypes)</div><div class='del'>-    types = method.params.collect{|param|</div><div class='del'>-      generate_argtype(param.ole_type_detail)</div><div class='del'>-    }.join(", ")</div><div class='del'>-    if proptypes</div><div class='del'>-      types += ", " if types.size &gt; 0 </div><div class='del'>-      types += generate_argtype(proptypes)</div><div class='del'>-    end</div><div class='del'>-    types</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_method_body(method, disptype, types=nil)</div><div class='del'>-    "    ret = #{@reciever}#{disptype}(#{method.dispid}, [" +</div><div class='del'>-    generate_args(method).gsub("=nil", "") +</div><div class='del'>-    "], [" +</div><div class='del'>-    generate_argtypes(method, types) +</div><div class='del'>-    "])\n" +</div><div class='del'>-    "    @lastargs = WIN32OLE::ARGV\n" +</div><div class='del'>-    "    ret"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_method_help(method, type = nil)</div><div class='del'>-    str = "  # "  </div><div class='del'>-    if type </div><div class='del'>-      str += type</div><div class='del'>-    else</div><div class='del'>-      str += method.return_type</div><div class='del'>-    end</div><div class='del'>-    str += " #{method.name}"</div><div class='del'>-    if method.event?</div><div class='del'>-      str += " EVENT"</div><div class='del'>-      str += " in #{method.event_interface}"</div><div class='del'>-    end</div><div class='del'>-    if method.helpstring &amp;&amp; method.helpstring != ""</div><div class='del'>-      str += "\n  # "</div><div class='del'>-      str += method.helpstring</div><div class='del'>-    end</div><div class='del'>-    args_help = generate_method_args_help(method)</div><div class='del'>-    if args_help</div><div class='del'>-      str += "\n"</div><div class='del'>-      str += args_help</div><div class='del'>-    end</div><div class='del'>-    str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_method_args_help(method)</div><div class='del'>-    args = []</div><div class='del'>-    method.params.each_with_index {|param, i|</div><div class='del'>-      h = "  #   #{param.ole_type} arg#{i} --- #{param.name}" </div><div class='del'>-      inout = []</div><div class='del'>-      inout.push "IN" if param.input?</div><div class='del'>-      inout.push "OUT" if param.output?</div><div class='del'>-      h += " [#{inout.join('/')}]"</div><div class='del'>-      h += " ( = #{param.default})" if param.default</div><div class='del'>-      args.push h</div><div class='del'>-    }</div><div class='del'>-    if args.size &gt; 0</div><div class='del'>-      args.join("\n")</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 generate_method(method, disptype, io = STDOUT, types = nil)</div><div class='del'>-    io.puts "\n"</div><div class='del'>-    io.puts  generate_method_help(method)</div><div class='del'>-    if method.invoke_kind == 'PROPERTYPUT'</div><div class='del'>-      io.print "  def #{method.name}=("</div><div class='del'>-    else</div><div class='del'>-      io.print "  def #{method.name}("</div><div class='del'>-    end</div><div class='del'>-    io.print generate_args(method)</div><div class='del'>-    io.puts ")"</div><div class='del'>-    io.puts generate_method_body(method, disptype, types)</div><div class='del'>-    io.puts "  end"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_propputref_methods(klass, io = STDOUT)</div><div class='del'>-    klass.ole_methods.select {|method|</div><div class='del'>-      method.invoke_kind == 'PROPERTYPUTREF' &amp;&amp; method.visible?</div><div class='del'>-    }.each do |method|</div><div class='del'>-      generate_method(method, io)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_properties_with_args(klass, io = STDOUT)</div><div class='del'>-    klass.ole_methods.select {|method|</div><div class='del'>-      method.invoke_kind == 'PROPERTYGET' &amp;&amp;</div><div class='del'>-      method.visible? &amp;&amp;</div><div class='del'>-      method.size_params &gt; 0</div><div class='del'>-    }.each do |method|</div><div class='del'>-      types = method.return_type_detail </div><div class='del'>-      io.puts "\n"</div><div class='del'>-      io.puts  generate_method_help(method, types[0])</div><div class='del'>-      io.puts  "  def #{method.name}"</div><div class='del'>-      if klass.ole_type == "Class"</div><div class='del'>-        io.print "    OLEProperty.new(@dispatch, #{method.dispid}, [" </div><div class='del'>-      else</div><div class='del'>-        io.print "    OLEProperty.new(self, #{method.dispid}, [" </div><div class='del'>-      end</div><div class='del'>-      io.print generate_argtypes(method, nil)</div><div class='del'>-      io.print "], ["</div><div class='del'>-      io.print generate_argtypes(method, types)</div><div class='del'>-      io.puts "])"</div><div class='del'>-      io.puts  "  end"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_propput_methods(klass, io = STDOUT)</div><div class='del'>-    klass.ole_methods.select {|method|</div><div class='del'>-      method.invoke_kind == 'PROPERTYPUT' &amp;&amp; method.visible? &amp;&amp;</div><div class='del'>-      method.size_params == 1</div><div class='del'>-    }.each do |method|</div><div class='del'>-      ms = klass.ole_methods.select {|m|</div><div class='del'>-        m.invoke_kind == 'PROPERTYGET' &amp;&amp;</div><div class='del'>-        m.dispid == method.dispid</div><div class='del'>-      }</div><div class='del'>-      types = []</div><div class='del'>-      if ms.size == 1</div><div class='del'>-        types = ms[0].return_type_detail</div><div class='del'>-      end</div><div class='del'>-      generate_method(method, '_setproperty', io, types)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_propget_methods(klass, io = STDOUT)</div><div class='del'>-    klass.ole_methods.select {|method|</div><div class='del'>-      method.invoke_kind == 'PROPERTYGET' &amp;&amp; method.visible? &amp;&amp;</div><div class='del'>-      method.size_params == 0</div><div class='del'>-    }.each do |method|</div><div class='del'>-      generate_method(method, '_getproperty', io)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_func_methods(klass, io = STDOUT)</div><div class='del'>-    klass.ole_methods.select {|method|</div><div class='del'>-      method.invoke_kind == "FUNC" &amp;&amp; method.visible?</div><div class='del'>-    }.each do |method|</div><div class='del'>-      generate_method(method, '_invoke', io)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_methods(klass, io = STDOUT)</div><div class='del'>-    generate_propget_methods(klass, io)</div><div class='del'>-    generate_propput_methods(klass, io)</div><div class='del'>-    generate_properties_with_args(klass, io)</div><div class='del'>-    generate_func_methods(klass, io)</div><div class='del'>-#   generate_propputref_methods(klass, io)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_constants(klass, io = STDOUT)</div><div class='del'>-    klass.variables.select {|v|</div><div class='del'>-      v.visible? &amp;&amp; v.variable_kind == 'CONSTANT'</div><div class='del'>-    }.each do |v|</div><div class='del'>-      io.print "  "</div><div class='del'>-      io.print v.name.sub(/^./){|c| c.upcase}</div><div class='del'>-      io.print " = "</div><div class='del'>-      io.puts  v.value</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def class_name(klass)</div><div class='del'>-    klass_name = klass.name</div><div class='del'>-    if klass.ole_type == "Class" &amp;&amp;</div><div class='del'>-       klass.guid &amp;&amp;</div><div class='del'>-       klass.progid</div><div class='del'>-       klass_name = klass.progid.gsub(/\./, '_')</div><div class='del'>-    end</div><div class='del'>-    if /^[A-Z]/ !~ klass_name || Module.constants.include?(klass_name)</div><div class='del'>-      klass_name = 'OLE' + klass_name</div><div class='del'>-    end</div><div class='del'>-    klass_name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def define_initialize(klass)</div><div class='del'>-    &lt;&lt;STR</div><div class='del'>-</div><div class='del'>-  def initialize(obj = nil)</div><div class='del'>-    @clsid = "#{klass.guid}"</div><div class='del'>-    @progid = "#{klass.progid}"</div><div class='del'>-    if obj.nil?</div><div class='del'>-      @dispatch = WIN32OLE.new @progid</div><div class='del'>-    else</div><div class='del'>-      @dispatch = obj</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-STR</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def define_include</div><div class='del'>-    "  include WIN32OLE::VARIANT"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def define_instance_variables</div><div class='del'>-    "  attr_reader :lastargs"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def define_method_missing</div><div class='del'>-    &lt;&lt;STR</div><div class='del'>-</div><div class='del'>-  def method_missing(cmd, *arg)</div><div class='del'>-    @dispatch.method_missing(cmd, *arg)</div><div class='del'>-  end</div><div class='del'>-STR</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def define_class(klass, io = STDOUT)</div><div class='del'>-    io.puts "class #{class_name(klass)} # #{klass.name}"</div><div class='del'>-    io.puts define_include</div><div class='del'>-    io.puts define_instance_variables</div><div class='del'>-    io.puts "  attr_reader :dispatch"</div><div class='del'>-    io.puts "  attr_reader :clsid"</div><div class='del'>-    io.puts "  attr_reader :progid"</div><div class='del'>-    io.puts define_initialize(klass)</div><div class='del'>-    io.puts define_method_missing</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def define_module(klass, io = STDOUT)</div><div class='del'>-    io.puts "module #{class_name(klass)}"</div><div class='del'>-    io.puts define_include</div><div class='del'>-    io.puts define_instance_variables</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate_class(klass, io = STDOUT)</div><div class='del'>-    io.puts "\n# #{klass.helpstring}"</div><div class='del'>-    if klass.ole_type == "Class" &amp;&amp;</div><div class='del'>-       klass.guid &amp;&amp;</div><div class='del'>-       klass.progid</div><div class='del'>-      @reciever = "@dispatch."</div><div class='del'>-      define_class(klass, io)</div><div class='del'>-    else</div><div class='del'>-      @reciever = ""</div><div class='del'>-      define_module(klass, io)</div><div class='del'>-    end</div><div class='del'>-    generate_constants(klass, io)</div><div class='del'>-    generate_methods(klass, io)</div><div class='del'>-    io.puts "end"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def generate(io = STDOUT)</div><div class='del'>-    io.puts "require 'win32ole'"</div><div class='del'>-    io.puts "require 'win32ole/property'"</div><div class='del'>-</div><div class='del'>-    ole_classes(typelib).select{|klass|</div><div class='del'>-      klass.visible? &amp;&amp;</div><div class='del'>-      (klass.ole_type == "Class" || </div><div class='del'>-       klass.ole_type == "Interface" || </div><div class='del'>-       klass.ole_type == "Dispatch" ||</div><div class='del'>-       klass.ole_type == "Enum")</div><div class='del'>-    }.each do |klass|</div><div class='del'>-      generate_class(klass, io)</div><div class='del'>-    end</div><div class='del'>-    begin</div><div class='del'>-      @ole.quit if @ole</div><div class='del'>-    rescue </div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  if ARGV.size == 0</div><div class='del'>-    $stderr.puts "usage: #{$0} Type Library [...]"</div><div class='del'>-    exit 1</div><div class='del'>-  end</div><div class='del'>-  ARGV.each do |typelib|</div><div class='del'>-    comgen = WIN32COMGen.new(typelib)</div><div class='del'>-    comgen.generate</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/sample/xml.rb b/ext/win32ole/sample/xml.rb<br/>deleted file mode 100644<br/>index b95d6d5275..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/sample/xml.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/sample/xml.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7306 +0,0 @@</div><div class='del'>-# </div><div class='del'>-# This file created by olegen.rb as following.</div><div class='del'>-#    ruby olegen.rb 'Microsoft XML, version 2.0' &gt; xml.rb</div><div class='del'>-# </div><div class='del'>-require 'win32ole'</div><div class='del'>-require 'win32ole/property'</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-module IXMLDOMImplementation</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BOOL hasFeature</div><div class='del'>-  #   BSTR arg0 --- feature [IN]</div><div class='del'>-  #   BSTR arg1 --- version [IN]</div><div class='del'>-  def hasFeature(arg0, arg1)</div><div class='del'>-    ret = _invoke(145, [arg0, arg1], [VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Core DOM node interface</div><div class='del'>-module IXMLDOMNode</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Constants that define a node's type</div><div class='del'>-module OLEtagDOMNodeType</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-  NODE_INVALID = 0</div><div class='del'>-  NODE_ELEMENT = 1</div><div class='del'>-  NODE_ATTRIBUTE = 2</div><div class='del'>-  NODE_TEXT = 3</div><div class='del'>-  NODE_CDATA_SECTION = 4</div><div class='del'>-  NODE_ENTITY_REFERENCE = 5</div><div class='del'>-  NODE_ENTITY = 6</div><div class='del'>-  NODE_PROCESSING_INSTRUCTION = 7</div><div class='del'>-  NODE_COMMENT = 8</div><div class='del'>-  NODE_DOCUMENT = 9</div><div class='del'>-  NODE_DOCUMENT_TYPE = 10</div><div class='del'>-  NODE_DOCUMENT_FRAGMENT = 11</div><div class='del'>-  NODE_NOTATION = 12</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-module IXMLDOMNodeList</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # I4 length</div><div class='del'>-  # number of nodes in the collection</div><div class='del'>-  def length()</div><div class='del'>-    ret = _getproperty(74, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # PTR item</div><div class='del'>-  # collection of nodes</div><div class='del'>-  #   I4 arg0 --- index [IN]</div><div class='del'>-  def item</div><div class='del'>-    OLEProperty.new(self, 0, [VT_I4], [VT_I4, VT_BYREF|VT_DISPATCH])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextNode</div><div class='del'>-  # get next node from iterator</div><div class='del'>-  def nextNode()</div><div class='del'>-    ret = _invoke(76, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID reset</div><div class='del'>-  # reset the position of iterator</div><div class='del'>-  def reset()</div><div class='del'>-    ret = _invoke(77, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMNamedNodeMap</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # I4 length</div><div class='del'>-  # number of nodes in the collection</div><div class='del'>-  def length()</div><div class='del'>-    ret = _getproperty(74, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # PTR item</div><div class='del'>-  # collection of nodes</div><div class='del'>-  #   I4 arg0 --- index [IN]</div><div class='del'>-  def item</div><div class='del'>-    OLEProperty.new(self, 0, [VT_I4], [VT_I4, VT_BYREF|VT_DISPATCH])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode getNamedItem</div><div class='del'>-  # lookup item by name</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def getNamedItem(arg0)</div><div class='del'>-    ret = _invoke(83, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode setNamedItem</div><div class='del'>-  # set item by name</div><div class='del'>-  #   IXMLDOMNode arg0 --- newItem [IN]</div><div class='del'>-  def setNamedItem(arg0)</div><div class='del'>-    ret = _invoke(84, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeNamedItem</div><div class='del'>-  # remove item by name</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def removeNamedItem(arg0)</div><div class='del'>-    ret = _invoke(85, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode getQualifiedItem</div><div class='del'>-  # lookup the item by name and namespace</div><div class='del'>-  #   BSTR arg0 --- baseName [IN]</div><div class='del'>-  #   BSTR arg1 --- namespaceURI [IN]</div><div class='del'>-  def getQualifiedItem(arg0, arg1)</div><div class='del'>-    ret = _invoke(87, [arg0, arg1], [VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeQualifiedItem</div><div class='del'>-  # remove the item by name and namespace</div><div class='del'>-  #   BSTR arg0 --- baseName [IN]</div><div class='del'>-  #   BSTR arg1 --- namespaceURI [IN]</div><div class='del'>-  def removeQualifiedItem(arg0, arg1)</div><div class='del'>-    ret = _invoke(88, [arg0, arg1], [VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextNode</div><div class='del'>-  # get next node from iterator</div><div class='del'>-  def nextNode()</div><div class='del'>-    ret = _invoke(89, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID reset</div><div class='del'>-  # reset the position of iterator</div><div class='del'>-  def reset()</div><div class='del'>-    ret = _invoke(90, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMDocument</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocumentType doctype</div><div class='del'>-  # node corresponding to the DOCTYPE</div><div class='del'>-  def doctype()</div><div class='del'>-    ret = _getproperty(38, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMImplementation implementation</div><div class='del'>-  # info on this DOM implementation</div><div class='del'>-  def implementation()</div><div class='del'>-    ret = _getproperty(39, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMElement documentElement</div><div class='del'>-  # the root of the tree</div><div class='del'>-  def documentElement()</div><div class='del'>-    ret = _getproperty(40, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 readyState</div><div class='del'>-  # get the state of the XML document</div><div class='del'>-  def readyState()</div><div class='del'>-    ret = _getproperty(-525, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMParseError parseError</div><div class='del'>-  # get the last parser error</div><div class='del'>-  def parseError()</div><div class='del'>-    ret = _getproperty(59, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR url</div><div class='del'>-  # get the URL for the loaded XML document</div><div class='del'>-  def url()</div><div class='del'>-    ret = _getproperty(60, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL async</div><div class='del'>-  # flag for asynchronous download</div><div class='del'>-  def async()</div><div class='del'>-    ret = _getproperty(61, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL validateOnParse</div><div class='del'>-  # indicates whether the parser performs validation</div><div class='del'>-  def validateOnParse()</div><div class='del'>-    ret = _getproperty(65, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL resolveExternals</div><div class='del'>-  # indicates whether the parser resolves references to external DTD/Entities/Schema</div><div class='del'>-  def resolveExternals()</div><div class='del'>-    ret = _getproperty(66, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL preserveWhiteSpace</div><div class='del'>-  # indicates whether the parser preserves whitespace</div><div class='del'>-  def preserveWhiteSpace()</div><div class='del'>-    ret = _getproperty(67, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID async</div><div class='del'>-  # flag for asynchronous download</div><div class='del'>-  def async=(arg0)</div><div class='del'>-    ret = _setproperty(61, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID validateOnParse</div><div class='del'>-  # indicates whether the parser performs validation</div><div class='del'>-  def validateOnParse=(arg0)</div><div class='del'>-    ret = _setproperty(65, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID resolveExternals</div><div class='del'>-  # indicates whether the parser resolves references to external DTD/Entities/Schema</div><div class='del'>-  def resolveExternals=(arg0)</div><div class='del'>-    ret = _setproperty(66, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID preserveWhiteSpace</div><div class='del'>-  # indicates whether the parser preserves whitespace</div><div class='del'>-  def preserveWhiteSpace=(arg0)</div><div class='del'>-    ret = _setproperty(67, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID onreadystatechange</div><div class='del'>-  # register a readystatechange event handler</div><div class='del'>-  def onreadystatechange=(arg0)</div><div class='del'>-    ret = _setproperty(68, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID ondataavailable</div><div class='del'>-  # register an ondataavailable event handler</div><div class='del'>-  def ondataavailable=(arg0)</div><div class='del'>-    ret = _setproperty(69, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID ontransformnode</div><div class='del'>-  # register an ontransformnode event handler</div><div class='del'>-  def ontransformnode=(arg0)</div><div class='del'>-    ret = _setproperty(70, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMElement createElement</div><div class='del'>-  # create an Element node</div><div class='del'>-  #   BSTR arg0 --- tagName [IN]</div><div class='del'>-  def createElement(arg0)</div><div class='del'>-    ret = _invoke(41, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocumentFragment createDocumentFragment</div><div class='del'>-  # create a DocumentFragment node</div><div class='del'>-  def createDocumentFragment()</div><div class='del'>-    ret = _invoke(42, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMText createTextNode</div><div class='del'>-  # create a text node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createTextNode(arg0)</div><div class='del'>-    ret = _invoke(43, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMComment createComment</div><div class='del'>-  # create a comment node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createComment(arg0)</div><div class='del'>-    ret = _invoke(44, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMCDATASection createCDATASection</div><div class='del'>-  # create a CDATA section node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createCDATASection(arg0)</div><div class='del'>-    ret = _invoke(45, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMProcessingInstruction createProcessingInstruction</div><div class='del'>-  # create a processing instruction node</div><div class='del'>-  #   BSTR arg0 --- target [IN]</div><div class='del'>-  #   BSTR arg1 --- data [IN]</div><div class='del'>-  def createProcessingInstruction(arg0, arg1)</div><div class='del'>-    ret = _invoke(46, [arg0, arg1], [VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMAttribute createAttribute</div><div class='del'>-  # create an attribute node</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def createAttribute(arg0)</div><div class='del'>-    ret = _invoke(47, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMEntityReference createEntityReference</div><div class='del'>-  # create an entity reference node</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def createEntityReference(arg0)</div><div class='del'>-    ret = _invoke(49, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList getElementsByTagName</div><div class='del'>-  # build a list of elements by name</div><div class='del'>-  #   BSTR arg0 --- tagName [IN]</div><div class='del'>-  def getElementsByTagName(arg0)</div><div class='del'>-    ret = _invoke(50, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode createNode</div><div class='del'>-  # create a node of the specified node type and name</div><div class='del'>-  #   VARIANT arg0 --- type [IN]</div><div class='del'>-  #   BSTR arg1 --- name [IN]</div><div class='del'>-  #   BSTR arg2 --- namespaceURI [IN]</div><div class='del'>-  def createNode(arg0, arg1, arg2)</div><div class='del'>-    ret = _invoke(54, [arg0, arg1, arg2], [VT_VARIANT, VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nodeFromID</div><div class='del'>-  # retrieve node from it's ID</div><div class='del'>-  #   BSTR arg0 --- idString [IN]</div><div class='del'>-  def nodeFromID(arg0)</div><div class='del'>-    ret = _invoke(56, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL load</div><div class='del'>-  # load document from the specified XML source</div><div class='del'>-  #   VARIANT arg0 --- xmlSource [IN]</div><div class='del'>-  def load(arg0)</div><div class='del'>-    ret = _invoke(58, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID abort</div><div class='del'>-  # abort an asynchronous download</div><div class='del'>-  def abort()</div><div class='del'>-    ret = _invoke(62, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL loadXML</div><div class='del'>-  # load the document from a string</div><div class='del'>-  #   BSTR arg0 --- bstrXML [IN]</div><div class='del'>-  def loadXML(arg0)</div><div class='del'>-    ret = _invoke(63, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID save</div><div class='del'>-  # save the document to a specified desination</div><div class='del'>-  #   VARIANT arg0 --- desination [IN]</div><div class='del'>-  def save(arg0)</div><div class='del'>-    ret = _invoke(64, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMDocumentType</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR name</div><div class='del'>-  # name of the document type (root of the tree)</div><div class='del'>-  def name()</div><div class='del'>-    ret = _getproperty(131, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap entities</div><div class='del'>-  # a list of entities in the document</div><div class='del'>-  def entities()</div><div class='del'>-    ret = _getproperty(132, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap notations</div><div class='del'>-  # a list of notations in the document</div><div class='del'>-  def notations()</div><div class='del'>-    ret = _getproperty(133, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMElement</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR tagName</div><div class='del'>-  # get the tagName of the element</div><div class='del'>-  def tagName()</div><div class='del'>-    ret = _getproperty(97, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT getAttribute</div><div class='del'>-  # look up the string value of an attribute by name</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def getAttribute(arg0)</div><div class='del'>-    ret = _invoke(99, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID setAttribute</div><div class='del'>-  # set the string value of an attribute by name</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  #   VARIANT arg1 --- value [IN]</div><div class='del'>-  def setAttribute(arg0, arg1)</div><div class='del'>-    ret = _invoke(100, [arg0, arg1], [VT_BSTR, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID removeAttribute</div><div class='del'>-  # remove an attribute by name</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def removeAttribute(arg0)</div><div class='del'>-    ret = _invoke(101, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMAttribute getAttributeNode</div><div class='del'>-  # look up the attribute node by name</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def getAttributeNode(arg0)</div><div class='del'>-    ret = _invoke(102, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMAttribute setAttributeNode</div><div class='del'>-  # set the specified attribute on the element</div><div class='del'>-  #   IXMLDOMAttribute arg0 --- DOMAttribute [IN]</div><div class='del'>-  def setAttributeNode(arg0)</div><div class='del'>-    ret = _invoke(103, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMAttribute removeAttributeNode</div><div class='del'>-  # remove the specified attribute</div><div class='del'>-  #   IXMLDOMAttribute arg0 --- DOMAttribute [IN]</div><div class='del'>-  def removeAttributeNode(arg0)</div><div class='del'>-    ret = _invoke(104, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList getElementsByTagName</div><div class='del'>-  # build a list of elements by name</div><div class='del'>-  #   BSTR arg0 --- tagName [IN]</div><div class='del'>-  def getElementsByTagName(arg0)</div><div class='del'>-    ret = _invoke(105, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID normalize</div><div class='del'>-  # collapse all adjacent text nodes in sub-tree</div><div class='del'>-  def normalize()</div><div class='del'>-    ret = _invoke(106, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMAttribute</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR name</div><div class='del'>-  # get name of the attribute</div><div class='del'>-  def name()</div><div class='del'>-    ret = _getproperty(118, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT value</div><div class='del'>-  # string value of the attribute</div><div class='del'>-  def value()</div><div class='del'>-    ret = _getproperty(120, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID value</div><div class='del'>-  # string value of the attribute</div><div class='del'>-  def value=(arg0)</div><div class='del'>-    ret = _setproperty(120, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMDocumentFragment</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMText</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR data</div><div class='del'>-  # value of the node</div><div class='del'>-  def data()</div><div class='del'>-    ret = _getproperty(109, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 length</div><div class='del'>-  # number of characters in value</div><div class='del'>-  def length()</div><div class='del'>-    ret = _getproperty(110, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID data</div><div class='del'>-  # value of the node</div><div class='del'>-  def data=(arg0)</div><div class='del'>-    ret = _setproperty(109, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR substringData</div><div class='del'>-  # retrieve substring of value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  def substringData(arg0, arg1)</div><div class='del'>-    ret = _invoke(111, [arg0, arg1], [VT_I4, VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID appendData</div><div class='del'>-  # append string to value</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def appendData(arg0)</div><div class='del'>-    ret = _invoke(112, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID insertData</div><div class='del'>-  # insert string into value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   BSTR arg1 --- data [IN]</div><div class='del'>-  def insertData(arg0, arg1)</div><div class='del'>-    ret = _invoke(113, [arg0, arg1], [VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID deleteData</div><div class='del'>-  # delete string within the value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  def deleteData(arg0, arg1)</div><div class='del'>-    ret = _invoke(114, [arg0, arg1], [VT_I4, VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID replaceData</div><div class='del'>-  # replace string within the value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  #   BSTR arg2 --- data [IN]</div><div class='del'>-  def replaceData(arg0, arg1, arg2)</div><div class='del'>-    ret = _invoke(115, [arg0, arg1, arg2], [VT_I4, VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMText splitText</div><div class='del'>-  # split the text node into two text nodes at the position specified</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  def splitText(arg0)</div><div class='del'>-    ret = _invoke(123, [arg0], [VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMCharacterData</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR data</div><div class='del'>-  # value of the node</div><div class='del'>-  def data()</div><div class='del'>-    ret = _getproperty(109, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 length</div><div class='del'>-  # number of characters in value</div><div class='del'>-  def length()</div><div class='del'>-    ret = _getproperty(110, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID data</div><div class='del'>-  # value of the node</div><div class='del'>-  def data=(arg0)</div><div class='del'>-    ret = _setproperty(109, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR substringData</div><div class='del'>-  # retrieve substring of value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  def substringData(arg0, arg1)</div><div class='del'>-    ret = _invoke(111, [arg0, arg1], [VT_I4, VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID appendData</div><div class='del'>-  # append string to value</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def appendData(arg0)</div><div class='del'>-    ret = _invoke(112, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID insertData</div><div class='del'>-  # insert string into value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   BSTR arg1 --- data [IN]</div><div class='del'>-  def insertData(arg0, arg1)</div><div class='del'>-    ret = _invoke(113, [arg0, arg1], [VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID deleteData</div><div class='del'>-  # delete string within the value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  def deleteData(arg0, arg1)</div><div class='del'>-    ret = _invoke(114, [arg0, arg1], [VT_I4, VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID replaceData</div><div class='del'>-  # replace string within the value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  #   BSTR arg2 --- data [IN]</div><div class='del'>-  def replaceData(arg0, arg1, arg2)</div><div class='del'>-    ret = _invoke(115, [arg0, arg1, arg2], [VT_I4, VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMComment</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR data</div><div class='del'>-  # value of the node</div><div class='del'>-  def data()</div><div class='del'>-    ret = _getproperty(109, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 length</div><div class='del'>-  # number of characters in value</div><div class='del'>-  def length()</div><div class='del'>-    ret = _getproperty(110, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID data</div><div class='del'>-  # value of the node</div><div class='del'>-  def data=(arg0)</div><div class='del'>-    ret = _setproperty(109, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR substringData</div><div class='del'>-  # retrieve substring of value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  def substringData(arg0, arg1)</div><div class='del'>-    ret = _invoke(111, [arg0, arg1], [VT_I4, VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID appendData</div><div class='del'>-  # append string to value</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def appendData(arg0)</div><div class='del'>-    ret = _invoke(112, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID insertData</div><div class='del'>-  # insert string into value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   BSTR arg1 --- data [IN]</div><div class='del'>-  def insertData(arg0, arg1)</div><div class='del'>-    ret = _invoke(113, [arg0, arg1], [VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID deleteData</div><div class='del'>-  # delete string within the value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  def deleteData(arg0, arg1)</div><div class='del'>-    ret = _invoke(114, [arg0, arg1], [VT_I4, VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID replaceData</div><div class='del'>-  # replace string within the value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  #   BSTR arg2 --- data [IN]</div><div class='del'>-  def replaceData(arg0, arg1, arg2)</div><div class='del'>-    ret = _invoke(115, [arg0, arg1, arg2], [VT_I4, VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMCDATASection</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR data</div><div class='del'>-  # value of the node</div><div class='del'>-  def data()</div><div class='del'>-    ret = _getproperty(109, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 length</div><div class='del'>-  # number of characters in value</div><div class='del'>-  def length()</div><div class='del'>-    ret = _getproperty(110, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID data</div><div class='del'>-  # value of the node</div><div class='del'>-  def data=(arg0)</div><div class='del'>-    ret = _setproperty(109, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR substringData</div><div class='del'>-  # retrieve substring of value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  def substringData(arg0, arg1)</div><div class='del'>-    ret = _invoke(111, [arg0, arg1], [VT_I4, VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID appendData</div><div class='del'>-  # append string to value</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def appendData(arg0)</div><div class='del'>-    ret = _invoke(112, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID insertData</div><div class='del'>-  # insert string into value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   BSTR arg1 --- data [IN]</div><div class='del'>-  def insertData(arg0, arg1)</div><div class='del'>-    ret = _invoke(113, [arg0, arg1], [VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID deleteData</div><div class='del'>-  # delete string within the value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  def deleteData(arg0, arg1)</div><div class='del'>-    ret = _invoke(114, [arg0, arg1], [VT_I4, VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID replaceData</div><div class='del'>-  # replace string within the value</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  #   I4 arg1 --- count [IN]</div><div class='del'>-  #   BSTR arg2 --- data [IN]</div><div class='del'>-  def replaceData(arg0, arg1, arg2)</div><div class='del'>-    ret = _invoke(115, [arg0, arg1, arg2], [VT_I4, VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMText splitText</div><div class='del'>-  # split the text node into two text nodes at the position specified</div><div class='del'>-  #   I4 arg0 --- offset [IN]</div><div class='del'>-  def splitText(arg0)</div><div class='del'>-    ret = _invoke(123, [arg0], [VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMProcessingInstruction</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR target</div><div class='del'>-  # the target</div><div class='del'>-  def target()</div><div class='del'>-    ret = _getproperty(127, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR data</div><div class='del'>-  # the data</div><div class='del'>-  def data()</div><div class='del'>-    ret = _getproperty(128, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID data</div><div class='del'>-  # the data</div><div class='del'>-  def data=(arg0)</div><div class='del'>-    ret = _setproperty(128, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMEntityReference</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# structure for reporting parser errors</div><div class='del'>-module IXMLDOMParseError</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # I4 errorCode</div><div class='del'>-  # the error code</div><div class='del'>-  def errorCode()</div><div class='del'>-    ret = _getproperty(0, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR url</div><div class='del'>-  # the URL of the XML document containing the error</div><div class='del'>-  def url()</div><div class='del'>-    ret = _getproperty(179, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR reason</div><div class='del'>-  # the cause of the error</div><div class='del'>-  def reason()</div><div class='del'>-    ret = _getproperty(180, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR srcText</div><div class='del'>-  # the data where the error occurred</div><div class='del'>-  def srcText()</div><div class='del'>-    ret = _getproperty(181, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 line</div><div class='del'>-  # the line number in the XML document where the error occurred</div><div class='del'>-  def line()</div><div class='del'>-    ret = _getproperty(182, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 linepos</div><div class='del'>-  # the character position in the line containing the error</div><div class='del'>-  def linepos()</div><div class='del'>-    ret = _getproperty(183, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 filepos</div><div class='del'>-  # the absolute file position in the XML document containing the error</div><div class='del'>-  def filepos()</div><div class='del'>-    ret = _getproperty(184, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMNotation</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT publicId</div><div class='del'>-  # the public ID</div><div class='del'>-  def publicId()</div><div class='del'>-    ret = _getproperty(136, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT systemId</div><div class='del'>-  # the system ID</div><div class='del'>-  def systemId()</div><div class='del'>-    ret = _getproperty(137, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</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'>-module IXMLDOMEntity</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT publicId</div><div class='del'>-  # the public ID</div><div class='del'>-  def publicId()</div><div class='del'>-    ret = _getproperty(140, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT systemId</div><div class='del'>-  # the system ID</div><div class='del'>-  def systemId()</div><div class='del'>-    ret = _getproperty(141, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR notationName</div><div class='del'>-  # the name of the notation</div><div class='del'>-  def notationName()</div><div class='del'>-    ret = _getproperty(142, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# XTL runtime object</div><div class='del'>-module IXTLRuntime</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = _getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = _getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = _getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = _getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = _getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = _getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = _getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = _getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = _getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = _getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = _getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = _getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = _getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = _getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = _getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = _getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = _setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = _setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = _setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = _setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = _invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = _invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = _invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = _invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = _invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = _invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = _invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = _invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = _invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = _invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 uniqueID</div><div class='del'>-  #   IXMLDOMNode arg0 --- pNode [IN]</div><div class='del'>-  def uniqueID(arg0)</div><div class='del'>-    ret = _invoke(187, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 depth</div><div class='del'>-  #   IXMLDOMNode arg0 --- pNode [IN]</div><div class='del'>-  def depth(arg0)</div><div class='del'>-    ret = _invoke(188, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 childNumber</div><div class='del'>-  #   IXMLDOMNode arg0 --- pNode [IN]</div><div class='del'>-  def childNumber(arg0)</div><div class='del'>-    ret = _invoke(189, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 ancestorChildNumber</div><div class='del'>-  #   BSTR arg0 --- bstrNodeName [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- pNode [IN]</div><div class='del'>-  def ancestorChildNumber(arg0, arg1)</div><div class='del'>-    ret = _invoke(190, [arg0, arg1], [VT_BSTR, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 absoluteChildNumber</div><div class='del'>-  #   IXMLDOMNode arg0 --- pNode [IN]</div><div class='del'>-  def absoluteChildNumber(arg0)</div><div class='del'>-    ret = _invoke(191, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR formatIndex</div><div class='del'>-  #   I4 arg0 --- lIndex [IN]</div><div class='del'>-  #   BSTR arg1 --- bstrFormat [IN]</div><div class='del'>-  def formatIndex(arg0, arg1)</div><div class='del'>-    ret = _invoke(192, [arg0, arg1], [VT_I4, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR formatNumber</div><div class='del'>-  #   R8 arg0 --- dblNumber [IN]</div><div class='del'>-  #   BSTR arg1 --- bstrFormat [IN]</div><div class='del'>-  def formatNumber(arg0, arg1)</div><div class='del'>-    ret = _invoke(193, [arg0, arg1], [VT_R8, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR formatDate</div><div class='del'>-  #   VARIANT arg0 --- varDate [IN]</div><div class='del'>-  #   BSTR arg1 --- bstrFormat [IN]</div><div class='del'>-  #   VARIANT arg2 --- varDestLocale [IN]</div><div class='del'>-  def formatDate(arg0, arg1, arg2=nil)</div><div class='del'>-    ret = _invoke(194, [arg0, arg1, arg2], [VT_VARIANT, VT_BSTR, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR formatTime</div><div class='del'>-  #   VARIANT arg0 --- varTime [IN]</div><div class='del'>-  #   BSTR arg1 --- bstrFormat [IN]</div><div class='del'>-  #   VARIANT arg2 --- varDestLocale [IN]</div><div class='del'>-  def formatTime(arg0, arg1, arg2=nil)</div><div class='del'>-    ret = _invoke(195, [arg0, arg1, arg2], [VT_VARIANT, VT_BSTR, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# W3C-DOM XML Document</div><div class='del'>-class Microsoft_XMLDOM_1_0 # DOMDocument</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-  attr_reader :dispatch</div><div class='del'>-  attr_reader :clsid</div><div class='del'>-  attr_reader :progid</div><div class='del'>-</div><div class='del'>-  def initialize(obj = nil)</div><div class='del'>-    @clsid = "{2933BF90-7B36-11D2-B20E-00C04F983E60}"</div><div class='del'>-    @progid = "Microsoft.XMLDOM.1.0"</div><div class='del'>-    if obj.nil?</div><div class='del'>-      @dispatch = WIN32OLE.new(@progid)</div><div class='del'>-    else</div><div class='del'>-      @dispatch = obj</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(cmd, *arg)</div><div class='del'>-    @dispatch.method_missing(cmd, *arg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = @dispatch._getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = @dispatch._getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = @dispatch._getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = @dispatch._getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = @dispatch._getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = @dispatch._getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = @dispatch._getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = @dispatch._getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = @dispatch._getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = @dispatch._getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = @dispatch._getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = @dispatch._getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = @dispatch._getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = @dispatch._getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = @dispatch._getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = @dispatch._getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = @dispatch._getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = @dispatch._getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = @dispatch._getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = @dispatch._getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = @dispatch._getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = @dispatch._getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocumentType doctype</div><div class='del'>-  # node corresponding to the DOCTYPE</div><div class='del'>-  def doctype()</div><div class='del'>-    ret = @dispatch._getproperty(38, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMImplementation implementation</div><div class='del'>-  # info on this DOM implementation</div><div class='del'>-  def implementation()</div><div class='del'>-    ret = @dispatch._getproperty(39, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMElement documentElement</div><div class='del'>-  # the root of the tree</div><div class='del'>-  def documentElement()</div><div class='del'>-    ret = @dispatch._getproperty(40, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 readyState</div><div class='del'>-  # get the state of the XML document</div><div class='del'>-  def readyState()</div><div class='del'>-    ret = @dispatch._getproperty(-525, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMParseError parseError</div><div class='del'>-  # get the last parser error</div><div class='del'>-  def parseError()</div><div class='del'>-    ret = @dispatch._getproperty(59, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR url</div><div class='del'>-  # get the URL for the loaded XML document</div><div class='del'>-  def url()</div><div class='del'>-    ret = @dispatch._getproperty(60, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL async</div><div class='del'>-  # flag for asynchronous download</div><div class='del'>-  def async()</div><div class='del'>-    ret = @dispatch._getproperty(61, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL validateOnParse</div><div class='del'>-  # indicates whether the parser performs validation</div><div class='del'>-  def validateOnParse()</div><div class='del'>-    ret = @dispatch._getproperty(65, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL resolveExternals</div><div class='del'>-  # indicates whether the parser resolves references to external DTD/Entities/Schema</div><div class='del'>-  def resolveExternals()</div><div class='del'>-    ret = @dispatch._getproperty(66, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL preserveWhiteSpace</div><div class='del'>-  # indicates whether the parser preserves whitespace</div><div class='del'>-  def preserveWhiteSpace()</div><div class='del'>-    ret = @dispatch._getproperty(67, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID async</div><div class='del'>-  # flag for asynchronous download</div><div class='del'>-  def async=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(61, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID validateOnParse</div><div class='del'>-  # indicates whether the parser performs validation</div><div class='del'>-  def validateOnParse=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(65, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID resolveExternals</div><div class='del'>-  # indicates whether the parser resolves references to external DTD/Entities/Schema</div><div class='del'>-  def resolveExternals=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(66, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID preserveWhiteSpace</div><div class='del'>-  # indicates whether the parser preserves whitespace</div><div class='del'>-  def preserveWhiteSpace=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(67, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID onreadystatechange</div><div class='del'>-  # register a readystatechange event handler</div><div class='del'>-  def onreadystatechange=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(68, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID ondataavailable</div><div class='del'>-  # register an ondataavailable event handler</div><div class='del'>-  def ondataavailable=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(69, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID ontransformnode</div><div class='del'>-  # register an ontransformnode event handler</div><div class='del'>-  def ontransformnode=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(70, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = @dispatch._invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = @dispatch._invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = @dispatch._invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = @dispatch._invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = @dispatch._invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = @dispatch._invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = @dispatch._invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMElement createElement</div><div class='del'>-  # create an Element node</div><div class='del'>-  #   BSTR arg0 --- tagName [IN]</div><div class='del'>-  def createElement(arg0)</div><div class='del'>-    ret = @dispatch._invoke(41, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocumentFragment createDocumentFragment</div><div class='del'>-  # create a DocumentFragment node</div><div class='del'>-  def createDocumentFragment()</div><div class='del'>-    ret = @dispatch._invoke(42, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMText createTextNode</div><div class='del'>-  # create a text node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createTextNode(arg0)</div><div class='del'>-    ret = @dispatch._invoke(43, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMComment createComment</div><div class='del'>-  # create a comment node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createComment(arg0)</div><div class='del'>-    ret = @dispatch._invoke(44, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMCDATASection createCDATASection</div><div class='del'>-  # create a CDATA section node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createCDATASection(arg0)</div><div class='del'>-    ret = @dispatch._invoke(45, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMProcessingInstruction createProcessingInstruction</div><div class='del'>-  # create a processing instruction node</div><div class='del'>-  #   BSTR arg0 --- target [IN]</div><div class='del'>-  #   BSTR arg1 --- data [IN]</div><div class='del'>-  def createProcessingInstruction(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(46, [arg0, arg1], [VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMAttribute createAttribute</div><div class='del'>-  # create an attribute node</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def createAttribute(arg0)</div><div class='del'>-    ret = @dispatch._invoke(47, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMEntityReference createEntityReference</div><div class='del'>-  # create an entity reference node</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def createEntityReference(arg0)</div><div class='del'>-    ret = @dispatch._invoke(49, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList getElementsByTagName</div><div class='del'>-  # build a list of elements by name</div><div class='del'>-  #   BSTR arg0 --- tagName [IN]</div><div class='del'>-  def getElementsByTagName(arg0)</div><div class='del'>-    ret = @dispatch._invoke(50, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode createNode</div><div class='del'>-  # create a node of the specified node type and name</div><div class='del'>-  #   VARIANT arg0 --- type [IN]</div><div class='del'>-  #   BSTR arg1 --- name [IN]</div><div class='del'>-  #   BSTR arg2 --- namespaceURI [IN]</div><div class='del'>-  def createNode(arg0, arg1, arg2)</div><div class='del'>-    ret = @dispatch._invoke(54, [arg0, arg1, arg2], [VT_VARIANT, VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nodeFromID</div><div class='del'>-  # retrieve node from it's ID</div><div class='del'>-  #   BSTR arg0 --- idString [IN]</div><div class='del'>-  def nodeFromID(arg0)</div><div class='del'>-    ret = @dispatch._invoke(56, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL load</div><div class='del'>-  # load document from the specified XML source</div><div class='del'>-  #   VARIANT arg0 --- xmlSource [IN]</div><div class='del'>-  def load(arg0)</div><div class='del'>-    ret = @dispatch._invoke(58, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID abort</div><div class='del'>-  # abort an asynchronous download</div><div class='del'>-  def abort()</div><div class='del'>-    ret = @dispatch._invoke(62, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL loadXML</div><div class='del'>-  # load the document from a string</div><div class='del'>-  #   BSTR arg0 --- bstrXML [IN]</div><div class='del'>-  def loadXML(arg0)</div><div class='del'>-    ret = @dispatch._invoke(63, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID save</div><div class='del'>-  # save the document to a specified desination</div><div class='del'>-  #   VARIANT arg0 --- desination [IN]</div><div class='del'>-  def save(arg0)</div><div class='del'>-    ret = @dispatch._invoke(64, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT ondataavailable EVENT in XMLDOMDocumentEvents</div><div class='del'>-  def ondataavailable()</div><div class='del'>-    ret = @dispatch._invoke(198, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT onreadystatechange EVENT in XMLDOMDocumentEvents</div><div class='del'>-  def onreadystatechange()</div><div class='del'>-    ret = @dispatch._invoke(-609, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# W3C-DOM XML Document (Apartment)</div><div class='del'>-class Microsoft_FreeThreadedXMLDOM_1_0 # DOMFreeThreadedDocument</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-  attr_reader :dispatch</div><div class='del'>-  attr_reader :clsid</div><div class='del'>-  attr_reader :progid</div><div class='del'>-</div><div class='del'>-  def initialize(obj = nil)</div><div class='del'>-    @clsid = "{2933BF91-7B36-11D2-B20E-00C04F983E60}"</div><div class='del'>-    @progid = "Microsoft.FreeThreadedXMLDOM.1.0"</div><div class='del'>-    if obj.nil?</div><div class='del'>-      @dispatch = WIN32OLE.new(@progid)</div><div class='del'>-    else</div><div class='del'>-      @dispatch = obj</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(cmd, *arg)</div><div class='del'>-    @dispatch.method_missing(cmd, *arg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeName</div><div class='del'>-  # name of the node</div><div class='del'>-  def nodeName()</div><div class='del'>-    ret = @dispatch._getproperty(2, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue()</div><div class='del'>-    ret = @dispatch._getproperty(3, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DOMNodeType nodeType</div><div class='del'>-  # the node's type</div><div class='del'>-  def nodeType()</div><div class='del'>-    ret = @dispatch._getproperty(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode parentNode</div><div class='del'>-  # parent of the node</div><div class='del'>-  def parentNode()</div><div class='del'>-    ret = @dispatch._getproperty(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList childNodes</div><div class='del'>-  # the collection of the node's children</div><div class='del'>-  def childNodes()</div><div class='del'>-    ret = @dispatch._getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode firstChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def firstChild()</div><div class='del'>-    ret = @dispatch._getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode lastChild</div><div class='del'>-  # first child of the node</div><div class='del'>-  def lastChild()</div><div class='del'>-    ret = @dispatch._getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode previousSibling</div><div class='del'>-  # left sibling of the node</div><div class='del'>-  def previousSibling()</div><div class='del'>-    ret = @dispatch._getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nextSibling</div><div class='del'>-  # right sibling of the node</div><div class='del'>-  def nextSibling()</div><div class='del'>-    ret = @dispatch._getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNamedNodeMap attributes</div><div class='del'>-  # the collection of the node's attributes</div><div class='del'>-  def attributes()</div><div class='del'>-    ret = @dispatch._getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument ownerDocument</div><div class='del'>-  # document that contains the node</div><div class='del'>-  def ownerDocument()</div><div class='del'>-    ret = @dispatch._getproperty(18, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR nodeTypeString</div><div class='del'>-  # the type of node in string form</div><div class='del'>-  def nodeTypeString()</div><div class='del'>-    ret = @dispatch._getproperty(21, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text()</div><div class='del'>-    ret = @dispatch._getproperty(24, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL specified</div><div class='del'>-  # indicates whether node is a default value</div><div class='del'>-  def specified()</div><div class='del'>-    ret = @dispatch._getproperty(22, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode definition</div><div class='del'>-  # pointer to the definition of the node in the DTD or schema</div><div class='del'>-  def definition()</div><div class='del'>-    ret = @dispatch._getproperty(23, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue()</div><div class='del'>-    ret = @dispatch._getproperty(25, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType()</div><div class='del'>-    ret = @dispatch._getproperty(26, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR xml</div><div class='del'>-  # return the XML source for the node and each of its descendants</div><div class='del'>-  def xml()</div><div class='del'>-    ret = @dispatch._getproperty(27, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL parsed</div><div class='del'>-  # has sub-tree been completely parsed</div><div class='del'>-  def parsed()</div><div class='del'>-    ret = @dispatch._getproperty(31, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR namespaceURI</div><div class='del'>-  # the URI for the namespace applying to the node</div><div class='del'>-  def namespaceURI()</div><div class='del'>-    ret = @dispatch._getproperty(32, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR prefix</div><div class='del'>-  # the prefix for the namespace applying to the node</div><div class='del'>-  def prefix()</div><div class='del'>-    ret = @dispatch._getproperty(33, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR baseName</div><div class='del'>-  # the base name of the node (nodename with the prefix stripped off)</div><div class='del'>-  def baseName()</div><div class='del'>-    ret = @dispatch._getproperty(34, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocumentType doctype</div><div class='del'>-  # node corresponding to the DOCTYPE</div><div class='del'>-  def doctype()</div><div class='del'>-    ret = @dispatch._getproperty(38, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMImplementation implementation</div><div class='del'>-  # info on this DOM implementation</div><div class='del'>-  def implementation()</div><div class='del'>-    ret = @dispatch._getproperty(39, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMElement documentElement</div><div class='del'>-  # the root of the tree</div><div class='del'>-  def documentElement()</div><div class='del'>-    ret = @dispatch._getproperty(40, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 readyState</div><div class='del'>-  # get the state of the XML document</div><div class='del'>-  def readyState()</div><div class='del'>-    ret = @dispatch._getproperty(-525, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMParseError parseError</div><div class='del'>-  # get the last parser error</div><div class='del'>-  def parseError()</div><div class='del'>-    ret = @dispatch._getproperty(59, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR url</div><div class='del'>-  # get the URL for the loaded XML document</div><div class='del'>-  def url()</div><div class='del'>-    ret = @dispatch._getproperty(60, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL async</div><div class='del'>-  # flag for asynchronous download</div><div class='del'>-  def async()</div><div class='del'>-    ret = @dispatch._getproperty(61, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL validateOnParse</div><div class='del'>-  # indicates whether the parser performs validation</div><div class='del'>-  def validateOnParse()</div><div class='del'>-    ret = @dispatch._getproperty(65, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL resolveExternals</div><div class='del'>-  # indicates whether the parser resolves references to external DTD/Entities/Schema</div><div class='del'>-  def resolveExternals()</div><div class='del'>-    ret = @dispatch._getproperty(66, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL preserveWhiteSpace</div><div class='del'>-  # indicates whether the parser preserves whitespace</div><div class='del'>-  def preserveWhiteSpace()</div><div class='del'>-    ret = @dispatch._getproperty(67, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeValue</div><div class='del'>-  # value stored in the node</div><div class='del'>-  def nodeValue=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(3, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID text</div><div class='del'>-  # text content of the node and subtree</div><div class='del'>-  def text=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(24, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID nodeTypedValue</div><div class='del'>-  # get the strongly typed value of the node</div><div class='del'>-  def nodeTypedValue=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(25, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID dataType</div><div class='del'>-  # the data type of the node</div><div class='del'>-  def dataType=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(26, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID async</div><div class='del'>-  # flag for asynchronous download</div><div class='del'>-  def async=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(61, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID validateOnParse</div><div class='del'>-  # indicates whether the parser performs validation</div><div class='del'>-  def validateOnParse=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(65, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID resolveExternals</div><div class='del'>-  # indicates whether the parser resolves references to external DTD/Entities/Schema</div><div class='del'>-  def resolveExternals=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(66, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID preserveWhiteSpace</div><div class='del'>-  # indicates whether the parser preserves whitespace</div><div class='del'>-  def preserveWhiteSpace=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(67, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID onreadystatechange</div><div class='del'>-  # register a readystatechange event handler</div><div class='del'>-  def onreadystatechange=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(68, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID ondataavailable</div><div class='del'>-  # register an ondataavailable event handler</div><div class='del'>-  def ondataavailable=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(69, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID ontransformnode</div><div class='del'>-  # register an ontransformnode event handler</div><div class='del'>-  def ontransformnode=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(70, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode insertBefore</div><div class='del'>-  # insert a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   VARIANT arg1 --- refChild [IN]</div><div class='del'>-  def insertBefore(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(13, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode replaceChild</div><div class='del'>-  # replace a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  #   IXMLDOMNode arg1 --- oldChild [IN]</div><div class='del'>-  def replaceChild(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(14, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode removeChild</div><div class='del'>-  # remove a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- childNode [IN]</div><div class='del'>-  def removeChild(arg0)</div><div class='del'>-    ret = @dispatch._invoke(15, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode appendChild</div><div class='del'>-  # append a child node</div><div class='del'>-  #   IXMLDOMNode arg0 --- newChild [IN]</div><div class='del'>-  def appendChild(arg0)</div><div class='del'>-    ret = @dispatch._invoke(16, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL hasChildNodes</div><div class='del'>-  def hasChildNodes()</div><div class='del'>-    ret = @dispatch._invoke(17, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode cloneNode</div><div class='del'>-  #   BOOL arg0 --- deep [IN]</div><div class='del'>-  def cloneNode(arg0)</div><div class='del'>-    ret = @dispatch._invoke(19, [arg0], [VT_BOOL])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR transformNode</div><div class='del'>-  # apply the stylesheet to the subtree</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  def transformNode(arg0)</div><div class='del'>-    ret = @dispatch._invoke(28, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList selectNodes</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectNodes(arg0)</div><div class='del'>-    ret = @dispatch._invoke(29, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode selectSingleNode</div><div class='del'>-  # execute query on the subtree</div><div class='del'>-  #   BSTR arg0 --- queryString [IN]</div><div class='del'>-  def selectSingleNode(arg0)</div><div class='del'>-    ret = @dispatch._invoke(30, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID transformNodeToObject</div><div class='del'>-  # apply the stylesheet to the subtree, returning the result through a document or a stream</div><div class='del'>-  #   IXMLDOMNode arg0 --- stylesheet [IN]</div><div class='del'>-  #   VARIANT arg1 --- outputObject [IN]</div><div class='del'>-  def transformNodeToObject(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(35, [arg0, arg1], [VT_BYREF|VT_DISPATCH, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMElement createElement</div><div class='del'>-  # create an Element node</div><div class='del'>-  #   BSTR arg0 --- tagName [IN]</div><div class='del'>-  def createElement(arg0)</div><div class='del'>-    ret = @dispatch._invoke(41, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocumentFragment createDocumentFragment</div><div class='del'>-  # create a DocumentFragment node</div><div class='del'>-  def createDocumentFragment()</div><div class='del'>-    ret = @dispatch._invoke(42, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMText createTextNode</div><div class='del'>-  # create a text node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createTextNode(arg0)</div><div class='del'>-    ret = @dispatch._invoke(43, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMComment createComment</div><div class='del'>-  # create a comment node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createComment(arg0)</div><div class='del'>-    ret = @dispatch._invoke(44, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMCDATASection createCDATASection</div><div class='del'>-  # create a CDATA section node</div><div class='del'>-  #   BSTR arg0 --- data [IN]</div><div class='del'>-  def createCDATASection(arg0)</div><div class='del'>-    ret = @dispatch._invoke(45, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMProcessingInstruction createProcessingInstruction</div><div class='del'>-  # create a processing instruction node</div><div class='del'>-  #   BSTR arg0 --- target [IN]</div><div class='del'>-  #   BSTR arg1 --- data [IN]</div><div class='del'>-  def createProcessingInstruction(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(46, [arg0, arg1], [VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMAttribute createAttribute</div><div class='del'>-  # create an attribute node</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def createAttribute(arg0)</div><div class='del'>-    ret = @dispatch._invoke(47, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMEntityReference createEntityReference</div><div class='del'>-  # create an entity reference node</div><div class='del'>-  #   BSTR arg0 --- name [IN]</div><div class='del'>-  def createEntityReference(arg0)</div><div class='del'>-    ret = @dispatch._invoke(49, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNodeList getElementsByTagName</div><div class='del'>-  # build a list of elements by name</div><div class='del'>-  #   BSTR arg0 --- tagName [IN]</div><div class='del'>-  def getElementsByTagName(arg0)</div><div class='del'>-    ret = @dispatch._invoke(50, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode createNode</div><div class='del'>-  # create a node of the specified node type and name</div><div class='del'>-  #   VARIANT arg0 --- type [IN]</div><div class='del'>-  #   BSTR arg1 --- name [IN]</div><div class='del'>-  #   BSTR arg2 --- namespaceURI [IN]</div><div class='del'>-  def createNode(arg0, arg1, arg2)</div><div class='del'>-    ret = @dispatch._invoke(54, [arg0, arg1, arg2], [VT_VARIANT, VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMNode nodeFromID</div><div class='del'>-  # retrieve node from it's ID</div><div class='del'>-  #   BSTR arg0 --- idString [IN]</div><div class='del'>-  def nodeFromID(arg0)</div><div class='del'>-    ret = @dispatch._invoke(56, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL load</div><div class='del'>-  # load document from the specified XML source</div><div class='del'>-  #   VARIANT arg0 --- xmlSource [IN]</div><div class='del'>-  def load(arg0)</div><div class='del'>-    ret = @dispatch._invoke(58, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID abort</div><div class='del'>-  # abort an asynchronous download</div><div class='del'>-  def abort()</div><div class='del'>-    ret = @dispatch._invoke(62, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BOOL loadXML</div><div class='del'>-  # load the document from a string</div><div class='del'>-  #   BSTR arg0 --- bstrXML [IN]</div><div class='del'>-  def loadXML(arg0)</div><div class='del'>-    ret = @dispatch._invoke(63, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID save</div><div class='del'>-  # save the document to a specified desination</div><div class='del'>-  #   VARIANT arg0 --- desination [IN]</div><div class='del'>-  def save(arg0)</div><div class='del'>-    ret = @dispatch._invoke(64, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT ondataavailable EVENT in XMLDOMDocumentEvents</div><div class='del'>-  def ondataavailable()</div><div class='del'>-    ret = @dispatch._invoke(198, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT onreadystatechange EVENT in XMLDOMDocumentEvents</div><div class='del'>-  def onreadystatechange()</div><div class='del'>-    ret = @dispatch._invoke(-609, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# IXMLHttpRequest Interface</div><div class='del'>-module IXMLHttpRequest</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-</div><div class='del'>-  # I4 status</div><div class='del'>-  # Get HTTP status code</div><div class='del'>-  def status()</div><div class='del'>-    ret = _getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR statusText</div><div class='del'>-  # Get HTTP status text</div><div class='del'>-  def statusText()</div><div class='del'>-    ret = _getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DISPATCH responseXML</div><div class='del'>-  # Get response body</div><div class='del'>-  def responseXML()</div><div class='del'>-    ret = _getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR responseText</div><div class='del'>-  # Get response body</div><div class='del'>-  def responseText()</div><div class='del'>-    ret = _getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT responseBody</div><div class='del'>-  # Get response body</div><div class='del'>-  def responseBody()</div><div class='del'>-    ret = _getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT responseStream</div><div class='del'>-  # Get response body</div><div class='del'>-  def responseStream()</div><div class='del'>-    ret = _getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 readyState</div><div class='del'>-  # Get ready state</div><div class='del'>-  def readyState()</div><div class='del'>-    ret = _getproperty(13, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID onreadystatechange</div><div class='del'>-  # Register a complete event handler</div><div class='del'>-  def onreadystatechange=(arg0)</div><div class='del'>-    ret = _setproperty(14, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID open</div><div class='del'>-  # Open HTTP connection</div><div class='del'>-  #   BSTR arg0 --- bstrMethod [IN]</div><div class='del'>-  #   BSTR arg1 --- bstrUrl [IN]</div><div class='del'>-  #   VARIANT arg2 --- varAsync [IN]</div><div class='del'>-  #   VARIANT arg3 --- bstrUser [IN]</div><div class='del'>-  #   VARIANT arg4 --- bstrPassword [IN]</div><div class='del'>-  def open(arg0, arg1, arg2=nil, arg3=nil, arg4=nil)</div><div class='del'>-    ret = _invoke(1, [arg0, arg1, arg2, arg3, arg4], [VT_BSTR, VT_BSTR, VT_VARIANT, VT_VARIANT, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID setRequestHeader</div><div class='del'>-  # Add HTTP request header</div><div class='del'>-  #   BSTR arg0 --- bstrHeader [IN]</div><div class='del'>-  #   BSTR arg1 --- bstrValue [IN]</div><div class='del'>-  def setRequestHeader(arg0, arg1)</div><div class='del'>-    ret = _invoke(2, [arg0, arg1], [VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR getResponseHeader</div><div class='del'>-  # Get HTTP response header</div><div class='del'>-  #   BSTR arg0 --- bstrHeader [IN]</div><div class='del'>-  def getResponseHeader(arg0)</div><div class='del'>-    ret = _invoke(3, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR getAllResponseHeaders</div><div class='del'>-  # Get all HTTP response headers</div><div class='del'>-  def getAllResponseHeaders()</div><div class='del'>-    ret = _invoke(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID send</div><div class='del'>-  # Send HTTP request</div><div class='del'>-  #   VARIANT arg0 --- varBody [IN]</div><div class='del'>-  def send(arg0=nil)</div><div class='del'>-    ret = _invoke(5, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID abort</div><div class='del'>-  # Abort HTTP request</div><div class='del'>-  def abort()</div><div class='del'>-    ret = _invoke(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# XML HTTP Request class.</div><div class='del'>-class Microsoft_XMLHTTP_1 # XMLHTTPRequest</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-  attr_reader :dispatch</div><div class='del'>-  attr_reader :clsid</div><div class='del'>-  attr_reader :progid</div><div class='del'>-</div><div class='del'>-  def initialize(obj = nil)</div><div class='del'>-    @clsid = "{ED8C108E-4349-11D2-91A4-00C04F7969E8}"</div><div class='del'>-    @progid = "Microsoft.XMLHTTP.1"</div><div class='del'>-    if obj.nil?</div><div class='del'>-      @dispatch = WIN32OLE.new(@progid)</div><div class='del'>-    else</div><div class='del'>-      @dispatch = obj</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(cmd, *arg)</div><div class='del'>-    @dispatch.method_missing(cmd, *arg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 status</div><div class='del'>-  # Get HTTP status code</div><div class='del'>-  def status()</div><div class='del'>-    ret = @dispatch._getproperty(7, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR statusText</div><div class='del'>-  # Get HTTP status text</div><div class='del'>-  def statusText()</div><div class='del'>-    ret = @dispatch._getproperty(8, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # DISPATCH responseXML</div><div class='del'>-  # Get response body</div><div class='del'>-  def responseXML()</div><div class='del'>-    ret = @dispatch._getproperty(9, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR responseText</div><div class='del'>-  # Get response body</div><div class='del'>-  def responseText()</div><div class='del'>-    ret = @dispatch._getproperty(10, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT responseBody</div><div class='del'>-  # Get response body</div><div class='del'>-  def responseBody()</div><div class='del'>-    ret = @dispatch._getproperty(11, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VARIANT responseStream</div><div class='del'>-  # Get response body</div><div class='del'>-  def responseStream()</div><div class='del'>-    ret = @dispatch._getproperty(12, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 readyState</div><div class='del'>-  # Get ready state</div><div class='del'>-  def readyState()</div><div class='del'>-    ret = @dispatch._getproperty(13, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID onreadystatechange</div><div class='del'>-  # Register a complete event handler</div><div class='del'>-  def onreadystatechange=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(14, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID open</div><div class='del'>-  # Open HTTP connection</div><div class='del'>-  #   BSTR arg0 --- bstrMethod [IN]</div><div class='del'>-  #   BSTR arg1 --- bstrUrl [IN]</div><div class='del'>-  #   VARIANT arg2 --- varAsync [IN]</div><div class='del'>-  #   VARIANT arg3 --- bstrUser [IN]</div><div class='del'>-  #   VARIANT arg4 --- bstrPassword [IN]</div><div class='del'>-  def open(arg0, arg1, arg2=nil, arg3=nil, arg4=nil)</div><div class='del'>-    ret = @dispatch._invoke(1, [arg0, arg1, arg2, arg3, arg4], [VT_BSTR, VT_BSTR, VT_VARIANT, VT_VARIANT, VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID setRequestHeader</div><div class='del'>-  # Add HTTP request header</div><div class='del'>-  #   BSTR arg0 --- bstrHeader [IN]</div><div class='del'>-  #   BSTR arg1 --- bstrValue [IN]</div><div class='del'>-  def setRequestHeader(arg0, arg1)</div><div class='del'>-    ret = @dispatch._invoke(2, [arg0, arg1], [VT_BSTR, VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR getResponseHeader</div><div class='del'>-  # Get HTTP response header</div><div class='del'>-  #   BSTR arg0 --- bstrHeader [IN]</div><div class='del'>-  def getResponseHeader(arg0)</div><div class='del'>-    ret = @dispatch._invoke(3, [arg0], [VT_BSTR])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # BSTR getAllResponseHeaders</div><div class='del'>-  # Get all HTTP response headers</div><div class='del'>-  def getAllResponseHeaders()</div><div class='del'>-    ret = @dispatch._invoke(4, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID send</div><div class='del'>-  # Send HTTP request</div><div class='del'>-  #   VARIANT arg0 --- varBody [IN]</div><div class='del'>-  def send(arg0=nil)</div><div class='del'>-    ret = @dispatch._invoke(5, [arg0], [VT_VARIANT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID abort</div><div class='del'>-  # Abort HTTP request</div><div class='del'>-  def abort()</div><div class='del'>-    ret = @dispatch._invoke(6, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# XML Data Source Object</div><div class='del'>-class Microsoft_XMLDSO_1_0 # XMLDSOControl</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-  attr_reader :dispatch</div><div class='del'>-  attr_reader :clsid</div><div class='del'>-  attr_reader :progid</div><div class='del'>-</div><div class='del'>-  def initialize(obj = nil)</div><div class='del'>-    @clsid = "{550DDA30-0541-11D2-9CA9-0060B0EC3D39}"</div><div class='del'>-    @progid = "Microsoft.XMLDSO.1.0"</div><div class='del'>-    if obj.nil?</div><div class='del'>-      @dispatch = WIN32OLE.new(@progid)</div><div class='del'>-    else</div><div class='del'>-      @dispatch = obj</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(cmd, *arg)</div><div class='del'>-    @dispatch.method_missing(cmd, *arg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IXMLDOMDocument XMLDocument</div><div class='del'>-  def XMLDocument()</div><div class='del'>-    ret = @dispatch._getproperty(65537, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 JavaDSOCompatible</div><div class='del'>-  def JavaDSOCompatible()</div><div class='del'>-    ret = @dispatch._getproperty(65538, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # I4 readyState</div><div class='del'>-  def readyState()</div><div class='del'>-    ret = @dispatch._getproperty(-525, [], [])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID XMLDocument</div><div class='del'>-  def XMLDocument=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(65537, [arg0], [VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # VOID JavaDSOCompatible</div><div class='del'>-  def JavaDSOCompatible=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(65538, [arg0], [VT_I4])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Constants that define types for IXMLElement.</div><div class='del'>-module OLEtagXMLEMEM_TYPE</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-  XMLELEMTYPE_ELEMENT = 0</div><div class='del'>-  XMLELEMTYPE_TEXT = 1</div><div class='del'>-  XMLELEMTYPE_COMMENT = 2</div><div class='del'>-  XMLELEMTYPE_DOCUMENT = 3</div><div class='del'>-  XMLELEMTYPE_DTD = 4</div><div class='del'>-  XMLELEMTYPE_PI = 5</div><div class='del'>-  XMLELEMTYPE_OTHER = 6</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# XMLDocument extends IXML Document.  It is obsolete.  You should use DOMDocument.  This object should not be confused with the XMLDocument property on the XML data island.</div><div class='del'>-class Msxml # XMLDocument</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  attr_reader :lastargs</div><div class='del'>-  attr_reader :dispatch</div><div class='del'>-  attr_reader :clsid</div><div class='del'>-  attr_reader :progid</div><div class='del'>-</div><div class='del'>-  def initialize(obj = nil)</div><div class='del'>-    @clsid = "{CFC399AF-D876-11D0-9C10-00C04FC99C8E}"</div><div class='del'>-    @progid = "Msxml"</div><div class='del'>-    if obj.nil?</div><div class='del'>-      @dispatch = WIN32OLE.new(@progid)</div><div class='del'>-    else</div><div class='del'>-      @dispatch = obj</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(cmd, *arg)</div><div class='del'>-    @dispatch.method_missing(cmd, *arg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT url</div><div class='del'>-  # set URL to load an XML document from the URL.</div><div class='del'>-  #   BSTR arg0 --- p [IN]</div><div class='del'>-  def url=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(65641, [arg0], [VT_BSTR, VT_HRESULT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT charset</div><div class='del'>-  # get encoding.</div><div class='del'>-  #   BSTR arg0 --- p [IN]</div><div class='del'>-  def charset=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(65645, [arg0], [VT_BSTR, VT_HRESULT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT async</div><div class='del'>-  # get asynchronous loading flag.</div><div class='del'>-  #   BOOL arg0 --- pf [IN]</div><div class='del'>-  def async=(arg0)</div><div class='del'>-    ret = @dispatch._setproperty(65649, [arg0], [VT_BOOL, VT_HRESULT])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT root</div><div class='del'>-  # get root IXMLElement of the XML document.</div><div class='del'>-  #   IXMLElement2,IXMLElement2 arg0 --- p [OUT]</div><div class='del'>-  def root</div><div class='del'>-    OLEProperty.new(@dispatch, 65637, [VT_BYREF|VT_BYREF|VT_DISPATCH], [VT_BYREF|VT_BYREF|VT_DISPATCH, VT_HRESULT])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT url</div><div class='del'>-  # set URL to load an XML document from the URL.</div><div class='del'>-  #   BSTR arg0 --- p [OUT]</div><div class='del'>-  def url</div><div class='del'>-    OLEProperty.new(@dispatch, 65641, [VT_BYREF|VT_BSTR], [VT_BYREF|VT_BSTR, VT_HRESULT])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT readyState</div><div class='del'>-  # get ready state.</div><div class='del'>-  #   I4 arg0 --- pl [OUT]</div><div class='del'>-  def readyState</div><div class='del'>-    OLEProperty.new(@dispatch, 65643, [VT_BYREF|VT_I4], [VT_BYREF|VT_I4, VT_HRESULT])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT charset</div><div class='del'>-  # get encoding.</div><div class='del'>-  #   BSTR arg0 --- p [OUT]</div><div class='del'>-  def charset</div><div class='del'>-    OLEProperty.new(@dispatch, 65645, [VT_BYREF|VT_BSTR], [VT_BYREF|VT_BSTR, VT_HRESULT])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT version</div><div class='del'>-  # get XML version number.</div><div class='del'>-  #   BSTR arg0 --- p [OUT]</div><div class='del'>-  def version</div><div class='del'>-    OLEProperty.new(@dispatch, 65646, [VT_BYREF|VT_BSTR], [VT_BYREF|VT_BSTR, VT_HRESULT])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT doctype</div><div class='del'>-  # get document type.</div><div class='del'>-  #   BSTR arg0 --- p [OUT]</div><div class='del'>-  def doctype</div><div class='del'>-    OLEProperty.new(@dispatch, 65647, [VT_BYREF|VT_BSTR], [VT_BYREF|VT_BSTR, VT_HRESULT])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT async</div><div class='del'>-  # get asynchronous loading flag.</div><div class='del'>-  #   BOOL arg0 --- pf [OUT]</div><div class='del'>-  def async</div><div class='del'>-    OLEProperty.new(@dispatch, 65649, [VT_BYREF|VT_BOOL], [VT_BYREF|VT_BOOL, VT_HRESULT])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # HRESULT createElement</div><div class='del'>-  # create different types of IXMLElements.</div><div class='del'>-  #   VARIANT arg0 --- vType [IN]</div><div class='del'>-  #   VARIANT arg1 --- var1 [IN]</div><div class='del'>-  #   IXMLElement2,IXMLElement2 arg2 --- ppElem [OUT]</div><div class='del'>-  def createElement(arg0, arg1=nil, arg2=nil)</div><div class='del'>-    ret = @dispatch._invoke(65644, [arg0, arg1, arg2], [VT_VARIANT, VT_VARIANT, VT_BYREF|VT_BYREF|VT_DISPATCH])</div><div class='del'>-    @lastargs = WIN32OLE::ARGV</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/oleserver.rb b/ext/win32ole/tests/oleserver.rb<br/>deleted file mode 100644<br/>index bf721373e5..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/oleserver.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/oleserver.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-require 'win32ole'</div><div class='del'>-def oletypelib_name(pat)</div><div class='del'>-  WIN32OLE_TYPE.typelibs.each do |lib|</div><div class='del'>-    return lib if pat =~ lib</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-module OLESERVER</div><div class='del'>-  MS_EXCEL_TYPELIB = oletypelib_name(/^Microsoft Excel .* Object Library$/)</div><div class='del'>-  MS_XML_TYPELIB = oletypelib_name(/^Microsoft XML/)</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/testNIL2VTEMPTY.rb b/ext/win32ole/tests/testNIL2VTEMPTY.rb<br/>deleted file mode 100644<br/>index 555d35fbf3..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/testNIL2VTEMPTY.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testNIL2VTEMPTY.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,28 +0,0 @@</div><div class='del'>-# This is test script to check that WIN32OLE should convert nil to VT_EMPTY in second try.</div><div class='del'>-# [ruby-talk:137054]</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-require 'test/unit'</div><div class='del'>-</div><div class='del'>-class TestNIL2VT_EMPTY &lt; Test::Unit::TestCase</div><div class='del'>-  def setup</div><div class='del'>-    fs = WIN32OLE.new('Scripting.FileSystemObject')</div><div class='del'>-    @path = fs.GetFolder(".").path</div><div class='del'>-  end</div><div class='del'>-  def test_openSchema</div><div class='del'>-    con = nil</div><div class='del'>-    begin</div><div class='del'>-      con = WIN32OLE.new('ADODB.Connection')</div><div class='del'>-      con.connectionString = "Provider=MSDASQL;Extended Properties="</div><div class='del'>-      con.connectionString +="\"DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ=#{@path}\""</div><div class='del'>-      con.open</div><div class='del'>-    rescue</div><div class='del'>-      con = nil</div><div class='del'>-    end</div><div class='del'>-    if con</div><div class='del'>-      rs = con.openSchema(4, [nil,nil,"DUMMY", "TABLE"])</div><div class='del'>-      assert(rs)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/win32ole/tests/testOLEMETHOD.rb b/ext/win32ole/tests/testOLEMETHOD.rb<br/>deleted file mode 100644<br/>index 390c9999f8..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/testOLEMETHOD.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testOLEMETHOD.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,92 +0,0 @@</div><div class='del'>-# You need RubyUnit and MS Excel and MSI to run this test script </div><div class='del'>-</div><div class='del'>-require 'rubyunit'</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-require 'oleserver'</div><div class='del'>-</div><div class='del'>-class TestOLEMETHOD &lt; RUNIT::TestCase</div><div class='del'>-  include OLESERVER</div><div class='del'>-  def setup</div><div class='del'>-    @excel_app = WIN32OLE_TYPE.new(MS_EXCEL_TYPELIB, 'Application')</div><div class='del'>-  end</div><div class='del'>-  def test_s_new</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'Quit')</div><div class='del'>-    assert_instance_of(WIN32OLE_METHOD, m)</div><div class='del'>-    m =  WIN32OLE_METHOD.new(@excel_app, 'WorkbookOpen')</div><div class='del'>-    assert_instance_of(WIN32OLE_METHOD, m)</div><div class='del'>-    m =  WIN32OLE_METHOD.new(@excel_app, 'workbookopen')</div><div class='del'>-    assert_instance_of(WIN32OLE_METHOD, m)</div><div class='del'>-  end</div><div class='del'>-  def test_name</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'Quit')</div><div class='del'>-    assert_equal('Quit', m.name)</div><div class='del'>-  end</div><div class='del'>-  def test_to_s</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'Quit')</div><div class='del'>-    assert_equal('Quit', "#{m}")</div><div class='del'>-  end</div><div class='del'>-  def test_return_type</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert_equal('Range', m.return_type)</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActivePrinter')</div><div class='del'>-    assert_equal('BSTR', m.return_type)</div><div class='del'>-  end</div><div class='del'>-  def test_return_vtype</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert_equal(WIN32OLE::VARIANT::VT_PTR, m.return_vtype)</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActivePrinter')</div><div class='del'>-    assert_equal(WIN32OLE::VARIANT::VT_BSTR, m.return_vtype)</div><div class='del'>-  end</div><div class='del'>-  def test_return_type_detail</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert_equal(['PTR', 'USERDEFINED', 'Range'], m.return_type_detail)</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActivePrinter')</div><div class='del'>-    assert_equal(['BSTR'], m.return_type_detail)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_invoke_kind</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert_equal('PROPERTYGET', m.invoke_kind)</div><div class='del'>-  end</div><div class='del'>-  def test_visible</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert(m.visible?)</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'AddRef')</div><div class='del'>-    assert(!m.visible?)</div><div class='del'>-  end</div><div class='del'>-  def test_event</div><div class='del'>-    m =  WIN32OLE_METHOD.new(@excel_app, 'WorkbookOpen')</div><div class='del'>-    assert(m.event?)</div><div class='del'>-    m =  WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert(!m.event?)</div><div class='del'>-  end</div><div class='del'>-  def test_event_interface</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'WorkbookOpen')</div><div class='del'>-    assert_equal('AppEvents', m.event_interface)</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert_nil(m.event_interface)</div><div class='del'>-  end</div><div class='del'>-  def test_helpstring</div><div class='del'>-    domdoc = WIN32OLE_TYPE.new(MS_XML_TYPELIB, 'DOMDocument')</div><div class='del'>-    m =  WIN32OLE_METHOD.new(domdoc, 'abort')</div><div class='del'>-    assert_equal('abort an asynchronous download', m.helpstring)</div><div class='del'>-  end</div><div class='del'>-  def test_helpfile</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert_match(/VBAXL.*\.(HLP|CHM)$/i, m.helpfile)</div><div class='del'>-  end</div><div class='del'>-  def test_helpcontext</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'ActiveCell')</div><div class='del'>-    assert(m.helpcontext &gt; 0)</div><div class='del'>-  end</div><div class='del'>-  def test_offset_vtbl</div><div class='del'>-    m = WIN32OLE_METHOD.new(@excel_app, 'QueryInterface')</div><div class='del'>-    assert_equal(0, m.offset_vtbl)</div><div class='del'>-  end</div><div class='del'>-  def test_dispid</div><div class='del'>-    tobj = WIN32OLE_TYPE.new('Microsoft Shell Controls And Automation', 'FolderItem2')</div><div class='del'>-    method = WIN32OLE_METHOD.new(tobj, 'InvokeVerb')</div><div class='del'>-    assert_equal(1610743824, method.dispid)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/testOLEPARAM.rb b/ext/win32ole/tests/testOLEPARAM.rb<br/>deleted file mode 100644<br/>index 4014fadbfc..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/testOLEPARAM.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testOLEPARAM.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +0,0 @@</div><div class='del'>-# You need RubyUnit and MS Excel and MSI to run this test script </div><div class='del'>-</div><div class='del'>-require 'rubyunit'</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-require 'oleserver'</div><div class='del'>-</div><div class='del'>-class TestOLEPARAM &lt; RUNIT::TestCase</div><div class='del'>-  include OLESERVER</div><div class='del'>-  def test_name</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    sh = classes.find {|c| c.name == 'Worksheet'}</div><div class='del'>-    saveas = sh.ole_methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    param_names = saveas.params.collect{|p| p.name}</div><div class='del'>-    assert(param_names.size &gt; 0)</div><div class='del'>-    assert(param_names.include?('Filename'))</div><div class='del'>-  end</div><div class='del'>-  def test_to_s</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    sh = classes.find {|c| c.name == 'Worksheet'}</div><div class='del'>-    saveas = sh.ole_methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    param_names = saveas.params.collect{|p| "#{p}"}</div><div class='del'>-    assert(param_names.include?('Filename'))</div><div class='del'>-  end</div><div class='del'>-  def test_ole_type</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    methods = classes.find {|c| c.name == 'Worksheet'}.ole_methods</div><div class='del'>-    f = methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    assert_equal('BSTR', f.params[0].ole_type)</div><div class='del'>-    methods = classes.find {|c| c.name == 'Workbook'}.ole_methods</div><div class='del'>-    f = methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    assert_equal('XlSaveAsAccessMode', f.params[6].ole_type)</div><div class='del'>-  end</div><div class='del'>-  def test_ole_type_detail</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    methods = classes.find {|c| c.name == 'Worksheet'}.ole_methods</div><div class='del'>-    f = methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    assert_equal(['BSTR'], f.params[0].ole_type_detail)</div><div class='del'>-    methods = classes.find {|c| c.name == 'Workbook'}.ole_methods</div><div class='del'>-    f = methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    assert_equal(['USERDEFINED', 'XlSaveAsAccessMode'], f.params[6].ole_type_detail)</div><div class='del'>-  end</div><div class='del'>-  def test_input</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    methods = classes.find {|c| c.name == 'Worksheet'}.ole_methods</div><div class='del'>-    f = methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    assert(f.params[0].input?)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def test_output</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    methods = classes.find {|c| c.name == 'Worksheet'}.ole_methods</div><div class='del'>-    f = methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    assert(!f.params[0].output?)</div><div class='del'>-  end</div><div class='del'>-  def test_optional</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    methods = classes.find {|c| c.name == 'Worksheet'}.ole_methods</div><div class='del'>-    f = methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    assert(!f.params[0].optional?)</div><div class='del'>-    methods = classes.find {|c| c.name == 'Workbook'}.ole_methods</div><div class='del'>-    f = methods.find {|m| m.name == 'SaveAs'}</div><div class='del'>-    assert(f.params[0].optional?)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/testOLETYPE.rb b/ext/win32ole/tests/testOLETYPE.rb<br/>deleted file mode 100644<br/>index d4eb1146e1..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/testOLETYPE.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testOLETYPE.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,96 +0,0 @@</div><div class='del'>-# You need RubyUnit and MS Excel and MSI to run this test script </div><div class='del'>-</div><div class='del'>-require 'rubyunit'</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-require 'oleserver'</div><div class='del'>-</div><div class='del'>-class TestOLETYPE &lt; RUNIT::TestCase</div><div class='del'>-  include OLESERVER</div><div class='del'>-  def test_s_new</div><div class='del'>-    type = WIN32OLE_TYPE.new(MS_EXCEL_TYPELIB, 'Application')</div><div class='del'>-    assert_instance_of(WIN32OLE_TYPE, type)</div><div class='del'>-  end</div><div class='del'>-  def test_s_ole_classes</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    assert(classes.size &gt; 0)</div><div class='del'>-  end</div><div class='del'>-  def test_s_typelibs</div><div class='del'>-    libs = WIN32OLE_TYPE.typelibs</div><div class='del'>-    assert(libs.include?(MS_EXCEL_TYPELIB))</div><div class='del'>-    assert(libs.include?(MS_XML_TYPELIB))</div><div class='del'>-  end</div><div class='del'>-  def test_s_progids</div><div class='del'>-    progids = WIN32OLE_TYPE.progids</div><div class='del'>-    assert(progids.include?('Excel.Application'))</div><div class='del'>-  end</div><div class='del'>-  def test_name</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    class_names = classes.collect{|c|</div><div class='del'>-      c.name</div><div class='del'>-    }</div><div class='del'>-    assert(class_names.include?('Application'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_class_to_s</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    class_names = classes.collect{|c|</div><div class='del'>-      "#{c}"</div><div class='del'>-    }</div><div class='del'>-    assert(class_names.include?('Application'))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_ole_type</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    app = classes.find {|c| c.name == 'Application'}</div><div class='del'>-    assert_equal('Class', app.ole_type)</div><div class='del'>-    app = classes.find {|c| c.name == '_Application'}</div><div class='del'>-    assert_equal('Dispatch', app.ole_type)</div><div class='del'>-  end</div><div class='del'>-  def test_typekind</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    app = classes.find {|c| c.name == 'Application'}</div><div class='del'>-    assert_equal(5, app.typekind)</div><div class='del'>-  end</div><div class='del'>-  def test_visible</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    app = classes.find {|c| c.name == 'Application'}</div><div class='del'>-    assert(app.visible?)</div><div class='del'>-    app = classes.find {|c| c.name == 'IAppEvents'}</div><div class='del'>-    assert(!app.visible?)</div><div class='del'>-  end</div><div class='del'>-  def test_src_type</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_XML_TYPELIB)</div><div class='del'>-    domnode = classes.find {|c| c.name == 'DOMNodeType'}</div><div class='del'>-    assert_equal('tagDOMNodeType', domnode.src_type)</div><div class='del'>-  end</div><div class='del'>-  def test_helpstring</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_XML_TYPELIB)</div><div class='del'>-    domdoc = classes.find {|c| c.name == 'DOMDocument'}</div><div class='del'>-    assert_equal('W3C-DOM XML Document', domdoc.helpstring)</div><div class='del'>-  end</div><div class='del'>-  def test_variables</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    xlchart = classes.find {|c| c.name == 'XlChartType'}</div><div class='del'>-    assert(xlchart.variables.size &gt; 0)</div><div class='del'>-  end</div><div class='del'>-  def test_ole_methods</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    worksheet = classes.find {|c| c.name == 'Worksheet'}</div><div class='del'>-    assert(worksheet.ole_methods.size &gt; 0)</div><div class='del'>-  end</div><div class='del'>-  def test_helpfile</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    worksheet = classes.find {|c| c.name == 'Worksheet'}</div><div class='del'>-    assert_match(/VBAXL.*\.(CHM|HLP)$/, worksheet.helpfile)</div><div class='del'>-  end</div><div class='del'>-  def test_helpcontext</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    worksheet = classes.find {|c| c.name == 'Worksheet'}</div><div class='del'>-    assert_equal(131088, worksheet.helpcontext)</div><div class='del'>-  end</div><div class='del'>-  def test_to_s</div><div class='del'>-    type = WIN32OLE_TYPE.new(MS_EXCEL_TYPELIB, 'Application')</div><div class='del'>-    assert_equal("Application", "#{type}");</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/testOLEVARIABLE.rb b/ext/win32ole/tests/testOLEVARIABLE.rb<br/>deleted file mode 100644<br/>index b4bb0b57d9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/testOLEVARIABLE.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testOLEVARIABLE.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,49 +0,0 @@</div><div class='del'>-# You need RubyUnit and MS Excel and MSI to run this test script </div><div class='del'>-</div><div class='del'>-require 'rubyunit'</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-require 'oleserver'</div><div class='del'>-</div><div class='del'>-class TestOLEVARIABLE &lt; RUNIT::TestCase</div><div class='del'>-  include OLESERVER</div><div class='del'>-  def test_name</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    chart = classes.find {|c| c.name == 'XlChartType'}</div><div class='del'>-    var_names = chart.variables.collect {|m| m.name}</div><div class='del'>-    assert(var_names.size &gt; 0)</div><div class='del'>-    assert(var_names.include?('xl3DColumn'))</div><div class='del'>-  end</div><div class='del'>-  def test_to_s</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    chart = classes.find {|c| c.name == 'XlChartType'}</div><div class='del'>-    var_names = chart.variables.collect {|m| "#{m}"}</div><div class='del'>-    assert(var_names.size &gt; 0)</div><div class='del'>-    assert(var_names.include?('xl3DColumn'))</div><div class='del'>-  end</div><div class='del'>-  def test_ole_type</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    chart = classes.find {|c| c.name == 'XlChartType'}</div><div class='del'>-    var = chart.variables.find {|m| m.name == 'xl3DColumn'}</div><div class='del'>-    assert_equal('INT', var.ole_type)</div><div class='del'>-  end</div><div class='del'>-  def test_ole_type_detail</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    chart = classes.find {|c| c.name == 'XlChartType'}</div><div class='del'>-    var = chart.variables.find {|m| m.name == 'xl3DColumn'}</div><div class='del'>-    assert_equal(['INT'], var.ole_type_detail)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_value</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    chart = classes.find {|c| c.name == 'XlChartType'}</div><div class='del'>-    var = chart.variables.find {|m| m.name == 'xl3DColumn'}</div><div class='del'>-    assert_equal(-4100, var.value)</div><div class='del'>-  end</div><div class='del'>-  def test_visible</div><div class='del'>-    classes = WIN32OLE_TYPE.ole_classes(MS_EXCEL_TYPELIB)</div><div class='del'>-    chart = classes.find {|c| c.name == 'XlChartType'}</div><div class='del'>-    var = chart.variables.find {|m| m.name == 'xl3DColumn'}</div><div class='del'>-    assert(var.visible?)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/testVARIANT.rb b/ext/win32ole/tests/testVARIANT.rb<br/>deleted file mode 100644<br/>index f274778f27..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/testVARIANT.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testVARIANT.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-# You need RubyUnit and MS Excel and MSI to run this test script </div><div class='del'>-</div><div class='del'>-require 'rubyunit'</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-</div><div class='del'>-class TestWin32OLE_VARIANT &lt; RUNIT::TestCase</div><div class='del'>-  include WIN32OLE::VARIANT</div><div class='del'>-  def test_variant</div><div class='del'>-    assert_equal(2, VT_I2)</div><div class='del'>-    assert_equal(3, VT_I4)</div><div class='del'>-    assert_equal(4, VT_R4)</div><div class='del'>-    assert_equal(5, VT_R8)</div><div class='del'>-    assert_equal(6, VT_CY)</div><div class='del'>-    assert_equal(7, VT_DATE)</div><div class='del'>-    assert_equal(8, VT_BSTR)</div><div class='del'>-    assert_equal(9, VT_DISPATCH)</div><div class='del'>-    assert_equal(10, VT_ERROR)</div><div class='del'>-    assert_equal(11, VT_BOOL)</div><div class='del'>-    assert_equal(12, VT_VARIANT)</div><div class='del'>-    assert_equal(13, VT_UNKNOWN)</div><div class='del'>-    assert_equal(16, VT_I1)</div><div class='del'>-    assert_equal(17, VT_UI1)</div><div class='del'>-    assert_equal(18, VT_UI2)</div><div class='del'>-    assert_equal(19, VT_UI4)</div><div class='del'>-    assert_equal(22, VT_INT)</div><div class='del'>-    assert_equal(23, VT_UINT)</div><div class='del'>-    assert_equal(0x2000, VT_ARRAY)</div><div class='del'>-    assert_equal(0x4000, VT_BYREF)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/ext/win32ole/tests/testWIN32OLE.rb b/ext/win32ole/tests/testWIN32OLE.rb<br/>deleted file mode 100644<br/>index d7f9dd2543..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/testWIN32OLE.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testWIN32OLE.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,373 +0,0 @@</div><div class='del'>-# You need RubyUnit and MS Excel and MSI to run this test script </div><div class='del'>-</div><div class='del'>-require 'runit/testcase'</div><div class='del'>-require 'runit/cui/testrunner'</div><div class='del'>-</div><div class='del'>-require 'win32ole'</div><div class='del'>-require 'oleserver'</div><div class='del'>-</div><div class='del'>-module EXCEL_CONST</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module CONST1</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module CONST2</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module CONST3</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TestWin32OLE &lt; RUNIT::TestCase</div><div class='del'>-  include OLESERVER</div><div class='del'>-  def setup</div><div class='del'>-    @excel = WIN32OLE.new("Excel.Application")</div><div class='del'>-    @excel.visible = true</div><div class='del'>-  end</div><div class='del'>-  def test_s_new</div><div class='del'>-    assert_instance_of(WIN32OLE, @excel)</div><div class='del'>-  end</div><div class='del'>-  def test_s_new_DCOM</div><div class='del'>-    rexcel = WIN32OLE.new("Excel.Application", "localhost")</div><div class='del'>-    assert_instance_of(WIN32OLE, rexcel)</div><div class='del'>-    rexcel.visible = true</div><div class='del'>-    rexcel.quit</div><div class='del'>-  end</div><div class='del'>-  def test_s_new_from_clsid</div><div class='del'>-    excel = WIN32OLE.new("{00024500-0000-0000-C000-000000000046}")</div><div class='del'>-    assert_instance_of(WIN32OLE, excel)</div><div class='del'>-    excel.quit</div><div class='del'>-    exc = assert_exception(WIN32OLERuntimeError) {</div><div class='del'>-      WIN32OLE.new("{000}")</div><div class='del'>-    }</div><div class='del'>-    assert_match(/unknown OLE server: `\{000\}'/, exc.message)</div><div class='del'>-  end</div><div class='del'>-  def test_s_connect</div><div class='del'>-    excel2 = WIN32OLE.connect('Excel.Application')</div><div class='del'>-    assert_instance_of(WIN32OLE, excel2)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_s_const_load</div><div class='del'>-    assert(!defined?(EXCEL_CONST::XlTop))</div><div class='del'>-    WIN32OLE.const_load(@excel, EXCEL_CONST)</div><div class='del'>-    assert_equal(-4160, EXCEL_CONST::XlTop)</div><div class='del'>-</div><div class='del'>-    assert(!defined?(CONST1::XlTop))</div><div class='del'>-    WIN32OLE.const_load(MS_EXCEL_TYPELIB, CONST1)</div><div class='del'>-    assert_equal(-4160, CONST1::XlTop)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_s_codepage</div><div class='del'>-    assert_equal(WIN32OLE::CP_ACP, WIN32OLE.codepage)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_s_codepage_set</div><div class='del'>-    WIN32OLE.codepage = WIN32OLE::CP_UTF8</div><div class='del'>-    assert_equal(WIN32OLE::CP_UTF8, WIN32OLE.codepage)</div><div class='del'>-    WIN32OLE.codepage = WIN32OLE::CP_ACP</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_const_CP_ACP</div><div class='del'>-    assert_equal(0, WIN32OLE::CP_ACP)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_const_CP_OEMCP</div><div class='del'>-    assert_equal(1, WIN32OLE::CP_OEMCP)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_const_CP_MACCP</div><div class='del'>-    assert_equal(2, WIN32OLE::CP_MACCP)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_const_CP_THREAD_ACP</div><div class='del'>-    assert_equal(3, WIN32OLE::CP_THREAD_ACP)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_const_CP_SYMBOL</div><div class='del'>-    assert_equal(42, WIN32OLE::CP_SYMBOL)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_const_CP_UTF7</div><div class='del'>-    assert_equal(65000, WIN32OLE::CP_UTF7)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_const_CP_UTF8</div><div class='del'>-    assert_equal(65001, WIN32OLE::CP_UTF8)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_s_codepage_changed</div><div class='del'>-    book = @excel.workbooks.add</div><div class='del'>-    sheet = book.worksheets(1)</div><div class='del'>-    begin</div><div class='del'>-      WIN32OLE.codepage = WIN32OLE::CP_UTF8</div><div class='del'>-      sheet.range("A1").value = [0x3042].pack("U*")</div><div class='del'>-      val = sheet.range("A1").value</div><div class='del'>-      assert_equal("\343\201\202", val)</div><div class='del'>-      WIN32OLE.codepage = WIN32OLE::CP_ACP</div><div class='del'>-      val = sheet.range("A1").value</div><div class='del'>-      assert_equal("\202\240", val)</div><div class='del'>-    ensure</div><div class='del'>-      book.saved = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_get_win32ole_object</div><div class='del'>-    workbooks = @excel.Workbooks;</div><div class='del'>-    assert_instance_of(WIN32OLE, workbooks)</div><div class='del'>-  end</div><div class='del'>-  def test_each</div><div class='del'>-    workbooks = @excel.Workbooks</div><div class='del'>-    assert_no_exception {</div><div class='del'>-      i = 0;</div><div class='del'>-      workbooks.each do |workbook|</div><div class='del'>-        print i += 1</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    workbooks.add</div><div class='del'>-    workbooks.add</div><div class='del'>-    i = 0</div><div class='del'>-    workbooks.each do |workbook|</div><div class='del'>-      i+=1</div><div class='del'>-    end</div><div class='del'>-    assert_equal(2, i)</div><div class='del'>-    workbooks.each do |workbook|</div><div class='del'>-      workbook.saved = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def test_setproperty_bracket</div><div class='del'>-    book = @excel.workbooks.add</div><div class='del'>-    sheet = book.worksheets(1)</div><div class='del'>-    begin</div><div class='del'>-      sheet.range("A1")['Value'] = 10</div><div class='del'>-      assert_equal(10, sheet.range("A1").value)</div><div class='del'>-      sheet['Cells', 1, 2] = 10</div><div class='del'>-      assert_equal(10, sheet.range("B1").value)</div><div class='del'>-      assert_equal(10, sheet['Cells', 1, 2].value)</div><div class='del'>-    ensure</div><div class='del'>-      book.saved = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def test_convert_bignum</div><div class='del'>-    book = @excel.workbooks.add</div><div class='del'>-    sheet = book.worksheets(1)</div><div class='del'>-    begin</div><div class='del'>-      sheet.range("A1").value = 999999999</div><div class='del'>-      sheet.range("A2").value = 9999999999</div><div class='del'>-      sheet.range("A3").value = "=A1*10 + 9"</div><div class='del'>-      assert_equal(9999999999, sheet.range("A2").value)</div><div class='del'>-      assert_equal(9999999999, sheet.range("A3").value)</div><div class='del'>-      sheet.range("A4").value = "2008/03/04"</div><div class='del'>-      assert_equal("2008/03/04 00:00:00", sheet.range("A4").value)</div><div class='del'>-    ensure</div><div class='del'>-      book.saved = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_ole_invoke_with_named_arg</div><div class='del'>-    book = @excel.workbooks.add</div><div class='del'>-    sheets = book.worksheets</div><div class='del'>-    sheet = book.worksheets(1)</div><div class='del'>-    num = sheets.count</div><div class='del'>-    begin</div><div class='del'>-      sheets.add({'count' =&gt; 2, 'after'=&gt;sheet})</div><div class='del'>-      assert_equal(2, sheets.count - num);</div><div class='del'>-    ensure</div><div class='del'>-      book.saved = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_ole_invoke_with_named_arg_last</div><div class='del'>-    book = @excel.workbooks.add</div><div class='del'>-    sheets = book.worksheets</div><div class='del'>-    sheet = book.worksheets(1)</div><div class='del'>-    num = sheets.count</div><div class='del'>-    begin</div><div class='del'>-      sheets.add(sheet, {'count' =&gt; 2})</div><div class='del'>-      assert_equal(2, sheets.count - num);</div><div class='del'>-    ensure</div><div class='del'>-      book.saved = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_setproperty</div><div class='del'>-    @excel.setproperty('Visible', false)</div><div class='del'>-    assert_equal(false, @excel.Visible)</div><div class='del'>-    @excel.setproperty('Visible', true)</div><div class='del'>-    assert_equal(true, @excel.Visible)</div><div class='del'>-    book = @excel.workbooks.add</div><div class='del'>-    sheet = book.worksheets(1)</div><div class='del'>-    begin</div><div class='del'>-      sheet.setproperty('Cells', 1, 2, 10)</div><div class='del'>-      assert_equal(10, sheet.range("B1").value)</div><div class='del'>-    ensure</div><div class='del'>-      book.saved = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def test_no_exist_property</div><div class='del'>-    isok = false</div><div class='del'>-    begin</div><div class='del'>-      @excel.unknown_prop = 1</div><div class='del'>-    rescue WIN32OLERuntimeError</div><div class='del'>-      isok = true</div><div class='del'>-    end</div><div class='del'>-    assert(isok)</div><div class='del'>-</div><div class='del'>-    isok = false</div><div class='del'>-    begin</div><div class='del'>-      @excel['unknown_prop'] = 2</div><div class='del'>-    rescue WIN32OLERuntimeError</div><div class='del'>-      isok = true</div><div class='del'>-    end</div><div class='del'>-    assert(isok)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_setproperty_with_equal</div><div class='del'>-    book = @excel.workbooks.add</div><div class='del'>-    sheet = book.worksheets(1)</div><div class='del'>-    begin</div><div class='del'>-      sheet.range("B1").value = 10</div><div class='del'>-      assert_equal(10, sheet.range("B1").value)</div><div class='del'>-      sheet.range("C1:D1").value = [11, 12]</div><div class='del'>-      assert_equal(11, sheet.range("C1").value)</div><div class='del'>-      assert_equal(12, sheet.range("D1").value)</div><div class='del'>-    ensure</div><div class='del'>-      book.saved = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def test_invoke</div><div class='del'>-    workbooks = @excel.invoke( 'workbooks' )</div><div class='del'>-    assert_instance_of(WIN32OLE, workbooks)</div><div class='del'>-    book = workbooks.invoke( 'add' )</div><div class='del'>-    assert_instance_of(WIN32OLE, book)</div><div class='del'>-  end</div><div class='del'>-  def test_ole_methods</div><div class='del'>-    methods = @excel.ole_methods</div><div class='del'>-    method_names = methods.collect{|m| m.name}</div><div class='del'>-    assert(method_names.include?("Quit"))</div><div class='del'>-  end</div><div class='del'>-  def test_ole_func_methods</div><div class='del'>-    methods = @excel.ole_func_methods</div><div class='del'>-    assert(methods.size &gt; 0)</div><div class='del'>-    method_names = methods.collect{|m| m.name}</div><div class='del'>-    assert(method_names.include?("Quit"))</div><div class='del'>-  end</div><div class='del'>-  def test_ole_put_methods</div><div class='del'>-    methods = @excel.ole_put_methods</div><div class='del'>-    assert(methods.size &gt; 0)</div><div class='del'>-    method_names = methods.collect{|m| m.name}</div><div class='del'>-    assert(method_names.include?("Visible"))</div><div class='del'>-  end</div><div class='del'>-  def test_ole_get_methods</div><div class='del'>-    methods = @excel.ole_get_methods</div><div class='del'>-    assert(methods.size &gt; 0)</div><div class='del'>-    method_names = methods.collect{|m| m.name}</div><div class='del'>-    assert(method_names.include?("Visible"))</div><div class='del'>-  end</div><div class='del'>-  def test_ole_method_help</div><div class='del'>-    quit_info = @excel.ole_method_help("Quit")</div><div class='del'>-    assert_equal(0, quit_info.size_params)</div><div class='del'>-    assert_equal(0, quit_info.size_opt_params)</div><div class='del'>-</div><div class='del'>-    workbooks = @excel.Workbooks</div><div class='del'>-    add_info = workbooks.ole_method_help("Add")</div><div class='del'>-    assert_equal(1, add_info.size_params)</div><div class='del'>-    assert_equal(1, add_info.size_opt_params)</div><div class='del'>-    assert(add_info.params[0].input?)</div><div class='del'>-    assert(add_info.params[0].optional?)</div><div class='del'>-    assert_equal('VARIANT', add_info.params[0].ole_type)</div><div class='del'>-  end</div><div class='del'>-  def teardown</div><div class='del'>-    @excel.quit</div><div class='del'>-    @excel = nil</div><div class='del'>-    GC.start</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TestWin32OLE_WITH_MSI &lt; RUNIT::TestCase</div><div class='del'>-  def setup</div><div class='del'>-    installer = WIN32OLE.new("WindowsInstaller.Installer")</div><div class='del'>-    @record = installer.CreateRecord(2)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Sorry, this test fails. </div><div class='del'>-  # Win32OLE does not support this style to set property.</div><div class='del'>-  # Use Win32OLE#setproperty or Win32OLE#[]= .</div><div class='del'>-  # def test_invoke</div><div class='del'>-  #   @record.invoke("StringData", 1, 'cccc')</div><div class='del'>-  #   assert_equal('cccc', @record.StringData(1))</div><div class='del'>-  # end</div><div class='del'>-</div><div class='del'>-  def test_setproperty</div><div class='del'>-    @record.setproperty( "StringData", 1, 'dddd')</div><div class='del'>-    assert_equal('dddd', @record.StringData(1))</div><div class='del'>-  end</div><div class='del'>-  def test_bracket_equal_with_arg</div><div class='del'>-    @record[ "StringData", 1 ] =  'ffff'</div><div class='del'>-    assert_equal('ffff', @record.StringData(1))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test__invoke</div><div class='del'>-    shell=WIN32OLE.new('Shell.Application')</div><div class='del'>-    assert_equal(shell.NameSpace(0).title, shell._invoke(0x60020002, [0], [WIN32OLE::VARIANT::VT_VARIANT]).title)</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'>-# a subclass of Win32OLE</div><div class='del'>-# override new() and connect()</div><div class='del'>-class MyExcel&lt;WIN32OLE</div><div class='del'>-    def MyExcel.new </div><div class='del'>-        super "Excel.Application"</div><div class='del'>-    end</div><div class='del'>-    def MyExcel.connect</div><div class='del'>-        super "Excel.Application"</div><div class='del'>-    end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TestMyExcel &lt; TestWin32OLE</div><div class='del'>-#</div><div class='del'>-# because we overrided new() and connect()</div><div class='del'>-# we need to change the test.</div><div class='del'>-# also, because the class will be different</div><div class='del'>-# </div><div class='del'>-  def setup</div><div class='del'>-    @excel = MyExcel.new</div><div class='del'>-    @excel.visible = true</div><div class='del'>-  end</div><div class='del'>-  def test_s_new</div><div class='del'>-    assert_instance_of(MyExcel, @excel)</div><div class='del'>-  end</div><div class='del'>-  def test_s_connect</div><div class='del'>-    excel2 = MyExcel.connect</div><div class='del'>-    assert_instance_of(MyExcel, excel2)</div><div class='del'>-  end</div><div class='del'>-#</div><div class='del'>-# const_load didn't like to be called twice,</div><div class='del'>-# and I don't know how to undefine something in Ruby yet </div><div class='del'>-# so, hide the test.</div><div class='del'>-#</div><div class='del'>-  private :test_s_const_load</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  puts "Now Test Win32OLE version #{WIN32OLE::VERSION}"</div><div class='del'>-  if ARGV.size == 0</div><div class='del'>-	suite = RUNIT::TestSuite.new</div><div class='del'>-	suite.add_test(TestWin32OLE.suite)</div><div class='del'>-	suite.add_test(TestMyExcel.suite)</div><div class='del'>-    begin</div><div class='del'>-      installer = WIN32OLE.new("WindowsInstaller.Installer")</div><div class='del'>-      suite.add_test(TestWin32OLE_WITH_MSI.suite)</div><div class='del'>-    rescue</div><div class='del'>-      puts "Skip some test with MSI"</div><div class='del'>-    end</div><div class='del'>-  else</div><div class='del'>-    suite = RUNIT::TestSuite.new</div><div class='del'>-    ARGV.each do |testmethod|</div><div class='del'>-      suite.add_test(TestWin32OLE.new(testmethod))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  RUNIT::CUI::TestRunner.quiet_mode = true</div><div class='del'>-  RUNIT::CUI::TestRunner.run(suite)</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/test_ole_methods.rb b/ext/win32ole/tests/test_ole_methods.rb<br/>deleted file mode 100644<br/>index ca1c03b010..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/test_ole_methods.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/test_ole_methods.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# This is test for [ruby-talk:196897]</div><div class='del'>-#</div><div class='del'>-begin</div><div class='del'>-  require 'win32ole'</div><div class='del'>-rescue LoadError</div><div class='del'>-end</div><div class='del'>-require "test/unit"</div><div class='del'>-</div><div class='del'>-if defined?(WIN32OLE)</div><div class='del'>-  class TestWIN32OLE_FOR_PROPERTYPUTREF &lt; Test::Unit::TestCase</div><div class='del'>-    </div><div class='del'>-    def setup</div><div class='del'>-      @obj = WIN32OLE.new('Scripting.Dictionary')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_ole_methods</div><div class='del'>-      x = @obj.ole_methods.select {|m|</div><div class='del'>-        m.invoke_kind == 'PROPERTYPUTREF'</div><div class='del'>-      }</div><div class='del'>-      assert(x.size &gt; 0)</div><div class='del'>-      assert_equal(1, x.size)</div><div class='del'>-      assert_equal('Item', x[0].name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_ole_put_methods</div><div class='del'>-      x = @obj.ole_put_methods.select {|m|</div><div class='del'>-        m.invoke_kind == 'PROPERTYPUTREF'</div><div class='del'>-      }</div><div class='del'>-      assert(x.size &gt; 0)</div><div class='del'>-      assert_equal(1, x.size)</div><div class='del'>-      assert_equal('Item', x[0].name)</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/win32ole/tests/test_propertyputref.rb b/ext/win32ole/tests/test_propertyputref.rb<br/>deleted file mode 100644<br/>index befc35ca9c..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/test_propertyputref.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/test_propertyputref.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-require 'test/unit'</div><div class='del'>-require 'win32ole'</div><div class='del'>-</div><div class='del'>-class TestWIN32OLE_PROPERTYPUTREF &lt; Test::Unit::TestCase</div><div class='del'>-  def setup</div><div class='del'>-    begin</div><div class='del'>-      @sapi = WIN32OLE.new('SAPI.SpVoice')</div><div class='del'>-    rescue WIN32OLERuntimeError</div><div class='del'>-      @sapi = nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def test_sapi</div><div class='del'>-    if @sapi</div><div class='del'>-      new_id = @sapi.getvoices.item(2).Id</div><div class='del'>-      @sapi.voice = @sapi.getvoices.item(2)</div><div class='del'>-      assert_equal(new_id, @sapi.voice.Id)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/test_win32ole_event.rb b/ext/win32ole/tests/test_win32ole_event.rb<br/>deleted file mode 100644<br/>index 744021dfd2..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/test_win32ole_event.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/test_win32ole_event.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,133 +0,0 @@</div><div class='del'>-begin</div><div class='del'>-  require 'win32ole'</div><div class='del'>-rescue LoadError</div><div class='del'>-end</div><div class='del'>-require 'test/unit'</div><div class='del'>-</div><div class='del'>-if defined?(WIN32OLE_EVENT)</div><div class='del'>-  class TestWIN32OLE_EVENT &lt; Test::Unit::TestCase</div><div class='del'>-    def create_temp_html</div><div class='del'>-      fso = WIN32OLE.new('Scripting.FileSystemObject')</div><div class='del'>-      dummy_file = fso.GetTempName + ".html"</div><div class='del'>-      cfolder = fso.getFolder(".")</div><div class='del'>-      f = cfolder.CreateTextFile(dummy_file)</div><div class='del'>-      f.writeLine("&lt;html&gt;&lt;body&gt;This is test HTML file for Win32OLE.&lt;/body&gt;&lt;/html&gt;")</div><div class='del'>-      f.close</div><div class='del'>-      dummy_path = cfolder.path + "\\" + dummy_file</div><div class='del'>-      dummy_path</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def setup</div><div class='del'>-      @ie = WIN32OLE.new("InternetExplorer.Application")</div><div class='del'>-      @ie.visible = true</div><div class='del'>-      @event = ""</div><div class='del'>-      @event2 = ""</div><div class='del'>-      @event3 = ""</div><div class='del'>-      @f = create_temp_html</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def default_handler(event, *args)</div><div class='del'>-      @event += event</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_on_event</div><div class='del'>-      ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')</div><div class='del'>-      ev.on_event {|*args| default_handler(*args)}</div><div class='del'>-      @ie.navigate("file:///#{@f}")</div><div class='del'>-      while @ie.busy</div><div class='del'>-        WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents') </div><div class='del'>-        GC.start  </div><div class='del'>-        sleep 0.1</div><div class='del'>-      end</div><div class='del'>-      assert_match(/BeforeNavigate/, @event)</div><div class='del'>-      assert_match(/NavigateComplete/, @event)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_on_event2</div><div class='del'>-      ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')</div><div class='del'>-      ev.on_event('BeforeNavigate') {|*args| handler1}</div><div class='del'>-      ev.on_event('BeforeNavigate') {|*args| handler2}</div><div class='del'>-      @ie.navigate("file:///#{@f}")</div><div class='del'>-      while @ie.busy</div><div class='del'>-        sleep 0.1</div><div class='del'>-      end</div><div class='del'>-      assert_equal("handler2", @event2)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_on_event3</div><div class='del'>-      ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')</div><div class='del'>-      ev.on_event {|*args| handler1}</div><div class='del'>-      ev.on_event {|*args| handler2}</div><div class='del'>-      @ie.navigate("file:///#{@f}")</div><div class='del'>-      while @ie.busy</div><div class='del'>-        sleep 0.1</div><div class='del'>-      end</div><div class='del'>-      assert_equal("handler2", @event2)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_on_event4</div><div class='del'>-      ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')</div><div class='del'>-      ev.on_event{|*args| handler1}</div><div class='del'>-      ev.on_event{|*args| handler2}</div><div class='del'>-      ev.on_event('NavigateComplete'){|*args| handler3(*args)}</div><div class='del'>-      @ie.navigate("file:///#{@f}")</div><div class='del'>-      while @ie.busy</div><div class='del'>-        sleep 0.1</div><div class='del'>-      end</div><div class='del'>-      assert(@event3!="")</div><div class='del'>-      assert("handler2", @event2)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_on_event5</div><div class='del'>-      ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')</div><div class='del'>-      ev.on_event {|*args| default_handler(*args)}</div><div class='del'>-      ev.on_event('NavigateComplete'){|*args| handler3(*args)}</div><div class='del'>-      @ie.navigate("file:///#{@f}")</div><div class='del'>-      while @ie.busy</div><div class='del'>-        sleep 0.1</div><div class='del'>-      end</div><div class='del'>-      assert_match(/BeforeNavigate/, @event)</div><div class='del'>-      assert(/NavigateComplete/ !~ @event)</div><div class='del'>-      assert(@event!="")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_unadvise</div><div class='del'>-      ev = WIN32OLE_EVENT.new(@ie, 'DWebBrowserEvents')</div><div class='del'>-      ev.on_event {|*args| default_handler(*args)}</div><div class='del'>-      @ie.navigate("file:///#{@f}")</div><div class='del'>-      while @ie.busy</div><div class='del'>-        sleep 0.1</div><div class='del'>-      end</div><div class='del'>-      assert_match(/BeforeNavigate/, @event)</div><div class='del'>-      ev.unadvise</div><div class='del'>-      @event = ""</div><div class='del'>-      @ie.navigate("file:///#{@f}")</div><div class='del'>-      while @ie.busy</div><div class='del'>-        sleep 0.1</div><div class='del'>-      end</div><div class='del'>-      assert_equal("", @event);</div><div class='del'>-      assert_raise(WIN32OLERuntimeError) {</div><div class='del'>-        ev.on_event {|*args| default_handler(*args)}</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def handler1</div><div class='del'>-      @event2 = "handler1"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def handler2</div><div class='del'>-      @event2 = "handler2"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def handler3(url)</div><div class='del'>-      @event3 += url</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def teardown</div><div class='del'>-      @ie.quit</div><div class='del'>-      @ie = nil</div><div class='del'>-      File.unlink(@f)</div><div class='del'>-      GC.start</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/ext/win32ole/tests/test_word.rb b/ext/win32ole/tests/test_word.rb<br/>deleted file mode 100644<br/>index 53a6c521ba..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/test_word.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/test_word.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,37 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# This is test for [ruby-Bugs#3237]</div><div class='del'>-#</div><div class='del'>-begin</div><div class='del'>-  require 'win32ole'</div><div class='del'>-rescue LoadError</div><div class='del'>-end</div><div class='del'>-require "test/unit"</div><div class='del'>-</div><div class='del'>-if defined?(WIN32OLE)</div><div class='del'>-  class TestWIN32OLE_WITH_WORD &lt; Test::Unit::TestCase</div><div class='del'>-    </div><div class='del'>-    def setup</div><div class='del'>-      begin</div><div class='del'>-        @obj = WIN32OLE.new('Word.Application')</div><div class='del'>-      rescue WIN32OLERuntimeError</div><div class='del'>-        @obj = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_ole_methods</div><div class='del'>-      if @obj</div><div class='del'>-        @obj.visible = true</div><div class='del'>-        @obj.wordbasic.disableAutoMacros(true)</div><div class='del'>-        assert(true)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def teardown</div><div class='del'>-      if @obj</div><div class='del'>-        @obj.quit</div><div class='del'>-        @obj = nil</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/win32ole/tests/testall.rb b/ext/win32ole/tests/testall.rb<br/>deleted file mode 100644<br/>index 553ce88509..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/tests/testall.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/tests/testall.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-require 'rubyunit'</div><div class='del'>-require 'win32ole'</div><div class='del'>-puts "Now Test Win32OLE version #{WIN32OLE::VERSION}"</div><div class='del'>-# RUNIT::CUI::TestRunner.quiet_mode = true</div><div class='del'>-require "testWIN32OLE"</div><div class='del'>-require "testOLETYPE"</div><div class='del'>-require "testOLEPARAM"</div><div class='del'>-require "testOLEMETHOD"</div><div class='del'>-require "testOLEVARIABLE"</div><div class='del'>-require "testVARIANT"</div><div class='del'>-require "testNIL2VTEMPTY"</div><div class='del'>-require "test_ole_methods.rb"</div><div class='del'>-require "test_propertyputref.rb"</div><div class='del'>-require "test_word.rb"</div><div class='del'>-require "test_win32ole_event.rb"</div><div class='del'>-# require "testOLEEVENT"</div><div class='head'>diff --git a/ext/win32ole/win32ole.c b/ext/win32ole/win32ole.c<br/>deleted file mode 100644<br/>index ae0066ffc9..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/win32ole/win32ole.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/win32ole/win32ole.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6452 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- *  (c) 1995 Microsoft Corporation. All rights reserved.</div><div class='del'>- *  Developed by ActiveWare Internet Corp., http://www.ActiveWare.com</div><div class='del'>- *</div><div class='del'>- *  Other modifications Copyright (c) 1997, 1998 by Gurusamy Sarathy</div><div class='del'>- *  &lt;gsar@umich.edu&gt; and Jan Dubois &lt;jan.dubois@ibm.net&gt;</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 the Perl distribution.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>-  $Date$</div><div class='del'>-  modified for win32ole (ruby) by Masaki.Suketa &lt;masaki.suketa@nifty.ne.jp&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "st.h"</div><div class='del'>-#include &lt;windows.h&gt;</div><div class='del'>-#include &lt;ocidl.h&gt;</div><div class='del'>-#include &lt;olectl.h&gt;</div><div class='del'>-#include &lt;ole2.h&gt;</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-#include &lt;stdarg.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a,b)</div><div class='del'>-#else</div><div class='del'>-#include &lt;varargs.h&gt;</div><div class='del'>-#define va_init_list(a,b) va_start(a)</div><div class='del'>-#endif</div><div class='del'>-#include &lt;objidl.h&gt;</div><div class='del'>-</div><div class='del'>-#define DOUT fprintf(stderr,"[%d]\n",__LINE__)</div><div class='del'>-#define DOUTS(x) fprintf(stderr,"[%d]:" #x "=%s\n",__LINE__,x)</div><div class='del'>-#define DOUTMSG(x) fprintf(stderr, "[%d]:" #x "\n",__LINE__)</div><div class='del'>-#define DOUTI(x) fprintf(stderr, "[%ld]:" #x "=%d\n",__LINE__,x)</div><div class='del'>-#define DOUTD(x) fprintf(stderr, "[%d]:" #x "=%f\n",__LINE__,x)</div><div class='del'>-</div><div class='del'>-#if defined NONAMELESSUNION &amp;&amp; __GNUC__</div><div class='del'>-#define V_UNION1(X, Y) ((X)-&gt;u.Y)</div><div class='del'>-#else</div><div class='del'>-#define V_UNION1(X, Y) ((X)-&gt;Y)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined NONAMELESSUNION &amp;&amp; __GNUC__</div><div class='del'>-#undef V_UNION</div><div class='del'>-#define V_UNION(X,Y) ((X)-&gt;n1.n2.n3.Y)</div><div class='del'>-</div><div class='del'>-#undef V_VT</div><div class='del'>-#define V_VT(X) ((X)-&gt;n1.n2.vt)</div><div class='del'>-</div><div class='del'>-#undef V_BOOL</div><div class='del'>-#define V_BOOL(X) V_UNION(X,boolVal)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define OLE_RELEASE(X) (X) ? ((X)-&gt;lpVtbl-&gt;Release(X)) : 0</div><div class='del'>-</div><div class='del'>-#define OLE_ADDREF(X) (X) ? ((X)-&gt;lpVtbl-&gt;AddRef(X)) : 0</div><div class='del'>-</div><div class='del'>-#define OLE_GET_TYPEATTR(X, Y) ((X)-&gt;lpVtbl-&gt;GetTypeAttr((X), (Y)))</div><div class='del'>-#define OLE_RELEASE_TYPEATTR(X, Y) ((X)-&gt;lpVtbl-&gt;ReleaseTypeAttr((X), (Y)))</div><div class='del'>-</div><div class='del'>-#define OLE_FREE(x) {\</div><div class='del'>-    if(gOLEInitialized == Qtrue) {\</div><div class='del'>-        if(x) {\</div><div class='del'>-            OLE_RELEASE(x);\</div><div class='del'>-            (x) = 0;\</div><div class='del'>-        }\</div><div class='del'>-    }\</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define OLEData_Get_Struct(obj, pole) {\</div><div class='del'>-    Data_Get_Struct(obj, struct oledata, pole);\</div><div class='del'>-    if(!pole-&gt;pDispatch) {\</div><div class='del'>-        rb_raise(rb_eRuntimeError, "failed to get Dispatch Interface");\</div><div class='del'>-    }\</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define WC2VSTR(x) ole_wc2vstr((x), TRUE)</div><div class='del'>-</div><div class='del'>-#define WIN32OLE_VERSION "0.7.6"</div><div class='del'>-</div><div class='del'>-typedef HRESULT (STDAPICALLTYPE FNCOCREATEINSTANCEEX)</div><div class='del'>-    (REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*);</div><div class='del'>-</div><div class='del'>-typedef HWND (WINAPI FNHTMLHELP)(HWND hwndCaller, LPCSTR pszFile,</div><div class='del'>-                                 UINT uCommand, DWORD dwData);</div><div class='del'>-typedef struct {</div><div class='del'>-    struct IEventSinkVtbl * lpVtbl;</div><div class='del'>-} IEventSink, *PEVENTSINK;</div><div class='del'>-</div><div class='del'>-typedef struct IEventSinkVtbl IEventSinkVtbl;</div><div class='del'>-</div><div class='del'>-struct IEventSinkVtbl {</div><div class='del'>-    STDMETHOD(QueryInterface)(</div><div class='del'>-        PEVENTSINK,</div><div class='del'>-        REFIID,</div><div class='del'>-        LPVOID *);</div><div class='del'>-    STDMETHOD_(ULONG, AddRef)(PEVENTSINK);</div><div class='del'>-    STDMETHOD_(ULONG, Release)(PEVENTSINK);</div><div class='del'>-</div><div class='del'>-    STDMETHOD(GetTypeInfoCount)(</div><div class='del'>-        PEVENTSINK,</div><div class='del'>-        UINT *);</div><div class='del'>-    STDMETHOD(GetTypeInfo)(</div><div class='del'>-        PEVENTSINK,</div><div class='del'>-        UINT,</div><div class='del'>-        LCID,</div><div class='del'>-        ITypeInfo **);</div><div class='del'>-    STDMETHOD(GetIDsOfNames)(</div><div class='del'>-        PEVENTSINK,</div><div class='del'>-        REFIID,</div><div class='del'>-        OLECHAR **,</div><div class='del'>-        UINT,</div><div class='del'>-        LCID,</div><div class='del'>-        DISPID *);</div><div class='del'>-    STDMETHOD(Invoke)(</div><div class='del'>-        PEVENTSINK,</div><div class='del'>-        DISPID,</div><div class='del'>-        REFIID,</div><div class='del'>-        LCID,</div><div class='del'>-        WORD,</div><div class='del'>-        DISPPARAMS *,</div><div class='del'>-        VARIANT *,</div><div class='del'>-        EXCEPINFO *,</div><div class='del'>-        UINT *);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-typedef struct tagIEVENTSINKOBJ {</div><div class='del'>-    IEventSinkVtbl *lpVtbl;</div><div class='del'>-    DWORD m_cRef;</div><div class='del'>-    IID m_iid;</div><div class='del'>-    int m_event_id;</div><div class='del'>-    DWORD m_dwCookie;</div><div class='del'>-    IConnectionPoint *pConnectionPoint;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    int *ptr_freed;</div><div class='del'>-}IEVENTSINKOBJ, *PIEVENTSINKOBJ;</div><div class='del'>-</div><div class='del'>-VALUE cWIN32OLE;</div><div class='del'>-VALUE cWIN32OLE_TYPE;</div><div class='del'>-VALUE cWIN32OLE_VARIABLE;</div><div class='del'>-VALUE cWIN32OLE_METHOD;</div><div class='del'>-VALUE cWIN32OLE_PARAM;</div><div class='del'>-VALUE cWIN32OLE_EVENT;</div><div class='del'>-VALUE eWIN32OLE_RUNTIME_ERROR;</div><div class='del'>-VALUE mWIN32OLE_VARIANT;</div><div class='del'>-</div><div class='del'>-static VALUE ary_ole_event;</div><div class='del'>-static ID id_events;</div><div class='del'>-static BOOL gOLEInitialized = Qfalse;</div><div class='del'>-static HINSTANCE ghhctrl = NULL;</div><div class='del'>-static HINSTANCE gole32 = NULL;</div><div class='del'>-static FNCOCREATEINSTANCEEX *gCoCreateInstanceEx = NULL;</div><div class='del'>-static VALUE com_hash;</div><div class='del'>-static IDispatchVtbl com_vtbl;</div><div class='del'>-static UINT  cWIN32OLE_cp = CP_ACP;</div><div class='del'>-static VARTYPE g_nil_to = VT_ERROR;</div><div class='del'>-static IMessageFilterVtbl message_filter;</div><div class='del'>-static IMessageFilter imessage_filter = { &amp;message_filter };</div><div class='del'>-static IMessageFilter* previous_filter;</div><div class='del'>-</div><div class='del'>-struct oledata {</div><div class='del'>-    IDispatch *pDispatch;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct oletypedata {</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct olemethoddata {</div><div class='del'>-    ITypeInfo *pOwnerTypeInfo;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT index;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct olevariabledata {</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT index;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct oleparamdata {</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-    UINT index;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct oleeventdata {</div><div class='del'>-    IEVENTSINKOBJ *pEvent;</div><div class='del'>-    int freed;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-struct oleparam {</div><div class='del'>-    DISPPARAMS dp;</div><div class='del'>-    OLECHAR** pNamedArgs;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE folemethod_s_allocate _((VALUE));</div><div class='del'>-static VALUE olemethod_set_member _((VALUE, ITypeInfo *, ITypeInfo *, int, VALUE));</div><div class='del'>-static VALUE foletype_s_allocate _((VALUE));</div><div class='del'>-static VALUE oletype_set_member  _((VALUE, ITypeInfo *, VALUE));</div><div class='del'>-static VALUE olemethod_from_typeinfo _((VALUE, ITypeInfo *, VALUE));</div><div class='del'>-static HRESULT ole_docinfo_from_type _((ITypeInfo *, BSTR *, BSTR *, DWORD *, BSTR *));</div><div class='del'>-static char *ole_wc2mb(LPWSTR);</div><div class='del'>-static VALUE ole_variant2val(VARIANT*);</div><div class='del'>-static void ole_val2variant(VALUE, VARIANT*);</div><div class='del'>-  </div><div class='del'>-static HRESULT (STDMETHODCALLTYPE mf_QueryInterface)(</div><div class='del'>-    IMessageFilter __RPC_FAR * This,</div><div class='del'>-    /* [in] */ REFIID riid,</div><div class='del'>-    /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)</div><div class='del'>-{</div><div class='del'>-    if (MEMCMP(riid, &amp;IID_IUnknown, GUID, 1) == 0</div><div class='del'>-        || MEMCMP(riid, &amp;IID_IMessageFilter, GUID, 1) == 0)</div><div class='del'>-    {</div><div class='del'>-        *ppvObject = &amp;message_filter;</div><div class='del'>-        return S_OK;</div><div class='del'>-    }</div><div class='del'>-    return E_NOINTERFACE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ULONG (STDMETHODCALLTYPE mf_AddRef)( </div><div class='del'>-    IMessageFilter __RPC_FAR * This)</div><div class='del'>-{</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-        </div><div class='del'>-static ULONG (STDMETHODCALLTYPE mf_Release)( </div><div class='del'>-    IMessageFilter __RPC_FAR * This)</div><div class='del'>-{</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static DWORD (STDMETHODCALLTYPE mf_HandleInComingCall)(</div><div class='del'>-    IMessageFilter __RPC_FAR * pThis,</div><div class='del'>-    DWORD dwCallType,      //Type of incoming call</div><div class='del'>-    HTASK threadIDCaller,  //Task handle calling this task</div><div class='del'>-    DWORD dwTickCount,     //Elapsed tick count</div><div class='del'>-    LPINTERFACEINFO lpInterfaceInfo //Pointer to INTERFACEINFO structure</div><div class='del'>-    )</div><div class='del'>-{</div><div class='del'>-#ifdef DEBUG_MESSAGEFILTER</div><div class='del'>-    printf("incoming %08X, %08X, %d\n", dwCallType, threadIDCaller, dwTickCount);</div><div class='del'>-    fflush(stdout);</div><div class='del'>-#endif</div><div class='del'>-    switch (dwCallType)</div><div class='del'>-    {</div><div class='del'>-    case CALLTYPE_ASYNC:</div><div class='del'>-    case CALLTYPE_TOPLEVEL_CALLPENDING:</div><div class='del'>-    case CALLTYPE_ASYNC_CALLPENDING:</div><div class='del'>-        if (rb_during_gc()) {</div><div class='del'>-            return SERVERCALL_RETRYLATER;</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'>-    if (previous_filter) {</div><div class='del'>-        return previous_filter-&gt;lpVtbl-&gt;HandleInComingCall(previous_filter,</div><div class='del'>-                                                   dwCallType,</div><div class='del'>-                                                   threadIDCaller,</div><div class='del'>-                                                   dwTickCount,</div><div class='del'>-                                                   lpInterfaceInfo);</div><div class='del'>-    }</div><div class='del'>-    return SERVERCALL_ISHANDLED;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static DWORD (STDMETHODCALLTYPE mf_RetryRejectedCall)(</div><div class='del'>-    IMessageFilter* pThis,</div><div class='del'>-    HTASK threadIDCallee,  //Server task handle</div><div class='del'>-    DWORD dwTickCount,     //Elapsed tick count</div><div class='del'>-    DWORD dwRejectType     //Returned rejection message</div><div class='del'>-    )</div><div class='del'>-{</div><div class='del'>-    if (previous_filter) {</div><div class='del'>-        return previous_filter-&gt;lpVtbl-&gt;RetryRejectedCall(previous_filter,</div><div class='del'>-                                                  threadIDCallee,</div><div class='del'>-                                                  dwTickCount,</div><div class='del'>-                                                  dwRejectType);</div><div class='del'>-    }</div><div class='del'>-    return 1000;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static DWORD (STDMETHODCALLTYPE mf_MessagePending)(</div><div class='del'>-    IMessageFilter* pThis,</div><div class='del'>-    HTASK threadIDCallee,  //Called applications task handle</div><div class='del'>-    DWORD dwTickCount,     //Elapsed tick count</div><div class='del'>-    DWORD dwPendingType    //Call type</div><div class='del'>-    )</div><div class='del'>-{</div><div class='del'>-    if (rb_during_gc()) {</div><div class='del'>-        return PENDINGMSG_WAITNOPROCESS;</div><div class='del'>-    }</div><div class='del'>-    if (previous_filter) {</div><div class='del'>-        return previous_filter-&gt;lpVtbl-&gt;MessagePending(previous_filter,</div><div class='del'>-                                               threadIDCallee,</div><div class='del'>-                                               dwTickCount,</div><div class='del'>-                                               dwPendingType);</div><div class='del'>-    }</div><div class='del'>-    return PENDINGMSG_WAITNOPROCESS;</div><div class='del'>-}</div><div class='del'>-    </div><div class='del'>-typedef struct _Win32OLEIDispatch</div><div class='del'>-{</div><div class='del'>-    IDispatch dispatch;</div><div class='del'>-    ULONG refcount;</div><div class='del'>-    VALUE obj;</div><div class='del'>-} Win32OLEIDispatch;</div><div class='del'>-</div><div class='del'>-static HRESULT ( STDMETHODCALLTYPE QueryInterface )( </div><div class='del'>-    IDispatch __RPC_FAR * This,</div><div class='del'>-    /* [in] */ REFIID riid,</div><div class='del'>-    /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)</div><div class='del'>-{</div><div class='del'>-    if (MEMCMP(riid, &amp;IID_IUnknown, GUID, 1) == 0</div><div class='del'>-        || MEMCMP(riid, &amp;IID_IDispatch, GUID, 1) == 0)</div><div class='del'>-    {</div><div class='del'>-        Win32OLEIDispatch* p = (Win32OLEIDispatch*)This;</div><div class='del'>-        p-&gt;refcount++;</div><div class='del'>-        *ppvObject = This;</div><div class='del'>-        return S_OK;</div><div class='del'>-    }</div><div class='del'>-    return E_NOINTERFACE;</div><div class='del'>-}</div><div class='del'>-        </div><div class='del'>-static ULONG ( STDMETHODCALLTYPE AddRef )( </div><div class='del'>-    IDispatch __RPC_FAR * This)</div><div class='del'>-{</div><div class='del'>-    Win32OLEIDispatch* p = (Win32OLEIDispatch*)This;</div><div class='del'>-    return ++(p-&gt;refcount);</div><div class='del'>-}</div><div class='del'>-        </div><div class='del'>-static ULONG ( STDMETHODCALLTYPE Release )( </div><div class='del'>-    IDispatch __RPC_FAR * This)</div><div class='del'>-{</div><div class='del'>-    Win32OLEIDispatch* p = (Win32OLEIDispatch*)This;</div><div class='del'>-    ULONG u = --(p-&gt;refcount);</div><div class='del'>-    if (u == 0) {</div><div class='del'>-        st_data_t key = p-&gt;obj;</div><div class='del'>-        st_delete(DATA_PTR(com_hash), &amp;key, 0);</div><div class='del'>-        free(p);</div><div class='del'>-    }</div><div class='del'>-    return u;</div><div class='del'>-}</div><div class='del'>-        </div><div class='del'>-static HRESULT ( STDMETHODCALLTYPE GetTypeInfoCount )( </div><div class='del'>-    IDispatch __RPC_FAR * This,</div><div class='del'>-    /* [out] */ UINT __RPC_FAR *pctinfo)</div><div class='del'>-{</div><div class='del'>-    return E_NOTIMPL;</div><div class='del'>-}</div><div class='del'>-        </div><div class='del'>-static HRESULT ( STDMETHODCALLTYPE GetTypeInfo )( </div><div class='del'>-    IDispatch __RPC_FAR * This,</div><div class='del'>-    /* [in] */ UINT iTInfo,</div><div class='del'>-    /* [in] */ LCID lcid,</div><div class='del'>-    /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo)</div><div class='del'>-{</div><div class='del'>-    return E_NOTIMPL;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-        </div><div class='del'>-static HRESULT ( STDMETHODCALLTYPE GetIDsOfNames )( </div><div class='del'>-    IDispatch __RPC_FAR * This,</div><div class='del'>-    /* [in] */ REFIID riid,</div><div class='del'>-    /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,</div><div class='del'>-    /* [in] */ UINT cNames,</div><div class='del'>-    /* [in] */ LCID lcid,</div><div class='del'>-    /* [size_is][out] */ DISPID __RPC_FAR *rgDispId)</div><div class='del'>-{</div><div class='del'>-    Win32OLEIDispatch* p = (Win32OLEIDispatch*)This;</div><div class='del'>-    char* psz = ole_wc2mb(*rgszNames); // support only one method</div><div class='del'>-    *rgDispId = rb_intern(psz);</div><div class='del'>-    free(psz);</div><div class='del'>-    return S_OK;</div><div class='del'>-}</div><div class='del'>-        </div><div class='del'>-static /* [local] */ HRESULT ( STDMETHODCALLTYPE Invoke )( </div><div class='del'>-    IDispatch __RPC_FAR * This,</div><div class='del'>-    /* [in] */ DISPID dispIdMember,</div><div class='del'>-    /* [in] */ REFIID riid,</div><div class='del'>-    /* [in] */ LCID lcid,</div><div class='del'>-    /* [in] */ WORD wFlags,</div><div class='del'>-    /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,</div><div class='del'>-    /* [out] */ VARIANT __RPC_FAR *pVarResult,</div><div class='del'>-    /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,</div><div class='del'>-    /* [out] */ UINT __RPC_FAR *puArgErr)</div><div class='del'>-{</div><div class='del'>-    VALUE v;</div><div class='del'>-    int i;</div><div class='del'>-    int args = pDispParams-&gt;cArgs;</div><div class='del'>-    Win32OLEIDispatch* p = (Win32OLEIDispatch*)This;</div><div class='del'>-    VALUE* parg = ALLOCA_N(VALUE, args);</div><div class='del'>-    for (i = 0; i &lt; args; i++) {</div><div class='del'>-        *(parg + i) = ole_variant2val(&amp;pDispParams-&gt;rgvarg[args - i - 1]);</div><div class='del'>-    }</div><div class='del'>-    if (dispIdMember == DISPID_VALUE) {</div><div class='del'>-        if (wFlags == DISPATCH_METHOD) {</div><div class='del'>-            dispIdMember = rb_intern("call");</div><div class='del'>-        } else if (wFlags &amp; DISPATCH_PROPERTYGET) {</div><div class='del'>-            dispIdMember = rb_intern("value");</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    v = rb_funcall2(p-&gt;obj, dispIdMember, args, parg);</div><div class='del'>-    ole_val2variant(v, pVarResult);</div><div class='del'>-    return S_OK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static IDispatch*</div><div class='del'>-val2dispatch(val)</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    struct st_table *tbl = DATA_PTR(com_hash);</div><div class='del'>-    Win32OLEIDispatch* pdisp;</div><div class='del'>-    st_data_t data;</div><div class='del'>-</div><div class='del'>-    if (st_lookup(tbl, val, &amp;data)) {</div><div class='del'>-        pdisp = (Win32OLEIDispatch *)(data &amp; ~FIXNUM_FLAG);</div><div class='del'>-        pdisp-&gt;refcount++;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        pdisp = ALLOC(Win32OLEIDispatch);</div><div class='del'>-        pdisp-&gt;dispatch.lpVtbl = &amp;com_vtbl;</div><div class='del'>-        pdisp-&gt;refcount = 1;</div><div class='del'>-        pdisp-&gt;obj = val;</div><div class='del'>-        st_insert(tbl, val, (VALUE)pdisp | FIXNUM_FLAG);</div><div class='del'>-    }</div><div class='del'>-    return &amp;pdisp-&gt;dispatch;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-time2d(hh, mm, ss, pv)</div><div class='del'>-    int hh, mm, ss;</div><div class='del'>-    double *pv;</div><div class='del'>-{</div><div class='del'>-    *pv =  (hh * 60.0 * 60.0 + mm * 60.0 + ss) / 86400.0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-d2time(v, hh, mm, ss)</div><div class='del'>-    double v;</div><div class='del'>-    int *hh, *mm, *ss;</div><div class='del'>-{</div><div class='del'>-    double d_hh, d_mm, d_ss;</div><div class='del'>-    int    i_hh, i_mm, i_ss;</div><div class='del'>-</div><div class='del'>-    double d = v * 86400.0;</div><div class='del'>-</div><div class='del'>-    d_hh = d / 3600.0;</div><div class='del'>-    i_hh = (int)d_hh;</div><div class='del'>-</div><div class='del'>-    d = d - i_hh * 3600.0;</div><div class='del'>-</div><div class='del'>-    d_mm = d / 60.0;</div><div class='del'>-    i_mm = (int)d_mm;</div><div class='del'>-</div><div class='del'>-    d = d - i_mm * 60.0;</div><div class='del'>-</div><div class='del'>-    d_ss = d * 10.0 + 5;</div><div class='del'>-    </div><div class='del'>-    i_ss = (int)d_ss / 10;</div><div class='del'>-</div><div class='del'>-    if(i_ss == 60) {</div><div class='del'>-        i_mm += 1;</div><div class='del'>-        i_ss = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (i_mm == 60) {</div><div class='del'>-        i_hh += 1;</div><div class='del'>-        i_mm = 0;</div><div class='del'>-    }</div><div class='del'>-    if (i_hh == 24) {</div><div class='del'>-        i_hh = 0;</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    *hh = i_hh;</div><div class='del'>-    *mm = i_mm;</div><div class='del'>-    *ss = i_ss;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-civil2jd(y, m, d, jd)</div><div class='del'>-    int y, m, d;</div><div class='del'>-    long *jd;</div><div class='del'>-{</div><div class='del'>-    long a, b;</div><div class='del'>-    if (m &lt;= 2) {</div><div class='del'>-        y -= 1;</div><div class='del'>-        m += 12;</div><div class='del'>-    }</div><div class='del'>-    a = (long)(y / 100.0);</div><div class='del'>-    b = 2 - a + (long)(a / 4.0);</div><div class='del'>-    *jd = (long)(365.25 * (double)(y + 4716))</div><div class='del'>-         + (long)(30.6001 * (m + 1))</div><div class='del'>-         + d + b - 1524;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-jd2civil(day, yy, mm, dd)</div><div class='del'>-    long day;</div><div class='del'>-    int *yy, *mm, *dd;</div><div class='del'>-{</div><div class='del'>-    long x, a, b, c, d, e;</div><div class='del'>-    x = (long)(((double)day - 1867216.25) / 36524.25);</div><div class='del'>-    a = day + 1 + x - (long)(x / 4.0);</div><div class='del'>-    b = a + 1524;</div><div class='del'>-    c = (long)(((double)b -122.1) /365.25);</div><div class='del'>-    d = (long)(365.25 * c);</div><div class='del'>-    e = (long)((double)(b - d) / 30.6001);</div><div class='del'>-    *dd = b - d - (long)(30.6001 * e);</div><div class='del'>-    if (e &lt;= 13) {</div><div class='del'>-        *mm = e - 1;</div><div class='del'>-        *yy = c - 4716;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        *mm = e - 13;</div><div class='del'>-        *yy = c - 4715;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-double2time(v, y, m, d, hh, mm, ss)</div><div class='del'>-    double v;</div><div class='del'>-    int *y, *m, *d, *hh, *mm, *ss;</div><div class='del'>-{</div><div class='del'>-    long day;</div><div class='del'>-    double t;</div><div class='del'>-</div><div class='del'>-    day = (long)v;</div><div class='del'>-    t = v - day;</div><div class='del'>-    jd2civil(2415019 + day, y, m, d);</div><div class='del'>-</div><div class='del'>-    d2time(t, hh, mm, ss);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static double</div><div class='del'>-time_object2date(tmobj)</div><div class='del'>-    VALUE tmobj;</div><div class='del'>-{</div><div class='del'>-    long y, m, d, hh, mm, ss;</div><div class='del'>-    long day;</div><div class='del'>-    double t;</div><div class='del'>-    y = FIX2INT(rb_funcall(tmobj, rb_intern("year"), 0));</div><div class='del'>-    m = FIX2INT(rb_funcall(tmobj, rb_intern("month"), 0));</div><div class='del'>-    d = FIX2INT(rb_funcall(tmobj, rb_intern("mday"), 0));</div><div class='del'>-    hh = FIX2INT(rb_funcall(tmobj, rb_intern("hour"), 0));</div><div class='del'>-    mm = FIX2INT(rb_funcall(tmobj, rb_intern("min"), 0));</div><div class='del'>-    ss = FIX2INT(rb_funcall(tmobj, rb_intern("sec"), 0));</div><div class='del'>-    civil2jd(y, m, d, &amp;day);</div><div class='del'>-    time2d(hh, mm, ss, &amp;t);</div><div class='del'>-    return t + day - 2415019;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-date2time_str(date)</div><div class='del'>-    double date;</div><div class='del'>-{</div><div class='del'>-    int y, m, d, hh, mm, ss;</div><div class='del'>-    char szTime[40];</div><div class='del'>-    double2time(date, &amp;y, &amp;m, &amp;d, &amp;hh, &amp;mm, &amp;ss);</div><div class='del'>-    sprintf(szTime,</div><div class='del'>-            "%4.4d/%02.2d/%02.2d %02.2d:%02.2d:%02.2d",</div><div class='del'>-            y, m, d, hh, mm, ss);</div><div class='del'>-    return rb_str_new2(szTime);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void ole_val2variant();</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-ole_wc2mb(pw)</div><div class='del'>-    LPWSTR pw;</div><div class='del'>-{</div><div class='del'>-    int size;</div><div class='del'>-    LPSTR pm;</div><div class='del'>-    size = WideCharToMultiByte(cWIN32OLE_cp, 0, pw, -1, NULL, 0, NULL, NULL);</div><div class='del'>-    if (size) {</div><div class='del'>-        pm = ALLOC_N(char, size + 1);    </div><div class='del'>-        WideCharToMultiByte(cWIN32OLE_cp, 0, pw, -1, pm, size, NULL, NULL);</div><div class='del'>-        pm[size] = '\0';</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        pm = ALLOC_N(char, 1);</div><div class='del'>-        *pm = '\0';</div><div class='del'>-    }</div><div class='del'>-    return pm;</div><div class='del'>-} </div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_hresult2msg(hr)</div><div class='del'>-    HRESULT hr;</div><div class='del'>-{</div><div class='del'>-    VALUE msg = Qnil;</div><div class='del'>-    char *p_msg = NULL;</div><div class='del'>-    char *term = NULL;</div><div class='del'>-    DWORD dwCount;</div><div class='del'>-</div><div class='del'>-    char strhr[100];</div><div class='del'>-    sprintf(strhr, "    HRESULT error code:0x%08lx\n      ", hr);</div><div class='del'>-    msg = rb_str_new2(strhr);</div><div class='del'>-</div><div class='del'>-    dwCount = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |</div><div class='del'>-                            FORMAT_MESSAGE_FROM_SYSTEM |</div><div class='del'>-                            FORMAT_MESSAGE_IGNORE_INSERTS,</div><div class='del'>-                            NULL, hr, LOCALE_SYSTEM_DEFAULT,</div><div class='del'>-                            (LPTSTR)&amp;p_msg, 0, NULL);</div><div class='del'>-    if (dwCount &gt; 0) {</div><div class='del'>-	term = p_msg + strlen(p_msg);</div><div class='del'>-	while (p_msg &lt; term) {</div><div class='del'>-	    term--;</div><div class='del'>-	    if (*term == '\r' || *term == '\n')</div><div class='del'>-	        *term = '\0';</div><div class='del'>-	    else break;</div><div class='del'>-	}</div><div class='del'>-        if (p_msg[0] != '\0') {</div><div class='del'>-            rb_str_cat2(msg, p_msg);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    LocalFree(p_msg);</div><div class='del'>-    return msg;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ole_freeexceptinfo(pExInfo)</div><div class='del'>-    EXCEPINFO *pExInfo;</div><div class='del'>-{</div><div class='del'>-    SysFreeString(pExInfo-&gt;bstrDescription);</div><div class='del'>-    SysFreeString(pExInfo-&gt;bstrSource);</div><div class='del'>-    SysFreeString(pExInfo-&gt;bstrHelpFile);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_excepinfo2msg(pExInfo)</div><div class='del'>-    EXCEPINFO *pExInfo;</div><div class='del'>-{</div><div class='del'>-    char error_code[40];</div><div class='del'>-    char *pSource = NULL;</div><div class='del'>-    char *pDescription = NULL;</div><div class='del'>-    VALUE error_msg;</div><div class='del'>-    if(pExInfo-&gt;pfnDeferredFillIn != NULL) {</div><div class='del'>-        (*pExInfo-&gt;pfnDeferredFillIn)(pExInfo);</div><div class='del'>-    }</div><div class='del'>-    if (pExInfo-&gt;bstrSource != NULL) {</div><div class='del'>-        pSource = ole_wc2mb(pExInfo-&gt;bstrSource);</div><div class='del'>-    }</div><div class='del'>-    if (pExInfo-&gt;bstrDescription != NULL) {</div><div class='del'>-        pDescription = ole_wc2mb(pExInfo-&gt;bstrDescription);</div><div class='del'>-    }</div><div class='del'>-    if(pExInfo-&gt;wCode == 0) {</div><div class='del'>-        sprintf(error_code, "\n    OLE error code:%lX in ", pExInfo-&gt;scode);</div><div class='del'>-    }</div><div class='del'>-    else{</div><div class='del'>-        sprintf(error_code, "\n    OLE error code:%u in ", pExInfo-&gt;wCode);</div><div class='del'>-    }</div><div class='del'>-    error_msg = rb_str_new2(error_code);</div><div class='del'>-    if(pSource != NULL) {</div><div class='del'>-        rb_str_cat(error_msg, pSource, strlen(pSource));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_str_cat(error_msg, "&lt;Unknown&gt;", 9);</div><div class='del'>-    }</div><div class='del'>-    rb_str_cat2(error_msg, "\n      ");</div><div class='del'>-    if(pDescription != NULL) {</div><div class='del'>-        rb_str_cat2(error_msg, pDescription);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_str_cat2(error_msg, "&lt;No Description&gt;");</div><div class='del'>-    }</div><div class='del'>-    if(pSource) free(pSource);</div><div class='del'>-    if(pDescription) free(pDescription);</div><div class='del'>-    ole_freeexceptinfo(pExInfo);</div><div class='del'>-    return error_msg;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-#ifdef HAVE_STDARG_PROTOTYPES</div><div class='del'>-ole_raise(HRESULT hr, VALUE ecs, const char *fmt, ...)</div><div class='del'>-#else</div><div class='del'>-ole_raise(hr, exc, fmt, va_alist)</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE exc;</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'>-    va_list args;</div><div class='del'>-    char buf[BUFSIZ];</div><div class='del'>-    VALUE err_msg;</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'>-</div><div class='del'>-    err_msg = ole_hresult2msg(hr);</div><div class='del'>-    if(err_msg != Qnil) {</div><div class='del'>-        rb_raise(ecs, "%s\n%s", buf, StringValuePtr(err_msg));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_raise(ecs, "%s", buf);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-ole_uninitialize()</div><div class='del'>-{</div><div class='del'>-    OleUninitialize();</div><div class='del'>-    gOLEInitialized = Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ole_initialize() </div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    </div><div class='del'>-    if(gOLEInitialized == Qfalse) {</div><div class='del'>-        hr = OleInitialize(NULL);</div><div class='del'>-        if(FAILED(hr)) {</div><div class='del'>-            ole_raise(hr, rb_eRuntimeError, "fail: OLE initialize");</div><div class='del'>-        }</div><div class='del'>-        gOLEInitialized = Qtrue;</div><div class='del'>-        /*</div><div class='del'>-         * In some situation, OleUninitialize does not work fine. ;-&lt;</div><div class='del'>-         */</div><div class='del'>-        /*</div><div class='del'>-        atexit((void (*)(void))ole_uninitialize);</div><div class='del'>-        */</div><div class='del'>-        hr = CoRegisterMessageFilter(&amp;imessage_filter, &amp;previous_filter);</div><div class='del'>-        if(FAILED(hr)) {</div><div class='del'>-            previous_filter = NULL;</div><div class='del'>-            ole_raise(hr, rb_eRuntimeError, "fail: install OLE MessageFilter");</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='del'>-ole_msg_loop() {</div><div class='del'>-    MSG msg;</div><div class='del'>-    while(PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE)) {</div><div class='del'>-        TranslateMessage(&amp;msg);</div><div class='del'>-        DispatchMessage(&amp;msg);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ole_free(pole)</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-{</div><div class='del'>-    OLE_FREE(pole-&gt;pDispatch);</div><div class='del'>-    free(pole);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-oletype_free(poletype)</div><div class='del'>-    struct oletypedata *poletype;</div><div class='del'>-{</div><div class='del'>-    OLE_FREE(poletype-&gt;pTypeInfo);</div><div class='del'>-    free(poletype);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-olemethod_free(polemethod)</div><div class='del'>-    struct olemethoddata *polemethod;</div><div class='del'>-{</div><div class='del'>-    OLE_FREE(polemethod-&gt;pTypeInfo);</div><div class='del'>-    OLE_FREE(polemethod-&gt;pOwnerTypeInfo);</div><div class='del'>-    free(polemethod);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-olevariable_free(polevar)</div><div class='del'>-    struct olevariabledata *polevar;</div><div class='del'>-{</div><div class='del'>-    OLE_FREE(polevar-&gt;pTypeInfo);</div><div class='del'>-    free(polevar);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-oleparam_free(pole)</div><div class='del'>-    struct oleparamdata *pole;</div><div class='del'>-{</div><div class='del'>-    OLE_FREE(pole-&gt;pTypeInfo);</div><div class='del'>-    free(pole);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static LPWSTR</div><div class='del'>-ole_mb2wc(pm, len)</div><div class='del'>-    char *pm;</div><div class='del'>-    int  len;</div><div class='del'>-{</div><div class='del'>-    int size;</div><div class='del'>-    LPWSTR pw;</div><div class='del'>-    size = MultiByteToWideChar(cWIN32OLE_cp, 0, pm, len, NULL, 0);</div><div class='del'>-    pw = SysAllocStringLen(NULL, size - 1);</div><div class='del'>-    MultiByteToWideChar(cWIN32OLE_cp, 0, pm, len, pw, size);</div><div class='del'>-    return pw;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_wc2vstr(pw, isfree)</div><div class='del'>-    LPWSTR pw;</div><div class='del'>-    BOOL isfree;</div><div class='del'>-{</div><div class='del'>-    char *p = ole_wc2mb(pw);</div><div class='del'>-    VALUE vstr = rb_str_new2(p);</div><div class='del'>-    if(isfree)</div><div class='del'>-        SysFreeString(pw);</div><div class='del'>-    free(p);</div><div class='del'>-    return vstr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_ary_m_entry(val, pid)</div><div class='del'>-    VALUE val;</div><div class='del'>-    long *pid;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = Qnil;</div><div class='del'>-    int i = 0;</div><div class='del'>-    obj = val;</div><div class='del'>-    while(TYPE(obj) == T_ARRAY) {</div><div class='del'>-        obj = rb_ary_entry(obj, pid[i]);</div><div class='del'>-        i++;</div><div class='del'>-    }</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ole_set_safe_array(n, psa, pid, pub, val, dim)</div><div class='del'>-    long n;</div><div class='del'>-    SAFEARRAY *psa;</div><div class='del'>-    long *pid;</div><div class='del'>-    long *pub;</div><div class='del'>-    VALUE val;</div><div class='del'>-    long dim;</div><div class='del'>-{</div><div class='del'>-    VALUE val1;</div><div class='del'>-    VARIANT var;</div><div class='del'>-    VariantInit(&amp;var);</div><div class='del'>-    if(n &lt; 0) return;</div><div class='del'>-    if(n == dim) {</div><div class='del'>-        val1 = ole_ary_m_entry(val, pid);</div><div class='del'>-        ole_val2variant(val1, &amp;var);</div><div class='del'>-        SafeArrayPutElement(psa, pid, &amp;var);</div><div class='del'>-    }</div><div class='del'>-    pid[n] += 1;</div><div class='del'>-    if (pid[n] &lt; pub[n]) {</div><div class='del'>-        ole_set_safe_array(dim, psa, pid, pub, val, dim);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        pid[n] = 0;</div><div class='del'>-        ole_set_safe_array(n-1, psa, pid, pub, val, dim);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ole_val2variant(val, var)</div><div class='del'>-    VALUE val;</div><div class='del'>-    VARIANT *var;</div><div class='del'>-{</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    if(rb_obj_is_kind_of(val, cWIN32OLE)) {</div><div class='del'>-        Data_Get_Struct(val, struct oledata, pole);</div><div class='del'>-        OLE_ADDREF(pole-&gt;pDispatch);</div><div class='del'>-        V_VT(var) = VT_DISPATCH;</div><div class='del'>-        V_DISPATCH(var) = pole-&gt;pDispatch;</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-    if (rb_obj_is_kind_of(val, rb_cTime)) {</div><div class='del'>-        V_VT(var) = VT_DATE;</div><div class='del'>-        V_DATE(var) = time_object2date(val);</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-    switch (TYPE(val)) {</div><div class='del'>-    case T_ARRAY:</div><div class='del'>-    {</div><div class='del'>-        VALUE val1;</div><div class='del'>-        long dim = 0;</div><div class='del'>-        int  i = 0;</div><div class='del'>-</div><div class='del'>-        HRESULT hr;</div><div class='del'>-        SAFEARRAYBOUND *psab;</div><div class='del'>-        SAFEARRAY *psa;</div><div class='del'>-        long      *pub, *pid;</div><div class='del'>-</div><div class='del'>-        val1 = val;</div><div class='del'>-        while(TYPE(val1) == T_ARRAY) {</div><div class='del'>-            val1 = rb_ary_entry(val1, 0);</div><div class='del'>-            dim += 1;</div><div class='del'>-        }</div><div class='del'>-        psab = ALLOC_N(SAFEARRAYBOUND, dim);</div><div class='del'>-        pub  = ALLOC_N(long, dim);</div><div class='del'>-        pid  = ALLOC_N(long, dim);</div><div class='del'>-</div><div class='del'>-        if(!psab || !pub || !pid) {</div><div class='del'>-            if(pub) free(pub);</div><div class='del'>-            if(psab) free(psab);</div><div class='del'>-            if(pid) free(pid);</div><div class='del'>-            rb_raise(rb_eRuntimeError, "memory allocation error");</div><div class='del'>-        }</div><div class='del'>-        val1 = val;</div><div class='del'>-        i = 0;</div><div class='del'>-        while(TYPE(val1) == T_ARRAY) {</div><div class='del'>-            psab[i].cElements = RARRAY(val1)-&gt;len;</div><div class='del'>-            psab[i].lLbound = 0;</div><div class='del'>-            pub[i] = psab[i].cElements;</div><div class='del'>-            pid[i] = 0;</div><div class='del'>-            i ++;</div><div class='del'>-            val1 = rb_ary_entry(val1, 0);</div><div class='del'>-        }</div><div class='del'>-        /* Create and fill VARIANT array */</div><div class='del'>-        psa = SafeArrayCreate(VT_VARIANT, dim, psab);</div><div class='del'>-        if (psa == NULL)</div><div class='del'>-            hr = E_OUTOFMEMORY;</div><div class='del'>-        else</div><div class='del'>-            hr = SafeArrayLock(psa);</div><div class='del'>-        if (SUCCEEDED(hr)) {</div><div class='del'>-            ole_set_safe_array(dim-1, psa, pid, pub, val, dim-1);</div><div class='del'>-            hr = SafeArrayUnlock(psa);</div><div class='del'>-        }</div><div class='del'>-        if(pub) free(pub);</div><div class='del'>-        if(psab) free(psab);</div><div class='del'>-        if(pid) free(pid);</div><div class='del'>-</div><div class='del'>-        if (SUCCEEDED(hr)) {</div><div class='del'>-            V_VT(var) = VT_VARIANT | VT_ARRAY;</div><div class='del'>-            V_ARRAY(var) = psa;</div><div class='del'>-        }</div><div class='del'>-        else if (psa != NULL)</div><div class='del'>-            SafeArrayDestroy(psa);</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-    case T_STRING:</div><div class='del'>-        V_VT(var) = VT_BSTR;</div><div class='del'>-        V_BSTR(var) = ole_mb2wc(StringValuePtr(val), -1);</div><div class='del'>-        break;</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-        V_VT(var) = VT_I4;</div><div class='del'>-        V_I4(var) = NUM2INT(val);</div><div class='del'>-        break;</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-        V_VT(var) = VT_R8;</div><div class='del'>-        V_R8(var) = rb_big2dbl(val);</div><div class='del'>-        break;</div><div class='del'>-    case T_FLOAT:</div><div class='del'>-        V_VT(var) = VT_R8;</div><div class='del'>-        V_R8(var) = NUM2DBL(val);</div><div class='del'>-        break;</div><div class='del'>-    case T_TRUE:</div><div class='del'>-        V_VT(var) = VT_BOOL;</div><div class='del'>-        V_BOOL(var) = VARIANT_TRUE;</div><div class='del'>-        break;</div><div class='del'>-    case T_FALSE:</div><div class='del'>-        V_VT(var) = VT_BOOL;</div><div class='del'>-        V_BOOL(var) = VARIANT_FALSE;</div><div class='del'>-        break;</div><div class='del'>-    case T_NIL:</div><div class='del'>-        if (g_nil_to == VT_ERROR) {</div><div class='del'>-            V_VT(var) = VT_ERROR;</div><div class='del'>-            V_ERROR(var) = DISP_E_PARAMNOTFOUND;</div><div class='del'>-        }else {</div><div class='del'>-            V_VT(var) = VT_EMPTY;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        V_VT(var) = VT_DISPATCH;</div><div class='del'>-        V_DISPATCH(var) = val2dispatch(val);</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ole_val2variant2(val, var)</div><div class='del'>-    VALUE val;</div><div class='del'>-    VARIANT *var;</div><div class='del'>-{</div><div class='del'>-    g_nil_to = VT_EMPTY;</div><div class='del'>-    ole_val2variant(val, var);</div><div class='del'>-    g_nil_to = VT_ERROR;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_set_member(self, dispatch)</div><div class='del'>-    VALUE self;</div><div class='del'>-    IDispatch * dispatch;</div><div class='del'>-{</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    Data_Get_Struct(self, struct oledata, pole);</div><div class='del'>-    if (pole-&gt;pDispatch) {</div><div class='del'>-        OLE_RELEASE(pole-&gt;pDispatch);</div><div class='del'>-        pole-&gt;pDispatch = NULL;</div><div class='del'>-    }</div><div class='del'>-    pole-&gt;pDispatch = dispatch;</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE fole_s_allocate _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-fole_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    ole_initialize();</div><div class='del'>-    obj = Data_Make_Struct(klass,struct oledata,0,ole_free,pole);</div><div class='del'>-    pole-&gt;pDispatch = NULL;</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-create_win32ole_object(klass, pDispatch, argc, argv)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    IDispatch *pDispatch;</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = fole_s_allocate(klass);</div><div class='del'>-    ole_set_member(obj, pDispatch);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_variant2val(pvar)</div><div class='del'>-    VARIANT *pvar;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = Qnil;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    while ( V_VT(pvar) == (VT_BYREF | VT_VARIANT) )</div><div class='del'>-        pvar = V_VARIANTREF(pvar);</div><div class='del'>-</div><div class='del'>-    if(V_ISARRAY(pvar)) {</div><div class='del'>-        SAFEARRAY *psa = V_ISBYREF(pvar) ? *V_ARRAYREF(pvar) : V_ARRAY(pvar);</div><div class='del'>-        long i;</div><div class='del'>-        long *pID, *pLB, *pUB;</div><div class='del'>-        VARIANT variant;</div><div class='del'>-        VALUE val;</div><div class='del'>-        VALUE val2;</div><div class='del'>-        int dim = 0;</div><div class='del'>-</div><div class='del'>-        if (!psa) {</div><div class='del'>-            return obj;</div><div class='del'>-        }</div><div class='del'>-        dim = SafeArrayGetDim(psa);</div><div class='del'>-</div><div class='del'>-        VariantInit(&amp;variant);</div><div class='del'>-        V_VT(&amp;variant) = (V_VT(pvar) &amp; ~VT_ARRAY) | VT_BYREF;</div><div class='del'>-</div><div class='del'>-        pID = ALLOC_N(long, dim);</div><div class='del'>-        pLB = ALLOC_N(long, dim);</div><div class='del'>-        pUB = ALLOC_N(long, dim);</div><div class='del'>-</div><div class='del'>-        if(!pID || !pLB || !pUB) {</div><div class='del'>-            if(pID) free(pID);</div><div class='del'>-            if(pLB) free(pLB);</div><div class='del'>-            if(pUB) free(pUB);</div><div class='del'>-            rb_raise(rb_eRuntimeError, "memory allocation error");</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        obj = Qnil;</div><div class='del'>-</div><div class='del'>-        for(i = 0; i &lt; dim; ++i) {</div><div class='del'>-            SafeArrayGetLBound(psa, i+1, &amp;pLB[i]);</div><div class='del'>-            SafeArrayGetLBound(psa, i+1, &amp;pID[i]);</div><div class='del'>-            SafeArrayGetUBound(psa, i+1, &amp;pUB[i]);</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        hr = SafeArrayLock(psa);</div><div class='del'>-        if (SUCCEEDED(hr)) {</div><div class='del'>-            val2 = rb_ary_new();</div><div class='del'>-            while (i &gt;= 0) {</div><div class='del'>-                hr = SafeArrayPtrOfIndex(psa, pID, &amp;V_BYREF(&amp;variant));</div><div class='del'>-                if (FAILED(hr))</div><div class='del'>-                    break;</div><div class='del'>-</div><div class='del'>-                val = ole_variant2val(&amp;variant);</div><div class='del'>-                rb_ary_push(val2, val);</div><div class='del'>-                for (i = dim-1 ; i &gt;= 0 ; --i) {</div><div class='del'>-                    if (++pID[i] &lt;= pUB[i])</div><div class='del'>-                        break;</div><div class='del'>-</div><div class='del'>-                    pID[i] = pLB[i];</div><div class='del'>-                    if (i &gt; 0) {</div><div class='del'>-                        if (obj == Qnil)</div><div class='del'>-                            obj = rb_ary_new();</div><div class='del'>-                        rb_ary_push(obj, val2);</div><div class='del'>-                        val2 = rb_ary_new();</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            SafeArrayUnlock(psa);</div><div class='del'>-        }</div><div class='del'>-        if(pID) free(pID);</div><div class='del'>-        if(pLB) free(pLB);</div><div class='del'>-        if(pUB) free(pUB);</div><div class='del'>-        return (obj == Qnil) ? val2 : obj;</div><div class='del'>-    }</div><div class='del'>-    switch(V_VT(pvar) &amp; ~VT_BYREF){</div><div class='del'>-    case VT_EMPTY:</div><div class='del'>-        break;</div><div class='del'>-    case VT_NULL:</div><div class='del'>-        break;</div><div class='del'>-    case VT_UI1:</div><div class='del'>-        if(V_ISBYREF(pvar)) </div><div class='del'>-            obj = INT2NUM((long)*V_UI1REF(pvar));</div><div class='del'>-        else </div><div class='del'>-            obj = INT2NUM((long)V_UI1(pvar));</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case VT_I2:</div><div class='del'>-        if(V_ISBYREF(pvar))</div><div class='del'>-            obj = INT2NUM((long)*V_I2REF(pvar));</div><div class='del'>-        else </div><div class='del'>-            obj = INT2NUM((long)V_I2(pvar));</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case VT_I4:</div><div class='del'>-        if(V_ISBYREF(pvar))</div><div class='del'>-            obj = INT2NUM((long)*V_I4REF(pvar));</div><div class='del'>-        else </div><div class='del'>-            obj = INT2NUM((long)V_I4(pvar));</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case VT_R4:</div><div class='del'>-        if(V_ISBYREF(pvar))</div><div class='del'>-            obj = rb_float_new(*V_R4REF(pvar));</div><div class='del'>-        else</div><div class='del'>-            obj = rb_float_new(V_R4(pvar));</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case VT_R8:</div><div class='del'>-        if(V_ISBYREF(pvar))</div><div class='del'>-            obj = rb_float_new(*V_R8REF(pvar));</div><div class='del'>-        else</div><div class='del'>-            obj = rb_float_new(V_R8(pvar));</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case VT_BSTR:</div><div class='del'>-    {</div><div class='del'>-        char *p;</div><div class='del'>-        if(V_ISBYREF(pvar))</div><div class='del'>-            p = ole_wc2mb(*V_BSTRREF(pvar));</div><div class='del'>-        else</div><div class='del'>-            p = ole_wc2mb(V_BSTR(pvar));</div><div class='del'>-        obj = rb_str_new2(p);</div><div class='del'>-        if(p) free(p);</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    case VT_ERROR:</div><div class='del'>-        if(V_ISBYREF(pvar))</div><div class='del'>-            obj = INT2NUM(*V_ERRORREF(pvar));</div><div class='del'>-        else</div><div class='del'>-            obj = INT2NUM(V_ERROR(pvar));</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case VT_BOOL:</div><div class='del'>-        if (V_ISBYREF(pvar))</div><div class='del'>-            obj = (*V_BOOLREF(pvar) ? Qtrue : Qfalse);</div><div class='del'>-        else</div><div class='del'>-            obj = (V_BOOL(pvar) ? Qtrue : Qfalse);</div><div class='del'>-        break;</div><div class='del'>-</div><div class='del'>-    case VT_DISPATCH:</div><div class='del'>-    {</div><div class='del'>-        IDispatch *pDispatch;</div><div class='del'>-</div><div class='del'>-        if (V_ISBYREF(pvar))</div><div class='del'>-            pDispatch = *V_DISPATCHREF(pvar);</div><div class='del'>-        else</div><div class='del'>-            pDispatch = V_DISPATCH(pvar);</div><div class='del'>-</div><div class='del'>-        if (pDispatch != NULL ) {</div><div class='del'>-            OLE_ADDREF(pDispatch);</div><div class='del'>-            obj = create_win32ole_object(cWIN32OLE, pDispatch, 0, 0);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    case VT_UNKNOWN:</div><div class='del'>-    {</div><div class='del'>-</div><div class='del'>-        /* get IDispatch interface from IUnknown interface */</div><div class='del'>-        IUnknown *punk;</div><div class='del'>-        IDispatch *pDispatch;</div><div class='del'>-        HRESULT hr;</div><div class='del'>-</div><div class='del'>-        if (V_ISBYREF(pvar))</div><div class='del'>-            punk = *V_UNKNOWNREF(pvar);</div><div class='del'>-        else</div><div class='del'>-            punk = V_UNKNOWN(pvar);</div><div class='del'>-</div><div class='del'>-        if(punk != NULL) {</div><div class='del'>-           hr = punk-&gt;lpVtbl-&gt;QueryInterface(punk, &amp;IID_IDispatch,</div><div class='del'>-                                             (void **)&amp;pDispatch);</div><div class='del'>-           if(SUCCEEDED(hr)) {</div><div class='del'>-               obj = create_win32ole_object(cWIN32OLE, pDispatch, 0, 0);</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'>-    case VT_DATE:</div><div class='del'>-    {</div><div class='del'>-        DATE date;</div><div class='del'>-        if(V_ISBYREF(pvar))</div><div class='del'>-            date = *V_DATEREF(pvar);</div><div class='del'>-        else</div><div class='del'>-            date = V_DATE(pvar);</div><div class='del'>-</div><div class='del'>-        obj =  date2time_str(date);</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-    case VT_CY:</div><div class='del'>-    default:</div><div class='del'>-        {</div><div class='del'>-        HRESULT hr;</div><div class='del'>-        VARIANT variant;</div><div class='del'>-        VariantInit(&amp;variant);</div><div class='del'>-        hr = VariantChangeTypeEx(&amp;variant, pvar, </div><div class='del'>-                                  LOCALE_SYSTEM_DEFAULT, 0, VT_BSTR);</div><div class='del'>-        if (SUCCEEDED(hr) &amp;&amp; V_VT(&amp;variant) == VT_BSTR) {</div><div class='del'>-            char *p = ole_wc2mb(V_BSTR(&amp;variant));</div><div class='del'>-            obj = rb_str_new2(p);</div><div class='del'>-            if(p) free(p);</div><div class='del'>-        }</div><div class='del'>-        VariantClear(&amp;variant);</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'>-static LONG reg_open_key(hkey, name, phkey)</div><div class='del'>-    HKEY hkey;</div><div class='del'>-    const char *name;</div><div class='del'>-    HKEY *phkey;</div><div class='del'>-{</div><div class='del'>-    return RegOpenKeyEx(hkey, name, 0, KEY_READ, phkey);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static LONG reg_open_vkey(hkey, key, phkey)</div><div class='del'>-    HKEY hkey;</div><div class='del'>-    VALUE key;</div><div class='del'>-    HKEY *phkey;</div><div class='del'>-{</div><div class='del'>-    return reg_open_key(hkey, StringValuePtr(key), phkey);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-reg_enum_key(hkey, i)</div><div class='del'>-    HKEY hkey;</div><div class='del'>-    DWORD i;</div><div class='del'>-{</div><div class='del'>-    char buf[BUFSIZ + 1];</div><div class='del'>-    DWORD size_buf = sizeof(buf) - 1;</div><div class='del'>-    FILETIME ft;</div><div class='del'>-    LONG err = RegEnumKeyEx(hkey, i, buf, &amp;size_buf,</div><div class='del'>-                            NULL, NULL, NULL, &amp;ft);</div><div class='del'>-    if(err == ERROR_SUCCESS) {</div><div class='del'>-        buf[BUFSIZ] = '\0';</div><div class='del'>-        return rb_str_new2(buf);</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'>-reg_get_val(hkey, subkey)</div><div class='del'>-    HKEY hkey;</div><div class='del'>-    const char *subkey;</div><div class='del'>-{</div><div class='del'>-    char buf[BUFSIZ + 1];</div><div class='del'>-    LONG size_buf = sizeof(buf) - 1;</div><div class='del'>-    LONG err = RegQueryValue(hkey, subkey, buf, &amp;size_buf);</div><div class='del'>-    if (err == ERROR_SUCCESS) {</div><div class='del'>-        buf[BUFSIZ] = '\0';</div><div class='del'>-        return rb_str_new2(buf);</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'>-typelib_file_from_clsid(ole)</div><div class='del'>-    VALUE ole;</div><div class='del'>-{</div><div class='del'>-    OLECHAR *pbuf;</div><div class='del'>-    CLSID clsid;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    HKEY hroot, hclsid;</div><div class='del'>-    LONG err;</div><div class='del'>-    VALUE typelib;</div><div class='del'>-    VALUE vclsid;</div><div class='del'>-    char *pclsid = NULL;</div><div class='del'>-</div><div class='del'>-    pbuf  = ole_mb2wc(StringValuePtr(ole), -1);</div><div class='del'>-    hr = CLSIDFromProgID(pbuf, &amp;clsid);</div><div class='del'>-    SysFreeString(pbuf);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    StringFromCLSID(&amp;clsid, &amp;pbuf);</div><div class='del'>-    vclsid = WC2VSTR(pbuf);</div><div class='del'>-    err = reg_open_key(HKEY_CLASSES_ROOT, "CLSID", &amp;hroot);</div><div class='del'>-    if (err != ERROR_SUCCESS) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    err = reg_open_key(hroot, StringValuePtr(vclsid), &amp;hclsid);</div><div class='del'>-    if (err != ERROR_SUCCESS) {</div><div class='del'>-        RegCloseKey(hroot);</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    typelib = reg_get_val(hclsid, "InprocServer32");</div><div class='del'>-    RegCloseKey(hroot);</div><div class='del'>-    RegCloseKey(hclsid);</div><div class='del'>-    return typelib;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-typelib_file_from_typelib(ole)</div><div class='del'>-    VALUE ole;</div><div class='del'>-{</div><div class='del'>-    HKEY htypelib, hclsid, hversion, hlang;</div><div class='del'>-    double fver;</div><div class='del'>-    DWORD i, j, k;</div><div class='del'>-    LONG err;</div><div class='del'>-    BOOL found = FALSE;</div><div class='del'>-    VALUE typelib;</div><div class='del'>-    VALUE file = Qnil;</div><div class='del'>-    VALUE clsid;</div><div class='del'>-    VALUE ver;</div><div class='del'>-    VALUE lang;</div><div class='del'>-</div><div class='del'>-    err = reg_open_key(HKEY_CLASSES_ROOT, "TypeLib", &amp;htypelib);</div><div class='del'>-    if(err != ERROR_SUCCESS) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    for(i = 0; !found; i++) {</div><div class='del'>-        clsid = reg_enum_key(htypelib, i);</div><div class='del'>-        if (clsid == Qnil)</div><div class='del'>-            break;</div><div class='del'>-        err = reg_open_vkey(htypelib, clsid, &amp;hclsid);</div><div class='del'>-        if (err != ERROR_SUCCESS)</div><div class='del'>-            continue;</div><div class='del'>-        fver = 0;</div><div class='del'>-        for(j = 0; !found; j++) {</div><div class='del'>-            ver = reg_enum_key(hclsid, j);</div><div class='del'>-            if (ver == Qnil)</div><div class='del'>-                break;</div><div class='del'>-            err = reg_open_vkey(hclsid, ver, &amp;hversion);</div><div class='del'>-            if (err != ERROR_SUCCESS || fver &gt; atof(StringValuePtr(ver)))</div><div class='del'>-                continue;</div><div class='del'>-            fver = atof(StringValuePtr(ver));</div><div class='del'>-            typelib = reg_get_val(hversion, NULL);</div><div class='del'>-            if (typelib == Qnil)</div><div class='del'>-                continue;</div><div class='del'>-            if (rb_str_cmp(typelib, ole) == 0) {</div><div class='del'>-                for(k = 0; !found; k++) {</div><div class='del'>-                    lang = reg_enum_key(hversion, k);</div><div class='del'>-                    if (lang == Qnil)</div><div class='del'>-                        break;</div><div class='del'>-                    err = reg_open_vkey(hversion, lang, &amp;hlang);</div><div class='del'>-                    if (err == ERROR_SUCCESS) {</div><div class='del'>-                        if ((file = reg_get_val(hlang, "win32")) != Qnil) </div><div class='del'>-                            found = TRUE;</div><div class='del'>-                        RegCloseKey(hlang);</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            RegCloseKey(hversion);</div><div class='del'>-        }</div><div class='del'>-        RegCloseKey(hclsid);</div><div class='del'>-    }</div><div class='del'>-    RegCloseKey(htypelib);</div><div class='del'>-    return  file;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-typelib_file(ole)</div><div class='del'>-    VALUE ole;</div><div class='del'>-{</div><div class='del'>-    VALUE file = typelib_file_from_clsid(ole);</div><div class='del'>-    if (file != Qnil) {</div><div class='del'>-        return file;</div><div class='del'>-    }</div><div class='del'>-    return typelib_file_from_typelib(ole);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ole_const_load(pTypeLib, klass, self)</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    VALUE klass;</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    unsigned int count;</div><div class='del'>-    unsigned int index;</div><div class='del'>-    int iVar;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    TYPEATTR  *pTypeAttr;</div><div class='del'>-    VARDESC   *pVarDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    unsigned int len;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    char *pName = NULL;</div><div class='del'>-    VALUE val;</div><div class='del'>-    VALUE constant;</div><div class='del'>-    ID id;</div><div class='del'>-    constant = rb_hash_new();</div><div class='del'>-    count = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfoCount(pTypeLib);</div><div class='del'>-    for (index = 0; index &lt; count; index++) {</div><div class='del'>-        hr = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfo(pTypeLib, index, &amp;pTypeInfo);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-            continue;</div><div class='del'>-        hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-        if(FAILED(hr)) {</div><div class='del'>-            OLE_RELEASE(pTypeInfo);</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-        for(iVar = 0; iVar &lt; pTypeAttr-&gt;cVars; iVar++) {</div><div class='del'>-            hr = pTypeInfo-&gt;lpVtbl-&gt;GetVarDesc(pTypeInfo, iVar, &amp;pVarDesc);</div><div class='del'>-            if(FAILED(hr))</div><div class='del'>-                continue;</div><div class='del'>-            if(pVarDesc-&gt;varkind == VAR_CONST &amp;&amp;</div><div class='del'>-               !(pVarDesc-&gt;wVarFlags &amp; (VARFLAG_FHIDDEN |</div><div class='del'>-                                        VARFLAG_FRESTRICTED |</div><div class='del'>-                                        VARFLAG_FNONBROWSABLE))) {</div><div class='del'>-                hr = pTypeInfo-&gt;lpVtbl-&gt;GetNames(pTypeInfo, pVarDesc-&gt;memid, &amp;bstr,</div><div class='del'>-                                                 1, &amp;len);</div><div class='del'>-                if(FAILED(hr) || len == 0 || !bstr)</div><div class='del'>-                    continue;</div><div class='del'>-                pName = ole_wc2mb(bstr);</div><div class='del'>-                val = ole_variant2val(V_UNION1(pVarDesc, lpvarValue));</div><div class='del'>-                *pName = toupper(*pName);</div><div class='del'>-                id = rb_intern(pName);</div><div class='del'>-                if (rb_is_const_id(id)) {</div><div class='del'>-                    rb_define_const(klass, pName, val);</div><div class='del'>-                }</div><div class='del'>-                else {</div><div class='del'>-                    rb_hash_aset(constant, rb_str_new2(pName), val);</div><div class='del'>-                }</div><div class='del'>-                SysFreeString(bstr);</div><div class='del'>-                if(pName) {</div><div class='del'>-                    free(pName);</div><div class='del'>-                    pName = NULL;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            pTypeInfo-&gt;lpVtbl-&gt;ReleaseVarDesc(pTypeInfo, pVarDesc);</div><div class='del'>-        }</div><div class='del'>-        pTypeInfo-&gt;lpVtbl-&gt;ReleaseTypeAttr(pTypeInfo, pTypeAttr);</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-    }</div><div class='del'>-    rb_define_const(klass, "CONSTANTS", constant);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static HRESULT</div><div class='del'>-clsid_from_remote(host, com, pclsid)</div><div class='del'>-    VALUE host;</div><div class='del'>-    VALUE com;</div><div class='del'>-    CLSID *pclsid;</div><div class='del'>-{</div><div class='del'>-    HKEY hlm;</div><div class='del'>-    HKEY hpid;</div><div class='del'>-    VALUE subkey;</div><div class='del'>-    LONG err;</div><div class='del'>-    char clsid[100];</div><div class='del'>-    OLECHAR *pbuf;</div><div class='del'>-    DWORD len;</div><div class='del'>-    DWORD dwtype;</div><div class='del'>-    HRESULT hr = S_OK;</div><div class='del'>-    err = RegConnectRegistry(StringValuePtr(host), HKEY_LOCAL_MACHINE, &amp;hlm);</div><div class='del'>-    if (err != ERROR_SUCCESS)</div><div class='del'>-        return HRESULT_FROM_WIN32(err);</div><div class='del'>-    subkey = rb_str_new2("SOFTWARE\\Classes\\");</div><div class='del'>-    rb_str_concat(subkey, com);</div><div class='del'>-    rb_str_cat2(subkey, "\\CLSID");</div><div class='del'>-    err = RegOpenKeyEx(hlm, StringValuePtr(subkey), 0, KEY_READ, &amp;hpid);</div><div class='del'>-    if (err != ERROR_SUCCESS)</div><div class='del'>-        hr = HRESULT_FROM_WIN32(err);</div><div class='del'>-    else {</div><div class='del'>-        len = sizeof(clsid);</div><div class='del'>-        err = RegQueryValueEx(hpid, "", NULL, &amp;dwtype, clsid, &amp;len);</div><div class='del'>-        if (err == ERROR_SUCCESS &amp;&amp; dwtype == REG_SZ) {</div><div class='del'>-            pbuf  = ole_mb2wc(clsid, -1);</div><div class='del'>-            hr = CLSIDFromString(pbuf, pclsid);</div><div class='del'>-            SysFreeString(pbuf);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-            hr = HRESULT_FROM_WIN32(err);</div><div class='del'>-        }</div><div class='del'>-        RegCloseKey(hpid);</div><div class='del'>-    }</div><div class='del'>-    RegCloseKey(hlm);</div><div class='del'>-    return hr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_create_dcom(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 ole, host, others;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    CLSID   clsid;</div><div class='del'>-    OLECHAR *pbuf;</div><div class='del'>-</div><div class='del'>-    COSERVERINFO serverinfo;</div><div class='del'>-    MULTI_QI multi_qi;</div><div class='del'>-    DWORD clsctx = CLSCTX_REMOTE_SERVER;</div><div class='del'>-</div><div class='del'>-    if (!gole32)</div><div class='del'>-        gole32 = LoadLibrary("OLE32");</div><div class='del'>-    if (!gole32)</div><div class='del'>-        rb_raise(rb_eRuntimeError, "failed to load OLE32");</div><div class='del'>-    if (!gCoCreateInstanceEx)</div><div class='del'>-        gCoCreateInstanceEx = (FNCOCREATEINSTANCEEX*)</div><div class='del'>-            GetProcAddress(gole32, "CoCreateInstanceEx");</div><div class='del'>-    if (!gCoCreateInstanceEx)</div><div class='del'>-        rb_raise(rb_eRuntimeError, "CoCreateInstanceEx is not supported in this environment");</div><div class='del'>-    rb_scan_args(argc, argv, "2*", &amp;ole, &amp;host, &amp;others);</div><div class='del'>-</div><div class='del'>-    pbuf  = ole_mb2wc(StringValuePtr(ole), -1);</div><div class='del'>-    hr = CLSIDFromProgID(pbuf, &amp;clsid);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        hr = clsid_from_remote(host, ole, &amp;clsid);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        hr = CLSIDFromString(pbuf, &amp;clsid);</div><div class='del'>-    SysFreeString(pbuf);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                  "unknown OLE server: `%s'",</div><div class='del'>-                  StringValuePtr(ole));</div><div class='del'>-    memset(&amp;serverinfo, 0, sizeof(COSERVERINFO));    </div><div class='del'>-    serverinfo.pwszName = ole_mb2wc(StringValuePtr(host), -1);</div><div class='del'>-    memset(&amp;multi_qi, 0, sizeof(MULTI_QI));</div><div class='del'>-    multi_qi.pIID = &amp;IID_IDispatch;</div><div class='del'>-    hr = gCoCreateInstanceEx(&amp;clsid, NULL, clsctx, &amp;serverinfo, 1, &amp;multi_qi);</div><div class='del'>-    SysFreeString(serverinfo.pwszName);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                  "failed to create DCOM server `%s' in `%s'",</div><div class='del'>-                  StringValuePtr(ole),</div><div class='del'>-                  StringValuePtr(host));</div><div class='del'>-</div><div class='del'>-    ole_set_member(self, (IDispatch*)multi_qi.pItf);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_bind_obj(moniker, argc, argv, self)</div><div class='del'>-    VALUE moniker;</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'>-    IBindCtx *pBindCtx;</div><div class='del'>-    IMoniker *pMoniker;</div><div class='del'>-    IDispatch *pDispatch;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    OLECHAR *pbuf;</div><div class='del'>-    ULONG eaten = 0;</div><div class='del'>-    </div><div class='del'>-    ole_initialize();</div><div class='del'>-</div><div class='del'>-    hr = CreateBindCtx(0, &amp;pBindCtx);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                  "failed to create bind context");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    pbuf  = ole_mb2wc(StringValuePtr(moniker), -1);</div><div class='del'>-    hr = MkParseDisplayName(pBindCtx, pbuf, &amp;eaten, &amp;pMoniker);</div><div class='del'>-    SysFreeString(pbuf);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        OLE_RELEASE(pBindCtx);</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR,</div><div class='del'>-                  "failed to parse display name of moniker `%s'",</div><div class='del'>-                  StringValuePtr(moniker));</div><div class='del'>-    }</div><div class='del'>-    hr = pMoniker-&gt;lpVtbl-&gt;BindToObject(pMoniker, pBindCtx, NULL, </div><div class='del'>-                                        &amp;IID_IDispatch,</div><div class='del'>-                                        (void**)&amp;pDispatch);</div><div class='del'>-    OLE_RELEASE(pMoniker);</div><div class='del'>-    OLE_RELEASE(pBindCtx);</div><div class='del'>-</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR,</div><div class='del'>-                  "failed to bind moniker `%s'",</div><div class='del'>-                  StringValuePtr(moniker));</div><div class='del'>-    }</div><div class='del'>-    return create_win32ole_object(self, pDispatch, argc, argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE.connect( ole ) --&gt; aWIN32OLE</div><div class='del'>- * </div><div class='del'>- *  Returns running OLE Automation object or WIN32OLE object from moniker.</div><div class='del'>- *  1st argument should be OLE program id or class id or moniker.</div><div class='del'>- *     </div><div class='del'>- *     WIN32OLE.connect('Excel.Application') # =&gt; WIN32OLE object which represents running Excel.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_s_connect(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 svr_name;</div><div class='del'>-    VALUE others;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    CLSID   clsid;</div><div class='del'>-    OLECHAR *pBuf;</div><div class='del'>-    IDispatch *pDispatch;</div><div class='del'>-    IUnknown *pUnknown;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    /* initialize to use OLE */</div><div class='del'>-    ole_initialize();</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "1*", &amp;svr_name, &amp;others);</div><div class='del'>-    if (ruby_safe_level &gt; 0 &amp;&amp; OBJ_TAINTED(svr_name)) {</div><div class='del'>-        rb_raise(rb_eSecurityError, "Insecure Object Connection - %s",</div><div class='del'>-                 StringValuePtr(svr_name));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* get CLSID from OLE server name */</div><div class='del'>-    pBuf  = ole_mb2wc(StringValuePtr(svr_name), -1);</div><div class='del'>-    hr = CLSIDFromProgID(pBuf, &amp;clsid);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        hr = CLSIDFromString(pBuf, &amp;clsid);</div><div class='del'>-    }</div><div class='del'>-    SysFreeString(pBuf);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        return ole_bind_obj(svr_name, argc, argv, self);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    hr = GetActiveObject(&amp;clsid, 0, &amp;pUnknown);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                  "OLE server `%s' not running", StringValuePtr(svr_name));</div><div class='del'>-    }</div><div class='del'>-    hr = pUnknown-&gt;lpVtbl-&gt;QueryInterface(pUnknown, &amp;IID_IDispatch,</div><div class='del'>-                                             (void **)&amp;pDispatch);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        OLE_RELEASE(pUnknown);</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                  "failed to create WIN32OLE server `%s'", </div><div class='del'>-                  StringValuePtr(svr_name));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    OLE_RELEASE(pUnknown);</div><div class='del'>-</div><div class='del'>-    return create_win32ole_object(self, pDispatch, argc, argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE.const_load( ole, mod = WIN32OLE)</div><div class='del'>- * </div><div class='del'>- *  Defines the constants of OLE Automation server as mod's constants.</div><div class='del'>- *  The first argument is WIN32OLE object or type library name.</div><div class='del'>- *  If 2nd argument is omitted, the default is WIN32OLE.</div><div class='del'>- *  The first letter of Ruby's constant variable name is upper case,</div><div class='del'>- *  so constant variable name of WIN32OLE object is capitalized.</div><div class='del'>- *  For example, the 'xlTop' constant of Excel is changed to 'XlTop' </div><div class='del'>- *  in WIN32OLE.</div><div class='del'>- *  If the first letter of constant variabl is not [A-Z], then</div><div class='del'>- *  the constant is defined as CONSTANTS hash element.</div><div class='del'>- *</div><div class='del'>- *     module EXCEL_CONST</div><div class='del'>- *     end</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     WIN32OLE.const_load(excel, EXCEL_CONST)</div><div class='del'>- *     puts EXCEL_CONST::XlTop # =&gt; -4160</div><div class='del'>- *     puts EXCEL_CONST::CONSTANTS['_xlDialogChartSourceData'] # =&gt; 541</div><div class='del'>- *     </div><div class='del'>- *     WIN32OLE.const_load(excel)</div><div class='del'>- *     puts WIN32OLE::XlTop # =&gt; -4160</div><div class='del'>- *</div><div class='del'>- *     module MSO</div><div class='del'>- *     end</div><div class='del'>- *     WIN32OLE.const_load('Microsoft Office 9.0 Object Library', MSO)</div><div class='del'>- *     puts MSO::MsoLineSingle # =&gt; 1</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_s_const_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 ole;</div><div class='del'>-    VALUE klass;</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    unsigned int index;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    OLECHAR *pBuf;</div><div class='del'>-    VALUE file;</div><div class='del'>-    LCID    lcid = LOCALE_SYSTEM_DEFAULT;</div><div class='del'>-    </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;ole, &amp;klass);</div><div class='del'>-    if (TYPE(klass) != T_CLASS &amp;&amp;</div><div class='del'>-        TYPE(klass) != T_MODULE &amp;&amp;</div><div class='del'>-        TYPE(klass) != T_NIL) {</div><div class='del'>-        rb_raise(rb_eTypeError, "2nd parameter must be Class or Module");</div><div class='del'>-    }</div><div class='del'>-    if (rb_obj_is_kind_of(ole, cWIN32OLE)) {</div><div class='del'>-        OLEData_Get_Struct(ole, pole);</div><div class='del'>-        hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;GetTypeInfo(pole-&gt;pDispatch,</div><div class='del'>-                                                  0, lcid, &amp;pTypeInfo);</div><div class='del'>-        if(FAILED(hr)) {</div><div class='del'>-            ole_raise(hr, rb_eRuntimeError, "failed to GetTypeInfo");</div><div class='del'>-        }</div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetContainingTypeLib(pTypeInfo, &amp;pTypeLib, &amp;index);</div><div class='del'>-        if(FAILED(hr)) {</div><div class='del'>-            OLE_RELEASE(pTypeInfo);</div><div class='del'>-            ole_raise(hr, rb_eRuntimeError, "failed to GetContainingTypeLib");</div><div class='del'>-        }</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-        if(TYPE(klass) != T_NIL) {</div><div class='del'>-            ole_const_load(pTypeLib, klass, self);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-            ole_const_load(pTypeLib, cWIN32OLE, self);</div><div class='del'>-        }</div><div class='del'>-        OLE_RELEASE(pTypeLib);</div><div class='del'>-    }</div><div class='del'>-    else if(TYPE(ole) == T_STRING) {</div><div class='del'>-        file = typelib_file(ole);</div><div class='del'>-        if (file == Qnil) {</div><div class='del'>-            file = ole;</div><div class='del'>-        }</div><div class='del'>-        pBuf = ole_mb2wc(StringValuePtr(file), -1);</div><div class='del'>-        hr = LoadTypeLibEx(pBuf, REGKIND_NONE, &amp;pTypeLib);</div><div class='del'>-        SysFreeString(pBuf);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-            ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to LoadTypeLibEx");</div><div class='del'>-        if(TYPE(klass) != T_NIL) {</div><div class='del'>-            ole_const_load(pTypeLib, klass, self);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-            ole_const_load(pTypeLib, cWIN32OLE, self);</div><div class='del'>-        }</div><div class='del'>-        OLE_RELEASE(pTypeLib);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_raise(rb_eTypeError, "1st parameter must be WIN32OLE instance");</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'>-ole_classes_from_typelib(pTypeLib, classes)</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    VALUE classes;</div><div class='del'>-{</div><div class='del'>-    </div><div class='del'>-    long count;</div><div class='del'>-    int i;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    VALUE type;</div><div class='del'>-  </div><div class='del'>-    rb_secure(4);</div><div class='del'>-    count = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfoCount(pTypeLib);</div><div class='del'>-    for (i = 0; i &lt; count; i++) {</div><div class='del'>-        hr = pTypeLib-&gt;lpVtbl-&gt;GetDocumentation(pTypeLib, i,</div><div class='del'>-                                                &amp;bstr, NULL, NULL, NULL);</div><div class='del'>-        if (FAILED(hr)) </div><div class='del'>-            continue;</div><div class='del'>-</div><div class='del'>-        hr = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfo(pTypeLib, i, &amp;pTypeInfo);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-            continue;</div><div class='del'>-</div><div class='del'>-        type = foletype_s_allocate(cWIN32OLE_TYPE);</div><div class='del'>-        oletype_set_member(type, pTypeInfo, WC2VSTR(bstr));</div><div class='del'>-</div><div class='del'>-        rb_ary_push(classes, type);</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-    }</div><div class='del'>-    return classes;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static ULONG</div><div class='del'>-reference_count(pole)</div><div class='del'>-    struct oledata * pole;</div><div class='del'>-{</div><div class='del'>-    ULONG n = 0;</div><div class='del'>-    if(pole-&gt;pDispatch) {</div><div class='del'>-        OLE_ADDREF(pole-&gt;pDispatch);</div><div class='del'>-        n = OLE_RELEASE(pole-&gt;pDispatch);</div><div class='del'>-    }</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE.ole_reference_count(aWIN32OLE) --&gt; number</div><div class='del'>- * </div><div class='del'>- *  Returns reference counter of Dispatch interface of WIN32OLE object. </div><div class='del'>- *  You should not use this method because this method</div><div class='del'>- *  exists only for debugging WIN32OLE.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_s_reference_count(self, obj)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct oledata * pole;</div><div class='del'>-    OLEData_Get_Struct(obj, pole);</div><div class='del'>-    return INT2NUM(reference_count(pole));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE.ole_free(aWIN32OLE) --&gt; number</div><div class='del'>- * </div><div class='del'>- *  Invokes Release method of Dispatch interface of WIN32OLE object. </div><div class='del'>- *  You should not use this method because this method</div><div class='del'>- *  exists only for debugging WIN32OLE.</div><div class='del'>- *  The return value is reference counter of OLE object.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_s_free(self, obj)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    ULONG n = 0;</div><div class='del'>-    struct oledata * pole;</div><div class='del'>-    OLEData_Get_Struct(obj, pole);</div><div class='del'>-    if(pole-&gt;pDispatch) {</div><div class='del'>-        if (reference_count(pole) &gt; 0) {</div><div class='del'>-            n = OLE_RELEASE(pole-&gt;pDispatch);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return INT2NUM(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static HWND</div><div class='del'>-ole_show_help(helpfile, helpcontext)</div><div class='del'>-    VALUE helpfile;</div><div class='del'>-    VALUE helpcontext;</div><div class='del'>-{</div><div class='del'>-    FNHTMLHELP *pfnHtmlHelp;</div><div class='del'>-    HWND hwnd = 0;</div><div class='del'>-</div><div class='del'>-    if(!ghhctrl)</div><div class='del'>-        ghhctrl = LoadLibrary("HHCTRL.OCX");</div><div class='del'>-    if (!ghhctrl)</div><div class='del'>-        return hwnd;</div><div class='del'>-    pfnHtmlHelp = (FNHTMLHELP*)GetProcAddress(ghhctrl, "HtmlHelpA");</div><div class='del'>-    if (!pfnHtmlHelp)</div><div class='del'>-        return hwnd;</div><div class='del'>-    hwnd = pfnHtmlHelp(GetDesktopWindow(), StringValuePtr(helpfile), </div><div class='del'>-                    0x0f, NUM2INT(helpcontext));</div><div class='del'>-    if (hwnd == 0)</div><div class='del'>-        hwnd = pfnHtmlHelp(GetDesktopWindow(), StringValuePtr(helpfile), </div><div class='del'>-                 0,  NUM2INT(helpcontext));</div><div class='del'>-    return hwnd;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE.ole_show_help(obj [,helpcontext])</div><div class='del'>- * </div><div class='del'>- *  Displays helpfile. The 1st argument specifies WIN32OLE_TYPE</div><div class='del'>- *  object or WIN32OLE_METHOD object or helpfile.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     typeobj = excel.ole_type</div><div class='del'>- *     WIN32OLE.ole_show_help(typeobj)</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_s_show_help(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 target;</div><div class='del'>-    VALUE helpcontext;</div><div class='del'>-    VALUE helpfile;</div><div class='del'>-    VALUE name;</div><div class='del'>-    HWND  hwnd;</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;target, &amp;helpcontext);</div><div class='del'>-    if (rb_obj_is_kind_of(target, cWIN32OLE_TYPE) ||</div><div class='del'>-        rb_obj_is_kind_of(target, cWIN32OLE_METHOD)) {</div><div class='del'>-        helpfile = rb_funcall(target, rb_intern("helpfile"), 0);</div><div class='del'>-        if(strlen(StringValuePtr(helpfile)) == 0) {</div><div class='del'>-            name = rb_ivar_get(target, rb_intern("name"));</div><div class='del'>-            rb_raise(rb_eRuntimeError, "no helpfile of `%s'",</div><div class='del'>-                     StringValuePtr(name));</div><div class='del'>-        }</div><div class='del'>-        helpcontext = rb_funcall(target, rb_intern("helpcontext"), 0);</div><div class='del'>-    } else {</div><div class='del'>-        helpfile = target;</div><div class='del'>-    }</div><div class='del'>-    if (TYPE(helpfile) != T_STRING) {</div><div class='del'>-        rb_raise(rb_eTypeError, "1st parameter must be (String|WIN32OLE_TYPE|WIN32OLE_METHOD)");</div><div class='del'>-    }</div><div class='del'>-    hwnd = ole_show_help(helpfile, helpcontext);</div><div class='del'>-    if(hwnd == 0) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "failed to open help file `%s'",</div><div class='del'>-                 StringValuePtr(helpfile));</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'>- *     WIN32OLE.codepage</div><div class='del'>- * </div><div class='del'>- *  Returns current codepage.</div><div class='del'>- *     WIN32OLE.codepage # =&gt; WIN32OLE::CP_ACP</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_s_get_code_page(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(cWIN32OLE_cp);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE.codepage = CP</div><div class='del'>- * </div><div class='del'>- *  Sets current codepage.</div><div class='del'>- *     WIN32OLE.codepage = WIN32OLE::CP_UTF8</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_s_set_code_page(self, vcp)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE vcp;</div><div class='del'>-{</div><div class='del'>-    UINT cp = FIX2INT(vcp);</div><div class='del'>-</div><div class='del'>-    switch(cp) {</div><div class='del'>-    case CP_ACP:</div><div class='del'>-    case CP_OEMCP:</div><div class='del'>-    case CP_MACCP:</div><div class='del'>-    case CP_THREAD_ACP:</div><div class='del'>-    case CP_SYMBOL:</div><div class='del'>-    case CP_UTF7:</div><div class='del'>-    case CP_UTF8:</div><div class='del'>-        cWIN32OLE_cp = cp;</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        rb_raise(eWIN32OLE_RUNTIME_ERROR, "codepage should be WIN32OLE::CP_ACP, WIN32OLE::CP_OEMCP, WIN32OLE::CP_MACCP, WIN32OLE::CP_THREAD_ACP, WIN32OLE::CP_SYMBOL, WIN32OLE::CP_UTF7, WIN32OLE::CP_UTF8");</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /*</div><div class='del'>-     * Should this method return old codepage?</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'>- * Document-class: WIN32OLE</div><div class='del'>- *</div><div class='del'>- *   &lt;code&gt;WIN32OLE&lt;/code&gt; objects represent OLE Automation object in Ruby.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE.new(server, [host]) -&gt; WIN32OLE object</div><div class='del'>- * </div><div class='del'>- *  Returns a new WIN32OLE object(OLE Automation object).</div><div class='del'>- *  The first argument server specifies OLE Automation server.</div><div class='del'>- *  The first argument should be CLSID or PROGID.</div><div class='del'>- *  If second argument host specified, then returns OLE Automation </div><div class='del'>- *  object on host. </div><div class='del'>- *</div><div class='del'>- *      WIN32OLE.new('Excel.Application') # =&gt; Excel OLE Automation WIN32OLE object.</div><div class='del'>- *      WIN32OLE.new('{00024500-0000-0000-C000-000000000046}') # =&gt; Excel OLE Automation WIN32OLE object.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_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 svr_name;</div><div class='del'>-    VALUE host;</div><div class='del'>-    VALUE others;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    CLSID   clsid;</div><div class='del'>-    OLECHAR *pBuf;</div><div class='del'>-    IDispatch *pDispatch;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rb_call_super(0, 0);</div><div class='del'>-    rb_scan_args(argc, argv, "11*", &amp;svr_name, &amp;host, &amp;others);</div><div class='del'>-</div><div class='del'>-    if (ruby_safe_level &gt; 0 &amp;&amp; OBJ_TAINTED(svr_name)) {</div><div class='del'>-        rb_raise(rb_eSecurityError, "Insecure Object Creation - %s",</div><div class='del'>-                 StringValuePtr(svr_name));</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(host)) {</div><div class='del'>-        if (ruby_safe_level &gt; 0 &amp;&amp; OBJ_TAINTED(host)) {</div><div class='del'>-            rb_raise(rb_eSecurityError, "Insecure Object Creation - %s",</div><div class='del'>-                     StringValuePtr(svr_name));</div><div class='del'>-        }</div><div class='del'>-        return ole_create_dcom(argc, argv, self);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* get CLSID from OLE server name */</div><div class='del'>-    pBuf  = ole_mb2wc(StringValuePtr(svr_name), -1);</div><div class='del'>-    hr = CLSIDFromProgID(pBuf, &amp;clsid);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        hr = CLSIDFromString(pBuf, &amp;clsid);</div><div class='del'>-    }</div><div class='del'>-    SysFreeString(pBuf);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                  "unknown OLE server: `%s'",</div><div class='del'>-                  StringValuePtr(svr_name));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* get IDispatch interface */</div><div class='del'>-    hr = CoCreateInstance(&amp;clsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,</div><div class='del'>-                          &amp;IID_IDispatch, (void**)&amp;pDispatch);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR,</div><div class='del'>-                  "failed to create WIN32OLE object from `%s'",</div><div class='del'>-                  StringValuePtr(svr_name));</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    ole_set_member(self, pDispatch);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hash2named_arg(pair, pOp)</div><div class='del'>-    VALUE pair;</div><div class='del'>-    struct oleparam* pOp;</div><div class='del'>-{</div><div class='del'>-    unsigned int index, i;</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    index = pOp-&gt;dp.cNamedArgs;</div><div class='del'>-</div><div class='del'>-    /*-------------------------------------</div><div class='del'>-      the data-type of key must be String</div><div class='del'>-    ---------------------------------------*/</div><div class='del'>-    key = rb_ary_entry(pair, 0);</div><div class='del'>-    if(TYPE(key) != T_STRING) {</div><div class='del'>-        /* clear name of dispatch parameters */</div><div class='del'>-        for(i = 1; i &lt; index + 1; i++) {</div><div class='del'>-            SysFreeString(pOp-&gt;pNamedArgs[i]);</div><div class='del'>-        }</div><div class='del'>-        /* clear dispatch parameters */</div><div class='del'>-        for(i = 0; i &lt; index; i++ ) {</div><div class='del'>-            VariantClear(&amp;(pOp-&gt;dp.rgvarg[i]));</div><div class='del'>-        }</div><div class='del'>-        /* raise an exception */</div><div class='del'>-        Check_Type(key, T_STRING);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* pNamedArgs[0] is &lt;method name&gt;, so "index + 1" */</div><div class='del'>-    pOp-&gt;pNamedArgs[index + 1] = ole_mb2wc(StringValuePtr(key), -1);</div><div class='del'>-</div><div class='del'>-    value = rb_ary_entry(pair, 1);</div><div class='del'>-    VariantInit(&amp;(pOp-&gt;dp.rgvarg[index]));</div><div class='del'>-    ole_val2variant(value, &amp;(pOp-&gt;dp.rgvarg[index]));</div><div class='del'>-</div><div class='del'>-    pOp-&gt;dp.cNamedArgs += 1;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-set_argv(realargs, beg, end)</div><div class='del'>-    VARIANTARG* realargs;</div><div class='del'>-    unsigned int beg, end;</div><div class='del'>-{</div><div class='del'>-    VALUE argv = rb_const_get(cWIN32OLE, rb_intern("ARGV"));</div><div class='del'>-</div><div class='del'>-    Check_Type(argv, T_ARRAY);</div><div class='del'>-    rb_ary_clear(argv);</div><div class='del'>-    while (end-- &gt; beg) {</div><div class='del'>-        rb_ary_push(argv, ole_variant2val(&amp;realargs[end]));</div><div class='del'>-        VariantClear(&amp;realargs[end]);</div><div class='del'>-    }</div><div class='del'>-    return argv;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_invoke(argc, argv, self, wFlags)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-    USHORT wFlags;</div><div class='del'>-{</div><div class='del'>-    LCID    lcid = LOCALE_SYSTEM_DEFAULT;</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE cmd;</div><div class='del'>-    VALUE paramS;</div><div class='del'>-    VALUE param;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE v;</div><div class='del'>-</div><div class='del'>-    BSTR wcmdname;</div><div class='del'>-</div><div class='del'>-    DISPID DispID;</div><div class='del'>-    DISPID* pDispID;</div><div class='del'>-    EXCEPINFO excepinfo;</div><div class='del'>-    VARIANT result;</div><div class='del'>-    VARIANTARG* realargs = NULL;</div><div class='del'>-    unsigned int argErr = 0;</div><div class='del'>-    unsigned int i;</div><div class='del'>-    unsigned int cNamedArgs;</div><div class='del'>-    int n;</div><div class='del'>-    struct oleparam op;</div><div class='del'>-    memset(&amp;excepinfo, 0, sizeof(EXCEPINFO));</div><div class='del'>-</div><div class='del'>-    VariantInit(&amp;result);</div><div class='del'>-</div><div class='del'>-    op.dp.rgvarg = NULL;</div><div class='del'>-    op.dp.rgdispidNamedArgs = NULL;</div><div class='del'>-    op.dp.cNamedArgs = 0;</div><div class='del'>-    op.dp.cArgs = 0;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "1*", &amp;cmd, &amp;paramS);</div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-    if(!pole-&gt;pDispatch) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "failed to get dispatch interface");</div><div class='del'>-    }</div><div class='del'>-    wcmdname = ole_mb2wc(StringValuePtr(cmd), -1);</div><div class='del'>-    hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;GetIDsOfNames( pole-&gt;pDispatch, &amp;IID_NULL,</div><div class='del'>-                                                 &amp;wcmdname, 1, lcid, &amp;DispID);</div><div class='del'>-    SysFreeString(wcmdname);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                  "unknown property or method `%s'",</div><div class='del'>-                  StringValuePtr(cmd));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* pick up last argument of method */</div><div class='del'>-    param = rb_ary_entry(paramS, argc-2);</div><div class='del'>-</div><div class='del'>-    op.dp.cNamedArgs = 0;</div><div class='del'>-</div><div class='del'>-    /* if last arg is hash object */</div><div class='del'>-    if(TYPE(param) == T_HASH) {</div><div class='del'>-        /*------------------------------------------ </div><div class='del'>-          hash object ==&gt; named dispatch parameters </div><div class='del'>-        --------------------------------------------*/</div><div class='del'>-        cNamedArgs = NUM2INT(rb_funcall(param, rb_intern("length"), 0));</div><div class='del'>-        op.dp.cArgs = cNamedArgs + argc - 2;</div><div class='del'>-        op.pNamedArgs = ALLOCA_N(OLECHAR*, cNamedArgs + 1);</div><div class='del'>-        op.dp.rgvarg = ALLOCA_N(VARIANTARG, op.dp.cArgs);</div><div class='del'>-        rb_iterate(rb_each, param, hash2named_arg, (VALUE)&amp;op);</div><div class='del'>-</div><div class='del'>-        pDispID = ALLOCA_N(DISPID, cNamedArgs + 1);</div><div class='del'>-        op.pNamedArgs[0] = ole_mb2wc(StringValuePtr(cmd), -1);</div><div class='del'>-        hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;GetIDsOfNames(pole-&gt;pDispatch,</div><div class='del'>-                                                    &amp;IID_NULL,</div><div class='del'>-                                                    op.pNamedArgs,</div><div class='del'>-                                                    op.dp.cNamedArgs + 1,</div><div class='del'>-                                                    lcid, pDispID);</div><div class='del'>-        for(i = 0; i &lt; op.dp.cNamedArgs + 1; i++) {</div><div class='del'>-            SysFreeString(op.pNamedArgs[i]);</div><div class='del'>-            op.pNamedArgs[i] = NULL;</div><div class='del'>-        }</div><div class='del'>-        if(FAILED(hr)) {</div><div class='del'>-            /* clear dispatch parameters */</div><div class='del'>-            for(i = 0; i &lt; op.dp.cArgs; i++ ) {</div><div class='del'>-                VariantClear(&amp;op.dp.rgvarg[i]);</div><div class='del'>-            }</div><div class='del'>-            ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                      "failed to get named argument info: `%s'",</div><div class='del'>-                      StringValuePtr(cmd));</div><div class='del'>-        }</div><div class='del'>-        op.dp.rgdispidNamedArgs = &amp;(pDispID[1]);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        cNamedArgs = 0;</div><div class='del'>-        op.dp.cArgs = argc - 1;</div><div class='del'>-        op.pNamedArgs = ALLOCA_N(OLECHAR*, cNamedArgs + 1);</div><div class='del'>-        if (op.dp.cArgs &gt; 0) {</div><div class='del'>-            op.dp.rgvarg  = ALLOCA_N(VARIANTARG, op.dp.cArgs);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /*--------------------------------------</div><div class='del'>-      non hash args ==&gt; dispatch parameters </div><div class='del'>-     ----------------------------------------*/</div><div class='del'>-    if(op.dp.cArgs &gt; cNamedArgs) {</div><div class='del'>-        realargs = ALLOCA_N(VARIANTARG, op.dp.cArgs-cNamedArgs+1);</div><div class='del'>-        for(i = cNamedArgs; i &lt; op.dp.cArgs; i++) {</div><div class='del'>-            n = op.dp.cArgs - i + cNamedArgs - 1;</div><div class='del'>-            VariantInit(&amp;realargs[n]);</div><div class='del'>-            VariantInit(&amp;op.dp.rgvarg[n]);</div><div class='del'>-            param = rb_ary_entry(paramS, i-cNamedArgs);</div><div class='del'>-            </div><div class='del'>-             ole_val2variant(param, &amp;realargs[n]);</div><div class='del'>-            V_VT(&amp;op.dp.rgvarg[n]) = VT_VARIANT | VT_BYREF;</div><div class='del'>-             V_VARIANTREF(&amp;op.dp.rgvarg[n]) = &amp;realargs[n];</div><div class='del'>-</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    /* apparent you need to call propput, you need this */</div><div class='del'>-    if (wFlags &amp; DISPATCH_PROPERTYPUT) {</div><div class='del'>-        if (op.dp.cArgs == 0)</div><div class='del'>-            return ResultFromScode(E_INVALIDARG);</div><div class='del'>-</div><div class='del'>-        op.dp.cNamedArgs = 1;</div><div class='del'>-        op.dp.rgdispidNamedArgs = ALLOCA_N( DISPID, 1 );</div><div class='del'>-        op.dp.rgdispidNamedArgs[0] = DISPID_PROPERTYPUT;</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;Invoke(pole-&gt;pDispatch, DispID, </div><div class='del'>-                                         &amp;IID_NULL, lcid, wFlags, &amp;op.dp, </div><div class='del'>-                                         &amp;result, &amp;excepinfo, &amp;argErr);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        /* retry to call args by value */</div><div class='del'>-        if(op.dp.cArgs &gt;= cNamedArgs) {</div><div class='del'>-            for(i = cNamedArgs; i &lt; op.dp.cArgs; i++) {</div><div class='del'>-                n = op.dp.cArgs - i + cNamedArgs - 1;</div><div class='del'>-                param = rb_ary_entry(paramS, i-cNamedArgs);</div><div class='del'>-                ole_val2variant(param, &amp;op.dp.rgvarg[n]);</div><div class='del'>-            }</div><div class='del'>-            if (hr == DISP_E_EXCEPTION) {</div><div class='del'>-                ole_freeexceptinfo(&amp;excepinfo);</div><div class='del'>-            }</div><div class='del'>-            memset(&amp;excepinfo, 0, sizeof(EXCEPINFO));</div><div class='del'>-            VariantInit(&amp;result);</div><div class='del'>-            hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;Invoke(pole-&gt;pDispatch, DispID, </div><div class='del'>-                                                 &amp;IID_NULL, lcid, wFlags,</div><div class='del'>-                                                 &amp;op.dp, &amp;result,</div><div class='del'>-                                                 &amp;excepinfo, &amp;argErr);</div><div class='del'>-</div><div class='del'>-            /* mega kludge. if a method in WORD is called and we ask</div><div class='del'>-             * for a result when one is not returned then</div><div class='del'>-             * hResult == DISP_E_EXCEPTION. this only happens on</div><div class='del'>-             * functions whose DISPID &gt; 0x8000 */</div><div class='del'>-            if ((hr == DISP_E_EXCEPTION || hr == DISP_E_MEMBERNOTFOUND) &amp;&amp; DispID &gt; 0x8000) {</div><div class='del'>-                if (hr == DISP_E_EXCEPTION) {</div><div class='del'>-                    ole_freeexceptinfo(&amp;excepinfo);</div><div class='del'>-                }</div><div class='del'>-                memset(&amp;excepinfo, 0, sizeof(EXCEPINFO));</div><div class='del'>-                hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;Invoke(pole-&gt;pDispatch, DispID, </div><div class='del'>-                        &amp;IID_NULL, lcid, wFlags,</div><div class='del'>-                        &amp;op.dp, NULL,</div><div class='del'>-                        &amp;excepinfo, &amp;argErr);</div><div class='del'>-            }</div><div class='del'>-            for(i = cNamedArgs; i &lt; op.dp.cArgs; i++) {</div><div class='del'>-                n = op.dp.cArgs - i + cNamedArgs - 1;</div><div class='del'>-                VariantClear(&amp;op.dp.rgvarg[n]);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        if (FAILED(hr)) {</div><div class='del'>-            /* retry after converting nil to VT_EMPTY */</div><div class='del'>-            if (op.dp.cArgs &gt; cNamedArgs) {</div><div class='del'>-                for(i = cNamedArgs; i &lt; op.dp.cArgs; i++) {</div><div class='del'>-                    n = op.dp.cArgs - i + cNamedArgs - 1;</div><div class='del'>-                    param = rb_ary_entry(paramS, i-cNamedArgs);</div><div class='del'>-                    ole_val2variant2(param, &amp;op.dp.rgvarg[n]);</div><div class='del'>-                }</div><div class='del'>-                if (hr == DISP_E_EXCEPTION) {</div><div class='del'>-                    ole_freeexceptinfo(&amp;excepinfo);</div><div class='del'>-                }</div><div class='del'>-                memset(&amp;excepinfo, 0, sizeof(EXCEPINFO));</div><div class='del'>-                VariantInit(&amp;result);</div><div class='del'>-                hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;Invoke(pole-&gt;pDispatch, DispID, </div><div class='del'>-                        &amp;IID_NULL, lcid, wFlags,</div><div class='del'>-                        &amp;op.dp, &amp;result,</div><div class='del'>-                        &amp;excepinfo, &amp;argErr);</div><div class='del'>-                for(i = cNamedArgs; i &lt; op.dp.cArgs; i++) {</div><div class='del'>-                    n = op.dp.cArgs - i + cNamedArgs - 1;</div><div class='del'>-                    VariantClear(&amp;op.dp.rgvarg[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'>-    /* clear dispatch parameter */</div><div class='del'>-    if(op.dp.cArgs &gt; cNamedArgs) {</div><div class='del'>-        set_argv(realargs, cNamedArgs, op.dp.cArgs);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        for(i = 0; i &lt; op.dp.cArgs; i++) {</div><div class='del'>-            VariantClear(&amp;op.dp.rgvarg[i]);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        v = ole_excepinfo2msg(&amp;excepinfo);</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "%s%s",</div><div class='del'>-                  StringValuePtr(cmd), StringValuePtr(v));</div><div class='del'>-    }</div><div class='del'>-    obj = ole_variant2val(&amp;result);</div><div class='del'>-    VariantClear(&amp;result);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE#invoke(method, [arg1,...])  =&gt; return value of method.</div><div class='del'>- *</div><div class='del'>- *  Runs OLE method. </div><div class='del'>- *  The first argument specifies the method name of OLE Automation object.</div><div class='del'>- *  The others specify argument of the &lt;i&gt;method&lt;/i&gt;.</div><div class='del'>- *  If you can not execute &lt;i&gt;method&lt;/i&gt; directly, then use this method instead.</div><div class='del'>- *</div><div class='del'>- *    excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *    excel.invoke('Quit')  # =&gt; same as excel.Quit</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_invoke(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'>-    return ole_invoke(argc, argv, self, DISPATCH_METHOD|DISPATCH_PROPERTYGET);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_invoke2(self, dispid, args, types, dispkind)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE dispid;</div><div class='del'>-    VALUE args;</div><div class='del'>-    VALUE types;</div><div class='del'>-    USHORT dispkind;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    unsigned int argErr = 0;</div><div class='del'>-    EXCEPINFO excepinfo;</div><div class='del'>-    VARIANT result;</div><div class='del'>-    DISPPARAMS dispParams;</div><div class='del'>-    VARIANTARG* realargs = NULL;</div><div class='del'>-    int i, j;</div><div class='del'>-    VALUE obj = Qnil;</div><div class='del'>-    VALUE tp, param;</div><div class='del'>-    VALUE v;</div><div class='del'>-    VARTYPE vt;</div><div class='del'>-</div><div class='del'>-    Check_Type(args, T_ARRAY);</div><div class='del'>-    Check_Type(types, T_ARRAY);</div><div class='del'>-    </div><div class='del'>-    memset(&amp;excepinfo, 0, sizeof(EXCEPINFO));</div><div class='del'>-    memset(&amp;dispParams, 0, sizeof(DISPPARAMS));</div><div class='del'>-    VariantInit(&amp;result);</div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-</div><div class='del'>-    dispParams.cArgs = RARRAY(args)-&gt;len;</div><div class='del'>-    dispParams.rgvarg = ALLOCA_N(VARIANTARG, dispParams.cArgs);</div><div class='del'>-    realargs = ALLOCA_N(VARIANTARG, dispParams.cArgs);</div><div class='del'>-    for (i = 0, j = dispParams.cArgs - 1; i &lt; (int)dispParams.cArgs; i++, j--)</div><div class='del'>-    {</div><div class='del'>-        VariantInit(&amp;realargs[i]);</div><div class='del'>-        VariantInit(&amp;dispParams.rgvarg[i]);</div><div class='del'>-        tp = rb_ary_entry(types, j);</div><div class='del'>-        vt = (VARTYPE)FIX2INT(tp);</div><div class='del'>-        V_VT(&amp;dispParams.rgvarg[i]) = vt;</div><div class='del'>-        param = rb_ary_entry(args, j);</div><div class='del'>-        if (param == Qnil)</div><div class='del'>-        {</div><div class='del'>-</div><div class='del'>-            V_VT(&amp;dispParams.rgvarg[i]) = V_VT(&amp;realargs[i]) = VT_ERROR;</div><div class='del'>-            V_ERROR(&amp;dispParams.rgvarg[i]) = V_ERROR(&amp;realargs[i]) = DISP_E_PARAMNOTFOUND;</div><div class='del'>-        }</div><div class='del'>-        else</div><div class='del'>-        {</div><div class='del'>-            if (vt &amp; VT_ARRAY)</div><div class='del'>-            {</div><div class='del'>-                int ent;</div><div class='del'>-                LPBYTE pb;</div><div class='del'>-                short* ps;</div><div class='del'>-                LPLONG pl;</div><div class='del'>-                VARIANT* pv;</div><div class='del'>-                CY *py;</div><div class='del'>-                VARTYPE v;</div><div class='del'>-                SAFEARRAYBOUND rgsabound[1];</div><div class='del'>-                Check_Type(param, T_ARRAY);</div><div class='del'>-                rgsabound[0].lLbound = 0;</div><div class='del'>-                rgsabound[0].cElements = RARRAY(param)-&gt;len;</div><div class='del'>-                v = vt &amp; ~(VT_ARRAY | VT_BYREF);</div><div class='del'>-                V_ARRAY(&amp;realargs[i]) = SafeArrayCreate(v, 1, rgsabound);</div><div class='del'>-                V_VT(&amp;realargs[i]) = VT_ARRAY | v;</div><div class='del'>-                SafeArrayLock(V_ARRAY(&amp;realargs[i]));</div><div class='del'>-                pb = V_ARRAY(&amp;realargs[i])-&gt;pvData;</div><div class='del'>-                ps = V_ARRAY(&amp;realargs[i])-&gt;pvData;</div><div class='del'>-                pl = V_ARRAY(&amp;realargs[i])-&gt;pvData;</div><div class='del'>-                py = V_ARRAY(&amp;realargs[i])-&gt;pvData;</div><div class='del'>-                pv = V_ARRAY(&amp;realargs[i])-&gt;pvData;</div><div class='del'>-                for (ent = 0; ent &lt; (int)rgsabound[0].cElements; ent++)</div><div class='del'>-                {</div><div class='del'>-                    VARIANT velem;</div><div class='del'>-                    VALUE elem = rb_ary_entry(param, ent);</div><div class='del'>-                    ole_val2variant(elem, &amp;velem);</div><div class='del'>-                    if (v != VT_VARIANT)</div><div class='del'>-                    {</div><div class='del'>-                        VariantChangeTypeEx(&amp;velem, &amp;velem,</div><div class='del'>-                            LOCALE_SYSTEM_DEFAULT, 0, v);</div><div class='del'>-                    }</div><div class='del'>-                    switch (v)</div><div class='del'>-                    {</div><div class='del'>-                    /* 128 bits */</div><div class='del'>-                    case VT_VARIANT:</div><div class='del'>-                        *pv++ = velem;</div><div class='del'>-                        break;</div><div class='del'>-                    /* 64 bits */</div><div class='del'>-                    case VT_R8:</div><div class='del'>-                    case VT_CY:</div><div class='del'>-                    case VT_DATE:</div><div class='del'>-                        *py++ = V_CY(&amp;velem);</div><div class='del'>-                        break;</div><div class='del'>-                    /* 16 bits */</div><div class='del'>-                    case VT_BOOL:</div><div class='del'>-                    case VT_I2:</div><div class='del'>-                    case VT_UI2:</div><div class='del'>-                        *ps++ = V_I2(&amp;velem);</div><div class='del'>-                        break;</div><div class='del'>-                    /* 8 bites */</div><div class='del'>-                    case VT_UI1:</div><div class='del'>-                    case VT_I1:</div><div class='del'>-                        *pb++ = V_UI1(&amp;velem);</div><div class='del'>-                        break;</div><div class='del'>-                    /* 32 bits */</div><div class='del'>-                    default:</div><div class='del'>-                        *pl++ = V_I4(&amp;velem);</div><div class='del'>-                        break;</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                SafeArrayUnlock(V_ARRAY(&amp;realargs[i]));</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                ole_val2variant(param, &amp;realargs[i]);</div><div class='del'>-                if ((vt &amp; (~VT_BYREF)) != VT_VARIANT)</div><div class='del'>-                {</div><div class='del'>-                    hr = VariantChangeTypeEx(&amp;realargs[i], &amp;realargs[i],</div><div class='del'>-                                             LOCALE_SYSTEM_DEFAULT, 0,</div><div class='del'>-                                             (VARTYPE)(vt &amp; (~VT_BYREF)));</div><div class='del'>-                    if (hr != S_OK)</div><div class='del'>-                    {</div><div class='del'>-                        rb_raise(rb_eTypeError, "not valid value");</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            if ((vt &amp; VT_BYREF) || vt == VT_VARIANT)</div><div class='del'>-            {</div><div class='del'>-                if (vt == VT_VARIANT)</div><div class='del'>-                    V_VT(&amp;dispParams.rgvarg[i]) = VT_VARIANT | VT_BYREF;</div><div class='del'>-                switch (vt &amp; (~VT_BYREF))</div><div class='del'>-                {</div><div class='del'>-                /* 128 bits */</div><div class='del'>-                case VT_VARIANT:</div><div class='del'>-                    V_VARIANTREF(&amp;dispParams.rgvarg[i]) = &amp;realargs[i];</div><div class='del'>-                    break;</div><div class='del'>-                /* 64 bits */</div><div class='del'>-                case VT_R8:</div><div class='del'>-                case VT_CY:</div><div class='del'>-                case VT_DATE:</div><div class='del'>-                    V_CYREF(&amp;dispParams.rgvarg[i]) = &amp;V_CY(&amp;realargs[i]);</div><div class='del'>-                    break;</div><div class='del'>-                /* 16 bits */</div><div class='del'>-                case VT_BOOL:</div><div class='del'>-                case VT_I2:</div><div class='del'>-                case VT_UI2:</div><div class='del'>-                    V_I2REF(&amp;dispParams.rgvarg[i]) = &amp;V_I2(&amp;realargs[i]);</div><div class='del'>-                    break;</div><div class='del'>-                /* 8 bites */</div><div class='del'>-                case VT_UI1:</div><div class='del'>-                case VT_I1:</div><div class='del'>-                    V_UI1REF(&amp;dispParams.rgvarg[i]) = &amp;V_UI1(&amp;realargs[i]);</div><div class='del'>-                    break;</div><div class='del'>-                /* 32 bits */</div><div class='del'>-                default:</div><div class='del'>-                    V_I4REF(&amp;dispParams.rgvarg[i]) = &amp;V_I4(&amp;realargs[i]);</div><div class='del'>-                    break;</div><div class='del'>-                }</div><div class='del'>-            }</div><div class='del'>-            else</div><div class='del'>-            {</div><div class='del'>-                /* copy 64 bits of data */</div><div class='del'>-                V_CY(&amp;dispParams.rgvarg[i]) = V_CY(&amp;realargs[i]);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (dispkind &amp; DISPATCH_PROPERTYPUT) {</div><div class='del'>-        dispParams.cNamedArgs = 1;</div><div class='del'>-        dispParams.rgdispidNamedArgs = ALLOCA_N( DISPID, 1 );</div><div class='del'>-        dispParams.rgdispidNamedArgs[0] = DISPID_PROPERTYPUT;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;Invoke(pole-&gt;pDispatch, NUM2INT(dispid),</div><div class='del'>-                                         &amp;IID_NULL, LOCALE_SYSTEM_DEFAULT,</div><div class='del'>-                                         dispkind,</div><div class='del'>-                                         &amp;dispParams, &amp;result,</div><div class='del'>-                                         &amp;excepinfo, &amp;argErr);</div><div class='del'>-</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        v = ole_excepinfo2msg(&amp;excepinfo);</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "_invoke %s",</div><div class='del'>-                  StringValuePtr(v));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* clear dispatch parameter */</div><div class='del'>-    if(dispParams.cArgs &gt; 0) {</div><div class='del'>-        set_argv(realargs, 0, dispParams.cArgs);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    obj = ole_variant2val(&amp;result);</div><div class='del'>-    VariantClear(&amp;result);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   call-seq:</div><div class='del'>- *      WIN32OLE#_invoke(dispid, args, types)</div><div class='del'>- * </div><div class='del'>- *   Runs the early binding method.</div><div class='del'>- *   The 1st argument specifies dispatch ID, </div><div class='del'>- *   the 2nd argument specifies the array of arguments,</div><div class='del'>- *   the 3rd argument specifies the array of the type of arguments.</div><div class='del'>- *</div><div class='del'>- *      excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *      excel._invoke(302, [], []) #  same effect as excel.Quit</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_invoke2(self, dispid, args, types)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE dispid;</div><div class='del'>-    VALUE args;</div><div class='del'>-    VALUE types;</div><div class='del'>-{</div><div class='del'>-    return ole_invoke2(self, dispid, args, types, DISPATCH_METHOD);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE#_getproperty(dispid, args, types)</div><div class='del'>- * </div><div class='del'>- *  Runs the early binding method to get property.</div><div class='del'>- *  The 1st argument specifies dispatch ID, </div><div class='del'>- *  the 2nd argument specifies the array of arguments,</div><div class='del'>- *  the 3rd argument specifies the array of the type of arguments.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     puts excel._getproperty(558, [], []) # same effect as puts excel.visible</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_getproperty2(self, dispid, args, types)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE dispid;</div><div class='del'>-    VALUE args;</div><div class='del'>-    VALUE types;</div><div class='del'>-{</div><div class='del'>-    return ole_invoke2(self, dispid, args, types, DISPATCH_PROPERTYGET);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   call-seq:</div><div class='del'>- *      WIN32OLE#_setproperty(dispid, args, types)</div><div class='del'>- * </div><div class='del'>- *   Runs the early binding method to set property.</div><div class='del'>- *   The 1st argument specifies dispatch ID, </div><div class='del'>- *   the 2nd argument specifies the array of arguments,</div><div class='del'>- *   the 3rd argument specifies the array of the type of arguments.</div><div class='del'>- *</div><div class='del'>- *      excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *      excel._setproperty(558, [true], [WIN32OLE::VARIANT::VT_BOOL]) # same effect as excel.visible = true</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_setproperty2(self, dispid, args, types)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE dispid;</div><div class='del'>-    VALUE args;</div><div class='del'>-    VALUE types;</div><div class='del'>-{</div><div class='del'>-    return ole_invoke2(self, dispid, args, types, DISPATCH_PROPERTYPUT);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE['property']=val </div><div class='del'>- *     WIN32OLE.setproperty('property', [arg1, arg2,...] val)</div><div class='del'>- * </div><div class='del'>- *  Sets property of OLE object.</div><div class='del'>- *  When you want to set property with argument, you can use this method.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     excel['Visible'] = true</div><div class='del'>- *     book = excel.workbooks.add</div><div class='del'>- *     sheet = book.worksheets(1)</div><div class='del'>- *     sheet.setproperty('Cells', 1, 2, 10) # =&gt; The B1 cell value is 10.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_setproperty(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'>-    return ole_invoke(argc, argv, self, DISPATCH_PROPERTYPUT);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE['property'] </div><div class='del'>- * </div><div class='del'>- *  Returns property of OLE object.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     puts excel['Visible'] # =&gt; false</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_getproperty(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'>-    return ole_invoke(argc, argv, self, DISPATCH_PROPERTYGET);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_propertyput(self, property, value)</div><div class='del'>-    VALUE self, property, value;</div><div class='del'>-{</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    unsigned argErr;</div><div class='del'>-    unsigned int index;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    EXCEPINFO excepinfo;</div><div class='del'>-    DISPID dispID = DISPID_VALUE;</div><div class='del'>-    DISPID dispIDParam = DISPID_PROPERTYPUT;</div><div class='del'>-    USHORT wFlags = DISPATCH_PROPERTYPUT|DISPATCH_PROPERTYPUTREF;</div><div class='del'>-    DISPPARAMS dispParams;</div><div class='del'>-    VARIANTARG propertyValue[2];</div><div class='del'>-    OLECHAR* pBuf[1];</div><div class='del'>-    VALUE v;</div><div class='del'>-    LCID    lcid = LOCALE_SYSTEM_DEFAULT;</div><div class='del'>-    dispParams.rgdispidNamedArgs = &amp;dispIDParam;</div><div class='del'>-    dispParams.rgvarg = propertyValue;</div><div class='del'>-    dispParams.cNamedArgs = 1;</div><div class='del'>-    dispParams.cArgs = 1;</div><div class='del'>-</div><div class='del'>-    VariantInit(&amp;propertyValue[0]);</div><div class='del'>-    VariantInit(&amp;propertyValue[1]);</div><div class='del'>-    memset(&amp;excepinfo, 0, sizeof(excepinfo));</div><div class='del'>-</div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-</div><div class='del'>-    /* get ID from property name */</div><div class='del'>-    pBuf[0]  = ole_mb2wc(StringValuePtr(property), -1);</div><div class='del'>-    hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;GetIDsOfNames(pole-&gt;pDispatch, &amp;IID_NULL,</div><div class='del'>-                                                pBuf, 1, lcid, &amp;dispID);</div><div class='del'>-    SysFreeString(pBuf[0]);</div><div class='del'>-    pBuf[0] = NULL;</div><div class='del'>-</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, </div><div class='del'>-                  "unknown property or method: `%s'",</div><div class='del'>-                  StringValuePtr(property));</div><div class='del'>-    }</div><div class='del'>-    /* set property value */</div><div class='del'>-    ole_val2variant(value, &amp;propertyValue[0]);</div><div class='del'>-    hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;Invoke(pole-&gt;pDispatch, dispID, &amp;IID_NULL, </div><div class='del'>-                                         lcid, wFlags, &amp;dispParams,</div><div class='del'>-                                         NULL, &amp;excepinfo, &amp;argErr);</div><div class='del'>-</div><div class='del'>-    for(index = 0; index &lt; dispParams.cArgs; ++index) {</div><div class='del'>-        VariantClear(&amp;propertyValue[index]);</div><div class='del'>-    }</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        v = ole_excepinfo2msg(&amp;excepinfo);</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, StringValuePtr(v));</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'>- *     WIN32OLE#ole_free</div><div class='del'>- *</div><div class='del'>- *  invokes Release method of Dispatch interface of WIN32OLE object.</div><div class='del'>- *  Usually, you do not need to call this method because Release method</div><div class='del'>- *  called automatically when WIN32OLE object garbaged.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_free(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-    OLE_FREE(pole-&gt;pDispatch);</div><div class='del'>-    pole-&gt;pDispatch = NULL;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_each_sub(pEnumV)</div><div class='del'>-    VALUE pEnumV;</div><div class='del'>-{</div><div class='del'>-    VARIANT variant;</div><div class='del'>-    VALUE obj = Qnil;</div><div class='del'>-    IEnumVARIANT *pEnum = (IEnumVARIANT *)pEnumV;</div><div class='del'>-    VariantInit(&amp;variant);</div><div class='del'>-    while(pEnum-&gt;lpVtbl-&gt;Next(pEnum, 1, &amp;variant, NULL) == S_OK) {</div><div class='del'>-        obj = ole_variant2val(&amp;variant);</div><div class='del'>-        VariantClear(&amp;variant);</div><div class='del'>-        VariantInit(&amp;variant);</div><div class='del'>-        rb_yield(obj);</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'>-ole_ienum_free(pEnumV)</div><div class='del'>-    VALUE pEnumV;</div><div class='del'>-{</div><div class='del'>-    IEnumVARIANT *pEnum = (IEnumVARIANT *)pEnumV;</div><div class='del'>-    OLE_RELEASE(pEnum);</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'>- *     WIN32OLE#each {|i|...}</div><div class='del'>- * </div><div class='del'>- *  Iterates over each item of OLE collection which has IEnumVARIANT interface.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     book = excel.workbooks.add</div><div class='del'>- *     sheets = book.worksheets(1)</div><div class='del'>- *     cells = sheets.cells("A1:A5")</div><div class='del'>- *     cells.each do |cell|</div><div class='del'>- *       cell.value = 10</div><div class='del'>- *     end</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_each(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    LCID    lcid = LOCALE_SYSTEM_DEFAULT;</div><div class='del'>-</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-</div><div class='del'>-    unsigned int argErr;</div><div class='del'>-    EXCEPINFO excepinfo;</div><div class='del'>-    DISPPARAMS dispParams;</div><div class='del'>-    VARIANT result;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    IEnumVARIANT *pEnum = NULL;</div><div class='del'>-</div><div class='del'>-    VariantInit(&amp;result);</div><div class='del'>-    dispParams.rgvarg = NULL;</div><div class='del'>-    dispParams.rgdispidNamedArgs = NULL;</div><div class='del'>-    dispParams.cNamedArgs = 0;</div><div class='del'>-    dispParams.cArgs = 0;</div><div class='del'>-    memset(&amp;excepinfo, 0, sizeof(excepinfo));</div><div class='del'>-    </div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-    hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;Invoke(pole-&gt;pDispatch, DISPID_NEWENUM,</div><div class='del'>-                                         &amp;IID_NULL, lcid,</div><div class='del'>-                                         DISPATCH_METHOD | DISPATCH_PROPERTYGET,</div><div class='del'>-                                         &amp;dispParams, &amp;result,</div><div class='del'>-                                         &amp;excepinfo, &amp;argErr);</div><div class='del'>-</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        VariantClear(&amp;result);</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to get IEnum Interface");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (V_VT(&amp;result) == VT_UNKNOWN)</div><div class='del'>-        hr = V_UNKNOWN(&amp;result)-&gt;lpVtbl-&gt;QueryInterface(V_UNKNOWN(&amp;result),</div><div class='del'>-                                                        &amp;IID_IEnumVARIANT,</div><div class='del'>-                                                        (void**)&amp;pEnum);</div><div class='del'>-    else if (V_VT(&amp;result) == VT_DISPATCH)</div><div class='del'>-        hr = V_DISPATCH(&amp;result)-&gt;lpVtbl-&gt;QueryInterface(V_DISPATCH(&amp;result),</div><div class='del'>-                                                         &amp;IID_IEnumVARIANT,</div><div class='del'>-                                                         (void**)&amp;pEnum);</div><div class='del'>-    if (FAILED(hr) || !pEnum) {</div><div class='del'>-        VariantClear(&amp;result);</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "failed to get IEnum Interface");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    VariantClear(&amp;result);</div><div class='del'>-    rb_ensure(ole_each_sub, (VALUE)pEnum, ole_ienum_free, (VALUE)pEnum);</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'>- *     WIN32OLE#method_missing(id [,arg1, arg2, ...])</div><div class='del'>- * </div><div class='del'>- *  Calls WIN32OLE#invoke method.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_missing(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'>-    ID id;</div><div class='del'>-    char* mname;</div><div class='del'>-    int n;</div><div class='del'>-    id = rb_to_id(argv[0]);</div><div class='del'>-    mname = rb_id2name(id);</div><div class='del'>-    if(!mname) {</div><div class='del'>-        rb_raise(rb_eRuntimeError, "fail: unknown method or property");</div><div class='del'>-    }</div><div class='del'>-    n = strlen(mname);</div><div class='del'>-    if(mname[n-1] == '=') {</div><div class='del'>-        argv[0] = rb_str_new(mname, n-1);</div><div class='del'>-</div><div class='del'>-        return ole_propertyput(self, argv[0], argv[1]);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        argv[0] = rb_str_new2(mname);</div><div class='del'>-        return ole_invoke(argc, argv, self, DISPATCH_METHOD|DISPATCH_PROPERTYGET);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_sub(self, pOwnerTypeInfo, pTypeInfo, name)</div><div class='del'>-    VALUE self;</div><div class='del'>-    ITypeInfo *pOwnerTypeInfo;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    VALUE name;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    WORD i;</div><div class='del'>-    VALUE fname;</div><div class='del'>-    VALUE method = Qnil;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetTypeAttr");</div><div class='del'>-    }</div><div class='del'>-    for(i = 0; i &lt; pTypeAttr-&gt;cFuncs &amp;&amp; method == Qnil; i++) {</div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, i, &amp;pFuncDesc);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-             continue;</div><div class='del'>-</div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetDocumentation(pTypeInfo, pFuncDesc-&gt;memid,</div><div class='del'>-                                                 &amp;bstr, NULL, NULL, NULL);</div><div class='del'>-        if (FAILED(hr)) {</div><div class='del'>-            pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-        fname = WC2VSTR(bstr);</div><div class='del'>-        if (strcasecmp(StringValuePtr(name), StringValuePtr(fname)) == 0) {</div><div class='del'>-            olemethod_set_member(self, pTypeInfo, pOwnerTypeInfo, i, fname);</div><div class='del'>-            method = self;</div><div class='del'>-        }</div><div class='del'>-        pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-        pFuncDesc=NULL;</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return method;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-olemethod_from_typeinfo(self, pTypeInfo, name)</div><div class='del'>-    VALUE self;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    VALUE name;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    WORD i;</div><div class='del'>-    HREFTYPE href;</div><div class='del'>-    ITypeInfo *pRefTypeInfo;</div><div class='del'>-    VALUE method = Qnil;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetTypeAttr");</div><div class='del'>-    }</div><div class='del'>-    method = ole_method_sub(self, 0, pTypeInfo, name);</div><div class='del'>-    if (method != Qnil) {</div><div class='del'>-       return method;</div><div class='del'>-    }</div><div class='del'>-    for(i=0; i &lt; pTypeAttr-&gt;cImplTypes &amp;&amp; method == Qnil; i++){</div><div class='del'>-       hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeOfImplType(pTypeInfo, i, &amp;href);</div><div class='del'>-       if(FAILED(hr))</div><div class='del'>-           continue;</div><div class='del'>-       hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeInfo(pTypeInfo, href, &amp;pRefTypeInfo);</div><div class='del'>-       if (FAILED(hr))</div><div class='del'>-           continue;</div><div class='del'>-       method = ole_method_sub(self, pTypeInfo, pRefTypeInfo, name);</div><div class='del'>-       OLE_RELEASE(pRefTypeInfo);</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return method;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_methods_sub(pOwnerTypeInfo, pTypeInfo, methods, mask)</div><div class='del'>-    ITypeInfo *pOwnerTypeInfo;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    VALUE     methods;</div><div class='del'>-    int       mask;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    char *pstr;</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    VALUE method;</div><div class='del'>-    WORD i;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetTypeAttr");</div><div class='del'>-    }</div><div class='del'>-    for(i = 0; i &lt; pTypeAttr-&gt;cFuncs; i++) {</div><div class='del'>-        pstr = NULL;</div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, i, &amp;pFuncDesc);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-             continue;</div><div class='del'>-                 </div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetDocumentation(pTypeInfo, pFuncDesc-&gt;memid,</div><div class='del'>-                                                 &amp;bstr, NULL, NULL, NULL);</div><div class='del'>-        if (FAILED(hr)) {</div><div class='del'>-            pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-            continue;</div><div class='del'>-        }</div><div class='del'>-        if(pFuncDesc-&gt;invkind &amp; mask) {</div><div class='del'>-            method = folemethod_s_allocate(cWIN32OLE_METHOD);</div><div class='del'>-            olemethod_set_member(method, pTypeInfo, pOwnerTypeInfo, </div><div class='del'>-                                 i, WC2VSTR(bstr));</div><div class='del'>-            rb_ary_push(methods, method);</div><div class='del'>-        }</div><div class='del'>-        pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-        pFuncDesc=NULL;</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-</div><div class='del'>-    return methods;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_methods_from_typeinfo(pTypeInfo, mask)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    int mask;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    WORD i;</div><div class='del'>-    HREFTYPE href;</div><div class='del'>-    ITypeInfo *pRefTypeInfo;</div><div class='del'>-    VALUE methods = rb_ary_new();</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetTypeAttr");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ole_methods_sub(0, pTypeInfo, methods, mask);</div><div class='del'>-    for(i=0; i &lt; pTypeAttr-&gt;cImplTypes; i++){</div><div class='del'>-       hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeOfImplType(pTypeInfo, i, &amp;href);</div><div class='del'>-       if(FAILED(hr))</div><div class='del'>-           continue;</div><div class='del'>-       hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeInfo(pTypeInfo, href, &amp;pRefTypeInfo);</div><div class='del'>-       if (FAILED(hr))</div><div class='del'>-           continue;</div><div class='del'>-       ole_methods_sub(pTypeInfo, pRefTypeInfo, methods, mask);</div><div class='del'>-       OLE_RELEASE(pRefTypeInfo);</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return methods;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static HRESULT</div><div class='del'>-typeinfo_from_ole(pole, ppti)</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    ITypeInfo **ppti;</div><div class='del'>-{</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    VALUE type;</div><div class='del'>-    UINT i;</div><div class='del'>-    UINT count;</div><div class='del'>-    LCID    lcid = LOCALE_SYSTEM_DEFAULT;</div><div class='del'>-    HRESULT hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;GetTypeInfo(pole-&gt;pDispatch,</div><div class='del'>-                                                      0, lcid, &amp;pTypeInfo);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "failed to GetTypeInfo");</div><div class='del'>-    }</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetDocumentation(pTypeInfo,</div><div class='del'>-                                             -1,</div><div class='del'>-                                             &amp;bstr,</div><div class='del'>-                                             NULL, NULL, NULL);</div><div class='del'>-    type = WC2VSTR(bstr);</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetContainingTypeLib(pTypeInfo, &amp;pTypeLib, &amp;i);</div><div class='del'>-    OLE_RELEASE(pTypeInfo);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "failed to GetContainingTypeLib");</div><div class='del'>-    }</div><div class='del'>-    count = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfoCount(pTypeLib);</div><div class='del'>-    for (i = 0; i &lt; count; i++) {</div><div class='del'>-        hr = pTypeLib-&gt;lpVtbl-&gt;GetDocumentation(pTypeLib, i,</div><div class='del'>-                                                &amp;bstr, NULL, NULL, NULL);</div><div class='del'>-        if (SUCCEEDED(hr) &amp;&amp; rb_str_cmp(WC2VSTR(bstr), type) == 0) {</div><div class='del'>-            hr = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfo(pTypeLib, i, &amp;pTypeInfo);</div><div class='del'>-            if (SUCCEEDED(hr)) {</div><div class='del'>-                *ppti = pTypeInfo;</div><div class='del'>-                break;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE(pTypeLib);</div><div class='del'>-    return hr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_methods(self,mask)</div><div class='del'>-    VALUE self;</div><div class='del'>-    int mask;</div><div class='del'>-{</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE methods;</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-</div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-    methods = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    hr = typeinfo_from_ole(pole, &amp;pTypeInfo);</div><div class='del'>-    if(FAILED(hr))</div><div class='del'>-        return methods;</div><div class='del'>-    rb_ary_concat(methods, ole_methods_from_typeinfo(pTypeInfo, mask));</div><div class='del'>-    OLE_RELEASE(pTypeInfo);</div><div class='del'>-    return methods;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE#ole_methods</div><div class='del'>- * </div><div class='del'>- *  Returns the array of WIN32OLE_METHOD object. </div><div class='del'>- *  The element is OLE method of WIN32OLE object.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     methods = excel.ole_methods</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_methods( self )</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return ole_methods( self, INVOKE_FUNC | INVOKE_PROPERTYGET | INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE#ole_get_methods</div><div class='del'>- * </div><div class='del'>- *  Returns the array of WIN32OLE_METHOD object .</div><div class='del'>- *  The element of the array is property (gettable) of WIN32OLE object.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     properties = excel.ole_get_methods</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_get_methods( self )</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return ole_methods( self, INVOKE_PROPERTYGET);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE#ole_put_methods</div><div class='del'>- * </div><div class='del'>- *  Returns the array of WIN32OLE_METHOD object .</div><div class='del'>- *  The element of the array is property (settable) of WIN32OLE object.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     properties = excel.ole_put_methods</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_put_methods( self )</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return ole_methods( self, INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE#ole_func_methods</div><div class='del'>- * </div><div class='del'>- *  Returns the array of WIN32OLE_METHOD object .</div><div class='del'>- *  The element of the array is functional method of WIN32OLE object.</div><div class='del'>- *</div><div class='del'>- *     excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *     properties = excel.ole_func_methods</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_func_methods( self )</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return ole_methods( self, INVOKE_FUNC);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   call-seq:</div><div class='del'>- *      WIN32OLE#ole_obj_help</div><div class='del'>- * </div><div class='del'>- *   Returns WIN32OLE_TYPE object.</div><div class='del'>- *</div><div class='del'>- *      excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *      tobj = excel.ole_obj_help</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_obj_help( self )</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    unsigned int index;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    LCID  lcid = LOCALE_SYSTEM_DEFAULT;</div><div class='del'>-    VALUE type = Qnil;</div><div class='del'>-</div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-</div><div class='del'>-    hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;GetTypeInfo( pole-&gt;pDispatch, 0, lcid, &amp;pTypeInfo );</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "failed to GetTypeInfo");</div><div class='del'>-    }</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetContainingTypeLib( pTypeInfo, &amp;pTypeLib, &amp;index );</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "failed to GetContainingTypeLib");</div><div class='del'>-    }</div><div class='del'>-    hr = pTypeLib-&gt;lpVtbl-&gt;GetDocumentation( pTypeLib, index,</div><div class='del'>-                                             &amp;bstr, NULL, NULL, NULL);</div><div class='del'>-    if (SUCCEEDED(hr)) {</div><div class='del'>-        type = foletype_s_allocate(cWIN32OLE_TYPE);</div><div class='del'>-        oletype_set_member(type, pTypeInfo, WC2VSTR(bstr));</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE(pTypeLib);</div><div class='del'>-    OLE_RELEASE(pTypeInfo);</div><div class='del'>-</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static HRESULT</div><div class='del'>-ole_docinfo_from_type(pTypeInfo, name, helpstr, helpcontext, helpfile)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    BSTR *name;</div><div class='del'>-    BSTR *helpstr; </div><div class='del'>-    DWORD *helpcontext;</div><div class='del'>-    BSTR *helpfile;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    UINT i;</div><div class='del'>-</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetContainingTypeLib(pTypeInfo, &amp;pTypeLib, &amp;i);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        return hr;</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    hr = pTypeLib-&gt;lpVtbl-&gt;GetDocumentation(pTypeLib, i,</div><div class='del'>-                                            name, helpstr, </div><div class='del'>-                                            helpcontext, helpfile);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        OLE_RELEASE(pTypeLib);</div><div class='del'>-        return hr;</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE(pTypeLib);</div><div class='del'>-    return hr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_usertype2val(pTypeInfo, pTypeDesc, typedetails)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    TYPEDESC *pTypeDesc;</div><div class='del'>-    VALUE typedetails;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    ITypeInfo *pRefTypeInfo;</div><div class='del'>-    VALUE type = Qnil;</div><div class='del'>-</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeInfo(pTypeInfo, </div><div class='del'>-                                           V_UNION1(pTypeDesc, hreftype),</div><div class='del'>-                                           &amp;pRefTypeInfo);</div><div class='del'>-    if(FAILED(hr))</div><div class='del'>-        return Qnil;</div><div class='del'>-    hr = ole_docinfo_from_type(pRefTypeInfo, &amp;bstr, NULL, NULL, NULL);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        OLE_RELEASE(pRefTypeInfo);</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE(pRefTypeInfo);</div><div class='del'>-    type = WC2VSTR(bstr);</div><div class='del'>-    if(typedetails != Qnil)</div><div class='del'>-        rb_ary_push(typedetails, type);</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE ole_typedesc2val();</div><div class='del'>-static VALUE</div><div class='del'>-ole_ptrtype2val(pTypeInfo, pTypeDesc, typedetails) </div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    TYPEDESC *pTypeDesc;</div><div class='del'>-    VALUE typedetails;</div><div class='del'>-{    </div><div class='del'>-    TYPEDESC *p = pTypeDesc;</div><div class='del'>-    VALUE type = rb_str_new2("");</div><div class='del'>-    while(p-&gt;vt == VT_PTR || p-&gt;vt == VT_SAFEARRAY) {</div><div class='del'>-        p = V_UNION1(p, lptdesc);</div><div class='del'>-        if(strlen(StringValuePtr(type)) == 0) {</div><div class='del'>-           type = ole_typedesc2val(pTypeInfo, p, typedetails);</div><div class='del'>-        } else {</div><div class='del'>-           rb_str_cat(type, ",", 1);</div><div class='del'>-           rb_str_concat(type, ole_typedesc2val(pTypeInfo, p, typedetails));</div><div class='del'>-        }</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'>-ole_typedesc2val(pTypeInfo, pTypeDesc, typedetails)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    TYPEDESC *pTypeDesc;</div><div class='del'>-    VALUE typedetails;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    switch(pTypeDesc-&gt;vt) {</div><div class='del'>-    case VT_I2:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("I2"));</div><div class='del'>-        return rb_str_new2("I2");</div><div class='del'>-    case VT_I4:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("I4"));</div><div class='del'>-        return rb_str_new2("I4");</div><div class='del'>-    case VT_R4:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("R4"));</div><div class='del'>-        return rb_str_new2("R4");</div><div class='del'>-    case VT_R8:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("R8"));</div><div class='del'>-        return rb_str_new2("R8");</div><div class='del'>-    case VT_CY:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("CY"));</div><div class='del'>-        return rb_str_new2("CY");</div><div class='del'>-    case VT_DATE:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("DATE"));</div><div class='del'>-        return rb_str_new2("DATE");</div><div class='del'>-    case VT_BSTR:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("BSTR"));</div><div class='del'>-        return rb_str_new2("BSTR");</div><div class='del'>-    case VT_BOOL:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("BOOL"));</div><div class='del'>-        return rb_str_new2("BOOL");</div><div class='del'>-    case VT_VARIANT:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("VARIANT"));</div><div class='del'>-        return rb_str_new2("VARIANT");</div><div class='del'>-    case VT_DECIMAL:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("DECIMAL"));</div><div class='del'>-        return rb_str_new2("DECIMAL");</div><div class='del'>-    case VT_I1:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("I1"));</div><div class='del'>-        return rb_str_new2("I1");</div><div class='del'>-    case VT_UI1:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("UI1"));</div><div class='del'>-        return rb_str_new2("UI1");</div><div class='del'>-    case VT_UI2:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("UI2"));</div><div class='del'>-        return rb_str_new2("UI2");</div><div class='del'>-    case VT_UI4:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("UI4"));</div><div class='del'>-        return rb_str_new2("UI4");</div><div class='del'>-    case VT_I8:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("I8"));</div><div class='del'>-        return rb_str_new2("I8");</div><div class='del'>-    case VT_UI8:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("UI8"));</div><div class='del'>-        return rb_str_new2("UI8");</div><div class='del'>-    case VT_INT:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("INT"));</div><div class='del'>-        return rb_str_new2("INT");</div><div class='del'>-    case VT_UINT:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("UINT"));</div><div class='del'>-        return rb_str_new2("UINT");</div><div class='del'>-    case VT_VOID:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("VOID"));</div><div class='del'>-        return rb_str_new2("VOID");</div><div class='del'>-    case VT_HRESULT:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("HRESULT"));</div><div class='del'>-        return rb_str_new2("HRESULT");</div><div class='del'>-    case VT_PTR:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("PTR"));</div><div class='del'>-        return ole_ptrtype2val(pTypeInfo, pTypeDesc, typedetails);</div><div class='del'>-    case VT_SAFEARRAY:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("SAFEARRAY"));</div><div class='del'>-        return ole_ptrtype2val(pTypeInfo, pTypeDesc, typedetails);</div><div class='del'>-    case VT_CARRAY:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("CARRAY"));</div><div class='del'>-        return rb_str_new2("CARRAY");</div><div class='del'>-    case VT_USERDEFINED:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("USERDEFINED"));</div><div class='del'>-        str = ole_usertype2val(pTypeInfo, pTypeDesc, typedetails);</div><div class='del'>-        if (str != Qnil) {</div><div class='del'>-            return str;</div><div class='del'>-        }</div><div class='del'>-        return rb_str_new2("USERDEFINED");</div><div class='del'>-    case VT_UNKNOWN:</div><div class='del'>-        return rb_str_new2("UNKNOWN");</div><div class='del'>-    case VT_DISPATCH:</div><div class='del'>-        if(typedetails != Qnil)</div><div class='del'>-            rb_ary_push(typedetails, rb_str_new2("DISPATCH"));</div><div class='del'>-        return rb_str_new2("DISPATCH");</div><div class='del'>-    default:</div><div class='del'>-        str = rb_str_new2("Unknown Type ");</div><div class='del'>-        rb_str_concat(str, rb_fix2str(INT2FIX(pTypeDesc-&gt;vt), 10));</div><div class='del'>-        return str;</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'>- *      WIN32OLE#ole_method_help(method)</div><div class='del'>- * </div><div class='del'>- *   Returns WIN32OLE_METHOD object corresponding with method </div><div class='del'>- *   specified by 1st argument.</div><div class='del'>- *</div><div class='del'>- *      excel = WIN32OLE.new('Excel.Application')</div><div class='del'>- *      method = excel.ole_method_help('Quit')</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fole_method_help( self, cmdname )</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE cmdname;</div><div class='del'>-{</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    VALUE method, obj;</div><div class='del'>-    LCID    lcid = LOCALE_SYSTEM_DEFAULT;</div><div class='del'>-</div><div class='del'>-    Check_SafeStr(cmdname);</div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-    hr = typeinfo_from_ole(pole, &amp;pTypeInfo);</div><div class='del'>-    if(FAILED(hr))</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "failed to get ITypeInfo");</div><div class='del'>-    method = folemethod_s_allocate(cWIN32OLE_METHOD);</div><div class='del'>-    obj = olemethod_from_typeinfo(method, pTypeInfo, cmdname);</div><div class='del'>-    OLE_RELEASE(pTypeInfo);</div><div class='del'>-    if (obj == Qnil)</div><div class='del'>-        rb_raise(eWIN32OLE_RUNTIME_ERROR, "not found %s",</div><div class='del'>-                 StringValuePtr(cmdname));</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE#ole_activex_initialize() -&gt; Qnil</div><div class='del'>- *</div><div class='del'>- *  Initialize WIN32OLE object(ActiveX Control) by calling </div><div class='del'>- *  IPersistMemory::InitNew.</div><div class='del'>- *</div><div class='del'>- *  Before calling OLE method, some kind of the ActiveX controls </div><div class='del'>- *  created with MFC should be initialized by calling </div><div class='del'>- *  IPersistXXX::InitNew.</div><div class='del'>- *</div><div class='del'>- *  If and only if you recieved the exception "HRESULT error code:</div><div class='del'>- *  0x8000ffff catastrophic failure", try this method before</div><div class='del'>- *  invoking any ole_method.</div><div class='del'>- *</div><div class='del'>- *     obj = WIN32OLE.new("ProgID_or_GUID_of_ActiveX_Control")</div><div class='del'>- *     obj.ole_activex_initialize</div><div class='del'>- *     obj.method(...)</div><div class='del'>- *  </div><div class='del'>- */ </div><div class='del'>-static VALUE</div><div class='del'>-fole_activex_initialize(self)</div><div class='del'>-    VALUE self; </div><div class='del'>-{</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    IPersistMemory *pPersistMemory;</div><div class='del'>-</div><div class='del'>-    HRESULT hr = S_OK;</div><div class='del'>-</div><div class='del'>-    OLEData_Get_Struct(self, pole);</div><div class='del'>-</div><div class='del'>-    hr = pole-&gt;pDispatch-&gt;lpVtbl-&gt;QueryInterface(pole-&gt;pDispatch, &amp;IID_IPersistMemory,</div><div class='del'>-                                                 (void **)&amp;pPersistMemory);</div><div class='del'>-    if (SUCCEEDED(hr)) {</div><div class='del'>-        hr = pPersistMemory-&gt;lpVtbl-&gt;InitNew(pPersistMemory);</div><div class='del'>-        OLE_RELEASE(pPersistMemory);</div><div class='del'>-        if (SUCCEEDED(hr)) {</div><div class='del'>-            return Qnil;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "fail to initialize ActiveX control");</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'>- *      WIN32OLE_TYPE.ole_classes(typelib)</div><div class='del'>- * </div><div class='del'>- *   Returns array of WIN32OLE_TYPE objects defined by the &lt;i&gt;typelib&lt;/i&gt; type library.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_s_ole_classes(self, typelib)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE typelib;</div><div class='del'>-{</div><div class='del'>-    VALUE file, classes;</div><div class='del'>-    OLECHAR * pbuf;</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    classes = rb_ary_new();</div><div class='del'>-    if(TYPE(typelib) == T_STRING) {</div><div class='del'>-        file = typelib_file(typelib);</div><div class='del'>-        if (file == Qnil) {</div><div class='del'>-            file = typelib;</div><div class='del'>-        }</div><div class='del'>-        pbuf = ole_mb2wc(StringValuePtr(file), -1);</div><div class='del'>-        hr = LoadTypeLibEx(pbuf, REGKIND_NONE, &amp;pTypeLib);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-          ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to LoadTypeLibEx");</div><div class='del'>-        SysFreeString(pbuf);</div><div class='del'>-        ole_classes_from_typelib(pTypeLib, classes);</div><div class='del'>-        OLE_RELEASE(pTypeLib);</div><div class='del'>-    } else {</div><div class='del'>-        rb_raise(rb_eTypeError, "1st argument should be TypeLib string");</div><div class='del'>-    }</div><div class='del'>-    return classes;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE.typelibs</div><div class='del'>- * </div><div class='del'>- *  Returns array of type libraries.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_s_typelibs(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    HKEY htypelib, hclsid;</div><div class='del'>-    double fversion;</div><div class='del'>-    DWORD i, j;</div><div class='del'>-    LONG err;</div><div class='del'>-    VALUE clsid;</div><div class='del'>-    VALUE ver;</div><div class='del'>-    VALUE v = Qnil;</div><div class='del'>-    VALUE typelibs = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    err = reg_open_key(HKEY_CLASSES_ROOT, "TypeLib", &amp;htypelib);</div><div class='del'>-    if(err != ERROR_SUCCESS) {</div><div class='del'>-        return typelibs;</div><div class='del'>-    }</div><div class='del'>-    for(i = 0; ; i++) {</div><div class='del'>-        clsid = reg_enum_key(htypelib, i);</div><div class='del'>-        if (clsid == Qnil)</div><div class='del'>-            break;</div><div class='del'>-        err = reg_open_vkey(htypelib, clsid, &amp;hclsid);</div><div class='del'>-        if (err != ERROR_SUCCESS)</div><div class='del'>-            continue;</div><div class='del'>-        fversion = 0;</div><div class='del'>-        for(j = 0; ; j++) {</div><div class='del'>-            ver = reg_enum_key(hclsid, j);</div><div class='del'>-            if (ver == Qnil)</div><div class='del'>-                break;</div><div class='del'>-            if (fversion &gt; atof(StringValuePtr(ver)))</div><div class='del'>-                continue;</div><div class='del'>-            fversion = atof(StringValuePtr(ver));</div><div class='del'>-            if ( (v = reg_get_val(hclsid, StringValuePtr(ver))) != Qnil ) {</div><div class='del'>-                rb_ary_push(typelibs, v);</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-        RegCloseKey(hclsid);</div><div class='del'>-    }</div><div class='del'>-    RegCloseKey(htypelib);</div><div class='del'>-    return typelibs;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE.progids</div><div class='del'>- * </div><div class='del'>- *  Returns array of ProgID.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_s_progids(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    HKEY hclsids, hclsid;</div><div class='del'>-    DWORD i;</div><div class='del'>-    LONG err;</div><div class='del'>-    VALUE clsid;</div><div class='del'>-    VALUE v = rb_str_new2("");</div><div class='del'>-    VALUE progids = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    err = reg_open_key(HKEY_CLASSES_ROOT, "CLSID", &amp;hclsids);</div><div class='del'>-    if(err != ERROR_SUCCESS) {</div><div class='del'>-        return progids;</div><div class='del'>-    }</div><div class='del'>-    for(i = 0; ; i++) {</div><div class='del'>-        clsid = reg_enum_key(hclsids, i);</div><div class='del'>-        if (clsid == Qnil)</div><div class='del'>-            break;</div><div class='del'>-        err = reg_open_vkey(hclsids, clsid, &amp;hclsid);</div><div class='del'>-        if (err != ERROR_SUCCESS)</div><div class='del'>-            continue;</div><div class='del'>-        if ((v = reg_get_val(hclsid, "ProgID")) != Qnil) </div><div class='del'>-            rb_ary_push(progids, v);</div><div class='del'>-        if ((v = reg_get_val(hclsid, "VersionIndependentProgID")) != Qnil)</div><div class='del'>-            rb_ary_push(progids, v);</div><div class='del'>-        RegCloseKey(hclsid);</div><div class='del'>-    }</div><div class='del'>-    RegCloseKey(hclsids);</div><div class='del'>-    return progids;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-foletype_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *poletype;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    ole_initialize();</div><div class='del'>-    obj = Data_Make_Struct(klass,struct oletypedata,0,oletype_free,poletype);</div><div class='del'>-    poletype-&gt;pTypeInfo = NULL;</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-oletype_set_member(self, pTypeInfo, name)</div><div class='del'>-    VALUE self;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    VALUE name;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    rb_ivar_set(self, rb_intern("name"), name);</div><div class='del'>-    ptype-&gt;pTypeInfo = pTypeInfo;</div><div class='del'>-    if(pTypeInfo) OLE_ADDREF(pTypeInfo);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-oleclass_from_typelib(self, pTypeLib, oleclass)</div><div class='del'>-    VALUE self;</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    VALUE oleclass;</div><div class='del'>-{</div><div class='del'>-    </div><div class='del'>-    long count;</div><div class='del'>-    int i;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    VALUE typelib;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-</div><div class='del'>-    VALUE found = Qfalse;</div><div class='del'>-  </div><div class='del'>-    count = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfoCount(pTypeLib);</div><div class='del'>-    for (i = 0; i &lt; count &amp;&amp; found == Qfalse; i++) {</div><div class='del'>-        hr = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfo(pTypeLib, i, &amp;pTypeInfo);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-            continue;</div><div class='del'>-        hr = pTypeLib-&gt;lpVtbl-&gt;GetDocumentation(pTypeLib, i,</div><div class='del'>-                                                &amp;bstr, NULL, NULL, NULL);</div><div class='del'>-        if (FAILED(hr)) </div><div class='del'>-            continue;</div><div class='del'>-        typelib = WC2VSTR(bstr);</div><div class='del'>-        if (rb_str_cmp(oleclass, typelib) == 0) {</div><div class='del'>-            oletype_set_member(self, pTypeInfo, typelib);</div><div class='del'>-            found = Qtrue;</div><div class='del'>-        }</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-    }</div><div class='del'>-    return found;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: WIN32OLE_TYPE</div><div class='del'>- *</div><div class='del'>- *   &lt;code&gt;WIN32OLE_TYPE&lt;/code&gt; objects represent OLE type libarary information.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE.new(typelib, ole_class) -&gt; WIN32OLE_TYPE object</div><div class='del'>- *</div><div class='del'>- *  Returns a new WIN32OLE_TYPE object.</div><div class='del'>- *  The first argument &lt;i&gt;typelib&lt;/i&gt; specifies OLE type library name.</div><div class='del'>- *  The second argument specifies OLE class name.</div><div class='del'>- *</div><div class='del'>- *      WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') </div><div class='del'>- *          # =&gt; WIN32OLE_TYPE object of Application class of Excel. </div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_initialize(self, typelib, oleclass)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE typelib;</div><div class='del'>-    VALUE oleclass;</div><div class='del'>-{</div><div class='del'>-    VALUE file;</div><div class='del'>-    OLECHAR * pbuf;</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-</div><div class='del'>-    Check_SafeStr(oleclass);</div><div class='del'>-    Check_SafeStr(typelib);</div><div class='del'>-    file = typelib_file(typelib);</div><div class='del'>-    if (file == Qnil) {</div><div class='del'>-        file = typelib;</div><div class='del'>-    }</div><div class='del'>-    pbuf = ole_mb2wc(StringValuePtr(file), -1);</div><div class='del'>-    hr = LoadTypeLibEx(pbuf, REGKIND_NONE, &amp;pTypeLib);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to LoadTypeLibEx");</div><div class='del'>-    SysFreeString(pbuf);</div><div class='del'>-    if (oleclass_from_typelib(self, pTypeLib, oleclass) == Qfalse) {</div><div class='del'>-        OLE_RELEASE(pTypeLib);</div><div class='del'>-        rb_raise(eWIN32OLE_RUNTIME_ERROR, "not found `%s` in `%s`",</div><div class='del'>-                 StringValuePtr(oleclass), StringValuePtr(typelib));</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE(pTypeLib);</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'>- *    WIN32OLE_TYPE#name #=&gt; OLE type name</div><div class='del'>- *</div><div class='del'>- * Returns OLE type name.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') </div><div class='del'>- *    puts tobj.name  # =&gt; Application</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_name(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_ivar_get(self, rb_intern("name"));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_ole_type(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    VALUE type = Qnil;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if(FAILED(hr)){</div><div class='del'>-        return type;</div><div class='del'>-    }</div><div class='del'>-    switch(pTypeAttr-&gt;typekind) {</div><div class='del'>-    case TKIND_ENUM:</div><div class='del'>-        type = rb_str_new2("Enum");</div><div class='del'>-        break;</div><div class='del'>-    case TKIND_RECORD:</div><div class='del'>-        type = rb_str_new2("Record");</div><div class='del'>-        break;</div><div class='del'>-    case TKIND_MODULE:</div><div class='del'>-        type = rb_str_new2("Module");</div><div class='del'>-        break;</div><div class='del'>-    case TKIND_INTERFACE:</div><div class='del'>-        type = rb_str_new2("Interface");</div><div class='del'>-        break;</div><div class='del'>-    case TKIND_DISPATCH:</div><div class='del'>-        type = rb_str_new2("Dispatch");</div><div class='del'>-        break;</div><div class='del'>-    case TKIND_COCLASS:</div><div class='del'>-        type = rb_str_new2("Class");</div><div class='del'>-        break;</div><div class='del'>-    case TKIND_ALIAS:</div><div class='del'>-        type = rb_str_new2("Alias");</div><div class='del'>-        break;</div><div class='del'>-    case TKIND_UNION:</div><div class='del'>-        type = rb_str_new2("Union");</div><div class='del'>-        break;</div><div class='del'>-    case TKIND_MAX:</div><div class='del'>-        type = rb_str_new2("Max");</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        type = Qnil;</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE#ole_type #=&gt; OLE type string.</div><div class='del'>- * </div><div class='del'>- *  returns type of OLE class.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') </div><div class='del'>- *    puts tobj.ole_type  # =&gt; Class</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_ole_type(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_ole_type(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_guid(pTypeInfo) </div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    int len;</div><div class='del'>-    OLECHAR bstr[80];</div><div class='del'>-    VALUE guid = Qnil;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) </div><div class='del'>-        return guid;</div><div class='del'>-    len = StringFromGUID2(&amp;pTypeAttr-&gt;guid, bstr, sizeof(bstr)/sizeof(OLECHAR));</div><div class='del'>-    if (len &gt; 3) {</div><div class='del'>-        guid = ole_wc2vstr(bstr, FALSE);</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return guid;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE#guid  #=&gt; GUID</div><div class='del'>- * </div><div class='del'>- *  Returns GUID.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application') </div><div class='del'>- *    puts tobj.guid  # =&gt; {00024500-0000-0000-C000-000000000046}</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_guid(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_guid(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_progid(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    OLECHAR *pbuf;</div><div class='del'>-    VALUE progid = Qnil;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) </div><div class='del'>-        return progid;</div><div class='del'>-    hr = ProgIDFromCLSID(&amp;pTypeAttr-&gt;guid, &amp;pbuf);</div><div class='del'>-    if (SUCCEEDED(hr)) { </div><div class='del'>-        progid = ole_wc2vstr(pbuf, FALSE);</div><div class='del'>-        CoTaskMemFree(pbuf);</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return progid;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    WIN32OLE_TYPE#progid  #=&gt; ProgID</div><div class='del'>- * </div><div class='del'>- * Returns ProgID if it exists. If not found, then returns nil.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application')</div><div class='del'>- *    puts tobj.progid  # =&gt;   Excel.Application.9</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_progid(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_progid(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_visible(pTypeInfo) </div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    VALUE visible;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) </div><div class='del'>-        return Qtrue;</div><div class='del'>-    if (pTypeAttr-&gt;wTypeFlags &amp; (TYPEFLAG_FHIDDEN | TYPEFLAG_FRESTRICTED)) {</div><div class='del'>-        visible = Qfalse;</div><div class='del'>-    } else {</div><div class='del'>-        visible = Qtrue;</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return visible;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    WIN32OLE_TYPE#visible  #=&gt; true or false</div><div class='del'>- * </div><div class='del'>- *  Returns true if the OLE class is public.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Application')</div><div class='del'>- *    puts tobj.visible  # =&gt; true</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_visible(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_visible(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_major_version(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    VALUE ver;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetTypeAttr");</div><div class='del'>-    ver = INT2FIX(pTypeAttr-&gt;wMajorVerNum);</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return ver;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE#major_version</div><div class='del'>- * </div><div class='del'>- *  Returns major version.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Word 10.0 Object Library', 'Documents')</div><div class='del'>- *     puts tobj.major_version # =&gt; 8</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_major_version(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_major_version(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_minor_version(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    VALUE ver;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetTypeAttr");</div><div class='del'>-    ver = INT2FIX(pTypeAttr-&gt;wMinorVerNum);</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return ver;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    WIN32OLE_TYPE#minor_version #=&gt; OLE minor version</div><div class='del'>- * </div><div class='del'>- *  Returns minor version.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Word 10.0 Object Library', 'Documents')</div><div class='del'>- *     puts tobj.minor_version # =&gt; 2</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_minor_version(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_minor_version(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_typekind(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    VALUE typekind;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetTypeAttr");</div><div class='del'>-    typekind = INT2FIX(pTypeAttr-&gt;typekind);</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return typekind;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    WIN32OLE_TYPE#typekind #=&gt; number of type.</div><div class='del'>- * </div><div class='del'>- *  Returns number which represents type.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Word 10.0 Object Library', 'Documents')</div><div class='del'>- *    puts tobj.typekind # =&gt; 4</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-foletype_typekind(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_typekind(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_helpstring(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR bhelpstr;</div><div class='del'>-    hr = ole_docinfo_from_type(pTypeInfo, NULL, &amp;bhelpstr, NULL, NULL);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return WC2VSTR(bhelpstr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    WIN32OLE_TYPE#helpstring #=&gt; help string.</div><div class='del'>- * </div><div class='del'>- *  Returns help string.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Internet Controls', 'IWebBrowser')</div><div class='del'>- *    puts tobj.helpstring # =&gt; Web Browser interface</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-foletype_helpstring(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_helpstring(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_src_type(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    VALUE alias = Qnil;</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return alias;</div><div class='del'>-    if(pTypeAttr-&gt;typekind != TKIND_ALIAS) {</div><div class='del'>-        OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-        return alias;</div><div class='del'>-    }</div><div class='del'>-    alias = ole_typedesc2val(pTypeInfo, &amp;(pTypeAttr-&gt;tdescAlias), Qnil);</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return alias;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE#src_type #=&gt; OLE source class</div><div class='del'>- * </div><div class='del'>- *  Returns source class when the OLE class is 'Alias'.</div><div class='del'>- *     tobj =  WIN32OLE_TYPE.new('Microsoft Office 9.0 Object Library', 'MsoRGBType')</div><div class='del'>- *     puts tobj.src_type # =&gt; I4</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_src_type(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_src_type(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_helpfile(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR bhelpfile;</div><div class='del'>-    hr = ole_docinfo_from_type(pTypeInfo, NULL, NULL, NULL, &amp;bhelpfile);</div><div class='del'>-    if(FAILED(hr)) {</div><div class='del'>-        return Qnil;</div><div class='del'>-    }</div><div class='del'>-    return WC2VSTR(bhelpfile);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE#helpfile</div><div class='del'>- * </div><div class='del'>- *  Returns helpfile path. If helpfile is not found, then returns nil.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Worksheet')</div><div class='del'>- *     puts tobj.helpfile # =&gt; C:\...\VBAXL9.CHM</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_helpfile(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_helpfile(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_type_helpcontext(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    DWORD helpcontext;</div><div class='del'>-    hr = ole_docinfo_from_type(pTypeInfo, NULL, NULL, </div><div class='del'>-                               &amp;helpcontext, NULL);</div><div class='del'>-    if(FAILED(hr))</div><div class='del'>-        return Qnil;</div><div class='del'>-    return INT2FIX(helpcontext);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE#helpcontext</div><div class='del'>- * </div><div class='del'>- *  Returns helpcontext. If helpcontext is not found, then returns nil.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Worksheet')</div><div class='del'>- *     puts tobj.helpfile # =&gt; 131185</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_helpcontext(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_type_helpcontext(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_variables(pTypeInfo)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    WORD i;</div><div class='del'>-    UINT len;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    char *pstr;</div><div class='del'>-    VARDESC *pVarDesc;</div><div class='del'>-    struct olevariabledata *pvar;</div><div class='del'>-    VALUE var;</div><div class='del'>-    VALUE variables = rb_ary_new();</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetTypeAttr");</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    for(i = 0; i &lt; pTypeAttr-&gt;cVars; i++) {</div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetVarDesc(pTypeInfo, i, &amp;pVarDesc);</div><div class='del'>-        if(FAILED(hr))</div><div class='del'>-            continue;</div><div class='del'>-        len = 0;</div><div class='del'>-        pstr = NULL;</div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetNames(pTypeInfo, pVarDesc-&gt;memid, &amp;bstr,</div><div class='del'>-                                         1, &amp;len);</div><div class='del'>-        if(FAILED(hr) || len == 0 || !bstr)</div><div class='del'>-            continue;</div><div class='del'>-</div><div class='del'>-        var = Data_Make_Struct(cWIN32OLE_VARIABLE, struct olevariabledata,</div><div class='del'>-                               0,olevariable_free,pvar);</div><div class='del'>-        pvar-&gt;pTypeInfo = pTypeInfo;</div><div class='del'>-        OLE_ADDREF(pTypeInfo);</div><div class='del'>-        pvar-&gt;index = i;</div><div class='del'>-        rb_ivar_set(var, rb_intern("name"), WC2VSTR(bstr));</div><div class='del'>-        rb_ary_push(variables, var);</div><div class='del'>-</div><div class='del'>-        pTypeInfo-&gt;lpVtbl-&gt;ReleaseVarDesc(pTypeInfo, pVarDesc);</div><div class='del'>-        pVarDesc = NULL;</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return variables;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE#variables</div><div class='del'>- * </div><div class='del'>- *  Returns array of WIN32OLE_VARIABLE objects which represent variables </div><div class='del'>- *  defined in OLE class.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')</div><div class='del'>- *     vars = tobj.variables</div><div class='del'>- *     vars.each do |v|</div><div class='del'>- *       puts "#{v.name} = #{v.value}"</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *     The result of above sample script is follows:</div><div class='del'>- *       xlChart = -4109</div><div class='del'>- *       xlDialogSheet = -4116</div><div class='del'>- *       xlExcel4IntlMacroSheet = 4</div><div class='del'>- *       xlExcel4MacroSheet = 3</div><div class='del'>- *       xlWorksheet = -4167</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_variables(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_variables(ptype-&gt;pTypeInfo);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_TYPE#ole_methods # the array of WIN32OLE_METHOD objects.</div><div class='del'>- * </div><div class='del'>- *  Returns array of WIN32OLE_METHOD objects which represent OLE method defined in </div><div class='del'>- *  OLE type library.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Worksheet')</div><div class='del'>- *    methods = tobj.ole_methods.collect{|m|</div><div class='del'>- *      m.name</div><div class='del'>- *    }                                       </div><div class='del'>- *    # =&gt; ['Activate', 'Copy', 'Delete',....]</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foletype_methods(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'>-    struct oletypedata *ptype;</div><div class='del'>-    Data_Get_Struct(self, struct oletypedata, ptype);</div><div class='del'>-    return ole_methods_from_typeinfo(ptype-&gt;pTypeInfo, INVOKE_FUNC | INVOKE_PROPERTYGET | INVOKE_PROPERTYPUT | INVOKE_PROPERTYPUTREF);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: WIN32OLE_VARIABLE</div><div class='del'>- *</div><div class='del'>- *   &lt;code&gt;WIN32OLE_VARIABLE&lt;/code&gt; objects represent OLE variable information.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_VARIABLE#name</div><div class='del'>- * </div><div class='del'>- *  Returns the name of variable.</div><div class='del'>- *</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')</div><div class='del'>- *     variables = tobj.variables</div><div class='del'>- *     variables.each do |variable|</div><div class='del'>- *       puts "#{variable.name}"</div><div class='del'>- *     end</div><div class='del'>- *</div><div class='del'>- *     The result of above script is following:</div><div class='del'>- *       xlChart</div><div class='del'>- *       xlDialogSheet</div><div class='del'>- *       xlExcel4IntlMacroSheet</div><div class='del'>- *       xlExcel4MacroSheet</div><div class='del'>- *       xlWorksheet</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folevariable_name(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_ivar_get(self, rb_intern("name"));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_variable_ole_type(pTypeInfo, var_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT var_index;</div><div class='del'>-{</div><div class='del'>-    VARDESC *pVarDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE type;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetVarDesc(pTypeInfo, var_index, &amp;pVarDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetVarDesc");</div><div class='del'>-    type = ole_typedesc2val(pTypeInfo, &amp;(pVarDesc-&gt;elemdescVar.tdesc), Qnil);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseVarDesc(pTypeInfo, pVarDesc);</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   call-seq:</div><div class='del'>- *      WIN32OLE_VARIABLE#ole_type</div><div class='del'>- * </div><div class='del'>- *   Returns OLE type string.</div><div class='del'>- *</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')</div><div class='del'>- *     variables = tobj.variables</div><div class='del'>- *     variables.each do |variable|</div><div class='del'>- *       puts "#{variable.ole_type} #{variable.name}"</div><div class='del'>- *     end</div><div class='del'>- *</div><div class='del'>- *     The result of above script is following:</div><div class='del'>- *       INT xlChart</div><div class='del'>- *       INT xlDialogSheet</div><div class='del'>- *       INT xlExcel4IntlMacroSheet</div><div class='del'>- *       INT xlExcel4MacroSheet</div><div class='del'>- *       INT xlWorksheet</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folevariable_ole_type(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olevariabledata *pvar;</div><div class='del'>-    Data_Get_Struct(self, struct olevariabledata, pvar);</div><div class='del'>-    return ole_variable_ole_type(pvar-&gt;pTypeInfo, pvar-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_variable_ole_type_detail(pTypeInfo, var_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT var_index;</div><div class='del'>-{</div><div class='del'>-    VARDESC *pVarDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE type = rb_ary_new();</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetVarDesc(pTypeInfo, var_index, &amp;pVarDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetVarDesc");</div><div class='del'>-    ole_typedesc2val(pTypeInfo, &amp;(pVarDesc-&gt;elemdescVar.tdesc), type);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseVarDesc(pTypeInfo, pVarDesc);</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_VARIABLE#ole_type_detail</div><div class='del'>- * </div><div class='del'>- *  Returns detail information of type. The information is array of type.</div><div class='del'>- *</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('DirectX 7 for Visual Basic Type Library', 'D3DCLIPSTATUS')</div><div class='del'>- *     variable = tobj.variables.find {|variable| variable.name == 'lFlags'}</div><div class='del'>- *     tdetail  = variable.ole_type_detail</div><div class='del'>- *     p tdetail # =&gt; ["USERDEFINED", "CONST_D3DCLIPSTATUSFLAGS"]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folevariable_ole_type_detail(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olevariabledata *pvar;</div><div class='del'>-    Data_Get_Struct(self, struct olevariabledata, pvar);</div><div class='del'>-    return ole_variable_ole_type_detail(pvar-&gt;pTypeInfo, pvar-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_variable_value(pTypeInfo, var_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT var_index;</div><div class='del'>-{</div><div class='del'>-    VARDESC *pVarDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE val = Qnil;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetVarDesc(pTypeInfo, var_index, &amp;pVarDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return Qnil;</div><div class='del'>-    if(pVarDesc-&gt;varkind == VAR_CONST)</div><div class='del'>-        val = ole_variant2val(V_UNION1(pVarDesc, lpvarValue));</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseVarDesc(pTypeInfo, pVarDesc);</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_VARIABLE#value</div><div class='del'>- * </div><div class='del'>- *  Returns value if value is exists. If the value does not exist, </div><div class='del'>- *  this method returns nil.</div><div class='del'>- *</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')</div><div class='del'>- *     variables = tobj.variables</div><div class='del'>- *     variables.each do |variable|</div><div class='del'>- *       puts "#{variable.name} = #{variable.value}"</div><div class='del'>- *     end</div><div class='del'>- *</div><div class='del'>- *     The result of above script is following:</div><div class='del'>- *       xlChart = -4109</div><div class='del'>- *       xlDialogSheet = -4116</div><div class='del'>- *       xlExcel4IntlMacroSheet = 4</div><div class='del'>- *       xlExcel4MacroSheet = 3</div><div class='del'>- *       xlWorksheet = -4167</div><div class='del'>- *</div><div class='del'>- */    </div><div class='del'>-static VALUE</div><div class='del'>-folevariable_value(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olevariabledata *pvar;</div><div class='del'>-    Data_Get_Struct(self, struct olevariabledata, pvar);</div><div class='del'>-    return ole_variable_value(pvar-&gt;pTypeInfo, pvar-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_variable_visible(pTypeInfo, var_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT var_index;</div><div class='del'>-{</div><div class='del'>-    VARDESC *pVarDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE visible = Qfalse;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetVarDesc(pTypeInfo, var_index, &amp;pVarDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return visible;</div><div class='del'>-    if (!(pVarDesc-&gt;wVarFlags &amp; (VARFLAG_FHIDDEN |</div><div class='del'>-                                 VARFLAG_FRESTRICTED |</div><div class='del'>-                                 VARFLAG_FNONBROWSABLE))) {</div><div class='del'>-        visible = Qtrue;</div><div class='del'>-    }</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseVarDesc(pTypeInfo, pVarDesc);</div><div class='del'>-    return visible;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_VARIABLE#visible?</div><div class='del'>- * </div><div class='del'>- *  Returns true if the variable is public.</div><div class='del'>- *</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')</div><div class='del'>- *     variables = tobj.variables</div><div class='del'>- *     variables.each do |variable|</div><div class='del'>- *       puts "#{variable.name} #{variable.visible?}"</div><div class='del'>- *     end</div><div class='del'>- *</div><div class='del'>- *     The result of above script is following:</div><div class='del'>- *       xlChart true</div><div class='del'>- *       xlDialogSheet true</div><div class='del'>- *       xlExcel4IntlMacroSheet true</div><div class='del'>- *       xlExcel4MacroSheet true</div><div class='del'>- *       xlWorksheet true</div><div class='del'>- *       </div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folevariable_visible(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olevariabledata *pvar;</div><div class='del'>-    Data_Get_Struct(self, struct olevariabledata, pvar);</div><div class='del'>-    return ole_variable_visible(pvar-&gt;pTypeInfo, pvar-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_variable_kind(pTypeInfo, var_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT var_index;</div><div class='del'>-{</div><div class='del'>-    VARDESC *pVarDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE kind = rb_str_new2("UNKNOWN");</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetVarDesc(pTypeInfo, var_index, &amp;pVarDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return kind;</div><div class='del'>-    switch(pVarDesc-&gt;varkind) {</div><div class='del'>-    case VAR_PERINSTANCE:</div><div class='del'>-        kind = rb_str_new2("PERINSTANCE");</div><div class='del'>-        break;</div><div class='del'>-    case VAR_STATIC:</div><div class='del'>-        kind = rb_str_new2("STATIC");</div><div class='del'>-        break;</div><div class='del'>-    case VAR_CONST:</div><div class='del'>-        kind = rb_str_new2("CONSTANT");</div><div class='del'>-        break;</div><div class='del'>-    case VAR_DISPATCH:</div><div class='del'>-        kind = rb_str_new2("DISPATCH");</div><div class='del'>-        break;</div><div class='del'>-    default:</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseVarDesc(pTypeInfo, pVarDesc);</div><div class='del'>-    return kind;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   WIN32OLE_VARIABLE#variable_kind</div><div class='del'>- * </div><div class='del'>- * Returns variable kind string.</div><div class='del'>- *</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')</div><div class='del'>- *    variables = tobj.variables</div><div class='del'>- *    variables.each do |variable|</div><div class='del'>- *      puts "#{variable.name} #{variable.variable_kind}"</div><div class='del'>- *    end</div><div class='del'>- *</div><div class='del'>- *    The result of above script is following:</div><div class='del'>- *      xlChart CONSTANT</div><div class='del'>- *      xlDialogSheet CONSTANT</div><div class='del'>- *      xlExcel4IntlMacroSheet CONSTANT</div><div class='del'>- *      xlExcel4MacroSheet CONSTANT</div><div class='del'>- *      xlWorksheet CONSTANT</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folevariable_variable_kind(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olevariabledata *pvar;</div><div class='del'>-    Data_Get_Struct(self, struct olevariabledata, pvar);</div><div class='del'>-    return ole_variable_kind(pvar-&gt;pTypeInfo, pvar-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_variable_varkind(pTypeInfo, var_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT var_index;</div><div class='del'>-{</div><div class='del'>-    VARDESC *pVarDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE kind = Qnil;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetVarDesc(pTypeInfo, var_index, &amp;pVarDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return kind;</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseVarDesc(pTypeInfo, pVarDesc);</div><div class='del'>-    kind = INT2FIX(pVarDesc-&gt;varkind);    </div><div class='del'>-    return kind;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_VARIABLE#varkind</div><div class='del'>- * </div><div class='del'>- *  Returns the number which represents variable kind.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'XlSheetType')</div><div class='del'>- *    variables = tobj.variables</div><div class='del'>- *    variables.each do |variable|</div><div class='del'>- *      puts "#{variable.name} #{variable.varkind}"</div><div class='del'>- *    end</div><div class='del'>- *</div><div class='del'>- *    The result of above script is following:</div><div class='del'>- *       xlChart 2</div><div class='del'>- *       xlDialogSheet 2</div><div class='del'>- *       xlExcel4IntlMacroSheet 2</div><div class='del'>- *       xlExcel4MacroSheet 2</div><div class='del'>- *       xlWorksheet 2</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folevariable_varkind(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olevariabledata *pvar;</div><div class='del'>-    Data_Get_Struct(self, struct olevariabledata, pvar);</div><div class='del'>-    return ole_variable_varkind(pvar-&gt;pTypeInfo, pvar-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: WIN32OLE_METHOD</div><div class='del'>- *</div><div class='del'>- *   &lt;code&gt;WIN32OLE_METHOD&lt;/code&gt; objects represent OLE method information.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-olemethod_set_member(self, pTypeInfo, pOwnerTypeInfo, index, name)</div><div class='del'>-    VALUE self;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    ITypeInfo *pOwnerTypeInfo;</div><div class='del'>-    int index;</div><div class='del'>-    VALUE name;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    pmethod-&gt;pTypeInfo = pTypeInfo;</div><div class='del'>-    OLE_ADDREF(pTypeInfo);</div><div class='del'>-    pmethod-&gt;pOwnerTypeInfo = pOwnerTypeInfo;</div><div class='del'>-    if(pOwnerTypeInfo) OLE_ADDREF(pOwnerTypeInfo);</div><div class='del'>-    pmethod-&gt;index = index;</div><div class='del'>-    rb_ivar_set(self, rb_intern("name"), name);</div><div class='del'>-    return self;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    VALUE obj;</div><div class='del'>-    obj = Data_Make_Struct(klass, </div><div class='del'>-                           struct olemethoddata,</div><div class='del'>-                           0, olemethod_free, pmethod);</div><div class='del'>-    pmethod-&gt;pTypeInfo = NULL;</div><div class='del'>-    pmethod-&gt;pOwnerTypeInfo = NULL;</div><div class='del'>-    pmethod-&gt;index = 0;</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD.new(ole_type,  method) -&gt; WIN32OLE_METHOD object</div><div class='del'>- * </div><div class='del'>- *  Returns a new WIN32OLE_METHOD object which represents the information</div><div class='del'>- *  about OLE method.</div><div class='del'>- *  The first argument &lt;i&gt;ole_type&lt;/i&gt; specifies WIN32OLE_TYPE object.</div><div class='del'>- *  The second argument &lt;i&gt;method&lt;/i&gt; specifies OLE method name defined OLE class</div><div class='del'>- *  which represents WIN32OLE_TYPE object.</div><div class='del'>- *</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_initialize(self, oletype, method)</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE oletype;</div><div class='del'>-    VALUE method;</div><div class='del'>-{</div><div class='del'>-    struct oletypedata *ptype;</div><div class='del'>-    VALUE obj = Qnil;</div><div class='del'>-    if (rb_obj_is_kind_of(oletype, cWIN32OLE_TYPE)) {</div><div class='del'>-        Check_SafeStr(method);</div><div class='del'>-        Data_Get_Struct(oletype, struct oletypedata, ptype);</div><div class='del'>-        obj = olemethod_from_typeinfo(self, ptype-&gt;pTypeInfo, method);</div><div class='del'>-        if (obj == Qnil) {</div><div class='del'>-            rb_raise(eWIN32OLE_RUNTIME_ERROR, "not found %s",</div><div class='del'>-                     StringValuePtr(method));</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        rb_raise(rb_eTypeError, "1st argument should be WIN32OLE_TYPE object");</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'>- *  call-seq</div><div class='del'>- *     WIN32OLE_METHOD#name</div><div class='del'>- *</div><div class='del'>- *  Returns the name of the method.</div><div class='del'>- *</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     puts method.name # =&gt; SaveAs</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_name(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_ivar_get(self, rb_intern("name"));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_return_type(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE type;</div><div class='del'>-</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr)) </div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetFuncDesc");</div><div class='del'>-    </div><div class='del'>-    type = ole_typedesc2val(pTypeInfo, &amp;(pFuncDesc-&gt;elemdescFunc.tdesc), Qnil);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#return_type</div><div class='del'>- * </div><div class='del'>- *  Returns string of return value type of method.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.return_type # =&gt; Workbook</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_return_type(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_return_type(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_return_vtype(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE vt;</div><div class='del'>-</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr)) </div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetFuncDesc");</div><div class='del'>-    </div><div class='del'>-    vt = INT2FIX(pFuncDesc-&gt;elemdescFunc.tdesc.vt);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return vt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#return_vtype</div><div class='del'>- * </div><div class='del'>- *  Returns number of return value type of method.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.return_vtype # =&gt; 26</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_return_vtype(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_return_vtype(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_return_type_detail(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE type = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr)) </div><div class='del'>-        return type;</div><div class='del'>-    </div><div class='del'>-    ole_typedesc2val(pTypeInfo, &amp;(pFuncDesc-&gt;elemdescFunc.tdesc), type);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#return_type_detail</div><div class='del'>- * </div><div class='del'>- *  Returns detail information of return value type of method.</div><div class='del'>- *  The information is array.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     p method.return_type_detail # =&gt; ["PTR", "USERDEFINED", "Workbook"]</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_return_type_detail(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_return_type_detail(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_invkind(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE invkind;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if(FAILED(hr)) </div><div class='del'>-        ole_raise(hr, eWIN32OLE_RUNTIME_ERROR, "failed to GetFuncDesc");</div><div class='del'>-    invkind = INT2FIX(pFuncDesc-&gt;invkind);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return invkind;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_invoke_kind(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    WORD method_index;</div><div class='del'>-{</div><div class='del'>-    VALUE type = rb_str_new2("UNKNOWN");</div><div class='del'>-    VALUE invkind = ole_method_invkind(pTypeInfo, method_index);</div><div class='del'>-    if((FIX2INT(invkind) &amp; INVOKE_PROPERTYGET) &amp;&amp;</div><div class='del'>-       (FIX2INT(invkind) &amp; INVOKE_PROPERTYPUT) ) {</div><div class='del'>-        type = rb_str_new2("PROPERTY");</div><div class='del'>-    } else if(FIX2INT(invkind) &amp; INVOKE_PROPERTYGET) {</div><div class='del'>-        type =  rb_str_new2("PROPERTYGET");</div><div class='del'>-    } else if(FIX2INT(invkind) &amp; INVOKE_PROPERTYPUT) {</div><div class='del'>-        type = rb_str_new2("PROPERTYPUT");</div><div class='del'>-    } else if(FIX2INT(invkind) &amp; INVOKE_PROPERTYPUTREF) {</div><div class='del'>-        type = rb_str_new2("PROPERTYPUTREF");</div><div class='del'>-    } else if(FIX2INT(invkind) &amp; INVOKE_FUNC) {</div><div class='del'>-        type = rb_str_new2("FUNC");</div><div class='del'>-    }</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *   call-seq:</div><div class='del'>- *      WIN32OLE_MTHOD#invkind</div><div class='del'>- * </div><div class='del'>- *   Returns the method invoke kind. </div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.invkind # =&gt; 1</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_invkind(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_invkind(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#invoke_kind</div><div class='del'>- * </div><div class='del'>- *  Returns the method kind string. The string is "UNKNOWN" or "PROPERTY" </div><div class='del'>- *  or "PROPERTY" or "PROPERTYGET" or "PROPERTYPUT" or "PROPERTYPPUTREF" </div><div class='del'>- *  or "FUNC".</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.invoke_kind # =&gt; "FUNC"</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_invoke_kind(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_invoke_kind(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_visible(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE visible;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if(FAILED(hr))</div><div class='del'>-        return Qfalse;</div><div class='del'>-    if (pFuncDesc-&gt;wFuncFlags &amp; (FUNCFLAG_FRESTRICTED |</div><div class='del'>-                                 FUNCFLAG_FHIDDEN |</div><div class='del'>-                                 FUNCFLAG_FNONBROWSABLE)) {</div><div class='del'>-        visible = Qfalse;</div><div class='del'>-    } else {</div><div class='del'>-        visible = Qtrue;</div><div class='del'>-    }</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return visible;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#visible?</div><div class='del'>- * </div><div class='del'>- *  Returns true if the method is public.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.visible? # =&gt; true</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_visible(self) </div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_visible(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_event(pTypeInfo, method_index, method_name)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    WORD method_index;</div><div class='del'>-    VALUE method_name;</div><div class='del'>-{</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    WORD i;</div><div class='del'>-    int flags;</div><div class='del'>-    HREFTYPE href;</div><div class='del'>-    ITypeInfo *pRefTypeInfo;</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    VALUE name;</div><div class='del'>-    VALUE event = Qfalse;</div><div class='del'>-    </div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) </div><div class='del'>-        return event;</div><div class='del'>-    if(pTypeAttr-&gt;typekind != TKIND_COCLASS) {</div><div class='del'>-        pTypeInfo-&gt;lpVtbl-&gt;ReleaseTypeAttr(pTypeInfo, pTypeAttr);</div><div class='del'>-        return event;</div><div class='del'>-    }</div><div class='del'>-    for (i = 0; i &lt; pTypeAttr-&gt;cImplTypes; i++) {</div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetImplTypeFlags(pTypeInfo, i, &amp;flags);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-            continue;</div><div class='del'>-</div><div class='del'>-        if (flags &amp; IMPLTYPEFLAG_FSOURCE) {</div><div class='del'>-            hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeOfImplType(pTypeInfo,</div><div class='del'>-                                                         i, &amp;href);</div><div class='del'>-            if (FAILED(hr))</div><div class='del'>-                continue;</div><div class='del'>-            hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeInfo(pTypeInfo,</div><div class='del'>-                                                   href, &amp;pRefTypeInfo);</div><div class='del'>-            if (FAILED(hr))</div><div class='del'>-                continue;</div><div class='del'>-            hr = pRefTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pRefTypeInfo, method_index, </div><div class='del'>-                                                   &amp;pFuncDesc);</div><div class='del'>-            if (FAILED(hr)) {</div><div class='del'>-                OLE_RELEASE(pRefTypeInfo);</div><div class='del'>-                continue;</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            hr = pRefTypeInfo-&gt;lpVtbl-&gt;GetDocumentation(pRefTypeInfo, </div><div class='del'>-                                                        pFuncDesc-&gt;memid,</div><div class='del'>-                                                        &amp;bstr, NULL, NULL, NULL);</div><div class='del'>-            if (FAILED(hr)) {</div><div class='del'>-                pRefTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pRefTypeInfo, pFuncDesc);</div><div class='del'>-                OLE_RELEASE(pRefTypeInfo);</div><div class='del'>-                continue;</div><div class='del'>-            }</div><div class='del'>-</div><div class='del'>-            name = WC2VSTR(bstr);</div><div class='del'>-            pRefTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pRefTypeInfo, pFuncDesc);</div><div class='del'>-            OLE_RELEASE(pRefTypeInfo);</div><div class='del'>-            if (rb_str_cmp(method_name, name) == 0) {</div><div class='del'>-                event = Qtrue;</div><div class='del'>-                break;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    return event;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#event?</div><div class='del'>- * </div><div class='del'>- *  Returns true if the method is event.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SheetActivate')</div><div class='del'>- *     puts method.event? # =&gt; true</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_event(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    if (!pmethod-&gt;pOwnerTypeInfo)</div><div class='del'>-        return Qfalse;</div><div class='del'>-    return ole_method_event(pmethod-&gt;pOwnerTypeInfo, </div><div class='del'>-                            pmethod-&gt;index,</div><div class='del'>-                            rb_ivar_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'>- *     WIN32OLE_METHOD#event_interface</div><div class='del'>- *</div><div class='del'>- *  Returns event interface name if the method is event.</div><div class='del'>- *    tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *    method = WIN32OLE_METHOD.new(tobj, 'SheetActivate')</div><div class='del'>- *    puts method.event_interface # =&gt;  WorkbookEvents</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_event_interface(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    BSTR name;</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    if(folemethod_event(self) == Qtrue) {</div><div class='del'>-        hr = ole_docinfo_from_type(pmethod-&gt;pTypeInfo, &amp;name, NULL, NULL, NULL);</div><div class='del'>-        if(SUCCEEDED(hr))</div><div class='del'>-            return WC2VSTR(name);</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'>-ole_method_docinfo_from_type(pTypeInfo, method_index, name, helpstr,</div><div class='del'>-                             helpcontext, helpfile)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-    BSTR *name;</div><div class='del'>-    BSTR *helpstr;</div><div class='del'>-    DWORD *helpcontext;</div><div class='del'>-    BSTR *helpfile;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return hr;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetDocumentation(pTypeInfo, pFuncDesc-&gt;memid,</div><div class='del'>-                                             name, helpstr,</div><div class='del'>-                                             helpcontext, helpfile);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return hr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_helpstring(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR bhelpstring;</div><div class='del'>-    hr = ole_method_docinfo_from_type(pTypeInfo, method_index, NULL, &amp;bhelpstring,</div><div class='del'>-                                      NULL, NULL); </div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return Qnil;</div><div class='del'>-    return WC2VSTR(bhelpstring);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#helpstring</div><div class='del'>- *</div><div class='del'>- *  Returns help string of OLE method. If the help string is not found, </div><div class='del'>- *  then the method returns nil.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Internet Controls', 'IWebBrowser')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Navigate')</div><div class='del'>- *     puts method.helpstring # =&gt; Navigates to a URL or file.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_helpstring(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_helpstring(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_helpfile(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR bhelpfile;</div><div class='del'>-    hr = ole_method_docinfo_from_type(pTypeInfo, method_index, NULL, NULL,</div><div class='del'>-                                      NULL, &amp;bhelpfile); </div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return Qnil;</div><div class='del'>-    return WC2VSTR(bhelpfile);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#helpfile</div><div class='del'>- * </div><div class='del'>- *  Returns help file. If help file is not found, then </div><div class='del'>- *  the method returns nil.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.helpfile # =&gt; C:\...\VBAXL9.CHM</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_helpfile(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-</div><div class='del'>-    return ole_method_helpfile(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_helpcontext(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    DWORD helpcontext = 0;</div><div class='del'>-    hr = ole_method_docinfo_from_type(pTypeInfo, method_index, NULL, NULL,</div><div class='del'>-                                      &amp;helpcontext, NULL); </div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return Qnil;</div><div class='del'>-    return INT2FIX(helpcontext);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#helpcontext</div><div class='del'>- * </div><div class='del'>- *  Returns help context.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.helpcontext # =&gt; 65717</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_helpcontext(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_helpcontext(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_dispid(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE dispid = Qnil;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return dispid;</div><div class='del'>-    dispid = INT2NUM(pFuncDesc-&gt;memid); </div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return dispid;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#dispid</div><div class='del'>- * </div><div class='del'>- *  Returns dispatch ID.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.dispid # =&gt; 181</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_dispid(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_dispid(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_offset_vtbl(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE offset_vtbl = Qnil;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return offset_vtbl;</div><div class='del'>-    offset_vtbl = INT2FIX(pFuncDesc-&gt;oVft); </div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return offset_vtbl;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#offset_vtbl</div><div class='del'>- * </div><div class='del'>- *  Returns the offset ov VTBL.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbooks')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'Add')</div><div class='del'>- *     puts method.offset_vtbl # =&gt; 40</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_offset_vtbl(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_offset_vtbl(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_size_params(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE size_params = Qnil;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return size_params;</div><div class='del'>-    size_params = INT2FIX(pFuncDesc-&gt;cParams);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return size_params;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#size_params</div><div class='del'>- * </div><div class='del'>- *  Returns the size of arguments of the method.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     puts method.size_params # =&gt; 11</div><div class='del'>- *  </div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_size_params(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_size_params(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_size_opt_params(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE size_opt_params = Qnil;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return size_opt_params;</div><div class='del'>-    size_opt_params = INT2FIX(pFuncDesc-&gt;cParamsOpt);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return size_opt_params;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#size_opt_params</div><div class='del'>- * </div><div class='del'>- *  Returns the size of optional parameters.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     puts method.size_opt_params # =&gt; 4</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_size_opt_params(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_size_opt_params(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_method_params(pTypeInfo, method_index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR *bstrs;</div><div class='del'>-    UINT len, i;</div><div class='del'>-    struct oleparamdata *pparam;</div><div class='del'>-    VALUE param;</div><div class='del'>-    VALUE params = rb_ary_new();</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr)) </div><div class='del'>-        return params;</div><div class='del'>-</div><div class='del'>-    len = 0;</div><div class='del'>-    bstrs = ALLOCA_N(BSTR, pFuncDesc-&gt;cParams + 1);</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetNames(pTypeInfo, pFuncDesc-&gt;memid, </div><div class='del'>-                                     bstrs, pFuncDesc-&gt;cParams + 1,</div><div class='del'>-                                     &amp;len);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-        return params;</div><div class='del'>-    }</div><div class='del'>-    SysFreeString(bstrs[0]);</div><div class='del'>-    if (pFuncDesc-&gt;cParams &gt; 0) {</div><div class='del'>-        for(i = 1; i &lt; len; i++) {</div><div class='del'>-            param = Data_Make_Struct(cWIN32OLE_PARAM, struct oleparamdata, 0,</div><div class='del'>-                                     oleparam_free, pparam);</div><div class='del'>-            pparam-&gt;pTypeInfo = pTypeInfo;</div><div class='del'>-            OLE_ADDREF(pTypeInfo);</div><div class='del'>-            pparam-&gt;method_index = method_index;</div><div class='del'>-            pparam-&gt;index = i - 1;</div><div class='del'>-            rb_ivar_set(param, rb_intern("name"), WC2VSTR(bstrs[i]));</div><div class='del'>-            rb_ary_push(params, param);</div><div class='del'>-         }</div><div class='del'>-     }</div><div class='del'>-     pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-     return params;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_METHOD#params</div><div class='del'>- * </div><div class='del'>- *  returns array of WIN32OLE_PARAM object corresponding with method parameters.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     p method.params # =&gt; [Filename, FileFormat, Password, WriteResPassword, </div><div class='del'>- *                           ReadOnlyRecommended, CreateBackup, AccessMode, </div><div class='del'>- *                           ConflictResolution, AddToMru, TextCodepage, </div><div class='del'>- *                           TextVisualLayout]</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-folemethod_params(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct olemethoddata *pmethod;</div><div class='del'>-    Data_Get_Struct(self, struct olemethoddata, pmethod);</div><div class='del'>-    return ole_method_params(pmethod-&gt;pTypeInfo, pmethod-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: WIN32OLE_PARAM</div><div class='del'>- *</div><div class='del'>- *   &lt;code&gt;WIN32OLE_PARAM&lt;/code&gt; objects represent param information of </div><div class='del'>- *   the OLE method.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_PARAM#name</div><div class='del'>- * </div><div class='del'>- *  Returns name.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     param1 = method.params[0]</div><div class='del'>- *     puts param1.name # =&gt; Filename</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-foleparam_name(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_ivar_get(self, rb_intern("name"));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_param_ole_type(pTypeInfo, method_index, index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-    UINT index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE type = rb_str_new2("UNKNOWN");</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return type;</div><div class='del'>-    type = ole_typedesc2val(pTypeInfo, </div><div class='del'>-                            &amp;(pFuncDesc-&gt;lprgelemdescParam[index].tdesc), Qnil);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return type;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_PARAM#ole_type</div><div class='del'>- *</div><div class='del'>- *  Returns OLE type of WIN32OLE_PARAM object(parameter of OLE method).</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     param1 = method.params[0]</div><div class='del'>- *     puts param1.ole_type # =&gt; VARIANT</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-foleparam_ole_type(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oleparamdata *pparam;</div><div class='del'>-    Data_Get_Struct(self, struct oleparamdata, pparam);</div><div class='del'>-    return ole_param_ole_type(pparam-&gt;pTypeInfo, pparam-&gt;method_index, </div><div class='del'>-                              pparam-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_param_ole_type_detail(pTypeInfo, method_index, index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-    UINT index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE typedetail = rb_ary_new();</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return typedetail;</div><div class='del'>-    ole_typedesc2val(pTypeInfo, </div><div class='del'>-                     &amp;(pFuncDesc-&gt;lprgelemdescParam[index].tdesc), typedetail);</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return typedetail;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_PARAM#ole_type_detail</div><div class='del'>- *</div><div class='del'>- *  Returns detail information of type of argument.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'IWorksheetFunction')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SumIf')</div><div class='del'>- *     param1 = method.params[0]</div><div class='del'>- *     p param1.ole_type_detail # =&gt; ["PTR", "USERDEFINED", "Range"]</div><div class='del'>- */</div><div class='del'>-static VALUE </div><div class='del'>-foleparam_ole_type_detail(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oleparamdata *pparam;</div><div class='del'>-    Data_Get_Struct(self, struct oleparamdata, pparam);</div><div class='del'>-    return ole_param_ole_type_detail(pparam-&gt;pTypeInfo, pparam-&gt;method_index, </div><div class='del'>-                                     pparam-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_param_flag_mask(pTypeInfo, method_index, index, mask)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-    UINT index;</div><div class='del'>-    USHORT mask;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    VALUE ret = Qfalse;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if(FAILED(hr)) </div><div class='del'>-        return ret;</div><div class='del'>-    if (V_UNION1((&amp;(pFuncDesc-&gt;lprgelemdescParam[index])), paramdesc).wParamFlags &amp;mask) </div><div class='del'>-        ret = Qtrue;</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_PARAM#input?</div><div class='del'>- * </div><div class='del'>- *  Returns true if the parameter is input.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     param1 = method.params[0]</div><div class='del'>- *     puts param1.input? # =&gt; true</div><div class='del'>- */</div><div class='del'>-static VALUE foleparam_input(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oleparamdata *pparam;</div><div class='del'>-    Data_Get_Struct(self, struct oleparamdata, pparam);</div><div class='del'>-    return ole_param_flag_mask(pparam-&gt;pTypeInfo, pparam-&gt;method_index, </div><div class='del'>-                               pparam-&gt;index, PARAMFLAG_FIN);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE#output?</div><div class='del'>- * </div><div class='del'>- *  Returns true if argument is output.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Internet Controls', 'DWebBrowserEvents')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'NewWindow')</div><div class='del'>- *     method.params.each do |param|</div><div class='del'>- *       puts "#{param.name} #{param.output?}"</div><div class='del'>- *     end</div><div class='del'>- *</div><div class='del'>- *     The result of above script is following:</div><div class='del'>- *       URL false</div><div class='del'>- *       Flags false</div><div class='del'>- *       TargetFrameName false</div><div class='del'>- *       PostData false</div><div class='del'>- *       Headers false</div><div class='del'>- *       Processed true</div><div class='del'>- */</div><div class='del'>-static VALUE foleparam_output(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oleparamdata *pparam;</div><div class='del'>-    Data_Get_Struct(self, struct oleparamdata, pparam);</div><div class='del'>-    return ole_param_flag_mask(pparam-&gt;pTypeInfo, pparam-&gt;method_index, </div><div class='del'>-                               pparam-&gt;index, PARAMFLAG_FOUT);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_PARAM#optional?</div><div class='del'>- * </div><div class='del'>- *  Returns true if argument is optional.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     param1 = method.params[0]</div><div class='del'>- *     puts "#{param1.name} #{param1.optional?}" # =&gt; Filename true</div><div class='del'>- */</div><div class='del'>-static VALUE foleparam_optional(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oleparamdata *pparam;</div><div class='del'>-    Data_Get_Struct(self, struct oleparamdata, pparam);</div><div class='del'>-    return ole_param_flag_mask(pparam-&gt;pTypeInfo, pparam-&gt;method_index, </div><div class='del'>-                               pparam-&gt;index, PARAMFLAG_FOPT);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_PARAM#retval?</div><div class='del'>- *</div><div class='del'>- *  Returns true if argument is return value.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('DirectX 7 for Visual Basic Type Library', </div><div class='del'>- *                              'DirectPlayLobbyConnection')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'GetPlayerShortName')</div><div class='del'>- *     param = method.params[0]</div><div class='del'>- *     puts "#{param.name} #{param.retval?}"  # =&gt; name true</div><div class='del'>- */</div><div class='del'>-static VALUE foleparam_retval(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oleparamdata *pparam;</div><div class='del'>-    Data_Get_Struct(self, struct oleparamdata, pparam);</div><div class='del'>-    return ole_param_flag_mask(pparam-&gt;pTypeInfo, pparam-&gt;method_index, </div><div class='del'>-                               pparam-&gt;index, PARAMFLAG_FRETVAL);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ole_param_default(pTypeInfo, method_index, index)</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    UINT method_index;</div><div class='del'>-    UINT index;</div><div class='del'>-{</div><div class='del'>-    FUNCDESC *pFuncDesc;</div><div class='del'>-    ELEMDESC *pElemDesc;</div><div class='del'>-    PARAMDESCEX * pParamDescEx;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    USHORT wParamFlags;</div><div class='del'>-    USHORT mask = PARAMFLAG_FOPT|PARAMFLAG_FHASDEFAULT;</div><div class='del'>-    VALUE defval = Qnil;</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetFuncDesc(pTypeInfo, method_index, &amp;pFuncDesc);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return defval;</div><div class='del'>-    pElemDesc = &amp;pFuncDesc-&gt;lprgelemdescParam[index]; </div><div class='del'>-    wParamFlags = V_UNION1(pElemDesc, paramdesc).wParamFlags;</div><div class='del'>-    if ((wParamFlags &amp; mask) == mask) {</div><div class='del'>-         pParamDescEx = V_UNION1(pElemDesc, paramdesc).pparamdescex;</div><div class='del'>-         defval = ole_variant2val(&amp;pParamDescEx-&gt;varDefaultValue);</div><div class='del'>-    }</div><div class='del'>-    pTypeInfo-&gt;lpVtbl-&gt;ReleaseFuncDesc(pTypeInfo, pFuncDesc);</div><div class='del'>-    return defval;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_PARAM#default</div><div class='del'>- * </div><div class='del'>- *  Returns default value. If the default value does not exist, </div><div class='del'>- *  this method returns nil.</div><div class='del'>- *     tobj = WIN32OLE_TYPE.new('Microsoft Excel 9.0 Object Library', 'Workbook')</div><div class='del'>- *     method = WIN32OLE_METHOD.new(tobj, 'SaveAs')</div><div class='del'>- *     method.params.each do |param|</div><div class='del'>- *       if param.default</div><div class='del'>- *         puts "#{param.name} (= #{param.default})"</div><div class='del'>- *       else</div><div class='del'>- *         puts "#{param}"</div><div class='del'>- *       end</div><div class='del'>- *     end</div><div class='del'>- *</div><div class='del'>- *     The above script result is following:</div><div class='del'>- *         Filename</div><div class='del'>- *         FileFormat</div><div class='del'>- *         Password</div><div class='del'>- *         WriteResPassword</div><div class='del'>- *         ReadOnlyRecommended</div><div class='del'>- *         CreateBackup</div><div class='del'>- *         AccessMode (= 1)</div><div class='del'>- *         ConflictResolution</div><div class='del'>- *         AddToMru</div><div class='del'>- *         TextCodepage</div><div class='del'>- *         TextVisualLayout</div><div class='del'>- */</div><div class='del'>-static VALUE foleparam_default(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct oleparamdata *pparam;</div><div class='del'>-    Data_Get_Struct(self, struct oleparamdata, pparam);</div><div class='del'>-    return ole_param_default(pparam-&gt;pTypeInfo, pparam-&gt;method_index,</div><div class='del'>-                             pparam-&gt;index);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: WIN32OLE_EVENT</div><div class='del'>- *</div><div class='del'>- *   &lt;code&gt;WIN32OLE_EVENT&lt;/code&gt; objects controls OLE event.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static IEventSinkVtbl vtEventSink;</div><div class='del'>-static BOOL g_IsEventSinkVtblInitialized = FALSE;</div><div class='del'>-</div><div class='del'>-void EVENTSINK_Destructor(PIEVENTSINKOBJ);</div><div class='del'>-</div><div class='del'>-STDMETHODIMP</div><div class='del'>-EVENTSINK_QueryInterface(</div><div class='del'>-    PEVENTSINK pEV,</div><div class='del'>-    REFIID     iid,</div><div class='del'>-    LPVOID*    ppv</div><div class='del'>-    ) {</div><div class='del'>-    if (IsEqualIID(iid, &amp;IID_IUnknown) ||</div><div class='del'>-        IsEqualIID(iid, &amp;IID_IDispatch) ||</div><div class='del'>-        IsEqualIID(iid, &amp;((PIEVENTSINKOBJ)pEV)-&gt;m_iid)) {</div><div class='del'>-        *ppv = pEV;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        *ppv = NULL;</div><div class='del'>-        return E_NOINTERFACE;</div><div class='del'>-    }</div><div class='del'>-    ((LPUNKNOWN)*ppv)-&gt;lpVtbl-&gt;AddRef((LPUNKNOWN)*ppv);</div><div class='del'>-    return NOERROR;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-STDMETHODIMP_(ULONG)</div><div class='del'>-EVENTSINK_AddRef(</div><div class='del'>-    PEVENTSINK pEV</div><div class='del'>-    ){</div><div class='del'>-    PIEVENTSINKOBJ pEVObj = (PIEVENTSINKOBJ)pEV;</div><div class='del'>-    return ++pEVObj-&gt;m_cRef;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-STDMETHODIMP_(ULONG) EVENTSINK_Release(</div><div class='del'>-    PEVENTSINK pEV</div><div class='del'>-    ) {</div><div class='del'>-    PIEVENTSINKOBJ pEVObj = (PIEVENTSINKOBJ)pEV;</div><div class='del'>-    --pEVObj-&gt;m_cRef;</div><div class='del'>-    if(pEVObj-&gt;m_cRef != 0)</div><div class='del'>-        return pEVObj-&gt;m_cRef;</div><div class='del'>-    EVENTSINK_Destructor(pEVObj);</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-STDMETHODIMP EVENTSINK_GetTypeInfoCount(</div><div class='del'>-    PEVENTSINK pEV,</div><div class='del'>-    UINT *pct</div><div class='del'>-    ) {</div><div class='del'>-    *pct = 0;</div><div class='del'>-    return NOERROR;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-STDMETHODIMP EVENTSINK_GetTypeInfo(</div><div class='del'>-    PEVENTSINK pEV,</div><div class='del'>-    UINT info,</div><div class='del'>-    LCID lcid,</div><div class='del'>-    ITypeInfo **pInfo</div><div class='del'>-    ) {</div><div class='del'>-    *pInfo = NULL;</div><div class='del'>-    return DISP_E_BADINDEX;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-STDMETHODIMP EVENTSINK_GetIDsOfNames(</div><div class='del'>-    PEVENTSINK pEV,</div><div class='del'>-    REFIID riid,</div><div class='del'>-    OLECHAR **szNames,</div><div class='del'>-    UINT cNames,</div><div class='del'>-    LCID lcid,</div><div class='del'>-    DISPID *pDispID</div><div class='del'>-    ) {</div><div class='del'>-    return DISP_E_UNKNOWNNAME;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static long</div><div class='del'>-ole_search_event_at(ary, ev)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE ev;</div><div class='del'>-{</div><div class='del'>-    VALUE event;</div><div class='del'>-    VALUE def_event;</div><div class='del'>-    VALUE event_name;</div><div class='del'>-    long i, len; </div><div class='del'>-    long ret = -1;</div><div class='del'>-    def_event = Qnil;</div><div class='del'>-    len = RARRAY(ary)-&gt;len;</div><div class='del'>-    for(i = 0; i &lt; len; i++) {</div><div class='del'>-        event = rb_ary_entry(ary, i);</div><div class='del'>-        event_name = rb_ary_entry(event, 1);</div><div class='del'>-        if(NIL_P(event_name) &amp;&amp; NIL_P(ev)) {</div><div class='del'>-            ret = i;</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        else if (TYPE(ev) == T_STRING &amp;&amp;</div><div class='del'>-                 TYPE(event_name) == T_STRING &amp;&amp;</div><div class='del'>-                 rb_str_cmp(ev, event_name) == 0) {</div><div class='del'>-            ret = i;</div><div class='del'>-            break;</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'>-ole_search_event(ary, ev, is_default)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE ev;</div><div class='del'>-    BOOL  *is_default;</div><div class='del'>-{</div><div class='del'>-    VALUE event;</div><div class='del'>-    VALUE def_event;</div><div class='del'>-    VALUE event_name;</div><div class='del'>-    long i, len;</div><div class='del'>-    *is_default = FALSE;</div><div class='del'>-    def_event = Qnil;</div><div class='del'>-    len = RARRAY(ary)-&gt;len;</div><div class='del'>-    for(i = 0; i &lt; len; i++) {</div><div class='del'>-        event = rb_ary_entry(ary, i);</div><div class='del'>-        event_name = rb_ary_entry(event, 1);</div><div class='del'>-        if(NIL_P(event_name)) {</div><div class='del'>-            *is_default = TRUE;</div><div class='del'>-            def_event = event;</div><div class='del'>-        }</div><div class='del'>-        else if (rb_str_cmp(ev, event_name) == 0) {</div><div class='del'>-            *is_default = FALSE;</div><div class='del'>-            return event;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    return def_event;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-val2ptr_variant(val, var)</div><div class='del'>-    VALUE val;</div><div class='del'>-    VARIANT *var;</div><div class='del'>-{</div><div class='del'>-    switch (TYPE(val)) {</div><div class='del'>-    case T_STRING:</div><div class='del'>-        if (V_VT(var) == (VT_BSTR | VT_BYREF)) {</div><div class='del'>-            *V_BSTRREF(var) = ole_mb2wc(StringValuePtr(val), -1);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    case T_FIXNUM:</div><div class='del'>-        switch(V_VT(var)) {</div><div class='del'>-        case (VT_UI1 | VT_BYREF) :</div><div class='del'>-            *V_UI1REF(var) = NUM2CHR(val);</div><div class='del'>-            break;</div><div class='del'>-        case (VT_I2 | VT_BYREF) :</div><div class='del'>-            *V_I2REF(var) = (short)NUM2INT(val);</div><div class='del'>-            break;</div><div class='del'>-        case (VT_I4 | VT_BYREF) :</div><div class='del'>-            *V_I4REF(var) = NUM2INT(val);</div><div class='del'>-            break;</div><div class='del'>-        case (VT_R4 | VT_BYREF) :</div><div class='del'>-            *V_R4REF(var) = (float)NUM2INT(val);</div><div class='del'>-            break;</div><div class='del'>-        case (VT_R8 | VT_BYREF) :</div><div class='del'>-            *V_R8REF(var) = NUM2INT(val);</div><div class='del'>-            break;</div><div class='del'>-        default:</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    case T_FLOAT:</div><div class='del'>-        switch(V_VT(var)) {</div><div class='del'>-        case (VT_I2 | VT_BYREF) :</div><div class='del'>-            *V_I2REF(var) = (short)NUM2INT(val);</div><div class='del'>-            break;</div><div class='del'>-        case (VT_I4 | VT_BYREF) :</div><div class='del'>-            *V_I4REF(var) = NUM2INT(val);</div><div class='del'>-            break;</div><div class='del'>-        case (VT_R4 | VT_BYREF) :</div><div class='del'>-            *V_R4REF(var) = (float)NUM2DBL(val);</div><div class='del'>-            break;</div><div class='del'>-        case (VT_R8 | VT_BYREF) :</div><div class='del'>-            *V_R8REF(var) = NUM2DBL(val);</div><div class='del'>-            break;</div><div class='del'>-        default:</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    case T_BIGNUM:</div><div class='del'>-        if (V_VT(var) == (VT_R8 | VT_BYREF)) {</div><div class='del'>-            *V_R8REF(var) = rb_big2dbl(val);</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    case T_TRUE:</div><div class='del'>-        if (V_VT(var) == (VT_BOOL | VT_BYREF)) {</div><div class='del'>-            *V_BOOLREF(var) = VARIANT_TRUE;</div><div class='del'>-        }</div><div class='del'>-        break;</div><div class='del'>-    case T_FALSE:</div><div class='del'>-        if (V_VT(var) == (VT_BOOL | VT_BYREF)) {</div><div class='del'>-            *V_BOOLREF(var) = VARIANT_FALSE;</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'>-</div><div class='del'>-static void</div><div class='del'>-ary2ptr_dispparams(ary, pdispparams)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    DISPPARAMS *pdispparams;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    VALUE v;</div><div class='del'>-    VARIANT *pvar;</div><div class='del'>-    for(i = 0; i &lt; RARRAY(ary)-&gt;len &amp;&amp; (unsigned int) i &lt; pdispparams-&gt;cArgs; i++) {</div><div class='del'>-        v = rb_ary_entry(ary, i);</div><div class='del'>-        pvar = &amp;pdispparams-&gt;rgvarg[pdispparams-&gt;cArgs-i-1];</div><div class='del'>-        val2ptr_variant(v, pvar);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-STDMETHODIMP EVENTSINK_Invoke(</div><div class='del'>-    PEVENTSINK pEventSink,</div><div class='del'>-    DISPID dispid,</div><div class='del'>-    REFIID riid,</div><div class='del'>-    LCID lcid,</div><div class='del'>-    WORD wFlags,</div><div class='del'>-    DISPPARAMS *pdispparams,</div><div class='del'>-    VARIANT *pvarResult,</div><div class='del'>-    EXCEPINFO *pexcepinfo,</div><div class='del'>-    UINT *puArgErr</div><div class='del'>-    ) {</div><div class='del'>-</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    unsigned int count;</div><div class='del'>-    unsigned int i;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    VARIANT *pvar;</div><div class='del'>-    VALUE ary, obj, event, handler, args, argv, ev, result;</div><div class='del'>-    BOOL is_default_handler = FALSE;</div><div class='del'>-</div><div class='del'>-    PIEVENTSINKOBJ pEV = (PIEVENTSINKOBJ)pEventSink;</div><div class='del'>-    pTypeInfo = pEV-&gt;pTypeInfo;</div><div class='del'>-</div><div class='del'>-    obj = rb_ary_entry(ary_ole_event, pEV-&gt;m_event_id);</div><div class='del'>-    if (!rb_obj_is_kind_of(obj, cWIN32OLE_EVENT)) {</div><div class='del'>-        return NOERROR;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ary = rb_ivar_get(obj, id_events);</div><div class='del'>-    if (NIL_P(ary) || TYPE(ary) != T_ARRAY) {</div><div class='del'>-        return NOERROR;</div><div class='del'>-    }</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetNames(pTypeInfo, dispid,</div><div class='del'>-                                     &amp;bstr, 1, &amp;count);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        return NOERROR;</div><div class='del'>-    }</div><div class='del'>-    ev = WC2VSTR(bstr);</div><div class='del'>-    event = ole_search_event(ary, ev, &amp;is_default_handler);</div><div class='del'>-    if (NIL_P(event)) {</div><div class='del'>-        return NOERROR;</div><div class='del'>-    }</div><div class='del'>-    args = rb_ary_new();</div><div class='del'>-    if (is_default_handler) {</div><div class='del'>-        rb_ary_push(args, ev);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* make argument of event handler */</div><div class='del'>-    for (i = 0; i &lt; pdispparams-&gt;cArgs; ++i) {</div><div class='del'>-        pvar = &amp;pdispparams-&gt;rgvarg[pdispparams-&gt;cArgs-i-1];</div><div class='del'>-        rb_ary_push(args, ole_variant2val(pvar));</div><div class='del'>-    }</div><div class='del'>-    handler = rb_ary_entry(event, 0);</div><div class='del'>-</div><div class='del'>-    if (rb_ary_entry(event, 3) == Qtrue) {</div><div class='del'>-        argv = rb_ary_new();</div><div class='del'>-        rb_ary_push(args, argv);</div><div class='del'>-        result = rb_apply(handler, rb_intern("call"), args);</div><div class='del'>-        ary2ptr_dispparams(argv, pdispparams);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        result = rb_apply(handler, rb_intern("call"), args);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (pvarResult) {</div><div class='del'>-        ole_val2variant(result, pvarResult);</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    return NOERROR;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-PIEVENTSINKOBJ</div><div class='del'>-EVENTSINK_Constructor() {</div><div class='del'>-    PIEVENTSINKOBJ pEv;</div><div class='del'>-    if (!g_IsEventSinkVtblInitialized) {</div><div class='del'>-        vtEventSink.QueryInterface=EVENTSINK_QueryInterface;</div><div class='del'>-        vtEventSink.AddRef = EVENTSINK_AddRef;</div><div class='del'>-        vtEventSink.Release = EVENTSINK_Release;</div><div class='del'>-        vtEventSink.Invoke = EVENTSINK_Invoke;</div><div class='del'>-        vtEventSink.GetIDsOfNames = EVENTSINK_GetIDsOfNames;</div><div class='del'>-        vtEventSink.GetTypeInfoCount = EVENTSINK_GetTypeInfoCount;</div><div class='del'>-        vtEventSink.GetTypeInfo = EVENTSINK_GetTypeInfo;</div><div class='del'>-</div><div class='del'>-        g_IsEventSinkVtblInitialized = TRUE;</div><div class='del'>-    }</div><div class='del'>-    pEv = ALLOC_N(IEVENTSINKOBJ, 1);</div><div class='del'>-    if(pEv == NULL) return NULL;</div><div class='del'>-    pEv-&gt;lpVtbl = &amp;vtEventSink;</div><div class='del'>-    pEv-&gt;m_cRef = 0;</div><div class='del'>-    pEv-&gt;m_event_id = 0;</div><div class='del'>-    pEv-&gt;m_dwCookie = 0;</div><div class='del'>-    pEv-&gt;pConnectionPoint = NULL;</div><div class='del'>-    pEv-&gt;pTypeInfo = NULL;</div><div class='del'>-    pEv-&gt;ptr_freed = NULL;</div><div class='del'>-    return pEv;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void EVENTSINK_Destructor(</div><div class='del'>-    PIEVENTSINKOBJ pEVObj</div><div class='del'>-    ) {</div><div class='del'>-    if(pEVObj != NULL) {</div><div class='del'>-        *(pEVObj-&gt;ptr_freed) = 1;</div><div class='del'>-        free(pEVObj);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static HRESULT</div><div class='del'>-find_iid(ole, pitf, piid, ppTypeInfo)</div><div class='del'>-    VALUE ole;</div><div class='del'>-    char *pitf;</div><div class='del'>-    IID *piid;</div><div class='del'>-    ITypeInfo **ppTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    IDispatch *pDispatch;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    ITypeLib *pTypeLib;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    HREFTYPE RefType;</div><div class='del'>-    ITypeInfo *pImplTypeInfo;</div><div class='del'>-    TYPEATTR *pImplTypeAttr;</div><div class='del'>-</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    unsigned int index;</div><div class='del'>-    unsigned int count;</div><div class='del'>-    int type;</div><div class='del'>-    BSTR bstr;</div><div class='del'>-    char *pstr;</div><div class='del'>-</div><div class='del'>-    BOOL is_found = FALSE;</div><div class='del'>-    LCID    lcid = LOCALE_SYSTEM_DEFAULT;</div><div class='del'>-</div><div class='del'>-    OLEData_Get_Struct(ole, pole);</div><div class='del'>-</div><div class='del'>-    pDispatch = pole-&gt;pDispatch;</div><div class='del'>-</div><div class='del'>-    hr = pDispatch-&gt;lpVtbl-&gt;GetTypeInfo(pDispatch, 0, lcid, &amp;pTypeInfo);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return hr;</div><div class='del'>-</div><div class='del'>-    hr = pTypeInfo-&gt;lpVtbl-&gt;GetContainingTypeLib(pTypeInfo,</div><div class='del'>-                                                 &amp;pTypeLib,</div><div class='del'>-                                                 &amp;index);</div><div class='del'>-    OLE_RELEASE(pTypeInfo);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return hr;</div><div class='del'>-</div><div class='del'>-    if (!pitf) {</div><div class='del'>-        hr = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfoOfGuid(pTypeLib,</div><div class='del'>-                                                 piid,</div><div class='del'>-                                                 ppTypeInfo);</div><div class='del'>-        OLE_RELEASE(pTypeLib);</div><div class='del'>-        return hr;</div><div class='del'>-    }</div><div class='del'>-    count = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfoCount(pTypeLib);</div><div class='del'>-    for (index = 0; index &lt; count; index++) {</div><div class='del'>-        hr = pTypeLib-&gt;lpVtbl-&gt;GetTypeInfo(pTypeLib,</div><div class='del'>-                                           index,</div><div class='del'>-                                           &amp;pTypeInfo);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-            break;</div><div class='del'>-        hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-</div><div class='del'>-        if(FAILED(hr)) {</div><div class='del'>-            OLE_RELEASE(pTypeInfo);</div><div class='del'>-            break;</div><div class='del'>-        }</div><div class='del'>-        if(pTypeAttr-&gt;typekind == TKIND_COCLASS) {</div><div class='del'>-            for (type = 0; type &lt; pTypeAttr-&gt;cImplTypes; type++) {</div><div class='del'>-                hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeOfImplType(pTypeInfo,</div><div class='del'>-                                                             type,</div><div class='del'>-                                                             &amp;RefType);</div><div class='del'>-                if (FAILED(hr))</div><div class='del'>-                    break;</div><div class='del'>-                hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeInfo(pTypeInfo,</div><div class='del'>-                                                       RefType,</div><div class='del'>-                                                       &amp;pImplTypeInfo);</div><div class='del'>-                if (FAILED(hr))</div><div class='del'>-                    break;</div><div class='del'>-</div><div class='del'>-                hr = pImplTypeInfo-&gt;lpVtbl-&gt;GetDocumentation(pImplTypeInfo,</div><div class='del'>-                                                             -1,</div><div class='del'>-                                                             &amp;bstr,</div><div class='del'>-                                                             NULL, NULL, NULL);</div><div class='del'>-                if (FAILED(hr)) {</div><div class='del'>-                    OLE_RELEASE(pImplTypeInfo);</div><div class='del'>-                    break;</div><div class='del'>-                }</div><div class='del'>-                pstr = ole_wc2mb(bstr);</div><div class='del'>-                if (strcmp(pitf, pstr) == 0) {</div><div class='del'>-                    hr = pImplTypeInfo-&gt;lpVtbl-&gt;GetTypeAttr(pImplTypeInfo,</div><div class='del'>-                                                            &amp;pImplTypeAttr);</div><div class='del'>-                    if (SUCCEEDED(hr)) {</div><div class='del'>-                        is_found = TRUE;</div><div class='del'>-                        *piid = pImplTypeAttr-&gt;guid;</div><div class='del'>-                        if (ppTypeInfo) {</div><div class='del'>-                            *ppTypeInfo = pImplTypeInfo;</div><div class='del'>-                            (*ppTypeInfo)-&gt;lpVtbl-&gt;AddRef((*ppTypeInfo));</div><div class='del'>-                        }</div><div class='del'>-                        pImplTypeInfo-&gt;lpVtbl-&gt;ReleaseTypeAttr(pImplTypeInfo,</div><div class='del'>-                                                               pImplTypeAttr);</div><div class='del'>-                    }</div><div class='del'>-                }</div><div class='del'>-                free(pstr);</div><div class='del'>-                OLE_RELEASE(pImplTypeInfo);</div><div class='del'>-                if (is_found || FAILED(hr))</div><div class='del'>-                    break;</div><div class='del'>-            }</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-        if (is_found || FAILED(hr))</div><div class='del'>-            break;</div><div class='del'>-    }</div><div class='del'>-    OLE_RELEASE(pTypeLib);</div><div class='del'>-    if(!is_found)</div><div class='del'>-        return E_NOINTERFACE;</div><div class='del'>-    return hr;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static HRESULT</div><div class='del'>-find_default_source(ole, piid, ppTypeInfo)</div><div class='del'>-    VALUE ole;</div><div class='del'>-    IID *piid;</div><div class='del'>-    ITypeInfo **ppTypeInfo;</div><div class='del'>-{</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    IProvideClassInfo2 *pProvideClassInfo2;</div><div class='del'>-    IProvideClassInfo *pProvideClassInfo;</div><div class='del'>-</div><div class='del'>-    IDispatch *pDispatch;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    TYPEATTR *pTypeAttr;</div><div class='del'>-    int i;</div><div class='del'>-    int iFlags;</div><div class='del'>-    HREFTYPE hRefType;</div><div class='del'>-</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-</div><div class='del'>-    OLEData_Get_Struct(ole, pole);</div><div class='del'>-    pDispatch = pole-&gt;pDispatch;</div><div class='del'>-    hr = pDispatch-&gt;lpVtbl-&gt;QueryInterface(pDispatch,</div><div class='del'>-                                           &amp;IID_IProvideClassInfo2,</div><div class='del'>-                                           (void**)&amp;pProvideClassInfo2);</div><div class='del'>-    if (SUCCEEDED(hr)) {</div><div class='del'>-        hr = pProvideClassInfo2-&gt;lpVtbl-&gt;GetGUID(pProvideClassInfo2,</div><div class='del'>-                                                 GUIDKIND_DEFAULT_SOURCE_DISP_IID,</div><div class='del'>-                                                 piid);</div><div class='del'>-        OLE_RELEASE(pProvideClassInfo2);</div><div class='del'>-        return find_iid(ole, NULL, piid, ppTypeInfo);</div><div class='del'>-    }</div><div class='del'>-    hr = pDispatch-&gt;lpVtbl-&gt;QueryInterface(pDispatch,</div><div class='del'>-                                           &amp;IID_IProvideClassInfo,</div><div class='del'>-                                           (void**)&amp;pProvideClassInfo);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return hr;</div><div class='del'>-</div><div class='del'>-    hr = pProvideClassInfo-&gt;lpVtbl-&gt;GetClassInfo(pProvideClassInfo,</div><div class='del'>-                                                 &amp;pTypeInfo);</div><div class='del'>-    OLE_RELEASE(pProvideClassInfo);</div><div class='del'>-    if (FAILED(hr))</div><div class='del'>-        return hr;</div><div class='del'>-</div><div class='del'>-    hr = OLE_GET_TYPEATTR(pTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-        return hr;</div><div class='del'>-    }</div><div class='del'>-    /* Enumerate all implemented types of the COCLASS */</div><div class='del'>-    for (i = 0; i &lt; pTypeAttr-&gt;cImplTypes; i++) {</div><div class='del'>-        hr = pTypeInfo-&gt;lpVtbl-&gt;GetImplTypeFlags(pTypeInfo, i, &amp;iFlags);</div><div class='del'>-        if (FAILED(hr))</div><div class='del'>-            continue;</div><div class='del'>-</div><div class='del'>-        /*</div><div class='del'>-           looking for the [default] [source]</div><div class='del'>-           we just hope that it is a dispinterface :-)</div><div class='del'>-        */</div><div class='del'>-        if ((iFlags &amp; IMPLTYPEFLAG_FDEFAULT) &amp;&amp;</div><div class='del'>-            (iFlags &amp; IMPLTYPEFLAG_FSOURCE)) {</div><div class='del'>-</div><div class='del'>-            hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeOfImplType(pTypeInfo,</div><div class='del'>-                                                         i, &amp;hRefType);</div><div class='del'>-            if (FAILED(hr))</div><div class='del'>-                continue;</div><div class='del'>-            hr = pTypeInfo-&gt;lpVtbl-&gt;GetRefTypeInfo(pTypeInfo,</div><div class='del'>-                                                   hRefType, ppTypeInfo);</div><div class='del'>-            if (SUCCEEDED(hr))</div><div class='del'>-                break;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    OLE_RELEASE_TYPEATTR(pTypeInfo, pTypeAttr);</div><div class='del'>-    OLE_RELEASE(pTypeInfo);</div><div class='del'>-</div><div class='del'>-    /* Now that would be a bad surprise, if we didn't find it, wouldn't it? */</div><div class='del'>-    if (!*ppTypeInfo) {</div><div class='del'>-        if (SUCCEEDED(hr))</div><div class='del'>-            hr = E_UNEXPECTED;</div><div class='del'>-        return hr;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* Determine IID of default source interface */</div><div class='del'>-    hr = (*ppTypeInfo)-&gt;lpVtbl-&gt;GetTypeAttr(*ppTypeInfo, &amp;pTypeAttr);</div><div class='del'>-    if (SUCCEEDED(hr)) {</div><div class='del'>-        *piid = pTypeAttr-&gt;guid;</div><div class='del'>-        (*ppTypeInfo)-&gt;lpVtbl-&gt;ReleaseTypeAttr(*ppTypeInfo, pTypeAttr);</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-        OLE_RELEASE(*ppTypeInfo);</div><div class='del'>-</div><div class='del'>-    return hr;</div><div class='del'>-</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-ole_event_free(poleev)</div><div class='del'>-    struct oleeventdata *poleev;</div><div class='del'>-{</div><div class='del'>-    ITypeInfo *pti = NULL;</div><div class='del'>-    IConnectionPoint *pcp = NULL;</div><div class='del'>-</div><div class='del'>-    if (poleev-&gt;freed == 1) {</div><div class='del'>-        /* </div><div class='del'>-         * this return create memory leak.</div><div class='del'>-         * but poleev-&gt;pEvent-&gt;pConnectionPoint shoul'd not be freed</div><div class='del'>-         * until poleev-&gt; freed == 0.</div><div class='del'>-         */</div><div class='del'>-        return;</div><div class='del'>-    }</div><div class='del'>-    if(poleev-&gt;pEvent) {</div><div class='del'>-        pti = poleev-&gt;pEvent-&gt;pTypeInfo;</div><div class='del'>-        if(pti) OLE_RELEASE(pti);</div><div class='del'>-        pcp = poleev-&gt;pEvent-&gt;pConnectionPoint;</div><div class='del'>-        if(pcp) {</div><div class='del'>-            pcp-&gt;lpVtbl-&gt;Unadvise(pcp, poleev-&gt;pEvent-&gt;m_dwCookie);</div><div class='del'>-            OLE_RELEASE(pcp);</div><div class='del'>-        }</div><div class='del'>-        free(poleev);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE fev_s_allocate _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-fev_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-    struct oleeventdata *poleev;</div><div class='del'>-    obj = Data_Make_Struct(klass,struct oleeventdata,0,ole_event_free,poleev);</div><div class='del'>-    poleev-&gt;pEvent = NULL;</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_EVENT.new(ole, event) #=&gt; WIN32OLE_EVENT object.</div><div class='del'>- *</div><div class='del'>- *  Returns OLE event object.</div><div class='del'>- *  The first argument specifies WIN32OLE object.</div><div class='del'>- *  The second argument specifies OLE event name.</div><div class='del'>- *     ie = WIN32OLE.new('InternetExplorer.Application')</div><div class='del'>- *     ev = WIN32OLE_EVENT.new(ie, 'DWebBrowserEvents')</div><div class='del'>- */     </div><div class='del'>-static VALUE</div><div class='del'>-fev_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 ole, itf;</div><div class='del'>-    struct oledata *pole;</div><div class='del'>-    char *pitf;</div><div class='del'>-    HRESULT hr;</div><div class='del'>-    IID iid;</div><div class='del'>-    ITypeInfo *pTypeInfo;</div><div class='del'>-    IDispatch *pDispatch;</div><div class='del'>-    IConnectionPointContainer *pContainer;</div><div class='del'>-    IConnectionPoint *pConnectionPoint;</div><div class='del'>-    IEVENTSINKOBJ *pIEV;</div><div class='del'>-    DWORD dwCookie = 0;</div><div class='del'>-    struct oleeventdata *poleev;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;ole, &amp;itf);</div><div class='del'>-</div><div class='del'>-    if (!rb_obj_is_kind_of(ole, cWIN32OLE)) {</div><div class='del'>-        rb_raise(rb_eTypeError, "1st parameter must be WIN32OLE object");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if(TYPE(itf) != T_NIL) {</div><div class='del'>-        if (ruby_safe_level &gt; 0 &amp;&amp; OBJ_TAINTED(itf)) {</div><div class='del'>-            rb_raise(rb_eSecurityError, "Insecure Event Creation - %s",</div><div class='del'>-                     StringValuePtr(itf));</div><div class='del'>-        }</div><div class='del'>-        Check_SafeStr(itf);</div><div class='del'>-        pitf = StringValuePtr(itf);</div><div class='del'>-        hr = find_iid(ole, pitf, &amp;iid, &amp;pTypeInfo);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        hr = find_default_source(ole, &amp;iid, &amp;pTypeInfo);</div><div class='del'>-    }</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "interface not found");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    OLEData_Get_Struct(ole, pole);</div><div class='del'>-    pDispatch = pole-&gt;pDispatch;</div><div class='del'>-    hr = pDispatch-&gt;lpVtbl-&gt;QueryInterface(pDispatch,</div><div class='del'>-                                           &amp;IID_IConnectionPointContainer,</div><div class='del'>-                                           (void**)&amp;pContainer);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError,</div><div class='del'>-                  "failed to query IConnectionPointContainer");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    hr = pContainer-&gt;lpVtbl-&gt;FindConnectionPoint(pContainer,</div><div class='del'>-                                                 &amp;iid,</div><div class='del'>-                                                 &amp;pConnectionPoint);</div><div class='del'>-    OLE_RELEASE(pContainer);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        OLE_RELEASE(pTypeInfo);</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "failed to query IConnectionPoint");</div><div class='del'>-    }</div><div class='del'>-    pIEV = EVENTSINK_Constructor();</div><div class='del'>-    pIEV-&gt;m_iid = iid;</div><div class='del'>-    hr = pConnectionPoint-&gt;lpVtbl-&gt;Advise(pConnectionPoint,</div><div class='del'>-                                          (IUnknown*)pIEV,</div><div class='del'>-                                          &amp;dwCookie);</div><div class='del'>-    if (FAILED(hr)) {</div><div class='del'>-        ole_raise(hr, rb_eRuntimeError, "Advise Error");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, struct oleeventdata, poleev);</div><div class='del'>-    poleev-&gt;pEvent = pIEV;</div><div class='del'>-    poleev-&gt;pEvent-&gt;m_event_id</div><div class='del'>-        = NUM2INT(rb_funcall(ary_ole_event, rb_intern("length"), 0));</div><div class='del'>-    poleev-&gt;pEvent-&gt;pConnectionPoint = pConnectionPoint;</div><div class='del'>-    poleev-&gt;pEvent-&gt;pTypeInfo = pTypeInfo;</div><div class='del'>-    poleev-&gt;pEvent-&gt;m_dwCookie = dwCookie;</div><div class='del'>-    poleev-&gt;freed = 0;</div><div class='del'>-    poleev-&gt;pEvent-&gt;ptr_freed = &amp;(poleev-&gt;freed);</div><div class='del'>-    rb_ary_push(ary_ole_event, self);</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'>- *     WIN32OLE_EVENT.message_loop</div><div class='del'>- * </div><div class='del'>- *  Translates and dispatches Windows message.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fev_s_msg_loop(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    ole_msg_loop();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-add_event_call_back(obj, event, data)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE event;</div><div class='del'>-    VALUE data;</div><div class='del'>-{</div><div class='del'>-    long at;</div><div class='del'>-    VALUE events = rb_ivar_get(obj, id_events);</div><div class='del'>-    if (NIL_P(events) || TYPE(events) != T_ARRAY) {</div><div class='del'>-        events = rb_ary_new();</div><div class='del'>-        rb_ivar_set(obj, id_events, events);</div><div class='del'>-    }</div><div class='del'>-    at = ole_search_event_at(events, event);</div><div class='del'>-    if (at &gt; -1) {</div><div class='del'>-        rb_ary_delete_at(events, at);</div><div class='del'>-    }</div><div class='del'>-    rb_ary_push(events, data);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-ev_on_event(argc, argv, self, is_ary_arg)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE self;</div><div class='del'>-    VALUE is_ary_arg;</div><div class='del'>-{</div><div class='del'>-    VALUE event, args, data;</div><div class='del'>-    rb_scan_args(argc, argv, "01*", &amp;event, &amp;args);</div><div class='del'>-    if(!NIL_P(event)) {</div><div class='del'>-        Check_SafeStr(event);</div><div class='del'>-    }</div><div class='del'>-    data = rb_ary_new3(4, rb_block_proc(), event, args, is_ary_arg);</div><div class='del'>-    add_event_call_back(self, event, data);</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'>- *     WIN32OLE_EVENT#on_event([event]){...}</div><div class='del'>- * </div><div class='del'>- *  Defines the callback event.</div><div class='del'>- *  If argument is omitted, this method defines the callback of all events.</div><div class='del'>- *    ie = WIN32OLE.new('InternetExplorer.Application')</div><div class='del'>- *    ev = WIN32OLE_EVENT.new(ie, 'DWebBrowserEvents')</div><div class='del'>- *    ev.on_event("NavigateComplete") {|url| puts url}</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fev_on_event(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'>-    return ev_on_event(argc, argv, self, Qfalse);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     WIN32OLE_EVENT#on_event_with_outargs([event]){...}</div><div class='del'>- * </div><div class='del'>- *  Defines the callback of event.</div><div class='del'>- *  If you want modify argument in callback, </div><div class='del'>- *  you should use this method instead of WIN32OLE_EVENT#on_event.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-fev_on_event_with_outargs(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'>-    return ev_on_event(argc, argv, self, Qtrue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_win32ole()</div><div class='del'>-{</div><div class='del'>-    rb_global_variable(&amp;ary_ole_event);</div><div class='del'>-    ary_ole_event = rb_ary_new();</div><div class='del'>-    id_events = rb_intern("events");</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;com_hash);</div><div class='del'>-    com_vtbl.QueryInterface = QueryInterface;</div><div class='del'>-    com_vtbl.AddRef = AddRef;</div><div class='del'>-    com_vtbl.Release = Release;</div><div class='del'>-    com_vtbl.GetTypeInfoCount = GetTypeInfoCount;</div><div class='del'>-    com_vtbl.GetTypeInfo = GetTypeInfo;</div><div class='del'>-    com_vtbl.GetIDsOfNames = GetIDsOfNames;</div><div class='del'>-    com_vtbl.Invoke = Invoke;</div><div class='del'>-</div><div class='del'>-    message_filter.QueryInterface = mf_QueryInterface;</div><div class='del'>-    message_filter.AddRef = mf_AddRef;</div><div class='del'>-    message_filter.Release = mf_Release;</div><div class='del'>-    message_filter.HandleInComingCall = mf_HandleInComingCall;</div><div class='del'>-    message_filter.RetryRejectedCall = mf_RetryRejectedCall;</div><div class='del'>-    message_filter.MessagePending = mf_MessagePending;</div><div class='del'>-</div><div class='del'>-    com_hash = Data_Wrap_Struct(rb_cData, rb_mark_hash, st_free_table, st_init_numtable());</div><div class='del'>-</div><div class='del'>-    cWIN32OLE = rb_define_class("WIN32OLE", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cWIN32OLE, fole_s_allocate);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE, "initialize", fole_initialize, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE, "connect", fole_s_connect, -1);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE, "const_load", fole_s_const_load, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE, "ole_free", fole_s_free, 1);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE, "ole_reference_count", fole_s_reference_count, 1);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE, "ole_show_help", fole_s_show_help, -1);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE, "codepage", fole_s_get_code_page, 0);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE, "codepage=", fole_s_set_code_page, 1);</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE, "invoke", fole_invoke, -1);</div><div class='del'>-    rb_define_method(cWIN32OLE, "[]", fole_getproperty, -1);</div><div class='del'>-    rb_define_method(cWIN32OLE, "_invoke", fole_invoke2, 3);</div><div class='del'>-    rb_define_method(cWIN32OLE, "_getproperty", fole_getproperty2, 3);</div><div class='del'>-    rb_define_method(cWIN32OLE, "_setproperty", fole_setproperty2, 3);</div><div class='del'>-</div><div class='del'>-    /* support propput method that takes an argument */</div><div class='del'>-    rb_define_method(cWIN32OLE, "[]=", fole_setproperty, -1); </div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE, "ole_free", fole_free, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE, "each", fole_each, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE, "method_missing", fole_missing, -1);</div><div class='del'>-</div><div class='del'>-    /* support setproperty method much like Perl ;-) */</div><div class='del'>-    rb_define_method(cWIN32OLE, "setproperty", fole_setproperty, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE, "ole_methods", fole_methods, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE, "ole_get_methods", fole_get_methods, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE, "ole_put_methods", fole_put_methods, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE, "ole_func_methods", fole_func_methods, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE, "ole_method", fole_method_help, 1);</div><div class='del'>-    rb_define_alias(cWIN32OLE, "ole_method_help", "ole_method");</div><div class='del'>-    rb_define_method(cWIN32OLE, "ole_obj_help", fole_obj_help, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE, "ole_activex_initialize", fole_activex_initialize, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_const(cWIN32OLE, "VERSION", rb_str_new2(WIN32OLE_VERSION));</div><div class='del'>-    rb_define_const(cWIN32OLE, "ARGV", rb_ary_new());</div><div class='del'>-    rb_define_const(cWIN32OLE, "CP_ACP"       ,INT2FIX(CP_ACP));</div><div class='del'>-    rb_define_const(cWIN32OLE, "CP_OEMCP"     ,INT2FIX(CP_OEMCP));</div><div class='del'>-    rb_define_const(cWIN32OLE, "CP_MACCP"     ,INT2FIX(CP_MACCP));</div><div class='del'>-    rb_define_const(cWIN32OLE, "CP_THREAD_ACP",INT2FIX(CP_THREAD_ACP));</div><div class='del'>-    rb_define_const(cWIN32OLE, "CP_SYMBOL"    ,INT2FIX(CP_SYMBOL));</div><div class='del'>-    rb_define_const(cWIN32OLE, "CP_UTF7"      ,INT2FIX(CP_UTF7));</div><div class='del'>-    rb_define_const(cWIN32OLE, "CP_UTF8"      ,INT2FIX(CP_UTF8));</div><div class='del'>-</div><div class='del'>-    mWIN32OLE_VARIANT = rb_define_module_under(cWIN32OLE, "VARIANT");</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_I2", INT2FIX(VT_I2));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_I4", INT2FIX(VT_I4));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_R4", INT2FIX(VT_R4));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_R8", INT2FIX(VT_R8));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_CY", INT2FIX(VT_CY));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_DATE", INT2FIX(VT_DATE));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_BSTR", INT2FIX(VT_BSTR));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_USERDEFINED", INT2FIX(VT_USERDEFINED));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_PTR", INT2FIX(VT_PTR));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_DISPATCH", INT2FIX(VT_DISPATCH));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_ERROR", INT2FIX(VT_ERROR));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_BOOL", INT2FIX(VT_BOOL));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_VARIANT", INT2FIX(VT_VARIANT));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_UNKNOWN", INT2FIX(VT_UNKNOWN));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_I1", INT2FIX(VT_I1));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_UI1", INT2FIX(VT_UI1));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_UI2", INT2FIX(VT_UI2));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_UI4", INT2FIX(VT_UI4));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_INT", INT2FIX(VT_INT));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_UINT", INT2FIX(VT_UINT));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_ARRAY", INT2FIX(VT_ARRAY));</div><div class='del'>-    rb_define_const(mWIN32OLE_VARIANT, "VT_BYREF", INT2FIX(VT_BYREF));</div><div class='del'>-    </div><div class='del'>-    cWIN32OLE_TYPE = rb_define_class("WIN32OLE_TYPE", rb_cObject);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE_TYPE, "ole_classes", foletype_s_ole_classes, 1);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE_TYPE, "typelibs", foletype_s_typelibs, 0);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE_TYPE, "progids", foletype_s_progids, 0);</div><div class='del'>-    rb_define_alloc_func(cWIN32OLE_TYPE, foletype_s_allocate);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "initialize", foletype_initialize, 2);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "name", foletype_name, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "ole_type", foletype_ole_type, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "guid", foletype_guid, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "progid", foletype_progid, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "visible?", foletype_visible, 0);</div><div class='del'>-    rb_define_alias(cWIN32OLE_TYPE, "to_s", "name");</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "major_version", foletype_major_version, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "minor_version", foletype_minor_version, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "typekind", foletype_typekind, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "helpstring", foletype_helpstring, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "src_type", foletype_src_type, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "helpfile", foletype_helpfile, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "helpcontext", foletype_helpcontext, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "variables", foletype_variables, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_TYPE, "ole_methods", foletype_methods, -1);</div><div class='del'>-</div><div class='del'>-    cWIN32OLE_VARIABLE = rb_define_class("WIN32OLE_VARIABLE", rb_cObject);</div><div class='del'>-    rb_define_method(cWIN32OLE_VARIABLE, "name", folevariable_name, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_VARIABLE, "ole_type", folevariable_ole_type, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_VARIABLE, "ole_type_detail", folevariable_ole_type_detail, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_VARIABLE, "value", folevariable_value, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_VARIABLE, "visible?", folevariable_visible, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_VARIABLE, "variable_kind", folevariable_variable_kind, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_VARIABLE, "varkind", folevariable_varkind, 0);</div><div class='del'>-    rb_define_alias(cWIN32OLE_VARIABLE, "to_s", "name");</div><div class='del'>-</div><div class='del'>-    cWIN32OLE_METHOD = rb_define_class("WIN32OLE_METHOD", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(cWIN32OLE_METHOD, folemethod_s_allocate);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "initialize", folemethod_initialize, 2);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "name", folemethod_name, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "return_type", folemethod_return_type, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "return_vtype", folemethod_return_vtype, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "return_type_detail", folemethod_return_type_detail, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "invoke_kind", folemethod_invoke_kind, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "invkind", folemethod_invkind, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "visible?", folemethod_visible, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "event?", folemethod_event, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "event_interface", folemethod_event_interface, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "helpstring", folemethod_helpstring, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "helpfile", folemethod_helpfile, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "helpcontext", folemethod_helpcontext, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "dispid", folemethod_dispid, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "offset_vtbl", folemethod_offset_vtbl, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "size_params", folemethod_size_params, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "size_opt_params", folemethod_size_opt_params, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_METHOD, "params", folemethod_params, 0);</div><div class='del'>-    rb_define_alias(cWIN32OLE_METHOD, "to_s", "name");</div><div class='del'>-</div><div class='del'>-    cWIN32OLE_PARAM = rb_define_class("WIN32OLE_PARAM", rb_cObject);</div><div class='del'>-    rb_define_method(cWIN32OLE_PARAM, "name", foleparam_name, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_PARAM, "ole_type", foleparam_ole_type, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_PARAM, "ole_type_detail", foleparam_ole_type_detail, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_PARAM, "input?", foleparam_input, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_PARAM, "output?", foleparam_output, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_PARAM, "optional?", foleparam_optional, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_PARAM, "retval?", foleparam_retval, 0);</div><div class='del'>-    rb_define_method(cWIN32OLE_PARAM, "default", foleparam_default, 0);</div><div class='del'>-    rb_define_alias(cWIN32OLE_PARAM, "to_s", "name");</div><div class='del'>- </div><div class='del'>-    cWIN32OLE_EVENT = rb_define_class("WIN32OLE_EVENT", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(cWIN32OLE_EVENT, fev_s_allocate);</div><div class='del'>-    rb_define_method(cWIN32OLE_EVENT, "initialize", fev_initialize, -1);</div><div class='del'>-    rb_define_singleton_method(cWIN32OLE_EVENT, "message_loop", fev_s_msg_loop, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(cWIN32OLE_EVENT, "on_event", fev_on_event, -1);</div><div class='del'>-    rb_define_method(cWIN32OLE_EVENT, "on_event_with_outargs", fev_on_event_with_outargs, -1);</div><div class='del'>-    eWIN32OLE_RUNTIME_ERROR = rb_define_class("WIN32OLERuntimeError", rb_eRuntimeError);</div><div class='del'>-}</div><div class='head'>diff --git a/ext/zlib/.cvsignore b/ext/zlib/.cvsignore<br/>deleted file mode 100644<br/>index 4088712231..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/zlib/.cvsignore?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/zlib/.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/zlib/doc/zlib.rd b/ext/zlib/doc/zlib.rd<br/>deleted file mode 100644<br/>index 6a36dc7fed..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/zlib/doc/zlib.rd?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/zlib/doc/zlib.rd</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,911 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-#</div><div class='del'>-# zlib.rd.src</div><div class='del'>-#</div><div class='del'>-#   Copyright (C) UENO Katsuhiro 2000-2003</div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-= Ruby/zlib version 0.6.0</div><div class='del'>-</div><div class='del'>-Ruby/zlib is an extension library to use zlib from Ruby.</div><div class='del'>-Ruby/zlib also provides the features for accessing gzipped files.</div><div class='del'>-</div><div class='del'>-You can modify or redistribute Ruby/zlib in the same manner of</div><div class='del'>-Ruby interpreter. The latest version of Ruby/zlib would be found</div><div class='del'>-at ((&lt;URL:http://www.blue.sky.or.jp/&gt;)).</div><div class='del'>-</div><div class='del'>-Any comments and suggestions are always welcome. Please send</div><div class='del'>-them to ruby-list ML, ruby-ext ML, ruby-talk ML, or the author's</div><div class='del'>-mail address ((&lt;URL:mailto:katsu@blue.sky.or.jp&gt;)).</div><div class='del'>-</div><div class='del'>-This document is experimental and broken English version.</div><div class='del'>-If you find some mistakes or strange expressions (including</div><div class='del'>-kidding or unnatural ones) in this document, please let me know</div><div class='del'>-for my study.</div><div class='del'>-</div><div class='del'>-* ((&lt;Zlib&gt;))</div><div class='del'>-</div><div class='del'>-  * ((&lt;Zlib::Error&gt;))</div><div class='del'>-  * ((&lt;Zlib::ZStream&gt;))</div><div class='del'>-  * ((&lt;Zlib::Deflate&gt;))</div><div class='del'>-  * ((&lt;Zlib::Inflate&gt;))</div><div class='del'>-  * ((&lt;Zlib::GzipFile&gt;))</div><div class='del'>-  * ((&lt;Zlib::GzipFile::Error&gt;))</div><div class='del'>-  * ((&lt;Zlib::GzipWriter&gt;))</div><div class='del'>-  * ((&lt;Zlib::GzipReader&gt;))</div><div class='del'>-</div><div class='del'>-* ((&lt;Changes from 0.5 to 0.6&gt;))</div><div class='del'>-* ((&lt;Changes from 0.4 to 0.5&gt;))</div><div class='del'>-</div><div class='del'>-== Zlib</div><div class='del'>-</div><div class='del'>-Zlib is the module which provides the other features in zlib C</div><div class='del'>-library. See zlib.h for detail of each module function.</div><div class='del'>-</div><div class='del'>-=== Module Functions:</div><div class='del'>-</div><div class='del'>---- Zlib.zlib_version</div><div class='del'>-</div><div class='del'>-    Returns the string which represents the version of zlib</div><div class='del'>-    library.</div><div class='del'>-</div><div class='del'>---- Zlib.adler32([string[, adler]])</div><div class='del'>-</div><div class='del'>-    Calculates Alder-32 checksum for ((|string|)),</div><div class='del'>-    and returns updated value of ((|alder|)).</div><div class='del'>-    If ((|string|)) is omitted, it returns the Adler-32 initial</div><div class='del'>-    value. If ((|alder|)) is omitted, it assumes that the initial</div><div class='del'>-    value is given to ((|alder|)).</div><div class='del'>-</div><div class='del'>---- Zlib.crc32([string[, crc]])</div><div class='del'>-</div><div class='del'>-    Calculates CRC checksum for ((|string|)), and returns</div><div class='del'>-    updated value of ((|crc|)). If ((|string|)) is omitted,</div><div class='del'>-    it returns the CRC initial value. ((|crc|)) is omitted,</div><div class='del'>-    it assumes that the initial value is given to ((|crc|)).</div><div class='del'>-</div><div class='del'>---- Zlib.crc_table</div><div class='del'>-</div><div class='del'>-    Returns the table for calculating CRC checksum as an array.</div><div class='del'>-</div><div class='del'>-=== Constants:</div><div class='del'>-</div><div class='del'>---- Zlib::VERSION</div><div class='del'>-</div><div class='del'>-    The Ruby/zlib version string.</div><div class='del'>-</div><div class='del'>---- Zlib::ZLIB_VERSION</div><div class='del'>-</div><div class='del'>-    The string which represents the version of zlib.h.</div><div class='del'>-</div><div class='del'>---- Zlib::BINARY</div><div class='del'>---- Zlib::ASCII</div><div class='del'>---- Zlib::UNKNOWN</div><div class='del'>-</div><div class='del'>-    The integers representing data types which</div><div class='del'>-    ((&lt;Zlib::ZStream#data_type&gt;)) method returns.</div><div class='del'>-</div><div class='del'>---- Zlib::NO_COMPRESSION</div><div class='del'>---- Zlib::BEST_SPEED</div><div class='del'>---- Zlib::BEST_COMPRESSION</div><div class='del'>---- Zlib::DEFAULT_COMPRESSION</div><div class='del'>-</div><div class='del'>-    The integers representing compression levels which are</div><div class='del'>-    an argument for ((&lt;Zlib::Deflate.new&gt;)),</div><div class='del'>-    ((&lt;Zlib::Deflate#deflate&gt;)), and so on.</div><div class='del'>-</div><div class='del'>---- Zlib::FILTERED</div><div class='del'>---- Zlib::HUFFMAN_ONLY</div><div class='del'>---- Zlib::DEFAULT_STRATEGY</div><div class='del'>-</div><div class='del'>-    The integers representing compression methods which are</div><div class='del'>-    an argument for ((&lt;Zlib::Deflate.new&gt;)) and</div><div class='del'>-    ((&lt;Zlib::Deflate#params&gt;)).</div><div class='del'>-</div><div class='del'>---- Zlib::DEF_MEM_LEVEL</div><div class='del'>---- Zlib::MAX_MEM_LEVEL</div><div class='del'>-</div><div class='del'>-    The integers representing memory levels which are an</div><div class='del'>-    argument for ((&lt;Zlib::Deflate.new&gt;)),</div><div class='del'>-    ((&lt;Zlib::Deflate#params&gt;)), and so on.</div><div class='del'>-</div><div class='del'>---- Zlib::MAX_WBITS</div><div class='del'>-</div><div class='del'>-    The default value of ((|windowBits|)) which is an argument for</div><div class='del'>-    ((&lt;Zlib::Deflate.new&gt;)) and ((&lt;Zlib::Inflate.new&gt;)).</div><div class='del'>-</div><div class='del'>---- Zlib::NO_FLUSH</div><div class='del'>---- Zlib::SYNC_FLUSH</div><div class='del'>---- Zlib::FULL_FLUSH</div><div class='del'>---- Zlib::FINISH</div><div class='del'>-</div><div class='del'>-    The integers to control the output of the deflate stream,</div><div class='del'>-    which are an argument for ((&lt;Zlib::Deflate#deflate&gt;)) and so on.</div><div class='del'>-</div><div class='del'>---- Zlib::OS_CODE</div><div class='del'>---- Zlib::OS_MSDOS</div><div class='del'>---- Zlib::OS_AMIGA</div><div class='del'>---- Zlib::OS_VMS</div><div class='del'>---- Zlib::OS_UNIX</div><div class='del'>---- Zlib::OS_VMCMS</div><div class='del'>---- Zlib::OS_ATARI</div><div class='del'>---- Zlib::OS_OS2</div><div class='del'>---- Zlib::OS_MACOS</div><div class='del'>---- Zlib::OS_ZSYSTEM</div><div class='del'>---- Zlib::OS_CPM</div><div class='del'>---- Zlib::OS_TOPS20</div><div class='del'>---- Zlib::OS_WIN32</div><div class='del'>---- Zlib::OS_QDOS</div><div class='del'>---- Zlib::OS_RISCOS</div><div class='del'>---- Zlib::OS_UNKNOWN</div><div class='del'>-</div><div class='del'>-    The return values of ((&lt;Zlib::GzipFile#os_code&gt;)) method.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Zlib::Error</div><div class='del'>-</div><div class='del'>-The superclass for all exceptions raised by Ruby/zlib.</div><div class='del'>-</div><div class='del'>-The following exceptions are defined as subclasses of Zlib::Error.</div><div class='del'>-These exceptions are raised when zlib library functions return</div><div class='del'>-with an error status.</div><div class='del'>-</div><div class='del'>-  * Zlib::StreamEnd</div><div class='del'>-  * Zlib::NeedDict</div><div class='del'>-  * Zlib::DataError</div><div class='del'>-  * Zlib::StreamError</div><div class='del'>-  * Zlib::MemError</div><div class='del'>-  * Zlib::BufError</div><div class='del'>-  * Zlib::VersionError</div><div class='del'>-</div><div class='del'>-=== SuperClass:</div><div class='del'>-</div><div class='del'>-* StandardError</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Zlib::ZStream</div><div class='del'>-</div><div class='del'>-The abstract class for the stream which handles the compressed</div><div class='del'>-data. The operations are defined in the subclasses,</div><div class='del'>-((&lt;Zlib::Deflate&gt;)) for compression, and ((&lt;Zlib::Inflate&gt;))</div><div class='del'>-for decompression.</div><div class='del'>-</div><div class='del'>-An instance of Zlib::ZStream has one stream (struct zstream) and</div><div class='del'>-two variable-length buffers which associated to the input</div><div class='del'>-(next_in) of the stream and the output (next_out) of the stream.</div><div class='del'>-In this document, "input buffer" means the buffer for input, and</div><div class='del'>-"output buffer" means the buffer for output.</div><div class='del'>-</div><div class='del'>-Data inputed into an instance of Zlib::ZStream are temporally</div><div class='del'>-stored into the end of input buffer, and then data in input buffer</div><div class='del'>-are processed from the beginning of the buffer until no more</div><div class='del'>-output from the stream is produced (i.e. until avail_out &gt; 0</div><div class='del'>-after processing). During processing, output buffer is allocated</div><div class='del'>-and expanded automatically to hold all output data.</div><div class='del'>-</div><div class='del'>-Some particular instance methods consume the data in output buffer</div><div class='del'>-and return them as a String.</div><div class='del'>-</div><div class='del'>-Here is an ascii art for describing above:</div><div class='del'>-</div><div class='del'>-     +================ an instance of Zlib::ZStream ================+</div><div class='del'>-     ||                                                            ||</div><div class='del'>-     ||     +--------+          +-------+          +--------+      ||</div><div class='del'>-     ||  +--| output |&lt;---------|zstream|&lt;---------| input  |&lt;--+  ||</div><div class='del'>-     ||  |  | buffer |  next_out+-------+next_in   | buffer |   |  ||</div><div class='del'>-     ||  |  +--------+                             +--------+   |  ||</div><div class='del'>-     ||  |                                                      |  ||</div><div class='del'>-     +===|======================================================|===+</div><div class='del'>-         |                                                      |</div><div class='del'>-         v                                                      |</div><div class='del'>-     "output data"                                         "input data"</div><div class='del'>-</div><div class='del'>-If an error is occurred during processing input buffer,</div><div class='del'>-an exception which is a subclass of ((&lt;Zlib::Error&gt;)) is raised.</div><div class='del'>-At that time, both input and output buffer keeps their conditions</div><div class='del'>-at the time when the error is occurred.</div><div class='del'>-</div><div class='del'>-=== SuperClass:</div><div class='del'>-</div><div class='del'>-* Object</div><div class='del'>-</div><div class='del'>-=== Class Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream.new</div><div class='del'>-</div><div class='del'>-    See ((&lt;Zlib::Deflate.new&gt;)) and ((&lt;Zlib::Inflate.new&gt;)).</div><div class='del'>-</div><div class='del'>-=== Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#avail_in</div><div class='del'>-</div><div class='del'>-    Returns bytes of data in input buffer.</div><div class='del'>-    Normally, returns 0.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#avail_out</div><div class='del'>-</div><div class='del'>-    Returns bytes of free spaces in output buffer.</div><div class='del'>-    Because the free spaces are allocated automatically,</div><div class='del'>-    this method returns 0 normally.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#avail_out = size</div><div class='del'>-</div><div class='del'>-    Allocates free spaces of ((|size|)) bytes in output buffer.</div><div class='del'>-    If there are more than ((|size|)) bytes spaces in the buffer,</div><div class='del'>-    the buffer is truncated.</div><div class='del'>-    Because the free spaces are allocated automatically,</div><div class='del'>-    you usually need not to use this method.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#flush_next_in</div><div class='del'>-</div><div class='del'>-    Flushes input buffer and returns all data in that buffer.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#flush_next_out</div><div class='del'>-</div><div class='del'>-    Flushes output buffer and returns all data in that buffer.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#total_in</div><div class='del'>-</div><div class='del'>-    Returns the total bytes of the input data to the stream.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#total_out</div><div class='del'>-</div><div class='del'>-    Returns the total bytes of the output data from the stream.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#data_type</div><div class='del'>-</div><div class='del'>-    Guesses the type of the data which have been inputed into</div><div class='del'>-    the stream. The returned value is either ((&lt;Zlib::BINARY&gt;)),</div><div class='del'>-    ((&lt;Zlib::ASCII&gt;)), or ((&lt;Zlib::UNKNOWN&gt;)).</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#adler</div><div class='del'>-</div><div class='del'>-    Returns the alder-32 checksum.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#reset</div><div class='del'>-</div><div class='del'>-    Resets and initializes the stream. All data in both</div><div class='del'>-    input and output buffer are discarded.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#finish</div><div class='del'>-</div><div class='del'>-    Finishes the stream and flushes output buffer.</div><div class='del'>-    See ((&lt;Zlib::Deflate#finish&gt;)) and ((&lt;Zlib::Inflate#finish&gt;))</div><div class='del'>-    for detail of the behavior.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#finished?</div><div class='del'>---- Zlib::ZStream#stream_end?</div><div class='del'>-</div><div class='del'>-    Returns true if the stream is finished.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#close</div><div class='del'>---- Zlib::ZStream#end</div><div class='del'>-</div><div class='del'>-    Closes the stream. All operations on the closed stream</div><div class='del'>-    will raise an exception.</div><div class='del'>-</div><div class='del'>---- Zlib::ZStream#closed?</div><div class='del'>---- Zlib::ZStream#ended?</div><div class='del'>-</div><div class='del'>-    Returns true if the stream closed.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Zlib::Deflate</div><div class='del'>-</div><div class='del'>-The class for compressing string data.</div><div class='del'>-</div><div class='del'>-=== SuperClass:</div><div class='del'>-</div><div class='del'>-* ((&lt;Zlib::ZStream&gt;))</div><div class='del'>-</div><div class='del'>-=== Class Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate.deflate(string[, level])</div><div class='del'>-</div><div class='del'>-    Compresses ((|string|)). The avail values of ((|level|)) are</div><div class='del'>-    ((&lt;Zlib::NO_COMPRESSION&gt;)), ((&lt;Zlib::BEST_SPEED&gt;)),</div><div class='del'>-    ((&lt;Zlib::BEST_COMPRESSION&gt;)), ((&lt;Zlib::DEFAULT_COMPRESSION&gt;)),</div><div class='del'>-    and the integer from 0 to 9.</div><div class='del'>-</div><div class='del'>-    This method is almost equivalent to the following code:</div><div class='del'>-</div><div class='del'>-      def deflate(string, level)</div><div class='del'>-        z = Zlib::Deflate.new(level)</div><div class='del'>-        dst = z.deflate(string, Zlib::FINISH)</div><div class='del'>-        z.close</div><div class='del'>-        dst</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate.new([level[, windowBits[, memlevel[, strategy]]]])</div><div class='del'>-</div><div class='del'>-    Creates a new deflate stream for compression.</div><div class='del'>-    See zlib.h for details of each argument.</div><div class='del'>-    If an argument is nil, the default value of that</div><div class='del'>-    argument is used.</div><div class='del'>-</div><div class='del'>-=== Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate#clone</div><div class='del'>-</div><div class='del'>-    Duplicates the deflate stream.</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate#deflate(string[, flush])</div><div class='del'>-</div><div class='del'>-    Inputs ((|string|)) into the deflate stream and returns</div><div class='del'>-    the output from the stream. Calling this method,</div><div class='del'>-    both input and output buffer of the stream are flushed.</div><div class='del'>-    If ((|string|)) is nil, this method finishes the stream,</div><div class='del'>-    just like ((&lt;Zlib::ZStream#finish&gt;)).</div><div class='del'>-    The value of ((|flush|)) should be either ((&lt;Zlib::NO_FLUSH&gt;)),</div><div class='del'>-    ((&lt;Zlib::SYNC_FLUSH&gt;)), ((&lt;Zlib::FULL_FLUSH&gt;)), or</div><div class='del'>-    ((&lt;Zlib::FINISH&gt;)).</div><div class='del'>-    See zlib.h for details.</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate#&lt;&lt; string</div><div class='del'>-</div><div class='del'>-    Inputs ((|string|)) into the deflate stream just like</div><div class='del'>-    ((&lt;Zlib::Deflate#deflate&gt;)), but returns Zlib::Deflate object</div><div class='del'>-    itself. The output from the stream is preserved in output</div><div class='del'>-    buffer.</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate#flush([flush])</div><div class='del'>-</div><div class='del'>-    This method is equivalent to (({deflate('', ((|flush|)))})).</div><div class='del'>-    If ((|flush|)) is omitted, ((&lt;Zlib::SYNC_FLUSH&gt;)) is used</div><div class='del'>-    as ((|flush|)). This method is just provided for</div><div class='del'>-    readability of your Ruby script.</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate#finish</div><div class='del'>-</div><div class='del'>-    Finishes the stream. This method is equivalent to</div><div class='del'>-    (({deflate('', Zlib::FINISH)})).</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate#params(level, strategy)</div><div class='del'>-</div><div class='del'>-    Changes the parameters of the deflate stream.</div><div class='del'>-    See zlib.h for details. The output from the stream</div><div class='del'>-    by changing the params is preserved in output buffer.</div><div class='del'>-</div><div class='del'>---- Zlib::Deflate#set_dictionary(string)</div><div class='del'>-</div><div class='del'>-    Sets the preset dictionary and returns ((|string|)).</div><div class='del'>-    This method is available just only after</div><div class='del'>-    ((&lt;Zlib::Deflate.new&gt;)) or ((&lt;Zlib::ZStream#reset&gt;)) method</div><div class='del'>-    was called. See zlib.h for details.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Zlib::Inflate</div><div class='del'>-</div><div class='del'>-The class for decompressing compressed data.</div><div class='del'>-Unlike ((&lt;Zlib::Deflate&gt;)), an instance of this class is not able</div><div class='del'>-to duplicate (clone, dup) itself.</div><div class='del'>-</div><div class='del'>-=== SuperClass:</div><div class='del'>-</div><div class='del'>-* ((&lt;Zlib::ZStream&gt;))</div><div class='del'>-</div><div class='del'>-=== Class Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::Inflate.inflate(string)</div><div class='del'>-</div><div class='del'>-    Decompresses ((|string|)). Raises a ((&lt;Zlib::NeedDict&gt;))</div><div class='del'>-    exception if a preset dictionary is needed for decompression.</div><div class='del'>-</div><div class='del'>-    This method is almost equivalent to the following code:</div><div class='del'>-</div><div class='del'>-      def inflate(string)</div><div class='del'>-        zstream = Zlib::Inflate.new</div><div class='del'>-        buf = zstream.inflate(string)</div><div class='del'>-        zstream.finish</div><div class='del'>-        zstream.close</div><div class='del'>-        buf</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>---- Zlib::Inflate.new([windowBits])</div><div class='del'>-</div><div class='del'>-    Creates a new inflate stream for decompression.</div><div class='del'>-    See zlib.h for details of the argument.</div><div class='del'>-    If ((|windowBits|)) is nil, the default value is used.</div><div class='del'>-</div><div class='del'>-=== Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::Inflate#inflate(string)</div><div class='del'>-</div><div class='del'>-    Inputs ((|string|)) into the inflate stream and returns</div><div class='del'>-    the output from the stream. Calling this method,</div><div class='del'>-    both input and output buffer of the stream are flushed.</div><div class='del'>-    If ((|string|)) is nil, this method finishes the stream,</div><div class='del'>-    just like ((&lt;Zlib::ZStream#finish&gt;)).</div><div class='del'>-</div><div class='del'>-    Raises a ((&lt;Zlib::NeedDict&gt;)) exception if a preset</div><div class='del'>-    dictionary is needed to decompress. Set the dictionary</div><div class='del'>-    by ((&lt;Zlib::Inflate#set_dictionary&gt;)) and then call</div><div class='del'>-    this method again with an empty string.</div><div class='del'>-</div><div class='del'>---- Zlib::Inflate#&lt;&lt; string</div><div class='del'>-</div><div class='del'>-    Inputs ((|string|)) into the inflate stream just like</div><div class='del'>-    ((&lt;Zlib::Inflate#inflate&gt;)), but returns Zlib::Inflate object</div><div class='del'>-    itself. The output from the stream is preserved in output</div><div class='del'>-    buffer.</div><div class='del'>-</div><div class='del'>---- Zlib::Inflate#finish</div><div class='del'>-</div><div class='del'>-    Finishes the inflate stream and returns the garbage</div><div class='del'>-    following the compressed data. Raises an exception</div><div class='del'>-    if the stream is not finished</div><div class='del'>-    (i.e. ((&lt;Zlib::ZStream#finished?&gt;)) doesn't returns true).</div><div class='del'>-</div><div class='del'>-    The inflate stream finishes itself as soon as it meets</div><div class='del'>-    the end code of the compressed data, you need not to call</div><div class='del'>-    this method explicitly. However, this method is useful</div><div class='del'>-    for checking whether the data is correctly ended or not.</div><div class='del'>-</div><div class='del'>---- Zlib::Inflate#set_dictionary(string)</div><div class='del'>-</div><div class='del'>-    Sets the preset dictionary and returns ((|string|))</div><div class='del'>-    This method is available just only after a ((&lt;Zlib::NeedDict&gt;))</div><div class='del'>-    exception was raised. See zlib.h for details.</div><div class='del'>-</div><div class='del'>---- Zlib::Inflate#sync(string)</div><div class='del'>-</div><div class='del'>-    Inputs ((|string|)) into the end of input buffer and</div><div class='del'>-    skips data until a full flush point can be found.</div><div class='del'>-    If the point is found in the buffer, this method flushes</div><div class='del'>-    the buffer and returns false. Otherwise it returns true</div><div class='del'>-    and the following data of full flush point is preserved</div><div class='del'>-    in the buffer.</div><div class='del'>-</div><div class='del'>---- Zlib::Inflate#sync_point?</div><div class='del'>-</div><div class='del'>-    What is this?</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Zlib::GzipFile</div><div class='del'>-</div><div class='del'>-The abstract class for handling a gzip formatted compressed file.</div><div class='del'>-The operations are defined in the subclasses,</div><div class='del'>-((&lt;Zlib::GzipReader&gt;)) for reading, and ((&lt;Zlib::GzipWriter&gt;))</div><div class='del'>-for writing.</div><div class='del'>-</div><div class='del'>-GzipReader should be used with associating an instance of IO class</div><div class='del'>-(or an object which has the same methods as IO has).</div><div class='del'>-</div><div class='del'>-=== SuperClass:</div><div class='del'>-</div><div class='del'>-* Object</div><div class='del'>-</div><div class='del'>-=== Class Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile.new(args...)</div><div class='del'>-</div><div class='del'>-    See ((&lt;Zlib::GzipReader.new&gt;)) and ((&lt;Zlib::GzipWriter.new&gt;)).</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile.wrap(args...) {|gz| ... }</div><div class='del'>-</div><div class='del'>-    See ((&lt;Zlib::GzipReader.wrap&gt;)) and ((&lt;Zlib::GzipWriter.wrap&gt;)).</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile.open(args...) {|gz| ... }</div><div class='del'>-</div><div class='del'>-    See ((&lt;Zlib::GzipReader.open&gt;)) and ((&lt;Zlib::GzipWriter.open&gt;)).</div><div class='del'>-</div><div class='del'>-=== Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#closed?</div><div class='del'>---- Zlib::GzipFile#to_io</div><div class='del'>-</div><div class='del'>-    Same as IO.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#close</div><div class='del'>-</div><div class='del'>-    Closes the GzipFile object. This method calls close method</div><div class='del'>-    of the associated IO object. Returns the associated IO object.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#finish</div><div class='del'>-</div><div class='del'>-    Closes the GzipFile object. Unlike ((&lt;Zlib::GzipFile#close&gt;)),</div><div class='del'>-    this method ((*never*)) calls close method of the associated IO</div><div class='del'>-    object. Returns the associated IO object.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#crc</div><div class='del'>-</div><div class='del'>-    Returns CRC value of the uncompressed data.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#level</div><div class='del'>-</div><div class='del'>-    Returns compression level.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#mtime</div><div class='del'>-</div><div class='del'>-    Returns last modification time recorded in the gzip</div><div class='del'>-    file header.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#os_code</div><div class='del'>-</div><div class='del'>-    Returns OS code number recorded in the gzip file header.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#orig_name</div><div class='del'>-</div><div class='del'>-    Returns original filename recorded in the gzip file header,</div><div class='del'>-    or nil if original filename is not present.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#comment</div><div class='del'>-</div><div class='del'>-    Returns comments recorded in the gzip file header, or</div><div class='del'>-    nil if the comments is not present.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipFile#sync</div><div class='del'>---- Zlib::GzipFile#sync= flag</div><div class='del'>-</div><div class='del'>-    Same as IO. If ((|flag|)) is true, the associated IO object</div><div class='del'>-    must respond to flush method. While `sync' mode is true,</div><div class='del'>-    the compression ratio decreases sharply.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Zlib::GzipFile::Error</div><div class='del'>-</div><div class='del'>-The superclass for all exceptions raised during processing a gzip</div><div class='del'>-file.</div><div class='del'>-</div><div class='del'>-The following exceptions are defined as subclasses of</div><div class='del'>-Zlib::GzipFile::Error.</div><div class='del'>-</div><div class='del'>-: Zlib::GzipFile::NoFooter</div><div class='del'>-</div><div class='del'>-    Raised when gzip file footer has not found.</div><div class='del'>-</div><div class='del'>-: Zlib::GzipFile::CRCError</div><div class='del'>-</div><div class='del'>-    Raised when the CRC checksum recorded in gzip file footer</div><div class='del'>-    is not equivalent to CRC checksum of the actually</div><div class='del'>-    uncompressed data.</div><div class='del'>-</div><div class='del'>-: Zlib::GzipFile::LengthError</div><div class='del'>-</div><div class='del'>-    Raised when the data length recorded in gzip file footer</div><div class='del'>-    is not equivalent to length of the actually uncompressed data.</div><div class='del'>-</div><div class='del'>-=== SuperClass:</div><div class='del'>-</div><div class='del'>-* ((&lt;Zlib::Error&gt;))</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Zlib::GzipReader</div><div class='del'>-</div><div class='del'>-The class for reading a gzipped file. GzipReader should be used</div><div class='del'>-with associating an instance of IO class (or an object which has</div><div class='del'>-the same methods as IO has).</div><div class='del'>-</div><div class='del'>-    Zlib::GzipReader.open('hoge.gz') {|gz|</div><div class='del'>-      print gz.read</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    f = File.open('hoge.gz')</div><div class='del'>-    gz = Zlib::GzipReader.new(f)</div><div class='del'>-    print gz.read</div><div class='del'>-    gz.close</div><div class='del'>-</div><div class='del'>-=== SuperClass:</div><div class='del'>-</div><div class='del'>-* ((&lt;Zlib::GzipFile&gt;))</div><div class='del'>-</div><div class='del'>-=== Included Modules:</div><div class='del'>-</div><div class='del'>-* Enumerable</div><div class='del'>-</div><div class='del'>-=== Class Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::GzipReader.new(io)</div><div class='del'>-</div><div class='del'>-    Creates a GzipReader object associated with ((|io|)).</div><div class='del'>-    The GzipReader object reads gzipped data from ((|io|)),</div><div class='del'>-    and parses/decompresses them. At least, ((|io|)) must have</div><div class='del'>-    read method that behaves same as read method in IO class.</div><div class='del'>-</div><div class='del'>-    If the gzip file header is incorrect, raises an</div><div class='del'>-    ((&lt;Zlib::GzipFile::Error&gt;)) exception.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipReader.wrap(io) {|gz| ... }</div><div class='del'>-</div><div class='del'>-    Creates a GzipReader object associated with ((|io|)), and</div><div class='del'>-    executes the block with the newly created GzipReader object,</div><div class='del'>-    just like File::open. The GzipReader object will be closed</div><div class='del'>-    automatically after executing the block. If you want to keep</div><div class='del'>-    the associated IO object opening, you may call</div><div class='del'>-    ((&lt;Zlib::GzipFile#finish&gt;)) method in the block.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipReader.open(filename)</div><div class='del'>---- Zlib::GzipReader.open(filename) {|gz| ... }</div><div class='del'>-</div><div class='del'>-    Opens a file specified by ((|filename|)) as a gzipped file,</div><div class='del'>-    and returns a GzipReader object associated with that file.</div><div class='del'>-    Further details of this method are same as</div><div class='del'>-    ((&lt;Zlib::GzipReader.new&gt;)) and ((&lt;ZLib::GzipReader.wrap&gt;)).</div><div class='del'>-</div><div class='del'>-=== ¥á¥½¥Ã¥É:</div><div class='del'>-</div><div class='del'>---- Zlib::GzipReader#eof</div><div class='del'>---- Zlib::GzipReader#eof?</div><div class='del'>-</div><div class='del'>-    Returns true if the object reaches the end of compressed data.</div><div class='del'>-    Note that eof? does ((*not*)) return true when reaches the</div><div class='del'>-    end of ((*file*)).</div><div class='del'>-</div><div class='del'>---- Zlib::GzipReader#pos</div><div class='del'>---- Zlib::GzipReader#tell</div><div class='del'>-</div><div class='del'>-    Returns the total bytes of data decompressed until now.</div><div class='del'>-    Not that it does ((*not*)) the position of file pointer.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipReader#each([rs])</div><div class='del'>---- Zlib::GzipReader#each_line([rs])</div><div class='del'>---- Zlib::GzipReader#each_byte([rs])</div><div class='del'>---- Zlib::GzipReader#gets([rs])</div><div class='del'>---- Zlib::GzipReader#getc</div><div class='del'>---- Zlib::GzipReader#lineno</div><div class='del'>---- Zlib::GzipReader#lineno=</div><div class='del'>---- Zlib::GzipReader#read([length])</div><div class='del'>---- Zlib::GzipReader#readchar</div><div class='del'>---- Zlib::GzipReader#readline([rs])</div><div class='del'>---- Zlib::GzipReader#readlines([rs])</div><div class='del'>---- Zlib::GzipReader#ungetc(char)</div><div class='del'>-</div><div class='del'>-    Same as IO, but raises ((&lt;Zlib::Error&gt;)) or</div><div class='del'>-    ((&lt;Zlib::GzipFile::Error&gt;)) exception if an error was found</div><div class='del'>-    in the gzip file.</div><div class='del'>-</div><div class='del'>-    Be careful of the footer of gzip file. A gzip file has</div><div class='del'>-    the checksum of pre-compressed data in its footer.</div><div class='del'>-    GzipReader checks all uncompressed data against that checksum</div><div class='del'>-    at the following cases, and if failed, raises</div><div class='del'>-    ((&lt;Zlib::GzipFile::NoFooter&gt;)), ((&lt;Zlib::GzipFile::CRCError&gt;)),</div><div class='del'>-    or ((&lt;Zlib::GzipFile::LengthError&gt;)) exception.</div><div class='del'>-</div><div class='del'>-    * When an reading request is received beyond the end of file</div><div class='del'>-      (the end of compressed data).</div><div class='del'>-      That is, when ((&lt;Zlib::GzipReader#read&gt;)),</div><div class='del'>-      ((&lt;Zlib::GzipReader#gets&gt;)), or some other methods for reading</div><div class='del'>-      returns nil.</div><div class='del'>-</div><div class='del'>-    * When ((&lt;Zlib::GzipFile#close&gt;)) method is called after</div><div class='del'>-      the object reaches the end of file.</div><div class='del'>-</div><div class='del'>-    * When ((&lt;Zlib::GzipReader#unused&gt;)) method is called after</div><div class='del'>-      the object reaches the end of file.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipReader#rewind</div><div class='del'>-</div><div class='del'>-    Resets the position of the file pointer to the point</div><div class='del'>-    created the GzipReader object.</div><div class='del'>-    The associated IO object need to respond to seek method.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipReader#unused</div><div class='del'>-</div><div class='del'>-    Returns the rest of the data which had read for parsing gzip</div><div class='del'>-    format, or nil if the whole gzip file is not parsed yet.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Zlib::GzipWriter</div><div class='del'>-</div><div class='del'>-The class for writing a gzipped file. GzipWriter should be used</div><div class='del'>-with associate with an instance of IO class (or an object which</div><div class='del'>-has the same methods as IO has).</div><div class='del'>-</div><div class='del'>-    Zlib::GzipWriter.open('hoge.gz') {|gz|</div><div class='del'>-      gz.write 'jugemu jugemu gokou no surikire...'</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    f = File.open('hoge.gz', 'w')</div><div class='del'>-    gz = Zlib::GzipWriter.new(f)</div><div class='del'>-    gz.write 'jugemu jugemu gokou no surikire...'</div><div class='del'>-    gz.close</div><div class='del'>-</div><div class='del'>-NOTE: Due to the limitation in finalizer of Ruby, you must close</div><div class='del'>-explicitly GzipWriter object by ((&lt;Zlib::GzipWriter#close&gt;)) etc.</div><div class='del'>-Otherwise, GzipWriter should be not able to write gzip footer and</div><div class='del'>-generate broken gzip file.</div><div class='del'>-</div><div class='del'>-=== SuperClass:</div><div class='del'>-</div><div class='del'>-* ((&lt;Zlib::GzipFile&gt;))</div><div class='del'>-</div><div class='del'>-=== Class Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter.new(io[, level[, strategy]])</div><div class='del'>-</div><div class='del'>-    Creates a GzipWriter object associated with ((|io|)).</div><div class='del'>-    ((|level|)) and ((|strategy|)) should be same as the</div><div class='del'>-    arguments of ((&lt;Zlib::Deflate.new&gt;)). The GzipWriter object</div><div class='del'>-    writes gzipped data to ((|io|)). At least, ((|io|)) must</div><div class='del'>-    respond to write method that behaves same as write method</div><div class='del'>-    in IO class.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter.wrap(io[, level[, strategy]]) {|gz| ... }</div><div class='del'>-</div><div class='del'>-    Creates a GzipWriter object associated with ((|io|)), and</div><div class='del'>-    executes the block with the newly created GzipWriter object,</div><div class='del'>-    just like File::open. The GzipWriter object will be closed</div><div class='del'>-    automatically after executing the block. If you want to keep</div><div class='del'>-    the associated IO object opening, you may call</div><div class='del'>-    ((&lt;Zlib::GzipFile#finish&gt;)) method in the block.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter.open(filename[, level[, strategy]])</div><div class='del'>---- Zlib::GzipWriter.open(filename[, level[, strategy]]) {|gz| ... }</div><div class='del'>-</div><div class='del'>-    Opens a file specified by ((|filename|)) for writing</div><div class='del'>-    gzip compressed data, and returns a GzipWriter object</div><div class='del'>-    associated with that file. Further details of this method</div><div class='del'>-    are same as ((&lt;Zlib::GzipWriter.new&gt;)) and</div><div class='del'>-    ((&lt;Zlib::GzipWriter#wrap&gt;)).</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-=== Methods:</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter#close</div><div class='del'>---- Zlib::GzipWriter#finish</div><div class='del'>-</div><div class='del'>-    Closes the GzipFile object. This method calls close method</div><div class='del'>-    of the associated IO object. Returns the associated IO object.</div><div class='del'>-    See ((&lt;Zlib::GzipFile#close&gt;)) and ((&lt;Zlib::GzipFile#finish&gt;))</div><div class='del'>-    for the difference between close and finish.</div><div class='del'>-</div><div class='del'>-    ((*NOTE: Due to the limitation in finalizer of Ruby, you must</div><div class='del'>-    close GzipWriter object explicitly. Otherwise, GzipWriter</div><div class='del'>-    should be not able to write gzip footer and generate broken</div><div class='del'>-    gzip file.*))</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter#pos</div><div class='del'>---- Zlib::GzipWriter#tell</div><div class='del'>-</div><div class='del'>-    Returns the total bytes of data compressed until now.</div><div class='del'>-    Note that it does ((*not*)) the position of file pointer.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter#&lt;&lt; str</div><div class='del'>---- Zlib::GzipWriter#putc(ch)</div><div class='del'>---- Zlib::GzipWriter#puts(obj...)</div><div class='del'>---- Zlib::GzipWriter#print(arg...)</div><div class='del'>---- Zlib::GzipWriter#printf(format, arg...)</div><div class='del'>---- Zlib::GzipWriter#write(str)</div><div class='del'>-</div><div class='del'>-    Same as IO.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter#flush([flush])</div><div class='del'>-</div><div class='del'>-    Flushes all the internal buffers of the GzipWriter object.</div><div class='del'>-    The meaning of ((|flush|)) is same as one of the argument of</div><div class='del'>-    ((&lt;Zlib::Deflate#deflate&gt;)).</div><div class='del'>-    ((&lt;Zlib::SYNC_FLUSH&gt;)) is used if ((|flush|)) is omitted.</div><div class='del'>-    It is no use giving ((|flush|)) ((&lt;Zlib::NO_FLUSH&gt;)).</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter#mtime= time</div><div class='del'>-</div><div class='del'>-    Sets last modification time to be stored in the gzip file</div><div class='del'>-    header. ((&lt;Zlib::GzipFile::Error&gt;)) exception will be raised</div><div class='del'>-    if this method is called after writing method (like</div><div class='del'>-    ((&lt;Zlib::GzipWriter#write&gt;))) was called.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter#orig_name= filename</div><div class='del'>-</div><div class='del'>-    Sets original filename to be stored in the gzip file header.</div><div class='del'>-    ((&lt;Zlib::GzipFile::Error&gt;)) exception will be raised</div><div class='del'>-    if this method is called after writing method (like</div><div class='del'>-    ((&lt;Zlib::GzipWriter#write&gt;))) was called.</div><div class='del'>-</div><div class='del'>---- Zlib::GzipWriter#comment= string</div><div class='del'>-</div><div class='del'>-    Sets comments to be stored in the gzip file header.</div><div class='del'>-    ((&lt;Zlib::GzipFile::Error&gt;)) exception will be raised</div><div class='del'>-    if this method is called after writing method (like</div><div class='del'>-    ((&lt;Zlib::GzipWriter#write&gt;))) was called.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== Changes from 0.5 to 0.6</div><div class='del'>-</div><div class='del'>-* New methods:</div><div class='del'>-</div><div class='del'>-  * ((&lt;Zlib::GzipFile.wrap&gt;))</div><div class='del'>-  * ((&lt;Zlib::GzipFile#finish&gt;))</div><div class='del'>-</div><div class='del'>-* New constants:</div><div class='del'>-</div><div class='del'>-  * ((&lt;Zlib::ZLIB_VERSION&gt;))</div><div class='del'>-  * ((&lt;Zlib::OS_VMCMS&gt;))</div><div class='del'>-  * ((&lt;Zlib::OS_ZSYSTEM&gt;))</div><div class='del'>-  * ((&lt;Zlib::OS_CPM&gt;))</div><div class='del'>-  * ((&lt;Zlib::OS_QDOS&gt;))</div><div class='del'>-  * ((&lt;Zlib::OS_RISCOS&gt;))</div><div class='del'>-  * ((&lt;Zlib::OS_UNKNOWN&gt;))</div><div class='del'>-</div><div class='del'>-* Changed methods:</div><div class='del'>-</div><div class='del'>-  * ((&lt;Zlib::GzipFile.new&gt;)) now takes no block. Use</div><div class='del'>-    ((&lt;Zlib::GzipFile.wrap&gt;)) instead.</div><div class='del'>-</div><div class='del'>-  * ((&lt;Zlib::GzipFile#close&gt;)) now takes no argument. Use</div><div class='del'>-    ((&lt;Zlib::GzipFile#finish&gt;)) instead.</div><div class='del'>-</div><div class='del'>-* Renamed methods:</div><div class='del'>-</div><div class='del'>-  * Zlib.version is renamed to ((&lt;Zlib.zlib_version&gt;)).</div><div class='del'>-</div><div class='del'>-* Changed constants:</div><div class='del'>-</div><div class='del'>-  * ((&lt;Zlib::VERSION&gt;)) indicates the version of Ruby/zlib.</div><div class='del'>-    The zlib.h version is now in ((&lt;Zlib::ZLIB_VERSION&gt;)).</div><div class='del'>-</div><div class='del'>-* Backward compatibility:</div><div class='del'>-</div><div class='del'>-  * For backward compatibility for 0.5, the obsoleted methods and</div><div class='del'>-    arguments are still available.</div><div class='del'>-</div><div class='del'>-  * Obsoleted classes, methods, and constants for backward</div><div class='del'>-    compatibility for 0.4 or earlier are removed.</div><div class='del'>-</div><div class='del'>-== Changes from 0.4 to 0.5</div><div class='del'>-</div><div class='del'>-Almost all the code are rewritten.</div><div class='del'>-I hope all changes are enumerated below :-)</div><div class='del'>-</div><div class='del'>-* The names of almost classes and some methods are changed.</div><div class='del'>-  All classes and constants are now defined under module</div><div class='del'>-  ((&lt;Zlib&gt;)). The obsoleted names are also available for backward</div><div class='del'>-  compatibility.</div><div class='del'>-</div><div class='del'>-  * Classes</div><div class='del'>-</div><div class='del'>-    * Deflate -&gt; ((&lt;Zlib::Deflate&gt;))</div><div class='del'>-    * Inflate -&gt; ((&lt;Zlib::Inflate&gt;))</div><div class='del'>-    * Zlib::Gzip -&gt; ((&lt;Zlib::GzipFile&gt;))</div><div class='del'>-    * GzipReader -&gt; ((&lt;Zlib::GzipReader&gt;))</div><div class='del'>-    * GzipWriter -&gt; ((&lt;Zlib::GzipWriter&gt;))</div><div class='del'>-    * Zlib::Gzip::Error -&gt; ((&lt;Zlib::GzipFile::Error&gt;))</div><div class='del'>-    * Zlib::GzipReader::NoFooter -&gt; ((&lt;Zlib::GzipFile::NoFooter&gt;))</div><div class='del'>-    * Zlib::GzipReader::CRCError -&gt; ((&lt;Zlib::GzipFile::CRCError&gt;))</div><div class='del'>-    * Zlib::GzipReader::LengthError -&gt; ((&lt;Zlib::GzipFile::LengthError&gt;))</div><div class='del'>-</div><div class='del'>-  * Constants</div><div class='del'>-</div><div class='del'>-    * Zlib::ZStream::BINARY -&gt; ((&lt;Zlib::BINARY&gt;))</div><div class='del'>-    * Zlib::ZStream::ASCII -&gt; ((&lt;Zlib::ASCII&gt;))</div><div class='del'>-    * Zlib::ZStream::UNKNOWN -&gt; ((&lt;Zlib::UNKNOWN&gt;))</div><div class='del'>-    * Zlib::Deflate::NO_COMPRESSION -&gt; ((&lt;Zlib::NO_COMPRESSION&gt;))</div><div class='del'>-    * Zlib::Deflate::BEST_SPEED -&gt; ((&lt;Zlib::BEST_SPEED&gt;))</div><div class='del'>-    * Zlib::Deflate::BEST_COMPRESSION -&gt; ((&lt;Zlib::BEST_COMPRESSION&gt;))</div><div class='del'>-    * Zlib::Deflate::DEFAULT_COMPRESSION -&gt; ((&lt;Zlib::DEFAULT_COMPRESSION&gt;))</div><div class='del'>-    * Zlib::Deflate::FILTERED -&gt; ((&lt;Zlib::FILTERED&gt;))</div><div class='del'>-    * Zlib::Deflate::HUFFMAN_ONLY -&gt; ((&lt;Zlib::HUFFMAN_ONLY&gt;))</div><div class='del'>-    * Zlib::Deflate::DEFAULT_STRATEGY -&gt; ((&lt;Zlib::DEFAULT_STRATEGY&gt;))</div><div class='del'>-    * Zlib::Deflate::MAX_WBITS -&gt; ((&lt;Zlib::MAX_WBITS&gt;))</div><div class='del'>-    * Zlib::Deflate::DEF_MEM_LEVEL -&gt; ((&lt;Zlib::DEF_MEM_LEVEL&gt;))</div><div class='del'>-    * Zlib::Deflate::MAX_MEM_LEVEL -&gt; ((&lt;Zlib::MAX_MEM_LEVEL&gt;))</div><div class='del'>-    * Zlib::Deflate::NO_FLUSH -&gt; ((&lt;Zlib::NO_FLUSH&gt;))</div><div class='del'>-    * Zlib::Deflate::SYNC_FLUSH -&gt; ((&lt;Zlib::SYNC_FLUSH&gt;))</div><div class='del'>-    * Zlib::Deflate::FULL_FLUSH -&gt; ((&lt;Zlib::FULL_FLUSH&gt;))</div><div class='del'>-    * Zlib::Inflate::MAX_WBITS -&gt; ((&lt;Zlib::MAX_WBITS&gt;))</div><div class='del'>-    * Zlib::GzipReader::OS_* -&gt; ((&lt;Zlib::OS_*|Zlib::OS_CODE&gt;))</div><div class='del'>-</div><div class='del'>-  * Methods</div><div class='del'>-</div><div class='del'>-    * Zlib::ZStream#flush_out -&gt; ((&lt;Zlib::ZStream#flush_next_out&gt;))</div><div class='del'>-</div><div class='del'>-* Made buffer for input (next_in).</div><div class='del'>-</div><div class='del'>-* ((&lt;Zlib::GzipReader#unused&gt;)) returns nil after closing.</div><div class='del'>-</div><div class='del'>-* Now you are up to call ((&lt;Zlib::GzipWriter#close&gt;)) explicitly</div><div class='del'>-to avoid segv in finalizer.</div><div class='del'>-((&lt;[ruby-dev:11915]|URL:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/11915&gt;))</div><div class='del'>-</div><div class='del'>-* divided initialize from new.</div><div class='del'>-</div><div class='del'>-* remove sanity checks for arguments for deflateInit2 and</div><div class='del'>-  inflateInit2.</div><div class='del'>-</div><div class='del'>-* adapted the behavior of ((&lt;Zlib::GzipWriter#puts&gt;)) to Ruby-1.7.</div><div class='del'>-</div><div class='del'>-* Made all functions static.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-=end</div><div class='head'>diff --git a/ext/zlib/extconf.rb b/ext/zlib/extconf.rb<br/>deleted file mode 100644<br/>index 53b971b189..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/zlib/extconf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/zlib/extconf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# extconf.rb</div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'mkmf'</div><div class='del'>-require 'rbconfig'</div><div class='del'>-</div><div class='del'>-dir_config 'zlib'</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-if %w'z libz zlib1 zlib zdll'.find {|z| have_library(z, 'deflateReset')} and</div><div class='del'>-    have_header('zlib.h') then</div><div class='del'>-</div><div class='del'>-  defines = []</div><div class='del'>-</div><div class='del'>-  message 'checking for kind of operating system... '</div><div class='del'>-  os_code = with_config('os-code') ||</div><div class='del'>-    case RUBY_PLATFORM.split('-',2)[1]</div><div class='del'>-    when 'amigaos' then</div><div class='del'>-      os_code = 'AMIGA'</div><div class='del'>-    when /\Aos2[\-_]emx\z/ then</div><div class='del'>-      os_code = 'OS2'</div><div class='del'>-    when /mswin|mingw|bccwin/ then</div><div class='del'>-      # NOTE: cygwin should be regarded as Unix.</div><div class='del'>-      os_code = 'WIN32'</div><div class='del'>-    else</div><div class='del'>-      os_code = 'UNIX'</div><div class='del'>-    end</div><div class='del'>-  os_code = 'OS_' + os_code.upcase</div><div class='del'>-</div><div class='del'>-  OS_NAMES = {</div><div class='del'>-    'OS_MSDOS'   =&gt; 'MS-DOS',</div><div class='del'>-    'OS_AMIGA'   =&gt; 'Amiga',</div><div class='del'>-    'OS_VMS'     =&gt; 'VMS',</div><div class='del'>-    'OS_UNIX'    =&gt; 'Unix',</div><div class='del'>-    'OS_ATARI'   =&gt; 'Atari',</div><div class='del'>-    'OS_OS2'     =&gt; 'OS/2',</div><div class='del'>-    'OS_MACOS'   =&gt; 'MacOS',</div><div class='del'>-    'OS_TOPS20'  =&gt; 'TOPS20',</div><div class='del'>-    'OS_WIN32'   =&gt; 'Win32',</div><div class='del'>-    'OS_VMCMS'   =&gt; 'VM/CMS',</div><div class='del'>-    'OS_ZSYSTEM' =&gt; 'Z-System',</div><div class='del'>-    'OS_CPM'     =&gt; 'CP/M',</div><div class='del'>-    'OS_QDOS'    =&gt; 'QDOS',</div><div class='del'>-    'OS_RISCOS'  =&gt; 'RISCOS',</div><div class='del'>-    'OS_UNKNOWN' =&gt; 'Unknown',</div><div class='del'>-  }</div><div class='del'>-  unless OS_NAMES.key? os_code then</div><div class='del'>-    puts "invalid OS_CODE `#{os_code}'"</div><div class='del'>-    exit</div><div class='del'>-  end</div><div class='del'>-  message "#{OS_NAMES[os_code]}\n"</div><div class='del'>-  defines &lt;&lt; "OS_CODE=#{os_code}"</div><div class='del'>-</div><div class='del'>-  $defs.concat(defines.collect{|d|' -D'+d})</div><div class='del'>-</div><div class='del'>-  create_makefile('zlib')</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c<br/>deleted file mode 100644<br/>index d4c5028920..0000000000<br/>--- a/<a href='/ruby.git/tree/ext/zlib/zlib.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ext/zlib/zlib.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3554 +0,0 @@</div><div class='del'>-/*</div><div class='del'>- * zlib.c - An interface for zlib.</div><div class='del'>- *</div><div class='del'>- *   Copyright (C) UENO Katsuhiro 2000-2003</div><div class='del'>- *</div><div class='del'>- * $Id$</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#include &lt;ruby.h&gt;</div><div class='del'>-#include &lt;zlib.h&gt;</div><div class='del'>-#include &lt;time.h&gt;</div><div class='del'>-</div><div class='del'>-#define RUBY_ZLIB_VERSION  "0.6.0"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#define OBJ_IS_FREED(val)  (RBASIC(val)-&gt;flags == 0)</div><div class='del'>-</div><div class='del'>-#ifndef GZIP_SUPPORT</div><div class='del'>-#define GZIP_SUPPORT  1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/* from zutil.h */</div><div class='del'>-#ifndef DEF_MEM_LEVEL</div><div class='del'>-#if MAX_MEM_LEVEL &gt;= 8</div><div class='del'>-#define DEF_MEM_LEVEL  8</div><div class='del'>-#else</div><div class='del'>-#define DEF_MEM_LEVEL  MAX_MEM_LEVEL</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*--------- Prototypes --------*/</div><div class='del'>-</div><div class='del'>-static NORETURN(void raise_zlib_error _((int, const char *)));</div><div class='del'>-static VALUE rb_zlib_version _((VALUE));</div><div class='del'>-static VALUE do_checksum _((int, VALUE*, uLong (*) _((uLong, const Bytef*, uInt))));</div><div class='del'>-static VALUE rb_zlib_adler32 _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_zlib_crc32 _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_zlib_crc_table _((VALUE));</div><div class='del'>-static voidpf zlib_mem_alloc _((voidpf, uInt, uInt));</div><div class='del'>-static void zlib_mem_free _((voidpf, voidpf));</div><div class='del'>-static void finalizer_warn _((const char*));</div><div class='del'>-</div><div class='del'>-struct zstream;</div><div class='del'>-struct zstream_funcs;</div><div class='del'>-static void zstream_init _((struct zstream*, const struct zstream_funcs *));</div><div class='del'>-static void zstream_expand_buffer _((struct zstream*));</div><div class='del'>-static void zstream_expand_buffer_into _((struct zstream*, int));</div><div class='del'>-static void zstream_append_buffer _((struct zstream*, const char*, int));</div><div class='del'>-static VALUE zstream_detach_buffer _((struct zstream*));</div><div class='del'>-static VALUE zstream_shift_buffer _((struct zstream*, int));</div><div class='del'>-static void zstream_buffer_ungetc _((struct zstream*, int));</div><div class='del'>-static void zstream_append_input _((struct zstream*, const char*, unsigned int));</div><div class='del'>-static void zstream_discard_input _((struct zstream*, unsigned int));</div><div class='del'>-static void zstream_reset_input _((struct zstream*));</div><div class='del'>-static void zstream_passthrough_input _((struct zstream*));</div><div class='del'>-static VALUE zstream_detach_input _((struct zstream*));</div><div class='del'>-static void zstream_reset _((struct zstream*));</div><div class='del'>-static VALUE zstream_end _((struct zstream*));</div><div class='del'>-static void zstream_run _((struct zstream*, Bytef*, uInt, int));</div><div class='del'>-static VALUE zstream_sync _((struct zstream*, Bytef*, uInt));</div><div class='del'>-static void zstream_mark _((struct zstream*));</div><div class='del'>-static void zstream_free _((struct zstream*));</div><div class='del'>-static VALUE zstream_new _((VALUE, const struct zstream_funcs*));</div><div class='del'>-static struct zstream *get_zstream _((VALUE));</div><div class='del'>-static void zstream_finalize _((struct zstream*));</div><div class='del'>-</div><div class='del'>-static VALUE rb_zstream_end _((VALUE));</div><div class='del'>-static VALUE rb_zstream_reset _((VALUE));</div><div class='del'>-static VALUE rb_zstream_finish _((VALUE));</div><div class='del'>-static VALUE rb_zstream_flush_next_in _((VALUE));</div><div class='del'>-static VALUE rb_zstream_flush_next_out _((VALUE));</div><div class='del'>-static VALUE rb_zstream_avail_out _((VALUE));</div><div class='del'>-static VALUE rb_zstream_set_avail_out _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_zstream_avail_in _((VALUE));</div><div class='del'>-static VALUE rb_zstream_total_in _((VALUE));</div><div class='del'>-static VALUE rb_zstream_total_out _((VALUE));</div><div class='del'>-static VALUE rb_zstream_data_type _((VALUE));</div><div class='del'>-static VALUE rb_zstream_adler _((VALUE));</div><div class='del'>-static VALUE rb_zstream_finished_p _((VALUE));</div><div class='del'>-static VALUE rb_zstream_closed_p _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE rb_deflate_s_allocate _((VALUE));</div><div class='del'>-static VALUE rb_deflate_initialize _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_deflate_init_copy _((VALUE, VALUE));</div><div class='del'>-static VALUE deflate_run _((VALUE));</div><div class='del'>-static VALUE rb_deflate_s_deflate _((int, VALUE*, VALUE));</div><div class='del'>-static void do_deflate _((struct zstream*, VALUE, int));</div><div class='del'>-static VALUE rb_deflate_deflate _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_deflate_addstr _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_deflate_flush _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_deflate_params _((VALUE, VALUE, VALUE));</div><div class='del'>-static VALUE rb_deflate_set_dictionary _((VALUE, VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE inflate_run _((VALUE));</div><div class='del'>-static VALUE rb_inflate_s_allocate _((VALUE));</div><div class='del'>-static VALUE rb_inflate_initialize _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_inflate_s_inflate _((VALUE, VALUE));</div><div class='del'>-static void do_inflate _((struct zstream*, VALUE));</div><div class='del'>-static VALUE rb_inflate_inflate _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_inflate_addstr _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_inflate_sync _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_inflate_sync_point_p _((VALUE));</div><div class='del'>-static VALUE rb_inflate_set_dictionary _((VALUE, VALUE));</div><div class='del'>-</div><div class='del'>-#if GZIP_SUPPORT</div><div class='del'>-struct gzfile;</div><div class='del'>-static void gzfile_mark _((struct gzfile*));</div><div class='del'>-static void gzfile_free _((struct gzfile*));</div><div class='del'>-static VALUE gzfile_new _((VALUE, const struct zstream_funcs*, void (*) _((struct gzfile*))));</div><div class='del'>-static void gzfile_reset _((struct gzfile*));</div><div class='del'>-static void gzfile_close _((struct gzfile*, int));</div><div class='del'>-static void gzfile_write_raw _((struct gzfile*));</div><div class='del'>-static VALUE gzfile_read_raw _((struct gzfile*));</div><div class='del'>-static int gzfile_read_raw_ensure _((struct gzfile*, int));</div><div class='del'>-static char *gzfile_read_raw_until_zero _((struct gzfile*, long));</div><div class='del'>-static unsigned int gzfile_get16 _((const unsigned char*));</div><div class='del'>-static unsigned long gzfile_get32 _((const unsigned char*));</div><div class='del'>-static void gzfile_set32 _((unsigned long n, unsigned char*));</div><div class='del'>-static void gzfile_make_header _((struct gzfile*));</div><div class='del'>-static void gzfile_make_footer _((struct gzfile*));</div><div class='del'>-static void gzfile_read_header _((struct gzfile*));</div><div class='del'>-static void gzfile_check_footer _((struct gzfile*));</div><div class='del'>-static void gzfile_write _((struct gzfile*, Bytef*, uInt));</div><div class='del'>-static long gzfile_read_more _((struct gzfile*));</div><div class='del'>-static void gzfile_calc_crc _((struct gzfile*, VALUE));</div><div class='del'>-static VALUE gzfile_read _((struct gzfile*, int));</div><div class='del'>-static VALUE gzfile_read_all _((struct gzfile*));</div><div class='del'>-static void gzfile_ungetc _((struct gzfile*, int));</div><div class='del'>-static VALUE gzfile_writer_end_run _((VALUE));</div><div class='del'>-static void gzfile_writer_end _((struct gzfile*));</div><div class='del'>-static VALUE gzfile_reader_end_run _((VALUE));</div><div class='del'>-static void gzfile_reader_end _((struct gzfile*));</div><div class='del'>-static void gzfile_reader_rewind _((struct gzfile*));</div><div class='del'>-static VALUE gzfile_reader_get_unused _((struct gzfile*));</div><div class='del'>-static struct gzfile *get_gzfile _((VALUE));</div><div class='del'>-static VALUE gzfile_ensure_close _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_s_wrap _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE gzfile_s_open _((int, VALUE*, VALUE, const char*));</div><div class='del'>-</div><div class='del'>-static VALUE rb_gzfile_to_io _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_crc _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_mtime _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_level _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_os_code _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_orig_name _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_comment _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_lineno _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_set_lineno _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_gzfile_set_mtime _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_gzfile_set_orig_name _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_gzfile_set_comment _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_gzfile_close _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_finish _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_closed_p _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_eof_p _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_sync _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_set_sync _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_gzfile_total_in _((VALUE));</div><div class='del'>-static VALUE rb_gzfile_total_out _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE rb_gzwriter_s_allocate _((VALUE));</div><div class='del'>-static VALUE rb_gzwriter_s_open _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzwriter_initialize _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzwriter_flush _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzwriter_write _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_gzwriter_putc _((VALUE, VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE rb_gzreader_s_allocate _((VALUE));</div><div class='del'>-static VALUE rb_gzreader_s_open _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzreader_initialize _((VALUE, VALUE));</div><div class='del'>-static VALUE rb_gzreader_rewind _((VALUE));</div><div class='del'>-static VALUE rb_gzreader_unused _((VALUE));</div><div class='del'>-static VALUE rb_gzreader_read _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzreader_getc _((VALUE));</div><div class='del'>-static VALUE rb_gzreader_readchar _((VALUE));</div><div class='del'>-static VALUE rb_gzreader_each_byte _((VALUE));</div><div class='del'>-static VALUE rb_gzreader_ungetc _((VALUE, VALUE));</div><div class='del'>-static void gzreader_skip_linebreaks _((struct gzfile*));</div><div class='del'>-static VALUE gzreader_gets _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzreader_gets _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzreader_readline _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzreader_each _((int, VALUE*, VALUE));</div><div class='del'>-static VALUE rb_gzreader_readlines _((int, VALUE*, VALUE));</div><div class='del'>-#endif /* GZIP_SUPPORT */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-void Init_zlib _((void));</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*--------- Exceptions --------*/</div><div class='del'>-</div><div class='del'>-static VALUE cZError, cStreamEnd, cNeedDict;</div><div class='del'>-static VALUE cStreamError, cDataError, cMemError, cBufError, cVersionError;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-raise_zlib_error(err, msg)</div><div class='del'>-    int err;</div><div class='del'>-    const char *msg;</div><div class='del'>-{</div><div class='del'>-    VALUE exc;</div><div class='del'>-</div><div class='del'>-    if (!msg) {</div><div class='del'>-	msg = zError(err);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch(err) {</div><div class='del'>-      case Z_STREAM_END:</div><div class='del'>-	exc = rb_exc_new2(cStreamEnd, msg);</div><div class='del'>-	break;</div><div class='del'>-      case Z_NEED_DICT:</div><div class='del'>-	exc = rb_exc_new2(cNeedDict, msg);</div><div class='del'>-	break;</div><div class='del'>-      case Z_STREAM_ERROR:</div><div class='del'>-	exc = rb_exc_new2(cStreamError, msg);</div><div class='del'>-	break;</div><div class='del'>-      case Z_DATA_ERROR:</div><div class='del'>-	exc = rb_exc_new2(cDataError, msg);</div><div class='del'>-	break;</div><div class='del'>-      case Z_BUF_ERROR:</div><div class='del'>-	exc = rb_exc_new2(cBufError, msg);</div><div class='del'>-	break;</div><div class='del'>-      case Z_VERSION_ERROR:</div><div class='del'>-	exc = rb_exc_new2(cVersionError, msg);</div><div class='del'>-	break;</div><div class='del'>-      case Z_MEM_ERROR:</div><div class='del'>-	exc = rb_exc_new2(cMemError, msg);</div><div class='del'>-	break;</div><div class='del'>-      case Z_ERRNO:</div><div class='del'>-	rb_sys_fail(msg);</div><div class='del'>-	/* no return */</div><div class='del'>-      default:</div><div class='del'>-      {</div><div class='del'>-	  char buf[BUFSIZ];</div><div class='del'>-	  snprintf(buf, BUFSIZ, "unknown zlib error %d: %s", err, msg);</div><div class='del'>-	  exc = rb_exc_new2(cZError, buf);</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_exc_raise(exc);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*--- Warning (in finalizer) ---*/</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-finalizer_warn(msg)</div><div class='del'>-    const char *msg;</div><div class='del'>-{</div><div class='del'>-    fprintf(stderr, "zlib(finalizer): %s\n", msg);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*-------- module Zlib --------*/</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the string which represents the version of zlib library.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zlib_version(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    str = rb_str_new2(zlibVersion());</div><div class='del'>-    OBJ_TAINT(str);  /* for safe */</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-do_checksum(argc, argv, func)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    uLong (*func) _((uLong, const Bytef *, uInt));</div><div class='del'>-{</div><div class='del'>-    VALUE str, vsum;</div><div class='del'>-    unsigned long sum;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;str, &amp;vsum);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(vsum)) {</div><div class='del'>-	sum = NUM2ULONG(vsum);</div><div class='del'>-    }</div><div class='del'>-    else if (NIL_P(str)) {</div><div class='del'>-	sum = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	sum = func(0, Z_NULL, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-	sum = func(sum, Z_NULL, 0);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	StringValue(str);</div><div class='del'>-	sum = func(sum, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-    }</div><div class='del'>-    return rb_uint2inum(sum);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib.adler32(string, adler)</div><div class='del'>- *</div><div class='del'>- * Calculates Alder-32 checksum for +string+, and returns updated value of</div><div class='del'>- * +adler+. If +string+ is omitted, it returns the Adler-32 initial value. If</div><div class='del'>- * +adler+ is omitted, it assumes that the initial value is given to +adler+.</div><div class='del'>- *</div><div class='del'>- * FIXME: expression.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zlib_adler32(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return do_checksum(argc, argv, adler32);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib.crc32(string, adler)</div><div class='del'>- *</div><div class='del'>- * Calculates CRC checksum for +string+, and returns updated value of +crc+. If</div><div class='del'>- * +string+ is omitted, it returns the CRC initial value. If +crc+ is omitted, it</div><div class='del'>- * assumes that the initial value is given to +crc+.</div><div class='del'>- *</div><div class='del'>- * FIXME: expression.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zlib_crc32(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return do_checksum(argc, argv, crc32);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the table for calculating CRC checksum as an array.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zlib_crc_table(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    const unsigned long *crctbl;</div><div class='del'>-    VALUE dst;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    crctbl = get_crc_table();</div><div class='del'>-    dst = rb_ary_new2(256);</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; 256; i++) {</div><div class='del'>-	rb_ary_push(dst, rb_uint2inum(crctbl[i]));</div><div class='del'>-    }</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*-------- zstream - internal APIs --------*/</div><div class='del'>-</div><div class='del'>-struct zstream {</div><div class='del'>-    unsigned long flags;</div><div class='del'>-    VALUE buf;</div><div class='del'>-    long buf_filled;</div><div class='del'>-    VALUE input;</div><div class='del'>-    z_stream stream;</div><div class='del'>-    const struct zstream_funcs {</div><div class='del'>-	int (*reset) _((z_streamp));</div><div class='del'>-	int (*end) _((z_streamp));</div><div class='del'>-	int (*run) _((z_streamp, int));</div><div class='del'>-    } *func;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define ZSTREAM_FLAG_READY      0x1</div><div class='del'>-#define ZSTREAM_FLAG_IN_STREAM  0x2</div><div class='del'>-#define ZSTREAM_FLAG_FINISHED   0x4</div><div class='del'>-#define ZSTREAM_FLAG_CLOSING    0x8</div><div class='del'>-#define ZSTREAM_FLAG_UNUSED     0x10</div><div class='del'>-</div><div class='del'>-#define ZSTREAM_READY(z)       ((z)-&gt;flags |= ZSTREAM_FLAG_READY)</div><div class='del'>-#define ZSTREAM_IS_READY(z)    ((z)-&gt;flags &amp; ZSTREAM_FLAG_READY)</div><div class='del'>-#define ZSTREAM_IS_FINISHED(z) ((z)-&gt;flags &amp; ZSTREAM_FLAG_FINISHED)</div><div class='del'>-#define ZSTREAM_IS_CLOSING(z)  ((z)-&gt;flags &amp; ZSTREAM_FLAG_CLOSING)</div><div class='del'>-</div><div class='del'>-/* I think that more better value should be found,</div><div class='del'>-   but I gave up finding it. B) */</div><div class='del'>-#define ZSTREAM_INITIAL_BUFSIZE       1024</div><div class='del'>-#define ZSTREAM_AVAIL_OUT_STEP_MAX   16384</div><div class='del'>-#define ZSTREAM_AVAIL_OUT_STEP_MIN    2048</div><div class='del'>-</div><div class='del'>-static const struct zstream_funcs deflate_funcs = {</div><div class='del'>-    deflateReset, deflateEnd, deflate,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static const struct zstream_funcs inflate_funcs = {</div><div class='del'>-    inflateReset, inflateEnd, inflate,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static voidpf</div><div class='del'>-zlib_mem_alloc(opaque, items, size)</div><div class='del'>-    voidpf opaque;</div><div class='del'>-    uInt items, size;</div><div class='del'>-{</div><div class='del'>-    return xmalloc(items * size);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zlib_mem_free(opaque, address)</div><div class='del'>-    voidpf opaque, address;</div><div class='del'>-{</div><div class='del'>-    free(address);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_init(z, func)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    const struct zstream_funcs *func;</div><div class='del'>-{</div><div class='del'>-    z-&gt;flags = 0;</div><div class='del'>-    z-&gt;buf = Qnil;</div><div class='del'>-    z-&gt;buf_filled = 0;</div><div class='del'>-    z-&gt;input = Qnil;</div><div class='del'>-    z-&gt;stream.zalloc = zlib_mem_alloc;</div><div class='del'>-    z-&gt;stream.zfree = zlib_mem_free;</div><div class='del'>-    z-&gt;stream.opaque = Z_NULL;</div><div class='del'>-    z-&gt;stream.msg = Z_NULL;</div><div class='del'>-    z-&gt;stream.next_in = Z_NULL;</div><div class='del'>-    z-&gt;stream.avail_in = 0;</div><div class='del'>-    z-&gt;stream.next_out = Z_NULL;</div><div class='del'>-    z-&gt;stream.avail_out = 0;</div><div class='del'>-    z-&gt;func = func;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define zstream_init_deflate(z)   zstream_init((z), &amp;deflate_funcs)</div><div class='del'>-#define zstream_init_inflate(z)   zstream_init((z), &amp;inflate_funcs)</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_expand_buffer(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    long inc;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(z-&gt;buf)) {</div><div class='del'>-	    /* I uses rb_str_new here not rb_str_buf_new because</div><div class='del'>-	       rb_str_buf_new makes a zero-length string. */</div><div class='del'>-	z-&gt;buf = rb_str_new(0, ZSTREAM_INITIAL_BUFSIZE);</div><div class='del'>-	z-&gt;buf_filled = 0;</div><div class='del'>-	z-&gt;stream.next_out = RSTRING(z-&gt;buf)-&gt;ptr;</div><div class='del'>-	z-&gt;stream.avail_out = ZSTREAM_INITIAL_BUFSIZE;</div><div class='del'>-	RBASIC(z-&gt;buf)-&gt;klass = 0;</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RSTRING(z-&gt;buf)-&gt;len - z-&gt;buf_filled &gt;= ZSTREAM_AVAIL_OUT_STEP_MAX) {</div><div class='del'>-	/* to keep other threads from freezing */</div><div class='del'>-	z-&gt;stream.avail_out = ZSTREAM_AVAIL_OUT_STEP_MAX;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	inc = z-&gt;buf_filled / 2;</div><div class='del'>-	if (inc &lt; ZSTREAM_AVAIL_OUT_STEP_MIN) {</div><div class='del'>-	    inc = ZSTREAM_AVAIL_OUT_STEP_MIN;</div><div class='del'>-	}</div><div class='del'>-	rb_str_resize(z-&gt;buf, z-&gt;buf_filled + inc);</div><div class='del'>-	z-&gt;stream.avail_out = (inc &lt; ZSTREAM_AVAIL_OUT_STEP_MAX) ?</div><div class='del'>-	    inc : ZSTREAM_AVAIL_OUT_STEP_MAX;</div><div class='del'>-    }</div><div class='del'>-    z-&gt;stream.next_out = RSTRING(z-&gt;buf)-&gt;ptr + z-&gt;buf_filled;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_expand_buffer_into(z, size)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    int size;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(z-&gt;buf)) {</div><div class='del'>-	/* I uses rb_str_new here not rb_str_buf_new because</div><div class='del'>-	   rb_str_buf_new makes a zero-length string. */</div><div class='del'>-	z-&gt;buf = rb_str_new(0, size);</div><div class='del'>-	z-&gt;buf_filled = 0;</div><div class='del'>-	z-&gt;stream.next_out = RSTRING(z-&gt;buf)-&gt;ptr;</div><div class='del'>-	z-&gt;stream.avail_out = size;</div><div class='del'>-	RBASIC(z-&gt;buf)-&gt;klass = 0;</div><div class='del'>-    }</div><div class='del'>-    else if (z-&gt;stream.avail_out != size) {</div><div class='del'>-	rb_str_resize(z-&gt;buf, z-&gt;buf_filled + size);</div><div class='del'>-	z-&gt;stream.next_out = RSTRING(z-&gt;buf)-&gt;ptr + z-&gt;buf_filled;</div><div class='del'>-	z-&gt;stream.avail_out = size;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_append_buffer(z, src, len)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    const char *src;</div><div class='del'>-    int len;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(z-&gt;buf)) {</div><div class='del'>-	z-&gt;buf = rb_str_buf_new(len);</div><div class='del'>-	rb_str_buf_cat(z-&gt;buf, src, len);</div><div class='del'>-	z-&gt;buf_filled = len;</div><div class='del'>-	z-&gt;stream.next_out = RSTRING(z-&gt;buf)-&gt;ptr;</div><div class='del'>-	z-&gt;stream.avail_out = 0;</div><div class='del'>-	RBASIC(z-&gt;buf)-&gt;klass = 0;</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RSTRING(z-&gt;buf)-&gt;len &lt; z-&gt;buf_filled + len) {</div><div class='del'>-	rb_str_resize(z-&gt;buf, z-&gt;buf_filled + len);</div><div class='del'>-	z-&gt;stream.avail_out = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	if (z-&gt;stream.avail_out &gt;= len) {</div><div class='del'>-	    z-&gt;stream.avail_out -= len;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    z-&gt;stream.avail_out = 0;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    memcpy(RSTRING(z-&gt;buf)-&gt;ptr + z-&gt;buf_filled, src, len);</div><div class='del'>-    z-&gt;buf_filled += len;</div><div class='del'>-    z-&gt;stream.next_out = RSTRING(z-&gt;buf)-&gt;ptr + z-&gt;buf_filled;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define zstream_append_buffer2(z,v) \</div><div class='del'>-    zstream_append_buffer((z),RSTRING(v)-&gt;ptr,RSTRING(v)-&gt;len)</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-zstream_detach_buffer(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(z-&gt;buf)) {</div><div class='del'>-	dst = rb_str_new(0, 0);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	dst = z-&gt;buf;</div><div class='del'>-	rb_str_resize(dst, z-&gt;buf_filled);</div><div class='del'>-	RBASIC(dst)-&gt;klass = rb_cString;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    z-&gt;buf = Qnil;</div><div class='del'>-    z-&gt;buf_filled = 0;</div><div class='del'>-    z-&gt;stream.next_out = 0;</div><div class='del'>-    z-&gt;stream.avail_out = 0;</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-zstream_shift_buffer(z, len)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    int len;</div><div class='del'>-{</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    if (z-&gt;buf_filled &lt;= len) {</div><div class='del'>-	return zstream_detach_buffer(z);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    dst = rb_str_substr(z-&gt;buf, 0, len);</div><div class='del'>-    RBASIC(dst)-&gt;klass = rb_cString;</div><div class='del'>-    z-&gt;buf_filled -= len;</div><div class='del'>-    memmove(RSTRING(z-&gt;buf)-&gt;ptr, RSTRING(z-&gt;buf)-&gt;ptr + len,</div><div class='del'>-	    z-&gt;buf_filled);</div><div class='del'>-    z-&gt;stream.next_out = RSTRING(z-&gt;buf)-&gt;ptr + z-&gt;buf_filled;</div><div class='del'>-    z-&gt;stream.avail_out = RSTRING(z-&gt;buf)-&gt;len - z-&gt;buf_filled;</div><div class='del'>-    if (z-&gt;stream.avail_out &gt; ZSTREAM_AVAIL_OUT_STEP_MAX) {</div><div class='del'>-	z-&gt;stream.avail_out = ZSTREAM_AVAIL_OUT_STEP_MAX;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_buffer_ungetc(z, c)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    int c;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(z-&gt;buf) || RSTRING(z-&gt;buf)-&gt;len - z-&gt;buf_filled == 0) {</div><div class='del'>-	zstream_expand_buffer(z);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    memmove(RSTRING(z-&gt;buf)-&gt;ptr + 1, RSTRING(z-&gt;buf)-&gt;ptr, z-&gt;buf_filled);</div><div class='del'>-    RSTRING(z-&gt;buf)-&gt;ptr[0] = (char)c;</div><div class='del'>-    z-&gt;buf_filled++;</div><div class='del'>-    if (z-&gt;stream.avail_out &gt; 0) {</div><div class='del'>-	z-&gt;stream.next_out++;</div><div class='del'>-	z-&gt;stream.avail_out--;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_append_input(z, src, len)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    const char *src;</div><div class='del'>-    unsigned int len;</div><div class='del'>-{</div><div class='del'>-    if (len &lt;= 0) return;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(z-&gt;input)) {</div><div class='del'>-	z-&gt;input = rb_str_buf_new(len);</div><div class='del'>-	rb_str_buf_cat(z-&gt;input, src, len);</div><div class='del'>-	RBASIC(z-&gt;input)-&gt;klass = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_str_buf_cat(z-&gt;input, src, len);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define zstream_append_input2(z,v)\</div><div class='del'>-    zstream_append_input((z), RSTRING(v)-&gt;ptr, RSTRING(v)-&gt;len)</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_discard_input(z, len)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    unsigned int len;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(z-&gt;input) || RSTRING(z-&gt;input)-&gt;len &lt;= len) {</div><div class='del'>-	z-&gt;input = Qnil;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	memmove(RSTRING(z-&gt;input)-&gt;ptr, RSTRING(z-&gt;input)-&gt;ptr + len,</div><div class='del'>-		RSTRING(z-&gt;input)-&gt;len - len);</div><div class='del'>-	rb_str_resize(z-&gt;input, RSTRING(z-&gt;input)-&gt;len - len);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_reset_input(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    z-&gt;input = Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_passthrough_input(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    if (!NIL_P(z-&gt;input)) {</div><div class='del'>-	zstream_append_buffer2(z, z-&gt;input);</div><div class='del'>-	z-&gt;input = Qnil;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-zstream_detach_input(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(z-&gt;input)) {</div><div class='del'>-	dst = rb_str_new(0, 0);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	dst = z-&gt;input;</div><div class='del'>-	RBASIC(dst)-&gt;klass = rb_cString;</div><div class='del'>-    }</div><div class='del'>-    z-&gt;input = Qnil;</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_reset(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    err = z-&gt;func-&gt;reset(&amp;z-&gt;stream);</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-    }</div><div class='del'>-    z-&gt;flags = ZSTREAM_FLAG_READY;</div><div class='del'>-    z-&gt;buf = Qnil;</div><div class='del'>-    z-&gt;buf_filled = 0;</div><div class='del'>-    z-&gt;stream.next_out = 0;</div><div class='del'>-    z-&gt;stream.avail_out = 0;</div><div class='del'>-    zstream_reset_input(z);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-zstream_end(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    if (!ZSTREAM_IS_READY(z)) {</div><div class='del'>-	rb_warning("attempt to close uninitialized zstream; ignored.");</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    if (z-&gt;flags &amp; ZSTREAM_FLAG_IN_STREAM) {</div><div class='del'>-	rb_warning("attempt to close unfinished zstream; reset forced.");</div><div class='del'>-	zstream_reset(z);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    zstream_reset_input(z);</div><div class='del'>-    err = z-&gt;func-&gt;end(&amp;z-&gt;stream);</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-    }</div><div class='del'>-    z-&gt;flags = 0;</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_run(z, src, len, flush)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    Bytef *src;</div><div class='del'>-    uInt len;</div><div class='del'>-    int flush;</div><div class='del'>-{</div><div class='del'>-    uInt n;</div><div class='del'>-    int err;</div><div class='del'>-    volatile VALUE guard;</div><div class='del'>-</div><div class='del'>-    if (NIL_P(z-&gt;input) &amp;&amp; len == 0) {</div><div class='del'>-	z-&gt;stream.next_in = "";</div><div class='del'>-	z-&gt;stream.avail_in = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	zstream_append_input(z, src, len);</div><div class='del'>-	z-&gt;stream.next_in = RSTRING(z-&gt;input)-&gt;ptr;</div><div class='del'>-	z-&gt;stream.avail_in = RSTRING(z-&gt;input)-&gt;len;</div><div class='del'>-	/* keep reference to `z-&gt;input' so as not to be garbage collected</div><div class='del'>-	   after zstream_reset_input() and prevent `z-&gt;stream.next_in'</div><div class='del'>-	   from dangling. */</div><div class='del'>-	guard = z-&gt;input;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (z-&gt;stream.avail_out == 0) {</div><div class='del'>-	zstream_expand_buffer(z);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	n = z-&gt;stream.avail_out;</div><div class='del'>-	err = z-&gt;func-&gt;run(&amp;z-&gt;stream, flush);</div><div class='del'>-	z-&gt;buf_filled += n - z-&gt;stream.avail_out;</div><div class='del'>-	rb_thread_schedule();</div><div class='del'>-</div><div class='del'>-	if (err == Z_STREAM_END) {</div><div class='del'>-	    z-&gt;flags &amp;= ~ZSTREAM_FLAG_IN_STREAM;</div><div class='del'>-	    z-&gt;flags |= ZSTREAM_FLAG_FINISHED;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	if (err != Z_OK) {</div><div class='del'>-	    if (flush != Z_FINISH &amp;&amp; err == Z_BUF_ERROR</div><div class='del'>-		&amp;&amp; z-&gt;stream.avail_out &gt; 0) {</div><div class='del'>-		z-&gt;flags |= ZSTREAM_FLAG_IN_STREAM;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	    zstream_reset_input(z);</div><div class='del'>-	    if (z-&gt;stream.avail_in &gt; 0) {</div><div class='del'>-		zstream_append_input(z, z-&gt;stream.next_in, z-&gt;stream.avail_in);</div><div class='del'>-	    }</div><div class='del'>-	    raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-	}</div><div class='del'>-	if (z-&gt;stream.avail_out &gt; 0) {</div><div class='del'>-	    z-&gt;flags |= ZSTREAM_FLAG_IN_STREAM;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	zstream_expand_buffer(z);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    zstream_reset_input(z);</div><div class='del'>-    if (z-&gt;stream.avail_in &gt; 0) {</div><div class='del'>-	zstream_append_input(z, z-&gt;stream.next_in, z-&gt;stream.avail_in);</div><div class='del'>-        guard = Qnil; /* prevent tail call to make guard effective */</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-zstream_sync(z, src, len)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    Bytef *src;</div><div class='del'>-    uInt len;</div><div class='del'>-{</div><div class='del'>-    VALUE rest;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(z-&gt;input)) {</div><div class='del'>-	z-&gt;stream.next_in = RSTRING(z-&gt;input)-&gt;ptr;</div><div class='del'>-	z-&gt;stream.avail_in = RSTRING(z-&gt;input)-&gt;len;</div><div class='del'>-	err = inflateSync(&amp;z-&gt;stream);</div><div class='del'>-	if (err == Z_OK) {</div><div class='del'>-	    zstream_discard_input(z,</div><div class='del'>-				  RSTRING(z-&gt;input)-&gt;len - z-&gt;stream.avail_in);</div><div class='del'>-	    zstream_append_input(z, src, len);</div><div class='del'>-	    return Qtrue;</div><div class='del'>-	}</div><div class='del'>-	zstream_reset_input(z);</div><div class='del'>-	if (err != Z_DATA_ERROR) {</div><div class='del'>-	    rest = rb_str_new(z-&gt;stream.next_in, z-&gt;stream.avail_in);</div><div class='del'>-	    raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (len &lt;= 0) return Qfalse;</div><div class='del'>-</div><div class='del'>-    z-&gt;stream.next_in = src;</div><div class='del'>-    z-&gt;stream.avail_in = len;</div><div class='del'>-    err = inflateSync(&amp;z-&gt;stream);</div><div class='del'>-    if (err == Z_OK) {</div><div class='del'>-	zstream_append_input(z, z-&gt;stream.next_in, z-&gt;stream.avail_in);</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    if (err != Z_DATA_ERROR) {</div><div class='del'>-	rest = rb_str_new(z-&gt;stream.next_in, z-&gt;stream.avail_in);</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-    }</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_mark(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(z-&gt;buf);</div><div class='del'>-    rb_gc_mark(z-&gt;input);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_finalize(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    int err = z-&gt;func-&gt;end(&amp;z-&gt;stream);</div><div class='del'>-    if (err == Z_STREAM_ERROR)</div><div class='del'>-	finalizer_warn("the stream state was inconsistent.");</div><div class='del'>-    if (err == Z_DATA_ERROR)</div><div class='del'>-	finalizer_warn("the stream was freed prematurely.");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-zstream_free(z)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-{</div><div class='del'>-    if (ZSTREAM_IS_READY(z)) {</div><div class='del'>-	zstream_finalize(z);</div><div class='del'>-    }</div><div class='del'>-    free(z);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-zstream_new(klass, funcs)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const struct zstream_funcs *funcs;</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-    struct zstream *z;</div><div class='del'>-</div><div class='del'>-    obj = Data_Make_Struct(klass, struct zstream,</div><div class='del'>-			   zstream_mark, zstream_free, z);</div><div class='del'>-    zstream_init(z, funcs);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define zstream_deflate_new(klass)  zstream_new((klass), &amp;deflate_funcs)</div><div class='del'>-#define zstream_inflate_new(klass)  zstream_new((klass), &amp;inflate_funcs)</div><div class='del'>-</div><div class='del'>-static struct zstream *</div><div class='del'>-get_zstream(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct zstream, z);</div><div class='del'>-    if (!ZSTREAM_IS_READY(z)) {</div><div class='del'>-	rb_raise(cZError, "stream is not ready");</div><div class='del'>-    }</div><div class='del'>-    return z;</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'>- * Document-class: Zlib::ZStream</div><div class='del'>- *</div><div class='del'>- * Zlib::ZStream is the abstract class for the stream which handles the</div><div class='del'>- * compressed data. The operations are defined in the subclasses:</div><div class='del'>- * Zlib::Deflate for compression, and Zlib::Inflate for decompression.</div><div class='del'>- *</div><div class='del'>- * An instance of Zlib::ZStream has one stream (struct zstream in the source)</div><div class='del'>- * and two variable-length buffers which associated to the input (next_in) of</div><div class='del'>- * the stream and the output (next_out) of the stream. In this document,</div><div class='del'>- * "input buffer" means the buffer for input, and "output buffer" means the</div><div class='del'>- * buffer for output.</div><div class='del'>- *</div><div class='del'>- * Data input into an instance of Zlib::ZStream are temporally stored into</div><div class='del'>- * the end of input buffer, and then data in input buffer are processed from</div><div class='del'>- * the beginning of the buffer until no more output from the stream is</div><div class='del'>- * produced (i.e. until avail_out &gt; 0 after processing).  During processing,</div><div class='del'>- * output buffer is allocated and expanded automatically to hold all output</div><div class='del'>- * data.</div><div class='del'>- *</div><div class='del'>- * Some particular instance methods consume the data in output buffer and</div><div class='del'>- * return them as a String.</div><div class='del'>- *</div><div class='del'>- * Here is an ascii art for describing above:</div><div class='del'>- *</div><div class='del'>- *    +================ an instance of Zlib::ZStream ================+</div><div class='del'>- *    ||                                                            ||</div><div class='del'>- *    ||     +--------+          +-------+          +--------+      ||</div><div class='del'>- *    ||  +--| output |&lt;---------|zstream|&lt;---------| input  |&lt;--+  ||</div><div class='del'>- *    ||  |  | buffer |  next_out+-------+next_in   | buffer |   |  ||</div><div class='del'>- *    ||  |  +--------+                             +--------+   |  ||</div><div class='del'>- *    ||  |                                                      |  ||</div><div class='del'>- *    +===|======================================================|===+</div><div class='del'>- *        |                                                      |</div><div class='del'>- *        v                                                      |</div><div class='del'>- *    "output data"                                         "input data"</div><div class='del'>- *</div><div class='del'>- * If an error occurs during processing input buffer, an exception which is a</div><div class='del'>- * subclass of Zlib::Error is raised.  At that time, both input and output</div><div class='del'>- * buffer keep their conditions at the time when the error occurs.</div><div class='del'>- *</div><div class='del'>- * == Method Catalogue</div><div class='del'>- *</div><div class='del'>- * Many of the methods in this class are fairly low-level and unlikely to be</div><div class='del'>- * of interest to users.  In fact, users are unlikely to use this class</div><div class='del'>- * directly; rather they will be interested in Zlib::Inflate and</div><div class='del'>- * Zlib::Deflate.</div><div class='del'>- *</div><div class='del'>- * The higher level methods are listed below.</div><div class='del'>- *</div><div class='del'>- * - #total_in</div><div class='del'>- * - #total_out</div><div class='del'>- * - #data_type</div><div class='del'>- * - #adler</div><div class='del'>- * - #reset</div><div class='del'>- * - #finish</div><div class='del'>- * - #finished?</div><div class='del'>- * - #close</div><div class='del'>- * - #closed?</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Closes the stream. All operations on the closed stream will raise an</div><div class='del'>- * exception.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_end(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    zstream_end(get_zstream(obj));</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Resets and initializes the stream. All data in both input and output buffer</div><div class='del'>- * are discarded.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_reset(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    zstream_reset(get_zstream(obj));</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Finishes the stream and flushes output buffer. See Zlib::Deflate#finish and</div><div class='del'>- * Zlib::Inflate#finish for details of this behavior.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_finish(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    zstream_run(z, "", 0, Z_FINISH);</div><div class='del'>-    dst = zstream_detach_buffer(z);</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(dst, obj);</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Flushes input buffer and returns all data in that buffer.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_flush_next_in(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct zstream, z);</div><div class='del'>-    dst = zstream_detach_input(z);</div><div class='del'>-    OBJ_INFECT(dst, obj);</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Flushes output buffer and returns all data in that buffer.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_flush_next_out(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct zstream, z);</div><div class='del'>-    dst = zstream_detach_buffer(z);</div><div class='del'>-    OBJ_INFECT(dst, obj);</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns number of bytes of free spaces in output buffer.  Because the free</div><div class='del'>- * space is allocated automatically, this method returns 0 normally.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_avail_out(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    Data_Get_Struct(obj, struct zstream, z);</div><div class='del'>-    return rb_uint2inum(z-&gt;stream.avail_out);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Allocates +size+ bytes of free space in the output buffer. If there are more</div><div class='del'>- * than +size+ bytes already in the buffer, the buffer is truncated. Because </div><div class='del'>- * free space is allocated automatically, you usually don't need to use this</div><div class='del'>- * method.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_set_avail_out(obj, size)</div><div class='del'>-    VALUE obj, size;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-</div><div class='del'>-    Check_Type(size, T_FIXNUM);</div><div class='del'>-    zstream_expand_buffer_into(z, FIX2INT(size));</div><div class='del'>-    return size;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns bytes of data in the input buffer. Normally, returns 0.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_avail_in(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    Data_Get_Struct(obj, struct zstream, z);</div><div class='del'>-    return INT2FIX(NIL_P(z-&gt;input) ? 0 : (int)(RSTRING(z-&gt;input)-&gt;len));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the total bytes of the input data to the stream.  FIXME</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_total_in(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_uint2inum(get_zstream(obj)-&gt;stream.total_in);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the total bytes of the output data from the stream.  FIXME</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_total_out(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_uint2inum(get_zstream(obj)-&gt;stream.total_out);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Guesses the type of the data which have been inputed into the stream. The</div><div class='del'>- * returned value is either &lt;tt&gt;Zlib::BINARY&lt;/tt&gt;, &lt;tt&gt;Zlib::ASCII&lt;/tt&gt;, or</div><div class='del'>- * &lt;tt&gt;Zlib::UNKNOWN&lt;/tt&gt;.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_data_type(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(get_zstream(obj)-&gt;stream.data_type);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the adler-32 checksum.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_adler(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-	return rb_uint2inum(get_zstream(obj)-&gt;stream.adler);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns true if the stream is finished.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_finished_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return ZSTREAM_IS_FINISHED(get_zstream(obj)) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns true if the stream is closed.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_zstream_closed_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    Data_Get_Struct(obj, struct zstream, z);</div><div class='del'>-    return ZSTREAM_IS_READY(z) ? Qfalse : Qtrue;</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'>- * Document-class: Zlib::Deflate</div><div class='del'>- *</div><div class='del'>- * Zlib::Deflate is the class for compressing data.  See Zlib::Stream for more</div><div class='del'>- * information.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#define FIXNUMARG(val, ifnil) \</div><div class='del'>-    (NIL_P((val)) ? (ifnil) \</div><div class='del'>-    : ((void)Check_Type((val), T_FIXNUM), FIX2INT((val))))</div><div class='del'>-</div><div class='del'>-#define ARG_LEVEL(val)     FIXNUMARG((val), Z_DEFAULT_COMPRESSION)</div><div class='del'>-#define ARG_WBITS(val)     FIXNUMARG((val), MAX_WBITS)</div><div class='del'>-#define ARG_MEMLEVEL(val)  FIXNUMARG((val), DEF_MEM_LEVEL)</div><div class='del'>-#define ARG_STRATEGY(val)  FIXNUMARG((val), Z_DEFAULT_STRATEGY)</div><div class='del'>-#define ARG_FLUSH(val)     FIXNUMARG((val), Z_NO_FLUSH)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return zstream_deflate_new(klass);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib::Deflate.new(level=nil, windowBits=nil, memlevel=nil, strategy=nil)</div><div class='del'>- *</div><div class='del'>- * Creates a new deflate stream for compression. See zlib.h for details of</div><div class='del'>- * each argument. If an argument is nil, the default value of that argument is</div><div class='del'>- * used.</div><div class='del'>- *</div><div class='del'>- * TODO: document better!</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_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'>-    struct zstream *z;</div><div class='del'>-    VALUE level, wbits, memlevel, strategy;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "04", &amp;level, &amp;wbits, &amp;memlevel, &amp;strategy);</div><div class='del'>-    Data_Get_Struct(obj, struct zstream, z);</div><div class='del'>-</div><div class='del'>-    err = deflateInit2(&amp;z-&gt;stream, ARG_LEVEL(level), Z_DEFLATED,</div><div class='del'>-		       ARG_WBITS(wbits), ARG_MEMLEVEL(memlevel),</div><div class='del'>-		       ARG_STRATEGY(strategy));</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-    }</div><div class='del'>-    ZSTREAM_READY(z);</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'>- * Duplicates the deflate stream.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_init_copy(self, orig)</div><div class='del'>-    VALUE self, orig;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z1, *z2;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(self, struct zstream, z1);</div><div class='del'>-    z2 = get_zstream(orig);</div><div class='del'>-</div><div class='del'>-    err = deflateCopy(&amp;z1-&gt;stream, &amp;z2-&gt;stream);</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, 0);</div><div class='del'>-    }</div><div class='del'>-    z1-&gt;input = NIL_P(z2-&gt;input) ? Qnil : rb_str_dup(z2-&gt;input);</div><div class='del'>-    z1-&gt;buf   = NIL_P(z2-&gt;buf)   ? Qnil : rb_str_dup(z2-&gt;buf);</div><div class='del'>-    z1-&gt;buf_filled = z2-&gt;buf_filled;</div><div class='del'>-    z1-&gt;flags = z2-&gt;flags;</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'>-deflate_run(args)</div><div class='del'>-    VALUE args;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = (struct zstream *)((VALUE *)args)[0];</div><div class='del'>-    VALUE src = ((VALUE *)args)[1];</div><div class='del'>-</div><div class='del'>-    zstream_run(z, RSTRING(src)-&gt;ptr, RSTRING(src)-&gt;len, Z_FINISH);</div><div class='del'>-    return zstream_detach_buffer(z);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib::Deflate.deflate(string[, level])</div><div class='del'>- *</div><div class='del'>- * Compresses the given +string+. Valid values of level are</div><div class='del'>- * &lt;tt&gt;Zlib::NO_COMPRESSION&lt;/tt&gt;, &lt;tt&gt;Zlib::BEST_SPEED&lt;/tt&gt;,</div><div class='del'>- * &lt;tt&gt;Zlib::BEST_COMPRESSION&lt;/tt&gt;, &lt;tt&gt;Zlib::DEFAULT_COMPRESSION&lt;/tt&gt;, and an</div><div class='del'>- * integer from 0 to 9.</div><div class='del'>- *</div><div class='del'>- * This method is almost equivalent to the following code:</div><div class='del'>- *</div><div class='del'>- *   def deflate(string, level)</div><div class='del'>- *     z = Zlib::Deflate.new(level)</div><div class='del'>- *     dst = z.deflate(string, Zlib::FINISH)</div><div class='del'>- *     z.close</div><div class='del'>- *     dst</div><div class='del'>- *   end</div><div class='del'>- *</div><div class='del'>- * TODO: what's default value of +level+?</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_s_deflate(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    struct zstream z;</div><div class='del'>-    VALUE src, level, dst, args[2];</div><div class='del'>-    int err, lev;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;src, &amp;level);</div><div class='del'>-</div><div class='del'>-    lev = ARG_LEVEL(level);</div><div class='del'>-    StringValue(src);</div><div class='del'>-    zstream_init_deflate(&amp;z);</div><div class='del'>-    err = deflateInit(&amp;z.stream, lev);</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z.stream.msg);</div><div class='del'>-    }</div><div class='del'>-    ZSTREAM_READY(&amp;z);</div><div class='del'>-</div><div class='del'>-    args[0] = (VALUE)&amp;z;</div><div class='del'>-    args[1] = src;</div><div class='del'>-    dst = rb_ensure(deflate_run, (VALUE)args, zstream_end, (VALUE)&amp;z);</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(dst, src);</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-do_deflate(z, src, flush)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    VALUE src;</div><div class='del'>-    int flush;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(src)) {</div><div class='del'>-	zstream_run(z, "", 0, Z_FINISH);</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    StringValue(src);</div><div class='del'>-    if (flush != Z_NO_FLUSH || RSTRING(src)-&gt;len &gt; 0) { /* prevent BUF_ERROR */</div><div class='del'>-	zstream_run(z, RSTRING(src)-&gt;ptr, RSTRING(src)-&gt;len, flush);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: deflate(string[, flush])</div><div class='del'>- *</div><div class='del'>- * Inputs +string+ into the deflate stream and returns the output from the</div><div class='del'>- * stream.  On calling this method, both the input and the output buffers of</div><div class='del'>- * the stream are flushed. If +string+ is nil, this method finishes the</div><div class='del'>- * stream, just like Zlib::ZStream#finish.</div><div class='del'>- *</div><div class='del'>- * The value of +flush+ should be either &lt;tt&gt;Zlib::NO_FLUSH&lt;/tt&gt;,</div><div class='del'>- * &lt;tt&gt;Zlib::SYNC_FLUSH&lt;/tt&gt;, &lt;tt&gt;Zlib::FULL_FLUSH&lt;/tt&gt;, or</div><div class='del'>- * &lt;tt&gt;Zlib::FINISH&lt;/tt&gt;. See zlib.h for details.</div><div class='del'>- *</div><div class='del'>- * TODO: document better!</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_deflate(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'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-    VALUE src, flush, dst;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;src, &amp;flush);</div><div class='del'>-    OBJ_INFECT(obj, src);</div><div class='del'>-    do_deflate(z, src, ARG_FLUSH(flush));</div><div class='del'>-    dst = zstream_detach_buffer(z);</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(dst, obj);</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: &lt;&lt; string</div><div class='del'>- *</div><div class='del'>- * Inputs +string+ into the deflate stream just like Zlib::Deflate#deflate, but</div><div class='del'>- * returns the Zlib::Deflate object itself.  The output from the stream is</div><div class='del'>- * preserved in output buffer.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_addstr(obj, src)</div><div class='del'>-    VALUE obj, src;</div><div class='del'>-{</div><div class='del'>-    OBJ_INFECT(obj, src);</div><div class='del'>-    do_deflate(get_zstream(obj), src, Z_NO_FLUSH);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: flush(flush)</div><div class='del'>- *</div><div class='del'>- * This method is equivalent to &lt;tt&gt;deflate('', flush)&lt;/tt&gt;.  If flush is omitted,</div><div class='del'>- * &lt;tt&gt;Zlib::SYNC_FLUSH&lt;/tt&gt; is used as flush.  This method is just provided</div><div class='del'>- * to improve the readability of your Ruby program.</div><div class='del'>- *</div><div class='del'>- * TODO: document better!</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_flush(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'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-    VALUE v_flush, dst;</div><div class='del'>-    int flush;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;v_flush);</div><div class='del'>-    flush = FIXNUMARG(v_flush, Z_SYNC_FLUSH);</div><div class='del'>-    if (flush != Z_NO_FLUSH) {  /* prevent Z_BUF_ERROR */</div><div class='del'>-	zstream_run(z, "", 0, flush);</div><div class='del'>-    }</div><div class='del'>-    dst = zstream_detach_buffer(z);</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(dst, obj);</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: params(level, strategy)</div><div class='del'>- * </div><div class='del'>- * Changes the parameters of the deflate stream. See zlib.h for details. The</div><div class='del'>- * output from the stream by changing the params is preserved in output</div><div class='del'>- * buffer.</div><div class='del'>- *</div><div class='del'>- * TODO: document better!</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_params(obj, v_level, v_strategy)</div><div class='del'>-    VALUE obj, v_level, v_strategy;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-    int level, strategy;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    level = ARG_LEVEL(v_level);</div><div class='del'>-    strategy = ARG_STRATEGY(v_strategy);</div><div class='del'>-</div><div class='del'>-    err = deflateParams(&amp;z-&gt;stream, level, strategy);</div><div class='del'>-    while (err == Z_BUF_ERROR) {</div><div class='del'>-	rb_warning("deflateParams() returned Z_BUF_ERROR");</div><div class='del'>-	zstream_expand_buffer(z);</div><div class='del'>-	err = deflateParams(&amp;z-&gt;stream, level, strategy);</div><div class='del'>-    }</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</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: set_dictionary(string)</div><div class='del'>- *</div><div class='del'>- * Sets the preset dictionary and returns +string+. This method is available</div><div class='del'>- * just only after Zlib::Deflate.new or Zlib::ZStream#reset method was called.</div><div class='del'>- * See zlib.h for details.</div><div class='del'>- *</div><div class='del'>- * TODO: document better!</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_deflate_set_dictionary(obj, dic)</div><div class='del'>-    VALUE obj, dic;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-    VALUE src = dic;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(obj, dic);</div><div class='del'>-    StringValue(src);</div><div class='del'>-    err = deflateSetDictionary(&amp;z-&gt;stream,</div><div class='del'>-			       RSTRING(src)-&gt;ptr, RSTRING(src)-&gt;len);</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return dic;</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'>- * Document-class: Zlib::Inflate</div><div class='del'>- *</div><div class='del'>- * Zlib:Inflate is the class for decompressing compressed data.  Unlike</div><div class='del'>- * Zlib::Deflate, an instance of this class is not able to duplicate (clone,</div><div class='del'>- * dup) itself.</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'>-rb_inflate_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return zstream_inflate_new(klass);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib::Inflate.new(window_bits)</div><div class='del'>- *</div><div class='del'>- * Creates a new inflate stream for decompression. See zlib.h for details</div><div class='del'>- * of the argument.  If +window_bits+ is +nil+, the default value is used.</div><div class='del'>- *</div><div class='del'>- * TODO: document better!</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_inflate_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'>-    struct zstream *z;</div><div class='del'>-    VALUE wbits;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;wbits);</div><div class='del'>-    Data_Get_Struct(obj, struct zstream, z);</div><div class='del'>-</div><div class='del'>-    err = inflateInit2(&amp;z-&gt;stream, ARG_WBITS(wbits));</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-    }</div><div class='del'>-    ZSTREAM_READY(z);</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'>-inflate_run(args)</div><div class='del'>-    VALUE args;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = (struct zstream *)((VALUE *)args)[0];</div><div class='del'>-    VALUE src = ((VALUE *)args)[1];</div><div class='del'>-</div><div class='del'>-    zstream_run(z, RSTRING(src)-&gt;ptr, RSTRING(src)-&gt;len, Z_SYNC_FLUSH);</div><div class='del'>-    zstream_run(z, "", 0, Z_FINISH);  /* for checking errors */</div><div class='del'>-    return zstream_detach_buffer(z);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib::Inflate.inflate(string)</div><div class='del'>- *</div><div class='del'>- * Decompresses +string+. Raises a Zlib::NeedDict exception if a preset</div><div class='del'>- * dictionary is needed for decompression.</div><div class='del'>- *</div><div class='del'>- * This method is almost equivalent to the following code:</div><div class='del'>- *</div><div class='del'>- *   def inflate(string)</div><div class='del'>- *     zstream = Zlib::Inflate.new</div><div class='del'>- *     buf = zstream.inflate(string)</div><div class='del'>- *     zstream.finish</div><div class='del'>- *     zstream.close</div><div class='del'>- *     buf</div><div class='del'>- *   end</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_inflate_s_inflate(obj, src)</div><div class='del'>-    VALUE obj, src;</div><div class='del'>-{</div><div class='del'>-    struct zstream z;</div><div class='del'>-    VALUE dst, args[2];</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    StringValue(src);</div><div class='del'>-    zstream_init_inflate(&amp;z);</div><div class='del'>-    err = inflateInit(&amp;z.stream);</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z.stream.msg);</div><div class='del'>-    }</div><div class='del'>-    ZSTREAM_READY(&amp;z);</div><div class='del'>-</div><div class='del'>-    args[0] = (VALUE)&amp;z;</div><div class='del'>-    args[1] = src;</div><div class='del'>-    dst = rb_ensure(inflate_run, (VALUE)args, zstream_end, (VALUE)&amp;z);</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(dst, src);</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-do_inflate(z, src)</div><div class='del'>-    struct zstream *z;</div><div class='del'>-    VALUE src;</div><div class='del'>-{</div><div class='del'>-    if (NIL_P(src)) {</div><div class='del'>-	zstream_run(z, "", 0, Z_FINISH);</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    StringValue(src);</div><div class='del'>-    if (RSTRING(src)-&gt;len &gt; 0) { /* prevent Z_BUF_ERROR */</div><div class='del'>-	zstream_run(z, RSTRING(src)-&gt;ptr, RSTRING(src)-&gt;len, Z_SYNC_FLUSH);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: inflate(string)</div><div class='del'>- *</div><div class='del'>- * Inputs +string+ into the inflate stream and returns the output from the</div><div class='del'>- * stream.  Calling this method, both the input and the output buffer of the</div><div class='del'>- * stream are flushed.  If string is +nil+, this method finishes the stream,</div><div class='del'>- * just like Zlib::ZStream#finish.</div><div class='del'>- *</div><div class='del'>- * Raises a Zlib::NeedDict exception if a preset dictionary is needed to</div><div class='del'>- * decompress.  Set the dictionary by Zlib::Inflate#set_dictionary and then</div><div class='del'>- * call this method again with an empty string.  (&lt;i&gt;???&lt;/i&gt;)</div><div class='del'>- *</div><div class='del'>- * TODO: document better!</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_inflate_inflate(obj, src)</div><div class='del'>-    VALUE obj, src;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(obj, src);</div><div class='del'>-</div><div class='del'>-    if (ZSTREAM_IS_FINISHED(z)) {</div><div class='del'>-	if (NIL_P(src)) {</div><div class='del'>-	    dst = zstream_detach_buffer(z);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    StringValue(src);</div><div class='del'>-	    zstream_append_buffer2(z, src);</div><div class='del'>-	    dst = rb_str_new(0, 0);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	do_inflate(z, src);</div><div class='del'>-	dst = zstream_detach_buffer(z);</div><div class='del'>-	if (ZSTREAM_IS_FINISHED(z)) {</div><div class='del'>-	    zstream_passthrough_input(z);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(dst, obj);</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: &lt;&lt; string</div><div class='del'>- *</div><div class='del'>- * Inputs +string+ into the inflate stream just like Zlib::Inflate#inflate, but</div><div class='del'>- * returns the Zlib::Inflate object itself.  The output from the stream is</div><div class='del'>- * preserved in output buffer.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_inflate_addstr(obj, src)</div><div class='del'>-    VALUE obj, src;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(obj, src);</div><div class='del'>-</div><div class='del'>-    if (ZSTREAM_IS_FINISHED(z)) {</div><div class='del'>-	if (!NIL_P(src)) {</div><div class='del'>-	    StringValue(src);</div><div class='del'>-	    zstream_append_buffer2(z, src);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	do_inflate(z, src);</div><div class='del'>-	if (ZSTREAM_IS_FINISHED(z)) {</div><div class='del'>-	    zstream_passthrough_input(z);</div><div class='del'>-	}</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'>- * call-seq: sync(string)</div><div class='del'>- *</div><div class='del'>- * Inputs +string+ into the end of input buffer and skips data until a full</div><div class='del'>- * flush point can be found.  If the point is found in the buffer, this method</div><div class='del'>- * flushes the buffer and returns false.  Otherwise it returns +true+ and the</div><div class='del'>- * following data of full flush point is preserved in the buffer.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_inflate_sync(obj, src)</div><div class='del'>-    VALUE obj, src;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(obj, src);</div><div class='del'>-    StringValue(src);</div><div class='del'>-    return zstream_sync(z, RSTRING(src)-&gt;ptr, RSTRING(src)-&gt;len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Quoted verbatim from original documentation:</div><div class='del'>- *</div><div class='del'>- *   What is this?</div><div class='del'>- *</div><div class='del'>- * &lt;tt&gt;:)&lt;/tt&gt;</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_inflate_sync_point_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    err = inflateSyncPoint(&amp;z-&gt;stream);</div><div class='del'>-    if (err == 1) {</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</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'>- * Sets the preset dictionary and returns +string+.  This method is available just</div><div class='del'>- * only after a Zlib::NeedDict exception was raised.  See zlib.h for details.</div><div class='del'>- *</div><div class='del'>- * TODO: document better!</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_inflate_set_dictionary(obj, dic)</div><div class='del'>-    VALUE obj, dic;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = get_zstream(obj);</div><div class='del'>-    VALUE src = dic;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    OBJ_INFECT(obj, dic);</div><div class='del'>-    StringValue(src);</div><div class='del'>-    err = inflateSetDictionary(&amp;z-&gt;stream,</div><div class='del'>-			       RSTRING(src)-&gt;ptr, RSTRING(src)-&gt;len);</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, z-&gt;stream.msg);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return dic;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#if GZIP_SUPPORT</div><div class='del'>-</div><div class='del'>-/* NOTE: Features for gzip files of Ruby/zlib are written from scratch</div><div class='del'>- *       and using undocumented feature of zlib, negative wbits.</div><div class='del'>- *       I don't think gzFile APIs of zlib are good for Ruby.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*------- .gz file header --------*/</div><div class='del'>-</div><div class='del'>-#define GZ_MAGIC1             0x1f</div><div class='del'>-#define GZ_MAGIC2             0x8b</div><div class='del'>-#define GZ_METHOD_DEFLATE     8</div><div class='del'>-#define GZ_FLAG_MULTIPART     0x2</div><div class='del'>-#define GZ_FLAG_EXTRA         0x4</div><div class='del'>-#define GZ_FLAG_ORIG_NAME     0x8</div><div class='del'>-#define GZ_FLAG_COMMENT       0x10</div><div class='del'>-#define GZ_FLAG_ENCRYPT       0x20</div><div class='del'>-#define GZ_FLAG_UNKNOWN_MASK  0xc0</div><div class='del'>-</div><div class='del'>-#define GZ_EXTRAFLAG_FAST     0x4</div><div class='del'>-#define GZ_EXTRAFLAG_SLOW     0x2</div><div class='del'>-</div><div class='del'>-/* from zutil.h */</div><div class='del'>-#define OS_MSDOS    0x00</div><div class='del'>-#define OS_AMIGA    0x01</div><div class='del'>-#define OS_VMS      0x02</div><div class='del'>-#define OS_UNIX     0x03</div><div class='del'>-#define OS_ATARI    0x05</div><div class='del'>-#define OS_OS2      0x06</div><div class='del'>-#define OS_MACOS    0x07</div><div class='del'>-#define OS_TOPS20   0x0a</div><div class='del'>-#define OS_WIN32    0x0b</div><div class='del'>-</div><div class='del'>-#define OS_VMCMS    0x04</div><div class='del'>-#define OS_ZSYSTEM  0x08</div><div class='del'>-#define OS_CPM      0x09</div><div class='del'>-#define OS_QDOS     0x0c</div><div class='del'>-#define OS_RISCOS   0x0d</div><div class='del'>-#define OS_UNKNOWN  0xff</div><div class='del'>-</div><div class='del'>-#ifndef OS_CODE</div><div class='del'>-#define OS_CODE  OS_UNIX</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static ID id_write, id_read, id_flush, id_seek, id_close;</div><div class='del'>-static VALUE cGzError, cNoFooter, cCRCError, cLengthError;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*-------- gzfile internal APIs --------*/</div><div class='del'>-</div><div class='del'>-struct gzfile {</div><div class='del'>-    struct zstream z;</div><div class='del'>-    VALUE io;</div><div class='del'>-    int level;</div><div class='del'>-    time_t mtime;       /* for header */</div><div class='del'>-    int os_code;        /* for header */</div><div class='del'>-    VALUE orig_name;    /* for header; must be a String */</div><div class='del'>-    VALUE comment;      /* for header; must be a String */</div><div class='del'>-    unsigned long crc;</div><div class='del'>-    int lineno;</div><div class='del'>-    int ungetc;</div><div class='del'>-    void (*end)(struct gzfile *);</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-#define GZFILE_FLAG_SYNC             ZSTREAM_FLAG_UNUSED</div><div class='del'>-#define GZFILE_FLAG_HEADER_FINISHED  (ZSTREAM_FLAG_UNUSED &lt;&lt; 1)</div><div class='del'>-#define GZFILE_FLAG_FOOTER_FINISHED  (ZSTREAM_FLAG_UNUSED &lt;&lt; 2)</div><div class='del'>-</div><div class='del'>-#define GZFILE_IS_FINISHED(gz) \</div><div class='del'>-    (ZSTREAM_IS_FINISHED(&amp;gz-&gt;z) &amp;&amp; (gz)-&gt;z.buf_filled == 0)</div><div class='del'>-</div><div class='del'>-#define GZFILE_READ_SIZE  2048</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_mark(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    rb_gc_mark(gz-&gt;io);</div><div class='del'>-    rb_gc_mark(gz-&gt;orig_name);</div><div class='del'>-    rb_gc_mark(gz-&gt;comment);</div><div class='del'>-    zstream_mark(&amp;gz-&gt;z);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_free(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    struct zstream *z = &amp;gz-&gt;z;</div><div class='del'>-</div><div class='del'>-    if (ZSTREAM_IS_READY(z)) {</div><div class='del'>-	if (z-&gt;func == &amp;deflate_funcs) {</div><div class='del'>-	    finalizer_warn("Zlib::GzipWriter object must be closed explicitly.");</div><div class='del'>-	}</div><div class='del'>-	zstream_finalize(z);</div><div class='del'>-    }</div><div class='del'>-    free(gz);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_new(klass, funcs, endfunc)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const struct zstream_funcs *funcs;</div><div class='del'>-    void (*endfunc) _((struct gzfile *));</div><div class='del'>-{</div><div class='del'>-    VALUE obj;</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-</div><div class='del'>-    obj = Data_Make_Struct(klass, struct gzfile, gzfile_mark, gzfile_free, gz);</div><div class='del'>-    zstream_init(&amp;gz-&gt;z, funcs);</div><div class='del'>-    gz-&gt;io = Qnil;</div><div class='del'>-    gz-&gt;level = 0;</div><div class='del'>-    gz-&gt;mtime = 0;</div><div class='del'>-    gz-&gt;os_code = OS_CODE;</div><div class='del'>-    gz-&gt;orig_name = Qnil;</div><div class='del'>-    gz-&gt;comment = Qnil;</div><div class='del'>-    gz-&gt;crc = crc32(0, Z_NULL, 0);</div><div class='del'>-    gz-&gt;lineno = 0;</div><div class='del'>-    gz-&gt;ungetc = 0;</div><div class='del'>-    gz-&gt;end = endfunc;</div><div class='del'>-</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define gzfile_writer_new(gz) gzfile_new((gz),&amp;deflate_funcs,gzfile_writer_end)</div><div class='del'>-#define gzfile_reader_new(gz) gzfile_new((gz),&amp;inflate_funcs,gzfile_reader_end)</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_reset(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    zstream_reset(&amp;gz-&gt;z);</div><div class='del'>-    gz-&gt;crc = crc32(0, Z_NULL, 0);</div><div class='del'>-    gz-&gt;lineno = 0;</div><div class='del'>-    gz-&gt;ungetc = 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_close(gz, closeflag)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    int closeflag;</div><div class='del'>-{</div><div class='del'>-    VALUE io = gz-&gt;io;</div><div class='del'>-</div><div class='del'>-    gz-&gt;end(gz);</div><div class='del'>-    gz-&gt;io = Qnil;</div><div class='del'>-    gz-&gt;orig_name = Qnil;</div><div class='del'>-    gz-&gt;comment = Qnil;</div><div class='del'>-    if (closeflag &amp;&amp; rb_respond_to(io, id_close)) {</div><div class='del'>-	rb_funcall(io, id_close, 0);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_write_raw(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    if (gz-&gt;z.buf_filled &gt; 0) {</div><div class='del'>-	str = zstream_detach_buffer(&amp;gz-&gt;z);</div><div class='del'>-	OBJ_TAINT(str);  /* for safe */</div><div class='del'>-	rb_funcall(gz-&gt;io, id_write, 1, str);</div><div class='del'>-	if ((gz-&gt;z.flags &amp; GZFILE_FLAG_SYNC)</div><div class='del'>-	    &amp;&amp; rb_respond_to(gz-&gt;io, id_flush))</div><div class='del'>-	    rb_funcall(gz-&gt;io, id_flush, 0);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_read_raw(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    str = rb_funcall(gz-&gt;io, id_read, 1, INT2FIX(GZFILE_READ_SIZE));</div><div class='del'>-    if (!NIL_P(str)) {</div><div class='del'>-	Check_Type(str, T_STRING);</div><div class='del'>-    }</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-gzfile_read_raw_ensure(gz, size)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    int size;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    while (NIL_P(gz-&gt;z.input) || RSTRING(gz-&gt;z.input)-&gt;len &lt; size) {</div><div class='del'>-	str = gzfile_read_raw(gz);</div><div class='del'>-	if (NIL_P(str)) return Qfalse;</div><div class='del'>-	zstream_append_input2(&amp;gz-&gt;z, str);</div><div class='del'>-    }</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char *</div><div class='del'>-gzfile_read_raw_until_zero(gz, offset)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    long offset;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    char *p;</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	p = memchr(RSTRING(gz-&gt;z.input)-&gt;ptr + offset, '\0',</div><div class='del'>-		   RSTRING(gz-&gt;z.input)-&gt;len - offset);</div><div class='del'>-	if (p) break;</div><div class='del'>-	str = gzfile_read_raw(gz);</div><div class='del'>-	if (NIL_P(str)) {</div><div class='del'>-	    rb_raise(cGzError, "unexpected end of file");</div><div class='del'>-	}</div><div class='del'>-	offset = RSTRING(gz-&gt;z.input)-&gt;len;</div><div class='del'>-	zstream_append_input2(&amp;gz-&gt;z, str);</div><div class='del'>-    }</div><div class='del'>-    return p;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static unsigned int</div><div class='del'>-gzfile_get16(src)</div><div class='del'>-    const unsigned char *src;</div><div class='del'>-{</div><div class='del'>-    unsigned int n;</div><div class='del'>-    n  = *(src++) &amp; 0xff;</div><div class='del'>-    n |= (*(src++) &amp; 0xff) &lt;&lt; 8;</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static unsigned long</div><div class='del'>-gzfile_get32(src)</div><div class='del'>-    const unsigned char *src;</div><div class='del'>-{</div><div class='del'>-    unsigned long n;</div><div class='del'>-    n  = *(src++) &amp; 0xff;</div><div class='del'>-    n |= (*(src++) &amp; 0xff) &lt;&lt; 8;</div><div class='del'>-    n |= (*(src++) &amp; 0xff) &lt;&lt; 16;</div><div class='del'>-    n |= (*(src++) &amp; 0xffU) &lt;&lt; 24;</div><div class='del'>-    return n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_set32(n, dst)</div><div class='del'>-    unsigned long n;</div><div class='del'>-    unsigned char *dst;</div><div class='del'>-{</div><div class='del'>-    *(dst++) = n &amp; 0xff;</div><div class='del'>-    *(dst++) = (n &gt;&gt; 8) &amp; 0xff;</div><div class='del'>-    *(dst++) = (n &gt;&gt; 16) &amp; 0xff;</div><div class='del'>-    *dst     = (n &gt;&gt; 24) &amp; 0xff;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_make_header(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    unsigned char buf[10];  /* the size of gzip header */</div><div class='del'>-    unsigned char flags = 0, extraflags = 0;</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(gz-&gt;orig_name)) {</div><div class='del'>-	flags |= GZ_FLAG_ORIG_NAME;</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(gz-&gt;comment)) {</div><div class='del'>-	flags |= GZ_FLAG_COMMENT;</div><div class='del'>-    }</div><div class='del'>-    if (gz-&gt;mtime == 0) {</div><div class='del'>-	gz-&gt;mtime = time(0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (gz-&gt;level == Z_BEST_SPEED) {</div><div class='del'>-	extraflags |= GZ_EXTRAFLAG_FAST;</div><div class='del'>-    }</div><div class='del'>-    else if (gz-&gt;level == Z_BEST_COMPRESSION) {</div><div class='del'>-	extraflags |= GZ_EXTRAFLAG_SLOW;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    buf[0] = GZ_MAGIC1;</div><div class='del'>-    buf[1] = GZ_MAGIC2;</div><div class='del'>-    buf[2] = GZ_METHOD_DEFLATE;</div><div class='del'>-    buf[3] = flags;</div><div class='del'>-    gzfile_set32(gz-&gt;mtime, &amp;buf[4]);</div><div class='del'>-    buf[8] = extraflags;</div><div class='del'>-    buf[9] = gz-&gt;os_code;</div><div class='del'>-    zstream_append_buffer(&amp;gz-&gt;z, buf, sizeof(buf));</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(gz-&gt;orig_name)) {</div><div class='del'>-	zstream_append_buffer2(&amp;gz-&gt;z, gz-&gt;orig_name);</div><div class='del'>-	zstream_append_buffer(&amp;gz-&gt;z, "\0", 1);</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(gz-&gt;comment)) {</div><div class='del'>-	zstream_append_buffer2(&amp;gz-&gt;z, gz-&gt;comment);</div><div class='del'>-	zstream_append_buffer(&amp;gz-&gt;z, "\0", 1);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    gz-&gt;z.flags |= GZFILE_FLAG_HEADER_FINISHED;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_make_footer(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    unsigned char buf[8];  /* 8 is the size of gzip footer */</div><div class='del'>-</div><div class='del'>-    gzfile_set32(gz-&gt;crc, buf);</div><div class='del'>-    gzfile_set32(gz-&gt;z.stream.total_in, &amp;buf[4]);</div><div class='del'>-    zstream_append_buffer(&amp;gz-&gt;z, buf, sizeof(buf));</div><div class='del'>-    gz-&gt;z.flags |= GZFILE_FLAG_FOOTER_FINISHED;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_read_header(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    const unsigned char *head;</div><div class='del'>-    long len;</div><div class='del'>-    char flags, *p;</div><div class='del'>-</div><div class='del'>-    if (!gzfile_read_raw_ensure(gz, 10)) {  /* 10 is the size of gzip header */</div><div class='del'>-	rb_raise(cGzError, "not in gzip format");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    head = RSTRING(gz-&gt;z.input)-&gt;ptr;</div><div class='del'>-</div><div class='del'>-    if (head[0] != GZ_MAGIC1 || head[1] != GZ_MAGIC2) {</div><div class='del'>-	rb_raise(cGzError, "not in gzip format");</div><div class='del'>-    }</div><div class='del'>-    if (head[2] != GZ_METHOD_DEFLATE) {</div><div class='del'>-	rb_raise(cGzError, "unsupported compression method %d", head[2]);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    flags = head[3];</div><div class='del'>-    if (flags &amp; GZ_FLAG_MULTIPART) {</div><div class='del'>-	rb_raise(cGzError, "multi-part gzip file is not supported");</div><div class='del'>-    }</div><div class='del'>-    else if (flags &amp; GZ_FLAG_ENCRYPT) {</div><div class='del'>-	rb_raise(cGzError, "encrypted gzip file is not supported");</div><div class='del'>-    }</div><div class='del'>-    else if (flags &amp; GZ_FLAG_UNKNOWN_MASK) {</div><div class='del'>-	rb_raise(cGzError, "unknown flags 0x%02x", flags);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (head[8] &amp; GZ_EXTRAFLAG_FAST) {</div><div class='del'>-	gz-&gt;level = Z_BEST_SPEED;</div><div class='del'>-    }</div><div class='del'>-    else if (head[8] &amp; GZ_EXTRAFLAG_SLOW) {</div><div class='del'>-	gz-&gt;level = Z_BEST_COMPRESSION;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	gz-&gt;level = Z_DEFAULT_COMPRESSION;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    gz-&gt;mtime = gzfile_get32(&amp;head[4]);</div><div class='del'>-    gz-&gt;os_code = head[9];</div><div class='del'>-    zstream_discard_input(&amp;gz-&gt;z, 10);</div><div class='del'>-</div><div class='del'>-    if (flags &amp; GZ_FLAG_EXTRA) {</div><div class='del'>-	if (!gzfile_read_raw_ensure(gz, 2)) {</div><div class='del'>-	    rb_raise(cGzError, "unexpected end of file");</div><div class='del'>-	}</div><div class='del'>-	len = gzfile_get16(RSTRING(gz-&gt;z.input)-&gt;ptr);</div><div class='del'>-	if (!gzfile_read_raw_ensure(gz, 2 + len)) {</div><div class='del'>-	    rb_raise(cGzError, "unexpected end of file");</div><div class='del'>-	}</div><div class='del'>-	zstream_discard_input(&amp;gz-&gt;z, 2 + len);</div><div class='del'>-    }</div><div class='del'>-    if (flags &amp; GZ_FLAG_ORIG_NAME) {</div><div class='del'>-	p = gzfile_read_raw_until_zero(gz, 0);</div><div class='del'>-	len = p - RSTRING(gz-&gt;z.input)-&gt;ptr;</div><div class='del'>-	gz-&gt;orig_name = rb_str_new(RSTRING(gz-&gt;z.input)-&gt;ptr, len);</div><div class='del'>-	OBJ_TAINT(gz-&gt;orig_name);  /* for safe */</div><div class='del'>-	zstream_discard_input(&amp;gz-&gt;z, len + 1);</div><div class='del'>-    }</div><div class='del'>-    if (flags &amp; GZ_FLAG_COMMENT) {</div><div class='del'>-	p = gzfile_read_raw_until_zero(gz, 0);</div><div class='del'>-	len = p - RSTRING(gz-&gt;z.input)-&gt;ptr;</div><div class='del'>-	gz-&gt;comment = rb_str_new(RSTRING(gz-&gt;z.input)-&gt;ptr, len);</div><div class='del'>-	OBJ_TAINT(gz-&gt;comment);  /* for safe */</div><div class='del'>-	zstream_discard_input(&amp;gz-&gt;z, len + 1);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (gz-&gt;z.input != Qnil &amp;&amp; RSTRING(gz-&gt;z.input)-&gt;len &gt; 0) {</div><div class='del'>-	zstream_run(&amp;gz-&gt;z, 0, 0, Z_SYNC_FLUSH);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_check_footer(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    unsigned long crc, length;</div><div class='del'>-</div><div class='del'>-    gz-&gt;z.flags |= GZFILE_FLAG_FOOTER_FINISHED;</div><div class='del'>-</div><div class='del'>-    if (!gzfile_read_raw_ensure(gz, 8)) { /* 8 is the size of gzip footer */</div><div class='del'>-	rb_raise(cNoFooter, "footer is not found");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    crc = gzfile_get32(RSTRING(gz-&gt;z.input)-&gt;ptr);</div><div class='del'>-    length = gzfile_get32(RSTRING(gz-&gt;z.input)-&gt;ptr + 4);</div><div class='del'>-</div><div class='del'>-    gz-&gt;z.stream.total_in += 8;  /* to rewind correctly */</div><div class='del'>-    zstream_discard_input(&amp;gz-&gt;z, 8);</div><div class='del'>-</div><div class='del'>-    if (gz-&gt;crc != crc) {</div><div class='del'>-	rb_raise(cCRCError, "invalid compressed data -- crc error");</div><div class='del'>-    }</div><div class='del'>-    if (gz-&gt;z.stream.total_out != length) {</div><div class='del'>-	rb_raise(cLengthError, "invalid compressed data -- length error");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_write(gz, str, len)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    Bytef *str;</div><div class='del'>-    uInt len;</div><div class='del'>-{</div><div class='del'>-    if (!(gz-&gt;z.flags &amp; GZFILE_FLAG_HEADER_FINISHED)) {</div><div class='del'>-	gzfile_make_header(gz);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (len &gt; 0 || (gz-&gt;z.flags &amp; GZFILE_FLAG_SYNC)) {</div><div class='del'>-	gz-&gt;crc = crc32(gz-&gt;crc, str, len);</div><div class='del'>-	zstream_run(&amp;gz-&gt;z, str, len, (gz-&gt;z.flags &amp; GZFILE_FLAG_SYNC)</div><div class='del'>-		    ? Z_SYNC_FLUSH : Z_NO_FLUSH);</div><div class='del'>-    }</div><div class='del'>-    gzfile_write_raw(gz);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static long</div><div class='del'>-gzfile_read_more(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE str;</div><div class='del'>-</div><div class='del'>-    while (!ZSTREAM_IS_FINISHED(&amp;gz-&gt;z)) {</div><div class='del'>-	str = gzfile_read_raw(gz);</div><div class='del'>-	if (NIL_P(str)) {</div><div class='del'>-	    if (!ZSTREAM_IS_FINISHED(&amp;gz-&gt;z)) {</div><div class='del'>-		rb_raise(cGzError, "unexpected end of file");</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	if (RSTRING(str)-&gt;len &gt; 0) { /* prevent Z_BUF_ERROR */</div><div class='del'>-	    zstream_run(&amp;gz-&gt;z, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len,</div><div class='del'>-			Z_SYNC_FLUSH);</div><div class='del'>-	}</div><div class='del'>-	if (gz-&gt;z.buf_filled &gt; 0) break;</div><div class='del'>-    }</div><div class='del'>-    return gz-&gt;z.buf_filled;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_calc_crc(gz, str)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    VALUE str;</div><div class='del'>-{</div><div class='del'>-    if (RSTRING(str)-&gt;len &lt;= gz-&gt;ungetc) {</div><div class='del'>-	gz-&gt;ungetc -= RSTRING(str)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	gz-&gt;crc = crc32(gz-&gt;crc, RSTRING(str)-&gt;ptr + gz-&gt;ungetc,</div><div class='del'>-			RSTRING(str)-&gt;len - gz-&gt;ungetc);</div><div class='del'>-	gz-&gt;ungetc = 0;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_read(gz, len)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    int len;</div><div class='del'>-{</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    if (len &lt; 0)</div><div class='del'>-        rb_raise(rb_eArgError, "negative length %d given", len);</div><div class='del'>-    if (len == 0)</div><div class='del'>-	return rb_str_new(0, 0);</div><div class='del'>-    while (!ZSTREAM_IS_FINISHED(&amp;gz-&gt;z) &amp;&amp; gz-&gt;z.buf_filled &lt; len) {</div><div class='del'>-	gzfile_read_more(gz);</div><div class='del'>-    }</div><div class='del'>-    if (GZFILE_IS_FINISHED(gz)) {</div><div class='del'>-	if (!(gz-&gt;z.flags &amp; GZFILE_FLAG_FOOTER_FINISHED)) {</div><div class='del'>-	    gzfile_check_footer(gz);</div><div class='del'>-	}</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    dst = zstream_shift_buffer(&amp;gz-&gt;z, len);</div><div class='del'>-    gzfile_calc_crc(gz, dst);</div><div class='del'>-</div><div class='del'>-    OBJ_TAINT(dst);  /* for safe */</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_read_all(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    while (!ZSTREAM_IS_FINISHED(&amp;gz-&gt;z)) {</div><div class='del'>-	gzfile_read_more(gz);</div><div class='del'>-    }</div><div class='del'>-    if (GZFILE_IS_FINISHED(gz)) {</div><div class='del'>-	if (!(gz-&gt;z.flags &amp; GZFILE_FLAG_FOOTER_FINISHED)) {</div><div class='del'>-	    gzfile_check_footer(gz);</div><div class='del'>-	}</div><div class='del'>-	return rb_str_new(0, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    dst = zstream_detach_buffer(&amp;gz-&gt;z);</div><div class='del'>-    gzfile_calc_crc(gz, dst);</div><div class='del'>-</div><div class='del'>-    OBJ_TAINT(dst);  /* for safe */</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_ungetc(gz, c)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    int c;</div><div class='del'>-{</div><div class='del'>-    zstream_buffer_ungetc(&amp;gz-&gt;z, c);</div><div class='del'>-    gz-&gt;ungetc++;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_writer_end_run(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = (struct gzfile *)arg;</div><div class='del'>-</div><div class='del'>-    if (!(gz-&gt;z.flags &amp; GZFILE_FLAG_HEADER_FINISHED)) {</div><div class='del'>-	gzfile_make_header(gz);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    zstream_run(&amp;gz-&gt;z, "", 0, Z_FINISH);</div><div class='del'>-    gzfile_make_footer(gz);</div><div class='del'>-    gzfile_write_raw(gz);</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_writer_end(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    if (ZSTREAM_IS_CLOSING(&amp;gz-&gt;z)) return;</div><div class='del'>-    gz-&gt;z.flags |= ZSTREAM_FLAG_CLOSING;</div><div class='del'>-</div><div class='del'>-    rb_ensure(gzfile_writer_end_run, (VALUE)gz, zstream_end, (VALUE)&amp;gz-&gt;z);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_reader_end_run(arg)</div><div class='del'>-    VALUE arg;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = (struct gzfile *)arg;</div><div class='del'>-</div><div class='del'>-    if (GZFILE_IS_FINISHED(gz)</div><div class='del'>-	&amp;&amp; !(gz-&gt;z.flags &amp; GZFILE_FLAG_FOOTER_FINISHED)) {</div><div class='del'>-	gzfile_check_footer(gz);</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 void</div><div class='del'>-gzfile_reader_end(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    if (ZSTREAM_IS_CLOSING(&amp;gz-&gt;z)) return;</div><div class='del'>-    gz-&gt;z.flags |= ZSTREAM_FLAG_CLOSING;</div><div class='del'>-</div><div class='del'>-    rb_ensure(gzfile_reader_end_run, (VALUE)gz, zstream_end, (VALUE)&amp;gz-&gt;z);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzfile_reader_rewind(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    long n;</div><div class='del'>-</div><div class='del'>-    n = gz-&gt;z.stream.total_in;</div><div class='del'>-    if (!NIL_P(gz-&gt;z.input)) {</div><div class='del'>-	n += RSTRING(gz-&gt;z.input)-&gt;len;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_funcall(gz-&gt;io, id_seek, 2, rb_int2inum(-n), INT2FIX(1));</div><div class='del'>-    gzfile_reset(gz);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_reader_get_unused(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    if (!ZSTREAM_IS_READY(&amp;gz-&gt;z)) return Qnil;</div><div class='del'>-    if (!GZFILE_IS_FINISHED(gz)) return Qnil;</div><div class='del'>-    if (!(gz-&gt;z.flags &amp; GZFILE_FLAG_FOOTER_FINISHED)) {</div><div class='del'>-	gzfile_check_footer(gz);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(gz-&gt;z.input)) return Qnil;</div><div class='del'>-</div><div class='del'>-    str = rb_str_dup(gz-&gt;z.input);</div><div class='del'>-    OBJ_TAINT(str);  /* for safe */</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct gzfile *</div><div class='del'>-get_gzfile(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct gzfile, gz);</div><div class='del'>-    if (!ZSTREAM_IS_READY(&amp;gz-&gt;z)) {</div><div class='del'>-	rb_raise(cGzError, "closed gzip stream");</div><div class='del'>-    }</div><div class='del'>-    return gz;</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'>- * Document-class: Zlib::GzipFile</div><div class='del'>- *</div><div class='del'>- * Zlib::GzipFile is an abstract class for handling a gzip formatted</div><div class='del'>- * compressed file. The operations are defined in the subclasses,</div><div class='del'>- * Zlib::GzipReader for reading, and Zlib::GzipWriter for writing.</div><div class='del'>- *</div><div class='del'>- * GzipReader should be used by associating an IO, or IO-like, object.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_ensure_close(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct gzfile, gz);</div><div class='del'>-    if (ZSTREAM_IS_READY(&amp;gz-&gt;z)) {</div><div class='del'>-	gzfile_close(gz, 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'>- * See Zlib::GzipReader#wrap and Zlib::GzipWriter#wrap.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_s_wrap(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE obj = rb_class_new_instance(argc, argv, klass);</div><div class='del'>-</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	return rb_ensure(rb_yield, obj, gzfile_ensure_close, obj);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	return obj;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * See Zlib::GzipReader#open and Zlib::GzipWriter#open.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-gzfile_s_open(argc, argv, klass, mode)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-    const char *mode;</div><div class='del'>-{</div><div class='del'>-    VALUE io, filename;</div><div class='del'>-</div><div class='del'>-    if (argc &lt; 1) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments (0 for 1)");</div><div class='del'>-    }</div><div class='del'>-    filename = argv[0];</div><div class='del'>-    SafeStringValue(filename);</div><div class='del'>-    io = rb_file_open(RSTRING(filename)-&gt;ptr, mode);</div><div class='del'>-</div><div class='del'>-    argv[0] = io;</div><div class='del'>-    return rb_gzfile_s_wrap(argc, argv, klass);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_to_io(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return get_gzfile(obj)-&gt;io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns CRC value of the uncompressed data.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_crc(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_uint2inum(get_gzfile(obj)-&gt;crc);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns last modification time recorded in the gzip file header.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_mtime(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_time_new(get_gzfile(obj)-&gt;mtime, (time_t)0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns compression level.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_level(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(get_gzfile(obj)-&gt;level);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns OS code number recorded in the gzip file header.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_os_code(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(get_gzfile(obj)-&gt;os_code);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns original filename recorded in the gzip file header, or +nil+ if</div><div class='del'>- * original filename is not present.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_orig_name(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE str = get_gzfile(obj)-&gt;orig_name;</div><div class='del'>-    if (!NIL_P(str)) {</div><div class='del'>-	str = rb_str_dup(str);</div><div class='del'>-    }</div><div class='del'>-    OBJ_TAINT(str);  /* for safe */</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns comments recorded in the gzip file header, or nil if the comments</div><div class='del'>- * is not present.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_comment(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE str = get_gzfile(obj)-&gt;comment;</div><div class='del'>-    if (!NIL_P(str)) {</div><div class='del'>-	str = rb_str_dup(str);</div><div class='del'>-    }</div><div class='del'>-    OBJ_TAINT(str);  /* for safe */</div><div class='del'>-    return str;</div><div class='del'>-}</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'>-rb_gzfile_lineno(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return INT2NUM(get_gzfile(obj)-&gt;lineno);</div><div class='del'>-}</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'>-rb_gzfile_set_lineno(obj, lineno)</div><div class='del'>-    VALUE obj, lineno;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    gz-&gt;lineno = NUM2INT(lineno);</div><div class='del'>-    return lineno;</div><div class='del'>-}</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'>-rb_gzfile_set_mtime(obj, mtime)</div><div class='del'>-    VALUE obj, mtime;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    if (gz-&gt;z.flags &amp; GZFILE_FLAG_HEADER_FINISHED) {</div><div class='del'>-	rb_raise(cGzError, "header is already written");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (FIXNUM_P(time)) {</div><div class='del'>-	gz-&gt;mtime = FIX2INT(mtime);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	val = rb_Integer(mtime);</div><div class='del'>-	gz-&gt;mtime = FIXNUM_P(val) ? FIX2INT(val) : rb_big2ulong(val);</div><div class='del'>-    }</div><div class='del'>-    return mtime;</div><div class='del'>-}</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'>-rb_gzfile_set_orig_name(obj, str)</div><div class='del'>-    VALUE obj, str;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    VALUE s;</div><div class='del'>-    char *p;</div><div class='del'>-</div><div class='del'>-    if (gz-&gt;z.flags &amp; GZFILE_FLAG_HEADER_FINISHED) {</div><div class='del'>-	rb_raise(cGzError, "header is already written");</div><div class='del'>-    }</div><div class='del'>-    s = rb_str_dup(rb_str_to_str(str));</div><div class='del'>-    p = memchr(RSTRING(s)-&gt;ptr, '\0', RSTRING(s)-&gt;len);</div><div class='del'>-    if (p) {</div><div class='del'>-	rb_str_resize(s, p - RSTRING(s)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-    gz-&gt;orig_name = s;</div><div class='del'>-    return str;</div><div class='del'>-}</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'>-rb_gzfile_set_comment(obj, str)</div><div class='del'>-    VALUE obj, str;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    VALUE s;</div><div class='del'>-    char *p;</div><div class='del'>-</div><div class='del'>-    if (gz-&gt;z.flags &amp; GZFILE_FLAG_HEADER_FINISHED) {</div><div class='del'>-	rb_raise(cGzError, "header is already written");</div><div class='del'>-    }</div><div class='del'>-    s = rb_str_dup(rb_str_to_str(str));</div><div class='del'>-    p = memchr(RSTRING(s)-&gt;ptr, '\0', RSTRING(s)-&gt;len);</div><div class='del'>-    if (p) {</div><div class='del'>-	rb_str_resize(s, p - RSTRING(s)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-    gz-&gt;comment = s;</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Closes the GzipFile object. This method calls close method of the</div><div class='del'>- * associated IO object. Returns the associated IO object.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_close(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    VALUE io;</div><div class='del'>-</div><div class='del'>-    io = gz-&gt;io;</div><div class='del'>-    gzfile_close(gz, 1);</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Closes the GzipFile object. Unlike Zlib::GzipFile#close, this method never</div><div class='del'>- * calls the close method of the associated IO object. Returns the associated IO</div><div class='del'>- * object.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_finish(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    VALUE io;</div><div class='del'>-</div><div class='del'>-    io = gz-&gt;io;</div><div class='del'>-    gzfile_close(gz, 0);</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_closed_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    Data_Get_Struct(obj, struct gzfile, gz);</div><div class='del'>-    return NIL_P(gz-&gt;io) ? Qtrue : Qfalse;</div><div class='del'>-}</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'>-rb_gzfile_eof_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    return GZFILE_IS_FINISHED(gz) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_sync(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return (get_gzfile(obj)-&gt;z.flags &amp; GZFILE_FLAG_SYNC) ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: sync = flag</div><div class='del'>- *</div><div class='del'>- * Same as IO.  If flag is +true+, the associated IO object must respond to the</div><div class='del'>- * +flush+ method.  While +sync+ mode is +true+, the compression ratio</div><div class='del'>- * decreases sharply.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzfile_set_sync(obj, mode)</div><div class='del'>-    VALUE obj, mode;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-</div><div class='del'>-    if (RTEST(mode)) {</div><div class='del'>-	gz-&gt;z.flags |= GZFILE_FLAG_SYNC;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	gz-&gt;z.flags &amp;= ~GZFILE_FLAG_SYNC;</div><div class='del'>-    }</div><div class='del'>-    return mode;</div><div class='del'>-}</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'>-rb_gzfile_total_in(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_uint2inum(get_gzfile(obj)-&gt;z.stream.total_in);</div><div class='del'>-}</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'>-rb_gzfile_total_out(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    return rb_uint2inum(gz-&gt;z.stream.total_out - gz-&gt;z.buf_filled);</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'>- * Document-class: Zlib::GzipWriter</div><div class='del'>- *</div><div class='del'>- * Zlib::GzipWriter is a class for writing gzipped files.  GzipWriter should</div><div class='del'>- * be used with an instance of IO, or IO-like, object. </div><div class='del'>- *</div><div class='del'>- * For example:</div><div class='del'>- *</div><div class='del'>- *   Zlib::GzipWriter.open('hoge.gz') do |gz|</div><div class='del'>- *     gz.write 'jugemu jugemu gokou no surikire...'</div><div class='del'>- *   end</div><div class='del'>- *</div><div class='del'>- *   File.open('hoge.gz', 'w') do |f|</div><div class='del'>- *     gz = Zlib::GzipWriter.new(f)</div><div class='del'>- *     gz.write 'jugemu jugemu gokou no surikire...'</div><div class='del'>- *     gz.close</div><div class='del'>- *   end</div><div class='del'>- *</div><div class='del'>- *   # TODO: test these.  Are they equivalent?  Can GzipWriter.new take a</div><div class='del'>- *   # block?</div><div class='del'>- *</div><div class='del'>- * NOTE: Due to the limitation of Ruby's finalizer, you must explicitly close</div><div class='del'>- * GzipWriter objects by Zlib::GzipWriter#close etc.  Otherwise, GzipWriter</div><div class='del'>- * will be not able to write the gzip footer and will generate a broken gzip</div><div class='del'>- * file.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzwriter_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return gzfile_writer_new(klass);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib::GzipWriter.open(filename, level=nil, strategy=nil) { |gz| ... }</div><div class='del'>- *</div><div class='del'>- * Opens a file specified by +filename+ for writing gzip compressed data, and</div><div class='del'>- * returns a GzipWriter object associated with that file.  Further details of</div><div class='del'>- * this method are found in Zlib::GzipWriter.new and Zlib::GzipWriter#wrap.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzwriter_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return gzfile_s_open(argc, argv, klass, "wb");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib::GzipWriter.new(io, level, strategy)</div><div class='del'>- *</div><div class='del'>- * Creates a GzipWriter object associated with +io+. +level+ and +strategy+</div><div class='del'>- * should be the same as the arguments of Zlib::Deflate.new.  The GzipWriter</div><div class='del'>- * object writes gzipped data to +io+.  At least, +io+ must respond to the</div><div class='del'>- * +write+ method that behaves same as write method in IO class.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzwriter_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'>-    struct gzfile *gz;</div><div class='del'>-    VALUE io, level, strategy;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "12", &amp;io, &amp;level, &amp;strategy);</div><div class='del'>-    Data_Get_Struct(obj, struct gzfile, gz);</div><div class='del'>-</div><div class='del'>-    /* this is undocumented feature of zlib */</div><div class='del'>-    gz-&gt;level = ARG_LEVEL(level);</div><div class='del'>-    err = deflateInit2(&amp;gz-&gt;z.stream, gz-&gt;level, Z_DEFLATED,</div><div class='del'>-		       -MAX_WBITS, DEF_MEM_LEVEL, ARG_STRATEGY(strategy));</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, gz-&gt;z.stream.msg);</div><div class='del'>-    }</div><div class='del'>-    gz-&gt;io = io;</div><div class='del'>-    ZSTREAM_READY(&amp;gz-&gt;z);</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'>- * call-seq: flush(flush=nil)</div><div class='del'>- *</div><div class='del'>- * Flushes all the internal buffers of the GzipWriter object.  The meaning of</div><div class='del'>- * +flush+ is same as in Zlib::Deflate#deflate.  &lt;tt&gt;Zlib::SYNC_FLUSH&lt;/tt&gt; is used if</div><div class='del'>- * +flush+ is omitted.  It is no use giving flush &lt;tt&gt;Zlib::NO_FLUSH&lt;/tt&gt;.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzwriter_flush(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'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    VALUE v_flush;</div><div class='del'>-    int flush;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;v_flush);</div><div class='del'>-</div><div class='del'>-    flush = FIXNUMARG(v_flush, Z_SYNC_FLUSH);</div><div class='del'>-    if (flush != Z_NO_FLUSH) {  /* prevent Z_BUF_ERROR */</div><div class='del'>-	zstream_run(&amp;gz-&gt;z, "", 0, flush);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    gzfile_write_raw(gz);</div><div class='del'>-    if (rb_respond_to(gz-&gt;io, id_flush)) {</div><div class='del'>-	rb_funcall(gz-&gt;io, id_flush, 0);</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'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzwriter_write(obj, str)</div><div class='del'>-    VALUE obj, str;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-</div><div class='del'>-    if (TYPE(str) != T_STRING) {</div><div class='del'>-	str = rb_obj_as_string(str);</div><div class='del'>-    }</div><div class='del'>-    gzfile_write(gz, RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-    return INT2FIX(RSTRING(str)-&gt;len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzwriter_putc(obj, ch)</div><div class='del'>-    VALUE obj, ch;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    char c = NUM2CHR(ch);</div><div class='del'>-</div><div class='del'>-    gzfile_write(gz, &amp;c, 1);</div><div class='del'>-    return ch;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-method: &lt;&lt;</div><div class='del'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-#define rb_gzwriter_addstr  rb_io_addstr</div><div class='del'>-/*</div><div class='del'>- * Document-method: printf</div><div class='del'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-#define rb_gzwriter_printf  rb_io_printf</div><div class='del'>-/*</div><div class='del'>- * Document-method: print</div><div class='del'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-#define rb_gzwriter_print  rb_io_print</div><div class='del'>-/*</div><div class='del'>- * Document-method: puts</div><div class='del'>- * Same as IO.</div><div class='del'>- */</div><div class='del'>-#define rb_gzwriter_puts  rb_io_puts</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/* ------------------------------------------------------------------------- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Zlib::GzipReader</div><div class='del'>- *</div><div class='del'>- * Zlib::GzipReader is the class for reading a gzipped file.  GzipReader should</div><div class='del'>- * be used an IO, or -IO-lie, object.</div><div class='del'>- *</div><div class='del'>- *   Zlib::GzipReader.open('hoge.gz') {|gz|</div><div class='del'>- *     print gz.read</div><div class='del'>- *   }</div><div class='del'>- *</div><div class='del'>- *   File.open('hoge.gz') do |f|</div><div class='del'>- *     gz = Zlib::GzipReader.new(f)</div><div class='del'>- *     print gz.read</div><div class='del'>- *     gz.close</div><div class='del'>- *   end</div><div class='del'>- *</div><div class='del'>- *   # TODO: test these.  Are they equivalent?  Can GzipReader.new take a</div><div class='del'>- *   # block?</div><div class='del'>- *</div><div class='del'>- * == Method Catalogue</div><div class='del'>- *</div><div class='del'>- * The following methods in Zlib::GzipReader are just like their counterparts</div><div class='del'>- * in IO, but they raise Zlib::Error or Zlib::GzipFile::Error exception if an</div><div class='del'>- * error was found in the gzip file.</div><div class='del'>- * - #each</div><div class='del'>- * - #each_line</div><div class='del'>- * - #each_byte</div><div class='del'>- * - #gets</div><div class='del'>- * - #getc</div><div class='del'>- * - #lineno</div><div class='del'>- * - #lineno=</div><div class='del'>- * - #read</div><div class='del'>- * - #readchar</div><div class='del'>- * - #readline</div><div class='del'>- * - #readlines</div><div class='del'>- * - #ungetc</div><div class='del'>- *</div><div class='del'>- * Be careful of the footer of the gzip file. A gzip file has the checksum of</div><div class='del'>- * pre-compressed data in its footer. GzipReader checks all uncompressed data</div><div class='del'>- * against that checksum at the following cases, and if it fails, raises</div><div class='del'>- * &lt;tt&gt;Zlib::GzipFile::NoFooter&lt;/tt&gt;, &lt;tt&gt;Zlib::GzipFile::CRCError&lt;/tt&gt;, or</div><div class='del'>- * &lt;tt&gt;Zlib::GzipFile::LengthError&lt;/tt&gt; exception.</div><div class='del'>- *</div><div class='del'>- * - When an reading request is received beyond the end of file (the end of</div><div class='del'>- *   compressed data). That is, when Zlib::GzipReader#read,</div><div class='del'>- *   Zlib::GzipReader#gets, or some other methods for reading returns nil.</div><div class='del'>- * - When Zlib::GzipFile#close method is called after the object reaches the</div><div class='del'>- *   end of file.</div><div class='del'>- * - When Zlib::GzipReader#unused method is called after the object reaches</div><div class='del'>- *   the end of file.</div><div class='del'>- *</div><div class='del'>- * The rest of the methods are adequately described in their own</div><div class='del'>- * documentation.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_s_allocate(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return gzfile_reader_new(klass);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib::GzipReader.open(filename) {|gz| ... }</div><div class='del'>- *</div><div class='del'>- * Opens a file specified by +filename+ as a gzipped file, and returns a</div><div class='del'>- * GzipReader object associated with that file.  Further details of this method</div><div class='del'>- * are in Zlib::GzipReader.new and ZLib::GzipReader.wrap.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return gzfile_s_open(argc, argv, klass, "rb");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq: Zlib::GzipReader.new(io)</div><div class='del'>- *</div><div class='del'>- * Creates a GzipReader object associated with +io+. The GzipReader object reads</div><div class='del'>- * gzipped data from +io+, and parses/decompresses them.  At least, +io+ must have</div><div class='del'>- * a +read+ method that behaves same as the +read+ method in IO class.</div><div class='del'>- *</div><div class='del'>- * If the gzip file header is incorrect, raises an Zlib::GzipFile::Error</div><div class='del'>- * exception.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_initialize(obj, io)</div><div class='del'>-    VALUE obj, io;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    int err;</div><div class='del'>-</div><div class='del'>-    Data_Get_Struct(obj, struct gzfile, gz);</div><div class='del'>-</div><div class='del'>-    /* this is undocumented feature of zlib */</div><div class='del'>-    err = inflateInit2(&amp;gz-&gt;z.stream, -MAX_WBITS);</div><div class='del'>-    if (err != Z_OK) {</div><div class='del'>-	raise_zlib_error(err, gz-&gt;z.stream.msg);</div><div class='del'>-    }</div><div class='del'>-    gz-&gt;io = io;</div><div class='del'>-    ZSTREAM_READY(&amp;gz-&gt;z);</div><div class='del'>-    gzfile_read_header(gz);</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'>- * Resets the position of the file pointer to the point created the GzipReader</div><div class='del'>- * object.  The associated IO object needs to respond to the +seek+ method.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_rewind(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    gzfile_reader_rewind(gz);</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Returns the rest of the data which had read for parsing gzip format, or</div><div class='del'>- * +nil+ if the whole gzip file is not parsed yet.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_unused(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-    Data_Get_Struct(obj, struct gzfile, gz);</div><div class='del'>-    return gzfile_reader_get_unused(gz);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_read(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'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    VALUE vlen;</div><div class='del'>-    int len;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;vlen);</div><div class='del'>-    if (NIL_P(vlen)) {</div><div class='del'>-	return gzfile_read_all(gz);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    len = NUM2INT(vlen);</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "negative length %d given", len);</div><div class='del'>-    }</div><div class='del'>-    return gzfile_read(gz, len);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_getc(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    VALUE dst;</div><div class='del'>-</div><div class='del'>-    dst = gzfile_read(gz, 1);</div><div class='del'>-    if (!NIL_P(dst)) {</div><div class='del'>-	dst = INT2FIX((unsigned int)(RSTRING(dst)-&gt;ptr[0]) &amp; 0xff);</div><div class='del'>-    }</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_readchar(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE dst;</div><div class='del'>-    dst = rb_gzreader_getc(obj);</div><div class='del'>-    if (NIL_P(dst)) {</div><div class='del'>-	rb_raise(rb_eEOFError, "end of file reached");</div><div class='del'>-    }</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_each_byte(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    VALUE c;</div><div class='del'>-    while (!NIL_P(c = rb_gzreader_getc(obj))) {</div><div class='del'>-	rb_yield(c);</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'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_ungetc(obj, ch)</div><div class='del'>-    VALUE obj, ch;</div><div class='del'>-{</div><div class='del'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    gzfile_ungetc(gz, NUM2CHR(ch));</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gzreader_skip_linebreaks(gz)</div><div class='del'>-    struct gzfile *gz;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    char *p;</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    while (gz-&gt;z.buf_filled == 0) {</div><div class='del'>-	if (GZFILE_IS_FINISHED(gz)) return;</div><div class='del'>-	gzfile_read_more(gz);</div><div class='del'>-    }</div><div class='del'>-    n = 0;</div><div class='del'>-    p = RSTRING(gz-&gt;z.buf)-&gt;ptr;</div><div class='del'>-</div><div class='del'>-    while (n++, *(p++) == '\n') {</div><div class='del'>-	if (n &gt;= gz-&gt;z.buf_filled) {</div><div class='del'>-	    str = zstream_detach_buffer(&amp;gz-&gt;z);</div><div class='del'>-	    gzfile_calc_crc(gz, str);</div><div class='del'>-	    while (gz-&gt;z.buf_filled == 0) {</div><div class='del'>-		if (GZFILE_IS_FINISHED(gz)) return;</div><div class='del'>-		gzfile_read_more(gz);</div><div class='del'>-	    }</div><div class='del'>-	    n = 0;</div><div class='del'>-	    p = RSTRING(gz-&gt;z.buf)-&gt;ptr;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    str = zstream_shift_buffer(&amp;gz-&gt;z, n - 1);</div><div class='del'>-    gzfile_calc_crc(gz, str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rscheck(rsptr, rslen, rs)</div><div class='del'>-    char *rsptr;</div><div class='del'>-    long rslen;</div><div class='del'>-    VALUE rs;</div><div class='del'>-{</div><div class='del'>-    if (RSTRING(rs)-&gt;ptr != rsptr &amp;&amp; RSTRING(rs)-&gt;len != rslen)</div><div class='del'>-	rb_raise(rb_eRuntimeError, "rs modified");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gzreader_gets(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'>-    struct gzfile *gz = get_gzfile(obj);</div><div class='del'>-    volatile VALUE rs;</div><div class='del'>-    VALUE dst;</div><div class='del'>-    char *rsptr, *p, *res;</div><div class='del'>-    long rslen, n;</div><div class='del'>-    int rspara;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	rs = rb_rs;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "1", &amp;rs);</div><div class='del'>-	if (!NIL_P(rs)) {</div><div class='del'>-	    Check_Type(rs, T_STRING);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (NIL_P(rs)) {</div><div class='del'>-	dst = gzfile_read_all(gz);</div><div class='del'>-	if (RSTRING(dst)-&gt;len != 0) gz-&gt;lineno++;</div><div class='del'>-	else</div><div class='del'>-		return Qnil;</div><div class='del'>-	return dst;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (RSTRING(rs)-&gt;len == 0) {</div><div class='del'>-	rsptr = "\n\n";</div><div class='del'>-	rslen = 2;</div><div class='del'>-	rspara = 1;</div><div class='del'>-    } else {</div><div class='del'>-	rsptr = RSTRING(rs)-&gt;ptr;</div><div class='del'>-	rslen = RSTRING(rs)-&gt;len;</div><div class='del'>-	rspara = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rspara) {</div><div class='del'>-	gzreader_skip_linebreaks(gz);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while (gz-&gt;z.buf_filled &lt; rslen) {</div><div class='del'>-	if (ZSTREAM_IS_FINISHED(&amp;gz-&gt;z)) {</div><div class='del'>-	    if (gz-&gt;z.buf_filled &gt; 0) gz-&gt;lineno++;</div><div class='del'>-	    return gzfile_read(gz, rslen);</div><div class='del'>-	}</div><div class='del'>-	gzfile_read_more(gz);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    p = RSTRING(gz-&gt;z.buf)-&gt;ptr;</div><div class='del'>-    n = rslen;</div><div class='del'>-    for (;;) {</div><div class='del'>-	if (n &gt; gz-&gt;z.buf_filled) {</div><div class='del'>-	    if (ZSTREAM_IS_FINISHED(&amp;gz-&gt;z)) break;</div><div class='del'>-	    gzfile_read_more(gz);</div><div class='del'>-	    p = RSTRING(gz-&gt;z.buf)-&gt;ptr + n - rslen;</div><div class='del'>-	}</div><div class='del'>-	if (!rspara) rscheck(rsptr, rslen, rs);</div><div class='del'>-	res = memchr(p, rsptr[0], (gz-&gt;z.buf_filled - n + 1));</div><div class='del'>-	if (!res) {</div><div class='del'>-	    n = gz-&gt;z.buf_filled + 1;</div><div class='del'>-	} else {</div><div class='del'>-	    n += (long)(res - p);</div><div class='del'>-	    p = res;</div><div class='del'>-	    if (rslen == 1 || memcmp(p, rsptr, rslen) == 0) break;</div><div class='del'>-	    p++, n++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    gz-&gt;lineno++;</div><div class='del'>-    dst = gzfile_read(gz, n);</div><div class='del'>-    if (rspara) {</div><div class='del'>-	gzreader_skip_linebreaks(gz);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_gets(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 dst;</div><div class='del'>-    dst = gzreader_gets(argc, argv, obj);</div><div class='del'>-    if (!NIL_P(dst)) {</div><div class='del'>-	rb_lastline_set(dst);</div><div class='del'>-    }</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_readline(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 dst;</div><div class='del'>-    dst = rb_gzreader_gets(argc, argv, obj);</div><div class='del'>-    if (NIL_P(dst)) {</div><div class='del'>-	rb_raise(rb_eEOFError, "end of file reached");</div><div class='del'>-    }</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_each(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 str;</div><div class='del'>-    while (!NIL_P(str = gzreader_gets(argc, argv, obj))) {</div><div class='del'>-	rb_yield(str);</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'>- * See Zlib::GzipReader documentation for a description.</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_gzreader_readlines(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 str, dst;</div><div class='del'>-    dst = rb_ary_new();</div><div class='del'>-    while (!NIL_P(str = gzreader_gets(argc, argv, obj))) {</div><div class='del'>-	rb_ary_push(dst, str);</div><div class='del'>-    }</div><div class='del'>-    return dst;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif /* GZIP_SUPPORT */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * The Zlib module contains several classes for compressing and decompressing</div><div class='del'>- * streams, and for working with "gzip" files.</div><div class='del'>- *</div><div class='del'>- * == Classes</div><div class='del'>- *</div><div class='del'>- * Following are the classes that are most likely to be of interest to the</div><div class='del'>- * user:</div><div class='del'>- * Zlib::Inflate</div><div class='del'>- * Zlib::Deflate</div><div class='del'>- * Zlib::GzipReader</div><div class='del'>- * Zlib::GzipWriter</div><div class='del'>- *</div><div class='del'>- * There are two important base classes for the classes above: Zlib::ZStream</div><div class='del'>- * and Zlib::GzipFile.  Everything else is an error class.</div><div class='del'>- *</div><div class='del'>- * == Constants</div><div class='del'>- *</div><div class='del'>- * Here's a list.</div><div class='del'>- *</div><div class='del'>- *   Zlib::VERSION</div><div class='del'>- *       The Ruby/zlib version string.</div><div class='del'>- *</div><div class='del'>- *   Zlib::ZLIB_VERSION</div><div class='del'>- *       The string which represents the version of zlib.h.</div><div class='del'>- *</div><div class='del'>- *   Zlib::BINARY</div><div class='del'>- *   Zlib::ASCII</div><div class='del'>- *   Zlib::UNKNOWN</div><div class='del'>- *       The integers representing data types which Zlib::ZStream#data_type</div><div class='del'>- *       method returns.</div><div class='del'>- *</div><div class='del'>- *   Zlib::NO_COMPRESSION</div><div class='del'>- *   Zlib::BEST_SPEED</div><div class='del'>- *   Zlib::BEST_COMPRESSION</div><div class='del'>- *   Zlib::DEFAULT_COMPRESSION</div><div class='del'>- *       The integers representing compression levels which are an argument</div><div class='del'>- *       for Zlib::Deflate.new, Zlib::Deflate#deflate, and so on.</div><div class='del'>- *</div><div class='del'>- *   Zlib::FILTERED</div><div class='del'>- *   Zlib::HUFFMAN_ONLY</div><div class='del'>- *   Zlib::DEFAULT_STRATEGY</div><div class='del'>- *       The integers representing compression methods which are an argument</div><div class='del'>- *       for Zlib::Deflate.new and Zlib::Deflate#params.</div><div class='del'>- *</div><div class='del'>- *   Zlib::DEF_MEM_LEVEL</div><div class='del'>- *   Zlib::MAX_MEM_LEVEL</div><div class='del'>- *       The integers representing memory levels which are an argument for</div><div class='del'>- *       Zlib::Deflate.new, Zlib::Deflate#params, and so on.</div><div class='del'>- *</div><div class='del'>- *   Zlib::MAX_WBITS</div><div class='del'>- *       The default value of windowBits which is an argument for</div><div class='del'>- *       Zlib::Deflate.new and Zlib::Inflate.new.</div><div class='del'>- *</div><div class='del'>- *   Zlib::NO_FLUSH</div><div class='del'>- *   Zlib::SYNC_FLUSH</div><div class='del'>- *   Zlib::FULL_FLUSH</div><div class='del'>- *   Zlib::FINISH</div><div class='del'>- *       The integers to control the output of the deflate stream, which are</div><div class='del'>- *       an argument for Zlib::Deflate#deflate and so on.</div><div class='del'>- *</div><div class='del'>- *   Zlib::OS_CODE</div><div class='del'>- *   Zlib::OS_MSDOS</div><div class='del'>- *   Zlib::OS_AMIGA</div><div class='del'>- *   Zlib::OS_VMS</div><div class='del'>- *   Zlib::OS_UNIX</div><div class='del'>- *   Zlib::OS_VMCMS</div><div class='del'>- *   Zlib::OS_ATARI</div><div class='del'>- *   Zlib::OS_OS2</div><div class='del'>- *   Zlib::OS_MACOS</div><div class='del'>- *   Zlib::OS_ZSYSTEM</div><div class='del'>- *   Zlib::OS_CPM</div><div class='del'>- *   Zlib::OS_TOPS20</div><div class='del'>- *   Zlib::OS_WIN32</div><div class='del'>- *   Zlib::OS_QDOS</div><div class='del'>- *   Zlib::OS_RISCOS</div><div class='del'>- *   Zlib::OS_UNKNOWN</div><div class='del'>- *       The return values of Zlib::GzipFile#os_code method.</div><div class='del'>- */</div><div class='del'>-void Init_zlib()</div><div class='del'>-{</div><div class='del'>-    VALUE mZlib, cZStream, cDeflate, cInflate;</div><div class='del'>-#if GZIP_SUPPORT</div><div class='del'>-    VALUE cGzipFile, cGzipWriter, cGzipReader;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    mZlib = rb_define_module("Zlib");</div><div class='del'>-</div><div class='del'>-    cZError = rb_define_class_under(mZlib, "Error", rb_eStandardError);</div><div class='del'>-    cStreamEnd    = rb_define_class_under(mZlib, "StreamEnd", cZError);</div><div class='del'>-    cNeedDict     = rb_define_class_under(mZlib, "NeedDict", cZError);</div><div class='del'>-    cDataError    = rb_define_class_under(mZlib, "DataError", cZError);</div><div class='del'>-    cStreamError  = rb_define_class_under(mZlib, "StreamError", cZError);</div><div class='del'>-    cMemError     = rb_define_class_under(mZlib, "MemError", cZError);</div><div class='del'>-    cBufError     = rb_define_class_under(mZlib, "BufError", cZError);</div><div class='del'>-    cVersionError = rb_define_class_under(mZlib, "VersionError", cZError);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(mZlib, "zlib_version", rb_zlib_version, 0);</div><div class='del'>-    rb_define_module_function(mZlib, "adler32", rb_zlib_adler32, -1);</div><div class='del'>-    rb_define_module_function(mZlib, "crc32", rb_zlib_crc32, -1);</div><div class='del'>-    rb_define_module_function(mZlib, "crc_table", rb_zlib_crc_table, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_const(mZlib, "VERSION", rb_str_new2(RUBY_ZLIB_VERSION));</div><div class='del'>-    rb_define_const(mZlib, "ZLIB_VERSION", rb_str_new2(ZLIB_VERSION));</div><div class='del'>-</div><div class='del'>-    cZStream = rb_define_class_under(mZlib, "ZStream", rb_cObject);</div><div class='del'>-    rb_undef_alloc_func(cZStream);</div><div class='del'>-    rb_define_method(cZStream, "avail_out", rb_zstream_avail_out, 0);</div><div class='del'>-    rb_define_method(cZStream, "avail_out=", rb_zstream_set_avail_out, 1);</div><div class='del'>-    rb_define_method(cZStream, "avail_in", rb_zstream_avail_in, 0);</div><div class='del'>-    rb_define_method(cZStream, "total_in", rb_zstream_total_in, 0);</div><div class='del'>-    rb_define_method(cZStream, "total_out", rb_zstream_total_out, 0);</div><div class='del'>-    rb_define_method(cZStream, "data_type", rb_zstream_data_type, 0);</div><div class='del'>-    rb_define_method(cZStream, "adler", rb_zstream_adler, 0);</div><div class='del'>-    rb_define_method(cZStream, "finished?", rb_zstream_finished_p, 0);</div><div class='del'>-    rb_define_method(cZStream, "stream_end?", rb_zstream_finished_p, 0);</div><div class='del'>-    rb_define_method(cZStream, "closed?", rb_zstream_closed_p, 0);</div><div class='del'>-    rb_define_method(cZStream, "ended?", rb_zstream_closed_p, 0);</div><div class='del'>-    rb_define_method(cZStream, "close", rb_zstream_end, 0);</div><div class='del'>-    rb_define_method(cZStream, "end", rb_zstream_end, 0);</div><div class='del'>-    rb_define_method(cZStream, "reset", rb_zstream_reset, 0);</div><div class='del'>-    rb_define_method(cZStream, "finish", rb_zstream_finish, 0);</div><div class='del'>-    rb_define_method(cZStream, "flush_next_in", rb_zstream_flush_next_in, 0);</div><div class='del'>-    rb_define_method(cZStream, "flush_next_out", rb_zstream_flush_next_out, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_const(mZlib, "BINARY", INT2FIX(Z_BINARY));</div><div class='del'>-    rb_define_const(mZlib, "ASCII", INT2FIX(Z_ASCII));</div><div class='del'>-    rb_define_const(mZlib, "UNKNOWN", INT2FIX(Z_UNKNOWN));</div><div class='del'>-</div><div class='del'>-    cDeflate = rb_define_class_under(mZlib, "Deflate", cZStream);</div><div class='del'>-    rb_define_singleton_method(cDeflate, "deflate", rb_deflate_s_deflate, -1);</div><div class='del'>-    rb_define_alloc_func(cDeflate, rb_deflate_s_allocate);</div><div class='del'>-    rb_define_method(cDeflate, "initialize", rb_deflate_initialize, -1);</div><div class='del'>-    rb_define_method(cDeflate, "initialize_copy", rb_deflate_init_copy, 1);</div><div class='del'>-    rb_define_method(cDeflate, "deflate", rb_deflate_deflate, -1);</div><div class='del'>-    rb_define_method(cDeflate, "&lt;&lt;", rb_deflate_addstr, 1);</div><div class='del'>-    rb_define_method(cDeflate, "flush", rb_deflate_flush, -1);</div><div class='del'>-    rb_define_method(cDeflate, "params", rb_deflate_params, 2);</div><div class='del'>-    rb_define_method(cDeflate, "set_dictionary", rb_deflate_set_dictionary, 1);</div><div class='del'>-</div><div class='del'>-    cInflate = rb_define_class_under(mZlib, "Inflate", cZStream);</div><div class='del'>-    rb_define_singleton_method(cInflate, "inflate", rb_inflate_s_inflate, 1);</div><div class='del'>-    rb_define_alloc_func(cInflate, rb_inflate_s_allocate);</div><div class='del'>-    rb_define_method(cInflate, "initialize", rb_inflate_initialize, -1);</div><div class='del'>-    rb_define_method(cInflate, "inflate", rb_inflate_inflate, 1);</div><div class='del'>-    rb_define_method(cInflate, "&lt;&lt;", rb_inflate_addstr, 1);</div><div class='del'>-    rb_define_method(cInflate, "sync", rb_inflate_sync, 1);</div><div class='del'>-    rb_define_method(cInflate, "sync_point?", rb_inflate_sync_point_p, 0);</div><div class='del'>-    rb_define_method(cInflate, "set_dictionary", rb_inflate_set_dictionary, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_const(mZlib, "NO_COMPRESSION", INT2FIX(Z_NO_COMPRESSION));</div><div class='del'>-    rb_define_const(mZlib, "BEST_SPEED", INT2FIX(Z_BEST_SPEED));</div><div class='del'>-    rb_define_const(mZlib, "BEST_COMPRESSION", INT2FIX(Z_BEST_COMPRESSION));</div><div class='del'>-    rb_define_const(mZlib, "DEFAULT_COMPRESSION",</div><div class='del'>-		    INT2FIX(Z_DEFAULT_COMPRESSION));</div><div class='del'>-</div><div class='del'>-    rb_define_const(mZlib, "FILTERED", INT2FIX(Z_FILTERED));</div><div class='del'>-    rb_define_const(mZlib, "HUFFMAN_ONLY", INT2FIX(Z_HUFFMAN_ONLY));</div><div class='del'>-    rb_define_const(mZlib, "DEFAULT_STRATEGY", INT2FIX(Z_DEFAULT_STRATEGY));</div><div class='del'>-</div><div class='del'>-    rb_define_const(mZlib, "MAX_WBITS", INT2FIX(MAX_WBITS));</div><div class='del'>-    rb_define_const(mZlib, "DEF_MEM_LEVEL", INT2FIX(DEF_MEM_LEVEL));</div><div class='del'>-    rb_define_const(mZlib, "MAX_MEM_LEVEL", INT2FIX(MAX_MEM_LEVEL));</div><div class='del'>-</div><div class='del'>-    rb_define_const(mZlib, "NO_FLUSH", INT2FIX(Z_NO_FLUSH));</div><div class='del'>-    rb_define_const(mZlib, "SYNC_FLUSH", INT2FIX(Z_SYNC_FLUSH));</div><div class='del'>-    rb_define_const(mZlib, "FULL_FLUSH", INT2FIX(Z_FULL_FLUSH));</div><div class='del'>-    rb_define_const(mZlib, "FINISH", INT2FIX(Z_FINISH));</div><div class='del'>-</div><div class='del'>-#if GZIP_SUPPORT</div><div class='del'>-    id_write = rb_intern("write");</div><div class='del'>-    id_read = rb_intern("read");</div><div class='del'>-    id_flush = rb_intern("flush");</div><div class='del'>-    id_seek = rb_intern("seek");</div><div class='del'>-    id_close = rb_intern("close");</div><div class='del'>-</div><div class='del'>-    cGzipFile = rb_define_class_under(mZlib, "GzipFile", rb_cObject);</div><div class='del'>-    cGzError = rb_define_class_under(cGzipFile, "Error", cZError);</div><div class='del'>-</div><div class='del'>-    cNoFooter = rb_define_class_under(cGzipFile, "NoFooter", cGzError);</div><div class='del'>-    cCRCError = rb_define_class_under(cGzipFile, "CRCError", cGzError);</div><div class='del'>-    cLengthError = rb_define_class_under(cGzipFile,"LengthError",cGzError);</div><div class='del'>-</div><div class='del'>-    cGzipWriter = rb_define_class_under(mZlib, "GzipWriter", cGzipFile);</div><div class='del'>-    cGzipReader = rb_define_class_under(mZlib, "GzipReader", cGzipFile);</div><div class='del'>-    rb_include_module(cGzipReader, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cGzipFile, "wrap", rb_gzfile_s_wrap, -1);</div><div class='del'>-    rb_undef_alloc_func(cGzipFile);</div><div class='del'>-    rb_define_method(cGzipFile, "to_io", rb_gzfile_to_io, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "crc", rb_gzfile_crc, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "mtime", rb_gzfile_mtime, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "level", rb_gzfile_level, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "os_code", rb_gzfile_os_code, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "orig_name", rb_gzfile_orig_name, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "comment", rb_gzfile_comment, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "lineno", rb_gzfile_lineno, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "lineno=", rb_gzfile_set_lineno, 1);</div><div class='del'>-    rb_define_method(cGzipWriter, "mtime=", rb_gzfile_set_mtime, 1);</div><div class='del'>-    rb_define_method(cGzipWriter, "orig_name=", rb_gzfile_set_orig_name,1);</div><div class='del'>-    rb_define_method(cGzipWriter, "comment=", rb_gzfile_set_comment, 1);</div><div class='del'>-    rb_define_method(cGzipFile, "close", rb_gzfile_close, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "finish", rb_gzfile_finish, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "closed?", rb_gzfile_closed_p, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "eof", rb_gzfile_eof_p, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "eof?", rb_gzfile_eof_p, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "sync", rb_gzfile_sync, 0);</div><div class='del'>-    rb_define_method(cGzipFile, "sync=", rb_gzfile_set_sync, 1);</div><div class='del'>-    rb_define_method(cGzipReader, "pos", rb_gzfile_total_out, 0);</div><div class='del'>-    rb_define_method(cGzipWriter, "pos", rb_gzfile_total_in, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "tell", rb_gzfile_total_out, 0);</div><div class='del'>-    rb_define_method(cGzipWriter, "tell", rb_gzfile_total_in, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cGzipWriter, "open", rb_gzwriter_s_open,-1);</div><div class='del'>-    rb_define_alloc_func(cGzipWriter, rb_gzwriter_s_allocate);</div><div class='del'>-    rb_define_method(cGzipWriter, "initialize", rb_gzwriter_initialize,-1);</div><div class='del'>-    rb_define_method(cGzipWriter, "flush", rb_gzwriter_flush, -1);</div><div class='del'>-    rb_define_method(cGzipWriter, "write", rb_gzwriter_write, 1);</div><div class='del'>-    rb_define_method(cGzipWriter, "putc", rb_gzwriter_putc, 1);</div><div class='del'>-    rb_define_method(cGzipWriter, "&lt;&lt;", rb_gzwriter_addstr, 1);</div><div class='del'>-    rb_define_method(cGzipWriter, "printf", rb_gzwriter_printf, -1);</div><div class='del'>-    rb_define_method(cGzipWriter, "print", rb_gzwriter_print, -1);</div><div class='del'>-    rb_define_method(cGzipWriter, "puts", rb_gzwriter_puts, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(cGzipReader, "open", rb_gzreader_s_open,-1);</div><div class='del'>-    rb_define_alloc_func(cGzipReader, rb_gzreader_s_allocate);</div><div class='del'>-    rb_define_method(cGzipReader, "initialize", rb_gzreader_initialize, 1);</div><div class='del'>-    rb_define_method(cGzipReader, "rewind", rb_gzreader_rewind, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "unused", rb_gzreader_unused, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "read", rb_gzreader_read, -1);</div><div class='del'>-    rb_define_method(cGzipReader, "getc", rb_gzreader_getc, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "readchar", rb_gzreader_readchar, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "each_byte", rb_gzreader_each_byte, 0);</div><div class='del'>-    rb_define_method(cGzipReader, "ungetc", rb_gzreader_ungetc, 1);</div><div class='del'>-    rb_define_method(cGzipReader, "gets", rb_gzreader_gets, -1);</div><div class='del'>-    rb_define_method(cGzipReader, "readline", rb_gzreader_readline, -1);</div><div class='del'>-    rb_define_method(cGzipReader, "each", rb_gzreader_each, -1);</div><div class='del'>-    rb_define_method(cGzipReader, "each_line", rb_gzreader_each, -1);</div><div class='del'>-    rb_define_method(cGzipReader, "readlines", rb_gzreader_readlines, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_const(mZlib, "OS_CODE", INT2FIX(OS_CODE));</div><div class='del'>-    rb_define_const(mZlib, "OS_MSDOS", INT2FIX(OS_MSDOS));</div><div class='del'>-    rb_define_const(mZlib, "OS_AMIGA", INT2FIX(OS_AMIGA));</div><div class='del'>-    rb_define_const(mZlib, "OS_VMS", INT2FIX(OS_VMS));</div><div class='del'>-    rb_define_const(mZlib, "OS_UNIX", INT2FIX(OS_UNIX));</div><div class='del'>-    rb_define_const(mZlib, "OS_ATARI", INT2FIX(OS_ATARI));</div><div class='del'>-    rb_define_const(mZlib, "OS_OS2", INT2FIX(OS_OS2));</div><div class='del'>-    rb_define_const(mZlib, "OS_MACOS", INT2FIX(OS_MACOS));</div><div class='del'>-    rb_define_const(mZlib, "OS_TOPS20", INT2FIX(OS_TOPS20));</div><div class='del'>-    rb_define_const(mZlib, "OS_WIN32", INT2FIX(OS_WIN32));</div><div class='del'>-</div><div class='del'>-    rb_define_const(mZlib, "OS_VMCMS", INT2FIX(OS_VMCMS));</div><div class='del'>-    rb_define_const(mZlib, "OS_ZSYSTEM", INT2FIX(OS_ZSYSTEM));</div><div class='del'>-    rb_define_const(mZlib, "OS_CPM", INT2FIX(OS_CPM));</div><div class='del'>-    rb_define_const(mZlib, "OS_QDOS", INT2FIX(OS_QDOS));</div><div class='del'>-    rb_define_const(mZlib, "OS_RISCOS", INT2FIX(OS_RISCOS));</div><div class='del'>-    rb_define_const(mZlib, "OS_UNKNOWN", INT2FIX(OS_UNKNOWN));</div><div class='del'>-</div><div class='del'>-#endif /* GZIP_SUPPORT */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* Document error classes. */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Zlib::Error</div><div class='del'>- *</div><div class='del'>- * The superclass for all exceptions raised by Ruby/zlib.</div><div class='del'>- *</div><div class='del'>- * The following exceptions are defined as subclasses of Zlib::Error. These</div><div class='del'>- * exceptions are raised when zlib library functions return with an error</div><div class='del'>- * status.</div><div class='del'>- *</div><div class='del'>- * - Zlib::StreamEnd</div><div class='del'>- * - Zlib::NeedDict</div><div class='del'>- * - Zlib::DataError</div><div class='del'>- * - Zlib::StreamError</div><div class='del'>- * - Zlib::MemError</div><div class='del'>- * - Zlib::BufError</div><div class='del'>- * - Zlib::VersionError</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Zlib::GzipFile::Error</div><div class='del'>- *</div><div class='del'>- * Base class of errors that occur when processing GZIP files.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Zlib::GzipFile::NoFooter</div><div class='del'>- *</div><div class='del'>- * Raised when gzip file footer is not found. </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Zlib::GzipFile::CRCError</div><div class='del'>- *</div><div class='del'>- * Raised when the CRC checksum recorded in gzip file footer is not equivalent</div><div class='del'>- * to the CRC checksum of the actual uncompressed data. </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: Zlib::GzipFile::LengthError</div><div class='del'>- *</div><div class='del'>- * Raised when the data length recorded in the gzip file footer is not equivalent</div><div class='del'>- * to the length of the actual uncompressed data. </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/file.c b/file.c<br/>index ba490c0894..8ff7c758e6 100644<br/>--- a/<a href='/ruby.git/tree/file.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>file.c</a><br/>+++ b/<a href='/ruby.git/tree/file.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>file.c</a></div><div class='hunk'>@@ -1,749 +1,209 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   file.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/27 15:48:26 $</div><div class='ctx'>   created at: Mon Nov 15 12:24:34 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-  Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='del'>-</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-#include "missing/file.h"</div><div class='del'>-#endif</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-#include &lt;windows.h&gt;</div><div class='del'>-#include &lt;sys/cygwin.h&gt;</div><div class='del'>-#endif</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "rubyio.h"</div><div class='del'>-#include "rubysig.h"</div><div class='del'>-#include "util.h"</div><div class='del'>-#include "dln.h"</div><div class='del'>-</div><div class='add'>+#include "io.h"</div><div class='add'>+#include &lt;sys/time.h&gt;</div><div class='add'>+#include &lt;sys/param.h&gt;</div><div class='ctx'> #ifdef HAVE_UNISTD_H</div><div class='ctx'> #include &lt;unistd.h&gt;</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_SYS_FILE_H</div><div class='del'>-# include &lt;sys/file.h&gt;</div><div class='del'>-#else</div><div class='del'>-int flock _((int, int));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_SYS_PARAM_H</div><div class='del'>-# include &lt;sys/param.h&gt;</div><div class='del'>-#endif</div><div class='del'>-#ifndef MAXPATHLEN</div><div class='del'>-# define MAXPATHLEN 1024</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;time.h&gt;</div><div class='add'>+char *strdup();</div><div class='ctx'> </div><div class='del'>-VALUE rb_time_new _((time_t, time_t));</div><div class='add'>+extern VALUE C_IO;</div><div class='add'>+VALUE C_File;</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_UTIME_H</div><div class='del'>-#include &lt;utime.h&gt;</div><div class='del'>-#elif defined HAVE_SYS_UTIME_H</div><div class='del'>-#include &lt;sys/utime.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_PWD_H</div><div class='del'>-#include &lt;pwd.h&gt;</div><div class='del'>-#endif</div><div class='add'>+VALUE time_new();</div><div class='ctx'> </div><div class='del'>-#ifndef HAVE_STRING_H</div><div class='del'>-char *strrchr _((const char*,const char));</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-#include &lt;sys/stat.h&gt;</div><div class='add'>+VALUE</div><div class='add'>+file_open(fname, mode)</div><div class='add'>+    char *fname, *mode;</div><div class='add'>+{</div><div class='add'>+    VALUE port;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_SYS_MKDEV_H</div><div class='del'>-#include &lt;sys/mkdev.h&gt;</div><div class='del'>-#endif</div><div class='add'>+    port = obj_alloc(C_File);</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'>-#if !HAVE_FSEEKO &amp;&amp; !defined(fseeko)</div><div class='del'>-# define fseeko  fseek</div><div class='del'>-#endif</div><div class='add'>+    MakeOpenFile(port, fptr);</div><div class='add'>+    fptr-&gt;mode = io_mode_flags(mode);</div><div class='ctx'> </div><div class='del'>-#ifdef __BEOS__ /* should not change ID if -1 */</div><div class='del'>-static int</div><div class='del'>-be_chown(const char *path, uid_t owner, gid_t group)</div><div class='del'>-{</div><div class='del'>-    if (owner == -1 || group == -1) {</div><div class='del'>-	struct stat st;</div><div class='del'>-	if (stat(path, &amp;st) &lt; 0) return -1;</div><div class='del'>-	if (owner == -1) owner = st.st_uid;</div><div class='del'>-	if (group == -1) group = st.st_gid;</div><div class='del'>-    }</div><div class='del'>-    return chown(path, owner, group);</div><div class='del'>-}</div><div class='del'>-#define chown be_chown</div><div class='del'>-static int</div><div class='del'>-be_fchown(int fd, uid_t owner, gid_t group)</div><div class='del'>-{</div><div class='del'>-    if (owner == -1 || group == -1) {</div><div class='del'>-	struct stat st;</div><div class='del'>-	if (fstat(fd, &amp;st) &lt; 0) return -1;</div><div class='del'>-	if (owner == -1) owner = st.st_uid;</div><div class='del'>-	if (group == -1) group = st.st_gid;</div><div class='add'>+    fptr-&gt;f = fopen(fname, mode);</div><div class='add'>+    if (fptr-&gt;f == NULL) {</div><div class='add'>+	if (errno == EMFILE) {</div><div class='add'>+	    gc();</div><div class='add'>+	    fptr-&gt;f = fopen(fname, mode);</div><div class='add'>+	}</div><div class='add'>+	if (fptr-&gt;f == NULL) {</div><div class='add'>+	    rb_sys_fail(fname);</div><div class='add'>+	}</div><div class='ctx'>     }</div><div class='del'>-    return fchown(fd, owner, group);</div><div class='del'>-}</div><div class='del'>-#define fchown be_fchown</div><div class='del'>-#endif /* __BEOS__ */</div><div class='del'>-</div><div class='del'>-VALUE rb_cFile;</div><div class='del'>-VALUE rb_mFileTest;</div><div class='del'>-VALUE rb_cStat;</div><div class='del'>-</div><div class='del'>-static long apply2files _((void (*)(const char *, void *), VALUE, void *));</div><div class='del'>-static long</div><div class='del'>-apply2files(func, vargs, arg)</div><div class='del'>-    void (*func)_((const char *, void *));</div><div class='del'>-    VALUE vargs;</div><div class='del'>-    void *arg;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    VALUE path;</div><div class='del'>-    struct RArray *args = RARRAY(vargs);</div><div class='ctx'> </div><div class='del'>-    for (i=0; i&lt;args-&gt;len; i++) {</div><div class='del'>-	path = args-&gt;ptr[i];</div><div class='del'>-	SafeStringValue(path);</div><div class='del'>-	(*func)(StringValueCStr(path), arg);</div><div class='del'>-    }</div><div class='add'>+    fptr-&gt;path = strdup(fname);</div><div class='ctx'> </div><div class='del'>-    return args-&gt;len;</div><div class='add'>+    return port;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     file.path -&gt; filename</div><div class='del'>- *  </div><div class='del'>- *  Returns the pathname used to create &lt;i&gt;file&lt;/i&gt; as a string. Does</div><div class='del'>- *  not normalize the name.</div><div class='del'>- *     </div><div class='del'>- *     File.new("testfile").path               #=&gt; "testfile"</div><div class='del'>- *     File.new("/tmp/../tmp/xxx", "w").path   #=&gt; "/tmp/../tmp/xxx"</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_path(obj)</div><div class='add'>+Ffile_tell(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    long pos;</div><div class='ctx'> </div><div class='del'>-    fptr = RFILE(rb_io_taint_check(obj))-&gt;fptr;</div><div class='del'>-    rb_io_check_initialized(fptr);</div><div class='del'>-    if (!fptr-&gt;path) return Qnil;</div><div class='del'>-    return rb_tainted_str_new2(fptr-&gt;path);</div><div class='del'>-}</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-stat_new_0(klass, st)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    struct stat *st;</div><div class='del'>-{</div><div class='del'>-    struct stat *nst = 0;</div><div class='add'>+    pos = ftell(fptr-&gt;f);</div><div class='add'>+    if (ferror(fptr-&gt;f) != 0) rb_sys_fail(Qnil);</div><div class='ctx'> </div><div class='del'>-    if (st) {</div><div class='del'>-	nst = ALLOC(struct stat);</div><div class='del'>-	*nst = *st;</div><div class='del'>-    }</div><div class='del'>-    return Data_Wrap_Struct(klass, NULL, free, nst);</div><div class='add'>+    return int2inum(pos);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-stat_new(st)</div><div class='del'>-    struct stat *st;</div><div class='add'>+Ffile_seek(obj, offset, ptrname)</div><div class='add'>+    VALUE obj, offset, ptrname;</div><div class='ctx'> {</div><div class='del'>-    return stat_new_0(rb_cStat, st);</div><div class='del'>-}</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    long pos;</div><div class='ctx'> </div><div class='del'>-static struct stat*</div><div class='del'>-get_stat(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    struct stat* st;</div><div class='del'>-    Data_Get_Struct(self, struct stat, st);</div><div class='del'>-    if (!st) rb_raise(rb_eTypeError, "uninitialized File::Stat");</div><div class='del'>-    return st;</div><div class='del'>-}</div><div class='add'>+    Check_Type(ptrname, T_FIXNUM);</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat &lt;=&gt; other_stat    =&gt; -1, 0, 1</div><div class='del'>- *  </div><div class='del'>- *  Compares &lt;code&gt;File::Stat&lt;/code&gt; objects by comparing their</div><div class='del'>- *  respective modification times.</div><div class='del'>- *     </div><div class='del'>- *     f1 = File.new("f1", "w")</div><div class='del'>- *     sleep 1</div><div class='del'>- *     f2 = File.new("f2", "w")</div><div class='del'>- *     f1.stat &lt;=&gt; f2.stat   #=&gt; -1</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_cmp(self, other)</div><div class='del'>-    VALUE self, other;</div><div class='del'>-{</div><div class='del'>-    if (rb_obj_is_kind_of(other, rb_obj_class(self))) {</div><div class='del'>-	time_t t1 = get_stat(self)-&gt;st_mtime;</div><div class='del'>-	time_t t2 = get_stat(other)-&gt;st_mtime;</div><div class='del'>-	if (t1 == t2)</div><div class='del'>-	    return INT2FIX(0);</div><div class='del'>-	else if (t1 &lt; t2)</div><div class='del'>-	    return INT2FIX(-1);</div><div class='del'>-	else</div><div class='del'>-	    return INT2FIX(1);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='ctx'> </div><div class='del'>-static VALUE rb_stat_dev _((VALUE));</div><div class='del'>-static VALUE rb_stat_ino _((VALUE));</div><div class='del'>-static VALUE rb_stat_mode _((VALUE));</div><div class='del'>-static VALUE rb_stat_nlink _((VALUE));</div><div class='del'>-static VALUE rb_stat_uid _((VALUE));</div><div class='del'>-static VALUE rb_stat_gid _((VALUE));</div><div class='del'>-static VALUE rb_stat_rdev _((VALUE));</div><div class='del'>-static VALUE rb_stat_size _((VALUE));</div><div class='del'>-static VALUE rb_stat_blksize _((VALUE));</div><div class='del'>-static VALUE rb_stat_blocks _((VALUE));</div><div class='del'>-static VALUE rb_stat_atime _((VALUE));</div><div class='del'>-static VALUE rb_stat_mtime _((VALUE));</div><div class='del'>-static VALUE rb_stat_ctime _((VALUE));</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.dev    =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns an integer representing the device on which &lt;i&gt;stat&lt;/i&gt;</div><div class='del'>- *  resides.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").dev   #=&gt; 774</div><div class='del'>- */</div><div class='add'>+    pos = fseek(fptr-&gt;f, NUM2INT(offset), NUM2INT(ptrname));</div><div class='add'>+    if (pos != 0) rb_sys_fail(Qnil);</div><div class='add'>+    clearerr(fptr-&gt;f);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_dev(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return INT2NUM(get_stat(self)-&gt;st_dev);</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.dev_major   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the major part of &lt;code&gt;File_Stat#dev&lt;/code&gt; or</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/dev/fd1").dev_major   #=&gt; 2</div><div class='del'>- *     File.stat("/dev/tty").dev_major   #=&gt; 5</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_stat_dev_major(self)</div><div class='del'>-    VALUE self;</div><div class='add'>+Ffile_rewind(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-#if defined(major)</div><div class='del'>-    long dev = get_stat(self)-&gt;st_dev;</div><div class='del'>-    return ULONG2NUM(major(dev));</div><div class='del'>-#else</div><div class='del'>-    return Qnil;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.dev_minor   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the minor part of &lt;code&gt;File_Stat#dev&lt;/code&gt; or</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/dev/fd1").dev_minor   #=&gt; 1</div><div class='del'>- *     File.stat("/dev/tty").dev_minor   #=&gt; 0</div><div class='del'>- */</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (fseek(fptr-&gt;f, 0L, 0) != 0) rb_sys_fail(Qnil);</div><div class='add'>+    clearerr(fptr-&gt;f);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_dev_minor(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#if defined(minor)</div><div class='del'>-    long dev = get_stat(self)-&gt;st_dev;</div><div class='del'>-    return ULONG2NUM(minor(dev));</div><div class='del'>-#else</div><div class='del'>-    return Qnil;</div><div class='del'>-#endif</div><div class='add'>+    return obj;</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'>- *     stat.ino   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the inode number for &lt;i&gt;stat&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").ino   #=&gt; 1083669</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_stat_ino(self)</div><div class='del'>-    VALUE self;</div><div class='add'>+Ffile_eof(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-#ifdef HUGE_ST_INO</div><div class='del'>-    return ULL2NUM(get_stat(self)-&gt;st_ino);</div><div class='del'>-#else</div><div class='del'>-    return ULONG2NUM(get_stat(self)-&gt;st_ino);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.mode   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns an integer representing the permission bits of</div><div class='del'>- *  &lt;i&gt;stat&lt;/i&gt;. The meaning of the bits is platform dependent; on</div><div class='del'>- *  Unix systems, see &lt;code&gt;stat(2)&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.chmod(0644, "testfile")   #=&gt; 1</div><div class='del'>- *     s = File.stat("testfile")</div><div class='del'>- *     sprintf("%o", s.mode)          #=&gt; "100644"</div><div class='del'>- */</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_mode(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#ifdef __BORLANDC__</div><div class='del'>-    return UINT2NUM((unsigned short)(get_stat(self)-&gt;st_mode));</div><div class='del'>-#else</div><div class='del'>-    return UINT2NUM(get_stat(self)-&gt;st_mode);</div><div class='del'>-#endif</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (feof(fptr-&gt;f) == 0) return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.nlink   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the number of hard links to &lt;i&gt;stat&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").nlink             #=&gt; 1</div><div class='del'>- *     File.link("testfile", "testfile.bak")   #=&gt; 0</div><div class='del'>- *     File.stat("testfile").nlink             #=&gt; 2</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_stat_nlink(self)</div><div class='del'>-    VALUE self;</div><div class='add'>+Ffile_path(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    return UINT2NUM(get_stat(self)-&gt;st_nlink);</div><div class='del'>-}</div><div class='del'>-</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.uid    =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the numeric user id of the owner of &lt;i&gt;stat&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").uid   #=&gt; 501</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_uid(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return UINT2NUM(get_stat(self)-&gt;st_uid);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    return str_new2(fptr-&gt;path);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.gid   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the numeric group id of the owner of &lt;i&gt;stat&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").gid   #=&gt; 500</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_stat_gid(self)</div><div class='del'>-    VALUE self;</div><div class='add'>+Ffile_isatty(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    return UINT2NUM(get_stat(self)-&gt;st_gid);</div><div class='add'>+    return FALSE;</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'>- *     stat.rdev   =&gt;  fixnum or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns an integer representing the device type on which</div><div class='del'>- *  &lt;i&gt;stat&lt;/i&gt; resides. Returns &lt;code&gt;nil&lt;/code&gt; if the operating</div><div class='del'>- *  system doesn't support this feature.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/dev/fd1").rdev   #=&gt; 513</div><div class='del'>- *     File.stat("/dev/tty").rdev   #=&gt; 1280</div><div class='del'>- */</div><div class='add'>+#include &lt;sys/types.h&gt;</div><div class='add'>+#include &lt;sys/stat.h&gt;</div><div class='add'>+#include &lt;sys/file.h&gt;</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_stat_rdev(self)</div><div class='del'>-    VALUE self;</div><div class='add'>+stat_new(st)</div><div class='add'>+    struct stat *st;</div><div class='ctx'> {</div><div class='add'>+    if (st == Qnil) Bug("stat_new() called with nil");</div><div class='add'>+    return struct_new("stat",</div><div class='add'>+		      "dev", INT2FIX((int)st-&gt;st_dev),</div><div class='add'>+		      "ino", INT2FIX((int)st-&gt;st_ino),</div><div class='add'>+		      "mode", INT2FIX((int)st-&gt;st_mode),</div><div class='add'>+		      "nlink", INT2FIX((int)st-&gt;st_nlink),</div><div class='add'>+		      "uid", INT2FIX((int)st-&gt;st_uid),</div><div class='add'>+		      "gid", INT2FIX((int)st-&gt;st_gid),</div><div class='ctx'> #ifdef HAVE_ST_RDEV</div><div class='del'>-    return ULONG2NUM(get_stat(self)-&gt;st_rdev);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.rdev_major   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the major part of &lt;code&gt;File_Stat#rdev&lt;/code&gt; or</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/dev/fd1").rdev_major   #=&gt; 2</div><div class='del'>- *     File.stat("/dev/tty").rdev_major   #=&gt; 5</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_rdev_major(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_ST_RDEV) &amp;&amp; defined(major)</div><div class='del'>-    long rdev = get_stat(self)-&gt;st_rdev;</div><div class='del'>-    return ULONG2NUM(major(rdev));</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.rdev_minor   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the minor part of &lt;code&gt;File_Stat#rdev&lt;/code&gt; or</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/dev/fd1").rdev_minor   #=&gt; 1</div><div class='del'>- *     File.stat("/dev/tty").rdev_minor   #=&gt; 0</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_rdev_minor(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-#if defined(HAVE_ST_RDEV) &amp;&amp; defined(minor)</div><div class='del'>-    long rdev = get_stat(self)-&gt;st_rdev;</div><div class='del'>-    return ULONG2NUM(minor(rdev));</div><div class='add'>+		      "rdev", INT2FIX((int)st-&gt;st_rdev),</div><div class='ctx'> #else</div><div class='del'>-    return Qnil;</div><div class='add'>+		      "rdev", INT2FIX(0),</div><div class='ctx'> #endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.size    =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the size of &lt;i&gt;stat&lt;/i&gt; in bytes.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").size   #=&gt; 66</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_size(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return OFFT2NUM(get_stat(self)-&gt;st_size);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.blksize   =&gt; integer or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns the native file system's block size. Will return &lt;code&gt;nil&lt;/code&gt;</div><div class='del'>- *  on platforms that don't support this information.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").blksize   #=&gt; 4096</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_blksize(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='add'>+		      "size", INT2FIX((int)st-&gt;st_size),</div><div class='ctx'> #ifdef HAVE_ST_BLKSIZE</div><div class='del'>-    return ULONG2NUM(get_stat(self)-&gt;st_blksize);</div><div class='add'>+		      "blksize", INT2FIX((int)st-&gt;st_blksize),</div><div class='ctx'> #else</div><div class='del'>-    return Qnil;</div><div class='add'>+		      "blksize", INT2FIX(0),</div><div class='ctx'> #endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.blocks    =&gt; integer or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns the number of native file system blocks allocated for this</div><div class='del'>- *  file, or &lt;code&gt;nil&lt;/code&gt; if the operating system doesn't </div><div class='del'>- *  support this feature.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").blocks   #=&gt; 2</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_blocks(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='ctx'> #ifdef HAVE_ST_BLOCKS</div><div class='del'>-    return ULONG2NUM(get_stat(self)-&gt;st_blocks);</div><div class='add'>+		      "blocks", INT2FIX((int)st-&gt;st_blocks), </div><div class='ctx'> #else</div><div class='del'>-    return Qnil;</div><div class='add'>+		      "blocks", INT2FIX(0),</div><div class='ctx'> #endif</div><div class='add'>+		      "atime", time_new(st-&gt;st_atime, 0),</div><div class='add'>+		      "mtime", time_new(st-&gt;st_mtime, 0),</div><div class='add'>+		      "ctime", time_new(st-&gt;st_ctime, 0),</div><div class='add'>+		      Qnil);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='add'>+static char lastpath[MAXPATHLEN];</div><div class='add'>+static struct stat laststat;</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.atime   =&gt; time</div><div class='del'>- *  </div><div class='del'>- *  Returns the last access time for this file as an object of class</div><div class='del'>- *  &lt;code&gt;Time&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").atime   #=&gt; Wed Dec 31 18:00:00 CST 1969</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_atime(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_time_new(get_stat(self)-&gt;st_atime, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.mtime -&gt; aTime</div><div class='del'>- *  </div><div class='del'>- *  Returns the modification time of &lt;i&gt;stat&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").mtime   #=&gt; Wed Apr 09 08:53:14 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_mtime(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_time_new(get_stat(self)-&gt;st_mtime, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.ctime -&gt; aTime</div><div class='del'>- *  </div><div class='del'>- *  Returns the change time for &lt;i&gt;stat&lt;/i&gt; (that is, the time</div><div class='del'>- *  directory information about the file was changed, not the file</div><div class='del'>- *  itself).</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").ctime   #=&gt; Wed Apr 09 08:53:14 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_ctime(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return rb_time_new(get_stat(self)-&gt;st_ctime, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   stat.inspect  =&gt;  string</div><div class='del'>- *</div><div class='del'>- * Produce a nicely formatted description of &lt;i&gt;stat&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *   File.stat("/etc/passwd").inspect</div><div class='del'>- *      #=&gt; "#&lt;File::Stat dev=0xe000005, ino=1078078, mode=0100644, </div><div class='del'>- *           nlink=1, uid=0, gid=0, rdev=0x0, size=1374, blksize=4096, </div><div class='del'>- *           blocks=8, atime=Wed Dec 10 10:16:12 CST 2003, </div><div class='del'>- *           mtime=Fri Sep 12 15:41:41 CDT 2003, </div><div class='del'>- *           ctime=Mon Oct 27 11:20:27 CST 2003&gt;"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_inspect(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-    int i;</div><div class='del'>-    static const struct {</div><div class='del'>-	const char *name;</div><div class='del'>-	VALUE (*func)_((VALUE));</div><div class='del'>-    } member[] = {</div><div class='del'>-	{"dev",	    rb_stat_dev},</div><div class='del'>-	{"ino",	    rb_stat_ino},</div><div class='del'>-	{"mode",    rb_stat_mode},</div><div class='del'>-	{"nlink",   rb_stat_nlink},</div><div class='del'>-	{"uid",	    rb_stat_uid},</div><div class='del'>-	{"gid",	    rb_stat_gid},</div><div class='del'>-	{"rdev",    rb_stat_rdev},</div><div class='del'>-	{"size",    rb_stat_size},</div><div class='del'>-	{"blksize", rb_stat_blksize},</div><div class='del'>-	{"blocks",  rb_stat_blocks},</div><div class='del'>-	{"atime",   rb_stat_atime},</div><div class='del'>-	{"mtime",   rb_stat_mtime},</div><div class='del'>-	{"ctime",   rb_stat_ctime},</div><div class='del'>-    };</div><div class='del'>-</div><div class='del'>-    str = rb_str_buf_new2("#&lt;");</div><div class='del'>-    rb_str_buf_cat2(str, rb_obj_classname(self));</div><div class='del'>-    rb_str_buf_cat2(str, " ");</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; sizeof(member)/sizeof(member[0]); i++) {</div><div class='del'>-	VALUE v;</div><div class='del'>-</div><div class='del'>-	if (i &gt; 0) {</div><div class='del'>-	    rb_str_buf_cat2(str, ", ");</div><div class='del'>-	}</div><div class='del'>-	rb_str_buf_cat2(str, member[i].name);</div><div class='del'>-	rb_str_buf_cat2(str, "=");</div><div class='del'>-	v = (*member[i].func)(self);</div><div class='del'>-	if (i == 2) {		/* mode */</div><div class='del'>-	    char buf[32];</div><div class='del'>-</div><div class='del'>-	    sprintf(buf, "0%lo", NUM2ULONG(v));</div><div class='del'>-	    rb_str_buf_cat2(str, buf);</div><div class='del'>-	}</div><div class='del'>-	else if (i == 0 || i == 6) { /* dev/rdev */</div><div class='del'>-	    char buf[32];</div><div class='del'>-</div><div class='del'>-	    sprintf(buf, "0x%lx", NUM2ULONG(v));</div><div class='del'>-	    rb_str_buf_cat2(str, buf);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_str_append(str, rb_inspect(v));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_str_buf_cat2(str, "&gt;");</div><div class='del'>-    OBJ_INFECT(str, self);</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_stat(file, st)</div><div class='del'>-    VALUE file;</div><div class='add'>+cache_stat(path, st)</div><div class='add'>+    char *path;</div><div class='ctx'>     struct stat *st;</div><div class='ctx'> {</div><div class='del'>-    VALUE tmp;</div><div class='del'>-</div><div class='del'>-    tmp = rb_check_convert_type(file, T_FILE, "IO", "to_io");</div><div class='del'>-    if (!NIL_P(tmp)) {</div><div class='del'>-	rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-	rb_secure(2);</div><div class='del'>-	GetOpenFile(tmp, fptr);</div><div class='del'>-	return fstat(fileno(fptr-&gt;f), st);</div><div class='add'>+    if (strcmp(lastpath, path) == 0) {</div><div class='add'>+	*st = laststat;</div><div class='add'>+	return 0;</div><div class='ctx'>     }</div><div class='del'>-    SafeStringValue(file);</div><div class='del'>-    return stat(StringValueCStr(file), st);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-static HANDLE</div><div class='del'>-w32_io_info(file, st)</div><div class='del'>-    VALUE *file;</div><div class='del'>-    BY_HANDLE_FILE_INFORMATION *st;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp;</div><div class='del'>-    HANDLE f, ret = 0;</div><div class='del'>-</div><div class='del'>-    tmp = rb_check_convert_type(*file, T_FILE, "IO", "to_io");</div><div class='del'>-    if (!NIL_P(tmp)) {</div><div class='del'>-	rb_io_t *fptr;</div><div class='add'>+    if (stat(path, st) == -1)</div><div class='add'>+	return -1;</div><div class='add'>+    strcpy(lastpath, path);</div><div class='add'>+    laststat = *st;</div><div class='ctx'> </div><div class='del'>-	GetOpenFile(tmp, fptr);</div><div class='del'>-	f = (HANDLE)rb_w32_get_osfhandle(fileno(fptr-&gt;f));</div><div class='del'>-	if (f == (HANDLE)-1) return INVALID_HANDLE_VALUE;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	SafeStringValue(*file);</div><div class='del'>-	f = CreateFile(StringValueCStr(*file), 0,</div><div class='del'>-	               FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,</div><div class='del'>-	               rb_w32_iswin95() ? 0 : FILE_FLAG_BACKUP_SEMANTICS, NULL);</div><div class='del'>-	if (f == INVALID_HANDLE_VALUE) return f;</div><div class='del'>-	ret = f;</div><div class='del'>-    }</div><div class='del'>-    if (GetFileType(f) == FILE_TYPE_DISK) {</div><div class='del'>-	ZeroMemory(st, sizeof(*st));</div><div class='del'>-	if (GetFileInformationByHandle(f, st)) return ret;</div><div class='del'>-    }</div><div class='del'>-    if (ret) CloseHandle(ret);</div><div class='del'>-    return INVALID_HANDLE_VALUE;</div><div class='add'>+    return 0;</div><div class='ctx'> }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.stat(file_name)   =&gt;  stat</div><div class='del'>- *  </div><div class='del'>- *  Returns a &lt;code&gt;File::Stat&lt;/code&gt; object for the named file (see</div><div class='del'>- *  &lt;code&gt;File::Stat&lt;/code&gt;).</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").mtime   #=&gt; Tue Apr 08 12:58:04 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_stat(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='add'>+Ffile_stat(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) {</div><div class='del'>-	rb_sys_fail(StringValueCStr(fname));</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) == -1) {</div><div class='add'>+	rb_sys_fail(fname-&gt;ptr);</div><div class='ctx'>     }</div><div class='ctx'>     return stat_new(&amp;st);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.stat    =&gt; stat</div><div class='del'>- *  </div><div class='del'>- *  Returns status information for &lt;em&gt;ios&lt;/em&gt; as an object of type</div><div class='del'>- *  &lt;code&gt;File::Stat&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     s = f.stat</div><div class='del'>- *     "%o" % s.mode   #=&gt; "100644"</div><div class='del'>- *     s.blksize       #=&gt; 4096</div><div class='del'>- *     s.atime         #=&gt; Wed Apr 09 08:53:54 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_stat(obj)</div><div class='add'>+Ffile_stat2(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(obj, fptr);</div><div class='hunk'>@@ -753,89 +213,49 @@ rb_io_stat(obj)</div><div class='ctx'>     return stat_new(&amp;st);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.lstat(file_name)   =&gt; stat</div><div class='del'>- *  </div><div class='del'>- *  Same as &lt;code&gt;File::stat&lt;/code&gt;, but does not follow the last symbolic</div><div class='del'>- *  link. Instead, reports on the link itself.</div><div class='del'>- *     </div><div class='del'>- *     File.symlink("testfile", "link2test")   #=&gt; 0</div><div class='del'>- *     File.stat("testfile").size              #=&gt; 66</div><div class='del'>- *     File.lstat("link2test").size            #=&gt; 8</div><div class='del'>- *     File.stat("link2test").size             #=&gt; 66</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_lstat(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='add'>+Ffile_lstat(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_LSTAT</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (lstat(StringValueCStr(fname), &amp;st) == -1) {</div><div class='del'>-	rb_sys_fail(RSTRING(fname)-&gt;ptr);</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (lstat(fname-&gt;ptr, &amp;st) == -1) {</div><div class='add'>+	rb_sys_fail(fname-&gt;ptr);</div><div class='ctx'>     }</div><div class='ctx'>     return stat_new(&amp;st);</div><div class='del'>-#else</div><div class='del'>-    return rb_file_s_stat(klass, fname);</div><div class='del'>-#endif</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'>- *     file.lstat   =&gt;  stat</div><div class='del'>- *  </div><div class='del'>- *  Same as &lt;code&gt;IO#stat&lt;/code&gt;, but does not follow the last symbolic</div><div class='del'>- *  link. Instead, reports on the link itself.</div><div class='del'>- *     </div><div class='del'>- *     File.symlink("testfile", "link2test")   #=&gt; 0</div><div class='del'>- *     File.stat("testfile").size              #=&gt; 66</div><div class='del'>- *     f = File.new("link2test")</div><div class='del'>- *     f.lstat.size                            #=&gt; 8</div><div class='del'>- *     f.stat.size                             #=&gt; 66</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_lstat(obj)</div><div class='add'>+Ffile_lstat2(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_LSTAT</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    rb_secure(2);</div><div class='ctx'>     GetOpenFile(obj, fptr);</div><div class='del'>-    if (!fptr-&gt;path) return Qnil;</div><div class='ctx'>     if (lstat(fptr-&gt;path, &amp;st) == -1) {</div><div class='ctx'> 	rb_sys_fail(fptr-&gt;path);</div><div class='ctx'>     }</div><div class='ctx'>     return stat_new(&amp;st);</div><div class='del'>-#else</div><div class='del'>-    return rb_io_stat(obj);</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifndef HAVE_GROUP_MEMBER</div><div class='add'>+#define HAS_GETGROUPS</div><div class='add'>+</div><div class='ctx'> static int</div><div class='ctx'> group_member(gid)</div><div class='ctx'>     GETGROUPS_T gid;</div><div class='ctx'> {</div><div class='del'>-#ifndef _WIN32</div><div class='del'>-    if (getgid() == gid || getegid() == gid)</div><div class='del'>-	return Qtrue;</div><div class='del'>-</div><div class='del'>-# ifdef HAVE_GETGROUPS</div><div class='del'>-#  ifndef NGROUPS</div><div class='del'>-#   ifdef NGROUPS_MAX</div><div class='del'>-#    define NGROUPS NGROUPS_MAX</div><div class='del'>-#   else</div><div class='del'>-#    define NGROUPS 32</div><div class='del'>-#   endif</div><div class='del'>-#  endif</div><div class='add'>+    GETGROUPS_T egid;</div><div class='add'>+</div><div class='add'>+    if (getgid() ==  gid || getegid() == gid)</div><div class='add'>+	return TRUE;</div><div class='add'>+</div><div class='add'>+#ifdef HAS_GETGROUPS</div><div class='add'>+#ifndef NGROUPS</div><div class='add'>+#define NGROUPS 32</div><div class='add'>+#endif</div><div class='ctx'>     {</div><div class='ctx'> 	GETGROUPS_T gary[NGROUPS];</div><div class='ctx'> 	int anum;</div><div class='hunk'>@@ -843,91 +263,56 @@ group_member(gid)</div><div class='ctx'> 	anum = getgroups(NGROUPS, gary);</div><div class='ctx'> 	while (--anum &gt;= 0)</div><div class='ctx'> 	    if (gary[anum] == gid)</div><div class='del'>-		return Qtrue;</div><div class='add'>+		return TRUE;</div><div class='ctx'>     }</div><div class='del'>-# endif</div><div class='ctx'> #endif</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='ctx'> #ifndef S_IXUGO</div><div class='ctx'> #  define S_IXUGO		(S_IXUSR | S_IXGRP | S_IXOTH)</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='del'>-#if defined(S_IXGRP) &amp;&amp; !defined(_WIN32) &amp;&amp; !defined(__CYGWIN__)</div><div class='del'>-#define USE_GETEUID 1</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef HAVE_EACCESS</div><div class='ctx'> int</div><div class='ctx'> eaccess(path, mode)</div><div class='del'>-     const char *path;</div><div class='add'>+     char *path;</div><div class='ctx'>      int mode;</div><div class='ctx'> {</div><div class='del'>-#ifdef USE_GETEUID</div><div class='del'>-    struct stat st;</div><div class='del'>-    int euid;</div><div class='del'>-</div><div class='del'>-    if (stat(path, &amp;st) &lt; 0) return -1;</div><div class='add'>+  extern int group_member ();</div><div class='add'>+  struct stat st;</div><div class='add'>+  static int euid = -1;</div><div class='ctx'> </div><div class='del'>-    euid = geteuid();</div><div class='add'>+  if (cache_stat(path, &amp;st) &lt; 0) return (-1);</div><div class='ctx'> </div><div class='del'>-    if (euid == 0) {</div><div class='del'>-	/* Root can read or write any file. */</div><div class='del'>-	if (!(mode &amp; X_OK))</div><div class='del'>-	    return 0;</div><div class='add'>+  if (euid == -1)</div><div class='add'>+    euid = geteuid ();</div><div class='ctx'> </div><div class='del'>-	/* Root can execute any file that has any one of the execute</div><div class='del'>-	   bits set. */</div><div class='del'>-	if (st.st_mode &amp; S_IXUGO)</div><div class='del'>-	    return 0;</div><div class='add'>+  if (euid == 0)</div><div class='add'>+    {</div><div class='add'>+      /* Root can read or write any file. */</div><div class='add'>+      if (mode != X_OK)</div><div class='add'>+	return 0;</div><div class='ctx'> </div><div class='del'>-	return -1;</div><div class='add'>+      /* Root can execute any file that has any one of the execute</div><div class='add'>+	 bits set. */</div><div class='add'>+      if (st.st_mode &amp; S_IXUGO)</div><div class='add'>+	return 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (st.st_uid == euid)        /* owner */</div><div class='del'>-	mode &lt;&lt;= 6;</div><div class='del'>-    else if (group_member(st.st_gid))</div><div class='del'>-	mode &lt;&lt;= 3;</div><div class='add'>+  if (st.st_uid == euid)        /* owner */</div><div class='add'>+    mode &lt;&lt;= 6;</div><div class='add'>+  else if (group_member (st.st_gid))</div><div class='add'>+    mode &lt;&lt;= 3;</div><div class='ctx'> </div><div class='del'>-    if ((st.st_mode &amp; mode) == mode) return 0;</div><div class='add'>+  if (st.st_mode &amp; mode) return 0;</div><div class='ctx'> </div><div class='del'>-    return -1;</div><div class='del'>-#else</div><div class='del'>-# if defined(_MSC_VER) || defined(__MINGW32__)</div><div class='del'>-    mode &amp;= ~1;</div><div class='del'>-# endif</div><div class='del'>-    return access(path, mode);</div><div class='del'>-#endif</div><div class='add'>+  return -1;</div><div class='ctx'> }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * Document-class: FileTest</div><div class='del'>- *</div><div class='del'>- *  &lt;code&gt;FileTest&lt;/code&gt; implements file test operations similar to</div><div class='del'>- *  those used in &lt;code&gt;File::Stat&lt;/code&gt;. It exists as a standalone</div><div class='del'>- *  module, and its methods are also insinuated into the &lt;code&gt;File&lt;/code&gt;</div><div class='del'>- *  class. (Note that this is not done by inclusion: the interpreter cheats).</div><div class='del'>- *     </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'>- *   File.directory?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is a directory,</div><div class='del'>- * &lt;code&gt;false&lt;/code&gt; otherwise.</div><div class='del'>- *</div><div class='del'>- *    File.directory?(".")</div><div class='del'>- */</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-test_d(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_d(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'> #ifndef S_ISDIR</div><div class='ctx'> #   define S_ISDIR(m) ((m &amp; S_IFMT) == S_IFDIR)</div><div class='hunk'>@@ -935,21 +320,16 @@ test_d(obj, fname)</div><div class='ctx'> </div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (S_ISDIR(st.st_mode)) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (S_ISDIR(st.st_mode)) return TRUE;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   File.pipe?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is a pipe.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_p(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_p(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'> #ifdef S_IFIFO</div><div class='ctx'> #  ifndef S_ISFIFO</div><div class='hunk'>@@ -958,35 +338,22 @@ test_p(obj, fname)</div><div class='ctx'> </div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (S_ISFIFO(st.st_mode)) return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (S_ISFIFO(st.st_mode)) return TRUE;</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   File.symlink?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is a symbolic link.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_l(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_l(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'> #ifndef S_ISLNK</div><div class='ctx'> #  ifdef _S_ISLNK</div><div class='ctx'> #    define S_ISLNK(m) _S_ISLNK(m)</div><div class='del'>-#  elif defined __BORLANDC__</div><div class='del'>-#    ifdef _S_IFLNK</div><div class='del'>-#      define S_ISLNK(m) (((unsigned short)(m) &amp; S_IFMT) == _S_IFLNK)</div><div class='del'>-#    else</div><div class='del'>-#      ifdef S_IFLNK</div><div class='del'>-#        define S_ISLNK(m) (((unsigned short)(m) &amp; S_IFMT) == S_IFLNK)</div><div class='del'>-#      endif</div><div class='del'>-#    endif</div><div class='ctx'> #  else</div><div class='ctx'> #    ifdef _S_IFLNK</div><div class='ctx'> #      define S_ISLNK(m) ((m &amp; S_IFMT) == _S_IFLNK)</div><div class='hunk'>@@ -1001,36 +368,21 @@ test_l(obj, fname)</div><div class='ctx'> #ifdef S_ISLNK</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (lstat(StringValueCStr(fname), &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (S_ISLNK(st.st_mode)) return Qtrue;</div><div class='del'>-#endif</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (S_ISLNK(st.st_mode)) return TRUE;</div><div class='ctx'> </div><div class='del'>-    return Qfalse;</div><div class='add'>+#endif</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   File.socket?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is a socket.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-test_S(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_S(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'> #ifndef S_ISSOCK</div><div class='ctx'> #  ifdef _S_ISSOCK</div><div class='ctx'> #    define S_ISSOCK(m) _S_ISSOCK(m)</div><div class='del'>-#  elif defined __BORLANDC__</div><div class='del'>-#    ifdef _S_IFSOCK</div><div class='del'>-#      define S_ISSOCK(m) (((unsigned short)(m) &amp; S_IFMT) == _S_IFSOCK)</div><div class='del'>-#    else</div><div class='del'>-#      ifdef S_IFSOCK</div><div class='del'>-#        define S_ISSOCK(m) (((unsigned short)(m) &amp; S_IFMT) == S_IFSOCK)</div><div class='del'>-#      endif</div><div class='del'>-#    endif</div><div class='ctx'> #  else</div><div class='ctx'> #    ifdef _S_IFSOCK</div><div class='ctx'> #      define S_ISSOCK(m) ((m &amp; S_IFMT) == _S_IFSOCK)</div><div class='hunk'>@@ -1045,51 +397,40 @@ test_S(obj, fname)</div><div class='ctx'> #ifdef S_ISSOCK</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (S_ISSOCK(st.st_mode)) return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (S_ISSOCK(st.st_mode)) return TRUE;</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   File.blockdev?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is a block device.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_b(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_b(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'> #ifndef S_ISBLK</div><div class='ctx'> #   ifdef S_IFBLK</div><div class='ctx'> #	define S_ISBLK(m) ((m &amp; S_IFMT) == S_IFBLK)</div><div class='del'>-#   else</div><div class='del'>-#	define S_ISBLK(m) (0)  /* anytime false */</div><div class='ctx'> #   endif</div><div class='ctx'> #endif</div><div class='ctx'> </div><div class='ctx'> #ifdef S_ISBLK</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (S_ISBLK(st.st_mode)) return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (S_ISBLK(st.st_mode)) return TRUE;</div><div class='ctx'> </div><div class='ctx'> #endif</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   File.chardev?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is a character device.</div><div class='del'>- */</div><div class='ctx'> static VALUE</div><div class='del'>-test_c(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_c(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'> #ifndef S_ISCHR</div><div class='ctx'> #   define S_ISCHR(m) ((m &amp; S_IFMT) == S_IFCHR)</div><div class='hunk'>@@ -1097,3627 +438,610 @@ test_c(obj, fname)</div><div class='ctx'> </div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (S_ISCHR(st.st_mode)) return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (S_ISBLK(st.st_mode)) return TRUE;</div><div class='ctx'> </div><div class='del'>-    return Qfalse;</div><div class='add'>+    return FALSE;</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'>- *    File.exist?(file_name)    =&gt;  true or false</div><div class='del'>- *    File.exists?(file_name)   =&gt;  true or false    (obsolete)</div><div class='del'>- *</div><div class='del'>- * Return &lt;code&gt;true&lt;/code&gt; if the named file exists.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_e(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_e(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.readable?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is readable by the effective</div><div class='del'>- * user id of this process.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_r(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_r(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (eaccess(StringValueCStr(fname), R_OK) &lt; 0) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (eaccess(fname-&gt;ptr, R_OK) &lt; 0) return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.readable_real?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is readable by the real</div><div class='del'>- * user id of this process.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_R(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='del'>-{</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (access(StringValueCStr(fname), R_OK) &lt; 0) return Qfalse;</div><div class='del'>-    return Qtrue;</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'>- *    File.writable?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is writable by the effective</div><div class='del'>- * user id of this process.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-test_w(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_R(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (eaccess(StringValueCStr(fname), W_OK) &lt; 0) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (access(fname-&gt;ptr, R_OK) &lt; 0) return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.writable_real?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is writable by the real</div><div class='del'>- * user id of this process.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_W(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_w(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (access(StringValueCStr(fname), W_OK) &lt; 0) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (eaccess(fname-&gt;ptr, W_OK) &lt; 0) return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.executable?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is executable by the effective</div><div class='del'>- * user id of this process.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_x(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_W(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (eaccess(StringValueCStr(fname), X_OK) &lt; 0) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (access(fname-&gt;ptr, W_OK) &lt; 0) return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.executable_real?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file is executable by the real</div><div class='del'>- * user id of this process.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_X(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_x(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (access(StringValueCStr(fname), X_OK) &lt; 0) return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (eaccess(fname-&gt;ptr, X_OK) &lt; 0) return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifndef S_ISREG</div><div class='del'>-#   define S_ISREG(m) ((m &amp; S_IFMT) == S_IFREG)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.file?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file exists and is a</div><div class='del'>- * regular file.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_f(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_X(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-    struct stat st;</div><div class='del'>-</div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (S_ISREG(st.st_mode)) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (access(fname-&gt;ptr, X_OK) &lt; 0) return FALSE;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.zero?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file exists and has</div><div class='del'>- * a zero size.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_z(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_f(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (st.st_size == 0) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (S_ISREG(st.st_mode)) return TRUE;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.size?(file_name)   =&gt; Integer or nil</div><div class='del'>- *</div><div class='del'>- * Returns +nil+ if +file_name+ doesn't exist or has zero size, the size of the</div><div class='del'>- * file otherwise.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_s(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_z(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qnil;</div><div class='del'>-    if (st.st_size == 0) return Qnil;</div><div class='del'>-    return OFFT2NUM(st.st_size);</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (st.st_size == 0) return TRUE;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.owned?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file exists and the</div><div class='del'>- * effective used id of the calling process is the owner of</div><div class='del'>- * the file.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_owned(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_s(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (st.st_uid == geteuid()) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (st.st_size == 0) return FALSE;</div><div class='add'>+    return int2inum(st.st_size);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-test_rowned(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_owned(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (st.st_uid == getuid()) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (st.st_uid == geteuid()) return TRUE;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    File.grpowned?(file_name)   =&gt; true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file exists and the</div><div class='del'>- * effective group id of the calling process is the owner of</div><div class='del'>- * the file. Returns &lt;code&gt;false&lt;/code&gt; on Windows.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_grpowned(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_grpowned(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='del'>-#ifndef _WIN32</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (group_member(st.st_gid)) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (st.st_gid == getegid()) return TRUE;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> #if defined(S_ISUID) || defined(S_ISGID) || defined(S_ISVTX)</div><div class='ctx'> static VALUE</div><div class='del'>-check3rdbyte(fname, mode)</div><div class='del'>-    VALUE fname;</div><div class='add'>+check3rdbyte(file, mode)</div><div class='add'>+    char *file;</div><div class='ctx'>     int mode;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (stat(StringValueCStr(fname), &amp;st) &lt; 0) return Qfalse;</div><div class='del'>-    if (st.st_mode &amp; mode) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='add'>+    if (cache_stat(file, &amp;st) &lt; 0) return FALSE;</div><div class='add'>+    if (st.st_mode &amp; mode) return TRUE;</div><div class='add'>+    return FALSE;</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'>- *   File.setuid?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file has the setuid bit set.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_suid(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_suid(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='ctx'> #ifdef S_ISUID</div><div class='del'>-    return check3rdbyte(fname, S_ISUID);</div><div class='add'>+    return check3rdbyte(fname-&gt;ptr, S_ISUID);</div><div class='ctx'> #else</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return FALSE;</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'>- *   File.setgid?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file has the setgid bit set.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_sgid(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_sgid(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='ctx'> #ifdef S_ISGID</div><div class='del'>-    return check3rdbyte(fname, S_ISGID);</div><div class='add'>+    return check3rdbyte(fname-&gt;ptr, S_ISGID);</div><div class='ctx'> #else</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return FALSE;</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'>- *   File.sticky?(file_name)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named file has the sticky bit set.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_sticky(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='add'>+Ffile_sticky(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='ctx'> #ifdef S_ISVTX</div><div class='del'>-    return check3rdbyte(fname, S_ISVTX);</div><div class='add'>+    return check3rdbyte(fname-&gt;ptr, S_ISVTX);</div><div class='ctx'> #else</div><div class='del'>-    return Qnil;</div><div class='add'>+    return FALSE;</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'>- *   File.identical?(file_1, file_2)   =&gt;  true or false</div><div class='del'>- *</div><div class='del'>- * Returns &lt;code&gt;true&lt;/code&gt; if the named files are identical.</div><div class='del'>- *</div><div class='del'>- *     open("a", "w") {}</div><div class='del'>- *     p File.identical?("a", "a")      #=&gt; true</div><div class='del'>- *     p File.identical?("a", "./a")    #=&gt; true</div><div class='del'>- *     File.link("a", "b")</div><div class='del'>- *     p File.identical?("a", "b")      #=&gt; true</div><div class='del'>- *     File.symlink("a", "c")</div><div class='del'>- *     p File.identical?("a", "c")      #=&gt; true</div><div class='del'>- *     open("d", "w") {}</div><div class='del'>- *     p File.identical?("a", "d")      #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-test_identical(obj, fname1, fname2)</div><div class='del'>-    VALUE obj, fname1, fname2;</div><div class='del'>-{</div><div class='del'>-#ifndef DOSISH</div><div class='del'>-    struct stat st1, st2;</div><div class='del'>-</div><div class='del'>-    if (rb_stat(fname1, &amp;st1) &lt; 0) return Qfalse;</div><div class='del'>-    if (rb_stat(fname2, &amp;st2) &lt; 0) return Qfalse;</div><div class='del'>-    if (st1.st_dev != st2.st_dev) return Qfalse;</div><div class='del'>-    if (st1.st_ino != st2.st_ino) return Qfalse;</div><div class='del'>-#else</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-    BY_HANDLE_FILE_INFORMATION st1, st2;</div><div class='del'>-    HANDLE f1 = 0, f2 = 0;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-    f1 = w32_io_info(&amp;fname1, &amp;st1);</div><div class='del'>-    if (f1 == INVALID_HANDLE_VALUE) return Qfalse;</div><div class='del'>-    f2 = w32_io_info(&amp;fname2, &amp;st2);</div><div class='del'>-    if (f1) CloseHandle(f1);</div><div class='del'>-    if (f2 == INVALID_HANDLE_VALUE) return Qfalse;</div><div class='del'>-    if (f2) CloseHandle(f2);</div><div class='del'>-</div><div class='del'>-    if (st1.dwVolumeSerialNumber == st2.dwVolumeSerialNumber &amp;&amp;</div><div class='del'>-	st1.nFileIndexHigh == st2.nFileIndexHigh &amp;&amp;</div><div class='del'>-	st1.nFileIndexLow == st2.nFileIndexLow)</div><div class='del'>-	return Qtrue;</div><div class='del'>-    if (!f1 || !f2) return Qfalse;</div><div class='del'>-    if (rb_w32_iswin95()) return Qfalse;</div><div class='del'>-#else</div><div class='del'>-    SafeStringValue(fname1);</div><div class='del'>-    fname1 = rb_str_new4(fname1);</div><div class='del'>-    SafeStringValue(fname2);</div><div class='del'>-    if (access(RSTRING(fname1)-&gt;ptr, 0)) return Qfalse;</div><div class='del'>-    if (access(RSTRING(fname2)-&gt;ptr, 0)) return Qfalse;</div><div class='del'>-#endif</div><div class='del'>-    fname1 = rb_file_expand_path(fname1, Qnil);</div><div class='del'>-    fname2 = rb_file_expand_path(fname2, Qnil);</div><div class='del'>-    if (RSTRING(fname1)-&gt;len != RSTRING(fname2)-&gt;len) return Qfalse;</div><div class='del'>-    if (rb_memcicmp(RSTRING(fname1)-&gt;ptr, RSTRING(fname2)-&gt;ptr, RSTRING(fname1)-&gt;len))</div><div class='del'>-	return Qfalse;</div><div class='del'>-#endif</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'>- *    File.size(file_name)   =&gt; integer</div><div class='del'>- *</div><div class='del'>- * Returns the size of &lt;code&gt;file_name&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_size(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='del'>-{</div><div class='del'>-    struct stat st;</div><div class='del'>-</div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0)</div><div class='del'>-	rb_sys_fail(StringValueCStr(fname));</div><div class='del'>-    return OFFT2NUM(st.st_size);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_ftype(st)</div><div class='del'>-    struct stat *st;</div><div class='del'>-{</div><div class='del'>-    const char *t;</div><div class='del'>-</div><div class='del'>-    if (S_ISREG(st-&gt;st_mode)) {</div><div class='del'>-	t = "file";</div><div class='del'>-    }</div><div class='del'>-    else if (S_ISDIR(st-&gt;st_mode)) {</div><div class='del'>-	t = "directory";</div><div class='del'>-    }</div><div class='del'>-    else if (S_ISCHR(st-&gt;st_mode)) {</div><div class='del'>-	t = "characterSpecial";</div><div class='del'>-    }</div><div class='del'>-#ifdef S_ISBLK</div><div class='del'>-    else if (S_ISBLK(st-&gt;st_mode)) {</div><div class='del'>-	t = "blockSpecial";</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_ISFIFO</div><div class='del'>-    else if (S_ISFIFO(st-&gt;st_mode)) {</div><div class='del'>-	t = "fifo";</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_ISLNK</div><div class='del'>-    else if (S_ISLNK(st-&gt;st_mode)) {</div><div class='del'>-	t = "link";</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_ISSOCK</div><div class='del'>-    else if (S_ISSOCK(st-&gt;st_mode)) {</div><div class='del'>-	t = "socket";</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    else {</div><div class='del'>-	t = "unknown";</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_str_new2(t);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.ftype(file_name)   =&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Identifies the type of the named file; the return string is one of</div><div class='del'>- *  ``&lt;code&gt;file&lt;/code&gt;'', ``&lt;code&gt;directory&lt;/code&gt;'',</div><div class='del'>- *  ``&lt;code&gt;characterSpecial&lt;/code&gt;'', ``&lt;code&gt;blockSpecial&lt;/code&gt;'',</div><div class='del'>- *  ``&lt;code&gt;fifo&lt;/code&gt;'', ``&lt;code&gt;link&lt;/code&gt;'',</div><div class='del'>- *  ``&lt;code&gt;socket&lt;/code&gt;'', or ``&lt;code&gt;unknown&lt;/code&gt;''.</div><div class='del'>- *     </div><div class='del'>- *     File.ftype("testfile")            #=&gt; "file"</div><div class='del'>- *     File.ftype("/dev/tty")            #=&gt; "characterSpecial"</div><div class='del'>- *     File.ftype("/tmp/.X11-unix/X0")   #=&gt; "socket"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_ftype(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='del'>-{</div><div class='del'>-    struct stat st;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    if (lstat(StringValueCStr(fname), &amp;st) == -1) {</div><div class='del'>-	rb_sys_fail(RSTRING(fname)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return rb_file_ftype(&amp;st);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.atime(file_name)  =&gt;  time</div><div class='del'>- *  </div><div class='del'>- *  Returns the last access time for the named file as a Time object).</div><div class='del'>- *     </div><div class='del'>- *     File.atime("testfile")   #=&gt; Wed Apr 09 08:51:48 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_atime(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='add'>+Ffile_atime(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0)</div><div class='del'>-	rb_sys_fail(StringValueCStr(fname));</div><div class='del'>-    return rb_time_new(st.st_atime, 0);</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) rb_sys_fail(fname-&gt;ptr);</div><div class='add'>+    return time_new(st.st_atime, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     file.atime    =&gt; time</div><div class='del'>- *  </div><div class='del'>- *  Returns the last access time (a &lt;code&gt;Time&lt;/code&gt; object)</div><div class='del'>- *   for &lt;i&gt;file&lt;/i&gt;, or epoch if &lt;i&gt;file&lt;/i&gt; has not been accessed.</div><div class='del'>- *     </div><div class='del'>- *     File.new("testfile").atime   #=&gt; Wed Dec 31 18:00:00 CST 1969</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_atime(obj)</div><div class='add'>+Ffile_atime2(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(obj, fptr);</div><div class='ctx'>     if (fstat(fileno(fptr-&gt;f), &amp;st) == -1) {</div><div class='ctx'> 	rb_sys_fail(fptr-&gt;path);</div><div class='ctx'>     }</div><div class='del'>-    return rb_time_new(st.st_atime, 0);</div><div class='add'>+    return time_new(st.st_atime, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.mtime(file_name)  =&gt;  time</div><div class='del'>- *  </div><div class='del'>- *  Returns the modification time for the named file as a Time object.</div><div class='del'>- *     </div><div class='del'>- *     File.mtime("testfile")   #=&gt; Tue Apr 08 12:58:04 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_mtime(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='add'>+Ffile_mtime(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0)</div><div class='del'>-	rb_sys_fail(RSTRING(fname)-&gt;ptr);</div><div class='del'>-    return rb_time_new(st.st_mtime, 0);</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) rb_sys_fail(fname-&gt;ptr);</div><div class='add'>+    return time_new(st.st_mtime, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     file.mtime -&gt; time</div><div class='del'>- *  </div><div class='del'>- *  Returns the modification time for &lt;i&gt;file&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.new("testfile").mtime   #=&gt; Wed Apr 09 08:53:14 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_mtime(obj)</div><div class='add'>+Ffile_mtime2(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(obj, fptr);</div><div class='ctx'>     if (fstat(fileno(fptr-&gt;f), &amp;st) == -1) {</div><div class='ctx'> 	rb_sys_fail(fptr-&gt;path);</div><div class='ctx'>     }</div><div class='del'>-    return rb_time_new(st.st_mtime, 0);</div><div class='add'>+    return time_new(st.st_mtime, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.ctime(file_name)  =&gt; time</div><div class='del'>- *  </div><div class='del'>- *  Returns the change time for the named file (the time at which</div><div class='del'>- *  directory information about the file was changed, not the file</div><div class='del'>- *  itself).</div><div class='del'>- *     </div><div class='del'>- *     File.ctime("testfile")   #=&gt; Wed Apr 09 08:53:13 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_ctime(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='add'>+Ffile_ctime(obj, fname)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *fname;</div><div class='ctx'> {</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='del'>-    if (rb_stat(fname, &amp;st) &lt; 0)</div><div class='del'>-	rb_sys_fail(RSTRING(fname)-&gt;ptr);</div><div class='del'>-    return rb_time_new(st.st_ctime, 0);</div><div class='add'>+    Check_Type(fname, T_STRING);</div><div class='add'>+    if (cache_stat(fname-&gt;ptr, &amp;st) &lt; 0) rb_sys_fail(fname-&gt;ptr);</div><div class='add'>+    return time_new(st.st_ctime, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     file.ctime -&gt; time</div><div class='del'>- *  </div><div class='del'>- *  Returns the change time for &lt;i&gt;file&lt;/i&gt; (that is, the time directory</div><div class='del'>- *  information about the file was changed, not the file itself).</div><div class='del'>- *     </div><div class='del'>- *     File.new("testfile").ctime   #=&gt; Wed Apr 09 08:53:14 CDT 2003</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_ctime(obj)</div><div class='add'>+Ffile_ctime2(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     struct stat st;</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(obj, fptr);</div><div class='ctx'>     if (fstat(fileno(fptr-&gt;f), &amp;st) == -1) {</div><div class='ctx'> 	rb_sys_fail(fptr-&gt;path);</div><div class='ctx'>     }</div><div class='del'>-    return rb_time_new(st.st_ctime, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void chmod_internal _((const char *, void *));</div><div class='del'>-static void</div><div class='del'>-chmod_internal(path, mode)</div><div class='del'>-    const char *path;</div><div class='del'>-    void *mode;</div><div class='del'>-{</div><div class='del'>-    if (chmod(path, *(int *)mode) &lt; 0)</div><div class='del'>-	rb_sys_fail(path);</div><div class='add'>+    return time_new(st.st_ctime, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.chmod(mode_int, file_name, ... ) -&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Changes permission bits on the named file(s) to the bit pattern</div><div class='del'>- *  represented by &lt;i&gt;mode_int&lt;/i&gt;. Actual effects are operating system</div><div class='del'>- *  dependent (see the beginning of this section). On Unix systems, see</div><div class='del'>- *  &lt;code&gt;chmod(2)&lt;/code&gt; for details. Returns the number of files</div><div class='del'>- *  processed.</div><div class='del'>- *     </div><div class='del'>- *     File.chmod(0644, "testfile", "out")   #=&gt; 2</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_chmod(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Ffile_chmod(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='ctx'>     VALUE vmode;</div><div class='ctx'>     VALUE rest;</div><div class='del'>-    int mode;</div><div class='del'>-    long n;</div><div class='add'>+    int mode, i, len;</div><div class='add'>+    VALUE path;</div><div class='ctx'> </div><div class='del'>-    rb_secure(2);</div><div class='del'>-    rb_scan_args(argc, argv, "1*", &amp;vmode, &amp;rest);</div><div class='add'>+    rb_scan_args(args, "1*", &amp;vmode, &amp;rest);</div><div class='ctx'>     mode = NUM2INT(vmode);</div><div class='ctx'> </div><div class='del'>-    n = apply2files(chmod_internal, rest, &amp;mode);</div><div class='del'>-    return LONG2FIX(n);</div><div class='del'>-}</div><div class='add'>+    len = RARRAY(rest)-&gt;len;</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='add'>+	path = RARRAY(rest)-&gt;ptr[i];</div><div class='add'>+	Check_Type(path, T_STRING);</div><div class='add'>+	if (chmod(RSTRING(path)-&gt;ptr, mode) == -1)</div><div class='add'>+	    rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     file.chmod(mode_int)   =&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Changes permission bits on &lt;i&gt;file&lt;/i&gt; to the bit pattern</div><div class='del'>- *  represented by &lt;i&gt;mode_int&lt;/i&gt;. Actual effects are platform</div><div class='del'>- *  dependent; on Unix systems, see &lt;code&gt;chmod(2)&lt;/code&gt; for details.</div><div class='del'>- *  Follows symbolic links. Also see &lt;code&gt;File#lchmod&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("out", "w");</div><div class='del'>- *     f.chmod(0644)   #=&gt; 0</div><div class='del'>- */</div><div class='add'>+    return Qnil;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_chmod(obj, vmode)</div><div class='add'>+Ffile_chmod2(obj, vmode)</div><div class='ctx'>     VALUE obj, vmode;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     int mode;</div><div class='ctx'> </div><div class='del'>-    rb_secure(2);</div><div class='ctx'>     mode = NUM2INT(vmode);</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(obj, fptr);</div><div class='del'>-#ifdef HAVE_FCHMOD</div><div class='ctx'>     if (fchmod(fileno(fptr-&gt;f), mode) == -1)</div><div class='ctx'> 	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-#else</div><div class='del'>-    if (!fptr-&gt;path) return Qnil;</div><div class='del'>-    if (chmod(fptr-&gt;path, mode) == -1)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='del'>-    return INT2FIX(0);</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if defined(HAVE_LCHMOD)</div><div class='del'>-static void lchmod_internal _((const char *, void *));</div><div class='del'>-static void</div><div class='del'>-lchmod_internal(path, mode)</div><div class='del'>-    const char *path;</div><div class='del'>-    void *mode;</div><div class='del'>-{</div><div class='del'>-    if (lchmod(path, (int)(VALUE)mode) &lt; 0)</div><div class='del'>-	rb_sys_fail(path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.lchmod(mode_int, file_name, ...)  =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Equivalent to &lt;code&gt;File::chmod&lt;/code&gt;, but does not follow symbolic</div><div class='del'>- *  links (so it will change the permissions associated with the link,</div><div class='del'>- *  not the file referenced by the link). Often not available.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_lchmod(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE vmode;</div><div class='del'>-    VALUE rest;</div><div class='del'>-    long mode, n;</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    rb_scan_args(argc, argv, "1*", &amp;vmode, &amp;rest);</div><div class='del'>-    mode = NUM2INT(vmode);</div><div class='del'>-</div><div class='del'>-    n = apply2files(lchmod_internal, rest, (void *)(long)mode);</div><div class='del'>-    return LONG2FIX(n);</div><div class='del'>-}</div><div class='del'>-#else</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_lchmod(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    rb_notimplement();</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-struct chown_args {</div><div class='del'>-    int owner, group;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static void chown_internal _((const char *, void *));</div><div class='del'>-static void</div><div class='del'>-chown_internal(path, argp)</div><div class='del'>-    const char *path;</div><div class='del'>-    void *argp;</div><div class='del'>-{</div><div class='del'>-    struct chown_args *args = (struct chown_args *)argp;</div><div class='del'>-    if (chown(path, args-&gt;owner, args-&gt;group) &lt; 0)</div><div class='del'>-	rb_sys_fail(path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.chown(owner_int, group_int, file_name,... ) -&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Changes the owner and group of the named file(s) to the given</div><div class='del'>- *  numeric owner and group id's. Only a process with superuser</div><div class='del'>- *  privileges may change the owner of a file. The current owner of a</div><div class='del'>- *  file may change the file's group to any group to which the owner</div><div class='del'>- *  belongs. A &lt;code&gt;nil&lt;/code&gt; or -1 owner or group id is ignored.</div><div class='del'>- *  Returns the number of files processed.</div><div class='del'>- *     </div><div class='del'>- *     File.chown(nil, 100, "testfile")</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_chown(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Ffile_chown(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='ctx'>     VALUE o, g, rest;</div><div class='del'>-    struct chown_args arg;</div><div class='del'>-    long n;</div><div class='add'>+    int owner, group;</div><div class='add'>+    int i, len;</div><div class='ctx'> </div><div class='del'>-    rb_secure(2);</div><div class='del'>-    rb_scan_args(argc, argv, "2*", &amp;o, &amp;g, &amp;rest);</div><div class='del'>-    if (NIL_P(o)) {</div><div class='del'>-	arg.owner = -1;</div><div class='add'>+    len = rb_scan_args(args, "2*", &amp;o, &amp;g, &amp;rest);</div><div class='add'>+    if (o == Qnil) {</div><div class='add'>+	owner = -1;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	arg.owner = NUM2INT(o);</div><div class='add'>+	owner = NUM2INT(o);</div><div class='ctx'>     }</div><div class='del'>-    if (NIL_P(g)) {</div><div class='del'>-	arg.group = -1;</div><div class='add'>+    if (g == Qnil) {</div><div class='add'>+	group = -1;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	arg.group = NUM2INT(g);</div><div class='add'>+	group = NUM2INT(g);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    n = apply2files(chown_internal, rest, &amp;arg);</div><div class='del'>-    return LONG2FIX(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     file.chown(owner_int, group_int )   =&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Changes the owner and group of &lt;i&gt;file&lt;/i&gt; to the given numeric</div><div class='del'>- *  owner and group id's. Only a process with superuser privileges may</div><div class='del'>- *  change the owner of a file. The current owner of a file may change</div><div class='del'>- *  the file's group to any group to which the owner belongs. A</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; or -1 owner or group id is ignored. Follows</div><div class='del'>- *  symbolic links. See also &lt;code&gt;File#lchown&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.new("testfile").chown(502, 1000)</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_chown(obj, owner, group)</div><div class='del'>-    VALUE obj, owner, group;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int o, g;</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    o = NIL_P(owner) ? -1 : NUM2INT(owner);</div><div class='del'>-    g = NIL_P(group) ? -1 : NUM2INT(group);</div><div class='del'>-    GetOpenFile(obj, fptr);</div><div class='del'>-#if defined(DJGPP) || defined(__CYGWIN32__) || defined(_WIN32) || defined(__EMX__)</div><div class='del'>-    if (!fptr-&gt;path) return Qnil;</div><div class='del'>-    if (chown(fptr-&gt;path, o, g) == -1)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-#else</div><div class='del'>-    if (fchown(fileno(fptr-&gt;f), o, g) == -1)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if defined(HAVE_LCHOWN) &amp;&amp; !defined(__CHECKER__)</div><div class='del'>-static void lchown_internal _((const char *, void *));</div><div class='del'>-static void</div><div class='del'>-lchown_internal(path, argp)</div><div class='del'>-    const char *path;</div><div class='del'>-    void *argp;</div><div class='del'>-{</div><div class='del'>-    struct chown_args *args = (struct chown_args *)argp;</div><div class='del'>-    if (lchown(path, args-&gt;owner, args-&gt;group) &lt; 0)</div><div class='del'>-	rb_sys_fail(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'>- *     file.lchown(owner_int, group_int, file_name,..) =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Equivalent to &lt;code&gt;File::chown&lt;/code&gt;, but does not follow symbolic</div><div class='del'>- *  links (so it will change the owner associated with the link, not the</div><div class='del'>- *  file referenced by the link). Often not available. Returns number</div><div class='del'>- *  of files in the argument list.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_lchown(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE o, g, rest;</div><div class='del'>-    struct chown_args arg;</div><div class='del'>-    long n;</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    rb_scan_args(argc, argv, "2*", &amp;o, &amp;g, &amp;rest);</div><div class='del'>-    if (NIL_P(o)) {</div><div class='del'>-	arg.owner = -1;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	arg.owner = NUM2INT(o);</div><div class='add'>+    len -= 2;</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='add'>+	Check_Type(RARRAY(rest)-&gt;ptr[i], T_STRING);</div><div class='ctx'>     }</div><div class='del'>-    if (NIL_P(g)) {</div><div class='del'>-	arg.group = -1;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	arg.group = NUM2INT(g);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    n = apply2files(lchown_internal, rest, &amp;arg);</div><div class='del'>-    return LONG2FIX(n);</div><div class='del'>-}</div><div class='del'>-#else</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_lchown(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    rb_notimplement();</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-struct timeval rb_time_timeval();</div><div class='del'>-</div><div class='del'>-static void utime_internal _((const char *, void *));</div><div class='ctx'> </div><div class='del'>-#if defined(HAVE_UTIMES) &amp;&amp; !defined(__CHECKER__)</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-utime_internal(path, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    void *arg;</div><div class='del'>-{</div><div class='del'>-    struct timeval *tvp = arg;</div><div class='del'>-    if (utimes(path, tvp) &lt; 0)</div><div class='del'>-	rb_sys_fail(path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *  File.utime(atime, mtime, file_name,...)   =&gt;  integer</div><div class='del'>- *</div><div class='del'>- * Sets the access and modification times of each</div><div class='del'>- * named file to the first two arguments. Returns</div><div class='del'>- * the number of file names in the argument list.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_utime(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE atime, mtime, rest;</div><div class='del'>-    struct timeval tvs[2], *tvp = NULL;</div><div class='del'>-    long n;</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    rb_scan_args(argc, argv, "2*", &amp;atime, &amp;mtime, &amp;rest);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(atime) || !NIL_P(mtime)) {</div><div class='del'>-	tvp = tvs;</div><div class='del'>-	tvp[0] = rb_time_timeval(atime);</div><div class='del'>-	tvp[1] = rb_time_timeval(mtime);</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='add'>+	if (chown(RSTRING(RARRAY(rest)-&gt;ptr[i])-&gt;ptr, owner, group) &lt; 0)</div><div class='add'>+	    rb_sys_fail(RSTRING(RARRAY(rest)-&gt;ptr[i])-&gt;ptr);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    n = apply2files(utime_internal, rest, tvp);</div><div class='del'>-    return LONG2FIX(n);</div><div class='add'>+    return INT2FIX(i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#else</div><div class='del'>-</div><div class='del'>-#if !defined HAVE_UTIME_H &amp;&amp; !defined HAVE_SYS_UTIME_H</div><div class='del'>-struct utimbuf {</div><div class='del'>-    long actime;</div><div class='del'>-    long modtime;</div><div class='del'>-};</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-utime_internal(path, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    void *arg;</div><div class='del'>-{</div><div class='del'>-    struct utimbuf *utp = arg;</div><div class='del'>-    if (utime(path, utp) &lt; 0)</div><div class='del'>-	rb_sys_fail(path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_utime(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Ffile_chown2(obj, owner, group)</div><div class='add'>+    VALUE obj, owner, group;</div><div class='ctx'> {</div><div class='del'>-    VALUE atime, mtime, rest;</div><div class='del'>-    long n;</div><div class='del'>-    struct timeval tv;</div><div class='del'>-    struct utimbuf utbuf, *utp = NULL;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "2*", &amp;atime, &amp;mtime, &amp;rest);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(atime) || !NIL_P(mtime)) {</div><div class='del'>-	utp = &amp;utbuf;</div><div class='del'>-	tv = rb_time_timeval(atime);</div><div class='del'>-	utp-&gt;actime = tv.tv_sec;</div><div class='del'>-	tv = rb_time_timeval(mtime);</div><div class='del'>-	utp-&gt;modtime = tv.tv_sec;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    n = apply2files(utime_internal, rest, utp);</div><div class='del'>-    return LONG2FIX(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#endif</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    int mode;</div><div class='ctx'> </div><div class='del'>-NORETURN(static void sys_fail2 _((VALUE,VALUE)));</div><div class='del'>-static void</div><div class='del'>-sys_fail2(s1, s2)</div><div class='del'>-    VALUE s1, s2;</div><div class='del'>-{</div><div class='del'>-    char *buf;</div><div class='del'>-    int len;</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (fchown(fileno(fptr-&gt;f), NUM2INT(owner), NUM2INT(group)) == -1)</div><div class='add'>+	rb_sys_fail(fptr-&gt;path);</div><div class='ctx'> </div><div class='del'>-    len = RSTRING(s1)-&gt;len + RSTRING(s2)-&gt;len + 5;</div><div class='del'>-    buf = ALLOCA_N(char, len);</div><div class='del'>-    snprintf(buf, len, "%s or %s", RSTRING(s1)-&gt;ptr, RSTRING(s2)-&gt;ptr);</div><div class='del'>-    rb_sys_fail(buf);</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.link(old_name, new_name)    =&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Creates a new name for an existing file using a hard link. Will not</div><div class='del'>- *  overwrite &lt;i&gt;new_name&lt;/i&gt; if it already exists (raising a subclass</div><div class='del'>- *  of &lt;code&gt;SystemCallError&lt;/code&gt;). Not available on all platforms.</div><div class='del'>- *     </div><div class='del'>- *     File.link("testfile", ".testfile")   #=&gt; 0</div><div class='del'>- *     IO.readlines(".testfile")[0]         #=&gt; "This is line one\n"</div><div class='del'>- */</div><div class='add'>+struct timeval *time_timeval();</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_link(klass, from, to)</div><div class='del'>-    VALUE klass, from, to;</div><div class='add'>+Ffile_utime(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_LINK</div><div class='del'>-    SafeStringValue(from);</div><div class='del'>-    SafeStringValue(to);</div><div class='del'>-</div><div class='del'>-    if (link(StringValueCStr(from), StringValueCStr(to)) &lt; 0) {</div><div class='del'>-	sys_fail2(from, to);</div><div class='del'>-    }</div><div class='del'>-    return INT2FIX(0);</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='add'>+    VALUE atime, mtime, rest;</div><div class='add'>+    struct timeval tvp[2];</div><div class='add'>+    int i, len;</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.symlink(old_name, new_name)   =&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Creates a symbolic link called &lt;i&gt;new_name&lt;/i&gt; for the existing file</div><div class='del'>- *  &lt;i&gt;old_name&lt;/i&gt;. Raises a &lt;code&gt;NotImplemented&lt;/code&gt; exception on</div><div class='del'>- *  platforms that do not support symbolic links.</div><div class='del'>- *     </div><div class='del'>- *     File.symlink("testfile", "link2test")   #=&gt; 0</div><div class='del'>- *     </div><div class='del'>- */</div><div class='add'>+    len = rb_scan_args(args, "2*", &amp;atime, &amp;mtime, &amp;rest);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_symlink(klass, from, to)</div><div class='del'>-    VALUE klass, from, to;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_SYMLINK</div><div class='del'>-    SafeStringValue(from);</div><div class='del'>-    SafeStringValue(to);</div><div class='add'>+    tvp[0] = *time_timeval(atime);</div><div class='add'>+    tvp[1] = *time_timeval(mtime);</div><div class='ctx'> </div><div class='del'>-    if (symlink(StringValueCStr(from), StringValueCStr(to)) &lt; 0) {</div><div class='del'>-	sys_fail2(from, to);</div><div class='add'>+    len -= 2;</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='add'>+	Check_Type(RARRAY(rest)-&gt;ptr[i], T_STRING);</div><div class='ctx'>     }</div><div class='del'>-    return INT2FIX(0);</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='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.readlink(link_name) -&gt; file_name</div><div class='del'>- *  </div><div class='del'>- *  Returns the name of the file referenced by the given link.</div><div class='del'>- *  Not available on all platforms.</div><div class='del'>- *     </div><div class='del'>- *     File.symlink("testfile", "link2test")   #=&gt; 0</div><div class='del'>- *     File.readlink("link2test")              #=&gt; "testfile"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_readlink(klass, path)</div><div class='del'>-    VALUE klass, path;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_READLINK</div><div class='del'>-    char *buf;</div><div class='del'>-    int size = 100;</div><div class='del'>-    int rv;</div><div class='del'>-    VALUE v;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(path);</div><div class='del'>-    buf = xmalloc(size);</div><div class='del'>-    while ((rv = readlink(RSTRING(path)-&gt;ptr, buf, size)) == size</div><div class='del'>-#ifdef _AIX</div><div class='del'>-	    || (rv &lt; 0 &amp;&amp; errno == ERANGE) /* quirky behavior of GPFS */</div><div class='del'>-#endif</div><div class='del'>-	) {</div><div class='del'>-	size *= 2;</div><div class='del'>-	buf = xrealloc(buf, size);</div><div class='del'>-    }</div><div class='del'>-    if (rv &lt; 0) {</div><div class='del'>-	free(buf);</div><div class='del'>-	rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='add'>+	if (utimes(RSTRING(RARRAY(rest)-&gt;ptr[i])-&gt;ptr, tvp) &lt; 0)</div><div class='add'>+	    rb_sys_fail(RSTRING(RARRAY(rest)-&gt;ptr[i])-&gt;ptr);</div><div class='ctx'>     }</div><div class='del'>-    v = rb_tainted_str_new(buf, rv);</div><div class='del'>-    free(buf);</div><div class='ctx'> </div><div class='del'>-    return v;</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='add'>+    return INT2FIX(i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void unlink_internal _((const char *, void *));</div><div class='del'>-static void</div><div class='del'>-unlink_internal(path, arg)</div><div class='del'>-    const char *path;</div><div class='del'>-    void *arg;</div><div class='del'>-{</div><div class='del'>-    if (unlink(path) &lt; 0)</div><div class='del'>-	rb_sys_fail(path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.delete(file_name, ...)  =&gt; integer</div><div class='del'>- *     File.unlink(file_name, ...)  =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Deletes the named files, returning the number of names</div><div class='del'>- *  passed as arguments. Raises an exception on any error.</div><div class='del'>- *  See also &lt;code&gt;Dir::rmdir&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_unlink(klass, args)</div><div class='del'>-    VALUE klass, args;</div><div class='add'>+Ffile_link(obj, from, to)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *from, *to;</div><div class='ctx'> {</div><div class='del'>-    long n;</div><div class='add'>+    Check_Type(from, T_STRING);</div><div class='add'>+    Check_Type(to, T_STRING);</div><div class='ctx'> </div><div class='del'>-    rb_secure(2);</div><div class='del'>-    n = apply2files(unlink_internal, args, 0);</div><div class='del'>-    return LONG2FIX(n);</div><div class='add'>+    if (link(from-&gt;ptr, to-&gt;ptr) &lt; 0)</div><div class='add'>+	rb_sys_fail(from-&gt;ptr);</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.rename(old_name, new_name)   =&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Renames the given file to the new name. Raises a</div><div class='del'>- *  &lt;code&gt;SystemCallError&lt;/code&gt; if the file cannot be renamed.</div><div class='del'>- *     </div><div class='del'>- *     File.rename("afile", "afile.bak")   #=&gt; 0</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_rename(klass, from, to)</div><div class='del'>-    VALUE klass, from, to;</div><div class='del'>-{</div><div class='del'>-    const char *src, *dst;</div><div class='del'>-    SafeStringValue(from);</div><div class='del'>-    SafeStringValue(to);</div><div class='del'>-</div><div class='del'>-    src = StringValueCStr(from);</div><div class='del'>-    dst = StringValueCStr(to);</div><div class='del'>-#if defined __CYGWIN__</div><div class='del'>-    errno = 0;</div><div class='del'>-#endif</div><div class='del'>-    if (rename(src, dst) &lt; 0) {</div><div class='del'>-#if defined DOSISH &amp;&amp; !defined _WIN32</div><div class='del'>-	switch (errno) {</div><div class='del'>-	  case EEXIST:</div><div class='del'>-#if defined (__EMX__)</div><div class='del'>-	  case EACCES:</div><div class='del'>-#endif</div><div class='del'>-	    if (chmod(dst, 0666) == 0 &amp;&amp;</div><div class='del'>-		unlink(dst) == 0 &amp;&amp;</div><div class='del'>-		rename(src, dst) == 0)</div><div class='del'>-		return INT2FIX(0);</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-	sys_fail2(from, to);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.umask()          =&gt; integer</div><div class='del'>- *     File.umask(integer)   =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Returns the current umask value for this process. If the optional</div><div class='del'>- *  argument is given, set the umask to that value and return the</div><div class='del'>- *  previous value. Umask values are &lt;em&gt;subtracted&lt;/em&gt; from the</div><div class='del'>- *  default permissions, so a umask of &lt;code&gt;0222&lt;/code&gt; would make a</div><div class='del'>- *  file read-only for everyone.</div><div class='del'>- *     </div><div class='del'>- *     File.umask(0006)   #=&gt; 18</div><div class='del'>- *     File.umask         #=&gt; 6</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_umask(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    int omask = 0;</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	omask = umask(0);</div><div class='del'>-	umask(omask);</div><div class='del'>-    }</div><div class='del'>-    else if (argc == 1) {</div><div class='del'>-	omask = umask(NUM2INT(argv[0]));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong number of arguments");</div><div class='del'>-    }</div><div class='del'>-    return INT2FIX(omask);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-#undef DOSISH</div><div class='del'>-#endif</div><div class='del'>-#if defined __CYGWIN__ || defined DOSISH</div><div class='del'>-#define DOSISH_UNC</div><div class='del'>-#define DOSISH_DRIVE_LETTER</div><div class='del'>-#define isdirsep(x) ((x) == '/' || (x) == '\\')</div><div class='del'>-#else</div><div class='del'>-#define isdirsep(x) ((x) == '/')</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined _WIN32 || defined __CYGWIN__</div><div class='del'>-#define USE_NTFS 1</div><div class='del'>-#else</div><div class='del'>-#define USE_NTFS 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-#include &lt;ctype.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if USE_NTFS</div><div class='del'>-#define istrailinggabage(x) ((x) == '.' || (x) == ' ')</div><div class='del'>-#else</div><div class='del'>-#define istrailinggabage(x) 0</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef CharNext		/* defined as CharNext[AW] on Windows. */</div><div class='del'>-# if defined(DJGPP)</div><div class='del'>-#   define CharNext(p) ((p) + mblen(p, MB_CUR_MAX))</div><div class='del'>-# else</div><div class='del'>-#   define CharNext(p) ((p) + 1)</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-static inline int</div><div class='del'>-has_drive_letter(buf)</div><div class='del'>-    const char *buf;</div><div class='del'>-{</div><div class='del'>-    if (ISALPHA(buf[0]) &amp;&amp; buf[1] == ':') {</div><div class='del'>-	return 1;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static char*</div><div class='del'>-getcwdofdrv(drv)</div><div class='del'>-    int drv;</div><div class='del'>-{</div><div class='del'>-    char drive[4];</div><div class='del'>-    char *drvcwd, *oldcwd;</div><div class='del'>-</div><div class='del'>-    drive[0] = drv;</div><div class='del'>-    drive[1] = ':';</div><div class='del'>-    drive[2] = '\0';</div><div class='del'>-</div><div class='del'>-    /* the only way that I know to get the current directory</div><div class='del'>-       of a particular drive is to change chdir() to that drive,</div><div class='del'>-       so save the old cwd before chdir()</div><div class='del'>-    */</div><div class='del'>-    oldcwd = my_getcwd();</div><div class='del'>-    if (chdir(drive) == 0) {</div><div class='del'>-	drvcwd = my_getcwd();</div><div class='del'>-	chdir(oldcwd);</div><div class='del'>-	free(oldcwd);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	/* perhaps the drive is not exist. we return only drive letter */</div><div class='del'>-	drvcwd = strdup(drive);</div><div class='del'>-    }</div><div class='del'>-    return drvcwd;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static inline char *</div><div class='del'>-skiproot(path)</div><div class='del'>-    const char *path;</div><div class='add'>+Ffile_symlink(obj, from, to)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *from, *to;</div><div class='ctx'> {</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-    if (has_drive_letter(path)) path += 2;</div><div class='del'>-#endif</div><div class='del'>-    while (isdirsep(*path)) path++;</div><div class='del'>-    return (char *)path;</div><div class='del'>-}</div><div class='add'>+    Check_Type(from, T_STRING);</div><div class='add'>+    Check_Type(to, T_STRING);</div><div class='ctx'> </div><div class='del'>-#define nextdirsep rb_path_next</div><div class='del'>-char *</div><div class='del'>-rb_path_next(s)</div><div class='del'>-    const char *s;</div><div class='del'>-{</div><div class='del'>-    while (*s &amp;&amp; !isdirsep(*s)) {</div><div class='del'>-	s = CharNext(s);</div><div class='del'>-    }</div><div class='del'>-    return (char *)s;</div><div class='add'>+    if (symlink(from-&gt;ptr, to-&gt;ptr) &lt; 0)</div><div class='add'>+	rb_sys_fail(from-&gt;ptr);</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER) </div><div class='del'>-#define skipprefix rb_path_skip_prefix</div><div class='del'>-#else</div><div class='del'>-#define skipprefix(path) (path)</div><div class='del'>-#endif</div><div class='del'>-char *</div><div class='del'>-rb_path_skip_prefix(path)</div><div class='del'>-    const char *path;</div><div class='add'>+Ffile_readlink(obj, path)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *path;</div><div class='ctx'> {</div><div class='del'>-#if defined(DOSISH_UNC) || defined(DOSISH_DRIVE_LETTER) </div><div class='del'>-#ifdef DOSISH_UNC</div><div class='del'>-    if (isdirsep(path[0]) &amp;&amp; isdirsep(path[1])) {</div><div class='del'>-	path += 2;</div><div class='del'>-	while (isdirsep(*path)) path++;</div><div class='del'>-	if (*(path = nextdirsep(path)) &amp;&amp; path[1] &amp;&amp; !isdirsep(path[1]))</div><div class='del'>-	    path = nextdirsep(path + 1);</div><div class='del'>-	return (char *)path;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-    if (has_drive_letter(path))</div><div class='del'>-	return (char *)(path + 2);</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    return (char *)path;</div><div class='del'>-}</div><div class='add'>+    char buf[MAXPATHLEN];</div><div class='add'>+    int cc;</div><div class='ctx'> </div><div class='del'>-#define strrdirsep rb_path_last_separator</div><div class='del'>-char *</div><div class='del'>-rb_path_last_separator(path)</div><div class='del'>-    const char *path;</div><div class='del'>-{</div><div class='del'>-    char *last = NULL;</div><div class='del'>-    while (*path) {</div><div class='del'>-	if (isdirsep(*path)) {</div><div class='del'>-	    const char *tmp = path++;</div><div class='del'>-	    while (isdirsep(*path)) path++;</div><div class='del'>-	    if (!*path) break;</div><div class='del'>-	    last = (char *)tmp;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    path = CharNext(path);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return last;</div><div class='del'>-}</div><div class='add'>+    Check_Type(path, T_STRING);</div><div class='ctx'> </div><div class='del'>-static char *</div><div class='del'>-chompdirsep(path)</div><div class='del'>-    const char *path;</div><div class='del'>-{</div><div class='del'>-    while (*path) {</div><div class='del'>-	if (isdirsep(*path)) {</div><div class='del'>-	    const char *last = path++;</div><div class='del'>-	    while (isdirsep(*path)) path++;</div><div class='del'>-	    if (!*path) return (char *)last;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    path = CharNext(path);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return (char *)path;</div><div class='del'>-}</div><div class='add'>+    if ((cc = readlink(path-&gt;ptr, buf, MAXPATHLEN)) &lt; 0)</div><div class='add'>+	rb_sys_fail(path-&gt;ptr);</div><div class='ctx'> </div><div class='del'>-char *</div><div class='del'>-rb_path_end(path)</div><div class='del'>-    const char *path;</div><div class='del'>-{</div><div class='del'>-    if (isdirsep(*path)) path++;</div><div class='del'>-    return chompdirsep(path);</div><div class='add'>+    return str_new(buf, cc);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if USE_NTFS</div><div class='del'>-static char *</div><div class='del'>-ntfs_tail(const char *path)</div><div class='del'>-{</div><div class='del'>-    while (*path == '.') path++;</div><div class='del'>-    while (*path &amp;&amp; *path != ':') {</div><div class='del'>-	if (istrailinggabage(*path)) {</div><div class='del'>-	    const char *last = path++;</div><div class='del'>-	    while (istrailinggabage(*path)) path++;</div><div class='del'>-	    if (!*path || *path == ':') return (char *)last;</div><div class='del'>-	}</div><div class='del'>-	else if (isdirsep(*path)) {</div><div class='del'>-	    const char *last = path++;</div><div class='del'>-	    while (isdirsep(*path)) path++;</div><div class='del'>-	    if (!*path) return (char *)last;</div><div class='del'>-	    if (*path == ':') path++;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    path = CharNext(path);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return (char *)path;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define BUFCHECK(cond) do {\</div><div class='del'>-    long bdiff = p - buf;\</div><div class='del'>-    if (cond) {\</div><div class='del'>-	do {buflen *= 2;} while (cond);\</div><div class='del'>-	rb_str_resize(result, buflen);\</div><div class='del'>-	buf = RSTRING_PTR(result);\</div><div class='del'>-	p = buf + bdiff;\</div><div class='del'>-	pend = buf + buflen;\</div><div class='del'>-    }\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-#define BUFINIT() (\</div><div class='del'>-    p = buf = RSTRING(result)-&gt;ptr,\</div><div class='del'>-    buflen = RSTRING(result)-&gt;len,\</div><div class='del'>-    pend = p + buflen)</div><div class='del'>-</div><div class='del'>-#if !defined(TOLOWER)</div><div class='del'>-#define TOLOWER(c) (ISUPPER(c) ? tolower(c) : (c))</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int is_absolute_path _((const char*));</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-file_expand_path(fname, dname, result)</div><div class='del'>-    VALUE fname, dname, result;</div><div class='add'>+Ffile_unlink(obj, args)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RArray *args;</div><div class='ctx'> {</div><div class='del'>-    const char *s, *b;</div><div class='del'>-    char *buf, *p, *pend, *root;</div><div class='del'>-    long buflen, dirlen;</div><div class='del'>-    int tainted;</div><div class='del'>-</div><div class='del'>-    s = StringValuePtr(fname);</div><div class='del'>-    BUFINIT();</div><div class='del'>-    tainted = OBJ_TAINTED(fname);</div><div class='del'>-</div><div class='del'>-    if (s[0] == '~') {</div><div class='del'>-	if (isdirsep(s[1]) || s[1] == '\0') {</div><div class='del'>-	    const char *dir = getenv("HOME");</div><div class='del'>-</div><div class='del'>-	    if (!dir) {</div><div class='del'>-		rb_raise(rb_eArgError, "couldn't find HOME environment -- expanding `%s'", s);</div><div class='del'>-	    }</div><div class='del'>-	    dirlen = strlen(dir);</div><div class='del'>-	    BUFCHECK(dirlen &gt; buflen);</div><div class='del'>-	    strcpy(buf, dir);</div><div class='del'>-#if defined DOSISH || defined __CYGWIN__</div><div class='del'>-	    for (p = buf; *p; p = CharNext(p)) {</div><div class='del'>-		if (*p == '\\') {</div><div class='del'>-		    *p = '/';</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-#else</div><div class='del'>-	    p = buf + strlen(dir);</div><div class='del'>-#endif</div><div class='del'>-	    s++;</div><div class='del'>-	    tainted = 1;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-#ifdef HAVE_PWD_H</div><div class='del'>-	    struct passwd *pwPtr;</div><div class='del'>-	    s++;</div><div class='del'>-#endif</div><div class='del'>-	    s = nextdirsep(b = s);</div><div class='del'>-	    BUFCHECK(bdiff + (s-b) &gt;= buflen);</div><div class='del'>-	    memcpy(p, b, s-b);</div><div class='del'>-	    p += s-b;</div><div class='del'>-	    *p = '\0';</div><div class='del'>-#ifdef HAVE_PWD_H</div><div class='del'>-	    pwPtr = getpwnam(buf);</div><div class='del'>-	    if (!pwPtr) {</div><div class='del'>-		endpwent();</div><div class='del'>-		rb_raise(rb_eArgError, "user %s doesn't exist", buf);</div><div class='del'>-	    }</div><div class='del'>-	    dirlen = strlen(pwPtr-&gt;pw_dir);</div><div class='del'>-	    BUFCHECK(dirlen &gt; buflen);</div><div class='del'>-	    strcpy(buf, pwPtr-&gt;pw_dir);</div><div class='del'>-	    p = buf + strlen(pwPtr-&gt;pw_dir);</div><div class='del'>-	    endpwent();</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-    /* skip drive letter */</div><div class='del'>-    else if (has_drive_letter(s)) {</div><div class='del'>-	if (isdirsep(s[2])) {</div><div class='del'>-	    /* specified drive letter, and full path */</div><div class='del'>-	    /* skip drive letter */</div><div class='del'>-	    BUFCHECK(bdiff + 2 &gt;= buflen);</div><div class='del'>-	    memcpy(p, s, 2);</div><div class='del'>-	    p += 2;</div><div class='del'>-	    s += 2;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    /* specified drive, but not full path */</div><div class='del'>-	    int same = 0;</div><div class='del'>-	    if (!NIL_P(dname)) {</div><div class='del'>-		file_expand_path(dname, Qnil, result);</div><div class='del'>-		BUFINIT();</div><div class='del'>-		if (has_drive_letter(p) &amp;&amp; TOLOWER(p[0]) == TOLOWER(s[0])) {</div><div class='del'>-		    /* ok, same drive */</div><div class='del'>-		    same = 1;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    if (!same) {</div><div class='del'>-		char *dir = getcwdofdrv(*s);</div><div class='del'>-</div><div class='del'>-		tainted = 1;</div><div class='del'>-		dirlen = strlen(dir);</div><div class='del'>-		BUFCHECK(dirlen &gt; buflen);</div><div class='del'>-		strcpy(buf, dir);</div><div class='del'>-		free(dir);</div><div class='del'>-	    }</div><div class='del'>-	    p = chompdirsep(skiproot(buf));</div><div class='del'>-	    s += 2;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    else if (!is_absolute_path(s)) {</div><div class='del'>-	if (!NIL_P(dname)) {</div><div class='del'>-	    file_expand_path(dname, Qnil, result);</div><div class='del'>-	    BUFINIT();</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    char *dir = my_getcwd();</div><div class='del'>-</div><div class='del'>-	    tainted = 1;</div><div class='del'>-	    dirlen = strlen(dir);</div><div class='del'>-	    BUFCHECK(dirlen &gt; buflen);</div><div class='del'>-	    strcpy(buf, dir);</div><div class='del'>-	    free(dir);</div><div class='del'>-	}</div><div class='del'>-#if defined DOSISH || defined __CYGWIN__</div><div class='del'>-	if (isdirsep(*s)) {</div><div class='del'>-	    /* specified full path, but not drive letter nor UNC */</div><div class='del'>-	    /* we need to get the drive letter or UNC share name */</div><div class='del'>-	    p = skipprefix(buf);</div><div class='del'>-	}</div><div class='del'>-	else</div><div class='del'>-#endif</div><div class='del'>-	    p = chompdirsep(skiproot(buf));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	b = s;</div><div class='del'>-	do s++; while (isdirsep(*s));</div><div class='del'>-	p = buf + (s - b);</div><div class='del'>-	BUFCHECK(bdiff &gt;= buflen);</div><div class='del'>-	memset(buf, '/', p - buf);</div><div class='del'>-    }</div><div class='del'>-    if (p &gt; buf &amp;&amp; p[-1] == '/')</div><div class='del'>-	--p;</div><div class='del'>-    else</div><div class='del'>-	*p = '/';</div><div class='del'>-</div><div class='del'>-    p[1] = 0;</div><div class='del'>-    root = skipprefix(buf);</div><div class='del'>-</div><div class='del'>-    b = s;</div><div class='del'>-    while (*s) {</div><div class='del'>-	switch (*s) {</div><div class='del'>-	  case '.':</div><div class='del'>-	    if (b == s++) {	/* beginning of path element */</div><div class='del'>-		switch (*s) {</div><div class='del'>-		  case '\0':</div><div class='del'>-		    b = s;</div><div class='del'>-		    break;</div><div class='del'>-		  case '.':</div><div class='del'>-		    if (*(s+1) == '\0' || isdirsep(*(s+1))) {</div><div class='del'>-			/* We must go back to the parent */</div><div class='del'>-			char *n;</div><div class='del'>-			*p = '\0';</div><div class='del'>-			if (!(n = strrdirsep(root))) {</div><div class='del'>-			    *p = '/';</div><div class='del'>-			}</div><div class='del'>-			else {</div><div class='del'>-			    p = n;</div><div class='del'>-			}</div><div class='del'>-			b = ++s;</div><div class='del'>-		    }</div><div class='del'>-#if USE_NTFS</div><div class='del'>-		    else {</div><div class='del'>-			do *++s; while (istrailinggabage(*s));</div><div class='del'>-		    }</div><div class='del'>-#endif</div><div class='del'>-		    break;</div><div class='del'>-		  case '/':</div><div class='del'>-#if defined DOSISH || defined __CYGWIN__</div><div class='del'>-		  case '\\':</div><div class='del'>-#endif</div><div class='del'>-		    b = ++s;</div><div class='del'>-		    break;</div><div class='del'>-		  default:</div><div class='del'>-		    /* ordinary path element, beginning don't move */</div><div class='del'>-		    break;</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-#if USE_NTFS</div><div class='del'>-	    else {</div><div class='del'>-		--s;</div><div class='del'>-	      case ' ': {</div><div class='del'>-		const char *e = s;</div><div class='del'>-		while (istrailinggabage(*s)) s++;</div><div class='del'>-		if (!*s) {</div><div class='del'>-		    s = e;</div><div class='del'>-		    goto endpath;</div><div class='del'>-		}</div><div class='del'>-	      }</div><div class='del'>-	    }</div><div class='del'>-#endif</div><div class='del'>-	    break;</div><div class='del'>-	  case '/':</div><div class='del'>-#if defined DOSISH || defined __CYGWIN__</div><div class='del'>-	  case '\\':</div><div class='del'>-#endif</div><div class='del'>-	    if (s &gt; b) {</div><div class='del'>-		long rootdiff = root - buf;</div><div class='del'>-		BUFCHECK(bdiff + (s-b+1) &gt;= buflen);</div><div class='del'>-		root = buf + rootdiff;</div><div class='del'>-		memcpy(++p, b, s-b);</div><div class='del'>-		p += s-b;</div><div class='del'>-		*p = '/';</div><div class='del'>-	    }</div><div class='del'>-	    b = ++s;</div><div class='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    s = CharNext(s);</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='add'>+    int i, len;</div><div class='ctx'> </div><div class='del'>-    if (s &gt; b) {</div><div class='del'>-#if USE_NTFS</div><div class='del'>-      endpath:</div><div class='del'>-	if (s &gt; b + 6 &amp;&amp; strncasecmp(s - 6, ":$DATA", 6) == 0) {</div><div class='del'>-	    /* alias of stream */</div><div class='del'>-	    /* get rid of a bug of x64 VC++ */</div><div class='del'>-	    if (*(s-7) == ':') s -= 7;			/* prime */</div><div class='del'>-	    else if (memchr(b, ':', s - 6 - b)) s -= 6; /* alternative */</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-	BUFCHECK(bdiff + (s-b) &gt;= buflen);</div><div class='del'>-	memcpy(++p, b, s-b);</div><div class='del'>-	p += s-b;</div><div class='add'>+    len = args-&gt;len;</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='add'>+	Check_Type(args-&gt;ptr[i], T_STRING);</div><div class='ctx'>     }</div><div class='del'>-    if (p == skiproot(buf) - 1) p++;</div><div class='del'>-</div><div class='del'>-#if USE_NTFS</div><div class='del'>-    *p = '\0';</div><div class='del'>-    if ((s = strrdirsep(b = buf)) != 0 &amp;&amp; !strpbrk(s, "*?")) {</div><div class='del'>-	size_t len;</div><div class='del'>-	WIN32_FIND_DATA wfd;</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-	int lnk_added = 0, is_symlink = 0;</div><div class='del'>-	struct stat st;</div><div class='del'>-	char w32buf[MAXPATHLEN];</div><div class='del'>-	p = (char *)s;</div><div class='del'>-	if (lstat(buf, &amp;st) == 0 &amp;&amp; S_ISLNK(st.st_mode)) {</div><div class='del'>-	    is_symlink = 1;</div><div class='del'>-	    *p = '\0';</div><div class='del'>-	}</div><div class='del'>-	if (cygwin_conv_to_win32_path((*buf ? buf : "/"), w32buf) == 0) {</div><div class='del'>-	    b = w32buf;</div><div class='del'>-	}</div><div class='del'>-	if (is_symlink &amp;&amp; b == w32buf) {</div><div class='del'>-	    *p = '\\';</div><div class='del'>-	    strlcat(w32buf, p, sizeof(w32buf));</div><div class='del'>-	    len = strlen(p);</div><div class='del'>-	    if (len &gt; 4 &amp;&amp; strcasecmp(p + len - 4, ".lnk") != 0) {</div><div class='del'>-		lnk_added = 1;</div><div class='del'>-		strlcat(w32buf, ".lnk", sizeof(w32buf));</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	*p = '/';</div><div class='del'>-#endif</div><div class='del'>-	HANDLE h = FindFirstFile(b, &amp;wfd);</div><div class='del'>-	if (h != INVALID_HANDLE_VALUE) {</div><div class='del'>-	    FindClose(h);</div><div class='del'>-	    len = strlen(wfd.cFileName);</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-	    if (lnk_added &amp;&amp; len &gt; 4 &amp;&amp;</div><div class='del'>-		strcasecmp(wfd.cFileName + len - 4, ".lnk") == 0) {</div><div class='del'>-		wfd.cFileName[len -= 4] = '\0';</div><div class='del'>-	    }</div><div class='del'>-#else</div><div class='del'>-	    p = (char *)s;</div><div class='del'>-#endif</div><div class='del'>-	    ++p;</div><div class='del'>-	    BUFCHECK(bdiff + len &gt;= buflen);</div><div class='del'>-	    memcpy(p, wfd.cFileName, len + 1);</div><div class='del'>-	    p += len;</div><div class='del'>-	}</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-	else {</div><div class='del'>-	    p += strlen(p);</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='add'>+    for (i=0; i&lt;len; i++) {</div><div class='add'>+	if (unlink(RSTRING(args-&gt;ptr[i])-&gt;ptr) &lt; 0)</div><div class='add'>+	    rb_sys_fail(RSTRING(args-&gt;ptr[i])-&gt;ptr);</div><div class='ctx'>     }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (tainted) OBJ_TAINT(result);</div><div class='del'>-    rb_str_set_len(result, p - buf);</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_file_expand_path(fname, dname)</div><div class='del'>-    VALUE fname, dname;</div><div class='del'>-{</div><div class='del'>-    return file_expand_path(fname, dname, rb_str_new(0, MAXPATHLEN + 2));</div><div class='add'>+    return INT2FIX(i);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.expand_path(file_name [, dir_string] ) -&gt; abs_file_name</div><div class='del'>- *  </div><div class='del'>- *  Converts a pathname to an absolute pathname. Relative paths are</div><div class='del'>- *  referenced from the current working directory of the process unless</div><div class='del'>- *  &lt;i&gt;dir_string&lt;/i&gt; is given, in which case it will be used as the</div><div class='del'>- *  starting point. The given pathname may start with a</div><div class='del'>- *  ``&lt;code&gt;~&lt;/code&gt;'', which expands to the process owner's home</div><div class='del'>- *  directory (the environment variable &lt;code&gt;HOME&lt;/code&gt; must be set</div><div class='del'>- *  correctly). ``&lt;code&gt;~&lt;/code&gt;&lt;i&gt;user&lt;/i&gt;'' expands to the named</div><div class='del'>- *  user's home directory.</div><div class='del'>- *     </div><div class='del'>- *     File.expand_path("~oracle/bin")           #=&gt; "/home/oracle/bin"</div><div class='del'>- *     File.expand_path("../../bin", "/tmp/x")   #=&gt; "/bin"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_file_s_expand_path(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+static VALUE</div><div class='add'>+Ffile_rename(obj, from, to)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *from, *to;</div><div class='ctx'> {</div><div class='del'>-    VALUE fname, dname;</div><div class='add'>+    Check_Type(from, T_STRING);</div><div class='add'>+    Check_Type(to, T_STRING);</div><div class='ctx'> </div><div class='del'>-    if (argc == 1) {</div><div class='del'>-	return rb_file_expand_path(argv[0], Qnil);</div><div class='del'>-    }</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;fname, &amp;dname);</div><div class='add'>+    if (rename(from-&gt;ptr, to-&gt;ptr) == -1)</div><div class='add'>+	rb_sys_fail(from-&gt;ptr);</div><div class='ctx'> </div><div class='del'>-    return rb_file_expand_path(fname, dname);</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-rmext(p, l1, e)</div><div class='del'>-    const char *p, *e;</div><div class='del'>-    int l1;</div><div class='del'>-{</div><div class='del'>-    int l2;</div><div class='del'>-</div><div class='del'>-    if (!e) return 0;</div><div class='del'>-</div><div class='del'>-    l2 = strlen(e);</div><div class='del'>-    if (l2 == 2 &amp;&amp; e[1] == '*') {</div><div class='del'>-	unsigned char c = *e;</div><div class='del'>-	e = p + l1;</div><div class='del'>-	do {</div><div class='del'>-	    if (e &lt;= p) return 0;</div><div class='del'>-	} while (*--e != c);</div><div class='del'>-	return e - p;</div><div class='del'>-    }</div><div class='del'>-    if (l1 &lt; l2) return l1;</div><div class='del'>-</div><div class='del'>-#if CASEFOLD_FILESYSTEM</div><div class='del'>-#define fncomp strncasecmp</div><div class='del'>-#else</div><div class='del'>-#define fncomp strncmp</div><div class='del'>-#endif</div><div class='del'>-    if (fncomp(p+l1-l2, e, l2) == 0) {</div><div class='del'>-	return l1-l2;</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'>- *  call-seq:</div><div class='del'>- *     File.basename(file_name [, suffix] ) -&gt; base_name</div><div class='del'>- *  </div><div class='del'>- *  Returns the last component of the filename given in &lt;i&gt;file_name&lt;/i&gt;,</div><div class='del'>- *  which must be formed using forward slashes (``&lt;code&gt;/&lt;/code&gt;'')</div><div class='del'>- *  regardless of the separator used on the local file system. If</div><div class='del'>- *  &lt;i&gt;suffix&lt;/i&gt; is given and present at the end of &lt;i&gt;file_name&lt;/i&gt;,</div><div class='del'>- *  it is removed.</div><div class='del'>- *     </div><div class='del'>- *     File.basename("/home/gumby/work/ruby.rb")          #=&gt; "ruby.rb"</div><div class='del'>- *     File.basename("/home/gumby/work/ruby.rb", ".rb")   #=&gt; "ruby"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_s_basename(argc, argv)</div><div class='add'>+Ffile_umask(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'> {</div><div class='del'>-    VALUE fname, fext, basename;</div><div class='del'>-    const char *name, *p;</div><div class='del'>-#if defined DOSISH_DRIVE_LETTER || defined DOSISH_UNC</div><div class='del'>-    const char *root;</div><div class='del'>-#endif</div><div class='del'>-    int f, n;</div><div class='add'>+    VALUE mask;</div><div class='add'>+    int omask;</div><div class='ctx'> </div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;fname, &amp;fext) == 2) {</div><div class='del'>-	StringValue(fext);</div><div class='add'>+    if (argc == 1) {</div><div class='add'>+	int omask = umask(0);</div><div class='add'>+	umask(omask);</div><div class='ctx'>     }</div><div class='del'>-    StringValue(fname);</div><div class='del'>-    if (RSTRING(fname)-&gt;len == 0 || !*(name = RSTRING(fname)-&gt;ptr))</div><div class='del'>-	return fname;</div><div class='del'>-    name = skipprefix(name);</div><div class='del'>-#if defined DOSISH_DRIVE_LETTER || defined DOSISH_UNC</div><div class='del'>-    root = name;</div><div class='del'>-#endif</div><div class='del'>-    while (isdirsep(*name))</div><div class='del'>-	name++;</div><div class='del'>-    if (!*name) {</div><div class='del'>-	p = name - 1;</div><div class='del'>-	f = 1;</div><div class='del'>-#if defined DOSISH_DRIVE_LETTER || defined DOSISH_UNC</div><div class='del'>-	if (name != root) {</div><div class='del'>-	    /* has slashes */</div><div class='del'>-	}</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-	else if (*p == ':') {</div><div class='del'>-	    p++;</div><div class='del'>-	    f = 0;</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-#ifdef DOSISH_UNC</div><div class='del'>-	else {</div><div class='del'>-	    p = "/";</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='add'>+    else if (argc == 2) {</div><div class='add'>+	omask = umask(NUM2INT(argv[1]));</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	if (!(p = strrdirsep(name))) {</div><div class='del'>-	    p = name;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    while (isdirsep(*p)) p++; /* skip last / */</div><div class='del'>-	}</div><div class='del'>-#if USE_NTFS</div><div class='del'>-	n = ntfs_tail(p) - p;</div><div class='del'>-#else</div><div class='del'>-	n = chompdirsep(p) - p;</div><div class='del'>-#endif</div><div class='del'>-	if (NIL_P(fext) || !(f = rmext(p, n, StringValueCStr(fext)))) {</div><div class='del'>-	    f = n;</div><div class='del'>-	}</div><div class='del'>-	if (f == RSTRING_LEN(fname)) return fname;</div><div class='del'>-    }</div><div class='del'>-    basename = rb_str_new(p, f);</div><div class='del'>-    OBJ_INFECT(basename, fname);</div><div class='del'>-    return basename;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.dirname(file_name ) -&gt; dir_name</div><div class='del'>- *  </div><div class='del'>- *  Returns all components of the filename given in &lt;i&gt;file_name&lt;/i&gt;</div><div class='del'>- *  except the last one. The filename must be formed using forward</div><div class='del'>- *  slashes (``&lt;code&gt;/&lt;/code&gt;'') regardless of the separator used on the</div><div class='del'>- *  local file system.</div><div class='del'>- *     </div><div class='del'>- *     File.dirname("/home/gumby/work/ruby.rb")   #=&gt; "/home/gumby/work"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_dirname(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='del'>-{</div><div class='del'>-    const char *name, *root, *p;</div><div class='del'>-    VALUE dirname;</div><div class='del'>-</div><div class='del'>-    name = StringValueCStr(fname);</div><div class='del'>-    root = skiproot(name);</div><div class='del'>-#ifdef DOSISH_UNC</div><div class='del'>-    if (root &gt; name + 1 &amp;&amp; isdirsep(*name))</div><div class='del'>-	root = skipprefix(name = root - 2);</div><div class='del'>-#else</div><div class='del'>-    if (root &gt; name + 1)</div><div class='del'>-	name = root - 1;</div><div class='del'>-#endif</div><div class='del'>-    p = strrdirsep(root);</div><div class='del'>-    if (!p) {</div><div class='del'>-	p = root;</div><div class='del'>-    }</div><div class='del'>-    if (p == name)</div><div class='del'>-	return rb_str_new2(".");</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-    if (has_drive_letter(name) &amp;&amp; isdirsep(*(name + 2))) {</div><div class='del'>-	const char *top = skiproot(name + 2);</div><div class='del'>-	dirname = rb_str_new(name, 3);</div><div class='del'>-	rb_str_cat(dirname, top, p - top);</div><div class='del'>-    }</div><div class='del'>-    else</div><div class='del'>-#endif</div><div class='del'>-    dirname = rb_str_new(name, p - name);</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-    if (has_drive_letter(name) &amp;&amp; root == name + 2 &amp;&amp; p - name == 2)</div><div class='del'>-	rb_str_cat(dirname, ".", 1);</div><div class='del'>-#endif</div><div class='del'>-    OBJ_INFECT(dirname, fname);</div><div class='del'>-    return dirname;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.extname(path) -&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Returns the extension (the portion of file name in &lt;i&gt;path&lt;/i&gt;</div><div class='del'>- *  after the period).</div><div class='del'>- *     </div><div class='del'>- *     File.extname("test.rb")         #=&gt; ".rb"</div><div class='del'>- *     File.extname("a/b/d/test.rb")   #=&gt; ".rb"</div><div class='del'>- *     File.extname("test")            #=&gt; ""</div><div class='del'>- *     File.extname(".profile")        #=&gt; ""</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_extname(klass, fname)</div><div class='del'>-    VALUE klass, fname;</div><div class='del'>-{</div><div class='del'>-    const char *name, *p, *e;</div><div class='del'>-    VALUE extname;</div><div class='del'>-</div><div class='del'>-    name = StringValueCStr(fname);</div><div class='del'>-    p = strrdirsep(name);	/* get the last path component */</div><div class='del'>-    if (!p)</div><div class='del'>-	p = name;</div><div class='del'>-    else</div><div class='del'>-	name = ++p;</div><div class='del'>-</div><div class='del'>-    e = 0;</div><div class='del'>-    while (*p) {</div><div class='del'>-	if (*p == '.' || istrailinggabage(*p)) {</div><div class='del'>-#if USE_NTFS</div><div class='del'>-	    const char *last = p++, *dot = last;</div><div class='del'>-	    while (istrailinggabage(*p)) {</div><div class='del'>-		if (*p == '.') dot = p;</div><div class='del'>-		p++;</div><div class='del'>-	    }</div><div class='del'>-	    if (!*p || *p == ':') {</div><div class='del'>-		p = last;</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	    e = dot;</div><div class='del'>-	    continue;</div><div class='del'>-#else</div><div class='del'>-	    e = p;	  /* get the last dot of the last component */</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-#if USE_NTFS</div><div class='del'>-	else if (*p == ':') {</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-#endif</div><div class='del'>-	else if (isdirsep(*p))</div><div class='del'>-	    break;</div><div class='del'>-	p = CharNext(p);</div><div class='del'>-    }</div><div class='del'>-    if (!e || e == name || e+1 == p)	/* no dot, or the only dot is first or end? */</div><div class='del'>-	return rb_str_new(0, 0);</div><div class='del'>-    extname = rb_str_new(e, p - e);	/* keep the dot, too! */</div><div class='del'>-    OBJ_INFECT(extname, fname);</div><div class='del'>-    return extname;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.split(file_name)   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Splits the given string into a directory and a file component and</div><div class='del'>- *  returns them in a two-element array. See also</div><div class='del'>- *  &lt;code&gt;File::dirname&lt;/code&gt; and &lt;code&gt;File::basename&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.split("/home/gumby/.profile")   #=&gt; ["/home/gumby", ".profile"]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_split(klass, path)</div><div class='del'>-    VALUE klass, path;</div><div class='del'>-{</div><div class='del'>-    StringValue(path);		/* get rid of converting twice */</div><div class='del'>-    return rb_assoc_new(rb_file_s_dirname(Qnil, path), rb_file_s_basename(1,&amp;path));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE separator;</div><div class='del'>-</div><div class='del'>-static VALUE rb_file_join _((VALUE ary, VALUE sep));</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-file_inspect_join(ary, arg)</div><div class='del'>-    VALUE ary;</div><div class='del'>-    VALUE *arg;</div><div class='del'>-{</div><div class='del'>-    return rb_file_join(arg[0], arg[1]);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_join(ary, sep)</div><div class='del'>-    VALUE ary, sep;</div><div class='del'>-{</div><div class='del'>-    long len, i;</div><div class='del'>-    int taint = 0;</div><div class='del'>-    VALUE result, tmp;</div><div class='del'>-    const char *name, *tail;</div><div class='del'>-</div><div class='del'>-    if (RARRAY(ary)-&gt;len == 0) return rb_str_new(0, 0);</div><div class='del'>-    if (OBJ_TAINTED(ary)) taint = 1;</div><div class='del'>-    if (OBJ_TAINTED(sep)) taint = 1;</div><div class='del'>-</div><div class='del'>-    len = 1;</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	if (TYPE(RARRAY(ary)-&gt;ptr[i]) == T_STRING) {</div><div class='del'>-	    len += RSTRING(RARRAY(ary)-&gt;ptr[i])-&gt;len;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    len += 10;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(sep) &amp;&amp; TYPE(sep) == T_STRING) {</div><div class='del'>-	len += RSTRING(sep)-&gt;len * RARRAY(ary)-&gt;len - 1;</div><div class='del'>-    }</div><div class='del'>-    result = rb_str_buf_new(len);</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	tmp = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	switch (TYPE(tmp)) {</div><div class='del'>-	  case T_STRING:</div><div class='del'>-	    break;</div><div class='del'>-	  case T_ARRAY:</div><div class='del'>-	    if (rb_inspecting_p(tmp)) {</div><div class='del'>-		tmp = rb_str_new2("[...]");</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		VALUE args[2];</div><div class='del'>-</div><div class='del'>-		args[0] = tmp;</div><div class='del'>-		args[1] = sep;</div><div class='del'>-		tmp = rb_protect_inspect(file_inspect_join, ary, (VALUE)args);</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    StringValueCStr(tmp);</div><div class='del'>-	}</div><div class='del'>-	name = StringValueCStr(result);</div><div class='del'>-	if (i &gt; 0 &amp;&amp; !NIL_P(sep)) {</div><div class='del'>-	    tail = chompdirsep(name);</div><div class='del'>-	    if (RSTRING(tmp)-&gt;ptr &amp;&amp; isdirsep(RSTRING(tmp)-&gt;ptr[0])) {</div><div class='del'>-		RSTRING(result)-&gt;len = tail - name;</div><div class='del'>-	    }</div><div class='del'>-	    else if (!*tail) {</div><div class='del'>-		rb_str_buf_append(result, sep);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	rb_str_buf_append(result, tmp);</div><div class='del'>-	if (OBJ_TAINTED(tmp)) taint = 1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (taint) OBJ_TAINT(result);</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'>- *     File.join(string, ...) -&gt; path</div><div class='del'>- *  </div><div class='del'>- *  Returns a new string formed by joining the strings using</div><div class='del'>- *  &lt;code&gt;File::SEPARATOR&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.join("usr", "mail", "gumby")   #=&gt; "usr/mail/gumby"</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_join(klass, args)</div><div class='del'>-    VALUE klass, args;</div><div class='del'>-{</div><div class='del'>-    return rb_file_join(args, separator);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.truncate(file_name, integer)  =&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Truncates the file &lt;i&gt;file_name&lt;/i&gt; to be at most &lt;i&gt;integer&lt;/i&gt;</div><div class='del'>- *  bytes long. Not available on all platforms.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("out", "w")</div><div class='del'>- *     f.write("1234567890")     #=&gt; 10</div><div class='del'>- *     f.close                   #=&gt; nil</div><div class='del'>- *     File.truncate("out", 5)   #=&gt; 0</div><div class='del'>- *     File.size("out")          #=&gt; 5</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_s_truncate(klass, path, len)</div><div class='del'>-    VALUE klass, path, len;</div><div class='del'>-{</div><div class='del'>-    off_t pos;</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    pos = NUM2OFFT(len);</div><div class='del'>-    SafeStringValue(path);</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_TRUNCATE</div><div class='del'>-    if (truncate(StringValueCStr(path), pos) &lt; 0)</div><div class='del'>-	rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='del'>-#else</div><div class='del'>-# ifdef HAVE_CHSIZE</div><div class='del'>-    {</div><div class='del'>-	int tmpfd;</div><div class='del'>-</div><div class='del'>-#  ifdef _WIN32</div><div class='del'>-	if ((tmpfd = open(StringValueCStr(path), O_RDWR)) &lt; 0) {</div><div class='del'>-	    rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-#  else</div><div class='del'>-	if ((tmpfd = open(StringValueCStr(path), 0)) &lt; 0) {</div><div class='del'>-	    rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-#  endif</div><div class='del'>-	if (chsize(tmpfd, pos) &lt; 0) {</div><div class='del'>-	    close(tmpfd);</div><div class='del'>-	    rb_sys_fail(RSTRING(path)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-	close(tmpfd);</div><div class='add'>+	Fail("wrong # of argument");</div><div class='ctx'>     }</div><div class='del'>-# else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-    return INT2FIX(0);</div><div class='add'>+    return INT2FIX(omask);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     file.truncate(integer)    =&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Truncates &lt;i&gt;file&lt;/i&gt; to at most &lt;i&gt;integer&lt;/i&gt; bytes. The file</div><div class='del'>- *  must be opened for writing. Not available on all platforms.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("out", "w")</div><div class='del'>- *     f.syswrite("1234567890")   #=&gt; 10</div><div class='del'>- *     f.truncate(5)              #=&gt; 0</div><div class='del'>- *     f.close()                  #=&gt; nil</div><div class='del'>- *     File.size("out")           #=&gt; 5</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_truncate(obj, len)</div><div class='add'>+Ffile_truncate(obj, path, len)</div><div class='ctx'>     VALUE obj, len;</div><div class='add'>+    struct RString *path;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    FILE *f;</div><div class='del'>-    off_t pos;</div><div class='add'>+    Check_Type(path, T_STRING);</div><div class='ctx'> </div><div class='del'>-    rb_secure(2);</div><div class='del'>-    pos = NUM2OFFT(len);</div><div class='del'>-    GetOpenFile(obj, fptr);</div><div class='del'>-    if (!(fptr-&gt;mode &amp; FMODE_WRITABLE)) {</div><div class='del'>-	rb_raise(rb_eIOError, "not opened for writing");</div><div class='del'>-    }</div><div class='del'>-    f = GetWriteFile(fptr);</div><div class='del'>-    fflush(f);</div><div class='del'>-    fseeko(f, (off_t)0, SEEK_CUR);</div><div class='del'>-#ifdef HAVE_FTRUNCATE</div><div class='del'>-    if (ftruncate(fileno(f), pos) &lt; 0)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-#else</div><div class='del'>-# ifdef HAVE_CHSIZE</div><div class='del'>-    if (chsize(fileno(f), pos) &lt; 0)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-# else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# ifndef LOCK_SH</div><div class='del'>-#  define LOCK_SH 1</div><div class='del'>-# endif</div><div class='del'>-# ifndef LOCK_EX</div><div class='del'>-#  define LOCK_EX 2</div><div class='del'>-# endif</div><div class='del'>-# ifndef LOCK_NB</div><div class='del'>-#  define LOCK_NB 4</div><div class='del'>-# endif</div><div class='del'>-# ifndef LOCK_UN</div><div class='del'>-#  define LOCK_UN 8</div><div class='del'>-# endif</div><div class='del'>-</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-#include &lt;winerror.h&gt;</div><div class='del'>-extern unsigned long __attribute__((stdcall)) GetLastError(void);</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-cygwin_flock(int fd, int op)</div><div class='del'>-{</div><div class='del'>-    int old_errno = errno;</div><div class='del'>-    int ret = flock(fd, op);</div><div class='del'>-    if (GetLastError() == ERROR_NOT_LOCKED) {</div><div class='del'>-	ret = 0;</div><div class='del'>-	errno = old_errno;</div><div class='del'>-    }</div><div class='del'>-    return ret;</div><div class='del'>-}</div><div class='del'>-# define flock(fd, op) cygwin_flock(fd, op)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_thread_flock(fd, op, fptr)</div><div class='del'>-    int fd, op;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    if (rb_thread_alone() || (op &amp; LOCK_NB)) {</div><div class='del'>-	int ret;</div><div class='del'>-	TRAP_BEG;</div><div class='del'>-	ret = flock(fd, op);</div><div class='del'>-	TRAP_END;</div><div class='del'>-	return ret;</div><div class='del'>-    }</div><div class='del'>-    op |= LOCK_NB;</div><div class='del'>-    while (flock(fd, op) &lt; 0) {</div><div class='del'>-	switch (errno) {</div><div class='del'>-	  case EAGAIN:</div><div class='del'>-	  case EACCES:</div><div class='del'>-#if defined(EWOULDBLOCK) &amp;&amp; EWOULDBLOCK != EAGAIN</div><div class='del'>-	  case EWOULDBLOCK:</div><div class='del'>-#endif</div><div class='del'>-	    rb_thread_polling();	/* busy wait */</div><div class='del'>-	    rb_io_check_closed(fptr);</div><div class='del'>-	    continue;</div><div class='del'>-	  default:</div><div class='del'>-	    return -1;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='add'>+    if (truncate(path-&gt;ptr, NUM2INT(len)) &lt; 0)</div><div class='add'>+	rb_sys_fail(path-&gt;ptr);</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-# undef flock</div><div class='del'>-#endif</div><div class='del'>-#define flock(fd, op) rb_thread_flock(fd, op, fptr)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     file.flock (locking_constant ) =&gt;  0 or false</div><div class='del'>- *  </div><div class='del'>- *  Locks or unlocks a file according to &lt;i&gt;locking_constant&lt;/i&gt; (a</div><div class='del'>- *  logical &lt;em&gt;or&lt;/em&gt; of the values in the table below).</div><div class='del'>- *  Returns &lt;code&gt;false&lt;/code&gt; if &lt;code&gt;File::LOCK_NB&lt;/code&gt; is</div><div class='del'>- *  specified and the operation would otherwise have blocked. Not</div><div class='del'>- *  available on all platforms.</div><div class='del'>- *     </div><div class='del'>- *  Locking constants (in class File):</div><div class='del'>- *</div><div class='del'>- *     LOCK_EX   | Exclusive lock. Only one process may hold an</div><div class='del'>- *               | exclusive lock for a given file at a time.</div><div class='del'>- *     ----------+------------------------------------------------</div><div class='del'>- *     LOCK_NB   | Don't block when locking. May be combined</div><div class='del'>- *               | with other lock options using logical or.</div><div class='del'>- *     ----------+------------------------------------------------</div><div class='del'>- *     LOCK_SH   | Shared lock. Multiple processes may each hold a</div><div class='del'>- *               | shared lock for a given file at the same time.</div><div class='del'>- *     ----------+------------------------------------------------</div><div class='del'>- *     LOCK_UN   | Unlock.</div><div class='del'>- *</div><div class='del'>- *  Example:</div><div class='del'>- *</div><div class='del'>- *     File.new("testfile").flock(File::LOCK_UN)   #=&gt; 0</div><div class='del'>- *     </div><div class='del'>- */</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_flock(obj, operation)</div><div class='del'>-    VALUE obj;</div><div class='del'>-    VALUE operation;</div><div class='add'>+Ffile_truncate2(obj, len)</div><div class='add'>+    VALUE obj, len;</div><div class='ctx'> {</div><div class='del'>-#ifndef __CHECKER__</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int op;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-    rb_secure(2);</div><div class='del'>-    op = NUM2INT(operation);</div><div class='ctx'>     GetOpenFile(obj, fptr);</div><div class='ctx'> </div><div class='del'>-    if (fptr-&gt;mode &amp; FMODE_WRITABLE) {</div><div class='del'>-	fflush(GetWriteFile(fptr));</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_WRITABLE)) {</div><div class='add'>+	Fail("not opened for writing");</div><div class='ctx'>     }</div><div class='del'>-  retry:</div><div class='del'>-    if (flock(fileno(fptr-&gt;f), op) &lt; 0) {</div><div class='del'>-	switch (errno) {</div><div class='del'>-	  case EAGAIN:</div><div class='del'>-	  case EACCES:</div><div class='del'>-#if defined(EWOULDBLOCK) &amp;&amp; EWOULDBLOCK != EAGAIN</div><div class='del'>-	  case EWOULDBLOCK:</div><div class='del'>-#endif</div><div class='del'>-	      return Qfalse;</div><div class='del'>-	  case EINTR:</div><div class='del'>-#if defined(ERESTART)</div><div class='del'>-	  case ERESTART:</div><div class='del'>-#endif</div><div class='del'>-	    goto retry;</div><div class='del'>-	}</div><div class='add'>+    if (ftruncate(fileno(fptr-&gt;f), NUM2INT(len)) &lt; 0)</div><div class='ctx'> 	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-#undef flock</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-test_check(n, argc, argv)</div><div class='del'>-    int n, argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    n+=1;</div><div class='del'>-    if (n != argc) rb_raise(rb_eArgError, "wrong number of arguments (%d for %d)", argc, n);</div><div class='del'>-    for (i=1; i&lt;n; i++) {</div><div class='del'>-	switch (TYPE(argv[i])) {</div><div class='del'>-	  case T_STRING:</div><div class='del'>-	  default:</div><div class='del'>-	    SafeStringValue(argv[i]);</div><div class='del'>-	    break;</div><div class='del'>-	  case T_FILE:</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'>-#define CHECK(n) test_check((n), argc, argv)</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     test(int_cmd, file1 [, file2] ) =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Uses the integer &lt;i&gt;aCmd&lt;/i&gt; to perform various tests on</div><div class='del'>- *  &lt;i&gt;file1&lt;/i&gt; (first table below) or on &lt;i&gt;file1&lt;/i&gt; and</div><div class='del'>- *  &lt;i&gt;file2&lt;/i&gt; (second table).</div><div class='del'>- *     </div><div class='del'>- *  File tests on a single file:</div><div class='del'>- *</div><div class='del'>- *    Test   Returns   Meaning</div><div class='del'>- *     ?A  | Time    | Last access time for file1</div><div class='del'>- *     ?b  | boolean | True if file1 is a block device</div><div class='del'>- *     ?c  | boolean | True if file1 is a character device</div><div class='del'>- *     ?C  | Time    | Last change time for file1</div><div class='del'>- *     ?d  | boolean | True if file1 exists and is a directory</div><div class='del'>- *     ?e  | boolean | True if file1 exists</div><div class='del'>- *     ?f  | boolean | True if file1 exists and is a regular file</div><div class='del'>- *     ?g  | boolean | True if file1 has the \CF{setgid} bit</div><div class='del'>- *         |         | set (false under NT)</div><div class='del'>- *     ?G  | boolean | True if file1 exists and has a group</div><div class='del'>- *         |         | ownership equal to the caller's group</div><div class='del'>- *     ?k  | boolean | True if file1 exists and has the sticky bit set</div><div class='del'>- *     ?l  | boolean | True if file1 exists and is a symbolic link</div><div class='del'>- *     ?M  | Time    | Last modification time for file1</div><div class='del'>- *     ?o  | boolean | True if file1 exists and is owned by </div><div class='del'>- *         |         | the caller's effective uid</div><div class='del'>- *     ?O  | boolean | True if file1 exists and is owned by</div><div class='del'>- *         |         | the caller's real uid</div><div class='del'>- *     ?p  | boolean | True if file1 exists and is a fifo</div><div class='del'>- *     ?r  | boolean | True if file1 is readable by the effective</div><div class='del'>- *         |         | uid/gid of the caller</div><div class='del'>- *     ?R  | boolean | True if file is readable by the real</div><div class='del'>- *         |         | uid/gid of the caller</div><div class='del'>- *     ?s  | int/nil | If file1 has nonzero size, return the size,</div><div class='del'>- *         |         | otherwise return nil</div><div class='del'>- *     ?S  | boolean | True if file1 exists and is a socket</div><div class='del'>- *     ?u  | boolean | True if file1 has the setuid bit set</div><div class='del'>- *     ?w  | boolean | True if file1 exists and is writable by</div><div class='del'>- *         |         | the effective uid/gid</div><div class='del'>- *     ?W  | boolean | True if file1 exists and is writable by</div><div class='del'>- *         |         | the real uid/gid</div><div class='del'>- *     ?x  | boolean | True if file1 exists and is executable by</div><div class='del'>- *         |         | the effective uid/gid</div><div class='del'>- *     ?X  | boolean | True if file1 exists and is executable by</div><div class='del'>- *         |         | the real uid/gid</div><div class='del'>- *     ?z  | boolean | True if file1 exists and has a zero length</div><div class='del'>- *</div><div class='del'>- * Tests that take two files:</div><div class='del'>- *</div><div class='del'>- *     ?-  | boolean | True if file1 and file2 are identical</div><div class='del'>- *     ?=  | boolean | True if the modification times of file1</div><div class='del'>- *         |         | and file2 are equal</div><div class='del'>- *     ?&lt;  | boolean | True if the modification time of file1</div><div class='del'>- *         |         | is prior to that of file2</div><div class='del'>- *     ?&gt;  | boolean | True if the modification time of file1</div><div class='del'>- *         |         | is after that of file2</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_test(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    int cmd;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) rb_raise(rb_eArgError, "wrong number of arguments");</div><div class='del'>-#if 0 /* 1.7 behavior? */</div><div class='del'>-    if (argc == 1) {</div><div class='del'>-	return RTEST(argv[0]) ? Qtrue : Qfalse;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    cmd = NUM2CHR(argv[0]);</div><div class='del'>-    if (cmd == 0) return Qfalse;</div><div class='del'>-    if (strchr("bcdefgGkloOprRsSuwWxXz", cmd)) {</div><div class='del'>-	CHECK(1);</div><div class='del'>-	switch (cmd) {</div><div class='del'>-	  case 'b':</div><div class='del'>-	    return test_b(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'c':</div><div class='del'>-	    return test_c(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'd':</div><div class='del'>-	    return test_d(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'a':</div><div class='del'>-	  case 'e':</div><div class='del'>-	    return test_e(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'f':</div><div class='del'>-	    return test_f(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'g':</div><div class='del'>-	    return test_sgid(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'G':</div><div class='del'>-	    return test_grpowned(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'k':</div><div class='del'>-	    return test_sticky(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'l':</div><div class='del'>-	    return test_l(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'o':</div><div class='del'>-	    return test_owned(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'O':</div><div class='del'>-	    return test_rowned(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'p':</div><div class='del'>-	    return test_p(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'r':</div><div class='del'>-	    return test_r(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'R':</div><div class='del'>-	    return test_R(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 's':</div><div class='del'>-	    return test_s(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'S':</div><div class='del'>-	    return test_S(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'u':</div><div class='del'>-	    return test_suid(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'w':</div><div class='del'>-	    return test_w(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'W':</div><div class='del'>-	    return test_W(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'x':</div><div class='del'>-	    return test_x(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'X':</div><div class='del'>-	    return test_X(0, argv[1]);</div><div class='del'>-</div><div class='del'>-	  case 'z':</div><div class='del'>-	    return test_z(0, argv[1]);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (strchr("MAC", cmd)) {</div><div class='del'>-	struct stat st;</div><div class='del'>-</div><div class='del'>-	CHECK(1);</div><div class='del'>-	if (rb_stat(argv[1], &amp;st) == -1) {</div><div class='del'>-	    rb_sys_fail(RSTRING(argv[1])-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	switch (cmd) {</div><div class='del'>-	  case 'A':</div><div class='del'>-	    return rb_time_new(st.st_atime, 0);</div><div class='del'>-	  case 'M':</div><div class='del'>-	    return rb_time_new(st.st_mtime, 0);</div><div class='del'>-	  case 'C':</div><div class='del'>-	    return rb_time_new(st.st_ctime, 0);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (cmd == '-') {</div><div class='del'>-	CHECK(2);</div><div class='del'>-	return test_identical(0, argv[1], argv[2]);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (strchr("=&lt;&gt;", cmd)) {</div><div class='del'>-	struct stat st1, st2;</div><div class='del'>-</div><div class='del'>-	CHECK(2);</div><div class='del'>-	if (rb_stat(argv[1], &amp;st1) &lt; 0) return Qfalse;</div><div class='del'>-	if (rb_stat(argv[2], &amp;st2) &lt; 0) return Qfalse;</div><div class='del'>-</div><div class='del'>-	switch (cmd) {</div><div class='del'>-	  case '=':</div><div class='del'>-	    if (st1.st_mtime == st2.st_mtime) return Qtrue;</div><div class='del'>-	    return Qfalse;</div><div class='del'>-</div><div class='del'>-	  case '&gt;':</div><div class='del'>-	    if (st1.st_mtime &gt; st2.st_mtime) return Qtrue;</div><div class='del'>-	    return Qfalse;</div><div class='del'>-</div><div class='del'>-	  case '&lt;':</div><div class='del'>-	    if (st1.st_mtime &lt; st2.st_mtime) return Qtrue;</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    /* unknown command */</div><div class='del'>-    rb_raise(rb_eArgError, "unknown command ?%c", cmd);</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  Document-class: File::Stat</div><div class='del'>- *</div><div class='del'>- *  Objects of class &lt;code&gt;File::Stat&lt;/code&gt; encapsulate common status</div><div class='del'>- *  information for &lt;code&gt;File&lt;/code&gt; objects. The information is</div><div class='del'>- *  recorded at the moment the &lt;code&gt;File::Stat&lt;/code&gt; object is</div><div class='del'>- *  created; changes made to the file after that point will not be</div><div class='del'>- *  reflected. &lt;code&gt;File::Stat&lt;/code&gt; objects are returned by</div><div class='del'>- *  &lt;code&gt;IO#stat&lt;/code&gt;, &lt;code&gt;File::stat&lt;/code&gt;,</div><div class='del'>- *  &lt;code&gt;File#lstat&lt;/code&gt;, and &lt;code&gt;File::lstat&lt;/code&gt;. Many of these</div><div class='del'>- *  methods return platform-specific values, and not all values are</div><div class='del'>- *  meaningful on all systems. See also &lt;code&gt;Kernel#test&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE rb_stat_s_alloc _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_s_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    return stat_new_0(klass, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *</div><div class='del'>- *   File::Stat.new(file_name)  =&gt; stat</div><div class='del'>- *</div><div class='del'>- * Create a File::Stat object for the given file name (raising an</div><div class='del'>- * exception if the file doesn't exist).</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_init(obj, fname)</div><div class='del'>-    VALUE obj, fname;</div><div class='del'>-{</div><div class='del'>-    struct stat st, *nst;</div><div class='del'>-</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-</div><div class='del'>-    if (stat(StringValueCStr(fname), &amp;st) == -1) {</div><div class='del'>-	rb_sys_fail(RSTRING(fname)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-    if (DATA_PTR(obj)) {</div><div class='del'>-	free(DATA_PTR(obj));</div><div class='del'>-	DATA_PTR(obj) = NULL;</div><div class='del'>-    }</div><div class='del'>-    nst = ALLOC(struct stat);</div><div class='del'>-    *nst = st;</div><div class='del'>-    DATA_PTR(obj) = nst;</div><div class='del'>-</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_init_copy(copy, orig)</div><div class='del'>-    VALUE copy, orig;</div><div class='del'>-{</div><div class='del'>-    struct stat *nst;</div><div class='del'>-</div><div class='del'>-    if (copy == orig) return orig;</div><div class='del'>-    rb_check_frozen(copy);</div><div class='del'>-    /* need better argument type check */</div><div class='del'>-    if (!rb_obj_is_instance_of(orig, rb_obj_class(copy))) {</div><div class='del'>-	rb_raise(rb_eTypeError, "wrong argument class");</div><div class='del'>-    }</div><div class='del'>-    if (DATA_PTR(copy)) {</div><div class='del'>-	free(DATA_PTR(copy));</div><div class='del'>-	DATA_PTR(copy) = 0;</div><div class='del'>-    }</div><div class='del'>-    if (DATA_PTR(orig)) {</div><div class='del'>-	nst = ALLOC(struct stat);</div><div class='del'>-	*nst = *(struct stat*)DATA_PTR(orig);</div><div class='del'>-	DATA_PTR(copy) = nst;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return copy;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.ftype   =&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Identifies the type of &lt;i&gt;stat&lt;/i&gt;. The return string is one of:</div><div class='del'>- *  ``&lt;code&gt;file&lt;/code&gt;'', ``&lt;code&gt;directory&lt;/code&gt;'',</div><div class='del'>- *  ``&lt;code&gt;characterSpecial&lt;/code&gt;'', ``&lt;code&gt;blockSpecial&lt;/code&gt;'',</div><div class='del'>- *  ``&lt;code&gt;fifo&lt;/code&gt;'', ``&lt;code&gt;link&lt;/code&gt;'',</div><div class='del'>- *  ``&lt;code&gt;socket&lt;/code&gt;'', or ``&lt;code&gt;unknown&lt;/code&gt;''.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/dev/tty").ftype   #=&gt; "characterSpecial"</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_ftype(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_file_ftype(get_stat(obj));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.directory?   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is a directory,</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; otherwise.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").directory?   #=&gt; false</div><div class='del'>- *     File.stat(".").directory?          #=&gt; true</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_d(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (S_ISDIR(get_stat(obj)-&gt;st_mode)) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.pipe?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if the operating system supports pipes and</div><div class='del'>- *  &lt;i&gt;stat&lt;/i&gt; is a pipe; &lt;code&gt;false&lt;/code&gt; otherwise.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_p(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef S_IFIFO</div><div class='del'>-    if (S_ISFIFO(get_stat(obj)-&gt;st_mode)) return Qtrue;</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.symlink?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is a symbolic link,</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; if it isn't or if the operating system doesn't</div><div class='del'>- *  support this feature. As &lt;code&gt;File::stat&lt;/code&gt; automatically</div><div class='del'>- *  follows symbolic links, &lt;code&gt;symlink?&lt;/code&gt; will always be</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; for an object returned by</div><div class='del'>- *  &lt;code&gt;File::stat&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.symlink("testfile", "alink")   #=&gt; 0</div><div class='del'>- *     File.stat("alink").symlink?         #=&gt; false</div><div class='del'>- *     File.lstat("alink").symlink?        #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_l(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef S_ISLNK</div><div class='del'>-    if (S_ISLNK(get_stat(obj)-&gt;st_mode)) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.socket?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is a socket,</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; if it isn't or if the operating system doesn't</div><div class='del'>- *  support this feature.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").socket?   #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_S(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef S_ISSOCK</div><div class='del'>-    if (S_ISSOCK(get_stat(obj)-&gt;st_mode)) return Qtrue;</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.blockdev?   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if the file is a block device,</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; if it isn't or if the operating system doesn't</div><div class='del'>- *  support this feature.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").blockdev?    #=&gt; false</div><div class='del'>- *     File.stat("/dev/hda1").blockdev?   #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_b(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef S_ISBLK</div><div class='del'>-    if (S_ISBLK(get_stat(obj)-&gt;st_mode)) return Qtrue;</div><div class='del'>-</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.chardev?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if the file is a character device,</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; if it isn't or if the operating system doesn't</div><div class='del'>- *  support this feature.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/dev/tty").chardev?   #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_c(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (S_ISCHR(get_stat(obj)-&gt;st_mode)) return Qtrue;</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'>- *  call-seq:</div><div class='del'>- *     stat.owned?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if the effective user id of the process is</div><div class='del'>- *  the same as the owner of &lt;i&gt;stat&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").owned?      #=&gt; true</div><div class='del'>- *     File.stat("/etc/passwd").owned?   #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_owned(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (get_stat(obj)-&gt;st_uid == geteuid()) 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'>-rb_stat_rowned(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (get_stat(obj)-&gt;st_uid == getuid()) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.grpowned?   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns true if the effective group id of the process is the same as</div><div class='del'>- *  the group id of &lt;i&gt;stat&lt;/i&gt;. On Windows NT, returns &lt;code&gt;false&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").grpowned?      #=&gt; true</div><div class='del'>- *     File.stat("/etc/passwd").grpowned?   #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_grpowned(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifndef _WIN32</div><div class='del'>-    if (group_member(get_stat(obj)-&gt;st_gid)) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.readable?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is readable by the</div><div class='del'>- *  effective user id of this process.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").readable?   #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_r(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct stat *st = get_stat(obj);</div><div class='del'>-</div><div class='del'>-#ifdef USE_GETEUID</div><div class='del'>-    if (geteuid() == 0) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IRUSR</div><div class='del'>-    if (rb_stat_owned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IRUSR ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IRGRP</div><div class='del'>-    if (rb_stat_grpowned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IRGRP ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IROTH</div><div class='del'>-    if (!(st-&gt;st_mode &amp; S_IROTH)) return Qfalse;</div><div class='del'>-#endif</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</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'>- *     stat.readable_real? -&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is readable by the real</div><div class='del'>- *  user id of this process.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").readable_real?   #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_R(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct stat *st = get_stat(obj);</div><div class='del'>-</div><div class='del'>-#ifdef USE_GETEUID</div><div class='del'>-    if (getuid() == 0) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IRUSR</div><div class='del'>-    if (rb_stat_rowned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IRUSR ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IRGRP</div><div class='del'>-    if (group_member(get_stat(obj)-&gt;st_gid))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IRGRP ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IROTH</div><div class='del'>-    if (!(st-&gt;st_mode &amp; S_IROTH)) return Qfalse;</div><div class='del'>-#endif</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'>- *     stat.writable? -&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is writable by the</div><div class='del'>- *  effective user id of this process.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").writable?   #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_w(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct stat *st = get_stat(obj);</div><div class='del'>-</div><div class='del'>-#ifdef USE_GETEUID</div><div class='del'>-    if (geteuid() == 0) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IWUSR</div><div class='del'>-    if (rb_stat_owned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IWUSR ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IWGRP</div><div class='del'>-    if (rb_stat_grpowned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IWGRP ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IWOTH</div><div class='del'>-    if (!(st-&gt;st_mode &amp; S_IWOTH)) return Qfalse;</div><div class='del'>-#endif</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'>- *     stat.writable_real? -&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is writable by the real</div><div class='del'>- *  user id of this process.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").writable_real?   #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_W(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct stat *st = get_stat(obj);</div><div class='del'>-</div><div class='del'>-#ifdef USE_GETEUID</div><div class='del'>-    if (getuid() == 0) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IWUSR</div><div class='del'>-    if (rb_stat_rowned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IWUSR ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IWGRP</div><div class='del'>-    if (group_member(get_stat(obj)-&gt;st_gid))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IWGRP ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IWOTH</div><div class='del'>-    if (!(st-&gt;st_mode &amp; S_IWOTH)) return Qfalse;</div><div class='del'>-#endif</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'>- *     stat.executable?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is executable or if the</div><div class='del'>- *  operating system doesn't distinguish executable files from</div><div class='del'>- *  nonexecutable files. The tests are made using the effective owner of</div><div class='del'>- *  the process.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").executable?   #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_x(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct stat *st = get_stat(obj);</div><div class='del'>-</div><div class='del'>-#ifdef USE_GETEUID</div><div class='del'>-    if (geteuid() == 0) {</div><div class='del'>-	return st-&gt;st_mode &amp; S_IXUGO ? Qtrue : Qfalse;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IXUSR</div><div class='del'>-    if (rb_stat_owned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IXUSR ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IXGRP</div><div class='del'>-    if (rb_stat_grpowned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IXGRP ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IXOTH</div><div class='del'>-    if (!(st-&gt;st_mode &amp; S_IXOTH)) return Qfalse;</div><div class='del'>-#endif</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'>- *     stat.executable_real?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Same as &lt;code&gt;executable?&lt;/code&gt;, but tests using the real owner of</div><div class='del'>- *  the process.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_X(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    struct stat *st = get_stat(obj);</div><div class='del'>-</div><div class='del'>-#ifdef USE_GETEUID</div><div class='del'>-    if (getuid() == 0) {</div><div class='del'>-	return st-&gt;st_mode &amp; S_IXUGO ? Qtrue : Qfalse;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IXUSR</div><div class='del'>-    if (rb_stat_rowned(obj))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IXUSR ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IXGRP</div><div class='del'>-    if (group_member(get_stat(obj)-&gt;st_gid))</div><div class='del'>-	return st-&gt;st_mode &amp; S_IXGRP ? Qtrue : Qfalse;</div><div class='del'>-#endif</div><div class='del'>-#ifdef S_IXOTH</div><div class='del'>-    if (!(st-&gt;st_mode &amp; S_IXOTH)) return Qfalse;</div><div class='del'>-#endif</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'>- *     stat.file?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is a regular file (not</div><div class='del'>- *  a device file, pipe, socket, etc.).</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").file?   #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_f(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (S_ISREG(get_stat(obj)-&gt;st_mode)) return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.zero?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; is a zero-length file;</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; otherwise.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").zero?   #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_z(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (get_stat(obj)-&gt;st_size == 0) 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'>- *     state.size    =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Returns the size of &lt;i&gt;stat&lt;/i&gt; in bytes.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").size   #=&gt; 66</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_s(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    off_t size = get_stat(obj)-&gt;st_size;</div><div class='del'>-</div><div class='del'>-    if (size == 0) return Qnil;</div><div class='del'>-    return OFFT2NUM(size);</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.setuid?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; has the set-user-id</div><div class='del'>- *  permission bit set, &lt;code&gt;false&lt;/code&gt; if it doesn't or if the</div><div class='del'>- *  operating system doesn't support this feature.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/bin/su").setuid?   #=&gt; true</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_stat_suid(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef S_ISUID</div><div class='del'>-    if (get_stat(obj)-&gt;st_mode &amp; S_ISUID) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.setgid?   =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; has the set-group-id</div><div class='del'>- *  permission bit set, &lt;code&gt;false&lt;/code&gt; if it doesn't or if the</div><div class='del'>- *  operating system doesn't support this feature.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("/usr/sbin/lpc").setgid?   #=&gt; true</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_sgid(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef S_ISGID</div><div class='del'>-    if (get_stat(obj)-&gt;st_mode &amp; S_ISGID) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     stat.sticky?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;stat&lt;/i&gt; has its sticky bit set,</div><div class='del'>- *  &lt;code&gt;false&lt;/code&gt; if it doesn't or if the operating system doesn't</div><div class='del'>- *  support this feature.</div><div class='del'>- *     </div><div class='del'>- *     File.stat("testfile").sticky?   #=&gt; false</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_stat_sticky(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-#ifdef S_ISVTX</div><div class='del'>-    if (get_stat(obj)-&gt;st_mode &amp; S_ISVTX) return Qtrue;</div><div class='del'>-#endif</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE rb_mFConst;</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_file_const(name, value)</div><div class='del'>-    const char *name;</div><div class='del'>-    VALUE value;</div><div class='add'>+Ffile_fcntl(obj, req, arg)</div><div class='add'>+    VALUE obj, req;</div><div class='add'>+    struct RString *arg;</div><div class='ctx'> {</div><div class='del'>-    rb_define_const(rb_mFConst, name, value);</div><div class='add'>+    io_ctl(obj, req, arg, 0);</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-is_absolute_path(path)</div><div class='del'>-    const char *path;</div><div class='del'>-{</div><div class='del'>-#ifdef DOSISH_DRIVE_LETTER</div><div class='del'>-    if (has_drive_letter(path) &amp;&amp; isdirsep(path[2])) return 1;</div><div class='del'>-#endif</div><div class='del'>-#ifdef DOSISH_UNC</div><div class='del'>-    if (isdirsep(path[0]) &amp;&amp; isdirsep(path[1])) return 1;</div><div class='del'>-#endif</div><div class='del'>-#ifndef DOSISH</div><div class='del'>-    if (path[0] == '/') return 1;</div><div class='del'>-#endif</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifndef ENABLE_PATH_CHECK</div><div class='del'>-# if defined DOSISH || defined __CYGWIN__</div><div class='del'>-#   define ENABLE_PATH_CHECK 0</div><div class='del'>-# else</div><div class='del'>-#   define ENABLE_PATH_CHECK 1</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if ENABLE_PATH_CHECK</div><div class='del'>-static int</div><div class='del'>-path_check_0(fpath, execpath)</div><div class='del'>-     VALUE fpath;</div><div class='del'>-     int execpath;</div><div class='del'>-{</div><div class='del'>-    struct stat st;</div><div class='del'>-    const char *p0 = StringValueCStr(fpath);</div><div class='del'>-    char *p = 0, *s;</div><div class='del'>-</div><div class='del'>-    if (!is_absolute_path(p0)) {</div><div class='del'>-	char *buf = my_getcwd();</div><div class='del'>-	VALUE newpath;</div><div class='del'>-</div><div class='del'>-	newpath = rb_str_new2(buf);</div><div class='del'>-	free(buf);</div><div class='del'>-</div><div class='del'>-	rb_str_cat2(newpath, "/");</div><div class='del'>-	rb_str_cat2(newpath, p0);</div><div class='del'>-	p0 = RSTRING(fpath = newpath)-&gt;ptr;</div><div class='del'>-    }</div><div class='del'>-    for (;;) {</div><div class='del'>-#ifndef S_IWOTH</div><div class='del'>-# define S_IWOTH 002</div><div class='del'>-#endif</div><div class='del'>-	if (stat(p0, &amp;st) == 0 &amp;&amp; S_ISDIR(st.st_mode) &amp;&amp; (st.st_mode &amp; S_IWOTH)</div><div class='del'>-#ifdef S_ISVTX</div><div class='del'>-	    &amp;&amp; !(p &amp;&amp; execpath &amp;&amp; (st.st_mode &amp; S_ISVTX))</div><div class='del'>-#endif</div><div class='del'>-	    ) {</div><div class='del'>-	    rb_warn("Insecure world writable dir %s in %sPATH, mode 0%o",</div><div class='del'>-		    p0, (execpath ? "" : "LOAD_"), st.st_mode);</div><div class='del'>-	    if (p) *p = '/';</div><div class='del'>-	    return 0;</div><div class='del'>-	}</div><div class='del'>-	s = strrdirsep(p0);</div><div class='del'>-	if (p) *p = '/';</div><div class='del'>-	if (!s || s == p0) return 1;</div><div class='del'>-	p = s;</div><div class='del'>-	*p = '\0';</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-fpath_check(path)</div><div class='del'>-    const char *path;</div><div class='del'>-{</div><div class='del'>-#if ENABLE_PATH_CHECK</div><div class='del'>-    return path_check_0(rb_str_new2(path), Qfalse);</div><div class='del'>-#else</div><div class='del'>-    return 1;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_path_check(path)</div><div class='del'>-    const char *path;</div><div class='del'>-{</div><div class='del'>-#if ENABLE_PATH_CHECK</div><div class='del'>-    const char *p0, *p, *pend;</div><div class='del'>-    const char sep = PATH_SEP_CHAR;</div><div class='del'>-</div><div class='del'>-    if (!path) return 1;</div><div class='del'>-</div><div class='del'>-    pend = path + strlen(path);</div><div class='del'>-    p0 = path;</div><div class='del'>-    p = strchr(path, sep);</div><div class='del'>-    if (!p) p = pend;</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	if (!path_check_0(rb_str_new(p0, p - p0), Qtrue)) {</div><div class='del'>-	    return 0;		/* not safe */</div><div class='del'>-	}</div><div class='del'>-	p0 = p + 1;</div><div class='del'>-	if (p0 &gt; pend) break;</div><div class='del'>-	p = strchr(p0, sep);</div><div class='del'>-	if (!p) p = pend;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if defined(__MACOS__) || defined(riscos)</div><div class='del'>-static int</div><div class='del'>-is_macos_native_path(path)</div><div class='del'>-    const char *path;</div><div class='del'>-{</div><div class='del'>-    if (strchr(path, ':')) return 1;</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-file_load_ok(file)</div><div class='del'>-    const char *file;</div><div class='del'>-{</div><div class='del'>-    FILE *f;</div><div class='del'>-</div><div class='del'>-    if (!file) return 0;</div><div class='del'>-    f = fopen(file, "r");</div><div class='del'>-    if (f == NULL) return 0;</div><div class='del'>-    fclose(f);</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-extern VALUE rb_load_path;</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_find_file_ext(filep, ext)</div><div class='del'>-    VALUE *filep;</div><div class='del'>-    const char * const *ext;</div><div class='del'>-{</div><div class='del'>-    const char *path, *found;</div><div class='del'>-    const char *f = RSTRING(*filep)-&gt;ptr;</div><div class='del'>-    VALUE fname;</div><div class='del'>-    long i, j;</div><div class='del'>-</div><div class='del'>-    if (f[0] == '~') {</div><div class='del'>-	fname = rb_file_expand_path(*filep, Qnil);</div><div class='del'>-	if (rb_safe_level() &gt;= 2 &amp;&amp; OBJ_TAINTED(fname)) {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "loading from unsafe file %s", f);</div><div class='del'>-	}</div><div class='del'>-	OBJ_FREEZE(fname);</div><div class='del'>-	f = StringValueCStr(fname);</div><div class='del'>-	*filep = fname;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (is_absolute_path(f)) {</div><div class='del'>-	for (i=0; ext[i]; i++) {</div><div class='del'>-	    fname = rb_str_dup(*filep);</div><div class='del'>-	    rb_str_cat2(fname, ext[i]);</div><div class='del'>-	    OBJ_FREEZE(fname);</div><div class='del'>-	    if (file_load_ok(StringValueCStr(fname))) {</div><div class='del'>-		*filep = fname;</div><div class='del'>-		return i+1;</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'>-    if (!rb_load_path) return 0;</div><div class='del'>-</div><div class='del'>-    Check_Type(rb_load_path, T_ARRAY);</div><div class='del'>-    for (i=0;i&lt;RARRAY(rb_load_path)-&gt;len;i++) {</div><div class='del'>-	VALUE str = RARRAY(rb_load_path)-&gt;ptr[i];</div><div class='del'>-</div><div class='del'>-	SafeStringValue(str);</div><div class='del'>-	if (RSTRING(str)-&gt;len == 0) continue;</div><div class='del'>-	path = RSTRING(str)-&gt;ptr;</div><div class='del'>-	for (j=0; ext[j]; j++) {</div><div class='del'>-	    fname = rb_str_dup(*filep);</div><div class='del'>-	    rb_str_cat2(fname, ext[j]);</div><div class='del'>-	    OBJ_FREEZE(fname);</div><div class='del'>-	    found = dln_find_file(StringValueCStr(fname), path);</div><div class='del'>-	    if (found &amp;&amp; file_load_ok(found)) {</div><div class='del'>-		*filep = fname;</div><div class='del'>-		return j+1;</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'>-VALUE</div><div class='del'>-rb_find_file(path)</div><div class='del'>-    VALUE path;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp;</div><div class='del'>-    const char *f = StringValueCStr(path);</div><div class='del'>-    const char *lpath;</div><div class='del'>-</div><div class='del'>-    if (f[0] == '~') {</div><div class='del'>-	path = rb_file_expand_path(path, Qnil);</div><div class='del'>-	if (rb_safe_level() &gt;= 1 &amp;&amp; OBJ_TAINTED(path)) {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "loading from unsafe path %s", f);</div><div class='del'>-	}</div><div class='del'>-	OBJ_FREEZE(path);</div><div class='del'>-	f = StringValueCStr(path);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-#if defined(__MACOS__) || defined(riscos)</div><div class='del'>-    if (is_macos_native_path(f)) {</div><div class='del'>-	if (rb_safe_level() &gt;= 1 &amp;&amp; !fpath_check(f)) {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "loading from unsafe file %s", f);</div><div class='del'>-	}</div><div class='del'>-	if (file_load_ok(f)) return path;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (is_absolute_path(f)) {</div><div class='del'>-	if (rb_safe_level() &gt;= 1 &amp;&amp; !fpath_check(f)) {</div><div class='del'>-	    rb_raise(rb_eSecurityError, "loading from unsafe file %s", f);</div><div class='del'>-	}</div><div class='del'>-	if (file_load_ok(f)) return path;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "loading from non-absolute path %s", f);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (rb_load_path) {</div><div class='del'>-	long i;</div><div class='del'>-</div><div class='del'>-	Check_Type(rb_load_path, T_ARRAY);</div><div class='del'>-	tmp = rb_ary_new();</div><div class='del'>-	for (i=0;i&lt;RARRAY(rb_load_path)-&gt;len;i++) {</div><div class='del'>-	    VALUE str = RARRAY(rb_load_path)-&gt;ptr[i];</div><div class='del'>-	    SafeStringValue(str);</div><div class='del'>-	    if (RSTRING(str)-&gt;len &gt; 0) {</div><div class='del'>-		rb_ary_push(tmp, str);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	tmp = rb_ary_join(tmp, rb_str_new2(PATH_SEP));</div><div class='del'>-	if (RSTRING(tmp)-&gt;len == 0) {</div><div class='del'>-	    lpath = 0;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    lpath = RSTRING(tmp)-&gt;ptr;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	lpath = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!lpath) {</div><div class='del'>-	return 0;		/* no path, no load */</div><div class='del'>-    }</div><div class='del'>-    if (!(f = dln_find_file(f, lpath))) {</div><div class='del'>-	return 0;</div><div class='del'>-    }</div><div class='del'>-    if (rb_safe_level() &gt;= 1 &amp;&amp; !fpath_check(f)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "loading from unsafe file %s", f);</div><div class='del'>-    }</div><div class='del'>-    if (file_load_ok(f)) {</div><div class='del'>-	tmp = rb_str_new2(f);</div><div class='del'>-	OBJ_FREEZE(tmp);</div><div class='del'>-	return tmp;</div><div class='del'>-    }</div><div class='del'>-    return 0;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-define_filetest_function(name, func, argc)</div><div class='del'>-    const char *name;</div><div class='del'>-    VALUE (*func)();</div><div class='del'>-    int argc;</div><div class='del'>-{</div><div class='del'>-    rb_define_module_function(rb_mFileTest, name, func, argc);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, name, func, argc);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  A &lt;code&gt;File&lt;/code&gt; is an abstraction of any file object accessible</div><div class='del'>- *  by the program and is closely associated with class &lt;code&gt;IO&lt;/code&gt;</div><div class='del'>- *  &lt;code&gt;File&lt;/code&gt; includes the methods of module</div><div class='del'>- *  &lt;code&gt;FileTest&lt;/code&gt; as class methods, allowing you to write (for</div><div class='del'>- *  example) &lt;code&gt;File.exist?("foo")&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *  In the description of File methods,</div><div class='del'>- *  &lt;em&gt;permission bits&lt;/em&gt; are a platform-specific</div><div class='del'>- *  set of bits that indicate permissions of a file. On Unix-based</div><div class='del'>- *  systems, permissions are viewed as a set of three octets, for the</div><div class='del'>- *  owner, the group, and the rest of the world. For each of these</div><div class='del'>- *  entities, permissions may be set to read, write, or execute the</div><div class='del'>- *  file:</div><div class='del'>- *     </div><div class='del'>- *  The permission bits &lt;code&gt;0644&lt;/code&gt; (in octal) would thus be</div><div class='del'>- *  interpreted as read/write for owner, and read-only for group and</div><div class='del'>- *  other. Higher-order bits may also be used to indicate the type of</div><div class='del'>- *  file (plain, directory, pipe, socket, and so on) and various other</div><div class='del'>- *  special features. If the permissions are for a directory, the</div><div class='del'>- *  meaning of the execute bit changes; when set the directory can be</div><div class='del'>- *  searched.</div><div class='del'>- *     </div><div class='del'>- *  On non-Posix operating systems, there may be only the ability to</div><div class='del'>- *  make a file read-only or read-write. In this case, the remaining</div><div class='del'>- *  permission bits will be synthesized to resemble typical values. For</div><div class='del'>- *  instance, on Windows NT the default permission bits are</div><div class='del'>- *  &lt;code&gt;0644&lt;/code&gt;, which means read/write for owner, read-only for</div><div class='del'>- *  all others. The only change that can be made is to make the file</div><div class='del'>- *  read-only, which is reported as &lt;code&gt;0444&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-void</div><div class='ctx'> Init_File()</div><div class='ctx'> {</div><div class='del'>-    rb_mFileTest = rb_define_module("FileTest");</div><div class='del'>-    rb_cFile = rb_define_class("File", rb_cIO);</div><div class='del'>-</div><div class='del'>-    define_filetest_function("directory?", test_d, 1);</div><div class='del'>-    define_filetest_function("exist?", test_e, 1);</div><div class='del'>-    define_filetest_function("exists?", test_e, 1); /* temporary */</div><div class='del'>-    define_filetest_function("readable?", test_r, 1);</div><div class='del'>-    define_filetest_function("readable_real?", test_R, 1);</div><div class='del'>-    define_filetest_function("writable?", test_w, 1);</div><div class='del'>-    define_filetest_function("writable_real?", test_W, 1);</div><div class='del'>-    define_filetest_function("executable?", test_x, 1);</div><div class='del'>-    define_filetest_function("executable_real?", test_X, 1);</div><div class='del'>-    define_filetest_function("file?", test_f, 1);</div><div class='del'>-    define_filetest_function("zero?", test_z, 1);</div><div class='del'>-    define_filetest_function("size?", test_s, 1);</div><div class='del'>-    define_filetest_function("size", rb_file_s_size, 1);</div><div class='del'>-    define_filetest_function("owned?", test_owned, 1);</div><div class='del'>-    define_filetest_function("grpowned?", test_grpowned, 1);</div><div class='del'>-</div><div class='del'>-    define_filetest_function("pipe?", test_p, 1);</div><div class='del'>-    define_filetest_function("symlink?", test_l, 1);</div><div class='del'>-    define_filetest_function("socket?", test_S, 1);</div><div class='del'>-</div><div class='del'>-    define_filetest_function("blockdev?", test_b, 1);</div><div class='del'>-    define_filetest_function("chardev?", test_c, 1);</div><div class='del'>-</div><div class='del'>-    define_filetest_function("setuid?", test_suid, 1);</div><div class='del'>-    define_filetest_function("setgid?", test_sgid, 1);</div><div class='del'>-    define_filetest_function("sticky?", test_sticky, 1);</div><div class='del'>-</div><div class='del'>-    define_filetest_function("identical?", test_identical, 2);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "stat",  rb_file_s_stat, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "lstat", rb_file_s_lstat, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "ftype", rb_file_s_ftype, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "atime", rb_file_s_atime, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "mtime", rb_file_s_mtime, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "ctime", rb_file_s_ctime, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "utime", rb_file_s_utime, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "chmod", rb_file_s_chmod, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "chown", rb_file_s_chown, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "lchmod", rb_file_s_lchmod, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "lchown", rb_file_s_lchown, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "link", rb_file_s_link, 2);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "symlink", rb_file_s_symlink, 2);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "readlink", rb_file_s_readlink, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "unlink", rb_file_s_unlink, -2);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "delete", rb_file_s_unlink, -2);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "rename", rb_file_s_rename, 2);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "umask", rb_file_s_umask, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "truncate", rb_file_s_truncate, 2);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "expand_path", rb_file_s_expand_path, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "basename", rb_file_s_basename, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "dirname", rb_file_s_dirname, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "extname", rb_file_s_extname, 1);</div><div class='del'>-</div><div class='del'>-    separator = rb_obj_freeze(rb_str_new2("/"));</div><div class='del'>-    rb_define_const(rb_cFile, "Separator", separator);</div><div class='del'>-    rb_define_const(rb_cFile, "SEPARATOR", separator);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "split",  rb_file_s_split, 1);</div><div class='del'>-    rb_define_singleton_method(rb_cFile, "join",   rb_file_s_join, -2);</div><div class='del'>-</div><div class='del'>-#ifdef DOSISH</div><div class='del'>-    rb_define_const(rb_cFile, "ALT_SEPARATOR", rb_obj_freeze(rb_str_new2("\\")));</div><div class='del'>-#else</div><div class='del'>-    rb_define_const(rb_cFile, "ALT_SEPARATOR", Qnil);</div><div class='del'>-#endif</div><div class='del'>-    rb_define_const(rb_cFile, "PATH_SEPARATOR", rb_obj_freeze(rb_str_new2(PATH_SEP)));</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "stat",  rb_io_stat, 0); /* this is IO's method */</div><div class='del'>-    rb_define_method(rb_cFile, "lstat",  rb_file_lstat, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cFile, "atime", rb_file_atime, 0);</div><div class='del'>-    rb_define_method(rb_cFile, "mtime", rb_file_mtime, 0);</div><div class='del'>-    rb_define_method(rb_cFile, "ctime", rb_file_ctime, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cFile, "chmod", rb_file_chmod, 1);</div><div class='del'>-    rb_define_method(rb_cFile, "chown", rb_file_chown, 2);</div><div class='del'>-    rb_define_method(rb_cFile, "truncate", rb_file_truncate, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cFile, "flock", rb_file_flock, 1);</div><div class='del'>-</div><div class='del'>-    rb_mFConst = rb_define_module_under(rb_cFile, "Constants");</div><div class='del'>-    rb_include_module(rb_cIO, rb_mFConst);</div><div class='del'>-    rb_file_const("LOCK_SH", INT2FIX(LOCK_SH));</div><div class='del'>-    rb_file_const("LOCK_EX", INT2FIX(LOCK_EX));</div><div class='del'>-    rb_file_const("LOCK_UN", INT2FIX(LOCK_UN));</div><div class='del'>-    rb_file_const("LOCK_NB", INT2FIX(LOCK_NB));</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cFile, "path",  rb_file_path, 0);</div><div class='del'>-    rb_define_global_function("test", rb_f_test, -1);</div><div class='del'>-</div><div class='del'>-    rb_cStat = rb_define_class_under(rb_cFile, "Stat", rb_cObject);</div><div class='del'>-    rb_define_alloc_func(rb_cStat,  rb_stat_s_alloc);</div><div class='del'>-    rb_define_method(rb_cStat, "initialize", rb_stat_init, 1);</div><div class='del'>-    rb_define_method(rb_cStat, "initialize_copy", rb_stat_init_copy, 1);</div><div class='del'>-</div><div class='del'>-    rb_include_module(rb_cStat, rb_mComparable);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cStat, "&lt;=&gt;", rb_stat_cmp, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cStat, "dev", rb_stat_dev, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "dev_major", rb_stat_dev_major, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "dev_minor", rb_stat_dev_minor, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "ino", rb_stat_ino, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "mode", rb_stat_mode, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "nlink", rb_stat_nlink, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "uid", rb_stat_uid, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "gid", rb_stat_gid, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "rdev", rb_stat_rdev, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "rdev_major", rb_stat_rdev_major, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "rdev_minor", rb_stat_rdev_minor, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "size", rb_stat_size, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "blksize", rb_stat_blksize, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "blocks", rb_stat_blocks, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "atime", rb_stat_atime, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "mtime", rb_stat_mtime, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "ctime", rb_stat_ctime, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cStat, "inspect", rb_stat_inspect, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cStat, "ftype", rb_stat_ftype, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cStat, "directory?",  rb_stat_d, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "readable?",  rb_stat_r, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "readable_real?",  rb_stat_R, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "writable?",  rb_stat_w, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "writable_real?",  rb_stat_W, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "executable?",  rb_stat_x, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "executable_real?",  rb_stat_X, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "file?",  rb_stat_f, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "zero?",  rb_stat_z, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "size?",  rb_stat_s, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "owned?",  rb_stat_owned, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "grpowned?",  rb_stat_grpowned, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cStat, "pipe?",  rb_stat_p, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "symlink?",  rb_stat_l, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "socket?",  rb_stat_S, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cStat, "blockdev?",  rb_stat_b, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "chardev?",  rb_stat_c, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cStat, "setuid?",  rb_stat_suid, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "setgid?",  rb_stat_sgid, 0);</div><div class='del'>-    rb_define_method(rb_cStat, "sticky?",  rb_stat_sticky, 0);</div><div class='add'>+    C_File = rb_define_class("File", C_IO);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "stat",  Ffile_stat, 1);</div><div class='add'>+    rb_define_single_method(C_File, "lstat",  Ffile_lstat, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "d",  Ffile_d, 1);</div><div class='add'>+    rb_define_single_method(C_File, "isdirectory",  Ffile_d, 1);</div><div class='add'>+    rb_define_single_method(C_File, "a",  Ffile_e, 1);</div><div class='add'>+    rb_define_single_method(C_File, "e",  Ffile_e, 1);</div><div class='add'>+    rb_define_single_method(C_File, "exists",  Ffile_e, 1);</div><div class='add'>+    rb_define_single_method(C_File, "r",  Ffile_r, 1);</div><div class='add'>+    rb_define_single_method(C_File, "readable",  Ffile_r, 1);</div><div class='add'>+    rb_define_single_method(C_File, "R",  Ffile_R, 1);</div><div class='add'>+    rb_define_single_method(C_File, "w",  Ffile_w, 1);</div><div class='add'>+    rb_define_single_method(C_File, "writable",  Ffile_w, 1);</div><div class='add'>+    rb_define_single_method(C_File, "W",  Ffile_W, 1);</div><div class='add'>+    rb_define_single_method(C_File, "x",  Ffile_x, 1);</div><div class='add'>+    rb_define_single_method(C_File, "executable",  Ffile_x, 1);</div><div class='add'>+    rb_define_single_method(C_File, "X",  Ffile_X, 1);</div><div class='add'>+    rb_define_single_method(C_File, "f",  Ffile_f, 1);</div><div class='add'>+    rb_define_single_method(C_File, "isfile",  Ffile_f, 1);</div><div class='add'>+    rb_define_single_method(C_File, "z",  Ffile_z, 1);</div><div class='add'>+    rb_define_single_method(C_File, "s",  Ffile_s, 1);</div><div class='add'>+    rb_define_single_method(C_File, "size",  Ffile_s, 1);</div><div class='add'>+    rb_define_single_method(C_File, "O",  Ffile_owned, 1);</div><div class='add'>+    rb_define_single_method(C_File, "owned",  Ffile_owned, 1);</div><div class='add'>+    rb_define_single_method(C_File, "G",  Ffile_grpowned, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "p",  Ffile_p, 1);</div><div class='add'>+    rb_define_single_method(C_File, "ispipe",  Ffile_p, 1);</div><div class='add'>+    rb_define_single_method(C_File, "l",  Ffile_l, 1);</div><div class='add'>+    rb_define_single_method(C_File, "issymlink",  Ffile_l, 1);</div><div class='add'>+    rb_define_single_method(C_File, "S",  Ffile_S, 1);</div><div class='add'>+    rb_define_single_method(C_File, "issocket",  Ffile_S, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "b",  Ffile_b, 1);</div><div class='add'>+    rb_define_single_method(C_File, "c",  Ffile_c, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "u",  Ffile_suid, 1);</div><div class='add'>+    rb_define_single_method(C_File, "setuid",  Ffile_suid, 1);</div><div class='add'>+    rb_define_single_method(C_File, "g",  Ffile_sgid, 1);</div><div class='add'>+    rb_define_single_method(C_File, "setgid",  Ffile_sgid, 1);</div><div class='add'>+    rb_define_single_method(C_File, "k",  Ffile_sticky, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "atime", Ffile_atime, 1);</div><div class='add'>+    rb_define_single_method(C_File, "mtime", Ffile_mtime, 1);</div><div class='add'>+    rb_define_single_method(C_File, "ctime", Ffile_ctime, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "utime", Ffile_utime, -1);</div><div class='add'>+    rb_define_single_method(C_File, "chmod", Ffile_chmod, -2);</div><div class='add'>+    rb_define_single_method(C_File, "chown", Ffile_chown, -1);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "link", Ffile_link, 2);</div><div class='add'>+    rb_define_single_method(C_File, "symlink", Ffile_symlink, 2);</div><div class='add'>+    rb_define_single_method(C_File, "readlink", Ffile_readlink, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_single_method(C_File, "unlink", Ffile_unlink, -1);</div><div class='add'>+    rb_define_single_method(C_File, "delete", Ffile_unlink, -1);</div><div class='add'>+    rb_define_single_method(C_File, "rename", Ffile_rename, 2);</div><div class='add'>+    rb_define_single_method(C_File, "umask", Ffile_umask, -1);</div><div class='add'>+    rb_define_single_method(C_File, "truncate", Ffile_truncate, 2);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_File, "stat",  Ffile_stat2, 0);</div><div class='add'>+    rb_define_method(C_File, "lstat",  Ffile_lstat2, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_File, "atime", Ffile_atime2, 0);</div><div class='add'>+    rb_define_method(C_File, "mtime", Ffile_mtime2, 0);</div><div class='add'>+    rb_define_method(C_File, "ctime", Ffile_ctime2, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_File, "chmod", Ffile_chmod2, 1);</div><div class='add'>+    rb_define_method(C_File, "chown", Ffile_chown2, 2);</div><div class='add'>+    rb_define_method(C_File, "truncate", Ffile_truncate2, 1);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_File, "tell",  Ffile_tell, 0);</div><div class='add'>+    rb_define_method(C_File, "seek",  Ffile_seek, 2);</div><div class='add'>+    rb_define_method(C_File, "rewind",  Ffile_rewind, 0);</div><div class='add'>+    rb_define_method(C_File, "isatty",  Ffile_isatty, 0);</div><div class='add'>+    rb_define_method(C_File, "eof",  Ffile_eof, 0);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_IO, "fcntl", Ffile_fcntl, 2);</div><div class='add'>+</div><div class='add'>+    rb_define_method(C_File, "path",  Ffile_path, 0);</div><div class='ctx'> }</div><div class='head'>diff --git a/gc.c b/gc.c<br/>index f75a11a937..96b886fa2f 100644<br/>--- a/<a href='/ruby.git/tree/gc.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>gc.c</a><br/>+++ b/<a href='/ruby.git/tree/gc.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>gc.c</a></div><div class='hunk'>@@ -1,2125 +1,634 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   gc.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/27 15:48:27 $</div><div class='ctx'>   created at: Tue Oct  5 09:44:46 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-  Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "rubysig.h"</div><div class='del'>-#include "st.h"</div><div class='del'>-#include "node.h"</div><div class='ctx'> #include "env.h"</div><div class='del'>-#include "re.h"</div><div class='add'>+#include "st.h"</div><div class='ctx'> #include &lt;stdio.h&gt;</div><div class='ctx'> #include &lt;setjmp.h&gt;</div><div class='del'>-#include &lt;sys/types.h&gt;</div><div class='del'>-</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'>-</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'>-</div><div class='del'>-#if defined _WIN32 || defined __CYGWIN__</div><div class='del'>-#include &lt;windows.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void re_free_registers _((struct re_registers*));</div><div class='del'>-void rb_io_fptr_finalize _((struct rb_io_t*));</div><div class='del'>-</div><div class='del'>-#define rb_setjmp(env) RUBY_SETJMP(env)</div><div class='del'>-#define rb_jmp_buf rb_jmpbuf_t</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-int _setjmp(), _longjmp();</div><div class='del'>-#endif</div><div class='ctx'> </div><div class='del'>-/* Make alloca work the best possible way.  */</div><div class='del'>-#ifdef __GNUC__</div><div class='del'>-# ifndef atarist</div><div class='del'>-#  ifndef alloca</div><div class='del'>-#   define alloca __builtin_alloca</div><div class='del'>-#  endif</div><div class='del'>-# endif /* atarist */</div><div class='del'>-#else</div><div class='del'>-# ifdef HAVE_ALLOCA_H</div><div class='del'>-#  include &lt;alloca.h&gt;</div><div class='del'>-# else</div><div class='del'>-#  ifndef _AIX</div><div class='del'>-#   ifndef alloca /* predefined by HP cc +Olibcalls */</div><div class='del'>-void *alloca ();</div><div class='del'>-#   endif</div><div class='del'>-#  endif /* AIX */</div><div class='del'>-# endif /* HAVE_ALLOCA_H */</div><div class='del'>-#endif /* __GNUC__ */</div><div class='del'>-</div><div class='del'>-#ifndef GC_MALLOC_LIMIT</div><div class='del'>-#if defined(MSDOS) || defined(__human68k__)</div><div class='del'>-#define GC_MALLOC_LIMIT 200000</div><div class='del'>-#else</div><div class='del'>-#define GC_MALLOC_LIMIT 8000000</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='add'>+void *malloc();</div><div class='add'>+void *calloc();</div><div class='add'>+void *realloc();</div><div class='ctx'> </div><div class='del'>-static unsigned long malloc_increase = 0;</div><div class='del'>-static unsigned long malloc_limit = GC_MALLOC_LIMIT;</div><div class='del'>-static void run_final();</div><div class='del'>-static VALUE nomem_error;</div><div class='del'>-static void garbage_collect();</div><div class='del'>-</div><div class='del'>-int ruby_gc_stress = 0;</div><div class='del'>-</div><div class='del'>-NORETURN(void rb_exc_jump _((VALUE)));</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_memerror()</div><div class='del'>-{</div><div class='del'>-    rb_thread_t th = rb_curr_thread;</div><div class='del'>-</div><div class='del'>-    if (!nomem_error ||</div><div class='del'>-	(rb_thread_raised_p(th, RAISED_NOMEMORY) &amp;&amp; rb_safe_level() &lt; 4)) {</div><div class='del'>-	fprintf(stderr, "[FATAL] failed to allocate memory\n");</div><div class='del'>-	exit(1);</div><div class='del'>-    }</div><div class='del'>-    if (rb_thread_raised_p(th, RAISED_NOMEMORY)) {</div><div class='del'>-	rb_exc_jump(nomem_error);</div><div class='del'>-    }</div><div class='del'>-    rb_thread_raised_set(th, RAISED_NOMEMORY);</div><div class='del'>-    rb_exc_raise(nomem_error);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    GC.stress                 =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  returns current status of GC stress mode.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gc_stress_get(self)</div><div class='del'>-    VALUE self;</div><div class='del'>-{</div><div class='del'>-    return ruby_gc_stress ? Qtrue : Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *    GC.stress = bool          =&gt; bool</div><div class='del'>- *</div><div class='del'>- *  updates GC stress mode.</div><div class='del'>- *</div><div class='del'>- *  When GC.stress = true, GC is invoked for all GC opportunity:</div><div class='del'>- *  all memory and object allocation.</div><div class='del'>- *</div><div class='del'>- *  Since it makes Ruby very slow, it is only for debugging.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-gc_stress_set(self, bool)</div><div class='del'>-    VALUE self, bool;</div><div class='del'>-{</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    ruby_gc_stress = RTEST(bool);</div><div class='del'>-    return bool;</div><div class='del'>-}</div><div class='add'>+void gc();</div><div class='add'>+void gc_mark();</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-ruby_xmalloc(size)</div><div class='del'>-    long size;</div><div class='add'>+xmalloc(size)</div><div class='add'>+    unsigned long size;</div><div class='ctx'> {</div><div class='ctx'>     void *mem;</div><div class='ctx'> </div><div class='del'>-    if (size &lt; 0) {</div><div class='del'>-	rb_raise(rb_eNoMemError, "negative allocation size (or too big)");</div><div class='del'>-    }</div><div class='ctx'>     if (size == 0) size = 1;</div><div class='del'>-</div><div class='del'>-    if (ruby_gc_stress || (malloc_increase+size) &gt; malloc_limit) {</div><div class='del'>-	garbage_collect();</div><div class='del'>-    }</div><div class='del'>-    RUBY_CRITICAL(mem = malloc(size));</div><div class='del'>-    if (!mem) {</div><div class='del'>-	garbage_collect();</div><div class='del'>-	RUBY_CRITICAL(mem = malloc(size));</div><div class='del'>-	if (!mem) {</div><div class='del'>-	    rb_memerror();</div><div class='del'>-	}</div><div class='add'>+    mem = malloc(size);</div><div class='add'>+    if (mem == Qnil) {</div><div class='add'>+	gc();</div><div class='add'>+	mem = malloc(size);</div><div class='add'>+	if (mem == Qnil)</div><div class='add'>+	    Fatal("failed to allocate memory");</div><div class='ctx'>     }</div><div class='del'>-    malloc_increase += size;</div><div class='ctx'> </div><div class='ctx'>     return mem;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-ruby_xcalloc(n, size)</div><div class='del'>-    long n, size;</div><div class='add'>+xcalloc(n, size)</div><div class='add'>+    unsigned long n, size;</div><div class='ctx'> {</div><div class='ctx'>     void *mem;</div><div class='ctx'> </div><div class='ctx'>     mem = xmalloc(n * size);</div><div class='del'>-    memset(mem, 0, n * size);</div><div class='add'>+    bzero(mem, n * size);</div><div class='ctx'> </div><div class='ctx'>     return mem;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void *</div><div class='del'>-ruby_xrealloc(ptr, size)</div><div class='add'>+xrealloc(ptr, size)</div><div class='ctx'>     void *ptr;</div><div class='del'>-    long size;</div><div class='add'>+    unsigned long size;</div><div class='ctx'> {</div><div class='ctx'>     void *mem;</div><div class='ctx'> </div><div class='del'>-    if (size &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "negative re-allocation size");</div><div class='del'>-    }</div><div class='del'>-    if (!ptr) return xmalloc(size);</div><div class='del'>-    if (size == 0) size = 1;</div><div class='del'>-    if (ruby_gc_stress) garbage_collect();</div><div class='del'>-    RUBY_CRITICAL(mem = realloc(ptr, size));</div><div class='del'>-    if (!mem) {</div><div class='del'>-	garbage_collect();</div><div class='del'>-	RUBY_CRITICAL(mem = realloc(ptr, size));</div><div class='del'>-	if (!mem) {</div><div class='del'>-	    rb_memerror();</div><div class='del'>-        }</div><div class='add'>+    mem = realloc(ptr, size);</div><div class='add'>+    if (mem == Qnil) {</div><div class='add'>+	gc();</div><div class='add'>+	mem = realloc(ptr, size);</div><div class='add'>+	if (mem == Qnil)</div><div class='add'>+	    Fatal("failed to allocate memory(realloc)");</div><div class='ctx'>     }</div><div class='del'>-    malloc_increase += size;</div><div class='ctx'> </div><div class='ctx'>     return mem;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-ruby_xfree(x)</div><div class='del'>-    void *x;</div><div class='del'>-{</div><div class='del'>-    if (x)</div><div class='del'>-	RUBY_CRITICAL(free(x));</div><div class='del'>-}</div><div class='add'>+/* The way of garbage collecting which allows use of the cstack is due to */</div><div class='add'>+/* Scheme In One Defun, but in C this time.</div><div class='add'>+</div><div class='add'>+ *			  COPYRIGHT (c) 1989 BY				    *</div><div class='add'>+ *	  PARADIGM ASSOCIATES INCORPORATED, CAMBRIDGE, MASSACHUSETTS.	    *</div><div class='add'>+ *			   ALL RIGHTS RESERVED				    *</div><div class='add'>+</div><div class='add'>+Permission to use, copy, modify, distribute and sell this software</div><div class='add'>+and its documentation for any purpose and without fee is hereby</div><div class='add'>+granted, provided that the above copyright notice appear in all copies</div><div class='add'>+and that both that copyright notice and this permission notice appear</div><div class='add'>+in supporting documentation, and that the name of Paradigm Associates</div><div class='add'>+Inc not be used in advertising or publicity pertaining to distribution</div><div class='add'>+of the software without specific, written prior permission.</div><div class='add'>+</div><div class='add'>+PARADIGM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING</div><div class='add'>+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL</div><div class='add'>+PARADIGM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR</div><div class='add'>+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,</div><div class='add'>+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,</div><div class='add'>+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS</div><div class='add'>+SOFTWARE.</div><div class='add'>+</div><div class='add'>+gjc@paradigm.com</div><div class='add'>+</div><div class='add'>+Paradigm Associates Inc		 Phone: 617-492-6079</div><div class='add'>+29 Putnam Ave, Suite 6</div><div class='add'>+Cambridge, MA 02138</div><div class='add'>+*/</div><div class='add'>+</div><div class='add'>+#ifdef sparc</div><div class='add'>+#define FLUSH_REGISTER_WINDOWS asm("ta 3")</div><div class='add'>+#else</div><div class='add'>+#define FLUSH_REGISTER_WINDOWS /* empty */</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='del'>-extern int ruby_in_compile;</div><div class='ctx'> static int dont_gc;</div><div class='del'>-static int during_gc;</div><div class='del'>-static int need_call_final = 0;</div><div class='del'>-static st_table *finalizer_table = 0;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     GC.enable    =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Enables garbage collection, returning &lt;code&gt;true&lt;/code&gt; if garbage</div><div class='del'>- *  collection was previously disabled.</div><div class='del'>- *</div><div class='del'>- *     GC.disable   #=&gt; false</div><div class='del'>- *     GC.enable    #=&gt; true</div><div class='del'>- *     GC.enable    #=&gt; false</div><div class='del'>- *</div><div class='del'>- */</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_gc_enable()</div><div class='add'>+Fgc_enable()</div><div class='ctx'> {</div><div class='ctx'>     int old = dont_gc;</div><div class='ctx'> </div><div class='del'>-    dont_gc = Qfalse;</div><div class='add'>+    dont_gc = Qnil;</div><div class='ctx'>     return old;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     GC.disable    =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Disables garbage collection, returning &lt;code&gt;true&lt;/code&gt; if garbage</div><div class='del'>- *  collection was already disabled.</div><div class='del'>- *</div><div class='del'>- *     GC.disable   #=&gt; false</div><div class='del'>- *     GC.disable   #=&gt; true</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> VALUE</div><div class='del'>-rb_gc_disable()</div><div class='add'>+Fgc_disable()</div><div class='ctx'> {</div><div class='ctx'>     int old = dont_gc;</div><div class='ctx'> </div><div class='del'>-    dont_gc = Qtrue;</div><div class='add'>+    dont_gc = TRUE;</div><div class='ctx'>     return old;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-VALUE rb_mGC;</div><div class='del'>-</div><div class='del'>-static struct gc_list {</div><div class='del'>-    VALUE *varptr;</div><div class='del'>-    struct gc_list *next;</div><div class='del'>-} *global_List = 0;</div><div class='add'>+#include &lt;sys/types.h&gt;</div><div class='add'>+#include &lt;sys/times.h&gt;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_gc_register_address(addr)</div><div class='del'>-    VALUE *addr;</div><div class='add'>+static Fgc_begin()</div><div class='ctx'> {</div><div class='del'>-    struct gc_list *tmp;</div><div class='del'>-</div><div class='del'>-    tmp = ALLOC(struct gc_list);</div><div class='del'>-    tmp-&gt;next = global_List;</div><div class='del'>-    tmp-&gt;varptr = addr;</div><div class='del'>-    global_List = tmp;</div><div class='add'>+    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_gc_unregister_address(addr)</div><div class='del'>-    VALUE *addr;</div><div class='add'>+static Fgc_end()</div><div class='ctx'> {</div><div class='del'>-    struct gc_list *tmp = global_List;</div><div class='del'>-</div><div class='del'>-    if (tmp-&gt;varptr == addr) {</div><div class='del'>-	global_List = tmp-&gt;next;</div><div class='del'>-	RUBY_CRITICAL(free(tmp));</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    while (tmp-&gt;next) {</div><div class='del'>-	if (tmp-&gt;next-&gt;varptr == addr) {</div><div class='del'>-	    struct gc_list *t = tmp-&gt;next;</div><div class='del'>-</div><div class='del'>-	    tmp-&gt;next = tmp-&gt;next-&gt;next;</div><div class='del'>-	    RUBY_CRITICAL(free(t));</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	tmp = tmp-&gt;next;</div><div class='del'>-    }</div><div class='add'>+    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#undef GC_DEBUG</div><div class='add'>+VALUE M_GC;</div><div class='add'>+</div><div class='add'>+static struct gc_list {</div><div class='add'>+    int n;</div><div class='add'>+    VALUE *varptr;</div><div class='add'>+    struct gc_list *next;</div><div class='add'>+} *Global_List = Qnil;</div><div class='ctx'> </div><div class='ctx'> void</div><div class='ctx'> rb_global_variable(var)</div><div class='ctx'>     VALUE *var;</div><div class='ctx'> {</div><div class='del'>-    rb_gc_register_address(var);</div><div class='del'>-}</div><div class='add'>+    struct gc_list *tmp;</div><div class='ctx'> </div><div class='del'>-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CYGWIN__)</div><div class='del'>-#pragma pack(push, 1) /* magic for reducing sizeof(RVALUE): 24 -&gt; 20 */</div><div class='del'>-#endif</div><div class='add'>+    tmp = (struct gc_list*)xmalloc(sizeof(struct gc_list));</div><div class='add'>+    tmp-&gt;next = Global_List;</div><div class='add'>+    tmp-&gt;varptr = var;</div><div class='add'>+    tmp-&gt;n = 1;</div><div class='add'>+    Global_List = tmp;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-typedef struct RVALUE {</div><div class='add'>+struct RVALUE {</div><div class='ctx'>     union {</div><div class='ctx'> 	struct {</div><div class='del'>-	    unsigned long flags;	/* always 0 for freed obj */</div><div class='add'>+	    int flag;		/* alway 0 for freed obj */</div><div class='ctx'> 	    struct RVALUE *next;</div><div class='ctx'> 	} free;</div><div class='del'>-	struct RBasic  basic;</div><div class='ctx'> 	struct RObject object;</div><div class='del'>-	struct RClass  klass;</div><div class='add'>+	struct RClass  class;</div><div class='ctx'> 	struct RFloat  flonum;</div><div class='ctx'> 	struct RString string;</div><div class='ctx'> 	struct RArray  array;</div><div class='ctx'> 	struct RRegexp regexp;</div><div class='del'>-	struct RHash   hash;</div><div class='add'>+	struct RDict   dict;</div><div class='ctx'> 	struct RData   data;</div><div class='ctx'> 	struct RStruct rstruct;</div><div class='ctx'> 	struct RBignum bignum;</div><div class='del'>-	struct RFile   file;</div><div class='del'>-	struct RNode   node;</div><div class='del'>-	struct RMatch  match;</div><div class='del'>-	struct RVarmap varmap;</div><div class='del'>-	struct SCOPE   scope;</div><div class='ctx'>     } as;</div><div class='del'>-#ifdef GC_DEBUG</div><div class='del'>-    char *file;</div><div class='del'>-    int   line;</div><div class='del'>-#endif</div><div class='del'>-} RVALUE;</div><div class='add'>+} *freelist = Qnil;</div><div class='ctx'> </div><div class='del'>-#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CYGWIN__)</div><div class='del'>-#pragma pack(pop)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static RVALUE *freelist = 0;</div><div class='del'>-static RVALUE *deferred_final_list = 0;</div><div class='del'>-</div><div class='del'>-#define HEAPS_INCREMENT 10</div><div class='del'>-static struct heaps_slot {</div><div class='del'>-    void *membase;</div><div class='del'>-    RVALUE *slot;</div><div class='del'>-    int limit;</div><div class='del'>-} *heaps;</div><div class='del'>-static int heaps_length = 0;</div><div class='del'>-static int heaps_used   = 0;</div><div class='del'>-</div><div class='del'>-#define HEAP_MIN_SLOTS 10000</div><div class='del'>-static int heap_slots = HEAP_MIN_SLOTS;</div><div class='add'>+struct heap_block {</div><div class='add'>+    struct heap_block *next;</div><div class='add'>+    struct RVALUE *beg;</div><div class='add'>+    struct RVALUE *end;</div><div class='add'>+    struct RVALUE body[1];</div><div class='add'>+} *heap_link = Qnil;</div><div class='ctx'> </div><div class='del'>-#define FREE_MIN  4096</div><div class='add'>+#define SEG_SLOTS 4000</div><div class='add'>+#define SEG_SIZE  (SEG_SLOTS*sizeof(struct RVALUE))</div><div class='ctx'> </div><div class='del'>-static RVALUE *himem, *lomem;</div><div class='add'>+static int heap_size;</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> add_heap()</div><div class='ctx'> {</div><div class='del'>-    RVALUE *p, *pend;</div><div class='del'>-</div><div class='del'>-    if (heaps_used == heaps_length) {</div><div class='del'>-	/* Realloc heaps */</div><div class='del'>-	struct heaps_slot *p;</div><div class='del'>-	int length;</div><div class='del'>-</div><div class='del'>-	heaps_length += HEAPS_INCREMENT;</div><div class='del'>-	length = heaps_length*sizeof(struct heaps_slot);</div><div class='del'>-	RUBY_CRITICAL(</div><div class='del'>-	    if (heaps_used &gt; 0) {</div><div class='del'>-		p = (struct heaps_slot *)realloc(heaps, length);</div><div class='del'>-		if (p) heaps = p;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		p = heaps = (struct heaps_slot *)malloc(length);</div><div class='del'>-	    });</div><div class='del'>-	if (p == 0) rb_memerror();</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	RUBY_CRITICAL(p = (RVALUE*)malloc(sizeof(RVALUE)*(heap_slots+1)));</div><div class='del'>-	if (p == 0) {</div><div class='del'>-	    if (heap_slots == HEAP_MIN_SLOTS) {</div><div class='del'>-		rb_memerror();</div><div class='del'>-	    }</div><div class='del'>-	    heap_slots = HEAP_MIN_SLOTS;</div><div class='del'>-	    continue;</div><div class='del'>-	}</div><div class='del'>-        heaps[heaps_used].membase = p;</div><div class='del'>-        if ((VALUE)p % sizeof(RVALUE) == 0)</div><div class='del'>-            heap_slots += 1;</div><div class='del'>-        else</div><div class='del'>-            p = (RVALUE*)((VALUE)p + sizeof(RVALUE) - ((VALUE)p % sizeof(RVALUE)));</div><div class='del'>-        heaps[heaps_used].slot = p;</div><div class='del'>-        heaps[heaps_used].limit = heap_slots;</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    pend = p + heap_slots;</div><div class='del'>-    if (lomem == 0 || lomem &gt; p) lomem = p;</div><div class='del'>-    if (himem &lt; pend) himem = pend;</div><div class='del'>-    heaps_used++;</div><div class='del'>-    heap_slots *= 1.8;</div><div class='del'>-    if (heap_slots &lt;= 0) heap_slots = HEAP_MIN_SLOTS;</div><div class='add'>+    struct heap_block *block;</div><div class='add'>+    struct RVALUE *p, *pend;</div><div class='ctx'> </div><div class='add'>+    block = (struct heap_block*)malloc(sizeof(*block) + SEG_SIZE);</div><div class='add'>+    if (block == Qnil) Fatal("cant alloc memory");</div><div class='add'>+    block-&gt;next = heap_link;</div><div class='add'>+    block-&gt;beg = &amp;block-&gt;body[0];</div><div class='add'>+    block-&gt;end = block-&gt;beg + SEG_SLOTS;</div><div class='add'>+    p = block-&gt;beg; pend = block-&gt;end;</div><div class='ctx'>     while (p &lt; pend) {</div><div class='del'>-	p-&gt;as.free.flags = 0;</div><div class='add'>+	p-&gt;as.free.flag = 0;</div><div class='ctx'> 	p-&gt;as.free.next = freelist;</div><div class='ctx'> 	freelist = p;</div><div class='ctx'> 	p++;</div><div class='ctx'>     }</div><div class='add'>+    heap_link = block;</div><div class='add'>+    heap_size += SEG_SLOTS;</div><div class='ctx'> }</div><div class='del'>-#define RANY(o) ((RVALUE*)(o))</div><div class='ctx'> </div><div class='del'>-int </div><div class='del'>-rb_during_gc()</div><div class='del'>-{</div><div class='del'>-    return during_gc;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_newobj()</div><div class='add'>+struct RBasic *</div><div class='add'>+newobj()</div><div class='ctx'> {</div><div class='del'>-    VALUE obj;</div><div class='del'>-</div><div class='del'>-    if (during_gc)</div><div class='del'>-	rb_bug("object allocation during garbage collection phase");</div><div class='del'>-</div><div class='del'>-    if (ruby_gc_stress || !freelist) garbage_collect();</div><div class='add'>+    struct RBasic *obj;</div><div class='add'>+    if (heap_link == Qnil) add_heap();</div><div class='add'>+    if (freelist) {</div><div class='add'>+      retry:</div><div class='add'>+	obj = (struct RBasic*)freelist;</div><div class='add'>+	freelist = freelist-&gt;as.free.next;</div><div class='add'>+	obj-&gt;flags = 0;</div><div class='add'>+	obj-&gt;iv_tbl = Qnil;</div><div class='add'>+	return obj;</div><div class='add'>+    }</div><div class='add'>+    if (dont_gc) add_heap();</div><div class='add'>+    else gc();</div><div class='ctx'> </div><div class='del'>-    obj = (VALUE)freelist;</div><div class='del'>-    freelist = freelist-&gt;as.free.next;</div><div class='del'>-    MEMZERO((void*)obj, RVALUE, 1);</div><div class='del'>-#ifdef GC_DEBUG</div><div class='del'>-    RANY(obj)-&gt;file = ruby_sourcefile;</div><div class='del'>-    RANY(obj)-&gt;line = ruby_sourceline;</div><div class='del'>-#endif</div><div class='del'>-    return obj;</div><div class='add'>+    goto retry;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> VALUE</div><div class='del'>-rb_data_object_alloc(klass, datap, dmark, dfree)</div><div class='del'>-    VALUE klass;</div><div class='del'>-    void *datap;</div><div class='del'>-    RUBY_DATA_FUNC dmark;</div><div class='del'>-    RUBY_DATA_FUNC dfree;</div><div class='add'>+newdata(size)</div><div class='add'>+    UINT size;</div><div class='ctx'> {</div><div class='del'>-    NEWOBJ(data, struct RData);</div><div class='del'>-    if (klass) Check_Type(klass, T_CLASS);</div><div class='del'>-    OBJSETUP(data, klass, T_DATA);</div><div class='del'>-    data-&gt;data = datap;</div><div class='del'>-    data-&gt;dfree = dfree;</div><div class='del'>-    data-&gt;dmark = dmark;</div><div class='add'>+    extern VALUE C_Data;</div><div class='add'>+    struct RData *data = (struct RData*)newobj();</div><div class='ctx'> </div><div class='add'>+    OBJSETUP(data, C_Data, T_DATA);</div><div class='add'>+    data-&gt;data = xmalloc(size);</div><div class='ctx'>     return (VALUE)data;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-extern st_table *rb_class_tbl;</div><div class='del'>-VALUE *rb_gc_stack_start = 0;</div><div class='del'>-#ifdef __ia64</div><div class='del'>-VALUE *rb_gc_register_stack_start = 0;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef DJGPP</div><div class='del'>-/* set stack size (http://www.delorie.com/djgpp/v2faq/faq15_9.html) */</div><div class='del'>-unsigned int _stklen = 0x180000; /* 1.5 kB */</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(DJGPP) || defined(_WIN32_WCE)</div><div class='del'>-static unsigned int STACK_LEVEL_MAX = 65535;</div><div class='del'>-#elif defined(__human68k__)</div><div class='del'>-unsigned int _stacksize = 262144;</div><div class='del'>-# define STACK_LEVEL_MAX (_stacksize - 4096)</div><div class='del'>-# undef HAVE_GETRLIMIT</div><div class='del'>-#elif defined(HAVE_GETRLIMIT) || defined(_WIN32)</div><div class='del'>-static unsigned int STACK_LEVEL_MAX = 655300;</div><div class='del'>-#else</div><div class='del'>-# define STACK_LEVEL_MAX 655300</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef C_ALLOCA</div><div class='del'>-# define SET_STACK_END VALUE stack_end; alloca(0);</div><div class='del'>-# define STACK_END (&amp;stack_end)</div><div class='del'>-#else</div><div class='del'>-# if defined(__GNUC__) &amp;&amp; defined(USE_BUILTIN_FRAME_ADDRESS) &amp;&amp; !defined(__ia64)</div><div class='del'>-#  if ( __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'>-static void</div><div class='del'>-stack_end_address(VALUE **stack_end_p)</div><div class='del'>-{</div><div class='del'>-    VALUE stack_end;</div><div class='del'>-    *stack_end_p = &amp;stack_end;</div><div class='del'>-}</div><div class='del'>-#  define  SET_STACK_END    VALUE *stack_end; stack_end_address(&amp;stack_end)</div><div class='del'>-# else</div><div class='del'>-#  define  SET_STACK_END    VALUE *stack_end = alloca(1)</div><div class='del'>-# endif</div><div class='del'>-# define STACK_END (stack_end)</div><div class='del'>-#endif</div><div class='del'>-#if STACK_GROW_DIRECTION &lt; 0</div><div class='del'>-# define STACK_LENGTH  (rb_gc_stack_start - STACK_END)</div><div class='del'>-#elif STACK_GROW_DIRECTION &gt; 0</div><div class='del'>-# define STACK_LENGTH  (STACK_END - rb_gc_stack_start + 1)</div><div class='del'>-#else</div><div class='del'>-# define STACK_LENGTH  ((STACK_END &lt; rb_gc_stack_start) ? rb_gc_stack_start - STACK_END\</div><div class='del'>-                                           : STACK_END - rb_gc_stack_start + 1)</div><div class='del'>-#endif</div><div class='del'>-#if STACK_GROW_DIRECTION &gt; 0</div><div class='del'>-# define STACK_UPPER(x, a, b) a</div><div class='del'>-#elif STACK_GROW_DIRECTION &lt; 0</div><div class='del'>-# define STACK_UPPER(x, a, b) b</div><div class='del'>-#else</div><div class='del'>-static int grow_direction;</div><div class='del'>-static int</div><div class='del'>-stack_grow_direction(addr)</div><div class='del'>-    VALUE *addr;</div><div class='del'>-{</div><div class='del'>-    SET_STACK_END;</div><div class='del'>-</div><div class='del'>-    if (STACK_END &gt; addr) return grow_direction = 1;</div><div class='del'>-    return grow_direction = -1;</div><div class='del'>-}</div><div class='del'>-# define stack_growup_p(x) ((grow_direction ? grow_direction : stack_grow_direction(x)) &gt; 0)</div><div class='del'>-# define STACK_UPPER(x, a, b) (stack_growup_p(x) ? a : b)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define GC_WATER_MARK 512</div><div class='del'>-</div><div class='del'>-#define CHECK_STACK(ret) do {\</div><div class='del'>-    SET_STACK_END;\</div><div class='del'>-    (ret) = (STACK_LENGTH &gt; STACK_LEVEL_MAX + GC_WATER_MARK);\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-ruby_stack_length(p)</div><div class='del'>-    VALUE **p;</div><div class='del'>-{</div><div class='del'>-    SET_STACK_END;</div><div class='del'>-    if (p) *p = STACK_UPPER(STACK_END, rb_gc_stack_start, STACK_END);</div><div class='del'>-    return STACK_LENGTH;</div><div class='del'>-}</div><div class='add'>+static struct literal_list {</div><div class='add'>+    VALUE val;</div><div class='add'>+    struct literal_list *next;</div><div class='add'>+} *Literal_List = Qnil;</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-ruby_stack_check()</div><div class='add'>+void</div><div class='add'>+literalize(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    int ret;</div><div class='add'>+    struct literal_list *tmp;</div><div class='ctx'> </div><div class='del'>-    CHECK_STACK(ret);</div><div class='del'>-    return ret;</div><div class='add'>+    tmp = (struct literal_list*)xmalloc(sizeof(struct literal_list));</div><div class='add'>+    tmp-&gt;next = Literal_List;</div><div class='add'>+    tmp-&gt;val = obj;</div><div class='add'>+    Literal_List = tmp;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define MARK_STACK_MAX 1024</div><div class='del'>-static VALUE mark_stack[MARK_STACK_MAX];</div><div class='del'>-static VALUE *mark_stack_ptr;</div><div class='del'>-static int mark_stack_overflow;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-init_mark_stack()</div><div class='add'>+void</div><div class='add'>+unliteralize(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    mark_stack_overflow = 0;</div><div class='del'>-    mark_stack_ptr = mark_stack;</div><div class='del'>-}</div><div class='add'>+    struct literal_list *ptr = Literal_List, *tmp;</div><div class='ctx'> </div><div class='del'>-#define MARK_STACK_EMPTY (mark_stack_ptr == mark_stack)</div><div class='add'>+    if (NIL_P(obj) || FIXNUM_P(obj)) return;</div><div class='ctx'> </div><div class='del'>-static st_table *source_filenames;</div><div class='add'>+    if (!FL_TEST(obj, FL_LITERAL)) return;</div><div class='add'>+    FL_UNSET(obj, FL_LITERAL);</div><div class='ctx'> </div><div class='del'>-char *</div><div class='del'>-rb_source_filename(f)</div><div class='del'>-    const char *f;</div><div class='del'>-{</div><div class='del'>-    st_data_t name;</div><div class='del'>-</div><div class='del'>-    if (!st_lookup(source_filenames, (st_data_t)f, &amp;name)) {</div><div class='del'>-	long len = strlen(f) + 1;</div><div class='del'>-	char *ptr = ALLOC_N(char, len + 1);</div><div class='del'>-	name = (st_data_t)ptr;</div><div class='del'>-	*ptr++ = 0;</div><div class='del'>-	MEMCPY(ptr, f, char, len);</div><div class='del'>-	st_add_direct(source_filenames, (st_data_t)ptr, name);</div><div class='del'>-	return ptr;</div><div class='del'>-    }</div><div class='del'>-    return (char *)name + 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-mark_source_filename(f)</div><div class='del'>-    char *f;</div><div class='del'>-{</div><div class='del'>-    if (f) {</div><div class='del'>-	f[-1] = 1;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-sweep_source_filename(key, value)</div><div class='del'>-    char *key, *value;</div><div class='del'>-{</div><div class='del'>-    if (*value) {</div><div class='del'>-	*value = 0;</div><div class='del'>-	return ST_CONTINUE;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	free(value);</div><div class='del'>-	return ST_DELETE;</div><div class='add'>+    if (ptr-&gt;val == obj) {</div><div class='add'>+	Literal_List = ptr-&gt;next;</div><div class='add'>+	free(ptr);</div><div class='add'>+	return;</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void gc_mark _((VALUE ptr, int lev));</div><div class='del'>-static void gc_mark_children _((VALUE ptr, int lev));</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-gc_mark_all()</div><div class='del'>-{</div><div class='del'>-    RVALUE *p, *pend;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    init_mark_stack();</div><div class='del'>-    for (i = 0; i &lt; heaps_used; i++) {</div><div class='del'>-	p = heaps[i].slot; pend = p + heaps[i].limit;</div><div class='del'>-	while (p &lt; pend) {</div><div class='del'>-	    if ((p-&gt;as.basic.flags &amp; FL_MARK) &amp;&amp;</div><div class='del'>-		(p-&gt;as.basic.flags != FL_MARK)) {</div><div class='del'>-		gc_mark_children((VALUE)p, 0);</div><div class='del'>-	    }</div><div class='del'>-	    p++;</div><div class='add'>+    while (ptr-&gt;next) {</div><div class='add'>+	if (ptr-&gt;next-&gt;val == obj) {</div><div class='add'>+	    tmp = ptr-&gt;next;</div><div class='add'>+	    ptr-&gt;next = ptr-&gt;next-&gt;next;</div><div class='add'>+	    ptr = tmp;</div><div class='add'>+	    free(tmp);</div><div class='add'>+	    return;</div><div class='ctx'> 	}</div><div class='add'>+	ptr = ptr-&gt;next;</div><div class='ctx'>     }</div><div class='add'>+    Bug("0x%x is not a literal object.", obj);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-gc_mark_rest()</div><div class='del'>-{</div><div class='del'>-    VALUE tmp_arry[MARK_STACK_MAX];</div><div class='del'>-    VALUE *p;</div><div class='del'>-</div><div class='del'>-    p = (mark_stack_ptr - mark_stack) + tmp_arry;</div><div class='del'>-    MEMCPY(tmp_arry, mark_stack, VALUE, MARK_STACK_MAX);</div><div class='del'>-</div><div class='del'>-    init_mark_stack();</div><div class='del'>-    while(p != tmp_arry){</div><div class='del'>-	p--;</div><div class='del'>-	gc_mark_children(*p, 0);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='add'>+extern st_table *rb_class_tbl;</div><div class='add'>+static VALUE *stack_start_ptr;</div><div class='ctx'> </div><div class='del'>-static inline int</div><div class='del'>-is_pointer_to_heap(ptr)</div><div class='del'>-    void *ptr;</div><div class='add'>+static long</div><div class='add'>+looks_pointerp(p)</div><div class='add'>+    struct RVALUE *p;</div><div class='ctx'> {</div><div class='del'>-    register RVALUE *p = RANY(ptr);</div><div class='del'>-    register RVALUE *heap_org;</div><div class='del'>-    register long i;</div><div class='del'>-</div><div class='del'>-    if (p &lt; lomem || p &gt; himem) return Qfalse;</div><div class='del'>-    if ((VALUE)p % sizeof(RVALUE) != 0) return Qfalse;</div><div class='del'>-</div><div class='del'>-    /* check if p looks like a pointer */</div><div class='del'>-    for (i=0; i &lt; heaps_used; i++) {</div><div class='del'>-	heap_org = heaps[i].slot;</div><div class='del'>-	if (heap_org &lt;= p &amp;&amp; p &lt; heap_org + heaps[i].limit)</div><div class='del'>-	    return Qtrue;</div><div class='add'>+    struct heap_block *heap = heap_link;</div><div class='add'>+</div><div class='add'>+    if (FIXNUM_P(p)) return FALSE;</div><div class='add'>+    while (heap) {</div><div class='add'>+	if (heap-&gt;beg &lt;= p &amp;&amp; p &lt; heap-&gt;end</div><div class='add'>+	    &amp;&amp; ((((char*)p) - ((char*)heap-&gt;beg)) % sizeof(struct RVALUE)) == 0)</div><div class='add'>+	    return TRUE;</div><div class='add'>+	heap = heap-&gt;next;</div><div class='ctx'>     }</div><div class='del'>-    return Qfalse;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> mark_locations_array(x, n)</div><div class='del'>-    register VALUE *x;</div><div class='del'>-    register long n;</div><div class='add'>+    VALUE *x;</div><div class='add'>+    long n;</div><div class='ctx'> {</div><div class='del'>-    VALUE v;</div><div class='del'>-    while (n--) {</div><div class='del'>-        v = *x;</div><div class='del'>-	if (is_pointer_to_heap((void *)v)) {</div><div class='del'>-	    gc_mark(v, 0);</div><div class='del'>-	}</div><div class='del'>-	x++;</div><div class='del'>-    }</div><div class='add'>+    int j;</div><div class='add'>+    VALUE p;</div><div class='add'>+    for(j=0;j&lt;n;++j)</div><div class='add'>+	{p = x[j];</div><div class='add'>+	 if (looks_pointerp(p)) {</div><div class='add'>+	     gc_mark(p);</div><div class='add'>+	 }</div><div class='add'>+     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_gc_mark_locations(start, end)</div><div class='add'>+static void</div><div class='add'>+mark_locations(start, end)</div><div class='ctx'>     VALUE *start, *end;</div><div class='ctx'> {</div><div class='add'>+    VALUE *tmp;</div><div class='ctx'>     long n;</div><div class='ctx'> </div><div class='add'>+    if (start &gt; end) {</div><div class='add'>+	tmp = start;</div><div class='add'>+	start = end;</div><div class='add'>+	end = tmp;</div><div class='add'>+    }</div><div class='ctx'>     n = end - start;</div><div class='ctx'>     mark_locations_array(start,n);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-mark_entry(key, value, lev)</div><div class='add'>+static</div><div class='add'>+mark_entry(key, value)</div><div class='ctx'>     ID key;</div><div class='ctx'>     VALUE value;</div><div class='del'>-    int lev;</div><div class='ctx'> {</div><div class='del'>-    gc_mark(value, lev);</div><div class='add'>+    gc_mark(value);</div><div class='ctx'>     return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-mark_tbl(tbl, lev)</div><div class='del'>-    st_table *tbl;</div><div class='del'>-    int lev;</div><div class='del'>-{</div><div class='del'>-    if (!tbl) return;</div><div class='del'>-    st_foreach(tbl, mark_entry, lev);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_mark_tbl(tbl)</div><div class='add'>+static</div><div class='add'>+mark_tbl(tbl)</div><div class='ctx'>     st_table *tbl;</div><div class='ctx'> {</div><div class='del'>-    mark_tbl(tbl, 0);</div><div class='add'>+    st_foreach(tbl, mark_entry, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-mark_keyvalue(key, value, lev)</div><div class='del'>-    VALUE key;</div><div class='add'>+static</div><div class='add'>+mark_dicentry(key, value)</div><div class='add'>+    ID key;</div><div class='ctx'>     VALUE value;</div><div class='del'>-    int lev;</div><div class='ctx'> {</div><div class='del'>-    gc_mark(key, lev);</div><div class='del'>-    gc_mark(value, lev);</div><div class='add'>+    gc_mark(key);</div><div class='add'>+    gc_mark(value);</div><div class='ctx'>     return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-mark_hash(tbl, lev)</div><div class='add'>+static</div><div class='add'>+mark_dict(tbl)</div><div class='ctx'>     st_table *tbl;</div><div class='del'>-    int lev;</div><div class='ctx'> {</div><div class='del'>-    if (!tbl) return;</div><div class='del'>-    st_foreach(tbl, mark_keyvalue, lev);</div><div class='add'>+    st_foreach(tbl, mark_dicentry, 0);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_mark_hash(tbl)</div><div class='del'>-    st_table *tbl;</div><div class='add'>+gc_mark(obj)</div><div class='add'>+    register struct RBasic *obj;</div><div class='ctx'> {</div><div class='del'>-    mark_hash(tbl, 0);</div><div class='del'>-}</div><div class='add'>+    if (obj == Qnil) return;</div><div class='add'>+    if (FIXNUM_P(obj)) return;</div><div class='add'>+    if (obj-&gt;flags &amp; FL_MARK) return;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_gc_mark_maybe(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    if (is_pointer_to_heap((void *)obj)) {</div><div class='del'>-	gc_mark(obj, 0);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define GC_LEVEL_MAX 250</div><div class='add'>+    obj-&gt;flags |= FL_MARK;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-gc_mark(ptr, lev)</div><div class='del'>-    VALUE ptr;</div><div class='del'>-    int lev;</div><div class='del'>-{</div><div class='del'>-    register RVALUE *obj;</div><div class='del'>-</div><div class='del'>-    obj = RANY(ptr);</div><div class='del'>-    if (rb_special_const_p(ptr)) return; /* special const not marked */</div><div class='del'>-    if (obj-&gt;as.basic.flags == 0) return;       /* free cell */</div><div class='del'>-    if (obj-&gt;as.basic.flags &amp; FL_MARK) return;  /* already marked */</div><div class='del'>-    obj-&gt;as.basic.flags |= FL_MARK;</div><div class='del'>-</div><div class='del'>-    if (lev &gt; GC_LEVEL_MAX || (lev == 0 &amp;&amp; ruby_stack_check())) {</div><div class='del'>-	if (!mark_stack_overflow) {</div><div class='del'>-	    if (mark_stack_ptr - mark_stack &lt; MARK_STACK_MAX) {</div><div class='del'>-		*mark_stack_ptr = ptr;</div><div class='del'>-		mark_stack_ptr++;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		mark_stack_overflow = 1;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    gc_mark_children(ptr, lev+1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_gc_mark(ptr)</div><div class='del'>-    VALUE ptr;</div><div class='del'>-{</div><div class='del'>-    gc_mark(ptr, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-gc_mark_children(ptr, lev)</div><div class='del'>-    VALUE ptr;</div><div class='del'>-    int lev;</div><div class='del'>-{</div><div class='del'>-    register RVALUE *obj = RANY(ptr);</div><div class='del'>-</div><div class='del'>-    goto marking;		/* skip */</div><div class='del'>-</div><div class='del'>-  again:</div><div class='del'>-    obj = RANY(ptr);</div><div class='del'>-    if (rb_special_const_p(ptr)) return; /* special const not marked */</div><div class='del'>-    if (obj-&gt;as.basic.flags == 0) return;       /* free cell */</div><div class='del'>-    if (obj-&gt;as.basic.flags &amp; FL_MARK) return;  /* already marked */</div><div class='del'>-    obj-&gt;as.basic.flags |= FL_MARK;</div><div class='del'>-</div><div class='del'>-  marking:</div><div class='del'>-    if (FL_TEST(obj, FL_EXIVAR)) {</div><div class='del'>-	rb_mark_generic_ivar(ptr);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch (obj-&gt;as.basic.flags &amp; T_MASK) {</div><div class='add'>+    switch (obj-&gt;flags &amp; T_MASK) {</div><div class='ctx'>       case T_NIL:</div><div class='ctx'>       case T_FIXNUM:</div><div class='del'>-	rb_bug("rb_gc_mark() called for broken object");</div><div class='add'>+	Bug("gc_mark() called for broken object");</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='del'>-      case T_NODE:</div><div class='del'>-	mark_source_filename(obj-&gt;as.node.nd_file);</div><div class='del'>-	switch (nd_type(obj)) {</div><div class='del'>-	  case NODE_IF:		/* 1,2,3 */</div><div class='del'>-	  case NODE_FOR:</div><div class='del'>-	  case NODE_ITER:</div><div class='del'>-	  case NODE_CREF:</div><div class='del'>-	  case NODE_WHEN:</div><div class='del'>-	  case NODE_MASGN:</div><div class='del'>-	  case NODE_RESCUE:</div><div class='del'>-	  case NODE_RESBODY:</div><div class='del'>-	  case NODE_CLASS:</div><div class='del'>-	    gc_mark((VALUE)obj-&gt;as.node.u2.node, lev);</div><div class='del'>-	    /* fall through */</div><div class='del'>-	  case NODE_BLOCK:	/* 1,3 */</div><div class='del'>-	  case NODE_ARRAY:</div><div class='del'>-	  case NODE_DSTR:</div><div class='del'>-	  case NODE_DXSTR:</div><div class='del'>-	  case NODE_DREGX:</div><div class='del'>-	  case NODE_DREGX_ONCE:</div><div class='del'>-	  case NODE_FBODY:</div><div class='del'>-	  case NODE_ENSURE:</div><div class='del'>-	  case NODE_CALL:</div><div class='del'>-	  case NODE_DEFS:</div><div class='del'>-	  case NODE_OP_ASGN1:</div><div class='del'>-	    gc_mark((VALUE)obj-&gt;as.node.u1.node, lev);</div><div class='del'>-	    /* fall through */</div><div class='del'>-	  case NODE_SUPER:	/* 3 */</div><div class='del'>-	  case NODE_FCALL:</div><div class='del'>-	  case NODE_DEFN:</div><div class='del'>-	  case NODE_NEWLINE:</div><div class='del'>-	    ptr = (VALUE)obj-&gt;as.node.u3.node;</div><div class='del'>-	    goto again;</div><div class='del'>-</div><div class='del'>-	  case NODE_WHILE:	/* 1,2 */</div><div class='del'>-	  case NODE_UNTIL:</div><div class='del'>-	  case NODE_AND:</div><div class='del'>-	  case NODE_OR:</div><div class='del'>-	  case NODE_CASE:</div><div class='del'>-	  case NODE_SCLASS:</div><div class='del'>-	  case NODE_DOT2:</div><div class='del'>-	  case NODE_DOT3:</div><div class='del'>-	  case NODE_FLIP2:</div><div class='del'>-	  case NODE_FLIP3:</div><div class='del'>-	  case NODE_MATCH2:</div><div class='del'>-	  case NODE_MATCH3:</div><div class='del'>-	  case NODE_OP_ASGN_OR:</div><div class='del'>-	  case NODE_OP_ASGN_AND:</div><div class='del'>-	  case NODE_MODULE:</div><div class='del'>-	  case NODE_ALIAS:</div><div class='del'>-	  case NODE_VALIAS:</div><div class='del'>-	  case NODE_ARGS:</div><div class='del'>-	    gc_mark((VALUE)obj-&gt;as.node.u1.node, lev);</div><div class='del'>-	    /* fall through */</div><div class='del'>-	  case NODE_METHOD:	/* 2 */</div><div class='del'>-	  case NODE_NOT:</div><div class='del'>-	  case NODE_GASGN:</div><div class='del'>-	  case NODE_LASGN:</div><div class='del'>-	  case NODE_DASGN:</div><div class='del'>-	  case NODE_DASGN_CURR:</div><div class='del'>-	  case NODE_IASGN:</div><div class='del'>-	  case NODE_CVDECL:</div><div class='del'>-	  case NODE_CVASGN:</div><div class='del'>-	  case NODE_COLON3:</div><div class='del'>-	  case NODE_OPT_N:</div><div class='del'>-	  case NODE_EVSTR:</div><div class='del'>-	  case NODE_UNDEF:</div><div class='del'>-	    ptr = (VALUE)obj-&gt;as.node.u2.node;</div><div class='del'>-	    goto again;</div><div class='del'>-</div><div class='del'>-	  case NODE_HASH:	/* 1 */</div><div class='del'>-	  case NODE_LIT:</div><div class='del'>-	  case NODE_STR:</div><div class='del'>-	  case NODE_XSTR:</div><div class='del'>-	  case NODE_DEFINED:</div><div class='del'>-	  case NODE_MATCH:</div><div class='del'>-	  case NODE_RETURN:</div><div class='del'>-	  case NODE_BREAK:</div><div class='del'>-	  case NODE_NEXT:</div><div class='del'>-	  case NODE_YIELD:</div><div class='del'>-	  case NODE_COLON2:</div><div class='del'>-	  case NODE_SPLAT:</div><div class='del'>-	  case NODE_TO_ARY:</div><div class='del'>-	  case NODE_SVALUE:</div><div class='del'>-	    ptr = (VALUE)obj-&gt;as.node.u1.node;</div><div class='del'>-	    goto again;</div><div class='del'>-</div><div class='del'>-	  case NODE_SCOPE:	/* 2,3 */</div><div class='del'>-	  case NODE_BLOCK_PASS:</div><div class='del'>-	  case NODE_CDECL:</div><div class='del'>-	    gc_mark((VALUE)obj-&gt;as.node.u3.node, lev);</div><div class='del'>-	    ptr = (VALUE)obj-&gt;as.node.u2.node;</div><div class='del'>-	    goto again;</div><div class='del'>-</div><div class='del'>-	  case NODE_ZARRAY:	/* - */</div><div class='del'>-	  case NODE_ZSUPER:</div><div class='del'>-	  case NODE_CFUNC:</div><div class='del'>-	  case NODE_VCALL:</div><div class='del'>-	  case NODE_GVAR:</div><div class='del'>-	  case NODE_LVAR:</div><div class='del'>-	  case NODE_DVAR:</div><div class='del'>-	  case NODE_IVAR:</div><div class='del'>-	  case NODE_CVAR:</div><div class='del'>-	  case NODE_NTH_REF:</div><div class='del'>-	  case NODE_BACK_REF:</div><div class='del'>-	  case NODE_REDO:</div><div class='del'>-	  case NODE_RETRY:</div><div class='del'>-	  case NODE_SELF:</div><div class='del'>-	  case NODE_NIL:</div><div class='del'>-	  case NODE_TRUE:</div><div class='del'>-	  case NODE_FALSE:</div><div class='del'>-	  case NODE_ATTRSET:</div><div class='del'>-	  case NODE_BLOCK_ARG:</div><div class='del'>-	  case NODE_POSTEXE:</div><div class='del'>-	    break;</div><div class='del'>-	  case NODE_ALLOCA:</div><div class='del'>-	    mark_locations_array((VALUE*)obj-&gt;as.node.u1.value,</div><div class='del'>-				 obj-&gt;as.node.u3.cnt);</div><div class='del'>-	    ptr = (VALUE)obj-&gt;as.node.u2.node;</div><div class='del'>-	    goto again;</div><div class='del'>-</div><div class='del'>-	  default:		/* unlisted NODE */</div><div class='del'>-	    if (is_pointer_to_heap(obj-&gt;as.node.u1.node)) {</div><div class='del'>-		gc_mark((VALUE)obj-&gt;as.node.u1.node, lev);</div><div class='del'>-	    }</div><div class='del'>-	    if (is_pointer_to_heap(obj-&gt;as.node.u2.node)) {</div><div class='del'>-		gc_mark((VALUE)obj-&gt;as.node.u2.node, lev);</div><div class='del'>-	    }</div><div class='del'>-	    if (is_pointer_to_heap(obj-&gt;as.node.u3.node)) {</div><div class='del'>-		gc_mark((VALUE)obj-&gt;as.node.u3.node, lev);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	return;			/* no need to mark class. */</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    gc_mark(obj-&gt;as.basic.klass, lev);</div><div class='del'>-    switch (obj-&gt;as.basic.flags &amp; T_MASK) {</div><div class='add'>+    if (obj-&gt;iv_tbl) mark_tbl(obj-&gt;iv_tbl);</div><div class='add'>+    gc_mark(obj-&gt;class);</div><div class='add'>+    switch (obj-&gt;flags &amp; T_MASK) {</div><div class='ctx'>       case T_ICLASS:</div><div class='add'>+	gc_mark(RCLASS(obj)-&gt;super);</div><div class='add'>+	if (RCLASS(obj)-&gt;c_tbl) mark_tbl(RCLASS(obj)-&gt;c_tbl);</div><div class='add'>+	break;</div><div class='ctx'>       case T_CLASS:</div><div class='add'>+	gc_mark(RCLASS(obj)-&gt;super);</div><div class='ctx'>       case T_MODULE:</div><div class='del'>-	mark_tbl(obj-&gt;as.klass.m_tbl, lev);</div><div class='del'>-	mark_tbl(obj-&gt;as.klass.iv_tbl, lev);</div><div class='del'>-	ptr = obj-&gt;as.klass.super;</div><div class='del'>-	goto again;</div><div class='del'>-</div><div class='add'>+	if (RCLASS(obj)-&gt;c_tbl) mark_tbl(RCLASS(obj)-&gt;c_tbl);</div><div class='add'>+	gc_mark(RBASIC(obj)-&gt;class);</div><div class='add'>+	break;</div><div class='ctx'>       case T_ARRAY:</div><div class='del'>-	if (FL_TEST(obj, ELTS_SHARED)) {</div><div class='del'>-	    ptr = obj-&gt;as.array.aux.shared;</div><div class='del'>-	    goto again;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    long i, len = obj-&gt;as.array.len;</div><div class='del'>-	    VALUE *ptr = obj-&gt;as.array.ptr;</div><div class='add'>+	{</div><div class='add'>+	    int i, len = RARRAY(obj)-&gt;len;</div><div class='add'>+	    VALUE *ptr = RARRAY(obj)-&gt;ptr;</div><div class='ctx'> </div><div class='del'>-	    for (i=0; i &lt; len; i++) {</div><div class='del'>-		gc_mark(*ptr++, lev);</div><div class='del'>-	    }</div><div class='add'>+	    for (i=0; i &lt; len; i++)</div><div class='add'>+		gc_mark(ptr[i]);</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='del'>-      case T_HASH:</div><div class='del'>-	mark_hash(obj-&gt;as.hash.tbl, lev);</div><div class='del'>-	ptr = obj-&gt;as.hash.ifnone;</div><div class='del'>-	goto again;</div><div class='del'>-</div><div class='add'>+      case T_DICT:</div><div class='add'>+	mark_dict(RDICT(obj)-&gt;tbl);</div><div class='add'>+	break;</div><div class='ctx'>       case T_STRING:</div><div class='del'>-#define STR_ASSOC FL_USER3   /* copied from string.c */</div><div class='del'>-	if (FL_TEST(obj, ELTS_SHARED|STR_ASSOC)) {</div><div class='del'>-	    ptr = obj-&gt;as.string.aux.shared;</div><div class='del'>-	    goto again;</div><div class='del'>-	}</div><div class='add'>+	if (RSTRING(obj)-&gt;orig) gc_mark(RSTRING(obj)-&gt;orig);</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='ctx'>       case T_DATA:</div><div class='del'>-	if (obj-&gt;as.data.dmark) (*obj-&gt;as.data.dmark)(DATA_PTR(obj));</div><div class='add'>+	if (RDATA(obj)-&gt;dmark) (*RDATA(obj)-&gt;dmark)(DATA_PTR(obj));</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='ctx'>       case T_OBJECT:</div><div class='del'>-	mark_tbl(obj-&gt;as.object.iv_tbl, lev);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_FILE:</div><div class='ctx'>       case T_REGEXP:</div><div class='ctx'>       case T_FLOAT:</div><div class='ctx'>       case T_BIGNUM:</div><div class='del'>-      case T_BLKTAG:</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_MATCH:</div><div class='del'>-	if (obj-&gt;as.match.str) {</div><div class='del'>-	    ptr = obj-&gt;as.match.str;</div><div class='del'>-	    goto again;</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_VARMAP:</div><div class='del'>-	gc_mark(obj-&gt;as.varmap.val, lev);</div><div class='del'>-	ptr = (VALUE)obj-&gt;as.varmap.next;</div><div class='del'>-	goto again;</div><div class='del'>-</div><div class='del'>-      case T_SCOPE:</div><div class='del'>-	if (obj-&gt;as.scope.local_vars &amp;&amp; (obj-&gt;as.scope.flags &amp; SCOPE_MALLOC)) {</div><div class='del'>-	    int n = obj-&gt;as.scope.local_tbl[0]+1;</div><div class='del'>-	    VALUE *vars = &amp;obj-&gt;as.scope.local_vars[-1];</div><div class='del'>-</div><div class='del'>-	    while (n--) {</div><div class='del'>-		gc_mark(*vars++, lev);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='ctx'>       case T_STRUCT:</div><div class='ctx'> 	{</div><div class='del'>-	    long len = obj-&gt;as.rstruct.len;</div><div class='del'>-	    VALUE *ptr = obj-&gt;as.rstruct.ptr;</div><div class='add'>+	    int i, len = RSTRUCT(obj)-&gt;len;</div><div class='add'>+	    struct kv_pair *ptr = RSTRUCT(obj)-&gt;tbl;</div><div class='ctx'> </div><div class='del'>-	    while (len--) {</div><div class='del'>-		gc_mark(*ptr++, lev);</div><div class='del'>-	    }</div><div class='add'>+	    for (i=0; i &lt; len; i++)</div><div class='add'>+		gc_mark(ptr[i].value);</div><div class='ctx'> 	}</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='ctx'>       default:</div><div class='del'>-	rb_bug("rb_gc_mark(): unknown data type 0x%lx(0x%lx) %s",</div><div class='del'>-	       obj-&gt;as.basic.flags &amp; T_MASK, obj,</div><div class='del'>-	       is_pointer_to_heap(obj) ? "corrupted object" : "non object");</div><div class='add'>+	Bug("gc_mark(): unknown data type %d", obj-&gt;flags &amp; T_MASK);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void obj_free _((VALUE));</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-finalize_list(p)</div><div class='del'>-    RVALUE *p;</div><div class='del'>-{</div><div class='del'>-    while (p) {</div><div class='del'>-	RVALUE *tmp = p-&gt;as.free.next;</div><div class='del'>-	run_final((VALUE)p);</div><div class='del'>-	if (!FL_TEST(p, FL_SINGLETON)) { /* not freeing page */</div><div class='del'>-	    p-&gt;as.free.flags = 0;</div><div class='del'>-	    p-&gt;as.free.next = freelist;</div><div class='del'>-	    freelist = p;</div><div class='del'>-	}</div><div class='del'>-	p = tmp;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-free_unused_heaps()</div><div class='del'>-{</div><div class='del'>-    int i, j;</div><div class='del'>-</div><div class='del'>-    for (i = j = 1; j &lt; heaps_used; i++) {</div><div class='del'>-	if (heaps[i].limit == 0) {</div><div class='del'>-	    free(heaps[i].membase);</div><div class='del'>-	    heaps_used--;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    if (i != j) {</div><div class='del'>-		heaps[j] = heaps[i];</div><div class='del'>-	    }</div><div class='del'>-	    j++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void rb_gc_abort_threads(void);</div><div class='add'>+#define MIN_FREE_OBJ 512</div><div class='ctx'> </div><div class='ctx'> static void</div><div class='ctx'> gc_sweep()</div><div class='ctx'> {</div><div class='del'>-    RVALUE *p, *pend, *final_list;</div><div class='add'>+    struct heap_block *heap = heap_link;</div><div class='ctx'>     int freed = 0;</div><div class='del'>-    int i;</div><div class='del'>-    unsigned long live = 0;</div><div class='del'>-    unsigned long free_min = 0;</div><div class='ctx'> </div><div class='del'>-    for (i = 0; i &lt; heaps_used; i++) {</div><div class='del'>-        free_min += heaps[i].limit;</div><div class='del'>-    }</div><div class='del'>-    free_min = free_min * 0.2;</div><div class='del'>-    if (free_min &lt; FREE_MIN)</div><div class='del'>-        free_min = FREE_MIN;</div><div class='del'>-</div><div class='del'>-    if (ruby_in_compile &amp;&amp; ruby_parser_stack_on_heap()) {</div><div class='del'>-	/* should not reclaim nodes during compilation</div><div class='del'>-           if yacc's semantic stack is not allocated on machine stack */</div><div class='del'>-	for (i = 0; i &lt; heaps_used; i++) {</div><div class='del'>-	    p = heaps[i].slot; pend = p + heaps[i].limit;</div><div class='del'>-	    while (p &lt; pend) {</div><div class='del'>-		if (!(p-&gt;as.basic.flags&amp;FL_MARK) &amp;&amp; BUILTIN_TYPE(p) == T_NODE)</div><div class='del'>-		    gc_mark((VALUE)p, 0);</div><div class='del'>-		p++;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    mark_source_filename(ruby_sourcefile);</div><div class='del'>-    if (source_filenames) {</div><div class='del'>-        st_foreach(source_filenames, sweep_source_filename, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    freelist = 0;</div><div class='del'>-    final_list = deferred_final_list;</div><div class='del'>-    deferred_final_list = 0;</div><div class='del'>-    for (i = 0; i &lt; heaps_used; i++) {</div><div class='add'>+    freelist = Qnil;</div><div class='add'>+    while (heap) {</div><div class='add'>+	struct RVALUE *p, *pend;</div><div class='add'>+	struct RVALUE *nfreelist;</div><div class='ctx'> 	int n = 0;</div><div class='del'>-	RVALUE *free = freelist;</div><div class='del'>-	RVALUE *final = final_list;</div><div class='ctx'> </div><div class='del'>-	p = heaps[i].slot; pend = p + heaps[i].limit;</div><div class='add'>+	nfreelist = freelist;</div><div class='add'>+	p = heap-&gt;beg; pend = heap-&gt;end;</div><div class='ctx'> 	while (p &lt; pend) {</div><div class='del'>-	    if (!(p-&gt;as.basic.flags &amp; FL_MARK)) {</div><div class='del'>-		if (p-&gt;as.basic.flags) {</div><div class='del'>-		    obj_free((VALUE)p);</div><div class='del'>-		}</div><div class='del'>-		if (need_call_final &amp;&amp; FL_TEST(p, FL_FINALIZE)) {</div><div class='del'>-		    p-&gt;as.free.flags = FL_MARK; /* remain marked */</div><div class='del'>-		    p-&gt;as.free.next = final_list;</div><div class='del'>-		    final_list = p;</div><div class='del'>-		}</div><div class='del'>-		else {</div><div class='del'>-		    p-&gt;as.free.flags = 0;</div><div class='del'>-		    p-&gt;as.free.next = freelist;</div><div class='del'>-		    freelist = p;</div><div class='del'>-		}</div><div class='add'>+	    </div><div class='add'>+	    if (!(RBASIC(p)-&gt;flags &amp; FL_MARK)) {</div><div class='add'>+		if (RBASIC(p)-&gt;flags) obj_free(p);</div><div class='add'>+		p-&gt;as.free.flag = 0;</div><div class='add'>+		p-&gt;as.free.next = nfreelist;</div><div class='add'>+		nfreelist = p;</div><div class='ctx'> 		n++;</div><div class='ctx'> 	    }</div><div class='del'>-	    else if (RBASIC(p)-&gt;flags == FL_MARK) {</div><div class='del'>-		/* objects to be finalized */</div><div class='del'>-		/* do nothing remain marked */</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		RBASIC(p)-&gt;flags &amp;= ~FL_MARK;</div><div class='del'>-		live++;</div><div class='del'>-	    }</div><div class='add'>+	    RBASIC(p)-&gt;flags &amp;= ~FL_MARK;</div><div class='ctx'> 	    p++;</div><div class='ctx'> 	}</div><div class='del'>-	if (n == heaps[i].limit &amp;&amp; freed &gt; free_min) {</div><div class='del'>-	    RVALUE *pp;</div><div class='del'>-</div><div class='del'>-	    heaps[i].limit = 0;</div><div class='del'>-	    for (pp = final_list; pp != final; pp = pp-&gt;as.free.next) {</div><div class='del'>-		pp-&gt;as.free.flags |= FL_SINGLETON; /* freeing page mark */</div><div class='add'>+	if (n == SEG_SLOTS) {</div><div class='add'>+	    struct heap_block *link = heap_link;</div><div class='add'>+	    if (heap != link) {</div><div class='add'>+		while (link) {</div><div class='add'>+		    if (link-&gt;next &amp;&amp; link-&gt;next == heap) {</div><div class='add'>+			link-&gt;next = heap-&gt;next;</div><div class='add'>+			break;</div><div class='add'>+		    }</div><div class='add'>+		    link = link-&gt;next;</div><div class='add'>+		}</div><div class='add'>+		if (link == Qnil) {</div><div class='add'>+		    Bug("non-existing heap at 0x%x", heap);</div><div class='add'>+		}</div><div class='ctx'> 	    }</div><div class='del'>-	    freelist = free;	/* cancel this page from freelist */</div><div class='add'>+	    free(heap);</div><div class='add'>+	    heap_size -= SEG_SLOTS;</div><div class='add'>+	    heap = link;</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    freed += n;</div><div class='add'>+	    freelist = nfreelist;</div><div class='ctx'> 	}</div><div class='add'>+	heap = heap-&gt;next;</div><div class='ctx'>     }</div><div class='del'>-    if (malloc_increase &gt; malloc_limit) {</div><div class='del'>-	malloc_limit += (malloc_increase - malloc_limit) * (double)live / (live + freed);</div><div class='del'>-	if (malloc_limit &lt; GC_MALLOC_LIMIT) malloc_limit = GC_MALLOC_LIMIT;</div><div class='del'>-    }</div><div class='del'>-    malloc_increase = 0;</div><div class='del'>-    if (freed &lt; free_min) {</div><div class='add'>+    if (freed &lt; heap_size/4) {</div><div class='ctx'> 	add_heap();</div><div class='ctx'>     }</div><div class='del'>-    during_gc = 0;</div><div class='del'>-</div><div class='del'>-    /* clear finalization list */</div><div class='del'>-    if (final_list) {</div><div class='del'>-	deferred_final_list = final_list;</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    free_unused_heaps();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_gc_force_recycle(p)</div><div class='del'>-    VALUE p;</div><div class='add'>+static</div><div class='add'>+freemethod(key, body)</div><div class='add'>+    ID key;</div><div class='add'>+    void *body;</div><div class='ctx'> {</div><div class='del'>-    RANY(p)-&gt;as.free.flags = 0;</div><div class='del'>-    RANY(p)-&gt;as.free.next = freelist;</div><div class='del'>-    freelist = RANY(p);</div><div class='add'>+    method_free(body);</div><div class='add'>+    return ST_CONTINUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='ctx'> obj_free(obj)</div><div class='del'>-    VALUE obj;</div><div class='add'>+    struct RBasic *obj;</div><div class='ctx'> {</div><div class='del'>-    switch (RANY(obj)-&gt;as.basic.flags &amp; T_MASK) {</div><div class='add'>+    switch (obj-&gt;flags &amp; T_MASK) {</div><div class='ctx'>       case T_NIL:</div><div class='ctx'>       case T_FIXNUM:</div><div class='del'>-      case T_TRUE:</div><div class='del'>-      case T_FALSE:</div><div class='del'>-	rb_bug("obj_free() called for broken object");</div><div class='add'>+	Bug("obj_free() called for broken object");</div><div class='ctx'> 	break;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (FL_TEST(obj, FL_EXIVAR)) {</div><div class='del'>-	rb_free_generic_ivar((VALUE)obj);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    switch (RANY(obj)-&gt;as.basic.flags &amp; T_MASK) {</div><div class='add'>+    if (obj-&gt;iv_tbl) st_free_table(obj-&gt;iv_tbl);</div><div class='add'>+    switch (obj-&gt;flags &amp; T_MASK) {</div><div class='ctx'>       case T_OBJECT:</div><div class='del'>-	if (RANY(obj)-&gt;as.object.iv_tbl) {</div><div class='del'>-	    st_free_table(RANY(obj)-&gt;as.object.iv_tbl);</div><div class='del'>-	}</div><div class='ctx'> 	break;</div><div class='ctx'>       case T_MODULE:</div><div class='ctx'>       case T_CLASS:</div><div class='del'>-	rb_clear_cache_by_class((VALUE)obj);</div><div class='del'>-	st_free_table(RANY(obj)-&gt;as.klass.m_tbl);</div><div class='del'>-	if (RANY(obj)-&gt;as.object.iv_tbl) {</div><div class='del'>-	    st_free_table(RANY(obj)-&gt;as.object.iv_tbl);</div><div class='del'>-	}</div><div class='add'>+	rb_clear_cache2(obj);</div><div class='add'>+	st_foreach(RCLASS(obj)-&gt;m_tbl, freemethod);</div><div class='add'>+	st_free_table(RCLASS(obj)-&gt;m_tbl);</div><div class='add'>+	if (RCLASS(obj)-&gt;c_tbl)</div><div class='add'>+	    st_free_table(RCLASS(obj)-&gt;c_tbl);</div><div class='ctx'> 	break;</div><div class='ctx'>       case T_STRING:</div><div class='del'>-	if (RANY(obj)-&gt;as.string.ptr &amp;&amp; !FL_TEST(obj, ELTS_SHARED)) {</div><div class='del'>-	    RUBY_CRITICAL(free(RANY(obj)-&gt;as.string.ptr));</div><div class='del'>-	}</div><div class='add'>+	if (RSTRING(obj)-&gt;orig == Qnil) free(RSTRING(obj)-&gt;ptr);</div><div class='ctx'> 	break;</div><div class='ctx'>       case T_ARRAY:</div><div class='del'>-	if (RANY(obj)-&gt;as.array.ptr &amp;&amp; !FL_TEST(obj, ELTS_SHARED)) {</div><div class='del'>-	    RUBY_CRITICAL(free(RANY(obj)-&gt;as.array.ptr));</div><div class='del'>-	}</div><div class='add'>+	free(RARRAY(obj)-&gt;ptr);</div><div class='ctx'> 	break;</div><div class='del'>-      case T_HASH:</div><div class='del'>-	if (RANY(obj)-&gt;as.hash.tbl) {</div><div class='del'>-	    st_free_table(RANY(obj)-&gt;as.hash.tbl);</div><div class='del'>-	}</div><div class='add'>+      case T_DICT:</div><div class='add'>+	st_free_table(RDICT(obj)-&gt;tbl);</div><div class='ctx'> 	break;</div><div class='ctx'>       case T_REGEXP:</div><div class='del'>-	if (RANY(obj)-&gt;as.regexp.ptr) {</div><div class='del'>-	    re_free_pattern(RANY(obj)-&gt;as.regexp.ptr);</div><div class='del'>-	}</div><div class='del'>-	if (RANY(obj)-&gt;as.regexp.str) {</div><div class='del'>-	    RUBY_CRITICAL(free(RANY(obj)-&gt;as.regexp.str));</div><div class='del'>-	}</div><div class='add'>+	reg_free(RREGEXP(obj)-&gt;ptr);</div><div class='add'>+	free(RREGEXP(obj)-&gt;str);</div><div class='ctx'> 	break;</div><div class='ctx'>       case T_DATA:</div><div class='del'>-	if (DATA_PTR(obj)) {</div><div class='del'>-	    if ((long)RANY(obj)-&gt;as.data.dfree == -1) {</div><div class='del'>-		RUBY_CRITICAL(free(DATA_PTR(obj)));</div><div class='del'>-	    }</div><div class='del'>-	    else if (RANY(obj)-&gt;as.data.dfree) {</div><div class='del'>-		(*RANY(obj)-&gt;as.data.dfree)(DATA_PTR(obj));</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-      case T_MATCH:</div><div class='del'>-	if (RANY(obj)-&gt;as.match.regs) {</div><div class='del'>-	    re_free_registers(RANY(obj)-&gt;as.match.regs);</div><div class='del'>-	    RUBY_CRITICAL(free(RANY(obj)-&gt;as.match.regs));</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-      case T_FILE:</div><div class='del'>-	if (RANY(obj)-&gt;as.file.fptr) {</div><div class='del'>-	    rb_io_fptr_finalize(RANY(obj)-&gt;as.file.fptr);</div><div class='del'>-	    RUBY_CRITICAL(free(RANY(obj)-&gt;as.file.fptr));</div><div class='del'>-	}</div><div class='add'>+	if (RDATA(obj)-&gt;dfree) (*RDATA(obj)-&gt;dfree)(DATA_PTR(obj));</div><div class='add'>+	free(DATA_PTR(obj));</div><div class='ctx'> 	break;</div><div class='ctx'>       case T_ICLASS:</div><div class='ctx'> 	/* iClass shares table with the module */</div><div class='del'>-	break;</div><div class='del'>-</div><div class='ctx'>       case T_FLOAT:</div><div class='del'>-      case T_VARMAP:</div><div class='del'>-      case T_BLKTAG:</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='del'>-      case T_BIGNUM:</div><div class='del'>-	if (RANY(obj)-&gt;as.bignum.digits) {</div><div class='del'>-	    RUBY_CRITICAL(free(RANY(obj)-&gt;as.bignum.digits));</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-      case T_NODE:</div><div class='del'>-	switch (nd_type(obj)) {</div><div class='del'>-	  case NODE_SCOPE:</div><div class='del'>-	    if (RANY(obj)-&gt;as.node.u1.tbl) {</div><div class='del'>-		RUBY_CRITICAL(free(RANY(obj)-&gt;as.node.u1.tbl));</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	  case NODE_ALLOCA:</div><div class='del'>-	    RUBY_CRITICAL(free(RANY(obj)-&gt;as.node.u1.node));</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	return;			/* no need to free iv_tbl */</div><div class='del'>-</div><div class='del'>-      case T_SCOPE:</div><div class='del'>-	if (RANY(obj)-&gt;as.scope.local_vars &amp;&amp;</div><div class='del'>-            RANY(obj)-&gt;as.scope.flags != SCOPE_ALLOCA) {</div><div class='del'>-	    VALUE *vars = RANY(obj)-&gt;as.scope.local_vars-1;</div><div class='del'>-	    if (!(RANY(obj)-&gt;as.scope.flags &amp; SCOPE_CLONE) &amp;&amp; vars[0] == 0)</div><div class='del'>-		RUBY_CRITICAL(free(RANY(obj)-&gt;as.scope.local_tbl));</div><div class='del'>-	    if (RANY(obj)-&gt;as.scope.flags &amp; SCOPE_MALLOC)</div><div class='del'>-		RUBY_CRITICAL(free(vars));</div><div class='del'>-	}</div><div class='del'>-	break;</div><div class='del'>-</div><div class='ctx'>       case T_STRUCT:</div><div class='del'>-	if (RANY(obj)-&gt;as.rstruct.ptr) {</div><div class='del'>-	    RUBY_CRITICAL(free(RANY(obj)-&gt;as.rstruct.ptr));</div><div class='del'>-	}</div><div class='add'>+	free(RSTRUCT(obj)-&gt;name);</div><div class='add'>+	free(RSTRUCT(obj)-&gt;tbl);</div><div class='add'>+	break;</div><div class='add'>+      case T_BIGNUM:</div><div class='add'>+	free(RBIGNUM(obj)-&gt;digits);</div><div class='ctx'> 	break;</div><div class='del'>-</div><div class='ctx'>       default:</div><div class='del'>-	rb_bug("gc_sweep(): unknown data type 0x%lx(0x%lx)",</div><div class='del'>-	       RANY(obj)-&gt;as.basic.flags &amp; T_MASK, obj);</div><div class='add'>+	Bug("gc_sweep(): unknown data type %d", obj-&gt;flags &amp; T_MASK);</div><div class='ctx'>     }</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> void</div><div class='del'>-rb_gc_mark_frame(frame)</div><div class='del'>-    struct FRAME *frame;</div><div class='del'>-{</div><div class='del'>-    gc_mark((VALUE)frame-&gt;node, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef __GNUC__</div><div class='del'>-#if defined(__human68k__) || defined(DJGPP)</div><div class='del'>-#undef rb_setjmp</div><div class='del'>-#undef rb_jmp_buf</div><div class='del'>-#if defined(__human68k__)</div><div class='del'>-typedef unsigned long rb_jmp_buf[8];</div><div class='del'>-__asm__ (".even\n\</div><div class='del'>-_rb_setjmp:\n\</div><div class='del'>-	move.l	4(sp),a0\n\</div><div class='del'>-	movem.l	d3-d7/a3-a5,(a0)\n\</div><div class='del'>-	moveq.l	#0,d0\n\</div><div class='del'>-	rts");</div><div class='del'>-#else</div><div class='del'>-#if defined(DJGPP)</div><div class='del'>-typedef unsigned long rb_jmp_buf[6];</div><div class='del'>-__asm__ (".align 4\n\</div><div class='del'>-_rb_setjmp:\n\</div><div class='del'>-	pushl	%ebp\n\</div><div class='del'>-	movl	%esp,%ebp\n\</div><div class='del'>-	movl	8(%ebp),%ebp\n\</div><div class='del'>-	movl	%eax,(%ebp)\n\</div><div class='del'>-	movl	%ebx,4(%ebp)\n\</div><div class='del'>-	movl	%ecx,8(%ebp)\n\</div><div class='del'>-	movl	%edx,12(%ebp)\n\</div><div class='del'>-	movl	%esi,16(%ebp)\n\</div><div class='del'>-	movl	%edi,20(%ebp)\n\</div><div class='del'>-	popl	%ebp\n\</div><div class='del'>-	xorl	%eax,%eax\n\</div><div class='del'>-	ret");</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-int rb_setjmp (rb_jmp_buf);</div><div class='del'>-#endif /* __human68k__ or DJGPP */</div><div class='del'>-#endif /* __GNUC__ */</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-garbage_collect()</div><div class='add'>+gc()</div><div class='ctx'> {</div><div class='add'>+    struct literal_list *lit;</div><div class='ctx'>     struct gc_list *list;</div><div class='del'>-    struct FRAME * volatile frame; /* gcc 2.7.2.3 -O2 bug??  */</div><div class='add'>+    struct ENVIRON *env;</div><div class='add'>+    int i, max;</div><div class='ctx'>     jmp_buf save_regs_gc_mark;</div><div class='del'>-    SET_STACK_END;</div><div class='del'>-</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_gc()");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    if (dont_gc || during_gc) {</div><div class='del'>-	if (!freelist) {</div><div class='del'>-	    add_heap();</div><div class='del'>-	}</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    if (during_gc) return;</div><div class='del'>-    during_gc++;</div><div class='del'>-</div><div class='del'>-    init_mark_stack();</div><div class='add'>+    VALUE stack_end;</div><div class='ctx'> </div><div class='del'>-    gc_mark((VALUE)ruby_current_node, 0);</div><div class='add'>+    if (dont_gc) return;</div><div class='add'>+    dont_gc++;</div><div class='ctx'> </div><div class='del'>-    /* mark frame stack */</div><div class='del'>-    for (frame = ruby_frame; frame; frame = frame-&gt;prev) {</div><div class='del'>-	rb_gc_mark_frame(frame);</div><div class='del'>-	if (frame-&gt;tmp) {</div><div class='del'>-	    struct FRAME *tmp = frame-&gt;tmp;</div><div class='del'>-	    while (tmp) {</div><div class='del'>-		rb_gc_mark_frame(tmp);</div><div class='del'>-		tmp = tmp-&gt;prev;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    gc_mark((VALUE)ruby_scope, 0);</div><div class='del'>-    gc_mark((VALUE)ruby_dyna_vars, 0);</div><div class='del'>-    if (finalizer_table) {</div><div class='del'>-	mark_tbl(finalizer_table, 0);</div><div class='add'>+    /* mark env stack */</div><div class='add'>+    for (env = the_env; env; env = env-&gt;prev) {</div><div class='add'>+	gc_mark(env-&gt;self);</div><div class='add'>+	if (env-&gt;argv)</div><div class='add'>+	    mark_locations_array(env-&gt;argv, env-&gt;argc);</div><div class='add'>+	if (env-&gt;local_vars)</div><div class='add'>+	    mark_locations_array(env-&gt;local_vars, env-&gt;local_tbl[0]);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     FLUSH_REGISTER_WINDOWS;</div><div class='del'>-    /* This assumes that all registers are saved into the jmp_buf (and stack) */</div><div class='del'>-    rb_setjmp(save_regs_gc_mark);</div><div class='del'>-    mark_locations_array((VALUE*)save_regs_gc_mark, sizeof(save_regs_gc_mark) / sizeof(VALUE *));</div><div class='del'>-#if STACK_GROW_DIRECTION &lt; 0</div><div class='del'>-    rb_gc_mark_locations((VALUE*)STACK_END, rb_gc_stack_start);</div><div class='del'>-#elif STACK_GROW_DIRECTION &gt; 0</div><div class='del'>-    rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)STACK_END + 1);</div><div class='del'>-#else</div><div class='del'>-    if ((VALUE*)STACK_END &lt; rb_gc_stack_start)</div><div class='del'>-	rb_gc_mark_locations((VALUE*)STACK_END, rb_gc_stack_start);</div><div class='del'>-    else</div><div class='del'>-	rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)STACK_END + 1);</div><div class='del'>-#endif</div><div class='del'>-#ifdef __ia64</div><div class='del'>-    /* mark backing store (flushed register window on the stack) */</div><div class='del'>-    /* the basic idea from guile GC code                         */</div><div class='del'>-    rb_gc_mark_locations(rb_gc_register_stack_start, (VALUE*)rb_ia64_bsp());</div><div class='add'>+    /* This assumes that all registers are saved into the jmp_buf */</div><div class='add'>+    setjmp(save_regs_gc_mark);</div><div class='add'>+    mark_locations((VALUE*)save_regs_gc_mark,</div><div class='add'>+		   (VALUE*)(((char*)save_regs_gc_mark)+sizeof(save_regs_gc_mark)));</div><div class='add'>+    mark_locations((VALUE*)save_regs_gc_mark,</div><div class='add'>+		   sizeof save_regs_gc_mark/sizeof(VALUE));</div><div class='add'>+    mark_locations(stack_start_ptr, (VALUE*) &amp;stack_end);</div><div class='add'>+#if defined(THINK_C)</div><div class='add'>+    mark_locations(((char*)stack_start_ptr + 2),</div><div class='add'>+		   ((char*)&amp;stack_end + 2));</div><div class='ctx'> #endif</div><div class='del'>-#if defined(__human68k__) || defined(__mc68000__)</div><div class='del'>-    rb_gc_mark_locations((VALUE*)((char*)STACK_END + 2),</div><div class='del'>-			 (VALUE*)((char*)rb_gc_stack_start + 2));</div><div class='del'>-#endif</div><div class='del'>-    rb_gc_mark_threads();</div><div class='ctx'> </div><div class='ctx'>     /* mark protected global variables */</div><div class='del'>-    for (list = global_List; list; list = list-&gt;next) {</div><div class='del'>-	rb_gc_mark_maybe(*list-&gt;varptr);</div><div class='add'>+    for (list = Global_List; list; list = list-&gt;next) {</div><div class='add'>+	gc_mark(*list-&gt;varptr);</div><div class='ctx'>     }</div><div class='del'>-    rb_mark_end_proc();</div><div class='del'>-    rb_gc_mark_global_tbl();</div><div class='del'>-</div><div class='del'>-    rb_mark_tbl(rb_class_tbl);</div><div class='del'>-    rb_gc_mark_trap_list();</div><div class='del'>-</div><div class='del'>-    /* mark generic instance variables for special constants */</div><div class='del'>-    rb_mark_generic_ivar_tbl();</div><div class='del'>-</div><div class='del'>-    rb_gc_mark_parser();</div><div class='del'>-</div><div class='del'>-    /* gc_mark objects whose marking are not completed*/</div><div class='del'>-    do {</div><div class='del'>-	while (!MARK_STACK_EMPTY) {</div><div class='del'>-	    if (mark_stack_overflow){</div><div class='del'>-		gc_mark_all();</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		gc_mark_rest();</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	rb_gc_abort_threads();</div><div class='del'>-    } while (!MARK_STACK_EMPTY);</div><div class='del'>-</div><div class='del'>-    gc_sweep();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_gc()</div><div class='del'>-{</div><div class='del'>-    garbage_collect();</div><div class='del'>-    rb_gc_finalize_deferred();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     GC.start                     =&gt; nil</div><div class='del'>- *     gc.garbage_collect           =&gt; nil</div><div class='del'>- *     ObjectSpace.garbage_collect  =&gt; nil</div><div class='del'>- *</div><div class='del'>- *  Initiates garbage collection, unless manually disabled.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_gc_start()</div><div class='del'>-{</div><div class='del'>-    rb_gc();</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-ruby_set_stack_size(size)</div><div class='del'>-    size_t size;</div><div class='del'>-{</div><div class='del'>-#ifndef STACK_LEVEL_MAX</div><div class='del'>-    STACK_LEVEL_MAX = size / sizeof(VALUE);</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-Init_stack(addr)</div><div class='del'>-    VALUE *addr;</div><div class='del'>-{</div><div class='del'>-#ifdef __ia64</div><div class='del'>-    if (rb_gc_register_stack_start == 0) {</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'>-        rb_gc_register_stack_start = (4ULL&lt;&lt;61);</div><div class='del'>-# elif defined(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE)</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'>-        rb_gc_register_stack_start = (VALUE*)__libc_ia64_register_backing_store_base;</div><div class='del'>-# endif</div><div class='add'>+    /* mark literal objects */</div><div class='add'>+    for (lit = Literal_List; lit; lit = lit-&gt;next) {</div><div class='add'>+	gc_mark(lit-&gt;val);</div><div class='ctx'>     }</div><div class='del'>-    {</div><div class='del'>-        VALUE *bsp = (VALUE*)rb_ia64_bsp();</div><div class='del'>-        if (rb_gc_register_stack_start == 0 ||</div><div class='del'>-            bsp &lt; rb_gc_register_stack_start) {</div><div class='del'>-            rb_gc_register_stack_start = bsp;</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#if defined(_WIN32) || defined(__CYGWIN__)</div><div class='del'>-    MEMORY_BASIC_INFORMATION m;</div><div class='del'>-    memset(&amp;m, 0, sizeof(m));</div><div class='del'>-    VirtualQuery(&amp;m, &amp;m, sizeof(m));</div><div class='del'>-    rb_gc_stack_start =</div><div class='del'>-	STACK_UPPER((VALUE *)&amp;m, (VALUE *)m.BaseAddress,</div><div class='del'>-		    (VALUE *)((char *)m.BaseAddress + m.RegionSize) - 1);</div><div class='del'>-#elif defined(STACK_END_ADDRESS)</div><div class='del'>-    {</div><div class='del'>-        extern void *STACK_END_ADDRESS;</div><div class='del'>-        rb_gc_stack_start = STACK_END_ADDRESS;</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    if (!addr) addr = (void *)&amp;addr;</div><div class='del'>-    STACK_UPPER(&amp;addr, addr, ++addr);</div><div class='del'>-    if (rb_gc_stack_start) {</div><div class='del'>-	if (STACK_UPPER(&amp;addr,</div><div class='del'>-			rb_gc_stack_start &gt; addr,</div><div class='del'>-			rb_gc_stack_start &lt; addr))</div><div class='del'>-	    rb_gc_stack_start = addr;</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    rb_gc_stack_start = addr;</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_GETRLIMIT</div><div class='del'>-    {</div><div class='del'>-	struct rlimit rlim;</div><div class='ctx'> </div><div class='del'>-	if (getrlimit(RLIMIT_STACK, &amp;rlim) == 0) {</div><div class='del'>-	    unsigned int space = rlim.rlim_cur/5;</div><div class='add'>+    gc_mark_global_tbl();</div><div class='add'>+    mark_tbl(rb_class_tbl);</div><div class='ctx'> </div><div class='del'>-	    if (space &gt; 1024*1024) space = 1024*1024;</div><div class='del'>-	    STACK_LEVEL_MAX = (rlim.rlim_cur - space) / sizeof(VALUE);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void ruby_init_stack(VALUE *addr</div><div class='del'>-#ifdef __ia64</div><div class='del'>-    , void *bsp</div><div class='del'>-#endif</div><div class='del'>-    )</div><div class='del'>-{</div><div class='del'>-    if (!rb_gc_stack_start ||</div><div class='del'>-        STACK_UPPER(&amp;addr,</div><div class='del'>-                    rb_gc_stack_start &gt; addr,</div><div class='del'>-                    rb_gc_stack_start &lt; addr)) {</div><div class='del'>-        rb_gc_stack_start = addr;</div><div class='del'>-    }</div><div class='del'>-#ifdef __ia64</div><div class='del'>-    if (!rb_gc_register_stack_start ||</div><div class='del'>-        (VALUE*)bsp &lt; rb_gc_register_stack_start) {</div><div class='del'>-        rb_gc_register_stack_start = (VALUE*)bsp;</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-#ifdef HAVE_GETRLIMIT</div><div class='del'>-    {</div><div class='del'>-        struct rlimit rlim;</div><div class='del'>-</div><div class='del'>-        if (getrlimit(RLIMIT_STACK, &amp;rlim) == 0) {</div><div class='del'>-            unsigned int space = rlim.rlim_cur/5;</div><div class='del'>-</div><div class='del'>-            if (space &gt; 1024*1024) space = 1024*1024;</div><div class='del'>-            STACK_LEVEL_MAX = (rlim.rlim_cur - space) / sizeof(VALUE);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-#elif defined _WIN32</div><div class='del'>-    {</div><div class='del'>-	MEMORY_BASIC_INFORMATION mi;</div><div class='del'>-	DWORD size;</div><div class='del'>-	DWORD space;</div><div class='del'>-</div><div class='del'>-	if (VirtualQuery(&amp;mi, &amp;mi, sizeof(mi))) {</div><div class='del'>-	    size = (char *)mi.BaseAddress - (char *)mi.AllocationBase;</div><div class='del'>-	    space = size / 5;</div><div class='del'>-	    if (space &gt; 1024*1024) space = 1024*1024;</div><div class='del'>-	    STACK_LEVEL_MAX = (size - space) / sizeof(VALUE);</div><div class='del'>-	}</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'>- * Document-class: ObjectSpace</div><div class='del'>- *</div><div class='del'>- *  The &lt;code&gt;ObjectSpace&lt;/code&gt; module contains a number of routines</div><div class='del'>- *  that interact with the garbage collection facility and allow you to</div><div class='del'>- *  traverse all living objects with an iterator.</div><div class='del'>- *</div><div class='del'>- *  &lt;code&gt;ObjectSpace&lt;/code&gt; also provides support for object</div><div class='del'>- *  finalizers, procs that will be called when a specific object is</div><div class='del'>- *  about to be destroyed by garbage collection.</div><div class='del'>- *</div><div class='del'>- *     include ObjectSpace</div><div class='del'>- *</div><div class='del'>- *</div><div class='del'>- *     a = "A"</div><div class='del'>- *     b = "B"</div><div class='del'>- *     c = "C"</div><div class='del'>- *</div><div class='del'>- *</div><div class='del'>- *     define_finalizer(a, proc {|id| puts "Finalizer one on #{id}" })</div><div class='del'>- *     define_finalizer(a, proc {|id| puts "Finalizer two on #{id}" })</div><div class='del'>- *     define_finalizer(b, proc {|id| puts "Finalizer three on #{id}" })</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     Finalizer three on 537763470</div><div class='del'>- *     Finalizer one on 537763480</div><div class='del'>- *     Finalizer two on 537763480</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_heap()</div><div class='del'>-{</div><div class='del'>-    if (!rb_gc_stack_start) {</div><div class='del'>-	Init_stack(0);</div><div class='del'>-    }</div><div class='del'>-    add_heap();</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-os_obj_of(of)</div><div class='del'>-    VALUE of;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    int n = 0;</div><div class='del'>-    volatile VALUE v;</div><div class='del'>-</div><div class='del'>-    for (i = 0; i &lt; heaps_used; i++) {</div><div class='del'>-	RVALUE *p, *pend;</div><div class='del'>-</div><div class='del'>-	p = heaps[i].slot; pend = p + heaps[i].limit;</div><div class='del'>-	for (;p &lt; pend; p++) {</div><div class='del'>-	    if (p-&gt;as.basic.flags) {</div><div class='del'>-		switch (BUILTIN_TYPE(p)) {</div><div class='del'>-		  case T_NONE:</div><div class='del'>-		  case T_ICLASS:</div><div class='del'>-		  case T_VARMAP:</div><div class='del'>-		  case T_SCOPE:</div><div class='del'>-		  case T_NODE:</div><div class='del'>-		    continue;</div><div class='del'>-		  case T_CLASS:</div><div class='del'>-		    if (FL_TEST(p, FL_SINGLETON)) continue;</div><div class='del'>-		  default:</div><div class='del'>-		    if (!p-&gt;as.basic.klass) continue;</div><div class='del'>-                    v = (VALUE)p;</div><div class='del'>-		    if (!of || rb_obj_is_kind_of(v, of)) {</div><div class='del'>-			rb_yield(v);</div><div class='del'>-			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'>-</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'>- *     ObjectSpace.each_object([module]) {|obj| ... } =&gt; fixnum</div><div class='del'>- *</div><div class='del'>- *  Calls the block once for each living, nonimmediate object in this</div><div class='del'>- *  Ruby process. If &lt;i&gt;module&lt;/i&gt; is specified, calls the block</div><div class='del'>- *  for only those classes or modules that match (or are a subclass of)</div><div class='del'>- *  &lt;i&gt;module&lt;/i&gt;. Returns the number of objects found. Immediate</div><div class='del'>- *  objects (&lt;code&gt;Fixnum&lt;/code&gt;s, &lt;code&gt;Symbol&lt;/code&gt;s</div><div class='del'>- *  &lt;code&gt;true&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt;, and &lt;code&gt;nil&lt;/code&gt;) are</div><div class='del'>- *  never returned. In the example below, &lt;code&gt;each_object&lt;/code&gt;</div><div class='del'>- *  returns both the numbers we defined and several constants defined in</div><div class='del'>- *  the &lt;code&gt;Math&lt;/code&gt; module.</div><div class='del'>- *</div><div class='del'>- *     a = 102.7</div><div class='del'>- *     b = 95       # Won't be returned</div><div class='del'>- *     c = 12345678987654321</div><div class='del'>- *     count = ObjectSpace.each_object(Numeric) {|x| p x }</div><div class='del'>- *     puts "Total count: #{count}"</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     12345678987654321</div><div class='del'>- *     102.7</div><div class='del'>- *     2.71828182845905</div><div class='del'>- *     3.14159265358979</div><div class='del'>- *     2.22044604925031e-16</div><div class='del'>- *     1.7976931348623157e+308</div><div class='del'>- *     2.2250738585072e-308</div><div class='del'>- *     Total count: 7</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-os_each_obj(argc, argv, os)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE os;</div><div class='del'>-{</div><div class='del'>-    VALUE of;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	of = 0;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "01", &amp;of);</div><div class='del'>-    }</div><div class='del'>-    RETURN_ENUMERATOR(os, 1, &amp;of);</div><div class='del'>-    return os_obj_of(of);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE finalizers;</div><div class='del'>-</div><div class='del'>-/* deprecated</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-add_final(os, block)</div><div class='del'>-    VALUE os, block;</div><div class='del'>-{</div><div class='del'>-    rb_warn("ObjectSpace::add_finalizer is deprecated; use define_finalizer");</div><div class='del'>-    if (!rb_respond_to(block, rb_intern("call"))) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong type argument %s (should be callable)",</div><div class='del'>-		 rb_obj_classname(block));</div><div class='del'>-    }</div><div class='del'>-    rb_ary_push(finalizers, block);</div><div class='del'>-    return block;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * deprecated</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rm_final(os, block)</div><div class='del'>-    VALUE os, block;</div><div class='del'>-{</div><div class='del'>-    rb_warn("ObjectSpace::remove_finalizer is deprecated; use undefine_finalizer");</div><div class='del'>-    rb_ary_delete(finalizers, block);</div><div class='del'>-    return block;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * deprecated</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-finals()</div><div class='del'>-{</div><div class='del'>-    rb_warn("ObjectSpace::finalizers is deprecated");</div><div class='del'>-    return finalizers;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * deprecated</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-call_final(os, obj)</div><div class='del'>-    VALUE os, obj;</div><div class='del'>-{</div><div class='del'>-    rb_warn("ObjectSpace::call_finalizer is deprecated; use define_finalizer");</div><div class='del'>-    need_call_final = 1;</div><div class='del'>-    FL_SET(obj, FL_FINALIZE);</div><div class='del'>-    return obj;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ObjectSpace.undefine_finalizer(obj)</div><div class='del'>- *</div><div class='del'>- *  Removes all finalizers for &lt;i&gt;obj&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-undefine_final(os, obj)</div><div class='del'>-    VALUE os, obj;</div><div class='del'>-{</div><div class='del'>-    if (finalizer_table) {</div><div class='del'>-	st_delete(finalizer_table, (st_data_t*)&amp;obj, 0);</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'>- *  call-seq:</div><div class='del'>- *     ObjectSpace.define_finalizer(obj, aProc=proc())</div><div class='del'>- *</div><div class='del'>- *  Adds &lt;i&gt;aProc&lt;/i&gt; as a finalizer, to be called after &lt;i&gt;obj&lt;/i&gt;</div><div class='del'>- *  was destroyed.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-define_final(argc, argv, os)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE os;</div><div class='del'>-{</div><div class='del'>-    VALUE obj, block, table;</div><div class='add'>+    gc_mark_trap_list();</div><div class='ctx'> </div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;obj, &amp;block);</div><div class='del'>-    if (argc == 1) {</div><div class='del'>-	block = rb_block_proc();</div><div class='del'>-    }</div><div class='del'>-    else if (!rb_respond_to(block, rb_intern("call"))) {</div><div class='del'>-	rb_raise(rb_eArgError, "wrong type argument %s (should be callable)",</div><div class='del'>-		 rb_obj_classname(block));</div><div class='del'>-    }</div><div class='del'>-    need_call_final = 1;</div><div class='del'>-    FL_SET(obj, FL_FINALIZE);</div><div class='del'>-</div><div class='del'>-    block = rb_ary_new3(2, INT2FIX(ruby_safe_level), block);</div><div class='del'>-</div><div class='del'>-    if (!finalizer_table) {</div><div class='del'>-	finalizer_table = st_init_numtable();</div><div class='del'>-    }</div><div class='del'>-    if (st_lookup(finalizer_table, obj, &amp;table)) {</div><div class='del'>-	rb_ary_push(table, block);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	st_add_direct(finalizer_table, obj, rb_ary_new3(1, block));</div><div class='del'>-    }</div><div class='del'>-    return block;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_gc_copy_finalizer(dest, obj)</div><div class='del'>-    VALUE dest, obj;</div><div class='del'>-{</div><div class='del'>-    VALUE table;</div><div class='del'>-</div><div class='del'>-    if (!finalizer_table) return;</div><div class='del'>-    if (!FL_TEST(obj, FL_FINALIZE)) return;</div><div class='del'>-    if (st_lookup(finalizer_table, obj, &amp;table)) {</div><div class='del'>-	st_insert(finalizer_table, dest, table);</div><div class='del'>-    }</div><div class='del'>-    RBASIC(dest)-&gt;flags |= FL_FINALIZE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-run_single_final(args)</div><div class='del'>-    VALUE *args;</div><div class='del'>-{</div><div class='del'>-    rb_eval_cmd(args[0], args[1], (int)args[2]);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-run_final(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    long i;</div><div class='del'>-    int status, critical_save = rb_thread_critical;</div><div class='del'>-    VALUE args[3], table, objid;</div><div class='del'>-</div><div class='del'>-    objid = rb_obj_id(obj);	/* make obj into id */</div><div class='del'>-    rb_thread_critical = Qtrue;</div><div class='del'>-    args[1] = 0;</div><div class='del'>-    args[2] = (VALUE)ruby_safe_level;</div><div class='del'>-    for (i=0; i&lt;RARRAY(finalizers)-&gt;len; i++) {</div><div class='del'>-	args[0] = RARRAY(finalizers)-&gt;ptr[i];</div><div class='del'>-	if (!args[1]) args[1] = rb_ary_new3(1, objid);</div><div class='del'>-	rb_protect((VALUE(*)_((VALUE)))run_single_final, (VALUE)args, &amp;status);</div><div class='del'>-    }</div><div class='del'>-    if (finalizer_table &amp;&amp; st_delete(finalizer_table, (st_data_t*)&amp;obj, &amp;table)) {</div><div class='del'>-	for (i=0; i&lt;RARRAY(table)-&gt;len; i++) {</div><div class='del'>-	    VALUE final = RARRAY(table)-&gt;ptr[i];</div><div class='del'>-	    args[0] = RARRAY(final)-&gt;ptr[1];</div><div class='del'>-	    if (!args[1]) args[1] = rb_ary_new3(1, objid);</div><div class='del'>-	    args[2] = FIX2INT(RARRAY(final)-&gt;ptr[0]);</div><div class='del'>-	    rb_protect((VALUE(*)_((VALUE)))run_single_final, (VALUE)args, &amp;status);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_thread_critical = critical_save;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_gc_finalize_deferred()</div><div class='del'>-{</div><div class='del'>-    RVALUE *p = deferred_final_list;</div><div class='del'>-</div><div class='del'>-    deferred_final_list = 0;</div><div class='del'>-    if (p) {</div><div class='del'>-	finalize_list(p);</div><div class='del'>-	free_unused_heaps();</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_gc_call_finalizer_at_exit()</div><div class='del'>-{</div><div class='del'>-    RVALUE *p, *pend;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    /* run finalizers */</div><div class='del'>-    if (need_call_final) {</div><div class='del'>-	p = deferred_final_list;</div><div class='del'>-	deferred_final_list = 0;</div><div class='del'>-	finalize_list(p);</div><div class='del'>-	for (i = 0; i &lt; heaps_used; i++) {</div><div class='del'>-	    p = heaps[i].slot; pend = p + heaps[i].limit;</div><div class='del'>-	    while (p &lt; pend) {</div><div class='del'>-		if (FL_TEST(p, FL_FINALIZE)) {</div><div class='del'>-		    FL_UNSET(p, FL_FINALIZE);</div><div class='del'>-		    p-&gt;as.basic.klass = 0;</div><div class='del'>-		    run_final((VALUE)p);</div><div class='del'>-		}</div><div class='del'>-		p++;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    /* run data object's finalizers */</div><div class='del'>-    for (i = 0; i &lt; heaps_used; i++) {</div><div class='del'>-	p = heaps[i].slot; pend = p + heaps[i].limit;</div><div class='del'>-	while (p &lt; pend) {</div><div class='del'>-	    if (BUILTIN_TYPE(p) == T_DATA &amp;&amp;</div><div class='del'>-		DATA_PTR(p) &amp;&amp; RANY(p)-&gt;as.data.dfree) {</div><div class='del'>-		p-&gt;as.free.flags = 0;</div><div class='del'>-		if ((long)RANY(p)-&gt;as.data.dfree == -1) {</div><div class='del'>-		    RUBY_CRITICAL(free(DATA_PTR(p)));</div><div class='del'>-		}</div><div class='del'>-		else if (RANY(p)-&gt;as.data.dfree) {</div><div class='del'>-		    (*RANY(p)-&gt;as.data.dfree)(DATA_PTR(p));</div><div class='del'>-		}</div><div class='del'>-	    }</div><div class='del'>-	    else if (BUILTIN_TYPE(p) == T_FILE) {</div><div class='del'>-		p-&gt;as.free.flags = 0;</div><div class='del'>-		rb_io_fptr_finalize(RANY(p)-&gt;as.file.fptr);</div><div class='del'>-	    }</div><div class='del'>-	    p++;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='add'>+    gc_sweep();</div><div class='add'>+    dont_gc--;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ObjectSpace._id2ref(object_id) -&gt; an_object</div><div class='del'>- *</div><div class='del'>- *  Converts an object id to a reference to the object. May not be</div><div class='del'>- *  called on an object id passed as a parameter to a finalizer.</div><div class='del'>- *</div><div class='del'>- *     s = "I am a string"                    #=&gt; "I am a string"</div><div class='del'>- *     r = ObjectSpace._id2ref(s.object_id)   #=&gt; "I am a string"</div><div class='del'>- *     r == s                                 #=&gt; true</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-id2ref(obj, objid)</div><div class='del'>-    VALUE obj, objid;</div><div class='add'>+Init_stack()</div><div class='ctx'> {</div><div class='del'>-    unsigned long ptr, p0;</div><div class='del'>-    int type;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    p0 = ptr = NUM2ULONG(objid);</div><div class='del'>-    if (ptr == Qtrue) return Qtrue;</div><div class='del'>-    if (ptr == Qfalse) return Qfalse;</div><div class='del'>-    if (ptr == Qnil) return Qnil;</div><div class='del'>-    if (FIXNUM_P(ptr)) return (VALUE)ptr;</div><div class='del'>-    ptr = objid ^ FIXNUM_FLAG;	/* unset FIXNUM_FLAG */</div><div class='del'>-</div><div class='del'>-    if ((ptr % sizeof(RVALUE)) == (4 &lt;&lt; 2)) {</div><div class='del'>-        ID symid = ptr / sizeof(RVALUE);</div><div class='del'>-        if (rb_id2name(symid) == 0)</div><div class='del'>-            rb_raise(rb_eRangeError, "%p is not symbol id value", p0);</div><div class='del'>-        return ID2SYM(symid);</div><div class='del'>-    }</div><div class='add'>+    VALUE start;</div><div class='ctx'> </div><div class='del'>-    if (!is_pointer_to_heap((void *)ptr)||</div><div class='del'>-	(type = BUILTIN_TYPE(ptr)) &gt;= T_BLKTAG || type == T_ICLASS) {</div><div class='del'>-	rb_raise(rb_eRangeError, "0x%lx is not id value", p0);</div><div class='del'>-    }</div><div class='del'>-    if (BUILTIN_TYPE(ptr) == 0 || RBASIC(ptr)-&gt;klass == 0) {</div><div class='del'>-	rb_raise(rb_eRangeError, "0x%lx is recycled object", p0);</div><div class='del'>-    }</div><div class='del'>-    return (VALUE)ptr;</div><div class='add'>+    stack_start_ptr = &amp;start;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  Document-method: __id__</div><div class='del'>- *  Document-method: object_id</div><div class='del'>- *</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.__id__       =&gt; fixnum</div><div class='del'>- *     obj.object_id    =&gt; fixnum</div><div class='del'>- *</div><div class='del'>- *  Returns an integer identifier for &lt;i&gt;obj&lt;/i&gt;. The same number will</div><div class='del'>- *  be returned on all calls to &lt;code&gt;id&lt;/code&gt; for a given object, and</div><div class='del'>- *  no two active objects will share an id.</div><div class='del'>- *  &lt;code&gt;Object#object_id&lt;/code&gt; is a different concept from the</div><div class='del'>- *  &lt;code&gt;:name&lt;/code&gt; notation, which returns the symbol id of</div><div class='del'>- *  &lt;code&gt;name&lt;/code&gt;. Replaces the deprecated &lt;code&gt;Object#id&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     obj.hash    =&gt; fixnum</div><div class='del'>- *</div><div class='del'>- *  Generates a &lt;code&gt;Fixnum&lt;/code&gt; hash value for this object. This</div><div class='del'>- *  function must have the property that &lt;code&gt;a.eql?(b)&lt;/code&gt; implies</div><div class='del'>- *  &lt;code&gt;a.hash == b.hash&lt;/code&gt;. The hash value is used by class</div><div class='del'>- *  &lt;code&gt;Hash&lt;/code&gt;. Any hash value that exceeds the capacity of a</div><div class='del'>- *  &lt;code&gt;Fixnum&lt;/code&gt; will be truncated before being used.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_obj_id(VALUE obj)</div><div class='del'>-{</div><div class='del'>-    /*</div><div class='del'>-     *                32-bit VALUE space</div><div class='del'>-     *          MSB ------------------------ LSB</div><div class='del'>-     *  false   00000000000000000000000000000000</div><div class='del'>-     *  true    00000000000000000000000000000010</div><div class='del'>-     *  nil     00000000000000000000000000000100</div><div class='del'>-     *  undef   00000000000000000000000000000110</div><div class='del'>-     *  symbol  ssssssssssssssssssssssss00001110</div><div class='del'>-     *  object  oooooooooooooooooooooooooooooo00        = 0 (mod sizeof(RVALUE))</div><div class='del'>-     *  fixnum  fffffffffffffffffffffffffffffff1</div><div class='del'>-     *</div><div class='del'>-     *                    object_id space</div><div class='del'>-     *                                       LSB</div><div class='del'>-     *  false   00000000000000000000000000000000</div><div class='del'>-     *  true    00000000000000000000000000000010</div><div class='del'>-     *  nil     00000000000000000000000000000100</div><div class='del'>-     *  undef   00000000000000000000000000000110</div><div class='del'>-     *  symbol   000SSSSSSSSSSSSSSSSSSSSSSSSSSS0        S...S % A = 4 (S...S = s...s * A + 4)</div><div class='del'>-     *  object   oooooooooooooooooooooooooooooo0        o...o % A = 0</div><div class='del'>-     *  fixnum  fffffffffffffffffffffffffffffff1        bignum if required</div><div class='del'>-     *</div><div class='del'>-     *  where A = sizeof(RVALUE)/4</div><div class='del'>-     *</div><div class='del'>-     *  sizeof(RVALUE) is</div><div class='del'>-     *  20 if 32-bit, double is 4-byte aligned</div><div class='del'>-     *  24 if 32-bit, double is 8-byte aligned</div><div class='del'>-     *  40 if 64-bit</div><div class='del'>-     */</div><div class='del'>-    if (TYPE(obj) == T_SYMBOL) {</div><div class='del'>-        return (SYM2ID(obj) * sizeof(RVALUE) + (4 &lt;&lt; 2)) | FIXNUM_FLAG;</div><div class='del'>-    }</div><div class='del'>-    if (SPECIAL_CONST_P(obj)) {</div><div class='del'>-        return LONG2NUM((long)obj);</div><div class='del'>-    }</div><div class='del'>-    return (VALUE)((long)obj|FIXNUM_FLAG);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  The &lt;code&gt;GC&lt;/code&gt; module provides an interface to Ruby's mark and</div><div class='del'>- *  sweep garbage collection mechanism. Some of the underlying methods</div><div class='del'>- *  are also available via the &lt;code&gt;ObjectSpace&lt;/code&gt; module.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-void</div><div class='ctx'> Init_GC()</div><div class='ctx'> {</div><div class='del'>-    VALUE rb_mObSpace;</div><div class='del'>-</div><div class='del'>-    rb_mGC = rb_define_module("GC");</div><div class='del'>-    rb_define_singleton_method(rb_mGC, "start", rb_gc_start, 0);</div><div class='del'>-    rb_define_singleton_method(rb_mGC, "enable", rb_gc_enable, 0);</div><div class='del'>-    rb_define_singleton_method(rb_mGC, "disable", rb_gc_disable, 0);</div><div class='del'>-    rb_define_singleton_method(rb_mGC, "stress", gc_stress_get, 0);</div><div class='del'>-    rb_define_singleton_method(rb_mGC, "stress=", gc_stress_set, 1);</div><div class='del'>-    rb_define_method(rb_mGC, "garbage_collect", rb_gc_start, 0);</div><div class='del'>-</div><div class='del'>-    rb_mObSpace = rb_define_module("ObjectSpace");</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "each_object", os_each_obj, -1);</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "garbage_collect", rb_gc_start, 0);</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "add_finalizer", add_final, 1);</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "remove_finalizer", rm_final, 1);</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "finalizers", finals, 0);</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "call_finalizer", call_final, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "define_finalizer", define_final, -1);</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "undefine_finalizer", undefine_final, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_module_function(rb_mObSpace, "_id2ref", id2ref, 1);</div><div class='del'>-</div><div class='del'>-    rb_gc_register_address(&amp;rb_mObSpace);</div><div class='del'>-    rb_global_variable(&amp;finalizers);</div><div class='del'>-    rb_gc_unregister_address(&amp;rb_mObSpace);</div><div class='del'>-    finalizers = rb_ary_new();</div><div class='del'>-</div><div class='del'>-    source_filenames = st_init_strtable();</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;nomem_error);</div><div class='del'>-    nomem_error = rb_exc_new2(rb_eNoMemError, "failed to allocate memory");</div><div class='del'>-    OBJ_TAINT(nomem_error);</div><div class='del'>-    OBJ_FREEZE(nomem_error);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_mKernel, "hash", rb_obj_id, 0);</div><div class='del'>-    rb_define_method(rb_mKernel, "__id__", rb_obj_id, 0);</div><div class='del'>-    rb_define_method(rb_mKernel, "object_id", rb_obj_id, 0);</div><div class='add'>+    M_GC = rb_define_module("GC");</div><div class='add'>+    rb_define_single_method(M_GC, "start", gc, 0);</div><div class='add'>+    rb_define_single_method(M_GC, "enable", Fgc_enable, 0);</div><div class='add'>+    rb_define_single_method(M_GC, "disable", Fgc_disable, 0);</div><div class='add'>+    rb_define_method(M_GC, "garbage_collect", gc, 0);</div><div class='ctx'> }</div><div class='head'>diff --git a/hash.c b/hash.c<br/>deleted file mode 100644<br/>index 3f269becb5..0000000000<br/>--- a/<a href='/ruby.git/tree/hash.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>hash.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2755 +0,0 @@</div><div class='del'>-/**********************************************************************</div><div class='del'>-</div><div class='del'>-  hash.c -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  created at: Mon Nov 22 18:51:18 JST 1993</div><div class='del'>-</div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-  Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='del'>-</div><div class='del'>-**********************************************************************/</div><div class='del'>-</div><div class='del'>-#include "ruby.h"</div><div class='del'>-#include "st.h"</div><div class='del'>-#include "util.h"</div><div class='del'>-#include "rubysig.h"</div><div class='del'>-</div><div class='del'>-#ifdef __APPLE__</div><div class='del'>-#include &lt;crt_externs.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define HASH_DELETED  FL_USER1</div><div class='del'>-#define HASH_PROC_DEFAULT FL_USER2</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_hash_modify(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (!RHASH(hash)-&gt;tbl) rb_raise(rb_eTypeError, "uninitialized Hash");</div><div class='del'>-    if (OBJ_FROZEN(hash)) rb_error_frozen("hash");</div><div class='del'>-    if (!OBJ_TAINTED(hash) &amp;&amp; rb_safe_level() &gt;= 4)</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't modify hash");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_freeze(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    return rb_obj_freeze(hash);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE rb_cHash;</div><div class='del'>-</div><div class='del'>-static VALUE envtbl;</div><div class='del'>-static ID id_hash, id_call, id_default;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-eql(args)</div><div class='del'>-    VALUE *args;</div><div class='del'>-{</div><div class='del'>-    return (VALUE)rb_eql(args[0], args[1]);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_any_cmp(a, b)</div><div class='del'>-    VALUE a, b;</div><div class='del'>-{</div><div class='del'>-    VALUE args[2];</div><div class='del'>-</div><div class='del'>-    if (a == b) return 0;</div><div class='del'>-    if (FIXNUM_P(a) &amp;&amp; FIXNUM_P(b)) {</div><div class='del'>-	return a != b;</div><div class='del'>-    }</div><div class='del'>-    if (TYPE(a) == T_STRING &amp;&amp; RBASIC(a)-&gt;klass == rb_cString &amp;&amp;</div><div class='del'>-	TYPE(b) == T_STRING &amp;&amp; RBASIC(b)-&gt;klass == rb_cString) {</div><div class='del'>-	return rb_str_cmp(a, b);</div><div class='del'>-    }</div><div class='del'>-    if (a == Qundef || b == Qundef) return -1;</div><div class='del'>-    if (SYMBOL_P(a) &amp;&amp; SYMBOL_P(b)) {</div><div class='del'>-	return a != b;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    args[0] = a;</div><div class='del'>-    args[1] = b;</div><div class='del'>-    return !rb_with_disable_interrupt(eql, (VALUE)args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash(obj)</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(obj, id_hash, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_any_hash(a)</div><div class='del'>-    VALUE a;</div><div class='del'>-{</div><div class='del'>-    VALUE hval;</div><div class='del'>-    int hnum;</div><div class='del'>-</div><div class='del'>-    switch (TYPE(a)) {</div><div class='del'>-      case T_FIXNUM:</div><div class='del'>-      case T_SYMBOL:</div><div class='del'>-	hnum = (int)a;</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      case T_STRING:</div><div class='del'>-	hnum = rb_str_hash(a);</div><div class='del'>-	break;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	hval = rb_funcall(a, id_hash, 0);</div><div class='del'>-	if (!FIXNUM_P(hval)) {</div><div class='del'>-	    hval = rb_funcall(hval, '%', 1, INT2FIX(536870923));</div><div class='del'>-	}</div><div class='del'>-	hnum = (int)FIX2LONG(hval);</div><div class='del'>-    }</div><div class='del'>-    hnum &lt;&lt;= 1;</div><div class='del'>-    return RSHIFT(hnum, 1);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static struct st_hash_type objhash = {</div><div class='del'>-    rb_any_cmp,</div><div class='del'>-    rb_any_hash,</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-typedef int st_foreach_func(st_data_t, st_data_t, st_data_t);</div><div class='del'>-</div><div class='del'>-struct foreach_safe_arg {</div><div class='del'>-    st_table *tbl;</div><div class='del'>-    st_foreach_func *func;</div><div class='del'>-    st_data_t arg;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-foreach_safe_i(key, value, arg)</div><div class='del'>-    st_data_t key, value;</div><div class='del'>-    struct foreach_safe_arg *arg;</div><div class='del'>-{</div><div class='del'>-    int status;</div><div class='del'>-</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    status = (*arg-&gt;func)(key, value, arg-&gt;arg);</div><div class='del'>-    if (status == ST_CONTINUE) {</div><div class='del'>-	return ST_CHECK;</div><div class='del'>-    }</div><div class='del'>-    return status;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-st_foreach_safe(table, func, a)</div><div class='del'>-    st_table *table;</div><div class='del'>-    int (*func)();</div><div class='del'>-    st_data_t a;</div><div class='del'>-{</div><div class='del'>-    struct foreach_safe_arg arg;</div><div class='del'>-</div><div class='del'>-    arg.tbl = table;</div><div class='del'>-    arg.func = (st_foreach_func *)func;</div><div class='del'>-    arg.arg = a;</div><div class='del'>-    if (st_foreach(table, foreach_safe_i, (st_data_t)&amp;arg)) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "hash modified during iteration");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-typedef int rb_foreach_func(VALUE, VALUE, VALUE);</div><div class='del'>-</div><div class='del'>-struct hash_foreach_arg {</div><div class='del'>-    VALUE hash;</div><div class='del'>-    rb_foreach_func *func;</div><div class='del'>-    VALUE arg;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-hash_foreach_iter(key, value, arg)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    struct hash_foreach_arg *arg;</div><div class='del'>-{</div><div class='del'>-    int status;</div><div class='del'>-    st_table *tbl;</div><div class='del'>-</div><div class='del'>-    tbl = RHASH(arg-&gt;hash)-&gt;tbl;</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    status = (*arg-&gt;func)(key, value, arg-&gt;arg);</div><div class='del'>-    if (RHASH(arg-&gt;hash)-&gt;tbl != tbl) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "rehash occurred during iteration");</div><div class='del'>-    }</div><div class='del'>-    switch (status) {</div><div class='del'>-      case ST_DELETE:</div><div class='del'>- 	st_delete_safe(tbl, (st_data_t*)&amp;key, 0, Qundef);</div><div class='del'>-	FL_SET(arg-&gt;hash, HASH_DELETED);</div><div class='del'>-      case ST_CONTINUE:</div><div class='del'>- 	break;</div><div class='del'>-      case ST_STOP:</div><div class='del'>- 	return ST_STOP;</div><div class='del'>-    }</div><div class='del'>-    return ST_CHECK;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hash_foreach_ensure(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    RHASH(hash)-&gt;iter_lev--;</div><div class='del'>-</div><div class='del'>-    if (RHASH(hash)-&gt;iter_lev == 0) {</div><div class='del'>-	if (FL_TEST(hash, HASH_DELETED)) {</div><div class='del'>-	    st_cleanup_safe(RHASH(hash)-&gt;tbl, Qundef);</div><div class='del'>-	    FL_UNSET(hash, HASH_DELETED);</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'>-static VALUE</div><div class='del'>-hash_foreach_call(arg)</div><div class='del'>-    struct hash_foreach_arg *arg;</div><div class='del'>-{</div><div class='del'>-    if (st_foreach(RHASH(arg-&gt;hash)-&gt;tbl, hash_foreach_iter, (st_data_t)arg)) {</div><div class='del'>- 	rb_raise(rb_eRuntimeError, "hash modified during iteration");</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_hash_foreach(hash, func, farg)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    int (*func)();</div><div class='del'>-    VALUE farg;</div><div class='del'>-{</div><div class='del'>-    struct hash_foreach_arg arg;</div><div class='del'>-</div><div class='del'>-    RHASH(hash)-&gt;iter_lev++;</div><div class='del'>-    arg.hash = hash;</div><div class='del'>-    arg.func = (rb_foreach_func *)func;</div><div class='del'>-    arg.arg  = farg;</div><div class='del'>-    rb_ensure(hash_foreach_call, (VALUE)&amp;arg, hash_foreach_ensure, hash);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE hash_alloc0 _((VALUE));</div><div class='del'>-static VALUE hash_alloc _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-hash_alloc0(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    NEWOBJ(hash, struct RHash);</div><div class='del'>-    OBJSETUP(hash, klass, T_HASH);</div><div class='del'>-</div><div class='del'>-    hash-&gt;ifnone = Qnil;</div><div class='del'>-</div><div class='del'>-    return (VALUE)hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hash_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE hash = hash_alloc0(klass);</div><div class='del'>-</div><div class='del'>-    RHASH(hash)-&gt;tbl = st_init_table(&amp;objhash);</div><div class='del'>-</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_new()</div><div class='del'>-{</div><div class='del'>-    return hash_alloc(rb_cHash);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Hash.new                          =&gt; hash</div><div class='del'>- *     Hash.new(obj)                     =&gt; aHash</div><div class='del'>- *     Hash.new {|hash, key| block }     =&gt; aHash</div><div class='del'>- *</div><div class='del'>- *  Returns a new, empty hash. If this hash is subsequently accessed by</div><div class='del'>- *  a key that doesn't correspond to a hash entry, the value returned</div><div class='del'>- *  depends on the style of &lt;code&gt;new&lt;/code&gt; used to create the hash. In</div><div class='del'>- *  the first form, the access returns &lt;code&gt;nil&lt;/code&gt;. If</div><div class='del'>- *  &lt;i&gt;obj&lt;/i&gt; is specified, this single object will be used for</div><div class='del'>- *  all &lt;em&gt;default values&lt;/em&gt;. If a block is specified, it will be</div><div class='del'>- *  called with the hash object and the key, and should return the</div><div class='del'>- *  default value. It is the block's responsibility to store the value</div><div class='del'>- *  in the hash if required.</div><div class='del'>- *</div><div class='del'>- *     h = Hash.new("Go Fish")</div><div class='del'>- *     h["a"] = 100</div><div class='del'>- *     h["b"] = 200</div><div class='del'>- *     h["a"]           #=&gt; 100</div><div class='del'>- *     h["c"]           #=&gt; "Go Fish"</div><div class='del'>- *     # The following alters the single default object</div><div class='del'>- *     h["c"].upcase!   #=&gt; "GO FISH"</div><div class='del'>- *     h["d"]           #=&gt; "GO FISH"</div><div class='del'>- *     h.keys           #=&gt; ["a", "b"]</div><div class='del'>- *</div><div class='del'>- *     # While this creates a new default object each time</div><div class='del'>- *     h = Hash.new { |hash, key| hash[key] = "Go Fish: #{key}" }</div><div class='del'>- *     h["c"]           #=&gt; "Go Fish: c"</div><div class='del'>- *     h["c"].upcase!   #=&gt; "GO FISH: C"</div><div class='del'>- *     h["d"]           #=&gt; "Go Fish: d"</div><div class='del'>- *     h.keys           #=&gt; ["c", "d"]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_initialize(argc, argv, hash)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE ifnone;</div><div class='del'>-</div><div class='del'>-    rb_hash_modify(hash);</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	if (argc &gt; 0) {</div><div class='del'>-	    rb_raise(rb_eArgError, "wrong number of arguments");</div><div class='del'>-	}</div><div class='del'>-	RHASH(hash)-&gt;ifnone = rb_block_proc();</div><div class='del'>-	FL_SET(hash, HASH_PROC_DEFAULT);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "01", &amp;ifnone);</div><div class='del'>-	RHASH(hash)-&gt;ifnone = ifnone;</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     Hash[ [key =&gt;|, value]* ]   =&gt; hash</div><div class='del'>- *</div><div class='del'>- *  Creates a new hash populated with the given objects. Equivalent to</div><div class='del'>- *  the literal &lt;code&gt;{ &lt;i&gt;key&lt;/i&gt;, &lt;i&gt;value&lt;/i&gt;, ... }&lt;/code&gt;. Keys and</div><div class='del'>- *  values occur in pairs, so there must be an even number of arguments.</div><div class='del'>- *</div><div class='del'>- *     Hash["a", 100, "b", 200]       #=&gt; {"a"=&gt;100, "b"=&gt;200}</div><div class='del'>- *     Hash["a" =&gt; 100, "b" =&gt; 200]   #=&gt; {"a"=&gt;100, "b"=&gt;200}</div><div class='del'>- *     { "a" =&gt; 100, "b" =&gt; 200 }     #=&gt; {"a"=&gt;100, "b"=&gt;200}</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_s_create(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE hash, tmp;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    if (argc == 1) {</div><div class='del'>-	tmp = rb_check_convert_type(argv[0], T_HASH, "Hash", "to_hash");</div><div class='del'>-	if (!NIL_P(tmp)) {</div><div class='del'>-	    hash = hash_alloc0(klass);</div><div class='del'>-	    RHASH(hash)-&gt;tbl = st_copy(RHASH(tmp)-&gt;tbl);</div><div class='del'>-	    return hash;</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	tmp = rb_check_array_type(argv[0]);</div><div class='del'>-	if (!NIL_P(tmp)) {</div><div class='del'>-	    long i;</div><div class='del'>-</div><div class='del'>-	    hash = hash_alloc(klass);</div><div class='del'>-	    for (i = 0; i &lt; RARRAY_LEN(tmp); ++i) {</div><div class='del'>-		VALUE v = rb_check_array_type(RARRAY_PTR(tmp)[i]);</div><div class='del'>-		</div><div class='del'>-		if (NIL_P(v)) continue;</div><div class='del'>-		if (RARRAY_LEN(v) &lt; 1 || 2 &lt; RARRAY_LEN(v)) continue;</div><div class='del'>-		rb_hash_aset(hash, RARRAY_PTR(v)[0], RARRAY_PTR(v)[1]);</div><div class='del'>-	    }</div><div class='del'>-	    return hash;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (argc % 2 != 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "odd number of arguments for Hash");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    hash = hash_alloc(klass);</div><div class='del'>-    for (i=0; i&lt;argc; i+=2) {</div><div class='del'>-        rb_hash_aset(hash, argv[i], argv[i + 1]);</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'>-to_hash(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    return rb_convert_type(hash, T_HASH, "Hash", "to_hash");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_hash_rehash_i(key, value, tbl)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    st_table *tbl;</div><div class='del'>-{</div><div class='del'>-    if (key != Qundef) st_insert(tbl, key, value);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.rehash -&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Rebuilds the hash based on the current hash values for each key. If</div><div class='del'>- *  values of key objects have changed since they were inserted, this</div><div class='del'>- *  method will reindex &lt;i&gt;hsh&lt;/i&gt;. If &lt;code&gt;Hash#rehash&lt;/code&gt; is</div><div class='del'>- *  called while an iterator is traversing the hash, an</div><div class='del'>- *  &lt;code&gt;IndexError&lt;/code&gt; will be raised in the iterator.</div><div class='del'>- *</div><div class='del'>- *     a = [ "a", "b" ]</div><div class='del'>- *     c = [ "c", "d" ]</div><div class='del'>- *     h = { a =&gt; 100, c =&gt; 300 }</div><div class='del'>- *     h[a]       #=&gt; 100</div><div class='del'>- *     a[0] = "z"</div><div class='del'>- *     h[a]       #=&gt; nil</div><div class='del'>- *     h.rehash   #=&gt; {["z", "b"]=&gt;100, ["c", "d"]=&gt;300}</div><div class='del'>- *     h[a]       #=&gt; 100</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_rehash(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    st_table *tbl;</div><div class='del'>-</div><div class='del'>-    rb_hash_modify(hash);</div><div class='del'>-    tbl = st_init_table_with_size(&amp;objhash, RHASH(hash)-&gt;tbl-&gt;num_entries);</div><div class='del'>-    rb_hash_foreach(hash, rb_hash_rehash_i, (st_data_t)tbl);</div><div class='del'>-    st_free_table(RHASH(hash)-&gt;tbl);</div><div class='del'>-    RHASH(hash)-&gt;tbl = tbl;</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'>- *  call-seq:</div><div class='del'>- *     hsh[key]    =&gt;  value</div><div class='del'>- *</div><div class='del'>- *  Element Reference---Retrieves the &lt;i&gt;value&lt;/i&gt; object corresponding</div><div class='del'>- *  to the &lt;i&gt;key&lt;/i&gt; object. If not found, returns the a default value (see</div><div class='del'>- *  &lt;code&gt;Hash::new&lt;/code&gt; for details).</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h["a"]   #=&gt; 100</div><div class='del'>- *     h["c"]   #=&gt; nil</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_aref(hash, key)</div><div class='del'>-    VALUE hash, key;</div><div class='del'>-{</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    if (!st_lookup(RHASH(hash)-&gt;tbl, key, &amp;val)) {</div><div class='del'>-	return rb_funcall(hash, id_default, 1, key);</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_lookup(hash, key)</div><div class='del'>-    VALUE hash, key;</div><div class='del'>-{</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    if (!st_lookup(RHASH(hash)-&gt;tbl, key, &amp;val)) {</div><div class='del'>-	return Qnil; /* without Hash#default */</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'>- *  call-seq:</div><div class='del'>- *     hsh.fetch(key [, default] )       =&gt; obj</div><div class='del'>- *     hsh.fetch(key) {| key | block }   =&gt; obj</div><div class='del'>- *</div><div class='del'>- *  Returns a value from the hash for the given key. If the key can't be</div><div class='del'>- *  found, there are several options: With no other arguments, it will</div><div class='del'>- *  raise an &lt;code&gt;IndexError&lt;/code&gt; exception; if &lt;i&gt;default&lt;/i&gt; is</div><div class='del'>- *  given, then that will be returned; if the optional code block is</div><div class='del'>- *  specified, then that will be run and its result returned.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.fetch("a")                            #=&gt; 100</div><div class='del'>- *     h.fetch("z", "go fish")                 #=&gt; "go fish"</div><div class='del'>- *     h.fetch("z") { |el| "go fish, #{el}"}   #=&gt; "go fish, z"</div><div class='del'>- *</div><div class='del'>- *  The following example shows that an exception is raised if the key</div><div class='del'>- *  is not found and a default value is not supplied.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.fetch("z")</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 `fetch': key not found (IndexError)</div><div class='del'>- *      from prog.rb:2</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_fetch(argc, argv, hash)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE key, if_none;</div><div class='del'>-    VALUE val;</div><div class='del'>-    long block_given;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;key, &amp;if_none);</div><div class='del'>-</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='del'>-    if (!st_lookup(RHASH(hash)-&gt;tbl, key, &amp;val)) {</div><div class='del'>-	if (block_given) return rb_yield(key);</div><div class='del'>-	if (argc == 1) {</div><div class='del'>-	    rb_raise(rb_eIndexError, "key not found");</div><div class='del'>-	}</div><div class='del'>-	return if_none;</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'>- *  call-seq:</div><div class='del'>- *     hsh.default(key=nil)   =&gt; obj</div><div class='del'>- *</div><div class='del'>- *  Returns the default value, the value that would be returned by</div><div class='del'>- *  &lt;i&gt;hsh&lt;/i&gt;[&lt;i&gt;key&lt;/i&gt;] if &lt;i&gt;key&lt;/i&gt; did not exist in &lt;i&gt;hsh&lt;/i&gt;.</div><div class='del'>- *  See also &lt;code&gt;Hash::new&lt;/code&gt; and &lt;code&gt;Hash#default=&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = Hash.new                            #=&gt; {}</div><div class='del'>- *     h.default                               #=&gt; nil</div><div class='del'>- *     h.default(2)                            #=&gt; nil</div><div class='del'>- *</div><div class='del'>- *     h = Hash.new("cat")                     #=&gt; {}</div><div class='del'>- *     h.default                               #=&gt; "cat"</div><div class='del'>- *     h.default(2)                            #=&gt; "cat"</div><div class='del'>- *</div><div class='del'>- *     h = Hash.new {|h,k| h[k] = k.to_i*10}   #=&gt; {}</div><div class='del'>- *     h.default                               #=&gt; nil</div><div class='del'>- *     h.default(2)                            #=&gt; 20</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_default(argc, argv, hash)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE key;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "01", &amp;key);</div><div class='del'>-    if (FL_TEST(hash, HASH_PROC_DEFAULT)) {</div><div class='del'>-	if (argc == 0) return Qnil;</div><div class='del'>-	return rb_funcall(RHASH(hash)-&gt;ifnone, id_call, 2, hash, key);</div><div class='del'>-    }</div><div class='del'>-    return RHASH(hash)-&gt;ifnone;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.default = obj     =&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Sets the default value, the value returned for a key that does not</div><div class='del'>- *  exist in the hash. It is not possible to set the a default to a</div><div class='del'>- *  &lt;code&gt;Proc&lt;/code&gt; that will be executed on each key lookup.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.default = "Go fish"</div><div class='del'>- *     h["a"]     #=&gt; 100</div><div class='del'>- *     h["z"]     #=&gt; "Go fish"</div><div class='del'>- *     # This doesn't do what you might hope...</div><div class='del'>- *     h.default = proc do |hash, key|</div><div class='del'>- *       hash[key] = key + key</div><div class='del'>- *     end</div><div class='del'>- *     h[2]       #=&gt; #&lt;Proc:0x401b3948@-:6&gt;</div><div class='del'>- *     h["cat"]   #=&gt; #&lt;Proc:0x401b3948@-:6&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_set_default(hash, ifnone)</div><div class='del'>-    VALUE hash, ifnone;</div><div class='del'>-{</div><div class='del'>-    rb_hash_modify(hash);</div><div class='del'>-    RHASH(hash)-&gt;ifnone = ifnone;</div><div class='del'>-    FL_UNSET(hash, HASH_PROC_DEFAULT);</div><div class='del'>-    return ifnone;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.default_proc -&gt; anObject</div><div class='del'>- *</div><div class='del'>- *  If &lt;code&gt;Hash::new&lt;/code&gt; was invoked with a block, return that</div><div class='del'>- *  block, otherwise return &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = Hash.new {|h,k| h[k] = k*k }   #=&gt; {}</div><div class='del'>- *     p = h.default_proc                 #=&gt; #&lt;Proc:0x401b3d08@-:1&gt;</div><div class='del'>- *     a = []                             #=&gt; []</div><div class='del'>- *     p.call(a, 2)</div><div class='del'>- *     a                                  #=&gt; [nil, nil, 4]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_default_proc(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (FL_TEST(hash, HASH_PROC_DEFAULT)) {</div><div class='del'>-	return RHASH(hash)-&gt;ifnone;</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-index_i(key, value, args)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    VALUE *args;</div><div class='del'>-{</div><div class='del'>-    if (rb_equal(value, args[0])) {</div><div class='del'>-	args[1] = key;</div><div class='del'>-	return ST_STOP;</div><div class='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_delete_key(hash, key)</div><div class='del'>-    VALUE hash, key;</div><div class='del'>-{</div><div class='del'>-    st_data_t ktmp = (st_data_t)key, val;</div><div class='del'>-</div><div class='del'>-    if (RHASH(hash)-&gt;iter_lev &gt; 0) {</div><div class='del'>-	if (st_delete_safe(RHASH(hash)-&gt;tbl, &amp;ktmp, &amp;val, Qundef)) {</div><div class='del'>-	    FL_SET(hash, HASH_DELETED);</div><div class='del'>-	    return (VALUE)val;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else if (st_delete(RHASH(hash)-&gt;tbl, &amp;ktmp, &amp;val))</div><div class='del'>-	return (VALUE)val;</div><div class='del'>-    return Qundef;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.index(value)    =&gt; key</div><div class='del'>- *</div><div class='del'>- *  Returns the key for a given value. If not found, returns &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.index(200)   #=&gt; "b"</div><div class='del'>- *     h.index(999)   #=&gt; nil</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_index(hash, value)</div><div class='del'>-    VALUE hash, value;</div><div class='del'>-{</div><div class='del'>-    VALUE args[2];</div><div class='del'>-</div><div class='del'>-    args[0] = value;</div><div class='del'>-    args[1] = Qnil;</div><div class='del'>-</div><div class='del'>-    rb_hash_foreach(hash, index_i, (st_data_t)args);</div><div class='del'>-</div><div class='del'>-    return args[1];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.indexes(key, ...)    =&gt; array</div><div class='del'>- *     hsh.indices(key, ...)    =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Deprecated in favor of &lt;code&gt;Hash#select&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_indexes(argc, argv, hash)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE indexes;</div><div class='del'>-    int i;</div><div class='del'>-</div><div class='del'>-    rb_warn("Hash#%s is deprecated; use Hash#values_at",</div><div class='del'>-	    rb_id2name(rb_frame_last_func()));</div><div class='del'>-    indexes = rb_ary_new2(argc);</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	RARRAY(indexes)-&gt;ptr[i] = rb_hash_aref(hash, argv[i]);</div><div class='del'>-	RARRAY(indexes)-&gt;len++;</div><div class='del'>-    }</div><div class='del'>-    return indexes;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.delete(key)                   =&gt; value</div><div class='del'>- *     hsh.delete(key) {| key | block }  =&gt; value</div><div class='del'>- *</div><div class='del'>- *  Deletes and returns a key-value pair from &lt;i&gt;hsh&lt;/i&gt; whose key is</div><div class='del'>- *  equal to &lt;i&gt;key&lt;/i&gt;. If the key is not found, returns &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *  If the optional code block is given and the key is not found,</div><div class='del'>- *  pass in the key and return the result of &lt;i&gt;block&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.delete("a")                              #=&gt; 100</div><div class='del'>- *     h.delete("z")                              #=&gt; nil</div><div class='del'>- *     h.delete("z") { |el| "#{el} not found" }   #=&gt; "z not found"</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_delete(hash, key)</div><div class='del'>-    VALUE hash, key;</div><div class='del'>-{</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    rb_hash_modify(hash);</div><div class='del'>-    val = rb_hash_delete_key(hash, key);</div><div class='del'>-    if (val != Qundef) return val;</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	return rb_yield(key);</div><div class='del'>-    }</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct shift_var {</div><div class='del'>-    VALUE key;</div><div class='del'>-    VALUE val;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-shift_i(key, value, var)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    struct shift_var *var;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    if (var-&gt;key != Qundef) return ST_STOP;</div><div class='del'>-    var-&gt;key = key;</div><div class='del'>-    var-&gt;val = value;</div><div class='del'>-    return ST_DELETE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-shift_i_safe(key, value, var)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    struct shift_var *var;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    var-&gt;key = key;</div><div class='del'>-    var-&gt;val = value;</div><div class='del'>-    return ST_STOP;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.shift -&gt; anArray or obj</div><div class='del'>- *</div><div class='del'>- *  Removes a key-value pair from &lt;i&gt;hsh&lt;/i&gt; and returns it as the</div><div class='del'>- *  two-item array &lt;code&gt;[&lt;/code&gt; &lt;i&gt;key, value&lt;/i&gt; &lt;code&gt;]&lt;/code&gt;, or</div><div class='del'>- *  the hash's default value if the hash is empty.</div><div class='del'>- *</div><div class='del'>- *     h = { 1 =&gt; "a", 2 =&gt; "b", 3 =&gt; "c" }</div><div class='del'>- *     h.shift   #=&gt; [1, "a"]</div><div class='del'>- *     h         #=&gt; {2=&gt;"b", 3=&gt;"c"}</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_shift(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    struct shift_var var;</div><div class='del'>-</div><div class='del'>-    rb_hash_modify(hash);</div><div class='del'>-    var.key = Qundef;</div><div class='del'>-    if (RHASH(hash)-&gt;iter_lev &gt; 0) {</div><div class='del'>-	rb_hash_foreach(hash, shift_i_safe, (st_data_t)&amp;var);</div><div class='del'>-	if (var.key != Qundef) {</div><div class='del'>-	    st_data_t key = var.key;</div><div class='del'>-	    if (st_delete_safe(RHASH(hash)-&gt;tbl, &amp;key, 0, Qundef)) {</div><div class='del'>-		FL_SET(hash, HASH_DELETED);</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_hash_foreach(hash, shift_i, (st_data_t)&amp;var);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (var.key != Qundef) {</div><div class='del'>-	return rb_assoc_new(var.key, var.val);</div><div class='del'>-    }</div><div class='del'>-    else if (FL_TEST(hash, HASH_PROC_DEFAULT)) {</div><div class='del'>-	return rb_funcall(RHASH(hash)-&gt;ifnone, id_call, 2, hash, Qnil);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	return RHASH(hash)-&gt;ifnone;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-delete_if_i(key, value, hash)</div><div class='del'>-    VALUE key, value, hash;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    if (RTEST(rb_yield_values(2, key, value))) {</div><div class='del'>-	rb_hash_delete_key(hash, key);</div><div class='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.delete_if {| key, value | block }  -&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Deletes every key-value pair from &lt;i&gt;hsh&lt;/i&gt; for which &lt;i&gt;block&lt;/i&gt;</div><div class='del'>- *  evaluates to &lt;code&gt;true&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200, "c" =&gt; 300 }</div><div class='del'>- *     h.delete_if {|key, value| key &gt;= "b" }   #=&gt; {"a"=&gt;100}</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_delete_if(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(hash, 0, 0);</div><div class='del'>-    rb_hash_modify(hash);</div><div class='del'>-    rb_hash_foreach(hash, delete_if_i, hash);</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.reject! {| key, value | block }  -&gt; hsh or nil</div><div class='del'>- *</div><div class='del'>- *  Equivalent to &lt;code&gt;Hash#delete_if&lt;/code&gt;, but returns</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; if no changes were made.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_reject_bang(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(hash, 0, 0);</div><div class='del'>-    n = RHASH(hash)-&gt;tbl-&gt;num_entries;</div><div class='del'>-    rb_hash_delete_if(hash);</div><div class='del'>-    if (n == RHASH(hash)-&gt;tbl-&gt;num_entries) return Qnil;</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.reject {| key, value | block }  -&gt; a_hash</div><div class='del'>- *</div><div class='del'>- *  Same as &lt;code&gt;Hash#delete_if&lt;/code&gt;, but works on (and returns) a</div><div class='del'>- *  copy of the &lt;i&gt;hsh&lt;/i&gt;. Equivalent to</div><div class='del'>- *  &lt;code&gt;&lt;i&gt;hsh&lt;/i&gt;.dup.delete_if&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_reject(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    return rb_hash_delete_if(rb_obj_dup(hash));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-select_i(key, value, result)</div><div class='del'>-    VALUE key, value, result;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    if (RTEST(rb_yield_values(2, key, value)))</div><div class='del'>-	rb_ary_push(result, rb_assoc_new(key, value));</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   hsh.values_at(key, ...)   =&gt; array</div><div class='del'>- *</div><div class='del'>- * Return an array containing the values associated with the given keys.</div><div class='del'>- * Also see &lt;code&gt;Hash.select&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *   h = { "cat" =&gt; "feline", "dog" =&gt; "canine", "cow" =&gt; "bovine" }</div><div class='del'>- *   h.values_at("cow", "cat")  #=&gt; ["bovine", "feline"]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_values_at(argc, argv, hash)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE result = rb_ary_new();</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	rb_ary_push(result, rb_hash_aref(hash, 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'>- *     hsh.select {|key, value| block}   =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Returns a new array consisting of &lt;code&gt;[key,value]&lt;/code&gt;</div><div class='del'>- *  pairs for which the block returns true.</div><div class='del'>- *  Also see &lt;code&gt;Hash.values_at&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200, "c" =&gt; 300 }</div><div class='del'>- *     h.select {|k,v| k &gt; "a"}  #=&gt; [["b", 200], ["c", 300]]</div><div class='del'>- *     h.select {|k,v| v &lt; 200}  #=&gt; [["a", 100]]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_select(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(hash, 0, 0);</div><div class='del'>-    result = rb_ary_new();</div><div class='del'>-    rb_hash_foreach(hash, select_i, result);</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-clear_i(key, value, dummy)</div><div class='del'>-    VALUE key, value, dummy;</div><div class='del'>-{</div><div class='del'>-    return ST_DELETE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.clear -&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Removes all key-value pairs from &lt;i&gt;hsh&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }   #=&gt; {"a"=&gt;100, "b"=&gt;200}</div><div class='del'>- *     h.clear                          #=&gt; {}</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_clear(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    rb_hash_modify(hash);</div><div class='del'>-    if (RHASH(hash)-&gt;tbl-&gt;num_entries &gt; 0) {</div><div class='del'>-	rb_hash_foreach(hash, clear_i, 0);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh[key] = value        =&gt; value</div><div class='del'>- *     hsh.store(key, value)   =&gt; value</div><div class='del'>- *</div><div class='del'>- *  Element Assignment---Associates the value given by</div><div class='del'>- *  &lt;i&gt;value&lt;/i&gt; with the key given by &lt;i&gt;key&lt;/i&gt;.</div><div class='del'>- *  &lt;i&gt;key&lt;/i&gt; should not have its value changed while it is in</div><div class='del'>- *  use as a key (a &lt;code&gt;String&lt;/code&gt; passed as a key will be</div><div class='del'>- *  duplicated and frozen).</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h["a"] = 9</div><div class='del'>- *     h["c"] = 4</div><div class='del'>- *     h   #=&gt; {"a"=&gt;9, "b"=&gt;200, "c"=&gt;4}</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_hash_aset(hash, key, val)</div><div class='del'>-    VALUE hash, key, val;</div><div class='del'>-{</div><div class='del'>-    rb_hash_modify(hash);</div><div class='del'>-    if (TYPE(key) != T_STRING || st_lookup(RHASH(hash)-&gt;tbl, key, 0)) {</div><div class='del'>-	st_insert(RHASH(hash)-&gt;tbl, key, val);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	st_add_direct(RHASH(hash)-&gt;tbl, rb_str_new4(key), val);</div><div class='del'>-    }</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-replace_i(key, val, hash)</div><div class='del'>-    VALUE key, val, hash;</div><div class='del'>-{</div><div class='del'>-    if (key != Qundef) {</div><div class='del'>-	rb_hash_aset(hash, key, val);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.replace(other_hash) -&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Replaces the contents of &lt;i&gt;hsh&lt;/i&gt; with the contents of</div><div class='del'>- *  &lt;i&gt;other_hash&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.replace({ "c" =&gt; 300, "d" =&gt; 400 })   #=&gt; {"c"=&gt;300, "d"=&gt;400}</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_replace(hash, hash2)</div><div class='del'>-    VALUE hash, hash2;</div><div class='del'>-{</div><div class='del'>-    hash2 = to_hash(hash2);</div><div class='del'>-    if (hash == hash2) return hash;</div><div class='del'>-    rb_hash_clear(hash);</div><div class='del'>-    rb_hash_foreach(hash2, replace_i, hash);</div><div class='del'>-    RHASH(hash)-&gt;ifnone = RHASH(hash2)-&gt;ifnone;</div><div class='del'>-    if (FL_TEST(hash2, HASH_PROC_DEFAULT)) {</div><div class='del'>-	FL_SET(hash, HASH_PROC_DEFAULT);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	FL_UNSET(hash, HASH_PROC_DEFAULT);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.length    =&gt;  fixnum</div><div class='del'>- *     hsh.size      =&gt;  fixnum</div><div class='del'>- *</div><div class='del'>- *  Returns the number of key-value pairs in the hash.</div><div class='del'>- *</div><div class='del'>- *     h = { "d" =&gt; 100, "a" =&gt; 200, "v" =&gt; 300, "e" =&gt; 400 }</div><div class='del'>- *     h.length        #=&gt; 4</div><div class='del'>- *     h.delete("a")   #=&gt; 200</div><div class='del'>- *     h.length        #=&gt; 3</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_size(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    return INT2FIX(RHASH(hash)-&gt;tbl-&gt;num_entries);</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'>- *     hsh.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;hsh&lt;/i&gt; contains no key-value pairs.</div><div class='del'>- *</div><div class='del'>- *     {}.empty?   #=&gt; true</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_empty_p(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (RHASH(hash)-&gt;tbl-&gt;num_entries == 0)</div><div class='del'>-	return Qtrue;</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-each_value_i(key, value)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_yield(value);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.each_value {| value | block } -&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Calls &lt;i&gt;block&lt;/i&gt; once for each key in &lt;i&gt;hsh&lt;/i&gt;, passing the</div><div class='del'>- *  value as a parameter.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.each_value {|value| puts value }</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     100</div><div class='del'>- *     200</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_each_value(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(hash, 0, 0);</div><div class='del'>-    rb_hash_foreach(hash, each_value_i, 0);</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-each_key_i(key, value)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_yield(key);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.each_key {| key | block } -&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Calls &lt;i&gt;block&lt;/i&gt; once for each key in &lt;i&gt;hsh&lt;/i&gt;, passing the key</div><div class='del'>- *  as a parameter.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.each_key {|key| puts key }</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'>- *     b</div><div class='del'>- */</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_each_key(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(hash, 0, 0);</div><div class='del'>-    rb_hash_foreach(hash, each_key_i, 0);</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-each_pair_i(key, value)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_yield_values(2, key, value);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.each_pair {| key_value_array | block } -&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Calls &lt;i&gt;block&lt;/i&gt; once for each key in &lt;i&gt;hsh&lt;/i&gt;, passing the key</div><div class='del'>- *  and value as parameters.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.each_pair {|key, value| puts "#{key} is #{value}" }</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     a is 100</div><div class='del'>- *     b is 200</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_each_pair(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(hash, 0, 0);</div><div class='del'>-    rb_hash_foreach(hash, each_pair_i, 0);</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-each_i(key, value)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_yield(rb_assoc_new(key, value));</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.each {| key, value | block } -&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Calls &lt;i&gt;block&lt;/i&gt; once for each key in &lt;i&gt;hsh&lt;/i&gt;, passing the key</div><div class='del'>- *  and value to the block as a two-element array. Because of the assignment</div><div class='del'>- *  semantics of block parameters, these elements will be split out if the</div><div class='del'>- *  block has two formal parameters. Also see &lt;code&gt;Hash.each_pair&lt;/code&gt;, which</div><div class='del'>- *  will be marginally more efficient for blocks with two parameters.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.each {|key, value| puts "#{key} is #{value}" }</div><div class='del'>- *</div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *</div><div class='del'>- *     a is 100</div><div class='del'>- *     b is 200</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_each(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(hash, 0, 0);</div><div class='del'>-    rb_hash_foreach(hash, each_i, 0);</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-to_a_i(key, value, ary)</div><div class='del'>-    VALUE key, value, ary;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_ary_push(ary, rb_assoc_new(key, value));</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.to_a -&gt; array</div><div class='del'>- *</div><div class='del'>- *  Converts &lt;i&gt;hsh&lt;/i&gt; to a nested array of &lt;code&gt;[&lt;/code&gt; &lt;i&gt;key,</div><div class='del'>- *  value&lt;/i&gt; &lt;code&gt;]&lt;/code&gt; arrays.</div><div class='del'>- *</div><div class='del'>- *     h = { "c" =&gt; 300, "a" =&gt; 100, "d" =&gt; 400, "c" =&gt; 300  }</div><div class='del'>- *     h.to_a   #=&gt; [["a", 100], ["c", 300], ["d", 400]]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_to_a(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    rb_hash_foreach(hash, to_a_i, ary);</div><div class='del'>-    if (OBJ_TAINTED(hash)) OBJ_TAINT(ary);</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'>- *  call-seq:</div><div class='del'>- *     hsh.sort                    =&gt; array</div><div class='del'>- *     hsh.sort {| a, b | block }  =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Converts &lt;i&gt;hsh&lt;/i&gt; to a nested array of &lt;code&gt;[&lt;/code&gt; &lt;i&gt;key,</div><div class='del'>- *  value&lt;/i&gt; &lt;code&gt;]&lt;/code&gt; arrays and sorts it, using</div><div class='del'>- *  &lt;code&gt;Array#sort&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 20, "b" =&gt; 30, "c" =&gt; 10  }</div><div class='del'>- *     h.sort                       #=&gt; [["a", 20], ["b", 30], ["c", 10]]</div><div class='del'>- *     h.sort {|a,b| a[1]&lt;=&gt;b[1]}   #=&gt; [["c", 10], ["a", 20], ["b", 30]]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_sort(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE entries = rb_hash_to_a(hash);</div><div class='del'>-    rb_ary_sort_bang(entries);</div><div class='del'>-    return entries;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-inspect_i(key, value, str)</div><div class='del'>-    VALUE key, value, str;</div><div class='del'>-{</div><div class='del'>-    VALUE str2;</div><div class='del'>-</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    if (RSTRING(str)-&gt;len &gt; 1) {</div><div class='del'>-	rb_str_cat2(str, ", ");</div><div class='del'>-    }</div><div class='del'>-    str2 = rb_inspect(key);</div><div class='del'>-    rb_str_buf_append(str, str2);</div><div class='del'>-    OBJ_INFECT(str, str2);</div><div class='del'>-    rb_str_buf_cat2(str, "=&gt;");</div><div class='del'>-    str2 = rb_inspect(value);</div><div class='del'>-    rb_str_buf_append(str, str2);</div><div class='del'>-    OBJ_INFECT(str, str2);</div><div class='del'>-</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-inspect_hash(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    str = rb_str_buf_new2("{");</div><div class='del'>-    rb_hash_foreach(hash, inspect_i, str);</div><div class='del'>-    rb_str_buf_cat2(str, "}");</div><div class='del'>-    OBJ_INFECT(str, hash);</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'>- * call-seq:</div><div class='del'>- *   hsh.inspect  =&gt; string</div><div class='del'>- *</div><div class='del'>- * Return the contents of this hash as a string.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_inspect(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (RHASH(hash)-&gt;tbl == 0 || RHASH(hash)-&gt;tbl-&gt;num_entries == 0)</div><div class='del'>-	return rb_str_new2("{}");</div><div class='del'>-    if (rb_inspecting_p(hash)) return rb_str_new2("{...}");</div><div class='del'>-    return rb_protect_inspect(inspect_hash, hash, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-to_s_hash(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    return rb_ary_to_s(rb_hash_to_a(hash));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.to_s   =&gt; string</div><div class='del'>- *</div><div class='del'>- *  Converts &lt;i&gt;hsh&lt;/i&gt; to a string by converting the hash to an array</div><div class='del'>- *  of &lt;code&gt;[&lt;/code&gt; &lt;i&gt;key, value&lt;/i&gt; &lt;code&gt;]&lt;/code&gt; pairs and then</div><div class='del'>- *  converting that array to a string using &lt;code&gt;Array#join&lt;/code&gt; with</div><div class='del'>- *  the default separator.</div><div class='del'>- *</div><div class='del'>- *     h = { "c" =&gt; 300, "a" =&gt; 100, "d" =&gt; 400, "c" =&gt; 300  }</div><div class='del'>- *     h.to_s   #=&gt; "a100c300d400"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_to_s(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (rb_inspecting_p(hash)) return rb_str_new2("{...}");</div><div class='del'>-    return rb_protect_inspect(to_s_hash, hash, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *    hsh.to_hash   =&gt; hsh</div><div class='del'>- *</div><div class='del'>- * Returns &lt;i&gt;self&lt;/i&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_to_hash(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-keys_i(key, value, ary)</div><div class='del'>-    VALUE key, value, ary;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_ary_push(ary, key);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.keys    =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Returns a new array populated with the keys from this hash. See also</div><div class='del'>- *  &lt;code&gt;Hash#values&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200, "c" =&gt; 300, "d" =&gt; 400 }</div><div class='del'>- *     h.keys   #=&gt; ["a", "b", "c", "d"]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_keys(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    rb_hash_foreach(hash, keys_i, ary);</div><div class='del'>-</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-values_i(key, value, ary)</div><div class='del'>-    VALUE key, value, ary;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_ary_push(ary, value);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.values    =&gt; array</div><div class='del'>- *</div><div class='del'>- *  Returns a new array populated with the values from &lt;i&gt;hsh&lt;/i&gt;. See</div><div class='del'>- *  also &lt;code&gt;Hash#keys&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200, "c" =&gt; 300 }</div><div class='del'>- *     h.values   #=&gt; [100, 200, 300]</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_values(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    rb_hash_foreach(hash, values_i, ary);</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'>- *  call-seq:</div><div class='del'>- *     hsh.has_key?(key)    =&gt; true or false</div><div class='del'>- *     hsh.include?(key)    =&gt; true or false</div><div class='del'>- *     hsh.key?(key)        =&gt; true or false</div><div class='del'>- *     hsh.member?(key)     =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if the given key is present in &lt;i&gt;hsh&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.has_key?("a")   #=&gt; true</div><div class='del'>- *     h.has_key?("z")   #=&gt; false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_has_key(hash, key)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE key;</div><div class='del'>-{</div><div class='del'>-    if (st_lookup(RHASH(hash)-&gt;tbl, key, 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 int</div><div class='del'>-rb_hash_search_value(key, value, data)</div><div class='del'>-    VALUE key, value, *data;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    if (rb_equal(value, data[1])) {</div><div class='del'>-	data[0] = Qtrue;</div><div class='del'>-	return ST_STOP;</div><div class='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.has_value?(value)    =&gt; true or false</div><div class='del'>- *     hsh.value?(value)        =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if the given value is present for some key</div><div class='del'>- *  in &lt;i&gt;hsh&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *     h = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h.has_value?(100)   #=&gt; true</div><div class='del'>- *     h.has_value?(999)   #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_has_value(hash, val)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    VALUE data[2];</div><div class='del'>-</div><div class='del'>-    data[0] = Qfalse;</div><div class='del'>-    data[1] = val;</div><div class='del'>-    rb_hash_foreach(hash, rb_hash_search_value, (st_data_t)data);</div><div class='del'>-    return data[0];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-struct equal_data {</div><div class='del'>-    int result;</div><div class='del'>-    st_table *tbl;</div><div class='del'>-    int eql;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-eql_i(key, val1, data)</div><div class='del'>-    VALUE key;</div><div class='del'>-    VALUE val1;</div><div class='del'>-    struct equal_data *data;</div><div class='del'>-{</div><div class='del'>-    VALUE val2;</div><div class='del'>-</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    if (!st_lookup(data-&gt;tbl, key, &amp;val2)) {</div><div class='del'>-	data-&gt;result = Qfalse;</div><div class='del'>-	return ST_STOP;</div><div class='del'>-    }</div><div class='del'>-    if (!(data-&gt;eql ? rb_eql(val1, val2) : rb_equal(val1, val2))) {</div><div class='del'>-	data-&gt;result = Qfalse;</div><div class='del'>-	return ST_STOP;</div><div class='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE recursive_eql _((VALUE, VALUE, int));</div><div class='del'>-static VALUE</div><div class='del'>-recursive_eql(hash, dt, recur)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE dt;</div><div class='del'>-    int recur;</div><div class='del'>-{</div><div class='del'>-    struct equal_data *data;</div><div class='del'>-</div><div class='del'>-    if (recur) return Qfalse;</div><div class='del'>-    data = (struct equal_data*)dt;</div><div class='del'>-    data-&gt;result = Qtrue;</div><div class='del'>-    rb_hash_foreach(hash, eql_i, (st_data_t)data);</div><div class='del'>-</div><div class='del'>-    return data-&gt;result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-hash_equal(hash1, hash2, eql)</div><div class='del'>-    VALUE hash1, hash2;</div><div class='del'>-    int eql;			/* compare default value if true */</div><div class='del'>-{</div><div class='del'>-    struct equal_data data;</div><div class='del'>-</div><div class='del'>-    if (hash1 == hash2) return Qtrue;</div><div class='del'>-    if (TYPE(hash2) != T_HASH) {</div><div class='del'>-	if (!rb_respond_to(hash2, rb_intern("to_hash"))) {</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	}</div><div class='del'>-	return rb_equal(hash2, hash1);</div><div class='del'>-    }</div><div class='del'>-    if (RHASH(hash1)-&gt;tbl-&gt;num_entries != RHASH(hash2)-&gt;tbl-&gt;num_entries)</div><div class='del'>-	return Qfalse;</div><div class='del'>-    if (eql) {</div><div class='del'>-	if (!(rb_equal(RHASH(hash1)-&gt;ifnone, RHASH(hash2)-&gt;ifnone) &amp;&amp;</div><div class='del'>-	      FL_TEST(hash1, HASH_PROC_DEFAULT) == FL_TEST(hash2, HASH_PROC_DEFAULT)))</div><div class='del'>-	    return Qfalse;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    data.tbl = RHASH(hash2)-&gt;tbl;</div><div class='del'>-    data.eql = eql;</div><div class='del'>-    return rb_exec_recursive(recursive_eql, hash1, (VALUE)&amp;data);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh == other_hash    =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Equality---Two hashes are equal if they each contain the same number</div><div class='del'>- *  of keys and if each key-value pair is equal to (according to</div><div class='del'>- *  &lt;code&gt;Object#==&lt;/code&gt;) the corresponding elements in the other</div><div class='del'>- *  hash.</div><div class='del'>- *</div><div class='del'>- *     h1 = { "a" =&gt; 1, "c" =&gt; 2 }</div><div class='del'>- *     h2 = { 7 =&gt; 35, "c" =&gt; 2, "a" =&gt; 1 }</div><div class='del'>- *     h3 = { "a" =&gt; 1, "c" =&gt; 2, 7 =&gt; 35 }</div><div class='del'>- *     h4 = { "a" =&gt; 1, "d" =&gt; 2, "f" =&gt; 35 }</div><div class='del'>- *     h1 == h2   #=&gt; false</div><div class='del'>- *     h2 == h3   #=&gt; true</div><div class='del'>- *     h3 == h4   #=&gt; false</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_equal(hash1, hash2)</div><div class='del'>-    VALUE hash1, hash2;</div><div class='del'>-{</div><div class='del'>-    return hash_equal(hash1, hash2, Qfalse);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-hash_i(key, val, hval)</div><div class='del'>-    VALUE key;</div><div class='del'>-    VALUE val;</div><div class='del'>-    int *hval;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    *hval ^= rb_hash(key);</div><div class='del'>-    *hval ^= rb_hash(val);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE recursive_hash _((VALUE, VALUE, int));</div><div class='del'>-static VALUE</div><div class='del'>-recursive_hash(hash, dummy, recur)</div><div class='del'>-    VALUE hash;</div><div class='del'>-    VALUE dummy;</div><div class='del'>-    int recur;</div><div class='del'>-{</div><div class='del'>-    int hval;</div><div class='del'>-</div><div class='del'>-    if (recur) {</div><div class='del'>-	return LONG2FIX(0);</div><div class='del'>-    }</div><div class='del'>-    hval = RHASH(hash)-&gt;tbl-&gt;num_entries;</div><div class='del'>-    rb_hash_foreach(hash, hash_i, (st_data_t)&amp;hval);</div><div class='del'>-    return INT2FIX(hval);</div><div class='del'>-}</div><div class='del'>-</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='del'>-static VALUE</div><div class='del'>-rb_hash_hash(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    return rb_exec_recursive(recursive_hash, hash, 0);</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'>- *     hash.eql?(other)  -&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;i&gt;hash&lt;/i&gt; and &lt;i&gt;other&lt;/i&gt; are</div><div class='del'>- *  both hashes with the same content.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_eql(hash1, hash2)</div><div class='del'>-    VALUE hash1, hash2;</div><div class='del'>-{</div><div class='del'>-    return hash_equal(hash1, hash2, Qtrue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_hash_invert_i(key, value, hash)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_hash_aset(hash, value, key);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.invert -&gt; aHash</div><div class='del'>- *</div><div class='del'>- *  Returns a new hash created by using &lt;i&gt;hsh&lt;/i&gt;'s values as keys, and</div><div class='del'>- *  the keys as values.</div><div class='del'>- *</div><div class='del'>- *     h = { "n" =&gt; 100, "m" =&gt; 100, "y" =&gt; 300, "d" =&gt; 200, "a" =&gt; 0 }</div><div class='del'>- *     h.invert   #=&gt; {0=&gt;"a", 100=&gt;"n", 200=&gt;"d", 300=&gt;"y"}</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_invert(hash)</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    VALUE h = rb_hash_new();</div><div class='del'>-</div><div class='del'>-    rb_hash_foreach(hash, rb_hash_invert_i, h);</div><div class='del'>-    return h;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_hash_update_i(key, value, hash)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    rb_hash_aset(hash, key, value);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_hash_update_block_i(key, value, hash)</div><div class='del'>-    VALUE key, value;</div><div class='del'>-    VALUE hash;</div><div class='del'>-{</div><div class='del'>-    if (key == Qundef) return ST_CONTINUE;</div><div class='del'>-    if (rb_hash_has_key(hash, key)) {</div><div class='del'>-	value = rb_yield_values(3, key, rb_hash_aref(hash, key), value);</div><div class='del'>-    }</div><div class='del'>-    rb_hash_aset(hash, key, value);</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.merge!(other_hash)                                 =&gt; hsh</div><div class='del'>- *     hsh.update(other_hash)                                 =&gt; hsh</div><div class='del'>- *     hsh.merge!(other_hash){|key, oldval, newval| block}    =&gt; hsh</div><div class='del'>- *     hsh.update(other_hash){|key, oldval, newval| block}    =&gt; hsh</div><div class='del'>- *</div><div class='del'>- *  Adds the contents of &lt;i&gt;other_hash&lt;/i&gt; to &lt;i&gt;hsh&lt;/i&gt;.  If no</div><div class='del'>- *  block is specified entries with duplicate keys are overwritten</div><div class='del'>- *  with the values from &lt;i&gt;other_hash&lt;/i&gt;, otherwise the value</div><div class='del'>- *  of each duplicate key is determined by calling the block with</div><div class='del'>- *  the key, its value in &lt;i&gt;hsh&lt;/i&gt; and its value in &lt;i&gt;other_hash&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *     h1 = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h2 = { "b" =&gt; 254, "c" =&gt; 300 }</div><div class='del'>- *     h1.merge!(h2)   #=&gt; {"a"=&gt;100, "b"=&gt;254, "c"=&gt;300}</div><div class='del'>- *</div><div class='del'>- *     h1 = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h2 = { "b" =&gt; 254, "c" =&gt; 300 }</div><div class='del'>- *     h1.merge!(h2) { |key, v1, v2| v1 }</div><div class='del'>- *                     #=&gt; {"a"=&gt;100, "b"=&gt;200, "c"=&gt;300}</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_update(hash1, hash2)</div><div class='del'>-    VALUE hash1, hash2;</div><div class='del'>-{</div><div class='del'>-    hash2 = to_hash(hash2);</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	rb_hash_foreach(hash2, rb_hash_update_block_i, hash1);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_hash_foreach(hash2, rb_hash_update_i, hash1);</div><div class='del'>-    }</div><div class='del'>-    return hash1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     hsh.merge(other_hash)                              -&gt; a_hash</div><div class='del'>- *     hsh.merge(other_hash){|key, oldval, newval| block} -&gt; a_hash</div><div class='del'>- *</div><div class='del'>- *  Returns a new hash containing the contents of &lt;i&gt;other_hash&lt;/i&gt; and</div><div class='del'>- *  the contents of &lt;i&gt;hsh&lt;/i&gt;, overwriting entries in &lt;i&gt;hsh&lt;/i&gt; with</div><div class='del'>- *  duplicate keys with those from &lt;i&gt;other_hash&lt;/i&gt;.</div><div class='del'>- *</div><div class='del'>- *     h1 = { "a" =&gt; 100, "b" =&gt; 200 }</div><div class='del'>- *     h2 = { "b" =&gt; 254, "c" =&gt; 300 }</div><div class='del'>- *     h1.merge(h2)   #=&gt; {"a"=&gt;100, "b"=&gt;254, "c"=&gt;300}</div><div class='del'>- *     h1             #=&gt; {"a"=&gt;100, "b"=&gt;200}</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_hash_merge(hash1, hash2)</div><div class='del'>-    VALUE hash1, hash2;</div><div class='del'>-{</div><div class='del'>-    return rb_hash_update(rb_obj_dup(hash1), hash2);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int path_tainted = -1;</div><div class='del'>-</div><div class='del'>-static char **origenviron;</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-#define GET_ENVIRON(e) (e = rb_w32_get_environ())</div><div class='del'>-#define FREE_ENVIRON(e) rb_w32_free_environ(e)</div><div class='del'>-static char **my_environ;</div><div class='del'>-#undef environ</div><div class='del'>-#define environ my_environ</div><div class='del'>-#elif defined(__APPLE__)</div><div class='del'>-#undef environ</div><div class='del'>-#define environ (*_NSGetEnviron())</div><div class='del'>-#define GET_ENVIRON(e) (e)</div><div class='del'>-#define FREE_ENVIRON(e)</div><div class='del'>-#else</div><div class='del'>-extern char **environ;</div><div class='del'>-#define GET_ENVIRON(e) (e)</div><div class='del'>-#define FREE_ENVIRON(e)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_str_new(ptr, len)</div><div class='del'>-    const char *ptr;</div><div class='del'>-    long len;</div><div class='del'>-{</div><div class='del'>-    VALUE str = rb_tainted_str_new(ptr, len);</div><div class='del'>-</div><div class='del'>-    rb_obj_freeze(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'>-env_str_new2(ptr)</div><div class='del'>-    const char *ptr;</div><div class='del'>-{</div><div class='del'>-    if (!ptr) return Qnil;</div><div class='del'>-    return env_str_new(ptr, strlen(ptr));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_delete(obj, name)</div><div class='del'>-    VALUE obj, name;</div><div class='del'>-{</div><div class='del'>-    char *nam, *val;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(name);</div><div class='del'>-    nam = RSTRING(name)-&gt;ptr;</div><div class='del'>-    if (strlen(nam) != RSTRING(name)-&gt;len) {</div><div class='del'>-	rb_raise(rb_eArgError, "bad environment variable name");</div><div class='del'>-    }</div><div class='del'>-    val = getenv(nam);</div><div class='del'>-    if (val) {</div><div class='del'>-	VALUE value = env_str_new2(val);</div><div class='del'>-</div><div class='del'>-	ruby_setenv(nam, 0);</div><div class='del'>-#ifdef ENV_IGNORECASE</div><div class='del'>-	if (strcasecmp(nam, PATH_ENV) == 0)</div><div class='del'>-#else</div><div class='del'>-	if (strcmp(nam, PATH_ENV) == 0)</div><div class='del'>-#endif</div><div class='del'>-	{</div><div class='del'>-	    path_tainted = 0;</div><div class='del'>-	}</div><div class='del'>-	return 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'>-env_delete_m(obj, name)</div><div class='del'>-    VALUE obj, name;</div><div class='del'>-{</div><div class='del'>-    VALUE val;</div><div class='del'>-</div><div class='del'>-    val = env_delete(obj, name);</div><div class='del'>-    if (NIL_P(val) &amp;&amp; rb_block_given_p()) rb_yield(name);</div><div class='del'>-    return val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_getenv(obj, name)</div><div class='del'>-    VALUE obj, name;</div><div class='del'>-{</div><div class='del'>-    char *nam, *env;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    SafeStringValue(name);</div><div class='del'>-    nam = RSTRING(name)-&gt;ptr;</div><div class='del'>-    if (strlen(nam) != RSTRING(name)-&gt;len) {</div><div class='del'>-	rb_raise(rb_eArgError, "bad environment variable name");</div><div class='del'>-    }</div><div class='del'>-    env = getenv(nam);</div><div class='del'>-    if (env) {</div><div class='del'>-#ifdef ENV_IGNORECASE</div><div class='del'>-	if (strcasecmp(nam, PATH_ENV) == 0 &amp;&amp; !rb_env_path_tainted())</div><div class='del'>-#else</div><div class='del'>-	if (strcmp(nam, PATH_ENV) == 0 &amp;&amp; !rb_env_path_tainted())</div><div class='del'>-#endif</div><div class='del'>-	{</div><div class='del'>-	    VALUE str = rb_str_new2(env);</div><div class='del'>-</div><div class='del'>-	    rb_obj_freeze(str);</div><div class='del'>-	    return str;</div><div class='del'>-	}</div><div class='del'>-	return env_str_new2(env);</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'>-env_fetch(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE key, if_none;</div><div class='del'>-    long block_given;</div><div class='del'>-    char *nam, *env;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;key, &amp;if_none);</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='del'>-    SafeStringValue(key);</div><div class='del'>-    nam = RSTRING(key)-&gt;ptr;</div><div class='del'>-    if (strlen(nam) != RSTRING(key)-&gt;len) {</div><div class='del'>-	rb_raise(rb_eArgError, "bad environment variable name");</div><div class='del'>-    }</div><div class='del'>-    env = getenv(nam);</div><div class='del'>-    if (!env) {</div><div class='del'>-	if (block_given) return rb_yield(key);</div><div class='del'>-	if (argc == 1) {</div><div class='del'>-	    rb_raise(rb_eIndexError, "key not found");</div><div class='del'>-	}</div><div class='del'>-	return if_none;</div><div class='del'>-    }</div><div class='del'>-#ifdef ENV_IGNORECASE</div><div class='del'>-    if (strcasecmp(nam, PATH_ENV) == 0 &amp;&amp; !rb_env_path_tainted())</div><div class='del'>-#else</div><div class='del'>-    if (strcmp(nam, PATH_ENV) == 0 &amp;&amp; !rb_env_path_tainted())</div><div class='del'>-#endif</div><div class='del'>-	return rb_str_new2(env);</div><div class='del'>-    return env_str_new2(env);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-path_tainted_p(path)</div><div class='del'>-    char *path;</div><div class='del'>-{</div><div class='del'>-    path_tainted = rb_path_check(path)?0:1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_env_path_tainted()</div><div class='del'>-{</div><div class='del'>-    if (path_tainted &lt; 0) {</div><div class='del'>-	path_tainted_p(getenv(PATH_ENV));</div><div class='del'>-    }</div><div class='del'>-    return path_tainted;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if !defined(_WIN32) &amp;&amp; !(defined(HAVE_SETENV) &amp;&amp; defined(HAVE_UNSETENV))</div><div class='del'>-static int</div><div class='del'>-envix(nam)</div><div class='del'>-    const char *nam;</div><div class='del'>-{</div><div class='del'>-    register int i, len = strlen(nam);</div><div class='del'>-    char **env;</div><div class='del'>-</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    for (i = 0; env[i]; i++) {</div><div class='del'>-	if (</div><div class='del'>-#ifdef ENV_IGNORECASE</div><div class='del'>-	    strncasecmp(env[i],nam,len) == 0</div><div class='del'>-#else</div><div class='del'>-	    memcmp(env[i],nam,len) == 0</div><div class='del'>-#endif</div><div class='del'>-	    &amp;&amp; env[i][len] == '=')</div><div class='del'>-	    break;			/* memcmp must come first to avoid */</div><div class='del'>-    }					/* potential SEGV's */</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return i;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-ruby_setenv(name, value)</div><div class='del'>-    const char *name;</div><div class='del'>-    const char *value;</div><div class='del'>-{</div><div class='del'>-#if defined(_WIN32)</div><div class='del'>-    /* The sane way to deal with the environment.</div><div class='del'>-     * Has these advantages over putenv() &amp; co.:</div><div class='del'>-     *  * enables us to store a truly empty value in the</div><div class='del'>-     *    environment (like in UNIX).</div><div class='del'>-     *  * we don't have to deal with RTL globals, bugs and leaks.</div><div class='del'>-     *  * Much faster.</div><div class='del'>-     * Why you may want to enable USE_WIN32_RTL_ENV:</div><div class='del'>-     *  * environ[] and RTL functions will not reflect changes,</div><div class='del'>-     *    which might be an issue if extensions want to access</div><div class='del'>-     *    the env. via RTL.  This cuts both ways, since RTL will</div><div class='del'>-     *    not see changes made by extensions that call the Win32</div><div class='del'>-     *    functions directly, either.</div><div class='del'>-     * GSAR 97-06-07</div><div class='del'>-     *</div><div class='del'>-     * REMARK: USE_WIN32_RTL_ENV is already obsoleted since we don't use</div><div class='del'>-     *         RTL's environ global variable directly yet.</div><div class='del'>-     */</div><div class='del'>-    SetEnvironmentVariable(name,value);</div><div class='del'>-#elif defined(HAVE_SETENV) &amp;&amp; defined(HAVE_UNSETENV)</div><div class='del'>-#undef setenv</div><div class='del'>-#undef unsetenv</div><div class='del'>-    if (value)</div><div class='del'>-	setenv(name,value,1);</div><div class='del'>-    else</div><div class='del'>-	unsetenv(name);</div><div class='del'>-#else  /* WIN32 */</div><div class='del'>-    size_t len;</div><div class='del'>-    int i=envix(name);		        /* where does it go? */</div><div class='del'>-</div><div class='del'>-    if (environ == origenviron) {	/* need we copy environment? */</div><div class='del'>-	int j;</div><div class='del'>-	int max;</div><div class='del'>-	char **tmpenv;</div><div class='del'>-</div><div class='del'>-	for (max = i; environ[max]; max++) ;</div><div class='del'>-	tmpenv = ALLOC_N(char*, max+2);</div><div class='del'>-	for (j=0; j&lt;max; j++)		/* copy environment */</div><div class='del'>-	    tmpenv[j] = strdup(environ[j]);</div><div class='del'>-	tmpenv[max] = 0;</div><div class='del'>-	environ = tmpenv;		/* tell exec where it is now */</div><div class='del'>-    }</div><div class='del'>-    if (environ[i]) {</div><div class='del'>-	char **envp = origenviron;</div><div class='del'>-	while (*envp &amp;&amp; *envp != environ[i]) envp++;</div><div class='del'>-	if (!*envp)</div><div class='del'>-	    free(environ[i]);</div><div class='del'>-	if (!value) {</div><div class='del'>-	    while (environ[i]) {</div><div class='del'>-		environ[i] = environ[i+1];</div><div class='del'>-		i++;</div><div class='del'>-	    }</div><div class='del'>-	    return;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {			/* does not exist yet */</div><div class='del'>-	if (!value) return;</div><div class='del'>-	REALLOC_N(environ, char*, i+2);	/* just expand it a bit */</div><div class='del'>-	environ[i+1] = 0;	/* make sure it's null terminated */</div><div class='del'>-    }</div><div class='del'>-    len = strlen(name) + strlen(value) + 2;</div><div class='del'>-    environ[i] = ALLOC_N(char, len);</div><div class='del'>-#ifndef MSDOS</div><div class='del'>-    snprintf(environ[i],len,"%s=%s",name,value); /* all that work just for this */</div><div class='del'>-#else</div><div class='del'>-    /* MS-DOS requires environment variable names to be in uppercase */</div><div class='del'>-    /* [Tom Dinger, 27 August 1990: Well, it doesn't _require_ it, but</div><div class='del'>-     * some utilities and applications may break because they only look</div><div class='del'>-     * for upper case strings. (Fixed strupr() bug here.)]</div><div class='del'>-     */</div><div class='del'>-    strcpy(environ[i],name); strupr(environ[i]);</div><div class='del'>-    sprintf(environ[i] + strlen(name),"=%s", value);</div><div class='del'>-#endif /* MSDOS */</div><div class='del'>-</div><div class='del'>-#endif /* WIN32 */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-ruby_unsetenv(name)</div><div class='del'>-    const char *name;</div><div class='del'>-{</div><div class='del'>-    ruby_setenv(name, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_aset(obj, nm, val)</div><div class='del'>-    VALUE obj, nm, val;</div><div class='del'>-{</div><div class='del'>-    char *name, *value;</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "can't change environment variable");</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (NIL_P(val)) {</div><div class='del'>-	env_delete(obj, nm);</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    StringValue(nm);</div><div class='del'>-    StringValue(val);</div><div class='del'>-    name = RSTRING(nm)-&gt;ptr;</div><div class='del'>-    value = RSTRING(val)-&gt;ptr;</div><div class='del'>-    if (strlen(name) != RSTRING(nm)-&gt;len)</div><div class='del'>-	rb_raise(rb_eArgError, "bad environment variable name");</div><div class='del'>-    if (strlen(value) != RSTRING(val)-&gt;len)</div><div class='del'>-	rb_raise(rb_eArgError, "bad environment variable value");</div><div class='del'>-</div><div class='del'>-    ruby_setenv(name, value);</div><div class='del'>-#ifdef ENV_IGNORECASE</div><div class='del'>-    if (strcasecmp(name, PATH_ENV) == 0) {</div><div class='del'>-#else</div><div class='del'>-    if (strcmp(name, PATH_ENV) == 0) {</div><div class='del'>-#endif</div><div class='del'>-	if (OBJ_TAINTED(val)) {</div><div class='del'>-	    /* already tainted, no check */</div><div class='del'>-	    path_tainted = 1;</div><div class='del'>-	    return val;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    path_tainted_p(value);</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'>-static VALUE</div><div class='del'>-env_keys()</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s) {</div><div class='del'>-	    rb_ary_push(ary, env_str_new(*env, s-*env));</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_each_key(ehash)</div><div class='del'>-    VALUE ehash;</div><div class='del'>-{</div><div class='del'>-    VALUE keys;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ehash, 0, 0);</div><div class='del'>-    keys = env_keys();	/* rb_secure(4); */</div><div class='del'>-    for (i=0; i&lt;RARRAY(keys)-&gt;len; i++) {</div><div class='del'>-	rb_yield(RARRAY(keys)-&gt;ptr[i]);</div><div class='del'>-    }</div><div class='del'>-    return ehash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_values()</div><div class='del'>-{</div><div class='del'>-    VALUE ary;</div><div class='del'>-    char **env;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s) {</div><div class='del'>-	    rb_ary_push(ary, env_str_new2(s+1));</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_each_value(ehash)</div><div class='del'>-    VALUE ehash;</div><div class='del'>-{</div><div class='del'>-    VALUE values;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ehash, 0, 0);</div><div class='del'>-    values = env_values();	/* rb_secure(4); */</div><div class='del'>-    for (i=0; i&lt;RARRAY(values)-&gt;len; i++) {</div><div class='del'>-	rb_yield(RARRAY(values)-&gt;ptr[i]);</div><div class='del'>-    }</div><div class='del'>-    return ehash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_each_i(ehash, values)</div><div class='del'>-    VALUE ehash;</div><div class='del'>-    int values;</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-    VALUE ary;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s) {</div><div class='del'>-	    rb_ary_push(ary, env_str_new(*env, s-*env));</div><div class='del'>-	    rb_ary_push(ary, env_str_new2(s+1));</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i+=2) {</div><div class='del'>-	if (values) {</div><div class='del'>-	    rb_yield_values(2, RARRAY(ary)-&gt;ptr[i], RARRAY(ary)-&gt;ptr[i+1]);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_yield(rb_assoc_new(RARRAY(ary)-&gt;ptr[i], RARRAY(ary)-&gt;ptr[i+1]));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return ehash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_each(ehash)</div><div class='del'>-    VALUE ehash;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(ehash, 0, 0);</div><div class='del'>-    return env_each_i(ehash, Qfalse);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_each_pair(ehash)</div><div class='del'>-    VALUE ehash;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(ehash, 0, 0);</div><div class='del'>-    return env_each_i(ehash, Qtrue);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_reject_bang(ehash)</div><div class='del'>-    VALUE ehash;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE keys;</div><div class='del'>-    long i;</div><div class='del'>-    int del = 0;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ehash, 0, 0);</div><div class='del'>-    keys = env_keys();	/* rb_secure(4); */</div><div class='del'>-    for (i=0; i&lt;RARRAY(keys)-&gt;len; i++) {</div><div class='del'>-	VALUE val = rb_f_getenv(Qnil, RARRAY(keys)-&gt;ptr[i]);</div><div class='del'>-	if (!NIL_P(val)) {</div><div class='del'>-	    if (RTEST(rb_yield_values(2, RARRAY(keys)-&gt;ptr[i], val))) {</div><div class='del'>-		FL_UNSET(RARRAY(keys)-&gt;ptr[i], FL_TAINT);</div><div class='del'>-		env_delete(Qnil, RARRAY(keys)-&gt;ptr[i]);</div><div class='del'>-		del++;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (del == 0) return Qnil;</div><div class='del'>-    return envtbl;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_delete_if(ehash)</div><div class='del'>-    VALUE ehash;</div><div class='del'>-{</div><div class='del'>-    RETURN_ENUMERATOR(ehash, 0, 0);</div><div class='del'>-    env_reject_bang(ehash);</div><div class='del'>-    return envtbl;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_values_at(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    result = rb_ary_new();</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	rb_ary_push(result, rb_f_getenv(Qnil, argv[i]));</div><div class='del'>-    }</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_select(ehash)</div><div class='del'>-    VALUE ehash;</div><div class='del'>-{</div><div class='del'>-    VALUE result;</div><div class='del'>-    char **env;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(ehash, 0, 0);</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    result = rb_ary_new();</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s) {</div><div class='del'>-	    VALUE k = env_str_new(*env, s-*env);</div><div class='del'>-	    VALUE v = env_str_new2(s+1);</div><div class='del'>-	    if (RTEST(rb_yield_values(2, k, v))) {</div><div class='del'>-		rb_ary_push(result, rb_assoc_new(k, v));</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-</div><div class='del'>-    return result;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_clear()</div><div class='del'>-{</div><div class='del'>-    volatile VALUE keys;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    keys = env_keys();	/* rb_secure(4); */</div><div class='del'>-    for (i=0; i&lt;RARRAY(keys)-&gt;len; i++) {</div><div class='del'>-	VALUE val = rb_f_getenv(Qnil, RARRAY(keys)-&gt;ptr[i]);</div><div class='del'>-	if (!NIL_P(val)) {</div><div class='del'>-	    env_delete(Qnil, RARRAY(keys)-&gt;ptr[i]);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return envtbl;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_to_s()</div><div class='del'>-{</div><div class='del'>-    return rb_str_new2("ENV");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_inspect()</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-    VALUE str, i;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    str = rb_str_buf_new2("{");</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-</div><div class='del'>-	if (env != environ) {</div><div class='del'>-	    rb_str_buf_cat2(str, ", ");</div><div class='del'>-	}</div><div class='del'>-	if (s) {</div><div class='del'>-	    rb_str_buf_cat2(str, "\"");</div><div class='del'>-	    rb_str_buf_cat(str, *env, s-*env);</div><div class='del'>-	    rb_str_buf_cat2(str, "\"=&gt;");</div><div class='del'>-	    i = rb_inspect(rb_str_new2(s+1));</div><div class='del'>-	    rb_str_buf_append(str, i);</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    rb_str_buf_cat2(str, "}");</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'>-env_to_a()</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-    VALUE ary;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s) {</div><div class='del'>-	    rb_ary_push(ary, rb_assoc_new(env_str_new(*env, s-*env),</div><div class='del'>-					  env_str_new2(s+1)));</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return ary;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_none()</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'>-env_size()</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    char **env;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    for(i=0; env[i]; i++)</div><div class='del'>-	;</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return INT2FIX(i);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_empty_p()</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    if (env[0] == 0) {</div><div class='del'>-	FREE_ENVIRON(environ);</div><div class='del'>-	return Qtrue;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_has_key(env, key)</div><div class='del'>-    VALUE env, key;</div><div class='del'>-{</div><div class='del'>-    char *s;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    s = StringValuePtr(key);</div><div class='del'>-    if (strlen(s) != RSTRING(key)-&gt;len)</div><div class='del'>-	rb_raise(rb_eArgError, "bad environment variable name");</div><div class='del'>-    if (getenv(s)) 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'>-env_has_value(dmy, value)</div><div class='del'>-    VALUE dmy, value;</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    value = rb_check_string_type(value);</div><div class='del'>-    if (NIL_P(value)) return Qfalse;</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s++) {</div><div class='del'>-	    long len = strlen(s);</div><div class='del'>-	    if (RSTRING(value)-&gt;len == len &amp;&amp; strncmp(s, RSTRING(value)-&gt;ptr, len) == 0) {</div><div class='del'>-		FREE_ENVIRON(environ);</div><div class='del'>-		return Qtrue;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_index(dmy, value)</div><div class='del'>-    VALUE dmy, value;</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    StringValue(value);</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s++) {</div><div class='del'>-	    long len = strlen(s);</div><div class='del'>-	    if (RSTRING(value)-&gt;len == len &amp;&amp; strncmp(s, RSTRING(value)-&gt;ptr, len) == 0) {</div><div class='del'>-		str = env_str_new(*env, s-*env-1);</div><div class='del'>-		FREE_ENVIRON(environ);</div><div class='del'>-		return str;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_indexes(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    VALUE indexes = rb_ary_new2(argc);</div><div class='del'>-</div><div class='del'>-    rb_warn("ENV.%s is deprecated; use ENV.values_at",</div><div class='del'>-	    rb_id2name(rb_frame_last_func()));</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    for (i=0;i&lt;argc;i++) {</div><div class='del'>-	VALUE tmp = rb_check_string_type(argv[i]);</div><div class='del'>-	if (NIL_P(tmp)) {</div><div class='del'>-	    RARRAY(indexes)-&gt;ptr[i] = Qnil;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    RARRAY(indexes)-&gt;ptr[i] = env_str_new2(getenv(RSTRING(tmp)-&gt;ptr));</div><div class='del'>-	}</div><div class='del'>-	RARRAY(indexes)-&gt;len = i+1;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return indexes;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_to_hash()</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-    VALUE hash;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    hash = rb_hash_new();</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    while (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s) {</div><div class='del'>-	    rb_hash_aset(hash, env_str_new(*env, s-*env),</div><div class='del'>-			       env_str_new2(s+1));</div><div class='del'>-	}</div><div class='del'>-	env++;</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return hash;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_reject()</div><div class='del'>-{</div><div class='del'>-    return rb_hash_delete_if(env_to_hash());</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_shift()</div><div class='del'>-{</div><div class='del'>-    char **env;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    env = GET_ENVIRON(environ);</div><div class='del'>-    if (*env) {</div><div class='del'>-	char *s = strchr(*env, '=');</div><div class='del'>-	if (s) {</div><div class='del'>-	    VALUE key = env_str_new(*env, s-*env);</div><div class='del'>-	    VALUE val = env_str_new2(getenv(RSTRING(key)-&gt;ptr));</div><div class='del'>-	    env_delete(Qnil, key);</div><div class='del'>-	    return rb_assoc_new(key, val);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    FREE_ENVIRON(environ);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_invert()</div><div class='del'>-{</div><div class='del'>-    return rb_hash_invert(env_to_hash());</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-env_replace_i(key, val, keys)</div><div class='del'>-    VALUE key, val, keys;</div><div class='del'>-{</div><div class='del'>-    if (key != Qundef) {</div><div class='del'>-	env_aset(Qnil, key, val);</div><div class='del'>-	if (rb_ary_includes(keys, key)) {</div><div class='del'>-	    rb_ary_delete(keys, key);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_replace(env, hash)</div><div class='del'>-    VALUE env, hash;</div><div class='del'>-{</div><div class='del'>-    volatile VALUE keys;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    keys = env_keys();	/* rb_secure(4); */</div><div class='del'>-    if (env == hash) return env;</div><div class='del'>-    hash = to_hash(hash);</div><div class='del'>-    rb_hash_foreach(hash, env_replace_i, keys);</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;RARRAY(keys)-&gt;len; i++) {</div><div class='del'>-	env_delete(env, RARRAY(keys)-&gt;ptr[i]);</div><div class='del'>-    }</div><div class='del'>-    return env;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-env_update_i(key, val)</div><div class='del'>-    VALUE key, val;</div><div class='del'>-{</div><div class='del'>-    if (key != Qundef) {</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    val = rb_yield_values(3, key, rb_f_getenv(Qnil, key), val);</div><div class='del'>-	}</div><div class='del'>-	env_aset(Qnil, key, val);</div><div class='del'>-    }</div><div class='del'>-    return ST_CONTINUE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-env_update(env, hash)</div><div class='del'>-    VALUE env, hash;</div><div class='del'>-{</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (env == hash) return env;</div><div class='del'>-    hash = to_hash(hash);</div><div class='del'>-    rb_hash_foreach(hash, env_update_i, 0);</div><div class='del'>-    return env;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  A &lt;code&gt;Hash&lt;/code&gt; is a collection of key-value pairs. It is</div><div class='del'>- *  similar to an &lt;code&gt;Array&lt;/code&gt;, except that indexing is done via</div><div class='del'>- *  arbitrary keys of any object type, not an integer index. The order</div><div class='del'>- *  in which you traverse a hash by either key or value may seem</div><div class='del'>- *  arbitrary, and will generally not be in the insertion order.</div><div class='del'>- *</div><div class='del'>- *  Hashes have a &lt;em&gt;default value&lt;/em&gt; that is returned when accessing</div><div class='del'>- *  keys that do not exist in the hash. By default, that value is</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *  &lt;code&gt;Hash&lt;/code&gt; uses &lt;code&gt;key.eql?&lt;/code&gt; to test keys for equality.</div><div class='del'>- *  If you need to use instances of your own classes as keys in a &lt;code&gt;Hash&lt;/code&gt;,</div><div class='del'>- *  it is recommended that you define both the &lt;code&gt;eql?&lt;/code&gt; and &lt;code&gt;hash&lt;/code&gt;</div><div class='del'>- *  methods. The &lt;code&gt;hash&lt;/code&gt; method must have the property that</div><div class='del'>- *  &lt;code&gt;a.eql?(b)&lt;/code&gt; implies &lt;code&gt;a.hash == b.hash&lt;/code&gt;.</div><div class='del'>- *</div><div class='del'>- *    class MyClass</div><div class='del'>- *      attr_reader :str</div><div class='del'>- *      def initialize(str)</div><div class='del'>- *        @str = str</div><div class='del'>- *      end</div><div class='del'>- *      def eql?(o)</div><div class='del'>- *        o.is_a?(MyClass) &amp;&amp; str == o.str</div><div class='del'>- *      end</div><div class='del'>- *      def hash</div><div class='del'>- *        @str.hash</div><div class='del'>- *      end</div><div class='del'>- *    end</div><div class='del'>- *</div><div class='del'>- *    a = MyClass.new("some string")</div><div class='del'>- *    b = MyClass.new("some string")</div><div class='del'>- *    a.eql? b  #=&gt; true</div><div class='del'>- *</div><div class='del'>- *    h = {}</div><div class='del'>- *</div><div class='del'>- *    h[a] = 1</div><div class='del'>- *    h[a]      #=&gt; 1</div><div class='del'>- *    h[b]      #=&gt; 1</div><div class='del'>- *</div><div class='del'>- *    h[b] = 2</div><div class='del'>- *    h[a]      #=&gt; 2</div><div class='del'>- *    h[b]      #=&gt; 2</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-Init_Hash()</div><div class='del'>-{</div><div class='del'>-    id_hash = rb_intern("hash");</div><div class='del'>-    id_call = rb_intern("call");</div><div class='del'>-    id_default = rb_intern("default");</div><div class='del'>-</div><div class='del'>-    rb_cHash = rb_define_class("Hash", rb_cObject);</div><div class='del'>-</div><div class='del'>-    rb_include_module(rb_cHash, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cHash, hash_alloc);</div><div class='del'>-    rb_define_singleton_method(rb_cHash, "[]", rb_hash_s_create, -1);</div><div class='del'>-    rb_define_method(rb_cHash,"initialize", rb_hash_initialize, -1);</div><div class='del'>-    rb_define_method(rb_cHash,"initialize_copy", rb_hash_replace, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"rehash", rb_hash_rehash, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cHash,"to_hash", rb_hash_to_hash, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"to_a", rb_hash_to_a, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"to_s", rb_hash_to_s, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"inspect", rb_hash_inspect, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cHash,"==", rb_hash_equal, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"[]", rb_hash_aref, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"hash", rb_hash_hash, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"eql?", rb_hash_eql, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"fetch", rb_hash_fetch, -1);</div><div class='del'>-    rb_define_method(rb_cHash,"[]=", rb_hash_aset, 2);</div><div class='del'>-    rb_define_method(rb_cHash,"store", rb_hash_aset, 2);</div><div class='del'>-    rb_define_method(rb_cHash,"default", rb_hash_default, -1);</div><div class='del'>-    rb_define_method(rb_cHash,"default=", rb_hash_set_default, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"default_proc", rb_hash_default_proc, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"index", rb_hash_index, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"indexes", rb_hash_indexes, -1);</div><div class='del'>-    rb_define_method(rb_cHash,"indices", rb_hash_indexes, -1);</div><div class='del'>-    rb_define_method(rb_cHash,"size", rb_hash_size, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"length", rb_hash_size, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"empty?", rb_hash_empty_p, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cHash,"each", rb_hash_each, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"each_value", rb_hash_each_value, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"each_key", rb_hash_each_key, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"each_pair", rb_hash_each_pair, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"sort", rb_hash_sort, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cHash,"keys", rb_hash_keys, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"values", rb_hash_values, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"values_at", rb_hash_values_at, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cHash,"shift", rb_hash_shift, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"delete", rb_hash_delete, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"delete_if", rb_hash_delete_if, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"select", rb_hash_select, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"reject", rb_hash_reject, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"reject!", rb_hash_reject_bang, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"clear", rb_hash_clear, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"invert", rb_hash_invert, 0);</div><div class='del'>-    rb_define_method(rb_cHash,"update", rb_hash_update, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"replace", rb_hash_replace, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"merge!", rb_hash_update, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"merge", rb_hash_merge, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cHash,"include?", rb_hash_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"member?", rb_hash_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"has_key?", rb_hash_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"has_value?", rb_hash_has_value, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"key?", rb_hash_has_key, 1);</div><div class='del'>-    rb_define_method(rb_cHash,"value?", rb_hash_has_value, 1);</div><div class='del'>-</div><div class='del'>-#ifndef __MACOS__ /* environment variables nothing on MacOS. */</div><div class='del'>-    origenviron = environ;</div><div class='del'>-    envtbl = rb_obj_alloc(rb_cObject);</div><div class='del'>-    rb_extend_object(envtbl, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(envtbl,"[]", rb_f_getenv, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"fetch", env_fetch, -1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"[]=", env_aset, 2);</div><div class='del'>-    rb_define_singleton_method(envtbl,"store", env_aset, 2);</div><div class='del'>-    rb_define_singleton_method(envtbl,"each", env_each, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"each_pair", env_each_pair, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"each_key", env_each_key, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"each_value", env_each_value, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"delete", env_delete_m, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"delete_if", env_delete_if, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"clear", env_clear, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"reject", env_reject, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"reject!", env_reject_bang, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"select", env_select, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"shift", env_shift, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"invert", env_invert, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"replace", env_replace, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"update", env_update, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"inspect", env_inspect, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"rehash", env_none, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"to_a", env_to_a, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"to_s", env_to_s, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"index", env_index, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"indexes", env_indexes, -1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"indices", env_indexes, -1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"size", env_size, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"length", env_size, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"empty?", env_empty_p, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"keys", env_keys, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"values", env_values, 0);</div><div class='del'>-    rb_define_singleton_method(envtbl,"values_at", env_values_at, -1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"include?", env_has_key, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"member?", env_has_key, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"has_key?", env_has_key, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"has_value?", env_has_value, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"key?", env_has_key, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"value?", env_has_value, 1);</div><div class='del'>-    rb_define_singleton_method(envtbl,"to_hash", env_to_hash, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_global_const("ENV", envtbl);</div><div class='del'>-#else /* __MACOS__ */</div><div class='del'>-	envtbl = rb_hash_s_new(0, NULL, rb_cHash);</div><div class='del'>-    rb_define_global_const("ENV", envtbl);</div><div class='del'>-#endif  /* ifndef __MACOS__  environment variables nothing on MacOS. */</div><div class='del'>-}</div><div class='head'>diff --git a/ia64.s b/ia64.s<br/>deleted file mode 100644<br/>index ba5241daf2..0000000000<br/>--- a/<a href='/ruby.git/tree/ia64.s?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>ia64.s</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-// rb_ia64_flushrs and rb_ia64_bsp is written in IA64 assembly language</div><div class='del'>-// because Intel Compiler for IA64 doesn't support inline assembly.</div><div class='del'>-//</div><div class='del'>-// This file is based on following C program compiled by gcc.</div><div class='del'>-//</div><div class='del'>-//   void rb_ia64_flushrs(void) { __builtin_ia64_flushrs(); }</div><div class='del'>-//   void *rb_ia64_bsp(void) { return __builtin_ia64_bsp(); }</div><div class='del'>-// </div><div class='del'>-	.file	"ia64.c"</div><div class='del'>-	.text</div><div class='del'>-	.align 16</div><div class='del'>-	.global rb_ia64_flushrs#</div><div class='del'>-	.proc rb_ia64_flushrs#</div><div class='del'>-rb_ia64_flushrs:</div><div class='del'>-	.prologue</div><div class='del'>-	.body</div><div class='del'>-	flushrs</div><div class='del'>-	;;</div><div class='del'>-	nop.i 0</div><div class='del'>-	br.ret.sptk.many b0</div><div class='del'>-	.endp rb_ia64_flushrs#</div><div class='del'>-	.align 16</div><div class='del'>-	.global rb_ia64_bsp#</div><div class='del'>-	.proc rb_ia64_bsp#</div><div class='del'>-rb_ia64_bsp:</div><div class='del'>-	.prologue</div><div class='del'>-	.body</div><div class='del'>-	nop.m 0</div><div class='del'>-	;;</div><div class='del'>-	mov r8 = ar.bsp</div><div class='del'>-	br.ret.sptk.many b0</div><div class='del'>-	.endp rb_ia64_bsp#</div><div class='del'>-	.ident	"GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13)"</div><div class='head'>diff --git a/ident.h b/ident.h<br/>new file mode 100644<br/>index 0000000000..8047c272ca<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/ident.h?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>ident.h</a></div><div class='hunk'>@@ -0,0 +1,25 @@</div><div class='add'>+/************************************************</div><div class='add'>+</div><div class='add'>+  ident.h -</div><div class='add'>+</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Revision: 1.1.1.1 $</div><div class='add'>+  $Date: 1994/06/17 14:23:49 $</div><div class='add'>+  created at: Mon Jan 31 16:23:19 JST 1994</div><div class='add'>+</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='add'>+</div><div class='add'>+************************************************/</div><div class='add'>+</div><div class='add'>+#ifndef IDENT_H</div><div class='add'>+#define IDENT_H</div><div class='add'>+</div><div class='add'>+#define ID_SCOPE_MASK 0x07</div><div class='add'>+#define ID_LOCAL    0x00</div><div class='add'>+#define ID_ATTRSET  0x04</div><div class='add'>+#define ID_INSTANCE 0x02</div><div class='add'>+#define ID_GLOBAL   0x03</div><div class='add'>+#define ID_CONST    0x06</div><div class='add'>+#define ID_VARMASK  0x02</div><div class='add'>+</div><div class='add'>+#endif</div><div class='head'>diff --git a/inits.c b/inits.c<br/>index 947bbbe242..58d686d912 100644<br/>--- a/<a href='/ruby.git/tree/inits.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>inits.c</a><br/>+++ b/<a href='/ruby.git/tree/inits.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>inits.c</a></div><div class='hunk'>@@ -1,71 +1,31 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   inits.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/17 14:23:50 $</div><div class='ctx'>   created at: Tue Dec 28 16:01:58 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='ctx'> </div><div class='del'>-void Init_Array _((void));</div><div class='del'>-void Init_Bignum _((void));</div><div class='del'>-void Init_Binding _((void));</div><div class='del'>-void Init_Comparable _((void));</div><div class='del'>-void Init_Dir _((void));</div><div class='del'>-void Init_Enumerable _((void));</div><div class='del'>-void Init_Enumerator _((void));</div><div class='del'>-void Init_Exception _((void));</div><div class='del'>-void Init_syserr _((void));</div><div class='del'>-void Init_eval _((void));</div><div class='del'>-void Init_load _((void));</div><div class='del'>-void Init_Proc _((void));</div><div class='del'>-void Init_Thread _((void));</div><div class='del'>-void Init_File _((void));</div><div class='del'>-void Init_GC _((void));</div><div class='del'>-void Init_Hash _((void));</div><div class='del'>-void Init_IO _((void));</div><div class='del'>-void Init_Math _((void));</div><div class='del'>-void Init_marshal _((void));</div><div class='del'>-void Init_Numeric _((void));</div><div class='del'>-void Init_Object _((void));</div><div class='del'>-void Init_pack _((void));</div><div class='del'>-void Init_Precision _((void));</div><div class='del'>-void Init_sym _((void));</div><div class='del'>-void Init_process _((void));</div><div class='del'>-void Init_Random _((void));</div><div class='del'>-void Init_Range _((void));</div><div class='del'>-void Init_Regexp _((void));</div><div class='del'>-void Init_signal _((void));</div><div class='del'>-void Init_String _((void));</div><div class='del'>-void Init_Struct _((void));</div><div class='del'>-void Init_Time _((void));</div><div class='del'>-void Init_var_tables _((void));</div><div class='del'>-void Init_version _((void));</div><div class='del'>-</div><div class='del'>-void</div><div class='ctx'> rb_call_inits()</div><div class='ctx'> {</div><div class='ctx'>     Init_sym();</div><div class='ctx'>     Init_var_tables();</div><div class='ctx'>     Init_Object();</div><div class='add'>+    Init_GC();</div><div class='ctx'>     Init_Comparable();</div><div class='ctx'>     Init_Enumerable();</div><div class='del'>-    Init_Precision();</div><div class='del'>-    Init_eval();</div><div class='del'>-    Init_String();</div><div class='del'>-    Init_Exception();</div><div class='del'>-    Init_Thread();</div><div class='ctx'>     Init_Numeric();</div><div class='ctx'>     Init_Bignum();</div><div class='del'>-    Init_syserr();</div><div class='ctx'>     Init_Array();</div><div class='del'>-    Init_Hash();</div><div class='add'>+    Init_Dict();</div><div class='ctx'>     Init_Struct();</div><div class='add'>+    Init_String();</div><div class='ctx'>     Init_Regexp();</div><div class='ctx'>     Init_pack();</div><div class='ctx'>     Init_Range();</div><div class='hunk'>@@ -73,14 +33,18 @@ rb_call_inits()</div><div class='ctx'>     Init_Dir();</div><div class='ctx'>     Init_Time();</div><div class='ctx'>     Init_Random();</div><div class='del'>-    Init_signal();</div><div class='ctx'>     Init_process();</div><div class='add'>+    Init_Etc();</div><div class='ctx'>     Init_load();</div><div class='del'>-    Init_Proc();</div><div class='del'>-    Init_Binding();</div><div class='ctx'>     Init_Math();</div><div class='del'>-    Init_GC();</div><div class='del'>-    Init_Enumerator();</div><div class='del'>-    Init_marshal();</div><div class='add'>+#ifdef USE_DBM</div><div class='add'>+    Init_DBM();</div><div class='add'>+#endif</div><div class='add'>+#ifdef HAVE_SOCKET</div><div class='add'>+    Init_Socket();</div><div class='add'>+#endif</div><div class='add'>+    /* new Inits comes between here.. */</div><div class='add'>+</div><div class='add'>+    /* .. and here. */</div><div class='ctx'>     Init_version();</div><div class='ctx'> }</div><div class='head'>diff --git a/install-sh b/install-sh<br/>deleted file mode 100644<br/>index e69de29bb2..0000000000<br/>--- a/<a href='/ruby.git/tree/install-sh?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>install-sh</a><br/>+++ /dev/null</div><div class='head'>diff --git a/instruby.rb b/instruby.rb<br/>deleted file mode 100755<br/>index 2903a7c739..0000000000<br/>--- a/<a href='/ruby.git/tree/instruby.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>instruby.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,411 +0,0 @@</div><div class='del'>-#!./miniruby</div><div class='del'>-</div><div class='del'>-load "./rbconfig.rb"</div><div class='del'>-include RbConfig</div><div class='del'>-</div><div class='del'>-srcdir = File.dirname(__FILE__)</div><div class='del'>-$:.unshift File.expand_path("lib", srcdir)</div><div class='del'>-require 'fileutils'</div><div class='del'>-require 'shellwords'</div><div class='del'>-require 'optparse'</div><div class='del'>-require 'optparse/shellwords'</div><div class='del'>-require 'tempfile'</div><div class='del'>-</div><div class='del'>-STDOUT.sync = true</div><div class='del'>-File.umask(0)</div><div class='del'>-</div><div class='del'>-def parse_args(argv = ARGV)</div><div class='del'>-  $mantype = 'doc'</div><div class='del'>-  $destdir = nil</div><div class='del'>-  $extout = nil</div><div class='del'>-  $make = 'make'</div><div class='del'>-  $mflags = []</div><div class='del'>-  $install = []</div><div class='del'>-  $installed_list = nil</div><div class='del'>-  $dryrun = false</div><div class='del'>-  $rdocdir = nil</div><div class='del'>-  $data_mode = 0644</div><div class='del'>-  $prog_mode = 0755</div><div class='del'>-  $dir_mode = nil</div><div class='del'>-  $script_mode = nil</div><div class='del'>-  $cmdtype = ('bat' if File::ALT_SEPARATOR == '\\')</div><div class='del'>-  mflags = []</div><div class='del'>-  opt = OptionParser.new</div><div class='del'>-  opt.on('-n') {$dryrun = true}</div><div class='del'>-  opt.on('--dest-dir=DIR') {|dir| $destdir = dir}</div><div class='del'>-  opt.on('--extout=DIR') {|dir| $extout = (dir unless dir.empty?)}</div><div class='del'>-  opt.on('--make=COMMAND') {|make| $make = make}</div><div class='del'>-  opt.on('--mantype=MAN') {|man| $mantype = man}</div><div class='del'>-  opt.on('--make-flags=FLAGS', '--mflags', Shellwords) do |v|</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'>-  opt.on('-i', '--install=TYPE',</div><div class='del'>-         [:local, :bin, :"bin-arch", :"bin-comm", :lib, :man, :ext, :"ext-arch", :"ext-comm", :rdoc]) do |ins|</div><div class='del'>-    $install &lt;&lt; ins</div><div class='del'>-  end</div><div class='del'>-  opt.on('--data-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode|</div><div class='del'>-    $data_mode = mode</div><div class='del'>-  end</div><div class='del'>-  opt.on('--prog-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode|</div><div class='del'>-    $prog_mode = mode</div><div class='del'>-  end</div><div class='del'>-  opt.on('--dir-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode|</div><div class='del'>-    $dir_mode = mode</div><div class='del'>-  end</div><div class='del'>-  opt.on('--script-mode=OCTAL-MODE', OptionParser::OctalInteger) do |mode|</div><div class='del'>-    $script_mode = mode</div><div class='del'>-  end</div><div class='del'>-  opt.on('--installed-list [FILENAME]') {|name| $installed_list = name}</div><div class='del'>-  opt.on('--rdoc-output [DIR]') {|dir| $rdocdir = dir}</div><div class='del'>-  opt.on('--cmd-type=TYPE', %w[bat cmd plain]) {|cmd| $cmdtype = (cmd unless cmd == 'plain')}</div><div class='del'>-</div><div class='del'>-  opt.order!(argv) do |v|</div><div class='del'>-    case v</div><div class='del'>-    when /\AINSTALL[-_]([-\w]+)=(.*)/</div><div class='del'>-      argv.unshift("--#{$1.tr('_', '-')}=#{$2}")</div><div class='del'>-    when /\A\w[-\w+]*=\z/</div><div class='del'>-      mflags &lt;&lt; v</div><div class='del'>-    when /\A\w[-\w+]*\z/</div><div class='del'>-      $install &lt;&lt; v.intern</div><div class='del'>-    else</div><div class='del'>-      raise OptionParser::InvalidArgument, v</div><div class='del'>-    end</div><div class='del'>-  end rescue abort [$!.message, opt].join("\n")</div><div class='del'>-</div><div class='del'>-  $make, *rest = Shellwords.shellwords($make)</div><div class='del'>-  $mflags.unshift(*rest) unless rest.empty?</div><div class='del'>-  $mflags.unshift(*mflags)</div><div class='del'>-</div><div class='del'>-  def $mflags.set?(flag)</div><div class='del'>-    grep(/\A-(?!-).*#{flag.chr}/i) { return true }</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-  def $mflags.defined?(var)</div><div class='del'>-    grep(/\A#{var}=(.*)/) {return block_given? ? yield($1) : $1}</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if $mflags.set?(?n)</div><div class='del'>-    $dryrun = true</div><div class='del'>-  else</div><div class='del'>-    $mflags &lt;&lt; '-n' if $dryrun</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $destdir ||= $mflags.defined?("DESTDIR")</div><div class='del'>-  if $extout ||= $mflags.defined?("EXTOUT")</div><div class='del'>-    Config.expand($extout)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $continue = $mflags.set?(?k)</div><div class='del'>-</div><div class='del'>-  if $installed_list ||= $mflags.defined?('INSTALLED_LIST')</div><div class='del'>-    Config.expand($installed_list, Config::CONFIG)</div><div class='del'>-    $installed_list = open($installed_list, "ab")</div><div class='del'>-    $installed_list.sync = true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $rdocdir ||= $mflags.defined?('RDOCOUT')</div><div class='del'>-</div><div class='del'>-  $dir_mode ||= $prog_mode | 0700</div><div class='del'>-  $script_mode ||= $prog_mode</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-parse_args()</div><div class='del'>-</div><div class='del'>-include FileUtils</div><div class='del'>-include FileUtils::NoWrite if $dryrun</div><div class='del'>-@fileutils_output = STDOUT</div><div class='del'>-@fileutils_label = ''</div><div class='del'>-</div><div class='del'>-$install_procs = Hash.new {[]}</div><div class='del'>-def install?(*types, &amp;block)</div><div class='del'>-  $install_procs[:all] &lt;&lt;= block</div><div class='del'>-  types.each do |type|</div><div class='del'>-    $install_procs[type] &lt;&lt;= block</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def install(src, dest, options = {})</div><div class='del'>-  options[:preserve] = true</div><div class='del'>-  super(src, with_destdir(dest), options)</div><div class='del'>-  if $installed_list</div><div class='del'>-    dest = File.join(dest, File.basename(src)) if $made_dirs[dest]</div><div class='del'>-    $installed_list.puts dest</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def ln_sf(src, dest)</div><div class='del'>-  super(src, with_destdir(dest))</div><div class='del'>-  $installed_list.puts dest if $installed_list</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$made_dirs = {}</div><div class='del'>-def makedirs(dirs)</div><div class='del'>-  dirs = fu_list(dirs)</div><div class='del'>-  dirs.collect! do |dir|</div><div class='del'>-    realdir = with_destdir(dir)</div><div class='del'>-    realdir unless $made_dirs.fetch(dir) do</div><div class='del'>-      $made_dirs[dir] = true</div><div class='del'>-      $installed_list.puts(File.join(dir, "")) if $installed_list</div><div class='del'>-      File.directory?(realdir)</div><div class='del'>-    end</div><div class='del'>-  end.compact!</div><div class='del'>-  super(dirs, :mode =&gt; $dir_mode) unless dirs.empty?</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def install_recursive(srcdir, dest, options = {})</div><div class='del'>-  opts = options.clone</div><div class='del'>-  noinst = opts.delete(:no_install)</div><div class='del'>-  glob = opts.delete(:glob) || "*"</div><div class='del'>-  subpath = srcdir.size..-1</div><div class='del'>-  Dir.glob("#{srcdir}/**/#{glob}") do |src|</div><div class='del'>-    case base = File.basename(src)</div><div class='del'>-    when /\A\#.*\#\z/, /~\z/</div><div class='del'>-      next</div><div class='del'>-    end</div><div class='del'>-    if noinst</div><div class='del'>-      if Array === noinst</div><div class='del'>-        next if noinst.any? {|n| File.fnmatch?(n, base)}</div><div class='del'>-      else</div><div class='del'>-        next if File.fnmatch?(noinst, base)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    d = dest + src[subpath]</div><div class='del'>-    if File.directory?(src)</div><div class='del'>-      makedirs(d)</div><div class='del'>-    else</div><div class='del'>-      makedirs(File.dirname(d))</div><div class='del'>-      install src, d, opts</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def open_for_install(path, mode)</div><div class='del'>-  data = open(realpath = with_destdir(path), "rb") {|f| f.read} rescue nil</div><div class='del'>-  newdata = yield</div><div class='del'>-  unless $dryrun</div><div class='del'>-    unless newdata == data</div><div class='del'>-      open(realpath, "wb", mode) {|f| f.write newdata}</div><div class='del'>-    end</div><div class='del'>-    File.chmod(mode, realpath)</div><div class='del'>-  end</div><div class='del'>-  $installed_list.puts path if $installed_list</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def with_destdir(dir)</div><div class='del'>-  return dir if !$destdir or $destdir.empty?</div><div class='del'>-  dir = dir.sub(/\A\w:/, '') if File::PATH_SEPARATOR == ';'</div><div class='del'>-  $destdir + dir</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-exeext = CONFIG["EXEEXT"]</div><div class='del'>-</div><div class='del'>-ruby_install_name = CONFIG["ruby_install_name"]</div><div class='del'>-rubyw_install_name = CONFIG["rubyw_install_name"]</div><div class='del'>-</div><div class='del'>-version = CONFIG["ruby_version"]</div><div class='del'>-bindir = CONFIG["bindir"]</div><div class='del'>-libdir = CONFIG["libdir"]</div><div class='del'>-rubylibdir = CONFIG["rubylibdir"]</div><div class='del'>-archlibdir = CONFIG["archdir"]</div><div class='del'>-sitelibdir = CONFIG["sitelibdir"]</div><div class='del'>-sitearchlibdir = CONFIG["sitearchdir"]</div><div class='del'>-vendorlibdir = CONFIG["vendorlibdir"]</div><div class='del'>-vendorarchlibdir = CONFIG["vendorarchdir"]</div><div class='del'>-mandir = File.join(CONFIG["mandir"], "man")</div><div class='del'>-configure_args = Shellwords.shellwords(CONFIG["configure_args"])</div><div class='del'>-enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'</div><div class='del'>-dll = CONFIG["LIBRUBY_SO"]</div><div class='del'>-lib = CONFIG["LIBRUBY"]</div><div class='del'>-arc = CONFIG["LIBRUBY_A"]</div><div class='del'>-</div><div class='del'>-install?(:local, :arch, :bin, :'bin-arch') do</div><div class='del'>-  puts "installing binary commands"</div><div class='del'>-</div><div class='del'>-  makedirs [bindir, libdir, archlibdir]</div><div class='del'>-</div><div class='del'>-  install ruby_install_name+exeext, bindir, :mode =&gt; $prog_mode</div><div class='del'>-  if rubyw_install_name and !rubyw_install_name.empty?</div><div class='del'>-    install rubyw_install_name+exeext, bindir, :mode =&gt; $prog_mode</div><div class='del'>-  end</div><div class='del'>-  if enable_shared and dll != lib</div><div class='del'>-    install dll, bindir, :mode =&gt; $prog_mode</div><div class='del'>-  end</div><div class='del'>-  install lib, libdir, :mode =&gt; $prog_mode unless lib == arc</div><div class='del'>-  install arc, libdir, :mode =&gt; $data_mode</div><div class='del'>-  install "config.h", archlibdir, :mode =&gt; $data_mode</div><div class='del'>-  install "rbconfig.rb", archlibdir, :mode =&gt; $data_mode</div><div class='del'>-  if CONFIG["ARCHFILE"]</div><div class='del'>-    for file in CONFIG["ARCHFILE"].split</div><div class='del'>-      install file, archlibdir, :mode =&gt; $data_mode</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if dll == lib and dll != arc</div><div class='del'>-    for link in CONFIG["LIBRUBY_ALIASES"].split</div><div class='del'>-      ln_sf(dll, File.join(libdir, link))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $extout</div><div class='del'>-  extout = "#$extout"</div><div class='del'>-  install?(:ext, :arch, :'ext-arch') do</div><div class='del'>-    puts "installing extension objects"</div><div class='del'>-    makedirs [archlibdir, sitearchlibdir, vendorarchlibdir]</div><div class='del'>-    if noinst = CONFIG["no_install_files"] and noinst.empty?</div><div class='del'>-      noinst = nil</div><div class='del'>-    end</div><div class='del'>-    install_recursive("#{extout}/#{CONFIG['arch']}", archlibdir, :no_install =&gt; noinst, :mode =&gt; $prog_mode)</div><div class='del'>-  end</div><div class='del'>-  install?(:ext, :comm, :'ext-comm') do</div><div class='del'>-    puts "installing extension scripts"</div><div class='del'>-    makedirs [rubylibdir, sitelibdir, vendorlibdir]</div><div class='del'>-    install_recursive("#{extout}/common", rubylibdir, :mode =&gt; $data_mode)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-install?(:rdoc) do</div><div class='del'>-  if $rdocdir</div><div class='del'>-    puts "installing rdoc"</div><div class='del'>-</div><div class='del'>-    ridatadir = File.join(CONFIG['datadir'], 'ri/$(MAJOR).$(MINOR)/system')</div><div class='del'>-    Config.expand(ridatadir)</div><div class='del'>-    makedirs [ridatadir]</div><div class='del'>-    install_recursive($rdocdir, ridatadir, :mode =&gt; $data_mode)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-install?(:local, :comm, :bin, :'bin-comm') do</div><div class='del'>-  puts "installing command scripts"</div><div class='del'>-</div><div class='del'>-  Dir.chdir srcdir</div><div class='del'>-  makedirs [bindir, rubylibdir]</div><div class='del'>-</div><div class='del'>-  ruby_shebang = File.join(bindir, ruby_install_name)</div><div class='del'>-  if File::ALT_SEPARATOR</div><div class='del'>-    ruby_bin = ruby_shebang.tr(File::SEPARATOR, File::ALT_SEPARATOR)</div><div class='del'>-  end</div><div class='del'>-  for src in Dir["bin/*"]</div><div class='del'>-    next unless File.file?(src)</div><div class='del'>-    next if /\/[.#]|(\.(old|bak|orig|rej|diff|patch|core)|~|\/core)$/i =~ src</div><div class='del'>-</div><div class='del'>-    name = ruby_install_name.sub(/ruby/, File.basename(src))</div><div class='del'>-</div><div class='del'>-    shebang = ''</div><div class='del'>-    body = ''</div><div class='del'>-    open(src, "rb") do |f|</div><div class='del'>-      shebang = f.gets</div><div class='del'>-      body = f.read</div><div class='del'>-    end</div><div class='del'>-    shebang.sub!(/^\#!.*?ruby\b/) {"#!" + ruby_shebang}</div><div class='del'>-    shebang.sub!(/\r$/, '')</div><div class='del'>-    body.gsub!(/\r$/, '')</div><div class='del'>-</div><div class='del'>-    cmd = File.join(bindir, name)</div><div class='del'>-    cmd &lt;&lt; ".#{$cmdtype}" if $cmdtype</div><div class='del'>-    open_for_install(cmd, $script_mode) do</div><div class='del'>-      case $cmdtype</div><div class='del'>-      when "bat"</div><div class='del'>-        "#{&lt;&lt;EOH}#{shebang}#{body}#{&lt;&lt;EOF}".gsub(/$/, "\r")</div><div class='del'>-@echo off</div><div class='del'>-@if not "%~d0" == "~d0" goto WinNT</div><div class='del'>-#{ruby_bin} -x "#{cmd}" %1 %2 %3 %4 %5 %6 %7 %8 %9</div><div class='del'>-@goto endofruby</div><div class='del'>-:WinNT</div><div class='del'>-"%~dp0#{ruby_install_name}" -x "%~f0" %*</div><div class='del'>-@goto endofruby</div><div class='del'>-EOH</div><div class='del'>-__END__</div><div class='del'>-:endofruby</div><div class='del'>-EOF</div><div class='del'>-      when "cmd"</div><div class='del'>-        "#{&lt;&lt;EOH}#{shebang}#{body}"</div><div class='del'>-@"%~dp0#{ruby_install_name}" -x "%~f0" %*</div><div class='del'>-@exit /b %ERRORLEVEL%</div><div class='del'>-EOH</div><div class='del'>-      else</div><div class='del'>-        shebang + body</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'>-install?(:local, :comm, :lib) do</div><div class='del'>-  puts "installing library scripts"</div><div class='del'>-</div><div class='del'>-  Dir.chdir srcdir</div><div class='del'>-  makedirs [rubylibdir]</div><div class='del'>-</div><div class='del'>-  for f in Dir["lib/**/*{.rb,help-message}"]</div><div class='del'>-    dir = File.dirname(f).sub!(/\Alib/, rubylibdir) || rubylibdir</div><div class='del'>-    makedirs dir</div><div class='del'>-    install f, dir, :mode =&gt; $data_mode</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-install?(:local, :arch, :lib) do</div><div class='del'>-  puts "installing headers"</div><div class='del'>-</div><div class='del'>-  Dir.chdir(srcdir)</div><div class='del'>-  makedirs [archlibdir]</div><div class='del'>-  for f in Dir["*.h"]</div><div class='del'>-    install f, archlibdir, :mode =&gt; $data_mode</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if RUBY_PLATFORM =~ /mswin32|mingw|bccwin32/</div><div class='del'>-    win32libdir = File.join(archlibdir, "win32")</div><div class='del'>-    makedirs win32libdir</div><div class='del'>-    install "win32/win32.h", win32libdir, :mode =&gt; $data_mode</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-install?(:local, :comm, :man) do</div><div class='del'>-  puts "installing manpages"</div><div class='del'>-</div><div class='del'>-  Dir.chdir(srcdir)</div><div class='del'>-  for mdoc in Dir["*.[1-9]"]</div><div class='del'>-    next unless File.file?(mdoc) and open(mdoc){|fh| fh.read(1) == '.'}</div><div class='del'>-</div><div class='del'>-    destdir = mandir + mdoc[/(\d+)$/]</div><div class='del'>-    destfile = File.join(destdir, mdoc.sub(/ruby/, ruby_install_name))</div><div class='del'>-</div><div class='del'>-    makedirs destdir</div><div class='del'>-</div><div class='del'>-    if $mantype == "doc"</div><div class='del'>-      install mdoc, destfile, :mode =&gt; $data_mode</div><div class='del'>-    else</div><div class='del'>-      require 'mdoc2man.rb'</div><div class='del'>-</div><div class='del'>-      w = Tempfile.open(mdoc)</div><div class='del'>-</div><div class='del'>-      open(mdoc) { |r|</div><div class='del'>-        Mdoc2Man.mdoc2man(r, w)</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      w.close</div><div class='del'>-</div><div class='del'>-      install w.path, destfile, :mode =&gt; $data_mode</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$install &lt;&lt; :local &lt;&lt; :ext if $install.empty?</div><div class='del'>-$install.each do |inst|</div><div class='del'>-  if !(procs = $install_procs[inst]) || procs.empty?</div><div class='del'>-    next warn("unknown install target - #{inst}")</div><div class='del'>-  end</div><div class='del'>-  procs.each do |block|</div><div class='del'>-    dir = Dir.pwd</div><div class='del'>-    begin</div><div class='del'>-      block.call</div><div class='del'>-    ensure</div><div class='del'>-      Dir.chdir(dir)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# vi:set sw=2:</div><div class='head'>diff --git a/intern.h b/intern.h<br/>deleted file mode 100644<br/>index 7e72dd5537..0000000000<br/>--- a/<a href='/ruby.git/tree/intern.h?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>intern.h</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,530 +0,0 @@</div><div class='del'>-/**********************************************************************</div><div class='del'>-</div><div class='del'>-  intern.h -</div><div class='del'>-</div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='del'>-  created at: Thu Jun 10 14:22:17 JST 1993</div><div class='del'>-</div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-  Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='del'>-</div><div class='del'>-**********************************************************************/</div><div class='del'>-</div><div class='del'>-/* </div><div class='del'>- * Functions and variables that are used by more than one source file of</div><div class='del'>- * the kernel.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-#define ID_ALLOCATOR 1</div><div class='del'>-</div><div class='del'>-/* array.c */</div><div class='del'>-void rb_mem_clear _((register VALUE*, register long));</div><div class='del'>-VALUE rb_assoc_new _((VALUE, VALUE));</div><div class='del'>-VALUE rb_check_array_type _((VALUE));</div><div class='del'>-VALUE rb_ary_new _((void));</div><div class='del'>-VALUE rb_ary_new2 _((long));</div><div class='del'>-VALUE rb_ary_new3 __((long,...));</div><div class='del'>-VALUE rb_ary_new4 _((long, const VALUE *));</div><div class='del'>-VALUE rb_ary_freeze _((VALUE));</div><div class='del'>-VALUE rb_ary_aref _((int, VALUE*, VALUE));</div><div class='del'>-void rb_ary_store _((VALUE, long, VALUE));</div><div class='del'>-VALUE rb_ary_dup _((VALUE));</div><div class='del'>-VALUE rb_ary_to_ary _((VALUE));</div><div class='del'>-VALUE rb_ary_to_s _((VALUE));</div><div class='del'>-VALUE rb_ary_push _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_pop _((VALUE));</div><div class='del'>-VALUE rb_ary_shift _((VALUE));</div><div class='del'>-VALUE rb_ary_unshift _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_entry _((VALUE, long));</div><div class='del'>-VALUE rb_ary_each _((VALUE));</div><div class='del'>-VALUE rb_ary_join _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_print_on _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_reverse _((VALUE));</div><div class='del'>-VALUE rb_ary_sort _((VALUE));</div><div class='del'>-VALUE rb_ary_sort_bang _((VALUE));</div><div class='del'>-VALUE rb_ary_delete _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_delete_at _((VALUE, long));</div><div class='del'>-VALUE rb_ary_clear _((VALUE));</div><div class='del'>-VALUE rb_ary_plus _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_concat _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_assoc _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_rassoc _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_includes _((VALUE, VALUE));</div><div class='del'>-VALUE rb_ary_cmp _((VALUE, VALUE));</div><div class='del'>-VALUE rb_protect_inspect _((VALUE(*)(ANYARGS),VALUE,VALUE));</div><div class='del'>-VALUE rb_inspecting_p _((VALUE));</div><div class='del'>-VALUE rb_check_array_value _((VALUE));</div><div class='del'>-VALUE rb_values_at _((VALUE, long, int, VALUE*, VALUE(*) _((VALUE,long))));</div><div class='del'>-/* bignum.c */</div><div class='del'>-VALUE rb_big_clone _((VALUE));</div><div class='del'>-void rb_big_2comp _((VALUE));</div><div class='del'>-VALUE rb_big_norm _((VALUE));</div><div class='del'>-VALUE rb_uint2big _((unsigned long));</div><div class='del'>-VALUE rb_int2big _((long));</div><div class='del'>-VALUE rb_uint2inum _((unsigned long));</div><div class='del'>-VALUE rb_int2inum _((long));</div><div class='del'>-VALUE rb_cstr_to_inum _((const char*, int, int));</div><div class='del'>-VALUE rb_str_to_inum _((VALUE, int, int));</div><div class='del'>-VALUE rb_cstr2inum _((const char*, int));</div><div class='del'>-VALUE rb_str2inum _((VALUE, int));</div><div class='del'>-VALUE rb_big2str _((VALUE, int));</div><div class='del'>-VALUE rb_big2str0 _((VALUE, int, int));</div><div class='del'>-long rb_big2long _((VALUE));</div><div class='del'>-#define rb_big2int(x) rb_big2long(x)</div><div class='del'>-unsigned long rb_big2ulong _((VALUE));</div><div class='del'>-#define rb_big2uint(x) rb_big2ulong(x)</div><div class='del'>-#if HAVE_LONG_LONG</div><div class='del'>-VALUE rb_ll2inum _((LONG_LONG));</div><div class='del'>-VALUE rb_ull2inum _((unsigned LONG_LONG));</div><div class='del'>-LONG_LONG rb_big2ll _((VALUE));</div><div class='del'>-unsigned LONG_LONG rb_big2ull _((VALUE));</div><div class='del'>-#endif  /* HAVE_LONG_LONG */</div><div class='del'>-void rb_quad_pack _((char*,VALUE));</div><div class='del'>-VALUE rb_quad_unpack _((const char*,int));</div><div class='del'>-VALUE rb_dbl2big _((double));</div><div class='del'>-double rb_big2dbl _((VALUE));</div><div class='del'>-VALUE rb_big_plus _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_minus _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_mul _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_divmod _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_pow _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_and _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_or _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_xor _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_lshift _((VALUE, VALUE));</div><div class='del'>-VALUE rb_big_rand _((VALUE, double*));</div><div class='del'>-/* class.c */</div><div class='del'>-VALUE rb_class_boot _((VALUE));</div><div class='del'>-VALUE rb_class_new _((VALUE));</div><div class='del'>-VALUE rb_mod_init_copy _((VALUE, VALUE));</div><div class='del'>-VALUE rb_class_init_copy _((VALUE, VALUE));</div><div class='del'>-VALUE rb_singleton_class_clone _((VALUE));</div><div class='del'>-void rb_singleton_class_attached _((VALUE,VALUE));</div><div class='del'>-VALUE rb_make_metaclass _((VALUE, VALUE));</div><div class='del'>-void rb_check_inheritable _((VALUE));</div><div class='del'>-VALUE rb_class_inherited _((VALUE, VALUE));</div><div class='del'>-VALUE rb_define_class_id _((ID, VALUE));</div><div class='del'>-VALUE rb_module_new _((void));</div><div class='del'>-VALUE rb_define_module_id _((ID));</div><div class='del'>-VALUE rb_mod_included_modules _((VALUE));</div><div class='del'>-VALUE rb_mod_include_p _((VALUE, VALUE));</div><div class='del'>-VALUE rb_mod_ancestors _((VALUE));</div><div class='del'>-VALUE rb_class_instance_methods _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_class_public_instance_methods _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_class_protected_instance_methods _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_big_rshift(VALUE, VALUE);</div><div class='del'>-VALUE rb_class_private_instance_methods _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_obj_singleton_methods _((int, VALUE*, VALUE));</div><div class='del'>-void rb_define_method_id _((VALUE, ID, VALUE (*)(ANYARGS), int));</div><div class='del'>-void rb_frozen_class_p _((VALUE));</div><div class='del'>-void rb_undef _((VALUE, ID));</div><div class='del'>-void rb_define_protected_method _((VALUE, const char*, VALUE (*)(ANYARGS), int));</div><div class='del'>-void rb_define_private_method _((VALUE, const char*, VALUE (*)(ANYARGS), int));</div><div class='del'>-void rb_define_singleton_method _((VALUE, const char*, VALUE(*)(ANYARGS), int));</div><div class='del'>-VALUE rb_singleton_class _((VALUE));</div><div class='del'>-/* compar.c */</div><div class='del'>-int rb_cmpint _((VALUE, VALUE, VALUE));</div><div class='del'>-NORETURN(void rb_cmperr _((VALUE, VALUE)));</div><div class='del'>-/* enum.c */</div><div class='del'>-VALUE rb_block_call _((VALUE, ID, int, VALUE*, VALUE (*)(ANYARGS), VALUE));</div><div class='del'>-/* enumerator.c */</div><div class='del'>-VALUE rb_enumeratorize _((VALUE, VALUE, int, VALUE *));</div><div class='del'>-#define RETURN_ENUMERATOR(obj, argc, argv) do {				\</div><div class='del'>-	if (!rb_block_given_p())					\</div><div class='del'>-	    return rb_enumeratorize(obj, ID2SYM(rb_frame_this_func()),	\</div><div class='del'>-				    argc, argv);			\</div><div class='del'>-    } while (0)</div><div class='del'>-/* error.c */</div><div class='del'>-RUBY_EXTERN int ruby_nerrs;</div><div class='del'>-VALUE rb_exc_new _((VALUE, const char*, long));</div><div class='del'>-VALUE rb_exc_new2 _((VALUE, const char*));</div><div class='del'>-VALUE rb_exc_new3 _((VALUE, VALUE));</div><div class='del'>-NORETURN(void rb_loaderror __((const char*, ...)));</div><div class='del'>-NORETURN(void rb_name_error __((ID, const char*, ...)));</div><div class='del'>-NORETURN(void rb_invalid_str _((const char*, const char*)));</div><div class='del'>-void rb_compile_error __((const char*, ...));</div><div class='del'>-void rb_compile_error_append __((const char*, ...));</div><div class='del'>-NORETURN(void rb_load_fail _((const char*)));</div><div class='del'>-NORETURN(void rb_error_frozen _((const char*)));</div><div class='del'>-void rb_check_frozen _((VALUE));</div><div class='del'>-/* eval.c */</div><div class='del'>-RUBY_EXTERN struct RNode *ruby_current_node;</div><div class='del'>-void ruby_set_current_source _((void));</div><div class='del'>-NORETURN(void rb_exc_raise _((VALUE)));</div><div class='del'>-NORETURN(void rb_exc_fatal _((VALUE)));</div><div class='del'>-VALUE rb_f_exit _((int,VALUE*));</div><div class='del'>-VALUE rb_f_abort _((int,VALUE*));</div><div class='del'>-void rb_remove_method _((VALUE, const char*));</div><div class='del'>-#define rb_disable_super(klass, name) ((void)0)</div><div class='del'>-#define rb_enable_super(klass, name) ((void)0)</div><div class='del'>-#define HAVE_RB_DEFINE_ALLOC_FUNC 1</div><div class='del'>-void rb_define_alloc_func _((VALUE, VALUE (*)(VALUE)));</div><div class='del'>-void rb_undef_alloc_func _((VALUE));</div><div class='del'>-void rb_clear_cache _((void));</div><div class='del'>-void rb_clear_cache_by_class _((VALUE));</div><div class='del'>-void rb_alias _((VALUE, ID, ID));</div><div class='del'>-void rb_attr _((VALUE,ID,int,int,int));</div><div class='del'>-int rb_method_boundp _((VALUE, ID, int));</div><div class='del'>-VALUE rb_dvar_defined _((ID));</div><div class='del'>-VALUE rb_dvar_curr _((ID));</div><div class='del'>-VALUE rb_dvar_ref _((ID));</div><div class='del'>-void rb_dvar_asgn _((ID, VALUE));</div><div class='del'>-void rb_dvar_push _((ID, VALUE));</div><div class='del'>-VALUE *rb_svar _((int));</div><div class='del'>-VALUE rb_eval_cmd _((VALUE, VALUE, int));</div><div class='del'>-int rb_obj_respond_to _((VALUE, ID, int));</div><div class='del'>-int rb_respond_to _((VALUE, ID));</div><div class='del'>-void rb_interrupt _((void));</div><div class='del'>-VALUE rb_apply _((VALUE, ID, VALUE));</div><div class='del'>-void rb_backtrace _((void));</div><div class='del'>-ID rb_frame_last_func _((void));</div><div class='del'>-ID rb_frame_this_func _((void));</div><div class='del'>-VALUE rb_obj_instance_eval _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_mod_module_eval _((int, VALUE*, VALUE));</div><div class='del'>-void rb_load _((VALUE, int));</div><div class='del'>-void rb_load_protect _((VALUE, int, int*));</div><div class='del'>-NORETURN(void rb_jump_tag _((int)));</div><div class='del'>-int rb_provided _((const char*));</div><div class='del'>-void rb_provide _((const char*));</div><div class='del'>-VALUE rb_f_require _((VALUE, VALUE));</div><div class='del'>-VALUE rb_require_safe _((VALUE, int));</div><div class='del'>-void rb_obj_call_init _((VALUE, int, VALUE*));</div><div class='del'>-VALUE rb_class_new_instance _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_block_proc _((void));</div><div class='del'>-VALUE rb_block_dup _((VALUE, VALUE, VALUE));</div><div class='del'>-VALUE rb_method_dup _((VALUE, VALUE, VALUE));</div><div class='del'>-VALUE rb_f_lambda _((void));</div><div class='del'>-VALUE rb_proc_call _((VALUE, VALUE));</div><div class='del'>-VALUE rb_obj_method _((VALUE, VALUE));</div><div class='del'>-VALUE rb_protect _((VALUE (*)(VALUE), VALUE, int*));</div><div class='del'>-void rb_set_end_proc _((void (*)(VALUE), VALUE));</div><div class='del'>-void rb_mark_end_proc _((void));</div><div class='del'>-void rb_exec_end_proc _((void));</div><div class='del'>-void ruby_finalize _((void));</div><div class='del'>-NORETURN(void ruby_stop _((int)));</div><div class='del'>-int ruby_cleanup _((int));</div><div class='del'>-int ruby_exec _((void));</div><div class='del'>-void rb_gc_mark_threads _((void));</div><div class='del'>-void rb_thread_start_timer _((void));</div><div class='del'>-void rb_thread_stop_timer _((void));</div><div class='del'>-void rb_thread_schedule _((void));</div><div class='del'>-void rb_thread_wait_fd _((int));</div><div class='del'>-int rb_thread_fd_writable _((int));</div><div class='del'>-void rb_thread_fd_close _((int));</div><div class='del'>-int rb_thread_alone _((void));</div><div class='del'>-void rb_thread_polling _((void));</div><div class='del'>-void rb_thread_sleep _((int));</div><div class='del'>-void rb_thread_sleep_forever _((void));</div><div class='del'>-VALUE rb_thread_stop _((void));</div><div class='del'>-VALUE rb_thread_wakeup _((VALUE));</div><div class='del'>-VALUE rb_thread_wakeup_alive _((VALUE));</div><div class='del'>-VALUE rb_thread_run _((VALUE));</div><div class='del'>-VALUE rb_thread_kill _((VALUE));</div><div class='del'>-VALUE rb_thread_alive_p _((VALUE));</div><div class='del'>-VALUE rb_thread_create _((VALUE (*)(ANYARGS), void*));</div><div class='del'>-void rb_thread_interrupt _((void));</div><div class='del'>-void rb_thread_trap_eval _((VALUE, int, int));</div><div class='del'>-void rb_thread_signal_raise _((int));</div><div class='del'>-void rb_thread_signal_exit _((void));</div><div class='del'>-int rb_thread_select _((int, fd_set *, fd_set *, fd_set *, struct timeval *));</div><div class='del'>-void rb_thread_wait_for _((struct timeval));</div><div class='del'>-VALUE rb_thread_current _((void));</div><div class='del'>-VALUE rb_thread_main _((void));</div><div class='del'>-VALUE rb_thread_local_aref _((VALUE, ID));</div><div class='del'>-VALUE rb_thread_local_aset _((VALUE, ID, VALUE));</div><div class='del'>-void rb_thread_atfork _((void));</div><div class='del'>-VALUE rb_exec_recursive _((VALUE(*)(VALUE, VALUE, int),VALUE,VALUE));</div><div class='del'>-VALUE rb_funcall_rescue __((VALUE, ID, int, ...));</div><div class='del'>-/* file.c */</div><div class='del'>-VALUE rb_file_s_expand_path _((int, VALUE *));</div><div class='del'>-VALUE rb_file_expand_path _((VALUE, VALUE));</div><div class='del'>-void rb_file_const _((const char*, VALUE));</div><div class='del'>-int rb_find_file_ext _((VALUE*, const char* const*));</div><div class='del'>-VALUE rb_find_file _((VALUE));</div><div class='del'>-char *rb_path_next _((const char *));</div><div class='del'>-char *rb_path_skip_prefix _((const char *));</div><div class='del'>-char *rb_path_last_separator _((const char *));</div><div class='del'>-char *rb_path_end _((const char *));</div><div class='del'>-VALUE rb_file_directory_p _((VALUE,VALUE));</div><div class='del'>-/* gc.c */</div><div class='del'>-NORETURN(void rb_memerror __((void)));</div><div class='del'>-int ruby_stack_check _((void));</div><div class='del'>-int ruby_stack_length _((VALUE**));</div><div class='del'>-int rb_during_gc _((void));</div><div class='del'>-char *rb_source_filename _((const char*));</div><div class='del'>-void rb_gc_mark_locations _((VALUE*, VALUE*));</div><div class='del'>-void rb_mark_tbl _((struct st_table*));</div><div class='del'>-void rb_mark_hash _((struct st_table*));</div><div class='del'>-void rb_gc_mark_maybe _((VALUE));</div><div class='del'>-void rb_gc_mark _((VALUE));</div><div class='del'>-void rb_gc_force_recycle _((VALUE));</div><div class='del'>-void rb_gc _((void));</div><div class='del'>-void rb_gc_copy_finalizer _((VALUE,VALUE));</div><div class='del'>-void rb_gc_finalize_deferred _((void));</div><div class='del'>-void rb_gc_call_finalizer_at_exit _((void));</div><div class='del'>-VALUE rb_gc_enable _((void));</div><div class='del'>-VALUE rb_gc_disable _((void));</div><div class='del'>-VALUE rb_gc_start _((void));</div><div class='del'>-/* hash.c */</div><div class='del'>-void st_foreach_safe _((struct st_table *, int (*)(ANYARGS), unsigned long));</div><div class='del'>-void rb_hash_foreach _((VALUE, int (*)(ANYARGS), VALUE));</div><div class='del'>-VALUE rb_hash _((VALUE));</div><div class='del'>-VALUE rb_hash_new _((void));</div><div class='del'>-VALUE rb_hash_freeze _((VALUE));</div><div class='del'>-VALUE rb_hash_aref _((VALUE, VALUE));</div><div class='del'>-VALUE rb_hash_lookup _((VALUE, VALUE));</div><div class='del'>-VALUE rb_hash_aset _((VALUE, VALUE, VALUE));</div><div class='del'>-VALUE rb_hash_delete_if _((VALUE));</div><div class='del'>-VALUE rb_hash_delete _((VALUE,VALUE));</div><div class='del'>-int rb_path_check _((const char*));</div><div class='del'>-int rb_env_path_tainted _((void));</div><div class='del'>-/* io.c */</div><div class='del'>-#define rb_defout rb_stdout</div><div class='del'>-RUBY_EXTERN VALUE rb_fs;</div><div class='del'>-RUBY_EXTERN VALUE rb_output_fs;</div><div class='del'>-RUBY_EXTERN VALUE rb_rs;</div><div class='del'>-RUBY_EXTERN VALUE rb_default_rs;</div><div class='del'>-RUBY_EXTERN VALUE rb_output_rs;</div><div class='del'>-VALUE rb_io_write _((VALUE, VALUE));</div><div class='del'>-VALUE rb_io_gets _((VALUE));</div><div class='del'>-VALUE rb_io_getc _((VALUE));</div><div class='del'>-VALUE rb_io_ungetc _((VALUE, VALUE));</div><div class='del'>-VALUE rb_io_close _((VALUE));</div><div class='del'>-VALUE rb_io_eof _((VALUE));</div><div class='del'>-VALUE rb_io_binmode _((VALUE));</div><div class='del'>-VALUE rb_io_addstr _((VALUE, VALUE));</div><div class='del'>-VALUE rb_io_printf _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_io_print _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_io_puts _((int, VALUE*, VALUE));</div><div class='del'>-VALUE rb_file_open _((const char*, const char*));</div><div class='del'>-VALUE rb_gets _((void));</div><div class='del'>-void rb_write_error _((const char*));</div><div class='del'>-void rb_write_error2 _((const char*, long));</div><div class='del'>-/* marshal.c */</div><div class='del'>-VALUE rb_marshal_dump _((VALUE, VALUE));</div><div class='del'>-VALUE rb_marshal_load _((VALUE));</div><div class='del'>-/* numeric.c */</div><div class='del'>-void rb_num_zerodiv _((void));</div><div class='del'>-VALUE rb_num_coerce_bin _((VALUE, VALUE));</div><div class='del'>-VALUE rb_num_coerce_cmp _((VALUE, VALUE));</div><div class='del'>-VALUE rb_num_coerce_relop _((VALUE, VALUE));</div><div class='del'>-VALUE rb_float_new _((double));</div><div class='del'>-VALUE rb_num2fix _((VALUE));</div><div class='del'>-VALUE rb_fix2str _((VALUE, int));</div><div class='del'>-VALUE rb_dbl_cmp _((double, double));</div><div class='del'>-/* object.c */</div><div class='del'>-int rb_eql _((VALUE, VALUE));</div><div class='del'>-VALUE rb_any_to_s _((VALUE));</div><div class='del'>-VALUE rb_inspect _((VALUE));</div><div class='del'>-VALUE rb_obj_is_instance_of _((VALUE, VALUE));</div><div class='del'>-VALUE rb_obj_is_kind_of _((VALUE, VALUE));</div><div class='del'>-VALUE rb_obj_alloc _((VALUE));</div><div class='del'>-VALUE rb_obj_clone _((VALUE));</div><div class='del'>-VALUE rb_obj_dup _((VALUE));</div><div class='del'>-VALUE rb_obj_init_copy _((VALUE,VALUE));</div><div class='del'>-VALUE rb_obj_taint _((VALUE));</div><div class='del'>-VALUE rb_obj_tainted _((VALUE));</div><div class='del'>-VALUE rb_obj_untaint _((VALUE));</div><div class='del'>-VALUE rb_obj_freeze _((VALUE));</div><div class='del'>-VALUE rb_obj_id _((VALUE));</div><div class='del'>-VALUE rb_obj_class _((VALUE));</div><div class='del'>-VALUE rb_class_real _((VALUE));</div><div class='del'>-VALUE rb_class_inherited_p _((VALUE, VALUE));</div><div class='del'>-VALUE rb_convert_type _((VALUE,int,const char*,const char*));</div><div class='del'>-VALUE rb_check_convert_type _((VALUE,int,const char*,const char*));</div><div class='del'>-VALUE rb_check_to_integer _((VALUE, const char *));</div><div class='del'>-VALUE rb_to_int _((VALUE));</div><div class='del'>-VALUE rb_Integer _((VALUE));</div><div class='del'>-VALUE rb_Float _((VALUE));</div><div class='del'>-VALUE rb_String _((VALUE));</div><div class='del'>-VALUE rb_Array _((VALUE));</div><div class='del'>-double rb_cstr_to_dbl _((const char*, int));</div><div class='del'>-double rb_str_to_dbl _((VALUE, int));</div><div class='del'>-/* parse.y */</div><div class='del'>-RUBY_EXTERN int   ruby_sourceline;</div><div class='del'>-RUBY_EXTERN char *ruby_sourcefile;</div><div class='del'>-int ruby_yyparse _((void));</div><div class='del'>-ID rb_id_attrset _((ID));</div><div class='del'>-void rb_parser_append_print _((void));</div><div class='del'>-void rb_parser_while_loop _((int, int));</div><div class='del'>-int ruby_parser_stack_on_heap _((void));</div><div class='del'>-void rb_gc_mark_parser _((void));</div><div class='del'>-int rb_is_const_id _((ID));</div><div class='del'>-int rb_is_instance_id _((ID));</div><div class='del'>-int rb_is_class_id _((ID));</div><div class='del'>-int rb_is_local_id _((ID));</div><div class='del'>-int rb_is_junk_id _((ID));</div><div class='del'>-int rb_symname_p _((const char*));</div><div class='del'>-int rb_sym_interned_p _((VALUE));</div><div class='del'>-VALUE rb_backref_get _((void));</div><div class='del'>-void rb_backref_set _((VALUE));</div><div class='del'>-VALUE rb_lastline_get _((void));</div><div class='del'>-void rb_lastline_set _((VALUE));</div><div class='del'>-VALUE rb_sym_all_symbols _((void));</div><div class='del'>-/* process.c */</div><div class='del'>-int rb_proc_exec _((const char*));</div><div class='del'>-VALUE rb_f_exec _((int,VALUE*));</div><div class='del'>-int rb_waitpid _((int,int*,int));</div><div class='del'>-void rb_syswait _((int));</div><div class='del'>-VALUE rb_proc_times _((VALUE));</div><div class='del'>-VALUE rb_detach_process _((int));</div><div class='del'>-/* range.c */</div><div class='del'>-VALUE rb_range_new _((VALUE, VALUE, int));</div><div class='del'>-VALUE rb_range_beg_len _((VALUE, long*, long*, long, int));</div><div class='del'>-VALUE rb_length_by_each _((VALUE));</div><div class='del'>-/* random.c */</div><div class='del'>-unsigned long rb_genrand_int32(void);</div><div class='del'>-double rb_genrand_real(void);</div><div class='del'>-/* re.c */</div><div class='del'>-int rb_memcmp _((const void*,const void*,long));</div><div class='del'>-int rb_memcicmp _((const void*,const void*,long));</div><div class='del'>-long rb_memsearch _((const void*,long,const void*,long));</div><div class='del'>-VALUE rb_reg_nth_defined _((int, VALUE));</div><div class='del'>-VALUE rb_reg_nth_match _((int, VALUE));</div><div class='del'>-VALUE rb_reg_last_match _((VALUE));</div><div class='del'>-VALUE rb_reg_match_pre _((VALUE));</div><div class='del'>-VALUE rb_reg_match_post _((VALUE));</div><div class='del'>-VALUE rb_reg_match_last _((VALUE));</div><div class='del'>-VALUE rb_reg_new _((const char*, long, int));</div><div class='del'>-VALUE rb_reg_match _((VALUE, VALUE));</div><div class='del'>-VALUE rb_reg_match2 _((VALUE));</div><div class='del'>-int rb_reg_options _((VALUE));</div><div class='del'>-void rb_set_kcode _((const char*));</div><div class='del'>-const char* rb_get_kcode _((void));</div><div class='del'>-void rb_kcode_set_option _((VALUE));</div><div class='del'>-void rb_kcode_reset_option _((void));</div><div class='del'>-/* ruby.c */</div><div class='del'>-RUBY_EXTERN VALUE rb_argv;</div><div class='del'>-RUBY_EXTERN VALUE rb_argv0;</div><div class='del'>-void rb_load_file _((const char*));</div><div class='del'>-void ruby_script _((const char*));</div><div class='del'>-void ruby_prog_init _((void));</div><div class='del'>-void ruby_set_argv _((int, char**));</div><div class='del'>-void ruby_process_options _((int, char**));</div><div class='del'>-void ruby_load_script _((void));</div><div class='del'>-void ruby_init_loadpath _((void));</div><div class='del'>-void ruby_incpush _((const char*));</div><div class='del'>-/* signal.c */</div><div class='del'>-VALUE rb_f_kill _((int, VALUE*));</div><div class='del'>-void rb_gc_mark_trap_list _((void));</div><div class='del'>-#ifdef POSIX_SIGNAL</div><div class='del'>-#define posix_signal ruby_posix_signal</div><div class='del'>-void posix_signal _((int, RETSIGTYPE (*)(int)));</div><div class='del'>-#endif</div><div class='del'>-void rb_trap_exit _((void));</div><div class='del'>-void rb_trap_exec _((void));</div><div class='del'>-const char *ruby_signal_name _((int));</div><div class='del'>-void ruby_default_signal _((int));</div><div class='del'>-/* sprintf.c */</div><div class='del'>-VALUE rb_f_sprintf _((int, VALUE*));</div><div class='del'>-VALUE rb_str_format _((int, VALUE*, VALUE));</div><div class='del'>-/* string.c */</div><div class='del'>-VALUE rb_str_new _((const char*, long));</div><div class='del'>-VALUE rb_str_new2 _((const char*));</div><div class='del'>-VALUE rb_str_new3 _((VALUE));</div><div class='del'>-VALUE rb_str_new4 _((VALUE));</div><div class='del'>-VALUE rb_str_new5 _((VALUE, const char*, long));</div><div class='del'>-VALUE rb_tainted_str_new _((const char*, long));</div><div class='del'>-VALUE rb_tainted_str_new2 _((const char*));</div><div class='del'>-VALUE rb_str_buf_new _((long));</div><div class='del'>-VALUE rb_str_buf_new2 _((const char*));</div><div class='del'>-VALUE rb_str_tmp_new _((long));</div><div class='del'>-VALUE rb_str_buf_append _((VALUE, VALUE));</div><div class='del'>-VALUE rb_str_buf_cat _((VALUE, const char*, long));</div><div class='del'>-VALUE rb_str_buf_cat2 _((VALUE, const char*));</div><div class='del'>-VALUE rb_obj_as_string _((VALUE));</div><div class='del'>-VALUE rb_check_string_type _((VALUE));</div><div class='del'>-VALUE rb_str_dup _((VALUE));</div><div class='del'>-VALUE rb_str_locktmp _((VALUE));</div><div class='del'>-VALUE rb_str_unlocktmp _((VALUE));</div><div class='del'>-VALUE rb_str_dup_frozen _((VALUE));</div><div class='del'>-VALUE rb_str_plus _((VALUE, VALUE));</div><div class='del'>-VALUE rb_str_times _((VALUE, VALUE));</div><div class='del'>-VALUE rb_str_substr _((VALUE, long, long));</div><div class='del'>-void rb_str_modify _((VALUE));</div><div class='del'>-VALUE rb_str_freeze _((VALUE));</div><div class='del'>-void rb_str_set_len _((VALUE, long));</div><div class='del'>-VALUE rb_str_resize _((VALUE, long));</div><div class='del'>-VALUE rb_str_cat _((VALUE, const char*, long));</div><div class='del'>-VALUE rb_str_cat2 _((VALUE, const char*));</div><div class='del'>-VALUE rb_str_append _((VALUE, VALUE));</div><div class='del'>-VALUE rb_str_concat _((VALUE, VALUE));</div><div class='del'>-int rb_str_hash _((VALUE));</div><div class='del'>-int rb_str_cmp _((VALUE, VALUE));</div><div class='del'>-VALUE rb_str_upto _((VALUE, VALUE, int));</div><div class='del'>-void rb_str_update _((VALUE, long, long, VALUE));</div><div class='del'>-VALUE rb_str_inspect _((VALUE));</div><div class='del'>-VALUE rb_str_dump _((VALUE));</div><div class='del'>-VALUE rb_str_split _((VALUE, const char*));</div><div class='del'>-void rb_str_associate _((VALUE, VALUE));</div><div class='del'>-VALUE rb_str_associated _((VALUE));</div><div class='del'>-void rb_str_setter _((VALUE, ID, VALUE*));</div><div class='del'>-VALUE rb_str_intern _((VALUE));</div><div class='del'>-/* struct.c */</div><div class='del'>-VALUE rb_struct_new __((VALUE, ...));</div><div class='del'>-VALUE rb_struct_define __((const char*, ...));</div><div class='del'>-VALUE rb_struct_alloc _((VALUE, VALUE));</div><div class='del'>-VALUE rb_struct_aref _((VALUE, VALUE));</div><div class='del'>-VALUE rb_struct_aset _((VALUE, VALUE, VALUE));</div><div class='del'>-VALUE rb_struct_getmember _((VALUE, ID));</div><div class='del'>-VALUE rb_struct_iv_get _((VALUE, const char*));</div><div class='del'>-VALUE rb_struct_s_members _((VALUE));</div><div class='del'>-VALUE rb_struct_members _((VALUE));</div><div class='del'>-/* time.c */</div><div class='del'>-VALUE rb_time_new _((time_t, time_t));</div><div class='del'>-/* variable.c */</div><div class='del'>-VALUE rb_mod_name _((VALUE));</div><div class='del'>-VALUE rb_class_path _((VALUE));</div><div class='del'>-void rb_set_class_path _((VALUE, VALUE, const char*));</div><div class='del'>-VALUE rb_path2class _((const char*));</div><div class='del'>-void rb_name_class _((VALUE, ID));</div><div class='del'>-VALUE rb_class_name _((VALUE));</div><div class='del'>-void rb_autoload _((VALUE, ID, const char*));</div><div class='del'>-VALUE rb_autoload_load _((VALUE, ID));</div><div class='del'>-VALUE rb_autoload_p _((VALUE, ID));</div><div class='del'>-void rb_gc_mark_global_tbl _((void));</div><div class='del'>-VALUE rb_f_trace_var _((int, VALUE*));</div><div class='del'>-VALUE rb_f_untrace_var _((int, VALUE*));</div><div class='del'>-VALUE rb_f_global_variables _((void));</div><div class='del'>-void rb_alias_variable _((ID, ID));</div><div class='del'>-struct st_table* rb_generic_ivar_table _((VALUE));</div><div class='del'>-void rb_copy_generic_ivar _((VALUE,VALUE));</div><div class='del'>-void rb_mark_generic_ivar _((VALUE));</div><div class='del'>-void rb_mark_generic_ivar_tbl _((void));</div><div class='del'>-void rb_free_generic_ivar _((VALUE));</div><div class='del'>-VALUE rb_ivar_get _((VALUE, ID));</div><div class='del'>-VALUE rb_ivar_set _((VALUE, ID, VALUE));</div><div class='del'>-VALUE rb_ivar_defined _((VALUE, ID));</div><div class='del'>-VALUE rb_iv_set _((VALUE, const char*, VALUE));</div><div class='del'>-VALUE rb_iv_get _((VALUE, const char*));</div><div class='del'>-VALUE rb_attr_get _((VALUE, ID));</div><div class='del'>-VALUE rb_obj_instance_variables _((VALUE));</div><div class='del'>-VALUE rb_obj_remove_instance_variable _((VALUE, VALUE));</div><div class='del'>-void *rb_mod_const_at _((VALUE, void*));</div><div class='del'>-void *rb_mod_const_of _((VALUE, void*));</div><div class='del'>-VALUE rb_const_list _((void*));</div><div class='del'>-VALUE rb_mod_constants _((VALUE));</div><div class='del'>-VALUE rb_mod_remove_const _((VALUE, VALUE));</div><div class='del'>-int rb_const_defined _((VALUE, ID));</div><div class='del'>-int rb_const_defined_at _((VALUE, ID));</div><div class='del'>-int rb_const_defined_from _((VALUE, ID));</div><div class='del'>-VALUE rb_const_get _((VALUE, ID));</div><div class='del'>-VALUE rb_const_get_at _((VALUE, ID));</div><div class='del'>-VALUE rb_const_get_from _((VALUE, ID));</div><div class='del'>-void rb_const_set _((VALUE, ID, VALUE));</div><div class='del'>-VALUE rb_mod_constants _((VALUE));</div><div class='del'>-VALUE rb_mod_const_missing _((VALUE,VALUE));</div><div class='del'>-VALUE rb_cvar_defined _((VALUE, ID));</div><div class='del'>-#define RB_CVAR_SET_4ARGS 1</div><div class='del'>-void rb_cvar_set _((VALUE, ID, VALUE, int));</div><div class='del'>-VALUE rb_cvar_get _((VALUE, ID));</div><div class='del'>-void rb_cv_set _((VALUE, const char*, VALUE));</div><div class='del'>-VALUE rb_cv_get _((VALUE, const char*));</div><div class='del'>-void rb_define_class_variable _((VALUE, const char*, VALUE));</div><div class='del'>-VALUE rb_mod_class_variables _((VALUE));</div><div class='del'>-VALUE rb_mod_remove_cvar _((VALUE, VALUE));</div><div class='del'>-/* version.c */</div><div class='del'>-void ruby_show_version _((void));</div><div class='del'>-void ruby_show_copyright _((void));</div><div class='head'>diff --git a/io.c b/io.c<br/>index 7663733d1e..4b3c03afb8 100644<br/>--- a/<a href='/ruby.git/tree/io.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>io.c</a><br/>+++ b/<a href='/ruby.git/tree/io.c?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>io.c</a></div><div class='hunk'>@@ -1,902 +1,143 @@</div><div class='del'>-/**********************************************************************</div><div class='add'>+/************************************************</div><div class='ctx'> </div><div class='ctx'>   io.c -</div><div class='ctx'> </div><div class='del'>-  $Author$</div><div class='del'>-  $Date$</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Date: 1994/06/27 15:48:29 $</div><div class='ctx'>   created at: Fri Oct 15 18:08:59 JST 1993</div><div class='ctx'> </div><div class='del'>-  Copyright (C) 1993-2003 Yukihiro Matsumoto</div><div class='del'>-  Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-  Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='ctx'> </div><div class='del'>-**********************************************************************/</div><div class='del'>-</div><div class='del'>-#if defined(__VMS)</div><div class='del'>-#define _XOPEN_SOURCE</div><div class='del'>-#define _POSIX_C_SOURCE 2</div><div class='del'>-#endif</div><div class='add'>+************************************************/</div><div class='ctx'> </div><div class='ctx'> #include "ruby.h"</div><div class='del'>-#include "rubyio.h"</div><div class='del'>-#include "rubysig.h"</div><div class='del'>-#include "env.h"</div><div class='del'>-#include "re.h"</div><div class='add'>+#include "io.h"</div><div class='ctx'> #include &lt;ctype.h&gt;</div><div class='ctx'> #include &lt;errno.h&gt;</div><div class='del'>-</div><div class='del'>-#if defined(MSDOS) || defined(__BOW__) || defined(__CYGWIN__) || defined(_WIN32) || defined(__human68k__) || defined(__EMX__) || defined(__BEOS__)</div><div class='del'>-# define NO_SAFE_RENAME</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(MSDOS) || defined(__CYGWIN__) || defined(_WIN32)</div><div class='del'>-# define NO_LONG_FNAME</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(sun) || defined(_nec_ews)</div><div class='del'>-# define USE_SETVBUF</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef __QNXNTO__</div><div class='del'>-#include "unix.h"</div><div class='del'>-#endif</div><div class='del'>-</div><div class='add'>+#include &lt;sys/time.h&gt;</div><div class='ctx'> #include &lt;sys/types.h&gt;</div><div class='del'>-#if defined(HAVE_SYS_IOCTL_H) &amp;&amp; !defined(DJGPP) &amp;&amp; !defined(_WIN32) &amp;&amp; !defined(__human68k__)</div><div class='del'>-#include &lt;sys/ioctl.h&gt;</div><div class='del'>-#endif</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='del'>-#ifdef __CYGWIN__</div><div class='del'>-#include &lt;io.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !HAVE_OFF_T &amp;&amp; !defined(off_t)</div><div class='del'>-# define off_t  long</div><div class='del'>-#endif</div><div class='del'>-#if !HAVE_FSEEKO &amp;&amp; !defined(fseeko)</div><div class='del'>-# define fseeko  fseek</div><div class='del'>-#endif</div><div class='del'>-#if !HAVE_FTELLO &amp;&amp; !defined(ftello)</div><div class='del'>-# define ftello  ftell</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'> #include &lt;sys/stat.h&gt;</div><div class='add'>+#include &lt;sys/ioctl.h&gt;</div><div class='ctx'> </div><div class='del'>-/* EMX has sys/param.h, but.. */</div><div class='del'>-#if defined(HAVE_SYS_PARAM_H) &amp;&amp; !(defined(__EMX__) || defined(__HIUX_MPP__))</div><div class='del'>-# include &lt;sys/param.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if !defined NOFILE</div><div class='del'>-# define NOFILE 64</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_UNISTD_H</div><div class='del'>-#ifdef HAVE_SYSCALL_H</div><div class='del'>-#include &lt;syscall.h&gt;</div><div class='del'>-#elif defined HAVE_SYS_SYSCALL_H</div><div class='del'>-#include &lt;sys/syscall.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include &lt;unistd.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-extern void Init_File _((void));</div><div class='del'>-</div><div class='del'>-#ifdef __BEOS__</div><div class='del'>-# ifndef NOFILE</div><div class='del'>-#  define NOFILE (OPEN_MAX)</div><div class='del'>-# endif</div><div class='del'>-#include &lt;net/socket.h&gt;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#include "util.h"</div><div class='del'>-</div><div class='del'>-#ifndef O_ACCMODE</div><div class='del'>-#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if SIZEOF_OFF_T &gt; SIZEOF_LONG &amp;&amp; !defined(HAVE_LONG_LONG)</div><div class='del'>-# error off_t is bigger than long, but you have no long long...</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef PIPE_BUF</div><div class='del'>-# ifdef _POSIX_PIPE_BUF</div><div class='del'>-#  define PIPE_BUF _POSIX_PIPE_BUF</div><div class='del'>-# else</div><div class='del'>-#  define PIPE_BUF 512 /* is this ok? */</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-VALUE rb_cIO;</div><div class='del'>-VALUE rb_eEOFError;</div><div class='del'>-VALUE rb_eIOError;</div><div class='del'>-</div><div class='del'>-VALUE rb_stdin, rb_stdout, rb_stderr;</div><div class='del'>-VALUE rb_deferr;		/* rescue VIM plugin */</div><div class='del'>-static VALUE orig_stdout, orig_stderr;</div><div class='del'>-</div><div class='del'>-VALUE rb_output_fs;</div><div class='del'>-VALUE rb_rs;</div><div class='del'>-VALUE rb_output_rs;</div><div class='del'>-VALUE rb_default_rs;</div><div class='del'>-</div><div class='del'>-static VALUE argf;</div><div class='del'>-</div><div class='del'>-static ID id_write, id_read, id_getc;</div><div class='del'>-</div><div class='del'>-extern char *ruby_inplace_mode;</div><div class='del'>-</div><div class='del'>-struct timeval rb_time_interval _((VALUE));</div><div class='del'>-</div><div class='del'>-static VALUE filename, current_file;</div><div class='del'>-static int gets_lineno;</div><div class='del'>-static int init_p = 0, next_p = 0;</div><div class='del'>-static VALUE lineno = INT2FIX(0);</div><div class='del'>-</div><div class='del'>-#ifdef _STDIO_USES_IOSTREAM  /* GNU libc */</div><div class='del'>-#  ifdef _IO_fpos_t</div><div class='del'>-#    define READ_DATA_PENDING(fp) ((fp)-&gt;_IO_read_ptr != (fp)-&gt;_IO_read_end)</div><div class='del'>-#    define READ_DATA_PENDING_COUNT(fp) ((fp)-&gt;_IO_read_end - (fp)-&gt;_IO_read_ptr)</div><div class='del'>-#    define READ_DATA_PENDING_PTR(fp) ((fp)-&gt;_IO_read_ptr)</div><div class='del'>-#  else</div><div class='del'>-#    define READ_DATA_PENDING(fp) ((fp)-&gt;_gptr &lt; (fp)-&gt;_egptr)</div><div class='del'>-#    define READ_DATA_PENDING_COUNT(fp) ((fp)-&gt;_egptr - (fp)-&gt;_gptr)</div><div class='del'>-#    define READ_DATA_PENDING_PTR(fp) ((fp)-&gt;_gptr)</div><div class='del'>-#  endif</div><div class='del'>-#elif defined(_LP64) &amp;&amp; (defined(__sun__) || defined(__sun))</div><div class='del'>-typedef struct _FILE64 {</div><div class='del'>-  unsigned char        *_ptr;  /* next character from/to here in buffer */</div><div class='del'>-  unsigned char        *_base; /* the buffer */</div><div class='del'>-  unsigned char        *_end;  /* the end of the buffer */</div><div class='del'>-  ssize_t      _cnt;   /* number of available characters in buffer */</div><div class='del'>-  int          _file;  /* UNIX System file descriptor */</div><div class='del'>-  unsigned int _flag;  /* the state of the stream */</div><div class='del'>-  char         __fill[80];     /* filler to bring size to 128 bytes */</div><div class='del'>-} FILE64;</div><div class='del'>-#  define READ_DATA_PENDING(fp) (((FILE64*)(fp))-&gt;_cnt &gt; 0)</div><div class='del'>-#  define READ_DATA_PENDING_COUNT(fp) (((FILE64*)(fp))-&gt;_cnt)</div><div class='del'>-#  define READ_DATA_PENDING_PTR(fp) ((char *)((FILE64*)(fp))-&gt;_ptr)</div><div class='del'>-#elif defined(FILE_COUNT)</div><div class='del'>-#  define READ_DATA_PENDING(fp) ((fp)-&gt;FILE_COUNT &gt; 0)</div><div class='del'>-#  define READ_DATA_PENDING_COUNT(fp) ((fp)-&gt;FILE_COUNT)</div><div class='del'>-#elif defined(FILE_READEND)</div><div class='del'>-#  define READ_DATA_PENDING(fp) ((fp)-&gt;FILE_READPTR &lt; (fp)-&gt;FILE_READEND)</div><div class='del'>-#  define READ_DATA_PENDING_COUNT(fp) ((fp)-&gt;FILE_READEND - (fp)-&gt;FILE_READPTR)</div><div class='del'>-#elif defined(__BEOS__)</div><div class='del'>-#  define READ_DATA_PENDING(fp) (fp-&gt;_state._eof == 0)</div><div class='del'>-#elif defined(__VMS)</div><div class='del'>-#  define READ_DATA_PENDING_COUNT(fp) ((unsigned int)(*(fp))-&gt;_cnt)</div><div class='del'>-#  define READ_DATA_PENDING(fp)       (((unsigned int)(*(fp))-&gt;_cnt) &gt; 0)</div><div class='del'>-#  define READ_DATA_BUFFERED(fp) 0</div><div class='del'>-#elif defined(__DragonFly__)</div><div class='del'>-/* FILE is an incomplete struct type since DragonFly BSD 1.4.0 */</div><div class='del'>-#  define READ_DATA_PENDING(fp) (((struct __FILE_public *)(fp))-&gt;_r &gt; 0)</div><div class='del'>-#  define READ_DATA_PENDING_COUNT(fp) (((struct __FILE_public *)(fp))-&gt;_r)</div><div class='del'>-#else</div><div class='del'>-/* requires systems own version of the ReadDataPending() */</div><div class='del'>-extern int ReadDataPending();</div><div class='del'>-#  define READ_DATA_PENDING(fp) (!feof(fp))</div><div class='del'>-#  define READ_DATA_BUFFERED(fp) 0</div><div class='del'>-#endif</div><div class='del'>-#ifndef READ_DATA_BUFFERED</div><div class='del'>-#  define READ_DATA_BUFFERED(fp) READ_DATA_PENDING(fp)</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#ifndef READ_DATA_PENDING_PTR</div><div class='del'>-# ifdef FILE_READPTR</div><div class='del'>-#  define READ_DATA_PENDING_PTR(fp) ((char *)(fp)-&gt;FILE_READPTR)</div><div class='del'>-# endif</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined __DJGPP__</div><div class='del'>-# undef READ_DATA_PENDING_COUNT</div><div class='del'>-# undef READ_DATA_PENDING_PTR</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#define READ_CHECK(fp) do {\</div><div class='del'>-    if (!READ_DATA_PENDING(fp)) {\</div><div class='del'>-	rb_thread_wait_fd(fileno(fp));\</div><div class='del'>-        rb_io_check_closed(fptr);\</div><div class='del'>-     }\</div><div class='del'>-} while(0)</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_eof_error()</div><div class='del'>-{</div><div class='del'>-    rb_raise(rb_eEOFError, "end of file reached");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_taint_check(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    if (!OBJ_TAINTED(io) &amp;&amp; rb_safe_level() &gt;= 4)</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: operation on untainted IO");</div><div class='del'>-    rb_check_frozen(io);</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_io_check_initialized(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    if (!fptr) {</div><div class='del'>-	rb_raise(rb_eIOError, "uninitialized stream");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_io_check_closed(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    rb_io_check_initialized(fptr);</div><div class='del'>-    if (!fptr-&gt;f &amp;&amp; !fptr-&gt;f2) {</div><div class='del'>-	rb_raise(rb_eIOError, "closed stream");</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void io_fflush _((FILE *, rb_io_t *));</div><div class='add'>+VALUE rb_ad_string();</div><div class='ctx'> </div><div class='del'>-static rb_io_t *</div><div class='del'>-flush_before_seek(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    if (fptr-&gt;mode &amp; FMODE_WBUF) {</div><div class='del'>-	io_fflush(GetWriteFile(fptr), fptr);</div><div class='del'>-    }</div><div class='del'>-    errno = 0;</div><div class='del'>-    return fptr;</div><div class='del'>-}</div><div class='add'>+VALUE C_IO;</div><div class='add'>+extern VALUE C_File;</div><div class='ctx'> </div><div class='del'>-#define io_seek(fptr, ofs, whence) fseeko(flush_before_seek(fptr)-&gt;f, ofs, whence)</div><div class='del'>-#define io_tell(fptr) ftello(flush_before_seek(fptr)-&gt;f)</div><div class='add'>+VALUE rb_stdin, rb_stdout, rb_stderr, rb_defout;</div><div class='ctx'> </div><div class='del'>-#ifndef SEEK_CUR</div><div class='del'>-# define SEEK_SET 0</div><div class='del'>-# define SEEK_CUR 1</div><div class='del'>-# define SEEK_END 2</div><div class='del'>-#endif</div><div class='add'>+VALUE FS, OFS;</div><div class='add'>+VALUE RS, ORS;</div><div class='ctx'> </div><div class='del'>-#define FMODE_SYNCWRITE (FMODE_SYNC|FMODE_WRITABLE)</div><div class='add'>+ID id_write;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_io_check_readable(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    rb_io_check_closed(fptr);</div><div class='del'>-    if (!(fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='del'>-	rb_raise(rb_eIOError, "not opened for reading");</div><div class='del'>-    }</div><div class='del'>-#ifdef NEED_IO_SEEK_BETWEEN_RW</div><div class='del'>-    if (((fptr-&gt;mode &amp; FMODE_WBUF) ||</div><div class='del'>-	 (fptr-&gt;mode &amp; (FMODE_SYNCWRITE|FMODE_RBUF)) == FMODE_SYNCWRITE) &amp;&amp;</div><div class='del'>-	!feof(fptr-&gt;f) &amp;&amp;</div><div class='del'>-	!fptr-&gt;f2) {</div><div class='del'>-	io_seek(fptr, 0, SEEK_CUR);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-    fptr-&gt;mode |= FMODE_RBUF;</div><div class='del'>-}</div><div class='add'>+extern char *inplace;</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_io_check_writable(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    rb_io_check_closed(fptr);</div><div class='del'>-    if (!(fptr-&gt;mode &amp; FMODE_WRITABLE)) {</div><div class='del'>-	rb_raise(rb_eIOError, "not opened for writing");</div><div class='del'>-    }</div><div class='del'>-    if ((fptr-&gt;mode &amp; FMODE_RBUF) &amp;&amp; !feof(fptr-&gt;f) &amp;&amp; !fptr-&gt;f2) {</div><div class='del'>-	io_seek(fptr, 0, SEEK_CUR);</div><div class='del'>-    }</div><div class='del'>-    if (!fptr-&gt;f2) {</div><div class='del'>-	fptr-&gt;mode &amp;= ~FMODE_RBUF;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_read_pending(fp)</div><div class='del'>-    FILE *fp;</div><div class='del'>-{</div><div class='del'>-    return READ_DATA_PENDING(fp);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_read_check(fp)</div><div class='del'>-    FILE *fp;</div><div class='del'>-{</div><div class='del'>-    if (!READ_DATA_PENDING(fp)) {</div><div class='del'>-	rb_thread_wait_fd(fileno(fp));</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-ruby_dup(orig)</div><div class='del'>-    int orig;</div><div class='del'>-{</div><div class='del'>-    int fd;</div><div class='del'>-</div><div class='del'>-    fd = dup(orig);</div><div class='del'>-    if (fd &lt; 0) {</div><div class='del'>-	if (errno == EMFILE || errno == ENFILE || errno == ENOMEM) {</div><div class='del'>-	    rb_gc();</div><div class='del'>-	    fd = dup(orig);</div><div class='del'>-	}</div><div class='del'>-	if (fd &lt; 0) {</div><div class='del'>-	    rb_sys_fail(0);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return fd;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE io_alloc _((VALUE));</div><div class='add'>+/* writing functions */</div><div class='ctx'> static VALUE</div><div class='del'>-io_alloc(klass)</div><div class='del'>-    VALUE klass;</div><div class='add'>+Fio_write(obj, str)</div><div class='add'>+    VALUE obj;</div><div class='add'>+    struct RString *str;</div><div class='ctx'> {</div><div class='del'>-    NEWOBJ(io, struct RFile);</div><div class='del'>-    OBJSETUP(io, klass, T_FILE);</div><div class='del'>-</div><div class='del'>-    io-&gt;fptr = 0;</div><div class='del'>-</div><div class='del'>-    return (VALUE)io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-io_fflush(f, fptr)</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     FILE *f;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='add'>+    VALUE out;</div><div class='ctx'>     int n;</div><div class='ctx'> </div><div class='del'>-    if (!rb_thread_fd_writable(fileno(f))) {</div><div class='del'>-        rb_io_check_closed(fptr);</div><div class='del'>-    }</div><div class='del'>-    for (;;) {</div><div class='del'>-	TRAP_BEG;</div><div class='del'>-	n = fflush(f);</div><div class='del'>-	TRAP_END;</div><div class='del'>-	if (n != EOF) break;</div><div class='del'>-	if (!rb_io_wait_writable(fileno(f)))</div><div class='del'>-	    rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    }</div><div class='del'>-    fptr-&gt;mode &amp;= ~FMODE_WBUF;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_io_wait_readable(f)</div><div class='del'>-    int f;</div><div class='del'>-{</div><div class='del'>-    fd_set rfds;</div><div class='del'>-</div><div class='del'>-    switch (errno) {</div><div class='del'>-      case EINTR:</div><div class='del'>-#if defined(ERESTART)</div><div class='del'>-      case ERESTART:</div><div class='del'>-#endif</div><div class='del'>-	rb_thread_wait_fd(f);</div><div class='del'>-	return Qtrue;</div><div class='del'>-</div><div class='del'>-      case EAGAIN:</div><div class='del'>-#if defined(EWOULDBLOCK) &amp;&amp; EWOULDBLOCK != EAGAIN</div><div class='del'>-      case EWOULDBLOCK:</div><div class='del'>-#endif</div><div class='del'>-	FD_ZERO(&amp;rfds);</div><div class='del'>-	FD_SET(f, &amp;rfds);</div><div class='del'>-	rb_thread_select(f + 1, &amp;rfds, NULL, NULL, NULL);</div><div class='del'>-	return Qtrue;</div><div class='del'>-</div><div class='del'>-      default:</div><div class='del'>-	return Qfalse;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_io_wait_writable(f)</div><div class='del'>-    int f;</div><div class='del'>-{</div><div class='del'>-    fd_set wfds;</div><div class='del'>-</div><div class='del'>-    switch (errno) {</div><div class='del'>-      case EINTR:</div><div class='del'>-#if defined(ERESTART)</div><div class='del'>-      case ERESTART:</div><div class='del'>-#endif</div><div class='del'>-	rb_thread_fd_writable(f);</div><div class='del'>-	return Qtrue;</div><div class='del'>-</div><div class='del'>-      case EAGAIN:</div><div class='del'>-#if defined(EWOULDBLOCK) &amp;&amp; EWOULDBLOCK != EAGAIN</div><div class='del'>-      case EWOULDBLOCK:</div><div class='del'>-#endif</div><div class='del'>-	FD_ZERO(&amp;wfds);</div><div class='del'>-	FD_SET(f, &amp;wfds);</div><div class='del'>-	rb_thread_select(f + 1, NULL, &amp;wfds, NULL, NULL);</div><div class='del'>-	return Qtrue;</div><div class='add'>+    if (TYPE(str) != T_STRING)</div><div class='add'>+	str = (struct RString*)obj_as_string(str);</div><div class='ctx'> </div><div class='del'>-      default:</div><div class='del'>-	return Qfalse;</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_WRITABLE)) {</div><div class='add'>+	Fail("not opened for writing");</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-#ifndef S_ISREG</div><div class='del'>-#   define S_ISREG(m) ((m &amp; S_IFMT) == S_IFREG)</div><div class='del'>-#endif</div><div class='add'>+    f = (fptr-&gt;f2) ? fptr-&gt;f2 : fptr-&gt;f;</div><div class='add'>+    if (f == NULL) Fail("closed stream");</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-wsplit_p(rb_io_t *fptr)</div><div class='del'>-{</div><div class='del'>-    FILE *f = GetWriteFile(fptr);</div><div class='del'>-#if defined(HAVE_FCNTL) &amp;&amp; defined(F_GETFL) &amp;&amp; defined(O_NONBLOCK)</div><div class='del'>-    int r;</div><div class='del'>-#endif</div><div class='add'>+    if (str-&gt;len == 0) return INT2FIX(0);</div><div class='ctx'> </div><div class='del'>-    if (!(fptr-&gt;mode &amp; FMODE_WSPLIT_INITIALIZED)) {</div><div class='del'>-        struct stat buf;</div><div class='del'>-        if (fstat(fileno(f), &amp;buf) == 0 &amp;&amp;</div><div class='del'>-            !S_ISREG(buf.st_mode)</div><div class='del'>-#if defined(HAVE_FCNTL) &amp;&amp; defined(F_GETFL) &amp;&amp; defined(O_NONBLOCK)</div><div class='del'>-            &amp;&amp; (r = fcntl(fileno(f), F_GETFL)) != -1 &amp;&amp;</div><div class='del'>-            !(r &amp; O_NONBLOCK)</div><div class='del'>-#endif</div><div class='del'>-            ) {</div><div class='del'>-            fptr-&gt;mode |= FMODE_WSPLIT;</div><div class='del'>-        }</div><div class='del'>-        fptr-&gt;mode |= FMODE_WSPLIT_INITIALIZED;</div><div class='add'>+    n = fwrite(str-&gt;ptr, sizeof(char), str-&gt;len, f);</div><div class='add'>+    if (n == 0 || ferror(f)) {</div><div class='add'>+	rb_sys_fail(fptr-&gt;path);</div><div class='ctx'>     }</div><div class='del'>-    return fptr-&gt;mode &amp; FMODE_WSPLIT;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* writing functions */</div><div class='del'>-static long</div><div class='del'>-io_fwrite(str, fptr)</div><div class='del'>-    VALUE str;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    long len, n, r, l, offset = 0;</div><div class='del'>-    FILE *f = GetWriteFile(fptr);</div><div class='del'>-</div><div class='del'>-    len = RSTRING(str)-&gt;len;</div><div class='del'>-    if ((n = len) &lt;= 0) return n;</div><div class='ctx'>     if (fptr-&gt;mode &amp; FMODE_SYNC) {</div><div class='del'>-	io_fflush(f, fptr);</div><div class='del'>-	if (!rb_thread_fd_writable(fileno(f))) {</div><div class='del'>-	    rb_io_check_closed(fptr);</div><div class='del'>-	}</div><div class='del'>-      retry:</div><div class='del'>-        l = n;</div><div class='del'>-        if (PIPE_BUF &lt; l &amp;&amp;</div><div class='del'>-            !rb_thread_critical &amp;&amp;</div><div class='del'>-            !rb_thread_alone() &amp;&amp;</div><div class='del'>-            wsplit_p(fptr)) {</div><div class='del'>-            l = PIPE_BUF;</div><div class='del'>-        }</div><div class='del'>-        TRAP_BEG;</div><div class='del'>-	r = write(fileno(f), RSTRING(str)-&gt;ptr+offset, l);</div><div class='del'>-        TRAP_END;</div><div class='del'>-        if (r == n) return len;</div><div class='del'>-        if (0 &lt;= r) {</div><div class='del'>-            offset += r;</div><div class='del'>-            n -= r;</div><div class='del'>-            errno = EAGAIN;</div><div class='del'>-        }</div><div class='del'>-        if (rb_io_wait_writable(fileno(f))) {</div><div class='del'>-            rb_io_check_closed(fptr);</div><div class='del'>-	    if (offset &lt; RSTRING(str)-&gt;len)</div><div class='del'>-		goto retry;</div><div class='del'>-        }</div><div class='del'>-        return -1L;</div><div class='del'>-    }</div><div class='del'>-#if defined(__human68k__) || defined(__vms)</div><div class='del'>-    do {</div><div class='del'>-	if (fputc(RSTRING(str)-&gt;ptr[offset++], f) == EOF) {</div><div class='del'>-	    if (ferror(f)) return -1L;</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    } while (--n &gt; 0);</div><div class='del'>-#else</div><div class='del'>-    while (errno = 0, offset += (r = fwrite(RSTRING(str)-&gt;ptr+offset, 1, n, f)), (n -= r) &gt; 0) {</div><div class='del'>-	if (ferror(f)</div><div class='del'>-#if defined __BORLANDC__</div><div class='del'>-	    || errno</div><div class='del'>-#endif</div><div class='del'>-	) {</div><div class='del'>-#ifdef __hpux</div><div class='del'>-	    if (!errno) errno = EAGAIN;</div><div class='del'>-#elif defined(_WIN32) &amp;&amp; !defined(__BORLANDC__)</div><div class='del'>-	    /* workaround for MSVCRT's bug */</div><div class='del'>-	    if (!errno) {</div><div class='del'>-		if (GetLastError() == ERROR_NO_DATA)</div><div class='del'>-		    errno = EPIPE;</div><div class='del'>-		else</div><div class='del'>-		    errno = EBADF;</div><div class='del'>-	    }</div><div class='del'>-#endif</div><div class='del'>-	    if (rb_io_wait_writable(fileno(f))) {</div><div class='del'>-		rb_io_check_closed(fptr);</div><div class='del'>-		clearerr(f);</div><div class='del'>-		if (offset &lt; RSTRING(str)-&gt;len)</div><div class='del'>-		    continue;</div><div class='del'>-	    }</div><div class='del'>-	    return -1L;</div><div class='del'>-	}</div><div class='add'>+	fflush(f);</div><div class='ctx'>     }</div><div class='del'>-#endif</div><div class='del'>-    return len - n;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-long</div><div class='del'>-rb_io_fwrite(ptr, len, f)</div><div class='del'>-    const char *ptr;</div><div class='del'>-    long len;</div><div class='del'>-    FILE *f;</div><div class='del'>-{</div><div class='del'>-    rb_io_t of;</div><div class='del'>-</div><div class='del'>-    of.f = f;</div><div class='del'>-    of.f2 = NULL;</div><div class='del'>-    of.mode = FMODE_WRITABLE;</div><div class='del'>-    of.path = NULL;</div><div class='del'>-    return io_fwrite(rb_str_new(ptr, len), &amp;of);</div><div class='add'>+    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'>- *     ios.write(string)    =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Writes the given string to &lt;em&gt;ios&lt;/em&gt;. The stream must be opened</div><div class='del'>- *  for writing. If the argument is not a string, it will be converted</div><div class='del'>- *  to a string using &lt;code&gt;to_s&lt;/code&gt;. Returns the number of bytes</div><div class='del'>- *  written.</div><div class='del'>- *     </div><div class='del'>- *     count = $stdout.write( "This is a test\n" )</div><div class='del'>- *     puts "That was #{count} bytes of data"</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     This is a test</div><div class='del'>- *     That was 15 bytes of data</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-io_write(io, str)</div><div class='del'>-    VALUE io, str;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    long n;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (TYPE(str) != T_STRING)</div><div class='del'>-	str = rb_obj_as_string(str);</div><div class='del'>-</div><div class='del'>-    if (TYPE(io) != T_FILE) {</div><div class='del'>-	/* port is not IO, call write method for it. */</div><div class='del'>-	return rb_funcall(io, id_write, 1, str);</div><div class='del'>-    }</div><div class='del'>-    if (RSTRING(str)-&gt;len == 0) return INT2FIX(0);</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_writable(fptr);</div><div class='del'>-</div><div class='del'>-    n = io_fwrite(str, fptr);</div><div class='del'>-    if (n == -1L) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    if (!(fptr-&gt;mode &amp; FMODE_SYNC)) {</div><div class='del'>-	fptr-&gt;mode |= FMODE_WBUF;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return LONG2FIX(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_write(io, str)</div><div class='del'>-    VALUE io, str;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(io, id_write, 1, str);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios &lt;&lt; obj     =&gt; ios</div><div class='del'>- *  </div><div class='del'>- *  String Output---Writes &lt;i&gt;obj&lt;/i&gt; to &lt;em&gt;ios&lt;/em&gt;.</div><div class='del'>- *  &lt;i&gt;obj&lt;/i&gt; will be converted to a string using</div><div class='del'>- *  &lt;code&gt;to_s&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     $stdout &lt;&lt; "Hello " &lt;&lt; "world!\n"</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Hello world!</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_addstr(io, str)</div><div class='del'>-    VALUE io, str;</div><div class='add'>+Fio_puts(obj, str)</div><div class='add'>+    VALUE obj, str;</div><div class='ctx'> {</div><div class='del'>-    rb_io_write(io, str);</div><div class='del'>-    return io;</div><div class='add'>+    Fio_write(obj, str);</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.flush    =&gt; ios</div><div class='del'>- *  </div><div class='del'>- *  Flushes any buffered data within &lt;em&gt;ios&lt;/em&gt; to the underlying</div><div class='del'>- *  operating system (note that this is Ruby internal buffering only;</div><div class='del'>- *  the OS may buffer the data as well).</div><div class='del'>- *     </div><div class='del'>- *     $stdout.print "no newline"</div><div class='del'>- *     $stdout.flush</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     no newline</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_flush(io)</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_flush(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     FILE *f;</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_writable(fptr);</div><div class='del'>-    f = GetWriteFile(fptr);</div><div class='del'>-</div><div class='del'>-    io_fflush(f, fptr);</div><div class='del'>-</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.pos     =&gt; integer</div><div class='del'>- *     ios.tell    =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Returns the current offset (in bytes) of &lt;em&gt;ios&lt;/em&gt;.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.pos    #=&gt; 0</div><div class='del'>- *     f.gets   #=&gt; "This is line one\n"</div><div class='del'>- *     f.pos    #=&gt; 17</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_tell(io)</div><div class='del'>-     VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    off_t pos;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    pos = io_tell(fptr);</div><div class='del'>-    if (pos &lt; 0 &amp;&amp; errno) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    return OFFT2NUM(pos);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_seek(io, offset, whence)</div><div class='del'>-    VALUE io, offset;</div><div class='del'>-    int whence;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    off_t pos;</div><div class='del'>-</div><div class='del'>-    pos = NUM2OFFT(offset);</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    pos = io_seek(fptr, pos, whence);</div><div class='del'>-    if (pos &lt; 0 &amp;&amp; errno) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    clearerr(fptr-&gt;f);</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.seek(amount, whence=SEEK_SET) -&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Seeks to a given offset &lt;i&gt;anInteger&lt;/i&gt; in the stream according to</div><div class='del'>- *  the value of &lt;i&gt;whence&lt;/i&gt;:</div><div class='del'>- *</div><div class='del'>- *    IO::SEEK_CUR  | Seeks to _amount_ plus current position</div><div class='del'>- *    --------------+----------------------------------------------------</div><div class='del'>- *    IO::SEEK_END  | Seeks to _amount_ plus end of stream (you probably </div><div class='del'>- *                  | want a negative value for _amount_)</div><div class='del'>- *    --------------+----------------------------------------------------</div><div class='del'>- *    IO::SEEK_SET  | Seeks to the absolute location given by _amount_</div><div class='del'>- *</div><div class='del'>- *  Example:</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.seek(-13, IO::SEEK_END)   #=&gt; 0</div><div class='del'>- *     f.readline                  #=&gt; "And so on...\n"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_seek_m(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'>-    VALUE offset, ptrname;</div><div class='del'>-    int whence = SEEK_SET;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;offset, &amp;ptrname) == 2) {</div><div class='del'>-	whence = NUM2INT(ptrname);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_WRITABLE)) {</div><div class='add'>+	Fail("not opend for writing");</div><div class='ctx'>     }</div><div class='add'>+    f = (fptr-&gt;f2) ? fptr-&gt;f2 : fptr-&gt;f;</div><div class='add'>+    if (f == NULL) Fail("closed stream");</div><div class='ctx'> </div><div class='del'>-    return rb_io_seek(io, offset, whence);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.pos = integer    =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Seeks to the given position (in bytes) in &lt;em&gt;ios&lt;/em&gt;.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.pos = 17</div><div class='del'>- *     f.gets   #=&gt; "This is line two\n"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_set_pos(io, offset)</div><div class='del'>-     VALUE io, offset;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    off_t pos;</div><div class='add'>+    if (fflush(f) == EOF) rb_sys_fail(Qnil);</div><div class='ctx'> </div><div class='del'>-    pos = NUM2OFFT(offset);</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    pos = io_seek(fptr, pos, SEEK_SET);</div><div class='del'>-    if (pos != 0) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    clearerr(fptr-&gt;f);</div><div class='del'>-</div><div class='del'>-    return OFFT2NUM(pos);</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.rewind    =&gt; 0</div><div class='del'>- *  </div><div class='del'>- *  Positions &lt;em&gt;ios&lt;/em&gt; to the beginning of input, resetting</div><div class='del'>- *  &lt;code&gt;lineno&lt;/code&gt; to zero.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.readline   #=&gt; "This is line one\n"</div><div class='del'>- *     f.rewind     #=&gt; 0</div><div class='del'>- *     f.lineno     #=&gt; 0</div><div class='del'>- *     f.readline   #=&gt; "This is line one\n"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_rewind(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    if (io_seek(fptr, 0L, 0) != 0) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    clearerr(fptr-&gt;f);</div><div class='del'>-    if (io == current_file) {</div><div class='del'>-	gets_lineno -= fptr-&gt;lineno;</div><div class='del'>-    }</div><div class='del'>-    fptr-&gt;lineno = 0;</div><div class='del'>-</div><div class='del'>-    return INT2FIX(0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.eof     =&gt; true or false</div><div class='del'>- *     ios.eof?    =&gt; true or false</div><div class='del'>- *</div><div class='del'>- *  Returns true if &lt;em&gt;ios&lt;/em&gt; is at end of file that means</div><div class='del'>- *  there are no more data to read.</div><div class='del'>- *  The stream must be opened for reading or an &lt;code&gt;IOError&lt;/code&gt; will be</div><div class='del'>- *  raised.</div><div class='del'>- *</div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     dummy = f.readlines</div><div class='del'>- *     f.eof   #=&gt; true</div><div class='del'>- *</div><div class='del'>- *  If &lt;em&gt;ios&lt;/em&gt; is a stream such as pipe or socket, &lt;code&gt;IO#eof?&lt;/code&gt;</div><div class='del'>- *  blocks until the other end sends some data or closes it.</div><div class='del'>- *</div><div class='del'>- *     r, w = IO.pipe</div><div class='del'>- *     Thread.new { sleep 1; w.close }</div><div class='del'>- *     r.eof?  #=&gt; true after 1 second blocking</div><div class='del'>- *</div><div class='del'>- *     r, w = IO.pipe</div><div class='del'>- *     Thread.new { sleep 1; w.puts "a" }</div><div class='del'>- *     r.eof?  #=&gt; false after 1 second blocking</div><div class='del'>- *</div><div class='del'>- *     r, w = IO.pipe</div><div class='del'>- *     r.eof?  # blocks forever</div><div class='del'>- *</div><div class='del'>- *  Note that &lt;code&gt;IO#eof?&lt;/code&gt; reads data to a input buffer.</div><div class='del'>- *  So &lt;code&gt;IO#sysread&lt;/code&gt; doesn't work with &lt;code&gt;IO#eof?&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_eof(io)</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_eof(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     int ch;</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+#ifdef STDSTDIO			/* (the code works without this) */</div><div class='add'>+    if (fptr-&gt;f-&gt;_cnt &gt; 0)	/* cheat a little, since */</div><div class='add'>+	return FALSE;		/* this is the most usual case */</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='del'>-    if (feof(fptr-&gt;f)) return Qtrue;</div><div class='del'>-    if (READ_DATA_PENDING(fptr-&gt;f)) return Qfalse;</div><div class='del'>-    READ_CHECK(fptr-&gt;f);</div><div class='del'>-    clearerr(fptr-&gt;f);</div><div class='del'>-    TRAP_BEG;</div><div class='ctx'>     ch = getc(fptr-&gt;f);</div><div class='del'>-    TRAP_END;</div><div class='del'>-</div><div class='ctx'>     if (ch != EOF) {</div><div class='del'>-	ungetc(ch, fptr-&gt;f);</div><div class='del'>-	return Qfalse;</div><div class='add'>+	(void)ungetc(ch, fptr-&gt;f);</div><div class='add'>+	return FALSE;</div><div class='ctx'>     }</div><div class='del'>-    rb_io_check_closed(fptr);</div><div class='del'>-    clearerr(fptr-&gt;f);</div><div class='del'>-    return Qtrue;</div><div class='add'>+#ifdef STDSTDIO</div><div class='add'>+	if (fptr-&gt;f-&gt;_cnt &lt; -1)</div><div class='add'>+	    fptr-&gt;f-&gt;_cnt = -1;</div><div class='add'>+#endif</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.sync    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns the current ``sync mode'' of &lt;em&gt;ios&lt;/em&gt;. When sync mode is</div><div class='del'>- *  true, all output is immediately flushed to the underlying operating</div><div class='del'>- *  system and is not buffered by Ruby internally. See also</div><div class='del'>- *  &lt;code&gt;IO#fsync&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.sync   #=&gt; false</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_sync(io)</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_sync(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    return (fptr-&gt;mode &amp; FMODE_SYNC) ? Qtrue : Qfalse;</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    return (fptr-&gt;mode &amp; FMODE_SYNC) ? TRUE : FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.sync = boolean   =&gt; boolean</div><div class='del'>- *  </div><div class='del'>- *  Sets the ``sync mode'' to &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;.</div><div class='del'>- *  When sync mode is true, all output is immediately flushed to the</div><div class='del'>- *  underlying operating system and is not buffered internally. Returns</div><div class='del'>- *  the new state. See also &lt;code&gt;IO#fsync&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.sync = true</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;(produces no output)&lt;/em&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_set_sync(io, mode)</div><div class='del'>-    VALUE io, mode;</div><div class='add'>+Fio_set_sync(obj, mode)</div><div class='add'>+    VALUE obj, mode;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    if (RTEST(mode)) {</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (mode) {</div><div class='ctx'> 	fptr-&gt;mode |= FMODE_SYNC;</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='hunk'>@@ -905,2317 +146,433 @@ rb_io_set_sync(io, mode)</div><div class='ctx'>     return mode;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.fsync   =&gt; 0 or nil</div><div class='del'>- *  </div><div class='del'>- *  Immediately writes all buffered data in &lt;em&gt;ios&lt;/em&gt; to disk.</div><div class='del'>- *  Returns &lt;code&gt;nil&lt;/code&gt; if the underlying operating system does not</div><div class='del'>- *  support &lt;em&gt;fsync(2)&lt;/em&gt;. Note that &lt;code&gt;fsync&lt;/code&gt; differs from</div><div class='del'>- *  using &lt;code&gt;IO#sync=&lt;/code&gt;. The latter ensures that data is flushed</div><div class='del'>- *  from Ruby's buffers, but doesn't not guarantee that the underlying</div><div class='del'>- *  operating system actually writes it to disk.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_fsync(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-#ifdef HAVE_FSYNC</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    FILE *f;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    f = GetWriteFile(fptr);</div><div class='del'>-</div><div class='del'>-    io_fflush(f, fptr);</div><div class='del'>-    if (fsync(fileno(f)) &lt; 0)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    return INT2FIX(0);</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'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.fileno    =&gt; fixnum</div><div class='del'>- *     ios.to_i      =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns an integer representing the numeric file descriptor for</div><div class='del'>- *  &lt;em&gt;ios&lt;/em&gt;.</div><div class='del'>- *     </div><div class='del'>- *     $stdin.fileno    #=&gt; 0</div><div class='del'>- *     $stdout.fileno   #=&gt; 1</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_fileno(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int fd;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    fd = fileno(fptr-&gt;f);</div><div class='del'>-    return INT2FIX(fd);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.pid    =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Returns the process ID of a child process associated with</div><div class='del'>- *  &lt;em&gt;ios&lt;/em&gt;. This will be set by &lt;code&gt;IO::popen&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     pipe = IO.popen("-")</div><div class='del'>- *     if pipe</div><div class='del'>- *       $stderr.puts "In parent, child pid is #{pipe.pid}"</div><div class='del'>- *     else</div><div class='del'>- *       $stderr.puts "In child, pid is #{$$}"</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'>- *     In child, pid is 26209</div><div class='del'>- *     In parent, child pid is 26209</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_pid(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    if (!fptr-&gt;pid)</div><div class='del'>-	return Qnil;</div><div class='del'>-    return INT2FIX(fptr-&gt;pid);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- * call-seq:</div><div class='del'>- *   ios.inspect   =&gt; string</div><div class='del'>- *</div><div class='del'>- * Return a string describing this IO object.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_inspect(obj)</div><div class='add'>+Fio_fileno(obj)</div><div class='ctx'>     VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    char *buf;</div><div class='del'>-    const char *cname, *st = "";</div><div class='del'>-    long len;</div><div class='del'>-</div><div class='del'>-    fptr = RFILE(rb_io_taint_check(obj))-&gt;fptr;</div><div class='del'>-    if (!fptr || !fptr-&gt;path) return rb_any_to_s(obj);</div><div class='del'>-    cname = rb_obj_classname(obj);</div><div class='del'>-    len = strlen(cname) + strlen(fptr-&gt;path) + 5;</div><div class='del'>-    if (!(fptr-&gt;f || fptr-&gt;f2)) {</div><div class='del'>-	st = " (closed)";</div><div class='del'>-	len += 9;</div><div class='del'>-    }</div><div class='del'>-    buf = ALLOCA_N(char, len);</div><div class='del'>-    snprintf(buf, len, "#&lt;%s:%s%s&gt;", cname, fptr-&gt;path, st);</div><div class='del'>-    return rb_str_new2(buf);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.to_io -&gt; ios</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;em&gt;ios&lt;/em&gt;.</div><div class='del'>- */</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    int f;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_io_to_io(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    return io;</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    f = fileno(fptr-&gt;f);</div><div class='add'>+    return INT2FIX(f);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> /* reading functions */</div><div class='del'>-static long</div><div class='del'>-read_buffered_data(ptr, len, f)</div><div class='del'>-    char *ptr;</div><div class='del'>-    long len;</div><div class='del'>-    FILE *f;</div><div class='del'>-{</div><div class='del'>-    long n;</div><div class='del'>-</div><div class='del'>-#ifdef READ_DATA_PENDING_COUNT</div><div class='del'>-    n = READ_DATA_PENDING_COUNT(f);</div><div class='del'>-    if (n &lt;= 0) return 0;</div><div class='del'>-    if (n &gt; len) n = len;</div><div class='del'>-    return fread(ptr, 1, n, f);</div><div class='del'>-#else</div><div class='del'>-    int c;</div><div class='del'>-</div><div class='del'>-    for (n = 0; n &lt; len &amp;&amp; READ_DATA_PENDING(f) &amp;&amp; (c = getc(f)) != EOF; ++n) {</div><div class='del'>-	*ptr++ = c;</div><div class='del'>-    }</div><div class='del'>-    return n;</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static long</div><div class='del'>-io_fread(ptr, len, fptr)</div><div class='del'>-    char *ptr;</div><div class='del'>-    long len;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    long n = len;</div><div class='del'>-    int c;</div><div class='del'>-    int saved_errno;</div><div class='del'>-</div><div class='del'>-    while (n &gt; 0) {</div><div class='del'>-        c = read_buffered_data(ptr, n, fptr-&gt;f);</div><div class='del'>-        if (c &lt; 0) goto eof;</div><div class='del'>-        if (c &gt; 0) {</div><div class='del'>-            ptr += c;</div><div class='del'>-            if ((n -= c) &lt;= 0) break;</div><div class='del'>-        }</div><div class='del'>-        rb_thread_wait_fd(fileno(fptr-&gt;f));</div><div class='del'>-        rb_io_check_closed(fptr);</div><div class='del'>-	clearerr(fptr-&gt;f);</div><div class='del'>-	TRAP_BEG;</div><div class='del'>-	c = getc(fptr-&gt;f);</div><div class='del'>-	TRAP_END;</div><div class='del'>-	if (c == EOF) {</div><div class='del'>-	  eof:</div><div class='del'>-	    if (ferror(fptr-&gt;f)) {</div><div class='del'>-		switch (errno) {</div><div class='del'>-		  case EINTR:</div><div class='del'>-#if defined(ERESTART)</div><div class='del'>-		  case ERESTART:</div><div class='del'>-#endif</div><div class='del'>-		    clearerr(fptr-&gt;f);</div><div class='del'>-		    continue;</div><div class='del'>-		  case EAGAIN:</div><div class='del'>-#if defined(EWOULDBLOCK) &amp;&amp; EWOULDBLOCK != EAGAIN</div><div class='del'>-		  case EWOULDBLOCK:</div><div class='del'>-#endif</div><div class='del'>-		    if (len &gt; n) {</div><div class='del'>-			clearerr(fptr-&gt;f);</div><div class='del'>-		    }</div><div class='del'>-                    saved_errno = errno;</div><div class='del'>-                    rb_warning("nonblocking IO#read is obsolete; use IO#readpartial or IO#sysread");</div><div class='del'>-                    errno = saved_errno;</div><div class='del'>-		}</div><div class='del'>-		if (len == n) return 0;</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	*ptr++ = c;</div><div class='del'>-	n--;</div><div class='del'>-    }</div><div class='del'>-    return len - n;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-long</div><div class='del'>-rb_io_fread(ptr, len, f)</div><div class='del'>-    char *ptr;</div><div class='del'>-    long len;</div><div class='del'>-    FILE *f;</div><div class='del'>-{</div><div class='del'>-    rb_io_t of;</div><div class='del'>-</div><div class='del'>-    of.f = f;</div><div class='del'>-    of.f2 = NULL;</div><div class='del'>-    return io_fread(ptr, len, &amp;of);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define SMALLBUF 100</div><div class='del'>-</div><div class='del'>-static long</div><div class='del'>-remain_size(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    struct stat st;</div><div class='del'>-    off_t siz = BUFSIZ;</div><div class='del'>-    off_t pos;</div><div class='del'>-</div><div class='del'>-    if (feof(fptr-&gt;f)) return 0;</div><div class='del'>-    if (fstat(fileno(fptr-&gt;f), &amp;st) == 0  &amp;&amp; S_ISREG(st.st_mode)</div><div class='del'>-#ifdef __BEOS__</div><div class='del'>-	&amp;&amp; (st.st_dev &gt; 3)</div><div class='del'>-#endif</div><div class='del'>-	)</div><div class='del'>-    {</div><div class='del'>-	pos = io_tell(fptr);</div><div class='del'>-	if (st.st_size &gt;= pos &amp;&amp; pos &gt;= 0) {</div><div class='del'>-	    siz = st.st_size - pos + 1;</div><div class='del'>-	    if (siz &gt; LONG_MAX) {</div><div class='del'>-		rb_raise(rb_eIOError, "file too big for single read");</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return (long)siz;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-read_all(fptr, siz, str)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    long siz;</div><div class='del'>-    VALUE str;</div><div class='add'>+read_all(port)</div><div class='add'>+    VALUE port;</div><div class='ctx'> {</div><div class='del'>-    long bytes = 0;</div><div class='del'>-    long n;</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    VALUE str;</div><div class='add'>+    char buf[BUFSIZ];</div><div class='add'>+    int n;</div><div class='ctx'> </div><div class='del'>-    if (siz == 0) siz = BUFSIZ;</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-	str = rb_str_new(0, siz);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_str_resize(str, siz);</div><div class='add'>+    GetOpenFile(port, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='add'>+	Fail("not opend for reading");</div><div class='ctx'>     }</div><div class='add'>+    if (fptr-&gt;f == NULL) Fail("closed stream");</div><div class='add'>+</div><div class='add'>+    str = str_new(0, 0);</div><div class='ctx'>     for (;;) {</div><div class='del'>-	rb_str_locktmp(str);</div><div class='del'>-	READ_CHECK(fptr-&gt;f);</div><div class='del'>-	n = io_fread(RSTRING(str)-&gt;ptr+bytes, siz-bytes, fptr);</div><div class='del'>-	rb_str_unlocktmp(str);</div><div class='del'>-	if (n == 0 &amp;&amp; bytes == 0) {</div><div class='del'>-	    if (!fptr-&gt;f) break;</div><div class='add'>+	n = fread(buf, 1, BUFSIZ, fptr-&gt;f);</div><div class='add'>+	if (n == 0) {</div><div class='ctx'> 	    if (feof(fptr-&gt;f)) break;</div><div class='del'>-	    if (!ferror(fptr-&gt;f)) break;</div><div class='del'>-	    rb_sys_fail(fptr-&gt;path);</div><div class='add'>+	    rb_sys_fail(Qnil);</div><div class='ctx'> 	}</div><div class='del'>-	bytes += n;</div><div class='del'>-	if (bytes &lt; siz) break;</div><div class='del'>-	siz += BUFSIZ;</div><div class='del'>-	rb_str_resize(str, siz);</div><div class='add'>+	str_cat(str, buf, n);</div><div class='ctx'>     }</div><div class='del'>-    if (bytes != siz) rb_str_resize(str, bytes);</div><div class='del'>-    OBJ_TAINT(str);</div><div class='del'>-</div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void rb_io_set_nonblock(rb_io_t *fptr)</div><div class='del'>-{</div><div class='del'>-    int flags;</div><div class='del'>-#ifdef F_GETFL</div><div class='del'>-    flags = fcntl(fileno(fptr-&gt;f), F_GETFL);</div><div class='del'>-    if (flags == -1) {</div><div class='del'>-        rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    flags = 0;</div><div class='del'>-#endif</div><div class='del'>-    if ((flags &amp; O_NONBLOCK) == 0) {</div><div class='del'>-        flags |= O_NONBLOCK;</div><div class='del'>-        if (fcntl(fileno(fptr-&gt;f), F_SETFL, flags) == -1) {</div><div class='del'>-            rb_sys_fail(fptr-&gt;path);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    if (fptr-&gt;f2) {</div><div class='del'>-#ifdef F_GETFL</div><div class='del'>-        flags = fcntl(fileno(fptr-&gt;f2), F_GETFL);</div><div class='del'>-        if (flags == -1) {</div><div class='del'>-            rb_sys_fail(fptr-&gt;path);</div><div class='del'>-        }</div><div class='del'>-#else</div><div class='del'>-        flags = 0;</div><div class='del'>-#endif</div><div class='del'>-        if ((flags &amp; O_NONBLOCK) == 0) {</div><div class='del'>-            flags |= O_NONBLOCK;</div><div class='del'>-            if (fcntl(fileno(fptr-&gt;f2), F_SETFL, flags) == -1) {</div><div class='del'>-                rb_sys_fail(fptr-&gt;path);</div><div class='del'>-            }</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'>-io_getpartial(int argc, VALUE *argv, VALUE io, int nonblock)</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    VALUE length, str;</div><div class='del'>-    long n, len;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;length, &amp;str);</div><div class='del'>-</div><div class='del'>-    if ((len = NUM2LONG(length)) &lt; 0) {</div><div class='del'>-        rb_raise(rb_eArgError, "negative length %ld given", len);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-        str = rb_str_new(0, len);</div><div class='del'>-    }</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, len);</div><div class='del'>-    }</div><div class='del'>-    OBJ_TAINT(str);</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='del'>-</div><div class='del'>-    if (len == 0)</div><div class='del'>-        return str;</div><div class='del'>-</div><div class='del'>-    if (!nonblock) {</div><div class='del'>-        READ_CHECK(fptr-&gt;f);</div><div class='del'>-    }</div><div class='del'>-    if (RSTRING(str)-&gt;len != len) {</div><div class='del'>-      modified:</div><div class='del'>-        rb_raise(rb_eRuntimeError, "buffer string modified");</div><div class='del'>-    }</div><div class='del'>-    n = read_buffered_data(RSTRING(str)-&gt;ptr, len, fptr-&gt;f);</div><div class='del'>-    if (n &lt;= 0) {</div><div class='del'>-      again:</div><div class='del'>-        if (RSTRING(str)-&gt;len != len) goto modified;</div><div class='del'>-        if (nonblock) {</div><div class='del'>-            rb_io_set_nonblock(fptr);</div><div class='del'>-            n = read(fileno(fptr-&gt;f), RSTRING(str)-&gt;ptr, len);</div><div class='del'>-        }</div><div class='del'>-        else {</div><div class='del'>-            TRAP_BEG;</div><div class='del'>-            n = read(fileno(fptr-&gt;f), RSTRING(str)-&gt;ptr, len);</div><div class='del'>-            TRAP_END;</div><div class='del'>-        }</div><div class='del'>-        if (n &lt; 0) {</div><div class='del'>-            if (!nonblock &amp;&amp; rb_io_wait_readable(fileno(fptr-&gt;f)))</div><div class='del'>-                goto again;</div><div class='del'>-            rb_sys_fail(fptr-&gt;path);</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-    rb_str_resize(str, n);</div><div class='del'>-</div><div class='del'>-    if (n == 0)</div><div class='del'>-        return Qnil;</div><div class='del'>-    else</div><div class='del'>-        return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.readpartial(maxlen)              =&gt; string</div><div class='del'>- *     ios.readpartial(maxlen, outbuf)      =&gt; outbuf</div><div class='del'>- *</div><div class='del'>- *  Reads at most &lt;i&gt;maxlen&lt;/i&gt; bytes from the I/O stream.</div><div class='del'>- *  It blocks only if &lt;em&gt;ios&lt;/em&gt; has no data immediately available.</div><div class='del'>- *  It doesn't block if some data available.</div><div class='del'>- *  If the optional &lt;i&gt;outbuf&lt;/i&gt; argument is present,</div><div class='del'>- *  it must reference a String, which will receive the data.</div><div class='del'>- *  It raises &lt;code&gt;EOFError&lt;/code&gt; on end of file.</div><div class='del'>- *</div><div class='del'>- *  readpartial is designed for streams such as pipe, socket, tty, etc.</div><div class='del'>- *  It blocks only when no data immediately available.</div><div class='del'>- *  This means that it blocks only when following all conditions hold.</div><div class='del'>- *  * the buffer in the IO object is empty.</div><div class='del'>- *  * the content of the stream is empty.</div><div class='del'>- *  * the stream is not reached to EOF.</div><div class='del'>- *</div><div class='del'>- *  When readpartial blocks, it waits data or EOF on the stream.</div><div class='del'>- *  If some data is reached, readpartial returns with the data.</div><div class='del'>- *  If EOF is reached, readpartial raises EOFError.</div><div class='del'>- *</div><div class='del'>- *  When readpartial doesn't blocks, it returns or raises immediately.</div><div class='del'>- *  If the buffer is not empty, it returns the data in the buffer.</div><div class='del'>- *  Otherwise if the stream has some content,</div><div class='del'>- *  it returns the data in the stream. </div><div class='del'>- *  Otherwise if the stream is reached to EOF, it raises EOFError.</div><div class='del'>- *</div><div class='del'>- *     r, w = IO.pipe           #               buffer          pipe content</div><div class='del'>- *     w &lt;&lt; "abc"               #               ""              "abc".</div><div class='del'>- *     r.readpartial(4096)      #=&gt; "abc"       ""              ""</div><div class='del'>- *     r.readpartial(4096)      # blocks because buffer and pipe is empty.</div><div class='del'>- *</div><div class='del'>- *     r, w = IO.pipe           #               buffer          pipe content</div><div class='del'>- *     w &lt;&lt; "abc"               #               ""              "abc"</div><div class='del'>- *     w.close                  #               ""              "abc" EOF</div><div class='del'>- *     r.readpartial(4096)      #=&gt; "abc"       ""              EOF</div><div class='del'>- *     r.readpartial(4096)      # raises EOFError</div><div class='del'>- *</div><div class='del'>- *     r, w = IO.pipe           #               buffer          pipe content</div><div class='del'>- *     w &lt;&lt; "abc\ndef\n"        #               ""              "abc\ndef\n"</div><div class='del'>- *     r.gets                   #=&gt; "abc\n"     "def\n"         ""</div><div class='del'>- *     w &lt;&lt; "ghi\n"             #               "def\n"         "ghi\n"</div><div class='del'>- *     r.readpartial(4096)      #=&gt; "def\n"     ""              "ghi\n"</div><div class='del'>- *     r.readpartial(4096)      #=&gt; "ghi\n"     ""              ""</div><div class='del'>- *</div><div class='del'>- *  Note that readpartial behaves similar to sysread.</div><div class='del'>- *  The differences are:</div><div class='del'>- *  * If the buffer is not empty, read from the buffer instead of "sysread for buffered IO (IOError)".</div><div class='del'>- *  * It doesn't cause Errno::EAGAIN and Errno::EINTR.  When readpartial meets EAGAIN and EINTR by read system call, readpartial retry the system call.</div><div class='del'>- *</div><div class='del'>- *  The later means that readpartial is nonblocking-flag insensitive.</div><div class='del'>- *  It blocks on the situation IO#sysread causes Errno::EAGAIN as if the fd is blocking mode.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-io_readpartial(int argc, VALUE *argv, VALUE io)</div><div class='del'>-{</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    ret = io_getpartial(argc, argv, io, 0);</div><div class='del'>-    if (NIL_P(ret))</div><div class='del'>-        rb_eof_error();</div><div class='del'>-    else</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.read_nonblock(maxlen)              =&gt; string</div><div class='del'>- *     ios.read_nonblock(maxlen, outbuf)      =&gt; outbuf</div><div class='del'>- *</div><div class='del'>- *  Reads at most &lt;i&gt;maxlen&lt;/i&gt; bytes from &lt;em&gt;ios&lt;/em&gt; using</div><div class='del'>- *  read(2) system call after O_NONBLOCK is set for</div><div class='del'>- *  the underlying file descriptor.</div><div class='del'>- *</div><div class='del'>- *  If the optional &lt;i&gt;outbuf&lt;/i&gt; argument is present,</div><div class='del'>- *  it must reference a String, which will receive the data.</div><div class='del'>- *</div><div class='del'>- *  read_nonblock just calls read(2).</div><div class='del'>- *  It causes all errors read(2) causes: EAGAIN, EINTR, etc.</div><div class='del'>- *  The caller should care such errors.</div><div class='del'>- *</div><div class='del'>- *  read_nonblock causes EOFError on EOF.</div><div class='del'>- *</div><div class='del'>- *  If the read buffer is not empty,</div><div class='del'>- *  read_nonblock reads from the buffer like readpartial.</div><div class='del'>- *  In this case, read(2) is not called.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-io_read_nonblock(int argc, VALUE *argv, VALUE io)</div><div class='del'>-{</div><div class='del'>-    VALUE ret;</div><div class='del'>-</div><div class='del'>-    ret = io_getpartial(argc, argv, io, 1);</div><div class='del'>-    if (NIL_P(ret))</div><div class='del'>-        rb_eof_error();</div><div class='del'>-    else</div><div class='del'>-        return ret;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.write_nonblock(string)   =&gt; integer</div><div class='del'>- *</div><div class='del'>- *  Writes the given string to &lt;em&gt;ios&lt;/em&gt; using</div><div class='del'>- *  write(2) system call after O_NONBLOCK is set for</div><div class='del'>- *  the underlying file descriptor.</div><div class='del'>- *</div><div class='del'>- *  write_nonblock just calls write(2).</div><div class='del'>- *  It causes all errors write(2) causes: EAGAIN, EINTR, etc.</div><div class='del'>- *  The result may also be smaller than string.length (partial write).</div><div class='del'>- *  The caller should care such errors and partial write.</div><div class='del'>- *</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_write_nonblock(VALUE io, VALUE str)</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    FILE *f;</div><div class='del'>-    long n;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (TYPE(str) != T_STRING)</div><div class='del'>-	str = rb_obj_as_string(str);</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_writable(fptr);</div><div class='del'>-</div><div class='del'>-    f = GetWriteFile(fptr);</div><div class='del'>-</div><div class='del'>-    rb_io_set_nonblock(fptr);</div><div class='del'>-    n = write(fileno(f), RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-</div><div class='del'>-    if (n == -1) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-</div><div class='del'>-    return LONG2FIX(n);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.read([length [, buffer]])    =&gt; string, buffer, or nil</div><div class='del'>- *</div><div class='del'>- *  Reads at most &lt;i&gt;length&lt;/i&gt; bytes from the I/O stream, or to the</div><div class='del'>- *  end of file if &lt;i&gt;length&lt;/i&gt; is omitted or is &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *  &lt;i&gt;length&lt;/i&gt; must be a non-negative integer or nil.</div><div class='del'>- *  If the optional &lt;i&gt;buffer&lt;/i&gt; argument is present, it must reference</div><div class='del'>- *  a String, which will receive the data.</div><div class='del'>- *</div><div class='del'>- *  At end of file, it returns &lt;code&gt;nil&lt;/code&gt; or &lt;code&gt;""&lt;/code&gt;</div><div class='del'>- *  depend on &lt;i&gt;length&lt;/i&gt;.</div><div class='del'>- *  &lt;code&gt;&lt;i&gt;ios&lt;/i&gt;.read()&lt;/code&gt; and</div><div class='del'>- *  &lt;code&gt;&lt;i&gt;ios&lt;/i&gt;.read(nil)&lt;/code&gt; returns &lt;code&gt;""&lt;/code&gt;.</div><div class='del'>- *  &lt;code&gt;&lt;i&gt;ios&lt;/i&gt;.read(&lt;i&gt;positive-integer&lt;/i&gt;)&lt;/code&gt; returns nil.</div><div class='del'>- *</div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.read(16)   #=&gt; "This is line one"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-io_read(argc, argv, io)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_read(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    long n, len;</div><div class='del'>-    VALUE length, str;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;length, &amp;str);</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    int n, lgt;</div><div class='add'>+    VALUE len, str;</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(length)) {</div><div class='del'>-	if (!NIL_P(str)) StringValue(str);</div><div class='del'>-	GetOpenFile(io, fptr);</div><div class='del'>-	rb_io_check_readable(fptr);	</div><div class='del'>-	return read_all(fptr, remain_size(fptr), str);</div><div class='del'>-    }</div><div class='del'>-    len = NUM2LONG(length);</div><div class='del'>-    if (len &lt; 0) {</div><div class='del'>-	rb_raise(rb_eArgError, "negative length %ld given", len);</div><div class='add'>+    if (rb_scan_args(args, "01", &amp;len) == 0) {</div><div class='add'>+	return read_all(obj);</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-	str = rb_tainted_str_new(0, len);</div><div class='del'>-    }</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,len);</div><div class='add'>+    lgt = NUM2INT(len);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='add'>+	Fail("not opend for reading");</div><div class='ctx'>     }</div><div class='add'>+    if (fptr-&gt;f == NULL) Fail("closed stream");</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='del'>-    if (feof(fptr-&gt;f)) return Qnil;</div><div class='del'>-    if (len == 0) return str;</div><div class='add'>+    str = str_new(0, lgt);</div><div class='ctx'> </div><div class='del'>-    rb_str_locktmp(str);</div><div class='del'>-    READ_CHECK(fptr-&gt;f);</div><div class='del'>-    if (RSTRING(str)-&gt;len != len) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "buffer string modified");</div><div class='del'>-    }</div><div class='del'>-    n = io_fread(RSTRING(str)-&gt;ptr, len, fptr);</div><div class='del'>-    rb_str_unlocktmp(str);</div><div class='add'>+    n = fread(RSTRING(str)-&gt;ptr, 1, RSTRING(str)-&gt;len, fptr-&gt;f);</div><div class='ctx'>     if (n == 0) {</div><div class='del'>-	if (!fptr-&gt;f) return Qnil;</div><div class='del'>-	if (feof(fptr-&gt;f)) {</div><div class='del'>-	    rb_str_resize(str, 0);</div><div class='del'>-	    return Qnil;</div><div class='del'>-	}</div><div class='del'>-	if (len &gt; 0) rb_sys_fail(fptr-&gt;path);</div><div class='add'>+	if (feof(fptr-&gt;f)) return Qnil;</div><div class='add'>+	rb_sys_fail(Qnil);</div><div class='ctx'>     }</div><div class='del'>-    rb_str_resize(str, n);</div><div class='add'>+</div><div class='ctx'>     RSTRING(str)-&gt;len = n;</div><div class='ctx'>     RSTRING(str)-&gt;ptr[n] = '\0';</div><div class='del'>-    OBJ_TAINT(str);</div><div class='ctx'> </div><div class='ctx'>     return str;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-appendline(fptr, delim, strp)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int delim;</div><div class='del'>-    VALUE *strp;</div><div class='add'>+static void</div><div class='add'>+io_gets(str)</div><div class='add'>+    VALUE str;</div><div class='ctx'> {</div><div class='del'>-    FILE *f = fptr-&gt;f;</div><div class='del'>-    VALUE str = *strp;</div><div class='del'>-    int c = EOF;</div><div class='del'>-#ifndef READ_DATA_PENDING_PTR</div><div class='del'>-    char buf[8192];</div><div class='del'>-    char *bp = buf, *bpe = buf + sizeof buf - 3;</div><div class='del'>-    int update = Qfalse;</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    do {</div><div class='del'>-#ifdef READ_DATA_PENDING_PTR</div><div class='del'>-	long pending = READ_DATA_PENDING_COUNT(f);</div><div class='del'>-	if (pending &gt; 0) {</div><div class='del'>-	    const char *p = READ_DATA_PENDING_PTR(f);</div><div class='del'>-	    const char *e = memchr(p, delim, pending);</div><div class='del'>-	    long last = 0, len = (c != EOF);</div><div class='del'>-	    if (e) pending = e - p + 1;</div><div class='del'>-	    len += pending;</div><div class='del'>-	    if (!NIL_P(str)) {</div><div class='del'>-		last = RSTRING(str)-&gt;len;</div><div class='del'>-		rb_str_resize(str, last + len);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		*strp = str = rb_str_buf_new(len);</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'>-	    if (c != EOF) {</div><div class='del'>-		RSTRING(str)-&gt;ptr[last++] = c;</div><div class='del'>-	    }</div><div class='del'>-	    fread(RSTRING(str)-&gt;ptr + last, 1, pending, f); /* must not fail */</div><div class='del'>-	    if (e) return delim;</div><div class='del'>-	}</div><div class='del'>-	else if (c != EOF) {</div><div class='del'>-	    if (!NIL_P(str)) {</div><div class='del'>-		char ch = c;</div><div class='del'>-		rb_str_buf_cat(str, &amp;ch, 1);</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		*strp = str = rb_str_buf_new(1);</div><div class='del'>-		RSTRING(str)-&gt;ptr[RSTRING(str)-&gt;len++] = c;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	rb_thread_wait_fd(fileno(f));</div><div class='del'>-	rb_io_check_closed(fptr);</div><div class='del'>-#else</div><div class='del'>-	READ_CHECK(f);</div><div class='del'>-#endif</div><div class='del'>-	clearerr(f);</div><div class='del'>-	TRAP_BEG;</div><div class='del'>-	c = getc(f);</div><div class='del'>-	TRAP_END;</div><div class='del'>-	if (c == EOF) {</div><div class='del'>-	    if (ferror(f)) {</div><div class='del'>-		clearerr(f);</div><div class='del'>-		if (!rb_io_wait_readable(fileno(f)))</div><div class='del'>-		    rb_sys_fail(fptr-&gt;path);</div><div class='del'>-		continue;</div><div class='del'>-	    }</div><div class='del'>-#ifdef READ_DATA_PENDING_PTR</div><div class='del'>-	    return c;</div><div class='del'>-#endif</div><div class='del'>-	}</div><div class='del'>-#ifndef READ_DATA_PENDING_PTR</div><div class='del'>-	if (c == EOF || (*bp++ = c) == delim || bp == bpe) {</div><div class='del'>-	    int cnt = bp - buf;</div><div class='del'>-</div><div class='del'>-	    if (cnt &gt; 0) {</div><div class='del'>-		if (!NIL_P(str))</div><div class='del'>-		    rb_str_cat(str, buf, cnt);</div><div class='del'>-		else</div><div class='del'>-		    *strp = str = rb_str_new(buf, cnt);</div><div class='del'>-	    }</div><div class='del'>-	    if (c == EOF) {</div><div class='del'>-		if (update)</div><div class='del'>-		    return (int)RSTRING(str)-&gt;ptr[RSTRING(str)-&gt;len-1];</div><div class='del'>-		return c;</div><div class='del'>-	    }</div><div class='del'>-	    bp = buf;</div><div class='del'>-	}</div><div class='del'>-	update = Qtrue;</div><div class='del'>-#endif</div><div class='del'>-    } while (c != delim);</div><div class='del'>-</div><div class='del'>-#ifdef READ_DATA_PENDING_PTR</div><div class='del'>-    {</div><div class='del'>-	char ch = c;</div><div class='del'>-	if (!NIL_P(str)) {</div><div class='del'>-	    rb_str_cat(str, &amp;ch, 1);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    *strp = str = rb_str_new(&amp;ch, 1);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    return c;</div><div class='add'>+    rb_break();</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static inline int</div><div class='del'>-swallow(fptr, term)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int term;</div><div class='del'>-{</div><div class='del'>-    FILE *f = fptr-&gt;f;</div><div class='del'>-    int c;</div><div class='add'>+void rb_each();</div><div class='ctx'> </div><div class='del'>-    do {</div><div class='del'>-#ifdef READ_DATA_PENDING_PTR</div><div class='del'>-	long cnt;</div><div class='del'>-	while ((cnt = READ_DATA_PENDING_COUNT(f)) &gt; 0) {</div><div class='del'>-	    char buf[1024];</div><div class='del'>-	    const char *p = READ_DATA_PENDING_PTR(f);</div><div class='del'>-	    int i;</div><div class='del'>-	    if (cnt &gt; sizeof buf) cnt = sizeof buf;</div><div class='del'>-	    if (*p != term) return Qtrue;</div><div class='del'>-	    i = cnt;</div><div class='del'>-	    while (--i &amp;&amp; *++p == term);</div><div class='del'>-	    if (!fread(buf, 1, cnt - i, f)) /* must not fail */</div><div class='del'>-		rb_sys_fail(fptr-&gt;path);</div><div class='del'>-	}</div><div class='del'>-	rb_thread_wait_fd(fileno(f));</div><div class='del'>-	rb_io_check_closed(fptr);</div><div class='del'>-#else</div><div class='del'>-	READ_CHECK(f);</div><div class='del'>-#endif</div><div class='del'>-	clearerr(f);</div><div class='del'>-	TRAP_BEG;</div><div class='del'>-	c = getc(f);</div><div class='del'>-	TRAP_END;</div><div class='del'>-	if (c != term) {</div><div class='del'>-	    ungetc(c, f);</div><div class='del'>-	    return Qtrue;</div><div class='del'>-	}</div><div class='del'>-    } while (c != EOF);</div><div class='del'>-    return Qfalse;</div><div class='del'>-}</div><div class='add'>+VALUE rb_lastline;</div><div class='add'>+static VALUE lineno;</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_getline_fast(fptr, delim)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    unsigned char delim;</div><div class='del'>-{</div><div class='del'>-    VALUE str = Qnil;</div><div class='del'>-    int c;</div><div class='del'>-</div><div class='del'>-    while ((c = appendline(fptr, delim, &amp;str)) != EOF &amp;&amp; c != delim);</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(str)) {</div><div class='del'>-	fptr-&gt;lineno++;</div><div class='del'>-	lineno = INT2FIX(fptr-&gt;lineno);</div><div class='del'>-	OBJ_TAINT(str);</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 int</div><div class='del'>-rscheck(rsptr, rslen, rs)</div><div class='del'>-    const char *rsptr;</div><div class='del'>-    long rslen;</div><div class='del'>-    VALUE rs;</div><div class='add'>+Fio_gets(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    if (RSTRING(rs)-&gt;ptr != rsptr &amp;&amp; RSTRING(rs)-&gt;len != rslen)</div><div class='del'>-	rb_raise(rb_eRuntimeError, "rs modified");</div><div class='del'>-    return 1;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE rb_io_getline(VALUE rs, VALUE io);</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    FILE *f;</div><div class='add'>+    struct RString *str;</div><div class='add'>+    int c, newline;</div><div class='add'>+    int rslen;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_io_getline(rs, io)</div><div class='del'>-    VALUE rs, io;</div><div class='del'>-{</div><div class='del'>-    VALUE str = Qnil;</div><div class='del'>-    rb_io_t *fptr;</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 (NIL_P(rs)) {</div><div class='del'>-	str = read_all(fptr, 0, Qnil);</div><div class='del'>-	if (RSTRING(str)-&gt;len == 0) return Qnil;</div><div class='del'>-    }</div><div class='del'>-    else if (rs == rb_default_rs) {</div><div class='del'>-	return rb_io_getline_fast(fptr, '\n');</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='add'>+	Fail("not opend for reading");</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	int c, newline;</div><div class='del'>-	const char *rsptr;</div><div class='del'>-	long rslen;</div><div class='del'>-	int rspara = 0;</div><div class='add'>+    f = fptr-&gt;f;</div><div class='add'>+    if (f == NULL) Fail("closed stream");</div><div class='ctx'> </div><div class='del'>-	rslen = RSTRING(rs)-&gt;len;</div><div class='add'>+    if (RS) {</div><div class='add'>+	rslen = RSTRING(RS)-&gt;len;</div><div class='ctx'> 	if (rslen == 0) {</div><div class='del'>-	    rsptr = "\n\n";</div><div class='del'>-	    rslen = 2;</div><div class='del'>-	    rspara = 1;</div><div class='del'>-	    swallow(fptr, '\n');</div><div class='del'>-	}</div><div class='del'>-	else if (rslen == 1) {</div><div class='del'>-	    return rb_io_getline_fast(fptr, (unsigned char)RSTRING(rs)-&gt;ptr[0]);</div><div class='add'>+	    newline = '\n';</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='del'>-	    rsptr = RSTRING(rs)-&gt;ptr;</div><div class='add'>+	    newline = RSTRING(RS)-&gt;ptr[rslen-1];</div><div class='ctx'> 	}</div><div class='del'>-	newline = rsptr[rslen - 1];</div><div class='add'>+    }</div><div class='add'>+    else {</div><div class='add'>+	newline = 0777;	/* non matching char */</div><div class='add'>+	rslen = 1;</div><div class='add'>+    }</div><div class='ctx'> </div><div class='del'>-	while ((c = appendline(fptr, newline, &amp;str)) != EOF &amp;&amp;</div><div class='del'>-	       (c != newline || RSTRING(str)-&gt;len &lt; rslen ||</div><div class='del'>-		((rspara || rscheck(rsptr,rslen,rs)) &amp;&amp; 0) ||</div><div class='del'>-		memcmp(RSTRING(str)-&gt;ptr+RSTRING(str)-&gt;len-rslen,rsptr,rslen)));</div><div class='add'>+    if (rslen == 0 &amp;&amp; c == '\n') {</div><div class='add'>+	do {</div><div class='add'>+	    c = getc(f);</div><div class='add'>+	    if (c != '\n') {</div><div class='add'>+		ungetc(c,f);</div><div class='add'>+		break;</div><div class='add'>+	    }</div><div class='add'>+	} while (c != EOF);</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+    {</div><div class='add'>+	char buf[8192];</div><div class='add'>+	char *bp, *bpe = buf + sizeof buf - 3;</div><div class='add'>+	char *ptr;</div><div class='add'>+	int append = 0;</div><div class='ctx'> </div><div class='del'>-	if (rspara) {</div><div class='del'>-	    if (c != EOF) {</div><div class='del'>-		swallow(fptr, '\n');</div><div class='add'>+      again:</div><div class='add'>+	bp = buf;</div><div class='add'>+	while ((c = getc(f)) != EOF &amp;&amp; (*bp++ = c) != newline &amp;&amp; bp &lt; bpe)</div><div class='add'>+	    ;</div><div class='add'>+</div><div class='add'>+	if (c == EOF &amp;&amp; !append &amp;&amp; bp == buf) {</div><div class='add'>+	    str = Qnil;</div><div class='add'>+	    goto return_gets;</div><div class='add'>+	}</div><div class='add'>+</div><div class='add'>+	if (append)</div><div class='add'>+	    str_cat(str, buf, bp - buf);</div><div class='add'>+	else</div><div class='add'>+	    str = (struct RString*)str_new(buf, bp - buf);</div><div class='add'>+</div><div class='add'>+	if (c != EOF</div><div class='add'>+	    &amp;&amp;</div><div class='add'>+	    (c != newline</div><div class='add'>+	     ||</div><div class='add'>+	     (rslen &gt; 1</div><div class='add'>+	      &amp;&amp;</div><div class='add'>+	      (str-&gt;len &lt; rslen</div><div class='add'>+	       ||</div><div class='add'>+	       memcmp(str-&gt;ptr+str-&gt;len-rslen, RSTRING(RS)-&gt;ptr, rslen)</div><div class='add'>+	       )</div><div class='add'>+	      )</div><div class='add'>+	     )</div><div class='add'>+	    ) {</div><div class='add'>+	    append = 1;</div><div class='add'>+	    goto again;</div><div class='add'>+	}</div><div class='add'>+    }</div><div class='add'>+</div><div class='add'>+  return_gets:</div><div class='add'>+    if (rslen == 0 &amp;&amp; c == '\n') {</div><div class='add'>+	while (c != EOF) {</div><div class='add'>+	    c = getc(f);</div><div class='add'>+	    if (c != '\n') {</div><div class='add'>+		ungetc(c, f);</div><div class='add'>+		break;</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    if (!NIL_P(str)) {</div><div class='add'>+    if (str) {</div><div class='ctx'> 	fptr-&gt;lineno++;</div><div class='ctx'> 	lineno = INT2FIX(fptr-&gt;lineno);</div><div class='del'>-	OBJ_TAINT(str);</div><div class='add'>+	return rb_lastline = (VALUE)str;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return str;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_gets(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='del'>-    return rb_io_getline_fast(fptr, '\n');</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.gets(sep_string=$/)   =&gt; string or nil</div><div class='del'>- *  </div><div class='del'>- *  Reads the next ``line'' from the I/O stream; lines are separated by</div><div class='del'>- *  &lt;i&gt;sep_string&lt;/i&gt;. A separator of &lt;code&gt;nil&lt;/code&gt; reads the entire</div><div class='del'>- *  contents, and a zero-length separator reads the input a paragraph at</div><div class='del'>- *  a time (two successive newlines in the input separate paragraphs).</div><div class='del'>- *  The stream must be opened for reading or an &lt;code&gt;IOError&lt;/code&gt;</div><div class='del'>- *  will be raised. The line read in will be returned and also assigned</div><div class='del'>- *  to &lt;code&gt;$_&lt;/code&gt;. Returns &lt;code&gt;nil&lt;/code&gt; if called at end of</div><div class='del'>- *  file.</div><div class='del'>- *     </div><div class='del'>- *     File.new("testfile").gets   #=&gt; "This is line one\n"</div><div class='del'>- *     $_                          #=&gt; "This is line one\n"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_gets_m(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'>-    VALUE rs, str;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	rs = rb_rs;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "1", &amp;rs);</div><div class='del'>-	if (!NIL_P(rs)) StringValue(rs);</div><div class='del'>-    }</div><div class='del'>-    str = rb_io_getline(rs, io);</div><div class='del'>-    rb_lastline_set(str);</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'>- *  call-seq:</div><div class='del'>- *     ios.lineno    =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Returns the current line number in &lt;em&gt;ios&lt;/em&gt;. The stream must be</div><div class='del'>- *  opened for reading. &lt;code&gt;lineno&lt;/code&gt; counts the number of times</div><div class='del'>- *  &lt;code&gt;gets&lt;/code&gt; is called, rather than the number of newlines</div><div class='del'>- *  encountered. The two values will differ if &lt;code&gt;gets&lt;/code&gt; is</div><div class='del'>- *  called with a separator other than newline. See also the</div><div class='del'>- *  &lt;code&gt;$.&lt;/code&gt; variable.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.lineno   #=&gt; 0</div><div class='del'>- *     f.gets     #=&gt; "This is line one\n"</div><div class='del'>- *     f.lineno   #=&gt; 1</div><div class='del'>- *     f.gets     #=&gt; "This is line two\n"</div><div class='del'>- *     f.lineno   #=&gt; 2</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_lineno(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='del'>-    return INT2NUM(fptr-&gt;lineno);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.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='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.gets                     #=&gt; "This is line one\n"</div><div class='del'>- *     $.                         #=&gt; 1</div><div class='del'>- *     f.lineno = 1000</div><div class='del'>- *     f.lineno                   #=&gt; 1000</div><div class='del'>- *     $. # lineno of last read   #=&gt; 1</div><div class='del'>- *     f.gets                     #=&gt; "This is line two\n"</div><div class='del'>- *     $. # lineno of last read   #=&gt; 1001</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_set_lineno(io, lineno)</div><div class='del'>-    VALUE io, lineno;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='del'>-    fptr-&gt;lineno = NUM2INT(lineno);</div><div class='del'>-    return lineno;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-lineno_setter(val, id, var)</div><div class='del'>-    VALUE val;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE *var;</div><div class='del'>-{</div><div class='del'>-    gets_lineno = NUM2INT(val);</div><div class='del'>-    *var = INT2FIX(gets_lineno);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_set_lineno(argf, val)</div><div class='del'>-    VALUE argf, val;</div><div class='del'>-{</div><div class='del'>-    gets_lineno = NUM2INT(val);</div><div class='del'>-    lineno = INT2FIX(gets_lineno);</div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-argf_lineno()</div><div class='del'>-{</div><div class='del'>-    return lineno;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.readline(sep_string=$/)   =&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Reads a line as with &lt;code&gt;IO#gets&lt;/code&gt;, but raises an</div><div class='del'>- *  &lt;code&gt;EOFError&lt;/code&gt; on end of file.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_readline(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'>-    VALUE line = rb_io_gets_m(argc, argv, io);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(line)) {</div><div class='del'>-	rb_eof_error();</div><div class='del'>-    }</div><div class='del'>-    return line;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.readlines(sep_string=$/)  =&gt;   array</div><div class='del'>- *  </div><div class='del'>- *  Reads all of the lines in &lt;em&gt;ios&lt;/em&gt;, and returns them in</div><div class='del'>- *  &lt;i&gt;anArray&lt;/i&gt;. Lines are separated by the optional</div><div class='del'>- *  &lt;i&gt;sep_string&lt;/i&gt;. If &lt;i&gt;sep_string&lt;/i&gt; is &lt;code&gt;nil&lt;/code&gt;, the</div><div class='del'>- *  rest of the stream is returned as a single record.</div><div class='del'>- *  The stream must be opened for reading or an</div><div class='del'>- *  &lt;code&gt;IOError&lt;/code&gt; will be raised.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.readlines[0]   #=&gt; "This is line one\n"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_readlines(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'>-    VALUE line, ary;</div><div class='del'>-    VALUE rs;</div><div class='del'>-</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	rs = rb_rs;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "1", &amp;rs);</div><div class='del'>-	if (!NIL_P(rs)) StringValue(rs);</div><div class='del'>-    }</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    while (!NIL_P(line = rb_io_getline(rs, io))) {</div><div class='del'>-	rb_ary_push(ary, line);</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'>- *  call-seq:</div><div class='del'>- *     ios.each(sep_string=$/)      {|line| block }  =&gt; ios</div><div class='del'>- *     ios.each_line(sep_string=$/) {|line| block }  =&gt; ios</div><div class='del'>- *  </div><div class='del'>- *  Executes the block for every line in &lt;em&gt;ios&lt;/em&gt;, where lines are</div><div class='del'>- *  separated by &lt;i&gt;sep_string&lt;/i&gt;. &lt;em&gt;ios&lt;/em&gt; must be opened for</div><div class='del'>- *  reading or an &lt;code&gt;IOError&lt;/code&gt; will be raised.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.each {|line| puts "#{f.lineno}: #{line}" }</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     1: This is line one</div><div class='del'>- *     2: This is line two</div><div class='del'>- *     3: This is line three</div><div class='del'>- *     4: And so on...</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_each_line(argc, argv, io)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_each(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE str;</div><div class='del'>-    VALUE rs;</div><div class='ctx'> </div><div class='del'>-    RETURN_ENUMERATOR(io, argc, argv);</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	rs = rb_rs;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	rb_scan_args(argc, argv, "1", &amp;rs);</div><div class='del'>-	if (!NIL_P(rs)) StringValue(rs);</div><div class='del'>-    }</div><div class='del'>-    while (!NIL_P(str = rb_io_getline(rs, io))) {</div><div class='add'>+    while (str = Fio_gets(obj)) {</div><div class='ctx'> 	rb_yield(str);</div><div class='ctx'>     }</div><div class='del'>-    return io;</div><div class='add'>+    return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.each_byte {|byte| block }  =&gt; ios</div><div class='del'>- *  </div><div class='del'>- *  Calls the given block once for each byte (0..255) in &lt;em&gt;ios&lt;/em&gt;,</div><div class='del'>- *  passing the byte as an argument. The stream must be opened for</div><div class='del'>- *  reading or an &lt;code&gt;IOError&lt;/code&gt; will be raised.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     checksum = 0</div><div class='del'>- *     f.each_byte {|x| checksum ^= x }   #=&gt; #&lt;File:testfile&gt;</div><div class='del'>- *     checksum                           #=&gt; 12</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_each_byte(io)</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_each_byte(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     FILE *f;</div><div class='ctx'>     int c;</div><div class='ctx'> </div><div class='del'>-    RETURN_ENUMERATOR(io, 0, 0);</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-</div><div class='del'>-    for (;;) {</div><div class='del'>-	rb_io_check_readable(fptr);</div><div class='del'>-	f = fptr-&gt;f;</div><div class='del'>-	READ_CHECK(f);</div><div class='del'>-	clearerr(f);</div><div class='del'>-	TRAP_BEG;</div><div class='del'>-	c = getc(f);</div><div class='del'>-	TRAP_END;</div><div class='del'>-	if (c == EOF) {</div><div class='del'>-	    if (ferror(f)) {</div><div class='del'>-		clearerr(f);</div><div class='del'>-		if (!rb_io_wait_readable(fileno(f)))</div><div class='del'>-		    rb_sys_fail(fptr-&gt;path);</div><div class='del'>-		continue;</div><div class='del'>-	    }</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-	rb_yield(INT2FIX(c &amp; 0xff));</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='add'>+	Fail("not opend for reading");</div><div class='ctx'>     }</div><div class='del'>-    if (ferror(f)) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE rb_io_getc _((VALUE));</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.each_char {|c| block }  =&gt; ios</div><div class='del'>- *</div><div class='del'>- *  Calls the given block once for each character in &lt;em&gt;ios&lt;/em&gt;,</div><div class='del'>- *  passing the character as an argument. The stream must be opened for</div><div class='del'>- *  reading or an &lt;code&gt;IOError&lt;/code&gt; will be raised.  Multibyte</div><div class='del'>- *  characters are dealt with according to $KCODE.</div><div class='del'>- *</div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.each_char {|c| print c, ' ' }   #=&gt; #&lt;File:testfile&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_each_char(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    VALUE ch;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(io, 0, 0);</div><div class='del'>-</div><div class='del'>-    while (!NIL_P(ch = rb_io_getc(io))) {</div><div class='del'>-	unsigned char c;</div><div class='del'>-	int n;</div><div class='del'>-	VALUE str;</div><div class='del'>-</div><div class='del'>-	c= FIX2INT(ch);</div><div class='del'>-	n = mbclen(c);</div><div class='del'>-	str = rb_tainted_str_new((const char *)&amp;c, 1);</div><div class='add'>+    f = fptr-&gt;f;</div><div class='add'>+    if (f == NULL) Fail("closed stream");</div><div class='ctx'> </div><div class='del'>-	while (--n &gt; 0) {</div><div class='del'>-	    if (NIL_P(ch = rb_io_getc(io))) {</div><div class='del'>-		rb_yield(str);</div><div class='del'>-		return io;</div><div class='del'>-	    }</div><div class='del'>-	    c = FIX2INT(ch);</div><div class='del'>-	    rb_str_cat(str, (const char *)&amp;c, 1);</div><div class='del'>-	}</div><div class='del'>-	rb_yield(str);</div><div class='add'>+    while ((c = getc(f)) != EOF) {</div><div class='add'>+	rb_yield(INT2FIX(c &amp; 0xff));</div><div class='ctx'>     }</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.lines(sep=$/)     =&gt; anEnumerator</div><div class='del'>- *     ios.lines(limit)      =&gt; anEnumerator</div><div class='del'>- *     ios.lines(sep, limit) =&gt; anEnumerator</div><div class='del'>- *</div><div class='del'>- *  Returns an enumerator that gives each line in &lt;em&gt;ios&lt;/em&gt;.</div><div class='del'>- *  The stream must be opened for reading or an &lt;code&gt;IOError&lt;/code&gt;</div><div class='del'>- *  will be raised.</div><div class='del'>- *</div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.lines.to_a  #=&gt; ["foo\n", "bar\n"]</div><div class='del'>- *     f.rewind</div><div class='del'>- *     f.lines.sort  #=&gt; ["bar\n", "foo\n"]</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_lines(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'>-    return rb_enumeratorize(io, ID2SYM(rb_intern("each_line")), argc, argv);</div><div class='add'>+    if (ferror(f) != 0) rb_sys_fail(Qnil);</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.bytes   =&gt; anEnumerator</div><div class='del'>- *</div><div class='del'>- *  Returns an enumerator that gives each byte (0..255) in &lt;em&gt;ios&lt;/em&gt;.</div><div class='del'>- *  The stream must be opened for reading or an &lt;code&gt;IOError&lt;/code&gt;</div><div class='del'>- *  will be raised.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.bytes.to_a  #=&gt; [104, 101, 108, 108, 111]</div><div class='del'>- *     f.rewind</div><div class='del'>- *     f.bytes.sort  #=&gt; [101, 104, 108, 108, 111]</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_bytes(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    return rb_enumeratorize(io, ID2SYM(rb_intern("each_byte")), 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.getc   =&gt; fixnum or nil</div><div class='del'>- *  </div><div class='del'>- *  Gets the next 8-bit byte (0..255) from &lt;em&gt;ios&lt;/em&gt;. Returns</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; if called at end of file.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.getc   #=&gt; 84</div><div class='del'>- *     f.getc   #=&gt; 104</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_getc(io)</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_getc(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     FILE *f;</div><div class='ctx'>     int c;</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='add'>+	Fail("not opend for reading");</div><div class='add'>+    }</div><div class='ctx'>     f = fptr-&gt;f;</div><div class='add'>+    if (f == NULL) Fail("closed stream");</div><div class='ctx'> </div><div class='del'>-  retry:</div><div class='del'>-    READ_CHECK(f);</div><div class='del'>-    clearerr(f);</div><div class='del'>-    TRAP_BEG;</div><div class='ctx'>     c = getc(f);</div><div class='del'>-    TRAP_END;</div><div class='del'>-</div><div class='ctx'>     if (c == EOF) {</div><div class='del'>-	if (ferror(f)) {</div><div class='del'>-	    clearerr(f);</div><div class='del'>-	    if (!rb_io_wait_readable(fileno(f)))</div><div class='del'>-		rb_sys_fail(fptr-&gt;path);</div><div class='del'>-	    goto retry;</div><div class='del'>-	}</div><div class='add'>+	if (ferror(f) != 0) rb_sys_fail(Qnil);</div><div class='ctx'> 	return Qnil;</div><div class='ctx'>     }</div><div class='ctx'>     return INT2FIX(c &amp; 0xff);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-rb_getc(f)</div><div class='del'>-    FILE *f;</div><div class='del'>-{</div><div class='del'>-    int c;</div><div class='del'>-</div><div class='del'>-    if (!READ_DATA_PENDING(f)) {</div><div class='del'>-	rb_thread_wait_fd(fileno(f));</div><div class='del'>-    }</div><div class='del'>-    clearerr(f);</div><div class='del'>-    TRAP_BEG;</div><div class='del'>-    c = getc(f);</div><div class='del'>-    TRAP_END;</div><div class='del'>-</div><div class='del'>-    return c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.readchar   =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Reads a character as with &lt;code&gt;IO#getc&lt;/code&gt;, but raises an</div><div class='del'>- *  &lt;code&gt;EOFError&lt;/code&gt; on end of file.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_readchar(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    VALUE c = rb_io_getc(io);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(c)) {</div><div class='del'>-	rb_eof_error();</div><div class='del'>-    }</div><div class='del'>-    return c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.ungetc(integer)   =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Pushes back one character (passed as a parameter) onto &lt;em&gt;ios&lt;/em&gt;,</div><div class='del'>- *  such that a subsequent buffered read will return it. Only one character</div><div class='del'>- *  may be pushed back before a subsequent read operation (that is,</div><div class='del'>- *  you will be able to read only the last of several characters that have been pushed</div><div class='del'>- *  back). Has no effect with unbuffered reads (such as &lt;code&gt;IO#sysread&lt;/code&gt;).</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")   #=&gt; #&lt;File:testfile&gt;</div><div class='del'>- *     c = f.getc                 #=&gt; 84</div><div class='del'>- *     f.ungetc(c)                #=&gt; nil</div><div class='del'>- *     f.getc                     #=&gt; 84</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_ungetc(io, c)</div><div class='del'>-    VALUE io, c;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int cc = NUM2INT(c);</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    if (!(fptr-&gt;mode &amp; FMODE_RBUF))</div><div class='del'>-	rb_raise(rb_eIOError, "unread stream");</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='del'>-</div><div class='del'>-    if (ungetc(cc, fptr-&gt;f) == EOF &amp;&amp; cc != EOF) {</div><div class='del'>-	rb_raise(rb_eIOError, "ungetc 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'>- *     ios.isatty   =&gt; true or false</div><div class='del'>- *     ios.tty?     =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;em&gt;ios&lt;/em&gt; is associated with a</div><div class='del'>- *  terminal device (tty), &lt;code&gt;false&lt;/code&gt; otherwise.</div><div class='del'>- *     </div><div class='del'>- *     File.new("testfile").isatty   #=&gt; false</div><div class='del'>- *     File.new("/dev/tty").isatty   #=&gt; true</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_isatty(io)</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_isatty(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (fptr-&gt;f == NULL) Fail("closed stream");</div><div class='ctx'>     if (isatty(fileno(fptr-&gt;f)) == 0)</div><div class='del'>-	return Qfalse;</div><div class='del'>-    return Qtrue;</div><div class='del'>-}</div><div class='add'>+	return FALSE;</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-fptr_finalize(fptr, noraise)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int noraise;</div><div class='del'>-{</div><div class='del'>-    int n1 = 0, n2 = 0, f1, f2 = -1;</div><div class='del'>-</div><div class='del'>-    errno = 0;</div><div class='del'>-    if (fptr-&gt;f2) {</div><div class='del'>-	f2 = fileno(fptr-&gt;f2);</div><div class='del'>-	while (n2 = 0, fflush(fptr-&gt;f2) &lt; 0) {</div><div class='del'>-	    n2 = errno;</div><div class='del'>-	    if (!rb_io_wait_writable(f2)) {</div><div class='del'>-		break;</div><div class='del'>-	    }</div><div class='del'>-	    if (!fptr-&gt;f2) break;</div><div class='del'>-	}</div><div class='del'>-	if (fclose(fptr-&gt;f2) &lt; 0 &amp;&amp; n2 == 0) {</div><div class='del'>-	    n2 = errno;</div><div class='del'>-	}</div><div class='del'>-	fptr-&gt;f2 = 0;</div><div class='del'>-    }</div><div class='del'>-    if (fptr-&gt;f) {</div><div class='del'>-	f1 = fileno(fptr-&gt;f);</div><div class='del'>-	if ((f2 == -1) &amp;&amp; (fptr-&gt;mode &amp; FMODE_WBUF)) {</div><div class='del'>-	    while (n1 = 0, fflush(fptr-&gt;f) &lt; 0) {</div><div class='del'>-		n1 = errno;</div><div class='del'>-		if (!rb_io_wait_writable(f1)) break;</div><div class='del'>-		if (!fptr-&gt;f) break;</div><div class='del'>-	    }</div><div class='del'>-	}</div><div class='del'>-	if (fclose(fptr-&gt;f) &lt; 0 &amp;&amp; n1 == 0) {</div><div class='del'>-	    n1 = errno;</div><div class='del'>-	}</div><div class='del'>-	fptr-&gt;f = 0;</div><div class='del'>-	if (n1 == EBADF &amp;&amp; f1 == f2) {</div><div class='del'>-	    n1 = 0;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!noraise &amp;&amp; (n1 || n2)) {</div><div class='del'>-	errno = (n1 ? n1 : n2);</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-rb_io_fptr_cleanup(fptr, noraise)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int noraise;</div><div class='del'>-{</div><div class='del'>-    if (fptr-&gt;finalize) {</div><div class='del'>-	(*fptr-&gt;finalize)(fptr, noraise);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	fptr_finalize(fptr, noraise);</div><div class='del'>-    }</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_io_fptr_finalize(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+static VALUE</div><div class='add'>+Fio_close(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    if (!fptr) return;</div><div class='del'>-    if (fptr-&gt;path) {</div><div class='del'>-	free(fptr-&gt;path);</div><div class='del'>-    }</div><div class='del'>-    if (!fptr-&gt;f &amp;&amp; !fptr-&gt;f2) return;</div><div class='del'>-    if (fileno(fptr-&gt;f) &lt; 3) return;</div><div class='del'>-</div><div class='del'>-    rb_io_fptr_cleanup(fptr, Qtrue);</div><div class='del'>-}</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_io_close(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int fd, fd2;</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='ctx'> </div><div class='del'>-    fptr = RFILE(io)-&gt;fptr;</div><div class='del'>-    if (!fptr) return Qnil;</div><div class='del'>-    if (fptr-&gt;f2) {</div><div class='del'>-	fd2 = fileno(fptr-&gt;f2);</div><div class='add'>+    if (fptr-&gt;f2 != NULL) {</div><div class='add'>+	fclose(fptr-&gt;f2);</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	if (!fptr-&gt;f) return Qnil;</div><div class='del'>-	fd2 = -1;</div><div class='add'>+    if (fptr-&gt;f != NULL) {</div><div class='add'>+	fclose(fptr-&gt;f);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    fd = fileno(fptr-&gt;f);</div><div class='del'>-    rb_io_fptr_cleanup(fptr, Qfalse);</div><div class='del'>-    rb_thread_fd_close(fd);</div><div class='del'>-    if (fd2 &gt;= 0) rb_thread_fd_close(fd2);</div><div class='del'>-</div><div class='add'>+    fptr-&gt;f = fptr-&gt;f2 = NULL;</div><div class='ctx'>     if (fptr-&gt;pid) {</div><div class='ctx'> 	rb_syswait(fptr-&gt;pid);</div><div class='ctx'> 	fptr-&gt;pid = 0;</div><div class='ctx'>     }</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'>- *     ios.close   =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Closes &lt;em&gt;ios&lt;/em&gt; and flushes any pending writes to the operating</div><div class='del'>- *  system. The stream is unavailable for any further data operations;</div><div class='del'>- *  an &lt;code&gt;IOError&lt;/code&gt; is raised if such an attempt is made. I/O</div><div class='del'>- *  streams are automatically closed when they are claimed by the</div><div class='del'>- *  garbage collector.</div><div class='del'>- *</div><div class='del'>- *  If &lt;em&gt;ios&lt;/em&gt; is opened by &lt;code&gt;IO.popen&lt;/code&gt;,</div><div class='del'>- *  &lt;code&gt;close&lt;/code&gt; sets &lt;code&gt;$?&lt;/code&gt;.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_close_m(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; !OBJ_TAINTED(io)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't close");</div><div class='del'>-    }</div><div class='del'>-    rb_io_check_closed(RFILE(io)-&gt;fptr);</div><div class='del'>-    rb_io_close(io);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-io_call_close(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    return rb_funcall(io, rb_intern("close"), 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-io_close(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    return rb_rescue(io_call_close, io, 0, 0);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.closed?    =&gt; true or false</div><div class='del'>- *  </div><div class='del'>- *  Returns &lt;code&gt;true&lt;/code&gt; if &lt;em&gt;ios&lt;/em&gt; is completely closed (for</div><div class='del'>- *  duplex streams, both reader and writer), &lt;code&gt;false&lt;/code&gt;</div><div class='del'>- *  otherwise.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.close         #=&gt; nil</div><div class='del'>- *     f.closed?       #=&gt; true</div><div class='del'>- *     f = IO.popen("/bin/sh","r+")</div><div class='del'>- *     f.close_write   #=&gt; nil</div><div class='del'>- *     f.closed?       #=&gt; false</div><div class='del'>- *     f.close_read    #=&gt; nil</div><div class='del'>- *     f.closed?       #=&gt; true</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_closed(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    fptr = RFILE(io)-&gt;fptr;</div><div class='del'>-    rb_io_check_initialized(fptr);</div><div class='del'>-    return (fptr-&gt;f || fptr-&gt;f2)?Qfalse:Qtrue;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.close_read    =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Closes the read end of a duplex I/O stream (i.e., one that contains</div><div class='del'>- *  both a read and a write stream, such as a pipe). Will raise an</div><div class='del'>- *  &lt;code&gt;IOError&lt;/code&gt; if the stream is not duplexed.</div><div class='del'>- *     </div><div class='del'>- *     f = IO.popen("/bin/sh","r+")</div><div class='del'>- *     f.close_read</div><div class='del'>- *     f.readlines</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:in `readlines': not opened for reading (IOError)</div><div class='del'>- *     	from prog.rb:3</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_close_read(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; !OBJ_TAINTED(io)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't close");</div><div class='del'>-    }</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    if (fptr-&gt;f2 == 0 &amp;&amp; (fptr-&gt;mode &amp; FMODE_WRITABLE)) {</div><div class='del'>-	rb_raise(rb_eIOError, "closing non-duplex IO for reading");</div><div class='del'>-    }</div><div class='del'>-    if (fptr-&gt;f2 == 0) {</div><div class='del'>-	return rb_io_close(io);</div><div class='del'>-    }</div><div class='del'>-    n = fclose(fptr-&gt;f);</div><div class='del'>-    fptr-&gt;mode &amp;= ~FMODE_READABLE;</div><div class='del'>-    fptr-&gt;f = fptr-&gt;f2;</div><div class='del'>-    fptr-&gt;f2 = 0;</div><div class='del'>-    if (n != 0) rb_sys_fail(fptr-&gt;path);</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'>- *     ios.close_write   =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Closes the write end of a duplex I/O stream (i.e., one that contains</div><div class='del'>- *  both a read and a write stream, such as a pipe). Will raise an</div><div class='del'>- *  &lt;code&gt;IOError&lt;/code&gt; if the stream is not duplexed.</div><div class='del'>- *     </div><div class='del'>- *     f = IO.popen("/bin/sh","r+")</div><div class='del'>- *     f.close_write</div><div class='del'>- *     f.print "nowhere"</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:in `write': not opened for writing (IOError)</div><div class='del'>- *     	from prog.rb:3:in `print'</div><div class='del'>- *     	from prog.rb:3</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_close_write(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int n;</div><div class='del'>-</div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; !OBJ_TAINTED(io)) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't close");</div><div class='del'>-    }</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    if (fptr-&gt;f2 == 0 &amp;&amp; (fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='del'>-	rb_raise(rb_eIOError, "closing non-duplex IO for writing");</div><div class='del'>-    }</div><div class='del'>-    if (fptr-&gt;f2 == 0) {</div><div class='del'>-	return rb_io_close(io);</div><div class='del'>-    }</div><div class='del'>-    n = fclose(fptr-&gt;f2);</div><div class='del'>-    fptr-&gt;f2 = 0;</div><div class='del'>-    fptr-&gt;mode &amp;= ~FMODE_WRITABLE;</div><div class='del'>-    if (n != 0) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-</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'>- *     ios.sysseek(offset, whence=SEEK_SET)   =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Seeks to a given &lt;i&gt;offset&lt;/i&gt; in the stream according to the value</div><div class='del'>- *  of &lt;i&gt;whence&lt;/i&gt; (see &lt;code&gt;IO#seek&lt;/code&gt; for values of</div><div class='del'>- *  &lt;i&gt;whence&lt;/i&gt;). Returns the new offset into the file.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.sysseek(-13, IO::SEEK_END)   #=&gt; 53</div><div class='del'>- *     f.sysread(10)                  #=&gt; "And so on."</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_sysseek(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'>-    VALUE offset, ptrname;</div><div class='del'>-    int whence = SEEK_SET;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    off_t pos;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;offset, &amp;ptrname) == 2) {</div><div class='del'>-	whence = NUM2INT(ptrname);</div><div class='del'>-    }</div><div class='del'>-    pos = NUM2OFFT(offset);</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    if ((fptr-&gt;mode &amp; FMODE_READABLE) &amp;&amp; READ_DATA_BUFFERED(fptr-&gt;f)) {</div><div class='del'>-	rb_raise(rb_eIOError, "sysseek for buffered IO");</div><div class='del'>-    }</div><div class='del'>-    if ((fptr-&gt;mode &amp; FMODE_WRITABLE) &amp;&amp; (fptr-&gt;mode &amp; FMODE_WBUF)) {</div><div class='del'>-	rb_warn("sysseek for buffered IO");</div><div class='del'>-    }</div><div class='del'>-    pos = lseek(fileno(fptr-&gt;f), pos, whence);</div><div class='del'>-    if (pos == -1) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    clearerr(fptr-&gt;f);</div><div class='del'>-</div><div class='del'>-    return OFFT2NUM(pos);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.syswrite(string)   =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Writes the given string to &lt;em&gt;ios&lt;/em&gt; using a low-level write.</div><div class='del'>- *  Returns the number of bytes written. Do not mix with other methods</div><div class='del'>- *  that write to &lt;em&gt;ios&lt;/em&gt; or you may get unpredictable results.</div><div class='del'>- *  Raises &lt;code&gt;SystemCallError&lt;/code&gt; on error.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("out", "w")</div><div class='del'>- *     f.syswrite("ABCDEF")   #=&gt; 6</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_syswrite(io, str)</div><div class='del'>-    VALUE io, str;</div><div class='add'>+Fio_syswrite(obj, str)</div><div class='add'>+    VALUE obj, str;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'>     FILE *f;</div><div class='del'>-    long n;</div><div class='add'>+    int n;</div><div class='ctx'> </div><div class='del'>-    rb_secure(4);</div><div class='ctx'>     if (TYPE(str) != T_STRING)</div><div class='del'>-	str = rb_obj_as_string(str);</div><div class='add'>+	str = obj_as_string(str);</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_writable(fptr);</div><div class='del'>-    f = GetWriteFile(fptr);</div><div class='del'>-</div><div class='del'>-    if (fptr-&gt;mode &amp; FMODE_WBUF) {</div><div class='del'>-	rb_warn("syswrite for buffered IO");</div><div class='del'>-    }</div><div class='del'>-    if (!rb_thread_fd_writable(fileno(f))) {</div><div class='del'>-        rb_io_check_closed(fptr);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_WRITABLE)) {</div><div class='add'>+	Fail("not opend for writing");</div><div class='ctx'>     }</div><div class='del'>-    TRAP_BEG;</div><div class='add'>+    f = (fptr-&gt;f2) ? fptr-&gt;f2 : fptr-&gt;f;</div><div class='add'>+    if (f == NULL) Fail("closed stream");</div><div class='add'>+</div><div class='ctx'>     n = write(fileno(f), RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='del'>-    TRAP_END;</div><div class='ctx'> </div><div class='del'>-    if (n == -1) rb_sys_fail(fptr-&gt;path);</div><div class='add'>+    if (n == -1) rb_sys_fail(Qnil);</div><div class='ctx'> </div><div class='del'>-    return LONG2FIX(n);</div><div class='add'>+    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'>- *     ios.sysread(integer )    =&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Reads &lt;i&gt;integer&lt;/i&gt; bytes from &lt;em&gt;ios&lt;/em&gt; using a low-level</div><div class='del'>- *  read and returns them as a string. Do not mix with other methods</div><div class='del'>- *  that read from &lt;em&gt;ios&lt;/em&gt; or you may get unpredictable results.</div><div class='del'>- *  Raises &lt;code&gt;SystemCallError&lt;/code&gt; on error and</div><div class='del'>- *  &lt;code&gt;EOFError&lt;/code&gt; at end of file.</div><div class='del'>- *     </div><div class='del'>- *     f = File.new("testfile")</div><div class='del'>- *     f.sysread(16)   #=&gt; "This is line one"</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_sysread(argc, argv, io)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_sysread(obj, len)</div><div class='add'>+    VALUE obj, len;</div><div class='ctx'> {</div><div class='del'>-    VALUE len, str;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    long n, ilen;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;len, &amp;str);</div><div class='del'>-    ilen = NUM2LONG(len);</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    int n, ilen;</div><div class='add'>+    VALUE str;</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(str)) {</div><div class='del'>-	str = rb_str_new(0, ilen);</div><div class='del'>-    }</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='add'>+    ilen = NUM2INT(len);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (!(fptr-&gt;mode &amp; FMODE_READABLE)) {</div><div class='add'>+	Fail("not opend for reading");</div><div class='ctx'>     }</div><div class='del'>-    if (ilen == 0) return str;</div><div class='add'>+    if (fptr-&gt;f == NULL) Fail("closed stream");</div><div class='ctx'> </div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    rb_io_check_readable(fptr);</div><div class='add'>+    str = str_new(0, ilen);</div><div class='ctx'> </div><div class='del'>-    if (READ_DATA_BUFFERED(fptr-&gt;f)) {</div><div class='del'>-	rb_raise(rb_eIOError, "sysread for buffered IO");</div><div class='del'>-    }</div><div class='del'>-    rb_str_locktmp(str);</div><div class='add'>+    n = read(fileno(fptr-&gt;f), RSTRING(str)-&gt;ptr, RSTRING(str)-&gt;len);</div><div class='ctx'> </div><div class='del'>-    n = fileno(fptr-&gt;f);</div><div class='del'>-    rb_thread_wait_fd(fileno(fptr-&gt;f));</div><div class='del'>-    rb_io_check_closed(fptr);</div><div class='del'>-    if (RSTRING(str)-&gt;len != ilen) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "buffer string modified");</div><div class='del'>-    }</div><div class='del'>-    TRAP_BEG;</div><div class='del'>-    n = read(fileno(fptr-&gt;f), RSTRING(str)-&gt;ptr, ilen);</div><div class='del'>-    TRAP_END;</div><div class='add'>+    if (n == -1) rb_sys_fail(Qnil);</div><div class='add'>+    if (n == 0) return Qnil;	/* EOF */</div><div class='ctx'> </div><div class='del'>-    rb_str_unlocktmp(str);</div><div class='del'>-    if (n == -1) {</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    }</div><div class='del'>-    rb_str_resize(str, n);</div><div class='del'>-    if (n == 0 &amp;&amp; ilen &gt; 0) {</div><div class='del'>-	rb_eof_error();</div><div class='del'>-    }</div><div class='ctx'>     RSTRING(str)-&gt;len = n;</div><div class='ctx'>     RSTRING(str)-&gt;ptr[n] = '\0';</div><div class='del'>-    OBJ_TAINT(str);</div><div class='del'>-</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'>- *     ios.binmode    =&gt; ios</div><div class='del'>- *  </div><div class='del'>- *  Puts &lt;em&gt;ios&lt;/em&gt; into binary mode. This is useful only in</div><div class='del'>- *  MS-DOS/Windows environments. Once a stream is in binary mode, it</div><div class='del'>- *  cannot be reset to nonbinary mode.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_binmode(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-#if defined(_WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__) || defined(__EMX__)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-#ifdef __human68k__</div><div class='del'>-    if (fptr-&gt;f)</div><div class='del'>-	fmode(fptr-&gt;f, _IOBIN);</div><div class='del'>-    if (fptr-&gt;f2)</div><div class='del'>-	fmode(fptr-&gt;f2, _IOBIN);</div><div class='del'>-#else</div><div class='del'>-    if (fptr-&gt;f &amp;&amp; setmode(fileno(fptr-&gt;f), O_BINARY) == -1)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    if (fptr-&gt;f2 &amp;&amp; setmode(fileno(fptr-&gt;f2), O_BINARY) == -1)</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    fptr-&gt;mode |= FMODE_BINMODE;</div><div class='del'>-#endif</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-const char*</div><div class='del'>-rb_io_flags_mode(flags)</div><div class='del'>-    int flags;</div><div class='add'>+void</div><div class='add'>+io_free_OpenFile(fptr)</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> {</div><div class='del'>-#ifdef O_BINARY</div><div class='del'>-# define MODE_BINMODE(a,b) ((flags &amp; FMODE_BINMODE) ? (b) : (a))</div><div class='del'>-#else</div><div class='del'>-# define MODE_BINMODE(a,b) (a)</div><div class='del'>-#endif</div><div class='del'>-    if (flags &amp; FMODE_APPEND) {</div><div class='del'>-	if ((flags &amp; FMODE_READWRITE) == FMODE_READWRITE) {</div><div class='del'>-	    return MODE_BINMODE("a+", "ab+");</div><div class='del'>-	}</div><div class='del'>-	return MODE_BINMODE("a", "ab");</div><div class='add'>+    if (fptr-&gt;f != NULL) {</div><div class='add'>+	fclose(fptr-&gt;f);</div><div class='ctx'>     }</div><div class='del'>-    switch (flags &amp; FMODE_READWRITE) {</div><div class='del'>-      case FMODE_READABLE:</div><div class='del'>-	return MODE_BINMODE("r", "rb");</div><div class='del'>-      case FMODE_WRITABLE:</div><div class='del'>-	return MODE_BINMODE("w", "wb");</div><div class='del'>-      case FMODE_READWRITE:</div><div class='del'>-	if (flags &amp; FMODE_CREATE) {</div><div class='del'>-	    return MODE_BINMODE("w+", "wb+");</div><div class='del'>-	}</div><div class='del'>-	return MODE_BINMODE("r+", "rb+");</div><div class='add'>+    if (fptr-&gt;f2 != NULL) {</div><div class='add'>+	fclose(fptr-&gt;f2);</div><div class='ctx'>     }</div><div class='del'>-    rb_raise(rb_eArgError, "illegal access modenum %o", flags);</div><div class='del'>-    return NULL;		/* not reached */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-int</div><div class='del'>-rb_io_mode_flags(mode)</div><div class='del'>-    const char *mode;</div><div class='del'>-{</div><div class='del'>-    int flags = 0;</div><div class='del'>-    const char *m = mode;</div><div class='del'>-</div><div class='del'>-    switch (*m++) {</div><div class='del'>-      case 'r':</div><div class='del'>-	flags |= FMODE_READABLE;</div><div class='del'>-	break;</div><div class='del'>-      case 'w':</div><div class='del'>-	flags |= FMODE_WRITABLE | FMODE_CREATE;</div><div class='del'>-	break;</div><div class='del'>-      case 'a':</div><div class='del'>-	flags |= FMODE_WRITABLE | FMODE_APPEND | FMODE_CREATE;</div><div class='del'>-	break;</div><div class='del'>-      default:</div><div class='del'>-      error:</div><div class='del'>-	rb_raise(rb_eArgError, "illegal access mode %s", mode);</div><div class='add'>+    if (fptr-&gt;path) {</div><div class='add'>+	free(fptr-&gt;path);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    while (*m) {</div><div class='del'>-        switch (*m++) {</div><div class='del'>-        case 'b':</div><div class='del'>-            flags |= FMODE_BINMODE;</div><div class='del'>-            break;</div><div class='del'>-        case '+':</div><div class='del'>-            flags |= FMODE_READWRITE;</div><div class='del'>-            break;</div><div class='del'>-        case ':':</div><div class='del'>-            /* forward compatibility */</div><div class='del'>-            rb_warning("encoding options not supported in 1.8: %s", mode);</div><div class='del'>-            goto end;</div><div class='del'>-        default:</div><div class='del'>-            goto error;</div><div class='del'>-        }</div><div class='add'>+    if (fptr-&gt;pid) {</div><div class='add'>+	rb_syswait(fptr-&gt;pid);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>- end:</div><div class='del'>-    return flags;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-int</div><div class='del'>-rb_io_modenum_flags(mode)</div><div class='del'>-    int mode;</div><div class='add'>+static VALUE</div><div class='add'>+Fio_binmode(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    int flags = 0;</div><div class='del'>-</div><div class='del'>-    switch (mode &amp; (O_RDONLY|O_WRONLY|O_RDWR)) {</div><div class='del'>-      case O_RDONLY:</div><div class='del'>-	flags = FMODE_READABLE;</div><div class='del'>-	break;</div><div class='del'>-      case O_WRONLY:</div><div class='del'>-	flags = FMODE_WRITABLE;</div><div class='del'>-	break;</div><div class='del'>-      case O_RDWR:</div><div class='del'>-	flags = FMODE_READWRITE;</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='add'>+#ifdef MSDOS</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-    if (mode &amp; O_APPEND) {</div><div class='del'>-	flags |= FMODE_APPEND;</div><div class='del'>-    }</div><div class='del'>-    if (mode &amp; O_CREAT) {</div><div class='del'>-	flags |= FMODE_CREATE;</div><div class='del'>-    }</div><div class='del'>-#ifdef O_BINARY</div><div class='del'>-    if (mode &amp; O_BINARY) {</div><div class='del'>-	flags |= FMODE_BINMODE;</div><div class='del'>-    }</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='add'>+    if (setmode(fileno(fptr), O_BINARY) == -1)</div><div class='add'>+	rb_sys_fail(Qnil);</div><div class='ctx'> #endif</div><div class='del'>-</div><div class='del'>-    return flags;</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static int</div><div class='del'>-rb_io_mode_modenum(mode)</div><div class='del'>-    const char *mode;</div><div class='add'>+VALUE obj_alloc();</div><div class='add'>+</div><div class='add'>+io_mode_flags(mode)</div><div class='add'>+    char *mode;</div><div class='ctx'> {</div><div class='ctx'>     int flags = 0;</div><div class='del'>-    const char *m = mode;</div><div class='ctx'> </div><div class='del'>-    switch (*m++) {</div><div class='add'>+    switch (mode[0]) {</div><div class='ctx'>       case 'r':</div><div class='del'>-	flags |= O_RDONLY;</div><div class='add'>+	flags |= FMODE_READABLE;</div><div class='ctx'> 	break;</div><div class='ctx'>       case 'w':</div><div class='del'>-	flags |= O_WRONLY | O_CREAT | O_TRUNC;</div><div class='add'>+	flags |= FMODE_WRITABLE;</div><div class='ctx'> 	break;</div><div class='ctx'>       case 'a':</div><div class='del'>-	flags |= O_WRONLY | O_CREAT | O_APPEND;</div><div class='add'>+	flags |= FMODE_WRITABLE;</div><div class='ctx'> 	break;</div><div class='ctx'>       default:</div><div class='del'>-      error:</div><div class='del'>-	rb_raise(rb_eArgError, "illegal access mode %s", mode);</div><div class='add'>+	Fail("illegal access mode");</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    while (*m) {</div><div class='del'>-        switch (*m++) {</div><div class='del'>-        case 'b':</div><div class='del'>-#ifdef O_BINARY</div><div class='del'>-            flags |= O_BINARY;</div><div class='del'>-#endif</div><div class='del'>-            break;</div><div class='del'>-        case '+':</div><div class='del'>-            flags = (flags &amp; ~O_ACCMODE) | O_RDWR;</div><div class='del'>-            break;</div><div class='del'>-        case ':':</div><div class='del'>-            /* forward compatibility */</div><div class='del'>-            rb_warning("encoding options not supported in 1.8: %s", mode);</div><div class='del'>-            goto end;</div><div class='del'>-        default:</div><div class='del'>-            goto error;</div><div class='del'>-        }</div><div class='add'>+    if (mode[1] == '+') {</div><div class='add'>+	flags |= FMODE_READABLE | FMODE_WRITABLE;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>- end:</div><div class='ctx'>     return flags;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#define MODENUM_MAX 4</div><div class='del'>-</div><div class='del'>-static const char*</div><div class='del'>-rb_io_modenum_mode(flags)</div><div class='del'>-    int flags;</div><div class='del'>-{</div><div class='del'>-#ifdef O_BINARY</div><div class='del'>-# define MODE_BINARY(a,b) ((flags &amp; O_BINARY) ? (b) : (a))</div><div class='del'>-#else</div><div class='del'>-# define MODE_BINARY(a,b) (a)</div><div class='del'>-#endif</div><div class='del'>-    if (flags &amp; O_APPEND) {</div><div class='del'>-	if ((flags &amp; O_RDWR) == O_RDWR) {</div><div class='del'>-	    return MODE_BINARY("a+", "ab+");</div><div class='del'>-	}</div><div class='del'>-	return MODE_BINARY("a", "ab");</div><div class='del'>-    }</div><div class='del'>-    switch (flags &amp; (O_RDONLY|O_WRONLY|O_RDWR)) {</div><div class='del'>-      case O_RDONLY:</div><div class='del'>-	return MODE_BINARY("r", "rb");</div><div class='del'>-      case O_WRONLY:</div><div class='del'>-	return MODE_BINARY("w", "wb");</div><div class='del'>-      case O_RDWR:</div><div class='del'>-	return MODE_BINARY("r+", "rb+");</div><div class='del'>-    }</div><div class='del'>-    rb_raise(rb_eArgError, "illegal access modenum %o", flags);</div><div class='del'>-    return NULL;		/* not reached */</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int</div><div class='del'>-rb_sysopen(fname, flags, mode)</div><div class='del'>-    char *fname;</div><div class='del'>-    int flags;</div><div class='del'>-    unsigned int mode;</div><div class='del'>-{</div><div class='del'>-    int fd;</div><div class='del'>-</div><div class='del'>-    fd = open(fname, flags, mode);</div><div class='del'>-    if (fd &lt; 0) {</div><div class='del'>-	if (errno == EMFILE || errno == ENFILE) {</div><div class='del'>-	    rb_gc();</div><div class='del'>-	    fd = open(fname, flags, mode);</div><div class='del'>-	}</div><div class='del'>-	if (fd &lt; 0) {</div><div class='del'>-	    rb_sys_fail(fname);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    return fd;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-FILE *</div><div class='del'>-rb_fopen(fname, mode)</div><div class='del'>-    const char *fname;</div><div class='del'>-    const char *mode;</div><div class='del'>-{</div><div class='del'>-    FILE *file;</div><div class='del'>-</div><div class='del'>-    file = fopen(fname, mode);</div><div class='del'>-    if (!file) {</div><div class='del'>-	if (errno == EMFILE || errno == ENFILE) {</div><div class='del'>-	    rb_gc();</div><div class='del'>-	    file = fopen(fname, mode);</div><div class='del'>-	}</div><div class='del'>-	if (!file) {</div><div class='del'>-	    rb_sys_fail(fname);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-#ifdef USE_SETVBUF</div><div class='del'>-    if (setvbuf(file, NULL, _IOFBF, 0) != 0)</div><div class='del'>-	rb_warn("setvbuf() can't be honoured for %s", fname);</div><div class='del'>-#endif</div><div class='del'>-#ifdef __human68k__</div><div class='del'>-    fmode(file, _IOTEXT);</div><div class='del'>-#endif</div><div class='del'>-    return file;</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> FILE *</div><div class='ctx'> rb_fdopen(fd, mode)</div><div class='ctx'>     int fd;</div><div class='del'>-    const char *mode;</div><div class='add'>+    char *mode;</div><div class='ctx'> {</div><div class='del'>-    FILE *file;</div><div class='add'>+    FILE *f;</div><div class='ctx'> </div><div class='del'>-#if defined(sun)</div><div class='del'>-    errno = 0;</div><div class='del'>-#endif</div><div class='del'>-    file = fdopen(fd, mode);</div><div class='del'>-    if (!file) {</div><div class='del'>-#if defined(sun)</div><div class='del'>-	if (errno == 0 || errno == EMFILE || errno == ENFILE) {</div><div class='del'>-#else</div><div class='del'>-	if (errno == EMFILE || errno == ENFILE) {</div><div class='del'>-#endif</div><div class='del'>-	    rb_gc();</div><div class='del'>-#if defined(sun)</div><div class='del'>-	    errno = 0;</div><div class='del'>-#endif</div><div class='del'>-	    file = fdopen(fd, mode);</div><div class='add'>+    f = fdopen(fd, mode);</div><div class='add'>+    if (f == NULL) {</div><div class='add'>+	if (errno = EMFILE) {</div><div class='add'>+	    gc();</div><div class='add'>+	    f = fdopen(fd, mode);</div><div class='ctx'> 	}</div><div class='del'>-	if (!file) {</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-	    if (errno == 0) errno = EINVAL;</div><div class='del'>-#endif</div><div class='del'>-#if defined(sun)</div><div class='del'>-	    if (errno == 0) errno = EMFILE;</div><div class='del'>-#endif</div><div class='del'>-	    rb_sys_fail(0);</div><div class='add'>+	if (f == NULL) {</div><div class='add'>+	    rb_sys_fail(Qnil);</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-#ifdef USE_SETVBUF</div><div class='del'>-    if (setvbuf(file, NULL, _IOFBF, 0) != 0)</div><div class='del'>-	rb_warn("setvbuf() can't be honoured (fd=%d)", fd);</div><div class='del'>-#endif</div><div class='del'>-    return file;</div><div class='add'>+    return f;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_file_open_internal(io, fname, mode)</div><div class='del'>-    VALUE io;</div><div class='del'>-    const char *fname, *mode;</div><div class='add'>+pipe_open(pname, mode)</div><div class='add'>+    char *pname, *mode;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    VALUE port;</div><div class='add'>+    OpenFile *fptr;</div><div class='ctx'> </div><div class='del'>-    MakeOpenFile(io, fptr);</div><div class='add'>+    int pid, pr[2], pw[2];</div><div class='add'>+    int doexec;</div><div class='ctx'> </div><div class='del'>-    fptr-&gt;mode = rb_io_mode_flags(mode);</div><div class='del'>-    fptr-&gt;path = strdup(fname);</div><div class='del'>-    fptr-&gt;f = rb_fopen(fptr-&gt;path, rb_io_flags_mode(fptr-&gt;mode));</div><div class='add'>+    port = obj_alloc(C_IO);</div><div class='add'>+    MakeOpenFile(port, fptr);</div><div class='add'>+    fptr-&gt;mode = io_mode_flags(mode);</div><div class='ctx'> </div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='add'>+    if ((fptr-&gt;mode &amp; FMODE_READABLE) &amp;&amp; pipe(pr) == -1 ||</div><div class='add'>+	(fptr-&gt;mode &amp; FMODE_WRITABLE) &amp;&amp; pipe(pw) == -1)</div><div class='add'>+	rb_sys_fail(Qnil);</div><div class='ctx'> </div><div class='del'>-VALUE</div><div class='del'>-rb_file_open(fname, mode)</div><div class='del'>-    const char *fname, *mode;</div><div class='del'>-{</div><div class='del'>-    return rb_file_open_internal(io_alloc(rb_cFile), fname, mode);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_sysopen_internal(io, fname, flags, mode)</div><div class='del'>-    VALUE io;</div><div class='del'>-    char *fname;</div><div class='del'>-    int flags, mode;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int fd;</div><div class='del'>-    const char *m;</div><div class='del'>-</div><div class='del'>-    MakeOpenFile(io, fptr);</div><div class='del'>-</div><div class='del'>-    fptr-&gt;path = strdup(fname);</div><div class='del'>-    m = rb_io_modenum_mode(flags);</div><div class='del'>-    fptr-&gt;mode = rb_io_modenum_flags(flags);</div><div class='del'>-    fd = rb_sysopen(fptr-&gt;path, flags, mode);</div><div class='del'>-    fptr-&gt;f = rb_fdopen(fd, m);</div><div class='del'>-</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_file_sysopen(fname, flags, mode)</div><div class='del'>-    const char *fname;</div><div class='del'>-    int flags, mode;</div><div class='del'>-{</div><div class='del'>-    return rb_file_sysopen_internal(io_alloc(rb_cFile), fname, flags, mode);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#if defined (_WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__) || defined(__VMS)</div><div class='del'>-static struct pipe_list {</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    struct pipe_list *next;</div><div class='del'>-} *pipe_list;</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-pipe_add_fptr(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    struct pipe_list *list;</div><div class='del'>-</div><div class='del'>-    list = ALLOC(struct pipe_list);</div><div class='del'>-    list-&gt;fptr = fptr;</div><div class='del'>-    list-&gt;next = pipe_list;</div><div class='del'>-    pipe_list = list;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-pipe_del_fptr(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    struct pipe_list *list = pipe_list;</div><div class='del'>-    struct pipe_list *tmp;</div><div class='del'>-</div><div class='del'>-    if (list-&gt;fptr == fptr) {</div><div class='del'>-	pipe_list = list-&gt;next;</div><div class='del'>-	free(list);</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    while (list-&gt;next) {</div><div class='del'>-	if (list-&gt;next-&gt;fptr == fptr) {</div><div class='del'>-	    tmp = list-&gt;next;</div><div class='del'>-	    list-&gt;next = list-&gt;next-&gt;next;</div><div class='del'>-	    free(tmp);</div><div class='del'>-	    return;</div><div class='del'>-	}</div><div class='del'>-	list = list-&gt;next;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-pipe_atexit _((void))</div><div class='del'>-{</div><div class='del'>-    struct pipe_list *list = pipe_list;</div><div class='del'>-    struct pipe_list *tmp;</div><div class='del'>-</div><div class='del'>-    while (list) {</div><div class='del'>-	tmp = list-&gt;next;</div><div class='del'>-	rb_io_fptr_finalize(list-&gt;fptr);</div><div class='del'>-	list = tmp;</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void pipe_finalize _((rb_io_t *fptr,int));</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-pipe_finalize(fptr, noraise)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int noraise;</div><div class='del'>-{</div><div class='del'>-#if !defined (__CYGWIN__) &amp;&amp; !defined(_WIN32)</div><div class='del'>-    extern VALUE rb_last_status;</div><div class='del'>-    int status;</div><div class='del'>-    if (fptr-&gt;f) {</div><div class='del'>-	status = pclose(fptr-&gt;f);</div><div class='del'>-    }</div><div class='del'>-    if (fptr-&gt;f2) {</div><div class='del'>-	status = pclose(fptr-&gt;f2);</div><div class='del'>-    }</div><div class='del'>-    fptr-&gt;f = fptr-&gt;f2 = 0;</div><div class='del'>-#if defined DJGPP</div><div class='del'>-    status &lt;&lt;= 8;</div><div class='del'>-#endif</div><div class='del'>-    rb_last_status = INT2FIX(status);</div><div class='del'>-#else</div><div class='del'>-    fptr_finalize(fptr, noraise);</div><div class='del'>-#endif</div><div class='del'>-    pipe_del_fptr(fptr);</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_io_synchronized(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    fptr-&gt;mode |= FMODE_SYNC;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_io_unbuffered(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    rb_io_synchronized(fptr);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE pipe_open(VALUE pstr, const char *pname, const char *mode);</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-pipe_open(pstr, pname, mode)</div><div class='del'>-    VALUE pstr;</div><div class='del'>-    const char *pname, *mode;</div><div class='del'>-{</div><div class='del'>-    int modef = rb_io_mode_flags(mode);</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-#if defined(DJGPP) || defined(__human68k__) || defined(__VMS)</div><div class='del'>-    FILE *f;</div><div class='del'>-#else</div><div class='del'>-    int pid;</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-    FILE *fpr, *fpw;</div><div class='del'>-#else</div><div class='del'>-    int pr[2], pw[2];</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-    volatile int doexec;</div><div class='del'>-</div><div class='del'>-    if (!pname) pname = StringValueCStr(pstr);</div><div class='ctx'>     doexec = (strcmp("-", pname) != 0);</div><div class='del'>-</div><div class='del'>-#if defined(DJGPP) || defined(__human68k__) || defined(__VMS) || defined(_WIN32)</div><div class='del'>-    if (!doexec) {</div><div class='del'>-	rb_raise(rb_eNotImpError,</div><div class='del'>-		 "fork() function is unimplemented on this machine");</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-#if defined(DJGPP) || defined(__human68k__) || defined(__VMS)</div><div class='del'>-    f = popen(pname, mode);</div><div class='del'>-    </div><div class='del'>-    if (!f) rb_sys_fail(pname);</div><div class='del'>-    else {</div><div class='del'>-	VALUE port = io_alloc(rb_cIO);</div><div class='del'>-</div><div class='del'>-	MakeOpenFile(port, fptr);</div><div class='del'>-	fptr-&gt;finalize = pipe_finalize;</div><div class='del'>-	fptr-&gt;mode = modef;</div><div class='del'>-</div><div class='del'>-	pipe_add_fptr(fptr);</div><div class='del'>-	if (modef &amp; FMODE_READABLE) fptr-&gt;f  = f;</div><div class='del'>-	if (modef &amp; FMODE_WRITABLE) {</div><div class='del'>-	    if (fptr-&gt;f) fptr-&gt;f2 = f;</div><div class='del'>-	    else fptr-&gt;f = f;</div><div class='del'>-	    rb_io_synchronized(fptr);</div><div class='del'>-	}</div><div class='del'>-	return (VALUE)port;</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-retry:</div><div class='del'>-    pid = pipe_exec(pname, rb_io_mode_modenum(mode), &amp;fpr, &amp;fpw);</div><div class='del'>-    if (pid == -1) {		/* exec failed */</div><div class='del'>-	if (errno == EAGAIN) {</div><div class='del'>-	    rb_thread_sleep(1);</div><div class='del'>-	    goto retry;</div><div class='del'>-	}</div><div class='del'>-	rb_sys_fail(pname);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-        VALUE port = io_alloc(rb_cIO);</div><div class='del'>-</div><div class='del'>-	MakeOpenFile(port, fptr);</div><div class='del'>-	fptr-&gt;mode = modef;</div><div class='del'>-	fptr-&gt;mode |= FMODE_SYNC;</div><div class='del'>-	fptr-&gt;pid = pid;</div><div class='del'>-</div><div class='del'>-	if (modef &amp; FMODE_READABLE) {</div><div class='del'>-	    fptr-&gt;f = fpr;</div><div class='del'>-	}</div><div class='del'>-	if (modef &amp; FMODE_WRITABLE) {</div><div class='del'>-	    if (fptr-&gt;f) fptr-&gt;f2 = fpw;</div><div class='del'>-	    else fptr-&gt;f = fpw;</div><div class='del'>-	}</div><div class='del'>-	fptr-&gt;finalize = pipe_finalize;</div><div class='del'>-	pipe_add_fptr(fptr);</div><div class='del'>-	return (VALUE)port;</div><div class='del'>-    }</div><div class='del'>-#else</div><div class='del'>-    if (((modef &amp; FMODE_READABLE) &amp;&amp; pipe(pr) == -1) ||</div><div class='del'>-	((modef &amp; FMODE_WRITABLE) &amp;&amp; pipe(pw) == -1))</div><div class='del'>-	rb_sys_fail(pname);</div><div class='del'>-</div><div class='ctx'>     if (!doexec) {</div><div class='ctx'> 	fflush(stdin);		/* is it really needed? */</div><div class='ctx'> 	fflush(stdout);</div><div class='hunk'>@@ -3223,1647 +580,362 @@ retry:</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>   retry:</div><div class='del'>-    switch ((pid = fork())) {</div><div class='add'>+    switch (pid = (doexec?vfork():fork())) {</div><div class='ctx'>       case 0:			/* child */</div><div class='del'>-	if (modef &amp; FMODE_READABLE) {</div><div class='add'>+	if (fptr-&gt;mode &amp; FMODE_READABLE) {</div><div class='ctx'> 	    close(pr[0]);</div><div class='del'>-	    if (pr[1] != 1) {</div><div class='del'>-		dup2(pr[1], 1);</div><div class='del'>-		close(pr[1]);</div><div class='del'>-	    }</div><div class='add'>+	    dup2(pr[1], 1);</div><div class='add'>+	    close(pr[1]);</div><div class='ctx'> 	}</div><div class='del'>-	if (modef &amp; FMODE_WRITABLE) {</div><div class='add'>+	if (fptr-&gt;mode &amp; FMODE_WRITABLE) {</div><div class='ctx'> 	    close(pw[1]);</div><div class='del'>-	    if (pw[0] != 0) {</div><div class='del'>-		dup2(pw[0], 0);</div><div class='del'>-		close(pw[0]);</div><div class='del'>-	    }</div><div class='add'>+	    dup2(pw[0], 0);</div><div class='add'>+	    close(pw[0]);</div><div class='ctx'> 	}</div><div class='ctx'> </div><div class='ctx'> 	if (doexec) {</div><div class='del'>-	    int fd;</div><div class='del'>-</div><div class='del'>-	    for (fd = 3; fd &lt; NOFILE; fd++)</div><div class='del'>-		close(fd);</div><div class='ctx'> 	    rb_proc_exec(pname);</div><div class='del'>-	    fprintf(stderr, "%s:%d: command not found: %s\n",</div><div class='del'>-		    ruby_sourcefile, ruby_sourceline, pname);</div><div class='ctx'> 	    _exit(127);</div><div class='ctx'> 	}</div><div class='del'>-	rb_io_synchronized(RFILE(orig_stdout)-&gt;fptr);</div><div class='del'>-	rb_io_synchronized(RFILE(orig_stderr)-&gt;fptr);</div><div class='ctx'> 	return Qnil;</div><div class='ctx'> </div><div class='ctx'>       case -1:			/* fork failed */</div><div class='ctx'> 	if (errno == EAGAIN) {</div><div class='del'>-	    rb_thread_sleep(1);</div><div class='add'>+	    sleep(5);</div><div class='ctx'> 	    goto retry;</div><div class='ctx'> 	}</div><div class='del'>-	else {</div><div class='del'>-	    int e = errno;</div><div class='del'>-	    if ((modef &amp; FMODE_READABLE)) {</div><div class='del'>-		close(pr[0]);</div><div class='del'>-		close(pr[1]);</div><div class='del'>-	    }</div><div class='del'>-	    if ((modef &amp; FMODE_WRITABLE)) {</div><div class='del'>-		close(pw[0]);</div><div class='del'>-		close(pw[1]);</div><div class='del'>-	    }</div><div class='del'>-	    errno = e;</div><div class='del'>-	    rb_sys_fail(pname);</div><div class='del'>-	}</div><div class='ctx'> 	break;</div><div class='ctx'> </div><div class='ctx'>       default:			/* parent */</div><div class='del'>-	if (pid &lt; 0) rb_sys_fail(pname);</div><div class='del'>-	else {</div><div class='del'>-	    VALUE port = io_alloc(rb_cIO);</div><div class='del'>-</div><div class='del'>-	    MakeOpenFile(port, fptr);</div><div class='del'>-	    fptr-&gt;mode = modef;</div><div class='del'>-	    fptr-&gt;mode |= FMODE_SYNC;</div><div class='del'>-	    fptr-&gt;pid = pid;</div><div class='del'>-</div><div class='del'>-	    if (modef &amp; FMODE_READABLE) {</div><div class='del'>-		close(pr[1]);</div><div class='del'>-		fptr-&gt;f  = rb_fdopen(pr[0], "r");</div><div class='del'>-	    }</div><div class='del'>-	    if (modef &amp; FMODE_WRITABLE) {</div><div class='del'>-		FILE *f = rb_fdopen(pw[1], "w");</div><div class='del'>-</div><div class='del'>-		close(pw[0]);</div><div class='del'>-		if (fptr-&gt;f) fptr-&gt;f2 = f;</div><div class='del'>-		else fptr-&gt;f = f;</div><div class='del'>-	    }</div><div class='del'>-#if defined (__CYGWIN__)</div><div class='del'>-	    fptr-&gt;finalize = pipe_finalize;</div><div class='del'>-	    pipe_add_fptr(fptr);</div><div class='del'>-#endif</div><div class='del'>-	    return port;</div><div class='del'>-	}</div><div class='add'>+	if (fptr-&gt;mode &amp; FMODE_READABLE) close(pr[1]);</div><div class='add'>+	if (fptr-&gt;mode &amp; FMODE_WRITABLE) close(pw[0]);</div><div class='ctx'>     }</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.popen(cmd_string, mode="r" )               =&gt; io</div><div class='del'>- *     IO.popen(cmd_string, mode="r" ) {|io| block } =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Runs the specified command string as a subprocess; the subprocess's</div><div class='del'>- *  standard input and output will be connected to the returned</div><div class='del'>- *  &lt;code&gt;IO&lt;/code&gt; object. If &lt;i&gt;cmd_string&lt;/i&gt; starts with a</div><div class='del'>- *  ``&lt;code&gt;-&lt;/code&gt;'', then a new instance of Ruby is started as the</div><div class='del'>- *  subprocess. The default mode for the new file object is ``r'', but</div><div class='del'>- *  &lt;i&gt;mode&lt;/i&gt; may be set to any of the modes listed in the description</div><div class='del'>- *  for class IO.</div><div class='del'>- *     </div><div class='del'>- *  If a block is given, Ruby will run the command as a child connected</div><div class='del'>- *  to Ruby with a pipe. Ruby's end of the pipe will be passed as a</div><div class='del'>- *  parameter to the block.</div><div class='del'>- *  At the end of block, Ruby close the pipe and sets &lt;code&gt;$?&lt;/code&gt;.</div><div class='del'>- *  In this case &lt;code&gt;IO::popen&lt;/code&gt; returns</div><div class='del'>- *  the value of the block.</div><div class='del'>- *     </div><div class='del'>- *  If a block is given with a &lt;i&gt;cmd_string&lt;/i&gt; of ``&lt;code&gt;-&lt;/code&gt;'',</div><div class='del'>- *  the block will be run in two separate processes: once in the parent,</div><div class='del'>- *  and once in a child. The parent process will be passed the pipe</div><div class='del'>- *  object as a parameter to the block, the child version of the block</div><div class='del'>- *  will be passed &lt;code&gt;nil&lt;/code&gt;, and the child's standard in and</div><div class='del'>- *  standard out will be connected to the parent through the pipe. Not</div><div class='del'>- *  available on all platforms.</div><div class='del'>- *     </div><div class='del'>- *     f = IO.popen("uname")</div><div class='del'>- *     p f.readlines</div><div class='del'>- *     puts "Parent is #{Process.pid}"</div><div class='del'>- *     IO.popen ("date") { |f| puts f.gets }</div><div class='del'>- *     IO.popen("-") {|f| $stderr.puts "#{Process.pid} is here, f is #{f}"}</div><div class='del'>- *     p $?</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     ["Linux\n"]</div><div class='del'>- *     Parent is 26166</div><div class='del'>- *     Wed Apr  9 08:53:52 CDT 2003</div><div class='del'>- *     26169 is here, f is</div><div class='del'>- *     26166 is here, f is #&lt;IO:0x401b3d44&gt;</div><div class='del'>- *     #&lt;Process::Status: pid=26166,exited(0)&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_s_popen(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    const char *mode;</div><div class='del'>-    VALUE pname, pmode, port;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;pname, &amp;pmode) == 1) {</div><div class='del'>-	mode = "r";</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(pmode)) {</div><div class='del'>-	mode = rb_io_modenum_mode(FIX2INT(pmode));</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	mode = rb_io_flags_mode(rb_io_mode_flags(StringValueCStr(pmode)));</div><div class='del'>-    }</div><div class='del'>-    SafeStringValue(pname);</div><div class='del'>-    port = pipe_open(pname, 0, mode);</div><div class='del'>-    if (NIL_P(port)) {</div><div class='del'>-	/* child */</div><div class='del'>-	if (rb_block_given_p()) {</div><div class='del'>-	    rb_yield(Qnil);</div><div class='del'>-	    fflush(stdout);</div><div class='del'>-	    fflush(stderr);</div><div class='del'>-	    _exit(0);</div><div class='del'>-	}</div><div class='del'>-	return Qnil;</div><div class='del'>-    }</div><div class='del'>-    RBASIC(port)-&gt;klass = klass;</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	return rb_ensure(rb_yield, port, io_close, port);</div><div class='add'>+    if (pid == -1) {</div><div class='add'>+	close(pr[0]); close(pw[1]);</div><div class='add'>+	rb_sys_fail(Qnil);</div><div class='ctx'>     }</div><div class='del'>-    return port;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_open_file(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'>-    VALUE fname, vmode, perm;</div><div class='del'>-    const char *path, *mode;</div><div class='del'>-    int flags;</div><div class='del'>-    unsigned int fmode;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "12", &amp;fname, &amp;vmode, &amp;perm);</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-</div><div class='del'>-    path = StringValueCStr(fname);</div><div class='del'>-    if (FIXNUM_P(vmode) || !NIL_P(perm)) {</div><div class='del'>-	if (FIXNUM_P(vmode)) {</div><div class='del'>-	    flags = FIX2INT(vmode);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    SafeStringValue(vmode);</div><div class='del'>-	    flags = rb_io_mode_modenum(RSTRING(vmode)-&gt;ptr);</div><div class='del'>-	}</div><div class='del'>-	fmode = NIL_P(perm) ? 0666 :  NUM2UINT(perm);</div><div class='add'>+    fptr-&gt;pid = pid;</div><div class='add'>+    if (fptr-&gt;mode &amp; FMODE_READABLE) fptr-&gt;f  = rb_fdopen(pr[0], "r");</div><div class='add'>+    if (fptr-&gt;mode &amp; FMODE_WRITABLE) fptr-&gt;f2 = rb_fdopen(pw[1], "w");</div><div class='ctx'> </div><div class='del'>-	rb_file_sysopen_internal(io, path, flags, fmode);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	mode = NIL_P(vmode) ? "r" : StringValueCStr(vmode);</div><div class='del'>-	rb_file_open_internal(io, path, mode);</div><div class='del'>-    }</div><div class='del'>-    return io;</div><div class='add'>+    return port;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.open(fd, mode_string="r" )               =&gt; io</div><div class='del'>- *     IO.open(fd, mode_string="r" ) {|io| block } =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  With no associated block, &lt;code&gt;open&lt;/code&gt; is a synonym for</div><div class='del'>- *  &lt;code&gt;IO::new&lt;/code&gt;. If the optional code block is given, it will</div><div class='del'>- *  be passed &lt;i&gt;io&lt;/i&gt; as an argument, and the IO object will</div><div class='del'>- *  automatically be closed when the block terminates. In this instance,</div><div class='del'>- *  &lt;code&gt;IO::open&lt;/code&gt; returns the value of the block.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_s_open(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='add'>+Fopen(self, args)</div><div class='add'>+    VALUE self, args;</div><div class='ctx'> {</div><div class='del'>-    VALUE io = rb_class_new_instance(argc, argv, klass);</div><div class='add'>+    char *mode;</div><div class='add'>+    VALUE port;</div><div class='add'>+    int pipe = 0;</div><div class='add'>+    VALUE pname, pmode;</div><div class='ctx'> </div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	return rb_ensure(rb_yield, io, io_close, io);</div><div class='add'>+    rb_scan_args(args, "11", &amp;pname, &amp;pmode);</div><div class='add'>+    Check_Type(pname, T_STRING);</div><div class='add'>+    if (pmode == Qnil) {</div><div class='add'>+	mode = "r";</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.sysopen(path, [mode, [perm]])  =&gt; fixnum</div><div class='del'>- *  </div><div class='del'>- *  Opens the given path, returning the underlying file descriptor as a</div><div class='del'>- *  &lt;code&gt;Fixnum&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     IO.sysopen("testfile")   #=&gt; 3</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_s_sysopen(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE fname, vmode, perm;</div><div class='del'>-    int flags, fd;</div><div class='del'>-    unsigned int fmode;</div><div class='del'>-    char *path;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "12", &amp;fname, &amp;vmode, &amp;perm);</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-</div><div class='del'>-    if (NIL_P(vmode)) flags = O_RDONLY;</div><div class='del'>-    else if (FIXNUM_P(vmode)) flags = FIX2INT(vmode);</div><div class='ctx'>     else {</div><div class='del'>-	SafeStringValue(vmode);</div><div class='del'>-	flags = rb_io_mode_modenum(RSTRING(vmode)-&gt;ptr);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(perm)) fmode = 0666;</div><div class='del'>-    else             fmode = NUM2UINT(perm);</div><div class='del'>-</div><div class='del'>-    path = ALLOCA_N(char, strlen(RSTRING(fname)-&gt;ptr)+1);</div><div class='del'>-    strcpy(path, RSTRING(fname)-&gt;ptr);</div><div class='del'>-    fd = rb_sysopen(path, flags, fmode);</div><div class='del'>-    return INT2NUM(fd);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     open(path [, mode [, perm]] )                =&gt; io or nil</div><div class='del'>- *     open(path [, mode [, perm]] ) {|io| block }  =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  Creates an &lt;code&gt;IO&lt;/code&gt; object connected to the given stream,</div><div class='del'>- *  file, or subprocess.</div><div class='del'>- *     </div><div class='del'>- *  If &lt;i&gt;path&lt;/i&gt; does not start with a pipe character</div><div class='del'>- *  (``&lt;code&gt;|&lt;/code&gt;''), treat it as the name of a file to open using</div><div class='del'>- *  the specified mode (defaulting to ``&lt;code&gt;r&lt;/code&gt;''). (See the table</div><div class='del'>- *  of valid modes on page 331.) If a file is being created, its initial</div><div class='del'>- *  permissions may be set using the integer third parameter.</div><div class='del'>- *     </div><div class='del'>- *  If a block is specified, it will be invoked with the</div><div class='del'>- *  &lt;code&gt;File&lt;/code&gt; object as a parameter, and the file will be</div><div class='del'>- *  automatically closed when the block terminates. The call</div><div class='del'>- *  returns the value of the block.</div><div class='del'>- *     </div><div class='del'>- *  If &lt;i&gt;path&lt;/i&gt; starts with a pipe character, a subprocess is</div><div class='del'>- *  created, connected to the caller by a pair of pipes. The returned</div><div class='del'>- *  &lt;code&gt;IO&lt;/code&gt; object may be used to write to the standard input</div><div class='del'>- *  and read from the standard output of this subprocess. If the command</div><div class='del'>- *  following the ``&lt;code&gt;|&lt;/code&gt;'' is a single minus sign, Ruby forks,</div><div class='del'>- *  and this subprocess is connected to the parent. In the subprocess,</div><div class='del'>- *  the &lt;code&gt;open&lt;/code&gt; call returns &lt;code&gt;nil&lt;/code&gt;. If the command</div><div class='del'>- *  is not ``&lt;code&gt;-&lt;/code&gt;'', the subprocess runs the command. If a</div><div class='del'>- *  block is associated with an &lt;code&gt;open("|-")&lt;/code&gt; call, that block</div><div class='del'>- *  will be run twice---once in the parent and once in the child. The</div><div class='del'>- *  block parameter will be an &lt;code&gt;IO&lt;/code&gt; object in the parent and</div><div class='del'>- *  &lt;code&gt;nil&lt;/code&gt; in the child. The parent's &lt;code&gt;IO&lt;/code&gt; object</div><div class='del'>- *  will be connected to the child's &lt;code&gt;$stdin&lt;/code&gt; and</div><div class='del'>- *  &lt;code&gt;$stdout&lt;/code&gt;. The subprocess will be terminated at the end</div><div class='del'>- *  of the block.</div><div class='del'>- *     </div><div class='del'>- *     open("testfile") do |f|</div><div class='del'>- *       print f.gets</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'>- *     This is line one</div><div class='del'>- *     </div><div class='del'>- *  Open a subprocess and read its output:</div><div class='del'>- *     </div><div class='del'>- *     cmd = open("|date")</div><div class='del'>- *     print cmd.gets</div><div class='del'>- *     cmd.close</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Wed Apr  9 08:56:31 CDT 2003</div><div class='del'>- *     </div><div class='del'>- *  Open a subprocess running the same Ruby program:</div><div class='del'>- *     </div><div class='del'>- *     f = open("|-", "w+")</div><div class='del'>- *     if f == nil</div><div class='del'>- *       puts "in Child"</div><div class='del'>- *       exit</div><div class='del'>- *     else</div><div class='del'>- *       puts "Got: #{f.gets}"</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'>- *     Got: in Child</div><div class='del'>- *     </div><div class='del'>- *  Open a subprocess using a block to receive the I/O object:</div><div class='del'>- *     </div><div class='del'>- *     open("|-") do |f|</div><div class='del'>- *       if f == nil</div><div class='del'>- *         puts "in Child"</div><div class='del'>- *       else</div><div class='del'>- *         puts "Got: #{f.gets}"</div><div class='del'>- *       end</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'>- *     Got: in Child</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_open(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    if (argc &gt;= 1) {</div><div class='del'>-	char *str = StringValuePtr(argv[0]);</div><div class='del'>-</div><div class='del'>-	if (str[0] == '|') {</div><div class='del'>-	    VALUE tmp = rb_str_new(str+1, RSTRING(argv[0])-&gt;len-1);</div><div class='del'>-	    OBJ_INFECT(tmp, argv[0]);</div><div class='del'>-	    argv[0] = tmp;</div><div class='del'>-	    return rb_io_s_popen(argc, argv, rb_cIO);</div><div class='del'>-	}</div><div class='add'>+	Check_Type(pmode, T_STRING);</div><div class='add'>+	if (RSTRING(pmode)-&gt;len == 0 || RSTRING(pmode)-&gt;len &gt; 2)</div><div class='add'>+	    Fail("illegal access mode");</div><div class='add'>+	mode = RSTRING(pmode)-&gt;ptr;</div><div class='ctx'>     }</div><div class='del'>-    return rb_io_s_open(argc, argv, rb_cFile);</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_io_open(fname, mode)</div><div class='del'>-    char *fname, *mode;</div><div class='del'>-{</div><div class='del'>-    if (fname[0] == '|') {</div><div class='del'>-	return pipe_open(0, fname+1, mode);</div><div class='add'>+    if (RSTRING(pname)-&gt;ptr[0] == '|') {</div><div class='add'>+	port = pipe_open(RSTRING(pname)-&gt;ptr+1, mode);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	return rb_file_open(fname, mode);</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_get_io(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    return rb_convert_type(io, T_FILE, "IO", "to_io");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_check_io(io)</div><div class='del'>-    VALUE io;</div><div class='del'>-{</div><div class='del'>-    return rb_check_convert_type(io, T_FILE, "IO", "to_io");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static const char*</div><div class='del'>-rb_io_mode_string(fptr)</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-{</div><div class='del'>-    switch (fptr-&gt;mode &amp; FMODE_READWRITE) {</div><div class='del'>-      case FMODE_READABLE:</div><div class='del'>-      default:</div><div class='del'>-	return "r";</div><div class='del'>-      case FMODE_WRITABLE:</div><div class='del'>-	return "w";</div><div class='del'>-      case FMODE_READWRITE:</div><div class='del'>-	return "r+";</div><div class='add'>+	port = file_open(RSTRING(pname)-&gt;ptr, mode);</div><div class='ctx'>     }</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-io_reopen(io, nfile)</div><div class='del'>-    VALUE io, nfile;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr, *orig;</div><div class='del'>-    const char *mode;</div><div class='del'>-    int fd, fd2;</div><div class='del'>-    off_t pos = 0;</div><div class='del'>-</div><div class='del'>-    nfile = rb_io_get_io(nfile);</div><div class='del'>-    if (rb_safe_level() &gt;= 4 &amp;&amp; (!OBJ_TAINTED(io) || !OBJ_TAINTED(nfile))) {</div><div class='del'>-	rb_raise(rb_eSecurityError, "Insecure: can't reopen");</div><div class='del'>-    }</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    GetOpenFile(nfile, orig);</div><div class='del'>-</div><div class='del'>-    if (fptr == orig) return io;</div><div class='del'>-    if (orig-&gt;mode &amp; FMODE_READABLE) {</div><div class='del'>-	pos = io_tell(orig);</div><div class='del'>-    }</div><div class='del'>-    if (orig-&gt;f2) {</div><div class='del'>-	io_fflush(orig-&gt;f2, orig);</div><div class='del'>-    }</div><div class='del'>-    else if (orig-&gt;mode &amp; FMODE_WRITABLE) {</div><div class='del'>-	io_fflush(orig-&gt;f, orig);</div><div class='del'>-    }</div><div class='del'>-    if (fptr-&gt;mode &amp; FMODE_WRITABLE) {</div><div class='del'>-	io_fflush(GetWriteFile(fptr), fptr);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* copy rb_io_t structure */</div><div class='del'>-    fptr-&gt;mode = orig-&gt;mode;</div><div class='del'>-    fptr-&gt;pid = orig-&gt;pid;</div><div class='del'>-    fptr-&gt;lineno = orig-&gt;lineno;</div><div class='del'>-    if (fptr-&gt;path) free(fptr-&gt;path);</div><div class='del'>-    if (orig-&gt;path) fptr-&gt;path = strdup(orig-&gt;path);</div><div class='del'>-    else fptr-&gt;path = 0;</div><div class='del'>-    fptr-&gt;finalize = orig-&gt;finalize;</div><div class='del'>-</div><div class='del'>-    mode = rb_io_mode_string(fptr);</div><div class='del'>-    fd = fileno(fptr-&gt;f);</div><div class='del'>-    fd2 = fileno(orig-&gt;f);</div><div class='del'>-    if (fd != fd2) {</div><div class='del'>-	if (fptr-&gt;f == stdin || fptr-&gt;f == stdout || fptr-&gt;f == stderr) {</div><div class='del'>-	    clearerr(fptr-&gt;f);</div><div class='del'>-	    /* need to keep stdio objects */</div><div class='del'>-	    if (dup2(fd2, fd) &lt; 0)</div><div class='del'>-		rb_sys_fail(orig-&gt;path);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    FILE *f2 = fptr-&gt;f2;</div><div class='del'>-	    int m = fptr-&gt;mode;</div><div class='del'>-	    fclose(fptr-&gt;f);</div><div class='del'>-	    fptr-&gt;f = f2;</div><div class='del'>-	    fptr-&gt;f2 = NULL;</div><div class='del'>-	    fptr-&gt;mode &amp;= (m &amp; FMODE_READABLE) ? ~FMODE_READABLE : ~FMODE_WRITABLE;</div><div class='del'>-	    if (dup2(fd2, fd) &lt; 0)</div><div class='del'>-		rb_sys_fail(orig-&gt;path);</div><div class='del'>-	    if (f2) {</div><div class='del'>-		fptr-&gt;f = rb_fdopen(fd, "r");</div><div class='del'>-		fptr-&gt;f2 = f2;</div><div class='del'>-	    }</div><div class='del'>-	    else {</div><div class='del'>-		fptr-&gt;f = rb_fdopen(fd, mode);</div><div class='del'>-	    }</div><div class='del'>-	    fptr-&gt;mode = m;</div><div class='del'>-	}</div><div class='del'>-	rb_thread_fd_close(fd);</div><div class='del'>-	if ((orig-&gt;mode &amp; FMODE_READABLE) &amp;&amp; pos &gt;= 0) {</div><div class='del'>-	    io_seek(fptr, pos, SEEK_SET);</div><div class='del'>-	    io_seek(orig, pos, SEEK_SET);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (fptr-&gt;f2 &amp;&amp; fd != fileno(fptr-&gt;f2)) {</div><div class='del'>-	fd = fileno(fptr-&gt;f2);</div><div class='del'>-	if (!orig-&gt;f2) {</div><div class='del'>-	    fclose(fptr-&gt;f2);</div><div class='del'>-	    rb_thread_fd_close(fd);</div><div class='del'>-	    fptr-&gt;f2 = 0;</div><div class='del'>-	}</div><div class='del'>-	else if (fd != (fd2 = fileno(orig-&gt;f2))) {</div><div class='del'>-	    fclose(fptr-&gt;f2);</div><div class='del'>-	    rb_thread_fd_close(fd);</div><div class='del'>-	    if (dup2(fd2, fd) &lt; 0)</div><div class='del'>-		rb_sys_fail(orig-&gt;path);</div><div class='del'>-	    fptr-&gt;f2 = rb_fdopen(fd, "w");</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (fptr-&gt;mode &amp; FMODE_BINMODE) {</div><div class='del'>-	rb_io_binmode(io);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    RBASIC(io)-&gt;klass = RBASIC(nfile)-&gt;klass;</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.reopen(other_IO)         =&gt; ios </div><div class='del'>- *     ios.reopen(path, mode_str)   =&gt; ios</div><div class='del'>- *  </div><div class='del'>- *  Reassociates &lt;em&gt;ios&lt;/em&gt; with the I/O stream given in</div><div class='del'>- *  &lt;i&gt;other_IO&lt;/i&gt; or to a new stream opened on &lt;i&gt;path&lt;/i&gt;. This may</div><div class='del'>- *  dynamically change the actual class of this stream.</div><div class='del'>- *     </div><div class='del'>- *     f1 = File.new("testfile")</div><div class='del'>- *     f2 = File.new("testfile")</div><div class='del'>- *     f2.readlines[0]   #=&gt; "This is line one\n"</div><div class='del'>- *     f2.reopen(f1)     #=&gt; #&lt;File:testfile&gt;</div><div class='del'>- *     f2.readlines[0]   #=&gt; "This is line one\n"</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_reopen(argc, argv, file)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE file;</div><div class='del'>-{</div><div class='del'>-    VALUE fname, nmode;</div><div class='del'>-    const char *mode;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    if (rb_scan_args(argc, argv, "11", &amp;fname, &amp;nmode) == 1) {</div><div class='del'>-	VALUE tmp = rb_io_check_io(fname);</div><div class='del'>-	if (!NIL_P(tmp)) {</div><div class='del'>-	    return io_reopen(file, tmp);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-    rb_io_taint_check(file);</div><div class='del'>-    fptr = RFILE(file)-&gt;fptr;</div><div class='del'>-    if (!fptr) {</div><div class='del'>-	fptr = RFILE(file)-&gt;fptr = ALLOC(rb_io_t);</div><div class='del'>-	MEMZERO(fptr, rb_io_t, 1);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (!NIL_P(nmode)) {</div><div class='del'>-	fptr-&gt;mode = rb_io_mode_flags(StringValueCStr(nmode));</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (fptr-&gt;path) {</div><div class='del'>-	free(fptr-&gt;path);</div><div class='del'>-	fptr-&gt;path = 0;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    fptr-&gt;path = strdup(StringValueCStr(fname));</div><div class='del'>-    mode = rb_io_flags_mode(fptr-&gt;mode);</div><div class='del'>-    if (!fptr-&gt;f) {</div><div class='del'>-	fptr-&gt;f = rb_fopen(fptr-&gt;path, mode);</div><div class='del'>-	if (fptr-&gt;f2) {</div><div class='del'>-	    fclose(fptr-&gt;f2);</div><div class='del'>-	    fptr-&gt;f2 = 0;</div><div class='del'>-	}</div><div class='del'>-	return file;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if (freopen(fptr-&gt;path, mode, fptr-&gt;f) == 0) {</div><div class='del'>-	rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    }</div><div class='del'>-#ifdef USE_SETVBUF</div><div class='del'>-    if (setvbuf(fptr-&gt;f, NULL, _IOFBF, 0) != 0)</div><div class='del'>-	rb_warn("setvbuf() can't be honoured for %s", fptr-&gt;path);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-    if (fptr-&gt;f2) {</div><div class='del'>-	if (freopen(fptr-&gt;path, "w", fptr-&gt;f2) == 0) {</div><div class='del'>-	    rb_sys_fail(fptr-&gt;path);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return file;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* :nodoc: */</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_init_copy(dest, io)</div><div class='del'>-    VALUE dest, io;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr, *orig;</div><div class='del'>-    int fd;</div><div class='del'>-    const char *mode;</div><div class='del'>-</div><div class='del'>-    io = rb_io_get_io(io);</div><div class='del'>-    if (dest == io) return dest;</div><div class='del'>-    GetOpenFile(io, orig);</div><div class='del'>-    MakeOpenFile(dest, fptr);</div><div class='del'>-</div><div class='del'>-    if (orig-&gt;f2) {</div><div class='del'>-	io_fflush(orig-&gt;f2, orig);</div><div class='del'>-	fseeko(orig-&gt;f, 0L, SEEK_CUR);</div><div class='del'>-    }</div><div class='del'>-    else if (orig-&gt;mode &amp; FMODE_WRITABLE) {</div><div class='del'>-	io_fflush(orig-&gt;f, orig);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	fseeko(orig-&gt;f, 0L, SEEK_CUR);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    /* copy rb_io_t structure */</div><div class='del'>-    fptr-&gt;mode = orig-&gt;mode;</div><div class='del'>-    fptr-&gt;pid = orig-&gt;pid;</div><div class='del'>-    fptr-&gt;lineno = orig-&gt;lineno;</div><div class='del'>-    if (orig-&gt;path) fptr-&gt;path = strdup(orig-&gt;path);</div><div class='del'>-    fptr-&gt;finalize = orig-&gt;finalize;</div><div class='del'>-</div><div class='del'>-    switch (fptr-&gt;mode &amp; FMODE_READWRITE) {</div><div class='del'>-      case FMODE_READABLE:</div><div class='del'>-      default:</div><div class='del'>-	mode = "r"; break;</div><div class='del'>-      case FMODE_WRITABLE:</div><div class='del'>-	mode = "w"; break;</div><div class='del'>-      case FMODE_READWRITE:</div><div class='del'>-	if (orig-&gt;f2) mode = "r";</div><div class='del'>-	else          mode = "r+";</div><div class='del'>-	break;</div><div class='del'>-    }</div><div class='del'>-    fd = ruby_dup(fileno(orig-&gt;f));</div><div class='del'>-    fptr-&gt;f = rb_fdopen(fd, mode);</div><div class='del'>-    fseeko(fptr-&gt;f, ftello(orig-&gt;f), SEEK_SET);</div><div class='del'>-    if (orig-&gt;f2) {</div><div class='del'>-	if (fileno(orig-&gt;f) != fileno(orig-&gt;f2)) {</div><div class='del'>-	    fd = ruby_dup(fileno(orig-&gt;f2));</div><div class='del'>-	}</div><div class='del'>-	fptr-&gt;f2 = rb_fdopen(fd, "w");</div><div class='del'>-	fseeko(fptr-&gt;f2, ftello(orig-&gt;f2), SEEK_SET);</div><div class='del'>-    }</div><div class='del'>-    if (fptr-&gt;mode &amp; FMODE_BINMODE) {</div><div class='del'>-	rb_io_binmode(dest);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return dest;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.printf(format_string [, obj, ...] )   =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Formats and writes to &lt;em&gt;ios&lt;/em&gt;, converting parameters under</div><div class='del'>- *  control of the format string. See &lt;code&gt;Kernel#sprintf&lt;/code&gt;</div><div class='del'>- *  for details.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_printf(argc, argv, out)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE argv[];</div><div class='del'>-    VALUE out;</div><div class='del'>-{</div><div class='del'>-    rb_io_write(out, rb_f_sprintf(argc, argv));</div><div class='del'>-    return Qnil;</div><div class='add'>+    return port;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     printf(io, string [, obj ... ] )    =&gt; nil</div><div class='del'>- *     printf(string [, obj ... ] )        =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Equivalent to:</div><div class='del'>- *     io.write(sprintf(string, obj, ...)</div><div class='del'>- *  or</div><div class='del'>- *     $stdout.write(sprintf(string, obj, ...)</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_f_printf(argc, argv)</div><div class='add'>+Fprintf(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE argv[];</div><div class='ctx'> {</div><div class='ctx'>     VALUE out;</div><div class='ctx'> </div><div class='del'>-    if (argc == 0) return Qnil;</div><div class='del'>-    if (TYPE(argv[0]) == T_STRING) {</div><div class='del'>-	out = rb_stdout;</div><div class='add'>+    if (argc == 1) return Qnil;</div><div class='add'>+    if (TYPE(argv[1]) == T_STRING) {</div><div class='add'>+	out = rb_defout;</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	out = argv[0];</div><div class='add'>+    else if (obj_responds_to(argv[1], INT2FIX(id_write))) {</div><div class='add'>+	out = argv[1];</div><div class='ctx'> 	argv++;</div><div class='ctx'> 	argc--;</div><div class='ctx'>     }</div><div class='del'>-    rb_io_write(out, rb_f_sprintf(argc, argv));</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'>- *     ios.print()             =&gt; nil</div><div class='del'>- *     ios.print(obj, ...)     =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Writes the given object(s) to &lt;em&gt;ios&lt;/em&gt;. The stream must be</div><div class='del'>- *  opened for writing. If the output record separator (&lt;code&gt;$\\&lt;/code&gt;)</div><div class='del'>- *  is not &lt;code&gt;nil&lt;/code&gt;, it will be appended to the output. If no</div><div class='del'>- *  arguments are given, prints &lt;code&gt;$_&lt;/code&gt;. Objects that aren't</div><div class='del'>- *  strings will be converted by calling their &lt;code&gt;to_s&lt;/code&gt; method.</div><div class='del'>- *  With no argument, prints the contents of the variable &lt;code&gt;$_&lt;/code&gt;.</div><div class='del'>- *  Returns &lt;code&gt;nil&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     $stdout.print("This is ", 100, " percent.\n")</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     This is 100 percent.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_print(argc, argv, out)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE out;</div><div class='del'>-{</div><div class='del'>-    int i;</div><div class='del'>-    VALUE line;</div><div class='del'>-</div><div class='del'>-    /* if no argument given, print `$_' */</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	argc = 1;</div><div class='del'>-	line = rb_lastline_get();</div><div class='del'>-	argv = &amp;line;</div><div class='del'>-    }</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	if (!NIL_P(rb_output_fs) &amp;&amp; i&gt;0) {</div><div class='del'>-	    rb_io_write(out, rb_output_fs);</div><div class='del'>-	}</div><div class='del'>-	switch (TYPE(argv[i])) {</div><div class='del'>-	  case T_NIL:</div><div class='del'>-	    rb_io_write(out, rb_str_new2("nil"));</div><div class='del'>-	    break;</div><div class='del'>-	  default:</div><div class='del'>-	    rb_io_write(out, argv[i]);</div><div class='del'>-	    break;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(rb_output_rs)) {</div><div class='del'>-	rb_io_write(out, rb_output_rs);</div><div class='add'>+    else {</div><div class='add'>+	Fail("output must responds to `write'");</div><div class='ctx'>     }</div><div class='ctx'> </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'>- *     print(obj, ...)    =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Prints each object in turn to &lt;code&gt;$stdout&lt;/code&gt;. If the output</div><div class='del'>- *  field separator (&lt;code&gt;$,&lt;/code&gt;) is not +nil+, its</div><div class='del'>- *  contents will appear between each field. If the output record</div><div class='del'>- *  separator (&lt;code&gt;$\\&lt;/code&gt;) is not +nil+, it will be</div><div class='del'>- *  appended to the output. If no arguments are given, prints</div><div class='del'>- *  &lt;code&gt;$_&lt;/code&gt;. Objects that aren't strings will be converted by</div><div class='del'>- *  calling their &lt;code&gt;to_s&lt;/code&gt; method.</div><div class='del'>- *     </div><div class='del'>- *     print "cat", [1,2,3], 99, "\n"</div><div class='del'>- *     $, = ", "</div><div class='del'>- *     $\ = "\n"</div><div class='del'>- *     print "cat", [1,2,3], 99</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     cat12399</div><div class='del'>- *     cat, 1, 2, 3, 99</div><div class='del'>- */</div><div class='add'>+    rb_funcall(out, id_write, 1, Fsprintf(argc, argv));</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_f_print(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    rb_io_print(argc, argv, rb_stdout);</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'>- *     ios.putc(obj)    =&gt; obj</div><div class='del'>- *  </div><div class='del'>- *  If &lt;i&gt;obj&lt;/i&gt; is &lt;code&gt;Numeric&lt;/code&gt;, write the character whose</div><div class='del'>- *  code is &lt;i&gt;obj&lt;/i&gt;, otherwise write the first character of the</div><div class='del'>- *  string representation of  &lt;i&gt;obj&lt;/i&gt; to &lt;em&gt;ios&lt;/em&gt;.</div><div class='del'>- *     </div><div class='del'>- *     $stdout.putc "A"</div><div class='del'>- *     $stdout.putc 65</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     AA</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_putc(io, ch)</div><div class='del'>-    VALUE io, ch;</div><div class='add'>+static void</div><div class='add'>+obj_print(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    char c = NUM2CHR(ch);</div><div class='del'>-</div><div class='del'>-    rb_io_write(io, rb_str_new(&amp;c, 1));</div><div class='del'>-    return ch;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     putc(int)   =&gt; int</div><div class='del'>- *  </div><div class='del'>- *  Equivalent to:</div><div class='del'>- *</div><div class='del'>- *    $stdout.putc(int)</div><div class='del'>- */</div><div class='add'>+    int i;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_f_putc(recv, ch)</div><div class='del'>-    VALUE recv, ch;</div><div class='del'>-{</div><div class='del'>-    return rb_io_putc(rb_stdout, ch);</div><div class='add'>+    Fio_write(rb_defout, obj);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-io_puts_ary(ary, out)</div><div class='del'>-    VALUE ary, out;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp;</div><div class='del'>-    long i;</div><div class='del'>-</div><div class='del'>-    for (i=0; i&lt;RARRAY(ary)-&gt;len; i++) {</div><div class='del'>-	tmp = RARRAY(ary)-&gt;ptr[i];</div><div class='del'>-	if (rb_inspecting_p(tmp)) {</div><div class='del'>-	    tmp = rb_str_new2("[...]");</div><div class='del'>-	}</div><div class='del'>-	rb_io_puts(1, &amp;tmp, out);</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'>- *     ios.puts(obj, ...)    =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Writes the given objects to &lt;em&gt;ios&lt;/em&gt; as with</div><div class='del'>- *  &lt;code&gt;IO#print&lt;/code&gt;. Writes a record separator (typically a</div><div class='del'>- *  newline) after any that do not already end with a newline sequence.</div><div class='del'>- *  If called with an array argument, writes each element on a new line.</div><div class='del'>- *  If called without arguments, outputs a single record separator.</div><div class='del'>- *     </div><div class='del'>- *     $stdout.puts("this", "is", "a", "test")</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     this</div><div class='del'>- *     is</div><div class='del'>- *     a</div><div class='del'>- *     test</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_io_puts(argc, argv, out)</div><div class='add'>+Fprint(argc, argv)</div><div class='ctx'>     int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE out;</div><div class='add'>+    VALUE argv[];</div><div class='ctx'> {</div><div class='ctx'>     int i;</div><div class='del'>-    VALUE line;</div><div class='ctx'> </div><div class='del'>-    /* if no argument given, print newline. */</div><div class='del'>-    if (argc == 0) {</div><div class='del'>-	rb_io_write(out, rb_default_rs);</div><div class='del'>-	return Qnil;</div><div class='add'>+    /* if no argument given, print recv */</div><div class='add'>+    if (argc == 1) {</div><div class='add'>+	obj_print(argv[0]);</div><div class='ctx'>     }</div><div class='del'>-    for (i=0; i&lt;argc; i++) {</div><div class='del'>-	if (NIL_P(argv[i])) {</div><div class='del'>-	    line = rb_str_new2("nil");</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    line = rb_check_array_type(argv[i]);</div><div class='del'>-	    if (!NIL_P(line)) {</div><div class='del'>-		rb_protect_inspect(io_puts_ary, line, out);</div><div class='del'>-		continue;</div><div class='add'>+    else {</div><div class='add'>+	for (i=1; i&lt;argc; i++) {</div><div class='add'>+	    obj_print(argv[i]);</div><div class='add'>+	    if (OFS &amp;&amp; i&gt;1) {</div><div class='add'>+		obj_print(OFS);</div><div class='ctx'> 	    }</div><div class='del'>-	    line = rb_obj_as_string(argv[i]);</div><div class='del'>-	}</div><div class='del'>-	rb_io_write(out, line);</div><div class='del'>-	if (RSTRING(line)-&gt;len == 0 ||</div><div class='del'>-            RSTRING(line)-&gt;ptr[RSTRING(line)-&gt;len-1] != '\n') {</div><div class='del'>-	    rb_io_write(out, rb_default_rs);</div><div class='ctx'> 	}</div><div class='ctx'>     }</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'>- *     puts(obj, ...)    =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Equivalent to </div><div class='del'>- *</div><div class='del'>- *      $stdout.puts(obj, ...)</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_puts(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    rb_io_puts(argc, argv, rb_stdout);</div><div class='del'>-    return Qnil;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_p(obj)			/* for debug print within C code */</div><div class='del'>-    VALUE obj;</div><div class='del'>-{</div><div class='del'>-    rb_io_write(rb_stdout, rb_obj_as_string(rb_inspect(obj)));</div><div class='del'>-    rb_io_write(rb_stdout, rb_default_rs);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     p(obj, ...)    =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  For each object, directly writes</div><div class='del'>- *  _obj_.+inspect+ followed by the current output</div><div class='del'>- *  record separator to the program's standard output.</div><div class='del'>- *     </div><div class='del'>- *     S = Struct.new(:name, :state)</div><div class='del'>- *     s = S['dave', 'TX']</div><div class='del'>- *     p s</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     #&lt;S name="dave", state="TX"&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_p(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</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_p(argv[i]);</div><div class='del'>-    }</div><div class='del'>-    if (TYPE(rb_stdout) == T_FILE) {</div><div class='del'>-	rb_io_flush(rb_stdout);</div><div class='add'>+    if (ORS) {</div><div class='add'>+	obj_print(ORS);</div><div class='ctx'>     }</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.display(port=$&gt;)    =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Prints &lt;i&gt;obj&lt;/i&gt; on the given port (default &lt;code&gt;$&gt;&lt;/code&gt;).</div><div class='del'>- *  Equivalent to:</div><div class='del'>- *     </div><div class='del'>- *     def display(port=$&gt;)</div><div class='del'>- *       port.write self</div><div class='del'>- *     end</div><div class='del'>- *     </div><div class='del'>- *  For example:</div><div class='del'>- *     </div><div class='del'>- *     1.display</div><div class='del'>- *     "cat".display</div><div class='del'>- *     [ 4, 5, 6 ].display</div><div class='del'>- *     puts</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     1cat456</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_obj_display(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 out;</div><div class='del'>-</div><div class='del'>-    if (rb_scan_args(argc, argv, "01", &amp;out) == 0) {</div><div class='del'>-	out = rb_stdout;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    rb_io_write(out, self);</div><div class='ctx'> </div><div class='ctx'>     return Qnil;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-rb_write_error2(mesg, len)</div><div class='del'>-    const char *mesg;</div><div class='del'>-    long len;</div><div class='del'>-{</div><div class='del'>-    rb_io_write(rb_stderr, rb_str_new(mesg, len));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-void</div><div class='del'>-rb_write_error(mesg)</div><div class='del'>-    const char *mesg;</div><div class='del'>-{</div><div class='del'>-    rb_write_error2(mesg, strlen(mesg));</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-must_respond_to(mid, val, id)</div><div class='del'>-    ID mid;</div><div class='del'>-    VALUE val;</div><div class='del'>-    ID id;</div><div class='del'>-{</div><div class='del'>-    if (!rb_respond_to(val, mid)) {</div><div class='del'>-	rb_raise(rb_eTypeError, "%s must have %s method, %s given",</div><div class='del'>-		 rb_id2name(id), rb_id2name(mid),</div><div class='del'>-		 rb_obj_classname(val));</div><div class='del'>-    }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-stdout_setter(val, id, variable)</div><div class='del'>-    VALUE val;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE *variable;</div><div class='del'>-{</div><div class='del'>-    must_respond_to(id_write, val, id);</div><div class='del'>-    *variable = val;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-defout_setter(val, id, variable)</div><div class='del'>-    VALUE val;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE *variable;</div><div class='del'>-{</div><div class='del'>-    stdout_setter(val, id, variable);</div><div class='del'>-    rb_warn("$defout is obsolete; use $stdout instead");</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-deferr_setter(val, id, variable)</div><div class='del'>-    VALUE val;</div><div class='del'>-    ID id;</div><div class='del'>-    VALUE *variable;</div><div class='del'>-{</div><div class='del'>-    stdout_setter(val, id, variable);</div><div class='del'>-    rb_warn("$deferr is obsolete; use $stderr instead");</div><div class='del'>-}</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-prep_stdio(f, mode, klass)</div><div class='add'>+prep_stdio(f, mode)</div><div class='ctx'>     FILE *f;</div><div class='ctx'>     int mode;</div><div class='del'>-    VALUE klass;</div><div class='ctx'> {</div><div class='del'>-    rb_io_t *fp;</div><div class='del'>-    VALUE io = io_alloc(klass);</div><div class='del'>-</div><div class='del'>-    MakeOpenFile(io, fp);</div><div class='del'>-#ifdef __CYGWIN__</div><div class='del'>-    if (!isatty(fileno(f))) {</div><div class='del'>-	mode |= O_BINARY;</div><div class='del'>-	setmode(fileno(f), O_BINARY);</div><div class='del'>-    }</div><div class='del'>-#endif</div><div class='add'>+    VALUE obj = obj_alloc(C_IO);</div><div class='add'>+    OpenFile *fp;</div><div class='add'>+</div><div class='add'>+    MakeOpenFile(obj, fp);</div><div class='ctx'>     fp-&gt;f = f;</div><div class='ctx'>     fp-&gt;mode = mode;</div><div class='ctx'> </div><div class='del'>-    return io;</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-prep_path(io, path)</div><div class='del'>-    VALUE io;</div><div class='del'>-    char *path;</div><div class='del'>-{</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    if (fptr-&gt;path) rb_bug("illegal prep_path() call");</div><div class='del'>-    fptr-&gt;path = strdup(path);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.new(fd, mode)   =&gt; io</div><div class='del'>- *  </div><div class='del'>- *  Returns a new &lt;code&gt;IO&lt;/code&gt; object (a stream) for the given</div><div class='del'>- *  integer file descriptor and mode string. See also</div><div class='del'>- *  &lt;code&gt;IO#fileno&lt;/code&gt; and &lt;code&gt;IO::for_fd&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = IO.new(2,"w")      # '2' is standard error</div><div class='del'>- *     $stderr.puts "Hello"</div><div class='del'>- *     a.puts "World"</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Hello</div><div class='del'>- *     World</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_initialize(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'>-    VALUE fnum, mode;</div><div class='del'>-    rb_io_t *fp;</div><div class='del'>-    int fd, flags;</div><div class='del'>-</div><div class='del'>-    rb_secure(4);</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;fnum, &amp;mode);</div><div class='del'>-    fd = NUM2INT(fnum);</div><div class='del'>-    if (argc == 2) {</div><div class='del'>-	if (FIXNUM_P(mode)) {</div><div class='del'>-	    flags = FIX2LONG(mode);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    SafeStringValue(mode);</div><div class='del'>-	    flags = rb_io_mode_modenum(StringValueCStr(mode));</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-#if defined(HAVE_FCNTL) &amp;&amp; defined(F_GETFL)</div><div class='del'>-	flags = fcntl(fd, F_GETFL);</div><div class='del'>-	if (flags == -1) rb_sys_fail(0);</div><div class='del'>-#else</div><div class='del'>-	flags = O_RDONLY;</div><div class='del'>-#endif</div><div class='del'>-    }</div><div class='del'>-    MakeOpenFile(io, fp);</div><div class='del'>-    fp-&gt;mode = rb_io_modenum_flags(flags);</div><div class='del'>-    fp-&gt;f = rb_fdopen(fd, rb_io_modenum_mode(flags));</div><div class='del'>-</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     File.new(filename, mode="r")            =&gt; file</div><div class='del'>- *     File.new(filename [, mode [, perm]])    =&gt; file</div><div class='del'>- *  </div><div class='del'>-</div><div class='del'>- *  Opens the file named by _filename_ according to</div><div class='del'>- *  _mode_ (default is ``r'') and returns a new</div><div class='del'>- *  &lt;code&gt;File&lt;/code&gt; object. See the description of class +IO+ for</div><div class='del'>- *  a description of _mode_. The file mode may optionally be</div><div class='del'>- *  specified as a +Fixnum+ by _or_-ing together the</div><div class='del'>- *  flags (O_RDONLY etc, again described under +IO+). Optional</div><div class='del'>- *  permission bits may be given in _perm_. These mode and permission</div><div class='del'>- *  bits are platform dependent; on Unix systems, see</div><div class='del'>- *  &lt;code&gt;open(2)&lt;/code&gt; for details.</div><div class='del'>- *</div><div class='del'>- *     f = File.new("testfile", "r")</div><div class='del'>- *     f = File.new("newfile",  "w+")</div><div class='del'>- *     f = File.new("newfile", File::CREAT|File::TRUNC|File::RDWR, 0644)</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_file_initialize(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'>-    if (RFILE(io)-&gt;fptr) {</div><div class='del'>-	rb_raise(rb_eRuntimeError, "reinitializing File");</div><div class='del'>-    }</div><div class='del'>-    if (0 &lt; argc &amp;&amp; argc &lt; 3) {</div><div class='del'>-	VALUE fd = rb_check_convert_type(argv[0], T_FIXNUM, "Fixnum", "to_int");</div><div class='del'>-</div><div class='del'>-	if (!NIL_P(fd)) {</div><div class='del'>-	    argv[0] = fd;</div><div class='del'>-	    return rb_io_initialize(argc, argv, io);</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    rb_open_file(argc, argv, io);</div><div class='del'>-</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.new(fd, mode_string)   =&gt; io</div><div class='del'>- *  </div><div class='del'>- *  Returns a new &lt;code&gt;IO&lt;/code&gt; object (a stream) for the given</div><div class='del'>- *  integer file descriptor and mode string. See also</div><div class='del'>- *  &lt;code&gt;IO#fileno&lt;/code&gt; and &lt;code&gt;IO::for_fd&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = IO.new(2,"w")      # '2' is standard error</div><div class='del'>- *     $stderr.puts "Hello"</div><div class='del'>- *     a.puts "World"</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     Hello</div><div class='del'>- *     World</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_s_new(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    if (rb_block_given_p()) {</div><div class='del'>-	const char *cname = rb_class2name(klass);</div><div class='del'>-</div><div class='del'>-	rb_warn("%s::new() does not take block; use %s::open() instead",</div><div class='del'>-		cname, cname);</div><div class='del'>-    }</div><div class='del'>-    return rb_class_new_instance(argc, argv, klass);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.for_fd(fd, mode)    =&gt; io</div><div class='del'>- *  </div><div class='del'>- *  Synonym for &lt;code&gt;IO::new&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_s_for_fd(argc, argv, klass)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-    VALUE io = rb_obj_alloc(klass);</div><div class='del'>-    rb_io_initialize(argc, argv, io);</div><div class='del'>-    return io;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static int binmode = 0;</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_forward(int argc, VALUE *argv)</div><div class='del'>-{</div><div class='del'>-    return rb_funcall3(current_file, ruby_frame-&gt;last_func, argc, argv);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#define ARGF_FORWARD(argc, argv) do {\</div><div class='del'>-  if (TYPE(current_file) != T_FILE)\</div><div class='del'>-     return argf_forward(argc, argv);\</div><div class='del'>-} while (0)</div><div class='del'>-#define NEXT_ARGF_FORWARD(argc, argv) do {\</div><div class='del'>-     if (!next_argv()) return Qnil;\</div><div class='del'>-     ARGF_FORWARD(argc, argv);\</div><div class='del'>-} while (0)</div><div class='del'>-</div><div class='del'>-static void</div><div class='del'>-argf_close(file)</div><div class='del'>-    VALUE file;</div><div class='del'>-{</div><div class='del'>-    if (TYPE(file) == T_FILE)</div><div class='del'>-	rb_io_close(file);</div><div class='del'>-    else</div><div class='del'>-	rb_funcall3(file, rb_intern("close"), 0, 0);</div><div class='del'>-}</div><div class='add'>+static VALUE filename = Qnil, file = Qnil;</div><div class='add'>+static int gets_lineno;</div><div class='add'>+static int init_p = 0, next_p = 0;</div><div class='ctx'> </div><div class='ctx'> static int</div><div class='ctx'> next_argv()</div><div class='ctx'> {</div><div class='del'>-    extern VALUE rb_argv;</div><div class='add'>+    extern VALUE Argv;</div><div class='ctx'>     char *fn;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    int stdout_binmode = 0;</div><div class='del'>-</div><div class='del'>-    if (TYPE(rb_stdout) == T_FILE) {</div><div class='del'>-        GetOpenFile(rb_stdout, fptr);</div><div class='del'>-        if (fptr-&gt;mode &amp; FMODE_BINMODE)</div><div class='del'>-            stdout_binmode = 1;</div><div class='del'>-    }</div><div class='ctx'> </div><div class='ctx'>     if (init_p == 0) {</div><div class='del'>-	if (RARRAY(rb_argv)-&gt;len &gt; 0) {</div><div class='add'>+	if (RARRAY(Argv)-&gt;len &gt; 0) {</div><div class='ctx'> 	    next_p = 1;</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='ctx'> 	    next_p = -1;</div><div class='add'>+	    file = rb_stdin;</div><div class='ctx'> 	}</div><div class='ctx'> 	init_p = 1;</div><div class='ctx'> 	gets_lineno = 0;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='add'>+  retry:</div><div class='ctx'>     if (next_p == 1) {</div><div class='ctx'> 	next_p = 0;</div><div class='del'>-      retry:</div><div class='del'>-	if (RARRAY(rb_argv)-&gt;len &gt; 0) {</div><div class='del'>-	    filename = rb_ary_shift(rb_argv);</div><div class='del'>-	    fn = StringValueCStr(filename);</div><div class='del'>-	    if (strlen(fn) == 1 &amp;&amp; fn[0] == '-') {</div><div class='del'>-		current_file = rb_stdin;</div><div class='del'>-		if (ruby_inplace_mode) {</div><div class='del'>-		    rb_warn("Can't do inplace edit for stdio; skipping");</div><div class='del'>-		    goto retry;</div><div class='add'>+	if (RARRAY(Argv)-&gt;len &gt; 0) {</div><div class='add'>+	    filename = Fary_shift(Argv);</div><div class='add'>+	    fn = RSTRING(filename)-&gt;ptr; </div><div class='add'>+	    if (RSTRING(filename)-&gt;len == 1 &amp;&amp; fn[0] == '-') {</div><div class='add'>+		file = rb_stdin;</div><div class='add'>+		if (inplace) {</div><div class='add'>+		    rb_defout = rb_stdout;</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	    else {</div><div class='del'>-		FILE *fr = rb_fopen(fn, "r");</div><div class='add'>+		FILE *fr = fopen(fn, "r");</div><div class='ctx'> </div><div class='del'>-		if (ruby_inplace_mode) {</div><div class='del'>-		    struct stat st;</div><div class='del'>-#ifndef NO_SAFE_RENAME</div><div class='del'>-		    struct stat st2;</div><div class='del'>-#endif</div><div class='add'>+		if (inplace) {</div><div class='add'>+		    struct stat st, st2;</div><div class='ctx'> 		    VALUE str;</div><div class='ctx'> 		    FILE *fw;</div><div class='ctx'> </div><div class='del'>-		    if (TYPE(rb_stdout) == T_FILE &amp;&amp; rb_stdout != orig_stdout) {</div><div class='del'>-			rb_io_close(rb_stdout);</div><div class='add'>+		    if (!*inplace) {</div><div class='add'>+			Fatal("Can't do inplace edit without backup");</div><div class='ctx'> 		    }</div><div class='del'>-		    fstat(fileno(fr), &amp;st);</div><div class='del'>-		    if (*ruby_inplace_mode) {</div><div class='del'>-			str = rb_str_new2(fn);</div><div class='del'>-#ifdef NO_LONG_FNAME</div><div class='del'>-                        ruby_add_suffix(str, ruby_inplace_mode);</div><div class='del'>-#else</div><div class='del'>-			rb_str_cat2(str, ruby_inplace_mode);</div><div class='del'>-#endif</div><div class='del'>-#ifdef NO_SAFE_RENAME</div><div class='del'>-			(void)fclose(fr);</div><div class='del'>-			(void)unlink(RSTRING(str)-&gt;ptr);</div><div class='del'>-			(void)rename(fn, RSTRING(str)-&gt;ptr);</div><div class='del'>-			fr = rb_fopen(RSTRING(str)-&gt;ptr, "r");</div><div class='del'>-#else</div><div class='del'>-			if (rename(fn, RSTRING(str)-&gt;ptr) &lt; 0) {</div><div class='del'>-			    rb_warn("Can't rename %s to %s: %s, skipping file",</div><div class='del'>-				    fn, RSTRING(str)-&gt;ptr, strerror(errno));</div><div class='del'>-			    fclose(fr);</div><div class='del'>-			    goto retry;</div><div class='del'>-			}</div><div class='del'>-#endif</div><div class='add'>+		    if (rb_defout != rb_stdout) {</div><div class='add'>+			Fio_close(rb_defout);</div><div class='ctx'> 		    }</div><div class='del'>-		    else {</div><div class='del'>-#ifdef NO_SAFE_RENAME</div><div class='del'>-			rb_fatal("Can't do inplace edit without backup");</div><div class='del'>-#else</div><div class='del'>-			if (unlink(fn) &lt; 0) {</div><div class='del'>-			    rb_warn("Can't remove %s: %s, skipping file",</div><div class='del'>-				    fn, strerror(errno));</div><div class='del'>-			    fclose(fr);</div><div class='del'>-			    goto retry;</div><div class='del'>-			}</div><div class='del'>-#endif</div><div class='add'>+		    fstat(fileno(fr), &amp;st);</div><div class='add'>+		    str = str_new2(fn);</div><div class='add'>+		    str_cat(str, inplace, strlen(inplace));</div><div class='add'>+		    if (rename(fn, RSTRING(str)-&gt;ptr) &lt; 0) {</div><div class='add'>+			Warning("Can't rename %s to %s: %s, skipping file",</div><div class='add'>+				fn, RSTRING(str)-&gt;ptr, strerror(errno));</div><div class='add'>+			fclose(fr);</div><div class='add'>+			goto retry;</div><div class='ctx'> 		    }</div><div class='del'>-		    fw = rb_fopen(fn, "w");</div><div class='del'>-#ifndef NO_SAFE_RENAME</div><div class='add'>+		    obj_free(str);</div><div class='add'>+		    fw = fopen(fn, "w");</div><div class='ctx'> 		    fstat(fileno(fw), &amp;st2);</div><div class='del'>-#ifdef HAVE_FCHMOD</div><div class='ctx'> 		    fchmod(fileno(fw), st.st_mode);</div><div class='del'>-#else</div><div class='del'>-		    chmod(fn, st.st_mode);</div><div class='del'>-#endif</div><div class='ctx'> 		    if (st.st_uid!=st2.st_uid || st.st_gid!=st2.st_gid) {</div><div class='ctx'> 			fchown(fileno(fw), st.st_uid, st.st_gid);</div><div class='ctx'> 		    }</div><div class='del'>-#endif</div><div class='del'>-		    rb_stdout = prep_stdio(fw, FMODE_WRITABLE, rb_cFile);</div><div class='del'>-		    prep_path(rb_stdout, fn);</div><div class='del'>-		    if (stdout_binmode) rb_io_binmode(rb_stdout);</div><div class='add'>+		    rb_defout = prep_stdio(fw, FMODE_WRITABLE);</div><div class='ctx'> 		}</div><div class='del'>-		current_file = prep_stdio(fr, FMODE_READABLE, rb_cFile);</div><div class='del'>-		prep_path(current_file, fn);</div><div class='add'>+		file = prep_stdio(fr, FMODE_READABLE);</div><div class='ctx'> 	    }</div><div class='del'>-	    if (binmode) rb_io_binmode(current_file);</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='del'>-	    next_p = 1;</div><div class='del'>-	    return Qfalse;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else if (next_p == -1) {</div><div class='del'>-	current_file = rb_stdin;</div><div class='del'>-	filename = rb_str_new2("-");</div><div class='del'>-	if (ruby_inplace_mode) {</div><div class='del'>-	    rb_warn("Can't do inplace edit for stdio");</div><div class='del'>-	    rb_stdout = orig_stdout;</div><div class='add'>+	    init_p = 0;</div><div class='add'>+	    return FALSE;</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    return Qtrue;</div><div class='add'>+    return TRUE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-argf_getline(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Fgets(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE line;</div><div class='ctx'> </div><div class='ctx'>   retry:</div><div class='ctx'>     if (!next_argv()) return Qnil;</div><div class='del'>-    if (argc == 0 &amp;&amp; rb_rs == rb_default_rs) {</div><div class='del'>-	line = rb_io_gets(current_file);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE rs;</div><div class='del'>-</div><div class='del'>-	if (argc == 0) {</div><div class='del'>-	    rs = rb_rs;</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    rb_scan_args(argc, argv, "1", &amp;rs);</div><div class='del'>-	    if (!NIL_P(rs)) StringValue(rs);</div><div class='del'>-	}</div><div class='del'>-	line = rb_io_getline(rs, current_file);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(line) &amp;&amp; next_p != -1) {</div><div class='del'>-	argf_close(current_file);</div><div class='add'>+    line = Fio_gets(file);</div><div class='add'>+    if (line == Qnil &amp;&amp; next_p != -1) {</div><div class='add'>+	Fio_close(file);</div><div class='ctx'> 	next_p = 1;</div><div class='ctx'> 	goto retry;</div><div class='ctx'>     }</div><div class='del'>-    if (!NIL_P(line)) {</div><div class='del'>-	gets_lineno++;</div><div class='del'>-	lineno = INT2FIX(gets_lineno);</div><div class='del'>-    }</div><div class='del'>-    return line;</div><div class='del'>-}</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     gets(separator=$/)    =&gt; string or nil</div><div class='del'>- *  </div><div class='del'>- *  Returns (and assigns to &lt;code&gt;$_&lt;/code&gt;) the next line from the list</div><div class='del'>- *  of files in +ARGV+ (or &lt;code&gt;$*&lt;/code&gt;), or from standard</div><div class='del'>- *  input if no files are present on the command line. Returns</div><div class='del'>- *  +nil+ at end of file. The optional argument specifies the</div><div class='del'>- *  record separator. The separator is included with the contents of</div><div class='del'>- *  each record. A separator of +nil+ reads the entire</div><div class='del'>- *  contents, and a zero-length separator reads the input one paragraph</div><div class='del'>- *  at a time, where paragraphs are divided by two consecutive newlines.</div><div class='del'>- *  If multiple filenames are present in +ARGV+,</div><div class='del'>- *  +gets(nil)+ will read the contents one file at a time.</div><div class='del'>- *     </div><div class='del'>- *     ARGV &lt;&lt; "testfile"</div><div class='del'>- *     print while gets</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     This is line one</div><div class='del'>- *     This is line two</div><div class='del'>- *     This is line three</div><div class='del'>- *     And so on...</div><div class='del'>- *     </div><div class='del'>- *  The style of programming using &lt;code&gt;$_&lt;/code&gt; as an implicit</div><div class='del'>- *  parameter is gradually losing favor in the Ruby community.</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_f_gets(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE line;</div><div class='del'>-</div><div class='del'>-    if (!next_argv()) return Qnil;</div><div class='del'>-    if (TYPE(current_file) != T_FILE) {</div><div class='del'>-	line = rb_funcall3(current_file, rb_intern("gets"), argc, argv);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	line = argf_getline(argc, argv);</div><div class='del'>-    }</div><div class='del'>-    rb_lastline_set(line);</div><div class='del'>-    return line;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-VALUE</div><div class='del'>-rb_gets()</div><div class='del'>-{</div><div class='del'>-    VALUE line;</div><div class='del'>-</div><div class='del'>-    if (rb_rs != rb_default_rs) {</div><div class='del'>-	return rb_f_gets(0, 0);</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  retry:</div><div class='del'>-    if (!next_argv()) return Qnil;</div><div class='del'>-    line = rb_io_gets(current_file);</div><div class='del'>-    if (NIL_P(line) &amp;&amp; next_p != -1) {</div><div class='del'>-	argf_close(current_file);</div><div class='del'>-	next_p = 1;</div><div class='del'>-	goto retry;</div><div class='del'>-    }</div><div class='del'>-    rb_lastline_set(line);</div><div class='del'>-    if (!NIL_P(line)) {</div><div class='del'>-	gets_lineno++;</div><div class='del'>-	lineno = INT2FIX(gets_lineno);</div><div class='del'>-    }</div><div class='add'>+    gets_lineno++;</div><div class='add'>+    lineno = INT2FIX(gets_lineno);</div><div class='ctx'> </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'>- *     readline(separator=$/)   =&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Equivalent to &lt;code&gt;Kernel::gets&lt;/code&gt;, except</div><div class='del'>- *  +readline+ raises +EOFError+ at end of file.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_f_readline(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Feof(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    VALUE line;</div><div class='del'>-</div><div class='del'>-    if (!next_argv()) rb_eof_error();</div><div class='del'>-    ARGF_FORWARD(argc, argv);</div><div class='del'>-    line = rb_f_gets(argc, argv);</div><div class='del'>-    if (NIL_P(line)) {</div><div class='del'>-	rb_eof_error();</div><div class='add'>+    if (init_p == 0 &amp;&amp; !next_argv())</div><div class='add'>+	return TRUE;</div><div class='add'>+    if (Fio_eof(file)) {</div><div class='add'>+	next_p = 1;</div><div class='add'>+	return TRUE;</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return line;</div><div class='add'>+    return FALSE;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- * obsolete</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_f_getc()</div><div class='add'>+Fgetc(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-    rb_warn("getc is obsolete; use STDIN.getc instead");</div><div class='del'>-    if (TYPE(rb_stdin) != T_FILE) {</div><div class='del'>-	return rb_funcall3(rb_stdin, rb_intern("getc"), 0, 0);</div><div class='del'>-    }</div><div class='del'>-    return rb_io_getc(rb_stdin);</div><div class='add'>+    return Fio_getc(rb_stdin);</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     readlines(separator=$/)    =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Returns an array containing the lines returned by calling</div><div class='del'>- *  &lt;code&gt;Kernel.gets(&lt;i&gt;separator&lt;/i&gt;)&lt;/code&gt; until the end of file.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_f_readlines(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='add'>+Freadlines(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='ctx'>     VALUE line, ary;</div><div class='ctx'> </div><div class='del'>-    NEXT_ARGF_FORWARD(argc, argv);</div><div class='del'>-    ary = rb_ary_new();</div><div class='del'>-    while (!NIL_P(line = argf_getline(argc, argv))) {</div><div class='del'>-	rb_ary_push(ary, line);</div><div class='add'>+    ary = ary_new();</div><div class='add'>+    while (line = Fgets(obj)) {</div><div class='add'>+	Fary_push(ary, line);</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'>- *     `cmd`    =&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Returns the standard output of running _cmd_ in a subshell.</div><div class='del'>- *  The built-in syntax &lt;code&gt;%x{...}&lt;/code&gt; uses</div><div class='del'>- *  this method. Sets &lt;code&gt;$?&lt;/code&gt; to the process status.</div><div class='del'>- *     </div><div class='del'>- *     `date`                   #=&gt; "Wed Apr  9 08:56:30 CDT 2003\n"</div><div class='del'>- *     `ls testdir`.split[1]    #=&gt; "main.rb"</div><div class='del'>- *     `echo oops &amp;&amp; exit 99`   #=&gt; "oops\n"</div><div class='del'>- *     $?.exitstatus            #=&gt; 99</div><div class='del'>- */</div><div class='add'>+VALUE</div><div class='add'>+rb_check_str(val, id)</div><div class='add'>+    VALUE val;</div><div class='add'>+    ID id;</div><div class='add'>+{</div><div class='add'>+    if (val == Qnil) return TRUE;</div><div class='add'>+    if (TYPE(val) != T_STRING) {</div><div class='add'>+	Fail("value of %s must be String", rb_id2name(id));</div><div class='add'>+    }</div><div class='add'>+    return TRUE;</div><div class='add'>+}</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-rb_f_backquote(obj, str)</div><div class='del'>-    VALUE obj, str;</div><div class='add'>+VALUE</div><div class='add'>+rb_xstring(str)</div><div class='add'>+    struct RString *str;</div><div class='ctx'> {</div><div class='del'>-    volatile VALUE port;</div><div class='del'>-    VALUE result;</div><div class='del'>-    rb_io_t *fptr;</div><div class='add'>+    VALUE port, result;</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    int mask;</div><div class='ctx'> </div><div class='del'>-    SafeStringValue(str);</div><div class='del'>-    port = pipe_open(str, 0, "r");</div><div class='del'>-    if (NIL_P(port)) return rb_str_new(0,0);</div><div class='add'>+    Check_Type(str, T_STRING);</div><div class='add'>+    port = pipe_open(str-&gt;ptr, "r");</div><div class='add'>+    result = read_all(port);</div><div class='ctx'> </div><div class='ctx'>     GetOpenFile(port, fptr);</div><div class='del'>-    result = read_all(fptr, remain_size(fptr), Qnil);</div><div class='del'>-    rb_io_close(port);</div><div class='add'>+    rb_syswait(fptr-&gt;pid);</div><div class='add'>+    fptr-&gt;pid = 0;</div><div class='add'>+</div><div class='add'>+    obj_free(port);</div><div class='ctx'> </div><div class='ctx'>     return result;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#ifdef HAVE_SYS_SELECT_H</div><div class='del'>-#include &lt;sys/select.h&gt;</div><div class='del'>-#endif</div><div class='add'>+struct timeval *time_timeval();</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.select(read_array </div><div class='del'>- *               [, write_array </div><div class='del'>- *               [, error_array </div><div class='del'>- *               [, timeout]]] ) =&gt;  array  or  nil</div><div class='del'>- *  </div><div class='del'>- *  See &lt;code&gt;Kernel#select&lt;/code&gt;.</div><div class='del'>- */</div><div class='add'>+#ifdef __linux__</div><div class='add'>+#   define READ_PENDING(fp) ((fp)-&gt;_gptr &lt; (fp)-&gt;_egptr &gt; 0)</div><div class='add'>+#else</div><div class='add'>+# ifdef __SLBF</div><div class='add'>+#   define READ_PENDING(fp) ((fp)-&gt;_r &gt; 0)</div><div class='add'>+# else</div><div class='add'>+#   define READ_PENDING(fp) ((fp)-&gt;_cnt != 0)</div><div class='add'>+# endif</div><div class='add'>+#endif</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_f_select(argc, argv, obj)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE obj;</div><div class='add'>+Fselect(obj, args)</div><div class='add'>+    VALUE obj, args;</div><div class='ctx'> {</div><div class='ctx'>     VALUE read, write, except, timeout, res, list;</div><div class='ctx'>     fd_set rset, wset, eset, pset;</div><div class='ctx'>     fd_set *rp, *wp, *ep;</div><div class='del'>-    struct timeval *tp, timerec;</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    long i;</div><div class='del'>-    int max = 0, n;</div><div class='del'>-    int interrupt_flag = 0;</div><div class='del'>-    int pending = 0;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "13", &amp;read, &amp;write, &amp;except, &amp;timeout);</div><div class='del'>-    if (NIL_P(timeout)) {</div><div class='del'>-	tp = 0;</div><div class='add'>+    struct timeval time, *tp, timerec;</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    int i, max = 0, n;</div><div class='add'>+    int interrupt = 0;</div><div class='add'>+</div><div class='add'>+    rb_scan_args(args, "13", &amp;read, &amp;write, &amp;except, &amp;timeout);</div><div class='add'>+    if (timeout) {</div><div class='add'>+	tp = time_timeval(timeout);</div><div class='ctx'>     }</div><div class='ctx'>     else {</div><div class='del'>-	timerec = rb_time_interval(timeout);</div><div class='del'>-	tp = &amp;timerec;</div><div class='add'>+	tp = NULL;</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='ctx'>     FD_ZERO(&amp;pset);</div><div class='del'>-    if (!NIL_P(read)) {</div><div class='add'>+    if (read) {</div><div class='add'>+	int pending = 0;</div><div class='add'>+</div><div class='ctx'> 	Check_Type(read, T_ARRAY);</div><div class='ctx'> 	rp = &amp;rset;</div><div class='ctx'> 	FD_ZERO(rp);</div><div class='ctx'> 	for (i=0; i&lt;RARRAY(read)-&gt;len; i++) {</div><div class='del'>-	    GetOpenFile(rb_io_get_io(RARRAY(read)-&gt;ptr[i]), fptr);</div><div class='add'>+	    GetOpenFile(RARRAY(read)-&gt;ptr[i], fptr);</div><div class='ctx'> 	    FD_SET(fileno(fptr-&gt;f), rp);</div><div class='del'>-	    if (READ_DATA_PENDING(fptr-&gt;f)) { /* check for buffered data */</div><div class='add'>+	    if (READ_PENDING(fptr-&gt;f)) { /* check for buffered data */</div><div class='ctx'> 		pending++;</div><div class='ctx'> 		FD_SET(fileno(fptr-&gt;f), &amp;pset);</div><div class='ctx'> 	    }</div><div class='hunk'>@@ -4875,64 +947,71 @@ rb_f_select(argc, argv, obj)</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     else</div><div class='del'>-	rp = 0;</div><div class='add'>+	rp = NULL;</div><div class='ctx'> </div><div class='del'>-    if (!NIL_P(write)) {</div><div class='add'>+    if (write) {</div><div class='ctx'> 	Check_Type(write, T_ARRAY);</div><div class='ctx'> 	wp = &amp;wset;</div><div class='ctx'> 	FD_ZERO(wp);</div><div class='ctx'> 	for (i=0; i&lt;RARRAY(write)-&gt;len; i++) {</div><div class='del'>-	    GetOpenFile(rb_io_get_io(RARRAY(write)-&gt;ptr[i]), fptr);</div><div class='add'>+	    GetOpenFile(RARRAY(write)-&gt;ptr[i], fptr);</div><div class='ctx'> 	    FD_SET(fileno(fptr-&gt;f), wp);</div><div class='del'>-	    if (max &lt; fileno(fptr-&gt;f)) max = fileno(fptr-&gt;f);</div><div class='add'>+	    if (max &gt; fileno(fptr-&gt;f)) max = fileno(fptr-&gt;f);</div><div class='ctx'> 	    if (fptr-&gt;f2) {</div><div class='del'>-		FD_SET(fileno(fptr-&gt;f2), wp);</div><div class='add'>+		FD_SET(fileno(fptr-&gt;f2), wp);	</div><div class='ctx'> 		if (max &lt; fileno(fptr-&gt;f2)) max = fileno(fptr-&gt;f2);</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'>     else</div><div class='del'>-	wp = 0;</div><div class='add'>+	wp = NULL;</div><div class='ctx'> </div><div class='del'>-    if (!NIL_P(except)) {</div><div class='add'>+    if (except) {</div><div class='ctx'> 	Check_Type(except, T_ARRAY);</div><div class='ctx'> 	ep = &amp;eset;</div><div class='ctx'> 	FD_ZERO(ep);</div><div class='ctx'> 	for (i=0; i&lt;RARRAY(except)-&gt;len; i++) {</div><div class='del'>-	    GetOpenFile(rb_io_get_io(RARRAY(except)-&gt;ptr[i]), fptr);</div><div class='add'>+	    GetOpenFile(RARRAY(except)-&gt;ptr[i], fptr);</div><div class='ctx'> 	    FD_SET(fileno(fptr-&gt;f), ep);</div><div class='ctx'> 	    if (max &lt; fileno(fptr-&gt;f)) max = fileno(fptr-&gt;f);</div><div class='ctx'> 	    if (fptr-&gt;f2) {</div><div class='del'>-		FD_SET(fileno(fptr-&gt;f2), ep);</div><div class='del'>-		if (max &lt; fileno(fptr-&gt;f2)) max = fileno(fptr-&gt;f2);</div><div class='add'>+		FD_SET(fileno(fptr-&gt;f2), ep);	</div><div class='add'>+		if (max &gt; fileno(fptr-&gt;f2)) max = fileno(fptr-&gt;f2);</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='del'>-    else {</div><div class='del'>-	ep = 0;</div><div class='del'>-    }</div><div class='add'>+    else</div><div class='add'>+	ep = NULL;</div><div class='ctx'> </div><div class='ctx'>     max++;</div><div class='ctx'> </div><div class='del'>-    n = rb_thread_select(max, rp, wp, ep, tp);</div><div class='del'>-    if (n &lt; 0) {</div><div class='del'>-	rb_sys_fail(0);</div><div class='add'>+  retry:</div><div class='add'>+    if ((n = select(max, rp, wp, ep, tp)) &lt; 0) {</div><div class='add'>+	if (errno == EINTR) {</div><div class='add'>+	    if (tp == NULL) goto retry;</div><div class='add'>+	    interrupt = 1;</div><div class='add'>+	}</div><div class='add'>+	rb_sys_fail(Qnil);</div><div class='ctx'>     }</div><div class='del'>-    if (!pending &amp;&amp; n == 0) return Qnil; /* returns nil on timeout */</div><div class='add'>+    if (n == 0) return Qnil;</div><div class='ctx'> </div><div class='del'>-    res = rb_ary_new2(3);</div><div class='del'>-    rb_ary_push(res, rp?rb_ary_new():rb_ary_new2(0));</div><div class='del'>-    rb_ary_push(res, wp?rb_ary_new():rb_ary_new2(0));</div><div class='del'>-    rb_ary_push(res, ep?rb_ary_new():rb_ary_new2(0));</div><div class='add'>+    res = ary_new2(3);</div><div class='add'>+    RARRAY(res)-&gt;ptr[0] = rp?ary_new():Qnil;</div><div class='add'>+    RARRAY(res)-&gt;len++;</div><div class='add'>+    RARRAY(res)-&gt;ptr[1] = wp?ary_new():Qnil;</div><div class='add'>+    RARRAY(res)-&gt;len++;</div><div class='add'>+    RARRAY(res)-&gt;ptr[2] = ep?ary_new():Qnil;</div><div class='add'>+    RARRAY(res)-&gt;len++;</div><div class='add'>+</div><div class='add'>+    if (interrupt == 0) {</div><div class='ctx'> </div><div class='del'>-    if (interrupt_flag == 0) {</div><div class='ctx'> 	if (rp) {</div><div class='ctx'> 	    list = RARRAY(res)-&gt;ptr[0];</div><div class='ctx'> 	    for (i=0; i&lt; RARRAY(read)-&gt;len; i++) {</div><div class='del'>-		GetOpenFile(rb_io_get_io(RARRAY(read)-&gt;ptr[i]), fptr);</div><div class='add'>+		GetOpenFile(RARRAY(read)-&gt;ptr[i], fptr);</div><div class='ctx'> 		if (FD_ISSET(fileno(fptr-&gt;f), rp)</div><div class='ctx'> 		    || FD_ISSET(fileno(fptr-&gt;f), &amp;pset)) {</div><div class='del'>-		    rb_ary_push(list, rb_ary_entry(read, i));</div><div class='add'>+		    Fary_push(list, RARRAY(read)-&gt;ptr[i]);</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='hunk'>@@ -4940,12 +1019,12 @@ rb_f_select(argc, argv, obj)</div><div class='ctx'> 	if (wp) {</div><div class='ctx'> 	    list = RARRAY(res)-&gt;ptr[1];</div><div class='ctx'> 	    for (i=0; i&lt; RARRAY(write)-&gt;len; i++) {</div><div class='del'>-		GetOpenFile(rb_io_get_io(RARRAY(write)-&gt;ptr[i]), fptr);</div><div class='del'>-		if (FD_ISSET(fileno(fptr-&gt;f), wp)) {</div><div class='del'>-		    rb_ary_push(list, rb_ary_entry(write, i));</div><div class='add'>+		GetOpenFile(RARRAY(write)-&gt;ptr[i], fptr);</div><div class='add'>+		if (FD_ISSET(fileno(fptr-&gt;f), rp)) {</div><div class='add'>+		    Fary_push(list, RARRAY(write)-&gt;ptr[i]);</div><div class='ctx'> 		}</div><div class='del'>-		else if (fptr-&gt;f2 &amp;&amp; FD_ISSET(fileno(fptr-&gt;f2), wp)) {</div><div class='del'>-		    rb_ary_push(list, rb_ary_entry(write, i));</div><div class='add'>+		else if (fptr-&gt;f2 &amp;&amp; FD_ISSET(fileno(fptr-&gt;f2), rp)) {</div><div class='add'>+		    Fary_push(list, RARRAY(write)-&gt;ptr[i]);</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='hunk'>@@ -4953,209 +1032,88 @@ rb_f_select(argc, argv, obj)</div><div class='ctx'> 	if (ep) {</div><div class='ctx'> 	    list = RARRAY(res)-&gt;ptr[2];</div><div class='ctx'> 	    for (i=0; i&lt; RARRAY(except)-&gt;len; i++) {</div><div class='del'>-		GetOpenFile(rb_io_get_io(RARRAY(except)-&gt;ptr[i]), fptr);</div><div class='del'>-		if (FD_ISSET(fileno(fptr-&gt;f), ep)) {</div><div class='del'>-		    rb_ary_push(list, rb_ary_entry(except, i));</div><div class='add'>+		GetOpenFile(RARRAY(except)-&gt;ptr[i], fptr);</div><div class='add'>+		if (FD_ISSET(fileno(fptr-&gt;f), rp)) {</div><div class='add'>+		    Fary_push(list, RARRAY(except)-&gt;ptr[i]);</div><div class='ctx'> 		}</div><div class='del'>-		else if (fptr-&gt;f2 &amp;&amp; FD_ISSET(fileno(fptr-&gt;f2), ep)) {</div><div class='del'>-		    rb_ary_push(list, rb_ary_entry(except, i));</div><div class='add'>+		else if (fptr-&gt;f2 &amp;&amp; FD_ISSET(fileno(fptr-&gt;f2), rp)) {</div><div class='add'>+		    Fary_push(list, RARRAY(except)-&gt;ptr[i]);</div><div class='ctx'> 		}</div><div class='ctx'> 	    }</div><div class='ctx'> 	}</div><div class='ctx'>     }</div><div class='ctx'> </div><div class='del'>-    return res;			/* returns an empty array on interrupt */</div><div class='add'>+    return res;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-#if !defined(MSDOS) &amp;&amp; !defined(__human68k__)</div><div class='del'>-static int</div><div class='del'>-io_cntl(fd, cmd, narg, io_p)</div><div class='del'>-    int fd, cmd, io_p;</div><div class='del'>-    long narg;</div><div class='del'>-{</div><div class='del'>-    int retval;</div><div class='del'>-</div><div class='del'>-#ifdef HAVE_FCNTL</div><div class='del'>-    TRAP_BEG;</div><div class='del'>-# if defined(__CYGWIN__)</div><div class='del'>-    retval = io_p?ioctl(fd, cmd, (void*)narg):fcntl(fd, cmd, narg);</div><div class='del'>-# else</div><div class='del'>-    retval = io_p?ioctl(fd, cmd, narg):fcntl(fd, cmd, narg);</div><div class='del'>-# endif</div><div class='del'>-    TRAP_END;</div><div class='del'>-#else</div><div class='del'>-    if (!io_p) {</div><div class='del'>-	rb_notimplement();</div><div class='del'>-    }</div><div class='del'>-    TRAP_BEG;</div><div class='del'>-    retval = ioctl(fd, cmd, narg);</div><div class='del'>-    TRAP_END;</div><div class='del'>-#endif</div><div class='del'>-    return retval;</div><div class='del'>-}</div><div class='del'>-#endif</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_ctl(io, req, arg, io_p)</div><div class='del'>-    VALUE io, req, arg;</div><div class='add'>+void</div><div class='add'>+io_ctl(obj, req, arg, io_p)</div><div class='add'>+    VALUE obj, req;</div><div class='add'>+    struct RString *arg;</div><div class='ctx'>     int io_p;</div><div class='ctx'> {</div><div class='del'>-#if !defined(MSDOS) &amp;&amp; !defined(__human68k__)</div><div class='del'>-    int cmd = NUM2ULONG(req);</div><div class='del'>-    rb_io_t *fptr;</div><div class='del'>-    long len = 0;</div><div class='del'>-    long narg = 0;</div><div class='del'>-    int retval;</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='add'>+    int cmd = NUM2INT(req);</div><div class='add'>+    OpenFile *fptr;</div><div class='add'>+    int len, fd;</div><div class='ctx'> </div><div class='del'>-    if (NIL_P(arg) || arg == Qfalse) {</div><div class='del'>-	narg = 0;</div><div class='del'>-    }</div><div class='del'>-    else if (FIXNUM_P(arg)) {</div><div class='del'>-	narg = FIX2LONG(arg);</div><div class='del'>-    }</div><div class='del'>-    else if (arg == Qtrue) {</div><div class='del'>-	narg = 1;</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	VALUE tmp = rb_check_string_type(arg);</div><div class='add'>+    GetOpenFile(obj, fptr);</div><div class='ctx'> </div><div class='del'>-	if (NIL_P(tmp)) {</div><div class='del'>-	    narg = NUM2LONG(arg);</div><div class='del'>-	}</div><div class='del'>-	else {</div><div class='del'>-	    arg = tmp;</div><div class='ctx'> #ifdef IOCPARM_MASK</div><div class='ctx'> #ifndef IOCPARM_LEN</div><div class='ctx'> #define IOCPARM_LEN(x)  (((x) &gt;&gt; 16) &amp; IOCPARM_MASK)</div><div class='ctx'> #endif</div><div class='ctx'> #endif</div><div class='ctx'> #ifdef IOCPARM_LEN</div><div class='del'>-	    len = IOCPARM_LEN(cmd);	/* on BSDish systems we're safe */</div><div class='add'>+    len = IOCPARM_LEN(cmd);	/* on BSDish systes we're safe */</div><div class='ctx'> #else</div><div class='del'>-	    len = 256;		/* otherwise guess at what's safe */</div><div class='add'>+    len = 256;			/* otherwise guess at what's safe */</div><div class='ctx'> #endif</div><div class='del'>-	    rb_str_modify(arg);</div><div class='ctx'> </div><div class='del'>-	    if (len &lt;= RSTRING(arg)-&gt;len) {</div><div class='del'>-		len = RSTRING(arg)-&gt;len;</div><div class='del'>-	    }</div><div class='del'>-	    if (RSTRING(arg)-&gt;len &lt; len) {</div><div class='del'>-		rb_str_resize(arg, len+1);</div><div class='del'>-	    }</div><div class='del'>-	    RSTRING(arg)-&gt;ptr[len] = 17;	/* a little sanity check here */</div><div class='del'>-	    narg = (long)RSTRING(arg)-&gt;ptr;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    GetOpenFile(io, fptr);</div><div class='del'>-    retval = io_cntl(fileno(fptr-&gt;f), cmd, narg, io_p);</div><div class='del'>-    if (retval &lt; 0) rb_sys_fail(fptr-&gt;path);</div><div class='del'>-    if (TYPE(arg) == T_STRING &amp;&amp; RSTRING(arg)-&gt;ptr[len] != 17) {</div><div class='del'>-	rb_raise(rb_eArgError, "return value overflowed string");</div><div class='del'>-    }</div><div class='add'>+    Check_Type(arg, T_STRING);</div><div class='add'>+    str_modify(arg);</div><div class='ctx'> </div><div class='del'>-    if (fptr-&gt;f2 &amp;&amp; fileno(fptr-&gt;f) != fileno(fptr-&gt;f2)) {</div><div class='del'>-	/* call on f2 too; ignore result */</div><div class='del'>-	io_cntl(fileno(fptr-&gt;f2), cmd, narg, io_p);</div><div class='add'>+    if (arg-&gt;len &lt; len) {</div><div class='add'>+	str_grow(arg, len+1);</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    if (!io_p &amp;&amp; cmd == F_SETFL) {</div><div class='del'>-      if (narg &amp; O_NONBLOCK) {</div><div class='del'>-        fptr-&gt;mode |= FMODE_WSPLIT_INITIALIZED;</div><div class='del'>-        fptr-&gt;mode &amp;= ~FMODE_WSPLIT;</div><div class='del'>-      }</div><div class='del'>-      else {</div><div class='del'>-        fptr-&gt;mode &amp;= ~(FMODE_WSPLIT_INITIALIZED|FMODE_WSPLIT);</div><div class='del'>-      }</div><div class='add'>+    arg-&gt;ptr[len] = 17;</div><div class='add'>+    fd = fileno(fptr-&gt;f);</div><div class='add'>+    if (io_p?ioctl(fd, cmd, arg-&gt;ptr):fcntl(fd, cmd, arg-&gt;ptr)&lt;0) {</div><div class='add'>+	rb_sys_fail(fptr-&gt;path);</div><div class='add'>+    }</div><div class='add'>+    if (arg-&gt;ptr[len] != 17) {</div><div class='add'>+	Fail("Return value overflowed string");</div><div class='ctx'>     }</div><div class='del'>-</div><div class='del'>-    return INT2NUM(retval);</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='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.ioctl(integer_cmd, arg)    =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Provides a mechanism for issuing low-level commands to control or</div><div class='del'>- *  query I/O devices. Arguments and results are platform dependent. If</div><div class='del'>- *  &lt;i&gt;arg&lt;/i&gt; is a number, its value is passed directly. If it is a</div><div class='del'>- *  string, it is interpreted as a binary sequence of bytes. On Unix</div><div class='del'>- *  platforms, see &lt;code&gt;ioctl(2)&lt;/code&gt; for details. Not implemented on</div><div class='del'>- *  all platforms.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_ioctl(argc, argv, io)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_ioctl(obj, req, arg)</div><div class='add'>+    VALUE obj, req;</div><div class='add'>+    struct RString *arg;</div><div class='ctx'> {</div><div class='del'>-    VALUE req, arg;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;req, &amp;arg);</div><div class='del'>-    return rb_io_ctl(io, req, arg, 1);</div><div class='add'>+    io_ctl(obj, req, arg, 1);</div><div class='add'>+    return obj;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     ios.fcntl(integer_cmd, arg)    =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Provides a mechanism for issuing low-level commands to control or</div><div class='del'>- *  query file-oriented I/O streams. Arguments and results are platform</div><div class='del'>- *  dependent. If &lt;i&gt;arg&lt;/i&gt; is a number, its value is passed</div><div class='del'>- *  directly. If it is a string, it is interpreted as a binary sequence</div><div class='del'>- *  of bytes (&lt;code&gt;Array#pack&lt;/code&gt; might be a useful way to build this</div><div class='del'>- *  string). On Unix platforms, see &lt;code&gt;fcntl(2)&lt;/code&gt; for details.</div><div class='del'>- *  Not implemented on all platforms.</div><div class='del'>- */</div><div class='del'>-</div><div class='ctx'> static VALUE</div><div class='del'>-rb_io_fcntl(argc, argv, io)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE io;</div><div class='add'>+Fio_defget(obj)</div><div class='add'>+    VALUE obj;</div><div class='ctx'> {</div><div class='del'>-#ifdef HAVE_FCNTL</div><div class='del'>-    VALUE req, arg;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;req, &amp;arg);</div><div class='del'>-    return rb_io_ctl(io, req, arg, 0);</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='add'>+    return rb_defout;</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     syscall(fixnum [, args...])   =&gt; integer</div><div class='del'>- *  </div><div class='del'>- *  Calls the operating system function identified by _fixnum_,</div><div class='del'>- *  passing in the arguments, which must be either +String+</div><div class='del'>- *  objects, or +Integer+ objects that ultimately fit within</div><div class='del'>- *  a native +long+. Up to nine parameters may be passed (14</div><div class='del'>- *  on the Atari-ST). The function identified by _fixnum_ is system</div><div class='del'>- *  dependent. On some Unix systems, the numbers may be obtained from a</div><div class='del'>- *  header file called &lt;code&gt;syscall.h&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     syscall 4, 1, "hello\n", 6   # '4' is write(2) on our box</div><div class='del'>- *     </div><div class='del'>- *  &lt;em&gt;produces:&lt;/em&gt;</div><div class='del'>- *     </div><div class='del'>- *     hello</div><div class='del'>- */</div><div class='add'>+static VALUE</div><div class='add'>+Fio_defset(obj, val)</div><div class='add'>+    VALUE obj, val;</div><div class='add'>+{</div><div class='add'>+    return rb_defout = val;</div><div class='add'>+}</div><div class='ctx'> </div><div class='ctx'> static VALUE</div><div class='del'>-rb_f_syscall(argc, argv)</div><div class='add'>+Fsyscall(argc, argv)</div><div class='ctx'>     int argc;</div><div class='ctx'>     VALUE *argv;</div><div class='ctx'> {</div><div class='del'>-#if defined(HAVE_SYSCALL) &amp;&amp; !defined(__CHECKER__)</div><div class='add'>+#ifdef HAVE_SYSCALL</div><div class='ctx'> #ifdef atarist</div><div class='ctx'>     unsigned long arg[14]; /* yes, we really need that many ! */</div><div class='ctx'> #else</div><div class='hunk'>@@ -5163,35 +1121,28 @@ rb_f_syscall(argc, argv)</div><div class='ctx'> #endif</div><div class='ctx'>     int retval = -1;</div><div class='ctx'>     int i = 1;</div><div class='del'>-    int items = argc - 1;</div><div class='add'>+    int items = argc - 2;</div><div class='ctx'> </div><div class='ctx'>     /* This probably won't work on machines where sizeof(long) != sizeof(int)</div><div class='ctx'>      * or where sizeof(long) != sizeof(char*).  But such machines will</div><div class='ctx'>      * not likely have syscall implemented either, so who cares?</div><div class='ctx'>      */</div><div class='del'>-</div><div class='del'>-    rb_secure(2);</div><div class='del'>-    if (argc == 0)</div><div class='del'>-	rb_raise(rb_eArgError, "too few arguments for syscall");</div><div class='del'>-    if (argc &gt; sizeof(arg) / sizeof(arg[0]))</div><div class='del'>-	rb_raise(rb_eArgError, "too many arguments for syscall");</div><div class='del'>-    arg[0] = NUM2LONG(argv[0]); argv++;</div><div class='add'>+    argv++;			/* skip SELF */</div><div class='add'>+    arg[0] = NUM2INT(argv[0]); argv++;</div><div class='ctx'>     while (items--) {</div><div class='del'>-	VALUE v = rb_check_string_type(*argv);</div><div class='del'>-</div><div class='del'>-	if (!NIL_P(v)) {</div><div class='del'>-	    StringValue(v);</div><div class='del'>-	    rb_str_modify(v);</div><div class='del'>-	    arg[i] = (unsigned long)StringValueCStr(v);</div><div class='add'>+	if (FIXNUM_P(*argv)) {</div><div class='add'>+	    arg[i] = (unsigned long)NUM2INT(*argv); argv++;</div><div class='ctx'> 	}</div><div class='ctx'> 	else {</div><div class='del'>-	    arg[i] = (unsigned long)NUM2LONG(*argv);</div><div class='add'>+	    Check_Type(*argv, T_STRING);</div><div class='add'>+	    str_modify(*argv);</div><div class='add'>+	    arg[i] = (unsigned long)RSTRING(*argv)-&gt;ptr; argv++;</div><div class='ctx'> 	}</div><div class='del'>-	argv++;</div><div class='ctx'> 	i++;</div><div class='ctx'>     }</div><div class='del'>-    TRAP_BEG;</div><div class='del'>-    switch (argc) {</div><div class='add'>+    switch (argc-1) {</div><div class='add'>+      case 0:</div><div class='add'>+	Fail("Too few args to syscall");</div><div class='ctx'>       case 1:</div><div class='ctx'> 	retval = syscall(arg[0]);</div><div class='ctx'> 	break;</div><div class='hunk'>@@ -5244,871 +1195,89 @@ rb_f_syscall(argc, argv)</div><div class='ctx'> 	break;</div><div class='ctx'> #endif /* atarist */</div><div class='ctx'>     }</div><div class='del'>-    TRAP_END;</div><div class='del'>-    if (retval &lt; 0) rb_sys_fail(0);</div><div class='del'>-    return INT2NUM(retval);</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 io_new_instance _((VALUE));</div><div class='del'>-static VALUE</div><div class='del'>-io_new_instance(args)</div><div class='del'>-    VALUE args;</div><div class='del'>-{</div><div class='del'>-    return rb_class_new_instance(2, (VALUE*)args+1, *(VALUE*)args);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.pipe -&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Creates a pair of pipe endpoints (connected to each other) and</div><div class='del'>- *  returns them as a two-element array of &lt;code&gt;IO&lt;/code&gt; objects:</div><div class='del'>- *  &lt;code&gt;[&lt;/code&gt; &lt;i&gt;read_file&lt;/i&gt;, &lt;i&gt;write_file&lt;/i&gt; &lt;code&gt;]&lt;/code&gt;. Not</div><div class='del'>- *  available on all platforms.</div><div class='del'>- *     </div><div class='del'>- *  In the example below, the two processes close the ends of the pipe</div><div class='del'>- *  that they are not using. This is not just a cosmetic nicety. The</div><div class='del'>- *  read end of a pipe will not generate an end of file condition if</div><div class='del'>- *  there are any writers with the pipe still open. In the case of the</div><div class='del'>- *  parent process, the &lt;code&gt;rd.read&lt;/code&gt; will never return if it</div><div class='del'>- *  does not first issue a &lt;code&gt;wr.close&lt;/code&gt;.</div><div class='del'>- *     </div><div class='del'>- *     rd, wr = IO.pipe</div><div class='del'>- *     </div><div class='del'>- *     if fork</div><div class='del'>- *       wr.close</div><div class='del'>- *       puts "Parent got: &lt;#{rd.read}&gt;"</div><div class='del'>- *       rd.close</div><div class='del'>- *       Process.wait</div><div class='del'>- *     else</div><div class='del'>- *       rd.close</div><div class='del'>- *       puts "Sending message to parent"</div><div class='del'>- *       wr.write "Hi Dad"</div><div class='del'>- *       wr.close</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'>- *     Sending message to parent</div><div class='del'>- *     Parent got: &lt;Hi Dad&gt;</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_s_pipe(klass)</div><div class='del'>-    VALUE klass;</div><div class='del'>-{</div><div class='del'>-#ifndef __human68k__</div><div class='del'>-    int pipes[2], state;</div><div class='del'>-    VALUE r, w, args[3];</div><div class='del'>-</div><div class='del'>-#ifdef _WIN32</div><div class='del'>-    if (_pipe(pipes, 1024, O_BINARY) == -1)</div><div class='del'>-#else</div><div class='del'>-    if (pipe(pipes) == -1)</div><div class='del'>-#endif</div><div class='del'>-	rb_sys_fail(0);</div><div class='del'>-</div><div class='del'>-    args[0] = klass;</div><div class='del'>-    args[1] = INT2NUM(pipes[0]);</div><div class='del'>-    args[2] = INT2FIX(O_RDONLY);</div><div class='del'>-    r = rb_protect(io_new_instance, (VALUE)args, &amp;state);</div><div class='del'>-    if (state) {</div><div class='del'>-	close(pipes[0]);</div><div class='del'>-	close(pipes[1]);</div><div class='del'>-	rb_jump_tag(state);</div><div class='del'>-    }</div><div class='del'>-    args[1] = INT2NUM(pipes[1]);</div><div class='del'>-    args[2] = INT2FIX(O_WRONLY);</div><div class='del'>-    w = rb_protect(io_new_instance, (VALUE)args, &amp;state);</div><div class='del'>-    if (state) {</div><div class='del'>-	close(pipes[1]);</div><div class='del'>-	if (!NIL_P(r)) rb_io_close(r);</div><div class='del'>-	rb_jump_tag(state);</div><div class='del'>-    }</div><div class='del'>-    rb_io_synchronized(RFILE(w)-&gt;fptr);</div><div class='del'>-</div><div class='del'>-    return rb_assoc_new(r, w);</div><div class='add'>+    if (retval == -1) rb_sys_fail(0);</div><div class='add'>+    return Qnil;</div><div class='ctx'> #else</div><div class='del'>-    rb_notimplement();</div><div class='del'>-    return Qnil;		/* not reached */</div><div class='add'>+    Fail("syscall() unimplemented");</div><div class='ctx'> #endif</div><div class='ctx'> }</div><div class='ctx'> </div><div class='del'>-struct foreach_arg {</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE sep;</div><div class='del'>-    VALUE io;</div><div class='del'>-};</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-io_s_foreach(arg)</div><div class='del'>-    struct foreach_arg *arg;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    while (!NIL_P(str = rb_io_getline(arg-&gt;sep, arg-&gt;io))) {</div><div class='del'>-	rb_yield(str);</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'>- *     IO.foreach(name, sep_string=$/) {|line| block }   =&gt; nil</div><div class='del'>- *  </div><div class='del'>- *  Executes the block for every line in the named I/O port, where lines</div><div class='del'>- *  are separated by &lt;em&gt;sep_string&lt;/em&gt;.</div><div class='del'>- *     </div><div class='del'>- *     IO.foreach("testfile") {|x| print "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 This is line one</div><div class='del'>- *     GOT This is line two</div><div class='del'>- *     GOT This is line three</div><div class='del'>- *     GOT And so on...</div><div class='del'>- */     </div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_s_foreach(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 fname;</div><div class='del'>-    struct foreach_arg arg;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;fname, &amp;arg.sep);</div><div class='del'>-    RETURN_ENUMERATOR(self, argc, argv);</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-</div><div class='del'>-    if (argc == 1) {</div><div class='del'>-	arg.sep = rb_default_rs;</div><div class='del'>-    }</div><div class='del'>-    else if (!NIL_P(arg.sep)) {</div><div class='del'>-	StringValue(arg.sep);</div><div class='del'>-    }</div><div class='del'>-    arg.io = rb_io_open(StringValueCStr(fname), "r");</div><div class='del'>-    if (NIL_P(arg.io)) return Qnil;</div><div class='del'>-</div><div class='del'>-    return rb_ensure(io_s_foreach, (VALUE)&amp;arg, rb_io_close, arg.io);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-io_s_readlines(arg)</div><div class='del'>-    struct foreach_arg *arg;</div><div class='del'>-{</div><div class='del'>-    return rb_io_readlines(arg-&gt;argc, &amp;arg-&gt;sep, arg-&gt;io);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.readlines(name, sep_string=$/)   =&gt; array</div><div class='del'>- *  </div><div class='del'>- *  Reads the entire file specified by &lt;i&gt;name&lt;/i&gt; as individual</div><div class='del'>- *  lines, and returns those lines in an array. Lines are separated by</div><div class='del'>- *  &lt;i&gt;sep_string&lt;/i&gt;.</div><div class='del'>- *     </div><div class='del'>- *     a = IO.readlines("testfile")</div><div class='del'>- *     a[0]   #=&gt; "This is line one\n"</div><div class='del'>- *     </div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_s_readlines(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'>-    VALUE fname;</div><div class='del'>-    struct foreach_arg arg;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "11", &amp;fname, &amp;arg.sep);</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-</div><div class='del'>-    arg.argc = argc - 1;</div><div class='del'>-    arg.io = rb_io_open(StringValueCStr(fname), "r");</div><div class='del'>-    if (NIL_P(arg.io)) return Qnil;</div><div class='del'>-    return rb_ensure(io_s_readlines, (VALUE)&amp;arg, rb_io_close, arg.io);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-io_s_read(arg)</div><div class='del'>-    struct foreach_arg *arg;</div><div class='del'>-{</div><div class='del'>-    return io_read(arg-&gt;argc, &amp;arg-&gt;sep, arg-&gt;io);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/*</div><div class='del'>- *  call-seq:</div><div class='del'>- *     IO.read(name, [length [, offset]] )   =&gt; string</div><div class='del'>- *  </div><div class='del'>- *  Opens the file, optionally seeks to the given offset, then returns</div><div class='del'>- *  &lt;i&gt;length&lt;/i&gt; bytes (defaulting to the rest of the file).</div><div class='del'>- *  &lt;code&gt;read&lt;/code&gt; ensures the file is closed before returning.</div><div class='del'>- *     </div><div class='del'>- *     IO.read("testfile")           #=&gt; "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"</div><div class='del'>- *     IO.read("testfile", 20)       #=&gt; "This is line one\nThi"</div><div class='del'>- *     IO.read("testfile", 20, 10)   #=&gt; "ne one\nThis is line "</div><div class='del'>- */</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-rb_io_s_read(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'>-    VALUE fname, offset;</div><div class='del'>-    struct foreach_arg arg;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "12", &amp;fname, &amp;arg.sep, &amp;offset);</div><div class='del'>-    SafeStringValue(fname);</div><div class='del'>-</div><div class='del'>-    arg.argc = argc ? 1 : 0;</div><div class='del'>-    arg.io = rb_io_open(StringValueCStr(fname), "r");</div><div class='del'>-    if (NIL_P(arg.io)) return Qnil;</div><div class='del'>-    if (!NIL_P(offset)) {</div><div class='del'>-	rb_io_seek(arg.io, offset, SEEK_SET);</div><div class='del'>-    }</div><div class='del'>-    return rb_ensure(io_s_read, (VALUE)&amp;arg, rb_io_close, arg.io);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_tell()</div><div class='del'>-{</div><div class='del'>-    if (!next_argv()) {</div><div class='del'>-	rb_raise(rb_eArgError, "no stream to tell");</div><div class='del'>-    }</div><div class='del'>-    ARGF_FORWARD(0, 0);</div><div class='del'>-    return rb_io_tell(current_file);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_seek_m(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 (!next_argv()) {</div><div class='del'>-	rb_raise(rb_eArgError, "no stream to seek");</div><div class='del'>-    }</div><div class='del'>-    ARGF_FORWARD(argc, argv);</div><div class='del'>-    return rb_io_seek_m(argc, argv, current_file);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_set_pos(self, offset)</div><div class='del'>-     VALUE self, offset;</div><div class='del'>-{</div><div class='del'>-    if (!next_argv()) {</div><div class='del'>-	rb_raise(rb_eArgError, "no stream to set position");</div><div class='del'>-    }</div><div class='del'>-    ARGF_FORWARD(1, &amp;offset);</div><div class='del'>-    return rb_io_set_pos(current_file, offset);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_rewind()</div><div class='del'>-{</div><div class='del'>-    if (!next_argv()) {</div><div class='del'>-	rb_raise(rb_eArgError, "no stream to rewind");</div><div class='del'>-    }</div><div class='del'>-    ARGF_FORWARD(0, 0);</div><div class='del'>-    return rb_io_rewind(current_file);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_fileno()</div><div class='del'>-{</div><div class='del'>-    if (!next_argv()) {</div><div class='del'>-	rb_raise(rb_eArgError, "no stream");</div><div class='del'>-    }</div><div class='del'>-    ARGF_FORWARD(0, 0);</div><div class='del'>-    return rb_io_fileno(current_file);</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_to_io()</div><div class='del'>-{</div><div class='del'>-    next_argv();</div><div class='del'>-    ARGF_FORWARD(0, 0);</div><div class='del'>-    return current_file;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_eof()</div><div class='del'>-{</div><div class='del'>-    if (current_file) {</div><div class='del'>-	if (init_p == 0) return Qtrue;</div><div class='del'>-	ARGF_FORWARD(0, 0);</div><div class='del'>-	if (rb_io_eof(current_file)) {</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'>-argf_read(argc, argv)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-{</div><div class='del'>-    VALUE tmp, str, length;</div><div class='del'>-    long len = 0;</div><div class='del'>-</div><div class='del'>-    rb_scan_args(argc, argv, "02", &amp;length, &amp;str);</div><div class='del'>-    if (!NIL_P(length)) {</div><div class='del'>-	len = NUM2LONG(argv[0]);</div><div class='del'>-    }</div><div class='del'>-    if (!NIL_P(str)) {</div><div class='del'>-	StringValue(str);</div><div class='del'>-	rb_str_resize(str,0);</div><div class='del'>-	argv[1] = Qnil;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-  retry:</div><div class='del'>-    if (!next_argv()) {</div><div class='del'>-	return str;</div><div class='del'>-    }</div><div class='del'>-    if (TYPE(current_file) != T_FILE) {</div><div class='del'>-	tmp = argf_forward(argc, argv);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	tmp = io_read(argc, argv, current_file);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(str)) str = tmp;</div><div class='del'>-    else if (!NIL_P(tmp)) rb_str_append(str, tmp);</div><div class='del'>-    if (NIL_P(tmp) || NIL_P(length)) {</div><div class='del'>-	if (next_p != -1) {</div><div class='del'>-	    argf_close(current_file);</div><div class='del'>-	    next_p = 1;</div><div class='del'>-	    goto retry;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    else if (argc &gt;= 1) {</div><div class='del'>-	if (RSTRING(str)-&gt;len &lt; len) {</div><div class='del'>-	    len -= RSTRING(str)-&gt;len;</div><div class='del'>-	    argv[0] = INT2NUM(len);</div><div class='del'>-	    goto retry;</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'>-argf_getc()</div><div class='del'>-{</div><div class='del'>-    VALUE byte;</div><div class='del'>-</div><div class='del'>-  retry:</div><div class='del'>-    if (!next_argv()) return Qnil;</div><div class='del'>-    if (TYPE(current_file) != T_FILE) {</div><div class='del'>-	byte = rb_funcall3(current_file, rb_intern("getc"), 0, 0);</div><div class='del'>-    }</div><div class='del'>-    else {</div><div class='del'>-	byte = rb_io_getc(current_file);</div><div class='del'>-    }</div><div class='del'>-    if (NIL_P(byte) &amp;&amp; next_p != -1) {</div><div class='del'>-	argf_close(current_file);</div><div class='del'>-	next_p = 1;</div><div class='del'>-	goto retry;</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return byte;</div><div class='del'>-}</div><div class='add'>+extern VALUE M_Enumerable;</div><div class='add'>+VALUE rb_readonly_hook();</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_readchar()</div><div class='del'>-{</div><div class='del'>-    VALUE c;</div><div class='del'>-</div><div class='del'>-    NEXT_ARGF_FORWARD(0, 0);</div><div class='del'>-    c = argf_getc();</div><div class='del'>-    if (NIL_P(c)) {</div><div class='del'>-	rb_eof_error();</div><div class='del'>-    }</div><div class='del'>-    return c;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_each_line(argc, argv, argf)</div><div class='del'>-    int argc;</div><div class='del'>-    VALUE *argv;</div><div class='del'>-    VALUE argf;</div><div class='del'>-{</div><div class='del'>-    VALUE str;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(argf, argc, argv);</div><div class='del'>-    if (!next_argv()) return Qnil;</div><div class='del'>-    if (TYPE(current_file) != T_FILE) {</div><div class='del'>-	for (;;) {</div><div class='del'>-	    if (!next_argv()) return argf;</div><div class='del'>-	    rb_iterate(rb_each, current_file, rb_yield, 0);</div><div class='del'>-	    next_p = 1;</div><div class='del'>-	}</div><div class='del'>-    }</div><div class='del'>-    while (!NIL_P(str = argf_getline(argc, argv))) {</div><div class='del'>-	rb_yield(str);</div><div class='del'>-    }</div><div class='del'>-    return argf;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-static VALUE</div><div class='del'>-argf_each_byte(argf)</div><div class='del'>-    VALUE argf;</div><div class='add'>+Init_IO()</div><div class='ctx'> {</div><div class='del'>-    VALUE byte;</div><div class='del'>-</div><div class='del'>-    RETURN_ENUMERATOR(argf, 0, 0);</div><div class='del'>-    while (!NIL_P(byte = argf_getc())) {</div><div class='del'>-	rb_yield(byte);</div><div class='del'>-    }</div><div class='del'>-    return argf;</div><div class='del'>-}</div><div class='add'>+    extern VALUE C_Kernel;</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_each_char(argf)</div><div class='del'>-    VALUE argf;</div><div class='del'>-{</div><div class='del'>-    VALUE ch;</div><div class='add'>+    rb_define_method(C_Kernel, "syscall", Fsyscall, -1);</div><div class='ctx'> </div><div class='del'>-    RETURN_ENUMERATOR(argf, 0, 0);</div><div class='add'>+    rb_define_method(C_Kernel, "open", Fopen, -2);</div><div class='add'>+    rb_define_method(C_Kernel, "printf", Fprintf, -1);</div><div class='add'>+    rb_define_method(C_Kernel, "print", Fprint, -1);</div><div class='add'>+    rb_define_method(C_Kernel, "gets", Fgets, 0);</div><div class='add'>+    rb_define_method(C_Kernel, "eof", Feof, 0);</div><div class='add'>+    rb_define_alias(C_Kernel,"readline", "gets");</div><div class='add'>+    rb_define_method(C_Kernel, "getc", Fgetc, 0);</div><div class='add'>+    rb_define_method(C_Kernel, "select", Fselect, -2);</div><div class='ctx'> </div><div class='del'>-    while (!NIL_P(ch = argf_getc())) {</div><div class='del'>-	unsigned char c;</div><div class='del'>-	int n;</div><div class='del'>-	VALUE str, file;</div><div class='add'>+    rb_define_method(C_Kernel, "readlines", Freadlines, 0);</div><div class='ctx'> </div><div class='del'>-      first_char:</div><div class='del'>-	c = FIX2INT(ch);</div><div class='del'>-	n = mbclen(c);</div><div class='del'>-	str = rb_tainted_str_new((const char *)&amp;c, 1);</div><div class='del'>-	file = current_file;</div><div class='add'>+    C_IO = rb_define_class("IO", C_Object);</div><div class='add'>+    rb_include_module(C_IO, M_Enumerable);</div><div class='ctx'> </div><div class='del'>-	while (--n &gt; 0) {</div><div class='del'>-	    if (NIL_P(ch = argf_getc())) {</div><div class='del'>-		rb_yield(str);</div><div class='del'>-		return argf;</div><div class='del'>-	    }</div><div class='del'>-	    if (current_file != file) {</div><div class='del'>-		rb_yield(str);</div><div class='del'>-		goto first_char;</div><div class='del'>-	    }</div><div class='del'>-	    c = FIX2INT(ch);</div><div class='del'>-	    rb_str_cat(str, (const char *)&amp;c, 1);</div><div class='del'>-	}</div><div class='del'>-	rb_yield(str);</div><div class='del'>-    }</div><div class='del'>-    return argf;</div><div class='del'>-}</div><div class='add'>+    rb_define_variable("$;", &amp;FS,  Qnil, rb_check_str);</div><div class='add'>+    rb_define_variable("$,", &amp;OFS, Qnil, rb_check_str);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_filename()</div><div class='del'>-{</div><div class='del'>-    next_argv();</div><div class='del'>-    return filename;</div><div class='del'>-}</div><div class='add'>+    RS = str_new2("\n");</div><div class='add'>+    rb_define_variable("$/",  &amp;RS, Qnil, rb_check_str);</div><div class='add'>+    rb_define_variable("$\\", &amp;ORS, Qnil, rb_check_str);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_file()</div><div class='del'>-{</div><div class='del'>-    next_argv();</div><div class='del'>-    return current_file;</div><div class='del'>-}</div><div class='add'>+    rb_define_variable("$FILENAME", &amp;filename, Qnil, rb_readonly_hook);</div><div class='add'>+    rb_global_variable(&amp;file);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_binmode()</div><div class='del'>-{</div><div class='del'>-    binmode = 1;</div><div class='del'>-    next_argv();</div><div class='del'>-    ARGF_FORWARD(0, 0);</div><div class='del'>-    rb_io_binmode(current_file);</div><div class='del'>-    return argf;</div><div class='del'>-}</div><div class='add'>+    rb_define_variable("$.", &amp;lineno, Qnil, Qnil);</div><div class='add'>+    rb_define_variable("$_", &amp;rb_lastline, Qnil, Qnil);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_skip()</div><div class='del'>-{</div><div class='del'>-    if (next_p != -1) {</div><div class='del'>-	argf_close(current_file);</div><div class='del'>-	next_p = 1;</div><div class='del'>-    }</div><div class='del'>-    return argf;</div><div class='del'>-}</div><div class='add'>+    rb_define_method(C_IO, "each",  Fio_each, 0);</div><div class='add'>+    rb_define_method(C_IO, "each_byte",  Fio_each_byte, 0);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_close_m()</div><div class='del'>-{</div><div class='del'>-    next_argv();</div><div class='del'>-    argf_close(current_file);</div><div class='del'>-    if (next_p != -1) {</div><div class='del'>-	next_p = 1;</div><div class='del'>-    }</div><div class='del'>-    gets_lineno = 0;</div><div class='del'>-    return argf;</div><div class='del'>-}</div><div class='add'>+    rb_define_method(C_IO, "syswrite", Fio_syswrite, 1);</div><div class='add'>+    rb_define_method(C_IO, "sysread",  Fio_sysread, 1);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_closed()</div><div class='del'>-{</div><div class='del'>-    next_argv();</div><div class='del'>-    ARGF_FORWARD(0, 0);</div><div class='del'>-    return rb_io_closed(current_file);</div><div class='del'>-}</div><div class='add'>+    rb_define_method(C_IO, "fileno", Fio_fileno, 0);</div><div class='add'>+    rb_define_method(C_IO, "sync",  Fio_sync, 0);</div><div class='add'>+    rb_define_method(C_IO, "sync=",  Fio_set_sync, 1);</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-argf_to_s()</div><div class='del'>-{</div><div class='del'>-    return rb_str_new2("ARGF");</div><div class='del'>-}</div><div class='add'>+    rb_define_alias(C_IO, "readlines", "to_a");</div><div class='ctx'> </div><div class='del'>-static VALUE</div><div class='del'>-opt_i_get()</div><div class='del'>-{</div><div class='del'>-    if (!ruby_inplace_mode) return Qnil;</div><div class='del'>-    return rb_str_new2(ruby_inplace_mode);</div><div class='del'>-}</div><div class='add'>+    rb_define_method(C_IO, "read",  Fio_read, -2);</div><div class='add'>+    rb_define_method(C_IO, "write", Fio_write, 1);</div><div class='add'>+    rb_define_method(C_IO, "gets",  Fio_gets, 0);</div><div class='add'>+    rb_define_alias(C_IO,  "readline", "gets");</div><div class='add'>+    rb_define_method(C_IO, "getc",  Fio_getc, 0);</div><div class='add'>+    rb_define_method(C_IO, "puts",  Fio_puts, 1);</div><div class='add'>+    rb_define_method(C_IO, "&lt;&lt;",    Fio_puts, 1);</div><div class='add'>+    rb_define_method(C_IO, "flush", Fio_flush, 0);</div><div class='add'>+    rb_define_method(C_IO, "eof", Fio_eof, 0);</div><div class='ctx'> </div><div class='del'>-static void</div><div class='del'>-opt_i_set(val)</div><div class='del'>-    VALUE val;</div><div class='del'>-{</div><div class='del'>-    if (!RTEST(val)) {</div><div class='del'>-	if (ruby_inplace_mode) free(ruby_inplace_mode);</div><div class='del'>-	ruby_inplace_mode = 0;</div><div class='del'>-	return;</div><div class='del'>-    }</div><div class='del'>-    StringValue(val);</div><div class='del'>-    if (ruby_inplace_mode) free(ruby_inplace_mode);</div><div class='del'>-    ruby_inplace_mode = 0;</div><div class='del'>-    ruby_inplace_mode = strdup(StringValueCStr(val));</div><div class='del'>-}</div><div class='add'>+    rb_define_method(C_IO, "close", Fio_close, 0);</div><div class='ctx'> </div><div class='del'>-/*</div><div class='del'>- *  Class &lt;code&gt;IO&lt;/code&gt; is the basis for all input and output in Ruby.</div><div class='del'>- *  An I/O stream may be &lt;em&gt;duplexed&lt;/em&gt; (that is, bidirectional), and</div><div class='del'>- *  so may use more than one native operating system stream.</div><div class='del'>- *     </div><div class='del'>- *  Many of the examples in this section use class &lt;code&gt;File&lt;/code&gt;,</div><div class='del'>- *  the only standard subclass of &lt;code&gt;IO&lt;/code&gt;. The two classes are</div><div class='del'>- *  closely associated.</div><div class='del'>- *     </div><div class='del'>- *  As used in this section, &lt;em&gt;portname&lt;/em&gt; may take any of the</div><div class='del'>- *  following forms.</div><div class='del'>- *     </div><div class='del'>- *  * A plain string represents a filename suitable for the underlying</div><div class='del'>- *    operating system.</div><div class='del'>- *     </div><div class='del'>- *  * A string starting with ``&lt;code&gt;|&lt;/code&gt;'' indicates a subprocess.</div><div class='del'>- *    The remainder of the string following the ``&lt;code&gt;|&lt;/code&gt;'' is</div><div class='del'>- *    invoked as a process with appropriate input/output channels</div><div class='del'>- *    connected to it.</div><div class='del'>- *     </div><div class='del'>- *  * A string equal to ``&lt;code&gt;|-&lt;/code&gt;'' will create another Ruby</div><div class='del'>- *    instance as a subprocess.</div><div class='del'>- *     </div><div class='del'>- *  Ruby will convert pathnames between different operating system</div><div class='del'>- *  conventions if possible. For instance, on a Windows system the</div><div class='del'>- *  filename ``&lt;code&gt;/gumby/ruby/test.rb&lt;/code&gt;'' will be opened as</div><div class='del'>- *  ``&lt;code&gt;\gumby\ruby\test.rb&lt;/code&gt;''. When specifying a</div><div class='del'>- *  Windows-style filename in a Ruby string, remember to escape the</div><div class='del'>- *  backslashes:</div><div class='del'>- *     </div><div class='del'>- *     "c:\\gumby\\ruby\\test.rb"</div><div class='del'>- *     </div><div class='del'>- *  Our examples here will use the Unix-style forward slashes;</div><div class='del'>- *  &lt;code&gt;File::SEPARATOR&lt;/code&gt; can be used to get the</div><div class='del'>- *  platform-specific separator character.</div><div class='del'>- *     </div><div class='del'>- *  I/O ports may be opened in any one of several different modes, which</div><div class='del'>- *  are shown in this section as &lt;em&gt;mode&lt;/em&gt;. The mode may</div><div class='del'>- *  either be a Fixnum or a String. If numeric, it should be</div><div class='del'>- *  one of the operating system specific constants (O_RDONLY,</div><div class='del'>- *  O_WRONLY, O_RDWR, O_APPEND and so on). See man open(2) for</div><div class='del'>- *  more information.</div><div class='del'>- *</div><div class='del'>- *  If the mode is given as a String, it must be one of the</div><div class='del'>- *  values listed in the following table.</div><div class='del'>- *</div><div class='del'>- *    Mode |  Meaning</div><div class='del'>- *    -----+--------------------------------------------------------</div><div class='del'>- *    "r"  |  Read-only, starts at beginning of file  (default mode).</div><div class='del'>- *    -----+--------------------------------------------------------</div><div class='del'>- *    "r+" |  Read-write, starts at beginning of file.</div><div class='del'>- *    -----+--------------------------------------------------------</div><div class='del'>- *    "w"  |  Write-only, truncates existing file </div><div class='del'>- *         |  to zero length or creates a new file for writing.</div><div class='del'>- *    -----+--------------------------------------------------------</div><div class='del'>- *    "w+" |  Read-write, truncates existing file to zero length</div><div class='del'>- *         |  or creates a new file for reading and writing.</div><div class='del'>- *    -----+--------------------------------------------------------</div><div class='del'>- *    "a"  |  Write-only, starts at end of file if file exists,</div><div class='del'>- *         |  otherwise creates a new file for writing.</div><div class='del'>- *    -----+--------------------------------------------------------</div><div class='del'>- *    "a+" |  Read-write, starts at end of file if file exists,</div><div class='del'>- *         |  otherwise creates a new file for reading and </div><div class='del'>- *         |  writing.</div><div class='del'>- *    -----+--------------------------------------------------------</div><div class='del'>- *     "b" |  (DOS/Windows only) Binary file mode (may appear with </div><div class='del'>- *         |  any of the key letters listed above).</div><div class='del'>- *</div><div class='del'>- *</div><div class='del'>- *  The global constant ARGF (also accessible as $&lt;) provides an</div><div class='del'>- *  IO-like stream which allows access to all files mentioned on the</div><div class='del'>- *  command line (or STDIN if no files are mentioned). ARGF provides</div><div class='del'>- *  the methods &lt;code&gt;#path&lt;/code&gt; and &lt;code&gt;#filename&lt;/code&gt; to access</div><div class='del'>- *  the name of the file currently being read.</div><div class='del'>- */</div><div class='add'>+    rb_define_method(C_IO, "isatty", Fio_isatty, 0);</div><div class='add'>+    rb_define_method(C_IO, "binmode",  Fio_binmode, 0);</div><div class='ctx'> </div><div class='del'>-void</div><div class='del'>-Init_IO()</div><div class='del'>-{</div><div class='del'>-#ifdef __CYGWIN__ </div><div class='del'>-#include &lt;sys/cygwin.h&gt;</div><div class='del'>-    static struct __cygwin_perfile pf[] =</div><div class='del'>-    {</div><div class='del'>-	{"", O_RDONLY | O_BINARY},</div><div class='del'>-	{"", O_WRONLY | O_BINARY},</div><div class='del'>-	{"", O_RDWR | O_BINARY},</div><div class='del'>-	{"", O_APPEND | O_BINARY},</div><div class='del'>-	{NULL, 0}</div><div class='del'>-    };</div><div class='del'>-    cygwin_internal(CW_PERFILE, pf);</div><div class='del'>-#endif</div><div class='add'>+    rb_define_method(C_IO, "ioctl", Fio_ioctl, 2);</div><div class='ctx'> </div><div class='del'>-    rb_eIOError = rb_define_class("IOError", rb_eStandardError);</div><div class='del'>-    rb_eEOFError = rb_define_class("EOFError", rb_eIOError);</div><div class='add'>+    rb_stdin = prep_stdio(stdin, FMODE_READABLE);</div><div class='add'>+    rb_define_variable("$stdin",  &amp;rb_stdin, Qnil, rb_readonly_hook);</div><div class='add'>+    rb_stdout = prep_stdio(stdout, FMODE_WRITABLE);</div><div class='add'>+    rb_define_variable("$stdout", &amp;rb_stdout, Qnil, rb_readonly_hook);</div><div class='add'>+    rb_stderr = prep_stdio(stderr, FMODE_WRITABLE);</div><div class='add'>+    rb_define_variable("$stderr", &amp;rb_stderr, Qnil, rb_readonly_hook);</div><div class='add'>+    rb_defout = rb_stdout;</div><div class='add'>+    rb_global_variable(&amp;rb_defout);</div><div class='add'>+    rb_define_single_method(C_IO, "default", Fio_defget, 0);</div><div class='add'>+    rb_define_single_method(C_IO, "default=", Fio_defset, 1);</div><div class='ctx'> </div><div class='ctx'>     id_write = rb_intern("write");</div><div class='del'>-    id_read = rb_intern("read");</div><div class='del'>-    id_getc = rb_intern("getc");</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("syscall", rb_f_syscall, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("open", rb_f_open, -1);</div><div class='del'>-    rb_define_global_function("printf", rb_f_printf, -1);</div><div class='del'>-    rb_define_global_function("print", rb_f_print, -1);</div><div class='del'>-    rb_define_global_function("putc", rb_f_putc, 1);</div><div class='del'>-    rb_define_global_function("puts", rb_f_puts, -1);</div><div class='del'>-    rb_define_global_function("gets", rb_f_gets, -1);</div><div class='del'>-    rb_define_global_function("readline", rb_f_readline, -1);</div><div class='del'>-    rb_define_global_function("getc", rb_f_getc, 0);</div><div class='del'>-    rb_define_global_function("select", rb_f_select, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("readlines", rb_f_readlines, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("`", rb_f_backquote, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_global_function("p", rb_f_p, -1);</div><div class='del'>-    rb_define_method(rb_mKernel, "display", rb_obj_display, -1);</div><div class='del'>-</div><div class='del'>-    rb_cIO = rb_define_class("IO", rb_cObject);</div><div class='del'>-    rb_include_module(rb_cIO, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    rb_define_alloc_func(rb_cIO, io_alloc);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "new", rb_io_s_new, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "open",  rb_io_s_open, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "sysopen",  rb_io_s_sysopen, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "for_fd", rb_io_s_for_fd, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "popen", rb_io_s_popen, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "foreach", rb_io_s_foreach, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "readlines", rb_io_s_readlines, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "read", rb_io_s_read, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "select", rb_f_select, -1);</div><div class='del'>-    rb_define_singleton_method(rb_cIO, "pipe", rb_io_s_pipe, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "initialize", rb_io_initialize, -1);</div><div class='del'>-</div><div class='del'>-    rb_output_fs = Qnil;</div><div class='del'>-    rb_define_hooked_variable("$,", &amp;rb_output_fs, 0, rb_str_setter);</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;rb_default_rs);</div><div class='del'>-    rb_rs = rb_default_rs = rb_str_new2("\n");</div><div class='del'>-    rb_output_rs = Qnil;</div><div class='del'>-    OBJ_FREEZE(rb_default_rs);	/* avoid modifying RS_default */</div><div class='del'>-    rb_define_hooked_variable("$/", &amp;rb_rs, 0, rb_str_setter);</div><div class='del'>-    rb_define_hooked_variable("$-0", &amp;rb_rs, 0, rb_str_setter);</div><div class='del'>-    rb_define_hooked_variable("$\\", &amp;rb_output_rs, 0, rb_str_setter);</div><div class='del'>-</div><div class='del'>-    rb_define_hooked_variable("$.", &amp;lineno, 0, lineno_setter);</div><div class='del'>-    rb_define_virtual_variable("$_", rb_lastline_get, rb_lastline_set);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "initialize_copy", rb_io_init_copy, 1);</div><div class='del'>-    rb_define_method(rb_cIO, "reopen", rb_io_reopen, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "print", rb_io_print, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "putc", rb_io_putc, 1);</div><div class='del'>-    rb_define_method(rb_cIO, "puts", rb_io_puts, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "printf", rb_io_printf, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "each",  rb_io_each_line, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "each_line",  rb_io_each_line, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "each_byte",  rb_io_each_byte, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "each_char",  rb_io_each_char, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "lines",  rb_io_lines, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "bytes",  rb_io_bytes, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "chars",  rb_io_each_char, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "syswrite", rb_io_syswrite, 1);</div><div class='del'>-    rb_define_method(rb_cIO, "sysread",  rb_io_sysread, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "fileno", rb_io_fileno, 0);</div><div class='del'>-    rb_define_alias(rb_cIO, "to_i", "fileno");</div><div class='del'>-    rb_define_method(rb_cIO, "to_io", rb_io_to_io, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "fsync",   rb_io_fsync, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "sync",   rb_io_sync, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "sync=",  rb_io_set_sync, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "lineno",   rb_io_lineno, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "lineno=",  rb_io_set_lineno, 1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "readlines",  rb_io_readlines, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "read_nonblock",  io_read_nonblock, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "write_nonblock", rb_io_write_nonblock, 1);</div><div class='del'>-    rb_define_method(rb_cIO, "readpartial",  io_readpartial, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "read",  io_read, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "write", io_write, 1);</div><div class='del'>-    rb_define_method(rb_cIO, "gets",  rb_io_gets_m, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "readline",  rb_io_readline, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "getc",  rb_io_getc, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "getbyte",  rb_io_getc, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "readchar",  rb_io_readchar, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "readbyte",  rb_io_readchar, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "ungetc",rb_io_ungetc, 1);</div><div class='del'>-    rb_define_method(rb_cIO, "&lt;&lt;",    rb_io_addstr, 1);</div><div class='del'>-    rb_define_method(rb_cIO, "flush", rb_io_flush, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "tell", rb_io_tell, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "seek", rb_io_seek_m, -1);</div><div class='del'>-    rb_define_const(rb_cIO, "SEEK_SET", INT2FIX(SEEK_SET));</div><div class='del'>-    rb_define_const(rb_cIO, "SEEK_CUR", INT2FIX(SEEK_CUR));</div><div class='del'>-    rb_define_const(rb_cIO, "SEEK_END", INT2FIX(SEEK_END));</div><div class='del'>-    rb_define_method(rb_cIO, "rewind", rb_io_rewind, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "pos", rb_io_tell, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "pos=", rb_io_set_pos, 1);</div><div class='del'>-    rb_define_method(rb_cIO, "eof", rb_io_eof, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "eof?", rb_io_eof, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "close", rb_io_close_m, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "closed?", rb_io_closed, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "close_read", rb_io_close_read, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "close_write", rb_io_close_write, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "isatty", rb_io_isatty, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "tty?", rb_io_isatty, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "binmode",  rb_io_binmode, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "sysseek", rb_io_sysseek, -1);</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cIO, "ioctl", rb_io_ioctl, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "fcntl", rb_io_fcntl, -1);</div><div class='del'>-    rb_define_method(rb_cIO, "pid", rb_io_pid, 0);</div><div class='del'>-    rb_define_method(rb_cIO, "inspect",  rb_io_inspect, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_variable("$stdin", &amp;rb_stdin);</div><div class='del'>-    rb_stdin = prep_stdio(stdin, FMODE_READABLE, rb_cIO);</div><div class='del'>-    rb_define_hooked_variable("$stdout", &amp;rb_stdout, 0, stdout_setter);</div><div class='del'>-    rb_stdout = prep_stdio(stdout, FMODE_WRITABLE, rb_cIO);</div><div class='del'>-    rb_define_hooked_variable("$stderr", &amp;rb_stderr, 0, stdout_setter);</div><div class='del'>-    rb_stderr = prep_stdio(stderr, FMODE_WRITABLE, rb_cIO);</div><div class='del'>-    rb_define_hooked_variable("$&gt;", &amp;rb_stdout, 0, stdout_setter);</div><div class='del'>-    orig_stdout = rb_stdout;</div><div class='del'>-    rb_deferr = orig_stderr = rb_stderr;</div><div class='del'>-</div><div class='del'>-    /* variables to be removed in 1.8.1 */</div><div class='del'>-    rb_define_hooked_variable("$defout", &amp;rb_stdout, 0, defout_setter);</div><div class='del'>-    rb_define_hooked_variable("$deferr", &amp;rb_stderr, 0, deferr_setter);</div><div class='del'>-</div><div class='del'>-    /* constants to hold original stdin/stdout/stderr */</div><div class='del'>-    rb_define_global_const("STDIN", rb_stdin);</div><div class='del'>-    rb_define_global_const("STDOUT", rb_stdout);</div><div class='del'>-    rb_define_global_const("STDERR", rb_stderr);</div><div class='del'>-</div><div class='del'>-    rb_define_readonly_variable("$&lt;", &amp;argf);</div><div class='del'>-    argf = rb_obj_alloc(rb_cObject);</div><div class='del'>-    rb_extend_object(argf, rb_mEnumerable);</div><div class='del'>-    rb_define_global_const("ARGF", argf);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(argf, "to_s", argf_to_s, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(argf, "fileno", argf_fileno, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "to_i", argf_fileno, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "to_io", argf_to_io, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "each",  argf_each_line, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "each_line",  argf_each_line, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "each_byte",  argf_each_byte, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "each_char",  argf_each_char, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "lines",  argf_each_line, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "bytes",  argf_each_byte, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "chars",  argf_each_char, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(argf, "read",  argf_read, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "readlines", rb_f_readlines, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "to_a", rb_f_readlines, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "gets", rb_f_gets, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "readline", rb_f_readline, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "getc", argf_getc, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "getbyte", argf_getc, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "readchar", argf_readchar, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "readbyte", argf_readchar, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "tell", argf_tell, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "seek", argf_seek_m, -1);</div><div class='del'>-    rb_define_singleton_method(argf, "rewind", argf_rewind, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "pos", argf_tell, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "pos=", argf_set_pos, 1);</div><div class='del'>-    rb_define_singleton_method(argf, "eof", argf_eof, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "eof?", argf_eof, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "binmode", argf_binmode, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(argf, "filename", argf_filename, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "path", argf_filename, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "file", argf_file, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "skip", argf_skip, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "close", argf_close_m, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "closed?", argf_closed, 0);</div><div class='del'>-</div><div class='del'>-    rb_define_singleton_method(argf, "lineno",   argf_lineno, 0);</div><div class='del'>-    rb_define_singleton_method(argf, "lineno=",  argf_set_lineno, 1);</div><div class='del'>-</div><div class='del'>-    rb_global_variable(&amp;current_file);</div><div class='del'>-    rb_define_readonly_variable("$FILENAME", &amp;filename);</div><div class='del'>-    filename = rb_str_new2("-");</div><div class='del'>-</div><div class='del'>-    rb_define_virtual_variable("$-i", opt_i_get, opt_i_set);</div><div class='del'>-</div><div class='del'>-#if defined (_WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(__human68k__)</div><div class='del'>-    atexit(pipe_atexit);</div><div class='del'>-#endif</div><div class='del'>-</div><div class='ctx'>     Init_File();</div><div class='del'>-</div><div class='del'>-    rb_define_method(rb_cFile, "initialize",  rb_file_initialize, -1);</div><div class='del'>-</div><div class='del'>-    rb_file_const("RDONLY", INT2FIX(O_RDONLY));</div><div class='del'>-    rb_file_const("WRONLY", INT2FIX(O_WRONLY));</div><div class='del'>-    rb_file_const("RDWR", INT2FIX(O_RDWR));</div><div class='del'>-    rb_file_const("APPEND", INT2FIX(O_APPEND));</div><div class='del'>-    rb_file_const("CREAT", INT2FIX(O_CREAT));</div><div class='del'>-    rb_file_const("EXCL", INT2FIX(O_EXCL));</div><div class='del'>-#if defined(O_NDELAY) || defined(O_NONBLOCK)</div><div class='del'>-#   ifdef O_NONBLOCK</div><div class='del'>-    rb_file_const("NONBLOCK", INT2FIX(O_NONBLOCK));</div><div class='del'>-#   else</div><div class='del'>-    rb_file_const("NONBLOCK", INT2FIX(O_NDELAY));</div><div class='del'>-#   endif</div><div class='del'>-#endif</div><div class='del'>-    rb_file_const("TRUNC", INT2FIX(O_TRUNC));</div><div class='del'>-#ifdef O_NOCTTY</div><div class='del'>-    rb_file_const("NOCTTY", INT2FIX(O_NOCTTY));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_BINARY</div><div class='del'>-    rb_file_const("BINARY", INT2FIX(O_BINARY));</div><div class='del'>-#endif</div><div class='del'>-#ifdef O_SYNC</div><div class='del'>-    rb_file_const("SYNC", INT2FIX(O_SYNC));</div><div class='del'>-#endif</div><div class='ctx'> }</div><div class='head'>diff --git a/io.h b/io.h<br/>new file mode 100644<br/>index 0000000000..f325de3c3c<br/>--- /dev/null<br/>+++ b/<a href='/ruby.git/tree/io.h?h=v0_50&amp;id=6e3090413652b6592346556149fed1e9aec5495d'>io.h</a></div><div class='hunk'>@@ -0,0 +1,47 @@</div><div class='add'>+/************************************************</div><div class='add'>+</div><div class='add'>+  io.h -</div><div class='add'>+</div><div class='add'>+  $Author: matz $</div><div class='add'>+  $Revision: 1.1.1.1 $</div><div class='add'>+  $Date: 1994/06/17 14:23:50 $</div><div class='add'>+  created at: Fri Nov 12 16:47:09 JST 1993</div><div class='add'>+</div><div class='add'>+  Copyright (C) 1994 Yukihiro Matsumoto</div><div class='add'>+</div><div class='add'>+************************************************/</div><div class='add'>+</div><div class='add'>+#ifndef IO_H</div><div class='add'>+#define IO_H</div><div class='add'>+</div><div class='add'>+#include &lt;stdio.h&gt;</div><div class='add'>+#include &lt;errno.h&gt;</div><div class='add'>+</div><div class='add'>+typedef struct {</div><div class='add'>+    FILE *f;			/* stdio ptr for read/write */</div><div class='add'>+    FILE *f2;			/* additional ptr for rw pipes */</div><div class='add'>+    int mode;			/* mode flags */</div><div class='add'>+    int pid;			/* child's pid (for pipes) */</div><div class='add'>+    int lineno;			/* number of lines read */</div><div class='add'>+    char *path;			/* pathname for file */</div><div class='add'>+} OpenFile;</div><div class='add'>+</div><div class='add'>+#define FMODE_READABLE  1</div><div class='add'>+#define FMODE_WRITABLE  2</div><div class='add'>+#define FMODE_READWRITE 3</div><div class='add'>+#define FMODE_SYNC      4</div><div class='add'>+</div><div class='add'>+#define GetOpenFile(obj,fp) Get_Data_Struct(obj, "fd", OpenFile, fp)</div><div class='add'>+</div><div class='add'>+void io_free_OpenFile();</div><div class='add'>+</div><div class='add'>+#define MakeOpenFile(obj, fp) {\</div><div class='add'>+    Make_Data_Struct(obj, "fd", OpenFile, Qnil, io_free_OpenFile, fp);\</div><div class='add'>+    fp-&gt;f = fp-&gt;f2 = NULL;\</div><div class='add'>+    fp-&gt;mode = 0;\</div><div class='add'>+    fp-&gt;pid = 0;\</div><div class='add'>+    fp-&gt;lineno = 0;\</div><div class='add'>+    fp-&gt;path = NULL;\</div><div class='add'>+}</div><div class='add'>+</div><div class='add'>+#endif</div><div class='head'>diff --git a/keywords b/keywords<br/>deleted file mode 100644<br/>index 6eed5e1f4d..0000000000<br/>--- a/<a href='/ruby.git/tree/keywords?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>keywords</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,42 +0,0 @@</div><div class='del'>-struct kwtable {const char *name; int id[2]; enum lex_state state;};</div><div class='del'>-%%</div><div class='del'>-__LINE__, {k__LINE__, k__LINE__}, EXPR_END</div><div class='del'>-__FILE__, {k__FILE__, k__FILE__}, EXPR_END</div><div class='del'>-BEGIN, {klBEGIN, klBEGIN}, EXPR_END</div><div class='del'>-END, {klEND, klEND}, EXPR_END</div><div class='del'>-alias, {kALIAS, kALIAS}, EXPR_FNAME</div><div class='del'>-and, {kAND, kAND}, EXPR_BEG</div><div class='del'>-begin, {kBEGIN, kBEGIN}, EXPR_BEG</div><div class='del'>-break, {kBREAK, kBREAK}, EXPR_MID</div><div class='del'>-case, {kCASE, kCASE}, EXPR_BEG</div><div class='del'>-class, {kCLASS, kCLASS}, EXPR_CLASS</div><div class='del'>-def, {kDEF, kDEF}, EXPR_FNAME</div><div class='del'>-defined?, {kDEFINED, kDEFINED}, EXPR_ARG</div><div class='del'>-do, {kDO, kDO}, EXPR_BEG</div><div class='del'>-else, {kELSE, kELSE}, EXPR_BEG</div><div class='del'>-elsif, {kELSIF, kELSIF}, EXPR_BEG</div><div class='del'>-end, {kEND, kEND}, EXPR_END</div><div class='del'>-ensure, {kENSURE, kENSURE}, EXPR_BEG</div><div class='del'>-false, {kFALSE, kFALSE}, EXPR_END</div><div class='del'>-for, {kFOR, kFOR}, EXPR_BEG</div><div class='del'>-if, {kIF, kIF_MOD}, EXPR_BEG</div><div class='del'>-in, {kIN, kIN}, EXPR_BEG</div><div class='del'>-module, {kMODULE, kMODULE}, EXPR_BEG</div><div class='del'>-next, {kNEXT, kNEXT}, EXPR_MID</div><div class='del'>-nil, {kNIL, kNIL}, EXPR_END</div><div class='del'>-not, {kNOT, kNOT}, EXPR_BEG</div><div class='del'>-or, {kOR, kOR}, EXPR_BEG</div><div class='del'>-redo, {kREDO, kREDO}, EXPR_END</div><div class='del'>-rescue, {kRESCUE, kRESCUE_MOD}, EXPR_MID</div><div class='del'>-retry, {kRETRY, kRETRY}, EXPR_END</div><div class='del'>-return, {kRETURN, kRETURN}, EXPR_MID</div><div class='del'>-self, {kSELF, kSELF}, EXPR_END</div><div class='del'>-super, {kSUPER, kSUPER}, EXPR_ARG</div><div class='del'>-then, {kTHEN, kTHEN}, EXPR_BEG</div><div class='del'>-true, {kTRUE, kTRUE}, EXPR_END</div><div class='del'>-undef, {kUNDEF, kUNDEF}, EXPR_FNAME</div><div class='del'>-unless, {kUNLESS, kUNLESS_MOD}, EXPR_BEG</div><div class='del'>-until, {kUNTIL, kUNTIL_MOD}, EXPR_BEG</div><div class='del'>-when, {kWHEN, kWHEN}, EXPR_BEG</div><div class='del'>-while, {kWHILE, kWHILE_MOD}, EXPR_BEG</div><div class='del'>-yield, {kYIELD, kYIELD}, EXPR_ARG</div><div class='head'>diff --git a/lex.c b/lex.c<br/>deleted file mode 100644<br/>index a15309d502..0000000000<br/>--- a/<a href='/ruby.git/tree/lex.c?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lex.c</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,136 +0,0 @@</div><div class='del'>-/* C code produced by gperf version 2.7.2 */</div><div class='del'>-/* Command-line: gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k'1,3,$' ./keywords  */</div><div class='del'>-struct kwtable {const char *name; int id[2]; enum lex_state state;};</div><div class='del'>-</div><div class='del'>-#define TOTAL_KEYWORDS 40</div><div class='del'>-#define MIN_WORD_LENGTH 2</div><div class='del'>-#define MAX_WORD_LENGTH 8</div><div class='del'>-#define MIN_HASH_VALUE 6</div><div class='del'>-#define MAX_HASH_VALUE 55</div><div class='del'>-/* maximum key range = 50, duplicates = 0 */</div><div class='del'>-</div><div class='del'>-#ifdef __GNUC__</div><div class='del'>-__inline</div><div class='del'>-#else</div><div class='del'>-#ifdef __cplusplus</div><div class='del'>-inline</div><div class='del'>-#endif</div><div class='del'>-#endif</div><div class='del'>-static unsigned int</div><div class='del'>-hash (str, len)</div><div class='del'>-     register const char *str;</div><div class='del'>-     register unsigned int len;</div><div class='del'>-{</div><div class='del'>-  static unsigned char asso_values[] =</div><div class='del'>-    {</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 11, 56, 56, 36, 56,  1, 37,</div><div class='del'>-      31,  1, 56, 56, 56, 56, 29, 56,  1, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56,  1, 56, 32,  1,  2,</div><div class='del'>-       1,  1,  4, 23, 56, 17, 56, 20,  9,  2,</div><div class='del'>-       9, 26, 14, 56,  5,  1,  1, 16, 56, 21,</div><div class='del'>-      20,  9, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56, 56, 56, 56, 56,</div><div class='del'>-      56, 56, 56, 56, 56, 56</div><div class='del'>-    };</div><div class='del'>-  register int hval = len;</div><div class='del'>-</div><div class='del'>-  switch (hval)</div><div class='del'>-    {</div><div class='del'>-      default:</div><div class='del'>-      case 3:</div><div class='del'>-        hval += asso_values[(unsigned char)str[2]];</div><div class='del'>-      case 2:</div><div class='del'>-      case 1:</div><div class='del'>-        hval += asso_values[(unsigned char)str[0]];</div><div class='del'>-        break;</div><div class='del'>-    }</div><div class='del'>-  return hval + asso_values[(unsigned char)str[len - 1]];</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-#ifdef __GNUC__</div><div class='del'>-__inline</div><div class='del'>-#endif</div><div class='del'>-struct kwtable *</div><div class='del'>-rb_reserved_word (str, len)</div><div class='del'>-     register const char *str;</div><div class='del'>-     register unsigned int len;</div><div class='del'>-{</div><div class='del'>-  static struct kwtable wordlist[] =</div><div class='del'>-    {</div><div class='del'>-      {""}, {""}, {""}, {""}, {""}, {""},</div><div class='del'>-      {"end", {kEND, kEND}, EXPR_END},</div><div class='del'>-      {"else", {kELSE, kELSE}, EXPR_BEG},</div><div class='del'>-      {"case", {kCASE, kCASE}, EXPR_BEG},</div><div class='del'>-      {"ensure", {kENSURE, kENSURE}, EXPR_BEG},</div><div class='del'>-      {"module", {kMODULE, kMODULE}, EXPR_BEG},</div><div class='del'>-      {"elsif", {kELSIF, kELSIF}, EXPR_BEG},</div><div class='del'>-      {"def", {kDEF, kDEF}, EXPR_FNAME},</div><div class='del'>-      {"rescue", {kRESCUE, kRESCUE_MOD}, EXPR_MID},</div><div class='del'>-      {"not", {kNOT, kNOT}, EXPR_BEG},</div><div class='del'>-      {"then", {kTHEN, kTHEN}, EXPR_BEG},</div><div class='del'>-      {"yield", {kYIELD, kYIELD}, EXPR_ARG},</div><div class='del'>-      {"for", {kFOR, kFOR}, EXPR_BEG},</div><div class='del'>-      {"self", {kSELF, kSELF}, EXPR_END},</div><div class='del'>-      {"false", {kFALSE, kFALSE}, EXPR_END},</div><div class='del'>-      {"retry", {kRETRY, kRETRY}, EXPR_END},</div><div class='del'>-      {"return", {kRETURN, kRETURN}, EXPR_MID},</div><div class='del'>-      {"true", {kTRUE, kTRUE}, EXPR_END},</div><div class='del'>-      {"if", {kIF, kIF_MOD}, EXPR_BEG},</div><div class='del'>-      {"defined?", {kDEFINED, kDEFINED}, EXPR_ARG},</div><div class='del'>-      {"super", {kSUPER, kSUPER}, EXPR_ARG},</div><div class='del'>-      {"undef", {kUNDEF, kUNDEF}, EXPR_FNAME},</div><div class='del'>-      {"break", {kBREAK, kBREAK}, EXPR_MID},</div><div class='del'>-      {"in", {kIN, kIN}, EXPR_BEG},</div><div class='del'>-      {"do", {kDO, kDO}, EXPR_BEG},</div><div class='del'>-      {"nil", {kNIL, kNIL}, EXPR_END},</div><div class='del'>-      {"until", {kUNTIL, kUNTIL_MOD}, EXPR_BEG},</div><div class='del'>-      {"unless", {kUNLESS, kUNLESS_MOD}, EXPR_BEG},</div><div class='del'>-      {"or", {kOR, kOR}, EXPR_BEG},</div><div class='del'>-      {"next", {kNEXT, kNEXT}, EXPR_MID},</div><div class='del'>-      {"when", {kWHEN, kWHEN}, EXPR_BEG},</div><div class='del'>-      {"redo", {kREDO, kREDO}, EXPR_END},</div><div class='del'>-      {"and", {kAND, kAND}, EXPR_BEG},</div><div class='del'>-      {"begin", {kBEGIN, kBEGIN}, EXPR_BEG},</div><div class='del'>-      {"__LINE__", {k__LINE__, k__LINE__}, EXPR_END},</div><div class='del'>-      {"class", {kCLASS, kCLASS}, EXPR_CLASS},</div><div class='del'>-      {"__FILE__", {k__FILE__, k__FILE__}, EXPR_END},</div><div class='del'>-      {"END", {klEND, klEND}, EXPR_END},</div><div class='del'>-      {"BEGIN", {klBEGIN, klBEGIN}, EXPR_END},</div><div class='del'>-      {"while", {kWHILE, kWHILE_MOD}, EXPR_BEG},</div><div class='del'>-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},</div><div class='del'>-      {""},</div><div class='del'>-      {"alias", {kALIAS, kALIAS}, EXPR_FNAME}</div><div class='del'>-    };</div><div class='del'>-</div><div class='del'>-  if (len &lt;= MAX_WORD_LENGTH &amp;&amp; len &gt;= MIN_WORD_LENGTH)</div><div class='del'>-    {</div><div class='del'>-      register int key = hash (str, len);</div><div class='del'>-</div><div class='del'>-      if (key &lt;= MAX_HASH_VALUE &amp;&amp; key &gt;= 0)</div><div class='del'>-        {</div><div class='del'>-          register const char *s = wordlist[key].name;</div><div class='del'>-</div><div class='del'>-          if (*str == *s &amp;&amp; !strcmp (str + 1, s + 1))</div><div class='del'>-            return &amp;wordlist[key];</div><div class='del'>-        }</div><div class='del'>-    }</div><div class='del'>-  return 0;</div><div class='del'>-}</div><div class='head'>diff --git a/lib/.document b/lib/.document<br/>deleted file mode 100644<br/>index 2159be8360..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/.document?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/.document</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,106 +0,0 @@</div><div class='del'>-# We only run RDoc on the top-level files in here: we skip</div><div class='del'>-# all the helper stuff in sub-directories</div><div class='del'>-</div><div class='del'>-# Eventually, we hope to see...</div><div class='del'>-# *.rb</div><div class='del'>-</div><div class='del'>-# But for now</div><div class='del'>-</div><div class='del'>-English.rb</div><div class='del'>-Env.rb</div><div class='del'>-README</div><div class='del'>-abbrev.rb</div><div class='del'>-base64.rb</div><div class='del'>-benchmark.rb</div><div class='del'>-cgi</div><div class='del'>-cgi.rb</div><div class='del'>-cgi-lib.rb</div><div class='del'>-complex.rb</div><div class='del'>-csv.rb</div><div class='del'>-date</div><div class='del'>-date.rb</div><div class='del'>-date2.rb</div><div class='del'>-debug.rb</div><div class='del'>-delegate.rb</div><div class='del'>-drb</div><div class='del'>-drb.rb</div><div class='del'>-e2mmap.rb</div><div class='del'>-erb.rb</div><div class='del'>-eregex.rb</div><div class='del'>-fileutils.rb</div><div class='del'>-finalize.rb</div><div class='del'>-find.rb</div><div class='del'>-forwardable.rb</div><div class='del'>-ftools.rb</div><div class='del'>-generator.rb</div><div class='del'>-getoptlong.rb</div><div class='del'>-getopts.rb</div><div class='del'>-gserver.rb</div><div class='del'>-importenv.rb</div><div class='del'>-ipaddr.rb</div><div class='del'>-irb</div><div class='del'>-irb.rb</div><div class='del'>-jcode.rb</div><div class='del'>-logger.rb</div><div class='del'>-mailread.rb</div><div class='del'>-mathn.rb</div><div class='del'>-matrix.rb</div><div class='del'>-mkmf.rb</div><div class='del'>-monitor.rb</div><div class='del'>-mutex_m.rb</div><div class='del'>-net</div><div class='del'>-observer.rb</div><div class='del'>-open-uri.rb</div><div class='del'>-open3.rb</div><div class='del'>-optparse</div><div class='del'>-optparse.rb</div><div class='del'>-ostruct.rb</div><div class='del'>-parsearg.rb</div><div class='del'>-parsedate.rb</div><div class='del'>-pathname.rb</div><div class='del'>-ping.rb</div><div class='del'>-pp.rb</div><div class='del'>-prettyprint.rb</div><div class='del'>-profile.rb</div><div class='del'>-profiler.rb</div><div class='del'>-pstore.rb</div><div class='del'>-racc</div><div class='del'>-rational.rb</div><div class='del'>-rdoc</div><div class='del'>-readbytes.rb</div><div class='del'>-resolv-replace.rb</div><div class='del'>-resolv.rb</div><div class='del'>-rexml</div><div class='del'>-rinda</div><div class='del'>-rss</div><div class='del'>-rss.rb</div><div class='del'>-rubyunit.rb</div><div class='del'>-runit</div><div class='del'>-scanf.rb</div><div class='del'>-set.rb</div><div class='del'>-shell</div><div class='del'>-shell.rb</div><div class='del'>-shellwords.rb</div><div class='del'>-singleton.rb</div><div class='del'>-soap</div><div class='del'>-sync.rb</div><div class='del'>-tempfile.rb</div><div class='del'>-test</div><div class='del'>-thread.rb</div><div class='del'>-thwait.rb</div><div class='del'>-time.rb</div><div class='del'>-timeout.rb</div><div class='del'>-tmpdir.rb</div><div class='del'>-tracer.rb</div><div class='del'>-tsort.rb</div><div class='del'>-un.rb</div><div class='del'>-uri</div><div class='del'>-uri.rb</div><div class='del'>-weakref.rb</div><div class='del'>-webrick</div><div class='del'>-webrick.rb</div><div class='del'>-wsdl</div><div class='del'>-xmlrpc</div><div class='del'>-xsd</div><div class='del'>-yaml</div><div class='del'>-yaml.rb</div><div class='head'>diff --git a/lib/English.rb b/lib/English.rb<br/>deleted file mode 100644<br/>index 1a0e11de74..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/English.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/English.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,155 +0,0 @@</div><div class='del'>-#  Include the English library file in a Ruby script, and you can</div><div class='del'>-#  reference the global variables such as \VAR{\$\_} using less</div><div class='del'>-#  cryptic names, listed in the following table.% \vref{tab:english}.</div><div class='del'>-#</div><div class='del'>-#  Without 'English':</div><div class='del'>-#</div><div class='del'>-#      $\ = ' -- '</div><div class='del'>-#      "waterbuffalo" =~ /buff/</div><div class='del'>-#      print $", $', $$, "\n"</div><div class='del'>-#</div><div class='del'>-#  With English:</div><div class='del'>-#</div><div class='del'>-#      require "English"</div><div class='del'>-#      </div><div class='del'>-#      $OUTPUT_FIELD_SEPARATOR = ' -- '</div><div class='del'>-#      "waterbuffalo" =~ /buff/</div><div class='del'>-#      print $LOADED_FEATURES, $POSTMATCH, $PID, "\n"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# The exception object passed to +raise+.</div><div class='del'>-alias $ERROR_INFO              $!</div><div class='del'>-</div><div class='del'>-# The stack backtrace generated by the last</div><div class='del'>-# exception. &lt;tt&gt;See Kernel.caller&lt;/tt&gt; for details. Thread local.</div><div class='del'>-alias $ERROR_POSITION          $@</div><div class='del'>-</div><div class='del'>-# The default separator pattern used by &lt;tt&gt;String.split&lt;/tt&gt;.  May be</div><div class='del'>-# set from the command line using the &lt;tt&gt;-F&lt;/tt&gt; flag.</div><div class='del'>-alias $FS                      $;</div><div class='del'>-</div><div class='del'>-# The default separator pattern used by &lt;tt&gt;String.split&lt;/tt&gt;.  May be</div><div class='del'>-# set from the command line using the &lt;tt&gt;-F&lt;/tt&gt; flag.</div><div class='del'>-alias $FIELD_SEPARATOR         $;</div><div class='del'>-</div><div class='del'>-# The separator string output between the parameters to methods such</div><div class='del'>-# as &lt;tt&gt;Kernel.print&lt;/tt&gt; and &lt;tt&gt;Array.join&lt;/tt&gt;. Defaults to +nil+,</div><div class='del'>-# which adds no text.</div><div class='del'>-alias $OFS                     $,</div><div class='del'>-</div><div class='del'>-# The separator string output between the parameters to methods such</div><div class='del'>-# as &lt;tt&gt;Kernel.print&lt;/tt&gt; and &lt;tt&gt;Array.join&lt;/tt&gt;. Defaults to +nil+,</div><div class='del'>-# which adds no text.</div><div class='del'>-alias $OUTPUT_FIELD_SEPARATOR  $,</div><div class='del'>-</div><div class='del'>-# The input record separator (newline by default). This is the value</div><div class='del'>-# that routines such as &lt;tt&gt;Kernel.gets&lt;/tt&gt; use to determine record</div><div class='del'>-# boundaries. If set to +nil+, +gets+ will read the entire file.</div><div class='del'>-alias $RS                      $/</div><div class='del'>-</div><div class='del'>-# The input record separator (newline by default). This is the value</div><div class='del'>-# that routines such as &lt;tt&gt;Kernel.gets&lt;/tt&gt; use to determine record</div><div class='del'>-# boundaries. If set to +nil+, +gets+ will read the entire file.</div><div class='del'>-alias $INPUT_RECORD_SEPARATOR  $/</div><div class='del'>-</div><div class='del'>-# The string appended to the output of every call to methods such as</div><div class='del'>-# &lt;tt&gt;Kernel.print&lt;/tt&gt; and &lt;tt&gt;IO.write&lt;/tt&gt;. The default value is</div><div class='del'>-# +nil+.</div><div class='del'>-alias $ORS                     $\</div><div class='del'>-</div><div class='del'>-# The string appended to the output of every call to methods such as</div><div class='del'>-# &lt;tt&gt;Kernel.print&lt;/tt&gt; and &lt;tt&gt;IO.write&lt;/tt&gt;. The default value is</div><div class='del'>-# +nil+.</div><div class='del'>-alias $OUTPUT_RECORD_SEPARATOR $\</div><div class='del'>-</div><div class='del'>-# The number of the last line read from the current input file.</div><div class='del'>-alias $INPUT_LINE_NUMBER       $.</div><div class='del'>-</div><div class='del'>-# The number of the last line read from the current input file.</div><div class='del'>-alias $NR                      $.</div><div class='del'>-</div><div class='del'>-# The last line read by &lt;tt&gt;Kernel.gets&lt;/tt&gt; or</div><div class='del'>-# &lt;tt&gt;Kernel.readline&lt;/tt&gt;. Many string-related functions in the</div><div class='del'>-# +Kernel+ module operate on &lt;tt&gt;$_&lt;/tt&gt; by default. The variable is</div><div class='del'>-# local to the current scope. Thread local.</div><div class='del'>-alias $LAST_READ_LINE          $_</div><div class='del'>-</div><div class='del'>-# The destination of output for &lt;tt&gt;Kernel.print&lt;/tt&gt;</div><div class='del'>-# and &lt;tt&gt;Kernel.printf&lt;/tt&gt;. The default value is</div><div class='del'>-# &lt;tt&gt;$stdout&lt;/tt&gt;.</div><div class='del'>-alias $DEFAULT_OUTPUT          $&gt;</div><div class='del'>-</div><div class='del'>-# An object that provides access to the concatenation</div><div class='del'>-# of the contents of all the files</div><div class='del'>-# given as command-line arguments, or &lt;tt&gt;$stdin&lt;/tt&gt;</div><div class='del'>-# (in the case where there are no</div><div class='del'>-# arguments). &lt;tt&gt;$&lt;&lt;/tt&gt; supports methods similar to a </div><div class='del'>-# +File+ object:</div><div class='del'>-# +inmode+, +close+,</div><div class='del'>-# &lt;tt&gt;closed?&lt;/tt&gt;, +each+,</div><div class='del'>-# &lt;tt&gt;each_byte&lt;/tt&gt;, &lt;tt&gt;each_line&lt;/tt&gt;,</div><div class='del'>-# +eof+, &lt;tt&gt;eof?&lt;/tt&gt;, +file+,</div><div class='del'>-# +filename+, +fileno+,</div><div class='del'>-# +getc+, +gets+, +lineno+,</div><div class='del'>-# &lt;tt&gt;lineno=&lt;/tt&gt;, +path+, </div><div class='del'>-# +pos+, &lt;tt&gt;pos=&lt;/tt&gt;,</div><div class='del'>-# +read+, +readchar+,</div><div class='del'>-# +readline+, +readlines+,</div><div class='del'>-# +rewind+, +seek+, +skip+,</div><div class='del'>-# +tell+, &lt;tt&gt;to_a&lt;/tt&gt;, &lt;tt&gt;to_i&lt;/tt&gt;,</div><div class='del'>-# &lt;tt&gt;to_io&lt;/tt&gt;, &lt;tt&gt;to_s&lt;/tt&gt;, along with the</div><div class='del'>-# methods in +Enumerable+. The method +file+</div><div class='del'>-# returns a +File+ object for the file currently</div><div class='del'>-# being read. This may change as &lt;tt&gt;$&lt;&lt;/tt&gt; reads</div><div class='del'>-# through the files on the command line. Read only.</div><div class='del'>-alias $DEFAULT_INPUT           $&lt;</div><div class='del'>-</div><div class='del'>-# The process number of the program being executed. Read only.</div><div class='del'>-alias $PID                     $$</div><div class='del'>-</div><div class='del'>-# The process number of the program being executed. Read only.</div><div class='del'>-alias $PROCESS_ID              $$</div><div class='del'>-</div><div class='del'>-# The exit status of the last child process to terminate. Read</div><div class='del'>-# only. Thread local.</div><div class='del'>-alias $CHILD_STATUS            $?</div><div class='del'>-</div><div class='del'>-# A +MatchData+ object that encapsulates the results of a successful</div><div class='del'>-# pattern match. The variables &lt;tt&gt;$&amp;&lt;/tt&gt;, &lt;tt&gt;$`&lt;/tt&gt;, &lt;tt&gt;$'&lt;/tt&gt;,</div><div class='del'>-# and &lt;tt&gt;$1&lt;/tt&gt; to &lt;tt&gt;$9&lt;/tt&gt; are all derived from</div><div class='del'>-# &lt;tt&gt;$~&lt;/tt&gt;. Assigning to &lt;tt&gt;$~&lt;/tt&gt; changes the values of these</div><div class='del'>-# derived variables.  This variable is local to the current</div><div class='del'>-# scope. Thread local.</div><div class='del'>-alias $LAST_MATCH_INFO         $~</div><div class='del'>-</div><div class='del'>-# If set to any value apart from +nil+ or +false+, all pattern matches</div><div class='del'>-# will be case insensitive, string comparisons will ignore case, and</div><div class='del'>-# string hash values will be case insensitive. Deprecated</div><div class='del'>-alias $IGNORECASE              $=</div><div class='del'>-</div><div class='del'>-# An array of strings containing the command-line</div><div class='del'>-# options from the invocation of the program. Options</div><div class='del'>-# used by the Ruby interpreter will have been</div><div class='del'>-# removed. Read only. Also known simply as +ARGV+.</div><div class='del'>-alias $ARGV                    $*</div><div class='del'>-</div><div class='del'>-# The string matched by the last successful pattern</div><div class='del'>-# match. This variable is local to the current</div><div class='del'>-# scope. Read only. Thread local.</div><div class='del'>-alias $MATCH                   $&amp;</div><div class='del'>-</div><div class='del'>-# The string preceding the match in the last</div><div class='del'>-# successful pattern match. This variable is local to </div><div class='del'>-# the current scope. Read only. Thread local.</div><div class='del'>-alias $PREMATCH                $`</div><div class='del'>-</div><div class='del'>-# The string following the match in the last</div><div class='del'>-# successful pattern match. This variable is local to </div><div class='del'>-# the current scope. Read only. Thread local.</div><div class='del'>-alias $POSTMATCH               $'</div><div class='del'>-</div><div class='del'>-# The contents of the highest-numbered group matched in the last</div><div class='del'>-# successful pattern match. Thus, in &lt;tt&gt;"cat" =~ /(c|a)(t|z)/&lt;/tt&gt;,</div><div class='del'>-# &lt;tt&gt;$+&lt;/tt&gt; will be set to "t".  This variable is local to the</div><div class='del'>-# current scope. Read only. Thread local.</div><div class='del'>-alias $LAST_PAREN_MATCH        $+</div><div class='head'>diff --git a/lib/Env.rb b/lib/Env.rb<br/>deleted file mode 100644<br/>index 452a28659e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/Env.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/Env.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-# Env.rb -- imports environment variables as global variables, Perlish ;(</div><div class='del'>-# Usage:</div><div class='del'>-#</div><div class='del'>-#  require 'Env'</div><div class='del'>-#  p $USER</div><div class='del'>-#  $USER = "matz"</div><div class='del'>-#  p ENV["USER"]</div><div class='del'>-</div><div class='del'>-require 'importenv'</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  p $TERM</div><div class='del'>-  $TERM = nil</div><div class='del'>-  p $TERM</div><div class='del'>-  p ENV["TERM"]</div><div class='del'>-  $TERM = "foo"</div><div class='del'>-  p ENV["TERM"]</div><div class='del'>-end</div><div class='head'>diff --git a/lib/README b/lib/README<br/>deleted file mode 100644<br/>index fa2bbd9635..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,96 +0,0 @@</div><div class='del'>-English.rb	lets Perl'ish global variables have English names</div><div class='del'>-Env.rb		loads importenv.rb</div><div class='del'>-README		this file</div><div class='del'>-base64.rb	encodes/decodes base64 (obsolete)</div><div class='del'>-benchmark.rb	a benchmark utility</div><div class='del'>-cgi-lib.rb	simple CGI support library (old style)</div><div class='del'>-cgi.rb		CGI support library</div><div class='del'>-cgi/session.rb	CGI session class</div><div class='del'>-complex.rb	complex number support</div><div class='del'>-csv.rb		CSV parser/generator</div><div class='del'>-date.rb		date object</div><div class='del'>-date/format.rb	date parsing and formatting</div><div class='del'>-date2.rb	date object (obsolete; use date)</div><div class='del'>-debug.rb	ruby debugger</div><div class='del'>-delegate.rb	delegates messages to other object</div><div class='del'>-drb.rb		distributed Ruby</div><div class='del'>-e2mmap.rb	exception utilities</div><div class='del'>-erb.rb		tiny eRuby library</div><div class='del'>-eregex.rb	extended regular expression (just a proof of concept)</div><div class='del'>-fileutils.rb	file utilities</div><div class='del'>-finalize.rb	adds finalizer to the object</div><div class='del'>-find.rb		traverses directory tree</div><div class='del'>-forwardable.rb	explicit delegation library</div><div class='del'>-ftools.rb	file tools</div><div class='del'>-getoptlong.rb	GNU getoptlong compatible</div><div class='del'>-getopts.rb	parses command line options (use getoptlong)</div><div class='del'>-gserver.rb	general TCP server</div><div class='del'>-importenv.rb	imports environment variables as global variables</div><div class='del'>-ipaddr.rb	defines the IPAddr class</div><div class='del'>-irb.rb		interactive ruby</div><div class='del'>-jcode.rb	Japanese text handling (replace String methods)</div><div class='del'>-logger.rb	simple logging utility</div><div class='del'>-mailread.rb	reads mail headers</div><div class='del'>-mathn.rb	extended math operation</div><div class='del'>-matrix.rb	matrix calculation library</div><div class='del'>-mkmf.rb		Makefile maker</div><div class='del'>-monitor.rb	exclusive region monitor for thread</div><div class='del'>-mutex_m.rb	mutex mixin</div><div class='del'>-net/ftp.rb	ftp access</div><div class='del'>-net/http.rb	HTTP access</div><div class='del'>-net/imap.rb	IMAP4 access</div><div class='del'>-net/pop.rb	POP3 access</div><div class='del'>-net/protocol.rb	abstract class for net library (DO NOT USE)</div><div class='del'>-net/smtp.rb	SMTP access</div><div class='del'>-net/telnet.rb	telnet library</div><div class='del'>-observer.rb	observer desing pattern library (provides Observable)</div><div class='del'>-open-uri.rb	easy-to-use network interface using URI and Net</div><div class='del'>-open3.rb	opens subprocess connection stdin/stdout/stderr</div><div class='del'>-optparse.rb	command line option analysis</div><div class='del'>-ostruct.rb	python style object</div><div class='del'>-parsearg.rb	argument parser using getopts</div><div class='del'>-parsedate.rb	parses date string (obsolete)</div><div class='del'>-pathname.rb	Object-Oriented Pathname Class</div><div class='del'>-ping.rb		checks whether host is up, using TCP echo.</div><div class='del'>-pp.rb		pretty print objects</div><div class='del'>-prettyprint.rb	pretty printing algorithm</div><div class='del'>-profile.rb	runs ruby profiler</div><div class='del'>-profiler.rb	ruby profiler module</div><div class='del'>-pstore.rb	persistent object strage using marshal</div><div class='del'>-racc/parser.rb	racc (Ruby yACC) runtime</div><div class='del'>-rational.rb	rational number support</div><div class='del'>-rdoc	source-code documentation tool</div><div class='del'>-readbytes.rb	define IO#readbytes</div><div class='del'>-resolv-replace.rb	replace Socket DNS by resolve.rb</div><div class='del'>-resolv.rb	DNS resolver in Ruby</div><div class='del'>-rexml		an XML parser for Ruby, in Ruby</div><div class='del'>-rubyunit.rb	original Ruby Unit testing framework</div><div class='del'>-scanf.rb	scanf for Ruby</div><div class='del'>-set.rb		defines the Set class</div><div class='del'>-shell.rb	runs commands and does pipeline operations like shell</div><div class='del'>-shellwords.rb	split into words like shell</div><div class='del'>-singleton.rb	singleton design pattern library</div><div class='del'>-soap		SOAP 1.1 implementation</div><div class='del'>-sync.rb		2 phase lock</div><div class='del'>-tempfile.rb	temporary file with automatic removal</div><div class='del'>-test/unit	Ruby Unit Testing Framework</div><div class='del'>-thread.rb	thread support</div><div class='del'>-thwait.rb	thread syncronization class</div><div class='del'>-time.rb		RFC2822, RFC2616, ISO8601 style time formatting/parsing</div><div class='del'>-timeout.rb	provides timeout</div><div class='del'>-tmpdir.rb	retrieve temporary directory path</div><div class='del'>-tracer.rb	execution tracer</div><div class='del'>-tsort.rb	topological sorting</div><div class='del'>-un.rb		Utilities to replace common UNIX commands in Makefiles etc</div><div class='del'>-uri.rb		URI support</div><div class='del'>-uri/ftp.rb	ftp scheme support</div><div class='del'>-uri/http.rb	http scheme support</div><div class='del'>-uri/https.rb	https scheme support</div><div class='del'>-uri/ldap.rb	ldap scheme support</div><div class='del'>-uri/mailto.rb	mailto scheme support</div><div class='del'>-weakref.rb	weak reference class</div><div class='del'>-webrick.rb	WEB server toolkit</div><div class='del'>-wsdl		WSDL 1.1 implementation</div><div class='del'>-xmlrpc		XML-RPC implementation</div><div class='del'>-xsd		XML Schema Datatypes implementation</div><div class='del'>-yaml.rb		YAML implementation</div><div class='head'>diff --git a/lib/abbrev.rb b/lib/abbrev.rb<br/>deleted file mode 100644<br/>index 6530679681..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/abbrev.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/abbrev.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,103 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-=begin</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 2001,2003 Akinori MUSHA &lt;knu@iDaemons.org&gt;</div><div class='del'>-#</div><div class='del'>-# All rights reserved.  You can redistribute and/or modify it under</div><div class='del'>-# the same terms as Ruby.</div><div class='del'>-#</div><div class='del'>-# $Idaemons: /home/cvs/rb/abbrev.rb,v 1.2 2001/05/30 09:37:45 knu Exp $</div><div class='del'>-# $RoughId: abbrev.rb,v 1.4 2003/10/14 19:45:42 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-# Calculate the set of unique abbreviations for a given set of strings.</div><div class='del'>-#</div><div class='del'>-#   require 'abbrev'</div><div class='del'>-#   require 'pp'</div><div class='del'>-#</div><div class='del'>-#   pp Abbrev::abbrev(['ruby', 'rules']).sort</div><div class='del'>-#</div><div class='del'>-# &lt;i&gt;Generates:&lt;/i&gt;</div><div class='del'>-#</div><div class='del'>-#   [["rub", "ruby"],</div><div class='del'>-#    ["ruby", "ruby"],</div><div class='del'>-#    ["rul", "rules"],</div><div class='del'>-#    ["rule", "rules"],</div><div class='del'>-#    ["rules", "rules"]]</div><div class='del'>-#</div><div class='del'>-# Also adds an +abbrev+ method to class +Array+.</div><div class='del'>-</div><div class='del'>-module Abbrev</div><div class='del'>-</div><div class='del'>-  # Given a set of strings, calculate the set of unambiguous</div><div class='del'>-  # abbreviations for those strings, and return a hash where the keys</div><div class='del'>-  # are all the possible abbreviations and the values are the full</div><div class='del'>-  # strings. Thus, given input of "car" and "cone", the keys pointing</div><div class='del'>-  # to "car" would be "ca" and "car", while those pointing to "cone"</div><div class='del'>-  # would be "co", "con", and "cone".</div><div class='del'>-  #</div><div class='del'>-  # The optional +pattern+ parameter is a pattern or a string. Only</div><div class='del'>-  # those input strings matching the pattern, or begging the string,</div><div class='del'>-  # are considered for inclusion in the output hash</div><div class='del'>-</div><div class='del'>-  def abbrev(words, pattern = nil)</div><div class='del'>-    table = {}</div><div class='del'>-    seen = Hash.new(0)</div><div class='del'>-</div><div class='del'>-    if pattern.is_a?(String)</div><div class='del'>-      pattern = /^#{Regexp.quote(pattern)}/	# regard as a prefix</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    words.each do |word|</div><div class='del'>-      next if (abbrev = word).empty?</div><div class='del'>-      while (len = abbrev.rindex(/[\w\W]\z/)) &gt; 0</div><div class='del'>-	abbrev = word[0,len]</div><div class='del'>-</div><div class='del'>-	next if pattern &amp;&amp; pattern !~ abbrev</div><div class='del'>-</div><div class='del'>-	case seen[abbrev] += 1</div><div class='del'>-	when 1</div><div class='del'>-	  table[abbrev] = word</div><div class='del'>-	when 2</div><div class='del'>-	  table.delete(abbrev)</div><div class='del'>-	else</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'>-    words.each do |word|</div><div class='del'>-      next if pattern &amp;&amp; pattern !~ word</div><div class='del'>-</div><div class='del'>-      table[word] = word</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    table</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :abbrev</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Array</div><div class='del'>-  # Calculates the set of unambiguous abbreviations for the strings in</div><div class='del'>-  # +self+. If passed a pattern or a string, only the strings matching</div><div class='del'>-  # the pattern or starting with the string are considered.</div><div class='del'>-  #</div><div class='del'>-  #   %w{ car cone }.abbrev   #=&gt; { "ca" =&gt; "car", "car" =&gt; "car",</div><div class='del'>-  #                                 "co" =&gt; "cone", "con" =&gt; cone",</div><div class='del'>-  #                                 "cone" =&gt; "cone" }</div><div class='del'>-  def abbrev(pattern = nil)</div><div class='del'>-    Abbrev::abbrev(self, pattern)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  while line = gets</div><div class='del'>-    hash = line.split.abbrev</div><div class='del'>-</div><div class='del'>-    hash.sort.each do |k, v|</div><div class='del'>-      puts "#{k} =&gt; #{v}"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/base64.rb b/lib/base64.rb<br/>deleted file mode 100644<br/>index 8628d611b2..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/base64.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/base64.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,133 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = base64.rb: methods for base64-encoding and -decoding stings</div><div class='del'>-#</div><div class='del'>-# Author:: Yukihiro Matsumoto </div><div class='del'>-# Documentation:: Dave Thomas and Gavin Sinclair</div><div class='del'>-#</div><div class='del'>-# Until Ruby 1.8.1, these methods were defined at the top-level.  Now</div><div class='del'>-# they are in the Base64 module but included in the top-level, where</div><div class='del'>-# their usage is deprecated.</div><div class='del'>-#</div><div class='del'>-# See Base64 for documentation.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "kconv"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# The Base64 module provides for the encoding (#encode64) and decoding</div><div class='del'>-# (#decode64) of binary data using a Base64 representation.</div><div class='del'>-# </div><div class='del'>-# The following particular features are also provided:</div><div class='del'>-# - encode into lines of a given length (#b64encode)</div><div class='del'>-# - decode the special format specified in RFC2047 for the</div><div class='del'>-#   representation of email headers (decode_b)</div><div class='del'>-#</div><div class='del'>-# == Example</div><div class='del'>-#</div><div class='del'>-# A simple encoding and decoding. </div><div class='del'>-# </div><div class='del'>-#     require "base64"</div><div class='del'>-#</div><div class='del'>-#     enc   = Base64.encode64('Send reinforcements')</div><div class='del'>-#                         # -&gt; "U2VuZCByZWluZm9yY2VtZW50cw==\n" </div><div class='del'>-#     plain = Base64.decode64(enc)</div><div class='del'>-#                         # -&gt; "Send reinforcements"</div><div class='del'>-#</div><div class='del'>-# The purpose of using base64 to encode data is that it translates any</div><div class='del'>-# binary data into purely printable characters.  It is specified in</div><div class='del'>-# RFC 2045 (http://www.faqs.org/rfcs/rfc2045.html).</div><div class='del'>-</div><div class='del'>-module Base64</div><div class='del'>-  module_function</div><div class='del'>-</div><div class='del'>-  # Returns the Base64-decoded version of +str+.</div><div class='del'>-  #</div><div class='del'>-  #   require 'base64'</div><div class='del'>-  #   str = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' +</div><div class='del'>-  #         'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' +</div><div class='del'>-  #         'ZSB0aHJlZQpBbmQgc28gb24uLi4K'</div><div class='del'>-  #   puts Base64.decode64(str)</div><div class='del'>-  #</div><div class='del'>-  # &lt;i&gt;Generates:&lt;/i&gt;</div><div class='del'>-  #</div><div class='del'>-  #    This is line one</div><div class='del'>-  #    This is line two</div><div class='del'>-  #    This is line three</div><div class='del'>-  #    And so on...</div><div class='del'>-</div><div class='del'>-  def decode64(str)</div><div class='del'>-    str.unpack("m")[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Decodes text formatted using a subset of RFC2047 (the one used for</div><div class='del'>-  # mime-encoding mail headers).</div><div class='del'>-  #</div><div class='del'>-  # Only supports an encoding type of 'b' (base 64), and only supports</div><div class='del'>-  # the character sets ISO-2022-JP and SHIFT_JIS (so the only two</div><div class='del'>-  # encoded word sequences recognized are &lt;tt&gt;=?ISO-2022-JP?B?...=&lt;/tt&gt; and</div><div class='del'>-  # &lt;tt&gt;=?SHIFT_JIS?B?...=&lt;/tt&gt;).  Recognition of these sequences is case</div><div class='del'>-  # insensitive.</div><div class='del'>-</div><div class='del'>-  def decode_b(str)</div><div class='del'>-    str.gsub!(/=\?ISO-2022-JP\?B\?([!-&gt;@-~]+)\?=/i) {</div><div class='del'>-      decode64($1)</div><div class='del'>-    }</div><div class='del'>-    str = Kconv::toeuc(str)</div><div class='del'>-    str.gsub!(/=\?SHIFT_JIS\?B\?([!-&gt;@-~]+)\?=/i) {</div><div class='del'>-      decode64($1)</div><div class='del'>-    }</div><div class='del'>-    str = Kconv::toeuc(str)</div><div class='del'>-    str.gsub!(/\n/, ' ') </div><div class='del'>-    str.gsub!(/\0/, '')</div><div class='del'>-    str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the Base64-encoded version of +str+.</div><div class='del'>-  #</div><div class='del'>-  #    require 'base64'</div><div class='del'>-  #    Base64.b64encode("Now is the time for all good coders\nto learn Ruby")</div><div class='del'>-  #</div><div class='del'>-  # &lt;i&gt;Generates:&lt;/i&gt;</div><div class='del'>-  #</div><div class='del'>-  #    Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g</div><div class='del'>-  #    UnVieQ==</div><div class='del'>-</div><div class='del'>-  def encode64(bin)</div><div class='del'>-    [bin].pack("m")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # _Prints_ the Base64 encoded version of +bin+ (a +String+) in lines of</div><div class='del'>-  # +len+ (default 60) characters.</div><div class='del'>-  #</div><div class='del'>-  #    require 'base64'</div><div class='del'>-  #    data = "Now is the time for all good coders\nto learn Ruby" </div><div class='del'>-  #    Base64.b64encode(data)</div><div class='del'>-  #</div><div class='del'>-  # &lt;i&gt;Generates:&lt;/i&gt;</div><div class='del'>-  #</div><div class='del'>-  #    Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4g</div><div class='del'>-  #    UnVieQ==</div><div class='del'>-</div><div class='del'>-  def b64encode(bin, len = 60)</div><div class='del'>-    encode64(bin).scan(/.{1,#{len}}/) do</div><div class='del'>-      print $&amp;, "\n"</div><div class='del'>-    end</div><div class='del'>-  end </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  module Deprecated # :nodoc:</div><div class='del'>-    include Base64</div><div class='del'>-</div><div class='del'>-    for m in Base64.private_instance_methods(false)</div><div class='del'>-      module_eval %{</div><div class='del'>-        def #{m}(*args)</div><div class='del'>-          warn("\#{caller(1)[0]}: #{m} is deprecated; use Base64.#{m} instead")</div><div class='del'>-          super</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='del'>-</div><div class='del'>-include Base64::Deprecated</div><div class='head'>diff --git a/lib/benchmark.rb b/lib/benchmark.rb<br/>deleted file mode 100644<br/>index a54700a1c2..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/benchmark.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/benchmark.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,572 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-#</div><div class='del'>-# benchmark.rb - a performance benchmarking library </div><div class='del'>-# </div><div class='del'>-# $Id$</div><div class='del'>-# </div><div class='del'>-# Created by Gotoken (gotoken@notwork.org). </div><div class='del'>-#</div><div class='del'>-# Documentation by Gotoken (original RD), Lyle Johnson (RDoc conversion), and</div><div class='del'>-# Gavin Sinclair (editing). </div><div class='del'>-#</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-# == Overview</div><div class='del'>-#</div><div class='del'>-# The Benchmark module provides methods for benchmarking Ruby code, giving</div><div class='del'>-# detailed reports on the time taken for each task.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-# The Benchmark module provides methods to measure and report the time</div><div class='del'>-# used to execute Ruby code.</div><div class='del'>-#</div><div class='del'>-# * Measure the time to construct the string given by the expression</div><div class='del'>-#   &lt;tt&gt;"a"*1_000_000&lt;/tt&gt;:</div><div class='del'>-#</div><div class='del'>-#       require 'benchmark'</div><div class='del'>-#</div><div class='del'>-#       puts Benchmark.measure { "a"*1_000_000 }</div><div class='del'>-# </div><div class='del'>-#   On my machine (FreeBSD 3.2 on P5, 100MHz) this generates:</div><div class='del'>-# </div><div class='del'>-#       1.166667   0.050000   1.216667 (  0.571355)</div><div class='del'>-# </div><div class='del'>-#   This report shows the user CPU time, system CPU time, the sum of</div><div class='del'>-#   the user and system CPU times, and the elapsed real time. The unit</div><div class='del'>-#   of time is seconds.</div><div class='del'>-# </div><div class='del'>-# * Do some experiments sequentially using the #bm method:</div><div class='del'>-#</div><div class='del'>-#       require 'benchmark'</div><div class='del'>-#</div><div class='del'>-#       n = 50000</div><div class='del'>-#       Benchmark.bm do |x|</div><div class='del'>-#         x.report { for i in 1..n; a = "1"; end }</div><div class='del'>-#         x.report { n.times do   ; a = "1"; end }</div><div class='del'>-#         x.report { 1.upto(n) do ; a = "1"; end }</div><div class='del'>-#       end</div><div class='del'>-# </div><div class='del'>-#   The result:</div><div class='del'>-#</div><div class='del'>-#              user     system      total        real</div><div class='del'>-#          1.033333   0.016667   1.016667 (  0.492106)</div><div class='del'>-#          1.483333   0.000000   1.483333 (  0.694605)</div><div class='del'>-#          1.516667   0.000000   1.516667 (  0.711077)</div><div class='del'>-#</div><div class='del'>-# * Continuing the previous example, put a label in each report:</div><div class='del'>-#</div><div class='del'>-#       require 'benchmark'</div><div class='del'>-#</div><div class='del'>-#       n = 50000</div><div class='del'>-#       Benchmark.bm(7) do |x|</div><div class='del'>-#         x.report("for:")   { for i in 1..n; a = "1"; end }</div><div class='del'>-#         x.report("times:") { n.times do   ; a = "1"; end }</div><div class='del'>-#         x.report("upto:")  { 1.upto(n) do ; a = "1"; end }</div><div class='del'>-#       end</div><div class='del'>-# </div><div class='del'>-# The result:</div><div class='del'>-# </div><div class='del'>-#                     user     system      total        real</div><div class='del'>-#        for:     1.050000   0.000000   1.050000 (  0.503462)</div><div class='del'>-#        times:   1.533333   0.016667   1.550000 (  0.735473)</div><div class='del'>-#        upto:    1.500000   0.016667   1.516667 (  0.711239)</div><div class='del'>-# </div><div class='del'>-#</div><div class='del'>-# * The times for some benchmarks depend on the order in which items</div><div class='del'>-#   are run.  These differences are due to the cost of memory</div><div class='del'>-#   allocation and garbage collection. To avoid these discrepancies,</div><div class='del'>-#   the #bmbm method is provided.  For example, to compare ways to</div><div class='del'>-#   sort an array of floats:</div><div class='del'>-#</div><div class='del'>-#       require 'benchmark'</div><div class='del'>-#       </div><div class='del'>-#       array = (1..1000000).map { rand }</div><div class='del'>-#       </div><div class='del'>-#       Benchmark.bmbm do |x|</div><div class='del'>-#         x.report("sort!") { array.dup.sort! }</div><div class='del'>-#         x.report("sort")  { array.dup.sort  }</div><div class='del'>-#       end</div><div class='del'>-# </div><div class='del'>-#   The result:</div><div class='del'>-# </div><div class='del'>-#        Rehearsal -----------------------------------------</div><div class='del'>-#        sort!  11.928000   0.010000  11.938000 ( 12.756000)</div><div class='del'>-#        sort   13.048000   0.020000  13.068000 ( 13.857000)</div><div class='del'>-#        ------------------------------- total: 25.006000sec</div><div class='del'>-#        </div><div class='del'>-#                    user     system      total        real</div><div class='del'>-#        sort!  12.959000   0.010000  12.969000 ( 13.793000)</div><div class='del'>-#        sort   12.007000   0.000000  12.007000 ( 12.791000)</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# * Report statistics of sequential experiments with unique labels,</div><div class='del'>-#   using the #benchmark method:</div><div class='del'>-#</div><div class='del'>-#       require 'benchmark'</div><div class='del'>-#</div><div class='del'>-#       n = 50000</div><div class='del'>-#       Benchmark.benchmark(" "*7 + CAPTION, 7, FMTSTR, "&gt;total:", "&gt;avg:") do |x|</div><div class='del'>-#         tf = x.report("for:")   { for i in 1..n; a = "1"; end }</div><div class='del'>-#         tt = x.report("times:") { n.times do   ; a = "1"; end }</div><div class='del'>-#         tu = x.report("upto:")  { 1.upto(n) do ; a = "1"; end }</div><div class='del'>-#         [tf+tt+tu, (tf+tt+tu)/3]</div><div class='del'>-#       end</div><div class='del'>-# </div><div class='del'>-#   The result:</div><div class='del'>-# </div><div class='del'>-#                     user     system      total        real</div><div class='del'>-#        for:     1.016667   0.016667   1.033333 (  0.485749)</div><div class='del'>-#        times:   1.450000   0.016667   1.466667 (  0.681367)</div><div class='del'>-#        upto:    1.533333   0.000000   1.533333 (  0.722166)</div><div class='del'>-#        &gt;total:  4.000000   0.033333   4.033333 (  1.889282)</div><div class='del'>-#        &gt;avg:    1.333333   0.011111   1.344444 (  0.629761)</div><div class='del'>-</div><div class='del'>-module Benchmark</div><div class='del'>-</div><div class='del'>-  BENCHMARK_VERSION = "2002-04-25" #:nodoc"</div><div class='del'>-</div><div class='del'>-  def Benchmark::times() # :nodoc:</div><div class='del'>-      Process::times()</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Invokes the block with a &lt;tt&gt;Benchmark::Report&lt;/tt&gt; object, which</div><div class='del'>-  # may be used to collect and report on the results of individual</div><div class='del'>-  # benchmark tests. Reserves &lt;i&gt;label_width&lt;/i&gt; leading spaces for</div><div class='del'>-  # labels on each line. Prints _caption_ at the top of the</div><div class='del'>-  # report, and uses _fmt_ to format each line.</div><div class='del'>-  # If the block returns an array of</div><div class='del'>-  # &lt;tt&gt;Benchmark::Tms&lt;/tt&gt; objects, these will be used to format</div><div class='del'>-  # additional lines of output. If _label_ parameters are</div><div class='del'>-  # given, these are used to label these extra lines.</div><div class='del'>-  #</div><div class='del'>-  # _Note_: Other methods provide a simpler interface to this one, and are</div><div class='del'>-  # suitable for nearly all benchmarking requirements.  See the examples in</div><div class='del'>-  # Benchmark, and the #bm and #bmbm methods.</div><div class='del'>-  #</div><div class='del'>-  # Example: </div><div class='del'>-  #</div><div class='del'>-  #     require 'benchmark'</div><div class='del'>-  #     include Benchmark          # we need the CAPTION and FMTSTR constants </div><div class='del'>-  #</div><div class='del'>-  #     n = 50000</div><div class='del'>-  #     Benchmark.benchmark(" "*7 + CAPTION, 7, FMTSTR, "&gt;total:", "&gt;avg:") do |x|</div><div class='del'>-  #       tf = x.report("for:")   { for i in 1..n; a = "1"; end }</div><div class='del'>-  #       tt = x.report("times:") { n.times do   ; a = "1"; end }</div><div class='del'>-  #       tu = x.report("upto:")  { 1.upto(n) do ; a = "1"; end }</div><div class='del'>-  #       [tf+tt+tu, (tf+tt+tu)/3]</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # &lt;i&gt;Generates:&lt;/i&gt;</div><div class='del'>-  # </div><div class='del'>-  #                     user     system      total        real</div><div class='del'>-  #        for:     1.016667   0.016667   1.033333 (  0.485749)</div><div class='del'>-  #        times:   1.450000   0.016667   1.466667 (  0.681367)</div><div class='del'>-  #        upto:    1.533333   0.000000   1.533333 (  0.722166)</div><div class='del'>-  #        &gt;total:  4.000000   0.033333   4.033333 (  1.889282)</div><div class='del'>-  #        &gt;avg:    1.333333   0.011111   1.344444 (  0.629761)</div><div class='del'>-  # </div><div class='del'>-</div><div class='del'>-  def benchmark(caption = "", label_width = nil, fmtstr = nil, *labels) # :yield: report</div><div class='del'>-    sync = STDOUT.sync</div><div class='del'>-    STDOUT.sync = true</div><div class='del'>-    label_width ||= 0</div><div class='del'>-    fmtstr ||= FMTSTR</div><div class='del'>-    raise ArgumentError, "no block" unless iterator?</div><div class='del'>-    print caption</div><div class='del'>-    results = yield(Report.new(label_width, fmtstr))</div><div class='del'>-    Array === results and results.grep(Tms).each {|t|</div><div class='del'>-      print((labels.shift || t.label || "").ljust(label_width), </div><div class='del'>-            t.format(fmtstr))</div><div class='del'>-    }</div><div class='del'>-    STDOUT.sync = sync</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # A simple interface to the #benchmark method, #bm is generates sequential reports</div><div class='del'>-  # with labels.  The parameters have the same meaning as for #benchmark.</div><div class='del'>-  # </div><div class='del'>-  #     require 'benchmark'</div><div class='del'>-  #</div><div class='del'>-  #     n = 50000</div><div class='del'>-  #     Benchmark.bm(7) do |x|</div><div class='del'>-  #       x.report("for:")   { for i in 1..n; a = "1"; end }</div><div class='del'>-  #       x.report("times:") { n.times do   ; a = "1"; end }</div><div class='del'>-  #       x.report("upto:")  { 1.upto(n) do ; a = "1"; end }</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # &lt;i&gt;Generates:&lt;/i&gt;</div><div class='del'>-  # </div><div class='del'>-  #                     user     system      total        real</div><div class='del'>-  #        for:     1.050000   0.000000   1.050000 (  0.503462)</div><div class='del'>-  #        times:   1.533333   0.016667   1.550000 (  0.735473)</div><div class='del'>-  #        upto:    1.500000   0.016667   1.516667 (  0.711239)</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  def bm(label_width = 0, *labels, &amp;blk) # :yield: report</div><div class='del'>-    benchmark(" "*label_width + CAPTION, label_width, FMTSTR, *labels, &amp;blk)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Sometimes benchmark results are skewed because code executed</div><div class='del'>-  # earlier encounters different garbage collection overheads than</div><div class='del'>-  # that run later. #bmbm attempts to minimize this effect by running</div><div class='del'>-  # the tests twice, the first time as a rehearsal in order to get the</div><div class='del'>-  # runtime environment stable, the second time for</div><div class='del'>-  # real. &lt;tt&gt;GC.start&lt;/tt&gt; is executed before the start of each of</div><div class='del'>-  # the real timings; the cost of this is not included in the</div><div class='del'>-  # timings. In reality, though, there's only so much that #bmbm can</div><div class='del'>-  # do, and the results are not guaranteed to be isolated from garbage</div><div class='del'>-  # collection and other effects.</div><div class='del'>-  #</div><div class='del'>-  # Because #bmbm takes two passes through the tests, it can</div><div class='del'>-  # calculate the required label width.</div><div class='del'>-  #</div><div class='del'>-  #       require 'benchmark'</div><div class='del'>-  #       </div><div class='del'>-  #       array = (1..1000000).map { rand }</div><div class='del'>-  #       </div><div class='del'>-  #       Benchmark.bmbm do |x|</div><div class='del'>-  #         x.report("sort!") { array.dup.sort! }</div><div class='del'>-  #         x.report("sort")  { array.dup.sort  }</div><div class='del'>-  #       end</div><div class='del'>-  # </div><div class='del'>-  # &lt;i&gt;Generates:&lt;/i&gt;</div><div class='del'>-  # </div><div class='del'>-  #        Rehearsal -----------------------------------------</div><div class='del'>-  #        sort!  11.928000   0.010000  11.938000 ( 12.756000)</div><div class='del'>-  #        sort   13.048000   0.020000  13.068000 ( 13.857000)</div><div class='del'>-  #        ------------------------------- total: 25.006000sec</div><div class='del'>-  #        </div><div class='del'>-  #                    user     system      total        real</div><div class='del'>-  #        sort!  12.959000   0.010000  12.969000 ( 13.793000)</div><div class='del'>-  #        sort   12.007000   0.000000  12.007000 ( 12.791000)</div><div class='del'>-  #</div><div class='del'>-  # #bmbm yields a Benchmark::Job object and returns an array of</div><div class='del'>-  # Benchmark::Tms objects.</div><div class='del'>-  #</div><div class='del'>-  def bmbm(width = 0, &amp;blk) # :yield: job</div><div class='del'>-    job = Job.new(width)</div><div class='del'>-    yield(job)</div><div class='del'>-    width = job.width</div><div class='del'>-    sync = STDOUT.sync</div><div class='del'>-    STDOUT.sync = true</div><div class='del'>-</div><div class='del'>-    # rehearsal</div><div class='del'>-    print "Rehearsal "</div><div class='del'>-    puts '-'*(width+CAPTION.length - "Rehearsal ".length)</div><div class='del'>-    list = []</div><div class='del'>-    job.list.each{|label,item|</div><div class='del'>-      print(label.ljust(width))</div><div class='del'>-      res = Benchmark::measure(&amp;item)</div><div class='del'>-      print res.format()</div><div class='del'>-      list.push res</div><div class='del'>-    }</div><div class='del'>-    sum = Tms.new; list.each{|i| sum += i}</div><div class='del'>-    ets = sum.format("total: %tsec")</div><div class='del'>-    printf("%s %s\n\n",</div><div class='del'>-           "-"*(width+CAPTION.length-ets.length-1), ets)</div><div class='del'>-    </div><div class='del'>-    # take</div><div class='del'>-    print ' '*width, CAPTION</div><div class='del'>-    list = []</div><div class='del'>-    ary = []</div><div class='del'>-    job.list.each{|label,item|</div><div class='del'>-      GC::start</div><div class='del'>-      print label.ljust(width)</div><div class='del'>-      res = Benchmark::measure(&amp;item)</div><div class='del'>-      print res.format()</div><div class='del'>-      ary.push res</div><div class='del'>-      list.push [label, res]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    STDOUT.sync = sync</div><div class='del'>-    ary</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  # Returns the time used to execute the given block as a</div><div class='del'>-  # Benchmark::Tms object.</div><div class='del'>-  #</div><div class='del'>-  def measure(label = "") # :yield:</div><div class='del'>-    t0, r0 = Benchmark.times, Time.now</div><div class='del'>-    yield</div><div class='del'>-    t1, r1 = Benchmark.times, Time.now</div><div class='del'>-    Benchmark::Tms.new(t1.utime  - t0.utime, </div><div class='del'>-                       t1.stime  - t0.stime, </div><div class='del'>-                       t1.cutime - t0.cutime, </div><div class='del'>-                       t1.cstime - t0.cstime, </div><div class='del'>-                       r1.to_f - r0.to_f,</div><div class='del'>-                       label)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the elapsed real time used to execute the given block.</div><div class='del'>-  #</div><div class='del'>-  def realtime(&amp;blk) # :yield:</div><div class='del'>-    r0 = Time.now</div><div class='del'>-    yield</div><div class='del'>-    r1 = Time.now</div><div class='del'>-    r1.to_f - r0.to_f</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'>-  # A Job is a sequence of labelled blocks to be processed by the</div><div class='del'>-  # Benchmark.bmbm method.  It is of little direct interest to the user.</div><div class='del'>-  #</div><div class='del'>-  class Job # :nodoc:</div><div class='del'>-    #</div><div class='del'>-    # Returns an initialized Job instance.</div><div class='del'>-    # Usually, one doesn't call this method directly, as new</div><div class='del'>-    # Job objects are created by the #bmbm method.</div><div class='del'>-    # _width_ is a initial value for the label offset used in formatting;</div><div class='del'>-    # the #bmbm method passes its _width_ argument to this constructor. </div><div class='del'>-    # </div><div class='del'>-    def initialize(width)</div><div class='del'>-      @width = width</div><div class='del'>-      @list = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Registers the given label and block pair in the job list.</div><div class='del'>-    #</div><div class='del'>-    def item(label = "", &amp;blk) # :yield:</div><div class='del'>-      raise ArgumentError, "no block" unless block_given?</div><div class='del'>-      label += ' '</div><div class='del'>-      w = label.length</div><div class='del'>-      @width = w if @width &lt; w</div><div class='del'>-      @list.push [label, blk]</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias report item</div><div class='del'>-    </div><div class='del'>-    # An array of 2-element arrays, consisting of label and block pairs.</div><div class='del'>-    attr_reader :list</div><div class='del'>-    </div><div class='del'>-    # Length of the widest label in the #list, plus one.  </div><div class='del'>-    attr_reader :width</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :benchmark, :measure, :realtime, :bm, :bmbm</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This class is used by the Benchmark.benchmark and Benchmark.bm methods.</div><div class='del'>-  # It is of little direct interest to the user.</div><div class='del'>-  #</div><div class='del'>-  class Report # :nodoc:</div><div class='del'>-    #</div><div class='del'>-    # Returns an initialized Report instance.</div><div class='del'>-    # Usually, one doesn't call this method directly, as new</div><div class='del'>-    # Report objects are created by the #benchmark and #bm methods. </div><div class='del'>-    # _width_ and _fmtstr_ are the label offset and </div><div class='del'>-    # format string used by Tms#format. </div><div class='del'>-    # </div><div class='del'>-    def initialize(width = 0, fmtstr = nil)</div><div class='del'>-      @width, @fmtstr = width, fmtstr</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Prints the _label_ and measured time for the block,</div><div class='del'>-    # formatted by _fmt_. See Tms#format for the</div><div class='del'>-    # formatting rules.</div><div class='del'>-    #</div><div class='del'>-    def item(label = "", *fmt, &amp;blk) # :yield:</div><div class='del'>-      print label.ljust(@width)</div><div class='del'>-      res = Benchmark::measure(&amp;blk)</div><div class='del'>-      print res.format(@fmtstr, *fmt)</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias report item</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'>-  # A data object, representing the times associated with a benchmark</div><div class='del'>-  # measurement.</div><div class='del'>-  #</div><div class='del'>-  class Tms</div><div class='del'>-    CAPTION = "      user     system      total        real\n"</div><div class='del'>-    FMTSTR = "%10.6u %10.6y %10.6t %10.6r\n"</div><div class='del'>-</div><div class='del'>-    # User CPU time</div><div class='del'>-    attr_reader :utime</div><div class='del'>-    </div><div class='del'>-    # System CPU time</div><div class='del'>-    attr_reader :stime</div><div class='del'>-   </div><div class='del'>-    # User CPU time of children</div><div class='del'>-    attr_reader :cutime</div><div class='del'>-    </div><div class='del'>-    # System CPU time of children</div><div class='del'>-    attr_reader :cstime</div><div class='del'>-    </div><div class='del'>-    # Elapsed real time</div><div class='del'>-    attr_reader :real</div><div class='del'>-    </div><div class='del'>-    # Total time, that is _utime_ + _stime_ + _cutime_ + _cstime_ </div><div class='del'>-    attr_reader :total</div><div class='del'>-    </div><div class='del'>-    # Label</div><div class='del'>-    attr_reader :label</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Returns an initialized Tms object which has</div><div class='del'>-    # _u_ as the user CPU time, _s_ as the system CPU time, </div><div class='del'>-    # _cu_ as the children's user CPU time, _cs_ as the children's</div><div class='del'>-    # system CPU time, _real_ as the elapsed real time and _l_</div><div class='del'>-    # as the label. </div><div class='del'>-    # </div><div class='del'>-    def initialize(u = 0.0, s = 0.0, cu = 0.0, cs = 0.0, real = 0.0, l = nil)</div><div class='del'>-      @utime, @stime, @cutime, @cstime, @real, @label = u, s, cu, cs, real, l</div><div class='del'>-      @total = @utime + @stime + @cutime + @cstime</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # Returns a new Tms object whose times are the sum of the times for this</div><div class='del'>-    # Tms object, plus the time required to execute the code block (_blk_).</div><div class='del'>-    # </div><div class='del'>-    def add(&amp;blk) # :yield:</div><div class='del'>-      self + Benchmark::measure(&amp;blk) </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # An in-place version of #add.</div><div class='del'>-    # </div><div class='del'>-    def add!</div><div class='del'>-      t = Benchmark::measure(&amp;blk) </div><div class='del'>-      @utime  = utime + t.utime</div><div class='del'>-      @stime  = stime + t.stime</div><div class='del'>-      @cutime = cutime + t.cutime</div><div class='del'>-      @cstime = cstime + t.cstime</div><div class='del'>-      @real   = real + t.real</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # Returns a new Tms object obtained by memberwise summation</div><div class='del'>-    # of the individual times for this Tms object with those of the other</div><div class='del'>-    # Tms object.</div><div class='del'>-    # This method and #/() are useful for taking statistics. </div><div class='del'>-    # </div><div class='del'>-    def +(other); memberwise(:+, other) end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns a new Tms object obtained by memberwise subtraction</div><div class='del'>-    # of the individual times for the other Tms object from those of this</div><div class='del'>-    # Tms object.</div><div class='del'>-    #</div><div class='del'>-    def -(other); memberwise(:-, other) end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns a new Tms object obtained by memberwise multiplication</div><div class='del'>-    # of the individual times for this Tms object by _x_.</div><div class='del'>-    #</div><div class='del'>-    def *(x); memberwise(:*, x) end</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # Returns a new Tms object obtained by memberwise division</div><div class='del'>-    # of the individual times for this Tms object by _x_.</div><div class='del'>-    # This method and #+() are useful for taking statistics. </div><div class='del'>-    # </div><div class='del'>-    def /(x); memberwise(:/, x) end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Returns the contents of this Tms object as</div><div class='del'>-    # a formatted string, according to a format string</div><div class='del'>-    # like that passed to Kernel.format. In addition, #format</div><div class='del'>-    # accepts the following extensions:</div><div class='del'>-    #</div><div class='del'>-    # &lt;tt&gt;%u&lt;/tt&gt;::     Replaced by the user CPU time, as reported by Tms#utime.</div><div class='del'>-    # &lt;tt&gt;%y&lt;/tt&gt;::     Replaced by the system CPU time, as reported by #stime (Mnemonic: y of "s*y*stem")</div><div class='del'>-    # &lt;tt&gt;%U&lt;/tt&gt;::     Replaced by the children's user CPU time, as reported by Tms#cutime </div><div class='del'>-    # &lt;tt&gt;%Y&lt;/tt&gt;::     Replaced by the children's system CPU time, as reported by Tms#cstime</div><div class='del'>-    # &lt;tt&gt;%t&lt;/tt&gt;::     Replaced by the total CPU time, as reported by Tms#total</div><div class='del'>-    # &lt;tt&gt;%r&lt;/tt&gt;::     Replaced by the elapsed real time, as reported by Tms#real</div><div class='del'>-    # &lt;tt&gt;%n&lt;/tt&gt;::     Replaced by the label string, as reported by Tms#label (Mnemonic: n of "*n*ame")</div><div class='del'>-    # </div><div class='del'>-    # If _fmtstr_ is not given, FMTSTR is used as default value, detailing the</div><div class='del'>-    # user, system and real elapsed time.</div><div class='del'>-    # </div><div class='del'>-    def format(arg0 = nil, *args)</div><div class='del'>-      fmtstr = (arg0 || FMTSTR).dup</div><div class='del'>-      fmtstr.gsub!(/(%[-+\.\d]*)n/){"#{$1}s" % label}</div><div class='del'>-      fmtstr.gsub!(/(%[-+\.\d]*)u/){"#{$1}f" % utime}</div><div class='del'>-      fmtstr.gsub!(/(%[-+\.\d]*)y/){"#{$1}f" % stime}</div><div class='del'>-      fmtstr.gsub!(/(%[-+\.\d]*)U/){"#{$1}f" % cutime}</div><div class='del'>-      fmtstr.gsub!(/(%[-+\.\d]*)Y/){"#{$1}f" % cstime}</div><div class='del'>-      fmtstr.gsub!(/(%[-+\.\d]*)t/){"#{$1}f" % total}</div><div class='del'>-      fmtstr.gsub!(/(%[-+\.\d]*)r/){"(#{$1}f)" % real}</div><div class='del'>-      arg0 ? Kernel::format(fmtstr, *args) : fmtstr</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # Same as #format.</div><div class='del'>-    # </div><div class='del'>-    def to_s</div><div class='del'>-      format</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # Returns a new 6-element array, consisting of the</div><div class='del'>-    # label, user CPU time, system CPU time, children's</div><div class='del'>-    # user CPU time, children's system CPU time and elapsed</div><div class='del'>-    # real time.</div><div class='del'>-    # </div><div class='del'>-    def to_a</div><div class='del'>-      [@label, @utime, @stime, @cutime, @cstime, @real]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    protected</div><div class='del'>-    def memberwise(op, x)</div><div class='del'>-      case x</div><div class='del'>-      when Benchmark::Tms</div><div class='del'>-        Benchmark::Tms.new(utime.__send__(op, x.utime),</div><div class='del'>-                           stime.__send__(op, x.stime),</div><div class='del'>-                           cutime.__send__(op, x.cutime),</div><div class='del'>-                           cstime.__send__(op, x.cstime),</div><div class='del'>-                           real.__send__(op, x.real)</div><div class='del'>-                           )</div><div class='del'>-      else</div><div class='del'>-        Benchmark::Tms.new(utime.__send__(op, x),</div><div class='del'>-                           stime.__send__(op, x),</div><div class='del'>-                           cutime.__send__(op, x),</div><div class='del'>-                           cstime.__send__(op, x),</div><div class='del'>-                           real.__send__(op, x)</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'>-  # The default caption string (heading above the output times).</div><div class='del'>-  CAPTION = Benchmark::Tms::CAPTION</div><div class='del'>-</div><div class='del'>-  # The default format string used to display times.  See also Benchmark::Tms#format. </div><div class='del'>-  FMTSTR = Benchmark::Tms::FMTSTR</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  include Benchmark</div><div class='del'>-</div><div class='del'>-  n = ARGV[0].to_i.nonzero? || 50000</div><div class='del'>-  puts %Q([#{n} times iterations of `a = "1"'])</div><div class='del'>-  benchmark("       " + CAPTION, 7, FMTSTR) do |x|</div><div class='del'>-    x.report("for:")   {for i in 1..n; a = "1"; end} # Benchmark::measure</div><div class='del'>-    x.report("times:") {n.times do   ; a = "1"; end}</div><div class='del'>-    x.report("upto:")  {1.upto(n) do ; a = "1"; end}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  benchmark do</div><div class='del'>-    [</div><div class='del'>-      measure{for i in 1..n; a = "1"; end},  # Benchmark::measure</div><div class='del'>-      measure{n.times do   ; a = "1"; end},</div><div class='del'>-      measure{1.upto(n) do ; a = "1"; end}</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/cgi-lib.rb b/lib/cgi-lib.rb<br/>deleted file mode 100644<br/>index d6b60d66cc..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/cgi-lib.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/cgi-lib.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,272 +0,0 @@</div><div class='del'>-warn "Warning:#{caller[0].sub(/:in `.*'\z/, '')}: cgi-lib is deprecated after Ruby 1.8.1; use cgi instead"</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= simple CGI support library</div><div class='del'>-</div><div class='del'>-= example</div><div class='del'>-</div><div class='del'>-== get form values</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	query = CGI.new</div><div class='del'>-	query['field']   # &lt;== value of 'field'</div><div class='del'>-	query.keys       # &lt;== array of fields</div><div class='del'>-</div><div class='del'>-and query has Hash class methods</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== get cookie values</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	query = CGI.new</div><div class='del'>-	query.cookie['name']  # &lt;== cookie value of 'name'</div><div class='del'>-	query.cookie.keys     # &lt;== all cookie names</div><div class='del'>-</div><div class='del'>-and query.cookie has Hash class methods</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== print HTTP header and HTML string to $&gt;</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	CGI::print{</div><div class='del'>-	  CGI::tag("HTML"){</div><div class='del'>-	    CGI::tag("HEAD"){ CGI::tag("TITLE"){"TITLE"} } +</div><div class='del'>-	    CGI::tag("BODY"){</div><div class='del'>-	      CGI::tag("FORM", {"ACTION"=&gt;"test.rb", "METHOD"=&gt;"POST"}){</div><div class='del'>-	        CGI::tag("INPUT", {"TYPE"=&gt;"submit", "VALUE"=&gt;"submit"})</div><div class='del'>-	      } +</div><div class='del'>-	      CGI::tag("HR")</div><div class='del'>-	    }</div><div class='del'>-	  }</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== make raw cookie string</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	cookie1 = CGI::cookie({'name'    =&gt; 'name',</div><div class='del'>-	                       'value'   =&gt; 'value',</div><div class='del'>-	                       'path'    =&gt; 'path',   # optional</div><div class='del'>-	                       'domain'  =&gt; 'domain', # optional</div><div class='del'>-	                       'expires' =&gt; Time.now, # optional</div><div class='del'>-	                       'secure'  =&gt; true      # optional</div><div class='del'>-	                      })</div><div class='del'>-</div><div class='del'>-	CGI::print("Content-Type: text/html", cookie1, cookie2){ "string" }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== print HTTP header and string to $&gt;</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	CGI::print{ "string" }</div><div class='del'>-	  # == CGI::print("Content-Type: text/html"){ "string" }</div><div class='del'>-	CGI::print("Content-Type: text/html", cookie1, cookie2){ "string" }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-=== NPH (no-parse-header) mode</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	CGI::print("nph"){ "string" }</div><div class='del'>-	  # == CGI::print("nph", "Content-Type: text/html"){ "string" }</div><div class='del'>-	CGI::print("nph", "Content-Type: text/html", cookie1, cookie2){ "string" }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== make HTML tag string</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	CGI::tag("element", {"attribute_name"=&gt;"attribute_value"}){"content"}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== make HTTP header string</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	CGI::header # == CGI::header("Content-Type: text/html")</div><div class='del'>-	CGI::header("Content-Type: text/html", cookie1, cookie2)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-=== NPH (no-parse-header) mode</div><div class='del'>-</div><div class='del'>-	CGI::header("nph") # == CGI::header("nph", "Content-Type: text/html")</div><div class='del'>-	CGI::header("nph", "Content-Type: text/html", cookie1, cookie2)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== escape url encode</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	url_encoded_string = CGI::escape("string")</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== unescape url encoded</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	string = CGI::unescape("url encoded string")</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-== escape HTML &amp;"&lt;&gt;</div><div class='del'>-</div><div class='del'>-	require "cgi-lib.rb"</div><div class='del'>-	CGI::escapeHTML("string")</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require "delegate"</div><div class='del'>-</div><div class='del'>-class CGI &lt; SimpleDelegator</div><div class='del'>-</div><div class='del'>-  CR  = "\015"</div><div class='del'>-  LF  = "\012"</div><div class='del'>-  EOL = CR + LF</div><div class='del'>-</div><div class='del'>-  RFC822_DAYS = %w[ Sun Mon Tue Wed Thu Fri Sat ]</div><div class='del'>-  RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]</div><div class='del'>-</div><div class='del'>-  # make rfc1123 date string</div><div class='del'>-  def CGI::rfc1123_date(time)</div><div class='del'>-    t = time.clone.gmtime</div><div class='del'>-    return format("%s, %.2d %s %d %.2d:%.2d:%.2d GMT",</div><div class='del'>-                RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,</div><div class='del'>-                t.hour, t.min, t.sec)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # escape url encode</div><div class='del'>-  def CGI::escape(str)</div><div class='del'>-    str.gsub(/[^a-zA-Z0-9_\-.]/n){ sprintf("%%%02X", $&amp;.unpack("C")[0]) }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # unescape url encoded</div><div class='del'>-  def CGI::unescape(str)</div><div class='del'>-    str.gsub(/\+/, ' ').gsub(/%([0-9a-fA-F]{2})/){ [$1.hex].pack("c") }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # escape HTML</div><div class='del'>-  def CGI::escapeHTML(str)</div><div class='del'>-    str.gsub(/&amp;/, "&amp;amp;").gsub(/\"/, "&amp;quot;").gsub(/&gt;/, "&amp;gt;").gsub(/&lt;/, "&amp;lt;")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # offline mode. read name=value pairs on standard input.</div><div class='del'>-  def read_from_cmdline</div><div class='del'>-    require "shellwords.rb"</div><div class='del'>-    words = Shellwords.shellwords(</div><div class='del'>-              if not ARGV.empty?</div><div class='del'>-                ARGV.join(' ')</div><div class='del'>-              else</div><div class='del'>-                STDERR.print "(offline mode: enter name=value pairs on standard input)\n" if STDIN.tty?</div><div class='del'>-                readlines.join(' ').gsub(/\n/, '')</div><div class='del'>-              end.gsub(/\\=/, '%3D').gsub(/\\&amp;/, '%26'))</div><div class='del'>-</div><div class='del'>-    if words.find{|x| x =~ /=/} then words.join('&amp;') else words.join('+') end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(input = $stdin)</div><div class='del'>-</div><div class='del'>-    @inputs = {}</div><div class='del'>-    @cookie = {}</div><div class='del'>-</div><div class='del'>-    case ENV['REQUEST_METHOD']</div><div class='del'>-    when "GET"</div><div class='del'>-      ENV['QUERY_STRING'] or ""</div><div class='del'>-    when "POST"</div><div class='del'>-      input.read(Integer(ENV['CONTENT_LENGTH'])) or ""</div><div class='del'>-    else</div><div class='del'>-      read_from_cmdline</div><div class='del'>-    end.split(/[&amp;;]/).each do |x|</div><div class='del'>-      key, val = x.split(/=/,2).collect{|x|CGI::unescape(x)}</div><div class='del'>-      if @inputs.include?(key)</div><div class='del'>-        @inputs[key] += "\0" + (val or "")</div><div class='del'>-      else</div><div class='del'>-        @inputs[key] = (val or "")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    super(@inputs)</div><div class='del'>-</div><div class='del'>-    if ENV.has_key?('HTTP_COOKIE') or ENV.has_key?('COOKIE')</div><div class='del'>-      (ENV['HTTP_COOKIE'] or ENV['COOKIE']).split(/; /).each do |x|</div><div class='del'>-        key, val = x.split(/=/,2)</div><div class='del'>-        key = CGI::unescape(key)</div><div class='del'>-        val = val.split(/&amp;/).collect{|x|CGI::unescape(x)}.join("\0")</div><div class='del'>-        if @cookie.include?(key)</div><div class='del'>-          @cookie[key] += "\0" + val</div><div class='del'>-        else</div><div class='del'>-          @cookie[key] = val</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'>-  attr("inputs")</div><div class='del'>-  attr("cookie")</div><div class='del'>-</div><div class='del'>-  # make HTML tag string</div><div class='del'>-  def CGI::tag(element, attributes = {})</div><div class='del'>-    "&lt;" + escapeHTML(element) + attributes.collect{|name, value|</div><div class='del'>-      " " + escapeHTML(name) + '="' + escapeHTML(value) + '"'</div><div class='del'>-    }.to_s + "&gt;" +</div><div class='del'>-    (iterator? ? yield.to_s + "&lt;/" + escapeHTML(element) + "&gt;" : "")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # make raw cookie string</div><div class='del'>-  def CGI::cookie(options)</div><div class='del'>-    "Set-Cookie: " + options['name'] + '=' + escape(options['value']) +</div><div class='del'>-    (options['domain']  ? '; domain='  + options['domain'] : '') +</div><div class='del'>-    (options['path']    ? '; path='    + options['path']   : '') +</div><div class='del'>-    (options['expires'] ? '; expires=' + rfc1123_date(options['expires']) : '') +</div><div class='del'>-    (options['secure']  ? '; secure' : '')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # make HTTP header string</div><div class='del'>-  def CGI::header(*options)</div><div class='del'>-    if defined?(MOD_RUBY)</div><div class='del'>-      options.each{|option|</div><div class='del'>-        option.sub(/(.*?): (.*)/){</div><div class='del'>-          Apache::request.headers_out[$1] = $2</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      Apache::request.send_http_header</div><div class='del'>-      ''</div><div class='del'>-    else</div><div class='del'>-      if options.delete("nph") or (ENV['SERVER_SOFTWARE'] =~ /IIS/)</div><div class='del'>-        [(ENV['SERVER_PROTOCOL'] or "HTTP/1.0") + " 200 OK",</div><div class='del'>-         "Date: " + rfc1123_date(Time.now),</div><div class='del'>-         "Server: " + (ENV['SERVER_SOFTWARE'] or ""),</div><div class='del'>-         "Connection: close"] +</div><div class='del'>-        (options.empty? ? ["Content-Type: text/html"] : options)</div><div class='del'>-      else</div><div class='del'>-        options.empty? ? ["Content-Type: text/html"] : options</div><div class='del'>-      end.join(EOL) + EOL + EOL</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # print HTTP header and string to $&gt;</div><div class='del'>-  def CGI::print(*options)</div><div class='del'>-    $&gt;.print CGI::header(*options) + yield.to_s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # print message to $&gt;</div><div class='del'>-  def CGI::message(message, title = "", header = ["Content-Type: text/html"])</div><div class='del'>-    if message.kind_of?(Hash)</div><div class='del'>-      title   = message['title']</div><div class='del'>-      header  = message['header']</div><div class='del'>-      message = message['body']</div><div class='del'>-    end</div><div class='del'>-    CGI::print(*header){</div><div class='del'>-      CGI::tag("HTML"){</div><div class='del'>-        CGI::tag("HEAD"){ CGI.tag("TITLE"){ title } } +</div><div class='del'>-        CGI::tag("BODY"){ message }</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # print error message to $&gt; and exit</div><div class='del'>-  def CGI::error</div><div class='del'>-    CGI::message({'title'=&gt;'ERROR', 'body'=&gt;</div><div class='del'>-      CGI::tag("PRE"){</div><div class='del'>-        "ERROR: " + CGI::tag("STRONG"){ escapeHTML($!.to_s) } + "\n" + escapeHTML($@.join("\n"))</div><div class='del'>-      }</div><div class='del'>-    })</div><div class='del'>-    exit</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/cgi.rb b/lib/cgi.rb<br/>deleted file mode 100644<br/>index 5279439a08..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/cgi.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/cgi.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2308 +0,0 @@</div><div class='del'>-# </div><div class='del'>-# cgi.rb - cgi support library</div><div class='del'>-# </div><div class='del'>-# Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-# </div><div class='del'>-# Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='del'>-#</div><div class='del'>-# Author: Wakou Aoyama &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-#</div><div class='del'>-# Documentation: Wakou Aoyama (RDoc'd and embellished by William Webber) </div><div class='del'>-# </div><div class='del'>-# == Overview</div><div class='del'>-#</div><div class='del'>-# The Common Gateway Interface (CGI) is a simple protocol</div><div class='del'>-# for passing an HTTP request from a web server to a</div><div class='del'>-# standalone program, and returning the output to the web</div><div class='del'>-# browser.  Basically, a CGI program is called with the</div><div class='del'>-# parameters of the request passed in either in the</div><div class='del'>-# environment (GET) or via $stdin (POST), and everything</div><div class='del'>-# it prints to $stdout is returned to the client.</div><div class='del'>-# </div><div class='del'>-# This file holds the +CGI+ class.  This class provides</div><div class='del'>-# functionality for retrieving HTTP request parameters,</div><div class='del'>-# managing cookies, and generating HTML output.  See the</div><div class='del'>-# class documentation for more details and examples of use.</div><div class='del'>-#</div><div class='del'>-# The file cgi/session.rb provides session management</div><div class='del'>-# functionality; see that file for more details.</div><div class='del'>-#</div><div class='del'>-# See http://www.w3.org/CGI/ for more information on the CGI</div><div class='del'>-# protocol.</div><div class='del'>-</div><div class='del'>-raise "Please, use ruby 1.5.4 or later." if RUBY_VERSION &lt; "1.5.4"</div><div class='del'>-</div><div class='del'>-require 'English'</div><div class='del'>-</div><div class='del'>-# CGI class.  See documentation for the file cgi.rb for an overview</div><div class='del'>-# of the CGI protocol.</div><div class='del'>-#</div><div class='del'>-# == Introduction</div><div class='del'>-#</div><div class='del'>-# CGI is a large class, providing several categories of methods, many of which</div><div class='del'>-# are mixed in from other modules.  Some of the documentation is in this class,</div><div class='del'>-# some in the modules CGI::QueryExtension and CGI::HtmlExtension.  See</div><div class='del'>-# CGI::Cookie for specific information on handling cookies, and cgi/session.rb</div><div class='del'>-# (CGI::Session) for information on sessions.</div><div class='del'>-#</div><div class='del'>-# For queries, CGI provides methods to get at environmental variables,</div><div class='del'>-# parameters, cookies, and multipart request data.  For responses, CGI provides</div><div class='del'>-# methods for writing output and generating HTML.</div><div class='del'>-#</div><div class='del'>-# Read on for more details.  Examples are provided at the bottom.</div><div class='del'>-#</div><div class='del'>-# == Queries</div><div class='del'>-#</div><div class='del'>-# The CGI class dynamically mixes in parameter and cookie-parsing</div><div class='del'>-# functionality,  environmental variable access, and support for</div><div class='del'>-# parsing multipart requests (including uploaded files) from the</div><div class='del'>-# CGI::QueryExtension module.</div><div class='del'>-#</div><div class='del'>-# === Environmental Variables</div><div class='del'>-#</div><div class='del'>-# The standard CGI environmental variables are available as read-only</div><div class='del'>-# attributes of a CGI object.  The following is a list of these variables:</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-#   AUTH_TYPE               HTTP_HOST          REMOTE_IDENT</div><div class='del'>-#   CONTENT_LENGTH          HTTP_NEGOTIATE     REMOTE_USER</div><div class='del'>-#   CONTENT_TYPE            HTTP_PRAGMA        REQUEST_METHOD</div><div class='del'>-#   GATEWAY_INTERFACE       HTTP_REFERER       SCRIPT_NAME</div><div class='del'>-#   HTTP_ACCEPT             HTTP_USER_AGENT    SERVER_NAME</div><div class='del'>-#   HTTP_ACCEPT_CHARSET     PATH_INFO          SERVER_PORT</div><div class='del'>-#   HTTP_ACCEPT_ENCODING    PATH_TRANSLATED    SERVER_PROTOCOL</div><div class='del'>-#   HTTP_ACCEPT_LANGUAGE    QUERY_STRING       SERVER_SOFTWARE</div><div class='del'>-#   HTTP_CACHE_CONTROL      REMOTE_ADDR</div><div class='del'>-#   HTTP_FROM               REMOTE_HOST</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# For each of these variables, there is a corresponding attribute with the</div><div class='del'>-# same name, except all lower case and without a preceding HTTP_.  </div><div class='del'>-# +content_length+ and +server_port+ are integers; the rest are strings.</div><div class='del'>-#</div><div class='del'>-# === Parameters</div><div class='del'>-#</div><div class='del'>-# The method #params() returns a hash of all parameters in the request as</div><div class='del'>-# name/value-list pairs, where the value-list is an Array of one or more</div><div class='del'>-# values.  The CGI object itself also behaves as a hash of parameter names </div><div class='del'>-# to values, but only returns a single value (as a String) for each </div><div class='del'>-# parameter name.</div><div class='del'>-#</div><div class='del'>-# For instance, suppose the request contains the parameter </div><div class='del'>-# "favourite_colours" with the multiple values "blue" and "green".  The</div><div class='del'>-# following behaviour would occur:</div><div class='del'>-#</div><div class='del'>-#   cgi.params["favourite_colours"]  # =&gt; ["blue", "green"]</div><div class='del'>-#   cgi["favourite_colours"]         # =&gt; "blue"</div><div class='del'>-#</div><div class='del'>-# If a parameter does not exist, the former method will return an empty</div><div class='del'>-# array, the latter an empty string.  The simplest way to test for existence</div><div class='del'>-# of a parameter is by the #has_key? method.</div><div class='del'>-#</div><div class='del'>-# === Cookies</div><div class='del'>-#</div><div class='del'>-# HTTP Cookies are automatically parsed from the request.  They are available</div><div class='del'>-# from the #cookies() accessor, which returns a hash from cookie name to</div><div class='del'>-# CGI::Cookie object.</div><div class='del'>-#</div><div class='del'>-# === Multipart requests</div><div class='del'>-#</div><div class='del'>-# If a request's method is POST and its content type is multipart/form-data, </div><div class='del'>-# then it may contain uploaded files.  These are stored by the QueryExtension</div><div class='del'>-# module in the parameters of the request.  The parameter name is the name</div><div class='del'>-# attribute of the file input field, as usual.  However, the value is not</div><div class='del'>-# a string, but an IO object, either an IOString for small files, or a</div><div class='del'>-# Tempfile for larger ones.  This object also has the additional singleton</div><div class='del'>-# methods:</div><div class='del'>-#</div><div class='del'>-# #local_path():: the path of the uploaded file on the local filesystem</div><div class='del'>-# #original_filename():: the name of the file on the client computer</div><div class='del'>-# #content_type():: the content type of the file</div><div class='del'>-#</div><div class='del'>-# == Responses</div><div class='del'>-#</div><div class='del'>-# The CGI class provides methods for sending header and content output to</div><div class='del'>-# the HTTP client, and mixes in methods for programmatic HTML generation</div><div class='del'>-# from CGI::HtmlExtension and CGI::TagMaker modules.  The precise version of HTML</div><div class='del'>-# to use for HTML generation is specified at object creation time.</div><div class='del'>-#</div><div class='del'>-# === Writing output</div><div class='del'>-#</div><div class='del'>-# The simplest way to send output to the HTTP client is using the #out() method.</div><div class='del'>-# This takes the HTTP headers as a hash parameter, and the body content</div><div class='del'>-# via a block.  The headers can be generated as a string using the #header()</div><div class='del'>-# method.  The output stream can be written directly to using the #print()</div><div class='del'>-# method.</div><div class='del'>-#</div><div class='del'>-# === Generating HTML</div><div class='del'>-#</div><div class='del'>-# Each HTML element has a corresponding method for generating that</div><div class='del'>-# element as a String.  The name of this method is the same as that</div><div class='del'>-# of the element, all lowercase.  The attributes of the element are </div><div class='del'>-# passed in as a hash, and the body as a no-argument block that evaluates</div><div class='del'>-# to a String.  The HTML generation module knows which elements are</div><div class='del'>-# always empty, and silently drops any passed-in body.  It also knows</div><div class='del'>-# which elements require matching closing tags and which don't.  However,</div><div class='del'>-# it does not know what attributes are legal for which elements.</div><div class='del'>-#</div><div class='del'>-# There are also some additional HTML generation methods mixed in from</div><div class='del'>-# the CGI::HtmlExtension module.  These include individual methods for the</div><div class='del'>-# different types of form inputs, and methods for elements that commonly</div><div class='del'>-# take particular attributes where the attributes can be directly specified</div><div class='del'>-# as arguments, rather than via a hash.</div><div class='del'>-#</div><div class='del'>-# == Examples of use</div><div class='del'>-# </div><div class='del'>-# === Get form values</div><div class='del'>-# </div><div class='del'>-#   require "cgi"</div><div class='del'>-#   cgi = CGI.new</div><div class='del'>-#   value = cgi['field_name']   # &lt;== value string for 'field_name'</div><div class='del'>-#     # if not 'field_name' included, then return "".</div><div class='del'>-#   fields = cgi.keys            # &lt;== array of field names</div><div class='del'>-# </div><div class='del'>-#   # returns true if form has 'field_name'</div><div class='del'>-#   cgi.has_key?('field_name')</div><div class='del'>-#   cgi.has_key?('field_name')</div><div class='del'>-#   cgi.include?('field_name')</div><div class='del'>-# </div><div class='del'>-# CAUTION! cgi['field_name'] returned an Array with the old </div><div class='del'>-# cgi.rb(included in ruby 1.6)</div><div class='del'>-# </div><div class='del'>-# === Get form values as hash</div><div class='del'>-# </div><div class='del'>-#   require "cgi"</div><div class='del'>-#   cgi = CGI.new</div><div class='del'>-#   params = cgi.params</div><div class='del'>-# </div><div class='del'>-# cgi.params is a hash.</div><div class='del'>-# </div><div class='del'>-#   cgi.params['new_field_name'] = ["value"]  # add new param</div><div class='del'>-#   cgi.params['field_name'] = ["new_value"]  # change value</div><div class='del'>-#   cgi.params.delete('field_name')           # delete param</div><div class='del'>-#   cgi.params.clear                          # delete all params</div><div class='del'>-# </div><div class='del'>-# </div><div class='del'>-# === Save form values to file</div><div class='del'>-# </div><div class='del'>-#   require "pstore"</div><div class='del'>-#   db = PStore.new("query.db")</div><div class='del'>-#   db.transaction do</div><div class='del'>-#     db["params"] = cgi.params</div><div class='del'>-#   end</div><div class='del'>-# </div><div class='del'>-# </div><div class='del'>-# === Restore form values from file</div><div class='del'>-# </div><div class='del'>-#   require "pstore"</div><div class='del'>-#   db = PStore.new("query.db")</div><div class='del'>-#   db.transaction do</div><div class='del'>-#     cgi.params = db["params"]</div><div class='del'>-#   end</div><div class='del'>-# </div><div class='del'>-# </div><div class='del'>-# === Get multipart form values</div><div class='del'>-# </div><div class='del'>-#   require "cgi"</div><div class='del'>-#   cgi = CGI.new</div><div class='del'>-#   value = cgi['field_name']   # &lt;== value string for 'field_name'</div><div class='del'>-#   value.read                  # &lt;== body of value</div><div class='del'>-#   value.local_path            # &lt;== path to local file of value</div><div class='del'>-#   value.original_filename     # &lt;== original filename of value</div><div class='del'>-#   value.content_type          # &lt;== content_type of value</div><div class='del'>-# </div><div class='del'>-# and value has StringIO or Tempfile class methods.</div><div class='del'>-# </div><div class='del'>-# === Get cookie values</div><div class='del'>-# </div><div class='del'>-#   require "cgi"</div><div class='del'>-#   cgi = CGI.new</div><div class='del'>-#   values = cgi.cookies['name']  # &lt;== array of 'name'</div><div class='del'>-#     # if not 'name' included, then return [].</div><div class='del'>-#   names = cgi.cookies.keys      # &lt;== array of cookie names</div><div class='del'>-# </div><div class='del'>-# and cgi.cookies is a hash.</div><div class='del'>-# </div><div class='del'>-# === Get cookie objects</div><div class='del'>-# </div><div class='del'>-#   require "cgi"</div><div class='del'>-#   cgi = CGI.new</div><div class='del'>-#   for name, cookie in cgi.cookies</div><div class='del'>-#     cookie.expires = Time.now + 30</div><div class='del'>-#   end</div><div class='del'>-#   cgi.out("cookie" =&gt; cgi.cookies) {"string"}</div><div class='del'>-# </div><div class='del'>-#   cgi.cookies # { "name1" =&gt; cookie1, "name2" =&gt; cookie2, ... }</div><div class='del'>-# </div><div class='del'>-#   require "cgi"</div><div class='del'>-#   cgi = CGI.new</div><div class='del'>-#   cgi.cookies['name'].expires = Time.now + 30</div><div class='del'>-#   cgi.out("cookie" =&gt; cgi.cookies['name']) {"string"}</div><div class='del'>-# </div><div class='del'>-# === Print http header and html string to $DEFAULT_OUTPUT ($&gt;)</div><div class='del'>-# </div><div class='del'>-#   require "cgi"</div><div class='del'>-#   cgi = CGI.new("html3")  # add HTML generation methods</div><div class='del'>-#   cgi.out() do</div><div class='del'>-#     cgi.html() do</div><div class='del'>-#       cgi.head{ cgi.title{"TITLE"} } +</div><div class='del'>-#       cgi.body() do</div><div class='del'>-#         cgi.form() do</div><div class='del'>-#           cgi.textarea("get_text") +</div><div class='del'>-#           cgi.br +</div><div class='del'>-#           cgi.submit</div><div class='del'>-#         end +</div><div class='del'>-#         cgi.pre() do</div><div class='del'>-#           CGI::escapeHTML(</div><div class='del'>-#             "params: " + cgi.params.inspect + "\n" +</div><div class='del'>-#             "cookies: " + cgi.cookies.inspect + "\n" +</div><div class='del'>-#             ENV.collect() do |key, value|</div><div class='del'>-#               key + " --&gt; " + value + "\n"</div><div class='del'>-#             end.join("")</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'>-#   # add HTML generation methods</div><div class='del'>-#   CGI.new("html3")    # html3.2</div><div class='del'>-#   CGI.new("html4")    # html4.01 (Strict)</div><div class='del'>-#   CGI.new("html4Tr")  # html4.01 Transitional</div><div class='del'>-#   CGI.new("html4Fr")  # html4.01 Frameset</div><div class='del'>-#</div><div class='del'>-class CGI</div><div class='del'>-</div><div class='del'>-  # :stopdoc:</div><div class='del'>-</div><div class='del'>-  # String for carriage return</div><div class='del'>-  CR  = "\015"</div><div class='del'>-</div><div class='del'>-  # String for linefeed</div><div class='del'>-  LF  = "\012"</div><div class='del'>-</div><div class='del'>-  # Standard internet newline sequence</div><div class='del'>-  EOL = CR + LF</div><div class='del'>-</div><div class='del'>-  REVISION = '$Id$' #:nodoc:</div><div class='del'>-</div><div class='del'>-  NEEDS_BINMODE = true if /WIN/ni.match(RUBY_PLATFORM) </div><div class='del'>-</div><div class='del'>-  # Path separators in different environments.</div><div class='del'>-  PATH_SEPARATOR = {'UNIX'=&gt;'/', 'WINDOWS'=&gt;'\\', 'MACINTOSH'=&gt;':'}</div><div class='del'>-</div><div class='del'>-  # HTTP status codes.</div><div class='del'>-  HTTP_STATUS = {</div><div class='del'>-    "OK"                  =&gt; "200 OK",</div><div class='del'>-    "PARTIAL_CONTENT"     =&gt; "206 Partial Content",</div><div class='del'>-    "MULTIPLE_CHOICES"    =&gt; "300 Multiple Choices",</div><div class='del'>-    "MOVED"               =&gt; "301 Moved Permanently",</div><div class='del'>-    "REDIRECT"            =&gt; "302 Found",</div><div class='del'>-    "NOT_MODIFIED"        =&gt; "304 Not Modified",</div><div class='del'>-    "BAD_REQUEST"         =&gt; "400 Bad Request",</div><div class='del'>-    "AUTH_REQUIRED"       =&gt; "401 Authorization Required",</div><div class='del'>-    "FORBIDDEN"           =&gt; "403 Forbidden",</div><div class='del'>-    "NOT_FOUND"           =&gt; "404 Not Found",</div><div class='del'>-    "METHOD_NOT_ALLOWED"  =&gt; "405 Method Not Allowed",</div><div class='del'>-    "NOT_ACCEPTABLE"      =&gt; "406 Not Acceptable",</div><div class='del'>-    "LENGTH_REQUIRED"     =&gt; "411 Length Required",</div><div class='del'>-    "PRECONDITION_FAILED" =&gt; "412 Rrecondition Failed",</div><div class='del'>-    "SERVER_ERROR"        =&gt; "500 Internal Server Error",</div><div class='del'>-    "NOT_IMPLEMENTED"     =&gt; "501 Method Not Implemented",</div><div class='del'>-    "BAD_GATEWAY"         =&gt; "502 Bad Gateway",</div><div class='del'>-    "VARIANT_ALSO_VARIES" =&gt; "506 Variant Also Negotiates"</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  # Abbreviated day-of-week names specified by RFC 822</div><div class='del'>-  RFC822_DAYS = %w[ Sun Mon Tue Wed Thu Fri Sat ]</div><div class='del'>-</div><div class='del'>-  # Abbreviated month names specified by RFC 822</div><div class='del'>-  RFC822_MONTHS = %w[ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ]</div><div class='del'>-</div><div class='del'>-  # :startdoc:</div><div class='del'>-</div><div class='del'>-  def env_table </div><div class='del'>-    ENV</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stdinput</div><div class='del'>-    $stdin</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stdoutput</div><div class='del'>-    $DEFAULT_OUTPUT</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :env_table, :stdinput, :stdoutput</div><div class='del'>-</div><div class='del'>-  # URL-encode a string.</div><div class='del'>-  #   url_encoded_string = CGI::escape("'Stop!' said Fred")</div><div class='del'>-  #      # =&gt; "%27Stop%21%27+said+Fred"</div><div class='del'>-  def CGI::escape(string)</div><div class='del'>-    string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do</div><div class='del'>-      '%' + $1.unpack('H2' * $1.size).join('%').upcase</div><div class='del'>-    end.tr(' ', '+')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # URL-decode a string.</div><div class='del'>-  #   string = CGI::unescape("%27Stop%21%27+said+Fred")</div><div class='del'>-  #      # =&gt; "'Stop!' said Fred"</div><div class='del'>-  def CGI::unescape(string)</div><div class='del'>-    string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do</div><div class='del'>-      [$1.delete('%')].pack('H*')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Escape special characters in HTML, namely &amp;\"&lt;&gt;</div><div class='del'>-  #   CGI::escapeHTML('Usage: foo "bar" &lt;baz&gt;')</div><div class='del'>-  #      # =&gt; "Usage: foo &amp;quot;bar&amp;quot; &amp;lt;baz&amp;gt;"</div><div class='del'>-  def CGI::escapeHTML(string)</div><div class='del'>-    string.gsub(/&amp;/n, '&amp;amp;').gsub(/\"/n, '&amp;quot;').gsub(/&gt;/n, '&amp;gt;').gsub(/&lt;/n, '&amp;lt;')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Unescape a string that has been HTML-escaped</div><div class='del'>-  #   CGI::unescapeHTML("Usage: foo &amp;quot;bar&amp;quot; &amp;lt;baz&amp;gt;")</div><div class='del'>-  #      # =&gt; "Usage: foo \"bar\" &lt;baz&gt;"</div><div class='del'>-  def CGI::unescapeHTML(string)</div><div class='del'>-    string.gsub(/&amp;(amp|quot|gt|lt|\#[0-9]+|\#x[0-9A-Fa-f]+);/n) do</div><div class='del'>-      match = $1.dup</div><div class='del'>-      case match</div><div class='del'>-      when 'amp'                 then '&amp;'</div><div class='del'>-      when 'quot'                then '"'</div><div class='del'>-      when 'gt'                  then '&gt;'</div><div class='del'>-      when 'lt'                  then '&lt;'</div><div class='del'>-      when /\A#0*(\d+)\z/n       then</div><div class='del'>-        if Integer($1) &lt; 256</div><div class='del'>-          Integer($1).chr</div><div class='del'>-        else</div><div class='del'>-          if Integer($1) &lt; 65536 and ($KCODE[0] == ?u or $KCODE[0] == ?U)</div><div class='del'>-            [Integer($1)].pack("U")</div><div class='del'>-          else</div><div class='del'>-            "&amp;##{$1};"</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      when /\A#x([0-9a-f]+)\z/ni then</div><div class='del'>-        if $1.hex &lt; 256</div><div class='del'>-          $1.hex.chr</div><div class='del'>-        else</div><div class='del'>-          if $1.hex &lt; 65536 and ($KCODE[0] == ?u or $KCODE[0] == ?U)</div><div class='del'>-            [$1.hex].pack("U")</div><div class='del'>-          else</div><div class='del'>-            "&amp;#x#{$1};"</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        "&amp;#{match};"</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'>-  # Escape only the tags of certain HTML elements in +string+.</div><div class='del'>-  #</div><div class='del'>-  # Takes an element or elements or array of elements.  Each element</div><div class='del'>-  # is specified by the name of the element, without angle brackets.</div><div class='del'>-  # This matches both the start and the end tag of that element.</div><div class='del'>-  # The attribute list of the open tag will also be escaped (for</div><div class='del'>-  # instance, the double-quotes surrounding attribute values).</div><div class='del'>-  #</div><div class='del'>-  #   print CGI::escapeElement('&lt;BR&gt;&lt;A HREF="url"&gt;&lt;/A&gt;', "A", "IMG")</div><div class='del'>-  #     # "&lt;BR&gt;&amp;lt;A HREF=&amp;quot;url&amp;quot;&amp;gt;&amp;lt;/A&amp;gt"</div><div class='del'>-  #</div><div class='del'>-  #   print CGI::escapeElement('&lt;BR&gt;&lt;A HREF="url"&gt;&lt;/A&gt;', ["A", "IMG"])</div><div class='del'>-  #     # "&lt;BR&gt;&amp;lt;A HREF=&amp;quot;url&amp;quot;&amp;gt;&amp;lt;/A&amp;gt"</div><div class='del'>-  def CGI::escapeElement(string, *elements)</div><div class='del'>-    elements = elements[0] if elements[0].kind_of?(Array)</div><div class='del'>-    unless elements.empty?</div><div class='del'>-      string.gsub(/&lt;\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?&gt;/ni) do</div><div class='del'>-        CGI::escapeHTML($&amp;)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      string</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Undo escaping such as that done by CGI::escapeElement()</div><div class='del'>-  #</div><div class='del'>-  #   print CGI::unescapeElement(</div><div class='del'>-  #           CGI::escapeHTML('&lt;BR&gt;&lt;A HREF="url"&gt;&lt;/A&gt;'), "A", "IMG")</div><div class='del'>-  #     # "&amp;lt;BR&amp;gt;&lt;A HREF="url"&gt;&lt;/A&gt;"</div><div class='del'>-  # </div><div class='del'>-  #   print CGI::unescapeElement(</div><div class='del'>-  #           CGI::escapeHTML('&lt;BR&gt;&lt;A HREF="url"&gt;&lt;/A&gt;'), ["A", "IMG"])</div><div class='del'>-  #     # "&amp;lt;BR&amp;gt;&lt;A HREF="url"&gt;&lt;/A&gt;"</div><div class='del'>-  def CGI::unescapeElement(string, *elements)</div><div class='del'>-    elements = elements[0] if elements[0].kind_of?(Array)</div><div class='del'>-    unless elements.empty?</div><div class='del'>-      string.gsub(/&amp;lt;\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?&amp;gt;/ni) do</div><div class='del'>-        CGI::unescapeHTML($&amp;)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      string</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Format a +Time+ object as a String using the format specified by RFC 1123.</div><div class='del'>-  #</div><div class='del'>-  #   CGI::rfc1123_date(Time.now)</div><div class='del'>-  #     # Sat, 01 Jan 2000 00:00:00 GMT</div><div class='del'>-  def CGI::rfc1123_date(time)</div><div class='del'>-    t = time.clone.gmtime</div><div class='del'>-    return format("%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT",</div><div class='del'>-                RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,</div><div class='del'>-                t.hour, t.min, t.sec)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Create an HTTP header block as a string.</div><div class='del'>-  #</div><div class='del'>-  # Includes the empty line that ends the header block.</div><div class='del'>-  #</div><div class='del'>-  # +options+ can be a string specifying the Content-Type (defaults</div><div class='del'>-  # to text/html), or a hash of header key/value pairs.  The following</div><div class='del'>-  # header keys are recognized:</div><div class='del'>-  #</div><div class='del'>-  # type:: the Content-Type header.  Defaults to "text/html"</div><div class='del'>-  # charset:: the charset of the body, appended to the Content-Type header.</div><div class='del'>-  # nph:: a boolean value.  If true, prepend protocol string and status code, and</div><div class='del'>-  #       date; and sets default values for "server" and "connection" if not</div><div class='del'>-  #       explicitly set.</div><div class='del'>-  # status:: the HTTP status code, returned as the Status header.  See the</div><div class='del'>-  #          list of available status codes below.</div><div class='del'>-  # server:: the server software, returned as the Server header.</div><div class='del'>-  # connection:: the connection type, returned as the Connection header (for </div><div class='del'>-  #              instance, "close".</div><div class='del'>-  # length:: the length of the content that will be sent, returned as the</div><div class='del'>-  #          Content-Length header.</div><div class='del'>-  # language:: the language of the content, returned as the Content-Language</div><div class='del'>-  #            header.</div><div class='del'>-  # expires:: the time on which the current content expires, as a +Time+</div><div class='del'>-  #           object, returned as the Expires header.</div><div class='del'>-  # cookie:: a cookie or cookies, returned as one or more Set-Cookie headers.</div><div class='del'>-  #          The value can be the literal string of the cookie; a CGI::Cookie</div><div class='del'>-  #          object; an Array of literal cookie strings or Cookie objects; or a </div><div class='del'>-  #          hash all of whose values are literal cookie strings or Cookie objects.</div><div class='del'>-  #          These cookies are in addition to the cookies held in the</div><div class='del'>-  #          @output_cookies field.</div><div class='del'>-  #</div><div class='del'>-  # Other header lines can also be set; they are appended as key: value.</div><div class='del'>-  # </div><div class='del'>-  #   header</div><div class='del'>-  #     # Content-Type: text/html</div><div class='del'>-  # </div><div class='del'>-  #   header("text/plain")</div><div class='del'>-  #     # Content-Type: text/plain</div><div class='del'>-  # </div><div class='del'>-  #   header("nph"        =&gt; true,</div><div class='del'>-  #          "status"     =&gt; "OK",  # == "200 OK"</div><div class='del'>-  #            # "status"     =&gt; "200 GOOD",</div><div class='del'>-  #          "server"     =&gt; ENV['SERVER_SOFTWARE'],</div><div class='del'>-  #          "connection" =&gt; "close",</div><div class='del'>-  #          "type"       =&gt; "text/html",</div><div class='del'>-  #          "charset"    =&gt; "iso-2022-jp",</div><div class='del'>-  #            # Content-Type: text/html; charset=iso-2022-jp</div><div class='del'>-  #          "length"     =&gt; 103,</div><div class='del'>-  #          "language"   =&gt; "ja",</div><div class='del'>-  #          "expires"    =&gt; Time.now + 30,</div><div class='del'>-  #          "cookie"     =&gt; [cookie1, cookie2],</div><div class='del'>-  #          "my_header1" =&gt; "my_value"</div><div class='del'>-  #          "my_header2" =&gt; "my_value")</div><div class='del'>-  # </div><div class='del'>-  # The status codes are:</div><div class='del'>-  # </div><div class='del'>-  #   "OK"                  --&gt; "200 OK"</div><div class='del'>-  #   "PARTIAL_CONTENT"     --&gt; "206 Partial Content"</div><div class='del'>-  #   "MULTIPLE_CHOICES"    --&gt; "300 Multiple Choices"</div><div class='del'>-  #   "MOVED"               --&gt; "301 Moved Permanently"</div><div class='del'>-  #   "REDIRECT"            --&gt; "302 Found"</div><div class='del'>-  #   "NOT_MODIFIED"        --&gt; "304 Not Modified"</div><div class='del'>-  #   "BAD_REQUEST"         --&gt; "400 Bad Request"</div><div class='del'>-  #   "AUTH_REQUIRED"       --&gt; "401 Authorization Required"</div><div class='del'>-  #   "FORBIDDEN"           --&gt; "403 Forbidden"</div><div class='del'>-  #   "NOT_FOUND"           --&gt; "404 Not Found"</div><div class='del'>-  #   "METHOD_NOT_ALLOWED"  --&gt; "405 Method Not Allowed"</div><div class='del'>-  #   "NOT_ACCEPTABLE"      --&gt; "406 Not Acceptable"</div><div class='del'>-  #   "LENGTH_REQUIRED"     --&gt; "411 Length Required"</div><div class='del'>-  #   "PRECONDITION_FAILED" --&gt; "412 Precondition Failed"</div><div class='del'>-  #   "SERVER_ERROR"        --&gt; "500 Internal Server Error"</div><div class='del'>-  #   "NOT_IMPLEMENTED"     --&gt; "501 Method Not Implemented"</div><div class='del'>-  #   "BAD_GATEWAY"         --&gt; "502 Bad Gateway"</div><div class='del'>-  #   "VARIANT_ALSO_VARIES" --&gt; "506 Variant Also Negotiates"</div><div class='del'>-  # </div><div class='del'>-  # This method does not perform charset conversion. </div><div class='del'>-  #</div><div class='del'>-  def header(options = "text/html")</div><div class='del'>-</div><div class='del'>-    buf = ""</div><div class='del'>-</div><div class='del'>-    case options</div><div class='del'>-    when String</div><div class='del'>-      options = { "type" =&gt; options }</div><div class='del'>-    when Hash</div><div class='del'>-      options = options.dup</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless options.has_key?("type")</div><div class='del'>-      options["type"] = "text/html"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if options.has_key?("charset")</div><div class='del'>-      options["type"] += "; charset=" + options.delete("charset")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    options.delete("nph") if defined?(MOD_RUBY)</div><div class='del'>-    if options.delete("nph") or</div><div class='del'>-        (/IIS\/(\d+)/n.match(env_table['SERVER_SOFTWARE']) and $1.to_i &lt; 5)</div><div class='del'>-      buf += (env_table["SERVER_PROTOCOL"] or "HTTP/1.0")  + " " +</div><div class='del'>-             (HTTP_STATUS[options["status"]] or options["status"] or "200 OK") +</div><div class='del'>-             EOL +</div><div class='del'>-             "Date: " + CGI::rfc1123_date(Time.now) + EOL</div><div class='del'>-</div><div class='del'>-      unless options.has_key?("server")</div><div class='del'>-        options["server"] = (env_table['SERVER_SOFTWARE'] or "")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      unless options.has_key?("connection")</div><div class='del'>-        options["connection"] = "close"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      options.delete("status")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if options.has_key?("status")</div><div class='del'>-      buf += "Status: " +</div><div class='del'>-             (HTTP_STATUS[options["status"]] or options["status"]) + EOL</div><div class='del'>-      options.delete("status")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if options.has_key?("server")</div><div class='del'>-      buf += "Server: " + options.delete("server") + EOL</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if options.has_key?("connection")</div><div class='del'>-      buf += "Connection: " + options.delete("connection") + EOL</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    buf += "Content-Type: " + options.delete("type") + EOL</div><div class='del'>-</div><div class='del'>-    if options.has_key?("length")</div><div class='del'>-      buf += "Content-Length: " + options.delete("length").to_s + EOL</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if options.has_key?("language")</div><div class='del'>-      buf += "Content-Language: " + options.delete("language") + EOL</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if options.has_key?("expires")</div><div class='del'>-      buf += "Expires: " + CGI::rfc1123_date( options.delete("expires") ) + EOL</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if options.has_key?("cookie")</div><div class='del'>-      if options["cookie"].kind_of?(String) or</div><div class='del'>-           options["cookie"].kind_of?(Cookie)</div><div class='del'>-        buf += "Set-Cookie: " + options.delete("cookie").to_s + EOL</div><div class='del'>-      elsif options["cookie"].kind_of?(Array)</div><div class='del'>-        options.delete("cookie").each{|cookie|</div><div class='del'>-          buf += "Set-Cookie: " + cookie.to_s + EOL</div><div class='del'>-        }</div><div class='del'>-      elsif options["cookie"].kind_of?(Hash)</div><div class='del'>-        options.delete("cookie").each_value{|cookie|</div><div class='del'>-          buf += "Set-Cookie: " + cookie.to_s + EOL</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if @output_cookies</div><div class='del'>-      for cookie in @output_cookies</div><div class='del'>-        buf += "Set-Cookie: " + cookie.to_s + EOL</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    options.each{|key, value|</div><div class='del'>-      buf += key + ": " + value.to_s + EOL</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    if defined?(MOD_RUBY)</div><div class='del'>-      table = Apache::request.headers_out</div><div class='del'>-      buf.scan(/([^:]+): (.+)#{EOL}/n){ |name, value|</div><div class='del'>-        warn sprintf("name:%s value:%s\n", name, value) if $DEBUG</div><div class='del'>-        case name</div><div class='del'>-        when 'Set-Cookie'</div><div class='del'>-          table.add(name, value)</div><div class='del'>-        when /^status$/ni</div><div class='del'>-          Apache::request.status_line = value</div><div class='del'>-          Apache::request.status = value.to_i</div><div class='del'>-        when /^content-type$/ni</div><div class='del'>-          Apache::request.content_type = value</div><div class='del'>-        when /^content-encoding$/ni</div><div class='del'>-          Apache::request.content_encoding = value</div><div class='del'>-        when /^location$/ni</div><div class='del'>-	  if Apache::request.status == 200</div><div class='del'>-	    Apache::request.status = 302</div><div class='del'>-	  end</div><div class='del'>-          Apache::request.headers_out[name] = value</div><div class='del'>-        else</div><div class='del'>-          Apache::request.headers_out[name] = value</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      Apache::request.send_http_header</div><div class='del'>-      ''</div><div class='del'>-    else</div><div class='del'>-      buf + EOL</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end # header()</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Print an HTTP header and body to $DEFAULT_OUTPUT ($&gt;)</div><div class='del'>-  #</div><div class='del'>-  # The header is provided by +options+, as for #header().</div><div class='del'>-  # The body of the document is that returned by the passed-</div><div class='del'>-  # in block.  This block takes no arguments.  It is required.</div><div class='del'>-  #</div><div class='del'>-  #   cgi = CGI.new</div><div class='del'>-  #   cgi.out{ "string" }</div><div class='del'>-  #     # Content-Type: text/html</div><div class='del'>-  #     # Content-Length: 6</div><div class='del'>-  #     #</div><div class='del'>-  #     # string</div><div class='del'>-  # </div><div class='del'>-  #   cgi.out("text/plain") { "string" }</div><div class='del'>-  #     # Content-Type: text/plain</div><div class='del'>-  #     # Content-Length: 6</div><div class='del'>-  #     #</div><div class='del'>-  #     # string</div><div class='del'>-  # </div><div class='del'>-  #   cgi.out("nph"        =&gt; true,</div><div class='del'>-  #           "status"     =&gt; "OK",  # == "200 OK"</div><div class='del'>-  #           "server"     =&gt; ENV['SERVER_SOFTWARE'],</div><div class='del'>-  #           "connection" =&gt; "close",</div><div class='del'>-  #           "type"       =&gt; "text/html",</div><div class='del'>-  #           "charset"    =&gt; "iso-2022-jp",</div><div class='del'>-  #             # Content-Type: text/html; charset=iso-2022-jp</div><div class='del'>-  #           "language"   =&gt; "ja",</div><div class='del'>-  #           "expires"    =&gt; Time.now + (3600 * 24 * 30),</div><div class='del'>-  #           "cookie"     =&gt; [cookie1, cookie2],</div><div class='del'>-  #           "my_header1" =&gt; "my_value",</div><div class='del'>-  #           "my_header2" =&gt; "my_value") { "string" }</div><div class='del'>-  # </div><div class='del'>-  # Content-Length is automatically calculated from the size of</div><div class='del'>-  # the String returned by the content block.</div><div class='del'>-  #</div><div class='del'>-  # If ENV['REQUEST_METHOD'] == "HEAD", then only the header</div><div class='del'>-  # is outputted (the content block is still required, but it</div><div class='del'>-  # is ignored).</div><div class='del'>-  # </div><div class='del'>-  # If the charset is "iso-2022-jp" or "euc-jp" or "shift_jis" then</div><div class='del'>-  # the content is converted to this charset, and the language is set </div><div class='del'>-  # to "ja".</div><div class='del'>-  def out(options = "text/html") # :yield:</div><div class='del'>-</div><div class='del'>-    options = { "type" =&gt; options } if options.kind_of?(String)</div><div class='del'>-    content = yield</div><div class='del'>-</div><div class='del'>-    if options.has_key?("charset")</div><div class='del'>-      require "nkf"</div><div class='del'>-      case options["charset"]</div><div class='del'>-      when /iso-2022-jp/ni</div><div class='del'>-        content = NKF::nkf('-m0 -x -j', content)</div><div class='del'>-        options["language"] = "ja" unless options.has_key?("language")</div><div class='del'>-      when /euc-jp/ni</div><div class='del'>-        content = NKF::nkf('-m0 -x -e', content)</div><div class='del'>-        options["language"] = "ja" unless options.has_key?("language")</div><div class='del'>-      when /shift_jis/ni</div><div class='del'>-        content = NKF::nkf('-m0 -x -s', content)</div><div class='del'>-        options["language"] = "ja" unless options.has_key?("language")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    options["length"] = content.length.to_s</div><div class='del'>-    output = stdoutput</div><div class='del'>-    output.binmode if defined? output.binmode</div><div class='del'>-    output.print header(options)</div><div class='del'>-    output.print content unless "HEAD" == env_table['REQUEST_METHOD']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Print an argument or list of arguments to the default output stream</div><div class='del'>-  #</div><div class='del'>-  #   cgi = CGI.new</div><div class='del'>-  #   cgi.print    # default:  cgi.print == $DEFAULT_OUTPUT.print</div><div class='del'>-  def print(*options)</div><div class='del'>-    stdoutput.print(*options)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  require "delegate"</div><div class='del'>-</div><div class='del'>-  # Class representing an HTTP cookie.</div><div class='del'>-  #</div><div class='del'>-  # In addition to its specific fields and methods, a Cookie instance</div><div class='del'>-  # is a delegator to the array of its values.</div><div class='del'>-  #</div><div class='del'>-  # See RFC 2965.</div><div class='del'>-  #</div><div class='del'>-  # == Examples of use</div><div class='del'>-  #   cookie1 = CGI::Cookie::new("name", "value1", "value2", ...)</div><div class='del'>-  #   cookie1 = CGI::Cookie::new("name" =&gt; "name", "value" =&gt; "value")</div><div class='del'>-  #   cookie1 = CGI::Cookie::new('name'    =&gt; 'name',</div><div class='del'>-  #                              'value'   =&gt; ['value1', 'value2', ...],</div><div class='del'>-  #                              'path'    =&gt; 'path',   # optional</div><div class='del'>-  #                              'domain'  =&gt; 'domain', # optional</div><div class='del'>-  #                              'expires' =&gt; Time.now, # optional</div><div class='del'>-  #                              'secure'  =&gt; true      # optional</div><div class='del'>-  #                             )</div><div class='del'>-  # </div><div class='del'>-  #   cgi.out("cookie" =&gt; [cookie1, cookie2]) { "string" }</div><div class='del'>-  # </div><div class='del'>-  #   name    = cookie1.name</div><div class='del'>-  #   values  = cookie1.value</div><div class='del'>-  #   path    = cookie1.path</div><div class='del'>-  #   domain  = cookie1.domain</div><div class='del'>-  #   expires = cookie1.expires</div><div class='del'>-  #   secure  = cookie1.secure</div><div class='del'>-  # </div><div class='del'>-  #   cookie1.name    = 'name'</div><div class='del'>-  #   cookie1.value   = ['value1', 'value2', ...]</div><div class='del'>-  #   cookie1.path    = 'path'</div><div class='del'>-  #   cookie1.domain  = 'domain'</div><div class='del'>-  #   cookie1.expires = Time.now + 30</div><div class='del'>-  #   cookie1.secure  = true</div><div class='del'>-  class Cookie &lt; DelegateClass(Array)</div><div class='del'>-</div><div class='del'>-    # Create a new CGI::Cookie object.</div><div class='del'>-    #</div><div class='del'>-    # The contents of the cookie can be specified as a +name+ and one</div><div class='del'>-    # or more +value+ arguments.  Alternatively, the contents can</div><div class='del'>-    # be specified as a single hash argument.  The possible keywords of</div><div class='del'>-    # this hash are as follows:</div><div class='del'>-    #</div><div class='del'>-    # name:: the name of the cookie.  Required.</div><div class='del'>-    # value:: the cookie's value or list of values.</div><div class='del'>-    # path:: the path for which this cookie applies.  Defaults to the</div><div class='del'>-    #        base directory of the CGI script.</div><div class='del'>-    # domain:: the domain for which this cookie applies.</div><div class='del'>-    # expires:: the time at which this cookie expires, as a +Time+ object.</div><div class='del'>-    # secure:: whether this cookie is a secure cookie or not (default to</div><div class='del'>-    #          false).  Secure cookies are only transmitted to HTTPS </div><div class='del'>-    #          servers.</div><div class='del'>-    #</div><div class='del'>-    # These keywords correspond to attributes of the cookie object.</div><div class='del'>-    def initialize(name = "", *value)</div><div class='del'>-      if name.kind_of?(String)</div><div class='del'>-        @name = name</div><div class='del'>-        @value = value</div><div class='del'>-        %r|^(.*/)|.match(ENV["SCRIPT_NAME"])</div><div class='del'>-        @path = ($1 or "")</div><div class='del'>-        @secure = false</div><div class='del'>-        return super(@value)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      options = name</div><div class='del'>-      unless options.has_key?("name")</div><div class='del'>-        raise ArgumentError, "`name' required"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @name = options["name"]</div><div class='del'>-      @value = Array(options["value"])</div><div class='del'>-      # simple support for IE</div><div class='del'>-      if options["path"]</div><div class='del'>-        @path = options["path"]</div><div class='del'>-      else</div><div class='del'>-        %r|^(.*/)|.match(ENV["SCRIPT_NAME"])</div><div class='del'>-        @path = ($1 or "")</div><div class='del'>-      end</div><div class='del'>-      @domain = options["domain"]</div><div class='del'>-      @expires = options["expires"]</div><div class='del'>-      @secure = options["secure"] == true ? true : false</div><div class='del'>-</div><div class='del'>-      super(@value)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_accessor("name", "value", "path", "domain", "expires")</div><div class='del'>-    attr_reader("secure")</div><div class='del'>-</div><div class='del'>-    # Set whether the Cookie is a secure cookie or not.</div><div class='del'>-    #</div><div class='del'>-    # +val+ must be a boolean.</div><div class='del'>-    def secure=(val)</div><div class='del'>-      @secure = val if val == true or val == false</div><div class='del'>-      @secure</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Convert the Cookie to its string representation.</div><div class='del'>-    def to_s</div><div class='del'>-      buf = ""</div><div class='del'>-      buf += @name + '='</div><div class='del'>-</div><div class='del'>-      if @value.kind_of?(String)</div><div class='del'>-        buf += CGI::escape(@value)</div><div class='del'>-      else</div><div class='del'>-        buf += @value.collect{|v| CGI::escape(v) }.join("&amp;")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if @domain</div><div class='del'>-        buf += '; domain=' + @domain</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if @path</div><div class='del'>-        buf += '; path=' + @path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if @expires</div><div class='del'>-        buf += '; expires=' + CGI::rfc1123_date(@expires)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if @secure == true</div><div class='del'>-        buf += '; secure'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      buf</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end # class Cookie</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Parse a raw cookie string into a hash of cookie-name=&gt;Cookie</div><div class='del'>-  # pairs.</div><div class='del'>-  #</div><div class='del'>-  #   cookies = CGI::Cookie::parse("raw_cookie_string")</div><div class='del'>-  #     # { "name1" =&gt; cookie1, "name2" =&gt; cookie2, ... }</div><div class='del'>-  #</div><div class='del'>-  def Cookie::parse(raw_cookie)</div><div class='del'>-    cookies = Hash.new([])</div><div class='del'>-    return cookies unless raw_cookie</div><div class='del'>-</div><div class='del'>-    raw_cookie.split(/[;,]\s?/).each do |pairs|</div><div class='del'>-      name, values = pairs.split('=',2)</div><div class='del'>-      next unless name and values</div><div class='del'>-      name = CGI::unescape(name)</div><div class='del'>-      values ||= ""</div><div class='del'>-      values = values.split('&amp;').collect{|v| CGI::unescape(v) }</div><div class='del'>-      if cookies.has_key?(name)</div><div class='del'>-        values = cookies[name].value + values</div><div class='del'>-      end</div><div class='del'>-      cookies[name] = Cookie::new(name, *values)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    cookies</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Parse an HTTP query string into a hash of key=&gt;value pairs.</div><div class='del'>-  #</div><div class='del'>-  #   params = CGI::parse("query_string")</div><div class='del'>-  #     # {"name1" =&gt; ["value1", "value2", ...],</div><div class='del'>-  #     #  "name2" =&gt; ["value1", "value2", ...], ... }</div><div class='del'>-  #</div><div class='del'>-  def CGI::parse(query)</div><div class='del'>-    params = Hash.new([].freeze)</div><div class='del'>-</div><div class='del'>-    query.split(/[&amp;;]/n).each do |pairs|</div><div class='del'>-      key, value = pairs.split('=',2).collect{|v| CGI::unescape(v) }</div><div class='del'>-      if params.has_key?(key)</div><div class='del'>-        params[key].push(value)</div><div class='del'>-      else</div><div class='del'>-        params[key] = [value]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    params</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Mixin module. It provides the follow functionality groups:</div><div class='del'>-  #</div><div class='del'>-  # 1. Access to CGI environment variables as methods.  See </div><div class='del'>-  #    documentation to the CGI class for a list of these variables.</div><div class='del'>-  #</div><div class='del'>-  # 2. Access to cookies, including the cookies attribute.</div><div class='del'>-  #</div><div class='del'>-  # 3. Access to parameters, including the params attribute, and overloading</div><div class='del'>-  #    [] to perform parameter value lookup by key.</div><div class='del'>-  #</div><div class='del'>-  # 4. The initialize_query method, for initialising the above</div><div class='del'>-  #    mechanisms, handling multipart forms, and allowing the</div><div class='del'>-  #    class to be used in "offline" mode.</div><div class='del'>-  #</div><div class='del'>-  module QueryExtension</div><div class='del'>-</div><div class='del'>-    %w[ CONTENT_LENGTH SERVER_PORT ].each do |env|</div><div class='del'>-      define_method(env.sub(/^HTTP_/n, '').downcase) do</div><div class='del'>-        (val = env_table[env]) &amp;&amp; Integer(val)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    %w[ AUTH_TYPE CONTENT_TYPE GATEWAY_INTERFACE PATH_INFO</div><div class='del'>-        PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST</div><div class='del'>-        REMOTE_IDENT REMOTE_USER REQUEST_METHOD SCRIPT_NAME</div><div class='del'>-        SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE</div><div class='del'>-</div><div class='del'>-        HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING</div><div class='del'>-        HTTP_ACCEPT_LANGUAGE HTTP_CACHE_CONTROL HTTP_FROM HTTP_HOST</div><div class='del'>-        HTTP_NEGOTIATE HTTP_PRAGMA HTTP_REFERER HTTP_USER_AGENT ].each do |env|</div><div class='del'>-      define_method(env.sub(/^HTTP_/n, '').downcase) do</div><div class='del'>-        env_table[env]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get the raw cookies as a string.</div><div class='del'>-    def raw_cookie</div><div class='del'>-      env_table["HTTP_COOKIE"]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get the raw RFC2965 cookies as a string.</div><div class='del'>-    def raw_cookie2</div><div class='del'>-      env_table["HTTP_COOKIE2"]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get the cookies as a hash of cookie-name=&gt;Cookie pairs.</div><div class='del'>-    attr_accessor("cookies")</div><div class='del'>-</div><div class='del'>-    # Get the parameters as a hash of name=&gt;values pairs, where</div><div class='del'>-    # values is an Array.</div><div class='del'>-    attr("params")</div><div class='del'>-</div><div class='del'>-    # Set all the parameters.</div><div class='del'>-    def params=(hash)</div><div class='del'>-      @params.clear</div><div class='del'>-      @params.update(hash)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def read_multipart(boundary, content_length)</div><div class='del'>-      params = Hash.new([])</div><div class='del'>-      boundary = "--" + boundary</div><div class='del'>-      quoted_boundary = Regexp.quote(boundary, "n")</div><div class='del'>-      buf = ""</div><div class='del'>-      bufsize = 10 * 1024</div><div class='del'>-      boundary_end=""</div><div class='del'>-</div><div class='del'>-      # start multipart/form-data</div><div class='del'>-      stdinput.binmode if defined? stdinput.binmode</div><div class='del'>-      boundary_size = boundary.size + EOL.size</div><div class='del'>-      content_length -= boundary_size</div><div class='del'>-      status = stdinput.read(boundary_size)</div><div class='del'>-      if nil == status</div><div class='del'>-        raise EOFError, "no content body"</div><div class='del'>-      elsif boundary + EOL != status</div><div class='del'>-        raise EOFError, "bad content body"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      loop do</div><div class='del'>-        head = nil</div><div class='del'>-        if 10240 &lt; content_length</div><div class='del'>-          require "tempfile"</div><div class='del'>-          body = Tempfile.new("CGI")</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            require "stringio"</div><div class='del'>-            body = StringIO.new</div><div class='del'>-          rescue LoadError</div><div class='del'>-            require "tempfile"</div><div class='del'>-            body = Tempfile.new("CGI")</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        body.binmode if defined? body.binmode</div><div class='del'>-</div><div class='del'>-        until head and /#{quoted_boundary}(?:#{EOL}|--)/n.match(buf)</div><div class='del'>-</div><div class='del'>-          if (not head) and /#{EOL}#{EOL}/n.match(buf)</div><div class='del'>-            buf = buf.sub(/\A((?:.|\n)*?#{EOL})#{EOL}/n) do</div><div class='del'>-              head = $1.dup</div><div class='del'>-              ""</div><div class='del'>-            end</div><div class='del'>-            next</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          if head and ( (EOL + boundary + EOL).size &lt; buf.size )</div><div class='del'>-            body.print buf[0 ... (buf.size - (EOL + boundary + EOL).size)]</div><div class='del'>-            buf[0 ... (buf.size - (EOL + boundary + EOL).size)] = ""</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          c = if bufsize &lt; content_length</div><div class='del'>-                stdinput.read(bufsize)</div><div class='del'>-              else</div><div class='del'>-                stdinput.read(content_length)</div><div class='del'>-              end</div><div class='del'>-          if c.nil? || c.empty?</div><div class='del'>-            raise EOFError, "bad content body"</div><div class='del'>-          end</div><div class='del'>-          buf.concat(c)</div><div class='del'>-          content_length -= c.size</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        buf = buf.sub(/\A((?:.|\n)*?)(?:[\r\n]{1,2})?#{quoted_boundary}([\r\n]{1,2}|--)/n) do</div><div class='del'>-          body.print $1</div><div class='del'>-          if "--" == $2</div><div class='del'>-            content_length = -1</div><div class='del'>-          end</div><div class='del'>-          boundary_end = $2.dup</div><div class='del'>-          ""</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        body.rewind</div><div class='del'>-</div><div class='del'>-        /Content-Disposition:.* filename=(?:"((?:\\.|[^\"])*)"|([^;\s]*))/ni.match(head)</div><div class='del'>-	filename = ($1 or $2 or "")</div><div class='del'>-	if /Mac/ni.match(env_table['HTTP_USER_AGENT']) and</div><div class='del'>-	    /Mozilla/ni.match(env_table['HTTP_USER_AGENT']) and</div><div class='del'>-	    (not /MSIE/ni.match(env_table['HTTP_USER_AGENT']))</div><div class='del'>-	  filename = CGI::unescape(filename)</div><div class='del'>-	end</div><div class='del'>-        </div><div class='del'>-        /Content-Type: ([^\s]*)/ni.match(head)</div><div class='del'>-        content_type = ($1 or "")</div><div class='del'>-</div><div class='del'>-        (class &lt;&lt; body; self; end).class_eval do</div><div class='del'>-          alias local_path path</div><div class='del'>-          define_method(:original_filename) {filename.dup.taint}</div><div class='del'>-          define_method(:content_type) {content_type.dup.taint}</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        /Content-Disposition:.* name="?([^\";\s]*)"?/ni.match(head)</div><div class='del'>-        name = $1.dup</div><div class='del'>-</div><div class='del'>-        if params.has_key?(name)</div><div class='del'>-          params[name].push(body)</div><div class='del'>-        else</div><div class='del'>-          params[name] = [body]</div><div class='del'>-        end</div><div class='del'>-        break if buf.size == 0</div><div class='del'>-        break if content_length == -1</div><div class='del'>-      end</div><div class='del'>-      raise EOFError, "bad boundary end of body part" unless boundary_end=~/--/</div><div class='del'>-</div><div class='del'>-      params</div><div class='del'>-    end # read_multipart</div><div class='del'>-    private :read_multipart</div><div class='del'>-</div><div class='del'>-    # offline mode. read name=value pairs on standard input.</div><div class='del'>-    def read_from_cmdline</div><div class='del'>-      require "shellwords"</div><div class='del'>-</div><div class='del'>-      string = unless ARGV.empty?</div><div class='del'>-        ARGV.join(' ')</div><div class='del'>-      else</div><div class='del'>-        if STDIN.tty?</div><div class='del'>-          STDERR.print(</div><div class='del'>-            %|(offline mode: enter name=value pairs on standard input)\n|</div><div class='del'>-          )</div><div class='del'>-        end</div><div class='del'>-        readlines.join(' ').gsub(/\n/n, '')</div><div class='del'>-      end.gsub(/\\=/n, '%3D').gsub(/\\&amp;/n, '%26')</div><div class='del'>-</div><div class='del'>-      words = Shellwords.shellwords(string)</div><div class='del'>-</div><div class='del'>-      if words.find{|x| /=/n.match(x) }</div><div class='del'>-        words.join('&amp;')</div><div class='del'>-      else</div><div class='del'>-        words.join('+')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :read_from_cmdline</div><div class='del'>-</div><div class='del'>-    # Initialize the data from the query.</div><div class='del'>-    #</div><div class='del'>-    # Handles multipart forms (in particular, forms that involve file uploads).</div><div class='del'>-    # Reads query parameters in the @params field, and cookies into @cookies.</div><div class='del'>-    def initialize_query()</div><div class='del'>-      if ("POST" == env_table['REQUEST_METHOD']) and</div><div class='del'>-         %r|\Amultipart/form-data.*boundary=\"?([^\";,]+)\"?|n.match(env_table['CONTENT_TYPE'])</div><div class='del'>-        boundary = $1.dup</div><div class='del'>-        @multipart = true</div><div class='del'>-        @params = read_multipart(boundary, Integer(env_table['CONTENT_LENGTH']))</div><div class='del'>-      else</div><div class='del'>-        @multipart = false</div><div class='del'>-        @params = CGI::parse(</div><div class='del'>-                    case env_table['REQUEST_METHOD']</div><div class='del'>-                    when "GET", "HEAD"</div><div class='del'>-                      if defined?(MOD_RUBY)</div><div class='del'>-                        Apache::request.args or ""</div><div class='del'>-                      else</div><div class='del'>-                        env_table['QUERY_STRING'] or ""</div><div class='del'>-                      end</div><div class='del'>-                    when "POST"</div><div class='del'>-                      stdinput.binmode if defined? stdinput.binmode</div><div class='del'>-                      stdinput.read(Integer(env_table['CONTENT_LENGTH'])) or ''</div><div class='del'>-                    else</div><div class='del'>-                      read_from_cmdline</div><div class='del'>-                    end</div><div class='del'>-                  )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @cookies = CGI::Cookie::parse((env_table['HTTP_COOKIE'] or env_table['COOKIE']))</div><div class='del'>-    end</div><div class='del'>-    private :initialize_query</div><div class='del'>-</div><div class='del'>-    def multipart?</div><div class='del'>-      @multipart</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module Value    # :nodoc:</div><div class='del'>-      def set_params(params)</div><div class='del'>-        @params = params</div><div class='del'>-      end</div><div class='del'>-      def [](idx, *args)</div><div class='del'>-        if args.size == 0</div><div class='del'>-          warn "#{caller(1)[0]}:CAUTION! cgi['key'] == cgi.params['key'][0]; if want Array, use cgi.params['key']"</div><div class='del'>-          @params[idx]</div><div class='del'>-        else</div><div class='del'>-          super[idx,*args]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      def first</div><div class='del'>-        warn "#{caller(1)[0]}:CAUTION! cgi['key'] == cgi.params['key'][0]; if want Array, use cgi.params['key']"</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      alias last first</div><div class='del'>-      def to_a</div><div class='del'>-        @params || [self]</div><div class='del'>-      end</div><div class='del'>-      alias to_ary to_a   	# to be rhs of multiple assignment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get the value for the parameter with a given key.</div><div class='del'>-    #</div><div class='del'>-    # If the parameter has multiple values, only the first will be </div><div class='del'>-    # retrieved; use #params() to get the array of values.</div><div class='del'>-    def [](key)</div><div class='del'>-      params = @params[key]</div><div class='del'>-      return '' unless params</div><div class='del'>-      value = params[0]</div><div class='del'>-      if @multipart</div><div class='del'>-        if value</div><div class='del'>-          return value</div><div class='del'>-        elsif defined? StringIO</div><div class='del'>-          StringIO.new("")</div><div class='del'>-        else</div><div class='del'>-          Tempfile.new("CGI")</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        str = if value then value.dup else "" end</div><div class='del'>-        str.extend(Value)</div><div class='del'>-        str.set_params(params)</div><div class='del'>-        str</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return all parameter keys as an array.</div><div class='del'>-    def keys(*args)</div><div class='del'>-      @params.keys(*args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns true if a given parameter key exists in the query.</div><div class='del'>-    def has_key?(*args)</div><div class='del'>-      @params.has_key?(*args)</div><div class='del'>-    end</div><div class='del'>-    alias key? has_key?</div><div class='del'>-    alias include? has_key?</div><div class='del'>-</div><div class='del'>-  end # QueryExtension</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Prettify (indent) an HTML string.</div><div class='del'>-  #</div><div class='del'>-  # +string+ is the HTML string to indent.  +shift+ is the indentation</div><div class='del'>-  # unit to use; it defaults to two spaces.</div><div class='del'>-  #</div><div class='del'>-  #   print CGI::pretty("&lt;HTML&gt;&lt;BODY&gt;&lt;/BODY&gt;&lt;/HTML&gt;")</div><div class='del'>-  #     # &lt;HTML&gt;</div><div class='del'>-  #     #   &lt;BODY&gt;</div><div class='del'>-  #     #   &lt;/BODY&gt;</div><div class='del'>-  #     # &lt;/HTML&gt;</div><div class='del'>-  # </div><div class='del'>-  #   print CGI::pretty("&lt;HTML&gt;&lt;BODY&gt;&lt;/BODY&gt;&lt;/HTML&gt;", "\t")</div><div class='del'>-  #     # &lt;HTML&gt;</div><div class='del'>-  #     #         &lt;BODY&gt;</div><div class='del'>-  #     #         &lt;/BODY&gt;</div><div class='del'>-  #     # &lt;/HTML&gt;</div><div class='del'>-  #</div><div class='del'>-  def CGI::pretty(string, shift = "  ")</div><div class='del'>-    lines = string.gsub(/(?!\A)&lt;(?:.|\n)*?&gt;/n, "\n\\0").gsub(/&lt;(?:.|\n)*?&gt;(?!\n)/n, "\\0\n")</div><div class='del'>-    end_pos = 0</div><div class='del'>-    while end_pos = lines.index(/^&lt;\/(\w+)/n, end_pos)</div><div class='del'>-      element = $1.dup</div><div class='del'>-      start_pos = lines.rindex(/^\s*&lt;#{element}/ni, end_pos)</div><div class='del'>-      lines[start_pos ... end_pos] = "__" + lines[start_pos ... end_pos].gsub(/\n(?!\z)/n, "\n" + shift) + "__"</div><div class='del'>-    end</div><div class='del'>-    lines.gsub(/^((?:#{Regexp::quote(shift)})*)__(?=&lt;\/?\w)/n, '\1')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Base module for HTML-generation mixins.</div><div class='del'>-  #</div><div class='del'>-  # Provides methods for code generation for tags following</div><div class='del'>-  # the various DTD element types.</div><div class='del'>-  module TagMaker # :nodoc:</div><div class='del'>-</div><div class='del'>-    # Generate code for an element with required start and end tags.</div><div class='del'>-    #</div><div class='del'>-    #   - -</div><div class='del'>-    def nn_element_def(element)</div><div class='del'>-      nOE_element_def(element, &lt;&lt;-END)</div><div class='del'>-          if block_given?</div><div class='del'>-            yield.to_s</div><div class='del'>-          else</div><div class='del'>-            ""</div><div class='del'>-          end +</div><div class='del'>-          "&lt;/#{element.upcase}&gt;"</div><div class='del'>-      END</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate code for an empty element.</div><div class='del'>-    #</div><div class='del'>-    #   - O EMPTY</div><div class='del'>-    def nOE_element_def(element, append = nil)</div><div class='del'>-      s = &lt;&lt;-END</div><div class='del'>-          "&lt;#{element.upcase}" + attributes.collect{|name, value|</div><div class='del'>-            next unless value</div><div class='del'>-            " " + CGI::escapeHTML(name) +</div><div class='del'>-            if true == value</div><div class='del'>-              ""</div><div class='del'>-            else</div><div class='del'>-              '="' + CGI::escapeHTML(value) + '"'</div><div class='del'>-            end</div><div class='del'>-          }.to_s + "&gt;"</div><div class='del'>-      END</div><div class='del'>-      s.sub!(/\Z/, " +") &lt;&lt; append if append</div><div class='del'>-      s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate code for an element for which the end (and possibly the</div><div class='del'>-    # start) tag is optional.</div><div class='del'>-    #</div><div class='del'>-    #   O O or - O</div><div class='del'>-    def nO_element_def(element)</div><div class='del'>-      nOE_element_def(element, &lt;&lt;-END)</div><div class='del'>-          if block_given?</div><div class='del'>-            yield.to_s + "&lt;/#{element.upcase}&gt;"</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 # TagMaker</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Mixin module providing HTML generation methods.</div><div class='del'>-  #</div><div class='del'>-  # For example,</div><div class='del'>-  #   cgi.a("http://www.example.com") { "Example" }</div><div class='del'>-  #     # =&gt; "&lt;A HREF=\"http://www.example.com\"&gt;Example&lt;/A&gt;"</div><div class='del'>-  #</div><div class='del'>-  # Modules Http3, Http4, etc., contain more basic HTML-generation methods</div><div class='del'>-  # (:title, :center, etc.).</div><div class='del'>-  #</div><div class='del'>-  # See class CGI for a detailed example. </div><div class='del'>-  #</div><div class='del'>-  module HtmlExtension</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate an Anchor element as a string.</div><div class='del'>-    #</div><div class='del'>-    # +href+ can either be a string, giving the URL</div><div class='del'>-    # for the HREF attribute, or it can be a hash of</div><div class='del'>-    # the element's attributes.</div><div class='del'>-    #</div><div class='del'>-    # The body of the element is the string returned by the no-argument</div><div class='del'>-    # block passed in.</div><div class='del'>-    #</div><div class='del'>-    #   a("http://www.example.com") { "Example" }</div><div class='del'>-    #     # =&gt; "&lt;A HREF=\"http://www.example.com\"&gt;Example&lt;/A&gt;"</div><div class='del'>-    #</div><div class='del'>-    #   a("HREF" =&gt; "http://www.example.com", "TARGET" =&gt; "_top") { "Example" }</div><div class='del'>-    #     # =&gt; "&lt;A HREF=\"http://www.example.com\" TARGET=\"_top\"&gt;Example&lt;/A&gt;"</div><div class='del'>-    #</div><div class='del'>-    def a(href = "") # :yield:</div><div class='del'>-      attributes = if href.kind_of?(String)</div><div class='del'>-                     { "HREF" =&gt; href }</div><div class='del'>-                   else</div><div class='del'>-                     href</div><div class='del'>-                   end</div><div class='del'>-      if block_given?</div><div class='del'>-        super(attributes){ yield }</div><div class='del'>-      else</div><div class='del'>-        super(attributes)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a Document Base URI element as a String. </div><div class='del'>-    #</div><div class='del'>-    # +href+ can either by a string, giving the base URL for the HREF</div><div class='del'>-    # attribute, or it can be a has of the element's attributes.</div><div class='del'>-    #</div><div class='del'>-    # The passed-in no-argument block is ignored.</div><div class='del'>-    #</div><div class='del'>-    #   base("http://www.example.com/cgi")</div><div class='del'>-    #     # =&gt; "&lt;BASE HREF=\"http://www.example.com/cgi\"&gt;"</div><div class='del'>-    def base(href = "") # :yield:</div><div class='del'>-      attributes = if href.kind_of?(String)</div><div class='del'>-                     { "HREF" =&gt; href }</div><div class='del'>-                   else</div><div class='del'>-                     href</div><div class='del'>-                   end</div><div class='del'>-      if block_given?</div><div class='del'>-        super(attributes){ yield }</div><div class='del'>-      else</div><div class='del'>-        super(attributes)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a BlockQuote element as a string.</div><div class='del'>-    #</div><div class='del'>-    # +cite+ can either be a string, give the URI for the source of</div><div class='del'>-    # the quoted text, or a hash, giving all attributes of the element,</div><div class='del'>-    # or it can be omitted, in which case the element has no attributes.</div><div class='del'>-    #</div><div class='del'>-    # The body is provided by the passed-in no-argument block</div><div class='del'>-    #</div><div class='del'>-    #   blockquote("http://www.example.com/quotes/foo.html") { "Foo!" }</div><div class='del'>-    #     #=&gt; "&lt;BLOCKQUOTE CITE=\"http://www.example.com/quotes/foo.html\"&gt;Foo!&lt;/BLOCKQUOTE&gt;</div><div class='del'>-    def blockquote(cite = nil)  # :yield:</div><div class='del'>-      attributes = if cite.kind_of?(String)</div><div class='del'>-                     { "CITE" =&gt; cite }</div><div class='del'>-                   else</div><div class='del'>-                     cite or ""</div><div class='del'>-                   end</div><div class='del'>-      if block_given?</div><div class='del'>-        super(attributes){ yield }</div><div class='del'>-      else</div><div class='del'>-        super(attributes)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate a Table Caption element as a string.</div><div class='del'>-    #</div><div class='del'>-    # +align+ can be a string, giving the alignment of the caption</div><div class='del'>-    # (one of top, bottom, left, or right).  It can be a hash of</div><div class='del'>-    # all the attributes of the element.  Or it can be omitted.</div><div class='del'>-    #</div><div class='del'>-    # The body of the element is provided by the passed-in no-argument block.</div><div class='del'>-    #</div><div class='del'>-    #   caption("left") { "Capital Cities" }</div><div class='del'>-    #     # =&gt; &lt;CAPTION ALIGN=\"left\"&gt;Capital Cities&lt;/CAPTION&gt;</div><div class='del'>-    def caption(align = nil) # :yield:</div><div class='del'>-      attributes = if align.kind_of?(String)</div><div class='del'>-                     { "ALIGN" =&gt; align }</div><div class='del'>-                   else</div><div class='del'>-                     align or ""</div><div class='del'>-                   end</div><div class='del'>-      if block_given?</div><div class='del'>-        super(attributes){ yield }</div><div class='del'>-      else</div><div class='del'>-        super(attributes)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate a Checkbox Input element as a string.</div><div class='del'>-    #</div><div class='del'>-    # The attributes of the element can be specified as three arguments,</div><div class='del'>-    # +name+, +value+, and +checked+.  +checked+ is a boolean value;</div><div class='del'>-    # if true, the CHECKED attribute will be included in the element.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   checkbox("name")</div><div class='del'>-    #     # = checkbox("NAME" =&gt; "name")</div><div class='del'>-    # </div><div class='del'>-    #   checkbox("name", "value")</div><div class='del'>-    #     # = checkbox("NAME" =&gt; "name", "VALUE" =&gt; "value")</div><div class='del'>-    # </div><div class='del'>-    #   checkbox("name", "value", true)</div><div class='del'>-    #     # = checkbox("NAME" =&gt; "name", "VALUE" =&gt; "value", "CHECKED" =&gt; true)</div><div class='del'>-    def checkbox(name = "", value = nil, checked = nil)</div><div class='del'>-      attributes = if name.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "checkbox", "NAME" =&gt; name,</div><div class='del'>-                       "VALUE" =&gt; value, "CHECKED" =&gt; checked }</div><div class='del'>-                   else</div><div class='del'>-                     name["TYPE"] = "checkbox"</div><div class='del'>-                     name</div><div class='del'>-                   end</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a sequence of checkbox elements, as a String.</div><div class='del'>-    #</div><div class='del'>-    # The checkboxes will all have the same +name+ attribute.</div><div class='del'>-    # Each checkbox is followed by a label.</div><div class='del'>-    # There will be one checkbox for each value.  Each value</div><div class='del'>-    # can be specified as a String, which will be used both</div><div class='del'>-    # as the value of the VALUE attribute and as the label</div><div class='del'>-    # for that checkbox.  A single-element array has the</div><div class='del'>-    # same effect.</div><div class='del'>-    #</div><div class='del'>-    # Each value can also be specified as a three-element array.</div><div class='del'>-    # The first element is the VALUE attribute; the second is the</div><div class='del'>-    # label; and the third is a boolean specifying whether this</div><div class='del'>-    # checkbox is CHECKED.</div><div class='del'>-    #</div><div class='del'>-    # Each value can also be specified as a two-element</div><div class='del'>-    # array, by omitting either the value element (defaults</div><div class='del'>-    # to the same as the label), or the boolean checked element</div><div class='del'>-    # (defaults to false).</div><div class='del'>-    #</div><div class='del'>-    #   checkbox_group("name", "foo", "bar", "baz")</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" NAME="name" VALUE="foo"&gt;foo</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" NAME="name" VALUE="bar"&gt;bar</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" NAME="name" VALUE="baz"&gt;baz</div><div class='del'>-    # </div><div class='del'>-    #   checkbox_group("name", ["foo"], ["bar", true], "baz")</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" NAME="name" VALUE="foo"&gt;foo</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" CHECKED NAME="name" VALUE="bar"&gt;bar</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" NAME="name" VALUE="baz"&gt;baz</div><div class='del'>-    # </div><div class='del'>-    #   checkbox_group("name", ["1", "Foo"], ["2", "Bar", true], "Baz")</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" NAME="name" VALUE="1"&gt;Foo</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" CHECKED NAME="name" VALUE="2"&gt;Bar</div><div class='del'>-    #     # &lt;INPUT TYPE="checkbox" NAME="name" VALUE="Baz"&gt;Baz</div><div class='del'>-    # </div><div class='del'>-    #   checkbox_group("NAME" =&gt; "name",</div><div class='del'>-    #                    "VALUES" =&gt; ["foo", "bar", "baz"])</div><div class='del'>-    # </div><div class='del'>-    #   checkbox_group("NAME" =&gt; "name",</div><div class='del'>-    #                    "VALUES" =&gt; [["foo"], ["bar", true], "baz"])</div><div class='del'>-    # </div><div class='del'>-    #   checkbox_group("NAME" =&gt; "name",</div><div class='del'>-    #                    "VALUES" =&gt; [["1", "Foo"], ["2", "Bar", true], "Baz"])</div><div class='del'>-    def checkbox_group(name = "", *values)</div><div class='del'>-      if name.kind_of?(Hash)</div><div class='del'>-        values = name["VALUES"]</div><div class='del'>-        name = name["NAME"]</div><div class='del'>-      end</div><div class='del'>-      values.collect{|value|</div><div class='del'>-        if value.kind_of?(String)</div><div class='del'>-          checkbox(name, value) + value</div><div class='del'>-        else</div><div class='del'>-          if value[value.size - 1] == true</div><div class='del'>-            checkbox(name, value[0], true) +</div><div class='del'>-            value[value.size - 2]</div><div class='del'>-          else</div><div class='del'>-            checkbox(name, value[0]) +</div><div class='del'>-            value[value.size - 1]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate an File Upload Input element as a string.</div><div class='del'>-    #</div><div class='del'>-    # The attributes of the element can be specified as three arguments,</div><div class='del'>-    # +name+, +size+, and +maxlength+.  +maxlength+ is the maximum length</div><div class='del'>-    # of the file's _name_, not of the file's _contents_.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    # See #multipart_form() for forms that include file uploads.</div><div class='del'>-    #</div><div class='del'>-    #   file_field("name")</div><div class='del'>-    #     # &lt;INPUT TYPE="file" NAME="name" SIZE="20"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   file_field("name", 40)</div><div class='del'>-    #     # &lt;INPUT TYPE="file" NAME="name" SIZE="40"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   file_field("name", 40, 100)</div><div class='del'>-    #     # &lt;INPUT TYPE="file" NAME="name" SIZE="40" MAXLENGTH="100"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   file_field("NAME" =&gt; "name", "SIZE" =&gt; 40)</div><div class='del'>-    #     # &lt;INPUT TYPE="file" NAME="name" SIZE="40"&gt;</div><div class='del'>-    def file_field(name = "", size = 20, maxlength = nil)</div><div class='del'>-      attributes = if name.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "file", "NAME" =&gt; name,</div><div class='del'>-                       "SIZE" =&gt; size.to_s }</div><div class='del'>-                   else</div><div class='del'>-                     name["TYPE"] = "file"</div><div class='del'>-                     name</div><div class='del'>-                   end</div><div class='del'>-      attributes["MAXLENGTH"] = maxlength.to_s if maxlength</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate a Form element as a string.</div><div class='del'>-    #</div><div class='del'>-    # +method+ should be either "get" or "post", and defaults to the latter.</div><div class='del'>-    # +action+ defaults to the current CGI script name.  +enctype+</div><div class='del'>-    # defaults to "application/x-www-form-urlencoded".  </div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    # See also #multipart_form() for forms that include file uploads.</div><div class='del'>-    #</div><div class='del'>-    #   form{ "string" }</div><div class='del'>-    #     # &lt;FORM METHOD="post" ENCTYPE="application/x-www-form-urlencoded"&gt;string&lt;/FORM&gt;</div><div class='del'>-    # </div><div class='del'>-    #   form("get") { "string" }</div><div class='del'>-    #     # &lt;FORM METHOD="get" ENCTYPE="application/x-www-form-urlencoded"&gt;string&lt;/FORM&gt;</div><div class='del'>-    # </div><div class='del'>-    #   form("get", "url") { "string" }</div><div class='del'>-    #     # &lt;FORM METHOD="get" ACTION="url" ENCTYPE="application/x-www-form-urlencoded"&gt;string&lt;/FORM&gt;</div><div class='del'>-    # </div><div class='del'>-    #   form("METHOD" =&gt; "post", "ENCTYPE" =&gt; "enctype") { "string" }</div><div class='del'>-    #     # &lt;FORM METHOD="post" ENCTYPE="enctype"&gt;string&lt;/FORM&gt;</div><div class='del'>-    def form(method = "post", action = script_name, enctype = "application/x-www-form-urlencoded")</div><div class='del'>-      attributes = if method.kind_of?(String)</div><div class='del'>-                     { "METHOD" =&gt; method, "ACTION" =&gt; action,</div><div class='del'>-                       "ENCTYPE" =&gt; enctype } </div><div class='del'>-                   else</div><div class='del'>-                     unless method.has_key?("METHOD")</div><div class='del'>-                       method["METHOD"] = "post"</div><div class='del'>-                     end</div><div class='del'>-                     unless method.has_key?("ENCTYPE")</div><div class='del'>-                       method["ENCTYPE"] = enctype</div><div class='del'>-                     end</div><div class='del'>-                     method</div><div class='del'>-                   end</div><div class='del'>-      if block_given?</div><div class='del'>-        body = yield</div><div class='del'>-      else</div><div class='del'>-        body = ""</div><div class='del'>-      end</div><div class='del'>-      if @output_hidden</div><div class='del'>-        body += @output_hidden.collect{|k,v|</div><div class='del'>-          "&lt;INPUT TYPE=\"HIDDEN\" NAME=\"#{k}\" VALUE=\"#{v}\"&gt;"</div><div class='del'>-        }.to_s</div><div class='del'>-      end</div><div class='del'>-      super(attributes){body}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a Hidden Input element as a string.</div><div class='del'>-    #</div><div class='del'>-    # The attributes of the element can be specified as two arguments,</div><div class='del'>-    # +name+ and +value+.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   hidden("name")</div><div class='del'>-    #     # &lt;INPUT TYPE="hidden" NAME="name"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   hidden("name", "value")</div><div class='del'>-    #     # &lt;INPUT TYPE="hidden" NAME="name" VALUE="value"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   hidden("NAME" =&gt; "name", "VALUE" =&gt; "reset", "ID" =&gt; "foo")</div><div class='del'>-    #     # &lt;INPUT TYPE="hidden" NAME="name" VALUE="value" ID="foo"&gt;</div><div class='del'>-    def hidden(name = "", value = nil)</div><div class='del'>-      attributes = if name.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "hidden", "NAME" =&gt; name, "VALUE" =&gt; value }</div><div class='del'>-                   else</div><div class='del'>-                     name["TYPE"] = "hidden"</div><div class='del'>-                     name</div><div class='del'>-                   end</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a top-level HTML element as a string.</div><div class='del'>-    #</div><div class='del'>-    # The attributes of the element are specified as a hash.  The</div><div class='del'>-    # pseudo-attribute "PRETTY" can be used to specify that the generated</div><div class='del'>-    # HTML string should be indented.  "PRETTY" can also be specified as</div><div class='del'>-    # a string as the sole argument to this method.  The pseudo-attribute</div><div class='del'>-    # "DOCTYPE", if given, is used as the leading DOCTYPE SGML tag; it</div><div class='del'>-    # should include the entire text of this tag, including angle brackets.</div><div class='del'>-    #</div><div class='del'>-    # The body of the html element is supplied as a block.</div><div class='del'>-    # </div><div class='del'>-    #   html{ "string" }</div><div class='del'>-    #     # &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;&lt;HTML&gt;string&lt;/HTML&gt;</div><div class='del'>-    # </div><div class='del'>-    #   html("LANG" =&gt; "ja") { "string" }</div><div class='del'>-    #     # &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;&lt;HTML LANG="ja"&gt;string&lt;/HTML&gt;</div><div class='del'>-    # </div><div class='del'>-    #   html("DOCTYPE" =&gt; false) { "string" }</div><div class='del'>-    #     # &lt;HTML&gt;string&lt;/HTML&gt;</div><div class='del'>-    # </div><div class='del'>-    #   html("DOCTYPE" =&gt; '&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"&gt;') { "string" }</div><div class='del'>-    #     # &lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"&gt;&lt;HTML&gt;string&lt;/HTML&gt;</div><div class='del'>-    # </div><div class='del'>-    #   html("PRETTY" =&gt; "  ") { "&lt;BODY&gt;&lt;/BODY&gt;" }</div><div class='del'>-    #     # &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;</div><div class='del'>-    #     # &lt;HTML&gt;</div><div class='del'>-    #     #   &lt;BODY&gt;</div><div class='del'>-    #     #   &lt;/BODY&gt;</div><div class='del'>-    #     # &lt;/HTML&gt;</div><div class='del'>-    # </div><div class='del'>-    #   html("PRETTY" =&gt; "\t") { "&lt;BODY&gt;&lt;/BODY&gt;" }</div><div class='del'>-    #     # &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;</div><div class='del'>-    #     # &lt;HTML&gt;</div><div class='del'>-    #     #         &lt;BODY&gt;</div><div class='del'>-    #     #         &lt;/BODY&gt;</div><div class='del'>-    #     # &lt;/HTML&gt;</div><div class='del'>-    # </div><div class='del'>-    #   html("PRETTY") { "&lt;BODY&gt;&lt;/BODY&gt;" }</div><div class='del'>-    #     # = html("PRETTY" =&gt; "  ") { "&lt;BODY&gt;&lt;/BODY&gt;" }</div><div class='del'>-    # </div><div class='del'>-    #   html(if $VERBOSE then "PRETTY" end) { "HTML string" }</div><div class='del'>-    #</div><div class='del'>-    def html(attributes = {}) # :yield:</div><div class='del'>-      if nil == attributes</div><div class='del'>-        attributes = {}</div><div class='del'>-      elsif "PRETTY" == attributes</div><div class='del'>-        attributes = { "PRETTY" =&gt; true }</div><div class='del'>-      end</div><div class='del'>-      pretty = attributes.delete("PRETTY")</div><div class='del'>-      pretty = "  " if true == pretty</div><div class='del'>-      buf = ""</div><div class='del'>-</div><div class='del'>-      if attributes.has_key?("DOCTYPE")</div><div class='del'>-        if attributes["DOCTYPE"]</div><div class='del'>-          buf += attributes.delete("DOCTYPE")</div><div class='del'>-        else</div><div class='del'>-          attributes.delete("DOCTYPE")</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        buf += doctype</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if block_given?</div><div class='del'>-        buf += super(attributes){ yield }</div><div class='del'>-      else</div><div class='del'>-        buf += super(attributes)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if pretty</div><div class='del'>-        CGI::pretty(buf, pretty)</div><div class='del'>-      else</div><div class='del'>-        buf</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate an Image Button Input element as a string.</div><div class='del'>-    #</div><div class='del'>-    # +src+ is the URL of the image to use for the button.  +name+ </div><div class='del'>-    # is the input name.  +alt+ is the alternative text for the image.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    # </div><div class='del'>-    #   image_button("url")</div><div class='del'>-    #     # &lt;INPUT TYPE="image" SRC="url"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   image_button("url", "name", "string")</div><div class='del'>-    #     # &lt;INPUT TYPE="image" SRC="url" NAME="name" ALT="string"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   image_button("SRC" =&gt; "url", "ATL" =&gt; "strng")</div><div class='del'>-    #     # &lt;INPUT TYPE="image" SRC="url" ALT="string"&gt;</div><div class='del'>-    def image_button(src = "", name = nil, alt = nil)</div><div class='del'>-      attributes = if src.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "image", "SRC" =&gt; src, "NAME" =&gt; name,</div><div class='del'>-                       "ALT" =&gt; alt }</div><div class='del'>-                   else</div><div class='del'>-                     src["TYPE"] = "image"</div><div class='del'>-                     src["SRC"] ||= ""</div><div class='del'>-                     src</div><div class='del'>-                   end</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate an Image element as a string.</div><div class='del'>-    #</div><div class='del'>-    # +src+ is the URL of the image.  +alt+ is the alternative text for</div><div class='del'>-    # the image.  +width+ is the width of the image, and +height+ is</div><div class='del'>-    # its height.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   img("src", "alt", 100, 50)</div><div class='del'>-    #     # &lt;IMG SRC="src" ALT="alt" WIDTH="100" HEIGHT="50"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   img("SRC" =&gt; "src", "ALT" =&gt; "alt", "WIDTH" =&gt; 100, "HEIGHT" =&gt; 50)</div><div class='del'>-    #     # &lt;IMG SRC="src" ALT="alt" WIDTH="100" HEIGHT="50"&gt;</div><div class='del'>-    def img(src = "", alt = "", width = nil, height = nil)</div><div class='del'>-      attributes = if src.kind_of?(String)</div><div class='del'>-                     { "SRC" =&gt; src, "ALT" =&gt; alt }</div><div class='del'>-                   else</div><div class='del'>-                     src</div><div class='del'>-                   end</div><div class='del'>-      attributes["WIDTH"] = width.to_s if width</div><div class='del'>-      attributes["HEIGHT"] = height.to_s if height</div><div class='del'>-      super(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate a Form element with multipart encoding as a String.</div><div class='del'>-    #</div><div class='del'>-    # Multipart encoding is used for forms that include file uploads.</div><div class='del'>-    #</div><div class='del'>-    # +action+ is the action to perform.  +enctype+ is the encoding</div><div class='del'>-    # type, which defaults to "multipart/form-data".</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   multipart_form{ "string" }</div><div class='del'>-    #     # &lt;FORM METHOD="post" ENCTYPE="multipart/form-data"&gt;string&lt;/FORM&gt;</div><div class='del'>-    # </div><div class='del'>-    #   multipart_form("url") { "string" }</div><div class='del'>-    #     # &lt;FORM METHOD="post" ACTION="url" ENCTYPE="multipart/form-data"&gt;string&lt;/FORM&gt;</div><div class='del'>-    def multipart_form(action = nil, enctype = "multipart/form-data")</div><div class='del'>-      attributes = if action == nil</div><div class='del'>-                     { "METHOD" =&gt; "post", "ENCTYPE" =&gt; enctype } </div><div class='del'>-                   elsif action.kind_of?(String)</div><div class='del'>-                     { "METHOD" =&gt; "post", "ACTION" =&gt; action,</div><div class='del'>-                       "ENCTYPE" =&gt; enctype } </div><div class='del'>-                   else</div><div class='del'>-                     unless action.has_key?("METHOD")</div><div class='del'>-                       action["METHOD"] = "post"</div><div class='del'>-                     end</div><div class='del'>-                     unless action.has_key?("ENCTYPE")</div><div class='del'>-                       action["ENCTYPE"] = enctype</div><div class='del'>-                     end</div><div class='del'>-                     action</div><div class='del'>-                   end</div><div class='del'>-      if block_given?</div><div class='del'>-        form(attributes){ yield }</div><div class='del'>-      else</div><div class='del'>-        form(attributes)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate a Password Input element as a string.</div><div class='del'>-    #</div><div class='del'>-    # +name+ is the name of the input field.  +value+ is its default</div><div class='del'>-    # value.  +size+ is the size of the input field display.  +maxlength+</div><div class='del'>-    # is the maximum length of the inputted password.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   password_field("name")</div><div class='del'>-    #     # &lt;INPUT TYPE="password" NAME="name" SIZE="40"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   password_field("name", "value")</div><div class='del'>-    #     # &lt;INPUT TYPE="password" NAME="name" VALUE="value" SIZE="40"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   password_field("password", "value", 80, 200)</div><div class='del'>-    #     # &lt;INPUT TYPE="password" NAME="name" VALUE="value" SIZE="80" MAXLENGTH="200"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   password_field("NAME" =&gt; "name", "VALUE" =&gt; "value")</div><div class='del'>-    #     # &lt;INPUT TYPE="password" NAME="name" VALUE="value"&gt;</div><div class='del'>-    def password_field(name = "", value = nil, size = 40, maxlength = nil)</div><div class='del'>-      attributes = if name.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "password", "NAME" =&gt; name,</div><div class='del'>-                       "VALUE" =&gt; value, "SIZE" =&gt; size.to_s }</div><div class='del'>-                   else</div><div class='del'>-                     name["TYPE"] = "password"</div><div class='del'>-                     name</div><div class='del'>-                   end</div><div class='del'>-      attributes["MAXLENGTH"] = maxlength.to_s if maxlength</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a Select element as a string.</div><div class='del'>-    #</div><div class='del'>-    # +name+ is the name of the element.  The +values+ are the options that</div><div class='del'>-    # can be selected from the Select menu.  Each value can be a String or</div><div class='del'>-    # a one, two, or three-element Array.  If a String or a one-element</div><div class='del'>-    # Array, this is both the value of that option and the text displayed for</div><div class='del'>-    # it.  If a three-element Array, the elements are the option value, displayed</div><div class='del'>-    # text, and a boolean value specifying whether this option starts as selected.</div><div class='del'>-    # The two-element version omits either the option value (defaults to the same</div><div class='del'>-    # as the display text) or the boolean selected specifier (defaults to false).</div><div class='del'>-    #</div><div class='del'>-    # The attributes and options can also be specified as a hash.  In this</div><div class='del'>-    # case, options are specified as an array of values as described above,</div><div class='del'>-    # with the hash key of "VALUES".</div><div class='del'>-    #</div><div class='del'>-    #   popup_menu("name", "foo", "bar", "baz")</div><div class='del'>-    #     # &lt;SELECT NAME="name"&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="foo"&gt;foo&lt;/OPTION&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="bar"&gt;bar&lt;/OPTION&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="baz"&gt;baz&lt;/OPTION&gt;</div><div class='del'>-    #     # &lt;/SELECT&gt;</div><div class='del'>-    # </div><div class='del'>-    #   popup_menu("name", ["foo"], ["bar", true], "baz")</div><div class='del'>-    #     # &lt;SELECT NAME="name"&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="foo"&gt;foo&lt;/OPTION&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="bar" SELECTED&gt;bar&lt;/OPTION&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="baz"&gt;baz&lt;/OPTION&gt;</div><div class='del'>-    #     # &lt;/SELECT&gt;</div><div class='del'>-    # </div><div class='del'>-    #   popup_menu("name", ["1", "Foo"], ["2", "Bar", true], "Baz")</div><div class='del'>-    #     # &lt;SELECT NAME="name"&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="1"&gt;Foo&lt;/OPTION&gt;</div><div class='del'>-    #     #   &lt;OPTION SELECTED VALUE="2"&gt;Bar&lt;/OPTION&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="Baz"&gt;Baz&lt;/OPTION&gt;</div><div class='del'>-    #     # &lt;/SELECT&gt;</div><div class='del'>-    # </div><div class='del'>-    #   popup_menu("NAME" =&gt; "name", "SIZE" =&gt; 2, "MULTIPLE" =&gt; true,</div><div class='del'>-    #               "VALUES" =&gt; [["1", "Foo"], ["2", "Bar", true], "Baz"])</div><div class='del'>-    #     # &lt;SELECT NAME="name" MULTIPLE SIZE="2"&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="1"&gt;Foo&lt;/OPTION&gt;</div><div class='del'>-    #     #   &lt;OPTION SELECTED VALUE="2"&gt;Bar&lt;/OPTION&gt;</div><div class='del'>-    #     #   &lt;OPTION VALUE="Baz"&gt;Baz&lt;/OPTION&gt;</div><div class='del'>-    #     # &lt;/SELECT&gt;</div><div class='del'>-    def popup_menu(name = "", *values)</div><div class='del'>-</div><div class='del'>-      if name.kind_of?(Hash)</div><div class='del'>-        values   = name["VALUES"]</div><div class='del'>-        size     = name["SIZE"].to_s if name["SIZE"]</div><div class='del'>-        multiple = name["MULTIPLE"]</div><div class='del'>-        name     = name["NAME"]</div><div class='del'>-      else</div><div class='del'>-        size = nil</div><div class='del'>-        multiple = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      select({ "NAME" =&gt; name, "SIZE" =&gt; size,</div><div class='del'>-               "MULTIPLE" =&gt; multiple }){</div><div class='del'>-        values.collect{|value|</div><div class='del'>-          if value.kind_of?(String)</div><div class='del'>-            option({ "VALUE" =&gt; value }){ value }</div><div class='del'>-          else</div><div class='del'>-            if value[value.size - 1] == true</div><div class='del'>-              option({ "VALUE" =&gt; value[0], "SELECTED" =&gt; true }){</div><div class='del'>-                value[value.size - 2]</div><div class='del'>-              }</div><div class='del'>-            else</div><div class='del'>-              option({ "VALUE" =&gt; value[0] }){</div><div class='del'>-                value[value.size - 1]</div><div class='del'>-              }</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }.to_s</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generates a radio-button Input element.</div><div class='del'>-    #</div><div class='del'>-    # +name+ is the name of the input field.  +value+ is the value of</div><div class='del'>-    # the field if checked.  +checked+ specifies whether the field</div><div class='del'>-    # starts off checked.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   radio_button("name", "value")</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="value"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   radio_button("name", "value", true)</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="value" CHECKED&gt;</div><div class='del'>-    # </div><div class='del'>-    #   radio_button("NAME" =&gt; "name", "VALUE" =&gt; "value", "ID" =&gt; "foo")</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="value" ID="foo"&gt;</div><div class='del'>-    def radio_button(name = "", value = nil, checked = nil)</div><div class='del'>-      attributes = if name.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "radio", "NAME" =&gt; name,</div><div class='del'>-                       "VALUE" =&gt; value, "CHECKED" =&gt; checked }</div><div class='del'>-                   else</div><div class='del'>-                     name["TYPE"] = "radio"</div><div class='del'>-                     name</div><div class='del'>-                   end</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a sequence of radio button Input elements, as a String.</div><div class='del'>-    #</div><div class='del'>-    # This works the same as #checkbox_group().  However, it is not valid</div><div class='del'>-    # to have more than one radiobutton in a group checked.</div><div class='del'>-    # </div><div class='del'>-    #   radio_group("name", "foo", "bar", "baz")</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="foo"&gt;foo</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="bar"&gt;bar</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="baz"&gt;baz</div><div class='del'>-    # </div><div class='del'>-    #   radio_group("name", ["foo"], ["bar", true], "baz")</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="foo"&gt;foo</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" CHECKED NAME="name" VALUE="bar"&gt;bar</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="baz"&gt;baz</div><div class='del'>-    # </div><div class='del'>-    #   radio_group("name", ["1", "Foo"], ["2", "Bar", true], "Baz")</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="1"&gt;Foo</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" CHECKED NAME="name" VALUE="2"&gt;Bar</div><div class='del'>-    #     # &lt;INPUT TYPE="radio" NAME="name" VALUE="Baz"&gt;Baz</div><div class='del'>-    # </div><div class='del'>-    #   radio_group("NAME" =&gt; "name",</div><div class='del'>-    #                 "VALUES" =&gt; ["foo", "bar", "baz"])</div><div class='del'>-    # </div><div class='del'>-    #   radio_group("NAME" =&gt; "name",</div><div class='del'>-    #                 "VALUES" =&gt; [["foo"], ["bar", true], "baz"])</div><div class='del'>-    # </div><div class='del'>-    #   radio_group("NAME" =&gt; "name",</div><div class='del'>-    #                 "VALUES" =&gt; [["1", "Foo"], ["2", "Bar", true], "Baz"])</div><div class='del'>-    def radio_group(name = "", *values)</div><div class='del'>-      if name.kind_of?(Hash)</div><div class='del'>-        values = name["VALUES"]</div><div class='del'>-        name = name["NAME"]</div><div class='del'>-      end</div><div class='del'>-      values.collect{|value|</div><div class='del'>-        if value.kind_of?(String)</div><div class='del'>-          radio_button(name, value) + value</div><div class='del'>-        else</div><div class='del'>-          if value[value.size - 1] == true</div><div class='del'>-            radio_button(name, value[0], true) +</div><div class='del'>-            value[value.size - 2]</div><div class='del'>-          else</div><div class='del'>-            radio_button(name, value[0]) +</div><div class='del'>-            value[value.size - 1]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a reset button Input element, as a String.</div><div class='del'>-    #</div><div class='del'>-    # This resets the values on a form to their initial values.  +value+</div><div class='del'>-    # is the text displayed on the button. +name+ is the name of this button.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   reset</div><div class='del'>-    #     # &lt;INPUT TYPE="reset"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   reset("reset")</div><div class='del'>-    #     # &lt;INPUT TYPE="reset" VALUE="reset"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   reset("VALUE" =&gt; "reset", "ID" =&gt; "foo")</div><div class='del'>-    #     # &lt;INPUT TYPE="reset" VALUE="reset" ID="foo"&gt;</div><div class='del'>-    def reset(value = nil, name = nil)</div><div class='del'>-      attributes = if (not value) or value.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "reset", "VALUE" =&gt; value, "NAME" =&gt; name }</div><div class='del'>-                   else</div><div class='del'>-                     value["TYPE"] = "reset"</div><div class='del'>-                     value</div><div class='del'>-                   end</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias scrolling_list popup_menu</div><div class='del'>-</div><div class='del'>-    # Generate a submit button Input element, as a String.</div><div class='del'>-    #</div><div class='del'>-    # +value+ is the text to display on the button.  +name+ is the name</div><div class='del'>-    # of the input.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   submit</div><div class='del'>-    #     # &lt;INPUT TYPE="submit"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   submit("ok")</div><div class='del'>-    #     # &lt;INPUT TYPE="submit" VALUE="ok"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   submit("ok", "button1")</div><div class='del'>-    #     # &lt;INPUT TYPE="submit" VALUE="ok" NAME="button1"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   submit("VALUE" =&gt; "ok", "NAME" =&gt; "button1", "ID" =&gt; "foo")</div><div class='del'>-    #     # &lt;INPUT TYPE="submit" VALUE="ok" NAME="button1" ID="foo"&gt;</div><div class='del'>-    def submit(value = nil, name = nil)</div><div class='del'>-      attributes = if (not value) or value.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "submit", "VALUE" =&gt; value, "NAME" =&gt; name }</div><div class='del'>-                   else</div><div class='del'>-                     value["TYPE"] = "submit"</div><div class='del'>-                     value</div><div class='del'>-                   end</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a text field Input element, as a String.</div><div class='del'>-    #</div><div class='del'>-    # +name+ is the name of the input field.  +value+ is its initial</div><div class='del'>-    # value.  +size+ is the size of the input area.  +maxlength+</div><div class='del'>-    # is the maximum length of input accepted.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    #   text_field("name")</div><div class='del'>-    #     # &lt;INPUT TYPE="text" NAME="name" SIZE="40"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   text_field("name", "value")</div><div class='del'>-    #     # &lt;INPUT TYPE="text" NAME="name" VALUE="value" SIZE="40"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   text_field("name", "value", 80)</div><div class='del'>-    #     # &lt;INPUT TYPE="text" NAME="name" VALUE="value" SIZE="80"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   text_field("name", "value", 80, 200)</div><div class='del'>-    #     # &lt;INPUT TYPE="text" NAME="name" VALUE="value" SIZE="80" MAXLENGTH="200"&gt;</div><div class='del'>-    # </div><div class='del'>-    #   text_field("NAME" =&gt; "name", "VALUE" =&gt; "value")</div><div class='del'>-    #     # &lt;INPUT TYPE="text" NAME="name" VALUE="value"&gt;</div><div class='del'>-    def text_field(name = "", value = nil, size = 40, maxlength = nil)</div><div class='del'>-      attributes = if name.kind_of?(String)</div><div class='del'>-                     { "TYPE" =&gt; "text", "NAME" =&gt; name, "VALUE" =&gt; value,</div><div class='del'>-                       "SIZE" =&gt; size.to_s }</div><div class='del'>-                   else</div><div class='del'>-                     name["TYPE"] = "text"</div><div class='del'>-                     name</div><div class='del'>-                   end</div><div class='del'>-      attributes["MAXLENGTH"] = maxlength.to_s if maxlength</div><div class='del'>-      input(attributes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate a TextArea element, as a String.</div><div class='del'>-    #</div><div class='del'>-    # +name+ is the name of the textarea.  +cols+ is the number of</div><div class='del'>-    # columns and +rows+ is the number of rows in the display.</div><div class='del'>-    #</div><div class='del'>-    # Alternatively, the attributes can be specified as a hash.</div><div class='del'>-    #</div><div class='del'>-    # The body is provided by the passed-in no-argument block</div><div class='del'>-    #</div><div class='del'>-    #   textarea("name")</div><div class='del'>-    #      # = textarea("NAME" =&gt; "name", "COLS" =&gt; 70, "ROWS" =&gt; 10)</div><div class='del'>-    #</div><div class='del'>-    #   textarea("name", 40, 5)</div><div class='del'>-    #      # = textarea("NAME" =&gt; "name", "COLS" =&gt; 40, "ROWS" =&gt; 5)</div><div class='del'>-    def textarea(name = "", cols = 70, rows = 10)  # :yield:</div><div class='del'>-      attributes = if name.kind_of?(String)</div><div class='del'>-                     { "NAME" =&gt; name, "COLS" =&gt; cols.to_s,</div><div class='del'>-                       "ROWS" =&gt; rows.to_s }</div><div class='del'>-                   else</div><div class='del'>-                     name</div><div class='del'>-                   end</div><div class='del'>-      if block_given?</div><div class='del'>-        super(attributes){ yield }</div><div class='del'>-      else</div><div class='del'>-        super(attributes)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end # HtmlExtension</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Mixin module for HTML version 3 generation methods.</div><div class='del'>-  module Html3 # :nodoc:</div><div class='del'>-</div><div class='del'>-    # The DOCTYPE declaration for this version of HTML</div><div class='del'>-    def doctype</div><div class='del'>-      %|&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"&gt;|</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Initialise the HTML generation methods for this version.</div><div class='del'>-    def element_init</div><div class='del'>-      extend TagMaker</div><div class='del'>-      methods = ""</div><div class='del'>-      # - -</div><div class='del'>-      for element in %w[ A TT I B U STRIKE BIG SMALL SUB SUP EM STRONG</div><div class='del'>-          DFN CODE SAMP KBD VAR CITE FONT ADDRESS DIV center MAP</div><div class='del'>-          APPLET PRE XMP LISTING DL OL UL DIR MENU SELECT table TITLE</div><div class='del'>-          STYLE SCRIPT H1 H2 H3 H4 H5 H6 TEXTAREA FORM BLOCKQUOTE</div><div class='del'>-          CAPTION ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nn_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # - O EMPTY</div><div class='del'>-      for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT</div><div class='del'>-          ISINDEX META ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nOE_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # O O or - O</div><div class='del'>-      for element in %w[ HTML HEAD BODY P PLAINTEXT DT DD LI OPTION tr</div><div class='del'>-          th td ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nO_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-      eval(methods)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end # Html3</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Mixin module for HTML version 4 generation methods.</div><div class='del'>-  module Html4 # :nodoc:</div><div class='del'>-</div><div class='del'>-    # The DOCTYPE declaration for this version of HTML</div><div class='del'>-    def doctype</div><div class='del'>-      %|&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;|</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Initialise the HTML generation methods for this version.</div><div class='del'>-    def element_init</div><div class='del'>-      extend TagMaker</div><div class='del'>-      methods = ""</div><div class='del'>-      # - -</div><div class='del'>-      for element in %w[ TT I B BIG SMALL EM STRONG DFN CODE SAMP KBD</div><div class='del'>-        VAR CITE ABBR ACRONYM SUB SUP SPAN BDO ADDRESS DIV MAP OBJECT</div><div class='del'>-        H1 H2 H3 H4 H5 H6 PRE Q INS DEL DL OL UL LABEL SELECT OPTGROUP</div><div class='del'>-        FIELDSET LEGEND BUTTON TABLE TITLE STYLE SCRIPT NOSCRIPT</div><div class='del'>-        TEXTAREA FORM A BLOCKQUOTE CAPTION ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nn_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # - O EMPTY</div><div class='del'>-      for element in %w[ IMG BASE BR AREA LINK PARAM HR INPUT COL META ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nOE_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # O O or - O</div><div class='del'>-      for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY</div><div class='del'>-          COLGROUP TR TH TD HEAD]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nO_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-      eval(methods)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end # Html4</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Mixin module for HTML version 4 transitional generation methods.</div><div class='del'>-  module Html4Tr # :nodoc:</div><div class='del'>-</div><div class='del'>-    # The DOCTYPE declaration for this version of HTML</div><div class='del'>-    def doctype</div><div class='del'>-      %|&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;|</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Initialise the HTML generation methods for this version.</div><div class='del'>-    def element_init</div><div class='del'>-      extend TagMaker</div><div class='del'>-      methods = ""</div><div class='del'>-      # - -</div><div class='del'>-      for element in %w[ TT I B U S STRIKE BIG SMALL EM STRONG DFN</div><div class='del'>-          CODE SAMP KBD VAR CITE ABBR ACRONYM FONT SUB SUP SPAN BDO</div><div class='del'>-          ADDRESS DIV CENTER MAP OBJECT APPLET H1 H2 H3 H4 H5 H6 PRE Q</div><div class='del'>-          INS DEL DL OL UL DIR MENU LABEL SELECT OPTGROUP FIELDSET</div><div class='del'>-          LEGEND BUTTON TABLE IFRAME NOFRAMES TITLE STYLE SCRIPT</div><div class='del'>-          NOSCRIPT TEXTAREA FORM A BLOCKQUOTE CAPTION ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nn_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # - O EMPTY</div><div class='del'>-      for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT</div><div class='del'>-          COL ISINDEX META ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nOE_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # O O or - O</div><div class='del'>-      for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY</div><div class='del'>-          COLGROUP TR TH TD HEAD ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nO_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-      eval(methods)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end # Html4Tr</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Mixin module for generating HTML version 4 with framesets.</div><div class='del'>-  module Html4Fr # :nodoc:</div><div class='del'>-</div><div class='del'>-    # The DOCTYPE declaration for this version of HTML</div><div class='del'>-    def doctype</div><div class='del'>-      %|&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"&gt;|</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Initialise the HTML generation methods for this version.</div><div class='del'>-    def element_init</div><div class='del'>-      methods = ""</div><div class='del'>-      # - -</div><div class='del'>-      for element in %w[ FRAMESET ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nn_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # - O EMPTY</div><div class='del'>-      for element in %w[ FRAME ]</div><div class='del'>-        methods += &lt;&lt;-BEGIN + nOE_element_def(element) + &lt;&lt;-END</div><div class='del'>-          def #{element.downcase}(attributes = {})</div><div class='del'>-        BEGIN</div><div class='del'>-          end</div><div class='del'>-        END</div><div class='del'>-      end</div><div class='del'>-      eval(methods)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end # Html4Fr</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Creates a new CGI instance.</div><div class='del'>-  #</div><div class='del'>-  # +type+ specifies which version of HTML to load the HTML generation</div><div class='del'>-  # methods for.  The following versions of HTML are supported:</div><div class='del'>-  #</div><div class='del'>-  # html3:: HTML 3.x</div><div class='del'>-  # html4:: HTML 4.0</div><div class='del'>-  # html4Tr:: HTML 4.0 Transitional</div><div class='del'>-  # html4Fr:: HTML 4.0 with Framesets</div><div class='del'>-  #</div><div class='del'>-  # If not specified, no HTML generation methods will be loaded.</div><div class='del'>-  #</div><div class='del'>-  # If the CGI object is not created in a standard CGI call environment</div><div class='del'>-  # (that is, it can't locate REQUEST_METHOD in its environment), then</div><div class='del'>-  # it will run in "offline" mode.  In this mode, it reads its parameters</div><div class='del'>-  # from the command line or (failing that) from standard input.  Otherwise,</div><div class='del'>-  # cookies and other parameters are parsed automatically from the standard</div><div class='del'>-  # CGI locations, which varies according to the REQUEST_METHOD.</div><div class='del'>-  def initialize(type = "query")</div><div class='del'>-    if defined?(MOD_RUBY) &amp;&amp; !ENV.key?("GATEWAY_INTERFACE")</div><div class='del'>-      Apache.request.setup_cgi_env</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    extend QueryExtension</div><div class='del'>-    @multipart = false</div><div class='del'>-    if defined?(CGI_PARAMS)</div><div class='del'>-      warn "do not use CGI_PARAMS and CGI_COOKIES"</div><div class='del'>-      @params = CGI_PARAMS.dup</div><div class='del'>-      @cookies = CGI_COOKIES.dup</div><div class='del'>-    else</div><div class='del'>-      initialize_query()  # set @params, @cookies</div><div class='del'>-    end</div><div class='del'>-    @output_cookies = nil</div><div class='del'>-    @output_hidden = nil</div><div class='del'>-</div><div class='del'>-    case type</div><div class='del'>-    when "html3"</div><div class='del'>-      extend Html3</div><div class='del'>-      element_init()</div><div class='del'>-      extend HtmlExtension</div><div class='del'>-    when "html4"</div><div class='del'>-      extend Html4</div><div class='del'>-      element_init()</div><div class='del'>-      extend HtmlExtension</div><div class='del'>-    when "html4Tr"</div><div class='del'>-      extend Html4Tr</div><div class='del'>-      element_init()</div><div class='del'>-      extend HtmlExtension</div><div class='del'>-    when "html4Fr"</div><div class='del'>-      extend Html4Tr</div><div class='del'>-      element_init()</div><div class='del'>-      extend Html4Fr</div><div class='del'>-      element_init()</div><div class='del'>-      extend HtmlExtension</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end   # class CGI</div><div class='head'>diff --git a/lib/cgi/.document b/lib/cgi/.document<br/>deleted file mode 100644<br/>index 107f2f317c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/cgi/.document?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/cgi/.document</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-session.rb</div><div class='del'>-</div><div class='head'>diff --git a/lib/cgi/session.rb b/lib/cgi/session.rb<br/>deleted file mode 100644<br/>index a6e999bc34..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/cgi/session.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/cgi/session.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,498 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# cgi/session.rb - session support for cgi scripts</div><div class='del'>-#</div><div class='del'>-# Copyright (C) 2001  Yukihiro "Matz" Matsumoto</div><div class='del'>-# Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-# Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='del'>-#</div><div class='del'>-# Author: Yukihiro "Matz" Matsumoto</div><div class='del'>-#</div><div class='del'>-# Documentation: William Webber (william@williamwebber.com)</div><div class='del'>-#</div><div class='del'>-# == Overview</div><div class='del'>-#</div><div class='del'>-# This file provides the +CGI::Session+ class, which provides session</div><div class='del'>-# support for CGI scripts.  A session is a sequence of HTTP requests</div><div class='del'>-# and responses linked together and associated with a single client.  </div><div class='del'>-# Information associated with the session is stored</div><div class='del'>-# on the server between requests.  A session id is passed between client</div><div class='del'>-# and server with every request and response, transparently</div><div class='del'>-# to the user.  This adds state information to the otherwise stateless</div><div class='del'>-# HTTP request/response protocol.</div><div class='del'>-#</div><div class='del'>-# See the documentation to the +CGI::Session+ class for more details</div><div class='del'>-# and examples of usage.  See cgi.rb for the +CGI+ class itself.</div><div class='del'>-</div><div class='del'>-require 'cgi'</div><div class='del'>-require 'tmpdir'</div><div class='del'>-</div><div class='del'>-class CGI</div><div class='del'>-</div><div class='del'>-  # Class representing an HTTP session.  See documentation for the file </div><div class='del'>-  # cgi/session.rb for an introduction to HTTP sessions.</div><div class='del'>-  #</div><div class='del'>-  # == Lifecycle</div><div class='del'>-  #</div><div class='del'>-  # A CGI::Session instance is created from a CGI object.  By default,</div><div class='del'>-  # this CGI::Session instance will start a new session if none currently</div><div class='del'>-  # exists, or continue the current session for this client if one does</div><div class='del'>-  # exist.  The +new_session+ option can be used to either always or</div><div class='del'>-  # never create a new session.  See #new() for more details.</div><div class='del'>-  #</div><div class='del'>-  # #delete() deletes a session from session storage.  It</div><div class='del'>-  # does not however remove the session id from the client.  If the client</div><div class='del'>-  # makes another request with the same id, the effect will be to start</div><div class='del'>-  # a new session with the old session's id.</div><div class='del'>-  #</div><div class='del'>-  # == Setting and retrieving session data.</div><div class='del'>-  #</div><div class='del'>-  # The Session class associates data with a session as key-value pairs.</div><div class='del'>-  # This data can be set and retrieved by indexing the Session instance </div><div class='del'>-  # using '[]', much the same as hashes (although other hash methods</div><div class='del'>-  # are not supported).</div><div class='del'>-  #</div><div class='del'>-  # When session processing has been completed for a request, the</div><div class='del'>-  # session should be closed using the close() method.  This will</div><div class='del'>-  # store the session's state to persistent storage.  If you want</div><div class='del'>-  # to store the session's state to persistent storage without</div><div class='del'>-  # finishing session processing for this request, call the update()</div><div class='del'>-  # method.</div><div class='del'>-  #</div><div class='del'>-  # == Storing session state</div><div class='del'>-  #</div><div class='del'>-  # The caller can specify what form of storage to use for the session's </div><div class='del'>-  # data with the +database_manager+ option to CGI::Session::new.  The</div><div class='del'>-  # following storage classes are provided as part of the standard library:</div><div class='del'>-  #</div><div class='del'>-  # CGI::Session::FileStore:: stores data as plain text in a flat file.  Only </div><div class='del'>-  #                           works with String data.  This is the default </div><div class='del'>-  #                           storage type.</div><div class='del'>-  # CGI::Session::MemoryStore:: stores data in an in-memory hash.  The data </div><div class='del'>-  #                             only persists for as long as the current ruby </div><div class='del'>-  #                             interpreter instance does.</div><div class='del'>-  # CGI::Session::PStore:: stores data in Marshalled format.  Provided by</div><div class='del'>-  #                        cgi/session/pstore.rb.  Supports data of any type, </div><div class='del'>-  #                        and provides file-locking and transaction support.</div><div class='del'>-  #</div><div class='del'>-  # Custom storage types can also be created by defining a class with </div><div class='del'>-  # the following methods:</div><div class='del'>-  #</div><div class='del'>-  #    new(session, options)</div><div class='del'>-  #    restore  # returns hash of session data.</div><div class='del'>-  #    update</div><div class='del'>-  #    close</div><div class='del'>-  #    delete</div><div class='del'>-  #</div><div class='del'>-  # Changing storage type mid-session does not work.  Note in particular</div><div class='del'>-  # that by default the FileStore and PStore session data files have the</div><div class='del'>-  # same name.  If your application switches from one to the other without</div><div class='del'>-  # making sure that filenames will be different</div><div class='del'>-  # and clients still have old sessions lying around in cookies, then</div><div class='del'>-  # things will break nastily!</div><div class='del'>-  #</div><div class='del'>-  # == Maintaining the session id.</div><div class='del'>-  #</div><div class='del'>-  # Most session state is maintained on the server.  However, a session</div><div class='del'>-  # id must be passed backwards and forwards between client and server</div><div class='del'>-  # to maintain a reference to this session state.</div><div class='del'>-  #</div><div class='del'>-  # The simplest way to do this is via cookies.  The CGI::Session class</div><div class='del'>-  # provides transparent support for session id communication via cookies</div><div class='del'>-  # if the client has cookies enabled.</div><div class='del'>-  # </div><div class='del'>-  # If the client has cookies disabled, the session id must be included</div><div class='del'>-  # as a parameter of all requests sent by the client to the server.  The</div><div class='del'>-  # CGI::Session class in conjunction with the CGI class will transparently</div><div class='del'>-  # add the session id as a hidden input field to all forms generated</div><div class='del'>-  # using the CGI#form() HTML generation method.  No built-in support is</div><div class='del'>-  # provided for other mechanisms, such as URL re-writing.  The caller is</div><div class='del'>-  # responsible for extracting the session id from the session_id </div><div class='del'>-  # attribute and manually encoding it in URLs and adding it as a hidden</div><div class='del'>-  # input to HTML forms created by other mechanisms.  Also, session expiry</div><div class='del'>-  # is not automatically handled.</div><div class='del'>-  #</div><div class='del'>-  # == Examples of use</div><div class='del'>-  #</div><div class='del'>-  # === Setting the user's name</div><div class='del'>-  #</div><div class='del'>-  #   require 'cgi'</div><div class='del'>-  #   require 'cgi/session'</div><div class='del'>-  #   require 'cgi/session/pstore'     # provides CGI::Session::PStore</div><div class='del'>-  #</div><div class='del'>-  #   cgi = CGI.new("html4")</div><div class='del'>-  #</div><div class='del'>-  #   session = CGI::Session.new(cgi,</div><div class='del'>-  #       'database_manager' =&gt; CGI::Session::PStore,  # use PStore</div><div class='del'>-  #       'session_key' =&gt; '_rb_sess_id',              # custom session key</div><div class='del'>-  #       'session_expires' =&gt; Time.now + 30 * 60,     # 30 minute timeout </div><div class='del'>-  #       'prefix' =&gt; 'pstore_sid_')                   # PStore option</div><div class='del'>-  #   if cgi.has_key?('user_name') and cgi['user_name'] != ''</div><div class='del'>-  #       # coerce to String: cgi[] returns the </div><div class='del'>-  #       # string-like CGI::QueryExtension::Value</div><div class='del'>-  #       session['user_name'] = cgi['user_name'].to_s</div><div class='del'>-  #   elsif !session['user_name']</div><div class='del'>-  #       session['user_name'] = "guest"</div><div class='del'>-  #   end</div><div class='del'>-  #   session.close</div><div class='del'>-  #</div><div class='del'>-  # === Creating a new session safely</div><div class='del'>-  #</div><div class='del'>-  #   require 'cgi'</div><div class='del'>-  #   require 'cgi/session'</div><div class='del'>-  #</div><div class='del'>-  #   cgi = CGI.new("html4")</div><div class='del'>-  #</div><div class='del'>-  #   # We make sure to delete an old session if one exists,</div><div class='del'>-  #   # not just to free resources, but to prevent the session </div><div class='del'>-  #   # from being maliciously hijacked later on.</div><div class='del'>-  #   begin</div><div class='del'>-  #       session = CGI::Session.new(cgi, 'new_session' =&gt; false)      </div><div class='del'>-  #       session.delete                 </div><div class='del'>-  #   rescue ArgumentError  # if no old session</div><div class='del'>-  #   end</div><div class='del'>-  #   session = CGI::Session.new(cgi, 'new_session' =&gt; true)</div><div class='del'>-  #   session.close</div><div class='del'>-  #</div><div class='del'>-  class Session</div><div class='del'>-</div><div class='del'>-    class NoSession &lt; RuntimeError #:nodoc:</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The id of this session.</div><div class='del'>-    attr_reader :session_id, :new_session</div><div class='del'>-</div><div class='del'>-    def Session::callback(dbman)  #:nodoc:</div><div class='del'>-      Proc.new{</div><div class='del'>-	dbman[0].close unless dbman.empty?</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Create a new session id.</div><div class='del'>-    #</div><div class='del'>-    # The session id is an MD5 hash based upon the time,</div><div class='del'>-    # a random number, and a constant string.  This routine</div><div class='del'>-    # is used internally for automatically generated</div><div class='del'>-    # session ids. </div><div class='del'>-    def create_new_id</div><div class='del'>-      require 'securerandom'</div><div class='del'>-      begin</div><div class='del'>-        session_id = SecureRandom.hex(16)</div><div class='del'>-      rescue NotImplementedError</div><div class='del'>-        require 'digest/md5'</div><div class='del'>-        md5 = Digest::MD5::new</div><div class='del'>-        now = Time::now</div><div class='del'>-        md5.update(now.to_s)</div><div class='del'>-        md5.update(String(now.usec))</div><div class='del'>-        md5.update(String(rand(0)))</div><div class='del'>-        md5.update(String($$))</div><div class='del'>-        md5.update('foobar')</div><div class='del'>-        session_id = md5.hexdigest</div><div class='del'>-      end</div><div class='del'>-      @new_session = true</div><div class='del'>-      session_id</div><div class='del'>-    end</div><div class='del'>-    private :create_new_id</div><div class='del'>-</div><div class='del'>-    # Create a new CGI::Session object for +request+.</div><div class='del'>-    #</div><div class='del'>-    # +request+ is an instance of the +CGI+ class (see cgi.rb).</div><div class='del'>-    # +option+ is a hash of options for initialising this</div><div class='del'>-    # CGI::Session instance.  The following options are</div><div class='del'>-    # recognised:</div><div class='del'>-    #</div><div class='del'>-    # session_key:: the parameter name used for the session id.</div><div class='del'>-    #               Defaults to '_session_id'.</div><div class='del'>-    # session_id:: the session id to use.  If not provided, then</div><div class='del'>-    #              it is retrieved from the +session_key+ parameter</div><div class='del'>-    #              of the request, or automatically generated for</div><div class='del'>-    #              a new session.</div><div class='del'>-    # new_session:: if true, force creation of a new session.  If not set, </div><div class='del'>-    #               a new session is only created if none currently</div><div class='del'>-    #               exists.  If false, a new session is never created,</div><div class='del'>-    #               and if none currently exists and the +session_id+</div><div class='del'>-    #               option is not set, an ArgumentError is raised.</div><div class='del'>-    # database_manager:: the name of the class providing storage facilities</div><div class='del'>-    #                    for session state persistence.  Built-in support</div><div class='del'>-    #                    is provided for +FileStore+ (the default),</div><div class='del'>-    #                    +MemoryStore+, and +PStore+ (from</div><div class='del'>-    #                    cgi/session/pstore.rb).  See the documentation for</div><div class='del'>-    #                    these classes for more details.</div><div class='del'>-    #</div><div class='del'>-    # The following options are also recognised, but only apply if the</div><div class='del'>-    # session id is stored in a cookie.</div><div class='del'>-    #</div><div class='del'>-    # session_expires:: the time the current session expires, as a </div><div class='del'>-    #                   +Time+ object.  If not set, the session will terminate</div><div class='del'>-    #                   when the user's browser is closed.</div><div class='del'>-    # session_domain:: the hostname domain for which this session is valid.</div><div class='del'>-    #                  If not set, defaults to the hostname of the server.</div><div class='del'>-    # session_secure:: if +true+, this session will only work over HTTPS.</div><div class='del'>-    # session_path:: the path for which this session applies.  Defaults</div><div class='del'>-    #                to the directory of the CGI script.</div><div class='del'>-    #</div><div class='del'>-    # +option+ is also passed on to the session storage class initializer; see</div><div class='del'>-    # the documentation for each session storage class for the options</div><div class='del'>-    # they support.</div><div class='del'>-    #                  </div><div class='del'>-    # The retrieved or created session is automatically added to +request+</div><div class='del'>-    # as a cookie, and also to its +output_hidden+ table, which is used</div><div class='del'>-    # to add hidden input elements to forms.  </div><div class='del'>-    #</div><div class='del'>-    # *WARNING* the +output_hidden+</div><div class='del'>-    # fields are surrounded by a &lt;fieldset&gt; tag in HTML 4 generation, which</div><div class='del'>-    # is _not_ invisible on many browsers; you may wish to disable the</div><div class='del'>-    # use of fieldsets with code similar to the following</div><div class='del'>-    # (see http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/37805)</div><div class='del'>-    #</div><div class='del'>-    #   cgi = CGI.new("html4")</div><div class='del'>-    #   class &lt;&lt; cgi</div><div class='del'>-    #       undef_method :fieldset</div><div class='del'>-    #   end</div><div class='del'>-    #</div><div class='del'>-    def initialize(request, option={})</div><div class='del'>-      @new_session = false</div><div class='del'>-      session_key = option['session_key'] || '_session_id'</div><div class='del'>-      session_id = option['session_id']</div><div class='del'>-      unless session_id</div><div class='del'>-	if option['new_session']</div><div class='del'>-	  session_id = create_new_id</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      unless session_id</div><div class='del'>-	if request.key?(session_key)</div><div class='del'>-	  session_id = request[session_key]</div><div class='del'>-	  session_id = session_id.read if session_id.respond_to?(:read)</div><div class='del'>-	end</div><div class='del'>-	unless session_id</div><div class='del'>-	  session_id, = request.cookies[session_key]</div><div class='del'>-	end</div><div class='del'>-	unless session_id</div><div class='del'>-	  unless option.fetch('new_session', true)</div><div class='del'>-	    raise ArgumentError, "session_key `%s' should be supplied"%session_key</div><div class='del'>-	  end</div><div class='del'>-	  session_id = create_new_id</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      @session_id = session_id</div><div class='del'>-      dbman = option['database_manager'] || FileStore</div><div class='del'>-      begin</div><div class='del'>-        @dbman = dbman::new(self, option)</div><div class='del'>-      rescue NoSession</div><div class='del'>-        unless option.fetch('new_session', true)</div><div class='del'>-          raise ArgumentError, "invalid session_id `%s'"%session_id</div><div class='del'>-        end</div><div class='del'>-        session_id = @session_id = create_new_id</div><div class='del'>-        retry</div><div class='del'>-      end</div><div class='del'>-      request.instance_eval do</div><div class='del'>-	@output_hidden = {session_key =&gt; session_id} unless option['no_hidden']</div><div class='del'>-	@output_cookies =  [</div><div class='del'>-          Cookie::new("name" =&gt; session_key,</div><div class='del'>-		      "value" =&gt; session_id,</div><div class='del'>-		      "expires" =&gt; option['session_expires'],</div><div class='del'>-		      "domain" =&gt; option['session_domain'],</div><div class='del'>-		      "secure" =&gt; option['session_secure'],</div><div class='del'>-		      "path" =&gt; if option['session_path'] then</div><div class='del'>-				  option['session_path']</div><div class='del'>-		                elsif ENV["SCRIPT_NAME"] then</div><div class='del'>-				  File::dirname(ENV["SCRIPT_NAME"])</div><div class='del'>-				else</div><div class='del'>-				  ""</div><div class='del'>-				end)</div><div class='del'>-        ] unless option['no_cookies']</div><div class='del'>-      end</div><div class='del'>-      @dbprot = [@dbman]</div><div class='del'>-      ObjectSpace::define_finalizer(self, Session::callback(@dbprot))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Retrieve the session data for key +key+.</div><div class='del'>-    def [](key)</div><div class='del'>-      @data ||= @dbman.restore</div><div class='del'>-      @data[key]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set the session date for key +key+.</div><div class='del'>-    def []=(key, val)</div><div class='del'>-      @write_lock ||= true</div><div class='del'>-      @data ||= @dbman.restore</div><div class='del'>-      @data[key] = val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Store session data on the server.  For some session storage types,</div><div class='del'>-    # this is a no-op.</div><div class='del'>-    def update  </div><div class='del'>-      @dbman.update</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Store session data on the server and close the session storage.  </div><div class='del'>-    # For some session storage types, this is a no-op.</div><div class='del'>-    def close</div><div class='del'>-      @dbman.close</div><div class='del'>-      @dbprot.clear</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Delete the session from storage.  Also closes the storage.</div><div class='del'>-    #</div><div class='del'>-    # Note that the session's data is _not_ automatically deleted</div><div class='del'>-    # upon the session expiring.</div><div class='del'>-    def delete</div><div class='del'>-      @dbman.delete</div><div class='del'>-      @dbprot.clear</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # File-based session storage class.</div><div class='del'>-    #</div><div class='del'>-    # Implements session storage as a flat file of 'key=value' values.</div><div class='del'>-    # This storage type only works directly with String values; the</div><div class='del'>-    # user is responsible for converting other types to Strings when</div><div class='del'>-    # storing and from Strings when retrieving.</div><div class='del'>-    class FileStore</div><div class='del'>-      # Create a new FileStore instance.</div><div class='del'>-      #</div><div class='del'>-      # This constructor is used internally by CGI::Session.  The</div><div class='del'>-      # user does not generally need to call it directly.</div><div class='del'>-      #</div><div class='del'>-      # +session+ is the session for which this instance is being</div><div class='del'>-      # created.  The session id must only contain alphanumeric</div><div class='del'>-      # characters; automatically generated session ids observe</div><div class='del'>-      # this requirement.</div><div class='del'>-      # </div><div class='del'>-      # +option+ is a hash of options for the initializer.  The</div><div class='del'>-      # following options are recognised:</div><div class='del'>-      #</div><div class='del'>-      # tmpdir:: the directory to use for storing the FileStore</div><div class='del'>-      #          file.  Defaults to Dir::tmpdir (generally "/tmp"</div><div class='del'>-      #          on Unix systems).</div><div class='del'>-      # prefix:: the prefix to add to the session id when generating</div><div class='del'>-      #          the filename for this session's FileStore file.</div><div class='del'>-      #          Defaults to the empty string.</div><div class='del'>-      # suffix:: the prefix to add to the session id when generating</div><div class='del'>-      #          the filename for this session's FileStore file.</div><div class='del'>-      #          Defaults to the empty string.</div><div class='del'>-      #</div><div class='del'>-      # This session's FileStore file will be created if it does</div><div class='del'>-      # not exist, or opened if it does.</div><div class='del'>-      def initialize(session, option={})</div><div class='del'>-	dir = option['tmpdir'] || Dir::tmpdir</div><div class='del'>-	prefix = option['prefix'] || ''</div><div class='del'>-	suffix = option['suffix'] || ''</div><div class='del'>-	id = session.session_id</div><div class='del'>-        require 'digest/md5'</div><div class='del'>-        md5 = Digest::MD5.hexdigest(id)[0,16]</div><div class='del'>-	@path = dir+"/"+prefix+md5+suffix</div><div class='del'>-	if File::exist? @path</div><div class='del'>-	  @hash = nil</div><div class='del'>-	else</div><div class='del'>-          unless session.new_session</div><div class='del'>-            raise CGI::Session::NoSession, "uninitialized session"</div><div class='del'>-          end</div><div class='del'>-	  @hash = {}</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Restore session state from the session's FileStore file.</div><div class='del'>-      #</div><div class='del'>-      # Returns the session state as a hash.</div><div class='del'>-      def restore</div><div class='del'>-	unless @hash</div><div class='del'>-	  @hash = {}</div><div class='del'>-          begin</div><div class='del'>-            lockf = File.open(@path+".lock", "r")</div><div class='del'>-            lockf.flock File::LOCK_SH</div><div class='del'>-	    f = File.open(@path, 'r')</div><div class='del'>-	    for line in f</div><div class='del'>-	      line.chomp!</div><div class='del'>-	      k, v = line.split('=',2)</div><div class='del'>-	      @hash[CGI::unescape(k)] = CGI::unescape(v)</div><div class='del'>-	    end</div><div class='del'>-          ensure</div><div class='del'>-	    f.close unless f.nil?</div><div class='del'>-            lockf.close if lockf</div><div class='del'>-          end</div><div class='del'>-	end</div><div class='del'>-	@hash</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Save session state to the session's FileStore file.</div><div class='del'>-      def update</div><div class='del'>-	return unless @hash</div><div class='del'>-        begin</div><div class='del'>-          lockf = File.open(@path+".lock", File::CREAT|File::RDWR, 0600)</div><div class='del'>-	  lockf.flock File::LOCK_EX</div><div class='del'>-          f = File.open(@path+".new", File::CREAT|File::TRUNC|File::WRONLY, 0600)</div><div class='del'>-   	  for k,v in @hash</div><div class='del'>-	    f.printf "%s=%s\n", CGI::escape(k), CGI::escape(String(v))</div><div class='del'>-	  end</div><div class='del'>-          f.close</div><div class='del'>-          File.rename @path+".new", @path</div><div class='del'>-        ensure</div><div class='del'>-          f.close if f and !f.closed?</div><div class='del'>-          lockf.close if lockf</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Update and close the session's FileStore file.</div><div class='del'>-      def close</div><div class='del'>-	update</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Close and delete the session's FileStore file.</div><div class='del'>-      def delete</div><div class='del'>-        File::unlink @path+".lock" rescue nil</div><div class='del'>-        File::unlink @path+".new" rescue nil</div><div class='del'>-        File::unlink @path</div><div class='del'>-      rescue Errno::ENOENT</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # In-memory session storage class.</div><div class='del'>-    #</div><div class='del'>-    # Implements session storage as a global in-memory hash.  Session</div><div class='del'>-    # data will only persist for as long as the ruby interpreter </div><div class='del'>-    # instance does.</div><div class='del'>-    class MemoryStore</div><div class='del'>-      GLOBAL_HASH_TABLE = {} #:nodoc:</div><div class='del'>-</div><div class='del'>-      # Create a new MemoryStore instance.</div><div class='del'>-      #</div><div class='del'>-      # +session+ is the session this instance is associated with.</div><div class='del'>-      # +option+ is a list of initialisation options.  None are</div><div class='del'>-      # currently recognised.</div><div class='del'>-      def initialize(session, option=nil)</div><div class='del'>-	@session_id = session.session_id</div><div class='del'>-        unless GLOBAL_HASH_TABLE.key?(@session_id)</div><div class='del'>-          unless session.new_session</div><div class='del'>-            raise CGI::Session::NoSession, "uninitialized session"</div><div class='del'>-          end</div><div class='del'>-          GLOBAL_HASH_TABLE[@session_id] = {}</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Restore session state.</div><div class='del'>-      #</div><div class='del'>-      # Returns session data as a hash.</div><div class='del'>-      def restore</div><div class='del'>-	GLOBAL_HASH_TABLE[@session_id]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Update session state.</div><div class='del'>-      #</div><div class='del'>-      # A no-op.</div><div class='del'>-      def update</div><div class='del'>-	# don't need to update; hash is shared</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Close session storage.</div><div class='del'>-      #</div><div class='del'>-      # A no-op.</div><div class='del'>-      def close</div><div class='del'>-	# don't need to close</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Delete the session state.</div><div class='del'>-      def delete</div><div class='del'>-	GLOBAL_HASH_TABLE.delete(@session_id)</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/lib/cgi/session/pstore.rb b/lib/cgi/session/pstore.rb<br/>deleted file mode 100644<br/>index 3d204d5dc0..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/cgi/session/pstore.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/cgi/session/pstore.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,111 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# cgi/session/pstore.rb - persistent storage of marshalled session data</div><div class='del'>-#</div><div class='del'>-# Documentation: William Webber (william@williamwebber.com)</div><div class='del'>-# </div><div class='del'>-# == Overview</div><div class='del'>-#</div><div class='del'>-# This file provides the CGI::Session::PStore class, which builds</div><div class='del'>-# persistent of session data on top of the pstore library.  See</div><div class='del'>-# cgi/session.rb for more details on session storage managers.</div><div class='del'>-</div><div class='del'>-require 'cgi/session'</div><div class='del'>-require 'pstore'</div><div class='del'>-</div><div class='del'>-class CGI</div><div class='del'>-  class Session</div><div class='del'>-    # PStore-based session storage class.</div><div class='del'>-    #</div><div class='del'>-    # This builds upon the top-level PStore class provided by the</div><div class='del'>-    # library file pstore.rb.  Session data is marshalled and stored</div><div class='del'>-    # in a file.  File locking and transaction services are provided.</div><div class='del'>-    class PStore</div><div class='del'>-      # Create a new CGI::Session::PStore instance</div><div class='del'>-      #</div><div class='del'>-      # This constructor is used internally by CGI::Session.  The</div><div class='del'>-      # user does not generally need to call it directly.</div><div class='del'>-      #</div><div class='del'>-      # +session+ is the session for which this instance is being</div><div class='del'>-      # created.  The session id must only contain alphanumeric</div><div class='del'>-      # characters; automatically generated session ids observe</div><div class='del'>-      # this requirement.</div><div class='del'>-      # </div><div class='del'>-      # +option+ is a hash of options for the initializer.  The</div><div class='del'>-      # following options are recognised:</div><div class='del'>-      #</div><div class='del'>-      # tmpdir:: the directory to use for storing the PStore</div><div class='del'>-      #          file.  Defaults to Dir::tmpdir (generally "/tmp"</div><div class='del'>-      #          on Unix systems).</div><div class='del'>-      # prefix:: the prefix to add to the session id when generating</div><div class='del'>-      #          the filename for this session's PStore file.</div><div class='del'>-      #          Defaults to the empty string.</div><div class='del'>-      #</div><div class='del'>-      # This session's PStore file will be created if it does</div><div class='del'>-      # not exist, or opened if it does.</div><div class='del'>-      def initialize(session, option={})</div><div class='del'>-	dir = option['tmpdir'] || Dir::tmpdir</div><div class='del'>-	prefix = option['prefix'] || ''</div><div class='del'>-	id = session.session_id</div><div class='del'>-        require 'digest/md5'</div><div class='del'>-        md5 = Digest::MD5.hexdigest(id)[0,16]</div><div class='del'>-	path = dir+"/"+prefix+md5</div><div class='del'>-	path.untaint</div><div class='del'>-	if File::exist?(path)</div><div class='del'>-	  @hash = nil</div><div class='del'>-	else</div><div class='del'>-          unless session.new_session</div><div class='del'>-            raise CGI::Session::NoSession, "uninitialized session"</div><div class='del'>-          end</div><div class='del'>-	  @hash = {}</div><div class='del'>-	end</div><div class='del'>-	@p = ::PStore.new(path)</div><div class='del'>-	@p.transaction do |p|</div><div class='del'>-	  File.chmod(0600, p.path)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Restore session state from the session's PStore file.</div><div class='del'>-      #</div><div class='del'>-      # Returns the session state as a hash.</div><div class='del'>-      def restore</div><div class='del'>-	unless @hash</div><div class='del'>-	  @p.transaction do</div><div class='del'>-           @hash = @p['hash'] || {}</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	@hash</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Save session state to the session's PStore file.</div><div class='del'>-      def update </div><div class='del'>-	@p.transaction do</div><div class='del'>-	    @p['hash'] = @hash</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Update and close the session's PStore file.</div><div class='del'>-      def close</div><div class='del'>-	update</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Close and delete the session's PStore file.</div><div class='del'>-      def delete</div><div class='del'>-	path = @p.path</div><div class='del'>-	File::unlink path</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='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  # :enddoc:</div><div class='del'>-  STDIN.reopen("/dev/null")</div><div class='del'>-  cgi = CGI.new</div><div class='del'>-  session = CGI::Session.new(cgi, 'database_manager' =&gt; CGI::Session::PStore)</div><div class='del'>-  session['key'] = {'k' =&gt; 'v'}</div><div class='del'>-  puts session['key'].class</div><div class='del'>-  fail unless Hash === session['key']</div><div class='del'>-  puts session['key'].inspect</div><div class='del'>-  fail unless session['key'].inspect == '{"k"=&gt;"v"}'</div><div class='del'>-end</div><div class='head'>diff --git a/lib/complex.rb b/lib/complex.rb<br/>deleted file mode 100644<br/>index fbf50ffece..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/complex.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/complex.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,663 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   complex.rb - </div><div class='del'>-#   	$Release Version: 0.5 $</div><div class='del'>-#   	$Revision: 1.3 $</div><div class='del'>-#   	$Date: 1998/07/08 10:05:28 $</div><div class='del'>-#   	by Keiju ISHITSUKA(SHL Japan Inc.)</div><div class='del'>-#</div><div class='del'>-# ----</div><div class='del'>-#</div><div class='del'>-# complex.rb implements the Complex class for complex numbers.  Additionally,</div><div class='del'>-# some methods in other Numeric classes are redefined or added to allow greater</div><div class='del'>-# interoperability with Complex numbers.</div><div class='del'>-#</div><div class='del'>-# Complex numbers can be created in the following manner:</div><div class='del'>-# - &lt;tt&gt;Complex(a, b)&lt;/tt&gt;</div><div class='del'>-# - &lt;tt&gt;Complex.polar(radius, theta)&lt;/tt&gt;</div><div class='del'>-#   </div><div class='del'>-# Additionally, note the following:</div><div class='del'>-# - &lt;tt&gt;Complex::I&lt;/tt&gt; (the mathematical constant &lt;i&gt;i&lt;/i&gt;)</div><div class='del'>-# - &lt;tt&gt;Numeric#im&lt;/tt&gt; (e.g. &lt;tt&gt;5.im -&gt; 0+5i&lt;/tt&gt;)</div><div class='del'>-#</div><div class='del'>-# The following +Math+ module methods are redefined to handle Complex arguments.</div><div class='del'>-# They will work as normal with non-Complex arguments.</div><div class='del'>-#    sqrt exp cos sin tan log log10</div><div class='del'>-#    cosh sinh tanh acos asin atan atan2 acosh asinh atanh</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Numeric is a built-in class on which Fixnum, Bignum, etc., are based.  Here</div><div class='del'>-# some methods are added so that all number types can be treated to some extent</div><div class='del'>-# as Complex numbers.</div><div class='del'>-#</div><div class='del'>-class Numeric</div><div class='del'>-  #</div><div class='del'>-  # Returns a Complex number &lt;tt&gt;(0,&lt;i&gt;self&lt;/i&gt;)&lt;/tt&gt;.</div><div class='del'>-  #</div><div class='del'>-  def im</div><div class='del'>-    Complex(0, self)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # The real part of a complex number, i.e. &lt;i&gt;self&lt;/i&gt;.</div><div class='del'>-  #</div><div class='del'>-  def real</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # The imaginary part of a complex number, i.e. 0.</div><div class='del'>-  #</div><div class='del'>-  def image</div><div class='del'>-    0</div><div class='del'>-  end</div><div class='del'>-  alias imag image</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # See Complex#arg.</div><div class='del'>-  #</div><div class='del'>-  def arg</div><div class='del'>-    if self &gt;= 0</div><div class='del'>-      return 0</div><div class='del'>-    else</div><div class='del'>-      return Math::PI</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias angle arg</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # See Complex#polar.</div><div class='del'>-  #</div><div class='del'>-  def polar</div><div class='del'>-    return abs, arg</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # See Complex#conjugate (short answer: returns &lt;i&gt;self&lt;/i&gt;).</div><div class='del'>-  #</div><div class='del'>-  def conjugate</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias conj conjugate</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Creates a Complex number.  +a+ and +b+ should be Numeric.  The result will be</div><div class='del'>-# &lt;tt&gt;a+bi&lt;/tt&gt;.</div><div class='del'>-#</div><div class='del'>-def Complex(a, b = 0)</div><div class='del'>-  if b == 0 and (a.kind_of?(Complex) or defined? Complex::Unify)</div><div class='del'>-    a</div><div class='del'>-  else</div><div class='del'>-    Complex.new( a.real-b.imag, a.imag+b.real )</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# The complex number class.  See complex.rb for an overview.</div><div class='del'>-#</div><div class='del'>-class Complex &lt; Numeric</div><div class='del'>-  @RCS_ID='-$Id: complex.rb,v 1.3 1998/07/08 10:05:28 keiju Exp keiju $-'</div><div class='del'>-</div><div class='del'>-  undef step</div><div class='del'>-  undef div, divmod</div><div class='del'>-  undef floor, truncate, ceil, round</div><div class='del'>-</div><div class='del'>-  def Complex.generic?(other) # :nodoc:</div><div class='del'>-    other.kind_of?(Integer) or</div><div class='del'>-    other.kind_of?(Float) or</div><div class='del'>-    (defined?(Rational) and other.kind_of?(Rational))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Creates a +Complex+ number in terms of +r+ (radius) and +theta+ (angle).</div><div class='del'>-  #</div><div class='del'>-  def Complex.polar(r, theta)</div><div class='del'>-    Complex(r*Math.cos(theta), r*Math.sin(theta))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Creates a +Complex+ number &lt;tt&gt;a&lt;/tt&gt;+&lt;tt&gt;b&lt;/tt&gt;&lt;i&gt;i&lt;/i&gt;.</div><div class='del'>-  #</div><div class='del'>-  def Complex.new!(a, b=0)</div><div class='del'>-    new(a,b)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(a, b)</div><div class='del'>-    raise TypeError, "non numeric 1st arg `#{a.inspect}'" if !a.kind_of? Numeric</div><div class='del'>-    raise TypeError, "`#{a.inspect}' for 1st arg" if a.kind_of? Complex</div><div class='del'>-    raise TypeError, "non numeric 2nd arg `#{b.inspect}'" if !b.kind_of? Numeric</div><div class='del'>-    raise TypeError, "`#{b.inspect}' for 2nd arg" if b.kind_of? Complex</div><div class='del'>-    @real = a</div><div class='del'>-    @image = b</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Addition with real or complex number.</div><div class='del'>-  #</div><div class='del'>-  def + (other)</div><div class='del'>-    if other.kind_of?(Complex)</div><div class='del'>-      re = @real + other.real</div><div class='del'>-      im = @image + other.image</div><div class='del'>-      Complex(re, im)</div><div class='del'>-    elsif Complex.generic?(other)</div><div class='del'>-      Complex(@real + other, @image)</div><div class='del'>-    else</div><div class='del'>-      x , y = other.coerce(self)</div><div class='del'>-      x + y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Subtraction with real or complex number.</div><div class='del'>-  #</div><div class='del'>-  def - (other)</div><div class='del'>-    if other.kind_of?(Complex)</div><div class='del'>-      re = @real - other.real</div><div class='del'>-      im = @image - other.image</div><div class='del'>-      Complex(re, im)</div><div class='del'>-    elsif Complex.generic?(other)</div><div class='del'>-      Complex(@real - other, @image)</div><div class='del'>-    else</div><div class='del'>-      x , y = other.coerce(self)</div><div class='del'>-      x - y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Multiplication with real or complex number.</div><div class='del'>-  #</div><div class='del'>-  def * (other)</div><div class='del'>-    if other.kind_of?(Complex)</div><div class='del'>-      re = @real*other.real - @image*other.image</div><div class='del'>-      im = @real*other.image + @image*other.real</div><div class='del'>-      Complex(re, im)</div><div class='del'>-    elsif Complex.generic?(other)</div><div class='del'>-      Complex(@real * other, @image * other)</div><div class='del'>-    else</div><div class='del'>-      x , y = other.coerce(self)</div><div class='del'>-      x * y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Division by real or complex number.</div><div class='del'>-  #</div><div class='del'>-  def / (other)</div><div class='del'>-    if other.kind_of?(Complex)</div><div class='del'>-      self*other.conjugate/other.abs2</div><div class='del'>-    elsif Complex.generic?(other)</div><div class='del'>-      Complex(@real/other, @image/other)</div><div class='del'>-    else</div><div class='del'>-      x, y = other.coerce(self)</div><div class='del'>-      x/y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def quo(other)</div><div class='del'>-    Complex(@real.quo(1), @image.quo(1)) / other</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Raise this complex number to the given (real or complex) power.</div><div class='del'>-  #</div><div class='del'>-  def ** (other)</div><div class='del'>-    if other == 0</div><div class='del'>-      return Complex(1)</div><div class='del'>-    end</div><div class='del'>-    if other.kind_of?(Complex)</div><div class='del'>-      r, theta = polar</div><div class='del'>-      ore = other.real</div><div class='del'>-      oim = other.image</div><div class='del'>-      nr = Math.exp!(ore*Math.log!(r) - oim * theta)</div><div class='del'>-      ntheta = theta*ore + oim*Math.log!(r)</div><div class='del'>-      Complex.polar(nr, ntheta)</div><div class='del'>-    elsif other.kind_of?(Integer)</div><div class='del'>-      if other &gt; 0</div><div class='del'>-	x = self</div><div class='del'>-	z = x</div><div class='del'>-	n = other - 1</div><div class='del'>-	while n != 0</div><div class='del'>-	  while (div, mod = n.divmod(2)</div><div class='del'>-		 mod == 0)</div><div class='del'>-	    x = Complex(x.real*x.real - x.image*x.image, 2*x.real*x.image)</div><div class='del'>-	    n = div</div><div class='del'>-	  end</div><div class='del'>-	  z *= x</div><div class='del'>-	  n -= 1</div><div class='del'>-	end</div><div class='del'>-	z</div><div class='del'>-      else</div><div class='del'>-	if defined? Rational</div><div class='del'>-	  (Rational(1) / self) ** -other</div><div class='del'>-	else</div><div class='del'>-	  self ** Float(other)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    elsif Complex.generic?(other)</div><div class='del'>-      r, theta = polar</div><div class='del'>-      Complex.polar(r**other, theta*other)</div><div class='del'>-    else</div><div class='del'>-      x, y = other.coerce(self)</div><div class='del'>-      x**y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Remainder after division by a real or complex number.</div><div class='del'>-  #</div><div class='del'>-  def % (other)</div><div class='del'>-    if other.kind_of?(Complex)</div><div class='del'>-      Complex(@real % other.real, @image % other.image)</div><div class='del'>-    elsif Complex.generic?(other)</div><div class='del'>-      Complex(@real % other, @image % other)</div><div class='del'>-    else</div><div class='del'>-      x , y = other.coerce(self)</div><div class='del'>-      x % y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-#--</div><div class='del'>-#    def divmod(other)</div><div class='del'>-#      if other.kind_of?(Complex)</div><div class='del'>-#        rdiv, rmod = @real.divmod(other.real)</div><div class='del'>-#        idiv, imod = @image.divmod(other.image)</div><div class='del'>-#        return Complex(rdiv, idiv), Complex(rmod, rmod)</div><div class='del'>-#      elsif Complex.generic?(other)</div><div class='del'>-#        Complex(@real.divmod(other), @image.divmod(other))</div><div class='del'>-#      else</div><div class='del'>-#        x , y = other.coerce(self)</div><div class='del'>-#        x.divmod(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'>-  # Absolute value (aka modulus): distance from the zero point on the complex</div><div class='del'>-  # plane.</div><div class='del'>-  #</div><div class='del'>-  def abs</div><div class='del'>-    Math.hypot(@real, @image)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Square of the absolute value.</div><div class='del'>-  #</div><div class='del'>-  def abs2</div><div class='del'>-    @real*@real + @image*@image</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Argument (angle from (1,0) on the complex plane).</div><div class='del'>-  #</div><div class='del'>-  def arg</div><div class='del'>-    Math.atan2!(@image, @real)</div><div class='del'>-  end</div><div class='del'>-  alias angle arg</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns the absolute value _and_ the argument.</div><div class='del'>-  #</div><div class='del'>-  def polar</div><div class='del'>-    return abs, arg</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Complex conjugate (&lt;tt&gt;z + z.conjugate = 2 * z.real&lt;/tt&gt;).</div><div class='del'>-  #</div><div class='del'>-  def conjugate</div><div class='del'>-    Complex(@real, -@image)</div><div class='del'>-  end</div><div class='del'>-  alias conj conjugate</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Compares the absolute values of the two numbers.</div><div class='del'>-  #</div><div class='del'>-  def &lt;=&gt; (other)</div><div class='del'>-    self.abs &lt;=&gt; other.abs</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Test for numerical equality (&lt;tt&gt;a == a + 0&lt;i&gt;i&lt;/i&gt;&lt;/tt&gt;).</div><div class='del'>-  #</div><div class='del'>-  def == (other)</div><div class='del'>-    if other.kind_of?(Complex)</div><div class='del'>-      @real == other.real and @image == other.image</div><div class='del'>-    elsif Complex.generic?(other)</div><div class='del'>-      @real == other and @image == 0</div><div class='del'>-    else</div><div class='del'>-      other == self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Attempts to coerce +other+ to a Complex number.</div><div class='del'>-  #</div><div class='del'>-  def coerce(other)</div><div class='del'>-    if Complex.generic?(other)</div><div class='del'>-      return Complex.new!(other), self</div><div class='del'>-    else</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # FIXME</div><div class='del'>-  #</div><div class='del'>-  def denominator</div><div class='del'>-    @real.denominator.lcm(@image.denominator)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # FIXME</div><div class='del'>-  #</div><div class='del'>-  def numerator</div><div class='del'>-    cd = denominator</div><div class='del'>-    Complex(@real.numerator*(cd/@real.denominator),</div><div class='del'>-	    @image.numerator*(cd/@image.denominator))</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Standard string representation of the complex number.</div><div class='del'>-  #</div><div class='del'>-  def to_s</div><div class='del'>-    if @real != 0</div><div class='del'>-      if defined?(Rational) and @image.kind_of?(Rational) and @image.denominator != 1</div><div class='del'>-	if @image &gt;= 0</div><div class='del'>-	  @real.to_s+"+("+@image.to_s+")i"</div><div class='del'>-	else</div><div class='del'>-	  @real.to_s+"-("+(-@image).to_s+")i"</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	if @image &gt;= 0</div><div class='del'>-	  @real.to_s+"+"+@image.to_s+"i"</div><div class='del'>-	else</div><div class='del'>-	  @real.to_s+"-"+(-@image).to_s+"i"</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if defined?(Rational) and @image.kind_of?(Rational) and @image.denominator != 1</div><div class='del'>-	"("+@image.to_s+")i"</div><div class='del'>-      else</div><div class='del'>-	@image.to_s+"i"</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'>-  # Returns a hash code for the complex number.</div><div class='del'>-  #</div><div class='del'>-  def hash</div><div class='del'>-    @real.hash ^ @image.hash</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns "&lt;tt&gt;Complex(&lt;i&gt;real&lt;/i&gt;, &lt;i&gt;image&lt;/i&gt;)&lt;/tt&gt;".</div><div class='del'>-  #</div><div class='del'>-  def inspect</div><div class='del'>-    sprintf("Complex(%s, %s)", @real.inspect, @image.inspect)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # +I+ is the imaginary number.  It exists at point (0,1) on the complex plane.</div><div class='del'>-  #</div><div class='del'>-  I = Complex(0,1)</div><div class='del'>-  </div><div class='del'>-  # The real part of a complex number.</div><div class='del'>-  attr :real</div><div class='del'>-</div><div class='del'>-  # The imaginary part of a complex number.</div><div class='del'>-  attr :image</div><div class='del'>-  alias imag image</div><div class='del'>-  </div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Integer</div><div class='del'>-</div><div class='del'>-  unless defined?(1.numerator)</div><div class='del'>-    def numerator() self end</div><div class='del'>-    def denominator() 1 end</div><div class='del'>-</div><div class='del'>-    def gcd(other)</div><div class='del'>-      min = self.abs</div><div class='del'>-      max = other.abs</div><div class='del'>-      while min &gt; 0</div><div class='del'>-        tmp = min</div><div class='del'>-        min = max % min</div><div class='del'>-        max = tmp</div><div class='del'>-      end</div><div class='del'>-      max</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def lcm(other)</div><div class='del'>-      if self.zero? or other.zero?</div><div class='del'>-        0</div><div class='del'>-      else</div><div class='del'>-        (self.div(self.gcd(other)) * other).abs</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'>-end</div><div class='del'>-</div><div class='del'>-module Math</div><div class='del'>-  alias sqrt! sqrt</div><div class='del'>-  alias exp! exp</div><div class='del'>-  alias log! log</div><div class='del'>-  alias log10! log10</div><div class='del'>-  alias cos! cos</div><div class='del'>-  alias sin! sin</div><div class='del'>-  alias tan! tan</div><div class='del'>-  alias cosh! cosh</div><div class='del'>-  alias sinh! sinh</div><div class='del'>-  alias tanh! tanh</div><div class='del'>-  alias acos! acos</div><div class='del'>-  alias asin! asin</div><div class='del'>-  alias atan! atan</div><div class='del'>-  alias atan2! atan2</div><div class='del'>-  alias acosh! acosh</div><div class='del'>-  alias asinh! asinh</div><div class='del'>-  alias atanh! atanh  </div><div class='del'>-</div><div class='del'>-  # Redefined to handle a Complex argument.</div><div class='del'>-  def sqrt(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      if z &gt;= 0</div><div class='del'>-	sqrt!(z)</div><div class='del'>-      else</div><div class='del'>-	Complex(0,sqrt!(-z))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      if z.image &lt; 0</div><div class='del'>-	sqrt(z.conjugate).conjugate</div><div class='del'>-      else</div><div class='del'>-	r = z.abs</div><div class='del'>-	x = z.real</div><div class='del'>-	Complex( sqrt!((r+x)/2), sqrt!((r-x)/2) )</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Redefined to handle a Complex argument.</div><div class='del'>-  def exp(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      exp!(z)</div><div class='del'>-    else</div><div class='del'>-      Complex(exp!(z.real) * cos!(z.image), exp!(z.real) * sin!(z.image))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Redefined to handle a Complex argument.</div><div class='del'>-  def cos(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      cos!(z)</div><div class='del'>-    else</div><div class='del'>-      Complex(cos!(z.real)*cosh!(z.image),</div><div class='del'>-	      -sin!(z.real)*sinh!(z.image))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-    </div><div class='del'>-  # Redefined to handle a Complex argument.</div><div class='del'>-  def sin(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      sin!(z)</div><div class='del'>-    else</div><div class='del'>-      Complex(sin!(z.real)*cosh!(z.image),</div><div class='del'>-	      cos!(z.real)*sinh!(z.image))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Redefined to handle a Complex argument.</div><div class='del'>-  def tan(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      tan!(z)</div><div class='del'>-    else</div><div class='del'>-      sin(z)/cos(z)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def sinh(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      sinh!(z)</div><div class='del'>-    else</div><div class='del'>-      Complex( sinh!(z.real)*cos!(z.image), cosh!(z.real)*sin!(z.image) )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def cosh(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      cosh!(z)</div><div class='del'>-    else</div><div class='del'>-      Complex( cosh!(z.real)*cos!(z.image), sinh!(z.real)*sin!(z.image) )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tanh(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      tanh!(z)</div><div class='del'>-    else</div><div class='del'>-      sinh(z)/cosh(z)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Redefined to handle a Complex argument.</div><div class='del'>-  def log(z)</div><div class='del'>-    if Complex.generic?(z) and z &gt;= 0</div><div class='del'>-      log!(z)</div><div class='del'>-    else</div><div class='del'>-      r, theta = z.polar</div><div class='del'>-      Complex(log!(r.abs), theta)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Redefined to handle a Complex argument.</div><div class='del'>-  def log10(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      log10!(z)</div><div class='del'>-    else</div><div class='del'>-      log(z)/log!(10)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def acos(z)</div><div class='del'>-    if Complex.generic?(z) and z &gt;= -1 and z &lt;= 1</div><div class='del'>-      acos!(z)</div><div class='del'>-    else</div><div class='del'>-      -1.0.im * log( z + 1.0.im * sqrt(1.0-z*z) )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def asin(z)</div><div class='del'>-    if Complex.generic?(z) and z &gt;= -1 and z &lt;= 1</div><div class='del'>-      asin!(z)</div><div class='del'>-    else</div><div class='del'>-      -1.0.im * log( 1.0.im * z + sqrt(1.0-z*z) )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def atan(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      atan!(z)</div><div class='del'>-    else</div><div class='del'>-      1.0.im * log( (1.0.im+z) / (1.0.im-z) ) / 2.0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def atan2(y,x)</div><div class='del'>-    if Complex.generic?(y) and Complex.generic?(x)</div><div class='del'>-      atan2!(y,x)</div><div class='del'>-    else</div><div class='del'>-      -1.0.im * log( (x+1.0.im*y) / sqrt(x*x+y*y) )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def acosh(z)</div><div class='del'>-    if Complex.generic?(z) and z &gt;= 1</div><div class='del'>-      acosh!(z)</div><div class='del'>-    else</div><div class='del'>-      log( z + sqrt(z*z-1.0) )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def asinh(z)</div><div class='del'>-    if Complex.generic?(z)</div><div class='del'>-      asinh!(z)</div><div class='del'>-    else</div><div class='del'>-      log( z + sqrt(1.0+z*z) )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def atanh(z)</div><div class='del'>-    if Complex.generic?(z) and z &gt;= -1 and z &lt;= 1</div><div class='del'>-      atanh!(z)</div><div class='del'>-    else</div><div class='del'>-      log( (1.0+z) / (1.0-z) ) / 2.0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :sqrt!</div><div class='del'>-  module_function :sqrt</div><div class='del'>-  module_function :exp!</div><div class='del'>-  module_function :exp</div><div class='del'>-  module_function :log!</div><div class='del'>-  module_function :log</div><div class='del'>-  module_function :log10!</div><div class='del'>-  module_function :log10</div><div class='del'>-  module_function :cosh!</div><div class='del'>-  module_function :cosh</div><div class='del'>-  module_function :cos!</div><div class='del'>-  module_function :cos</div><div class='del'>-  module_function :sinh!</div><div class='del'>-  module_function :sinh</div><div class='del'>-  module_function :sin!</div><div class='del'>-  module_function :sin</div><div class='del'>-  module_function :tan!</div><div class='del'>-  module_function :tan</div><div class='del'>-  module_function :tanh!</div><div class='del'>-  module_function :tanh</div><div class='del'>-  module_function :acos!</div><div class='del'>-  module_function :acos</div><div class='del'>-  module_function :asin!</div><div class='del'>-  module_function :asin</div><div class='del'>-  module_function :atan!</div><div class='del'>-  module_function :atan</div><div class='del'>-  module_function :atan2!</div><div class='del'>-  module_function :atan2</div><div class='del'>-  module_function :acosh!</div><div class='del'>-  module_function :acosh</div><div class='del'>-  module_function :asinh!</div><div class='del'>-  module_function :asinh</div><div class='del'>-  module_function :atanh!</div><div class='del'>-  module_function :atanh</div><div class='del'>-  </div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Documentation comments:</div><div class='del'>-#  - source: original (researched from pickaxe)</div><div class='del'>-#  - a couple of fixme's</div><div class='del'>-#  - RDoc output for Bignum etc. is a bit short, with nothing but an</div><div class='del'>-#    (undocumented) alias.  No big deal.</div><div class='head'>diff --git a/lib/csv.rb b/lib/csv.rb<br/>deleted file mode 100644<br/>index f6c12fa285..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/csv.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/csv.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,992 +0,0 @@</div><div class='del'>-# CSV -- module for generating/parsing CSV data.</div><div class='del'>-# Copyright (C) 2000-2004  NAKAMURA, Hiroshi &lt;nakahiro@sarion.co.jp&gt;.</div><div class='del'>-  </div><div class='del'>-# $Id$</div><div class='del'>-  </div><div class='del'>-# This program is copyrighted free software by NAKAMURA, Hiroshi.  You can</div><div class='del'>-# redistribute it and/or modify it under the same terms of Ruby's license;</div><div class='del'>-# either the dual license version in 2003, or any later version.</div><div class='del'>-  </div><div class='del'>-  </div><div class='del'>-class CSV</div><div class='del'>-  class IllegalFormatError &lt; RuntimeError; end</div><div class='del'>-</div><div class='del'>-  # deprecated</div><div class='del'>-  class Cell &lt; String</div><div class='del'>-    def initialize(data = "", is_null = false)</div><div class='del'>-      super(is_null ? "" : data)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def data</div><div class='del'>-      to_s</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # deprecated</div><div class='del'>-  class Row &lt; Array</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Open a CSV formatted file for reading or writing.</div><div class='del'>-  #</div><div class='del'>-  # For reading.</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE 1</div><div class='del'>-  #   CSV.open('csvfile.csv', 'r') do |row|</div><div class='del'>-  #     p row</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE 2</div><div class='del'>-  #   reader = CSV.open('csvfile.csv', 'r')</div><div class='del'>-  #   row1 = reader.shift</div><div class='del'>-  #   row2 = reader.shift</div><div class='del'>-  #   if row2.empty?</div><div class='del'>-  #     p 'row2 not find.'</div><div class='del'>-  #   end</div><div class='del'>-  #   reader.close</div><div class='del'>-  #</div><div class='del'>-  # ARGS</div><div class='del'>-  #   filename: filename to parse.</div><div class='del'>-  #   col_sep: Column separator.  ?, by default.  If you want to separate</div><div class='del'>-  #     fields with semicolon, give ?; here.</div><div class='del'>-  #   row_sep: Row separator.  nil by default.  nil means "\r\n or \n".  If you</div><div class='del'>-  #     want to separate records with \r, give ?\r here.</div><div class='del'>-  #</div><div class='del'>-  # RETURNS</div><div class='del'>-  #   reader instance.  To get parse result, see CSV::Reader#each.</div><div class='del'>-  #</div><div class='del'>-  #</div><div class='del'>-  # For writing.</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE 1</div><div class='del'>-  #   CSV.open('csvfile.csv', 'w') do |writer|</div><div class='del'>-  #     writer &lt;&lt; ['r1c1', 'r1c2']</div><div class='del'>-  #     writer &lt;&lt; ['r2c1', 'r2c2']</div><div class='del'>-  #     writer &lt;&lt; [nil, nil]</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE 2</div><div class='del'>-  #   writer = CSV.open('csvfile.csv', 'w')</div><div class='del'>-  #   writer &lt;&lt; ['r1c1', 'r1c2'] &lt;&lt; ['r2c1', 'r2c2'] &lt;&lt; [nil, nil]</div><div class='del'>-  #   writer.close</div><div class='del'>-  #</div><div class='del'>-  # ARGS</div><div class='del'>-  #   filename: filename to generate.</div><div class='del'>-  #   col_sep: Column separator.  ?, by default.  If you want to separate</div><div class='del'>-  #     fields with semicolon, give ?; here.</div><div class='del'>-  #   row_sep: Row separator.  nil by default.  nil means "\r\n or \n".  If you</div><div class='del'>-  #     want to separate records with \r, give ?\r here.</div><div class='del'>-  #</div><div class='del'>-  # RETURNS</div><div class='del'>-  #   writer instance.  See CSV::Writer#&lt;&lt; and CSV::Writer#add_row to know how</div><div class='del'>-  #   to generate CSV string.</div><div class='del'>-  #</div><div class='del'>-  def CSV.open(path, mode, fs = nil, rs = nil, &amp;block)</div><div class='del'>-    if mode == 'r' or mode == 'rb'</div><div class='del'>-      open_reader(path, mode, fs, rs, &amp;block)</div><div class='del'>-    elsif mode == 'w' or mode == 'wb'</div><div class='del'>-      open_writer(path, mode, fs, rs, &amp;block)</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError.new("'mode' must be 'r', 'rb', 'w', or 'wb'")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def CSV.foreach(path, rs = nil, &amp;block)</div><div class='del'>-    open_reader(path, 'r', ',', rs, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def CSV.read(path, length = nil, offset = nil)</div><div class='del'>-    CSV.parse(IO.read(path, length, offset))</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def CSV.readlines(path, rs = nil)</div><div class='del'>-    reader = open_reader(path, 'r', ',', rs)</div><div class='del'>-    begin</div><div class='del'>-      reader.collect { |row| row }</div><div class='del'>-    ensure</div><div class='del'>-      reader.close</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def CSV.generate(path, fs = nil, rs = nil, &amp;block)</div><div class='del'>-    open_writer(path, 'w', fs, rs, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Parse lines from given string or stream.  Return rows as an Array of Arrays.</div><div class='del'>-  def CSV.parse(str_or_readable, fs = nil, rs = nil, &amp;block)</div><div class='del'>-    if File.exist?(str_or_readable)</div><div class='del'>-      STDERR.puts("CSV.parse(filename) is deprecated." +</div><div class='del'>-        "  Use CSV.open(filename, 'r') instead.")</div><div class='del'>-      return open_reader(str_or_readable, 'r', fs, rs, &amp;block)</div><div class='del'>-    end</div><div class='del'>-    if block</div><div class='del'>-      CSV::Reader.parse(str_or_readable, fs, rs) do |row|</div><div class='del'>-        yield(row)</div><div class='del'>-      end</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      CSV::Reader.create(str_or_readable, fs, rs).collect { |row| row }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Parse a line from given string.  Bear in mind it parses ONE LINE.  Rest of</div><div class='del'>-  # the string is ignored for example "a,b\r\nc,d" =&gt; ['a', 'b'] and the</div><div class='del'>-  # second line 'c,d' is ignored.</div><div class='del'>-  #</div><div class='del'>-  # If you don't know whether a target string to parse is exactly 1 line or</div><div class='del'>-  # not, use CSV.parse_row instead of this method.</div><div class='del'>-  def CSV.parse_line(src, fs = nil, rs = nil)</div><div class='del'>-    fs ||= ','</div><div class='del'>-    if fs.is_a?(Fixnum)</div><div class='del'>-      fs = fs.chr</div><div class='del'>-    end</div><div class='del'>-    if !rs.nil? and rs.is_a?(Fixnum)</div><div class='del'>-      rs = rs.chr</div><div class='del'>-    end</div><div class='del'>-    idx = 0</div><div class='del'>-    res_type = :DT_COLSEP</div><div class='del'>-    row = []</div><div class='del'>-    begin</div><div class='del'>-      while res_type == :DT_COLSEP</div><div class='del'>-        res_type, idx, cell = parse_body(src, idx, fs, rs)</div><div class='del'>-        row &lt;&lt; cell</div><div class='del'>-      end</div><div class='del'>-    rescue IllegalFormatError</div><div class='del'>-      return []</div><div class='del'>-    end</div><div class='del'>-    row</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create a line from cells.  each cell is stringified by to_s.</div><div class='del'>-  def CSV.generate_line(row, fs = nil, rs = nil)</div><div class='del'>-    if row.size == 0</div><div class='del'>-      return ''</div><div class='del'>-    end</div><div class='del'>-    fs ||= ','</div><div class='del'>-    if fs.is_a?(Fixnum)</div><div class='del'>-      fs = fs.chr</div><div class='del'>-    end</div><div class='del'>-    if !rs.nil? and rs.is_a?(Fixnum)</div><div class='del'>-      rs = rs.chr</div><div class='del'>-    end</div><div class='del'>-    res_type = :DT_COLSEP</div><div class='del'>-    result_str = ''</div><div class='del'>-    idx = 0</div><div class='del'>-    while true</div><div class='del'>-      generate_body(row[idx], result_str, fs, rs)</div><div class='del'>-      idx += 1</div><div class='del'>-      if (idx == row.size)</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-      generate_separator(:DT_COLSEP, result_str, fs, rs)</div><div class='del'>-    end</div><div class='del'>-    result_str</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Parse a line from string.  Consider using CSV.parse_line instead.</div><div class='del'>-  # To parse lines in CSV string, see EXAMPLE below.</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE</div><div class='del'>-  #   src = "a,b\r\nc,d\r\ne,f"</div><div class='del'>-  #   idx = 0</div><div class='del'>-  #   begin</div><div class='del'>-  #     parsed = []</div><div class='del'>-  #     parsed_cells, idx = CSV.parse_row(src, idx, parsed)</div><div class='del'>-  #     puts "Parsed #{ parsed_cells } cells."</div><div class='del'>-  #     p parsed</div><div class='del'>-  #   end while parsed_cells &gt; 0</div><div class='del'>-  #</div><div class='del'>-  # ARGS</div><div class='del'>-  #   src: a CSV data to be parsed.  Must respond '[](idx)'.</div><div class='del'>-  #     src[](idx) must return a char. (Not a string such as 'a', but 97).</div><div class='del'>-  #     src[](idx_out_of_bounds) must return nil.  A String satisfies this</div><div class='del'>-  #     requirement.</div><div class='del'>-  #   idx: index of parsing location of 'src'.  0 origin.</div><div class='del'>-  #   out_dev: buffer for parsed cells.  Must respond '&lt;&lt;(aString)'.</div><div class='del'>-  #   col_sep: Column separator.  ?, by default.  If you want to separate</div><div class='del'>-  #     fields with semicolon, give ?; here.</div><div class='del'>-  #   row_sep: Row separator.  nil by default.  nil means "\r\n or \n".  If you</div><div class='del'>-  #     want to separate records with \r, give ?\r here.</div><div class='del'>-  #</div><div class='del'>-  # RETURNS</div><div class='del'>-  #   parsed_cells: num of parsed cells.</div><div class='del'>-  #   idx: index of next parsing location of 'src'.</div><div class='del'>-  #</div><div class='del'>-  def CSV.parse_row(src, idx, out_dev, fs = nil, rs = nil)</div><div class='del'>-    fs ||= ','</div><div class='del'>-    if fs.is_a?(Fixnum)</div><div class='del'>-      fs = fs.chr</div><div class='del'>-    end</div><div class='del'>-    if !rs.nil? and rs.is_a?(Fixnum)</div><div class='del'>-      rs = rs.chr</div><div class='del'>-    end</div><div class='del'>-    idx_backup = idx</div><div class='del'>-    parsed_cells = 0</div><div class='del'>-    res_type = :DT_COLSEP</div><div class='del'>-    begin</div><div class='del'>-      while res_type != :DT_ROWSEP</div><div class='del'>-        res_type, idx, cell = parse_body(src, idx, fs, rs)</div><div class='del'>-        if res_type == :DT_EOS</div><div class='del'>-          if idx == idx_backup #((parsed_cells == 0) and cell.nil?)</div><div class='del'>-            return 0, 0</div><div class='del'>-          end</div><div class='del'>-          res_type = :DT_ROWSEP</div><div class='del'>-        end</div><div class='del'>-        parsed_cells += 1</div><div class='del'>-        out_dev &lt;&lt; cell</div><div class='del'>-      end</div><div class='del'>-    rescue IllegalFormatError</div><div class='del'>-      return 0, 0</div><div class='del'>-    end</div><div class='del'>-    return parsed_cells, idx</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Convert a line from cells data to string.  Consider using CSV.generate_line</div><div class='del'>-  # instead.  To generate multi-row CSV string, see EXAMPLE below.</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE</div><div class='del'>-  #   row1 = ['a', 'b']</div><div class='del'>-  #   row2 = ['c', 'd']</div><div class='del'>-  #   row3 = ['e', 'f']</div><div class='del'>-  #   src = [row1, row2, row3]</div><div class='del'>-  #   buf = ''</div><div class='del'>-  #   src.each do |row|</div><div class='del'>-  #     parsed_cells = CSV.generate_row(row, 2, buf)</div><div class='del'>-  #     puts "Created #{ parsed_cells } cells."</div><div class='del'>-  #   end</div><div class='del'>-  #   p buf</div><div class='del'>-  #</div><div class='del'>-  # ARGS</div><div class='del'>-  #   src: an Array of String to be converted to CSV string.  Must respond to</div><div class='del'>-  #     'size' and '[](idx)'.  src[idx] must return String.</div><div class='del'>-  #   cells: num of cells in a line.</div><div class='del'>-  #   out_dev: buffer for generated CSV string.  Must respond to '&lt;&lt;(string)'.</div><div class='del'>-  #   col_sep: Column separator.  ?, by default.  If you want to separate</div><div class='del'>-  #     fields with semicolon, give ?; here.</div><div class='del'>-  #   row_sep: Row separator.  nil by default.  nil means "\r\n or \n".  If you</div><div class='del'>-  #     want to separate records with \r, give ?\r here.</div><div class='del'>-  #</div><div class='del'>-  # RETURNS</div><div class='del'>-  #   parsed_cells: num of converted cells.</div><div class='del'>-  #</div><div class='del'>-  def CSV.generate_row(src, cells, out_dev, fs = nil, rs = nil)</div><div class='del'>-    fs ||= ','</div><div class='del'>-    if fs.is_a?(Fixnum)</div><div class='del'>-      fs = fs.chr</div><div class='del'>-    end</div><div class='del'>-    if !rs.nil? and rs.is_a?(Fixnum)</div><div class='del'>-      rs = rs.chr</div><div class='del'>-    end</div><div class='del'>-    src_size = src.size</div><div class='del'>-    if (src_size == 0)</div><div class='del'>-      if cells == 0</div><div class='del'>-        generate_separator(:DT_ROWSEP, out_dev, fs, rs)</div><div class='del'>-      end</div><div class='del'>-      return 0</div><div class='del'>-    end</div><div class='del'>-    res_type = :DT_COLSEP</div><div class='del'>-    parsed_cells = 0</div><div class='del'>-    generate_body(src[parsed_cells], out_dev, fs, rs)</div><div class='del'>-    parsed_cells += 1</div><div class='del'>-    while ((parsed_cells &lt; cells) and (parsed_cells != src_size))</div><div class='del'>-      generate_separator(:DT_COLSEP, out_dev, fs, rs)</div><div class='del'>-      generate_body(src[parsed_cells], out_dev, fs, rs)</div><div class='del'>-      parsed_cells += 1</div><div class='del'>-    end</div><div class='del'>-    if (parsed_cells == cells)</div><div class='del'>-      generate_separator(:DT_ROWSEP, out_dev, fs, rs)</div><div class='del'>-    else</div><div class='del'>-      generate_separator(:DT_COLSEP, out_dev, fs, rs)</div><div class='del'>-    end</div><div class='del'>-    parsed_cells</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Private class methods.</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def open_reader(path, mode, fs, rs, &amp;block)</div><div class='del'>-      file = File.open(path, mode)</div><div class='del'>-      if block</div><div class='del'>-        begin</div><div class='del'>-          CSV::Reader.parse(file, fs, rs) do |row|</div><div class='del'>-            yield(row)</div><div class='del'>-          end</div><div class='del'>-        ensure</div><div class='del'>-          file.close</div><div class='del'>-        end</div><div class='del'>-        nil</div><div class='del'>-      else</div><div class='del'>-        reader = CSV::Reader.create(file, fs, rs)</div><div class='del'>-        reader.close_on_terminate</div><div class='del'>-        reader</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def open_writer(path, mode, fs, rs, &amp;block)</div><div class='del'>-      file = File.open(path, mode)</div><div class='del'>-      if block</div><div class='del'>-        begin</div><div class='del'>-          CSV::Writer.generate(file, fs, rs) do |writer|</div><div class='del'>-            yield(writer)</div><div class='del'>-          end</div><div class='del'>-        ensure</div><div class='del'>-          file.close</div><div class='del'>-        end</div><div class='del'>-        nil</div><div class='del'>-      else</div><div class='del'>-        writer = CSV::Writer.create(file, fs, rs) </div><div class='del'>-        writer.close_on_terminate</div><div class='del'>-        writer</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_body(src, idx, fs, rs)</div><div class='del'>-      fs_str = fs</div><div class='del'>-      fs_size = fs_str.size</div><div class='del'>-      rs_str = rs || "\n"</div><div class='del'>-      rs_size = rs_str.size</div><div class='del'>-      fs_idx = rs_idx = 0</div><div class='del'>-      cell = Cell.new</div><div class='del'>-      state = :ST_START</div><div class='del'>-      quoted = cr = false</div><div class='del'>-      c = nil</div><div class='del'>-      last_idx = idx</div><div class='del'>-      while c = src[idx]</div><div class='del'>-        unless quoted</div><div class='del'>-          fschar = (c == fs_str[fs_idx])</div><div class='del'>-          rschar = (c == rs_str[rs_idx])</div><div class='del'>-          # simple 1 char backtrack</div><div class='del'>-          if !fschar and c == fs_str[0]</div><div class='del'>-            fs_idx = 0</div><div class='del'>-            fschar = true</div><div class='del'>-            if state == :ST_START</div><div class='del'>-              state = :ST_DATA</div><div class='del'>-            elsif state == :ST_QUOTE</div><div class='del'>-              raise IllegalFormatError</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if !rschar and c == rs_str[0]</div><div class='del'>-            rs_idx = 0</div><div class='del'>-            rschar = true</div><div class='del'>-            if state == :ST_START</div><div class='del'>-              state = :ST_DATA</div><div class='del'>-            elsif state == :ST_QUOTE</div><div class='del'>-              raise IllegalFormatError</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if c == ?"</div><div class='del'>-          fs_idx = rs_idx = 0</div><div class='del'>-          if cr</div><div class='del'>-            raise IllegalFormatError</div><div class='del'>-          end</div><div class='del'>-          cell &lt;&lt; src[last_idx, (idx - last_idx)]</div><div class='del'>-          last_idx = idx</div><div class='del'>-          if state == :ST_DATA</div><div class='del'>-            if quoted</div><div class='del'>-              last_idx += 1</div><div class='del'>-              quoted = false</div><div class='del'>-              state = :ST_QUOTE</div><div class='del'>-            else</div><div class='del'>-              raise IllegalFormatError</div><div class='del'>-            end</div><div class='del'>-          elsif state == :ST_QUOTE</div><div class='del'>-            cell &lt;&lt; c.chr</div><div class='del'>-            last_idx += 1</div><div class='del'>-            quoted = true</div><div class='del'>-            state = :ST_DATA</div><div class='del'>-          else  # :ST_START</div><div class='del'>-            quoted = true</div><div class='del'>-            last_idx += 1</div><div class='del'>-            state = :ST_DATA</div><div class='del'>-          end</div><div class='del'>-        elsif fschar or rschar</div><div class='del'>-          if fschar</div><div class='del'>-            fs_idx += 1</div><div class='del'>-          end</div><div class='del'>-          if rschar</div><div class='del'>-            rs_idx += 1</div><div class='del'>-          end</div><div class='del'>-          sep = nil</div><div class='del'>-          if fs_idx == fs_size</div><div class='del'>-            if state == :ST_START and rs_idx &gt; 0 and fs_idx &lt; rs_idx</div><div class='del'>-              state = :ST_DATA</div><div class='del'>-            end</div><div class='del'>-            cell &lt;&lt; src[last_idx, (idx - last_idx - (fs_size - 1))]</div><div class='del'>-            last_idx = idx</div><div class='del'>-            fs_idx = rs_idx = 0</div><div class='del'>-            if cr</div><div class='del'>-              raise IllegalFormatError</div><div class='del'>-            end</div><div class='del'>-            sep = :DT_COLSEP</div><div class='del'>-          elsif rs_idx == rs_size</div><div class='del'>-            if state == :ST_START and fs_idx &gt; 0 and rs_idx &lt; fs_idx</div><div class='del'>-              state = :ST_DATA</div><div class='del'>-            end</div><div class='del'>-            if !(rs.nil? and cr)</div><div class='del'>-              cell &lt;&lt; src[last_idx, (idx - last_idx - (rs_size - 1))]</div><div class='del'>-              last_idx = idx</div><div class='del'>-            end</div><div class='del'>-            fs_idx = rs_idx = 0</div><div class='del'>-            sep = :DT_ROWSEP</div><div class='del'>-          end</div><div class='del'>-          if sep</div><div class='del'>-            if state == :ST_DATA</div><div class='del'>-              return sep, idx + 1, cell;</div><div class='del'>-            elsif state == :ST_QUOTE</div><div class='del'>-              return sep, idx + 1, cell;</div><div class='del'>-            else  # :ST_START</div><div class='del'>-              return sep, idx + 1, nil</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        elsif rs.nil? and c == ?\r</div><div class='del'>-          # special \r treatment for backward compatibility</div><div class='del'>-          fs_idx = rs_idx = 0</div><div class='del'>-          if cr</div><div class='del'>-            raise IllegalFormatError</div><div class='del'>-          end</div><div class='del'>-          cell &lt;&lt; src[last_idx, (idx - last_idx)]</div><div class='del'>-          last_idx = idx</div><div class='del'>-          if quoted</div><div class='del'>-            state = :ST_DATA</div><div class='del'>-          else</div><div class='del'>-            cr = true</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          fs_idx = rs_idx = 0</div><div class='del'>-          if state == :ST_DATA or state == :ST_START</div><div class='del'>-            if cr</div><div class='del'>-              raise IllegalFormatError</div><div class='del'>-            end</div><div class='del'>-            state = :ST_DATA</div><div class='del'>-          else  # :ST_QUOTE</div><div class='del'>-            raise IllegalFormatError</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'>-      if state == :ST_START</div><div class='del'>-        if fs_idx &gt; 0 or rs_idx &gt; 0</div><div class='del'>-          state = :ST_DATA</div><div class='del'>-        else</div><div class='del'>-          return :DT_EOS, idx, nil</div><div class='del'>-        end</div><div class='del'>-      elsif quoted</div><div class='del'>-        raise IllegalFormatError</div><div class='del'>-      elsif cr</div><div class='del'>-        raise IllegalFormatError</div><div class='del'>-      end</div><div class='del'>-      cell &lt;&lt; src[last_idx, (idx - last_idx)]</div><div class='del'>-      last_idx = idx</div><div class='del'>-      return :DT_EOS, idx, cell</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    def generate_body(cell, out_dev, fs, rs)</div><div class='del'>-      if cell.nil?</div><div class='del'>-        # empty</div><div class='del'>-      else</div><div class='del'>-        cell = cell.to_s</div><div class='del'>-        row_data = cell.dup</div><div class='del'>-        if (row_data.gsub!('"', '""') or</div><div class='del'>-            row_data.index(fs) or</div><div class='del'>-            (rs and row_data.index(rs)) or</div><div class='del'>-            (/[\r\n]/ =~ row_data) or</div><div class='del'>-            (cell.empty?))</div><div class='del'>-          out_dev &lt;&lt; '"' &lt;&lt; row_data &lt;&lt; '"'</div><div class='del'>-        else</div><div class='del'>-          out_dev &lt;&lt; row_data</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def generate_separator(type, out_dev, fs, rs)</div><div class='del'>-      case type</div><div class='del'>-      when :DT_COLSEP</div><div class='del'>-        out_dev &lt;&lt; fs</div><div class='del'>-      when :DT_ROWSEP</div><div class='del'>-        out_dev &lt;&lt; (rs || "\n")</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'>-  # CSV formatted string/stream reader.</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE</div><div class='del'>-  #   read CSV lines untill the first column is 'stop'.</div><div class='del'>-  #</div><div class='del'>-  #   CSV::Reader.parse(File.open('bigdata', 'rb')) do |row|</div><div class='del'>-  #     p row</div><div class='del'>-  #     break if !row[0].is_null &amp;&amp; row[0].data == 'stop'</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  class Reader</div><div class='del'>-    include Enumerable</div><div class='del'>-</div><div class='del'>-    # Parse CSV data and get lines.  Given block is called for each parsed row.</div><div class='del'>-    # Block value is always nil.  Rows are not cached for performance reason.</div><div class='del'>-    def Reader.parse(str_or_readable, fs = ',', rs = nil, &amp;block)</div><div class='del'>-      reader = Reader.create(str_or_readable, fs, rs)</div><div class='del'>-      if block</div><div class='del'>-        reader.each do |row|</div><div class='del'>-          yield(row)</div><div class='del'>-        end</div><div class='del'>-        reader.close</div><div class='del'>-        nil</div><div class='del'>-      else</div><div class='del'>-        reader</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns reader instance.</div><div class='del'>-    def Reader.create(str_or_readable, fs = ',', rs = nil)</div><div class='del'>-      case str_or_readable</div><div class='del'>-      when IO</div><div class='del'>-        IOReader.new(str_or_readable, fs, rs)</div><div class='del'>-      when String</div><div class='del'>-        StringReader.new(str_or_readable, fs, rs)</div><div class='del'>-      else</div><div class='del'>-        IOReader.new(str_or_readable, fs, rs)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def each</div><div class='del'>-      while true</div><div class='del'>-        row = []</div><div class='del'>-        parsed_cells = get_row(row)</div><div class='del'>-        if parsed_cells == 0</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-        yield(row)</div><div class='del'>-      end</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def shift</div><div class='del'>-      row = []</div><div class='del'>-      parsed_cells = get_row(row)</div><div class='del'>-      row</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def close</div><div class='del'>-      terminate</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def initialize(dev)</div><div class='del'>-      raise RuntimeError.new('Do not instanciate this class directly.')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_row(row)</div><div class='del'>-      raise NotImplementedError.new('Method get_row must be defined in a derived class.')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def terminate</div><div class='del'>-      # Define if needed.</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-</div><div class='del'>-  class StringReader &lt; Reader</div><div class='del'>-    def initialize(string, fs = ',', rs = nil)</div><div class='del'>-      @fs = fs</div><div class='del'>-      @rs = rs</div><div class='del'>-      @dev = string</div><div class='del'>-      @idx = 0</div><div class='del'>-      if @dev[0, 3] == "\xef\xbb\xbf"</div><div class='del'>-        @idx += 3</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def get_row(row)</div><div class='del'>-      parsed_cells, next_idx = CSV.parse_row(@dev, @idx, row, @fs, @rs)</div><div class='del'>-      if parsed_cells == 0 and next_idx == 0 and @idx != @dev.size</div><div class='del'>-        raise IllegalFormatError.new</div><div class='del'>-      end</div><div class='del'>-      @idx = next_idx</div><div class='del'>-      parsed_cells</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class IOReader &lt; Reader</div><div class='del'>-    def initialize(io, fs = ',', rs = nil)</div><div class='del'>-      @io = io</div><div class='del'>-      @fs = fs</div><div class='del'>-      @rs = rs</div><div class='del'>-      @dev = CSV::IOBuf.new(@io)</div><div class='del'>-      @idx = 0</div><div class='del'>-      if @dev[0] == 0xef and @dev[1] == 0xbb and @dev[2] == 0xbf</div><div class='del'>-        @idx += 3</div><div class='del'>-      end</div><div class='del'>-      @close_on_terminate = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Tell this reader to close the IO when terminated (Triggered by invoking</div><div class='del'>-    # CSV::IOReader#close).</div><div class='del'>-    def close_on_terminate</div><div class='del'>-      @close_on_terminate = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def get_row(row)</div><div class='del'>-      parsed_cells, next_idx = CSV.parse_row(@dev, @idx, row, @fs, @rs)</div><div class='del'>-      if parsed_cells == 0 and next_idx == 0 and !@dev.is_eos?</div><div class='del'>-        raise IllegalFormatError.new</div><div class='del'>-      end</div><div class='del'>-      dropped = @dev.drop(next_idx)</div><div class='del'>-      @idx = next_idx - dropped</div><div class='del'>-      parsed_cells</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def terminate</div><div class='del'>-      if @close_on_terminate</div><div class='del'>-        @io.close</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if @dev</div><div class='del'>-        @dev.close</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'>-  # CSV formatted string/stream writer.</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE</div><div class='del'>-  #   Write rows to 'csvout' file.</div><div class='del'>-  #</div><div class='del'>-  #   outfile = File.open('csvout', 'wb')</div><div class='del'>-  #   CSV::Writer.generate(outfile) do |csv|</div><div class='del'>-  #     csv &lt;&lt; ['c1', nil, '', '"', "\r\n", 'c2']</div><div class='del'>-  #     ...</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  #   outfile.close</div><div class='del'>-  #</div><div class='del'>-  class Writer</div><div class='del'>-    # Given block is called with the writer instance.  str_or_writable must</div><div class='del'>-    # handle '&lt;&lt;(string)'.</div><div class='del'>-    def Writer.generate(str_or_writable, fs = ',', rs = nil, &amp;block)</div><div class='del'>-      writer = Writer.create(str_or_writable, fs, rs)</div><div class='del'>-      if block</div><div class='del'>-        yield(writer)</div><div class='del'>-        writer.close</div><div class='del'>-        nil</div><div class='del'>-      else</div><div class='del'>-        writer</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # str_or_writable must handle '&lt;&lt;(string)'.</div><div class='del'>-    def Writer.create(str_or_writable, fs = ',', rs = nil)</div><div class='del'>-      BasicWriter.new(str_or_writable, fs, rs)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # dump CSV stream to the device.  argument must be an Array of String.</div><div class='del'>-    def &lt;&lt;(row)</div><div class='del'>-      CSV.generate_row(row, row.size, @dev, @fs, @rs)</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    alias add_row &lt;&lt;</div><div class='del'>-</div><div class='del'>-    def close</div><div class='del'>-      terminate</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def initialize(dev)</div><div class='del'>-      raise RuntimeError.new('Do not instanciate this class directly.')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def terminate</div><div class='del'>-      # Define if needed.</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class BasicWriter &lt; Writer</div><div class='del'>-    def initialize(str_or_writable, fs = ',', rs = nil)</div><div class='del'>-      @fs = fs</div><div class='del'>-      @rs = rs</div><div class='del'>-      @dev = str_or_writable</div><div class='del'>-      @close_on_terminate = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Tell this writer to close the IO when terminated (Triggered by invoking</div><div class='del'>-    # CSV::BasicWriter#close).</div><div class='del'>-    def close_on_terminate</div><div class='del'>-      @close_on_terminate = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def terminate</div><div class='del'>-      if @close_on_terminate</div><div class='del'>-        @dev.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-private</div><div class='del'>-</div><div class='del'>-  # Buffered stream.</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE 1 -- an IO.</div><div class='del'>-  #   class MyBuf &lt; StreamBuf</div><div class='del'>-  #     # Do initialize myself before a super class.  Super class might call my</div><div class='del'>-  #     # method 'read'. (Could be awful for C++ user. :-)</div><div class='del'>-  #     def initialize(s)</div><div class='del'>-  #       @s = s</div><div class='del'>-  #       super()</div><div class='del'>-  #     end</div><div class='del'>-  #</div><div class='del'>-  #     # define my own 'read' method.</div><div class='del'>-  #     # CAUTION: Returning nil means EnfOfStream.</div><div class='del'>-  #     def read(size)</div><div class='del'>-  #       @s.read(size)</div><div class='del'>-  #     end</div><div class='del'>-  #</div><div class='del'>-  #     # release buffers. in Ruby which has GC, you do not have to call this...</div><div class='del'>-  #     def terminate</div><div class='del'>-  #       @s = nil</div><div class='del'>-  #       super()</div><div class='del'>-  #     end</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  #   buf = MyBuf.new(STDIN)</div><div class='del'>-  #   my_str = ''</div><div class='del'>-  #   p buf[0, 0]               # =&gt; '' (null string)</div><div class='del'>-  #   p buf[0]                  # =&gt; 97 (char code of 'a')</div><div class='del'>-  #   p buf[0, 1]               # =&gt; 'a'</div><div class='del'>-  #   my_str = buf[0, 5]</div><div class='del'>-  #   p my_str                  # =&gt; 'abcde' (5 chars)</div><div class='del'>-  #   p buf[0, 6]               # =&gt; "abcde\n" (6 chars)</div><div class='del'>-  #   p buf[0, 7]               # =&gt; "abcde\n" (6 chars)</div><div class='del'>-  #   p buf.drop(3)             # =&gt; 3 (dropped chars)</div><div class='del'>-  #   p buf.get(0, 2)           # =&gt; 'de' (2 chars)</div><div class='del'>-  #   p buf.is_eos?             # =&gt; false (is not EOS here)</div><div class='del'>-  #   p buf.drop(5)             # =&gt; 3 (dropped chars)</div><div class='del'>-  #   p buf.is_eos?             # =&gt; true (is EOS here)</div><div class='del'>-  #   p buf[0]                  # =&gt; nil (is EOS here)</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE 2 -- String.</div><div class='del'>-  #   This is a conceptual example.  No pros with this.</div><div class='del'>-  #</div><div class='del'>-  #   class StrBuf &lt; StreamBuf</div><div class='del'>-  #     def initialize(s)</div><div class='del'>-  #       @str = s</div><div class='del'>-  #       @idx = 0</div><div class='del'>-  #       super()</div><div class='del'>-  #     end</div><div class='del'>-  #</div><div class='del'>-  #     def read(size)</div><div class='del'>-  #       str = @str[@idx, size]</div><div class='del'>-  #       @idx += str.size</div><div class='del'>-  #       str</div><div class='del'>-  #     end</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  class StreamBuf</div><div class='del'>-    # get a char or a partial string from the stream.</div><div class='del'>-    # idx: index of a string to specify a start point of a string to get.</div><div class='del'>-    # unlike String instance, idx &lt; 0 returns nil.</div><div class='del'>-    # n: size of a string to get.</div><div class='del'>-    # returns char at idx if n == nil.</div><div class='del'>-    # returns a partial string, from idx to (idx + n) if n != nil.  at EOF,</div><div class='del'>-    # the string size could not equal to arg n.</div><div class='del'>-    def [](idx, n = nil) </div><div class='del'>-      if idx &lt; 0</div><div class='del'>-        return nil</div><div class='del'>-      end</div><div class='del'>-      if (idx_is_eos?(idx))</div><div class='del'>-        if n and (@offset + idx == buf_size(@cur_buf))</div><div class='del'>-          # Like a String, 'abc'[4, 1] returns nil and</div><div class='del'>-          # 'abc'[3, 1] returns '' not nil.</div><div class='del'>-          return ''</div><div class='del'>-        else</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      my_buf = @cur_buf</div><div class='del'>-      my_offset = @offset</div><div class='del'>-      next_idx = idx</div><div class='del'>-      while (my_offset + next_idx &gt;= buf_size(my_buf))</div><div class='del'>-        if (my_buf == @buf_tail_idx)</div><div class='del'>-          unless add_buf</div><div class='del'>-            break</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        next_idx = my_offset + next_idx - buf_size(my_buf)</div><div class='del'>-        my_buf += 1</div><div class='del'>-        my_offset = 0</div><div class='del'>-      end</div><div class='del'>-      loc = my_offset + next_idx</div><div class='del'>-      if !n</div><div class='del'>-        return @buf_list[my_buf][loc]           # Fixnum of char code.</div><div class='del'>-      elsif (loc + n - 1 &lt; buf_size(my_buf))</div><div class='del'>-        return @buf_list[my_buf][loc, n]        # String.</div><div class='del'>-      else # should do loop insted of (tail) recursive call...</div><div class='del'>-        res = @buf_list[my_buf][loc, BufSize]</div><div class='del'>-        size_added = buf_size(my_buf) - loc</div><div class='del'>-        if size_added &gt; 0</div><div class='del'>-          idx += size_added</div><div class='del'>-          n -= size_added</div><div class='del'>-          ret = self[idx, n]</div><div class='del'>-          if ret</div><div class='del'>-            res &lt;&lt; ret</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        return res</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias get []</div><div class='del'>-  </div><div class='del'>-    # drop a string from the stream.</div><div class='del'>-    # returns dropped size.  at EOF, dropped size might not equals to arg n.</div><div class='del'>-    # Once you drop the head of the stream, access to the dropped part via []</div><div class='del'>-    # or get returns nil.</div><div class='del'>-    def drop(n)</div><div class='del'>-      if is_eos?</div><div class='del'>-        return 0</div><div class='del'>-      end</div><div class='del'>-      size_dropped = 0</div><div class='del'>-      while (n &gt; 0)</div><div class='del'>-        if !@is_eos or (@cur_buf != @buf_tail_idx)</div><div class='del'>-          if (@offset + n &lt; buf_size(@cur_buf))</div><div class='del'>-            size_dropped += n</div><div class='del'>-            @offset += n</div><div class='del'>-            n = 0</div><div class='del'>-          else</div><div class='del'>-            size = buf_size(@cur_buf) - @offset</div><div class='del'>-            size_dropped += size</div><div class='del'>-            n -= size</div><div class='del'>-            @offset = 0</div><div class='del'>-            unless rel_buf</div><div class='del'>-              unless add_buf</div><div class='del'>-                break</div><div class='del'>-              end</div><div class='del'>-              @cur_buf = @buf_tail_idx</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      size_dropped</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    def is_eos?</div><div class='del'>-      return idx_is_eos?(0)</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    # WARN: Do not instantiate this class directly.  Define your own class</div><div class='del'>-    # which derives this class and define 'read' instance method.</div><div class='del'>-    def initialize</div><div class='del'>-      @buf_list = []</div><div class='del'>-      @cur_buf = @buf_tail_idx = -1</div><div class='del'>-      @offset = 0</div><div class='del'>-      @is_eos = false</div><div class='del'>-      add_buf</div><div class='del'>-      @cur_buf = @buf_tail_idx</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-  protected</div><div class='del'>-</div><div class='del'>-    def terminate</div><div class='del'>-      while (rel_buf); end</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    # protected method 'read' must be defined in derived classes.</div><div class='del'>-    # CAUTION: Returning a string which size is not equal to 'size' means</div><div class='del'>-    # EnfOfStream.  When it is not at EOS, you must block the callee, try to</div><div class='del'>-    # read and return the sized string.</div><div class='del'>-    def read(size) # raise EOFError</div><div class='del'>-      raise NotImplementedError.new('Method read must be defined in a derived class.')</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-  private</div><div class='del'>-  </div><div class='del'>-    def buf_size(idx)</div><div class='del'>-      @buf_list[idx].size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_buf</div><div class='del'>-      if @is_eos</div><div class='del'>-        return false</div><div class='del'>-      end</div><div class='del'>-      begin</div><div class='del'>-        str_read = read(BufSize)</div><div class='del'>-      rescue EOFError</div><div class='del'>-        str_read = nil</div><div class='del'>-      rescue</div><div class='del'>-        terminate</div><div class='del'>-        raise</div><div class='del'>-      end</div><div class='del'>-      if str_read.nil?</div><div class='del'>-        @is_eos = true</div><div class='del'>-        @buf_list.push('')</div><div class='del'>-        @buf_tail_idx += 1</div><div class='del'>-        false</div><div class='del'>-      else</div><div class='del'>-        @buf_list.push(str_read)</div><div class='del'>-        @buf_tail_idx += 1</div><div class='del'>-        true</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    def rel_buf</div><div class='del'>-      if (@cur_buf &lt; 0)</div><div class='del'>-        return false</div><div class='del'>-      end</div><div class='del'>-      @buf_list[@cur_buf] = nil</div><div class='del'>-      if (@cur_buf == @buf_tail_idx)</div><div class='del'>-        @cur_buf = -1</div><div class='del'>-        return false</div><div class='del'>-      else</div><div class='del'>-        @cur_buf += 1</div><div class='del'>-        return true</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    def idx_is_eos?(idx)</div><div class='del'>-      (@is_eos and ((@cur_buf &lt; 0) or (@cur_buf == @buf_tail_idx)))</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    BufSize = 1024 * 8</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Buffered IO.</div><div class='del'>-  #</div><div class='del'>-  # EXAMPLE</div><div class='del'>-  #   # File 'bigdata' could be a giga-byte size one!</div><div class='del'>-  #   buf = CSV::IOBuf.new(File.open('bigdata', 'rb'))</div><div class='del'>-  #   CSV::Reader.new(buf).each do |row|</div><div class='del'>-  #     p row</div><div class='del'>-  #     break if row[0].data == 'admin'</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  class IOBuf &lt; StreamBuf</div><div class='del'>-    def initialize(s)</div><div class='del'>-      @s = s</div><div class='del'>-      super()</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    def close</div><div class='del'>-      terminate</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def read(size)</div><div class='del'>-      @s.read(size)</div><div class='del'>-    end</div><div class='del'>- </div><div class='del'>-    def terminate</div><div class='del'>-      super()</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/date.rb b/lib/date.rb<br/>deleted file mode 100644<br/>index 90a4a01ca3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/date.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/date.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1767 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# date.rb - date and time library</div><div class='del'>-#</div><div class='del'>-# Author: Tadayoshi Funaba 1998-2008</div><div class='del'>-#</div><div class='del'>-# Documentation: William Webber &lt;william@williamwebber.com&gt;</div><div class='del'>-#</div><div class='del'>-#--</div><div class='del'>-# $Id: date.rb,v 2.37 2008-01-17 20:16:31+09 tadf Exp $</div><div class='del'>-#++</div><div class='del'>-#</div><div class='del'>-# == Overview</div><div class='del'>-#</div><div class='del'>-# This file provides two classes for working with</div><div class='del'>-# dates and times.</div><div class='del'>-#</div><div class='del'>-# The first class, Date, represents dates.</div><div class='del'>-# It works with years, months, weeks, and days.</div><div class='del'>-# See the Date class documentation for more details.</div><div class='del'>-#</div><div class='del'>-# The second, DateTime, extends Date to include hours,</div><div class='del'>-# minutes, seconds, and fractions of a second.  It</div><div class='del'>-# provides basic support for time zones.  See the</div><div class='del'>-# DateTime class documentation for more details.</div><div class='del'>-#</div><div class='del'>-# === Ways of calculating the date.</div><div class='del'>-#</div><div class='del'>-# In common usage, the date is reckoned in years since or</div><div class='del'>-# before the Common Era (CE/BCE, also known as AD/BC), then</div><div class='del'>-# as a month and day-of-the-month within the current year.</div><div class='del'>-# This is known as the *Civil* *Date*, and abbreviated</div><div class='del'>-# as +civil+ in the Date class.</div><div class='del'>-#</div><div class='del'>-# Instead of year, month-of-the-year,  and day-of-the-month,</div><div class='del'>-# the date can also be reckoned in terms of year and</div><div class='del'>-# day-of-the-year.  This is known as the *Ordinal* *Date*,</div><div class='del'>-# and is abbreviated as +ordinal+ in the Date class.  (Note</div><div class='del'>-# that referring to this as the Julian date is incorrect.)</div><div class='del'>-#</div><div class='del'>-# The date can also be reckoned in terms of year, week-of-the-year,</div><div class='del'>-# and day-of-the-week.  This is known as the *Commercial*</div><div class='del'>-# *Date*, and is abbreviated as +commercial+ in the</div><div class='del'>-# Date class.  The commercial week runs Monday (day-of-the-week</div><div class='del'>-# 1) to Sunday (day-of-the-week 7), in contrast to the civil</div><div class='del'>-# week which runs Sunday (day-of-the-week 0) to Saturday</div><div class='del'>-# (day-of-the-week 6).  The first week of the commercial year</div><div class='del'>-# starts on the Monday on or before January 1, and the commercial</div><div class='del'>-# year itself starts on this Monday, not January 1.</div><div class='del'>-#</div><div class='del'>-# For scientific purposes, it is convenient to refer to a date</div><div class='del'>-# simply as a day count, counting from an arbitrary initial</div><div class='del'>-# day.  The date first chosen for this was January 1, 4713 BCE.</div><div class='del'>-# A count of days from this date is the *Julian* *Day* *Number*</div><div class='del'>-# or *Julian* *Date*, which is abbreviated as +jd+ in the</div><div class='del'>-# Date class.  This is in local time, and counts from midnight</div><div class='del'>-# on the initial day.  The stricter usage is in UTC, and counts</div><div class='del'>-# from midday on the initial day.  This is referred to in the</div><div class='del'>-# Date class as the *Astronomical* *Julian* *Day* *Number*, and</div><div class='del'>-# abbreviated as +ajd+.  In the Date class, the Astronomical</div><div class='del'>-# Julian Day Number includes fractional days.</div><div class='del'>-#</div><div class='del'>-# Another absolute day count is the *Modified* *Julian* *Day*</div><div class='del'>-# *Number*, which takes November 17, 1858 as its initial day.</div><div class='del'>-# This is abbreviated as +mjd+ in the Date class.  There</div><div class='del'>-# is also an *Astronomical* *Modified* *Julian* *Day* *Number*,</div><div class='del'>-# which is in UTC and includes fractional days.  This is</div><div class='del'>-# abbreviated as +amjd+ in the Date class.  Like the Modified</div><div class='del'>-# Julian Day Number (and unlike the Astronomical Julian</div><div class='del'>-# Day Number), it counts from midnight.</div><div class='del'>-#</div><div class='del'>-# Alternative calendars such as the Chinese Lunar Calendar,</div><div class='del'>-# the Islamic Calendar, or the French Revolutionary Calendar</div><div class='del'>-# are not supported by the Date class; nor are calendars that</div><div class='del'>-# are based on an Era different from the Common Era, such as</div><div class='del'>-# the Japanese Imperial Calendar or the Republic of China</div><div class='del'>-# Calendar.</div><div class='del'>-#</div><div class='del'>-# === Calendar Reform</div><div class='del'>-#</div><div class='del'>-# The standard civil year is 365 days long.  However, the</div><div class='del'>-# solar year is fractionally longer than this.  To account</div><div class='del'>-# for this, a *leap* *year* is occasionally inserted.  This</div><div class='del'>-# is a year with 366 days, the extra day falling on February 29.</div><div class='del'>-# In the early days of the civil calendar, every fourth</div><div class='del'>-# year without exception was a leap year.  This way of</div><div class='del'>-# reckoning leap years is the *Julian* *Calendar*.</div><div class='del'>-#</div><div class='del'>-# However, the solar year is marginally shorter than 365 1/4</div><div class='del'>-# days, and so the *Julian* *Calendar* gradually ran slow</div><div class='del'>-# over the centuries.  To correct this, every 100th year</div><div class='del'>-# (but not every 400th year) was excluded as a leap year.</div><div class='del'>-# This way of reckoning leap years, which we use today, is</div><div class='del'>-# the *Gregorian* *Calendar*.</div><div class='del'>-#</div><div class='del'>-# The Gregorian Calendar was introduced at different times</div><div class='del'>-# in different regions.  The day on which it was introduced</div><div class='del'>-# for a particular region is the *Day* *of* *Calendar*</div><div class='del'>-# *Reform* for that region.  This is abbreviated as +sg+</div><div class='del'>-# (for Start of Gregorian calendar) in the Date class.</div><div class='del'>-#</div><div class='del'>-# Two such days are of particular</div><div class='del'>-# significance.  The first is October 15, 1582, which was</div><div class='del'>-# the Day of Calendar Reform for Italy and most Catholic</div><div class='del'>-# countries.  The second is September 14, 1752, which was</div><div class='del'>-# the Day of Calendar Reform for England and its colonies</div><div class='del'>-# (including what is now the United States).  These two</div><div class='del'>-# dates are available as the constants Date::ITALY and</div><div class='del'>-# Date::ENGLAND, respectively.  (By comparison, Germany and</div><div class='del'>-# Holland, less Catholic than Italy but less stubborn than</div><div class='del'>-# England, changed over in 1698; Sweden in 1753; Russia not</div><div class='del'>-# till 1918, after the Revolution; and Greece in 1923.  Many</div><div class='del'>-# Orthodox churches still use the Julian Calendar.  A complete</div><div class='del'>-# list of Days of Calendar Reform can be found at</div><div class='del'>-# http://www.polysyllabic.com/GregConv.html.)</div><div class='del'>-#</div><div class='del'>-# Switching from the Julian to the Gregorian calendar</div><div class='del'>-# involved skipping a number of days to make up for the</div><div class='del'>-# accumulated lag, and the later the switch was (or is)</div><div class='del'>-# done, the more days need to be skipped.  So in 1582 in Italy,</div><div class='del'>-# 4th October was followed by 15th October, skipping 10 days; in 1752</div><div class='del'>-# in England, 2nd September was followed by 14th September, skipping</div><div class='del'>-# 11 days; and if I decided to switch from Julian to Gregorian</div><div class='del'>-# Calendar this midnight, I would go from 27th July 2003 (Julian)</div><div class='del'>-# today to 10th August 2003 (Gregorian) tomorrow, skipping</div><div class='del'>-# 13 days.  The Date class is aware of this gap, and a supposed</div><div class='del'>-# date that would fall in the middle of it is regarded as invalid.</div><div class='del'>-#</div><div class='del'>-# The Day of Calendar Reform is relevant to all date representations</div><div class='del'>-# involving years.  It is not relevant to the Julian Day Numbers,</div><div class='del'>-# except for converting between them and year-based representations.</div><div class='del'>-#</div><div class='del'>-# In the Date and DateTime classes, the Day of Calendar Reform or</div><div class='del'>-# +sg+ can be specified a number of ways.  First, it can be as</div><div class='del'>-# the Julian Day Number of the Day of Calendar Reform.  Second,</div><div class='del'>-# it can be using the constants Date::ITALY or Date::ENGLAND; these</div><div class='del'>-# are in fact the Julian Day Numbers of the Day of Calendar Reform</div><div class='del'>-# of the respective regions.  Third, it can be as the constant</div><div class='del'>-# Date::JULIAN, which means to always use the Julian Calendar.</div><div class='del'>-# Finally, it can be as the constant Date::GREGORIAN, which means</div><div class='del'>-# to always use the Gregorian Calendar.</div><div class='del'>-#</div><div class='del'>-# Note: in the Julian Calendar, New Years Day was March 25.  The</div><div class='del'>-# Date class does not follow this convention.</div><div class='del'>-#</div><div class='del'>-# === Time Zones</div><div class='del'>-#</div><div class='del'>-# DateTime objects support a simple representation</div><div class='del'>-# of time zones.  Time zones are represented as an offset</div><div class='del'>-# from UTC, as a fraction of a day.  This offset is the</div><div class='del'>-# how much local time is later (or earlier) than UTC.</div><div class='del'>-# UTC offset 0 is centred on England (also known as GMT).</div><div class='del'>-# As you travel east, the offset increases until you</div><div class='del'>-# reach the dateline in the middle of the Pacific Ocean;</div><div class='del'>-# as you travel west, the offset decreases.  This offset</div><div class='del'>-# is abbreviated as +of+ in the Date class.</div><div class='del'>-#</div><div class='del'>-# This simple representation of time zones does not take</div><div class='del'>-# into account the common practice of Daylight Savings</div><div class='del'>-# Time or Summer Time.</div><div class='del'>-#</div><div class='del'>-# Most DateTime methods return the date and the</div><div class='del'>-# time in local time.  The two exceptions are</div><div class='del'>-# #ajd() and #amjd(), which return the date and time</div><div class='del'>-# in UTC time, including fractional days.</div><div class='del'>-#</div><div class='del'>-# The Date class does not support time zone offsets, in that</div><div class='del'>-# there is no way to create a Date object with a time zone.</div><div class='del'>-# However, methods of the Date class when used by a</div><div class='del'>-# DateTime instance will use the time zone offset of this</div><div class='del'>-# instance.</div><div class='del'>-#</div><div class='del'>-# == Examples of use</div><div class='del'>-#</div><div class='del'>-# === Print out the date of every Sunday between two dates.</div><div class='del'>-#</div><div class='del'>-#     def print_sundays(d1, d2)</div><div class='del'>-#         d1 +=1 while (d1.wday != 0)</div><div class='del'>-#         d1.step(d2, 7) do |date|</div><div class='del'>-#             puts "#{Date::MONTHNAMES[date.mon]} #{date.day}"</div><div class='del'>-#         end</div><div class='del'>-#     end</div><div class='del'>-#</div><div class='del'>-#     print_sundays(Date::civil(2003, 4, 8), Date::civil(2003, 5, 23))</div><div class='del'>-#</div><div class='del'>-# === Calculate how many seconds to go till midnight on New Year's Day.</div><div class='del'>-#</div><div class='del'>-#     def secs_to_new_year(now = DateTime::now())</div><div class='del'>-#         new_year = DateTime.new(now.year + 1, 1, 1)</div><div class='del'>-#         dif = new_year - now</div><div class='del'>-#         hours, mins, secs, ignore_fractions = Date::day_fraction_to_time(dif)</div><div class='del'>-#         return hours * 60 * 60 + mins * 60 + secs</div><div class='del'>-#     end</div><div class='del'>-#</div><div class='del'>-#     puts secs_to_new_year()</div><div class='del'>-</div><div class='del'>-require 'rational'</div><div class='del'>-require 'date/format'</div><div class='del'>-</div><div class='del'>-# Class representing a date.</div><div class='del'>-#</div><div class='del'>-# See the documentation to the file date.rb for an overview.</div><div class='del'>-#</div><div class='del'>-# Internally, the date is represented as an Astronomical</div><div class='del'>-# Julian Day Number, +ajd+.  The Day of Calendar Reform, +sg+, is</div><div class='del'>-# also stored, for conversions to other date formats.  (There</div><div class='del'>-# is also an +of+ field for a time zone offset, but this</div><div class='del'>-# is only for the use of the DateTime subclass.)</div><div class='del'>-#</div><div class='del'>-# A new Date object is created using one of the object creation</div><div class='del'>-# class methods named after the corresponding date format, and the</div><div class='del'>-# arguments appropriate to that date format; for instance,</div><div class='del'>-# Date::civil() (aliased to Date::new()) with year, month,</div><div class='del'>-# and day-of-month, or Date::ordinal() with year and day-of-year.</div><div class='del'>-# All of these object creation class methods also take the</div><div class='del'>-# Day of Calendar Reform as an optional argument.</div><div class='del'>-#</div><div class='del'>-# Date objects are immutable once created.</div><div class='del'>-#</div><div class='del'>-# Once a Date has been created, date values</div><div class='del'>-# can be retrieved for the different date formats supported</div><div class='del'>-# using instance methods.  For instance, #mon() gives the</div><div class='del'>-# Civil month, #cwday() gives the Commercial day of the week,</div><div class='del'>-# and #yday() gives the Ordinal day of the year.  Date values</div><div class='del'>-# can be retrieved in any format, regardless of what format</div><div class='del'>-# was used to create the Date instance.</div><div class='del'>-#</div><div class='del'>-# The Date class includes the Comparable module, allowing</div><div class='del'>-# date objects to be compared and sorted, ranges of dates</div><div class='del'>-# to be created, and so forth.</div><div class='del'>-class Date</div><div class='del'>-</div><div class='del'>-  include Comparable</div><div class='del'>-</div><div class='del'>-  # Full month names, in English.  Months count from 1 to 12; a</div><div class='del'>-  # month's numerical representation indexed into this array</div><div class='del'>-  # gives the name of that month (hence the first element is nil).</div><div class='del'>-  MONTHNAMES = [nil] + %w(January February March April May June July</div><div class='del'>-			  August September October November December)</div><div class='del'>-</div><div class='del'>-  # Full names of days of the week, in English.  Days of the week</div><div class='del'>-  # count from 0 to 6 (except in the commercial week); a day's numerical</div><div class='del'>-  # representation indexed into this array gives the name of that day.</div><div class='del'>-  DAYNAMES = %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)</div><div class='del'>-</div><div class='del'>-  # Abbreviated month names, in English.</div><div class='del'>-  ABBR_MONTHNAMES = [nil] + %w(Jan Feb Mar Apr May Jun</div><div class='del'>-			       Jul Aug Sep Oct Nov Dec)</div><div class='del'>-</div><div class='del'>-  # Abbreviated day names, in English.</div><div class='del'>-  ABBR_DAYNAMES = %w(Sun Mon Tue Wed Thu Fri Sat)</div><div class='del'>-</div><div class='del'>-  [MONTHNAMES, DAYNAMES, ABBR_MONTHNAMES, ABBR_DAYNAMES].each do |xs|</div><div class='del'>-    xs.each{|x| x.freeze unless x.nil?}.freeze</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Infinity &lt; Numeric # :nodoc:</div><div class='del'>-</div><div class='del'>-    include Comparable</div><div class='del'>-</div><div class='del'>-    def initialize(d=1) @d = d &lt;=&gt; 0 end</div><div class='del'>-</div><div class='del'>-    def d() @d end</div><div class='del'>-</div><div class='del'>-    protected :d</div><div class='del'>-</div><div class='del'>-    def zero? () false end</div><div class='del'>-    def finite? () false end</div><div class='del'>-    def infinite? () d.nonzero? end</div><div class='del'>-    def nan? () d.zero? end</div><div class='del'>-</div><div class='del'>-    def abs() self.class.new end</div><div class='del'>-</div><div class='del'>-    def -@ () self.class.new(-d) end</div><div class='del'>-    def +@ () self.class.new(+d) end</div><div class='del'>-</div><div class='del'>-    def &lt;=&gt; (other)</div><div class='del'>-      case other</div><div class='del'>-      when Infinity; return d &lt;=&gt; other.d</div><div class='del'>-      when Numeric; return d</div><div class='del'>-      else</div><div class='del'>-	begin</div><div class='del'>-	  l, r = other.coerce(self)</div><div class='del'>-	  return l &lt;=&gt; r</div><div class='del'>-	rescue NoMethodError</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      nil</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 Numeric; return -d, d</div><div class='del'>-      else</div><div class='del'>-	super</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'>-  # The Julian Day Number of the Day of Calendar Reform for Italy</div><div class='del'>-  # and the Catholic countries.</div><div class='del'>-  ITALY     = 2299161 # 1582-10-15</div><div class='del'>-</div><div class='del'>-  # The Julian Day Number of the Day of Calendar Reform for England</div><div class='del'>-  # and her Colonies.</div><div class='del'>-  ENGLAND   = 2361222 # 1752-09-14</div><div class='del'>-</div><div class='del'>-  # A constant used to indicate that a Date should always use the</div><div class='del'>-  # Julian calendar.</div><div class='del'>-  JULIAN    =  Infinity.new</div><div class='del'>-</div><div class='del'>-  # A constant used to indicate that a Date should always use the</div><div class='del'>-  # Gregorian calendar.</div><div class='del'>-  GREGORIAN = -Infinity.new</div><div class='del'>-</div><div class='del'>-  HALF_DAYS_IN_DAY       = Rational(1, 2) # :nodoc:</div><div class='del'>-  HOURS_IN_DAY           = Rational(1, 24) # :nodoc:</div><div class='del'>-  MINUTES_IN_DAY         = Rational(1, 1440) # :nodoc:</div><div class='del'>-  SECONDS_IN_DAY         = Rational(1, 86400) # :nodoc:</div><div class='del'>-  MILLISECONDS_IN_DAY    = Rational(1, 86400*10**3) # :nodoc:</div><div class='del'>-  NANOSECONDS_IN_DAY     = Rational(1, 86400*10**9) # :nodoc:</div><div class='del'>-  MILLISECONDS_IN_SECOND = Rational(1, 10**3) # :nodoc:</div><div class='del'>-  NANOSECONDS_IN_SECOND  = Rational(1, 10**9) # :nodoc:</div><div class='del'>-</div><div class='del'>-  MJD_EPOCH_IN_AJD       = Rational(4800001, 2) # 1858-11-17 # :nodoc:</div><div class='del'>-  UNIX_EPOCH_IN_AJD      = Rational(4881175, 2) # 1970-01-01 # :nodoc:</div><div class='del'>-  MJD_EPOCH_IN_CJD       = 2400001 # :nodoc:</div><div class='del'>-  UNIX_EPOCH_IN_CJD      = 2440588 # :nodoc:</div><div class='del'>-  LD_EPOCH_IN_CJD        = 2299160 # :nodoc:</div><div class='del'>-</div><div class='del'>-  # Does a given Julian Day Number fall inside the old-style (Julian)</div><div class='del'>-  # calendar?</div><div class='del'>-  #</div><div class='del'>-  # +jd+ is the Julian Day Number in question. +sg+ may be Date::GREGORIAN,</div><div class='del'>-  # in which case the answer is false; it may be Date::JULIAN, in which case</div><div class='del'>-  # the answer is true; or it may a number representing the Day of</div><div class='del'>-  # Calendar Reform. Date::ENGLAND and Date::ITALY are two possible such</div><div class='del'>-  # days.</div><div class='del'>-</div><div class='del'>-  def self.julian? (jd, sg)</div><div class='del'>-    case sg</div><div class='del'>-    when Numeric</div><div class='del'>-      jd &lt; sg</div><div class='del'>-    else</div><div class='del'>-      if $VERBOSE</div><div class='del'>-	warn("#{caller.shift.sub(/:in .*/, '')}: " \</div><div class='del'>-"warning: do not use non-numerical object as julian day number anymore")</div><div class='del'>-      end</div><div class='del'>-      not sg</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Does a given Julian Day Number fall inside the new-style (Gregorian)</div><div class='del'>-  # calendar?</div><div class='del'>-  #</div><div class='del'>-  # The reverse of self.os?  See the documentation for that method for</div><div class='del'>-  # more details.</div><div class='del'>-  def self.gregorian? (jd, sg) !julian?(jd, sg) end</div><div class='del'>-</div><div class='del'>-  def self.fix_style(jd, sg) # :nodoc:</div><div class='del'>-    if julian?(jd, sg)</div><div class='del'>-    then JULIAN</div><div class='del'>-    else GREGORIAN end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :fix_style</div><div class='del'>-</div><div class='del'>-  # Convert an Ordinal Date to a Julian Day Number.</div><div class='del'>-  #</div><div class='del'>-  # +y+ and +d+ are the year and day-of-year to convert.</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # Returns the corresponding Julian Day Number.</div><div class='del'>-  def self.ordinal_to_jd(y, d, sg=GREGORIAN)</div><div class='del'>-    civil_to_jd(y, 1, d, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Convert a Julian Day Number to an Ordinal Date.</div><div class='del'>-  #</div><div class='del'>-  # +jd+ is the Julian Day Number to convert.</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # Returns the corresponding Ordinal Date as</div><div class='del'>-  # [year, day_of_year]</div><div class='del'>-  def self.jd_to_ordinal(jd, sg=GREGORIAN)</div><div class='del'>-    y = jd_to_civil(jd, sg)[0]</div><div class='del'>-    doy = jd - civil_to_jd(y - 1, 12, 31, fix_style(jd, sg))</div><div class='del'>-    return y, doy</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Convert a Civil Date to a Julian Day Number.</div><div class='del'>-  # +y+, +m+, and +d+ are the year, month, and day of the</div><div class='del'>-  # month.  +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # Returns the corresponding Julian Day Number.</div><div class='del'>-  def self.civil_to_jd(y, m, d, sg=GREGORIAN)</div><div class='del'>-    if m &lt;= 2</div><div class='del'>-      y -= 1</div><div class='del'>-      m += 12</div><div class='del'>-    end</div><div class='del'>-    a = (y / 100.0).floor</div><div class='del'>-    b = 2 - a + (a / 4.0).floor</div><div class='del'>-    jd = (365.25 * (y + 4716)).floor +</div><div class='del'>-      (30.6001 * (m + 1)).floor +</div><div class='del'>-      d + b - 1524</div><div class='del'>-    if julian?(jd, sg)</div><div class='del'>-      jd -= b</div><div class='del'>-    end</div><div class='del'>-    jd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Convert a Julian Day Number to a Civil Date.  +jd+ is</div><div class='del'>-  # the Julian Day Number. +sg+ specifies the Day of</div><div class='del'>-  # Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # Returns the corresponding [year, month, day_of_month]</div><div class='del'>-  # as a three-element array.</div><div class='del'>-  def self.jd_to_civil(jd, sg=GREGORIAN)</div><div class='del'>-    if julian?(jd, sg)</div><div class='del'>-      a = jd</div><div class='del'>-    else</div><div class='del'>-      x = ((jd - 1867216.25) / 36524.25).floor</div><div class='del'>-      a = jd + 1 + x - (x / 4.0).floor</div><div class='del'>-    end</div><div class='del'>-    b = a + 1524</div><div class='del'>-    c = ((b - 122.1) / 365.25).floor</div><div class='del'>-    d = (365.25 * c).floor</div><div class='del'>-    e = ((b - d) / 30.6001).floor</div><div class='del'>-    dom = b - d - (30.6001 * e).floor</div><div class='del'>-    if e &lt;= 13</div><div class='del'>-      m = e - 1</div><div class='del'>-      y = c - 4716</div><div class='del'>-    else</div><div class='del'>-      m = e - 13</div><div class='del'>-      y = c - 4715</div><div class='del'>-    end</div><div class='del'>-    return y, m, dom</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Convert a Commercial Date to a Julian Day Number.</div><div class='del'>-  #</div><div class='del'>-  # +y+, +w+, and +d+ are the (commercial) year, week of the year,</div><div class='del'>-  # and day of the week of the Commercial Date to convert.</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.commercial_to_jd(y, w, d, ns=GREGORIAN)</div><div class='del'>-    jd = civil_to_jd(y, 1, 4, ns)</div><div class='del'>-    (jd - (((jd - 1) + 1) % 7)) +</div><div class='del'>-      7 * (w - 1) +</div><div class='del'>-      (d - 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Convert a Julian Day Number to a Commercial Date</div><div class='del'>-  #</div><div class='del'>-  # +jd+ is the Julian Day Number to convert.</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # Returns the corresponding Commercial Date as</div><div class='del'>-  # [commercial_year, week_of_year, day_of_week]</div><div class='del'>-  def self.jd_to_commercial(jd, sg=GREGORIAN)</div><div class='del'>-    ns = fix_style(jd, sg)</div><div class='del'>-    a = jd_to_civil(jd - 3, ns)[0]</div><div class='del'>-    y = if jd &gt;= commercial_to_jd(a + 1, 1, 1, ns) then a + 1 else a end</div><div class='del'>-    w = 1 + ((jd - commercial_to_jd(y, 1, 1, ns)) / 7).floor</div><div class='del'>-    d = (jd + 1) % 7</div><div class='del'>-    d = 7 if d == 0</div><div class='del'>-    return y, w, d</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.weeknum_to_jd(y, w, d, f=0, ns=GREGORIAN) # :nodoc:</div><div class='del'>-    a = civil_to_jd(y, 1, 1, ns) + 6</div><div class='del'>-    (a - ((a - f) + 1) % 7 - 7) + 7 * w + d</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.jd_to_weeknum(jd, f=0, sg=GREGORIAN) # :nodoc:</div><div class='del'>-    ns = fix_style(jd, sg)</div><div class='del'>-    y, m, d = jd_to_civil(jd, ns)</div><div class='del'>-    a = civil_to_jd(y, 1, 1, ns) + 6</div><div class='del'>-    w, d = (jd - (a - ((a - f) + 1) % 7) + 7).divmod(7)</div><div class='del'>-    return y, w, d</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :weeknum_to_jd, :jd_to_weeknum</div><div class='del'>-</div><div class='del'>-  # Convert an Astronomical Julian Day Number to a (civil) Julian</div><div class='del'>-  # Day Number.</div><div class='del'>-  #</div><div class='del'>-  # +ajd+ is the Astronomical Julian Day Number to convert.</div><div class='del'>-  # +of+ is the offset from UTC as a fraction of a day (defaults to 0).</div><div class='del'>-  #</div><div class='del'>-  # Returns the (civil) Julian Day Number as [day_number,</div><div class='del'>-  # fraction] where +fraction+ is always 1/2.</div><div class='del'>-  def self.ajd_to_jd(ajd, of=0) (ajd + of + HALF_DAYS_IN_DAY).divmod(1) end</div><div class='del'>-</div><div class='del'>-  # Convert a (civil) Julian Day Number to an Astronomical Julian</div><div class='del'>-  # Day Number.</div><div class='del'>-  #</div><div class='del'>-  # +jd+ is the Julian Day Number to convert, and +fr+ is a</div><div class='del'>-  # fractional day.</div><div class='del'>-  # +of+ is the offset from UTC as a fraction of a day (defaults to 0).</div><div class='del'>-  #</div><div class='del'>-  # Returns the Astronomical Julian Day Number as a single</div><div class='del'>-  # numeric value.</div><div class='del'>-  def self.jd_to_ajd(jd, fr, of=0) jd + fr - of - HALF_DAYS_IN_DAY end</div><div class='del'>-</div><div class='del'>-  # Convert a fractional day +fr+ to [hours, minutes, seconds,</div><div class='del'>-  # fraction_of_a_second]</div><div class='del'>-  def self.day_fraction_to_time(fr)</div><div class='del'>-    ss,  fr = fr.divmod(SECONDS_IN_DAY) # 4p</div><div class='del'>-    h,   ss = ss.divmod(3600)</div><div class='del'>-    min, s  = ss.divmod(60)</div><div class='del'>-    return h, min, s, fr</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Convert an +h+ hour, +min+ minutes, +s+ seconds period</div><div class='del'>-  # to a fractional day.</div><div class='del'>-  begin</div><div class='del'>-    Rational(Rational(1, 2), 2) # a challenge</div><div class='del'>-</div><div class='del'>-    def self.time_to_day_fraction(h, min, s)</div><div class='del'>-      Rational(h * 3600 + min * 60 + s, 86400) # 4p</div><div class='del'>-    end</div><div class='del'>-  rescue</div><div class='del'>-    def self.time_to_day_fraction(h, min, s)</div><div class='del'>-	if Integer === h &amp;&amp; Integer === min &amp;&amp; Integer === s</div><div class='del'>-	  Rational(h * 3600 + min * 60 + s, 86400) # 4p</div><div class='del'>-	else</div><div class='del'>-	  (h * 3600 + min * 60 + s).to_r/86400 # 4p</div><div class='del'>-	end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Convert an Astronomical Modified Julian Day Number to an</div><div class='del'>-  # Astronomical Julian Day Number.</div><div class='del'>-  def self.amjd_to_ajd(amjd) amjd + MJD_EPOCH_IN_AJD end</div><div class='del'>-</div><div class='del'>-  # Convert an Astronomical Julian Day Number to an</div><div class='del'>-  # Astronomical Modified Julian Day Number.</div><div class='del'>-  def self.ajd_to_amjd(ajd) ajd - MJD_EPOCH_IN_AJD end</div><div class='del'>-</div><div class='del'>-  # Convert a Modified Julian Day Number to a Julian</div><div class='del'>-  # Day Number.</div><div class='del'>-  def self.mjd_to_jd(mjd) mjd + MJD_EPOCH_IN_CJD end</div><div class='del'>-</div><div class='del'>-  # Convert a Julian Day Number to a Modified Julian Day</div><div class='del'>-  # Number.</div><div class='del'>-  def self.jd_to_mjd(jd) jd - MJD_EPOCH_IN_CJD end</div><div class='del'>-</div><div class='del'>-  # Convert a count of the number of days since the adoption</div><div class='del'>-  # of the Gregorian Calendar (in Italy) to a Julian Day Number.</div><div class='del'>-  def self.ld_to_jd(ld) ld + LD_EPOCH_IN_CJD end</div><div class='del'>-</div><div class='del'>-  # Convert a Julian Day Number to the number of days since</div><div class='del'>-  # the adoption of the Gregorian Calendar (in Italy).</div><div class='del'>-  def self.jd_to_ld(jd) jd - LD_EPOCH_IN_CJD end</div><div class='del'>-</div><div class='del'>-  # Convert a Julian Day Number to the day of the week.</div><div class='del'>-  #</div><div class='del'>-  # Sunday is day-of-week 0; Saturday is day-of-week 6.</div><div class='del'>-  def self.jd_to_wday(jd) (jd + 1) % 7 end</div><div class='del'>-</div><div class='del'>-  # Is a year a leap year in the Julian calendar?</div><div class='del'>-  #</div><div class='del'>-  # All years divisible by 4 are leap years in the Julian calendar.</div><div class='del'>-  def self.julian_leap? (y) y % 4 == 0 end</div><div class='del'>-</div><div class='del'>-  # Is a year a leap year in the Gregorian calendar?</div><div class='del'>-  #</div><div class='del'>-  # All years divisible by 4 are leap years in the Gregorian calendar,</div><div class='del'>-  # except for years divisible by 100 and not by 400.</div><div class='del'>-  def self.gregorian_leap? (y) y % 4 == 0 &amp;&amp; y % 100 != 0 || y % 400 == 0 end</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; self; alias_method :leap?, :gregorian_leap? end</div><div class='del'>-  class &lt;&lt; self; alias_method :new!, :new end</div><div class='del'>-</div><div class='del'>-  # Is +jd+ a valid Julian Day Number?</div><div class='del'>-  #</div><div class='del'>-  # If it is, returns it.  In fact, any value is treated as a valid</div><div class='del'>-  # Julian Day Number.</div><div class='del'>-  def self.valid_jd? (jd, sg=ITALY) jd end</div><div class='del'>-</div><div class='del'>-  # Do the year +y+ and day-of-year +d+ make a valid Ordinal Date?</div><div class='del'>-  # Returns the corresponding Julian Day Number if they do, or</div><div class='del'>-  # nil if they don't.</div><div class='del'>-  #</div><div class='del'>-  # +d+ can be a negative number, in which case it counts backwards</div><div class='del'>-  # from the end of the year (-1 being the last day of the year).</div><div class='del'>-  # No year wraparound is performed, however, so valid values of</div><div class='del'>-  # +d+ are -365 .. -1, 1 .. 365 on a non-leap-year,</div><div class='del'>-  # -366 .. -1, 1 .. 366 on a leap year.</div><div class='del'>-  # A date falling in the period skipped in the Day of Calendar Reform</div><div class='del'>-  # adjustment is not valid.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.valid_ordinal? (y, d, sg=ITALY)</div><div class='del'>-    if d &lt; 0</div><div class='del'>-      ny, = (y + 1).divmod(1)</div><div class='del'>-      jd = ordinal_to_jd(ny, d + 1, sg)</div><div class='del'>-      ns = fix_style(jd, sg)</div><div class='del'>-      return unless [y] == jd_to_ordinal(jd, sg)[0..0]</div><div class='del'>-      return unless [ny, 1] == jd_to_ordinal(jd - d, ns)</div><div class='del'>-    else</div><div class='del'>-      jd = ordinal_to_jd(y, d, sg)</div><div class='del'>-      return unless [y, d] == jd_to_ordinal(jd, sg)</div><div class='del'>-    end</div><div class='del'>-    jd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Do year +y+, month +m+, and day-of-month +d+ make a</div><div class='del'>-  # valid Civil Date?  Returns the corresponding Julian</div><div class='del'>-  # Day Number if they do, nil if they don't.</div><div class='del'>-  #</div><div class='del'>-  # +m+ and +d+ can be negative, in which case they count</div><div class='del'>-  # backwards from the end of the year and the end of the</div><div class='del'>-  # month respectively.  No wraparound is performed, however,</div><div class='del'>-  # and invalid values cause an ArgumentError to be raised.</div><div class='del'>-  # A date falling in the period skipped in the Day of Calendar</div><div class='del'>-  # Reform adjustment is not valid.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.valid_civil? (y, m, d, sg=ITALY)</div><div class='del'>-    if m &lt; 0</div><div class='del'>-      m += 13</div><div class='del'>-    end</div><div class='del'>-    if d &lt; 0</div><div class='del'>-      ny, nm = (y * 12 + m).divmod(12)</div><div class='del'>-      nm,    = (nm + 1).divmod(1)</div><div class='del'>-      jd = civil_to_jd(ny, nm, d + 1, sg)</div><div class='del'>-      ns = fix_style(jd, sg)</div><div class='del'>-      return unless [y, m] == jd_to_civil(jd, sg)[0..1]</div><div class='del'>-      return unless [ny, nm, 1] == jd_to_civil(jd - d, ns)</div><div class='del'>-    else</div><div class='del'>-      jd = civil_to_jd(y, m, d, sg)</div><div class='del'>-      return unless [y, m, d] == jd_to_civil(jd, sg)</div><div class='del'>-    end</div><div class='del'>-    jd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; self; alias_method :valid_date?, :valid_civil? end</div><div class='del'>-</div><div class='del'>-  # Do year +y+, week-of-year +w+, and day-of-week +d+ make a</div><div class='del'>-  # valid Commercial Date?  Returns the corresponding Julian</div><div class='del'>-  # Day Number if they do, nil if they don't.</div><div class='del'>-  #</div><div class='del'>-  # Monday is day-of-week 1; Sunday is day-of-week 7.</div><div class='del'>-  #</div><div class='del'>-  # +w+ and +d+ can be negative, in which case they count</div><div class='del'>-  # backwards from the end of the year and the end of the</div><div class='del'>-  # week respectively.  No wraparound is performed, however,</div><div class='del'>-  # and invalid values cause an ArgumentError to be raised.</div><div class='del'>-  # A date falling in the period skipped in the Day of Calendar</div><div class='del'>-  # Reform adjustment is not valid.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.valid_commercial? (y, w, d, sg=ITALY)</div><div class='del'>-    if d &lt; 0</div><div class='del'>-      d += 8</div><div class='del'>-    end</div><div class='del'>-    if w &lt; 0</div><div class='del'>-      ny, nw, nd =</div><div class='del'>-	jd_to_commercial(commercial_to_jd(y + 1, 1, 1) + w * 7)</div><div class='del'>-      return unless ny == y</div><div class='del'>-      w = nw</div><div class='del'>-    end</div><div class='del'>-    jd = commercial_to_jd(y, w, d)</div><div class='del'>-    return unless gregorian?(jd, sg)</div><div class='del'>-    return unless [y, w, d] == jd_to_commercial(jd)</div><div class='del'>-    jd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.valid_weeknum? (y, w, d, f, sg=ITALY) # :nodoc:</div><div class='del'>-    if d &lt; 0</div><div class='del'>-      d += 7</div><div class='del'>-    end</div><div class='del'>-    if w &lt; 0</div><div class='del'>-      ny, nw, nd, nf =</div><div class='del'>-	jd_to_weeknum(weeknum_to_jd(y + 1, 1, f, f) + w * 7, f)</div><div class='del'>-      return unless ny == y</div><div class='del'>-      w = nw</div><div class='del'>-    end</div><div class='del'>-    jd = weeknum_to_jd(y, w, d, f)</div><div class='del'>-    return unless gregorian?(jd, sg)</div><div class='del'>-    return unless [y, w, d] == jd_to_weeknum(jd, f)</div><div class='del'>-    jd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :valid_weeknum?</div><div class='del'>-</div><div class='del'>-  # Do hour +h+, minute +min+, and second +s+ constitute a valid time?</div><div class='del'>-  #</div><div class='del'>-  # If they do, returns their value as a fraction of a day.  If not,</div><div class='del'>-  # returns nil.</div><div class='del'>-  #</div><div class='del'>-  # The 24-hour clock is used.  Negative values of +h+, +min+, and</div><div class='del'>-  # +sec+ are treating as counting backwards from the end of the</div><div class='del'>-  # next larger unit (e.g. a +min+ of -2 is treated as 58).  No</div><div class='del'>-  # wraparound is performed.</div><div class='del'>-  def self.valid_time? (h, min, s)</div><div class='del'>-    h   += 24 if h   &lt; 0</div><div class='del'>-    min += 60 if min &lt; 0</div><div class='del'>-    s   += 60 if s   &lt; 0</div><div class='del'>-    return unless ((0...24) === h &amp;&amp;</div><div class='del'>-		   (0...60) === min &amp;&amp;</div><div class='del'>-		   (0...60) === s) ||</div><div class='del'>-		  (24 == h &amp;&amp;</div><div class='del'>-		    0 == min &amp;&amp;</div><div class='del'>-		    0 == s)</div><div class='del'>-    time_to_day_fraction(h, min, s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create a new Date object from a Julian Day Number.</div><div class='del'>-  #</div><div class='del'>-  # +jd+ is the Julian Day Number; if not specified, it defaults to</div><div class='del'>-  # 0.</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.jd(jd=0, sg=ITALY)</div><div class='del'>-    jd = valid_jd?(jd, sg)</div><div class='del'>-    new!(jd_to_ajd(jd, 0, 0), 0, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create a new Date object from an Ordinal Date, specified</div><div class='del'>-  # by year +y+ and day-of-year +d+. +d+ can be negative,</div><div class='del'>-  # in which it counts backwards from the end of the year.</div><div class='del'>-  # No year wraparound is performed, however.  An invalid</div><div class='del'>-  # value for +d+ results in an ArgumentError being raised.</div><div class='del'>-  #</div><div class='del'>-  # +y+ defaults to -4712, and +d+ to 1; this is Julian Day</div><div class='del'>-  # Number day 0.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.ordinal(y=-4712, d=1, sg=ITALY)</div><div class='del'>-    unless jd = valid_ordinal?(y, d, sg)</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, 0, 0), 0, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create a new Date object for the Civil Date specified by</div><div class='del'>-  # year +y+, month +m+, and day-of-month +d+.</div><div class='del'>-  #</div><div class='del'>-  # +m+ and +d+ can be negative, in which case they count</div><div class='del'>-  # backwards from the end of the year and the end of the</div><div class='del'>-  # month respectively.  No wraparound is performed, however,</div><div class='del'>-  # and invalid values cause an ArgumentError to be raised.</div><div class='del'>-  # can be negative</div><div class='del'>-  #</div><div class='del'>-  # +y+ defaults to -4712, +m+ to 1, and +d+ to 1; this is</div><div class='del'>-  # Julian Day Number day 0.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.civil(y=-4712, m=1, d=1, sg=ITALY)</div><div class='del'>-    unless jd = valid_civil?(y, m, d, sg)</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, 0, 0), 0, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; self; alias_method :new, :civil end</div><div class='del'>-</div><div class='del'>-  # Create a new Date object for the Commercial Date specified by</div><div class='del'>-  # year +y+, week-of-year +w+, and day-of-week +d+.</div><div class='del'>-  #</div><div class='del'>-  # Monday is day-of-week 1; Sunday is day-of-week 7.</div><div class='del'>-  #</div><div class='del'>-  # +w+ and +d+ can be negative, in which case they count</div><div class='del'>-  # backwards from the end of the year and the end of the</div><div class='del'>-  # week respectively.  No wraparound is performed, however,</div><div class='del'>-  # and invalid values cause an ArgumentError to be raised.</div><div class='del'>-  #</div><div class='del'>-  # +y+ defaults to 1582, +w+ to 41, and +d+ to 5, the Day of</div><div class='del'>-  # Calendar Reform for Italy and the Catholic countries.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.commercial(y=1582, w=41, d=5, sg=ITALY)</div><div class='del'>-    unless jd = valid_commercial?(y, w, d, sg)</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, 0, 0), 0, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.weeknum(y=1582, w=41, d=5, f=0, sg=ITALY) # :nodoc:</div><div class='del'>-    unless jd = valid_weeknum?(y, w, d, f, sg)</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, 0, 0), 0, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :weeknum</div><div class='del'>-</div><div class='del'>-  def self.rewrite_frags(elem) # :nodoc:</div><div class='del'>-    elem ||= {}</div><div class='del'>-    if seconds = elem[:seconds]</div><div class='del'>-      d,   fr = seconds.divmod(86400)</div><div class='del'>-      h,   fr = fr.divmod(3600)</div><div class='del'>-      min, fr = fr.divmod(60)</div><div class='del'>-      s,   fr = fr.divmod(1)</div><div class='del'>-      elem[:jd] = UNIX_EPOCH_IN_CJD + d</div><div class='del'>-      elem[:hour] = h</div><div class='del'>-      elem[:min] = min</div><div class='del'>-      elem[:sec] = s</div><div class='del'>-      elem[:sec_fraction] = fr</div><div class='del'>-      elem.delete(:seconds)</div><div class='del'>-      elem.delete(:offset)</div><div class='del'>-    end</div><div class='del'>-    elem</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :rewrite_frags</div><div class='del'>-</div><div class='del'>-  def self.complete_frags(elem) # :nodoc:</div><div class='del'>-    i = 0</div><div class='del'>-    g = [[:time, [:hour, :min, :sec]],</div><div class='del'>-	 [nil, [:jd]],</div><div class='del'>-	 [:ordinal, [:year, :yday, :hour, :min, :sec]],</div><div class='del'>-	 [:civil, [:year, :mon, :mday, :hour, :min, :sec]],</div><div class='del'>-	 [:commercial, [:cwyear, :cweek, :cwday, :hour, :min, :sec]],</div><div class='del'>-	 [:wday, [:wday, :hour, :min, :sec]],</div><div class='del'>-	 [:wnum0, [:year, :wnum0, :wday, :hour, :min, :sec]],</div><div class='del'>-	 [:wnum1, [:year, :wnum1, :wday, :hour, :min, :sec]],</div><div class='del'>-	 [nil, [:cwyear, :cweek, :wday, :hour, :min, :sec]],</div><div class='del'>-	 [nil, [:year, :wnum0, :cwday, :hour, :min, :sec]],</div><div class='del'>-	 [nil, [:year, :wnum1, :cwday, :hour, :min, :sec]]].</div><div class='del'>-      collect{|k, a| e = elem.values_at(*a).compact; [k, a, e]}.</div><div class='del'>-      select{|k, a, e| e.size &gt; 0}.</div><div class='del'>-      sort_by{|k, a, e| [e.size, i -= 1]}.last</div><div class='del'>-</div><div class='del'>-    d = nil</div><div class='del'>-</div><div class='del'>-    if g &amp;&amp; g[0] &amp;&amp; (g[1].size - g[2].size) != 0</div><div class='del'>-      d ||= Date.today</div><div class='del'>-</div><div class='del'>-      case g[0]</div><div class='del'>-      when :ordinal</div><div class='del'>-	elem[:year] ||= d.year</div><div class='del'>-	elem[:yday] ||= 1</div><div class='del'>-      when :civil</div><div class='del'>-	g[1].each do |e|</div><div class='del'>-	  break if elem[e]</div><div class='del'>-	  elem[e] = d.__send__(e)</div><div class='del'>-	end</div><div class='del'>-	elem[:mon]  ||= 1</div><div class='del'>-	elem[:mday] ||= 1</div><div class='del'>-      when :commercial</div><div class='del'>-	g[1].each do |e|</div><div class='del'>-	  break if elem[e]</div><div class='del'>-	  elem[e] = d.__send__(e)</div><div class='del'>-	end</div><div class='del'>-	elem[:cweek] ||= 1</div><div class='del'>-	elem[:cwday] ||= 1</div><div class='del'>-      when :wday</div><div class='del'>-	elem[:jd] ||= (d - d.wday + elem[:wday]).jd</div><div class='del'>-      when :wnum0</div><div class='del'>-	g[1].each do |e|</div><div class='del'>-	  break if elem[e]</div><div class='del'>-	  elem[e] = d.__send__(e)</div><div class='del'>-	end</div><div class='del'>-	elem[:wnum0] ||= 0</div><div class='del'>-	elem[:wday]  ||= 0</div><div class='del'>-      when :wnum1</div><div class='del'>-	g[1].each do |e|</div><div class='del'>-	  break if elem[e]</div><div class='del'>-	  elem[e] = d.__send__(e)</div><div class='del'>-	end</div><div class='del'>-	elem[:wnum1] ||= 0</div><div class='del'>-	elem[:wday]  ||= 0</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if g &amp;&amp; g[0] == :time</div><div class='del'>-      if self &lt;= DateTime</div><div class='del'>-	d ||= Date.today</div><div class='del'>-	elem[:jd] ||= d.jd</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    elem[:hour] ||= 0</div><div class='del'>-    elem[:min]  ||= 0</div><div class='del'>-    elem[:sec]  ||= 0</div><div class='del'>-    elem[:sec] = [elem[:sec], 59].min</div><div class='del'>-</div><div class='del'>-    elem</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :complete_frags</div><div class='del'>-</div><div class='del'>-  def self.valid_date_frags?(elem, sg) # :nodoc:</div><div class='del'>-    catch :jd do</div><div class='del'>-      a = elem.values_at(:jd)</div><div class='del'>-      if a.all?</div><div class='del'>-	if jd = valid_jd?(*(a &lt;&lt; sg))</div><div class='del'>-	  throw :jd, jd</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      a = elem.values_at(:year, :yday)</div><div class='del'>-      if a.all?</div><div class='del'>-	if jd = valid_ordinal?(*(a &lt;&lt; sg))</div><div class='del'>-	  throw :jd, jd</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      a = elem.values_at(:year, :mon, :mday)</div><div class='del'>-      if a.all?</div><div class='del'>-	if jd = valid_civil?(*(a &lt;&lt; sg))</div><div class='del'>-	  throw :jd, jd</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      a = elem.values_at(:cwyear, :cweek, :cwday)</div><div class='del'>-      if a[2].nil? &amp;&amp; elem[:wday]</div><div class='del'>-	a[2] = elem[:wday].nonzero? || 7</div><div class='del'>-      end</div><div class='del'>-      if a.all?</div><div class='del'>-	if jd = valid_commercial?(*(a &lt;&lt; sg))</div><div class='del'>-	  throw :jd, jd</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      a = elem.values_at(:year, :wnum0, :wday)</div><div class='del'>-      if a[2].nil? &amp;&amp; elem[:cwday]</div><div class='del'>-	a[2] = elem[:cwday] % 7</div><div class='del'>-      end</div><div class='del'>-      if a.all?</div><div class='del'>-	if jd = valid_weeknum?(*(a &lt;&lt; 0 &lt;&lt; sg))</div><div class='del'>-	  throw :jd, jd</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      a = elem.values_at(:year, :wnum1, :wday)</div><div class='del'>-      if a[2]</div><div class='del'>-	a[2] = (a[2] - 1) % 7</div><div class='del'>-      end</div><div class='del'>-      if a[2].nil? &amp;&amp; elem[:cwday]</div><div class='del'>-	a[2] = (elem[:cwday] - 1) % 7</div><div class='del'>-      end</div><div class='del'>-      if a.all?</div><div class='del'>-	if jd = valid_weeknum?(*(a &lt;&lt; 1 &lt;&lt; sg))</div><div class='del'>-	  throw :jd, jd</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'>-  private_class_method :valid_date_frags?</div><div class='del'>-</div><div class='del'>-  def self.valid_time_frags? (elem) # :nodoc:</div><div class='del'>-    h, min, s = elem.values_at(:hour, :min, :sec)</div><div class='del'>-    valid_time?(h, min, s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :valid_time_frags?</div><div class='del'>-</div><div class='del'>-  def self.new_by_frags(elem, sg) # :nodoc:</div><div class='del'>-    elem = rewrite_frags(elem)</div><div class='del'>-    elem = complete_frags(elem)</div><div class='del'>-    unless jd = valid_date_frags?(elem, sg)</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, 0, 0), 0, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :new_by_frags</div><div class='del'>-</div><div class='del'>-  # Create a new Date object by parsing from a String</div><div class='del'>-  # according to a specified format.</div><div class='del'>-  #</div><div class='del'>-  # +str+ is a String holding a date representation.</div><div class='del'>-  # +fmt+ is the format that the date is in.  See</div><div class='del'>-  # date/format.rb for details on supported formats.</div><div class='del'>-  #</div><div class='del'>-  # The default +str+ is '-4712-01-01', and the default</div><div class='del'>-  # +fmt+ is '%F', which means Year-Month-Day_of_Month.</div><div class='del'>-  # This gives Julian Day Number day 0.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # An ArgumentError will be raised if +str+ cannot be</div><div class='del'>-  # parsed.</div><div class='del'>-  def self.strptime(str='-4712-01-01', fmt='%F', sg=ITALY)</div><div class='del'>-    elem = _strptime(str, fmt)</div><div class='del'>-    new_by_frags(elem, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create a new Date object by parsing from a String,</div><div class='del'>-  # without specifying the format.</div><div class='del'>-  #</div><div class='del'>-  # +str+ is a String holding a date representation.</div><div class='del'>-  # +comp+ specifies whether to interpret 2-digit years</div><div class='del'>-  # as 19XX (&gt;= 69) or 20XX (&lt; 69); the default is not to.</div><div class='del'>-  # The method will attempt to parse a date from the String</div><div class='del'>-  # using various heuristics; see #_parse in date/format.rb</div><div class='del'>-  # for more details.  If parsing fails, an ArgumentError</div><div class='del'>-  # will be raised.</div><div class='del'>-  #</div><div class='del'>-  # The default +str+ is '-4712-01-01'; this is Julian</div><div class='del'>-  # Day Number day 0.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.parse(str='-4712-01-01', comp=false, sg=ITALY)</div><div class='del'>-    elem = _parse(str, comp)</div><div class='del'>-    new_by_frags(elem, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-</div><div class='del'>-    def once(*ids) # :nodoc:</div><div class='del'>-      for id in ids</div><div class='del'>-	module_eval &lt;&lt;-"end;"</div><div class='del'>-	  alias_method :__#{id.to_i}__, :#{id.to_s}</div><div class='del'>-	  private :__#{id.to_i}__</div><div class='del'>-	  def #{id.to_s}(*args, &amp;block)</div><div class='del'>-	    (@__#{id.to_i}__ ||= [__#{id.to_i}__(*args, &amp;block)])[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'>-    private :once</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # *NOTE* this is the documentation for the method new!().  If</div><div class='del'>-  # you are reading this as the documentation for new(), that is</div><div class='del'>-  # because rdoc doesn't fully support the aliasing of the</div><div class='del'>-  # initialize() method.</div><div class='del'>-  # new() is in</div><div class='del'>-  # fact an alias for #civil(): read the documentation for that</div><div class='del'>-  # method instead.</div><div class='del'>-  #</div><div class='del'>-  # Create a new Date object.</div><div class='del'>-  #</div><div class='del'>-  # +ajd+ is the Astronomical Julian Day Number.</div><div class='del'>-  # +of+ is the offset from UTC as a fraction of a day.</div><div class='del'>-  # Both default to 0.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform to use for this</div><div class='del'>-  # Date object.</div><div class='del'>-  #</div><div class='del'>-  # Using one of the factory methods such as Date::civil is</div><div class='del'>-  # generally easier and safer.</div><div class='del'>-  def initialize(ajd=0, of=0, sg=ITALY) @ajd, @of, @sg = ajd, of, sg end</div><div class='del'>-</div><div class='del'>-  # Get the date as an Astronomical Julian Day Number.</div><div class='del'>-  def ajd() @ajd end</div><div class='del'>-</div><div class='del'>-  # Get the date as an Astronomical Modified Julian Day Number.</div><div class='del'>-  def amjd() self.class.ajd_to_amjd(@ajd) end</div><div class='del'>-</div><div class='del'>-  once :amjd</div><div class='del'>-</div><div class='del'>-  # Get the date as a Julian Day Number.</div><div class='del'>-  def jd() self.class.ajd_to_jd(@ajd, @of)[0] end</div><div class='del'>-</div><div class='del'>-  # Get any fractional day part of the date.</div><div class='del'>-  def day_fraction() self.class.ajd_to_jd(@ajd, @of)[1] end</div><div class='del'>-</div><div class='del'>-  # Get the date as a Modified Julian Day Number.</div><div class='del'>-  def mjd() self.class.jd_to_mjd(jd) end</div><div class='del'>-</div><div class='del'>-  # Get the date as the number of days since the Day of Calendar</div><div class='del'>-  # Reform (in Italy and the Catholic countries).</div><div class='del'>-  def ld() self.class.jd_to_ld(jd) end</div><div class='del'>-</div><div class='del'>-  once :jd, :day_fraction, :mjd, :ld</div><div class='del'>-</div><div class='del'>-  # Get the date as a Civil Date, [year, month, day_of_month]</div><div class='del'>-  def civil() self.class.jd_to_civil(jd, @sg) end # :nodoc:</div><div class='del'>-</div><div class='del'>-  # Get the date as an Ordinal Date, [year, day_of_year]</div><div class='del'>-  def ordinal() self.class.jd_to_ordinal(jd, @sg) end # :nodoc:</div><div class='del'>-</div><div class='del'>-  # Get the date as a Commercial Date, [year, week_of_year, day_of_week]</div><div class='del'>-  def commercial() self.class.jd_to_commercial(jd, @sg) end # :nodoc:</div><div class='del'>-</div><div class='del'>-  def weeknum0() self.class.__send__(:jd_to_weeknum, jd, 0, @sg) end # :nodoc:</div><div class='del'>-  def weeknum1() self.class.__send__(:jd_to_weeknum, jd, 1, @sg) end # :nodoc:</div><div class='del'>-</div><div class='del'>-  once :civil, :ordinal, :commercial, :weeknum0, :weeknum1</div><div class='del'>-  private :civil, :ordinal, :commercial, :weeknum0, :weeknum1</div><div class='del'>-</div><div class='del'>-  # Get the year of this date.</div><div class='del'>-  def year() civil[0] end</div><div class='del'>-</div><div class='del'>-  # Get the day-of-the-year of this date.</div><div class='del'>-  #</div><div class='del'>-  # January 1 is day-of-the-year 1</div><div class='del'>-  def yday() ordinal[1] end</div><div class='del'>-</div><div class='del'>-  # Get the month of this date.</div><div class='del'>-  #</div><div class='del'>-  # January is month 1.</div><div class='del'>-  def mon() civil[1] end</div><div class='del'>-</div><div class='del'>-  # Get the day-of-the-month of this date.</div><div class='del'>-  def mday() civil[2] end</div><div class='del'>-</div><div class='del'>-  alias_method :month, :mon</div><div class='del'>-  alias_method :day, :mday</div><div class='del'>-</div><div class='del'>-  def wnum0() weeknum0[1] end # :nodoc:</div><div class='del'>-  def wnum1() weeknum1[1] end # :nodoc:</div><div class='del'>-</div><div class='del'>-  private :wnum0, :wnum1</div><div class='del'>-</div><div class='del'>-  # Get the time of this date as [hours, minutes, seconds,</div><div class='del'>-  # fraction_of_a_second]</div><div class='del'>-  def time() self.class.day_fraction_to_time(day_fraction) end # :nodoc:</div><div class='del'>-</div><div class='del'>-  once :time</div><div class='del'>-  private :time</div><div class='del'>-</div><div class='del'>-  # Get the hour of this date.</div><div class='del'>-  def hour() time[0] end</div><div class='del'>-</div><div class='del'>-  # Get the minute of this date.</div><div class='del'>-  def min() time[1] end</div><div class='del'>-</div><div class='del'>-  # Get the second of this date.</div><div class='del'>-  def sec() time[2] end</div><div class='del'>-</div><div class='del'>-  # Get the fraction-of-a-second of this date.  The unit is in days.</div><div class='del'>-  # I do NOT recommend you to use this method.</div><div class='del'>-  def sec_fraction() time[3] end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  alias_method :minute, :min</div><div class='del'>-  alias_method :second, :sec</div><div class='del'>-  alias_method :second_fraction, :sec_fraction</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  private :hour, :min, :sec, :sec_fraction</div><div class='del'>-#	  :minute, :second, :second_fraction</div><div class='del'>-</div><div class='del'>-  def zone() strftime('%:z') end</div><div class='del'>-</div><div class='del'>-  private :zone</div><div class='del'>-</div><div class='del'>-  # Get the commercial year of this date.  See *Commercial* *Date*</div><div class='del'>-  # in the introduction for how this differs from the normal year.</div><div class='del'>-  def cwyear() commercial[0] end</div><div class='del'>-</div><div class='del'>-  # Get the commercial week of the year of this date.</div><div class='del'>-  def cweek() commercial[1] end</div><div class='del'>-</div><div class='del'>-  # Get the commercial day of the week of this date.  Monday is</div><div class='del'>-  # commercial day-of-week 1; Sunday is commercial day-of-week 7.</div><div class='del'>-  def cwday() commercial[2] end</div><div class='del'>-</div><div class='del'>-  # Get the week day of this date.  Sunday is day-of-week 0;</div><div class='del'>-  # Saturday is day-of-week 6.</div><div class='del'>-  def wday() self.class.jd_to_wday(jd) end</div><div class='del'>-</div><div class='del'>-  once :wday</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  MONTHNAMES.each_with_index do |n, i|</div><div class='del'>-    if n</div><div class='del'>-      define_method(n.downcase + '?'){mon == i}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  DAYNAMES.each_with_index do |n, i|</div><div class='del'>-    define_method(n.downcase + '?'){wday == i}</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  # Is the current date old-style (Julian Calendar)?</div><div class='del'>-  def julian? () self.class.julian?(jd, @sg) end</div><div class='del'>-</div><div class='del'>-  # Is the current date new-style (Gregorian Calendar)?</div><div class='del'>-  def gregorian? () self.class.gregorian?(jd, @sg) end</div><div class='del'>-</div><div class='del'>-  once :julian?, :gregorian?</div><div class='del'>-</div><div class='del'>-  def fix_style # :nodoc:</div><div class='del'>-    if julian?</div><div class='del'>-    then self.class::JULIAN</div><div class='del'>-    else self.class::GREGORIAN end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :fix_style</div><div class='del'>-</div><div class='del'>-  # Is this a leap year?</div><div class='del'>-  def leap?</div><div class='del'>-    self.class.jd_to_civil(self.class.civil_to_jd(year, 3, 1, fix_style) - 1,</div><div class='del'>-		     fix_style)[-1] == 29</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  once :leap?</div><div class='del'>-</div><div class='del'>-  # When is the Day of Calendar Reform for this Date object?</div><div class='del'>-  def start() @sg end</div><div class='del'>-</div><div class='del'>-  # Create a copy of this Date object using a new Day of Calendar Reform.</div><div class='del'>-  def new_start(sg=self.class::ITALY) self.class.new!(@ajd, @of, sg) end</div><div class='del'>-</div><div class='del'>-  # Create a copy of this Date object that uses the Italian/Catholic</div><div class='del'>-  # Day of Calendar Reform.</div><div class='del'>-  def italy() new_start(self.class::ITALY) end</div><div class='del'>-</div><div class='del'>-  # Create a copy of this Date object that uses the English/Colonial</div><div class='del'>-  # Day of Calendar Reform.</div><div class='del'>-  def england() new_start(self.class::ENGLAND) end</div><div class='del'>-</div><div class='del'>-  # Create a copy of this Date object that always uses the Julian</div><div class='del'>-  # Calendar.</div><div class='del'>-  def julian() new_start(self.class::JULIAN) end</div><div class='del'>-</div><div class='del'>-  # Create a copy of this Date object that always uses the Gregorian</div><div class='del'>-  # Calendar.</div><div class='del'>-  def gregorian() new_start(self.class::GREGORIAN) end</div><div class='del'>-</div><div class='del'>-  def offset() @of end</div><div class='del'>-</div><div class='del'>-  def new_offset(of=0)</div><div class='del'>-    if String === of</div><div class='del'>-      of = Rational(zone_to_diff(of) || 0, 86400)</div><div class='del'>-    end</div><div class='del'>-    self.class.new!(@ajd, of, @sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :offset, :new_offset</div><div class='del'>-</div><div class='del'>-  # Return a new Date object that is +n+ days later than the</div><div class='del'>-  # current one.</div><div class='del'>-  #</div><div class='del'>-  # +n+ may be a negative value, in which case the new Date</div><div class='del'>-  # is earlier than the current one; however, #-() might be</div><div class='del'>-  # more intuitive.</div><div class='del'>-  #</div><div class='del'>-  # If +n+ is not a Numeric, a TypeError will be thrown.  In</div><div class='del'>-  # particular, two Dates cannot be added to each other.</div><div class='del'>-  def + (n)</div><div class='del'>-    case n</div><div class='del'>-    when Numeric; return self.class.new!(@ajd + n, @of, @sg)</div><div class='del'>-    end</div><div class='del'>-    raise TypeError, 'expected numeric'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # If +x+ is a Numeric value, create a new Date object that is</div><div class='del'>-  # +x+ days earlier than the current one.</div><div class='del'>-  #</div><div class='del'>-  # If +x+ is a Date, return the number of days between the</div><div class='del'>-  # two dates; or, more precisely, how many days later the current</div><div class='del'>-  # date is than +x+.</div><div class='del'>-  #</div><div class='del'>-  # If +x+ is neither Numeric nor a Date, a TypeError is raised.</div><div class='del'>-  def - (x)</div><div class='del'>-    case x</div><div class='del'>-    when Numeric; return self.class.new!(@ajd - x, @of, @sg)</div><div class='del'>-    when Date;    return @ajd - x.ajd</div><div class='del'>-    end</div><div class='del'>-    raise TypeError, 'expected numeric or date'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Compare this date with another date.</div><div class='del'>-  #</div><div class='del'>-  # +other+ can also be a Numeric value, in which case it is</div><div class='del'>-  # interpreted as an Astronomical Julian Day Number.</div><div class='del'>-  #</div><div class='del'>-  # Comparison is by Astronomical Julian Day Number, including</div><div class='del'>-  # fractional days.  This means that both the time and the</div><div class='del'>-  # timezone offset are taken into account when comparing</div><div class='del'>-  # two DateTime instances.  When comparing a DateTime instance</div><div class='del'>-  # with a Date instance, the time of the latter will be</div><div class='del'>-  # considered as falling on midnight UTC.</div><div class='del'>-  def &lt;=&gt; (other)</div><div class='del'>-    case other</div><div class='del'>-    when Numeric; return @ajd &lt;=&gt; other</div><div class='del'>-    when Date;    return @ajd &lt;=&gt; other.ajd</div><div class='del'>-    end</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The relationship operator for Date.</div><div class='del'>-  #</div><div class='del'>-  # Compares dates by Julian Day Number.  When comparing</div><div class='del'>-  # two DateTime instances, or a DateTime with a Date,</div><div class='del'>-  # the instances will be regarded as equivalent if they</div><div class='del'>-  # fall on the same date in local time.</div><div class='del'>-  def === (other)</div><div class='del'>-    case other</div><div class='del'>-    when Numeric; return jd == other</div><div class='del'>-    when Date;    return jd == other.jd</div><div class='del'>-    end</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def next_day(n=1) self + n end</div><div class='del'>-# def prev_day(n=1) self - n end</div><div class='del'>-</div><div class='del'>-  private :next_day</div><div class='del'>-</div><div class='del'>-  # Return a new Date one day after this one.</div><div class='del'>-  def next() next_day end</div><div class='del'>-</div><div class='del'>-  alias_method :succ, :next</div><div class='del'>-</div><div class='del'>-  # Return a new Date object that is +n+ months later than</div><div class='del'>-  # the current one.</div><div class='del'>-  #</div><div class='del'>-  # If the day-of-the-month of the current Date is greater</div><div class='del'>-  # than the last day of the target month, the day-of-the-month</div><div class='del'>-  # of the returned Date will be the last day of the target month.</div><div class='del'>-  def &gt;&gt; (n)</div><div class='del'>-    y, m = (year * 12 + (mon - 1) + n).divmod(12)</div><div class='del'>-    m,   = (m + 1)                    .divmod(1)</div><div class='del'>-    d = mday</div><div class='del'>-    d -= 1 until jd2 = self.class.valid_civil?(y, m, d, fix_style)</div><div class='del'>-    self + (jd2 - jd)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return a new Date object that is +n+ months earlier than</div><div class='del'>-  # the current one.</div><div class='del'>-  #</div><div class='del'>-  # If the day-of-the-month of the current Date is greater</div><div class='del'>-  # than the last day of the target month, the day-of-the-month</div><div class='del'>-  # of the returned Date will be the last day of the target month.</div><div class='del'>-  def &lt;&lt; (n) self &gt;&gt; -n end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def next_month(n=1) self &gt;&gt; n end</div><div class='del'>-  def prev_month(n=1) self &lt;&lt; n end</div><div class='del'>-</div><div class='del'>-  def next_year(n=1) self &gt;&gt; n * 12 end</div><div class='del'>-  def prev_year(n=1) self &lt;&lt; n * 12 end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-#  require 'enumerator'</div><div class='del'>-</div><div class='del'>-  # Step the current date forward +step+ days at a</div><div class='del'>-  # time (or backward, if +step+ is negative) until</div><div class='del'>-  # we reach +limit+ (inclusive), yielding the resultant</div><div class='del'>-  # date at each step.</div><div class='del'>-  def step(limit, step=1) # :yield: date</div><div class='del'>-=begin</div><div class='del'>-    if step.zero?</div><div class='del'>-      raise ArgumentError, "step can't be 0"</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-=begin</div><div class='del'>-    unless block_given?</div><div class='del'>-      return to_enum(:step, limit, step)</div><div class='del'>-    end</div><div class='del'>-=end</div><div class='del'>-    da = self</div><div class='del'>-    op = %w(- &lt;= &gt;=)[step &lt;=&gt; 0]</div><div class='del'>-    while da.__send__(op, limit)</div><div class='del'>-      yield da</div><div class='del'>-      da += step</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Step forward one day at a time until we reach +max+</div><div class='del'>-  # (inclusive), yielding each date as we go.</div><div class='del'>-  def upto(max, &amp;block) # :yield: date</div><div class='del'>-    step(max, +1, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Step backward one day at a time until we reach +min+</div><div class='del'>-  # (inclusive), yielding each date as we go.</div><div class='del'>-  def downto(min, &amp;block) # :yield: date</div><div class='del'>-    step(min, -1, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Is this Date equal to +other+?</div><div class='del'>-  #</div><div class='del'>-  # +other+ must both be a Date object, and represent the same date.</div><div class='del'>-  def eql? (other) Date === other &amp;&amp; self == other end</div><div class='del'>-</div><div class='del'>-  # Calculate a hash value for this date.</div><div class='del'>-  def hash() @ajd.hash end</div><div class='del'>-</div><div class='del'>-  # Return internal object state as a programmer-readable string.</div><div class='del'>-  def inspect() format('#&lt;%s: %s,%s,%s&gt;', self.class, @ajd, @of, @sg) end</div><div class='del'>-</div><div class='del'>-  # Return the date as a human-readable string.</div><div class='del'>-  #</div><div class='del'>-  # The format used is YYYY-MM-DD.</div><div class='del'>-  def to_s() format('%.4d-%02d-%02d', year, mon, mday) end # 4p</div><div class='del'>-</div><div class='del'>-  # Dump to Marshal format.</div><div class='del'>-  def _dump(limit) Marshal.dump([@ajd, @of, @sg], -1) end</div><div class='del'>-</div><div class='del'>-# def self._load(str) new!(*Marshal.load(str)) end</div><div class='del'>-</div><div class='del'>-  # Load from Marshal format.</div><div class='del'>-  def self._load(str)</div><div class='del'>-    a = Marshal.load(str)</div><div class='del'>-    if a.size == 2</div><div class='del'>-      ajd,     sg = a</div><div class='del'>-           of = 0</div><div class='del'>-      ajd -= 1.to_r/2</div><div class='del'>-    else</div><div class='del'>-      ajd, of, sg = a</div><div class='del'>-    end</div><div class='del'>-    new!(ajd, of, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Class representing a date and time.</div><div class='del'>-#</div><div class='del'>-# See the documentation to the file date.rb for an overview.</div><div class='del'>-#</div><div class='del'>-# DateTime objects are immutable once created.</div><div class='del'>-#</div><div class='del'>-# == Other methods.</div><div class='del'>-#</div><div class='del'>-# The following methods are defined in Date, but declared private</div><div class='del'>-# there.  They are made public in DateTime.  They are documented</div><div class='del'>-# here.</div><div class='del'>-#</div><div class='del'>-# === hour()</div><div class='del'>-#</div><div class='del'>-# Get the hour-of-the-day of the time.  This is given</div><div class='del'>-# using the 24-hour clock, counting from midnight.  The first</div><div class='del'>-# hour after midnight is hour 0; the last hour of the day is</div><div class='del'>-# hour 23.</div><div class='del'>-#</div><div class='del'>-# === min()</div><div class='del'>-#</div><div class='del'>-# Get the minute-of-the-hour of the time.</div><div class='del'>-#</div><div class='del'>-# === sec()</div><div class='del'>-#</div><div class='del'>-# Get the second-of-the-minute of the time.</div><div class='del'>-#</div><div class='del'>-# === sec_fraction()</div><div class='del'>-#</div><div class='del'>-# Get the fraction of a second of the time.  This is returned as</div><div class='del'>-# a +Rational+.  The unit is in days.</div><div class='del'>-# I do NOT recommend you to use this method.</div><div class='del'>-#</div><div class='del'>-# === zone()</div><div class='del'>-#</div><div class='del'>-# Get the time zone as a String.  This is representation of the</div><div class='del'>-# time offset such as "+1000", not the true time-zone name.</div><div class='del'>-#</div><div class='del'>-# === offset()</div><div class='del'>-#</div><div class='del'>-# Get the time zone offset as a fraction of a day.  This is returned</div><div class='del'>-# as a +Rational+.</div><div class='del'>-#</div><div class='del'>-# === new_offset(of=0)</div><div class='del'>-#</div><div class='del'>-# Create a new DateTime object, identical to the current one, except</div><div class='del'>-# with a new time zone offset of +of+.  +of+ is the new offset from</div><div class='del'>-# UTC as a fraction of a day.</div><div class='del'>-#</div><div class='del'>-class DateTime &lt; Date</div><div class='del'>-</div><div class='del'>-  # Create a new DateTime object corresponding to the specified</div><div class='del'>-  # Julian Day Number +jd+ and hour +h+, minute +min+, second +s+.</div><div class='del'>-  #</div><div class='del'>-  # The 24-hour clock is used.  Negative values of +h+, +min+, and</div><div class='del'>-  # +sec+ are treating as counting backwards from the end of the</div><div class='del'>-  # next larger unit (e.g. a +min+ of -2 is treated as 58).  No</div><div class='del'>-  # wraparound is performed.  If an invalid time portion is specified,</div><div class='del'>-  # an ArgumentError is raised.</div><div class='del'>-  #</div><div class='del'>-  # +of+ is the offset from UTC as a fraction of a day (defaults to 0).</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # All day/time values default to 0.</div><div class='del'>-  def self.jd(jd=0, h=0, min=0, s=0, of=0, sg=ITALY)</div><div class='del'>-    unless (jd = valid_jd?(jd, sg)) &amp;&amp;</div><div class='del'>-	   (fr = valid_time?(h, min, s))</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    if String === of</div><div class='del'>-      of = Rational(zone_to_diff(of) || 0, 86400)</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, fr, of), of, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create a new DateTime object corresponding to the specified</div><div class='del'>-  # Ordinal Date and hour +h+, minute +min+, second +s+.</div><div class='del'>-  #</div><div class='del'>-  # The 24-hour clock is used.  Negative values of +h+, +min+, and</div><div class='del'>-  # +sec+ are treating as counting backwards from the end of the</div><div class='del'>-  # next larger unit (e.g. a +min+ of -2 is treated as 58).  No</div><div class='del'>-  # wraparound is performed.  If an invalid time portion is specified,</div><div class='del'>-  # an ArgumentError is raised.</div><div class='del'>-  #</div><div class='del'>-  # +of+ is the offset from UTC as a fraction of a day (defaults to 0).</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # +y+ defaults to -4712, and +d+ to 1; this is Julian Day Number</div><div class='del'>-  # day 0.  The time values default to 0.</div><div class='del'>-  def self.ordinal(y=-4712, d=1, h=0, min=0, s=0, of=0, sg=ITALY)</div><div class='del'>-    unless (jd = valid_ordinal?(y, d, sg)) &amp;&amp;</div><div class='del'>-	   (fr = valid_time?(h, min, s))</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    if String === of</div><div class='del'>-      of = Rational(zone_to_diff(of) || 0, 86400)</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, fr, of), of, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create a new DateTime object corresponding to the specified</div><div class='del'>-  # Civil Date and hour +h+, minute +min+, second +s+.</div><div class='del'>-  #</div><div class='del'>-  # The 24-hour clock is used.  Negative values of +h+, +min+, and</div><div class='del'>-  # +sec+ are treating as counting backwards from the end of the</div><div class='del'>-  # next larger unit (e.g. a +min+ of -2 is treated as 58).  No</div><div class='del'>-  # wraparound is performed.  If an invalid time portion is specified,</div><div class='del'>-  # an ArgumentError is raised.</div><div class='del'>-  #</div><div class='del'>-  # +of+ is the offset from UTC as a fraction of a day (defaults to 0).</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # +y+ defaults to -4712, +m+ to 1, and +d+ to 1; this is Julian Day</div><div class='del'>-  # Number day 0.  The time values default to 0.</div><div class='del'>-  def self.civil(y=-4712, m=1, d=1, h=0, min=0, s=0, of=0, sg=ITALY)</div><div class='del'>-    unless (jd = valid_civil?(y, m, d, sg)) &amp;&amp;</div><div class='del'>-	   (fr = valid_time?(h, min, s))</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    if String === of</div><div class='del'>-      of = Rational(zone_to_diff(of) || 0, 86400)</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, fr, of), of, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; self; alias_method :new, :civil end</div><div class='del'>-</div><div class='del'>-  # Create a new DateTime object corresponding to the specified</div><div class='del'>-  # Commercial Date and hour +h+, minute +min+, second +s+.</div><div class='del'>-  #</div><div class='del'>-  # The 24-hour clock is used.  Negative values of +h+, +min+, and</div><div class='del'>-  # +sec+ are treating as counting backwards from the end of the</div><div class='del'>-  # next larger unit (e.g. a +min+ of -2 is treated as 58).  No</div><div class='del'>-  # wraparound is performed.  If an invalid time portion is specified,</div><div class='del'>-  # an ArgumentError is raised.</div><div class='del'>-  #</div><div class='del'>-  # +of+ is the offset from UTC as a fraction of a day (defaults to 0).</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # +y+ defaults to 1582, +w+ to 41, and +d+ to 5; this is the Day of</div><div class='del'>-  # Calendar Reform for Italy and the Catholic countries.</div><div class='del'>-  # The time values default to 0.</div><div class='del'>-  def self.commercial(y=1582, w=41, d=5, h=0, min=0, s=0, of=0, sg=ITALY)</div><div class='del'>-    unless (jd = valid_commercial?(y, w, d, sg)) &amp;&amp;</div><div class='del'>-	   (fr = valid_time?(h, min, s))</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    if String === of</div><div class='del'>-      of = Rational(zone_to_diff(of) || 0, 86400)</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, fr, of), of, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.weeknum(y=1582, w=41, d=5, f=0, h=0, min=0, s=0, of=0, sg=ITALY) # :nodoc:</div><div class='del'>-    unless (jd = valid_weeknum?(y, w, d, f, sg)) &amp;&amp;</div><div class='del'>-	   (fr = valid_time?(h, min, s))</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    if String === of</div><div class='del'>-      of = Rational(zone_to_diff(of) || 0, 86400)</div><div class='del'>-    end</div><div class='del'>-    new!(jd_to_ajd(jd, fr, of), of, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :weeknum</div><div class='del'>-</div><div class='del'>-  def self.new_by_frags(elem, sg) # :nodoc:</div><div class='del'>-    elem = rewrite_frags(elem)</div><div class='del'>-    elem = complete_frags(elem)</div><div class='del'>-    unless (jd = valid_date_frags?(elem, sg)) &amp;&amp;</div><div class='del'>-	   (fr = valid_time_frags?(elem))</div><div class='del'>-      raise ArgumentError, 'invalid date'</div><div class='del'>-    end</div><div class='del'>-    fr += (elem[:sec_fraction] || 0) / 86400</div><div class='del'>-    of = Rational(elem[:offset] || 0, 86400)</div><div class='del'>-    new!(jd_to_ajd(jd, fr, of), of, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :new_by_frags</div><div class='del'>-</div><div class='del'>-  # Create a new DateTime object by parsing from a String</div><div class='del'>-  # according to a specified format.</div><div class='del'>-  #</div><div class='del'>-  # +str+ is a String holding a date-time representation.</div><div class='del'>-  # +fmt+ is the format that the date-time is in.  See</div><div class='del'>-  # date/format.rb for details on supported formats.</div><div class='del'>-  #</div><div class='del'>-  # The default +str+ is '-4712-01-01T00:00:00+00:00', and the default</div><div class='del'>-  # +fmt+ is '%FT%T%z'.  This gives midnight on Julian Day Number day 0.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  #</div><div class='del'>-  # An ArgumentError will be raised if +str+ cannot be</div><div class='del'>-  # parsed.</div><div class='del'>-  def self.strptime(str='-4712-01-01T00:00:00+00:00', fmt='%FT%T%z', sg=ITALY)</div><div class='del'>-    elem = _strptime(str, fmt)</div><div class='del'>-    new_by_frags(elem, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create a new DateTime object by parsing from a String,</div><div class='del'>-  # without specifying the format.</div><div class='del'>-  #</div><div class='del'>-  # +str+ is a String holding a date-time representation.</div><div class='del'>-  # +comp+ specifies whether to interpret 2-digit years</div><div class='del'>-  # as 19XX (&gt;= 69) or 20XX (&lt; 69); the default is not to.</div><div class='del'>-  # The method will attempt to parse a date-time from the String</div><div class='del'>-  # using various heuristics; see #_parse in date/format.rb</div><div class='del'>-  # for more details.  If parsing fails, an ArgumentError</div><div class='del'>-  # will be raised.</div><div class='del'>-  #</div><div class='del'>-  # The default +str+ is '-4712-01-01T00:00:00+00:00'; this is Julian</div><div class='del'>-  # Day Number day 0.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.parse(str='-4712-01-01T00:00:00+00:00', comp=false, sg=ITALY)</div><div class='del'>-    elem = _parse(str, comp)</div><div class='del'>-    new_by_frags(elem, sg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  public :hour, :min, :sec, :sec_fraction, :zone, :offset, :new_offset</div><div class='del'>-#	 :minute, :second, :second_fraction</div><div class='del'>-</div><div class='del'>-  def to_s # 4p</div><div class='del'>-    format('%.4d-%02d-%02dT%02d:%02d:%02d%s',</div><div class='del'>-	   year, mon, mday, hour, min, sec, zone)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Time</div><div class='del'>-</div><div class='del'>-#  def to_time() getlocal end</div><div class='del'>-</div><div class='del'>-  def to_date</div><div class='del'>-    jd = Date.civil_to_jd(year, mon, mday, Date::ITALY)</div><div class='del'>-    Date.new!(Date.jd_to_ajd(jd, 0, 0), 0, Date::ITALY)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_datetime</div><div class='del'>-    jd = DateTime.civil_to_jd(year, mon, mday, DateTime::ITALY)</div><div class='del'>-    fr = DateTime.time_to_day_fraction(hour, min, [sec, 59].min) +</div><div class='del'>-      Rational(usec, 86400_000_000)</div><div class='del'>-    of = Rational(utc_offset, 86400)</div><div class='del'>-    DateTime.new!(DateTime.jd_to_ajd(jd, fr, of), of, DateTime::ITALY)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :to_date, :to_datetime</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Date</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def to_time() Time.local(year, mon, mday) end</div><div class='del'>-  def to_date() self end</div><div class='del'>-  def to_datetime() DateTime.new!(self.class.jd_to_ajd(jd, 0, 0), @of, @sg) end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  # Create a new Date object representing today.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.today(sg=ITALY) Time.now.__send__(:to_date)    .new_start(sg) end</div><div class='del'>-</div><div class='del'>-  # Create a new DateTime object representing the current time.</div><div class='del'>-  #</div><div class='del'>-  # +sg+ specifies the Day of Calendar Reform.</div><div class='del'>-  def self.now  (sg=ITALY) Time.now.__send__(:to_datetime).new_start(sg) end</div><div class='del'>-</div><div class='del'>-  private_class_method :now</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class DateTime &lt; Date</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def to_time</div><div class='del'>-    d = new_offset(0)</div><div class='del'>-    d.instance_eval do</div><div class='del'>-      Time.utc(year, mon, mday, hour, min, sec,</div><div class='del'>-	       (sec_fraction * 86400000000).to_i)</div><div class='del'>-    end.</div><div class='del'>-	getlocal</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def to_date() Date.new!(self.class.jd_to_ajd(jd, 0, 0), 0, @sg) end</div><div class='del'>-  def to_datetime() self end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-  private_class_method :today</div><div class='del'>-  public_class_method  :now</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Date</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-</div><div class='del'>-    def deprecated_class_method_alias(old, new) # :nodoc:</div><div class='del'>-      module_eval &lt;&lt;-"end;"</div><div class='del'>-	class &lt;&lt; self</div><div class='del'>-	  def #{old}(*args, &amp;block)</div><div class='del'>-	    if $VERBOSE</div><div class='del'>-	      warn("\#{caller.shift.sub(/:in .*/, '')}: " \</div><div class='del'>-		   "warning: \#{self}::#{old} is deprecated; " \</div><div class='del'>-		   "use \#{self}::#{new}")</div><div class='del'>-	    end</div><div class='del'>-	    #{new}(*args, &amp;block)</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'>-    private :deprecated_class_method_alias</div><div class='del'>-</div><div class='del'>-    def deprecated_alias(old, new) # :nodoc:</div><div class='del'>-      module_eval &lt;&lt;-"end;"</div><div class='del'>-	def #{old}(*args, &amp;block)</div><div class='del'>-	  if $VERBOSE</div><div class='del'>-	    warn("\#{caller.shift.sub(/:in .*/, '')}: " \</div><div class='del'>-		 "warning: \#{self.class}\##{old} is deprecated; " \</div><div class='del'>-		 "use \#{self.class}\##{new}")</div><div class='del'>-	  end</div><div class='del'>-	  #{new}(*args, &amp;block)</div><div class='del'>-	end</div><div class='del'>-      end;</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private :deprecated_alias</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  [ %w(os?	julian?),</div><div class='del'>-    %w(ns?	gregorian?),</div><div class='del'>-    %w(exist1?	valid_jd?),</div><div class='del'>-    %w(exist2?	valid_ordinal?),</div><div class='del'>-    %w(exist3?	valid_date?),</div><div class='del'>-    %w(exist?	valid_date?),</div><div class='del'>-    %w(existw?	valid_commercial?),</div><div class='del'>-    %w(new0	new!),</div><div class='del'>-    %w(new1	jd),</div><div class='del'>-    %w(new2	ordinal),</div><div class='del'>-    %w(new3	new),</div><div class='del'>-    %w(neww	commercial)</div><div class='del'>-  ].each do |old, new|</div><div class='del'>-    deprecated_class_method_alias(old, new)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  [ %w(os?	julian?),</div><div class='del'>-    %w(ns?	gregorian?),</div><div class='del'>-    %w(sg	start),</div><div class='del'>-    %w(newsg	new_start),</div><div class='del'>-    %w(of	offset),</div><div class='del'>-    %w(newof	new_offset)</div><div class='del'>-  ].each do |old, new|</div><div class='del'>-    deprecated_alias(old, new)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :of, :newof</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class DateTime &lt; Date</div><div class='del'>-</div><div class='del'>-  public :of, :newof</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/date/format.rb b/lib/date/format.rb<br/>deleted file mode 100644<br/>index f89c1344a9..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/date/format.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/date/format.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1190 +0,0 @@</div><div class='del'>-# format.rb: Written by Tadayoshi Funaba 1999-2008</div><div class='del'>-# $Id: format.rb,v 2.43 2008-01-17 20:16:31+09 tadf Exp $</div><div class='del'>-</div><div class='del'>-require 'rational'</div><div class='del'>-</div><div class='del'>-class Date</div><div class='del'>-</div><div class='del'>-  module Format # :nodoc:</div><div class='del'>-</div><div class='del'>-    MONTHS = {</div><div class='del'>-      'january'  =&gt; 1, 'february' =&gt; 2, 'march'    =&gt; 3, 'april'    =&gt; 4,</div><div class='del'>-      'may'      =&gt; 5, 'june'     =&gt; 6, 'july'     =&gt; 7, 'august'   =&gt; 8,</div><div class='del'>-      'september'=&gt; 9, 'october'  =&gt;10, 'november' =&gt;11, 'december' =&gt;12</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DAYS = {</div><div class='del'>-      'sunday'   =&gt; 0, 'monday'   =&gt; 1, 'tuesday'  =&gt; 2, 'wednesday'=&gt; 3,</div><div class='del'>-      'thursday' =&gt; 4, 'friday'   =&gt; 5, 'saturday' =&gt; 6</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ABBR_MONTHS = {</div><div class='del'>-      'jan'      =&gt; 1, 'feb'      =&gt; 2, 'mar'      =&gt; 3, 'apr'      =&gt; 4,</div><div class='del'>-      'may'      =&gt; 5, 'jun'      =&gt; 6, 'jul'      =&gt; 7, 'aug'      =&gt; 8,</div><div class='del'>-      'sep'      =&gt; 9, 'oct'      =&gt;10, 'nov'      =&gt;11, 'dec'      =&gt;12</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ABBR_DAYS = {</div><div class='del'>-      'sun'      =&gt; 0, 'mon'      =&gt; 1, 'tue'      =&gt; 2, 'wed'      =&gt; 3,</div><div class='del'>-      'thu'      =&gt; 4, 'fri'      =&gt; 5, 'sat'      =&gt; 6</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    ZONES = {</div><div class='del'>-      'ut'  =&gt;  0*3600, 'gmt' =&gt;  0*3600, 'est' =&gt; -5*3600, 'edt' =&gt; -4*3600,</div><div class='del'>-      'cst' =&gt; -6*3600, 'cdt' =&gt; -5*3600, 'mst' =&gt; -7*3600, 'mdt' =&gt; -6*3600,</div><div class='del'>-      'pst' =&gt; -8*3600, 'pdt' =&gt; -7*3600,</div><div class='del'>-      'a'   =&gt;  1*3600, 'b'   =&gt;  2*3600, 'c'   =&gt;  3*3600, 'd'   =&gt;  4*3600,</div><div class='del'>-      'e'   =&gt;  5*3600, 'f'   =&gt;  6*3600, 'g'   =&gt;  7*3600, 'h'   =&gt;  8*3600,</div><div class='del'>-      'i'   =&gt;  9*3600, 'k'   =&gt; 10*3600, 'l'   =&gt; 11*3600, 'm'   =&gt; 12*3600,</div><div class='del'>-      'n'   =&gt; -1*3600, 'o'   =&gt; -2*3600, 'p'   =&gt; -3*3600, 'q'   =&gt; -4*3600,</div><div class='del'>-      'r'   =&gt; -5*3600, 's'   =&gt; -6*3600, 't'   =&gt; -7*3600, 'u'   =&gt; -8*3600,</div><div class='del'>-      'v'   =&gt; -9*3600, 'w'   =&gt;-10*3600, 'x'   =&gt;-11*3600, 'y'   =&gt;-12*3600,</div><div class='del'>-      'z'   =&gt;  0*3600,</div><div class='del'>-</div><div class='del'>-      'utc' =&gt;  0*3600, 'wet' =&gt;  0*3600,</div><div class='del'>-      'at'  =&gt; -2*3600, 'brst'=&gt; -2*3600, 'ndt' =&gt; -(2*3600+1800),</div><div class='del'>-      'art' =&gt; -3*3600, 'adt' =&gt; -3*3600, 'brt' =&gt; -3*3600, 'clst'=&gt; -3*3600,</div><div class='del'>-      'nst' =&gt; -(3*3600+1800),</div><div class='del'>-      'ast' =&gt; -4*3600, 'clt' =&gt; -4*3600,</div><div class='del'>-      'akdt'=&gt; -8*3600, 'ydt' =&gt; -8*3600,</div><div class='del'>-      'akst'=&gt; -9*3600, 'hadt'=&gt; -9*3600, 'hdt' =&gt; -9*3600, 'yst' =&gt; -9*3600,</div><div class='del'>-      'ahst'=&gt;-10*3600, 'cat' =&gt;-10*3600, 'hast'=&gt;-10*3600, 'hst' =&gt;-10*3600,</div><div class='del'>-      'nt'  =&gt;-11*3600,</div><div class='del'>-      'idlw'=&gt;-12*3600,</div><div class='del'>-      'bst' =&gt;  1*3600, 'cet' =&gt;  1*3600, 'fwt' =&gt;  1*3600, 'met' =&gt;  1*3600,</div><div class='del'>-      'mewt'=&gt;  1*3600, 'mez' =&gt;  1*3600, 'swt' =&gt;  1*3600, 'wat' =&gt;  1*3600,</div><div class='del'>-      'west'=&gt;  1*3600,</div><div class='del'>-      'cest'=&gt;  2*3600, 'eet' =&gt;  2*3600, 'fst' =&gt;  2*3600, 'mest'=&gt;  2*3600,</div><div class='del'>-      'mesz'=&gt;  2*3600, 'sast'=&gt;  2*3600, 'sst' =&gt;  2*3600,</div><div class='del'>-      'bt'  =&gt;  3*3600, 'eat' =&gt;  3*3600, 'eest'=&gt;  3*3600, 'msk' =&gt;  3*3600,</div><div class='del'>-      'msd' =&gt;  4*3600, 'zp4' =&gt;  4*3600,</div><div class='del'>-      'zp5' =&gt;  5*3600, 'ist' =&gt;  (5*3600+1800),</div><div class='del'>-      'zp6' =&gt;  6*3600,</div><div class='del'>-      'wast'=&gt;  7*3600,</div><div class='del'>-      'cct' =&gt;  8*3600, 'sgt' =&gt;  8*3600, 'wadt'=&gt;  8*3600,</div><div class='del'>-      'jst' =&gt;  9*3600, 'kst' =&gt;  9*3600,</div><div class='del'>-      'east'=&gt; 10*3600, 'gst' =&gt; 10*3600,</div><div class='del'>-      'eadt'=&gt; 11*3600,</div><div class='del'>-      'idle'=&gt; 12*3600, 'nzst'=&gt; 12*3600, 'nzt' =&gt; 12*3600,</div><div class='del'>-      'nzdt'=&gt; 13*3600,</div><div class='del'>-</div><div class='del'>-      'afghanistan'           =&gt;   16200, 'alaskan'               =&gt;  -32400,</div><div class='del'>-      'arab'                  =&gt;   10800, 'arabian'               =&gt;   14400,</div><div class='del'>-      'arabic'                =&gt;   10800, 'atlantic'              =&gt;  -14400,</div><div class='del'>-      'aus central'           =&gt;   34200, 'aus eastern'           =&gt;   36000,</div><div class='del'>-      'azores'                =&gt;   -3600, 'canada central'        =&gt;  -21600,</div><div class='del'>-      'cape verde'            =&gt;   -3600, 'caucasus'              =&gt;   14400,</div><div class='del'>-      'cen. australia'        =&gt;   34200, 'central america'       =&gt;  -21600,</div><div class='del'>-      'central asia'          =&gt;   21600, 'central europe'        =&gt;    3600,</div><div class='del'>-      'central european'      =&gt;    3600, 'central pacific'       =&gt;   39600,</div><div class='del'>-      'central'               =&gt;  -21600, 'china'                 =&gt;   28800,</div><div class='del'>-      'dateline'              =&gt;  -43200, 'e. africa'             =&gt;   10800,</div><div class='del'>-      'e. australia'          =&gt;   36000, 'e. europe'             =&gt;    7200,</div><div class='del'>-      'e. south america'      =&gt;  -10800, 'eastern'               =&gt;  -18000,</div><div class='del'>-      'egypt'                 =&gt;    7200, 'ekaterinburg'          =&gt;   18000,</div><div class='del'>-      'fiji'                  =&gt;   43200, 'fle'                   =&gt;    7200,</div><div class='del'>-      'greenland'             =&gt;  -10800, 'greenwich'             =&gt;       0,</div><div class='del'>-      'gtb'                   =&gt;    7200, 'hawaiian'              =&gt;  -36000,</div><div class='del'>-      'india'                 =&gt;   19800, 'iran'                  =&gt;   12600,</div><div class='del'>-      'jerusalem'             =&gt;    7200, 'korea'                 =&gt;   32400,</div><div class='del'>-      'mexico'                =&gt;  -21600, 'mid-atlantic'          =&gt;   -7200,</div><div class='del'>-      'mountain'              =&gt;  -25200, 'myanmar'               =&gt;   23400,</div><div class='del'>-      'n. central asia'       =&gt;   21600, 'nepal'                 =&gt;   20700,</div><div class='del'>-      'new zealand'           =&gt;   43200, 'newfoundland'          =&gt;  -12600,</div><div class='del'>-      'north asia east'       =&gt;   28800, 'north asia'            =&gt;   25200,</div><div class='del'>-      'pacific sa'            =&gt;  -14400, 'pacific'               =&gt;  -28800,</div><div class='del'>-      'romance'               =&gt;    3600, 'russian'               =&gt;   10800,</div><div class='del'>-      'sa eastern'            =&gt;  -10800, 'sa pacific'            =&gt;  -18000,</div><div class='del'>-      'sa western'            =&gt;  -14400, 'samoa'                 =&gt;  -39600,</div><div class='del'>-      'se asia'               =&gt;   25200, 'malay peninsula'       =&gt;   28800,</div><div class='del'>-      'south africa'          =&gt;    7200, 'sri lanka'             =&gt;   21600,</div><div class='del'>-      'taipei'                =&gt;   28800, 'tasmania'              =&gt;   36000,</div><div class='del'>-      'tokyo'                 =&gt;   32400, 'tonga'                 =&gt;   46800,</div><div class='del'>-      'us eastern'            =&gt;  -18000, 'us mountain'           =&gt;  -25200,</div><div class='del'>-      'vladivostok'           =&gt;   36000, 'w. australia'          =&gt;   28800,</div><div class='del'>-      'w. central africa'     =&gt;    3600, 'w. europe'             =&gt;    3600,</div><div class='del'>-      'west asia'             =&gt;   18000, 'west pacific'          =&gt;   36000,</div><div class='del'>-      'yakutsk'               =&gt;   32400</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    [MONTHS, DAYS, ABBR_MONTHS, ABBR_DAYS, ZONES].each do |x|</div><div class='del'>-      x.freeze</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Bag # :nodoc:</div><div class='del'>-</div><div class='del'>-      def initialize</div><div class='del'>-	@elem = {}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def method_missing(t, *args, &amp;block)</div><div class='del'>-	t = t.to_s</div><div class='del'>-	set = t.chomp!('=')</div><div class='del'>-	t = t.intern</div><div class='del'>-	if set</div><div class='del'>-	  @elem[t] = args[0]</div><div class='del'>-	else</div><div class='del'>-	  @elem[t]</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_hash</div><div class='del'>-	@elem.reject{|k, v| /\A_/ =~ k.to_s || v.nil?}</div><div class='del'>-      end</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'>-  def emit(e, f) # :nodoc:</div><div class='del'>-    case e</div><div class='del'>-    when Numeric</div><div class='del'>-      sign = %w(+ + -)[e &lt;=&gt; 0]</div><div class='del'>-      e = e.abs</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    s = e.to_s</div><div class='del'>-</div><div class='del'>-    if f[:s] &amp;&amp; f[:p] == '0'</div><div class='del'>-      f[:w] -= 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if f[:s] &amp;&amp; f[:p] == "\s"</div><div class='del'>-      s[0,0] = sign</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if f[:p] != '-'</div><div class='del'>-      s = s.rjust(f[:w], f[:p])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if f[:s] &amp;&amp; f[:p] != "\s"</div><div class='del'>-      s[0,0] = sign</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    s = s.upcase if f[:u]</div><div class='del'>-    s = s.downcase if f[:d]</div><div class='del'>-    s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def emit_w(e, w, f) # :nodoc:</div><div class='del'>-    f[:w] = [f[:w], w].compact.max</div><div class='del'>-    emit(e, f)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def emit_n(e, w, f) # :nodoc:</div><div class='del'>-    f[:p] ||= '0'</div><div class='del'>-    emit_w(e, w, f)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def emit_sn(e, w, f) # :nodoc:</div><div class='del'>-    if e &lt; 0</div><div class='del'>-      w += 1</div><div class='del'>-      f[:s] = true</div><div class='del'>-    end</div><div class='del'>-    emit_n(e, w, f)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def emit_z(e, w, f) # :nodoc:</div><div class='del'>-    w += 1</div><div class='del'>-    f[:s] = true</div><div class='del'>-    emit_n(e, w, f)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def emit_a(e, w, f) # :nodoc:</div><div class='del'>-    f[:p] ||= "\s"</div><div class='del'>-    emit_w(e, w, f)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def emit_ad(e, w, f) # :nodoc:</div><div class='del'>-    if f[:x]</div><div class='del'>-      f[:u] = true</div><div class='del'>-      f[:d] = false</div><div class='del'>-    end</div><div class='del'>-    emit_a(e, w, f)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def emit_au(e, w, f) # :nodoc:</div><div class='del'>-    if f[:x]</div><div class='del'>-      f[:u] = false</div><div class='del'>-      f[:d] = true</div><div class='del'>-    end</div><div class='del'>-    emit_a(e, w, f)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :emit, :emit_w, :emit_n, :emit_sn, :emit_z,</div><div class='del'>-	  :emit_a, :emit_ad, :emit_au</div><div class='del'>-</div><div class='del'>-  def strftime(fmt='%F')</div><div class='del'>-    fmt.gsub(/%([-_0^#]+)?(\d+)?([EO]?(?::{1,3}z|.))/m) do |m|</div><div class='del'>-      f = {}</div><div class='del'>-      a = $&amp;</div><div class='del'>-      s, w, c = $1, $2, $3</div><div class='del'>-      if s</div><div class='del'>-	s.scan(/./) do |k|</div><div class='del'>-	  case k</div><div class='del'>-	  when '-'; f[:p] = '-'</div><div class='del'>-	  when '_'; f[:p] = "\s"</div><div class='del'>-	  when '0'; f[:p] = '0'</div><div class='del'>-	  when '^'; f[:u] = true</div><div class='del'>-	  when '#'; f[:x] = true</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if w</div><div class='del'>-	f[:w] = w.to_i</div><div class='del'>-      end</div><div class='del'>-      case c</div><div class='del'>-      when 'A'; emit_ad(DAYNAMES[wday], 0, f)</div><div class='del'>-      when 'a'; emit_ad(ABBR_DAYNAMES[wday], 0, f)</div><div class='del'>-      when 'B'; emit_ad(MONTHNAMES[mon], 0, f)</div><div class='del'>-      when 'b'; emit_ad(ABBR_MONTHNAMES[mon], 0, f)</div><div class='del'>-      when 'C', 'EC'; emit_sn((year / 100).floor, 2, f)</div><div class='del'>-      when 'c', 'Ec'; emit_a(strftime('%a %b %e %H:%M:%S %Y'), 0, f)</div><div class='del'>-      when 'D'; emit_a(strftime('%m/%d/%y'), 0, f)</div><div class='del'>-      when 'd', 'Od'; emit_n(mday, 2, f)</div><div class='del'>-      when 'e', 'Oe'; emit_a(mday, 2, f)</div><div class='del'>-      when 'F'</div><div class='del'>-	if m == '%F'</div><div class='del'>-	  format('%.4d-%02d-%02d', year, mon, mday) # 4p</div><div class='del'>-	else</div><div class='del'>-	  emit_a(strftime('%Y-%m-%d'), 0, f)</div><div class='del'>-	end</div><div class='del'>-      when 'G'; emit_sn(cwyear, 4, f)</div><div class='del'>-      when 'g'; emit_n(cwyear % 100, 2, f)</div><div class='del'>-      when 'H', 'OH'; emit_n(hour, 2, f)</div><div class='del'>-      when 'h'; emit_ad(strftime('%b'), 0, f)</div><div class='del'>-      when 'I', 'OI'; emit_n((hour % 12).nonzero? || 12, 2, f)</div><div class='del'>-      when 'j'; emit_n(yday, 3, f)</div><div class='del'>-      when 'k'; emit_a(hour, 2, f)</div><div class='del'>-      when 'L'</div><div class='del'>-	emit_n((sec_fraction / MILLISECONDS_IN_DAY).floor, 3, f)</div><div class='del'>-      when 'l'; emit_a((hour % 12).nonzero? || 12, 2, f)</div><div class='del'>-      when 'M', 'OM'; emit_n(min, 2, f)</div><div class='del'>-      when 'm', 'Om'; emit_n(mon, 2, f)</div><div class='del'>-      when 'N'</div><div class='del'>-	emit_n((sec_fraction / NANOSECONDS_IN_DAY).floor, 9, f)</div><div class='del'>-      when 'n'; "\n"</div><div class='del'>-      when 'P'; emit_ad(strftime('%p').downcase, 0, f)</div><div class='del'>-      when 'p'; emit_au(if hour &lt; 12 then 'AM' else 'PM' end, 0, f)</div><div class='del'>-      when 'Q'</div><div class='del'>-	s = ((ajd - UNIX_EPOCH_IN_AJD) / MILLISECONDS_IN_DAY).round</div><div class='del'>-	emit_sn(s, 1, f)</div><div class='del'>-      when 'R'; emit_a(strftime('%H:%M'), 0, f)</div><div class='del'>-      when 'r'; emit_a(strftime('%I:%M:%S %p'), 0, f)</div><div class='del'>-      when 'S', 'OS'; emit_n(sec, 2, f)</div><div class='del'>-      when 's'</div><div class='del'>-	s = ((ajd - UNIX_EPOCH_IN_AJD) / SECONDS_IN_DAY).round</div><div class='del'>-	emit_sn(s, 1, f)</div><div class='del'>-      when 'T'</div><div class='del'>-	if m == '%T'</div><div class='del'>-	  format('%02d:%02d:%02d', hour, min, sec) # 4p</div><div class='del'>-	else</div><div class='del'>-	  emit_a(strftime('%H:%M:%S'), 0, f)</div><div class='del'>-	end</div><div class='del'>-      when 't'; "\t"</div><div class='del'>-      when 'U', 'W', 'OU', 'OW'</div><div class='del'>-	emit_n(if c[-1,1] == 'U' then wnum0 else wnum1 end, 2, f)</div><div class='del'>-      when 'u', 'Ou'; emit_n(cwday, 1, f)</div><div class='del'>-      when 'V', 'OV'; emit_n(cweek, 2, f)</div><div class='del'>-      when 'v'; emit_a(strftime('%e-%b-%Y'), 0, f)</div><div class='del'>-      when 'w', 'Ow'; emit_n(wday, 1, f)</div><div class='del'>-      when 'X', 'EX'; emit_a(strftime('%H:%M:%S'), 0, f)</div><div class='del'>-      when 'x', 'Ex'; emit_a(strftime('%m/%d/%y'), 0, f)</div><div class='del'>-      when 'Y', 'EY'; emit_sn(year, 4, f)</div><div class='del'>-      when 'y', 'Ey', 'Oy'; emit_n(year % 100, 2, f)</div><div class='del'>-      when 'Z'; emit_au(strftime('%:z'), 0, f)</div><div class='del'>-      when /\A(:{0,3})z/</div><div class='del'>-	t = $1.size</div><div class='del'>-	sign = if offset &lt; 0 then -1 else +1 end</div><div class='del'>-	fr = offset.abs</div><div class='del'>-	ss = fr.div(SECONDS_IN_DAY) # 4p</div><div class='del'>-	hh, ss = ss.divmod(3600)</div><div class='del'>-	mm, ss = ss.divmod(60)</div><div class='del'>-	if t == 3</div><div class='del'>-	  if    ss.nonzero? then t =  2</div><div class='del'>-	  elsif mm.nonzero? then t =  1</div><div class='del'>-	  else                   t = -1</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	case t</div><div class='del'>-	when -1</div><div class='del'>-	  tail = []</div><div class='del'>-	  sep = ''</div><div class='del'>-	when 0</div><div class='del'>-	  f[:w] -= 2 if f[:w]</div><div class='del'>-	  tail = ['%02d' % mm]</div><div class='del'>-	  sep = ''</div><div class='del'>-	when 1</div><div class='del'>-	  f[:w] -= 3 if f[:w]</div><div class='del'>-	  tail = ['%02d' % mm]</div><div class='del'>-	  sep = ':'</div><div class='del'>-	when 2</div><div class='del'>-	  f[:w] -= 6 if f[:w]</div><div class='del'>-	  tail = ['%02d' % mm, '%02d' % ss]</div><div class='del'>-	  sep = ':'</div><div class='del'>-	end</div><div class='del'>-	([emit_z(sign * hh, 2, f)] + tail).join(sep)</div><div class='del'>-      when '%'; emit_a('%', 0, f)</div><div class='del'>-      when '+'; emit_a(strftime('%a %b %e %H:%M:%S %Z %Y'), 0, f)</div><div class='del'>-      when '1'</div><div class='del'>-	if $VERBOSE</div><div class='del'>-	  warn("warning: strftime: %1 is deprecated; forget this")</div><div class='del'>-	end</div><div class='del'>-	emit_n(jd, 1, f)</div><div class='del'>-      when '2'</div><div class='del'>-	if $VERBOSE</div><div class='del'>-	  warn("warning: strftime: %2 is deprecated; use '%Y-%j'")</div><div class='del'>-	end</div><div class='del'>-	emit_a(strftime('%Y-%j'), 0, f)</div><div class='del'>-      when '3'</div><div class='del'>-	if $VERBOSE</div><div class='del'>-	  warn("warning: strftime: %3 is deprecated; use '%F'")</div><div class='del'>-	end</div><div class='del'>-	emit_a(strftime('%F'), 0, f)</div><div class='del'>-      else</div><div class='del'>-	a</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-# alias_method :format, :strftime</div><div class='del'>-</div><div class='del'>-  def asctime() strftime('%c') end</div><div class='del'>-</div><div class='del'>-  alias_method :ctime, :asctime</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def iso8601() strftime('%F') end</div><div class='del'>-</div><div class='del'>-  def rfc3339() iso8601 end</div><div class='del'>-</div><div class='del'>-  def rfc2822() strftime('%a, %-d %b %Y %T %z') end</div><div class='del'>-</div><div class='del'>-  alias_method :rfc822, :rfc2822</div><div class='del'>-</div><div class='del'>-  def jisx0301</div><div class='del'>-    if jd &lt; 2405160</div><div class='del'>-      iso8601</div><div class='del'>-    else</div><div class='del'>-      case jd</div><div class='del'>-      when 2405160...2419614</div><div class='del'>-	g = 'M%02d' % (year - 1867)</div><div class='del'>-      when 2419614...2424875</div><div class='del'>-	g = 'T%02d' % (year - 1911)</div><div class='del'>-      when 2424875...2447535</div><div class='del'>-	g = 'S%02d' % (year - 1925)</div><div class='del'>-      else</div><div class='del'>-	g = 'H%02d' % (year - 1988)</div><div class='del'>-      end</div><div class='del'>-      g + strftime('.%m.%d')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def beat(n=0)</div><div class='del'>-    i, f = (new_offset(HOURS_IN_DAY).day_fraction * 1000).divmod(1)</div><div class='del'>-    ('@%03d' % i) +</div><div class='del'>-      if n &lt; 1</div><div class='del'>-	''</div><div class='del'>-      else</div><div class='del'>-	'.%0*d' % [n, (f / Rational(1, 10**n)).round]</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.num_pattern? (s) # :nodoc:</div><div class='del'>-    /\A%[EO]?[CDdeFGgHIjkLlMmNQRrSsTUuVvWwXxYy\d]/ =~ s || /\A\d/ =~ s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :num_pattern?</div><div class='del'>-</div><div class='del'>-  def self._strptime_i(str, fmt, e) # :nodoc:</div><div class='del'>-    fmt.scan(/%([EO]?(?::{1,3}z|.))|(.)/m) do |s, c|</div><div class='del'>-      a = $&amp;</div><div class='del'>-      if s</div><div class='del'>-	case s</div><div class='del'>-	when 'A', 'a'</div><div class='del'>-	  return unless str.sub!(/\A(#{Format::DAYS.keys.join('|')})/io, '') ||</div><div class='del'>-			str.sub!(/\A(#{Format::ABBR_DAYS.keys.join('|')})/io, '')</div><div class='del'>-	  val = Format::DAYS[$1.downcase] || Format::ABBR_DAYS[$1.downcase]</div><div class='del'>-	  return unless val</div><div class='del'>-	  e.wday = val</div><div class='del'>-	when 'B', 'b', 'h'</div><div class='del'>-	  return unless str.sub!(/\A(#{Format::MONTHS.keys.join('|')})/io, '') ||</div><div class='del'>-			str.sub!(/\A(#{Format::ABBR_MONTHS.keys.join('|')})/io, '')</div><div class='del'>-	  val = Format::MONTHS[$1.downcase] || Format::ABBR_MONTHS[$1.downcase]</div><div class='del'>-	  return unless val</div><div class='del'>-	  e.mon = val</div><div class='del'>-	when 'C', 'EC'</div><div class='del'>-	  return unless str.sub!(if num_pattern?($')</div><div class='del'>-				 then /\A([-+]?\d{1,2})/</div><div class='del'>-				 else /\A([-+]?\d{1,})/</div><div class='del'>-				 end, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  e._cent = val</div><div class='del'>-	when 'c', 'Ec'</div><div class='del'>-	  return unless _strptime_i(str, '%a %b %e %H:%M:%S %Y', e)</div><div class='del'>-	when 'D'</div><div class='del'>-	  return unless _strptime_i(str, '%m/%d/%y', e)</div><div class='del'>-	when 'd', 'e', 'Od', 'Oe'</div><div class='del'>-	  return unless str.sub!(/\A( \d|\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (1..31) === val</div><div class='del'>-	  e.mday = val</div><div class='del'>-	when 'F'</div><div class='del'>-	  return unless _strptime_i(str, '%Y-%m-%d', e)</div><div class='del'>-	when 'G'</div><div class='del'>-	  return unless str.sub!(if num_pattern?($')</div><div class='del'>-				 then /\A([-+]?\d{1,4})/</div><div class='del'>-				 else /\A([-+]?\d{1,})/</div><div class='del'>-				 end, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  e.cwyear = val</div><div class='del'>-	when 'g'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (0..99) === val</div><div class='del'>-	  e.cwyear = val</div><div class='del'>-	  e._cent ||= if val &gt;= 69 then 19 else 20 end</div><div class='del'>-	when 'H', 'k', 'OH'</div><div class='del'>-	  return unless str.sub!(/\A( \d|\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (0..24) === val</div><div class='del'>-	  e.hour = val</div><div class='del'>-	when 'I', 'l', 'OI'</div><div class='del'>-	  return unless str.sub!(/\A( \d|\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (1..12) === val</div><div class='del'>-	  e.hour = val</div><div class='del'>-	when 'j'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1,3})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (1..366) === val</div><div class='del'>-	  e.yday = val</div><div class='del'>-	when 'L'</div><div class='del'>-	  return unless str.sub!(if num_pattern?($')</div><div class='del'>-				 then /\A([-+]?\d{1,3})/</div><div class='del'>-				 else /\A([-+]?\d{1,})/</div><div class='del'>-				 end, '')</div><div class='del'>-#	  val = Rational($1.to_i, 10**3)</div><div class='del'>-	  val = Rational($1.to_i, 10**$1.size)</div><div class='del'>-	  e.sec_fraction = val</div><div class='del'>-	when 'M', 'OM'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (0..59) === val</div><div class='del'>-	  e.min = val</div><div class='del'>-	when 'm', 'Om'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (1..12) === val</div><div class='del'>-	  e.mon = val</div><div class='del'>-	when 'N'</div><div class='del'>-	  return unless str.sub!(if num_pattern?($')</div><div class='del'>-				 then /\A([-+]?\d{1,9})/</div><div class='del'>-				 else /\A([-+]?\d{1,})/</div><div class='del'>-				 end, '')</div><div class='del'>-#	  val = Rational($1.to_i, 10**9)</div><div class='del'>-	  val = Rational($1.to_i, 10**$1.size)</div><div class='del'>-	  e.sec_fraction = val</div><div class='del'>-	when 'n', 't'</div><div class='del'>-	  return unless _strptime_i(str, "\s", e)</div><div class='del'>-	when 'P', 'p'</div><div class='del'>-	  return unless str.sub!(/\A([ap])(?:m\b|\.m\.)/i, '')</div><div class='del'>-	  e._merid = if $1.downcase == 'a' then 0 else 12 end</div><div class='del'>-	when 'Q'</div><div class='del'>-	  return unless str.sub!(/\A(-?\d{1,})/, '')</div><div class='del'>-	  val = Rational($1.to_i, 10**3)</div><div class='del'>-	  e.seconds = val</div><div class='del'>-	when 'R'</div><div class='del'>-	  return unless _strptime_i(str, '%H:%M', e)</div><div class='del'>-	when 'r'</div><div class='del'>-	  return unless _strptime_i(str, '%I:%M:%S %p', e)</div><div class='del'>-	when 'S', 'OS'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (0..60) === val</div><div class='del'>-	  e.sec = val</div><div class='del'>-	when 's'</div><div class='del'>-	  return unless str.sub!(/\A(-?\d{1,})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  e.seconds = val</div><div class='del'>-	when 'T'</div><div class='del'>-	  return unless _strptime_i(str, '%H:%M:%S', e)</div><div class='del'>-	when 'U', 'W', 'OU', 'OW'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (0..53) === val</div><div class='del'>-	  e.__send__(if s[-1,1] == 'U' then :wnum0= else :wnum1= end, val)</div><div class='del'>-	when 'u', 'Ou'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (1..7) === val</div><div class='del'>-	  e.cwday = val</div><div class='del'>-	when 'V', 'OV'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (1..53) === val</div><div class='del'>-	  e.cweek = val</div><div class='del'>-	when 'v'</div><div class='del'>-	  return unless _strptime_i(str, '%e-%b-%Y', e)</div><div class='del'>-	when 'w'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (0..6) === val</div><div class='del'>-	  e.wday = val</div><div class='del'>-	when 'X', 'EX'</div><div class='del'>-	  return unless _strptime_i(str, '%H:%M:%S', e)</div><div class='del'>-	when 'x', 'Ex'</div><div class='del'>-	  return unless _strptime_i(str, '%m/%d/%y', e)</div><div class='del'>-	when 'Y', 'EY'</div><div class='del'>-	  return unless str.sub!(if num_pattern?($')</div><div class='del'>-				 then /\A([-+]?\d{1,4})/</div><div class='del'>-				 else /\A([-+]?\d{1,})/</div><div class='del'>-				 end, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  e.year = val</div><div class='del'>-	when 'y', 'Ey', 'Oy'</div><div class='del'>-	  return unless str.sub!(/\A(\d{1,2})/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  return unless (0..99) === val</div><div class='del'>-	  e.year = val</div><div class='del'>-	  e._cent ||= if val &gt;= 69 then 19 else 20 end</div><div class='del'>-	when 'Z', /\A:{0,3}z/</div><div class='del'>-	  return unless str.sub!(/\A((?:gmt|utc?)?[-+]\d+(?:[,.:]\d+(?::\d+)?)?</div><div class='del'>-				    |[[:alpha:].\s]+(?:standard|daylight)\s+time\b</div><div class='del'>-				    |[[:alpha:]]+(?:\s+dst)?\b</div><div class='del'>-				    )/ix, '')</div><div class='del'>-	  val = $1</div><div class='del'>-	  e.zone = val</div><div class='del'>-	  offset = zone_to_diff(val)</div><div class='del'>-	  e.offset = offset</div><div class='del'>-	when '%'</div><div class='del'>-	  return unless str.sub!(/\A%/, '')</div><div class='del'>-	when '+'</div><div class='del'>-	  return unless _strptime_i(str, '%a %b %e %H:%M:%S %Z %Y', e)</div><div class='del'>-	when '1'</div><div class='del'>-	  if $VERBOSE</div><div class='del'>-	    warn("warning: strptime: %1 is deprecated; forget this")</div><div class='del'>-	  end</div><div class='del'>-	  return unless str.sub!(/\A(\d+)/, '')</div><div class='del'>-	  val = $1.to_i</div><div class='del'>-	  e.jd = val</div><div class='del'>-	when '2'</div><div class='del'>-	  if $VERBOSE</div><div class='del'>-	    warn("warning: strptime: %2 is deprecated; use '%Y-%j'")</div><div class='del'>-	  end</div><div class='del'>-	  return unless _strptime_i(str, '%Y-%j', e)</div><div class='del'>-	when '3'</div><div class='del'>-	  if $VERBOSE</div><div class='del'>-	    warn("warning: strptime: %3 is deprecated; use '%F'")</div><div class='del'>-	  end</div><div class='del'>-	  return unless _strptime_i(str, '%F', e)</div><div class='del'>-	else</div><div class='del'>-	  return unless str.sub!(Regexp.new('\\A' + Regexp.quote(a)), '')</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	case c</div><div class='del'>-	when /\A[\s\v]/</div><div class='del'>-	  str.sub!(/\A[\s\v]+/, '')</div><div class='del'>-	else</div><div class='del'>-	  return unless str.sub!(Regexp.new('\\A' + Regexp.quote(a)), '')</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'>-  private_class_method :_strptime_i</div><div class='del'>-</div><div class='del'>-  def self._strptime(str, fmt='%F')</div><div class='del'>-    str = str.dup</div><div class='del'>-    e = Format::Bag.new</div><div class='del'>-    return unless _strptime_i(str, fmt, e)</div><div class='del'>-</div><div class='del'>-    if e._cent</div><div class='del'>-      if e.cwyear</div><div class='del'>-	e.cwyear += e._cent * 100</div><div class='del'>-      end</div><div class='del'>-      if e.year</div><div class='del'>-	e.  year += e._cent * 100</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if e._merid</div><div class='del'>-      if e.hour</div><div class='del'>-	e.hour %= 12</div><div class='del'>-	e.hour += e._merid</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    unless str.empty?</div><div class='del'>-      e.leftover = str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    e.to_hash</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.s3e(e, y, m, d, bc=false)</div><div class='del'>-    unless String === m</div><div class='del'>-      m = m.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if y &amp;&amp; m &amp;&amp; !d</div><div class='del'>-      y, m, d = d, y, m</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if y == nil</div><div class='del'>-      if d &amp;&amp; d.size &gt; 2</div><div class='del'>-	y = d</div><div class='del'>-	d = nil</div><div class='del'>-      end</div><div class='del'>-      if d &amp;&amp; d[0,1] == "'"</div><div class='del'>-	y = d</div><div class='del'>-	d = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if y</div><div class='del'>-      y.scan(/(\d+)(.+)?/)</div><div class='del'>-      if $2</div><div class='del'>-	y, d = d, $1</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if m</div><div class='del'>-      if m[0,1] == "'" || m.size &gt; 2</div><div class='del'>-	y, m, d = m, d, y # us -&gt; be</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if d</div><div class='del'>-      if d[0,1] == "'" || d.size &gt; 2</div><div class='del'>-	y, d = d, y</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if y</div><div class='del'>-      y =~ /([-+])?(\d+)/</div><div class='del'>-      if $1 || $2.size &gt; 2</div><div class='del'>-	c = false</div><div class='del'>-      end</div><div class='del'>-      iy = $&amp;.to_i</div><div class='del'>-      if bc</div><div class='del'>-	iy = -iy + 1</div><div class='del'>-      end</div><div class='del'>-      e.year = iy</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if m</div><div class='del'>-      m =~ /\d+/</div><div class='del'>-      e.mon = $&amp;.to_i</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if d</div><div class='del'>-      d =~ /\d+/</div><div class='del'>-      e.mday = $&amp;.to_i</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if c != nil</div><div class='del'>-      e._comp = c</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :s3e</div><div class='del'>-</div><div class='del'>-  def self._parse_day(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/\b(#{Format::ABBR_DAYS.keys.join('|')})[^-\d\s]*/ino, ' ')</div><div class='del'>-      e.wday = Format::ABBR_DAYS[$1.downcase]</div><div class='del'>-      true</div><div class='del'>-=begin</div><div class='del'>-    elsif str.sub!(/\b(?!\dth)(su|mo|tu|we|th|fr|sa)\b/in, ' ')</div><div class='del'>-      e.wday = %w(su mo tu we th fr sa).index($1.downcase)</div><div class='del'>-      true</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._parse_time(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(</div><div class='del'>-		/(</div><div class='del'>-		   (?:</div><div class='del'>-		     \d+\s*:\s*\d+</div><div class='del'>-		     (?:</div><div class='del'>-		       \s*:\s*\d+(?:[,.]\d*)?</div><div class='del'>-		     )?</div><div class='del'>-		   |</div><div class='del'>-		     \d+\s*h(?:\s*\d+m?(?:\s*\d+s?)?)?</div><div class='del'>-		   )</div><div class='del'>-		   (?:</div><div class='del'>-		     \s*</div><div class='del'>-		     [ap](?:m\b|\.m\.)</div><div class='del'>-		   )?</div><div class='del'>-		 |</div><div class='del'>-		   \d+\s*[ap](?:m\b|\.m\.)</div><div class='del'>-		 )</div><div class='del'>-		 (?:</div><div class='del'>-		   \s*</div><div class='del'>-		   (</div><div class='del'>-		     (?:gmt|utc?)?[-+]\d+(?:[,.:]\d+(?::\d+)?)?</div><div class='del'>-		   |</div><div class='del'>-		     [[:alpha:].\s]+(?:standard|daylight)\stime\b</div><div class='del'>-		   |</div><div class='del'>-		     [[:alpha:]]+(?:\sdst)?\b</div><div class='del'>-		   )</div><div class='del'>-		 )?</div><div class='del'>-		/inx,</div><div class='del'>-		' ')</div><div class='del'>-</div><div class='del'>-      t = $1</div><div class='del'>-      e.zone = $2 if $2</div><div class='del'>-</div><div class='del'>-      t =~ /\A(\d+)h?</div><div class='del'>-	      (?:\s*:?\s*(\d+)m?</div><div class='del'>-		(?:</div><div class='del'>-		  \s*:?\s*(\d+)(?:[,.](\d+))?s?</div><div class='del'>-		)?</div><div class='del'>-	      )?</div><div class='del'>-	    (?:\s*([ap])(?:m\b|\.m\.))?/inx</div><div class='del'>-</div><div class='del'>-      e.hour = $1.to_i</div><div class='del'>-      e.min = $2.to_i if $2</div><div class='del'>-      e.sec = $3.to_i if $3</div><div class='del'>-      e.sec_fraction = Rational($4.to_i, 10**$4.size) if $4</div><div class='del'>-</div><div class='del'>-      if $5</div><div class='del'>-	e.hour %= 12</div><div class='del'>-	if $5.downcase == 'p'</div><div class='del'>-	  e.hour += 12</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def self._parse_beat(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/@\s*(\d+)(?:[,.](\d*))?/, ' ')</div><div class='del'>-      beat = Rational($1.to_i)</div><div class='del'>-      beat += Rational($2.to_i, 10**$2.size) if $2</div><div class='del'>-      secs = Rational(beat, 1000)</div><div class='del'>-      h, min, s, fr = self.day_fraction_to_time(secs)</div><div class='del'>-      e.hour = h</div><div class='del'>-      e.min = min</div><div class='del'>-      e.sec = s</div><div class='del'>-      e.sec_fraction = fr * 86400</div><div class='del'>-      e.zone = '+01:00'</div><div class='del'>-      true</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._parse_eu(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(</div><div class='del'>-		/'?(\d+)[^-\d\s]*</div><div class='del'>-		 \s*</div><div class='del'>-		 (#{Format::ABBR_MONTHS.keys.join('|')})[^-\d\s']*</div><div class='del'>-		 (?:</div><div class='del'>-		   \s*</div><div class='del'>-		   (c(?:e|\.e\.)|b(?:ce|\.c\.e\.)|a(?:d|\.d\.)|b(?:c|\.c\.))?</div><div class='del'>-		   \s*</div><div class='del'>-		   ('?-?\d+(?:(?:st|nd|rd|th)\b)?)</div><div class='del'>-		 )?</div><div class='del'>-		/inox,</div><div class='del'>-		' ') # '</div><div class='del'>-      s3e(e, $4, Format::ABBR_MONTHS[$2.downcase], $1,</div><div class='del'>-	  $3 &amp;&amp; $3[0,1].downcase == 'b')</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_us(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(</div><div class='del'>-		/\b(#{Format::ABBR_MONTHS.keys.join('|')})[^-\d\s']*</div><div class='del'>-		 \s*</div><div class='del'>-		 ('?\d+)[^-\d\s']*</div><div class='del'>-		 (?:</div><div class='del'>-		   \s*</div><div class='del'>-		   (c(?:e|\.e\.)|b(?:ce|\.c\.e\.)|a(?:d|\.d\.)|b(?:c|\.c\.))?</div><div class='del'>-		   \s*</div><div class='del'>-		   ('?-?\d+)</div><div class='del'>-		 )?</div><div class='del'>-		/inox,</div><div class='del'>-		' ') # '</div><div class='del'>-      s3e(e, $4, Format::ABBR_MONTHS[$1.downcase], $2,</div><div class='del'>-	  $3 &amp;&amp; $3[0,1].downcase == 'b')</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_iso(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/('?[-+]?\d+)-(\d+)-('?-?\d+)/n, ' ')</div><div class='del'>-      s3e(e, $1, $2, $3)</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_iso2(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/\b(\d{2}|\d{4})?-?w(\d{2})(?:-?(\d))?\b/in, ' ')</div><div class='del'>-      e.cwyear = $1.to_i if $1</div><div class='del'>-      e.cweek = $2.to_i</div><div class='del'>-      e.cwday = $3.to_i if $3</div><div class='del'>-      true</div><div class='del'>-    elsif str.sub!(/-w-(\d)\b/in, ' ')</div><div class='del'>-      e.cwday = $1.to_i</div><div class='del'>-      true</div><div class='del'>-    elsif str.sub!(/--(\d{2})?-(\d{2})\b/n, ' ')</div><div class='del'>-      e.mon = $1.to_i if $1</div><div class='del'>-      e.mday = $2.to_i</div><div class='del'>-      true</div><div class='del'>-    elsif str.sub!(/--(\d{2})(\d{2})?\b/n, ' ')</div><div class='del'>-      e.mon = $1.to_i</div><div class='del'>-      e.mday = $2.to_i if $2</div><div class='del'>-      true</div><div class='del'>-    elsif /[,.](\d{2}|\d{4})-\d{3}\b/n !~ str &amp;&amp;</div><div class='del'>-	str.sub!(/\b(\d{2}|\d{4})-(\d{3})\b/n, ' ')</div><div class='del'>-      e.year = $1.to_i</div><div class='del'>-      e.yday = $2.to_i</div><div class='del'>-      true</div><div class='del'>-    elsif /\d-\d{3}\b/n !~ str &amp;&amp;</div><div class='del'>-	str.sub!(/\b-(\d{3})\b/n, ' ')</div><div class='del'>-      e.yday = $1.to_i</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_jis(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/\b([mtsh])(\d+)\.(\d+)\.(\d+)/in, ' ')</div><div class='del'>-      era = { 'm'=&gt;1867,</div><div class='del'>-	      't'=&gt;1911,</div><div class='del'>-	      's'=&gt;1925,</div><div class='del'>-	      'h'=&gt;1988</div><div class='del'>-	  }[$1.downcase]</div><div class='del'>-      e.year = $2.to_i + era</div><div class='del'>-      e.mon = $3.to_i</div><div class='del'>-      e.mday = $4.to_i</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_vms(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/('?-?\d+)-(#{Format::ABBR_MONTHS.keys.join('|')})[^-]*</div><div class='del'>-		-('?-?\d+)/inox, ' ')</div><div class='del'>-      s3e(e, $3, Format::ABBR_MONTHS[$2.downcase], $1)</div><div class='del'>-      true</div><div class='del'>-    elsif str.sub!(/\b(#{Format::ABBR_MONTHS.keys.join('|')})[^-]*</div><div class='del'>-		-('?-?\d+)(?:-('?-?\d+))?/inox, ' ')</div><div class='del'>-      s3e(e, $3, Format::ABBR_MONTHS[$1.downcase], $2)</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_sla(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(%r|('?-?\d+)/\s*('?\d+)(?:\D\s*('?-?\d+))?|n, ' ') # '</div><div class='del'>-      s3e(e, $3, $1, $2)</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_dot(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(%r|('?-?\d+)\.\s*('?\d+)\.\s*('?-?\d+)|n, ' ') # '</div><div class='del'>-      s3e(e, $1, $2, $3)</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_year(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/'(\d+)\b/n, ' ')</div><div class='del'>-      e.year = $1.to_i</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_mon(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/\b(#{Format::ABBR_MONTHS.keys.join('|')})\S*/ino, ' ')</div><div class='del'>-      e.mon = Format::ABBR_MONTHS[$1.downcase]</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_mday(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(/(\d+)(st|nd|rd|th)\b/in, ' ')</div><div class='del'>-      e.mday = $1.to_i</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._parse_ddd(str, e) # :nodoc:</div><div class='del'>-    if str.sub!(</div><div class='del'>-		/([-+]?)(\d{2,14})</div><div class='del'>-		  (?:</div><div class='del'>-		    \s*</div><div class='del'>-		    t?</div><div class='del'>-		    \s*</div><div class='del'>-		    (\d{2,6})?(?:[,.](\d*))?</div><div class='del'>-		  )?</div><div class='del'>-		  (?:</div><div class='del'>-		    \s*</div><div class='del'>-		    (</div><div class='del'>-		      z\b</div><div class='del'>-		    |</div><div class='del'>-		      [-+]\d{1,4}\b</div><div class='del'>-		    |</div><div class='del'>-		      \[[-+]?\d[^\]]*\]</div><div class='del'>-		    )</div><div class='del'>-		  )?</div><div class='del'>-		/inx,</div><div class='del'>-		' ')</div><div class='del'>-      case $2.size</div><div class='del'>-      when 2</div><div class='del'>-	if $3.nil? &amp;&amp; $4</div><div class='del'>-	  e.sec  = $2[-2, 2].to_i</div><div class='del'>-	else</div><div class='del'>-	  e.mday = $2[ 0, 2].to_i</div><div class='del'>-	end</div><div class='del'>-      when 4</div><div class='del'>-	if $3.nil? &amp;&amp; $4</div><div class='del'>-	  e.sec  = $2[-2, 2].to_i</div><div class='del'>-	  e.min  = $2[-4, 2].to_i</div><div class='del'>-	else</div><div class='del'>-	  e.mon  = $2[ 0, 2].to_i</div><div class='del'>-	  e.mday = $2[ 2, 2].to_i</div><div class='del'>-	end</div><div class='del'>-      when 6</div><div class='del'>-	if $3.nil? &amp;&amp; $4</div><div class='del'>-	  e.sec  = $2[-2, 2].to_i</div><div class='del'>-	  e.min  = $2[-4, 2].to_i</div><div class='del'>-	  e.hour = $2[-6, 2].to_i</div><div class='del'>-	else</div><div class='del'>-	  e.year = ($1 + $2[ 0, 2]).to_i</div><div class='del'>-	  e.mon  = $2[ 2, 2].to_i</div><div class='del'>-	  e.mday = $2[ 4, 2].to_i</div><div class='del'>-	end</div><div class='del'>-      when 8, 10, 12, 14</div><div class='del'>-	if $3.nil? &amp;&amp; $4</div><div class='del'>-	  e.sec  = $2[-2, 2].to_i</div><div class='del'>-	  e.min  = $2[-4, 2].to_i</div><div class='del'>-	  e.hour = $2[-6, 2].to_i</div><div class='del'>-	  e.mday = $2[-8, 2].to_i</div><div class='del'>-	  if $2.size &gt;= 10</div><div class='del'>-	    e.mon  = $2[-10, 2].to_i</div><div class='del'>-	  end</div><div class='del'>-	  if $2.size == 12</div><div class='del'>-	    e.year = ($1 + $2[-12, 2]).to_i</div><div class='del'>-	  end</div><div class='del'>-	  if $2.size == 14</div><div class='del'>-	    e.year = ($1 + $2[-14, 4]).to_i</div><div class='del'>-	    e._comp = false</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  e.year = ($1 + $2[ 0, 4]).to_i</div><div class='del'>-	  e.mon  = $2[ 4, 2].to_i</div><div class='del'>-	  e.mday = $2[ 6, 2].to_i</div><div class='del'>-	  e.hour = $2[ 8, 2].to_i if $2.size &gt;= 10</div><div class='del'>-	  e.min  = $2[10, 2].to_i if $2.size &gt;= 12</div><div class='del'>-	  e.sec  = $2[12, 2].to_i if $2.size &gt;= 14</div><div class='del'>-	  e._comp = false</div><div class='del'>-	end</div><div class='del'>-      when 3</div><div class='del'>-	if $3.nil? &amp;&amp; $4</div><div class='del'>-	  e.sec  = $2[-2, 2].to_i</div><div class='del'>-	  e.min  = $2[-3, 1].to_i</div><div class='del'>-	else</div><div class='del'>-	  e.yday = $2[ 0, 3].to_i</div><div class='del'>-	end</div><div class='del'>-      when 5</div><div class='del'>-	if $3.nil? &amp;&amp; $4</div><div class='del'>-	  e.sec  = $2[-2, 2].to_i</div><div class='del'>-	  e.min  = $2[-4, 2].to_i</div><div class='del'>-	  e.hour = $2[-5, 1].to_i</div><div class='del'>-	else</div><div class='del'>-	  e.year = ($1 + $2[ 0, 2]).to_i</div><div class='del'>-	  e.yday = $2[ 2, 3].to_i</div><div class='del'>-	end</div><div class='del'>-      when 7</div><div class='del'>-	if $3.nil? &amp;&amp; $4</div><div class='del'>-	  e.sec  = $2[-2, 2].to_i</div><div class='del'>-	  e.min  = $2[-4, 2].to_i</div><div class='del'>-	  e.hour = $2[-6, 2].to_i</div><div class='del'>-	  e.mday = $2[-7, 1].to_i</div><div class='del'>-	else</div><div class='del'>-	  e.year = ($1 + $2[ 0, 4]).to_i</div><div class='del'>-	  e.yday = $2[ 4, 3].to_i</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if $3</div><div class='del'>-	if $4</div><div class='del'>-	  case $3.size</div><div class='del'>-	  when 2, 4, 6</div><div class='del'>-	    e.sec  = $3[-2, 2].to_i</div><div class='del'>-	    e.min  = $3[-4, 2].to_i if $3.size &gt;= 4</div><div class='del'>-	    e.hour = $3[-6, 2].to_i if $3.size &gt;= 6</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  case $3.size</div><div class='del'>-	  when 2, 4, 6</div><div class='del'>-	    e.hour = $3[ 0, 2].to_i</div><div class='del'>-	    e.min  = $3[ 2, 2].to_i if $3.size &gt;= 4</div><div class='del'>-	    e.sec  = $3[ 4, 2].to_i if $3.size &gt;= 6</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if $4</div><div class='del'>-	e.sec_fraction = Rational($4.to_i, 10**$4.size)</div><div class='del'>-      end</div><div class='del'>-      if $5</div><div class='del'>-	e.zone = $5</div><div class='del'>-	if e.zone[0,1] == '['</div><div class='del'>-	  o, n, = e.zone[1..-2].split(':')</div><div class='del'>-	  e.zone = n || o</div><div class='del'>-	  if /\A\d/ =~ o</div><div class='del'>-	    o = format('+%s', o)</div><div class='del'>-	  end</div><div class='del'>-	  e.offset = zone_to_diff(o)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :_parse_day, :_parse_time, # :_parse_beat,</div><div class='del'>-	:_parse_eu, :_parse_us, :_parse_iso, :_parse_iso2,</div><div class='del'>-	:_parse_jis, :_parse_vms, :_parse_sla, :_parse_dot,</div><div class='del'>-	:_parse_year, :_parse_mon, :_parse_mday, :_parse_ddd</div><div class='del'>-</div><div class='del'>-  def self._parse(str, comp=false)</div><div class='del'>-    str = str.dup</div><div class='del'>-</div><div class='del'>-    e = Format::Bag.new</div><div class='del'>-</div><div class='del'>-    e._comp = comp</div><div class='del'>-</div><div class='del'>-    str.gsub!(/[^-+',.\/:@[:alnum:]\[\]\x80-\xff]+/n, ' ')</div><div class='del'>-</div><div class='del'>-    _parse_time(str, e) # || _parse_beat(str, e)</div><div class='del'>-    _parse_day(str, e)</div><div class='del'>-</div><div class='del'>-    _parse_eu(str, e)     ||</div><div class='del'>-    _parse_us(str, e)     ||</div><div class='del'>-    _parse_iso(str, e)    ||</div><div class='del'>-    _parse_jis(str, e)    ||</div><div class='del'>-    _parse_vms(str, e)    ||</div><div class='del'>-    _parse_sla(str, e)    ||</div><div class='del'>-    _parse_dot(str, e)    ||</div><div class='del'>-    _parse_iso2(str, e)   ||</div><div class='del'>-    _parse_year(str, e)   ||</div><div class='del'>-    _parse_mon(str, e)    ||</div><div class='del'>-    _parse_mday(str, e)   ||</div><div class='del'>-    _parse_ddd(str, e)</div><div class='del'>-</div><div class='del'>-    if str.sub!(/\b(bc\b|bce\b|b\.c\.|b\.c\.e\.)/in, ' ')</div><div class='del'>-      if e.year</div><div class='del'>-	e.year = -e.year + 1</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if str.sub!(/\A\s*(\d{1,2})\s*\z/n, ' ')</div><div class='del'>-      if e.hour &amp;&amp; !e.mday</div><div class='del'>-	v = $1.to_i</div><div class='del'>-	if (1..31) === v</div><div class='del'>-	  e.mday = v</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if e.mday &amp;&amp; !e.hour</div><div class='del'>-	v = $1.to_i</div><div class='del'>-	if (0..24) === v</div><div class='del'>-	  e.hour = v</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if e._comp</div><div class='del'>-      if e.cwyear</div><div class='del'>-	if e.cwyear &gt;= 0 &amp;&amp; e.cwyear &lt;= 99</div><div class='del'>-	  e.cwyear += if e.cwyear &gt;= 69</div><div class='del'>-		      then 1900 else 2000 end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if e.year</div><div class='del'>-	if e.year &gt;= 0 &amp;&amp; e.year &lt;= 99</div><div class='del'>-	  e.year += if e.year &gt;= 69</div><div class='del'>-		    then 1900 else 2000 end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    e.offset ||= zone_to_diff(e.zone) if e.zone</div><div class='del'>-</div><div class='del'>-    e.to_hash</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self.zone_to_diff(zone) # :nodoc:</div><div class='del'>-    zone = zone.downcase</div><div class='del'>-    if zone.sub!(/\s+(standard|daylight)\s+time\z/, '')</div><div class='del'>-      dst = $1 == 'daylight'</div><div class='del'>-    else</div><div class='del'>-      dst = zone.sub!(/\s+dst\z/, '')</div><div class='del'>-    end</div><div class='del'>-    if Format::ZONES.include?(zone)</div><div class='del'>-      offset = Format::ZONES[zone]</div><div class='del'>-      offset += 3600 if dst</div><div class='del'>-    elsif zone.sub!(/\A(?:gmt|utc?)?([-+])/, '')</div><div class='del'>-      sign = $1</div><div class='del'>-      if zone.include?(':')</div><div class='del'>-	hour, min, sec, = zone.split(':')</div><div class='del'>-      elsif zone.include?(',') || zone.include?('.')</div><div class='del'>-	hour, fr, = zone.split(/[,.]/)</div><div class='del'>-	min = Rational(fr.to_i, 10**fr.size) * 60</div><div class='del'>-      else</div><div class='del'>-	case zone.size</div><div class='del'>-	when 3</div><div class='del'>-	  hour = zone[0,1]</div><div class='del'>-	  min = zone[1,2]</div><div class='del'>-	else</div><div class='del'>-	  hour = zone[0,2]</div><div class='del'>-	  min = zone[2,2]</div><div class='del'>-	  sec = zone[4,2]</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      offset = hour.to_i * 3600 + min.to_i * 60 + sec.to_i</div><div class='del'>-      offset *= -1 if sign == '-'</div><div class='del'>-    end</div><div class='del'>-    offset</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class DateTime &lt; Date</div><div class='del'>-</div><div class='del'>-  def strftime(fmt='%FT%T%:z')</div><div class='del'>-    super(fmt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self._strptime(str, fmt='%FT%T%z')</div><div class='del'>-    super(str, fmt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-  def iso8601_timediv(n) # :nodoc:</div><div class='del'>-    strftime('T%T' +</div><div class='del'>-	     if n &lt; 1</div><div class='del'>-	       ''</div><div class='del'>-	     else</div><div class='del'>-	       '.%0*d' % [n, (sec_fraction / SECONDS_IN_DAY / (10**n)).round]</div><div class='del'>-	     end +</div><div class='del'>-	     '%:z')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private :iso8601_timediv</div><div class='del'>-</div><div class='del'>-  def iso8601(n=0)</div><div class='del'>-    super() + iso8601_timediv(n)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def rfc3339(n=0) iso8601(n) end</div><div class='del'>-</div><div class='del'>-  def jisx0301(n=0)</div><div class='del'>-    super() + iso8601_timediv(n)</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/date2.rb b/lib/date2.rb<br/>deleted file mode 100644<br/>index f7da78f650..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/date2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/date2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,5 +0,0 @@</div><div class='del'>-# date2 was overridden by date.</div><div class='del'>-# To be precise, date was overridden by date2,</div><div class='del'>-# and date2 was renamed to date.</div><div class='del'>-</div><div class='del'>-require 'date'</div><div class='head'>diff --git a/lib/debug.rb b/lib/debug.rb<br/>deleted file mode 100644<br/>index 9ae119f8fb..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/debug.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/debug.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,947 +0,0 @@</div><div class='del'>-# Copyright (C) 2000  Network Applied Communication Laboratory, Inc.</div><div class='del'>-# Copyright (C) 2000  Information-technology Promotion Agency, Japan</div><div class='del'>-# Copyright (C) 2000-2003  NAKAMURA, Hiroshi  &lt;nahi@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-if $SAFE &gt; 0</div><div class='del'>-  STDERR.print "-r debug.rb is not available in safe mode\n"</div><div class='del'>-  exit 1</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'tracer'</div><div class='del'>-require 'pp'</div><div class='del'>-</div><div class='del'>-class Tracer</div><div class='del'>-  def Tracer.trace_func(*vars)</div><div class='del'>-    Single.trace_func(*vars)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__</div><div class='del'>-</div><div class='del'>-class DEBUGGER__</div><div class='del'>-class Mutex</div><div class='del'>-  def initialize</div><div class='del'>-    @locker = nil</div><div class='del'>-    @waiting = []</div><div class='del'>-    @locked = false;</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def locked?</div><div class='del'>-    @locked</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lock</div><div class='del'>-    return if Thread.critical</div><div class='del'>-    return if @locker == Thread.current</div><div class='del'>-    while (Thread.critical = true; @locked)</div><div class='del'>-      @waiting.push Thread.current</div><div class='del'>-      Thread.stop</div><div class='del'>-    end</div><div class='del'>-    @locked = true</div><div class='del'>-    @locker = Thread.current</div><div class='del'>-    Thread.critical = false</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def unlock</div><div class='del'>-    return if Thread.critical</div><div class='del'>-    return unless @locked</div><div class='del'>-    unless @locker == Thread.current</div><div class='del'>-      raise RuntimeError, "unlocked by other"</div><div class='del'>-    end</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    t = @waiting.shift</div><div class='del'>-    @locked = false</div><div class='del'>-    @locker = nil</div><div class='del'>-    Thread.critical = false</div><div class='del'>-    t.run if t</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-MUTEX = Mutex.new</div><div class='del'>-</div><div class='del'>-class Context</div><div class='del'>-  DEBUG_LAST_CMD = []</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    require 'readline'</div><div class='del'>-    def readline(prompt, hist)</div><div class='del'>-      Readline::readline(prompt, hist)</div><div class='del'>-    end</div><div class='del'>-  rescue LoadError</div><div class='del'>-    def readline(prompt, hist)</div><div class='del'>-      STDOUT.print prompt</div><div class='del'>-      STDOUT.flush</div><div class='del'>-      line = STDIN.gets</div><div class='del'>-      exit unless line</div><div class='del'>-      line.chomp!</div><div class='del'>-      line</div><div class='del'>-    end</div><div class='del'>-    USE_READLINE = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize</div><div class='del'>-    if Thread.current == Thread.main</div><div class='del'>-      @stop_next = 1</div><div class='del'>-    else</div><div class='del'>-      @stop_next = 0</div><div class='del'>-    end</div><div class='del'>-    @last_file = nil</div><div class='del'>-    @file = nil</div><div class='del'>-    @line = nil</div><div class='del'>-    @no_step = nil</div><div class='del'>-    @frames = []</div><div class='del'>-    @finish_pos = 0</div><div class='del'>-    @trace = false</div><div class='del'>-    @catch = "StandardError"</div><div class='del'>-    @suspend_next = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stop_next(n=1)</div><div class='del'>-    @stop_next = n</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_suspend</div><div class='del'>-    @suspend_next = true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def clear_suspend</div><div class='del'>-    @suspend_next = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def suspend_all</div><div class='del'>-    DEBUGGER__.suspend</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def resume_all</div><div class='del'>-    DEBUGGER__.resume</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def check_suspend</div><div class='del'>-    return if Thread.critical</div><div class='del'>-    while (Thread.critical = true; @suspend_next)</div><div class='del'>-      DEBUGGER__.waiting.push Thread.current</div><div class='del'>-      @suspend_next = false</div><div class='del'>-      Thread.stop</div><div class='del'>-    end</div><div class='del'>-    Thread.critical = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trace?</div><div class='del'>-    @trace</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_trace(arg)</div><div class='del'>-    @trace = arg</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stdout</div><div class='del'>-    DEBUGGER__.stdout</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def break_points</div><div class='del'>-    DEBUGGER__.break_points</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display</div><div class='del'>-    DEBUGGER__.display</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def context(th)</div><div class='del'>-    DEBUGGER__.context(th)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_trace_all(arg)</div><div class='del'>-    DEBUGGER__.set_trace(arg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_last_thread(th)</div><div class='del'>-    DEBUGGER__.set_last_thread(th)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_eval(str, binding)</div><div class='del'>-    begin</div><div class='del'>-      val = eval(str, binding)</div><div class='del'>-    rescue StandardError, ScriptError =&gt; e</div><div class='del'>-      at = eval("caller(1)", binding)</div><div class='del'>-      stdout.printf "%s:%s\n", at.shift, e.to_s.sub(/\(eval\):1:(in `.*?':)?/, '')</div><div class='del'>-      for i in at</div><div class='del'>-	stdout.printf "\tfrom %s\n", i</div><div class='del'>-      end</div><div class='del'>-      throw :debug_error</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_silent_eval(str, binding)</div><div class='del'>-    begin</div><div class='del'>-      eval(str, binding)</div><div class='del'>-    rescue StandardError, ScriptError</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def var_list(ary, binding)</div><div class='del'>-    ary.sort!</div><div class='del'>-    for v in ary</div><div class='del'>-      stdout.printf "  %s =&gt; %s\n", v, eval(v, binding).inspect</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_variable_info(input, binding)</div><div class='del'>-    case input</div><div class='del'>-    when /^\s*g(?:lobal)?\s*$/</div><div class='del'>-      var_list(global_variables, binding)</div><div class='del'>-</div><div class='del'>-    when /^\s*l(?:ocal)?\s*$/</div><div class='del'>-      var_list(eval("local_variables", binding), binding)</div><div class='del'>-</div><div class='del'>-    when /^\s*i(?:nstance)?\s+/</div><div class='del'>-      obj = debug_eval($', binding)</div><div class='del'>-      var_list(obj.instance_variables, obj.instance_eval{binding()})</div><div class='del'>-</div><div class='del'>-    when /^\s*c(?:onst(?:ant)?)?\s+/</div><div class='del'>-      obj = debug_eval($', binding)</div><div class='del'>-      unless obj.kind_of? Module</div><div class='del'>-	stdout.print "Should be Class/Module: ", $', "\n"</div><div class='del'>-      else</div><div class='del'>-	var_list(obj.constants, obj.module_eval{binding()})</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_method_info(input, binding)</div><div class='del'>-    case input</div><div class='del'>-    when /^i(:?nstance)?\s+/</div><div class='del'>-      obj = debug_eval($', binding)</div><div class='del'>-</div><div class='del'>-      len = 0</div><div class='del'>-      for v in obj.methods.sort</div><div class='del'>-	len += v.size + 1</div><div class='del'>-	if len &gt; 70</div><div class='del'>-	  len = v.size + 1</div><div class='del'>-	  stdout.print "\n"</div><div class='del'>-	end</div><div class='del'>-	stdout.print v, " "</div><div class='del'>-      end</div><div class='del'>-      stdout.print "\n"</div><div class='del'>-</div><div class='del'>-    else</div><div class='del'>-      obj = debug_eval(input, binding)</div><div class='del'>-      unless obj.kind_of? Module</div><div class='del'>-	stdout.print "Should be Class/Module: ", input, "\n"</div><div class='del'>-      else</div><div class='del'>-	len = 0</div><div class='del'>-	for v in obj.instance_methods(false).sort</div><div class='del'>-	  len += v.size + 1</div><div class='del'>-	  if len &gt; 70</div><div class='del'>-	    len = v.size + 1</div><div class='del'>-	    stdout.print "\n"</div><div class='del'>-	  end</div><div class='del'>-	  stdout.print v, " "</div><div class='del'>-	end</div><div class='del'>-	stdout.print "\n"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def thnum</div><div class='del'>-    num = DEBUGGER__.instance_eval{@thread_list[Thread.current]}</div><div class='del'>-    unless num</div><div class='del'>-      DEBUGGER__.make_thread_list</div><div class='del'>-      num = DEBUGGER__.instance_eval{@thread_list[Thread.current]}</div><div class='del'>-    end</div><div class='del'>-    num</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_command(file, line, id, binding)</div><div class='del'>-    MUTEX.lock</div><div class='del'>-    unless defined?($debugger_restart) and $debugger_restart</div><div class='del'>-      callcc{|c| $debugger_restart = c} </div><div class='del'>-    end</div><div class='del'>-    set_last_thread(Thread.current)</div><div class='del'>-    frame_pos = 0</div><div class='del'>-    binding_file = file</div><div class='del'>-    binding_line = line</div><div class='del'>-    previous_line = nil</div><div class='del'>-    if ENV['EMACS']</div><div class='del'>-      stdout.printf "\032\032%s:%d:\n", binding_file, binding_line</div><div class='del'>-    else</div><div class='del'>-      stdout.printf "%s:%d:%s", binding_file, binding_line,</div><div class='del'>-	line_at(binding_file, binding_line)</div><div class='del'>-    end</div><div class='del'>-    @frames[0] = [binding, file, line, id]</div><div class='del'>-    display_expressions(binding)</div><div class='del'>-    prompt = true</div><div class='del'>-    while prompt and input = readline("(rdb:%d) "%thnum(), true)</div><div class='del'>-      catch(:debug_error) do</div><div class='del'>-	if input == ""</div><div class='del'>-          next unless DEBUG_LAST_CMD[0]</div><div class='del'>-	  input = DEBUG_LAST_CMD[0]</div><div class='del'>-	  stdout.print input, "\n"</div><div class='del'>-	else</div><div class='del'>-	  DEBUG_LAST_CMD[0] = input</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	case input</div><div class='del'>-	when /^\s*tr(?:ace)?(?:\s+(on|off))?(?:\s+(all))?$/</div><div class='del'>-          if defined?( $2 )</div><div class='del'>-            if $1 == 'on'</div><div class='del'>-              set_trace_all true</div><div class='del'>-            else</div><div class='del'>-              set_trace_all false</div><div class='del'>-            end</div><div class='del'>-          elsif defined?( $1 )</div><div class='del'>-            if $1 == 'on'</div><div class='del'>-              set_trace true</div><div class='del'>-            else</div><div class='del'>-              set_trace false</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if trace?</div><div class='del'>-            stdout.print "Trace on.\n"</div><div class='del'>-          else</div><div class='del'>-            stdout.print "Trace off.\n"</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-	when /^\s*b(?:reak)?\s+(?:(.+):)?([^.:]+)$/</div><div class='del'>-	  pos = $2</div><div class='del'>-          if $1</div><div class='del'>-            klass = debug_silent_eval($1, binding)</div><div class='del'>-            file = $1</div><div class='del'>-          end</div><div class='del'>-	  if pos =~ /^\d+$/</div><div class='del'>-	    pname = pos</div><div class='del'>-	    pos = pos.to_i</div><div class='del'>-	  else</div><div class='del'>-	    pname = pos = pos.intern.id2name</div><div class='del'>-	  end</div><div class='del'>-	  break_points.push [true, 0, klass || file, pos]</div><div class='del'>-	  stdout.printf "Set breakpoint %d at %s:%s\n", break_points.size, klass || file, pname</div><div class='del'>-</div><div class='del'>-	when /^\s*b(?:reak)?\s+(.+)[#.]([^.:]+)$/</div><div class='del'>-	  pos = $2.intern.id2name</div><div class='del'>-	  klass = debug_eval($1, binding)</div><div class='del'>-	  break_points.push [true, 0, klass, pos]</div><div class='del'>-	  stdout.printf "Set breakpoint %d at %s.%s\n", break_points.size, klass, pos</div><div class='del'>-</div><div class='del'>-	when /^\s*wat(?:ch)?\s+(.+)$/</div><div class='del'>-	  exp = $1</div><div class='del'>-	  break_points.push [true, 1, exp]</div><div class='del'>-	  stdout.printf "Set watchpoint %d:%s\n", break_points.size, exp</div><div class='del'>-</div><div class='del'>-	when /^\s*b(?:reak)?$/</div><div class='del'>-	  if break_points.find{|b| b[1] == 0}</div><div class='del'>-	    n = 1</div><div class='del'>-	    stdout.print "Breakpoints:\n"</div><div class='del'>-	    for b in break_points</div><div class='del'>-	      if b[0] and b[1] == 0</div><div class='del'>-		stdout.printf "  %d %s:%s\n", n, b[2], b[3] </div><div class='del'>-	      end</div><div class='del'>-	      n += 1</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	  if break_points.find{|b| b[1] == 1}</div><div class='del'>-	    n = 1</div><div class='del'>-	    stdout.print "\n"</div><div class='del'>-	    stdout.print "Watchpoints:\n"</div><div class='del'>-	    for b in break_points</div><div class='del'>-	      if b[0] and b[1] == 1</div><div class='del'>-		stdout.printf "  %d %s\n", n, b[2]</div><div class='del'>-	      end</div><div class='del'>-	      n += 1</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	  if break_points.size == 0</div><div class='del'>-	    stdout.print "No breakpoints\n"</div><div class='del'>-	  else</div><div class='del'>-	    stdout.print "\n"</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	when /^\s*del(?:ete)?(?:\s+(\d+))?$/</div><div class='del'>-	  pos = $1</div><div class='del'>-	  unless pos</div><div class='del'>-	    input = readline("Clear all breakpoints? (y/n) ", false)</div><div class='del'>-	    if input == "y"</div><div class='del'>-	      for b in break_points</div><div class='del'>-		b[0] = false</div><div class='del'>-	      end</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    pos = pos.to_i</div><div class='del'>-	    if break_points[pos-1]</div><div class='del'>-	      break_points[pos-1][0] = false</div><div class='del'>-	    else</div><div class='del'>-	      stdout.printf "Breakpoint %d is not defined\n", pos</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	when /^\s*disp(?:lay)?\s+(.+)$/</div><div class='del'>-	  exp = $1</div><div class='del'>-	  display.push [true, exp]</div><div class='del'>-	  stdout.printf "%d: ", display.size</div><div class='del'>-	  display_expression(exp, binding)</div><div class='del'>-</div><div class='del'>-	when /^\s*disp(?:lay)?$/</div><div class='del'>-	  display_expressions(binding)</div><div class='del'>-</div><div class='del'>-	when /^\s*undisp(?:lay)?(?:\s+(\d+))?$/</div><div class='del'>-	  pos = $1</div><div class='del'>-	  unless pos</div><div class='del'>-	    input = readline("Clear all expressions? (y/n) ", false)</div><div class='del'>-	    if input == "y"</div><div class='del'>-	      for d in display</div><div class='del'>-		d[0] = false</div><div class='del'>-	      end</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    pos = pos.to_i</div><div class='del'>-	    if display[pos-1]</div><div class='del'>-	      display[pos-1][0] = false</div><div class='del'>-	    else</div><div class='del'>-	      stdout.printf "Display expression %d is not defined\n", pos</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	when /^\s*c(?:ont)?$/</div><div class='del'>-	  prompt = false</div><div class='del'>-</div><div class='del'>-	when /^\s*s(?:tep)?(?:\s+(\d+))?$/</div><div class='del'>-	  if $1</div><div class='del'>-	    lev = $1.to_i</div><div class='del'>-	  else</div><div class='del'>-	    lev = 1</div><div class='del'>-	  end</div><div class='del'>-	  @stop_next = lev</div><div class='del'>-	  prompt = false</div><div class='del'>-</div><div class='del'>-	when /^\s*n(?:ext)?(?:\s+(\d+))?$/</div><div class='del'>-	  if $1</div><div class='del'>-	    lev = $1.to_i</div><div class='del'>-	  else</div><div class='del'>-	    lev = 1</div><div class='del'>-	  end</div><div class='del'>-	  @stop_next = lev</div><div class='del'>-	  @no_step = @frames.size - frame_pos</div><div class='del'>-	  prompt = false</div><div class='del'>-</div><div class='del'>-	when /^\s*w(?:here)?$/, /^\s*f(?:rame)?$/</div><div class='del'>-	  display_frames(frame_pos)</div><div class='del'>-</div><div class='del'>-	when /^\s*l(?:ist)?(?:\s+(.+))?$/</div><div class='del'>-	  if not $1</div><div class='del'>-	    b = previous_line ? previous_line + 10 : binding_line - 5</div><div class='del'>-	    e = b + 9</div><div class='del'>-	  elsif $1 == '-'</div><div class='del'>-	    b = previous_line ? previous_line - 10 : binding_line - 5</div><div class='del'>-	    e = b + 9</div><div class='del'>-	  else</div><div class='del'>-	    b, e = $1.split(/[-,]/)</div><div class='del'>-	    if e</div><div class='del'>-	      b = b.to_i</div><div class='del'>-	      e = e.to_i</div><div class='del'>-	    else</div><div class='del'>-	      b = b.to_i - 5</div><div class='del'>-	      e = b + 9</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	  previous_line = b</div><div class='del'>-	  display_list(b, e, binding_file, binding_line)</div><div class='del'>-</div><div class='del'>-	when /^\s*up(?:\s+(\d+))?$/</div><div class='del'>-	  previous_line = nil</div><div class='del'>-	  if $1</div><div class='del'>-	    lev = $1.to_i</div><div class='del'>-	  else</div><div class='del'>-	    lev = 1</div><div class='del'>-	  end</div><div class='del'>-	  frame_pos += lev</div><div class='del'>-	  if frame_pos &gt;= @frames.size</div><div class='del'>-	    frame_pos = @frames.size - 1</div><div class='del'>-	    stdout.print "At toplevel\n"</div><div class='del'>-	  end</div><div class='del'>-	  binding, binding_file, binding_line = @frames[frame_pos]</div><div class='del'>-	  stdout.print format_frame(frame_pos)</div><div class='del'>-</div><div class='del'>-	when /^\s*down(?:\s+(\d+))?$/</div><div class='del'>-	  previous_line = nil</div><div class='del'>-	  if $1</div><div class='del'>-	    lev = $1.to_i</div><div class='del'>-	  else</div><div class='del'>-	    lev = 1</div><div class='del'>-	  end</div><div class='del'>-	  frame_pos -= lev</div><div class='del'>-	  if frame_pos &lt; 0</div><div class='del'>-	    frame_pos = 0</div><div class='del'>-	    stdout.print "At stack bottom\n"</div><div class='del'>-	  end</div><div class='del'>-	  binding, binding_file, binding_line = @frames[frame_pos]</div><div class='del'>-	  stdout.print format_frame(frame_pos)</div><div class='del'>-</div><div class='del'>-	when /^\s*fin(?:ish)?$/</div><div class='del'>-	  if frame_pos == @frames.size</div><div class='del'>-	    stdout.print "\"finish\" not meaningful in the outermost frame.\n"</div><div class='del'>-	  else</div><div class='del'>-	    @finish_pos = @frames.size - frame_pos</div><div class='del'>-	    frame_pos = 0</div><div class='del'>-	    prompt = false</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	when /^\s*cat(?:ch)?(?:\s+(.+))?$/</div><div class='del'>-	  if $1</div><div class='del'>-	    excn = $1</div><div class='del'>-	    if excn == 'off'</div><div class='del'>-	      @catch = nil</div><div class='del'>-	      stdout.print "Clear catchpoint.\n"</div><div class='del'>-	    else</div><div class='del'>-	      @catch = excn</div><div class='del'>-	      stdout.printf "Set catchpoint %s.\n", @catch</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    if @catch</div><div class='del'>-	      stdout.printf "Catchpoint %s.\n", @catch</div><div class='del'>-	    else</div><div class='del'>-	      stdout.print "No catchpoint.\n"</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	when /^\s*q(?:uit)?$/</div><div class='del'>-	  input = readline("Really quit? (y/n) ", false)</div><div class='del'>-	  if input == "y"</div><div class='del'>-	    exit!	# exit -&gt; exit!: No graceful way to stop threads...</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	when /^\s*v(?:ar)?\s+/</div><div class='del'>-	  debug_variable_info($', binding)</div><div class='del'>-</div><div class='del'>-	when /^\s*m(?:ethod)?\s+/</div><div class='del'>-	  debug_method_info($', binding)</div><div class='del'>-</div><div class='del'>-	when /^\s*th(?:read)?\s+/</div><div class='del'>-	  if DEBUGGER__.debug_thread_info($', binding) == :cont</div><div class='del'>-	    prompt = false</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	when /^\s*pp\s+/</div><div class='del'>-	  PP.pp(debug_eval($', binding), stdout)</div><div class='del'>-</div><div class='del'>-	when /^\s*p\s+/</div><div class='del'>-	  stdout.printf "%s\n", debug_eval($', binding).inspect</div><div class='del'>-</div><div class='del'>-	when /^\s*r(?:estart)?$/</div><div class='del'>-          $debugger_restart.call</div><div class='del'>-</div><div class='del'>-	when /^\s*h(?:elp)?$/</div><div class='del'>-	  debug_print_help()</div><div class='del'>-</div><div class='del'>-	else</div><div class='del'>-	  v = debug_eval(input, binding)</div><div class='del'>-	  stdout.printf "%s\n", v.inspect</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    MUTEX.unlock</div><div class='del'>-    resume_all</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_print_help</div><div class='del'>-    stdout.print &lt;&lt;EOHELP</div><div class='del'>-Debugger help v.-0.002b</div><div class='del'>-Commands</div><div class='del'>-  b[reak] [file:|class:]&lt;line|method&gt;</div><div class='del'>-  b[reak] [class.]&lt;line|method&gt;</div><div class='del'>-                             set breakpoint to some position</div><div class='del'>-  wat[ch] &lt;expression&gt;       set watchpoint to some expression</div><div class='del'>-  cat[ch] (&lt;exception&gt;|off)  set catchpoint to an exception</div><div class='del'>-  b[reak]                    list breakpoints</div><div class='del'>-  cat[ch]                    show catchpoint</div><div class='del'>-  del[ete][ nnn]             delete some or all breakpoints</div><div class='del'>-  disp[lay] &lt;expression&gt;     add expression into display expression list</div><div class='del'>-  undisp[lay][ nnn]          delete one particular or all display expressions</div><div class='del'>-  c[ont]                     run until program ends or hit breakpoint</div><div class='del'>-  s[tep][ nnn]               step (into methods) one line or till line nnn</div><div class='del'>-  n[ext][ nnn]               go over one line or till line nnn</div><div class='del'>-  w[here]                    display frames</div><div class='del'>-  f[rame]                    alias for where</div><div class='del'>-  l[ist][ (-|nn-mm)]         list program, - lists backwards</div><div class='del'>-                             nn-mm lists given lines</div><div class='del'>-  up[ nn]                    move to higher frame</div><div class='del'>-  down[ nn]                  move to lower frame</div><div class='del'>-  fin[ish]                   return to outer frame</div><div class='del'>-  tr[ace] (on|off)           set trace mode of current thread</div><div class='del'>-  tr[ace] (on|off) all       set trace mode of all threads</div><div class='del'>-  q[uit]                     exit from debugger</div><div class='del'>-  v[ar] g[lobal]             show global variables</div><div class='del'>-  v[ar] l[ocal]              show local variables</div><div class='del'>-  v[ar] i[nstance] &lt;object&gt;  show instance variables of object</div><div class='del'>-  v[ar] c[onst] &lt;object&gt;     show constants of object</div><div class='del'>-  m[ethod] i[nstance] &lt;obj&gt;  show methods of object</div><div class='del'>-  m[ethod] &lt;class|module&gt;    show instance methods of class or module</div><div class='del'>-  th[read] l[ist]            list all threads</div><div class='del'>-  th[read] c[ur[rent]]       show current thread</div><div class='del'>-  th[read] [sw[itch]] &lt;nnn&gt;  switch thread context to nnn</div><div class='del'>-  th[read] stop &lt;nnn&gt;        stop thread nnn</div><div class='del'>-  th[read] resume &lt;nnn&gt;      resume thread nnn</div><div class='del'>-  p expression               evaluate expression and print its value</div><div class='del'>-  h[elp]                     print this help</div><div class='del'>-  &lt;everything else&gt;          evaluate</div><div class='del'>-EOHELP</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display_expressions(binding)</div><div class='del'>-    n = 1</div><div class='del'>-    for d in display</div><div class='del'>-      if d[0]</div><div class='del'>-	stdout.printf "%d: ", n</div><div class='del'>-	display_expression(d[1], binding)</div><div class='del'>-      end</div><div class='del'>-      n += 1</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display_expression(exp, binding)</div><div class='del'>-    stdout.printf "%s = %s\n", exp, debug_silent_eval(exp, binding).to_s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def frame_set_pos(file, line)</div><div class='del'>-    if @frames[0]</div><div class='del'>-      @frames[0][1] = file</div><div class='del'>-      @frames[0][2] = line</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display_frames(pos)</div><div class='del'>-    0.upto(@frames.size - 1) do |n|</div><div class='del'>-      if n == pos</div><div class='del'>-	stdout.print "--&gt; "</div><div class='del'>-      else</div><div class='del'>-	stdout.print "    "</div><div class='del'>-      end</div><div class='del'>-      stdout.print format_frame(n)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def format_frame(pos)</div><div class='del'>-    bind, file, line, id = @frames[pos]</div><div class='del'>-    sprintf "#%d %s:%s%s\n", pos + 1, file, line,</div><div class='del'>-      (id ? ":in `#{id.id2name}'" : "")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display_list(b, e, file, line)</div><div class='del'>-    stdout.printf "[%d, %d] in %s\n", b, e, file</div><div class='del'>-    if lines = SCRIPT_LINES__[file] and lines != true</div><div class='del'>-      n = 0</div><div class='del'>-      b.upto(e) do |n|</div><div class='del'>-	if n &gt; 0 &amp;&amp; lines[n-1]</div><div class='del'>-	  if n == line</div><div class='del'>-	    stdout.printf "=&gt; %d  %s\n", n, lines[n-1].chomp</div><div class='del'>-	  else</div><div class='del'>-	    stdout.printf "   %d  %s\n", n, lines[n-1].chomp</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      stdout.printf "No sourcefile available for %s\n", file</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def line_at(file, line)</div><div class='del'>-    lines = SCRIPT_LINES__[file]</div><div class='del'>-    if lines</div><div class='del'>-      return "\n" if lines == true</div><div class='del'>-      line = lines[line-1]</div><div class='del'>-      return "\n" unless line</div><div class='del'>-      return line</div><div class='del'>-    end</div><div class='del'>-    return "\n"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_funcname(id)</div><div class='del'>-    if id.nil?</div><div class='del'>-      "toplevel"</div><div class='del'>-    else</div><div class='del'>-      id.id2name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def check_break_points(file, klass, pos, binding, id)</div><div class='del'>-    return false if break_points.empty?</div><div class='del'>-    n = 1</div><div class='del'>-    for b in break_points</div><div class='del'>-      if b[0]		# valid</div><div class='del'>-	if b[1] == 0	# breakpoint</div><div class='del'>-	  if (b[2] == file and b[3] == pos) or</div><div class='del'>-	      (klass and b[2] == klass and b[3] == pos)</div><div class='del'>-	    stdout.printf "Breakpoint %d, %s at %s:%s\n", n, debug_funcname(id), file, pos</div><div class='del'>-	    return true</div><div class='del'>-	  end</div><div class='del'>-	elsif b[1] == 1	# watchpoint</div><div class='del'>-	  if debug_silent_eval(b[2], binding)</div><div class='del'>-	    stdout.printf "Watchpoint %d, %s at %s:%s\n", n, debug_funcname(id), file, pos</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'>-      n += 1</div><div class='del'>-    end</div><div class='del'>-    return false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def excn_handle(file, line, id, binding)</div><div class='del'>-    if $!.class &lt;= SystemExit</div><div class='del'>-      set_trace_func nil</div><div class='del'>-      exit</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @catch and ($!.class.ancestors.find { |e| e.to_s == @catch })</div><div class='del'>-      stdout.printf "%s:%d: `%s' (%s)\n", file, line, $!, $!.class</div><div class='del'>-      fs = @frames.size</div><div class='del'>-      tb = caller(0)[-fs..-1]</div><div class='del'>-      if tb</div><div class='del'>-	for i in tb</div><div class='del'>-	  stdout.printf "\tfrom %s\n", i</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      suspend_all</div><div class='del'>-      debug_command(file, line, id, binding)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def trace_func(event, file, line, id, binding, klass)</div><div class='del'>-    Tracer.trace_func(event, file, line, id, binding, klass) if trace?</div><div class='del'>-    context(Thread.current).check_suspend</div><div class='del'>-    @file = file</div><div class='del'>-    @line = line</div><div class='del'>-    case event</div><div class='del'>-    when 'line'</div><div class='del'>-      frame_set_pos(file, line)</div><div class='del'>-      if !@no_step or @frames.size == @no_step</div><div class='del'>-	@stop_next -= 1</div><div class='del'>-	@stop_next = -1 if @stop_next &lt; 0</div><div class='del'>-      elsif @frames.size &lt; @no_step</div><div class='del'>-	@stop_next = 0		# break here before leaving...</div><div class='del'>-      else</div><div class='del'>-	# nothing to do. skipped.</div><div class='del'>-      end</div><div class='del'>-      if @stop_next == 0 or check_break_points(file, nil, line, binding, id)</div><div class='del'>-	@no_step = nil</div><div class='del'>-	suspend_all</div><div class='del'>-	debug_command(file, line, id, binding)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when 'call'</div><div class='del'>-      @frames.unshift [binding, file, line, id]</div><div class='del'>-      if check_break_points(file, klass, id.id2name, binding, id)</div><div class='del'>-	suspend_all</div><div class='del'>-	debug_command(file, line, id, binding)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when 'c-call'</div><div class='del'>-      frame_set_pos(file, line)</div><div class='del'>-</div><div class='del'>-    when 'class'</div><div class='del'>-      @frames.unshift [binding, file, line, id]</div><div class='del'>-</div><div class='del'>-    when 'return', 'end'</div><div class='del'>-      if @frames.size == @finish_pos</div><div class='del'>-	@stop_next = 1</div><div class='del'>-	@finish_pos = 0</div><div class='del'>-      end</div><div class='del'>-      @frames.shift</div><div class='del'>-</div><div class='del'>-    when 'end'</div><div class='del'>-      @frames.shift</div><div class='del'>-</div><div class='del'>-    when 'raise' </div><div class='del'>-      excn_handle(file, line, id, binding)</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-    @last_file = file</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-trap("INT") { DEBUGGER__.interrupt }</div><div class='del'>-@last_thread = Thread::main</div><div class='del'>-@max_thread = 1</div><div class='del'>-@thread_list = {Thread::main =&gt; 1}</div><div class='del'>-@break_points = []</div><div class='del'>-@display = []</div><div class='del'>-@waiting = []</div><div class='del'>-@stdout = STDOUT</div><div class='del'>-</div><div class='del'>-class &lt;&lt; DEBUGGER__</div><div class='del'>-  def stdout</div><div class='del'>-    @stdout</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stdout=(s)</div><div class='del'>-    @stdout = s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def display</div><div class='del'>-    @display</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def break_points</div><div class='del'>-    @break_points</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def waiting</div><div class='del'>-    @waiting</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_trace( arg )</div><div class='del'>-    saved_crit = Thread.critical</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    make_thread_list</div><div class='del'>-    for th, in @thread_list</div><div class='del'>-      context(th).set_trace arg</div><div class='del'>-    end</div><div class='del'>-    Thread.critical = saved_crit</div><div class='del'>-    arg</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_last_thread(th)</div><div class='del'>-    @last_thread = th</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def suspend</div><div class='del'>-    saved_crit = Thread.critical</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    make_thread_list</div><div class='del'>-    for th, in @thread_list</div><div class='del'>-      next if th == Thread.current</div><div class='del'>-      context(th).set_suspend</div><div class='del'>-    end</div><div class='del'>-    Thread.critical = saved_crit</div><div class='del'>-    # Schedule other threads to suspend as soon as possible.</div><div class='del'>-    Thread.pass unless Thread.critical</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def resume</div><div class='del'>-    saved_crit = Thread.critical</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    make_thread_list</div><div class='del'>-    for th, in @thread_list</div><div class='del'>-      next if th == Thread.current</div><div class='del'>-      context(th).clear_suspend</div><div class='del'>-    end</div><div class='del'>-    waiting.each do |th|</div><div class='del'>-      th.run</div><div class='del'>-    end</div><div class='del'>-    waiting.clear</div><div class='del'>-    Thread.critical = saved_crit</div><div class='del'>-    # Schedule other threads to restart as soon as possible.</div><div class='del'>-    Thread.pass</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def context(thread=Thread.current)</div><div class='del'>-    c = thread[:__debugger_data__]</div><div class='del'>-    unless c</div><div class='del'>-      thread[:__debugger_data__] = c = Context.new</div><div class='del'>-    end</div><div class='del'>-    c</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def interrupt</div><div class='del'>-    context(@last_thread).stop_next</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_thread(num)</div><div class='del'>-    th = @thread_list.index(num)</div><div class='del'>-    unless th</div><div class='del'>-      @stdout.print "No thread ##{num}\n"</div><div class='del'>-      throw :debug_error</div><div class='del'>-    end</div><div class='del'>-    th</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def thread_list(num)</div><div class='del'>-    th = get_thread(num)</div><div class='del'>-    if th == Thread.current</div><div class='del'>-      @stdout.print "+"</div><div class='del'>-    else</div><div class='del'>-      @stdout.print " "</div><div class='del'>-    end</div><div class='del'>-    @stdout.printf "%d ", num</div><div class='del'>-    @stdout.print th.inspect, "\t"</div><div class='del'>-    file = context(th).instance_eval{@file}</div><div class='del'>-    if file</div><div class='del'>-      @stdout.print file,":",context(th).instance_eval{@line}</div><div class='del'>-    end</div><div class='del'>-    @stdout.print "\n"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def thread_list_all</div><div class='del'>-    for th in @thread_list.values.sort</div><div class='del'>-      thread_list(th)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def make_thread_list</div><div class='del'>-    hash = {}</div><div class='del'>-    for th in Thread::list</div><div class='del'>-      if @thread_list.key? th</div><div class='del'>-	hash[th] = @thread_list[th]</div><div class='del'>-      else</div><div class='del'>-	@max_thread += 1</div><div class='del'>-	hash[th] = @max_thread</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @thread_list = hash</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def debug_thread_info(input, binding)</div><div class='del'>-    case input</div><div class='del'>-    when /^l(?:ist)?/</div><div class='del'>-      make_thread_list</div><div class='del'>-      thread_list_all</div><div class='del'>-</div><div class='del'>-    when /^c(?:ur(?:rent)?)?$/</div><div class='del'>-      make_thread_list</div><div class='del'>-      thread_list(@thread_list[Thread.current])</div><div class='del'>-</div><div class='del'>-    when /^(?:sw(?:itch)?\s+)?(\d+)/</div><div class='del'>-      make_thread_list</div><div class='del'>-      th = get_thread($1.to_i)</div><div class='del'>-      if th == Thread.current</div><div class='del'>-	@stdout.print "It's the current thread.\n"</div><div class='del'>-      else</div><div class='del'>-	thread_list(@thread_list[th])</div><div class='del'>-	context(th).stop_next</div><div class='del'>-	th.run</div><div class='del'>-	return :cont</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when /^stop\s+(\d+)/</div><div class='del'>-      make_thread_list</div><div class='del'>-      th = get_thread($1.to_i)</div><div class='del'>-      if th == Thread.current</div><div class='del'>-	@stdout.print "It's the current thread.\n"</div><div class='del'>-      elsif th.stop?</div><div class='del'>-	@stdout.print "Already stopped.\n"</div><div class='del'>-      else</div><div class='del'>-	thread_list(@thread_list[th])</div><div class='del'>-	context(th).suspend </div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when /^resume\s+(\d+)/</div><div class='del'>-      make_thread_list</div><div class='del'>-      th = get_thread($1.to_i)</div><div class='del'>-      if th == Thread.current</div><div class='del'>-	@stdout.print "It's the current thread.\n"</div><div class='del'>-      elsif !th.stop?</div><div class='del'>-	@stdout.print "Already running."</div><div class='del'>-      else</div><div class='del'>-	thread_list(@thread_list[th])</div><div class='del'>-	th.run</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'>-stdout.printf "Debug.rb\n"</div><div class='del'>-stdout.printf "Emacs support available.\n\n"</div><div class='del'>-set_trace_func proc { |event, file, line, id, binding, klass, *rest|</div><div class='del'>-  DEBUGGER__.context.trace_func event, file, line, id, binding, klass</div><div class='del'>-}</div><div class='del'>-end</div><div class='head'>diff --git a/lib/delegate.rb b/lib/delegate.rb<br/>deleted file mode 100644<br/>index bd2b5e4813..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/delegate.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/delegate.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,337 +0,0 @@</div><div class='del'>-# = delegate -- Support for the Delegation Pattern</div><div class='del'>-#</div><div class='del'>-# Documentation by James Edward Gray II and Gavin Sinclair</div><div class='del'>-#</div><div class='del'>-# == Introduction</div><div class='del'>-#</div><div class='del'>-# This library provides three different ways to delegate method calls to an</div><div class='del'>-# object.  The easiest to use is SimpleDelegator.  Pass an object to the</div><div class='del'>-# constructor and all methods supported by the object will be delegated.  This</div><div class='del'>-# object can be changed later.</div><div class='del'>-#</div><div class='del'>-# Going a step further, the top level DelegateClass method allows you to easily</div><div class='del'>-# setup delegation through class inheritance.  This is considerably more</div><div class='del'>-# flexible and thus probably the most common use for this library.</div><div class='del'>-#</div><div class='del'>-# Finally, if you need full control over the delegation scheme, you can inherit</div><div class='del'>-# from the abstract class Delegator and customize as needed.  (If you find</div><div class='del'>-# yourself needing this control, have a look at _forwardable_, also in the</div><div class='del'>-# standard library.  It may suit your needs better.)</div><div class='del'>-#</div><div class='del'>-# == Notes</div><div class='del'>-#</div><div class='del'>-# Be advised, RDoc will not detect delegated methods.</div><div class='del'>-#</div><div class='del'>-# &lt;b&gt;delegate.rb provides full-class delegation via the</div><div class='del'>-# DelegateClass() method.  For single-method delegation via</div><div class='del'>-# def_delegator(), see forwardable.rb.&lt;/b&gt;</div><div class='del'>-#</div><div class='del'>-# == Examples</div><div class='del'>-#</div><div class='del'>-# === SimpleDelegator</div><div class='del'>-#</div><div class='del'>-# Here's a simple example that takes advantage of the fact that</div><div class='del'>-# SimpleDelegator's delegation object can be changed at any time.</div><div class='del'>-#</div><div class='del'>-#   class Stats</div><div class='del'>-#     def initialize</div><div class='del'>-#       @source = SimpleDelegator.new([])</div><div class='del'>-#     end</div><div class='del'>-#     </div><div class='del'>-#     def stats( records )</div><div class='del'>-#       @source.__setobj__(records)</div><div class='del'>-#       	</div><div class='del'>-#       "Elements:  #{@source.size}\n" +</div><div class='del'>-#       " Non-Nil:  #{@source.compact.size}\n" +</div><div class='del'>-#       "  Unique:  #{@source.uniq.size}\n"</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-#   </div><div class='del'>-#   s = Stats.new</div><div class='del'>-#   puts s.stats(%w{James Edward Gray II})</div><div class='del'>-#   puts</div><div class='del'>-#   puts s.stats([1, 2, 3, nil, 4, 5, 1, 2])</div><div class='del'>-#</div><div class='del'>-# &lt;i&gt;Prints:&lt;/i&gt;</div><div class='del'>-#</div><div class='del'>-#   Elements:  4</div><div class='del'>-#    Non-Nil:  4</div><div class='del'>-#     Unique:  4</div><div class='del'>-# </div><div class='del'>-#   Elements:  8</div><div class='del'>-#    Non-Nil:  7</div><div class='del'>-#     Unique:  6</div><div class='del'>-#</div><div class='del'>-# === DelegateClass()</div><div class='del'>-#</div><div class='del'>-# Here's a sample of use from &lt;i&gt;tempfile.rb&lt;/i&gt;.</div><div class='del'>-#</div><div class='del'>-# A _Tempfile_ object is really just a _File_ object with a few special rules</div><div class='del'>-# about storage location and/or when the File should be deleted.  That makes for</div><div class='del'>-# an almost textbook perfect example of how to use delegation.</div><div class='del'>-#</div><div class='del'>-#   class Tempfile &lt; DelegateClass(File)</div><div class='del'>-#     # constant and class member data initialization...</div><div class='del'>-#   </div><div class='del'>-#     def initialize(basename, tmpdir=Dir::tmpdir)</div><div class='del'>-#       # build up file path/name in var tmpname...</div><div class='del'>-#     </div><div class='del'>-#       @tmpfile = File.open(tmpname, File::RDWR|File::CREAT|File::EXCL, 0600)</div><div class='del'>-#     </div><div class='del'>-#       # ...</div><div class='del'>-#     </div><div class='del'>-#       super(@tmpfile)</div><div class='del'>-#     </div><div class='del'>-#       # below this point, all methods of File are supported...</div><div class='del'>-#     end</div><div class='del'>-#   </div><div class='del'>-#     # ...</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-# === Delegator</div><div class='del'>-#</div><div class='del'>-# SimpleDelegator's implementation serves as a nice example here.</div><div class='del'>-#</div><div class='del'>-#    class SimpleDelegator &lt; Delegator</div><div class='del'>-#      def initialize(obj)</div><div class='del'>-#        super             # pass obj to Delegator constructor, required</div><div class='del'>-#        @_sd_obj = obj    # store obj for future use</div><div class='del'>-#      end</div><div class='del'>-# </div><div class='del'>-#      def __getobj__</div><div class='del'>-#        @_sd_obj          # return object we are delegating to, required</div><div class='del'>-#      end</div><div class='del'>-# </div><div class='del'>-#      def __setobj__(obj)</div><div class='del'>-#        @_sd_obj = obj    # change delegation object, a feature we're providing</div><div class='del'>-#      end</div><div class='del'>-# </div><div class='del'>-#      # ...</div><div class='del'>-#    end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Delegator is an abstract class used to build delegator pattern objects from</div><div class='del'>-# subclasses.  Subclasses should redefine \_\_getobj\_\_.  For a concrete</div><div class='del'>-# implementation, see SimpleDelegator.</div><div class='del'>-#</div><div class='del'>-class Delegator</div><div class='del'>-  IgnoreBacktracePat = %r"\A#{Regexp.quote(__FILE__)}:\d+:in `"</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Pass in the _obj_ to delegate method calls to.  All methods supported by</div><div class='del'>-  # _obj_ will be delegated to.</div><div class='del'>-  #</div><div class='del'>-  def initialize(obj)</div><div class='del'>-    preserved = ::Kernel.public_instance_methods(false)</div><div class='del'>-    preserved -= ["to_s","to_a","inspect","==","=~","==="]</div><div class='del'>-    for t in self.class.ancestors</div><div class='del'>-      preserved |= t.public_instance_methods(false)</div><div class='del'>-      preserved |= t.private_instance_methods(false)</div><div class='del'>-      preserved |= t.protected_instance_methods(false)</div><div class='del'>-      break if t == Delegator</div><div class='del'>-    end</div><div class='del'>-    preserved &lt;&lt; "singleton_method_added"</div><div class='del'>-    for method in obj.methods</div><div class='del'>-      next if preserved.include? method</div><div class='del'>-      begin</div><div class='del'>-	eval &lt;&lt;-EOS, nil, __FILE__, __LINE__+1</div><div class='del'>-	  def self.#{method}(*args, &amp;block)</div><div class='del'>-	    begin</div><div class='del'>-	      __getobj__.__send__(:#{method}, *args, &amp;block)</div><div class='del'>-	    ensure</div><div class='del'>-	      $@.delete_if{|s|IgnoreBacktracePat=~s} if $@</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	EOS</div><div class='del'>-      rescue SyntaxError</div><div class='del'>-        raise NameError, "invalid identifier %s" % method, caller(4)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias initialize_methods initialize</div><div class='del'>-</div><div class='del'>-  # Handles the magic of delegation through \_\_getobj\_\_.</div><div class='del'>-  def method_missing(m, *args)</div><div class='del'>-    target = self.__getobj__</div><div class='del'>-    unless target.respond_to?(m)</div><div class='del'>-      super(m, *args)</div><div class='del'>-    end</div><div class='del'>-    target.__send__(m, *args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  # Checks for a method provided by this the delegate object by fowarding the </div><div class='del'>-  # call through \_\_getobj\_\_.</div><div class='del'>-  # </div><div class='del'>-  def respond_to?(m, include_private = false)</div><div class='del'>-    return true if super</div><div class='del'>-    return self.__getobj__.respond_to?(m, include_private)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This method must be overridden by subclasses and should return the object</div><div class='del'>-  # method calls are being delegated to.</div><div class='del'>-  #</div><div class='del'>-  def __getobj__</div><div class='del'>-    raise NotImplementedError, "need to define `__getobj__'"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Serialization support for the object returned by \_\_getobj\_\_.</div><div class='del'>-  def marshal_dump</div><div class='del'>-    __getobj__</div><div class='del'>-  end</div><div class='del'>-  # Reinitializes delegation from a serialized object.</div><div class='del'>-  def marshal_load(obj)</div><div class='del'>-    initialize_methods(obj)</div><div class='del'>-    __setobj__(obj)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# A concrete implementation of Delegator, this class provides the means to</div><div class='del'>-# delegate all supported method calls to the object passed into the constructor</div><div class='del'>-# and even to change the object being delegated to at a later time with</div><div class='del'>-# \_\_setobj\_\_ .</div><div class='del'>-#</div><div class='del'>-class SimpleDelegator&lt;Delegator</div><div class='del'>-</div><div class='del'>-  # Pass in the _obj_ you would like to delegate method calls to.</div><div class='del'>-  def initialize(obj)</div><div class='del'>-    super</div><div class='del'>-    @_sd_obj = obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the current object method calls are being delegated to.</div><div class='del'>-  def __getobj__</div><div class='del'>-    @_sd_obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Changes the delegate object to _obj_.</div><div class='del'>-  #</div><div class='del'>-  # It's important to note that this does *not* cause SimpleDelegator's methods</div><div class='del'>-  # to change.  Because of this, you probably only want to change delegation</div><div class='del'>-  # to objects of the same type as the original delegate.</div><div class='del'>-  #</div><div class='del'>-  # Here's an example of changing the delegation object.</div><div class='del'>-  #</div><div class='del'>-  #   names = SimpleDelegator.new(%w{James Edward Gray II})</div><div class='del'>-  #   puts names[1]    # =&gt; Edward</div><div class='del'>-  #   names.__setobj__(%w{Gavin Sinclair})</div><div class='del'>-  #   puts names[1]    # =&gt; Sinclair</div><div class='del'>-  #</div><div class='del'>-  def __setobj__(obj)</div><div class='del'>-    raise ArgumentError, "cannot delegate to self" if self.equal?(obj)</div><div class='del'>-    @_sd_obj = obj</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Clone support for the object returned by \_\_getobj\_\_.</div><div class='del'>-  def clone</div><div class='del'>-    new = super</div><div class='del'>-    new.__setobj__(__getobj__.clone)</div><div class='del'>-    new</div><div class='del'>-  end</div><div class='del'>-  # Duplication support for the object returned by \_\_getobj\_\_.</div><div class='del'>-  def dup</div><div class='del'>-    new = super</div><div class='del'>-    new.__setobj__(__getobj__.clone)</div><div class='del'>-    new</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :stopdoc:</div><div class='del'>-# backward compatibility ^_^;;;</div><div class='del'>-Delegater = Delegator</div><div class='del'>-SimpleDelegater = SimpleDelegator</div><div class='del'>-# :startdoc:</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# The primary interface to this library.  Use to setup delegation when defining</div><div class='del'>-# your class.</div><div class='del'>-#</div><div class='del'>-#   class MyClass &lt; DelegateClass( ClassToDelegateTo )    # Step 1</div><div class='del'>-#     def initialize</div><div class='del'>-#       super(obj_of_ClassToDelegateTo)                   # Step 2</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-def DelegateClass(superclass)</div><div class='del'>-  klass = Class.new</div><div class='del'>-  methods = superclass.public_instance_methods(true)</div><div class='del'>-  methods -= ::Kernel.public_instance_methods(false)</div><div class='del'>-  methods |= ["to_s","to_a","inspect","==","=~","==="]</div><div class='del'>-  klass.module_eval {</div><div class='del'>-    def initialize(obj)  # :nodoc:</div><div class='del'>-      @_dc_obj = obj</div><div class='del'>-    end</div><div class='del'>-    def method_missing(m, *args)  # :nodoc:</div><div class='del'>-      unless @_dc_obj.respond_to?(m)</div><div class='del'>-        super(m, *args)</div><div class='del'>-      end</div><div class='del'>-      @_dc_obj.__send__(m, *args)</div><div class='del'>-    end</div><div class='del'>-    def respond_to?(m, include_private = false)  # :nodoc:</div><div class='del'>-      return true if super</div><div class='del'>-      return @_dc_obj.respond_to?(m, include_private)</div><div class='del'>-    end</div><div class='del'>-    def __getobj__  # :nodoc:</div><div class='del'>-      @_dc_obj</div><div class='del'>-    end</div><div class='del'>-    def __setobj__(obj)  # :nodoc:</div><div class='del'>-      raise ArgumentError, "cannot delegate to self" if self.equal?(obj)</div><div class='del'>-      @_dc_obj = obj</div><div class='del'>-    end</div><div class='del'>-    def clone  # :nodoc:</div><div class='del'>-      new = super</div><div class='del'>-      new.__setobj__(__getobj__.clone)</div><div class='del'>-      new</div><div class='del'>-    end</div><div class='del'>-    def dup  # :nodoc:</div><div class='del'>-      new = super</div><div class='del'>-      new.__setobj__(__getobj__.clone)</div><div class='del'>-      new</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-  for method in methods</div><div class='del'>-    begin</div><div class='del'>-      klass.module_eval &lt;&lt;-EOS, __FILE__, __LINE__+1</div><div class='del'>-        def #{method}(*args, &amp;block)</div><div class='del'>-	  begin</div><div class='del'>-	    @_dc_obj.__send__(:#{method}, *args, &amp;block)</div><div class='del'>-	  ensure</div><div class='del'>-	    $@.delete_if{|s| ::Delegator::IgnoreBacktracePat =~ s} if $@</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      EOS</div><div class='del'>-    rescue SyntaxError</div><div class='del'>-      raise NameError, "invalid identifier %s" % method, caller(3)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  return klass</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :enddoc:</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  class ExtArray&lt;DelegateClass(Array)</div><div class='del'>-    def initialize()</div><div class='del'>-      super([])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ary = ExtArray.new</div><div class='del'>-  p ary.class</div><div class='del'>-  ary.push 25</div><div class='del'>-  p ary</div><div class='del'>-</div><div class='del'>-  foo = Object.new</div><div class='del'>-  def foo.test</div><div class='del'>-    25</div><div class='del'>-  end</div><div class='del'>-  def foo.error</div><div class='del'>-    raise 'this is OK'</div><div class='del'>-  end</div><div class='del'>-  foo2 = SimpleDelegator.new(foo)</div><div class='del'>-  p foo.test == foo2.test	# =&gt; true</div><div class='del'>-  foo2.error			# raise error!</div><div class='del'>-end</div><div class='head'>diff --git a/lib/drb.rb b/lib/drb.rb<br/>deleted file mode 100644<br/>index 93cc811e14..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-require 'drb/drb'</div><div class='del'>-</div><div class='head'>diff --git a/lib/drb/acl.rb b/lib/drb/acl.rb<br/>deleted file mode 100644<br/>index 861c8a514d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/acl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/acl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,146 +0,0 @@</div><div class='del'>-# acl-2.0 - simple Access Control List</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 2000,2002,2003 Masatoshi SEKI</div><div class='del'>-#</div><div class='del'>-# acl.rb is copyrighted free software by Masatoshi SEKI.</div><div class='del'>-# You can redistribute it and/or modify it under the same terms as Ruby.</div><div class='del'>-</div><div class='del'>-require 'ipaddr'</div><div class='del'>-</div><div class='del'>-class ACL</div><div class='del'>-  VERSION=["2.0.0"]</div><div class='del'>-  class ACLEntry</div><div class='del'>-    def initialize(str)</div><div class='del'>-      if str == '*' or str == 'all'</div><div class='del'>-	@pat = [:all]</div><div class='del'>-      elsif str.include?('*')</div><div class='del'>-        @pat = [:name, dot_pat(str)]</div><div class='del'>-      else</div><div class='del'>-	begin</div><div class='del'>-	  @pat = [:ip, IPAddr.new(str)]</div><div class='del'>-	rescue ArgumentError</div><div class='del'>-	  @pat = [:name, dot_pat(str)]</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    def dot_pat_str(str)</div><div class='del'>-      list = str.split('.').collect { |s|</div><div class='del'>-	(s == '*') ? '.+' : s</div><div class='del'>-      }</div><div class='del'>-      list.join("\\.")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    def dot_pat(str)</div><div class='del'>-      exp = "^" + dot_pat_str(str) + "$"</div><div class='del'>-      Regexp.new(exp)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-    def match(addr)</div><div class='del'>-      case @pat[0]</div><div class='del'>-      when :all</div><div class='del'>-	true</div><div class='del'>-      when :ip</div><div class='del'>-	begin</div><div class='del'>-	  ipaddr = IPAddr.new(addr[3])</div><div class='del'>-	  ipaddr = ipaddr.ipv4_mapped if @pat[1].ipv6? &amp;&amp; ipaddr.ipv4?</div><div class='del'>-	rescue ArgumentError</div><div class='del'>-	  return false</div><div class='del'>-	end</div><div class='del'>-	(@pat[1].include?(ipaddr)) ? true : false</div><div class='del'>-      when :name</div><div class='del'>-	(@pat[1] =~ addr[2]) ? true : false</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'>-  class ACLList</div><div class='del'>-    def initialize</div><div class='del'>-      @list = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-    def match(addr)</div><div class='del'>-      @list.each do |e|</div><div class='del'>-	return true if e.match(addr)</div><div class='del'>-      end</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-    def add(str)</div><div class='del'>-      @list.push(ACLEntry.new(str))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  DENY_ALLOW = 0</div><div class='del'>-  ALLOW_DENY = 1</div><div class='del'>-</div><div class='del'>-  def initialize(list=nil, order = DENY_ALLOW)</div><div class='del'>-    @order = order</div><div class='del'>-    @deny = ACLList.new</div><div class='del'>-    @allow = ACLList.new</div><div class='del'>-    install_list(list) if list</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  public</div><div class='del'>-  def allow_socket?(soc)</div><div class='del'>-    allow_addr?(soc.peeraddr)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  public</div><div class='del'>-  def allow_addr?(addr)</div><div class='del'>-    case @order</div><div class='del'>-    when DENY_ALLOW</div><div class='del'>-      return true if @allow.match(addr)</div><div class='del'>-      return false if @deny.match(addr)</div><div class='del'>-      return true</div><div class='del'>-    when ALLOW_DENY</div><div class='del'>-      return false if @deny.match(addr)</div><div class='del'>-      return true if @allow.match(addr)</div><div class='del'>-      return false</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'>-  public</div><div class='del'>-  def install_list(list)</div><div class='del'>-    i = 0</div><div class='del'>-    while i &lt; list.size</div><div class='del'>-      permission, domain = list.slice(i,2)</div><div class='del'>-      case permission.downcase</div><div class='del'>-      when 'allow'</div><div class='del'>-	@allow.add(domain)</div><div class='del'>-      when 'deny'</div><div class='del'>-	@deny.add(domain)</div><div class='del'>-      else</div><div class='del'>-	raise "Invalid ACL entry #{list.to_s}"</div><div class='del'>-      end</div><div class='del'>-      i += 2</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  # example</div><div class='del'>-  list = %w(deny all</div><div class='del'>-	    allow 192.168.1.1</div><div class='del'>-            allow ::ffff:192.168.1.2</div><div class='del'>-            allow 192.168.1.3</div><div class='del'>-            )</div><div class='del'>-</div><div class='del'>-  addr = ["AF_INET", 10, "lc630", "192.168.1.3"]</div><div class='del'>-</div><div class='del'>-  acl = ACL.new</div><div class='del'>-  p acl.allow_addr?(addr)</div><div class='del'>-</div><div class='del'>-  acl = ACL.new(list, ACL::DENY_ALLOW)</div><div class='del'>-  p acl.allow_addr?(addr)</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/drb/drb.rb b/lib/drb/drb.rb<br/>deleted file mode 100644<br/>index 20e658e611..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/drb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/drb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1782 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = drb/drb.rb</div><div class='del'>-#</div><div class='del'>-# Distributed Ruby: _dRuby_ version 2.0.4</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 1999-2003 Masatoshi SEKI.  You can redistribute it and/or</div><div class='del'>-# modify it under the same terms as Ruby.</div><div class='del'>-#</div><div class='del'>-# Author:: Masatoshi SEKI</div><div class='del'>-#</div><div class='del'>-# Documentation:: William Webber (william@williamwebber.com)</div><div class='del'>-#</div><div class='del'>-# == Overview</div><div class='del'>-#</div><div class='del'>-# dRuby is a distributed object system for Ruby.  It allows an object in one</div><div class='del'>-# Ruby process to invoke methods on an object in another Ruby process on the</div><div class='del'>-# same or a different machine.</div><div class='del'>-#</div><div class='del'>-# The Ruby standard library contains the core classes of the dRuby package.</div><div class='del'>-# However, the full package also includes access control lists and the</div><div class='del'>-# Rinda tuple-space distributed task management system, as well as a </div><div class='del'>-# large number of samples.  The full dRuby package can be downloaded from</div><div class='del'>-# the dRuby home page (see *References*).</div><div class='del'>-#</div><div class='del'>-# For an introduction and examples of usage see the documentation to the</div><div class='del'>-# DRb module.</div><div class='del'>-#</div><div class='del'>-# == References</div><div class='del'>-#</div><div class='del'>-# [http://www2a.biglobe.ne.jp/~seki/ruby/druby.html]</div><div class='del'>-#    The dRuby home page, in Japanese.  Contains the full dRuby package</div><div class='del'>-#    and links to other Japanese-language sources.</div><div class='del'>-#</div><div class='del'>-# [http://www2a.biglobe.ne.jp/~seki/ruby/druby.en.html]</div><div class='del'>-#    The English version of the dRuby home page.</div><div class='del'>-#</div><div class='del'>-# [http://www.chadfowler.com/ruby/drb.html]</div><div class='del'>-#    A quick tutorial introduction to using dRuby by Chad Fowler.</div><div class='del'>-#</div><div class='del'>-# [http://www.linux-mag.com/2002-09/ruby_05.html]</div><div class='del'>-#   A tutorial introduction to dRuby in Linux Magazine by Dave Thomas.</div><div class='del'>-#   Includes a discussion of Rinda.</div><div class='del'>-#</div><div class='del'>-# [http://www.eng.cse.dmu.ac.uk/~hgs/ruby/dRuby/]</div><div class='del'>-#   Links to English-language Ruby material collected by Hugh Sasse.</div><div class='del'>-#</div><div class='del'>-# [http://www.rubycentral.com/book/ospace.html]</div><div class='del'>-#   The chapter from *Programming* *Ruby* by Dave Thomas and Andy Hunt</div><div class='del'>-#   which discusses dRuby.</div><div class='del'>-#</div><div class='del'>-# [http://www.clio.ne.jp/home/web-i31s/Flotuard/Ruby/PRC2K_seki/dRuby.en.html]</div><div class='del'>-#   Translation of presentation on Ruby by Masatoshi Seki.</div><div class='del'>-</div><div class='del'>-require 'socket'</div><div class='del'>-require 'thread'</div><div class='del'>-require 'fcntl'</div><div class='del'>-require 'drb/eq'</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# == Overview</div><div class='del'>-#</div><div class='del'>-# dRuby is a distributed object system for Ruby.  It is written in</div><div class='del'>-# pure Ruby and uses its own protocol.  No add-in services are needed</div><div class='del'>-# beyond those provided by the Ruby runtime, such as TCP sockets.  It</div><div class='del'>-# does not rely on or interoperate with other distributed object</div><div class='del'>-# systems such as CORBA, RMI, or .NET.</div><div class='del'>-#</div><div class='del'>-# dRuby allows methods to be called in one Ruby process upon a Ruby</div><div class='del'>-# object located in another Ruby process, even on another machine.</div><div class='del'>-# References to objects can be passed between processes.  Method</div><div class='del'>-# arguments and return values are dumped and loaded in marshalled</div><div class='del'>-# format.  All of this is done transparently to both the caller of the</div><div class='del'>-# remote method and the object that it is called upon.</div><div class='del'>-#</div><div class='del'>-# An object in a remote process is locally represented by a</div><div class='del'>-# DRb::DRbObject instance.  This acts as a sort of proxy for the</div><div class='del'>-# remote object.  Methods called upon this DRbObject instance are</div><div class='del'>-# forwarded to its remote object.  This is arranged dynamically at run</div><div class='del'>-# time.  There are no statically declared interfaces for remote</div><div class='del'>-# objects, such as CORBA's IDL.</div><div class='del'>-#</div><div class='del'>-# dRuby calls made into a process are handled by a DRb::DRbServer</div><div class='del'>-# instance within that process.  This reconstitutes the method call,</div><div class='del'>-# invokes it upon the specified local object, and returns the value to</div><div class='del'>-# the remote caller.  Any object can receive calls over dRuby.  There</div><div class='del'>-# is no need to implement a special interface, or mixin special</div><div class='del'>-# functionality.  Nor, in the general case, does an object need to</div><div class='del'>-# explicitly register itself with a DRbServer in order to receive</div><div class='del'>-# dRuby calls.</div><div class='del'>-#</div><div class='del'>-# One process wishing to make dRuby calls upon another process must</div><div class='del'>-# somehow obtain an initial reference to an object in the remote</div><div class='del'>-# process by some means other than as the return value of a remote</div><div class='del'>-# method call, as there is initially no remote object reference it can</div><div class='del'>-# invoke a method upon.  This is done by attaching to the server by</div><div class='del'>-# URI.  Each DRbServer binds itself to a URI such as</div><div class='del'>-# 'druby://example.com:8787'.  A DRbServer can have an object attached</div><div class='del'>-# to it that acts as the server's *front* *object*.  A DRbObject can</div><div class='del'>-# be explicitly created from the server's URI.  This DRbObject's</div><div class='del'>-# remote object will be the server's front object.  This front object</div><div class='del'>-# can then return references to other Ruby objects in the DRbServer's</div><div class='del'>-# process.</div><div class='del'>-#</div><div class='del'>-# Method calls made over dRuby behave largely the same as normal Ruby</div><div class='del'>-# method calls made within a process.  Method calls with blocks are</div><div class='del'>-# supported, as are raising exceptions.  In addition to a method's</div><div class='del'>-# standard errors, a dRuby call may also raise one of the</div><div class='del'>-# dRuby-specific errors, all of which are subclasses of DRb::DRbError.</div><div class='del'>-#</div><div class='del'>-# Any type of object can be passed as an argument to a dRuby call or</div><div class='del'>-# returned as its return value.  By default, such objects are dumped</div><div class='del'>-# or marshalled at the local end, then loaded or unmarshalled at the</div><div class='del'>-# remote end.  The remote end therefore receives a copy of the local</div><div class='del'>-# object, not a distributed reference to it; methods invoked upon this</div><div class='del'>-# copy are executed entirely in the remote process, not passed on to</div><div class='del'>-# the local original.  This has semantics similar to pass-by-value.</div><div class='del'>-#</div><div class='del'>-# However, if an object cannot be marshalled, a dRuby reference to it</div><div class='del'>-# is passed or returned instead.  This will turn up at the remote end</div><div class='del'>-# as a DRbObject instance.  All methods invoked upon this remote proxy</div><div class='del'>-# are forwarded to the local object, as described in the discussion of</div><div class='del'>-# DRbObjects.  This has semantics similar to the normal Ruby</div><div class='del'>-# pass-by-reference.</div><div class='del'>-# </div><div class='del'>-# The easiest way to signal that we want an otherwise marshallable</div><div class='del'>-# object to be passed or returned as a DRbObject reference, rather</div><div class='del'>-# than marshalled and sent as a copy, is to include the</div><div class='del'>-# DRb::DRbUndumped mixin module.</div><div class='del'>-#</div><div class='del'>-# dRuby supports calling remote methods with blocks.  As blocks (or</div><div class='del'>-# rather the Proc objects that represent them) are not marshallable,</div><div class='del'>-# the block executes in the local, not the remote, context.  Each</div><div class='del'>-# value yielded to the block is passed from the remote object to the</div><div class='del'>-# local block, then the value returned by each block invocation is</div><div class='del'>-# passed back to the remote execution context to be collected, before</div><div class='del'>-# the collected values are finally returned to the local context as</div><div class='del'>-# the return value of the method invocation.</div><div class='del'>-# </div><div class='del'>-# == Examples of usage</div><div class='del'>-#</div><div class='del'>-# For more dRuby samples, see the +samples+ directory in the full</div><div class='del'>-# dRuby distribution.</div><div class='del'>-#</div><div class='del'>-# === dRuby in client/server mode</div><div class='del'>-#</div><div class='del'>-# This illustrates setting up a simple client-server drb</div><div class='del'>-# system.  Run the server and client code in different terminals,</div><div class='del'>-# starting the server code first.</div><div class='del'>-#</div><div class='del'>-# ==== Server code</div><div class='del'>-#    </div><div class='del'>-#   require 'drb/drb'</div><div class='del'>-#     </div><div class='del'>-#   # The URI for the server to connect to</div><div class='del'>-#   URI="druby://localhost:8787" </div><div class='del'>-#     </div><div class='del'>-#   class TimeServer</div><div class='del'>-#     </div><div class='del'>-#     def get_current_time</div><div class='del'>-#       return Time.now</div><div class='del'>-#     end</div><div class='del'>-#     </div><div class='del'>-#   end</div><div class='del'>-#     </div><div class='del'>-#   # The object that handles requests on the server</div><div class='del'>-#   FRONT_OBJECT=TimeServer.new</div><div class='del'>-#</div><div class='del'>-#   $SAFE = 1   # disable eval() and friends</div><div class='del'>-#   </div><div class='del'>-#   DRb.start_service(URI, FRONT_OBJECT)</div><div class='del'>-#   # Wait for the drb server thread to finish before exiting.</div><div class='del'>-#   DRb.thread.join</div><div class='del'>-#</div><div class='del'>-# ==== Client code</div><div class='del'>-#     </div><div class='del'>-#   require 'drb/drb'</div><div class='del'>-#   </div><div class='del'>-#   # The URI to connect to</div><div class='del'>-#   SERVER_URI="druby://localhost:8787"</div><div class='del'>-#</div><div class='del'>-#   # Start a local DRbServer to handle callbacks.</div><div class='del'>-#   #</div><div class='del'>-#   # Not necessary for this small example, but will be required</div><div class='del'>-#   # as soon as we pass a non-marshallable object as an argument</div><div class='del'>-#   # to a dRuby call.</div><div class='del'>-#   DRb.start_service</div><div class='del'>-#   </div><div class='del'>-#   timeserver = DRbObject.new_with_uri(SERVER_URI)</div><div class='del'>-#   puts timeserver.get_current_time </div><div class='del'>-#</div><div class='del'>-# === Remote objects under dRuby</div><div class='del'>-#</div><div class='del'>-# This example illustrates returning a reference to an object</div><div class='del'>-# from a dRuby call.  The Logger instances live in the server</div><div class='del'>-# process.  References to them are returned to the client process,</div><div class='del'>-# where methods can be invoked upon them.  These methods are </div><div class='del'>-# executed in the server process.</div><div class='del'>-#</div><div class='del'>-# ==== Server code</div><div class='del'>-#   </div><div class='del'>-#   require 'drb/drb'</div><div class='del'>-#   </div><div class='del'>-#   URI="druby://localhost:8787"</div><div class='del'>-#   </div><div class='del'>-#   class Logger</div><div class='del'>-#</div><div class='del'>-#       # Make dRuby send Logger instances as dRuby references,</div><div class='del'>-#       # not copies.</div><div class='del'>-#       include DRb::DRbUndumped</div><div class='del'>-#   </div><div class='del'>-#       def initialize(n, fname)</div><div class='del'>-#           @name = n</div><div class='del'>-#           @filename = fname</div><div class='del'>-#       end</div><div class='del'>-#   </div><div class='del'>-#       def log(message)</div><div class='del'>-#           File.open(@filename, "a") do |f|</div><div class='del'>-#               f.puts("#{Time.now}: #{@name}: #{message}")</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'>-#   # We have a central object for creating and retrieving loggers.</div><div class='del'>-#   # This retains a local reference to all loggers created.  This</div><div class='del'>-#   # is so an existing logger can be looked up by name, but also</div><div class='del'>-#   # to prevent loggers from being garbage collected.  A dRuby</div><div class='del'>-#   # reference to an object is not sufficient to prevent it being</div><div class='del'>-#   # garbage collected!</div><div class='del'>-#   class LoggerFactory</div><div class='del'>-#   </div><div class='del'>-#       def initialize(bdir)</div><div class='del'>-#           @basedir = bdir</div><div class='del'>-#           @loggers = {}</div><div class='del'>-#       end</div><div class='del'>-#   </div><div class='del'>-#       def get_logger(name)</div><div class='del'>-#           if !@loggers.has_key? name</div><div class='del'>-#               # make the filename safe, then declare it to be so</div><div class='del'>-#               fname = name.gsub(/[.\/]/, "_").untaint</div><div class='del'>-#               @loggers[name] = Logger.new(name, @basedir + "/" + fname)</div><div class='del'>-#           end</div><div class='del'>-#           return @loggers[name]</div><div class='del'>-#       end</div><div class='del'>-#   </div><div class='del'>-#   end</div><div class='del'>-#   </div><div class='del'>-#   FRONT_OBJECT=LoggerFactory.new("/tmp/dlog")</div><div class='del'>-#</div><div class='del'>-#   $SAFE = 1   # disable eval() and friends</div><div class='del'>-#   </div><div class='del'>-#   DRb.start_service(URI, FRONT_OBJECT)</div><div class='del'>-#   DRb.thread.join</div><div class='del'>-#</div><div class='del'>-# ==== Client code</div><div class='del'>-#</div><div class='del'>-#   require 'drb/drb'</div><div class='del'>-#   </div><div class='del'>-#   SERVER_URI="druby://localhost:8787"</div><div class='del'>-#</div><div class='del'>-#   DRb.start_service</div><div class='del'>-#   </div><div class='del'>-#   log_service=DRbObject.new_with_uri(SERVER_URI)</div><div class='del'>-#   </div><div class='del'>-#   ["loga", "logb", "logc"].each do |logname|</div><div class='del'>-#   </div><div class='del'>-#       logger=log_service.get_logger(logname)</div><div class='del'>-#   </div><div class='del'>-#       logger.log("Hello, world!")</div><div class='del'>-#       logger.log("Goodbye, world!")</div><div class='del'>-#       logger.log("=== EOT ===")</div><div class='del'>-#   </div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-# == Security</div><div class='del'>-#</div><div class='del'>-# As with all network services, security needs to be considered when</div><div class='del'>-# using dRuby.  By allowing external access to a Ruby object, you are</div><div class='del'>-# not only allowing outside clients to call the methods you have</div><div class='del'>-# defined for that object, but by default to execute arbitrary Ruby</div><div class='del'>-# code on your server.  Consider the following:</div><div class='del'>-#</div><div class='del'>-#    # !!! UNSAFE CODE !!!</div><div class='del'>-#    ro = DRbObject::new_with_uri("druby://your.server.com:8989")</div><div class='del'>-#    class &lt;&lt; ro</div><div class='del'>-#      undef :instance_eval  # force call to be passed to remote object</div><div class='del'>-#    end</div><div class='del'>-#    ro.instance_eval("`rm -rf *`")</div><div class='del'>-#</div><div class='del'>-# The dangers posed by instance_eval and friends are such that a</div><div class='del'>-# DRbServer should generally be run with $SAFE set to at least </div><div class='del'>-# level 1.  This will disable eval() and related calls on strings </div><div class='del'>-# passed across the wire.  The sample usage code given above follows </div><div class='del'>-# this practice.</div><div class='del'>-#</div><div class='del'>-# A DRbServer can be configured with an access control list to</div><div class='del'>-# selectively allow or deny access from specified IP addresses.  The</div><div class='del'>-# main druby distribution provides the ACL class for this purpose.  In</div><div class='del'>-# general, this mechanism should only be used alongside, rather than</div><div class='del'>-# as a replacement for, a good firewall.</div><div class='del'>-#</div><div class='del'>-# == dRuby internals</div><div class='del'>-#</div><div class='del'>-# dRuby is implemented using three main components: a remote method</div><div class='del'>-# call marshaller/unmarshaller; a transport protocol; and an</div><div class='del'>-# ID-to-object mapper.  The latter two can be directly, and the first</div><div class='del'>-# indirectly, replaced, in order to provide different behaviour and</div><div class='del'>-# capabilities.</div><div class='del'>-#</div><div class='del'>-# Marshalling and unmarshalling of remote method calls is performed by</div><div class='del'>-# a DRb::DRbMessage instance.  This uses the Marshal module to dump</div><div class='del'>-# the method call before sending it over the transport layer, then</div><div class='del'>-# reconstitute it at the other end.  There is normally no need to</div><div class='del'>-# replace this component, and no direct way is provided to do so.</div><div class='del'>-# However, it is possible to implement an alternative marshalling</div><div class='del'>-# scheme as part of an implementation of the transport layer.</div><div class='del'>-#</div><div class='del'>-# The transport layer is responsible for opening client and server</div><div class='del'>-# network connections and forwarding dRuby request across them.</div><div class='del'>-# Normally, it uses DRb::DRbMessage internally to manage marshalling</div><div class='del'>-# and unmarshalling.  The transport layer is managed by</div><div class='del'>-# DRb::DRbProtocol.  Multiple protocols can be installed in</div><div class='del'>-# DRbProtocol at the one time; selection between them is determined by</div><div class='del'>-# the scheme of a dRuby URI.  The default transport protocol is</div><div class='del'>-# selected by the scheme 'druby:', and implemented by</div><div class='del'>-# DRb::DRbTCPSocket.  This uses plain TCP/IP sockets for</div><div class='del'>-# communication.  An alternative protocol, using UNIX domain sockets,</div><div class='del'>-# is implemented by DRb::DRbUNIXSocket in the file drb/unix.rb, and</div><div class='del'>-# selected by the scheme 'drbunix:'.  A sample implementation over</div><div class='del'>-# HTTP can be found in the samples accompanying the main dRuby</div><div class='del'>-# distribution.</div><div class='del'>-#</div><div class='del'>-# The ID-to-object mapping component maps dRuby object ids to the</div><div class='del'>-# objects they refer to, and vice versa.  The implementation to use</div><div class='del'>-# can be specified as part of a DRb::DRbServer's configuration.  The</div><div class='del'>-# default implementation is provided by DRb::DRbIdConv.  It uses an</div><div class='del'>-# object's ObjectSpace id as its dRuby id.  This means that the dRuby</div><div class='del'>-# reference to that object only remains meaningful for the lifetime of</div><div class='del'>-# the object's process and the lifetime of the object within that</div><div class='del'>-# process.  A modified implementation is provided by DRb::TimerIdConv</div><div class='del'>-# in the file drb/timeridconv.rb.  This implementation retains a local</div><div class='del'>-# reference to all objects exported over dRuby for a configurable</div><div class='del'>-# period of time (defaulting to ten minutes), to prevent them being</div><div class='del'>-# garbage-collected within this time.  Another sample implementation</div><div class='del'>-# is provided in sample/name.rb in the main dRuby distribution.  This</div><div class='del'>-# allows objects to specify their own id or "name".  A dRuby reference</div><div class='del'>-# can be made persistent across processes by having each process</div><div class='del'>-# register an object using the same dRuby name.</div><div class='del'>-#</div><div class='del'>-module DRb</div><div class='del'>-</div><div class='del'>-  # Superclass of all errors raised in the DRb module.</div><div class='del'>-  class DRbError &lt; RuntimeError; end</div><div class='del'>-</div><div class='del'>-  # Error raised when an error occurs on the underlying communication</div><div class='del'>-  # protocol.</div><div class='del'>-  class DRbConnError &lt; DRbError; end</div><div class='del'>-</div><div class='del'>-  # Class responsible for converting between an object and its id.</div><div class='del'>-  #</div><div class='del'>-  # This, the default implementation, uses an object's local ObjectSpace</div><div class='del'>-  # __id__ as its id.  This means that an object's identification over</div><div class='del'>-  # drb remains valid only while that object instance remains alive </div><div class='del'>-  # within the server runtime.</div><div class='del'>-  #</div><div class='del'>-  # For alternative mechanisms, see DRb::TimerIdConv in rdb/timeridconv.rb</div><div class='del'>-  # and DRbNameIdConv in sample/name.rb in the full drb distribution.</div><div class='del'>-  class DRbIdConv</div><div class='del'>-</div><div class='del'>-    # Convert an object reference id to an object.</div><div class='del'>-    #</div><div class='del'>-    # This implementation looks up the reference id in the local object</div><div class='del'>-    # space and returns the object it refers to.</div><div class='del'>-    def to_obj(ref)</div><div class='del'>-      ObjectSpace._id2ref(ref)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Convert an object into a reference id.</div><div class='del'>-    #</div><div class='del'>-    # This implementation returns the object's __id__ in the local</div><div class='del'>-    # object space.</div><div class='del'>-    def to_id(obj)</div><div class='del'>-      obj.nil? ? nil : obj.__id__</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Mixin module making an object undumpable or unmarshallable.</div><div class='del'>-  #</div><div class='del'>-  # If an object which includes this module is returned by method</div><div class='del'>-  # called over drb, then the object remains in the server space</div><div class='del'>-  # and a reference to the object is returned, rather than the</div><div class='del'>-  # object being marshalled and moved into the client space.</div><div class='del'>-  module DRbUndumped </div><div class='del'>-    def _dump(dummy)  # :nodoc:</div><div class='del'>-      raise TypeError, 'can\'t dump'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Error raised by the DRb module when an attempt is made to refer to</div><div class='del'>-  # the context's current drb server but the context does not have one.</div><div class='del'>-  # See #current_server.</div><div class='del'>-  class DRbServerNotFound &lt; DRbError; end</div><div class='del'>-</div><div class='del'>-  # Error raised by the DRbProtocol module when it cannot find any</div><div class='del'>-  # protocol implementation support the scheme specified in a URI.</div><div class='del'>-  class DRbBadURI &lt; DRbError; end</div><div class='del'>-</div><div class='del'>-  # Error raised by a dRuby protocol when it doesn't support the</div><div class='del'>-  # scheme specified in a URI.  See DRb::DRbProtocol.</div><div class='del'>-  class DRbBadScheme &lt; DRbError; end</div><div class='del'>-</div><div class='del'>-  # An exception wrapping a DRb::DRbUnknown object</div><div class='del'>-  class DRbUnknownError &lt; DRbError</div><div class='del'>-</div><div class='del'>-    # Create a new DRbUnknownError for the DRb::DRbUnknown object +unknown+</div><div class='del'>-    def initialize(unknown)</div><div class='del'>-      @unknown = unknown</div><div class='del'>-      super(unknown.name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get the wrapped DRb::DRbUnknown object.</div><div class='del'>-    attr_reader :unknown</div><div class='del'>-</div><div class='del'>-    def self._load(s)  # :nodoc:</div><div class='del'>-      Marshal::load(s)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def _dump(lv) # :nodoc:</div><div class='del'>-      Marshal::dump(@unknown)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # An exception wrapping an error object</div><div class='del'>-  class DRbRemoteError &lt; DRbError</div><div class='del'>-    def initialize(error)</div><div class='del'>-      @reason = error.class.to_s</div><div class='del'>-      super("#{error.message} (#{error.class})")</div><div class='del'>-      set_backtrace(error.backtrace)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # the class of the error, as a string.</div><div class='del'>-    attr_reader :reason</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Class wrapping a marshalled object whose type is unknown locally.</div><div class='del'>-  #</div><div class='del'>-  # If an object is returned by a method invoked over drb, but the</div><div class='del'>-  # class of the object is unknown in the client namespace, or</div><div class='del'>-  # the object is a constant unknown in the client namespace, then</div><div class='del'>-  # the still-marshalled object is returned wrapped in a DRbUnknown instance.</div><div class='del'>-  #</div><div class='del'>-  # If this object is passed as an argument to a method invoked over</div><div class='del'>-  # drb, then the wrapped object is passed instead.</div><div class='del'>-  #</div><div class='del'>-  # The class or constant name of the object can be read from the</div><div class='del'>-  # +name+ attribute.  The marshalled object is held in the +buf+</div><div class='del'>-  # attribute.</div><div class='del'>-  class DRbUnknown</div><div class='del'>-    </div><div class='del'>-    # Create a new DRbUnknown object.</div><div class='del'>-    #</div><div class='del'>-    # +buf+ is a string containing a marshalled object that could not</div><div class='del'>-    # be unmarshalled.  +err+ is the error message that was raised </div><div class='del'>-    # when the unmarshalling failed.  It is used to determine the</div><div class='del'>-    # name of the unmarshalled object.</div><div class='del'>-    def initialize(err, buf)</div><div class='del'>-      case err.to_s</div><div class='del'>-      when /uninitialized constant (\S+)/</div><div class='del'>-	@name = $1</div><div class='del'>-      when /undefined class\/module (\S+)/</div><div class='del'>-	@name = $1</div><div class='del'>-      else</div><div class='del'>-	@name = nil</div><div class='del'>-      end</div><div class='del'>-      @buf = buf</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The name of the unknown thing.</div><div class='del'>-    #</div><div class='del'>-    # Class name for unknown objects; variable name for unknown</div><div class='del'>-    # constants.</div><div class='del'>-    attr_reader :name</div><div class='del'>-</div><div class='del'>-    # Buffer contained the marshalled, unknown object.</div><div class='del'>-    attr_reader :buf</div><div class='del'>-</div><div class='del'>-    def self._load(s) # :nodoc:</div><div class='del'>-      begin</div><div class='del'>-	Marshal::load(s)</div><div class='del'>-      rescue NameError, ArgumentError</div><div class='del'>-	DRbUnknown.new($!, s)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _dump(lv) # :nodoc:</div><div class='del'>-      @buf</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Attempt to load the wrapped marshalled object again.</div><div class='del'>-    #</div><div class='del'>-    # If the class of the object is now known locally, the object</div><div class='del'>-    # will be unmarshalled and returned.  Otherwise, a new </div><div class='del'>-    # but identical DRbUnknown object will be returned.</div><div class='del'>-    def reload</div><div class='del'>-      self.class._load(@buf)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Create a DRbUnknownError exception containing this object.</div><div class='del'>-    def exception</div><div class='del'>-      DRbUnknownError.new(self)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class DRbArray</div><div class='del'>-    def initialize(ary)</div><div class='del'>-      @ary = ary.collect { |obj| </div><div class='del'>-	if obj.kind_of? DRbUndumped</div><div class='del'>-	  DRbObject.new(obj)</div><div class='del'>-	else</div><div class='del'>-	  begin</div><div class='del'>-	    Marshal.dump(obj)</div><div class='del'>-	    obj</div><div class='del'>-	  rescue</div><div class='del'>-	    DRbObject.new(obj)</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'>-    def self._load(s)</div><div class='del'>-      Marshal::load(s)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _dump(lv)</div><div class='del'>-      Marshal.dump(@ary)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Handler for sending and receiving drb messages.</div><div class='del'>-  #</div><div class='del'>-  # This takes care of the low-level marshalling and unmarshalling</div><div class='del'>-  # of drb requests and responses sent over the wire between server</div><div class='del'>-  # and client.  This relieves the implementor of a new drb</div><div class='del'>-  # protocol layer with having to deal with these details.</div><div class='del'>-  #</div><div class='del'>-  # The user does not have to directly deal with this object in</div><div class='del'>-  # normal use.</div><div class='del'>-  class DRbMessage</div><div class='del'>-    def initialize(config) # :nodoc:</div><div class='del'>-      @load_limit = config[:load_limit]</div><div class='del'>-      @argc_limit = config[:argc_limit]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dump(obj, error=false)  # :nodoc:</div><div class='del'>-      obj = make_proxy(obj, error) if obj.kind_of? DRbUndumped</div><div class='del'>-      begin</div><div class='del'>-	str = Marshal::dump(obj)</div><div class='del'>-      rescue</div><div class='del'>-	str = Marshal::dump(make_proxy(obj, error))</div><div class='del'>-      end</div><div class='del'>-      [str.size].pack('N') + str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def load(soc)  # :nodoc:</div><div class='del'>-      begin</div><div class='del'>-        sz = soc.read(4)	# sizeof (N)</div><div class='del'>-      rescue</div><div class='del'>-        raise(DRbConnError, $!.message, $!.backtrace)</div><div class='del'>-      end</div><div class='del'>-      raise(DRbConnError, 'connection closed') if sz.nil?</div><div class='del'>-      raise(DRbConnError, 'premature header') if sz.size &lt; 4</div><div class='del'>-      sz = sz.unpack('N')[0]</div><div class='del'>-      raise(DRbConnError, "too large packet #{sz}") if @load_limit &lt; sz</div><div class='del'>-      begin</div><div class='del'>-        str = soc.read(sz)</div><div class='del'>-      rescue</div><div class='del'>-        raise(DRbConnError, $!.message, $!.backtrace)</div><div class='del'>-      end</div><div class='del'>-      raise(DRbConnError, 'connection closed') if str.nil?</div><div class='del'>-      raise(DRbConnError, 'premature marshal format(can\'t read)') if str.size &lt; sz</div><div class='del'>-      DRb.mutex.synchronize do</div><div class='del'>-        begin</div><div class='del'>-          save = Thread.current[:drb_untaint]</div><div class='del'>-          Thread.current[:drb_untaint] = []</div><div class='del'>-          Marshal::load(str)</div><div class='del'>-        rescue NameError, ArgumentError</div><div class='del'>-          DRbUnknown.new($!, str)</div><div class='del'>-        ensure</div><div class='del'>-          Thread.current[:drb_untaint].each do |x|</div><div class='del'>-            x.untaint</div><div class='del'>-          end</div><div class='del'>-          Thread.current[:drb_untaint] = save</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_request(stream, ref, msg_id, arg, b) # :nodoc:</div><div class='del'>-      ary = []</div><div class='del'>-      ary.push(dump(ref.__drbref))</div><div class='del'>-      ary.push(dump(msg_id.id2name))</div><div class='del'>-      ary.push(dump(arg.length))</div><div class='del'>-      arg.each do |e|</div><div class='del'>-	ary.push(dump(e))</div><div class='del'>-      end</div><div class='del'>-      ary.push(dump(b))</div><div class='del'>-      stream.write(ary.join(''))</div><div class='del'>-    rescue</div><div class='del'>-      raise(DRbConnError, $!.message, $!.backtrace)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def recv_request(stream) # :nodoc:</div><div class='del'>-      ref = load(stream)</div><div class='del'>-      ro = DRb.to_obj(ref)</div><div class='del'>-      msg = load(stream)</div><div class='del'>-      argc = load(stream)</div><div class='del'>-      raise ArgumentError, 'too many arguments' if @argc_limit &lt; argc</div><div class='del'>-      argv = Array.new(argc, nil)</div><div class='del'>-      argc.times do |n|</div><div class='del'>-	argv[n] = load(stream)</div><div class='del'>-      end</div><div class='del'>-      block = load(stream)</div><div class='del'>-      return ro, msg, argv, block</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_reply(stream, succ, result)  # :nodoc:</div><div class='del'>-      stream.write(dump(succ) + dump(result, !succ))</div><div class='del'>-    rescue</div><div class='del'>-      raise(DRbConnError, $!.message, $!.backtrace)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def recv_reply(stream)  # :nodoc:</div><div class='del'>-      succ = load(stream)</div><div class='del'>-      result = load(stream)</div><div class='del'>-      [succ, result]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    def make_proxy(obj, error=false)</div><div class='del'>-      if error</div><div class='del'>-        DRbRemoteError.new(obj)</div><div class='del'>-      else</div><div class='del'>-        DRbObject.new(obj)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Module managing the underlying network protocol(s) used by drb.</div><div class='del'>-  #</div><div class='del'>-  # By default, drb uses the DRbTCPSocket protocol.  Other protocols</div><div class='del'>-  # can be defined.  A protocol must define the following class methods:</div><div class='del'>-  #</div><div class='del'>-  #   [open(uri, config)] Open a client connection to the server at +uri+,</div><div class='del'>-  #                       using configuration +config+.  Return a protocol</div><div class='del'>-  #                       instance for this connection.</div><div class='del'>-  #   [open_server(uri, config)] Open a server listening at +uri+,</div><div class='del'>-  #                              using configuration +config+.  Return a</div><div class='del'>-  #                              protocol instance for this listener.</div><div class='del'>-  #   [uri_option(uri, config)] Take a URI, possibly containing an option</div><div class='del'>-  #                             component (e.g. a trailing '?param=val'), </div><div class='del'>-  #                             and return a [uri, option] tuple.</div><div class='del'>-  #</div><div class='del'>-  # All of these methods should raise a DRbBadScheme error if the URI </div><div class='del'>-  # does not identify the protocol they support (e.g. "druby:" for</div><div class='del'>-  # the standard Ruby protocol).  This is how the DRbProtocol module,</div><div class='del'>-  # given a URI, determines which protocol implementation serves that</div><div class='del'>-  # protocol.</div><div class='del'>-  #</div><div class='del'>-  # The protocol instance returned by #open_server must have the</div><div class='del'>-  # following methods:</div><div class='del'>-  #</div><div class='del'>-  # [accept] Accept a new connection to the server.  Returns a protocol</div><div class='del'>-  #          instance capable of communicating with the client.</div><div class='del'>-  # [close] Close the server connection.</div><div class='del'>-  # [uri] Get the URI for this server.</div><div class='del'>-  #</div><div class='del'>-  # The protocol instance returned by #open must have the following methods:</div><div class='del'>-  #</div><div class='del'>-  # [send_request (ref, msg_id, arg, b)] </div><div class='del'>-  #      Send a request to +ref+ with the given message id and arguments.</div><div class='del'>-  #      This is most easily implemented by calling DRbMessage.send_request,</div><div class='del'>-  #      providing a stream that sits on top of the current protocol.</div><div class='del'>-  # [recv_reply]</div><div class='del'>-  #      Receive a reply from the server and return it as a [success-boolean,</div><div class='del'>-  #      reply-value] pair.  This is most easily implemented by calling</div><div class='del'>-  #      DRb.recv_reply, providing a stream that sits on top of the </div><div class='del'>-  #      current protocol.</div><div class='del'>-  # [alive?]</div><div class='del'>-  #      Is this connection still alive?</div><div class='del'>-  # [close]</div><div class='del'>-  #      Close this connection.</div><div class='del'>-  #</div><div class='del'>-  # The protocol instance returned by #open_server().accept() must have</div><div class='del'>-  # the following methods:</div><div class='del'>-  #</div><div class='del'>-  # [recv_request]</div><div class='del'>-  #     Receive a request from the client and return a [object, message,</div><div class='del'>-  #     args, block] tuple.  This is most easily implemented by calling</div><div class='del'>-  #     DRbMessage.recv_request, providing a stream that sits on top of</div><div class='del'>-  #     the current protocol.</div><div class='del'>-  # [send_reply(succ, result)]</div><div class='del'>-  #     Send a reply to the client.  This is most easily implemented</div><div class='del'>-  #     by calling DRbMessage.send_reply, providing a stream that sits</div><div class='del'>-  #     on top of the current protocol.</div><div class='del'>-  # [close]</div><div class='del'>-  #     Close this connection.</div><div class='del'>-  #</div><div class='del'>-  # A new protocol is registered with the DRbProtocol module using</div><div class='del'>-  # the add_protocol method.</div><div class='del'>-  #</div><div class='del'>-  # For examples of other protocols, see DRbUNIXSocket in drb/unix.rb,</div><div class='del'>-  # and HTTP0 in sample/http0.rb and sample/http0serv.rb in the full</div><div class='del'>-  # drb distribution.</div><div class='del'>-  module DRbProtocol</div><div class='del'>-</div><div class='del'>-    # Add a new protocol to the DRbProtocol module.</div><div class='del'>-    def add_protocol(prot)</div><div class='del'>-      @protocol.push(prot)</div><div class='del'>-    end</div><div class='del'>-    module_function :add_protocol</div><div class='del'>-</div><div class='del'>-    # Open a client connection to +uri+ with the configuration +config+.</div><div class='del'>-    #</div><div class='del'>-    # The DRbProtocol module asks each registered protocol in turn to</div><div class='del'>-    # try to open the URI.  Each protocol signals that it does not handle that</div><div class='del'>-    # URI by raising a DRbBadScheme error.  If no protocol recognises the</div><div class='del'>-    # URI, then a DRbBadURI error is raised.  If a protocol accepts the</div><div class='del'>-    # URI, but an error occurs in opening it, a DRbConnError is raised.</div><div class='del'>-    def open(uri, config, first=true) </div><div class='del'>-      @protocol.each do |prot|</div><div class='del'>-	begin</div><div class='del'>-	  return prot.open(uri, config)</div><div class='del'>-	rescue DRbBadScheme</div><div class='del'>-	rescue DRbConnError</div><div class='del'>-	  raise($!)</div><div class='del'>-	rescue</div><div class='del'>-	  raise(DRbConnError, "#{uri} - #{$!.inspect}")</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if first &amp;&amp; (config[:auto_load] != false)</div><div class='del'>-	auto_load(uri, config)</div><div class='del'>-	return open(uri, config, false)</div><div class='del'>-      end</div><div class='del'>-      raise DRbBadURI, 'can\'t parse uri:' + uri</div><div class='del'>-    end</div><div class='del'>-    module_function :open</div><div class='del'>-</div><div class='del'>-    # Open a server listening for connections at +uri+ with </div><div class='del'>-    # configuration +config+.</div><div class='del'>-    #</div><div class='del'>-    # The DRbProtocol module asks each registered protocol in turn to</div><div class='del'>-    # try to open a server at the URI.  Each protocol signals that it does </div><div class='del'>-    # not handle that URI by raising a DRbBadScheme error.  If no protocol </div><div class='del'>-    # recognises the URI, then a DRbBadURI error is raised.  If a protocol </div><div class='del'>-    # accepts the URI, but an error occurs in opening it, the underlying </div><div class='del'>-    # error is passed on to the caller.</div><div class='del'>-    def open_server(uri, config, first=true)</div><div class='del'>-      @protocol.each do |prot|</div><div class='del'>-	begin</div><div class='del'>-	  return prot.open_server(uri, config)</div><div class='del'>-	rescue DRbBadScheme</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if first &amp;&amp; (config[:auto_load] != false)</div><div class='del'>-	auto_load(uri, config)</div><div class='del'>-	return open_server(uri, config, false)</div><div class='del'>-      end</div><div class='del'>-      raise DRbBadURI, 'can\'t parse uri:' + uri</div><div class='del'>-    end</div><div class='del'>-    module_function :open_server</div><div class='del'>-</div><div class='del'>-    # Parse +uri+ into a [uri, option] pair.</div><div class='del'>-    #</div><div class='del'>-    # The DRbProtocol module asks each registered protocol in turn to</div><div class='del'>-    # try to parse the URI.  Each protocol signals that it does not handle that</div><div class='del'>-    # URI by raising a DRbBadScheme error.  If no protocol recognises the</div><div class='del'>-    # URI, then a DRbBadURI error is raised.  </div><div class='del'>-    def uri_option(uri, config, first=true)</div><div class='del'>-      @protocol.each do |prot|</div><div class='del'>-	begin</div><div class='del'>-	  uri, opt = prot.uri_option(uri, config)</div><div class='del'>-	  # opt = nil if opt == ''</div><div class='del'>-	  return uri, opt</div><div class='del'>-	rescue DRbBadScheme</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if first &amp;&amp; (config[:auto_load] != false)</div><div class='del'>-	auto_load(uri, config)</div><div class='del'>-        return uri_option(uri, config, false)</div><div class='del'>-      end</div><div class='del'>-      raise DRbBadURI, 'can\'t parse uri:' + uri</div><div class='del'>-    end</div><div class='del'>-    module_function :uri_option</div><div class='del'>-</div><div class='del'>-    def auto_load(uri, config)  # :nodoc:</div><div class='del'>-      if uri =~ /^drb([a-z0-9]+):/</div><div class='del'>-	require("drb/#{$1}") rescue nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    module_function :auto_load</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The default drb protocol.</div><div class='del'>-  #</div><div class='del'>-  # Communicates over a TCP socket.</div><div class='del'>-  class DRbTCPSocket</div><div class='del'>-    private</div><div class='del'>-    def self.parse_uri(uri)</div><div class='del'>-      if uri =~ /^druby:\/\/(.*?):(\d+)(\?(.*))?$/</div><div class='del'>-	host = $1</div><div class='del'>-	port = $2.to_i</div><div class='del'>-	option = $4</div><div class='del'>-	[host, port, option]</div><div class='del'>-      else</div><div class='del'>-	raise(DRbBadScheme, uri) unless uri =~ /^druby:/</div><div class='del'>-	raise(DRbBadURI, 'can\'t parse uri:' + uri)</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'>-    # Open a client connection to +uri+ using configuration +config+.</div><div class='del'>-    def self.open(uri, config)</div><div class='del'>-      host, port, option = parse_uri(uri)</div><div class='del'>-      host.untaint</div><div class='del'>-      port.untaint</div><div class='del'>-      soc = TCPSocket.open(host, port)</div><div class='del'>-      self.new(uri, soc, config)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.getservername</div><div class='del'>-      host = Socket::gethostname</div><div class='del'>-      begin</div><div class='del'>-        Socket::gethostbyname(host)[0]</div><div class='del'>-      rescue</div><div class='del'>-        'localhost'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.open_server_inaddr_any(host, port)</div><div class='del'>-      infos = Socket::getaddrinfo(host, nil, </div><div class='del'>-                                  Socket::AF_UNSPEC,</div><div class='del'>-                                  Socket::SOCK_STREAM, </div><div class='del'>-                                  0,</div><div class='del'>-                                  Socket::AI_PASSIVE)</div><div class='del'>-      family = infos.collect { |af, *_| af }.uniq</div><div class='del'>-      case family</div><div class='del'>-      when ['AF_INET']</div><div class='del'>-        return TCPServer.open('0.0.0.0', port)</div><div class='del'>-      when ['AF_INET6']</div><div class='del'>-        return TCPServer.open('::', port)</div><div class='del'>-      else</div><div class='del'>-        return TCPServer.open(port)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Open a server listening for connections at +uri+ using </div><div class='del'>-    # configuration +config+.</div><div class='del'>-    def self.open_server(uri, config)</div><div class='del'>-      uri = 'druby://:0' unless uri</div><div class='del'>-      host, port, opt = parse_uri(uri)</div><div class='del'>-      config = {:tcp_original_host =&gt; host}.update(config)</div><div class='del'>-      if host.size == 0</div><div class='del'>-        host = getservername</div><div class='del'>-        soc = open_server_inaddr_any(host, port)</div><div class='del'>-      else</div><div class='del'>-	soc = TCPServer.open(host, port)</div><div class='del'>-      end</div><div class='del'>-      port = soc.addr[1] if port == 0</div><div class='del'>-      config[:tcp_port] = port</div><div class='del'>-      uri = "druby://#{host}:#{port}"</div><div class='del'>-      self.new(uri, soc, config)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Parse +uri+ into a [uri, option] pair.</div><div class='del'>-    def self.uri_option(uri, config)</div><div class='del'>-      host, port, option = parse_uri(uri)</div><div class='del'>-      return "druby://#{host}:#{port}", option</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Create a new DRbTCPSocket instance.</div><div class='del'>-    #</div><div class='del'>-    # +uri+ is the URI we are connected to.</div><div class='del'>-    # +soc+ is the tcp socket we are bound to.  +config+ is our</div><div class='del'>-    # configuration.</div><div class='del'>-    def initialize(uri, soc, config={})</div><div class='del'>-      @uri = uri</div><div class='del'>-      @socket = soc</div><div class='del'>-      @config = config</div><div class='del'>-      @acl = config[:tcp_acl]</div><div class='del'>-      @msg = DRbMessage.new(config)</div><div class='del'>-      set_sockopt(@socket)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get the URI that we are connected to.</div><div class='del'>-    attr_reader :uri</div><div class='del'>-</div><div class='del'>-    # Get the address of our TCP peer (the other end of the socket</div><div class='del'>-    # we are bound to.</div><div class='del'>-    def peeraddr</div><div class='del'>-      @socket.peeraddr</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Get the socket.</div><div class='del'>-    def stream; @socket; end</div><div class='del'>-</div><div class='del'>-    # On the client side, send a request to the server.</div><div class='del'>-    def send_request(ref, msg_id, arg, b)</div><div class='del'>-      @msg.send_request(stream, ref, msg_id, arg, b)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # On the server side, receive a request from the client.</div><div class='del'>-    def recv_request</div><div class='del'>-      @msg.recv_request(stream)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # On the server side, send a reply to the client.</div><div class='del'>-    def send_reply(succ, result)</div><div class='del'>-      @msg.send_reply(stream, succ, result)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # On the client side, receive a reply from the server.</div><div class='del'>-    def recv_reply</div><div class='del'>-      @msg.recv_reply(stream)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-</div><div class='del'>-    # Close the connection.</div><div class='del'>-    #</div><div class='del'>-    # If this is an instance returned by #open_server, then this stops</div><div class='del'>-    # listening for new connections altogether.  If this is an instance</div><div class='del'>-    # returned by #open or by #accept, then it closes this particular</div><div class='del'>-    # client-server session.</div><div class='del'>-    def close</div><div class='del'>-      if @socket</div><div class='del'>-	@socket.close</div><div class='del'>-	@socket = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # On the server side, for an instance returned by #open_server, </div><div class='del'>-    # accept a client connection and return a new instance to handle</div><div class='del'>-    # the server's side of this client-server session.</div><div class='del'>-    def accept</div><div class='del'>-      while true</div><div class='del'>-	s = @socket.accept</div><div class='del'>-	break if (@acl ? @acl.allow_socket?(s) : true) </div><div class='del'>-	s.close</div><div class='del'>-      end</div><div class='del'>-      if @config[:tcp_original_host].to_s.size == 0</div><div class='del'>-        uri = "druby://#{s.addr[3]}:#{@config[:tcp_port]}"</div><div class='del'>-      else</div><div class='del'>-        uri = @uri</div><div class='del'>-      end</div><div class='del'>-      self.class.new(uri, s, @config)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Check to see if this connection is alive.</div><div class='del'>-    def alive?</div><div class='del'>-      return false unless @socket</div><div class='del'>-      if IO.select([@socket], nil, nil, 0)</div><div class='del'>-	close</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'>-</div><div class='del'>-    def set_sockopt(soc) # :nodoc:</div><div class='del'>-      soc.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)</div><div class='del'>-      soc.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module DRbProtocol</div><div class='del'>-    @protocol = [DRbTCPSocket] # default</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class DRbURIOption  # :nodoc:  I don't understand the purpose of this class...</div><div class='del'>-    def initialize(option)</div><div class='del'>-      @option = option.to_s</div><div class='del'>-    end</div><div class='del'>-    attr :option</div><div class='del'>-    def to_s; @option; end</div><div class='del'>-    </div><div class='del'>-    def ==(other)</div><div class='del'>-      return false unless DRbURIOption === other</div><div class='del'>-      @option == other.option</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def hash</div><div class='del'>-      @option.hash</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    alias eql? ==</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Object wrapping a reference to a remote drb object.</div><div class='del'>-  #</div><div class='del'>-  # Method calls on this object are relayed to the remote</div><div class='del'>-  # object that this object is a stub for.</div><div class='del'>-  class DRbObject</div><div class='del'>-</div><div class='del'>-    # Unmarshall a marshalled DRbObject.</div><div class='del'>-    #</div><div class='del'>-    # If the referenced object is located within the local server, then</div><div class='del'>-    # the object itself is returned.  Otherwise, a new DRbObject is</div><div class='del'>-    # created to act as a stub for the remote referenced object.</div><div class='del'>-    def self._load(s)</div><div class='del'>-      uri, ref = Marshal.load(s)</div><div class='del'>-      </div><div class='del'>-      if DRb.here?(uri)</div><div class='del'>-	obj = DRb.to_obj(ref)</div><div class='del'>-        if ((! obj.tainted?) &amp;&amp; Thread.current[:drb_untaint])</div><div class='del'>-          Thread.current[:drb_untaint].push(obj)</div><div class='del'>-        end</div><div class='del'>-        return obj</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      self.new_with(uri, ref)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.new_with(uri, ref)</div><div class='del'>-      it = self.allocate</div><div class='del'>-      it.instance_variable_set('@uri', uri)</div><div class='del'>-      it.instance_variable_set('@ref', ref)</div><div class='del'>-      it</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Create a new DRbObject from a URI alone.</div><div class='del'>-    def self.new_with_uri(uri)</div><div class='del'>-      self.new(nil, uri)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Marshall this object.</div><div class='del'>-    #</div><div class='del'>-    # The URI and ref of the object are marshalled.</div><div class='del'>-    def _dump(lv)</div><div class='del'>-      Marshal.dump([@uri, @ref])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Create a new remote object stub.</div><div class='del'>-    #</div><div class='del'>-    # +obj+ is the (local) object we want to create a stub for.  Normally</div><div class='del'>-    # this is +nil+.  +uri+ is the URI of the remote object that this</div><div class='del'>-    # will be a stub for.</div><div class='del'>-    def initialize(obj, uri=nil)</div><div class='del'>-      @uri = nil</div><div class='del'>-      @ref = nil</div><div class='del'>-      if obj.nil?</div><div class='del'>-	return if uri.nil?</div><div class='del'>-	@uri, option = DRbProtocol.uri_option(uri, DRb.config)</div><div class='del'>-	@ref = DRbURIOption.new(option) unless option.nil?</div><div class='del'>-      else</div><div class='del'>-	@uri = uri ? uri : (DRb.uri rescue nil)</div><div class='del'>-	@ref = obj ? DRb.to_id(obj) : nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get the URI of the remote object.</div><div class='del'>-    def __drburi </div><div class='del'>-      @uri</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get the reference of the object, if local.</div><div class='del'>-    def __drbref</div><div class='del'>-      @ref</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    undef :to_s</div><div class='del'>-    undef :to_a if respond_to?(:to_a)</div><div class='del'>-</div><div class='del'>-    def respond_to?(msg_id, priv=false)</div><div class='del'>-      case msg_id</div><div class='del'>-      when :_dump</div><div class='del'>-        true</div><div class='del'>-      when :marshal_dump</div><div class='del'>-        false</div><div class='del'>-      else</div><div class='del'>-        method_missing(:respond_to?, msg_id, priv)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Routes method calls to the referenced object.</div><div class='del'>-    def method_missing(msg_id, *a, &amp;b)</div><div class='del'>-      if DRb.here?(@uri)</div><div class='del'>-	obj = DRb.to_obj(@ref)</div><div class='del'>-	DRb.current_server.check_insecure_method(obj, msg_id)</div><div class='del'>-	return obj.__send__(msg_id, *a, &amp;b) </div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      succ, result = self.class.with_friend(@uri) do</div><div class='del'>-        DRbConn.open(@uri) do |conn|</div><div class='del'>-          conn.send_message(self, msg_id, a, b)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if succ</div><div class='del'>-        return result</div><div class='del'>-      elsif DRbUnknown === result</div><div class='del'>-        raise result</div><div class='del'>-      else</div><div class='del'>-        bt = self.class.prepare_backtrace(@uri, result)</div><div class='del'>-	result.set_backtrace(bt + caller)</div><div class='del'>-        raise result</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.with_friend(uri)</div><div class='del'>-      friend = DRb.fetch_server(uri)</div><div class='del'>-      return yield() unless friend</div><div class='del'>-      </div><div class='del'>-      save = Thread.current['DRb']</div><div class='del'>-      Thread.current['DRb'] = { 'server' =&gt; friend }</div><div class='del'>-      return yield</div><div class='del'>-    ensure</div><div class='del'>-      Thread.current['DRb'] = save if friend</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.prepare_backtrace(uri, result)</div><div class='del'>-      prefix = "(#{uri}) "</div><div class='del'>-      bt = []</div><div class='del'>-      result.backtrace.each do |x|</div><div class='del'>-        break if /`__send__'$/ =~ x </div><div class='del'>-        if /^\(druby:\/\// =~ x</div><div class='del'>-          bt.push(x)</div><div class='del'>-        else</div><div class='del'>-          bt.push(prefix + x)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      bt</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pretty_print(q)   # :nodoc:</div><div class='del'>-      q.pp_object(self)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pretty_print_cycle(q)   # :nodoc:</div><div class='del'>-      q.object_address_group(self) {</div><div class='del'>-        q.breakable</div><div class='del'>-        q.text '...'</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Class handling the connection between a DRbObject and the</div><div class='del'>-  # server the real object lives on.</div><div class='del'>-  #</div><div class='del'>-  # This class maintains a pool of connections, to reduce the</div><div class='del'>-  # overhead of starting and closing down connections for each</div><div class='del'>-  # method call.</div><div class='del'>-  #</div><div class='del'>-  # This class is used internally by DRbObject.  The user does</div><div class='del'>-  # not normally need to deal with it directly.</div><div class='del'>-  class DRbConn</div><div class='del'>-    POOL_SIZE = 16  # :nodoc:</div><div class='del'>-    @mutex = Mutex.new</div><div class='del'>-    @pool = []</div><div class='del'>-</div><div class='del'>-    def self.open(remote_uri)  # :nodoc:</div><div class='del'>-      begin</div><div class='del'>-	conn = nil</div><div class='del'>-</div><div class='del'>-	@mutex.synchronize do</div><div class='del'>-	  #FIXME</div><div class='del'>-	  new_pool = []</div><div class='del'>-	  @pool.each do |c|</div><div class='del'>-	    if conn.nil? and c.uri == remote_uri</div><div class='del'>-	      conn = c if c.alive?</div><div class='del'>-	    else</div><div class='del'>-	      new_pool.push c</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	  @pool = new_pool</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	conn = self.new(remote_uri) unless conn</div><div class='del'>-	succ, result = yield(conn)</div><div class='del'>-	return succ, result</div><div class='del'>-</div><div class='del'>-      ensure</div><div class='del'>-	if conn</div><div class='del'>-	  if succ</div><div class='del'>-	    @mutex.synchronize do</div><div class='del'>-	      @pool.unshift(conn)</div><div class='del'>-	      @pool.pop.close while @pool.size &gt; POOL_SIZE</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    conn.close</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 initialize(remote_uri)  # :nodoc:</div><div class='del'>-      @uri = remote_uri</div><div class='del'>-      @protocol = DRbProtocol.open(remote_uri, DRb.config)</div><div class='del'>-    end</div><div class='del'>-    attr_reader :uri  # :nodoc:</div><div class='del'>-</div><div class='del'>-    def send_message(ref, msg_id, arg, block)  # :nodoc:</div><div class='del'>-      @protocol.send_request(ref, msg_id, arg, block)</div><div class='del'>-      @protocol.recv_reply</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def close  # :nodoc:</div><div class='del'>-      @protocol.close</div><div class='del'>-      @protocol = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def alive?  # :nodoc:</div><div class='del'>-      @protocol.alive?</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Class representing a drb server instance.</div><div class='del'>-  #</div><div class='del'>-  # A DRbServer must be running in the local process before any incoming</div><div class='del'>-  # dRuby calls can be accepted, or any local objects can be passed as</div><div class='del'>-  # dRuby references to remote processes, even if those local objects are</div><div class='del'>-  # never actually called remotely. You do not need to start a DRbServer</div><div class='del'>-  # in the local process if you are only making outgoing dRuby calls</div><div class='del'>-  # passing marshalled parameters.</div><div class='del'>-  #</div><div class='del'>-  # Unless multiple servers are being used, the local DRbServer is normally</div><div class='del'>-  # started by calling DRb.start_service.</div><div class='del'>-  class DRbServer</div><div class='del'>-    @@acl = nil</div><div class='del'>-    @@idconv = DRbIdConv.new</div><div class='del'>-    @@secondary_server = nil</div><div class='del'>-    @@argc_limit = 256</div><div class='del'>-    @@load_limit = 256 * 102400</div><div class='del'>-    @@verbose = false</div><div class='del'>-    @@safe_level = 0</div><div class='del'>-</div><div class='del'>-    # Set the default value for the :argc_limit option.</div><div class='del'>-    #</div><div class='del'>-    # See #new().  The initial default value is 256.</div><div class='del'>-    def self.default_argc_limit(argc)</div><div class='del'>-      @@argc_limit = argc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set the default value for the :load_limit option.</div><div class='del'>-    #</div><div class='del'>-    # See #new().  The initial default value is 25 MB.</div><div class='del'>-    def self.default_load_limit(sz)</div><div class='del'>-      @@load_limit = sz</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set the default value for the :acl option.</div><div class='del'>-    #</div><div class='del'>-    # See #new().  The initial default value is nil.</div><div class='del'>-    def self.default_acl(acl)</div><div class='del'>-      @@acl = acl</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set the default value for the :id_conv option.</div><div class='del'>-    #</div><div class='del'>-    # See #new().  The initial default value is a DRbIdConv instance.</div><div class='del'>-    def self.default_id_conv(idconv)</div><div class='del'>-      @@idconv = idconv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.default_safe_level(level)</div><div class='del'>-      @@safe_level = level</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set the default value of the :verbose option.</div><div class='del'>-    #</div><div class='del'>-    # See #new().  The initial default value is false.</div><div class='del'>-    def self.verbose=(on)</div><div class='del'>-      @@verbose = on</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Get the default value of the :verbose option.</div><div class='del'>-    def self.verbose</div><div class='del'>-      @@verbose</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.make_config(hash={})  # :nodoc:</div><div class='del'>-      default_config = { </div><div class='del'>-	:idconv =&gt; @@idconv,</div><div class='del'>-	:verbose =&gt; @@verbose,</div><div class='del'>-	:tcp_acl =&gt; @@acl,</div><div class='del'>-	:load_limit =&gt; @@load_limit,</div><div class='del'>-	:argc_limit =&gt; @@argc_limit,</div><div class='del'>-        :safe_level =&gt; @@safe_level</div><div class='del'>-      }</div><div class='del'>-      default_config.update(hash)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Create a new DRbServer instance.</div><div class='del'>-    #</div><div class='del'>-    # +uri+ is the URI to bind to.  This is normally of the form</div><div class='del'>-    # 'druby://&lt;hostname&gt;:&lt;port&gt;' where &lt;hostname&gt; is a hostname of</div><div class='del'>-    # the local machine.  If nil, then the system's default hostname</div><div class='del'>-    # will be bound to, on a port selected by the system; these value</div><div class='del'>-    # can be retrieved from the +uri+ attribute.  'druby:' specifies</div><div class='del'>-    # the default dRuby transport protocol: another protocol, such</div><div class='del'>-    # as 'drbunix:', can be specified instead.</div><div class='del'>-    #</div><div class='del'>-    # +front+ is the front object for the server, that is, the object</div><div class='del'>-    # to which remote method calls on the server will be passed.  If</div><div class='del'>-    # nil, then the server will not accept remote method calls.</div><div class='del'>-    #</div><div class='del'>-    # If +config_or_acl+ is a hash, it is the configuration to</div><div class='del'>-    # use for this server.  The following options are recognised:</div><div class='del'>-    #</div><div class='del'>-    # :idconv :: an id-to-object conversion object.  This defaults</div><div class='del'>-    #            to an instance of the class DRb::DRbIdConv.</div><div class='del'>-    # :verbose :: if true, all unsuccessful remote calls on objects</div><div class='del'>-    #             in the server will be logged to $stdout. false</div><div class='del'>-    #             by default.</div><div class='del'>-    # :tcp_acl :: the access control list for this server.  See</div><div class='del'>-    #             the ACL class from the main dRuby distribution.</div><div class='del'>-    # :load_limit :: the maximum message size in bytes accepted by</div><div class='del'>-    #                the server.  Defaults to 25 MB (26214400).</div><div class='del'>-    # :argc_limit :: the maximum number of arguments to a remote</div><div class='del'>-    #                method accepted by the server.  Defaults to</div><div class='del'>-    #                256.</div><div class='del'>-    #</div><div class='del'>-    # The default values of these options can be modified on</div><div class='del'>-    # a class-wide basis by the class methods #default_argc_limit,</div><div class='del'>-    # #default_load_limit, #default_acl, #default_id_conv,</div><div class='del'>-    # and #verbose=</div><div class='del'>-    #</div><div class='del'>-    # If +config_or_acl+ is not a hash, but is not nil, it is</div><div class='del'>-    # assumed to be the access control list for this server.</div><div class='del'>-    # See the :tcp_acl option for more details.</div><div class='del'>-    #</div><div class='del'>-    # If no other server is currently set as the primary server,</div><div class='del'>-    # this will become the primary server.</div><div class='del'>-    #</div><div class='del'>-    # The server will immediately start running in its own thread.</div><div class='del'>-    def initialize(uri=nil, front=nil, config_or_acl=nil)</div><div class='del'>-      if Hash === config_or_acl</div><div class='del'>-	config = config_or_acl.dup</div><div class='del'>-      else</div><div class='del'>-	acl = config_or_acl || @@acl</div><div class='del'>-	config = {</div><div class='del'>-	  :tcp_acl =&gt; acl</div><div class='del'>-	}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @config = self.class.make_config(config)</div><div class='del'>-</div><div class='del'>-      @protocol = DRbProtocol.open_server(uri, @config)</div><div class='del'>-      @uri = @protocol.uri</div><div class='del'>-</div><div class='del'>-      @front = front</div><div class='del'>-      @idconv = @config[:idconv]</div><div class='del'>-      @safe_level = @config[:safe_level]</div><div class='del'>-</div><div class='del'>-      @grp = ThreadGroup.new</div><div class='del'>-      @thread = run</div><div class='del'>-</div><div class='del'>-      DRb.regist_server(self)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The URI of this DRbServer.</div><div class='del'>-    attr_reader :uri</div><div class='del'>-</div><div class='del'>-    # The main thread of this DRbServer.</div><div class='del'>-    #</div><div class='del'>-    # This is the thread that listens for and accepts connections</div><div class='del'>-    # from clients, not that handles each client's request-response</div><div class='del'>-    # session.</div><div class='del'>-    attr_reader :thread</div><div class='del'>-</div><div class='del'>-    # The front object of the DRbServer.</div><div class='del'>-    # </div><div class='del'>-    # This object receives remote method calls made on the server's</div><div class='del'>-    # URI alone, with an object id.</div><div class='del'>-    attr_reader :front</div><div class='del'>-</div><div class='del'>-    # The configuration of this DRbServer</div><div class='del'>-    attr_reader :config</div><div class='del'>-</div><div class='del'>-    attr_reader :safe_level</div><div class='del'>-</div><div class='del'>-    # Set whether to operate in verbose mode.</div><div class='del'>-    #</div><div class='del'>-    # In verbose mode, failed calls are logged to stdout.</div><div class='del'>-    def verbose=(v); @config[:verbose]=v; end</div><div class='del'>-</div><div class='del'>-    # Get whether the server is in verbose mode.</div><div class='del'>-    #</div><div class='del'>-    # In verbose mode, failed calls are logged to stdout.</div><div class='del'>-    def verbose; @config[:verbose]; end</div><div class='del'>-</div><div class='del'>-    # Is this server alive?</div><div class='del'>-    def alive?</div><div class='del'>-      @thread.alive?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Stop this server.</div><div class='del'>-    def stop_service</div><div class='del'>-      DRb.remove_server(self)</div><div class='del'>-      if  Thread.current['DRb'] &amp;&amp; Thread.current['DRb']['server'] == self</div><div class='del'>-        Thread.current['DRb']['stop_service'] = true</div><div class='del'>-      else</div><div class='del'>-        @thread.kill</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Convert a dRuby reference to the local object it refers to.</div><div class='del'>-    def to_obj(ref)</div><div class='del'>-      return front if ref.nil?</div><div class='del'>-      return front[ref.to_s] if DRbURIOption === ref</div><div class='del'>-      @idconv.to_obj(ref)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Convert a local object to a dRuby reference.</div><div class='del'>-    def to_id(obj)</div><div class='del'>-      return nil if obj.__id__ == front.__id__</div><div class='del'>-      @idconv.to_id(obj)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    def kill_sub_thread</div><div class='del'>-      Thread.new do</div><div class='del'>-	grp = ThreadGroup.new</div><div class='del'>-	grp.add(Thread.current)</div><div class='del'>-	list = @grp.list</div><div class='del'>-	while list.size &gt; 0</div><div class='del'>-	  list.each do |th|</div><div class='del'>-	    th.kill if th.alive?</div><div class='del'>-	  end</div><div class='del'>-	  list = @grp.list</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def run</div><div class='del'>-      Thread.start do</div><div class='del'>-	begin</div><div class='del'>-	  while true</div><div class='del'>-	    main_loop</div><div class='del'>-	  end</div><div class='del'>-	ensure</div><div class='del'>-	  @protocol.close if @protocol</div><div class='del'>-	  kill_sub_thread</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # List of insecure methods.</div><div class='del'>-    #</div><div class='del'>-    # These methods are not callable via dRuby.</div><div class='del'>-    INSECURE_METHOD = [</div><div class='del'>-      :__send__</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    # Has a method been included in the list of insecure methods?</div><div class='del'>-    def insecure_method?(msg_id)</div><div class='del'>-      INSECURE_METHOD.include?(msg_id)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Coerce an object to a string, providing our own representation if</div><div class='del'>-    # to_s is not defined for the object.</div><div class='del'>-    def any_to_s(obj)</div><div class='del'>-      obj.to_s + ":#{obj.class}"</div><div class='del'>-    rescue</div><div class='del'>-      sprintf("#&lt;%s:0x%lx&gt;", obj.class, obj.__id__)      </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Check that a method is callable via dRuby.</div><div class='del'>-    #</div><div class='del'>-    # +obj+ is the object we want to invoke the method on. +msg_id+ is the</div><div class='del'>-    # method name, as a Symbol.</div><div class='del'>-    #</div><div class='del'>-    # If the method is an insecure method (see #insecure_method?) a </div><div class='del'>-    # SecurityError is thrown.  If the method is private or undefined,</div><div class='del'>-    # a NameError is thrown.</div><div class='del'>-    def check_insecure_method(obj, msg_id)</div><div class='del'>-      return true if Proc === obj &amp;&amp; msg_id == :__drb_yield</div><div class='del'>-      raise(ArgumentError, "#{any_to_s(msg_id)} is not a symbol") unless Symbol == msg_id.class</div><div class='del'>-      raise(SecurityError, "insecure method `#{msg_id}'") if insecure_method?(msg_id)</div><div class='del'>-      </div><div class='del'>-      if obj.private_methods.include?(msg_id.to_s)</div><div class='del'>-	desc = any_to_s(obj)</div><div class='del'>-        raise NoMethodError, "private method `#{msg_id}' called for #{desc}"</div><div class='del'>-      elsif obj.protected_methods.include?(msg_id.to_s)</div><div class='del'>-	desc = any_to_s(obj)</div><div class='del'>-        raise NoMethodError, "protected method `#{msg_id}' called for #{desc}"</div><div class='del'>-      else</div><div class='del'>-        true</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    public :check_insecure_method</div><div class='del'>-    </div><div class='del'>-    class InvokeMethod  # :nodoc:</div><div class='del'>-      def initialize(drb_server, client)</div><div class='del'>-	@drb_server = drb_server</div><div class='del'>-        @safe_level = drb_server.safe_level</div><div class='del'>-	@client = client</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def perform</div><div class='del'>-	@result = nil</div><div class='del'>-	@succ = false</div><div class='del'>-	setup_message</div><div class='del'>-</div><div class='del'>-        if $SAFE &lt; @safe_level</div><div class='del'>-          info = Thread.current['DRb']</div><div class='del'>-          if @block</div><div class='del'>-            @result = Thread.new {</div><div class='del'>-              Thread.current['DRb'] = info</div><div class='del'>-              $SAFE = @safe_level</div><div class='del'>-              perform_with_block</div><div class='del'>-            }.value</div><div class='del'>-          else</div><div class='del'>-            @result = Thread.new { </div><div class='del'>-              Thread.current['DRb'] = info</div><div class='del'>-              $SAFE = @safe_level</div><div class='del'>-              perform_without_block</div><div class='del'>-            }.value</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          if @block</div><div class='del'>-            @result = perform_with_block</div><div class='del'>-          else</div><div class='del'>-            @result = perform_without_block</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-	@succ = true</div><div class='del'>-	if @msg_id == :to_ary &amp;&amp; @result.class == Array</div><div class='del'>-	  @result = DRbArray.new(@result) </div><div class='del'>-	end</div><div class='del'>-	return @succ, @result</div><div class='del'>-      rescue StandardError, ScriptError, Interrupt</div><div class='del'>-	@result = $!</div><div class='del'>-	return @succ, @result</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def init_with_client</div><div class='del'>-	obj, msg, argv, block = @client.recv_request</div><div class='del'>-        @obj = obj</div><div class='del'>-        @msg_id = msg.intern</div><div class='del'>-        @argv = argv</div><div class='del'>-        @block = block</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def check_insecure_method</div><div class='del'>-        @drb_server.check_insecure_method(@obj, @msg_id)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_message</div><div class='del'>-	init_with_client</div><div class='del'>-	check_insecure_method</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def perform_without_block</div><div class='del'>-	if Proc === @obj &amp;&amp; @msg_id == :__drb_yield</div><div class='del'>-          if @argv.size == 1</div><div class='del'>-	    ary = @argv</div><div class='del'>-	  else</div><div class='del'>-	    ary = [@argv]</div><div class='del'>-	  end</div><div class='del'>-	  ary.collect(&amp;@obj)[0]</div><div class='del'>-	else</div><div class='del'>-	  @obj.__send__(@msg_id, *@argv)</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'>-    if RUBY_VERSION &gt;= '1.8'</div><div class='del'>-      require 'drb/invokemethod'</div><div class='del'>-      class InvokeMethod</div><div class='del'>-        include InvokeMethod18Mixin</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      require 'drb/invokemethod16'</div><div class='del'>-      class InvokeMethod</div><div class='del'>-        include InvokeMethod16Mixin</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The main loop performed by a DRbServer's internal thread.</div><div class='del'>-    #</div><div class='del'>-    # Accepts a connection from a client, and starts up its own</div><div class='del'>-    # thread to handle it.  This thread loops, receiving requests</div><div class='del'>-    # from the client, invoking them on a local object, and</div><div class='del'>-    # returning responses, until the client closes the connection</div><div class='del'>-    # or a local method call fails.</div><div class='del'>-    def main_loop</div><div class='del'>-      Thread.start(@protocol.accept) do |client|</div><div class='del'>-	@grp.add Thread.current</div><div class='del'>-	Thread.current['DRb'] = { 'client' =&gt; client ,</div><div class='del'>-	                          'server' =&gt; self }</div><div class='del'>-	loop do</div><div class='del'>-	  begin</div><div class='del'>-	    succ = false</div><div class='del'>-	    invoke_method = InvokeMethod.new(self, client)</div><div class='del'>-	    succ, result = invoke_method.perform</div><div class='del'>-	    if !succ &amp;&amp; verbose</div><div class='del'>-	      p result</div><div class='del'>-	      result.backtrace.each do |x|</div><div class='del'>-		puts x</div><div class='del'>-	      end</div><div class='del'>-	    end</div><div class='del'>-	    client.send_reply(succ, result) rescue nil</div><div class='del'>-	  ensure</div><div class='del'>-            client.close unless succ</div><div class='del'>-            if Thread.current['DRb']['stop_service']</div><div class='del'>-              Thread.new { stop_service }</div><div class='del'>-            end</div><div class='del'>-            break unless succ</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'>-  @primary_server = nil</div><div class='del'>-</div><div class='del'>-  # Start a dRuby server locally.</div><div class='del'>-  #</div><div class='del'>-  # The new dRuby server will become the primary server, even</div><div class='del'>-  # if another server is currently the primary server.</div><div class='del'>-  #</div><div class='del'>-  # +uri+ is the URI for the server to bind to.  If nil,</div><div class='del'>-  # the server will bind to random port on the default local host</div><div class='del'>-  # name and use the default dRuby protocol.</div><div class='del'>-  #</div><div class='del'>-  # +front+ is the server's front object.  This may be nil.</div><div class='del'>-  #</div><div class='del'>-  # +config+ is the configuration for the new server.  This may</div><div class='del'>-  # be nil.</div><div class='del'>-  #</div><div class='del'>-  # See DRbServer::new.</div><div class='del'>-  def start_service(uri=nil, front=nil, config=nil)</div><div class='del'>-    @primary_server = DRbServer.new(uri, front, config)</div><div class='del'>-  end</div><div class='del'>-  module_function :start_service</div><div class='del'>-</div><div class='del'>-  # The primary local dRuby server.</div><div class='del'>-  #</div><div class='del'>-  # This is the server created by the #start_service call.  </div><div class='del'>-  attr_accessor :primary_server</div><div class='del'>-  module_function :primary_server=, :primary_server</div><div class='del'>-</div><div class='del'>-  # Get the 'current' server.</div><div class='del'>-  #</div><div class='del'>-  # In the context of execution taking place within the main</div><div class='del'>-  # thread of a dRuby server (typically, as a result of a remote</div><div class='del'>-  # call on the server or one of its objects), the current</div><div class='del'>-  # server is that server.  Otherwise, the current server is</div><div class='del'>-  # the primary server.</div><div class='del'>-  #</div><div class='del'>-  # If the above rule fails to find a server, a DRbServerNotFound</div><div class='del'>-  # error is raised.</div><div class='del'>-  def current_server</div><div class='del'>-    drb = Thread.current['DRb'] </div><div class='del'>-    server = (drb &amp;&amp; drb['server']) ? drb['server'] : @primary_server </div><div class='del'>-    raise DRbServerNotFound unless server</div><div class='del'>-    return server</div><div class='del'>-  end</div><div class='del'>-  module_function :current_server</div><div class='del'>-</div><div class='del'>-  # Stop the local dRuby server.</div><div class='del'>-  #</div><div class='del'>-  # This operates on the primary server.  If there is no primary</div><div class='del'>-  # server currently running, it is a noop.</div><div class='del'>-  def stop_service</div><div class='del'>-    @primary_server.stop_service if @primary_server</div><div class='del'>-    @primary_server = nil</div><div class='del'>-  end</div><div class='del'>-  module_function :stop_service</div><div class='del'>-</div><div class='del'>-  # Get the URI defining the local dRuby space.</div><div class='del'>-  #</div><div class='del'>-  # This is the URI of the current server.  See #current_server.</div><div class='del'>-  def uri</div><div class='del'>-    drb = Thread.current['DRb']</div><div class='del'>-    client = (drb &amp;&amp; drb['client'])</div><div class='del'>-    if client</div><div class='del'>-      uri = client.uri</div><div class='del'>-      return uri if uri</div><div class='del'>-    end</div><div class='del'>-    current_server.uri</div><div class='del'>-  end</div><div class='del'>-  module_function :uri</div><div class='del'>-</div><div class='del'>-  # Is +uri+ the URI for the current local server?</div><div class='del'>-  def here?(uri)</div><div class='del'>-    (current_server.uri rescue nil) == uri</div><div class='del'>-  end</div><div class='del'>-  module_function :here?</div><div class='del'>-</div><div class='del'>-  # Get the configuration of the current server.</div><div class='del'>-  #</div><div class='del'>-  # If there is no current server, this returns the default configuration.</div><div class='del'>-  # See #current_server and DRbServer::make_config.</div><div class='del'>-  def config</div><div class='del'>-    current_server.config</div><div class='del'>-  rescue</div><div class='del'>-    DRbServer.make_config</div><div class='del'>-  end</div><div class='del'>-  module_function :config</div><div class='del'>-  </div><div class='del'>-  # Get the front object of the current server.</div><div class='del'>-  #</div><div class='del'>-  # This raises a DRbServerNotFound error if there is no current server.</div><div class='del'>-  # See #current_server.</div><div class='del'>-  def front</div><div class='del'>-    current_server.front</div><div class='del'>-  end</div><div class='del'>-  module_function :front</div><div class='del'>-</div><div class='del'>-  # Convert a reference into an object using the current server.</div><div class='del'>-  #</div><div class='del'>-  # This raises a DRbServerNotFound error if there is no current server.</div><div class='del'>-  # See #current_server.</div><div class='del'>-  def to_obj(ref)</div><div class='del'>-    current_server.to_obj(ref)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Get a reference id for an object using the current server.</div><div class='del'>-  #</div><div class='del'>-  # This raises a DRbServerNotFound error if there is no current server.</div><div class='del'>-  # See #current_server.</div><div class='del'>-  def to_id(obj)</div><div class='del'>-    current_server.to_id(obj)</div><div class='del'>-  end</div><div class='del'>-  module_function :to_id</div><div class='del'>-  module_function :to_obj</div><div class='del'>-</div><div class='del'>-  # Get the thread of the primary server.</div><div class='del'>-  #</div><div class='del'>-  # This returns nil if there is no primary server.  See #primary_server.</div><div class='del'>-  def thread</div><div class='del'>-    @primary_server ? @primary_server.thread : nil</div><div class='del'>-  end</div><div class='del'>-  module_function :thread</div><div class='del'>-</div><div class='del'>-  # Set the default id conv object.</div><div class='del'>-  #</div><div class='del'>-  # See DRbServer#default_id_conv.</div><div class='del'>-  def install_id_conv(idconv)</div><div class='del'>-    DRbServer.default_id_conv(idconv)</div><div class='del'>-  end</div><div class='del'>-  module_function :install_id_conv</div><div class='del'>-</div><div class='del'>-  # Set the default acl.</div><div class='del'>-  #</div><div class='del'>-  # See DRb::DRbServer.default_acl.</div><div class='del'>-  def install_acl(acl)</div><div class='del'>-    DRbServer.default_acl(acl)</div><div class='del'>-  end</div><div class='del'>-  module_function :install_acl</div><div class='del'>-</div><div class='del'>-  @mutex = Mutex.new</div><div class='del'>-  def mutex</div><div class='del'>-    @mutex</div><div class='del'>-  end</div><div class='del'>-  module_function :mutex</div><div class='del'>-</div><div class='del'>-  @server = {}</div><div class='del'>-  def regist_server(server)</div><div class='del'>-    @server[server.uri] = server</div><div class='del'>-    mutex.synchronize do</div><div class='del'>-      @primary_server = server unless @primary_server</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :regist_server</div><div class='del'>-</div><div class='del'>-  def remove_server(server)</div><div class='del'>-    @server.delete(server.uri)</div><div class='del'>-  end</div><div class='del'>-  module_function :remove_server</div><div class='del'>-  </div><div class='del'>-  def fetch_server(uri)</div><div class='del'>-    @server[uri]</div><div class='del'>-  end</div><div class='del'>-  module_function :fetch_server</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-DRbObject = DRb::DRbObject</div><div class='del'>-DRbUndumped = DRb::DRbUndumped</div><div class='del'>-DRbIdConv = DRb::DRbIdConv</div><div class='head'>diff --git a/lib/drb/eq.rb b/lib/drb/eq.rb<br/>deleted file mode 100644<br/>index e24512d6a7..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/eq.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/eq.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-require 'drb/drb'</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-  class DRbObject</div><div class='del'>-    def ==(other)</div><div class='del'>-      return false unless DRbObject === other</div><div class='del'>-     (@ref == other.__drbref) &amp;&amp; (@uri == other.__drburi)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def hash</div><div class='del'>-      [@uri, @ref].hash</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias eql? ==</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/drb/extserv.rb b/lib/drb/extserv.rb<br/>deleted file mode 100644<br/>index 7da8130c2b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/extserv.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/extserv.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,64 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>- external service</div><div class='del'>- 	Copyright (c) 2000,2002 Masatoshi SEKI </div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require 'drb/drb'</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-  class ExtServ</div><div class='del'>-    include DRbUndumped</div><div class='del'>-</div><div class='del'>-    def initialize(there, name, server=nil)</div><div class='del'>-      @server = server || DRb::primary_server</div><div class='del'>-      @name = name</div><div class='del'>-      ro = DRbObject.new(nil, there)</div><div class='del'>-      @invoker = ro.regist(name, DRbObject.new(self, @server.uri))</div><div class='del'>-    end</div><div class='del'>-    attr_reader :server</div><div class='del'>-</div><div class='del'>-    def front</div><div class='del'>-      DRbObject.new(nil, @server.uri)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def stop_service</div><div class='del'>-      @invoker.unregist(@name)</div><div class='del'>-      server = @server</div><div class='del'>-      @server = nil</div><div class='del'>-      server.stop_service</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def alive?</div><div class='del'>-      @server ? @server.alive? : 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 __FILE__ == $0</div><div class='del'>-  class Foo</div><div class='del'>-    include DRbUndumped</div><div class='del'>-</div><div class='del'>-    def initialize(str)</div><div class='del'>-      @str = str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def hello(it)</div><div class='del'>-      "#{it}: #{self}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      @str</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  cmd = ARGV.shift</div><div class='del'>-  case cmd</div><div class='del'>-  when 'itest1', 'itest2'</div><div class='del'>-    front = Foo.new(cmd)</div><div class='del'>-    manager = DRb::DRbServer.new(nil, front)</div><div class='del'>-    es = DRb::ExtServ.new(ARGV.shift, ARGV.shift, manager)</div><div class='del'>-    es.server.thread.join</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/drb/extservm.rb b/lib/drb/extservm.rb<br/>deleted file mode 100644<br/>index be40aea9f5..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/extservm.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/extservm.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,89 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>- external service manager</div><div class='del'>- 	Copyright (c) 2000 Masatoshi SEKI </div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require 'drb/drb'</div><div class='del'>-require 'thread'</div><div class='del'>-require 'monitor'</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-  class ExtServManager</div><div class='del'>-    include DRbUndumped</div><div class='del'>-    include MonitorMixin</div><div class='del'>-</div><div class='del'>-    @@command = {}</div><div class='del'>-</div><div class='del'>-    def self.command</div><div class='del'>-      @@command</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.command=(cmd)</div><div class='del'>-      @@command = cmd</div><div class='del'>-    end</div><div class='del'>-      </div><div class='del'>-    def initialize</div><div class='del'>-      super()</div><div class='del'>-      @cond = new_cond</div><div class='del'>-      @servers = {}</div><div class='del'>-      @waiting = []</div><div class='del'>-      @queue = Queue.new</div><div class='del'>-      @thread = invoke_thread</div><div class='del'>-      @uri = nil</div><div class='del'>-    end</div><div class='del'>-    attr_accessor :uri</div><div class='del'>-</div><div class='del'>-    def service(name)</div><div class='del'>-      synchronize do</div><div class='del'>-        while true</div><div class='del'>-          server = @servers[name]</div><div class='del'>-          return server if server &amp;&amp; server.alive?</div><div class='del'>-          invoke_service(name)</div><div class='del'>-          @cond.wait</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def regist(name, ro)</div><div class='del'>-      synchronize do</div><div class='del'>-        @servers[name] = ro</div><div class='del'>-        @cond.signal</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def unregist(name)</div><div class='del'>-      synchronize do</div><div class='del'>-	@servers.delete(name)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    def invoke_thread</div><div class='del'>-      Thread.new do</div><div class='del'>-	while true</div><div class='del'>-	  name = @queue.pop</div><div class='del'>-	  invoke_service_command(name, @@command[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 invoke_service(name)</div><div class='del'>-      @queue.push(name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def invoke_service_command(name, command)</div><div class='del'>-      raise "invalid command. name: #{name}" unless command</div><div class='del'>-      synchronize do</div><div class='del'>-	return if @servers.include?(name)</div><div class='del'>-	@servers[name] = false</div><div class='del'>-      end</div><div class='del'>-      uri = @uri || DRb.uri</div><div class='del'>-      if RUBY_PLATFORM =~ /mswin32/ &amp;&amp; /NT/ =~ ENV["OS"]</div><div class='del'>-        system(%Q'cmd /c start "ruby" /b #{command} #{uri} #{name}')</div><div class='del'>-      else</div><div class='del'>-	system("#{command} #{uri} #{name} &amp;")</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/lib/drb/gw.rb b/lib/drb/gw.rb<br/>deleted file mode 100644<br/>index b7a5f5383f..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/gw.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/gw.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,122 +0,0 @@</div><div class='del'>-require 'drb/drb'</div><div class='del'>-require 'monitor'</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-  class GWIdConv &lt; DRbIdConv</div><div class='del'>-    def to_obj(ref)</div><div class='del'>-      if Array === ref &amp;&amp; ref[0] == :DRbObject</div><div class='del'>-        return DRbObject.new_with(ref[1], ref[2])</div><div class='del'>-      end</div><div class='del'>-      super(ref)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class GW</div><div class='del'>-    include MonitorMixin</div><div class='del'>-    def initialize</div><div class='del'>-      super()</div><div class='del'>-      @hash = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def [](key)</div><div class='del'>-      synchronize do</div><div class='del'>-        @hash[key]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def []=(key, v)</div><div class='del'>-      synchronize do</div><div class='del'>-        @hash[key] = v</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class DRbObject</div><div class='del'>-    def self._load(s)</div><div class='del'>-      uri, ref = Marshal.load(s)</div><div class='del'>-      if DRb.uri == uri</div><div class='del'>-        return ref ? DRb.to_obj(ref) : DRb.front</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      self.new_with(DRb.uri, [:DRbObject, uri, ref])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _dump(lv)</div><div class='del'>-      if DRb.uri == @uri</div><div class='del'>-        if Array === @ref &amp;&amp; @ref[0] == :DRbObject</div><div class='del'>-          Marshal.dump([@ref[1], @ref[2]])</div><div class='del'>-        else</div><div class='del'>-          Marshal.dump([@uri, @ref]) # ??</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        Marshal.dump([DRb.uri, [:DRbObject, @uri, @ref]])</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'>-=begin</div><div class='del'>-DRb.install_id_conv(DRb::GWIdConv.new)</div><div class='del'>-</div><div class='del'>-front = DRb::GW.new</div><div class='del'>-</div><div class='del'>-s1 = DRb::DRbServer.new('drbunix:/tmp/gw_b_a', front)</div><div class='del'>-s2 = DRb::DRbServer.new('drbunix:/tmp/gw_b_c', front)</div><div class='del'>-</div><div class='del'>-s1.thread.join</div><div class='del'>-s2.thread.join</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-# foo.rb</div><div class='del'>-</div><div class='del'>-require 'drb/drb'</div><div class='del'>-</div><div class='del'>-class Foo</div><div class='del'>-  include DRbUndumped</div><div class='del'>-  def initialize(name, peer=nil)</div><div class='del'>-    @name = name</div><div class='del'>-    @peer = peer</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ping(obj)</div><div class='del'>-    puts "#{@name}: ping: #{obj.inspect}"</div><div class='del'>-    @peer.ping(self) if @peer</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='del'>-# gw_a.rb</div><div class='del'>-require 'drb/unix'</div><div class='del'>-require 'foo'</div><div class='del'>-</div><div class='del'>-obj = Foo.new('a')</div><div class='del'>-DRb.start_service("drbunix:/tmp/gw_a", obj)</div><div class='del'>-</div><div class='del'>-robj = DRbObject.new_with_uri('drbunix:/tmp/gw_b_a')</div><div class='del'>-robj[:a] = obj</div><div class='del'>-</div><div class='del'>-DRb.thread.join</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-# gw_c.rb</div><div class='del'>-require 'drb/unix'</div><div class='del'>-require 'foo'</div><div class='del'>-</div><div class='del'>-foo = Foo.new('c', nil)</div><div class='del'>-</div><div class='del'>-DRb.start_service("drbunix:/tmp/gw_c", nil)</div><div class='del'>-</div><div class='del'>-robj = DRbObject.new_with_uri("drbunix:/tmp/gw_b_c")</div><div class='del'>-</div><div class='del'>-puts "c-&gt;b"</div><div class='del'>-a = robj[:a]</div><div class='del'>-sleep 2</div><div class='del'>-</div><div class='del'>-a.ping(foo)</div><div class='del'>-</div><div class='del'>-DRb.thread.join</div><div class='del'>-=end</div><div class='del'>-</div><div class='head'>diff --git a/lib/drb/invokemethod.rb b/lib/drb/invokemethod.rb<br/>deleted file mode 100644<br/>index 412b2ab9b5..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/invokemethod.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/invokemethod.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +0,0 @@</div><div class='del'>-# for ruby-1.8.0</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-  class DRbServer</div><div class='del'>-    module InvokeMethod18Mixin</div><div class='del'>-      def block_yield(x)</div><div class='del'>-	if x.size == 1 &amp;&amp; x[0].class == Array</div><div class='del'>-	  x[0] = DRbArray.new(x[0])</div><div class='del'>-	end</div><div class='del'>-        block_value = @block.call(*x)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def perform_with_block</div><div class='del'>-        @obj.__send__(@msg_id, *@argv) do |*x|</div><div class='del'>-          jump_error = nil</div><div class='del'>-          begin</div><div class='del'>-            block_value = block_yield(x)</div><div class='del'>-          rescue LocalJumpError</div><div class='del'>-            jump_error = $!</div><div class='del'>-          end</div><div class='del'>-          if jump_error</div><div class='del'>-            case jump_error.reason</div><div class='del'>-            when :retry</div><div class='del'>-              retry</div><div class='del'>-            when :break</div><div class='del'>-              break(jump_error.exit_value)</div><div class='del'>-            else</div><div class='del'>-              raise jump_error</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          block_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'>-end</div><div class='head'>diff --git a/lib/drb/observer.rb b/lib/drb/observer.rb<br/>deleted file mode 100644<br/>index e7f1668c52..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/observer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/observer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-require 'observer'</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-  module DRbObservable</div><div class='del'>-    include Observable</div><div class='del'>-</div><div class='del'>-    def notify_observers(*arg)</div><div class='del'>-      if defined? @observer_state and @observer_state</div><div class='del'>-	if defined? @observer_peers</div><div class='del'>-	  for i in @observer_peers.dup</div><div class='del'>-	    begin</div><div class='del'>-	      i.update(*arg)</div><div class='del'>-	    rescue</div><div class='del'>-	      delete_observer(i)</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	@observer_state = false</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/lib/drb/ssl.rb b/lib/drb/ssl.rb<br/>deleted file mode 100644<br/>index 58d6b7d1e0..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/ssl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/ssl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,190 +0,0 @@</div><div class='del'>-require 'socket'</div><div class='del'>-require 'openssl'</div><div class='del'>-require 'drb/drb'</div><div class='del'>-require 'singleton'</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-</div><div class='del'>-  class DRbSSLSocket &lt; DRbTCPSocket</div><div class='del'>-</div><div class='del'>-    class SSLConfig</div><div class='del'>-</div><div class='del'>-      DEFAULT = {</div><div class='del'>-	:SSLCertificate       =&gt; nil,</div><div class='del'>-	:SSLPrivateKey        =&gt; nil,</div><div class='del'>-	:SSLClientCA          =&gt; nil,</div><div class='del'>-	:SSLCACertificatePath =&gt; nil,</div><div class='del'>-	:SSLCACertificateFile =&gt; nil,</div><div class='del'>-	:SSLVerifyMode        =&gt; ::OpenSSL::SSL::VERIFY_NONE, </div><div class='del'>-	:SSLVerifyDepth       =&gt; nil,</div><div class='del'>-	:SSLVerifyCallback    =&gt; nil,   # custom verification</div><div class='del'>-        :SSLCertificateStore  =&gt; nil,</div><div class='del'>-	# Must specify if you use auto generated certificate.</div><div class='del'>-	:SSLCertName          =&gt; nil,   # e.g. [["CN","fqdn.example.com"]]</div><div class='del'>-	:SSLCertComment       =&gt; "Generated by Ruby/OpenSSL"</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      def initialize(config)</div><div class='del'>-	@config  = config</div><div class='del'>-        @cert    = config[:SSLCertificate]</div><div class='del'>-        @pkey    = config[:SSLPrivateKey]</div><div class='del'>-        @ssl_ctx = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def [](key); </div><div class='del'>-	@config[key] || DEFAULT[key]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def connect(tcp)</div><div class='del'>-	ssl = ::OpenSSL::SSL::SSLSocket.new(tcp, @ssl_ctx)</div><div class='del'>-	ssl.sync = true</div><div class='del'>-	ssl.connect</div><div class='del'>-	ssl</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def accept(tcp)</div><div class='del'>-	ssl = OpenSSL::SSL::SSLSocket.new(tcp, @ssl_ctx)</div><div class='del'>-	ssl.sync = true</div><div class='del'>-	ssl.accept</div><div class='del'>-	ssl</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def setup_certificate</div><div class='del'>-        if @cert &amp;&amp; @pkey</div><div class='del'>-          return</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-	rsa = OpenSSL::PKey::RSA.new(512){|p, n|</div><div class='del'>-	  next unless self[:verbose]</div><div class='del'>-	  case p</div><div class='del'>-	  when 0; $stderr.putc "."  # BN_generate_prime</div><div class='del'>-	  when 1; $stderr.putc "+"  # BN_generate_prime</div><div class='del'>-	  when 2; $stderr.putc "*"  # searching good prime,</div><div class='del'>-	                            # n = #of try,</div><div class='del'>-                          	    # but also data from BN_generate_prime</div><div class='del'>-	  when 3; $stderr.putc "\n" # found good prime, n==0 - p, n==1 - q,</div><div class='del'>-                         	    # but also data from BN_generate_prime</div><div class='del'>-	  else;   $stderr.putc "*"  # BN_generate_prime</div><div class='del'>-	  end</div><div class='del'>-	}</div><div class='del'>-</div><div class='del'>-	cert = OpenSSL::X509::Certificate.new</div><div class='del'>-	cert.version = 3</div><div class='del'>-	cert.serial = 0</div><div class='del'>-	name = OpenSSL::X509::Name.new(self[:SSLCertName])</div><div class='del'>-	cert.subject = name</div><div class='del'>-	cert.issuer = name</div><div class='del'>-	cert.not_before = Time.now</div><div class='del'>-	cert.not_after = Time.now + (365*24*60*60)</div><div class='del'>-	cert.public_key = rsa.public_key</div><div class='del'>-	</div><div class='del'>-	ef = OpenSSL::X509::ExtensionFactory.new(nil,cert)</div><div class='del'>-	cert.extensions = [</div><div class='del'>-	  ef.create_extension("basicConstraints","CA:FALSE"),</div><div class='del'>-	  ef.create_extension("subjectKeyIdentifier", "hash") ]</div><div class='del'>-	ef.issuer_certificate = cert</div><div class='del'>-	cert.add_extension(ef.create_extension("authorityKeyIdentifier",</div><div class='del'>-					       "keyid:always,issuer:always"))</div><div class='del'>-	if comment = self[:SSLCertComment]</div><div class='del'>-	  cert.add_extension(ef.create_extension("nsComment", comment))</div><div class='del'>-	end</div><div class='del'>-	cert.sign(rsa, OpenSSL::Digest::SHA1.new)</div><div class='del'>-	</div><div class='del'>-	@cert = cert</div><div class='del'>-        @pkey = rsa</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_ssl_context</div><div class='del'>-        ctx = ::OpenSSL::SSL::SSLContext.new</div><div class='del'>-        ctx.cert            = @cert</div><div class='del'>-        ctx.key             = @pkey</div><div class='del'>-	ctx.client_ca       = self[:SSLClientCA]</div><div class='del'>-	ctx.ca_path         = self[:SSLCACertificatePath]</div><div class='del'>-	ctx.ca_file         = self[:SSLCACertificateFile]</div><div class='del'>-	ctx.verify_mode     = self[:SSLVerifyMode]</div><div class='del'>-	ctx.verify_depth    = self[:SSLVerifyDepth]</div><div class='del'>-	ctx.verify_callback = self[:SSLVerifyCallback]</div><div class='del'>-        ctx.cert_store      = self[:SSLCertificateStore]</div><div class='del'>-        @ssl_ctx = ctx</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.parse_uri(uri)</div><div class='del'>-      if uri =~ /^drbssl:\/\/(.*?):(\d+)(\?(.*))?$/</div><div class='del'>-	host = $1</div><div class='del'>-	port = $2.to_i</div><div class='del'>-	option = $4</div><div class='del'>-	[host, port, option]</div><div class='del'>-      else</div><div class='del'>-	raise(DRbBadScheme, uri) unless uri =~ /^drbssl:/</div><div class='del'>-	raise(DRbBadURI, 'can\'t parse uri:' + uri)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.open(uri, config)</div><div class='del'>-      host, port, option = parse_uri(uri)</div><div class='del'>-      host.untaint</div><div class='del'>-      port.untaint</div><div class='del'>-      soc = TCPSocket.open(host, port)</div><div class='del'>-      ssl_conf = SSLConfig::new(config)</div><div class='del'>-      ssl_conf.setup_ssl_context</div><div class='del'>-      ssl = ssl_conf.connect(soc)</div><div class='del'>-      self.new(uri, ssl, ssl_conf, true)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.open_server(uri, config)</div><div class='del'>-      uri = 'drbssl://:0' unless uri</div><div class='del'>-      host, port, opt = parse_uri(uri)</div><div class='del'>-      if host.size == 0</div><div class='del'>-        host = getservername</div><div class='del'>-        soc = open_server_inaddr_any(host, port)</div><div class='del'>-      else</div><div class='del'>-	soc = TCPServer.open(host, port)</div><div class='del'>-      end</div><div class='del'>-      port = soc.addr[1] if port == 0</div><div class='del'>-      @uri = "drbssl://#{host}:#{port}"</div><div class='del'>-      </div><div class='del'>-      ssl_conf = SSLConfig.new(config)</div><div class='del'>-      ssl_conf.setup_certificate</div><div class='del'>-      ssl_conf.setup_ssl_context</div><div class='del'>-      self.new(@uri, soc, ssl_conf, false)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.uri_option(uri, config)</div><div class='del'>-      host, port, option = parse_uri(uri)</div><div class='del'>-      return "drbssl://#{host}:#{port}", option</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(uri, soc, config, is_established)</div><div class='del'>-      @ssl = is_established ? soc : nil</div><div class='del'>-      super(uri, soc.to_io, config)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def stream; @ssl; end</div><div class='del'>-</div><div class='del'>-    def close</div><div class='del'>-      if @ssl</div><div class='del'>-	@ssl.close</div><div class='del'>-	@ssl = nil</div><div class='del'>-      end</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-      </div><div class='del'>-    def accept</div><div class='del'>-      begin</div><div class='del'>-      while true</div><div class='del'>-	soc = @socket.accept</div><div class='del'>-	break if (@acl ? @acl.allow_socket?(soc) : true) </div><div class='del'>-	soc.close</div><div class='del'>-      end</div><div class='del'>-      ssl = @config.accept(soc)</div><div class='del'>-      self.class.new(uri, ssl, @config, true)</div><div class='del'>-      rescue OpenSSL::SSL::SSLError</div><div class='del'>-	warn("#{__FILE__}:#{__LINE__}: warning: #{$!.message} (#{$!.class})") if @config[:verbose]</div><div class='del'>-	retry</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  DRbProtocol.add_protocol(DRbSSLSocket)</div><div class='del'>-end</div><div class='head'>diff --git a/lib/drb/timeridconv.rb b/lib/drb/timeridconv.rb<br/>deleted file mode 100644<br/>index bb2c48d528..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/timeridconv.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/timeridconv.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,91 +0,0 @@</div><div class='del'>-require 'drb/drb'</div><div class='del'>-require 'monitor'</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-  class TimerIdConv &lt; DRbIdConv</div><div class='del'>-    class TimerHolder2</div><div class='del'>-      include MonitorMixin</div><div class='del'>-</div><div class='del'>-      class InvalidIndexError &lt; RuntimeError; end</div><div class='del'>-</div><div class='del'>-      def initialize(timeout=600)</div><div class='del'>-	super()</div><div class='del'>-	@sentinel = Object.new</div><div class='del'>-	@gc = {}</div><div class='del'>-	@curr = {}</div><div class='del'>-	@renew = {}</div><div class='del'>-	@timeout = timeout</div><div class='del'>-	@keeper = keeper</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add(obj)</div><div class='del'>-	synchronize do </div><div class='del'>-	  key = obj.__id__</div><div class='del'>-	  @curr[key] = obj</div><div class='del'>-	  return key</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def fetch(key, dv=@sentinel)</div><div class='del'>-	synchronize do </div><div class='del'>-	  obj = peek(key)</div><div class='del'>-	  if obj == @sentinel</div><div class='del'>-	    return dv unless dv == @sentinel</div><div class='del'>-	    raise InvalidIndexError</div><div class='del'>-	  end</div><div class='del'>-	  @renew[key] = obj # KeepIt</div><div class='del'>-	  return obj</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def include?(key)</div><div class='del'>-	synchronize do </div><div class='del'>-	  obj = peek(key)</div><div class='del'>-	  return false if obj == @sentinel</div><div class='del'>-	  true</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def peek(key)</div><div class='del'>-	synchronize do </div><div class='del'>-	  return @curr.fetch(key, @renew.fetch(key, @gc.fetch(key, @sentinel)))</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def alternate</div><div class='del'>-	synchronize do</div><div class='del'>-	  @gc = @curr       # GCed</div><div class='del'>-	  @curr = @renew</div><div class='del'>-	  @renew = {}</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def keeper</div><div class='del'>-	Thread.new do</div><div class='del'>-	  loop do</div><div class='del'>-	    size = alternate</div><div class='del'>-	    sleep(@timeout)</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 initialize(timeout=600)</div><div class='del'>-      @holder = TimerHolder2.new(timeout)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_obj(ref)</div><div class='del'>-      return super if ref.nil?</div><div class='del'>-      @holder.fetch(ref)</div><div class='del'>-    rescue TimerHolder2::InvalidIndexError</div><div class='del'>-      raise "invalid reference"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_id(obj)</div><div class='del'>-      return @holder.add(obj)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# DRb.install_id_conv(TimerIdConv.new)</div><div class='head'>diff --git a/lib/drb/unix.rb b/lib/drb/unix.rb<br/>deleted file mode 100644<br/>index 57feed8301..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/drb/unix.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/drb/unix.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,108 +0,0 @@</div><div class='del'>-require 'socket'</div><div class='del'>-require 'drb/drb'</div><div class='del'>-require 'tmpdir'</div><div class='del'>-</div><div class='del'>-raise(LoadError, "UNIXServer is required") unless defined?(UNIXServer)</div><div class='del'>-</div><div class='del'>-module DRb</div><div class='del'>-</div><div class='del'>-  class DRbUNIXSocket &lt; DRbTCPSocket</div><div class='del'>-    def self.parse_uri(uri)</div><div class='del'>-      if /^drbunix:(.*?)(\?(.*))?$/ =~ uri </div><div class='del'>-	filename = $1</div><div class='del'>-	option = $3</div><div class='del'>-	[filename, option]</div><div class='del'>-      else</div><div class='del'>-	raise(DRbBadScheme, uri) unless uri =~ /^drbunix:/</div><div class='del'>-	raise(DRbBadURI, 'can\'t parse uri:' + uri)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.open(uri, config)</div><div class='del'>-      filename, option = parse_uri(uri)</div><div class='del'>-      filename.untaint</div><div class='del'>-      soc = UNIXSocket.open(filename)</div><div class='del'>-      self.new(uri, soc, config)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.open_server(uri, config)</div><div class='del'>-      filename, option = parse_uri(uri)</div><div class='del'>-      if filename.size == 0</div><div class='del'>-	soc = temp_server</div><div class='del'>-        filename = soc.path</div><div class='del'>-	uri = 'drbunix:' + soc.path</div><div class='del'>-      else</div><div class='del'>-	soc = UNIXServer.open(filename)</div><div class='del'>-      end</div><div class='del'>-      owner = config[:UNIXFileOwner]</div><div class='del'>-      group = config[:UNIXFileGroup]</div><div class='del'>-      if owner || group</div><div class='del'>-        require 'etc'</div><div class='del'>-        owner = Etc.getpwnam( owner ).uid  if owner</div><div class='del'>-        group = Etc.getgrnam( group ).gid  if group</div><div class='del'>-        File.chown owner, group, filename</div><div class='del'>-      end</div><div class='del'>-      mode = config[:UNIXFileMode]</div><div class='del'>-      File.chmod(mode, filename) if mode</div><div class='del'>-</div><div class='del'>-      self.new(uri, soc, config, true)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.uri_option(uri, config)</div><div class='del'>-      filename, option = parse_uri(uri)</div><div class='del'>-      return "drbunix:#{filename}", option</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(uri, soc, config={}, server_mode = false)</div><div class='del'>-      super(uri, soc, config)</div><div class='del'>-      set_sockopt(@socket)</div><div class='del'>-      @server_mode = server_mode</div><div class='del'>-      @acl = nil</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # import from tempfile.rb</div><div class='del'>-    Max_try = 10</div><div class='del'>-    private</div><div class='del'>-    def self.temp_server</div><div class='del'>-      tmpdir = Dir::tmpdir</div><div class='del'>-      n = 0</div><div class='del'>-      while true</div><div class='del'>-	begin</div><div class='del'>-	  tmpname = sprintf('%s/druby%d.%d', tmpdir, $$, n)</div><div class='del'>-	  lock = tmpname + '.lock'</div><div class='del'>-	  unless File.exist?(tmpname) or File.exist?(lock)</div><div class='del'>-	    Dir.mkdir(lock)</div><div class='del'>-	    break</div><div class='del'>-	  end</div><div class='del'>-	rescue</div><div class='del'>-	  raise "cannot generate tempfile `%s'" % tmpname if n &gt;= Max_try</div><div class='del'>-	  #sleep(1)</div><div class='del'>-	end</div><div class='del'>-	n += 1</div><div class='del'>-      end</div><div class='del'>-      soc = UNIXServer.new(tmpname)</div><div class='del'>-      Dir.rmdir(lock)</div><div class='del'>-      soc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-    def close</div><div class='del'>-      return unless @socket</div><div class='del'>-      path = @socket.path if @server_mode</div><div class='del'>-      @socket.close</div><div class='del'>-      File.unlink(path) if @server_mode</div><div class='del'>-      @socket = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept</div><div class='del'>-      s = @socket.accept</div><div class='del'>-      self.class.new(nil, s, @config)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def set_sockopt(soc)</div><div class='del'>-      soc.fcntl(Fcntl::F_SETFL, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  DRbProtocol.add_protocol(DRbUNIXSocket)</div><div class='del'>-end</div><div class='head'>diff --git a/lib/e2mmap.rb b/lib/e2mmap.rb<br/>deleted file mode 100644<br/>index 3e2604af5d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/e2mmap.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/e2mmap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,195 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   e2mmap.rb - for ruby 1.1</div><div class='del'>-#   	$Release Version: 2.0$</div><div class='del'>-#   	$Revision: 1.10 $</div><div class='del'>-#   	$Date: 1999/02/17 12:33:17 $</div><div class='del'>-#   	by Keiju ISHITSUKA</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#   Usage:</div><div class='del'>-#</div><div class='del'>-# U1)</div><div class='del'>-#   class Foo</div><div class='del'>-#     extend Exception2MessageMapper</div><div class='del'>-#     def_e2message ExistingExceptionClass, "message..."</div><div class='del'>-#     def_exception :NewExceptionClass, "message..."[, superclass]</div><div class='del'>-#     ...</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-# U2)</div><div class='del'>-#   module Error</div><div class='del'>-#     extend Exception2MessageMapper</div><div class='del'>-#     def_e2meggage ExistingExceptionClass, "message..."</div><div class='del'>-#     def_exception :NewExceptionClass, "message..."[, superclass]</div><div class='del'>-#     ...</div><div class='del'>-#   end</div><div class='del'>-#   class Foo</div><div class='del'>-#     include Error</div><div class='del'>-#     ...</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-#   foo = Foo.new</div><div class='del'>-#   foo.Fail ....</div><div class='del'>-#</div><div class='del'>-# U3)</div><div class='del'>-#   module Error</div><div class='del'>-#     extend Exception2MessageMapper</div><div class='del'>-#     def_e2message ExistingExceptionClass, "message..."</div><div class='del'>-#     def_exception :NewExceptionClass, "message..."[, superclass]</div><div class='del'>-#     ...</div><div class='del'>-#   end</div><div class='del'>-#   class Foo</div><div class='del'>-#     extend Exception2MessageMapper</div><div class='del'>-#     include Error</div><div class='del'>-#     ...</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-#   Foo.Fail NewExceptionClass, arg...</div><div class='del'>-#   Foo.Fail ExistingExceptionClass, arg...</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-fail "Use Ruby 1.1" if VERSION &lt; "1.1"</div><div class='del'>-</div><div class='del'>-module Exception2MessageMapper</div><div class='del'>-  @RCS_ID='-$Id: e2mmap.rb,v 1.10 1999/02/17 12:33:17 keiju Exp keiju $-'</div><div class='del'>-</div><div class='del'>-  E2MM = Exception2MessageMapper</div><div class='del'>-</div><div class='del'>-  def E2MM.extend_object(cl)</div><div class='del'>-    super</div><div class='del'>-    cl.bind(self) unless cl == E2MM</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # backward compatibility</div><div class='del'>-  def E2MM.extend_to(b)</div><div class='del'>-    c = eval("self", b)</div><div class='del'>-    c.extend(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def bind(cl)</div><div class='del'>-    self.module_eval %[</div><div class='del'>-      def Raise(err = nil, *rest)</div><div class='del'>-	Exception2MessageMapper.Raise(self.class, err, *rest)</div><div class='del'>-      end</div><div class='del'>-      alias Fail Raise</div><div class='del'>-</div><div class='del'>-      def self.included(mod)</div><div class='del'>-	mod.extend Exception2MessageMapper</div><div class='del'>-      end</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Fail(err, *rest)</div><div class='del'>-  #	err:	exception</div><div class='del'>-  #	rest:	message arguments</div><div class='del'>-  #</div><div class='del'>-  def Raise(err = nil, *rest)</div><div class='del'>-    E2MM.Raise(self, err, *rest)</div><div class='del'>-  end</div><div class='del'>-  alias Fail Raise</div><div class='del'>-</div><div class='del'>-  # backward compatibility</div><div class='del'>-  alias fail! fail</div><div class='del'>-  def fail(err = nil, *rest)</div><div class='del'>-    begin </div><div class='del'>-      E2MM.Fail(self, err, *rest)</div><div class='del'>-    rescue E2MM::ErrNotRegisteredException</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-    public :fail</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  </div><div class='del'>-  # def_e2message(c, m)</div><div class='del'>-  #	    c:  exception</div><div class='del'>-  #	    m:  message_form</div><div class='del'>-  #	define exception c with message m.</div><div class='del'>-  #</div><div class='del'>-  def def_e2message(c, m)</div><div class='del'>-    E2MM.def_e2message(self, c, m)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # def_exception(n, m, s)</div><div class='del'>-  #	    n:  exception_name</div><div class='del'>-  #	    m:  message_form</div><div class='del'>-  #	    s:	superclass(default: StandardError)</div><div class='del'>-  #	define exception named ``c'' with message m.</div><div class='del'>-  #</div><div class='del'>-  def def_exception(n, m, s = StandardError)</div><div class='del'>-    E2MM.def_exception(self, n, m, s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Private definitions.</div><div class='del'>-  #</div><div class='del'>-  # {[class, exp] =&gt; message, ...}</div><div class='del'>-  @MessageMap = {}</div><div class='del'>-</div><div class='del'>-  # E2MM.def_exception(k, e, m)</div><div class='del'>-  #	    k:  class to define exception under.</div><div class='del'>-  #	    e:  exception</div><div class='del'>-  #	    m:  message_form</div><div class='del'>-  #	define exception c with message m.</div><div class='del'>-  #</div><div class='del'>-  def E2MM.def_e2message(k, c, m)</div><div class='del'>-    E2MM.instance_eval{@MessageMap[[k, c]] = m}</div><div class='del'>-    c</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # E2MM.def_exception(k, n, m, s)</div><div class='del'>-  #	    k:  class to define exception under.</div><div class='del'>-  #	    n:  exception_name</div><div class='del'>-  #	    m:  message_form</div><div class='del'>-  #	    s:	superclass(default: StandardError)</div><div class='del'>-  #	define exception named ``c'' with message m.</div><div class='del'>-  #</div><div class='del'>-  def E2MM.def_exception(k, n, m, s = StandardError)</div><div class='del'>-    n = n.id2name if n.kind_of?(Fixnum)</div><div class='del'>-    e = Class.new(s)</div><div class='del'>-    E2MM.instance_eval{@MessageMap[[k, e]] = m}</div><div class='del'>-    k.const_set(n, e)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Fail(klass, err, *rest)</div><div class='del'>-  #	klass:  class to define exception under.</div><div class='del'>-  #	err:	exception</div><div class='del'>-  #	rest:	message arguments</div><div class='del'>-  #</div><div class='del'>-  def E2MM.Raise(klass = E2MM, err = nil, *rest)</div><div class='del'>-    if form = e2mm_message(klass, err)</div><div class='del'>-      $! = err.new(sprintf(form, *rest))</div><div class='del'>-      $@ = caller(1) if $@.nil?</div><div class='del'>-      #p $@</div><div class='del'>-      #p __FILE__</div><div class='del'>-      $@.shift if $@[0] =~ /^#{Regexp.quote(__FILE__)}:/</div><div class='del'>-      raise</div><div class='del'>-    else</div><div class='del'>-      E2MM.Fail E2MM, ErrNotRegisteredException, err.inspect</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  class &lt;&lt;E2MM</div><div class='del'>-    alias Fail Raise</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def E2MM.e2mm_message(klass, exp)</div><div class='del'>-    for c in klass.ancestors</div><div class='del'>-      if mes = @MessageMap[[c,exp]]</div><div class='del'>-	#p mes</div><div class='del'>-	m = klass.instance_eval('"' + mes + '"')</div><div class='del'>-	return m</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-  class &lt;&lt;self</div><div class='del'>-    alias message e2mm_message</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  E2MM.def_exception(E2MM, </div><div class='del'>-		     :ErrNotRegisteredException, </div><div class='del'>-		     "not registerd exception(%s)")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='head'>diff --git a/lib/erb.rb b/lib/erb.rb<br/>deleted file mode 100644<br/>index 2ae5a1ab4a..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/erb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/erb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,883 +0,0 @@</div><div class='del'>-# = ERB -- Ruby Templating</div><div class='del'>-#</div><div class='del'>-# Author:: Masatoshi SEKI</div><div class='del'>-# Documentation:: James Edward Gray II and Gavin Sinclair</div><div class='del'>-#</div><div class='del'>-# See ERB for primary documentation and ERB::Util for a couple of utility</div><div class='del'>-# routines.</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 1999-2000,2002,2003 Masatoshi SEKI</div><div class='del'>-#</div><div class='del'>-# You can redistribute it and/or modify it under the same terms as Ruby.</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# = ERB -- Ruby Templating</div><div class='del'>-#</div><div class='del'>-# == Introduction</div><div class='del'>-#</div><div class='del'>-# ERB provides an easy to use but powerful templating system for Ruby.  Using</div><div class='del'>-# ERB, actual Ruby code can be added to any plain text document for the</div><div class='del'>-# purposes of generating document information details and/or flow control.</div><div class='del'>-#</div><div class='del'>-# A very simple example is this:</div><div class='del'>-# </div><div class='del'>-#   require 'erb'</div><div class='del'>-#</div><div class='del'>-#   x = 42</div><div class='del'>-#   template = ERB.new &lt;&lt;-EOF</div><div class='del'>-#     The value of x is: &lt;%= x %&gt;</div><div class='del'>-#   EOF</div><div class='del'>-#   puts template.result(binding)</div><div class='del'>-#</div><div class='del'>-# &lt;em&gt;Prints:&lt;/em&gt; The value of x is: 42</div><div class='del'>-#</div><div class='del'>-# More complex examples are given below.</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# == Recognized Tags</div><div class='del'>-#</div><div class='del'>-# ERB recognizes certain tags in the provided template and converts them based</div><div class='del'>-# on the rules below:</div><div class='del'>-#</div><div class='del'>-#   &lt;% Ruby code -- inline with output %&gt;</div><div class='del'>-#   &lt;%= Ruby expression -- replace with result %&gt;</div><div class='del'>-#   &lt;%# comment -- ignored -- useful in testing %&gt;</div><div class='del'>-#   % a line of Ruby code -- treated as &lt;% line %&gt; (optional -- see ERB.new)</div><div class='del'>-#   %% replaced with % if first thing on a line and % processing is used</div><div class='del'>-#   &lt;%% or %%&gt; -- replace with &lt;% or %&gt; respectively</div><div class='del'>-#</div><div class='del'>-# All other text is passed through ERB filtering unchanged.</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# == Options</div><div class='del'>-#</div><div class='del'>-# There are several settings you can change when you use ERB:</div><div class='del'>-# * the nature of the tags that are recognized;</div><div class='del'>-# * the value of &lt;tt&gt;$SAFE&lt;/tt&gt; under which the template is run;</div><div class='del'>-# * the binding used to resolve local variables in the template.</div><div class='del'>-#</div><div class='del'>-# See the ERB.new and ERB#result methods for more detail.</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# == Examples</div><div class='del'>-#</div><div class='del'>-# === Plain Text</div><div class='del'>-#</div><div class='del'>-# ERB is useful for any generic templating situation.  Note that in this example, we use the</div><div class='del'>-# convenient "% at start of line" tag, and we quote the template literally with</div><div class='del'>-# &lt;tt&gt;%q{...}&lt;/tt&gt; to avoid trouble with the backslash.</div><div class='del'>-#</div><div class='del'>-#   require "erb"</div><div class='del'>-#   </div><div class='del'>-#   # Create template.</div><div class='del'>-#   template = %q{</div><div class='del'>-#     From:  James Edward Gray II &lt;james@grayproductions.net&gt;</div><div class='del'>-#     To:  &lt;%= to %&gt;</div><div class='del'>-#     Subject:  Addressing Needs</div><div class='del'>-#   </div><div class='del'>-#     &lt;%= to[/\w+/] %&gt;:</div><div class='del'>-#   </div><div class='del'>-#     Just wanted to send a quick note assuring that your needs are being</div><div class='del'>-#     addressed.</div><div class='del'>-#   </div><div class='del'>-#     I want you to know that my team will keep working on the issues,</div><div class='del'>-#     especially:</div><div class='del'>-#   </div><div class='del'>-#     &lt;%# ignore numerous minor requests -- focus on priorities %&gt;</div><div class='del'>-#     % priorities.each do |priority|</div><div class='del'>-#       * &lt;%= priority %&gt;</div><div class='del'>-#     % end</div><div class='del'>-#   </div><div class='del'>-#     Thanks for your patience.</div><div class='del'>-#   </div><div class='del'>-#     James Edward Gray II</div><div class='del'>-#   }.gsub(/^  /, '')</div><div class='del'>-#   </div><div class='del'>-#   message = ERB.new(template, 0, "%&lt;&gt;")</div><div class='del'>-#   </div><div class='del'>-#   # Set up template data.</div><div class='del'>-#   to = "Community Spokesman &lt;spokesman@ruby_community.org&gt;"</div><div class='del'>-#   priorities = [ "Run Ruby Quiz",</div><div class='del'>-#                  "Document Modules",</div><div class='del'>-#                  "Answer Questions on Ruby Talk" ]</div><div class='del'>-#   </div><div class='del'>-#   # Produce result.</div><div class='del'>-#   email = message.result</div><div class='del'>-#   puts email</div><div class='del'>-#</div><div class='del'>-# &lt;i&gt;Generates:&lt;/i&gt;</div><div class='del'>-#</div><div class='del'>-#   From:  James Edward Gray II &lt;james@grayproductions.net&gt;</div><div class='del'>-#   To:  Community Spokesman &lt;spokesman@ruby_community.org&gt;</div><div class='del'>-#   Subject:  Addressing Needs</div><div class='del'>-#   </div><div class='del'>-#   Community:</div><div class='del'>-#   </div><div class='del'>-#   Just wanted to send a quick note assuring that your needs are being addressed.</div><div class='del'>-#   </div><div class='del'>-#   I want you to know that my team will keep working on the issues, especially:</div><div class='del'>-#   </div><div class='del'>-#       * Run Ruby Quiz</div><div class='del'>-#       * Document Modules</div><div class='del'>-#       * Answer Questions on Ruby Talk</div><div class='del'>-#   </div><div class='del'>-#   Thanks for your patience.</div><div class='del'>-#   </div><div class='del'>-#   James Edward Gray II</div><div class='del'>-#</div><div class='del'>-# === Ruby in HTML</div><div class='del'>-#</div><div class='del'>-# ERB is often used in &lt;tt&gt;.rhtml&lt;/tt&gt; files (HTML with embedded Ruby).  Notice the need in</div><div class='del'>-# this example to provide a special binding when the template is run, so that the instance</div><div class='del'>-# variables in the Product object can be resolved.</div><div class='del'>-#</div><div class='del'>-#   require "erb"</div><div class='del'>-#   </div><div class='del'>-#   # Build template data class.</div><div class='del'>-#   class Product</div><div class='del'>-#     def initialize( code, name, desc, cost )</div><div class='del'>-#       @code = code</div><div class='del'>-#       @name = name</div><div class='del'>-#       @desc = desc</div><div class='del'>-#       @cost = cost</div><div class='del'>-#        	</div><div class='del'>-#       @features = [ ]</div><div class='del'>-#     end</div><div class='del'>-#   </div><div class='del'>-#     def add_feature( feature )</div><div class='del'>-#       @features &lt;&lt; feature</div><div class='del'>-#     end</div><div class='del'>-#   </div><div class='del'>-#     # Support templating of member data.</div><div class='del'>-#     def get_binding</div><div class='del'>-#       binding</div><div class='del'>-#     end</div><div class='del'>-#   </div><div class='del'>-#     # ...</div><div class='del'>-#   end</div><div class='del'>-#   </div><div class='del'>-#   # Create template.</div><div class='del'>-#   template = %{</div><div class='del'>-#     &lt;html&gt;</div><div class='del'>-#       &lt;head&gt;&lt;title&gt;Ruby Toys -- &lt;%= @name %&gt;&lt;/title&gt;&lt;/head&gt;</div><div class='del'>-#       &lt;body&gt;</div><div class='del'>-#   </div><div class='del'>-#         &lt;h1&gt;&lt;%= @name %&gt; (&lt;%= @code %&gt;)&lt;/h1&gt;</div><div class='del'>-#         &lt;p&gt;&lt;%= @desc %&gt;&lt;/p&gt;</div><div class='del'>-#   </div><div class='del'>-#         &lt;ul&gt;</div><div class='del'>-#           &lt;% @features.each do |f| %&gt;</div><div class='del'>-#             &lt;li&gt;&lt;b&gt;&lt;%= f %&gt;&lt;/b&gt;&lt;/li&gt;</div><div class='del'>-#           &lt;% end %&gt;</div><div class='del'>-#         &lt;/ul&gt;</div><div class='del'>-#   </div><div class='del'>-#         &lt;p&gt;</div><div class='del'>-#           &lt;% if @cost &lt; 10 %&gt;</div><div class='del'>-#             &lt;b&gt;Only &lt;%= @cost %&gt;!!!&lt;/b&gt;</div><div class='del'>-#           &lt;% else %&gt;</div><div class='del'>-#              Call for a price, today!</div><div class='del'>-#           &lt;% end %&gt;</div><div class='del'>-#         &lt;/p&gt;</div><div class='del'>-#    </div><div class='del'>-#       &lt;/body&gt;</div><div class='del'>-#     &lt;/html&gt;</div><div class='del'>-#   }.gsub(/^  /, '')</div><div class='del'>-#   </div><div class='del'>-#   rhtml = ERB.new(template)</div><div class='del'>-#   </div><div class='del'>-#   # Set up template data.</div><div class='del'>-#   toy = Product.new( "TZ-1002",</div><div class='del'>-#                      "Rubysapien",</div><div class='del'>-#                      "Geek's Best Friend!  Responds to Ruby commands...",</div><div class='del'>-#                      999.95 )</div><div class='del'>-#   toy.add_feature("Listens for verbal commands in the Ruby language!")</div><div class='del'>-#   toy.add_feature("Ignores Perl, Java, and all C variants.")</div><div class='del'>-#   toy.add_feature("Karate-Chop Action!!!")</div><div class='del'>-#   toy.add_feature("Matz signature on left leg.")</div><div class='del'>-#   toy.add_feature("Gem studded eyes... Rubies, of course!")</div><div class='del'>-#   </div><div class='del'>-#   # Produce result.</div><div class='del'>-#   rhtml.run(toy.get_binding)</div><div class='del'>-#</div><div class='del'>-# &lt;i&gt;Generates (some blank lines removed):&lt;/i&gt;</div><div class='del'>-#</div><div class='del'>-#    &lt;html&gt;</div><div class='del'>-#      &lt;head&gt;&lt;title&gt;Ruby Toys -- Rubysapien&lt;/title&gt;&lt;/head&gt;</div><div class='del'>-#      &lt;body&gt;</div><div class='del'>-#    </div><div class='del'>-#        &lt;h1&gt;Rubysapien (TZ-1002)&lt;/h1&gt;</div><div class='del'>-#        &lt;p&gt;Geek's Best Friend!  Responds to Ruby commands...&lt;/p&gt;</div><div class='del'>-#    </div><div class='del'>-#        &lt;ul&gt;</div><div class='del'>-#            &lt;li&gt;&lt;b&gt;Listens for verbal commands in the Ruby language!&lt;/b&gt;&lt;/li&gt;</div><div class='del'>-#            &lt;li&gt;&lt;b&gt;Ignores Perl, Java, and all C variants.&lt;/b&gt;&lt;/li&gt;</div><div class='del'>-#            &lt;li&gt;&lt;b&gt;Karate-Chop Action!!!&lt;/b&gt;&lt;/li&gt;</div><div class='del'>-#            &lt;li&gt;&lt;b&gt;Matz signature on left leg.&lt;/b&gt;&lt;/li&gt;</div><div class='del'>-#            &lt;li&gt;&lt;b&gt;Gem studded eyes... Rubies, of course!&lt;/b&gt;&lt;/li&gt;</div><div class='del'>-#        &lt;/ul&gt;</div><div class='del'>-#    </div><div class='del'>-#        &lt;p&gt;</div><div class='del'>-#             Call for a price, today!</div><div class='del'>-#        &lt;/p&gt;</div><div class='del'>-#    </div><div class='del'>-#      &lt;/body&gt;</div><div class='del'>-#    &lt;/html&gt;</div><div class='del'>-#</div><div class='del'>-# </div><div class='del'>-# == Notes</div><div class='del'>-#</div><div class='del'>-# There are a variety of templating solutions available in various Ruby projects:</div><div class='del'>-# * ERB's big brother, eRuby, works the same but is written in C for speed;</div><div class='del'>-# * Amrita (smart at producing HTML/XML);</div><div class='del'>-# * cs/Template (written in C for speed);</div><div class='del'>-# * RDoc, distributed with Ruby, uses its own template engine, which can be reused elsewhere;</div><div class='del'>-# * and others; search the RAA.</div><div class='del'>-#</div><div class='del'>-# Rails, the web application framework, uses ERB to create views.</div><div class='del'>-#</div><div class='del'>-class ERB</div><div class='del'>-  Revision = '$Date$' 	#'</div><div class='del'>-</div><div class='del'>-  # Returns revision information for the erb.rb module.</div><div class='del'>-  def self.version</div><div class='del'>-    "erb.rb [2.1.0 #{ERB::Revision.split[1]}]"</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#--</div><div class='del'>-# ERB::Compiler</div><div class='del'>-class ERB</div><div class='del'>-  class Compiler # :nodoc:</div><div class='del'>-    class PercentLine # :nodoc:</div><div class='del'>-      def initialize(str)</div><div class='del'>-        @value = str</div><div class='del'>-      end</div><div class='del'>-      attr_reader :value</div><div class='del'>-      alias :to_s :value</div><div class='del'>-</div><div class='del'>-      def empty?</div><div class='del'>-        @value.empty?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Scanner # :nodoc:</div><div class='del'>-      @scanner_map = {}</div><div class='del'>-      def self.regist_scanner(klass, trim_mode, percent)</div><div class='del'>-	@scanner_map[[trim_mode, percent]] = klass</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.default_scanner=(klass)</div><div class='del'>-	@default_scanner = klass</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.make_scanner(src, trim_mode, percent)</div><div class='del'>-	klass = @scanner_map.fetch([trim_mode, percent], @default_scanner)</div><div class='del'>-	klass.new(src, trim_mode, percent)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(src, trim_mode, percent)</div><div class='del'>-	@src = src</div><div class='del'>-	@stag = nil</div><div class='del'>-      end</div><div class='del'>-      attr_accessor :stag</div><div class='del'>-</div><div class='del'>-      def scan; end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class TrimScanner &lt; Scanner # :nodoc:</div><div class='del'>-      def initialize(src, trim_mode, percent)</div><div class='del'>-	super</div><div class='del'>-	@trim_mode = trim_mode</div><div class='del'>-	@percent = percent</div><div class='del'>-	if @trim_mode == '&gt;'</div><div class='del'>-	  @scan_line = self.method(:trim_line1)</div><div class='del'>-	elsif @trim_mode == '&lt;&gt;'</div><div class='del'>-	  @scan_line = self.method(:trim_line2)</div><div class='del'>-	elsif @trim_mode == '-'</div><div class='del'>-	  @scan_line = self.method(:explicit_trim_line)</div><div class='del'>-	else</div><div class='del'>-	  @scan_line = self.method(:scan_line)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      attr_accessor :stag</div><div class='del'>-      </div><div class='del'>-      def scan(&amp;block)</div><div class='del'>-	@stag = nil</div><div class='del'>-	if @percent</div><div class='del'>-	  @src.each do |line|</div><div class='del'>-	    percent_line(line, &amp;block)</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-          @scan_line.call(@src, &amp;block)</div><div class='del'>-	end</div><div class='del'>-	nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def percent_line(line, &amp;block)</div><div class='del'>-	if @stag || line[0] != ?%</div><div class='del'>-	  return @scan_line.call(line, &amp;block)</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	line[0] = ''</div><div class='del'>-	if line[0] == ?%</div><div class='del'>-	  @scan_line.call(line, &amp;block)</div><div class='del'>-	else</div><div class='del'>-          yield(PercentLine.new(line.chomp))</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def scan_line(line)</div><div class='del'>-        line.scan(/(.*?)(&lt;%%|%%&gt;|&lt;%=|&lt;%#|&lt;%|%&gt;|\n|\z)/m) do |tokens|</div><div class='del'>-          tokens.each do |token|</div><div class='del'>-            next if token.empty?</div><div class='del'>-            yield(token)</div><div class='del'>-          end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def trim_line1(line)</div><div class='del'>-        line.scan(/(.*?)(&lt;%%|%%&gt;|&lt;%=|&lt;%#|&lt;%|%&gt;\n|%&gt;|\n|\z)/m) do |tokens|</div><div class='del'>-          tokens.each do |token|</div><div class='del'>-            next if token.empty?</div><div class='del'>-            if token == "%&gt;\n"</div><div class='del'>-              yield('%&gt;')</div><div class='del'>-              yield(:cr)</div><div class='del'>-            else</div><div class='del'>-              yield(token)</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 trim_line2(line)</div><div class='del'>-	head = nil</div><div class='del'>-        line.scan(/(.*?)(&lt;%%|%%&gt;|&lt;%=|&lt;%#|&lt;%|%&gt;\n|%&gt;|\n|\z)/m) do |tokens|</div><div class='del'>-          tokens.each do |token|</div><div class='del'>-            next if token.empty?</div><div class='del'>-            head = token unless head</div><div class='del'>-            if token == "%&gt;\n"</div><div class='del'>-              yield('%&gt;')</div><div class='del'>-              if is_erb_stag?(head)</div><div class='del'>-                yield(:cr)</div><div class='del'>-              else</div><div class='del'>-                yield("\n")</div><div class='del'>-              end</div><div class='del'>-              head = nil</div><div class='del'>-            else</div><div class='del'>-              yield(token)</div><div class='del'>-              head = nil if token == "\n"</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 explicit_trim_line(line)</div><div class='del'>-        line.scan(/(.*?)(^[ \t]*&lt;%\-|&lt;%\-|&lt;%%|%%&gt;|&lt;%=|&lt;%#|&lt;%|-%&gt;\n|-%&gt;|%&gt;|\z)/m) do |tokens|</div><div class='del'>-          tokens.each do |token|</div><div class='del'>-            next if token.empty?</div><div class='del'>-            if @stag.nil? &amp;&amp; /[ \t]*&lt;%-/ =~ token</div><div class='del'>-              yield('&lt;%')</div><div class='del'>-            elsif @stag &amp;&amp; token == "-%&gt;\n"</div><div class='del'>-              yield('%&gt;')</div><div class='del'>-              yield(:cr)</div><div class='del'>-            elsif @stag &amp;&amp; token == '-%&gt;'</div><div class='del'>-              yield('%&gt;')</div><div class='del'>-            else</div><div class='del'>-              yield(token)</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'>-      ERB_STAG = %w(&lt;%= &lt;%# &lt;%)</div><div class='del'>-      def is_erb_stag?(s)</div><div class='del'>-	ERB_STAG.member?(s)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    Scanner.default_scanner = TrimScanner</div><div class='del'>-</div><div class='del'>-    class SimpleScanner &lt; Scanner # :nodoc:</div><div class='del'>-      def scan</div><div class='del'>-        @src.scan(/(.*?)(&lt;%%|%%&gt;|&lt;%=|&lt;%#|&lt;%|%&gt;|\n|\z)/m) do |tokens|</div><div class='del'>-          tokens.each do |token|</div><div class='del'>-            next if token.empty?</div><div class='del'>-            yield(token)</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'>-    Scanner.regist_scanner(SimpleScanner, nil, false)</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      require 'strscan'</div><div class='del'>-      class SimpleScanner2 &lt; Scanner # :nodoc:</div><div class='del'>-        def scan</div><div class='del'>-          stag_reg = /(.*?)(&lt;%%|&lt;%=|&lt;%#|&lt;%|\z)/m</div><div class='del'>-          etag_reg = /(.*?)(%%&gt;|%&gt;|\z)/m</div><div class='del'>-          scanner = StringScanner.new(@src)</div><div class='del'>-          while ! scanner.eos?</div><div class='del'>-            scanner.scan(@stag ? etag_reg : stag_reg)</div><div class='del'>-            yield(scanner[1])</div><div class='del'>-            yield(scanner[2])</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      Scanner.regist_scanner(SimpleScanner2, nil, false)</div><div class='del'>-</div><div class='del'>-      class PercentScanner &lt; Scanner # :nodoc:</div><div class='del'>-	def scan</div><div class='del'>-          stag_reg = /(.*?)(^%%|^%|&lt;%%|&lt;%=|&lt;%#|&lt;%|\z)/m</div><div class='del'>-          etag_reg = /(.*?)(%%&gt;|%&gt;|\z)/m</div><div class='del'>-          scanner = StringScanner.new(@src)</div><div class='del'>-          while ! scanner.eos?</div><div class='del'>-	    scanner.scan(@stag ? etag_reg : stag_reg)</div><div class='del'>-            yield(scanner[1])</div><div class='del'>-</div><div class='del'>-            elem = scanner[2]</div><div class='del'>-            if elem == '%%'</div><div class='del'>-              elem = '%'</div><div class='del'>-            elsif elem == '%'</div><div class='del'>-              elem = PercentLine.new(scanner.scan(/.*?(\n|\z)/).chomp)</div><div class='del'>-            end</div><div class='del'>-            yield(elem)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      Scanner.regist_scanner(PercentScanner, nil, true)</div><div class='del'>-</div><div class='del'>-      class ExplicitScanner &lt; Scanner # :nodoc:</div><div class='del'>-	def scan</div><div class='del'>-          stag_reg = /(.*?)(^[ \t]*&lt;%-|&lt;%%|&lt;%=|&lt;%#|&lt;%-|&lt;%|\z)/m</div><div class='del'>-          etag_reg = /(.*?)(%%&gt;|-%&gt;|%&gt;|\z)/m</div><div class='del'>-          scanner = StringScanner.new(@src)</div><div class='del'>-          while ! scanner.eos?</div><div class='del'>-	    scanner.scan(@stag ? etag_reg : stag_reg)</div><div class='del'>-            yield(scanner[1])</div><div class='del'>-</div><div class='del'>-            elem = scanner[2]</div><div class='del'>-            if /[ \t]*&lt;%-/ =~ elem</div><div class='del'>-              yield('&lt;%')</div><div class='del'>-            elsif elem == '-%&gt;'</div><div class='del'>-	      yield('%&gt;')</div><div class='del'>-	      yield(:cr) if scanner.scan(/(\n|\z)/)</div><div class='del'>-	    else</div><div class='del'>-	      yield(elem)</div><div class='del'>-	    end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      Scanner.regist_scanner(ExplicitScanner, '-', false)</div><div class='del'>-</div><div class='del'>-    rescue LoadError</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Buffer # :nodoc:</div><div class='del'>-      def initialize(compiler)</div><div class='del'>-	@compiler = compiler</div><div class='del'>-	@line = []</div><div class='del'>-	@script = ""</div><div class='del'>-	@compiler.pre_cmd.each do |x|</div><div class='del'>-	  push(x)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      attr_reader :script</div><div class='del'>-</div><div class='del'>-      def push(cmd)</div><div class='del'>-	@line &lt;&lt; cmd</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def cr</div><div class='del'>-	@script &lt;&lt; (@line.join('; '))</div><div class='del'>-	@line = []</div><div class='del'>-	@script &lt;&lt; "\n"</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def close</div><div class='del'>-	return unless @line</div><div class='del'>-	@compiler.post_cmd.each do |x|</div><div class='del'>-	  push(x)</div><div class='del'>-	end</div><div class='del'>-	@script &lt;&lt; (@line.join('; '))</div><div class='del'>-	@line = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def content_dump(s)</div><div class='del'>-      n = s.count("\n")</div><div class='del'>-      if n &gt; 0</div><div class='del'>-        s.dump + "\n" * n</div><div class='del'>-      else</div><div class='del'>-        s.dump</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def compile(s)</div><div class='del'>-      out = Buffer.new(self)</div><div class='del'>-</div><div class='del'>-      content = ''</div><div class='del'>-      scanner = make_scanner(s)</div><div class='del'>-      scanner.scan do |token|</div><div class='del'>-        next if token.nil? </div><div class='del'>-        next if token == ''</div><div class='del'>-	if scanner.stag.nil?</div><div class='del'>-	  case token</div><div class='del'>-          when PercentLine</div><div class='del'>-	    out.push("#{@put_cmd} #{content_dump(content)}") if content.size &gt; 0</div><div class='del'>-	    content = ''</div><div class='del'>-            out.push(token.to_s)</div><div class='del'>-            out.cr</div><div class='del'>-	  when :cr</div><div class='del'>-	    out.cr</div><div class='del'>-	  when '&lt;%', '&lt;%=', '&lt;%#'</div><div class='del'>-	    scanner.stag = token</div><div class='del'>-	    out.push("#{@put_cmd} #{content_dump(content)}") if content.size &gt; 0</div><div class='del'>-	    content = ''</div><div class='del'>-	  when "\n"</div><div class='del'>-	    content &lt;&lt; "\n"</div><div class='del'>-	    out.push("#{@put_cmd} #{content_dump(content)}")</div><div class='del'>-	    content = ''</div><div class='del'>-	  when '&lt;%%'</div><div class='del'>-	    content &lt;&lt; '&lt;%'</div><div class='del'>-	  else</div><div class='del'>-	    content &lt;&lt; token</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  case token</div><div class='del'>-	  when '%&gt;'</div><div class='del'>-	    case scanner.stag</div><div class='del'>-	    when '&lt;%'</div><div class='del'>-	      if content[-1] == ?\n</div><div class='del'>-		content.chop!</div><div class='del'>-		out.push(content)</div><div class='del'>-		out.cr</div><div class='del'>-	      else</div><div class='del'>-		out.push(content)</div><div class='del'>-	      end</div><div class='del'>-	    when '&lt;%='</div><div class='del'>-	      out.push("#{@insert_cmd}((#{content}).to_s)")</div><div class='del'>-	    when '&lt;%#'</div><div class='del'>-	      # out.push("# #{content_dump(content)}")</div><div class='del'>-	    end</div><div class='del'>-	    scanner.stag = nil</div><div class='del'>-	    content = ''</div><div class='del'>-	  when '%%&gt;'</div><div class='del'>-	    content &lt;&lt; '%&gt;'</div><div class='del'>-	  else</div><div class='del'>-	    content &lt;&lt; token</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      out.push("#{@put_cmd} #{content_dump(content)}") if content.size &gt; 0</div><div class='del'>-      out.close</div><div class='del'>-      out.script</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def prepare_trim_mode(mode)</div><div class='del'>-      case mode</div><div class='del'>-      when 1</div><div class='del'>-	return [false, '&gt;']</div><div class='del'>-      when 2</div><div class='del'>-	return [false, '&lt;&gt;']</div><div class='del'>-      when 0</div><div class='del'>-	return [false, nil]</div><div class='del'>-      when String</div><div class='del'>-	perc = mode.include?('%')</div><div class='del'>-	if mode.include?('-')</div><div class='del'>-	  return [perc, '-']</div><div class='del'>-	elsif mode.include?('&lt;&gt;')</div><div class='del'>-	  return [perc, '&lt;&gt;']</div><div class='del'>-	elsif mode.include?('&gt;')</div><div class='del'>-	  return [perc, '&gt;']</div><div class='del'>-	else</div><div class='del'>-	  [perc, nil]</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	return [false, nil]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def make_scanner(src)</div><div class='del'>-      Scanner.make_scanner(src, @trim_mode, @percent)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(trim_mode)</div><div class='del'>-      @percent, @trim_mode = prepare_trim_mode(trim_mode)</div><div class='del'>-      @put_cmd = 'print'</div><div class='del'>-      @insert_cmd = @put_cmd</div><div class='del'>-      @pre_cmd = []</div><div class='del'>-      @post_cmd = []</div><div class='del'>-    end</div><div class='del'>-    attr_reader :percent, :trim_mode</div><div class='del'>-    attr_accessor :put_cmd, :insert_cmd, :pre_cmd, :post_cmd</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#--</div><div class='del'>-# ERB</div><div class='del'>-class ERB</div><div class='del'>-  #</div><div class='del'>-  # Constructs a new ERB object with the template specified in _str_.</div><div class='del'>-  # </div><div class='del'>-  # An ERB object works by building a chunk of Ruby code that will output</div><div class='del'>-  # the completed template when run. If _safe_level_ is set to a non-nil value,</div><div class='del'>-  # ERB code will be run in a separate thread with &lt;b&gt;$SAFE&lt;/b&gt; set to the</div><div class='del'>-  # provided level.</div><div class='del'>-  # </div><div class='del'>-  # If _trim_mode_ is passed a String containing one or more of the following</div><div class='del'>-  # modifiers, ERB will adjust its code generation as listed:</div><div class='del'>-  # </div><div class='del'>-  # 	%  enables Ruby code processing for lines beginning with %</div><div class='del'>-  # 	&lt;&gt; omit newline for lines starting with &lt;% and ending in %&gt;</div><div class='del'>-  # 	&gt;  omit newline for lines ending in %&gt;</div><div class='del'>-  # </div><div class='del'>-  # _eoutvar_ can be used to set the name of the variable ERB will build up</div><div class='del'>-  # its output in.  This is useful when you need to run multiple ERB</div><div class='del'>-  # templates through the same binding and/or when you want to control where</div><div class='del'>-  # output ends up.  Pass the name of the variable to be used inside a String.</div><div class='del'>-  #</div><div class='del'>-  # === Example</div><div class='del'>-  #</div><div class='del'>-  #  require "erb"</div><div class='del'>-  #  </div><div class='del'>-  #  # build data class</div><div class='del'>-  #  class Listings</div><div class='del'>-  #    PRODUCT = { :name =&gt; "Chicken Fried Steak",</div><div class='del'>-  #                :desc =&gt; "A well messages pattie, breaded and fried.",</div><div class='del'>-  #                :cost =&gt; 9.95 }</div><div class='del'>-  #  </div><div class='del'>-  #    attr_reader :product, :price</div><div class='del'>-  #    </div><div class='del'>-  #    def initialize( product = "", price = "" )</div><div class='del'>-  #      @product = product</div><div class='del'>-  #      @price = price</div><div class='del'>-  #    end</div><div class='del'>-  #    </div><div class='del'>-  #    def build</div><div class='del'>-  #      b = binding</div><div class='del'>-  #      # create and run templates, filling member data variables</div><div class='del'>-  #      ERB.new(&lt;&lt;-'END_PRODUCT'.gsub(/^\s+/, ""), 0, "", "@product").result b</div><div class='del'>-  #        &lt;%= PRODUCT[:name] %&gt;</div><div class='del'>-  #        &lt;%= PRODUCT[:desc] %&gt;</div><div class='del'>-  #      END_PRODUCT</div><div class='del'>-  #      ERB.new(&lt;&lt;-'END_PRICE'.gsub(/^\s+/, ""), 0, "", "@price").result b</div><div class='del'>-  #        &lt;%= PRODUCT[:name] %&gt; -- &lt;%= PRODUCT[:cost] %&gt;</div><div class='del'>-  #        &lt;%= PRODUCT[:desc] %&gt;</div><div class='del'>-  #      END_PRICE</div><div class='del'>-  #    end</div><div class='del'>-  #  end</div><div class='del'>-  #  </div><div class='del'>-  #  # setup template data</div><div class='del'>-  #  listings = Listings.new</div><div class='del'>-  #  listings.build</div><div class='del'>-  #  </div><div class='del'>-  #  puts listings.product + "\n" + listings.price</div><div class='del'>-  #</div><div class='del'>-  # _Generates_</div><div class='del'>-  #</div><div class='del'>-  #  Chicken Fried Steak</div><div class='del'>-  #  A well messages pattie, breaded and fried.</div><div class='del'>-  #  </div><div class='del'>-  #  Chicken Fried Steak -- 9.95</div><div class='del'>-  #  A well messages pattie, breaded and fried.</div><div class='del'>-  #  </div><div class='del'>-  def initialize(str, safe_level=nil, trim_mode=nil, eoutvar='_erbout')</div><div class='del'>-    @safe_level = safe_level</div><div class='del'>-    compiler = ERB::Compiler.new(trim_mode)</div><div class='del'>-    set_eoutvar(compiler, eoutvar)</div><div class='del'>-    @src = compiler.compile(str)</div><div class='del'>-    @filename = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The Ruby code generated by ERB</div><div class='del'>-  attr_reader :src</div><div class='del'>-</div><div class='del'>-  # The optional _filename_ argument passed to Kernel#eval when the ERB code</div><div class='del'>-  # is run</div><div class='del'>-  attr_accessor :filename</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Can be used to set _eoutvar_ as described in ERB#new.  It's probably easier</div><div class='del'>-  # to just use the constructor though, since calling this method requires the</div><div class='del'>-  # setup of an ERB _compiler_ object.</div><div class='del'>-  #</div><div class='del'>-  def set_eoutvar(compiler, eoutvar = '_erbout')</div><div class='del'>-    compiler.put_cmd = "#{eoutvar}.concat"</div><div class='del'>-    compiler.insert_cmd = "#{eoutvar}.concat"</div><div class='del'>-</div><div class='del'>-    cmd = []</div><div class='del'>-    cmd.push "#{eoutvar} = ''"</div><div class='del'>-    </div><div class='del'>-    compiler.pre_cmd = cmd</div><div class='del'>-</div><div class='del'>-    cmd = []</div><div class='del'>-    cmd.push(eoutvar)</div><div class='del'>-</div><div class='del'>-    compiler.post_cmd = cmd</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Generate results and print them. (see ERB#result)</div><div class='del'>-  def run(b=TOPLEVEL_BINDING)</div><div class='del'>-    print self.result(b)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Executes the generated ERB code to produce a completed template, returning</div><div class='del'>-  # the results of that code.  (See ERB#new for details on how this process can</div><div class='del'>-  # be affected by _safe_level_.)</div><div class='del'>-  # </div><div class='del'>-  # _b_ accepts a Binding or Proc object which is used to set the context of</div><div class='del'>-  # code evaluation.</div><div class='del'>-  #</div><div class='del'>-  def result(b=TOPLEVEL_BINDING)</div><div class='del'>-    if @safe_level</div><div class='del'>-      proc { </div><div class='del'>-	$SAFE = @safe_level</div><div class='del'>-	eval(@src, b, (@filename || '(erb)'), 1)</div><div class='del'>-      }.call</div><div class='del'>-    else</div><div class='del'>-      eval(@src, b, (@filename || '(erb)'), 1)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Define _methodname_ as instance method of _mod_ from compiled ruby source.</div><div class='del'>-  #</div><div class='del'>-  # example:</div><div class='del'>-  #   filename = 'example.rhtml'   # 'arg1' and 'arg2' are used in example.rhtml</div><div class='del'>-  #   erb = ERB.new(File.read(filename))</div><div class='del'>-  #   erb.def_method(MyClass, 'render(arg1, arg2)', filename)</div><div class='del'>-  #   print MyClass.new.render('foo', 123)</div><div class='del'>-  def def_method(mod, methodname, fname='(ERB)')</div><div class='del'>-    mod.module_eval("def #{methodname}\n" + self.src + "\nend\n", fname, 0)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Create unnamed module, define _methodname_ as instance method of it, and return it.</div><div class='del'>-  #</div><div class='del'>-  # example:</div><div class='del'>-  #   filename = 'example.rhtml'   # 'arg1' and 'arg2' are used in example.rhtml</div><div class='del'>-  #   erb = ERB.new(File.read(filename))</div><div class='del'>-  #   erb.filename = filename</div><div class='del'>-  #   MyModule = erb.def_module('render(arg1, arg2)')</div><div class='del'>-  #   class MyClass</div><div class='del'>-  #     include MyModule</div><div class='del'>-  #   end</div><div class='del'>-  def def_module(methodname='erb')</div><div class='del'>-    mod = Module.new</div><div class='del'>-    def_method(mod, methodname, @filename || '(ERB)')</div><div class='del'>-    mod</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Define unnamed class which has _methodname_ as instance method, and return it.</div><div class='del'>-  #</div><div class='del'>-  # example:</div><div class='del'>-  #   class MyClass_</div><div class='del'>-  #     def initialize(arg1, arg2)</div><div class='del'>-  #       @arg1 = arg1;  @arg2 = arg2</div><div class='del'>-  #     end</div><div class='del'>-  #   end</div><div class='del'>-  #   filename = 'example.rhtml'  # @arg1 and @arg2 are used in example.rhtml</div><div class='del'>-  #   erb = ERB.new(File.read(filename))</div><div class='del'>-  #   erb.filename = filename</div><div class='del'>-  #   MyClass = erb.def_class(MyClass_, 'render()')</div><div class='del'>-  #   print MyClass.new('foo', 123).render()</div><div class='del'>-  def def_class(superklass=Object, methodname='result')</div><div class='del'>-    cls = Class.new(superklass)</div><div class='del'>-    def_method(cls, methodname, @filename || '(ERB)')</div><div class='del'>-    cls</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#--</div><div class='del'>-# ERB::Util</div><div class='del'>-class ERB</div><div class='del'>-  # A utility module for conversion routines, often handy in HTML generation.</div><div class='del'>-  module Util</div><div class='del'>-    public</div><div class='del'>-    #</div><div class='del'>-    # A utility method for escaping HTML tag characters in _s_.</div><div class='del'>-    # </div><div class='del'>-    # 	require "erb"</div><div class='del'>-    # 	include ERB::Util</div><div class='del'>-    # 	</div><div class='del'>-    # 	puts html_escape("is a &gt; 0 &amp; a &lt; 10?")</div><div class='del'>-    # </div><div class='del'>-    # _Generates_</div><div class='del'>-    # </div><div class='del'>-    # 	is a &amp;gt; 0 &amp;amp; a &amp;lt; 10?</div><div class='del'>-    #</div><div class='del'>-    def html_escape(s)</div><div class='del'>-      s.to_s.gsub(/&amp;/, "&amp;amp;").gsub(/\"/, "&amp;quot;").gsub(/&gt;/, "&amp;gt;").gsub(/&lt;/, "&amp;lt;")</div><div class='del'>-    end</div><div class='del'>-    alias h html_escape</div><div class='del'>-    module_function :h</div><div class='del'>-    module_function :html_escape</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # A utility method for encoding the String _s_ as a URL.</div><div class='del'>-    # </div><div class='del'>-    # 	require "erb"</div><div class='del'>-    # 	include ERB::Util</div><div class='del'>-    # 	</div><div class='del'>-    # 	puts url_encode("Programming Ruby:  The Pragmatic Programmer's Guide")</div><div class='del'>-    # </div><div class='del'>-    # _Generates_</div><div class='del'>-    # </div><div class='del'>-    # 	Programming%20Ruby%3A%20%20The%20Pragmatic%20Programmer%27s%20Guide</div><div class='del'>-    #</div><div class='del'>-    def url_encode(s)</div><div class='del'>-      s.to_s.gsub(/[^a-zA-Z0-9_\-.]/n){ sprintf("%%%02X", $&amp;.unpack("C")[0]) }</div><div class='del'>-    end</div><div class='del'>-    alias u url_encode</div><div class='del'>-    module_function :u</div><div class='del'>-    module_function :url_encode</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#--</div><div class='del'>-# ERB::DefMethod</div><div class='del'>-class ERB</div><div class='del'>-  # Utility module to define eRuby script as instance method.</div><div class='del'>-  #</div><div class='del'>-  # === Example</div><div class='del'>-  #</div><div class='del'>-  # example.rhtml:</div><div class='del'>-  #   &lt;% for item in @items %&gt;</div><div class='del'>-  #   &lt;b&gt;&lt;%= item %&gt;&lt;/b&gt;</div><div class='del'>-  #   &lt;% end %&gt;</div><div class='del'>-  #</div><div class='del'>-  # example.rb:</div><div class='del'>-  #   require 'erb'</div><div class='del'>-  #   class MyClass</div><div class='del'>-  #     extend ERB::DefMethod</div><div class='del'>-  #     def_erb_method('render()', 'example.rhtml')</div><div class='del'>-  #     def initialize(items)</div><div class='del'>-  #       @items = items</div><div class='del'>-  #     end</div><div class='del'>-  #   end</div><div class='del'>-  #   print MyClass.new([10,20,30]).render()</div><div class='del'>-  #</div><div class='del'>-  # result:</div><div class='del'>-  #</div><div class='del'>-  #   &lt;b&gt;10&lt;/b&gt;</div><div class='del'>-  #</div><div class='del'>-  #   &lt;b&gt;20&lt;/b&gt;</div><div class='del'>-  #</div><div class='del'>-  #   &lt;b&gt;30&lt;/b&gt;</div><div class='del'>-  #</div><div class='del'>-  module DefMethod</div><div class='del'>-    public</div><div class='del'>-  # define _methodname_ as instance method of current module, using ERB object or eRuby file</div><div class='del'>-    def def_erb_method(methodname, erb_or_fname)</div><div class='del'>-      if erb_or_fname.kind_of? String</div><div class='del'>-        fname = erb_or_fname</div><div class='del'>-        erb = ERB.new(File.read(fname))</div><div class='del'>-        erb.def_method(self, methodname, fname)</div><div class='del'>-      else</div><div class='del'>-        erb = erb_or_fname</div><div class='del'>-        erb.def_method(self, methodname, erb.filename || '(ERB)')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    module_function :def_erb_method</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/eregex.rb b/lib/eregex.rb<br/>deleted file mode 100644<br/>index cc7a7f6f46..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/eregex.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/eregex.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,37 +0,0 @@</div><div class='del'>-# this is just a proof of concept toy.</div><div class='del'>-</div><div class='del'>-class RegOr</div><div class='del'>-  def initialize(re1, re2)</div><div class='del'>-    @re1 = re1</div><div class='del'>-    @re2 = re2</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def =~ (str)</div><div class='del'>-    @re1 =~ str or @re2 =~ str</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class RegAnd</div><div class='del'>-  def initialize(re1, re2)</div><div class='del'>-    @re1 = re1</div><div class='del'>-    @re2 = re2</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def =~ (str)</div><div class='del'>-    @re1 =~ str and @re2 =~ str</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Regexp</div><div class='del'>-  def |(other)</div><div class='del'>-    RegOr.new(self, other)</div><div class='del'>-  end</div><div class='del'>-  def &amp;(other)</div><div class='del'>-    RegAnd.new(self, other)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  p "abc" =~ /b/|/c/</div><div class='del'>-  p "abc" =~ /b/&amp;/c/</div><div class='del'>-end</div><div class='head'>diff --git a/lib/fileutils.rb b/lib/fileutils.rb<br/>deleted file mode 100644<br/>index 3fdb6cbfe6..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/fileutils.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/fileutils.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1591 +0,0 @@</div><div class='del'>-# </div><div class='del'>-# = fileutils.rb</div><div class='del'>-# </div><div class='del'>-# Copyright (c) 2000-2006 Minero Aoki</div><div class='del'>-# </div><div class='del'>-# This program is free software.</div><div class='del'>-# You can distribute/modify this program under the same terms of ruby.</div><div class='del'>-# </div><div class='del'>-# == module FileUtils</div><div class='del'>-# </div><div class='del'>-# Namespace for several file utility methods for copying, moving, removing, etc.</div><div class='del'>-# </div><div class='del'>-# === Module Functions</div><div class='del'>-# </div><div class='del'>-#   cd(dir, options)</div><div class='del'>-#   cd(dir, options) {|dir| .... }</div><div class='del'>-#   pwd()</div><div class='del'>-#   mkdir(dir, options)</div><div class='del'>-#   mkdir(list, options)</div><div class='del'>-#   mkdir_p(dir, options)</div><div class='del'>-#   mkdir_p(list, options)</div><div class='del'>-#   rmdir(dir, options)</div><div class='del'>-#   rmdir(list, options)</div><div class='del'>-#   ln(old, new, options)</div><div class='del'>-#   ln(list, destdir, options)</div><div class='del'>-#   ln_s(old, new, options)</div><div class='del'>-#   ln_s(list, destdir, options)</div><div class='del'>-#   ln_sf(src, dest, options)</div><div class='del'>-#   cp(src, dest, options)</div><div class='del'>-#   cp(list, dir, options)</div><div class='del'>-#   cp_r(src, dest, options)</div><div class='del'>-#   cp_r(list, dir, options)</div><div class='del'>-#   mv(src, dest, options)</div><div class='del'>-#   mv(list, dir, options)</div><div class='del'>-#   rm(list, options)</div><div class='del'>-#   rm_r(list, options)</div><div class='del'>-#   rm_rf(list, options)</div><div class='del'>-#   install(src, dest, mode = &lt;src's&gt;, options)</div><div class='del'>-#   chmod(mode, list, options)</div><div class='del'>-#   chmod_R(mode, list, options)</div><div class='del'>-#   chown(user, group, list, options)</div><div class='del'>-#   chown_R(user, group, list, options)</div><div class='del'>-#   touch(list, options)</div><div class='del'>-#</div><div class='del'>-# The &lt;tt&gt;options&lt;/tt&gt; parameter is a hash of options, taken from the list</div><div class='del'>-# &lt;tt&gt;:force&lt;/tt&gt;, &lt;tt&gt;:noop&lt;/tt&gt;, &lt;tt&gt;:preserve&lt;/tt&gt;, and &lt;tt&gt;:verbose&lt;/tt&gt;.</div><div class='del'>-# &lt;tt&gt;:noop&lt;/tt&gt; means that no changes are made.  The other two are obvious.</div><div class='del'>-# Each method documents the options that it honours.</div><div class='del'>-#</div><div class='del'>-# All methods that have the concept of a "source" file or directory can take</div><div class='del'>-# either one file or a list of files in that argument.  See the method</div><div class='del'>-# documentation for examples.</div><div class='del'>-#</div><div class='del'>-# There are some `low level' methods, which do not accept any option:</div><div class='del'>-#</div><div class='del'>-#   copy_entry(src, dest, preserve = false, dereference = false)</div><div class='del'>-#   copy_file(src, dest, preserve = false, dereference = true)</div><div class='del'>-#   copy_stream(srcstream, deststream)</div><div class='del'>-#   remove_entry(path, force = false)</div><div class='del'>-#   remove_entry_secure(path, force = false)</div><div class='del'>-#   remove_file(path, force = false)</div><div class='del'>-#   compare_file(path_a, path_b)</div><div class='del'>-#   compare_stream(stream_a, stream_b)</div><div class='del'>-#   uptodate?(file, cmp_list)</div><div class='del'>-#</div><div class='del'>-# == module FileUtils::Verbose</div><div class='del'>-# </div><div class='del'>-# This module has all methods of FileUtils module, but it outputs messages</div><div class='del'>-# before acting.  This equates to passing the &lt;tt&gt;:verbose&lt;/tt&gt; flag to methods</div><div class='del'>-# in FileUtils.</div><div class='del'>-# </div><div class='del'>-# == module FileUtils::NoWrite</div><div class='del'>-# </div><div class='del'>-# This module has all methods of FileUtils module, but never changes</div><div class='del'>-# files/directories.  This equates to passing the &lt;tt&gt;:noop&lt;/tt&gt; flag to methods</div><div class='del'>-# in FileUtils.</div><div class='del'>-# </div><div class='del'>-# == module FileUtils::DryRun</div><div class='del'>-# </div><div class='del'>-# This module has all methods of FileUtils module, but never changes</div><div class='del'>-# files/directories.  This equates to passing the &lt;tt&gt;:noop&lt;/tt&gt; and</div><div class='del'>-# &lt;tt&gt;:verbose&lt;/tt&gt; flags to methods in FileUtils.</div><div class='del'>-# </div><div class='del'>-</div><div class='del'>-module FileUtils</div><div class='del'>-</div><div class='del'>-  def self.private_module_function(name)   #:nodoc:</div><div class='del'>-    module_function name</div><div class='del'>-    private_class_method name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This hash table holds command options.</div><div class='del'>-  OPT_TABLE = {}   #:nodoc: internal use only</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: (none)</div><div class='del'>-  #</div><div class='del'>-  # Returns the name of the current directory.</div><div class='del'>-  #</div><div class='del'>-  def pwd</div><div class='del'>-    Dir.pwd</div><div class='del'>-  end</div><div class='del'>-  module_function :pwd</div><div class='del'>-</div><div class='del'>-  alias getwd pwd</div><div class='del'>-  module_function :getwd</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: verbose</div><div class='del'>-  # </div><div class='del'>-  # Changes the current directory to the directory +dir+.</div><div class='del'>-  # </div><div class='del'>-  # If this method is called with block, resumes to the old</div><div class='del'>-  # working directory after the block execution finished.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.cd('/', :verbose =&gt; true)   # chdir and report it</div><div class='del'>-  # </div><div class='del'>-  def cd(dir, options = {}, &amp;block) # :yield: dir</div><div class='del'>-    fu_check_options options, OPT_TABLE['cd']</div><div class='del'>-    fu_output_message "cd #{dir}" if options[:verbose]</div><div class='del'>-    Dir.chdir(dir, &amp;block)</div><div class='del'>-    fu_output_message 'cd -' if options[:verbose] and block</div><div class='del'>-  end</div><div class='del'>-  module_function :cd</div><div class='del'>-</div><div class='del'>-  alias chdir cd</div><div class='del'>-  module_function :chdir</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['cd']    =</div><div class='del'>-  OPT_TABLE['chdir'] = [:verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: (none)</div><div class='del'>-  # </div><div class='del'>-  # Returns true if +newer+ is newer than all +old_list+.</div><div class='del'>-  # Non-existent files are older than any file.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.uptodate?('hello.o', %w(hello.c hello.h)) or \</div><div class='del'>-  #       system 'make hello.o'</div><div class='del'>-  # </div><div class='del'>-  def uptodate?(new, old_list, options = nil)</div><div class='del'>-    raise ArgumentError, 'uptodate? does not accept any option' if options</div><div class='del'>-</div><div class='del'>-    return false unless File.exist?(new)</div><div class='del'>-    new_time = File.mtime(new)</div><div class='del'>-    old_list.each do |old|</div><div class='del'>-      if File.exist?(old)</div><div class='del'>-        return false unless new_time &gt; File.mtime(old)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-  module_function :uptodate?</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: mode noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Creates one or more directories.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.mkdir 'test'</div><div class='del'>-  #   FileUtils.mkdir %w( tmp data )</div><div class='del'>-  #   FileUtils.mkdir 'notexist', :noop =&gt; true  # Does not really create.</div><div class='del'>-  #   FileUtils.mkdir 'tmp', :mode =&gt; 0700</div><div class='del'>-  # </div><div class='del'>-  def mkdir(list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['mkdir']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message "mkdir #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-</div><div class='del'>-    list.each do |dir|</div><div class='del'>-      fu_mkdir dir, options[:mode]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :mkdir</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['mkdir'] = [:mode, :noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: mode noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Creates a directory and all its parent directories.</div><div class='del'>-  # For example,</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.mkdir_p '/usr/local/lib/ruby'</div><div class='del'>-  # </div><div class='del'>-  # causes to make following directories, if it does not exist.</div><div class='del'>-  #     * /usr</div><div class='del'>-  #     * /usr/local</div><div class='del'>-  #     * /usr/local/lib</div><div class='del'>-  #     * /usr/local/lib/ruby</div><div class='del'>-  #</div><div class='del'>-  # You can pass several directories at a time in a list.</div><div class='del'>-  # </div><div class='del'>-  def mkdir_p(list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['mkdir_p']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message "mkdir -p #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}" if options[:verbose]</div><div class='del'>-    return *list if options[:noop]</div><div class='del'>-</div><div class='del'>-    list.map {|path| path.sub(%r&lt;/\z&gt;, '') }.each do |path|</div><div class='del'>-      # optimize for the most common case</div><div class='del'>-      begin</div><div class='del'>-        fu_mkdir path, options[:mode]</div><div class='del'>-        next</div><div class='del'>-      rescue SystemCallError</div><div class='del'>-        next if File.directory?(path)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      stack = []</div><div class='del'>-      until path == stack.last   # dirname("/")=="/", dirname("C:/")=="C:/"</div><div class='del'>-        stack.push path</div><div class='del'>-        path = File.dirname(path)</div><div class='del'>-      end</div><div class='del'>-      stack.reverse_each do |path|</div><div class='del'>-        begin</div><div class='del'>-          fu_mkdir path, options[:mode]</div><div class='del'>-        rescue SystemCallError =&gt; err</div><div class='del'>-          raise unless File.directory?(path)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    return *list</div><div class='del'>-  end</div><div class='del'>-  module_function :mkdir_p</div><div class='del'>-</div><div class='del'>-  alias mkpath    mkdir_p</div><div class='del'>-  alias makedirs  mkdir_p</div><div class='del'>-  module_function :mkpath</div><div class='del'>-  module_function :makedirs</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['mkdir_p']  =</div><div class='del'>-  OPT_TABLE['mkpath']   =</div><div class='del'>-  OPT_TABLE['makedirs'] = [:mode, :noop, :verbose]</div><div class='del'>-</div><div class='del'>-  def fu_mkdir(path, mode)   #:nodoc:</div><div class='del'>-    path = path.sub(%r&lt;/\z&gt;, '')</div><div class='del'>-    if mode</div><div class='del'>-      Dir.mkdir path, mode</div><div class='del'>-      File.chmod mode, path</div><div class='del'>-    else</div><div class='del'>-      Dir.mkdir path</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_mkdir</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop, verbose</div><div class='del'>-  # </div><div class='del'>-  # Removes one or more directories.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.rmdir 'somedir'</div><div class='del'>-  #   FileUtils.rmdir %w(somedir anydir otherdir)</div><div class='del'>-  #   # Does not really remove directory; outputs message.</div><div class='del'>-  #   FileUtils.rmdir 'somedir', :verbose =&gt; true, :noop =&gt; true</div><div class='del'>-  # </div><div class='del'>-  def rmdir(list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['rmdir']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message "rmdir #{list.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    list.each do |dir|</div><div class='del'>-      Dir.rmdir dir.sub(%r&lt;/\z&gt;, '')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :rmdir</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['rmdir'] = [:noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: force noop verbose</div><div class='del'>-  #</div><div class='del'>-  # &lt;b&gt;&lt;tt&gt;ln(old, new, options = {})&lt;/tt&gt;&lt;/b&gt;</div><div class='del'>-  #</div><div class='del'>-  # Creates a hard link +new+ which points to +old+.</div><div class='del'>-  # If +new+ already exists and it is a directory, creates a link +new/old+.</div><div class='del'>-  # If +new+ already exists and it is not a directory, raises Errno::EEXIST.</div><div class='del'>-  # But if :force option is set, overwrite +new+.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.ln 'gcc', 'cc', :verbose =&gt; true</div><div class='del'>-  #   FileUtils.ln '/usr/bin/emacs21', '/usr/bin/emacs'</div><div class='del'>-  # </div><div class='del'>-  # &lt;b&gt;&lt;tt&gt;ln(list, destdir, options = {})&lt;/tt&gt;&lt;/b&gt;</div><div class='del'>-  # </div><div class='del'>-  # Creates several hard links in a directory, with each one pointing to the</div><div class='del'>-  # item in +list+.  If +destdir+ is not a directory, raises Errno::ENOTDIR.</div><div class='del'>-  # </div><div class='del'>-  #   include FileUtils</div><div class='del'>-  #   cd '/sbin'</div><div class='del'>-  #   FileUtils.ln %w(cp mv mkdir), '/bin'   # Now /sbin/cp and /bin/cp are linked.</div><div class='del'>-  # </div><div class='del'>-  def ln(src, dest, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['ln']</div><div class='del'>-    fu_output_message "ln#{options[:force] ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    fu_each_src_dest0(src, dest) do |s,d|</div><div class='del'>-      remove_file d, true if options[:force]</div><div class='del'>-      File.link s, d</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :ln</div><div class='del'>-</div><div class='del'>-  alias link ln</div><div class='del'>-  module_function :link</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['ln']   =</div><div class='del'>-  OPT_TABLE['link'] = [:force, :noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: force noop verbose</div><div class='del'>-  #</div><div class='del'>-  # &lt;b&gt;&lt;tt&gt;ln_s(old, new, options = {})&lt;/tt&gt;&lt;/b&gt;</div><div class='del'>-  # </div><div class='del'>-  # Creates a symbolic link +new+ which points to +old+.  If +new+ already</div><div class='del'>-  # exists and it is a directory, creates a symbolic link +new/old+.  If +new+</div><div class='del'>-  # already exists and it is not a directory, raises Errno::EEXIST.  But if</div><div class='del'>-  # :force option is set, overwrite +new+.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.ln_s '/usr/bin/ruby', '/usr/local/bin/ruby'</div><div class='del'>-  #   FileUtils.ln_s 'verylongsourcefilename.c', 'c', :force =&gt; true</div><div class='del'>-  # </div><div class='del'>-  # &lt;b&gt;&lt;tt&gt;ln_s(list, destdir, options = {})&lt;/tt&gt;&lt;/b&gt;</div><div class='del'>-  # </div><div class='del'>-  # Creates several symbolic links in a directory, with each one pointing to the</div><div class='del'>-  # item in +list+.  If +destdir+ is not a directory, raises Errno::ENOTDIR.</div><div class='del'>-  #</div><div class='del'>-  # If +destdir+ is not a directory, raises Errno::ENOTDIR.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.ln_s Dir.glob('bin/*.rb'), '/home/aamine/bin'</div><div class='del'>-  # </div><div class='del'>-  def ln_s(src, dest, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['ln_s']</div><div class='del'>-    fu_output_message "ln -s#{options[:force] ? 'f' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    fu_each_src_dest0(src, dest) do |s,d|</div><div class='del'>-      remove_file d, true if options[:force]</div><div class='del'>-      File.symlink s, d</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :ln_s</div><div class='del'>-</div><div class='del'>-  alias symlink ln_s</div><div class='del'>-  module_function :symlink</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['ln_s']    =</div><div class='del'>-  OPT_TABLE['symlink'] = [:force, :noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Same as</div><div class='del'>-  #   #ln_s(src, dest, :force)</div><div class='del'>-  # </div><div class='del'>-  def ln_sf(src, dest, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['ln_sf']</div><div class='del'>-    options = options.dup</div><div class='del'>-    options[:force] = true</div><div class='del'>-    ln_s src, dest, options</div><div class='del'>-  end</div><div class='del'>-  module_function :ln_sf</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['ln_sf'] = [:noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: preserve noop verbose</div><div class='del'>-  #</div><div class='del'>-  # Copies a file content +src+ to +dest+.  If +dest+ is a directory,</div><div class='del'>-  # copies +src+ to +dest/src+.</div><div class='del'>-  #</div><div class='del'>-  # If +src+ is a list of files, then +dest+ must be a directory.</div><div class='del'>-  #</div><div class='del'>-  #   FileUtils.cp 'eval.c', 'eval.c.org'</div><div class='del'>-  #   FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'</div><div class='del'>-  #   FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', :verbose =&gt; true</div><div class='del'>-  #   FileUtils.cp 'symlink', 'dest'   # copy content, "dest" is not a symlink</div><div class='del'>-  # </div><div class='del'>-  def cp(src, dest, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['cp']</div><div class='del'>-    fu_output_message "cp#{options[:preserve] ? ' -p' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    fu_each_src_dest(src, dest) do |s, d|</div><div class='del'>-      copy_file s, d, options[:preserve]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :cp</div><div class='del'>-</div><div class='del'>-  alias copy cp</div><div class='del'>-  module_function :copy</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['cp']   =</div><div class='del'>-  OPT_TABLE['copy'] = [:preserve, :noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: preserve noop verbose dereference_root remove_destination</div><div class='del'>-  # </div><div class='del'>-  # Copies +src+ to +dest+. If +src+ is a directory, this method copies</div><div class='del'>-  # all its contents recursively. If +dest+ is a directory, copies</div><div class='del'>-  # +src+ to +dest/src+.</div><div class='del'>-  #</div><div class='del'>-  # +src+ can be a list of files.</div><div class='del'>-  # </div><div class='del'>-  #   # Installing ruby library "mylib" under the site_ruby</div><div class='del'>-  #   FileUtils.rm_r site_ruby + '/mylib', :force</div><div class='del'>-  #   FileUtils.cp_r 'lib/', site_ruby + '/mylib'</div><div class='del'>-  # </div><div class='del'>-  #   # Examples of copying several files to target directory.</div><div class='del'>-  #   FileUtils.cp_r %w(mail.rb field.rb debug/), site_ruby + '/tmail'</div><div class='del'>-  #   FileUtils.cp_r Dir.glob('*.rb'), '/home/aamine/lib/ruby', :noop =&gt; true, :verbose =&gt; true</div><div class='del'>-  #</div><div class='del'>-  #   # If you want to copy all contents of a directory instead of the</div><div class='del'>-  #   # directory itself, c.f. src/x -&gt; dest/x, src/y -&gt; dest/y,</div><div class='del'>-  #   # use following code.</div><div class='del'>-  #   FileUtils.cp_r 'src/.', 'dest'     # cp_r('src', 'dest') makes src/dest,</div><div class='del'>-  #                                      # but this doesn't.</div><div class='del'>-  # </div><div class='del'>-  def cp_r(src, dest, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['cp_r']</div><div class='del'>-    fu_output_message "cp -r#{options[:preserve] ? 'p' : ''}#{options[:remove_destination] ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    options[:dereference_root] = true unless options.key?(:dereference_root)</div><div class='del'>-    fu_each_src_dest(src, dest) do |s, d|</div><div class='del'>-      copy_entry s, d, options[:preserve], options[:dereference_root], options[:remove_destination]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :cp_r</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['cp_r'] = [:preserve, :noop, :verbose,</div><div class='del'>-                       :dereference_root, :remove_destination]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Copies a file system entry +src+ to +dest+.</div><div class='del'>-  # If +src+ is a directory, this method copies its contents recursively.</div><div class='del'>-  # This method preserves file types, c.f. symlink, directory...</div><div class='del'>-  # (FIFO, device files and etc. are not supported yet)</div><div class='del'>-  #</div><div class='del'>-  # Both of +src+ and +dest+ must be a path name.</div><div class='del'>-  # +src+ must exist, +dest+ must not exist.</div><div class='del'>-  #</div><div class='del'>-  # If +preserve+ is true, this method preserves owner, group, permissions</div><div class='del'>-  # and modified time.</div><div class='del'>-  #</div><div class='del'>-  # If +dereference_root+ is true, this method dereference tree root.</div><div class='del'>-  #</div><div class='del'>-  # If +remove_destination+ is true, this method removes each destination file before copy.</div><div class='del'>-  #</div><div class='del'>-  def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)</div><div class='del'>-    Entry_.new(src, nil, dereference_root).traverse do |ent|</div><div class='del'>-      destent = Entry_.new(dest, ent.rel, false)</div><div class='del'>-      File.unlink destent.path if remove_destination &amp;&amp; File.file?(destent.path)</div><div class='del'>-      ent.copy destent.path</div><div class='del'>-      ent.copy_metadata destent.path if preserve</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :copy_entry</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Copies file contents of +src+ to +dest+.</div><div class='del'>-  # Both of +src+ and +dest+ must be a path name.</div><div class='del'>-  #</div><div class='del'>-  def copy_file(src, dest, preserve = false, dereference = true)</div><div class='del'>-    ent = Entry_.new(src, nil, dereference)</div><div class='del'>-    ent.copy_file dest</div><div class='del'>-    ent.copy_metadata dest if preserve</div><div class='del'>-  end</div><div class='del'>-  module_function :copy_file</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Copies stream +src+ to +dest+.</div><div class='del'>-  # +src+ must respond to #read(n) and</div><div class='del'>-  # +dest+ must respond to #write(str).</div><div class='del'>-  #</div><div class='del'>-  def copy_stream(src, dest)</div><div class='del'>-    fu_copy_stream0 src, dest, fu_stream_blksize(src, dest)</div><div class='del'>-  end</div><div class='del'>-  module_function :copy_stream</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: force noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Moves file(s) +src+ to +dest+.  If +file+ and +dest+ exist on the different</div><div class='del'>-  # disk partition, the file is copied instead.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.mv 'badname.rb', 'goodname.rb'</div><div class='del'>-  #   FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', :force =&gt; true  # no error</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.mv %w(junk.txt dust.txt), '/home/aamine/.trash/'</div><div class='del'>-  #   FileUtils.mv Dir.glob('test*.rb'), 'test', :noop =&gt; true, :verbose =&gt; true</div><div class='del'>-  # </div><div class='del'>-  def mv(src, dest, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['mv']</div><div class='del'>-    fu_output_message "mv#{options[:force] ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    fu_each_src_dest(src, dest) do |s, d|</div><div class='del'>-      destent = Entry_.new(d, nil, true)</div><div class='del'>-      begin</div><div class='del'>-        if destent.exist?</div><div class='del'>-          if destent.directory?</div><div class='del'>-            raise Errno::EEXIST, dest</div><div class='del'>-          else</div><div class='del'>-            destent.remove_file if rename_cannot_overwrite_file?</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          File.rename s, d</div><div class='del'>-        rescue Errno::EXDEV</div><div class='del'>-          copy_entry s, d, true</div><div class='del'>-          if options[:secure]</div><div class='del'>-            remove_entry_secure s, options[:force]</div><div class='del'>-          else</div><div class='del'>-            remove_entry s, options[:force]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      rescue SystemCallError</div><div class='del'>-        raise unless options[:force]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :mv</div><div class='del'>-</div><div class='del'>-  alias move mv</div><div class='del'>-  module_function :move</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['mv']   =</div><div class='del'>-  OPT_TABLE['move'] = [:force, :noop, :verbose, :secure]</div><div class='del'>-</div><div class='del'>-  def rename_cannot_overwrite_file?   #:nodoc:</div><div class='del'>-    /djgpp|cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM</div><div class='del'>-  end</div><div class='del'>-  private_module_function :rename_cannot_overwrite_file?</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: force noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Remove file(s) specified in +list+.  This method cannot remove directories.</div><div class='del'>-  # All StandardErrors are ignored when the :force option is set.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.rm %w( junk.txt dust.txt )</div><div class='del'>-  #   FileUtils.rm Dir.glob('*.so')</div><div class='del'>-  #   FileUtils.rm 'NotExistFile', :force =&gt; true   # never raises exception</div><div class='del'>-  # </div><div class='del'>-  def rm(list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['rm']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message "rm#{options[:force] ? ' -f' : ''} #{list.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-</div><div class='del'>-    list.each do |path|</div><div class='del'>-      remove_file path, options[:force]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :rm</div><div class='del'>-</div><div class='del'>-  alias remove rm</div><div class='del'>-  module_function :remove</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['rm']     =</div><div class='del'>-  OPT_TABLE['remove'] = [:force, :noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Equivalent to</div><div class='del'>-  #</div><div class='del'>-  #   #rm(list, :force =&gt; true)</div><div class='del'>-  #</div><div class='del'>-  def rm_f(list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['rm_f']</div><div class='del'>-    options = options.dup</div><div class='del'>-    options[:force] = true</div><div class='del'>-    rm list, options</div><div class='del'>-  end</div><div class='del'>-  module_function :rm_f</div><div class='del'>-</div><div class='del'>-  alias safe_unlink rm_f</div><div class='del'>-  module_function :safe_unlink</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['rm_f']        =</div><div class='del'>-  OPT_TABLE['safe_unlink'] = [:noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: force noop verbose secure</div><div class='del'>-  # </div><div class='del'>-  # remove files +list+[0] +list+[1]... If +list+[n] is a directory,</div><div class='del'>-  # removes its all contents recursively. This method ignores</div><div class='del'>-  # StandardError when :force option is set.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.rm_r Dir.glob('/tmp/*')</div><div class='del'>-  #   FileUtils.rm_r '/', :force =&gt; true          #  :-)</div><div class='del'>-  #</div><div class='del'>-  # WARNING: This method causes local vulnerability</div><div class='del'>-  # if one of parent directories or removing directory tree are world</div><div class='del'>-  # writable (including /tmp, whose permission is 1777), and the current</div><div class='del'>-  # process has strong privilege such as Unix super user (root), and the</div><div class='del'>-  # system has symbolic link.  For secure removing, read the documentation</div><div class='del'>-  # of #remove_entry_secure carefully, and set :secure option to true.</div><div class='del'>-  # Default is :secure=&gt;false.</div><div class='del'>-  #</div><div class='del'>-  # NOTE: This method calls #remove_entry_secure if :secure option is set.</div><div class='del'>-  # See also #remove_entry_secure.</div><div class='del'>-  # </div><div class='del'>-  def rm_r(list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['rm_r']</div><div class='del'>-    # options[:secure] = true unless options.key?(:secure)</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message "rm -r#{options[:force] ? 'f' : ''} #{list.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    list.each do |path|</div><div class='del'>-      if options[:secure]</div><div class='del'>-        remove_entry_secure path, options[:force]</div><div class='del'>-      else</div><div class='del'>-        remove_entry path, options[:force]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :rm_r</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['rm_r'] = [:force, :noop, :verbose, :secure]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop verbose secure</div><div class='del'>-  # </div><div class='del'>-  # Equivalent to</div><div class='del'>-  #</div><div class='del'>-  #   #rm_r(list, :force =&gt; true)</div><div class='del'>-  #</div><div class='del'>-  # WARNING: This method causes local vulnerability.</div><div class='del'>-  # Read the documentation of #rm_r first.</div><div class='del'>-  # </div><div class='del'>-  def rm_rf(list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['rm_rf']</div><div class='del'>-    options = options.dup</div><div class='del'>-    options[:force] = true</div><div class='del'>-    rm_r list, options</div><div class='del'>-  end</div><div class='del'>-  module_function :rm_rf</div><div class='del'>-</div><div class='del'>-  alias rmtree rm_rf</div><div class='del'>-  module_function :rmtree</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['rm_rf']  =</div><div class='del'>-  OPT_TABLE['rmtree'] = [:noop, :verbose, :secure]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This method removes a file system entry +path+.  +path+ shall be a</div><div class='del'>-  # regular file, a directory, or something.  If +path+ is a directory,</div><div class='del'>-  # remove it recursively.  This method is required to avoid TOCTTOU</div><div class='del'>-  # (time-of-check-to-time-of-use) local security vulnerability of #rm_r.</div><div class='del'>-  # #rm_r causes security hole when:</div><div class='del'>-  #</div><div class='del'>-  #   * Parent directory is world writable (including /tmp).</div><div class='del'>-  #   * Removing directory tree includes world writable directory.</div><div class='del'>-  #   * The system has symbolic link.</div><div class='del'>-  #</div><div class='del'>-  # To avoid this security hole, this method applies special preprocess.</div><div class='del'>-  # If +path+ is a directory, this method chown(2) and chmod(2) all</div><div class='del'>-  # removing directories.  This requires the current process is the</div><div class='del'>-  # owner of the removing whole directory tree, or is the super user (root).</div><div class='del'>-  #</div><div class='del'>-  # WARNING: You must ensure that *ALL* parent directories are not</div><div class='del'>-  # world writable.  Otherwise this method does not work.</div><div class='del'>-  # Only exception is temporary directory like /tmp and /var/tmp,</div><div class='del'>-  # whose permission is 1777.</div><div class='del'>-  #</div><div class='del'>-  # WARNING: Only the owner of the removing directory tree, or Unix super</div><div class='del'>-  # user (root) should invoke this method.  Otherwise this method does not</div><div class='del'>-  # work.</div><div class='del'>-  #</div><div class='del'>-  # For details of this security vulnerability, see Perl's case:</div><div class='del'>-  #</div><div class='del'>-  #   http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0448</div><div class='del'>-  #   http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452</div><div class='del'>-  #</div><div class='del'>-  # For fileutils.rb, this vulnerability is reported in [ruby-dev:26100].</div><div class='del'>-  #</div><div class='del'>-  def remove_entry_secure(path, force = false)</div><div class='del'>-    unless fu_have_symlink?</div><div class='del'>-      remove_entry path, force</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-    fullpath = File.expand_path(path)</div><div class='del'>-    st = File.lstat(fullpath)</div><div class='del'>-    unless st.directory?</div><div class='del'>-      File.unlink fullpath</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-    # is a directory.</div><div class='del'>-    parent_st = File.stat(File.dirname(fullpath))</div><div class='del'>-    unless fu_world_writable?(parent_st)</div><div class='del'>-      remove_entry path, force</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-    unless parent_st.sticky?</div><div class='del'>-      raise ArgumentError, "parent directory is world writable, FileUtils#remove_entry_secure does not work; abort: #{path.inspect} (parent directory mode #{'%o' % parent_st.mode})"</div><div class='del'>-    end</div><div class='del'>-    # freeze tree root</div><div class='del'>-    euid = Process.euid</div><div class='del'>-    File.open(fullpath + '/.') {|f|</div><div class='del'>-      unless fu_stat_identical_entry?(st, f.stat)</div><div class='del'>-        # symlink (TOC-to-TOU attack?)</div><div class='del'>-        File.unlink fullpath</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      f.chown euid, -1</div><div class='del'>-      f.chmod 0700</div><div class='del'>-    }</div><div class='del'>-    # ---- tree root is frozen ----</div><div class='del'>-    root = Entry_.new(path)</div><div class='del'>-    root.preorder_traverse do |ent|</div><div class='del'>-      if ent.directory?</div><div class='del'>-        ent.chown euid, -1</div><div class='del'>-        ent.chmod 0700</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    root.postorder_traverse do |ent|</div><div class='del'>-      begin</div><div class='del'>-        ent.remove</div><div class='del'>-      rescue</div><div class='del'>-        raise unless force</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  rescue</div><div class='del'>-    raise unless force</div><div class='del'>-  end</div><div class='del'>-  module_function :remove_entry_secure</div><div class='del'>-</div><div class='del'>-  def fu_world_writable?(st)</div><div class='del'>-    (st.mode &amp; 0002) != 0</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_world_writable?</div><div class='del'>-</div><div class='del'>-  def fu_have_symlink?   #:nodoc</div><div class='del'>-    File.symlink nil, nil</div><div class='del'>-  rescue NotImplementedError</div><div class='del'>-    return false</div><div class='del'>-  rescue</div><div class='del'>-    return true</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_have_symlink?</div><div class='del'>-</div><div class='del'>-  def fu_stat_identical_entry?(a, b)   #:nodoc:</div><div class='del'>-    a.dev == b.dev and a.ino == b.ino</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_stat_identical_entry?</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This method removes a file system entry +path+.</div><div class='del'>-  # +path+ might be a regular file, a directory, or something.</div><div class='del'>-  # If +path+ is a directory, remove it recursively.</div><div class='del'>-  #</div><div class='del'>-  # See also #remove_entry_secure.</div><div class='del'>-  #</div><div class='del'>-  def remove_entry(path, force = false)</div><div class='del'>-    Entry_.new(path).postorder_traverse do |ent|</div><div class='del'>-      begin</div><div class='del'>-        ent.remove</div><div class='del'>-      rescue</div><div class='del'>-        raise unless force</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  rescue</div><div class='del'>-    raise unless force</div><div class='del'>-  end</div><div class='del'>-  module_function :remove_entry</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Removes a file +path+.</div><div class='del'>-  # This method ignores StandardError if +force+ is true.</div><div class='del'>-  #</div><div class='del'>-  def remove_file(path, force = false)</div><div class='del'>-    Entry_.new(path).remove_file</div><div class='del'>-  rescue</div><div class='del'>-    raise unless force</div><div class='del'>-  end</div><div class='del'>-  module_function :remove_file</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Removes a directory +dir+ and its contents recursively.</div><div class='del'>-  # This method ignores StandardError if +force+ is true.</div><div class='del'>-  #</div><div class='del'>-  def remove_dir(path, force = false)</div><div class='del'>-    remove_entry path, force   # FIXME?? check if it is a directory</div><div class='del'>-  end</div><div class='del'>-  module_function :remove_dir</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns true if the contents of a file A and a file B are identical.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.compare_file('somefile', 'somefile')  #=&gt; true</div><div class='del'>-  #   FileUtils.compare_file('/bin/cp', '/bin/mv')    #=&gt; maybe false</div><div class='del'>-  #</div><div class='del'>-  def compare_file(a, b)</div><div class='del'>-    return false unless File.size(a) == File.size(b)</div><div class='del'>-    File.open(a, 'rb') {|fa|</div><div class='del'>-      File.open(b, 'rb') {|fb|</div><div class='del'>-        return compare_stream(fa, fb)</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  module_function :compare_file</div><div class='del'>-</div><div class='del'>-  alias identical? compare_file</div><div class='del'>-  alias cmp compare_file</div><div class='del'>-  module_function :identical?</div><div class='del'>-  module_function :cmp</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns true if the contents of a stream +a+ and +b+ are identical.</div><div class='del'>-  #</div><div class='del'>-  def compare_stream(a, b)</div><div class='del'>-    bsize = fu_stream_blksize(a, b)</div><div class='del'>-    sa = sb = nil</div><div class='del'>-    while sa == sb</div><div class='del'>-      sa = a.read(bsize)</div><div class='del'>-      sb = b.read(bsize)</div><div class='del'>-      unless sa and sb</div><div class='del'>-        if sa.nil? and sb.nil?</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'>-    false</div><div class='del'>-  end</div><div class='del'>-  module_function :compare_stream</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: mode preserve noop verbose</div><div class='del'>-  # </div><div class='del'>-  # If +src+ is not same as +dest+, copies it and changes the permission</div><div class='del'>-  # mode to +mode+.  If +dest+ is a directory, destination is +dest+/+src+.</div><div class='del'>-  # This method removes destination before copy.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.install 'ruby', '/usr/local/bin/ruby', :mode =&gt; 0755, :verbose =&gt; true</div><div class='del'>-  #   FileUtils.install 'lib.rb', '/usr/local/lib/ruby/site_ruby', :verbose =&gt; true</div><div class='del'>-  # </div><div class='del'>-  def install(src, dest, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['install']</div><div class='del'>-    fu_output_message "install -c#{options[:preserve] &amp;&amp; ' -p'}#{options[:mode] ? (' -m 0%o' % options[:mode]) : ''} #{[src,dest].flatten.join ' '}" if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    fu_each_src_dest(src, dest) do |s, d|</div><div class='del'>-      unless File.exist?(d) and compare_file(s, d)</div><div class='del'>-        remove_file d, true</div><div class='del'>-        st = File.stat(s) if options[:preserve]</div><div class='del'>-        copy_file s, d</div><div class='del'>-        File.utime st.atime, st.mtime, d if options[:preserve]</div><div class='del'>-        File.chmod options[:mode], d if options[:mode]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :install</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['install'] = [:mode, :preserve, :noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Changes permission bits on the named files (in +list+) to the bit pattern</div><div class='del'>-  # represented by +mode+.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.chmod 0755, 'somecommand'</div><div class='del'>-  #   FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb)</div><div class='del'>-  #   FileUtils.chmod 0755, '/usr/bin/ruby', :verbose =&gt; true</div><div class='del'>-  # </div><div class='del'>-  def chmod(mode, list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['chmod']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message sprintf('chmod %o %s', mode, list.join(' ')) if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    list.each do |path|</div><div class='del'>-      Entry_.new(path).chmod mode</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :chmod</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['chmod'] = [:noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop verbose force</div><div class='del'>-  # </div><div class='del'>-  # Changes permission bits on the named files (in +list+)</div><div class='del'>-  # to the bit pattern represented by +mode+.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.chmod_R 0700, "/tmp/app.#{$$}"</div><div class='del'>-  # </div><div class='del'>-  def chmod_R(mode, list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['chmod_R']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message sprintf('chmod -R%s %o %s',</div><div class='del'>-                              (options[:force] ? 'f' : ''),</div><div class='del'>-                              mode, list.join(' ')) if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    list.each do |root|</div><div class='del'>-      Entry_.new(root).traverse do |ent|</div><div class='del'>-        begin</div><div class='del'>-          ent.chmod mode</div><div class='del'>-        rescue</div><div class='del'>-          raise unless options[:force]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :chmod_R</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['chmod_R'] = [:noop, :verbose, :force]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Changes owner and group on the named files (in +list+)</div><div class='del'>-  # to the user +user+ and the group +group+.  +user+ and +group+</div><div class='del'>-  # may be an ID (Integer/String) or a name (String).</div><div class='del'>-  # If +user+ or +group+ is nil, this method does not change</div><div class='del'>-  # the attribute.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.chown 'root', 'staff', '/usr/local/bin/ruby'</div><div class='del'>-  #   FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), :verbose =&gt; true</div><div class='del'>-  # </div><div class='del'>-  def chown(user, group, list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['chown']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message sprintf('chown %s%s',</div><div class='del'>-                              [user,group].compact.join(':') + ' ',</div><div class='del'>-                              list.join(' ')) if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    uid = fu_get_uid(user)</div><div class='del'>-    gid = fu_get_gid(group)</div><div class='del'>-    list.each do |path|</div><div class='del'>-      Entry_.new(path).chown uid, gid</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :chown</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['chown'] = [:noop, :verbose]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop verbose force</div><div class='del'>-  # </div><div class='del'>-  # Changes owner and group on the named files (in +list+)</div><div class='del'>-  # to the user +user+ and the group +group+ recursively.</div><div class='del'>-  # +user+ and +group+ may be an ID (Integer/String) or</div><div class='del'>-  # a name (String).  If +user+ or +group+ is nil, this</div><div class='del'>-  # method does not change the attribute.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.chown_R 'www', 'www', '/var/www/htdocs'</div><div class='del'>-  #   FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', :verbose =&gt; true</div><div class='del'>-  # </div><div class='del'>-  def chown_R(user, group, list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['chown_R']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    fu_output_message sprintf('chown -R%s %s%s',</div><div class='del'>-                              (options[:force] ? 'f' : ''),</div><div class='del'>-                              [user,group].compact.join(':') + ' ',</div><div class='del'>-                              list.join(' ')) if options[:verbose]</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    uid = fu_get_uid(user)</div><div class='del'>-    gid = fu_get_gid(group)</div><div class='del'>-    return unless uid or gid</div><div class='del'>-    list.each do |root|</div><div class='del'>-      Entry_.new(root).traverse do |ent|</div><div class='del'>-        begin</div><div class='del'>-          ent.chown uid, gid</div><div class='del'>-        rescue</div><div class='del'>-          raise unless options[:force]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :chown_R</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['chown_R'] = [:noop, :verbose, :force]</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    require 'etc'</div><div class='del'>-</div><div class='del'>-    def fu_get_uid(user)   #:nodoc:</div><div class='del'>-      return nil unless user</div><div class='del'>-      user = user.to_s</div><div class='del'>-      if /\A\d+\z/ =~ user</div><div class='del'>-      then user.to_i</div><div class='del'>-      else Etc.getpwnam(user).uid</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private_module_function :fu_get_uid</div><div class='del'>-</div><div class='del'>-    def fu_get_gid(group)   #:nodoc:</div><div class='del'>-      return nil unless group</div><div class='del'>-      if /\A\d+\z/ =~ group</div><div class='del'>-      then group.to_i</div><div class='del'>-      else Etc.getgrnam(group).gid</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private_module_function :fu_get_gid</div><div class='del'>-</div><div class='del'>-  rescue LoadError</div><div class='del'>-    # need Win32 support???</div><div class='del'>-</div><div class='del'>-    def fu_get_uid(user)   #:nodoc:</div><div class='del'>-      user    # FIXME</div><div class='del'>-    end</div><div class='del'>-    private_module_function :fu_get_uid</div><div class='del'>-</div><div class='del'>-    def fu_get_gid(group)   #:nodoc:</div><div class='del'>-      group   # FIXME</div><div class='del'>-    end</div><div class='del'>-    private_module_function :fu_get_gid</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Options: noop verbose</div><div class='del'>-  # </div><div class='del'>-  # Updates modification time (mtime) and access time (atime) of file(s) in</div><div class='del'>-  # +list+.  Files are created if they don't exist.</div><div class='del'>-  # </div><div class='del'>-  #   FileUtils.touch 'timestamp'</div><div class='del'>-  #   FileUtils.touch Dir.glob('*.c');  system 'make'</div><div class='del'>-  # </div><div class='del'>-  def touch(list, options = {})</div><div class='del'>-    fu_check_options options, OPT_TABLE['touch']</div><div class='del'>-    list = fu_list(list)</div><div class='del'>-    created = nocreate = options[:nocreate]</div><div class='del'>-    t = options[:mtime]</div><div class='del'>-    if options[:verbose]</div><div class='del'>-      fu_output_message "touch #{nocreate ? ' -c' : ''}#{t ? t.strftime(' -t %Y%m%d%H%M.%S') : ''}#{list.join ' '}"</div><div class='del'>-    end</div><div class='del'>-    return if options[:noop]</div><div class='del'>-    list.each do |path|</div><div class='del'>-      created = nocreate</div><div class='del'>-      begin</div><div class='del'>-        File.utime(t, t, path)</div><div class='del'>-      rescue Errno::ENOENT</div><div class='del'>-        raise if created</div><div class='del'>-        File.open(path, 'a') {</div><div class='del'>-          ;</div><div class='del'>-        }</div><div class='del'>-        created = true</div><div class='del'>-        retry if t</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :touch</div><div class='del'>-</div><div class='del'>-  OPT_TABLE['touch'] = [:noop, :verbose, :mtime, :nocreate]</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  module StreamUtils_</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def fu_windows?</div><div class='del'>-      /mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def fu_copy_stream0(src, dest, blksize)   #:nodoc:</div><div class='del'>-      # FIXME: readpartial?</div><div class='del'>-      while s = src.read(blksize)</div><div class='del'>-        dest.write s</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def fu_stream_blksize(*streams)</div><div class='del'>-      streams.each do |s|</div><div class='del'>-        next unless s.respond_to?(:stat)</div><div class='del'>-        size = fu_blksize(s.stat)</div><div class='del'>-        return size if size</div><div class='del'>-      end</div><div class='del'>-      fu_default_blksize()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def fu_blksize(st)</div><div class='del'>-      s = st.blksize</div><div class='del'>-      return nil unless s</div><div class='del'>-      return nil if s == 0</div><div class='del'>-      s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def fu_default_blksize</div><div class='del'>-      1024</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  include StreamUtils_</div><div class='del'>-  extend StreamUtils_</div><div class='del'>-</div><div class='del'>-  class Entry_   #:nodoc: internal use only</div><div class='del'>-    include StreamUtils_</div><div class='del'>-</div><div class='del'>-    def initialize(a, b = nil, deref = false)</div><div class='del'>-      @prefix = @rel = @path = nil</div><div class='del'>-      if b</div><div class='del'>-        @prefix = a</div><div class='del'>-        @rel = b</div><div class='del'>-      else</div><div class='del'>-        @path = a</div><div class='del'>-      end</div><div class='del'>-      @deref = deref</div><div class='del'>-      @stat = nil</div><div class='del'>-      @lstat = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "\#&lt;#{self.class} #{path()}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def path</div><div class='del'>-      if @path</div><div class='del'>-        @path.to_str</div><div class='del'>-      else</div><div class='del'>-        join(@prefix, @rel)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def prefix</div><div class='del'>-      @prefix || @path</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def rel</div><div class='del'>-      @rel</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dereference?</div><div class='del'>-      @deref</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def exist?</div><div class='del'>-      lstat! ? true : false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def file?</div><div class='del'>-      s = lstat!</div><div class='del'>-      s and s.file?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def directory?</div><div class='del'>-      s = lstat!</div><div class='del'>-      s and s.directory?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def symlink?</div><div class='del'>-      s = lstat!</div><div class='del'>-      s and s.symlink?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def chardev?</div><div class='del'>-      s = lstat!</div><div class='del'>-      s and s.chardev?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def blockdev?</div><div class='del'>-      s = lstat!</div><div class='del'>-      s and s.blockdev?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def socket?</div><div class='del'>-      s = lstat!</div><div class='del'>-      s and s.socket?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pipe?</div><div class='del'>-      s = lstat!</div><div class='del'>-      s and s.pipe?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    S_IF_DOOR = 0xD000</div><div class='del'>-</div><div class='del'>-    def door?</div><div class='del'>-      s = lstat!</div><div class='del'>-      s and (s.mode &amp; 0xF000 == S_IF_DOOR)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def entries</div><div class='del'>-      Dir.entries(path())\</div><div class='del'>-          .reject {|n| n == '.' or n == '..' }\</div><div class='del'>-          .map {|n| Entry_.new(prefix(), join(rel(), n.untaint)) }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def stat</div><div class='del'>-      return @stat if @stat</div><div class='del'>-      if lstat() and lstat().symlink?</div><div class='del'>-        @stat = File.stat(path())</div><div class='del'>-      else</div><div class='del'>-        @stat = lstat()</div><div class='del'>-      end</div><div class='del'>-      @stat</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def stat!</div><div class='del'>-      return @stat if @stat</div><div class='del'>-      if lstat! and lstat!.symlink?</div><div class='del'>-        @stat = File.stat(path())</div><div class='del'>-      else</div><div class='del'>-        @stat = lstat!</div><div class='del'>-      end</div><div class='del'>-      @stat</div><div class='del'>-    rescue SystemCallError</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def lstat</div><div class='del'>-      if dereference?</div><div class='del'>-        @lstat ||= File.stat(path())</div><div class='del'>-      else</div><div class='del'>-        @lstat ||= File.lstat(path())</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def lstat!</div><div class='del'>-      lstat()</div><div class='del'>-    rescue SystemCallError</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def chmod(mode)</div><div class='del'>-      if symlink?</div><div class='del'>-        File.lchmod mode, path() if have_lchmod?</div><div class='del'>-      else</div><div class='del'>-        File.chmod mode, path()</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def chown(uid, gid)</div><div class='del'>-      if symlink?</div><div class='del'>-        File.lchown uid, gid, path() if have_lchown?</div><div class='del'>-      else</div><div class='del'>-        File.chown uid, gid, path()</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def copy(dest)</div><div class='del'>-      case</div><div class='del'>-      when file?</div><div class='del'>-        copy_file dest</div><div class='del'>-      when directory?</div><div class='del'>-        begin</div><div class='del'>-          Dir.mkdir dest</div><div class='del'>-        rescue</div><div class='del'>-          raise unless File.directory?(dest)</div><div class='del'>-        end</div><div class='del'>-      when symlink?</div><div class='del'>-        File.symlink File.readlink(path()), dest</div><div class='del'>-      when chardev?</div><div class='del'>-        raise "cannot handle device file" unless File.respond_to?(:mknod)</div><div class='del'>-        mknod dest, ?c, 0666, lstat().rdev</div><div class='del'>-      when blockdev?</div><div class='del'>-        raise "cannot handle device file" unless File.respond_to?(:mknod)</div><div class='del'>-        mknod dest, ?b, 0666, lstat().rdev</div><div class='del'>-      when socket?</div><div class='del'>-        raise "cannot handle socket" unless File.respond_to?(:mknod)</div><div class='del'>-        mknod dest, nil, lstat().mode, 0</div><div class='del'>-      when pipe?</div><div class='del'>-        raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)</div><div class='del'>-        mkfifo dest, 0666</div><div class='del'>-      when door?</div><div class='del'>-        raise "cannot handle door: #{path()}"</div><div class='del'>-      else</div><div class='del'>-        raise "unknown file type: #{path()}"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def copy_file(dest)</div><div class='del'>-      st = stat()</div><div class='del'>-      File.open(path(),  'rb') {|r|</div><div class='del'>-        File.open(dest, 'wb', st.mode) {|w|</div><div class='del'>-          fu_copy_stream0 r, w, (fu_blksize(st) || fu_default_blksize())</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def copy_metadata(path)</div><div class='del'>-      st = lstat()</div><div class='del'>-      File.utime st.atime, st.mtime, path</div><div class='del'>-      begin</div><div class='del'>-        File.chown st.uid, st.gid, path</div><div class='del'>-      rescue Errno::EPERM</div><div class='del'>-        # clear setuid/setgid</div><div class='del'>-        File.chmod st.mode &amp; 01777, path</div><div class='del'>-      else</div><div class='del'>-        File.chmod st.mode, path</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove</div><div class='del'>-      if directory?</div><div class='del'>-        remove_dir1</div><div class='del'>-      else</div><div class='del'>-        remove_file</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_dir1</div><div class='del'>-      platform_support {</div><div class='del'>-        Dir.rmdir path().sub(%r&lt;/\z&gt;, '')</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_file</div><div class='del'>-      platform_support {</div><div class='del'>-        File.unlink path</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def platform_support</div><div class='del'>-      return yield unless fu_windows?</div><div class='del'>-      first_time_p = true</div><div class='del'>-      begin</div><div class='del'>-        yield</div><div class='del'>-      rescue Errno::ENOENT</div><div class='del'>-        raise</div><div class='del'>-      rescue =&gt; err</div><div class='del'>-        if first_time_p</div><div class='del'>-          first_time_p = false</div><div class='del'>-          begin</div><div class='del'>-            File.chmod 0700, path()   # Windows does not have symlink</div><div class='del'>-            retry</div><div class='del'>-          rescue SystemCallError</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        raise err</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def preorder_traverse</div><div class='del'>-      stack = [self]</div><div class='del'>-      while ent = stack.pop</div><div class='del'>-        yield ent</div><div class='del'>-        stack.concat ent.entries.reverse if ent.directory?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias traverse preorder_traverse</div><div class='del'>-</div><div class='del'>-    def postorder_traverse</div><div class='del'>-      if directory?</div><div class='del'>-        entries().each do |ent|</div><div class='del'>-          ent.postorder_traverse do |e|</div><div class='del'>-            yield e</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      yield self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    $fileutils_rb_have_lchmod = nil</div><div class='del'>-</div><div class='del'>-    def have_lchmod?</div><div class='del'>-      # This is not MT-safe, but it does not matter.</div><div class='del'>-      if $fileutils_rb_have_lchmod == nil</div><div class='del'>-        $fileutils_rb_have_lchmod = check_have_lchmod?</div><div class='del'>-      end</div><div class='del'>-      $fileutils_rb_have_lchmod</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_have_lchmod?</div><div class='del'>-      return false unless File.respond_to?(:lchmod)</div><div class='del'>-      File.lchmod 0</div><div class='del'>-      return true</div><div class='del'>-    rescue NotImplementedError</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    $fileutils_rb_have_lchown = nil</div><div class='del'>-</div><div class='del'>-    def have_lchown?</div><div class='del'>-      # This is not MT-safe, but it does not matter.</div><div class='del'>-      if $fileutils_rb_have_lchown == nil</div><div class='del'>-        $fileutils_rb_have_lchown = check_have_lchown?</div><div class='del'>-      end</div><div class='del'>-      $fileutils_rb_have_lchown</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_have_lchown?</div><div class='del'>-      return false unless File.respond_to?(:lchown)</div><div class='del'>-      File.lchown nil, nil</div><div class='del'>-      return true</div><div class='del'>-    rescue NotImplementedError</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def join(dir, base)</div><div class='del'>-      return dir.to_str if not base or base == '.'</div><div class='del'>-      return base.to_str if not dir or dir == '.'</div><div class='del'>-      File.join(dir, base)</div><div class='del'>-    end</div><div class='del'>-  end   # class Entry_</div><div class='del'>-</div><div class='del'>-  def fu_list(arg)   #:nodoc:</div><div class='del'>-    [arg].flatten.map {|path| path.to_str }</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_list</div><div class='del'>-</div><div class='del'>-  def fu_each_src_dest(src, dest)   #:nodoc:</div><div class='del'>-    fu_each_src_dest0(src, dest) do |s, d|</div><div class='del'>-      raise ArgumentError, "same file: #{s} and #{d}" if fu_same?(s, d)</div><div class='del'>-      yield s, d</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_each_src_dest</div><div class='del'>-</div><div class='del'>-  def fu_each_src_dest0(src, dest)   #:nodoc:</div><div class='del'>-    if src.is_a?(Array)</div><div class='del'>-      src.each do |s|</div><div class='del'>-        s = s.to_str</div><div class='del'>-        yield s, File.join(dest, File.basename(s))</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      src = src.to_str</div><div class='del'>-      if File.directory?(dest)</div><div class='del'>-        yield src, File.join(dest, File.basename(src))</div><div class='del'>-      else</div><div class='del'>-        yield src, dest.to_str</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_each_src_dest0</div><div class='del'>-</div><div class='del'>-  def fu_same?(a, b)   #:nodoc:</div><div class='del'>-    if fu_have_st_ino?</div><div class='del'>-      st1 = File.stat(a)</div><div class='del'>-      st2 = File.stat(b)</div><div class='del'>-      st1.dev == st2.dev and st1.ino == st2.ino</div><div class='del'>-    else</div><div class='del'>-      File.expand_path(a) == File.expand_path(b)</div><div class='del'>-    end</div><div class='del'>-  rescue Errno::ENOENT</div><div class='del'>-    return false</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_same?</div><div class='del'>-</div><div class='del'>-  def fu_have_st_ino?   #:nodoc:</div><div class='del'>-    not fu_windows?</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_have_st_ino?</div><div class='del'>-</div><div class='del'>-  def fu_check_options(options, optdecl)   #:nodoc:</div><div class='del'>-    h = options.dup</div><div class='del'>-    optdecl.each do |opt|</div><div class='del'>-      h.delete opt</div><div class='del'>-    end</div><div class='del'>-    raise ArgumentError, "no such option: #{h.keys.join(' ')}" unless h.empty?</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_check_options</div><div class='del'>-</div><div class='del'>-  def fu_update_option(args, new)   #:nodoc:</div><div class='del'>-    if args.last.is_a?(Hash)</div><div class='del'>-      args[-1] = args.last.dup.update(new)</div><div class='del'>-    else</div><div class='del'>-      args.push new</div><div class='del'>-    end</div><div class='del'>-    args</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_update_option</div><div class='del'>-</div><div class='del'>-  @fileutils_output = $stderr</div><div class='del'>-  @fileutils_label  = ''</div><div class='del'>-</div><div class='del'>-  def fu_output_message(msg)   #:nodoc:</div><div class='del'>-    @fileutils_output ||= $stderr</div><div class='del'>-    @fileutils_label  ||= ''</div><div class='del'>-    @fileutils_output.puts @fileutils_label + msg</div><div class='del'>-  end</div><div class='del'>-  private_module_function :fu_output_message</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns an Array of method names which have any options.</div><div class='del'>-  #</div><div class='del'>-  #   p FileUtils.commands  #=&gt; ["chmod", "cp", "cp_r", "install", ...]</div><div class='del'>-  #</div><div class='del'>-  def FileUtils.commands</div><div class='del'>-    OPT_TABLE.keys</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns an Array of option names.</div><div class='del'>-  #</div><div class='del'>-  #   p FileUtils.options  #=&gt; ["noop", "force", "verbose", "preserve", "mode"]</div><div class='del'>-  #</div><div class='del'>-  def FileUtils.options</div><div class='del'>-    OPT_TABLE.values.flatten.uniq.map {|sym| sym.to_s }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns true if the method +mid+ have an option +opt+.</div><div class='del'>-  #</div><div class='del'>-  #   p FileUtils.have_option?(:cp, :noop)     #=&gt; true</div><div class='del'>-  #   p FileUtils.have_option?(:rm, :force)    #=&gt; true</div><div class='del'>-  #   p FileUtils.have_option?(:rm, :perserve) #=&gt; false</div><div class='del'>-  #</div><div class='del'>-  def FileUtils.have_option?(mid, opt)</div><div class='del'>-    li = OPT_TABLE[mid.to_s] or raise ArgumentError, "no such method: #{mid}"</div><div class='del'>-    li.include?(opt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns an Array of option names of the method +mid+.</div><div class='del'>-  #</div><div class='del'>-  #   p FileUtils.options(:rm)  #=&gt; ["noop", "verbose", "force"]</div><div class='del'>-  #</div><div class='del'>-  def FileUtils.options_of(mid)</div><div class='del'>-    OPT_TABLE[mid.to_s].map {|sym| sym.to_s }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns an Array of method names which have the option +opt+.</div><div class='del'>-  #</div><div class='del'>-  #   p FileUtils.collect_method(:preserve) #=&gt; ["cp", "cp_r", "copy", "install"]</div><div class='del'>-  #</div><div class='del'>-  def FileUtils.collect_method(opt)</div><div class='del'>-    OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  METHODS = singleton_methods() - %w( private_module_function</div><div class='del'>-      commands options have_option? options_of collect_method )</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  # This module has all methods of FileUtils module, but it outputs messages</div><div class='del'>-  # before acting.  This equates to passing the &lt;tt&gt;:verbose&lt;/tt&gt; flag to</div><div class='del'>-  # methods in FileUtils.</div><div class='del'>-  # </div><div class='del'>-  module Verbose</div><div class='del'>-    include FileUtils</div><div class='del'>-    @fileutils_output  = $stderr</div><div class='del'>-    @fileutils_label   = ''</div><div class='del'>-    ::FileUtils.collect_method(:verbose).each do |name|</div><div class='del'>-      module_eval(&lt;&lt;-EOS, __FILE__, __LINE__ + 1)</div><div class='del'>-        def #{name}(*args)</div><div class='del'>-          super(*fu_update_option(args, :verbose =&gt; true))</div><div class='del'>-        end</div><div class='del'>-        private :#{name}</div><div class='del'>-      EOS</div><div class='del'>-    end</div><div class='del'>-    extend self</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      ::FileUtils::METHODS.each do |m|</div><div class='del'>-        public m</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'>-  # This module has all methods of FileUtils module, but never changes</div><div class='del'>-  # files/directories.  This equates to passing the &lt;tt&gt;:noop&lt;/tt&gt; flag</div><div class='del'>-  # to methods in FileUtils.</div><div class='del'>-  # </div><div class='del'>-  module NoWrite</div><div class='del'>-    include FileUtils</div><div class='del'>-    @fileutils_output  = $stderr</div><div class='del'>-    @fileutils_label   = ''</div><div class='del'>-    ::FileUtils.collect_method(:noop).each do |name|</div><div class='del'>-      module_eval(&lt;&lt;-EOS, __FILE__, __LINE__ + 1)</div><div class='del'>-        def #{name}(*args)</div><div class='del'>-          super(*fu_update_option(args, :noop =&gt; true))</div><div class='del'>-        end</div><div class='del'>-        private :#{name}</div><div class='del'>-      EOS</div><div class='del'>-    end</div><div class='del'>-    extend self</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      ::FileUtils::METHODS.each do |m|</div><div class='del'>-        public m</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'>-  # This module has all methods of FileUtils module, but never changes</div><div class='del'>-  # files/directories, with printing message before acting.</div><div class='del'>-  # This equates to passing the &lt;tt&gt;:noop&lt;/tt&gt; and &lt;tt&gt;:verbose&lt;/tt&gt; flag</div><div class='del'>-  # to methods in FileUtils.</div><div class='del'>-  # </div><div class='del'>-  module DryRun</div><div class='del'>-    include FileUtils</div><div class='del'>-    @fileutils_output  = $stderr</div><div class='del'>-    @fileutils_label   = ''</div><div class='del'>-    ::FileUtils.collect_method(:noop).each do |name|</div><div class='del'>-      module_eval(&lt;&lt;-EOS, __FILE__, __LINE__ + 1)</div><div class='del'>-        def #{name}(*args)</div><div class='del'>-          super(*fu_update_option(args, :noop =&gt; true, :verbose =&gt; true))</div><div class='del'>-        end</div><div class='del'>-        private :#{name}</div><div class='del'>-      EOS</div><div class='del'>-    end</div><div class='del'>-    extend self</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      ::FileUtils::METHODS.each do |m|</div><div class='del'>-        public m</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='head'>diff --git a/lib/finalize.rb b/lib/finalize.rb<br/>deleted file mode 100644<br/>index 9b6b302cac..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/finalize.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/finalize.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,193 +0,0 @@</div><div class='del'>-#--</div><div class='del'>-#   finalizer.rb - </div><div class='del'>-#   	$Release Version: 0.3$</div><div class='del'>-#   	$Revision: 1.4 $</div><div class='del'>-#   	$Date: 1998/02/27 05:34:33 $</div><div class='del'>-#   	by Keiju ISHITSUKA</div><div class='del'>-#++</div><div class='del'>-#</div><div class='del'>-# Usage:</div><div class='del'>-#</div><div class='del'>-# add dependency R_method(obj, dependant)</div><div class='del'>-#   add(obj, dependant, method = :finalize, *opt)</div><div class='del'>-#   add_dependency(obj, dependant, method = :finalize, *opt)</div><div class='del'>-#</div><div class='del'>-# delete dependency R_method(obj, dependant)</div><div class='del'>-#   delete(obj_or_id, dependant, method = :finalize)</div><div class='del'>-#   delete_dependency(obj_or_id, dependant, method = :finalize)</div><div class='del'>-#</div><div class='del'>-# delete dependency R_*(obj, dependant)</div><div class='del'>-#   delete_all_dependency(obj_or_id, dependant)</div><div class='del'>-#</div><div class='del'>-# delete dependency R_method(*, dependant)</div><div class='del'>-#   delete_by_dependant(dependant, method = :finalize)</div><div class='del'>-#</div><div class='del'>-# delete dependency R_*(*, dependant)</div><div class='del'>-#   delete_all_by_dependant(dependant)</div><div class='del'>-#</div><div class='del'>-# delete all dependency R_*(*, *)</div><div class='del'>-#   delete_all</div><div class='del'>-#</div><div class='del'>-# finalize the dependant connected by dependency R_method(obj, dependtant).</div><div class='del'>-#   finalize(obj_or_id, dependant, method = :finalize)</div><div class='del'>-#   finalize_dependency(obj_or_id, dependant, method = :finalize)</div><div class='del'>-#</div><div class='del'>-# finalize all dependants connected by dependency R_*(obj, dependtant).</div><div class='del'>-#   finalize_all_dependency(obj_or_id, dependant)</div><div class='del'>-#</div><div class='del'>-# finalize the dependant connected by dependency R_method(*, dependtant).</div><div class='del'>-#   finalize_by_dependant(dependant, method = :finalize)</div><div class='del'>-#</div><div class='del'>-# finalize all dependants connected by dependency R_*(*, dependant).</div><div class='del'>-#   finalize_all_by_dependant(dependant)</div><div class='del'>-#</div><div class='del'>-# finalize all dependency registered to the Finalizer.</div><div class='del'>-#   finalize_all</div><div class='del'>-#</div><div class='del'>-# stop invoking Finalizer on GC.</div><div class='del'>-#   safe{..}</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-module Finalizer</div><div class='del'>-  RCS_ID='-$Id: finalize.rb,v 1.4 1998/02/27 05:34:33 keiju Exp keiju $-'</div><div class='del'>-</div><div class='del'>-  class &lt;&lt;self</div><div class='del'>-    # @dependency: {id =&gt; [[dependant, method, *opt], ...], ...}</div><div class='del'>-</div><div class='del'>-    # add dependency R_method(obj, dependant)</div><div class='del'>-    def add_dependency(obj, dependant, method = :finalize, *opt)</div><div class='del'>-      ObjectSpace.call_finalizer(obj)</div><div class='del'>-      method = method.intern unless method.kind_of?(Integer)</div><div class='del'>-      assoc = [dependant, method].concat(opt)</div><div class='del'>-      if dep = @dependency[obj.object_id]</div><div class='del'>-	dep.push assoc</div><div class='del'>-      else</div><div class='del'>-	@dependency[obj.object_id] = [assoc]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias add add_dependency</div><div class='del'>-</div><div class='del'>-    # delete dependency R_method(obj, dependant)</div><div class='del'>-    def delete_dependency(id, dependant, method = :finalize)</div><div class='del'>-      id = id.object_id unless id.kind_of?(Integer)</div><div class='del'>-      method = method.intern unless method.kind_of?(Integer)</div><div class='del'>-      for assoc in @dependency[id]</div><div class='del'>-	assoc.delete_if do</div><div class='del'>-	  |d, m, *o|</div><div class='del'>-	  d == dependant &amp;&amp; m == method</div><div class='del'>-	end</div><div class='del'>-	@dependency.delete(id) if assoc.empty?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias delete delete_dependency</div><div class='del'>-</div><div class='del'>-    # delete dependency R_*(obj, dependant)</div><div class='del'>-    def delete_all_dependency(id, dependant)</div><div class='del'>-      id = id.object_id unless id.kind_of?(Integer)</div><div class='del'>-      method = method.intern unless method.kind_of?(Integer)</div><div class='del'>-      for assoc in @dependency[id]</div><div class='del'>-	assoc.delete_if do</div><div class='del'>-	  |d, m, *o|</div><div class='del'>-	  d == dependant</div><div class='del'>-	end</div><div class='del'>-	@dependency.delete(id) if assoc.empty?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # delete dependency R_method(*, dependant)</div><div class='del'>-    def delete_by_dependant(dependant, method = :finalize)</div><div class='del'>-      method = method.intern unless method.kind_of?(Integer)</div><div class='del'>-      for id in @dependency.keys</div><div class='del'>-	delete(id, dependant, method)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # delete dependency R_*(*, dependant)</div><div class='del'>-    def delete_all_by_dependant(dependant)</div><div class='del'>-      for id in @dependency.keys</div><div class='del'>-	delete_all_dependency(id, dependant)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # finalize the depandant connected by dependency R_method(obj, dependtant)</div><div class='del'>-    def finalize_dependency(id, dependant, method = :finalize)</div><div class='del'>-      id = id.object_id unless id.kind_of?(Integer)</div><div class='del'>-      method = method.intern unless method.kind_of?(Integer)</div><div class='del'>-      for assocs in @dependency[id]</div><div class='del'>-	assocs.delete_if do</div><div class='del'>-	  |d, m, *o|</div><div class='del'>-	  d.send(m, id, *o) if ret = d == dependant &amp;&amp; m == method</div><div class='del'>-	  ret</div><div class='del'>-	end</div><div class='del'>-	@dependency.delete(id) if assoc.empty?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias finalize finalize_dependency</div><div class='del'>-</div><div class='del'>-    # finalize all dependants connected by dependency R_*(obj, dependtant)</div><div class='del'>-    def finalize_all_dependency(id, dependant)</div><div class='del'>-      id = id.object_id unless id.kind_of?(Integer)</div><div class='del'>-      method = method.intern unless method.kind_of?(Integer)</div><div class='del'>-      for assoc in @dependency[id]</div><div class='del'>-	assoc.delete_if do</div><div class='del'>-	  |d, m, *o|</div><div class='del'>-	  d.send(m, id, *o) if ret = d == dependant</div><div class='del'>-	end</div><div class='del'>-	@dependency.delete(id) if assoc.empty?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # finalize the dependant connected by dependency R_method(*, dependtant)</div><div class='del'>-    def finalize_by_dependant(dependant, method = :finalize)</div><div class='del'>-      method = method.intern unless method.kind_of?(Integer)</div><div class='del'>-      for id in @dependency.keys</div><div class='del'>-	finalize(id, dependant, method)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # finalize all dependants connected by dependency R_*(*, dependtant)</div><div class='del'>-    def finalize_all_by_dependant(dependant)</div><div class='del'>-      for id in @dependency.keys</div><div class='del'>-	finalize_all_dependency(id, dependant)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # finalize all dependants registered to the Finalizer.</div><div class='del'>-    def finalize_all</div><div class='del'>-      for id, assocs in @dependency</div><div class='del'>-	for dependant, method, *opt in assocs</div><div class='del'>-	  dependant.send(method, id, *opt)</div><div class='del'>-	end</div><div class='del'>-	assocs.clear</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # method to call finalize_* safely.</div><div class='del'>-    def safe</div><div class='del'>-      old_status = Thread.critical</div><div class='del'>-      Thread.critical = true</div><div class='del'>-      ObjectSpace.remove_finalizer(@proc)</div><div class='del'>-      begin</div><div class='del'>-	yield</div><div class='del'>-      ensure</div><div class='del'>-	ObjectSpace.add_finalizer(@proc)</div><div class='del'>-	Thread.critical = old_status</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    # registering function to ObjectSpace#add_finalizer</div><div class='del'>-    def final_of(id)</div><div class='del'>-      if assocs = @dependency.delete(id)</div><div class='del'>-	for dependant, method, *opt in assocs</div><div class='del'>-	  dependant.send(method, id, *opt)</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'>-  @dependency = Hash.new</div><div class='del'>-  @proc = proc{|id| final_of(id)}</div><div class='del'>-  ObjectSpace.add_finalizer(@proc)</div><div class='del'>-end</div><div class='head'>diff --git a/lib/find.rb b/lib/find.rb<br/>deleted file mode 100644<br/>index 0d22dd62d6..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/find.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/find.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,79 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# find.rb: the Find module for processing all files under a given directory.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# The +Find+ module supports the top-down traversal of a set of file paths.</div><div class='del'>-#</div><div class='del'>-# For example, to total the size of all files under your home directory,</div><div class='del'>-# ignoring anything in a "dot" directory (e.g. $HOME/.ssh):</div><div class='del'>-#</div><div class='del'>-#   require 'find'</div><div class='del'>-#</div><div class='del'>-#   total_size = 0</div><div class='del'>-#</div><div class='del'>-#   Find.find(ENV["HOME"]) do |path|</div><div class='del'>-#     if FileTest.directory?(path)</div><div class='del'>-#       if File.basename(path)[0] == ?.</div><div class='del'>-#         Find.prune       # Don't look any further into this directory.</div><div class='del'>-#       else</div><div class='del'>-#         next</div><div class='del'>-#       end</div><div class='del'>-#     else</div><div class='del'>-#       total_size += FileTest.size(path)</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-module Find</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Calls the associated block with the name of every file and directory listed</div><div class='del'>-  # as arguments, then recursively on their subdirectories, and so on.</div><div class='del'>-  #</div><div class='del'>-  # See the +Find+ module documentation for an example.</div><div class='del'>-  #</div><div class='del'>-  def find(*paths) # :yield: path</div><div class='del'>-    paths.collect!{|d| d.dup}</div><div class='del'>-    while file = paths.shift</div><div class='del'>-      catch(:prune) do</div><div class='del'>-	yield file.dup.taint</div><div class='del'>-        next unless File.exist? file</div><div class='del'>-	begin</div><div class='del'>-	  if File.lstat(file).directory? then</div><div class='del'>-	    d = Dir.open(file)</div><div class='del'>-	    begin</div><div class='del'>-	      for f in d</div><div class='del'>-		next if f == "." or f == ".."</div><div class='del'>-		if File::ALT_SEPARATOR and file =~ /^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then</div><div class='del'>-		  f = file + f</div><div class='del'>-		elsif file == "/" then</div><div class='del'>-		  f = "/" + f</div><div class='del'>-		else</div><div class='del'>-		  f = File.join(file, f)</div><div class='del'>-		end</div><div class='del'>-		paths.unshift f.untaint</div><div class='del'>-	      end</div><div class='del'>-	    ensure</div><div class='del'>-	      d.close</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-        rescue Errno::ENOENT, Errno::EACCES</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'>-  # Skips the current file or directory, restarting the loop with the next</div><div class='del'>-  # entry. If the current file is a directory, that directory will not be</div><div class='del'>-  # recursively entered. Meaningful only within the block associated with</div><div class='del'>-  # Find::find.</div><div class='del'>-  #</div><div class='del'>-  # See the +Find+ module documentation for an example.</div><div class='del'>-  #</div><div class='del'>-  def prune</div><div class='del'>-    throw :prune</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :find, :prune</div><div class='del'>-end</div><div class='head'>diff --git a/lib/forwardable.rb b/lib/forwardable.rb<br/>deleted file mode 100644<br/>index cc6e4ee418..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/forwardable.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/forwardable.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,218 +0,0 @@</div><div class='del'>-# = forwardable - Support for the Delegation Pattern</div><div class='del'>-#</div><div class='del'>-#    $Release Version: 1.1$</div><div class='del'>-#    $Revision$</div><div class='del'>-#    $Date$</div><div class='del'>-#    by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='del'>-#</div><div class='del'>-#    Documentation by James Edward Gray II and Gavin Sinclair</div><div class='del'>-#</div><div class='del'>-# == Introduction</div><div class='del'>-#</div><div class='del'>-# This library allows you delegate method calls to an object, on a method by</div><div class='del'>-# method basis.  You can use Forwardable to setup this delegation at the class</div><div class='del'>-# level, or SingleForwardable to handle it at the object level.</div><div class='del'>-#</div><div class='del'>-# == Notes</div><div class='del'>-#</div><div class='del'>-# Be advised, RDoc will not detect delegated methods.</div><div class='del'>-#</div><div class='del'>-# &lt;b&gt;forwardable.rb provides single-method delegation via the</div><div class='del'>-# def_delegator() and def_delegators() methods.  For full-class</div><div class='del'>-# delegation via DelegateClass(), see delegate.rb.&lt;/b&gt;</div><div class='del'>-#</div><div class='del'>-# == Examples</div><div class='del'>-#</div><div class='del'>-# === Forwardable</div><div class='del'>-#</div><div class='del'>-# Forwardable makes building a new class based on existing work, with a proper</div><div class='del'>-# interface, almost trivial.  We want to rely on what has come before obviously,</div><div class='del'>-# but with delegation we can take just the methods we need and even rename them</div><div class='del'>-# as appropriate.  In many cases this is preferable to inheritance, which gives</div><div class='del'>-# us the entire old interface, even if much of it isn't needed.</div><div class='del'>-#</div><div class='del'>-#   class Queue</div><div class='del'>-#     extend Forwardable</div><div class='del'>-#     </div><div class='del'>-#     def initialize</div><div class='del'>-#       @q = [ ]    # prepare delegate object</div><div class='del'>-#     end</div><div class='del'>-#     </div><div class='del'>-#     # setup preferred interface, enq() and deq()...</div><div class='del'>-#     def_delegator :@q, :push, :enq</div><div class='del'>-#     def_delegator :@q, :shift, :deq</div><div class='del'>-#     </div><div class='del'>-#     # support some general Array methods that fit Queues well</div><div class='del'>-#     def_delegators :@q, :clear, :first, :push, :shift, :size</div><div class='del'>-#   end</div><div class='del'>-# </div><div class='del'>-#   q = Queue.new</div><div class='del'>-#   q.enq 1, 2, 3, 4, 5</div><div class='del'>-#   q.push 6</div><div class='del'>-# </div><div class='del'>-#   q.shift    # =&gt; 1</div><div class='del'>-#   while q.size &gt; 0</div><div class='del'>-#     puts q.deq</div><div class='del'>-#   end</div><div class='del'>-# </div><div class='del'>-#   q.enq "Ruby", "Perl", "Python"</div><div class='del'>-#   puts q.first</div><div class='del'>-#   q.clear</div><div class='del'>-#   puts q.first</div><div class='del'>-#</div><div class='del'>-# &lt;i&gt;Prints:&lt;/i&gt;</div><div class='del'>-#</div><div class='del'>-#   2</div><div class='del'>-#   3</div><div class='del'>-#   4</div><div class='del'>-#   5</div><div class='del'>-#   6</div><div class='del'>-#   Ruby</div><div class='del'>-#   nil</div><div class='del'>-#</div><div class='del'>-# === SingleForwardable</div><div class='del'>-#</div><div class='del'>-#    printer = String.new</div><div class='del'>-#    printer.extend SingleForwardable        # prepare object for delegation</div><div class='del'>-#    printer.def_delegator "STDOUT", "puts"  # add delegation for STDOUT.puts()</div><div class='del'>-#    printer.puts "Howdy!"</div><div class='del'>-#</div><div class='del'>-# &lt;i&gt;Prints:&lt;/i&gt;</div><div class='del'>-#</div><div class='del'>-#    Howdy!</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# The Forwardable module provides delegation of specified</div><div class='del'>-# methods to a designated object, using the methods #def_delegator</div><div class='del'>-# and #def_delegators.</div><div class='del'>-#</div><div class='del'>-# For example, say you have a class RecordCollection which</div><div class='del'>-# contains an array &lt;tt&gt;@records&lt;/tt&gt;.  You could provide the lookup method</div><div class='del'>-# #record_number(), which simply calls #[] on the &lt;tt&gt;@records&lt;/tt&gt;</div><div class='del'>-# array, like this:</div><div class='del'>-#</div><div class='del'>-#   class RecordCollection</div><div class='del'>-#     extend Forwardable</div><div class='del'>-#     def_delegator :@records, :[], :record_number</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-# Further, if you wish to provide the methods #size, #&lt;&lt;, and #map,</div><div class='del'>-# all of which delegate to @records, this is how you can do it:</div><div class='del'>-#</div><div class='del'>-#   class RecordCollection</div><div class='del'>-#     # extend Forwardable, but we did that above</div><div class='del'>-#     def_delegators :@records, :size, :&lt;&lt;, :map</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-# Also see the example at forwardable.rb.</div><div class='del'>-#</div><div class='del'>-module Forwardable</div><div class='del'>-</div><div class='del'>-  @debug = nil</div><div class='del'>-  class&lt;&lt;self</div><div class='del'>-    # force Forwardable to show up in stack backtraces of delegated methods</div><div class='del'>-    attr_accessor :debug</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Shortcut for defining multiple delegator methods, but with no</div><div class='del'>-  # provision for using a different name.  The following two code</div><div class='del'>-  # samples have the same effect:</div><div class='del'>-  #</div><div class='del'>-  #   def_delegators :@records, :size, :&lt;&lt;, :map</div><div class='del'>-  #</div><div class='del'>-  #   def_delegator :@records, :size</div><div class='del'>-  #   def_delegator :@records, :&lt;&lt;</div><div class='del'>-  #   def_delegator :@records, :map</div><div class='del'>-  #</div><div class='del'>-  # See the examples at Forwardable and forwardable.rb.</div><div class='del'>-  #</div><div class='del'>-  def def_instance_delegators(accessor, *methods)</div><div class='del'>-    for method in methods</div><div class='del'>-      def_instance_delegator(accessor, method)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Defines a method _method_ which delegates to _obj_ (i.e. it calls</div><div class='del'>-  # the method of the same name in _obj_).  If _new_name_ is</div><div class='del'>-  # provided, it is used as the name for the delegate method.</div><div class='del'>-  #</div><div class='del'>-  # See the examples at Forwardable and forwardable.rb.</div><div class='del'>-  #</div><div class='del'>-  def def_instance_delegator(accessor, method, ali = method)</div><div class='del'>-    accessor = accessor.id2name if accessor.kind_of?(Integer)</div><div class='del'>-    method = method.id2name if method.kind_of?(Integer)</div><div class='del'>-    ali = ali.id2name if ali.kind_of?(Integer)</div><div class='del'>-</div><div class='del'>-    module_eval(&lt;&lt;-EOS, "(__FORWARDABLE__)", 1)</div><div class='del'>-      def #{ali}(*args, &amp;block)</div><div class='del'>-	begin</div><div class='del'>-	  #{accessor}.__send__(:#{method}, *args, &amp;block)</div><div class='del'>-	rescue Exception</div><div class='del'>-	  $@.delete_if{|s| /^\\(__FORWARDABLE__\\):/ =~ s} unless Forwardable::debug</div><div class='del'>-	  Kernel::raise</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'>-  alias def_delegators def_instance_delegators</div><div class='del'>-  alias def_delegator def_instance_delegator</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# The SingleForwardable module provides delegation of specified</div><div class='del'>-# methods to a designated object, using the methods #def_delegator</div><div class='del'>-# and #def_delegators.  This module is similar to Forwardable, but it works on</div><div class='del'>-# objects themselves, instead of their defining classes.</div><div class='del'>-#</div><div class='del'>-# Also see the example at forwardable.rb.</div><div class='del'>-#</div><div class='del'>-module SingleForwardable</div><div class='del'>-  #</div><div class='del'>-  # Shortcut for defining multiple delegator methods, but with no</div><div class='del'>-  # provision for using a different name.  The following two code</div><div class='del'>-  # samples have the same effect:</div><div class='del'>-  #</div><div class='del'>-  #   single_forwardable.def_delegators :@records, :size, :&lt;&lt;, :map</div><div class='del'>-  #</div><div class='del'>-  #   single_forwardable.def_delegator :@records, :size</div><div class='del'>-  #   single_forwardable.def_delegator :@records, :&lt;&lt;</div><div class='del'>-  #   single_forwardable.def_delegator :@records, :map</div><div class='del'>-  #</div><div class='del'>-  # See the example at forwardable.rb.</div><div class='del'>-  #</div><div class='del'>-  def def_singleton_delegators(accessor, *methods)</div><div class='del'>-    for method in methods</div><div class='del'>-      def_singleton_delegator(accessor, method)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Defines a method _method_ which delegates to _obj_ (i.e. it calls</div><div class='del'>-  # the method of the same name in _obj_).  If _new_name_ is</div><div class='del'>-  # provided, it is used as the name for the delegate method.</div><div class='del'>-  #</div><div class='del'>-  # See the example at forwardable.rb.</div><div class='del'>-  #</div><div class='del'>-  def def_singleton_delegator(accessor, method, ali = method)</div><div class='del'>-    accessor = accessor.id2name if accessor.kind_of?(Integer)</div><div class='del'>-    method = method.id2name if method.kind_of?(Integer)</div><div class='del'>-    ali = ali.id2name if ali.kind_of?(Integer)</div><div class='del'>-</div><div class='del'>-    instance_eval(&lt;&lt;-EOS, "(__FORWARDABLE__)", 1)</div><div class='del'>-       def #{ali}(*args, &amp;block)</div><div class='del'>-	 begin</div><div class='del'>-	   #{accessor}.__send__(:#{method}, *args,&amp;block)</div><div class='del'>-	 rescue Exception</div><div class='del'>-	   $@.delete_if{|s| /^\\(__FORWARDABLE__\\):/ =~ s} unless Forwardable::debug</div><div class='del'>-	   Kernel::raise</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'>-  alias def_delegators def_singleton_delegators</div><div class='del'>-  alias def_delegator def_singleton_delegator</div><div class='del'>-end</div><div class='head'>diff --git a/lib/ftools.rb b/lib/ftools.rb<br/>deleted file mode 100644<br/>index 5f082331fb..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/ftools.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/ftools.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,261 +0,0 @@</div><div class='del'>-# </div><div class='del'>-# = ftools.rb: Extra tools for the File class</div><div class='del'>-#</div><div class='del'>-# Author:: WATANABE, Hirofumi</div><div class='del'>-# Documentation:: Zachary Landau</div><div class='del'>-#</div><div class='del'>-# This library can be distributed under the terms of the Ruby license.</div><div class='del'>-# You can freely distribute/modify this library.</div><div class='del'>-#</div><div class='del'>-# It is included in the Ruby standard library.</div><div class='del'>-#</div><div class='del'>-# == Description</div><div class='del'>-#</div><div class='del'>-# ftools adds several (class, not instance) methods to the File class, for</div><div class='del'>-# copying, moving, deleting, installing, and comparing files, as well as</div><div class='del'>-# creating a directory path.  See the File class for details.</div><div class='del'>-#</div><div class='del'>-# FileUtils contains all or nearly all the same functionality and more, and</div><div class='del'>-# is a recommended option over ftools </div><div class='del'>-#</div><div class='del'>-# When you</div><div class='del'>-#</div><div class='del'>-#   require 'ftools'</div><div class='del'>-#</div><div class='del'>-# then the File class aquires some utility methods for copying, moving, and</div><div class='del'>-# deleting files, and more.</div><div class='del'>-#</div><div class='del'>-# See the method descriptions below, and consider using FileUtils as it is</div><div class='del'>-# more comprehensive.</div><div class='del'>-#</div><div class='del'>-class File</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; File</div><div class='del'>-</div><div class='del'>-  BUFSIZE = 8 * 1024</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # If +to+ is a valid directory, +from+ will be appended to +to+, adding</div><div class='del'>-  # and escaping backslashes as necessary. Otherwise, +to+ will be returned.</div><div class='del'>-  # Useful for appending +from+ to +to+ only if the filename was not specified</div><div class='del'>-  # in +to+. </div><div class='del'>-  #</div><div class='del'>-  def catname(from, to)</div><div class='del'>-    if directory? to</div><div class='del'>-      join to.sub(%r([/\\]$), ''), basename(from)</div><div class='del'>-    else</div><div class='del'>-      to</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Copies a file +from+ to +to+. If +to+ is a directory, copies +from+</div><div class='del'>-  # to &lt;tt&gt;to/from&lt;/tt&gt;.</div><div class='del'>-  #</div><div class='del'>-  def syscopy(from, to)</div><div class='del'>-    to = catname(from, to)</div><div class='del'>-</div><div class='del'>-    fmode = stat(from).mode</div><div class='del'>-    tpath = to</div><div class='del'>-    not_exist = !exist?(tpath)</div><div class='del'>-</div><div class='del'>-    from = open(from, "rb")</div><div class='del'>-    to = open(to, "wb")</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      while true</div><div class='del'>-	to.syswrite from.sysread(BUFSIZE)</div><div class='del'>-      end</div><div class='del'>-    rescue EOFError</div><div class='del'>-      ret = true</div><div class='del'>-    rescue</div><div class='del'>-      ret = false</div><div class='del'>-    ensure</div><div class='del'>-      to.close</div><div class='del'>-      from.close</div><div class='del'>-    end</div><div class='del'>-    chmod(fmode, tpath) if not_exist</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Copies a file +from+ to +to+ using #syscopy. If +to+ is a directory,</div><div class='del'>-  # copies +from+ to &lt;tt&gt;to/from&lt;/tt&gt;. If +verbose+ is true, &lt;tt&gt;from -&gt; to&lt;/tt&gt;</div><div class='del'>-  # is printed.</div><div class='del'>-  #</div><div class='del'>-  def copy(from, to, verbose = false)</div><div class='del'>-    $stderr.print from, " -&gt; ", catname(from, to), "\n" if verbose</div><div class='del'>-    syscopy from, to</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias cp copy</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Moves a file +from+ to +to+ using #syscopy. If +to+ is a directory,</div><div class='del'>-  # copies from +from+ to &lt;tt&gt;to/from&lt;/tt&gt;. If +verbose+ is true, &lt;tt&gt;from -&gt;</div><div class='del'>-  # to&lt;/tt&gt; is printed.</div><div class='del'>-  #</div><div class='del'>-  def move(from, to, verbose = false)</div><div class='del'>-    to = catname(from, to)</div><div class='del'>-    $stderr.print from, " -&gt; ", to, "\n" if verbose</div><div class='del'>-</div><div class='del'>-    if RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/ and file? to</div><div class='del'>-      unlink to</div><div class='del'>-    end</div><div class='del'>-    fstat = stat(from)</div><div class='del'>-    begin</div><div class='del'>-      rename from, to</div><div class='del'>-    rescue</div><div class='del'>-      begin</div><div class='del'>-        symlink readlink(from), to and unlink from</div><div class='del'>-      rescue</div><div class='del'>-	from_stat = stat(from)</div><div class='del'>-	syscopy from, to and unlink from</div><div class='del'>-	utime(from_stat.atime, from_stat.mtime, to)</div><div class='del'>-	begin</div><div class='del'>-	  chown(fstat.uid, fstat.gid, to)</div><div class='del'>-	rescue</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'>-  alias mv move</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns +true+ if and only if the contents of files +from+ and +to+ are</div><div class='del'>-  # identical. If +verbose+ is +true+, &lt;tt&gt;from &lt;=&gt; to&lt;/tt&gt; is printed.</div><div class='del'>-  #</div><div class='del'>-  def compare(from, to, verbose = false)</div><div class='del'>-    $stderr.print from, " &lt;=&gt; ", to, "\n" if verbose</div><div class='del'>-</div><div class='del'>-    return false if stat(from).size != stat(to).size</div><div class='del'>-</div><div class='del'>-    from = open(from, "rb")</div><div class='del'>-    to = open(to, "rb")</div><div class='del'>-</div><div class='del'>-    ret = false</div><div class='del'>-    fr = tr = ''</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      while fr == tr</div><div class='del'>-	fr = from.read(BUFSIZE)</div><div class='del'>-	if fr</div><div class='del'>-	  tr = to.read(fr.size)</div><div class='del'>-	else</div><div class='del'>-	  ret = to.read(BUFSIZE)</div><div class='del'>-	  ret = !ret || ret.length == 0</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-      ret = false</div><div class='del'>-    ensure</div><div class='del'>-      to.close</div><div class='del'>-      from.close</div><div class='del'>-    end</div><div class='del'>-    ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias cmp compare</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Removes a list of files. Each parameter should be the name of the file to</div><div class='del'>-  # delete. If the last parameter isn't a String, verbose mode will be enabled.</div><div class='del'>-  # Returns the number of files deleted.</div><div class='del'>-  #</div><div class='del'>-  def safe_unlink(*files)</div><div class='del'>-    verbose = if files[-1].is_a? String then false else files.pop end</div><div class='del'>-    files.each do |file|</div><div class='del'>-      begin</div><div class='del'>-        unlink file</div><div class='del'>-        $stderr.print "removing ", file, "\n" if verbose</div><div class='del'>-      rescue Errno::EACCES # for Windows</div><div class='del'>-        continue if symlink? file</div><div class='del'>-        begin</div><div class='del'>-          mode = stat(file).mode</div><div class='del'>-          o_chmod mode | 0200, file</div><div class='del'>-          unlink file</div><div class='del'>-          $stderr.print "removing ", file, "\n" if verbose</div><div class='del'>-        rescue</div><div class='del'>-          o_chmod mode, file rescue nil</div><div class='del'>-        end</div><div class='del'>-      rescue</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias rm_f safe_unlink</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Creates a directory and all its parent directories.</div><div class='del'>-  # For example,</div><div class='del'>-  #</div><div class='del'>-  #	File.makedirs '/usr/lib/ruby'</div><div class='del'>-  #</div><div class='del'>-  # causes the following directories to be made, if they do not exist.</div><div class='del'>-  #	* /usr</div><div class='del'>-  #	* /usr/lib</div><div class='del'>-  #	* /usr/lib/ruby</div><div class='del'>-  #</div><div class='del'>-  # You can pass several directories, each as a parameter. If the last</div><div class='del'>-  # parameter isn't a String, verbose mode will be enabled.</div><div class='del'>-  #</div><div class='del'>-  def makedirs(*dirs)</div><div class='del'>-    verbose = if dirs[-1].is_a? String then false else dirs.pop end</div><div class='del'>-    mode = 0755</div><div class='del'>-    for dir in dirs</div><div class='del'>-      parent = dirname(dir)</div><div class='del'>-      next if parent == dir or directory? dir</div><div class='del'>-      makedirs parent unless directory? parent</div><div class='del'>-      $stderr.print "mkdir ", dir, "\n" if verbose</div><div class='del'>-      if basename(dir) != ""</div><div class='del'>-        begin</div><div class='del'>-          Dir.mkdir dir, mode</div><div class='del'>-        rescue SystemCallError</div><div class='del'>-          raise unless directory? dir</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'>-  alias mkpath makedirs</div><div class='del'>-</div><div class='del'>-  alias o_chmod chmod</div><div class='del'>-</div><div class='del'>-  vsave, $VERBOSE = $VERBOSE, false</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Changes permission bits on +files+ to the bit pattern represented</div><div class='del'>-  # by +mode+. If the last parameter isn't a String, verbose mode will</div><div class='del'>-  # be enabled.</div><div class='del'>-  #</div><div class='del'>-  #   File.chmod 0755, 'somecommand'</div><div class='del'>-  #   File.chmod 0644, 'my.rb', 'your.rb', true</div><div class='del'>-  #</div><div class='del'>-  def chmod(mode, *files)</div><div class='del'>-    verbose = if files[-1].is_a? String then false else files.pop end</div><div class='del'>-    $stderr.printf "chmod %04o %s\n", mode, files.join(" ") if verbose</div><div class='del'>-    o_chmod mode, *files</div><div class='del'>-  end</div><div class='del'>-  $VERBOSE = vsave</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # If +src+ is not the same as +dest+, copies it and changes the permission</div><div class='del'>-  # mode to +mode+. If +dest+ is a directory, destination is &lt;tt&gt;dest/src&lt;/tt&gt;.</div><div class='del'>-  # If +mode+ is not set, default is used. If +verbose+ is set to true, the</div><div class='del'>-  # name of each file copied will be printed.</div><div class='del'>-  #</div><div class='del'>-  def install(from, to, mode = nil, verbose = false)</div><div class='del'>-    to = catname(from, to)</div><div class='del'>-    unless exist? to and cmp from, to</div><div class='del'>-      safe_unlink to if exist? to</div><div class='del'>-      cp from, to, verbose</div><div class='del'>-      chmod mode, to, verbose if mode</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'>-# vi:set sw=2:</div><div class='head'>diff --git a/lib/generator.rb b/lib/generator.rb<br/>deleted file mode 100644<br/>index dbdd0f40a9..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/generator.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/generator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,418 +0,0 @@</div><div class='del'>-#!/usr/bin/env ruby</div><div class='del'>-#--</div><div class='del'>-# $Idaemons: /home/cvs/rb/generator.rb,v 1.8 2001/10/03 08:54:32 knu Exp $</div><div class='del'>-# $RoughId: generator.rb,v 1.10 2003/10/14 19:36:58 knu Exp $</div><div class='del'>-# $Id$</div><div class='del'>-#++</div><div class='del'>-#</div><div class='del'>-# = generator.rb: convert an internal iterator to an external one</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 2001,2003 Akinori MUSHA &lt;knu@iDaemons.org&gt;</div><div class='del'>-#</div><div class='del'>-# All rights reserved.  You can redistribute and/or modify it under</div><div class='del'>-# the same terms as Ruby.</div><div class='del'>-#</div><div class='del'>-# == Overview</div><div class='del'>-#</div><div class='del'>-# This library provides the Generator class, which converts an</div><div class='del'>-# internal iterator (i.e. an Enumerable object) to an external</div><div class='del'>-# iterator.  In that form, you can roll many iterators independently.</div><div class='del'>-#</div><div class='del'>-# The SyncEnumerator class, which is implemented using Generator,</div><div class='del'>-# makes it easy to roll many Enumerable objects synchronously.</div><div class='del'>-#</div><div class='del'>-# See the respective classes for examples of usage.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Generator converts an internal iterator (i.e. an Enumerable object)</div><div class='del'>-# to an external iterator.</div><div class='del'>-#</div><div class='del'>-# Note that it is not very fast since it is implemented using</div><div class='del'>-# continuations, which are currently slow.</div><div class='del'>-#</div><div class='del'>-# == Example</div><div class='del'>-#</div><div class='del'>-#   require 'generator'</div><div class='del'>-#</div><div class='del'>-#   # Generator from an Enumerable object</div><div class='del'>-#   g = Generator.new(['A', 'B', 'C', 'Z'])</div><div class='del'>-#</div><div class='del'>-#   while g.next?</div><div class='del'>-#     puts g.next</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-#   # Generator from a block</div><div class='del'>-#   g = Generator.new { |g|</div><div class='del'>-#     for i in 'A'..'C'</div><div class='del'>-#       g.yield i</div><div class='del'>-#     end</div><div class='del'>-#</div><div class='del'>-#     g.yield 'Z'</div><div class='del'>-#   }</div><div class='del'>-#</div><div class='del'>-#   # The same result as above</div><div class='del'>-#   while g.next?</div><div class='del'>-#     puts g.next</div><div class='del'>-#   end</div><div class='del'>-#   </div><div class='del'>-class Generator</div><div class='del'>-  include Enumerable</div><div class='del'>-</div><div class='del'>-  # Creates a new generator either from an Enumerable object or from a</div><div class='del'>-  # block.</div><div class='del'>-  #</div><div class='del'>-  # In the former, block is ignored even if given.</div><div class='del'>-  #</div><div class='del'>-  # In the latter, the given block is called with the generator</div><div class='del'>-  # itself, and expected to call the +yield+ method for each element.</div><div class='del'>-  def initialize(enum = nil, &amp;block)</div><div class='del'>-    if enum</div><div class='del'>-      @block = proc { |g|</div><div class='del'>-	enum.each { |x| g.yield x }</div><div class='del'>-      }</div><div class='del'>-    else</div><div class='del'>-      @block = block</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @index = 0</div><div class='del'>-    @queue = []</div><div class='del'>-    @cont_next = @cont_yield = @cont_endp = nil</div><div class='del'>-</div><div class='del'>-    if @cont_next = callcc { |c| c }</div><div class='del'>-      @block.call(self)</div><div class='del'>-</div><div class='del'>-      @cont_endp.call(nil) if @cont_endp</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'>-  # Yields an element to the generator.</div><div class='del'>-  def yield(value)</div><div class='del'>-    if @cont_yield = callcc { |c| c }</div><div class='del'>-      @queue &lt;&lt; value</div><div class='del'>-      @cont_next.call(nil)</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'>-  # Returns true if the generator has reached the end.</div><div class='del'>-  def end?()</div><div class='del'>-    if @cont_endp = callcc { |c| c }</div><div class='del'>-      @cont_yield.nil? &amp;&amp; @queue.empty?</div><div class='del'>-    else</div><div class='del'>-      @queue.empty?</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns true if the generator has not reached the end yet.</div><div class='del'>-  def next?()</div><div class='del'>-    !end?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the current index (position) counting from zero.</div><div class='del'>-  def index()</div><div class='del'>-    @index</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the current index (position) counting from zero.</div><div class='del'>-  def pos()</div><div class='del'>-    @index</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the element at the current position and moves forward.</div><div class='del'>-  def next()</div><div class='del'>-    if end?</div><div class='del'>-      raise EOFError, "no more elements available"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @cont_next = callcc { |c| c }</div><div class='del'>-      @cont_yield.call(nil) if @cont_yield</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @index += 1</div><div class='del'>-</div><div class='del'>-    @queue.shift</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the element at the current position.</div><div class='del'>-  def current()</div><div class='del'>-    if @queue.empty?</div><div class='del'>-      raise EOFError, "no more elements available"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @queue.first</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Rewinds the generator.</div><div class='del'>-  def rewind()</div><div class='del'>-    initialize(nil, &amp;@block) if @index.nonzero?</div><div class='del'>-</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Rewinds the generator and enumerates the elements.</div><div class='del'>-  def each</div><div class='del'>-    rewind</div><div class='del'>-</div><div class='del'>-    until end?</div><div class='del'>-      yield self.next</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 Enumerable::Enumerator</div><div class='del'>-  def __generator</div><div class='del'>-    @generator ||= Generator.new(self)</div><div class='del'>-  end</div><div class='del'>-  private :__generator</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #   e.next   =&gt; object</div><div class='del'>-  #</div><div class='del'>-  # Returns the next object in the enumerator, and move the internal</div><div class='del'>-  # position forward.  When the position reached at the end, internal</div><div class='del'>-  # position is rewinded then StopIteration is raised.</div><div class='del'>-  #</div><div class='del'>-  # Note that enumeration sequence by next method does not affect other</div><div class='del'>-  # non-external enumeration methods, unless underlying iteration</div><div class='del'>-  # methods itself has side-effect, e.g. IO#each_line.</div><div class='del'>-  #</div><div class='del'>-  # Caution: This feature internally uses Generator, which uses callcc</div><div class='del'>-  # to stop and resume enumeration to fetch each value.  Use with care</div><div class='del'>-  # and be aware of the performance loss.</div><div class='del'>-  def next</div><div class='del'>-    g = __generator</div><div class='del'>-    return g.next unless g.end?</div><div class='del'>-</div><div class='del'>-    g.rewind</div><div class='del'>-    raise StopIteration, 'iteration reached at end' </div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # call-seq:</div><div class='del'>-  #   e.rewind   =&gt; e</div><div class='del'>-  #</div><div class='del'>-  # Rewinds the enumeration sequence by the next method.</div><div class='del'>-  def rewind</div><div class='del'>-    __generator.rewind</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'>-# SyncEnumerator creates an Enumerable object from multiple Enumerable</div><div class='del'>-# objects and enumerates them synchronously.</div><div class='del'>-#</div><div class='del'>-# == Example</div><div class='del'>-#</div><div class='del'>-#   require 'generator'</div><div class='del'>-#</div><div class='del'>-#   s = SyncEnumerator.new([1,2,3], ['a', 'b', 'c'])</div><div class='del'>-#</div><div class='del'>-#   # Yields [1, 'a'], [2, 'b'], and [3,'c']</div><div class='del'>-#   s.each { |row| puts row.join(', ') }</div><div class='del'>-#</div><div class='del'>-class SyncEnumerator</div><div class='del'>-  include Enumerable</div><div class='del'>-</div><div class='del'>-  # Creates a new SyncEnumerator which enumerates rows of given</div><div class='del'>-  # Enumerable objects.</div><div class='del'>-  def initialize(*enums)</div><div class='del'>-    @gens = enums.map { |e| Generator.new(e) }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the number of enumerated Enumerable objects, i.e. the size</div><div class='del'>-  # of each row.</div><div class='del'>-  def size</div><div class='del'>-    @gens.size</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the number of enumerated Enumerable objects, i.e. the size</div><div class='del'>-  # of each row.</div><div class='del'>-  def length</div><div class='del'>-    @gens.length</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns true if the given nth Enumerable object has reached the</div><div class='del'>-  # end.  If no argument is given, returns true if any of the</div><div class='del'>-  # Enumerable objects has reached the end.</div><div class='del'>-  def end?(i = nil)</div><div class='del'>-    if i.nil?</div><div class='del'>-      @gens.detect { |g| g.end? } ? true : false</div><div class='del'>-    else</div><div class='del'>-      @gens[i].end?</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Enumerates rows of the Enumerable objects.</div><div class='del'>-  def each</div><div class='del'>-    @gens.each { |g| g.rewind }</div><div class='del'>-</div><div class='del'>-    loop do</div><div class='del'>-      count = 0</div><div class='del'>-</div><div class='del'>-      ret = @gens.map { |g|</div><div class='del'>-	if g.end?</div><div class='del'>-	  count += 1</div><div class='del'>-	  nil</div><div class='del'>-	else</div><div class='del'>-	  g.next</div><div class='del'>-	end</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      if count == @gens.size</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      yield ret</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'>-if $0 == __FILE__</div><div class='del'>-  eval DATA.read, nil, $0, __LINE__+4</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-__END__</div><div class='del'>-</div><div class='del'>-require 'test/unit'</div><div class='del'>-</div><div class='del'>-class TC_Generator &lt; Test::Unit::TestCase</div><div class='del'>-  def test_block1</div><div class='del'>-    g = Generator.new { |g|</div><div class='del'>-      # no yield's</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    assert_equal(0, g.pos)</div><div class='del'>-    assert_raises(EOFError) { g.current }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_block2</div><div class='del'>-    g = Generator.new { |g|</div><div class='del'>-      for i in 'A'..'C'</div><div class='del'>-        g.yield i</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      g.yield 'Z'</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    assert_equal(0, g.pos)</div><div class='del'>-    assert_equal('A', g.current)</div><div class='del'>-</div><div class='del'>-    assert_equal(true, g.next?)</div><div class='del'>-    assert_equal(0, g.pos)</div><div class='del'>-    assert_equal('A', g.current)</div><div class='del'>-    assert_equal(0, g.pos)</div><div class='del'>-    assert_equal('A', g.next)</div><div class='del'>-</div><div class='del'>-    assert_equal(1, g.pos)</div><div class='del'>-    assert_equal(true, g.next?)</div><div class='del'>-    assert_equal(1, g.pos)</div><div class='del'>-    assert_equal('B', g.current)</div><div class='del'>-    assert_equal(1, g.pos)</div><div class='del'>-    assert_equal('B', g.next)</div><div class='del'>-</div><div class='del'>-    assert_equal(g, g.rewind)</div><div class='del'>-</div><div class='del'>-    assert_equal(0, g.pos)</div><div class='del'>-    assert_equal('A', g.current)</div><div class='del'>-</div><div class='del'>-    assert_equal(true, g.next?)</div><div class='del'>-    assert_equal(0, g.pos)</div><div class='del'>-    assert_equal('A', g.current)</div><div class='del'>-    assert_equal(0, g.pos)</div><div class='del'>-    assert_equal('A', g.next)</div><div class='del'>-</div><div class='del'>-    assert_equal(1, g.pos)</div><div class='del'>-    assert_equal(true, g.next?)</div><div class='del'>-    assert_equal(1, g.pos)</div><div class='del'>-    assert_equal('B', g.current)</div><div class='del'>-    assert_equal(1, g.pos)</div><div class='del'>-    assert_equal('B', g.next)</div><div class='del'>-</div><div class='del'>-    assert_equal(2, g.pos)</div><div class='del'>-    assert_equal(true, g.next?)</div><div class='del'>-    assert_equal(2, g.pos)</div><div class='del'>-    assert_equal('C', g.current)</div><div class='del'>-    assert_equal(2, g.pos)</div><div class='del'>-    assert_equal('C', g.next)</div><div class='del'>-</div><div class='del'>-    assert_equal(3, g.pos)</div><div class='del'>-    assert_equal(true, g.next?)</div><div class='del'>-    assert_equal(3, g.pos)</div><div class='del'>-    assert_equal('Z', g.current)</div><div class='del'>-    assert_equal(3, g.pos)</div><div class='del'>-    assert_equal('Z', g.next)</div><div class='del'>-</div><div class='del'>-    assert_equal(4, g.pos)</div><div class='del'>-    assert_equal(false, g.next?)</div><div class='del'>-    assert_raises(EOFError) { g.next }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_each</div><div class='del'>-    a = [5, 6, 7, 8, 9]</div><div class='del'>-</div><div class='del'>-    g = Generator.new(a)</div><div class='del'>-</div><div class='del'>-    i = 0</div><div class='del'>-</div><div class='del'>-    g.each { |x|</div><div class='del'>-      assert_equal(a[i], x)</div><div class='del'>-</div><div class='del'>-      i += 1</div><div class='del'>-</div><div class='del'>-      break if i == 3</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    assert_equal(3, i)</div><div class='del'>-</div><div class='del'>-    i = 0</div><div class='del'>-</div><div class='del'>-    g.each { |x|</div><div class='del'>-      assert_equal(a[i], x)</div><div class='del'>-</div><div class='del'>-      i += 1</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    assert_equal(5, i)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TC_SyncEnumerator &lt; Test::Unit::TestCase</div><div class='del'>-  def test_each</div><div class='del'>-    r = ['a'..'f', 1..10, 10..20]</div><div class='del'>-    ra = r.map { |x| x.to_a }</div><div class='del'>-</div><div class='del'>-    a = (0...(ra.map {|x| x.size}.max)).map { |i| ra.map { |x| x[i] } }</div><div class='del'>-</div><div class='del'>-    s = SyncEnumerator.new(*r)</div><div class='del'>-</div><div class='del'>-    i = 0</div><div class='del'>-</div><div class='del'>-    s.each { |x|</div><div class='del'>-      assert_equal(a[i], x)</div><div class='del'>-</div><div class='del'>-      i += 1</div><div class='del'>-</div><div class='del'>-      break if i == 3</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    assert_equal(3, i)</div><div class='del'>-</div><div class='del'>-    i = 0</div><div class='del'>-</div><div class='del'>-    s.each { |x|</div><div class='del'>-      assert_equal(a[i], x)</div><div class='del'>-</div><div class='del'>-      i += 1</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    assert_equal(a.size, i)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/getoptlong.rb b/lib/getoptlong.rb<br/>deleted file mode 100644<br/>index 4d004419b1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/getoptlong.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/getoptlong.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,621 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# GetoptLong for Ruby</div><div class='del'>-#</div><div class='del'>-# Copyright (C) 1998, 1999, 2000  Motoyuki Kasahara.</div><div class='del'>-#</div><div class='del'>-# You may redistribute and/or modify this library under the same license</div><div class='del'>-# terms as Ruby.</div><div class='del'>-#</div><div class='del'>-# See GetoptLong for documentation.</div><div class='del'>-#</div><div class='del'>-# Additional documents and the latest version of `getoptlong.rb' can be</div><div class='del'>-# found at http://www.sra.co.jp/people/m-kasahr/ruby/getoptlong/</div><div class='del'>-</div><div class='del'>-# The GetoptLong class allows you to parse command line options similarly to</div><div class='del'>-# the GNU getopt_long() C library call. Note, however, that GetoptLong is a </div><div class='del'>-# pure Ruby implementation.</div><div class='del'>-#</div><div class='del'>-# GetoptLong allows for POSIX-style options like &lt;tt&gt;--file&lt;/tt&gt; as well </div><div class='del'>-# as single letter options like &lt;tt&gt;-f&lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# The empty option &lt;tt&gt;--&lt;/tt&gt; (two minus symbols) is used to end option</div><div class='del'>-# processing. This can be particularly important if options have optional</div><div class='del'>-# arguments.</div><div class='del'>-#</div><div class='del'>-# Here is a simple example of usage:</div><div class='del'>-#</div><div class='del'>-#     # == Synopsis</div><div class='del'>-#     #</div><div class='del'>-#     # hello: greets user, demonstrates command line parsing</div><div class='del'>-#     #</div><div class='del'>-#     # == Usage</div><div class='del'>-#     #</div><div class='del'>-#     # hello [OPTION] ... DIR</div><div class='del'>-#     #</div><div class='del'>-#     # -h, --help:</div><div class='del'>-#     #    show help</div><div class='del'>-#     #</div><div class='del'>-#     # --repeat x, -n x:</div><div class='del'>-#     #    repeat x times</div><div class='del'>-#     #</div><div class='del'>-#     # --name [name]:</div><div class='del'>-#     #    greet user by name, if name not supplied default is John</div><div class='del'>-#     #</div><div class='del'>-#     # DIR: The directory in which to issue the greeting.</div><div class='del'>-#     </div><div class='del'>-#     require 'getoptlong'</div><div class='del'>-#     require 'rdoc/usage'</div><div class='del'>-#     </div><div class='del'>-#     opts = GetoptLong.new(</div><div class='del'>-#       [ '--help', '-h', GetoptLong::NO_ARGUMENT ],</div><div class='del'>-#       [ '--repeat', '-n', GetoptLong::REQUIRED_ARGUMENT ],</div><div class='del'>-#       [ '--name', GetoptLong::OPTIONAL_ARGUMENT ]</div><div class='del'>-#     )</div><div class='del'>-#     </div><div class='del'>-#     dir = nil</div><div class='del'>-#     name = nil</div><div class='del'>-#     repetitions = 1</div><div class='del'>-#     opts.each do |opt, arg|</div><div class='del'>-#       case opt</div><div class='del'>-#         when '--help'</div><div class='del'>-#           RDoc::usage</div><div class='del'>-#         when '--repeat'</div><div class='del'>-#           repetitions = arg.to_i</div><div class='del'>-#         when '--name'</div><div class='del'>-#           if arg == ''</div><div class='del'>-#             name = 'John'</div><div class='del'>-#           else</div><div class='del'>-#             name = arg</div><div class='del'>-#           end</div><div class='del'>-#       end</div><div class='del'>-#     end</div><div class='del'>-#     </div><div class='del'>-#     if ARGV.length != 1</div><div class='del'>-#       puts "Missing dir argument (try --help)"</div><div class='del'>-#       exit 0</div><div class='del'>-#     end</div><div class='del'>-#     </div><div class='del'>-#     dir = ARGV.shift</div><div class='del'>-#     </div><div class='del'>-#     Dir.chdir(dir)</div><div class='del'>-#     for i in (1..repetitions)</div><div class='del'>-#       print "Hello"</div><div class='del'>-#       if name</div><div class='del'>-#         print ", #{name}"</div><div class='del'>-#       end</div><div class='del'>-#       puts</div><div class='del'>-#     end</div><div class='del'>-#</div><div class='del'>-# Example command line:</div><div class='del'>-#</div><div class='del'>-#     hello -n 6 --name -- /tmp</div><div class='del'>-#</div><div class='del'>-class GetoptLong</div><div class='del'>-  #</div><div class='del'>-  # Orderings.</div><div class='del'>-  #</div><div class='del'>-  ORDERINGS = [REQUIRE_ORDER = 0, PERMUTE = 1, RETURN_IN_ORDER = 2]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Argument flags.</div><div class='del'>-  #</div><div class='del'>-  ARGUMENT_FLAGS = [NO_ARGUMENT = 0, REQUIRED_ARGUMENT = 1,</div><div class='del'>-    OPTIONAL_ARGUMENT = 2]</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Status codes.</div><div class='del'>-  #</div><div class='del'>-  STATUS_YET, STATUS_STARTED, STATUS_TERMINATED = 0, 1, 2</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Error types.</div><div class='del'>-  #</div><div class='del'>-  class Error  &lt; StandardError; end</div><div class='del'>-  class AmbigousOption   &lt; Error; end</div><div class='del'>-  class NeedlessArgument &lt; Error; end</div><div class='del'>-  class MissingArgument  &lt; Error; end</div><div class='del'>-  class InvalidOption    &lt; Error; end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Set up option processing.</div><div class='del'>-  #</div><div class='del'>-  # The options to support are passed to new() as an array of arrays.</div><div class='del'>-  # Each sub-array contains any number of String option names which carry </div><div class='del'>-  # the same meaning, and one of the following flags:</div><div class='del'>-  #</div><div class='del'>-  # GetoptLong::NO_ARGUMENT :: Option does not take an argument.</div><div class='del'>-  #</div><div class='del'>-  # GetoptLong::REQUIRED_ARGUMENT :: Option always takes an argument.</div><div class='del'>-  #</div><div class='del'>-  # GetoptLong::OPTIONAL_ARGUMENT :: Option may or may not take an argument.</div><div class='del'>-  #</div><div class='del'>-  # The first option name is considered to be the preferred (canonical) name.</div><div class='del'>-  # Other than that, the elements of each sub-array can be in any order.</div><div class='del'>-  #</div><div class='del'>-  def initialize(*arguments)</div><div class='del'>-    #</div><div class='del'>-    # Current ordering.</div><div class='del'>-    #</div><div class='del'>-    if ENV.include?('POSIXLY_CORRECT')</div><div class='del'>-      @ordering = REQUIRE_ORDER</div><div class='del'>-    else</div><div class='del'>-      @ordering = PERMUTE</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Hash table of option names.</div><div class='del'>-    # Keys of the table are option names, and their values are canonical</div><div class='del'>-    # names of the options.</div><div class='del'>-    #</div><div class='del'>-    @canonical_names = Hash.new</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Hash table of argument flags.</div><div class='del'>-    # Keys of the table are option names, and their values are argument</div><div class='del'>-    # flags of the options.</div><div class='del'>-    #</div><div class='del'>-    @argument_flags = Hash.new</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Whether error messages are output to $deferr.</div><div class='del'>-    #</div><div class='del'>-    @quiet = FALSE</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Status code.</div><div class='del'>-    #</div><div class='del'>-    @status = STATUS_YET</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Error code.</div><div class='del'>-    #</div><div class='del'>-    @error = nil</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Error message.</div><div class='del'>-    #</div><div class='del'>-    @error_message = nil</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Rest of catenated short options.</div><div class='del'>-    #</div><div class='del'>-    @rest_singles = ''</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # List of non-option-arguments.</div><div class='del'>-    # Append them to ARGV when option processing is terminated.</div><div class='del'>-    #</div><div class='del'>-    @non_option_arguments = Array.new</div><div class='del'>-</div><div class='del'>-    if 0 &lt; arguments.length</div><div class='del'>-      set_options(*arguments)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Set the handling of the ordering of options and arguments.</div><div class='del'>-  # A RuntimeError is raised if option processing has already started.</div><div class='del'>-  #</div><div class='del'>-  # The supplied value must be a member of GetoptLong::ORDERINGS. It alters</div><div class='del'>-  # the processing of options as follows:</div><div class='del'>-  #</div><div class='del'>-  # &lt;b&gt;REQUIRE_ORDER&lt;/b&gt; :</div><div class='del'>-  # </div><div class='del'>-  # Options are required to occur before non-options.</div><div class='del'>-  #</div><div class='del'>-  # Processing of options ends as soon as a word is encountered that has not</div><div class='del'>-  # been preceded by an appropriate option flag.</div><div class='del'>-  #</div><div class='del'>-  # For example, if -a and -b are options which do not take arguments,</div><div class='del'>-  # parsing command line arguments of '-a one -b two' would result in </div><div class='del'>-  # 'one', '-b', 'two' being left in ARGV, and only ('-a', '') being </div><div class='del'>-  # processed as an option/arg pair.</div><div class='del'>-  #</div><div class='del'>-  # This is the default ordering, if the environment variable</div><div class='del'>-  # POSIXLY_CORRECT is set. (This is for compatibility with GNU getopt_long.)</div><div class='del'>-  #</div><div class='del'>-  # &lt;b&gt;PERMUTE&lt;/b&gt; :</div><div class='del'>-  #  </div><div class='del'>-  # Options can occur anywhere in the command line parsed. This is the </div><div class='del'>-  # default behavior.</div><div class='del'>-  #</div><div class='del'>-  # Every sequence of words which can be interpreted as an option (with or</div><div class='del'>-  # without argument) is treated as an option; non-option words are skipped.</div><div class='del'>-  #</div><div class='del'>-  # For example, if -a does not require an argument and -b optionally takes</div><div class='del'>-  # an argument, parsing '-a one -b two three' would result in ('-a','') and</div><div class='del'>-  # ('-b', 'two') being processed as option/arg pairs, and 'one','three'</div><div class='del'>-  # being left in ARGV.</div><div class='del'>-  #</div><div class='del'>-  # If the ordering is set to PERMUTE but the environment variable</div><div class='del'>-  # POSIXLY_CORRECT is set, REQUIRE_ORDER is used instead. This is for</div><div class='del'>-  # compatibility with GNU getopt_long.</div><div class='del'>-  #</div><div class='del'>-  # &lt;b&gt;RETURN_IN_ORDER&lt;/b&gt; :</div><div class='del'>-  #</div><div class='del'>-  # All words on the command line are processed as options. Words not </div><div class='del'>-  # preceded by a short or long option flag are passed as arguments</div><div class='del'>-  # with an option of '' (empty string).</div><div class='del'>-  #</div><div class='del'>-  # For example, if -a requires an argument but -b does not, a command line</div><div class='del'>-  # of '-a one -b two three' would result in option/arg pairs of ('-a', 'one')</div><div class='del'>-  # ('-b', ''), ('', 'two'), ('', 'three') being processed.</div><div class='del'>-  #</div><div class='del'>-  def ordering=(ordering)</div><div class='del'>-    #</div><div class='del'>-    # The method is failed if option processing has already started.</div><div class='del'>-    #</div><div class='del'>-    if @status != STATUS_YET</div><div class='del'>-      set_error(ArgumentError, "argument error")</div><div class='del'>-      raise RuntimeError,</div><div class='del'>-	"invoke ordering=, but option processing has already started"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Check ordering.</div><div class='del'>-    #</div><div class='del'>-    if !ORDERINGS.include?(ordering)</div><div class='del'>-      raise ArgumentError, "invalid ordering `#{ordering}'"</div><div class='del'>-    end</div><div class='del'>-    if ordering == PERMUTE &amp;&amp; ENV.include?('POSIXLY_CORRECT')</div><div class='del'>-      @ordering = REQUIRE_ORDER</div><div class='del'>-    else</div><div class='del'>-      @ordering = ordering</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Return ordering.</div><div class='del'>-  #</div><div class='del'>-  attr_reader :ordering</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Set options. Takes the same argument as GetoptLong.new.</div><div class='del'>-  #</div><div class='del'>-  # Raises a RuntimeError if option processing has already started.</div><div class='del'>-  #</div><div class='del'>-  def set_options(*arguments)</div><div class='del'>-    #</div><div class='del'>-    # The method is failed if option processing has already started.</div><div class='del'>-    #</div><div class='del'>-    if @status != STATUS_YET</div><div class='del'>-      raise RuntimeError, </div><div class='del'>-	"invoke set_options, but option processing has already started"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Clear tables of option names and argument flags.</div><div class='del'>-    #</div><div class='del'>-    @canonical_names.clear</div><div class='del'>-    @argument_flags.clear</div><div class='del'>-</div><div class='del'>-    arguments.each do |arg|</div><div class='del'>-      #</div><div class='del'>-      # Each argument must be an Array.</div><div class='del'>-      #</div><div class='del'>-      if !arg.is_a?(Array)</div><div class='del'>-	raise ArgumentError, "the option list contains non-Array argument"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Find an argument flag and it set to `argument_flag'.</div><div class='del'>-      #</div><div class='del'>-      argument_flag = nil</div><div class='del'>-      arg.each do |i|</div><div class='del'>-	if ARGUMENT_FLAGS.include?(i)</div><div class='del'>-	  if argument_flag != nil</div><div class='del'>-	    raise ArgumentError, "too many argument-flags"</div><div class='del'>-	  end</div><div class='del'>-	  argument_flag = i</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      raise ArgumentError, "no argument-flag" if argument_flag == nil</div><div class='del'>-</div><div class='del'>-      canonical_name = nil</div><div class='del'>-      arg.each do |i|</div><div class='del'>-	#</div><div class='del'>-	# Check an option name.</div><div class='del'>-	#</div><div class='del'>-	next if i == argument_flag</div><div class='del'>-	begin</div><div class='del'>-	  if !i.is_a?(String) || i !~ /^-([^-]|-.+)$/</div><div class='del'>-	    raise ArgumentError, "an invalid option `#{i}'"</div><div class='del'>-	  end</div><div class='del'>-	  if (@canonical_names.include?(i))</div><div class='del'>-	    raise ArgumentError, "option redefined `#{i}'"</div><div class='del'>-	  end</div><div class='del'>-	rescue</div><div class='del'>-	  @canonical_names.clear</div><div class='del'>-	  @argument_flags.clear</div><div class='del'>-	  raise</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	#</div><div class='del'>-	# Register the option (`i') to the `@canonical_names' and </div><div class='del'>-	# `@canonical_names' Hashes.</div><div class='del'>-	#</div><div class='del'>-	if canonical_name == nil</div><div class='del'>-	  canonical_name = i</div><div class='del'>-	end</div><div class='del'>-	@canonical_names[i] = canonical_name</div><div class='del'>-	@argument_flags[i] = argument_flag</div><div class='del'>-      end</div><div class='del'>-      raise ArgumentError, "no option name" if canonical_name == nil</div><div class='del'>-    end</div><div class='del'>-    return self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Set/Unset `quiet' mode.</div><div class='del'>-  #</div><div class='del'>-  attr_writer :quiet</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Return the flag of `quiet' mode.</div><div class='del'>-  #</div><div class='del'>-  attr_reader :quiet</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # `quiet?' is an alias of `quiet'.</div><div class='del'>-  #</div><div class='del'>-  alias quiet? quiet</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Explicitly terminate option processing.</div><div class='del'>-  #</div><div class='del'>-  def terminate</div><div class='del'>-    return nil if @status == STATUS_TERMINATED</div><div class='del'>-    raise RuntimeError, "an error has occured" if @error != nil</div><div class='del'>-</div><div class='del'>-    @status = STATUS_TERMINATED</div><div class='del'>-    @non_option_arguments.reverse_each do |argument|</div><div class='del'>-      ARGV.unshift(argument)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @canonical_names = nil</div><div class='del'>-    @argument_flags = nil</div><div class='del'>-    @rest_singles = nil</div><div class='del'>-    @non_option_arguments = nil</div><div class='del'>-</div><div class='del'>-    return self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns true if option processing has terminated, false otherwise.</div><div class='del'>-  #</div><div class='del'>-  def terminated?</div><div class='del'>-    return @status == STATUS_TERMINATED</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Set an error (protected).</div><div class='del'>-  #</div><div class='del'>-  def set_error(type, message)</div><div class='del'>-    $deferr.print("#{$0}: #{message}\n") if !@quiet</div><div class='del'>-</div><div class='del'>-    @error = type</div><div class='del'>-    @error_message = message</div><div class='del'>-    @canonical_names = nil</div><div class='del'>-    @argument_flags = nil</div><div class='del'>-    @rest_singles = nil</div><div class='del'>-    @non_option_arguments = nil</div><div class='del'>-</div><div class='del'>-    raise type, message</div><div class='del'>-  end</div><div class='del'>-  protected :set_error</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Examine whether an option processing is failed.</div><div class='del'>-  #</div><div class='del'>-  attr_reader :error</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # `error?' is an alias of `error'.</div><div class='del'>-  #</div><div class='del'>-  alias error? error</div><div class='del'>-</div><div class='del'>-  # Return the appropriate error message in POSIX-defined format.</div><div class='del'>-  # If no error has occurred, returns nil.</div><div class='del'>-  #</div><div class='del'>-  def error_message</div><div class='del'>-    return @error_message</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Get next option name and its argument, as an Array of two elements.</div><div class='del'>-  #</div><div class='del'>-  # The option name is always converted to the first (preferred)</div><div class='del'>-  # name given in the original options to GetoptLong.new.</div><div class='del'>-  #</div><div class='del'>-  # Example: ['--option', 'value']</div><div class='del'>-  #</div><div class='del'>-  # Returns nil if the processing is complete (as determined by</div><div class='del'>-  # STATUS_TERMINATED).</div><div class='del'>-  #</div><div class='del'>-  def get</div><div class='del'>-    option_name, option_argument = nil, ''</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Check status.</div><div class='del'>-    #</div><div class='del'>-    return nil if @error != nil</div><div class='del'>-    case @status</div><div class='del'>-    when STATUS_YET</div><div class='del'>-      @status = STATUS_STARTED</div><div class='del'>-    when STATUS_TERMINATED</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Get next option argument.</div><div class='del'>-    #</div><div class='del'>-    if 0 &lt; @rest_singles.length</div><div class='del'>-      argument = '-' + @rest_singles</div><div class='del'>-    elsif (ARGV.length == 0)</div><div class='del'>-      terminate</div><div class='del'>-      return nil</div><div class='del'>-    elsif @ordering == PERMUTE</div><div class='del'>-      while 0 &lt; ARGV.length &amp;&amp; ARGV[0] !~ /^-./</div><div class='del'>-	@non_option_arguments.push(ARGV.shift)</div><div class='del'>-      end</div><div class='del'>-      if ARGV.length == 0</div><div class='del'>-	terminate</div><div class='del'>-	return nil</div><div class='del'>-      end</div><div class='del'>-      argument = ARGV.shift</div><div class='del'>-    elsif @ordering == REQUIRE_ORDER </div><div class='del'>-      if (ARGV[0] !~ /^-./)</div><div class='del'>-	terminate</div><div class='del'>-	return nil</div><div class='del'>-      end</div><div class='del'>-      argument = ARGV.shift</div><div class='del'>-    else</div><div class='del'>-      argument = ARGV.shift</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Check the special argument `--'.</div><div class='del'>-    # `--' indicates the end of the option list.</div><div class='del'>-    #</div><div class='del'>-    if argument == '--' &amp;&amp; @rest_singles.length == 0</div><div class='del'>-      terminate</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Check for long and short options.</div><div class='del'>-    #</div><div class='del'>-    if argument =~ /^(--[^=]+)/ &amp;&amp; @rest_singles.length == 0</div><div class='del'>-      #</div><div class='del'>-      # This is a long style option, which start with `--'.</div><div class='del'>-      #</div><div class='del'>-      pattern = $1</div><div class='del'>-      if @canonical_names.include?(pattern)</div><div class='del'>-	option_name = pattern</div><div class='del'>-      else</div><div class='del'>-	#</div><div class='del'>-	# The option `option_name' is not registered in `@canonical_names'.</div><div class='del'>-	# It may be an abbreviated.</div><div class='del'>-	#</div><div class='del'>-	match_count = 0</div><div class='del'>-	@canonical_names.each_key do |key|</div><div class='del'>-	  if key.index(pattern) == 0</div><div class='del'>-	    option_name = key</div><div class='del'>-	    match_count += 1</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	if 2 &lt;= match_count</div><div class='del'>-	  set_error(AmbigousOption, "option `#{argument}' is ambiguous")</div><div class='del'>-	elsif match_count == 0</div><div class='del'>-	  set_error(InvalidOption, "unrecognized option `#{argument}'")</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Check an argument to the option.</div><div class='del'>-      #</div><div class='del'>-      if @argument_flags[option_name] == REQUIRED_ARGUMENT</div><div class='del'>-	if argument =~ /=(.*)$/</div><div class='del'>-	  option_argument = $1</div><div class='del'>-	elsif 0 &lt; ARGV.length</div><div class='del'>-	  option_argument = ARGV.shift</div><div class='del'>-	else</div><div class='del'>-	  set_error(MissingArgument,</div><div class='del'>-	            "option `#{argument}' requires an argument")</div><div class='del'>-	end</div><div class='del'>-      elsif @argument_flags[option_name] == OPTIONAL_ARGUMENT</div><div class='del'>-	if argument =~ /=(.*)$/</div><div class='del'>-	  option_argument = $1</div><div class='del'>-	elsif 0 &lt; ARGV.length &amp;&amp; ARGV[0] !~ /^-./</div><div class='del'>-	  option_argument = ARGV.shift</div><div class='del'>-	else</div><div class='del'>-	  option_argument = ''</div><div class='del'>-	end</div><div class='del'>-      elsif argument =~ /=(.*)$/</div><div class='del'>-	set_error(NeedlessArgument,</div><div class='del'>-		  "option `#{option_name}' doesn't allow an argument")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    elsif argument =~ /^(-(.))(.*)/</div><div class='del'>-      #</div><div class='del'>-      # This is a short style option, which start with `-' (not `--').</div><div class='del'>-      # Short options may be catenated (e.g. `-l -g' is equivalent to</div><div class='del'>-      # `-lg').</div><div class='del'>-      #</div><div class='del'>-      option_name, ch, @rest_singles = $1, $2, $3</div><div class='del'>-</div><div class='del'>-      if @canonical_names.include?(option_name)</div><div class='del'>-	#</div><div class='del'>-	# The option `option_name' is found in `@canonical_names'.</div><div class='del'>-	# Check its argument.</div><div class='del'>-	#</div><div class='del'>-	if @argument_flags[option_name] == REQUIRED_ARGUMENT</div><div class='del'>-	  if 0 &lt; @rest_singles.length</div><div class='del'>-	    option_argument = @rest_singles</div><div class='del'>-	    @rest_singles = ''</div><div class='del'>-	  elsif 0 &lt; ARGV.length</div><div class='del'>-	    option_argument = ARGV.shift</div><div class='del'>-	  else</div><div class='del'>-	    # 1003.2 specifies the format of this message.</div><div class='del'>-	    set_error(MissingArgument, "option requires an argument -- #{ch}")</div><div class='del'>-	  end</div><div class='del'>-	elsif @argument_flags[option_name] == OPTIONAL_ARGUMENT</div><div class='del'>-	  if 0 &lt; @rest_singles.length</div><div class='del'>-	    option_argument = @rest_singles</div><div class='del'>-	    @rest_singles = ''</div><div class='del'>-	  elsif 0 &lt; ARGV.length &amp;&amp; ARGV[0] !~ /^-./</div><div class='del'>-	    option_argument = ARGV.shift</div><div class='del'>-	  else</div><div class='del'>-	    option_argument = ''</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	#</div><div class='del'>-	# This is an invalid option.</div><div class='del'>-	# 1003.2 specifies the format of this message.</div><div class='del'>-	#</div><div class='del'>-	if ENV.include?('POSIXLY_CORRECT')</div><div class='del'>-	  set_error(InvalidOption, "illegal option -- #{ch}")</div><div class='del'>-	else</div><div class='del'>-	  set_error(InvalidOption, "invalid option -- #{ch}")</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      #</div><div class='del'>-      # This is a non-option argument.</div><div class='del'>-      # Only RETURN_IN_ORDER falled into here.</div><div class='del'>-      #</div><div class='del'>-      return '', argument</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    return @canonical_names[option_name], option_argument</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # `get_option' is an alias of `get'.</div><div class='del'>-  #</div><div class='del'>-  alias get_option get</div><div class='del'>-</div><div class='del'>-  # Iterator version of `get'.</div><div class='del'>-  #</div><div class='del'>-  # The block is called repeatedly with two arguments:</div><div class='del'>-  # The first is the option name.</div><div class='del'>-  # The second is the argument which followed it (if any). </div><div class='del'>-  # Example: ('--opt', 'value')</div><div class='del'>-  #</div><div class='del'>-  # The option name is always converted to the first (preferred)</div><div class='del'>-  # name given in the original options to GetoptLong.new.</div><div class='del'>-  #</div><div class='del'>-  def each</div><div class='del'>-    loop do</div><div class='del'>-      option_name, option_argument = get_option</div><div class='del'>-      break if option_name == nil</div><div class='del'>-      yield option_name, option_argument</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # `each_option' is an alias of `each'.</div><div class='del'>-  #</div><div class='del'>-  alias each_option each</div><div class='del'>-end</div><div class='head'>diff --git a/lib/getopts.rb b/lib/getopts.rb<br/>deleted file mode 100644<br/>index 7124269351..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/getopts.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/getopts.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,127 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#               getopts.rb - </div><div class='del'>-#                       $Release Version: $</div><div class='del'>-#                       $Revision$</div><div class='del'>-#                       $Date$</div><div class='del'>-#                       by Yasuo OHBA(SHL Japan Inc. Technology Dept.)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-# this is obsolete; use getoptlong</div><div class='del'>-#</div><div class='del'>-# 2000-03-21</div><div class='del'>-# modified by Minero Aoki &lt;aamine@dp.u-netsurf.ne.jp&gt;</div><div class='del'>-#</div><div class='del'>-# 2002-03-05</div><div class='del'>-# rewritten by Akinori MUSHA &lt;knu@ruby-lang.org&gt;</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-warn "Warning:#{caller[0].sub(/:in `.*'\z/, '')}: getopts is deprecated after Ruby 1.8.1; use optparse instead" if caller[0] and $VERBOSE</div><div class='del'>-</div><div class='del'>-$RCS_ID=%q$Header$</div><div class='del'>-</div><div class='del'>-# getopts is obsolete. Use GetoptLong.</div><div class='del'>-</div><div class='del'>-def getopts(single_options, *options)</div><div class='del'>-  boolopts = {}</div><div class='del'>-  valopts = {}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # set defaults</div><div class='del'>-  #</div><div class='del'>-  single_options.scan(/.:?/) do |opt|</div><div class='del'>-    if opt.size == 1</div><div class='del'>-      boolopts[opt] = false</div><div class='del'>-    else</div><div class='del'>-      valopts[opt[0, 1]] = nil</div><div class='del'>-    end</div><div class='del'>-  end if single_options</div><div class='del'>-</div><div class='del'>-  options.each do |arg|</div><div class='del'>-    opt, val = arg.split(':', 2)</div><div class='del'>-</div><div class='del'>-    if val</div><div class='del'>-      valopts[opt] = val.empty? ? nil : val</div><div class='del'>-    else</div><div class='del'>-      boolopts[opt] = false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # scan</div><div class='del'>-  #</div><div class='del'>-  c = 0</div><div class='del'>-  argv = ARGV</div><div class='del'>-</div><div class='del'>-  while arg = argv.shift</div><div class='del'>-    case arg</div><div class='del'>-    when /\A--(.*)/</div><div class='del'>-      if $1.empty?			# xinit -- -bpp 24</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      opt, val = $1.split('=', 2)</div><div class='del'>-</div><div class='del'>-      if opt.size == 1</div><div class='del'>-	argv.unshift arg</div><div class='del'>-	return nil</div><div class='del'>-      elsif valopts.key? opt		# imclean --src +trash</div><div class='del'>-	valopts[opt] = val || argv.shift or return nil</div><div class='del'>-      elsif boolopts.key? opt		# ruby --verbose</div><div class='del'>-	boolopts[opt] = true</div><div class='del'>-      else</div><div class='del'>-	argv.unshift arg</div><div class='del'>-	return nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      c += 1</div><div class='del'>-    when /\A-(.+)/</div><div class='del'>-      opts = $1</div><div class='del'>-</div><div class='del'>-      until opts.empty?</div><div class='del'>-	opt = opts.slice!(0, 1)</div><div class='del'>-</div><div class='del'>-	if valopts.key? opt</div><div class='del'>-	  val = opts</div><div class='del'>-</div><div class='del'>-	  if val.empty?			# ruby -e 'p $:'</div><div class='del'>-	    valopts[opt] = argv.shift or return nil</div><div class='del'>-	  else				# cc -ohello ...</div><div class='del'>-	    valopts[opt] = val</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-	  c += 1</div><div class='del'>-	  break</div><div class='del'>-	elsif boolopts.key? opt</div><div class='del'>-	  boolopts[opt] = true		# ruby -h</div><div class='del'>-	  c += 1</div><div class='del'>-	else</div><div class='del'>-	  argv.unshift arg</div><div class='del'>-	  return nil</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      argv.unshift arg</div><div class='del'>-      break</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # set</div><div class='del'>-  #</div><div class='del'>-  $OPT = {}</div><div class='del'>-</div><div class='del'>-  boolopts.each do |opt, val|</div><div class='del'>-    $OPT[opt] = val</div><div class='del'>-</div><div class='del'>-    sopt = opt.gsub(/[^A-Za-z0-9_]/, '_')</div><div class='del'>-    eval "$OPT_#{sopt} = val"</div><div class='del'>-  end</div><div class='del'>-  valopts.each do |opt, val|</div><div class='del'>-    $OPT[opt] = val</div><div class='del'>-</div><div class='del'>-    sopt = opt.gsub(/[^A-Za-z0-9_]/, '_')</div><div class='del'>-    eval "$OPT_#{sopt} = val"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  c</div><div class='del'>-end</div><div class='head'>diff --git a/lib/gserver.rb b/lib/gserver.rb<br/>deleted file mode 100644<br/>index eb5f31b7b3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/gserver.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/gserver.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,253 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Copyright (C) 2001 John W. Small All Rights Reserved</div><div class='del'>-#</div><div class='del'>-# Author::        John W. Small</div><div class='del'>-# Documentation:: Gavin Sinclair</div><div class='del'>-# Licence::       Freeware.</div><div class='del'>-#</div><div class='del'>-# See the class GServer for documentation.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "socket"</div><div class='del'>-require "thread"</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# GServer implements a generic server, featuring thread pool management,</div><div class='del'>-# simple logging, and multi-server management.  See HttpServer in </div><div class='del'>-# &lt;tt&gt;xmlrpc/httpserver.rb&lt;/tt&gt; in the Ruby standard library for an example of</div><div class='del'>-# GServer in action.</div><div class='del'>-#</div><div class='del'>-# Any kind of application-level server can be implemented using this class.</div><div class='del'>-# It accepts multiple simultaneous connections from clients, up to an optional</div><div class='del'>-# maximum number.  Several _services_ (i.e. one service per TCP port) can be</div><div class='del'>-# run simultaneously, and stopped at any time through the class method</div><div class='del'>-# &lt;tt&gt;GServer.stop(port)&lt;/tt&gt;.  All the threading issues are handled, saving</div><div class='del'>-# you the effort.  All events are optionally logged, but you can provide your</div><div class='del'>-# own event handlers if you wish.</div><div class='del'>-#</div><div class='del'>-# === Example</div><div class='del'>-#</div><div class='del'>-# Using GServer is simple.  Below we implement a simple time server, run it,</div><div class='del'>-# query it, and shut it down.  Try this code in +irb+:</div><div class='del'>-#</div><div class='del'>-#   require 'gserver'</div><div class='del'>-#</div><div class='del'>-#   #</div><div class='del'>-#   # A server that returns the time in seconds since 1970.</div><div class='del'>-#   # </div><div class='del'>-#   class TimeServer &lt; GServer</div><div class='del'>-#     def initialize(port=10001, *args)</div><div class='del'>-#       super(port, *args)</div><div class='del'>-#     end</div><div class='del'>-#     def serve(io)</div><div class='del'>-#       io.puts(Time.now.to_i)</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-#   # Run the server with logging enabled (it's a separate thread).</div><div class='del'>-#   server = TimeServer.new</div><div class='del'>-#   server.audit = true                  # Turn logging on.</div><div class='del'>-#   server.start </div><div class='del'>-#</div><div class='del'>-#   # *** Now point your browser to http://localhost:10001 to see it working ***</div><div class='del'>-#</div><div class='del'>-#   # See if it's still running. </div><div class='del'>-#   GServer.in_service?(10001)           # -&gt; true</div><div class='del'>-#   server.stopped?                      # -&gt; false</div><div class='del'>-#</div><div class='del'>-#   # Shut the server down gracefully.</div><div class='del'>-#   server.shutdown</div><div class='del'>-#   </div><div class='del'>-#   # Alternatively, stop it immediately.</div><div class='del'>-#   GServer.stop(10001)</div><div class='del'>-#   # or, of course, "server.stop".</div><div class='del'>-#</div><div class='del'>-# All the business of accepting connections and exception handling is taken</div><div class='del'>-# care of.  All we have to do is implement the method that actually serves the</div><div class='del'>-# client.</div><div class='del'>-#</div><div class='del'>-# === Advanced</div><div class='del'>-#</div><div class='del'>-# As the example above shows, the way to use GServer is to subclass it to</div><div class='del'>-# create a specific server, overriding the +serve+ method.  You can override</div><div class='del'>-# other methods as well if you wish, perhaps to collect statistics, or emit</div><div class='del'>-# more detailed logging.</div><div class='del'>-#</div><div class='del'>-#   connecting</div><div class='del'>-#   disconnecting</div><div class='del'>-#   starting</div><div class='del'>-#   stopping</div><div class='del'>-#</div><div class='del'>-# The above methods are only called if auditing is enabled.</div><div class='del'>-#</div><div class='del'>-# You can also override +log+ and +error+ if, for example, you wish to use a</div><div class='del'>-# more sophisticated logging system.</div><div class='del'>-#</div><div class='del'>-class GServer</div><div class='del'>-</div><div class='del'>-  DEFAULT_HOST = "127.0.0.1"</div><div class='del'>-</div><div class='del'>-  def serve(io)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  @@services = {}   # Hash of opened ports, i.e. services</div><div class='del'>-  @@servicesMutex = Mutex.new</div><div class='del'>-</div><div class='del'>-  def GServer.stop(port, host = DEFAULT_HOST)</div><div class='del'>-    @@servicesMutex.synchronize {</div><div class='del'>-      @@services[host][port].stop</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def GServer.in_service?(port, host = DEFAULT_HOST)</div><div class='del'>-    @@services.has_key?(host) and</div><div class='del'>-      @@services[host].has_key?(port)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stop</div><div class='del'>-    @connectionsMutex.synchronize  {</div><div class='del'>-      if @tcpServerThread</div><div class='del'>-        @tcpServerThread.raise "stop"</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stopped?</div><div class='del'>-    @tcpServerThread == nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def shutdown</div><div class='del'>-    @shutdown = true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def connections</div><div class='del'>-    @connections.size</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def join</div><div class='del'>-    @tcpServerThread.join if @tcpServerThread</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  attr_reader :port, :host, :maxConnections</div><div class='del'>-  attr_accessor :stdlog, :audit, :debug</div><div class='del'>-</div><div class='del'>-  def connecting(client)</div><div class='del'>-    addr = client.peeraddr</div><div class='del'>-    log("#{self.class.to_s} #{@host}:#{@port} client:#{addr[1]} " +</div><div class='del'>-        "#{addr[2]}&lt;#{addr[3]}&gt; connect")</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def disconnecting(clientPort)</div><div class='del'>-    log("#{self.class.to_s} #{@host}:#{@port} " +</div><div class='del'>-      "client:#{clientPort} disconnect")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  protected :connecting, :disconnecting</div><div class='del'>-</div><div class='del'>-  def starting()</div><div class='del'>-    log("#{self.class.to_s} #{@host}:#{@port} start")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def stopping()</div><div class='del'>-    log("#{self.class.to_s} #{@host}:#{@port} stop")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  protected :starting, :stopping</div><div class='del'>-</div><div class='del'>-  def error(detail)</div><div class='del'>-    log(detail.backtrace.join("\n"))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def log(msg)</div><div class='del'>-    if @stdlog</div><div class='del'>-      @stdlog.puts("[#{Time.new.ctime}] %s" % msg)</div><div class='del'>-      @stdlog.flush</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  protected :error, :log</div><div class='del'>-</div><div class='del'>-  def initialize(port, host = DEFAULT_HOST, maxConnections = 4,</div><div class='del'>-    stdlog = $stderr, audit = false, debug = false)</div><div class='del'>-    @tcpServerThread = nil</div><div class='del'>-    @port = port</div><div class='del'>-    @host = host</div><div class='del'>-    @maxConnections = maxConnections</div><div class='del'>-    @connections = []</div><div class='del'>-    @connectionsMutex = Mutex.new</div><div class='del'>-    @connectionsCV = ConditionVariable.new</div><div class='del'>-    @stdlog = stdlog</div><div class='del'>-    @audit = audit</div><div class='del'>-    @debug = debug</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def start(maxConnections = -1)</div><div class='del'>-    raise "running" if !stopped?</div><div class='del'>-    @shutdown = false</div><div class='del'>-    @maxConnections = maxConnections if maxConnections &gt; 0</div><div class='del'>-    @@servicesMutex.synchronize  {</div><div class='del'>-      if GServer.in_service?(@port,@host)</div><div class='del'>-        raise "Port already in use: #{host}:#{@port}!"</div><div class='del'>-      end</div><div class='del'>-      @tcpServer = TCPServer.new(@host,@port)</div><div class='del'>-      @port = @tcpServer.addr[1]</div><div class='del'>-      @@services[@host] = {} unless @@services.has_key?(@host)</div><div class='del'>-      @@services[@host][@port] = self;</div><div class='del'>-    }</div><div class='del'>-    @tcpServerThread = Thread.new {</div><div class='del'>-      begin</div><div class='del'>-        starting if @audit</div><div class='del'>-        while !@shutdown</div><div class='del'>-          @connectionsMutex.synchronize  {</div><div class='del'>-             while @connections.size &gt;= @maxConnections</div><div class='del'>-               @connectionsCV.wait(@connectionsMutex)</div><div class='del'>-             end</div><div class='del'>-          }</div><div class='del'>-          client = @tcpServer.accept</div><div class='del'>-          @connections &lt;&lt; Thread.new(client)  { |myClient|</div><div class='del'>-            begin</div><div class='del'>-              myPort = myClient.peeraddr[1]</div><div class='del'>-              serve(myClient) if !@audit or connecting(myClient)</div><div class='del'>-            rescue =&gt; detail</div><div class='del'>-              error(detail) if @debug</div><div class='del'>-            ensure</div><div class='del'>-              begin</div><div class='del'>-                myClient.close</div><div class='del'>-              rescue</div><div class='del'>-              end</div><div class='del'>-              @connectionsMutex.synchronize {</div><div class='del'>-                @connections.delete(Thread.current)</div><div class='del'>-                @connectionsCV.signal</div><div class='del'>-              }</div><div class='del'>-              disconnecting(myPort) if @audit</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      rescue =&gt; detail</div><div class='del'>-        error(detail) if @debug</div><div class='del'>-      ensure</div><div class='del'>-        begin</div><div class='del'>-          @tcpServer.close</div><div class='del'>-        rescue</div><div class='del'>-        end</div><div class='del'>-        if @shutdown</div><div class='del'>-          @connectionsMutex.synchronize  {</div><div class='del'>-             while @connections.size &gt; 0</div><div class='del'>-               @connectionsCV.wait(@connectionsMutex)</div><div class='del'>-             end</div><div class='del'>-          }</div><div class='del'>-        else</div><div class='del'>-          @connections.each { |c| c.raise "stop" }</div><div class='del'>-        end</div><div class='del'>-        @tcpServerThread = nil</div><div class='del'>-        @@servicesMutex.synchronize  {</div><div class='del'>-          @@services[@host].delete(@port)</div><div class='del'>-        }</div><div class='del'>-        stopping if @audit</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'>-end</div><div class='head'>diff --git a/lib/importenv.rb b/lib/importenv.rb<br/>deleted file mode 100644<br/>index 8e1ba33b1d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/importenv.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/importenv.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-# importenv.rb -- imports environment variables as global variables, Perlish ;(</div><div class='del'>-#</div><div class='del'>-# Usage:</div><div class='del'>-#</div><div class='del'>-#  require 'importenv'</div><div class='del'>-#  p $USER</div><div class='del'>-#  $USER = "matz"</div><div class='del'>-#  p ENV["USER"]</div><div class='del'>-</div><div class='del'>-warn "Warning:#{caller[0].sub(/:in `.*'\z/, '')}: importenv is deprecated after Ruby 1.8.1 (no replacement)"</div><div class='del'>-</div><div class='del'>-for k,v in ENV</div><div class='del'>-  next unless /^[a-zA-Z][_a-zA-Z0-9]*/ =~ k</div><div class='del'>-  eval &lt;&lt;EOS</div><div class='del'>-  $#{k} = v</div><div class='del'>-  trace_var "$#{k}", proc{|v|</div><div class='del'>-    ENV[%q!#{k}!] = v</div><div class='del'>-    $#{k} = v</div><div class='del'>-    if v == nil</div><div class='del'>-      untrace_var "$#{k}"</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-EOS</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  p $TERM</div><div class='del'>-  $TERM = nil</div><div class='del'>-  p $TERM</div><div class='del'>-  p ENV["TERM"]</div><div class='del'>-  $TERM = "foo"</div><div class='del'>-  p ENV["TERM"]</div><div class='del'>-end</div><div class='head'>diff --git a/lib/ipaddr.rb b/lib/ipaddr.rb<br/>deleted file mode 100644<br/>index 23d74af451..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/ipaddr.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/ipaddr.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,814 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# ipaddr.rb - A class to manipulate an IP address</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 2002 Hajimu UMEMOTO &lt;ume@mahoroba.org&gt;.</div><div class='del'>-# Copyright (c) 2007 Akinori MUSHA &lt;knu@iDaemons.org&gt;.</div><div class='del'>-# All rights reserved.</div><div class='del'>-#</div><div class='del'>-# You can redistribute and/or modify it under the same terms as Ruby.</div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-#</div><div class='del'>-# Contact:</div><div class='del'>-#   - Akinori MUSHA &lt;knu@iDaemons.org&gt; (current maintainer)</div><div class='del'>-#</div><div class='del'>-# TODO:</div><div class='del'>-#   - scope_id support</div><div class='del'>-#</div><div class='del'>-require 'socket'</div><div class='del'>-</div><div class='del'>-unless Socket.const_defined? "AF_INET6"</div><div class='del'>-  class Socket</div><div class='del'>-    AF_INET6 = Object.new</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; IPSocket</div><div class='del'>-    def valid_v4?(addr)</div><div class='del'>-      if /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z/ =~ addr</div><div class='del'>-        return $~.captures.all? {|i| i.to_i &lt; 256}</div><div class='del'>-      end</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def valid_v6?(addr)</div><div class='del'>-      # IPv6 (normal)</div><div class='del'>-      return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*\Z/ =~ addr</div><div class='del'>-      return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr</div><div class='del'>-      return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr</div><div class='del'>-      # IPv6 (IPv4 compat)</div><div class='del'>-      return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr &amp;&amp; valid_v4?($')</div><div class='del'>-      return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr &amp;&amp; valid_v4?($')</div><div class='del'>-      return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr &amp;&amp; valid_v4?($')</div><div class='del'>-</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def valid?(addr)</div><div class='del'>-      valid_v4?(addr) || valid_v6?(addr)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias getaddress_orig getaddress</div><div class='del'>-    def getaddress(s)</div><div class='del'>-      if valid?(s)</div><div class='del'>-        s</div><div class='del'>-      elsif /\A[-A-Za-z\d.]+\Z/ =~ s</div><div class='del'>-        getaddress_orig(s)</div><div class='del'>-      else</div><div class='del'>-        raise ArgumentError, "invalid address"</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'>-# IPAddr provides a set of methods to manipulate an IP address.  Both IPv4 and</div><div class='del'>-# IPv6 are supported.</div><div class='del'>-#</div><div class='del'>-# == Example</div><div class='del'>-#</div><div class='del'>-#   require 'ipaddr'</div><div class='del'>-#   </div><div class='del'>-#   ipaddr1 = IPAddr.new "3ffe:505:2::1"</div><div class='del'>-#   </div><div class='del'>-#   p ipaddr1			#=&gt; #&lt;IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff&gt;</div><div class='del'>-#   </div><div class='del'>-#   p ipaddr1.to_s		#=&gt; "3ffe:505:2::1"</div><div class='del'>-#   </div><div class='del'>-#   ipaddr2 = ipaddr1.mask(48)	#=&gt; #&lt;IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000&gt;</div><div class='del'>-#   </div><div class='del'>-#   p ipaddr2.to_s		#=&gt; "3ffe:505:2::"</div><div class='del'>-#   </div><div class='del'>-#   ipaddr3 = IPAddr.new "192.168.2.0/24"</div><div class='del'>-#   </div><div class='del'>-#   p ipaddr3			#=&gt; #&lt;IPAddr: IPv4:192.168.2.0/255.255.255.0&gt;</div><div class='del'>-</div><div class='del'>-class IPAddr</div><div class='del'>-</div><div class='del'>-  IN4MASK = 0xffffffff</div><div class='del'>-  IN6MASK = 0xffffffffffffffffffffffffffffffff</div><div class='del'>-  IN6FORMAT = (["%.4x"] * 8).join(':')</div><div class='del'>-</div><div class='del'>-  # Returns the address family of this IP address.</div><div class='del'>-  attr :family</div><div class='del'>-</div><div class='del'>-  # Creates a new ipaddr containing the given network byte ordered</div><div class='del'>-  # string form of an IP address.</div><div class='del'>-  def IPAddr::new_ntoh(addr)</div><div class='del'>-    return IPAddr.new(IPAddr::ntop(addr))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Convert a network byte ordered string form of an IP address into</div><div class='del'>-  # human readable form.</div><div class='del'>-  def IPAddr::ntop(addr)</div><div class='del'>-    case addr.size</div><div class='del'>-    when 4</div><div class='del'>-      s = addr.unpack('C4').join('.')</div><div class='del'>-    when 16</div><div class='del'>-      s = IN6FORMAT % addr.unpack('n8')</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-    return s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by bitwise AND.</div><div class='del'>-  def &amp;(other)</div><div class='del'>-    return self.clone.set(@addr &amp; coerce_other(other).to_i)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by bitwise OR.</div><div class='del'>-  def |(other)</div><div class='del'>-    return self.clone.set(@addr | coerce_other(other).to_i)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by bitwise right-shift.</div><div class='del'>-  def &gt;&gt;(num)</div><div class='del'>-    return self.clone.set(@addr &gt;&gt; num)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by bitwise left shift.</div><div class='del'>-  def &lt;&lt;(num)</div><div class='del'>-    return self.clone.set(addr_mask(@addr &lt;&lt; num))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by bitwise negation.</div><div class='del'>-  def ~</div><div class='del'>-    return self.clone.set(addr_mask(~@addr))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns true if two ipaddrs are equal.</div><div class='del'>-  def ==(other)</div><div class='del'>-    other = coerce_other(other)</div><div class='del'>-    return @family == other.family &amp;&amp; @addr == other.to_i</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by masking IP address with the given</div><div class='del'>-  # prefixlen/netmask. (e.g. 8, 64, "255.255.255.0", etc.)</div><div class='del'>-  def mask(prefixlen)</div><div class='del'>-    return self.clone.mask!(prefixlen)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns true if the given ipaddr is in the range.</div><div class='del'>-  #</div><div class='del'>-  # e.g.:</div><div class='del'>-  #   require 'ipaddr'</div><div class='del'>-  #   net1 = IPAddr.new("192.168.2.0/24")</div><div class='del'>-  #   net2 = IPAddr.new("192.168.2.100")</div><div class='del'>-  #   net3 = IPAddr.new("192.168.3.0")</div><div class='del'>-  #   p net1.include?(net2)	#=&gt; true</div><div class='del'>-  #   p net1.include?(net3)	#=&gt; false</div><div class='del'>-  def include?(other)</div><div class='del'>-    other = coerce_other(other)</div><div class='del'>-    if ipv4_mapped?</div><div class='del'>-      if (@mask_addr &gt;&gt; 32) != 0xffffffffffffffffffffffff</div><div class='del'>-	return false</div><div class='del'>-      end</div><div class='del'>-      mask_addr = (@mask_addr &amp; IN4MASK)</div><div class='del'>-      addr = (@addr &amp; IN4MASK)</div><div class='del'>-      family = Socket::AF_INET</div><div class='del'>-    else</div><div class='del'>-      mask_addr = @mask_addr</div><div class='del'>-      addr = @addr</div><div class='del'>-      family = @family</div><div class='del'>-    end</div><div class='del'>-    if other.ipv4_mapped?</div><div class='del'>-      other_addr = (other.to_i &amp; IN4MASK)</div><div class='del'>-      other_family = Socket::AF_INET</div><div class='del'>-    else</div><div class='del'>-      other_addr = other.to_i</div><div class='del'>-      other_family = other.family</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if family != other_family</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-    return ((addr &amp; mask_addr) == (other_addr &amp; mask_addr))</div><div class='del'>-  end</div><div class='del'>-  alias === include?</div><div class='del'>-</div><div class='del'>-  # Returns the integer representation of the ipaddr.</div><div class='del'>-  def to_i</div><div class='del'>-    return @addr</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a string containing the IP address representation.</div><div class='del'>-  def to_s</div><div class='del'>-    str = to_string</div><div class='del'>-    return str if ipv4?</div><div class='del'>-</div><div class='del'>-    str.gsub!(/\b0{1,3}([\da-f]+)\b/i, '\1')</div><div class='del'>-    loop do</div><div class='del'>-      break if str.sub!(/\A0:0:0:0:0:0:0:0\Z/, '::')</div><div class='del'>-      break if str.sub!(/\b0:0:0:0:0:0:0\b/, ':')</div><div class='del'>-      break if str.sub!(/\b0:0:0:0:0:0\b/, ':')</div><div class='del'>-      break if str.sub!(/\b0:0:0:0:0\b/, ':')</div><div class='del'>-      break if str.sub!(/\b0:0:0:0\b/, ':')</div><div class='del'>-      break if str.sub!(/\b0:0:0\b/, ':')</div><div class='del'>-      break if str.sub!(/\b0:0\b/, ':')</div><div class='del'>-      break</div><div class='del'>-    end</div><div class='del'>-    str.sub!(/:{3,}/, '::')</div><div class='del'>-</div><div class='del'>-    if /\A::(ffff:)?([\da-f]{1,4}):([\da-f]{1,4})\Z/i =~ str</div><div class='del'>-      str = sprintf('::%s%d.%d.%d.%d', $1, $2.hex / 256, $2.hex % 256, $3.hex / 256, $3.hex % 256)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a string containing the IP address representation in</div><div class='del'>-  # canonical form.</div><div class='del'>-  def to_string</div><div class='del'>-    return _to_string(@addr)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a network byte ordered string form of the IP address.</div><div class='del'>-  def hton</div><div class='del'>-    case @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      return [@addr].pack('N')</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      return (0..7).map { |i|</div><div class='del'>-	(@addr &gt;&gt; (112 - 16 * i)) &amp; 0xffff</div><div class='del'>-      }.pack('n8')</div><div class='del'>-    else</div><div class='del'>-      raise "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns true if the ipaddr is an IPv4 address.</div><div class='del'>-  def ipv4?</div><div class='del'>-    return @family == Socket::AF_INET</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns true if the ipaddr is an IPv6 address.</div><div class='del'>-  def ipv6?</div><div class='del'>-    return @family == Socket::AF_INET6</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns true if the ipaddr is an IPv4-mapped IPv6 address.</div><div class='del'>-  def ipv4_mapped?</div><div class='del'>-    return ipv6? &amp;&amp; (@addr &gt;&gt; 32) == 0xffff</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns true if the ipaddr is an IPv4-compatible IPv6 address.</div><div class='del'>-  def ipv4_compat?</div><div class='del'>-    if !ipv6? || (@addr &gt;&gt; 32) != 0</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-    a = (@addr &amp; IN4MASK)</div><div class='del'>-    return a != 0 &amp;&amp; a != 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by converting the native IPv4 address</div><div class='del'>-  # into an IPv4-mapped IPv6 address.</div><div class='del'>-  def ipv4_mapped</div><div class='del'>-    if !ipv4?</div><div class='del'>-      raise ArgumentError, "not an IPv4 address"</div><div class='del'>-    end</div><div class='del'>-    return self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by converting the native IPv4 address</div><div class='del'>-  # into an IPv4-compatible IPv6 address.</div><div class='del'>-  def ipv4_compat</div><div class='del'>-    if !ipv4?</div><div class='del'>-      raise ArgumentError, "not an IPv4 address"</div><div class='del'>-    end</div><div class='del'>-    return self.clone.set(@addr, Socket::AF_INET6)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a new ipaddr built by converting the IPv6 address into a</div><div class='del'>-  # native IPv4 address.  If the IP address is not an IPv4-mapped or</div><div class='del'>-  # IPv4-compatible IPv6 address, returns self.</div><div class='del'>-  def native</div><div class='del'>-    if !ipv4_mapped? &amp;&amp; !ipv4_compat?</div><div class='del'>-      return self</div><div class='del'>-    end</div><div class='del'>-    return self.clone.set(@addr &amp; IN4MASK, Socket::AF_INET)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a string for DNS reverse lookup.  It returns a string in</div><div class='del'>-  # RFC3172 form for an IPv6 address.</div><div class='del'>-  def reverse</div><div class='del'>-    case @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      return _reverse + ".in-addr.arpa"</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      return ip6_arpa</div><div class='del'>-    else</div><div class='del'>-      raise "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a string for DNS reverse lookup compatible with RFC3172.</div><div class='del'>-  def ip6_arpa</div><div class='del'>-    if !ipv6?</div><div class='del'>-      raise ArgumentError, "not an IPv6 address"</div><div class='del'>-    end</div><div class='del'>-    return _reverse + ".ip6.arpa"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a string for DNS reverse lookup compatible with RFC1886.</div><div class='del'>-  def ip6_int</div><div class='del'>-    if !ipv6?</div><div class='del'>-      raise ArgumentError, "not an IPv6 address"</div><div class='del'>-    end</div><div class='del'>-    return _reverse + ".ip6.int"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns the successor to the ipaddr.</div><div class='del'>-  def succ</div><div class='del'>-    return self.clone.set(@addr + 1, @family)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Compares the ipaddr with another.</div><div class='del'>-  def &lt;=&gt;(other)</div><div class='del'>-    other = coerce_other(other)</div><div class='del'>-</div><div class='del'>-    return nil if other.family != @family</div><div class='del'>-</div><div class='del'>-    return @addr &lt;=&gt; other.to_i</div><div class='del'>-  end</div><div class='del'>-  include Comparable</div><div class='del'>-</div><div class='del'>-  # Creates a Range object for the network address.</div><div class='del'>-  def to_range</div><div class='del'>-    begin_addr = (@addr &amp; @mask_addr)</div><div class='del'>-</div><div class='del'>-    case @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      end_addr = (@addr | (IN4MASK ^ @mask_addr))</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      end_addr = (@addr | (IN6MASK ^ @mask_addr))</div><div class='del'>-    else</div><div class='del'>-      raise "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    return clone.set(begin_addr, @family)..clone.set(end_addr, @family)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Returns a string containing a human-readable representation of the</div><div class='del'>-  # ipaddr. ("#&lt;IPAddr: family:address/mask&gt;")</div><div class='del'>-  def inspect</div><div class='del'>-    case @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      af = "IPv4"</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      af = "IPv6"</div><div class='del'>-    else</div><div class='del'>-      raise "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-    return sprintf("#&lt;%s: %s:%s/%s&gt;", self.class.name,</div><div class='del'>-		   af, _to_string(@addr), _to_string(@mask_addr))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  protected</div><div class='del'>-</div><div class='del'>-  def set(addr, *family)</div><div class='del'>-    case family[0] ? family[0] : @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      if addr &lt; 0 || addr &gt; IN4MASK</div><div class='del'>-	raise ArgumentError, "invalid address"</div><div class='del'>-      end</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      if addr &lt; 0 || addr &gt; IN6MASK</div><div class='del'>-	raise ArgumentError, "invalid address"</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError, "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-    @addr = addr</div><div class='del'>-    if family[0]</div><div class='del'>-      @family = family[0]</div><div class='del'>-    end</div><div class='del'>-    return self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mask!(mask)</div><div class='del'>-    if mask.kind_of?(String)</div><div class='del'>-      if mask =~ /^\d+$/</div><div class='del'>-	prefixlen = mask.to_i</div><div class='del'>-      else</div><div class='del'>-	m = IPAddr.new(mask)</div><div class='del'>-	if m.family != @family</div><div class='del'>-	  raise ArgumentError, "address family is not same"</div><div class='del'>-	end</div><div class='del'>-	@mask_addr = m.to_i</div><div class='del'>-	@addr &amp;= @mask_addr</div><div class='del'>-	return self</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      prefixlen = mask</div><div class='del'>-    end</div><div class='del'>-    case @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      if prefixlen &lt; 0 || prefixlen &gt; 32</div><div class='del'>-	raise ArgumentError, "invalid length"</div><div class='del'>-      end</div><div class='del'>-      masklen = 32 - prefixlen</div><div class='del'>-      @mask_addr = ((IN4MASK &gt;&gt; masklen) &lt;&lt; masklen)</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      if prefixlen &lt; 0 || prefixlen &gt; 128</div><div class='del'>-	raise ArgumentError, "invalid length"</div><div class='del'>-      end</div><div class='del'>-      masklen = 128 - prefixlen</div><div class='del'>-      @mask_addr = ((IN6MASK &gt;&gt; masklen) &lt;&lt; masklen)</div><div class='del'>-    else</div><div class='del'>-      raise "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-    @addr = ((@addr &gt;&gt; masklen) &lt;&lt; masklen)</div><div class='del'>-    return self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  # Creates a new ipaddr object either from a human readable IP</div><div class='del'>-  # address representation in string, or from a packed in_addr value</div><div class='del'>-  # followed by an address family.</div><div class='del'>-  # </div><div class='del'>-  # In the former case, the following are the valid formats that will</div><div class='del'>-  # be recognized: "address", "address/prefixlen" and "address/mask",</div><div class='del'>-  # where IPv6 address may be enclosed in square brackets (`[' and</div><div class='del'>-  # `]').  If a prefixlen or a mask is specified, it returns a masked</div><div class='del'>-  # IP address.  Although the address family is determined</div><div class='del'>-  # automatically from a specified string, you can specify one</div><div class='del'>-  # explicitly by the optional second argument.</div><div class='del'>-  # </div><div class='del'>-  # Otherwise an IP addess is generated from a packed in_addr value</div><div class='del'>-  # and an address family.</div><div class='del'>-  #</div><div class='del'>-  # The IPAddr class defines many methods and operators, and some of</div><div class='del'>-  # those, such as &amp;, |, include? and ==, accept a string, or a packed</div><div class='del'>-  # in_addr value instead of an IPAddr object.</div><div class='del'>-  def initialize(addr = '::', family = Socket::AF_UNSPEC)</div><div class='del'>-    if !addr.kind_of?(String)</div><div class='del'>-      case family</div><div class='del'>-      when Socket::AF_INET, Socket::AF_INET6</div><div class='del'>-        set(addr.to_i, family)</div><div class='del'>-        @mask_addr = (family == Socket::AF_INET) ? IN4MASK : IN6MASK</div><div class='del'>-        return</div><div class='del'>-      when Socket::AF_UNSPEC</div><div class='del'>-	raise ArgumentError, "address family must be specified"</div><div class='del'>-      else</div><div class='del'>-	raise ArgumentError, "unsupported address family: #{family}"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    prefix, prefixlen = addr.split('/')</div><div class='del'>-    if prefix =~ /^\[(.*)\]$/i</div><div class='del'>-      prefix = $1</div><div class='del'>-      family = Socket::AF_INET6</div><div class='del'>-    end</div><div class='del'>-    # It seems AI_NUMERICHOST doesn't do the job.</div><div class='del'>-    #Socket.getaddrinfo(left, nil, Socket::AF_INET6, Socket::SOCK_STREAM, nil,</div><div class='del'>-    #		       Socket::AI_NUMERICHOST)</div><div class='del'>-    begin</div><div class='del'>-      IPSocket.getaddress(prefix)		# test if address is vaild</div><div class='del'>-    rescue</div><div class='del'>-      raise ArgumentError, "invalid address"</div><div class='del'>-    end</div><div class='del'>-    @addr = @family = nil</div><div class='del'>-    if family == Socket::AF_UNSPEC || family == Socket::AF_INET</div><div class='del'>-      @addr = in_addr(prefix)</div><div class='del'>-      if @addr</div><div class='del'>-	@family = Socket::AF_INET</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if !@addr &amp;&amp; (family == Socket::AF_UNSPEC || family == Socket::AF_INET6)</div><div class='del'>-      @addr = in6_addr(prefix)</div><div class='del'>-      @family = Socket::AF_INET6</div><div class='del'>-    end</div><div class='del'>-    if family != Socket::AF_UNSPEC &amp;&amp; @family != family</div><div class='del'>-      raise ArgumentError, "address family mismatch"</div><div class='del'>-    end</div><div class='del'>-    if prefixlen</div><div class='del'>-      mask!(prefixlen)</div><div class='del'>-    else</div><div class='del'>-      @mask_addr = (family == Socket::AF_INET) ? IN4MASK : IN6MASK</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coerce_other(other)</div><div class='del'>-    case other</div><div class='del'>-    when IPAddr</div><div class='del'>-      other</div><div class='del'>-    when String</div><div class='del'>-      self.class.new(other)</div><div class='del'>-    else</div><div class='del'>-      self.class.new(other, @family)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def in_addr(addr)</div><div class='del'>-    if addr =~ /^\d+\.\d+\.\d+\.\d+$/</div><div class='del'>-      return addr.split('.').inject(0) { |i, s|</div><div class='del'>-        i &lt;&lt; 8 | s.to_i</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def in6_addr(left)</div><div class='del'>-    case left</div><div class='del'>-    when /^::ffff:(\d+\.\d+\.\d+\.\d+)$/i</div><div class='del'>-      return in_addr($1) + 0xffff00000000</div><div class='del'>-    when /^::(\d+\.\d+\.\d+\.\d+)$/i</div><div class='del'>-      return in_addr($1)</div><div class='del'>-    when /[^0-9a-f:]/i</div><div class='del'>-      raise ArgumentError, "invalid address"</div><div class='del'>-    when /^(.*)::(.*)$/</div><div class='del'>-      left, right = $1, $2</div><div class='del'>-    else</div><div class='del'>-      right = ''</div><div class='del'>-    end</div><div class='del'>-    l = left.split(':')</div><div class='del'>-    r = right.split(':')</div><div class='del'>-    rest = 8 - l.size - r.size</div><div class='del'>-    if rest &lt; 0</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-    return (l + Array.new(rest, '0') + r).inject(0) { |i, s|</div><div class='del'>-      i &lt;&lt; 16 | s.hex</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def addr_mask(addr)</div><div class='del'>-    case @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      return addr &amp; IN4MASK</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      return addr &amp; IN6MASK</div><div class='del'>-    else</div><div class='del'>-      raise "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _reverse</div><div class='del'>-    case @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      return (0..3).map { |i|</div><div class='del'>-	(@addr &gt;&gt; (8 * i)) &amp; 0xff</div><div class='del'>-      }.join('.')</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      return ("%.32x" % @addr).reverse!.gsub!(/.(?!$)/, '\&amp;.')</div><div class='del'>-    else</div><div class='del'>-      raise "unsupported address family"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def _to_string(addr)</div><div class='del'>-    case @family</div><div class='del'>-    when Socket::AF_INET</div><div class='del'>-      return (0..3).map { |i|</div><div class='del'>-	(addr &gt;&gt; (24 - 8 * i)) &amp; 0xff</div><div class='del'>-      }.join('.')</div><div class='del'>-    when Socket::AF_INET6</div><div class='del'>-      return (("%.32x" % addr).gsub!(/.{4}(?!$)/, '\&amp;:'))</div><div class='del'>-    else</div><div class='del'>-      raise "unsupported address family"</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'>-if $0 == __FILE__</div><div class='del'>-  eval DATA.read, nil, $0, __LINE__+4</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-__END__</div><div class='del'>-</div><div class='del'>-require 'test/unit'</div><div class='del'>-require 'test/unit/ui/console/testrunner'</div><div class='del'>-</div><div class='del'>-class TC_IPAddr &lt; Test::Unit::TestCase</div><div class='del'>-  def test_s_new</div><div class='del'>-    assert_nothing_raised {</div><div class='del'>-      IPAddr.new("3FFE:505:ffff::/48")</div><div class='del'>-      IPAddr.new("0:0:0:1::")</div><div class='del'>-      IPAddr.new("2001:200:300::/48")</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new</div><div class='del'>-    assert_equal("::", a.to_s)</div><div class='del'>-    assert_equal("0000:0000:0000:0000:0000:0000:0000:0000", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET6, a.family)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("0123:4567:89ab:cdef:0ABC:DEF0:1234:5678")</div><div class='del'>-    assert_equal("123:4567:89ab:cdef:abc:def0:1234:5678", a.to_s)</div><div class='del'>-    assert_equal("0123:4567:89ab:cdef:0abc:def0:1234:5678", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET6, a.family)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("3ffe:505:2::/48")</div><div class='del'>-    assert_equal("3ffe:505:2::", a.to_s)</div><div class='del'>-    assert_equal("3ffe:0505:0002:0000:0000:0000:0000:0000", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET6, a.family)</div><div class='del'>-    assert_equal(false, a.ipv4?)</div><div class='del'>-    assert_equal(true, a.ipv6?)</div><div class='del'>-    assert_equal("#&lt;IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000&gt;", a.inspect)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("3ffe:505:2::/ffff:ffff:ffff::")</div><div class='del'>-    assert_equal("3ffe:505:2::", a.to_s)</div><div class='del'>-    assert_equal("3ffe:0505:0002:0000:0000:0000:0000:0000", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET6, a.family)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("0.0.0.0")</div><div class='del'>-    assert_equal("0.0.0.0", a.to_s)</div><div class='del'>-    assert_equal("0.0.0.0", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET, a.family)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("192.168.1.2")</div><div class='del'>-    assert_equal("192.168.1.2", a.to_s)</div><div class='del'>-    assert_equal("192.168.1.2", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET, a.family)</div><div class='del'>-    assert_equal(true, a.ipv4?)</div><div class='del'>-    assert_equal(false, a.ipv6?)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("192.168.1.2/24")</div><div class='del'>-    assert_equal("192.168.1.0", a.to_s)</div><div class='del'>-    assert_equal("192.168.1.0", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET, a.family)</div><div class='del'>-    assert_equal("#&lt;IPAddr: IPv4:192.168.1.0/255.255.255.0&gt;", a.inspect)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("192.168.1.2/255.255.255.0")</div><div class='del'>-    assert_equal("192.168.1.0", a.to_s)</div><div class='del'>-    assert_equal("192.168.1.0", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET, a.family)</div><div class='del'>-</div><div class='del'>-    assert_equal("0:0:0:1::", IPAddr.new("0:0:0:1::").to_s)</div><div class='del'>-    assert_equal("2001:200:300::", IPAddr.new("2001:200:300::/48").to_s)</div><div class='del'>-</div><div class='del'>-    assert_equal("2001:200:300::", IPAddr.new("[2001:200:300::]/48").to_s)</div><div class='del'>-</div><div class='del'>-    [</div><div class='del'>-      ["fe80::1%fxp0"],</div><div class='del'>-      ["::1/255.255.255.0"],</div><div class='del'>-      ["::1:192.168.1.2/120"],</div><div class='del'>-      [IPAddr.new("::1").to_i],</div><div class='del'>-      ["::ffff:192.168.1.2/120", Socket::AF_INET],</div><div class='del'>-      ["[192.168.1.2]/120"],</div><div class='del'>-    ].each { |args|</div><div class='del'>-      assert_raises(ArgumentError) {</div><div class='del'>-	IPAddr.new(*args)</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_s_new_ntoh</div><div class='del'>-    addr = ''</div><div class='del'>-    IPAddr.new("1234:5678:9abc:def0:1234:5678:9abc:def0").hton.each_byte { |c|</div><div class='del'>-      addr += sprintf("%02x", c)</div><div class='del'>-    }</div><div class='del'>-    assert_equal("123456789abcdef0123456789abcdef0", addr)</div><div class='del'>-    addr = ''</div><div class='del'>-    IPAddr.new("123.45.67.89").hton.each_byte { |c|</div><div class='del'>-      addr += sprintf("%02x", c)</div><div class='del'>-    }</div><div class='del'>-    assert_equal(sprintf("%02x%02x%02x%02x", 123, 45, 67, 89), addr)</div><div class='del'>-    a = IPAddr.new("3ffe:505:2::")</div><div class='del'>-    assert_equal("3ffe:505:2::", IPAddr.new_ntoh(a.hton).to_s)</div><div class='del'>-    a = IPAddr.new("192.168.2.1")</div><div class='del'>-    assert_equal("192.168.2.1", IPAddr.new_ntoh(a.hton).to_s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_ipv4_compat</div><div class='del'>-    a = IPAddr.new("::192.168.1.2")</div><div class='del'>-    assert_equal("::192.168.1.2", a.to_s)</div><div class='del'>-    assert_equal("0000:0000:0000:0000:0000:0000:c0a8:0102", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET6, a.family)</div><div class='del'>-    assert_equal(true, a.ipv4_compat?)</div><div class='del'>-    b = a.native</div><div class='del'>-    assert_equal("192.168.1.2", b.to_s)</div><div class='del'>-    assert_equal(Socket::AF_INET, b.family)</div><div class='del'>-    assert_equal(false, b.ipv4_compat?)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("192.168.1.2")</div><div class='del'>-    b = a.ipv4_compat</div><div class='del'>-    assert_equal("::192.168.1.2", b.to_s)</div><div class='del'>-    assert_equal(Socket::AF_INET6, b.family)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_ipv4_mapped</div><div class='del'>-    a = IPAddr.new("::ffff:192.168.1.2")</div><div class='del'>-    assert_equal("::ffff:192.168.1.2", a.to_s)</div><div class='del'>-    assert_equal("0000:0000:0000:0000:0000:ffff:c0a8:0102", a.to_string)</div><div class='del'>-    assert_equal(Socket::AF_INET6, a.family)</div><div class='del'>-    assert_equal(true, a.ipv4_mapped?)</div><div class='del'>-    b = a.native</div><div class='del'>-    assert_equal("192.168.1.2", b.to_s)</div><div class='del'>-    assert_equal(Socket::AF_INET, b.family)</div><div class='del'>-    assert_equal(false, b.ipv4_mapped?)</div><div class='del'>-</div><div class='del'>-    a = IPAddr.new("192.168.1.2")</div><div class='del'>-    b = a.ipv4_mapped</div><div class='del'>-    assert_equal("::ffff:192.168.1.2", b.to_s)</div><div class='del'>-    assert_equal(Socket::AF_INET6, b.family)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_reverse</div><div class='del'>-    assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").reverse)</div><div class='del'>-    assert_equal("1.2.168.192.in-addr.arpa", IPAddr.new("192.168.2.1").reverse)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_ip6_arpa</div><div class='del'>-    assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").ip6_arpa)</div><div class='del'>-    assert_raises(ArgumentError) {</div><div class='del'>-      IPAddr.new("192.168.2.1").ip6_arpa</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_ip6_int</div><div class='del'>-    assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.int", IPAddr.new("3ffe:505:2::f").ip6_int)</div><div class='del'>-    assert_raises(ArgumentError) {</div><div class='del'>-      IPAddr.new("192.168.2.1").ip6_int</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_to_s</div><div class='del'>-    assert_equal("3ffe:0505:0002:0000:0000:0000:0000:0001", IPAddr.new("3ffe:505:2::1").to_string)</div><div class='del'>-    assert_equal("3ffe:505:2::1", IPAddr.new("3ffe:505:2::1").to_s)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TC_Operator &lt; Test::Unit::TestCase</div><div class='del'>-</div><div class='del'>-  IN6MASK32  = "ffff:ffff::"</div><div class='del'>-  IN6MASK128 = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"</div><div class='del'>-</div><div class='del'>-  def setup</div><div class='del'>-    @in6_addr_any = IPAddr.new()</div><div class='del'>-    @a = IPAddr.new("3ffe:505:2::/48")</div><div class='del'>-    @b = IPAddr.new("0:0:0:1::")</div><div class='del'>-    @c = IPAddr.new(IN6MASK32)</div><div class='del'>-  end</div><div class='del'>-  alias set_up setup</div><div class='del'>-</div><div class='del'>-  def test_or</div><div class='del'>-    assert_equal("3ffe:505:2:1::", (@a | @b).to_s)</div><div class='del'>-    a = @a</div><div class='del'>-    a |= @b</div><div class='del'>-    assert_equal("3ffe:505:2:1::", a.to_s)</div><div class='del'>-    assert_equal("3ffe:505:2::", @a.to_s)</div><div class='del'>-    assert_equal("3ffe:505:2:1::",</div><div class='del'>-		 (@a | 0x00000000000000010000000000000000).to_s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_and</div><div class='del'>-    assert_equal("3ffe:505::", (@a &amp; @c).to_s)</div><div class='del'>-    a = @a</div><div class='del'>-    a &amp;= @c</div><div class='del'>-    assert_equal("3ffe:505::", a.to_s)</div><div class='del'>-    assert_equal("3ffe:505:2::", @a.to_s)</div><div class='del'>-    assert_equal("3ffe:505::", (@a &amp; 0xffffffff000000000000000000000000).to_s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_shift_right</div><div class='del'>-    assert_equal("0:3ffe:505:2::", (@a &gt;&gt; 16).to_s)</div><div class='del'>-    a = @a</div><div class='del'>-    a &gt;&gt;= 16</div><div class='del'>-    assert_equal("0:3ffe:505:2::", a.to_s)</div><div class='del'>-    assert_equal("3ffe:505:2::", @a.to_s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_shift_left</div><div class='del'>-    assert_equal("505:2::", (@a &lt;&lt; 16).to_s)</div><div class='del'>-    a = @a</div><div class='del'>-    a &lt;&lt;= 16</div><div class='del'>-    assert_equal("505:2::", a.to_s)</div><div class='del'>-    assert_equal("3ffe:505:2::", @a.to_s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_carrot</div><div class='del'>-    a = ~@in6_addr_any</div><div class='del'>-    assert_equal(IN6MASK128, a.to_s)</div><div class='del'>-    assert_equal("::", @in6_addr_any.to_s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_equal</div><div class='del'>-    assert_equal(true, @a == IPAddr.new("3ffe:505:2::"))</div><div class='del'>-    assert_equal(false, @a == IPAddr.new("3ffe:505:3::"))</div><div class='del'>-    assert_equal(true, @a != IPAddr.new("3ffe:505:3::"))</div><div class='del'>-    assert_equal(false, @a != IPAddr.new("3ffe:505:2::"))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_mask</div><div class='del'>-    a = @a.mask(32)</div><div class='del'>-    assert_equal("3ffe:505::", a.to_s)</div><div class='del'>-    assert_equal("3ffe:505:2::", @a.to_s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_include?</div><div class='del'>-    assert_equal(true, @a.include?(IPAddr.new("3ffe:505:2::")))</div><div class='del'>-    assert_equal(true, @a.include?(IPAddr.new("3ffe:505:2::1")))</div><div class='del'>-    assert_equal(false, @a.include?(IPAddr.new("3ffe:505:3::")))</div><div class='del'>-    net1 = IPAddr.new("192.168.2.0/24")</div><div class='del'>-    assert_equal(true, net1.include?(IPAddr.new("192.168.2.0")))</div><div class='del'>-    assert_equal(true, net1.include?(IPAddr.new("192.168.2.255")))</div><div class='del'>-    assert_equal(false, net1.include?(IPAddr.new("192.168.3.0")))</div><div class='del'>-    # test with integer parameter</div><div class='del'>-    int = (192 &lt;&lt; 24) + (168 &lt;&lt; 16) + (2 &lt;&lt; 8) + 13</div><div class='del'>-</div><div class='del'>-    assert_equal(true, net1.include?(int))</div><div class='del'>-    assert_equal(false, net1.include?(int+255))</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb.rb b/lib/irb.rb<br/>deleted file mode 100644<br/>index 7580e39d43..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,346 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb.rb - irb main module</div><div class='del'>-#   	$Release Version: 0.9.5 $</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-require "e2mmap"</div><div class='del'>-</div><div class='del'>-require "irb/init"</div><div class='del'>-require "irb/context"</div><div class='del'>-require "irb/extend-command"</div><div class='del'>-#require "irb/workspace"</div><div class='del'>-</div><div class='del'>-require "irb/ruby-lex"</div><div class='del'>-require "irb/input-method"</div><div class='del'>-require "irb/locale"</div><div class='del'>-</div><div class='del'>-STDOUT.sync = true</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-  class Abort &lt; Exception;end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  @CONF = {}</div><div class='del'>-</div><div class='del'>-  def IRB.conf</div><div class='del'>-    @CONF</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # IRB version method</div><div class='del'>-  def IRB.version</div><div class='del'>-    if v = @CONF[:VERSION] then return v end</div><div class='del'>-</div><div class='del'>-    require "irb/version"</div><div class='del'>-    rv = @RELEASE_VERSION.sub(/\.0/, "")</div><div class='del'>-    @CONF[:VERSION] = format("irb %s(%s)", rv, @LAST_UPDATE_DATE)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def IRB.CurrentContext</div><div class='del'>-    IRB.conf[:MAIN_CONTEXT]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # initialize IRB and start TOP_LEVEL irb</div><div class='del'>-  def IRB.start(ap_path = nil)</div><div class='del'>-    $0 = File::basename(ap_path, ".rb") if ap_path</div><div class='del'>-</div><div class='del'>-    IRB.setup(ap_path)</div><div class='del'>-</div><div class='del'>-    if @CONF[:SCRIPT]</div><div class='del'>-      irb = Irb.new(nil, @CONF[:SCRIPT])</div><div class='del'>-    else</div><div class='del'>-      irb = Irb.new</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]</div><div class='del'>-    @CONF[:MAIN_CONTEXT] = irb.context</div><div class='del'>-</div><div class='del'>-    trap("SIGINT") do</div><div class='del'>-      irb.signal_handle</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    catch(:IRB_EXIT) do</div><div class='del'>-      irb.eval_input</div><div class='del'>-    end</div><div class='del'>-#    print "\n"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def IRB.irb_exit(irb, ret)</div><div class='del'>-    throw :IRB_EXIT, ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def IRB.irb_abort(irb, exception = Abort)</div><div class='del'>-    if defined? Thread</div><div class='del'>-      irb.context.thread.raise exception, "abort then interrupt!!"</div><div class='del'>-    else</div><div class='del'>-      raise exception, "abort then interrupt!!"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # irb interpriter main routine </div><div class='del'>-  #</div><div class='del'>-  class Irb</div><div class='del'>-    def initialize(workspace = nil, input_method = nil, output_method = nil)</div><div class='del'>-      @context = Context.new(self, workspace, input_method, output_method)</div><div class='del'>-      @context.main.extend ExtendCommandBundle</div><div class='del'>-      @signal_status = :IN_IRB</div><div class='del'>-</div><div class='del'>-      @scanner = RubyLex.new</div><div class='del'>-      @scanner.exception_on_syntax_error = false</div><div class='del'>-    end</div><div class='del'>-    attr_reader :context</div><div class='del'>-    attr_accessor :scanner</div><div class='del'>-</div><div class='del'>-    def eval_input</div><div class='del'>-      @scanner.set_prompt do</div><div class='del'>-	|ltype, indent, continue, line_no|</div><div class='del'>-	if ltype</div><div class='del'>-	  f = @context.prompt_s</div><div class='del'>-	elsif continue</div><div class='del'>-	  f = @context.prompt_c</div><div class='del'>-	elsif indent &gt; 0</div><div class='del'>-	  f = @context.prompt_n</div><div class='del'>-	else @context.prompt_i</div><div class='del'>-	  f = @context.prompt_i</div><div class='del'>-	end</div><div class='del'>-	f = "" unless f</div><div class='del'>-	if @context.prompting?</div><div class='del'>-	  @context.io.prompt = p = prompt(f, ltype, indent, line_no)</div><div class='del'>-	else</div><div class='del'>-	  @context.io.prompt = p = ""</div><div class='del'>-	end</div><div class='del'>-	if @context.auto_indent_mode</div><div class='del'>-	  unless ltype</div><div class='del'>-            ind = prompt(@context.prompt_i, ltype, indent, line_no)[/.*\z/].size +</div><div class='del'>-	      indent * 2 - p.size</div><div class='del'>-	    ind += 2 if continue</div><div class='del'>-	    @context.io.prompt = p + " " * ind if ind &gt; 0</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-       </div><div class='del'>-      @scanner.set_input(@context.io) do</div><div class='del'>-	signal_status(:IN_INPUT) do</div><div class='del'>-	  if l = @context.io.gets</div><div class='del'>-	    print l if @context.verbose?</div><div class='del'>-	  else</div><div class='del'>-	    if @context.ignore_eof? and @context.io.readable_atfer_eof?</div><div class='del'>-	      l = "\n"</div><div class='del'>-	      if @context.verbose?</div><div class='del'>-		printf "Use \"exit\" to leave %s\n", @context.ap_name</div><div class='del'>-	      end</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	  l</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @scanner.each_top_level_statement do |line, line_no|</div><div class='del'>-	signal_status(:IN_EVAL) do</div><div class='del'>-	  begin</div><div class='del'>-            line.untaint</div><div class='del'>-	    @context.evaluate(line, line_no)</div><div class='del'>-	    output_value if @context.echo?</div><div class='del'>-	    exc = nil</div><div class='del'>-	  rescue Interrupt =&gt; exc</div><div class='del'>-	  rescue SystemExit, SignalException</div><div class='del'>-	    raise</div><div class='del'>-	  rescue Exception =&gt; exc</div><div class='del'>-	  end</div><div class='del'>-	  if exc</div><div class='del'>-	    print exc.class, ": ", exc, "\n"</div><div class='del'>-	    if exc.backtrace[0] =~ /irb(2)?(\/.*|-.*|\.rb)?:/ &amp;&amp; exc.class.to_s !~ /^IRB/</div><div class='del'>-	      irb_bug = true </div><div class='del'>-	    else</div><div class='del'>-	      irb_bug = false</div><div class='del'>-	    end</div><div class='del'>-	    </div><div class='del'>-	    messages = []</div><div class='del'>-	    lasts = []</div><div class='del'>-	    levels = 0</div><div class='del'>-	    for m in exc.backtrace</div><div class='del'>-	      m = @context.workspace.filter_backtrace(m) unless irb_bug</div><div class='del'>-	      if m</div><div class='del'>-		if messages.size &lt; @context.back_trace_limit</div><div class='del'>-		  messages.push "\tfrom "+m</div><div class='del'>-		else</div><div class='del'>-		  lasts.push "\tfrom "+m</div><div class='del'>-		  if lasts.size &gt; @context.back_trace_limit</div><div class='del'>-		    lasts.shift </div><div class='del'>-		    levels += 1</div><div class='del'>-		  end</div><div class='del'>-		end</div><div class='del'>-	      end</div><div class='del'>-	    end</div><div class='del'>-	    print messages.join("\n"), "\n"</div><div class='del'>-	    unless lasts.empty?</div><div class='del'>-	      printf "... %d levels...\n", levels if levels &gt; 0</div><div class='del'>-	      print lasts.join("\n")</div><div class='del'>-	    end</div><div class='del'>-	    print "Maybe IRB bug!!\n" if irb_bug</div><div class='del'>-	  end</div><div class='del'>-          if $SAFE &gt; 2</div><div class='del'>-            abort "Error: irb does not work for $SAFE level higher than 2"</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 suspend_name(path = nil, name = nil)</div><div class='del'>-      @context.irb_path, back_path = path, @context.irb_path if path</div><div class='del'>-      @context.irb_name, back_name = name, @context.irb_name if name</div><div class='del'>-      begin</div><div class='del'>-	yield back_path, back_name</div><div class='del'>-      ensure</div><div class='del'>-	@context.irb_path = back_path if path</div><div class='del'>-	@context.irb_name = back_name if name</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def suspend_workspace(workspace)</div><div class='del'>-      @context.workspace, back_workspace = workspace, @context.workspace</div><div class='del'>-      begin</div><div class='del'>-	yield back_workspace</div><div class='del'>-      ensure</div><div class='del'>-	@context.workspace = back_workspace</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def suspend_input_method(input_method)</div><div class='del'>-      back_io = @context.io</div><div class='del'>-      @context.instance_eval{@io = input_method}</div><div class='del'>-      begin</div><div class='del'>-	yield back_io</div><div class='del'>-      ensure</div><div class='del'>-	@context.instance_eval{@io = back_io}</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def suspend_context(context)</div><div class='del'>-      @context, back_context = context, @context</div><div class='del'>-      begin</div><div class='del'>-	yield back_context</div><div class='del'>-      ensure</div><div class='del'>-	@context = back_context</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def signal_handle</div><div class='del'>-      unless @context.ignore_sigint?</div><div class='del'>-	print "\nabort!!\n" if @context.verbose?</div><div class='del'>-	exit</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      case @signal_status</div><div class='del'>-      when :IN_INPUT</div><div class='del'>-	print "^C\n"</div><div class='del'>-	raise RubyLex::TerminateLineInput</div><div class='del'>-      when :IN_EVAL</div><div class='del'>-	IRB.irb_abort(self)</div><div class='del'>-      when :IN_LOAD</div><div class='del'>-	IRB.irb_abort(self, LoadAbort)</div><div class='del'>-      when :IN_IRB</div><div class='del'>-	# ignore</div><div class='del'>-      else</div><div class='del'>-	# ignore other cases as well</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def signal_status(status)</div><div class='del'>-      return yield if @signal_status == :IN_LOAD</div><div class='del'>-</div><div class='del'>-      signal_status_back = @signal_status</div><div class='del'>-      @signal_status = status</div><div class='del'>-      begin</div><div class='del'>-	yield</div><div class='del'>-      ensure</div><div class='del'>-	@signal_status = signal_status_back</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def prompt(prompt, ltype, indent, line_no)</div><div class='del'>-      p = prompt.dup</div><div class='del'>-      p.gsub!(/%([0-9]+)?([a-zA-Z])/) do</div><div class='del'>-	case $2</div><div class='del'>-	when "N"</div><div class='del'>-	  @context.irb_name</div><div class='del'>-	when "m"</div><div class='del'>-	  @context.main.to_s</div><div class='del'>-	when "M"</div><div class='del'>-	  @context.main.inspect</div><div class='del'>-	when "l"</div><div class='del'>-	  ltype</div><div class='del'>-	when "i"</div><div class='del'>-	  if $1 </div><div class='del'>-	    format("%" + $1 + "d", indent)</div><div class='del'>-	  else</div><div class='del'>-	    indent.to_s</div><div class='del'>-	  end</div><div class='del'>-	when "n"</div><div class='del'>-	  if $1 </div><div class='del'>-	    format("%" + $1 + "d", line_no)</div><div class='del'>-	  else</div><div class='del'>-	    line_no.to_s</div><div class='del'>-	  end</div><div class='del'>-	when "%"</div><div class='del'>-	  "%"</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      p</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def output_value</div><div class='del'>-      if @context.inspect?</div><div class='del'>-        printf @context.return_format, @context.last_value.inspect</div><div class='del'>-      else</div><div class='del'>-        printf @context.return_format, @context.last_value</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      ary = []</div><div class='del'>-      for iv in instance_variables</div><div class='del'>-	case iv</div><div class='del'>-	when "@signal_status"</div><div class='del'>-	  ary.push format("%s=:%s", iv, @signal_status.id2name)</div><div class='del'>-	when "@context"</div><div class='del'>-	  ary.push format("%s=%s", iv, eval(iv).__to_s__)</div><div class='del'>-	else</div><div class='del'>-	  ary.push format("%s=%s", iv, eval(iv))</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      format("#&lt;%s: %s&gt;", self.class, ary.join(", "))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Singleton method</div><div class='del'>-  def @CONF.inspect</div><div class='del'>-    IRB.version unless self[:VERSION]</div><div class='del'>-</div><div class='del'>-    array = []</div><div class='del'>-    for k, v in sort{|a1, a2| a1[0].id2name &lt;=&gt; a2[0].id2name}</div><div class='del'>-      case k</div><div class='del'>-      when :MAIN_CONTEXT, :__TMP__EHV__</div><div class='del'>-	array.push format("CONF[:%s]=...myself...", k.id2name)</div><div class='del'>-      when :PROMPT</div><div class='del'>-	s = v.collect{</div><div class='del'>-	  |kk, vv|</div><div class='del'>-	  ss = vv.collect{|kkk, vvv| ":#{kkk.id2name}=&gt;#{vvv.inspect}"}</div><div class='del'>-	  format(":%s=&gt;{%s}", kk.id2name, ss.join(", "))</div><div class='del'>-	}</div><div class='del'>-	array.push format("CONF[:%s]={%s}", k.id2name, s.join(", "))</div><div class='del'>-      else</div><div class='del'>-	array.push format("CONF[:%s]=%s", k.id2name, v.inspect)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    array.join("\n")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/cmd/chws.rb b/lib/irb/cmd/chws.rb<br/>deleted file mode 100644<br/>index 88585b778b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/cmd/chws.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/chws.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   change-ws.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "irb/cmd/nop.rb"</div><div class='del'>-require "irb/ext/change-ws.rb"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module ExtendCommand</div><div class='del'>-</div><div class='del'>-    class CurrentWorkingWorkspace&lt;Nop</div><div class='del'>-      def execute(*obj)</div><div class='del'>-	irb_context.main</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class ChangeWorkspace&lt;Nop</div><div class='del'>-      def execute(*obj)</div><div class='del'>-	irb_context.change_workspace(*obj)</div><div class='del'>-	irb_context.main</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='head'>diff --git a/lib/irb/cmd/fork.rb b/lib/irb/cmd/fork.rb<br/>deleted file mode 100644<br/>index 2866b1373b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/cmd/fork.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/fork.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   fork.rb - </div><div class='del'>-#   	$Release Version: 0.9.5 $</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-@RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module ExtendCommand</div><div class='del'>-    class Fork&lt;Nop</div><div class='del'>-      def execute(&amp;block)</div><div class='del'>-	pid = send ExtendCommand.irb_original_method_name("fork")</div><div class='del'>-	unless pid </div><div class='del'>-	  class&lt;&lt;self</div><div class='del'>-	    alias_method :exit, ExtendCommand.irb_original_method_name('exit')</div><div class='del'>-	  end</div><div class='del'>-	  if iterator?</div><div class='del'>-	    begin</div><div class='del'>-	      yield</div><div class='del'>-	    ensure</div><div class='del'>-	      exit</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	pid</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='head'>diff --git a/lib/irb/cmd/help.rb b/lib/irb/cmd/help.rb<br/>deleted file mode 100644<br/>index 3e8d1388e0..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/cmd/help.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/help.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   help.rb - helper using ri</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</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'>-require 'rdoc/ri/ri_driver'</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module ExtendCommand</div><div class='del'>-    module Help</div><div class='del'>-      begin</div><div class='del'>-        @ri = RiDriver.new</div><div class='del'>-      rescue SystemExit</div><div class='del'>-      else</div><div class='del'>-        def self.execute(context, *names)</div><div class='del'>-          names.each do |name|</div><div class='del'>-            begin</div><div class='del'>-              @ri.get_info_for(name.to_s)</div><div class='del'>-            rescue RiError</div><div class='del'>-              puts $!.message</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          nil</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/lib/irb/cmd/load.rb b/lib/irb/cmd/load.rb<br/>deleted file mode 100644<br/>index cbc5d91d03..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/cmd/load.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/load.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,67 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   load.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "irb/cmd/nop.rb"</div><div class='del'>-require "irb/ext/loader"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module ExtendCommand</div><div class='del'>-    class Load&lt;Nop</div><div class='del'>-      include IrbLoader</div><div class='del'>-</div><div class='del'>-      def execute(file_name, priv = nil)</div><div class='del'>-#	return ruby_load(file_name) unless IRB.conf[:USE_LOADER]</div><div class='del'>-	return irb_load(file_name, priv)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Require&lt;Nop</div><div class='del'>-      include IrbLoader</div><div class='del'>-      </div><div class='del'>-      def execute(file_name)</div><div class='del'>-#	return ruby_require(file_name) unless IRB.conf[:USE_LOADER]</div><div class='del'>-</div><div class='del'>-	rex = Regexp.new("#{Regexp.quote(file_name)}(\.o|\.rb)?")</div><div class='del'>-	return false if $".find{|f| f =~ rex}</div><div class='del'>-</div><div class='del'>-	case file_name</div><div class='del'>-	when /\.rb$/</div><div class='del'>-	  begin</div><div class='del'>-	    if irb_load(file_name)</div><div class='del'>-	      $".push file_name</div><div class='del'>-	      return true</div><div class='del'>-	    end</div><div class='del'>-	  rescue LoadError</div><div class='del'>-	  end</div><div class='del'>-	when /\.(so|o|sl)$/</div><div class='del'>-	  return ruby_require(file_name)</div><div class='del'>-	end</div><div class='del'>-	</div><div class='del'>-	begin</div><div class='del'>-	  irb_load(f = file_name + ".rb")</div><div class='del'>-	  $".push f</div><div class='del'>-	  return true</div><div class='del'>-	rescue LoadError</div><div class='del'>-	  return ruby_require(file_name)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Source&lt;Nop</div><div class='del'>-      include IrbLoader</div><div class='del'>-      def execute(file_name)</div><div class='del'>-	source_file(file_name)</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='head'>diff --git a/lib/irb/cmd/nop.rb b/lib/irb/cmd/nop.rb<br/>deleted file mode 100644<br/>index aa553c959e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/cmd/nop.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/nop.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   nop.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-module IRB</div><div class='del'>-  module ExtendCommand</div><div class='del'>-    class Nop</div><div class='del'>-      </div><div class='del'>-      @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-      def self.execute(conf, *opts)</div><div class='del'>-	command = new(conf)</div><div class='del'>-	command.execute(*opts)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(conf)</div><div class='del'>-	@irb_context = conf</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :irb_context</div><div class='del'>-</div><div class='del'>-      def irb</div><div class='del'>-	@irb_context.irb</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def execute(*opts)</div><div class='del'>-	#nop</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='head'>diff --git a/lib/irb/cmd/pushws.rb b/lib/irb/cmd/pushws.rb<br/>deleted file mode 100644<br/>index eddaeae631..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/cmd/pushws.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/pushws.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   change-ws.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "irb/cmd/nop.rb"</div><div class='del'>-require "irb/ext/workspaces.rb"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module ExtendCommand</div><div class='del'>-    class Workspaces&lt;Nop</div><div class='del'>-      def execute(*obj)</div><div class='del'>-	irb_context.workspaces.collect{|ws| ws.main}</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class PushWorkspace&lt;Workspaces</div><div class='del'>-      def execute(*obj)</div><div class='del'>-	irb_context.push_workspace(*obj)</div><div class='del'>-	super</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class PopWorkspace&lt;Workspaces</div><div class='del'>-      def execute(*obj)</div><div class='del'>-	irb_context.pop_workspace(*obj)</div><div class='del'>-	super</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='head'>diff --git a/lib/irb/cmd/subirb.rb b/lib/irb/cmd/subirb.rb<br/>deleted file mode 100644<br/>index 79d654b172..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/cmd/subirb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/cmd/subirb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,43 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-#</div><div class='del'>-#   multi.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "irb/cmd/nop.rb"</div><div class='del'>-require "irb/ext/multi-irb"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module ExtendCommand</div><div class='del'>-    class IrbCommand&lt;Nop</div><div class='del'>-      def execute(*obj)</div><div class='del'>-	IRB.irb(nil, *obj)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Jobs&lt;Nop</div><div class='del'>-      def execute</div><div class='del'>-	IRB.JobManager</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Foreground&lt;Nop</div><div class='del'>-      def execute(key)</div><div class='del'>-	IRB.JobManager.switch(key)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Kill&lt;Nop</div><div class='del'>-      def execute(*keys)</div><div class='del'>-	IRB.JobManager.kill(*keys)</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/lib/irb/completion.rb b/lib/irb/completion.rb<br/>deleted file mode 100644<br/>index 000658e2a3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/completion.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/completion.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,205 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/completor.rb - </div><div class='del'>-#   	$Release Version: 0.9$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='del'>-#       From Original Idea of shugo@ruby-lang.org</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "readline"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module InputCompletor</div><div class='del'>-</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-    ReservedWords = [</div><div class='del'>-      "BEGIN", "END",</div><div class='del'>-      "alias", "and", </div><div class='del'>-      "begin", "break", </div><div class='del'>-      "case", "class",</div><div class='del'>-      "def", "defined", "do",</div><div class='del'>-      "else", "elsif", "end", "ensure",</div><div class='del'>-      "false", "for", </div><div class='del'>-      "if", "in", </div><div class='del'>-      "module", </div><div class='del'>-      "next", "nil", "not",</div><div class='del'>-      "or", </div><div class='del'>-      "redo", "rescue", "retry", "return",</div><div class='del'>-      "self", "super",</div><div class='del'>-      "then", "true",</div><div class='del'>-      "undef", "unless", "until",</div><div class='del'>-      "when", "while",</div><div class='del'>-      "yield",</div><div class='del'>-    ]</div><div class='del'>-      </div><div class='del'>-    CompletionProc = proc { |input|</div><div class='del'>-      bind = IRB.conf[:MAIN_CONTEXT].workspace.binding</div><div class='del'>-      </div><div class='del'>-#      puts "input: #{input}"</div><div class='del'>-</div><div class='del'>-      case input</div><div class='del'>-      when /^(\/[^\/]*\/)\.([^.]*)$/</div><div class='del'>-	# Regexp</div><div class='del'>-	receiver = $1</div><div class='del'>-	message = Regexp.quote($2)</div><div class='del'>-</div><div class='del'>-	candidates = Regexp.instance_methods(true)</div><div class='del'>-	select_message(receiver, message, candidates)</div><div class='del'>-</div><div class='del'>-      when /^([^\]]*\])\.([^.]*)$/</div><div class='del'>-	# Array</div><div class='del'>-	receiver = $1</div><div class='del'>-	message = Regexp.quote($2)</div><div class='del'>-</div><div class='del'>-	candidates = Array.instance_methods(true)</div><div class='del'>-	select_message(receiver, message, candidates)</div><div class='del'>-</div><div class='del'>-      when /^([^\}]*\})\.([^.]*)$/</div><div class='del'>-	# Proc or Hash</div><div class='del'>-	receiver = $1</div><div class='del'>-	message = Regexp.quote($2)</div><div class='del'>-</div><div class='del'>-	candidates = Proc.instance_methods(true) | Hash.instance_methods(true)</div><div class='del'>-	select_message(receiver, message, candidates)</div><div class='del'>-	</div><div class='del'>-      when /^(:[^:.]*)$/</div><div class='del'>- 	# Symbol</div><div class='del'>-	if Symbol.respond_to?(:all_symbols)</div><div class='del'>-	  sym = $1</div><div class='del'>-	  candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}</div><div class='del'>-	  candidates.grep(/^#{sym}/)</div><div class='del'>-	else</div><div class='del'>-	  []</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-      when /^::([A-Z][^:\.\(]*)$/</div><div class='del'>-	# Absolute Constant or class methods</div><div class='del'>-	receiver = $1</div><div class='del'>-	candidates = Object.constants</div><div class='del'>-	candidates.grep(/^#{receiver}/).collect{|e| "::" + e}</div><div class='del'>-</div><div class='del'>-      when /^(((::)?[A-Z][^:.\(]*)+)::?([^:.]*)$/</div><div class='del'>-	# Constant or class methods</div><div class='del'>-	receiver = $1</div><div class='del'>-	message = Regexp.quote($4)</div><div class='del'>-	begin</div><div class='del'>-	  candidates = eval("#{receiver}.constants | #{receiver}.methods", bind)</div><div class='del'>-	rescue Exception</div><div class='del'>-	  candidates = []</div><div class='del'>-	end</div><div class='del'>-	candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e}</div><div class='del'>-</div><div class='del'>-      when /^(:[^:.]+)\.([^.]*)$/</div><div class='del'>-	# Symbol</div><div class='del'>-	receiver = $1</div><div class='del'>-	message = Regexp.quote($2)</div><div class='del'>-</div><div class='del'>-	candidates = Symbol.instance_methods(true)</div><div class='del'>-	select_message(receiver, message, candidates)</div><div class='del'>-</div><div class='del'>-      when /^(-?(0[dbo])?[0-9_]+(\.[0-9_]+)?([eE]-?[0-9]+)?)\.([^.]*)$/</div><div class='del'>-	# Numeric</div><div class='del'>-	receiver = $1</div><div class='del'>-	message = Regexp.quote($5)</div><div class='del'>-</div><div class='del'>-	begin</div><div class='del'>-	  candidates = eval(receiver, bind).methods</div><div class='del'>-	rescue Exception</div><div class='del'>-	  candidates = []</div><div class='del'>-	end</div><div class='del'>-	select_message(receiver, message, candidates)</div><div class='del'>-</div><div class='del'>-      when /^(-?0x[0-9a-fA-F_]+)\.([^.]*)$/</div><div class='del'>-	# Numeric(0xFFFF)</div><div class='del'>-	receiver = $1</div><div class='del'>-	message = Regexp.quote($2)</div><div class='del'>-</div><div class='del'>-	begin</div><div class='del'>-	  candidates = eval(receiver, bind).methods</div><div class='del'>-	rescue Exception</div><div class='del'>-	  candidates = []</div><div class='del'>-	end</div><div class='del'>-	select_message(receiver, message, candidates)</div><div class='del'>-</div><div class='del'>-      when /^(\$[^.]*)$/</div><div class='del'>-	candidates = global_variables.grep(Regexp.new(Regexp.quote($1)))</div><div class='del'>-</div><div class='del'>-#      when /^(\$?(\.?[^.]+)+)\.([^.]*)$/</div><div class='del'>-      when /^((\.?[^.]+)+)\.([^.]*)$/</div><div class='del'>-	# variable</div><div class='del'>-	receiver = $1</div><div class='del'>-	message = Regexp.quote($3)</div><div class='del'>-</div><div class='del'>-	gv = eval("global_variables", bind)</div><div class='del'>-	lv = eval("local_variables", bind)</div><div class='del'>-	cv = eval("self.class.constants", bind)</div><div class='del'>-	</div><div class='del'>-	if (gv | lv | cv).include?(receiver)</div><div class='del'>-	  # foo.func and foo is local var.</div><div class='del'>-	  candidates = eval("#{receiver}.methods", bind)</div><div class='del'>-	elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver</div><div class='del'>-	  # Foo::Bar.func</div><div class='del'>-	  begin</div><div class='del'>-	    candidates = eval("#{receiver}.methods", bind)</div><div class='del'>-	  rescue Exception</div><div class='del'>-	    candidates = []</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  # func1.func2</div><div class='del'>-	  candidates = []</div><div class='del'>-	  ObjectSpace.each_object(Module){|m|</div><div class='del'>-	    begin</div><div class='del'>-	      name = m.name</div><div class='del'>-	    rescue Exception</div><div class='del'>-	      name = ""</div><div class='del'>-	    end</div><div class='del'>-	    next if name != "IRB::Context" and </div><div class='del'>-	      /^(IRB|SLex|RubyLex|RubyToken)/ =~ name</div><div class='del'>-	    candidates.concat m.instance_methods(false)</div><div class='del'>-	  }</div><div class='del'>-	  candidates.sort!</div><div class='del'>-	  candidates.uniq!</div><div class='del'>-	end</div><div class='del'>-	select_message(receiver, message, candidates)</div><div class='del'>-</div><div class='del'>-      when /^\.([^.]*)$/</div><div class='del'>-	# unknown(maybe String)</div><div class='del'>-</div><div class='del'>-	receiver = ""</div><div class='del'>-	message = Regexp.quote($1)</div><div class='del'>-</div><div class='del'>-	candidates = String.instance_methods(true)</div><div class='del'>-	select_message(receiver, message, candidates)</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-	candidates = eval("methods | private_methods | local_variables | self.class.constants", bind)</div><div class='del'>-			  </div><div class='del'>-	(candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    Operators = ["%", "&amp;", "*", "**", "+",  "-",  "/",</div><div class='del'>-      "&lt;", "&lt;&lt;", "&lt;=", "&lt;=&gt;", "==", "===", "=~", "&gt;", "&gt;=", "&gt;&gt;",</div><div class='del'>-      "[]", "[]=", "^",]</div><div class='del'>-</div><div class='del'>-    def self.select_message(receiver, message, candidates)</div><div class='del'>-      candidates.grep(/^#{message}/).collect do |e|</div><div class='del'>-	case e</div><div class='del'>-	when /^[a-zA-Z_]/</div><div class='del'>-	  receiver + "." + e</div><div class='del'>-	when /^[0-9]/</div><div class='del'>-	when *Operators</div><div class='del'>-	  #receiver + " " + e</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'>-if Readline.respond_to?("basic_word_break_characters=")</div><div class='del'>-  Readline.basic_word_break_characters= " \t\n\"\\'`&gt;&lt;=;|&amp;{("</div><div class='del'>-end</div><div class='del'>-Readline.completion_append_character = nil</div><div class='del'>-Readline.completion_proc = IRB::InputCompletor::CompletionProc</div><div class='head'>diff --git a/lib/irb/context.rb b/lib/irb/context.rb<br/>deleted file mode 100644<br/>index d01bd4aefa..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/context.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/context.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,255 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/context.rb - irb context</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-require "irb/workspace"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  class Context</div><div class='del'>-    #</div><div class='del'>-    # Arguments:</div><div class='del'>-    #   input_method: nil -- stdin or readline</div><div class='del'>-    #		      String -- File</div><div class='del'>-    #		      other -- using this as InputMethod</div><div class='del'>-    #</div><div class='del'>-    def initialize(irb, workspace = nil, input_method = nil, output_method = nil)</div><div class='del'>-      @irb = irb</div><div class='del'>-      if workspace</div><div class='del'>-	@workspace = workspace</div><div class='del'>-      else</div><div class='del'>-	@workspace = WorkSpace.new</div><div class='del'>-      end</div><div class='del'>-      @thread = Thread.current if defined? Thread</div><div class='del'>-#      @irb_level = 0</div><div class='del'>-</div><div class='del'>-      # copy of default configuration</div><div class='del'>-      @ap_name = IRB.conf[:AP_NAME]</div><div class='del'>-      @rc = IRB.conf[:RC]</div><div class='del'>-      @load_modules = IRB.conf[:LOAD_MODULES]</div><div class='del'>-</div><div class='del'>-      @use_readline = IRB.conf[:USE_READLINE]</div><div class='del'>-      @inspect_mode = IRB.conf[:INSPECT_MODE]</div><div class='del'>-</div><div class='del'>-      self.math_mode = IRB.conf[:MATH_MODE] if IRB.conf[:MATH_MODE]</div><div class='del'>-      self.use_tracer = IRB.conf[:USE_TRACER] if IRB.conf[:USE_TRACER]</div><div class='del'>-      self.use_loader = IRB.conf[:USE_LOADER] if IRB.conf[:USE_LOADER]</div><div class='del'>-      self.eval_history = IRB.conf[:EVAL_HISTORY] if IRB.conf[:EVAL_HISTORY]</div><div class='del'>-</div><div class='del'>-      @ignore_sigint = IRB.conf[:IGNORE_SIGINT]</div><div class='del'>-      @ignore_eof = IRB.conf[:IGNORE_EOF]</div><div class='del'>-</div><div class='del'>-      @back_trace_limit = IRB.conf[:BACK_TRACE_LIMIT]</div><div class='del'>-      </div><div class='del'>-      self.prompt_mode = IRB.conf[:PROMPT_MODE]</div><div class='del'>-</div><div class='del'>-      if IRB.conf[:SINGLE_IRB] or !defined?(JobManager)</div><div class='del'>-	@irb_name = IRB.conf[:IRB_NAME]</div><div class='del'>-      else</div><div class='del'>-	@irb_name = "irb#"+IRB.JobManager.n_jobs.to_s</div><div class='del'>-      end</div><div class='del'>-      @irb_path = "(" + @irb_name + ")"</div><div class='del'>-</div><div class='del'>-      case input_method</div><div class='del'>-      when nil</div><div class='del'>-	case use_readline?</div><div class='del'>-	when nil</div><div class='del'>-	  if (defined?(ReadlineInputMethod) &amp;&amp; STDIN.tty? &amp;&amp;</div><div class='del'>-	      IRB.conf[:PROMPT_MODE] != :INF_RUBY)</div><div class='del'>-	    @io = ReadlineInputMethod.new</div><div class='del'>-	  else</div><div class='del'>-	    @io = StdioInputMethod.new</div><div class='del'>-	  end</div><div class='del'>-	when false</div><div class='del'>-	  @io = StdioInputMethod.new</div><div class='del'>-	when true</div><div class='del'>-	  if defined?(ReadlineInputMethod)</div><div class='del'>-	    @io = ReadlineInputMethod.new</div><div class='del'>-	  else</div><div class='del'>-	    @io = StdioInputMethod.new</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-      when String</div><div class='del'>-	@io = FileInputMethod.new(input_method)</div><div class='del'>-	@irb_name = File.basename(input_method)</div><div class='del'>-	@irb_path = input_method</div><div class='del'>-      else</div><div class='del'>-	@io = input_method</div><div class='del'>-      end</div><div class='del'>-      self.save_history = IRB.conf[:SAVE_HISTORY] if IRB.conf[:SAVE_HISTORY]</div><div class='del'>-</div><div class='del'>-      if output_method</div><div class='del'>-	@output_method = output_method</div><div class='del'>-      else</div><div class='del'>-	@output_method = StdioOutputMethod.new</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @verbose = IRB.conf[:VERBOSE] </div><div class='del'>-      @echo = IRB.conf[:ECHO]</div><div class='del'>-      if @echo.nil?</div><div class='del'>-	@echo = true</div><div class='del'>-      end</div><div class='del'>-      @debug_level = IRB.conf[:DEBUG_LEVEL]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def main</div><div class='del'>-      @workspace.main</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :workspace_home</div><div class='del'>-    attr_accessor :workspace</div><div class='del'>-    attr_reader :thread</div><div class='del'>-    attr_accessor :io</div><div class='del'>-    </div><div class='del'>-    attr_accessor :irb</div><div class='del'>-    attr_accessor :ap_name</div><div class='del'>-    attr_accessor :rc</div><div class='del'>-    attr_accessor :load_modules</div><div class='del'>-    attr_accessor :irb_name</div><div class='del'>-    attr_accessor :irb_path</div><div class='del'>-</div><div class='del'>-    attr_reader :use_readline</div><div class='del'>-    attr_reader :inspect_mode</div><div class='del'>-</div><div class='del'>-    attr_reader :prompt_mode</div><div class='del'>-    attr_accessor :prompt_i</div><div class='del'>-    attr_accessor :prompt_s</div><div class='del'>-    attr_accessor :prompt_c</div><div class='del'>-    attr_accessor :prompt_n</div><div class='del'>-    attr_accessor :auto_indent_mode</div><div class='del'>-    attr_accessor :return_format</div><div class='del'>-</div><div class='del'>-    attr_accessor :ignore_sigint</div><div class='del'>-    attr_accessor :ignore_eof</div><div class='del'>-    attr_accessor :echo</div><div class='del'>-    attr_accessor :verbose</div><div class='del'>-    attr_reader :debug_level</div><div class='del'>-</div><div class='del'>-    attr_accessor :back_trace_limit</div><div class='del'>-</div><div class='del'>-    alias use_readline? use_readline</div><div class='del'>-    alias rc? rc</div><div class='del'>-    alias ignore_sigint? ignore_sigint</div><div class='del'>-    alias ignore_eof? ignore_eof</div><div class='del'>-    alias echo? echo</div><div class='del'>-</div><div class='del'>-    def verbose?</div><div class='del'>-      if @verbose.nil?</div><div class='del'>-	if defined?(ReadlineInputMethod) &amp;&amp; @io.kind_of?(ReadlineInputMethod) </div><div class='del'>-	  false</div><div class='del'>-	elsif !STDIN.tty? or @io.kind_of?(FileInputMethod)</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'>-    def prompting?</div><div class='del'>-      verbose? || (STDIN.tty? &amp;&amp; @io.kind_of?(StdioInputMethod) ||</div><div class='del'>-		(defined?(ReadlineInputMethod) &amp;&amp; @io.kind_of?(ReadlineInputMethod)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :last_value</div><div class='del'>-</div><div class='del'>-    def set_last_value(value)</div><div class='del'>-      @last_value = value</div><div class='del'>-      @workspace.evaluate self, "_ = IRB.CurrentContext.last_value"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :irb_name</div><div class='del'>-</div><div class='del'>-    def prompt_mode=(mode)</div><div class='del'>-      @prompt_mode = mode</div><div class='del'>-      pconf = IRB.conf[:PROMPT][mode]</div><div class='del'>-      @prompt_i = pconf[:PROMPT_I]</div><div class='del'>-      @prompt_s = pconf[:PROMPT_S]</div><div class='del'>-      @prompt_c = pconf[:PROMPT_C]</div><div class='del'>-      @prompt_n = pconf[:PROMPT_N]</div><div class='del'>-      @return_format = pconf[:RETURN]</div><div class='del'>-      if ai = pconf.include?(:AUTO_INDENT)</div><div class='del'>-	@auto_indent_mode = ai</div><div class='del'>-      else</div><div class='del'>-	@auto_indent_mode = IRB.conf[:AUTO_INDENT]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def inspect?</div><div class='del'>-      @inspect_mode.nil? or @inspect_mode</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def file_input?</div><div class='del'>-      @io.class == FileInputMethod</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect_mode=(opt)</div><div class='del'>-      if opt</div><div class='del'>-	@inspect_mode = opt</div><div class='del'>-      else</div><div class='del'>-	@inspect_mode = !@inspect_mode</div><div class='del'>-      end</div><div class='del'>-      print "Switch to#{unless @inspect_mode; ' non';end} inspect mode.\n" if verbose?</div><div class='del'>-      @inspect_mode</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def use_readline=(opt)</div><div class='del'>-      @use_readline = opt</div><div class='del'>-      print "use readline module\n" if @use_readline</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def debug_level=(value)</div><div class='del'>-      @debug_level = value</div><div class='del'>-      RubyLex.debug_level = value</div><div class='del'>-      SLex.debug_level = value</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def debug?</div><div class='del'>-      @debug_level &gt; 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def evaluate(line, line_no)</div><div class='del'>-      @line_no = line_no</div><div class='del'>-      set_last_value(@workspace.evaluate(self, line, irb_path, line_no))</div><div class='del'>-#      @workspace.evaluate("_ = IRB.conf[:MAIN_CONTEXT]._")</div><div class='del'>-#      @_ = @workspace.evaluate(line, irb_path, line_no)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias __exit__ exit</div><div class='del'>-    def exit(ret = 0)</div><div class='del'>-      IRB.irb_exit(@irb, ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    NOPRINTING_IVARS = ["@last_value"]</div><div class='del'>-    NO_INSPECTING_IVARS = ["@irb", "@io"]</div><div class='del'>-    IDNAME_IVARS = ["@prompt_mode"]</div><div class='del'>-</div><div class='del'>-    alias __inspect__ inspect</div><div class='del'>-    def inspect</div><div class='del'>-      array = []</div><div class='del'>-      for ivar in instance_variables.sort{|e1, e2| e1 &lt;=&gt; e2}</div><div class='del'>-	name = ivar.sub(/^@(.*)$/){$1}</div><div class='del'>-	val = instance_eval(ivar)</div><div class='del'>-	case ivar</div><div class='del'>-	when *NOPRINTING_IVARS</div><div class='del'>-	  array.push format("conf.%s=%s", name, "...")</div><div class='del'>-	when *NO_INSPECTING_IVARS</div><div class='del'>-	  array.push format("conf.%s=%s", name, val.to_s)</div><div class='del'>-	when *IDNAME_IVARS</div><div class='del'>-	  array.push format("conf.%s=:%s", name, val.id2name)</div><div class='del'>-	else</div><div class='del'>-	  array.push format("conf.%s=%s", name, val.inspect)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      array.join("\n")</div><div class='del'>-    end</div><div class='del'>-    alias __to_s__ to_s</div><div class='del'>-    alias to_s inspect</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/ext/change-ws.rb b/lib/irb/ext/change-ws.rb<br/>deleted file mode 100644<br/>index fff8f58fe5..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/change-ws.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/change-ws.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/ext/cb.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-module IRB</div><div class='del'>-  class Context</div><div class='del'>-</div><div class='del'>-    def home_workspace</div><div class='del'>-      if defined? @home_workspace</div><div class='del'>-	@home_workspace</div><div class='del'>-      else</div><div class='del'>-	@home_workspace = @workspace</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def change_workspace(*_main)</div><div class='del'>-      if _main.empty?</div><div class='del'>-	@workspace = home_workspace </div><div class='del'>-	return main</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      @workspace = WorkSpace.new(_main[0])</div><div class='del'>-      </div><div class='del'>-      if !(class&lt;&lt;main;ancestors;end).include?(ExtendCommandBundle)</div><div class='del'>-	main.extend ExtendCommandBundle</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-#     def change_binding(*_main)</div><div class='del'>-#       back = @workspace</div><div class='del'>-#       @workspace = WorkSpace.new(*_main)</div><div class='del'>-#       unless _main.empty?</div><div class='del'>-# 	begin</div><div class='del'>-# 	  main.extend ExtendCommandBundle</div><div class='del'>-# 	rescue</div><div class='del'>-# 	  print "can't change binding to: ", main.inspect, "\n"</div><div class='del'>-# 	  @workspace = back</div><div class='del'>-# 	  return nil</div><div class='del'>-# 	end</div><div class='del'>-#       end</div><div class='del'>-#       @irb_level += 1</div><div class='del'>-#       begin</div><div class='del'>-# 	catch(:SU_EXIT) do</div><div class='del'>-# 	  @irb.eval_input</div><div class='del'>-# 	end</div><div class='del'>-#       ensure</div><div class='del'>-# 	@irb_level -= 1</div><div class='del'>-#  	@workspace = back</div><div class='del'>-#       end</div><div class='del'>-#     end</div><div class='del'>-#     alias change_workspace change_binding</div><div class='del'>-   end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/irb/ext/history.rb b/lib/irb/ext/history.rb<br/>deleted file mode 100644<br/>index 40f8692e8b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/history.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/history.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,110 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   history.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-module IRB</div><div class='del'>-</div><div class='del'>-  class Context</div><div class='del'>-</div><div class='del'>-    NOPRINTING_IVARS.push "@eval_history_values"</div><div class='del'>-</div><div class='del'>-    alias _set_last_value set_last_value</div><div class='del'>-</div><div class='del'>-    def set_last_value(value)</div><div class='del'>-      _set_last_value(value)</div><div class='del'>-</div><div class='del'>-#      @workspace.evaluate self, "_ = IRB.CurrentContext.last_value"</div><div class='del'>-      if @eval_history #and !@eval_history_values.equal?(llv)</div><div class='del'>- 	@eval_history_values.push @line_no, @last_value</div><div class='del'>- 	@workspace.evaluate self, "__ = IRB.CurrentContext.instance_eval{@eval_history_values}"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @last_value</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :eval_history</div><div class='del'>-    def eval_history=(no)</div><div class='del'>-      if no</div><div class='del'>-	if defined?(@eval_history) &amp;&amp; @eval_history</div><div class='del'>-	  @eval_history_values.size(no)</div><div class='del'>-	else</div><div class='del'>-	  @eval_history_values = History.new(no)</div><div class='del'>-	  IRB.conf[:__TMP__EHV__] = @eval_history_values</div><div class='del'>-	  @workspace.evaluate(self, "__ = IRB.conf[:__TMP__EHV__]")</div><div class='del'>-	  IRB.conf.delete(:__TMP_EHV__)</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	@eval_history_values = nil</div><div class='del'>-      end</div><div class='del'>-      @eval_history = no</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class History</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-    def initialize(size = 16)</div><div class='del'>-      @size = size</div><div class='del'>-      @contents = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def size(size)</div><div class='del'>-      if size != 0 &amp;&amp; size &lt; @size </div><div class='del'>-	@contents = @contents[@size - size .. @size]</div><div class='del'>-      end</div><div class='del'>-      @size = size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def [](idx)</div><div class='del'>-      begin</div><div class='del'>-	if idx &gt;= 0</div><div class='del'>-	  @contents.find{|no, val| no == idx}[1]</div><div class='del'>-	else</div><div class='del'>-	  @contents[idx][1]</div><div class='del'>-	end</div><div class='del'>-      rescue NameError</div><div class='del'>-	nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def push(no, val)</div><div class='del'>-      @contents.push [no, val]</div><div class='del'>-      @contents.shift if @size != 0 &amp;&amp; @contents.size &gt; @size</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    alias real_inspect inspect</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      if @contents.empty?</div><div class='del'>-	return real_inspect</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      unless (last = @contents.pop)[1].equal?(self)</div><div class='del'>-	@contents.push last</div><div class='del'>-	last = nil</div><div class='del'>-      end</div><div class='del'>-      str = @contents.collect{|no, val|</div><div class='del'>-	if val.equal?(self)</div><div class='del'>-	  "#{no} ...self-history..."</div><div class='del'>-	else</div><div class='del'>-	  "#{no} #{val.inspect}"</div><div class='del'>-	end</div><div class='del'>-      }.join("\n")</div><div class='del'>-      if str == ""</div><div class='del'>-	str = "Empty."</div><div class='del'>-      end</div><div class='del'>-      @contents.push last if last</div><div class='del'>-      str</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='head'>diff --git a/lib/irb/ext/loader.rb b/lib/irb/ext/loader.rb<br/>deleted file mode 100644<br/>index 837e2553ac..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/loader.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/loader.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   loader.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-module IRB</div><div class='del'>-  class LoadAbort &lt; Exception;end</div><div class='del'>-</div><div class='del'>-  module IrbLoader</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-    alias ruby_load load</div><div class='del'>-    alias ruby_require require</div><div class='del'>-</div><div class='del'>-    def irb_load(fn, priv = nil)</div><div class='del'>-      path = search_file_from_ruby_path(fn)</div><div class='del'>-      raise LoadError, "No such file to load -- #{fn}" unless path</div><div class='del'>-</div><div class='del'>-      load_file(path, priv)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def search_file_from_ruby_path(fn)</div><div class='del'>-      if /^#{Regexp.quote(File::Separator)}/ =~ fn</div><div class='del'>-	return fn if File.exist?(fn)</div><div class='del'>-	return nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      for path in $:</div><div class='del'>-	if File.exist?(f = File.join(path, fn))</div><div class='del'>-	  return f</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'>-    def source_file(path)</div><div class='del'>-      irb.suspend_name(path, File.basename(path)) do</div><div class='del'>-	irb.suspend_input_method(FileInputMethod.new(path)) do</div><div class='del'>-	  |back_io|</div><div class='del'>-	  irb.signal_status(:IN_LOAD) do </div><div class='del'>-	    if back_io.kind_of?(FileInputMethod)</div><div class='del'>-	      irb.eval_input</div><div class='del'>-	    else</div><div class='del'>-	      begin</div><div class='del'>-		irb.eval_input</div><div class='del'>-	      rescue LoadAbort</div><div class='del'>-		print "load abort!!\n"</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'>-    end</div><div class='del'>-</div><div class='del'>-    def load_file(path, priv = nil)</div><div class='del'>-      irb.suspend_name(path, File.basename(path)) do</div><div class='del'>-	</div><div class='del'>-	if priv</div><div class='del'>-	  ws = WorkSpace.new(Module.new)</div><div class='del'>-	else</div><div class='del'>-	  ws = WorkSpace.new</div><div class='del'>-	end</div><div class='del'>-	irb.suspend_workspace(ws) do</div><div class='del'>-	  irb.suspend_input_method(FileInputMethod.new(path)) do</div><div class='del'>-	    |back_io|</div><div class='del'>-	    irb.signal_status(:IN_LOAD) do </div><div class='del'>-#	      p irb.conf</div><div class='del'>-	      if back_io.kind_of?(FileInputMethod)</div><div class='del'>-		irb.eval_input</div><div class='del'>-	      else</div><div class='del'>-		begin</div><div class='del'>-		  irb.eval_input</div><div class='del'>-		rescue LoadAbort</div><div class='del'>-		  print "load abort!!\n"</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'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def old</div><div class='del'>-      back_io = @io</div><div class='del'>-      back_path = @irb_path</div><div class='del'>-      back_name = @irb_name</div><div class='del'>-      back_scanner = @irb.scanner</div><div class='del'>-      begin</div><div class='del'>- 	@io = FileInputMethod.new(path)</div><div class='del'>- 	@irb_name = File.basename(path)</div><div class='del'>-	@irb_path = path</div><div class='del'>-	@irb.signal_status(:IN_LOAD) do</div><div class='del'>-	  if back_io.kind_of?(FileInputMethod)</div><div class='del'>-	    @irb.eval_input</div><div class='del'>-	  else</div><div class='del'>-	    begin</div><div class='del'>-	      @irb.eval_input</div><div class='del'>-	    rescue LoadAbort</div><div class='del'>-	      print "load abort!!\n"</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      ensure</div><div class='del'>- 	@io = back_io</div><div class='del'>- 	@irb_name = back_name</div><div class='del'>- 	@irb_path = back_path</div><div class='del'>-	@irb.scanner = back_scanner</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='head'>diff --git a/lib/irb/ext/math-mode.rb b/lib/irb/ext/math-mode.rb<br/>deleted file mode 100644<br/>index bd443b96ed..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/math-mode.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/math-mode.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,37 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   math-mode.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-require "mathn"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  class Context</div><div class='del'>-    attr_reader :math_mode</div><div class='del'>-    alias math? math_mode</div><div class='del'>-</div><div class='del'>-    def math_mode=(opt)</div><div class='del'>-      if @math_mode == true &amp;&amp; opt == false</div><div class='del'>-	IRB.fail CantReturnToNormalMode</div><div class='del'>-	return</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @math_mode = opt</div><div class='del'>-      if math_mode</div><div class='del'>-	main.extend Math</div><div class='del'>-	print "start math mode\n" if verbose?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect?</div><div class='del'>-      @inspect_mode.nil? &amp;&amp; !@math_mode or @inspect_mode</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/irb/ext/multi-irb.rb b/lib/irb/ext/multi-irb.rb<br/>deleted file mode 100644<br/>index 4589b1d554..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/multi-irb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/multi-irb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,241 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/multi-irb.rb - multiple irb module</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-IRB.fail CantShiftToMultiIrbMode unless defined?(Thread)</div><div class='del'>-require "thread"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  # job management class</div><div class='del'>-  class JobManager</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      # @jobs = [[thread, irb],...]</div><div class='del'>-      @jobs = []</div><div class='del'>-      @current_job = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_accessor :current_job</div><div class='del'>-</div><div class='del'>-    def n_jobs</div><div class='del'>-      @jobs.size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def thread(key)</div><div class='del'>-      th, irb = search(key)</div><div class='del'>-      th</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def irb(key)</div><div class='del'>-      th, irb = search(key)</div><div class='del'>-      irb</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def main_thread</div><div class='del'>-      @jobs[0][0]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def main_irb</div><div class='del'>-      @jobs[0][1]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def insert(irb)</div><div class='del'>-      @jobs.push [Thread.current, irb]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def switch(key)</div><div class='del'>-      th, irb = search(key)</div><div class='del'>-      IRB.fail IrbAlreadyDead unless th.alive?</div><div class='del'>-      IRB.fail IrbSwitchedToCurrentThread if th == Thread.current</div><div class='del'>-      @current_job = irb</div><div class='del'>-      th.run</div><div class='del'>-      Thread.stop</div><div class='del'>-      @current_job = irb(Thread.current)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def kill(*keys)</div><div class='del'>-      for key in keys</div><div class='del'>-	th, irb = search(key)</div><div class='del'>-	IRB.fail IrbAlreadyDead unless th.alive?</div><div class='del'>-	th.exit</div><div class='del'>-      end</div><div class='del'>-    end    </div><div class='del'>-</div><div class='del'>-    def search(key)</div><div class='del'>-      case key</div><div class='del'>-      when Integer</div><div class='del'>-	@jobs[key]</div><div class='del'>-      when Irb</div><div class='del'>-	@jobs.find{|k, v| v.equal?(key)}</div><div class='del'>-      when Thread</div><div class='del'>-	@jobs.assoc(key)</div><div class='del'>-      else</div><div class='del'>-	assoc = @jobs.find{|k, v| v.context.main.equal?(key)}</div><div class='del'>-	IRB.fail NoSuchJob, key if assoc.nil?</div><div class='del'>-	assoc</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete(key)</div><div class='del'>-      case key</div><div class='del'>-      when Integer</div><div class='del'>-	IRB.fail NoSuchJob, key unless @jobs[key]</div><div class='del'>-	@jobs[key] = nil</div><div class='del'>-      else</div><div class='del'>-	catch(:EXISTS) do</div><div class='del'>-	  @jobs.each_index do</div><div class='del'>-	    |i|</div><div class='del'>-	    if @jobs[i] and (@jobs[i][0] == key ||</div><div class='del'>-			     @jobs[i][1] == key ||</div><div class='del'>-			     @jobs[i][1].context.main.equal?(key))</div><div class='del'>-	      @jobs[i] = nil</div><div class='del'>-	      throw :EXISTS</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	  IRB.fail NoSuchJob, key</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      until assoc = @jobs.pop; end unless @jobs.empty?</div><div class='del'>-      @jobs.push assoc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      ary = []</div><div class='del'>-      @jobs.each_index do</div><div class='del'>-	|i|</div><div class='del'>-	th, irb = @jobs[i]</div><div class='del'>-	next if th.nil?</div><div class='del'>-</div><div class='del'>-	if th.alive?</div><div class='del'>-	  if th.stop?</div><div class='del'>-	    t_status = "stop"</div><div class='del'>-	  else</div><div class='del'>-	    t_status = "running"</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  t_status = "exited"</div><div class='del'>-	end</div><div class='del'>-	ary.push format("#%d-&gt;%s on %s (%s: %s)",</div><div class='del'>-			i, </div><div class='del'>-			irb.context.irb_name, </div><div class='del'>-			irb.context.main,</div><div class='del'>-			th,</div><div class='del'>-			t_status)</div><div class='del'>-      end</div><div class='del'>-      ary.join("\n")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  @JobManager = JobManager.new</div><div class='del'>-</div><div class='del'>-  def IRB.JobManager</div><div class='del'>-    @JobManager</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def IRB.CurrentContext</div><div class='del'>-    IRB.JobManager.irb(Thread.current).context</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # invoke multi-irb </div><div class='del'>-  def IRB.irb(file = nil, *main)</div><div class='del'>-    workspace = WorkSpace.new(*main)</div><div class='del'>-    parent_thread = Thread.current</div><div class='del'>-    Thread.start do</div><div class='del'>-      begin</div><div class='del'>-	irb = Irb.new(workspace, file)</div><div class='del'>-      rescue </div><div class='del'>-	print "Subirb can't start with context(self): ", workspace.main.inspect, "\n"</div><div class='del'>-	print "return to main irb\n"</div><div class='del'>-	Thread.pass</div><div class='del'>-	Thread.main.wakeup</div><div class='del'>-	Thread.exit</div><div class='del'>-      end</div><div class='del'>-      @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]</div><div class='del'>-      @JobManager.insert(irb)</div><div class='del'>-      @JobManager.current_job = irb</div><div class='del'>-      begin</div><div class='del'>-	system_exit = false</div><div class='del'>-	catch(:IRB_EXIT) do</div><div class='del'>-	  irb.eval_input</div><div class='del'>-	end</div><div class='del'>-      rescue SystemExit</div><div class='del'>-	system_exit = true</div><div class='del'>-	raise</div><div class='del'>-	#fail</div><div class='del'>-      ensure</div><div class='del'>-	unless system_exit</div><div class='del'>-	  @JobManager.delete(irb)</div><div class='del'>-	  if parent_thread.alive?</div><div class='del'>-	    @JobManager.current_job = @JobManager.irb(parent_thread)</div><div class='del'>-	    parent_thread.run</div><div class='del'>-	  else</div><div class='del'>-	    @JobManager.current_job = @JobManager.main_irb</div><div class='del'>-	    @JobManager.main_thread.run</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Thread.stop</div><div class='del'>-    @JobManager.current_job = @JobManager.irb(Thread.current)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-#   class Context</div><div class='del'>-#     def set_last_value(value)</div><div class='del'>-#       @last_value = value</div><div class='del'>-#       @workspace.evaluate "_ = IRB.JobManager.irb(Thread.current).context.last_value"</div><div class='del'>-#       if @eval_history #and !@__.equal?(@last_value)</div><div class='del'>-# 	@eval_history_values.push @line_no, @last_value</div><div class='del'>-# 	@workspace.evaluate "__ = IRB.JobManager.irb(Thread.current).context.instance_eval{@eval_history_values}"</div><div class='del'>-#       end</div><div class='del'>-#       @last_value</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-</div><div class='del'>-#  module ExtendCommand</div><div class='del'>-#     def irb_context</div><div class='del'>-#       IRB.JobManager.irb(Thread.current).context</div><div class='del'>-#     end</div><div class='del'>-# #    alias conf irb_context</div><div class='del'>-#   end</div><div class='del'>-</div><div class='del'>-  @CONF[:SINGLE_IRB_MODE] = false</div><div class='del'>-  @JobManager.insert(@CONF[:MAIN_CONTEXT].irb)</div><div class='del'>-  @JobManager.current_job = @CONF[:MAIN_CONTEXT].irb</div><div class='del'>-</div><div class='del'>-  class Irb</div><div class='del'>-    def signal_handle</div><div class='del'>-      unless @context.ignore_sigint?</div><div class='del'>-	print "\nabort!!\n" if @context.verbose?</div><div class='del'>-	exit</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      case @signal_status</div><div class='del'>-      when :IN_INPUT</div><div class='del'>-	print "^C\n"</div><div class='del'>-	IRB.JobManager.thread(self).raise RubyLex::TerminateLineInput</div><div class='del'>-      when :IN_EVAL</div><div class='del'>-	IRB.irb_abort(self)</div><div class='del'>-      when :IN_LOAD</div><div class='del'>-	IRB.irb_abort(self, LoadAbort)</div><div class='del'>-      when :IN_IRB</div><div class='del'>-	# ignore</div><div class='del'>-      else</div><div class='del'>-	# ignore other cases as well</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  trap("SIGINT") do</div><div class='del'>-    @JobManager.current_job.signal_handle</div><div class='del'>-    Thread.stop</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/ext/save-history.rb b/lib/irb/ext/save-history.rb<br/>deleted file mode 100644<br/>index 5260bfcdd8..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/save-history.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/save-history.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,85 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-#</div><div class='del'>-#   save-history.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKAkeiju@ruby-lang.org)</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'>-require "readline"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module HistorySavingAbility</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Context</div><div class='del'>-    def init_save_history</div><div class='del'>-      unless (class&lt;&lt;@io;self;end).include?(HistorySavingAbility)</div><div class='del'>-	@io.extend(HistorySavingAbility)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def save_history</div><div class='del'>-      IRB.conf[:SAVE_HISTORY]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def save_history=(val)</div><div class='del'>-      IRB.conf[:SAVE_HISTORY] = val</div><div class='del'>-      if val</div><div class='del'>-	main_context = IRB.conf[:MAIN_CONTEXT]</div><div class='del'>-	main_context = self unless main_context</div><div class='del'>-	main_context.init_save_history</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def history_file</div><div class='del'>-      IRB.conf[:HISTORY_FILE]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def history_file=(hist)</div><div class='del'>-      IRB.conf[:HISTORY_FILE] = hist</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module HistorySavingAbility</div><div class='del'>-    include Readline</div><div class='del'>-</div><div class='del'>-    def HistorySavingAbility.create_finalizer</div><div class='del'>-      proc do</div><div class='del'>-	if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) &gt; 0</div><div class='del'>-	  if hf = IRB.conf[:HISTORY_FILE]</div><div class='del'>-	    file = File.expand_path(hf)</div><div class='del'>-	  end</div><div class='del'>-	  file = IRB.rc_file("_history") unless file</div><div class='del'>-	  open(file, 'w' ) do |f|</div><div class='del'>-	    hist = HISTORY.to_a</div><div class='del'>-	    f.puts(hist[-num..-1] || hist)</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 HistorySavingAbility.extended(obj)</div><div class='del'>-      ObjectSpace.define_finalizer(obj, HistorySavingAbility.create_finalizer)</div><div class='del'>-      obj.load_history</div><div class='del'>-      obj</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def load_history</div><div class='del'>-      hist = IRB.conf[:HISTORY_FILE]</div><div class='del'>-      hist = IRB.rc_file("_history") unless hist</div><div class='del'>-      if File.exist?(hist)</div><div class='del'>-	open(hist) do |f|</div><div class='del'>-	  f.each {|l| HISTORY &lt;&lt; l.chomp}</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='head'>diff --git a/lib/irb/ext/tracer.rb b/lib/irb/ext/tracer.rb<br/>deleted file mode 100644<br/>index 805f630a4d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/tracer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/tracer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,61 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/lib/tracer.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-require "tracer"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-</div><div class='del'>-  # initialize tracing function</div><div class='del'>-  def IRB.initialize_tracer</div><div class='del'>-    Tracer.verbose = false</div><div class='del'>-    Tracer.add_filter {</div><div class='del'>-      |event, file, line, id, binding, *rests|</div><div class='del'>-      /^#{Regexp.quote(@CONF[:IRB_LIB_PATH])}/ !~ file and</div><div class='del'>-	File::basename(file) != "irb.rb"</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Context</div><div class='del'>-    attr_reader :use_tracer</div><div class='del'>-    alias use_tracer? use_tracer</div><div class='del'>-</div><div class='del'>-    def use_tracer=(opt)</div><div class='del'>-      if opt</div><div class='del'>-	Tracer.set_get_line_procs(@irb_path) {</div><div class='del'>-	  |line_no, *rests|</div><div class='del'>-	  @io.line(line_no)</div><div class='del'>-	}</div><div class='del'>-      elsif !opt &amp;&amp; @use_tracer</div><div class='del'>-	Tracer.off</div><div class='del'>-      end</div><div class='del'>-      @use_tracer=opt</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class WorkSpace</div><div class='del'>-    alias __evaluate__ evaluate</div><div class='del'>-    def evaluate(context, statements, file = nil, line = nil)</div><div class='del'>-      if context.use_tracer? &amp;&amp; file != nil &amp;&amp; line != nil</div><div class='del'>-	Tracer.on </div><div class='del'>-	begin</div><div class='del'>-	  __evaluate__(context, statements, file, line)</div><div class='del'>-	ensure</div><div class='del'>-	  Tracer.off</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	__evaluate__(context, statements, file || __FILE__, line || __LINE__)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  IRB.initialize_tracer</div><div class='del'>-end</div><div class='del'>-	</div><div class='head'>diff --git a/lib/irb/ext/use-loader.rb b/lib/irb/ext/use-loader.rb<br/>deleted file mode 100644<br/>index 1b4d480fcd..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/use-loader.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/use-loader.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,65 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   use-loader.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "irb/cmd/load"</div><div class='del'>-require "irb/ext/loader"</div><div class='del'>-</div><div class='del'>-class Object</div><div class='del'>-  alias __original__load__IRB_use_loader__ load</div><div class='del'>-  alias __original__require__IRB_use_loader__ require</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module ExtendCommandBundle</div><div class='del'>-    def irb_load(*opts, &amp;b)</div><div class='del'>-      ExtendCommand::Load.execute(irb_context, *opts, &amp;b)</div><div class='del'>-    end</div><div class='del'>-    def irb_require(*opts, &amp;b)</div><div class='del'>-      ExtendCommand::Require.execute(irb_context, *opts, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Context</div><div class='del'>-</div><div class='del'>-    IRB.conf[:USE_LOADER] = false</div><div class='del'>-    </div><div class='del'>-    def use_loader</div><div class='del'>-      IRB.conf[:USE_LOADER]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias use_loader? use_loader</div><div class='del'>-</div><div class='del'>-    def use_loader=(opt)</div><div class='del'>-</div><div class='del'>-      if IRB.conf[:USE_LOADER] != opt</div><div class='del'>-	IRB.conf[:USE_LOADER] = opt</div><div class='del'>-	if opt</div><div class='del'>-	  if !$".include?("irb/cmd/load")</div><div class='del'>-	  end</div><div class='del'>-	  (class&lt;&lt;@workspace.main;self;end).instance_eval {</div><div class='del'>-	    alias_method :load, :irb_load</div><div class='del'>-	    alias_method :require, :irb_require</div><div class='del'>-	  }</div><div class='del'>-	else</div><div class='del'>-	  (class&lt;&lt;@workspace.main;self;end).instance_eval {</div><div class='del'>-	    alias_method :load, :__original__load__IRB_use_loader__</div><div class='del'>-	    alias_method :require, :__original__require__IRB_use_loader__</div><div class='del'>-	  }</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      print "Switch to load/require#{unless use_loader; ' non';end} trace mode.\n" if verbose?</div><div class='del'>-      opt</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='head'>diff --git a/lib/irb/ext/workspaces.rb b/lib/irb/ext/workspaces.rb<br/>deleted file mode 100644<br/>index 79098570dc..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ext/workspaces.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ext/workspaces.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   push-ws.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-module IRB</div><div class='del'>-  class Context</div><div class='del'>-</div><div class='del'>-    def irb_level</div><div class='del'>-      workspace_stack.size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def workspaces</div><div class='del'>-      if defined? @workspaces</div><div class='del'>-	@workspaces</div><div class='del'>-      else</div><div class='del'>-	@workspaces = []</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def push_workspace(*_main)</div><div class='del'>-      if _main.empty?</div><div class='del'>-	if workspaces.empty?</div><div class='del'>-	  print "No other workspace\n"</div><div class='del'>-	  return nil</div><div class='del'>-	end</div><div class='del'>-	ws = workspaces.pop</div><div class='del'>-	workspaces.push @workspace</div><div class='del'>-	@workspace = ws</div><div class='del'>-	return workspaces</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      workspaces.push @workspace</div><div class='del'>-      @workspace = WorkSpace.new(@workspace.binding, _main[0])</div><div class='del'>-      if !(class&lt;&lt;main;ancestors;end).include?(ExtendCommandBundle)</div><div class='del'>-	main.extend ExtendCommandBundle</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pop_workspace</div><div class='del'>-      if workspaces.empty?</div><div class='del'>-	print "workspace stack empty\n"</div><div class='del'>-	return</div><div class='del'>-      end</div><div class='del'>-      @workspace = workspaces.pop</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/irb/extend-command.rb b/lib/irb/extend-command.rb<br/>deleted file mode 100644<br/>index 508721c11d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/extend-command.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/extend-command.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,264 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/extend-command.rb - irb extend command </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-module IRB</div><div class='del'>-  #</div><div class='del'>-  # IRB extended command</div><div class='del'>-  #</div><div class='del'>-  module ExtendCommandBundle</div><div class='del'>-    EXCB = ExtendCommandBundle</div><div class='del'>-</div><div class='del'>-    NO_OVERRIDE = 0</div><div class='del'>-    OVERRIDE_PRIVATE_ONLY = 0x01</div><div class='del'>-    OVERRIDE_ALL = 0x02</div><div class='del'>-</div><div class='del'>-    def irb_exit(ret = 0)</div><div class='del'>-      irb_context.exit(ret)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def irb_context</div><div class='del'>-      IRB.CurrentContext</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @ALIASES = [</div><div class='del'>-      [:context, :irb_context, NO_OVERRIDE],</div><div class='del'>-      [:conf, :irb_context, NO_OVERRIDE],</div><div class='del'>-      [:irb_quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],</div><div class='del'>-      [:exit, :irb_exit, OVERRIDE_PRIVATE_ONLY],</div><div class='del'>-      [:quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    @EXTEND_COMMANDS = [</div><div class='del'>-      [:irb_current_working_workspace, :CurrentWorkingWorkspace, "irb/cmd/chws",</div><div class='del'>-	[:irb_print_working_workspace, OVERRIDE_ALL],</div><div class='del'>-	[:irb_cwws, OVERRIDE_ALL],</div><div class='del'>-	[:irb_pwws, OVERRIDE_ALL],</div><div class='del'>-#	[:irb_cww, OVERRIDE_ALL],</div><div class='del'>-#	[:irb_pww, OVERRIDE_ALL],</div><div class='del'>-	[:cwws, NO_OVERRIDE],</div><div class='del'>-	[:pwws, NO_OVERRIDE],</div><div class='del'>-#	[:cww, NO_OVERRIDE],</div><div class='del'>-#	[:pww, NO_OVERRIDE],</div><div class='del'>-	[:irb_current_working_binding, OVERRIDE_ALL],</div><div class='del'>-	[:irb_print_working_binding, OVERRIDE_ALL],</div><div class='del'>-	[:irb_cwb, OVERRIDE_ALL],</div><div class='del'>-	[:irb_pwb, OVERRIDE_ALL],</div><div class='del'>-#	[:cwb, NO_OVERRIDE],</div><div class='del'>-#	[:pwb, NO_OVERRIDE]</div><div class='del'>-      ],</div><div class='del'>-      [:irb_change_workspace, :ChangeWorkspace, "irb/cmd/chws",</div><div class='del'>-	[:irb_chws, OVERRIDE_ALL],</div><div class='del'>-#	[:irb_chw, OVERRIDE_ALL],</div><div class='del'>-	[:irb_cws, OVERRIDE_ALL],</div><div class='del'>-#	[:irb_cw, OVERRIDE_ALL],</div><div class='del'>-	[:chws, NO_OVERRIDE],</div><div class='del'>-#	[:chw, NO_OVERRIDE],</div><div class='del'>-	[:cws, NO_OVERRIDE],</div><div class='del'>-#	[:cw, NO_OVERRIDE],</div><div class='del'>-	[:irb_change_binding, OVERRIDE_ALL],</div><div class='del'>-	[:irb_cb, OVERRIDE_ALL],</div><div class='del'>-	[:cb, NO_OVERRIDE]],</div><div class='del'>-</div><div class='del'>-      [:irb_workspaces, :Workspaces, "irb/cmd/pushws",</div><div class='del'>-	[:workspaces, NO_OVERRIDE],</div><div class='del'>-	[:irb_bindings, OVERRIDE_ALL],</div><div class='del'>-	[:bindings, NO_OVERRIDE]],</div><div class='del'>-      [:irb_push_workspace, :PushWorkspace, "irb/cmd/pushws",</div><div class='del'>-	[:irb_pushws, OVERRIDE_ALL],</div><div class='del'>-#	[:irb_pushw, OVERRIDE_ALL],</div><div class='del'>-	[:pushws, NO_OVERRIDE],</div><div class='del'>-#	[:pushw, NO_OVERRIDE],</div><div class='del'>-	[:irb_push_binding, OVERRIDE_ALL],</div><div class='del'>-	[:irb_pushb, OVERRIDE_ALL],</div><div class='del'>-	[:pushb, NO_OVERRIDE]],</div><div class='del'>-      [:irb_pop_workspace, :PopWorkspace, "irb/cmd/pushws",</div><div class='del'>-	[:irb_popws, OVERRIDE_ALL],</div><div class='del'>-#	[:irb_popw, OVERRIDE_ALL],</div><div class='del'>-	[:popws, NO_OVERRIDE],</div><div class='del'>-#	[:popw, NO_OVERRIDE],</div><div class='del'>-	[:irb_pop_binding, OVERRIDE_ALL],</div><div class='del'>-	[:irb_popb, OVERRIDE_ALL],</div><div class='del'>-	[:popb, NO_OVERRIDE]],</div><div class='del'>-</div><div class='del'>-      [:irb_load, :Load, "irb/cmd/load"],</div><div class='del'>-      [:irb_require, :Require, "irb/cmd/load"],</div><div class='del'>-      [:irb_source, :Source, "irb/cmd/load", </div><div class='del'>-	[:source, NO_OVERRIDE]],</div><div class='del'>-</div><div class='del'>-      [:irb, :IrbCommand, "irb/cmd/subirb"],</div><div class='del'>-      [:irb_jobs, :Jobs, "irb/cmd/subirb", </div><div class='del'>-	[:jobs, NO_OVERRIDE]],</div><div class='del'>-      [:irb_fg, :Foreground, "irb/cmd/subirb", </div><div class='del'>-	[:fg, NO_OVERRIDE]],</div><div class='del'>-      [:irb_kill, :Kill, "irb/cmd/subirb", </div><div class='del'>-	[:kill, OVERRIDE_PRIVATE_ONLY]],</div><div class='del'>-</div><div class='del'>-      [:irb_help, :Help, "irb/cmd/help",</div><div class='del'>-        [:help, NO_OVERRIDE]],</div><div class='del'>-</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    def self.install_extend_commands</div><div class='del'>-      for args in @EXTEND_COMMANDS</div><div class='del'>-	def_extend_command(*args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # aliases = [commands_alias, flag], ...</div><div class='del'>-    def self.def_extend_command(cmd_name, cmd_class, load_file = nil, *aliases)</div><div class='del'>-      case cmd_class</div><div class='del'>-      when Symbol</div><div class='del'>-	cmd_class = cmd_class.id2name</div><div class='del'>-      when String</div><div class='del'>-      when Class</div><div class='del'>-	cmd_class = cmd_class.name</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if load_file</div><div class='del'>-	eval %[</div><div class='del'>-	  def #{cmd_name}(*opts, &amp;b)</div><div class='del'>-	    require "#{load_file}"</div><div class='del'>-	    eval %[</div><div class='del'>-	      def #{cmd_name}(*opts, &amp;b)</div><div class='del'>-		ExtendCommand::#{cmd_class}.execute(irb_context, *opts, &amp;b)</div><div class='del'>-	      end</div><div class='del'>-	    ]</div><div class='del'>-	    send :#{cmd_name}, *opts, &amp;b</div><div class='del'>-	  end</div><div class='del'>-	]</div><div class='del'>-      else</div><div class='del'>-	eval %[</div><div class='del'>-	  def #{cmd_name}(*opts, &amp;b)</div><div class='del'>-	    ExtendCommand::#{cmd_class}.execute(irb_context, *opts, &amp;b)</div><div class='del'>-	  end</div><div class='del'>-	]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      for ali, flag in aliases</div><div class='del'>-	@ALIASES.push [ali, cmd_name, flag]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # override = {NO_OVERRIDE, OVERRIDE_PRIVATE_ONLY, OVERRIDE_ALL}</div><div class='del'>-    def install_alias_method(to, from, override = NO_OVERRIDE)</div><div class='del'>-      to = to.id2name unless to.kind_of?(String)</div><div class='del'>-      from = from.id2name unless from.kind_of?(String)</div><div class='del'>-</div><div class='del'>-      if override == OVERRIDE_ALL or</div><div class='del'>-	  (override == OVERRIDE_PRIVATE_ONLY) &amp;&amp; !respond_to?(to) or</div><div class='del'>-	  (override == NO_OVERRIDE) &amp;&amp;  !respond_to?(to, true)</div><div class='del'>-	target = self</div><div class='del'>-	(class&lt;&lt;self;self;end).instance_eval{</div><div class='del'>-	  if target.respond_to?(to, true) &amp;&amp; </div><div class='del'>-	      !target.respond_to?(EXCB.irb_original_method_name(to), true)</div><div class='del'>-	    alias_method(EXCB.irb_original_method_name(to), to) </div><div class='del'>-	  end</div><div class='del'>-	  alias_method to, from</div><div class='del'>-	}</div><div class='del'>-      else</div><div class='del'>-	print "irb: warn: can't alias #{to} from #{from}.\n"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.irb_original_method_name(method_name)</div><div class='del'>-      "irb_" + method_name + "_org"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.extend_object(obj)</div><div class='del'>-      unless (class&lt;&lt;obj;ancestors;end).include?(EXCB)</div><div class='del'>-	super</div><div class='del'>-	for ali, com, flg in @ALIASES</div><div class='del'>-	  obj.install_alias_method(ali, com, flg)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    install_extend_commands</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # extension support for Context</div><div class='del'>-  module ContextExtender</div><div class='del'>-    CE = ContextExtender</div><div class='del'>-</div><div class='del'>-    @EXTEND_COMMANDS = [</div><div class='del'>-      [:eval_history=, "irb/ext/history.rb"],</div><div class='del'>-      [:use_tracer=, "irb/ext/tracer.rb"],</div><div class='del'>-      [:math_mode=, "irb/ext/math-mode.rb"],</div><div class='del'>-      [:use_loader=, "irb/ext/use-loader.rb"],</div><div class='del'>-      [:save_history=, "irb/ext/save-history.rb"],</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    def self.install_extend_commands</div><div class='del'>-      for args in @EXTEND_COMMANDS</div><div class='del'>-	def_extend_command(*args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.def_extend_command(cmd_name, load_file, *aliases)</div><div class='del'>-      Context.module_eval %[</div><div class='del'>-        def #{cmd_name}(*opts, &amp;b)</div><div class='del'>-	  Context.module_eval {remove_method(:#{cmd_name})}</div><div class='del'>-	  require "#{load_file}"</div><div class='del'>-	  send :#{cmd_name}, *opts, &amp;b</div><div class='del'>-	end</div><div class='del'>-	for ali in aliases</div><div class='del'>-	  alias_method ali, cmd_name</div><div class='del'>-	end</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    CE.install_extend_commands</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module MethodExtender</div><div class='del'>-    def def_pre_proc(base_method, extend_method)</div><div class='del'>-      base_method = base_method.to_s</div><div class='del'>-      extend_method = extend_method.to_s</div><div class='del'>-</div><div class='del'>-      alias_name = new_alias_name(base_method)</div><div class='del'>-      module_eval %[</div><div class='del'>-        alias_method alias_name, base_method</div><div class='del'>-        def #{base_method}(*opts)</div><div class='del'>-	  send :#{extend_method}, *opts</div><div class='del'>-	  send :#{alias_name}, *opts</div><div class='del'>-	end</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def def_post_proc(base_method, extend_method)</div><div class='del'>-      base_method = base_method.to_s</div><div class='del'>-      extend_method = extend_method.to_s</div><div class='del'>-</div><div class='del'>-      alias_name = new_alias_name(base_method)</div><div class='del'>-      module_eval %[</div><div class='del'>-        alias_method alias_name, base_method</div><div class='del'>-        def #{base_method}(*opts)</div><div class='del'>-	  send :#{alias_name}, *opts</div><div class='del'>-	  send :#{extend_method}, *opts</div><div class='del'>-	end</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return #{prefix}#{name}#{postfix}&lt;num&gt;</div><div class='del'>-    def new_alias_name(name, prefix = "__alias_of__", postfix = "__")</div><div class='del'>-      base_name = "#{prefix}#{name}#{postfix}"</div><div class='del'>-      all_methods = instance_methods(true) + private_instance_methods(true)</div><div class='del'>-      same_methods = all_methods.grep(/^#{Regexp.quote(base_name)}[0-9]*$/)</div><div class='del'>-      return base_name if same_methods.empty?</div><div class='del'>-      no = same_methods.size</div><div class='del'>-      while !same_methods.include?(alias_name = base_name + no)</div><div class='del'>-	no += 1</div><div class='del'>-      end</div><div class='del'>-      alias_name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/irb/frame.rb b/lib/irb/frame.rb<br/>deleted file mode 100644<br/>index f0b0a9abf3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/frame.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/frame.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,67 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   frame.rb - </div><div class='del'>-#   	$Release Version: 0.9$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(Nihon Rational Software Co.,Ltd)</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'>-require "e2mmap"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  class Frame</div><div class='del'>-    extend Exception2MessageMapper</div><div class='del'>-    def_exception :FrameOverflow, "frame overflow"</div><div class='del'>-    def_exception :FrameUnderflow, "frame underflow"</div><div class='del'>-</div><div class='del'>-    INIT_STACK_TIMES = 3</div><div class='del'>-    CALL_STACK_OFFSET = 3</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      @frames = [TOPLEVEL_BINDING] * INIT_STACK_TIMES</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def trace_func(event, file, line, id, binding)</div><div class='del'>-      case event</div><div class='del'>-      when 'call', 'class'</div><div class='del'>-	@frames.push binding</div><div class='del'>-      when 'return', 'end'</div><div class='del'>-	@frames.pop</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def top(n = 0)</div><div class='del'>-      bind = @frames[-(n + CALL_STACK_OFFSET)]</div><div class='del'>-      Fail FrameUnderflow unless bind</div><div class='del'>-      bind</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def bottom(n = 0)</div><div class='del'>-      bind = @frames[n]</div><div class='del'>-      Fail FrameOverflow unless bind</div><div class='del'>-      bind</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # singleton functions</div><div class='del'>-    def Frame.bottom(n = 0)</div><div class='del'>-      @backtrace.bottom(n)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Frame.top(n = 0)</div><div class='del'>-      @backtrace.top(n)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Frame.sender</div><div class='del'>-      eval "self", @backtrace.top</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @backtrace = Frame.new</div><div class='del'>-    set_trace_func proc{|event, file, line, id, binding, klass|</div><div class='del'>-      @backtrace.trace_func(event, file, line, id, binding)</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/help.rb b/lib/irb/help.rb<br/>deleted file mode 100644<br/>index 4921de6ec9..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/help.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/help.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/help.rb - print usage module</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</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'>-module IRB</div><div class='del'>-  def IRB.print_usage</div><div class='del'>-    lc = IRB.conf[:LC_MESSAGES]</div><div class='del'>-    path = lc.find("irb/help-message")</div><div class='del'>-    space_line = false</div><div class='del'>-    File.foreach(path) do</div><div class='del'>-      |l|</div><div class='del'>-      if /^\s*$/ =~ l</div><div class='del'>-	lc.puts l unless space_line</div><div class='del'>-	space_line = true</div><div class='del'>-	next</div><div class='del'>-      end</div><div class='del'>-      space_line = false</div><div class='del'>-      </div><div class='del'>-      l.sub!(/#.*$/, "")</div><div class='del'>-      next if /^\s*$/ =~ l</div><div class='del'>-      lc.puts l</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/irb/init.rb b/lib/irb/init.rb<br/>deleted file mode 100644<br/>index db22ca639b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/init.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/init.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,259 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/init.rb - irb initialize module</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-module IRB</div><div class='del'>-</div><div class='del'>-  # initialize config</div><div class='del'>-  def IRB.setup(ap_path)</div><div class='del'>-    IRB.init_config(ap_path)</div><div class='del'>-    IRB.init_error</div><div class='del'>-    IRB.parse_opts</div><div class='del'>-    IRB.run_config</div><div class='del'>-    IRB.load_modules</div><div class='del'>-</div><div class='del'>-    unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]</div><div class='del'>-      IRB.fail(UndefinedPromptMode, @CONF[:PROMPT_MODE]) </div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # @CONF default setting</div><div class='del'>-  def IRB.init_config(ap_path)</div><div class='del'>-    # class instance variables</div><div class='del'>-    @TRACER_INITIALIZED = false</div><div class='del'>-</div><div class='del'>-    # default configurations</div><div class='del'>-    unless ap_path and @CONF[:AP_NAME]</div><div class='del'>-      ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")</div><div class='del'>-    end</div><div class='del'>-    @CONF[:AP_NAME] = File::basename(ap_path, ".rb")</div><div class='del'>-</div><div class='del'>-    @CONF[:IRB_NAME] = "irb"</div><div class='del'>-    @CONF[:IRB_LIB_PATH] = File.dirname(__FILE__)</div><div class='del'>-</div><div class='del'>-    @CONF[:RC] = true</div><div class='del'>-    @CONF[:LOAD_MODULES] = []</div><div class='del'>-    @CONF[:IRB_RC] = nil</div><div class='del'>-</div><div class='del'>-    @CONF[:MATH_MODE] = false</div><div class='del'>-    @CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod)</div><div class='del'>-    @CONF[:INSPECT_MODE] = nil</div><div class='del'>-    @CONF[:USE_TRACER] = false</div><div class='del'>-    @CONF[:USE_LOADER] = false</div><div class='del'>-    @CONF[:IGNORE_SIGINT] = true</div><div class='del'>-    @CONF[:IGNORE_EOF] = false</div><div class='del'>-    @CONF[:ECHO] = nil</div><div class='del'>-    @CONF[:VERBOSE] = nil</div><div class='del'>-</div><div class='del'>-    @CONF[:EVAL_HISTORY] = nil</div><div class='del'>-    @CONF[:SAVE_HISTORY] = nil</div><div class='del'>-</div><div class='del'>-    @CONF[:BACK_TRACE_LIMIT] = 16</div><div class='del'>-</div><div class='del'>-    @CONF[:PROMPT] = {</div><div class='del'>-      :NULL =&gt; {</div><div class='del'>-	:PROMPT_I =&gt; nil,</div><div class='del'>-	:PROMPT_N =&gt; nil,</div><div class='del'>-	:PROMPT_S =&gt; nil,</div><div class='del'>-	:PROMPT_C =&gt; nil,</div><div class='del'>-	:RETURN =&gt; "%s\n"</div><div class='del'>-      },</div><div class='del'>-      :DEFAULT =&gt; {</div><div class='del'>-	:PROMPT_I =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-	:PROMPT_N =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-	:PROMPT_S =&gt; "%N(%m):%03n:%i%l ",</div><div class='del'>-	:PROMPT_C =&gt; "%N(%m):%03n:%i* ",</div><div class='del'>-	:RETURN =&gt; "=&gt; %s\n"</div><div class='del'>-      },</div><div class='del'>-      :CLASSIC =&gt; {</div><div class='del'>-	:PROMPT_I =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-	:PROMPT_N =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-	:PROMPT_S =&gt; "%N(%m):%03n:%i%l ",</div><div class='del'>-	:PROMPT_C =&gt; "%N(%m):%03n:%i* ",</div><div class='del'>-	:RETURN =&gt; "%s\n"</div><div class='del'>-      },</div><div class='del'>-      :SIMPLE =&gt; {</div><div class='del'>-	:PROMPT_I =&gt; "&gt;&gt; ",</div><div class='del'>-	:PROMPT_N =&gt; "&gt;&gt; ",</div><div class='del'>-	:PROMPT_S =&gt; nil,</div><div class='del'>-	:PROMPT_C =&gt; "?&gt; ",</div><div class='del'>-	:RETURN =&gt; "=&gt; %s\n"</div><div class='del'>-      },</div><div class='del'>-      :INF_RUBY =&gt; {</div><div class='del'>-	:PROMPT_I =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-#	:PROMPT_N =&gt; "%N(%m):%03n:%i&gt; ",</div><div class='del'>-	:PROMPT_N =&gt; nil,</div><div class='del'>-	:PROMPT_S =&gt; nil,</div><div class='del'>-	:PROMPT_C =&gt; nil,</div><div class='del'>-	:RETURN =&gt; "%s\n",</div><div class='del'>-	:AUTO_INDENT =&gt; true</div><div class='del'>-      },</div><div class='del'>-      :XMP =&gt; {</div><div class='del'>-	:PROMPT_I =&gt; nil,</div><div class='del'>-	:PROMPT_N =&gt; nil,</div><div class='del'>-	:PROMPT_S =&gt; nil,</div><div class='del'>-	:PROMPT_C =&gt; nil,</div><div class='del'>-	:RETURN =&gt; "    ==&gt;%s\n"</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    @CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)</div><div class='del'>-    @CONF[:AUTO_INDENT] = false</div><div class='del'>-</div><div class='del'>-    @CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING</div><div class='del'>-    @CONF[:SINGLE_IRB] = false</div><div class='del'>-</div><div class='del'>-#    @CONF[:LC_MESSAGES] = "en"</div><div class='del'>-    @CONF[:LC_MESSAGES] = Locale.new</div><div class='del'>-    </div><div class='del'>-    @CONF[:DEBUG_LEVEL] = 1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def IRB.init_error</div><div class='del'>-    @CONF[:LC_MESSAGES].load("irb/error.rb")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  FEATURE_IOPT_CHANGE_VERSION = "1.9.0"</div><div class='del'>-</div><div class='del'>-  # option analyzing</div><div class='del'>-  def IRB.parse_opts</div><div class='del'>-    load_path = []</div><div class='del'>-    while opt = ARGV.shift</div><div class='del'>-      case opt</div><div class='del'>-      when "-f"</div><div class='del'>-	@CONF[:RC] = false</div><div class='del'>-      when "-m"</div><div class='del'>-	@CONF[:MATH_MODE] = true</div><div class='del'>-      when "-d"</div><div class='del'>-	$DEBUG = true</div><div class='del'>-      when /^-r(.+)?/</div><div class='del'>-	opt = $1 || ARGV.shift</div><div class='del'>-	@CONF[:LOAD_MODULES].push opt if opt</div><div class='del'>-      when /^-I(.+)?/</div><div class='del'>-        opt = $1 || ARGV.shift</div><div class='del'>-	load_path.concat(opt.split(File::PATH_SEPARATOR)) if opt</div><div class='del'>-      when /^-K(.)/</div><div class='del'>-	$KCODE = $1</div><div class='del'>-      when "--inspect"</div><div class='del'>-	@CONF[:INSPECT_MODE] = true</div><div class='del'>-      when "--noinspect"</div><div class='del'>-	@CONF[:INSPECT_MODE] = false</div><div class='del'>-      when "--readline"</div><div class='del'>-	@CONF[:USE_READLINE] = true</div><div class='del'>-      when "--noreadline"</div><div class='del'>-	@CONF[:USE_READLINE] = false</div><div class='del'>-      when "--echo"</div><div class='del'>-	@CONF[:ECHO] = true</div><div class='del'>-      when "--noecho"</div><div class='del'>-	@CONF[:ECHO] = false</div><div class='del'>-      when "--verbose"</div><div class='del'>-	@CONF[:VERBOSE] = true</div><div class='del'>-      when "--noverbose"</div><div class='del'>-	@CONF[:VERBOSE] = false</div><div class='del'>-      when "--prompt-mode", "--prompt"</div><div class='del'>-	prompt_mode = ARGV.shift.upcase.tr("-", "_").intern</div><div class='del'>-	@CONF[:PROMPT_MODE] = prompt_mode</div><div class='del'>-      when "--noprompt"</div><div class='del'>-	@CONF[:PROMPT_MODE] = :NULL</div><div class='del'>-      when "--inf-ruby-mode"</div><div class='del'>-	@CONF[:PROMPT_MODE] = :INF_RUBY</div><div class='del'>-      when "--sample-book-mode", "--simple-prompt"</div><div class='del'>-	@CONF[:PROMPT_MODE] = :SIMPLE</div><div class='del'>-      when "--tracer"</div><div class='del'>-	@CONF[:USE_TRACER] = true</div><div class='del'>-      when "--back-trace-limit"</div><div class='del'>-	@CONF[:BACK_TRACE_LIMIT] = ARGV.shift.to_i</div><div class='del'>-      when "--context-mode"</div><div class='del'>-	@CONF[:CONTEXT_MODE] = ARGV.shift.to_i</div><div class='del'>-      when "--single-irb"</div><div class='del'>-	@CONF[:SINGLE_IRB] = true</div><div class='del'>-      when "--irb_debug"</div><div class='del'>-	@CONF[:DEBUG_LEVEL] = ARGV.shift.to_i</div><div class='del'>-      when "-v", "--version"</div><div class='del'>-	print IRB.version, "\n"</div><div class='del'>-	exit 0</div><div class='del'>-      when "-h", "--help"</div><div class='del'>-	require "irb/help"</div><div class='del'>-	IRB.print_usage</div><div class='del'>-	exit 0</div><div class='del'>-      when /^-/</div><div class='del'>-	IRB.fail UnrecognizedSwitch, opt</div><div class='del'>-      else</div><div class='del'>-	@CONF[:SCRIPT] = opt</div><div class='del'>-	$0 = opt</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if RUBY_VERSION &gt;= FEATURE_IOPT_CHANGE_VERSION</div><div class='del'>-      load_path.collect! do |path|</div><div class='del'>-	/\A\.\// =~ path ? path : File.expand_path(path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    $LOAD_PATH.unshift(*load_path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # running config</div><div class='del'>-  def IRB.run_config</div><div class='del'>-    if @CONF[:RC]</div><div class='del'>-      begin</div><div class='del'>-	load rc_file</div><div class='del'>-      rescue LoadError, Errno::ENOENT</div><div class='del'>-      rescue</div><div class='del'>-	print "load error: #{rc_file}\n"</div><div class='del'>-	print $!.class, ": ", $!, "\n"</div><div class='del'>-	for err in $@[0, $@.size - 2]</div><div class='del'>-	  print "\t", err, "\n"</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'>-  IRBRC_EXT = "rc"</div><div class='del'>-  def IRB.rc_file(ext = IRBRC_EXT)</div><div class='del'>-    if !@CONF[:RC_NAME_GENERATOR]</div><div class='del'>-      rc_file_generators do |rcgen|</div><div class='del'>-	@CONF[:RC_NAME_GENERATOR] ||= rcgen</div><div class='del'>-	if File.exist?(rcgen.call(IRBRC_EXT))</div><div class='del'>-	  @CONF[:RC_NAME_GENERATOR] = rcgen</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @CONF[:RC_NAME_GENERATOR].call ext</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # enumerate possible rc-file base name generators</div><div class='del'>-  def IRB.rc_file_generators</div><div class='del'>-    if irbrc = ENV["IRBRC"]</div><div class='del'>-      yield proc{|rc|  rc == "rc" ? irbrc : irbrc+rc}</div><div class='del'>-    end</div><div class='del'>-    if home = ENV["HOME"]</div><div class='del'>-      yield proc{|rc| home+"/.irb#{rc}"} </div><div class='del'>-    end</div><div class='del'>-    home = Dir.pwd</div><div class='del'>-    yield proc{|rc| home+"/.irb#{rc}"}</div><div class='del'>-    yield proc{|rc| home+"/irb#{rc.sub(/\A_?/, '.')}"}</div><div class='del'>-    yield proc{|rc| home+"/_irb#{rc}"}</div><div class='del'>-    yield proc{|rc| home+"/$irb#{rc}"}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # loading modules</div><div class='del'>-  def IRB.load_modules</div><div class='del'>-    for m in @CONF[:LOAD_MODULES]</div><div class='del'>-      begin</div><div class='del'>-	require m</div><div class='del'>-      rescue</div><div class='del'>-	print $@[0], ":", $!.class, ": ", $!, "\n"</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='head'>diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb<br/>deleted file mode 100644<br/>index bfb90fa59a..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/input-method.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/input-method.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,120 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/input-method.rb - input methods used irb</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-module IRB</div><div class='del'>-  # </div><div class='del'>-  # InputMethod</div><div class='del'>-  #	StdioInputMethod</div><div class='del'>-  #	FileInputMethod</div><div class='del'>-  #	(ReadlineInputMethod)</div><div class='del'>-  #</div><div class='del'>-  STDIN_FILE_NAME = "(line)"</div><div class='del'>-  class InputMethod</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-    def initialize(file = STDIN_FILE_NAME)</div><div class='del'>-      @file_name = file</div><div class='del'>-    end</div><div class='del'>-    attr_reader :file_name</div><div class='del'>-</div><div class='del'>-    attr_accessor :prompt</div><div class='del'>-    </div><div class='del'>-    def gets</div><div class='del'>-      IRB.fail NotImplementedError, "gets"</div><div class='del'>-    end</div><div class='del'>-    public :gets</div><div class='del'>-</div><div class='del'>-    def readable_atfer_eof?</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  class StdioInputMethod &lt; InputMethod</div><div class='del'>-    def initialize</div><div class='del'>-      super</div><div class='del'>-      @line_no = 0</div><div class='del'>-      @line = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gets</div><div class='del'>-      print @prompt</div><div class='del'>-      @line[@line_no += 1] = $stdin.gets</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def eof?</div><div class='del'>-      $stdin.eof?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def readable_atfer_eof?</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def line(line_no)</div><div class='del'>-      @line[line_no]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  class FileInputMethod &lt; InputMethod</div><div class='del'>-    def initialize(file)</div><div class='del'>-      super</div><div class='del'>-      @io = open(file)</div><div class='del'>-    end</div><div class='del'>-    attr_reader :file_name</div><div class='del'>-</div><div class='del'>-    def eof?</div><div class='del'>-      @io.eof?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gets</div><div class='del'>-      print @prompt</div><div class='del'>-      l = @io.gets</div><div class='del'>-#      print @prompt, l</div><div class='del'>-      l</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  begin</div><div class='del'>-    require "readline"</div><div class='del'>-    class ReadlineInputMethod &lt; InputMethod</div><div class='del'>-      include Readline </div><div class='del'>-      def initialize</div><div class='del'>-	super</div><div class='del'>-</div><div class='del'>-	@line_no = 0</div><div class='del'>-	@line = []</div><div class='del'>-	@eof = false</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def gets</div><div class='del'>-	if l = readline(@prompt, false)</div><div class='del'>-          HISTORY.push(l) if !l.empty?</div><div class='del'>-	  @line[@line_no += 1] = l + "\n"</div><div class='del'>-	else</div><div class='del'>-	  @eof = true</div><div class='del'>-	  l</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def eof?</div><div class='del'>-	@eof</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def readable_atfer_eof?</div><div class='del'>-	true</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def line(line_no)</div><div class='del'>-	@line[line_no]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  rescue LoadError</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/lc/error.rb b/lib/irb/lc/error.rb<br/>deleted file mode 100644<br/>index 247596b7fe..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/lc/error.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/lc/error.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/lc/error.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-require "e2mmap"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-</div><div class='del'>-  # exceptions</div><div class='del'>-  extend Exception2MessageMapper</div><div class='del'>-  def_exception :UnrecognizedSwitch, "Unrecognized switch: %s"</div><div class='del'>-  def_exception :NotImplementedError, "Need to define `%s'"</div><div class='del'>-  def_exception :CantReturnToNormalMode, "Can't return to normal mode."</div><div class='del'>-  def_exception :IllegalParameter, "Illegal parameter(%s)."</div><div class='del'>-  def_exception :IrbAlreadyDead, "Irb is already dead."</div><div class='del'>-  def_exception :IrbSwitchedToCurrentThread, "Switched to current thread."</div><div class='del'>-  def_exception :NoSuchJob, "No such job(%s)."</div><div class='del'>-  def_exception :CantShiftToMultiIrbMode, "Can't shift to multi irb mode."</div><div class='del'>-  def_exception :CantChangeBinding, "Can't change binding to (%s)."</div><div class='del'>-  def_exception :UndefinedPromptMode, "Undefined prompt mode(%s)."</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/irb/lc/help-message b/lib/irb/lc/help-message<br/>deleted file mode 100644<br/>index 32087d113c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/lc/help-message?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/lc/help-message</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,35 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/lc/help-message.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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:  irb.rb [options] [programfile] [arguments]</div><div class='del'>-  -f		    Suppress read of ~/.irbrc </div><div class='del'>-  -m		    Bc mode (load mathn, fraction or matrix are available)</div><div class='del'>-  -d                Set $DEBUG to true (same as `ruby -d')</div><div class='del'>-  -r load-module    Same as `ruby -r'</div><div class='del'>-  -I path           Specify $LOAD_PATH directory</div><div class='del'>-  --inspect	    Use `inspect' for output (default except for bc mode)</div><div class='del'>-  --noinspect	    Don't use inspect for output</div><div class='del'>-  --readline	    Use Readline extension module</div><div class='del'>-  --noreadline	    Don't use Readline extension module</div><div class='del'>-  --prompt prompt-mode</div><div class='del'>-  --prompt-mode prompt-mode</div><div class='del'>-		    Switch prompt mode. Pre-defined prompt modes are</div><div class='del'>-		    `default', `simple', `xmp' and `inf-ruby'</div><div class='del'>-  --inf-ruby-mode   Use prompt appropriate for inf-ruby-mode on emacs. </div><div class='del'>-		    Suppresses --readline. </div><div class='del'>-  --simple-prompt   Simple prompt mode</div><div class='del'>-  --noprompt	    No prompt mode</div><div class='del'>-  --tracer	    Display trace for each execution of commands.</div><div class='del'>-  --back-trace-limit n</div><div class='del'>-		    Display backtrace top n and tail n. The default</div><div class='del'>-		    value is 16. </div><div class='del'>-  --irb_debug n	    Set internal debug level to n (not for popular use)</div><div class='del'>-  -v, --version	    Print the version of irb</div><div class='head'>diff --git a/lib/irb/lc/ja/error.rb b/lib/irb/lc/ja/error.rb<br/>deleted file mode 100644<br/>index 4c2fb3b839..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/lc/ja/error.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/lc/ja/error.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,27 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/lc/ja/error.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-require "e2mmap"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  # exceptions</div><div class='del'>-  extend Exception2MessageMapper</div><div class='del'>-  def_exception :UnrecognizedSwitch, '$B%9%$%C%A(B(%s)$B$,J,$j$^$;$s(B'</div><div class='del'>-  def_exception :NotImplementedError, '`%s\'$B$NDj5A$,I,MW$G$9(B'</div><div class='del'>-  def_exception :CantReturnToNormalMode, 'Normal$B%b!&lt;%I$KLa$l$^$;$s(B.'</div><div class='del'>-  def_exception :IllegalParameter, '$B%Q%i%a!&lt;%?(B(%s)$B$,4V0c$C$F$$$^$9(B.'</div><div class='del'>-  def_exception :IrbAlreadyDead, 'Irb$B$O4{$K;`$s$G$$$^$9(B.'</div><div class='del'>-  def_exception :IrbSwitchedToCurrentThread, '$B%+%l%s%H%9%l%C%I$K@Z$jBX$o$j$^$7$?(B.'</div><div class='del'>-  def_exception :NoSuchJob, '$B$=$N$h$&amp;$J%8%g%V(B(%s)$B$O$"$j$^$;$s(B.'</div><div class='del'>-  def_exception :CantShiftToMultiIrbMode, 'multi-irb mode$B$K0\$l$^$;$s(B.'</div><div class='del'>-  def_exception :CantChangeBinding, '$B%P%$%s%G%#%s%0(B(%s)$B$KJQ99$G$-$^$;$s(B.'</div><div class='del'>-  def_exception :UndefinedPromptMode, '$B%W%m%s%W%H%b!&lt;%I(B(%s)$B$ODj5A$5$l$F$$$^$;$s(B.'</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/lc/ja/help-message b/lib/irb/lc/ja/help-message<br/>deleted file mode 100644<br/>index debbfe9355..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/lc/ja/help-message?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/lc/ja/help-message</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,36 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/lc/ja/help-message.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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:  irb.rb [options] [programfile] [arguments]</div><div class='del'>-  -f		    ~/.irbrc $B$rFI$_9~$^$J$$(B.</div><div class='del'>-  -m		    bc$B%b!&lt;%I(B($BJ,?t(B, $B9TNs$N7W;;$,$G$-$k(B)</div><div class='del'>-  -d                $DEBUG $B$r(Btrue$B$K$9$k(B(ruby -d $B$HF1$8(B)</div><div class='del'>-  -r load-module    ruby -r $B$HF1$8(B.</div><div class='del'>-  -I path           $LOAD_PATH $B$K(B path $B$rDI2C$9$k(B.</div><div class='del'>-  --inspect	    $B7k2L=PNO$K(Binspect$B$rMQ$$$k(B(bc$B%b!&lt;%I0J30$O%G%U%)%k%H(B). </div><div class='del'>-  --noinspect	    $B7k2L=PNO$K(Binspect$B$rMQ$$$J$$(B.</div><div class='del'>-  --readline	    readline$B%i%$%V%i%j$rMxMQ$9$k(B.</div><div class='del'>-  --noreadline	    readline$B%i%$%V%i%j$rMxMQ$7$J$$(B. </div><div class='del'>-  --prompt prompt-mode/--prompt-mode prompt-mode</div><div class='del'>-		    $B%W%m%s%W%H%b!&lt;%I$r@ZBX$($^$9(B. $B8=:_Dj5A$5$l$F$$$k%W(B</div><div class='del'>-		    $B%m%s%W%H%b!&lt;%I$O(B, default, simple, xmp, inf-ruby$B$,(B</div><div class='del'>-		    $BMQ0U$5$l$F$$$^$9(B. </div><div class='del'>-  --inf-ruby-mode   emacs$B$N(Binf-ruby-mode$BMQ$N%W%m%s%W%HI=&lt;($r9T$J$&amp;(B. $BFC(B</div><div class='del'>-		    $B$K;XDj$,$J$$8B$j(B, readline$B%i%$%V%i%j$O;H$o$J$/$J$k(B.</div><div class='del'>-  --simple-prompt   $BHs&gt;o$K%7%s%W%k$J%W%m%s%W%H$rMQ$$$k%b!&lt;%I$G$9(B.</div><div class='del'>-  --noprompt	    $B%W%m%s%W%HI=&lt;($r9T$J$o$J$$(B.</div><div class='del'>-  --tracer	    $B%3%^%s%I&lt;B9T;~$K%H%l!&lt;%9$r9T$J$&amp;(B.</div><div class='del'>-  --back-trace-limit n</div><div class='del'>-		    $B%P%C%/%H%l!&lt;%9I=&lt;($r%P%C%/%H%l!&lt;%9$NF,$+$i(B n, $B8e$m(B</div><div class='del'>-		    $B$+$i(Bn$B$@$19T$J$&amp;(B. $B%G%U%)%k%H$O(B16 </div><div class='del'>-  --irb_debug n	    irb$B$N%G%P%C%0%G%P%C%0%l%Y%k$r(Bn$B$K@_Dj$9$k(B($BMxMQ$7$J(B</div><div class='del'>-		    $B$$J}$,L5Fq$G$7$g$&amp;(B).</div><div class='del'>-  -v, --version	    irb$B$N%P!&lt;%8%g%s$rI=&lt;($9$k(B</div><div class='head'>diff --git a/lib/irb/locale.rb b/lib/irb/locale.rb<br/>deleted file mode 100644<br/>index 5ed9f54507..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/locale.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/locale.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,184 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/locale.rb - internationalization module</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-autoload :Kconv, "kconv"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  class Locale</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-    JPDefaultLocale = "ja"</div><div class='del'>-    LOCALE_DIR = "/lc/"</div><div class='del'>-</div><div class='del'>-    def initialize(locale = nil)</div><div class='del'>-      @lang = locale || ENV["IRB_LANG"] || ENV["LC_MESSAGES"] || ENV["LC_ALL"] || ENV["LANG"] || "C" </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :lang</div><div class='del'>-</div><div class='del'>-    def lc2kconv(lang)</div><div class='del'>-      case lang</div><div class='del'>-      when "ja_JP.ujis", "ja_JP.euc", "ja_JP.eucJP"</div><div class='del'>-        Kconv::EUC</div><div class='del'>-      when "ja_JP.sjis", "ja_JP.SJIS"</div><div class='del'>-        Kconv::SJIS</div><div class='del'>-      when /ja_JP.utf-?8/i</div><div class='del'>-	Kconv::UTF8</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :lc2kconv</div><div class='del'>-</div><div class='del'>-    def String(mes)</div><div class='del'>-      mes = super(mes)</div><div class='del'>-      case @lang</div><div class='del'>-      when /^ja/</div><div class='del'>-	mes = Kconv::kconv(mes, lc2kconv(@lang))</div><div class='del'>-      else</div><div class='del'>-	mes</div><div class='del'>-      end</div><div class='del'>-      mes</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def format(*opts)</div><div class='del'>-      String(super(*opts))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gets(*rs)</div><div class='del'>-      String(super(*rs))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def readline(*rs)</div><div class='del'>-      String(super(*rs))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def print(*opts)</div><div class='del'>-      ary = opts.collect{|opt| String(opt)}</div><div class='del'>-      super(*ary)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def printf(*opts)</div><div class='del'>-      s = format(*opts)</div><div class='del'>-      print s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def puts(*opts)</div><div class='del'>-      ary = opts.collect{|opt| String(opt)}</div><div class='del'>-      super(*ary)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def require(file, priv = nil)</div><div class='del'>-      rex = Regexp.new("lc/#{Regexp.quote(file)}\.(so|o|sl|rb)?")</div><div class='del'>-      return false if $".find{|f| f =~ rex}</div><div class='del'>-</div><div class='del'>-      case file</div><div class='del'>-      when /\.rb$/</div><div class='del'>-	begin</div><div class='del'>-	  load(file, priv)</div><div class='del'>-	  $".push file</div><div class='del'>-	  return true</div><div class='del'>-	rescue LoadError</div><div class='del'>-	end</div><div class='del'>-      when /\.(so|o|sl)$/</div><div class='del'>-	return super</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-	load(f = file + ".rb")</div><div class='del'>-	$".push f  #"</div><div class='del'>-	return true</div><div class='del'>-      rescue LoadError</div><div class='del'>-	return ruby_require(file)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias toplevel_load load</div><div class='del'>-    </div><div class='del'>-    def load(file, priv=nil)</div><div class='del'>-      dir = File.dirname(file)</div><div class='del'>-      dir = "" if dir == "."</div><div class='del'>-      base = File.basename(file)</div><div class='del'>-</div><div class='del'>-      if /^ja(_JP)?$/ =~ @lang</div><div class='del'>- 	back, @lang = @lang, "C"</div><div class='del'>-      end</div><div class='del'>-      begin</div><div class='del'>-	if dir[0] == ?/ #/</div><div class='del'>-	  lc_path = search_file(dir, base)</div><div class='del'>-	  return real_load(lc_path, priv) if lc_path</div><div class='del'>-	end</div><div class='del'>-	</div><div class='del'>-	for path in $:</div><div class='del'>-	  lc_path = search_file(path + "/" + dir, base)</div><div class='del'>-	  return real_load(lc_path, priv) if lc_path</div><div class='del'>-	end</div><div class='del'>-      ensure</div><div class='del'>-	@lang = back if back</div><div class='del'>-      end</div><div class='del'>-      raise LoadError, "No such file to load -- #{file}"</div><div class='del'>-    end </div><div class='del'>-</div><div class='del'>-    def real_load(path, priv)</div><div class='del'>-      src = self.String(File.read(path))</div><div class='del'>-      if priv</div><div class='del'>-	eval("self", TOPLEVEL_BINDING).extend(Module.new {eval(src, nil, path)})</div><div class='del'>-      else</div><div class='del'>-	eval(src, TOPLEVEL_BINDING, path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :real_load</div><div class='del'>-</div><div class='del'>-    def find(file , paths = $:)</div><div class='del'>-      dir = File.dirname(file)</div><div class='del'>-      dir = "" if dir == "."</div><div class='del'>-      base = File.basename(file)</div><div class='del'>-      if dir[0] == ?/ #/</div><div class='del'>-	  return lc_path = search_file(dir, base)</div><div class='del'>-      else</div><div class='del'>-	for path in $:</div><div class='del'>-	  if lc_path = search_file(path + "/" + dir, base)</div><div class='del'>-	    return lc_path</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def search_file(path, file)</div><div class='del'>-      if File.exist?(p1 = path + lc_path(file, "C"))</div><div class='del'>-	if File.exist?(p2 = path + lc_path(file))</div><div class='del'>-	  return p2</div><div class='del'>-	else</div><div class='del'>-	end</div><div class='del'>-	return p1</div><div class='del'>-      else</div><div class='del'>-      end</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-    private :search_file</div><div class='del'>-</div><div class='del'>-    def lc_path(file = "", lc = @lang)</div><div class='del'>-      case lc</div><div class='del'>-      when "C"</div><div class='del'>-	LOCALE_DIR + file</div><div class='del'>-      when /^ja/</div><div class='del'>-	LOCALE_DIR + "ja/" + file</div><div class='del'>-      else</div><div class='del'>-	LOCALE_DIR + @lang + "/" + file</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :lc_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'>-</div><div class='head'>diff --git a/lib/irb/notifier.rb b/lib/irb/notifier.rb<br/>deleted file mode 100644<br/>index 0f79bc5a8d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/notifier.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/notifier.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,145 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   notifier.rb - output methods used by irb </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "e2mmap"</div><div class='del'>-require "irb/output-method"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  module Notifier</div><div class='del'>-    extend Exception2MessageMapper</div><div class='del'>-    def_exception :ErrUndefinedNotifier, </div><div class='del'>-      "undefined notifier level: %d is specified"</div><div class='del'>-    def_exception :ErrUnrecognizedLevel, </div><div class='del'>-      "unrecognized notifier level: %s is specified"</div><div class='del'>-</div><div class='del'>-    def def_notifier(prefix = "", output_method = StdioOutputMethod.new)</div><div class='del'>-      CompositeNotifier.new(prefix, output_method)</div><div class='del'>-    end</div><div class='del'>-    module_function :def_notifier</div><div class='del'>-  </div><div class='del'>-    class AbstructNotifier</div><div class='del'>-      def initialize(prefix, base_notifier)</div><div class='del'>-	@prefix = prefix</div><div class='del'>-	@base_notifier = base_notifier</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :prefix</div><div class='del'>-</div><div class='del'>-      def notify?</div><div class='del'>-	true</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def print(*opts)</div><div class='del'>-	@base_notifier.print prefix, *opts if notify?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def printn(*opts)</div><div class='del'>-	@base_notifier.printn prefix, *opts if notify?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def printf(format, *opts)</div><div class='del'>-	@base_notifier.printf(prefix + format, *opts) if notify?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def puts(*objs)</div><div class='del'>-	if notify?</div><div class='del'>-	  @base_notifier.puts(*objs.collect{|obj| prefix + obj.to_s})</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def pp(*objs)</div><div class='del'>-	if notify?</div><div class='del'>-	  @base_notifier.ppx @prefix, *objs</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def ppx(prefix, *objs)</div><div class='del'>-	if notify?</div><div class='del'>-	  @base_notifier.ppx @prefix+prefix, *objs</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def exec_if</div><div class='del'>-	yield(@base_notifier) if notify?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class CompositeNotifier&lt;AbstructNotifier</div><div class='del'>-      def initialize(prefix, base_notifier)</div><div class='del'>-	super</div><div class='del'>-</div><div class='del'>-	@notifiers = [D_NOMSG]</div><div class='del'>-	@level_notifier = D_NOMSG</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :notifiers</div><div class='del'>-</div><div class='del'>-      def def_notifier(level, prefix = "")</div><div class='del'>-	notifier = LeveledNotifier.new(self, level, prefix)</div><div class='del'>-	@notifiers[level] = notifier</div><div class='del'>-	notifier</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :level_notifier</div><div class='del'>-      alias level level_notifier</div><div class='del'>-</div><div class='del'>-      def level_notifier=(value)</div><div class='del'>-	case value</div><div class='del'>-	when AbstructNotifier</div><div class='del'>-	  @level_notifier = value</div><div class='del'>-	when Integer</div><div class='del'>-	  l = @notifiers[value]</div><div class='del'>-	  Notifier.Raise ErrUndefinedNotifer, value unless l</div><div class='del'>-	  @level_notifier = l</div><div class='del'>-	else</div><div class='del'>-	  Notifier.Raise ErrUnrecognizedLevel, value unless l</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      alias level= level_notifier=</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class LeveledNotifier&lt;AbstructNotifier</div><div class='del'>-      include Comparable</div><div class='del'>-</div><div class='del'>-      def initialize(base, level, prefix)</div><div class='del'>-	super(prefix, base)</div><div class='del'>-	</div><div class='del'>-	@level = level</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :level</div><div class='del'>-</div><div class='del'>-      def &lt;=&gt;(other)</div><div class='del'>-	@level &lt;=&gt; other.level</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def notify?</div><div class='del'>-	@base_notifier.level &gt;= self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class NoMsgNotifier&lt;LeveledNotifier</div><div class='del'>-      def initialize</div><div class='del'>-	@base_notifier = nil</div><div class='del'>-	@level = 0</div><div class='del'>-	@prefix = ""</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def notify?</div><div class='del'>-	false</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    D_NOMSG = NoMsgNotifier.new</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/output-method.rb b/lib/irb/output-method.rb<br/>deleted file mode 100644<br/>index b9a3a8851e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/output-method.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/output-method.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,85 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   output-method.rb - optput methods used by irb </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "e2mmap"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  # OutputMethod</div><div class='del'>-  #   StdioOutputMethod</div><div class='del'>-</div><div class='del'>-  class OutputMethod</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-    def print(*opts)</div><div class='del'>-      IRB.fail NotImplementError, "print"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def printn(*opts)</div><div class='del'>-      print opts.join(" "), "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # extend printf</div><div class='del'>-    def printf(format, *opts)</div><div class='del'>-      if /(%*)%I/ =~ format</div><div class='del'>-	format, opts = parse_printf_format(format, opts)</div><div class='del'>-      end</div><div class='del'>-      print sprintf(format, *opts)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # %</div><div class='del'>-    # &lt;¥Õ¥é¥°&gt;  [#0- +]</div><div class='del'>-    # &lt;ºÇ¾®¥Õ¥£¡¼¥ë¥ÉÉý&gt; (\*|\*[1-9][0-9]*\$|[1-9][0-9]*)</div><div class='del'>-    # &lt;ÀºÅÙ&gt;.(\*|\*[1-9][0-9]*\$|[1-9][0-9]*|)?</div><div class='del'>-    # #&lt;Ä¹¤µ½¤ÀµÊ¸»ú&gt;(hh|h|l|ll|L|q|j|z|t)</div><div class='del'>-    # &lt;ÊÑ´¹½¤ÀµÊ¸»ú&gt;[diouxXeEfgGcsb%] </div><div class='del'>-    def parse_printf_format(format, opts)</div><div class='del'>-      return format, opts if $1.size % 2 == 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def foo(format)</div><div class='del'>-      pos = 0</div><div class='del'>-      inspects = []</div><div class='del'>-      format.scan(/%[#0\-+ ]?(\*(?=[^0-9])|\*[1-9][0-9]*\$|[1-9][0-9]*(?=[^0-9]))?(\.(\*(?=[^0-9])|\*[1-9][0-9]*\$|[1-9][0-9]*(?=[^0-9])))?(([1-9][0-9]*\$)*)([diouxXeEfgGcsb%])/) {|f, p, pp, pos, new_pos, c|</div><div class='del'>-	puts [f, p, pp, pos, new_pos, c].join("!")</div><div class='del'>-	pos = new_pos if new_pos</div><div class='del'>-	if c == "I"</div><div class='del'>-	  inspects.push pos.to_i </div><div class='del'>-	  (f||"")+(p||"")+(pp||"")+(pos||"")+"s"</div><div class='del'>-	else</div><div class='del'>-	  $&amp;</div><div class='del'>-	end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def puts(*objs)</div><div class='del'>-      for obj in objs</div><div class='del'>-	print(*obj)</div><div class='del'>-	print "\n"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pp(*objs)</div><div class='del'>-      puts(*objs.collect{|obj| obj.inspect})</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ppx(prefix, *objs)</div><div class='del'>-      puts(*objs.collect{|obj| prefix+obj.inspect})</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class StdioOutputMethod&lt;OutputMethod</div><div class='del'>-    def print(*opts)</div><div class='del'>-      STDOUT.print(*opts)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb<br/>deleted file mode 100644<br/>index 313a809ccd..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ruby-lex.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ruby-lex.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1149 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/ruby-lex.rb - ruby lexcal analyzer</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "e2mmap"</div><div class='del'>-require "irb/slex"</div><div class='del'>-require "irb/ruby-token"</div><div class='del'>-</div><div class='del'>-class RubyLex</div><div class='del'>-  @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-  extend Exception2MessageMapper</div><div class='del'>-  def_exception(:AlreadyDefinedToken, "Already defined token(%s)")</div><div class='del'>-  def_exception(:TkReading2TokenNoKey, "key nothing(key='%s')")</div><div class='del'>-  def_exception(:TkSymbol2TokenNoKey, "key nothing(key='%s')")</div><div class='del'>-  def_exception(:TkReading2TokenDuplicateError, </div><div class='del'>-		"key duplicate(token_n='%s', key='%s')")</div><div class='del'>-  def_exception(:SyntaxError, "%s")</div><div class='del'>-</div><div class='del'>-  def_exception(:TerminateLineInput, "Terminate Line Input")</div><div class='del'>-  </div><div class='del'>-  include RubyToken</div><div class='del'>-</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-    attr_accessor :debug_level</div><div class='del'>-    def debug?</div><div class='del'>-      @debug_level &gt; 0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  @debug_level = 0</div><div class='del'>-</div><div class='del'>-  def initialize</div><div class='del'>-    lex_init</div><div class='del'>-    set_input(STDIN)</div><div class='del'>-</div><div class='del'>-    @seek = 0</div><div class='del'>-    @exp_line_no = @line_no = 1</div><div class='del'>-    @base_char_no = 0</div><div class='del'>-    @char_no = 0</div><div class='del'>-    @rests = []</div><div class='del'>-    @readed = []</div><div class='del'>-    @here_readed = []</div><div class='del'>-</div><div class='del'>-    @indent = 0</div><div class='del'>-    @indent_stack = []</div><div class='del'>-    @lex_state = EXPR_BEG</div><div class='del'>-    @space_seen = false</div><div class='del'>-    @here_header = false</div><div class='del'>-    </div><div class='del'>-    @continue = false</div><div class='del'>-    @line = ""</div><div class='del'>-</div><div class='del'>-    @skip_space = false</div><div class='del'>-    @readed_auto_clean_up = false</div><div class='del'>-    @exception_on_syntax_error = true</div><div class='del'>-</div><div class='del'>-    @prompt = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  attr_accessor :skip_space</div><div class='del'>-  attr_accessor :readed_auto_clean_up</div><div class='del'>-  attr_accessor :exception_on_syntax_error</div><div class='del'>-</div><div class='del'>-  attr_reader :seek</div><div class='del'>-  attr_reader :char_no</div><div class='del'>-  attr_reader :line_no</div><div class='del'>-  attr_reader :indent</div><div class='del'>-</div><div class='del'>-  # io functions</div><div class='del'>-  def set_input(io, p = nil, &amp;block)</div><div class='del'>-    @io = io</div><div class='del'>-    if p.respond_to?(:call)</div><div class='del'>-      @input = p</div><div class='del'>-    elsif block_given?</div><div class='del'>-      @input = block</div><div class='del'>-    else</div><div class='del'>-      @input = Proc.new{@io.gets}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_readed</div><div class='del'>-    if idx = @readed.reverse.index("\n")</div><div class='del'>-      @base_char_no = idx</div><div class='del'>-    else</div><div class='del'>-      @base_char_no += @readed.size</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    readed = @readed.join("")</div><div class='del'>-    @readed = []</div><div class='del'>-    readed</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def getc</div><div class='del'>-    while @rests.empty?</div><div class='del'>-#      return nil unless buf_input</div><div class='del'>-      @rests.push nil unless buf_input</div><div class='del'>-    end</div><div class='del'>-    c = @rests.shift</div><div class='del'>-    if @here_header</div><div class='del'>-      @here_readed.push c</div><div class='del'>-    else</div><div class='del'>-      @readed.push c</div><div class='del'>-    end</div><div class='del'>-    @seek += 1</div><div class='del'>-    if c == "\n"</div><div class='del'>-      @line_no += 1 </div><div class='del'>-      @char_no = 0</div><div class='del'>-    else</div><div class='del'>-      @char_no += 1</div><div class='del'>-    end</div><div class='del'>-    c</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def gets</div><div class='del'>-    l = ""</div><div class='del'>-    while c = getc</div><div class='del'>-      l.concat(c)</div><div class='del'>-      break if c == "\n"</div><div class='del'>-    end</div><div class='del'>-    return nil if l == "" and c.nil?</div><div class='del'>-    l</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def eof?</div><div class='del'>-    @io.eof?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def getc_of_rests</div><div class='del'>-    if @rests.empty?</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      getc</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ungetc(c = nil)</div><div class='del'>-    if @here_readed.empty?</div><div class='del'>-      c2 = @readed.pop</div><div class='del'>-    else</div><div class='del'>-      c2 = @here_readed.pop</div><div class='del'>-    end</div><div class='del'>-    c = c2 unless c</div><div class='del'>-    @rests.unshift c #c = </div><div class='del'>-      @seek -= 1</div><div class='del'>-    if c == "\n"</div><div class='del'>-      @line_no -= 1 </div><div class='del'>-      if idx = @readed.reverse.index("\n")</div><div class='del'>-	@char_no = @readed.size - idx</div><div class='del'>-      else</div><div class='del'>-	@char_no = @base_char_no + @readed.size</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      @char_no -= 1</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def peek_equal?(str)</div><div class='del'>-    chrs = str.split(//)</div><div class='del'>-    until @rests.size &gt;= chrs.size</div><div class='del'>-      return false unless buf_input</div><div class='del'>-    end</div><div class='del'>-    @rests[0, chrs.size] == chrs</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def peek_match?(regexp)</div><div class='del'>-    while @rests.empty?</div><div class='del'>-      return false unless buf_input</div><div class='del'>-    end</div><div class='del'>-    regexp =~ @rests.join("")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def peek(i = 0)</div><div class='del'>-    while @rests.size &lt;= i</div><div class='del'>-      return nil unless buf_input</div><div class='del'>-    end</div><div class='del'>-    @rests[i]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def buf_input</div><div class='del'>-    prompt</div><div class='del'>-    line = @input.call</div><div class='del'>-    return nil unless line</div><div class='del'>-    @rests.concat line.split(//)</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-  private :buf_input</div><div class='del'>-</div><div class='del'>-  def set_prompt(p = nil, &amp;block)</div><div class='del'>-    p = block if block_given?</div><div class='del'>-    if p.respond_to?(:call)</div><div class='del'>-      @prompt = p</div><div class='del'>-    else</div><div class='del'>-      @prompt = Proc.new{print p}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def prompt</div><div class='del'>-    if @prompt</div><div class='del'>-      @prompt.call(@ltype, @indent, @continue, @line_no)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize_input</div><div class='del'>-    @ltype = nil</div><div class='del'>-    @quoted = nil</div><div class='del'>-    @indent = 0</div><div class='del'>-    @indent_stack = []</div><div class='del'>-    @lex_state = EXPR_BEG</div><div class='del'>-    @space_seen = false</div><div class='del'>-    @here_header = false</div><div class='del'>-    </div><div class='del'>-    @continue = false</div><div class='del'>-    prompt</div><div class='del'>-</div><div class='del'>-    @line = ""</div><div class='del'>-    @exp_line_no = @line_no</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def each_top_level_statement</div><div class='del'>-    initialize_input</div><div class='del'>-    catch(:TERM_INPUT) do</div><div class='del'>-      loop do</div><div class='del'>-	begin</div><div class='del'>-	  @continue = false</div><div class='del'>-	  prompt</div><div class='del'>-	  unless l = lex</div><div class='del'>-	    throw :TERM_INPUT if @line == ''</div><div class='del'>-	  else</div><div class='del'>-	    #p l</div><div class='del'>-	    @line.concat l</div><div class='del'>-	    if @ltype or @continue or @indent &gt; 0</div><div class='del'>-	      next</div><div class='del'>-	    end</div><div class='del'>-	  end</div><div class='del'>-	  if @line != "\n"</div><div class='del'>-	    yield @line, @exp_line_no</div><div class='del'>-	  end</div><div class='del'>-	  break unless l</div><div class='del'>-	  @line = ''</div><div class='del'>-	  @exp_line_no = @line_no</div><div class='del'>-</div><div class='del'>-	  @indent = 0</div><div class='del'>-	  @indent_stack = []</div><div class='del'>-	  prompt</div><div class='del'>-	rescue TerminateLineInput</div><div class='del'>-	  initialize_input</div><div class='del'>-	  prompt</div><div class='del'>-	  get_readed</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 lex</div><div class='del'>-    until (((tk = token).kind_of?(TkNL) || tk.kind_of?(TkEND_OF_SCRIPT)) &amp;&amp;</div><div class='del'>-	     !@continue or</div><div class='del'>-	     tk.nil?)</div><div class='del'>-      #p tk</div><div class='del'>-      #p @lex_state</div><div class='del'>-      #p self</div><div class='del'>-    end</div><div class='del'>-    line = get_readed</div><div class='del'>-    #      print self.inspect</div><div class='del'>-    if line == "" and tk.kind_of?(TkEND_OF_SCRIPT) || tk.nil?</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      line</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token</div><div class='del'>-    #      require "tracer"</div><div class='del'>-    #      Tracer.on</div><div class='del'>-    @prev_seek = @seek</div><div class='del'>-    @prev_line_no = @line_no</div><div class='del'>-    @prev_char_no = @char_no</div><div class='del'>-    begin</div><div class='del'>-      begin</div><div class='del'>-	tk = @OP.match(self)</div><div class='del'>-	@space_seen = tk.kind_of?(TkSPACE)</div><div class='del'>-      rescue SyntaxError</div><div class='del'>-	raise if @exception_on_syntax_error</div><div class='del'>-	tk = TkError.new(@seek, @line_no, @char_no)</div><div class='del'>-      end</div><div class='del'>-    end while @skip_space and tk.kind_of?(TkSPACE)</div><div class='del'>-    if @readed_auto_clean_up</div><div class='del'>-      get_readed</div><div class='del'>-    end</div><div class='del'>-    #      Tracer.off</div><div class='del'>-    tk</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  ENINDENT_CLAUSE = [</div><div class='del'>-    "case", "class", "def", "do", "for", "if",</div><div class='del'>-    "module", "unless", "until", "while", "begin" #, "when"</div><div class='del'>-  ]</div><div class='del'>-  DEINDENT_CLAUSE = ["end" #, "when"</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  PERCENT_LTYPE = {</div><div class='del'>-    "q" =&gt; "\'",</div><div class='del'>-    "Q" =&gt; "\"",</div><div class='del'>-    "x" =&gt; "\`",</div><div class='del'>-    "r" =&gt; "/",</div><div class='del'>-    "w" =&gt; "]",</div><div class='del'>-    "W" =&gt; "]",</div><div class='del'>-    "s" =&gt; ":"</div><div class='del'>-  }</div><div class='del'>-  </div><div class='del'>-  PERCENT_PAREN = {</div><div class='del'>-    "{" =&gt; "}",</div><div class='del'>-    "[" =&gt; "]",</div><div class='del'>-    "&lt;" =&gt; "&gt;",</div><div class='del'>-    "(" =&gt; ")"</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Ltype2Token = {</div><div class='del'>-    "\'" =&gt; TkSTRING,</div><div class='del'>-    "\"" =&gt; TkSTRING,</div><div class='del'>-    "\`" =&gt; TkXSTRING,</div><div class='del'>-    "/" =&gt; TkREGEXP,</div><div class='del'>-    "]" =&gt; TkDSTRING,</div><div class='del'>-    ":" =&gt; TkSYMBOL</div><div class='del'>-  }</div><div class='del'>-  DLtype2Token = {</div><div class='del'>-    "\"" =&gt; TkDSTRING,</div><div class='del'>-    "\`" =&gt; TkDXSTRING,</div><div class='del'>-    "/" =&gt; TkDREGEXP,</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def lex_init()</div><div class='del'>-    @OP = IRB::SLex.new</div><div class='del'>-    @OP.def_rules("\0", "\004", "\032") do |op, io|</div><div class='del'>-      Token(TkEND_OF_SCRIPT)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules(" ", "\t", "\f", "\r", "\13") do |op, io|</div><div class='del'>-      @space_seen = true</div><div class='del'>-      while getc =~ /[ \t\f\r\13]/; end</div><div class='del'>-      ungetc</div><div class='del'>-      Token(TkSPACE)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("#") do |op, io|</div><div class='del'>-      identify_comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("=begin",</div><div class='del'>-		 proc{|op, io| @prev_char_no == 0 &amp;&amp; peek(0) =~ /\s/}) do </div><div class='del'>-      |op, io|</div><div class='del'>-      @ltype = "="</div><div class='del'>-      until getc == "\n"; end</div><div class='del'>-      until peek_equal?("=end") &amp;&amp; peek(4) =~ /\s/</div><div class='del'>-	until getc == "\n"; end</div><div class='del'>-      end</div><div class='del'>-      gets</div><div class='del'>-      @ltype = nil</div><div class='del'>-      Token(TkRD_COMMENT)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("\n") do |op, io|</div><div class='del'>-      print "\\n\n" if RubyLex.debug?</div><div class='del'>-      case @lex_state</div><div class='del'>-      when EXPR_BEG, EXPR_FNAME, EXPR_DOT</div><div class='del'>-	@continue = true</div><div class='del'>-      else</div><div class='del'>-	@continue = false</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	until (@indent_stack.empty? || </div><div class='del'>-	       [TkLPAREN, TkLBRACK, TkLBRACE, </div><div class='del'>-		 TkfLPAREN, TkfLBRACK, TkfLBRACE].include?(@indent_stack.last))</div><div class='del'>-	  @indent_stack.pop</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      @here_header = false</div><div class='del'>-      @here_readed = []</div><div class='del'>-      Token(TkNL)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("*", "**",	</div><div class='del'>-		  "=", "==", "===", </div><div class='del'>-		  "=~", "&lt;=&gt;",	</div><div class='del'>-		  "&lt;", "&lt;=",</div><div class='del'>-		  "&gt;", "&gt;=", "&gt;&gt;") do</div><div class='del'>-      |op, io|</div><div class='del'>-      case @lex_state</div><div class='del'>-      when EXPR_FNAME, EXPR_DOT</div><div class='del'>-	@lex_state = EXPR_ARG</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-      end</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("!", "!=", "!~") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("&lt;&lt;") do</div><div class='del'>-      |op, io|</div><div class='del'>-      tk = nil</div><div class='del'>-      if @lex_state != EXPR_END &amp;&amp; @lex_state != EXPR_CLASS &amp;&amp;</div><div class='del'>-	  (@lex_state != EXPR_ARG || @space_seen)</div><div class='del'>-	c = peek(0)</div><div class='del'>-	if /\S/ =~ c &amp;&amp; (/["'`]/ =~ c || /[\w_]/ =~ c || c == "-")</div><div class='del'>-	  tk = identify_here_document</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      unless tk</div><div class='del'>-	tk = Token(op)</div><div class='del'>-	case @lex_state</div><div class='del'>-	when EXPR_FNAME, EXPR_DOT</div><div class='del'>-	  @lex_state = EXPR_ARG</div><div class='del'>-	else</div><div class='del'>-	  @lex_state = EXPR_BEG</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      tk</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("'", '"') do</div><div class='del'>-      |op, io|</div><div class='del'>-      identify_string(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("`") do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_FNAME</div><div class='del'>-	@lex_state = EXPR_END</div><div class='del'>-	Token(op)</div><div class='del'>-      else</div><div class='del'>-	identify_string(op)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules('?') do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_END</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token(TkQUESTION)</div><div class='del'>-      else</div><div class='del'>-	ch = getc</div><div class='del'>-	if @lex_state == EXPR_ARG &amp;&amp; ch =~ /\s/</div><div class='del'>-	  ungetc</div><div class='del'>-	  @lex_state = EXPR_BEG;</div><div class='del'>-	  Token(TkQUESTION)</div><div class='del'>-	else</div><div class='del'>-	  if (ch == '\\') </div><div class='del'>-	    read_escape</div><div class='del'>-	  end</div><div class='del'>-	  @lex_state = EXPR_END</div><div class='del'>-	  Token(TkINTEGER)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("&amp;", "&amp;&amp;", "|", "||") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    @OP.def_rules("+=", "-=", "*=", "**=", </div><div class='del'>-		  "&amp;=", "|=", "^=", "&lt;&lt;=", "&gt;&gt;=", "||=", "&amp;&amp;=") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      op =~ /^(.*)=$/</div><div class='del'>-      Token(TkOPASGN, $1)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("+@", proc{|op, io| @lex_state == EXPR_FNAME}) do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_ARG</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("-@", proc{|op, io| @lex_state == EXPR_FNAME}) do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_ARG</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("+", "-") do</div><div class='del'>-      |op, io|</div><div class='del'>-      catch(:RET) do</div><div class='del'>-	if @lex_state == EXPR_ARG</div><div class='del'>-	  if @space_seen and peek(0) =~ /[0-9]/</div><div class='del'>-	    throw :RET, identify_number</div><div class='del'>-	  else</div><div class='del'>-	    @lex_state = EXPR_BEG</div><div class='del'>-	  end</div><div class='del'>-	elsif @lex_state != EXPR_END and peek(0) =~ /[0-9]/</div><div class='del'>-	  throw :RET, identify_number</div><div class='del'>-	else</div><div class='del'>-	  @lex_state = EXPR_BEG</div><div class='del'>-	end</div><div class='del'>-	Token(op)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule(".") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      if peek(0) =~ /[0-9]/</div><div class='del'>-	ungetc</div><div class='del'>-	identify_number</div><div class='del'>-      else</div><div class='del'>-	# for "obj.if" etc.</div><div class='del'>-	@lex_state = EXPR_DOT</div><div class='del'>-	Token(TkDOT)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("..", "...") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    lex_int2</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def lex_int2</div><div class='del'>-    @OP.def_rules("]", "}", ")") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-      @indent -= 1</div><div class='del'>-      @indent_stack.pop</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule(":") do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_END || peek(0) =~ /\s/</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token(TkCOLON)</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_FNAME;</div><div class='del'>-	Token(TkSYMBEG)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("::") do</div><div class='del'>-       |op, io|</div><div class='del'>-#      p @lex_state.id2name, @space_seen</div><div class='del'>-      if @lex_state == EXPR_BEG or @lex_state == EXPR_ARG &amp;&amp; @space_seen</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token(TkCOLON3)</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_DOT</div><div class='del'>-	Token(TkCOLON2)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("/") do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_BEG || @lex_state == EXPR_MID</div><div class='del'>-	identify_string(op)</div><div class='del'>-      elsif peek(0) == '='</div><div class='del'>-	getc</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token(TkOPASGN, "/") #/)</div><div class='del'>-      elsif @lex_state == EXPR_ARG and @space_seen and peek(0) !~ /\s/</div><div class='del'>-	identify_string(op)</div><div class='del'>-      else </div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token("/") #/)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("^") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token("^")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #       @OP.def_rules("^=") do</div><div class='del'>-    # 	@lex_state = EXPR_BEG</div><div class='del'>-    # 	Token(OP_ASGN, :^)</div><div class='del'>-    #       end</div><div class='del'>-    </div><div class='del'>-    @OP.def_rules(",") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules(";") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      until (@indent_stack.empty? || </div><div class='del'>-	     [TkLPAREN, TkLBRACK, TkLBRACE, </div><div class='del'>-	       TkfLPAREN, TkfLBRACK, TkfLBRACE].include?(@indent_stack.last))</div><div class='del'>-	@indent_stack.pop</div><div class='del'>-      end</div><div class='del'>-      Token(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("~") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token("~")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("~@", proc{|op, io| @lex_state == EXPR_FNAME}) do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token("~")</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    @OP.def_rule("(") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @indent += 1</div><div class='del'>-      if @lex_state == EXPR_BEG || @lex_state == EXPR_MID</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	tk_c = TkfLPAREN</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	tk_c = TkLPAREN</div><div class='del'>-      end</div><div class='del'>-      @indent_stack.push tk_c</div><div class='del'>-      tk = Token(tk_c)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("[]", proc{|op, io| @lex_state == EXPR_FNAME}) do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_ARG</div><div class='del'>-      Token("[]")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("[]=", proc{|op, io| @lex_state == EXPR_FNAME}) do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_ARG</div><div class='del'>-      Token("[]=")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("[") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @indent += 1</div><div class='del'>-      if @lex_state == EXPR_FNAME</div><div class='del'>-	tk_c = TkfLBRACK</div><div class='del'>-      else</div><div class='del'>-	if @lex_state == EXPR_BEG || @lex_state == EXPR_MID</div><div class='del'>-	  tk_c = TkLBRACK</div><div class='del'>-	elsif @lex_state == EXPR_ARG &amp;&amp; @space_seen</div><div class='del'>-	  tk_c = TkLBRACK</div><div class='del'>-	else</div><div class='del'>-	  tk_c = TkfLBRACK</div><div class='del'>-	end</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-      end</div><div class='del'>-      @indent_stack.push tk_c</div><div class='del'>-      Token(tk_c)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("{") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @indent += 1</div><div class='del'>-      if @lex_state != EXPR_END &amp;&amp; @lex_state != EXPR_ARG</div><div class='del'>-	tk_c = TkLBRACE</div><div class='del'>-      else</div><div class='del'>-	tk_c = TkfLBRACE</div><div class='del'>-      end</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      @indent_stack.push tk_c</div><div class='del'>-      Token(tk_c)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule('\\') do</div><div class='del'>-      |op, io|</div><div class='del'>-      if getc == "\n"</div><div class='del'>-	@space_seen = true</div><div class='del'>-	@continue = true</div><div class='del'>-	Token(TkSPACE)</div><div class='del'>-      else</div><div class='del'>-	ungetc</div><div class='del'>-	Token("\\")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule('%') do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_BEG || @lex_state == EXPR_MID</div><div class='del'>-	identify_quotation</div><div class='del'>-      elsif peek(0) == '='</div><div class='del'>-	getc</div><div class='del'>-	Token(TkOPASGN, :%)</div><div class='del'>-      elsif @lex_state == EXPR_ARG and @space_seen and peek(0) !~ /\s/</div><div class='del'>-	identify_quotation</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token("%") #))</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule('$') do</div><div class='del'>-      |op, io|</div><div class='del'>-      identify_gvar</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule('@') do</div><div class='del'>-      |op, io|</div><div class='del'>-      if peek(0) =~ /[\w_@]/</div><div class='del'>-	ungetc</div><div class='del'>-	identify_identifier</div><div class='del'>-      else</div><div class='del'>-	Token("@")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #       @OP.def_rule("def", proc{|op, io| /\s/ =~ io.peek(0)}) do </div><div class='del'>-    # 	|op, io|</div><div class='del'>-    # 	@indent += 1</div><div class='del'>-    # 	@lex_state = EXPR_FNAME</div><div class='del'>-    # #	@lex_state = EXPR_END</div><div class='del'>-    # #	until @rests[0] == "\n" or @rests[0] == ";"</div><div class='del'>-    # #	  rests.shift</div><div class='del'>-    # #	end</div><div class='del'>-    #       end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("") do</div><div class='del'>-      |op, io|</div><div class='del'>-      printf "MATCH: start %s: %s\n", op, io.inspect if RubyLex.debug?</div><div class='del'>-      if peek(0) =~ /[0-9]/</div><div class='del'>-	t = identify_number</div><div class='del'>-      elsif peek(0) =~ /[\w_]/</div><div class='del'>-	t = identify_identifier</div><div class='del'>-      end</div><div class='del'>-      printf "MATCH: end %s: %s\n", op, io.inspect if RubyLex.debug?</div><div class='del'>-      t</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    p @OP if RubyLex.debug?</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_gvar</div><div class='del'>-    @lex_state = EXPR_END</div><div class='del'>-    </div><div class='del'>-    case ch = getc</div><div class='del'>-    when /[~_*$?!@\/\\;,=:&lt;&gt;".]/   #"</div><div class='del'>-      Token(TkGVAR, "$" + ch)</div><div class='del'>-    when "-"</div><div class='del'>-      Token(TkGVAR, "$-" + getc)</div><div class='del'>-    when "&amp;", "`", "'", "+"</div><div class='del'>-      Token(TkBACK_REF, "$"+ch)</div><div class='del'>-    when /[1-9]/</div><div class='del'>-      while getc =~ /[0-9]/; end</div><div class='del'>-      ungetc</div><div class='del'>-      Token(TkNTH_REF)</div><div class='del'>-    when /\w/</div><div class='del'>-      ungetc</div><div class='del'>-      ungetc</div><div class='del'>-      identify_identifier</div><div class='del'>-    else </div><div class='del'>-      ungetc</div><div class='del'>-      Token("$")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_identifier</div><div class='del'>-    token = ""</div><div class='del'>-    if peek(0) =~ /[$@]/</div><div class='del'>-      token.concat(c = getc)</div><div class='del'>-      if c == "@" and peek(0) == "@"</div><div class='del'>-	token.concat getc</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    while (ch = getc) =~ /\w|_/</div><div class='del'>-      print ":", ch, ":" if RubyLex.debug?</div><div class='del'>-      token.concat ch</div><div class='del'>-    end</div><div class='del'>-    ungetc</div><div class='del'>-    </div><div class='del'>-    if (ch == "!" || ch == "?") &amp;&amp; token[0,1] =~ /\w/ &amp;&amp; peek(0) != "="</div><div class='del'>-      token.concat getc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # almost fix token</div><div class='del'>-</div><div class='del'>-    case token</div><div class='del'>-    when /^\$/</div><div class='del'>-      return Token(TkGVAR, token)</div><div class='del'>-    when /^\@\@/</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-      # p Token(TkCVAR, token)</div><div class='del'>-      return Token(TkCVAR, token)</div><div class='del'>-    when /^\@/</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-      return Token(TkIVAR, token)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    if @lex_state != EXPR_DOT</div><div class='del'>-      print token, "\n" if RubyLex.debug?</div><div class='del'>-</div><div class='del'>-      token_c, *trans = TkReading2Token[token]</div><div class='del'>-      if token_c</div><div class='del'>-	# reserved word?</div><div class='del'>-</div><div class='del'>-	if (@lex_state != EXPR_BEG &amp;&amp;</div><div class='del'>-	    @lex_state != EXPR_FNAME &amp;&amp;</div><div class='del'>-	    trans[1])</div><div class='del'>-	  # modifiers</div><div class='del'>-	  token_c = TkSymbol2Token[trans[1]]</div><div class='del'>-	  @lex_state = trans[0]</div><div class='del'>-	else</div><div class='del'>-	  if @lex_state != EXPR_FNAME</div><div class='del'>-	    if ENINDENT_CLAUSE.include?(token)</div><div class='del'>-	      # check for ``class = val'' etc.</div><div class='del'>-	      valid = true</div><div class='del'>-	      case token</div><div class='del'>-	      when "class"</div><div class='del'>-		valid = false unless peek_match?(/^\s*(&lt;&lt;|\w|::)/)</div><div class='del'>-	      when "def"</div><div class='del'>-		valid = false if peek_match?(/^\s*(([+-\/*&amp;\|^]|&lt;&lt;|&gt;&gt;|\|\||\&amp;\&amp;)=|\&amp;\&amp;|\|\|)/)</div><div class='del'>-	      when "do"</div><div class='del'>-		valid = false if peek_match?(/^\s*([+-\/*]?=|\*|&lt;|&gt;|\&amp;)/)</div><div class='del'>-	      when *ENINDENT_CLAUSE</div><div class='del'>-		valid = false if peek_match?(/^\s*([+-\/*]?=|\*|&lt;|&gt;|\&amp;|\|)/)</div><div class='del'>-	      else</div><div class='del'>-		# no nothing</div><div class='del'>-	      end</div><div class='del'>-	      if valid</div><div class='del'>-		if token == "do"</div><div class='del'>-		  if ![TkFOR, TkWHILE, TkUNTIL].include?(@indent_stack.last)</div><div class='del'>-		    @indent += 1</div><div class='del'>-		    @indent_stack.push token_c</div><div class='del'>-		  end</div><div class='del'>-		else</div><div class='del'>-		  @indent += 1</div><div class='del'>-		  @indent_stack.push token_c</div><div class='del'>-		end</div><div class='del'>-#		p @indent_stack</div><div class='del'>-	      end</div><div class='del'>-</div><div class='del'>-	    elsif DEINDENT_CLAUSE.include?(token)</div><div class='del'>-	      @indent -= 1</div><div class='del'>-	      @indent_stack.pop</div><div class='del'>-	    end</div><div class='del'>-	    @lex_state = trans[0]</div><div class='del'>-	  else</div><div class='del'>-	    @lex_state = EXPR_END</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	return Token(token_c, token)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @lex_state == EXPR_FNAME</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-      if peek(0) == '='</div><div class='del'>-	token.concat getc</div><div class='del'>-      end</div><div class='del'>-    elsif @lex_state == EXPR_BEG || @lex_state == EXPR_DOT</div><div class='del'>-      @lex_state = EXPR_ARG</div><div class='del'>-    else</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if token[0, 1] =~ /[A-Z]/</div><div class='del'>-      return Token(TkCONSTANT, token)</div><div class='del'>-    elsif token[token.size - 1, 1] =~ /[!?]/</div><div class='del'>-      return Token(TkFID, token)</div><div class='del'>-    else</div><div class='del'>-      return Token(TkIDENTIFIER, token)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify_here_document</div><div class='del'>-    ch = getc</div><div class='del'>-#    if lt = PERCENT_LTYPE[ch]</div><div class='del'>-    if ch == "-"</div><div class='del'>-      ch = getc</div><div class='del'>-      indent = true</div><div class='del'>-    end</div><div class='del'>-    if /['"`]/ =~ ch</div><div class='del'>-      lt = ch</div><div class='del'>-      quoted = ""</div><div class='del'>-      while (c = getc) &amp;&amp; c != lt</div><div class='del'>-	quoted.concat c</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      lt = '"'</div><div class='del'>-      quoted = ch.dup</div><div class='del'>-      while (c = getc) &amp;&amp; c =~ /\w/</div><div class='del'>-	quoted.concat c</div><div class='del'>-      end</div><div class='del'>-      ungetc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ltback, @ltype = @ltype, lt</div><div class='del'>-    reserve = []</div><div class='del'>-    while ch = getc</div><div class='del'>-      reserve.push ch</div><div class='del'>-      if ch == "\\"</div><div class='del'>-	reserve.push ch = getc</div><div class='del'>-      elsif ch == "\n"</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @here_header = false</div><div class='del'>-    while l = gets</div><div class='del'>-      l = l.sub(/(:?\r)?\n\z/, '')</div><div class='del'>-      if (indent ? l.strip : l) == quoted</div><div class='del'>- 	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @here_header = true</div><div class='del'>-    @here_readed.concat reserve</div><div class='del'>-    while ch = reserve.pop</div><div class='del'>-      ungetc ch</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @ltype = ltback</div><div class='del'>-    @lex_state = EXPR_END</div><div class='del'>-    Token(Ltype2Token[lt])</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_quotation</div><div class='del'>-    ch = getc</div><div class='del'>-    if lt = PERCENT_LTYPE[ch]</div><div class='del'>-      ch = getc</div><div class='del'>-    elsif ch =~ /\W/</div><div class='del'>-      lt = "\""</div><div class='del'>-    else</div><div class='del'>-      RubyLex.fail SyntaxError, "unknown type of %string"</div><div class='del'>-    end</div><div class='del'>-#     if ch !~ /\W/</div><div class='del'>-#       ungetc</div><div class='del'>-#       next</div><div class='del'>-#     end</div><div class='del'>-    #@ltype = lt</div><div class='del'>-    @quoted = ch unless @quoted = PERCENT_PAREN[ch]</div><div class='del'>-    identify_string(lt, @quoted)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify_number</div><div class='del'>-    @lex_state = EXPR_END</div><div class='del'>-</div><div class='del'>-    if peek(0) == "0" &amp;&amp; peek(1) !~ /[.eE]/</div><div class='del'>-      getc</div><div class='del'>-      case peek(0)</div><div class='del'>-      when /[xX]/</div><div class='del'>-	ch = getc</div><div class='del'>-	match = /[0-9a-fA-F_]/</div><div class='del'>-      when /[bB]/</div><div class='del'>-	ch = getc</div><div class='del'>-	match = /[01_]/</div><div class='del'>-      when /[oO]/</div><div class='del'>-	ch = getc</div><div class='del'>-	match = /[0-7_]/</div><div class='del'>-      when /[dD]/</div><div class='del'>-	ch = getc</div><div class='del'>-	match = /[0-9_]/</div><div class='del'>-      when /[0-7]/</div><div class='del'>-	match = /[0-7_]/</div><div class='del'>-      when /[89]/</div><div class='del'>-	RubyLex.fail SyntaxError, "Illegal octal digit"</div><div class='del'>-      else </div><div class='del'>-	return Token(TkINTEGER)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      len0 = true</div><div class='del'>-      non_digit = false</div><div class='del'>-      while ch = getc</div><div class='del'>-	if match =~ ch</div><div class='del'>-	  if ch == "_"</div><div class='del'>-	    if non_digit</div><div class='del'>-	      RubyLex.fail SyntaxError, "trailing `#{ch}' in number"</div><div class='del'>-	    else</div><div class='del'>-	      non_digit = ch</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    non_digit = false</div><div class='del'>-	    len0 = false</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  ungetc</div><div class='del'>-	  if len0</div><div class='del'>-	    RubyLex.fail SyntaxError, "numeric literal without digits"</div><div class='del'>-	  end</div><div class='del'>-	  if non_digit</div><div class='del'>-	    RubyLex.fail SyntaxError, "trailing `#{non_digit}' in number"</div><div class='del'>-	  end</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      return Token(TkINTEGER)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    type = TkINTEGER</div><div class='del'>-    allow_point = true</div><div class='del'>-    allow_e = true</div><div class='del'>-    non_digit = false</div><div class='del'>-    while ch = getc</div><div class='del'>-      case ch</div><div class='del'>-      when /[0-9]/</div><div class='del'>-	non_digit = false</div><div class='del'>-      when "_"</div><div class='del'>-	non_digit = ch</div><div class='del'>-      when allow_point &amp;&amp; "."</div><div class='del'>-	if non_digit</div><div class='del'>-	  RubyLex.fail SyntaxError, "trailing `#{non_digit}' in number"</div><div class='del'>-	end</div><div class='del'>-	type = TkFLOAT</div><div class='del'>-	if peek(0) !~ /[0-9]/</div><div class='del'>-	  type = TkINTEGER</div><div class='del'>-	  ungetc</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-	allow_point = false</div><div class='del'>-      when allow_e &amp;&amp; "e", allow_e &amp;&amp; "E"</div><div class='del'>-	if non_digit</div><div class='del'>-	  RubyLex.fail SyntaxError, "trailing `#{non_digit}' in number"</div><div class='del'>-	end</div><div class='del'>-	type = TkFLOAT</div><div class='del'>-	if peek(0) =~ /[+-]/</div><div class='del'>-	  getc</div><div class='del'>-	end</div><div class='del'>-	allow_e = false</div><div class='del'>-	allow_point = false</div><div class='del'>-	non_digit = ch</div><div class='del'>-      else</div><div class='del'>-	if non_digit</div><div class='del'>-	  RubyLex.fail SyntaxError, "trailing `#{non_digit}' in number"</div><div class='del'>-	end</div><div class='del'>-	ungetc</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Token(type)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_string(ltype, quoted = ltype)</div><div class='del'>-    @ltype = ltype</div><div class='del'>-    @quoted = quoted</div><div class='del'>-    subtype = nil</div><div class='del'>-    begin</div><div class='del'>-      nest = 0</div><div class='del'>-      while ch = getc</div><div class='del'>-	if @quoted == ch and nest == 0</div><div class='del'>-	  break</div><div class='del'>-	elsif @ltype != "'" &amp;&amp; @ltype != "]" &amp;&amp; @ltype != ":" and ch == "#"</div><div class='del'>-	  subtype = true</div><div class='del'>-	elsif ch == '\\' #'</div><div class='del'>-	  read_escape</div><div class='del'>-	end</div><div class='del'>-	if PERCENT_PAREN.values.include?(@quoted) </div><div class='del'>-	  if PERCENT_PAREN[ch] == @quoted</div><div class='del'>-	    nest += 1</div><div class='del'>-	  elsif ch == @quoted</div><div class='del'>-	    nest -= 1</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if @ltype == "/"</div><div class='del'>-	if peek(0) =~ /i|m|x|o|e|s|u|n/</div><div class='del'>-	  getc</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if subtype</div><div class='del'>-	Token(DLtype2Token[ltype])</div><div class='del'>-      else</div><div class='del'>-	Token(Ltype2Token[ltype])</div><div class='del'>-      end</div><div class='del'>-    ensure</div><div class='del'>-      @ltype = nil</div><div class='del'>-      @quoted = nil</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_comment</div><div class='del'>-    @ltype = "#"</div><div class='del'>-</div><div class='del'>-    while ch = getc</div><div class='del'>-#      if ch == "\\" #"</div><div class='del'>-#	read_escape</div><div class='del'>-#      end</div><div class='del'>-      if ch == "\n"</div><div class='del'>-	@ltype = nil</div><div class='del'>-	ungetc</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    return Token(TkCOMMENT)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def read_escape</div><div class='del'>-    case ch = getc</div><div class='del'>-    when "\n", "\r", "\f"</div><div class='del'>-    when "\\", "n", "t", "r", "f", "v", "a", "e", "b", "s" #"</div><div class='del'>-    when /[0-7]/</div><div class='del'>-      ungetc ch</div><div class='del'>-      3.times do</div><div class='del'>-	case ch = getc</div><div class='del'>-	when /[0-7]/</div><div class='del'>-	when nil</div><div class='del'>-	  break</div><div class='del'>-	else</div><div class='del'>-	  ungetc</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-    when "x"</div><div class='del'>-      2.times do</div><div class='del'>-	case ch = getc</div><div class='del'>-	when /[0-9a-fA-F]/</div><div class='del'>-	when nil</div><div class='del'>-	  break</div><div class='del'>-	else</div><div class='del'>-	  ungetc</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when "M"</div><div class='del'>-      if (ch = getc) != '-'</div><div class='del'>-	ungetc</div><div class='del'>-      else</div><div class='del'>-	if (ch = getc) == "\\" #"</div><div class='del'>-	  read_escape</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when "C", "c" #, "^"</div><div class='del'>-      if ch == "C" and (ch = getc) != "-"</div><div class='del'>-	ungetc</div><div class='del'>-      elsif (ch = getc) == "\\" #"</div><div class='del'>-	read_escape</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      # other characters </div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/ruby-token.rb b/lib/irb/ruby-token.rb<br/>deleted file mode 100644<br/>index 525d4df14c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ruby-token.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ruby-token.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,273 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/ruby-token.rb - ruby tokens </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-module RubyToken</div><div class='del'>-  EXPR_BEG = :EXPR_BEG</div><div class='del'>-  EXPR_MID = :EXPR_MID</div><div class='del'>-  EXPR_END = :EXPR_END</div><div class='del'>-  EXPR_ARG = :EXPR_ARG</div><div class='del'>-  EXPR_FNAME = :EXPR_FNAME</div><div class='del'>-  EXPR_DOT = :EXPR_DOT</div><div class='del'>-  EXPR_CLASS = :EXPR_CLASS</div><div class='del'>-</div><div class='del'>-  # for ruby 1.4X</div><div class='del'>-  if !defined?(Symbol)</div><div class='del'>-    Symbol = Integer</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  class Token</div><div class='del'>-    def initialize(seek, line_no, char_no)</div><div class='del'>-      @seek = seek</div><div class='del'>-      @line_no = line_no</div><div class='del'>-      @char_no = char_no</div><div class='del'>-    end</div><div class='del'>-    attr :seek</div><div class='del'>-    attr :line_no</div><div class='del'>-    attr :char_no</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkNode &lt; Token</div><div class='del'>-    def initialize(seek, line_no, char_no)</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-    attr :node</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkId &lt; Token</div><div class='del'>-    def initialize(seek, line_no, char_no, name)</div><div class='del'>-      super(seek, line_no, char_no)</div><div class='del'>-      @name = name</div><div class='del'>-    end</div><div class='del'>-    attr :name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkVal &lt; Token</div><div class='del'>-    def initialize(seek, line_no, char_no, value = nil)</div><div class='del'>-      super(seek, line_no, char_no)</div><div class='del'>-      @value = value</div><div class='del'>-    end</div><div class='del'>-    attr :value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkOp &lt; Token</div><div class='del'>-    attr :name, true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkOPASGN &lt; TkOp</div><div class='del'>-    def initialize(seek, line_no, char_no, op)</div><div class='del'>-      super(seek, line_no, char_no)</div><div class='del'>-      op = TkReading2Token[op][0] unless op.kind_of?(Symbol)</div><div class='del'>-      @op = op</div><div class='del'>-    end</div><div class='del'>-    attr :op</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkUnknownChar &lt; Token</div><div class='del'>-    def initialize(seek, line_no, char_no, id)</div><div class='del'>-      super(seek, line_no, char_no)</div><div class='del'>-      @name = name</div><div class='del'>-    end</div><div class='del'>-    attr :name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkError &lt; Token</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Token(token, value = nil)</div><div class='del'>-    case token</div><div class='del'>-    when String</div><div class='del'>-      if (tk = TkReading2Token[token]).nil?</div><div class='del'>-	IRB.fail TkReading2TokenNoKey, token</div><div class='del'>-      end</div><div class='del'>-      tk = Token(tk[0], value) </div><div class='del'>-      if tk.kind_of?(TkOp)</div><div class='del'>-	tk.name = token</div><div class='del'>-      end</div><div class='del'>-      return tk</div><div class='del'>-    when Symbol</div><div class='del'>-      if (tk = TkSymbol2Token[token]).nil?</div><div class='del'>-	IRB.fail TkSymbol2TokenNoKey, token</div><div class='del'>-      end</div><div class='del'>-      return Token(tk[0], value) </div><div class='del'>-    else </div><div class='del'>-      if (token.ancestors &amp; [TkId, TkVal, TkOPASGN, TkUnknownChar]).empty?</div><div class='del'>-	token.new(@prev_seek, @prev_line_no, @prev_char_no)</div><div class='del'>-      else</div><div class='del'>-	token.new(@prev_seek, @prev_line_no, @prev_char_no, value)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  TokenDefinitions = [</div><div class='del'>-    [:TkCLASS,      TkId,  "class",  EXPR_CLASS],</div><div class='del'>-    [:TkMODULE,     TkId,  "module", EXPR_BEG],</div><div class='del'>-    [:TkDEF,	    TkId,  "def",    EXPR_FNAME],</div><div class='del'>-    [:TkUNDEF,      TkId,  "undef",  EXPR_FNAME],</div><div class='del'>-    [:TkBEGIN,      TkId,  "begin",  EXPR_BEG],</div><div class='del'>-    [:TkRESCUE,     TkId,  "rescue", EXPR_MID],</div><div class='del'>-    [:TkENSURE,     TkId,  "ensure", EXPR_BEG],</div><div class='del'>-    [:TkEND,	    TkId,  "end",    EXPR_END],</div><div class='del'>-    [:TkIF,         TkId,  "if",     EXPR_BEG, :TkIF_MOD],</div><div class='del'>-    [:TkUNLESS,     TkId,  "unless", EXPR_BEG, :TkUNLESS_MOD],</div><div class='del'>-    [:TkTHEN,	    TkId,  "then",   EXPR_BEG],</div><div class='del'>-    [:TkELSIF,      TkId,  "elsif",  EXPR_BEG],</div><div class='del'>-    [:TkELSE,	    TkId,  "else",   EXPR_BEG],</div><div class='del'>-    [:TkCASE,	    TkId,  "case",   EXPR_BEG],</div><div class='del'>-    [:TkWHEN,	    TkId,  "when",   EXPR_BEG],</div><div class='del'>-    [:TkWHILE,      TkId,  "while",  EXPR_BEG, :TkWHILE_MOD],</div><div class='del'>-    [:TkUNTIL,      TkId,  "until",  EXPR_BEG, :TkUNTIL_MOD],</div><div class='del'>-    [:TkFOR,	    TkId,  "for",    EXPR_BEG],</div><div class='del'>-    [:TkBREAK,      TkId,  "break",  EXPR_END],</div><div class='del'>-    [:TkNEXT,	    TkId,  "next",   EXPR_END],</div><div class='del'>-    [:TkREDO,	    TkId,  "redo",   EXPR_END],</div><div class='del'>-    [:TkRETRY,      TkId,  "retry",  EXPR_END],</div><div class='del'>-    [:TkIN,	    TkId,  "in",     EXPR_BEG],</div><div class='del'>-    [:TkDO,	    TkId,  "do",     EXPR_BEG],</div><div class='del'>-    [:TkRETURN,     TkId,  "return", EXPR_MID],</div><div class='del'>-    [:TkYIELD,      TkId,  "yield",  EXPR_END],</div><div class='del'>-    [:TkSUPER,      TkId,  "super",  EXPR_END],</div><div class='del'>-    [:TkSELF,	    TkId,  "self",   EXPR_END],</div><div class='del'>-    [:TkNIL, 	    TkId,  "nil",    EXPR_END],</div><div class='del'>-    [:TkTRUE,	    TkId,  "true",   EXPR_END],</div><div class='del'>-    [:TkFALSE,      TkId,  "false",  EXPR_END],</div><div class='del'>-    [:TkAND,	    TkId,  "and",    EXPR_BEG],</div><div class='del'>-    [:TkOR, 	    TkId,  "or",     EXPR_BEG],</div><div class='del'>-    [:TkNOT,	    TkId,  "not",    EXPR_BEG],</div><div class='del'>-    [:TkIF_MOD,     TkId],</div><div class='del'>-    [:TkUNLESS_MOD, TkId],</div><div class='del'>-    [:TkWHILE_MOD,  TkId],</div><div class='del'>-    [:TkUNTIL_MOD,  TkId],</div><div class='del'>-    [:TkALIAS,      TkId,  "alias",    EXPR_FNAME],</div><div class='del'>-    [:TkDEFINED,    TkId,  "defined?", EXPR_END],</div><div class='del'>-    [:TklBEGIN,     TkId,  "BEGIN",    EXPR_END],</div><div class='del'>-    [:TklEND,	    TkId,  "END",      EXPR_END],</div><div class='del'>-    [:Tk__LINE__,   TkId,  "__LINE__", EXPR_END],</div><div class='del'>-    [:Tk__FILE__,   TkId,  "__FILE__", EXPR_END],</div><div class='del'>-</div><div class='del'>-    [:TkIDENTIFIER, TkId],</div><div class='del'>-    [:TkFID,	    TkId],</div><div class='del'>-    [:TkGVAR,	    TkId],</div><div class='del'>-    [:TkCVAR,	    TkId],</div><div class='del'>-    [:TkIVAR,	    TkId],</div><div class='del'>-    [:TkCONSTANT,   TkId],</div><div class='del'>-</div><div class='del'>-    [:TkINTEGER,    TkVal],</div><div class='del'>-    [:TkFLOAT,      TkVal],</div><div class='del'>-    [:TkSTRING,     TkVal],</div><div class='del'>-    [:TkXSTRING,    TkVal],</div><div class='del'>-    [:TkREGEXP,     TkVal],</div><div class='del'>-    [:TkSYMBOL,     TkVal],</div><div class='del'>-</div><div class='del'>-    [:TkDSTRING,    TkNode],</div><div class='del'>-    [:TkDXSTRING,   TkNode],</div><div class='del'>-    [:TkDREGEXP,    TkNode],</div><div class='del'>-    [:TkNTH_REF,    TkNode],</div><div class='del'>-    [:TkBACK_REF,   TkNode],</div><div class='del'>-</div><div class='del'>-    [:TkUPLUS,      TkOp,   "+@"],</div><div class='del'>-    [:TkUMINUS,     TkOp,   "-@"],</div><div class='del'>-    [:TkPOW,	    TkOp,   "**"],</div><div class='del'>-    [:TkCMP,	    TkOp,   "&lt;=&gt;"],</div><div class='del'>-    [:TkEQ,	    TkOp,   "=="],</div><div class='del'>-    [:TkEQQ,	    TkOp,   "==="],</div><div class='del'>-    [:TkNEQ,	    TkOp,   "!="],</div><div class='del'>-    [:TkGEQ,	    TkOp,   "&gt;="],</div><div class='del'>-    [:TkLEQ,	    TkOp,   "&lt;="],</div><div class='del'>-    [:TkANDOP,      TkOp,   "&amp;&amp;"],</div><div class='del'>-    [:TkOROP,	    TkOp,   "||"],</div><div class='del'>-    [:TkMATCH,      TkOp,   "=~"],</div><div class='del'>-    [:TkNMATCH,     TkOp,   "!~"],</div><div class='del'>-    [:TkDOT2,	    TkOp,   ".."],</div><div class='del'>-    [:TkDOT3,	    TkOp,   "..."],</div><div class='del'>-    [:TkAREF,	    TkOp,   "[]"],</div><div class='del'>-    [:TkASET,	    TkOp,   "[]="],</div><div class='del'>-    [:TkLSHFT,      TkOp,   "&lt;&lt;"],</div><div class='del'>-    [:TkRSHFT,      TkOp,   "&gt;&gt;"],</div><div class='del'>-    [:TkCOLON2,     TkOp],</div><div class='del'>-    [:TkCOLON3,     TkOp],</div><div class='del'>-#   [:OPASGN,	    TkOp],               # +=, -=  etc. #</div><div class='del'>-    [:TkASSOC,      TkOp,   "=&gt;"],</div><div class='del'>-    [:TkQUESTION,   TkOp,   "?"],	 #?</div><div class='del'>-    [:TkCOLON,      TkOp,   ":"],        #:</div><div class='del'>-    </div><div class='del'>-    [:TkfLPAREN],         # func( #</div><div class='del'>-    [:TkfLBRACK],         # func[ #</div><div class='del'>-    [:TkfLBRACE],         # func{ #</div><div class='del'>-    [:TkSTAR],            # *arg</div><div class='del'>-    [:TkAMPER],           # &amp;arg #</div><div class='del'>-    [:TkSYMBEG],          # :SYMBOL</div><div class='del'>-</div><div class='del'>-    [:TkGT,	    TkOp,   "&gt;"],</div><div class='del'>-    [:TkLT,	    TkOp,   "&lt;"],</div><div class='del'>-    [:TkPLUS,	    TkOp,   "+"],</div><div class='del'>-    [:TkMINUS,      TkOp,   "-"],</div><div class='del'>-    [:TkMULT,	    TkOp,   "*"],</div><div class='del'>-    [:TkDIV,	    TkOp,   "/"],</div><div class='del'>-    [:TkMOD,	    TkOp,   "%"],</div><div class='del'>-    [:TkBITOR,      TkOp,   "|"],</div><div class='del'>-    [:TkBITXOR,     TkOp,   "^"],</div><div class='del'>-    [:TkBITAND,     TkOp,   "&amp;"],</div><div class='del'>-    [:TkBITNOT,     TkOp,   "~"],</div><div class='del'>-    [:TkNOTOP,      TkOp,   "!"],</div><div class='del'>-</div><div class='del'>-    [:TkBACKQUOTE,  TkOp,   "`"],</div><div class='del'>-</div><div class='del'>-    [:TkASSIGN,     Token,  "="],</div><div class='del'>-    [:TkDOT,	    Token,  "."],</div><div class='del'>-    [:TkLPAREN,     Token,  "("],  #(exp)</div><div class='del'>-    [:TkLBRACK,     Token,  "["],  #[arry]</div><div class='del'>-    [:TkLBRACE,     Token,  "{"],  #{hash}</div><div class='del'>-    [:TkRPAREN,     Token,  ")"],</div><div class='del'>-    [:TkRBRACK,     Token,  "]"],</div><div class='del'>-    [:TkRBRACE,     Token,  "}"],</div><div class='del'>-    [:TkCOMMA,      Token,  ","],</div><div class='del'>-    [:TkSEMICOLON,  Token,  ";"],</div><div class='del'>-</div><div class='del'>-    [:TkCOMMENT],</div><div class='del'>-    [:TkRD_COMMENT],</div><div class='del'>-    [:TkSPACE],</div><div class='del'>-    [:TkNL],</div><div class='del'>-    [:TkEND_OF_SCRIPT],</div><div class='del'>-</div><div class='del'>-    [:TkBACKSLASH,  TkUnknownChar,  "\\"],</div><div class='del'>-    [:TkAT,	    TkUnknownChar,  "@"],</div><div class='del'>-    [:TkDOLLAR,     TkUnknownChar,  "$"],</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  # {reading =&gt; token_class}</div><div class='del'>-  # {reading =&gt; [token_class, *opt]}</div><div class='del'>-  TkReading2Token = {}</div><div class='del'>-  TkSymbol2Token = {}</div><div class='del'>-</div><div class='del'>-  def RubyToken.def_token(token_n, super_token = Token, reading = nil, *opts)</div><div class='del'>-    token_n = token_n.id2name if token_n.kind_of?(Symbol)</div><div class='del'>-    if RubyToken.const_defined?(token_n)</div><div class='del'>-      IRB.fail AlreadyDefinedToken, token_n</div><div class='del'>-    end</div><div class='del'>-    token_c = eval("class #{token_n} &lt; #{super_token}; end; #{token_n}")</div><div class='del'>-    </div><div class='del'>-    if reading</div><div class='del'>-      if TkReading2Token[reading]</div><div class='del'>-	IRB.fail TkReading2TokenDuplicateError, token_n, reading</div><div class='del'>-      end</div><div class='del'>-      if opts.empty?</div><div class='del'>-	TkReading2Token[reading] = [token_c]</div><div class='del'>-      else</div><div class='del'>-	TkReading2Token[reading] = [token_c].concat(opts)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TkSymbol2Token[token_n.intern] = token_c</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  for defs in TokenDefinitions</div><div class='del'>-    def_token(*defs)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/slex.rb b/lib/irb/slex.rb<br/>deleted file mode 100644<br/>index f7e3a3b2b2..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/slex.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/slex.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,285 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/slex.rb - simple lex analyzer</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-require "e2mmap"</div><div class='del'>-require "irb/notifier"</div><div class='del'>-</div><div class='del'>-module IRB</div><div class='del'>-  class SLex</div><div class='del'>-    @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-    extend Exception2MessageMapper</div><div class='del'>-    def_exception :ErrNodeNothing, "node nothing"</div><div class='del'>-    def_exception :ErrNodeAlreadyExists, "node already exists"</div><div class='del'>-</div><div class='del'>-    DOUT = Notifier::def_notifier("SLex::")</div><div class='del'>-    D_WARN = DOUT::def_notifier(1, "Warn: ")</div><div class='del'>-    D_DEBUG = DOUT::def_notifier(2, "Debug: ")</div><div class='del'>-    D_DETAIL = DOUT::def_notifier(4, "Detail: ")</div><div class='del'>-    </div><div class='del'>-    DOUT.level = Notifier::D_NOMSG</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      @head = Node.new("")</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_rule(token, preproc = nil, postproc = nil, &amp;block)</div><div class='del'>-      D_DETAIL.pp token</div><div class='del'>-</div><div class='del'>-      postproc = block if block_given?</div><div class='del'>-      node = create(token, preproc, postproc)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_rules(*tokens, &amp;block)</div><div class='del'>-      if block_given?</div><div class='del'>-	p = block</div><div class='del'>-      end</div><div class='del'>-      for token in tokens</div><div class='del'>-	def_rule(token, nil, p)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def preproc(token, proc)</div><div class='del'>-      node = search(token)</div><div class='del'>-      node.preproc=proc</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #$BMW%A%'%C%/(B? </div><div class='del'>-    def postproc(token)</div><div class='del'>-      node = search(token, proc)</div><div class='del'>-      node.postproc=proc</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def search(token)</div><div class='del'>-      @head.search(token.split(//))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def create(token, preproc = nil, postproc = nil)</div><div class='del'>-      @head.create_subnode(token.split(//), preproc, postproc)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def match(token)</div><div class='del'>-      case token</div><div class='del'>-      when Array</div><div class='del'>-      when String</div><div class='del'>-	return match(token.split(//))</div><div class='del'>-      else</div><div class='del'>-	return @head.match_io(token)</div><div class='del'>-      end</div><div class='del'>-      ret = @head.match(token)</div><div class='del'>-      D_DETAIL.exec_if{D_DEATIL.printf "match end: %s:%s\n", ret, token.inspect}</div><div class='del'>-      ret</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def inspect</div><div class='del'>-      format("&lt;SLex: @head = %s&gt;", @head.inspect)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #----------------------------------------------------------------------</div><div class='del'>-    #</div><div class='del'>-    #   class Node - </div><div class='del'>-    #</div><div class='del'>-    #----------------------------------------------------------------------</div><div class='del'>-    class Node</div><div class='del'>-      # if postproc is nil, this node is an abstract node.</div><div class='del'>-      # if postproc is non-nil, this node is a real node.</div><div class='del'>-      def initialize(preproc = nil, postproc = nil)</div><div class='del'>-	@Tree = {}</div><div class='del'>-	@preproc = preproc</div><div class='del'>-	@postproc = postproc</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_accessor :preproc</div><div class='del'>-      attr_accessor :postproc</div><div class='del'>-      </div><div class='del'>-      def search(chrs, opt = nil)</div><div class='del'>-	return self if chrs.empty?</div><div class='del'>-	ch = chrs.shift</div><div class='del'>-	if node = @Tree[ch]</div><div class='del'>-	  node.search(chrs, opt)</div><div class='del'>-	else</div><div class='del'>-	  if opt</div><div class='del'>-	    chrs.unshift ch</div><div class='del'>-	    self.create_subnode(chrs)</div><div class='del'>-	  else</div><div class='del'>-	    SLex.fail ErrNodeNothing</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_subnode(chrs, preproc = nil, postproc = nil)</div><div class='del'>-	if chrs.empty?</div><div class='del'>-	  if @postproc</div><div class='del'>-	    D_DETAIL.pp node</div><div class='del'>-	    SLex.fail ErrNodeAlreadyExists</div><div class='del'>-	  else</div><div class='del'>-	    D_DEBUG.puts "change abstract node to real node."</div><div class='del'>-	    @preproc = preproc</div><div class='del'>-	    @postproc = postproc</div><div class='del'>-	  end</div><div class='del'>-	  return self</div><div class='del'>-	end</div><div class='del'>-	</div><div class='del'>-	ch = chrs.shift</div><div class='del'>-	if node = @Tree[ch]</div><div class='del'>-	  if chrs.empty?</div><div class='del'>-	    if node.postproc</div><div class='del'>-	      DebugLogger.pp node</div><div class='del'>-	      DebugLogger.pp self</div><div class='del'>-	      DebugLogger.pp ch</div><div class='del'>-	      DebugLogger.pp chrs</div><div class='del'>-	      SLex.fail ErrNodeAlreadyExists</div><div class='del'>-	    else</div><div class='del'>-	      D_WARN.puts "change abstract node to real node"</div><div class='del'>-	      node.preproc = preproc</div><div class='del'>-	      node.postproc = postproc</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    node.create_subnode(chrs, preproc, postproc)</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  if chrs.empty?</div><div class='del'>-	    node = Node.new(preproc, postproc)</div><div class='del'>-	  else</div><div class='del'>-	    node = Node.new</div><div class='del'>-	    node.create_subnode(chrs, preproc, postproc)</div><div class='del'>-	  end</div><div class='del'>-	  @Tree[ch] = node</div><div class='del'>-	end</div><div class='del'>-	node</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # chrs: String</div><div class='del'>-      #       character array</div><div class='del'>-      #       io must have getc()/ungetc(); and ungetc() must be</div><div class='del'>-      #       able to be called arbitrary number of times. </div><div class='del'>-      #</div><div class='del'>-      def match(chrs, op = "")</div><div class='del'>-	D_DETAIL.print "match&gt;: ", chrs, "op:", op, "\n"</div><div class='del'>-	if chrs.empty?</div><div class='del'>-	  if @preproc.nil? || @preproc.call(op, chrs)</div><div class='del'>-	    DOUT.printf(D_DETAIL, "op1: %s\n", op)</div><div class='del'>-	    @postproc.call(op, chrs)</div><div class='del'>-	  else</div><div class='del'>-	    nil</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  ch = chrs.shift</div><div class='del'>-	  if node = @Tree[ch]</div><div class='del'>-	    if ret = node.match(chrs, op+ch)</div><div class='del'>-	      return ret</div><div class='del'>-	    else</div><div class='del'>-	      chrs.unshift ch</div><div class='del'>-	      if @postproc and @preproc.nil? || @preproc.call(op, chrs)</div><div class='del'>-		DOUT.printf(D_DETAIL, "op2: %s\n", op.inspect)</div><div class='del'>-		ret = @postproc.call(op, chrs)</div><div class='del'>-		return ret</div><div class='del'>-	      else</div><div class='del'>-		return nil</div><div class='del'>-	      end</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    chrs.unshift ch</div><div class='del'>-	    if @postproc and @preproc.nil? || @preproc.call(op, chrs)</div><div class='del'>-	      DOUT.printf(D_DETAIL, "op3: %s\n", op)</div><div class='del'>-	      @postproc.call(op, chrs)</div><div class='del'>-	      return ""</div><div class='del'>-	    else</div><div class='del'>-	      return nil</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 match_io(io, op = "")</div><div class='del'>-	if op == ""</div><div class='del'>-	  ch = io.getc</div><div class='del'>-	  if ch == nil</div><div class='del'>-	    return nil</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  ch = io.getc_of_rests</div><div class='del'>-	end</div><div class='del'>-	if ch.nil?</div><div class='del'>-	  if @preproc.nil? || @preproc.call(op, io)</div><div class='del'>-	    D_DETAIL.printf("op1: %s\n", op)</div><div class='del'>-	    @postproc.call(op, io)</div><div class='del'>-	  else</div><div class='del'>-	    nil</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  if node = @Tree[ch]</div><div class='del'>-	    if ret = node.match_io(io, op+ch)</div><div class='del'>-	      ret</div><div class='del'>-	    else</div><div class='del'>-	      io.ungetc ch</div><div class='del'>-	      if @postproc and @preproc.nil? || @preproc.call(op, io)</div><div class='del'>-		DOUT.exec_if{D_DETAIL.printf "op2: %s\n", op.inspect}</div><div class='del'>-		@postproc.call(op, io)</div><div class='del'>-	      else</div><div class='del'>-		nil</div><div class='del'>-	      end</div><div class='del'>-	    end</div><div class='del'>-	  else</div><div class='del'>-	    io.ungetc ch</div><div class='del'>-	    if @postproc and @preproc.nil? || @preproc.call(op, io)</div><div class='del'>-	      D_DETAIL.printf("op3: %s\n", op)</div><div class='del'>-	      @postproc.call(op, io)</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'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-SLex=IRB::SLex</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  #    Tracer.on</div><div class='del'>-  case $1</div><div class='del'>-  when "1"</div><div class='del'>-    tr = SLex.new</div><div class='del'>-    print "0: ", tr.inspect, "\n"</div><div class='del'>-    tr.def_rule("=") {print "=\n"}</div><div class='del'>-    print "1: ", tr.inspect, "\n"</div><div class='del'>-    tr.def_rule("==") {print "==\n"}</div><div class='del'>-    print "2: ", tr.inspect, "\n"</div><div class='del'>-    </div><div class='del'>-    print "case 1:\n"</div><div class='del'>-    print tr.match("="), "\n"</div><div class='del'>-    print "case 2:\n"</div><div class='del'>-    print tr.match("=="), "\n"</div><div class='del'>-    print "case 3:\n"</div><div class='del'>-    print tr.match("=&gt;"), "\n"</div><div class='del'>-    </div><div class='del'>-  when "2"</div><div class='del'>-    tr = SLex.new</div><div class='del'>-    print "0: ", tr.inspect, "\n"</div><div class='del'>-    tr.def_rule("=") {print "=\n"}</div><div class='del'>-    print "1: ", tr.inspect, "\n"</div><div class='del'>-    tr.def_rule("==", proc{false}) {print "==\n"}</div><div class='del'>-    print "2: ", tr.inspect, "\n"</div><div class='del'>-    </div><div class='del'>-    print "case 1:\n"</div><div class='del'>-    print tr.match("="), "\n"</div><div class='del'>-    print "case 2:\n"</div><div class='del'>-    print tr.match("=="), "\n"</div><div class='del'>-    print "case 3:\n"</div><div class='del'>-    print tr.match("=&gt;"), "\n"</div><div class='del'>-  end</div><div class='del'>-  exit</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/irb/version.rb b/lib/irb/version.rb<br/>deleted file mode 100644<br/>index 28b079740a..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/version.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/version.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/version.rb - irb version definition file</div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</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'>-module IRB</div><div class='del'>-  @RELEASE_VERSION = "0.9.5"</div><div class='del'>-  @LAST_UPDATE_DATE = "05/04/13"</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/workspace.rb b/lib/irb/workspace.rb<br/>deleted file mode 100644<br/>index 7d1794cd7b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/workspace.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/workspace.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,107 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/workspace-binding.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</div><div class='del'>-#</div><div class='del'>-# --</div><div class='del'>-#</div><div class='del'>-#   </div><div class='del'>-#</div><div class='del'>-module IRB</div><div class='del'>-  class WorkSpace</div><div class='del'>-    # create new workspace. set self to main if specified, otherwise</div><div class='del'>-    # inherit main from TOPLEVEL_BINDING.</div><div class='del'>-    def initialize(*main)</div><div class='del'>-      if main[0].kind_of?(Binding)</div><div class='del'>-	@binding = main.shift</div><div class='del'>-      elsif IRB.conf[:SINGLE_IRB]</div><div class='del'>-	@binding = TOPLEVEL_BINDING</div><div class='del'>-      else</div><div class='del'>-	case IRB.conf[:CONTEXT_MODE]</div><div class='del'>-	when 0	# binding in proc on TOPLEVEL_BINDING</div><div class='del'>-	  @binding = eval("proc{binding}.call",</div><div class='del'>-		      TOPLEVEL_BINDING, </div><div class='del'>-		      __FILE__,</div><div class='del'>-		      __LINE__)</div><div class='del'>-	when 1	# binding in loaded file</div><div class='del'>-	  require "tempfile"</div><div class='del'>-	  f = Tempfile.open("irb-binding")</div><div class='del'>-	  f.print &lt;&lt;EOF</div><div class='del'>-	  $binding = binding</div><div class='del'>-EOF</div><div class='del'>-	  f.close</div><div class='del'>-	  load f.path</div><div class='del'>-	  @binding = $binding</div><div class='del'>-</div><div class='del'>-	when 2	# binding in loaded file(thread use)</div><div class='del'>-	  unless defined? BINDING_QUEUE</div><div class='del'>-	    require "thread"</div><div class='del'>-	    </div><div class='del'>-	    IRB.const_set("BINDING_QUEUE", SizedQueue.new(1))</div><div class='del'>-	    Thread.abort_on_exception = true</div><div class='del'>-	    Thread.start do</div><div class='del'>-	      eval "require \"irb/ws-for-case-2\"", TOPLEVEL_BINDING, __FILE__, __LINE__</div><div class='del'>-	    end</div><div class='del'>-	    Thread.pass</div><div class='del'>-	  end</div><div class='del'>-	  @binding = BINDING_QUEUE.pop</div><div class='del'>-</div><div class='del'>-	when 3	# binging in function on TOPLEVEL_BINDING(default)</div><div class='del'>-	  @binding = eval("def irb_binding; binding; end; irb_binding",</div><div class='del'>-		      TOPLEVEL_BINDING, </div><div class='del'>-		      __FILE__,</div><div class='del'>-		      __LINE__ - 3)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if main.empty?</div><div class='del'>-	@main = eval("self", @binding)</div><div class='del'>-      else</div><div class='del'>-	@main = main[0]</div><div class='del'>-	IRB.conf[:__MAIN__] = @main</div><div class='del'>-	case @main</div><div class='del'>-	when Module</div><div class='del'>-	  @binding = eval("IRB.conf[:__MAIN__].module_eval('binding', __FILE__, __LINE__)", @binding, __FILE__, __LINE__)</div><div class='del'>-	else</div><div class='del'>-	  begin </div><div class='del'>-	    @binding = eval("IRB.conf[:__MAIN__].instance_eval('binding', __FILE__, __LINE__)", @binding, __FILE__, __LINE__)</div><div class='del'>-	  rescue TypeError</div><div class='del'>-	    IRB.fail CantChangeBinding, @main.inspect</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      eval("_=nil", @binding)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :binding</div><div class='del'>-    attr_reader :main</div><div class='del'>-</div><div class='del'>-    def evaluate(context, statements, file = __FILE__, line = __LINE__)</div><div class='del'>-      eval(statements, @binding, file, line)</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    # error message manipulator</div><div class='del'>-    def filter_backtrace(bt)</div><div class='del'>-      case IRB.conf[:CONTEXT_MODE]</div><div class='del'>-      when 0</div><div class='del'>-	return nil if bt =~ /\(irb_local_binding\)/</div><div class='del'>-      when 1</div><div class='del'>-	if(bt =~ %r!/tmp/irb-binding! or</div><div class='del'>-	   bt =~ %r!irb/.*\.rb! or</div><div class='del'>-	   bt =~ /irb\.rb/)</div><div class='del'>-	  return nil</div><div class='del'>-	end</div><div class='del'>-      when 2</div><div class='del'>-	return nil if bt =~ /irb\/.*\.rb/</div><div class='del'>-      when 3</div><div class='del'>-	return nil if bt =~ /irb\/.*\.rb/</div><div class='del'>-	bt.sub!(/:\s*in `irb_binding'/){""} </div><div class='del'>-      end</div><div class='del'>-      bt</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def IRB.delete_caller</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/ws-for-case-2.rb b/lib/irb/ws-for-case-2.rb<br/>deleted file mode 100644<br/>index afd49d23e1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/ws-for-case-2.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/ws-for-case-2.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,15 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   irb/ws-for-case-2.rb - </div><div class='del'>-#   	$Release Version: 0.9.5$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ruby-lang.org)</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'>-while true</div><div class='del'>-  IRB::BINDING_QUEUE.push b = binding</div><div class='del'>-end</div><div class='head'>diff --git a/lib/irb/xmp.rb b/lib/irb/xmp.rb<br/>deleted file mode 100644<br/>index 4bcc2ca22f..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/irb/xmp.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/irb/xmp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,86 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   xmp.rb - irb version of gotoken xmp</div><div class='del'>-#   	$Release Version: 0.9$</div><div class='del'>-#   	$Revision$</div><div class='del'>-#   	$Date$</div><div class='del'>-#   	by Keiju ISHITSUKA(Nippon Rational Inc.)</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'>-require "irb"</div><div class='del'>-require "irb/frame"</div><div class='del'>-</div><div class='del'>-class XMP</div><div class='del'>-  @RCS_ID='-$Id$-'</div><div class='del'>-</div><div class='del'>-  def initialize(bind = nil)</div><div class='del'>-    IRB.init_config(nil)</div><div class='del'>-    #IRB.parse_opts</div><div class='del'>-    #IRB.load_modules</div><div class='del'>-</div><div class='del'>-    IRB.conf[:PROMPT_MODE] = :XMP</div><div class='del'>-</div><div class='del'>-    bind = IRB::Frame.top(1) unless bind</div><div class='del'>-    ws = IRB::WorkSpace.new(bind)</div><div class='del'>-    @io = StringInputMethod.new</div><div class='del'>-    @irb = IRB::Irb.new(ws, @io)</div><div class='del'>-    @irb.context.ignore_sigint = false</div><div class='del'>-</div><div class='del'>-#    IRB.conf[:IRB_RC].call(@irb.context) if IRB.conf[:IRB_RC]</div><div class='del'>-    IRB.conf[:MAIN_CONTEXT] = @irb.context</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def puts(exps)</div><div class='del'>-    @io.puts exps</div><div class='del'>-</div><div class='del'>-    if @irb.context.ignore_sigint</div><div class='del'>-      begin</div><div class='del'>-	trap_proc_b = trap("SIGINT"){@irb.signal_handle}</div><div class='del'>-	catch(:IRB_EXIT) do</div><div class='del'>-	  @irb.eval_input</div><div class='del'>-	end</div><div class='del'>-      ensure</div><div class='del'>-	trap("SIGINT", trap_proc_b)</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      catch(:IRB_EXIT) do</div><div class='del'>-	@irb.eval_input</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class StringInputMethod &lt; IRB::InputMethod</div><div class='del'>-    def initialize</div><div class='del'>-      super</div><div class='del'>-      @exps = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def eof?</div><div class='del'>-      @exps.empty?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gets</div><div class='del'>-      while l = @exps.shift</div><div class='del'>-	next if /^\s+$/ =~ l</div><div class='del'>-	l.concat "\n"</div><div class='del'>-	print @prompt, l</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-      l</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def puts(exps)</div><div class='del'>-      @exps.concat exps.split(/\n/)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def xmp(exps, bind = nil)</div><div class='del'>-  bind = IRB::Frame.top(1) unless bind</div><div class='del'>-  xmp = XMP.new(bind)</div><div class='del'>-  xmp.puts exps</div><div class='del'>-  xmp</div><div class='del'>-end</div><div class='head'>diff --git a/lib/jcode.rb b/lib/jcode.rb<br/>deleted file mode 100644<br/>index 78422f296f..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/jcode.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/jcode.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,220 +0,0 @@</div><div class='del'>-# jcode.rb - ruby code to handle japanese (EUC/SJIS) string</div><div class='del'>-</div><div class='del'>-if $VERBOSE &amp;&amp; $KCODE == "NONE"</div><div class='del'>-  warn "Warning: $KCODE is NONE."</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$vsave, $VERBOSE = $VERBOSE, false</div><div class='del'>-class String</div><div class='del'>-  warn "feel free for some warnings:\n" if $VERBOSE</div><div class='del'>-</div><div class='del'>-  def _regex_quote(str)</div><div class='del'>-    str.gsub(/(\\[\[\]\-\\])|\\(.)|([\[\]\\])/) do</div><div class='del'>-      $1 || $2 || '\\' + $3</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :_regex_quote</div><div class='del'>-</div><div class='del'>-  PATTERN_SJIS = '[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]'</div><div class='del'>-  PATTERN_EUC = '[\xa1-\xfe][\xa1-\xfe]'</div><div class='del'>-  PATTERN_UTF8 = '[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf]'</div><div class='del'>-</div><div class='del'>-  RE_SJIS = Regexp.new(PATTERN_SJIS, 0, 'n')</div><div class='del'>-  RE_EUC = Regexp.new(PATTERN_EUC, 0, 'n')</div><div class='del'>-  RE_UTF8 = Regexp.new(PATTERN_UTF8, 0, 'n')</div><div class='del'>-</div><div class='del'>-  SUCC = {}</div><div class='del'>-  SUCC['s'] = Hash.new(1)</div><div class='del'>-  for i in 0 .. 0x3f</div><div class='del'>-    SUCC['s'][i.chr] = 0x40 - i</div><div class='del'>-  end</div><div class='del'>-  SUCC['s']["\x7e"] = 0x80 - 0x7e</div><div class='del'>-  SUCC['s']["\xfd"] = 0x100 - 0xfd</div><div class='del'>-  SUCC['s']["\xfe"] = 0x100 - 0xfe</div><div class='del'>-  SUCC['s']["\xff"] = 0x100 - 0xff</div><div class='del'>-  SUCC['e'] = Hash.new(1)</div><div class='del'>-  for i in 0 .. 0xa0</div><div class='del'>-    SUCC['e'][i.chr] = 0xa1 - i</div><div class='del'>-  end</div><div class='del'>-  SUCC['e']["\xfe"] = 2</div><div class='del'>-  SUCC['u'] = Hash.new(1)</div><div class='del'>-  for i in 0 .. 0x7f</div><div class='del'>-    SUCC['u'][i.chr] = 0x80 - i</div><div class='del'>-  end</div><div class='del'>-  SUCC['u']["\xbf"] = 0x100 - 0xbf</div><div class='del'>-</div><div class='del'>-  def mbchar?</div><div class='del'>-    case $KCODE[0]</div><div class='del'>-    when ?s, ?S</div><div class='del'>-      self =~ RE_SJIS</div><div class='del'>-    when ?e, ?E</div><div class='del'>-      self =~ RE_EUC</div><div class='del'>-    when ?u, ?U</div><div class='del'>-      self =~ RE_UTF8</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 end_regexp</div><div class='del'>-    case $KCODE[0]</div><div class='del'>-    when ?s, ?S</div><div class='del'>-      /#{PATTERN_SJIS}$/on</div><div class='del'>-    when ?e, ?E</div><div class='del'>-      /#{PATTERN_EUC}$/on</div><div class='del'>-    when ?u, ?U</div><div class='del'>-      /#{PATTERN_UTF8}$/on</div><div class='del'>-    else</div><div class='del'>-      /.$/on</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias original_succ! succ!</div><div class='del'>-  private :original_succ!</div><div class='del'>-</div><div class='del'>-  alias original_succ succ</div><div class='del'>-  private :original_succ</div><div class='del'>-</div><div class='del'>-  def succ!</div><div class='del'>-    reg = end_regexp</div><div class='del'>-    if  $KCODE != 'NONE' &amp;&amp; self =~ reg</div><div class='del'>-      succ_table = SUCC[$KCODE[0,1].downcase]</div><div class='del'>-      begin</div><div class='del'>-	self[-1] += succ_table[self[-1]]</div><div class='del'>-	self[-2] += 1 if self[-1] == 0</div><div class='del'>-      end while self !~ reg</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      original_succ!</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def succ</div><div class='del'>-    str = self.dup</div><div class='del'>-    str.succ! or str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def _expand_ch str</div><div class='del'>-    a = []</div><div class='del'>-    str.scan(/(?:\\(.)|([^\\]))-(?:\\(.)|([^\\]))|(?:\\(.)|(.))/m) do</div><div class='del'>-      from = $1 || $2</div><div class='del'>-      to = $3 || $4</div><div class='del'>-      one = $5 || $6</div><div class='del'>-      if one</div><div class='del'>-	a.push one</div><div class='del'>-      elsif from.length != to.length</div><div class='del'>-	next</div><div class='del'>-      elsif from.length == 1</div><div class='del'>-	from[0].upto(to[0]) { |c| a.push c.chr }</div><div class='del'>-      else</div><div class='del'>-	from.upto(to) { |c| a.push c }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    a</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def expand_ch_hash from, to</div><div class='del'>-    h = {}</div><div class='del'>-    afrom = _expand_ch(from)</div><div class='del'>-    ato = _expand_ch(to)</div><div class='del'>-    afrom.each_with_index do |x,i| h[x] = ato[i] || ato[-1] end</div><div class='del'>-    h</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  HashCache = {}</div><div class='del'>-  TrPatternCache = {}</div><div class='del'>-  DeletePatternCache = {}</div><div class='del'>-  SqueezePatternCache = {}</div><div class='del'>-</div><div class='del'>-  public</div><div class='del'>-</div><div class='del'>-  def tr!(from, to)</div><div class='del'>-    return nil if from == ""</div><div class='del'>-    return self.delete!(from) if to == ""</div><div class='del'>-</div><div class='del'>-    pattern = TrPatternCache[from] ||= /[#{_regex_quote(from)}]/</div><div class='del'>-    if from[0] == ?^</div><div class='del'>-      last = /.$/.match(to)[0]</div><div class='del'>-      self.gsub!(pattern, last)</div><div class='del'>-    else</div><div class='del'>-      h = HashCache[from + "1-0" + to] ||= expand_ch_hash(from, to)</div><div class='del'>-      self.gsub!(pattern) do |c| h[c] end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tr(from, to)</div><div class='del'>-    (str = self.dup).tr!(from, to) or str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete!(del)</div><div class='del'>-    return nil if del == ""</div><div class='del'>-    self.gsub!(DeletePatternCache[del] ||= /[#{_regex_quote(del)}]+/, '')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def delete(del)</div><div class='del'>-    (str = self.dup).delete!(del) or str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def squeeze!(del=nil)</div><div class='del'>-    return nil if del == ""</div><div class='del'>-    pattern =</div><div class='del'>-      if del</div><div class='del'>-	SqueezePatternCache[del] ||= /([#{_regex_quote(del)}])\1+/</div><div class='del'>-      else</div><div class='del'>-	/(.|\n)\1+/</div><div class='del'>-      end</div><div class='del'>-    self.gsub!(pattern, '\1')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def squeeze(del=nil)</div><div class='del'>-    (str = self.dup).squeeze!(del) or str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tr_s!(from, to)</div><div class='del'>-    return self.delete!(from) if to.length == 0</div><div class='del'>-</div><div class='del'>-    pattern = SqueezePatternCache[from] ||= /([#{_regex_quote(from)}])\1*/</div><div class='del'>-    if from[0] == ?^</div><div class='del'>-      last = /.$/.match(to)[0]</div><div class='del'>-      self.gsub!(pattern, last)</div><div class='del'>-    else</div><div class='del'>-      h = HashCache[from + "1-0" + to] ||= expand_ch_hash(from, to)</div><div class='del'>-      self.gsub!(pattern) do h[$1] end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def tr_s(from, to)</div><div class='del'>-    (str = self.dup).tr_s!(from,to) or str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def chop!</div><div class='del'>-    self.gsub!(/(?:.|\r?\n)\z/, '')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def chop</div><div class='del'>-    (str = self.dup).chop! or str</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def jlength</div><div class='del'>-    self.gsub(/[^\Wa-zA-Z_\d]/, ' ').length</div><div class='del'>-  end</div><div class='del'>-  alias jsize jlength</div><div class='del'>-</div><div class='del'>-  def jcount(str)</div><div class='del'>-    self.delete("^#{str}").jlength</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def each_char</div><div class='del'>-    if block_given?</div><div class='del'>-      scan(/./m) do |x|</div><div class='del'>-        yield x</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      scan(/./m)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-$VERBOSE = $vsave</div><div class='head'>diff --git a/lib/logger.rb b/lib/logger.rb<br/>deleted file mode 100644<br/>index 9030fa1d0d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/logger.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/logger.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,703 +0,0 @@</div><div class='del'>-# logger.rb - simple logging utility</div><div class='del'>-# Copyright (C) 2000-2003, 2005  NAKAMURA, Hiroshi &lt;nakahiro@sarion.co.jp&gt;.</div><div class='del'>-</div><div class='del'>-require 'monitor'</div><div class='del'>-</div><div class='del'>-# Simple logging utility.</div><div class='del'>-#</div><div class='del'>-# Author:: NAKAMURA, Hiroshi  &lt;nakahiro@sarion.co.jp&gt;</div><div class='del'>-# Documentation:: NAKAMURA, Hiroshi and Gavin Sinclair</div><div class='del'>-# License::</div><div class='del'>-#   You can redistribute it and/or modify it under the same terms of Ruby's</div><div class='del'>-#   license; either the dual license version in 2003, or any later version.</div><div class='del'>-# Revision:: $Id$</div><div class='del'>-#</div><div class='del'>-# == Description</div><div class='del'>-#</div><div class='del'>-# The Logger class provides a simple but sophisticated logging utility that</div><div class='del'>-# anyone can use because it's included in the Ruby 1.8.x standard library.</div><div class='del'>-#</div><div class='del'>-# The HOWTOs below give a code-based overview of Logger's usage, but the basic</div><div class='del'>-# concept is as follows.  You create a Logger object (output to a file or</div><div class='del'>-# elsewhere), and use it to log messages.  The messages will have varying</div><div class='del'>-# levels (+info+, +error+, etc), reflecting their varying importance.  The</div><div class='del'>-# levels, and their meanings, are:</div><div class='del'>-#</div><div class='del'>-# +FATAL+:: an unhandleable error that results in a program crash</div><div class='del'>-# +ERROR+:: a handleable error condition</div><div class='del'>-# +WARN+::  a warning</div><div class='del'>-# +INFO+::  generic (useful) information about system operation</div><div class='del'>-# +DEBUG+:: low-level information for developers</div><div class='del'>-#</div><div class='del'>-# So each message has a level, and the Logger itself has a level, which acts</div><div class='del'>-# as a filter, so you can control the amount of information emitted from the</div><div class='del'>-# logger without having to remove actual messages.</div><div class='del'>-#</div><div class='del'>-# For instance, in a production system, you may have your logger(s) set to</div><div class='del'>-# +INFO+ (or +WARN+ if you don't want the log files growing large with</div><div class='del'>-# repetitive information).  When you are developing it, though, you probably</div><div class='del'>-# want to know about the program's internal state, and would set them to</div><div class='del'>-# +DEBUG+.</div><div class='del'>-#</div><div class='del'>-# === Example</div><div class='del'>-#</div><div class='del'>-# A simple example demonstrates the above explanation:</div><div class='del'>-#</div><div class='del'>-#   log = Logger.new(STDOUT)</div><div class='del'>-#   log.level = Logger::WARN</div><div class='del'>-#</div><div class='del'>-#   log.debug("Created logger")</div><div class='del'>-#   log.info("Program started")</div><div class='del'>-#   log.warn("Nothing to do!")</div><div class='del'>-#</div><div class='del'>-#   begin</div><div class='del'>-#     File.each_line(path) do |line|</div><div class='del'>-#       unless line =~ /^(\w+) = (.*)$/</div><div class='del'>-#         log.error("Line in wrong format: #{line}")</div><div class='del'>-#       end</div><div class='del'>-#     end</div><div class='del'>-#   rescue =&gt; err</div><div class='del'>-#     log.fatal("Caught exception; exiting")</div><div class='del'>-#     log.fatal(err)</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-# Because the Logger's level is set to +WARN+, only the warning, error, and</div><div class='del'>-# fatal messages are recorded.  The debug and info messages are silently</div><div class='del'>-# discarded.</div><div class='del'>-#</div><div class='del'>-# === Features</div><div class='del'>-#</div><div class='del'>-# There are several interesting features that Logger provides, like</div><div class='del'>-# auto-rolling of log files, setting the format of log messages, and</div><div class='del'>-# specifying a program name in conjunction with the message.  The next section</div><div class='del'>-# shows you how to achieve these things.</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# == HOWTOs</div><div class='del'>-#</div><div class='del'>-# === How to create a logger</div><div class='del'>-#</div><div class='del'>-# The options below give you various choices, in more or less increasing</div><div class='del'>-# complexity.</div><div class='del'>-#</div><div class='del'>-# 1. Create a logger which logs messages to STDERR/STDOUT.</div><div class='del'>-#</div><div class='del'>-#      logger = Logger.new(STDERR)</div><div class='del'>-#      logger = Logger.new(STDOUT)</div><div class='del'>-#</div><div class='del'>-# 2. Create a logger for the file which has the specified name.</div><div class='del'>-#</div><div class='del'>-#      logger = Logger.new('logfile.log')</div><div class='del'>-#</div><div class='del'>-# 3. Create a logger for the specified file.</div><div class='del'>-#</div><div class='del'>-#      file = File.open('foo.log', File::WRONLY | File::APPEND)</div><div class='del'>-#      # To create new (and to remove old) logfile, add File::CREAT like;</div><div class='del'>-#      #   file = open('foo.log', File::WRONLY | File::APPEND | File::CREAT)</div><div class='del'>-#      logger = Logger.new(file)</div><div class='del'>-#</div><div class='del'>-# 4. Create a logger which ages logfile once it reaches a certain size.  Leave</div><div class='del'>-#    10 "old log files" and each file is about 1,024,000 bytes.</div><div class='del'>-#</div><div class='del'>-#      logger = Logger.new('foo.log', 10, 1024000)</div><div class='del'>-#</div><div class='del'>-# 5. Create a logger which ages logfile daily/weekly/monthly.</div><div class='del'>-#</div><div class='del'>-#      logger = Logger.new('foo.log', 'daily')</div><div class='del'>-#      logger = Logger.new('foo.log', 'weekly')</div><div class='del'>-#      logger = Logger.new('foo.log', 'monthly')</div><div class='del'>-#</div><div class='del'>-# === How to log a message</div><div class='del'>-#</div><div class='del'>-# Notice the different methods (+fatal+, +error+, +info+) being used to log</div><div class='del'>-# messages of various levels.  Other methods in this family are +warn+ and</div><div class='del'>-# +debug+.  +add+ is used below to log a message of an arbitrary (perhaps</div><div class='del'>-# dynamic) level.</div><div class='del'>-#</div><div class='del'>-# 1. Message in block.</div><div class='del'>-#</div><div class='del'>-#      logger.fatal { "Argument 'foo' not given." }</div><div class='del'>-#</div><div class='del'>-# 2. Message as a string.</div><div class='del'>-#</div><div class='del'>-#      logger.error "Argument #{ @foo } mismatch."</div><div class='del'>-#</div><div class='del'>-# 3. With progname.</div><div class='del'>-#</div><div class='del'>-#      logger.info('initialize') { "Initializing..." }</div><div class='del'>-#</div><div class='del'>-# 4. With severity.</div><div class='del'>-#</div><div class='del'>-#      logger.add(Logger::FATAL) { 'Fatal error!' }</div><div class='del'>-#</div><div class='del'>-# === How to close a logger</div><div class='del'>-#</div><div class='del'>-#      logger.close</div><div class='del'>-#</div><div class='del'>-# === Setting severity threshold</div><div class='del'>-#</div><div class='del'>-# 1. Original interface.</div><div class='del'>-#</div><div class='del'>-#      logger.sev_threshold = Logger::WARN</div><div class='del'>-#</div><div class='del'>-# 2. Log4r (somewhat) compatible interface.</div><div class='del'>-#</div><div class='del'>-#      logger.level = Logger::INFO</div><div class='del'>-#      </div><div class='del'>-#      DEBUG &lt; INFO &lt; WARN &lt; ERROR &lt; FATAL &lt; UNKNOWN</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# == Format</div><div class='del'>-#</div><div class='del'>-# Log messages are rendered in the output stream in a certain format.  The</div><div class='del'>-# default format and a sample are shown below:</div><div class='del'>-#</div><div class='del'>-# Log format:</div><div class='del'>-#   SeverityID, [Date Time mSec #pid] SeverityLabel -- ProgName: message</div><div class='del'>-#</div><div class='del'>-# Log sample:</div><div class='del'>-#   I, [Wed Mar 03 02:34:24 JST 1999 895701 #19074]  INFO -- Main: info.</div><div class='del'>-#</div><div class='del'>-# You may change the date and time format in this manner:</div><div class='del'>-#</div><div class='del'>-#   logger.datetime_format = "%Y-%m-%d %H:%M:%S"</div><div class='del'>-#         # e.g. "2004-01-03 00:54:26"</div><div class='del'>-#</div><div class='del'>-# There is currently no supported way to change the overall format, but you may</div><div class='del'>-# have some luck hacking the Format constant.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Logger</div><div class='del'>-  VERSION = "1.2.6"</div><div class='del'>-  /: (\S+),v (\S+)/ =~ %q$Id$</div><div class='del'>-  ProgName = "#{$1}/#{$2}"</div><div class='del'>-</div><div class='del'>-  class Error &lt; RuntimeError; end</div><div class='del'>-  class ShiftingError &lt; Error; end</div><div class='del'>-</div><div class='del'>-  # Logging severity.</div><div class='del'>-  module Severity</div><div class='del'>-    DEBUG = 0</div><div class='del'>-    INFO = 1</div><div class='del'>-    WARN = 2</div><div class='del'>-    ERROR = 3</div><div class='del'>-    FATAL = 4</div><div class='del'>-    UNKNOWN = 5</div><div class='del'>-  end</div><div class='del'>-  include Severity</div><div class='del'>-</div><div class='del'>-  # Logging severity threshold (e.g. &lt;tt&gt;Logger::INFO&lt;/tt&gt;).</div><div class='del'>-  attr_accessor :level</div><div class='del'>-</div><div class='del'>-  # Logging program name.</div><div class='del'>-  attr_accessor :progname</div><div class='del'>-</div><div class='del'>-  # Logging date-time format (string passed to +strftime+).</div><div class='del'>-  def datetime_format=(datetime_format)</div><div class='del'>-    @default_formatter.datetime_format = datetime_format</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def datetime_format</div><div class='del'>-    @default_formatter.datetime_format</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Logging formatter.  formatter#call is invoked with 4 arguments; severity,</div><div class='del'>-  # time, progname and msg for each log.  Bear in mind that time is a Time and</div><div class='del'>-  # msg is an Object that user passed and it could not be a String.  It is</div><div class='del'>-  # expected to return a logdev#write-able Object.  Default formatter is used</div><div class='del'>-  # when no formatter is set.</div><div class='del'>-  attr_accessor :formatter</div><div class='del'>-</div><div class='del'>-  alias sev_threshold level</div><div class='del'>-  alias sev_threshold= level=</div><div class='del'>-</div><div class='del'>-  # Returns +true+ iff the current severity level allows for the printing of</div><div class='del'>-  # +DEBUG+ messages.</div><div class='del'>-  def debug?; @level &lt;= DEBUG; end</div><div class='del'>-</div><div class='del'>-  # Returns +true+ iff the current severity level allows for the printing of</div><div class='del'>-  # +INFO+ messages.</div><div class='del'>-  def info?; @level &lt;= INFO; end</div><div class='del'>-</div><div class='del'>-  # Returns +true+ iff the current severity level allows for the printing of</div><div class='del'>-  # +WARN+ messages.</div><div class='del'>-  def warn?; @level &lt;= WARN; end</div><div class='del'>-</div><div class='del'>-  # Returns +true+ iff the current severity level allows for the printing of</div><div class='del'>-  # +ERROR+ messages.</div><div class='del'>-  def error?; @level &lt;= ERROR; end</div><div class='del'>-</div><div class='del'>-  # Returns +true+ iff the current severity level allows for the printing of</div><div class='del'>-  # +FATAL+ messages.</div><div class='del'>-  def fatal?; @level &lt;= FATAL; end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # === Synopsis</div><div class='del'>-  #</div><div class='del'>-  #   Logger.new(name, shift_age = 7, shift_size = 1048576)</div><div class='del'>-  #   Logger.new(name, shift_age = 'weekly')</div><div class='del'>-  #</div><div class='del'>-  # === Args</div><div class='del'>-  #</div><div class='del'>-  # +logdev+::</div><div class='del'>-  #   The log device.  This is a filename (String) or IO object (typically</div><div class='del'>-  #   +STDOUT+, +STDERR+, or an open file).</div><div class='del'>-  # +shift_age+::</div><div class='del'>-  #   Number of old log files to keep, *or* frequency of rotation (+daily+,</div><div class='del'>-  #   +weekly+ or +monthly+).</div><div class='del'>-  # +shift_size+::</div><div class='del'>-  #   Maximum logfile size (only applies when +shift_age+ is a number).</div><div class='del'>-  #</div><div class='del'>-  # === Description</div><div class='del'>-  #</div><div class='del'>-  # Create an instance.</div><div class='del'>-  #</div><div class='del'>-  def initialize(logdev, shift_age = 0, shift_size = 1048576)</div><div class='del'>-    @progname = nil</div><div class='del'>-    @level = DEBUG</div><div class='del'>-    @default_formatter = Formatter.new</div><div class='del'>-    @formatter = nil</div><div class='del'>-    @logdev = nil</div><div class='del'>-    if logdev</div><div class='del'>-      @logdev = LogDevice.new(logdev, :shift_age =&gt; shift_age,</div><div class='del'>-        :shift_size =&gt; shift_size)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # === Synopsis</div><div class='del'>-  #</div><div class='del'>-  #   Logger#add(severity, message = nil, progname = nil) { ... }</div><div class='del'>-  #</div><div class='del'>-  # === Args</div><div class='del'>-  #</div><div class='del'>-  # +severity+::</div><div class='del'>-  #   Severity.  Constants are defined in Logger namespace: +DEBUG+, +INFO+,</div><div class='del'>-  #   +WARN+, +ERROR+, +FATAL+, or +UNKNOWN+.</div><div class='del'>-  # +message+::</div><div class='del'>-  #   The log message.  A String or Exception.</div><div class='del'>-  # +progname+::</div><div class='del'>-  #   Program name string.  Can be omitted.  Treated as a message if no +message+ and</div><div class='del'>-  #   +block+ are given.</div><div class='del'>-  # +block+::</div><div class='del'>-  #   Can be omitted.  Called to get a message string if +message+ is nil.</div><div class='del'>-  #</div><div class='del'>-  # === Return</div><div class='del'>-  #</div><div class='del'>-  # +true+ if successful, +false+ otherwise.</div><div class='del'>-  #</div><div class='del'>-  # When the given severity is not high enough (for this particular logger), log</div><div class='del'>-  # no message, and return +true+.</div><div class='del'>-  #</div><div class='del'>-  # === Description</div><div class='del'>-  #</div><div class='del'>-  # Log a message if the given severity is high enough.  This is the generic</div><div class='del'>-  # logging method.  Users will be more inclined to use #debug, #info, #warn,</div><div class='del'>-  # #error, and #fatal.</div><div class='del'>-  #</div><div class='del'>-  # &lt;b&gt;Message format&lt;/b&gt;: +message+ can be any object, but it has to be</div><div class='del'>-  # converted to a String in order to log it.  Generally, +inspect+ is used</div><div class='del'>-  # if the given object is not a String.</div><div class='del'>-  # A special case is an +Exception+ object, which will be printed in detail,</div><div class='del'>-  # including message, class, and backtrace.  See #msg2str for the</div><div class='del'>-  # implementation if required.</div><div class='del'>-  #</div><div class='del'>-  # === Bugs</div><div class='del'>-  #</div><div class='del'>-  # * Logfile is not locked.</div><div class='del'>-  # * Append open does not need to lock file.</div><div class='del'>-  # * But on the OS which supports multi I/O, records possibly be mixed.</div><div class='del'>-  #</div><div class='del'>-  def add(severity, message = nil, progname = nil, &amp;block)</div><div class='del'>-    severity ||= UNKNOWN</div><div class='del'>-    if @logdev.nil? or severity &lt; @level</div><div class='del'>-      return true</div><div class='del'>-    end</div><div class='del'>-    progname ||= @progname</div><div class='del'>-    if message.nil?</div><div class='del'>-      if block_given?</div><div class='del'>-	message = yield</div><div class='del'>-      else</div><div class='del'>-	message = progname</div><div class='del'>-	progname = @progname</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @logdev.write(</div><div class='del'>-      format_message(format_severity(severity), Time.now, progname, message))</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-  alias log add</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Dump given message to the log device without any formatting.  If no log</div><div class='del'>-  # device exists, return +nil+.</div><div class='del'>-  #</div><div class='del'>-  def &lt;&lt;(msg)</div><div class='del'>-    unless @logdev.nil?</div><div class='del'>-      @logdev.write(msg)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Log a +DEBUG+ message.</div><div class='del'>-  #</div><div class='del'>-  # See #info for more information.</div><div class='del'>-  #</div><div class='del'>-  def debug(progname = nil, &amp;block)</div><div class='del'>-    add(DEBUG, nil, progname, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Log an +INFO+ message.</div><div class='del'>-  #</div><div class='del'>-  # The message can come either from the +progname+ argument or the +block+.  If</div><div class='del'>-  # both are provided, then the +block+ is used as the message, and +progname+</div><div class='del'>-  # is used as the program name.</div><div class='del'>-  #</div><div class='del'>-  # === Examples</div><div class='del'>-  #</div><div class='del'>-  #   logger.info("MainApp") { "Received connection from #{ip}" }</div><div class='del'>-  #   # ...</div><div class='del'>-  #   logger.info "Waiting for input from user"</div><div class='del'>-  #   # ...</div><div class='del'>-  #   logger.info { "User typed #{input}" }</div><div class='del'>-  #</div><div class='del'>-  # You'll probably stick to the second form above, unless you want to provide a</div><div class='del'>-  # program name (which you can do with &lt;tt&gt;Logger#progname=&lt;/tt&gt; as well).</div><div class='del'>-  #</div><div class='del'>-  # === Return</div><div class='del'>-  #</div><div class='del'>-  # See #add.</div><div class='del'>-  #</div><div class='del'>-  def info(progname = nil, &amp;block)</div><div class='del'>-    add(INFO, nil, progname, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Log a +WARN+ message.</div><div class='del'>-  #</div><div class='del'>-  # See #info for more information.</div><div class='del'>-  #</div><div class='del'>-  def warn(progname = nil, &amp;block)</div><div class='del'>-    add(WARN, nil, progname, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Log an +ERROR+ message.</div><div class='del'>-  #</div><div class='del'>-  # See #info for more information.</div><div class='del'>-  #</div><div class='del'>-  def error(progname = nil, &amp;block)</div><div class='del'>-    add(ERROR, nil, progname, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Log a +FATAL+ message.</div><div class='del'>-  #</div><div class='del'>-  # See #info for more information.</div><div class='del'>-  #</div><div class='del'>-  def fatal(progname = nil, &amp;block)</div><div class='del'>-    add(FATAL, nil, progname, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Log an +UNKNOWN+ message.  This will be printed no matter what the logger</div><div class='del'>-  # level.</div><div class='del'>-  #</div><div class='del'>-  # See #info for more information.</div><div class='del'>-  #</div><div class='del'>-  def unknown(progname = nil, &amp;block)</div><div class='del'>-    add(UNKNOWN, nil, progname, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Close the logging device.</div><div class='del'>-  #</div><div class='del'>-  def close</div><div class='del'>-    @logdev.close if @logdev</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-private</div><div class='del'>-</div><div class='del'>-  # Severity label for logging. (max 5 char)</div><div class='del'>-  SEV_LABEL = %w(DEBUG INFO WARN ERROR FATAL ANY)</div><div class='del'>-</div><div class='del'>-  def format_severity(severity)</div><div class='del'>-    SEV_LABEL[severity] || 'ANY'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def format_message(severity, datetime, progname, msg)</div><div class='del'>-    (@formatter || @default_formatter).call(severity, datetime, progname, msg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class Formatter</div><div class='del'>-    Format = "%s, [%s#%d] %5s -- %s: %s\n"</div><div class='del'>-</div><div class='del'>-    attr_accessor :datetime_format</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      @datetime_format = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def call(severity, time, progname, msg)</div><div class='del'>-      Format % [severity[0..0], format_datetime(time), $$, severity, progname,</div><div class='del'>-        msg2str(msg)]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def format_datetime(time)</div><div class='del'>-      if @datetime_format.nil?</div><div class='del'>-        time.strftime("%Y-%m-%dT%H:%M:%S.") &lt;&lt; "%06d " % time.usec</div><div class='del'>-      else</div><div class='del'>-        time.strftime(@datetime_format)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def msg2str(msg)</div><div class='del'>-      case msg</div><div class='del'>-      when ::String</div><div class='del'>-        msg</div><div class='del'>-      when ::Exception</div><div class='del'>-        "#{ msg.message } (#{ msg.class })\n" &lt;&lt;</div><div class='del'>-          (msg.backtrace || []).join("\n")</div><div class='del'>-      else</div><div class='del'>-        msg.inspect</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 LogDevice</div><div class='del'>-    attr_reader :dev</div><div class='del'>-    attr_reader :filename</div><div class='del'>-</div><div class='del'>-    class LogDeviceMutex</div><div class='del'>-      include MonitorMixin</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(log = nil, opt = {})</div><div class='del'>-      @dev = @filename = @shift_age = @shift_size = nil</div><div class='del'>-      @mutex = LogDeviceMutex.new</div><div class='del'>-      if log.respond_to?(:write) and log.respond_to?(:close)</div><div class='del'>-	@dev = log</div><div class='del'>-      else</div><div class='del'>-	@dev = open_logfile(log)</div><div class='del'>-	@dev.sync = true</div><div class='del'>-	@filename = log</div><div class='del'>-	@shift_age = opt[:shift_age] || 7</div><div class='del'>-	@shift_size = opt[:shift_size] || 1048576</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write(message)</div><div class='del'>-      @mutex.synchronize do</div><div class='del'>-        if @shift_age and @dev.respond_to?(:stat)</div><div class='del'>-          begin</div><div class='del'>-            check_shift_log</div><div class='del'>-          rescue</div><div class='del'>-            raise Logger::ShiftingError.new("Shifting failed. #{$!}")</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        @dev.write(message)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def close</div><div class='del'>-      @mutex.synchronize do</div><div class='del'>-        @dev.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def open_logfile(filename)</div><div class='del'>-      if (FileTest.exist?(filename))</div><div class='del'>-     	open(filename, (File::WRONLY | File::APPEND))</div><div class='del'>-      else</div><div class='del'>-       	create_logfile(filename)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def create_logfile(filename)</div><div class='del'>-      logdev = open(filename, (File::WRONLY | File::APPEND | File::CREAT))</div><div class='del'>-      logdev.sync = true</div><div class='del'>-      add_log_header(logdev)</div><div class='del'>-      logdev</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_log_header(file)</div><div class='del'>-      file.write(</div><div class='del'>-     	"# Logfile created on %s by %s\n" % [Time.now.to_s, Logger::ProgName]</div><div class='del'>-    )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    SiD = 24 * 60 * 60</div><div class='del'>-</div><div class='del'>-    def check_shift_log</div><div class='del'>-      if @shift_age.is_a?(Integer)</div><div class='del'>-        # Note: always returns false if '0'.</div><div class='del'>-        if @filename &amp;&amp; (@shift_age &gt; 0) &amp;&amp; (@dev.stat.size &gt; @shift_size)</div><div class='del'>-          shift_log_age</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        now = Time.now</div><div class='del'>-        if @dev.stat.mtime &lt;= previous_period_end(now)</div><div class='del'>-          shift_log_period(now)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def shift_log_age</div><div class='del'>-      (@shift_age-3).downto(0) do |i|</div><div class='del'>-        if FileTest.exist?("#{@filename}.#{i}")</div><div class='del'>-          File.rename("#{@filename}.#{i}", "#{@filename}.#{i+1}")</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      @dev.close</div><div class='del'>-      File.rename("#{@filename}", "#{@filename}.0")</div><div class='del'>-      @dev = create_logfile(@filename)</div><div class='del'>-      return true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def shift_log_period(now)</div><div class='del'>-      postfix = previous_period_end(now).strftime("%Y%m%d")	# YYYYMMDD</div><div class='del'>-      age_file = "#{@filename}.#{postfix}"</div><div class='del'>-      if FileTest.exist?(age_file)</div><div class='del'>-        raise RuntimeError.new("'#{ age_file }' already exists.")</div><div class='del'>-      end</div><div class='del'>-      @dev.close</div><div class='del'>-      File.rename("#{@filename}", age_file)</div><div class='del'>-      @dev = create_logfile(@filename)</div><div class='del'>-      return true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def previous_period_end(now)</div><div class='del'>-      case @shift_age</div><div class='del'>-      when /^daily$/</div><div class='del'>-        eod(now - 1 * SiD)</div><div class='del'>-      when /^weekly$/</div><div class='del'>-        eod(now - ((now.wday + 1) * SiD))</div><div class='del'>-      when /^monthly$/</div><div class='del'>-        eod(now - now.mday * SiD)</div><div class='del'>-      else</div><div class='del'>-        now</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def eod(t)</div><div class='del'>-      Time.mktime(t.year, t.month, t.mday, 23, 59, 59)</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'>-  # == Description</div><div class='del'>-  #</div><div class='del'>-  # Application -- Add logging support to your application.</div><div class='del'>-  #</div><div class='del'>-  # == Usage</div><div class='del'>-  #</div><div class='del'>-  # 1. Define your application class as a sub-class of this class.</div><div class='del'>-  # 2. Override 'run' method in your class to do many things.</div><div class='del'>-  # 3. Instantiate it and invoke 'start'.</div><div class='del'>-  #</div><div class='del'>-  # == Example</div><div class='del'>-  #</div><div class='del'>-  #   class FooApp &lt; Application</div><div class='del'>-  #     def initialize(foo_app, application_specific, arguments)</div><div class='del'>-  #       super('FooApp') # Name of the application.</div><div class='del'>-  #     end</div><div class='del'>-  #</div><div class='del'>-  #     def run</div><div class='del'>-  #       ...</div><div class='del'>-  #       log(WARN, 'warning', 'my_method1')</div><div class='del'>-  #       ...</div><div class='del'>-  #       @log.error('my_method2') { 'Error!' }</div><div class='del'>-  #       ...</div><div class='del'>-  #     end</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  #   status = FooApp.new(....).start</div><div class='del'>-  #</div><div class='del'>-  class Application</div><div class='del'>-    include Logger::Severity</div><div class='del'>-</div><div class='del'>-    attr_reader :appname</div><div class='del'>-    attr_reader :logdev</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # == Synopsis</div><div class='del'>-    #</div><div class='del'>-    #   Application.new(appname = '')</div><div class='del'>-    #</div><div class='del'>-    # == Args</div><div class='del'>-    #</div><div class='del'>-    # +appname+:: Name of the application.</div><div class='del'>-    #</div><div class='del'>-    # == Description</div><div class='del'>-    #</div><div class='del'>-    # Create an instance.  Log device is +STDERR+ by default.  This can be</div><div class='del'>-    # changed with #set_log.</div><div class='del'>-    #</div><div class='del'>-    def initialize(appname = nil)</div><div class='del'>-      @appname = appname</div><div class='del'>-      @log = Logger.new(STDERR)</div><div class='del'>-      @log.progname = @appname</div><div class='del'>-      @level = @log.level</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Start the application.  Return the status code.</div><div class='del'>-    #</div><div class='del'>-    def start</div><div class='del'>-      status = -1</div><div class='del'>-      begin</div><div class='del'>-	log(INFO, "Start of #{ @appname }.")</div><div class='del'>-	status = run</div><div class='del'>-      rescue</div><div class='del'>-	log(FATAL, "Detected an exception. Stopping ... #{$!} (#{$!.class})\n" &lt;&lt; $@.join("\n"))</div><div class='del'>-      ensure</div><div class='del'>-	log(INFO, "End of #{ @appname }. (status: #{ status.to_s })")</div><div class='del'>-      end</div><div class='del'>-      status</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Sets the log device for this application.  See the class Logger for an</div><div class='del'>-    # explanation of the arguments.</div><div class='del'>-    #</div><div class='del'>-    def set_log(logdev, shift_age = 0, shift_size = 1024000)</div><div class='del'>-      @log = Logger.new(logdev, shift_age, shift_size)</div><div class='del'>-      @log.progname = @appname</div><div class='del'>-      @log.level = @level</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def log=(logdev)</div><div class='del'>-      set_log(logdev)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Set the logging threshold, just like &lt;tt&gt;Logger#level=&lt;/tt&gt;.</div><div class='del'>-    #</div><div class='del'>-    def level=(level)</div><div class='del'>-      @level = level</div><div class='del'>-      @log.level = @level</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # See Logger#add.  This application's +appname+ is used.</div><div class='del'>-    #</div><div class='del'>-    def log(severity, message = nil, &amp;block)</div><div class='del'>-      @log.add(severity, message, @appname, &amp;block) if @log</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-    def run</div><div class='del'>-      raise RuntimeError.new('Method run must be defined in the derived class.')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/mailread.rb b/lib/mailread.rb<br/>deleted file mode 100644<br/>index 08b33c92a4..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/mailread.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/mailread.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-# The Mail class represents an internet mail message (as per RFC822, RFC2822)</div><div class='del'>-# with headers and a body. </div><div class='del'>-class Mail</div><div class='del'>-</div><div class='del'>-  # Create a new Mail where +f+ is either a stream which responds to gets(),</div><div class='del'>-  # or a path to a file.  If +f+ is a path it will be opened.</div><div class='del'>-  #</div><div class='del'>-  # The whole message is read so it can be made available through the #header,</div><div class='del'>-  # #[] and #body methods.</div><div class='del'>-  #</div><div class='del'>-  # The "From " line is ignored if the mail is in mbox format.</div><div class='del'>-  def initialize(f)</div><div class='del'>-    unless defined? f.gets</div><div class='del'>-      f = open(f, "r")</div><div class='del'>-      opened = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @header = {}</div><div class='del'>-    @body = []</div><div class='del'>-    begin</div><div class='del'>-      while line = f.gets()</div><div class='del'>-	line.chop!</div><div class='del'>-	next if /^From /=~line	# skip From-line</div><div class='del'>-	break if /^$/=~line	# end of header</div><div class='del'>-</div><div class='del'>-	if /^(\S+?):\s*(.*)/=~line</div><div class='del'>-	  (attr = $1).capitalize!</div><div class='del'>-	  @header[attr] = $2</div><div class='del'>-	elsif attr</div><div class='del'>-	  line.sub!(/^\s*/, '')</div><div class='del'>-	  @header[attr] += "\n" + line</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-  </div><div class='del'>-      return unless line</div><div class='del'>-</div><div class='del'>-      while line = f.gets()</div><div class='del'>-	break if /^From /=~line</div><div class='del'>-	@body.push(line)</div><div class='del'>-      end</div><div class='del'>-    ensure</div><div class='del'>-      f.close if opened</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return the headers as a Hash.</div><div class='del'>-  def header</div><div class='del'>-    return @header</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return the message body as an Array of lines</div><div class='del'>-  def body</div><div class='del'>-    return @body</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return the header corresponding to +field+. </div><div class='del'>-  #</div><div class='del'>-  # Matching is case-insensitive.</div><div class='del'>-  def [](field)</div><div class='del'>-    @header[field.capitalize]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/mathn.rb b/lib/mathn.rb<br/>deleted file mode 100644<br/>index a5a121c6c6..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/mathn.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/mathn.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,308 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   mathn.rb - </div><div class='del'>-#   	$Release Version: 0.5 $</div><div class='del'>-#   	$Revision: 1.1.1.1.4.1 $</div><div class='del'>-#   	$Date: 1998/01/16 12:36:05 $</div><div class='del'>-#   	by Keiju ISHITSUKA(SHL Japan Inc.)</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'>-require "complex.rb"</div><div class='del'>-require "rational.rb"</div><div class='del'>-require "matrix.rb"</div><div class='del'>-</div><div class='del'>-class Integer</div><div class='del'>-</div><div class='del'>-  def gcd2(int)</div><div class='del'>-    a = self.abs</div><div class='del'>-    b = int.abs</div><div class='del'>-    a, b = b, a if a &lt; b</div><div class='del'>-    </div><div class='del'>-    pd_a = a.prime_division</div><div class='del'>-    pd_b = b.prime_division</div><div class='del'>-    </div><div class='del'>-    gcd = 1</div><div class='del'>-    for pair in pd_a</div><div class='del'>-      as = pd_b.assoc(pair[0])</div><div class='del'>-      if as</div><div class='del'>-	gcd *= as[0] ** [as[1], pair[1]].min</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    return gcd</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def Integer.from_prime_division(pd)</div><div class='del'>-    value = 1</div><div class='del'>-    for prime, index in pd</div><div class='del'>-      value *= prime**index</div><div class='del'>-    end</div><div class='del'>-    value</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def prime_division</div><div class='del'>-    raise ZeroDivisionError if self == 0</div><div class='del'>-    ps = Prime.new</div><div class='del'>-    value = self</div><div class='del'>-    pv = []</div><div class='del'>-    for prime in ps</div><div class='del'>-      count = 0</div><div class='del'>-      while (value1, mod = value.divmod(prime)</div><div class='del'>-	     mod) == 0</div><div class='del'>-	value = value1</div><div class='del'>-	count += 1</div><div class='del'>-      end</div><div class='del'>-      if count != 0</div><div class='del'>-	pv.push [prime, count]</div><div class='del'>-      end</div><div class='del'>-      break if prime * prime  &gt;= value</div><div class='del'>-    end</div><div class='del'>-    if value &gt; 1</div><div class='del'>-      pv.push [value, 1]</div><div class='del'>-    end</div><div class='del'>-    return pv</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-  </div><div class='del'>-class Prime</div><div class='del'>-  include Enumerable</div><div class='del'>-</div><div class='del'>-  def initialize</div><div class='del'>-    @seed = 1</div><div class='del'>-    @primes = []</div><div class='del'>-    @counts = []</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def succ</div><div class='del'>-    i = -1</div><div class='del'>-    size = @primes.size</div><div class='del'>-    while i &lt; size</div><div class='del'>-      if i == -1</div><div class='del'>-	@seed += 1</div><div class='del'>-	i += 1</div><div class='del'>-      else</div><div class='del'>-	while @seed &gt; @counts[i]</div><div class='del'>-	  @counts[i] += @primes[i]</div><div class='del'>-	end</div><div class='del'>-	if @seed != @counts[i]</div><div class='del'>-	  i += 1</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'>-    @primes.push @seed</div><div class='del'>-    @counts.push @seed + @seed</div><div class='del'>-    return @seed</div><div class='del'>-  end</div><div class='del'>-  alias next succ</div><div class='del'>-</div><div class='del'>-  def each</div><div class='del'>-    loop do</div><div class='del'>-      yield succ</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Fixnum</div><div class='del'>-  alias / quo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Bignum</div><div class='del'>-  alias / quo</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Rational</div><div class='del'>-  Unify = true</div><div class='del'>-</div><div class='del'>-  def inspect</div><div class='del'>-    format "%s/%s", numerator.inspect, denominator.inspect</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias power! **</div><div class='del'>-</div><div class='del'>-  def ** (other)</div><div class='del'>-    if other.kind_of?(Rational)</div><div class='del'>-      other2 = other</div><div class='del'>-      if self &lt; 0</div><div class='del'>-	return Complex.new!(self, 0) ** other</div><div class='del'>-      elsif other == 0</div><div class='del'>-	return Rational(1,1)</div><div class='del'>-      elsif self == 0</div><div class='del'>-	return Rational(0,1)</div><div class='del'>-      elsif self == 1</div><div class='del'>-	return Rational(1,1)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      npd = numerator.prime_division</div><div class='del'>-      dpd = denominator.prime_division</div><div class='del'>-      if other &lt; 0</div><div class='del'>-	other = -other</div><div class='del'>-	npd, dpd = dpd, npd</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      for elm in npd</div><div class='del'>-	elm[1] = elm[1] * other</div><div class='del'>-	if !elm[1].kind_of?(Integer) and elm[1].denominator != 1</div><div class='del'>-         return Float(self) ** other2</div><div class='del'>-	end</div><div class='del'>-	elm[1] = elm[1].to_i</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      for elm in dpd</div><div class='del'>-	elm[1] = elm[1] * other</div><div class='del'>-	if !elm[1].kind_of?(Integer) and elm[1].denominator != 1</div><div class='del'>-         return Float(self) ** other2</div><div class='del'>-	end</div><div class='del'>-	elm[1] = elm[1].to_i</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      num = Integer.from_prime_division(npd)</div><div class='del'>-      den = Integer.from_prime_division(dpd)</div><div class='del'>-      </div><div class='del'>-      Rational(num,den)</div><div class='del'>-      </div><div class='del'>-    elsif other.kind_of?(Integer)</div><div class='del'>-      if other &gt; 0</div><div class='del'>-	num = numerator ** other</div><div class='del'>-	den = denominator ** other</div><div class='del'>-      elsif other &lt; 0</div><div class='del'>-	num = denominator ** -other</div><div class='del'>-	den = numerator ** -other</div><div class='del'>-      elsif other == 0</div><div class='del'>-	num = 1</div><div class='del'>-	den = 1</div><div class='del'>-      end</div><div class='del'>-      Rational.new!(num, den)</div><div class='del'>-    elsif other.kind_of?(Float)</div><div class='del'>-      Float(self) ** other</div><div class='del'>-    else</div><div class='del'>-      x , y = other.coerce(self)</div><div class='del'>-      x ** y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def power2(other)</div><div class='del'>-    if other.kind_of?(Rational)</div><div class='del'>-      if self &lt; 0</div><div class='del'>-	return Complex(self, 0) ** other</div><div class='del'>-      elsif other == 0</div><div class='del'>-	return Rational(1,1)</div><div class='del'>-      elsif self == 0</div><div class='del'>-	return Rational(0,1)</div><div class='del'>-      elsif self == 1</div><div class='del'>-	return Rational(1,1)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      dem = nil</div><div class='del'>-      x = self.denominator.to_f.to_i</div><div class='del'>-      neard = self.denominator.to_f ** (1.0/other.denominator.to_f)</div><div class='del'>-      loop do</div><div class='del'>-	if (neard**other.denominator == self.denominator)</div><div class='del'>-	  dem = neaed</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      nearn = self.numerator.to_f ** (1.0/other.denominator.to_f)</div><div class='del'>-      Rational(num,den)</div><div class='del'>-      </div><div class='del'>-    elsif other.kind_of?(Integer)</div><div class='del'>-      if other &gt; 0</div><div class='del'>-	num = numerator ** other</div><div class='del'>-	den = denominator ** other</div><div class='del'>-      elsif other &lt; 0</div><div class='del'>-	num = denominator ** -other</div><div class='del'>-	den = numerator ** -other</div><div class='del'>-      elsif other == 0</div><div class='del'>-	num = 1</div><div class='del'>-	den = 1</div><div class='del'>-      end</div><div class='del'>-      Rational.new!(num, den)</div><div class='del'>-    elsif other.kind_of?(Float)</div><div class='del'>-      Float(self) ** other</div><div class='del'>-    else</div><div class='del'>-      x , y = other.coerce(self)</div><div class='del'>-      x ** y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Math</div><div class='del'>-  def sqrt(a)</div><div class='del'>-    if a.kind_of?(Complex)</div><div class='del'>-      abs = sqrt(a.real*a.real + a.image*a.image)</div><div class='del'>-#      if not abs.kind_of?(Rational)</div><div class='del'>-#	return a**Rational(1,2)</div><div class='del'>-#      end</div><div class='del'>-      x = sqrt((a.real + abs)/Rational(2))</div><div class='del'>-      y = sqrt((-a.real + abs)/Rational(2))</div><div class='del'>-#      if !(x.kind_of?(Rational) and y.kind_of?(Rational))</div><div class='del'>-#	return a**Rational(1,2)</div><div class='del'>-#      end</div><div class='del'>-      if a.image &gt;= 0 </div><div class='del'>-	Complex(x, y)</div><div class='del'>-      else</div><div class='del'>-	Complex(x, -y)</div><div class='del'>-      end</div><div class='del'>-    elsif a &gt;= 0</div><div class='del'>-      rsqrt(a)</div><div class='del'>-    else</div><div class='del'>-      Complex(0,rsqrt(-a))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def rsqrt(a)</div><div class='del'>-    if a.kind_of?(Float)</div><div class='del'>-      sqrt!(a)</div><div class='del'>-    elsif a.kind_of?(Rational)</div><div class='del'>-      rsqrt(a.numerator)/rsqrt(a.denominator)</div><div class='del'>-    else</div><div class='del'>-      src = a</div><div class='del'>-      max = 2 ** 32</div><div class='del'>-      byte_a = [src &amp; 0xffffffff]</div><div class='del'>-      # ruby's bug</div><div class='del'>-      while (src &gt;= max) and (src &gt;&gt;= 32)</div><div class='del'>-	byte_a.unshift src &amp; 0xffffffff</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      answer = 0</div><div class='del'>-      main = 0</div><div class='del'>-      side = 0</div><div class='del'>-      for elm in byte_a</div><div class='del'>-	main = (main &lt;&lt; 32) + elm</div><div class='del'>-	side &lt;&lt;= 16</div><div class='del'>-	if answer != 0</div><div class='del'>-	  if main * 4  &lt; side * side</div><div class='del'>-	    applo = main.div(side)</div><div class='del'>-	  else </div><div class='del'>-	    applo = ((sqrt!(side * side + 4 * main) - side)/2.0).to_i + 1</div><div class='del'>-	  end</div><div class='del'>-	else</div><div class='del'>-	  applo = sqrt!(main).to_i + 1</div><div class='del'>-	end</div><div class='del'>-	</div><div class='del'>-	while (x = (side + applo) * applo) &gt; main</div><div class='del'>-	  applo -= 1</div><div class='del'>-	end</div><div class='del'>-	main -= x</div><div class='del'>-	answer = (answer &lt;&lt; 16) + applo</div><div class='del'>-	side += applo * 2</div><div class='del'>-      end</div><div class='del'>-      if main == 0</div><div class='del'>-	answer</div><div class='del'>-      else</div><div class='del'>-	sqrt!(a)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :sqrt</div><div class='del'>-  module_function :rsqrt</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Complex</div><div class='del'>-  Unify = true</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/matrix.rb b/lib/matrix.rb<br/>deleted file mode 100644<br/>index 470db19b05..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/matrix.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/matrix.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1278 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-#--</div><div class='del'>-#   matrix.rb - </div><div class='del'>-#       $Release Version: 1.0$</div><div class='del'>-#       $Revision: 1.11 $</div><div class='del'>-#       $Date: 1999/10/06 11:01:53 $</div><div class='del'>-#       Original Version from Smalltalk-80 version</div><div class='del'>-#          on July 23, 1985 at 8:37:17 am</div><div class='del'>-#       by Keiju ISHITSUKA</div><div class='del'>-#++</div><div class='del'>-#</div><div class='del'>-# = matrix.rb</div><div class='del'>-#</div><div class='del'>-# An implementation of Matrix and Vector classes.</div><div class='del'>-#</div><div class='del'>-# Author:: Keiju ISHITSUKA</div><div class='del'>-# Documentation:: Gavin Sinclair (sourced from &lt;i&gt;Ruby in a Nutshell&lt;/i&gt; (Matsumoto, O'Reilly)) </div><div class='del'>-#</div><div class='del'>-# See classes Matrix and Vector for documentation. </div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require "e2mmap.rb"</div><div class='del'>-</div><div class='del'>-module ExceptionForMatrix # :nodoc:</div><div class='del'>-  extend Exception2MessageMapper</div><div class='del'>-  def_e2message(TypeError, "wrong argument type %s (expected %s)")</div><div class='del'>-  def_e2message(ArgumentError, "Wrong # of arguments(%d for %d)")</div><div class='del'>-  </div><div class='del'>-  def_exception("ErrDimensionMismatch", "\#{self.name} dimension mismatch")</div><div class='del'>-  def_exception("ErrNotRegular", "Not Regular Matrix")</div><div class='del'>-  def_exception("ErrOperationNotDefined", "This operation(%s) can\\'t defined")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# The +Matrix+ class represents a mathematical matrix, and provides methods for creating</div><div class='del'>-# special-case matrices (zero, identity, diagonal, singular, vector), operating on them</div><div class='del'>-# arithmetically and algebraically, and determining their mathematical properties (trace, rank,</div><div class='del'>-# inverse, determinant).</div><div class='del'>-#</div><div class='del'>-# Note that although matrices should theoretically be rectangular, this is not</div><div class='del'>-# enforced by the class.</div><div class='del'>-#</div><div class='del'>-# Also note that the determinant of integer matrices may be incorrectly calculated unless you</div><div class='del'>-# also &lt;tt&gt;require 'mathn'&lt;/tt&gt;.  This may be fixed in the future.</div><div class='del'>-#</div><div class='del'>-# == Method Catalogue</div><div class='del'>-#</div><div class='del'>-# To create a matrix:</div><div class='del'>-# * &lt;tt&gt; Matrix[*rows]                  &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.[](*rows)               &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.rows(rows, copy = true) &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.columns(columns)        &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.diagonal(*values)       &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.scalar(n, value)        &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.scalar(n, value)        &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.identity(n)             &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.unit(n)                 &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.I(n)                    &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.zero(n)                 &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.row_vector(row)         &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; Matrix.column_vector(column)   &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# To access Matrix elements/columns/rows/submatrices/properties: </div><div class='del'>-# * &lt;tt&gt;  [](i, j)                      &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #row_size                      &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #column_size                   &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #row(i)                        &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #column(j)                     &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #collect                       &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #map                           &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #minor(*param)                 &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# Properties of a matrix:</div><div class='del'>-# * &lt;tt&gt; #regular?                      &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #singular?                     &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #square?                       &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# Matrix arithmetic:</div><div class='del'>-# * &lt;tt&gt;  *(m)                          &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt;  +(m)                          &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt;  -(m)                          &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #/(m)                          &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #inverse                       &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #inv                           &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt;  **                            &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# Matrix functions:</div><div class='del'>-# * &lt;tt&gt; #determinant                   &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #det                           &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #rank                          &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #trace                         &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #tr                            &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #transpose                     &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #t                             &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# Conversion to other data types:</div><div class='del'>-# * &lt;tt&gt; #coerce(other)                 &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #row_vectors                   &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #column_vectors                &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #to_a                          &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# String representations:</div><div class='del'>-# * &lt;tt&gt; #to_s                          &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #inspect                       &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-class Matrix</div><div class='del'>-  @RCS_ID='-$Id: matrix.rb,v 1.11 1999/10/06 11:01:53 keiju Exp keiju $-'</div><div class='del'>-  </div><div class='del'>-#  extend Exception2MessageMapper</div><div class='del'>-  include ExceptionForMatrix</div><div class='del'>-  </div><div class='del'>-  # instance creations</div><div class='del'>-  private_class_method :new</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates a matrix where each argument is a row.</div><div class='del'>-  #   Matrix[ [25, 93], [-1, 66] ]</div><div class='del'>-  #      =&gt;  25 93</div><div class='del'>-  #          -1 66</div><div class='del'>-  #</div><div class='del'>-  def Matrix.[](*rows)</div><div class='del'>-    new(:init_rows, rows, false)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates a matrix where +rows+ is an array of arrays, each of which is a row</div><div class='del'>-  # to the matrix.  If the optional argument +copy+ is false, use the given</div><div class='del'>-  # arrays as the internal structure of the matrix without copying.</div><div class='del'>-  #   Matrix.rows([[25, 93], [-1, 66]])</div><div class='del'>-  #      =&gt;  25 93</div><div class='del'>-  #          -1 66</div><div class='del'>-  def Matrix.rows(rows, copy = true)</div><div class='del'>-    new(:init_rows, rows, copy)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates a matrix using +columns+ as an array of column vectors.</div><div class='del'>-  #   Matrix.columns([[25, 93], [-1, 66]])</div><div class='del'>-  #      =&gt;  25 -1</div><div class='del'>-  #          93 66</div><div class='del'>-  #</div><div class='del'>-  #</div><div class='del'>-  def Matrix.columns(columns)</div><div class='del'>-    rows = (0 .. columns[0].size - 1).collect {</div><div class='del'>-      |i|</div><div class='del'>-      (0 .. columns.size - 1).collect {</div><div class='del'>-        |j|</div><div class='del'>-        columns[j][i]</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    Matrix.rows(rows, false)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates a matrix where the diagonal elements are composed of +values+.</div><div class='del'>-  #   Matrix.diagonal(9, 5, -3)</div><div class='del'>-  #     =&gt;  9  0  0</div><div class='del'>-  #         0  5  0</div><div class='del'>-  #         0  0 -3</div><div class='del'>-  #</div><div class='del'>-  def Matrix.diagonal(*values)</div><div class='del'>-    size = values.size</div><div class='del'>-    rows = (0 .. size  - 1).collect {</div><div class='del'>-      |j|</div><div class='del'>-      row = Array.new(size).fill(0, 0, size)</div><div class='del'>-      row[j] = values[j]</div><div class='del'>-      row</div><div class='del'>-    }</div><div class='del'>-    rows(rows, false)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates an +n+ by +n+ diagonal matrix where each diagonal element is</div><div class='del'>-  # +value+.</div><div class='del'>-  #   Matrix.scalar(2, 5)</div><div class='del'>-  #     =&gt; 5 0</div><div class='del'>-  #        0 5</div><div class='del'>-  #</div><div class='del'>-  def Matrix.scalar(n, value)</div><div class='del'>-    Matrix.diagonal(*Array.new(n).fill(value, 0, n))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Creates an +n+ by +n+ identity matrix.</div><div class='del'>-  #   Matrix.identity(2)</div><div class='del'>-  #     =&gt; 1 0</div><div class='del'>-  #        0 1</div><div class='del'>-  #</div><div class='del'>-  def Matrix.identity(n)</div><div class='del'>-    Matrix.scalar(n, 1)</div><div class='del'>-  end</div><div class='del'>-  class &lt;&lt; Matrix </div><div class='del'>-    alias unit identity</div><div class='del'>-    alias I identity</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates an +n+ by +n+ zero matrix.</div><div class='del'>-  #   Matrix.zero(2)</div><div class='del'>-  #     =&gt; 0 0</div><div class='del'>-  #        0 0</div><div class='del'>-  #</div><div class='del'>-  def Matrix.zero(n)</div><div class='del'>-    Matrix.scalar(n, 0)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates a single-row matrix where the values of that row are as given in</div><div class='del'>-  # +row+.</div><div class='del'>-  #   Matrix.row_vector([4,5,6])</div><div class='del'>-  #     =&gt; 4 5 6</div><div class='del'>-  #</div><div class='del'>-  def Matrix.row_vector(row)</div><div class='del'>-    case row</div><div class='del'>-    when Vector</div><div class='del'>-      Matrix.rows([row.to_a], false)</div><div class='del'>-    when Array</div><div class='del'>-      Matrix.rows([row.dup], false)</div><div class='del'>-    else</div><div class='del'>-      Matrix.rows([[row]], false)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates a single-column matrix where the values of that column are as given</div><div class='del'>-  # in +column+.</div><div class='del'>-  #   Matrix.column_vector([4,5,6])</div><div class='del'>-  #     =&gt; 4</div><div class='del'>-  #        5</div><div class='del'>-  #        6</div><div class='del'>-  #</div><div class='del'>-  def Matrix.column_vector(column)</div><div class='del'>-    case column</div><div class='del'>-    when Vector</div><div class='del'>-      Matrix.columns([column.to_a])</div><div class='del'>-    when Array</div><div class='del'>-      Matrix.columns([column])</div><div class='del'>-    else</div><div class='del'>-      Matrix.columns([[column]])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This method is used by the other methods that create matrices, and is of no</div><div class='del'>-  # use to general users.</div><div class='del'>-  #</div><div class='del'>-  def initialize(init_method, *argv)</div><div class='del'>-    self.send(init_method, *argv)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def init_rows(rows, copy)</div><div class='del'>-    if copy</div><div class='del'>-      @rows = rows.collect{|row| row.dup}</div><div class='del'>-    else</div><div class='del'>-      @rows = rows</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  private :init_rows</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns element (+i+,+j+) of the matrix.  That is: row +i+, column +j+.</div><div class='del'>-  #</div><div class='del'>-  def [](i, j)</div><div class='del'>-    @rows[i][j]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the number of rows.</div><div class='del'>-  #</div><div class='del'>-  def row_size</div><div class='del'>-    @rows.size</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns the number of columns.  Note that it is possible to construct a</div><div class='del'>-  # matrix with uneven columns (e.g. Matrix[ [1,2,3], [4,5] ]), but this is</div><div class='del'>-  # mathematically unsound.  This method uses the first row to determine the</div><div class='del'>-  # result.</div><div class='del'>-  #</div><div class='del'>-  def column_size</div><div class='del'>-    @rows[0].size</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns row vector number +i+ of the matrix as a Vector (starting at 0 like</div><div class='del'>-  # an array).  When a block is given, the elements of that vector are iterated.</div><div class='del'>-  #</div><div class='del'>-  def row(i) # :yield: e</div><div class='del'>-    if block_given?</div><div class='del'>-      for e in @rows[i]</div><div class='del'>-        yield e</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      Vector.elements(@rows[i])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns column vector number +j+ of the matrix as a Vector (starting at 0</div><div class='del'>-  # like an array).  When a block is given, the elements of that vector are</div><div class='del'>-  # iterated.</div><div class='del'>-  #</div><div class='del'>-  def column(j) # :yield: e</div><div class='del'>-    if block_given?</div><div class='del'>-      0.upto(row_size - 1) do</div><div class='del'>-        |i|</div><div class='del'>-        yield @rows[i][j]</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      col = (0 .. row_size - 1).collect {</div><div class='del'>-        |i|</div><div class='del'>-        @rows[i][j]</div><div class='del'>-      }</div><div class='del'>-      Vector.elements(col, false)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns a matrix that is the result of iteration of the given block over all</div><div class='del'>-  # elements of the matrix.</div><div class='del'>-  #   Matrix[ [1,2], [3,4] ].collect { |i| i**2 }</div><div class='del'>-  #     =&gt; 1  4</div><div class='del'>-  #        9 16</div><div class='del'>-  #</div><div class='del'>-  def collect # :yield: e</div><div class='del'>-    rows = @rows.collect{|row| row.collect{|e| yield e}}</div><div class='del'>-    Matrix.rows(rows, false)</div><div class='del'>-  end</div><div class='del'>-  alias map collect</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns a section of the matrix.  The parameters are either:</div><div class='del'>-  # *  start_row, nrows, start_col, ncols; OR</div><div class='del'>-  # *  col_range, row_range</div><div class='del'>-  #</div><div class='del'>-  #   Matrix.diagonal(9, 5, -3).minor(0..1, 0..2)</div><div class='del'>-  #     =&gt; 9 0 0</div><div class='del'>-  #        0 5 0</div><div class='del'>-  #</div><div class='del'>-  def minor(*param)</div><div class='del'>-    case param.size</div><div class='del'>-    when 2</div><div class='del'>-      from_row = param[0].first</div><div class='del'>-      size_row = param[0].end - from_row</div><div class='del'>-      size_row += 1 unless param[0].exclude_end?</div><div class='del'>-      from_col = param[1].first</div><div class='del'>-      size_col = param[1].end - from_col</div><div class='del'>-      size_col += 1 unless param[1].exclude_end?</div><div class='del'>-    when 4</div><div class='del'>-      from_row = param[0]</div><div class='del'>-      size_row = param[1]</div><div class='del'>-      from_col = param[2]</div><div class='del'>-      size_col = param[3]</div><div class='del'>-    else</div><div class='del'>-      Matrix.Raise ArgumentError, param.inspect</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    rows = @rows[from_row, size_row].collect{</div><div class='del'>-      |row|</div><div class='del'>-      row[from_col, size_col]</div><div class='del'>-    }</div><div class='del'>-    Matrix.rows(rows, false)</div><div class='del'>-  end</div><div class='del'>- </div><div class='del'>-  #--</div><div class='del'>-  # TESTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns +true+ if this is a regular matrix.</div><div class='del'>-  #</div><div class='del'>-  def regular?</div><div class='del'>-    square? and rank == column_size</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns +true+ is this is a singular (i.e. non-regular) matrix.</div><div class='del'>-  #</div><div class='del'>-  def singular?</div><div class='del'>-    not regular?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns +true+ is this is a square matrix.  See note in column_size about this</div><div class='del'>-  # being unreliable, though.</div><div class='del'>-  #</div><div class='del'>-  def square?</div><div class='del'>-    column_size == row_size</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # OBJECT METHODS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns +true+ if and only if the two matrices contain equal elements.</div><div class='del'>-  #</div><div class='del'>-  def ==(other)</div><div class='del'>-    return false unless Matrix === other</div><div class='del'>-    </div><div class='del'>-    other.compare_by_row_vectors(@rows)</div><div class='del'>-  end</div><div class='del'>-  alias eql? ==</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Not really intended for general consumption.</div><div class='del'>-  #</div><div class='del'>-  def compare_by_row_vectors(rows)</div><div class='del'>-    return false unless @rows.size == rows.size</div><div class='del'>-    </div><div class='del'>-    0.upto(@rows.size - 1) do</div><div class='del'>-      |i|</div><div class='del'>-      return false unless @rows[i] == rows[i]</div><div class='del'>-    end</div><div class='del'>-    true</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns a clone of the matrix, so that the contents of each do not reference</div><div class='del'>-  # identical objects.</div><div class='del'>-  #</div><div class='del'>-  def clone</div><div class='del'>-    Matrix.rows(@rows)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns a hash-code for the matrix.</div><div class='del'>-  #</div><div class='del'>-  def hash</div><div class='del'>-    value = 0</div><div class='del'>-    for row in @rows</div><div class='del'>-      for e in row</div><div class='del'>-        value ^= e.hash</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    return value</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # ARITHMETIC -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Matrix multiplication.</div><div class='del'>-  #   Matrix[[2,4], [6,8]] * Matrix.identity(2)</div><div class='del'>-  #     =&gt; 2 4</div><div class='del'>-  #        6 8</div><div class='del'>-  #</div><div class='del'>-  def *(m) # m is matrix or vector or number</div><div class='del'>-    case(m)</div><div class='del'>-    when Numeric</div><div class='del'>-      rows = @rows.collect {</div><div class='del'>-        |row|</div><div class='del'>-        row.collect {</div><div class='del'>-          |e|</div><div class='del'>-          e * m</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      return Matrix.rows(rows, false)</div><div class='del'>-    when Vector</div><div class='del'>-      m = Matrix.column_vector(m)</div><div class='del'>-      r = self * m</div><div class='del'>-      return r.column(0)</div><div class='del'>-    when Matrix</div><div class='del'>-      Matrix.Raise ErrDimensionMismatch if column_size != m.row_size</div><div class='del'>-    </div><div class='del'>-      rows = (0 .. row_size - 1).collect {</div><div class='del'>-        |i|</div><div class='del'>-        (0 .. m.column_size - 1).collect {</div><div class='del'>-          |j|</div><div class='del'>-          vij = 0</div><div class='del'>-          0.upto(column_size - 1) do</div><div class='del'>-            |k|</div><div class='del'>-            vij += self[i, k] * m[k, j]</div><div class='del'>-          end</div><div class='del'>-          vij</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      return Matrix.rows(rows, false)</div><div class='del'>-    else</div><div class='del'>-      x, y = m.coerce(self)</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'>-  #</div><div class='del'>-  # Matrix addition.</div><div class='del'>-  #   Matrix.scalar(2,5) + Matrix[[1,0], [-4,7]]</div><div class='del'>-  #     =&gt;  6  0</div><div class='del'>-  #        -4 12</div><div class='del'>-  #</div><div class='del'>-  def +(m)</div><div class='del'>-    case m</div><div class='del'>-    when Numeric</div><div class='del'>-      Matrix.Raise ErrOperationNotDefined, "+"</div><div class='del'>-    when Vector</div><div class='del'>-      m = Matrix.column_vector(m)</div><div class='del'>-    when Matrix</div><div class='del'>-    else</div><div class='del'>-      x, y = m.coerce(self)</div><div class='del'>-      return x + y</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    Matrix.Raise ErrDimensionMismatch unless row_size == m.row_size and column_size == m.column_size</div><div class='del'>-    </div><div class='del'>-    rows = (0 .. row_size - 1).collect {</div><div class='del'>-      |i|</div><div class='del'>-      (0 .. column_size - 1).collect {</div><div class='del'>-        |j|</div><div class='del'>-        self[i, j] + m[i, j]</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    Matrix.rows(rows, false)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Matrix subtraction.</div><div class='del'>-  #   Matrix[[1,5], [4,2]] - Matrix[[9,3], [-4,1]]</div><div class='del'>-  #     =&gt; -8  2</div><div class='del'>-  #         8  1</div><div class='del'>-  #</div><div class='del'>-  def -(m)</div><div class='del'>-    case m</div><div class='del'>-    when Numeric</div><div class='del'>-      Matrix.Raise ErrOperationNotDefined, "-"</div><div class='del'>-    when Vector</div><div class='del'>-      m = Matrix.column_vector(m)</div><div class='del'>-    when Matrix</div><div class='del'>-    else</div><div class='del'>-      x, y = m.coerce(self)</div><div class='del'>-      return x - y</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    Matrix.Raise ErrDimensionMismatch unless row_size == m.row_size and column_size == m.column_size</div><div class='del'>-    </div><div class='del'>-    rows = (0 .. row_size - 1).collect {</div><div class='del'>-      |i|</div><div class='del'>-      (0 .. column_size - 1).collect {</div><div class='del'>-        |j|</div><div class='del'>-        self[i, j] - m[i, j]</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    Matrix.rows(rows, false)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Matrix division (multiplication by the inverse).</div><div class='del'>-  #   Matrix[[7,6], [3,9]] / Matrix[[2,9], [3,1]]</div><div class='del'>-  #     =&gt; -7  1</div><div class='del'>-  #        -3 -6</div><div class='del'>-  #</div><div class='del'>-  def /(other)</div><div class='del'>-    case other</div><div class='del'>-    when Numeric</div><div class='del'>-      rows = @rows.collect {</div><div class='del'>-        |row|</div><div class='del'>-        row.collect {</div><div class='del'>-          |e|</div><div class='del'>-          e / other</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      return Matrix.rows(rows, false)</div><div class='del'>-    when Matrix</div><div class='del'>-      return self * other.inverse</div><div class='del'>-    else</div><div class='del'>-      x, y = other.coerce(self)</div><div class='del'>-      rerurn x / y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the inverse of the matrix.</div><div class='del'>-  #   Matrix[[1, 2], [2, 1]].inverse</div><div class='del'>-  #     =&gt; -1  1</div><div class='del'>-  #         0 -1</div><div class='del'>-  #</div><div class='del'>-  def inverse</div><div class='del'>-    Matrix.Raise ErrDimensionMismatch unless square?</div><div class='del'>-    Matrix.I(row_size).inverse_from(self)</div><div class='del'>-  end</div><div class='del'>-  alias inv inverse</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Not for public consumption?</div><div class='del'>-  #</div><div class='del'>-  def inverse_from(src)</div><div class='del'>-    size = row_size - 1</div><div class='del'>-    a = src.to_a</div><div class='del'>-    </div><div class='del'>-    for k in 0..size</div><div class='del'>-      i = k</div><div class='del'>-      akk = a[k][k].abs</div><div class='del'>-      for j in (k+1)..size</div><div class='del'>-        v = a[j][k].abs</div><div class='del'>-        if v &gt; akk</div><div class='del'>-          i = j</div><div class='del'>-          akk = v</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      Matrix.Raise ErrNotRegular if akk == 0</div><div class='del'>-      if i != k</div><div class='del'>-        a[i], a[k] = a[k], a[i]</div><div class='del'>-        @rows[i], @rows[k] = @rows[k], @rows[i]</div><div class='del'>-      end</div><div class='del'>-      akk = a[k][k]</div><div class='del'>-      </div><div class='del'>-      for i in 0 .. size</div><div class='del'>-        next if i == k</div><div class='del'>-        q = a[i][k] / akk</div><div class='del'>-        a[i][k] = 0</div><div class='del'>-        </div><div class='del'>-        (k + 1).upto(size) do   </div><div class='del'>-          |j|</div><div class='del'>-          a[i][j] -= a[k][j] * q</div><div class='del'>-        end</div><div class='del'>-        0.upto(size) do</div><div class='del'>-          |j|</div><div class='del'>-          @rows[i][j] -= @rows[k][j] * q</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      (k + 1).upto(size) do</div><div class='del'>-        |j|</div><div class='del'>-        a[k][j] /= akk</div><div class='del'>-      end</div><div class='del'>-      0.upto(size) do</div><div class='del'>-        |j|</div><div class='del'>-        @rows[k][j] /= akk</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 reciprocal inverse</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Matrix exponentiation.  Defined for integer powers only.  Equivalent to</div><div class='del'>-  # multiplying the matrix by itself N times.</div><div class='del'>-  #   Matrix[[7,6], [3,9]] ** 2</div><div class='del'>-  #     =&gt; 67 96</div><div class='del'>-  #        48 99</div><div class='del'>-  #</div><div class='del'>-  def ** (other)</div><div class='del'>-    if other.kind_of?(Integer)</div><div class='del'>-      x = self</div><div class='del'>-      if other &lt;= 0</div><div class='del'>-        x = self.inverse</div><div class='del'>-        return Matrix.identity(self.column_size) if other == 0</div><div class='del'>-        other = -other</div><div class='del'>-      end</div><div class='del'>-      z = x</div><div class='del'>-      n = other  - 1</div><div class='del'>-      while n != 0</div><div class='del'>-        while (div, mod = n.divmod(2)</div><div class='del'>-               mod == 0)</div><div class='del'>-          x = x * x</div><div class='del'>-          n = div</div><div class='del'>-        end</div><div class='del'>-        z *= x</div><div class='del'>-        n -= 1</div><div class='del'>-      end</div><div class='del'>-      z</div><div class='del'>-    elsif other.kind_of?(Float) || defined?(Rational) &amp;&amp; other.kind_of?(Rational)</div><div class='del'>-      Matrix.Raise ErrOperationNotDefined, "**"</div><div class='del'>-    else</div><div class='del'>-      Matrix.Raise ErrOperationNotDefined, "**"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # MATRIX FUNCTIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns the determinant of the matrix.  If the matrix is not square, the</div><div class='del'>-  # result is 0.</div><div class='del'>-  #   Matrix[[7,6], [3,9]].determinant</div><div class='del'>-  #     =&gt; 63</div><div class='del'>-  #</div><div class='del'>-  def determinant</div><div class='del'>-    return 0 unless square?</div><div class='del'>-    </div><div class='del'>-    size = row_size - 1</div><div class='del'>-    a = to_a</div><div class='del'>-    </div><div class='del'>-    det = 1</div><div class='del'>-    k = 0</div><div class='del'>-    begin </div><div class='del'>-      if (akk = a[k][k]) == 0</div><div class='del'>-        i = k</div><div class='del'>-        begin</div><div class='del'>-          return 0 if (i += 1) &gt; size</div><div class='del'>-        end while a[i][k] == 0</div><div class='del'>-        a[i], a[k] = a[k], a[i]</div><div class='del'>-        akk = a[k][k]</div><div class='del'>-        det *= -1</div><div class='del'>-      end</div><div class='del'>-      (k + 1).upto(size) do</div><div class='del'>-        |i|</div><div class='del'>-        q = a[i][k] / akk</div><div class='del'>-        (k + 1).upto(size) do</div><div class='del'>-          |j|</div><div class='del'>-          a[i][j] -= a[k][j] * q</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      det *= akk</div><div class='del'>-    end while (k += 1) &lt;= size</div><div class='del'>-    det</div><div class='del'>-  end</div><div class='del'>-  alias det determinant</div><div class='del'>-        </div><div class='del'>-  #</div><div class='del'>-  # Returns the rank of the matrix.  Beware that using Float values, with their</div><div class='del'>-  # usual lack of precision, can affect the value returned by this method.  Use</div><div class='del'>-  # Rational values instead if this is important to you.</div><div class='del'>-  #   Matrix[[7,6], [3,9]].rank</div><div class='del'>-  #     =&gt; 2</div><div class='del'>-  #</div><div class='del'>-  def rank</div><div class='del'>-    if column_size &gt; row_size</div><div class='del'>-      a = transpose.to_a</div><div class='del'>-      a_column_size = row_size</div><div class='del'>-      a_row_size = column_size</div><div class='del'>-    else</div><div class='del'>-      a = to_a</div><div class='del'>-      a_column_size = column_size</div><div class='del'>-      a_row_size = row_size</div><div class='del'>-    end</div><div class='del'>-    rank = 0</div><div class='del'>-    k = 0</div><div class='del'>-    begin</div><div class='del'>-      if (akk = a[k][k]) == 0</div><div class='del'>-        i = k</div><div class='del'>-        exists = true</div><div class='del'>-        begin</div><div class='del'>-          if (i += 1) &gt; a_column_size - 1</div><div class='del'>-            exists = false</div><div class='del'>-            break</div><div class='del'>-          end</div><div class='del'>-        end while a[i][k] == 0</div><div class='del'>-        if exists</div><div class='del'>-          a[i], a[k] = a[k], a[i]</div><div class='del'>-          akk = a[k][k]</div><div class='del'>-        else</div><div class='del'>-          i = k</div><div class='del'>-          exists = true</div><div class='del'>-          begin</div><div class='del'>-            if (i += 1) &gt; a_row_size - 1</div><div class='del'>-              exists = false</div><div class='del'>-              break</div><div class='del'>-            end</div><div class='del'>-          end while a[k][i] == 0</div><div class='del'>-          if exists</div><div class='del'>-            k.upto(a_column_size - 1) do</div><div class='del'>-              |j|</div><div class='del'>-              a[j][k], a[j][i] = a[j][i], a[j][k]</div><div class='del'>-            end</div><div class='del'>-            akk = a[k][k]</div><div class='del'>-          else</div><div class='del'>-            next</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      (k + 1).upto(a_row_size - 1) do</div><div class='del'>-        |i|</div><div class='del'>-        q = a[i][k] / akk</div><div class='del'>-        (k + 1).upto(a_column_size - 1) do</div><div class='del'>-          |j|</div><div class='del'>-          a[i][j] -= a[k][j] * q</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      rank += 1</div><div class='del'>-    end while (k += 1) &lt;= a_column_size - 1</div><div class='del'>-    return rank</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the trace (sum of diagonal elements) of the matrix.</div><div class='del'>-  #   Matrix[[7,6], [3,9]].trace</div><div class='del'>-  #     =&gt; 16</div><div class='del'>-  #</div><div class='del'>-  def trace</div><div class='del'>-    tr = 0</div><div class='del'>-    0.upto(column_size - 1) do</div><div class='del'>-      |i|</div><div class='del'>-      tr += @rows[i][i]</div><div class='del'>-    end</div><div class='del'>-    tr</div><div class='del'>-  end</div><div class='del'>-  alias tr trace</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns the transpose of the matrix.</div><div class='del'>-  #   Matrix[[1,2], [3,4], [5,6]]</div><div class='del'>-  #     =&gt; 1 2</div><div class='del'>-  #        3 4</div><div class='del'>-  #        5 6</div><div class='del'>-  #   Matrix[[1,2], [3,4], [5,6]].transpose</div><div class='del'>-  #     =&gt; 1 3 5</div><div class='del'>-  #        2 4 6</div><div class='del'>-  #</div><div class='del'>-  def transpose</div><div class='del'>-    Matrix.columns(@rows)</div><div class='del'>-  end</div><div class='del'>-  alias t transpose</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # CONVERTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # FIXME: describe #coerce.</div><div class='del'>-  #</div><div class='del'>-  def coerce(other)</div><div class='del'>-    case other</div><div class='del'>-    when Numeric</div><div class='del'>-      return Scalar.new(other), self</div><div class='del'>-    else</div><div class='del'>-      raise TypeError, "#{self.class} can't be coerced into #{other.class}"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns an array of the row vectors of the matrix.  See Vector.</div><div class='del'>-  #</div><div class='del'>-  def row_vectors</div><div class='del'>-    rows = (0 .. row_size - 1).collect {</div><div class='del'>-      |i|</div><div class='del'>-      row(i)</div><div class='del'>-    }</div><div class='del'>-    rows</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns an array of the column vectors of the matrix.  See Vector.</div><div class='del'>-  #</div><div class='del'>-  def column_vectors</div><div class='del'>-    columns = (0 .. column_size - 1).collect {</div><div class='del'>-      |i|</div><div class='del'>-      column(i)</div><div class='del'>-    }</div><div class='del'>-    columns</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns an array of arrays that describe the rows of the matrix.</div><div class='del'>-  #</div><div class='del'>-  def to_a</div><div class='del'>-    @rows.collect{|row| row.collect{|e| e}}</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # PRINTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Overrides Object#to_s</div><div class='del'>-  #</div><div class='del'>-  def to_s</div><div class='del'>-    "Matrix[" + @rows.collect{</div><div class='del'>-      |row|</div><div class='del'>-      "[" + row.collect{|e| e.to_s}.join(", ") + "]"</div><div class='del'>-    }.join(", ")+"]"</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Overrides Object#inspect</div><div class='del'>-  #</div><div class='del'>-  def inspect</div><div class='del'>-    "Matrix"+@rows.inspect</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Private CLASS</div><div class='del'>-  </div><div class='del'>-  class Scalar &lt; Numeric # :nodoc:</div><div class='del'>-    include ExceptionForMatrix</div><div class='del'>-    </div><div class='del'>-    def initialize(value)</div><div class='del'>-      @value = value</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # ARITHMETIC</div><div class='del'>-    def +(other)</div><div class='del'>-      case other</div><div class='del'>-      when Numeric</div><div class='del'>-        Scalar.new(@value + other)</div><div class='del'>-      when Vector, Matrix</div><div class='del'>-        Scalar.Raise WrongArgType, other.class, "Numeric or Scalar"</div><div class='del'>-      when Scalar</div><div class='del'>-        Scalar.new(@value + other.value)</div><div class='del'>-      else</div><div class='del'>-        x, y = other.coerce(self)</div><div class='del'>-        x + y</div><div class='del'>-      end</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 Numeric</div><div class='del'>-        Scalar.new(@value - other)</div><div class='del'>-      when Vector, Matrix</div><div class='del'>-        Scalar.Raise WrongArgType, other.class, "Numeric or Scalar"</div><div class='del'>-      when Scalar</div><div class='del'>-        Scalar.new(@value - other.value)</div><div class='del'>-      else</div><div class='del'>-        x, y = other.coerce(self)</div><div class='del'>-        x - y</div><div class='del'>-      end</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 Numeric</div><div class='del'>-        Scalar.new(@value * other)</div><div class='del'>-      when Vector, Matrix</div><div class='del'>-        other.collect{|e| @value * e}</div><div class='del'>-      else</div><div class='del'>-        x, y = other.coerce(self)</div><div class='del'>-        x * y</div><div class='del'>-      end</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 Numeric</div><div class='del'>-        Scalar.new(@value / other)</div><div class='del'>-      when Vector</div><div class='del'>-        Scalar.Raise WrongArgType, other.class, "Numeric or Scalar or Matrix"</div><div class='del'>-      when Matrix</div><div class='del'>-        self * _M.inverse</div><div class='del'>-      else</div><div class='del'>-        x, y = other.coerce(self)</div><div class='del'>-        x / y</div><div class='del'>-      end</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 Numeric</div><div class='del'>-        Scalar.new(@value ** other)</div><div class='del'>-      when Vector</div><div class='del'>-        Scalar.Raise WrongArgType, other.class, "Numeric or Scalar or Matrix"</div><div class='del'>-      when Matrix</div><div class='del'>-        other.powered_by(self)</div><div class='del'>-      else</div><div class='del'>-        x, y = other.coerce(self)</div><div class='del'>-        x ** y</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'>-# The +Vector+ class represents a mathematical vector, which is useful in its own right, and</div><div class='del'>-# also constitutes a row or column of a Matrix.</div><div class='del'>-#</div><div class='del'>-# == Method Catalogue</div><div class='del'>-#</div><div class='del'>-# To create a Vector:</div><div class='del'>-# * &lt;tt&gt;  Vector.[](*array)                   &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt;  Vector.elements(array, copy = true) &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# To access elements:</div><div class='del'>-# * &lt;tt&gt;  [](i)                               &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# To enumerate the elements:</div><div class='del'>-# * &lt;tt&gt; #each2(v)                            &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #collect2(v)                         &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# Vector arithmetic:</div><div class='del'>-# * &lt;tt&gt;  *(x) "is matrix or number"          &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt;  +(v)                                &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt;  -(v)                                &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# Vector functions:</div><div class='del'>-# * &lt;tt&gt; #inner_product(v)                    &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #collect                             &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #map                                 &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #map2(v)                             &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #r                                   &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #size                                &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# Conversion to other data types:</div><div class='del'>-# * &lt;tt&gt; #covector                            &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #to_a                                &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #coerce(other)                       &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-# String representations:</div><div class='del'>-# * &lt;tt&gt; #to_s                                &lt;/tt&gt;</div><div class='del'>-# * &lt;tt&gt; #inspect                             &lt;/tt&gt;</div><div class='del'>-#</div><div class='del'>-class Vector</div><div class='del'>-  include ExceptionForMatrix</div><div class='del'>-  </div><div class='del'>-  #INSTANCE CREATION</div><div class='del'>-  </div><div class='del'>-  private_class_method :new</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Creates a Vector from a list of elements.</div><div class='del'>-  #   Vector[7, 4, ...]</div><div class='del'>-  #</div><div class='del'>-  def Vector.[](*array)</div><div class='del'>-    new(:init_elements, array, copy = false)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Creates a vector from an Array.  The optional second argument specifies</div><div class='del'>-  # whether the array itself or a copy is used internally.</div><div class='del'>-  #</div><div class='del'>-  def Vector.elements(array, copy = true)</div><div class='del'>-    new(:init_elements, array, copy)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # For internal use.</div><div class='del'>-  #</div><div class='del'>-  def initialize(method, array, copy)</div><div class='del'>-    self.send(method, array, copy)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # For internal use.</div><div class='del'>-  #</div><div class='del'>-  def init_elements(array, copy)</div><div class='del'>-    if copy</div><div class='del'>-      @elements = array.dup</div><div class='del'>-    else</div><div class='del'>-      @elements = array</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # ACCESSING</div><div class='del'>-         </div><div class='del'>-  #</div><div class='del'>-  # Returns element number +i+ (starting at zero) of the vector.</div><div class='del'>-  #</div><div class='del'>-  def [](i)</div><div class='del'>-    @elements[i]</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns the number of elements in the vector.</div><div class='del'>-  #</div><div class='del'>-  def size</div><div class='del'>-    @elements.size</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # ENUMERATIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Iterate over the elements of this vector and +v+ in conjunction.</div><div class='del'>-  #</div><div class='del'>-  def each2(v) # :yield: e1, e2</div><div class='del'>-    Vector.Raise ErrDimensionMismatch if size != v.size</div><div class='del'>-    0.upto(size - 1) do</div><div class='del'>-      |i|</div><div class='del'>-      yield @elements[i], v[i]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Collects (as in Enumerable#collect) over the elements of this vector and +v+</div><div class='del'>-  # in conjunction.</div><div class='del'>-  #</div><div class='del'>-  def collect2(v) # :yield: e1, e2</div><div class='del'>-    Vector.Raise ErrDimensionMismatch if size != v.size</div><div class='del'>-    (0 .. size - 1).collect do</div><div class='del'>-      |i|</div><div class='del'>-      yield @elements[i], v[i]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #--</div><div class='del'>-  # COMPARING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns +true+ iff the two vectors have the same elements in the same order.</div><div class='del'>-  #</div><div class='del'>-  def ==(other)</div><div class='del'>-    return false unless Vector === other</div><div class='del'>-    </div><div class='del'>-    other.compare_by(@elements)</div><div class='del'>-  end</div><div class='del'>-  alias eqn? ==</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # For internal use.</div><div class='del'>-  #</div><div class='del'>-  def compare_by(elements)</div><div class='del'>-    @elements == elements</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Return a copy of the vector.</div><div class='del'>-  #</div><div class='del'>-  def clone</div><div class='del'>-    Vector.elements(@elements)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Return a hash-code for the vector.</div><div class='del'>-  #</div><div class='del'>-  def hash</div><div class='del'>-    @elements.hash</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # ARITHMETIC -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Multiplies the vector by +x+, where +x+ is a number or another vector.</div><div class='del'>-  #</div><div class='del'>-  def *(x)</div><div class='del'>-    case x</div><div class='del'>-    when Numeric</div><div class='del'>-      els = @elements.collect{|e| e * x}</div><div class='del'>-      Vector.elements(els, false)</div><div class='del'>-    when Matrix</div><div class='del'>-      Matrix.column_vector(self) * x</div><div class='del'>-    else</div><div class='del'>-      s, x = x.coerce(self)</div><div class='del'>-      s * x</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Vector addition.</div><div class='del'>-  #</div><div class='del'>-  def +(v)</div><div class='del'>-    case v</div><div class='del'>-    when Vector</div><div class='del'>-      Vector.Raise ErrDimensionMismatch if size != v.size</div><div class='del'>-      els = collect2(v) {</div><div class='del'>-        |v1, v2|</div><div class='del'>-        v1 + v2</div><div class='del'>-      }</div><div class='del'>-      Vector.elements(els, false)</div><div class='del'>-    when Matrix</div><div class='del'>-      Matrix.column_vector(self) + v</div><div class='del'>-    else</div><div class='del'>-      s, x = v.coerce(self)</div><div class='del'>-      s + x</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Vector subtraction.</div><div class='del'>-  #</div><div class='del'>-  def -(v)</div><div class='del'>-    case v</div><div class='del'>-    when Vector</div><div class='del'>-      Vector.Raise ErrDimensionMismatch if size != v.size</div><div class='del'>-      els = collect2(v) {</div><div class='del'>-        |v1, v2|</div><div class='del'>-        v1 - v2</div><div class='del'>-      }</div><div class='del'>-      Vector.elements(els, false)</div><div class='del'>-    when Matrix</div><div class='del'>-      Matrix.column_vector(self) - v</div><div class='del'>-    else</div><div class='del'>-      s, x = v.coerce(self)</div><div class='del'>-      s - x</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # VECTOR FUNCTIONS -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns the inner product of this vector with the other.</div><div class='del'>-  #   Vector[4,7].inner_product Vector[10,1]  =&gt; 47</div><div class='del'>-  #</div><div class='del'>-  def inner_product(v)</div><div class='del'>-    Vector.Raise ErrDimensionMismatch if size != v.size</div><div class='del'>-    </div><div class='del'>-    p = 0</div><div class='del'>-    each2(v) {</div><div class='del'>-      |v1, v2|</div><div class='del'>-      p += v1 * v2</div><div class='del'>-    }</div><div class='del'>-    p</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Like Array#collect.</div><div class='del'>-  #</div><div class='del'>-  def collect # :yield: e</div><div class='del'>-    els = @elements.collect {</div><div class='del'>-      |v|</div><div class='del'>-      yield v</div><div class='del'>-    }</div><div class='del'>-    Vector.elements(els, false)</div><div class='del'>-  end</div><div class='del'>-  alias map collect</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Like Vector#collect2, but returns a Vector instead of an Array.</div><div class='del'>-  #</div><div class='del'>-  def map2(v) # :yield: e1, e2</div><div class='del'>-    els = collect2(v) {</div><div class='del'>-      |v1, v2|</div><div class='del'>-      yield v1, v2</div><div class='del'>-    }</div><div class='del'>-    Vector.elements(els, false)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns the modulus (Pythagorean distance) of the vector.</div><div class='del'>-  #   Vector[5,8,2].r =&gt; 9.643650761</div><div class='del'>-  #</div><div class='del'>-  def r</div><div class='del'>-    v = 0</div><div class='del'>-    for e in @elements</div><div class='del'>-      v += e*e</div><div class='del'>-    end</div><div class='del'>-    return Math.sqrt(v)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # CONVERTING</div><div class='del'>-  #++</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Creates a single-row matrix from this vector.</div><div class='del'>-  #</div><div class='del'>-  def covector</div><div class='del'>-    Matrix.row_vector(self)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Returns the elements of the vector in an array.</div><div class='del'>-  #</div><div class='del'>-  def to_a</div><div class='del'>-    @elements.dup</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # FIXME: describe Vector#coerce.</div><div class='del'>-  #</div><div class='del'>-  def coerce(other)</div><div class='del'>-    case other</div><div class='del'>-    when Numeric</div><div class='del'>-      return Scalar.new(other), self</div><div class='del'>-    else</div><div class='del'>-      raise TypeError, "#{self.class} can't be coerced into #{other.class}"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #--</div><div class='del'>-  # PRINTING -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</div><div class='del'>-  #++</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Overrides Object#to_s</div><div class='del'>-  #</div><div class='del'>-  def to_s</div><div class='del'>-    "Vector[" + @elements.join(", ") + "]"</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Overrides Object#inspect</div><div class='del'>-  #</div><div class='del'>-  def inspect</div><div class='del'>-    str = "Vector"+@elements.inspect</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# Documentation comments:</div><div class='del'>-#  - Matrix#coerce and Vector#coerce need to be documented</div><div class='head'>diff --git a/lib/mkmf.rb b/lib/mkmf.rb<br/>deleted file mode 100644<br/>index a532b5c0a8..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/mkmf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/mkmf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1811 +0,0 @@</div><div class='del'>-# module to create Makefile for extension modules</div><div class='del'>-# invoke like: ruby -r mkmf extconf.rb</div><div class='del'>-</div><div class='del'>-require 'rbconfig'</div><div class='del'>-require 'fileutils'</div><div class='del'>-require 'shellwords'</div><div class='del'>-</div><div class='del'>-CONFIG = Config::MAKEFILE_CONFIG</div><div class='del'>-ORIG_LIBPATH = ENV['LIB']</div><div class='del'>-</div><div class='del'>-CXX_EXT = %w[cc cxx cpp]</div><div class='del'>-if /mswin|bccwin|mingw|msdosdjgpp|human|os2/ !~ CONFIG['build_os']</div><div class='del'>-  CXX_EXT.concat(%w[C])</div><div class='del'>-end</div><div class='del'>-SRC_EXT = %w[c m] &lt;&lt; CXX_EXT</div><div class='del'>-$static = $config_h = nil</div><div class='del'>-$default_static = $static</div><div class='del'>-</div><div class='del'>-unless defined? $configure_args</div><div class='del'>-  $configure_args = {}</div><div class='del'>-  args = CONFIG["configure_args"]</div><div class='del'>-  if ENV["CONFIGURE_ARGS"]</div><div class='del'>-    args &lt;&lt; " " &lt;&lt; ENV["CONFIGURE_ARGS"]</div><div class='del'>-  end</div><div class='del'>-  for arg in Shellwords::shellwords(args)</div><div class='del'>-    arg, val = arg.split('=', 2)</div><div class='del'>-    next unless arg</div><div class='del'>-    arg.tr!('_', '-')</div><div class='del'>-    if arg.sub!(/^(?!--)/, '--')</div><div class='del'>-      val or next</div><div class='del'>-      arg.downcase!</div><div class='del'>-    end</div><div class='del'>-    next if /^--(?:top|topsrc|src|cur)dir$/ =~ arg</div><div class='del'>-    $configure_args[arg] = val || true</div><div class='del'>-  end</div><div class='del'>-  for arg in ARGV</div><div class='del'>-    arg, val = arg.split('=', 2)</div><div class='del'>-    next unless arg</div><div class='del'>-    arg.tr!('_', '-')</div><div class='del'>-    if arg.sub!(/^(?!--)/, '--')</div><div class='del'>-      val or next</div><div class='del'>-      arg.downcase!</div><div class='del'>-    end</div><div class='del'>-    $configure_args[arg] = val || true</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-$libdir = CONFIG["libdir"]</div><div class='del'>-$rubylibdir = CONFIG["rubylibdir"]</div><div class='del'>-$archdir = CONFIG["archdir"]</div><div class='del'>-$sitedir = CONFIG["sitedir"]</div><div class='del'>-$sitelibdir = CONFIG["sitelibdir"]</div><div class='del'>-$sitearchdir = CONFIG["sitearchdir"]</div><div class='del'>-$vendordir = CONFIG["vendordir"]</div><div class='del'>-$vendorlibdir = CONFIG["vendorlibdir"]</div><div class='del'>-$vendorarchdir = CONFIG["vendorarchdir"]</div><div class='del'>-</div><div class='del'>-$mswin = /mswin/ =~ RUBY_PLATFORM</div><div class='del'>-$bccwin = /bccwin/ =~ RUBY_PLATFORM</div><div class='del'>-$mingw = /mingw/ =~ RUBY_PLATFORM</div><div class='del'>-$cygwin = /cygwin/ =~ RUBY_PLATFORM</div><div class='del'>-$human = /human/ =~ RUBY_PLATFORM</div><div class='del'>-$netbsd = /netbsd/ =~ RUBY_PLATFORM</div><div class='del'>-$os2 = /os2/ =~ RUBY_PLATFORM</div><div class='del'>-$beos = /beos/ =~ RUBY_PLATFORM</div><div class='del'>-$solaris = /solaris/ =~ RUBY_PLATFORM</div><div class='del'>-$dest_prefix_pattern = (File::PATH_SEPARATOR == ';' ? /\A([[:alpha:]]:)?/ : /\A/)</div><div class='del'>-</div><div class='del'>-# :stopdoc:</div><div class='del'>-</div><div class='del'>-def config_string(key, config = CONFIG)</div><div class='del'>-  s = config[key] and !s.empty? and block_given? ? yield(s) : s</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def dir_re(dir)</div><div class='del'>-  Regexp.new('\$(?:\('+dir+'\)|\{'+dir+'\})(?:\$(?:\(target_prefix\)|\{target_prefix\}))?')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-INSTALL_DIRS = [</div><div class='del'>-  [dir_re('commondir'), "$(RUBYCOMMONDIR)"],</div><div class='del'>-  [dir_re('sitedir'), "$(RUBYCOMMONDIR)"],</div><div class='del'>-  [dir_re('vendordir'), "$(RUBYCOMMONDIR)"],</div><div class='del'>-  [dir_re('rubylibdir'), "$(RUBYLIBDIR)"],</div><div class='del'>-  [dir_re('archdir'), "$(RUBYARCHDIR)"],</div><div class='del'>-  [dir_re('sitelibdir'), "$(RUBYLIBDIR)"],</div><div class='del'>-  [dir_re('vendorlibdir'), "$(RUBYLIBDIR)"],</div><div class='del'>-  [dir_re('sitearchdir'), "$(RUBYARCHDIR)"],</div><div class='del'>-  [dir_re('bindir'), "$(BINDIR)"],</div><div class='del'>-  [dir_re('vendorarchdir'), "$(RUBYARCHDIR)"],</div><div class='del'>-]</div><div class='del'>-</div><div class='del'>-def install_dirs(target_prefix = nil)</div><div class='del'>-  if $extout</div><div class='del'>-    dirs = [</div><div class='del'>-      ['BINDIR',        '$(extout)/bin'],</div><div class='del'>-      ['RUBYCOMMONDIR', '$(extout)/common'],</div><div class='del'>-      ['RUBYLIBDIR',    '$(RUBYCOMMONDIR)$(target_prefix)'],</div><div class='del'>-      ['RUBYARCHDIR',   '$(extout)/$(arch)$(target_prefix)'],</div><div class='del'>-      ['extout',        "#$extout"],</div><div class='del'>-      ['extout_prefix', "#$extout_prefix"],</div><div class='del'>-    ]</div><div class='del'>-  elsif $extmk</div><div class='del'>-    dirs = [</div><div class='del'>-      ['BINDIR',        '$(bindir)'],</div><div class='del'>-      ['RUBYCOMMONDIR', '$(rubylibdir)'],</div><div class='del'>-      ['RUBYLIBDIR',    '$(rubylibdir)$(target_prefix)'],</div><div class='del'>-      ['RUBYARCHDIR',   '$(archdir)$(target_prefix)'],</div><div class='del'>-    ]</div><div class='del'>-  elsif $configure_args.has_key?('--vendor')</div><div class='del'>-    dirs = [</div><div class='del'>-      ['BINDIR',        '$(bindir)'],</div><div class='del'>-      ['RUBYCOMMONDIR', '$(vendordir)$(target_prefix)'],</div><div class='del'>-      ['RUBYLIBDIR',    '$(vendorlibdir)$(target_prefix)'],</div><div class='del'>-      ['RUBYARCHDIR',   '$(vendorarchdir)$(target_prefix)'],</div><div class='del'>-    ]</div><div class='del'>-  else</div><div class='del'>-    dirs = [</div><div class='del'>-      ['BINDIR',        '$(bindir)'],</div><div class='del'>-      ['RUBYCOMMONDIR', '$(sitedir)$(target_prefix)'],</div><div class='del'>-      ['RUBYLIBDIR',    '$(sitelibdir)$(target_prefix)'],</div><div class='del'>-      ['RUBYARCHDIR',   '$(sitearchdir)$(target_prefix)'],</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-  dirs &lt;&lt; ['target_prefix', (target_prefix ? "/#{target_prefix}" : "")]</div><div class='del'>-  dirs</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def map_dir(dir, map = nil)</div><div class='del'>-  map ||= INSTALL_DIRS</div><div class='del'>-  map.inject(dir) {|dir, (orig, new)| dir.gsub(orig, new)}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-topdir = File.dirname(libdir = File.dirname(__FILE__))</div><div class='del'>-extdir = File.expand_path("ext", topdir)</div><div class='del'>-$extmk = File.expand_path($0)[0, extdir.size+1] == extdir+"/"</div><div class='del'>-if not $extmk and File.exist?(($hdrdir = Config::CONFIG["archdir"]) + "/ruby.h")</div><div class='del'>-  $topdir = $hdrdir</div><div class='del'>-elsif File.exist?(($hdrdir = ($top_srcdir ||= topdir))  + "/ruby.h") and</div><div class='del'>-    File.exist?(($topdir ||= Config::CONFIG["topdir"]) + "/config.h")</div><div class='del'>-else</div><div class='del'>-  abort "mkmf.rb can't find header files for ruby at #{$hdrdir}/ruby.h"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-OUTFLAG = CONFIG['OUTFLAG']</div><div class='del'>-CPPOUTFILE = CONFIG['CPPOUTFILE']</div><div class='del'>-</div><div class='del'>-CONFTEST_C = "conftest.c"</div><div class='del'>-</div><div class='del'>-class String</div><div class='del'>-  # Wraps a string in escaped quotes if it contains whitespace.</div><div class='del'>-  def quote</div><div class='del'>-    /\s/ =~ self ? "\"#{self}\"" : "#{self}"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Generates a string used as cpp macro name.</div><div class='del'>-  def tr_cpp</div><div class='del'>-    strip.upcase.tr_s("^A-Z0-9_", "_")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-class Array</div><div class='del'>-  # Wraps all strings in escaped quotes if they contain whitespace.</div><div class='del'>-  def quote</div><div class='del'>-    map {|s| s.quote}</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def rm_f(*files)</div><div class='del'>-  FileUtils.rm_f(Dir[files.join("\0")])</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Returns time stamp of the +target+ file if it exists and is newer</div><div class='del'>-# than or equal to all of +times+.</div><div class='del'>-def modified?(target, times)</div><div class='del'>-  (t = File.mtime(target)) rescue return nil</div><div class='del'>-  Array === times or times = [times]</div><div class='del'>-  t if times.all? {|n| n &lt;= t}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def merge_libs(*libs)</div><div class='del'>-  libs.inject([]) do |x, y|</div><div class='del'>-    xy = x &amp; y</div><div class='del'>-    xn = yn = 0</div><div class='del'>-    y = y.inject([]) {|ary, e| ary.last == e ? ary : ary &lt;&lt; e}</div><div class='del'>-    y.each_with_index do |v, yi|</div><div class='del'>-      if xy.include?(v)</div><div class='del'>-        xi = [x.index(v), xn].max()</div><div class='del'>-        x[xi, 1] = y[yn..yi]</div><div class='del'>-        xn, yn = xi + (yi - yn + 1), yi + 1</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    x.concat(y[yn..-1] || [])</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# This is a custom logging module. It generates an mkmf.log file when you</div><div class='del'>-# run your extconf.rb script. This can be useful for debugging unexpected</div><div class='del'>-# failures.</div><div class='del'>-#</div><div class='del'>-# This module and its associated methods are meant for internal use only.</div><div class='del'>-#</div><div class='del'>-module Logging</div><div class='del'>-  @log = nil</div><div class='del'>-  @logfile = 'mkmf.log'</div><div class='del'>-  @orgerr = $stderr.dup</div><div class='del'>-  @orgout = $stdout.dup</div><div class='del'>-  @postpone = 0</div><div class='del'>-  @quiet = $extmk</div><div class='del'>-</div><div class='del'>-  def self::open</div><div class='del'>-    @log ||= File::open(@logfile, 'w')</div><div class='del'>-    @log.sync = true</div><div class='del'>-    $stderr.reopen(@log)</div><div class='del'>-    $stdout.reopen(@log)</div><div class='del'>-    yield</div><div class='del'>-  ensure</div><div class='del'>-    $stderr.reopen(@orgerr)</div><div class='del'>-    $stdout.reopen(@orgout)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self::message(*s)</div><div class='del'>-    @log ||= File::open(@logfile, 'w')</div><div class='del'>-    @log.sync = true</div><div class='del'>-    @log.printf(*s)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def self::logfile file</div><div class='del'>-    @logfile = file</div><div class='del'>-    if @log and not @log.closed?</div><div class='del'>-      @log.flush</div><div class='del'>-      @log.close</div><div class='del'>-      @log = nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def self::postpone</div><div class='del'>-    tmplog = "mkmftmp#{@postpone += 1}.log"</div><div class='del'>-    open do</div><div class='del'>-      log, *save = @log, @logfile, @orgout, @orgerr</div><div class='del'>-      @log, @logfile, @orgout, @orgerr = nil, tmplog, log, log</div><div class='del'>-      begin</div><div class='del'>-        log.print(open {yield})</div><div class='del'>-        @log.close</div><div class='del'>-        File::open(tmplog) {|t| FileUtils.copy_stream(t, log)}</div><div class='del'>-      ensure</div><div class='del'>-        @log, @logfile, @orgout, @orgerr = log, *save</div><div class='del'>-        @postpone -= 1</div><div class='del'>-        rm_f tmplog</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; self</div><div class='del'>-    attr_accessor :quiet</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def xsystem command</div><div class='del'>-  varpat = /\$\((\w+)\)|\$\{(\w+)\}/</div><div class='del'>-  if varpat =~ command</div><div class='del'>-    vars = Hash.new {|h, k| h[k] = ''; ENV[k]}</div><div class='del'>-    command = command.dup</div><div class='del'>-    nil while command.gsub!(varpat) {vars[$1||$2]}</div><div class='del'>-  end</div><div class='del'>-  Logging::open do</div><div class='del'>-    puts command.quote</div><div class='del'>-    system(command)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def xpopen command, *mode, &amp;block</div><div class='del'>-  Logging::open do</div><div class='del'>-    case mode[0]</div><div class='del'>-    when nil, /^r/</div><div class='del'>-      puts "#{command} |"</div><div class='del'>-    else</div><div class='del'>-      puts "| #{command}"</div><div class='del'>-    end</div><div class='del'>-    IO.popen(command, *mode, &amp;block)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def log_src(src)</div><div class='del'>-  src = src.split(/^/)</div><div class='del'>-  fmt = "%#{src.size.to_s.size}d: %s"</div><div class='del'>-  Logging::message &lt;&lt;"EOM"</div><div class='del'>-checked program was:</div><div class='del'>-/* begin */</div><div class='del'>-EOM</div><div class='del'>-  src.each_with_index {|line, no| Logging::message fmt, no+1, line}</div><div class='del'>-  Logging::message &lt;&lt;"EOM"</div><div class='del'>-/* end */</div><div class='del'>-</div><div class='del'>-EOM</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def create_tmpsrc(src)</div><div class='del'>-  src = yield(src) if block_given?</div><div class='del'>-  src = src.gsub(/[ \t]+$/, '').gsub(/\A\n+|^\n+$/, '').sub(/[^\n]\z/, "\\&amp;\n")</div><div class='del'>-  open(CONFTEST_C, "wb") do |cfile|</div><div class='del'>-    cfile.print src</div><div class='del'>-  end</div><div class='del'>-  src</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_do(src, command, &amp;b)</div><div class='del'>-  src = create_tmpsrc(src, &amp;b)</div><div class='del'>-  xsystem(command)</div><div class='del'>-ensure</div><div class='del'>-  log_src(src)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def link_command(ldflags, opt="", libpath=$DEFLIBPATH|$LIBPATH)</div><div class='del'>-  conf = Config::CONFIG.merge('hdrdir' =&gt; $hdrdir.quote,</div><div class='del'>-                              'src' =&gt; CONFTEST_C,</div><div class='del'>-                              'INCFLAGS' =&gt; $INCFLAGS,</div><div class='del'>-                              'CPPFLAGS' =&gt; $CPPFLAGS,</div><div class='del'>-                              'CFLAGS' =&gt; "#$CFLAGS",</div><div class='del'>-                              'ARCH_FLAG' =&gt; "#$ARCH_FLAG",</div><div class='del'>-                              'LDFLAGS' =&gt; "#$LDFLAGS #{ldflags}",</div><div class='del'>-                              'LIBPATH' =&gt; libpathflag(libpath),</div><div class='del'>-                              'LOCAL_LIBS' =&gt; "#$LOCAL_LIBS #$libs",</div><div class='del'>-                              'LIBS' =&gt; "#$LIBRUBYARG_STATIC #{opt} #$LIBS")</div><div class='del'>-  Config::expand(TRY_LINK.dup, conf)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def cc_command(opt="")</div><div class='del'>-  conf = Config::CONFIG.merge('hdrdir' =&gt; $hdrdir.quote, 'srcdir' =&gt; $srcdir.quote)</div><div class='del'>-  Config::expand("$(CC) #$INCFLAGS #$CPPFLAGS #$CFLAGS #$ARCH_FLAG #{opt} -c #{CONFTEST_C}",</div><div class='del'>-		 conf)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def cpp_command(outfile, opt="")</div><div class='del'>-  conf = Config::CONFIG.merge('hdrdir' =&gt; $hdrdir.quote, 'srcdir' =&gt; $srcdir.quote)</div><div class='del'>-  Config::expand("$(CPP) #$INCFLAGS #$CPPFLAGS #$CFLAGS #{opt} #{CONFTEST_C} #{outfile}",</div><div class='del'>-		 conf)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def libpathflag(libpath=$DEFLIBPATH|$LIBPATH)</div><div class='del'>-  libpath.map{|x|</div><div class='del'>-    case x</div><div class='del'>-    when "$(topdir)", /\A\./</div><div class='del'>-      LIBPATHFLAG</div><div class='del'>-    else</div><div class='del'>-      LIBPATHFLAG+RPATHFLAG</div><div class='del'>-    end % x.quote</div><div class='del'>-  }.join</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_link0(src, opt="", &amp;b)</div><div class='del'>-  try_do(src, link_command("", opt), &amp;b)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_link(src, opt="", &amp;b)</div><div class='del'>-  try_link0(src, opt, &amp;b)</div><div class='del'>-ensure</div><div class='del'>-  rm_f "conftest*", "c0x32*"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_compile(src, opt="", &amp;b)</div><div class='del'>-  try_do(src, cc_command(opt), &amp;b)</div><div class='del'>-ensure</div><div class='del'>-  rm_f "conftest*"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_cpp(src, opt="", &amp;b)</div><div class='del'>-  try_do(src, cpp_command(CPPOUTFILE, opt), &amp;b)</div><div class='del'>-ensure</div><div class='del'>-  rm_f "conftest*"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def cpp_include(header)</div><div class='del'>-  if header</div><div class='del'>-    header = [header] unless header.kind_of? Array</div><div class='del'>-    header.map {|h| "#include &lt;#{h}&gt;\n"}.join</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 with_cppflags(flags)</div><div class='del'>-  cppflags = $CPPFLAGS</div><div class='del'>-  $CPPFLAGS = flags</div><div class='del'>-  ret = yield</div><div class='del'>-ensure</div><div class='del'>-  $CPPFLAGS = cppflags unless ret</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def with_cflags(flags)</div><div class='del'>-  cflags = $CFLAGS</div><div class='del'>-  $CFLAGS = flags</div><div class='del'>-  ret = yield</div><div class='del'>-ensure</div><div class='del'>-  $CFLAGS = cflags unless ret</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def with_ldflags(flags)</div><div class='del'>-  ldflags = $LDFLAGS</div><div class='del'>-  $LDFLAGS = flags</div><div class='del'>-  ret = yield</div><div class='del'>-ensure</div><div class='del'>-  $LDFLAGS = ldflags unless ret</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_static_assert(expr, headers = nil, opt = "", &amp;b)</div><div class='del'>-  headers = cpp_include(headers)</div><div class='del'>-  try_compile(&lt;&lt;SRC, opt, &amp;b)</div><div class='del'>-#{COMMON_HEADERS}</div><div class='del'>-#{headers}</div><div class='del'>-/*top*/</div><div class='del'>-int conftest_const[(#{expr}) ? 1 : -1];</div><div class='del'>-SRC</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_constant(const, headers = nil, opt = "", &amp;b)</div><div class='del'>-  includes = cpp_include(headers)</div><div class='del'>-  if CROSS_COMPILING</div><div class='del'>-    if try_static_assert("#{const} &gt; 0", headers, opt)</div><div class='del'>-      # positive constant</div><div class='del'>-    elsif try_static_assert("#{const} &lt; 0", headers, opt)</div><div class='del'>-      neg = true</div><div class='del'>-      const = "-(#{const})"</div><div class='del'>-    elsif try_static_assert("#{const} == 0", headers, opt)</div><div class='del'>-      return 0</div><div class='del'>-    else</div><div class='del'>-      # not a constant</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-    upper = 1</div><div class='del'>-    lower = 0</div><div class='del'>-    until try_static_assert("#{const} &lt;= #{upper}", headers, opt)</div><div class='del'>-      lower = upper</div><div class='del'>-      upper &lt;&lt;= 1</div><div class='del'>-    end</div><div class='del'>-    return nil unless lower</div><div class='del'>-    while upper &gt; lower + 1</div><div class='del'>-      mid = (upper + lower) / 2</div><div class='del'>-      if try_static_assert("#{const} &gt; #{mid}", headers, opt)</div><div class='del'>-        lower = mid</div><div class='del'>-      else</div><div class='del'>-        upper = mid</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    upper = -upper if neg</div><div class='del'>-    return upper</div><div class='del'>-  else</div><div class='del'>-    src = %{#{COMMON_HEADERS}</div><div class='del'>-#{includes}</div><div class='del'>-#include &lt;stdio.h&gt;</div><div class='del'>-/*top*/</div><div class='del'>-int conftest_const = (int)(#{const});</div><div class='del'>-int main() {printf("%d\\n", conftest_const); return 0;}</div><div class='del'>-}</div><div class='del'>-    if try_link0(src, opt, &amp;b)</div><div class='del'>-      xpopen("./conftest") do |f|</div><div class='del'>-        return Integer(f.gets)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_func(func, libs, headers = nil, &amp;b)</div><div class='del'>-  headers = cpp_include(headers)</div><div class='del'>-  try_link(&lt;&lt;"SRC", libs, &amp;b) or try_link(&lt;&lt;"SRC", libs, &amp;b)</div><div class='del'>-#{COMMON_HEADERS}</div><div class='del'>-#{headers}</div><div class='del'>-/*top*/</div><div class='del'>-int main() { return 0; }</div><div class='del'>-int t() { void ((*volatile p)()); p = (void ((*)()))#{func}; return 0; }</div><div class='del'>-SRC</div><div class='del'>-#{headers}</div><div class='del'>-/*top*/</div><div class='del'>-int main() { return 0; }</div><div class='del'>-int t() { #{func}(); return 0; }</div><div class='del'>-SRC</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_var(var, headers = nil, &amp;b)</div><div class='del'>-  headers = cpp_include(headers)</div><div class='del'>-  try_compile(&lt;&lt;"SRC", &amp;b)</div><div class='del'>-#{COMMON_HEADERS}</div><div class='del'>-#{headers}</div><div class='del'>-/*top*/</div><div class='del'>-int main() { return 0; }</div><div class='del'>-int t() { const volatile void *volatile p; p = &amp;(&amp;#{var})[0]; return 0; }</div><div class='del'>-SRC</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def egrep_cpp(pat, src, opt = "", &amp;b)</div><div class='del'>-  src = create_tmpsrc(src, &amp;b)</div><div class='del'>-  xpopen(cpp_command('', opt)) do |f|</div><div class='del'>-    if Regexp === pat</div><div class='del'>-      puts("    ruby -ne 'print if #{pat.inspect}'")</div><div class='del'>-      f.grep(pat) {|l|</div><div class='del'>-	puts "#{f.lineno}: #{l}"</div><div class='del'>-	return true</div><div class='del'>-      }</div><div class='del'>-      false</div><div class='del'>-    else</div><div class='del'>-      puts("    egrep '#{pat}'")</div><div class='del'>-      begin</div><div class='del'>-	stdin = $stdin.dup</div><div class='del'>-	$stdin.reopen(f)</div><div class='del'>-	system("egrep", pat)</div><div class='del'>-      ensure</div><div class='del'>-	$stdin.reopen(stdin)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-ensure</div><div class='del'>-  rm_f "conftest*"</div><div class='del'>-  log_src(src)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# This is used internally by the have_macro? method.</div><div class='del'>-def macro_defined?(macro, src, opt = "", &amp;b)</div><div class='del'>-  src = src.sub(/[^\n]\z/, "\\&amp;\n")</div><div class='del'>-  try_compile(src + &lt;&lt;"SRC", opt, &amp;b)</div><div class='del'>-/*top*/</div><div class='del'>-#ifndef #{macro}</div><div class='del'>-# error</div><div class='del'>-&gt;&gt;&gt;&gt;&gt;&gt; #{macro} undefined &lt;&lt;&lt;&lt;&lt;&lt;</div><div class='del'>-#endif</div><div class='del'>-SRC</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_run(src, opt = "", &amp;b)</div><div class='del'>-  if try_link0(src, opt, &amp;b)</div><div class='del'>-    xsystem("./conftest")</div><div class='del'>-  else</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-ensure</div><div class='del'>-  rm_f "conftest*"</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def install_files(mfile, ifiles, map = nil, srcprefix = nil)</div><div class='del'>-  ifiles or return</div><div class='del'>-  ifiles.empty? and return</div><div class='del'>-  srcprefix ||= '$(srcdir)'</div><div class='del'>-  Config::expand(srcdir = srcprefix.dup)</div><div class='del'>-  dirs = []</div><div class='del'>-  path = Hash.new {|h, i| h[i] = dirs.push([i])[-1]}</div><div class='del'>-  ifiles.each do |files, dir, prefix|</div><div class='del'>-    dir = map_dir(dir, map)</div><div class='del'>-    prefix &amp;&amp;= %r|\A#{Regexp.quote(prefix)}/?|</div><div class='del'>-    if /\A\.\// =~ files</div><div class='del'>-      # install files which are in current working directory.</div><div class='del'>-      files = files[2..-1]</div><div class='del'>-      len = nil</div><div class='del'>-    else</div><div class='del'>-      # install files which are under the $(srcdir).</div><div class='del'>-      files = File.join(srcdir, files)</div><div class='del'>-      len = srcdir.size</div><div class='del'>-    end</div><div class='del'>-    f = nil</div><div class='del'>-    Dir.glob(files) do |f|</div><div class='del'>-      f[0..len] = "" if len</div><div class='del'>-      case File.basename(f)</div><div class='del'>-      when *$NONINSTALLFILES</div><div class='del'>-        next</div><div class='del'>-      end</div><div class='del'>-      d = File.dirname(f)</div><div class='del'>-      d.sub!(prefix, "") if prefix</div><div class='del'>-      d = (d.empty? || d == ".") ? dir : File.join(dir, d)</div><div class='del'>-      f = File.join(srcprefix, f) if len</div><div class='del'>-      path[d] &lt;&lt; f</div><div class='del'>-    end</div><div class='del'>-    unless len or f</div><div class='del'>-      d = File.dirname(files)</div><div class='del'>-      d.sub!(prefix, "") if prefix</div><div class='del'>-      d = (d.empty? || d == ".") ? dir : File.join(dir, d)</div><div class='del'>-      path[d] &lt;&lt; files</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  dirs</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def install_rb(mfile, dest, srcdir = nil)</div><div class='del'>-  install_files(mfile, [["lib/**/*.rb", dest, "lib"]], nil, srcdir)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def append_library(libs, lib) # :no-doc:</div><div class='del'>-  format(LIBARG, lib) + " " + libs</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def message(*s)</div><div class='del'>-  unless Logging.quiet and not $VERBOSE</div><div class='del'>-    printf(*s)</div><div class='del'>-    $stdout.flush</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# This emits a string to stdout that allows users to see the results of the</div><div class='del'>-# various have* and find* methods as they are tested.</div><div class='del'>-#</div><div class='del'>-# Internal use only.</div><div class='del'>-#</div><div class='del'>-def checking_for(m, fmt = nil)</div><div class='del'>-  f = caller[0][/in `(.*)'$/, 1] and f &lt;&lt; ": " #` for vim</div><div class='del'>-  m = "checking #{/\Acheck/ =~ f ? '' : 'for '}#{m}... "</div><div class='del'>-  message "%s", m</div><div class='del'>-  a = r = nil</div><div class='del'>-  Logging::postpone do</div><div class='del'>-    r = yield</div><div class='del'>-    a = (fmt ? fmt % r : r ? "yes" : "no") &lt;&lt; "\n"</div><div class='del'>-    "#{f}#{m}-------------------- #{a}\n"</div><div class='del'>-  end</div><div class='del'>-  message(a)</div><div class='del'>-  Logging::message "--------------------\n\n"</div><div class='del'>-  r</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def checking_message(target, place = nil, opt = nil)</div><div class='del'>-  [["in", place], ["with", opt]].inject("#{target}") do |msg, (pre, noun)|</div><div class='del'>-    if noun</div><div class='del'>-      [[:to_str], [:join, ","], [:to_s]].each do |meth, *args|</div><div class='del'>-        if noun.respond_to?(meth)</div><div class='del'>-          break noun = noun.send(meth, *args)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      msg &lt;&lt; " #{pre} #{noun}" unless noun.empty?</div><div class='del'>-    end</div><div class='del'>-    msg</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :startdoc:</div><div class='del'>-</div><div class='del'>-# Returns whether or not +macro+ is defined either in the common header</div><div class='del'>-# files or within any +headers+ you provide.</div><div class='del'>-#</div><div class='del'>-# Any options you pass to +opt+ are passed along to the compiler.</div><div class='del'>-#</div><div class='del'>-def have_macro(macro, headers = nil, opt = "", &amp;b)</div><div class='del'>-  checking_for checking_message(macro, headers, opt) do</div><div class='del'>-    macro_defined?(macro, cpp_include(headers), opt, &amp;b)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Returns whether or not the given entry point +func+ can be found within</div><div class='del'>-# +lib+.  If +func+ is nil, the 'main()' entry point is used by default.</div><div class='del'>-# If found, it adds the library to list of libraries to be used when linking</div><div class='del'>-# your extension.</div><div class='del'>-#</div><div class='del'>-# If +headers+ are provided, it will include those header files as the</div><div class='del'>-# header files it looks in when searching for +func+.</div><div class='del'>-#</div><div class='del'>-# The real name of the library to be linked can be altered by</div><div class='del'>-# '--with-FOOlib' configuration option.</div><div class='del'>-#</div><div class='del'>-def have_library(lib, func = nil, headers = nil, &amp;b)</div><div class='del'>-  func = "main" if !func or func.empty?</div><div class='del'>-  lib = with_config(lib+'lib', lib)</div><div class='del'>-  checking_for checking_message("#{func}()", LIBARG%lib) do</div><div class='del'>-    if COMMON_LIBS.include?(lib)</div><div class='del'>-      true</div><div class='del'>-    else</div><div class='del'>-      libs = append_library($libs, lib)</div><div class='del'>-      if try_func(func, libs, headers, &amp;b)</div><div class='del'>-        $libs = libs</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'>-end</div><div class='del'>-</div><div class='del'>-# Returns whether or not the entry point +func+ can be found within the library</div><div class='del'>-# +lib+ in one of the +paths+ specified, where +paths+ is an array of strings.</div><div class='del'>-# If +func+ is nil , then the main() function is used as the entry point.</div><div class='del'>-#</div><div class='del'>-# If +lib+ is found, then the path it was found on is added to the list of</div><div class='del'>-# library paths searched and linked against.</div><div class='del'>-#</div><div class='del'>-def find_library(lib, func, *paths, &amp;b)</div><div class='del'>-  func = "main" if !func or func.empty?</div><div class='del'>-  lib = with_config(lib+'lib', lib)</div><div class='del'>-  paths = paths.collect {|path| path.split(File::PATH_SEPARATOR)}.flatten</div><div class='del'>-  checking_for "#{func}() in #{LIBARG%lib}" do</div><div class='del'>-    libpath = $LIBPATH</div><div class='del'>-    libs = append_library($libs, lib)</div><div class='del'>-    begin</div><div class='del'>-      until r = try_func(func, libs, &amp;b) or paths.empty?</div><div class='del'>-	$LIBPATH = libpath | [paths.shift]</div><div class='del'>-      end</div><div class='del'>-      if r</div><div class='del'>-	$libs = libs</div><div class='del'>-	libpath = nil</div><div class='del'>-      end</div><div class='del'>-    ensure</div><div class='del'>-      $LIBPATH = libpath if libpath</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'>-# Returns whether or not the function +func+ can be found in the common</div><div class='del'>-# header files, or within any +headers+ that you provide.  If found, a</div><div class='del'>-# macro is passed as a preprocessor constant to the compiler using the</div><div class='del'>-# function name, in uppercase, prepended with 'HAVE_'.</div><div class='del'>-#</div><div class='del'>-# For example, if have_func('foo') returned true, then the HAVE_FOO</div><div class='del'>-# preprocessor macro would be passed to the compiler.</div><div class='del'>-#</div><div class='del'>-def have_func(func, headers = nil, &amp;b)</div><div class='del'>-  checking_for checking_message("#{func}()", headers) do</div><div class='del'>-    if try_func(func, $libs, headers, &amp;b)</div><div class='del'>-      $defs.push(format("-DHAVE_%s", func.tr_cpp))</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'>-# Returns whether or not the variable +var+ can be found in the common</div><div class='del'>-# header files, or within any +headers+ that you provide.  If found, a</div><div class='del'>-# macro is passed as a preprocessor constant to the compiler using the</div><div class='del'>-# variable name, in uppercase, prepended with 'HAVE_'.</div><div class='del'>-#</div><div class='del'>-# For example, if have_var('foo') returned true, then the HAVE_FOO</div><div class='del'>-# preprocessor macro would be passed to the compiler.</div><div class='del'>-#</div><div class='del'>-def have_var(var, headers = nil, &amp;b)</div><div class='del'>-  checking_for checking_message(var, headers) do</div><div class='del'>-    if try_var(var, headers, &amp;b)</div><div class='del'>-      $defs.push(format("-DHAVE_%s", var.tr_cpp))</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'>-# Returns whether or not the given +header+ file can be found on your system.</div><div class='del'>-# If found, a macro is passed as a preprocessor constant to the compiler using</div><div class='del'>-# the header file name, in uppercase, prepended with 'HAVE_'.</div><div class='del'>-#</div><div class='del'>-# For example, if have_header('foo.h') returned true, then the HAVE_FOO_H</div><div class='del'>-# preprocessor macro would be passed to the compiler.</div><div class='del'>-#</div><div class='del'>-def have_header(header, &amp;b)</div><div class='del'>-  checking_for header do</div><div class='del'>-    if try_cpp(cpp_include(header), &amp;b)</div><div class='del'>-      $defs.push(format("-DHAVE_%s", header.tr("a-z./\055", "A-Z___")))</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'>-# Instructs mkmf to search for the given +header+ in any of the +paths+</div><div class='del'>-# provided, and returns whether or not it was found in those paths.</div><div class='del'>-#</div><div class='del'>-# If the header is found then the path it was found on is added to the list</div><div class='del'>-# of included directories that are sent to the compiler (via the -I switch).</div><div class='del'>-#</div><div class='del'>-def find_header(header, *paths)</div><div class='del'>-  message = checking_message(header, paths)</div><div class='del'>-  header = cpp_include(header)</div><div class='del'>-  checking_for message do</div><div class='del'>-    if try_cpp(header)</div><div class='del'>-      true</div><div class='del'>-    else</div><div class='del'>-      found = false</div><div class='del'>-      paths.each do |dir|</div><div class='del'>-        opt = "-I#{dir}".quote</div><div class='del'>-        if try_cpp(header, opt)</div><div class='del'>-          $INCFLAGS &lt;&lt; " " &lt;&lt; opt</div><div class='del'>-          found = true</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      found</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Returns whether or not the struct of type +type+ contains +member+.  If</div><div class='del'>-# it does not, or the struct type can't be found, then false is returned.  You</div><div class='del'>-# may optionally specify additional +headers+ in which to look for the struct</div><div class='del'>-# (in addition to the common header files).</div><div class='del'>-#</div><div class='del'>-# If found, a macro is passed as a preprocessor constant to the compiler using</div><div class='del'>-# the member name, in uppercase, prepended with 'HAVE_ST_'.</div><div class='del'>-#</div><div class='del'>-# For example, if have_struct_member('struct foo', 'bar') returned true, then the</div><div class='del'>-# HAVE_ST_BAR preprocessor macro would be passed to the compiler.</div><div class='del'>-# </div><div class='del'>-def have_struct_member(type, member, headers = nil, &amp;b)</div><div class='del'>-  checking_for checking_message("#{type}.#{member}", headers) do</div><div class='del'>-    if try_compile(&lt;&lt;"SRC", &amp;b)</div><div class='del'>-#{COMMON_HEADERS}</div><div class='del'>-#{cpp_include(headers)}</div><div class='del'>-/*top*/</div><div class='del'>-int main() { return 0; }</div><div class='del'>-int s = (char *)&amp;((#{type}*)0)-&gt;#{member} - (char *)0;</div><div class='del'>-SRC</div><div class='del'>-      $defs.push(format("-DHAVE_ST_%s", member.tr_cpp))</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'>-def try_type(type, headers = nil, opt = "", &amp;b)</div><div class='del'>-  if try_compile(&lt;&lt;"SRC", opt, &amp;b)</div><div class='del'>-#{COMMON_HEADERS}</div><div class='del'>-#{cpp_include(headers)}</div><div class='del'>-/*top*/</div><div class='del'>-typedef #{type} conftest_type;</div><div class='del'>-int conftestval[sizeof(conftest_type)?1:-1];</div><div class='del'>-SRC</div><div class='del'>-    $defs.push(format("-DHAVE_TYPE_%s", type.tr_cpp))</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'>-# Returns whether or not the static type +type+ is defined.  You may</div><div class='del'>-# optionally pass additional +headers+ to check against in addition to the</div><div class='del'>-# common header files.</div><div class='del'>-#</div><div class='del'>-# You may also pass additional flags to +opt+ which are then passed along to</div><div class='del'>-# the compiler.</div><div class='del'>-#</div><div class='del'>-# If found, a macro is passed as a preprocessor constant to the compiler using</div><div class='del'>-# the type name, in uppercase, prepended with 'HAVE_TYPE_'.</div><div class='del'>-#</div><div class='del'>-# For example, if have_type('foo') returned true, then the HAVE_TYPE_FOO</div><div class='del'>-# preprocessor macro would be passed to the compiler.</div><div class='del'>-#</div><div class='del'>-def have_type(type, headers = nil, opt = "", &amp;b)</div><div class='del'>-  checking_for checking_message(type, headers, opt) do</div><div class='del'>-    try_type(type, headers, opt, &amp;b)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Returns where the static type +type+ is defined.</div><div class='del'>-#</div><div class='del'>-# You may also pass additional flags to +opt+ which are then passed along to</div><div class='del'>-# the compiler.</div><div class='del'>-#</div><div class='del'>-# See also +have_type+.</div><div class='del'>-#</div><div class='del'>-def find_type(type, opt, *headers, &amp;b)</div><div class='del'>-  opt ||= ""</div><div class='del'>-  fmt = "not found"</div><div class='del'>-  def fmt.%(x)</div><div class='del'>-    x ? x.respond_to?(:join) ? x.join(",") : x : self</div><div class='del'>-  end</div><div class='del'>-  checking_for checking_message(type, nil, opt), fmt do</div><div class='del'>-    headers.find do |h|</div><div class='del'>-      try_type(type, h, opt, &amp;b)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def try_const(const, headers = nil, opt = "", &amp;b)</div><div class='del'>-  const, type = *const</div><div class='del'>-  if try_compile(&lt;&lt;"SRC", opt, &amp;b)</div><div class='del'>-#{COMMON_HEADERS}</div><div class='del'>-#{cpp_include(headers)}</div><div class='del'>-/*top*/</div><div class='del'>-typedef #{type || 'int'} conftest_type;</div><div class='del'>-conftest_type conftestval = #{type ? '' : '(int)'}#{const};</div><div class='del'>-SRC</div><div class='del'>-    $defs.push(format("-DHAVE_CONST_%s", const.tr_cpp))</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'>-# Returns whether or not the constant +const+ is defined.  You may</div><div class='del'>-# optionally pass the +type+ of +const+ as &lt;code&gt;[const, type]&lt;/code&gt;,</div><div class='del'>-# like as:</div><div class='del'>-#</div><div class='del'>-#   have_const(%w[PTHREAD_MUTEX_INITIALIZER pthread_mutex_t], "pthread.h")</div><div class='del'>-#</div><div class='del'>-# You may also pass additional +headers+ to check against in addition</div><div class='del'>-# to the common header files, and additional flags to +opt+ which are</div><div class='del'>-# then passed along to the compiler.</div><div class='del'>-#</div><div class='del'>-# If found, a macro is passed as a preprocessor constant to the compiler using</div><div class='del'>-# the type name, in uppercase, prepended with 'HAVE_CONST_'.</div><div class='del'>-#</div><div class='del'>-# For example, if have_const('foo') returned true, then the HAVE_CONST_FOO</div><div class='del'>-# preprocessor macro would be passed to the compiler.</div><div class='del'>-#</div><div class='del'>-def have_const(const, headers = nil, opt = "", &amp;b)</div><div class='del'>-  checking_for checking_message([*const].compact.join(' '), headers, opt) do</div><div class='del'>-    try_const(const, headers, opt, &amp;b)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Returns the size of the given +type+.  You may optionally specify additional</div><div class='del'>-# +headers+ to search in for the +type+.</div><div class='del'>-#</div><div class='del'>-# If found, a macro is passed as a preprocessor constant to the compiler using</div><div class='del'>-# the type name, in uppercase, prepended with 'SIZEOF_', followed by the type</div><div class='del'>-# name, followed by '=X' where 'X' is the actual size.</div><div class='del'>-#</div><div class='del'>-# For example, if check_sizeof('mystruct') returned 12, then the</div><div class='del'>-# SIZEOF_MYSTRUCT=12 preprocessor macro would be passed to the compiler.</div><div class='del'>-#</div><div class='del'>-def check_sizeof(type, headers = nil, &amp;b)</div><div class='del'>-  expr = "sizeof(#{type})"</div><div class='del'>-  fmt = "%d"</div><div class='del'>-  def fmt.%(x)</div><div class='del'>-    x ? super : "failed"</div><div class='del'>-  end</div><div class='del'>-  checking_for checking_message("size of #{type}", headers), fmt do</div><div class='del'>-    if size = try_constant(expr, headers, &amp;b)</div><div class='del'>-      $defs.push(format("-DSIZEOF_%s=%d", type.tr_cpp, size))</div><div class='del'>-      size</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :stopdoc:</div><div class='del'>-</div><div class='del'>-# Used internally by the what_type? method to determine if +type+ is a scalar</div><div class='del'>-# pointer.</div><div class='del'>-def scalar_ptr_type?(type, member = nil, headers = nil, &amp;b)</div><div class='del'>-  try_compile(&lt;&lt;"SRC", &amp;b)   # pointer</div><div class='del'>-#{COMMON_HEADERS}</div><div class='del'>-#{cpp_include(headers)}</div><div class='del'>-/*top*/</div><div class='del'>-volatile #{type} conftestval;</div><div class='del'>-int main() { return 0; }</div><div class='del'>-int t() {return (int)(1-*(conftestval#{member ? ".#{member}" : ""}));}</div><div class='del'>-SRC</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Used internally by the what_type? method to determine if +type+ is a scalar</div><div class='del'>-# pointer.</div><div class='del'>-def scalar_type?(type, member = nil, headers = nil, &amp;b)</div><div class='del'>-  try_compile(&lt;&lt;"SRC", &amp;b)   # pointer</div><div class='del'>-#{COMMON_HEADERS}</div><div class='del'>-#{cpp_include(headers)}</div><div class='del'>-/*top*/</div><div class='del'>-volatile #{type} conftestval;</div><div class='del'>-int main() { return 0; }</div><div class='del'>-int t() {return (int)(1-(conftestval#{member ? ".#{member}" : ""}));}</div><div class='del'>-SRC</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def what_type?(type, member = nil, headers = nil, &amp;b)</div><div class='del'>-  m = "#{type}"</div><div class='del'>-  name = type</div><div class='del'>-  if member</div><div class='del'>-    m &lt;&lt; "." &lt;&lt; member</div><div class='del'>-    name = "(((#{type} *)0)-&gt;#{member})"</div><div class='del'>-  end</div><div class='del'>-  fmt = "seems %s"</div><div class='del'>-  def fmt.%(x)</div><div class='del'>-    x ? super : "unknown"</div><div class='del'>-  end</div><div class='del'>-  checking_for checking_message(m, headers), fmt do</div><div class='del'>-    if scalar_ptr_type?(type, member, headers, &amp;b)</div><div class='del'>-      if try_static_assert("sizeof(*#{name}) == 1", headers)</div><div class='del'>-        "string"</div><div class='del'>-      end</div><div class='del'>-    elsif scalar_type?(type, member, headers, &amp;b)</div><div class='del'>-      if try_static_assert("sizeof(#{name}) &gt; sizeof(long)", headers)</div><div class='del'>-        "long long"</div><div class='del'>-      elsif try_static_assert("sizeof(#{name}) &gt; sizeof(int)", headers)</div><div class='del'>-        "long"</div><div class='del'>-      elsif try_static_assert("sizeof(#{name}) &gt; sizeof(short)", headers)</div><div class='del'>-        "int"</div><div class='del'>-      elsif try_static_assert("sizeof(#{name}) &gt; 1", headers)</div><div class='del'>-        "short"</div><div class='del'>-      else</div><div class='del'>-        "char"</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'>-# This method is used internally by the find_executable method.</div><div class='del'>-#</div><div class='del'>-# Internal use only.</div><div class='del'>-#</div><div class='del'>-def find_executable0(bin, path = nil)</div><div class='del'>-  ext = config_string('EXEEXT')</div><div class='del'>-  if File.expand_path(bin) == bin</div><div class='del'>-    return bin if File.executable?(bin)</div><div class='del'>-    ext and File.executable?(file = bin + ext) and return file</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-  if path ||= ENV['PATH']</div><div class='del'>-    path = path.split(File::PATH_SEPARATOR)</div><div class='del'>-  else</div><div class='del'>-    path = %w[/usr/local/bin /usr/ucb /usr/bin /bin]</div><div class='del'>-  end</div><div class='del'>-  file = nil</div><div class='del'>-  path.each do |dir|</div><div class='del'>-    return file if File.executable?(file = File.join(dir, bin))</div><div class='del'>-    return file if ext and File.executable?(file &lt;&lt; ext)</div><div class='del'>-  end</div><div class='del'>-  nil</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :startdoc:</div><div class='del'>-</div><div class='del'>-# Searches for the executable +bin+ on +path+. The default path is your</div><div class='del'>-# PATH environment variable. If that isn't defined, it will resort to</div><div class='del'>-# searching /usr/local/bin, /usr/ucb, /usr/bin and /bin.</div><div class='del'>-#</div><div class='del'>-# If found, it will return the full path, including the executable name,</div><div class='del'>-# of where it was found.</div><div class='del'>-#</div><div class='del'>-# Note that this method does not actually affect the generated Makefile.</div><div class='del'>-#</div><div class='del'>-def find_executable(bin, path = nil)</div><div class='del'>-  checking_for checking_message(bin, path) do</div><div class='del'>-    find_executable0(bin, path)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :stopdoc:</div><div class='del'>-</div><div class='del'>-def arg_config(config, *defaults, &amp;block)</div><div class='del'>-  $arg_config &lt;&lt; [config, *defaults]</div><div class='del'>-  defaults &lt;&lt; nil if !block and defaults.empty?</div><div class='del'>-  $configure_args.fetch(config.tr('_', '-'), *defaults, &amp;block)</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :startdoc:</div><div class='del'>-</div><div class='del'>-# Tests for the presence of a --with-&lt;tt&gt;config&lt;/tt&gt; or --without-&lt;tt&gt;config&lt;/tt&gt;</div><div class='del'>-# option. Returns true if the with option is given, false if the without</div><div class='del'>-# option is given, and the default value otherwise.</div><div class='del'>-#</div><div class='del'>-# This can be useful for adding custom definitions, such as debug information.</div><div class='del'>-#</div><div class='del'>-# Example:</div><div class='del'>-#</div><div class='del'>-#    if with_config("debug")</div><div class='del'>-#       $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG"</div><div class='del'>-#    end</div><div class='del'>-#</div><div class='del'>-def with_config(config, *defaults)</div><div class='del'>-  config = config.sub(/^--with[-_]/, '')</div><div class='del'>-  val = arg_config("--with-"+config) do</div><div class='del'>-    if arg_config("--without-"+config)</div><div class='del'>-      false</div><div class='del'>-    elsif block_given?</div><div class='del'>-      yield(config, *defaults)</div><div class='del'>-    else</div><div class='del'>-      break *defaults</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  case val</div><div class='del'>-  when "yes"</div><div class='del'>-    true</div><div class='del'>-  when "no"</div><div class='del'>-    false</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'>-# Tests for the presence of an --enable-&lt;tt&gt;config&lt;/tt&gt; or</div><div class='del'>-# --disable-&lt;tt&gt;config&lt;/tt&gt; option. Returns true if the enable option is given,</div><div class='del'>-# false if the disable option is given, and the default value otherwise.</div><div class='del'>-#</div><div class='del'>-# This can be useful for adding custom definitions, such as debug information.</div><div class='del'>-#</div><div class='del'>-# Example:</div><div class='del'>-#</div><div class='del'>-#    if enable_config("debug")</div><div class='del'>-#       $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG"</div><div class='del'>-#    end</div><div class='del'>-#</div><div class='del'>-def enable_config(config, *defaults)</div><div class='del'>-  if arg_config("--enable-"+config)</div><div class='del'>-    true</div><div class='del'>-  elsif arg_config("--disable-"+config)</div><div class='del'>-    false</div><div class='del'>-  elsif block_given?</div><div class='del'>-    yield(config, *defaults)</div><div class='del'>-  else</div><div class='del'>-    return *defaults</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Generates a header file consisting of the various macro definitions generated</div><div class='del'>-# by other methods such as have_func and have_header. These are then wrapped in</div><div class='del'>-# a custom #ifndef based on the +header+ file name, which defaults to</div><div class='del'>-# 'extconf.h'.</div><div class='del'>-#</div><div class='del'>-# For example:</div><div class='del'>-# </div><div class='del'>-#    # extconf.rb</div><div class='del'>-#    require 'mkmf'</div><div class='del'>-#    have_func('realpath')</div><div class='del'>-#    have_header('sys/utime.h')</div><div class='del'>-#    create_header</div><div class='del'>-#    create_makefile('foo')</div><div class='del'>-#</div><div class='del'>-# The above script would generate the following extconf.h file:</div><div class='del'>-#</div><div class='del'>-#    #ifndef EXTCONF_H</div><div class='del'>-#    #define EXTCONF_H</div><div class='del'>-#    #define HAVE_REALPATH 1</div><div class='del'>-#    #define HAVE_SYS_UTIME_H 1</div><div class='del'>-#    #endif</div><div class='del'>-#</div><div class='del'>-# Given that the create_header method generates a file based on definitions</div><div class='del'>-# set earlier in your extconf.rb file, you will probably want to make this</div><div class='del'>-# one of the last methods you call in your script.</div><div class='del'>-#</div><div class='del'>-def create_header(header = "extconf.h")</div><div class='del'>-  message "creating %s\n", header</div><div class='del'>-  sym = header.tr("a-z./\055", "A-Z___")</div><div class='del'>-  hdr = ["#ifndef #{sym}\n#define #{sym}\n"]</div><div class='del'>-  for line in $defs</div><div class='del'>-    case line</div><div class='del'>-    when /^-D([^=]+)(?:=(.*))?/</div><div class='del'>-      hdr &lt;&lt; "#define #$1 #{$2 ? Shellwords.shellwords($2)[0] : 1}\n"</div><div class='del'>-    when /^-U(.*)/</div><div class='del'>-      hdr &lt;&lt; "#undef #$1\n"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  hdr &lt;&lt; "#endif\n"</div><div class='del'>-  hdr = hdr.join</div><div class='del'>-  unless (IO.read(header) == hdr rescue false)</div><div class='del'>-    open(header, "w") do |hfile|</div><div class='del'>-      hfile.write(hdr)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  $extconf_h = header</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Sets a +target+ name that the user can then use to configure various 'with'</div><div class='del'>-# options with on the command line by using that name.  For example, if the</div><div class='del'>-# target is set to "foo", then the user could use the --with-foo-dir command</div><div class='del'>-# line option.</div><div class='del'>-#</div><div class='del'>-# You may pass along additional 'include' or 'lib' defaults via the +idefault+</div><div class='del'>-# and +ldefault+ parameters, respectively.</div><div class='del'>-#</div><div class='del'>-# Note that dir_config only adds to the list of places to search for libraries</div><div class='del'>-# and include files.  It does not link the libraries into your application.</div><div class='del'>-#</div><div class='del'>-def dir_config(target, idefault=nil, ldefault=nil)</div><div class='del'>-  if dir = with_config(target + "-dir", (idefault unless ldefault))</div><div class='del'>-    defaults = Array === dir ? dir : dir.split(File::PATH_SEPARATOR)</div><div class='del'>-    idefault = ldefault = nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  idir = with_config(target + "-include", idefault)</div><div class='del'>-  $arg_config.last[1] ||= "${#{target}-dir}/include"</div><div class='del'>-  ldir = with_config(target + "-lib", ldefault)</div><div class='del'>-  $arg_config.last[1] ||= "${#{target}-dir}/lib"</div><div class='del'>-</div><div class='del'>-  idirs = idir ? Array === idir ? idir : idir.split(File::PATH_SEPARATOR) : []</div><div class='del'>-  if defaults</div><div class='del'>-    idirs.concat(defaults.collect {|dir| dir + "/include"})</div><div class='del'>-    idir = ([idir] + idirs).compact.join(File::PATH_SEPARATOR)</div><div class='del'>-  end</div><div class='del'>-  unless idirs.empty?</div><div class='del'>-    idirs.collect! {|dir| "-I" + dir}</div><div class='del'>-    idirs -= Shellwords.shellwords($CPPFLAGS)</div><div class='del'>-    unless idirs.empty?</div><div class='del'>-      $CPPFLAGS = (idirs.quote &lt;&lt; $CPPFLAGS).join(" ")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ldirs = ldir ? Array === ldir ? ldir : ldir.split(File::PATH_SEPARATOR) : []</div><div class='del'>-  if defaults</div><div class='del'>-    ldirs.concat(defaults.collect {|dir| dir + "/lib"})</div><div class='del'>-    ldir = ([ldir] + ldirs).compact.join(File::PATH_SEPARATOR)</div><div class='del'>-  end</div><div class='del'>-  $LIBPATH = ldirs | $LIBPATH</div><div class='del'>-</div><div class='del'>-  [idir, ldir]</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :stopdoc:</div><div class='del'>-</div><div class='del'>-# Handles meta information about installed libraries. Uses your platform's</div><div class='del'>-# pkg-config program if it has one.</div><div class='del'>-def pkg_config(pkg)</div><div class='del'>-  if pkgconfig = with_config("#{pkg}-config") and find_executable0(pkgconfig)</div><div class='del'>-    # iff package specific config command is given</div><div class='del'>-    get = proc {|opt| `#{pkgconfig} --#{opt}`.chomp}</div><div class='del'>-  elsif ($PKGCONFIG ||= </div><div class='del'>-         (pkgconfig = with_config("pkg-config", ("pkg-config" unless CROSS_COMPILING))) &amp;&amp;</div><div class='del'>-         find_executable0(pkgconfig) &amp;&amp; pkgconfig) and</div><div class='del'>-      system("#{$PKGCONFIG} --exists #{pkg}")</div><div class='del'>-    # default to pkg-config command</div><div class='del'>-    get = proc {|opt| `#{$PKGCONFIG} --#{opt} #{pkg}`.chomp}</div><div class='del'>-  elsif find_executable0(pkgconfig = "#{pkg}-config")</div><div class='del'>-    # default to package specific config command, as a last resort.</div><div class='del'>-    get = proc {|opt| `#{pkgconfig} --#{opt}`.chomp}</div><div class='del'>-  end</div><div class='del'>-  if get</div><div class='del'>-    cflags = get['cflags']</div><div class='del'>-    ldflags = get['libs']</div><div class='del'>-    libs = get['libs-only-l']</div><div class='del'>-    ldflags = (Shellwords.shellwords(ldflags) - Shellwords.shellwords(libs)).quote.join(" ")</div><div class='del'>-    $CFLAGS += " " &lt;&lt; cflags</div><div class='del'>-    $LDFLAGS += " " &lt;&lt; ldflags</div><div class='del'>-    $libs += " " &lt;&lt; libs</div><div class='del'>-    Logging::message "package configuration for %s\n", pkg</div><div class='del'>-    Logging::message "cflags: %s\nldflags: %s\nlibs: %s\n\n",</div><div class='del'>-                     cflags, ldflags, libs</div><div class='del'>-    [cflags, ldflags, libs]</div><div class='del'>-  else</div><div class='del'>-    Logging::message "package configuration for %s is not found\n", pkg</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def with_destdir(dir)</div><div class='del'>-  dir = dir.sub($dest_prefix_pattern, '')</div><div class='del'>-  /\A\$[\(\{]/ =~ dir ? dir : "$(DESTDIR)"+dir</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Converts forward slashes to backslashes. Aimed at MS Windows.</div><div class='del'>-#</div><div class='del'>-# Internal use only.</div><div class='del'>-#</div><div class='del'>-def winsep(s)</div><div class='del'>-  s.tr('/', '\\')</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def configuration(srcdir)</div><div class='del'>-  mk = []</div><div class='del'>-  vpath = %w[$(srcdir) $(topdir) $(hdrdir)]</div><div class='del'>-  if !CROSS_COMPILING</div><div class='del'>-    case CONFIG['build_os']</div><div class='del'>-    when 'cygwin'</div><div class='del'>-      if CONFIG['target_os'] != 'cygwin'</div><div class='del'>-        vpath.each {|p| p.sub!(/.*/, '$(shell cygpath -u \&amp;)')}</div><div class='del'>-      end</div><div class='del'>-    when 'msdosdjgpp', 'mingw32'</div><div class='del'>-      CONFIG['PATH_SEPARATOR'] = ';'</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  mk &lt;&lt; %{</div><div class='del'>-SHELL = /bin/sh</div><div class='del'>-</div><div class='del'>-#### Start of system configuration section. ####</div><div class='del'>-#{</div><div class='del'>-if $extmk</div><div class='del'>-  "top_srcdir = " + $top_srcdir.sub(%r"\A#{Regexp.quote($topdir)}/", "$(topdir)/")</div><div class='del'>-end</div><div class='del'>-}</div><div class='del'>-srcdir = #{srcdir.gsub(/\$\((srcdir)\)|\$\{(srcdir)\}/) {CONFIG[$1||$2]}.quote}</div><div class='del'>-topdir = #{($extmk ? CONFIG["topdir"] : $topdir).quote}</div><div class='del'>-hdrdir = #{$extmk ? CONFIG["hdrdir"].quote : '$(topdir)'}</div><div class='del'>-VPATH = #{vpath.join(CONFIG['PATH_SEPARATOR'])}</div><div class='del'>-}</div><div class='del'>-  if $extmk</div><div class='del'>-    mk &lt;&lt; "RUBYLIB = -\nRUBYOPT = -rpurelib.rb\n"</div><div class='del'>-  end</div><div class='del'>-  if destdir = CONFIG["prefix"][$dest_prefix_pattern, 1]</div><div class='del'>-    mk &lt;&lt; "\nDESTDIR = #{destdir}\n"</div><div class='del'>-  end</div><div class='del'>-  CONFIG.each do |key, var|</div><div class='del'>-    next unless /prefix$/ =~ key</div><div class='del'>-    mk &lt;&lt; "#{key} = #{with_destdir(var)}\n"</div><div class='del'>-  end</div><div class='del'>-  CONFIG.each do |key, var|</div><div class='del'>-    next if /^abs_/ =~ key</div><div class='del'>-    next unless /^(?:src|top|hdr|(.*))dir$/ =~ key and $1</div><div class='del'>-    mk &lt;&lt; "#{key} = #{with_destdir(var)}\n"</div><div class='del'>-  end</div><div class='del'>-  if !$extmk and !$configure_args.has_key?('--ruby') and</div><div class='del'>-      sep = config_string('BUILD_FILE_SEPARATOR')</div><div class='del'>-    sep = ":/=#{sep}"</div><div class='del'>-  else</div><div class='del'>-    sep = ""</div><div class='del'>-  end</div><div class='del'>-  extconf_h = $extconf_h ? "-DRUBY_EXTCONF_H=\\\"$(RUBY_EXTCONF_H)\\\" " : $defs.join(" ")&lt;&lt;" "</div><div class='del'>-  mk &lt;&lt; %{</div><div class='del'>-CC = #{CONFIG['CC']}</div><div class='del'>-LIBRUBY = #{CONFIG['LIBRUBY']}</div><div class='del'>-LIBRUBY_A = #{CONFIG['LIBRUBY_A']}</div><div class='del'>-LIBRUBYARG_SHARED = #$LIBRUBYARG_SHARED</div><div class='del'>-LIBRUBYARG_STATIC = #$LIBRUBYARG_STATIC</div><div class='del'>-</div><div class='del'>-RUBY_EXTCONF_H = #{$extconf_h}</div><div class='del'>-CFLAGS   = #{$static ? '' : CONFIG['CCDLFLAGS']} #$CFLAGS #$ARCH_FLAG</div><div class='del'>-INCFLAGS = -I. #$INCFLAGS</div><div class='del'>-DEFS     = #{CONFIG['DEFS']}</div><div class='del'>-CPPFLAGS = #{extconf_h}#{$CPPFLAGS}</div><div class='del'>-CXXFLAGS = $(CFLAGS) #{CONFIG['CXXFLAGS']}</div><div class='del'>-ldflags  = #{$LDFLAGS}</div><div class='del'>-dldflags = #{$DLDFLAGS}</div><div class='del'>-archflag = #{$ARCH_FLAG}</div><div class='del'>-DLDFLAGS = $(ldflags) $(dldflags) $(archflag)</div><div class='del'>-LDSHARED = #{CONFIG['LDSHARED']}</div><div class='del'>-AR = #{CONFIG['AR']}</div><div class='del'>-EXEEXT = #{CONFIG['EXEEXT']}</div><div class='del'>-</div><div class='del'>-RUBY_INSTALL_NAME = #{CONFIG['RUBY_INSTALL_NAME']}</div><div class='del'>-RUBY_SO_NAME = #{CONFIG['RUBY_SO_NAME']}</div><div class='del'>-arch = #{CONFIG['arch']}</div><div class='del'>-sitearch = #{CONFIG['sitearch']}</div><div class='del'>-ruby_version = #{Config::CONFIG['ruby_version']}</div><div class='del'>-ruby = #{$ruby}</div><div class='del'>-RUBY = $(ruby#{sep})</div><div class='del'>-RM = #{config_string('RM') || '$(RUBY) -run -e rm -- -f'}</div><div class='del'>-MAKEDIRS = #{config_string('MAKEDIRS') || '@$(RUBY) -run -e mkdir -- -p'}</div><div class='del'>-INSTALL = #{config_string('INSTALL') || '@$(RUBY) -run -e install -- -vp'}</div><div class='del'>-INSTALL_PROG = #{config_string('INSTALL_PROG') || '$(INSTALL) -m 0755'}</div><div class='del'>-INSTALL_DATA = #{config_string('INSTALL_DATA') || '$(INSTALL) -m 0644'}</div><div class='del'>-COPY = #{config_string('CP') || '@$(RUBY) -run -e cp -- -v'}</div><div class='del'>-</div><div class='del'>-#### End of system configuration section. ####</div><div class='del'>-</div><div class='del'>-preload = #{$preload ? $preload.join(' ') : ''}</div><div class='del'>-}</div><div class='del'>-  if $nmake == ?b</div><div class='del'>-    mk.each do |x|</div><div class='del'>-      x.gsub!(/^(MAKEDIRS|INSTALL_(?:PROG|DATA))+\s*=.*\n/) do</div><div class='del'>-        "!ifndef " + $1 + "\n" +</div><div class='del'>-        $&amp; +</div><div class='del'>-	"!endif\n"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  mk</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def dummy_makefile(srcdir)</div><div class='del'>-  configuration(srcdir) &lt;&lt; &lt;&lt;RULES &lt;&lt; CLEANINGS</div><div class='del'>-CLEANFILES = #{$cleanfiles.join(' ')}</div><div class='del'>-DISTCLEANFILES = #{$distcleanfiles.join(' ')}</div><div class='del'>-</div><div class='del'>-all install static install-so install-rb: Makefile</div><div class='del'>-</div><div class='del'>-RULES</div><div class='del'>-end</div><div class='del'>-# :startdoc:</div><div class='del'>-</div><div class='del'>-# Generates the Makefile for your extension, passing along any options and</div><div class='del'>-# preprocessor constants that you may have generated through other methods.</div><div class='del'>-#</div><div class='del'>-# The +target+ name should correspond the name of the global function name</div><div class='del'>-# defined within your C extension, minus the 'Init_'.  For example, if your</div><div class='del'>-# C extension is defined as 'Init_foo', then your target would simply be 'foo'.</div><div class='del'>-#</div><div class='del'>-# If any '/' characters are present in the target name, only the last name</div><div class='del'>-# is interpreted as the target name, and the rest are considered toplevel</div><div class='del'>-# directory names, and the generated Makefile will be altered accordingly to</div><div class='del'>-# follow that directory structure.</div><div class='del'>-#</div><div class='del'>-# For example, if you pass 'test/foo' as a target name, your extension will</div><div class='del'>-# be installed under the 'test' directory.  This means that in order to</div><div class='del'>-# load the file within a Ruby program later, that directory structure will</div><div class='del'>-# have to be followed, e.g. "require 'test/foo'".</div><div class='del'>-#</div><div class='del'>-# The +srcprefix+ should be used when your source files are not in the same</div><div class='del'>-# directory as your build script. This will not only eliminate the need for</div><div class='del'>-# you to manually copy the source files into the same directory as your build</div><div class='del'>-# script, but it also sets the proper +target_prefix+ in the generated</div><div class='del'>-# Makefile.</div><div class='del'>-#</div><div class='del'>-# Setting the +target_prefix+ will, in turn, install the generated binary in</div><div class='del'>-# a directory under your Config::CONFIG['sitearchdir'] that mimics your local</div><div class='del'>-# filesystem when you run 'make install'.</div><div class='del'>-#</div><div class='del'>-# For example, given the following file tree:</div><div class='del'>-#</div><div class='del'>-#    ext/</div><div class='del'>-#       extconf.rb</div><div class='del'>-#       test/</div><div class='del'>-#          foo.c</div><div class='del'>-#</div><div class='del'>-# And given the following code:</div><div class='del'>-#</div><div class='del'>-#    create_makefile('test/foo', 'test')</div><div class='del'>-#</div><div class='del'>-# That will set the +target_prefix+ in the generated Makefile to 'test'. That,</div><div class='del'>-# in turn, will create the following file tree when installed via the</div><div class='del'>-# 'make install' command:</div><div class='del'>-#</div><div class='del'>-#    /path/to/ruby/sitearchdir/test/foo.so</div><div class='del'>-#</div><div class='del'>-# It is recommended that you use this approach to generate your makefiles,</div><div class='del'>-# instead of copying files around manually, because some third party</div><div class='del'>-# libraries may depend on the +target_prefix+ being set properly.</div><div class='del'>-#</div><div class='del'>-# The +srcprefix+ argument can be used to override the default source</div><div class='del'>-# directory, i.e. the current directory . It is included as part of the VPATH</div><div class='del'>-# and added to the list of INCFLAGS.</div><div class='del'>-#</div><div class='del'>-def create_makefile(target, srcprefix = nil)</div><div class='del'>-  $target = target</div><div class='del'>-  libpath = $DEFLIBPATH|$LIBPATH</div><div class='del'>-  message "creating Makefile\n"</div><div class='del'>-  rm_f "conftest*"</div><div class='del'>-  if CONFIG["DLEXT"] == $OBJEXT</div><div class='del'>-    for lib in libs = $libs.split</div><div class='del'>-      lib.sub!(/-l(.*)/, %%"lib\\1.#{$LIBEXT}"%)</div><div class='del'>-    end</div><div class='del'>-    $defs.push(format("-DEXTLIB='%s'", libs.join(",")))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if target.include?('/')</div><div class='del'>-    target_prefix, target = File.split(target)</div><div class='del'>-    target_prefix[0,0] = '/'</div><div class='del'>-  else</div><div class='del'>-    target_prefix = ""</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  srcprefix ||= '$(srcdir)'</div><div class='del'>-  Config::expand(srcdir = srcprefix.dup)</div><div class='del'>-</div><div class='del'>-  if not $objs</div><div class='del'>-    $objs = []</div><div class='del'>-    srcs = Dir[File.join(srcdir, "*.{#{SRC_EXT.join(%q{,})}}")]</div><div class='del'>-    for f in srcs</div><div class='del'>-      obj = File.basename(f, ".*") &lt;&lt; ".o"</div><div class='del'>-      $objs.push(obj) unless $objs.index(obj)</div><div class='del'>-    end</div><div class='del'>-  elsif !(srcs = $srcs)</div><div class='del'>-    srcs = $objs.collect {|obj| obj.sub(/\.o\z/, '.c')}</div><div class='del'>-  end</div><div class='del'>-  $srcs = srcs</div><div class='del'>-  for i in $objs</div><div class='del'>-    i.sub!(/\.o\z/, ".#{$OBJEXT}")</div><div class='del'>-  end</div><div class='del'>-  $objs = $objs.join(" ")</div><div class='del'>-</div><div class='del'>-  target = nil if $objs == ""</div><div class='del'>-</div><div class='del'>-  if target and EXPORT_PREFIX</div><div class='del'>-    if File.exist?(File.join(srcdir, target + '.def'))</div><div class='del'>-      deffile = "$(srcdir)/$(TARGET).def"</div><div class='del'>-      unless EXPORT_PREFIX.empty?</div><div class='del'>-        makedef = %{-pe "sub!(/^(?=\\w)/,'#{EXPORT_PREFIX}') unless 1../^EXPORTS$/i"}</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      makedef = %{-e "puts 'EXPORTS', '#{EXPORT_PREFIX}Init_$(TARGET)'"}</div><div class='del'>-    end</div><div class='del'>-    if makedef</div><div class='del'>-      $distcleanfiles &lt;&lt; '$(DEFFILE)'</div><div class='del'>-      origdef = deffile</div><div class='del'>-      deffile = "$(TARGET)-$(arch).def"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  origdef ||= ''</div><div class='del'>-</div><div class='del'>-  libpath = libpathflag(libpath)</div><div class='del'>-</div><div class='del'>-  dllib = target ? "$(TARGET).#{CONFIG['DLEXT']}" : ""</div><div class='del'>-  staticlib = target ? "$(TARGET).#$LIBEXT" : ""</div><div class='del'>-  mfile = open("Makefile", "wb")</div><div class='del'>-  mfile.print configuration(srcprefix)</div><div class='del'>-  mfile.print "</div><div class='del'>-libpath = #{($DEFLIBPATH|$LIBPATH).join(" ")}</div><div class='del'>-LIBPATH = #{libpath}</div><div class='del'>-DEFFILE = #{deffile}</div><div class='del'>-</div><div class='del'>-CLEANFILES = #{$cleanfiles.join(' ')}</div><div class='del'>-DISTCLEANFILES = #{$distcleanfiles.join(' ')}</div><div class='del'>-</div><div class='del'>-extout = #{$extout}</div><div class='del'>-extout_prefix = #{$extout_prefix}</div><div class='del'>-target_prefix = #{target_prefix}</div><div class='del'>-LOCAL_LIBS = #{$LOCAL_LIBS}</div><div class='del'>-LIBS = #{$LIBRUBYARG} #{$libs} #{$LIBS}</div><div class='del'>-SRCS = #{srcs.collect(&amp;File.method(:basename)).join(' ')}</div><div class='del'>-OBJS = #{$objs}</div><div class='del'>-TARGET = #{target}</div><div class='del'>-DLLIB = #{dllib}</div><div class='del'>-EXTSTATIC = #{$static || ""}</div><div class='del'>-STATIC_LIB = #{staticlib unless $static.nil?}</div><div class='del'>-#{!$extout &amp;&amp; defined?($installed_list) ? "INSTALLED_LIST = #{$installed_list}\n" : ""}</div><div class='del'>-"</div><div class='del'>-  install_dirs.each {|d| mfile.print("%-14s= %s\n" % d) if /^[[:upper:]]/ =~ d[0]}</div><div class='del'>-  n = ($extout ? '$(RUBYARCHDIR)/' : '') + '$(TARGET).'</div><div class='del'>-  mfile.print "</div><div class='del'>-TARGET_SO     = #{($extout ? '$(RUBYARCHDIR)/' : '')}$(DLLIB)</div><div class='del'>-CLEANLIBS     = #{n}#{CONFIG['DLEXT']} #{n}il? #{n}tds #{n}map</div><div class='del'>-CLEANOBJS     = *.#{$OBJEXT} *.#{$LIBEXT} *.s[ol] *.pdb *.exp *.bak</div><div class='del'>-</div><div class='del'>-all:		#{$extout ? "install" : target ? "$(DLLIB)" : "Makefile"}</div><div class='del'>-static:		$(STATIC_LIB)#{$extout ? " install-rb" : ""}</div><div class='del'>-"</div><div class='del'>-  mfile.print CLEANINGS</div><div class='del'>-  dirs = []</div><div class='del'>-  mfile.print "install: install-so install-rb\n\n"</div><div class='del'>-  sodir = (dir = "$(RUBYARCHDIR)").dup</div><div class='del'>-  mfile.print("install-so: ")</div><div class='del'>-  if target</div><div class='del'>-    f = "$(DLLIB)"</div><div class='del'>-    dest = "#{dir}/#{f}"</div><div class='del'>-    mfile.puts dir, "install-so: #{dest}"</div><div class='del'>-    unless $extout</div><div class='del'>-      mfile.print "#{dest}: #{f}\n"</div><div class='del'>-      if (sep = config_string('BUILD_FILE_SEPARATOR'))</div><div class='del'>-        f.gsub!("/", sep)</div><div class='del'>-        dir.gsub!("/", sep)</div><div class='del'>-        sep = ":/="+sep</div><div class='del'>-        f.gsub!(/(\$\(\w+)(\))/) {$1+sep+$2}</div><div class='del'>-        f.gsub!(/(\$\{\w+)(\})/) {$1+sep+$2}</div><div class='del'>-        dir.gsub!(/(\$\(\w+)(\))/) {$1+sep+$2}</div><div class='del'>-        dir.gsub!(/(\$\{\w+)(\})/) {$1+sep+$2}</div><div class='del'>-      end</div><div class='del'>-      mfile.print "\t$(INSTALL_PROG) #{f} #{dir}\n"</div><div class='del'>-      if defined?($installed_list)</div><div class='del'>-	mfile.print "\t@echo #{dir}/#{File.basename(f)}&gt;&gt;$(INSTALLED_LIST)\n"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  else</div><div class='del'>-    mfile.puts "Makefile"</div><div class='del'>-  end</div><div class='del'>-  mfile.print("install-rb: pre-install-rb install-rb-default\n")</div><div class='del'>-  mfile.print("install-rb-default: pre-install-rb-default\n")</div><div class='del'>-  mfile.print("pre-install-rb: Makefile\n")</div><div class='del'>-  mfile.print("pre-install-rb-default: Makefile\n")</div><div class='del'>-  for sfx, i in [["-default", [["lib/**/*.rb", "$(RUBYLIBDIR)", "lib"]]], ["", $INSTALLFILES]]</div><div class='del'>-    files = install_files(mfile, i, nil, srcprefix) or next</div><div class='del'>-    for dir, *files in files</div><div class='del'>-      unless dirs.include?(dir)</div><div class='del'>-	dirs &lt;&lt; dir</div><div class='del'>-	mfile.print "pre-install-rb#{sfx}: #{dir}\n"</div><div class='del'>-      end</div><div class='del'>-      files.each do |f|</div><div class='del'>-	dest = "#{dir}/#{File.basename(f)}"</div><div class='del'>-	mfile.print("install-rb#{sfx}: #{dest}\n")</div><div class='del'>-	mfile.print("#{dest}: #{f} #{dir}\n\t$(#{$extout ? 'COPY' : 'INSTALL_DATA'}) ")</div><div class='del'>-	sep = config_string('BUILD_FILE_SEPARATOR')</div><div class='del'>-	if sep</div><div class='del'>-	  f = f.gsub("/", sep)</div><div class='del'>-	  sep = ":/="+sep</div><div class='del'>-	  f = f.gsub(/(\$\(\w+)(\))/) {$1+sep+$2}</div><div class='del'>-	  f = f.gsub(/(\$\{\w+)(\})/) {$1+sep+$2}</div><div class='del'>-	else</div><div class='del'>-	  sep = ""</div><div class='del'>-	end</div><div class='del'>-	mfile.print("#{f} $(@D#{sep})\n")</div><div class='del'>-	if defined?($installed_list) and !$extout</div><div class='del'>-	  mfile.print("\t@echo #{dest}&gt;&gt;$(INSTALLED_LIST)\n")</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  dirs.unshift(sodir) if target and !dirs.include?(sodir)</div><div class='del'>-  dirs.each {|dir| mfile.print "#{dir}:\n\t$(MAKEDIRS) $@\n"}</div><div class='del'>-</div><div class='del'>-  mfile.print &lt;&lt;-SITEINSTALL</div><div class='del'>-</div><div class='del'>-site-install: site-install-so site-install-rb</div><div class='del'>-site-install-so: install-so</div><div class='del'>-site-install-rb: install-rb</div><div class='del'>-</div><div class='del'>-  SITEINSTALL</div><div class='del'>-</div><div class='del'>-  return unless target</div><div class='del'>-</div><div class='del'>-  mfile.puts SRC_EXT.collect {|ext| ".path.#{ext} = $(VPATH)"} if $nmake == ?b</div><div class='del'>-  mfile.print ".SUFFIXES: .#{SRC_EXT.join(' .')} .#{$OBJEXT}\n"</div><div class='del'>-  mfile.print "\n"</div><div class='del'>-</div><div class='del'>-  CXX_EXT.each do |ext|</div><div class='del'>-    COMPILE_RULES.each do |rule|</div><div class='del'>-      mfile.printf(rule, ext, $OBJEXT)</div><div class='del'>-      mfile.printf("\n\t%s\n\n", COMPILE_CXX)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  %w[c].each do |ext|</div><div class='del'>-    COMPILE_RULES.each do |rule|</div><div class='del'>-      mfile.printf(rule, ext, $OBJEXT)</div><div class='del'>-      mfile.printf("\n\t%s\n\n", COMPILE_C)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  mfile.print "$(RUBYARCHDIR)/" if $extout</div><div class='del'>-  mfile.print "$(DLLIB): ", (makedef ? "$(DEFFILE) " : ""), "$(OBJS)\n"</div><div class='del'>-  mfile.print "\t@-$(RM) $@\n"</div><div class='del'>-  mfile.print "\t@-$(MAKEDIRS) $(@D)\n" if $extout</div><div class='del'>-  link_so = LINK_SO.gsub(/^/, "\t")</div><div class='del'>-  mfile.print link_so, "\n\n"</div><div class='del'>-  unless $static.nil?</div><div class='del'>-    mfile.print "$(STATIC_LIB): $(OBJS)\n\t"</div><div class='del'>-    mfile.print "$(AR) #{config_string('ARFLAGS') || 'cru '}$@ $(OBJS)"</div><div class='del'>-    config_string('RANLIB') do |ranlib|</div><div class='del'>-      mfile.print "\n\t@-#{ranlib} $(DLLIB) 2&gt; /dev/null || true"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  mfile.print "\n\n"</div><div class='del'>-  if makedef</div><div class='del'>-    mfile.print "$(DEFFILE): #{origdef}\n"</div><div class='del'>-    mfile.print "\t$(RUBY) #{makedef} #{origdef} &gt; $@\n\n"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  depend = File.join(srcdir, "depend")</div><div class='del'>-  if File.exist?(depend)</div><div class='del'>-    suffixes = []</div><div class='del'>-    depout = []</div><div class='del'>-    open(depend, "r") do |dfile|</div><div class='del'>-      mfile.printf "###\n"</div><div class='del'>-      cont = implicit = nil</div><div class='del'>-      impconv = proc do</div><div class='del'>-	COMPILE_RULES.each {|rule| depout &lt;&lt; (rule % implicit[0]) &lt;&lt; implicit[1]}</div><div class='del'>-	implicit = nil</div><div class='del'>-      end</div><div class='del'>-      ruleconv = proc do |line|</div><div class='del'>-	if implicit</div><div class='del'>-	  if /\A\t/ =~ line</div><div class='del'>-	    implicit[1] &lt;&lt; line</div><div class='del'>-	    next</div><div class='del'>-	  else</div><div class='del'>-	    impconv[]</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	if m = /\A\.(\w+)\.(\w+)(?:\s*:)/.match(line)</div><div class='del'>-	  suffixes &lt;&lt; m[1] &lt;&lt; m[2]</div><div class='del'>-	  implicit = [[m[1], m[2]], [m.post_match]]</div><div class='del'>-	  next</div><div class='del'>-	elsif RULE_SUBST and /\A(?!\s*\w+\s*=)[$\w][^#]*:/ =~ line</div><div class='del'>-	  line.gsub!(%r"(\s)(?!\.)([^$(){}+=:\s\/\\,]+)(?=\s|\z)") {$1 + RULE_SUBST % $2}</div><div class='del'>-	end</div><div class='del'>-	depout &lt;&lt; line</div><div class='del'>-      end</div><div class='del'>-      while line = dfile.gets()</div><div class='del'>-	line.gsub!(/\.o\b/, ".#{$OBJEXT}")</div><div class='del'>-	line.gsub!(/\$\((?:hdr|top)dir\)\/config.h/, $config_h) if $config_h</div><div class='del'>-	if /(?:^|[^\\])(?:\\\\)*\\$/ =~ line</div><div class='del'>-	  (cont ||= []) &lt;&lt; line</div><div class='del'>-	  next</div><div class='del'>-	elsif cont</div><div class='del'>-	  line = (cont &lt;&lt; line).join</div><div class='del'>-	  cont = nil</div><div class='del'>-	end</div><div class='del'>-	ruleconv.call(line)</div><div class='del'>-      end</div><div class='del'>-      if cont</div><div class='del'>-	ruleconv.call(cont.join)</div><div class='del'>-      elsif implicit</div><div class='del'>-	impconv.call</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    unless suffixes.empty?</div><div class='del'>-      mfile.print ".SUFFIXES: .", suffixes.uniq.join(" ."), "\n\n"</div><div class='del'>-    end</div><div class='del'>-    mfile.print "$(OBJS): $(RUBY_EXTCONF_H)\n\n" if $extconf_h</div><div class='del'>-    mfile.print depout</div><div class='del'>-  else</div><div class='del'>-    headers = %w[ruby.h defines.h]</div><div class='del'>-    if RULE_SUBST</div><div class='del'>-      headers.each {|h| h.sub!(/.*/) {|*m| RULE_SUBST % m}}</div><div class='del'>-    end</div><div class='del'>-    headers &lt;&lt; $config_h if $config_h</div><div class='del'>-    headers &lt;&lt; "$(RUBY_EXTCONF_H)" if $extconf_h</div><div class='del'>-    mfile.print "$(OBJS): ", headers.join(' '), "\n"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $makefile_created = true</div><div class='del'>-ensure</div><div class='del'>-  mfile.close if mfile</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :stopdoc:</div><div class='del'>-</div><div class='del'>-def init_mkmf(config = CONFIG)</div><div class='del'>-  $makefile_created = false</div><div class='del'>-  $arg_config = []</div><div class='del'>-  $enable_shared = config['ENABLE_SHARED'] == 'yes'</div><div class='del'>-  $defs = []</div><div class='del'>-  $extconf_h = nil</div><div class='del'>-  $CFLAGS = with_config("cflags", arg_config("CFLAGS", config["CFLAGS"])).dup</div><div class='del'>-  $ARCH_FLAG = with_config("arch_flag", arg_config("ARCH_FLAG", config["ARCH_FLAG"])).dup</div><div class='del'>-  $CPPFLAGS = with_config("cppflags", arg_config("CPPFLAGS", config["CPPFLAGS"])).dup</div><div class='del'>-  $LDFLAGS = with_config("ldflags", arg_config("LDFLAGS", config["LDFLAGS"])).dup</div><div class='del'>-  $INCFLAGS = "-I$(topdir) -I$(hdrdir) -I$(srcdir)"</div><div class='del'>-  $DLDFLAGS = with_config("dldflags", arg_config("DLDFLAGS", config["DLDFLAGS"])).dup</div><div class='del'>-  $LIBEXT = config['LIBEXT'].dup</div><div class='del'>-  $OBJEXT = config["OBJEXT"].dup</div><div class='del'>-  $LIBS = "#{config['LIBS']} #{config['DLDLIBS']}"</div><div class='del'>-  $LIBRUBYARG = ""</div><div class='del'>-  $LIBRUBYARG_STATIC = config['LIBRUBYARG_STATIC']</div><div class='del'>-  $LIBRUBYARG_SHARED = config['LIBRUBYARG_SHARED']</div><div class='del'>-  $DEFLIBPATH = $extmk ? ["$(topdir)"] : CROSS_COMPILING ? [] : ["$(libdir)"]</div><div class='del'>-  $DEFLIBPATH.unshift(".")</div><div class='del'>-  $LIBPATH = []</div><div class='del'>-  $INSTALLFILES = []</div><div class='del'>-  $NONINSTALLFILES = [/~\z/, /\A#.*#\z/, /\A\.#/, /\.bak\z/i, /\.orig\z/, /\.rej\z/, /\.l[ao]\z/, /\.o\z/]</div><div class='del'>-</div><div class='del'>-  $objs = nil</div><div class='del'>-  $srcs = nil</div><div class='del'>-  $libs = ""</div><div class='del'>-  if $enable_shared or Config.expand(config["LIBRUBY"].dup) != Config.expand(config["LIBRUBY_A"].dup)</div><div class='del'>-    $LIBRUBYARG = config['LIBRUBYARG']</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $LOCAL_LIBS = ""</div><div class='del'>-</div><div class='del'>-  $cleanfiles = config_string('CLEANFILES') {|s| Shellwords.shellwords(s)} || []</div><div class='del'>-  $cleanfiles &lt;&lt; "mkmf.log"</div><div class='del'>-  $distcleanfiles = config_string('DISTCLEANFILES') {|s| Shellwords.shellwords(s)} || []</div><div class='del'>-</div><div class='del'>-  $extout ||= nil</div><div class='del'>-  $extout_prefix ||= nil</div><div class='del'>-</div><div class='del'>-  $arg_config.clear</div><div class='del'>-  dir_config("opt")</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-FailedMessage = &lt;&lt;MESSAGE</div><div class='del'>-Could not create Makefile due to some reason, probably lack of</div><div class='del'>-necessary libraries and/or headers.  Check the mkmf.log file for more</div><div class='del'>-details.  You may need configuration options.</div><div class='del'>-</div><div class='del'>-Provided configuration options:</div><div class='del'>-MESSAGE</div><div class='del'>-</div><div class='del'>-# Returns whether or not the Makefile was successfully generated. If not,</div><div class='del'>-# the script will abort with an error message.</div><div class='del'>-#</div><div class='del'>-# Internal use only.</div><div class='del'>-#</div><div class='del'>-def mkmf_failed(path)</div><div class='del'>-  unless $makefile_created or File.exist?("Makefile")</div><div class='del'>-    opts = $arg_config.collect {|t, n| "\t#{t}#{n ? "=#{n}" : ""}\n"}</div><div class='del'>-    abort "*** #{path} failed ***\n" + FailedMessage + opts.join</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :startdoc:</div><div class='del'>-</div><div class='del'>-init_mkmf</div><div class='del'>-</div><div class='del'>-$make = with_config("make-prog", ENV["MAKE"] || "make")</div><div class='del'>-make, = Shellwords.shellwords($make)</div><div class='del'>-$nmake = nil</div><div class='del'>-case</div><div class='del'>-when $mswin</div><div class='del'>-  $nmake = ?m if /nmake/i =~ make</div><div class='del'>-when $bccwin</div><div class='del'>-  $nmake = ?b if /Borland/i =~ `#{make} -h`</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-Config::CONFIG["srcdir"] = CONFIG["srcdir"] =</div><div class='del'>-  $srcdir = arg_config("--srcdir", File.dirname($0))</div><div class='del'>-$configure_args["--topsrcdir"] ||= $srcdir</div><div class='del'>-if $curdir = arg_config("--curdir")</div><div class='del'>-  Config.expand(curdir = $curdir.dup)</div><div class='del'>-else</div><div class='del'>-  curdir = $curdir = "."</div><div class='del'>-end</div><div class='del'>-unless File.expand_path(Config::CONFIG["topdir"]) == File.expand_path(curdir)</div><div class='del'>-  CONFIG["topdir"] = $curdir</div><div class='del'>-  Config::CONFIG["topdir"] = curdir</div><div class='del'>-end</div><div class='del'>-$configure_args["--topdir"] ||= $curdir</div><div class='del'>-$ruby = arg_config("--ruby", File.join(Config::CONFIG["bindir"], CONFIG["ruby_install_name"]))</div><div class='del'>-</div><div class='del'>-split = Shellwords.method(:shellwords).to_proc</div><div class='del'>-</div><div class='del'>-EXPORT_PREFIX = config_string('EXPORT_PREFIX') {|s| s.strip}</div><div class='del'>-</div><div class='del'>-hdr = []</div><div class='del'>-config_string('COMMON_MACROS') do |s|</div><div class='del'>-  Shellwords.shellwords(s).each do |w|</div><div class='del'>-    hdr &lt;&lt; "#define " + w.split(/=/, 2).join(" ")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-config_string('COMMON_HEADERS') do |s|</div><div class='del'>-  Shellwords.shellwords(s).each {|s| hdr &lt;&lt; "#include &lt;#{s}&gt;"}</div><div class='del'>-end</div><div class='del'>-COMMON_HEADERS = hdr.join("\n")</div><div class='del'>-COMMON_LIBS = config_string('COMMON_LIBS', &amp;split) || []</div><div class='del'>-</div><div class='del'>-COMPILE_RULES = config_string('COMPILE_RULES', &amp;split) || %w[.%s.%s:]</div><div class='del'>-RULE_SUBST = config_string('RULE_SUBST')</div><div class='del'>-COMPILE_C = config_string('COMPILE_C') || '$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $&lt;'</div><div class='del'>-COMPILE_CXX = config_string('COMPILE_CXX') || '$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $&lt;'</div><div class='del'>-TRY_LINK = config_string('TRY_LINK') ||</div><div class='del'>-  "$(CC) #{OUTFLAG}conftest $(INCFLAGS) $(CPPFLAGS) " \</div><div class='del'>-  "$(CFLAGS) $(src) $(LIBPATH) $(LDFLAGS) $(ARCH_FLAG) $(LOCAL_LIBS) $(LIBS)"</div><div class='del'>-LINK_SO = config_string('LINK_SO') ||</div><div class='del'>-  if CONFIG["DLEXT"] == $OBJEXT</div><div class='del'>-    "ld $(DLDFLAGS) -r -o $@ $(OBJS)\n"</div><div class='del'>-  else</div><div class='del'>-    "$(LDSHARED) #{OUTFLAG}$@ $(OBJS) " \</div><div class='del'>-    "$(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)"</div><div class='del'>-  end</div><div class='del'>-LIBPATHFLAG = config_string('LIBPATHFLAG') || ' -L"%s"'</div><div class='del'>-RPATHFLAG = config_string('RPATHFLAG') || ''</div><div class='del'>-LIBARG = config_string('LIBARG') || '-l%s'</div><div class='del'>-</div><div class='del'>-sep = config_string('BUILD_FILE_SEPARATOR') {|sep| ":/=#{sep}" if sep != "/"} || ""</div><div class='del'>-CLEANINGS = "</div><div class='del'>-clean:</div><div class='del'>-		@-$(RM) $(CLEANLIBS#{sep}) $(CLEANOBJS#{sep}) $(CLEANFILES#{sep})</div><div class='del'>-</div><div class='del'>-distclean:	clean</div><div class='del'>-		@-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log</div><div class='del'>-		@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES#{sep})</div><div class='del'>-</div><div class='del'>-realclean:	distclean</div><div class='del'>-"</div><div class='del'>-</div><div class='del'>-if not $extmk and /\A(extconf|makefile).rb\z/ =~ File.basename($0)</div><div class='del'>-  END {mkmf_failed($0)}</div><div class='del'>-end</div><div class='head'>diff --git a/lib/monitor.rb b/lib/monitor.rb<br/>deleted file mode 100644<br/>index 4c146c8086..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/monitor.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/monitor.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,352 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= monitor.rb</div><div class='del'>-</div><div class='del'>-Copyright (C) 2001  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-</div><div class='del'>-This library is distributed under the terms of the Ruby license.</div><div class='del'>-You can freely distribute/modify this library.</div><div class='del'>-</div><div class='del'>-== example</div><div class='del'>-</div><div class='del'>-This is a simple example.</div><div class='del'>-</div><div class='del'>-  require 'monitor.rb'</div><div class='del'>-  </div><div class='del'>-  buf = []</div><div class='del'>-  buf.extend(MonitorMixin)</div><div class='del'>-  empty_cond = buf.new_cond</div><div class='del'>-  </div><div class='del'>-  # consumer</div><div class='del'>-  Thread.start do</div><div class='del'>-    loop do</div><div class='del'>-      buf.synchronize do</div><div class='del'>-        empty_cond.wait_while { buf.empty? }</div><div class='del'>-        print buf.shift</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # producer</div><div class='del'>-  while line = ARGF.gets</div><div class='del'>-    buf.synchronize do</div><div class='del'>-      buf.push(line)</div><div class='del'>-      empty_cond.signal</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-The consumer thread waits for the producer thread to push a line</div><div class='del'>-to buf while buf.empty?, and the producer thread (main thread)</div><div class='del'>-reads a line from ARGF and push it to buf, then call</div><div class='del'>-empty_cond.signal.</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'>-# Adds monitor functionality to an arbitrary object by mixing the module with</div><div class='del'>-# +include+.  For example:</div><div class='del'>-#</div><div class='del'>-#    require 'monitor.rb'</div><div class='del'>-#    </div><div class='del'>-#    buf = []</div><div class='del'>-#    buf.extend(MonitorMixin)</div><div class='del'>-#    empty_cond = buf.new_cond</div><div class='del'>-#    </div><div class='del'>-#    # consumer</div><div class='del'>-#    Thread.start do</div><div class='del'>-#      loop do</div><div class='del'>-#        buf.synchronize do</div><div class='del'>-#          empty_cond.wait_while { buf.empty? }</div><div class='del'>-#          print buf.shift</div><div class='del'>-#        end</div><div class='del'>-#      end</div><div class='del'>-#    end</div><div class='del'>-#    </div><div class='del'>-#    # producer</div><div class='del'>-#    while line = ARGF.gets</div><div class='del'>-#      buf.synchronize do</div><div class='del'>-#        buf.push(line)</div><div class='del'>-#        empty_cond.signal</div><div class='del'>-#      end</div><div class='del'>-#    end</div><div class='del'>-# </div><div class='del'>-# The consumer thread waits for the producer thread to push a line</div><div class='del'>-# to buf while buf.empty?, and the producer thread (main thread)</div><div class='del'>-# reads a line from ARGF and push it to buf, then call</div><div class='del'>-# empty_cond.signal.</div><div class='del'>-#</div><div class='del'>-module MonitorMixin</div><div class='del'>-  #</div><div class='del'>-  # FIXME: This isn't documented in Nutshell.</div><div class='del'>-  #</div><div class='del'>-  # Since MonitorMixin.new_cond returns a ConditionVariable, and the example</div><div class='del'>-  # above calls while_wait and signal, this class should be documented.</div><div class='del'>-  #</div><div class='del'>-  class ConditionVariable</div><div class='del'>-    class Timeout &lt; Exception; end</div><div class='del'>-    </div><div class='del'>-    # Create a new timer with the argument timeout, and add the</div><div class='del'>-    # current thread to the list of waiters.  Then the thread is</div><div class='del'>-    # stopped.  It will be resumed when a corresponding #signal </div><div class='del'>-    # occurs.</div><div class='del'>-    def wait(timeout = nil)</div><div class='del'>-      @monitor.instance_eval {mon_check_owner()}</div><div class='del'>-      timer = create_timer(timeout)</div><div class='del'>-      </div><div class='del'>-      Thread.critical = true</div><div class='del'>-      count = @monitor.instance_eval {mon_exit_for_cond()}</div><div class='del'>-      @waiters.push(Thread.current)</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-	Thread.stop</div><div class='del'>-        return true</div><div class='del'>-      rescue Timeout</div><div class='del'>-        return false</div><div class='del'>-      ensure</div><div class='del'>-	Thread.critical = true</div><div class='del'>-	begin</div><div class='del'>-	  if timer &amp;&amp; timer.alive?</div><div class='del'>-	    Thread.kill(timer)</div><div class='del'>-	  end</div><div class='del'>-	  if @waiters.include?(Thread.current)  # interrupted?</div><div class='del'>-	    @waiters.delete(Thread.current)</div><div class='del'>-	  end</div><div class='del'>-	  @monitor.instance_eval {mon_enter_for_cond(count)}</div><div class='del'>-	ensure</div><div class='del'>-	  Thread.critical = 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'>-    # call #wait while the supplied block returns +true+.</div><div class='del'>-    def wait_while</div><div class='del'>-      while yield</div><div class='del'>-	wait</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # call #wait until the supplied block returns +true+.</div><div class='del'>-    def wait_until</div><div class='del'>-      until yield</div><div class='del'>-	wait</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Wake up and run the next waiter</div><div class='del'>-    def signal</div><div class='del'>-      @monitor.instance_eval {mon_check_owner()}</div><div class='del'>-      Thread.critical = true</div><div class='del'>-      t = @waiters.shift</div><div class='del'>-      t.wakeup if t</div><div class='del'>-      Thread.critical = false</div><div class='del'>-      Thread.pass</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Wake up all the waiters.</div><div class='del'>-    def broadcast</div><div class='del'>-      @monitor.instance_eval {mon_check_owner()}</div><div class='del'>-      Thread.critical = true</div><div class='del'>-      for t in @waiters</div><div class='del'>-	t.wakeup</div><div class='del'>-      end</div><div class='del'>-      @waiters.clear</div><div class='del'>-      Thread.critical = false</div><div class='del'>-      Thread.pass</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def count_waiters</div><div class='del'>-      return @waiters.length</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def initialize(monitor)</div><div class='del'>-      @monitor = monitor</div><div class='del'>-      @waiters = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def create_timer(timeout)</div><div class='del'>-      if timeout</div><div class='del'>-	waiter = Thread.current</div><div class='del'>-	return Thread.start {</div><div class='del'>-	  Thread.pass</div><div class='del'>-	  sleep(timeout)</div><div class='del'>-	  Thread.critical = true</div><div class='del'>-	  waiter.raise(Timeout.new)</div><div class='del'>-	}</div><div class='del'>-      else</div><div class='del'>-        return 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 self.extend_object(obj)</div><div class='del'>-    super(obj)</div><div class='del'>-    obj.instance_eval {mon_initialize()}</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Attempts to enter exclusive section.  Returns +false+ if lock fails.</div><div class='del'>-  #</div><div class='del'>-  def mon_try_enter</div><div class='del'>-    result = false</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    if @mon_owner.nil?</div><div class='del'>-      @mon_owner = Thread.current</div><div class='del'>-    end</div><div class='del'>-    if @mon_owner == Thread.current</div><div class='del'>-      @mon_count += 1</div><div class='del'>-      result = true</div><div class='del'>-    end</div><div class='del'>-    Thread.critical = false</div><div class='del'>-    return result</div><div class='del'>-  end</div><div class='del'>-  # For backward compatibility</div><div class='del'>-  alias try_mon_enter mon_try_enter</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Enters exclusive section.</div><div class='del'>-  #</div><div class='del'>-  def mon_enter</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    mon_acquire(@mon_entering_queue)</div><div class='del'>-    @mon_count += 1</div><div class='del'>-  ensure</div><div class='del'>-    Thread.critical = false</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # Leaves exclusive section.</div><div class='del'>-  #</div><div class='del'>-  def mon_exit</div><div class='del'>-    mon_check_owner</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    @mon_count -= 1</div><div class='del'>-    if @mon_count == 0</div><div class='del'>-      mon_release</div><div class='del'>-    end</div><div class='del'>-    Thread.critical = false</div><div class='del'>-    Thread.pass</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Enters exclusive section and executes the block.  Leaves the exclusive</div><div class='del'>-  # section automatically when the block exits.  See example under</div><div class='del'>-  # +MonitorMixin+.</div><div class='del'>-  #</div><div class='del'>-  def mon_synchronize</div><div class='del'>-    mon_enter</div><div class='del'>-    begin</div><div class='del'>-      yield</div><div class='del'>-    ensure</div><div class='del'>-      mon_exit</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias synchronize mon_synchronize</div><div class='del'>-  </div><div class='del'>-  #</div><div class='del'>-  # FIXME: This isn't documented in Nutshell.</div><div class='del'>-  # </div><div class='del'>-  # Create a new condition variable for this monitor.</div><div class='del'>-  # This facilitates control of the monitor with #signal and #wait.</div><div class='del'>-  #</div><div class='del'>-  def new_cond</div><div class='del'>-    return ConditionVariable.new(self)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    super</div><div class='del'>-    mon_initialize</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # called by initialize method to set defaults for instance variables.</div><div class='del'>-  def mon_initialize</div><div class='del'>-    @mon_owner = nil</div><div class='del'>-    @mon_count = 0</div><div class='del'>-    @mon_entering_queue = []</div><div class='del'>-    @mon_waiting_queue = []</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Throw a ThreadError exception if the current thread</div><div class='del'>-  # does't own the monitor</div><div class='del'>-  def mon_check_owner</div><div class='del'>-    if @mon_owner != Thread.current</div><div class='del'>-      raise ThreadError, "current thread not owner"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mon_acquire(queue)</div><div class='del'>-    while @mon_owner &amp;&amp; @mon_owner != Thread.current</div><div class='del'>-      queue.push(Thread.current)</div><div class='del'>-      Thread.stop</div><div class='del'>-      Thread.critical = true</div><div class='del'>-    end</div><div class='del'>-    @mon_owner = Thread.current</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mon_release</div><div class='del'>-    @mon_owner = nil</div><div class='del'>-    t = @mon_waiting_queue.shift</div><div class='del'>-    t = @mon_entering_queue.shift unless t</div><div class='del'>-    t.wakeup if t</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mon_enter_for_cond(count)</div><div class='del'>-    mon_acquire(@mon_waiting_queue)</div><div class='del'>-    @mon_count = count</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mon_exit_for_cond</div><div class='del'>-    count = @mon_count</div><div class='del'>-    @mon_count = 0</div><div class='del'>-    return count</div><div class='del'>-  ensure</div><div class='del'>-    mon_release</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Monitors provide means of mutual exclusion for Thread programming.</div><div class='del'>-# A critical region is created by means of the synchronize method,</div><div class='del'>-# which takes a block.</div><div class='del'>-# The condition variables (created with #new_cond) may be used </div><div class='del'>-# to control the execution of a monitor with #signal and #wait.</div><div class='del'>-#</div><div class='del'>-# the Monitor class wraps MonitorMixin, and provides aliases</div><div class='del'>-#  alias try_enter try_mon_enter</div><div class='del'>-#  alias enter mon_enter</div><div class='del'>-#  alias exit mon_exit</div><div class='del'>-# to access its methods more concisely.</div><div class='del'>-class Monitor</div><div class='del'>-  include MonitorMixin</div><div class='del'>-  alias try_enter try_mon_enter</div><div class='del'>-  alias enter mon_enter</div><div class='del'>-  alias exit mon_exit</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# Documentation comments:</div><div class='del'>-#  - All documentation comes from Nutshell.</div><div class='del'>-#  - MonitorMixin.new_cond appears in the example, but is not documented in</div><div class='del'>-#    Nutshell.</div><div class='del'>-#  - All the internals (internal modules Accessible and Initializable, class</div><div class='del'>-#    ConditionVariable) appear in RDoc.  It might be good to hide them, by</div><div class='del'>-#    making them private, or marking them :nodoc:, etc.</div><div class='del'>-#  - The entire example from the RD section at the top is replicated in the RDoc</div><div class='del'>-#    comment for MonitorMixin.  Does the RD section need to remain?</div><div class='del'>-#  - RDoc doesn't recognise aliases, so we have mon_synchronize documented, but</div><div class='del'>-#    not synchronize.</div><div class='del'>-#  - mon_owner is in Nutshell, but appears as an accessor in a separate module</div><div class='del'>-#    here, so is hard/impossible to RDoc.  Some other useful accessors</div><div class='del'>-#    (mon_count and some queue stuff) are also in this module, and don't appear</div><div class='del'>-#    directly in the RDoc output.</div><div class='del'>-#  - in short, it may be worth changing the code layout in this file to make the</div><div class='del'>-#    documentation easier</div><div class='del'>-</div><div class='del'>-# Local variables:</div><div class='del'>-# mode: Ruby</div><div class='del'>-# tab-width: 8</div><div class='del'>-# End:</div><div class='head'>diff --git a/lib/mutex_m.rb b/lib/mutex_m.rb<br/>deleted file mode 100644<br/>index 8e0d42bc8d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/mutex_m.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/mutex_m.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,122 +0,0 @@</div><div class='del'>-#--</div><div class='del'>-#   mutex_m.rb - </div><div class='del'>-#   	$Release Version: 3.0$</div><div class='del'>-#   	$Revision: 1.7 $</div><div class='del'>-#   	$Date: 1998/02/27 04:28:57 $</div><div class='del'>-#       Original from mutex.rb</div><div class='del'>-#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)</div><div class='del'>-#       modified by matz</div><div class='del'>-#       patched by akira yamada</div><div class='del'>-#++</div><div class='del'>-#</div><div class='del'>-# == Usage</div><div class='del'>-#</div><div class='del'>-# Extend an object and use it like a Mutex object:</div><div class='del'>-#</div><div class='del'>-#   require "mutex_m.rb"</div><div class='del'>-#   obj = Object.new</div><div class='del'>-#   obj.extend Mutex_m</div><div class='del'>-#   # ...</div><div class='del'>-#</div><div class='del'>-# Or, include Mutex_m in a class to have its instances behave like a Mutex</div><div class='del'>-# object:</div><div class='del'>-#</div><div class='del'>-#   class Foo</div><div class='del'>-#     include Mutex_m</div><div class='del'>-#     # ...</div><div class='del'>-#   end</div><div class='del'>-#   </div><div class='del'>-#   obj = Foo.new</div><div class='del'>-</div><div class='del'>-module Mutex_m</div><div class='del'>-  def Mutex_m.define_aliases(cl)</div><div class='del'>-    cl.module_eval %q{</div><div class='del'>-      alias locked? mu_locked?</div><div class='del'>-      alias lock mu_lock</div><div class='del'>-      alias unlock mu_unlock</div><div class='del'>-      alias try_lock mu_try_lock</div><div class='del'>-      alias synchronize mu_synchronize</div><div class='del'>-    }</div><div class='del'>-  end  </div><div class='del'>-</div><div class='del'>-  def Mutex_m.append_features(cl)</div><div class='del'>-    super</div><div class='del'>-    define_aliases(cl) unless cl.instance_of?(Module)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def Mutex_m.extend_object(obj)</div><div class='del'>-    super</div><div class='del'>-    obj.mu_extended</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def mu_extended</div><div class='del'>-    unless (defined? locked? and</div><div class='del'>-	    defined? lock and</div><div class='del'>-	    defined? unlock and</div><div class='del'>-	    defined? try_lock and</div><div class='del'>-	    defined? synchronize)</div><div class='del'>-      Mutex_m.define_aliases(class&lt;&lt;self;self;end)</div><div class='del'>-    end</div><div class='del'>-    mu_initialize</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # locking </div><div class='del'>-  def mu_synchronize</div><div class='del'>-    begin</div><div class='del'>-      mu_lock</div><div class='del'>-      yield</div><div class='del'>-    ensure</div><div class='del'>-      mu_unlock</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def mu_locked?</div><div class='del'>-    @mu_locked</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def mu_try_lock</div><div class='del'>-    result = false</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    unless @mu_locked</div><div class='del'>-      @mu_locked = true</div><div class='del'>-      result = true</div><div class='del'>-    end</div><div class='del'>-    Thread.critical = false</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def mu_lock</div><div class='del'>-    while (Thread.critical = true; @mu_locked)</div><div class='del'>-      @mu_waiting.push Thread.current</div><div class='del'>-      Thread.stop</div><div class='del'>-    end</div><div class='del'>-    @mu_locked = true</div><div class='del'>-    Thread.critical = false</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def mu_unlock</div><div class='del'>-    return unless @mu_locked</div><div class='del'>-    Thread.critical = true</div><div class='del'>-    wait = @mu_waiting</div><div class='del'>-    @mu_waiting = []</div><div class='del'>-    @mu_locked = false</div><div class='del'>-    Thread.critical = false</div><div class='del'>-    for w in wait</div><div class='del'>-      w.run</div><div class='del'>-    end</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  private</div><div class='del'>-  </div><div class='del'>-  def mu_initialize</div><div class='del'>-    @mu_waiting = []</div><div class='del'>-    @mu_locked = false;</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(*args)</div><div class='del'>-    mu_initialize</div><div class='del'>-    super</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb<br/>deleted file mode 100644<br/>index ca2c00a790..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/net/ftp.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/ftp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,924 +0,0 @@</div><div class='del'>-# </div><div class='del'>-# = net/ftp.rb - FTP Client Library</div><div class='del'>-# </div><div class='del'>-# Written by Shugo Maeda &lt;shugo@ruby-lang.org&gt;.</div><div class='del'>-#</div><div class='del'>-# Documentation by Gavin Sinclair, sourced from "Programming Ruby" (Hunt/Thomas)</div><div class='del'>-# and "Ruby In a Nutshell" (Matsumoto), used with permission.</div><div class='del'>-# </div><div class='del'>-# This library is distributed under the terms of the Ruby license.</div><div class='del'>-# You can freely distribute/modify this library.</div><div class='del'>-#</div><div class='del'>-# It is included in the Ruby standard library.</div><div class='del'>-#</div><div class='del'>-# See the Net::FTP class for an overview.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "socket"</div><div class='del'>-require "monitor"</div><div class='del'>-</div><div class='del'>-module Net</div><div class='del'>-</div><div class='del'>-  # :stopdoc:</div><div class='del'>-  class FTPError &lt; StandardError; end</div><div class='del'>-  class FTPReplyError &lt; FTPError; end</div><div class='del'>-  class FTPTempError &lt; FTPError; end </div><div class='del'>-  class FTPPermError &lt; FTPError; end </div><div class='del'>-  class FTPProtoError &lt; FTPError; end</div><div class='del'>-  # :startdoc:</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This class implements the File Transfer Protocol.  If you have used a</div><div class='del'>-  # command-line FTP program, and are familiar with the commands, you will be</div><div class='del'>-  # able to use this class easily.  Some extra features are included to take</div><div class='del'>-  # advantage of Ruby's style and strengths.</div><div class='del'>-  #</div><div class='del'>-  # == Example</div><div class='del'>-  # </div><div class='del'>-  #   require 'net/ftp'</div><div class='del'>-  #</div><div class='del'>-  # === Example 1</div><div class='del'>-  #  </div><div class='del'>-  #   ftp = Net::FTP.new('ftp.netlab.co.jp')</div><div class='del'>-  #   ftp.login</div><div class='del'>-  #   files = ftp.chdir('pub/lang/ruby/contrib')</div><div class='del'>-  #   files = ftp.list('n*')</div><div class='del'>-  #   ftp.getbinaryfile('nif.rb-0.91.gz', 'nif.gz', 1024)</div><div class='del'>-  #   ftp.close</div><div class='del'>-  #</div><div class='del'>-  # === Example 2</div><div class='del'>-  #</div><div class='del'>-  #   Net::FTP.open('ftp.netlab.co.jp') do |ftp|</div><div class='del'>-  #     ftp.login</div><div class='del'>-  #     files = ftp.chdir('pub/lang/ruby/contrib')</div><div class='del'>-  #     files = ftp.list('n*')</div><div class='del'>-  #     ftp.getbinaryfile('nif.rb-0.91.gz', 'nif.gz', 1024)</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  # == Major Methods</div><div class='del'>-  #</div><div class='del'>-  # The following are the methods most likely to be useful to users:</div><div class='del'>-  # - FTP.open</div><div class='del'>-  # - #getbinaryfile</div><div class='del'>-  # - #gettextfile</div><div class='del'>-  # - #putbinaryfile</div><div class='del'>-  # - #puttextfile</div><div class='del'>-  # - #chdir</div><div class='del'>-  # - #nlst</div><div class='del'>-  # - #size</div><div class='del'>-  # - #rename</div><div class='del'>-  # - #delete</div><div class='del'>-  #</div><div class='del'>-  class FTP</div><div class='del'>-    include MonitorMixin</div><div class='del'>-    </div><div class='del'>-    # :stopdoc:</div><div class='del'>-    FTP_PORT = 21</div><div class='del'>-    CRLF = "\r\n"</div><div class='del'>-    DEFAULT_BLOCKSIZE = 4096</div><div class='del'>-    # :startdoc:</div><div class='del'>-    </div><div class='del'>-    # When +true+, transfers are performed in binary mode.  Default: +true+.</div><div class='del'>-    attr_accessor :binary</div><div class='del'>-</div><div class='del'>-    # When +true+, the connection is in passive mode.  Default: +false+.</div><div class='del'>-    attr_accessor :passive</div><div class='del'>-</div><div class='del'>-    # When +true+, all traffic to and from the server is written</div><div class='del'>-    # to +$stdout+.  Default: +false+.</div><div class='del'>-    attr_accessor :debug_mode</div><div class='del'>-</div><div class='del'>-    # Sets or retrieves the +resume+ status, which decides whether incomplete</div><div class='del'>-    # transfers are resumed or restarted.  Default: +false+.</div><div class='del'>-    attr_accessor :resume</div><div class='del'>-</div><div class='del'>-    # The server's welcome message.</div><div class='del'>-    attr_reader :welcome</div><div class='del'>-</div><div class='del'>-    # The server's last response code.</div><div class='del'>-    attr_reader :last_response_code</div><div class='del'>-    alias lastresp last_response_code</div><div class='del'>-</div><div class='del'>-    # The server's last response.</div><div class='del'>-    attr_reader :last_response</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # A synonym for &lt;tt&gt;FTP.new&lt;/tt&gt;, but with a mandatory host parameter.</div><div class='del'>-    #</div><div class='del'>-    # If a block is given, it is passed the +FTP+ object, which will be closed</div><div class='del'>-    # when the block finishes, or when an exception is raised.</div><div class='del'>-    #</div><div class='del'>-    def FTP.open(host, user = nil, passwd = nil, acct = nil)</div><div class='del'>-      if block_given?</div><div class='del'>-        ftp = new(host, user, passwd, acct)</div><div class='del'>-        begin</div><div class='del'>-          yield ftp</div><div class='del'>-        ensure</div><div class='del'>-          ftp.close</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        new(host, user, passwd, acct)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Creates and returns a new +FTP+ object. If a +host+ is given, a connection</div><div class='del'>-    # is made. Additionally, if the +user+ is given, the given user name,</div><div class='del'>-    # password, and (optionally) account are used to log in.  See #login.</div><div class='del'>-    #</div><div class='del'>-    def initialize(host = nil, user = nil, passwd = nil, acct = nil)</div><div class='del'>-      super()</div><div class='del'>-      @binary = true</div><div class='del'>-      @passive = false</div><div class='del'>-      @debug_mode = false</div><div class='del'>-      @resume = false</div><div class='del'>-      if host</div><div class='del'>-	connect(host)</div><div class='del'>-	if user</div><div class='del'>-	  login(user, passwd, acct)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Obsolete</div><div class='del'>-    def return_code</div><div class='del'>-      $stderr.puts("warning: Net::FTP#return_code is obsolete and do nothing")</div><div class='del'>-      return "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Obsolete</div><div class='del'>-    def return_code=(s)</div><div class='del'>-      $stderr.puts("warning: Net::FTP#return_code= is obsolete and do nothing")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def open_socket(host, port)</div><div class='del'>-      if defined? SOCKSsocket and ENV["SOCKS_SERVER"]</div><div class='del'>-	@passive = true</div><div class='del'>-	return SOCKSsocket.open(host, port)</div><div class='del'>-      else</div><div class='del'>-	return TCPSocket.open(host, port)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :open_socket</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Establishes an FTP connection to host, optionally overriding the default</div><div class='del'>-    # port. If the environment variable +SOCKS_SERVER+ is set, sets up the</div><div class='del'>-    # connection through a SOCKS proxy. Raises an exception (typically</div><div class='del'>-    # &lt;tt&gt;Errno::ECONNREFUSED&lt;/tt&gt;) if the connection cannot be established.</div><div class='del'>-    #</div><div class='del'>-    def connect(host, port = FTP_PORT)</div><div class='del'>-      if @debug_mode</div><div class='del'>-	print "connect: ", host, ", ", port, "\n"</div><div class='del'>-      end</div><div class='del'>-      synchronize do</div><div class='del'>-	@sock = open_socket(host, port)</div><div class='del'>-	voidresp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # WRITEME or make private</div><div class='del'>-    #</div><div class='del'>-    def set_socket(sock, get_greeting = true)</div><div class='del'>-      synchronize do</div><div class='del'>-	@sock = sock</div><div class='del'>-	if get_greeting</div><div class='del'>-	  voidresp</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def sanitize(s)</div><div class='del'>-      if s =~ /^PASS /i</div><div class='del'>-	return s[0, 5] + "*" * (s.length - 5)</div><div class='del'>-      else</div><div class='del'>-	return s</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :sanitize</div><div class='del'>-    </div><div class='del'>-    def putline(line)</div><div class='del'>-      if @debug_mode</div><div class='del'>-	print "put: ", sanitize(line), "\n"</div><div class='del'>-      end</div><div class='del'>-      line = line + CRLF</div><div class='del'>-      @sock.write(line)</div><div class='del'>-    end</div><div class='del'>-    private :putline</div><div class='del'>-    </div><div class='del'>-    def getline</div><div class='del'>-      line = @sock.readline # if get EOF, raise EOFError</div><div class='del'>-      line.sub!(/(\r\n|\n|\r)\z/n, "")</div><div class='del'>-      if @debug_mode</div><div class='del'>-	print "get: ", sanitize(line), "\n"</div><div class='del'>-      end</div><div class='del'>-      return line</div><div class='del'>-    end</div><div class='del'>-    private :getline</div><div class='del'>-    </div><div class='del'>-    def getmultiline</div><div class='del'>-      line = getline</div><div class='del'>-      buff = line</div><div class='del'>-      if line[3] == ?-</div><div class='del'>-	  code = line[0, 3]</div><div class='del'>-	begin</div><div class='del'>-	  line = getline</div><div class='del'>-	  buff &lt;&lt; "\n" &lt;&lt; line</div><div class='del'>-	end until line[0, 3] == code and line[3] != ?-</div><div class='del'>-      end</div><div class='del'>-      return buff &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-    private :getmultiline</div><div class='del'>-    </div><div class='del'>-    def getresp</div><div class='del'>-      @last_response = getmultiline</div><div class='del'>-      @last_response_code = @last_response[0, 3]</div><div class='del'>-      case @last_response_code</div><div class='del'>-      when /\A[123]/</div><div class='del'>-	return @last_response</div><div class='del'>-      when /\A4/</div><div class='del'>-	raise FTPTempError, @last_response</div><div class='del'>-      when /\A5/</div><div class='del'>-	raise FTPPermError, @last_response</div><div class='del'>-      else</div><div class='del'>-	raise FTPProtoError, @last_response</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :getresp</div><div class='del'>-    </div><div class='del'>-    def voidresp</div><div class='del'>-      resp = getresp</div><div class='del'>-      if resp[0] != ?2</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :voidresp</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Sends a command and returns the response.</div><div class='del'>-    #</div><div class='del'>-    def sendcmd(cmd)</div><div class='del'>-      synchronize do</div><div class='del'>-	putline(cmd)</div><div class='del'>-	return getresp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Sends a command and expect a response beginning with '2'.</div><div class='del'>-    #</div><div class='del'>-    def voidcmd(cmd)</div><div class='del'>-      synchronize do</div><div class='del'>-	putline(cmd)</div><div class='del'>-	voidresp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def sendport(host, port)</div><div class='del'>-      af = (@sock.peeraddr)[0]</div><div class='del'>-      if af == "AF_INET"</div><div class='del'>-	cmd = "PORT " + (host.split(".") + port.divmod(256)).join(",")</div><div class='del'>-      elsif af == "AF_INET6"</div><div class='del'>-	cmd = sprintf("EPRT |2|%s|%d|", host, port)</div><div class='del'>-      else</div><div class='del'>-	raise FTPProtoError, host</div><div class='del'>-      end</div><div class='del'>-      voidcmd(cmd)</div><div class='del'>-    end</div><div class='del'>-    private :sendport</div><div class='del'>-    </div><div class='del'>-    def makeport</div><div class='del'>-      sock = TCPServer.open(@sock.addr[3], 0)</div><div class='del'>-      port = sock.addr[1]</div><div class='del'>-      host = sock.addr[3]</div><div class='del'>-      resp = sendport(host, port)</div><div class='del'>-      return sock</div><div class='del'>-    end</div><div class='del'>-    private :makeport</div><div class='del'>-    </div><div class='del'>-    def makepasv</div><div class='del'>-      if @sock.peeraddr[0] == "AF_INET"</div><div class='del'>-	host, port = parse227(sendcmd("PASV"))</div><div class='del'>-      else</div><div class='del'>-	host, port = parse229(sendcmd("EPSV"))</div><div class='del'>-	#     host, port = parse228(sendcmd("LPSV"))</div><div class='del'>-      end</div><div class='del'>-      return host, port</div><div class='del'>-    end</div><div class='del'>-    private :makepasv</div><div class='del'>-    </div><div class='del'>-    def transfercmd(cmd, rest_offset = nil)</div><div class='del'>-      if @passive</div><div class='del'>-	host, port = makepasv</div><div class='del'>-	conn = open_socket(host, port)</div><div class='del'>-	if @resume and rest_offset</div><div class='del'>-	  resp = sendcmd("REST " + rest_offset.to_s) </div><div class='del'>-	  if resp[0] != ?3</div><div class='del'>-	    raise FTPReplyError, resp</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	resp = sendcmd(cmd)</div><div class='del'>-        # skip 2XX for some ftp servers</div><div class='del'>-        resp = getresp if resp[0] == ?2</div><div class='del'>-	if resp[0] != ?1</div><div class='del'>-	  raise FTPReplyError, resp</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	sock = makeport</div><div class='del'>-	if @resume and rest_offset</div><div class='del'>-	  resp = sendcmd("REST " + rest_offset.to_s) </div><div class='del'>-	  if resp[0] != ?3</div><div class='del'>-	    raise FTPReplyError, resp</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	resp = sendcmd(cmd)</div><div class='del'>-        # skip 2XX for some ftp servers</div><div class='del'>-        resp = getresp if resp[0] == ?2</div><div class='del'>-	if resp[0] != ?1</div><div class='del'>-	  raise FTPReplyError, resp</div><div class='del'>-	end</div><div class='del'>-	conn = sock.accept</div><div class='del'>-	sock.close</div><div class='del'>-      end</div><div class='del'>-      return conn</div><div class='del'>-    end</div><div class='del'>-    private :transfercmd</div><div class='del'>-    </div><div class='del'>-    def getaddress</div><div class='del'>-      thishost = Socket.gethostname</div><div class='del'>-      if not thishost.index(".")</div><div class='del'>-	thishost = Socket.gethostbyname(thishost)[0]</div><div class='del'>-      end</div><div class='del'>-      if ENV.has_key?("LOGNAME")</div><div class='del'>-	realuser = ENV["LOGNAME"]</div><div class='del'>-      elsif ENV.has_key?("USER")</div><div class='del'>-	realuser = ENV["USER"]</div><div class='del'>-      else</div><div class='del'>-	realuser = "anonymous"</div><div class='del'>-      end</div><div class='del'>-      return realuser + "@" + thishost</div><div class='del'>-    end</div><div class='del'>-    private :getaddress</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Logs in to the remote host. The session must have been previously</div><div class='del'>-    # connected.  If +user+ is the string "anonymous" and the +password+ is</div><div class='del'>-    # +nil+, a password of &lt;tt&gt;user@host&lt;/tt&gt; is synthesized. If the +acct+</div><div class='del'>-    # parameter is not +nil+, an FTP ACCT command is sent following the</div><div class='del'>-    # successful login.  Raises an exception on error (typically</div><div class='del'>-    # &lt;tt&gt;Net::FTPPermError&lt;/tt&gt;).</div><div class='del'>-    #</div><div class='del'>-    def login(user = "anonymous", passwd = nil, acct = nil)</div><div class='del'>-      if user == "anonymous" and passwd == nil</div><div class='del'>-	passwd = getaddress</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      resp = ""</div><div class='del'>-      synchronize do</div><div class='del'>-	resp = sendcmd('USER ' + user)</div><div class='del'>-	if resp[0] == ?3</div><div class='del'>-	  resp = sendcmd('PASS ' + passwd)</div><div class='del'>-	end</div><div class='del'>-	if resp[0] == ?3</div><div class='del'>-	  resp = sendcmd('ACCT ' + acct)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if resp[0] != ?2</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-      @welcome = resp</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Puts the connection into binary (image) mode, issues the given command,</div><div class='del'>-    # and fetches the data returned, passing it to the associated block in</div><div class='del'>-    # chunks of +blocksize+ characters. Note that +cmd+ is a server command</div><div class='del'>-    # (such as "RETR myfile").</div><div class='del'>-    #</div><div class='del'>-    def retrbinary(cmd, blocksize, rest_offset = nil) # :yield: data</div><div class='del'>-      synchronize do</div><div class='del'>-	voidcmd("TYPE I")</div><div class='del'>-	conn = transfercmd(cmd, rest_offset)</div><div class='del'>-	loop do</div><div class='del'>-	  data = conn.read(blocksize)</div><div class='del'>-	  break if data == nil</div><div class='del'>-	  yield(data)</div><div class='del'>-	end</div><div class='del'>-	conn.close</div><div class='del'>-	voidresp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Puts the connection into ASCII (text) mode, issues the given command, and</div><div class='del'>-    # passes the resulting data, one line at a time, to the associated block. If</div><div class='del'>-    # no block is given, prints the lines. Note that +cmd+ is a server command</div><div class='del'>-    # (such as "RETR myfile").</div><div class='del'>-    #</div><div class='del'>-    def retrlines(cmd) # :yield: line</div><div class='del'>-      synchronize do</div><div class='del'>-	voidcmd("TYPE A")</div><div class='del'>-	conn = transfercmd(cmd)</div><div class='del'>-	loop do</div><div class='del'>-	  line = conn.gets</div><div class='del'>-	  break if line == nil</div><div class='del'>-	  if line[-2, 2] == CRLF</div><div class='del'>-	    line = line[0 .. -3]</div><div class='del'>-	  elsif line[-1] == ?\n</div><div class='del'>-	    line = line[0 .. -2]</div><div class='del'>-	  end</div><div class='del'>-	  yield(line)</div><div class='del'>-	end</div><div class='del'>-	conn.close</div><div class='del'>-	voidresp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Puts the connection into binary (image) mode, issues the given server-side</div><div class='del'>-    # command (such as "STOR myfile"), and sends the contents of the file named</div><div class='del'>-    # +file+ to the server. If the optional block is given, it also passes it</div><div class='del'>-    # the data, in chunks of +blocksize+ characters.</div><div class='del'>-    #</div><div class='del'>-    def storbinary(cmd, file, blocksize, rest_offset = nil, &amp;block) # :yield: data</div><div class='del'>-      if rest_offset</div><div class='del'>-        file.seek(rest_offset, IO::SEEK_SET)</div><div class='del'>-      end</div><div class='del'>-      synchronize do</div><div class='del'>-	voidcmd("TYPE I")</div><div class='del'>-	conn = transfercmd(cmd, rest_offset)</div><div class='del'>-	loop do</div><div class='del'>-	  buf = file.read(blocksize)</div><div class='del'>-	  break if buf == nil</div><div class='del'>-	  conn.write(buf)</div><div class='del'>-	  yield(buf) if block</div><div class='del'>-	end</div><div class='del'>-	conn.close</div><div class='del'>-	voidresp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Puts the connection into ASCII (text) mode, issues the given server-side</div><div class='del'>-    # command (such as "STOR myfile"), and sends the contents of the file</div><div class='del'>-    # named +file+ to the server, one line at a time. If the optional block is</div><div class='del'>-    # given, it also passes it the lines.</div><div class='del'>-    #</div><div class='del'>-    def storlines(cmd, file, &amp;block) # :yield: line</div><div class='del'>-      synchronize do</div><div class='del'>-	voidcmd("TYPE A")</div><div class='del'>-	conn = transfercmd(cmd)</div><div class='del'>-	loop do</div><div class='del'>-	  buf = file.gets</div><div class='del'>-	  break if buf == nil</div><div class='del'>-	  if buf[-2, 2] != CRLF</div><div class='del'>-	    buf = buf.chomp + CRLF</div><div class='del'>-	  end</div><div class='del'>-	  conn.write(buf)</div><div class='del'>-	  yield(buf) if block</div><div class='del'>-	end</div><div class='del'>-	conn.close</div><div class='del'>-	voidresp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Retrieves +remotefile+ in binary mode, storing the result in +localfile+.</div><div class='del'>-    # If a block is supplied, it is passed the retrieved data in +blocksize+</div><div class='del'>-    # chunks.</div><div class='del'>-    #</div><div class='del'>-    def getbinaryfile(remotefile, localfile = File.basename(remotefile),</div><div class='del'>-		      blocksize = DEFAULT_BLOCKSIZE, &amp;block) # :yield: data</div><div class='del'>-      if @resume</div><div class='del'>-	rest_offset = File.size?(localfile)</div><div class='del'>-	f = open(localfile, "a")</div><div class='del'>-      else</div><div class='del'>-	rest_offset = nil</div><div class='del'>-	f = open(localfile, "w")</div><div class='del'>-      end</div><div class='del'>-      begin</div><div class='del'>-	f.binmode</div><div class='del'>-	retrbinary("RETR " + remotefile, blocksize, rest_offset) do |data|</div><div class='del'>-	  f.write(data)</div><div class='del'>-	  yield(data) if block</div><div class='del'>-	end</div><div class='del'>-      ensure</div><div class='del'>-	f.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Retrieves +remotefile+ in ASCII (text) mode, storing the result in</div><div class='del'>-    # +localfile+. If a block is supplied, it is passed the retrieved data one</div><div class='del'>-    # line at a time.</div><div class='del'>-    #</div><div class='del'>-    def gettextfile(remotefile, localfile = File.basename(remotefile), &amp;block) # :yield: line</div><div class='del'>-      f = open(localfile, "w")</div><div class='del'>-      begin</div><div class='del'>-	retrlines("RETR " + remotefile) do |line|</div><div class='del'>-	  f.puts(line)</div><div class='del'>-	  yield(line) if block</div><div class='del'>-	end</div><div class='del'>-      ensure</div><div class='del'>-	f.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Retrieves +remotefile+ in whatever mode the session is set (text or</div><div class='del'>-    # binary).  See #gettextfile and #getbinaryfile.</div><div class='del'>-    #</div><div class='del'>-    def get(remotefile, localfile = File.basename(remotefile),</div><div class='del'>-	    blocksize = DEFAULT_BLOCKSIZE, &amp;block) # :yield: data</div><div class='del'>-      unless @binary</div><div class='del'>-	gettextfile(remotefile, localfile, &amp;block)</div><div class='del'>-      else</div><div class='del'>-	getbinaryfile(remotefile, localfile, blocksize, &amp;block)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Transfers +localfile+ to the server in binary mode, storing the result in</div><div class='del'>-    # +remotefile+. If a block is supplied, calls it, passing in the transmitted</div><div class='del'>-    # data in +blocksize+ chunks.</div><div class='del'>-    #</div><div class='del'>-    def putbinaryfile(localfile, remotefile = File.basename(localfile),</div><div class='del'>-		      blocksize = DEFAULT_BLOCKSIZE, &amp;block) # :yield: data</div><div class='del'>-      if @resume</div><div class='del'>-        begin</div><div class='del'>-          rest_offset = size(remotefile)</div><div class='del'>-        rescue Net::FTPPermError</div><div class='del'>-          rest_offset = nil</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-	rest_offset = nil</div><div class='del'>-      end</div><div class='del'>-      f = open(localfile)</div><div class='del'>-      begin</div><div class='del'>-	f.binmode</div><div class='del'>-	storbinary("STOR " + remotefile, f, blocksize, rest_offset, &amp;block)</div><div class='del'>-      ensure</div><div class='del'>-	f.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Transfers +localfile+ to the server in ASCII (text) mode, storing the result</div><div class='del'>-    # in +remotefile+. If callback or an associated block is supplied, calls it,</div><div class='del'>-    # passing in the transmitted data one line at a time.</div><div class='del'>-    #</div><div class='del'>-    def puttextfile(localfile, remotefile = File.basename(localfile), &amp;block) # :yield: line</div><div class='del'>-      f = open(localfile)</div><div class='del'>-      begin</div><div class='del'>-	storlines("STOR " + remotefile, f, &amp;block)</div><div class='del'>-      ensure</div><div class='del'>-	f.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Transfers +localfile+ to the server in whatever mode the session is set</div><div class='del'>-    # (text or binary).  See #puttextfile and #putbinaryfile.</div><div class='del'>-    #</div><div class='del'>-    def put(localfile, remotefile = File.basename(localfile),</div><div class='del'>-	    blocksize = DEFAULT_BLOCKSIZE, &amp;block)</div><div class='del'>-      unless @binary</div><div class='del'>-	puttextfile(localfile, remotefile, &amp;block)</div><div class='del'>-      else</div><div class='del'>-	putbinaryfile(localfile, remotefile, blocksize, &amp;block)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Sends the ACCT command.  TODO: more info.</div><div class='del'>-    #</div><div class='del'>-    def acct(account)</div><div class='del'>-      cmd = "ACCT " + account</div><div class='del'>-      voidcmd(cmd)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns an array of filenames in the remote directory.</div><div class='del'>-    #</div><div class='del'>-    def nlst(dir = nil)</div><div class='del'>-      cmd = "NLST"</div><div class='del'>-      if dir</div><div class='del'>-	cmd = cmd + " " + dir</div><div class='del'>-      end</div><div class='del'>-      files = []</div><div class='del'>-      retrlines(cmd) do |line|</div><div class='del'>-	files.push(line)</div><div class='del'>-      end</div><div class='del'>-      return files</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns an array of file information in the directory (the output is like</div><div class='del'>-    # `ls -l`).  If a block is given, it iterates through the listing.</div><div class='del'>-    #</div><div class='del'>-    def list(*args, &amp;block) # :yield: line</div><div class='del'>-      cmd = "LIST"</div><div class='del'>-      args.each do |arg|</div><div class='del'>-	cmd = cmd + " " + arg</div><div class='del'>-      end</div><div class='del'>-      if block</div><div class='del'>-	retrlines(cmd, &amp;block)</div><div class='del'>-      else</div><div class='del'>-	lines = []</div><div class='del'>-	retrlines(cmd) do |line|</div><div class='del'>-	  lines &lt;&lt; line</div><div class='del'>-	end</div><div class='del'>-	return lines</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    alias ls list</div><div class='del'>-    alias dir list</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Renames a file on the server.</div><div class='del'>-    #</div><div class='del'>-    def rename(fromname, toname)</div><div class='del'>-      resp = sendcmd("RNFR " + fromname)</div><div class='del'>-      if resp[0] != ?3</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-      voidcmd("RNTO " + toname)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Deletes a file on the server.</div><div class='del'>-    #</div><div class='del'>-    def delete(filename)</div><div class='del'>-      resp = sendcmd("DELE " + filename)</div><div class='del'>-      if resp[0, 3] == "250"</div><div class='del'>-	return</div><div class='del'>-      elsif resp[0] == ?5</div><div class='del'>-	raise FTPPermError, resp</div><div class='del'>-      else</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Changes the (remote) directory.</div><div class='del'>-    #</div><div class='del'>-    def chdir(dirname)</div><div class='del'>-      if dirname == ".."</div><div class='del'>-	begin</div><div class='del'>-	  voidcmd("CDUP")</div><div class='del'>-	  return</div><div class='del'>-	rescue FTPPermError</div><div class='del'>-	  if $![0, 3] != "500"</div><div class='del'>-	    raise FTPPermError, $!</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      cmd = "CWD " + dirname</div><div class='del'>-      voidcmd(cmd)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns the size of the given (remote) filename.</div><div class='del'>-    #</div><div class='del'>-    def size(filename)</div><div class='del'>-      voidcmd("TYPE I")</div><div class='del'>-      resp = sendcmd("SIZE " + filename)</div><div class='del'>-      if resp[0, 3] != "213" </div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-      return resp[3..-1].strip.to_i</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    MDTM_REGEXP = /^(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/  # :nodoc:</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns the last modification time of the (remote) file.  If +local+ is</div><div class='del'>-    # +true+, it is returned as a local time, otherwise it's a UTC time.</div><div class='del'>-    #</div><div class='del'>-    def mtime(filename, local = false)</div><div class='del'>-      str = mdtm(filename)</div><div class='del'>-      ary = str.scan(MDTM_REGEXP)[0].collect {|i| i.to_i}</div><div class='del'>-      return local ? Time.local(*ary) : Time.gm(*ary)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Creates a remote directory.</div><div class='del'>-    #</div><div class='del'>-    def mkdir(dirname)</div><div class='del'>-      resp = sendcmd("MKD " + dirname)</div><div class='del'>-      return parse257(resp)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Removes a remote directory.</div><div class='del'>-    #</div><div class='del'>-    def rmdir(dirname)</div><div class='del'>-      voidcmd("RMD " + dirname)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns the current remote directory.</div><div class='del'>-    #</div><div class='del'>-    def pwd</div><div class='del'>-      resp = sendcmd("PWD")</div><div class='del'>-      return parse257(resp)</div><div class='del'>-    end</div><div class='del'>-    alias getdir pwd</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns system information.</div><div class='del'>-    #</div><div class='del'>-    def system</div><div class='del'>-      resp = sendcmd("SYST")</div><div class='del'>-      if resp[0, 3] != "215"</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-      return resp[4 .. -1]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Aborts the previous command (ABOR command).</div><div class='del'>-    #</div><div class='del'>-    def abort</div><div class='del'>-      line = "ABOR" + CRLF</div><div class='del'>-      print "put: ABOR\n" if @debug_mode</div><div class='del'>-      @sock.send(line, Socket::MSG_OOB)</div><div class='del'>-      resp = getmultiline</div><div class='del'>-      unless ["426", "226", "225"].include?(resp[0, 3])</div><div class='del'>-	raise FTPProtoError, resp</div><div class='del'>-      end</div><div class='del'>-      return resp</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns the status (STAT command).</div><div class='del'>-    #</div><div class='del'>-    def status</div><div class='del'>-      line = "STAT" + CRLF</div><div class='del'>-      print "put: STAT\n" if @debug_mode</div><div class='del'>-      @sock.send(line, Socket::MSG_OOB)</div><div class='del'>-      return getresp</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Issues the MDTM command.  TODO: more info.</div><div class='del'>-    #</div><div class='del'>-    def mdtm(filename)</div><div class='del'>-      resp = sendcmd("MDTM " + filename)</div><div class='del'>-      if resp[0, 3] == "213"</div><div class='del'>-	return resp[3 .. -1].strip</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Issues the HELP command.</div><div class='del'>-    #</div><div class='del'>-    def help(arg = nil)</div><div class='del'>-      cmd = "HELP"</div><div class='del'>-      if arg</div><div class='del'>-	cmd = cmd + " " + arg</div><div class='del'>-      end</div><div class='del'>-      sendcmd(cmd)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Exits the FTP session.</div><div class='del'>-    #</div><div class='del'>-    def quit</div><div class='del'>-      voidcmd("QUIT")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Issues a NOOP command.</div><div class='del'>-    #</div><div class='del'>-    def noop</div><div class='del'>-      voidcmd("NOOP")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Issues a SITE command.</div><div class='del'>-    #</div><div class='del'>-    def site(arg)</div><div class='del'>-      cmd = "SITE " + arg</div><div class='del'>-      voidcmd(cmd)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Closes the connection.  Further operations are impossible until you open</div><div class='del'>-    # a new connection with #connect.</div><div class='del'>-    #</div><div class='del'>-    def close</div><div class='del'>-      @sock.close if @sock and not @sock.closed?</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Returns +true+ iff the connection is closed.</div><div class='del'>-    #</div><div class='del'>-    def closed?</div><div class='del'>-      @sock == nil or @sock.closed?</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def parse227(resp)</div><div class='del'>-      if resp[0, 3] != "227"</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-      left = resp.index("(")</div><div class='del'>-      right = resp.index(")")</div><div class='del'>-      if left == nil or right == nil</div><div class='del'>-	raise FTPProtoError, resp</div><div class='del'>-      end</div><div class='del'>-      numbers = resp[left + 1 .. right - 1].split(",")</div><div class='del'>-      if numbers.length != 6</div><div class='del'>-	raise FTPProtoError, resp</div><div class='del'>-      end</div><div class='del'>-      host = numbers[0, 4].join(".")</div><div class='del'>-      port = (numbers[4].to_i &lt;&lt; 8) + numbers[5].to_i</div><div class='del'>-      return host, port</div><div class='del'>-    end</div><div class='del'>-    private :parse227</div><div class='del'>-    </div><div class='del'>-    def parse228(resp)</div><div class='del'>-      if resp[0, 3] != "228"</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-      left = resp.index("(")</div><div class='del'>-      right = resp.index(")")</div><div class='del'>-      if left == nil or right == nil</div><div class='del'>-	raise FTPProtoError, resp</div><div class='del'>-      end</div><div class='del'>-      numbers = resp[left + 1 .. right - 1].split(",")</div><div class='del'>-      if numbers[0] == "4"</div><div class='del'>-	if numbers.length != 9 || numbers[1] != "4" || numbers[2 + 4] != "2"</div><div class='del'>-	  raise FTPProtoError, resp</div><div class='del'>-	end</div><div class='del'>-	host = numbers[2, 4].join(".")</div><div class='del'>-	port = (numbers[7].to_i &lt;&lt; 8) + numbers[8].to_i</div><div class='del'>-      elsif numbers[0] == "6"</div><div class='del'>-	if numbers.length != 21 || numbers[1] != "16" || numbers[2 + 16] != "2"</div><div class='del'>-	  raise FTPProtoError, resp</div><div class='del'>-	end</div><div class='del'>-	v6 = ["", "", "", "", "", "", "", ""]</div><div class='del'>-	for i in 0 .. 7</div><div class='del'>-	  v6[i] = sprintf("%02x%02x", numbers[(i * 2) + 2].to_i,</div><div class='del'>-			  numbers[(i * 2) + 3].to_i)</div><div class='del'>-	end</div><div class='del'>-	host = v6[0, 8].join(":")</div><div class='del'>-	port = (numbers[19].to_i &lt;&lt; 8) + numbers[20].to_i</div><div class='del'>-      end </div><div class='del'>-      return host, port</div><div class='del'>-    end</div><div class='del'>-    private :parse228</div><div class='del'>-    </div><div class='del'>-    def parse229(resp)</div><div class='del'>-      if resp[0, 3] != "229"</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-      left = resp.index("(")</div><div class='del'>-      right = resp.index(")")</div><div class='del'>-      if left == nil or right == nil</div><div class='del'>-	raise FTPProtoError, resp</div><div class='del'>-      end</div><div class='del'>-      numbers = resp[left + 1 .. right - 1].split(resp[left + 1, 1])</div><div class='del'>-      if numbers.length != 4</div><div class='del'>-	raise FTPProtoError, resp</div><div class='del'>-      end</div><div class='del'>-      port = numbers[3].to_i</div><div class='del'>-      host = (@sock.peeraddr())[3]</div><div class='del'>-      return host, port</div><div class='del'>-    end</div><div class='del'>-    private :parse229</div><div class='del'>-    </div><div class='del'>-    def parse257(resp)</div><div class='del'>-      if resp[0, 3] != "257"</div><div class='del'>-	raise FTPReplyError, resp</div><div class='del'>-      end</div><div class='del'>-      if resp[3, 2] != ' "'</div><div class='del'>-	return ""</div><div class='del'>-      end</div><div class='del'>-      dirname = ""</div><div class='del'>-      i = 5</div><div class='del'>-      n = resp.length</div><div class='del'>-      while i &lt; n</div><div class='del'>-	c = resp[i, 1]</div><div class='del'>-	i = i + 1</div><div class='del'>-	if c == '"'</div><div class='del'>-	  if i &gt; n or resp[i, 1] != '"'</div><div class='del'>-	    break</div><div class='del'>-	  end</div><div class='del'>-	  i = i + 1</div><div class='del'>-	end</div><div class='del'>-	dirname = dirname + c</div><div class='del'>-      end</div><div class='del'>-      return dirname</div><div class='del'>-    end</div><div class='del'>-    private :parse257</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'>-# Documentation comments:</div><div class='del'>-#  - sourced from pickaxe and nutshell, with improvements (hopefully)</div><div class='del'>-#  - three methods should be private (search WRITEME)</div><div class='del'>-#  - two methods need more information (search TODO)</div><div class='head'>diff --git a/lib/net/http.rb b/lib/net/http.rb<br/>deleted file mode 100644<br/>index 7dd1f24d4c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/net/http.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/http.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2277 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = net/http.rb</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 1999-2006 Yukihiro Matsumoto</div><div class='del'>-# Copyright (c) 1999-2006 Minero Aoki</div><div class='del'>-# Copyright (c) 2001 GOTOU Yuuzou</div><div class='del'>-# </div><div class='del'>-# Written and maintained by Minero Aoki &lt;aamine@loveruby.net&gt;.</div><div class='del'>-# HTTPS support added by GOTOU Yuuzou &lt;gotoyuzo@notwork.org&gt;.</div><div class='del'>-#</div><div class='del'>-# This file is derived from "http-access.rb".</div><div class='del'>-#</div><div class='del'>-# Documented by Minero Aoki; converted to RDoc by William Webber.</div><div class='del'>-# </div><div class='del'>-# This program is free software. You can re-distribute and/or</div><div class='del'>-# modify this program under the same terms of ruby itself ---</div><div class='del'>-# Ruby Distribution License or GNU General Public License.</div><div class='del'>-#</div><div class='del'>-# See Net::HTTP for an overview and examples. </div><div class='del'>-# </div><div class='del'>-# NOTE: You can find Japanese version of this document here:</div><div class='del'>-# http://www.ruby-lang.org/ja/man/?cmd=view;name=net%2Fhttp.rb</div><div class='del'>-# </div><div class='del'>-#--</div><div class='del'>-# $Id$</div><div class='del'>-#++ </div><div class='del'>-</div><div class='del'>-require 'net/protocol'</div><div class='del'>-require 'uri'</div><div class='del'>-</div><div class='del'>-module Net   #:nodoc:</div><div class='del'>-</div><div class='del'>-  # :stopdoc:</div><div class='del'>-  class HTTPBadResponse &lt; StandardError; end</div><div class='del'>-  class HTTPHeaderSyntaxError &lt; StandardError; end</div><div class='del'>-  # :startdoc:</div><div class='del'>-</div><div class='del'>-  # == What Is This Library?</div><div class='del'>-  # </div><div class='del'>-  # This library provides your program functions to access WWW</div><div class='del'>-  # documents via HTTP, Hyper Text Transfer Protocol version 1.1.</div><div class='del'>-  # For details of HTTP, refer [RFC2616]</div><div class='del'>-  # (http://www.ietf.org/rfc/rfc2616.txt).</div><div class='del'>-  # </div><div class='del'>-  # == Examples</div><div class='del'>-  # </div><div class='del'>-  # === Getting Document From WWW Server</div><div class='del'>-  # </div><div class='del'>-  # Example #1: Simple GET+print</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  #     Net::HTTP.get_print 'www.example.com', '/index.html'</div><div class='del'>-  # </div><div class='del'>-  # Example #2: Simple GET+print by URL</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  #     require 'uri'</div><div class='del'>-  #     Net::HTTP.get_print URI.parse('http://www.example.com/index.html')</div><div class='del'>-  # </div><div class='del'>-  # Example #3: More generic GET+print</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  #     require 'uri'</div><div class='del'>-  #</div><div class='del'>-  #     url = URI.parse('http://www.example.com/index.html')</div><div class='del'>-  #     res = Net::HTTP.start(url.host, url.port) {|http|</div><div class='del'>-  #       http.get('/index.html')</div><div class='del'>-  #     }</div><div class='del'>-  #     puts res.body</div><div class='del'>-  #</div><div class='del'>-  # Example #4: More generic GET+print</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  #</div><div class='del'>-  #     url = URI.parse('http://www.example.com/index.html')</div><div class='del'>-  #     req = Net::HTTP::Get.new(url.path)</div><div class='del'>-  #     res = Net::HTTP.start(url.host, url.port) {|http|</div><div class='del'>-  #       http.request(req)</div><div class='del'>-  #     }</div><div class='del'>-  #     puts res.body</div><div class='del'>-  # </div><div class='del'>-  # === Posting Form Data</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  #     require 'uri'</div><div class='del'>-  #</div><div class='del'>-  #     #1: Simple POST</div><div class='del'>-  #     res = Net::HTTP.post_form(URI.parse('http://www.example.com/search.cgi'),</div><div class='del'>-  #                               {'q'=&gt;'ruby', 'max'=&gt;'50'})</div><div class='del'>-  #     puts res.body</div><div class='del'>-  #</div><div class='del'>-  #     #2: POST with basic authentication</div><div class='del'>-  #     res = Net::HTTP.post_form(URI.parse('http://jack:pass@www.example.com/todo.cgi'),</div><div class='del'>-  #                                         {'from'=&gt;'2005-01-01', 'to'=&gt;'2005-03-31'})</div><div class='del'>-  #     puts res.body</div><div class='del'>-  #</div><div class='del'>-  #     #3: Detailed control</div><div class='del'>-  #     url = URI.parse('http://www.example.com/todo.cgi')</div><div class='del'>-  #     req = Net::HTTP::Post.new(url.path)</div><div class='del'>-  #     req.basic_auth 'jack', 'pass'</div><div class='del'>-  #     req.set_form_data({'from'=&gt;'2005-01-01', 'to'=&gt;'2005-03-31'}, ';')</div><div class='del'>-  #     res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }</div><div class='del'>-  #     case res</div><div class='del'>-  #     when Net::HTTPSuccess, Net::HTTPRedirection</div><div class='del'>-  #       # OK</div><div class='del'>-  #     else</div><div class='del'>-  #       res.error!</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # === Accessing via Proxy</div><div class='del'>-  # </div><div class='del'>-  # Net::HTTP.Proxy creates http proxy class. It has same</div><div class='del'>-  # methods of Net::HTTP but its instances always connect to</div><div class='del'>-  # proxy, instead of given host.</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  # </div><div class='del'>-  #     proxy_addr = 'your.proxy.host'</div><div class='del'>-  #     proxy_port = 8080</div><div class='del'>-  #             :</div><div class='del'>-  #     Net::HTTP::Proxy(proxy_addr, proxy_port).start('www.example.com') {|http|</div><div class='del'>-  #       # always connect to your.proxy.addr:8080</div><div class='del'>-  #             :</div><div class='del'>-  #     }</div><div class='del'>-  # </div><div class='del'>-  # Since Net::HTTP.Proxy returns Net::HTTP itself when proxy_addr is nil,</div><div class='del'>-  # there's no need to change code if there's proxy or not.</div><div class='del'>-  # </div><div class='del'>-  # There are two additional parameters in Net::HTTP.Proxy which allow to</div><div class='del'>-  # specify proxy user name and password:</div><div class='del'>-  # </div><div class='del'>-  #     Net::HTTP::Proxy(proxy_addr, proxy_port, proxy_user = nil, proxy_pass = nil)</div><div class='del'>-  # </div><div class='del'>-  # You may use them to work with authorization-enabled proxies:</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  #     require 'uri'</div><div class='del'>-  #     </div><div class='del'>-  #     proxy_host = 'your.proxy.host'</div><div class='del'>-  #     proxy_port = 8080</div><div class='del'>-  #     uri = URI.parse(ENV['http_proxy'])</div><div class='del'>-  #     proxy_user, proxy_pass = uri.userinfo.split(/:/) if uri.userinfo</div><div class='del'>-  #     Net::HTTP::Proxy(proxy_host, proxy_port,</div><div class='del'>-  #                      proxy_user, proxy_pass).start('www.example.com') {|http|</div><div class='del'>-  #       # always connect to your.proxy.addr:8080 using specified username and password</div><div class='del'>-  #             :</div><div class='del'>-  #     }</div><div class='del'>-  #</div><div class='del'>-  # Note that net/http never rely on HTTP_PROXY environment variable.</div><div class='del'>-  # If you want to use proxy, set it explicitly.</div><div class='del'>-  # </div><div class='del'>-  # === Following Redirection</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  #     require 'uri'</div><div class='del'>-  # </div><div class='del'>-  #     def fetch(uri_str, limit = 10)</div><div class='del'>-  #       # You should choose better exception. </div><div class='del'>-  #       raise ArgumentError, 'HTTP redirect too deep' if limit == 0</div><div class='del'>-  # </div><div class='del'>-  #       response = Net::HTTP.get_response(URI.parse(uri_str))</div><div class='del'>-  #       case response</div><div class='del'>-  #       when Net::HTTPSuccess     then response</div><div class='del'>-  #       when Net::HTTPRedirection then fetch(response['location'], limit - 1)</div><div class='del'>-  #       else</div><div class='del'>-  #         response.error!</div><div class='del'>-  #       end</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  #     print fetch('http://www.ruby-lang.org')</div><div class='del'>-  # </div><div class='del'>-  # Net::HTTPSuccess and Net::HTTPRedirection is a HTTPResponse class.</div><div class='del'>-  # All HTTPResponse objects belong to its own response class which</div><div class='del'>-  # indicate HTTP result status. For details of response classes,</div><div class='del'>-  # see section "HTTP Response Classes".</div><div class='del'>-  # </div><div class='del'>-  # === Basic Authentication</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/http'</div><div class='del'>-  # </div><div class='del'>-  #     Net::HTTP.start('www.example.com') {|http|</div><div class='del'>-  #       req = Net::HTTP::Get.new('/secret-page.html')</div><div class='del'>-  #       req.basic_auth 'account', 'password'</div><div class='del'>-  #       response = http.request(req)</div><div class='del'>-  #       print response.body</div><div class='del'>-  #     }</div><div class='del'>-  # </div><div class='del'>-  # === HTTP Request Classes</div><div class='del'>-  #</div><div class='del'>-  # Here is HTTP request class hierarchy.</div><div class='del'>-  #</div><div class='del'>-  #   Net::HTTPRequest</div><div class='del'>-  #       Net::HTTP::Get</div><div class='del'>-  #       Net::HTTP::Head</div><div class='del'>-  #       Net::HTTP::Post</div><div class='del'>-  #       Net::HTTP::Put</div><div class='del'>-  #       Net::HTTP::Proppatch</div><div class='del'>-  #       Net::HTTP::Lock</div><div class='del'>-  #       Net::HTTP::Unlock</div><div class='del'>-  #       Net::HTTP::Options</div><div class='del'>-  #       Net::HTTP::Propfind</div><div class='del'>-  #       Net::HTTP::Delete</div><div class='del'>-  #       Net::HTTP::Move</div><div class='del'>-  #       Net::HTTP::Copy</div><div class='del'>-  #       Net::HTTP::Mkcol</div><div class='del'>-  #       Net::HTTP::Trace</div><div class='del'>-  #</div><div class='del'>-  # === HTTP Response Classes</div><div class='del'>-  #</div><div class='del'>-  # Here is HTTP response class hierarchy.</div><div class='del'>-  # All classes are defined in Net module.</div><div class='del'>-  #</div><div class='del'>-  #   HTTPResponse</div><div class='del'>-  #       HTTPUnknownResponse</div><div class='del'>-  #       HTTPInformation                    # 1xx</div><div class='del'>-  #           HTTPContinue                       # 100</div><div class='del'>-  #           HTTPSwitchProtocl                  # 101</div><div class='del'>-  #       HTTPSuccess                        # 2xx</div><div class='del'>-  #           HTTPOK                             # 200</div><div class='del'>-  #           HTTPCreated                        # 201</div><div class='del'>-  #           HTTPAccepted                       # 202</div><div class='del'>-  #           HTTPNonAuthoritativeInformation    # 203</div><div class='del'>-  #           HTTPNoContent                      # 204</div><div class='del'>-  #           HTTPResetContent                   # 205</div><div class='del'>-  #           HTTPPartialContent                 # 206</div><div class='del'>-  #       HTTPRedirection                    # 3xx</div><div class='del'>-  #           HTTPMultipleChoice                 # 300</div><div class='del'>-  #           HTTPMovedPermanently               # 301</div><div class='del'>-  #           HTTPFound                          # 302</div><div class='del'>-  #           HTTPSeeOther                       # 303</div><div class='del'>-  #           HTTPNotModified                    # 304</div><div class='del'>-  #           HTTPUseProxy                       # 305</div><div class='del'>-  #           HTTPTemporaryRedirect              # 307</div><div class='del'>-  #       HTTPClientError                    # 4xx</div><div class='del'>-  #           HTTPBadRequest                     # 400</div><div class='del'>-  #           HTTPUnauthorized                   # 401</div><div class='del'>-  #           HTTPPaymentRequired                # 402</div><div class='del'>-  #           HTTPForbidden                      # 403</div><div class='del'>-  #           HTTPNotFound                       # 404</div><div class='del'>-  #           HTTPMethodNotAllowed               # 405</div><div class='del'>-  #           HTTPNotAcceptable                  # 406</div><div class='del'>-  #           HTTPProxyAuthenticationRequired    # 407</div><div class='del'>-  #           HTTPRequestTimeOut                 # 408</div><div class='del'>-  #           HTTPConflict                       # 409</div><div class='del'>-  #           HTTPGone                           # 410</div><div class='del'>-  #           HTTPLengthRequired                 # 411</div><div class='del'>-  #           HTTPPreconditionFailed             # 412</div><div class='del'>-  #           HTTPRequestEntityTooLarge          # 413</div><div class='del'>-  #           HTTPRequestURITooLong              # 414</div><div class='del'>-  #           HTTPUnsupportedMediaType           # 415</div><div class='del'>-  #           HTTPRequestedRangeNotSatisfiable   # 416</div><div class='del'>-  #           HTTPExpectationFailed              # 417</div><div class='del'>-  #       HTTPServerError                    # 5xx</div><div class='del'>-  #           HTTPInternalServerError            # 500</div><div class='del'>-  #           HTTPNotImplemented                 # 501</div><div class='del'>-  #           HTTPBadGateway                     # 502</div><div class='del'>-  #           HTTPServiceUnavailable             # 503</div><div class='del'>-  #           HTTPGatewayTimeOut                 # 504</div><div class='del'>-  #           HTTPVersionNotSupported            # 505</div><div class='del'>-  # </div><div class='del'>-  # == Switching Net::HTTP versions</div><div class='del'>-  # </div><div class='del'>-  # You can use net/http.rb 1.1 features (bundled with Ruby 1.6)</div><div class='del'>-  # by calling HTTP.version_1_1. Calling Net::HTTP.version_1_2</div><div class='del'>-  # allows you to use 1.2 features again.</div><div class='del'>-  # </div><div class='del'>-  #     # example</div><div class='del'>-  #     Net::HTTP.start {|http1| ...(http1 has 1.2 features)... }</div><div class='del'>-  # </div><div class='del'>-  #     Net::HTTP.version_1_1</div><div class='del'>-  #     Net::HTTP.start {|http2| ...(http2 has 1.1 features)... }</div><div class='del'>-  # </div><div class='del'>-  #     Net::HTTP.version_1_2</div><div class='del'>-  #     Net::HTTP.start {|http3| ...(http3 has 1.2 features)... }</div><div class='del'>-  # </div><div class='del'>-  # This function is NOT thread-safe.</div><div class='del'>-  #</div><div class='del'>-  class HTTP &lt; Protocol</div><div class='del'>-</div><div class='del'>-    # :stopdoc:</div><div class='del'>-    Revision = %q$Revision$.split[1]</div><div class='del'>-    HTTPVersion = '1.1'</div><div class='del'>-    @newimpl = true</div><div class='del'>-    # :startdoc:</div><div class='del'>-</div><div class='del'>-    # Turns on net/http 1.2 (ruby 1.8) features.</div><div class='del'>-    # Defaults to ON in ruby 1.8.</div><div class='del'>-    #</div><div class='del'>-    # I strongly recommend to call this method always.</div><div class='del'>-    #</div><div class='del'>-    #   require 'net/http'</div><div class='del'>-    #   Net::HTTP.version_1_2</div><div class='del'>-    #</div><div class='del'>-    def HTTP.version_1_2</div><div class='del'>-      @newimpl = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Turns on net/http 1.1 (ruby 1.6) features.</div><div class='del'>-    # Defaults to OFF in ruby 1.8.</div><div class='del'>-    def HTTP.version_1_1</div><div class='del'>-      @newimpl = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # true if net/http is in version 1.2 mode.</div><div class='del'>-    # Defaults to true.</div><div class='del'>-    def HTTP.version_1_2?</div><div class='del'>-      @newimpl</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # true if net/http is in version 1.1 compatible mode.</div><div class='del'>-    # Defaults to true.</div><div class='del'>-    def HTTP.version_1_1?</div><div class='del'>-      not @newimpl</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; HTTP</div><div class='del'>-      alias is_version_1_1? version_1_1?   #:nodoc:</div><div class='del'>-      alias is_version_1_2? version_1_2?   #:nodoc:</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # short cut methods</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Get body from target and output it to +$stdout+.  The</div><div class='del'>-    # target can either be specified as (+uri+), or as</div><div class='del'>-    # (+host+, +path+, +port+ = 80); so: </div><div class='del'>-    #</div><div class='del'>-    #    Net::HTTP.get_print URI.parse('http://www.example.com/index.html')</div><div class='del'>-    #</div><div class='del'>-    # or:</div><div class='del'>-    #</div><div class='del'>-    #    Net::HTTP.get_print 'www.example.com', '/index.html'</div><div class='del'>-    #</div><div class='del'>-    def HTTP.get_print(uri_or_host, path = nil, port = nil)</div><div class='del'>-      get_response(uri_or_host, path, port) {|res|</div><div class='del'>-        res.read_body do |chunk|</div><div class='del'>-          $stdout.print chunk</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Send a GET request to the target and return the response</div><div class='del'>-    # as a string.  The target can either be specified as</div><div class='del'>-    # (+uri+), or as (+host+, +path+, +port+ = 80); so:</div><div class='del'>-    # </div><div class='del'>-    #    print Net::HTTP.get(URI.parse('http://www.example.com/index.html'))</div><div class='del'>-    #</div><div class='del'>-    # or:</div><div class='del'>-    #</div><div class='del'>-    #    print Net::HTTP.get('www.example.com', '/index.html')</div><div class='del'>-    #</div><div class='del'>-    def HTTP.get(uri_or_host, path = nil, port = nil)</div><div class='del'>-      get_response(uri_or_host, path, port).body</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Send a GET request to the target and return the response</div><div class='del'>-    # as a Net::HTTPResponse object.  The target can either be specified as</div><div class='del'>-    # (+uri+), or as (+host+, +path+, +port+ = 80); so:</div><div class='del'>-    # </div><div class='del'>-    #    res = Net::HTTP.get_response(URI.parse('http://www.example.com/index.html'))</div><div class='del'>-    #    print res.body</div><div class='del'>-    #</div><div class='del'>-    # or:</div><div class='del'>-    #</div><div class='del'>-    #    res = Net::HTTP.get_response('www.example.com', '/index.html')</div><div class='del'>-    #    print res.body</div><div class='del'>-    #</div><div class='del'>-    def HTTP.get_response(uri_or_host, path = nil, port = nil, &amp;block)</div><div class='del'>-      if path</div><div class='del'>-        host = uri_or_host</div><div class='del'>-        new(host, port || HTTP.default_port).start {|http|</div><div class='del'>-          return http.request_get(path, &amp;block)</div><div class='del'>-        }</div><div class='del'>-      else</div><div class='del'>-        uri = uri_or_host</div><div class='del'>-        new(uri.host, uri.port).start {|http|</div><div class='del'>-          return http.request_get(uri.request_uri, &amp;block)</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Posts HTML form data to the +URL+.</div><div class='del'>-    # Form data must be represented as a Hash of String to String, e.g:</div><div class='del'>-    #</div><div class='del'>-    #   { "cmd" =&gt; "search", "q" =&gt; "ruby", "max" =&gt; "50" }</div><div class='del'>-    #</div><div class='del'>-    # This method also does Basic Authentication iff +URL+.user exists.</div><div class='del'>-    #</div><div class='del'>-    # Example:</div><div class='del'>-    #</div><div class='del'>-    #   require 'net/http'</div><div class='del'>-    #   require 'uri'</div><div class='del'>-    #</div><div class='del'>-    #   HTTP.post_form URI.parse('http://www.example.com/search.cgi'),</div><div class='del'>-    #                  { "q" =&gt; "ruby", "max" =&gt; "50" }</div><div class='del'>-    #</div><div class='del'>-    def HTTP.post_form(url, params)</div><div class='del'>-      req = Post.new(url.path)</div><div class='del'>-      req.form_data = params</div><div class='del'>-      req.basic_auth url.user, url.password if url.user</div><div class='del'>-      new(url.host, url.port).start {|http|</div><div class='del'>-        http.request(req)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # HTTP session management</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    # The default port to use for HTTP requests; defaults to 80.</div><div class='del'>-    def HTTP.default_port</div><div class='del'>-      http_default_port()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The default port to use for HTTP requests; defaults to 80.</div><div class='del'>-    def HTTP.http_default_port</div><div class='del'>-      80</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The default port to use for HTTPS requests; defaults to 443.</div><div class='del'>-    def HTTP.https_default_port</div><div class='del'>-      443</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def HTTP.socket_type   #:nodoc: obsolete</div><div class='del'>-      BufferedIO</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # creates a new Net::HTTP object and opens its TCP connection and </div><div class='del'>-    # HTTP session.  If the optional block is given, the newly </div><div class='del'>-    # created Net::HTTP object is passed to it and closed when the </div><div class='del'>-    # block finishes.  In this case, the return value of this method</div><div class='del'>-    # is the return value of the block.  If no block is given, the</div><div class='del'>-    # return value of this method is the newly created Net::HTTP object</div><div class='del'>-    # itself, and the caller is responsible for closing it upon completion.</div><div class='del'>-    def HTTP.start(address, port = nil, p_addr = nil, p_port = nil, p_user = nil, p_pass = nil, &amp;block) # :yield: +http+</div><div class='del'>-      new(address, port, p_addr, p_port, p_user, p_pass).start(&amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; HTTP</div><div class='del'>-      alias newobj new</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Creates a new Net::HTTP object.</div><div class='del'>-    # If +proxy_addr+ is given, creates an Net::HTTP object with proxy support.</div><div class='del'>-    # This method does not open the TCP connection.</div><div class='del'>-    def HTTP.new(address, port = nil, p_addr = nil, p_port = nil, p_user = nil, p_pass = nil)</div><div class='del'>-      h = Proxy(p_addr, p_port, p_user, p_pass).newobj(address, port)</div><div class='del'>-      h.instance_eval {</div><div class='del'>-        @newimpl = ::Net::HTTP.version_1_2?</div><div class='del'>-      }</div><div class='del'>-      h</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Creates a new Net::HTTP object for the specified +address+.</div><div class='del'>-    # This method does not open the TCP connection.</div><div class='del'>-    def initialize(address, port = nil)</div><div class='del'>-      @address = address</div><div class='del'>-      @port    = (port || HTTP.default_port)</div><div class='del'>-      @curr_http_version = HTTPVersion</div><div class='del'>-      @seems_1_0_server = false</div><div class='del'>-      @close_on_empty_response = false</div><div class='del'>-      @socket  = nil</div><div class='del'>-      @started = false</div><div class='del'>-      @open_timeout = nil</div><div class='del'>-      @read_timeout = 60</div><div class='del'>-      @debug_output = nil</div><div class='del'>-      @use_ssl = false</div><div class='del'>-      @ssl_context = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class} #{@address}:#{@port} open=#{started?}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # *WARNING* This method causes serious security hole.</div><div class='del'>-    # Never use this method in production code.</div><div class='del'>-    #</div><div class='del'>-    # Set an output stream for debugging.</div><div class='del'>-    #</div><div class='del'>-    #   http = Net::HTTP.new</div><div class='del'>-    #   http.set_debug_output $stderr</div><div class='del'>-    #   http.start { .... }</div><div class='del'>-    #</div><div class='del'>-    def set_debug_output(output)</div><div class='del'>-      warn 'Net::HTTP#set_debug_output called after HTTP started' if started?</div><div class='del'>-      @debug_output = output</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The host name to connect to.</div><div class='del'>-    attr_reader :address</div><div class='del'>-</div><div class='del'>-    # The port number to connect to.</div><div class='del'>-    attr_reader :port</div><div class='del'>-</div><div class='del'>-    # Seconds to wait until connection is opened.</div><div class='del'>-    # If the HTTP object cannot open a connection in this many seconds,</div><div class='del'>-    # it raises a TimeoutError exception.</div><div class='del'>-    attr_accessor :open_timeout</div><div class='del'>-</div><div class='del'>-    # Seconds to wait until reading one block (by one read(2) call).</div><div class='del'>-    # If the HTTP object cannot open a connection in this many seconds,</div><div class='del'>-    # it raises a TimeoutError exception.</div><div class='del'>-    attr_reader :read_timeout</div><div class='del'>-</div><div class='del'>-    # Setter for the read_timeout attribute.</div><div class='del'>-    def read_timeout=(sec)</div><div class='del'>-      @socket.read_timeout = sec if @socket</div><div class='del'>-      @read_timeout = sec</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # returns true if the HTTP session is started.</div><div class='del'>-    def started?</div><div class='del'>-      @started</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias active? started?   #:nodoc: obsolete</div><div class='del'>-</div><div class='del'>-    attr_accessor :close_on_empty_response</div><div class='del'>-</div><div class='del'>-    # returns true if use SSL/TLS with HTTP.</div><div class='del'>-    def use_ssl?</div><div class='del'>-      false   # redefined in net/https</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Opens TCP connection and HTTP session.</div><div class='del'>-    # </div><div class='del'>-    # When this method is called with block, gives a HTTP object</div><div class='del'>-    # to the block and closes the TCP connection / HTTP session</div><div class='del'>-    # after the block executed.</div><div class='del'>-    #</div><div class='del'>-    # When called with a block, returns the return value of the</div><div class='del'>-    # block; otherwise, returns self.</div><div class='del'>-    #</div><div class='del'>-    def start  # :yield: http</div><div class='del'>-      raise IOError, 'HTTP session already opened' if @started</div><div class='del'>-      if block_given?</div><div class='del'>-        begin</div><div class='del'>-          do_start</div><div class='del'>-          return yield(self)</div><div class='del'>-        ensure</div><div class='del'>-          do_finish</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      do_start</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def do_start</div><div class='del'>-      connect</div><div class='del'>-      @started = true</div><div class='del'>-    end</div><div class='del'>-    private :do_start</div><div class='del'>-</div><div class='del'>-    def connect</div><div class='del'>-      D "opening connection to #{conn_address()}..."</div><div class='del'>-      s = timeout(@open_timeout) { TCPSocket.open(conn_address(), conn_port()) }</div><div class='del'>-      D "opened"</div><div class='del'>-      if use_ssl?</div><div class='del'>-        unless @ssl_context.verify_mode</div><div class='del'>-          warn "warning: peer certificate won't be verified in this SSL session"</div><div class='del'>-          @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE</div><div class='del'>-        end</div><div class='del'>-        s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context)</div><div class='del'>-        s.sync_close = true</div><div class='del'>-      end</div><div class='del'>-      @socket = BufferedIO.new(s)</div><div class='del'>-      @socket.read_timeout = @read_timeout</div><div class='del'>-      @socket.debug_output = @debug_output</div><div class='del'>-      if use_ssl?</div><div class='del'>-        if proxy?</div><div class='del'>-          @socket.writeline sprintf('CONNECT %s:%s HTTP/%s',</div><div class='del'>-                                    @address, @port, HTTPVersion)</div><div class='del'>-          @socket.writeline "Host: #{@address}:#{@port}"</div><div class='del'>-          if proxy_user</div><div class='del'>-            credential = ["#{proxy_user}:#{proxy_pass}"].pack('m')</div><div class='del'>-            credential.delete!("\r\n")</div><div class='del'>-            @socket.writeline "Proxy-Authorization: Basic #{credential}"</div><div class='del'>-          end</div><div class='del'>-          @socket.writeline ''</div><div class='del'>-          HTTPResponse.read_new(@socket).value</div><div class='del'>-        end</div><div class='del'>-        s.connect</div><div class='del'>-        if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE</div><div class='del'>-          s.post_connection_check(@address)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      on_connect</div><div class='del'>-    end</div><div class='del'>-    private :connect</div><div class='del'>-</div><div class='del'>-    def on_connect</div><div class='del'>-    end</div><div class='del'>-    private :on_connect</div><div class='del'>-</div><div class='del'>-    # Finishes HTTP session and closes TCP connection.</div><div class='del'>-    # Raises IOError if not started.</div><div class='del'>-    def finish</div><div class='del'>-      raise IOError, 'HTTP session not yet started' unless started?</div><div class='del'>-      do_finish</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def do_finish</div><div class='del'>-      @started = false</div><div class='del'>-      @socket.close if @socket and not @socket.closed?</div><div class='del'>-      @socket = nil</div><div class='del'>-    end</div><div class='del'>-    private :do_finish</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # proxy</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-</div><div class='del'>-    # no proxy</div><div class='del'>-    @is_proxy_class = false</div><div class='del'>-    @proxy_addr = nil</div><div class='del'>-    @proxy_port = nil</div><div class='del'>-    @proxy_user = nil</div><div class='del'>-    @proxy_pass = nil</div><div class='del'>-</div><div class='del'>-    # Creates an HTTP proxy class.</div><div class='del'>-    # Arguments are address/port of proxy host and username/password</div><div class='del'>-    # if authorization on proxy server is required.</div><div class='del'>-    # You can replace the HTTP class with created proxy class.</div><div class='del'>-    # </div><div class='del'>-    # If ADDRESS is nil, this method returns self (Net::HTTP).</div><div class='del'>-    # </div><div class='del'>-    #     # Example</div><div class='del'>-    #     proxy_class = Net::HTTP::Proxy('proxy.example.com', 8080)</div><div class='del'>-    #                     :</div><div class='del'>-    #     proxy_class.start('www.ruby-lang.org') {|http|</div><div class='del'>-    #       # connecting proxy.foo.org:8080</div><div class='del'>-    #                     :</div><div class='del'>-    #     }</div><div class='del'>-    # </div><div class='del'>-    def HTTP.Proxy(p_addr, p_port = nil, p_user = nil, p_pass = nil)</div><div class='del'>-      return self unless p_addr</div><div class='del'>-      delta = ProxyDelta</div><div class='del'>-      proxyclass = Class.new(self)</div><div class='del'>-      proxyclass.module_eval {</div><div class='del'>-        include delta</div><div class='del'>-        # with proxy</div><div class='del'>-        @is_proxy_class = true</div><div class='del'>-        @proxy_address = p_addr</div><div class='del'>-        @proxy_port    = p_port || default_port()</div><div class='del'>-        @proxy_user    = p_user</div><div class='del'>-        @proxy_pass    = p_pass</div><div class='del'>-      }</div><div class='del'>-      proxyclass</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; HTTP</div><div class='del'>-      # returns true if self is a class which was created by HTTP::Proxy.</div><div class='del'>-      def proxy_class?</div><div class='del'>-        @is_proxy_class</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :proxy_address</div><div class='del'>-      attr_reader :proxy_port</div><div class='del'>-      attr_reader :proxy_user</div><div class='del'>-      attr_reader :proxy_pass</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # True if self is a HTTP proxy class.</div><div class='del'>-    def proxy?</div><div class='del'>-      self.class.proxy_class?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Address of proxy host. If self does not use a proxy, nil.</div><div class='del'>-    def proxy_address</div><div class='del'>-      self.class.proxy_address</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Port number of proxy host. If self does not use a proxy, nil.</div><div class='del'>-    def proxy_port</div><div class='del'>-      self.class.proxy_port</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # User name for accessing proxy. If self does not use a proxy, nil.</div><div class='del'>-    def proxy_user</div><div class='del'>-      self.class.proxy_user</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # User password for accessing proxy. If self does not use a proxy, nil.</div><div class='del'>-    def proxy_pass</div><div class='del'>-      self.class.proxy_pass</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias proxyaddr proxy_address   #:nodoc: obsolete</div><div class='del'>-    alias proxyport proxy_port      #:nodoc: obsolete</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    # without proxy</div><div class='del'>-</div><div class='del'>-    def conn_address</div><div class='del'>-      address()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def conn_port</div><div class='del'>-      port()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def edit_path(path)</div><div class='del'>-      path</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module ProxyDelta   #:nodoc: internal use only</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      def conn_address</div><div class='del'>-        proxy_address()</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def conn_port</div><div class='del'>-        proxy_port()</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def edit_path(path)</div><div class='del'>-        use_ssl? ? path : "http://#{addr_port()}#{path}"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # HTTP operations</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-</div><div class='del'>-    # Gets data from +path+ on the connected-to host.</div><div class='del'>-    # +header+ must be a Hash like { 'Accept' =&gt; '*/*', ... }.</div><div class='del'>-    #</div><div class='del'>-    # In version 1.1 (ruby 1.6), this method returns a pair of objects,</div><div class='del'>-    # a Net::HTTPResponse object and the entity body string.</div><div class='del'>-    # In version 1.2 (ruby 1.8), this method returns a Net::HTTPResponse</div><div class='del'>-    # object.</div><div class='del'>-    #</div><div class='del'>-    # If called with a block, yields each fragment of the</div><div class='del'>-    # entity body in turn as a string as it is read from</div><div class='del'>-    # the socket.  Note that in this case, the returned response</div><div class='del'>-    # object will *not* contain a (meaningful) body.</div><div class='del'>-    #</div><div class='del'>-    # +dest+ argument is obsolete.</div><div class='del'>-    # It still works but you must not use it.</div><div class='del'>-    #</div><div class='del'>-    # In version 1.1, this method might raise an exception for </div><div class='del'>-    # 3xx (redirect). In this case you can get a HTTPResponse object</div><div class='del'>-    # by "anException.response".</div><div class='del'>-    #</div><div class='del'>-    # In version 1.2, this method never raises exception.</div><div class='del'>-    #</div><div class='del'>-    #     # version 1.1 (bundled with Ruby 1.6)</div><div class='del'>-    #     response, body = http.get('/index.html')</div><div class='del'>-    #</div><div class='del'>-    #     # version 1.2 (bundled with Ruby 1.8 or later)</div><div class='del'>-    #     response = http.get('/index.html')</div><div class='del'>-    #     </div><div class='del'>-    #     # using block</div><div class='del'>-    #     File.open('result.txt', 'w') {|f|</div><div class='del'>-    #       http.get('/~foo/') do |str|</div><div class='del'>-    #         f.write str</div><div class='del'>-    #       end</div><div class='del'>-    #     }</div><div class='del'>-    #</div><div class='del'>-    def get(path, initheader = nil, dest = nil, &amp;block) # :yield: +body_segment+</div><div class='del'>-      res = nil</div><div class='del'>-      request(Get.new(path, initheader)) {|r|</div><div class='del'>-        r.read_body dest, &amp;block</div><div class='del'>-        res = r</div><div class='del'>-      }</div><div class='del'>-      unless @newimpl</div><div class='del'>-        res.value</div><div class='del'>-        return res, res.body</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Gets only the header from +path+ on the connected-to host.</div><div class='del'>-    # +header+ is a Hash like { 'Accept' =&gt; '*/*', ... }.</div><div class='del'>-    # </div><div class='del'>-    # This method returns a Net::HTTPResponse object.</div><div class='del'>-    # </div><div class='del'>-    # In version 1.1, this method might raise an exception for </div><div class='del'>-    # 3xx (redirect). On the case you can get a HTTPResponse object</div><div class='del'>-    # by "anException.response".</div><div class='del'>-    # In version 1.2, this method never raises an exception.</div><div class='del'>-    # </div><div class='del'>-    #     response = nil</div><div class='del'>-    #     Net::HTTP.start('some.www.server', 80) {|http|</div><div class='del'>-    #       response = http.head('/index.html')</div><div class='del'>-    #     }</div><div class='del'>-    #     p response['content-type']</div><div class='del'>-    #</div><div class='del'>-    def head(path, initheader = nil) </div><div class='del'>-      res = request(Head.new(path, initheader))</div><div class='del'>-      res.value unless @newimpl</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Posts +data+ (must be a String) to +path+. +header+ must be a Hash</div><div class='del'>-    # like { 'Accept' =&gt; '*/*', ... }.</div><div class='del'>-    # </div><div class='del'>-    # In version 1.1 (ruby 1.6), this method returns a pair of objects, a</div><div class='del'>-    # Net::HTTPResponse object and an entity body string.</div><div class='del'>-    # In version 1.2 (ruby 1.8), this method returns a Net::HTTPResponse object.</div><div class='del'>-    # </div><div class='del'>-    # If called with a block, yields each fragment of the</div><div class='del'>-    # entity body in turn as a string as it are read from</div><div class='del'>-    # the socket.  Note that in this case, the returned response</div><div class='del'>-    # object will *not* contain a (meaningful) body.</div><div class='del'>-    #</div><div class='del'>-    # +dest+ argument is obsolete.</div><div class='del'>-    # It still works but you must not use it.</div><div class='del'>-    # </div><div class='del'>-    # In version 1.1, this method might raise an exception for </div><div class='del'>-    # 3xx (redirect). In this case you can get an HTTPResponse object</div><div class='del'>-    # by "anException.response".</div><div class='del'>-    # In version 1.2, this method never raises exception.</div><div class='del'>-    # </div><div class='del'>-    #     # version 1.1</div><div class='del'>-    #     response, body = http.post('/cgi-bin/search.rb', 'query=foo')</div><div class='del'>-    # </div><div class='del'>-    #     # version 1.2</div><div class='del'>-    #     response = http.post('/cgi-bin/search.rb', 'query=foo')</div><div class='del'>-    # </div><div class='del'>-    #     # using block</div><div class='del'>-    #     File.open('result.txt', 'w') {|f|</div><div class='del'>-    #       http.post('/cgi-bin/search.rb', 'query=foo') do |str|</div><div class='del'>-    #         f.write str</div><div class='del'>-    #       end</div><div class='del'>-    #     }</div><div class='del'>-    #</div><div class='del'>-    # You should set Content-Type: header field for POST.</div><div class='del'>-    # If no Content-Type: field given, this method uses</div><div class='del'>-    # "application/x-www-form-urlencoded" by default.</div><div class='del'>-    #</div><div class='del'>-    def post(path, data, initheader = nil, dest = nil, &amp;block) # :yield: +body_segment+</div><div class='del'>-      res = nil</div><div class='del'>-      request(Post.new(path, initheader), data) {|r|</div><div class='del'>-        r.read_body dest, &amp;block</div><div class='del'>-        res = r</div><div class='del'>-      }</div><div class='del'>-      unless @newimpl</div><div class='del'>-        res.value</div><div class='del'>-        return res, res.body</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def put(path, data, initheader = nil)   #:nodoc:</div><div class='del'>-      res = request(Put.new(path, initheader), data)</div><div class='del'>-      res.value unless @newimpl</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a PROPPATCH request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def proppatch(path, body, initheader = nil)</div><div class='del'>-      request(Proppatch.new(path, initheader), body)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a LOCK request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def lock(path, body, initheader = nil)</div><div class='del'>-      request(Lock.new(path, initheader), body)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a UNLOCK request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def unlock(path, body, initheader = nil)</div><div class='del'>-      request(Unlock.new(path, initheader), body)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a OPTIONS request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def options(path, initheader = nil)</div><div class='del'>-      request(Options.new(path, initheader))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a PROPFIND request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def propfind(path, body = nil, initheader = {'Depth' =&gt; '0'})</div><div class='del'>-      request(Propfind.new(path, initheader), body)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a DELETE request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def delete(path, initheader = {'Depth' =&gt; 'Infinity'})</div><div class='del'>-      request(Delete.new(path, initheader))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a MOVE request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def move(path, initheader = nil)</div><div class='del'>-      request(Move.new(path, initheader))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a COPY request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def copy(path, initheader = nil)</div><div class='del'>-      request(Copy.new(path, initheader))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a MKCOL request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def mkcol(path, body = nil, initheader = nil)</div><div class='del'>-      request(Mkcol.new(path, initheader), body)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a TRACE request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    def trace(path, initheader = nil)</div><div class='del'>-      request(Trace.new(path, initheader))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a GET request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    # </div><div class='del'>-    # When called with a block, yields an HTTPResponse object.</div><div class='del'>-    # The body of this response will not have been read yet;</div><div class='del'>-    # the caller can process it using HTTPResponse#read_body,</div><div class='del'>-    # if desired.</div><div class='del'>-    #</div><div class='del'>-    # Returns the response.</div><div class='del'>-    # </div><div class='del'>-    # This method never raises Net::* exceptions.</div><div class='del'>-    # </div><div class='del'>-    #     response = http.request_get('/index.html')</div><div class='del'>-    #     # The entity body is already read here.</div><div class='del'>-    #     p response['content-type']</div><div class='del'>-    #     puts response.body</div><div class='del'>-    # </div><div class='del'>-    #     # using block</div><div class='del'>-    #     http.request_get('/index.html') {|response|</div><div class='del'>-    #       p response['content-type']</div><div class='del'>-    #       response.read_body do |str|   # read body now</div><div class='del'>-    #         print str</div><div class='del'>-    #       end</div><div class='del'>-    #     }</div><div class='del'>-    #</div><div class='del'>-    def request_get(path, initheader = nil, &amp;block) # :yield: +response+</div><div class='del'>-      request(Get.new(path, initheader), &amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a HEAD request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    #</div><div class='del'>-    # Returns the response.</div><div class='del'>-    # </div><div class='del'>-    # This method never raises Net::* exceptions.</div><div class='del'>-    # </div><div class='del'>-    #     response = http.request_head('/index.html')</div><div class='del'>-    #     p response['content-type']</div><div class='del'>-    #</div><div class='del'>-    def request_head(path, initheader = nil, &amp;block)</div><div class='del'>-      request(Head.new(path, initheader), &amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a POST request to the +path+ and gets a response,</div><div class='del'>-    # as an HTTPResponse object.</div><div class='del'>-    # </div><div class='del'>-    # When called with a block, yields an HTTPResponse object.</div><div class='del'>-    # The body of this response will not have been read yet;</div><div class='del'>-    # the caller can process it using HTTPResponse#read_body,</div><div class='del'>-    # if desired.</div><div class='del'>-    #</div><div class='del'>-    # Returns the response.</div><div class='del'>-    # </div><div class='del'>-    # This method never raises Net::* exceptions.</div><div class='del'>-    # </div><div class='del'>-    #     # example</div><div class='del'>-    #     response = http.request_post('/cgi-bin/nice.rb', 'datadatadata...')</div><div class='del'>-    #     p response.status</div><div class='del'>-    #     puts response.body          # body is already read</div><div class='del'>-    # </div><div class='del'>-    #     # using block</div><div class='del'>-    #     http.request_post('/cgi-bin/nice.rb', 'datadatadata...') {|response|</div><div class='del'>-    #       p response.status</div><div class='del'>-    #       p response['content-type']</div><div class='del'>-    #       response.read_body do |str|   # read body now</div><div class='del'>-    #         print str</div><div class='del'>-    #       end</div><div class='del'>-    #     }</div><div class='del'>-    #</div><div class='del'>-    def request_post(path, data, initheader = nil, &amp;block) # :yield: +response+</div><div class='del'>-      request Post.new(path, initheader), data, &amp;block</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def request_put(path, data, initheader = nil, &amp;block)   #:nodoc:</div><div class='del'>-      request Put.new(path, initheader), data, &amp;block</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias get2   request_get    #:nodoc: obsolete</div><div class='del'>-    alias head2  request_head   #:nodoc: obsolete</div><div class='del'>-    alias post2  request_post   #:nodoc: obsolete</div><div class='del'>-    alias put2   request_put    #:nodoc: obsolete</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Sends an HTTP request to the HTTP server.</div><div class='del'>-    # This method also sends DATA string if DATA is given.</div><div class='del'>-    #</div><div class='del'>-    # Returns a HTTPResponse object.</div><div class='del'>-    # </div><div class='del'>-    # This method never raises Net::* exceptions.</div><div class='del'>-    #</div><div class='del'>-    #    response = http.send_request('GET', '/index.html')</div><div class='del'>-    #    puts response.body</div><div class='del'>-    #</div><div class='del'>-    def send_request(name, path, data = nil, header = nil)</div><div class='del'>-      r = HTTPGenericRequest.new(name,(data ? true : false),true,path,header)</div><div class='del'>-      request r, data</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends an HTTPRequest object REQUEST to the HTTP server.</div><div class='del'>-    # This method also sends DATA string if REQUEST is a post/put request.</div><div class='del'>-    # Giving DATA for get/head request causes ArgumentError.</div><div class='del'>-    # </div><div class='del'>-    # When called with a block, yields an HTTPResponse object.</div><div class='del'>-    # The body of this response will not have been read yet;</div><div class='del'>-    # the caller can process it using HTTPResponse#read_body,</div><div class='del'>-    # if desired.</div><div class='del'>-    #</div><div class='del'>-    # Returns a HTTPResponse object.</div><div class='del'>-    # </div><div class='del'>-    # This method never raises Net::* exceptions.</div><div class='del'>-    #</div><div class='del'>-    def request(req, body = nil, &amp;block)  # :yield: +response+</div><div class='del'>-      unless started?</div><div class='del'>-        start {</div><div class='del'>-          req['connection'] ||= 'close'</div><div class='del'>-          return request(req, body, &amp;block)</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      if proxy_user()</div><div class='del'>-        unless use_ssl?</div><div class='del'>-          req.proxy_basic_auth proxy_user(), proxy_pass()</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      req.set_body_internal body</div><div class='del'>-      begin_transport req</div><div class='del'>-        req.exec @socket, @curr_http_version, edit_path(req.path)</div><div class='del'>-        begin</div><div class='del'>-          res = HTTPResponse.read_new(@socket)</div><div class='del'>-        end while res.kind_of?(HTTPContinue)</div><div class='del'>-        res.reading_body(@socket, req.response_body_permitted?) {</div><div class='del'>-          yield res if block_given?</div><div class='del'>-        }</div><div class='del'>-      end_transport req, res</div><div class='del'>-</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def begin_transport(req)</div><div class='del'>-      if @socket.closed?</div><div class='del'>-        connect</div><div class='del'>-      end</div><div class='del'>-      if @seems_1_0_server</div><div class='del'>-        req['connection'] ||= 'close'</div><div class='del'>-      end</div><div class='del'>-      if not req.response_body_permitted? and @close_on_empty_response</div><div class='del'>-        req['connection'] ||= 'close'</div><div class='del'>-      end</div><div class='del'>-      req['host'] ||= addr_port()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def end_transport(req, res)</div><div class='del'>-      @curr_http_version = res.http_version</div><div class='del'>-      if not res.body and @close_on_empty_response</div><div class='del'>-        D 'Conn close'</div><div class='del'>-        @socket.close</div><div class='del'>-      elsif keep_alive?(req, res)</div><div class='del'>-        D 'Conn keep-alive'</div><div class='del'>-        if @socket.closed?</div><div class='del'>-          D 'Conn (but seems 1.0 server)'</div><div class='del'>-          @seems_1_0_server = true</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        D 'Conn close'</div><div class='del'>-        @socket.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def keep_alive?(req, res)</div><div class='del'>-      return false if /close/i =~ req['connection'].to_s</div><div class='del'>-      return false if @seems_1_0_server</div><div class='del'>-      return true  if /keep-alive/i =~ res['connection'].to_s</div><div class='del'>-      return false if /close/i      =~ res['connection'].to_s</div><div class='del'>-      return true  if /keep-alive/i =~ res['proxy-connection'].to_s</div><div class='del'>-      return false if /close/i      =~ res['proxy-connection'].to_s</div><div class='del'>-      (@curr_http_version == '1.1')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # utils</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def addr_port</div><div class='del'>-      if use_ssl?</div><div class='del'>-        address() + (port == HTTP.https_default_port ? '' : ":#{port()}")</div><div class='del'>-      else</div><div class='del'>-        address() + (port == HTTP.http_default_port ? '' : ":#{port()}")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def D(msg)</div><div class='del'>-      return unless @debug_output</div><div class='del'>-      @debug_output &lt;&lt; msg</div><div class='del'>-      @debug_output &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  HTTPSession = HTTP</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Header module.</div><div class='del'>-  #</div><div class='del'>-  # Provides access to @header in the mixed-into class as a hash-like</div><div class='del'>-  # object, except with case-insensitive keys.  Also provides</div><div class='del'>-  # methods for accessing commonly-used header values in a more</div><div class='del'>-  # convenient format.</div><div class='del'>-  #</div><div class='del'>-  module HTTPHeader</div><div class='del'>-</div><div class='del'>-    def initialize_http_header(initheader)</div><div class='del'>-      @header = {}</div><div class='del'>-      return unless initheader</div><div class='del'>-      initheader.each do |key, value|</div><div class='del'>-        warn "net/http: warning: duplicated HTTP header: #{key}" if key?(key) and $VERBOSE</div><div class='del'>-        @header[key.downcase] = [value.strip]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def size   #:nodoc: obsolete</div><div class='del'>-      @header.size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias length size   #:nodoc: obsolete</div><div class='del'>-</div><div class='del'>-    # Returns the header field corresponding to the case-insensitive key.</div><div class='del'>-    # For example, a key of "Content-Type" might return "text/html"</div><div class='del'>-    def [](key)</div><div class='del'>-      a = @header[key.downcase] or return nil</div><div class='del'>-      a.join(', ')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sets the header field corresponding to the case-insensitive key.</div><div class='del'>-    def []=(key, val)</div><div class='del'>-      unless val</div><div class='del'>-        @header.delete key.downcase</div><div class='del'>-        return val</div><div class='del'>-      end</div><div class='del'>-      @header[key.downcase] = [val]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # [Ruby 1.8.3]</div><div class='del'>-    # Adds header field instead of replace.</div><div class='del'>-    # Second argument +val+ must be a String.</div><div class='del'>-    # See also #[]=, #[] and #get_fields.</div><div class='del'>-    #</div><div class='del'>-    #   request.add_field 'X-My-Header', 'a'</div><div class='del'>-    #   p request['X-My-Header']              #=&gt; "a"</div><div class='del'>-    #   p request.get_fields('X-My-Header')   #=&gt; ["a"]</div><div class='del'>-    #   request.add_field 'X-My-Header', 'b'</div><div class='del'>-    #   p request['X-My-Header']              #=&gt; "a, b"</div><div class='del'>-    #   p request.get_fields('X-My-Header')   #=&gt; ["a", "b"]</div><div class='del'>-    #   request.add_field 'X-My-Header', 'c'</div><div class='del'>-    #   p request['X-My-Header']              #=&gt; "a, b, c"</div><div class='del'>-    #   p request.get_fields('X-My-Header')   #=&gt; ["a", "b", "c"]</div><div class='del'>-    #</div><div class='del'>-    def add_field(key, val)</div><div class='del'>-      if @header.key?(key.downcase)</div><div class='del'>-        @header[key.downcase].push val</div><div class='del'>-      else</div><div class='del'>-        @header[key.downcase] = [val]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # [Ruby 1.8.3]</div><div class='del'>-    # Returns an array of header field strings corresponding to the</div><div class='del'>-    # case-insensitive +key+.  This method allows you to get duplicated</div><div class='del'>-    # header fields without any processing.  See also #[].</div><div class='del'>-    #</div><div class='del'>-    #   p response.get_fields('Set-Cookie')</div><div class='del'>-    #     #=&gt; ["session=al98axx; expires=Fri, 31-Dec-1999 23:58:23",</div><div class='del'>-    #          "query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"]</div><div class='del'>-    #   p response['Set-Cookie']</div><div class='del'>-    #     #=&gt; "session=al98axx; expires=Fri, 31-Dec-1999 23:58:23, query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"</div><div class='del'>-    #</div><div class='del'>-    def get_fields(key)</div><div class='del'>-      return nil unless @header[key.downcase]</div><div class='del'>-      @header[key.downcase].dup</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the header field corresponding to the case-insensitive key.</div><div class='del'>-    # Returns the default value +args+, or the result of the block, or nil,</div><div class='del'>-    # if there's no header field named key.  See Hash#fetch</div><div class='del'>-    def fetch(key, *args, &amp;block)   #:yield: +key+</div><div class='del'>-      a = @header.fetch(key.downcase, *args, &amp;block)</div><div class='del'>-      a.join(', ')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Iterates for each header names and values.</div><div class='del'>-    def each_header   #:yield: +key+, +value+</div><div class='del'>-      @header.each do |k,va|</div><div class='del'>-        yield k, va.join(', ')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias each each_header</div><div class='del'>-</div><div class='del'>-    # Iterates for each header names.</div><div class='del'>-    def each_name(&amp;block)   #:yield: +key+</div><div class='del'>-      @header.each_key(&amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias each_key each_name</div><div class='del'>-</div><div class='del'>-    # Iterates for each capitalized header names.</div><div class='del'>-    def each_capitalized_name(&amp;block)   #:yield: +key+</div><div class='del'>-      @header.each_key do |k|</div><div class='del'>-        yield capitalize(k)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Iterates for each header values.</div><div class='del'>-    def each_value   #:yield: +value+</div><div class='del'>-      @header.each_value do |va|</div><div class='del'>-        yield va.join(', ')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Removes a header field.</div><div class='del'>-    def delete(key)</div><div class='del'>-      @header.delete(key.downcase)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # true if +key+ header exists.</div><div class='del'>-    def key?(key)</div><div class='del'>-      @header.key?(key.downcase)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns a Hash consist of header names and values.</div><div class='del'>-    def to_hash</div><div class='del'>-      @header.dup</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # As for #each_header, except the keys are provided in capitalized form.</div><div class='del'>-    def each_capitalized</div><div class='del'>-      @header.each do |k,v|</div><div class='del'>-        yield capitalize(k), v.join(', ')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias canonical_each each_capitalized</div><div class='del'>-</div><div class='del'>-    def capitalize(name)</div><div class='del'>-      name.split(/-/).map {|s| s.capitalize }.join('-')</div><div class='del'>-    end</div><div class='del'>-    private :capitalize</div><div class='del'>-</div><div class='del'>-    # Returns an Array of Range objects which represents Range: header field,</div><div class='del'>-    # or +nil+ if there is no such header.</div><div class='del'>-    def range</div><div class='del'>-      return nil unless @header['range']</div><div class='del'>-      self['Range'].split(/,/).map {|spec|</div><div class='del'>-        m = /bytes\s*=\s*(\d+)?\s*-\s*(\d+)?/i.match(spec) or</div><div class='del'>-                raise HTTPHeaderSyntaxError, "wrong Range: #{spec}"</div><div class='del'>-        d1 = m[1].to_i</div><div class='del'>-        d2 = m[2].to_i</div><div class='del'>-        if    m[1] and m[2] then  d1..d2</div><div class='del'>-        elsif m[1]          then  d1..-1</div><div class='del'>-        elsif          m[2] then -d2..-1</div><div class='del'>-        else</div><div class='del'>-          raise HTTPHeaderSyntaxError, 'range is not specified'</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set Range: header from Range (arg r) or beginning index and</div><div class='del'>-    # length from it (arg idx&amp;len).</div><div class='del'>-    #</div><div class='del'>-    #   req.range = (0..1023)</div><div class='del'>-    #   req.set_range 0, 1023</div><div class='del'>-    #</div><div class='del'>-    def set_range(r, e = nil)</div><div class='del'>-      unless r</div><div class='del'>-        @header.delete 'range'</div><div class='del'>-        return r</div><div class='del'>-      end</div><div class='del'>-      r = (r...r+e) if e</div><div class='del'>-      case r</div><div class='del'>-      when Numeric</div><div class='del'>-        n = r.to_i</div><div class='del'>-        rangestr = (n &gt; 0 ? "0-#{n-1}" : "-#{-n}")</div><div class='del'>-      when Range</div><div class='del'>-        first = r.first</div><div class='del'>-        last = r.last</div><div class='del'>-        last -= 1 if r.exclude_end?</div><div class='del'>-        if last == -1</div><div class='del'>-          rangestr = (first &gt; 0 ? "#{first}-" : "-#{-first}")</div><div class='del'>-        else</div><div class='del'>-          raise HTTPHeaderSyntaxError, 'range.first is negative' if first &lt; 0</div><div class='del'>-          raise HTTPHeaderSyntaxError, 'range.last is negative' if last &lt; 0</div><div class='del'>-          raise HTTPHeaderSyntaxError, 'must be .first &lt; .last' if first &gt; last</div><div class='del'>-          rangestr = "#{first}-#{last}"</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        raise TypeError, 'Range/Integer is required'</div><div class='del'>-      end</div><div class='del'>-      @header['range'] = ["bytes=#{rangestr}"]</div><div class='del'>-      r</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias range= set_range</div><div class='del'>-</div><div class='del'>-    # Returns an Integer object which represents the Content-Length: header field</div><div class='del'>-    # or +nil+ if that field is not provided.</div><div class='del'>-    def content_length</div><div class='del'>-      return nil unless key?('Content-Length')</div><div class='del'>-      len = self['Content-Length'].slice(/\d+/) or</div><div class='del'>-          raise HTTPHeaderSyntaxError, 'wrong Content-Length format'</div><div class='del'>-      len.to_i</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def content_length=(len)</div><div class='del'>-      unless len</div><div class='del'>-        @header.delete 'content-length'</div><div class='del'>-        return nil</div><div class='del'>-      end</div><div class='del'>-      @header['content-length'] = [len.to_i.to_s]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns "true" if the "transfer-encoding" header is present and</div><div class='del'>-    # set to "chunked".  This is an HTTP/1.1 feature, allowing the </div><div class='del'>-    # the content to be sent in "chunks" without at the outset</div><div class='del'>-    # stating the entire content length.</div><div class='del'>-    def chunked?</div><div class='del'>-      return false unless @header['transfer-encoding']</div><div class='del'>-      field = self['Transfer-Encoding']</div><div class='del'>-      (/(?:\A|[^\-\w])chunked(?![\-\w])/i =~ field) ? true : false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns a Range object which represents Content-Range: header field.</div><div class='del'>-    # This indicates, for a partial entity body, where this fragment</div><div class='del'>-    # fits inside the full entity body, as range of byte offsets.</div><div class='del'>-    def content_range</div><div class='del'>-      return nil unless @header['content-range']</div><div class='del'>-      m = %r&lt;bytes\s+(\d+)-(\d+)/(\d+|\*)&gt;i.match(self['Content-Range']) or</div><div class='del'>-          raise HTTPHeaderSyntaxError, 'wrong Content-Range format'</div><div class='del'>-      m[1].to_i .. m[2].to_i + 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The length of the range represented in Content-Range: header.</div><div class='del'>-    def range_length</div><div class='del'>-      r = content_range() or return nil</div><div class='del'>-      r.end - r.begin</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns a content type string such as "text/html".</div><div class='del'>-    # This method returns nil if Content-Type: header field does not exist.</div><div class='del'>-    def content_type</div><div class='del'>-      return nil unless main_type()</div><div class='del'>-      if sub_type()</div><div class='del'>-      then "#{main_type()}/#{sub_type()}"</div><div class='del'>-      else main_type()</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns a content type string such as "text".</div><div class='del'>-    # This method returns nil if Content-Type: header field does not exist.</div><div class='del'>-    def main_type</div><div class='del'>-      return nil unless @header['content-type']</div><div class='del'>-      self['Content-Type'].split(';').first.to_s.split('/')[0].to_s.strip</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Returns a content type string such as "html".</div><div class='del'>-    # This method returns nil if Content-Type: header field does not exist</div><div class='del'>-    # or sub-type is not given (e.g. "Content-Type: text").</div><div class='del'>-    def sub_type</div><div class='del'>-      return nil unless @header['content-type']</div><div class='del'>-      main, sub = *self['Content-Type'].split(';').first.to_s.split('/')</div><div class='del'>-      return nil unless sub</div><div class='del'>-      sub.strip</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns content type parameters as a Hash as like</div><div class='del'>-    # {"charset" =&gt; "iso-2022-jp"}.</div><div class='del'>-    def type_params</div><div class='del'>-      result = {}</div><div class='del'>-      list = self['Content-Type'].to_s.split(';')</div><div class='del'>-      list.shift</div><div class='del'>-      list.each do |param|</div><div class='del'>-        k, v = *param.split('=', 2)</div><div class='del'>-        result[k.strip] = v.strip</div><div class='del'>-      end</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set Content-Type: header field by +type+ and +params+.</div><div class='del'>-    # +type+ must be a String, +params+ must be a Hash.</div><div class='del'>-    def set_content_type(type, params = {})</div><div class='del'>-      @header['content-type'] = [type + params.map{|k,v|"; #{k}=#{v}"}.join('')]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias content_type= set_content_type</div><div class='del'>-</div><div class='del'>-    # Set header fields and a body from HTML form data.</div><div class='del'>-    # +params+ should be a Hash containing HTML form data.</div><div class='del'>-    # Optional argument +sep+ means data record separator.</div><div class='del'>-    #</div><div class='del'>-    # This method also set Content-Type: header field to</div><div class='del'>-    # application/x-www-form-urlencoded.</div><div class='del'>-    def set_form_data(params, sep = '&amp;')</div><div class='del'>-      self.body = params.map {|k,v| "#{urlencode(k.to_s)}=#{urlencode(v.to_s)}" }.join(sep)</div><div class='del'>-      self.content_type = 'application/x-www-form-urlencoded'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias form_data= set_form_data</div><div class='del'>-</div><div class='del'>-    def urlencode(str)</div><div class='del'>-      str.gsub(/[^a-zA-Z0-9_\.\-]/n) {|s| sprintf('%%%02x', s[0]) }</div><div class='del'>-    end</div><div class='del'>-    private :urlencode</div><div class='del'>-</div><div class='del'>-    # Set the Authorization: header for "Basic" authorization.</div><div class='del'>-    def basic_auth(account, password)</div><div class='del'>-      @header['authorization'] = [basic_encode(account, password)]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set Proxy-Authorization: header for "Basic" authorization.</div><div class='del'>-    def proxy_basic_auth(account, password)</div><div class='del'>-      @header['proxy-authorization'] = [basic_encode(account, password)]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def basic_encode(account, password)</div><div class='del'>-      'Basic ' + ["#{account}:#{password}"].pack('m').delete("\r\n")</div><div class='del'>-    end</div><div class='del'>-    private :basic_encode</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'>-  # Parent of HTTPRequest class.  Do not use this directly; use</div><div class='del'>-  # a subclass of HTTPRequest.</div><div class='del'>-  #</div><div class='del'>-  # Mixes in the HTTPHeader module.</div><div class='del'>-  #</div><div class='del'>-  class HTTPGenericRequest</div><div class='del'>-</div><div class='del'>-    include HTTPHeader</div><div class='del'>-</div><div class='del'>-    def initialize(m, reqbody, resbody, path, initheader = nil)</div><div class='del'>-      @method = m</div><div class='del'>-      @request_has_body = reqbody</div><div class='del'>-      @response_has_body = resbody</div><div class='del'>-      raise ArgumentError, "HTTP request path is empty" if path.empty?</div><div class='del'>-      @path = path</div><div class='del'>-      initialize_http_header initheader</div><div class='del'>-      self['Accept'] ||= '*/*'</div><div class='del'>-      @body = nil</div><div class='del'>-      @body_stream = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :method</div><div class='del'>-    attr_reader :path</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "\#&lt;#{self.class} #{@method}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def request_body_permitted?</div><div class='del'>-      @request_has_body</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def response_body_permitted?</div><div class='del'>-      @response_has_body</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def body_exist?</div><div class='del'>-      warn "Net::HTTPRequest#body_exist? is obsolete; use response_body_permitted?" if $VERBOSE</div><div class='del'>-      response_body_permitted?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :body</div><div class='del'>-</div><div class='del'>-    def body=(str)</div><div class='del'>-      @body = str</div><div class='del'>-      @body_stream = nil</div><div class='del'>-      str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :body_stream</div><div class='del'>-</div><div class='del'>-    def body_stream=(input)</div><div class='del'>-      @body = nil</div><div class='del'>-      @body_stream = input</div><div class='del'>-      input</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def set_body_internal(str)   #:nodoc: internal use only</div><div class='del'>-      raise ArgumentError, "both of body argument and HTTPRequest#body set" if str and (@body or @body_stream)</div><div class='del'>-      self.body = str if str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # write</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def exec(sock, ver, path)   #:nodoc: internal use only</div><div class='del'>-      if @body</div><div class='del'>-        send_request_with_body sock, ver, path, @body</div><div class='del'>-      elsif @body_stream</div><div class='del'>-        send_request_with_body_stream sock, ver, path, @body_stream</div><div class='del'>-      else</div><div class='del'>-        write_header sock, ver, path</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def send_request_with_body(sock, ver, path, body)</div><div class='del'>-      self.content_length = body.length</div><div class='del'>-      delete 'Transfer-Encoding'</div><div class='del'>-      supply_default_content_type</div><div class='del'>-      write_header sock, ver, path</div><div class='del'>-      sock.write body</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_request_with_body_stream(sock, ver, path, f)</div><div class='del'>-      unless content_length() or chunked?</div><div class='del'>-        raise ArgumentError,</div><div class='del'>-            "Content-Length not given and Transfer-Encoding is not `chunked'"</div><div class='del'>-      end</div><div class='del'>-      supply_default_content_type</div><div class='del'>-      write_header sock, ver, path</div><div class='del'>-      if chunked?</div><div class='del'>-        while s = f.read(1024)</div><div class='del'>-          sock.write(sprintf("%x\r\n", s.length) &lt;&lt; s &lt;&lt; "\r\n")</div><div class='del'>-        end</div><div class='del'>-        sock.write "0\r\n\r\n"</div><div class='del'>-      else</div><div class='del'>-        while s = f.read(1024)</div><div class='del'>-          sock.write 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 supply_default_content_type</div><div class='del'>-      return if content_type()</div><div class='del'>-      warn 'net/http: warning: Content-Type did not set; using application/x-www-form-urlencoded' if $VERBOSE</div><div class='del'>-      set_content_type 'application/x-www-form-urlencoded'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write_header(sock, ver, path)</div><div class='del'>-      buf = "#{@method} #{path} HTTP/#{ver}\r\n"</div><div class='del'>-      each_capitalized do |k,v|</div><div class='del'>-        buf &lt;&lt; "#{k}: #{v}\r\n"</div><div class='del'>-      end</div><div class='del'>-      buf &lt;&lt; "\r\n"</div><div class='del'>-      sock.write buf</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'>-  # HTTP request class. This class wraps request header and entity path.</div><div class='del'>-  # You *must* use its subclass, Net::HTTP::Get, Post, Head.</div><div class='del'>-  # </div><div class='del'>-  class HTTPRequest &lt; HTTPGenericRequest</div><div class='del'>-</div><div class='del'>-    # Creates HTTP request object.</div><div class='del'>-    def initialize(path, initheader = nil)</div><div class='del'>-      super self.class::METHOD,</div><div class='del'>-            self.class::REQUEST_HAS_BODY,</div><div class='del'>-            self.class::RESPONSE_HAS_BODY,</div><div class='del'>-            path, initheader</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class HTTP   # reopen</div><div class='del'>-    #</div><div class='del'>-    # HTTP 1.1 methods --- RFC2616</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    class Get &lt; HTTPRequest</div><div class='del'>-      METHOD = 'GET'</div><div class='del'>-      REQUEST_HAS_BODY  = false</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Head &lt; HTTPRequest</div><div class='del'>-      METHOD = 'HEAD'</div><div class='del'>-      REQUEST_HAS_BODY = false</div><div class='del'>-      RESPONSE_HAS_BODY = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Post &lt; HTTPRequest</div><div class='del'>-      METHOD = 'POST'</div><div class='del'>-      REQUEST_HAS_BODY = true</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Put &lt; HTTPRequest</div><div class='del'>-      METHOD = 'PUT'</div><div class='del'>-      REQUEST_HAS_BODY = true</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Delete &lt; HTTPRequest</div><div class='del'>-      METHOD = 'DELETE'</div><div class='del'>-      REQUEST_HAS_BODY = false</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Options &lt; HTTPRequest</div><div class='del'>-      METHOD = 'OPTIONS'</div><div class='del'>-      REQUEST_HAS_BODY = false</div><div class='del'>-      RESPONSE_HAS_BODY = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Trace &lt; HTTPRequest</div><div class='del'>-      METHOD = 'TRACE'</div><div class='del'>-      REQUEST_HAS_BODY = false</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # WebDAV methods --- RFC2518</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    class Propfind &lt; HTTPRequest</div><div class='del'>-      METHOD = 'PROPFIND'</div><div class='del'>-      REQUEST_HAS_BODY = true</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Proppatch &lt; HTTPRequest</div><div class='del'>-      METHOD = 'PROPPATCH'</div><div class='del'>-      REQUEST_HAS_BODY = true</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Mkcol &lt; HTTPRequest</div><div class='del'>-      METHOD = 'MKCOL'</div><div class='del'>-      REQUEST_HAS_BODY = true</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Copy &lt; HTTPRequest</div><div class='del'>-      METHOD = 'COPY'</div><div class='del'>-      REQUEST_HAS_BODY = false</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Move &lt; HTTPRequest</div><div class='del'>-      METHOD = 'MOVE'</div><div class='del'>-      REQUEST_HAS_BODY = false</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Lock &lt; HTTPRequest</div><div class='del'>-      METHOD = 'LOCK'</div><div class='del'>-      REQUEST_HAS_BODY = true</div><div class='del'>-      RESPONSE_HAS_BODY = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Unlock &lt; HTTPRequest</div><div class='del'>-      METHOD = 'UNLOCK'</div><div class='del'>-      REQUEST_HAS_BODY = true</div><div class='del'>-      RESPONSE_HAS_BODY = true</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'>-  ### Response</div><div class='del'>-  ###</div><div class='del'>-</div><div class='del'>-  # HTTP exception class.</div><div class='del'>-  # You must use its subclasses.</div><div class='del'>-  module HTTPExceptions</div><div class='del'>-    def initialize(msg, res)   #:nodoc:</div><div class='del'>-      super msg</div><div class='del'>-      @response = res</div><div class='del'>-    end</div><div class='del'>-    attr_reader :response</div><div class='del'>-    alias data response    #:nodoc: obsolete</div><div class='del'>-  end</div><div class='del'>-  class HTTPError &lt; ProtocolError</div><div class='del'>-    include HTTPExceptions</div><div class='del'>-  end</div><div class='del'>-  class HTTPRetriableError &lt; ProtoRetriableError</div><div class='del'>-    include HTTPExceptions</div><div class='del'>-  end</div><div class='del'>-  class HTTPServerException &lt; ProtoServerError</div><div class='del'>-    # We cannot use the name "HTTPServerError", it is the name of the response.</div><div class='del'>-    include HTTPExceptions</div><div class='del'>-  end</div><div class='del'>-  class HTTPFatalError &lt; ProtoFatalError</div><div class='del'>-    include HTTPExceptions</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # HTTP response class. This class wraps response header and entity.</div><div class='del'>-  # Mixes in the HTTPHeader module, which provides access to response</div><div class='del'>-  # header values both via hash-like methods and individual readers.</div><div class='del'>-  # Note that each possible HTTP response code defines its own </div><div class='del'>-  # HTTPResponse subclass.  These are listed below.</div><div class='del'>-  # All classes are</div><div class='del'>-  # defined under the Net module. Indentation indicates inheritance.</div><div class='del'>-  # </div><div class='del'>-  #   xxx        HTTPResponse</div><div class='del'>-  # </div><div class='del'>-  #     1xx        HTTPInformation</div><div class='del'>-  #       100        HTTPContinue    </div><div class='del'>-  #       101        HTTPSwitchProtocol</div><div class='del'>-  # </div><div class='del'>-  #     2xx        HTTPSuccess</div><div class='del'>-  #       200        HTTPOK</div><div class='del'>-  #       201        HTTPCreated</div><div class='del'>-  #       202        HTTPAccepted</div><div class='del'>-  #       203        HTTPNonAuthoritativeInformation</div><div class='del'>-  #       204        HTTPNoContent</div><div class='del'>-  #       205        HTTPResetContent</div><div class='del'>-  #       206        HTTPPartialContent</div><div class='del'>-  # </div><div class='del'>-  #     3xx        HTTPRedirection</div><div class='del'>-  #       300        HTTPMultipleChoice</div><div class='del'>-  #       301        HTTPMovedPermanently</div><div class='del'>-  #       302        HTTPFound</div><div class='del'>-  #       303        HTTPSeeOther</div><div class='del'>-  #       304        HTTPNotModified</div><div class='del'>-  #       305        HTTPUseProxy</div><div class='del'>-  #       307        HTTPTemporaryRedirect</div><div class='del'>-  # </div><div class='del'>-  #     4xx        HTTPClientError</div><div class='del'>-  #       400        HTTPBadRequest</div><div class='del'>-  #       401        HTTPUnauthorized</div><div class='del'>-  #       402        HTTPPaymentRequired</div><div class='del'>-  #       403        HTTPForbidden</div><div class='del'>-  #       404        HTTPNotFound</div><div class='del'>-  #       405        HTTPMethodNotAllowed</div><div class='del'>-  #       406        HTTPNotAcceptable</div><div class='del'>-  #       407        HTTPProxyAuthenticationRequired</div><div class='del'>-  #       408        HTTPRequestTimeOut</div><div class='del'>-  #       409        HTTPConflict</div><div class='del'>-  #       410        HTTPGone</div><div class='del'>-  #       411        HTTPLengthRequired</div><div class='del'>-  #       412        HTTPPreconditionFailed</div><div class='del'>-  #       413        HTTPRequestEntityTooLarge</div><div class='del'>-  #       414        HTTPRequestURITooLong</div><div class='del'>-  #       415        HTTPUnsupportedMediaType</div><div class='del'>-  #       416        HTTPRequestedRangeNotSatisfiable</div><div class='del'>-  #       417        HTTPExpectationFailed</div><div class='del'>-  # </div><div class='del'>-  #     5xx        HTTPServerError</div><div class='del'>-  #       500        HTTPInternalServerError</div><div class='del'>-  #       501        HTTPNotImplemented</div><div class='del'>-  #       502        HTTPBadGateway</div><div class='del'>-  #       503        HTTPServiceUnavailable</div><div class='del'>-  #       504        HTTPGatewayTimeOut</div><div class='del'>-  #       505        HTTPVersionNotSupported</div><div class='del'>-  # </div><div class='del'>-  #     xxx        HTTPUnknownResponse</div><div class='del'>-  #</div><div class='del'>-  class HTTPResponse</div><div class='del'>-    # true if the response has body.</div><div class='del'>-    def HTTPResponse.body_permitted?</div><div class='del'>-      self::HAS_BODY</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def HTTPResponse.exception_type   # :nodoc: internal use only</div><div class='del'>-      self::EXCEPTION_TYPE</div><div class='del'>-    end</div><div class='del'>-  end   # reopened after</div><div class='del'>-</div><div class='del'>-  # :stopdoc:</div><div class='del'>-</div><div class='del'>-  class HTTPUnknownResponse &lt; HTTPResponse</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-    EXCEPTION_TYPE = HTTPError</div><div class='del'>-  end</div><div class='del'>-  class HTTPInformation &lt; HTTPResponse           # 1xx</div><div class='del'>-    HAS_BODY = false</div><div class='del'>-    EXCEPTION_TYPE = HTTPError</div><div class='del'>-  end</div><div class='del'>-  class HTTPSuccess &lt; HTTPResponse               # 2xx</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-    EXCEPTION_TYPE = HTTPError</div><div class='del'>-  end</div><div class='del'>-  class HTTPRedirection &lt; HTTPResponse           # 3xx</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-    EXCEPTION_TYPE = HTTPRetriableError</div><div class='del'>-  end</div><div class='del'>-  class HTTPClientError &lt; HTTPResponse           # 4xx</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-    EXCEPTION_TYPE = HTTPServerException   # for backward compatibility</div><div class='del'>-  end</div><div class='del'>-  class HTTPServerError &lt; HTTPResponse           # 5xx</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-    EXCEPTION_TYPE = HTTPFatalError    # for backward compatibility</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HTTPContinue &lt; HTTPInformation           # 100</div><div class='del'>-    HAS_BODY = false</div><div class='del'>-  end</div><div class='del'>-  class HTTPSwitchProtocol &lt; HTTPInformation     # 101</div><div class='del'>-    HAS_BODY = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HTTPOK &lt; HTTPSuccess                            # 200</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPCreated &lt; HTTPSuccess                       # 201</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPAccepted &lt; HTTPSuccess                      # 202</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPNonAuthoritativeInformation &lt; HTTPSuccess   # 203</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPNoContent &lt; HTTPSuccess                     # 204</div><div class='del'>-    HAS_BODY = false</div><div class='del'>-  end</div><div class='del'>-  class HTTPResetContent &lt; HTTPSuccess                  # 205</div><div class='del'>-    HAS_BODY = false</div><div class='del'>-  end</div><div class='del'>-  class HTTPPartialContent &lt; HTTPSuccess                # 206</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HTTPMultipleChoice &lt; HTTPRedirection     # 300</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPMovedPermanently &lt; HTTPRedirection   # 301</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPFound &lt; HTTPRedirection              # 302</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  HTTPMovedTemporarily = HTTPFound</div><div class='del'>-  class HTTPSeeOther &lt; HTTPRedirection           # 303</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPNotModified &lt; HTTPRedirection        # 304</div><div class='del'>-    HAS_BODY = false</div><div class='del'>-  end</div><div class='del'>-  class HTTPUseProxy &lt; HTTPRedirection           # 305</div><div class='del'>-    HAS_BODY = false</div><div class='del'>-  end</div><div class='del'>-  # 306 unused</div><div class='del'>-  class HTTPTemporaryRedirect &lt; HTTPRedirection  # 307</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HTTPBadRequest &lt; HTTPClientError                    # 400</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPUnauthorized &lt; HTTPClientError                  # 401</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPPaymentRequired &lt; HTTPClientError               # 402</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPForbidden &lt; HTTPClientError                     # 403</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPNotFound &lt; HTTPClientError                      # 404</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPMethodNotAllowed &lt; HTTPClientError              # 405</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPNotAcceptable &lt; HTTPClientError                 # 406</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPProxyAuthenticationRequired &lt; HTTPClientError   # 407</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPRequestTimeOut &lt; HTTPClientError                # 408</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPConflict &lt; HTTPClientError                      # 409</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPGone &lt; HTTPClientError                          # 410</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPLengthRequired &lt; HTTPClientError                # 411</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPPreconditionFailed &lt; HTTPClientError            # 412</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPRequestEntityTooLarge &lt; HTTPClientError         # 413</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPRequestURITooLong &lt; HTTPClientError             # 414</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  HTTPRequestURITooLarge = HTTPRequestURITooLong</div><div class='del'>-  class HTTPUnsupportedMediaType &lt; HTTPClientError          # 415</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPRequestedRangeNotSatisfiable &lt; HTTPClientError  # 416</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPExpectationFailed &lt; HTTPClientError             # 417</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HTTPInternalServerError &lt; HTTPServerError   # 500</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPNotImplemented &lt; HTTPServerError        # 501</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPBadGateway &lt; HTTPServerError            # 502</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPServiceUnavailable &lt; HTTPServerError    # 503</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPGatewayTimeOut &lt; HTTPServerError        # 504</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-  class HTTPVersionNotSupported &lt; HTTPServerError   # 505</div><div class='del'>-    HAS_BODY = true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # :startdoc:</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class HTTPResponse   # reopen</div><div class='del'>-</div><div class='del'>-    CODE_CLASS_TO_OBJ = {</div><div class='del'>-      '1' =&gt; HTTPInformation,</div><div class='del'>-      '2' =&gt; HTTPSuccess,</div><div class='del'>-      '3' =&gt; HTTPRedirection,</div><div class='del'>-      '4' =&gt; HTTPClientError,</div><div class='del'>-      '5' =&gt; HTTPServerError</div><div class='del'>-    }</div><div class='del'>-    CODE_TO_OBJ = {</div><div class='del'>-      '100' =&gt; HTTPContinue,</div><div class='del'>-      '101' =&gt; HTTPSwitchProtocol,</div><div class='del'>-</div><div class='del'>-      '200' =&gt; HTTPOK,</div><div class='del'>-      '201' =&gt; HTTPCreated,</div><div class='del'>-      '202' =&gt; HTTPAccepted,</div><div class='del'>-      '203' =&gt; HTTPNonAuthoritativeInformation,</div><div class='del'>-      '204' =&gt; HTTPNoContent,</div><div class='del'>-      '205' =&gt; HTTPResetContent,</div><div class='del'>-      '206' =&gt; HTTPPartialContent,</div><div class='del'>-</div><div class='del'>-      '300' =&gt; HTTPMultipleChoice,</div><div class='del'>-      '301' =&gt; HTTPMovedPermanently,</div><div class='del'>-      '302' =&gt; HTTPFound,</div><div class='del'>-      '303' =&gt; HTTPSeeOther,</div><div class='del'>-      '304' =&gt; HTTPNotModified,</div><div class='del'>-      '305' =&gt; HTTPUseProxy,</div><div class='del'>-      '307' =&gt; HTTPTemporaryRedirect,</div><div class='del'>-</div><div class='del'>-      '400' =&gt; HTTPBadRequest,</div><div class='del'>-      '401' =&gt; HTTPUnauthorized,</div><div class='del'>-      '402' =&gt; HTTPPaymentRequired,</div><div class='del'>-      '403' =&gt; HTTPForbidden,</div><div class='del'>-      '404' =&gt; HTTPNotFound,</div><div class='del'>-      '405' =&gt; HTTPMethodNotAllowed,</div><div class='del'>-      '406' =&gt; HTTPNotAcceptable,</div><div class='del'>-      '407' =&gt; HTTPProxyAuthenticationRequired,</div><div class='del'>-      '408' =&gt; HTTPRequestTimeOut,</div><div class='del'>-      '409' =&gt; HTTPConflict,</div><div class='del'>-      '410' =&gt; HTTPGone,</div><div class='del'>-      '411' =&gt; HTTPLengthRequired,</div><div class='del'>-      '412' =&gt; HTTPPreconditionFailed,</div><div class='del'>-      '413' =&gt; HTTPRequestEntityTooLarge,</div><div class='del'>-      '414' =&gt; HTTPRequestURITooLong,</div><div class='del'>-      '415' =&gt; HTTPUnsupportedMediaType,</div><div class='del'>-      '416' =&gt; HTTPRequestedRangeNotSatisfiable,</div><div class='del'>-      '417' =&gt; HTTPExpectationFailed,</div><div class='del'>-</div><div class='del'>-      '500' =&gt; HTTPInternalServerError,</div><div class='del'>-      '501' =&gt; HTTPNotImplemented,</div><div class='del'>-      '502' =&gt; HTTPBadGateway,</div><div class='del'>-      '503' =&gt; HTTPServiceUnavailable,</div><div class='del'>-      '504' =&gt; HTTPGatewayTimeOut,</div><div class='del'>-      '505' =&gt; HTTPVersionNotSupported</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; HTTPResponse</div><div class='del'>-      def read_new(sock)   #:nodoc: internal use only</div><div class='del'>-        httpv, code, msg = read_status_line(sock)</div><div class='del'>-        res = response_class(code).new(httpv, code, msg)</div><div class='del'>-        each_response_header(sock) do |k,v|</div><div class='del'>-          res.add_field k, v</div><div class='del'>-        end</div><div class='del'>-        res</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      def read_status_line(sock)</div><div class='del'>-        str = sock.readline</div><div class='del'>-        m = /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)\s*(.*)\z/in.match(str) or</div><div class='del'>-          raise HTTPBadResponse, "wrong status line: #{str.dump}"</div><div class='del'>-        m.captures</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def response_class(code)</div><div class='del'>-        CODE_TO_OBJ[code] or</div><div class='del'>-        CODE_CLASS_TO_OBJ[code[0,1]] or</div><div class='del'>-        HTTPUnknownResponse</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def each_response_header(sock)</div><div class='del'>-        while true</div><div class='del'>-          line = sock.readuntil("\n", true).sub(/\s+\z/, '')</div><div class='del'>-          break if line.empty?</div><div class='del'>-          m = /\A([^:]+):\s*/.match(line) or</div><div class='del'>-              raise HTTPBadResponse, 'wrong header line format'</div><div class='del'>-          yield m[1], m.post_match</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # next is to fix bug in RDoc, where the private inside class &lt;&lt; self</div><div class='del'>-    # spills out.</div><div class='del'>-    public </div><div class='del'>-</div><div class='del'>-    include HTTPHeader</div><div class='del'>-</div><div class='del'>-    def initialize(httpv, code, msg)   #:nodoc: internal use only</div><div class='del'>-      @http_version = httpv</div><div class='del'>-      @code         = code</div><div class='del'>-      @message      = msg</div><div class='del'>-      initialize_http_header nil</div><div class='del'>-      @body = nil</div><div class='del'>-      @read = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The HTTP version supported by the server.</div><div class='del'>-    attr_reader :http_version</div><div class='del'>-</div><div class='del'>-    # HTTP result code string. For example, '302'.  You can also</div><div class='del'>-    # determine the response type by which response subclass the</div><div class='del'>-    # response object is an instance of.</div><div class='del'>-    attr_reader :code</div><div class='del'>-</div><div class='del'>-    # HTTP result message. For example, 'Not Found'.</div><div class='del'>-    attr_reader :message</div><div class='del'>-    alias msg message   # :nodoc: obsolete</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class} #{@code} #{@message} readbody=#{@read}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # For backward compatibility.</div><div class='del'>-    # To allow Net::HTTP 1.1 style assignment</div><div class='del'>-    # e.g.</div><div class='del'>-    #    response, body = Net::HTTP.get(....)</div><div class='del'>-    # </div><div class='del'>-    def to_ary</div><div class='del'>-      warn "net/http.rb: warning: Net::HTTP v1.1 style assignment found at #{caller(1)[0]}; use `response = http.get(...)' instead." if $VERBOSE</div><div class='del'>-      res = self.dup</div><div class='del'>-      class &lt;&lt; res</div><div class='del'>-        undef to_ary</div><div class='del'>-      end</div><div class='del'>-      [res, res.body]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # response &lt;-&gt; exception relationship</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def code_type   #:nodoc:</div><div class='del'>-      self.class</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def error!   #:nodoc:</div><div class='del'>-      raise error_type().new(@code + ' ' + @message.dump, self)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def error_type   #:nodoc:</div><div class='del'>-      self.class::EXCEPTION_TYPE</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Raises HTTP error if the response is not 2xx.</div><div class='del'>-    def value</div><div class='del'>-      error! unless self.kind_of?(HTTPSuccess)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # header (for backward compatibility only; DO NOT USE)</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def response   #:nodoc:</div><div class='del'>-      warn "#{caller(1)[0]}: warning: HTTPResponse#response is obsolete" if $VERBOSE</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def header   #:nodoc:</div><div class='del'>-      warn "#{caller(1)[0]}: warning: HTTPResponse#header is obsolete" if $VERBOSE</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def read_header   #:nodoc:</div><div class='del'>-      warn "#{caller(1)[0]}: warning: HTTPResponse#read_header is obsolete" if $VERBOSE</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # body</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def reading_body(sock, reqmethodallowbody)  #:nodoc: internal use only</div><div class='del'>-      @socket = sock</div><div class='del'>-      @body_exist = reqmethodallowbody &amp;&amp; self.class.body_permitted?</div><div class='del'>-      begin</div><div class='del'>-        yield</div><div class='del'>-        self.body   # ensure to read body</div><div class='del'>-      ensure</div><div class='del'>-        @socket = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Gets entity body.  If the block given, yields it to +block+.</div><div class='del'>-    # The body is provided in fragments, as it is read in from the socket.</div><div class='del'>-    #</div><div class='del'>-    # Calling this method a second or subsequent time will return the</div><div class='del'>-    # already read string.</div><div class='del'>-    #</div><div class='del'>-    #   http.request_get('/index.html') {|res|</div><div class='del'>-    #     puts res.read_body</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    #   http.request_get('/index.html') {|res|</div><div class='del'>-    #     p res.read_body.object_id   # 538149362</div><div class='del'>-    #     p res.read_body.object_id   # 538149362</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    #   # using iterator</div><div class='del'>-    #   http.request_get('/index.html') {|res|</div><div class='del'>-    #     res.read_body do |segment|</div><div class='del'>-    #       print segment</div><div class='del'>-    #     end</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    def read_body(dest = nil, &amp;block)</div><div class='del'>-      if @read</div><div class='del'>-        raise IOError, "#{self.class}\#read_body called twice" if dest or block</div><div class='del'>-        return @body</div><div class='del'>-      end</div><div class='del'>-      to = procdest(dest, block)</div><div class='del'>-      stream_check</div><div class='del'>-      if @body_exist</div><div class='del'>-        read_body_0 to</div><div class='del'>-        @body = to</div><div class='del'>-      else</div><div class='del'>-        @body = nil</div><div class='del'>-      end</div><div class='del'>-      @read = true</div><div class='del'>-</div><div class='del'>-      @body</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the entity body.</div><div class='del'>-    #</div><div class='del'>-    # Calling this method a second or subsequent time will return the</div><div class='del'>-    # already read string.</div><div class='del'>-    #</div><div class='del'>-    #   http.request_get('/index.html') {|res|</div><div class='del'>-    #     puts res.body</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    #   http.request_get('/index.html') {|res|</div><div class='del'>-    #     p res.body.object_id   # 538149362</div><div class='del'>-    #     p res.body.object_id   # 538149362</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    def body</div><div class='del'>-      read_body()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias entity body   #:nodoc: obsolete</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def read_body_0(dest)</div><div class='del'>-      if chunked?</div><div class='del'>-        read_chunked dest</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      clen = content_length()</div><div class='del'>-      if clen</div><div class='del'>-        @socket.read clen, dest, true   # ignore EOF</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      clen = range_length()</div><div class='del'>-      if clen</div><div class='del'>-        @socket.read clen, dest</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      @socket.read_all dest</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def read_chunked(dest)</div><div class='del'>-      len = nil</div><div class='del'>-      total = 0</div><div class='del'>-      while true</div><div class='del'>-        line = @socket.readline</div><div class='del'>-        hexlen = line.slice(/[0-9a-fA-F]+/) or</div><div class='del'>-            raise HTTPBadResponse, "wrong chunk size line: #{line}"</div><div class='del'>-        len = hexlen.hex</div><div class='del'>-        break if len == 0</div><div class='del'>-        @socket.read len, dest; total += len</div><div class='del'>-        @socket.read 2   # \r\n</div><div class='del'>-      end</div><div class='del'>-      until @socket.readline.empty?</div><div class='del'>-        # none</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def stream_check</div><div class='del'>-      raise IOError, 'attempt to read body out of block' if @socket.closed?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def procdest(dest, block)</div><div class='del'>-      raise ArgumentError, 'both arg and block given for HTTP method' \</div><div class='del'>-          if dest and block</div><div class='del'>-      if block</div><div class='del'>-        ReadAdapter.new(block)</div><div class='del'>-      else</div><div class='del'>-        dest || ''</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'>-  # :enddoc:</div><div class='del'>-</div><div class='del'>-  #--</div><div class='del'>-  # for backward compatibility</div><div class='del'>-  class HTTP</div><div class='del'>-    ProxyMod = ProxyDelta</div><div class='del'>-  end</div><div class='del'>-  module NetPrivate</div><div class='del'>-    HTTPRequest = ::Net::HTTPRequest</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  HTTPInformationCode = HTTPInformation</div><div class='del'>-  HTTPSuccessCode     = HTTPSuccess</div><div class='del'>-  HTTPRedirectionCode = HTTPRedirection</div><div class='del'>-  HTTPRetriableCode   = HTTPRedirection</div><div class='del'>-  HTTPClientErrorCode = HTTPClientError</div><div class='del'>-  HTTPFatalErrorCode  = HTTPClientError</div><div class='del'>-  HTTPServerErrorCode = HTTPServerError</div><div class='del'>-  HTTPResponceReceiver = HTTPResponse</div><div class='del'>-</div><div class='del'>-end   # module Net</div><div class='head'>diff --git a/lib/net/https.rb b/lib/net/https.rb<br/>deleted file mode 100644<br/>index 7847c3ffea..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/net/https.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/https.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,173 +0,0 @@</div><div class='del'>-=begin</div><div class='del'>-</div><div class='del'>-= $RCSfile$ -- 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) 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'>-== Requirements</div><div class='del'>-  This program requires Net 1.2.0 or higher version.</div><div class='del'>-  You can get it from RAA or Ruby's CVS repository.</div><div class='del'>-</div><div class='del'>-== Version</div><div class='del'>-  $Id$</div><div class='del'>-  </div><div class='del'>-  2001-11-06: Contiributed to Ruby/OpenSSL project.</div><div class='del'>-  2004-03-06: Some code is merged in to net/http.</div><div class='del'>-</div><div class='del'>-== Example</div><div class='del'>-</div><div class='del'>-Here is a simple HTTP client:</div><div class='del'>-</div><div class='del'>-    require 'net/http'</div><div class='del'>-    require 'uri'</div><div class='del'>-</div><div class='del'>-    uri = URI.parse(ARGV[0] || 'http://localhost/')</div><div class='del'>-    http = Net::HTTP.new(uri.host, uri.port)</div><div class='del'>-    http.start {</div><div class='del'>-      http.request_get(uri.path) {|res|</div><div class='del'>-        print res.body</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-It can be replaced by the following code:</div><div class='del'>-</div><div class='del'>-    require 'net/https'</div><div class='del'>-    require 'uri'</div><div class='del'>-</div><div class='del'>-    uri = URI.parse(ARGV[0] || 'https://localhost/')</div><div class='del'>-    http = Net::HTTP.new(uri.host, uri.port)</div><div class='del'>-    http.use_ssl = true if uri.scheme == "https"  # enable SSL/TLS</div><div class='del'>-    http.start {</div><div class='del'>-      http.request_get(uri.path) {|res|</div><div class='del'>-        print res.body</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-== class Net::HTTP</div><div class='del'>-</div><div class='del'>-=== Instance Methods</div><div class='del'>-</div><div class='del'>-: use_ssl?</div><div class='del'>-    returns true if use SSL/TLS with HTTP.</div><div class='del'>-</div><div class='del'>-: use_ssl=((|true_or_false|))</div><div class='del'>-    sets use_ssl.</div><div class='del'>-</div><div class='del'>-: peer_cert</div><div class='del'>-    return the X.509 certificates the server presented.</div><div class='del'>-</div><div class='del'>-: key, key=((|key|))</div><div class='del'>-    Sets an OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.</div><div class='del'>-    (This method is appeared in Michal Rokos's OpenSSL extension.)</div><div class='del'>-</div><div class='del'>-: cert, cert=((|cert|))</div><div class='del'>-    Sets an OpenSSL::X509::Certificate object as client certificate</div><div class='del'>-    (This method is appeared in Michal Rokos's OpenSSL extension).</div><div class='del'>-</div><div class='del'>-: ca_file, ca_file=((|path|))</div><div class='del'>-    Sets path of a CA certification file in PEM format.</div><div class='del'>-    The file can contrain several CA certificats.</div><div class='del'>-</div><div class='del'>-: ca_path, ca_path=((|path|))</div><div class='del'>-    Sets path of a CA certification directory containing certifications</div><div class='del'>-    in PEM format.</div><div class='del'>-</div><div class='del'>-: verify_mode, verify_mode=((|mode|))</div><div class='del'>-    Sets the flags for server the certification verification at</div><div class='del'>-    begining of SSL/TLS session.</div><div class='del'>-    OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER is acceptable.</div><div class='del'>-</div><div class='del'>-: verify_callback, verify_callback=((|proc|))</div><div class='del'>-    Sets the verify callback for the server certification verification.</div><div class='del'>-</div><div class='del'>-: verify_depth, verify_depth=((|num|))</div><div class='del'>-    Sets the maximum depth for the certificate chain verification.</div><div class='del'>-</div><div class='del'>-: cert_store, cert_store=((|store|))</div><div class='del'>-    Sets the X509::Store to verify peer certificate.</div><div class='del'>-</div><div class='del'>-: ssl_timeout, ssl_timeout=((|sec|))</div><div class='del'>-    Sets the SSL timeout seconds.</div><div class='del'>-</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-require 'net/http'</div><div class='del'>-require 'openssl'</div><div class='del'>-</div><div class='del'>-module Net</div><div class='del'>-</div><div class='del'>-  class HTTP</div><div class='del'>-    remove_method :use_ssl?</div><div class='del'>-    def use_ssl?</div><div class='del'>-      @use_ssl</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # For backward compatibility.</div><div class='del'>-    alias use_ssl use_ssl?</div><div class='del'>-</div><div class='del'>-    # Turn on/off SSL.</div><div class='del'>-    # This flag must be set before starting session.</div><div class='del'>-    # If you change use_ssl value after session started,</div><div class='del'>-    # a Net::HTTP object raises IOError.</div><div class='del'>-    def use_ssl=(flag)</div><div class='del'>-      flag = (flag ? true : false)</div><div class='del'>-      raise IOError, "use_ssl value changed, but session already started" \</div><div class='del'>-          if started? and @use_ssl != flag</div><div class='del'>-      if flag and not @ssl_context</div><div class='del'>-        @ssl_context = OpenSSL::SSL::SSLContext.new</div><div class='del'>-      end</div><div class='del'>-      @use_ssl = flag</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.ssl_context_accessor(name)</div><div class='del'>-      module_eval(&lt;&lt;-End, __FILE__, __LINE__ + 1)</div><div class='del'>-        def #{name}</div><div class='del'>-          return nil unless @ssl_context</div><div class='del'>-          @ssl_context.#{name}</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def #{name}=(val)</div><div class='del'>-          @ssl_context ||= OpenSSL::SSL::SSLContext.new</div><div class='del'>-          @ssl_context.#{name} = val</div><div class='del'>-        end</div><div class='del'>-      End</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ssl_context_accessor :key</div><div class='del'>-    ssl_context_accessor :cert</div><div class='del'>-    ssl_context_accessor :ca_file</div><div class='del'>-    ssl_context_accessor :ca_path</div><div class='del'>-    ssl_context_accessor :verify_mode</div><div class='del'>-    ssl_context_accessor :verify_callback</div><div class='del'>-    ssl_context_accessor :verify_depth</div><div class='del'>-    ssl_context_accessor :cert_store</div><div class='del'>-</div><div class='del'>-    def ssl_timeout</div><div class='del'>-      return nil unless @ssl_context</div><div class='del'>-      @ssl_context.timeout</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ssl_timeout=(sec)</div><div class='del'>-      raise ArgumentError, 'Net::HTTP#ssl_timeout= called but use_ssl=false' \</div><div class='del'>-          unless use_ssl?</div><div class='del'>-      @ssl_context ||= OpenSSL::SSL::SSLContext.new</div><div class='del'>-      @ssl_context.timeout = sec</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # For backward compatibility</div><div class='del'>-    alias timeout= ssl_timeout=</div><div class='del'>-</div><div class='del'>-    def peer_cert</div><div class='del'>-      return nil if not use_ssl? or not @socket</div><div class='del'>-      @socket.io.peer_cert</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/net/imap.rb b/lib/net/imap.rb<br/>deleted file mode 100644<br/>index f8c0d3be4c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/net/imap.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/imap.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,3371 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = net/imap.rb</div><div class='del'>-#</div><div class='del'>-# Copyright (C) 2000  Shugo Maeda &lt;shugo@ruby-lang.org&gt;</div><div class='del'>-#</div><div class='del'>-# This library is distributed under the terms of the Ruby license.</div><div class='del'>-# You can freely distribute/modify this library.</div><div class='del'>-#</div><div class='del'>-# Documentation: Shugo Maeda, with RDoc conversion and overview by William</div><div class='del'>-# Webber.</div><div class='del'>-#</div><div class='del'>-# See Net::IMAP for documentation. </div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require "socket"</div><div class='del'>-require "monitor"</div><div class='del'>-require "digest/md5"</div><div class='del'>-begin</div><div class='del'>-  require "openssl"</div><div class='del'>-rescue LoadError</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Net</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Net::IMAP implements Internet Message Access Protocol (IMAP) client</div><div class='del'>-  # functionality.  The protocol is described in [IMAP].</div><div class='del'>-  #</div><div class='del'>-  # == IMAP Overview</div><div class='del'>-  #</div><div class='del'>-  # An IMAP client connects to a server, and then authenticates</div><div class='del'>-  # itself using either #authenticate() or #login().  Having</div><div class='del'>-  # authenticated itself, there is a range of commands</div><div class='del'>-  # available to it.  Most work with mailboxes, which may be</div><div class='del'>-  # arranged in an hierarchical namespace, and each of which</div><div class='del'>-  # contains zero or more messages.  How this is implemented on</div><div class='del'>-  # the server is implementation-dependent; on a UNIX server, it</div><div class='del'>-  # will frequently be implemented as a files in mailbox format</div><div class='del'>-  # within a hierarchy of directories.</div><div class='del'>-  #</div><div class='del'>-  # To work on the messages within a mailbox, the client must</div><div class='del'>-  # first select that mailbox, using either #select() or (for</div><div class='del'>-  # read-only access) #examine().  Once the client has successfully</div><div class='del'>-  # selected a mailbox, they enter _selected_ state, and that</div><div class='del'>-  # mailbox becomes the _current_ mailbox, on which mail-item</div><div class='del'>-  # related commands implicitly operate.  </div><div class='del'>-  #</div><div class='del'>-  # Messages have two sorts of identifiers: message sequence</div><div class='del'>-  # numbers, and UIDs.  </div><div class='del'>-  #</div><div class='del'>-  # Message sequence numbers number messages within a mail box </div><div class='del'>-  # from 1 up to the number of items in the mail box.  If new</div><div class='del'>-  # message arrives during a session, it receives a sequence</div><div class='del'>-  # number equal to the new size of the mail box.  If messages</div><div class='del'>-  # are expunged from the mailbox, remaining messages have their</div><div class='del'>-  # sequence numbers "shuffled down" to fill the gaps.</div><div class='del'>-  #</div><div class='del'>-  # UIDs, on the other hand, are permanently guaranteed not to</div><div class='del'>-  # identify another message within the same mailbox, even if </div><div class='del'>-  # the existing message is deleted.  UIDs are required to</div><div class='del'>-  # be assigned in ascending (but not necessarily sequential)</div><div class='del'>-  # order within a mailbox; this means that if a non-IMAP client</div><div class='del'>-  # rearranges the order of mailitems within a mailbox, the</div><div class='del'>-  # UIDs have to be reassigned.  An IMAP client cannot thus</div><div class='del'>-  # rearrange message orders.</div><div class='del'>-  #</div><div class='del'>-  # == Examples of Usage</div><div class='del'>-  #</div><div class='del'>-  # === List sender and subject of all recent messages in the default mailbox</div><div class='del'>-  #</div><div class='del'>-  #   imap = Net::IMAP.new('mail.example.com')</div><div class='del'>-  #   imap.authenticate('LOGIN', 'joe_user', 'joes_password')</div><div class='del'>-  #   imap.examine('INBOX')</div><div class='del'>-  #   imap.search(["RECENT"]).each do |message_id|</div><div class='del'>-  #     envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]</div><div class='del'>-  #     puts "#{envelope.from[0].name}: \t#{envelope.subject}"</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  # === Move all messages from April 2003 from "Mail/sent-mail" to "Mail/sent-apr03"</div><div class='del'>-  #</div><div class='del'>-  #   imap = Net::IMAP.new('mail.example.com')</div><div class='del'>-  #   imap.authenticate('LOGIN', 'joe_user', 'joes_password')</div><div class='del'>-  #   imap.select('Mail/sent-mail')</div><div class='del'>-  #   if not imap.list('Mail/', 'sent-apr03')</div><div class='del'>-  #     imap.create('Mail/sent-apr03')</div><div class='del'>-  #   end</div><div class='del'>-  #   imap.search(["BEFORE", "30-Apr-2003", "SINCE", "1-Apr-2003"]).each do |message_id|</div><div class='del'>-  #     imap.copy(message_id, "Mail/sent-apr03")</div><div class='del'>-  #     imap.store(message_id, "+FLAGS", [:Deleted])</div><div class='del'>-  #   end</div><div class='del'>-  #   imap.expunge</div><div class='del'>-  # </div><div class='del'>-  # == Thread Safety</div><div class='del'>-  #</div><div class='del'>-  # Net::IMAP supports concurrent threads. For example,</div><div class='del'>-  # </div><div class='del'>-  #   imap = Net::IMAP.new("imap.foo.net", "imap2")</div><div class='del'>-  #   imap.authenticate("cram-md5", "bar", "password")</div><div class='del'>-  #   imap.select("inbox")</div><div class='del'>-  #   fetch_thread = Thread.start { imap.fetch(1..-1, "UID") }</div><div class='del'>-  #   search_result = imap.search(["BODY", "hello"])</div><div class='del'>-  #   fetch_result = fetch_thread.value</div><div class='del'>-  #   imap.disconnect</div><div class='del'>-  # </div><div class='del'>-  # This script invokes the FETCH command and the SEARCH command concurrently.</div><div class='del'>-  #</div><div class='del'>-  # == Errors</div><div class='del'>-  #</div><div class='del'>-  # An IMAP server can send three different types of responses to indicate</div><div class='del'>-  # failure:</div><div class='del'>-  #</div><div class='del'>-  # NO:: the attempted command could not be successfully completed.  For</div><div class='del'>-  #      instance, the username/password used for logging in are incorrect;</div><div class='del'>-  #      the selected mailbox does not exists; etc.  </div><div class='del'>-  #</div><div class='del'>-  # BAD:: the request from the client does not follow the server's </div><div class='del'>-  #       understanding of the IMAP protocol.  This includes attempting</div><div class='del'>-  #       commands from the wrong client state; for instance, attempting</div><div class='del'>-  #       to perform a SEARCH command without having SELECTed a current</div><div class='del'>-  #       mailbox.  It can also signal an internal server</div><div class='del'>-  #       failure (such as a disk crash) has occurred.</div><div class='del'>-  #</div><div class='del'>-  # BYE:: the server is saying goodbye.  This can be part of a normal</div><div class='del'>-  #       logout sequence, and can be used as part of a login sequence</div><div class='del'>-  #       to indicate that the server is (for some reason) unwilling</div><div class='del'>-  #       to accept our connection.  As a response to any other command,</div><div class='del'>-  #       it indicates either that the server is shutting down, or that</div><div class='del'>-  #       the server is timing out the client connection due to inactivity.</div><div class='del'>-  #</div><div class='del'>-  # These three error response are represented by the errors</div><div class='del'>-  # Net::IMAP::NoResponseError, Net::IMAP::BadResponseError, and</div><div class='del'>-  # Net::IMAP::ByeResponseError, all of which are subclasses of</div><div class='del'>-  # Net::IMAP::ResponseError.  Essentially, all methods that involve</div><div class='del'>-  # sending a request to the server can generate one of these errors.</div><div class='del'>-  # Only the most pertinent instances have been documented below.</div><div class='del'>-  #</div><div class='del'>-  # Because the IMAP class uses Sockets for communication, its methods</div><div class='del'>-  # are also susceptible to the various errors that can occur when</div><div class='del'>-  # working with sockets.  These are generally represented as</div><div class='del'>-  # Errno errors.  For instance, any method that involves sending a</div><div class='del'>-  # request to the server and/or receiving a response from it could</div><div class='del'>-  # raise an Errno::EPIPE error if the network connection unexpectedly</div><div class='del'>-  # goes down.  See the socket(7), ip(7), tcp(7), socket(2), connect(2),</div><div class='del'>-  # and associated man pages.</div><div class='del'>-  #</div><div class='del'>-  # Finally, a Net::IMAP::DataFormatError is thrown if low-level data</div><div class='del'>-  # is found to be in an incorrect format (for instance, when converting</div><div class='del'>-  # between UTF-8 and UTF-16), and Net::IMAP::ResponseParseError is </div><div class='del'>-  # thrown if a server response is non-parseable. </div><div class='del'>-  #</div><div class='del'>-  #</div><div class='del'>-  # == References</div><div class='del'>-  #</div><div class='del'>-  # [[IMAP]]</div><div class='del'>-  #    M. Crispin, "INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1",</div><div class='del'>-  #    RFC 2060, December 1996.  (Note: since obsoleted by RFC 3501)</div><div class='del'>-  #</div><div class='del'>-  # [[LANGUAGE-TAGS]]</div><div class='del'>-  #    Alvestrand, H., "Tags for the Identification of</div><div class='del'>-  #    Languages", RFC 1766, March 1995.</div><div class='del'>-  #</div><div class='del'>-  # [[MD5]]</div><div class='del'>-  #    Myers, J., and M. Rose, "The Content-MD5 Header Field", RFC</div><div class='del'>-  #    1864, October 1995.</div><div class='del'>-  #</div><div class='del'>-  # [[MIME-IMB]]</div><div class='del'>-  #    Freed, N., and N. Borenstein, "MIME (Multipurpose Internet</div><div class='del'>-  #    Mail Extensions) Part One: Format of Internet Message Bodies", RFC</div><div class='del'>-  #    2045, November 1996.</div><div class='del'>-  #</div><div class='del'>-  # [[RFC-822]]</div><div class='del'>-  #    Crocker, D., "Standard for the Format of ARPA Internet Text</div><div class='del'>-  #    Messages", STD 11, RFC 822, University of Delaware, August 1982.</div><div class='del'>-  #</div><div class='del'>-  # [[RFC-2087]]</div><div class='del'>-  #    Myers, J., "IMAP4 QUOTA extension", RFC 2087, January 1997.</div><div class='del'>-  #</div><div class='del'>-  # [[RFC-2086]]</div><div class='del'>-  #    Myers, J., "IMAP4 ACL extension", RFC 2086, January 1997.</div><div class='del'>-  #</div><div class='del'>-  # [[RFC-2195]]</div><div class='del'>-  #    Klensin, J., Catoe, R., and Krumviede, P., "IMAP/POP AUTHorize Extension</div><div class='del'>-  #    for Simple Challenge/Response", RFC 2195, September 1997.</div><div class='del'>-  #</div><div class='del'>-  # [[SORT-THREAD-EXT]]</div><div class='del'>-  #    Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - SORT and THREAD</div><div class='del'>-  #    Extensions", draft-ietf-imapext-sort, May 2003.</div><div class='del'>-  #</div><div class='del'>-  # [[OSSL]]</div><div class='del'>-  #    http://www.openssl.org</div><div class='del'>-  #</div><div class='del'>-  # [[RSSL]]</div><div class='del'>-  #    http://savannah.gnu.org/projects/rubypki</div><div class='del'>-  #</div><div class='del'>-  # [[UTF7]]</div><div class='del'>-  #    Goldsmith, D. and Davis, M., "UTF-7: A Mail-Safe Transformation Format of</div><div class='del'>-  #    Unicode", RFC 2152, May 1997.</div><div class='del'>-  #</div><div class='del'>-  class IMAP</div><div class='del'>-    include MonitorMixin</div><div class='del'>-    if defined?(OpenSSL)</div><div class='del'>-      include OpenSSL</div><div class='del'>-      include SSL</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #  Returns an initial greeting response from the server.</div><div class='del'>-    attr_reader :greeting</div><div class='del'>-</div><div class='del'>-    # Returns recorded untagged responses.  For example:</div><div class='del'>-    #</div><div class='del'>-    #   imap.select("inbox")</div><div class='del'>-    #   p imap.responses["EXISTS"][-1]</div><div class='del'>-    #   #=&gt; 2</div><div class='del'>-    #   p imap.responses["UIDVALIDITY"][-1]</div><div class='del'>-    #   #=&gt; 968263756</div><div class='del'>-    attr_reader :responses</div><div class='del'>-</div><div class='del'>-    # Returns all response handlers.</div><div class='del'>-    attr_reader :response_handlers</div><div class='del'>-</div><div class='del'>-    # The thread to receive exceptions.</div><div class='del'>-    attr_accessor :client_thread</div><div class='del'>-</div><div class='del'>-    # Flag indicating a message has been seen</div><div class='del'>-    SEEN = :Seen</div><div class='del'>-</div><div class='del'>-    # Flag indicating a message has been answered</div><div class='del'>-    ANSWERED = :Answered</div><div class='del'>-</div><div class='del'>-    # Flag indicating a message has been flagged for special or urgent</div><div class='del'>-    # attention</div><div class='del'>-    FLAGGED = :Flagged</div><div class='del'>-</div><div class='del'>-    # Flag indicating a message has been marked for deletion.  This</div><div class='del'>-    # will occur when the mailbox is closed or expunged.</div><div class='del'>-    DELETED = :Deleted</div><div class='del'>-</div><div class='del'>-    # Flag indicating a message is only a draft or work-in-progress version.</div><div class='del'>-    DRAFT = :Draft</div><div class='del'>-</div><div class='del'>-    # Flag indicating that the message is "recent", meaning that this</div><div class='del'>-    # session is the first session in which the client has been notified</div><div class='del'>-    # of this message.</div><div class='del'>-    RECENT = :Recent</div><div class='del'>-</div><div class='del'>-    # Flag indicating that a mailbox context name cannot contain</div><div class='del'>-    # children.</div><div class='del'>-    NOINFERIORS = :Noinferiors</div><div class='del'>-</div><div class='del'>-    # Flag indicating that a mailbox is not selected.</div><div class='del'>-    NOSELECT = :Noselect</div><div class='del'>-</div><div class='del'>-    # Flag indicating that a mailbox has been marked "interesting" by</div><div class='del'>-    # the server; this commonly indicates that the mailbox contains</div><div class='del'>-    # new messages.</div><div class='del'>-    MARKED = :Marked</div><div class='del'>-</div><div class='del'>-    # Flag indicating that the mailbox does not contains new messages.</div><div class='del'>-    UNMARKED = :Unmarked</div><div class='del'>-</div><div class='del'>-    # Returns the debug mode.</div><div class='del'>-    def self.debug</div><div class='del'>-      return @@debug</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sets the debug mode.</div><div class='del'>-    def self.debug=(val)</div><div class='del'>-      return @@debug = val</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adds an authenticator for Net::IMAP#authenticate.  +auth_type+</div><div class='del'>-    # is the type of authentication this authenticator supports</div><div class='del'>-    # (for instance, "LOGIN").  The +authenticator+ is an object</div><div class='del'>-    # which defines a process() method to handle authentication with</div><div class='del'>-    # the server.  See Net::IMAP::LoginAuthenticator and </div><div class='del'>-    # Net::IMAP::CramMD5Authenticator for examples.</div><div class='del'>-    #</div><div class='del'>-    # If +auth_type+ refers to an existing authenticator, it will be</div><div class='del'>-    # replaced by the new one.</div><div class='del'>-    def self.add_authenticator(auth_type, authenticator)</div><div class='del'>-      @@authenticators[auth_type] = authenticator</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Disconnects from the server.</div><div class='del'>-    def disconnect</div><div class='del'>-      if SSL::SSLSocket === @sock</div><div class='del'>-        @sock.io.shutdown</div><div class='del'>-      else</div><div class='del'>-        @sock.shutdown</div><div class='del'>-      end</div><div class='del'>-      @receiver_thread.join</div><div class='del'>-      @sock.close</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns true if disconnected from the server.</div><div class='del'>-    def disconnected?</div><div class='del'>-      return @sock.closed?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a CAPABILITY command, and returns an array of</div><div class='del'>-    # capabilities that the server supports.  Each capability</div><div class='del'>-    # is a string.  See [IMAP] for a list of possible</div><div class='del'>-    # capabilities.</div><div class='del'>-    #</div><div class='del'>-    # Note that the Net::IMAP class does not modify its</div><div class='del'>-    # behaviour according to the capabilities of the server;</div><div class='del'>-    # it is up to the user of the class to ensure that </div><div class='del'>-    # a certain capability is supported by a server before</div><div class='del'>-    # using it.</div><div class='del'>-    def capability</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command("CAPABILITY")</div><div class='del'>-        return @responses.delete("CAPABILITY")[-1]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a NOOP command to the server. It does nothing.</div><div class='del'>-    def noop</div><div class='del'>-      send_command("NOOP")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a LOGOUT command to inform the server that the client is</div><div class='del'>-    # done with the connection.</div><div class='del'>-    def logout</div><div class='del'>-      send_command("LOGOUT")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends an AUTHENTICATE command to authenticate the client.</div><div class='del'>-    # The +auth_type+ parameter is a string that represents</div><div class='del'>-    # the authentication mechanism to be used. Currently Net::IMAP</div><div class='del'>-    # supports authentication mechanisms:</div><div class='del'>-    #</div><div class='del'>-    #   LOGIN:: login using cleartext user and password. </div><div class='del'>-    #   CRAM-MD5:: login with cleartext user and encrypted password</div><div class='del'>-    #              (see [RFC-2195] for a full description).  This</div><div class='del'>-    #              mechanism requires that the server have the user's</div><div class='del'>-    #              password stored in clear-text password.</div><div class='del'>-    #</div><div class='del'>-    # For both these mechanisms, there should be two +args+: username</div><div class='del'>-    # and (cleartext) password.  A server may not support one or other</div><div class='del'>-    # of these mechanisms; check #capability() for a capability of</div><div class='del'>-    # the form "AUTH=LOGIN" or "AUTH=CRAM-MD5".</div><div class='del'>-    #</div><div class='del'>-    # Authentication is done using the appropriate authenticator object:</div><div class='del'>-    # see @@authenticators for more information on plugging in your own</div><div class='del'>-    # authenticator.</div><div class='del'>-    #</div><div class='del'>-    # For example:</div><div class='del'>-    #</div><div class='del'>-    #    imap.authenticate('LOGIN', user, password)</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if authentication fails.</div><div class='del'>-    def authenticate(auth_type, *args)</div><div class='del'>-      auth_type = auth_type.upcase</div><div class='del'>-      unless @@authenticators.has_key?(auth_type)</div><div class='del'>-        raise ArgumentError,</div><div class='del'>-          format('unknown auth type - "%s"', auth_type)</div><div class='del'>-      end</div><div class='del'>-      authenticator = @@authenticators[auth_type].new(*args)</div><div class='del'>-      send_command("AUTHENTICATE", auth_type) do |resp|</div><div class='del'>-        if resp.instance_of?(ContinuationRequest)</div><div class='del'>-          data = authenticator.process(resp.data.text.unpack("m")[0])</div><div class='del'>-          s = [data].pack("m").gsub(/\n/, "")</div><div class='del'>-          send_string_data(s)</div><div class='del'>-          put_string(CRLF)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a LOGIN command to identify the client and carries</div><div class='del'>-    # the plaintext +password+ authenticating this +user+.  Note</div><div class='del'>-    # that, unlike calling #authenticate() with an +auth_type+</div><div class='del'>-    # of "LOGIN", #login() does *not* use the login authenticator.</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if authentication fails.</div><div class='del'>-    def login(user, password)</div><div class='del'>-      send_command("LOGIN", user, password)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a SELECT command to select a +mailbox+ so that messages</div><div class='del'>-    # in the +mailbox+ can be accessed. </div><div class='del'>-    #</div><div class='del'>-    # After you have selected a mailbox, you may retrieve the</div><div class='del'>-    # number of items in that mailbox from @responses["EXISTS"][-1],</div><div class='del'>-    # and the number of recent messages from @responses["RECENT"][-1].</div><div class='del'>-    # Note that these values can change if new messages arrive</div><div class='del'>-    # during a session; see #add_response_handler() for a way of</div><div class='del'>-    # detecting this event.</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if the mailbox does not</div><div class='del'>-    # exist or is for some reason non-selectable.</div><div class='del'>-    def select(mailbox)</div><div class='del'>-      synchronize do</div><div class='del'>-        @responses.clear</div><div class='del'>-        send_command("SELECT", mailbox)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a EXAMINE command to select a +mailbox+ so that messages</div><div class='del'>-    # in the +mailbox+ can be accessed.  Behaves the same as #select(),</div><div class='del'>-    # except that the selected +mailbox+ is identified as read-only.</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if the mailbox does not</div><div class='del'>-    # exist or is for some reason non-examinable.</div><div class='del'>-    def examine(mailbox)</div><div class='del'>-      synchronize do</div><div class='del'>-        @responses.clear</div><div class='del'>-        send_command("EXAMINE", mailbox)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a CREATE command to create a new +mailbox+.</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if a mailbox with that name</div><div class='del'>-    # cannot be created.</div><div class='del'>-    def create(mailbox)</div><div class='del'>-      send_command("CREATE", mailbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a DELETE command to remove the +mailbox+.</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if a mailbox with that name</div><div class='del'>-    # cannot be deleted, either because it does not exist or because the</div><div class='del'>-    # client does not have permission to delete it.</div><div class='del'>-    def delete(mailbox)</div><div class='del'>-      send_command("DELETE", mailbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a RENAME command to change the name of the +mailbox+ to</div><div class='del'>-    # +newname+.</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if a mailbox with the </div><div class='del'>-    # name +mailbox+ cannot be renamed to +newname+ for whatever</div><div class='del'>-    # reason; for instance, because +mailbox+ does not exist, or</div><div class='del'>-    # because there is already a mailbox with the name +newname+.</div><div class='del'>-    def rename(mailbox, newname)</div><div class='del'>-      send_command("RENAME", mailbox, newname)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a SUBSCRIBE command to add the specified +mailbox+ name to</div><div class='del'>-    # the server's set of "active" or "subscribed" mailboxes as returned</div><div class='del'>-    # by #lsub().</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if +mailbox+ cannot be</div><div class='del'>-    # subscribed to, for instance because it does not exist.</div><div class='del'>-    def subscribe(mailbox)</div><div class='del'>-      send_command("SUBSCRIBE", mailbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a UNSUBSCRIBE command to remove the specified +mailbox+ name</div><div class='del'>-    # from the server's set of "active" or "subscribed" mailboxes.</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if +mailbox+ cannot be</div><div class='del'>-    # unsubscribed from, for instance because the client is not currently</div><div class='del'>-    # subscribed to it.</div><div class='del'>-    def unsubscribe(mailbox)</div><div class='del'>-      send_command("UNSUBSCRIBE", mailbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a LIST command, and returns a subset of names from</div><div class='del'>-    # the complete set of all names available to the client.</div><div class='del'>-    # +refname+ provides a context (for instance, a base directory</div><div class='del'>-    # in a directory-based mailbox hierarchy).  +mailbox+ specifies</div><div class='del'>-    # a mailbox or (via wildcards) mailboxes under that context.</div><div class='del'>-    # Two wildcards may be used in +mailbox+: '*', which matches</div><div class='del'>-    # all characters *including* the hierarchy delimiter (for instance,</div><div class='del'>-    # '/' on a UNIX-hosted directory-based mailbox hierarchy); and '%',</div><div class='del'>-    # which matches all characters *except* the hierarchy delimiter.</div><div class='del'>-    #</div><div class='del'>-    # If +refname+ is empty, +mailbox+ is used directly to determine</div><div class='del'>-    # which mailboxes to match.  If +mailbox+ is empty, the root</div><div class='del'>-    # name of +refname+ and the hierarchy delimiter are returned.</div><div class='del'>-    #</div><div class='del'>-    # The return value is an array of +Net::IMAP::MailboxList+. For example:</div><div class='del'>-    #</div><div class='del'>-    #   imap.create("foo/bar")</div><div class='del'>-    #   imap.create("foo/baz")</div><div class='del'>-    #   p imap.list("", "foo/%")</div><div class='del'>-    #   #=&gt; [#&lt;Net::IMAP::MailboxList attr=[:Noselect], delim="/", name="foo/"&gt;, \\ </div><div class='del'>-    #        #&lt;Net::IMAP::MailboxList attr=[:Noinferiors, :Marked], delim="/", name="foo/bar"&gt;, \\ </div><div class='del'>-    #        #&lt;Net::IMAP::MailboxList attr=[:Noinferiors], delim="/", name="foo/baz"&gt;]</div><div class='del'>-    def list(refname, mailbox)</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command("LIST", refname, mailbox)</div><div class='del'>-        return @responses.delete("LIST")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends the GETQUOTAROOT command along with specified +mailbox+.</div><div class='del'>-    # This command is generally available to both admin and user.</div><div class='del'>-    # If mailbox exists, returns an array containing objects of</div><div class='del'>-    # Net::IMAP::MailboxQuotaRoot and Net::IMAP::MailboxQuota.</div><div class='del'>-    def getquotaroot(mailbox)</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command("GETQUOTAROOT", mailbox)</div><div class='del'>-        result = []</div><div class='del'>-        result.concat(@responses.delete("QUOTAROOT"))</div><div class='del'>-        result.concat(@responses.delete("QUOTA"))</div><div class='del'>-        return result</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends the GETQUOTA command along with specified +mailbox+.</div><div class='del'>-    # If this mailbox exists, then an array containing a</div><div class='del'>-    # Net::IMAP::MailboxQuota object is returned.  This</div><div class='del'>-    # command generally is only available to server admin.</div><div class='del'>-    def getquota(mailbox)</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command("GETQUOTA", mailbox)</div><div class='del'>-        return @responses.delete("QUOTA")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a SETQUOTA command along with the specified +mailbox+ and</div><div class='del'>-    # +quota+.  If +quota+ is nil, then quota will be unset for that</div><div class='del'>-    # mailbox.  Typically one needs to be logged in as server admin</div><div class='del'>-    # for this to work.  The IMAP quota commands are described in</div><div class='del'>-    # [RFC-2087].</div><div class='del'>-    def setquota(mailbox, quota)</div><div class='del'>-      if quota.nil?</div><div class='del'>-        data = '()'</div><div class='del'>-      else</div><div class='del'>-        data = '(STORAGE ' + quota.to_s + ')'</div><div class='del'>-      end</div><div class='del'>-      send_command("SETQUOTA", mailbox, RawData.new(data))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends the SETACL command along with +mailbox+, +user+ and the</div><div class='del'>-    # +rights+ that user is to have on that mailbox.  If +rights+ is nil,</div><div class='del'>-    # then that user will be stripped of any rights to that mailbox.</div><div class='del'>-    # The IMAP ACL commands are described in [RFC-2086].</div><div class='del'>-    def setacl(mailbox, user, rights)</div><div class='del'>-      if rights.nil? </div><div class='del'>-        send_command("SETACL", mailbox, user, "")</div><div class='del'>-      else</div><div class='del'>-        send_command("SETACL", mailbox, user, rights)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Send the GETACL command along with specified +mailbox+.</div><div class='del'>-    # If this mailbox exists, an array containing objects of</div><div class='del'>-    # Net::IMAP::MailboxACLItem will be returned.</div><div class='del'>-    def getacl(mailbox)</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command("GETACL", mailbox)</div><div class='del'>-        return @responses.delete("ACL")[-1]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a LSUB command, and returns a subset of names from the set</div><div class='del'>-    # of names that the user has declared as being "active" or</div><div class='del'>-    # "subscribed".  +refname+ and +mailbox+ are interpreted as </div><div class='del'>-    # for #list().</div><div class='del'>-    # The return value is an array of +Net::IMAP::MailboxList+.</div><div class='del'>-    def lsub(refname, mailbox)</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command("LSUB", refname, mailbox)</div><div class='del'>-        return @responses.delete("LSUB")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a STATUS command, and returns the status of the indicated</div><div class='del'>-    # +mailbox+. +attr+ is a list of one or more attributes that</div><div class='del'>-    # we are request the status of.  Supported attributes include:</div><div class='del'>-    #</div><div class='del'>-    #   MESSAGES:: the number of messages in the mailbox.</div><div class='del'>-    #   RECENT:: the number of recent messages in the mailbox.</div><div class='del'>-    #   UNSEEN:: the number of unseen messages in the mailbox.</div><div class='del'>-    #</div><div class='del'>-    # The return value is a hash of attributes. For example:</div><div class='del'>-    #</div><div class='del'>-    #   p imap.status("inbox", ["MESSAGES", "RECENT"])</div><div class='del'>-    #   #=&gt; {"RECENT"=&gt;0, "MESSAGES"=&gt;44}</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if status values </div><div class='del'>-    # for +mailbox+ cannot be returned, for instance because it</div><div class='del'>-    # does not exist.</div><div class='del'>-    def status(mailbox, attr)</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command("STATUS", mailbox, attr)</div><div class='del'>-        return @responses.delete("STATUS")[-1].attr</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a APPEND command to append the +message+ to the end of</div><div class='del'>-    # the +mailbox+. The optional +flags+ argument is an array of </div><div class='del'>-    # flags to initially passing to the new message.  The optional</div><div class='del'>-    # +date_time+ argument specifies the creation time to assign to the </div><div class='del'>-    # new message; it defaults to the current time.</div><div class='del'>-    # For example:</div><div class='del'>-    #</div><div class='del'>-    #   imap.append("inbox", &lt;&lt;EOF.gsub(/\n/, "\r\n"), [:Seen], Time.now)</div><div class='del'>-    #   Subject: hello</div><div class='del'>-    #   From: shugo@ruby-lang.org</div><div class='del'>-    #   To: shugo@ruby-lang.org</div><div class='del'>-    #   </div><div class='del'>-    #   hello world</div><div class='del'>-    #   EOF</div><div class='del'>-    #</div><div class='del'>-    # A Net::IMAP::NoResponseError is raised if the mailbox does</div><div class='del'>-    # not exist (it is not created automatically), or if the flags,</div><div class='del'>-    # date_time, or message arguments contain errors.</div><div class='del'>-    def append(mailbox, message, flags = nil, date_time = nil)</div><div class='del'>-      args = []</div><div class='del'>-      if flags</div><div class='del'>-        args.push(flags)</div><div class='del'>-      end</div><div class='del'>-      args.push(date_time) if date_time</div><div class='del'>-      args.push(Literal.new(message))</div><div class='del'>-      send_command("APPEND", mailbox, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a CHECK command to request a checkpoint of the currently</div><div class='del'>-    # selected mailbox.  This performs implementation-specific</div><div class='del'>-    # housekeeping, for instance, reconciling the mailbox's </div><div class='del'>-    # in-memory and on-disk state.</div><div class='del'>-    def check</div><div class='del'>-      send_command("CHECK")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a CLOSE command to close the currently selected mailbox.</div><div class='del'>-    # The CLOSE command permanently removes from the mailbox all</div><div class='del'>-    # messages that have the \Deleted flag set.</div><div class='del'>-    def close</div><div class='del'>-      send_command("CLOSE")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a EXPUNGE command to permanently remove from the currently</div><div class='del'>-    # selected mailbox all messages that have the \Deleted flag set.</div><div class='del'>-    def expunge</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command("EXPUNGE")</div><div class='del'>-        return @responses.delete("EXPUNGE")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a SEARCH command to search the mailbox for messages that</div><div class='del'>-    # match the given searching criteria, and returns message sequence</div><div class='del'>-    # numbers.  +keys+ can either be a string holding the entire </div><div class='del'>-    # search string, or a single-dimension array of search keywords and </div><div class='del'>-    # arguments.  The following are some common search criteria;</div><div class='del'>-    # see [IMAP] section 6.4.4 for a full list.</div><div class='del'>-    #</div><div class='del'>-    # &lt;message set&gt;:: a set of message sequence numbers.  ',' indicates</div><div class='del'>-    #                 an interval, ':' indicates a range.  For instance,</div><div class='del'>-    #                 '2,10:12,15' means "2,10,11,12,15".</div><div class='del'>-    #</div><div class='del'>-    # BEFORE &lt;date&gt;:: messages with an internal date strictly before</div><div class='del'>-    #                 &lt;date&gt;.  The date argument has a format similar</div><div class='del'>-    #                 to 8-Aug-2002.</div><div class='del'>-    #</div><div class='del'>-    # BODY &lt;string&gt;:: messages that contain &lt;string&gt; within their body.</div><div class='del'>-    #</div><div class='del'>-    # CC &lt;string&gt;:: messages containing &lt;string&gt; in their CC field.</div><div class='del'>-    #</div><div class='del'>-    # FROM &lt;string&gt;:: messages that contain &lt;string&gt; in their FROM field.</div><div class='del'>-    #</div><div class='del'>-    # NEW:: messages with the \Recent, but not the \Seen, flag set.</div><div class='del'>-    #</div><div class='del'>-    # NOT &lt;search-key&gt;:: negate the following search key.</div><div class='del'>-    #</div><div class='del'>-    # OR &lt;search-key&gt; &lt;search-key&gt;:: "or" two search keys together.</div><div class='del'>-    #</div><div class='del'>-    # ON &lt;date&gt;:: messages with an internal date exactly equal to &lt;date&gt;, </div><div class='del'>-    #             which has a format similar to 8-Aug-2002.</div><div class='del'>-    #</div><div class='del'>-    # SINCE &lt;date&gt;:: messages with an internal date on or after &lt;date&gt;.</div><div class='del'>-    #</div><div class='del'>-    # SUBJECT &lt;string&gt;:: messages with &lt;string&gt; in their subject.</div><div class='del'>-    #</div><div class='del'>-    # TO &lt;string&gt;:: messages with &lt;string&gt; in their TO field.</div><div class='del'>-    # </div><div class='del'>-    # For example:</div><div class='del'>-    #</div><div class='del'>-    #   p imap.search(["SUBJECT", "hello", "NOT", "NEW"])</div><div class='del'>-    #   #=&gt; [1, 6, 7, 8]</div><div class='del'>-    def search(keys, charset = nil)</div><div class='del'>-      return search_internal("SEARCH", keys, charset)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # As for #search(), but returns unique identifiers.</div><div class='del'>-    def uid_search(keys, charset = nil)</div><div class='del'>-      return search_internal("UID SEARCH", keys, charset)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a FETCH command to retrieve data associated with a message</div><div class='del'>-    # in the mailbox. The +set+ parameter is a number or an array of</div><div class='del'>-    # numbers or a Range object. The number is a message sequence</div><div class='del'>-    # number.  +attr+ is a list of attributes to fetch; see the</div><div class='del'>-    # documentation for Net::IMAP::FetchData for a list of valid</div><div class='del'>-    # attributes.</div><div class='del'>-    # The return value is an array of Net::IMAP::FetchData. For example:</div><div class='del'>-    #</div><div class='del'>-    #   p imap.fetch(6..8, "UID")</div><div class='del'>-    #   #=&gt; [#&lt;Net::IMAP::FetchData seqno=6, attr={"UID"=&gt;98}&gt;, \\ </div><div class='del'>-    #        #&lt;Net::IMAP::FetchData seqno=7, attr={"UID"=&gt;99}&gt;, \\ </div><div class='del'>-    #        #&lt;Net::IMAP::FetchData seqno=8, attr={"UID"=&gt;100}&gt;]</div><div class='del'>-    #   p imap.fetch(6, "BODY[HEADER.FIELDS (SUBJECT)]")</div><div class='del'>-    #   #=&gt; [#&lt;Net::IMAP::FetchData seqno=6, attr={"BODY[HEADER.FIELDS (SUBJECT)]"=&gt;"Subject: test\r\n\r\n"}&gt;]</div><div class='del'>-    #   data = imap.uid_fetch(98, ["RFC822.SIZE", "INTERNALDATE"])[0]</div><div class='del'>-    #   p data.seqno</div><div class='del'>-    #   #=&gt; 6</div><div class='del'>-    #   p data.attr["RFC822.SIZE"]</div><div class='del'>-    #   #=&gt; 611</div><div class='del'>-    #   p data.attr["INTERNALDATE"]</div><div class='del'>-    #   #=&gt; "12-Oct-2000 22:40:59 +0900"</div><div class='del'>-    #   p data.attr["UID"]</div><div class='del'>-    #   #=&gt; 98</div><div class='del'>-    def fetch(set, attr)</div><div class='del'>-      return fetch_internal("FETCH", set, attr)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # As for #fetch(), but +set+ contains unique identifiers.</div><div class='del'>-    def uid_fetch(set, attr)</div><div class='del'>-      return fetch_internal("UID FETCH", set, attr)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a STORE command to alter data associated with messages</div><div class='del'>-    # in the mailbox, in particular their flags. The +set+ parameter </div><div class='del'>-    # is a number or an array of numbers or a Range object. Each number </div><div class='del'>-    # is a message sequence number.  +attr+ is the name of a data item </div><div class='del'>-    # to store: 'FLAGS' means to replace the message's flag list</div><div class='del'>-    # with the provided one; '+FLAGS' means to add the provided flags;</div><div class='del'>-    # and '-FLAGS' means to remove them.  +flags+ is a list of flags.</div><div class='del'>-    #</div><div class='del'>-    # The return value is an array of Net::IMAP::FetchData. For example:</div><div class='del'>-    #</div><div class='del'>-    #   p imap.store(6..8, "+FLAGS", [:Deleted])</div><div class='del'>-    #   #=&gt; [#&lt;Net::IMAP::FetchData seqno=6, attr={"FLAGS"=&gt;[:Seen, :Deleted]}&gt;, \\ </div><div class='del'>-    #        #&lt;Net::IMAP::FetchData seqno=7, attr={"FLAGS"=&gt;[:Seen, :Deleted]}&gt;, \\  </div><div class='del'>-    #        #&lt;Net::IMAP::FetchData seqno=8, attr={"FLAGS"=&gt;[:Seen, :Deleted]}&gt;]</div><div class='del'>-    def store(set, attr, flags)</div><div class='del'>-      return store_internal("STORE", set, attr, flags)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # As for #store(), but +set+ contains unique identifiers.</div><div class='del'>-    def uid_store(set, attr, flags)</div><div class='del'>-      return store_internal("UID STORE", set, attr, flags)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a COPY command to copy the specified message(s) to the end</div><div class='del'>-    # of the specified destination +mailbox+. The +set+ parameter is</div><div class='del'>-    # a number or an array of numbers or a Range object. The number is</div><div class='del'>-    # a message sequence number.</div><div class='del'>-    def copy(set, mailbox)</div><div class='del'>-      copy_internal("COPY", set, mailbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # As for #copy(), but +set+ contains unique identifiers.</div><div class='del'>-    def uid_copy(set, mailbox)</div><div class='del'>-      copy_internal("UID COPY", set, mailbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a SORT command to sort messages in the mailbox.</div><div class='del'>-    # Returns an array of message sequence numbers. For example:</div><div class='del'>-    #</div><div class='del'>-    #   p imap.sort(["FROM"], ["ALL"], "US-ASCII")</div><div class='del'>-    #   #=&gt; [1, 2, 3, 5, 6, 7, 8, 4, 9]</div><div class='del'>-    #   p imap.sort(["DATE"], ["SUBJECT", "hello"], "US-ASCII")</div><div class='del'>-    #   #=&gt; [6, 7, 8, 1]</div><div class='del'>-    #</div><div class='del'>-    # See [SORT-THREAD-EXT] for more details.</div><div class='del'>-    def sort(sort_keys, search_keys, charset)</div><div class='del'>-      return sort_internal("SORT", sort_keys, search_keys, charset)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # As for #sort(), but returns an array of unique identifiers.</div><div class='del'>-    def uid_sort(sort_keys, search_keys, charset)</div><div class='del'>-      return sort_internal("UID SORT", sort_keys, search_keys, charset)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adds a response handler. For example, to detect when </div><div class='del'>-    # the server sends us a new EXISTS response (which normally</div><div class='del'>-    # indicates new messages being added to the mail box), </div><div class='del'>-    # you could add the following handler after selecting the</div><div class='del'>-    # mailbox.</div><div class='del'>-    #</div><div class='del'>-    #   imap.add_response_handler { |resp|</div><div class='del'>-    #     if resp.kind_of?(Net::IMAP::UntaggedResponse) and resp.name == "EXISTS"</div><div class='del'>-    #       puts "Mailbox now has #{resp.data} messages"</div><div class='del'>-    #     end</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    def add_response_handler(handler = Proc.new)</div><div class='del'>-      @response_handlers.push(handler)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Removes the response handler.</div><div class='del'>-    def remove_response_handler(handler)</div><div class='del'>-      @response_handlers.delete(handler)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # As for #search(), but returns message sequence numbers in threaded</div><div class='del'>-    # format, as a Net::IMAP::ThreadMember tree.  The supported algorithms</div><div class='del'>-    # are:</div><div class='del'>-    #</div><div class='del'>-    # ORDEREDSUBJECT:: split into single-level threads according to subject,</div><div class='del'>-    #                  ordered by date.</div><div class='del'>-    # REFERENCES:: split into threads by parent/child relationships determined</div><div class='del'>-    #              by which message is a reply to which.</div><div class='del'>-    #</div><div class='del'>-    # Unlike #search(), +charset+ is a required argument.  US-ASCII</div><div class='del'>-    # and UTF-8 are sample values.</div><div class='del'>-    #</div><div class='del'>-    # See [SORT-THREAD-EXT] for more details.</div><div class='del'>-    def thread(algorithm, search_keys, charset)</div><div class='del'>-      return thread_internal("THREAD", algorithm, search_keys, charset)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # As for #thread(), but returns unique identifiers instead of </div><div class='del'>-    # message sequence numbers.</div><div class='del'>-    def uid_thread(algorithm, search_keys, charset)</div><div class='del'>-      return thread_internal("UID THREAD", algorithm, search_keys, charset)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Decode a string from modified UTF-7 format to UTF-8.</div><div class='del'>-    #</div><div class='del'>-    # UTF-7 is a 7-bit encoding of Unicode [UTF7].  IMAP uses a</div><div class='del'>-    # slightly modified version of this to encode mailbox names</div><div class='del'>-    # containing non-ASCII characters; see [IMAP] section 5.1.3.</div><div class='del'>-    #</div><div class='del'>-    # Net::IMAP does _not_ automatically encode and decode</div><div class='del'>-    # mailbox names to and from utf7.</div><div class='del'>-    def self.decode_utf7(s)</div><div class='del'>-      return s.gsub(/&amp;(.*?)-/n) {</div><div class='del'>-        if $1.empty?</div><div class='del'>-          "&amp;"</div><div class='del'>-        else</div><div class='del'>-          base64 = $1.tr(",", "/")</div><div class='del'>-          x = base64.length % 4</div><div class='del'>-          if x &gt; 0</div><div class='del'>-            base64.concat("=" * (4 - x))</div><div class='del'>-          end</div><div class='del'>-          u16tou8(base64.unpack("m")[0])</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Encode a string from UTF-8 format to modified UTF-7.</div><div class='del'>-    def self.encode_utf7(s)</div><div class='del'>-      return s.gsub(/(&amp;)|([^\x20-\x25\x27-\x7e]+)/n) { |x|</div><div class='del'>-        if $1</div><div class='del'>-          "&amp;-"</div><div class='del'>-        else</div><div class='del'>-          base64 = [u8tou16(x)].pack("m")</div><div class='del'>-          "&amp;" + base64.delete("=\n").tr("/", ",") + "-"</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    CRLF = "\r\n"      # :nodoc:</div><div class='del'>-    PORT = 143         # :nodoc:</div><div class='del'>-</div><div class='del'>-    @@debug = false</div><div class='del'>-    @@authenticators = {}</div><div class='del'>-</div><div class='del'>-    # Creates a new Net::IMAP object and connects it to the specified</div><div class='del'>-    # +port+ (143 by default) on the named +host+.  If +usessl+ is true, </div><div class='del'>-    # then an attempt will</div><div class='del'>-    # be made to use SSL (now TLS) to connect to the server.  For this</div><div class='del'>-    # to work OpenSSL [OSSL] and the Ruby OpenSSL [RSSL]</div><div class='del'>-    # extensions need to be installed.  The +certs+ parameter indicates</div><div class='del'>-    # the path or file containing the CA cert of the server, and the</div><div class='del'>-    # +verify+ parameter is for the OpenSSL verification callback.</div><div class='del'>-    #</div><div class='del'>-    # The most common errors are:</div><div class='del'>-    #</div><div class='del'>-    # Errno::ECONNREFUSED:: connection refused by +host+ or an intervening</div><div class='del'>-    #                       firewall.</div><div class='del'>-    # Errno::ETIMEDOUT:: connection timed out (possibly due to packets</div><div class='del'>-    #                    being dropped by an intervening firewall).</div><div class='del'>-    # Errno::ENETUNREACH:: there is no route to that network.</div><div class='del'>-    # SocketError:: hostname not known or other socket error.</div><div class='del'>-    # Net::IMAP::ByeResponseError:: we connected to the host, but they </div><div class='del'>-    #                               immediately said goodbye to us.</div><div class='del'>-    def initialize(host, port = PORT, usessl = false, certs = nil, verify = false)</div><div class='del'>-      super()</div><div class='del'>-      @host = host</div><div class='del'>-      @port = port</div><div class='del'>-      @tag_prefix = "RUBY"</div><div class='del'>-      @tagno = 0</div><div class='del'>-      @parser = ResponseParser.new</div><div class='del'>-      @sock = TCPSocket.open(host, port)</div><div class='del'>-      if usessl</div><div class='del'>-        unless defined?(OpenSSL)</div><div class='del'>-          raise "SSL extension not installed"</div><div class='del'>-        end</div><div class='del'>-        @usessl = true</div><div class='del'>-</div><div class='del'>-        # verify the server.</div><div class='del'>-        context = SSLContext::new()</div><div class='del'>-        context.ca_file = certs if certs &amp;&amp; FileTest::file?(certs)</div><div class='del'>-        context.ca_path = certs if certs &amp;&amp; FileTest::directory?(certs)</div><div class='del'>-        context.verify_mode = VERIFY_PEER if verify</div><div class='del'>-        if defined?(VerifyCallbackProc)</div><div class='del'>-          context.verify_callback = VerifyCallbackProc </div><div class='del'>-        end</div><div class='del'>-        @sock = SSLSocket.new(@sock, context)</div><div class='del'>-        @sock.connect   # start ssl session.</div><div class='del'>-        @sock.post_connection_check(@host) if verify</div><div class='del'>-      else</div><div class='del'>-        @usessl = false</div><div class='del'>-      end</div><div class='del'>-      @responses = Hash.new([].freeze)</div><div class='del'>-      @tagged_responses = {}</div><div class='del'>-      @response_handlers = []</div><div class='del'>-      @response_arrival = new_cond</div><div class='del'>-      @continuation_request = nil</div><div class='del'>-      @logout_command_tag = nil</div><div class='del'>-      @debug_output_bol = true</div><div class='del'>-</div><div class='del'>-      @greeting = get_response</div><div class='del'>-      if @greeting.name == "BYE"</div><div class='del'>-        @sock.close</div><div class='del'>-        raise ByeResponseError, @greeting.raw_data</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @client_thread = Thread.current</div><div class='del'>-      @receiver_thread = Thread.start {</div><div class='del'>-        receive_responses</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def receive_responses</div><div class='del'>-      while true</div><div class='del'>-        begin</div><div class='del'>-          resp = get_response</div><div class='del'>-        rescue Exception</div><div class='del'>-          @sock.close</div><div class='del'>-          @client_thread.raise($!)</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-        break unless resp</div><div class='del'>-        begin</div><div class='del'>-          synchronize do</div><div class='del'>-            case resp</div><div class='del'>-            when TaggedResponse</div><div class='del'>-              @tagged_responses[resp.tag] = resp</div><div class='del'>-              @response_arrival.broadcast</div><div class='del'>-              if resp.tag == @logout_command_tag</div><div class='del'>-                return</div><div class='del'>-              end</div><div class='del'>-            when UntaggedResponse</div><div class='del'>-              record_response(resp.name, resp.data)</div><div class='del'>-              if resp.data.instance_of?(ResponseText) &amp;&amp;</div><div class='del'>-                  (code = resp.data.code)</div><div class='del'>-                record_response(code.name, code.data)</div><div class='del'>-              end</div><div class='del'>-              if resp.name == "BYE" &amp;&amp; @logout_command_tag.nil?</div><div class='del'>-                @sock.close</div><div class='del'>-                raise ByeResponseError, resp.raw_data</div><div class='del'>-              end</div><div class='del'>-            when ContinuationRequest</div><div class='del'>-              @continuation_request = resp</div><div class='del'>-              @response_arrival.broadcast</div><div class='del'>-            end</div><div class='del'>-            @response_handlers.each do |handler|</div><div class='del'>-              handler.call(resp)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        rescue Exception</div><div class='del'>-          @client_thread.raise($!)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_tagged_response(tag)</div><div class='del'>-      until @tagged_responses.key?(tag)</div><div class='del'>-        @response_arrival.wait</div><div class='del'>-      end</div><div class='del'>-      return pick_up_tagged_response(tag)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pick_up_tagged_response(tag)</div><div class='del'>-      resp = @tagged_responses.delete(tag)</div><div class='del'>-      case resp.name</div><div class='del'>-      when /\A(?:NO)\z/ni</div><div class='del'>-        raise NoResponseError, resp.data.text</div><div class='del'>-      when /\A(?:BAD)\z/ni</div><div class='del'>-        raise BadResponseError, resp.data.text</div><div class='del'>-      else</div><div class='del'>-        return resp</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_response</div><div class='del'>-      buff = ""</div><div class='del'>-      while true</div><div class='del'>-        s = @sock.gets(CRLF)</div><div class='del'>-        break unless s</div><div class='del'>-        buff.concat(s)</div><div class='del'>-        if /\{(\d+)\}\r\n/n =~ s</div><div class='del'>-          s = @sock.read($1.to_i)</div><div class='del'>-          buff.concat(s)</div><div class='del'>-        else</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return nil if buff.length == 0</div><div class='del'>-      if @@debug</div><div class='del'>-        $stderr.print(buff.gsub(/^/n, "S: "))</div><div class='del'>-      end</div><div class='del'>-      return @parser.parse(buff)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def record_response(name, data)</div><div class='del'>-      unless @responses.has_key?(name)</div><div class='del'>-        @responses[name] = []</div><div class='del'>-      end</div><div class='del'>-      @responses[name].push(data)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_command(cmd, *args, &amp;block)</div><div class='del'>-      synchronize do</div><div class='del'>-        tag = Thread.current[:net_imap_tag] = generate_tag</div><div class='del'>-        put_string(tag + " " + cmd)</div><div class='del'>-        args.each do |i|</div><div class='del'>-          put_string(" ")</div><div class='del'>-          send_data(i)</div><div class='del'>-        end</div><div class='del'>-        put_string(CRLF)</div><div class='del'>-        if cmd == "LOGOUT"</div><div class='del'>-          @logout_command_tag = tag</div><div class='del'>-        end</div><div class='del'>-        if block</div><div class='del'>-          add_response_handler(block)</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          return get_tagged_response(tag)</div><div class='del'>-        ensure</div><div class='del'>-          if block</div><div class='del'>-            remove_response_handler(block)</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 generate_tag</div><div class='del'>-      @tagno += 1</div><div class='del'>-      return format("%s%04d", @tag_prefix, @tagno)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def put_string(str)</div><div class='del'>-      @sock.print(str)</div><div class='del'>-      if @@debug</div><div class='del'>-        if @debug_output_bol</div><div class='del'>-          $stderr.print("C: ")</div><div class='del'>-        end</div><div class='del'>-        $stderr.print(str.gsub(/\n(?!\z)/n, "\nC: "))</div><div class='del'>-        if /\r\n\z/n.match(str)</div><div class='del'>-          @debug_output_bol = true</div><div class='del'>-        else</div><div class='del'>-          @debug_output_bol = false</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_data(data)</div><div class='del'>-      case data</div><div class='del'>-      when nil</div><div class='del'>-        put_string("NIL")</div><div class='del'>-      when String</div><div class='del'>-        send_string_data(data)</div><div class='del'>-      when Integer</div><div class='del'>-        send_number_data(data)</div><div class='del'>-      when Array</div><div class='del'>-        send_list_data(data)</div><div class='del'>-      when Time</div><div class='del'>-        send_time_data(data)</div><div class='del'>-      when Symbol</div><div class='del'>-        send_symbol_data(data)</div><div class='del'>-      else</div><div class='del'>-        data.send_data(self)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_string_data(str)</div><div class='del'>-      case str</div><div class='del'>-      when ""</div><div class='del'>-        put_string('""')</div><div class='del'>-      when /[\x80-\xff\r\n]/n</div><div class='del'>-        # literal</div><div class='del'>-        send_literal(str)</div><div class='del'>-      when /[(){ \x00-\x1f\x7f%*"\\]/n</div><div class='del'>-        # quoted string</div><div class='del'>-        send_quoted_string(str)</div><div class='del'>-      else</div><div class='del'>-        put_string(str)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def send_quoted_string(str)</div><div class='del'>-      put_string('"' + str.gsub(/["\\]/n, "\\\\\\&amp;") + '"')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_literal(str)</div><div class='del'>-      put_string("{" + str.length.to_s + "}" + CRLF)</div><div class='del'>-      while @continuation_request.nil? &amp;&amp;</div><div class='del'>-        !@tagged_responses.key?(Thread.current[:net_imap_tag])</div><div class='del'>-        @response_arrival.wait</div><div class='del'>-      end</div><div class='del'>-      if @continuation_request.nil?</div><div class='del'>-        pick_up_tagged_response(Thread.current[:net_imap_tag])</div><div class='del'>-        raise ResponseError.new("expected continuation request")</div><div class='del'>-      end</div><div class='del'>-      @continuation_request = nil</div><div class='del'>-      put_string(str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_number_data(num)</div><div class='del'>-      if num &lt; 0 || num &gt;= 4294967296</div><div class='del'>-        raise DataFormatError, num.to_s</div><div class='del'>-      end</div><div class='del'>-      put_string(num.to_s)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_list_data(list)</div><div class='del'>-      put_string("(")</div><div class='del'>-      first = true</div><div class='del'>-      list.each do |i|</div><div class='del'>-        if first</div><div class='del'>-          first = false</div><div class='del'>-        else</div><div class='del'>-          put_string(" ")</div><div class='del'>-        end</div><div class='del'>-        send_data(i)</div><div class='del'>-      end</div><div class='del'>-      put_string(")")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    DATE_MONTH = %w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)</div><div class='del'>-</div><div class='del'>-    def send_time_data(time)</div><div class='del'>-      t = time.dup.gmtime</div><div class='del'>-      s = format('"%2d-%3s-%4d %02d:%02d:%02d +0000"',</div><div class='del'>-                 t.day, DATE_MONTH[t.month - 1], t.year,</div><div class='del'>-                 t.hour, t.min, t.sec)</div><div class='del'>-      put_string(s)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def send_symbol_data(symbol)</div><div class='del'>-      put_string("\\" + symbol.to_s)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def search_internal(cmd, keys, charset)</div><div class='del'>-      if keys.instance_of?(String)</div><div class='del'>-        keys = [RawData.new(keys)]</div><div class='del'>-      else</div><div class='del'>-        normalize_searching_criteria(keys)</div><div class='del'>-      end</div><div class='del'>-      synchronize do</div><div class='del'>-        if charset</div><div class='del'>-          send_command(cmd, "CHARSET", charset, *keys)</div><div class='del'>-        else</div><div class='del'>-          send_command(cmd, *keys)</div><div class='del'>-        end</div><div class='del'>-        return @responses.delete("SEARCH")[-1]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def fetch_internal(cmd, set, attr)</div><div class='del'>-      if attr.instance_of?(String)</div><div class='del'>-        attr = RawData.new(attr)</div><div class='del'>-      end</div><div class='del'>-      synchronize do</div><div class='del'>-        @responses.delete("FETCH")</div><div class='del'>-        send_command(cmd, MessageSet.new(set), attr)</div><div class='del'>-        return @responses.delete("FETCH")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def store_internal(cmd, set, attr, flags)</div><div class='del'>-      if attr.instance_of?(String)</div><div class='del'>-        attr = RawData.new(attr)</div><div class='del'>-      end</div><div class='del'>-      synchronize do</div><div class='del'>-        @responses.delete("FETCH")</div><div class='del'>-        send_command(cmd, MessageSet.new(set), attr, flags)</div><div class='del'>-        return @responses.delete("FETCH")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def copy_internal(cmd, set, mailbox)</div><div class='del'>-      send_command(cmd, MessageSet.new(set), mailbox)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def sort_internal(cmd, sort_keys, search_keys, charset)</div><div class='del'>-      if search_keys.instance_of?(String)</div><div class='del'>-        search_keys = [RawData.new(search_keys)]</div><div class='del'>-      else</div><div class='del'>-        normalize_searching_criteria(search_keys)</div><div class='del'>-      end</div><div class='del'>-      normalize_searching_criteria(search_keys)</div><div class='del'>-      synchronize do</div><div class='del'>-        send_command(cmd, sort_keys, charset, *search_keys)</div><div class='del'>-        return @responses.delete("SORT")[-1]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def thread_internal(cmd, algorithm, search_keys, charset)</div><div class='del'>-      if search_keys.instance_of?(String)</div><div class='del'>-        search_keys = [RawData.new(search_keys)]</div><div class='del'>-      else</div><div class='del'>-        normalize_searching_criteria(search_keys)</div><div class='del'>-      end</div><div class='del'>-      normalize_searching_criteria(search_keys)</div><div class='del'>-      send_command(cmd, algorithm, charset, *search_keys)</div><div class='del'>-      return @responses.delete("THREAD")[-1]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def normalize_searching_criteria(keys)</div><div class='del'>-      keys.collect! do |i|</div><div class='del'>-        case i</div><div class='del'>-        when -1, Range, Array</div><div class='del'>-          MessageSet.new(i)</div><div class='del'>-        else</div><div class='del'>-          i</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.u16tou8(s)</div><div class='del'>-      len = s.length</div><div class='del'>-      if len &lt; 2</div><div class='del'>-        return ""</div><div class='del'>-      end</div><div class='del'>-      buf = ""</div><div class='del'>-      i = 0</div><div class='del'>-      while i &lt; len</div><div class='del'>-        c = s[i] &lt;&lt; 8 | s[i + 1]</div><div class='del'>-        i += 2</div><div class='del'>-        if c == 0xfeff</div><div class='del'>-          next</div><div class='del'>-        elsif c &lt; 0x0080</div><div class='del'>-          buf.concat(c)</div><div class='del'>-        elsif c &lt; 0x0800</div><div class='del'>-          b2 = c &amp; 0x003f</div><div class='del'>-          b1 = c &gt;&gt; 6</div><div class='del'>-          buf.concat(b1 | 0xc0)</div><div class='del'>-          buf.concat(b2 | 0x80)</div><div class='del'>-        elsif c &gt;= 0xdc00 &amp;&amp; c &lt; 0xe000</div><div class='del'>-          raise DataFormatError, "invalid surrogate detected"</div><div class='del'>-        elsif c &gt;= 0xd800 &amp;&amp; c &lt; 0xdc00</div><div class='del'>-          if i + 2 &gt; len</div><div class='del'>-            raise DataFormatError, "invalid surrogate detected"</div><div class='del'>-          end</div><div class='del'>-          low = s[i] &lt;&lt; 8 | s[i + 1]</div><div class='del'>-          i += 2</div><div class='del'>-          if low &lt; 0xdc00 || low &gt; 0xdfff</div><div class='del'>-            raise DataFormatError, "invalid surrogate detected"</div><div class='del'>-          end</div><div class='del'>-          c = (((c &amp; 0x03ff)) &lt;&lt; 10 | (low &amp; 0x03ff)) + 0x10000</div><div class='del'>-          b4 = c &amp; 0x003f</div><div class='del'>-          b3 = (c &gt;&gt; 6) &amp; 0x003f</div><div class='del'>-          b2 = (c &gt;&gt; 12) &amp; 0x003f</div><div class='del'>-          b1 = c &gt;&gt; 18;</div><div class='del'>-          buf.concat(b1 | 0xf0)</div><div class='del'>-          buf.concat(b2 | 0x80)</div><div class='del'>-          buf.concat(b3 | 0x80)</div><div class='del'>-          buf.concat(b4 | 0x80)</div><div class='del'>-        else # 0x0800-0xffff</div><div class='del'>-          b3 = c &amp; 0x003f</div><div class='del'>-          b2 = (c &gt;&gt; 6) &amp; 0x003f</div><div class='del'>-          b1 = c &gt;&gt; 12</div><div class='del'>-          buf.concat(b1 | 0xe0)</div><div class='del'>-          buf.concat(b2 | 0x80)</div><div class='del'>-          buf.concat(b3 | 0x80)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return buf</div><div class='del'>-    end</div><div class='del'>-    private_class_method :u16tou8</div><div class='del'>-</div><div class='del'>-    def self.u8tou16(s)</div><div class='del'>-      len = s.length</div><div class='del'>-      buf = ""</div><div class='del'>-      i = 0</div><div class='del'>-      while i &lt; len</div><div class='del'>-        c = s[i]</div><div class='del'>-        if (c &amp; 0x80) == 0</div><div class='del'>-          buf.concat(0x00)</div><div class='del'>-          buf.concat(c)</div><div class='del'>-          i += 1</div><div class='del'>-        elsif (c &amp; 0xe0) == 0xc0 &amp;&amp;</div><div class='del'>-            len &gt;= 2 &amp;&amp;</div><div class='del'>-            (s[i + 1] &amp; 0xc0) == 0x80</div><div class='del'>-          if c == 0xc0 || c == 0xc1</div><div class='del'>-            raise DataFormatError, format("non-shortest UTF-8 sequence (%02x)", c)</div><div class='del'>-          end</div><div class='del'>-          u = ((c &amp; 0x1f) &lt;&lt; 6) | (s[i + 1] &amp; 0x3f)</div><div class='del'>-          buf.concat(u &gt;&gt; 8)</div><div class='del'>-          buf.concat(u &amp; 0x00ff)</div><div class='del'>-          i += 2</div><div class='del'>-        elsif (c &amp; 0xf0) == 0xe0 &amp;&amp;</div><div class='del'>-            i + 2 &lt; len &amp;&amp;</div><div class='del'>-            (s[i + 1] &amp; 0xc0) == 0x80 &amp;&amp;</div><div class='del'>-            (s[i + 2] &amp; 0xc0) == 0x80</div><div class='del'>-          if c == 0xe0 &amp;&amp; s[i + 1] &lt; 0xa0</div><div class='del'>-            raise DataFormatError, format("non-shortest UTF-8 sequence (%02x)", c)</div><div class='del'>-          end</div><div class='del'>-          u = ((c &amp; 0x0f) &lt;&lt; 12) | ((s[i + 1] &amp; 0x3f) &lt;&lt; 6) | (s[i + 2] &amp; 0x3f)</div><div class='del'>-          # surrogate chars</div><div class='del'>-          if u &gt;= 0xd800 &amp;&amp; u &lt;= 0xdfff</div><div class='del'>-            raise DataFormatError, format("none-UTF-16 char detected (%04x)", u)</div><div class='del'>-          end</div><div class='del'>-          buf.concat(u &gt;&gt; 8)</div><div class='del'>-          buf.concat(u &amp; 0x00ff)</div><div class='del'>-          i += 3</div><div class='del'>-        elsif (c &amp; 0xf8) == 0xf0 &amp;&amp;</div><div class='del'>-            i + 3 &lt; len &amp;&amp;</div><div class='del'>-            (s[i + 1] &amp; 0xc0) == 0x80 &amp;&amp;</div><div class='del'>-            (s[i + 2] &amp; 0xc0) == 0x80 &amp;&amp;</div><div class='del'>-            (s[i + 3] &amp; 0xc0) == 0x80</div><div class='del'>-          if c == 0xf0 &amp;&amp; s[i + 1] &lt; 0x90</div><div class='del'>-            raise DataFormatError, format("non-shortest UTF-8 sequence (%02x)", c)</div><div class='del'>-          end</div><div class='del'>-          u = ((c &amp; 0x07) &lt;&lt; 18) | ((s[i + 1] &amp; 0x3f) &lt;&lt; 12) |</div><div class='del'>-            ((s[i + 2] &amp; 0x3f) &lt;&lt; 6) | (s[i + 3] &amp; 0x3f)</div><div class='del'>-          if u &lt; 0x10000</div><div class='del'>-            buf.concat(u &gt;&gt; 8)</div><div class='del'>-            buf.concat(u &amp; 0x00ff)</div><div class='del'>-          elsif u &lt; 0x110000</div><div class='del'>-            high = ((u - 0x10000) &gt;&gt; 10) | 0xd800</div><div class='del'>-            low = (u &amp; 0x03ff) | 0xdc00</div><div class='del'>-            buf.concat(high &gt;&gt; 8)</div><div class='del'>-            buf.concat(high &amp; 0x00ff)</div><div class='del'>-            buf.concat(low &gt;&gt; 8)</div><div class='del'>-            buf.concat(low &amp; 0x00ff)</div><div class='del'>-          else</div><div class='del'>-            raise DataFormatError, format("none-UTF-16 char detected (%04x)", u)</div><div class='del'>-          end</div><div class='del'>-          i += 4</div><div class='del'>-        else</div><div class='del'>-          raise DataFormatError, format("illegal UTF-8 sequence (%02x)", c)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return buf</div><div class='del'>-    end</div><div class='del'>-    private_class_method :u8tou16</div><div class='del'>-</div><div class='del'>-    class RawData # :nodoc:</div><div class='del'>-      def send_data(imap)</div><div class='del'>-        imap.send(:put_string, @data)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      def initialize(data)</div><div class='del'>-        @data = data</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Atom # :nodoc:</div><div class='del'>-      def send_data(imap)</div><div class='del'>-        imap.send(:put_string, @data)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      def initialize(data)</div><div class='del'>-        @data = data</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class QuotedString # :nodoc:</div><div class='del'>-      def send_data(imap)</div><div class='del'>-        imap.send(:send_quoted_string, @data)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      def initialize(data)</div><div class='del'>-        @data = data</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Literal # :nodoc:</div><div class='del'>-      def send_data(imap)</div><div class='del'>-        imap.send(:send_literal, @data)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      def initialize(data)</div><div class='del'>-        @data = data</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class MessageSet # :nodoc:</div><div class='del'>-      def send_data(imap)</div><div class='del'>-        imap.send(:put_string, format_internal(@data))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      def initialize(data)</div><div class='del'>-        @data = data</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def format_internal(data)</div><div class='del'>-        case data</div><div class='del'>-        when "*"</div><div class='del'>-          return data</div><div class='del'>-        when Integer</div><div class='del'>-          ensure_nz_number(data)</div><div class='del'>-          if data == -1</div><div class='del'>-            return "*"</div><div class='del'>-          else</div><div class='del'>-            return data.to_s</div><div class='del'>-          end</div><div class='del'>-        when Range</div><div class='del'>-          return format_internal(data.first) +</div><div class='del'>-            ":" + format_internal(data.last)</div><div class='del'>-        when Array</div><div class='del'>-          return data.collect {|i| format_internal(i)}.join(",")</div><div class='del'>-        when ThreadMember</div><div class='del'>-          return data.seqno.to_s +</div><div class='del'>-            ":" + data.children.collect {|i| format_internal(i).join(",")}</div><div class='del'>-        else</div><div class='del'>-          raise DataFormatError, data.inspect</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def ensure_nz_number(num)</div><div class='del'>-        if num &lt; -1 || num == 0 || num &gt;= 4294967296</div><div class='del'>-          msg = "nz_number must be non-zero unsigned 32-bit integer: " +</div><div class='del'>-                num.inspect</div><div class='del'>-          raise DataFormatError, msg</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::ContinuationRequest represents command continuation requests.</div><div class='del'>-    # </div><div class='del'>-    # The command continuation request response is indicated by a "+" token</div><div class='del'>-    # instead of a tag.  This form of response indicates that the server is</div><div class='del'>-    # ready to accept the continuation of a command from the client.  The</div><div class='del'>-    # remainder of this response is a line of text.</div><div class='del'>-    # </div><div class='del'>-    #   continue_req    ::= "+" SPACE (resp_text / base64)</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # data:: Returns the data (Net::IMAP::ResponseText).</div><div class='del'>-    # </div><div class='del'>-    # raw_data:: Returns the raw data string.</div><div class='del'>-    ContinuationRequest = Struct.new(:data, :raw_data)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::UntaggedResponse represents untagged responses.</div><div class='del'>-    # </div><div class='del'>-    # Data transmitted by the server to the client and status responses</div><div class='del'>-    # that do not indicate command completion are prefixed with the token</div><div class='del'>-    # "*", and are called untagged responses.</div><div class='del'>-    # </div><div class='del'>-    #   response_data   ::= "*" SPACE (resp_cond_state / resp_cond_bye /</div><div class='del'>-    #                       mailbox_data / message_data / capability_data)</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # name:: Returns the name such as "FLAGS", "LIST", "FETCH"....</div><div class='del'>-    # </div><div class='del'>-    # data:: Returns the data such as an array of flag symbols,</div><div class='del'>-    #         a ((&lt;Net::IMAP::MailboxList&gt;)) object....</div><div class='del'>-    # </div><div class='del'>-    # raw_data:: Returns the raw data string.</div><div class='del'>-    UntaggedResponse = Struct.new(:name, :data, :raw_data)</div><div class='del'>-     </div><div class='del'>-    # Net::IMAP::TaggedResponse represents tagged responses.</div><div class='del'>-    # </div><div class='del'>-    # The server completion result response indicates the success or</div><div class='del'>-    # failure of the operation.  It is tagged with the same tag as the</div><div class='del'>-    # client command which began the operation.</div><div class='del'>-    # </div><div class='del'>-    #   response_tagged ::= tag SPACE resp_cond_state CRLF</div><div class='del'>-    #   </div><div class='del'>-    #   tag             ::= 1*&lt;any ATOM_CHAR except "+"&gt;</div><div class='del'>-    #   </div><div class='del'>-    #   resp_cond_state ::= ("OK" / "NO" / "BAD") SPACE resp_text</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # tag:: Returns the tag.</div><div class='del'>-    # </div><div class='del'>-    # name:: Returns the name. the name is one of "OK", "NO", "BAD".</div><div class='del'>-    # </div><div class='del'>-    # data:: Returns the data. See ((&lt;Net::IMAP::ResponseText&gt;)).</div><div class='del'>-    # </div><div class='del'>-    # raw_data:: Returns the raw data string.</div><div class='del'>-    #</div><div class='del'>-    TaggedResponse = Struct.new(:tag, :name, :data, :raw_data)</div><div class='del'>-     </div><div class='del'>-    # Net::IMAP::ResponseText represents texts of responses.</div><div class='del'>-    # The text may be prefixed by the response code.</div><div class='del'>-    # </div><div class='del'>-    #   resp_text       ::= ["[" resp_text_code "]" SPACE] (text_mime2 / text)</div><div class='del'>-    #                       ;; text SHOULD NOT begin with "[" or "="</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # code:: Returns the response code. See ((&lt;Net::IMAP::ResponseCode&gt;)).</div><div class='del'>-    #       </div><div class='del'>-    # text:: Returns the text.</div><div class='del'>-    # </div><div class='del'>-    ResponseText = Struct.new(:code, :text)</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # Net::IMAP::ResponseCode represents response codes.</div><div class='del'>-    # </div><div class='del'>-    #   resp_text_code  ::= "ALERT" / "PARSE" /</div><div class='del'>-    #                       "PERMANENTFLAGS" SPACE "(" #(flag / "\*") ")" /</div><div class='del'>-    #                       "READ-ONLY" / "READ-WRITE" / "TRYCREATE" /</div><div class='del'>-    #                       "UIDVALIDITY" SPACE nz_number /</div><div class='del'>-    #                       "UNSEEN" SPACE nz_number /</div><div class='del'>-    #                       atom [SPACE 1*&lt;any TEXT_CHAR except "]"&gt;]</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # name:: Returns the name such as "ALERT", "PERMANENTFLAGS", "UIDVALIDITY"....</div><div class='del'>-    # </div><div class='del'>-    # data:: Returns the data if it exists.</div><div class='del'>-    #</div><div class='del'>-    ResponseCode = Struct.new(:name, :data)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::MailboxList represents contents of the LIST response.</div><div class='del'>-    # </div><div class='del'>-    #   mailbox_list    ::= "(" #("\Marked" / "\Noinferiors" /</div><div class='del'>-    #                       "\Noselect" / "\Unmarked" / flag_extension) ")"</div><div class='del'>-    #                       SPACE (&lt;"&gt; QUOTED_CHAR &lt;"&gt; / nil) SPACE mailbox</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # attr:: Returns the name attributes. Each name attribute is a symbol</div><div class='del'>-    #        capitalized by String#capitalize, such as :Noselect (not :NoSelect).</div><div class='del'>-    # </div><div class='del'>-    # delim:: Returns the hierarchy delimiter</div><div class='del'>-    # </div><div class='del'>-    # name:: Returns the mailbox name.</div><div class='del'>-    #</div><div class='del'>-    MailboxList = Struct.new(:attr, :delim, :name)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::MailboxQuota represents contents of GETQUOTA response.</div><div class='del'>-    # This object can also be a response to GETQUOTAROOT.  In the syntax</div><div class='del'>-    # specification below, the delimiter used with the "#" construct is a</div><div class='del'>-    # single space (SPACE).</div><div class='del'>-    # </div><div class='del'>-    #    quota_list      ::= "(" #quota_resource ")"</div><div class='del'>-    # </div><div class='del'>-    #    quota_resource  ::= atom SPACE number SPACE number</div><div class='del'>-    # </div><div class='del'>-    #    quota_response  ::= "QUOTA" SPACE astring SPACE quota_list</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # mailbox:: The mailbox with the associated quota.</div><div class='del'>-    # </div><div class='del'>-    # usage:: Current storage usage of mailbox.</div><div class='del'>-    # </div><div class='del'>-    # quota:: Quota limit imposed on mailbox.</div><div class='del'>-    #</div><div class='del'>-    MailboxQuota = Struct.new(:mailbox, :usage, :quota)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::MailboxQuotaRoot represents part of the GETQUOTAROOT</div><div class='del'>-    # response. (GETQUOTAROOT can also return Net::IMAP::MailboxQuota.)</div><div class='del'>-    # </div><div class='del'>-    #    quotaroot_response ::= "QUOTAROOT" SPACE astring *(SPACE astring)</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # mailbox:: The mailbox with the associated quota.</div><div class='del'>-    # </div><div class='del'>-    # quotaroots:: Zero or more quotaroots that effect the quota on the</div><div class='del'>-    #              specified mailbox.</div><div class='del'>-    #</div><div class='del'>-    MailboxQuotaRoot = Struct.new(:mailbox, :quotaroots)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::MailboxACLItem represents response from GETACL.</div><div class='del'>-    # </div><div class='del'>-    #    acl_data        ::= "ACL" SPACE mailbox *(SPACE identifier SPACE rights)</div><div class='del'>-    # </div><div class='del'>-    #    identifier      ::= astring</div><div class='del'>-    # </div><div class='del'>-    #    rights          ::= astring</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # user:: Login name that has certain rights to the mailbox</div><div class='del'>-    #        that was specified with the getacl command.</div><div class='del'>-    # </div><div class='del'>-    # rights:: The access rights the indicated user has to the</div><div class='del'>-    #          mailbox.</div><div class='del'>-    #</div><div class='del'>-    MailboxACLItem = Struct.new(:user, :rights)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::StatusData represents contents of the STATUS response.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # mailbox:: Returns the mailbox name.</div><div class='del'>-    # </div><div class='del'>-    # attr:: Returns a hash. Each key is one of "MESSAGES", "RECENT", "UIDNEXT",</div><div class='del'>-    #        "UIDVALIDITY", "UNSEEN". Each value is a number.</div><div class='del'>-    # </div><div class='del'>-    StatusData = Struct.new(:mailbox, :attr)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::FetchData represents contents of the FETCH response.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # seqno:: Returns the message sequence number.</div><div class='del'>-    #         (Note: not the unique identifier, even for the UID command response.)</div><div class='del'>-    # </div><div class='del'>-    # attr:: Returns a hash. Each key is a data item name, and each value is</div><div class='del'>-    #        its value.</div><div class='del'>-    # </div><div class='del'>-    #        The current data items are:</div><div class='del'>-    # </div><div class='del'>-    #        [BODY]</div><div class='del'>-    #           A form of BODYSTRUCTURE without extension data.</div><div class='del'>-    #        [BODY[&lt;section&gt;]&lt;&lt;origin_octet&gt;&gt;]</div><div class='del'>-    #           A string expressing the body contents of the specified section.</div><div class='del'>-    #        [BODYSTRUCTURE]</div><div class='del'>-    #           An object that describes the [MIME-IMB] body structure of a message.</div><div class='del'>-    #           See Net::IMAP::BodyTypeBasic, Net::IMAP::BodyTypeText,</div><div class='del'>-    #           Net::IMAP::BodyTypeMessage, Net::IMAP::BodyTypeMultipart.</div><div class='del'>-    #        [ENVELOPE]</div><div class='del'>-    #           A Net::IMAP::Envelope object that describes the envelope</div><div class='del'>-    #           structure of a message.</div><div class='del'>-    #        [FLAGS]</div><div class='del'>-    #           A array of flag symbols that are set for this message. flag symbols</div><div class='del'>-    #           are capitalized by String#capitalize.</div><div class='del'>-    #        [INTERNALDATE]</div><div class='del'>-    #           A string representing the internal date of the message.</div><div class='del'>-    #        [RFC822]</div><div class='del'>-    #           Equivalent to BODY[].</div><div class='del'>-    #        [RFC822.HEADER]</div><div class='del'>-    #           Equivalent to BODY.PEEK[HEADER].</div><div class='del'>-    #        [RFC822.SIZE]</div><div class='del'>-    #           A number expressing the [RFC-822] size of the message.</div><div class='del'>-    #        [RFC822.TEXT]</div><div class='del'>-    #           Equivalent to BODY[TEXT].</div><div class='del'>-    #        [UID]</div><div class='del'>-    #           A number expressing the unique identifier of the message.</div><div class='del'>-    # </div><div class='del'>-    FetchData = Struct.new(:seqno, :attr)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::Envelope represents envelope structures of messages.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # date:: Returns a string that represents the date.</div><div class='del'>-    # </div><div class='del'>-    # subject:: Returns a string that represents the subject.</div><div class='del'>-    # </div><div class='del'>-    # from:: Returns an array of Net::IMAP::Address that represents the from.</div><div class='del'>-    # </div><div class='del'>-    # sender:: Returns an array of Net::IMAP::Address that represents the sender.</div><div class='del'>-    # </div><div class='del'>-    # reply_to:: Returns an array of Net::IMAP::Address that represents the reply-to.</div><div class='del'>-    # </div><div class='del'>-    # to:: Returns an array of Net::IMAP::Address that represents the to.</div><div class='del'>-    # </div><div class='del'>-    # cc:: Returns an array of Net::IMAP::Address that represents the cc.</div><div class='del'>-    # </div><div class='del'>-    # bcc:: Returns an array of Net::IMAP::Address that represents the bcc.</div><div class='del'>-    # </div><div class='del'>-    # in_reply_to:: Returns a string that represents the in-reply-to.</div><div class='del'>-    # </div><div class='del'>-    # message_id:: Returns a string that represents the message-id.</div><div class='del'>-    # </div><div class='del'>-    Envelope = Struct.new(:date, :subject, :from, :sender, :reply_to,</div><div class='del'>-                          :to, :cc, :bcc, :in_reply_to, :message_id)</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # Net::IMAP::Address represents electronic mail addresses.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # name:: Returns the phrase from [RFC-822] mailbox.</div><div class='del'>-    # </div><div class='del'>-    # route:: Returns the route from [RFC-822] route-addr.</div><div class='del'>-    # </div><div class='del'>-    # mailbox:: nil indicates end of [RFC-822] group.</div><div class='del'>-    #           If non-nil and host is nil, returns [RFC-822] group name.</div><div class='del'>-    #           Otherwise, returns [RFC-822] local-part</div><div class='del'>-    # </div><div class='del'>-    # host:: nil indicates [RFC-822] group syntax.</div><div class='del'>-    #        Otherwise, returns [RFC-822] domain name.</div><div class='del'>-    #</div><div class='del'>-    Address = Struct.new(:name, :route, :mailbox, :host)</div><div class='del'>-</div><div class='del'>-    # </div><div class='del'>-    # Net::IMAP::ContentDisposition represents Content-Disposition fields.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # dsp_type:: Returns the disposition type.</div><div class='del'>-    # </div><div class='del'>-    # param:: Returns a hash that represents parameters of the Content-Disposition</div><div class='del'>-    #         field.</div><div class='del'>-    # </div><div class='del'>-    ContentDisposition = Struct.new(:dsp_type, :param)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::ThreadMember represents a thread-node returned </div><div class='del'>-    # by Net::IMAP#thread</div><div class='del'>-    #</div><div class='del'>-    # ==== Fields:</div><div class='del'>-    #</div><div class='del'>-    # seqno:: The sequence number of this message.</div><div class='del'>-    #</div><div class='del'>-    # children:: an array of Net::IMAP::ThreadMember objects for mail</div><div class='del'>-    # items that are children of this in the thread.</div><div class='del'>-    #</div><div class='del'>-    ThreadMember = Struct.new(:seqno, :children)</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::BodyTypeBasic represents basic body structures of messages.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # media_type:: Returns the content media type name as defined in [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # subtype:: Returns the content subtype name as defined in [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # param:: Returns a hash that represents parameters as defined in [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # content_id:: Returns a string giving the content id as defined in [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # description:: Returns a string giving the content description as defined in</div><div class='del'>-    #               [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # encoding:: Returns a string giving the content transfer encoding as defined in</div><div class='del'>-    #            [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # size:: Returns a number giving the size of the body in octets.</div><div class='del'>-    # </div><div class='del'>-    # md5:: Returns a string giving the body MD5 value as defined in [MD5].</div><div class='del'>-    # </div><div class='del'>-    # disposition:: Returns a Net::IMAP::ContentDisposition object giving</div><div class='del'>-    #               the content disposition.</div><div class='del'>-    # </div><div class='del'>-    # language:: Returns a string or an array of strings giving the body</div><div class='del'>-    #            language value as defined in [LANGUAGE-TAGS].</div><div class='del'>-    # </div><div class='del'>-    # extension:: Returns extension data.</div><div class='del'>-    # </div><div class='del'>-    # multipart?:: Returns false.</div><div class='del'>-    # </div><div class='del'>-    class BodyTypeBasic &lt; Struct.new(:media_type, :subtype,</div><div class='del'>-                                     :param, :content_id,</div><div class='del'>-                                     :description, :encoding, :size,</div><div class='del'>-                                     :md5, :disposition, :language,</div><div class='del'>-                                     :extension)</div><div class='del'>-      def multipart?</div><div class='del'>-        return false</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Obsolete: use +subtype+ instead.  Calling this will</div><div class='del'>-      # generate a warning message to +stderr+, then return </div><div class='del'>-      # the value of +subtype+.</div><div class='del'>-      def media_subtype</div><div class='del'>-        $stderr.printf("warning: media_subtype is obsolete.\n")</div><div class='del'>-        $stderr.printf("         use subtype instead.\n")</div><div class='del'>-        return subtype</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::BodyTypeText represents TEXT body structures of messages.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # lines:: Returns the size of the body in text lines.</div><div class='del'>-    # </div><div class='del'>-    # And Net::IMAP::BodyTypeText has all fields of Net::IMAP::BodyTypeBasic.</div><div class='del'>-    # </div><div class='del'>-    class BodyTypeText &lt; Struct.new(:media_type, :subtype,</div><div class='del'>-                                    :param, :content_id,</div><div class='del'>-                                    :description, :encoding, :size,</div><div class='del'>-                                    :lines,</div><div class='del'>-                                    :md5, :disposition, :language,</div><div class='del'>-                                    :extension)</div><div class='del'>-      def multipart?</div><div class='del'>-        return false</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Obsolete: use +subtype+ instead.  Calling this will</div><div class='del'>-      # generate a warning message to +stderr+, then return </div><div class='del'>-      # the value of +subtype+.</div><div class='del'>-      def media_subtype</div><div class='del'>-        $stderr.printf("warning: media_subtype is obsolete.\n")</div><div class='del'>-        $stderr.printf("         use subtype instead.\n")</div><div class='del'>-        return subtype</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::BodyTypeMessage represents MESSAGE/RFC822 body structures of messages.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # envelope:: Returns a Net::IMAP::Envelope giving the envelope structure.</div><div class='del'>-    # </div><div class='del'>-    # body:: Returns an object giving the body structure.</div><div class='del'>-    # </div><div class='del'>-    # And Net::IMAP::BodyTypeMessage has all methods of Net::IMAP::BodyTypeText.</div><div class='del'>-    #</div><div class='del'>-    class BodyTypeMessage &lt; Struct.new(:media_type, :subtype,</div><div class='del'>-                                       :param, :content_id,</div><div class='del'>-                                       :description, :encoding, :size,</div><div class='del'>-                                       :envelope, :body, :lines,</div><div class='del'>-                                       :md5, :disposition, :language,</div><div class='del'>-                                       :extension)</div><div class='del'>-      def multipart?</div><div class='del'>-        return false</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Obsolete: use +subtype+ instead.  Calling this will</div><div class='del'>-      # generate a warning message to +stderr+, then return </div><div class='del'>-      # the value of +subtype+.</div><div class='del'>-      def media_subtype</div><div class='del'>-        $stderr.printf("warning: media_subtype is obsolete.\n")</div><div class='del'>-        $stderr.printf("         use subtype instead.\n")</div><div class='del'>-        return subtype</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Net::IMAP::BodyTypeMultipart represents multipart body structures </div><div class='del'>-    # of messages.</div><div class='del'>-    # </div><div class='del'>-    # ==== Fields:</div><div class='del'>-    # </div><div class='del'>-    # media_type:: Returns the content media type name as defined in [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # subtype:: Returns the content subtype name as defined in [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # parts:: Returns multiple parts.</div><div class='del'>-    # </div><div class='del'>-    # param:: Returns a hash that represents parameters as defined in [MIME-IMB].</div><div class='del'>-    # </div><div class='del'>-    # disposition:: Returns a Net::IMAP::ContentDisposition object giving</div><div class='del'>-    #               the content disposition.</div><div class='del'>-    # </div><div class='del'>-    # language:: Returns a string or an array of strings giving the body</div><div class='del'>-    #            language value as defined in [LANGUAGE-TAGS].</div><div class='del'>-    # </div><div class='del'>-    # extension:: Returns extension data.</div><div class='del'>-    # </div><div class='del'>-    # multipart?:: Returns true.</div><div class='del'>-    # </div><div class='del'>-    class BodyTypeMultipart &lt; Struct.new(:media_type, :subtype,</div><div class='del'>-                                         :parts,</div><div class='del'>-                                         :param, :disposition, :language,</div><div class='del'>-                                         :extension)</div><div class='del'>-      def multipart?</div><div class='del'>-        return true</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Obsolete: use +subtype+ instead.  Calling this will</div><div class='del'>-      # generate a warning message to +stderr+, then return </div><div class='del'>-      # the value of +subtype+.</div><div class='del'>-      def media_subtype</div><div class='del'>-        $stderr.printf("warning: media_subtype is obsolete.\n")</div><div class='del'>-        $stderr.printf("         use subtype instead.\n")</div><div class='del'>-        return subtype</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class ResponseParser # :nodoc:</div><div class='del'>-      def parse(str)</div><div class='del'>-        @str = str</div><div class='del'>-        @pos = 0</div><div class='del'>-        @lex_state = EXPR_BEG</div><div class='del'>-        @token = nil</div><div class='del'>-        return response</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      EXPR_BEG          = :EXPR_BEG</div><div class='del'>-      EXPR_DATA         = :EXPR_DATA</div><div class='del'>-      EXPR_TEXT         = :EXPR_TEXT</div><div class='del'>-      EXPR_RTEXT        = :EXPR_RTEXT</div><div class='del'>-      EXPR_CTEXT        = :EXPR_CTEXT</div><div class='del'>-</div><div class='del'>-      T_SPACE   = :SPACE</div><div class='del'>-      T_NIL     = :NIL</div><div class='del'>-      T_NUMBER  = :NUMBER</div><div class='del'>-      T_ATOM    = :ATOM</div><div class='del'>-      T_QUOTED  = :QUOTED</div><div class='del'>-      T_LPAR    = :LPAR</div><div class='del'>-      T_RPAR    = :RPAR</div><div class='del'>-      T_BSLASH  = :BSLASH</div><div class='del'>-      T_STAR    = :STAR</div><div class='del'>-      T_LBRA    = :LBRA</div><div class='del'>-      T_RBRA    = :RBRA</div><div class='del'>-      T_LITERAL = :LITERAL</div><div class='del'>-      T_PLUS    = :PLUS</div><div class='del'>-      T_PERCENT = :PERCENT</div><div class='del'>-      T_CRLF    = :CRLF</div><div class='del'>-      T_EOF     = :EOF</div><div class='del'>-      T_TEXT    = :TEXT</div><div class='del'>-</div><div class='del'>-      BEG_REGEXP = /\G(?:\</div><div class='del'>-(?# 1:  SPACE   )( +)|\</div><div class='del'>-(?# 2:  NIL     )(NIL)(?=[\x80-\xff(){ \x00-\x1f\x7f%*"\\\[\]+])|\</div><div class='del'>-(?# 3:  NUMBER  )(\d+)(?=[\x80-\xff(){ \x00-\x1f\x7f%*"\\\[\]+])|\</div><div class='del'>-(?# 4:  ATOM    )([^\x80-\xff(){ \x00-\x1f\x7f%*"\\\[\]+]+)|\</div><div class='del'>-(?# 5:  QUOTED  )"((?:[^\x00\r\n"\\]|\\["\\])*)"|\</div><div class='del'>-(?# 6:  LPAR    )(\()|\</div><div class='del'>-(?# 7:  RPAR    )(\))|\</div><div class='del'>-(?# 8:  BSLASH  )(\\)|\</div><div class='del'>-(?# 9:  STAR    )(\*)|\</div><div class='del'>-(?# 10: LBRA    )(\[)|\</div><div class='del'>-(?# 11: RBRA    )(\])|\</div><div class='del'>-(?# 12: LITERAL )\{(\d+)\}\r\n|\</div><div class='del'>-(?# 13: PLUS    )(\+)|\</div><div class='del'>-(?# 14: PERCENT )(%)|\</div><div class='del'>-(?# 15: CRLF    )(\r\n)|\</div><div class='del'>-(?# 16: EOF     )(\z))/ni</div><div class='del'>-</div><div class='del'>-      DATA_REGEXP = /\G(?:\</div><div class='del'>-(?# 1:  SPACE   )( )|\</div><div class='del'>-(?# 2:  NIL     )(NIL)|\</div><div class='del'>-(?# 3:  NUMBER  )(\d+)|\</div><div class='del'>-(?# 4:  QUOTED  )"((?:[^\x00\r\n"\\]|\\["\\])*)"|\</div><div class='del'>-(?# 5:  LITERAL )\{(\d+)\}\r\n|\</div><div class='del'>-(?# 6:  LPAR    )(\()|\</div><div class='del'>-(?# 7:  RPAR    )(\)))/ni</div><div class='del'>-</div><div class='del'>-      TEXT_REGEXP = /\G(?:\</div><div class='del'>-(?# 1:  TEXT    )([^\x00\r\n]*))/ni</div><div class='del'>-</div><div class='del'>-      RTEXT_REGEXP = /\G(?:\</div><div class='del'>-(?# 1:  LBRA    )(\[)|\</div><div class='del'>-(?# 2:  TEXT    )([^\x00\r\n]*))/ni</div><div class='del'>-</div><div class='del'>-      CTEXT_REGEXP = /\G(?:\</div><div class='del'>-(?# 1:  TEXT    )([^\x00\r\n\]]*))/ni</div><div class='del'>-</div><div class='del'>-      Token = Struct.new(:symbol, :value)</div><div class='del'>-</div><div class='del'>-      def response</div><div class='del'>-        token = lookahead</div><div class='del'>-        case token.symbol</div><div class='del'>-        when T_PLUS</div><div class='del'>-          result = continue_req</div><div class='del'>-        when T_STAR</div><div class='del'>-          result = response_untagged</div><div class='del'>-        else</div><div class='del'>-          result = response_tagged</div><div class='del'>-        end</div><div class='del'>-        match(T_CRLF)</div><div class='del'>-        match(T_EOF)</div><div class='del'>-        return result</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def continue_req</div><div class='del'>-        match(T_PLUS)</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return ContinuationRequest.new(resp_text, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def response_untagged</div><div class='del'>-        match(T_STAR)</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NUMBER</div><div class='del'>-          return numeric_response</div><div class='del'>-        elsif token.symbol == T_ATOM</div><div class='del'>-          case token.value</div><div class='del'>-          when /\A(?:OK|NO|BAD|BYE|PREAUTH)\z/ni</div><div class='del'>-            return response_cond</div><div class='del'>-          when /\A(?:FLAGS)\z/ni</div><div class='del'>-            return flags_response</div><div class='del'>-          when /\A(?:LIST|LSUB)\z/ni</div><div class='del'>-            return list_response</div><div class='del'>-          when /\A(?:QUOTA)\z/ni</div><div class='del'>-            return getquota_response</div><div class='del'>-          when /\A(?:QUOTAROOT)\z/ni</div><div class='del'>-            return getquotaroot_response</div><div class='del'>-          when /\A(?:ACL)\z/ni</div><div class='del'>-            return getacl_response</div><div class='del'>-          when /\A(?:SEARCH|SORT)\z/ni</div><div class='del'>-            return search_response</div><div class='del'>-          when /\A(?:THREAD)\z/ni</div><div class='del'>-            return thread_response</div><div class='del'>-          when /\A(?:STATUS)\z/ni</div><div class='del'>-            return status_response</div><div class='del'>-          when /\A(?:CAPABILITY)\z/ni</div><div class='del'>-            return capability_response</div><div class='del'>-          else</div><div class='del'>-            return text_response</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          parse_error("unexpected token %s", token.symbol)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def response_tagged</div><div class='del'>-        tag = atom</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return TaggedResponse.new(tag, name, resp_text, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def response_cond</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return UntaggedResponse.new(name, resp_text, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def numeric_response</div><div class='del'>-        n = number</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        case name</div><div class='del'>-        when "EXISTS", "RECENT", "EXPUNGE"</div><div class='del'>-          return UntaggedResponse.new(name, n, @str)</div><div class='del'>-        when "FETCH"</div><div class='del'>-          shift_token</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          data = FetchData.new(n, msg_att)</div><div class='del'>-          return UntaggedResponse.new(name, data, @str)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def msg_att</div><div class='del'>-        match(T_LPAR)</div><div class='del'>-        attr = {}</div><div class='del'>-        while true</div><div class='del'>-          token = lookahead</div><div class='del'>-          case token.symbol</div><div class='del'>-          when T_RPAR</div><div class='del'>-            shift_token</div><div class='del'>-            break</div><div class='del'>-          when T_SPACE</div><div class='del'>-            shift_token</div><div class='del'>-            token = lookahead</div><div class='del'>-          end</div><div class='del'>-          case token.value</div><div class='del'>-          when /\A(?:ENVELOPE)\z/ni</div><div class='del'>-            name, val = envelope_data</div><div class='del'>-          when /\A(?:FLAGS)\z/ni</div><div class='del'>-            name, val = flags_data</div><div class='del'>-          when /\A(?:INTERNALDATE)\z/ni</div><div class='del'>-            name, val = internaldate_data</div><div class='del'>-          when /\A(?:RFC822(?:\.HEADER|\.TEXT)?)\z/ni</div><div class='del'>-            name, val = rfc822_text</div><div class='del'>-          when /\A(?:RFC822\.SIZE)\z/ni</div><div class='del'>-            name, val = rfc822_size</div><div class='del'>-          when /\A(?:BODY(?:STRUCTURE)?)\z/ni</div><div class='del'>-            name, val = body_data</div><div class='del'>-          when /\A(?:UID)\z/ni</div><div class='del'>-            name, val = uid_data</div><div class='del'>-          else</div><div class='del'>-            parse_error("unknown attribute `%s'", token.value)</div><div class='del'>-          end</div><div class='del'>-          attr[name] = val</div><div class='del'>-        end</div><div class='del'>-        return attr</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def envelope_data</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return name, envelope</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def envelope</div><div class='del'>-        @lex_state = EXPR_DATA</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          result = nil</div><div class='del'>-        else</div><div class='del'>-          match(T_LPAR)</div><div class='del'>-          date = nstring</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          subject = nstring</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          from = address_list</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          sender = address_list</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          reply_to = address_list</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          to = address_list</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          cc = address_list</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          bcc = address_list</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          in_reply_to = nstring</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          message_id = nstring</div><div class='del'>-          match(T_RPAR)</div><div class='del'>-          result = Envelope.new(date, subject, from, sender, reply_to,</div><div class='del'>-                                to, cc, bcc, in_reply_to, message_id)</div><div class='del'>-        end</div><div class='del'>-        @lex_state = EXPR_BEG</div><div class='del'>-        return result</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def flags_data</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return name, flag_list</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def internaldate_data</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        token = match(T_QUOTED)</div><div class='del'>-        return name, token.value</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def rfc822_text</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return name, nstring</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def rfc822_size</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return name, number</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_data</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-          return name, body</div><div class='del'>-        end</div><div class='del'>-        name.concat(section)</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_ATOM</div><div class='del'>-          name.concat(token.value)</div><div class='del'>-          shift_token</div><div class='del'>-        end</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        data = nstring</div><div class='del'>-        return name, data</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body</div><div class='del'>-        @lex_state = EXPR_DATA</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          result = nil</div><div class='del'>-        else</div><div class='del'>-          match(T_LPAR)</div><div class='del'>-          token = lookahead</div><div class='del'>-          if token.symbol == T_LPAR</div><div class='del'>-            result = body_type_mpart</div><div class='del'>-          else</div><div class='del'>-            result = body_type_1part</div><div class='del'>-          end</div><div class='del'>-          match(T_RPAR)</div><div class='del'>-        end</div><div class='del'>-        @lex_state = EXPR_BEG</div><div class='del'>-        return result</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_type_1part</div><div class='del'>-        token = lookahead</div><div class='del'>-        case token.value</div><div class='del'>-        when /\A(?:TEXT)\z/ni</div><div class='del'>-          return body_type_text</div><div class='del'>-        when /\A(?:MESSAGE)\z/ni</div><div class='del'>-          return body_type_msg</div><div class='del'>-        else</div><div class='del'>-          return body_type_basic</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_type_basic</div><div class='del'>-        mtype, msubtype = media_type</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_RPAR</div><div class='del'>-          return BodyTypeBasic.new(mtype, msubtype)</div><div class='del'>-        end</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        param, content_id, desc, enc, size = body_fields</div><div class='del'>-        md5, disposition, language, extension = body_ext_1part</div><div class='del'>-        return BodyTypeBasic.new(mtype, msubtype,</div><div class='del'>-                                 param, content_id,</div><div class='del'>-                                 desc, enc, size,</div><div class='del'>-                                 md5, disposition, language, extension)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_type_text</div><div class='del'>-        mtype, msubtype = media_type</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        param, content_id, desc, enc, size = body_fields</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        lines = number</div><div class='del'>-        md5, disposition, language, extension = body_ext_1part</div><div class='del'>-        return BodyTypeText.new(mtype, msubtype,</div><div class='del'>-                                param, content_id,</div><div class='del'>-                                desc, enc, size,</div><div class='del'>-                                lines,</div><div class='del'>-                                md5, disposition, language, extension)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_type_msg</div><div class='del'>-        mtype, msubtype = media_type</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        param, content_id, desc, enc, size = body_fields</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        env = envelope</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        b = body</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        lines = number</div><div class='del'>-        md5, disposition, language, extension = body_ext_1part</div><div class='del'>-        return BodyTypeMessage.new(mtype, msubtype,</div><div class='del'>-                                   param, content_id,</div><div class='del'>-                                   desc, enc, size,</div><div class='del'>-                                   env, b, lines,</div><div class='del'>-                                   md5, disposition, language, extension)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_type_mpart</div><div class='del'>-        parts = []</div><div class='del'>-        while true</div><div class='del'>-          token = lookahead</div><div class='del'>-          if token.symbol == T_SPACE</div><div class='del'>-            shift_token</div><div class='del'>-            break</div><div class='del'>-          end</div><div class='del'>-          parts.push(body)</div><div class='del'>-        end</div><div class='del'>-        mtype = "MULTIPART"</div><div class='del'>-        msubtype = case_insensitive_string</div><div class='del'>-        param, disposition, language, extension = body_ext_mpart</div><div class='del'>-        return BodyTypeMultipart.new(mtype, msubtype, parts,</div><div class='del'>-                                     param, disposition, language,</div><div class='del'>-                                     extension)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def media_type</div><div class='del'>-        mtype = case_insensitive_string</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        msubtype = case_insensitive_string</div><div class='del'>-        return mtype, msubtype</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_fields</div><div class='del'>-        param = body_fld_param</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        content_id = nstring</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        desc = nstring</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        enc = case_insensitive_string</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        size = number</div><div class='del'>-        return param, content_id, desc, enc, size</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_fld_param</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        match(T_LPAR)</div><div class='del'>-        param = {}</div><div class='del'>-        while true</div><div class='del'>-          token = lookahead</div><div class='del'>-          case token.symbol</div><div class='del'>-          when T_RPAR</div><div class='del'>-            shift_token</div><div class='del'>-            break</div><div class='del'>-          when T_SPACE</div><div class='del'>-            shift_token</div><div class='del'>-          end</div><div class='del'>-          name = case_insensitive_string</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          val = string</div><div class='del'>-          param[name] = val</div><div class='del'>-        end</div><div class='del'>-        return param</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_ext_1part</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-        else</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        md5 = nstring</div><div class='del'>-</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-        else</div><div class='del'>-          return md5</div><div class='del'>-        end</div><div class='del'>-        disposition = body_fld_dsp</div><div class='del'>-</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-        else</div><div class='del'>-          return md5, disposition</div><div class='del'>-        end</div><div class='del'>-        language = body_fld_lang</div><div class='del'>-</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-        else</div><div class='del'>-          return md5, disposition, language</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        extension = body_extensions</div><div class='del'>-        return md5, disposition, language, extension</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_ext_mpart</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-        else</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        param = body_fld_param</div><div class='del'>-</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-        else</div><div class='del'>-          return param</div><div class='del'>-        end</div><div class='del'>-        disposition = body_fld_dsp</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        language = body_fld_lang</div><div class='del'>-</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-        else</div><div class='del'>-          return param, disposition, language</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        extension = body_extensions</div><div class='del'>-        return param, disposition, language, extension</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_fld_dsp</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        match(T_LPAR)</div><div class='del'>-        dsp_type = case_insensitive_string</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        param = body_fld_param</div><div class='del'>-        match(T_RPAR)</div><div class='del'>-        return ContentDisposition.new(dsp_type, param)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_fld_lang</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_LPAR</div><div class='del'>-          shift_token</div><div class='del'>-          result = []</div><div class='del'>-          while true</div><div class='del'>-            token = lookahead</div><div class='del'>-            case token.symbol</div><div class='del'>-            when T_RPAR</div><div class='del'>-              shift_token</div><div class='del'>-              return result</div><div class='del'>-            when T_SPACE</div><div class='del'>-              shift_token</div><div class='del'>-            end</div><div class='del'>-            result.push(case_insensitive_string)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          lang = nstring</div><div class='del'>-          if lang</div><div class='del'>-            return lang.upcase</div><div class='del'>-          else</div><div class='del'>-            return lang</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_extensions</div><div class='del'>-        result = []</div><div class='del'>-        while true</div><div class='del'>-          token = lookahead</div><div class='del'>-          case token.symbol</div><div class='del'>-          when T_RPAR</div><div class='del'>-            return result</div><div class='del'>-          when T_SPACE</div><div class='del'>-            shift_token</div><div class='del'>-          end</div><div class='del'>-          result.push(body_extension)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def body_extension</div><div class='del'>-        token = lookahead</div><div class='del'>-        case token.symbol</div><div class='del'>-        when T_LPAR</div><div class='del'>-          shift_token</div><div class='del'>-          result = body_extensions</div><div class='del'>-          match(T_RPAR)</div><div class='del'>-          return result</div><div class='del'>-        when T_NUMBER</div><div class='del'>-          return number</div><div class='del'>-        else</div><div class='del'>-          return nstring</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def section</div><div class='del'>-        str = ""</div><div class='del'>-        token = match(T_LBRA)</div><div class='del'>-        str.concat(token.value)</div><div class='del'>-        token = match(T_ATOM, T_NUMBER, T_RBRA)</div><div class='del'>-        if token.symbol == T_RBRA</div><div class='del'>-          str.concat(token.value)</div><div class='del'>-          return str</div><div class='del'>-        end</div><div class='del'>-        str.concat(token.value)</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-          str.concat(token.value)</div><div class='del'>-          token = match(T_LPAR)</div><div class='del'>-          str.concat(token.value)</div><div class='del'>-          while true</div><div class='del'>-            token = lookahead</div><div class='del'>-            case token.symbol</div><div class='del'>-            when T_RPAR</div><div class='del'>-              str.concat(token.value)</div><div class='del'>-              shift_token</div><div class='del'>-              break</div><div class='del'>-            when T_SPACE</div><div class='del'>-              shift_token</div><div class='del'>-              str.concat(token.value)</div><div class='del'>-            end</div><div class='del'>-            str.concat(format_string(astring))</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        token = match(T_RBRA)</div><div class='del'>-        str.concat(token.value)</div><div class='del'>-        return str</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def format_string(str)</div><div class='del'>-        case str</div><div class='del'>-        when ""</div><div class='del'>-          return '""'</div><div class='del'>-        when /[\x80-\xff\r\n]/n</div><div class='del'>-          # literal</div><div class='del'>-          return "{" + str.length.to_s + "}" + CRLF + str</div><div class='del'>-        when /[(){ \x00-\x1f\x7f%*"\\]/n</div><div class='del'>-          # quoted string</div><div class='del'>-          return '"' + str.gsub(/["\\]/n, "\\\\\\&amp;") + '"'</div><div class='del'>-        else</div><div class='del'>-          # atom</div><div class='del'>-          return str</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def uid_data</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return name, number</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def text_response</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        @lex_state = EXPR_TEXT</div><div class='del'>-        token = match(T_TEXT)</div><div class='del'>-        @lex_state = EXPR_BEG</div><div class='del'>-        return UntaggedResponse.new(name, token.value)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def flags_response</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return UntaggedResponse.new(name, flag_list, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def list_response</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        return UntaggedResponse.new(name, mailbox_list, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def mailbox_list</div><div class='del'>-        attr = flag_list</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        token = match(T_QUOTED, T_NIL)</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          delim = nil</div><div class='del'>-        else</div><div class='del'>-          delim = token.value</div><div class='del'>-        end</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        name = astring</div><div class='del'>-        return MailboxList.new(attr, delim, name)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def getquota_response</div><div class='del'>-        # If quota never established, get back</div><div class='del'>-        # `NO Quota root does not exist'.</div><div class='del'>-        # If quota removed, get `()' after the</div><div class='del'>-        # folder spec with no mention of `STORAGE'.</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        mailbox = astring</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        match(T_LPAR)</div><div class='del'>-        token = lookahead</div><div class='del'>-        case token.symbol</div><div class='del'>-        when T_RPAR</div><div class='del'>-          shift_token</div><div class='del'>-          data = MailboxQuota.new(mailbox, nil, nil)</div><div class='del'>-          return UntaggedResponse.new(name, data, @str)</div><div class='del'>-        when T_ATOM</div><div class='del'>-          shift_token</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          token = match(T_NUMBER)</div><div class='del'>-          usage = token.value</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          token = match(T_NUMBER)</div><div class='del'>-          quota = token.value</div><div class='del'>-          match(T_RPAR)</div><div class='del'>-          data = MailboxQuota.new(mailbox, usage, quota)</div><div class='del'>-          return UntaggedResponse.new(name, data, @str)</div><div class='del'>-        else</div><div class='del'>-          parse_error("unexpected token %s", token.symbol)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def getquotaroot_response</div><div class='del'>-        # Similar to getquota, but only admin can use getquota.</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        mailbox = astring</div><div class='del'>-        quotaroots = []</div><div class='del'>-        while true</div><div class='del'>-          token = lookahead</div><div class='del'>-          break unless token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-          quotaroots.push(astring)</div><div class='del'>-        end</div><div class='del'>-        data = MailboxQuotaRoot.new(mailbox, quotaroots)</div><div class='del'>-        return UntaggedResponse.new(name, data, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def getacl_response</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        mailbox = astring</div><div class='del'>-        data = []</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-          while true</div><div class='del'>-            token = lookahead</div><div class='del'>-            case token.symbol</div><div class='del'>-            when T_CRLF</div><div class='del'>-              break</div><div class='del'>-            when T_SPACE</div><div class='del'>-              shift_token</div><div class='del'>-            end</div><div class='del'>-            user = astring</div><div class='del'>-            match(T_SPACE)</div><div class='del'>-            rights = astring</div><div class='del'>-            ##XXX data.push([user, rights])</div><div class='del'>-            data.push(MailboxACLItem.new(user, rights))</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        return UntaggedResponse.new(name, data, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def search_response</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          shift_token</div><div class='del'>-          data = []</div><div class='del'>-          while true</div><div class='del'>-            token = lookahead</div><div class='del'>-            case token.symbol</div><div class='del'>-            when T_CRLF</div><div class='del'>-              break</div><div class='del'>-            when T_SPACE</div><div class='del'>-              shift_token</div><div class='del'>-            end</div><div class='del'>-            data.push(number)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          data = []</div><div class='del'>-        end</div><div class='del'>-        return UntaggedResponse.new(name, data, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def thread_response</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        token = lookahead</div><div class='del'>-</div><div class='del'>-        if token.symbol == T_SPACE</div><div class='del'>-          threads = []</div><div class='del'>-</div><div class='del'>-          while true</div><div class='del'>-            shift_token</div><div class='del'>-            token = lookahead</div><div class='del'>-</div><div class='del'>-            case token.symbol</div><div class='del'>-            when T_LPAR</div><div class='del'>-              threads &lt;&lt; thread_branch(token)</div><div class='del'>-            when T_CRLF</div><div class='del'>-              break</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          # no member</div><div class='del'>-          threads = []</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        return UntaggedResponse.new(name, threads, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def thread_branch(token)</div><div class='del'>-        rootmember = nil</div><div class='del'>-        lastmember = nil</div><div class='del'>-        </div><div class='del'>-        while true</div><div class='del'>-          shift_token    # ignore first T_LPAR</div><div class='del'>-          token = lookahead</div><div class='del'>-          </div><div class='del'>-          case token.symbol</div><div class='del'>-          when T_NUMBER</div><div class='del'>-            # new member</div><div class='del'>-            newmember = ThreadMember.new(number, [])</div><div class='del'>-            if rootmember.nil?</div><div class='del'>-              rootmember = newmember</div><div class='del'>-            else    </div><div class='del'>-              lastmember.children &lt;&lt; newmember</div><div class='del'>-            end     </div><div class='del'>-            lastmember = newmember</div><div class='del'>-          when T_SPACE </div><div class='del'>-            # do nothing </div><div class='del'>-          when T_LPAR</div><div class='del'>-            if rootmember.nil?</div><div class='del'>-              # dummy member</div><div class='del'>-              lastmember = rootmember = ThreadMember.new(nil, [])</div><div class='del'>-            end     </div><div class='del'>-            </div><div class='del'>-            lastmember.children &lt;&lt; thread_branch(token)</div><div class='del'>-          when T_RPAR</div><div class='del'>-            break   </div><div class='del'>-          end     </div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        return rootmember</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def status_response</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        mailbox = astring</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        match(T_LPAR)</div><div class='del'>-        attr = {}</div><div class='del'>-        while true</div><div class='del'>-          token = lookahead</div><div class='del'>-          case token.symbol</div><div class='del'>-          when T_RPAR</div><div class='del'>-            shift_token</div><div class='del'>-            break</div><div class='del'>-          when T_SPACE</div><div class='del'>-            shift_token</div><div class='del'>-          end</div><div class='del'>-          token = match(T_ATOM)</div><div class='del'>-          key = token.value.upcase</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          val = number</div><div class='del'>-          attr[key] = val</div><div class='del'>-        end</div><div class='del'>-        data = StatusData.new(mailbox, attr)</div><div class='del'>-        return UntaggedResponse.new(name, data, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def capability_response</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        match(T_SPACE)</div><div class='del'>-        data = []</div><div class='del'>-        while true</div><div class='del'>-          token = lookahead</div><div class='del'>-          case token.symbol</div><div class='del'>-          when T_CRLF</div><div class='del'>-            break</div><div class='del'>-          when T_SPACE</div><div class='del'>-            shift_token</div><div class='del'>-          end</div><div class='del'>-          data.push(atom.upcase)</div><div class='del'>-        end</div><div class='del'>-        return UntaggedResponse.new(name, data, @str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def resp_text</div><div class='del'>-        @lex_state = EXPR_RTEXT</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_LBRA</div><div class='del'>-          code = resp_text_code</div><div class='del'>-        else</div><div class='del'>-          code = nil</div><div class='del'>-        end</div><div class='del'>-        token = match(T_TEXT)</div><div class='del'>-        @lex_state = EXPR_BEG</div><div class='del'>-        return ResponseText.new(code, token.value)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def resp_text_code</div><div class='del'>-        @lex_state = EXPR_BEG</div><div class='del'>-        match(T_LBRA)</div><div class='del'>-        token = match(T_ATOM)</div><div class='del'>-        name = token.value.upcase</div><div class='del'>-        case name</div><div class='del'>-        when /\A(?:ALERT|PARSE|READ-ONLY|READ-WRITE|TRYCREATE|NOMODSEQ)\z/n</div><div class='del'>-          result = ResponseCode.new(name, nil)</div><div class='del'>-        when /\A(?:PERMANENTFLAGS)\z/n</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          result = ResponseCode.new(name, flag_list)</div><div class='del'>-        when /\A(?:UIDVALIDITY|UIDNEXT|UNSEEN)\z/n</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          result = ResponseCode.new(name, number)</div><div class='del'>-        else</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          @lex_state = EXPR_CTEXT</div><div class='del'>-          token = match(T_TEXT)</div><div class='del'>-          @lex_state = EXPR_BEG</div><div class='del'>-          result = ResponseCode.new(name, token.value)</div><div class='del'>-        end</div><div class='del'>-        match(T_RBRA)</div><div class='del'>-        @lex_state = EXPR_RTEXT</div><div class='del'>-        return result</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def address_list</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          return nil</div><div class='del'>-        else</div><div class='del'>-          result = []</div><div class='del'>-          match(T_LPAR)</div><div class='del'>-          while true</div><div class='del'>-            token = lookahead</div><div class='del'>-            case token.symbol</div><div class='del'>-            when T_RPAR</div><div class='del'>-              shift_token</div><div class='del'>-              break</div><div class='del'>-            when T_SPACE</div><div class='del'>-              shift_token</div><div class='del'>-            end</div><div class='del'>-            result.push(address)</div><div class='del'>-          end</div><div class='del'>-          return result</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ADDRESS_REGEXP = /\G\</div><div class='del'>-(?# 1: NAME     )(?:NIL|"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)") \</div><div class='del'>-(?# 2: ROUTE    )(?:NIL|"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)") \</div><div class='del'>-(?# 3: MAILBOX  )(?:NIL|"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)") \</div><div class='del'>-(?# 4: HOST     )(?:NIL|"((?:[^\x80-\xff\x00\r\n"\\]|\\["\\])*)")\</div><div class='del'>-\)/ni</div><div class='del'>-</div><div class='del'>-      def address</div><div class='del'>-        match(T_LPAR)</div><div class='del'>-        if @str.index(ADDRESS_REGEXP, @pos)</div><div class='del'>-          # address does not include literal.</div><div class='del'>-          @pos = $~.end(0)</div><div class='del'>-          name = $1</div><div class='del'>-          route = $2</div><div class='del'>-          mailbox = $3</div><div class='del'>-          host = $4</div><div class='del'>-          for s in [name, route, mailbox, host]</div><div class='del'>-            if s</div><div class='del'>-              s.gsub!(/\\(["\\])/n, "\\1")</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          name = nstring</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          route = nstring</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          mailbox = nstring</div><div class='del'>-          match(T_SPACE)</div><div class='del'>-          host = nstring</div><div class='del'>-          match(T_RPAR)</div><div class='del'>-        end</div><div class='del'>-        return Address.new(name, route, mailbox, host)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-#        def flag_list</div><div class='del'>-#       result = []</div><div class='del'>-#       match(T_LPAR)</div><div class='del'>-#       while true</div><div class='del'>-#         token = lookahead</div><div class='del'>-#         case token.symbol</div><div class='del'>-#         when T_RPAR</div><div class='del'>-#           shift_token</div><div class='del'>-#           break</div><div class='del'>-#         when T_SPACE</div><div class='del'>-#           shift_token</div><div class='del'>-#         end</div><div class='del'>-#         result.push(flag)</div><div class='del'>-#       end</div><div class='del'>-#       return result</div><div class='del'>-#        end</div><div class='del'>-</div><div class='del'>-#        def flag</div><div class='del'>-#       token = lookahead</div><div class='del'>-#       if token.symbol == T_BSLASH</div><div class='del'>-#         shift_token</div><div class='del'>-#         token = lookahead</div><div class='del'>-#         if token.symbol == T_STAR</div><div class='del'>-#           shift_token</div><div class='del'>-#           return token.value.intern</div><div class='del'>-#         else</div><div class='del'>-#           return atom.intern</div><div class='del'>-#         end</div><div class='del'>-#       else</div><div class='del'>-#         return atom</div><div class='del'>-#       end</div><div class='del'>-#        end</div><div class='del'>-</div><div class='del'>-      FLAG_REGEXP = /\</div><div class='del'>-(?# FLAG        )\\([^\x80-\xff(){ \x00-\x1f\x7f%"\\]+)|\</div><div class='del'>-(?# ATOM        )([^\x80-\xff(){ \x00-\x1f\x7f%*"\\]+)/n</div><div class='del'>-</div><div class='del'>-      def flag_list</div><div class='del'>-        if @str.index(/\(([^)]*)\)/ni, @pos)</div><div class='del'>-          @pos = $~.end(0)</div><div class='del'>-          return $1.scan(FLAG_REGEXP).collect { |flag, atom|</div><div class='del'>-            atom || flag.capitalize.intern</div><div class='del'>-          }</div><div class='del'>-        else</div><div class='del'>-          parse_error("invalid flag list")</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def nstring</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          return nil</div><div class='del'>-        else</div><div class='del'>-          return string</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def astring</div><div class='del'>-        token = lookahead</div><div class='del'>-        if string_token?(token)</div><div class='del'>-          return string</div><div class='del'>-        else</div><div class='del'>-          return atom</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def string</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        token = match(T_QUOTED, T_LITERAL)</div><div class='del'>-        return token.value</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      STRING_TOKENS = [T_QUOTED, T_LITERAL, T_NIL]</div><div class='del'>-</div><div class='del'>-      def string_token?(token)</div><div class='del'>-        return STRING_TOKENS.include?(token.symbol)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def case_insensitive_string</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        token = match(T_QUOTED, T_LITERAL)</div><div class='del'>-        return token.value.upcase</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def atom</div><div class='del'>-        result = ""</div><div class='del'>-        while true</div><div class='del'>-          token = lookahead</div><div class='del'>-          if atom_token?(token)</div><div class='del'>-            result.concat(token.value)</div><div class='del'>-            shift_token</div><div class='del'>-          else</div><div class='del'>-            if result.empty?</div><div class='del'>-              parse_error("unexpected token %s", token.symbol)</div><div class='del'>-            else</div><div class='del'>-              return result</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'>-      ATOM_TOKENS = [</div><div class='del'>-        T_ATOM,</div><div class='del'>-        T_NUMBER,</div><div class='del'>-        T_NIL,</div><div class='del'>-        T_LBRA,</div><div class='del'>-        T_RBRA,</div><div class='del'>-        T_PLUS</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      def atom_token?(token)</div><div class='del'>-        return ATOM_TOKENS.include?(token.symbol)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def number</div><div class='del'>-        token = lookahead</div><div class='del'>-        if token.symbol == T_NIL</div><div class='del'>-          shift_token</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        token = match(T_NUMBER)</div><div class='del'>-        return token.value.to_i</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def nil_atom</div><div class='del'>-        match(T_NIL)</div><div class='del'>-        return nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def match(*args)</div><div class='del'>-        token = lookahead</div><div class='del'>-        unless args.include?(token.symbol)</div><div class='del'>-          parse_error('unexpected token %s (expected %s)',</div><div class='del'>-                      token.symbol.id2name,</div><div class='del'>-                      args.collect {|i| i.id2name}.join(" or "))</div><div class='del'>-        end</div><div class='del'>-        shift_token</div><div class='del'>-        return token</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def lookahead</div><div class='del'>-        unless @token</div><div class='del'>-          @token = next_token</div><div class='del'>-        end</div><div class='del'>-        return @token</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def shift_token</div><div class='del'>-        @token = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def next_token</div><div class='del'>-        case @lex_state</div><div class='del'>-        when EXPR_BEG</div><div class='del'>-          if @str.index(BEG_REGEXP, @pos)</div><div class='del'>-            @pos = $~.end(0)</div><div class='del'>-            if $1</div><div class='del'>-              return Token.new(T_SPACE, $+)</div><div class='del'>-            elsif $2</div><div class='del'>-              return Token.new(T_NIL, $+)</div><div class='del'>-            elsif $3</div><div class='del'>-              return Token.new(T_NUMBER, $+)</div><div class='del'>-            elsif $4</div><div class='del'>-              return Token.new(T_ATOM, $+)</div><div class='del'>-            elsif $5</div><div class='del'>-              return Token.new(T_QUOTED,</div><div class='del'>-                               $+.gsub(/\\(["\\])/n, "\\1"))</div><div class='del'>-            elsif $6</div><div class='del'>-              return Token.new(T_LPAR, $+)</div><div class='del'>-            elsif $7</div><div class='del'>-              return Token.new(T_RPAR, $+)</div><div class='del'>-            elsif $8</div><div class='del'>-              return Token.new(T_BSLASH, $+)</div><div class='del'>-            elsif $9</div><div class='del'>-              return Token.new(T_STAR, $+)</div><div class='del'>-            elsif $10</div><div class='del'>-              return Token.new(T_LBRA, $+)</div><div class='del'>-            elsif $11</div><div class='del'>-              return Token.new(T_RBRA, $+)</div><div class='del'>-            elsif $12</div><div class='del'>-              len = $+.to_i</div><div class='del'>-              val = @str[@pos, len]</div><div class='del'>-              @pos += len</div><div class='del'>-              return Token.new(T_LITERAL, val)</div><div class='del'>-            elsif $13</div><div class='del'>-              return Token.new(T_PLUS, $+)</div><div class='del'>-            elsif $14</div><div class='del'>-              return Token.new(T_PERCENT, $+)</div><div class='del'>-            elsif $15</div><div class='del'>-              return Token.new(T_CRLF, $+)</div><div class='del'>-            elsif $16</div><div class='del'>-              return Token.new(T_EOF, $+)</div><div class='del'>-            else</div><div class='del'>-              parse_error("[Net::IMAP BUG] BEG_REGEXP is invalid")</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            @str.index(/\S*/n, @pos)</div><div class='del'>-            parse_error("unknown token - %s", $&amp;.dump)</div><div class='del'>-          end</div><div class='del'>-        when EXPR_DATA</div><div class='del'>-          if @str.index(DATA_REGEXP, @pos)</div><div class='del'>-            @pos = $~.end(0)</div><div class='del'>-            if $1</div><div class='del'>-              return Token.new(T_SPACE, $+)</div><div class='del'>-            elsif $2</div><div class='del'>-              return Token.new(T_NIL, $+)</div><div class='del'>-            elsif $3</div><div class='del'>-              return Token.new(T_NUMBER, $+)</div><div class='del'>-            elsif $4</div><div class='del'>-              return Token.new(T_QUOTED,</div><div class='del'>-                               $+.gsub(/\\(["\\])/n, "\\1"))</div><div class='del'>-            elsif $5</div><div class='del'>-              len = $+.to_i</div><div class='del'>-              val = @str[@pos, len]</div><div class='del'>-              @pos += len</div><div class='del'>-              return Token.new(T_LITERAL, val)</div><div class='del'>-            elsif $6</div><div class='del'>-              return Token.new(T_LPAR, $+)</div><div class='del'>-            elsif $7</div><div class='del'>-              return Token.new(T_RPAR, $+)</div><div class='del'>-            else</div><div class='del'>-              parse_error("[Net::IMAP BUG] DATA_REGEXP is invalid")</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            @str.index(/\S*/n, @pos)</div><div class='del'>-            parse_error("unknown token - %s", $&amp;.dump)</div><div class='del'>-          end</div><div class='del'>-        when EXPR_TEXT</div><div class='del'>-          if @str.index(TEXT_REGEXP, @pos)</div><div class='del'>-            @pos = $~.end(0)</div><div class='del'>-            if $1</div><div class='del'>-              return Token.new(T_TEXT, $+)</div><div class='del'>-            else</div><div class='del'>-              parse_error("[Net::IMAP BUG] TEXT_REGEXP is invalid")</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            @str.index(/\S*/n, @pos)</div><div class='del'>-            parse_error("unknown token - %s", $&amp;.dump)</div><div class='del'>-          end</div><div class='del'>-        when EXPR_RTEXT</div><div class='del'>-          if @str.index(RTEXT_REGEXP, @pos)</div><div class='del'>-            @pos = $~.end(0)</div><div class='del'>-            if $1</div><div class='del'>-              return Token.new(T_LBRA, $+)</div><div class='del'>-            elsif $2</div><div class='del'>-              return Token.new(T_TEXT, $+)</div><div class='del'>-            else</div><div class='del'>-              parse_error("[Net::IMAP BUG] RTEXT_REGEXP is invalid")</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            @str.index(/\S*/n, @pos)</div><div class='del'>-            parse_error("unknown token - %s", $&amp;.dump)</div><div class='del'>-          end</div><div class='del'>-        when EXPR_CTEXT</div><div class='del'>-          if @str.index(CTEXT_REGEXP, @pos)</div><div class='del'>-            @pos = $~.end(0)</div><div class='del'>-            if $1</div><div class='del'>-              return Token.new(T_TEXT, $+)</div><div class='del'>-            else</div><div class='del'>-              parse_error("[Net::IMAP BUG] CTEXT_REGEXP is invalid")</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            @str.index(/\S*/n, @pos) #/</div><div class='del'>-            parse_error("unknown token - %s", $&amp;.dump)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          parse_error("illegal @lex_state - %s", @lex_state.inspect)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def parse_error(fmt, *args)</div><div class='del'>-        if IMAP.debug</div><div class='del'>-          $stderr.printf("@str: %s\n", @str.dump)</div><div class='del'>-          $stderr.printf("@pos: %d\n", @pos)</div><div class='del'>-          $stderr.printf("@lex_state: %s\n", @lex_state)</div><div class='del'>-          if @token</div><div class='del'>-            $stderr.printf("@token.symbol: %s\n", @token.symbol)</div><div class='del'>-            $stderr.printf("@token.value: %s\n", @token.value.inspect)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        raise ResponseParseError, format(fmt, *args)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Authenticator for the "LOGIN" authentication type.  See</div><div class='del'>-    # #authenticate().</div><div class='del'>-    class LoginAuthenticator</div><div class='del'>-      def process(data)</div><div class='del'>-        case @state</div><div class='del'>-        when STATE_USER</div><div class='del'>-          @state = STATE_PASSWORD</div><div class='del'>-          return @user</div><div class='del'>-        when STATE_PASSWORD</div><div class='del'>-          return @password</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      STATE_USER = :USER</div><div class='del'>-      STATE_PASSWORD = :PASSWORD</div><div class='del'>-</div><div class='del'>-      def initialize(user, password)</div><div class='del'>-        @user = user</div><div class='del'>-        @password = password</div><div class='del'>-        @state = STATE_USER</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    add_authenticator "LOGIN", LoginAuthenticator</div><div class='del'>-</div><div class='del'>-    # Authenticator for the "CRAM-MD5" authentication type.  See</div><div class='del'>-    # #authenticate().</div><div class='del'>-    class CramMD5Authenticator</div><div class='del'>-      def process(challenge)</div><div class='del'>-        digest = hmac_md5(challenge, @password)</div><div class='del'>-        return @user + " " + digest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      def initialize(user, password)</div><div class='del'>-        @user = user</div><div class='del'>-        @password = password</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def hmac_md5(text, key)</div><div class='del'>-        if key.length &gt; 64</div><div class='del'>-          key = Digest::MD5.digest(key)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        k_ipad = key + "\0" * (64 - key.length)</div><div class='del'>-        k_opad = key + "\0" * (64 - key.length)</div><div class='del'>-        for i in 0..63</div><div class='del'>-          k_ipad[i] ^= 0x36</div><div class='del'>-          k_opad[i] ^= 0x5c</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        digest = Digest::MD5.digest(k_ipad + text)</div><div class='del'>-</div><div class='del'>-        return Digest::MD5.hexdigest(k_opad + digest)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    add_authenticator "CRAM-MD5", CramMD5Authenticator</div><div class='del'>-</div><div class='del'>-    # Superclass of IMAP errors.</div><div class='del'>-    class Error &lt; StandardError</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Error raised when data is in the incorrect format.</div><div class='del'>-    class DataFormatError &lt; Error</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Error raised when a response from the server is non-parseable.</div><div class='del'>-    class ResponseParseError &lt; Error</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Superclass of all errors used to encapsulate "fail" responses</div><div class='del'>-    # from the server.</div><div class='del'>-    class ResponseError &lt; Error</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Error raised upon a "NO" response from the server, indicating</div><div class='del'>-    # that the client command could not be completed successfully.</div><div class='del'>-    class NoResponseError &lt; ResponseError</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Error raised upon a "BAD" response from the server, indicating</div><div class='del'>-    # that the client command violated the IMAP protocol, or an internal</div><div class='del'>-    # server failure has occurred.</div><div class='del'>-    class BadResponseError &lt; ResponseError</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Error raised upon a "BYE" response from the server, indicating </div><div class='del'>-    # that the client is not being allowed to login, or has been timed</div><div class='del'>-    # out due to inactivity.</div><div class='del'>-    class ByeResponseError &lt; ResponseError</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  # :enddoc:</div><div class='del'>-  require "getoptlong"</div><div class='del'>-</div><div class='del'>-  $stdout.sync = true</div><div class='del'>-  $port = nil</div><div class='del'>-  $user = ENV["USER"] || ENV["LOGNAME"]</div><div class='del'>-  $auth = "login"</div><div class='del'>-  $ssl = false</div><div class='del'>-</div><div class='del'>-  def usage</div><div class='del'>-    $stderr.print &lt;&lt;EOF</div><div class='del'>-usage: #{$0} [options] &lt;host&gt;</div><div class='del'>-</div><div class='del'>-  --help                        print this message</div><div class='del'>-  --port=PORT                   specifies port</div><div class='del'>-  --user=USER                   specifies user</div><div class='del'>-  --auth=AUTH                   specifies auth type</div><div class='del'>-  --ssl                         use ssl</div><div class='del'>-EOF</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_password</div><div class='del'>-    print "password: "</div><div class='del'>-    system("stty", "-echo")</div><div class='del'>-    begin</div><div class='del'>-      return gets.chop</div><div class='del'>-    ensure</div><div class='del'>-      system("stty", "echo")</div><div class='del'>-      print "\n"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_command</div><div class='del'>-    printf("%s@%s&gt; ", $user, $host)</div><div class='del'>-    if line = gets</div><div class='del'>-      return line.strip.split(/\s+/)</div><div class='del'>-    else</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  parser = GetoptLong.new</div><div class='del'>-  parser.set_options(['--debug', GetoptLong::NO_ARGUMENT],</div><div class='del'>-                     ['--help', GetoptLong::NO_ARGUMENT],</div><div class='del'>-                     ['--port', GetoptLong::REQUIRED_ARGUMENT],</div><div class='del'>-                     ['--user', GetoptLong::REQUIRED_ARGUMENT],</div><div class='del'>-                     ['--auth', GetoptLong::REQUIRED_ARGUMENT],</div><div class='del'>-                     ['--ssl', GetoptLong::NO_ARGUMENT])</div><div class='del'>-  begin</div><div class='del'>-    parser.each_option do |name, arg|</div><div class='del'>-      case name</div><div class='del'>-      when "--port"</div><div class='del'>-        $port = arg</div><div class='del'>-      when "--user"</div><div class='del'>-        $user = arg</div><div class='del'>-      when "--auth"</div><div class='del'>-        $auth = arg</div><div class='del'>-      when "--ssl"</div><div class='del'>-        $ssl = true</div><div class='del'>-      when "--debug"</div><div class='del'>-        Net::IMAP.debug = true</div><div class='del'>-      when "--help"</div><div class='del'>-        usage</div><div class='del'>-        exit(1)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  rescue</div><div class='del'>-    usage</div><div class='del'>-    exit(1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  $host = ARGV.shift</div><div class='del'>-  unless $host</div><div class='del'>-    usage</div><div class='del'>-    exit(1)</div><div class='del'>-  end</div><div class='del'>-  $port ||= $ssl ? 993 : 143</div><div class='del'>-    </div><div class='del'>-  imap = Net::IMAP.new($host, $port, $ssl)</div><div class='del'>-  begin</div><div class='del'>-    password = get_password</div><div class='del'>-    imap.authenticate($auth, $user, password)</div><div class='del'>-    while true</div><div class='del'>-      cmd, *args = get_command</div><div class='del'>-      break unless cmd</div><div class='del'>-      begin</div><div class='del'>-        case cmd</div><div class='del'>-        when "list"</div><div class='del'>-          for mbox in imap.list("", args[0] || "*")</div><div class='del'>-            if mbox.attr.include?(Net::IMAP::NOSELECT)</div><div class='del'>-              prefix = "!"</div><div class='del'>-            elsif mbox.attr.include?(Net::IMAP::MARKED)</div><div class='del'>-              prefix = "*"</div><div class='del'>-            else</div><div class='del'>-              prefix = " "</div><div class='del'>-            end</div><div class='del'>-            print prefix, mbox.name, "\n"</div><div class='del'>-          end</div><div class='del'>-        when "select"</div><div class='del'>-          imap.select(args[0] || "inbox")</div><div class='del'>-          print "ok\n"</div><div class='del'>-        when "close"</div><div class='del'>-          imap.close</div><div class='del'>-          print "ok\n"</div><div class='del'>-        when "summary"</div><div class='del'>-          unless messages = imap.responses["EXISTS"][-1]</div><div class='del'>-            puts "not selected"</div><div class='del'>-            next</div><div class='del'>-          end</div><div class='del'>-          if messages &gt; 0</div><div class='del'>-            for data in imap.fetch(1..-1, ["ENVELOPE"])</div><div class='del'>-              print data.seqno, ": ", data.attr["ENVELOPE"].subject, "\n"</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            puts "no message"</div><div class='del'>-          end</div><div class='del'>-        when "fetch"</div><div class='del'>-          if args[0]</div><div class='del'>-            data = imap.fetch(args[0].to_i, ["RFC822.HEADER", "RFC822.TEXT"])[0]</div><div class='del'>-            puts data.attr["RFC822.HEADER"]</div><div class='del'>-            puts data.attr["RFC822.TEXT"]</div><div class='del'>-          else</div><div class='del'>-            puts "missing argument"</div><div class='del'>-          end</div><div class='del'>-        when "logout", "exit", "quit"</div><div class='del'>-          break</div><div class='del'>-        when "help", "?"</div><div class='del'>-          print &lt;&lt;EOF</div><div class='del'>-list [pattern]                  list mailboxes</div><div class='del'>-select [mailbox]                select mailbox</div><div class='del'>-close                           close mailbox</div><div class='del'>-summary                         display summary</div><div class='del'>-fetch [msgno]                   display message</div><div class='del'>-logout                          logout</div><div class='del'>-help, ?                         display help message</div><div class='del'>-EOF</div><div class='del'>-        else</div><div class='del'>-          print "unknown command: ", cmd, "\n"</div><div class='del'>-        end</div><div class='del'>-      rescue Net::IMAP::Error</div><div class='del'>-        puts $!</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  ensure</div><div class='del'>-    imap.logout</div><div class='del'>-    imap.disconnect</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/net/pop.rb b/lib/net/pop.rb<br/>deleted file mode 100644<br/>index 82cc9a747b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/net/pop.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/pop.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,999 +0,0 @@</div><div class='del'>-# = net/pop.rb</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 1999-2007 Yukihiro Matsumoto.</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 1999-2007 Minero Aoki.</div><div class='del'>-# </div><div class='del'>-# Written &amp; maintained by Minero Aoki &lt;aamine@loveruby.net&gt;.</div><div class='del'>-#</div><div class='del'>-# Documented by William Webber and Minero Aoki.</div><div class='del'>-# </div><div class='del'>-# This program is free software. You can re-distribute and/or</div><div class='del'>-# modify this program under the same terms as Ruby itself,</div><div class='del'>-# Ruby Distribute License.</div><div class='del'>-# </div><div class='del'>-# NOTE: You can find Japanese version of this document at:</div><div class='del'>-# http://www.ruby-lang.org/ja/man/html/net_pop.html</div><div class='del'>-# </div><div class='del'>-#   $Id$</div><div class='del'>-# </div><div class='del'>-# See Net::POP3 for documentation.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'net/protocol'</div><div class='del'>-require 'digest/md5'</div><div class='del'>-require 'timeout'</div><div class='del'>-</div><div class='del'>-begin</div><div class='del'>-  require "openssl/ssl"</div><div class='del'>-rescue LoadError</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Net</div><div class='del'>-</div><div class='del'>-  # Non-authentication POP3 protocol error</div><div class='del'>-  # (reply code "-ERR", except authentication).</div><div class='del'>-  class POPError &lt; ProtocolError; end</div><div class='del'>-</div><div class='del'>-  # POP3 authentication error.</div><div class='del'>-  class POPAuthenticationError &lt; ProtoAuthError; end</div><div class='del'>-</div><div class='del'>-  # Unexpected response from the server.</div><div class='del'>-  class POPBadResponse &lt; POPError; end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # = Net::POP3</div><div class='del'>-  #</div><div class='del'>-  # == What is This Library?</div><div class='del'>-  # </div><div class='del'>-  # This library provides functionality for retrieving </div><div class='del'>-  # email via POP3, the Post Office Protocol version 3. For details</div><div class='del'>-  # of POP3, see [RFC1939] (http://www.ietf.org/rfc/rfc1939.txt).</div><div class='del'>-  # </div><div class='del'>-  # == Examples</div><div class='del'>-  # </div><div class='del'>-  # === Retrieving Messages </div><div class='del'>-  # </div><div class='del'>-  # This example retrieves messages from the server and deletes them </div><div class='del'>-  # on the server.</div><div class='del'>-  #</div><div class='del'>-  # Messages are written to files named 'inbox/1', 'inbox/2', ....</div><div class='del'>-  # Replace 'pop.example.com' with your POP3 server address, and</div><div class='del'>-  # 'YourAccount' and 'YourPassword' with the appropriate account</div><div class='del'>-  # details.</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/pop'</div><div class='del'>-  # </div><div class='del'>-  #     pop = Net::POP3.new('pop.example.com')</div><div class='del'>-  #     pop.start('YourAccount', 'YourPassword')             # (1)</div><div class='del'>-  #     if pop.mails.empty?</div><div class='del'>-  #       puts 'No mail.'</div><div class='del'>-  #     else</div><div class='del'>-  #       i = 0</div><div class='del'>-  #       pop.each_mail do |m|   # or "pop.mails.each ..."   # (2)</div><div class='del'>-  #         File.open("inbox/#{i}", 'w') do |f|</div><div class='del'>-  #           f.write m.pop</div><div class='del'>-  #         end</div><div class='del'>-  #         m.delete</div><div class='del'>-  #         i += 1</div><div class='del'>-  #       end</div><div class='del'>-  #       puts "#{pop.mails.size} mails popped."</div><div class='del'>-  #     end</div><div class='del'>-  #     pop.finish                                           # (3)</div><div class='del'>-  # </div><div class='del'>-  # 1. Call Net::POP3#start and start POP session.</div><div class='del'>-  # 2. Access messages by using POP3#each_mail and/or POP3#mails.</div><div class='del'>-  # 3. Close POP session by calling POP3#finish or use the block form of #start.</div><div class='del'>-  # </div><div class='del'>-  # === Shortened Code</div><div class='del'>-  # </div><div class='del'>-  # The example above is very verbose. You can shorten the code by using</div><div class='del'>-  # some utility methods. First, the block form of Net::POP3.start can</div><div class='del'>-  # be used instead of POP3.new, POP3#start and POP3#finish.</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/pop'</div><div class='del'>-  # </div><div class='del'>-  #     Net::POP3.start('pop.example.com', 110,</div><div class='del'>-  #                     'YourAccount', 'YourPassword') do |pop|</div><div class='del'>-  #       if pop.mails.empty?</div><div class='del'>-  #         puts 'No mail.'</div><div class='del'>-  #       else</div><div class='del'>-  #         i = 0</div><div class='del'>-  #         pop.each_mail do |m|   # or "pop.mails.each ..."</div><div class='del'>-  #           File.open("inbox/#{i}", 'w') do |f|</div><div class='del'>-  #             f.write m.pop</div><div class='del'>-  #           end</div><div class='del'>-  #           m.delete</div><div class='del'>-  #           i += 1</div><div class='del'>-  #         end</div><div class='del'>-  #         puts "#{pop.mails.size} mails popped."</div><div class='del'>-  #       end</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # POP3#delete_all is an alternative for #each_mail and #delete.</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/pop'</div><div class='del'>-  # </div><div class='del'>-  #     Net::POP3.start('pop.example.com', 110,</div><div class='del'>-  #                     'YourAccount', 'YourPassword') do |pop|</div><div class='del'>-  #       if pop.mails.empty?</div><div class='del'>-  #         puts 'No mail.'</div><div class='del'>-  #       else</div><div class='del'>-  #         i = 1</div><div class='del'>-  #         pop.delete_all do |m|</div><div class='del'>-  #           File.open("inbox/#{i}", 'w') do |f|</div><div class='del'>-  #             f.write m.pop</div><div class='del'>-  #           end</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'>-  # And here is an even shorter example.</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/pop'</div><div class='del'>-  # </div><div class='del'>-  #     i = 0</div><div class='del'>-  #     Net::POP3.delete_all('pop.example.com', 110,</div><div class='del'>-  #                          'YourAccount', 'YourPassword') do |m|</div><div class='del'>-  #       File.open("inbox/#{i}", 'w') do |f|</div><div class='del'>-  #         f.write m.pop</div><div class='del'>-  #       end</div><div class='del'>-  #       i += 1</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # === Memory Space Issues</div><div class='del'>-  # </div><div class='del'>-  # All the examples above get each message as one big string.</div><div class='del'>-  # This example avoids this.</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/pop'</div><div class='del'>-  # </div><div class='del'>-  #     i = 1</div><div class='del'>-  #     Net::POP3.delete_all('pop.example.com', 110,</div><div class='del'>-  #                          'YourAccount', 'YourPassword') do |m|</div><div class='del'>-  #       File.open("inbox/#{i}", 'w') do |f|</div><div class='del'>-  #         m.pop do |chunk|    # get a message little by little.</div><div class='del'>-  #           f.write chunk</div><div class='del'>-  #         end</div><div class='del'>-  #         i += 1</div><div class='del'>-  #       end</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # === Using APOP</div><div class='del'>-  # </div><div class='del'>-  # The net/pop library supports APOP authentication.</div><div class='del'>-  # To use APOP, use the Net::APOP class instead of the Net::POP3 class.</div><div class='del'>-  # You can use the utility method, Net::POP3.APOP(). For example:</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/pop'</div><div class='del'>-  # </div><div class='del'>-  #     # Use APOP authentication if $isapop == true</div><div class='del'>-  #     pop = Net::POP3.APOP($is_apop).new('apop.example.com', 110)</div><div class='del'>-  #     pop.start(YourAccount', 'YourPassword') do |pop|</div><div class='del'>-  #       # Rest of the code is the same.</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # === Fetch Only Selected Mail Using 'UIDL' POP Command</div><div class='del'>-  # </div><div class='del'>-  # If your POP server provides UIDL functionality,</div><div class='del'>-  # you can grab only selected mails from the POP server.</div><div class='del'>-  # e.g.</div><div class='del'>-  # </div><div class='del'>-  #     def need_pop?( id )</div><div class='del'>-  #       # determine if we need pop this mail...</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  #     Net::POP3.start('pop.example.com', 110,</div><div class='del'>-  #                     'Your account', 'Your password') do |pop|</div><div class='del'>-  #       pop.mails.select { |m| need_pop?(m.unique_id) }.each do |m|</div><div class='del'>-  #         do_something(m.pop)</div><div class='del'>-  #       end</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # The POPMail#unique_id() method returns the unique-id of the message as a</div><div class='del'>-  # String. Normally the unique-id is a hash of the message.</div><div class='del'>-  # </div><div class='del'>-  class POP3 &lt; Protocol</div><div class='del'>-</div><div class='del'>-    Revision = %q$Revision$.split[1]</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Class Parameters</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def POP3.default_port</div><div class='del'>-      default_pop3_port()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The default port for POP3 connections, port 110</div><div class='del'>-    def POP3.default_pop3_port</div><div class='del'>-      110</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # The default port for POP3S connections, port 995</div><div class='del'>-    def POP3.default_pop3s_port</div><div class='del'>-      995</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def POP3.socket_type   #:nodoc: obsolete</div><div class='del'>-      Net::InternetMessageIO</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Utilities</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    # Returns the APOP class if +isapop+ is true; otherwise, returns</div><div class='del'>-    # the POP class.  For example:</div><div class='del'>-    #</div><div class='del'>-    #     # Example 1</div><div class='del'>-    #     pop = Net::POP3::APOP($is_apop).new(addr, port)</div><div class='del'>-    #</div><div class='del'>-    #     # Example 2</div><div class='del'>-    #     Net::POP3::APOP($is_apop).start(addr, port) do |pop|</div><div class='del'>-    #       ....</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    def POP3.APOP(isapop)</div><div class='del'>-      isapop ? APOP : POP3</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Starts a POP3 session and iterates over each POPMail object,</div><div class='del'>-    # yielding it to the +block+.</div><div class='del'>-    # This method is equivalent to:</div><div class='del'>-    #</div><div class='del'>-    #     Net::POP3.start(address, port, account, password) do |pop|</div><div class='del'>-    #       pop.each_mail do |m|</div><div class='del'>-    #         yield m</div><div class='del'>-    #       end</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPAuthenticationError if authentication fails.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #     Net::POP3.foreach('pop.example.com', 110,</div><div class='del'>-    #                       'YourAccount', 'YourPassword') do |m|</div><div class='del'>-    #       file.write m.pop</div><div class='del'>-    #       m.delete if $DELETE</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    def POP3.foreach(address, port = nil,</div><div class='del'>-                     account = nil, password = nil,</div><div class='del'>-                     isapop = false, &amp;block)  # :yields: message</div><div class='del'>-      start(address, port, account, password, isapop) {|pop|</div><div class='del'>-        pop.each_mail(&amp;block)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Starts a POP3 session and deletes all messages on the server.</div><div class='del'>-    # If a block is given, each POPMail object is yielded to it before</div><div class='del'>-    # being deleted.</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPAuthenticationError if authentication fails.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #     Net::POP3.delete_all('pop.example.com', 110,</div><div class='del'>-    #                          'YourAccount', 'YourPassword') do |m|</div><div class='del'>-    #       file.write m.pop</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    def POP3.delete_all(address, port = nil,</div><div class='del'>-                        account = nil, password = nil,</div><div class='del'>-                        isapop = false, &amp;block)</div><div class='del'>-      start(address, port, account, password, isapop) {|pop|</div><div class='del'>-        pop.delete_all(&amp;block)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Opens a POP3 session, attempts authentication, and quits.</div><div class='del'>-    #</div><div class='del'>-    # This method raises POPAuthenticationError if authentication fails.</div><div class='del'>-    #</div><div class='del'>-    # === Example: normal POP3</div><div class='del'>-    #</div><div class='del'>-    #     Net::POP3.auth_only('pop.example.com', 110,</div><div class='del'>-    #                         'YourAccount', 'YourPassword')</div><div class='del'>-    #</div><div class='del'>-    # === Example: APOP</div><div class='del'>-    #</div><div class='del'>-    #     Net::POP3.auth_only('pop.example.com', 110,</div><div class='del'>-    #                         'YourAccount', 'YourPassword', true)</div><div class='del'>-    #</div><div class='del'>-    def POP3.auth_only(address, port = nil,</div><div class='del'>-                       account = nil, password = nil,</div><div class='del'>-                       isapop = false)</div><div class='del'>-      new(address, port, isapop).auth_only account, password</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Starts a pop3 session, attempts authentication, and quits.</div><div class='del'>-    # This method must not be called while POP3 session is opened.</div><div class='del'>-    # This method raises POPAuthenticationError if authentication fails.</div><div class='del'>-    def auth_only(account, password)</div><div class='del'>-      raise IOError, 'opening previously opened POP session' if started?</div><div class='del'>-      start(account, password) {</div><div class='del'>-        ;</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # SSL</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    @ssl_params = nil</div><div class='del'>-</div><div class='del'>-    # call-seq:</div><div class='del'>-    #    Net::POP.enable_ssl(params = {})</div><div class='del'>-    #</div><div class='del'>-    # Enable SSL for all new instances.</div><div class='del'>-    # +params+ is passed to OpenSSL::SSLContext#set_params.</div><div class='del'>-    def POP3.enable_ssl(*args)</div><div class='del'>-      @ssl_params = create_ssl_params(*args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def POP3.create_ssl_params(verify_or_params = {}, certs = nil)</div><div class='del'>-      begin</div><div class='del'>-        params = verify_or_params.to_hash</div><div class='del'>-      rescue NoMethodError</div><div class='del'>-        params = {}</div><div class='del'>-        params[:verify_mode] = verify_or_params</div><div class='del'>-        if certs</div><div class='del'>-          if File.file?(certs)</div><div class='del'>-            params[:ca_file] = certs</div><div class='del'>-          elsif File.directory?(certs)</div><div class='del'>-            params[:ca_path] = certs</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return params</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Disable SSL for all new instances.</div><div class='del'>-    def POP3.disable_ssl</div><div class='del'>-      @ssl_params = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def POP3.ssl_params</div><div class='del'>-      return @ssl_params</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def POP3.use_ssl?</div><div class='del'>-      return !@ssl_params.nil?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def POP3.verify</div><div class='del'>-      return @ssl_params[:verify_mode]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def POP3.certs</div><div class='del'>-      return @ssl_params[:ca_file] || @ssl_params[:ca_path]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Session management</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    # Creates a new POP3 object and open the connection.  Equivalent to </div><div class='del'>-    #</div><div class='del'>-    #   Net::POP3.new(address, port, isapop).start(account, password)</div><div class='del'>-    #</div><div class='del'>-    # If +block+ is provided, yields the newly-opened POP3 object to it,</div><div class='del'>-    # and automatically closes it at the end of the session.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #    Net::POP3.start(addr, port, account, password) do |pop|</div><div class='del'>-    #      pop.each_mail do |m|</div><div class='del'>-    #        file.write m.pop</div><div class='del'>-    #        m.delete</div><div class='del'>-    #      end</div><div class='del'>-    #    end</div><div class='del'>-    #</div><div class='del'>-    def POP3.start(address, port = nil,</div><div class='del'>-                   account = nil, password = nil,</div><div class='del'>-                   isapop = false, &amp;block)   # :yield: pop</div><div class='del'>-      new(address, port, isapop).start(account, password, &amp;block)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Creates a new POP3 object.</div><div class='del'>-    #</div><div class='del'>-    # +address+ is the hostname or ip address of your POP3 server.</div><div class='del'>-    #</div><div class='del'>-    # The optional +port+ is the port to connect to.</div><div class='del'>-    #</div><div class='del'>-    # The optional +isapop+ specifies whether this connection is going</div><div class='del'>-    # to use APOP authentication; it defaults to +false+.</div><div class='del'>-    #</div><div class='del'>-    # This method does *not* open the TCP connection.</div><div class='del'>-    def initialize(addr, port = nil, isapop = false)</div><div class='del'>-      @address = addr</div><div class='del'>-      @ssl_params = POP3.ssl_params</div><div class='del'>-      @port = port</div><div class='del'>-      @apop = isapop</div><div class='del'>-      </div><div class='del'>-      @command = nil</div><div class='del'>-      @socket = nil</div><div class='del'>-      @started = false</div><div class='del'>-      @open_timeout = 30</div><div class='del'>-      @read_timeout = 60</div><div class='del'>-      @debug_output = nil</div><div class='del'>-</div><div class='del'>-      @mails = nil</div><div class='del'>-      @n_mails = nil</div><div class='del'>-      @n_bytes = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Does this instance use APOP authentication?</div><div class='del'>-    def apop?</div><div class='del'>-      @apop</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # does this instance use SSL?</div><div class='del'>-    def use_ssl?</div><div class='del'>-      return !@ssl_params.nil?</div><div class='del'>-    end</div><div class='del'>-   </div><div class='del'>-    # call-seq:</div><div class='del'>-    #    Net::POP#enable_ssl(params = {})</div><div class='del'>-    #</div><div class='del'>-    # Enables SSL for this instance.  Must be called before the connection is</div><div class='del'>-    # established to have any effect.</div><div class='del'>-    # +params[:port]+ is port to establish the SSL connection on; Defaults to 995.</div><div class='del'>-    # +params+ (except :port) is passed to OpenSSL::SSLContext#set_params.</div><div class='del'>-    def enable_ssl(verify_or_params = {}, certs = nil, port = nil)</div><div class='del'>-      begin</div><div class='del'>-        @ssl_params = verify_or_params.to_hash.dup</div><div class='del'>-        @port = @ssl_params.delete(:port) || @port</div><div class='del'>-      rescue NoMethodError</div><div class='del'>-        @ssl_params = POP3.create_ssl_params(verify_or_params, certs)</div><div class='del'>-        @port = port || @port</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def disable_ssl</div><div class='del'>-      @ssl_params = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Provide human-readable stringification of class state.</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class} #{@address}:#{@port} open=#{@started}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # *WARNING*: This method causes a serious security hole.</div><div class='del'>-    # Use this method only for debugging.</div><div class='del'>-    #</div><div class='del'>-    # Set an output stream for debugging.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #   pop = Net::POP.new(addr, port)</div><div class='del'>-    #   pop.set_debug_output $stderr</div><div class='del'>-    #   pop.start(account, passwd) do |pop|</div><div class='del'>-    #     ....</div><div class='del'>-    #   end</div><div class='del'>-    #</div><div class='del'>-    def set_debug_output(arg)</div><div class='del'>-      @debug_output = arg</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The address to connect to.</div><div class='del'>-    attr_reader :address</div><div class='del'>-</div><div class='del'>-    # The port number to connect to.</div><div class='del'>-    def port</div><div class='del'>-      return @port || (use_ssl? ? POP3.default_pop3s_port : POP3.default_pop3_port)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Seconds to wait until a connection is opened.</div><div class='del'>-    # If the POP3 object cannot open a connection within this time,</div><div class='del'>-    # it raises a TimeoutError exception.</div><div class='del'>-    attr_accessor :open_timeout</div><div class='del'>-</div><div class='del'>-    # Seconds to wait until reading one block (by one read(1) call).</div><div class='del'>-    # If the POP3 object cannot complete a read() within this time,</div><div class='del'>-    # it raises a TimeoutError exception.</div><div class='del'>-    attr_reader :read_timeout</div><div class='del'>-</div><div class='del'>-    # Set the read timeout.</div><div class='del'>-    def read_timeout=(sec)</div><div class='del'>-      @command.socket.read_timeout = sec if @command</div><div class='del'>-      @read_timeout = sec</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # +true+ if the POP3 session has started.</div><div class='del'>-    def started?</div><div class='del'>-      @started</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias active? started?   #:nodoc: obsolete</div><div class='del'>-</div><div class='del'>-    # Starts a POP3 session.</div><div class='del'>-    #</div><div class='del'>-    # When called with block, gives a POP3 object to the block and</div><div class='del'>-    # closes the session after block call finishes.</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPAuthenticationError if authentication fails.</div><div class='del'>-    def start(account, password) # :yield: pop</div><div class='del'>-      raise IOError, 'POP session already started' if @started</div><div class='del'>-      if block_given?</div><div class='del'>-        begin</div><div class='del'>-          do_start account, password</div><div class='del'>-          return yield(self)</div><div class='del'>-        ensure</div><div class='del'>-          do_finish</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        do_start account, password</div><div class='del'>-        return self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def do_start(account, password)</div><div class='del'>-      s = timeout(@open_timeout) { TCPSocket.open(@address, port) }</div><div class='del'>-      if use_ssl?</div><div class='del'>-        raise 'openssl library not installed' unless defined?(OpenSSL)</div><div class='del'>-        context = OpenSSL::SSL::SSLContext.new</div><div class='del'>-        context.set_params(@ssl_params)</div><div class='del'>-        s = OpenSSL::SSL::SSLSocket.new(s, context)</div><div class='del'>-        s.sync_close = true</div><div class='del'>-        s.connect</div><div class='del'>-        if context.verify_mode != OpenSSL::SSL::VERIFY_NONE</div><div class='del'>-          s.post_connection_check(@address)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      @socket = InternetMessageIO.new(s)</div><div class='del'>-      logging "POP session started: #{@address}:#{@port} (#{@apop ? 'APOP' : 'POP'})"</div><div class='del'>-      @socket.read_timeout = @read_timeout</div><div class='del'>-      @socket.debug_output = @debug_output</div><div class='del'>-      on_connect</div><div class='del'>-      @command = POP3Command.new(@socket)</div><div class='del'>-      if apop?</div><div class='del'>-        @command.apop account, password</div><div class='del'>-      else</div><div class='del'>-        @command.auth account, password</div><div class='del'>-      end</div><div class='del'>-      @started = true</div><div class='del'>-    ensure</div><div class='del'>-      # Authentication failed, clean up connection.</div><div class='del'>-      unless @started</div><div class='del'>-        s.close if s and not s.closed?</div><div class='del'>-        @socket = nil</div><div class='del'>-        @command = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    private :do_start</div><div class='del'>-</div><div class='del'>-    def on_connect</div><div class='del'>-    end</div><div class='del'>-    private :on_connect</div><div class='del'>-</div><div class='del'>-    # Finishes a POP3 session and closes TCP connection.</div><div class='del'>-    def finish</div><div class='del'>-      raise IOError, 'POP session not yet started' unless started?</div><div class='del'>-      do_finish</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def do_finish</div><div class='del'>-      @mails = nil</div><div class='del'>-      @n_mails = nil</div><div class='del'>-      @n_bytes = nil</div><div class='del'>-      @command.quit if @command</div><div class='del'>-    ensure</div><div class='del'>-      @started = false</div><div class='del'>-      @command = nil</div><div class='del'>-      @socket.close if @socket and not @socket.closed?</div><div class='del'>-      @socket = nil</div><div class='del'>-    end</div><div class='del'>-    private :do_finish</div><div class='del'>-</div><div class='del'>-    def command</div><div class='del'>-      raise IOError, 'POP session not opened yet' \</div><div class='del'>-                                      if not @socket or @socket.closed?</div><div class='del'>-      @command</div><div class='del'>-    end</div><div class='del'>-    private :command</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # POP protocol wrapper</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    # Returns the number of messages on the POP server.</div><div class='del'>-    def n_mails</div><div class='del'>-      return @n_mails if @n_mails</div><div class='del'>-      @n_mails, @n_bytes = command().stat</div><div class='del'>-      @n_mails</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the total size in bytes of all the messages on the POP server.</div><div class='del'>-    def n_bytes</div><div class='del'>-      return @n_bytes if @n_bytes</div><div class='del'>-      @n_mails, @n_bytes = command().stat</div><div class='del'>-      @n_bytes</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns an array of Net::POPMail objects, representing all the</div><div class='del'>-    # messages on the server.  This array is renewed when the session</div><div class='del'>-    # restarts; otherwise, it is fetched from the server the first time</div><div class='del'>-    # this method is called (directly or indirectly) and cached.</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    def mails</div><div class='del'>-      return @mails.dup if @mails</div><div class='del'>-      if n_mails() == 0</div><div class='del'>-        # some popd raises error for LIST on the empty mailbox.</div><div class='del'>-        @mails = []</div><div class='del'>-        return []</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @mails = command().list.map {|num, size|</div><div class='del'>-        POPMail.new(num, size, self, command())</div><div class='del'>-      }</div><div class='del'>-      @mails.dup</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Yields each message to the passed-in block in turn.</div><div class='del'>-    # Equivalent to:</div><div class='del'>-    # </div><div class='del'>-    #   pop3.mails.each do |popmail|</div><div class='del'>-    #     ....</div><div class='del'>-    #   end</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    def each_mail(&amp;block)  # :yield: message</div><div class='del'>-      mails().each(&amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias each each_mail</div><div class='del'>-</div><div class='del'>-    # Deletes all messages on the server.</div><div class='del'>-    #</div><div class='del'>-    # If called with a block, yields each message in turn before deleting it.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #     n = 1</div><div class='del'>-    #     pop.delete_all do |m|</div><div class='del'>-    #       File.open("inbox/#{n}") do |f|</div><div class='del'>-    #         f.write m.pop</div><div class='del'>-    #       end</div><div class='del'>-    #       n += 1</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    #</div><div class='del'>-    def delete_all # :yield: message</div><div class='del'>-      mails().each do |m|</div><div class='del'>-        yield m if block_given?</div><div class='del'>-        m.delete unless m.deleted?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Resets the session.  This clears all "deleted" marks from messages.</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    def reset</div><div class='del'>-      command().rset</div><div class='del'>-      mails().each do |m|</div><div class='del'>-        m.instance_eval {</div><div class='del'>-          @deleted = false</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def set_all_uids   #:nodoc: internal use only (called from POPMail#uidl)</div><div class='del'>-      command().uidl.each do |num, uid|</div><div class='del'>-        @mails.find {|m| m.number == num }.uid = uid</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def logging(msg)</div><div class='del'>-      @debug_output &lt;&lt; msg + "\n" if @debug_output</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end   # class POP3</div><div class='del'>-</div><div class='del'>-  # class aliases</div><div class='del'>-  POP = POP3</div><div class='del'>-  POPSession  = POP3</div><div class='del'>-  POP3Session = POP3</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This class is equivalent to POP3, except that it uses APOP authentication.</div><div class='del'>-  #</div><div class='del'>-  class APOP &lt; POP3</div><div class='del'>-    # Always returns true.</div><div class='del'>-    def apop?</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # class aliases</div><div class='del'>-  APOPSession = APOP</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This class represents a message which exists on the POP server.</div><div class='del'>-  # Instances of this class are created by the POP3 class; they should</div><div class='del'>-  # not be directly created by the user.</div><div class='del'>-  #</div><div class='del'>-  class POPMail</div><div class='del'>-</div><div class='del'>-    def initialize(num, len, pop, cmd)   #:nodoc:</div><div class='del'>-      @number = num</div><div class='del'>-      @length = len</div><div class='del'>-      @pop = pop</div><div class='del'>-      @command = cmd</div><div class='del'>-      @deleted = false</div><div class='del'>-      @uid = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The sequence number of the message on the server.</div><div class='del'>-    attr_reader :number</div><div class='del'>-</div><div class='del'>-    # The length of the message in octets.</div><div class='del'>-    attr_reader :length</div><div class='del'>-    alias size length</div><div class='del'>-</div><div class='del'>-    # Provide human-readable stringification of class state.</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class} #{@number}#{@deleted ? ' deleted' : ''}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # This method fetches the message.  If called with a block, the</div><div class='del'>-    # message is yielded to the block one chunk at a time.  If called</div><div class='del'>-    # without a block, the message is returned as a String.  The optional </div><div class='del'>-    # +dest+ argument will be prepended to the returned String; this</div><div class='del'>-    # argument is essentially obsolete.</div><div class='del'>-    #</div><div class='del'>-    # === Example without block</div><div class='del'>-    #</div><div class='del'>-    #     POP3.start('pop.example.com', 110,</div><div class='del'>-    #                'YourAccount, 'YourPassword') do |pop|</div><div class='del'>-    #       n = 1</div><div class='del'>-    #       pop.mails.each do |popmail|</div><div class='del'>-    #         File.open("inbox/#{n}", 'w') do |f|</div><div class='del'>-    #           f.write popmail.pop              </div><div class='del'>-    #         end</div><div class='del'>-    #         popmail.delete</div><div class='del'>-    #         n += 1</div><div class='del'>-    #       end</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    # === Example with block</div><div class='del'>-    #</div><div class='del'>-    #     POP3.start('pop.example.com', 110,</div><div class='del'>-    #                'YourAccount, 'YourPassword') do |pop|</div><div class='del'>-    #       n = 1</div><div class='del'>-    #       pop.mails.each do |popmail|</div><div class='del'>-    #         File.open("inbox/#{n}", 'w') do |f|</div><div class='del'>-    #           popmail.pop do |chunk|            ####</div><div class='del'>-    #             f.write chunk</div><div class='del'>-    #           end</div><div class='del'>-    #         end</div><div class='del'>-    #         n += 1</div><div class='del'>-    #       end</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    #</div><div class='del'>-    def pop( dest = '', &amp;block ) # :yield: message_chunk</div><div class='del'>-      if block_given?</div><div class='del'>-        @command.retr(@number, &amp;block)</div><div class='del'>-        nil</div><div class='del'>-      else</div><div class='del'>-        @command.retr(@number) do |chunk|</div><div class='del'>-          dest &lt;&lt; chunk</div><div class='del'>-        end</div><div class='del'>-        dest</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias all pop    #:nodoc: obsolete</div><div class='del'>-    alias mail pop   #:nodoc: obsolete</div><div class='del'>-</div><div class='del'>-    # Fetches the message header and +lines+ lines of body. </div><div class='del'>-    #</div><div class='del'>-    # The optional +dest+ argument is obsolete.</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    def top(lines, dest = '')</div><div class='del'>-      @command.top(@number, lines) do |chunk|</div><div class='del'>-        dest &lt;&lt; chunk</div><div class='del'>-      end</div><div class='del'>-      dest</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Fetches the message header.     </div><div class='del'>-    #</div><div class='del'>-    # The optional +dest+ argument is obsolete.</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    def header(dest = '')</div><div class='del'>-      top(0, dest)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Marks a message for deletion on the server.  Deletion does not</div><div class='del'>-    # actually occur until the end of the session; deletion may be</div><div class='del'>-    # cancelled for _all_ marked messages by calling POP3#reset().</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #     POP3.start('pop.example.com', 110,</div><div class='del'>-    #                'YourAccount, 'YourPassword') do |pop|</div><div class='del'>-    #       n = 1</div><div class='del'>-    #       pop.mails.each do |popmail|</div><div class='del'>-    #         File.open("inbox/#{n}", 'w') do |f|</div><div class='del'>-    #           f.write popmail.pop</div><div class='del'>-    #         end</div><div class='del'>-    #         popmail.delete         ####</div><div class='del'>-    #         n += 1</div><div class='del'>-    #       end</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    def delete</div><div class='del'>-      @command.dele @number</div><div class='del'>-      @deleted = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias delete! delete    #:nodoc: obsolete</div><div class='del'>-</div><div class='del'>-    # True if the mail has been deleted.</div><div class='del'>-    def deleted?</div><div class='del'>-      @deleted</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the unique-id of the message.</div><div class='del'>-    # Normally the unique-id is a hash string of the message.</div><div class='del'>-    #</div><div class='del'>-    # This method raises a POPError if an error occurs.</div><div class='del'>-    def unique_id</div><div class='del'>-      return @uid if @uid</div><div class='del'>-      @pop.set_all_uids</div><div class='del'>-      @uid</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias uidl unique_id</div><div class='del'>-</div><div class='del'>-    def uid=(uid)   #:nodoc: internal use only</div><div class='del'>-      @uid = uid</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end   # class POPMail</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class POP3Command   #:nodoc: internal use only</div><div class='del'>-</div><div class='del'>-    def initialize(sock)</div><div class='del'>-      @socket = sock</div><div class='del'>-      @error_occured = false</div><div class='del'>-      res = check_response(critical { recv_response() })</div><div class='del'>-      @apop_stamp = res.slice(/&lt;.+&gt;/)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class} socket=#{@socket}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def auth(account, password)</div><div class='del'>-      check_response_auth(critical {</div><div class='del'>-        check_response_auth(get_response('USER %s', account))</div><div class='del'>-        get_response('PASS %s', password)</div><div class='del'>-      })</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def apop(account, password)</div><div class='del'>-      raise POPAuthenticationError, 'not APOP server; cannot login' \</div><div class='del'>-                                                      unless @apop_stamp</div><div class='del'>-      check_response_auth(critical {</div><div class='del'>-        get_response('APOP %s %s',</div><div class='del'>-                     account,</div><div class='del'>-                     Digest::MD5.hexdigest(@apop_stamp + password))</div><div class='del'>-      })</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def list</div><div class='del'>-      critical {</div><div class='del'>-        getok 'LIST'</div><div class='del'>-        list = []</div><div class='del'>-        @socket.each_list_item do |line|</div><div class='del'>-          m = /\A(\d+)[ \t]+(\d+)/.match(line) or</div><div class='del'>-                  raise POPBadResponse, "bad response: #{line}"</div><div class='del'>-          list.push  [m[1].to_i, m[2].to_i]</div><div class='del'>-        end</div><div class='del'>-        return list</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def stat</div><div class='del'>-      res = check_response(critical { get_response('STAT') })</div><div class='del'>-      m = /\A\+OK\s+(\d+)\s+(\d+)/.match(res) or</div><div class='del'>-              raise POPBadResponse, "wrong response format: #{res}"</div><div class='del'>-      [m[1].to_i, m[2].to_i]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def rset</div><div class='del'>-      check_response(critical { get_response('RSET') })</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def top(num, lines = 0, &amp;block)</div><div class='del'>-      critical {</div><div class='del'>-        getok('TOP %d %d', num, lines)</div><div class='del'>-        @socket.each_message_chunk(&amp;block)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def retr(num, &amp;block)</div><div class='del'>-      critical {</div><div class='del'>-        getok('RETR %d', num)</div><div class='del'>-        @socket.each_message_chunk(&amp;block)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def dele(num)</div><div class='del'>-      check_response(critical { get_response('DELE %d', num) })</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def uidl(num = nil)</div><div class='del'>-      if num</div><div class='del'>-        res = check_response(critical { get_response('UIDL %d', num) })</div><div class='del'>-        return res.split(/ /)[1]</div><div class='del'>-      else</div><div class='del'>-        critical {</div><div class='del'>-          getok('UIDL')</div><div class='del'>-          table = {}</div><div class='del'>-          @socket.each_list_item do |line|</div><div class='del'>-            num, uid = line.split</div><div class='del'>-            table[num.to_i] = uid</div><div class='del'>-          end</div><div class='del'>-          return table</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def quit</div><div class='del'>-      check_response(critical { get_response('QUIT') })</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def getok(fmt, *fargs)</div><div class='del'>-      @socket.writeline sprintf(fmt, *fargs)</div><div class='del'>-      check_response(recv_response())</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_response(fmt, *fargs)</div><div class='del'>-      @socket.writeline sprintf(fmt, *fargs)</div><div class='del'>-      recv_response()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def recv_response</div><div class='del'>-      @socket.readline</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_response(res)</div><div class='del'>-      raise POPError, res unless /\A\+OK/i =~ res</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_response_auth(res)</div><div class='del'>-      raise POPAuthenticationError, res unless /\A\+OK/i =~ res</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def critical</div><div class='del'>-      return '+OK dummy ok response' if @error_occured</div><div class='del'>-      begin</div><div class='del'>-        return yield()</div><div class='del'>-      rescue Exception</div><div class='del'>-        @error_occured = true</div><div class='del'>-        raise</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end   # class POP3Command</div><div class='del'>-</div><div class='del'>-end   # module Net</div><div class='head'>diff --git a/lib/net/protocol.rb b/lib/net/protocol.rb<br/>deleted file mode 100644<br/>index dc23c14dfa..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/net/protocol.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/protocol.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,392 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = net/protocol.rb</div><div class='del'>-#</div><div class='del'>-#--</div><div class='del'>-# Copyright (c) 1999-2005 Yukihiro Matsumoto</div><div class='del'>-# Copyright (c) 1999-2005 Minero Aoki</div><div class='del'>-#</div><div class='del'>-# written and maintained by Minero Aoki &lt;aamine@loveruby.net&gt;</div><div class='del'>-#</div><div class='del'>-# This program is free software. You can re-distribute and/or</div><div class='del'>-# modify this program under the same terms as Ruby itself,</div><div class='del'>-# Ruby Distribute License or GNU General Public License.</div><div class='del'>-#</div><div class='del'>-# $Id$</div><div class='del'>-#++</div><div class='del'>-#</div><div class='del'>-# WARNING: This file is going to remove.</div><div class='del'>-# Do not rely on the implementation written in this file.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'socket'</div><div class='del'>-require 'timeout'</div><div class='del'>-</div><div class='del'>-module Net # :nodoc:</div><div class='del'>-</div><div class='del'>-  class Protocol   #:nodoc: internal use only</div><div class='del'>-    private</div><div class='del'>-    def Protocol.protocol_param(name, val)</div><div class='del'>-      module_eval(&lt;&lt;-End, __FILE__, __LINE__ + 1)</div><div class='del'>-        def #{name}</div><div class='del'>-          #{val}</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 ProtocolError          &lt; StandardError; end</div><div class='del'>-  class ProtoSyntaxError       &lt; ProtocolError; end</div><div class='del'>-  class ProtoFatalError        &lt; ProtocolError; end</div><div class='del'>-  class ProtoUnknownError      &lt; ProtocolError; end</div><div class='del'>-  class ProtoServerError       &lt; ProtocolError; end</div><div class='del'>-  class ProtoAuthError         &lt; ProtocolError; end</div><div class='del'>-  class ProtoCommandError      &lt; ProtocolError; end</div><div class='del'>-  class ProtoRetriableError    &lt; ProtocolError; end</div><div class='del'>-  ProtocRetryError = ProtoRetriableError</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class BufferedIO   #:nodoc: internal use only</div><div class='del'>-    def initialize(io)</div><div class='del'>-      @io = io</div><div class='del'>-      @read_timeout = 60</div><div class='del'>-      @debug_output = nil</div><div class='del'>-      @rbuf = ''</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :io</div><div class='del'>-    attr_accessor :read_timeout</div><div class='del'>-    attr_accessor :debug_output</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class} io=#{@io}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def closed?</div><div class='del'>-      @io.closed?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def close</div><div class='del'>-      @io.close</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Read</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-</div><div class='del'>-    def read(len, dest = '', ignore_eof = false)</div><div class='del'>-      LOG "reading #{len} bytes..."</div><div class='del'>-      read_bytes = 0</div><div class='del'>-      begin</div><div class='del'>-        while read_bytes + @rbuf.size &lt; len</div><div class='del'>-          dest &lt;&lt; (s = rbuf_consume(@rbuf.size))</div><div class='del'>-          read_bytes += s.size</div><div class='del'>-          rbuf_fill</div><div class='del'>-        end</div><div class='del'>-        dest &lt;&lt; (s = rbuf_consume(len - read_bytes))</div><div class='del'>-        read_bytes += s.size</div><div class='del'>-      rescue EOFError</div><div class='del'>-        raise unless ignore_eof</div><div class='del'>-      end</div><div class='del'>-      LOG "read #{read_bytes} bytes"</div><div class='del'>-      dest</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def read_all(dest = '')</div><div class='del'>-      LOG 'reading all...'</div><div class='del'>-      read_bytes = 0</div><div class='del'>-      begin</div><div class='del'>-        while true</div><div class='del'>-          dest &lt;&lt; (s = rbuf_consume(@rbuf.size))</div><div class='del'>-          read_bytes += s.size</div><div class='del'>-          rbuf_fill</div><div class='del'>-        end</div><div class='del'>-      rescue EOFError</div><div class='del'>-        ;</div><div class='del'>-      end</div><div class='del'>-      LOG "read #{read_bytes} bytes"</div><div class='del'>-      dest</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def readuntil(terminator, ignore_eof = false)</div><div class='del'>-      begin</div><div class='del'>-        until idx = @rbuf.index(terminator)</div><div class='del'>-          rbuf_fill</div><div class='del'>-        end</div><div class='del'>-        return rbuf_consume(idx + terminator.size)</div><div class='del'>-      rescue EOFError</div><div class='del'>-        raise unless ignore_eof</div><div class='del'>-        return rbuf_consume(@rbuf.size)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-        </div><div class='del'>-    def readline</div><div class='del'>-      readuntil("\n").chop</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    BUFSIZE = 1024 * 16</div><div class='del'>-</div><div class='del'>-    def rbuf_fill</div><div class='del'>-      timeout(@read_timeout) {</div><div class='del'>-        @rbuf &lt;&lt; @io.sysread(BUFSIZE)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def rbuf_consume(len)</div><div class='del'>-      s = @rbuf.slice!(0, len)</div><div class='del'>-      @debug_output &lt;&lt; %Q[-&gt; #{s.dump}\n] if @debug_output</div><div class='del'>-      s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Write</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-</div><div class='del'>-    def write(str)</div><div class='del'>-      writing {</div><div class='del'>-        write0 str</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def writeline(str)</div><div class='del'>-      writing {</div><div class='del'>-        write0 str + "\r\n"</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def writing</div><div class='del'>-      @written_bytes = 0</div><div class='del'>-      @debug_output &lt;&lt; '&lt;- ' if @debug_output</div><div class='del'>-      yield</div><div class='del'>-      @debug_output &lt;&lt; "\n" if @debug_output</div><div class='del'>-      bytes = @written_bytes</div><div class='del'>-      @written_bytes = nil</div><div class='del'>-      bytes</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write0(str)</div><div class='del'>-      @debug_output &lt;&lt; str.dump if @debug_output</div><div class='del'>-      len = @io.write(str)</div><div class='del'>-      @written_bytes += len</div><div class='del'>-      len</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Logging</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def LOG_off</div><div class='del'>-      @save_debug_out = @debug_output</div><div class='del'>-      @debug_output = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def LOG_on</div><div class='del'>-      @debug_output = @save_debug_out</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def LOG(msg)</div><div class='del'>-      return unless @debug_output</div><div class='del'>-      @debug_output &lt;&lt; msg + "\n"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class InternetMessageIO &lt; BufferedIO   #:nodoc: internal use only</div><div class='del'>-    def InternetMessageIO.old_open(addr, port,</div><div class='del'>-        open_timeout = nil, read_timeout = nil, debug_output = nil)</div><div class='del'>-      debug_output &lt;&lt; "opening connection to #{addr}...\n" if debug_output</div><div class='del'>-      s = timeout(open_timeout) { TCPsocket.new(addr, port) }</div><div class='del'>-      io = new(s)</div><div class='del'>-      io.read_timeout = read_timeout</div><div class='del'>-      io.debug_output = debug_output</div><div class='del'>-      io</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(io)</div><div class='del'>-      super</div><div class='del'>-      @wbuf = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Read</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def each_message_chunk</div><div class='del'>-      LOG 'reading message...'</div><div class='del'>-      LOG_off()</div><div class='del'>-      read_bytes = 0</div><div class='del'>-      while (line = readuntil("\r\n")) != ".\r\n"</div><div class='del'>-        read_bytes += line.size</div><div class='del'>-        yield line.sub(/\A\./, '')</div><div class='del'>-      end</div><div class='del'>-      LOG_on()</div><div class='del'>-      LOG "read message (#{read_bytes} bytes)"</div><div class='del'>-    end</div><div class='del'>-  </div><div class='del'>-    # *library private* (cannot handle 'break')</div><div class='del'>-    def each_list_item</div><div class='del'>-      while (str = readuntil("\r\n")) != ".\r\n"</div><div class='del'>-        yield str.chop</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write_message_0(src)</div><div class='del'>-      prev = @written_bytes</div><div class='del'>-      each_crlf_line(src) do |line|</div><div class='del'>-        write0 line.sub(/\A\./, '..')</div><div class='del'>-      end</div><div class='del'>-      @written_bytes - prev</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Write</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def write_message(src)</div><div class='del'>-      LOG "writing message from #{src.class}"</div><div class='del'>-      LOG_off()</div><div class='del'>-      len = writing {</div><div class='del'>-        using_each_crlf_line {</div><div class='del'>-          write_message_0 src</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      LOG_on()</div><div class='del'>-      LOG "wrote #{len} bytes"</div><div class='del'>-      len</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write_message_by_block(&amp;block)</div><div class='del'>-      LOG 'writing message from block'</div><div class='del'>-      LOG_off()</div><div class='del'>-      len = writing {</div><div class='del'>-        using_each_crlf_line {</div><div class='del'>-          begin</div><div class='del'>-            block.call(WriteAdapter.new(self, :write_message_0))</div><div class='del'>-          rescue LocalJumpError</div><div class='del'>-            # allow `break' from writer block</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      LOG_on()</div><div class='del'>-      LOG "wrote #{len} bytes"</div><div class='del'>-      len</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def using_each_crlf_line</div><div class='del'>-      @wbuf = ''</div><div class='del'>-      yield</div><div class='del'>-      if not @wbuf.empty?   # unterminated last line</div><div class='del'>-        write0 @wbuf.chomp + "\r\n"</div><div class='del'>-      elsif @written_bytes == 0   # empty src</div><div class='del'>-        write0 "\r\n"</div><div class='del'>-      end</div><div class='del'>-      write0 ".\r\n"</div><div class='del'>-      @wbuf = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def each_crlf_line(src)</div><div class='del'>-      buffer_filling(@wbuf, src) do</div><div class='del'>-        while line = @wbuf.slice!(/\A.*(?:\n|\r\n|\r(?!\z))/n)</div><div class='del'>-          yield line.chomp("\n") + "\r\n"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def buffer_filling(buf, src)</div><div class='del'>-      case src</div><div class='del'>-      when String    # for speeding up.</div><div class='del'>-        0.step(src.size - 1, 1024) do |i|</div><div class='del'>-          buf &lt;&lt; src[i, 1024]</div><div class='del'>-          yield</div><div class='del'>-        end</div><div class='del'>-      when File    # for speeding up.</div><div class='del'>-        while s = src.read(1024)</div><div class='del'>-          buf &lt;&lt; s</div><div class='del'>-          yield</div><div class='del'>-        end</div><div class='del'>-      else    # generic reader</div><div class='del'>-        src.each do |s|</div><div class='del'>-          buf &lt;&lt; s</div><div class='del'>-          yield if buf.size &gt; 1024</div><div class='del'>-        end</div><div class='del'>-        yield unless buf.empty?</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'>-  # The writer adapter class</div><div class='del'>-  #</div><div class='del'>-  class WriteAdapter</div><div class='del'>-    def initialize(socket, method)</div><div class='del'>-      @socket = socket</div><div class='del'>-      @method_id = method</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class} socket=#{@socket.inspect}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write(str)</div><div class='del'>-      @socket.__send__(@method_id, str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias print write</div><div class='del'>-</div><div class='del'>-    def &lt;&lt;(str)</div><div class='del'>-      write str</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def puts(str = '')</div><div class='del'>-      write str.chomp("\n") + "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def printf(*args)</div><div class='del'>-      write sprintf(*args)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class ReadAdapter   #:nodoc: internal use only</div><div class='del'>-    def initialize(block)</div><div class='del'>-      @block = block</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def &lt;&lt;(str)</div><div class='del'>-      call_block(str, &amp;@block) if @block</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    # This method is needed because @block must be called by yield,</div><div class='del'>-    # not Proc#call.  You can see difference when using `break' in</div><div class='del'>-    # the block.</div><div class='del'>-    def call_block(str)</div><div class='del'>-      yield str</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  module NetPrivate   #:nodoc: obsolete</div><div class='del'>-    Socket = ::Net::InternetMessageIO</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end   # module Net</div><div class='head'>diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb<br/>deleted file mode 100644<br/>index 5cce6cc50c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/net/smtp.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/smtp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1014 +0,0 @@</div><div class='del'>-# = net/smtp.rb</div><div class='del'>-# </div><div class='del'>-# Copyright (c) 1999-2007 Yukihiro Matsumoto.</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 1999-2007 Minero Aoki.</div><div class='del'>-# </div><div class='del'>-# Written &amp; maintained by Minero Aoki &lt;aamine@loveruby.net&gt;.</div><div class='del'>-#</div><div class='del'>-# Documented by William Webber and Minero Aoki.</div><div class='del'>-# </div><div class='del'>-# This program is free software. You can re-distribute and/or</div><div class='del'>-# modify this program under the same terms as Ruby itself.</div><div class='del'>-# </div><div class='del'>-# NOTE: You can find Japanese version of this document at:</div><div class='del'>-# http://www.ruby-lang.org/ja/man/html/net_smtp.html</div><div class='del'>-# </div><div class='del'>-# $Id$</div><div class='del'>-#</div><div class='del'>-# See Net::SMTP for documentation. </div><div class='del'>-# </div><div class='del'>-</div><div class='del'>-require 'net/protocol'</div><div class='del'>-require 'digest/md5'</div><div class='del'>-require 'timeout'</div><div class='del'>-begin</div><div class='del'>-  require 'openssl'</div><div class='del'>-rescue LoadError</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Net</div><div class='del'>-</div><div class='del'>-  # Module mixed in to all SMTP error classes</div><div class='del'>-  module SMTPError</div><div class='del'>-    # This *class* is a module for backward compatibility.</div><div class='del'>-    # In later release, this module becomes a class.</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Represents an SMTP authentication error.</div><div class='del'>-  class SMTPAuthenticationError &lt; ProtoAuthError</div><div class='del'>-    include SMTPError</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Represents SMTP error code 420 or 450, a temporary error.</div><div class='del'>-  class SMTPServerBusy &lt; ProtoServerError</div><div class='del'>-    include SMTPError</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Represents an SMTP command syntax error (error code 500)</div><div class='del'>-  class SMTPSyntaxError &lt; ProtoSyntaxError</div><div class='del'>-    include SMTPError</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Represents a fatal SMTP error (error code 5xx, except for 500)</div><div class='del'>-  class SMTPFatalError &lt; ProtoFatalError</div><div class='del'>-    include SMTPError</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Unexpected reply code returned from server.</div><div class='del'>-  class SMTPUnknownError &lt; ProtoUnknownError</div><div class='del'>-    include SMTPError</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Command is not supported on server.</div><div class='del'>-  class SMTPUnsupportedCommand &lt; ProtocolError</div><div class='del'>-    include SMTPError</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # = Net::SMTP</div><div class='del'>-  #</div><div class='del'>-  # == What is This Library?</div><div class='del'>-  # </div><div class='del'>-  # This library provides functionality to send internet</div><div class='del'>-  # mail via SMTP, the Simple Mail Transfer Protocol. For details of</div><div class='del'>-  # SMTP itself, see [RFC2821] (http://www.ietf.org/rfc/rfc2821.txt).</div><div class='del'>-  # </div><div class='del'>-  # == What is This Library NOT?</div><div class='del'>-  # </div><div class='del'>-  # This library does NOT provide functions to compose internet mails.</div><div class='del'>-  # You must create them by yourself. If you want better mail support,</div><div class='del'>-  # try RubyMail or TMail. You can get both libraries from RAA.</div><div class='del'>-  # (http://www.ruby-lang.org/en/raa.html)</div><div class='del'>-  # </div><div class='del'>-  # FYI: the official documentation on internet mail is: [RFC2822] (http://www.ietf.org/rfc/rfc2822.txt).</div><div class='del'>-  # </div><div class='del'>-  # == Examples</div><div class='del'>-  # </div><div class='del'>-  # === Sending Messages</div><div class='del'>-  # </div><div class='del'>-  # You must open a connection to an SMTP server before sending messages.</div><div class='del'>-  # The first argument is the address of your SMTP server, and the second </div><div class='del'>-  # argument is the port number. Using SMTP.start with a block is the simplest </div><div class='del'>-  # way to do this. This way, the SMTP connection is closed automatically </div><div class='del'>-  # after the block is executed.</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/smtp'</div><div class='del'>-  #     Net::SMTP.start('your.smtp.server', 25) do |smtp|</div><div class='del'>-  #       # Use the SMTP object smtp only in this block.</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # Replace 'your.smtp.server' with your SMTP server. Normally</div><div class='del'>-  # your system manager or internet provider supplies a server</div><div class='del'>-  # for you.</div><div class='del'>-  # </div><div class='del'>-  # Then you can send messages.</div><div class='del'>-  # </div><div class='del'>-  #     msgstr = &lt;&lt;END_OF_MESSAGE</div><div class='del'>-  #     From: Your Name &lt;your@mail.address&gt;</div><div class='del'>-  #     To: Destination Address &lt;someone@example.com&gt;</div><div class='del'>-  #     Subject: test message</div><div class='del'>-  #     Date: Sat, 23 Jun 2001 16:26:43 +0900</div><div class='del'>-  #     Message-Id: &lt;unique.message.id.string@example.com&gt;</div><div class='del'>-  # </div><div class='del'>-  #     This is a test message.</div><div class='del'>-  #     END_OF_MESSAGE</div><div class='del'>-  # </div><div class='del'>-  #     require 'net/smtp'</div><div class='del'>-  #     Net::SMTP.start('your.smtp.server', 25) do |smtp|</div><div class='del'>-  #       smtp.send_message msgstr,</div><div class='del'>-  #                         'your@mail.address',</div><div class='del'>-  #                         'his_addess@example.com'</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # === Closing the Session</div><div class='del'>-  # </div><div class='del'>-  # You MUST close the SMTP session after sending messages, by calling </div><div class='del'>-  # the #finish method:</div><div class='del'>-  # </div><div class='del'>-  #     # using SMTP#finish</div><div class='del'>-  #     smtp = Net::SMTP.start('your.smtp.server', 25)</div><div class='del'>-  #     smtp.send_message msgstr, 'from@address', 'to@address'</div><div class='del'>-  #     smtp.finish</div><div class='del'>-  # </div><div class='del'>-  # You can also use the block form of SMTP.start/SMTP#start.  This closes</div><div class='del'>-  # the SMTP session automatically:</div><div class='del'>-  # </div><div class='del'>-  #     # using block form of SMTP.start</div><div class='del'>-  #     Net::SMTP.start('your.smtp.server', 25) do |smtp|</div><div class='del'>-  #       smtp.send_message msgstr, 'from@address', 'to@address'</div><div class='del'>-  #     end</div><div class='del'>-  # </div><div class='del'>-  # I strongly recommend this scheme.  This form is simpler and more robust.</div><div class='del'>-  # </div><div class='del'>-  # === HELO domain</div><div class='del'>-  # </div><div class='del'>-  # In almost all situations, you must provide a third argument</div><div class='del'>-  # to SMTP.start/SMTP#start. This is the domain name which you are on</div><div class='del'>-  # (the host to send mail from). It is called the "HELO domain".</div><div class='del'>-  # The SMTP server will judge whether it should send or reject</div><div class='del'>-  # the SMTP session by inspecting the HELO domain.</div><div class='del'>-  # </div><div class='del'>-  #     Net::SMTP.start('your.smtp.server', 25,</div><div class='del'>-  #                     'mail.from.domain') { |smtp| ... }</div><div class='del'>-  # </div><div class='del'>-  # === SMTP Authentication</div><div class='del'>-  # </div><div class='del'>-  # The Net::SMTP class supports three authentication schemes;</div><div class='del'>-  # PLAIN, LOGIN and CRAM MD5.  (SMTP Authentication: [RFC2554])</div><div class='del'>-  # To use SMTP authentication, pass extra arguments to </div><div class='del'>-  # SMTP.start/SMTP#start.</div><div class='del'>-  # </div><div class='del'>-  #     # PLAIN</div><div class='del'>-  #     Net::SMTP.start('your.smtp.server', 25, 'mail.from.domain',</div><div class='del'>-  #                     'Your Account', 'Your Password', :plain)</div><div class='del'>-  #     # LOGIN</div><div class='del'>-  #     Net::SMTP.start('your.smtp.server', 25, 'mail.from.domain',</div><div class='del'>-  #                     'Your Account', 'Your Password', :login)</div><div class='del'>-  # </div><div class='del'>-  #     # CRAM MD5</div><div class='del'>-  #     Net::SMTP.start('your.smtp.server', 25, 'mail.from.domain',</div><div class='del'>-  #                     'Your Account', 'Your Password', :cram_md5)</div><div class='del'>-  #</div><div class='del'>-  class SMTP</div><div class='del'>-</div><div class='del'>-    Revision = %q$Revision$.split[1]</div><div class='del'>-</div><div class='del'>-    # The default SMTP port number, 25.</div><div class='del'>-    def SMTP.default_port</div><div class='del'>-      25</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The default mail submission port number, 587.</div><div class='del'>-    def SMTP.default_submission_port</div><div class='del'>-      587</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The default SMTPS port number, 465.</div><div class='del'>-    def SMTP.default_tls_port</div><div class='del'>-      465</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      alias default_ssl_port default_tls_port</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def SMTP.default_ssl_context</div><div class='del'>-      OpenSSL::SSL::SSLContext.new</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    #</div><div class='del'>-    # Creates a new Net::SMTP object.</div><div class='del'>-    #</div><div class='del'>-    # +address+ is the hostname or ip address of your SMTP</div><div class='del'>-    # server.  +port+ is the port to connect to; it defaults to</div><div class='del'>-    # port 25.</div><div class='del'>-    #</div><div class='del'>-    # This method does not open the TCP connection.  You can use</div><div class='del'>-    # SMTP.start instead of SMTP.new if you want to do everything</div><div class='del'>-    # at once.  Otherwise, follow SMTP.new with SMTP#start.</div><div class='del'>-    #</div><div class='del'>-    def initialize(address, port = nil)</div><div class='del'>-      @address = address</div><div class='del'>-      @port = (port || SMTP.default_port)</div><div class='del'>-      @esmtp = true</div><div class='del'>-      @capabilities = nil</div><div class='del'>-      @socket = nil</div><div class='del'>-      @started = false</div><div class='del'>-      @open_timeout = 30</div><div class='del'>-      @read_timeout = 60</div><div class='del'>-      @error_occured = false</div><div class='del'>-      @debug_output = nil</div><div class='del'>-      @tls = false</div><div class='del'>-      @starttls = false</div><div class='del'>-      @ssl_context = nil</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Provide human-readable stringification of class state.</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class} #{@address}:#{@port} started=#{@started}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # +true+ if the SMTP object uses ESMTP (which it does by default).</div><div class='del'>-    def esmtp?</div><div class='del'>-      @esmtp</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Set whether to use ESMTP or not.  This should be done before </div><div class='del'>-    # calling #start.  Note that if #start is called in ESMTP mode,</div><div class='del'>-    # and the connection fails due to a ProtocolError, the SMTP</div><div class='del'>-    # object will automatically switch to plain SMTP mode and</div><div class='del'>-    # retry (but not vice versa).</div><div class='del'>-    #</div><div class='del'>-    def esmtp=(bool)</div><div class='del'>-      @esmtp = bool</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias esmtp esmtp?</div><div class='del'>-</div><div class='del'>-    # true if server advertises STARTTLS.</div><div class='del'>-    # You cannot get valid value before opening SMTP session.</div><div class='del'>-    def capable_starttls?</div><div class='del'>-      capable?('STARTTLS')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def capable?(key)</div><div class='del'>-      return nil unless @capabilities</div><div class='del'>-      @capabilities[key] ? true : false</div><div class='del'>-    end</div><div class='del'>-    private :capable?</div><div class='del'>-</div><div class='del'>-    # true if server advertises AUTH PLAIN.</div><div class='del'>-    # You cannot get valid value before opening SMTP session.</div><div class='del'>-    def capable_plain_auth?</div><div class='del'>-      auth_capable?('PLAIN')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # true if server advertises AUTH LOGIN.</div><div class='del'>-    # You cannot get valid value before opening SMTP session.</div><div class='del'>-    def capable_login_auth?</div><div class='del'>-      auth_capable?('LOGIN')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # true if server advertises AUTH CRAM-MD5.</div><div class='del'>-    # You cannot get valid value before opening SMTP session.</div><div class='del'>-    def capable_cram_md5_auth?</div><div class='del'>-      auth_capable?('CRAM-MD5')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def auth_capable?(type)</div><div class='del'>-      return nil unless @capabilities</div><div class='del'>-      return false unless @capabilities['AUTH']</div><div class='del'>-      @capabilities['AUTH'].include?(type)</div><div class='del'>-    end</div><div class='del'>-    private :auth_capable?</div><div class='del'>-</div><div class='del'>-    # Returns supported authentication methods on this server.</div><div class='del'>-    # You cannot get valid value before opening SMTP session.</div><div class='del'>-    def capable_auth_types</div><div class='del'>-      return [] unless @capabilities</div><div class='del'>-      return [] unless @capabilities['AUTH']</div><div class='del'>-      @capabilities['AUTH']</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # true if this object uses SMTP/TLS (SMTPS).</div><div class='del'>-    def tls?</div><div class='del'>-      @tls</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias ssl? tls?</div><div class='del'>-</div><div class='del'>-    # Enables SMTP/TLS (SMTPS: SMTP over direct TLS connection) for</div><div class='del'>-    # this object.  Must be called before the connection is established</div><div class='del'>-    # to have any effect.  +context+ is a OpenSSL::SSL::SSLContext object.</div><div class='del'>-    def enable_tls(context = SMTP.default_ssl_context)</div><div class='del'>-      raise 'openssl library not installed' unless defined?(OpenSSL)</div><div class='del'>-      raise ArgumentError, "SMTPS and STARTTLS is exclusive" if @starttls</div><div class='del'>-      @tls = true</div><div class='del'>-      @ssl_context = context</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias enable_ssl enable_tls</div><div class='del'>-    </div><div class='del'>-    # Disables SMTP/TLS for this object.  Must be called before the</div><div class='del'>-    # connection is established to have any effect.</div><div class='del'>-    def disable_tls</div><div class='del'>-      @tls = false</div><div class='del'>-      @ssl_context = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias disable_ssl disable_tls</div><div class='del'>-</div><div class='del'>-    # Returns truth value if this object uses STARTTLS.</div><div class='del'>-    # If this object always uses STARTTLS, returns :always.</div><div class='del'>-    # If this object uses STARTTLS when the server support TLS, returns :auto.</div><div class='del'>-    def starttls?</div><div class='del'>-      @starttls</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # true if this object uses STARTTLS.</div><div class='del'>-    def starttls_always?</div><div class='del'>-      @starttls == :always</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # true if this object uses STARTTLS when server advertises STARTTLS.</div><div class='del'>-    def starttls_auto?</div><div class='del'>-      @starttls == :auto</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Enables SMTP/TLS (STARTTLS) for this object.</div><div class='del'>-    # +context+ is a OpenSSL::SSL::SSLContext object.</div><div class='del'>-    def enable_starttls(context = SMTP.default_ssl_context)</div><div class='del'>-      raise 'openssl library not installed' unless defined?(OpenSSL)</div><div class='del'>-      raise ArgumentError, "SMTPS and STARTTLS is exclusive" if @tls</div><div class='del'>-      @starttls = :always</div><div class='del'>-      @ssl_context = context</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Enables SMTP/TLS (STARTTLS) for this object if server accepts.</div><div class='del'>-    # +context+ is a OpenSSL::SSL::SSLContext object.</div><div class='del'>-    def enable_starttls_auto(context = SMTP.default_ssl_context)</div><div class='del'>-      raise 'openssl library not installed' unless defined?(OpenSSL)</div><div class='del'>-      raise ArgumentError, "SMTPS and STARTTLS is exclusive" if @tls</div><div class='del'>-      @starttls = :auto</div><div class='del'>-      @ssl_context = context</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Disables SMTP/TLS (STARTTLS) for this object.  Must be called</div><div class='del'>-    # before the connection is established to have any effect.</div><div class='del'>-    def disable_starttls</div><div class='del'>-      @starttls = false</div><div class='del'>-      @ssl_context = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The address of the SMTP server to connect to.</div><div class='del'>-    attr_reader :address</div><div class='del'>-</div><div class='del'>-    # The port number of the SMTP server to connect to.</div><div class='del'>-    attr_reader :port</div><div class='del'>-</div><div class='del'>-    # Seconds to wait while attempting to open a connection.</div><div class='del'>-    # If the connection cannot be opened within this time, a</div><div class='del'>-    # TimeoutError is raised.</div><div class='del'>-    attr_accessor :open_timeout</div><div class='del'>-</div><div class='del'>-    # Seconds to wait while reading one block (by one read(2) call).</div><div class='del'>-    # If the read(2) call does not complete within this time, a</div><div class='del'>-    # TimeoutError is raised.</div><div class='del'>-    attr_reader :read_timeout</div><div class='del'>-</div><div class='del'>-    # Set the number of seconds to wait until timing-out a read(2)</div><div class='del'>-    # call.</div><div class='del'>-    def read_timeout=(sec)</div><div class='del'>-      @socket.read_timeout = sec if @socket</div><div class='del'>-      @read_timeout = sec</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # WARNING: This method causes serious security holes.</div><div class='del'>-    # Use this method for only debugging.</div><div class='del'>-    #</div><div class='del'>-    # Set an output stream for debug logging.</div><div class='del'>-    # You must call this before #start.</div><div class='del'>-    #</div><div class='del'>-    #   # example</div><div class='del'>-    #   smtp = Net::SMTP.new(addr, port)</div><div class='del'>-    #   smtp.set_debug_output $stderr</div><div class='del'>-    #   smtp.start do |smtp|</div><div class='del'>-    #     ....</div><div class='del'>-    #   end</div><div class='del'>-    #</div><div class='del'>-    def debug_output=(arg)</div><div class='del'>-      @debug_output = arg</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias set_debug_output debug_output=</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # SMTP session control</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Creates a new Net::SMTP object and connects to the server.</div><div class='del'>-    #</div><div class='del'>-    # This method is equivalent to:</div><div class='del'>-    # </div><div class='del'>-    #   Net::SMTP.new(address, port).start(helo_domain, account, password, authtype)</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #     Net::SMTP.start('your.smtp.server') do |smtp|</div><div class='del'>-    #       smtp.send_message msgstr, 'from@example.com', ['dest@example.com']</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    # === Block Usage</div><div class='del'>-    #</div><div class='del'>-    # If called with a block, the newly-opened Net::SMTP object is yielded</div><div class='del'>-    # to the block, and automatically closed when the block finishes.  If called</div><div class='del'>-    # without a block, the newly-opened Net::SMTP object is returned to</div><div class='del'>-    # the caller, and it is the caller's responsibility to close it when</div><div class='del'>-    # finished.</div><div class='del'>-    #</div><div class='del'>-    # === Parameters</div><div class='del'>-    #</div><div class='del'>-    # +address+ is the hostname or ip address of your smtp server.</div><div class='del'>-    #</div><div class='del'>-    # +port+ is the port to connect to; it defaults to port 25.</div><div class='del'>-    #</div><div class='del'>-    # +helo+ is the _HELO_ _domain_ provided by the client to the</div><div class='del'>-    # server (see overview comments); it defaults to 'localhost'. </div><div class='del'>-    #</div><div class='del'>-    # The remaining arguments are used for SMTP authentication, if required</div><div class='del'>-    # or desired.  +user+ is the account name; +secret+ is your password</div><div class='del'>-    # or other authentication token; and +authtype+ is the authentication</div><div class='del'>-    # type, one of :plain, :login, or :cram_md5.  See the discussion of</div><div class='del'>-    # SMTP Authentication in the overview notes.</div><div class='del'>-    #</div><div class='del'>-    # === Errors</div><div class='del'>-    #</div><div class='del'>-    # This method may raise:</div><div class='del'>-    #</div><div class='del'>-    # * Net::SMTPAuthenticationError</div><div class='del'>-    # * Net::SMTPServerBusy</div><div class='del'>-    # * Net::SMTPSyntaxError</div><div class='del'>-    # * Net::SMTPFatalError</div><div class='del'>-    # * Net::SMTPUnknownError</div><div class='del'>-    # * IOError</div><div class='del'>-    # * TimeoutError</div><div class='del'>-    #</div><div class='del'>-    def SMTP.start(address, port = nil, helo = 'localhost',</div><div class='del'>-                   user = nil, secret = nil, authtype = nil,</div><div class='del'>-                   &amp;block)   # :yield: smtp</div><div class='del'>-      new(address, port).start(helo, user, secret, authtype, &amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # +true+ if the SMTP session has been started.</div><div class='del'>-    def started?</div><div class='del'>-      @started</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Opens a TCP connection and starts the SMTP session.</div><div class='del'>-    #</div><div class='del'>-    # === Parameters</div><div class='del'>-    #</div><div class='del'>-    # +helo+ is the _HELO_ _domain_ that you'll dispatch mails from; see</div><div class='del'>-    # the discussion in the overview notes.</div><div class='del'>-    #</div><div class='del'>-    # If both of +user+ and +secret+ are given, SMTP authentication </div><div class='del'>-    # will be attempted using the AUTH command.  +authtype+ specifies </div><div class='del'>-    # the type of authentication to attempt; it must be one of</div><div class='del'>-    # :login, :plain, and :cram_md5.  See the notes on SMTP Authentication</div><div class='del'>-    # in the overview. </div><div class='del'>-    #</div><div class='del'>-    # === Block Usage</div><div class='del'>-    #</div><div class='del'>-    # When this methods is called with a block, the newly-started SMTP</div><div class='del'>-    # object is yielded to the block, and automatically closed after</div><div class='del'>-    # the block call finishes.  Otherwise, it is the caller's </div><div class='del'>-    # responsibility to close the session when finished.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    # This is very similar to the class method SMTP.start.</div><div class='del'>-    #</div><div class='del'>-    #     require 'net/smtp' </div><div class='del'>-    #     smtp = Net::SMTP.new('smtp.mail.server', 25)</div><div class='del'>-    #     smtp.start(helo_domain, account, password, authtype) do |smtp|</div><div class='del'>-    #       smtp.send_message msgstr, 'from@example.com', ['dest@example.com']</div><div class='del'>-    #     end </div><div class='del'>-    #</div><div class='del'>-    # The primary use of this method (as opposed to SMTP.start)</div><div class='del'>-    # is probably to set debugging (#set_debug_output) or ESMTP</div><div class='del'>-    # (#esmtp=), which must be done before the session is</div><div class='del'>-    # started.  </div><div class='del'>-    #</div><div class='del'>-    # === Errors</div><div class='del'>-    #</div><div class='del'>-    # If session has already been started, an IOError will be raised.</div><div class='del'>-    #</div><div class='del'>-    # This method may raise:</div><div class='del'>-    #</div><div class='del'>-    # * Net::SMTPAuthenticationError</div><div class='del'>-    # * Net::SMTPServerBusy</div><div class='del'>-    # * Net::SMTPSyntaxError</div><div class='del'>-    # * Net::SMTPFatalError</div><div class='del'>-    # * Net::SMTPUnknownError</div><div class='del'>-    # * IOError</div><div class='del'>-    # * TimeoutError</div><div class='del'>-    #</div><div class='del'>-    def start(helo = 'localhost',</div><div class='del'>-              user = nil, secret = nil, authtype = nil)   # :yield: smtp</div><div class='del'>-      if block_given?</div><div class='del'>-        begin</div><div class='del'>-          do_start helo, user, secret, authtype</div><div class='del'>-          return yield(self)</div><div class='del'>-        ensure</div><div class='del'>-          do_finish</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        do_start helo, user, secret, authtype</div><div class='del'>-        return self</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Finishes the SMTP session and closes TCP connection.</div><div class='del'>-    # Raises IOError if not started.</div><div class='del'>-    def finish</div><div class='del'>-      raise IOError, 'not yet started' unless started?</div><div class='del'>-      do_finish</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def do_start(helo_domain, user, secret, authtype)</div><div class='del'>-      raise IOError, 'SMTP session already started' if @started</div><div class='del'>-      if user or secret</div><div class='del'>-        check_auth_method(authtype || DEFAULT_AUTH_TYPE)</div><div class='del'>-        check_auth_args user, secret</div><div class='del'>-      end</div><div class='del'>-      s = timeout(@open_timeout) { TCPSocket.open(@address, @port) }   </div><div class='del'>-      logging "Connection opened: #{@address}:#{@port}"</div><div class='del'>-      @socket = new_internet_message_io(tls? ? tlsconnect(s) : s)</div><div class='del'>-      check_response critical { recv_response() }</div><div class='del'>-      do_helo helo_domain</div><div class='del'>-      if starttls_always? or (capable_starttls? and starttls_auto?)</div><div class='del'>-        unless capable_starttls?</div><div class='del'>-          raise SMTPUnsupportedCommand,</div><div class='del'>-              "STARTTLS is not supported on this server"</div><div class='del'>-        end</div><div class='del'>-        starttls</div><div class='del'>-        @socket = new_internet_message_io(tlsconnect(s))</div><div class='del'>-        # helo response may be different after STARTTLS</div><div class='del'>-        do_helo helo_domain</div><div class='del'>-      end</div><div class='del'>-      authenticate user, secret, (authtype || DEFAULT_AUTH_TYPE) if user</div><div class='del'>-      @started = true</div><div class='del'>-    ensure</div><div class='del'>-      unless @started</div><div class='del'>-        # authentication failed, cancel connection.</div><div class='del'>-        s.close if s and not s.closed?</div><div class='del'>-        @socket = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tlsconnect(s)</div><div class='del'>-      s = OpenSSL::SSL::SSLSocket.new(s, @ssl_context)</div><div class='del'>-      logging "TLS connection started"</div><div class='del'>-      s.sync_close = true</div><div class='del'>-      s.connect</div><div class='del'>-      if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE</div><div class='del'>-        s.post_connection_check(@address)</div><div class='del'>-      end</div><div class='del'>-      s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def new_internet_message_io(s)</div><div class='del'>-      io = InternetMessageIO.new(s)</div><div class='del'>-      io.read_timeout = @read_timeout</div><div class='del'>-      io.debug_output = @debug_output</div><div class='del'>-      io</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def do_helo(helo_domain)</div><div class='del'>-      res = @esmtp ? ehlo(helo_domain) : helo(helo_domain)</div><div class='del'>-      @capabilities = res.capabilities</div><div class='del'>-    rescue SMTPError</div><div class='del'>-      if @esmtp</div><div class='del'>-        @esmtp = false</div><div class='del'>-        @error_occured = false</div><div class='del'>-        retry</div><div class='del'>-      end</div><div class='del'>-      raise</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def do_finish</div><div class='del'>-      quit if @socket and not @socket.closed? and not @error_occured</div><div class='del'>-    ensure</div><div class='del'>-      @started = false</div><div class='del'>-      @error_occured = false</div><div class='del'>-      @socket.close if @socket and not @socket.closed?</div><div class='del'>-      @socket = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Message Sending</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'>-    # Sends +msgstr+ as a message.  Single CR ("\r") and LF ("\n") found</div><div class='del'>-    # in the +msgstr+, are converted into the CR LF pair.  You cannot send a</div><div class='del'>-    # binary message with this method. +msgstr+ should include both </div><div class='del'>-    # the message headers and body.</div><div class='del'>-    #</div><div class='del'>-    # +from_addr+ is a String representing the source mail address.</div><div class='del'>-    #</div><div class='del'>-    # +to_addr+ is a String or Strings or Array of Strings, representing</div><div class='del'>-    # the destination mail address or addresses.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #     Net::SMTP.start('smtp.example.com') do |smtp|</div><div class='del'>-    #       smtp.send_message msgstr,</div><div class='del'>-    #                         'from@example.com',</div><div class='del'>-    #                         ['dest@example.com', 'dest2@example.com']</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    # === Errors</div><div class='del'>-    #</div><div class='del'>-    # This method may raise:</div><div class='del'>-    #</div><div class='del'>-    # * Net::SMTPServerBusy</div><div class='del'>-    # * Net::SMTPSyntaxError</div><div class='del'>-    # * Net::SMTPFatalError</div><div class='del'>-    # * Net::SMTPUnknownError</div><div class='del'>-    # * IOError</div><div class='del'>-    # * TimeoutError</div><div class='del'>-    #</div><div class='del'>-    def send_message(msgstr, from_addr, *to_addrs)</div><div class='del'>-      raise IOError, 'closed session' unless @socket</div><div class='del'>-      mailfrom from_addr</div><div class='del'>-      rcptto_list to_addrs</div><div class='del'>-      data msgstr</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias send_mail send_message</div><div class='del'>-    alias sendmail send_message   # obsolete</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Opens a message writer stream and gives it to the block.</div><div class='del'>-    # The stream is valid only in the block, and has these methods:</div><div class='del'>-    #</div><div class='del'>-    # puts(str = '')::       outputs STR and CR LF.</div><div class='del'>-    # print(str)::           outputs STR.</div><div class='del'>-    # printf(fmt, *args)::   outputs sprintf(fmt,*args).</div><div class='del'>-    # write(str)::           outputs STR and returns the length of written bytes.</div><div class='del'>-    # &lt;&lt;(str)::              outputs STR and returns self.</div><div class='del'>-    #</div><div class='del'>-    # If a single CR ("\r") or LF ("\n") is found in the message,</div><div class='del'>-    # it is converted to the CR LF pair.  You cannot send a binary</div><div class='del'>-    # message with this method.</div><div class='del'>-    #</div><div class='del'>-    # === Parameters</div><div class='del'>-    #</div><div class='del'>-    # +from_addr+ is a String representing the source mail address.</div><div class='del'>-    #</div><div class='del'>-    # +to_addr+ is a String or Strings or Array of Strings, representing</div><div class='del'>-    # the destination mail address or addresses.</div><div class='del'>-    #</div><div class='del'>-    # === Example</div><div class='del'>-    #</div><div class='del'>-    #     Net::SMTP.start('smtp.example.com', 25) do |smtp|</div><div class='del'>-    #       smtp.open_message_stream('from@example.com', ['dest@example.com']) do |f|</div><div class='del'>-    #         f.puts 'From: from@example.com'</div><div class='del'>-    #         f.puts 'To: dest@example.com'</div><div class='del'>-    #         f.puts 'Subject: test message'</div><div class='del'>-    #         f.puts</div><div class='del'>-    #         f.puts 'This is a test message.'</div><div class='del'>-    #       end</div><div class='del'>-    #     end</div><div class='del'>-    #</div><div class='del'>-    # === Errors</div><div class='del'>-    #</div><div class='del'>-    # This method may raise:</div><div class='del'>-    #</div><div class='del'>-    # * Net::SMTPServerBusy</div><div class='del'>-    # * Net::SMTPSyntaxError</div><div class='del'>-    # * Net::SMTPFatalError</div><div class='del'>-    # * Net::SMTPUnknownError</div><div class='del'>-    # * IOError</div><div class='del'>-    # * TimeoutError</div><div class='del'>-    #</div><div class='del'>-    def open_message_stream(from_addr, *to_addrs, &amp;block)   # :yield: stream</div><div class='del'>-      raise IOError, 'closed session' unless @socket</div><div class='del'>-      mailfrom from_addr</div><div class='del'>-      rcptto_list to_addrs</div><div class='del'>-      data(&amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias ready open_message_stream   # obsolete</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Authentication</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-</div><div class='del'>-    DEFAULT_AUTH_TYPE = :plain</div><div class='del'>-</div><div class='del'>-    def authenticate(user, secret, authtype = DEFAULT_AUTH_TYPE)</div><div class='del'>-      check_auth_method authtype</div><div class='del'>-      check_auth_args user, secret</div><div class='del'>-      send auth_method(authtype), user, secret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def auth_plain(user, secret)</div><div class='del'>-      check_auth_args user, secret</div><div class='del'>-      res = critical {</div><div class='del'>-        get_response('AUTH PLAIN ' + base64_encode("\0#{user}\0#{secret}"))</div><div class='del'>-      }</div><div class='del'>-      check_auth_response res</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def auth_login(user, secret)</div><div class='del'>-      check_auth_args user, secret</div><div class='del'>-      res = critical {</div><div class='del'>-        check_auth_continue get_response('AUTH LOGIN')</div><div class='del'>-        check_auth_continue get_response(base64_encode(user))</div><div class='del'>-        get_response(base64_encode(secret))</div><div class='del'>-      }</div><div class='del'>-      check_auth_response res</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def auth_cram_md5(user, secret)</div><div class='del'>-      check_auth_args user, secret</div><div class='del'>-      res = critical {</div><div class='del'>-        res0 = get_response('AUTH CRAM-MD5')</div><div class='del'>-        check_auth_continue res0</div><div class='del'>-        crammed = cram_md5_response(secret, res0.cram_md5_challenge)</div><div class='del'>-        get_response(base64_encode("#{user} #{crammed}"))</div><div class='del'>-      }</div><div class='del'>-      check_auth_response res</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def check_auth_method(type)</div><div class='del'>-      unless respond_to?(auth_method(type), true)</div><div class='del'>-        raise ArgumentError, "wrong authentication type #{type}"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def auth_method(type)</div><div class='del'>-      "auth_#{type.to_s.downcase}".intern</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_auth_args(user, secret)</div><div class='del'>-      unless user</div><div class='del'>-        raise ArgumentError, 'SMTP-AUTH requested but missing user name'</div><div class='del'>-      end</div><div class='del'>-      unless secret</div><div class='del'>-        raise ArgumentError, 'SMTP-AUTH requested but missing secret phrase'</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def base64_encode(str)</div><div class='del'>-      # expects "str" may not become too long</div><div class='del'>-      [str].pack('m').gsub(/\s+/, '')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    IMASK = 0x36</div><div class='del'>-    OMASK = 0x5c</div><div class='del'>-</div><div class='del'>-    # CRAM-MD5: [RFC2195]</div><div class='del'>-    def cram_md5_response(secret, challenge)</div><div class='del'>-      tmp = Digest::MD5.digest(cram_secret(secret, IMASK) + challenge)</div><div class='del'>-      Digest::MD5.hexdigest(cram_secret(secret, OMASK) + tmp)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    CRAM_BUFSIZE = 64</div><div class='del'>-</div><div class='del'>-    def cram_secret(secret, mask)</div><div class='del'>-      secret = Digest::MD5.digest(secret) if secret.size &gt; CRAM_BUFSIZE</div><div class='del'>-      buf = secret.ljust(CRAM_BUFSIZE, "\0")</div><div class='del'>-      0.upto(buf.size - 1) do |i|</div><div class='del'>-        buf[i] = (buf[i].ord ^ mask).chr</div><div class='del'>-      end</div><div class='del'>-      buf</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # SMTP command dispatcher</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    public</div><div class='del'>-</div><div class='del'>-    def starttls</div><div class='del'>-      getok('STARTTLS')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def helo(domain)</div><div class='del'>-      getok("HELO #{domain}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ehlo(domain)</div><div class='del'>-      getok("EHLO #{domain}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def mailfrom(from_addr)</div><div class='del'>-      if $SAFE &gt; 0</div><div class='del'>-        raise SecurityError, 'tainted from_addr' if from_addr.tainted?</div><div class='del'>-      end</div><div class='del'>-      getok("MAIL FROM:&lt;#{from_addr}&gt;")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def rcptto_list(to_addrs)</div><div class='del'>-      raise ArgumentError, 'mail destination not given' if to_addrs.empty?</div><div class='del'>-      to_addrs.flatten.each do |addr|</div><div class='del'>-        rcptto addr</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def rcptto(to_addr)</div><div class='del'>-      if $SAFE &gt; 0</div><div class='del'>-        raise SecurityError, 'tainted to_addr' if to.tainted?</div><div class='del'>-      end</div><div class='del'>-      getok("RCPT TO:&lt;#{to_addr}&gt;")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # This method sends a message.</div><div class='del'>-    # If +msgstr+ is given, sends it as a message.</div><div class='del'>-    # If block is given, yield a message writer stream.</div><div class='del'>-    # You must write message before the block is closed.</div><div class='del'>-    #</div><div class='del'>-    #   # Example 1 (by string)</div><div class='del'>-    #   smtp.data(&lt;&lt;EndMessage)</div><div class='del'>-    #   From: john@example.com</div><div class='del'>-    #   To: betty@example.com</div><div class='del'>-    #   Subject: I found a bug</div><div class='del'>-    #   </div><div class='del'>-    #   Check vm.c:58879.</div><div class='del'>-    #   EndMessage</div><div class='del'>-    #</div><div class='del'>-    #   # Example 2 (by block)</div><div class='del'>-    #   smtp.data {|f|</div><div class='del'>-    #     f.puts "From: john@example.com"</div><div class='del'>-    #     f.puts "To: betty@example.com"</div><div class='del'>-    #     f.puts "Subject: I found a bug"</div><div class='del'>-    #     f.puts ""</div><div class='del'>-    #     f.puts "Check vm.c:58879."</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    def data(msgstr = nil, &amp;block)   #:yield: stream</div><div class='del'>-      if msgstr and block</div><div class='del'>-        raise ArgumentError, "message and block are exclusive"</div><div class='del'>-      end</div><div class='del'>-      unless msgstr or block</div><div class='del'>-        raise ArgumentError, "message or block is required"</div><div class='del'>-      end</div><div class='del'>-      res = critical {</div><div class='del'>-        check_continue get_response('DATA')</div><div class='del'>-        if msgstr</div><div class='del'>-          @socket.write_message msgstr</div><div class='del'>-        else</div><div class='del'>-          @socket.write_message_by_block(&amp;block)</div><div class='del'>-        end</div><div class='del'>-        recv_response()</div><div class='del'>-      }</div><div class='del'>-      check_response res</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def quit</div><div class='del'>-      getok('QUIT')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def getok(reqline)</div><div class='del'>-      res = critical {</div><div class='del'>-        @socket.writeline reqline</div><div class='del'>-        recv_response()</div><div class='del'>-      }</div><div class='del'>-      check_response res</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_response(reqline)</div><div class='del'>-      @socket.writeline reqline</div><div class='del'>-      recv_response()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def recv_response</div><div class='del'>-      buf = ''</div><div class='del'>-      while true</div><div class='del'>-        line = @socket.readline</div><div class='del'>-        buf &lt;&lt; line &lt;&lt; "\n"</div><div class='del'>-        break unless line[3,1] == '-'   # "210-PIPELINING"</div><div class='del'>-      end</div><div class='del'>-      Response.parse(buf)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def critical(&amp;block)</div><div class='del'>-      return '200 dummy reply code' if @error_occured</div><div class='del'>-      begin</div><div class='del'>-        return yield()</div><div class='del'>-      rescue Exception</div><div class='del'>-        @error_occured = true</div><div class='del'>-        raise</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_response(res)</div><div class='del'>-      unless res.success?</div><div class='del'>-        raise res.exception_class, res.message</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_continue(res)</div><div class='del'>-      unless res.continue?</div><div class='del'>-        raise SMTPUnknownError, "could not get 3xx (#{res.status})"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_auth_response(res)</div><div class='del'>-      unless res.success?</div><div class='del'>-        raise SMTPAuthenticationError, res.message</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_auth_continue(res)</div><div class='del'>-      unless res.continue?</div><div class='del'>-        raise res.exception_class, res.message</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Response</div><div class='del'>-      def Response.parse(str)</div><div class='del'>-        new(str[0,3], str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(status, string)</div><div class='del'>-        @status = status</div><div class='del'>-        @string = string</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :status</div><div class='del'>-      attr_reader :string</div><div class='del'>-</div><div class='del'>-      def status_type_char</div><div class='del'>-        @status[0, 1]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def success?</div><div class='del'>-        status_type_char() == '2'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def continue?</div><div class='del'>-        status_type_char() == '3'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def message</div><div class='del'>-        @string.lines.first</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def cram_md5_challenge</div><div class='del'>-        @string.split(/ /)[1].unpack('m')[0]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def capabilities</div><div class='del'>-        return {} unless @string[3, 1] == '-'</div><div class='del'>-        h = {}</div><div class='del'>-        @string.lines.drop(1).each do |line|</div><div class='del'>-          k, *v = line[4..-1].chomp.split(nil)</div><div class='del'>-          h[k] = v</div><div class='del'>-        end</div><div class='del'>-        h</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def exception_class</div><div class='del'>-        case @status</div><div class='del'>-        when /\A4/  then SMTPServerBusy</div><div class='del'>-        when /\A50/ then SMTPSyntaxError</div><div class='del'>-        when /\A53/ then SMTPAuthenticationError</div><div class='del'>-        when /\A5/  then SMTPFatalError</div><div class='del'>-        else             SMTPUnknownError</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def logging(msg)</div><div class='del'>-      @debug_output &lt;&lt; msg + "\n" if @debug_output</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end   # class SMTP</div><div class='del'>-</div><div class='del'>-  SMTPSession = SMTP</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/net/telnet.rb b/lib/net/telnet.rb<br/>deleted file mode 100644<br/>index 73471c3327..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/net/telnet.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/net/telnet.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,756 +0,0 @@</div><div class='del'>-# = net/telnet.rb - Simple Telnet Client Library</div><div class='del'>-# </div><div class='del'>-# Author:: Wakou Aoyama &lt;wakou@ruby-lang.org&gt;</div><div class='del'>-# Documentation:: William Webber and Wakou Aoyama </div><div class='del'>-#</div><div class='del'>-# This file holds the class Net::Telnet, which provides client-side</div><div class='del'>-# telnet functionality.</div><div class='del'>-#</div><div class='del'>-# For documentation, see Net::Telnet.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "socket"</div><div class='del'>-require "delegate"</div><div class='del'>-require "timeout"</div><div class='del'>-require "English"</div><div class='del'>- </div><div class='del'>-module Net</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # == Net::Telnet</div><div class='del'>-  #</div><div class='del'>-  # Provides telnet client functionality.</div><div class='del'>-  #</div><div class='del'>-  # This class also has, through delegation, all the methods of a</div><div class='del'>-  # socket object (by default, a +TCPSocket+, but can be set by the</div><div class='del'>-  # +Proxy+ option to &lt;tt&gt;new()&lt;/tt&gt;).  This provides methods such as</div><div class='del'>-  # &lt;tt&gt;close()&lt;/tt&gt; to end the session and &lt;tt&gt;sysread()&lt;/tt&gt; to read</div><div class='del'>-  # data directly from the host, instead of via the &lt;tt&gt;waitfor()&lt;/tt&gt;</div><div class='del'>-  # mechanism.  Note that if you do use &lt;tt&gt;sysread()&lt;/tt&gt; directly</div><div class='del'>-  # when in telnet mode, you should probably pass the output through</div><div class='del'>-  # &lt;tt&gt;preprocess()&lt;/tt&gt; to extract telnet command sequences.</div><div class='del'>-  #</div><div class='del'>-  # == Overview</div><div class='del'>-  #</div><div class='del'>-  # The telnet protocol allows a client to login remotely to a user</div><div class='del'>-  # account on a server and execute commands via a shell.  The equivalent</div><div class='del'>-  # is done by creating a Net::Telnet class with the +Host+ option</div><div class='del'>-  # set to your host, calling #login() with your user and password,</div><div class='del'>-  # issuing one or more #cmd() calls, and then calling #close()</div><div class='del'>-  # to end the session.  The #waitfor(), #print(), #puts(), and</div><div class='del'>-  # #write() methods, which #cmd() is implemented on top of, are</div><div class='del'>-  # only needed if you are doing something more complicated.</div><div class='del'>-  #</div><div class='del'>-  # A Net::Telnet object can also be used to connect to non-telnet</div><div class='del'>-  # services, such as SMTP or HTTP.  In this case, you normally</div><div class='del'>-  # want to provide the +Port+ option to specify the port to</div><div class='del'>-  # connect to, and set the +Telnetmode+ option to false to prevent</div><div class='del'>-  # the client from attempting to interpret telnet command sequences.</div><div class='del'>-  # Generally, #login() will not work with other protocols, and you</div><div class='del'>-  # have to handle authentication yourself.</div><div class='del'>-  #</div><div class='del'>-  # For some protocols, it will be possible to specify the +Prompt+</div><div class='del'>-  # option once when you create the Telnet object and use #cmd() calls; </div><div class='del'>-  # for others, you will have to specify the response sequence to</div><div class='del'>-  # look for as the Match option to every #cmd() call, or call</div><div class='del'>-  # #puts() and #waitfor() directly; for yet others, you will have </div><div class='del'>-  # to use #sysread() instead of #waitfor() and parse server </div><div class='del'>-  # responses yourself.</div><div class='del'>-  #</div><div class='del'>-  # It is worth noting that when you create a new Net::Telnet object,</div><div class='del'>-  # you can supply a proxy IO channel via the Proxy option.  This</div><div class='del'>-  # can be used to attach the Telnet object to other Telnet objects,</div><div class='del'>-  # to already open sockets, or to any read-write IO object.  This</div><div class='del'>-  # can be useful, for instance, for setting up a test fixture for</div><div class='del'>-  # unit testing.</div><div class='del'>-  # </div><div class='del'>-  # == Examples</div><div class='del'>-  # </div><div class='del'>-  # === Log in and send a command, echoing all output to stdout</div><div class='del'>-  # </div><div class='del'>-  #   localhost = Net::Telnet::new("Host" =&gt; "localhost",</div><div class='del'>-  #                                "Timeout" =&gt; 10,</div><div class='del'>-  #                                "Prompt" =&gt; /[$%#&gt;] \z/n)</div><div class='del'>-  #   localhost.login("username", "password") { |c| print c }</div><div class='del'>-  #   localhost.cmd("command") { |c| print c }</div><div class='del'>-  #   localhost.close</div><div class='del'>-  # </div><div class='del'>-  # </div><div class='del'>-  # === Check a POP server to see if you have mail</div><div class='del'>-  # </div><div class='del'>-  #   pop = Net::Telnet::new("Host" =&gt; "your_destination_host_here",</div><div class='del'>-  #                          "Port" =&gt; 110,</div><div class='del'>-  #                          "Telnetmode" =&gt; false,</div><div class='del'>-  #                          "Prompt" =&gt; /^\+OK/n)</div><div class='del'>-  #   pop.cmd("user " + "your_username_here") { |c| print c }</div><div class='del'>-  #   pop.cmd("pass " + "your_password_here") { |c| print c }</div><div class='del'>-  #   pop.cmd("list") { |c| print c }</div><div class='del'>-  #</div><div class='del'>-  # == References</div><div class='del'>-  #</div><div class='del'>-  # There are a large number of RFCs relevant to the Telnet protocol.</div><div class='del'>-  # RFCs 854-861 define the base protocol.  For a complete listing</div><div class='del'>-  # of relevant RFCs, see</div><div class='del'>-  # http://www.omnifarious.org/~hopper/technical/telnet-rfc.html</div><div class='del'>-  #</div><div class='del'>-  class Telnet &lt; SimpleDelegator</div><div class='del'>-</div><div class='del'>-    # :stopdoc:</div><div class='del'>-    IAC   = 255.chr # "\377" # "\xff" # interpret as command</div><div class='del'>-    DONT  = 254.chr # "\376" # "\xfe" # you are not to use option </div><div class='del'>-    DO    = 253.chr # "\375" # "\xfd" # please, you use option </div><div class='del'>-    WONT  = 252.chr # "\374" # "\xfc" # I won't use option </div><div class='del'>-    WILL  = 251.chr # "\373" # "\xfb" # I will use option </div><div class='del'>-    SB    = 250.chr # "\372" # "\xfa" # interpret as subnegotiation </div><div class='del'>-    GA    = 249.chr # "\371" # "\xf9" # you may reverse the line </div><div class='del'>-    EL    = 248.chr # "\370" # "\xf8" # erase the current line </div><div class='del'>-    EC    = 247.chr # "\367" # "\xf7" # erase the current character </div><div class='del'>-    AYT   = 246.chr # "\366" # "\xf6" # are you there </div><div class='del'>-    AO    = 245.chr # "\365" # "\xf5" # abort output--but let prog finish </div><div class='del'>-    IP    = 244.chr # "\364" # "\xf4" # interrupt process--permanently </div><div class='del'>-    BREAK = 243.chr # "\363" # "\xf3" # break </div><div class='del'>-    DM    = 242.chr # "\362" # "\xf2" # data mark--for connect. cleaning </div><div class='del'>-    NOP   = 241.chr # "\361" # "\xf1" # nop </div><div class='del'>-    SE    = 240.chr # "\360" # "\xf0" # end sub negotiation </div><div class='del'>-    EOR   = 239.chr # "\357" # "\xef" # end of record (transparent mode) </div><div class='del'>-    ABORT = 238.chr # "\356" # "\xee" # Abort process </div><div class='del'>-    SUSP  = 237.chr # "\355" # "\xed" # Suspend process </div><div class='del'>-    EOF   = 236.chr # "\354" # "\xec" # End of file </div><div class='del'>-    SYNCH = 242.chr # "\362" # "\xf2" # for telfunc calls </div><div class='del'>-</div><div class='del'>-    OPT_BINARY         =   0.chr # "\000" # "\x00" # Binary Transmission </div><div class='del'>-    OPT_ECHO           =   1.chr # "\001" # "\x01" # Echo </div><div class='del'>-    OPT_RCP            =   2.chr # "\002" # "\x02" # Reconnection </div><div class='del'>-    OPT_SGA            =   3.chr # "\003" # "\x03" # Suppress Go Ahead </div><div class='del'>-    OPT_NAMS           =   4.chr # "\004" # "\x04" # Approx Message Size Negotiation </div><div class='del'>-    OPT_STATUS         =   5.chr # "\005" # "\x05" # Status </div><div class='del'>-    OPT_TM             =   6.chr # "\006" # "\x06" # Timing Mark </div><div class='del'>-    OPT_RCTE           =   7.chr # "\a"   # "\x07" # Remote Controlled Trans and Echo </div><div class='del'>-    OPT_NAOL           =   8.chr # "\010" # "\x08" # Output Line Width </div><div class='del'>-    OPT_NAOP           =   9.chr # "\t"   # "\x09" # Output Page Size </div><div class='del'>-    OPT_NAOCRD         =  10.chr # "\n"   # "\x0a" # Output Carriage-Return Disposition </div><div class='del'>-    OPT_NAOHTS         =  11.chr # "\v"   # "\x0b" # Output Horizontal Tab Stops </div><div class='del'>-    OPT_NAOHTD         =  12.chr # "\f"   # "\x0c" # Output Horizontal Tab Disposition </div><div class='del'>-    OPT_NAOFFD         =  13.chr # "\r"   # "\x0d" # Output Formfeed Disposition </div><div class='del'>-    OPT_NAOVTS         =  14.chr # "\016" # "\x0e" # Output Vertical Tabstops </div><div class='del'>-    OPT_NAOVTD         =  15.chr # "\017" # "\x0f" # Output Vertical Tab Disposition </div><div class='del'>-    OPT_NAOLFD         =  16.chr # "\020" # "\x10" # Output Linefeed Disposition </div><div class='del'>-    OPT_XASCII         =  17.chr # "\021" # "\x11" # Extended ASCII </div><div class='del'>-    OPT_LOGOUT         =  18.chr # "\022" # "\x12" # Logout </div><div class='del'>-    OPT_BM             =  19.chr # "\023" # "\x13" # Byte Macro </div><div class='del'>-    OPT_DET            =  20.chr # "\024" # "\x14" # Data Entry Terminal </div><div class='del'>-    OPT_SUPDUP         =  21.chr # "\025" # "\x15" # SUPDUP </div><div class='del'>-    OPT_SUPDUPOUTPUT   =  22.chr # "\026" # "\x16" # SUPDUP Output </div><div class='del'>-    OPT_SNDLOC         =  23.chr # "\027" # "\x17" # Send Location </div><div class='del'>-    OPT_TTYPE          =  24.chr # "\030" # "\x18" # Terminal Type </div><div class='del'>-    OPT_EOR            =  25.chr # "\031" # "\x19" # End of Record </div><div class='del'>-    OPT_TUID           =  26.chr # "\032" # "\x1a" # TACACS User Identification </div><div class='del'>-    OPT_OUTMRK         =  27.chr # "\e"   # "\x1b" # Output Marking </div><div class='del'>-    OPT_TTYLOC         =  28.chr # "\034" # "\x1c" # Terminal Location Number </div><div class='del'>-    OPT_3270REGIME     =  29.chr # "\035" # "\x1d" # Telnet 3270 Regime </div><div class='del'>-    OPT_X3PAD          =  30.chr # "\036" # "\x1e" # X.3 PAD </div><div class='del'>-    OPT_NAWS           =  31.chr # "\037" # "\x1f" # Negotiate About Window Size </div><div class='del'>-    OPT_TSPEED         =  32.chr # " "    # "\x20" # Terminal Speed </div><div class='del'>-    OPT_LFLOW          =  33.chr # "!"    # "\x21" # Remote Flow Control </div><div class='del'>-    OPT_LINEMODE       =  34.chr # "\""   # "\x22" # Linemode </div><div class='del'>-    OPT_XDISPLOC       =  35.chr # "#"    # "\x23" # X Display Location </div><div class='del'>-    OPT_OLD_ENVIRON    =  36.chr # "$"    # "\x24" # Environment Option </div><div class='del'>-    OPT_AUTHENTICATION =  37.chr # "%"    # "\x25" # Authentication Option </div><div class='del'>-    OPT_ENCRYPT        =  38.chr # "&amp;"    # "\x26" # Encryption Option </div><div class='del'>-    OPT_NEW_ENVIRON    =  39.chr # "'"    # "\x27" # New Environment Option </div><div class='del'>-    OPT_EXOPL          = 255.chr # "\377" # "\xff" # Extended-Options-List </div><div class='del'>-</div><div class='del'>-    NULL = "\000" </div><div class='del'>-    CR   = "\015"   </div><div class='del'>-    LF   = "\012" </div><div class='del'>-    EOL  = CR + LF </div><div class='del'>-    REVISION = '$Id$'</div><div class='del'>-    # :startdoc:</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Creates a new Net::Telnet object.</div><div class='del'>-    #</div><div class='del'>-    # Attempts to connect to the host (unless the Proxy option is</div><div class='del'>-    # provided: see below).  If a block is provided, it is yielded</div><div class='del'>-    # status messages on the attempt to connect to the server, of</div><div class='del'>-    # the form:</div><div class='del'>-    # </div><div class='del'>-    #   Trying localhost...</div><div class='del'>-    #   Connected to localhost.</div><div class='del'>-    #</div><div class='del'>-    # +options+ is a hash of options.  The following example lists</div><div class='del'>-    # all options and their default values.</div><div class='del'>-    # </div><div class='del'>-    #   host = Net::Telnet::new(</div><div class='del'>-    #            "Host"       =&gt; "localhost",  # default: "localhost"</div><div class='del'>-    #            "Port"       =&gt; 23,           # default: 23</div><div class='del'>-    #            "Binmode"    =&gt; false,        # default: false</div><div class='del'>-    #            "Output_log" =&gt; "output_log", # default: nil (no output)</div><div class='del'>-    #            "Dump_log"   =&gt; "dump_log",   # default: nil (no output)</div><div class='del'>-    #            "Prompt"     =&gt; /[$%#&gt;] \z/n, # default: /[$%#&gt;] \z/n</div><div class='del'>-    #            "Telnetmode" =&gt; true,         # default: true</div><div class='del'>-    #            "Timeout"    =&gt; 10,           # default: 10</div><div class='del'>-    #              # if ignore timeout then set "Timeout" to false.</div><div class='del'>-    #            "Waittime"   =&gt; 0,            # default: 0</div><div class='del'>-    #            "Proxy"      =&gt; proxy         # default: nil</div><div class='del'>-    #                            # proxy is Net::Telnet or IO object</div><div class='del'>-    #          )</div><div class='del'>-    #</div><div class='del'>-    # The options have the following meanings:</div><div class='del'>-    #</div><div class='del'>-    # Host:: the hostname or IP address of the host to connect to, as a String. </div><div class='del'>-    #        Defaults to "localhost".</div><div class='del'>-    #</div><div class='del'>-    # Port:: the port to connect to.  Defaults to 23.</div><div class='del'>-    #</div><div class='del'>-    # Binmode:: if false (the default), newline substitution is performed.  </div><div class='del'>-    #           Outgoing LF is</div><div class='del'>-    #           converted to CRLF, and incoming CRLF is converted to LF.  If</div><div class='del'>-    #           true, this substitution is not performed.  This value can</div><div class='del'>-    #           also be set with the #binmode() method.  The </div><div class='del'>-    #           outgoing conversion only applies to the #puts() and #print()</div><div class='del'>-    #           methods, not the #write() method.  The precise nature of</div><div class='del'>-    #           the newline conversion is also affected by the telnet options</div><div class='del'>-    #           SGA and BIN.</div><div class='del'>-    #</div><div class='del'>-    # Output_log:: the name of the file to write connection status messages</div><div class='del'>-    #              and all received traffic to.  In the case of a proper</div><div class='del'>-    #              Telnet session, this will include the client input as</div><div class='del'>-    #              echoed by the host; otherwise, it only includes server</div><div class='del'>-    #              responses.  Output is appended verbatim to this file.  </div><div class='del'>-    #              By default, no output log is kept.</div><div class='del'>-    #</div><div class='del'>-    # Dump_log:: as for Output_log, except that output is written in hexdump</div><div class='del'>-    #            format (16 bytes per line as hex pairs, followed by their</div><div class='del'>-    #            printable equivalent), with connection status messages</div><div class='del'>-    #            preceded by '#', sent traffic preceded by '&gt;', and </div><div class='del'>-    #            received traffic preceded by '&lt;'.  By default, not dump log</div><div class='del'>-    #            is kept.</div><div class='del'>-    #</div><div class='del'>-    # Prompt:: a regular expression matching the host's command-line prompt</div><div class='del'>-    #          sequence.  This is needed by the Telnet class to determine</div><div class='del'>-    #          when the output from a command has finished and the host is</div><div class='del'>-    #          ready to receive a new command.  By default, this regular</div><div class='del'>-    #          expression is /[$%#&gt;] \z/n.</div><div class='del'>-    #</div><div class='del'>-    # Telnetmode:: a boolean value, true by default.  In telnet mode, </div><div class='del'>-    #              traffic received from the host is parsed for special</div><div class='del'>-    #              command sequences, and these sequences are escaped</div><div class='del'>-    #              in outgoing traffic sent using #puts() or #print()</div><div class='del'>-    #              (but not #write()).  If you are using the Net::Telnet</div><div class='del'>-    #              object to connect to a non-telnet service (such as</div><div class='del'>-    #              SMTP or POP), this should be set to "false" to prevent</div><div class='del'>-    #              undesired data corruption.  This value can also be set</div><div class='del'>-    #              by the #telnetmode() method.</div><div class='del'>-    #</div><div class='del'>-    # Timeout:: the number of seconds to wait before timing out both the</div><div class='del'>-    #           initial attempt to connect to host (in this constructor),</div><div class='del'>-    #           and all attempts to read data from the host (in #waitfor(),</div><div class='del'>-    #           #cmd(), and #login()).  Exceeding this timeout causes a</div><div class='del'>-    #           TimeoutError to be raised.  The default value is 10 seconds.</div><div class='del'>-    #           You can disable the timeout by setting this value to false.</div><div class='del'>-    #           In this case, the connect attempt will eventually timeout</div><div class='del'>-    #           on the underlying connect(2) socket call with an</div><div class='del'>-    #           Errno::ETIMEDOUT error (but generally only after a few</div><div class='del'>-    #           minutes), but other attempts to read data from the host</div><div class='del'>-    #           will hand indefinitely if no data is forthcoming.</div><div class='del'>-    #</div><div class='del'>-    # Waittime:: the amount of time to wait after seeing what looks like a </div><div class='del'>-    #            prompt (that is, received data that matches the Prompt</div><div class='del'>-    #            option regular expression) to see if more data arrives.</div><div class='del'>-    #            If more data does arrive in this time, Net::Telnet assumes</div><div class='del'>-    #            that what it saw was not really a prompt.  This is to try to </div><div class='del'>-    #            avoid false matches, but it can also lead to missing real</div><div class='del'>-    #            prompts (if, for instance, a background process writes to</div><div class='del'>-    #            the terminal soon after the prompt is displayed).  By</div><div class='del'>-    #            default, set to 0, meaning not to wait for more data.</div><div class='del'>-    #</div><div class='del'>-    # Proxy:: a proxy object to used instead of opening a direct connection</div><div class='del'>-    #         to the host.  Must be either another Net::Telnet object or</div><div class='del'>-    #         an IO object.  If it is another Net::Telnet object, this </div><div class='del'>-    #         instance will use that one's socket for communication.  If an</div><div class='del'>-    #         IO object, it is used directly for communication.  Any other</div><div class='del'>-    #         kind of object will cause an error to be raised.</div><div class='del'>-    #</div><div class='del'>-    def initialize(options) # :yield: mesg </div><div class='del'>-      @options = options</div><div class='del'>-      @options["Host"]       = "localhost"   unless @options.has_key?("Host")</div><div class='del'>-      @options["Port"]       = 23            unless @options.has_key?("Port")</div><div class='del'>-      @options["Prompt"]     = /[$%#&gt;] \z/n  unless @options.has_key?("Prompt")</div><div class='del'>-      @options["Timeout"]    = 10            unless @options.has_key?("Timeout")</div><div class='del'>-      @options["Waittime"]   = 0             unless @options.has_key?("Waittime")</div><div class='del'>-      unless @options.has_key?("Binmode")</div><div class='del'>-        @options["Binmode"]    = false         </div><div class='del'>-      else</div><div class='del'>-        unless (true == @options["Binmode"] or false == @options["Binmode"])</div><div class='del'>-          raise ArgumentError, "Binmode option must be true or false"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      unless @options.has_key?("Telnetmode")</div><div class='del'>-        @options["Telnetmode"] = true          </div><div class='del'>-      else</div><div class='del'>-        unless (true == @options["Telnetmode"] or false == @options["Telnetmode"])</div><div class='del'>-          raise ArgumentError, "Telnetmode option must be true or false"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @telnet_option = { "SGA" =&gt; false, "BINARY" =&gt; false }</div><div class='del'>-</div><div class='del'>-      if @options.has_key?("Output_log")</div><div class='del'>-        @log = File.open(@options["Output_log"], 'a+')</div><div class='del'>-        @log.sync = true</div><div class='del'>-        @log.binmode</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if @options.has_key?("Dump_log")</div><div class='del'>-        @dumplog = File.open(@options["Dump_log"], 'a+')</div><div class='del'>-        @dumplog.sync = true</div><div class='del'>-        @dumplog.binmode</div><div class='del'>-        def @dumplog.log_dump(dir, x)  # :nodoc:</div><div class='del'>-          len = x.length</div><div class='del'>-          addr = 0</div><div class='del'>-          offset = 0</div><div class='del'>-          while 0 &lt; len</div><div class='del'>-            if len &lt; 16</div><div class='del'>-              line = x[offset, len]</div><div class='del'>-            else</div><div class='del'>-              line = x[offset, 16]</div><div class='del'>-            end</div><div class='del'>-            hexvals = line.unpack('H*')[0]</div><div class='del'>-            hexvals += ' ' * (32 - hexvals.length)</div><div class='del'>-            hexvals = format("%s %s %s %s  " * 4, *hexvals.unpack('a2' * 16))</div><div class='del'>-            line = line.gsub(/[\000-\037\177-\377]/n, '.')</div><div class='del'>-            printf "%s 0x%5.5x: %s%s\n", dir, addr, hexvals, line</div><div class='del'>-            addr += 16</div><div class='del'>-            offset += 16</div><div class='del'>-            len -= 16</div><div class='del'>-          end</div><div class='del'>-          print "\n"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if @options.has_key?("Proxy")</div><div class='del'>-        if @options["Proxy"].kind_of?(Net::Telnet)</div><div class='del'>-          @sock = @options["Proxy"].sock</div><div class='del'>-        elsif @options["Proxy"].kind_of?(IO)</div><div class='del'>-          @sock = @options["Proxy"]</div><div class='del'>-        else</div><div class='del'>-          raise "Error: Proxy must be an instance of Net::Telnet or IO."</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        message = "Trying " + @options["Host"] + "...\n"</div><div class='del'>-        yield(message) if block_given?</div><div class='del'>-        @log.write(message) if @options.has_key?("Output_log")</div><div class='del'>-        @dumplog.log_dump('#', message) if @options.has_key?("Dump_log")</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          if @options["Timeout"] == false</div><div class='del'>-            @sock = TCPSocket.open(@options["Host"], @options["Port"])</div><div class='del'>-          else</div><div class='del'>-            timeout(@options["Timeout"]) do</div><div class='del'>-              @sock = TCPSocket.open(@options["Host"], @options["Port"])</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        rescue TimeoutError</div><div class='del'>-          raise TimeoutError, "timed out while opening a connection to the host"</div><div class='del'>-        rescue</div><div class='del'>-          @log.write($ERROR_INFO.to_s + "\n") if @options.has_key?("Output_log")</div><div class='del'>-          @dumplog.log_dump('#', $ERROR_INFO.to_s + "\n") if @options.has_key?("Dump_log")</div><div class='del'>-          raise</div><div class='del'>-        end</div><div class='del'>-        @sock.sync = true</div><div class='del'>-        @sock.binmode</div><div class='del'>-</div><div class='del'>-        message = "Connected to " + @options["Host"] + ".\n"</div><div class='del'>-        yield(message) if block_given?</div><div class='del'>-        @log.write(message) if @options.has_key?("Output_log")</div><div class='del'>-        @dumplog.log_dump('#', message) if @options.has_key?("Dump_log")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      super(@sock)</div><div class='del'>-    end # initialize</div><div class='del'>-</div><div class='del'>-    # The socket the Telnet object is using.  Note that this object becomes</div><div class='del'>-    # a delegate of the Telnet object, so normally you invoke its methods</div><div class='del'>-    # directly on the Telnet object.</div><div class='del'>-    attr :sock </div><div class='del'>-</div><div class='del'>-    # Set telnet command interpretation on (+mode+ == true) or off</div><div class='del'>-    # (+mode+ == false), or return the current value (+mode+ not</div><div class='del'>-    # provided).  It should be on for true telnet sessions, off if</div><div class='del'>-    # using Net::Telnet to connect to a non-telnet service such</div><div class='del'>-    # as SMTP.</div><div class='del'>-    def telnetmode(mode = nil)</div><div class='del'>-      case mode</div><div class='del'>-      when nil</div><div class='del'>-        @options["Telnetmode"]</div><div class='del'>-      when true, false</div><div class='del'>-        @options["Telnetmode"] = mode</div><div class='del'>-      else</div><div class='del'>-        raise ArgumentError, "argument must be true or false, or missing"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Turn telnet command interpretation on (true) or off (false).  It</div><div class='del'>-    # should be on for true telnet sessions, off if using Net::Telnet</div><div class='del'>-    # to connect to a non-telnet service such as SMTP.</div><div class='del'>-    def telnetmode=(mode)</div><div class='del'>-      if (true == mode or false == mode)</div><div class='del'>-        @options["Telnetmode"] = mode</div><div class='del'>-      else</div><div class='del'>-        raise ArgumentError, "argument must be true or false"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Turn newline conversion on (+mode+ == false) or off (+mode+ == true),</div><div class='del'>-    # or return the current value (+mode+ is not specified).</div><div class='del'>-    def binmode(mode = nil)</div><div class='del'>-      case mode</div><div class='del'>-      when nil</div><div class='del'>-        @options["Binmode"] </div><div class='del'>-      when true, false</div><div class='del'>-        @options["Binmode"] = mode</div><div class='del'>-      else</div><div class='del'>-        raise ArgumentError, "argument must be true or false"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Turn newline conversion on (false) or off (true).</div><div class='del'>-    def binmode=(mode)</div><div class='del'>-      if (true == mode or false == mode)</div><div class='del'>-        @options["Binmode"] = mode</div><div class='del'>-      else</div><div class='del'>-        raise ArgumentError, "argument must be true or false"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Preprocess received data from the host.</div><div class='del'>-    #</div><div class='del'>-    # Performs newline conversion and detects telnet command sequences.</div><div class='del'>-    # Called automatically by #waitfor().  You should only use this </div><div class='del'>-    # method yourself if you have read input directly using sysread()</div><div class='del'>-    # or similar, and even then only if in telnet mode.</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}]</div><div class='del'>-                     [#{OPT_BINARY}-#{OPT_NEW_ENVIRON}#{OPT_EXOPL}]|</div><div class='del'>-                   #{SB}[^#{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'>-          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'>-        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'>-    # Read data from the host until a certain sequence is matched.</div><div class='del'>-    #</div><div class='del'>-    # If a block is given, the received data will be yielded as it</div><div class='del'>-    # is read in (not necessarily all in one go), or nil if EOF </div><div class='del'>-    # occurs before any data is received.  Whether a block is given</div><div class='del'>-    # or not, all data read will be returned in a single string, or again </div><div class='del'>-    # nil if EOF occurs before any data is received.  Note that</div><div class='del'>-    # received data includes the matched sequence we were looking for.</div><div class='del'>-    #</div><div class='del'>-    # +options+ can be either a regular expression or a hash of options.</div><div class='del'>-    # If a regular expression, this specifies the data to wait for.</div><div class='del'>-    # If a hash, this can specify the following options:</div><div class='del'>-    #</div><div class='del'>-    # Match:: a regular expression, specifying the data to wait for.</div><div class='del'>-    # Prompt:: as for Match; used only if Match is not specified.</div><div class='del'>-    # String:: as for Match, except a string that will be converted</div><div class='del'>-    #          into a regular expression.  Used only if Match and</div><div class='del'>-    #          Prompt are not specified.</div><div class='del'>-    # Timeout:: the number of seconds to wait for data from the host</div><div class='del'>-    #           before raising a TimeoutError.  If set to false, </div><div class='del'>-    #           no timeout will occur.  If not specified, the</div><div class='del'>-    #           Timeout option value specified when this instance</div><div class='del'>-    #           was created will be used, or, failing that, the</div><div class='del'>-    #           default value of 10 seconds.</div><div class='del'>-    # Waittime:: the number of seconds to wait after matching against</div><div class='del'>-    #            the input data to see if more data arrives.  If more</div><div class='del'>-    #            data arrives within this time, we will judge ourselves</div><div class='del'>-    #            not to have matched successfully, and will continue</div><div class='del'>-    #            trying to match.  If not specified, the Waittime option</div><div class='del'>-    #            value specified when this instance was created will be</div><div class='del'>-    #            used, or, failing that, the default value of 0 seconds,</div><div class='del'>-    #            which means not to wait for more input.</div><div class='del'>-    # FailEOF:: if true, when the remote end closes the connection then an</div><div class='del'>-    #           EOFError will be raised. Otherwise, defaults to the old</div><div class='del'>-    #           behaviour that the function will return whatever data</div><div class='del'>-    #           has been received already, or nil if nothing was received.</div><div class='del'>-    #           </div><div class='del'>-    def waitfor(options) # :yield: recvdata</div><div class='del'>-      time_out = @options["Timeout"]</div><div class='del'>-      waittime = @options["Waittime"]</div><div class='del'>-      fail_eof = @options["FailEOF"]</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'>-        fail_eof = options["FailEOF"]  if options.has_key?("FailEOF")</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 = ''</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 while waiting for more data"</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          c = @sock.readpartial(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'>-            c = rest + c</div><div class='del'>-            if Integer(c.rindex(/#{IAC}#{SE}/no)) &lt;</div><div class='del'>-               Integer(c.rindex(/#{IAC}#{SB}/no))</div><div class='del'>-              buf = preprocess(c[0 ... c.rindex(/#{IAC}#{SB}/no)])</div><div class='del'>-              rest = c[c.rindex(/#{IAC}#{SB}/no) .. -1]</div><div class='del'>-            elsif pt = c.rindex(/#{IAC}[^#{IAC}#{AO}#{AYT}#{DM}#{IP}#{NOP}]?\z/no) ||</div><div class='del'>-                       c.rindex(/\r\z/no)</div><div class='del'>-              buf = preprocess(c[0 ... pt])</div><div class='del'>-              rest = c[pt .. -1]</div><div class='del'>-            else</div><div class='del'>-              buf = preprocess(c)</div><div class='del'>-              rest = ''</div><div class='del'>-            end</div><div class='del'>-         else</div><div class='del'>-           # Not Telnetmode.</div><div class='del'>-           #</div><div class='del'>-           # We cannot use preprocess() on this data, because that</div><div class='del'>-           # method makes some Telnetmode-specific assumptions.</div><div class='del'>-           buf = rest + c</div><div class='del'>-           rest = ''</div><div class='del'>-           unless @options["Binmode"]</div><div class='del'>-             if pt = buf.rindex(/\r\z/no)</div><div class='del'>-               buf = buf[0 ... pt]</div><div class='del'>-               rest = buf[pt .. -1]</div><div class='del'>-             end</div><div class='del'>-             buf.gsub!(/#{EOL}/no, "\n")</div><div class='del'>-           end</div><div class='del'>-          end</div><div class='del'>-          @log.print(buf) if @options.has_key?("Output_log")</div><div class='del'>-          line += buf</div><div class='del'>-          yield buf if block_given?</div><div class='del'>-        rescue EOFError # End of file reached</div><div class='del'>-          raise if fail_eof</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'>-    # Write +string+ to the host.</div><div class='del'>-    #</div><div class='del'>-    # Does not perform any conversions on +string+.  Will log +string+ to the</div><div class='del'>-    # dumplog, if the Dump_log option is set.</div><div class='del'>-    def write(string)</div><div class='del'>-      length = string.length</div><div class='del'>-      while 0 &lt; length</div><div class='del'>-        IO::select(nil, [@sock])</div><div class='del'>-        @dumplog.log_dump('&gt;', string[-length..-1]) if @options.has_key?("Dump_log")</div><div class='del'>-        length -= @sock.syswrite(string[-length..-1])</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a string to the host.</div><div class='del'>-    #</div><div class='del'>-    # This does _not_ automatically append a newline to the string.  Embedded</div><div class='del'>-    # newlines may be converted and telnet command sequences escaped </div><div class='del'>-    # depending upon the values of telnetmode, binmode, and telnet options</div><div class='del'>-    # set by the host.</div><div class='del'>-    def print(string)</div><div class='del'>-      string = string.gsub(/#{IAC}/no, IAC + IAC) if @options["Telnetmode"]</div><div class='del'>-</div><div class='del'>-      if @options["Binmode"]</div><div class='del'>-        self.write(string)</div><div class='del'>-      else</div><div class='del'>-        if @telnet_option["BINARY"] and @telnet_option["SGA"]</div><div class='del'>-          # IAC WILL SGA IAC DO BIN send EOL --&gt; CR</div><div class='del'>-          self.write(string.gsub(/\n/n, CR))</div><div class='del'>-        elsif @telnet_option["SGA"]</div><div class='del'>-          # IAC WILL SGA send EOL --&gt; CR+NULL</div><div class='del'>-          self.write(string.gsub(/\n/n, CR + NULL))</div><div class='del'>-        else</div><div class='del'>-          # NONE send EOL --&gt; CR+LF</div><div class='del'>-          self.write(string.gsub(/\n/n, EOL))</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sends a string to the host.</div><div class='del'>-    #</div><div class='del'>-    # Same as #print(), but appends a newline to the string.</div><div class='del'>-    def puts(string)</div><div class='del'>-      self.print(string + "\n")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Send a command to the host.</div><div class='del'>-    #</div><div class='del'>-    # More exactly, sends a string to the host, and reads in all received</div><div class='del'>-    # data until is sees the prompt or other matched sequence.</div><div class='del'>-    #</div><div class='del'>-    # If a block is given, the received data will be yielded to it as</div><div class='del'>-    # it is read in.  Whether a block is given or not, the received data </div><div class='del'>-    # will be return as a string.  Note that the received data includes</div><div class='del'>-    # the prompt and in most cases the host's echo of our command.</div><div class='del'>-    #</div><div class='del'>-    # +options+ is either a String, specified the string or command to</div><div class='del'>-    # send to the host; or it is a hash of options.  If a hash, the</div><div class='del'>-    # following options can be specified:</div><div class='del'>-    #</div><div class='del'>-    # String:: the command or other string to send to the host.</div><div class='del'>-    # Match:: a regular expression, the sequence to look for in</div><div class='del'>-    #         the received data before returning.  If not specified,</div><div class='del'>-    #         the Prompt option value specified when this instance</div><div class='del'>-    #         was created will be used, or, failing that, the default</div><div class='del'>-    #         prompt of /[$%#&gt;] \z/n.</div><div class='del'>-    # Timeout:: the seconds to wait for data from the host before raising</div><div class='del'>-    #           a Timeout error.  If not specified, the Timeout option</div><div class='del'>-    #           value specified when this instance was created will be</div><div class='del'>-    #           used, or, failing that, the default value of 10 seconds.</div><div class='del'>-    #</div><div class='del'>-    # The command or other string will have the newline sequence appended</div><div class='del'>-    # to it.</div><div class='del'>-    def cmd(options) # :yield: recvdata</div><div class='del'>-      match    = @options["Prompt"]</div><div class='del'>-      time_out = @options["Timeout"]</div><div class='del'>-</div><div class='del'>-      if options.kind_of?(Hash)</div><div class='del'>-        string   = options["String"]</div><div class='del'>-        match    = options["Match"]   if options.has_key?("Match")</div><div class='del'>-        time_out = options["Timeout"] if options.has_key?("Timeout")</div><div class='del'>-      else</div><div class='del'>-        string = options</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      self.puts(string)</div><div class='del'>-      if block_given?</div><div class='del'>-        waitfor({"Prompt" =&gt; match, "Timeout" =&gt; time_out}){|c| yield c }</div><div class='del'>-      else</div><div class='del'>-        waitfor({"Prompt" =&gt; match, "Timeout" =&gt; time_out})</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Login to the host with a given username and password.</div><div class='del'>-    #</div><div class='del'>-    # The username and password can either be provided as two string</div><div class='del'>-    # arguments in that order, or as a hash with keys "Name" and</div><div class='del'>-    # "Password".    </div><div class='del'>-    #</div><div class='del'>-    # This method looks for the strings "login" and "Password" from the</div><div class='del'>-    # host to determine when to send the username and password.  If the</div><div class='del'>-    # login sequence does not follow this pattern (for instance, you</div><div class='del'>-    # are connecting to a service other than telnet), you will need</div><div class='del'>-    # to handle login yourself.</div><div class='del'>-    #</div><div class='del'>-    # The password can be omitted, either by only</div><div class='del'>-    # provided one String argument, which will be used as the username,</div><div class='del'>-    # or by providing a has that has no "Password" key.  In this case,</div><div class='del'>-    # the method will not look for the "Password:" prompt; if it is</div><div class='del'>-    # sent, it will have to be dealt with by later calls.</div><div class='del'>-    #</div><div class='del'>-    # The method returns all data received during the login process from</div><div class='del'>-    # the host, including the echoed username but not the password (which</div><div class='del'>-    # the host should not echo).  If a block is passed in, this received</div><div class='del'>-    # data is also yielded to the block as it is received.</div><div class='del'>-    def login(options, password = nil) # :yield: recvdata</div><div class='del'>-      login_prompt = /[Ll]ogin[: ]*\z/n</div><div class='del'>-      password_prompt = /[Pp]ass(?:word|phrase)[: ]*\z/n</div><div class='del'>-      if options.kind_of?(Hash)</div><div class='del'>-        username = options["Name"]</div><div class='del'>-        password = options["Password"]</div><div class='del'>-	login_prompt = options["LoginPrompt"] if options["LoginPrompt"]</div><div class='del'>-	password_prompt = options["PasswordPrompt"] if options["PasswordPrompt"]</div><div class='del'>-      else</div><div class='del'>-        username = options</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if block_given?</div><div class='del'>-        line = waitfor(login_prompt){|c| yield c }</div><div class='del'>-        if password</div><div class='del'>-          line += cmd({"String" =&gt; username,</div><div class='del'>-                       "Match" =&gt; password_prompt}){|c| yield c }</div><div class='del'>-          line += cmd(password){|c| yield c }</div><div class='del'>-        else</div><div class='del'>-          line += cmd(username){|c| yield c }</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        line = waitfor(login_prompt)</div><div class='del'>-        if password</div><div class='del'>-          line += cmd({"String" =&gt; username,</div><div class='del'>-                       "Match" =&gt; password_prompt})</div><div class='del'>-          line += cmd(password)</div><div class='del'>-        else</div><div class='del'>-          line += cmd(username)</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'>-  end  # class Telnet</div><div class='del'>-end  # module Net</div><div class='del'>-</div><div class='head'>diff --git a/lib/observer.rb b/lib/observer.rb<br/>deleted file mode 100644<br/>index 64c7d81351..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/observer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/observer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,192 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# observer.rb implements the _Observer_ object-oriented design pattern.  The</div><div class='del'>-# following documentation is copied, with modifications, from "Programming</div><div class='del'>-# Ruby", by Hunt and Thomas; http://www.rubycentral.com/book/lib_patterns.html.</div><div class='del'>-#</div><div class='del'>-# == About</div><div class='del'>-#</div><div class='del'>-# The Observer pattern, also known as Publish/Subscribe, provides a simple</div><div class='del'>-# mechanism for one object to inform a set of interested third-party objects</div><div class='del'>-# when its state changes. </div><div class='del'>-#</div><div class='del'>-# == Mechanism</div><div class='del'>-#</div><div class='del'>-# In the Ruby implementation, the notifying class mixes in the +Observable+</div><div class='del'>-# module, which provides the methods for managing the associated observer</div><div class='del'>-# objects.</div><div class='del'>-#</div><div class='del'>-# The observers must implement the +update+ method to receive notifications.</div><div class='del'>-#</div><div class='del'>-# The observable object must:</div><div class='del'>-# * assert that it has +changed+</div><div class='del'>-# * call +notify_observers+</div><div class='del'>-#</div><div class='del'>-# == Example</div><div class='del'>-#</div><div class='del'>-# The following example demonstrates this nicely.  A +Ticker+, when run,</div><div class='del'>-# continually receives the stock +Price+ for its +@symbol+.  A +Warner+ is a</div><div class='del'>-# general observer of the price, and two warners are demonstrated, a +WarnLow+</div><div class='del'>-# and a +WarnHigh+, which print a warning if the price is below or above their</div><div class='del'>-# set limits, respectively.</div><div class='del'>-#</div><div class='del'>-# The +update+ callback allows the warners to run without being explicitly</div><div class='del'>-# called.  The system is set up with the +Ticker+ and several observers, and the</div><div class='del'>-# observers do their duty without the top-level code having to interfere.</div><div class='del'>-#</div><div class='del'>-# Note that the contract between publisher and subscriber (observable and</div><div class='del'>-# observer) is not declared or enforced.  The +Ticker+ publishes a time and a</div><div class='del'>-# price, and the warners receive that.  But if you don't ensure that your</div><div class='del'>-# contracts are correct, nothing else can warn you.</div><div class='del'>-#</div><div class='del'>-#   require "observer"</div><div class='del'>-#   </div><div class='del'>-#   class Ticker          ### Periodically fetch a stock price.</div><div class='del'>-#     include Observable</div><div class='del'>-#   </div><div class='del'>-#     def initialize(symbol)</div><div class='del'>-#       @symbol = symbol</div><div class='del'>-#     end</div><div class='del'>-#   </div><div class='del'>-#     def run</div><div class='del'>-#       lastPrice = nil</div><div class='del'>-#       loop do</div><div class='del'>-#         price = Price.fetch(@symbol)</div><div class='del'>-#         print "Current price: #{price}\n"</div><div class='del'>-#         if price != lastPrice</div><div class='del'>-#           changed                 # notify observers</div><div class='del'>-#           lastPrice = price</div><div class='del'>-#           notify_observers(Time.now, price)</div><div class='del'>-#         end</div><div class='del'>-#         sleep 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 Price           ### A mock class to fetch a stock price (60 - 140).</div><div class='del'>-#     def Price.fetch(symbol)</div><div class='del'>-#       60 + rand(80)</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-#   </div><div class='del'>-#   class Warner          ### An abstract observer of Ticker objects.</div><div class='del'>-#     def initialize(ticker, limit)</div><div class='del'>-#       @limit = limit</div><div class='del'>-#       ticker.add_observer(self)</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-#   </div><div class='del'>-#   class WarnLow &lt; Warner</div><div class='del'>-#     def update(time, price)       # callback for observer</div><div class='del'>-#       if price &lt; @limit</div><div class='del'>-#         print "--- #{time.to_s}: Price below #@limit: #{price}\n"</div><div class='del'>-#       end</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-#   </div><div class='del'>-#   class WarnHigh &lt; Warner</div><div class='del'>-#     def update(time, price)       # callback for observer</div><div class='del'>-#       if price &gt; @limit</div><div class='del'>-#         print "+++ #{time.to_s}: Price above #@limit: #{price}\n"</div><div class='del'>-#       end</div><div class='del'>-#     end</div><div class='del'>-#   end</div><div class='del'>-#</div><div class='del'>-#   ticker = Ticker.new("MSFT")</div><div class='del'>-#   WarnLow.new(ticker, 80)</div><div class='del'>-#   WarnHigh.new(ticker, 120)</div><div class='del'>-#   ticker.run</div><div class='del'>-#</div><div class='del'>-# Produces:</div><div class='del'>-#</div><div class='del'>-#   Current price: 83</div><div class='del'>-#   Current price: 75</div><div class='del'>-#   --- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 75</div><div class='del'>-#   Current price: 90</div><div class='del'>-#   Current price: 134</div><div class='del'>-#   +++ Sun Jun 09 00:10:25 CDT 2002: Price above 120: 134</div><div class='del'>-#   Current price: 134</div><div class='del'>-#   Current price: 112</div><div class='del'>-#   Current price: 79</div><div class='del'>-#   --- Sun Jun 09 00:10:25 CDT 2002: Price below 80: 79</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Implements the Observable design pattern as a mixin so that other objects can</div><div class='del'>-# be notified of changes in state.  See observer.rb for details and an example.</div><div class='del'>-#</div><div class='del'>-module Observable</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Add +observer+ as an observer on this object. +observer+ will now receive</div><div class='del'>-  # notifications.</div><div class='del'>-  #</div><div class='del'>-  def add_observer(observer)</div><div class='del'>-    @observer_peers = [] unless defined? @observer_peers</div><div class='del'>-    unless observer.respond_to? :update</div><div class='del'>-      raise NoMethodError, "observer needs to respond to `update'" </div><div class='del'>-    end</div><div class='del'>-    @observer_peers.push observer</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Delete +observer+ as an observer on this object. It will no longer receive</div><div class='del'>-  # notifications.</div><div class='del'>-  #</div><div class='del'>-  def delete_observer(observer)</div><div class='del'>-    @observer_peers.delete observer if defined? @observer_peers</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Delete all observers associated with this object.</div><div class='del'>-  #</div><div class='del'>-  def delete_observers</div><div class='del'>-    @observer_peers.clear if defined? @observer_peers</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Return the number of observers associated with this object.</div><div class='del'>-  #</div><div class='del'>-  def count_observers</div><div class='del'>-    if defined? @observer_peers</div><div class='del'>-      @observer_peers.size</div><div class='del'>-    else</div><div class='del'>-      0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Set the changed state of this object.  Notifications will be sent only if</div><div class='del'>-  # the changed +state+ is +true+.</div><div class='del'>-  #</div><div class='del'>-  def changed(state=true)</div><div class='del'>-    @observer_state = state</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Query the changed state of this object.</div><div class='del'>-  #</div><div class='del'>-  def changed?</div><div class='del'>-    if defined? @observer_state and @observer_state</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'>-  #</div><div class='del'>-  # If this object's changed state is +true+, invoke the update method in each</div><div class='del'>-  # currently associated observer in turn, passing it the given arguments. The</div><div class='del'>-  # changed state is then set to +false+.</div><div class='del'>-  #</div><div class='del'>-  def notify_observers(*arg)</div><div class='del'>-    if defined? @observer_state and @observer_state</div><div class='del'>-      if defined? @observer_peers</div><div class='del'>-	for i in @observer_peers.dup</div><div class='del'>-	  i.update(*arg)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      @observer_state = false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/open-uri.rb b/lib/open-uri.rb<br/>deleted file mode 100644<br/>index 54b42f336f..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/open-uri.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/open-uri.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,678 +0,0 @@</div><div class='del'>-require 'uri'</div><div class='del'>-require 'stringio'</div><div class='del'>-require 'time'</div><div class='del'>-</div><div class='del'>-module Kernel</div><div class='del'>-  private</div><div class='del'>-  alias open_uri_original_open open # :nodoc:</div><div class='del'>-</div><div class='del'>-  # makes possible to open various resources including URIs.</div><div class='del'>-  # If the first argument respond to `open' method,</div><div class='del'>-  # the method is called with the rest arguments.</div><div class='del'>-  #</div><div class='del'>-  # If the first argument is a string which begins with xxx://,</div><div class='del'>-  # it is parsed by URI.parse.  If the parsed object respond to `open' method,</div><div class='del'>-  # the method is called with the rest arguments.</div><div class='del'>-  #</div><div class='del'>-  # Otherwise original open is called.</div><div class='del'>-  #</div><div class='del'>-  # Since open-uri.rb provides URI::HTTP#open, URI::HTTPS#open and</div><div class='del'>-  # URI::FTP#open,</div><div class='del'>-  # Kernel[#.]open can accepts such URIs and strings which begins with</div><div class='del'>-  # http://, https:// and ftp://.</div><div class='del'>-  # In these case, the opened file object is extended by OpenURI::Meta.</div><div class='del'>-  def open(name, *rest, &amp;block) # :doc:</div><div class='del'>-    if name.respond_to?(:open)</div><div class='del'>-      name.open(*rest, &amp;block)</div><div class='del'>-    elsif name.respond_to?(:to_str) &amp;&amp;</div><div class='del'>-          %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ name &amp;&amp;</div><div class='del'>-          (uri = URI.parse(name)).respond_to?(:open)</div><div class='del'>-      uri.open(*rest, &amp;block)</div><div class='del'>-    else</div><div class='del'>-      open_uri_original_open(name, *rest, &amp;block)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  module_function :open</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# OpenURI is an easy-to-use wrapper for net/http, net/https and net/ftp.</div><div class='del'>-#</div><div class='del'>-#== Example</div><div class='del'>-#</div><div class='del'>-# It is possible to open http/https/ftp URL as usual like opening a file:</div><div class='del'>-#</div><div class='del'>-#   open("http://www.ruby-lang.org/") {|f|</div><div class='del'>-#     f.each_line {|line| p line}</div><div class='del'>-#   }</div><div class='del'>-#</div><div class='del'>-# The opened file has several methods for meta information as follows since</div><div class='del'>-# it is extended by OpenURI::Meta.</div><div class='del'>-#</div><div class='del'>-#   open("http://www.ruby-lang.org/en") {|f|</div><div class='del'>-#     f.each_line {|line| p line}</div><div class='del'>-#     p f.base_uri         # &lt;URI::HTTP:0x40e6ef2 URL:http://www.ruby-lang.org/en/&gt;</div><div class='del'>-#     p f.content_type     # "text/html"</div><div class='del'>-#     p f.charset          # "iso-8859-1"</div><div class='del'>-#     p f.content_encoding # []</div><div class='del'>-#     p f.last_modified    # Thu Dec 05 02:45:02 UTC 2002</div><div class='del'>-#   }</div><div class='del'>-#</div><div class='del'>-# Additional header fields can be specified by an optional hash argument.</div><div class='del'>-#</div><div class='del'>-#   open("http://www.ruby-lang.org/en/",</div><div class='del'>-#     "User-Agent" =&gt; "Ruby/#{RUBY_VERSION}",</div><div class='del'>-#     "From" =&gt; "foo@bar.invalid",</div><div class='del'>-#     "Referer" =&gt; "http://www.ruby-lang.org/") {|f|</div><div class='del'>-#     # ...</div><div class='del'>-#   }</div><div class='del'>-#</div><div class='del'>-# The environment variables such as http_proxy, https_proxy and ftp_proxy</div><div class='del'>-# are in effect by default.  :proxy =&gt; nil disables proxy.</div><div class='del'>-#</div><div class='del'>-#   open("http://www.ruby-lang.org/en/raa.html", :proxy =&gt; nil) {|f|</div><div class='del'>-#     # ...</div><div class='del'>-#   }</div><div class='del'>-#</div><div class='del'>-# URI objects can be opened in a similar way.</div><div class='del'>-#</div><div class='del'>-#   uri = URI.parse("http://www.ruby-lang.org/en/")</div><div class='del'>-#   uri.open {|f|</div><div class='del'>-#     # ...</div><div class='del'>-#   }</div><div class='del'>-#</div><div class='del'>-# URI objects can be read directly. The returned string is also extended by</div><div class='del'>-# OpenURI::Meta.</div><div class='del'>-#</div><div class='del'>-#   str = uri.read</div><div class='del'>-#   p str.base_uri</div><div class='del'>-#</div><div class='del'>-# Author:: Tanaka Akira &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-module OpenURI</div><div class='del'>-  Options = {</div><div class='del'>-    :proxy =&gt; true,</div><div class='del'>-    :progress_proc =&gt; true,</div><div class='del'>-    :content_length_proc =&gt; true,</div><div class='del'>-    :http_basic_authentication =&gt; true,</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def OpenURI.check_options(options) # :nodoc:</div><div class='del'>-    options.each {|k, v|</div><div class='del'>-      next unless Symbol === k</div><div class='del'>-      unless Options.include? k</div><div class='del'>-        raise ArgumentError, "unrecognized option: #{k}"</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def OpenURI.scan_open_optional_arguments(*rest) # :nodoc:</div><div class='del'>-    if !rest.empty? &amp;&amp; (String === rest.first || Integer === rest.first)</div><div class='del'>-      mode = rest.shift</div><div class='del'>-      if !rest.empty? &amp;&amp; Integer === rest.first</div><div class='del'>-        perm = rest.shift</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    return mode, perm, rest</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def OpenURI.open_uri(name, *rest) # :nodoc:</div><div class='del'>-    uri = URI::Generic === name ? name : URI.parse(name)</div><div class='del'>-    mode, perm, rest = OpenURI.scan_open_optional_arguments(*rest)</div><div class='del'>-    options = rest.shift if !rest.empty? &amp;&amp; Hash === rest.first</div><div class='del'>-    raise ArgumentError.new("extra arguments") if !rest.empty?</div><div class='del'>-    options ||= {}</div><div class='del'>-    OpenURI.check_options(options)</div><div class='del'>-</div><div class='del'>-    unless mode == nil ||</div><div class='del'>-           mode == 'r' || mode == 'rb' ||</div><div class='del'>-           mode == File::RDONLY</div><div class='del'>-      raise ArgumentError.new("invalid access mode #{mode} (#{uri.class} resource is read only.)")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    io = open_loop(uri, options)</div><div class='del'>-    if block_given?</div><div class='del'>-      begin</div><div class='del'>-        yield io</div><div class='del'>-      ensure</div><div class='del'>-        io.close</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      io</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def OpenURI.open_loop(uri, options) # :nodoc:</div><div class='del'>-    case opt_proxy = options.fetch(:proxy, true)</div><div class='del'>-    when true</div><div class='del'>-      find_proxy = lambda {|u| u.find_proxy}</div><div class='del'>-    when nil, false</div><div class='del'>-      find_proxy = lambda {|u| nil}</div><div class='del'>-    when String</div><div class='del'>-      opt_proxy = URI.parse(opt_proxy)</div><div class='del'>-      find_proxy = lambda {|u| opt_proxy}</div><div class='del'>-    when URI::Generic</div><div class='del'>-      find_proxy = lambda {|u| opt_proxy}</div><div class='del'>-    else</div><div class='del'>-      raise ArgumentError.new("Invalid proxy option: #{opt_proxy}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    uri_set = {}</div><div class='del'>-    buf = nil</div><div class='del'>-    while true</div><div class='del'>-      redirect = catch(:open_uri_redirect) {</div><div class='del'>-        buf = Buffer.new</div><div class='del'>-        uri.buffer_open(buf, find_proxy.call(uri), options)</div><div class='del'>-        nil</div><div class='del'>-      }</div><div class='del'>-      if redirect</div><div class='del'>-        if redirect.relative?</div><div class='del'>-          # Although it violates RFC2616, Location: field may have relative</div><div class='del'>-          # URI.  It is converted to absolute URI using uri as a base URI.</div><div class='del'>-          redirect = uri + redirect</div><div class='del'>-        end</div><div class='del'>-        unless OpenURI.redirectable?(uri, redirect)</div><div class='del'>-          raise "redirection forbidden: #{uri} -&gt; #{redirect}"</div><div class='del'>-        end</div><div class='del'>-        if options.include? :http_basic_authentication</div><div class='del'>-          # send authentication only for the URI directly specified.</div><div class='del'>-          options = options.dup</div><div class='del'>-          options.delete :http_basic_authentication</div><div class='del'>-        end</div><div class='del'>-        uri = redirect</div><div class='del'>-        raise "HTTP redirection loop: #{uri}" if uri_set.include? uri.to_s</div><div class='del'>-        uri_set[uri.to_s] = true</div><div class='del'>-      else</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    io = buf.io</div><div class='del'>-    io.base_uri = uri</div><div class='del'>-    io</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def OpenURI.redirectable?(uri1, uri2) # :nodoc:</div><div class='del'>-    # This test is intended to forbid a redirection from http://... to</div><div class='del'>-    # file:///etc/passwd.</div><div class='del'>-    # However this is ad hoc.  It should be extensible/configurable.</div><div class='del'>-    uri1.scheme.downcase == uri2.scheme.downcase ||</div><div class='del'>-    (/\A(?:http|ftp)\z/i =~ uri1.scheme &amp;&amp; /\A(?:http|ftp)\z/i =~ uri2.scheme)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def OpenURI.open_http(buf, target, proxy, options) # :nodoc:</div><div class='del'>-    if proxy</div><div class='del'>-      raise "Non-HTTP proxy URI: #{proxy}" if proxy.class != URI::HTTP</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if target.userinfo &amp;&amp; "1.9.0" &lt;= RUBY_VERSION</div><div class='del'>-      # don't raise for 1.8 because compatibility.</div><div class='del'>-      raise ArgumentError, "userinfo not supported.  [RFC3986]"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    require 'net/http'</div><div class='del'>-    klass = Net::HTTP</div><div class='del'>-    if URI::HTTP === target</div><div class='del'>-      # HTTP or HTTPS</div><div class='del'>-      if proxy</div><div class='del'>-        klass = Net::HTTP::Proxy(proxy.host, proxy.port)</div><div class='del'>-      end</div><div class='del'>-      target_host = target.host</div><div class='del'>-      target_port = target.port</div><div class='del'>-      request_uri = target.request_uri</div><div class='del'>-    else</div><div class='del'>-      # FTP over HTTP proxy</div><div class='del'>-      target_host = proxy.host</div><div class='del'>-      target_port = proxy.port</div><div class='del'>-      request_uri = target.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    http = klass.new(target_host, target_port)</div><div class='del'>-    if target.class == URI::HTTPS</div><div class='del'>-      require 'net/https'</div><div class='del'>-      http.use_ssl = true</div><div class='del'>-      http.verify_mode = OpenSSL::SSL::VERIFY_PEER</div><div class='del'>-      store = OpenSSL::X509::Store.new</div><div class='del'>-      store.set_default_paths</div><div class='del'>-      http.cert_store = store</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    header = {}</div><div class='del'>-    options.each {|k, v| header[k] = v if String === k }</div><div class='del'>-</div><div class='del'>-    resp = nil</div><div class='del'>-    http.start {</div><div class='del'>-      req = Net::HTTP::Get.new(request_uri, header)</div><div class='del'>-      if options.include? :http_basic_authentication</div><div class='del'>-        user, pass = options[:http_basic_authentication]</div><div class='del'>-        req.basic_auth user, pass</div><div class='del'>-      end</div><div class='del'>-      http.request(req) {|response|</div><div class='del'>-        resp = response</div><div class='del'>-        if options[:content_length_proc] &amp;&amp; Net::HTTPSuccess === resp</div><div class='del'>-          if resp.key?('Content-Length')</div><div class='del'>-            options[:content_length_proc].call(resp['Content-Length'].to_i)</div><div class='del'>-          else</div><div class='del'>-            options[:content_length_proc].call(nil)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        resp.read_body {|str|</div><div class='del'>-          buf &lt;&lt; str</div><div class='del'>-          if options[:progress_proc] &amp;&amp; Net::HTTPSuccess === resp</div><div class='del'>-            options[:progress_proc].call(buf.size)</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    io = buf.io</div><div class='del'>-    io.rewind</div><div class='del'>-    io.status = [resp.code, resp.message]</div><div class='del'>-    resp.each {|name,value| buf.io.meta_add_field name, value }</div><div class='del'>-    case resp</div><div class='del'>-    when Net::HTTPSuccess</div><div class='del'>-    when Net::HTTPMovedPermanently, # 301</div><div class='del'>-         Net::HTTPFound, # 302</div><div class='del'>-         Net::HTTPSeeOther, # 303</div><div class='del'>-         Net::HTTPTemporaryRedirect # 307</div><div class='del'>-      throw :open_uri_redirect, URI.parse(resp['location'])</div><div class='del'>-    else</div><div class='del'>-      raise OpenURI::HTTPError.new(io.status.join(' '), io)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HTTPError &lt; StandardError</div><div class='del'>-    def initialize(message, io)</div><div class='del'>-      super(message)</div><div class='del'>-      @io = io</div><div class='del'>-    end</div><div class='del'>-    attr_reader :io</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Buffer # :nodoc:</div><div class='del'>-    def initialize</div><div class='del'>-      @io = StringIO.new</div><div class='del'>-      @size = 0</div><div class='del'>-    end</div><div class='del'>-    attr_reader :size</div><div class='del'>-</div><div class='del'>-    StringMax = 10240</div><div class='del'>-    def &lt;&lt;(str)</div><div class='del'>-      @io &lt;&lt; str</div><div class='del'>-      @size += str.length</div><div class='del'>-      if StringIO === @io &amp;&amp; StringMax &lt; @size</div><div class='del'>-        require 'tempfile'</div><div class='del'>-        io = Tempfile.new('open-uri')</div><div class='del'>-        io.binmode</div><div class='del'>-        Meta.init io, @io if @io.respond_to? :meta</div><div class='del'>-        io &lt;&lt; @io.string</div><div class='del'>-        @io = io</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def io</div><div class='del'>-      Meta.init @io unless @io.respond_to? :meta</div><div class='del'>-      @io</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Mixin for holding meta-information.</div><div class='del'>-  module Meta</div><div class='del'>-    def Meta.init(obj, src=nil) # :nodoc:</div><div class='del'>-      obj.extend Meta</div><div class='del'>-      obj.instance_eval {</div><div class='del'>-        @base_uri = nil</div><div class='del'>-        @meta = {}</div><div class='del'>-      }</div><div class='del'>-      if src</div><div class='del'>-        obj.status = src.status</div><div class='del'>-        obj.base_uri = src.base_uri</div><div class='del'>-        src.meta.each {|name, value|</div><div class='del'>-          obj.meta_add_field(name, value)</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # returns an Array which consists status code and message.</div><div class='del'>-    attr_accessor :status</div><div class='del'>-</div><div class='del'>-    # returns a URI which is base of relative URIs in the data.</div><div class='del'>-    # It may differ from the URI supplied by a user because redirection.</div><div class='del'>-    attr_accessor :base_uri</div><div class='del'>-</div><div class='del'>-    # returns a Hash which represents header fields.</div><div class='del'>-    # The Hash keys are downcased for canonicalization.</div><div class='del'>-    attr_reader :meta</div><div class='del'>-</div><div class='del'>-    def meta_add_field(name, value) # :nodoc:</div><div class='del'>-      @meta[name.downcase] = value</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # returns a Time which represents Last-Modified field.</div><div class='del'>-    def last_modified</div><div class='del'>-      if v = @meta['last-modified']</div><div class='del'>-        Time.httpdate(v)</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'>-    RE_LWS = /[\r\n\t ]+/n</div><div class='del'>-    RE_TOKEN = %r{[^\x00- ()&lt;&gt;@,;:\\"/\[\]?={}\x7f]+}n</div><div class='del'>-    RE_QUOTED_STRING = %r{"(?:[\r\n\t !#-\[\]-~\x80-\xff]|\\[\x00-\x7f])*"}n</div><div class='del'>-    RE_PARAMETERS = %r{(?:;#{RE_LWS}?#{RE_TOKEN}#{RE_LWS}?=#{RE_LWS}?(?:#{RE_TOKEN}|#{RE_QUOTED_STRING})#{RE_LWS}?)*}n</div><div class='del'>-</div><div class='del'>-    def content_type_parse # :nodoc:</div><div class='del'>-      v = @meta['content-type']</div><div class='del'>-      # The last (?:;#{RE_LWS}?)? matches extra ";" which violates RFC2045.</div><div class='del'>-      if v &amp;&amp; %r{\A#{RE_LWS}?(#{RE_TOKEN})#{RE_LWS}?/(#{RE_TOKEN})#{RE_LWS}?(#{RE_PARAMETERS})(?:;#{RE_LWS}?)?\z}no =~ v</div><div class='del'>-        type = $1.downcase</div><div class='del'>-        subtype = $2.downcase</div><div class='del'>-        parameters = []</div><div class='del'>-        $3.scan(/;#{RE_LWS}?(#{RE_TOKEN})#{RE_LWS}?=#{RE_LWS}?(?:(#{RE_TOKEN})|(#{RE_QUOTED_STRING}))/no) {|att, val, qval|</div><div class='del'>-          val = qval.gsub(/[\r\n\t !#-\[\]-~\x80-\xff]+|(\\[\x00-\x7f])/) { $1 ? $1[1,1] : $&amp; } if qval</div><div class='del'>-          parameters &lt;&lt; [att.downcase, val]</div><div class='del'>-        }</div><div class='del'>-        ["#{type}/#{subtype}", *parameters]</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'>-    # returns "type/subtype" which is MIME Content-Type.</div><div class='del'>-    # It is downcased for canonicalization.</div><div class='del'>-    # Content-Type parameters are stripped.</div><div class='del'>-    def content_type</div><div class='del'>-      type, *parameters = content_type_parse</div><div class='del'>-      type || 'application/octet-stream'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # returns a charset parameter in Content-Type field.</div><div class='del'>-    # It is downcased for canonicalization.</div><div class='del'>-    #</div><div class='del'>-    # If charset parameter is not given but a block is given,</div><div class='del'>-    # the block is called and its result is returned.</div><div class='del'>-    # It can be used to guess charset.</div><div class='del'>-    #</div><div class='del'>-    # If charset parameter and block is not given,</div><div class='del'>-    # nil is returned except text type in HTTP.</div><div class='del'>-    # In that case, "iso-8859-1" is returned as defined by RFC2616 3.7.1.</div><div class='del'>-    def charset</div><div class='del'>-      type, *parameters = content_type_parse</div><div class='del'>-      if pair = parameters.assoc('charset')</div><div class='del'>-        pair.last.downcase</div><div class='del'>-      elsif block_given?</div><div class='del'>-        yield</div><div class='del'>-      elsif type &amp;&amp; %r{\Atext/} =~ type &amp;&amp;</div><div class='del'>-            @base_uri &amp;&amp; /\Ahttp\z/i =~ @base_uri.scheme</div><div class='del'>-        "iso-8859-1" # RFC2616 3.7.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'>-    # returns a list of encodings in Content-Encoding field</div><div class='del'>-    # as an Array of String.</div><div class='del'>-    # The encodings are downcased for canonicalization.</div><div class='del'>-    def content_encoding</div><div class='del'>-      v = @meta['content-encoding']</div><div class='del'>-      if v &amp;&amp; %r{\A#{RE_LWS}?#{RE_TOKEN}#{RE_LWS}?(?:,#{RE_LWS}?#{RE_TOKEN}#{RE_LWS}?)*}o =~ v</div><div class='del'>-        v.scan(RE_TOKEN).map {|content_coding| content_coding.downcase}</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'>-  # Mixin for HTTP and FTP URIs.</div><div class='del'>-  module OpenRead</div><div class='del'>-    # OpenURI::OpenRead#open provides `open' for URI::HTTP and URI::FTP.</div><div class='del'>-    #</div><div class='del'>-    # OpenURI::OpenRead#open takes optional 3 arguments as:</div><div class='del'>-    # OpenURI::OpenRead#open([mode [, perm]] [, options]) [{|io| ... }]</div><div class='del'>-    #</div><div class='del'>-    # `mode', `perm' is same as Kernel#open.</div><div class='del'>-    #</div><div class='del'>-    # However, `mode' must be read mode because OpenURI::OpenRead#open doesn't</div><div class='del'>-    # support write mode (yet).</div><div class='del'>-    # Also `perm' is just ignored because it is meaningful only for file</div><div class='del'>-    # creation.</div><div class='del'>-    #</div><div class='del'>-    # `options' must be a hash.</div><div class='del'>-    #</div><div class='del'>-    # Each pairs which key is a string in the hash specify a extra header</div><div class='del'>-    # field for HTTP.</div><div class='del'>-    # I.e. it is ignored for FTP without HTTP proxy.</div><div class='del'>-    #</div><div class='del'>-    # The hash may include other options which key is a symbol:</div><div class='del'>-    #</div><div class='del'>-    # [:proxy]</div><div class='del'>-    #  Synopsis:</div><div class='del'>-    #    :proxy =&gt; "http://proxy.foo.com:8000/"</div><div class='del'>-    #    :proxy =&gt; URI.parse("http://proxy.foo.com:8000/")</div><div class='del'>-    #    :proxy =&gt; true</div><div class='del'>-    #    :proxy =&gt; false</div><div class='del'>-    #    :proxy =&gt; nil</div><div class='del'>-    #   </div><div class='del'>-    #  If :proxy option is specified, the value should be String, URI,</div><div class='del'>-    #  boolean or nil.</div><div class='del'>-    #  When String or URI is given, it is treated as proxy URI.</div><div class='del'>-    #  When true is given or the option itself is not specified,</div><div class='del'>-    #  environment variable `scheme_proxy' is examined.</div><div class='del'>-    #  `scheme' is replaced by `http', `https' or `ftp'.</div><div class='del'>-    #  When false or nil is given, the environment variables are ignored and</div><div class='del'>-    #  connection will be made to a server directly.</div><div class='del'>-    #</div><div class='del'>-    # [:http_basic_authentication]</div><div class='del'>-    #  Synopsis:</div><div class='del'>-    #    :http_basic_authentication=&gt;[user, password]</div><div class='del'>-    #</div><div class='del'>-    #  If :http_basic_authentication is specified,</div><div class='del'>-    #  the value should be an array which contains 2 strings:</div><div class='del'>-    #  username and password.</div><div class='del'>-    #  It is used for HTTP Basic authentication defined by RFC 2617.</div><div class='del'>-    #</div><div class='del'>-    # [:content_length_proc]</div><div class='del'>-    #  Synopsis:</div><div class='del'>-    #    :content_length_proc =&gt; lambda {|content_length| ... }</div><div class='del'>-    # </div><div class='del'>-    #  If :content_length_proc option is specified, the option value procedure</div><div class='del'>-    #  is called before actual transfer is started.</div><div class='del'>-    #  It takes one argument which is expected content length in bytes.</div><div class='del'>-    # </div><div class='del'>-    #  If two or more transfer is done by HTTP redirection, the procedure</div><div class='del'>-    #  is called only one for a last transfer.</div><div class='del'>-    # </div><div class='del'>-    #  When expected content length is unknown, the procedure is called with</div><div class='del'>-    #  nil.</div><div class='del'>-    #  It is happen when HTTP response has no Content-Length header.</div><div class='del'>-    #</div><div class='del'>-    # [:progress_proc]</div><div class='del'>-    #  Synopsis:</div><div class='del'>-    #    :progress_proc =&gt; lambda {|size| ...}</div><div class='del'>-    #</div><div class='del'>-    #  If :progress_proc option is specified, the proc is called with one</div><div class='del'>-    #  argument each time when `open' gets content fragment from network.</div><div class='del'>-    #  The argument `size' `size' is a accumulated transfered size in bytes.</div><div class='del'>-    #</div><div class='del'>-    #  If two or more transfer is done by HTTP redirection, the procedure</div><div class='del'>-    #  is called only one for a last transfer.</div><div class='del'>-    #</div><div class='del'>-    #  :progress_proc and :content_length_proc are intended to be used for</div><div class='del'>-    #  progress bar.</div><div class='del'>-    #  For example, it can be implemented as follows using Ruby/ProgressBar.</div><div class='del'>-    #</div><div class='del'>-    #    pbar = nil</div><div class='del'>-    #    open("http://...",</div><div class='del'>-    #      :content_length_proc =&gt; lambda {|t|</div><div class='del'>-    #        if t &amp;&amp; 0 &lt; t</div><div class='del'>-    #          pbar = ProgressBar.new("...", t)</div><div class='del'>-    #          pbar.file_transfer_mode</div><div class='del'>-    #        end</div><div class='del'>-    #      },</div><div class='del'>-    #      :progress_proc =&gt; lambda {|s|</div><div class='del'>-    #        pbar.set s if pbar</div><div class='del'>-    #      }) {|f| ... }</div><div class='del'>-    #</div><div class='del'>-    # OpenURI::OpenRead#open returns an IO like object if block is not given.</div><div class='del'>-    # Otherwise it yields the IO object and return the value of the block.</div><div class='del'>-    # The IO object is extended with OpenURI::Meta.</div><div class='del'>-    def open(*rest, &amp;block)</div><div class='del'>-      OpenURI.open_uri(self, *rest, &amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # OpenURI::OpenRead#read([options]) reads a content referenced by self and</div><div class='del'>-    # returns the content as string.</div><div class='del'>-    # The string is extended with OpenURI::Meta.</div><div class='del'>-    # The argument `options' is same as OpenURI::OpenRead#open.</div><div class='del'>-    def read(options={})</div><div class='del'>-      self.open(options) {|f|</div><div class='del'>-        str = f.read</div><div class='del'>-        Meta.init str, f</div><div class='del'>-        str</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'>-module URI</div><div class='del'>-  class Generic</div><div class='del'>-    # returns a proxy URI.</div><div class='del'>-    # The proxy URI is obtained from environment variables such as http_proxy,</div><div class='del'>-    # ftp_proxy, no_proxy, etc.</div><div class='del'>-    # If there is no proper proxy, nil is returned.</div><div class='del'>-    #</div><div class='del'>-    # Note that capitalized variables (HTTP_PROXY, FTP_PROXY, NO_PROXY, etc.)</div><div class='del'>-    # are examined too.</div><div class='del'>-    #</div><div class='del'>-    # But http_proxy and HTTP_PROXY is treated specially under CGI environment.</div><div class='del'>-    # It's because HTTP_PROXY may be set by Proxy: header.</div><div class='del'>-    # So HTTP_PROXY is not used.</div><div class='del'>-    # http_proxy is not used too if the variable is case insensitive.</div><div class='del'>-    # CGI_HTTP_PROXY can be used instead.</div><div class='del'>-    def find_proxy</div><div class='del'>-      name = self.scheme.downcase + '_proxy'</div><div class='del'>-      proxy_uri = nil</div><div class='del'>-      if name == 'http_proxy' &amp;&amp; ENV.include?('REQUEST_METHOD') # CGI?</div><div class='del'>-        # HTTP_PROXY conflicts with *_proxy for proxy settings and</div><div class='del'>-        # HTTP_* for header information in CGI.</div><div class='del'>-        # So it should be careful to use it.</div><div class='del'>-        pairs = ENV.reject {|k, v| /\Ahttp_proxy\z/i !~ k }</div><div class='del'>-        case pairs.length</div><div class='del'>-        when 0 # no proxy setting anyway.</div><div class='del'>-          proxy_uri = nil</div><div class='del'>-        when 1</div><div class='del'>-          k, v = pairs.shift</div><div class='del'>-          if k == 'http_proxy' &amp;&amp; ENV[k.upcase] == nil</div><div class='del'>-            # http_proxy is safe to use because ENV is case sensitive.</div><div class='del'>-            proxy_uri = ENV[name]</div><div class='del'>-          else</div><div class='del'>-            proxy_uri = nil</div><div class='del'>-          end</div><div class='del'>-        else # http_proxy is safe to use because ENV is case sensitive.</div><div class='del'>-          proxy_uri = ENV.to_hash[name]</div><div class='del'>-        end</div><div class='del'>-        if !proxy_uri</div><div class='del'>-          # Use CGI_HTTP_PROXY.  cf. libwww-perl.</div><div class='del'>-          proxy_uri = ENV["CGI_#{name.upcase}"]</div><div class='del'>-        end</div><div class='del'>-      elsif name == 'http_proxy'</div><div class='del'>-        unless proxy_uri = ENV[name]</div><div class='del'>-          if proxy_uri = ENV[name.upcase]</div><div class='del'>-            warn 'The environment variable HTTP_PROXY is discouraged.  Use http_proxy.'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        proxy_uri = ENV[name] || ENV[name.upcase]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if proxy_uri &amp;&amp; self.host</div><div class='del'>-        require 'socket'</div><div class='del'>-        begin</div><div class='del'>-          addr = IPSocket.getaddress(self.host)</div><div class='del'>-          proxy_uri = nil if /\A127\.|\A::1\z/ =~ addr</div><div class='del'>-        rescue SocketError</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if proxy_uri</div><div class='del'>-        proxy_uri = URI.parse(proxy_uri)</div><div class='del'>-        name = 'no_proxy'</div><div class='del'>-        if no_proxy = ENV[name] || ENV[name.upcase]</div><div class='del'>-          no_proxy.scan(/([^:,]*)(?::(\d+))?/) {|host, port|</div><div class='del'>-            if /(\A|\.)#{Regexp.quote host}\z/i =~ self.host &amp;&amp;</div><div class='del'>-               (!port || self.port == port.to_i)</div><div class='del'>-              proxy_uri = nil</div><div class='del'>-              break</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        proxy_uri</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'>-</div><div class='del'>-  class HTTP</div><div class='del'>-    def buffer_open(buf, proxy, options) # :nodoc:</div><div class='del'>-      OpenURI.open_http(buf, self, proxy, options)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    include OpenURI::OpenRead</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class FTP</div><div class='del'>-    def buffer_open(buf, proxy, options) # :nodoc:</div><div class='del'>-      if proxy</div><div class='del'>-        OpenURI.open_http(buf, self, proxy, options)</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      require 'net/ftp'</div><div class='del'>-</div><div class='del'>-      directories = self.path.split(%r{/}, -1)</div><div class='del'>-      directories.shift if directories[0] == '' # strip a field before leading slash</div><div class='del'>-      directories.each {|d|</div><div class='del'>-        d.gsub!(/%([0-9A-Fa-f][0-9A-Fa-f])/) { [$1].pack("H2") }</div><div class='del'>-      }</div><div class='del'>-      unless filename = directories.pop</div><div class='del'>-        raise ArgumentError, "no filename: #{self.inspect}"</div><div class='del'>-      end</div><div class='del'>-      directories.each {|d|</div><div class='del'>-        if /[\r\n]/ =~ d</div><div class='del'>-          raise ArgumentError, "invalid directory: #{d.inspect}"</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      if /[\r\n]/ =~ filename</div><div class='del'>-        raise ArgumentError, "invalid filename: #{filename.inspect}"</div><div class='del'>-      end</div><div class='del'>-      typecode = self.typecode</div><div class='del'>-      if typecode &amp;&amp; /\A[aid]\z/ !~ typecode</div><div class='del'>-        raise ArgumentError, "invalid typecode: #{typecode.inspect}"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # The access sequence is defined by RFC 1738</div><div class='del'>-      ftp = Net::FTP.open(self.host)</div><div class='del'>-      # todo: extract user/passwd from .netrc.</div><div class='del'>-      user = 'anonymous'</div><div class='del'>-      passwd = nil</div><div class='del'>-      user, passwd = self.userinfo.split(/:/) if self.userinfo</div><div class='del'>-      ftp.login(user, passwd)</div><div class='del'>-      directories.each {|cwd|</div><div class='del'>-        ftp.voidcmd("CWD #{cwd}")</div><div class='del'>-      }</div><div class='del'>-      if typecode</div><div class='del'>-        # xxx: typecode D is not handled.</div><div class='del'>-        ftp.voidcmd("TYPE #{typecode.upcase}")</div><div class='del'>-      end</div><div class='del'>-      if options[:content_length_proc]</div><div class='del'>-        options[:content_length_proc].call(ftp.size(filename))</div><div class='del'>-      end</div><div class='del'>-      ftp.retrbinary("RETR #{filename}", 4096) { |str|</div><div class='del'>-        buf &lt;&lt; str</div><div class='del'>-        options[:progress_proc].call(buf.size) if options[:progress_proc]</div><div class='del'>-      }</div><div class='del'>-      ftp.close</div><div class='del'>-      buf.io.rewind</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    include OpenURI::OpenRead</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/open3.rb b/lib/open3.rb<br/>deleted file mode 100644<br/>index c4dacc9473..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/open3.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/open3.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,101 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = open3.rb: Popen, but with stderr, too</div><div class='del'>-#</div><div class='del'>-# Author:: Yukihiro Matsumoto</div><div class='del'>-# Documentation:: Konrad Meyer</div><div class='del'>-#</div><div class='del'>-# Open3 gives you access to stdin, stdout, and stderr when running other</div><div class='del'>-# programs.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Open3 grants you access to stdin, stdout, and stderr when running another</div><div class='del'>-# program. Example:</div><div class='del'>-#</div><div class='del'>-#   require "open3"</div><div class='del'>-#   include Open3</div><div class='del'>-#   </div><div class='del'>-#   stdin, stdout, stderr = popen3('nroff -man')</div><div class='del'>-#</div><div class='del'>-# Open3.popen3 can also take a block which will receive stdin, stdout and</div><div class='del'>-# stderr as parameters.  This ensures stdin, stdout and stderr are closed</div><div class='del'>-# once the block exits. Example:</div><div class='del'>-#</div><div class='del'>-#   require "open3"</div><div class='del'>-#</div><div class='del'>-#   Open3.popen3('nroff -man') { |stdin, stdout, stderr| ... }</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-module Open3</div><div class='del'>-  # </div><div class='del'>-  # Open stdin, stdout, and stderr streams and start external executable.</div><div class='del'>-  # Non-block form:</div><div class='del'>-  #   </div><div class='del'>-  #   require 'open3'</div><div class='del'>-  #</div><div class='del'>-  #   [stdin, stdout, stderr] = Open3.popen3(cmd)</div><div class='del'>-  #</div><div class='del'>-  # Block form:</div><div class='del'>-  #</div><div class='del'>-  #   require 'open3'</div><div class='del'>-  #</div><div class='del'>-  #   Open3.popen3(cmd) { |stdin, stdout, stderr| ... }</div><div class='del'>-  #</div><div class='del'>-  # The parameter +cmd+ is passed directly to Kernel#exec.</div><div class='del'>-  #</div><div class='del'>-  def popen3(*cmd)</div><div class='del'>-    pw = IO::pipe   # pipe[0] for read, pipe[1] for write</div><div class='del'>-    pr = IO::pipe</div><div class='del'>-    pe = IO::pipe</div><div class='del'>-</div><div class='del'>-    pid = fork{</div><div class='del'>-      # child</div><div class='del'>-      fork{</div><div class='del'>-	# grandchild</div><div class='del'>-	pw[1].close</div><div class='del'>-	STDIN.reopen(pw[0])</div><div class='del'>-	pw[0].close</div><div class='del'>-</div><div class='del'>-	pr[0].close</div><div class='del'>-	STDOUT.reopen(pr[1])</div><div class='del'>-	pr[1].close</div><div class='del'>-</div><div class='del'>-	pe[0].close</div><div class='del'>-	STDERR.reopen(pe[1])</div><div class='del'>-	pe[1].close</div><div class='del'>-</div><div class='del'>-	exec(*cmd)</div><div class='del'>-      }</div><div class='del'>-      exit!(0)</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    pw[0].close</div><div class='del'>-    pr[1].close</div><div class='del'>-    pe[1].close</div><div class='del'>-    Process.waitpid(pid)</div><div class='del'>-    pi = [pw[1], pr[0], pe[0]]</div><div class='del'>-    pw[1].sync = true</div><div class='del'>-    if defined? yield</div><div class='del'>-      begin</div><div class='del'>-	return yield(*pi)</div><div class='del'>-      ensure</div><div class='del'>-	pi.each{|p| p.close unless p.closed?}</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    pi</div><div class='del'>-  end</div><div class='del'>-  module_function :popen3</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  a = Open3.popen3("nroff -man")</div><div class='del'>-  Thread.start do</div><div class='del'>-    while line = gets</div><div class='del'>-      a[0].print line</div><div class='del'>-    end</div><div class='del'>-    a[0].close</div><div class='del'>-  end</div><div class='del'>-  while line = a[1].gets</div><div class='del'>-    print ":", line</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/optparse.rb b/lib/optparse.rb<br/>deleted file mode 100644<br/>index 134b540cfb..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/optparse.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1790 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# optparse.rb - command-line option analysis with the OptionParser class.</div><div class='del'>-# </div><div class='del'>-# Author:: Nobu Nakada</div><div class='del'>-# Documentation:: Nobu Nakada and Gavin Sinclair.</div><div class='del'>-#</div><div class='del'>-# See OptionParser for documentation. </div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# == Developer Documentation (not for RDoc output) </div><div class='del'>-# </div><div class='del'>-# === Class tree</div><div class='del'>-#</div><div class='del'>-# - OptionParser:: front end</div><div class='del'>-# - OptionParser::Switch:: each switches</div><div class='del'>-# - OptionParser::List:: options list</div><div class='del'>-# - OptionParser::ParseError:: errors on parsing</div><div class='del'>-#   - OptionParser::AmbiguousOption</div><div class='del'>-#   - OptionParser::NeedlessArgument</div><div class='del'>-#   - OptionParser::MissingArgument</div><div class='del'>-#   - OptionParser::InvalidOption</div><div class='del'>-#   - OptionParser::InvalidArgument</div><div class='del'>-#     - OptionParser::AmbiguousArgument</div><div class='del'>-#</div><div class='del'>-# === Object relationship diagram</div><div class='del'>-#</div><div class='del'>-#   +--------------+</div><div class='del'>-#   | OptionParser |&lt;&gt;-----+</div><div class='del'>-#   +--------------+       |                      +--------+</div><div class='del'>-#                          |                    ,-| Switch |</div><div class='del'>-#        on_head --------&gt;+---------------+    /  +--------+</div><div class='del'>-#        accept/reject --&gt;| List          |&lt;|&gt;-</div><div class='del'>-#                         |               |&lt;|&gt;-  +----------+</div><div class='del'>-#        on -------------&gt;+---------------+    `-| argument |</div><div class='del'>-#                           :           :        |  class   |</div><div class='del'>-#                         +---------------+      |==========|</div><div class='del'>-#        on_tail --------&gt;|               |      |pattern   |</div><div class='del'>-#                         +---------------+      |----------|</div><div class='del'>-#   OptionParser.accept -&gt;| DefaultList   |      |converter |</div><div class='del'>-#                reject   |(shared between|      +----------+</div><div class='del'>-#                         | all instances)|</div><div class='del'>-#                         +---------------+</div><div class='del'>-#</div><div class='del'>-# == OptionParser</div><div class='del'>-#</div><div class='del'>-# === Introduction</div><div class='del'>-#</div><div class='del'>-# OptionParser is a class for command-line option analysis.  It is much more</div><div class='del'>-# advanced, yet also easier to use, than GetoptLong, and is a more Ruby-oriented</div><div class='del'>-# solution.</div><div class='del'>-#</div><div class='del'>-# === Features</div><div class='del'>-# </div><div class='del'>-# 1. The argument specification and the code to handle it are written in the</div><div class='del'>-#    same place.</div><div class='del'>-# 2. It can output an option summary; you don't need to maintain this string</div><div class='del'>-#    separately.</div><div class='del'>-# 3. Optional and mandatory arguments are specified very gracefully.</div><div class='del'>-# 4. Arguments can be automatically converted to a specified class.</div><div class='del'>-# 5. Arguments can be restricted to a certain set.</div><div class='del'>-#</div><div class='del'>-# All of these features are demonstrated in the examples below.</div><div class='del'>-#</div><div class='del'>-# === Minimal example</div><div class='del'>-#</div><div class='del'>-#   require 'optparse'</div><div class='del'>-#</div><div class='del'>-#   options = {}</div><div class='del'>-#   OptionParser.new do |opts|</div><div class='del'>-#     opts.banner = "Usage: example.rb [options]"</div><div class='del'>-#</div><div class='del'>-#     opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|</div><div class='del'>-#       options[:verbose] = v</div><div class='del'>-#     end</div><div class='del'>-#   end.parse!</div><div class='del'>-#</div><div class='del'>-#   p options</div><div class='del'>-#   p ARGV</div><div class='del'>-#</div><div class='del'>-# === Complete example</div><div class='del'>-#</div><div class='del'>-# The following example is a complete Ruby program.  You can run it and see the</div><div class='del'>-# effect of specifying various options.  This is probably the best way to learn</div><div class='del'>-# the features of +optparse+.</div><div class='del'>-#</div><div class='del'>-#   require 'optparse'</div><div class='del'>-#   require 'optparse/time'</div><div class='del'>-#   require 'ostruct'</div><div class='del'>-#   require 'pp'</div><div class='del'>-#   </div><div class='del'>-#   class OptparseExample</div><div class='del'>-#   </div><div class='del'>-#     CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary]</div><div class='del'>-#     CODE_ALIASES = { "jis" =&gt; "iso-2022-jp", "sjis" =&gt; "shift_jis" }</div><div class='del'>-#   </div><div class='del'>-#     #</div><div class='del'>-#     # Return a structure describing the options.</div><div class='del'>-#     #</div><div class='del'>-#     def self.parse(args)</div><div class='del'>-#       # The options specified on the command line will be collected in *options*.</div><div class='del'>-#       # We set default values here.</div><div class='del'>-#       options = OpenStruct.new</div><div class='del'>-#       options.library = []</div><div class='del'>-#       options.inplace = false</div><div class='del'>-#       options.encoding = "utf8"</div><div class='del'>-#       options.transfer_type = :auto</div><div class='del'>-#       options.verbose = false</div><div class='del'>-#       </div><div class='del'>-#       opts = OptionParser.new do |opts|</div><div class='del'>-#         opts.banner = "Usage: example.rb [options]"</div><div class='del'>-#       </div><div class='del'>-#         opts.separator ""</div><div class='del'>-#         opts.separator "Specific options:"</div><div class='del'>-#       </div><div class='del'>-#         # Mandatory argument.</div><div class='del'>-#         opts.on("-r", "--require LIBRARY",</div><div class='del'>-#                 "Require the LIBRARY before executing your script") do |lib|</div><div class='del'>-#           options.library &lt;&lt; lib</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # Optional argument; multi-line description.</div><div class='del'>-#         opts.on("-i", "--inplace [EXTENSION]",</div><div class='del'>-#                 "Edit ARGV files in place",</div><div class='del'>-#                 "  (make backup if EXTENSION supplied)") do |ext|</div><div class='del'>-#           options.inplace = true</div><div class='del'>-#           options.extension = ext || ''</div><div class='del'>-#           options.extension.sub!(/\A\.?(?=.)/, ".")  # Ensure extension begins with dot.</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # Cast 'delay' argument to a Float.</div><div class='del'>-#         opts.on("--delay N", Float, "Delay N seconds before executing") do |n|</div><div class='del'>-#           options.delay = n</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # Cast 'time' argument to a Time object.</div><div class='del'>-#         opts.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|</div><div class='del'>-#           options.time = time</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # Cast to octal integer.</div><div class='del'>-#         opts.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger,</div><div class='del'>-#                 "Specify record separator (default \\0)") do |rs|</div><div class='del'>-#           options.record_separator = rs</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # List of arguments.</div><div class='del'>-#         opts.on("--list x,y,z", Array, "Example 'list' of arguments") do |list|</div><div class='del'>-#           options.list = list</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # Keyword completion.  We are specifying a specific set of arguments (CODES</div><div class='del'>-#         # and CODE_ALIASES - notice the latter is a Hash), and the user may provide</div><div class='del'>-#         # the shortest unambiguous text.</div><div class='del'>-#         code_list = (CODE_ALIASES.keys + CODES).join(',')</div><div class='del'>-#         opts.on("--code CODE", CODES, CODE_ALIASES, "Select encoding",</div><div class='del'>-#                 "  (#{code_list})") do |encoding|</div><div class='del'>-#           options.encoding = encoding</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # Optional argument with keyword completion.</div><div class='del'>-#         opts.on("--type [TYPE]", [:text, :binary, :auto],</div><div class='del'>-#                 "Select transfer type (text, binary, auto)") do |t|</div><div class='del'>-#           options.transfer_type = t</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # Boolean switch.</div><div class='del'>-#         opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|</div><div class='del'>-#           options.verbose = v</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         opts.separator ""</div><div class='del'>-#         opts.separator "Common options:"</div><div class='del'>-#       </div><div class='del'>-#         # No argument, shows at tail.  This will print an options summary.</div><div class='del'>-#         # Try it and see!</div><div class='del'>-#         opts.on_tail("-h", "--help", "Show this message") do</div><div class='del'>-#           puts opts</div><div class='del'>-#           exit</div><div class='del'>-#         end</div><div class='del'>-#       </div><div class='del'>-#         # Another typical switch to print the version.</div><div class='del'>-#         opts.on_tail("--version", "Show version") do</div><div class='del'>-#           puts OptionParser::Version.join('.')</div><div class='del'>-#           exit</div><div class='del'>-#         end</div><div class='del'>-#       end</div><div class='del'>-#       </div><div class='del'>-#       opts.parse!(args)</div><div class='del'>-#       options</div><div class='del'>-#     end  # parse()</div><div class='del'>-#   </div><div class='del'>-#   end  # class OptparseExample</div><div class='del'>-#   </div><div class='del'>-#   options = OptparseExample.parse(ARGV)</div><div class='del'>-#   pp options</div><div class='del'>-#</div><div class='del'>-# === Further documentation</div><div class='del'>-#</div><div class='del'>-# The above examples should be enough to learn how to use this class.  If you</div><div class='del'>-# have any questions, email me (gsinclair@soyabean.com.au) and I will update</div><div class='del'>-# this document.</div><div class='del'>-#</div><div class='del'>-class OptionParser</div><div class='del'>-  # :stopdoc:</div><div class='del'>-  RCSID = %w$Id$[1..-1].each {|s| s.freeze}.freeze</div><div class='del'>-  Version = (RCSID[1].split('.').collect {|s| s.to_i}.extend(Comparable).freeze if RCSID[1])</div><div class='del'>-  LastModified = (Time.gm(*RCSID[2, 2].join('-').scan(/\d+/).collect {|s| s.to_i}) if RCSID[2])</div><div class='del'>-  Release = RCSID[2]</div><div class='del'>-</div><div class='del'>-  NoArgument = [NO_ARGUMENT = :NONE, nil].freeze</div><div class='del'>-  RequiredArgument = [REQUIRED_ARGUMENT = :REQUIRED, true].freeze</div><div class='del'>-  OptionalArgument = [OPTIONAL_ARGUMENT = :OPTIONAL, false].freeze</div><div class='del'>-  # :startdoc:</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Keyword completion module.  This allows partial arguments to be specified</div><div class='del'>-  # and resolved against a list of acceptable values.</div><div class='del'>-  #</div><div class='del'>-  module Completion</div><div class='del'>-    def complete(key, icase = false, pat = nil)</div><div class='del'>-      pat ||= Regexp.new('\A' + Regexp.quote(key).gsub(/\w+\b/, '\&amp;\w*'),</div><div class='del'>-                         icase)</div><div class='del'>-      canon, sw, k, v, cn = nil</div><div class='del'>-      candidates = []</div><div class='del'>-      each do |k, *v|</div><div class='del'>-        (if Regexp === k</div><div class='del'>-           kn = nil</div><div class='del'>-           k === key</div><div class='del'>-         else</div><div class='del'>-           kn = defined?(k.id2name) ? k.id2name : k</div><div class='del'>-           pat === kn</div><div class='del'>-         end) or next</div><div class='del'>-        v &lt;&lt; k if v.empty?</div><div class='del'>-        candidates &lt;&lt; [k, v, kn]</div><div class='del'>-      end</div><div class='del'>-      candidates = candidates.sort_by {|k, v, kn| kn.size}</div><div class='del'>-      if candidates.size == 1</div><div class='del'>-        canon, sw, * = candidates[0]</div><div class='del'>-      elsif candidates.size &gt; 1</div><div class='del'>-        canon, sw, cn = candidates.shift</div><div class='del'>-        candidates.each do |k, v, kn|</div><div class='del'>-          next if sw == v</div><div class='del'>-          if String === cn and String === kn</div><div class='del'>-            if cn.rindex(kn, 0)</div><div class='del'>-              canon, sw, cn = k, v, kn</div><div class='del'>-              next</div><div class='del'>-            elsif kn.rindex(cn, 0)</div><div class='del'>-              next</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          throw :ambiguous, key</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      if canon</div><div class='del'>-        block_given? or return key, *sw</div><div class='del'>-        yield(key, *sw)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert(opt = nil, val = nil, *)</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'>-  # Map from option/keyword string to object with completion.</div><div class='del'>-  #</div><div class='del'>-  class OptionMap &lt; Hash</div><div class='del'>-    include Completion</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Individual switch class.  Not important to the user.</div><div class='del'>-  #</div><div class='del'>-  # Defined within Switch are several Switch-derived classes: NoArgument,</div><div class='del'>-  # RequiredArgument, etc. </div><div class='del'>-  #</div><div class='del'>-  class Switch</div><div class='del'>-    attr_reader :pattern, :conv, :short, :long, :arg, :desc, :block</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Guesses argument style from +arg+.  Returns corresponding</div><div class='del'>-    # OptionParser::Switch class (OptionalArgument, etc.).</div><div class='del'>-    #</div><div class='del'>-    def self.guess(arg)</div><div class='del'>-      case arg</div><div class='del'>-      when ""</div><div class='del'>-        t = self</div><div class='del'>-      when /\A=?\[/</div><div class='del'>-        t = Switch::OptionalArgument</div><div class='del'>-      when /\A\s+\[/</div><div class='del'>-        t = Switch::PlacedArgument</div><div class='del'>-      else</div><div class='del'>-        t = Switch::RequiredArgument</div><div class='del'>-      end</div><div class='del'>-      self &gt;= t or incompatible_argument_styles(arg, t)</div><div class='del'>-      t</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.incompatible_argument_styles(arg, t)</div><div class='del'>-      raise ArgumentError, "#{arg}: incompatible argument styles\n  #{self}, #{t}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def self.pattern</div><div class='del'>-      NilClass</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(pattern = nil, conv = nil,</div><div class='del'>-                   short = nil, long = nil, arg = nil,</div><div class='del'>-                   desc = ([] if short or long), block = Proc.new)</div><div class='del'>-      raise if Array === pattern</div><div class='del'>-      @pattern, @conv, @short, @long, @arg, @desc, @block =</div><div class='del'>-        pattern, conv, short, long, arg, desc, block</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Parses +arg+ and returns rest of +arg+ and matched portion to the</div><div class='del'>-    # argument pattern. Yields when the pattern doesn't match substring.</div><div class='del'>-    #</div><div class='del'>-    def parse_arg(arg)</div><div class='del'>-      pattern or return nil, arg</div><div class='del'>-      unless m = pattern.match(arg)</div><div class='del'>-        yield(InvalidArgument, arg)</div><div class='del'>-        return arg, nil</div><div class='del'>-      end</div><div class='del'>-      if String === m</div><div class='del'>-        m = [s = m]</div><div class='del'>-      else</div><div class='del'>-        m = m.to_a</div><div class='del'>-        s = m[0]</div><div class='del'>-        return nil, m unless String === s</div><div class='del'>-      end</div><div class='del'>-      raise InvalidArgument, arg unless arg.rindex(s, 0)</div><div class='del'>-      return nil, m if s.length == arg.length</div><div class='del'>-      yield(InvalidArgument, arg) # didn't match whole arg</div><div class='del'>-      return arg[s.length..-1], m</div><div class='del'>-    end</div><div class='del'>-    private :parse_arg</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Parses argument, converts and returns +arg+, +block+ and result of</div><div class='del'>-    # conversion. Yields at semi-error condition instead of raising an</div><div class='del'>-    # exception.</div><div class='del'>-    #</div><div class='del'>-    def conv_arg(arg, val = nil)</div><div class='del'>-      if conv</div><div class='del'>-        val = conv.call(*val)</div><div class='del'>-      else</div><div class='del'>-        val = proc {|val| val}.call(*val)</div><div class='del'>-      end</div><div class='del'>-      return arg, block, val</div><div class='del'>-    end</div><div class='del'>-    private :conv_arg</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Produces the summary text. Each line of the summary is yielded to the</div><div class='del'>-    # block (without newline).</div><div class='del'>-    #</div><div class='del'>-    # +sdone+::  Already summarized short style options keyed hash.</div><div class='del'>-    # +ldone+::  Already summarized long style options keyed hash.</div><div class='del'>-    # +width+::  Width of left side (option part). In other words, the right</div><div class='del'>-    #            side (description part) starts after +width+ columns.</div><div class='del'>-    # +max+::    Maximum width of left side -&gt; the options are filled within</div><div class='del'>-    #            +max+ columns.</div><div class='del'>-    # +indent+:: Prefix string indents all summarized lines.</div><div class='del'>-    #</div><div class='del'>-    def summarize(sdone = [], ldone = [], width = 1, max = width - 1, indent = "")</div><div class='del'>-      sopts, lopts, s = [], [], nil</div><div class='del'>-      @short.each {|s| sdone.fetch(s) {sopts &lt;&lt; s}; sdone[s] = true} if @short</div><div class='del'>-      @long.each {|s| ldone.fetch(s) {lopts &lt;&lt; s}; ldone[s] = true} if @long</div><div class='del'>-      return if sopts.empty? and lopts.empty? # completely hidden</div><div class='del'>-</div><div class='del'>-      left = [sopts.join(', ')]</div><div class='del'>-      right = desc.dup</div><div class='del'>-</div><div class='del'>-      while s = lopts.shift</div><div class='del'>-        l = left[-1].length + s.length</div><div class='del'>-        l += arg.length if left.size == 1 &amp;&amp; arg</div><div class='del'>-        l &lt; max or sopts.empty? or left &lt;&lt; ''</div><div class='del'>-        left[-1] &lt;&lt; if left[-1].empty? then ' ' * 4 else ', ' end &lt;&lt; s</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      left[0] &lt;&lt; arg if arg</div><div class='del'>-      mlen = left.collect {|s| s.length}.max.to_i</div><div class='del'>-      while mlen &gt; width and l = left.shift</div><div class='del'>-        mlen = left.collect {|s| s.length}.max.to_i if l.length == mlen</div><div class='del'>-        yield(indent + l)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      while begin l = left.shift; r = right.shift; l or r end</div><div class='del'>-        l = l.to_s.ljust(width) + ' ' + r if r and !r.empty?</div><div class='del'>-        yield(indent + l)</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 add_banner(to)  # :nodoc:</div><div class='del'>-      unless @short or @long</div><div class='del'>-        s = desc.join</div><div class='del'>-        to &lt;&lt; " [" + s + "]..." unless s.empty?</div><div class='del'>-      end</div><div class='del'>-      to</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def match_nonswitch?(str) # :nodoc:</div><div class='del'>-      @pattern =~ str unless @short or @long</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Main name of the switch.</div><div class='del'>-    #</div><div class='del'>-    def switch_name</div><div class='del'>-      (long.first || short.first).sub(/\A-+(?:\[no-\])?/, '')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Switch that takes no arguments.</div><div class='del'>-    #</div><div class='del'>-    class NoArgument &lt; self</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Raises an exception if any arguments given.</div><div class='del'>-      #</div><div class='del'>-      def parse(arg, argv)</div><div class='del'>-        yield(NeedlessArgument, arg) if arg</div><div class='del'>-        conv_arg(arg)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.incompatible_argument_styles(*)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.pattern</div><div class='del'>-        Object</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Switch that takes an argument.</div><div class='del'>-    #</div><div class='del'>-    class RequiredArgument &lt; self</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Raises an exception if argument is not present.</div><div class='del'>-      #</div><div class='del'>-      def parse(arg, argv)</div><div class='del'>-        unless arg</div><div class='del'>-          raise MissingArgument if argv.empty?</div><div class='del'>-          arg = argv.shift</div><div class='del'>-        end</div><div class='del'>-        conv_arg(*parse_arg(arg) {|*exc| raise(*exc)})</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Switch that can omit argument.</div><div class='del'>-    #</div><div class='del'>-    class OptionalArgument &lt; self</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Parses argument if given, or uses default value.</div><div class='del'>-      #</div><div class='del'>-      def parse(arg, argv, &amp;error)</div><div class='del'>-        if arg</div><div class='del'>-          conv_arg(*parse_arg(arg, &amp;error))</div><div class='del'>-        else</div><div class='del'>-          conv_arg(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'>-    # Switch that takes an argument, which does not begin with '-'.</div><div class='del'>-    #</div><div class='del'>-    class PlacedArgument &lt; self</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Returns nil if argument is not present or begins with '-'.</div><div class='del'>-      #</div><div class='del'>-      def parse(arg, argv, &amp;error)</div><div class='del'>-        if !(val = arg) and (argv.empty? or /\A-/ =~ (val = argv[0]))</div><div class='del'>-          return nil, block, nil</div><div class='del'>-        end</div><div class='del'>-        opt = (val = parse_arg(val, &amp;error))[1]</div><div class='del'>-        val = conv_arg(*val)</div><div class='del'>-        if opt and !arg</div><div class='del'>-          argv.shift</div><div class='del'>-        else</div><div class='del'>-          val[0] = nil</div><div class='del'>-        end</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'>-  #</div><div class='del'>-  # Simple option list providing mapping from short and/or long option</div><div class='del'>-  # string to OptionParser::Switch and mapping from acceptable argument to</div><div class='del'>-  # matching pattern and converter pair. Also provides summary feature.</div><div class='del'>-  #</div><div class='del'>-  class List</div><div class='del'>-    # Map from acceptable argument types to pattern and converter pairs.</div><div class='del'>-    attr_reader :atype</div><div class='del'>-    </div><div class='del'>-    # Map from short style option switches to actual switch objects.</div><div class='del'>-    attr_reader :short</div><div class='del'>-    </div><div class='del'>-    # Map from long style option switches to actual switch objects.</div><div class='del'>-    attr_reader :long</div><div class='del'>-    </div><div class='del'>-    # List of all switches and summary string.</div><div class='del'>-    attr_reader :list</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Just initializes all instance variables.</div><div class='del'>-    #</div><div class='del'>-    def initialize</div><div class='del'>-      @atype = {}</div><div class='del'>-      @short = OptionMap.new</div><div class='del'>-      @long = OptionMap.new</div><div class='del'>-      @list = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # See OptionParser.accept.</div><div class='del'>-    #</div><div class='del'>-    def accept(t, pat = /.*/nm, &amp;block)</div><div class='del'>-      if pat</div><div class='del'>-        pat.respond_to?(:match) or raise TypeError, "has no `match'"</div><div class='del'>-      else</div><div class='del'>-        pat = t if t.respond_to?(:match)</div><div class='del'>-      end</div><div class='del'>-      unless block</div><div class='del'>-        block = pat.method(:convert).to_proc if pat.respond_to?(:convert)</div><div class='del'>-      end</div><div class='del'>-      @atype[t] = [pat, block]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # See OptionParser.reject.</div><div class='del'>-    #</div><div class='del'>-    def reject(t)</div><div class='del'>-      @atype.delete(t)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Adds +sw+ according to +sopts+, +lopts+ and +nlopts+.</div><div class='del'>-    #</div><div class='del'>-    # +sw+::     OptionParser::Switch instance to be added.</div><div class='del'>-    # +sopts+::  Short style option list.</div><div class='del'>-    # +lopts+::  Long style option list.</div><div class='del'>-    # +nlopts+:: Negated long style options list.</div><div class='del'>-    #</div><div class='del'>-    def update(sw, sopts, lopts, nsw = nil, nlopts = nil)</div><div class='del'>-      o = nil</div><div class='del'>-      sopts.each {|o| @short[o] = sw} if sopts</div><div class='del'>-      lopts.each {|o| @long[o] = sw} if lopts</div><div class='del'>-      nlopts.each {|o| @long[o] = nsw} if nsw and nlopts</div><div class='del'>-      used = @short.invert.update(@long.invert)</div><div class='del'>-      @list.delete_if {|o| Switch === o and !used[o]}</div><div class='del'>-    end</div><div class='del'>-    private :update</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Inserts +switch+ at the head of the list, and associates short, long</div><div class='del'>-    # and negated long options. Arguments are:</div><div class='del'>-    # </div><div class='del'>-    # +switch+::      OptionParser::Switch instance to be inserted.</div><div class='del'>-    # +short_opts+::  List of short style options.</div><div class='del'>-    # +long_opts+::   List of long style options.</div><div class='del'>-    # +nolong_opts+:: List of long style options with "no-" prefix.</div><div class='del'>-    #</div><div class='del'>-    #   prepend(switch, short_opts, long_opts, nolong_opts)</div><div class='del'>-    #</div><div class='del'>-    def prepend(*args)</div><div class='del'>-      update(*args)</div><div class='del'>-      @list.unshift(args[0])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Appends +switch+ at the tail of the list, and associates short, long</div><div class='del'>-    # and negated long options. Arguments are:</div><div class='del'>-    # </div><div class='del'>-    # +switch+::      OptionParser::Switch instance to be inserted.</div><div class='del'>-    # +short_opts+::  List of short style options.</div><div class='del'>-    # +long_opts+::   List of long style options.</div><div class='del'>-    # +nolong_opts+:: List of long style options with "no-" prefix.</div><div class='del'>-    #</div><div class='del'>-    #   append(switch, short_opts, long_opts, nolong_opts)</div><div class='del'>-    #</div><div class='del'>-    def append(*args)</div><div class='del'>-      update(*args)</div><div class='del'>-      @list.push(args[0])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Searches +key+ in +id+ list. The result is returned or yielded if a</div><div class='del'>-    # block is given. If it isn't found, nil is returned.</div><div class='del'>-    #</div><div class='del'>-    def search(id, key)</div><div class='del'>-      if list = __send__(id)</div><div class='del'>-        val = list.fetch(key) {return nil}</div><div class='del'>-        block_given? ? yield(val) : val</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Searches list +id+ for +opt+ and the optional patterns for completion</div><div class='del'>-    # +pat+. If +icase+ is true, the search is case insensitive. The result</div><div class='del'>-    # is returned or yielded if a block is given. If it isn't found, nil is</div><div class='del'>-    # returned.</div><div class='del'>-    #</div><div class='del'>-    def complete(id, opt, icase = false, *pat, &amp;block)</div><div class='del'>-      __send__(id).complete(opt, icase, *pat, &amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Iterates over each option, passing the option to the +block+.</div><div class='del'>-    #</div><div class='del'>-    def each_option(&amp;block)</div><div class='del'>-      list.each(&amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Creates the summary table, passing each line to the +block+ (without</div><div class='del'>-    # newline). The arguments +args+ are passed along to the summarize</div><div class='del'>-    # method which is called on every option.</div><div class='del'>-    #</div><div class='del'>-    def summarize(*args, &amp;block)</div><div class='del'>-      list.each do |opt|</div><div class='del'>-        if opt.respond_to?(:summarize) # perhaps OptionParser::Switch</div><div class='del'>-          opt.summarize(*args, &amp;block)</div><div class='del'>-        elsif !opt</div><div class='del'>-          yield("")</div><div class='del'>-        elsif opt.respond_to?(:each_line)</div><div class='del'>-          opt.each_line(&amp;block)</div><div class='del'>-        else</div><div class='del'>-          opt.each(&amp;block)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_banner(to)  # :nodoc:</div><div class='del'>-      list.each do |opt|</div><div class='del'>-        if opt.respond_to?(:add_banner)</div><div class='del'>-          opt.add_banner(to)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      to</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Hash with completion search feature. See OptionParser::Completion.</div><div class='del'>-  #</div><div class='del'>-  class CompletingHash &lt; Hash</div><div class='del'>-    include Completion</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Completion for hash key.</div><div class='del'>-    #</div><div class='del'>-    def match(key)</div><div class='del'>-      return key, *fetch(key) {</div><div class='del'>-        raise AmbiguousArgument, catch(:ambiguous) {return complete(key)}</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # :stopdoc:</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Enumeration of acceptable argument styles. Possible values are:</div><div class='del'>-  #</div><div class='del'>-  # NO_ARGUMENT::       The switch takes no arguments. (:NONE)</div><div class='del'>-  # REQUIRED_ARGUMENT:: The switch requires an argument. (:REQUIRED)</div><div class='del'>-  # OPTIONAL_ARGUMENT:: The switch requires an optional argument. (:OPTIONAL)</div><div class='del'>-  #</div><div class='del'>-  # Use like --switch=argument (long style) or -Xargument (short style). For</div><div class='del'>-  # short style, only portion matched to argument pattern is dealed as</div><div class='del'>-  # argument.</div><div class='del'>-  #</div><div class='del'>-  ArgumentStyle = {}</div><div class='del'>-  NoArgument.each {|el| ArgumentStyle[el] = Switch::NoArgument}</div><div class='del'>-  RequiredArgument.each {|el| ArgumentStyle[el] = Switch::RequiredArgument}</div><div class='del'>-  OptionalArgument.each {|el| ArgumentStyle[el] = Switch::OptionalArgument}</div><div class='del'>-  ArgumentStyle.freeze</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Switches common used such as '--', and also provides default</div><div class='del'>-  # argument classes</div><div class='del'>-  #</div><div class='del'>-  DefaultList = List.new</div><div class='del'>-  DefaultList.short['-'] = Switch::NoArgument.new {}</div><div class='del'>-  DefaultList.long[''] = Switch::NoArgument.new {throw :terminate}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Default options for ARGV, which never appear in option summary.</div><div class='del'>-  #</div><div class='del'>-  Officious = {}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # --help</div><div class='del'>-  # Shows option summary.</div><div class='del'>-  #</div><div class='del'>-  Officious['help'] = proc do |parser|</div><div class='del'>-    Switch::NoArgument.new do</div><div class='del'>-      puts parser.help</div><div class='del'>-      exit</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # --version</div><div class='del'>-  # Shows version string if Version is defined.</div><div class='del'>-  #</div><div class='del'>-  Officious['version'] = proc do |parser|</div><div class='del'>-    Switch::OptionalArgument.new do |pkg|</div><div class='del'>-      if pkg</div><div class='del'>-        begin</div><div class='del'>-          require 'optparse/version'</div><div class='del'>-        rescue LoadError</div><div class='del'>-        else</div><div class='del'>-          show_version(*pkg.split(/,/)) or</div><div class='del'>-            abort("#{parser.program_name}: no version found in package #{pkg}")</div><div class='del'>-          exit</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      v = parser.ver or abort("#{parser.program_name}: version unknown")</div><div class='del'>-      puts v</div><div class='del'>-      exit</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # :startdoc:</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Class methods</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Initializes a new instance and evaluates the optional block in context</div><div class='del'>-  # of the instance. Arguments +args+ are passed to #new, see there for</div><div class='del'>-  # description of parameters.</div><div class='del'>-  # </div><div class='del'>-  # This method is *deprecated*, its behavior corresponds to the older #new</div><div class='del'>-  # method.</div><div class='del'>-  #</div><div class='del'>-  def self.with(*args, &amp;block)</div><div class='del'>-    opts = new(*args)</div><div class='del'>-    opts.instance_eval(&amp;block)</div><div class='del'>-    opts</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns an incremented value of +default+ according to +arg+.</div><div class='del'>-  #</div><div class='del'>-  def self.inc(arg, default = nil)</div><div class='del'>-    case arg</div><div class='del'>-    when Integer</div><div class='del'>-      arg.nonzero?</div><div class='del'>-    when nil</div><div class='del'>-      default.to_i + 1</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  def inc(*args)</div><div class='del'>-    self.class.inc(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Initializes the instance and yields itself if called with a block.</div><div class='del'>-  #</div><div class='del'>-  # +banner+:: Banner message.</div><div class='del'>-  # +width+::  Summary width.</div><div class='del'>-  # +indent+:: Summary indent.</div><div class='del'>-  #</div><div class='del'>-  def initialize(banner = nil, width = 32, indent = ' ' * 4)</div><div class='del'>-    @stack = [DefaultList, List.new, List.new]</div><div class='del'>-    @program_name = nil</div><div class='del'>-    @banner = banner</div><div class='del'>-    @summary_width = width</div><div class='del'>-    @summary_indent = indent</div><div class='del'>-    @default_argv = ARGV</div><div class='del'>-    add_officious</div><div class='del'>-    yield self if block_given?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def add_officious  # :nodoc:</div><div class='del'>-    list = base()</div><div class='del'>-    Officious.each do |opt, block|</div><div class='del'>-      list.long[opt] ||= block.call(self)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Terminates option parsing. Optional parameter +arg+ is a string pushed</div><div class='del'>-  # back to be the first non-option argument.</div><div class='del'>-  #</div><div class='del'>-  def terminate(arg = nil)</div><div class='del'>-    self.class.terminate(arg)</div><div class='del'>-  end</div><div class='del'>-  def self.terminate(arg = nil)</div><div class='del'>-    throw :terminate, arg</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  @stack = [DefaultList]</div><div class='del'>-  def self.top() DefaultList end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Directs to accept specified class +t+. The argument string is passed to</div><div class='del'>-  # the block in which it should be converted to the desired class.</div><div class='del'>-  #</div><div class='del'>-  # +t+::   Argument class specifier, any object including Class.</div><div class='del'>-  # +pat+:: Pattern for argument, defaults to +t+ if it responds to match.</div><div class='del'>-  #</div><div class='del'>-  #   accept(t, pat, &amp;block)</div><div class='del'>-  #</div><div class='del'>-  def accept(*args, &amp;blk) top.accept(*args, &amp;blk) end</div><div class='del'>-  #</div><div class='del'>-  # See #accept.</div><div class='del'>-  #</div><div class='del'>-  def self.accept(*args, &amp;blk) top.accept(*args, &amp;blk) end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Directs to reject specified class argument.</div><div class='del'>-  #</div><div class='del'>-  # +t+:: Argument class specifier, any object including Class.</div><div class='del'>-  #</div><div class='del'>-  #   reject(t)</div><div class='del'>-  #</div><div class='del'>-  def reject(*args, &amp;blk) top.reject(*args, &amp;blk) end</div><div class='del'>-  #</div><div class='del'>-  # See #reject.</div><div class='del'>-  #</div><div class='del'>-  def self.reject(*args, &amp;blk) top.reject(*args, &amp;blk) end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Instance methods</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  # Heading banner preceding summary.</div><div class='del'>-  attr_writer :banner</div><div class='del'>-</div><div class='del'>-  # Program name to be emitted in error message and default banner,</div><div class='del'>-  # defaults to $0.</div><div class='del'>-  attr_writer :program_name</div><div class='del'>-</div><div class='del'>-  # Width for option list portion of summary. Must be Numeric.</div><div class='del'>-  attr_accessor :summary_width</div><div class='del'>-</div><div class='del'>-  # Indentation for summary. Must be String (or have + String method).</div><div class='del'>-  attr_accessor :summary_indent</div><div class='del'>-</div><div class='del'>-  # Strings to be parsed in default.</div><div class='del'>-  attr_accessor :default_argv</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Heading banner preceding summary.</div><div class='del'>-  #</div><div class='del'>-  def banner</div><div class='del'>-    unless @banner</div><div class='del'>-      @banner = "Usage: #{program_name} [options]"</div><div class='del'>-      visit(:add_banner, @banner)</div><div class='del'>-    end</div><div class='del'>-    @banner</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Program name to be emitted in error message and default banner, defaults</div><div class='del'>-  # to $0.</div><div class='del'>-  #</div><div class='del'>-  def program_name</div><div class='del'>-    @program_name || File.basename($0, '.*')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # for experimental cascading :-)</div><div class='del'>-  alias set_banner banner=</div><div class='del'>-  alias set_program_name program_name=</div><div class='del'>-  alias set_summary_width summary_width=</div><div class='del'>-  alias set_summary_indent summary_indent=</div><div class='del'>-</div><div class='del'>-  # Version</div><div class='del'>-  attr_writer :version</div><div class='del'>-  # Release code</div><div class='del'>-  attr_writer :release</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Version</div><div class='del'>-  #</div><div class='del'>-  def version</div><div class='del'>-    @version || (defined?(::Version) &amp;&amp; ::Version)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Release code</div><div class='del'>-  #</div><div class='del'>-  def release</div><div class='del'>-    @release || (defined?(::Release) &amp;&amp; ::Release) || (defined?(::RELEASE) &amp;&amp; ::RELEASE)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns version string from program_name, version and release.</div><div class='del'>-  #</div><div class='del'>-  def ver</div><div class='del'>-    if v = version</div><div class='del'>-      str = "#{program_name} #{[v].join('.')}"</div><div class='del'>-      str &lt;&lt; " (#{v})" if v = release</div><div class='del'>-      str</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def warn(mesg = $!)</div><div class='del'>-    super("#{program_name}: #{mesg}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def abort(mesg = $!)</div><div class='del'>-    super("#{program_name}: #{mesg}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Subject of #on / #on_head, #accept / #reject</div><div class='del'>-  #</div><div class='del'>-  def top</div><div class='del'>-    @stack[-1]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Subject of #on_tail.</div><div class='del'>-  #</div><div class='del'>-  def base</div><div class='del'>-    @stack[1]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Pushes a new List.</div><div class='del'>-  #</div><div class='del'>-  def new</div><div class='del'>-    @stack.push(List.new)</div><div class='del'>-    if block_given?</div><div class='del'>-      yield self</div><div class='del'>-    else</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'>-  # Removes the last List.</div><div class='del'>-  #</div><div class='del'>-  def remove</div><div class='del'>-    @stack.pop</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Puts option summary into +to+ and returns +to+. Yields each line if</div><div class='del'>-  # a block is given.</div><div class='del'>-  #</div><div class='del'>-  # +to+:: Output destination, which must have method &lt;&lt;. Defaults to [].</div><div class='del'>-  # +width+:: Width of left side, defaults to @summary_width.</div><div class='del'>-  # +max+:: Maximum length allowed for left side, defaults to +width+ - 1.</div><div class='del'>-  # +indent+:: Indentation, defaults to @summary_indent.</div><div class='del'>-  #</div><div class='del'>-  def summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &amp;blk)</div><div class='del'>-    visit(:summarize, {}, {}, width, max, indent, &amp;(blk || proc {|l| to &lt;&lt; l + $/}))</div><div class='del'>-    to</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns option summary string.</div><div class='del'>-  #</div><div class='del'>-  def help; summarize(banner.to_s.sub(/\n?\z/, "\n")) end</div><div class='del'>-  alias to_s help</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns option summary list.</div><div class='del'>-  #</div><div class='del'>-  def to_a; summarize(banner.to_a.dup) end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Checks if an argument is given twice, in which case an ArgumentError is</div><div class='del'>-  # raised. Called from OptionParser#switch only.</div><div class='del'>-  #</div><div class='del'>-  # +obj+:: New argument.</div><div class='del'>-  # +prv+:: Previously specified argument.</div><div class='del'>-  # +msg+:: Exception message.</div><div class='del'>-  #</div><div class='del'>-  def notwice(obj, prv, msg)</div><div class='del'>-    unless !prv or prv == obj</div><div class='del'>-      begin</div><div class='del'>-        raise ArgumentError, "argument #{msg} given twice: #{obj}"</div><div class='del'>-      rescue</div><div class='del'>-        $@[0, 2] = nil</div><div class='del'>-        raise</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    obj</div><div class='del'>-  end</div><div class='del'>-  private :notwice</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Creates an OptionParser::Switch from the parameters. The parsed argument</div><div class='del'>-  # value is passed to the given block, where it can be processed.</div><div class='del'>-  #</div><div class='del'>-  # See at the beginning of OptionParser for some full examples.</div><div class='del'>-  #</div><div class='del'>-  # +opts+ can include the following elements:</div><div class='del'>-  #</div><div class='del'>-  # [Argument style:]</div><div class='del'>-  #   One of the following:</div><div class='del'>-  #     :NONE, :REQUIRED, :OPTIONAL</div><div class='del'>-  #</div><div class='del'>-  # [Argument pattern:]</div><div class='del'>-  #   Acceptable option argument format, must be pre-defined with</div><div class='del'>-  #   OptionParser.accept or OptionParser#accept, or Regexp. This can appear</div><div class='del'>-  #   once or assigned as String if not present, otherwise causes an</div><div class='del'>-  #   ArgumentError. Examples:</div><div class='del'>-  #     Float, Time, Array</div><div class='del'>-  #</div><div class='del'>-  # [Possible argument values:]</div><div class='del'>-  #   Hash or Array.</div><div class='del'>-  #     [:text, :binary, :auto]</div><div class='del'>-  #     %w[iso-2022-jp shift_jis euc-jp utf8 binary]</div><div class='del'>-  #     { "jis" =&gt; "iso-2022-jp", "sjis" =&gt; "shift_jis" }</div><div class='del'>-  #</div><div class='del'>-  # [Long style switch:]</div><div class='del'>-  #   Specifies a long style switch which takes a mandatory, optional or no</div><div class='del'>-  #   argument. It's a string of the following form:</div><div class='del'>-  #     "--switch=MANDATORY" or "--switch MANDATORY"</div><div class='del'>-  #     "--switch[=OPTIONAL]"</div><div class='del'>-  #     "--switch"</div><div class='del'>-  #</div><div class='del'>-  # [Short style switch:]</div><div class='del'>-  #   Specifies short style switch which takes a mandatory, optional or no</div><div class='del'>-  #   argument. It's a string of the following form:</div><div class='del'>-  #     "-xMANDATORY"</div><div class='del'>-  #     "-x[OPTIONAL]"</div><div class='del'>-  #     "-x"</div><div class='del'>-  #   There is also a special form which matches character range (not full</div><div class='del'>-  #   set of regular expression):</div><div class='del'>-  #     "-[a-z]MANDATORY"</div><div class='del'>-  #     "-[a-z][OPTIONAL]" </div><div class='del'>-  #     "-[a-z]"</div><div class='del'>-  #</div><div class='del'>-  # [Argument style and description:]</div><div class='del'>-  #   Instead of specifying mandatory or optional arguments directly in the</div><div class='del'>-  #   switch parameter, this separate parameter can be used.</div><div class='del'>-  #     "=MANDATORY"</div><div class='del'>-  #     "=[OPTIONAL]"</div><div class='del'>-  #</div><div class='del'>-  # [Description:]</div><div class='del'>-  #   Description string for the option.</div><div class='del'>-  #     "Run verbosely"</div><div class='del'>-  # </div><div class='del'>-  # [Handler:]</div><div class='del'>-  #   Handler for the parsed argument value. Either give a block or pass a</div><div class='del'>-  #   Proc or Method as an argument.</div><div class='del'>-  #</div><div class='del'>-  def make_switch(opts, block = nil)</div><div class='del'>-    short, long, nolong, style, pattern, conv, not_pattern, not_conv, not_style = [], [], []</div><div class='del'>-    ldesc, sdesc, desc, arg = [], [], []</div><div class='del'>-    default_style = Switch::NoArgument</div><div class='del'>-    default_pattern = nil</div><div class='del'>-    klass = nil</div><div class='del'>-    o = nil</div><div class='del'>-    n, q, a = nil</div><div class='del'>-</div><div class='del'>-    opts.each do |o|</div><div class='del'>-      # argument class</div><div class='del'>-      next if search(:atype, o) do |pat, c|</div><div class='del'>-        klass = notwice(o, klass, 'type')</div><div class='del'>-        if not_style and not_style != Switch::NoArgument</div><div class='del'>-          not_pattern, not_conv = pat, c</div><div class='del'>-        else</div><div class='del'>-          default_pattern, conv = pat, c</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # directly specified pattern(any object possible to match)</div><div class='del'>-      if !(String === o) and o.respond_to?(:match)</div><div class='del'>-        pattern = notwice(o, pattern, 'pattern')</div><div class='del'>-        conv = pattern.method(:convert).to_proc if pattern.respond_to?(:convert)</div><div class='del'>-        next</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # anything others</div><div class='del'>-      case o</div><div class='del'>-      when Proc, Method</div><div class='del'>-        block = notwice(o, block, 'block')</div><div class='del'>-      when Array, Hash</div><div class='del'>-        case pattern</div><div class='del'>-        when CompletingHash</div><div class='del'>-        when nil</div><div class='del'>-          pattern = CompletingHash.new</div><div class='del'>-          conv = pattern.method(:convert).to_proc if pattern.respond_to?(:convert)</div><div class='del'>-        else</div><div class='del'>-          raise ArgumentError, "argument pattern given twice"</div><div class='del'>-        end</div><div class='del'>-        o.each {|(o, *v)| pattern[o] = v.fetch(0) {o}}</div><div class='del'>-      when Module</div><div class='del'>-        raise ArgumentError, "unsupported argument type: #{o}"</div><div class='del'>-      when *ArgumentStyle.keys</div><div class='del'>-        style = notwice(ArgumentStyle[o], style, 'style')</div><div class='del'>-      when /^--no-([^\[\]=\s]*)(.+)?/</div><div class='del'>-        q, a = $1, $2</div><div class='del'>-        o = notwice(a ? Object : TrueClass, klass, 'type')</div><div class='del'>-        not_pattern, not_conv = search(:atype, o) unless not_style</div><div class='del'>-        not_style = (not_style || default_style).guess(arg = a) if a</div><div class='del'>-        default_style = Switch::NoArgument</div><div class='del'>-        default_pattern, conv = search(:atype, FalseClass) unless default_pattern</div><div class='del'>-        ldesc &lt;&lt; "--no-#{q}"</div><div class='del'>-        long &lt;&lt; 'no-' + (q = q.downcase)</div><div class='del'>-        nolong &lt;&lt; q</div><div class='del'>-      when /^--\[no-\]([^\[\]=\s]*)(.+)?/</div><div class='del'>-        q, a = $1, $2</div><div class='del'>-        o = notwice(a ? Object : TrueClass, klass, 'type')</div><div class='del'>-        if a</div><div class='del'>-          default_style = default_style.guess(arg = a)</div><div class='del'>-          default_pattern, conv = search(:atype, o) unless default_pattern</div><div class='del'>-        end</div><div class='del'>-        ldesc &lt;&lt; "--[no-]#{q}"</div><div class='del'>-        long &lt;&lt; (o = q.downcase)</div><div class='del'>-        not_pattern, not_conv = search(:atype, FalseClass) unless not_style</div><div class='del'>-        not_style = Switch::NoArgument</div><div class='del'>-        nolong &lt;&lt; 'no-' + o</div><div class='del'>-      when /^--([^\[\]=\s]*)(.+)?/</div><div class='del'>-        q, a = $1, $2</div><div class='del'>-        if a</div><div class='del'>-          o = notwice(NilClass, klass, 'type')</div><div class='del'>-          default_style = default_style.guess(arg = a)</div><div class='del'>-          default_pattern, conv = search(:atype, o) unless default_pattern</div><div class='del'>-        end</div><div class='del'>-        ldesc &lt;&lt; "--#{q}"</div><div class='del'>-        long &lt;&lt; (o = q.downcase)</div><div class='del'>-      when /^-(\[\^?\]?(?:[^\\\]]|\\.)*\])(.+)?/</div><div class='del'>-        q, a = $1, $2</div><div class='del'>-        o = notwice(Object, klass, 'type')</div><div class='del'>-        if a</div><div class='del'>-          default_style = default_style.guess(arg = a)</div><div class='del'>-          default_pattern, conv = search(:atype, o) unless default_pattern</div><div class='del'>-        end</div><div class='del'>-        sdesc &lt;&lt; "-#{q}"</div><div class='del'>-        short &lt;&lt; Regexp.new(q)</div><div class='del'>-      when /^-(.)(.+)?/</div><div class='del'>-        q, a = $1, $2</div><div class='del'>-        if a</div><div class='del'>-          o = notwice(NilClass, klass, 'type')</div><div class='del'>-          default_style = default_style.guess(arg = a)</div><div class='del'>-          default_pattern, conv = search(:atype, o) unless default_pattern</div><div class='del'>-        end</div><div class='del'>-        sdesc &lt;&lt; "-#{q}"</div><div class='del'>-        short &lt;&lt; q</div><div class='del'>-      when /^=/</div><div class='del'>-        style = notwice(default_style.guess(arg = o), style, 'style')</div><div class='del'>-        default_pattern, conv = search(:atype, Object) unless default_pattern</div><div class='del'>-      else</div><div class='del'>-        desc.push(o)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    default_pattern, conv = search(:atype, default_style.pattern) unless default_pattern</div><div class='del'>-    if !(short.empty? and long.empty?)</div><div class='del'>-      s = (style || default_style).new(pattern || default_pattern,</div><div class='del'>-                                       conv, sdesc, ldesc, arg, desc, block)</div><div class='del'>-    elsif !block</div><div class='del'>-      raise ArgumentError, "no switch given" if style or pattern</div><div class='del'>-      s = desc</div><div class='del'>-    else</div><div class='del'>-      short &lt;&lt; pattern</div><div class='del'>-      s = (style || default_style).new(pattern,</div><div class='del'>-                                       conv, nil, nil, arg, desc, block)</div><div class='del'>-    end</div><div class='del'>-    return s, short, long,</div><div class='del'>-      (not_style.new(not_pattern, not_conv, sdesc, ldesc, nil, desc, block) if not_style),</div><div class='del'>-      nolong</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def define(*opts, &amp;block)</div><div class='del'>-    top.append(*(sw = make_switch(opts, block)))</div><div class='del'>-    sw[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Add option switch and handler. See #make_switch for an explanation of</div><div class='del'>-  # parameters.</div><div class='del'>-  #</div><div class='del'>-  def on(*opts, &amp;block)</div><div class='del'>-    define(*opts, &amp;block)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias def_option define</div><div class='del'>-</div><div class='del'>-  def define_head(*opts, &amp;block)</div><div class='del'>-    top.prepend(*(sw = make_switch(opts, block)))</div><div class='del'>-    sw[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Add option switch like with #on, but at head of summary.</div><div class='del'>-  #</div><div class='del'>-  def on_head(*opts, &amp;block)</div><div class='del'>-    define_head(*opts, &amp;block)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias def_head_option define_head</div><div class='del'>-</div><div class='del'>-  def define_tail(*opts, &amp;block)</div><div class='del'>-    base.append(*(sw = make_switch(opts, block)))</div><div class='del'>-    sw[0]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Add option switch like with #on, but at tail of summary.</div><div class='del'>-  #</div><div class='del'>-  def on_tail(*opts, &amp;block)</div><div class='del'>-    define_tail(*opts, &amp;block)</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-  alias def_tail_option define_tail</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Add separator in summary.</div><div class='del'>-  #</div><div class='del'>-  def separator(string)</div><div class='del'>-    top.append(string, nil, nil)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Parses command line arguments +argv+ in order. When a block is given,</div><div class='del'>-  # each non-option argument is yielded.</div><div class='del'>-  #</div><div class='del'>-  # Returns the rest of +argv+ left unparsed.</div><div class='del'>-  #</div><div class='del'>-  def order(*argv, &amp;block)</div><div class='del'>-    argv = argv[0].dup if argv.size == 1 and Array === argv[0]</div><div class='del'>-    order!(argv, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Same as #order, but removes switches destructively.</div><div class='del'>-  #</div><div class='del'>-  def order!(argv = default_argv, &amp;nonopt)</div><div class='del'>-    parse_in_order(argv, &amp;nonopt)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parse_in_order(argv = default_argv, setter = nil, &amp;nonopt)  # :nodoc:</div><div class='del'>-    opt, arg, sw, val, rest = nil</div><div class='del'>-    nonopt ||= proc {|arg| throw :terminate, arg}</div><div class='del'>-    argv.unshift(arg) if arg = catch(:terminate) {</div><div class='del'>-      while arg = argv.shift</div><div class='del'>-        case arg</div><div class='del'>-        # long option</div><div class='del'>-        when /\A--([^=]*)(?:=(.*))?/nm</div><div class='del'>-          opt, rest = $1, $2</div><div class='del'>-          begin</div><div class='del'>-            sw, = complete(:long, opt, true)</div><div class='del'>-          rescue ParseError</div><div class='del'>-            raise $!.set_option(arg, true)</div><div class='del'>-          end</div><div class='del'>-          begin</div><div class='del'>-            opt, cb, val = sw.parse(rest, argv) {|*exc| raise(*exc)}</div><div class='del'>-            val = cb.call(val) if cb</div><div class='del'>-            setter.call(sw.switch_name, val) if setter</div><div class='del'>-          rescue ParseError</div><div class='del'>-            raise $!.set_option(arg, rest)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        # short option</div><div class='del'>-        when /\A-(.)((=).*|.+)?/nm</div><div class='del'>-          opt, has_arg, eq, val, rest = $1, $3, $3, $2, $2</div><div class='del'>-          begin</div><div class='del'>-            sw, = search(:short, opt)</div><div class='del'>-            unless sw</div><div class='del'>-              begin</div><div class='del'>-                sw, = complete(:short, opt)</div><div class='del'>-                # short option matched.</div><div class='del'>-                val = arg.sub(/\A-/, '')</div><div class='del'>-                has_arg = true</div><div class='del'>-              rescue InvalidOption</div><div class='del'>-                # if no short options match, try completion with long</div><div class='del'>-                # options.</div><div class='del'>-                sw, = complete(:long, opt)</div><div class='del'>-                eq ||= !rest</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          rescue ParseError</div><div class='del'>-            raise $!.set_option(arg, true)</div><div class='del'>-          end</div><div class='del'>-          begin</div><div class='del'>-            opt, cb, val = sw.parse(val, argv) {|*exc| raise(*exc) if eq}</div><div class='del'>-            raise InvalidOption, arg if has_arg and !eq and arg == "-#{opt}"</div><div class='del'>-            argv.unshift(opt) if opt and (opt = opt.sub(/\A-*/, '-')) != '-'</div><div class='del'>-            val = cb.call(val) if cb</div><div class='del'>-            setter.call(sw.switch_name, val) if setter</div><div class='del'>-          rescue ParseError</div><div class='del'>-            raise $!.set_option(arg, arg.length &gt; 2)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        # non-option argument</div><div class='del'>-        else</div><div class='del'>-          catch(:prune) do</div><div class='del'>-            visit(:each_option) do |sw|</div><div class='del'>-              sw.block.call(arg) if Switch === sw and sw.match_nonswitch?(arg)</div><div class='del'>-            end</div><div class='del'>-            nonopt.call(arg)</div><div class='del'>-          end</div><div class='del'>-        end</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'>-    visit(:search, :short, nil) {|sw| sw.block.call(*argv) if !sw.pattern}</div><div class='del'>-</div><div class='del'>-    argv</div><div class='del'>-  end</div><div class='del'>-  private :parse_in_order</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Parses command line arguments +argv+ in permutation mode and returns</div><div class='del'>-  # list of non-option arguments.</div><div class='del'>-  #</div><div class='del'>-  def permute(*argv)</div><div class='del'>-    argv = argv[0].dup if argv.size == 1 and Array === argv[0]</div><div class='del'>-    permute!(argv)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Same as #permute, but removes switches destructively.</div><div class='del'>-  #</div><div class='del'>-  def permute!(argv = default_argv)</div><div class='del'>-    nonopts = []</div><div class='del'>-    arg = nil</div><div class='del'>-    order!(argv) {|arg| nonopts &lt;&lt; arg}</div><div class='del'>-    argv[0, 0] = nonopts</div><div class='del'>-    argv</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Parses command line arguments +argv+ in order when environment variable</div><div class='del'>-  # POSIXLY_CORRECT is set, and in permutation mode otherwise.</div><div class='del'>-  #</div><div class='del'>-  def parse(*argv)</div><div class='del'>-    argv = argv[0].dup if argv.size == 1 and Array === argv[0]</div><div class='del'>-    parse!(argv)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Same as #parse, but removes switches destructively.</div><div class='del'>-  #</div><div class='del'>-  def parse!(argv = default_argv)</div><div class='del'>-    if ENV.include?('POSIXLY_CORRECT')</div><div class='del'>-      order!(argv)</div><div class='del'>-    else</div><div class='del'>-      permute!(argv)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Wrapper method for getopts.rb.</div><div class='del'>-  #</div><div class='del'>-  #   params = ARGV.getopts("ab:", "foo", "bar:")</div><div class='del'>-  #   # params[:a] = true   # -a</div><div class='del'>-  #   # params[:b] = "1"    # -b1</div><div class='del'>-  #   # params[:foo] = "1"  # --foo</div><div class='del'>-  #   # params[:bar] = "x"  # --bar x</div><div class='del'>-  #</div><div class='del'>-  def getopts(*args)</div><div class='del'>-    argv = Array === args.first ? args.shift : default_argv</div><div class='del'>-    single_options, *long_options = *args</div><div class='del'>-</div><div class='del'>-    result = {}</div><div class='del'>-</div><div class='del'>-    single_options.scan(/(.)(:)?/) do |opt, val|</div><div class='del'>-      if val</div><div class='del'>-        result[opt] = nil</div><div class='del'>-        define("-#{opt} VAL")</div><div class='del'>-      else</div><div class='del'>-        result[opt] = false</div><div class='del'>-        define("-#{opt}")</div><div class='del'>-      end</div><div class='del'>-    end if single_options</div><div class='del'>-</div><div class='del'>-    long_options.each do |arg|</div><div class='del'>-      opt, val = arg.split(':', 2)</div><div class='del'>-      if val</div><div class='del'>-        result[opt] = val.empty? ? nil : val</div><div class='del'>-        define("--#{opt} VAL")</div><div class='del'>-      else</div><div class='del'>-        result[opt] = false</div><div class='del'>-        define("--#{opt}")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    parse_in_order(argv, result.method(:[]=))</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # See #getopts.</div><div class='del'>-  #</div><div class='del'>-  def self.getopts(*args)</div><div class='del'>-    new.getopts(*args)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Traverses @stack, sending each element method +id+ with +args+ and</div><div class='del'>-  # +block+.</div><div class='del'>-  #</div><div class='del'>-  def visit(id, *args, &amp;block)</div><div class='del'>-    el = nil</div><div class='del'>-    @stack.reverse_each do |el|</div><div class='del'>-      el.send(id, *args, &amp;block)</div><div class='del'>-    end</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-  private :visit</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Searches +key+ in @stack for +id+ hash and returns or yields the result.</div><div class='del'>-  #</div><div class='del'>-  def search(id, key)</div><div class='del'>-    block_given = block_given?</div><div class='del'>-    visit(:search, id, key) do |k|</div><div class='del'>-      return block_given ? yield(k) : k</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :search</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Completes shortened long style option switch and returns pair of</div><div class='del'>-  # canonical switch and switch descriptor OptionParser::Switch.</div><div class='del'>-  #</div><div class='del'>-  # +id+::    Searching table.</div><div class='del'>-  # +opt+::   Searching key.</div><div class='del'>-  # +icase+:: Search case insensitive if true.</div><div class='del'>-  # +pat+::   Optional pattern for completion.</div><div class='del'>-  #</div><div class='del'>-  def complete(typ, opt, icase = false, *pat)</div><div class='del'>-    if pat.empty?</div><div class='del'>-      search(typ, opt) {|sw| return [sw, opt]} # exact match or...</div><div class='del'>-    end</div><div class='del'>-    raise AmbiguousOption, catch(:ambiguous) {</div><div class='del'>-      visit(:complete, typ, opt, icase, *pat) {|opt, *sw| return sw}</div><div class='del'>-      raise InvalidOption, opt</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-  private :complete</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Loads options from file names as +filename+. Does nothing when the file</div><div class='del'>-  # is not present. Returns whether successfully loaded.</div><div class='del'>-  #</div><div class='del'>-  # +filename+ defaults to basename of the program without suffix in a</div><div class='del'>-  # directory ~/.options.</div><div class='del'>-  #</div><div class='del'>-  def load(filename = nil)</div><div class='del'>-    begin</div><div class='del'>-      filename ||= File.expand_path(File.basename($0, '.*'), '~/.options')</div><div class='del'>-    rescue</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-    begin</div><div class='del'>-      parse(*IO.readlines(filename).each {|s| s.chomp!})</div><div class='del'>-      true</div><div class='del'>-    rescue Errno::ENOENT, Errno::ENOTDIR</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Parses environment variable +env+ or its uppercase with splitting like a</div><div class='del'>-  # shell.</div><div class='del'>-  #</div><div class='del'>-  # +env+ defaults to the basename of the program.</div><div class='del'>-  #</div><div class='del'>-  def environment(env = File.basename($0, '.*'))</div><div class='del'>-    env = ENV[env] || ENV[env.upcase] or return</div><div class='del'>-    parse(*Shellwords.shellwords(env))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Acceptable argument classes</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Any string and no conversion. This is fall-back.</div><div class='del'>-  #</div><div class='del'>-  accept(Object) {|s,|s or s.nil?}</div><div class='del'>-</div><div class='del'>-  accept(NilClass) {|s,|s}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Any non-empty string, and no conversion.</div><div class='del'>-  #</div><div class='del'>-  accept(String, /.+/nm) {|s,*|s}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Ruby/C-like integer, octal for 0-7 sequence, binary for 0b, hexadecimal</div><div class='del'>-  # for 0x, and decimal for others; with optional sign prefix. Converts to</div><div class='del'>-  # Integer.</div><div class='del'>-  #</div><div class='del'>-  decimal = '\d+(?:_\d+)*'</div><div class='del'>-  binary = 'b[01]+(?:_[01]+)*'</div><div class='del'>-  hex = 'x[\da-f]+(?:_[\da-f]+)*'</div><div class='del'>-  octal = "0(?:[0-7]*(?:_[0-7]+)*|#{binary}|#{hex})"</div><div class='del'>-  integer = "#{octal}|#{decimal}"</div><div class='del'>-  accept(Integer, %r"\A[-+]?(?:#{integer})"io) {|s,| Integer(s) if s}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Float number format, and converts to Float.</div><div class='del'>-  #</div><div class='del'>-  float = "(?:#{decimal}(?:\\.(?:#{decimal})?)?|\\.#{decimal})(?:E[-+]?#{decimal})?"</div><div class='del'>-  floatpat = %r"\A[-+]?#{float}"io</div><div class='del'>-  accept(Float, floatpat) {|s,| s.to_f if s}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Generic numeric format, converts to Integer for integer format, Float</div><div class='del'>-  # for float format.</div><div class='del'>-  #</div><div class='del'>-  accept(Numeric, %r"\A[-+]?(?:#{octal}|#{float})"io) {|s,| eval(s) if s}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Decimal integer format, to be converted to Integer.</div><div class='del'>-  #</div><div class='del'>-  DecimalInteger = /\A[-+]?#{decimal}/io</div><div class='del'>-  accept(DecimalInteger) {|s,| s.to_i if s}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Ruby/C like octal/hexadecimal/binary integer format, to be converted to</div><div class='del'>-  # Integer.</div><div class='del'>-  #</div><div class='del'>-  OctalInteger = /\A[-+]?(?:[0-7]+(?:_[0-7]+)*|0(?:#{binary}|#{hex}))/io</div><div class='del'>-  accept(OctalInteger) {|s,| s.oct if s}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Decimal integer/float number format, to be converted to Integer for</div><div class='del'>-  # integer format, Float for float format.</div><div class='del'>-  #</div><div class='del'>-  DecimalNumeric = floatpat     # decimal integer is allowed as float also.</div><div class='del'>-  accept(DecimalNumeric) {|s,| eval(s) if s}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Boolean switch, which means whether it is present or not, whether it is</div><div class='del'>-  # absent or not with prefix no-, or it takes an argument</div><div class='del'>-  # yes/no/true/false/+/-.</div><div class='del'>-  #</div><div class='del'>-  yesno = CompletingHash.new</div><div class='del'>-  %w[- no false].each {|el| yesno[el] = false}</div><div class='del'>-  %w[+ yes true].each {|el| yesno[el] = true}</div><div class='del'>-  yesno['nil'] = false          # shoud be nil?</div><div class='del'>-  accept(TrueClass, yesno) {|arg, val| val == nil or val}</div><div class='del'>-  #</div><div class='del'>-  # Similar to TrueClass, but defaults to false.</div><div class='del'>-  #</div><div class='del'>-  accept(FalseClass, yesno) {|arg, val| val != nil and val}</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # List of strings separated by ",".</div><div class='del'>-  #</div><div class='del'>-  accept(Array) do |s,|</div><div class='del'>-    if s</div><div class='del'>-      s = s.split(',').collect {|s| s unless s.empty?}</div><div class='del'>-    end</div><div class='del'>-    s</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Regular expression with options.</div><div class='del'>-  #</div><div class='del'>-  accept(Regexp, %r"\A/((?:\\.|[^\\])*)/([[:alpha:]]+)?\z|.*") do |all, s, o|</div><div class='del'>-    f = 0</div><div class='del'>-    if o</div><div class='del'>-      f |= Regexp::IGNORECASE if /i/ =~ o</div><div class='del'>-      f |= Regexp::MULTILINE if /m/ =~ o</div><div class='del'>-      f |= Regexp::EXTENDED if /x/ =~ o</div><div class='del'>-      k = o.delete("^imx")</div><div class='del'>-    end</div><div class='del'>-    Regexp.new(s || all, f, k)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Exceptions</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Base class of exceptions from OptionParser.</div><div class='del'>-  #</div><div class='del'>-  class ParseError &lt; RuntimeError</div><div class='del'>-    # Reason which caused the error.</div><div class='del'>-    Reason = 'parse error'.freeze</div><div class='del'>-</div><div class='del'>-    def initialize(*args)</div><div class='del'>-      @args = args</div><div class='del'>-      @reason = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :args</div><div class='del'>-    attr_writer :reason</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Pushes back erred argument(s) to +argv+.</div><div class='del'>-    #</div><div class='del'>-    def recover(argv)</div><div class='del'>-      argv[0, 0] = @args</div><div class='del'>-      argv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def set_option(opt, eq)</div><div class='del'>-      if eq</div><div class='del'>-        @args[0] = opt</div><div class='del'>-      else</div><div class='del'>-        @args.unshift(opt)</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'>-    # Returns error reason. Override this for I18N.</div><div class='del'>-    #</div><div class='del'>-    def reason</div><div class='del'>-      @reason || self.class::Reason</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "#&lt;#{self.class.to_s}: #{args.join(' ')}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Default stringizing method to emit standard error message.</div><div class='del'>-    #</div><div class='del'>-    def message</div><div class='del'>-      reason + ': ' + args.join(' ')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias to_s message</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Raises when ambiguously completable string is encountered.</div><div class='del'>-  #</div><div class='del'>-  class AmbiguousOption &lt; ParseError</div><div class='del'>-    const_set(:Reason, 'ambiguous option'.freeze)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Raises when there is an argument for a switch which takes no argument.</div><div class='del'>-  #</div><div class='del'>-  class NeedlessArgument &lt; ParseError</div><div class='del'>-    const_set(:Reason, 'needless argument'.freeze)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Raises when a switch with mandatory argument has no argument.</div><div class='del'>-  #</div><div class='del'>-  class MissingArgument &lt; ParseError</div><div class='del'>-    const_set(:Reason, 'missing argument'.freeze)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Raises when switch is undefined.</div><div class='del'>-  #</div><div class='del'>-  class InvalidOption &lt; ParseError</div><div class='del'>-    const_set(:Reason, 'invalid option'.freeze)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Raises when the given argument does not match required format.</div><div class='del'>-  #</div><div class='del'>-  class InvalidArgument &lt; ParseError</div><div class='del'>-    const_set(:Reason, 'invalid argument'.freeze)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Raises when the given argument word can't be completed uniquely.</div><div class='del'>-  #</div><div class='del'>-  class AmbiguousArgument &lt; InvalidArgument</div><div class='del'>-    const_set(:Reason, 'ambiguous argument'.freeze)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Miscellaneous</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Extends command line arguments array (ARGV) to parse itself.</div><div class='del'>-  #</div><div class='del'>-  module Arguable</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Sets OptionParser object, when +opt+ is +false+ or +nil+, methods</div><div class='del'>-    # OptionParser::Arguable#options and OptionParser::Arguable#options= are</div><div class='del'>-    # undefined. Thus, there is no ways to access the OptionParser object</div><div class='del'>-    # via the receiver object.</div><div class='del'>-    #</div><div class='del'>-    def options=(opt)</div><div class='del'>-      unless @optparse = opt</div><div class='del'>-        class &lt;&lt; self</div><div class='del'>-          undef_method(:options)</div><div class='del'>-          undef_method(:options=)</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'>-    # Actual OptionParser object, automatically created if nonexistent.</div><div class='del'>-    #</div><div class='del'>-    # If called with a block, yields the OptionParser object and returns the</div><div class='del'>-    # result of the block. If an OptionParser::ParseError exception occurs</div><div class='del'>-    # in the block, it is rescued, a error message printed to STDERR and</div><div class='del'>-    # +nil+ returned.</div><div class='del'>-    #</div><div class='del'>-    def options</div><div class='del'>-      @optparse ||= OptionParser.new</div><div class='del'>-      @optparse.default_argv = self</div><div class='del'>-      block_given? or return @optparse</div><div class='del'>-      begin</div><div class='del'>-        yield @optparse</div><div class='del'>-      rescue ParseError</div><div class='del'>-        @optparse.warn $!</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Parses +self+ destructively in order and returns +self+ containing the</div><div class='del'>-    # rest arguments left unparsed.</div><div class='del'>-    #</div><div class='del'>-    def order!(&amp;blk) options.order!(self, &amp;blk) end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Parses +self+ destructively in permutation mode and returns +self+</div><div class='del'>-    # containing the rest arguments left unparsed.</div><div class='del'>-    #</div><div class='del'>-    def permute!() options.permute!(self) end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Parses +self+ destructively and returns +self+ containing the</div><div class='del'>-    # rest arguments left unparsed.</div><div class='del'>-    #</div><div class='del'>-    def parse!() options.parse!(self) end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Substitution of getopts is possible as follows. Also see</div><div class='del'>-    # OptionParser#getopts.</div><div class='del'>-    #</div><div class='del'>-    #   def getopts(*args)</div><div class='del'>-    #     ($OPT = ARGV.getopts(*args)).each do |opt, val|</div><div class='del'>-    #       eval "$OPT_#{opt.gsub(/[^A-Za-z0-9_]/, '_')} = val"</div><div class='del'>-    #     end</div><div class='del'>-    #   rescue OptionParser::ParseError</div><div class='del'>-    #   end</div><div class='del'>-    #</div><div class='del'>-    def getopts(*args)</div><div class='del'>-      options.getopts(self, *args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Initializes instance variable.</div><div class='del'>-    #</div><div class='del'>-    def self.extend_object(obj)</div><div class='del'>-      super</div><div class='del'>-      obj.instance_eval {@optparse = nil}</div><div class='del'>-    end</div><div class='del'>-    def initialize(*args)</div><div class='del'>-      super</div><div class='del'>-      @optparse = nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Acceptable argument classes. Now contains DecimalInteger, OctalInteger</div><div class='del'>-  # and DecimalNumeric. See Acceptable argument classes (in source code).</div><div class='del'>-  #</div><div class='del'>-  module Acceptables</div><div class='del'>-    const_set(:DecimalInteger, OptionParser::DecimalInteger)</div><div class='del'>-    const_set(:OctalInteger, OptionParser::OctalInteger)</div><div class='del'>-    const_set(:DecimalNumeric, OptionParser::DecimalNumeric)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# ARGV is arguable by OptionParser</div><div class='del'>-ARGV.extend(OptionParser::Arguable)</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  Version = OptionParser::Version</div><div class='del'>-  ARGV.options {|q|</div><div class='del'>-    q.parse!.empty? or puts "what's #{ARGV.join(' ')}?"</div><div class='del'>-  } or abort(ARGV.options.to_s)</div><div class='del'>-end</div><div class='head'>diff --git a/lib/optparse/date.rb b/lib/optparse/date.rb<br/>deleted file mode 100644<br/>index d680559f37..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/optparse/date.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse/date.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-require 'optparse'</div><div class='del'>-require 'date'</div><div class='del'>-</div><div class='del'>-OptionParser.accept(DateTime) do |s,|</div><div class='del'>-  begin</div><div class='del'>-    DateTime.parse(s) if s</div><div class='del'>-  rescue ArgumentError</div><div class='del'>-    raise OptionParser::InvalidArgument, s</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-OptionParser.accept(Date) do |s,|</div><div class='del'>-  begin</div><div class='del'>-    Date.parse(s) if s</div><div class='del'>-  rescue ArgumentError</div><div class='del'>-    raise OptionParser::InvalidArgument, s</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/optparse/shellwords.rb b/lib/optparse/shellwords.rb<br/>deleted file mode 100644<br/>index 0422d7c887..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/optparse/shellwords.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse/shellwords.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'shellwords'</div><div class='del'>-require 'optparse'</div><div class='del'>-</div><div class='del'>-OptionParser.accept(Shellwords) {|s,| Shellwords.shellwords(s)}</div><div class='head'>diff --git a/lib/optparse/time.rb b/lib/optparse/time.rb<br/>deleted file mode 100644<br/>index 402cadcf16..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/optparse/time.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse/time.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-require 'optparse'</div><div class='del'>-require 'time'</div><div class='del'>-</div><div class='del'>-OptionParser.accept(Time) do |s,|</div><div class='del'>-  begin</div><div class='del'>-    (Time.httpdate(s) rescue Time.parse(s)) if s</div><div class='del'>-  rescue</div><div class='del'>-    raise OptionParser::InvalidArgument, s</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/optparse/uri.rb b/lib/optparse/uri.rb<br/>deleted file mode 100644<br/>index 024dc69eac..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/optparse/uri.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse/uri.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-# -*- ruby -*-</div><div class='del'>-</div><div class='del'>-require 'optparse'</div><div class='del'>-require 'uri'</div><div class='del'>-</div><div class='del'>-OptionParser.accept(URI) {|s,| URI.parse(s) if s}</div><div class='head'>diff --git a/lib/optparse/version.rb b/lib/optparse/version.rb<br/>deleted file mode 100644<br/>index 558d9d710b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/optparse/version.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/optparse/version.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,70 +0,0 @@</div><div class='del'>-# OptionParser internal utility</div><div class='del'>-</div><div class='del'>-class &lt;&lt; OptionParser</div><div class='del'>-  def show_version(*pkg)</div><div class='del'>-    progname = ARGV.options.program_name</div><div class='del'>-    result = false</div><div class='del'>-    show = proc do |klass, cname, version|</div><div class='del'>-      str = "#{progname}"</div><div class='del'>-      unless klass == ::Object and cname == :VERSION</div><div class='del'>-        version = version.join(".") if Array === version</div><div class='del'>-        str &lt;&lt; ": #{klass}" unless klass == Object</div><div class='del'>-        str &lt;&lt; " version #{version}"</div><div class='del'>-      end</div><div class='del'>-      [:Release, :RELEASE].find do |rel|</div><div class='del'>-        if klass.const_defined?(rel)</div><div class='del'>-          str &lt;&lt; " (#{klass.const_get(rel)})"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      puts str</div><div class='del'>-      result = true</div><div class='del'>-    end</div><div class='del'>-    if pkg.size == 1 and pkg[0] == "all"</div><div class='del'>-      self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|</div><div class='del'>-        unless cname[1] == ?e and klass.const_defined?(:Version)</div><div class='del'>-          show.call(klass, cname.intern, version)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      pkg.each do |pkg|</div><div class='del'>-        begin</div><div class='del'>-          pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}</div><div class='del'>-          v = case</div><div class='del'>-              when pkg.const_defined?(:Version)</div><div class='del'>-                pkg.const_get(n = :Version)</div><div class='del'>-              when pkg.const_defined?(:VERSION)</div><div class='del'>-                pkg.const_get(n = :VERSION)</div><div class='del'>-              else</div><div class='del'>-                n = nil</div><div class='del'>-                "unknown"</div><div class='del'>-              end</div><div class='del'>-          show.call(pkg, n, v)</div><div class='del'>-        rescue NameError</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def each_const(path, klass = ::Object)</div><div class='del'>-    path.split(/::|\//).inject(klass) do |klass, name|</div><div class='del'>-      raise NameError, path unless Module === klass</div><div class='del'>-      klass.constants.grep(/#{name}/i) do |c|</div><div class='del'>-        klass.const_defined?(c) or next</div><div class='del'>-        c = klass.const_get(c)</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_const(klass, name)</div><div class='del'>-    klasses = [klass]</div><div class='del'>-    while klass = klasses.shift</div><div class='del'>-      klass.constants.each do |cname|</div><div class='del'>-        klass.const_defined?(cname) or next</div><div class='del'>-        const = klass.const_get(cname)</div><div class='del'>-        yield klass, cname, const if name === cname</div><div class='del'>-        klasses &lt;&lt; const if Module === const and const != ::Object</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/lib/ostruct.rb b/lib/ostruct.rb<br/>deleted file mode 100644<br/>index 6af5bbdac0..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/ostruct.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/ostruct.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,146 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = ostruct.rb: OpenStruct implementation</div><div class='del'>-#</div><div class='del'>-# Author:: Yukihiro Matsumoto</div><div class='del'>-# Documentation:: Gavin Sinclair</div><div class='del'>-#</div><div class='del'>-# OpenStruct allows the creation of data objects with arbitrary attributes.</div><div class='del'>-# See OpenStruct for an example.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# OpenStruct allows you to create data objects and set arbitrary attributes.</div><div class='del'>-# For example:</div><div class='del'>-#</div><div class='del'>-#   require 'ostruct' </div><div class='del'>-#</div><div class='del'>-#   record = OpenStruct.new</div><div class='del'>-#   record.name    = "John Smith"</div><div class='del'>-#   record.age     = 70</div><div class='del'>-#   record.pension = 300</div><div class='del'>-#   </div><div class='del'>-#   puts record.name     # -&gt; "John Smith"</div><div class='del'>-#   puts record.address  # -&gt; nil</div><div class='del'>-#</div><div class='del'>-# It is like a hash with a different way to access the data.  In fact, it is</div><div class='del'>-# implemented with a hash, and you can initialize it with one.</div><div class='del'>-#</div><div class='del'>-#   hash = { "country" =&gt; "Australia", :population =&gt; 20_000_000 }</div><div class='del'>-#   data = OpenStruct.new(hash)</div><div class='del'>-#</div><div class='del'>-#   p data        # -&gt; &lt;OpenStruct country="Australia" population=20000000&gt;</div><div class='del'>-#</div><div class='del'>-class OpenStruct</div><div class='del'>-  #</div><div class='del'>-  # Create a new OpenStruct object.  The optional +hash+, if given, will</div><div class='del'>-  # generate attributes and values.  For example.</div><div class='del'>-  #</div><div class='del'>-  #   require 'ostruct'</div><div class='del'>-  #   hash = { "country" =&gt; "Australia", :population =&gt; 20_000_000 }</div><div class='del'>-  #   data = OpenStruct.new(hash)</div><div class='del'>-  #</div><div class='del'>-  #   p data        # -&gt; &lt;OpenStruct country="Australia" population=20000000&gt;</div><div class='del'>-  #</div><div class='del'>-  # By default, the resulting OpenStruct object will have no attributes. </div><div class='del'>-  #</div><div class='del'>-  def initialize(hash=nil)</div><div class='del'>-    @table = {}</div><div class='del'>-    if hash</div><div class='del'>-      for k,v in hash</div><div class='del'>-        @table[k.to_sym] = v</div><div class='del'>-        new_ostruct_member(k)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Duplicate an OpenStruct object members. </div><div class='del'>-  def initialize_copy(orig)</div><div class='del'>-    super</div><div class='del'>-    @table = @table.dup</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def marshal_dump</div><div class='del'>-    @table</div><div class='del'>-  end</div><div class='del'>-  def marshal_load(x)</div><div class='del'>-    @table = x</div><div class='del'>-    @table.each_key{|key| new_ostruct_member(key)}</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def new_ostruct_member(name)</div><div class='del'>-    name = name.to_sym</div><div class='del'>-    unless self.respond_to?(name)</div><div class='del'>-      meta = class &lt;&lt; self; self; end</div><div class='del'>-      meta.send(:define_method, name) { @table[name] }</div><div class='del'>-      meta.send(:define_method, :"#{name}=") { |x| @table[name] = x }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def method_missing(mid, *args) # :nodoc:</div><div class='del'>-    mname = mid.id2name</div><div class='del'>-    len = args.length</div><div class='del'>-    if mname =~ /=$/</div><div class='del'>-      if len != 1</div><div class='del'>-        raise ArgumentError, "wrong number of arguments (#{len} for 1)", caller(1)</div><div class='del'>-      end</div><div class='del'>-      if self.frozen?</div><div class='del'>-        raise TypeError, "can't modify frozen #{self.class}", caller(1)</div><div class='del'>-      end</div><div class='del'>-      mname.chop!</div><div class='del'>-      self.new_ostruct_member(mname)</div><div class='del'>-      @table[mname.intern] = args[0]</div><div class='del'>-    elsif len == 0</div><div class='del'>-      @table[mid]</div><div class='del'>-    else</div><div class='del'>-      raise NoMethodError, "undefined method `#{mname}' for #{self}", caller(1)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Remove the named field from the object.</div><div class='del'>-  #</div><div class='del'>-  def delete_field(name)</div><div class='del'>-    @table.delete name.to_sym</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  InspectKey = :__inspect_key__ # :nodoc:</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns a string containing a detailed summary of the keys and values.</div><div class='del'>-  #</div><div class='del'>-  def inspect</div><div class='del'>-    str = "#&lt;#{self.class}"</div><div class='del'>-</div><div class='del'>-    Thread.current[InspectKey] ||= []</div><div class='del'>-    if Thread.current[InspectKey].include?(self) then</div><div class='del'>-      str &lt;&lt; " ..."</div><div class='del'>-    else</div><div class='del'>-      first = true</div><div class='del'>-      for k,v in @table</div><div class='del'>-        str &lt;&lt; "," unless first</div><div class='del'>-        first = false</div><div class='del'>-</div><div class='del'>-        Thread.current[InspectKey] &lt;&lt; v</div><div class='del'>-        begin</div><div class='del'>-          str &lt;&lt; " #{k}=#{v.inspect}"</div><div class='del'>-        ensure</div><div class='del'>-          Thread.current[InspectKey].pop</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    str &lt;&lt; "&gt;"</div><div class='del'>-  end</div><div class='del'>-  alias :to_s :inspect</div><div class='del'>-</div><div class='del'>-  attr_reader :table # :nodoc:</div><div class='del'>-  protected :table</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Compare this object and +other+ for equality.</div><div class='del'>-  #</div><div class='del'>-  def ==(other)</div><div class='del'>-    return false unless(other.kind_of?(OpenStruct))</div><div class='del'>-    return @table == other.table</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/parsearg.rb b/lib/parsearg.rb<br/>deleted file mode 100644<br/>index cab2dba789..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/parsearg.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/parsearg.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#		parsearg.rb - parse arguments</div><div class='del'>-#			$Release Version: $</div><div class='del'>-#			$Revision$</div><div class='del'>-#			$Date$</div><div class='del'>-#			by Yasuo OHBA(SHL Japan Inc. Technology Dept.)</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'>-warn "Warning:#{caller[0].sub(/:in `.*'\z/, '')}: parsearg is deprecated after Ruby 1.8.1; use optparse instead"</div><div class='del'>-</div><div class='del'>-$RCS_ID=%q$Header$</div><div class='del'>-</div><div class='del'>-require "getopts"</div><div class='del'>-</div><div class='del'>-def printUsageAndExit()</div><div class='del'>-  if $USAGE</div><div class='del'>-    eval($USAGE)</div><div class='del'>-  end</div><div class='del'>-  exit()</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def setParenthesis(ex, opt, c)</div><div class='del'>-  if opt != ""</div><div class='del'>-    ex = sprintf("%s$OPT_%s%s", ex, opt, c)</div><div class='del'>-  else</div><div class='del'>-    ex = sprintf("%s%s", ex, c)</div><div class='del'>-  end</div><div class='del'>-  return ex</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def setOrAnd(ex, opt, c)</div><div class='del'>-  if opt != ""</div><div class='del'>-    ex = sprintf("%s$OPT_%s %s%s ", ex, opt, c, c)</div><div class='del'>-  else</div><div class='del'>-    ex = sprintf("%s %s%s ", ex, c, c)</div><div class='del'>-  end</div><div class='del'>-  return ex</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-def setExpression(ex, opt, op)</div><div class='del'>-  if !op</div><div class='del'>-    ex = sprintf("%s$OPT_%s", ex, opt)</div><div class='del'>-    return ex</div><div class='del'>-  end</div><div class='del'>-  case op.chr</div><div class='del'>-  when "(", ")"</div><div class='del'>-    ex = setParenthesis(ex, opt, op.chr)</div><div class='del'>-  when "|", "&amp;"</div><div class='del'>-    ex = setOrAnd(ex, opt, op.chr)</div><div class='del'>-  else</div><div class='del'>-    return nil</div><div class='del'>-  end</div><div class='del'>-  return ex</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# parseArgs is obsolete.  Use OptionParser instead.</div><div class='del'>-</div><div class='del'>-def parseArgs(argc, nopt, single_opts, *opts)</div><div class='del'>-  if (noOptions = getopts(single_opts, *opts)) == nil</div><div class='del'>-    printUsageAndExit()</div><div class='del'>-  end</div><div class='del'>-  if nopt</div><div class='del'>-    ex = nil</div><div class='del'>-    pos = 0</div><div class='del'>-    for o in nopt.split(/[()|&amp;]/)</div><div class='del'>-      pos += o.length</div><div class='del'>-      ex = setExpression(ex, o, nopt[pos])</div><div class='del'>-      pos += 1</div><div class='del'>-    end</div><div class='del'>-    begin</div><div class='del'>-      if !eval(ex)</div><div class='del'>-	printUsageAndExit()</div><div class='del'>-      end</div><div class='del'>-    rescue</div><div class='del'>-      print "Format Error!! : \"" + nopt + "\"\t[parseArgs]\n"</div><div class='del'>-      exit!(-1)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  if ARGV.length &lt; argc</div><div class='del'>-    printUsageAndExit()</div><div class='del'>-  end</div><div class='del'>-  return noOptions</div><div class='del'>-end</div><div class='head'>diff --git a/lib/parsedate.rb b/lib/parsedate.rb<br/>deleted file mode 100644<br/>index b52a79ba47..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/parsedate.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/parsedate.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,53 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = parsedate.rb: Parses dates</div><div class='del'>-#</div><div class='del'>-# Author:: Tadayoshi Funaba</div><div class='del'>-# Documentation:: Konrad Meyer</div><div class='del'>-#</div><div class='del'>-# ParseDate munches on a date and turns it into an array of values.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# ParseDate converts a date into an array of values.</div><div class='del'>-# For example:</div><div class='del'>-#</div><div class='del'>-#   require 'parsedate'</div><div class='del'>-#</div><div class='del'>-#   ParseDate.parsedate "Tuesday, July 6th, 2007, 18:35:20 UTC"</div><div class='del'>-#   # =&gt; [2007, 7, 6, 18, 35, 20, "UTC", 2]</div><div class='del'>-#</div><div class='del'>-# The order is of the form [year, month, day of month, hour, minute, second,</div><div class='del'>-# timezone, day of the week].</div><div class='del'>-</div><div class='del'>-require 'date/format'</div><div class='del'>-</div><div class='del'>-module ParseDate</div><div class='del'>-  #</div><div class='del'>-  # Parse a string representation of a date into values.</div><div class='del'>-  # For example:</div><div class='del'>-  #</div><div class='del'>-  #   require 'parsedate'</div><div class='del'>-  #</div><div class='del'>-  #   ParseDate.parsedate "Tuesday, July 5th, 2007, 18:35:20 UTC"</div><div class='del'>-  #   # =&gt; [2007, 7, 5, 18, 35, 20, "UTC", 2]</div><div class='del'>-  #</div><div class='del'>-  # The order is of the form [year, month, day of month, hour, minute,</div><div class='del'>-  # second, timezone, day of week].</div><div class='del'>-  #</div><div class='del'>-  # ParseDate.parsedate can also take a second argument, +comp+, which</div><div class='del'>-  # is a boolean telling the method to compensate for dates with years</div><div class='del'>-  # expressed as two digits. Example:</div><div class='del'>-  #</div><div class='del'>-  #   require 'parsedate'</div><div class='del'>-  #</div><div class='del'>-  #   ParseDate.parsedate "Mon Dec 25 00 06:53:24 UTC", true</div><div class='del'>-  #   # =&gt; [2000, 12, 25, 6, 53, 24, "UTC", 1]</div><div class='del'>-  #</div><div class='del'>-  def parsedate(str, comp=false)</div><div class='del'>-    Date._parse(str, comp).</div><div class='del'>-      values_at(:year, :mon, :mday, :hour, :min, :sec, :zone, :wday)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module_function :parsedate</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/pathname.rb b/lib/pathname.rb<br/>deleted file mode 100644<br/>index e4ca5489ce..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/pathname.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/pathname.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1062 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = pathname.rb</div><div class='del'>-#</div><div class='del'>-# Object-Oriented Pathname Class</div><div class='del'>-#</div><div class='del'>-# Author:: Tanaka Akira &lt;akr@m17n.org&gt;</div><div class='del'>-# Documentation:: Author and Gavin Sinclair</div><div class='del'>-#</div><div class='del'>-# For documentation, see class Pathname.</div><div class='del'>-#</div><div class='del'>-# &lt;tt&gt;pathname.rb&lt;/tt&gt; is distributed with Ruby since 1.8.0.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# == Pathname</div><div class='del'>-#</div><div class='del'>-# Pathname represents a pathname which locates a file in a filesystem.</div><div class='del'>-# The pathname depends on OS: Unix, Windows, etc.</div><div class='del'>-# Pathname library works with pathnames of local OS.</div><div class='del'>-# However non-Unix pathnames are supported experimentally.</div><div class='del'>-#</div><div class='del'>-# It does not represent the file itself.</div><div class='del'>-# A Pathname can be relative or absolute.  It's not until you try to</div><div class='del'>-# reference the file that it even matters whether the file exists or not.</div><div class='del'>-#</div><div class='del'>-# Pathname is immutable.  It has no method for destructive update.</div><div class='del'>-#</div><div class='del'>-# The value of this class is to manipulate file path information in a neater</div><div class='del'>-# way than standard Ruby provides.  The examples below demonstrate the</div><div class='del'>-# difference.  *All* functionality from File, FileTest, and some from Dir and</div><div class='del'>-# FileUtils is included, in an unsurprising way.  It is essentially a facade for</div><div class='del'>-# all of these, and more.</div><div class='del'>-#</div><div class='del'>-# == Examples</div><div class='del'>-#</div><div class='del'>-# === Example 1: Using Pathname</div><div class='del'>-#</div><div class='del'>-#   require 'pathname'</div><div class='del'>-#   p = Pathname.new("/usr/bin/ruby")</div><div class='del'>-#   size = p.size              # 27662</div><div class='del'>-#   isdir = p.directory?       # false</div><div class='del'>-#   dir  = p.dirname           # Pathname:/usr/bin</div><div class='del'>-#   base = p.basename          # Pathname:ruby</div><div class='del'>-#   dir, base = p.split        # [Pathname:/usr/bin, Pathname:ruby]</div><div class='del'>-#   data = p.read</div><div class='del'>-#   p.open { |f| _ } </div><div class='del'>-#   p.each_line { |line| _ }</div><div class='del'>-#</div><div class='del'>-# === Example 2: Using standard Ruby</div><div class='del'>-#</div><div class='del'>-#   p = "/usr/bin/ruby"</div><div class='del'>-#   size = File.size(p)        # 27662</div><div class='del'>-#   isdir = File.directory?(p) # false</div><div class='del'>-#   dir  = File.dirname(p)     # "/usr/bin"</div><div class='del'>-#   base = File.basename(p)    # "ruby"</div><div class='del'>-#   dir, base = File.split(p)  # ["/usr/bin", "ruby"]</div><div class='del'>-#   data = File.read(p)</div><div class='del'>-#   File.open(p) { |f| _ } </div><div class='del'>-#   File.foreach(p) { |line| _ }</div><div class='del'>-#</div><div class='del'>-# === Example 3: Special features</div><div class='del'>-#</div><div class='del'>-#   p1 = Pathname.new("/usr/lib")   # Pathname:/usr/lib</div><div class='del'>-#   p2 = p1 + "ruby/1.8"            # Pathname:/usr/lib/ruby/1.8</div><div class='del'>-#   p3 = p1.parent                  # Pathname:/usr</div><div class='del'>-#   p4 = p2.relative_path_from(p3)  # Pathname:lib/ruby/1.8</div><div class='del'>-#   pwd = Pathname.pwd              # Pathname:/home/gavin</div><div class='del'>-#   pwd.absolute?                   # true</div><div class='del'>-#   p5 = Pathname.new "."           # Pathname:.</div><div class='del'>-#   p5 = p5 + "music/../articles"   # Pathname:music/../articles</div><div class='del'>-#   p5.cleanpath                    # Pathname:articles</div><div class='del'>-#   p5.realpath                     # Pathname:/home/gavin/articles</div><div class='del'>-#   p5.children                     # [Pathname:/home/gavin/articles/linux, ...]</div><div class='del'>-# </div><div class='del'>-# == Breakdown of functionality</div><div class='del'>-#</div><div class='del'>-# === Core methods</div><div class='del'>-#</div><div class='del'>-# These methods are effectively manipulating a String, because that's all a path</div><div class='del'>-# is.  Except for #mountpoint?, #children, and #realpath, they don't access the</div><div class='del'>-# filesystem.</div><div class='del'>-#</div><div class='del'>-# - +</div><div class='del'>-# - #join</div><div class='del'>-# - #parent</div><div class='del'>-# - #root?</div><div class='del'>-# - #absolute?</div><div class='del'>-# - #relative?</div><div class='del'>-# - #relative_path_from</div><div class='del'>-# - #each_filename</div><div class='del'>-# - #cleanpath</div><div class='del'>-# - #realpath</div><div class='del'>-# - #children</div><div class='del'>-# - #mountpoint?</div><div class='del'>-#</div><div class='del'>-# === File status predicate methods</div><div class='del'>-#</div><div class='del'>-# These methods are a facade for FileTest:</div><div class='del'>-# - #blockdev?</div><div class='del'>-# - #chardev?</div><div class='del'>-# - #directory?</div><div class='del'>-# - #executable?</div><div class='del'>-# - #executable_real?</div><div class='del'>-# - #exist?</div><div class='del'>-# - #file?</div><div class='del'>-# - #grpowned?</div><div class='del'>-# - #owned?</div><div class='del'>-# - #pipe?</div><div class='del'>-# - #readable?</div><div class='del'>-# - #world_readable?</div><div class='del'>-# - #readable_real?</div><div class='del'>-# - #setgid?</div><div class='del'>-# - #setuid?</div><div class='del'>-# - #size</div><div class='del'>-# - #size?</div><div class='del'>-# - #socket?</div><div class='del'>-# - #sticky?</div><div class='del'>-# - #symlink?</div><div class='del'>-# - #writable?</div><div class='del'>-# - #world_writable?</div><div class='del'>-# - #writable_real?</div><div class='del'>-# - #zero?</div><div class='del'>-#</div><div class='del'>-# === File property and manipulation methods</div><div class='del'>-#</div><div class='del'>-# These methods are a facade for File:</div><div class='del'>-# - #atime</div><div class='del'>-# - #ctime</div><div class='del'>-# - #mtime</div><div class='del'>-# - #chmod(mode)</div><div class='del'>-# - #lchmod(mode)</div><div class='del'>-# - #chown(owner, group)</div><div class='del'>-# - #lchown(owner, group)</div><div class='del'>-# - #fnmatch(pattern, *args)</div><div class='del'>-# - #fnmatch?(pattern, *args)</div><div class='del'>-# - #ftype</div><div class='del'>-# - #make_link(old)</div><div class='del'>-# - #open(*args, &amp;block)</div><div class='del'>-# - #readlink</div><div class='del'>-# - #rename(to)</div><div class='del'>-# - #stat</div><div class='del'>-# - #lstat</div><div class='del'>-# - #make_symlink(old)</div><div class='del'>-# - #truncate(length)</div><div class='del'>-# - #utime(atime, mtime)</div><div class='del'>-# - #basename(*args)</div><div class='del'>-# - #dirname</div><div class='del'>-# - #extname</div><div class='del'>-# - #expand_path(*args)</div><div class='del'>-# - #split</div><div class='del'>-#</div><div class='del'>-# === Directory methods</div><div class='del'>-#</div><div class='del'>-# These methods are a facade for Dir:</div><div class='del'>-# - Pathname.glob(*args)</div><div class='del'>-# - Pathname.getwd / Pathname.pwd</div><div class='del'>-# - #rmdir</div><div class='del'>-# - #entries</div><div class='del'>-# - #each_entry(&amp;block)</div><div class='del'>-# - #mkdir(*args)</div><div class='del'>-# - #opendir(*args)</div><div class='del'>-#</div><div class='del'>-# === IO</div><div class='del'>-#</div><div class='del'>-# These methods are a facade for IO:</div><div class='del'>-# - #each_line(*args, &amp;block)</div><div class='del'>-# - #read(*args)</div><div class='del'>-# - #readlines(*args)</div><div class='del'>-# - #sysopen(*args)</div><div class='del'>-#</div><div class='del'>-# === Utilities</div><div class='del'>-#</div><div class='del'>-# These methods are a mixture of Find, FileUtils, and others:</div><div class='del'>-# - #find(&amp;block)</div><div class='del'>-# - #mkpath</div><div class='del'>-# - #rmtree</div><div class='del'>-# - #unlink / #delete</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# == Method documentation</div><div class='del'>-#</div><div class='del'>-# As the above section shows, most of the methods in Pathname are facades.  The</div><div class='del'>-# documentation for these methods generally just says, for instance, "See</div><div class='del'>-# FileTest.writable?", as you should be familiar with the original method</div><div class='del'>-# anyway, and its documentation (e.g. through +ri+) will contain more</div><div class='del'>-# information.  In some cases, a brief description will follow.</div><div class='del'>-#</div><div class='del'>-class Pathname</div><div class='del'>-</div><div class='del'>-  # :stopdoc:</div><div class='del'>-  if RUBY_VERSION &lt; "1.9"</div><div class='del'>-    TO_PATH = :to_str</div><div class='del'>-  else</div><div class='del'>-    # to_path is implemented so Pathname objects are usable with File.open, etc.</div><div class='del'>-    TO_PATH = :to_path</div><div class='del'>-  end</div><div class='del'>-  # :startdoc:</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Create a Pathname object from the given String (or String-like object).</div><div class='del'>-  # If +path+ contains a NUL character (&lt;tt&gt;\0&lt;/tt&gt;), an ArgumentError is raised.</div><div class='del'>-  #</div><div class='del'>-  def initialize(path)</div><div class='del'>-    path = path.__send__(TO_PATH) if path.respond_to? TO_PATH</div><div class='del'>-    @path = path.dup</div><div class='del'>-</div><div class='del'>-    if /\0/ =~ @path</div><div class='del'>-      raise ArgumentError, "pathname contains \\0: #{@path.inspect}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    self.taint if @path.tainted?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def freeze() super; @path.freeze; self end</div><div class='del'>-  def taint() super; @path.taint; self end</div><div class='del'>-  def untaint() super; @path.untaint; self end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Compare this pathname with +other+.  The comparison is string-based.</div><div class='del'>-  # Be aware that two different paths (&lt;tt&gt;foo.txt&lt;/tt&gt; and &lt;tt&gt;./foo.txt&lt;/tt&gt;)</div><div class='del'>-  # can refer to the same file.</div><div class='del'>-  #</div><div class='del'>-  def ==(other)</div><div class='del'>-    return false unless Pathname === other</div><div class='del'>-    other.to_s == @path</div><div class='del'>-  end</div><div class='del'>-  alias === ==</div><div class='del'>-  alias eql? ==</div><div class='del'>-</div><div class='del'>-  # Provides for comparing pathnames, case-sensitively.</div><div class='del'>-  def &lt;=&gt;(other)</div><div class='del'>-    return nil unless Pathname === other</div><div class='del'>-    @path.tr('/', "\0") &lt;=&gt; other.to_s.tr('/', "\0")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def hash # :nodoc:</div><div class='del'>-    @path.hash</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return the path as a String.</div><div class='del'>-  def to_s</div><div class='del'>-    @path.dup</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # to_path is implemented so Pathname objects are usable with File.open, etc.</div><div class='del'>-  alias_method TO_PATH, :to_s</div><div class='del'>-</div><div class='del'>-  def inspect # :nodoc:</div><div class='del'>-    "#&lt;#{self.class}:#{@path}&gt;"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return a pathname which is substituted by String#sub.</div><div class='del'>-  def sub(pattern, *rest, &amp;block)</div><div class='del'>-    self.class.new(@path.sub(pattern, *rest, &amp;block))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  if File::ALT_SEPARATOR</div><div class='del'>-    SEPARATOR_PAT = /[#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}]/</div><div class='del'>-  else</div><div class='del'>-    SEPARATOR_PAT = /#{Regexp.quote File::SEPARATOR}/</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # chop_basename(path) -&gt; [pre-basename, basename] or nil</div><div class='del'>-  def chop_basename(path)</div><div class='del'>-    base = File.basename(path)</div><div class='del'>-    if /\A#{SEPARATOR_PAT}?\z/ =~ base</div><div class='del'>-      return nil</div><div class='del'>-    else</div><div class='del'>-      return path[0, path.rindex(base)], base</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :chop_basename</div><div class='del'>-</div><div class='del'>-  # split_names(path) -&gt; prefix, [name, ...]</div><div class='del'>-  def split_names(path)</div><div class='del'>-    names = []</div><div class='del'>-    while r = chop_basename(path)</div><div class='del'>-      path, basename = r</div><div class='del'>-      names.unshift basename</div><div class='del'>-    end</div><div class='del'>-    return path, names</div><div class='del'>-  end</div><div class='del'>-  private :split_names</div><div class='del'>-</div><div class='del'>-  def prepend_prefix(prefix, relpath)</div><div class='del'>-    if relpath.empty?</div><div class='del'>-      File.dirname(prefix)</div><div class='del'>-    elsif /#{SEPARATOR_PAT}/ =~ prefix</div><div class='del'>-      prefix = File.dirname(prefix)</div><div class='del'>-      prefix = File.join(prefix, "") if File.basename(prefix + 'a') != 'a'</div><div class='del'>-      prefix + relpath</div><div class='del'>-    else</div><div class='del'>-      prefix + relpath</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :prepend_prefix</div><div class='del'>-</div><div class='del'>-  # Returns clean pathname of +self+ with consecutive slashes and useless dots</div><div class='del'>-  # removed.  The filesystem is not accessed.</div><div class='del'>-  #</div><div class='del'>-  # If +consider_symlink+ is +true+, then a more conservative algorithm is used</div><div class='del'>-  # to avoid breaking symbolic linkages.  This may retain more &lt;tt&gt;..&lt;/tt&gt;</div><div class='del'>-  # entries than absolutely necessary, but without accessing the filesystem,</div><div class='del'>-  # this can't be avoided.  See #realpath.</div><div class='del'>-  #</div><div class='del'>-  def cleanpath(consider_symlink=false)</div><div class='del'>-    if consider_symlink</div><div class='del'>-      cleanpath_conservative</div><div class='del'>-    else</div><div class='del'>-      cleanpath_aggressive</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Clean the path simply by resolving and removing excess "." and ".." entries.</div><div class='del'>-  # Nothing more, nothing less.</div><div class='del'>-  #</div><div class='del'>-  def cleanpath_aggressive</div><div class='del'>-    path = @path</div><div class='del'>-    names = []</div><div class='del'>-    pre = path</div><div class='del'>-    while r = chop_basename(pre)</div><div class='del'>-      pre, base = r</div><div class='del'>-      case base</div><div class='del'>-      when '.'</div><div class='del'>-      when '..'</div><div class='del'>-        names.unshift base</div><div class='del'>-      else</div><div class='del'>-        if names[0] == '..'</div><div class='del'>-          names.shift</div><div class='del'>-        else</div><div class='del'>-          names.unshift base</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if /#{SEPARATOR_PAT}/o =~ File.basename(pre)</div><div class='del'>-      names.shift while names[0] == '..'</div><div class='del'>-    end</div><div class='del'>-    self.class.new(prepend_prefix(pre, File.join(*names)))</div><div class='del'>-  end</div><div class='del'>-  private :cleanpath_aggressive</div><div class='del'>-</div><div class='del'>-  # has_trailing_separator?(path) -&gt; bool</div><div class='del'>-  def has_trailing_separator?(path)</div><div class='del'>-    if r = chop_basename(path)</div><div class='del'>-      pre, basename = r</div><div class='del'>-      pre.length + basename.length &lt; path.length</div><div class='del'>-    else</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :has_trailing_separator?</div><div class='del'>-</div><div class='del'>-  # add_trailing_separator(path) -&gt; path</div><div class='del'>-  def add_trailing_separator(path)</div><div class='del'>-    if File.basename(path + 'a') == 'a'</div><div class='del'>-      path</div><div class='del'>-    else</div><div class='del'>-      File.join(path, "") # xxx: Is File.join is appropriate to add separator?</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :add_trailing_separator</div><div class='del'>-</div><div class='del'>-  def del_trailing_separator(path)</div><div class='del'>-    if r = chop_basename(path)</div><div class='del'>-      pre, basename = r</div><div class='del'>-      pre + basename</div><div class='del'>-    elsif /#{SEPARATOR_PAT}+\z/o =~ path</div><div class='del'>-      $` + File.dirname(path)[/#{SEPARATOR_PAT}*\z/o]</div><div class='del'>-    else</div><div class='del'>-      path</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :del_trailing_separator</div><div class='del'>-</div><div class='del'>-  def cleanpath_conservative</div><div class='del'>-    path = @path</div><div class='del'>-    names = []</div><div class='del'>-    pre = path</div><div class='del'>-    while r = chop_basename(pre)</div><div class='del'>-      pre, base = r</div><div class='del'>-      names.unshift base if base != '.'</div><div class='del'>-    end</div><div class='del'>-    if /#{SEPARATOR_PAT}/o =~ File.basename(pre)</div><div class='del'>-      names.shift while names[0] == '..'</div><div class='del'>-    end</div><div class='del'>-    if names.empty?</div><div class='del'>-      self.class.new(File.dirname(pre))</div><div class='del'>-    else</div><div class='del'>-      if names.last != '..' &amp;&amp; File.basename(path) == '.'</div><div class='del'>-        names &lt;&lt; '.'</div><div class='del'>-      end</div><div class='del'>-      result = prepend_prefix(pre, File.join(*names))</div><div class='del'>-      if /\A(?:\.|\.\.)\z/ !~ names.last &amp;&amp; has_trailing_separator?(path)</div><div class='del'>-        self.class.new(add_trailing_separator(result))</div><div class='del'>-      else</div><div class='del'>-        self.class.new(result)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :cleanpath_conservative</div><div class='del'>-</div><div class='del'>-  def realpath_rec(prefix, unresolved, h)</div><div class='del'>-    resolved = []</div><div class='del'>-    until unresolved.empty?</div><div class='del'>-      n = unresolved.shift</div><div class='del'>-      if n == '.'</div><div class='del'>-        next</div><div class='del'>-      elsif n == '..'</div><div class='del'>-        resolved.pop</div><div class='del'>-      else</div><div class='del'>-        path = prepend_prefix(prefix, File.join(*(resolved + [n])))</div><div class='del'>-        if h.include? path</div><div class='del'>-          if h[path] == :resolving</div><div class='del'>-            raise Errno::ELOOP.new(path)</div><div class='del'>-          else</div><div class='del'>-            prefix, *resolved = h[path]</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          s = File.lstat(path)</div><div class='del'>-          if s.symlink?</div><div class='del'>-            h[path] = :resolving</div><div class='del'>-            link_prefix, link_names = split_names(File.readlink(path))</div><div class='del'>-            if link_prefix == ''</div><div class='del'>-              prefix, *resolved = h[path] = realpath_rec(prefix, resolved + link_names, h)</div><div class='del'>-            else</div><div class='del'>-              prefix, *resolved = h[path] = realpath_rec(link_prefix, link_names, h)</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            resolved &lt;&lt; n</div><div class='del'>-            h[path] = [prefix, *resolved]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    return prefix, *resolved</div><div class='del'>-  end</div><div class='del'>-  private :realpath_rec</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns a real (absolute) pathname of +self+ in the actual filesystem.</div><div class='del'>-  # The real pathname doesn't contain symlinks or useless dots.</div><div class='del'>-  #</div><div class='del'>-  # No arguments should be given; the old behaviour is *obsoleted*. </div><div class='del'>-  #</div><div class='del'>-  def realpath</div><div class='del'>-    path = @path</div><div class='del'>-    prefix, names = split_names(path)</div><div class='del'>-    if prefix == ''</div><div class='del'>-      prefix, names2 = split_names(Dir.pwd)</div><div class='del'>-      names = names2 + names</div><div class='del'>-    end</div><div class='del'>-    prefix, *names = realpath_rec(prefix, names, {})</div><div class='del'>-    self.class.new(prepend_prefix(prefix, File.join(*names)))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # #parent returns the parent directory.</div><div class='del'>-  #</div><div class='del'>-  # This is same as &lt;tt&gt;self + '..'&lt;/tt&gt;.</div><div class='del'>-  def parent</div><div class='del'>-    self + '..'</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # #mountpoint? returns +true+ if &lt;tt&gt;self&lt;/tt&gt; points to a mountpoint.</div><div class='del'>-  def mountpoint?</div><div class='del'>-    begin</div><div class='del'>-      stat1 = self.lstat</div><div class='del'>-      stat2 = self.parent.lstat</div><div class='del'>-      stat1.dev == stat2.dev &amp;&amp; stat1.ino == stat2.ino ||</div><div class='del'>-        stat1.dev != stat2.dev</div><div class='del'>-    rescue Errno::ENOENT</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # #root? is a predicate for root directories.  I.e. it returns +true+ if the</div><div class='del'>-  # pathname consists of consecutive slashes.</div><div class='del'>-  #</div><div class='del'>-  # It doesn't access actual filesystem.  So it may return +false+ for some</div><div class='del'>-  # pathnames which points to roots such as &lt;tt&gt;/usr/..&lt;/tt&gt;.</div><div class='del'>-  #</div><div class='del'>-  def root?</div><div class='del'>-    !!(chop_basename(@path) == nil &amp;&amp; /#{SEPARATOR_PAT}/o =~ @path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Predicate method for testing whether a path is absolute.</div><div class='del'>-  # It returns +true+ if the pathname begins with a slash.</div><div class='del'>-  def absolute?</div><div class='del'>-    !relative?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The opposite of #absolute?</div><div class='del'>-  def relative?</div><div class='del'>-    path = @path</div><div class='del'>-    while r = chop_basename(path)</div><div class='del'>-      path, basename = r</div><div class='del'>-    end</div><div class='del'>-    path == ''</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Iterates over each component of the path.</div><div class='del'>-  #</div><div class='del'>-  #   Pathname.new("/usr/bin/ruby").each_filename {|filename| ... }</div><div class='del'>-  #     # yields "usr", "bin", and "ruby".</div><div class='del'>-  #</div><div class='del'>-  def each_filename # :yield: filename</div><div class='del'>-    prefix, names = split_names(@path)</div><div class='del'>-    names.each {|filename| yield filename }</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Iterates over and yields a new Pathname object</div><div class='del'>-  # for each element in the given path in descending order.</div><div class='del'>-  #</div><div class='del'>-  #  Pathname.new('/path/to/some/file.rb').descend {|v| p v}</div><div class='del'>-  #     #&lt;Pathname:/&gt;</div><div class='del'>-  #     #&lt;Pathname:/path&gt;</div><div class='del'>-  #     #&lt;Pathname:/path/to&gt;</div><div class='del'>-  #     #&lt;Pathname:/path/to/some&gt;</div><div class='del'>-  #     #&lt;Pathname:/path/to/some/file.rb&gt;</div><div class='del'>-  #</div><div class='del'>-  #  Pathname.new('path/to/some/file.rb').descend {|v| p v}</div><div class='del'>-  #     #&lt;Pathname:path&gt;</div><div class='del'>-  #     #&lt;Pathname:path/to&gt;</div><div class='del'>-  #     #&lt;Pathname:path/to/some&gt;</div><div class='del'>-  #     #&lt;Pathname:path/to/some/file.rb&gt;</div><div class='del'>-  #</div><div class='del'>-  # It doesn't access actual filesystem.</div><div class='del'>-  #</div><div class='del'>-  # This method is available since 1.8.5.</div><div class='del'>-  #</div><div class='del'>-  def descend</div><div class='del'>-    vs = []</div><div class='del'>-    ascend {|v| vs &lt;&lt; v }</div><div class='del'>-    vs.reverse_each {|v| yield v }</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Iterates over and yields a new Pathname object</div><div class='del'>-  # for each element in the given path in ascending order.</div><div class='del'>-  #</div><div class='del'>-  #  Pathname.new('/path/to/some/file.rb').ascend {|v| p v}</div><div class='del'>-  #     #&lt;Pathname:/path/to/some/file.rb&gt;</div><div class='del'>-  #     #&lt;Pathname:/path/to/some&gt;</div><div class='del'>-  #     #&lt;Pathname:/path/to&gt;</div><div class='del'>-  #     #&lt;Pathname:/path&gt;</div><div class='del'>-  #     #&lt;Pathname:/&gt;</div><div class='del'>-  #</div><div class='del'>-  #  Pathname.new('path/to/some/file.rb').ascend {|v| p v}</div><div class='del'>-  #     #&lt;Pathname:path/to/some/file.rb&gt;</div><div class='del'>-  #     #&lt;Pathname:path/to/some&gt;</div><div class='del'>-  #     #&lt;Pathname:path/to&gt;</div><div class='del'>-  #     #&lt;Pathname:path&gt;</div><div class='del'>-  #</div><div class='del'>-  # It doesn't access actual filesystem.</div><div class='del'>-  #</div><div class='del'>-  # This method is available since 1.8.5.</div><div class='del'>-  #</div><div class='del'>-  def ascend</div><div class='del'>-    path = @path</div><div class='del'>-    yield self</div><div class='del'>-    while r = chop_basename(path)</div><div class='del'>-      path, name = r</div><div class='del'>-      break if path.empty?</div><div class='del'>-      yield self.class.new(del_trailing_separator(path))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Pathname#+ appends a pathname fragment to this one to produce a new Pathname</div><div class='del'>-  # object.</div><div class='del'>-  #</div><div class='del'>-  #   p1 = Pathname.new("/usr")      # Pathname:/usr</div><div class='del'>-  #   p2 = p1 + "bin/ruby"           # Pathname:/usr/bin/ruby</div><div class='del'>-  #   p3 = p1 + "/etc/passwd"        # Pathname:/etc/passwd</div><div class='del'>-  #</div><div class='del'>-  # This method doesn't access the file system; it is pure string manipulation. </div><div class='del'>-  #</div><div class='del'>-  def +(other)</div><div class='del'>-    other = Pathname.new(other) unless Pathname === other</div><div class='del'>-    Pathname.new(plus(@path, other.to_s))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def plus(path1, path2) # -&gt; path</div><div class='del'>-    prefix2 = path2</div><div class='del'>-    index_list2 = []</div><div class='del'>-    basename_list2 = []</div><div class='del'>-    while r2 = chop_basename(prefix2)</div><div class='del'>-      prefix2, basename2 = r2</div><div class='del'>-      index_list2.unshift prefix2.length</div><div class='del'>-      basename_list2.unshift basename2</div><div class='del'>-    end</div><div class='del'>-    return path2 if prefix2 != ''</div><div class='del'>-    prefix1 = path1</div><div class='del'>-    while true</div><div class='del'>-      while !basename_list2.empty? &amp;&amp; basename_list2.first == '.'</div><div class='del'>-        index_list2.shift</div><div class='del'>-        basename_list2.shift</div><div class='del'>-      end</div><div class='del'>-      break unless r1 = chop_basename(prefix1)</div><div class='del'>-      prefix1, basename1 = r1</div><div class='del'>-      next if basename1 == '.'</div><div class='del'>-      if basename1 == '..' || basename_list2.empty? || basename_list2.first != '..'</div><div class='del'>-        prefix1 = prefix1 + basename1</div><div class='del'>-        break</div><div class='del'>-      end</div><div class='del'>-      index_list2.shift</div><div class='del'>-      basename_list2.shift</div><div class='del'>-    end</div><div class='del'>-    r1 = chop_basename(prefix1)</div><div class='del'>-    if !r1 &amp;&amp; /#{SEPARATOR_PAT}/o =~ File.basename(prefix1)</div><div class='del'>-      while !basename_list2.empty? &amp;&amp; basename_list2.first == '..'</div><div class='del'>-        index_list2.shift</div><div class='del'>-        basename_list2.shift</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    if !basename_list2.empty?</div><div class='del'>-      suffix2 = path2[index_list2.first..-1]</div><div class='del'>-      r1 ? File.join(prefix1, suffix2) : prefix1 + suffix2</div><div class='del'>-    else</div><div class='del'>-      r1 ? prefix1 : File.dirname(prefix1)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  private :plus</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Pathname#join joins pathnames.</div><div class='del'>-  #</div><div class='del'>-  # &lt;tt&gt;path0.join(path1, ..., pathN)&lt;/tt&gt; is the same as</div><div class='del'>-  # &lt;tt&gt;path0 + path1 + ... + pathN&lt;/tt&gt;.</div><div class='del'>-  #</div><div class='del'>-  def join(*args)</div><div class='del'>-    args.unshift self</div><div class='del'>-    result = args.pop</div><div class='del'>-    result = Pathname.new(result) unless Pathname === result</div><div class='del'>-    return result if result.absolute?</div><div class='del'>-    args.reverse_each {|arg|</div><div class='del'>-      arg = Pathname.new(arg) unless Pathname === arg</div><div class='del'>-      result = arg + result</div><div class='del'>-      return result if result.absolute?</div><div class='del'>-    }</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the children of the directory (files and subdirectories, not</div><div class='del'>-  # recursive) as an array of Pathname objects.  By default, the returned</div><div class='del'>-  # pathnames will have enough information to access the files.  If you set</div><div class='del'>-  # +with_directory+ to +false+, then the returned pathnames will contain the</div><div class='del'>-  # filename only.</div><div class='del'>-  #</div><div class='del'>-  # For example:</div><div class='del'>-  #   p = Pathname("/usr/lib/ruby/1.8")</div><div class='del'>-  #   p.children</div><div class='del'>-  #       # -&gt; [ Pathname:/usr/lib/ruby/1.8/English.rb,</div><div class='del'>-  #              Pathname:/usr/lib/ruby/1.8/Env.rb,</div><div class='del'>-  #              Pathname:/usr/lib/ruby/1.8/abbrev.rb, ... ]</div><div class='del'>-  #   p.children(false)</div><div class='del'>-  #       # -&gt; [ Pathname:English.rb, Pathname:Env.rb, Pathname:abbrev.rb, ... ]</div><div class='del'>-  #</div><div class='del'>-  # Note that the result never contain the entries &lt;tt&gt;.&lt;/tt&gt; and &lt;tt&gt;..&lt;/tt&gt; in</div><div class='del'>-  # the directory because they are not children.</div><div class='del'>-  #</div><div class='del'>-  # This method has existed since 1.8.1.</div><div class='del'>-  #</div><div class='del'>-  def children(with_directory=true)</div><div class='del'>-    with_directory = false if @path == '.'</div><div class='del'>-    result = []</div><div class='del'>-    Dir.foreach(@path) {|e|</div><div class='del'>-      next if e == '.' || e == '..'</div><div class='del'>-      if with_directory</div><div class='del'>-        result &lt;&lt; self.class.new(File.join(@path, e))</div><div class='del'>-      else</div><div class='del'>-        result &lt;&lt; self.class.new(e)</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # #relative_path_from returns a relative path from the argument to the</div><div class='del'>-  # receiver.  If +self+ is absolute, the argument must be absolute too.  If</div><div class='del'>-  # +self+ is relative, the argument must be relative too.</div><div class='del'>-  #</div><div class='del'>-  # #relative_path_from doesn't access the filesystem.  It assumes no symlinks.</div><div class='del'>-  #</div><div class='del'>-  # ArgumentError is raised when it cannot find a relative path.</div><div class='del'>-  #</div><div class='del'>-  # This method has existed since 1.8.1.</div><div class='del'>-  #</div><div class='del'>-  def relative_path_from(base_directory)</div><div class='del'>-    dest_directory = self.cleanpath.to_s</div><div class='del'>-    base_directory = base_directory.cleanpath.to_s</div><div class='del'>-    dest_prefix = dest_directory</div><div class='del'>-    dest_names = []</div><div class='del'>-    while r = chop_basename(dest_prefix)</div><div class='del'>-      dest_prefix, basename = r</div><div class='del'>-      dest_names.unshift basename if basename != '.'</div><div class='del'>-    end</div><div class='del'>-    base_prefix = base_directory</div><div class='del'>-    base_names = []</div><div class='del'>-    while r = chop_basename(base_prefix)</div><div class='del'>-      base_prefix, basename = r</div><div class='del'>-      base_names.unshift basename if basename != '.'</div><div class='del'>-    end</div><div class='del'>-    if dest_prefix != base_prefix</div><div class='del'>-      raise ArgumentError, "different prefix: #{dest_prefix.inspect} and #{base_directory.inspect}"</div><div class='del'>-    end</div><div class='del'>-    while !dest_names.empty? &amp;&amp;</div><div class='del'>-          !base_names.empty? &amp;&amp;</div><div class='del'>-          dest_names.first == base_names.first</div><div class='del'>-      dest_names.shift</div><div class='del'>-      base_names.shift</div><div class='del'>-    end</div><div class='del'>-    if base_names.include? '..'</div><div class='del'>-      raise ArgumentError, "base_directory has ..: #{base_directory.inspect}"</div><div class='del'>-    end</div><div class='del'>-    base_names.fill('..')</div><div class='del'>-    relpath_names = base_names + dest_names</div><div class='del'>-    if relpath_names.empty?</div><div class='del'>-      Pathname.new('.')</div><div class='del'>-    else</div><div class='del'>-      Pathname.new(File.join(*relpath_names))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Pathname    # * IO *</div><div class='del'>-  #</div><div class='del'>-  # #each_line iterates over the line in the file.  It yields a String object</div><div class='del'>-  # for each line.</div><div class='del'>-  #</div><div class='del'>-  # This method has existed since 1.8.1.</div><div class='del'>-  #</div><div class='del'>-  def each_line(*args, &amp;block) # :yield: line</div><div class='del'>-    IO.foreach(@path, *args, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Pathname#foreachline is *obsoleted* at 1.8.1.  Use #each_line.</div><div class='del'>-  def foreachline(*args, &amp;block)</div><div class='del'>-    warn "Pathname#foreachline is obsoleted.  Use Pathname#each_line."</div><div class='del'>-    each_line(*args, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;IO.read&lt;/tt&gt;.  Returns all the bytes from the file, or the first +N+</div><div class='del'>-  # if specified.</div><div class='del'>-  def read(*args) IO.read(@path, *args) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;IO.readlines&lt;/tt&gt;.  Returns all the lines from the file.</div><div class='del'>-  def readlines(*args) IO.readlines(@path, *args) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;IO.sysopen&lt;/tt&gt;.</div><div class='del'>-  def sysopen(*args) IO.sysopen(@path, *args) end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Pathname    # * File *</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.atime&lt;/tt&gt;.  Returns last access time.</div><div class='del'>-  def atime() File.atime(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.ctime&lt;/tt&gt;.  Returns last (directory entry, not file) change time.</div><div class='del'>-  def ctime() File.ctime(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.mtime&lt;/tt&gt;.  Returns last modification time.</div><div class='del'>-  def mtime() File.mtime(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.chmod&lt;/tt&gt;.  Changes permissions.</div><div class='del'>-  def chmod(mode) File.chmod(mode, @path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.lchmod&lt;/tt&gt;.</div><div class='del'>-  def lchmod(mode) File.lchmod(mode, @path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.chown&lt;/tt&gt;.  Change owner and group of file.</div><div class='del'>-  def chown(owner, group) File.chown(owner, group, @path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.lchown&lt;/tt&gt;.</div><div class='del'>-  def lchown(owner, group) File.lchown(owner, group, @path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.fnmatch&lt;/tt&gt;.  Return +true+ if the receiver matches the given</div><div class='del'>-  # pattern.</div><div class='del'>-  def fnmatch(pattern, *args) File.fnmatch(pattern, @path, *args) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.fnmatch?&lt;/tt&gt; (same as #fnmatch).</div><div class='del'>-  def fnmatch?(pattern, *args) File.fnmatch?(pattern, @path, *args) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.ftype&lt;/tt&gt;.  Returns "type" of file ("file", "directory",</div><div class='del'>-  # etc).</div><div class='del'>-  def ftype() File.ftype(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.link&lt;/tt&gt;.  Creates a hard link.</div><div class='del'>-  def make_link(old) File.link(old, @path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.open&lt;/tt&gt;.  Opens the file for reading or writing.</div><div class='del'>-  def open(*args, &amp;block) # :yield: file</div><div class='del'>-    File.open(@path, *args, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.readlink&lt;/tt&gt;.  Read symbolic link.</div><div class='del'>-  def readlink() self.class.new(File.readlink(@path)) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.rename&lt;/tt&gt;.  Rename the file.</div><div class='del'>-  def rename(to) File.rename(@path, to) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.stat&lt;/tt&gt;.  Returns a &lt;tt&gt;File::Stat&lt;/tt&gt; object.</div><div class='del'>-  def stat() File.stat(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.lstat&lt;/tt&gt;.</div><div class='del'>-  def lstat() File.lstat(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.symlink&lt;/tt&gt;.  Creates a symbolic link.</div><div class='del'>-  def make_symlink(old) File.symlink(old, @path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.truncate&lt;/tt&gt;.  Truncate the file to +length+ bytes.</div><div class='del'>-  def truncate(length) File.truncate(@path, length) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.utime&lt;/tt&gt;.  Update the access and modification times.</div><div class='del'>-  def utime(atime, mtime) File.utime(atime, mtime, @path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.basename&lt;/tt&gt;.  Returns the last component of the path.</div><div class='del'>-  def basename(*args) self.class.new(File.basename(@path, *args)) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.dirname&lt;/tt&gt;.  Returns all but the last component of the path.</div><div class='del'>-  def dirname() self.class.new(File.dirname(@path)) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.extname&lt;/tt&gt;.  Returns the file's extension.</div><div class='del'>-  def extname() File.extname(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.expand_path&lt;/tt&gt;.</div><div class='del'>-  def expand_path(*args) self.class.new(File.expand_path(@path, *args)) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;File.split&lt;/tt&gt;.  Returns the #dirname and the #basename in an</div><div class='del'>-  # Array.</div><div class='del'>-  def split() File.split(@path).map {|f| self.class.new(f) } end</div><div class='del'>-</div><div class='del'>-  # Pathname#link is confusing and *obsoleted* because the receiver/argument</div><div class='del'>-  # order is inverted to corresponding system call.</div><div class='del'>-  def link(old)</div><div class='del'>-    warn 'Pathname#link is obsoleted.  Use Pathname#make_link.'</div><div class='del'>-    File.link(old, @path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Pathname#symlink is confusing and *obsoleted* because the receiver/argument</div><div class='del'>-  # order is inverted to corresponding system call.</div><div class='del'>-  def symlink(old)</div><div class='del'>-    warn 'Pathname#symlink is obsoleted.  Use Pathname#make_symlink.'</div><div class='del'>-    File.symlink(old, @path)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Pathname    # * FileTest *</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.blockdev?&lt;/tt&gt;.</div><div class='del'>-  def blockdev?() FileTest.blockdev?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.chardev?&lt;/tt&gt;.</div><div class='del'>-  def chardev?() FileTest.chardev?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.executable?&lt;/tt&gt;.</div><div class='del'>-  def executable?() FileTest.executable?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.executable_real?&lt;/tt&gt;.</div><div class='del'>-  def executable_real?() FileTest.executable_real?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.exist?&lt;/tt&gt;.</div><div class='del'>-  def exist?() FileTest.exist?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.grpowned?&lt;/tt&gt;.</div><div class='del'>-  def grpowned?() FileTest.grpowned?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.directory?&lt;/tt&gt;.</div><div class='del'>-  def directory?() FileTest.directory?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.file?&lt;/tt&gt;.</div><div class='del'>-  def file?() FileTest.file?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.pipe?&lt;/tt&gt;.</div><div class='del'>-  def pipe?() FileTest.pipe?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.socket?&lt;/tt&gt;.</div><div class='del'>-  def socket?() FileTest.socket?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.owned?&lt;/tt&gt;.</div><div class='del'>-  def owned?() FileTest.owned?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.readable?&lt;/tt&gt;.</div><div class='del'>-  def readable?() FileTest.readable?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.world_readable?&lt;/tt&gt;.</div><div class='del'>-  def world_readable?() FileTest.world_readable?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.readable_real?&lt;/tt&gt;.</div><div class='del'>-  def readable_real?() FileTest.readable_real?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.setuid?&lt;/tt&gt;.</div><div class='del'>-  def setuid?() FileTest.setuid?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.setgid?&lt;/tt&gt;.</div><div class='del'>-  def setgid?() FileTest.setgid?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.size&lt;/tt&gt;.</div><div class='del'>-  def size() FileTest.size(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.size?&lt;/tt&gt;.</div><div class='del'>-  def size?() FileTest.size?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.sticky?&lt;/tt&gt;.</div><div class='del'>-  def sticky?() FileTest.sticky?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.symlink?&lt;/tt&gt;.</div><div class='del'>-  def symlink?() FileTest.symlink?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.writable?&lt;/tt&gt;.</div><div class='del'>-  def writable?() FileTest.writable?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.world_writable?&lt;/tt&gt;.</div><div class='del'>-  def world_writable?() FileTest.world_writable?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.writable_real?&lt;/tt&gt;.</div><div class='del'>-  def writable_real?() FileTest.writable_real?(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileTest.zero?&lt;/tt&gt;.</div><div class='del'>-  def zero?() FileTest.zero?(@path) end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Pathname    # * Dir *</div><div class='del'>-  # See &lt;tt&gt;Dir.glob&lt;/tt&gt;.  Returns or yields Pathname objects.</div><div class='del'>-  def Pathname.glob(*args) # :yield: p</div><div class='del'>-    if block_given?</div><div class='del'>-      Dir.glob(*args) {|f| yield self.new(f) }</div><div class='del'>-    else</div><div class='del'>-      Dir.glob(*args).map {|f| self.new(f) }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;Dir.getwd&lt;/tt&gt;.  Returns the current working directory as a Pathname.</div><div class='del'>-  def Pathname.getwd() self.new(Dir.getwd) end</div><div class='del'>-  class &lt;&lt; self; alias pwd getwd end</div><div class='del'>-</div><div class='del'>-  # Pathname#chdir is *obsoleted* at 1.8.1.</div><div class='del'>-  def chdir(&amp;block)</div><div class='del'>-    warn "Pathname#chdir is obsoleted.  Use Dir.chdir."</div><div class='del'>-    Dir.chdir(@path, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Pathname#chroot is *obsoleted* at 1.8.1.</div><div class='del'>-  def chroot</div><div class='del'>-    warn "Pathname#chroot is obsoleted.  Use Dir.chroot."</div><div class='del'>-    Dir.chroot(@path)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return the entries (files and subdirectories) in the directory, each as a</div><div class='del'>-  # Pathname object.</div><div class='del'>-  def entries() Dir.entries(@path).map {|f| self.class.new(f) } end</div><div class='del'>-</div><div class='del'>-  # Iterates over the entries (files and subdirectories) in the directory.  It</div><div class='del'>-  # yields a Pathname object for each entry.</div><div class='del'>-  #</div><div class='del'>-  # This method has existed since 1.8.1.</div><div class='del'>-  def each_entry(&amp;block) # :yield: p</div><div class='del'>-    Dir.foreach(@path) {|f| yield self.class.new(f) }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Pathname#dir_foreach is *obsoleted* at 1.8.1.</div><div class='del'>-  def dir_foreach(*args, &amp;block)</div><div class='del'>-    warn "Pathname#dir_foreach is obsoleted.  Use Pathname#each_entry."</div><div class='del'>-    each_entry(*args, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;Dir.mkdir&lt;/tt&gt;.  Create the referenced directory.</div><div class='del'>-  def mkdir(*args) Dir.mkdir(@path, *args) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;Dir.rmdir&lt;/tt&gt;.  Remove the referenced directory.</div><div class='del'>-  def rmdir() Dir.rmdir(@path) end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;Dir.open&lt;/tt&gt;.</div><div class='del'>-  def opendir(&amp;block) # :yield: dir</div><div class='del'>-    Dir.open(@path, &amp;block)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Pathname    # * Find *</div><div class='del'>-  #</div><div class='del'>-  # Pathname#find is an iterator to traverse a directory tree in a depth first</div><div class='del'>-  # manner.  It yields a Pathname for each file under "this" directory.</div><div class='del'>-  #</div><div class='del'>-  # Since it is implemented by &lt;tt&gt;find.rb&lt;/tt&gt;, &lt;tt&gt;Find.prune&lt;/tt&gt; can be used</div><div class='del'>-  # to control the traverse.</div><div class='del'>-  #</div><div class='del'>-  # If +self+ is &lt;tt&gt;.&lt;/tt&gt;, yielded pathnames begin with a filename in the</div><div class='del'>-  # current directory, not &lt;tt&gt;./&lt;/tt&gt;.</div><div class='del'>-  #</div><div class='del'>-  def find(&amp;block) # :yield: p</div><div class='del'>-    require 'find'</div><div class='del'>-    if @path == '.'</div><div class='del'>-      Find.find(@path) {|f| yield self.class.new(f.sub(%r{\A\./}, '')) }</div><div class='del'>-    else</div><div class='del'>-      Find.find(@path) {|f| yield self.class.new(f) }</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 Pathname    # * FileUtils *</div><div class='del'>-  # See &lt;tt&gt;FileUtils.mkpath&lt;/tt&gt;.  Creates a full path, including any</div><div class='del'>-  # intermediate directories that don't yet exist.</div><div class='del'>-  def mkpath</div><div class='del'>-    require 'fileutils'</div><div class='del'>-    FileUtils.mkpath(@path)</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # See &lt;tt&gt;FileUtils.rm_r&lt;/tt&gt;.  Deletes a directory and all beneath it.</div><div class='del'>-  def rmtree</div><div class='del'>-    # The name "rmtree" is borrowed from File::Path of Perl.</div><div class='del'>-    # File::Path provides "mkpath" and "rmtree".</div><div class='del'>-    require 'fileutils'</div><div class='del'>-    FileUtils.rm_r(@path)</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-class Pathname    # * mixed *</div><div class='del'>-  # Removes a file or directory, using &lt;tt&gt;File.unlink&lt;/tt&gt; or</div><div class='del'>-  # &lt;tt&gt;Dir.unlink&lt;/tt&gt; as necessary.</div><div class='del'>-  def unlink()</div><div class='del'>-    begin</div><div class='del'>-      Dir.unlink @path</div><div class='del'>-    rescue Errno::ENOTDIR</div><div class='del'>-      File.unlink @path</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  alias delete unlink</div><div class='del'>-</div><div class='del'>-  # This method is *obsoleted* at 1.8.1.  Use #each_line or #each_entry.</div><div class='del'>-  def foreach(*args, &amp;block)</div><div class='del'>-    warn "Pathname#foreach is obsoleted.  Use each_line or each_entry."</div><div class='del'>-    if FileTest.directory? @path</div><div class='del'>-      # For polymorphism between Dir.foreach and IO.foreach,</div><div class='del'>-      # Pathname#foreach doesn't yield Pathname object.</div><div class='del'>-      Dir.foreach(@path, *args, &amp;block)</div><div class='del'>-    else</div><div class='del'>-      IO.foreach(@path, *args, &amp;block)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Kernel</div><div class='del'>-  # create a pathname object.</div><div class='del'>-  #</div><div class='del'>-  # This method is available since 1.8.5.</div><div class='del'>-  def Pathname(path) # :doc:</div><div class='del'>-    Pathname.new(path)</div><div class='del'>-  end</div><div class='del'>-  private :Pathname</div><div class='del'>-end</div><div class='head'>diff --git a/lib/ping.rb b/lib/ping.rb<br/>deleted file mode 100644<br/>index c2966b619c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/ping.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/ping.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,64 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = ping.rb: Check a host for upness</div><div class='del'>-#</div><div class='del'>-# Author:: Yukihiro Matsumoto</div><div class='del'>-# Documentation:: Konrad Meyer</div><div class='del'>-# </div><div class='del'>-# Performs the function of the basic network testing tool, ping.</div><div class='del'>-# See: Ping.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'timeout'</div><div class='del'>-require "socket"</div><div class='del'>-</div><div class='del'>-# </div><div class='del'>-# Ping contains routines to test for the reachability of remote hosts.</div><div class='del'>-# Currently the only routine implemented is pingecho().</div><div class='del'>-#</div><div class='del'>-# Ping.pingecho uses a TCP echo (not an ICMP echo) to determine if the</div><div class='del'>-# remote host is reachable. This is usually adequate to tell that a remote</div><div class='del'>-# host is available to telnet, ftp, or ssh to.</div><div class='del'>-#</div><div class='del'>-# Warning: Ping.pingecho may block for a long time if DNS resolution is</div><div class='del'>-# slow. Requiring 'resolv-replace' allows non-blocking name resolution.</div><div class='del'>-#</div><div class='del'>-# Usage:</div><div class='del'>-# </div><div class='del'>-#   require 'ping'</div><div class='del'>-#</div><div class='del'>-#   puts "'jimmy' is alive and kicking" if Ping.pingecho('jimmy', 10)</div><div class='del'>-#</div><div class='del'>-module Ping</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  # Return true if we can open a connection to the hostname or IP address</div><div class='del'>-  # +host+ on port +service+ (which defaults to the "echo" port) waiting up</div><div class='del'>-  # to +timeout+ seconds.</div><div class='del'>-  #</div><div class='del'>-  # Example:</div><div class='del'>-  #</div><div class='del'>-  #   require 'ping'</div><div class='del'>-  #</div><div class='del'>-  #   Ping.pingecho "google.com", 10, 80</div><div class='del'>-  #</div><div class='del'>-  def pingecho(host, timeout=5, service="echo")</div><div class='del'>-    begin</div><div class='del'>-      timeout(timeout) do</div><div class='del'>-	s = TCPSocket.new(host, service)</div><div class='del'>-	s.close</div><div class='del'>-      end</div><div class='del'>-    rescue Errno::ECONNREFUSED</div><div class='del'>-      return true</div><div class='del'>-    rescue Timeout::Error, StandardError</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-    return true</div><div class='del'>-  end</div><div class='del'>-  module_function :pingecho</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if $0 == __FILE__</div><div class='del'>-  host = ARGV[0]</div><div class='del'>-  host ||= "localhost"</div><div class='del'>-  printf("%s alive? - %s\n", host,  Ping::pingecho(host, 5))</div><div class='del'>-end</div><div class='head'>diff --git a/lib/pp.rb b/lib/pp.rb<br/>deleted file mode 100644<br/>index 14fe62ee95..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/pp.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/pp.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,654 +0,0 @@</div><div class='del'>-# == Pretty-printer for Ruby objects.</div><div class='del'>-# </div><div class='del'>-# = Which seems better?</div><div class='del'>-# </div><div class='del'>-# non-pretty-printed output by #p is:</div><div class='del'>-#   #&lt;PP:0x81fedf0 @genspace=#&lt;Proc:0x81feda0&gt;, @group_queue=#&lt;PrettyPrint::GroupQueue:0x81fed3c @queue=[[#&lt;PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false&gt;], []]&gt;, @buffer=[], @newline="\n", @group_stack=[#&lt;PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false&gt;], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#&lt;IO:0x8114ee4&gt;&gt;</div><div class='del'>-# </div><div class='del'>-# pretty-printed output by #pp is:</div><div class='del'>-#   #&lt;PP:0x81fedf0</div><div class='del'>-#    @buffer=[],</div><div class='del'>-#    @buffer_width=0,</div><div class='del'>-#    @genspace=#&lt;Proc:0x81feda0&gt;,</div><div class='del'>-#    @group_queue=</div><div class='del'>-#     #&lt;PrettyPrint::GroupQueue:0x81fed3c</div><div class='del'>-#      @queue=</div><div class='del'>-#       [[#&lt;PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0&gt;],</div><div class='del'>-#        []]&gt;,</div><div class='del'>-#    @group_stack=</div><div class='del'>-#     [#&lt;PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0&gt;],</div><div class='del'>-#    @indent=0,</div><div class='del'>-#    @maxwidth=79,</div><div class='del'>-#    @newline="\n",</div><div class='del'>-#    @output=#&lt;IO:0x8114ee4&gt;,</div><div class='del'>-#    @output_width=2&gt;</div><div class='del'>-# </div><div class='del'>-# I like the latter.  If you do too, this library is for you.</div><div class='del'>-# </div><div class='del'>-# = Usage</div><div class='del'>-# </div><div class='del'>-#   pp(obj)</div><div class='del'>-#</div><div class='del'>-# output +obj+ to +$&gt;+ in pretty printed format.</div><div class='del'>-# </div><div class='del'>-# It returns +nil+.</div><div class='del'>-# </div><div class='del'>-# = Output Customization</div><div class='del'>-# To define your customized pretty printing function for your classes,</div><div class='del'>-# redefine a method #pretty_print(+pp+) in the class.</div><div class='del'>-# It takes an argument +pp+ which is an instance of the class PP.</div><div class='del'>-# The method should use PP#text, PP#breakable, PP#nest, PP#group and</div><div class='del'>-# PP#pp to print the object.</div><div class='del'>-#</div><div class='del'>-# = Author</div><div class='del'>-# Tanaka Akira &lt;akr@m17n.org&gt;</div><div class='del'>-</div><div class='del'>-require 'prettyprint'</div><div class='del'>-</div><div class='del'>-module Kernel</div><div class='del'>-  # returns a pretty printed object as a string.</div><div class='del'>-  def pretty_inspect</div><div class='del'>-    PP.pp(self, '')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-  # prints arguments in pretty form.</div><div class='del'>-  #</div><div class='del'>-  # pp returns nil.</div><div class='del'>-  def pp(*objs) # :doc:</div><div class='del'>-    objs.each {|obj|</div><div class='del'>-      PP.pp(obj)</div><div class='del'>-    }</div><div class='del'>-    nil</div><div class='del'>-  end</div><div class='del'>-  module_function :pp</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class PP &lt; PrettyPrint</div><div class='del'>-  # Outputs +obj+ to +out+ in pretty printed format of</div><div class='del'>-  # +width+ columns in width.</div><div class='del'>-  # </div><div class='del'>-  # If +out+ is omitted, +$&gt;+ is assumed.</div><div class='del'>-  # If +width+ is omitted, 79 is assumed.</div><div class='del'>-  # </div><div class='del'>-  # PP.pp returns +out+.</div><div class='del'>-  def PP.pp(obj, out=$&gt;, width=79)</div><div class='del'>-    q = PP.new(out, width)</div><div class='del'>-    q.guard_inspect_key {q.pp obj}</div><div class='del'>-    q.flush</div><div class='del'>-    #$pp = q</div><div class='del'>-    out &lt;&lt; "\n"</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Outputs +obj+ to +out+ like PP.pp but with no indent and</div><div class='del'>-  # newline.</div><div class='del'>-  # </div><div class='del'>-  # PP.singleline_pp returns +out+.</div><div class='del'>-  def PP.singleline_pp(obj, out=$&gt;)</div><div class='del'>-    q = SingleLine.new(out)</div><div class='del'>-    q.guard_inspect_key {q.pp obj}</div><div class='del'>-    q.flush</div><div class='del'>-    out</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # :stopdoc:</div><div class='del'>-  def PP.mcall(obj, mod, meth, *args, &amp;block)</div><div class='del'>-    mod.instance_method(meth).bind(obj).call(*args, &amp;block)</div><div class='del'>-  end</div><div class='del'>-  # :startdoc:</div><div class='del'>-</div><div class='del'>-  @sharing_detection = false</div><div class='del'>-  class &lt;&lt; self</div><div class='del'>-    # Returns the sharing detection flag as a boolean value.</div><div class='del'>-    # It is false by default.</div><div class='del'>-    attr_accessor :sharing_detection</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module PPMethods</div><div class='del'>-    InspectKey = :__inspect_key__</div><div class='del'>-</div><div class='del'>-    def guard_inspect_key</div><div class='del'>-      if Thread.current[InspectKey] == nil</div><div class='del'>-        Thread.current[InspectKey] = []</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      save = Thread.current[InspectKey]</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-        Thread.current[InspectKey] = []</div><div class='del'>-        yield</div><div class='del'>-      ensure</div><div class='del'>-        Thread.current[InspectKey] = save</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adds +obj+ to the pretty printing buffer</div><div class='del'>-    # using Object#pretty_print or Object#pretty_print_cycle.</div><div class='del'>-    # </div><div class='del'>-    # Object#pretty_print_cycle is used when +obj+ is already</div><div class='del'>-    # printed, a.k.a the object reference chain has a cycle.</div><div class='del'>-    def pp(obj)</div><div class='del'>-      id = obj.__id__</div><div class='del'>-</div><div class='del'>-      if Thread.current[InspectKey].include? id</div><div class='del'>-        group {obj.pretty_print_cycle self}</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-        Thread.current[InspectKey] &lt;&lt; id</div><div class='del'>-        group {obj.pretty_print self}</div><div class='del'>-      ensure</div><div class='del'>-        Thread.current[InspectKey].pop unless PP.sharing_detection</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # A convenience method which is same as follows:</div><div class='del'>-    # </div><div class='del'>-    #   group(1, '#&lt;' + obj.class.name, '&gt;') { ... }</div><div class='del'>-    def object_group(obj, &amp;block) # :yield:</div><div class='del'>-      group(1, '#&lt;' + obj.class.name, '&gt;', &amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def object_address_group(obj, &amp;block)</div><div class='del'>-      id = "%x" % (obj.__id__ * 2)</div><div class='del'>-      id.sub!(/\Af(?=[[:xdigit:]]{2}+\z)/, '') if id.sub!(/\A\.\./, '')</div><div class='del'>-      group(1, "\#&lt;#{obj.class}:0x#{id}", '&gt;', &amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # A convenience method which is same as follows:</div><div class='del'>-    # </div><div class='del'>-    #   text ','</div><div class='del'>-    #   breakable</div><div class='del'>-    def comma_breakable</div><div class='del'>-      text ','</div><div class='del'>-      breakable</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adds a separated list.</div><div class='del'>-    # The list is separated by comma with breakable space, by default.</div><div class='del'>-    # </div><div class='del'>-    # #seplist iterates the +list+ using +iter_method+.</div><div class='del'>-    # It yields each object to the block given for #seplist.</div><div class='del'>-    # The procedure +separator_proc+ is called between each yields.</div><div class='del'>-    # </div><div class='del'>-    # If the iteration is zero times, +separator_proc+ is not called at all.</div><div class='del'>-    # </div><div class='del'>-    # If +separator_proc+ is nil or not given,</div><div class='del'>-    # +lambda { comma_breakable }+ is used.</div><div class='del'>-    # If +iter_method+ is not given, :each is used.</div><div class='del'>-    # </div><div class='del'>-    # For example, following 3 code fragments has similar effect.</div><div class='del'>-    # </div><div class='del'>-    #   q.seplist([1,2,3]) {|v| xxx v }</div><div class='del'>-    # </div><div class='del'>-    #   q.seplist([1,2,3], lambda { comma_breakable }, :each) {|v| xxx v }</div><div class='del'>-    # </div><div class='del'>-    #   xxx 1</div><div class='del'>-    #   q.comma_breakable</div><div class='del'>-    #   xxx 2</div><div class='del'>-    #   q.comma_breakable</div><div class='del'>-    #   xxx 3</div><div class='del'>-    def seplist(list, sep=nil, iter_method=:each) # :yield: element</div><div class='del'>-      sep ||= lambda { comma_breakable }</div><div class='del'>-      first = true</div><div class='del'>-      list.__send__(iter_method) {|*v|</div><div class='del'>-        if first</div><div class='del'>-          first = false</div><div class='del'>-        else</div><div class='del'>-          sep.call</div><div class='del'>-        end</div><div class='del'>-        yield(*v)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pp_object(obj)</div><div class='del'>-      object_address_group(obj) {</div><div class='del'>-        seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v|</div><div class='del'>-          breakable</div><div class='del'>-          v = v.to_s if Symbol === v</div><div class='del'>-          text v</div><div class='del'>-          text '='</div><div class='del'>-          group(1) {</div><div class='del'>-            breakable ''</div><div class='del'>-            pp(obj.instance_eval(v))</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'>-    def pp_hash(obj)</div><div class='del'>-      group(1, '{', '}') {</div><div class='del'>-        seplist(obj, nil, :each_pair) {|k, v|</div><div class='del'>-          group {</div><div class='del'>-            pp k</div><div class='del'>-            text '=&gt;'</div><div class='del'>-            group(1) {</div><div class='del'>-              breakable ''</div><div class='del'>-              pp v</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  include PPMethods</div><div class='del'>-</div><div class='del'>-  class SingleLine &lt; PrettyPrint::SingleLine</div><div class='del'>-    include PPMethods</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ObjectMixin</div><div class='del'>-    # 1. specific pretty_print</div><div class='del'>-    # 2. specific inspect</div><div class='del'>-    # 3. specific to_s if instance variable is empty</div><div class='del'>-    # 4. generic pretty_print</div><div class='del'>-</div><div class='del'>-    # A default pretty printing method for general objects.</div><div class='del'>-    # It calls #pretty_print_instance_variables to list instance variables.</div><div class='del'>-    # </div><div class='del'>-    # If +self+ has a customized (redefined) #inspect method,</div><div class='del'>-    # the result of self.inspect is used but it obviously has no</div><div class='del'>-    # line break hints.</div><div class='del'>-    # </div><div class='del'>-    # This module provides predefined #pretty_print methods for some of</div><div class='del'>-    # the most commonly used built-in classes for convenience.</div><div class='del'>-    def pretty_print(q)</div><div class='del'>-      if /\(Kernel\)#/ !~ Object.instance_method(:method).bind(self).call(:inspect).inspect</div><div class='del'>-        q.text self.inspect</div><div class='del'>-      elsif /\(Kernel\)#/ !~ Object.instance_method(:method).bind(self).call(:to_s).inspect &amp;&amp; instance_variables.empty?</div><div class='del'>-        q.text self.to_s</div><div class='del'>-      else</div><div class='del'>-        q.pp_object(self)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # A default pretty printing method for general objects that are</div><div class='del'>-    # detected as part of a cycle.</div><div class='del'>-    def pretty_print_cycle(q)</div><div class='del'>-      q.object_address_group(self) {</div><div class='del'>-        q.breakable</div><div class='del'>-        q.text '...'</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns a sorted array of instance variable names.</div><div class='del'>-    # </div><div class='del'>-    # This method should return an array of names of instance variables as symbols or strings as:</div><div class='del'>-    # +[:@a, :@b]+.</div><div class='del'>-    def pretty_print_instance_variables</div><div class='del'>-      instance_variables.sort</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Is #inspect implementation using #pretty_print.</div><div class='del'>-    # If you implement #pretty_print, it can be used as follows.</div><div class='del'>-    # </div><div class='del'>-    #   alias inspect pretty_print_inspect</div><div class='del'>-    #</div><div class='del'>-    # However, doing this requires that every class that #inspect is called on</div><div class='del'>-    # implement #pretty_print, or a RuntimeError will be raised.</div><div class='del'>-    def pretty_print_inspect</div><div class='del'>-      if /\(PP::ObjectMixin\)#/ =~ Object.instance_method(:method).bind(self).call(:pretty_print).inspect</div><div class='del'>-        raise "pretty_print is not overridden for #{self.class}"</div><div class='del'>-      end</div><div class='del'>-      PP.singleline_pp(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 Array</div><div class='del'>-  def pretty_print(q)</div><div class='del'>-    q.group(1, '[', ']') {</div><div class='del'>-      q.seplist(self) {|v|</div><div class='del'>-        q.pp v</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pretty_print_cycle(q)</div><div class='del'>-    q.text(empty? ? '[]' : '[...]')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Hash</div><div class='del'>-  def pretty_print(q)</div><div class='del'>-    q.pp_hash self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def pretty_print_cycle(q)</div><div class='del'>-    q.text(empty? ? '{}' : '{...}')</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class &lt;&lt; ENV</div><div class='del'>-  def pretty_print(q)</div><div class='del'>-    q.pp_hash self</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Struct</div><div class='del'>-  def pretty_print(q)</div><div class='del'>-    q.group(1, '#&lt;struct ' + PP.mcall(self, Kernel, :class).name, '&gt;') {</div><div class='del'>-      q.seplist(PP.mcall(self, Struct, :members), lambda { q.text "," }) {|member|</div><div class='del'>-        q.breakable</div><div class='del'>-        q.text member.to_s</div><div class='del'>-        q.text '='</div><div class='del'>-        q.group(1) {</div><div class='del'>-          q.breakable ''</div><div class='del'>-          q.pp self[member]</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'>-  def pretty_print_cycle(q)</div><div class='del'>-    q.text sprintf("#&lt;struct %s:...&gt;", PP.mcall(self, Kernel, :class).name)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Range</div><div class='del'>-  def pretty_print(q)</div><div class='del'>-    q.pp self.begin</div><div class='del'>-    q.breakable ''</div><div class='del'>-    q.text(self.exclude_end? ? '...' : '..')</div><div class='del'>-    q.breakable ''</div><div class='del'>-    q.pp self.end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class File</div><div class='del'>-  class Stat</div><div class='del'>-    def pretty_print(q)</div><div class='del'>-      require 'etc.so'</div><div class='del'>-      q.object_group(self) {</div><div class='del'>-        q.breakable</div><div class='del'>-        q.text sprintf("dev=0x%x", self.dev); q.comma_breakable</div><div class='del'>-        q.text "ino="; q.pp self.ino; q.comma_breakable</div><div class='del'>-        q.group {</div><div class='del'>-          m = self.mode</div><div class='del'>-          q.text sprintf("mode=0%o", m)</div><div class='del'>-          q.breakable</div><div class='del'>-          q.text sprintf("(%s %c%c%c%c%c%c%c%c%c)",</div><div class='del'>-            self.ftype,</div><div class='del'>-            (m &amp; 0400 == 0 ? ?- : ?r),</div><div class='del'>-            (m &amp; 0200 == 0 ? ?- : ?w),</div><div class='del'>-            (m &amp; 0100 == 0 ? (m &amp; 04000 == 0 ? ?- : ?S) :</div><div class='del'>-                             (m &amp; 04000 == 0 ? ?x : ?s)),</div><div class='del'>-            (m &amp; 0040 == 0 ? ?- : ?r),</div><div class='del'>-            (m &amp; 0020 == 0 ? ?- : ?w),</div><div class='del'>-            (m &amp; 0010 == 0 ? (m &amp; 02000 == 0 ? ?- : ?S) :</div><div class='del'>-                             (m &amp; 02000 == 0 ? ?x : ?s)),</div><div class='del'>-            (m &amp; 0004 == 0 ? ?- : ?r),</div><div class='del'>-            (m &amp; 0002 == 0 ? ?- : ?w),</div><div class='del'>-            (m &amp; 0001 == 0 ? (m &amp; 01000 == 0 ? ?- : ?T) :</div><div class='del'>-                             (m &amp; 01000 == 0 ? ?x : ?t)))</div><div class='del'>-        }</div><div class='del'>-        q.comma_breakable</div><div class='del'>-        q.text "nlink="; q.pp self.nlink; q.comma_breakable</div><div class='del'>-        q.group {</div><div class='del'>-          q.text "uid="; q.pp self.uid</div><div class='del'>-          begin</div><div class='del'>-            pw = Etc.getpwuid(self.uid)</div><div class='del'>-          rescue ArgumentError</div><div class='del'>-          end</div><div class='del'>-          if pw</div><div class='del'>-            q.breakable; q.text "(#{pw.name})"</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        q.comma_breakable</div><div class='del'>-        q.group {</div><div class='del'>-          q.text "gid="; q.pp self.gid</div><div class='del'>-          begin</div><div class='del'>-            gr = Etc.getgrgid(self.gid)</div><div class='del'>-          rescue ArgumentError</div><div class='del'>-          end</div><div class='del'>-          if gr</div><div class='del'>-            q.breakable; q.text "(#{gr.name})"</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        q.comma_breakable</div><div class='del'>-        q.group {</div><div class='del'>-          q.text sprintf("rdev=0x%x", self.rdev)</div><div class='del'>-          q.breakable</div><div class='del'>-          q.text sprintf('(%d, %d)', self.rdev_major, self.rdev_minor)</div><div class='del'>-        }</div><div class='del'>-        q.comma_breakable</div><div class='del'>-        q.text "size="; q.pp self.size; q.comma_breakable</div><div class='del'>-        q.text "blksize="; q.pp self.blksize; q.comma_breakable</div><div class='del'>-        q.text "blocks="; q.pp self.blocks; q.comma_breakable</div><div class='del'>-        q.group {</div><div class='del'>-          t = self.atime</div><div class='del'>-          q.text "atime="; q.pp t</div><div class='del'>-          q.breakable; q.text "(#{t.tv_sec})"</div><div class='del'>-        }</div><div class='del'>-        q.comma_breakable</div><div class='del'>-        q.group {</div><div class='del'>-          t = self.mtime</div><div class='del'>-          q.text "mtime="; q.pp t</div><div class='del'>-          q.breakable; q.text "(#{t.tv_sec})"</div><div class='del'>-        }</div><div class='del'>-        q.comma_breakable</div><div class='del'>-        q.group {</div><div class='del'>-          t = self.ctime</div><div class='del'>-          q.text "ctime="; q.pp t</div><div class='del'>-          q.breakable; q.text "(#{t.tv_sec})"</div><div class='del'>-        }</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'>-class MatchData</div><div class='del'>-  def pretty_print(q)</div><div class='del'>-    q.object_group(self) {</div><div class='del'>-      q.breakable</div><div class='del'>-      q.seplist(1..self.size, lambda { q.breakable }) {|i|</div><div class='del'>-        q.pp self[i-1]</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Object</div><div class='del'>-  include PP::ObjectMixin</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-[Numeric, Symbol, FalseClass, TrueClass, NilClass, Module].each {|c|</div><div class='del'>-  c.class_eval {</div><div class='del'>-    def pretty_print_cycle(q)</div><div class='del'>-      q.text inspect</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-[Numeric, FalseClass, TrueClass, Module].each {|c|</div><div class='del'>-  c.class_eval {</div><div class='del'>-    def pretty_print(q)</div><div class='del'>-      q.text inspect</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# :enddoc:</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  require 'test/unit'</div><div class='del'>-</div><div class='del'>-  class PPTest &lt; Test::Unit::TestCase</div><div class='del'>-    def test_list0123_12</div><div class='del'>-      assert_equal("[0, 1, 2, 3]\n", PP.pp([0,1,2,3], '', 12))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_list0123_11</div><div class='del'>-      assert_equal("[0,\n 1,\n 2,\n 3]\n", PP.pp([0,1,2,3], '', 11))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    OverriddenStruct = Struct.new("OverriddenStruct", :members, :class)</div><div class='del'>-    def test_struct_override_members # [ruby-core:7865]</div><div class='del'>-      a = OverriddenStruct.new(1,2)</div><div class='del'>-      assert_equal("#&lt;struct Struct::OverriddenStruct members=1, class=2&gt;\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_redefined_method</div><div class='del'>-      o = ""</div><div class='del'>-      def o.method</div><div class='del'>-      end</div><div class='del'>-      assert_equal(%(""\n), PP.pp(o, ""))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HasInspect</div><div class='del'>-    def initialize(a)</div><div class='del'>-      @a = a</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      return "&lt;inspect:#{@a.inspect}&gt;"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HasPrettyPrint</div><div class='del'>-    def initialize(a)</div><div class='del'>-      @a = a</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pretty_print(q)</div><div class='del'>-      q.text "&lt;pretty_print:"</div><div class='del'>-      q.pp @a</div><div class='del'>-      q.text "&gt;"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class HasBoth</div><div class='del'>-    def initialize(a)</div><div class='del'>-      @a = a</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      return "&lt;inspect:#{@a.inspect}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pretty_print(q)</div><div class='del'>-      q.text "&lt;pretty_print:"</div><div class='del'>-      q.pp @a</div><div class='del'>-      q.text "&gt;"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class PrettyPrintInspect &lt; HasPrettyPrint</div><div class='del'>-    alias inspect pretty_print_inspect</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class PrettyPrintInspectWithoutPrettyPrint</div><div class='del'>-    alias inspect pretty_print_inspect</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class PPInspectTest &lt; Test::Unit::TestCase</div><div class='del'>-    def test_hasinspect</div><div class='del'>-      a = HasInspect.new(1)</div><div class='del'>-      assert_equal("&lt;inspect:1&gt;\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_hasprettyprint</div><div class='del'>-      a = HasPrettyPrint.new(1)</div><div class='del'>-      assert_equal("&lt;pretty_print:1&gt;\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_hasboth</div><div class='del'>-      a = HasBoth.new(1)</div><div class='del'>-      assert_equal("&lt;pretty_print:1&gt;\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_pretty_print_inspect</div><div class='del'>-      a = PrettyPrintInspect.new(1)</div><div class='del'>-      assert_equal("&lt;pretty_print:1&gt;", a.inspect)</div><div class='del'>-      a = PrettyPrintInspectWithoutPrettyPrint.new</div><div class='del'>-      assert_raise(RuntimeError) { a.inspect }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_proc</div><div class='del'>-      a = proc {1}</div><div class='del'>-      assert_equal("#{a.inspect}\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_to_s_with_iv</div><div class='del'>-      a = Object.new</div><div class='del'>-      def a.to_s() "aaa" end</div><div class='del'>-      a.instance_eval { @a = nil }</div><div class='del'>-      result = PP.pp(a, '')</div><div class='del'>-      assert_equal("#{a.inspect}\n", result)</div><div class='del'>-      assert_match(/\A#&lt;Object.*&gt;\n\z/m, result)</div><div class='del'>-      a = 1.0</div><div class='del'>-      a.instance_eval { @a = nil }</div><div class='del'>-      result = PP.pp(a, '')</div><div class='del'>-      assert_equal("#{a.inspect}\n", result)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def test_to_s_without_iv</div><div class='del'>-      a = Object.new</div><div class='del'>-      def a.to_s() "aaa" end</div><div class='del'>-      result = PP.pp(a, '')</div><div class='del'>-      assert_equal("#{a.inspect}\n", result)</div><div class='del'>-      assert_equal("aaa\n", result)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class PPCycleTest &lt; Test::Unit::TestCase</div><div class='del'>-    def test_array</div><div class='del'>-      a = []</div><div class='del'>-      a &lt;&lt; a</div><div class='del'>-      assert_equal("[[...]]\n", PP.pp(a, ''))</div><div class='del'>-      assert_equal("#{a.inspect}\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_hash</div><div class='del'>-      a = {}</div><div class='del'>-      a[0] = a</div><div class='del'>-      assert_equal("{0=&gt;{...}}\n", PP.pp(a, ''))</div><div class='del'>-      assert_equal("#{a.inspect}\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    S = Struct.new("S", :a, :b)</div><div class='del'>-    def test_struct</div><div class='del'>-      a = S.new(1,2)</div><div class='del'>-      a.b = a</div><div class='del'>-      assert_equal("#&lt;struct Struct::S a=1, b=#&lt;struct Struct::S:...&gt;&gt;\n", PP.pp(a, ''))</div><div class='del'>-      assert_equal("#{a.inspect}\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_object</div><div class='del'>-      a = Object.new</div><div class='del'>-      a.instance_eval {@a = a}</div><div class='del'>-      assert_equal(a.inspect + "\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_anonymous</div><div class='del'>-      a = Class.new.new</div><div class='del'>-      assert_equal(a.inspect + "\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_withinspect</div><div class='del'>-      a = []</div><div class='del'>-      a &lt;&lt; HasInspect.new(a)</div><div class='del'>-      assert_equal("[&lt;inspect:[...]&gt;]\n", PP.pp(a, ''))</div><div class='del'>-      assert_equal("#{a.inspect}\n", PP.pp(a, ''))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_share_nil</div><div class='del'>-      begin</div><div class='del'>-        PP.sharing_detection = true</div><div class='del'>-        a = [nil, nil]</div><div class='del'>-        assert_equal("[nil, nil]\n", PP.pp(a, ''))</div><div class='del'>-      ensure</div><div class='del'>-        PP.sharing_detection = false</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class PPSingleLineTest &lt; Test::Unit::TestCase</div><div class='del'>-    def test_hash</div><div class='del'>-      assert_equal("{1=&gt;1}", PP.singleline_pp({ 1 =&gt; 1}, '')) # [ruby-core:02699]</div><div class='del'>-      assert_equal("[1#{', 1'*99}]", PP.singleline_pp([1]*100, ''))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/prettyprint.rb b/lib/prettyprint.rb<br/>deleted file mode 100644<br/>index 315c422e9e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/prettyprint.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/prettyprint.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,896 +0,0 @@</div><div class='del'>-# $Id$</div><div class='del'>-</div><div class='del'>-# This class implements a pretty printing algorithm. It finds line breaks and</div><div class='del'>-# nice indentations for grouped structure.</div><div class='del'>-# </div><div class='del'>-# By default, the class assumes that primitive elements are strings and each</div><div class='del'>-# byte in the strings have single column in width. But it can be used for</div><div class='del'>-# other situations by giving suitable arguments for some methods:</div><div class='del'>-# * newline object and space generation block for PrettyPrint.new</div><div class='del'>-# * optional width argument for PrettyPrint#text</div><div class='del'>-# * PrettyPrint#breakable</div><div class='del'>-#</div><div class='del'>-# There are several candidate uses:</div><div class='del'>-# * text formatting using proportional fonts</div><div class='del'>-# * multibyte characters which has columns different to number of bytes</div><div class='del'>-# * non-string formatting</div><div class='del'>-#</div><div class='del'>-# == Bugs</div><div class='del'>-# * Box based formatting?</div><div class='del'>-# * Other (better) model/algorithm?</div><div class='del'>-# </div><div class='del'>-# == References</div><div class='del'>-# Christian Lindig, Strictly Pretty, March 2000,</div><div class='del'>-# http://www.st.cs.uni-sb.de/~lindig/papers/#pretty</div><div class='del'>-# </div><div class='del'>-# Philip Wadler, A prettier printer, March 1998,</div><div class='del'>-# http://homepages.inf.ed.ac.uk/wadler/topics/language-design.html#prettier</div><div class='del'>-# </div><div class='del'>-# == Author</div><div class='del'>-# Tanaka Akira &lt;akr@m17n.org&gt;</div><div class='del'>-# </div><div class='del'>-class PrettyPrint</div><div class='del'>-</div><div class='del'>-  # This is a convenience method which is same as follows:</div><div class='del'>-  # </div><div class='del'>-  #   begin</div><div class='del'>-  #     q = PrettyPrint.new(output, maxwidth, newline, &amp;genspace)</div><div class='del'>-  #     ...</div><div class='del'>-  #     q.flush</div><div class='del'>-  #     output</div><div class='del'>-  #   end</div><div class='del'>-  # </div><div class='del'>-  def PrettyPrint.format(output='', maxwidth=79, newline="\n", genspace=lambda {|n| ' ' * n})</div><div class='del'>-    q = PrettyPrint.new(output, maxwidth, newline, &amp;genspace)</div><div class='del'>-    yield q</div><div class='del'>-    q.flush</div><div class='del'>-    output</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This is similar to PrettyPrint::format but the result has no breaks.</div><div class='del'>-  #</div><div class='del'>-  # +maxwidth+, +newline+ and +genspace+ are ignored.</div><div class='del'>-  #</div><div class='del'>-  # The invocation of +breakable+ in the block doesn't break a line and is</div><div class='del'>-  # treated as just an invocation of +text+.</div><div class='del'>-  #</div><div class='del'>-  def PrettyPrint.singleline_format(output='', maxwidth=nil, newline=nil, genspace=nil)</div><div class='del'>-    q = SingleLine.new(output)</div><div class='del'>-    yield q</div><div class='del'>-    output</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Creates a buffer for pretty printing.</div><div class='del'>-  #</div><div class='del'>-  # +output+ is an output target. If it is not specified, '' is assumed. It</div><div class='del'>-  # should have a &lt;&lt; method which accepts the first argument +obj+ of</div><div class='del'>-  # PrettyPrint#text, the first argument +sep+ of PrettyPrint#breakable, the</div><div class='del'>-  # first argument +newline+ of PrettyPrint.new, and the result of a given</div><div class='del'>-  # block for PrettyPrint.new.</div><div class='del'>-  #</div><div class='del'>-  # +maxwidth+ specifies maximum line length. If it is not specified, 79 is</div><div class='del'>-  # assumed. However actual outputs may overflow +maxwidth+ if long</div><div class='del'>-  # non-breakable texts are provided.</div><div class='del'>-  #</div><div class='del'>-  # +newline+ is used for line breaks. "\n" is used if it is not specified.</div><div class='del'>-  #</div><div class='del'>-  # The block is used to generate spaces. {|width| ' ' * width} is used if it</div><div class='del'>-  # is not given.</div><div class='del'>-  #</div><div class='del'>-  def initialize(output='', maxwidth=79, newline="\n", &amp;genspace)</div><div class='del'>-    @output = output</div><div class='del'>-    @maxwidth = maxwidth</div><div class='del'>-    @newline = newline</div><div class='del'>-    @genspace = genspace || lambda {|n| ' ' * n}</div><div class='del'>-</div><div class='del'>-    @output_width = 0</div><div class='del'>-    @buffer_width = 0</div><div class='del'>-    @buffer = []</div><div class='del'>-</div><div class='del'>-    root_group = Group.new(0)</div><div class='del'>-    @group_stack = [root_group]</div><div class='del'>-    @group_queue = GroupQueue.new(root_group)</div><div class='del'>-    @indent = 0</div><div class='del'>-  end</div><div class='del'>-  attr_reader :output, :maxwidth, :newline, :genspace</div><div class='del'>-  attr_reader :indent, :group_queue</div><div class='del'>-</div><div class='del'>-  def current_group</div><div class='del'>-    @group_stack.last</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # first? is a predicate to test the call is a first call to first? with</div><div class='del'>-  # current group.</div><div class='del'>-  #</div><div class='del'>-  # It is useful to format comma separated values as:</div><div class='del'>-  #</div><div class='del'>-  #   q.group(1, '[', ']') {</div><div class='del'>-  #     xxx.each {|yyy|</div><div class='del'>-  #       unless q.first?</div><div class='del'>-  #         q.text ','</div><div class='del'>-  #         q.breakable</div><div class='del'>-  #       end</div><div class='del'>-  #       ... pretty printing yyy ...</div><div class='del'>-  #     }</div><div class='del'>-  #   }</div><div class='del'>-  #</div><div class='del'>-  # first? is obsoleted in 1.8.2.</div><div class='del'>-  #</div><div class='del'>-  def first?</div><div class='del'>-    warn "PrettyPrint#first? is obsoleted at 1.8.2."</div><div class='del'>-    current_group.first?</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def break_outmost_groups</div><div class='del'>-    while @maxwidth &lt; @output_width + @buffer_width</div><div class='del'>-      return unless group = @group_queue.deq</div><div class='del'>-      until group.breakables.empty?</div><div class='del'>-        data = @buffer.shift</div><div class='del'>-        @output_width = data.output(@output, @output_width)</div><div class='del'>-        @buffer_width -= data.width</div><div class='del'>-      end</div><div class='del'>-      while !@buffer.empty? &amp;&amp; Text === @buffer.first</div><div class='del'>-        text = @buffer.shift</div><div class='del'>-        @output_width = text.output(@output, @output_width)</div><div class='del'>-        @buffer_width -= text.width</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This adds +obj+ as a text of +width+ columns in width.</div><div class='del'>-  #</div><div class='del'>-  # If +width+ is not specified, obj.length is used.</div><div class='del'>-  #</div><div class='del'>-  def text(obj, width=obj.length)</div><div class='del'>-    if @buffer.empty?</div><div class='del'>-      @output &lt;&lt; obj</div><div class='del'>-      @output_width += width</div><div class='del'>-    else</div><div class='del'>-      text = @buffer.last</div><div class='del'>-      unless Text === text</div><div class='del'>-        text = Text.new</div><div class='del'>-        @buffer &lt;&lt; text</div><div class='del'>-      end</div><div class='del'>-      text.add(obj, width)</div><div class='del'>-      @buffer_width += width</div><div class='del'>-      break_outmost_groups</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def fill_breakable(sep=' ', width=sep.length)</div><div class='del'>-    group { breakable sep, width }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This tells "you can break a line here if necessary", and a +width+\-column</div><div class='del'>-  # text +sep+ is inserted if a line is not broken at the point.</div><div class='del'>-  #</div><div class='del'>-  # If +sep+ is not specified, " " is used.</div><div class='del'>-  #</div><div class='del'>-  # If +width+ is not specified, +sep.length+ is used. You will have to</div><div class='del'>-  # specify this when +sep+ is a multibyte character, for example.</div><div class='del'>-  #</div><div class='del'>-  def breakable(sep=' ', width=sep.length)</div><div class='del'>-    group = @group_stack.last</div><div class='del'>-    if group.break?</div><div class='del'>-      flush</div><div class='del'>-      @output &lt;&lt; @newline</div><div class='del'>-      @output &lt;&lt; @genspace.call(@indent)</div><div class='del'>-      @output_width = @indent</div><div class='del'>-      @buffer_width = 0</div><div class='del'>-    else</div><div class='del'>-      @buffer &lt;&lt; Breakable.new(sep, width, self)</div><div class='del'>-      @buffer_width += width</div><div class='del'>-      break_outmost_groups</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Groups line break hints added in the block. The line break hints are all</div><div class='del'>-  # to be used or not.</div><div class='del'>-  #</div><div class='del'>-  # If +indent+ is specified, the method call is regarded as nested by</div><div class='del'>-  # nest(indent) { ... }.</div><div class='del'>-  #</div><div class='del'>-  # If +open_obj+ is specified, &lt;tt&gt;text open_obj, open_width&lt;/tt&gt; is called</div><div class='del'>-  # before grouping. If +close_obj+ is specified, &lt;tt&gt;text close_obj,</div><div class='del'>-  # close_width&lt;/tt&gt; is called after grouping.</div><div class='del'>-  #</div><div class='del'>-  def group(indent=0, open_obj='', close_obj='', open_width=open_obj.length, close_width=close_obj.length)</div><div class='del'>-    text open_obj, open_width</div><div class='del'>-    group_sub {</div><div class='del'>-      nest(indent) {</div><div class='del'>-        yield</div><div class='del'>-      }</div><div class='del'>-    }</div><div class='del'>-    text close_obj, close_width</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def group_sub</div><div class='del'>-    group = Group.new(@group_stack.last.depth + 1)</div><div class='del'>-    @group_stack.push group</div><div class='del'>-    @group_queue.enq group</div><div class='del'>-    begin</div><div class='del'>-      yield</div><div class='del'>-    ensure</div><div class='del'>-      @group_stack.pop</div><div class='del'>-      if group.breakables.empty?</div><div class='del'>-        @group_queue.delete group</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Increases left margin after newline with +indent+ for line breaks added in</div><div class='del'>-  # the block.</div><div class='del'>-  #</div><div class='del'>-  def nest(indent)</div><div class='del'>-    @indent += indent</div><div class='del'>-    begin</div><div class='del'>-      yield</div><div class='del'>-    ensure</div><div class='del'>-      @indent -= indent</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # outputs buffered data.</div><div class='del'>-  #</div><div class='del'>-  def flush</div><div class='del'>-    @buffer.each {|data|</div><div class='del'>-      @output_width = data.output(@output, @output_width)</div><div class='del'>-    }</div><div class='del'>-    @buffer.clear</div><div class='del'>-    @buffer_width = 0</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Text</div><div class='del'>-    def initialize</div><div class='del'>-      @objs = []</div><div class='del'>-      @width = 0</div><div class='del'>-    end</div><div class='del'>-    attr_reader :width</div><div class='del'>-</div><div class='del'>-    def output(out, output_width)</div><div class='del'>-      @objs.each {|obj| out &lt;&lt; obj}</div><div class='del'>-      output_width + @width</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add(obj, width)</div><div class='del'>-      @objs &lt;&lt; obj</div><div class='del'>-      @width += width</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Breakable</div><div class='del'>-    def initialize(sep, width, q)</div><div class='del'>-      @obj = sep</div><div class='del'>-      @width = width</div><div class='del'>-      @pp = q</div><div class='del'>-      @indent = q.indent</div><div class='del'>-      @group = q.current_group</div><div class='del'>-      @group.breakables.push self</div><div class='del'>-    end</div><div class='del'>-    attr_reader :obj, :width, :indent</div><div class='del'>-</div><div class='del'>-    def output(out, output_width)</div><div class='del'>-      @group.breakables.shift</div><div class='del'>-      if @group.break?</div><div class='del'>-        out &lt;&lt; @pp.newline</div><div class='del'>-        out &lt;&lt; @pp.genspace.call(@indent)</div><div class='del'>-        @indent</div><div class='del'>-      else</div><div class='del'>-        @pp.group_queue.delete @group if @group.breakables.empty?</div><div class='del'>-        out &lt;&lt; @obj</div><div class='del'>-        output_width + @width</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Group</div><div class='del'>-    def initialize(depth)</div><div class='del'>-      @depth = depth</div><div class='del'>-      @breakables = []</div><div class='del'>-      @break = false</div><div class='del'>-    end</div><div class='del'>-    attr_reader :depth, :breakables</div><div class='del'>-</div><div class='del'>-    def break</div><div class='del'>-      @break = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def break?</div><div class='del'>-      @break</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def first?</div><div class='del'>-      if defined? @first</div><div class='del'>-        false</div><div class='del'>-      else</div><div class='del'>-        @first = false</div><div class='del'>-        true</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class GroupQueue</div><div class='del'>-    def initialize(*groups)</div><div class='del'>-      @queue = []</div><div class='del'>-      groups.each {|g| enq g}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def enq(group)</div><div class='del'>-      depth = group.depth</div><div class='del'>-      @queue &lt;&lt; [] until depth &lt; @queue.length</div><div class='del'>-      @queue[depth] &lt;&lt; group</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def deq</div><div class='del'>-      @queue.each {|gs|</div><div class='del'>-        (gs.length-1).downto(0) {|i|</div><div class='del'>-          unless gs[i].breakables.empty?</div><div class='del'>-            group = gs.slice!(i, 1).first</div><div class='del'>-            group.break</div><div class='del'>-            return group</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        gs.each {|group| group.break}</div><div class='del'>-        gs.clear</div><div class='del'>-      }</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete(group)</div><div class='del'>-      @queue[group.depth].delete(group)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class SingleLine</div><div class='del'>-    def initialize(output, maxwidth=nil, newline=nil)</div><div class='del'>-      @output = output</div><div class='del'>-      @first = [true]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def text(obj, width=nil)</div><div class='del'>-      @output &lt;&lt; obj</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def breakable(sep=' ', width=nil)</div><div class='del'>-      @output &lt;&lt; sep</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def nest(indent)</div><div class='del'>-      yield</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def group(indent=nil, open_obj='', close_obj='', open_width=nil, close_width=nil)</div><div class='del'>-      @first.push true</div><div class='del'>-      @output &lt;&lt; open_obj</div><div class='del'>-      yield</div><div class='del'>-      @output &lt;&lt; close_obj</div><div class='del'>-      @first.pop</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def flush</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def first?</div><div class='del'>-      result = @first[-1]</div><div class='del'>-      @first[-1] = false</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  require 'test/unit'</div><div class='del'>-</div><div class='del'>-  class WadlerExample &lt; Test::Unit::TestCase # :nodoc:</div><div class='del'>-    def setup</div><div class='del'>-      @tree = Tree.new("aaaa", Tree.new("bbbbb", Tree.new("ccc"),</div><div class='del'>-                                                 Tree.new("dd")),</div><div class='del'>-                               Tree.new("eee"),</div><div class='del'>-                               Tree.new("ffff", Tree.new("gg"),</div><div class='del'>-                                                Tree.new("hhh"),</div><div class='del'>-                                                Tree.new("ii")))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def hello(width)</div><div class='del'>-      PrettyPrint.format('', width) {|hello|</div><div class='del'>-        hello.group {</div><div class='del'>-          hello.group {</div><div class='del'>-            hello.group {</div><div class='del'>-              hello.group {</div><div class='del'>-                hello.text 'hello'</div><div class='del'>-                hello.breakable; hello.text 'a'</div><div class='del'>-              }</div><div class='del'>-              hello.breakable; hello.text 'b'</div><div class='del'>-            }</div><div class='del'>-            hello.breakable; hello.text 'c'</div><div class='del'>-          }</div><div class='del'>-          hello.breakable; hello.text 'd'</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_hello_00_06</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-hello</div><div class='del'>-a</div><div class='del'>-b</div><div class='del'>-c</div><div class='del'>-d</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, hello(0))</div><div class='del'>-      assert_equal(expected, hello(6))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_hello_07_08</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-hello a</div><div class='del'>-b</div><div class='del'>-c</div><div class='del'>-d</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, hello(7))</div><div class='del'>-      assert_equal(expected, hello(8))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_hello_09_10</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-hello a b</div><div class='del'>-c</div><div class='del'>-d</div><div class='del'>-End</div><div class='del'>-      out = hello(9); assert_equal(expected, out)</div><div class='del'>-      out = hello(10); assert_equal(expected, out)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_hello_11_12</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-hello a b c</div><div class='del'>-d</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, hello(11))</div><div class='del'>-      assert_equal(expected, hello(12))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_hello_13</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-hello a b c d</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, hello(13))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tree(width)</div><div class='del'>-      PrettyPrint.format('', width) {|q| @tree.show(q)}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_tree_00_19</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-aaaa[bbbbb[ccc,</div><div class='del'>-           dd],</div><div class='del'>-     eee,</div><div class='del'>-     ffff[gg,</div><div class='del'>-          hhh,</div><div class='del'>-          ii]]</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, tree(0))</div><div class='del'>-      assert_equal(expected, tree(19))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_tree_20_22</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-aaaa[bbbbb[ccc, dd],</div><div class='del'>-     eee,</div><div class='del'>-     ffff[gg,</div><div class='del'>-          hhh,</div><div class='del'>-          ii]]</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, tree(20))</div><div class='del'>-      assert_equal(expected, tree(22))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_tree_23_43</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-aaaa[bbbbb[ccc, dd],</div><div class='del'>-     eee,</div><div class='del'>-     ffff[gg, hhh, ii]]</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, tree(23))</div><div class='del'>-      assert_equal(expected, tree(43))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_tree_44</div><div class='del'>-      assert_equal(&lt;&lt;'End'.chomp, tree(44))</div><div class='del'>-aaaa[bbbbb[ccc, dd], eee, ffff[gg, hhh, ii]]</div><div class='del'>-End</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tree_alt(width)</div><div class='del'>-      PrettyPrint.format('', width) {|q| @tree.altshow(q)}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_tree_alt_00_18</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-aaaa[</div><div class='del'>-  bbbbb[</div><div class='del'>-    ccc,</div><div class='del'>-    dd</div><div class='del'>-  ],</div><div class='del'>-  eee,</div><div class='del'>-  ffff[</div><div class='del'>-    gg,</div><div class='del'>-    hhh,</div><div class='del'>-    ii</div><div class='del'>-  ]</div><div class='del'>-]</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, tree_alt(0))</div><div class='del'>-      assert_equal(expected, tree_alt(18))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_tree_alt_19_20</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-aaaa[</div><div class='del'>-  bbbbb[ ccc, dd ],</div><div class='del'>-  eee,</div><div class='del'>-  ffff[</div><div class='del'>-    gg,</div><div class='del'>-    hhh,</div><div class='del'>-    ii</div><div class='del'>-  ]</div><div class='del'>-]</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, tree_alt(19))</div><div class='del'>-      assert_equal(expected, tree_alt(20))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_tree_alt_20_49</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-aaaa[</div><div class='del'>-  bbbbb[ ccc, dd ],</div><div class='del'>-  eee,</div><div class='del'>-  ffff[ gg, hhh, ii ]</div><div class='del'>-]</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, tree_alt(21))</div><div class='del'>-      assert_equal(expected, tree_alt(49))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_tree_alt_50</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-aaaa[ bbbbb[ ccc, dd ], eee, ffff[ gg, hhh, ii ] ]</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, tree_alt(50))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Tree # :nodoc:</div><div class='del'>-      def initialize(string, *children)</div><div class='del'>-        @string = string</div><div class='del'>-        @children = children</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def show(q)</div><div class='del'>-        q.group {</div><div class='del'>-          q.text @string</div><div class='del'>-          q.nest(@string.length) {</div><div class='del'>-            unless @children.empty?</div><div class='del'>-              q.text '['</div><div class='del'>-              q.nest(1) {</div><div class='del'>-                first = true</div><div class='del'>-                @children.each {|t|</div><div class='del'>-                  if first</div><div class='del'>-                    first = false</div><div class='del'>-                  else</div><div class='del'>-                    q.text ','</div><div class='del'>-                    q.breakable</div><div class='del'>-                  end</div><div class='del'>-                  t.show(q)</div><div class='del'>-                }</div><div class='del'>-              }</div><div class='del'>-              q.text ']'</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def altshow(q)</div><div class='del'>-        q.group {</div><div class='del'>-          q.text @string</div><div class='del'>-          unless @children.empty?</div><div class='del'>-            q.text '['</div><div class='del'>-            q.nest(2) {</div><div class='del'>-              q.breakable</div><div class='del'>-              first = true</div><div class='del'>-              @children.each {|t|</div><div class='del'>-                if first</div><div class='del'>-                  first = false</div><div class='del'>-                else</div><div class='del'>-                  q.text ','</div><div class='del'>-                  q.breakable</div><div class='del'>-                end</div><div class='del'>-                t.altshow(q)</div><div class='del'>-              }</div><div class='del'>-            }</div><div class='del'>-            q.breakable</div><div class='del'>-            q.text ']'</div><div class='del'>-          end</div><div class='del'>-        }</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'>-  class StrictPrettyExample &lt; Test::Unit::TestCase # :nodoc:</div><div class='del'>-    def prog(width)</div><div class='del'>-      PrettyPrint.format('', width) {|q|</div><div class='del'>-        q.group {</div><div class='del'>-          q.group {q.nest(2) {</div><div class='del'>-                       q.text "if"; q.breakable;</div><div class='del'>-                       q.group {</div><div class='del'>-                         q.nest(2) {</div><div class='del'>-                           q.group {q.text "a"; q.breakable; q.text "=="}</div><div class='del'>-                           q.breakable; q.text "b"}}}}</div><div class='del'>-          q.breakable</div><div class='del'>-          q.group {q.nest(2) {</div><div class='del'>-                       q.text "then"; q.breakable;</div><div class='del'>-                       q.group {</div><div class='del'>-                         q.nest(2) {</div><div class='del'>-                           q.group {q.text "a"; q.breakable; q.text "&lt;&lt;"}</div><div class='del'>-                           q.breakable; q.text "2"}}}}</div><div class='del'>-          q.breakable</div><div class='del'>-          q.group {q.nest(2) {</div><div class='del'>-                       q.text "else"; q.breakable;</div><div class='del'>-                       q.group {</div><div class='del'>-                         q.nest(2) {</div><div class='del'>-                           q.group {q.text "a"; q.breakable; q.text "+"}</div><div class='del'>-                           q.breakable; q.text "b"}}}}}</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_00_04</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if</div><div class='del'>-  a</div><div class='del'>-    ==</div><div class='del'>-    b</div><div class='del'>-then</div><div class='del'>-  a</div><div class='del'>-    &lt;&lt;</div><div class='del'>-    2</div><div class='del'>-else</div><div class='del'>-  a</div><div class='del'>-    +</div><div class='del'>-    b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(0))</div><div class='del'>-      assert_equal(expected, prog(4))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_05</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if</div><div class='del'>-  a</div><div class='del'>-    ==</div><div class='del'>-    b</div><div class='del'>-then</div><div class='del'>-  a</div><div class='del'>-    &lt;&lt;</div><div class='del'>-    2</div><div class='del'>-else</div><div class='del'>-  a +</div><div class='del'>-    b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(5))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_06</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if</div><div class='del'>-  a ==</div><div class='del'>-    b</div><div class='del'>-then</div><div class='del'>-  a &lt;&lt;</div><div class='del'>-    2</div><div class='del'>-else</div><div class='del'>-  a +</div><div class='del'>-    b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(6))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_07</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if</div><div class='del'>-  a ==</div><div class='del'>-    b</div><div class='del'>-then</div><div class='del'>-  a &lt;&lt;</div><div class='del'>-    2</div><div class='del'>-else</div><div class='del'>-  a + b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(7))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_08</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if</div><div class='del'>-  a == b</div><div class='del'>-then</div><div class='del'>-  a &lt;&lt; 2</div><div class='del'>-else</div><div class='del'>-  a + b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(8))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_09</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if a == b</div><div class='del'>-then</div><div class='del'>-  a &lt;&lt; 2</div><div class='del'>-else</div><div class='del'>-  a + b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(9))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_10</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if a == b</div><div class='del'>-then</div><div class='del'>-  a &lt;&lt; 2</div><div class='del'>-else a + b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(10))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_11_31</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if a == b</div><div class='del'>-then a &lt;&lt; 2</div><div class='del'>-else a + b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(11))</div><div class='del'>-      assert_equal(expected, prog(15))</div><div class='del'>-      assert_equal(expected, prog(31))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_32</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-if a == b then a &lt;&lt; 2 else a + b</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, prog(32))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TailGroup &lt; Test::Unit::TestCase # :nodoc:</div><div class='del'>-    def test_1</div><div class='del'>-      out = PrettyPrint.format('', 10) {|q|</div><div class='del'>-        q.group {</div><div class='del'>-          q.group {</div><div class='del'>-            q.text "abc"</div><div class='del'>-            q.breakable</div><div class='del'>-            q.text "def"</div><div class='del'>-          }</div><div class='del'>-          q.group {</div><div class='del'>-            q.text "ghi"</div><div class='del'>-            q.breakable</div><div class='del'>-            q.text "jkl"</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      assert_equal("abc defghi\njkl", out)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class NonString &lt; Test::Unit::TestCase # :nodoc:</div><div class='del'>-    def format(width)</div><div class='del'>-      PrettyPrint.format([], width, 'newline', lambda {|n| "#{n} spaces"}) {|q|</div><div class='del'>-        q.text(3, 3)</div><div class='del'>-        q.breakable(1, 1)</div><div class='del'>-        q.text(3, 3)</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_6</div><div class='del'>-      assert_equal([3, "newline", "0 spaces", 3], format(6))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_7</div><div class='del'>-      assert_equal([3, 1, 3], format(7))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Fill &lt; Test::Unit::TestCase # :nodoc:</div><div class='del'>-    def format(width)</div><div class='del'>-      PrettyPrint.format('', width) {|q|</div><div class='del'>-        q.group {</div><div class='del'>-          q.text 'abc'</div><div class='del'>-          q.fill_breakable</div><div class='del'>-          q.text 'def'</div><div class='del'>-          q.fill_breakable</div><div class='del'>-          q.text 'ghi'</div><div class='del'>-          q.fill_breakable</div><div class='del'>-          q.text 'jkl'</div><div class='del'>-          q.fill_breakable</div><div class='del'>-          q.text 'mno'</div><div class='del'>-          q.fill_breakable</div><div class='del'>-          q.text 'pqr'</div><div class='del'>-          q.fill_breakable</div><div class='del'>-          q.text 'stu'</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_00_06</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-abc</div><div class='del'>-def</div><div class='del'>-ghi</div><div class='del'>-jkl</div><div class='del'>-mno</div><div class='del'>-pqr</div><div class='del'>-stu</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, format(0))</div><div class='del'>-      assert_equal(expected, format(6))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_07_10</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-abc def</div><div class='del'>-ghi jkl</div><div class='del'>-mno pqr</div><div class='del'>-stu</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, format(7))</div><div class='del'>-      assert_equal(expected, format(10))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_11_14</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-abc def ghi</div><div class='del'>-jkl mno pqr</div><div class='del'>-stu</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, format(11))</div><div class='del'>-      assert_equal(expected, format(14))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_15_18</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-abc def ghi jkl</div><div class='del'>-mno pqr stu</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, format(15))</div><div class='del'>-      assert_equal(expected, format(18))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_19_22</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-abc def ghi jkl mno</div><div class='del'>-pqr stu</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, format(19))</div><div class='del'>-      assert_equal(expected, format(22))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_23_26</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-abc def ghi jkl mno pqr</div><div class='del'>-stu</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, format(23))</div><div class='del'>-      assert_equal(expected, format(26))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def test_27</div><div class='del'>-      expected = &lt;&lt;'End'.chomp</div><div class='del'>-abc def ghi jkl mno pqr stu</div><div class='del'>-End</div><div class='del'>-      assert_equal(expected, format(27))</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/lib/profile.rb b/lib/profile.rb<br/>deleted file mode 100644<br/>index 104cb205b9..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/profile.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/profile.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,6 +0,0 @@</div><div class='del'>-require 'profiler'</div><div class='del'>-</div><div class='del'>-END {</div><div class='del'>-  Profiler__::print_profile(STDERR)</div><div class='del'>-}</div><div class='del'>-Profiler__::start_profile</div><div class='head'>diff --git a/lib/profiler.rb b/lib/profiler.rb<br/>deleted file mode 100644<br/>index 9762fa1181..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/profiler.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/profiler.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,59 +0,0 @@</div><div class='del'>-module Profiler__</div><div class='del'>-  # internal values</div><div class='del'>-  @@start = @@stack = @@map = nil</div><div class='del'>-  PROFILE_PROC = proc{|event, file, line, id, binding, klass|</div><div class='del'>-    case event</div><div class='del'>-    when "call", "c-call"</div><div class='del'>-      now = Process.times[0]</div><div class='del'>-      @@stack.push [now, 0.0]</div><div class='del'>-    when "return", "c-return"</div><div class='del'>-      now = Process.times[0]</div><div class='del'>-      key = [klass, id]</div><div class='del'>-      if tick = @@stack.pop</div><div class='del'>-        data = (@@map[key] ||= [0, 0.0, 0.0, key])</div><div class='del'>-        data[0] += 1</div><div class='del'>-        cost = now - tick[0]</div><div class='del'>-        data[1] += cost</div><div class='del'>-        data[2] += cost - tick[1]</div><div class='del'>-        @@stack[-1][1] += cost if @@stack[-1]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  }</div><div class='del'>-module_function</div><div class='del'>-  def start_profile</div><div class='del'>-    @@start = Process.times[0]</div><div class='del'>-    @@stack = []</div><div class='del'>-    @@map = {}</div><div class='del'>-    set_trace_func PROFILE_PROC</div><div class='del'>-  end</div><div class='del'>-  def stop_profile</div><div class='del'>-    set_trace_func nil</div><div class='del'>-  end</div><div class='del'>-  def print_profile(f)</div><div class='del'>-    stop_profile</div><div class='del'>-    total = Process.times[0] - @@start</div><div class='del'>-    if total == 0 then total = 0.01 end</div><div class='del'>-    data = @@map.values</div><div class='del'>-    data.sort!{|a,b| b[2] &lt;=&gt; a[2]}</div><div class='del'>-    sum = 0</div><div class='del'>-    f.printf "  %%   cumulative   self              self     total\n"</div><div class='del'>-    f.printf " time   seconds   seconds    calls  ms/call  ms/call  name\n"</div><div class='del'>-    for d in data</div><div class='del'>-      sum += d[2]</div><div class='del'>-      f.printf "%6.2f %8.2f  %8.2f %8d ", d[2]/total*100, sum, d[2], d[0]</div><div class='del'>-      f.printf "%8.2f %8.2f  %s\n", d[2]*1000/d[0], d[1]*1000/d[0], get_name(*d[3])</div><div class='del'>-    end</div><div class='del'>-    f.printf "%6.2f %8.2f  %8.2f %8d ", 0.0, total, 0.0, 1     # ???</div><div class='del'>-    f.printf "%8.2f %8.2f  %s\n", 0.0, total*1000, "#toplevel" # ???</div><div class='del'>-  end</div><div class='del'>-  def get_name(klass, id)</div><div class='del'>-    name = klass.to_s || ""</div><div class='del'>-    if klass.kind_of? Class</div><div class='del'>-      name += "#"</div><div class='del'>-    else</div><div class='del'>-      name += "."</div><div class='del'>-    end</div><div class='del'>-    name + id.id2name</div><div class='del'>-  end</div><div class='del'>-  private :get_name</div><div class='del'>-end</div><div class='head'>diff --git a/lib/pstore.rb b/lib/pstore.rb<br/>deleted file mode 100644<br/>index ab495d9ed7..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/pstore.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/pstore.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,395 +0,0 @@</div><div class='del'>-# = PStore -- Transactional File Storage for Ruby Objects</div><div class='del'>-#</div><div class='del'>-# pstore.rb -</div><div class='del'>-#   originally by matz</div><div class='del'>-#   documentation by Kev Jackson and James Edward Gray II</div><div class='del'>-#</div><div class='del'>-# See PStore for documentation.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require "fileutils"</div><div class='del'>-require "digest/md5"</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# PStore implements a file based persistence mechanism based on a Hash.  User</div><div class='del'>-# code can store hierarchies of Ruby objects (values) into the data store file</div><div class='del'>-# by name (keys).  An object hierarchy may be just a single object.  User code </div><div class='del'>-# may later read values back from the data store or even update data, as needed.</div><div class='del'>-# </div><div class='del'>-# The transactional behavior ensures that any changes succeed or fail together.</div><div class='del'>-# This can be used to ensure that the data store is not left in a transitory</div><div class='del'>-# state, where some values were updated but others were not.</div><div class='del'>-# </div><div class='del'>-# Behind the scenes, Ruby objects are stored to the data store file with </div><div class='del'>-# Marshal.  That carries the usual limitations.  Proc objects cannot be </div><div class='del'>-# marshalled, for example.</div><div class='del'>-#</div><div class='del'>-# == Usage example:</div><div class='del'>-# </div><div class='del'>-#  require "pstore"</div><div class='del'>-#  </div><div class='del'>-#  # a mock wiki object...</div><div class='del'>-#  class WikiPage</div><div class='del'>-#    def initialize( page_name, author, contents )</div><div class='del'>-#      @page_name = page_name</div><div class='del'>-#      @revisions = Array.new</div><div class='del'>-#      </div><div class='del'>-#      add_revision(author, contents)</div><div class='del'>-#    end</div><div class='del'>-#    </div><div class='del'>-#    attr_reader :page_name</div><div class='del'>-#    </div><div class='del'>-#    def add_revision( author, contents )</div><div class='del'>-#      @revisions &lt;&lt; { :created  =&gt; Time.now,</div><div class='del'>-#                      :author   =&gt; author,</div><div class='del'>-#                      :contents =&gt; contents }</div><div class='del'>-#    end</div><div class='del'>-#    </div><div class='del'>-#    def wiki_page_references</div><div class='del'>-#      [@page_name] + @revisions.last[:contents].scan(/\b(?:[A-Z]+[a-z]+){2,}/)</div><div class='del'>-#    end</div><div class='del'>-#    </div><div class='del'>-#    # ...</div><div class='del'>-#  end</div><div class='del'>-#  </div><div class='del'>-#  # create a new page...</div><div class='del'>-#  home_page = WikiPage.new( "HomePage", "James Edward Gray II",</div><div class='del'>-#                            "A page about the JoysOfDocumentation..." )</div><div class='del'>-#  </div><div class='del'>-#  # then we want to update page data and the index together, or not at all...</div><div class='del'>-#  wiki = PStore.new("wiki_pages.pstore")</div><div class='del'>-#  wiki.transaction do  # begin transaction; do all of this or none of it</div><div class='del'>-#    # store page...</div><div class='del'>-#    wiki[home_page.page_name] = home_page</div><div class='del'>-#    # ensure that an index has been created...</div><div class='del'>-#    wiki[:wiki_index] ||= Array.new</div><div class='del'>-#    # update wiki index...</div><div class='del'>-#    wiki[:wiki_index].push(*home_page.wiki_page_references)</div><div class='del'>-#  end                   # commit changes to wiki data store file</div><div class='del'>-#  </div><div class='del'>-#  ### Some time later... ###</div><div class='del'>-#  </div><div class='del'>-#  # read wiki data...</div><div class='del'>-#  wiki.transaction(true) do  # begin read-only transaction, no changes allowed</div><div class='del'>-#    wiki.roots.each do |data_root_name|</div><div class='del'>-#      p data_root_name</div><div class='del'>-#      p wiki[data_root_name]</div><div class='del'>-#    end</div><div class='del'>-#  end</div><div class='del'>-#</div><div class='del'>-class PStore</div><div class='del'>-  binmode = defined?(File::BINARY) ? File::BINARY : 0</div><div class='del'>-  RDWR_ACCESS = File::RDWR | File::CREAT | binmode</div><div class='del'>-  RD_ACCESS = File::RDONLY | binmode</div><div class='del'>-  WR_ACCESS = File::WRONLY | File::CREAT | File::TRUNC | binmode</div><div class='del'>-</div><div class='del'>-  # The error type thrown by all PStore methods.</div><div class='del'>-  class Error &lt; StandardError</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # </div><div class='del'>-  # To construct a PStore object, pass in the _file_ path where you would like </div><div class='del'>-  # the data to be stored.</div><div class='del'>-  # </div><div class='del'>-  def initialize(file)</div><div class='del'>-    dir = File::dirname(file)</div><div class='del'>-    unless File::directory? dir</div><div class='del'>-      raise PStore::Error, format("directory %s does not exist", dir)</div><div class='del'>-    end</div><div class='del'>-    if File::exist? file and not File::readable? file</div><div class='del'>-      raise PStore::Error, format("file %s not readable", file)</div><div class='del'>-    end</div><div class='del'>-    @transaction = false</div><div class='del'>-    @filename = file</div><div class='del'>-    @abort = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Raises PStore::Error if the calling code is not in a PStore#transaction.</div><div class='del'>-  def in_transaction</div><div class='del'>-    raise PStore::Error, "not in transaction" unless @transaction</div><div class='del'>-  end</div><div class='del'>-  # </div><div class='del'>-  # Raises PStore::Error if the calling code is not in a PStore#transaction or</div><div class='del'>-  # if the code is in a read-only PStore#transaction.</div><div class='del'>-  # </div><div class='del'>-  def in_transaction_wr()</div><div class='del'>-    in_transaction()</div><div class='del'>-    raise PStore::Error, "in read-only transaction" if @rdonly</div><div class='del'>-  end</div><div class='del'>-  private :in_transaction, :in_transaction_wr</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Retrieves a value from the PStore file data, by _name_.  The hierarchy of </div><div class='del'>-  # Ruby objects stored under that root _name_ will be returned.</div><div class='del'>-  # </div><div class='del'>-  # *WARNING*:  This method is only valid in a PStore#transaction.  It will</div><div class='del'>-  # raise PStore::Error if called at any other time.</div><div class='del'>-  #</div><div class='del'>-  def [](name)</div><div class='del'>-    in_transaction</div><div class='del'>-    @table[name]</div><div class='del'>-  end</div><div class='del'>-  #</div><div class='del'>-  # This method is just like PStore#[], save that you may also provide a </div><div class='del'>-  # _default_ value for the object.  In the event the specified _name_ is not </div><div class='del'>-  # found in the data store, your _default_ will be returned instead.  If you do </div><div class='del'>-  # not specify a default, PStore::Error will be raised if the object is not </div><div class='del'>-  # found.</div><div class='del'>-  # </div><div class='del'>-  # *WARNING*:  This method is only valid in a PStore#transaction.  It will</div><div class='del'>-  # raise PStore::Error if called at any other time.</div><div class='del'>-  #</div><div class='del'>-  def fetch(name, default=PStore::Error)</div><div class='del'>-    in_transaction</div><div class='del'>-    unless @table.key? name</div><div class='del'>-      if default==PStore::Error</div><div class='del'>-	raise PStore::Error, format("undefined root name `%s'", name)</div><div class='del'>-      else</div><div class='del'>-	return default</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    @table[name]</div><div class='del'>-  end</div><div class='del'>-  #</div><div class='del'>-  # Stores an individual Ruby object or a hierarchy of Ruby objects in the data</div><div class='del'>-  # store file under the root _name_.  Assigning to a _name_ already in the data</div><div class='del'>-  # store clobbers the old data.</div><div class='del'>-  # </div><div class='del'>-  # == Example:</div><div class='del'>-  # </div><div class='del'>-  #  require "pstore"</div><div class='del'>-  #  </div><div class='del'>-  #  store = PStore.new("data_file.pstore")</div><div class='del'>-  #  store.transaction do  # begin transaction</div><div class='del'>-  #    # load some data into the store...</div><div class='del'>-  #    store[:single_object] = "My data..."</div><div class='del'>-  #    store[:obj_heirarchy] = { "Kev Jackson" =&gt; ["rational.rb", "pstore.rb"],</div><div class='del'>-  #                              "James Gray"  =&gt; ["erb.rb", "pstore.rb"] }</div><div class='del'>-  #  end                   # commit changes to data store file</div><div class='del'>-  # </div><div class='del'>-  # *WARNING*:  This method is only valid in a PStore#transaction and it cannot</div><div class='del'>-  # be read-only.  It will raise PStore::Error if called at any other time.</div><div class='del'>-  #</div><div class='del'>-  def []=(name, value)</div><div class='del'>-    in_transaction_wr()</div><div class='del'>-    @table[name] = value</div><div class='del'>-  end</div><div class='del'>-  #</div><div class='del'>-  # Removes an object hierarchy from the data store, by _name_.</div><div class='del'>-  # </div><div class='del'>-  # *WARNING*:  This method is only valid in a PStore#transaction and it cannot</div><div class='del'>-  # be read-only.  It will raise PStore::Error if called at any other time.</div><div class='del'>-  #</div><div class='del'>-  def delete(name)</div><div class='del'>-    in_transaction_wr()</div><div class='del'>-    @table.delete name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the names of all object hierarchies currently in the store.</div><div class='del'>-  # </div><div class='del'>-  # *WARNING*:  This method is only valid in a PStore#transaction.  It will</div><div class='del'>-  # raise PStore::Error if called at any other time.</div><div class='del'>-  #</div><div class='del'>-  def roots</div><div class='del'>-    in_transaction</div><div class='del'>-    @table.keys</div><div class='del'>-  end</div><div class='del'>-  #</div><div class='del'>-  # Returns true if the supplied _name_ is currently in the data store.</div><div class='del'>-  # </div><div class='del'>-  # *WARNING*:  This method is only valid in a PStore#transaction.  It will</div><div class='del'>-  # raise PStore::Error if called at any other time.</div><div class='del'>-  #</div><div class='del'>-  def root?(name)</div><div class='del'>-    in_transaction</div><div class='del'>-    @table.key? name</div><div class='del'>-  end</div><div class='del'>-  # Returns the path to the data store file.</div><div class='del'>-  def path</div><div class='del'>-    @filename</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Ends the current PStore#transaction, committing any changes to the data</div><div class='del'>-  # store immediately.</div><div class='del'>-  # </div><div class='del'>-  # == Example:</div><div class='del'>-  # </div><div class='del'>-  #  require "pstore"</div><div class='del'>-  #   </div><div class='del'>-  #  store = PStore.new("data_file.pstore")</div><div class='del'>-  #  store.transaction do  # begin transaction</div><div class='del'>-  #    # load some data into the store...</div><div class='del'>-  #    store[:one] = 1</div><div class='del'>-  #    store[:two] = 2</div><div class='del'>-  #  </div><div class='del'>-  #    store.commit        # end transaction here, committing changes</div><div class='del'>-  #  </div><div class='del'>-  #    store[:three] = 3   # this change is never reached</div><div class='del'>-  #  end</div><div class='del'>-  # </div><div class='del'>-  # *WARNING*:  This method is only valid in a PStore#transaction.  It will</div><div class='del'>-  # raise PStore::Error if called at any other time.</div><div class='del'>-  #</div><div class='del'>-  def commit</div><div class='del'>-    in_transaction</div><div class='del'>-    @abort = false</div><div class='del'>-    throw :pstore_abort_transaction</div><div class='del'>-  end</div><div class='del'>-  #</div><div class='del'>-  # Ends the current PStore#transaction, discarding any changes to the data</div><div class='del'>-  # store.</div><div class='del'>-  # </div><div class='del'>-  # == Example:</div><div class='del'>-  # </div><div class='del'>-  #  require "pstore"</div><div class='del'>-  #   </div><div class='del'>-  #  store = PStore.new("data_file.pstore")</div><div class='del'>-  #  store.transaction do  # begin transaction</div><div class='del'>-  #    store[:one] = 1     # this change is not applied, see below...</div><div class='del'>-  #    store[:two] = 2     # this change is not applied, see below...</div><div class='del'>-  #  </div><div class='del'>-  #    store.abort         # end transaction here, discard all changes</div><div class='del'>-  #  </div><div class='del'>-  #    store[:three] = 3   # this change is never reached</div><div class='del'>-  #  end</div><div class='del'>-  # </div><div class='del'>-  # *WARNING*:  This method is only valid in a PStore#transaction.  It will</div><div class='del'>-  # raise PStore::Error if called at any other time.</div><div class='del'>-  #</div><div class='del'>-  def abort</div><div class='del'>-    in_transaction</div><div class='del'>-    @abort = true</div><div class='del'>-    throw :pstore_abort_transaction</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Opens a new transaction for the data store.  Code executed inside a block</div><div class='del'>-  # passed to this method may read and write data to and from the data store </div><div class='del'>-  # file.</div><div class='del'>-  # </div><div class='del'>-  # At the end of the block, changes are committed to the data store</div><div class='del'>-  # automatically.  You may exit the transaction early with a call to either </div><div class='del'>-  # PStore#commit or PStore#abort.  See those methods for details about how</div><div class='del'>-  # changes are handled.  Raising an uncaught Exception in the block is </div><div class='del'>-  # equivalent to calling PStore#abort.</div><div class='del'>-  # </div><div class='del'>-  # If _read_only_ is set to +true+, you will only be allowed to read from the</div><div class='del'>-  # data store during the transaction and any attempts to change the data will</div><div class='del'>-  # raise a PStore::Error.</div><div class='del'>-  # </div><div class='del'>-  # Note that PStore does not support nested transactions.</div><div class='del'>-  #</div><div class='del'>-  def transaction(read_only=false)  # :yields:  pstore</div><div class='del'>-    raise PStore::Error, "nested transaction" if @transaction</div><div class='del'>-    begin</div><div class='del'>-      @rdonly = read_only</div><div class='del'>-      @abort = false</div><div class='del'>-      @transaction = true</div><div class='del'>-      value = nil</div><div class='del'>-      new_file = @filename + ".new"</div><div class='del'>-</div><div class='del'>-      content = nil</div><div class='del'>-      unless read_only</div><div class='del'>-        file = File.open(@filename, RDWR_ACCESS)</div><div class='del'>-        file.flock(File::LOCK_EX)</div><div class='del'>-        commit_new(file) if FileTest.exist?(new_file)</div><div class='del'>-        content = file.read()</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          file = File.open(@filename, RD_ACCESS)</div><div class='del'>-          file.flock(File::LOCK_SH)</div><div class='del'>-          content = (File.open(new_file, RD_ACCESS) {|n| n.read} rescue file.read())</div><div class='del'>-        rescue Errno::ENOENT</div><div class='del'>-          content = ""</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if content != ""</div><div class='del'>-	@table = load(content)</div><div class='del'>-        if !read_only</div><div class='del'>-          size = content.size</div><div class='del'>-          md5 = Digest::MD5.digest(content)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-	@table = {}</div><div class='del'>-      end</div><div class='del'>-      content = nil		# unreference huge data</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-	catch(:pstore_abort_transaction) do</div><div class='del'>-	  value = yield(self)</div><div class='del'>-	end</div><div class='del'>-      rescue Exception</div><div class='del'>-	@abort = true</div><div class='del'>-	raise</div><div class='del'>-      ensure</div><div class='del'>-	if !read_only and !@abort</div><div class='del'>-          tmp_file = @filename + ".tmp"</div><div class='del'>-	  content = dump(@table)</div><div class='del'>-	  if !md5 || size != content.size || md5 != Digest::MD5.digest(content)</div><div class='del'>-            File.open(tmp_file, WR_ACCESS) {|t| t.write(content)}</div><div class='del'>-            File.rename(tmp_file, new_file)</div><div class='del'>-            commit_new(file)</div><div class='del'>-          end</div><div class='del'>-          content = nil		# unreference huge data</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    ensure</div><div class='del'>-      @table = nil</div><div class='del'>-      @transaction = false</div><div class='del'>-      file.close if file</div><div class='del'>-    end</div><div class='del'>-    value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This method is just a wrapped around Marshal.dump.</div><div class='del'>-  def dump(table)  # :nodoc:</div><div class='del'>-    Marshal::dump(table)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This method is just a wrapped around Marshal.load.</div><div class='del'>-  def load(content)  # :nodoc:</div><div class='del'>-    Marshal::load(content)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # This method is just a wrapped around Marshal.load.</div><div class='del'>-  def load_file(file)  # :nodoc:</div><div class='del'>-    Marshal::load(file)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private</div><div class='del'>-  # Commits changes to the data store file.</div><div class='del'>-  def commit_new(f)</div><div class='del'>-    f.truncate(0)</div><div class='del'>-    f.rewind</div><div class='del'>-    new_file = @filename + ".new"</div><div class='del'>-    File.open(new_file, RD_ACCESS) do |nf|</div><div class='del'>-      FileUtils.copy_stream(nf, f)</div><div class='del'>-    end</div><div class='del'>-    File.unlink(new_file)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# :enddoc:</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  db = PStore.new("/tmp/foo")</div><div class='del'>-  db.transaction do</div><div class='del'>-    p db.roots</div><div class='del'>-    ary = db["root"] = [1,2,3,4]</div><div class='del'>-    ary[1] = [1,1.5]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  1000.times do</div><div class='del'>-    db.transaction do</div><div class='del'>-      db["root"][0] += 1</div><div class='del'>-      p db["root"][0]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  db.transaction(true) do</div><div class='del'>-    p db["root"]</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/racc/parser.rb b/lib/racc/parser.rb<br/>deleted file mode 100644<br/>index a7408dd00a..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/racc/parser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/racc/parser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,442 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# $originalId: parser.rb,v 1.8 2006/07/06 11:42:07 aamine Exp $</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 1999-2006 Minero Aoki</div><div class='del'>-#</div><div class='del'>-# This program is free software.</div><div class='del'>-# You can distribute/modify this program under the same terms of ruby.</div><div class='del'>-#</div><div class='del'>-# As a special exception, when this code is copied by Racc</div><div class='del'>-# into a Racc output file, you may use that output file</div><div class='del'>-# without restriction.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-unless defined?(NotImplementedError)</div><div class='del'>-  NotImplementedError = NotImplementError</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Racc</div><div class='del'>-  class ParseError &lt; StandardError; end</div><div class='del'>-end</div><div class='del'>-unless defined?(::ParseError)</div><div class='del'>-  ParseError = Racc::ParseError</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module Racc</div><div class='del'>-</div><div class='del'>-  unless defined?(Racc_No_Extentions)</div><div class='del'>-    Racc_No_Extentions = false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Parser</div><div class='del'>-</div><div class='del'>-    Racc_Runtime_Version = '1.4.5'</div><div class='del'>-    Racc_Runtime_Revision = '$originalRevision: 1.8 $'.split[1]</div><div class='del'>-</div><div class='del'>-    Racc_Runtime_Core_Version_R = '1.4.5'</div><div class='del'>-    Racc_Runtime_Core_Revision_R = '$originalRevision: 1.8 $'.split[1]</div><div class='del'>-    begin</div><div class='del'>-      require 'racc/cparse'</div><div class='del'>-    # Racc_Runtime_Core_Version_C  = (defined in extention)</div><div class='del'>-      Racc_Runtime_Core_Revision_C = Racc_Runtime_Core_Id_C.split[2]</div><div class='del'>-      unless new.respond_to?(:_racc_do_parse_c, true)</div><div class='del'>-        raise LoadError, 'old cparse.so'</div><div class='del'>-      end</div><div class='del'>-      if Racc_No_Extentions</div><div class='del'>-        raise LoadError, 'selecting ruby version of racc runtime core'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      Racc_Main_Parsing_Routine    = :_racc_do_parse_c</div><div class='del'>-      Racc_YY_Parse_Method         = :_racc_yyparse_c</div><div class='del'>-      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_C</div><div class='del'>-      Racc_Runtime_Core_Revision   = Racc_Runtime_Core_Revision_C</div><div class='del'>-      Racc_Runtime_Type            = 'c'</div><div class='del'>-    rescue LoadError</div><div class='del'>-      Racc_Main_Parsing_Routine    = :_racc_do_parse_rb</div><div class='del'>-      Racc_YY_Parse_Method         = :_racc_yyparse_rb</div><div class='del'>-      Racc_Runtime_Core_Version    = Racc_Runtime_Core_Version_R</div><div class='del'>-      Racc_Runtime_Core_Revision   = Racc_Runtime_Core_Revision_R</div><div class='del'>-      Racc_Runtime_Type            = 'ruby'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Parser.racc_runtime_type</div><div class='del'>-      Racc_Runtime_Type</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def _racc_setup</div><div class='del'>-      @yydebug = false unless self.class::Racc_debug_parser</div><div class='del'>-      @yydebug = false unless defined?(@yydebug)</div><div class='del'>-      if @yydebug</div><div class='del'>-        @racc_debug_out = $stderr unless defined?(@racc_debug_out)</div><div class='del'>-        @racc_debug_out ||= $stderr</div><div class='del'>-      end</div><div class='del'>-      arg = self.class::Racc_arg</div><div class='del'>-      arg[13] = true if arg.size &lt; 14</div><div class='del'>-      arg</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _racc_init_sysvars</div><div class='del'>-      @racc_state  = [0]</div><div class='del'>-      @racc_tstack = []</div><div class='del'>-      @racc_vstack = []</div><div class='del'>-</div><div class='del'>-      @racc_t = nil</div><div class='del'>-      @racc_val = nil</div><div class='del'>-</div><div class='del'>-      @racc_read_next = true</div><div class='del'>-</div><div class='del'>-      @racc_user_yyerror = false</div><div class='del'>-      @racc_error_status = 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ###</div><div class='del'>-    ### do_parse</div><div class='del'>-    ###</div><div class='del'>-</div><div class='del'>-    def do_parse</div><div class='del'>-      __send__(Racc_Main_Parsing_Routine, _racc_setup(), false)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def next_token</div><div class='del'>-      raise NotImplementedError, "#{self.class}\#next_token is not defined"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _racc_do_parse_rb(arg, in_debug)</div><div class='del'>-      action_table, action_check, action_default, action_pointer,</div><div class='del'>-      goto_table,   goto_check,   goto_default,   goto_pointer,</div><div class='del'>-      nt_base,      reduce_table, token_table,    shift_n,</div><div class='del'>-      reduce_n,     use_result,   * = arg</div><div class='del'>-</div><div class='del'>-      _racc_init_sysvars</div><div class='del'>-      tok = act = i = nil</div><div class='del'>-      nerr = 0</div><div class='del'>-</div><div class='del'>-      catch(:racc_end_parse) {</div><div class='del'>-        while true</div><div class='del'>-          if i = action_pointer[@racc_state[-1]]</div><div class='del'>-            if @racc_read_next</div><div class='del'>-              if @racc_t != 0   # not EOF</div><div class='del'>-                tok, @racc_val = next_token()</div><div class='del'>-                unless tok      # EOF</div><div class='del'>-                  @racc_t = 0</div><div class='del'>-                else</div><div class='del'>-                  @racc_t = (token_table[tok] or 1)   # error token</div><div class='del'>-                end</div><div class='del'>-                racc_read_token(@racc_t, tok, @racc_val) if @yydebug</div><div class='del'>-                @racc_read_next = false</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            i += @racc_t</div><div class='del'>-            unless i &gt;= 0 and</div><div class='del'>-                   act = action_table[i] and</div><div class='del'>-                   action_check[i] == @racc_state[-1]</div><div class='del'>-              act = action_default[@racc_state[-1]]</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            act = action_default[@racc_state[-1]]</div><div class='del'>-          end</div><div class='del'>-          while act = _racc_evalact(act, arg)</div><div class='del'>-            ;</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'>-    ### yyparse</div><div class='del'>-    ###</div><div class='del'>-</div><div class='del'>-    def yyparse(recv, mid)</div><div class='del'>-      __send__(Racc_YY_Parse_Method, recv, mid, _racc_setup(), true)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _racc_yyparse_rb(recv, mid, arg, c_debug)</div><div class='del'>-      action_table, action_check, action_default, action_pointer,</div><div class='del'>-      goto_table,   goto_check,   goto_default,   goto_pointer,</div><div class='del'>-      nt_base,      reduce_table, token_table,    shift_n,</div><div class='del'>-      reduce_n,     use_result,   * = arg</div><div class='del'>-</div><div class='del'>-      _racc_init_sysvars</div><div class='del'>-      tok = nil</div><div class='del'>-      act = nil</div><div class='del'>-      i = nil</div><div class='del'>-      nerr = 0</div><div class='del'>-</div><div class='del'>-      catch(:racc_end_parse) {</div><div class='del'>-        until i = action_pointer[@racc_state[-1]]</div><div class='del'>-          while act = _racc_evalact(action_default[@racc_state[-1]], arg)</div><div class='del'>-            ;</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        recv.__send__(mid) do |tok, val|</div><div class='del'>-          unless tok</div><div class='del'>-            @racc_t = 0</div><div class='del'>-          else</div><div class='del'>-            @racc_t = (token_table[tok] or 1)   # error token</div><div class='del'>-          end</div><div class='del'>-          @racc_val = val</div><div class='del'>-          @racc_read_next = false</div><div class='del'>-</div><div class='del'>-          i += @racc_t</div><div class='del'>-          unless i &gt;= 0 and</div><div class='del'>-                 act = action_table[i] and</div><div class='del'>-                 action_check[i] == @racc_state[-1]</div><div class='del'>-            act = action_default[@racc_state[-1]]</div><div class='del'>-          end</div><div class='del'>-          while act = _racc_evalact(act, arg)</div><div class='del'>-            ;</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          while not (i = action_pointer[@racc_state[-1]]) or</div><div class='del'>-                not @racc_read_next or</div><div class='del'>-                @racc_t == 0   # $</div><div class='del'>-            unless i and i += @racc_t and</div><div class='del'>-                   i &gt;= 0 and</div><div class='del'>-                   act = action_table[i] and</div><div class='del'>-                   action_check[i] == @racc_state[-1]</div><div class='del'>-              act = action_default[@racc_state[-1]]</div><div class='del'>-            end</div><div class='del'>-            while act = _racc_evalact(act, arg)</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'>-    ###</div><div class='del'>-    ### common</div><div class='del'>-    ###</div><div class='del'>-</div><div class='del'>-    def _racc_evalact(act, arg)</div><div class='del'>-      action_table, action_check, action_default, action_pointer,</div><div class='del'>-      goto_table,   goto_check,   goto_default,   goto_pointer,</div><div class='del'>-      nt_base,      reduce_table, token_table,    shift_n,</div><div class='del'>-      reduce_n,     use_result,   * = arg</div><div class='del'>-      nerr = 0   # tmp</div><div class='del'>-</div><div class='del'>-      if act &gt; 0 and act &lt; shift_n</div><div class='del'>-        #</div><div class='del'>-        # shift</div><div class='del'>-        #</div><div class='del'>-        if @racc_error_status &gt; 0</div><div class='del'>-          @racc_error_status -= 1 unless @racc_t == 1   # error token</div><div class='del'>-        end</div><div class='del'>-        @racc_vstack.push @racc_val</div><div class='del'>-        @racc_state.push act</div><div class='del'>-        @racc_read_next = true</div><div class='del'>-        if @yydebug</div><div class='del'>-          @racc_tstack.push @racc_t</div><div class='del'>-          racc_shift @racc_t, @racc_tstack, @racc_vstack</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      elsif act &lt; 0 and act &gt; -reduce_n</div><div class='del'>-        #</div><div class='del'>-        # reduce</div><div class='del'>-        #</div><div class='del'>-        code = catch(:racc_jump) {</div><div class='del'>-          @racc_state.push _racc_do_reduce(arg, act)</div><div class='del'>-          false</div><div class='del'>-        }</div><div class='del'>-        if code</div><div class='del'>-          case code</div><div class='del'>-          when 1 # yyerror</div><div class='del'>-            @racc_user_yyerror = true   # user_yyerror</div><div class='del'>-            return -reduce_n</div><div class='del'>-          when 2 # yyaccept</div><div class='del'>-            return shift_n</div><div class='del'>-          else</div><div class='del'>-            raise '[Racc Bug] unknown jump code'</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      elsif act == shift_n</div><div class='del'>-        #</div><div class='del'>-        # accept</div><div class='del'>-        #</div><div class='del'>-        racc_accept if @yydebug</div><div class='del'>-        throw :racc_end_parse, @racc_vstack[0]</div><div class='del'>-</div><div class='del'>-      elsif act == -reduce_n</div><div class='del'>-        #</div><div class='del'>-        # error</div><div class='del'>-        #</div><div class='del'>-        case @racc_error_status</div><div class='del'>-        when 0</div><div class='del'>-          unless arg[21]    # user_yyerror</div><div class='del'>-            nerr += 1</div><div class='del'>-            on_error @racc_t, @racc_val, @racc_vstack</div><div class='del'>-          end</div><div class='del'>-        when 3</div><div class='del'>-          if @racc_t == 0   # is $</div><div class='del'>-            throw :racc_end_parse, nil</div><div class='del'>-          end</div><div class='del'>-          @racc_read_next = true</div><div class='del'>-        end</div><div class='del'>-        @racc_user_yyerror = false</div><div class='del'>-        @racc_error_status = 3</div><div class='del'>-        while true</div><div class='del'>-          if i = action_pointer[@racc_state[-1]]</div><div class='del'>-            i += 1   # error token</div><div class='del'>-            if  i &gt;= 0 and</div><div class='del'>-                (act = action_table[i]) and</div><div class='del'>-                action_check[i] == @racc_state[-1]</div><div class='del'>-              break</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          throw :racc_end_parse, nil if @racc_state.size &lt;= 1</div><div class='del'>-          @racc_state.pop</div><div class='del'>-          @racc_vstack.pop</div><div class='del'>-          if @yydebug</div><div class='del'>-            @racc_tstack.pop</div><div class='del'>-            racc_e_pop @racc_state, @racc_tstack, @racc_vstack</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        return act</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        raise "[Racc Bug] unknown action #{act.inspect}"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      racc_next_state(@racc_state[-1], @racc_state) if @yydebug</div><div class='del'>-</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def _racc_do_reduce(arg, act)</div><div class='del'>-      action_table, action_check, action_default, action_pointer,</div><div class='del'>-      goto_table,   goto_check,   goto_default,   goto_pointer,</div><div class='del'>-      nt_base,      reduce_table, token_table,    shift_n,</div><div class='del'>-      reduce_n,     use_result,   * = arg</div><div class='del'>-      state = @racc_state</div><div class='del'>-      vstack = @racc_vstack</div><div class='del'>-      tstack = @racc_tstack</div><div class='del'>-</div><div class='del'>-      i = act * -3</div><div class='del'>-      len       = reduce_table[i]</div><div class='del'>-      reduce_to = reduce_table[i+1]</div><div class='del'>-      method_id = reduce_table[i+2]</div><div class='del'>-      void_array = []</div><div class='del'>-</div><div class='del'>-      tmp_t = tstack[-len, len] if @yydebug</div><div class='del'>-      tmp_v = vstack[-len, len]</div><div class='del'>-      tstack[-len, len] = void_array if @yydebug</div><div class='del'>-      vstack[-len, len] = void_array</div><div class='del'>-      state[-len, len]  = void_array</div><div class='del'>-</div><div class='del'>-      # tstack must be updated AFTER method call</div><div class='del'>-      if use_result</div><div class='del'>-        vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0])</div><div class='del'>-      else</div><div class='del'>-        vstack.push __send__(method_id, tmp_v, vstack)</div><div class='del'>-      end</div><div class='del'>-      tstack.push reduce_to</div><div class='del'>-</div><div class='del'>-      racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug</div><div class='del'>-</div><div class='del'>-      k1 = reduce_to - nt_base</div><div class='del'>-      if i = goto_pointer[k1]</div><div class='del'>-        i += state[-1]</div><div class='del'>-        if i &gt;= 0 and (curstate = goto_table[i]) and goto_check[i] == k1</div><div class='del'>-          return curstate</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      goto_default[k1]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def on_error(t, val, vstack)</div><div class='del'>-      raise ParseError, sprintf("\nparse error on value %s (%s)",</div><div class='del'>-                                val.inspect, token_to_str(t) || '?')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def yyerror</div><div class='del'>-      throw :racc_jump, 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def yyaccept</div><div class='del'>-      throw :racc_jump, 2</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def yyerrok</div><div class='del'>-      @racc_error_status = 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # for debugging output</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def racc_read_token(t, tok, val)</div><div class='del'>-      @racc_debug_out.print 'read    '</div><div class='del'>-      @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') '</div><div class='del'>-      @racc_debug_out.puts val.inspect</div><div class='del'>-      @racc_debug_out.puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def racc_shift(tok, tstack, vstack)</div><div class='del'>-      @racc_debug_out.puts "shift   #{racc_token2str tok}"</div><div class='del'>-      racc_print_stacks tstack, vstack</div><div class='del'>-      @racc_debug_out.puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def racc_reduce(toks, sim, tstack, vstack)</div><div class='del'>-      out = @racc_debug_out</div><div class='del'>-      out.print 'reduce '</div><div class='del'>-      if toks.empty?</div><div class='del'>-        out.print ' &lt;none&gt;'</div><div class='del'>-      else</div><div class='del'>-        toks.each {|t| out.print ' ', racc_token2str(t) }</div><div class='del'>-      end</div><div class='del'>-      out.puts " --&gt; #{racc_token2str(sim)}"</div><div class='del'>-          </div><div class='del'>-      racc_print_stacks tstack, vstack</div><div class='del'>-      @racc_debug_out.puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def racc_accept</div><div class='del'>-      @racc_debug_out.puts 'accept'</div><div class='del'>-      @racc_debug_out.puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def racc_e_pop(state, tstack, vstack)</div><div class='del'>-      @racc_debug_out.puts 'error recovering mode: pop token'</div><div class='del'>-      racc_print_states state</div><div class='del'>-      racc_print_stacks tstack, vstack</div><div class='del'>-      @racc_debug_out.puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def racc_next_state(curstate, state)</div><div class='del'>-      @racc_debug_out.puts  "goto    #{curstate}"</div><div class='del'>-      racc_print_states state</div><div class='del'>-      @racc_debug_out.puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def racc_print_stacks(t, v)</div><div class='del'>-      out = @racc_debug_out</div><div class='del'>-      out.print '        ['</div><div class='del'>-      t.each_index do |i|</div><div class='del'>-        out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')'</div><div class='del'>-      end</div><div class='del'>-      out.puts ' ]'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def racc_print_states(s)</div><div class='del'>-      out = @racc_debug_out</div><div class='del'>-      out.print '        ['</div><div class='del'>-      s.each {|st| out.print ' ', st }</div><div class='del'>-      out.puts ' ]'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def racc_token2str(tok)</div><div class='del'>-      self.class::Racc_token_to_s_table[tok] or</div><div class='del'>-          raise "[Racc Bug] can't convert token #{tok} to string"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def token_to_str(t)</div><div class='del'>-      self.class::Racc_token_to_s_table[t]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rational.rb b/lib/rational.rb<br/>deleted file mode 100644<br/>index 69a3b76bf1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rational.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rational.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,564 +0,0 @@</div><div class='del'>-#</div><div class='del'>-#   rational.rb -</div><div class='del'>-#       $Release Version: 0.5 $</div><div class='del'>-#       $Revision: 1.7 $</div><div class='del'>-#       $Date: 1999/08/24 12:49:28 $</div><div class='del'>-#       by Keiju ISHITSUKA(SHL Japan Inc.)</div><div class='del'>-#</div><div class='del'>-# Documentation by Kevin Jackson and Gavin Sinclair.</div><div class='del'>-# </div><div class='del'>-# When you &lt;tt&gt;require 'rational'&lt;/tt&gt;, all interactions between numbers</div><div class='del'>-# potentially return a rational result.  For example:</div><div class='del'>-#</div><div class='del'>-#   1.quo(2)              # -&gt; 0.5</div><div class='del'>-#   require 'rational'</div><div class='del'>-#   1.quo(2)              # -&gt; Rational(1,2)</div><div class='del'>-# </div><div class='del'>-# See Rational for full documentation.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Creates a Rational number (i.e. a fraction).  +a+ and +b+ should be Integers:</div><div class='del'>-# </div><div class='del'>-#   Rational(1,3)           # -&gt; 1/3</div><div class='del'>-#</div><div class='del'>-# Note: trying to construct a Rational with floating point or real values</div><div class='del'>-# produces errors:</div><div class='del'>-#</div><div class='del'>-#   Rational(1.1, 2.3)      # -&gt; NoMethodError</div><div class='del'>-#</div><div class='del'>-def Rational(a, b = 1)</div><div class='del'>-  if a.kind_of?(Rational) &amp;&amp; b == 1</div><div class='del'>-    a</div><div class='del'>-  else</div><div class='del'>-    Rational.reduce(a, b)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-#</div><div class='del'>-# Rational implements a rational class for numbers.</div><div class='del'>-#</div><div class='del'>-# &lt;em&gt;A rational number is a number that can be expressed as a fraction p/q</div><div class='del'>-# where p and q are integers and q != 0.  A rational number p/q is said to have</div><div class='del'>-# numerator p and denominator q.  Numbers that are not rational are called</div><div class='del'>-# irrational numbers.&lt;/em&gt; (http://mathworld.wolfram.com/RationalNumber.html)</div><div class='del'>-#</div><div class='del'>-# To create a Rational Number:</div><div class='del'>-#   Rational(a,b)             # -&gt; a/b</div><div class='del'>-#   Rational.new!(a,b)        # -&gt; a/b</div><div class='del'>-#</div><div class='del'>-# Examples:</div><div class='del'>-#   Rational(5,6)             # -&gt; 5/6</div><div class='del'>-#   Rational(5)               # -&gt; 5/1</div><div class='del'>-# </div><div class='del'>-# Rational numbers are reduced to their lowest terms:</div><div class='del'>-#   Rational(6,10)            # -&gt; 3/5</div><div class='del'>-#</div><div class='del'>-# But not if you use the unusual method "new!":</div><div class='del'>-#   Rational.new!(6,10)       # -&gt; 6/10</div><div class='del'>-#</div><div class='del'>-# Division by zero is obviously not allowed:</div><div class='del'>-#   Rational(3,0)             # -&gt; ZeroDivisionError</div><div class='del'>-#</div><div class='del'>-class Rational &lt; Numeric</div><div class='del'>-  @RCS_ID='-$Id: rational.rb,v 1.7 1999/08/24 12:49:28 keiju Exp keiju $-'</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Reduces the given numerator and denominator to their lowest terms.  Use</div><div class='del'>-  # Rational() instead.</div><div class='del'>-  #</div><div class='del'>-  def Rational.reduce(num, den = 1)</div><div class='del'>-    raise ZeroDivisionError, "denominator is zero" if den == 0</div><div class='del'>-</div><div class='del'>-    if den &lt; 0</div><div class='del'>-      num = -num</div><div class='del'>-      den = -den</div><div class='del'>-    end</div><div class='del'>-    gcd = num.gcd(den)</div><div class='del'>-    num = num.div(gcd)</div><div class='del'>-    den = den.div(gcd)</div><div class='del'>-    if den == 1 &amp;&amp; defined?(Unify)</div><div class='del'>-      num</div><div class='del'>-    else</div><div class='del'>-      new!(num, den)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Implements the constructor.  This method does not reduce to lowest terms or</div><div class='del'>-  # check for division by zero.  Therefore #Rational() should be preferred in</div><div class='del'>-  # normal use.</div><div class='del'>-  #</div><div class='del'>-  def Rational.new!(num, den = 1)</div><div class='del'>-    new(num, den)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  private_class_method :new</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # This method is actually private.</div><div class='del'>-  #</div><div class='del'>-  def initialize(num, den)</div><div class='del'>-    if den &lt; 0</div><div class='del'>-      num = -num</div><div class='del'>-      den = -den</div><div class='del'>-    end</div><div class='del'>-    if num.kind_of?(Integer) and den.kind_of?(Integer)</div><div class='del'>-      @numerator = num</div><div class='del'>-      @denominator = den</div><div class='del'>-    else</div><div class='del'>-      @numerator = num.to_i</div><div class='del'>-      @denominator = den.to_i</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the addition of this value and +a+.</div><div class='del'>-  #</div><div class='del'>-  # Examples:</div><div class='del'>-  #   r = Rational(3,4)      # -&gt; Rational(3,4)</div><div class='del'>-  #   r + 1                  # -&gt; Rational(7,4)</div><div class='del'>-  #   r + 0.5                # -&gt; 1.25</div><div class='del'>-  #</div><div class='del'>-  def + (a)</div><div class='del'>-    if a.kind_of?(Rational)</div><div class='del'>-      num = @numerator * a.denominator</div><div class='del'>-      num_a = a.numerator * @denominator</div><div class='del'>-      Rational(num + num_a, @denominator * a.denominator)</div><div class='del'>-    elsif a.kind_of?(Integer)</div><div class='del'>-      self + Rational.new!(a, 1)</div><div class='del'>-    elsif a.kind_of?(Float)</div><div class='del'>-      Float(self) + a</div><div class='del'>-    else</div><div class='del'>-      x, y = a.coerce(self)</div><div class='del'>-      x + y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the difference of this value and +a+.</div><div class='del'>-  # subtracted.</div><div class='del'>-  #</div><div class='del'>-  # Examples:</div><div class='del'>-  #   r = Rational(3,4)    # -&gt; Rational(3,4)</div><div class='del'>-  #   r - 1                # -&gt; Rational(-1,4)</div><div class='del'>-  #   r - 0.5              # -&gt; 0.25</div><div class='del'>-  #</div><div class='del'>-  def - (a)</div><div class='del'>-    if a.kind_of?(Rational)</div><div class='del'>-      num = @numerator * a.denominator</div><div class='del'>-      num_a = a.numerator * @denominator</div><div class='del'>-      Rational(num - num_a, @denominator*a.denominator)</div><div class='del'>-    elsif a.kind_of?(Integer)</div><div class='del'>-      self - Rational.new!(a, 1)</div><div class='del'>-    elsif a.kind_of?(Float)</div><div class='del'>-      Float(self) - a</div><div class='del'>-    else</div><div class='del'>-      x, y = a.coerce(self)</div><div class='del'>-      x - y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the product of this value and +a+.</div><div class='del'>-  #</div><div class='del'>-  # Examples:</div><div class='del'>-  #   r = Rational(3,4)    # -&gt; Rational(3,4)</div><div class='del'>-  #   r * 2                # -&gt; Rational(3,2)</div><div class='del'>-  #   r * 4                # -&gt; Rational(3,1)</div><div class='del'>-  #   r * 0.5              # -&gt; 0.375</div><div class='del'>-  #   r * Rational(1,2)    # -&gt; Rational(3,8)</div><div class='del'>-  #</div><div class='del'>-  def * (a)</div><div class='del'>-    if a.kind_of?(Rational)</div><div class='del'>-      num = @numerator * a.numerator</div><div class='del'>-      den = @denominator * a.denominator</div><div class='del'>-      Rational(num, den)</div><div class='del'>-    elsif a.kind_of?(Integer)</div><div class='del'>-      self * Rational.new!(a, 1)</div><div class='del'>-    elsif a.kind_of?(Float)</div><div class='del'>-      Float(self) * a</div><div class='del'>-    else</div><div class='del'>-      x, y = a.coerce(self)</div><div class='del'>-      x * y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the quotient of this value and +a+.</div><div class='del'>-  #   r = Rational(3,4)    # -&gt; Rational(3,4)</div><div class='del'>-  #   r / 2                # -&gt; Rational(3,8)</div><div class='del'>-  #   r / 2.0              # -&gt; 0.375</div><div class='del'>-  #   r / Rational(1,2)    # -&gt; Rational(3,2)</div><div class='del'>-  #</div><div class='del'>-  def / (a)</div><div class='del'>-    if a.kind_of?(Rational)</div><div class='del'>-      num = @numerator * a.denominator</div><div class='del'>-      den = @denominator * a.numerator</div><div class='del'>-      Rational(num, den)</div><div class='del'>-    elsif a.kind_of?(Integer)</div><div class='del'>-      raise ZeroDivisionError, "division by zero" if a == 0</div><div class='del'>-      self / Rational.new!(a, 1)</div><div class='del'>-    elsif a.kind_of?(Float)</div><div class='del'>-      Float(self) / a</div><div class='del'>-    else</div><div class='del'>-      x, y = a.coerce(self)</div><div class='del'>-      x / y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns this value raised to the given power.</div><div class='del'>-  #</div><div class='del'>-  # Examples:</div><div class='del'>-  #   r = Rational(3,4)    # -&gt; Rational(3,4)</div><div class='del'>-  #   r ** 2               # -&gt; Rational(9,16)</div><div class='del'>-  #   r ** 2.0             # -&gt; 0.5625</div><div class='del'>-  #   r ** Rational(1,2)   # -&gt; 0.866025403784439</div><div class='del'>-  #</div><div class='del'>-  def ** (other)</div><div class='del'>-    if other.kind_of?(Rational)</div><div class='del'>-      Float(self) ** other</div><div class='del'>-    elsif other.kind_of?(Integer)</div><div class='del'>-      if other &gt; 0</div><div class='del'>-	num = @numerator ** other</div><div class='del'>-	den = @denominator ** other</div><div class='del'>-      elsif other &lt; 0</div><div class='del'>-	num = @denominator ** -other</div><div class='del'>-	den = @numerator ** -other</div><div class='del'>-      elsif other == 0</div><div class='del'>-	num = 1</div><div class='del'>-	den = 1</div><div class='del'>-      end</div><div class='del'>-      Rational.new!(num, den)</div><div class='del'>-    elsif other.kind_of?(Float)</div><div class='del'>-      Float(self) ** other</div><div class='del'>-    else</div><div class='del'>-      x, y = other.coerce(self)</div><div class='del'>-      x ** y</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def div(other)</div><div class='del'>-    (self / other).floor</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the remainder when this value is divided by +other+.</div><div class='del'>-  #</div><div class='del'>-  # Examples:</div><div class='del'>-  #   r = Rational(7,4)    # -&gt; Rational(7,4)</div><div class='del'>-  #   r % Rational(1,2)    # -&gt; Rational(1,4)</div><div class='del'>-  #   r % 1                # -&gt; Rational(3,4)</div><div class='del'>-  #   r % Rational(1,7)    # -&gt; Rational(1,28)</div><div class='del'>-  #   r % 0.26             # -&gt; 0.19</div><div class='del'>-  #</div><div class='del'>-  def % (other)</div><div class='del'>-    value = (self / other).floor</div><div class='del'>-    return self - other * value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the quotient _and_ remainder.</div><div class='del'>-  #</div><div class='del'>-  # Examples:</div><div class='del'>-  #   r = Rational(7,4)        # -&gt; Rational(7,4)</div><div class='del'>-  #   r.divmod Rational(1,2)   # -&gt; [3, Rational(1,4)]</div><div class='del'>-  #</div><div class='del'>-  def divmod(other)</div><div class='del'>-    value = (self / other).floor</div><div class='del'>-    return value, self - other * value</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the absolute value.</div><div class='del'>-  #</div><div class='del'>-  def abs</div><div class='del'>-    if @numerator &gt; 0</div><div class='del'>-      self</div><div class='del'>-    else</div><div class='del'>-      Rational.new!(-@numerator, @denominator)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns +true+ iff this value is numerically equal to +other+.</div><div class='del'>-  #</div><div class='del'>-  # But beware:</div><div class='del'>-  #   Rational(1,2) == Rational(4,8)          # -&gt; true</div><div class='del'>-  #   Rational(1,2) == Rational.new!(4,8)     # -&gt; false</div><div class='del'>-  #</div><div class='del'>-  # Don't use Rational.new!</div><div class='del'>-  #</div><div class='del'>-  def == (other)</div><div class='del'>-    if other.kind_of?(Rational)</div><div class='del'>-      @numerator == other.numerator and @denominator == other.denominator</div><div class='del'>-    elsif other.kind_of?(Integer)</div><div class='del'>-      self == Rational.new!(other, 1)</div><div class='del'>-    elsif other.kind_of?(Float)</div><div class='del'>-      Float(self) == other</div><div class='del'>-    else</div><div class='del'>-      other == self</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Standard comparison operator.</div><div class='del'>-  #</div><div class='del'>-  def &lt;=&gt; (other)</div><div class='del'>-    if other.kind_of?(Rational)</div><div class='del'>-      num = @numerator * other.denominator</div><div class='del'>-      num_a = other.numerator * @denominator</div><div class='del'>-      v = num - num_a</div><div class='del'>-      if v &gt; 0</div><div class='del'>-	return 1</div><div class='del'>-      elsif v &lt; 0</div><div class='del'>-	return  -1</div><div class='del'>-      else</div><div class='del'>-	return 0</div><div class='del'>-      end</div><div class='del'>-    elsif other.kind_of?(Integer)</div><div class='del'>-      return self &lt;=&gt; Rational.new!(other, 1)</div><div class='del'>-    elsif other.kind_of?(Float)</div><div class='del'>-      return Float(self) &lt;=&gt; other</div><div class='del'>-    elsif defined? other.coerce</div><div class='del'>-      x, y = other.coerce(self)</div><div class='del'>-      return x &lt;=&gt; y</div><div class='del'>-    else</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def coerce(other)</div><div class='del'>-    if other.kind_of?(Float)</div><div class='del'>-      return other, self.to_f</div><div class='del'>-    elsif other.kind_of?(Integer)</div><div class='del'>-      return Rational.new!(other, 1), self</div><div class='del'>-    else</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Converts the rational to an Integer.  Not the _nearest_ integer, the</div><div class='del'>-  # truncated integer.  Study the following example carefully:</div><div class='del'>-  #   Rational(+7,4).to_i             # -&gt; 1</div><div class='del'>-  #   Rational(-7,4).to_i             # -&gt; -1</div><div class='del'>-  #   (-1.75).to_i                    # -&gt; -1</div><div class='del'>-  #</div><div class='del'>-  # In other words:</div><div class='del'>-  #   Rational(-7,4) == -1.75                 # -&gt; true</div><div class='del'>-  #   Rational(-7,4).to_i == (-1.75).to_i     # -&gt; true</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def floor()</div><div class='del'>-    @numerator.div(@denominator)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def ceil()</div><div class='del'>-    -((-@numerator).div(@denominator))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def truncate()</div><div class='del'>-    if @numerator &lt; 0</div><div class='del'>-      return -((-@numerator).div(@denominator))</div><div class='del'>-    end</div><div class='del'>-    @numerator.div(@denominator)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias_method :to_i, :truncate</div><div class='del'>-</div><div class='del'>-  def round()</div><div class='del'>-    if @numerator &lt; 0</div><div class='del'>-      num = -@numerator</div><div class='del'>-      num = num * 2 + @denominator</div><div class='del'>-      den = @denominator * 2</div><div class='del'>-      -(num.div(den))</div><div class='del'>-    else</div><div class='del'>-      num = @numerator * 2 + @denominator</div><div class='del'>-      den = @denominator * 2</div><div class='del'>-      num.div(den)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Converts the rational to a Float.</div><div class='del'>-  #</div><div class='del'>-  def to_f</div><div class='del'>-    @numerator.to_f/@denominator.to_f</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns a string representation of the rational number.</div><div class='del'>-  #</div><div class='del'>-  # Example:</div><div class='del'>-  #   Rational(3,4).to_s          #  "3/4"</div><div class='del'>-  #   Rational(8).to_s            #  "8"</div><div class='del'>-  #</div><div class='del'>-  def to_s</div><div class='del'>-    if @denominator == 1</div><div class='del'>-      @numerator.to_s</div><div class='del'>-    else</div><div class='del'>-      @numerator.to_s+"/"+@denominator.to_s</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns +self+.</div><div class='del'>-  #</div><div class='del'>-  def to_r</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns a reconstructable string representation:</div><div class='del'>-  #</div><div class='del'>-  #   Rational(5,8).inspect     # -&gt; "Rational(5, 8)"</div><div class='del'>-  #</div><div class='del'>-  def inspect</div><div class='del'>-    sprintf("Rational(%s, %s)", @numerator.inspect, @denominator.inspect)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns a hash code for the object.</div><div class='del'>-  #</div><div class='del'>-  def hash</div><div class='del'>-    @numerator.hash ^ @denominator.hash</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  attr :numerator</div><div class='del'>-  attr :denominator</div><div class='del'>-</div><div class='del'>-  private :initialize</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Integer</div><div class='del'>-  #</div><div class='del'>-  # In an integer, the value _is_ the numerator of its rational equivalent.</div><div class='del'>-  # Therefore, this method returns +self+.</div><div class='del'>-  #</div><div class='del'>-  def numerator</div><div class='del'>-    self</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # In an integer, the denominator is 1.  Therefore, this method returns 1.</div><div class='del'>-  #</div><div class='del'>-  def denominator</div><div class='del'>-    1</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns a Rational representation of this integer.</div><div class='del'>-  #</div><div class='del'>-  def to_r</div><div class='del'>-    Rational(self, 1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the &lt;em&gt;greatest common denominator&lt;/em&gt; of the two numbers (+self+</div><div class='del'>-  # and +n+).</div><div class='del'>-  #</div><div class='del'>-  # Examples:</div><div class='del'>-  #   72.gcd 168           # -&gt; 24</div><div class='del'>-  #   19.gcd 36            # -&gt; 1</div><div class='del'>-  #</div><div class='del'>-  # The result is positive, no matter the sign of the arguments.</div><div class='del'>-  #</div><div class='del'>-  def gcd(other)</div><div class='del'>-    min = self.abs</div><div class='del'>-    max = other.abs</div><div class='del'>-    while min &gt; 0</div><div class='del'>-      tmp = min</div><div class='del'>-      min = max % min</div><div class='del'>-      max = tmp</div><div class='del'>-    end</div><div class='del'>-    max</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the &lt;em&gt;lowest common multiple&lt;/em&gt; (LCM) of the two arguments</div><div class='del'>-  # (+self+ and +other+).</div><div class='del'>-  #</div><div class='del'>-  # Examples:</div><div class='del'>-  #   6.lcm 7        # -&gt; 42</div><div class='del'>-  #   6.lcm 9        # -&gt; 18</div><div class='del'>-  #</div><div class='del'>-  def lcm(other)</div><div class='del'>-    if self.zero? or other.zero?</div><div class='del'>-      0</div><div class='del'>-    else</div><div class='del'>-      (self.div(self.gcd(other)) * other).abs</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #</div><div class='del'>-  # Returns the GCD _and_ the LCM (see #gcd and #lcm) of the two arguments</div><div class='del'>-  # (+self+ and +other+).  This is more efficient than calculating them</div><div class='del'>-  # separately.</div><div class='del'>-  #</div><div class='del'>-  # Example:</div><div class='del'>-  #   6.gcdlcm 9     # -&gt; [3, 18]</div><div class='del'>-  #</div><div class='del'>-  def gcdlcm(other)</div><div class='del'>-    gcd = self.gcd(other)</div><div class='del'>-    if self.zero? or other.zero?</div><div class='del'>-      [gcd, 0]</div><div class='del'>-    else</div><div class='del'>-      [gcd, (self.div(gcd) * other).abs]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class Fixnum</div><div class='del'>-  remove_method :quo</div><div class='del'>-</div><div class='del'>-  # If Rational is defined, returns a Rational number instead of a Float.</div><div class='del'>-  def quo(other)</div><div class='del'>-    Rational.new!(self, 1) / other</div><div class='del'>-  end</div><div class='del'>-  alias rdiv quo</div><div class='del'>-</div><div class='del'>-  # Returns a Rational number if the result is in fact rational (i.e. +other+ &lt; 0).</div><div class='del'>-  def rpower (other)</div><div class='del'>-    if other &gt;= 0</div><div class='del'>-      self.power!(other)</div><div class='del'>-    else</div><div class='del'>-      Rational.new!(self, 1)**other</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'>-class Bignum</div><div class='del'>-  remove_method :quo</div><div class='del'>-</div><div class='del'>-  # If Rational is defined, returns a Rational number instead of a Float.</div><div class='del'>-  def quo(other)</div><div class='del'>-    Rational.new!(self, 1) / other</div><div class='del'>-  end</div><div class='del'>-  alias rdiv quo</div><div class='del'>-</div><div class='del'>-  # Returns a Rational number if the result is in fact rational (i.e. +other+ &lt; 0).</div><div class='del'>-  def rpower (other)</div><div class='del'>-    if other &gt;= 0</div><div class='del'>-      self.power!(other)</div><div class='del'>-    else</div><div class='del'>-      Rational.new!(self, 1)**other</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'>-unless defined? 1.power!</div><div class='del'>-  class Fixnum</div><div class='del'>-    alias power! **</div><div class='del'>-    alias ** rpower</div><div class='del'>-  end</div><div class='del'>-  class Bignum</div><div class='del'>-    alias power! **</div><div class='del'>-    alias ** rpower</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/README b/lib/rdoc/README<br/>deleted file mode 100644<br/>index 89ea0fbd3f..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/README?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/README</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,489 +0,0 @@</div><div class='del'>-= RDOC - Ruby Documentation System</div><div class='del'>-</div><div class='del'>-This package contains Rdoc and SimpleMarkup. Rdoc is an application</div><div class='del'>-that produces documentation for one or more Ruby source files. We work</div><div class='del'>-similarly to JavaDoc, parsing the source, and extracting the</div><div class='del'>-definition for classes, modules, and methods (along with includes and</div><div class='del'>-requires).  We associate with these optional documentation contained</div><div class='del'>-in the immediately preceding comment block, and then render the result</div><div class='del'>-using a pluggable output formatter. (Currently, HTML is the only</div><div class='del'>-supported format. Markup is a library that converts plain text into</div><div class='del'>-various output formats. The Markup library is used to interpret the</div><div class='del'>-comment blocks that Rdoc uses to document methods, classes, and so on.</div><div class='del'>-</div><div class='del'>-This library contains two packages, rdoc itself and a text markup</div><div class='del'>-library, 'markup'. </div><div class='del'>-</div><div class='del'>-== Roadmap</div><div class='del'>-</div><div class='del'>-* If you want to use Rdoc to create documentation for your Ruby source</div><div class='del'>-  files, read on.</div><div class='del'>-* If you want to include extensions written in C, see rdoc/parsers/parse_c.rb.</div><div class='del'>-* For information on the various markups available in comment</div><div class='del'>-  blocks, see markup/simple_markup.rb.</div><div class='del'>-* If you want to drive Rdoc programatically, see RDoc::RDoc.</div><div class='del'>-* If you want to use the library to format text blocks into HTML,</div><div class='del'>-  have a look at SM::SimpleMarkup.</div><div class='del'>-* If you want to try writing your own HTML output template, see</div><div class='del'>-  RDoc::Page.</div><div class='del'>-</div><div class='del'>-== Summary</div><div class='del'>-</div><div class='del'>-Once installed, you can create documentation using the 'rdoc' command</div><div class='del'>-(the command is 'rdoc.bat' under Windows)</div><div class='del'>-</div><div class='del'>-  % rdoc [options]  [names...]</div><div class='del'>-</div><div class='del'>-Type "rdoc --help" for an up-to-date option summary.</div><div class='del'>-</div><div class='del'>-A typical use might be to generate documentation for a package of Ruby</div><div class='del'>-source (such as rdoc itself). </div><div class='del'>-</div><div class='del'>-  % rdoc</div><div class='del'>-</div><div class='del'>-This command generates documentation for all the Ruby and C source</div><div class='del'>-files in and below the current directory. These will be stored in a</div><div class='del'>-documentation tree starting in the subdirectory 'doc'.</div><div class='del'>-</div><div class='del'>-You can make this slightly more useful for your readers by having the</div><div class='del'>-index page contain the documentation for the primary file. In our</div><div class='del'>-case, we could type</div><div class='del'>-</div><div class='del'>-  % rdoc --main rdoc/rdoc.rb</div><div class='del'>-</div><div class='del'>-You'll find information on the various formatting tricks you can use</div><div class='del'>-in comment blocks in the documentation this generates.</div><div class='del'>-</div><div class='del'>-RDoc uses file extensions to determine how to process each file. File</div><div class='del'>-names ending &lt;tt&gt;.rb&lt;/tt&gt; and &lt;tt&gt;.rbw&lt;/tt&gt; are assumed to be Ruby</div><div class='del'>-source. Files ending &lt;tt&gt;.c&lt;/tt&gt; are parsed as C files. All other</div><div class='del'>-files are assumed to contain just SimpleMarkup-style markup (with or</div><div class='del'>-without leading '#' comment markers). If directory names are passed to</div><div class='del'>-RDoc, they are scanned recursively for C and Ruby source files only.</div><div class='del'>-</div><div class='del'>-== Credits</div><div class='del'>-</div><div class='del'>-* The Ruby parser in rdoc/parse.rb is based heavily on the outstanding</div><div class='del'>-  work of Keiju ISHITSUKA of Nippon Rational Inc, who produced the Ruby</div><div class='del'>-  parser for irb and the rtags package.</div><div class='del'>-</div><div class='del'>-* Code to diagram classes and modules was written by Sergey A Yanovitsky</div><div class='del'>-  (Jah) of Enticla. </div><div class='del'>-</div><div class='del'>-* Charset patch from MoonWolf.</div><div class='del'>-</div><div class='del'>-* Rich Kilmer wrote the kilmer.rb output template.</div><div class='del'>-</div><div class='del'>-* Dan Brickley led the design of the RDF format.</div><div class='del'>-</div><div class='del'>-== License</div><div class='del'>-</div><div class='del'>-RDoc is Copyright (c) 2001-2003 Dave Thomas, The Pragmatic Programmers.  It</div><div class='del'>-is free software, and may be redistributed under the terms specified</div><div class='del'>-in the README file of the Ruby distribution.</div><div class='del'>-</div><div class='del'>-= Usage</div><div class='del'>-</div><div class='del'>-RDoc is invoked from the command line using:</div><div class='del'>-</div><div class='del'>-   % rdoc &lt;options&gt; [name...]</div><div class='del'>-</div><div class='del'>-Files are parsed, and the information they contain collected, before</div><div class='del'>-any output is produced. This allows cross references between all files</div><div class='del'>-to be resolved. If a name is a directory, it is traversed. If no</div><div class='del'>-names are specified, all Ruby files in the current directory (and</div><div class='del'>-subdirectories) are processed.</div><div class='del'>-</div><div class='del'>-Options are:</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--accessor&lt;/tt&gt; &lt;i&gt;name[,name...]&lt;/i&gt;]</div><div class='del'>-    specifies the name(s) of additional methods that should be treated</div><div class='del'>-    as if they were &lt;tt&gt;attr_&lt;/tt&gt;&lt;i&gt;xxx&lt;/i&gt; methods. Specifying</div><div class='del'>-    "--accessor db_opt" means lines such as</div><div class='del'>-</div><div class='del'>-         db_opt :name, :age</div><div class='del'>-  </div><div class='del'>-    will get parsed and displayed in the documentation. Each name may have an</div><div class='del'>-    optional "=flagtext" appended, in which case the given flagtext will appear</div><div class='del'>-    where (for example) the 'rw' appears for attr_accessor.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--all&lt;/tt&gt;]</div><div class='del'>-    include protected and private methods in the output (by default</div><div class='del'>-    only public methods are included)</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--charset&lt;/tt&gt; _charset_]</div><div class='del'>-    Set the character set for the generated HTML.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--diagram&lt;/tt&gt;]</div><div class='del'>-    include diagrams showing modules and classes.  This is currently</div><div class='del'>-    an experimental feature, and may not be supported by all output</div><div class='del'>-    templates. You need dot V1.8.6 or later to use the --diagram</div><div class='del'>-    option correctly (http://www.research.att.com/sw/tools/graphviz/).</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--exclude&lt;/tt&gt; &lt;i&gt;pattern&lt;/i&gt;]</div><div class='del'>-    exclude files and directories matching this pattern from processing</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--extension&lt;/tt&gt; &lt;i&gt;new=old&lt;/i&gt;]</div><div class='del'>-    treat files ending &lt;i&gt;.new&lt;/i&gt; as if they ended</div><div class='del'>-    &lt;i&gt;.old&lt;/i&gt;. Saying '--extension cgi=rb' causes RDoc to treat .cgi</div><div class='del'>-    files as Ruby source.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;fileboxes&lt;/tt&gt;]</div><div class='del'>-    Classes are put in boxes which represents files, where these</div><div class='del'>-    classes reside. Classes shared between more than one file are</div><div class='del'>-    shown with list of files that sharing them.  Silently discarded if</div><div class='del'>-    --diagram is not given Experimental.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--fmt&lt;/tt&gt; _fmt_]</div><div class='del'>-    generate output in a particular format.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--help&lt;/tt&gt;]</div><div class='del'>-    generate a usage summary.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--help-output&lt;/tt&gt;]</div><div class='del'>-    explain the various output options.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--image-format&lt;/tt&gt; &lt;i&gt;gif/png/jpg/jpeg&lt;/i&gt;]</div><div class='del'>-    sets output image format for diagrams. Can be png, gif, jpeg,</div><div class='del'>-    jpg. If this option is omitted, png is used. Requires --diagram.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--include&lt;/tt&gt; &lt;i&gt;dir,...&lt;/i&gt;]</div><div class='del'>-    specify one or more directories to be searched when satisfying</div><div class='del'>-    :+include+: directives. Multiple &lt;tt&gt;--include&lt;/tt&gt; options may be</div><div class='del'>-    given. The directory containing the file currently being processed</div><div class='del'>-    is always searched.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--inline-source&lt;/tt&gt;]</div><div class='del'>-    By default, the source code of methods is shown in a popup. With</div><div class='del'>-    this option, it's displayed inline.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;line-numbers&lt;/tt&gt;]</div><div class='del'>-    include line numbers in the source code</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--main&lt;/tt&gt; _name_]</div><div class='del'>-    the class of module _name_ will appear on the index page. If you</div><div class='del'>-    want to set a particular file as a main page (a README, for</div><div class='del'>-    example) simply specifiy its name as the first on the command</div><div class='del'>-    line.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--merge&lt;/tt&gt;]</div><div class='del'>-    when generating _ri_ output, if classes being processed already</div><div class='del'>-    exist in the destination directory, merge in the current details</div><div class='del'>-    rather than overwrite them.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--one-file&lt;/tt&gt;]</div><div class='del'>-    place all the output into a single file</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--op&lt;/tt&gt; _dir_]</div><div class='del'>-    set the output directory to _dir_ (the default is the directory</div><div class='del'>-    "doc")</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--op-name&lt;/tt&gt; _name_]</div><div class='del'>-    set the name of the output. Has no effect for HTML.</div><div class='del'>-    "doc")</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--opname&lt;/tt&gt; _name_]</div><div class='del'>-    set the output name (has no effect for HTML).</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--promiscuous&lt;/tt&gt;]</div><div class='del'>-    If a module or class is defined in more than one source file, and</div><div class='del'>-    you click on a particular file's name in the top navigation pane,</div><div class='del'>-    RDoc will normally only show you the inner classes and modules of</div><div class='del'>-    that class that are defined in the particular file. Using this</div><div class='del'>-    option makes it show all classes and modules defined in the class,</div><div class='del'>-    regardless of the file they were defined in.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--quiet&lt;/tt&gt;]</div><div class='del'>-    do not display progress messages</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--ri&lt;/tt&gt;, &lt;tt&gt;--ri-site&lt;/tt&gt;, _and_ &lt;tt&gt;--ri-system&lt;/tt&gt;]</div><div class='del'>-    generate output than can be read by the _ri_ command-line tool.</div><div class='del'>-    By default --ri places its output in ~/.rdoc, --ri-site in</div><div class='del'>-    $datadir/ri/&lt;ver&gt;/site, and --ri-system in</div><div class='del'>-    $datadir/ri/&lt;ver&gt;/system. All can be overridden with a subsequent</div><div class='del'>-    --op option. All default directories are in ri's default search</div><div class='del'>-    path.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--show-hash&lt;/tt&gt;]</div><div class='del'>-    A name of the form #name in a comment is a possible hyperlink to</div><div class='del'>-    an instance method name. When displayed, the '#' is removed unless</div><div class='del'>-    this option is specified</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--style&lt;/tt&gt; &lt;i&gt;stylesheet url&lt;/i&gt;]</div><div class='del'>-    specifies the URL of an external stylesheet to use (rather than</div><div class='del'>-    generating one of our own)</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;tab-width&lt;/tt&gt; _n_]</div><div class='del'>-    set the width of tab characters (default 8)</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--template&lt;/tt&gt; &lt;i&gt;name&lt;/i&gt;]</div><div class='del'>-    specify an alternate template to use when generating output (the</div><div class='del'>-    default is 'standard'). This template should be in a directory</div><div class='del'>-    accessible via $: as rdoc/generators/xxxx_template, where 'xxxx'</div><div class='del'>-    depends on the output formatter.</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--version&lt;/tt&gt;]</div><div class='del'>-   display  RDoc's version</div><div class='del'>-</div><div class='del'>-[&lt;tt&gt;--webcvs&lt;/tt&gt; _url_]</div><div class='del'>-    Specify a URL for linking to a web frontend to CVS. If the URL</div><div class='del'>-    contains a '\%s', the name of the current file will be</div><div class='del'>-    substituted; if the URL doesn't contain a '\%s', the filename will</div><div class='del'>-    be appended to it.</div><div class='del'>-</div><div class='del'>-= Example</div><div class='del'>-</div><div class='del'>-A typical small Ruby program commented using RDoc might be as follows. You</div><div class='del'>-can see the formatted result in EXAMPLE.rb and Anagram.</div><div class='del'>-</div><div class='del'>-      :include: EXAMPLE.rb</div><div class='del'>-</div><div class='del'>-= Markup</div><div class='del'>-</div><div class='del'>-Comment blocks can be written fairly naturally, either using '#' on</div><div class='del'>-successive lines of the comment, or by including the comment in </div><div class='del'>-an =begin/=end block. If you use the latter form, the =begin line</div><div class='del'>-must be flagged with an RDoc tag:</div><div class='del'>-</div><div class='del'>-  =begin rdoc</div><div class='del'>-  Documentation to </div><div class='del'>-  be processed by RDoc.</div><div class='del'>-  =end</div><div class='del'>-</div><div class='del'>-Paragraphs are lines that share the left margin. Text indented past</div><div class='del'>-this margin are formatted verbatim.</div><div class='del'>-</div><div class='del'>-1. Lists are typed as indented paragraphs with:</div><div class='del'>-   * a '*' or '-' (for bullet lists)</div><div class='del'>-   * a digit followed by a period for </div><div class='del'>-     numbered lists</div><div class='del'>-   * an upper or lower case letter followed</div><div class='del'>-     by a period for alpha lists.</div><div class='del'>-</div><div class='del'>-   For example, the input that produced the above paragraph looked like</div><div class='del'>-       1. Lists are typed as indented </div><div class='del'>-          paragraphs with:</div><div class='del'>-          * a '*' or '-' (for bullet lists)</div><div class='del'>-          * a digit followed by a period for </div><div class='del'>-            numbered lists</div><div class='del'>-          * an upper or lower case letter followed</div><div class='del'>-            by a period for alpha lists.</div><div class='del'>-</div><div class='del'>-2. Labeled lists (sometimes called description</div><div class='del'>-   lists) are typed using square brackets for the label.</div><div class='del'>-      [cat]   small domestic animal</div><div class='del'>-      [+cat+] command to copy standard input</div><div class='del'>-</div><div class='del'>-3. Labeled lists may also be produced by putting a double colon</div><div class='del'>-   after the label. This sets the result in tabular form, so the</div><div class='del'>-   descriptions all line up. This was used to create the 'author'</div><div class='del'>-   block at the bottom of this description.</div><div class='del'>-      cat::   small domestic animal</div><div class='del'>-      +cat+:: command to copy standard input</div><div class='del'>-</div><div class='del'>-   For both kinds of labeled lists, if the body text starts on the same</div><div class='del'>-   line as the label, then the start of that text determines the block</div><div class='del'>-   indent for the rest of the body. The text may also start on the line</div><div class='del'>-   following the label, indented from the start of the label. This is</div><div class='del'>-   often preferable if the label is long. Both the following are</div><div class='del'>-   valid labeled list entries:</div><div class='del'>-</div><div class='del'>-      &lt;tt&gt;--output&lt;/tt&gt; &lt;i&gt;name [, name]&lt;/i&gt;::</div><div class='del'>-          specify the name of one or more output files. If multiple</div><div class='del'>-          files are present, the first is used as the index.</div><div class='del'>-</div><div class='del'>-      &lt;tt&gt;--quiet:&lt;/tt&gt;:: do not output the names, sizes, byte counts,</div><div class='del'>-                          index areas, or bit ratios of units as</div><div class='del'>-                          they are processed.</div><div class='del'>-</div><div class='del'>-4. Headings are entered using equals signs</div><div class='del'>-</div><div class='del'>-      = Level One Heading</div><div class='del'>-      == Level Two Heading</div><div class='del'>-   and so on</div><div class='del'>-</div><div class='del'>-5. Rules (horizontal lines) are entered using three or</div><div class='del'>-   more hyphens.</div><div class='del'>-</div><div class='del'>-6. Non-verbatim text can be marked up:</div><div class='del'>-</div><div class='del'>-   _italic_::     \_word_ or \&lt;em&gt;text&lt;/em&gt;</div><div class='del'>-   *bold*::       \*word* or \&lt;b&gt;text&lt;/b&gt;</div><div class='del'>-   +typewriter+:: \+word+ or \&lt;tt&gt;text&lt;/tt&gt;</div><div class='del'>-</div><div class='del'>-   The first form only works around 'words', where a word is a</div><div class='del'>-   sequence of upper and lower case letters and underscores. Putting a</div><div class='del'>-   backslash before inline markup stops it being interpreted, which is</div><div class='del'>-   how I created the table above:</div><div class='del'>-</div><div class='del'>-     _italic_::     \_word_ or \&lt;em&gt;text&lt;/em&gt;</div><div class='del'>-     *bold*::       \*word* or \&lt;b&gt;text&lt;/b&gt;</div><div class='del'>-     +typewriter+:: \+word+ or \&lt;tt&gt;text&lt;/tt&gt;</div><div class='del'>-</div><div class='del'>-7. Names of classes, source files, and any method names</div><div class='del'>-   containing an underscore or preceded by a hash</div><div class='del'>-   character are automatically hyperlinked from</div><div class='del'>-   comment text to their description. </div><div class='del'>-</div><div class='del'>-8. Hyperlinks to the web starting http:, mailto:, ftp:, or www. are</div><div class='del'>-   recognized. An HTTP url that references an external image file is</div><div class='del'>-   converted into an inline &lt;IMG..&gt;.  Hyperlinks starting 'link:' are</div><div class='del'>-   assumed to refer to local files whose path is relative to the --op</div><div class='del'>-   directory.</div><div class='del'>-</div><div class='del'>-   Hyperlinks can also be of the form &lt;tt&gt;label&lt;/tt&gt;[url], in which</div><div class='del'>-   case the label is used in the displayed text, and &lt;tt&gt;url&lt;/tt&gt; is</div><div class='del'>-   used as the target. If &lt;tt&gt;label&lt;/tt&gt; contains multiple words,</div><div class='del'>-   put it in braces: &lt;em&gt;{multi word label}[&lt;/em&gt;url&lt;em&gt;]&lt;/em&gt;.</div><div class='del'>-       </div><div class='del'>-9. Method parameter lists are extracted and displayed with</div><div class='del'>-   the method description. If a method calls +yield+, then</div><div class='del'>-   the parameters passed to yield will also be displayed:</div><div class='del'>-</div><div class='del'>-      def fred</div><div class='del'>-        ...</div><div class='del'>-        yield line, address</div><div class='del'>-</div><div class='del'>-   This will get documented as</div><div class='del'>-</div><div class='del'>-      fred() { |line, address| ... }</div><div class='del'>-</div><div class='del'>-   You can override this using a comment containing </div><div class='del'>-   ':yields: ...' immediately after the method definition</div><div class='del'>-</div><div class='del'>-      def fred      # :yields: index, position</div><div class='del'>-        ...</div><div class='del'>-        yield line, address</div><div class='del'>-</div><div class='del'>-   which will get documented as</div><div class='del'>-</div><div class='del'>-       fred() { |index, position| ... }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-10. ':yields:' is an example of a documentation modifier. These appear</div><div class='del'>-    immediately after the start of the document element they are modifying.</div><div class='del'>-    Other modifiers include</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:nodoc:&lt;/tt&gt;&lt;i&gt;[all]&lt;/i&gt;]</div><div class='del'>-         don't include this element in the documentation.  For classes</div><div class='del'>-         and modules, the methods, aliases, constants, and attributes</div><div class='del'>-         directly within the affected class or module will also be</div><div class='del'>-         omitted.  By default, though, modules and classes within that</div><div class='del'>-         class of module _will_ be documented. This is turned off by</div><div class='del'>-         adding the +all+ modifier.</div><div class='del'>-</div><div class='del'>-              module SM  #:nodoc:</div><div class='del'>-                class Input</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              module Markup #:nodoc: all</div><div class='del'>-                class Output</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-         In the above code, only class &lt;tt&gt;SM::Input&lt;/tt&gt; will be</div><div class='del'>-         documented.</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:doc:&lt;/tt&gt;]</div><div class='del'>-         force a method or attribute to be documented even if it</div><div class='del'>-         wouldn't otherwise be. Useful if, for example, you want to</div><div class='del'>-         include documentation of a particular private method.</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:notnew:&lt;/tt&gt;]</div><div class='del'>-         only applicable to the +initialize+ instance method. Normally</div><div class='del'>-         RDoc assumes that the documentation and parameters for</div><div class='del'>-         #initialize are actually for the ::new method, and so fakes</div><div class='del'>-         out a ::new for the class. THe :notnew: modifier stops</div><div class='del'>-         this. Remember that #initialize is protected, so you won't</div><div class='del'>-         see the documentation unless you use the -a command line</div><div class='del'>-         option.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-11. RDoc stops processing comments if it finds a comment</div><div class='del'>-    line containing '&lt;tt&gt;#--&lt;/tt&gt;'. This can be used to </div><div class='del'>-    separate external from internal comments, or </div><div class='del'>-    to stop a comment being associated with a method, </div><div class='del'>-    class, or module. Commenting can be turned back on with</div><div class='del'>-    a line that starts '&lt;tt&gt;#++&lt;/tt&gt;'.</div><div class='del'>-</div><div class='del'>-        # Extract the age and calculate the</div><div class='del'>-        # date-of-birth.</div><div class='del'>-        #--</div><div class='del'>-        # FIXME: fails if the birthday falls on</div><div class='del'>-        # February 29th</div><div class='del'>-        #++</div><div class='del'>-        # The DOB is returned as a Time object.</div><div class='del'>-</div><div class='del'>-        def get_dob(person)</div><div class='del'>-           ...</div><div class='del'>-</div><div class='del'>-12. Comment blocks can contain other directives:</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:section: title&lt;/tt&gt;]</div><div class='del'>-        Starts a new section in the output. The title following</div><div class='del'>-	&lt;tt&gt;:section:&lt;/tt&gt; is used as the section heading, and the</div><div class='del'>-	remainder of the comment containing the section is used as</div><div class='del'>-	introductory text. Subsequent methods, aliases, attributes,</div><div class='del'>-	and classes will be documented in this section. A :section:</div><div class='del'>-	comment block may have one or more lines before the :section:</div><div class='del'>-	directive. These will be removed, and any identical lines at</div><div class='del'>-	the end of the block are also removed. This allows you to add</div><div class='del'>-	visual cues such as</div><div class='del'>-</div><div class='del'>-           # ----------------------------------------</div><div class='del'>-	   # :section: My Section</div><div class='del'>-	   # This is the section that I wrote.</div><div class='del'>-	   # See it glisten in the noon-day sun.</div><div class='del'>-           # ----------------------------------------</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;call-seq:&lt;/tt&gt;]</div><div class='del'>-        lines up to the next blank line in the comment are treated as</div><div class='del'>-        the method's calling sequence, overriding the</div><div class='del'>-        default parsing of method parameters and yield arguments.</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:include:&lt;/tt&gt;&lt;i&gt;filename&lt;/i&gt;] </div><div class='del'>-         include the contents of the named file at this point. The</div><div class='del'>-         file will be searched for in the directories listed by</div><div class='del'>-         the &lt;tt&gt;--include&lt;/tt&gt; option, or in the current</div><div class='del'>-         directory by default.  The contents of the file will be</div><div class='del'>-         shifted to have the same indentation as the ':' at the</div><div class='del'>-         start of the :include: directive.</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:title:&lt;/tt&gt;&lt;i&gt;text&lt;/i&gt;]</div><div class='del'>-         Sets the title for the document. Equivalent to the --title command</div><div class='del'>-         line parameter. (The command line parameter overrides any :title:</div><div class='del'>-         directive in the source).</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:enddoc:&lt;/tt&gt;]</div><div class='del'>-         Document nothing further at the current level.</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:main:&lt;/tt&gt;&lt;i&gt;name&lt;/i&gt;]</div><div class='del'>-         Equivalent to the --main command line parameter.</div><div class='del'>-</div><div class='del'>-    [&lt;tt&gt;:stopdoc: / :startdoc:&lt;/tt&gt;]</div><div class='del'>-         Stop and start adding new documentation elements to the</div><div class='del'>-         current container. For example, if a class has a number of</div><div class='del'>-         constants that you don't want to document, put a</div><div class='del'>-         &lt;tt&gt;:stopdoc:&lt;/tt&gt; before the first, and a</div><div class='del'>-         &lt;tt&gt;:startdoc:&lt;/tt&gt; after the last. If you don't specifiy a</div><div class='del'>-         &lt;tt&gt;:startdoc:&lt;/tt&gt; by the end of the container, disables</div><div class='del'>-         documentation for the entire class or module.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>----</div><div class='del'>-</div><div class='del'>-See also markup/simple_markup.rb.</div><div class='del'>-</div><div class='del'>-= Other stuff</div><div class='del'>-</div><div class='del'>-Author::   Dave Thomas &lt;dave@pragmaticprogrammer.com&gt;</div><div class='del'>-Requires:: Ruby 1.8.1 or later</div><div class='del'>-License::  Copyright (c) 2001-2003 Dave Thomas.</div><div class='del'>-           Released under the same license as Ruby.</div><div class='del'>-</div><div class='del'>-== Warranty</div><div class='del'>-</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.</div><div class='head'>diff --git a/lib/rdoc/code_objects.rb b/lib/rdoc/code_objects.rb<br/>deleted file mode 100644<br/>index d6c4f1bdb9..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/code_objects.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/code_objects.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,765 +0,0 @@</div><div class='del'>-# We represent the various high-level code constructs that appear</div><div class='del'>-# in Ruby programs: classes, modules, methods, and so on.</div><div class='del'>-</div><div class='del'>-require 'rdoc/tokenstream'</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # We contain the common stuff for contexts (which are containers)</div><div class='del'>-  # and other elements (methods, attributes and so on)</div><div class='del'>-  #</div><div class='del'>-  class CodeObject</div><div class='del'>-</div><div class='del'>-    attr_accessor :parent</div><div class='del'>-</div><div class='del'>-    # We are the model of the code, but we know that at some point</div><div class='del'>-    # we will be worked on by viewers. By implementing the Viewable</div><div class='del'>-    # protocol, viewers can associated themselves with these objects.</div><div class='del'>-</div><div class='del'>-    attr_accessor :viewer</div><div class='del'>-</div><div class='del'>-    # are we done documenting (ie, did we come across a :enddoc:)?</div><div class='del'>-</div><div class='del'>-    attr_accessor :done_documenting</div><div class='del'>-</div><div class='del'>-    # Which section are we in</div><div class='del'>-</div><div class='del'>-    attr_accessor :section</div><div class='del'>-</div><div class='del'>-    # do we document ourselves?</div><div class='del'>-</div><div class='del'>-    attr_reader :document_self</div><div class='del'>-</div><div class='del'>-    def document_self=(val)</div><div class='del'>-      @document_self = val</div><div class='del'>-      if !val</div><div class='del'>-	remove_methods_etc</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # set and cleared by :startdoc: and :enddoc:, this is used to toggle</div><div class='del'>-    # the capturing of documentation</div><div class='del'>-    def start_doc</div><div class='del'>-      @document_self = true</div><div class='del'>-      @document_children = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def stop_doc</div><div class='del'>-      @document_self = false</div><div class='del'>-      @document_children = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # do we document ourselves and our children</div><div class='del'>-</div><div class='del'>-    attr_reader :document_children</div><div class='del'>-</div><div class='del'>-    def document_children=(val)</div><div class='del'>-      @document_children = val</div><div class='del'>-      if !val</div><div class='del'>-	remove_classes_and_modules</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Do we _force_ documentation, even is we wouldn't normally show the entity</div><div class='del'>-    attr_accessor :force_documentation</div><div class='del'>-</div><div class='del'>-    # Default callbacks to nothing, but this is overridden for classes</div><div class='del'>-    # and modules</div><div class='del'>-    def remove_classes_and_modules</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_methods_etc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      @document_self = true</div><div class='del'>-      @document_children = true</div><div class='del'>-      @force_documentation = false</div><div class='del'>-      @done_documenting = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Access the code object's comment</div><div class='del'>-    attr_reader :comment</div><div class='del'>-</div><div class='del'>-    # Update the comment, but don't overwrite a real comment</div><div class='del'>-    # with an empty one</div><div class='del'>-    def comment=(comment)</div><div class='del'>-      @comment = comment unless comment.empty?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # There's a wee trick we pull. Comment blocks can have directives that</div><div class='del'>-    # override the stuff we extract during the parse. So, we have a special</div><div class='del'>-    # class method, attr_overridable, that lets code objects list</div><div class='del'>-    # those directives. Wehn a comment is assigned, we then extract</div><div class='del'>-    # out any matching directives and update our object</div><div class='del'>-</div><div class='del'>-    def CodeObject.attr_overridable(name, *aliases)</div><div class='del'>-      @overridables ||= {}</div><div class='del'>-</div><div class='del'>-      attr_accessor name</div><div class='del'>-</div><div class='del'>-      aliases.unshift name</div><div class='del'>-      aliases.each do |directive_name|</div><div class='del'>-        @overridables[directive_name.to_s] = name</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'>-  # A Context is something that can hold modules, classes, methods, </div><div class='del'>-  # attributes, aliases, requires, and includes. Classes, modules, and</div><div class='del'>-  # files are all Contexts.</div><div class='del'>-</div><div class='del'>-  class Context &lt; CodeObject</div><div class='del'>-    attr_reader   :name, :method_list, :attributes, :aliases, :constants</div><div class='del'>-    attr_reader   :requires, :includes, :in_files, :visibility</div><div class='del'>-</div><div class='del'>-    attr_reader   :sections</div><div class='del'>-</div><div class='del'>-    class Section</div><div class='del'>-      attr_reader :title, :comment, :sequence</div><div class='del'>-</div><div class='del'>-      @@sequence = "SEC00000"</div><div class='del'>-</div><div class='del'>-      def initialize(title, comment)</div><div class='del'>-        @title = title</div><div class='del'>-        @@sequence.succ!</div><div class='del'>-        @sequence = @@sequence.dup</div><div class='del'>-        set_comment(comment)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-</div><div class='del'>-      # Set the comment for this section from the original comment block</div><div class='del'>-      # If the first line contains :section:, strip it and use the rest. Otherwise</div><div class='del'>-      # remove lines up to the line containing :section:, and look for </div><div class='del'>-      # those lines again at the end and remove them. This lets us write</div><div class='del'>-      #</div><div class='del'>-      #   # ---------------------</div><div class='del'>-      #   # :SECTION: The title</div><div class='del'>-      #   # The body</div><div class='del'>-      #   # ---------------------</div><div class='del'>-</div><div class='del'>-      def set_comment(comment)</div><div class='del'>-        return unless comment</div><div class='del'>-</div><div class='del'>-        if comment =~ /^.*?:section:.*$/</div><div class='del'>-          start = $`</div><div class='del'>-          rest = $'</div><div class='del'>-          if start.empty?</div><div class='del'>-            @comment = rest</div><div class='del'>-          else</div><div class='del'>-            @comment = rest.sub(/#{start.chomp}\Z/, '')</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          @comment = comment</div><div class='del'>-        end</div><div class='del'>-        @comment = nil if @comment.empty?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      super()</div><div class='del'>-</div><div class='del'>-      @in_files    = []</div><div class='del'>-</div><div class='del'>-      @name    ||= "unknown"</div><div class='del'>-      @comment ||= ""</div><div class='del'>-      @parent  = nil</div><div class='del'>-      @visibility = :public</div><div class='del'>-</div><div class='del'>-      @current_section = Section.new(nil, nil)</div><div class='del'>-      @sections = [ @current_section ]</div><div class='del'>-</div><div class='del'>-      initialize_methods_etc</div><div class='del'>-      initialize_classes_and_modules</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # map the class hash to an array externally</div><div class='del'>-    def classes</div><div class='del'>-      @classes.values</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # map the module hash to an array externally</div><div class='del'>-    def modules</div><div class='del'>-      @modules.values</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Change the default visibility for new methods</div><div class='del'>-    def ongoing_visibility=(vis)</div><div class='del'>-      @visibility = vis</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Given an array +methods+ of method names, set the</div><div class='del'>-    # visibility of the corresponding AnyMethod object</div><div class='del'>-</div><div class='del'>-    def set_visibility_for(methods, vis, singleton=false)</div><div class='del'>-      count = 0</div><div class='del'>-      @method_list.each do |m|</div><div class='del'>-        if methods.include?(m.name) &amp;&amp; m.singleton == singleton</div><div class='del'>-          m.visibility = vis</div><div class='del'>-          count += 1</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      return if count == methods.size || singleton</div><div class='del'>-</div><div class='del'>-      # perhaps we need to look at attributes</div><div class='del'>-</div><div class='del'>-      @attributes.each do |a|</div><div class='del'>-        if methods.include?(a.name)</div><div class='del'>-          a.visibility = vis</div><div class='del'>-          count += 1</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Record the file that we happen to find it in</div><div class='del'>-    def record_location(toplevel)</div><div class='del'>-      @in_files &lt;&lt; toplevel unless @in_files.include?(toplevel)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return true if at least part of this thing was defined in +file+</div><div class='del'>-    def defined_in?(file)</div><div class='del'>-      @in_files.include?(file)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_class(class_type, name, superclass)</div><div class='del'>-      add_class_or_module(@classes, class_type, name, superclass)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_module(class_type, name)</div><div class='del'>-      add_class_or_module(@modules, class_type, name, nil)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_method(a_method)</div><div class='del'>-      puts "Adding #@visibility method #{a_method.name} to #@name" if $DEBUG</div><div class='del'>-      a_method.visibility = @visibility</div><div class='del'>-      add_to(@method_list, a_method)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_attribute(an_attribute)</div><div class='del'>-      add_to(@attributes, an_attribute)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_alias(an_alias)</div><div class='del'>-      meth = find_instance_method_named(an_alias.old_name)</div><div class='del'>-      if meth</div><div class='del'>-        new_meth = AnyMethod.new(an_alias.text, an_alias.new_name)</div><div class='del'>-        new_meth.is_alias_for = meth</div><div class='del'>-        new_meth.singleton    = meth.singleton</div><div class='del'>-        new_meth.params       = meth.params</div><div class='del'>-        new_meth.comment = "Alias for \##{meth.name}"</div><div class='del'>-        meth.add_alias(new_meth)</div><div class='del'>-        add_method(new_meth)</div><div class='del'>-      else</div><div class='del'>-        add_to(@aliases, an_alias)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_include(an_include)</div><div class='del'>-      add_to(@includes, an_include)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_constant(const)</div><div class='del'>-      add_to(@constants, const)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Requires always get added to the top-level (file) context</div><div class='del'>-    def add_require(a_require)</div><div class='del'>-      if self.kind_of? TopLevel</div><div class='del'>-        add_to(@requires, a_require)</div><div class='del'>-      else</div><div class='del'>-        parent.add_require(a_require)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_class_or_module(collection, class_type, name, superclass=nil)</div><div class='del'>-      cls = collection[name]</div><div class='del'>-      if cls</div><div class='del'>-        puts "Reusing class/module #{name}" if $DEBUG</div><div class='del'>-      else</div><div class='del'>-        cls = class_type.new(name, superclass)</div><div class='del'>-        puts "Adding class/module #{name} to #@name" if $DEBUG</div><div class='del'>-#        collection[name] = cls if @document_self  &amp;&amp; !@done_documenting</div><div class='del'>-        collection[name] = cls if !@done_documenting</div><div class='del'>-        cls.parent = self</div><div class='del'>-        cls.section = @current_section</div><div class='del'>-      end</div><div class='del'>-      cls</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_to(array, thing)</div><div class='del'>-      array &lt;&lt;  thing if @document_self  &amp;&amp; !@done_documenting</div><div class='del'>-      thing.parent = self</div><div class='del'>-      thing.section = @current_section</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # If a class's documentation is turned off after we've started</div><div class='del'>-    # collecting methods etc., we need to remove the ones</div><div class='del'>-    # we have</div><div class='del'>-</div><div class='del'>-    def remove_methods_etc</div><div class='del'>-      initialize_methods_etc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize_methods_etc</div><div class='del'>-      @method_list = []</div><div class='del'>-      @attributes  = []</div><div class='del'>-      @aliases     = []</div><div class='del'>-      @requires    = []</div><div class='del'>-      @includes    = []</div><div class='del'>-      @constants   = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # and remove classes and modules when we see a :nodoc: all</div><div class='del'>-    def remove_classes_and_modules</div><div class='del'>-      initialize_classes_and_modules</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize_classes_and_modules</div><div class='del'>-      @classes     = {}</div><div class='del'>-      @modules     = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find a named module</div><div class='del'>-    def find_module_named(name)</div><div class='del'>-      return self if self.name == name</div><div class='del'>-      res = @modules[name] || @classes[name]</div><div class='del'>-      return res if res</div><div class='del'>-      find_enclosing_module_named(name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # find a module at a higher scope</div><div class='del'>-    def find_enclosing_module_named(name)</div><div class='del'>-      parent &amp;&amp; parent.find_module_named(name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Iterate over all the classes and modules in</div><div class='del'>-    # this object</div><div class='del'>-</div><div class='del'>-    def each_classmodule</div><div class='del'>-      @modules.each_value {|m| yield m}</div><div class='del'>-      @classes.each_value {|c| yield c}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def each_method</div><div class='del'>-      @method_list.each {|m| yield m}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def each_attribute </div><div class='del'>-      @attributes.each {|a| yield a}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def each_constant</div><div class='del'>-      @constants.each {|c| yield c}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return the toplevel that owns us</div><div class='del'>-</div><div class='del'>-    def toplevel</div><div class='del'>-      return @toplevel if defined? @toplevel</div><div class='del'>-      @toplevel = self</div><div class='del'>-      @toplevel = @toplevel.parent until TopLevel === @toplevel</div><div class='del'>-      @toplevel</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # allow us to sort modules by name</div><div class='del'>-    def &lt;=&gt;(other)</div><div class='del'>-      name &lt;=&gt; other.name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Look up the given symbol. If method is non-nil, then</div><div class='del'>-    # we assume the symbol references a module that</div><div class='del'>-    # contains that method</div><div class='del'>-    def find_symbol(symbol, method=nil)</div><div class='del'>-      result = nil</div><div class='del'>-      case symbol</div><div class='del'>-      when /^::(.*)/</div><div class='del'>-        result = toplevel.find_symbol($1)</div><div class='del'>-      when /::/</div><div class='del'>-        modules = symbol.split(/::/)</div><div class='del'>-        unless modules.empty?</div><div class='del'>-          module_name = modules.shift</div><div class='del'>-          result = find_module_named(module_name)</div><div class='del'>-          if result</div><div class='del'>-            modules.each do |module_name|</div><div class='del'>-              result = result.find_module_named(module_name)</div><div class='del'>-              break unless result</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        # if a method is specified, then we're definitely looking for</div><div class='del'>-        # a module, otherwise it could be any symbol</div><div class='del'>-        if method</div><div class='del'>-          result = find_module_named(symbol)</div><div class='del'>-        else</div><div class='del'>-          result = find_local_symbol(symbol)</div><div class='del'>-          if result.nil?</div><div class='del'>-            if symbol =~ /^[A-Z]/</div><div class='del'>-              result = parent</div><div class='del'>-              while result &amp;&amp; result.name != symbol</div><div class='del'>-                result = result.parent</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'>-      if result &amp;&amp; method</div><div class='del'>-        if !result.respond_to?(:find_local_symbol)</div><div class='del'>-          p result.name</div><div class='del'>-          p method</div><div class='del'>-          fail</div><div class='del'>-        end</div><div class='del'>-        result = result.find_local_symbol(method)</div><div class='del'>-      end</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-           </div><div class='del'>-    def find_local_symbol(symbol)</div><div class='del'>-      res = find_method_named(symbol) ||</div><div class='del'>-            find_constant_named(symbol) ||</div><div class='del'>-            find_attribute_named(symbol) ||</div><div class='del'>-            find_module_named(symbol) </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Handle sections</div><div class='del'>-</div><div class='del'>-    def set_current_section(title, comment)</div><div class='del'>-      @current_section = Section.new(title, comment)</div><div class='del'>-      @sections &lt;&lt; @current_section</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    # Find a named method, or return nil</div><div class='del'>-    def find_method_named(name)</div><div class='del'>-      @method_list.find {|meth| meth.name == name}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find a named instance method, or return nil</div><div class='del'>-    def find_instance_method_named(name)</div><div class='del'>-      @method_list.find {|meth| meth.name == name &amp;&amp; !meth.singleton}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find a named constant, or return nil</div><div class='del'>-    def find_constant_named(name)</div><div class='del'>-      @constants.find {|m| m.name == name}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find a named attribute, or return nil</div><div class='del'>-    def find_attribute_named(name)</div><div class='del'>-      @attributes.find {|m| m.name == 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'>-  # A TopLevel context is a source file</div><div class='del'>-</div><div class='del'>-  class TopLevel &lt; Context</div><div class='del'>-    attr_accessor :file_stat</div><div class='del'>-    attr_accessor :file_relative_name</div><div class='del'>-    attr_accessor :file_absolute_name</div><div class='del'>-    attr_accessor :diagram</div><div class='del'>-    </div><div class='del'>-    @@all_classes = {}</div><div class='del'>-    @@all_modules = {}</div><div class='del'>-</div><div class='del'>-    def TopLevel::reset</div><div class='del'>-      @@all_classes = {}</div><div class='del'>-      @@all_modules = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(file_name)</div><div class='del'>-      super()</div><div class='del'>-      @name = "TopLevel"</div><div class='del'>-      @file_relative_name = file_name</div><div class='del'>-      @file_absolute_name = file_name</div><div class='del'>-      @file_stat          = File.stat(file_name)</div><div class='del'>-      @diagram            = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def full_name</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adding a class or module to a TopLevel is special, as we only</div><div class='del'>-    # want one copy of a particular top-level class. For example,</div><div class='del'>-    # if both file A and file B implement class C, we only want one</div><div class='del'>-    # ClassModule object for C. This code arranges to share</div><div class='del'>-    # classes and modules between files.</div><div class='del'>-</div><div class='del'>-    def add_class_or_module(collection, class_type, name, superclass)</div><div class='del'>-      cls = collection[name]</div><div class='del'>-      if cls</div><div class='del'>-        puts "Reusing class/module #{name}" if $DEBUG</div><div class='del'>-      else</div><div class='del'>-        if class_type == NormalModule</div><div class='del'>-          all = @@all_modules</div><div class='del'>-        else</div><div class='del'>-          all = @@all_classes</div><div class='del'>-        end</div><div class='del'>-        cls = all[name]</div><div class='del'>-        if !cls</div><div class='del'>-          cls = class_type.new(name, superclass)</div><div class='del'>-          all[name] = cls  unless @done_documenting</div><div class='del'>-        end</div><div class='del'>-        puts "Adding class/module #{name} to #@name" if $DEBUG</div><div class='del'>-        collection[name] = cls unless @done_documenting</div><div class='del'>-        cls.parent = self</div><div class='del'>-      end</div><div class='del'>-      cls</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def TopLevel.all_classes_and_modules</div><div class='del'>-      @@all_classes.values + @@all_modules.values</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def TopLevel.find_class_named(name)</div><div class='del'>-     @@all_classes.each_value do |c|</div><div class='del'>-        res = c.find_class_named(name) </div><div class='del'>-        return res if res</div><div class='del'>-      end</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_local_symbol(symbol)</div><div class='del'>-      find_class_or_module_named(symbol) || super</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_class_or_module_named(symbol)</div><div class='del'>-      @@all_classes.each_value {|c| return c if c.name == symbol}</div><div class='del'>-      @@all_modules.each_value {|m| return m if m.name == symbol}</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find a named module</div><div class='del'>-    def find_module_named(name)</div><div class='del'>-      find_class_or_module_named(name) || find_enclosing_module_named(name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # ClassModule is the base class for objects representing either a</div><div class='del'>-  # class or a module.</div><div class='del'>-</div><div class='del'>-  class ClassModule &lt; Context</div><div class='del'>-</div><div class='del'>-    attr_reader   :superclass</div><div class='del'>-    attr_accessor :diagram</div><div class='del'>-</div><div class='del'>-    def initialize(name, superclass = nil)</div><div class='del'>-      @name       = name</div><div class='del'>-      @diagram    = nil</div><div class='del'>-      @superclass = superclass</div><div class='del'>-      @comment    = ""</div><div class='del'>-      super()</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return the fully qualified name of this class or module</div><div class='del'>-    def full_name</div><div class='del'>-      if @parent &amp;&amp; @parent.full_name</div><div class='del'>-        @parent.full_name + "::" + @name</div><div class='del'>-      else</div><div class='del'>-        @name</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def http_url(prefix)</div><div class='del'>-      path = full_name.split("::")</div><div class='del'>-      File.join(prefix, *path) + ".html"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return +true+ if this object represents a module</div><div class='del'>-    def is_module?</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # to_s is simply for debugging</div><div class='del'>-    def to_s</div><div class='del'>-      res = self.class.name + ": " + @name </div><div class='del'>-      res &lt;&lt; @comment.to_s</div><div class='del'>-      res &lt;&lt; super</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_class_named(name)</div><div class='del'>-      return self if full_name == name</div><div class='del'>-      @classes.each_value {|c| return c if c.find_class_named(name) }</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Anonymous classes</div><div class='del'>-  class AnonClass &lt; ClassModule</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Normal classes</div><div class='del'>-  class NormalClass &lt; ClassModule</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Singleton classes</div><div class='del'>-  class SingleClass &lt; ClassModule</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Module</div><div class='del'>-  class NormalModule &lt; ClassModule</div><div class='del'>-    def is_module?</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # AnyMethod is the base class for objects representing methods</div><div class='del'>-</div><div class='del'>-  class AnyMethod &lt; CodeObject</div><div class='del'>-    attr_accessor :name</div><div class='del'>-    attr_accessor :visibility</div><div class='del'>-    attr_accessor :block_params</div><div class='del'>-    attr_accessor :dont_rename_initialize</div><div class='del'>-    attr_accessor :singleton</div><div class='del'>-    attr_reader   :aliases           # list of other names for this method</div><div class='del'>-    attr_accessor :is_alias_for      # or a method we're aliasing</div><div class='del'>-</div><div class='del'>-    attr_overridable :params, :param, :parameters, :parameter</div><div class='del'>-</div><div class='del'>-    attr_accessor :call_seq</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    include TokenStream</div><div class='del'>-</div><div class='del'>-    def initialize(text, name)</div><div class='del'>-      super()</div><div class='del'>-      @text = text</div><div class='del'>-      @name = name</div><div class='del'>-      @token_stream  = nil</div><div class='del'>-      @visibility    = :public</div><div class='del'>-      @dont_rename_initialize = false</div><div class='del'>-      @block_params  = nil</div><div class='del'>-      @aliases       = []</div><div class='del'>-      @is_alias_for  = nil</div><div class='del'>-      @comment = ""</div><div class='del'>-      @call_seq = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def &lt;=&gt;(other)</div><div class='del'>-      @name &lt;=&gt; other.name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      res = self.class.name + ": " + @name + " (" + @text + ")\n"</div><div class='del'>-      res &lt;&lt; @comment.to_s</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def param_seq</div><div class='del'>-      p = params.gsub(/\s*\#.*/, '')</div><div class='del'>-      p = p.tr("\n", " ").squeeze(" ")</div><div class='del'>-      p = "(" + p + ")" unless p[0] == ?(</div><div class='del'>-</div><div class='del'>-      if (block = block_params)</div><div class='del'>-        # If this method has explicit block parameters, remove any</div><div class='del'>-        # explicit &amp;block</div><div class='del'>-$stderr.puts p</div><div class='del'>-        p.sub!(/,?\s*&amp;\w+/)</div><div class='del'>-$stderr.puts p</div><div class='del'>-</div><div class='del'>-        block.gsub!(/\s*\#.*/, '')</div><div class='del'>-        block = block.tr("\n", " ").squeeze(" ")</div><div class='del'>-        if block[0] == ?(</div><div class='del'>-          block.sub!(/^\(/, '').sub!(/\)/, '')</div><div class='del'>-        end</div><div class='del'>-        p &lt;&lt; " {|#{block}| ...}"</div><div class='del'>-      end</div><div class='del'>-      p</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_alias(method)</div><div class='del'>-      @aliases &lt;&lt; method</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Represent an alias, which is an old_name/ new_name pair associated</div><div class='del'>-  # with a particular context</div><div class='del'>-  class Alias &lt; CodeObject</div><div class='del'>-    attr_accessor :text, :old_name, :new_name, :comment</div><div class='del'>-    </div><div class='del'>-    def initialize(text, old_name, new_name, comment)</div><div class='del'>-      super()</div><div class='del'>-      @text = text</div><div class='del'>-      @old_name = old_name</div><div class='del'>-      @new_name = new_name</div><div class='del'>-      self.comment = comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      "alias: #{self.old_name} -&gt;  #{self.new_name}\n#{self.comment}"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Represent a constant</div><div class='del'>-  class Constant &lt; CodeObject</div><div class='del'>-    attr_accessor :name, :value</div><div class='del'>-</div><div class='del'>-    def initialize(name, value, comment)</div><div class='del'>-      super()</div><div class='del'>-      @name = name</div><div class='del'>-      @value = value</div><div class='del'>-      self.comment = comment</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Represent attributes</div><div class='del'>-  class Attr &lt; CodeObject</div><div class='del'>-    attr_accessor :text, :name, :rw, :visibility</div><div class='del'>-</div><div class='del'>-    def initialize(text, name, rw, comment)</div><div class='del'>-      super()</div><div class='del'>-      @text = text</div><div class='del'>-      @name = name</div><div class='del'>-      @rw = rw</div><div class='del'>-      @visibility = :public</div><div class='del'>-      self.comment = comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      "attr: #{self.name} #{self.rw}\n#{self.comment}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def &lt;=&gt;(other)</div><div class='del'>-      self.name &lt;=&gt; other.name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # a required file</div><div class='del'>-</div><div class='del'>-  class Require &lt; CodeObject</div><div class='del'>-    attr_accessor :name</div><div class='del'>-</div><div class='del'>-    def initialize(name, comment)</div><div class='del'>-      super()</div><div class='del'>-      @name = name.gsub(/'|"/, "") #'</div><div class='del'>-      self.comment = comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # an included module</div><div class='del'>-  class Include &lt; CodeObject</div><div class='del'>-    attr_accessor :name</div><div class='del'>-</div><div class='del'>-    def initialize(name, comment)</div><div class='del'>-      super()</div><div class='del'>-      @name = name</div><div class='del'>-      self.comment = comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/diagram.rb b/lib/rdoc/diagram.rb<br/>deleted file mode 100644<br/>index 9fdc49c02e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/diagram.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/diagram.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,335 +0,0 @@</div><div class='del'>-# A wonderful hack by to draw package diagrams using the dot package.</div><div class='del'>-# Originally written by  Jah, team Enticla.</div><div class='del'>-#</div><div class='del'>-# You must have the V1.7 or later in your path</div><div class='del'>-# http://www.research.att.com/sw/tools/graphviz/</div><div class='del'>-</div><div class='del'>-require "rdoc/dot/dot"</div><div class='del'>-require 'rdoc/options'</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-  # Draw a set of diagrams representing the modules and classes in the</div><div class='del'>-  # system. We draw one diagram for each file, and one for each toplevel</div><div class='del'>-  # class or module. This means there will be overlap. However, it also</div><div class='del'>-  # means that you'll get better context for objects.</div><div class='del'>-  #</div><div class='del'>-  # To use, simply</div><div class='del'>-  #</div><div class='del'>-  #   d = Diagram.new(info)   # pass in collection of top level infos</div><div class='del'>-  #   d.draw</div><div class='del'>-  #</div><div class='del'>-  # The results will be written to the +dot+ subdirectory. The process</div><div class='del'>-  # also sets the +diagram+ attribute in each object it graphs to</div><div class='del'>-  # the name of the file containing the image. This can be used</div><div class='del'>-  # by output generators to insert images.</div><div class='del'>-</div><div class='del'>-  class Diagram</div><div class='del'>-</div><div class='del'>-    FONT = "Arial"</div><div class='del'>-</div><div class='del'>-    DOT_PATH = "dot"</div><div class='del'>-</div><div class='del'>-    # Pass in the set of top level objects. The method also creates</div><div class='del'>-    # the subdirectory to hold the images</div><div class='del'>-</div><div class='del'>-    def initialize(info, options)</div><div class='del'>-      @info = info</div><div class='del'>-      @options = options</div><div class='del'>-      @counter = 0</div><div class='del'>-      File.makedirs(DOT_PATH)</div><div class='del'>-      @diagram_cache = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Draw the diagrams. We traverse the files, drawing a diagram for</div><div class='del'>-    # each. We also traverse each top-level class and module in that</div><div class='del'>-    # file drawing a diagram for these too. </div><div class='del'>-</div><div class='del'>-    def draw</div><div class='del'>-      unless @options.quiet</div><div class='del'>-        $stderr.print "Diagrams: "</div><div class='del'>-        $stderr.flush</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @info.each_with_index do |i, file_count|</div><div class='del'>-        @done_modules = {}</div><div class='del'>-        @local_names = find_names(i)</div><div class='del'>-        @global_names = []</div><div class='del'>-        @global_graph = graph = DOT::DOTDigraph.new('name' =&gt; 'TopLevel',</div><div class='del'>-                                    'fontname' =&gt; FONT,</div><div class='del'>-                                    'fontsize' =&gt; '8',</div><div class='del'>-                                    'bgcolor'  =&gt; 'lightcyan1',</div><div class='del'>-                                    'compound' =&gt; 'true')</div><div class='del'>-        </div><div class='del'>-        # it's a little hack %) i'm too lazy to create a separate class</div><div class='del'>-        # for default node</div><div class='del'>-        graph &lt;&lt; DOT::DOTNode.new('name' =&gt; 'node',</div><div class='del'>-                                  'fontname' =&gt; FONT,</div><div class='del'>-                                  'color' =&gt; 'black',</div><div class='del'>-                                  'fontsize' =&gt; 8)</div><div class='del'>-        </div><div class='del'>-        i.modules.each do |mod|</div><div class='del'>-          draw_module(mod, graph, true, i.file_relative_name)</div><div class='del'>-        end</div><div class='del'>-        add_classes(i, graph, i.file_relative_name)</div><div class='del'>-</div><div class='del'>-        i.diagram = convert_to_png("f_#{file_count}", graph)</div><div class='del'>-        </div><div class='del'>-        # now go through and document each top level class and</div><div class='del'>-        # module independently</div><div class='del'>-        i.modules.each_with_index do |mod, count|</div><div class='del'>-          @done_modules = {}</div><div class='del'>-          @local_names = find_names(mod)</div><div class='del'>-          @global_names = []</div><div class='del'>-</div><div class='del'>-          @global_graph = graph = DOT::DOTDigraph.new('name' =&gt; 'TopLevel',</div><div class='del'>-                                      'fontname' =&gt; FONT,</div><div class='del'>-                                      'fontsize' =&gt; '8',</div><div class='del'>-                                      'bgcolor'  =&gt; 'lightcyan1',</div><div class='del'>-                                      'compound' =&gt; 'true')</div><div class='del'>-</div><div class='del'>-          graph &lt;&lt; DOT::DOTNode.new('name' =&gt; 'node',</div><div class='del'>-                                    'fontname' =&gt; FONT,</div><div class='del'>-                                    'color' =&gt; 'black',</div><div class='del'>-                                    'fontsize' =&gt; 8)</div><div class='del'>-          draw_module(mod, graph, true)</div><div class='del'>-          mod.diagram = convert_to_png("m_#{file_count}_#{count}", </div><div class='del'>-                                       graph) </div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      $stderr.puts unless @options.quiet</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'>-</div><div class='del'>-    def find_names(mod)</div><div class='del'>-      return [mod.full_name] + mod.classes.collect{|cl| cl.full_name} +</div><div class='del'>-        mod.modules.collect{|m| find_names(m)}.flatten</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_full_name(name, mod)</div><div class='del'>-      full_name = name.dup</div><div class='del'>-      return full_name if @local_names.include?(full_name)</div><div class='del'>-      mod_path = mod.full_name.split('::')[0..-2]</div><div class='del'>-      unless mod_path.nil?</div><div class='del'>-        until mod_path.empty?</div><div class='del'>-          full_name = mod_path.pop + '::' + full_name</div><div class='del'>-          return full_name if @local_names.include?(full_name)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def draw_module(mod, graph, toplevel = false, file = nil)</div><div class='del'>-      return if  @done_modules[mod.full_name] and not toplevel</div><div class='del'>-</div><div class='del'>-      @counter += 1</div><div class='del'>-      url = mod.http_url("classes")</div><div class='del'>-      m = DOT::DOTSubgraph.new('name' =&gt; "cluster_#{mod.full_name.gsub( /:/,'_' )}",</div><div class='del'>-                               'label' =&gt; mod.name,</div><div class='del'>-                               'fontname' =&gt; FONT,</div><div class='del'>-                               'color' =&gt; 'blue', </div><div class='del'>-                               'style' =&gt; 'filled', </div><div class='del'>-                               'URL'   =&gt; %{"#{url}"},</div><div class='del'>-                               'fillcolor' =&gt; toplevel ? 'palegreen1' : 'palegreen3')</div><div class='del'>-      </div><div class='del'>-      @done_modules[mod.full_name] = m</div><div class='del'>-      add_classes(mod, m, file)</div><div class='del'>-      graph &lt;&lt; m</div><div class='del'>-</div><div class='del'>-      unless mod.includes.empty?</div><div class='del'>-        mod.includes.each do |m|</div><div class='del'>-          m_full_name = find_full_name(m.name, mod)</div><div class='del'>-          if @local_names.include?(m_full_name)</div><div class='del'>-            @global_graph &lt;&lt; DOT::DOTEdge.new('from' =&gt; "#{m_full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                      'to' =&gt; "#{mod.full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                      'ltail' =&gt; "cluster_#{m_full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                      'lhead' =&gt; "cluster_#{mod.full_name.gsub( /:/,'_' )}")</div><div class='del'>-          else</div><div class='del'>-            unless @global_names.include?(m_full_name)</div><div class='del'>-              path = m_full_name.split("::")</div><div class='del'>-              url = File.join('classes', *path) + ".html"</div><div class='del'>-              @global_graph &lt;&lt; DOT::DOTNode.new('name' =&gt; "#{m_full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                        'shape' =&gt; 'box',</div><div class='del'>-                                        'label' =&gt; "#{m_full_name}",</div><div class='del'>-                                        'URL'   =&gt; %{"#{url}"})</div><div class='del'>-              @global_names &lt;&lt; m_full_name</div><div class='del'>-            end</div><div class='del'>-            @global_graph &lt;&lt; DOT::DOTEdge.new('from' =&gt; "#{m_full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                      'to' =&gt; "#{mod.full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                      'lhead' =&gt; "cluster_#{mod.full_name.gsub( /:/,'_' )}")</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 add_classes(container, graph, file = nil )</div><div class='del'>-</div><div class='del'>-      use_fileboxes = Options.instance.fileboxes</div><div class='del'>-</div><div class='del'>-      files = {}</div><div class='del'>-</div><div class='del'>-      # create dummy node (needed if empty and for module includes)</div><div class='del'>-      if container.full_name</div><div class='del'>-        graph &lt;&lt; DOT::DOTNode.new('name'     =&gt; "#{container.full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                  'label'    =&gt; "",</div><div class='del'>-                                  'width'  =&gt; (container.classes.empty? and </div><div class='del'>-                                               container.modules.empty?) ? </div><div class='del'>-                                  '0.75' : '0.01',</div><div class='del'>-                                  'height' =&gt; '0.01',</div><div class='del'>-                                  'shape' =&gt; 'plaintext')</div><div class='del'>-      end</div><div class='del'>-      container.classes.each_with_index do |cl, cl_index|</div><div class='del'>-        last_file = cl.in_files[-1].file_relative_name</div><div class='del'>-</div><div class='del'>-        if use_fileboxes &amp;&amp; !files.include?(last_file)</div><div class='del'>-          @counter += 1</div><div class='del'>-          files[last_file] =</div><div class='del'>-            DOT::DOTSubgraph.new('name'     =&gt; "cluster_#{@counter}",</div><div class='del'>-                                 'label'    =&gt; "#{last_file}",</div><div class='del'>-                                 'fontname' =&gt; FONT,</div><div class='del'>-                                 'color'=&gt;</div><div class='del'>-                                 last_file == file ? 'red' : 'black')</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        next if cl.name == 'Object' || cl.name[0,2] == "&lt;&lt;"</div><div class='del'>-</div><div class='del'>-        url = cl.http_url("classes")</div><div class='del'>-        </div><div class='del'>-        label = cl.name.dup</div><div class='del'>-        if use_fileboxes &amp;&amp; cl.in_files.length &gt; 1</div><div class='del'>-          label &lt;&lt;  '\n[' + </div><div class='del'>-                        cl.in_files.collect {|i|</div><div class='del'>-                             i.file_relative_name </div><div class='del'>-                        }.sort.join( '\n' ) +</div><div class='del'>-                    ']'</div><div class='del'>-        end </div><div class='del'>-                </div><div class='del'>-        attrs = {</div><div class='del'>-          'name' =&gt; "#{cl.full_name.gsub( /:/, '_' )}",</div><div class='del'>-          'fontcolor' =&gt; 'black',</div><div class='del'>-          'style'=&gt;'filled',</div><div class='del'>-          'color'=&gt;'palegoldenrod',</div><div class='del'>-          'label' =&gt; label,</div><div class='del'>-          'shape' =&gt; 'ellipse',</div><div class='del'>-          'URL'   =&gt; %{"#{url}"}</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        c = DOT::DOTNode.new(attrs)</div><div class='del'>-        </div><div class='del'>-        if use_fileboxes</div><div class='del'>-          files[last_file].push c </div><div class='del'>-        else</div><div class='del'>-          graph &lt;&lt; c</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      if use_fileboxes</div><div class='del'>-        files.each_value do |val|</div><div class='del'>-          graph &lt;&lt; val</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      unless container.classes.empty?</div><div class='del'>-        container.classes.each_with_index do |cl, cl_index|</div><div class='del'>-          cl.includes.each do |m|</div><div class='del'>-            m_full_name = find_full_name(m.name, cl)</div><div class='del'>-            if @local_names.include?(m_full_name)</div><div class='del'>-              @global_graph &lt;&lt; DOT::DOTEdge.new('from' =&gt; "#{m_full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                      'to' =&gt; "#{cl.full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                      'ltail' =&gt; "cluster_#{m_full_name.gsub( /:/,'_' )}")</div><div class='del'>-            else</div><div class='del'>-              unless @global_names.include?(m_full_name)</div><div class='del'>-                path = m_full_name.split("::")</div><div class='del'>-                url = File.join('classes', *path) + ".html"</div><div class='del'>-                @global_graph &lt;&lt; DOT::DOTNode.new('name' =&gt; "#{m_full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                          'shape' =&gt; 'box',</div><div class='del'>-                                          'label' =&gt; "#{m_full_name}",</div><div class='del'>-                                          'URL'   =&gt; %{"#{url}"})</div><div class='del'>-                @global_names &lt;&lt; m_full_name</div><div class='del'>-              end</div><div class='del'>-              @global_graph &lt;&lt; DOT::DOTEdge.new('from' =&gt; "#{m_full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                      'to' =&gt; "#{cl.full_name.gsub( /:/, '_')}")</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          sclass = cl.superclass</div><div class='del'>-          next if sclass.nil? || sclass == 'Object'</div><div class='del'>-          sclass_full_name = find_full_name(sclass,cl)</div><div class='del'>-          unless @local_names.include?(sclass_full_name) or @global_names.include?(sclass_full_name)</div><div class='del'>-            path = sclass_full_name.split("::")</div><div class='del'>-            url = File.join('classes', *path) + ".html"</div><div class='del'>-            @global_graph &lt;&lt; DOT::DOTNode.new(</div><div class='del'>-                       'name' =&gt; "#{sclass_full_name.gsub( /:/, '_' )}",</div><div class='del'>-                       'label' =&gt; sclass_full_name,</div><div class='del'>-                       'URL'   =&gt; %{"#{url}"})</div><div class='del'>-            @global_names &lt;&lt; sclass_full_name</div><div class='del'>-          end</div><div class='del'>-          @global_graph &lt;&lt; DOT::DOTEdge.new('from' =&gt; "#{sclass_full_name.gsub( /:/,'_' )}",</div><div class='del'>-                                    'to' =&gt; "#{cl.full_name.gsub( /:/, '_')}")</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      container.modules.each do |submod|</div><div class='del'>-        draw_module(submod, graph)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_to_png(file_base, graph)</div><div class='del'>-      str = graph.to_s</div><div class='del'>-      return @diagram_cache[str] if @diagram_cache[str]</div><div class='del'>-      op_type = Options.instance.image_format</div><div class='del'>-      dotfile = File.join(DOT_PATH, file_base)</div><div class='del'>-      src = dotfile + ".dot"</div><div class='del'>-      dot = dotfile + "." + op_type</div><div class='del'>-</div><div class='del'>-      unless @options.quiet</div><div class='del'>-        $stderr.print "."</div><div class='del'>-        $stderr.flush</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      File.open(src, 'w+' ) do |f|</div><div class='del'>-        f &lt;&lt; str &lt;&lt; "\n"</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      system "dot", "-T#{op_type}", src, "-o", dot</div><div class='del'>-</div><div class='del'>-      # Now construct the imagemap wrapper around</div><div class='del'>-      # that png</div><div class='del'>-</div><div class='del'>-      ret = wrap_in_image_map(src, dot)</div><div class='del'>-      @diagram_cache[str] = ret</div><div class='del'>-      return ret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Extract the client-side image map from dot, and use it</div><div class='del'>-    # to generate the imagemap proper. Return the whole</div><div class='del'>-    # &lt;map&gt;..&lt;img&gt; combination, suitable for inclusion on</div><div class='del'>-    # the page</div><div class='del'>-</div><div class='del'>-    def wrap_in_image_map(src, dot)</div><div class='del'>-      res = %{&lt;map id="map" name="map"&gt;\n}</div><div class='del'>-      dot_map = `dot -Tismap #{src}`</div><div class='del'>-      dot_map.each do |area|</div><div class='del'>-        unless area =~ /^rectangle \((\d+),(\d+)\) \((\d+),(\d+)\) ([\/\w.]+)\s*(.*)/</div><div class='del'>-          $stderr.puts "Unexpected output from dot:\n#{area}"</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        xs, ys = [$1.to_i, $3.to_i], [$2.to_i, $4.to_i]</div><div class='del'>-        url, area_name = $5, $6</div><div class='del'>-</div><div class='del'>-        res &lt;&lt;  %{  &lt;area shape="rect" coords="#{xs.min},#{ys.min},#{xs.max},#{ys.max}" }</div><div class='del'>-        res &lt;&lt;  %{     href="#{url}" alt="#{area_name}" /&gt;\n}</div><div class='del'>-      end</div><div class='del'>-      res &lt;&lt; "&lt;/map&gt;\n"</div><div class='del'>-#      map_file = src.sub(/.dot/, '.map')</div><div class='del'>-#      system("dot -Timap #{src} -o #{map_file}")</div><div class='del'>-      res &lt;&lt; %{&lt;img src="#{dot}" usemap="#map" border="0" alt="#{dot}"&gt;}</div><div class='del'>-      return res</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/dot/dot.rb b/lib/rdoc/dot/dot.rb<br/>deleted file mode 100644<br/>index 6dbb7cb237..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/dot/dot.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/dot/dot.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,255 +0,0 @@</div><div class='del'>-module DOT</div><div class='del'>-</div><div class='del'>-    # these glogal vars are used to make nice graph source</div><div class='del'>-    $tab = '    '</div><div class='del'>-    $tab2 = $tab * 2</div><div class='del'>-</div><div class='del'>-    # if we don't like 4 spaces, we can change it any time</div><div class='del'>-    def change_tab( t )</div><div class='del'>-        $tab = t</div><div class='del'>-        $tab2 = t * 2</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # options for node declaration</div><div class='del'>-    NODE_OPTS = [</div><div class='del'>-        'bgcolor',</div><div class='del'>-        'color',</div><div class='del'>-        'fontcolor',</div><div class='del'>-        'fontname',</div><div class='del'>-        'fontsize',</div><div class='del'>-        'height',</div><div class='del'>-        'width',</div><div class='del'>-        'label',</div><div class='del'>-        'layer',</div><div class='del'>-        'rank',</div><div class='del'>-        'shape',</div><div class='del'>-        'shapefile',</div><div class='del'>-        'style',</div><div class='del'>-        'URL',</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    # options for edge declaration</div><div class='del'>-    EDGE_OPTS = [</div><div class='del'>-        'color',</div><div class='del'>-        'decorate',</div><div class='del'>-        'dir',</div><div class='del'>-        'fontcolor',</div><div class='del'>-        'fontname',</div><div class='del'>-        'fontsize',</div><div class='del'>-        'id',</div><div class='del'>-        'label',</div><div class='del'>-        'layer',</div><div class='del'>-        'lhead',</div><div class='del'>-        'ltail',</div><div class='del'>-        'minlen',</div><div class='del'>-        'style',</div><div class='del'>-        'weight'</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    # options for graph declaration</div><div class='del'>-    GRAPH_OPTS = [</div><div class='del'>-        'bgcolor',</div><div class='del'>-        'center',</div><div class='del'>-        'clusterrank',</div><div class='del'>-        'color',</div><div class='del'>-        'compound',</div><div class='del'>-        'concentrate',</div><div class='del'>-        'fillcolor',</div><div class='del'>-        'fontcolor',</div><div class='del'>-        'fontname',</div><div class='del'>-        'fontsize',</div><div class='del'>-        'label',</div><div class='del'>-        'layerseq',</div><div class='del'>-        'margin',</div><div class='del'>-        'mclimit',</div><div class='del'>-        'nodesep',</div><div class='del'>-        'nslimit',</div><div class='del'>-        'ordering',</div><div class='del'>-        'orientation',</div><div class='del'>-        'page',</div><div class='del'>-        'rank',</div><div class='del'>-        'rankdir',</div><div class='del'>-        'ranksep',</div><div class='del'>-        'ratio',</div><div class='del'>-        'size',</div><div class='del'>-        'style',</div><div class='del'>-        'URL'</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    # a root class for any element in dot notation</div><div class='del'>-    class DOTSimpleElement</div><div class='del'>-        attr_accessor :name</div><div class='del'>-</div><div class='del'>-        def initialize( params = {} )</div><div class='del'>-            @label = params['name'] ? params['name'] : ''</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def to_s</div><div class='del'>-            @name</div><div class='del'>-        end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # an element that has options ( node, edge or graph )</div><div class='del'>-    class DOTElement &lt; DOTSimpleElement</div><div class='del'>-        #attr_reader :parent</div><div class='del'>-        attr_accessor :name, :options</div><div class='del'>-</div><div class='del'>-        def initialize( params = {}, option_list = [] )</div><div class='del'>-            super( params )</div><div class='del'>-            @name = params['name'] ? params['name'] : nil</div><div class='del'>-            @parent = params['parent'] ? params['parent'] : nil</div><div class='del'>-            @options = {}</div><div class='del'>-            option_list.each{ |i|</div><div class='del'>-                @options[i] = params[i] if params[i]</div><div class='del'>-            }</div><div class='del'>-            @options['label'] ||= @name if @name != 'node'</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def each_option</div><div class='del'>-            @options.each{ |i| yield i }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def each_option_pair</div><div class='del'>-            @options.each_pair{ |key, val| yield key, val }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        #def parent=( thing )</div><div class='del'>-        #    @parent.delete( self ) if defined?( @parent ) and @parent</div><div class='del'>-        #    @parent = thing</div><div class='del'>-        #end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # this is used when we build nodes that have shape=record</div><div class='del'>-    # ports don't have options :)</div><div class='del'>-    class DOTPort &lt; DOTSimpleElement</div><div class='del'>-        attr_accessor :label</div><div class='del'>-</div><div class='del'>-        def initialize( params = {} )</div><div class='del'>-            super( params )</div><div class='del'>-            @name = params['label'] ? params['label'] : ''</div><div class='del'>-        end</div><div class='del'>-        def to_s</div><div class='del'>-            ( @name &amp;&amp; @name != "" ? "&lt;#{@name}&gt;" : "" ) + "#{@label}"</div><div class='del'>-        end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # node element</div><div class='del'>-    class DOTNode &lt; DOTElement</div><div class='del'>-</div><div class='del'>-        def initialize( params = {}, option_list = NODE_OPTS )</div><div class='del'>-            super( params, option_list )</div><div class='del'>-            @ports = params['ports'] ? params['ports'] : []</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def each_port</div><div class='del'>-            @ports.each{ |i| yield i }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def &lt;&lt; ( thing )</div><div class='del'>-            @ports &lt;&lt; thing</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def push ( thing )</div><div class='del'>-            @ports.push( thing )</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def pop</div><div class='del'>-            @ports.pop</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def to_s( t = '' )</div><div class='del'>-</div><div class='del'>-            label = @options['shape'] != 'record' &amp;&amp; @ports.length == 0 ?</div><div class='del'>-                @options['label'] ?</div><div class='del'>-                    t + $tab + "label = \"#{@options['label']}\"\n" :</div><div class='del'>-                    '' :</div><div class='del'>-                t + $tab + 'label = "' + " \\\n" +</div><div class='del'>-                t + $tab2 + "#{@options['label']}| \\\n" +</div><div class='del'>-                @ports.collect{ |i|</div><div class='del'>-                    t + $tab2 + i.to_s</div><div class='del'>-                }.join( "| \\\n" ) + " \\\n" +</div><div class='del'>-                t + $tab + '"' + "\n"</div><div class='del'>-</div><div class='del'>-            t + "#{@name} [\n" +</div><div class='del'>-            @options.to_a.collect{ |i|</div><div class='del'>-                i[1] &amp;&amp; i[0] != 'label' ?</div><div class='del'>-                    t + $tab + "#{i[0]} = #{i[1]}" : nil</div><div class='del'>-            }.compact.join( ",\n" ) + ( label != '' ? ",\n" : "\n" ) +</div><div class='del'>-            label +</div><div class='del'>-            t + "]\n"</div><div class='del'>-        end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # subgraph element is the same to graph, but has another header in dot</div><div class='del'>-    # notation</div><div class='del'>-    class DOTSubgraph &lt; DOTElement</div><div class='del'>-</div><div class='del'>-        def initialize( params = {}, option_list = GRAPH_OPTS )</div><div class='del'>-            super( params, option_list )</div><div class='del'>-            @nodes = params['nodes'] ? params['nodes'] : []</div><div class='del'>-            @dot_string = 'subgraph'</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def each_node</div><div class='del'>-            @nodes.each{ |i| yield i }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def &lt;&lt; ( thing )</div><div class='del'>-            @nodes &lt;&lt; thing</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def push( thing )</div><div class='del'>-            @nodes.push( thing )</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def pop</div><div class='del'>-            @nodes.pop</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def to_s( t = '' )</div><div class='del'>-          hdr = t + "#{@dot_string} #{@name} {\n"</div><div class='del'>-</div><div class='del'>-          options = @options.to_a.collect{ |name, val|</div><div class='del'>-            val &amp;&amp; name != 'label' ?</div><div class='del'>-            t + $tab + "#{name} = #{val}" :</div><div class='del'>-              name ? t + $tab + "#{name} = \"#{val}\"" : nil</div><div class='del'>-          }.compact.join( "\n" ) + "\n"</div><div class='del'>-</div><div class='del'>-          nodes = @nodes.collect{ |i|</div><div class='del'>-            i.to_s( t + $tab )</div><div class='del'>-          }.join( "\n" ) + "\n"</div><div class='del'>-          hdr + options + nodes + t + "}\n"</div><div class='del'>-        end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # this is graph</div><div class='del'>-    class DOTDigraph &lt; DOTSubgraph</div><div class='del'>-        def initialize( params = {}, option_list = GRAPH_OPTS )</div><div class='del'>-            super( params, option_list )</div><div class='del'>-            @dot_string = 'digraph'</div><div class='del'>-        end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # this is edge</div><div class='del'>-    class DOTEdge &lt; DOTElement</div><div class='del'>-        attr_accessor :from, :to</div><div class='del'>-        def initialize( params = {}, option_list = EDGE_OPTS )</div><div class='del'>-            super( params, option_list )</div><div class='del'>-            @from = params['from'] ? params['from'] : nil</div><div class='del'>-            @to = params['to'] ? params['to'] : nil</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def to_s( t = '' )</div><div class='del'>-            t + "#{@from} -&gt; #{to} [\n" +</div><div class='del'>-            @options.to_a.collect{ |i|</div><div class='del'>-                i[1] &amp;&amp; i[0] != 'label' ?</div><div class='del'>-                    t + $tab + "#{i[0]} = #{i[1]}" :</div><div class='del'>-                    i[1] ? t + $tab + "#{i[0]} = \"#{i[1]}\"" : nil</div><div class='del'>-            }.compact.join( "\n" ) + "\n" + t + "]\n"</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='head'>diff --git a/lib/rdoc/generators/chm_generator.rb b/lib/rdoc/generators/chm_generator.rb<br/>deleted file mode 100644<br/>index 51eeda8dd1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/chm_generator.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/chm_generator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,112 +0,0 @@</div><div class='del'>-require 'rdoc/generators/html_generator'</div><div class='del'>-</div><div class='del'>-module Generators</div><div class='del'>-</div><div class='del'>-  class CHMGenerator &lt; HTMLGenerator</div><div class='del'>-</div><div class='del'>-    HHC_PATH = "c:/Program Files/HTML Help Workshop/hhc.exe"</div><div class='del'>-</div><div class='del'>-    # Standard generator factory</div><div class='del'>-    def CHMGenerator.for(options)</div><div class='del'>-      CHMGenerator.new(options)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    def initialize(*args)</div><div class='del'>-      super</div><div class='del'>-      @op_name = @options.op_name || "rdoc"</div><div class='del'>-      check_for_html_help_workshop</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_for_html_help_workshop</div><div class='del'>-      stat = File.stat(HHC_PATH)</div><div class='del'>-    rescue</div><div class='del'>-      $stderr &lt;&lt;</div><div class='del'>-	"\n.chm output generation requires that Microsoft's Html Help\n" &lt;&lt;</div><div class='del'>-	"Workshop is installed. RDoc looks for it in:\n\n    " &lt;&lt;</div><div class='del'>-	HHC_PATH &lt;&lt;</div><div class='del'>-	"\n\nYou can download a copy for free from:\n\n" &lt;&lt;</div><div class='del'>-	"    http://msdn.microsoft.com/library/default.asp?" &lt;&lt;</div><div class='del'>-	"url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp\n\n"</div><div class='del'>-      </div><div class='del'>-      exit 99</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generate the html as normal, then wrap it</div><div class='del'>-    # in a help project</div><div class='del'>-    def generate(info)</div><div class='del'>-      super</div><div class='del'>-      @project_name = @op_name + ".hhp"</div><div class='del'>-      create_help_project</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The project contains the project file, a table of contents</div><div class='del'>-    # and an index</div><div class='del'>-    def create_help_project</div><div class='del'>-      create_project_file</div><div class='del'>-      create_contents_and_index</div><div class='del'>-      compile_project</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The project file links together all the various</div><div class='del'>-    # files that go to make up the help.</div><div class='del'>-</div><div class='del'>-    def create_project_file</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::HPP_FILE)</div><div class='del'>-      values = { "title" =&gt; @options.title, "opname" =&gt; @op_name }</div><div class='del'>-      files = []</div><div class='del'>-      @files.each do |f|</div><div class='del'>-	files &lt;&lt; { "html_file_name" =&gt; f.path }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      values['all_html_files'] = files</div><div class='del'>-      </div><div class='del'>-      File.open(@project_name, "w") do |f|</div><div class='del'>-        template.write_html_on(f, values)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The contents is a list of all files and modules.</div><div class='del'>-    # For each we include  as sub-entries the list</div><div class='del'>-    # of methods they contain. As we build the contents</div><div class='del'>-    # we also build an index file</div><div class='del'>-</div><div class='del'>-    def create_contents_and_index</div><div class='del'>-      contents = []</div><div class='del'>-      index    = []</div><div class='del'>-</div><div class='del'>-      (@files+@classes).sort.each do |entry|</div><div class='del'>-	content_entry = { "c_name" =&gt; entry.name, "ref" =&gt; entry.path }</div><div class='del'>-	index &lt;&lt; { "name" =&gt; entry.name, "aref" =&gt; entry.path }</div><div class='del'>-</div><div class='del'>-	internals = []</div><div class='del'>-</div><div class='del'>-	methods = entry.build_method_summary_list(entry.path)</div><div class='del'>-</div><div class='del'>-	content_entry["methods"] = methods unless methods.empty?</div><div class='del'>-        contents &lt;&lt; content_entry</div><div class='del'>-	index.concat methods</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      values = { "contents" =&gt; contents }</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::CONTENTS)</div><div class='del'>-      File.open("contents.hhc", "w") do |f|</div><div class='del'>-	template.write_html_on(f, values)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      values = { "index" =&gt; index }</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::CHM_INDEX)</div><div class='del'>-      File.open("index.hhk", "w") do |f|</div><div class='del'>-	template.write_html_on(f, values)</div><div class='del'>-      end      </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Invoke the windows help compiler to compiler the project</div><div class='del'>-    def compile_project</div><div class='del'>-      system(HHC_PATH, @project_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'>-end</div><div class='head'>diff --git a/lib/rdoc/generators/html_generator.rb b/lib/rdoc/generators/html_generator.rb<br/>deleted file mode 100644<br/>index 1f9b808e8d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/html_generator.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/html_generator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1509 +0,0 @@</div><div class='del'>-# We're responsible for generating all the HTML files</div><div class='del'>-# from the object tree defined in code_objects.rb. We</div><div class='del'>-# generate:</div><div class='del'>-#</div><div class='del'>-# [files]   an html file for each input file given. These</div><div class='del'>-#           input files appear as objects of class</div><div class='del'>-#           TopLevel</div><div class='del'>-#</div><div class='del'>-# [classes] an html file for each class or module encountered.</div><div class='del'>-#           These classes are not grouped by file: if a file</div><div class='del'>-#           contains four classes, we'll generate an html</div><div class='del'>-#           file for the file itself, and four html files </div><div class='del'>-#           for the individual classes. </div><div class='del'>-#</div><div class='del'>-# [indices] we generate three indices for files, classes,</div><div class='del'>-#           and methods. These are displayed in a browser</div><div class='del'>-#           like window with three index panes across the</div><div class='del'>-#           top and the selected description below</div><div class='del'>-#</div><div class='del'>-# Method descriptions appear in whatever entity (file, class,</div><div class='del'>-# or module) that contains them.</div><div class='del'>-#</div><div class='del'>-# We generate files in a structure below a specified subdirectory,</div><div class='del'>-# normally +doc+.</div><div class='del'>-#</div><div class='del'>-#  opdir</div><div class='del'>-#     |</div><div class='del'>-#     |___ files</div><div class='del'>-#     |       |__  per file summaries</div><div class='del'>-#     |</div><div class='del'>-#     |___ classes</div><div class='del'>-#             |__ per class/module descriptions</div><div class='del'>-#</div><div class='del'>-# HTML is generated using the Template class.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'ftools'</div><div class='del'>-</div><div class='del'>-require 'rdoc/options'</div><div class='del'>-require 'rdoc/template'</div><div class='del'>-require 'rdoc/markup/simple_markup'</div><div class='del'>-require 'rdoc/markup/simple_markup/to_html'</div><div class='del'>-require 'cgi'</div><div class='del'>-</div><div class='del'>-module Generators</div><div class='del'>-</div><div class='del'>-  # Name of sub-direcories that hold file and class/module descriptions</div><div class='del'>-</div><div class='del'>-  FILE_DIR  = "files"</div><div class='del'>-  CLASS_DIR = "classes"</div><div class='del'>-  CSS_NAME  = "rdoc-style.css"</div><div class='del'>-  </div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Build a hash of all items that can be cross-referenced.</div><div class='del'>-  # This is used when we output required and included names: </div><div class='del'>-  # if the names appear in this hash, we can generate</div><div class='del'>-  # an html cross reference to the appropriate description.</div><div class='del'>-  # We also use this when parsing comment blocks: any decorated </div><div class='del'>-  # words matching an entry in this list are hyperlinked.</div><div class='del'>-</div><div class='del'>-  class AllReferences</div><div class='del'>-    @@refs = {}</div><div class='del'>-    </div><div class='del'>-    def AllReferences::reset</div><div class='del'>-      @@refs = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def AllReferences.add(name, html_class)</div><div class='del'>-      @@refs[name] = html_class</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def AllReferences.[](name)</div><div class='del'>-      @@refs[name]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def AllReferences.keys</div><div class='del'>-      @@refs.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'>-  # Subclass of the SM::ToHtml class that supports looking</div><div class='del'>-  # up words in the AllReferences list. Those that are</div><div class='del'>-  # found (like AllReferences in this comment) will</div><div class='del'>-  # be hyperlinked</div><div class='del'>-</div><div class='del'>-  class HyperlinkHtml &lt; SM::ToHtml</div><div class='del'>-    # We need to record the html path of our caller so we can generate</div><div class='del'>-    # correct relative paths for any hyperlinks that we find</div><div class='del'>-    def initialize(from_path, context)</div><div class='del'>-      super()</div><div class='del'>-      @from_path = from_path</div><div class='del'>-</div><div class='del'>-      @parent_name = context.parent_name</div><div class='del'>-      @parent_name += "::" if @parent_name</div><div class='del'>-      @context = context</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # We're invoked when any text matches the CROSSREF pattern</div><div class='del'>-    # (defined in MarkUp). If we fine the corresponding reference,</div><div class='del'>-    # generate a hyperlink. If the name we're looking for contains</div><div class='del'>-    # no punctuation, we look for it up the module/class chain. For</div><div class='del'>-    # example, HyperlinkHtml is found, even without the Generators::</div><div class='del'>-    # prefix, because we look for it in module Generators first.</div><div class='del'>-</div><div class='del'>-    def handle_special_CROSSREF(special)</div><div class='del'>-      name = special.text</div><div class='del'>-      if name[0,1] == '#'</div><div class='del'>-        lookup = name[1..-1]</div><div class='del'>-        name = lookup unless Options.instance.show_hash</div><div class='del'>-      else</div><div class='del'>-        lookup = name</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Find class, module, or method in class or module.</div><div class='del'>-      if /([A-Z]\w*)[.\#](\w+[!?=]?)/ =~ lookup</div><div class='del'>-        container = $1</div><div class='del'>-        method = $2</div><div class='del'>-        ref = @context.find_symbol(container, method)</div><div class='del'>-      elsif /([A-Za-z]\w*)[.\#](\w+(\([\.\w+\*\/\+\-\=\&lt;\&gt;]+\))?)/ =~ lookup</div><div class='del'>-        container = $1</div><div class='del'>-        method = $2</div><div class='del'>-        ref = @context.find_symbol(container, method)</div><div class='del'>-      else</div><div class='del'>-        ref = @context.find_symbol(lookup)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if ref and ref.document_self</div><div class='del'>-        "&lt;a href=\"#{ref.as_href(@from_path)}\"&gt;#{name}&lt;/a&gt;"</div><div class='del'>-      else</div><div class='del'>-        name</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Generate a hyperlink for url, labeled with text. Handle the</div><div class='del'>-    # special cases for img: and link: described under handle_special_HYPEDLINK</div><div class='del'>-    def gen_url(url, text)</div><div class='del'>-      if url =~ /([A-Za-z]+):(.*)/</div><div class='del'>-        type = $1</div><div class='del'>-        path = $2</div><div class='del'>-      else</div><div class='del'>-        type = "http"</div><div class='del'>-        path = url</div><div class='del'>-        url  = "http://#{url}"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if type == "link"</div><div class='del'>-        if path[0,1] == '#'     # is this meaningful?</div><div class='del'>-          url = path</div><div class='del'>-        else</div><div class='del'>-          url = HTMLGenerator.gen_url(@from_path, path)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if (type == "http" || type == "link") &amp;&amp; </div><div class='del'>-          url =~ /\.(gif|png|jpg|jpeg|bmp)$/</div><div class='del'>-</div><div class='del'>-        "&lt;img src=\"#{url}\" /&gt;"</div><div class='del'>-      else</div><div class='del'>-        "&lt;a href=\"#{url}\"&gt;#{text.sub(%r{^#{type}:/*}, '')}&lt;/a&gt;"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # And we're invoked with a potential external hyperlink mailto:</div><div class='del'>-    # just gets inserted. http: links are checked to see if they</div><div class='del'>-    # reference an image. If so, that image gets inserted using an</div><div class='del'>-    # &lt;img&gt; tag. Otherwise a conventional &lt;a href&gt; is used.  We also</div><div class='del'>-    # support a special type of hyperlink, link:, which is a reference</div><div class='del'>-    # to a local file whose path is relative to the --op directory.</div><div class='del'>-</div><div class='del'>-    def handle_special_HYPERLINK(special)</div><div class='del'>-      url = special.text</div><div class='del'>-      gen_url(url, url)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # HEre's a hypedlink where the label is different to the URL</div><div class='del'>-    #  &lt;label&gt;[url]</div><div class='del'>-    #</div><div class='del'>-    </div><div class='del'>-    def handle_special_TIDYLINK(special)</div><div class='del'>-      text = special.text</div><div class='del'>-#      unless text =~ /(\S+)\[(.*?)\]/</div><div class='del'>-      unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/ </div><div class='del'>-        return text</div><div class='del'>-      end</div><div class='del'>-      label = $1</div><div class='del'>-      url   = $2</div><div class='del'>-      gen_url(url, label)</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'>-  #####################################################################</div><div class='del'>-  #</div><div class='del'>-  # Handle common markup tasks for the various Html classes</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  module MarkUp</div><div class='del'>-</div><div class='del'>-    # Convert a string in markup format into HTML. We keep a cached</div><div class='del'>-    # SimpleMarkup object lying around after the first time we're</div><div class='del'>-    # called per object.</div><div class='del'>-</div><div class='del'>-    def markup(str, remove_para=false)</div><div class='del'>-      return '' unless str</div><div class='del'>-      unless defined? @markup</div><div class='del'>-        @markup = SM::SimpleMarkup.new</div><div class='del'>-</div><div class='del'>-        # class names, variable names, or instance variables</div><div class='del'>-        @markup.add_special(/(</div><div class='del'>-                               \w+(::\w+)*[.\#]\w+(\([\.\w+\*\/\+\-\=\&lt;\&gt;]+\))?  # A::B.meth(**) (for operator in Fortran95)</div><div class='del'>-                             | \#\w+(\([.\w\*\/\+\-\=\&lt;\&gt;]+\))?  #  meth(**) (for operator in Fortran95)</div><div class='del'>-                             | \b([A-Z]\w*(::\w+)*[.\#]\w+)  #    A::B.meth</div><div class='del'>-                             | \b([A-Z]\w+(::\w+)*)       #    A::B..</div><div class='del'>-                             | \#\w+[!?=]?                #    #meth_name </div><div class='del'>-                             | \b\w+([_\/\.]+\w+)*[!?=]?  #    meth_name</div><div class='del'>-                             )/x, </div><div class='del'>-                            :CROSSREF)</div><div class='del'>-</div><div class='del'>-        # external hyperlinks</div><div class='del'>-        @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK)</div><div class='del'>-</div><div class='del'>-        # and links of the form  &lt;text&gt;[&lt;url&gt;]</div><div class='del'>-        @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK)</div><div class='del'>-#        @markup.add_special(/\b(\S+?\[\S+?\.\S+?\])/, :TIDYLINK)</div><div class='del'>-</div><div class='del'>-      end</div><div class='del'>-      unless defined? @html_formatter</div><div class='del'>-        @html_formatter = HyperlinkHtml.new(self.path, self)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Convert leading comment markers to spaces, but only</div><div class='del'>-      # if all non-blank lines have them</div><div class='del'>-</div><div class='del'>-      if str =~ /^(?&gt;\s*)[^\#]/</div><div class='del'>-        content = str</div><div class='del'>-      else</div><div class='del'>-        content = str.gsub(/^\s*(#+)/)  { $1.tr('#',' ') }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      res = @markup.convert(content, @html_formatter)</div><div class='del'>-      if remove_para</div><div class='del'>-        res.sub!(/^&lt;p&gt;/, '')</div><div class='del'>-        res.sub!(/&lt;\/p&gt;$/, '')</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Qualify a stylesheet URL; if if +css_name+ does not begin with '/' or</div><div class='del'>-    # 'http[s]://', prepend a prefix relative to +path+. Otherwise, return it</div><div class='del'>-    # unmodified.</div><div class='del'>-</div><div class='del'>-    def style_url(path, css_name=nil)</div><div class='del'>-#      $stderr.puts "style_url( #{path.inspect}, #{css_name.inspect} )"</div><div class='del'>-      css_name ||= CSS_NAME</div><div class='del'>-      if %r{^(https?:/)?/} =~ css_name</div><div class='del'>-        return css_name</div><div class='del'>-      else</div><div class='del'>-        return HTMLGenerator.gen_url(path, css_name)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Build a webcvs URL with the given 'url' argument. URLs with a '%s' in them</div><div class='del'>-    # get the file's path sprintfed into them; otherwise they're just catenated</div><div class='del'>-    # together.</div><div class='del'>-</div><div class='del'>-    def cvs_url(url, full_path)</div><div class='del'>-      if /%s/ =~ url</div><div class='del'>-        return sprintf( url, full_path )</div><div class='del'>-      else</div><div class='del'>-        return url + full_path</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'>-  #</div><div class='del'>-  # A Context is built by the parser to represent a container: contexts</div><div class='del'>-  # hold classes, modules, methods, require lists and include lists.</div><div class='del'>-  # ClassModule and TopLevel are the context objects we process here</div><div class='del'>-  # </div><div class='del'>-  class ContextUser</div><div class='del'>-</div><div class='del'>-    include MarkUp</div><div class='del'>-</div><div class='del'>-    attr_reader :context</div><div class='del'>-    </div><div class='del'>-    def initialize(context, options)</div><div class='del'>-      @context = context</div><div class='del'>-      @options = options</div><div class='del'>-    end</div><div class='del'>-      </div><div class='del'>-    # convenience method to build a hyperlink</div><div class='del'>-    def href(link, cls, name)</div><div class='del'>-      %{&lt;a href="#{link}" class="#{cls}"&gt;#{name}&lt;/a&gt;} #"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return a reference to outselves to be used as an href=</div><div class='del'>-    # the form depends on whether we're all in one file</div><div class='del'>-    # or in multiple files</div><div class='del'>-</div><div class='del'>-    def as_href(from_path)</div><div class='del'>-      if @options.all_one_file</div><div class='del'>-        "#" + path</div><div class='del'>-      else</div><div class='del'>-        HTMLGenerator.gen_url(from_path, path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Create a list of HtmlMethod objects for each method</div><div class='del'>-    # in the corresponding context object. If the @options.show_all</div><div class='del'>-    # variable is set (corresponding to the &lt;tt&gt;--all&lt;/tt&gt; option,</div><div class='del'>-    # we include all methods, otherwise just the public ones.</div><div class='del'>-</div><div class='del'>-    def collect_methods</div><div class='del'>-      list = @context.method_list</div><div class='del'>-      unless @options.show_all</div><div class='del'>-        list = list.find_all {|m| m.visibility == :public || m.visibility == :protected || m.force_documentation }</div><div class='del'>-      end</div><div class='del'>-      @methods = list.collect {|m| HtmlMethod.new(m, self, @options) }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Build a summary list of all the methods in this context</div><div class='del'>-    def build_method_summary_list(path_prefix="")</div><div class='del'>-      collect_methods unless @methods</div><div class='del'>-      meths = @methods.sort</div><div class='del'>-      res = []</div><div class='del'>-      meths.each do |meth|</div><div class='del'>-	res &lt;&lt; {</div><div class='del'>-          "name" =&gt; CGI.escapeHTML(meth.name),</div><div class='del'>-          "aref" =&gt; "#{path_prefix}\##{meth.aref}" </div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Build a list of aliases for which we couldn't find a</div><div class='del'>-    # corresponding method</div><div class='del'>-    def build_alias_summary_list(section)</div><div class='del'>-      values = []</div><div class='del'>-      @context.aliases.each do |al|</div><div class='del'>-        next unless al.section == section</div><div class='del'>-        res = {</div><div class='del'>-          'old_name' =&gt; al.old_name,</div><div class='del'>-          'new_name' =&gt; al.new_name,</div><div class='del'>-        }</div><div class='del'>-        if al.comment &amp;&amp; !al.comment.empty?</div><div class='del'>-          res['desc'] = markup(al.comment, true)</div><div class='del'>-        end</div><div class='del'>-        values &lt;&lt; res</div><div class='del'>-      end</div><div class='del'>-      values</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Build a list of constants</div><div class='del'>-    def build_constants_summary_list(section)</div><div class='del'>-      values = []</div><div class='del'>-      @context.constants.each do |co|</div><div class='del'>-        next unless co.section == section</div><div class='del'>-        res = {</div><div class='del'>-          'name'  =&gt; co.name,</div><div class='del'>-          'value' =&gt; CGI.escapeHTML(co.value)</div><div class='del'>-        }</div><div class='del'>-        res['desc'] = markup(co.comment, true) if co.comment &amp;&amp; !co.comment.empty?</div><div class='del'>-        values &lt;&lt; res</div><div class='del'>-      end</div><div class='del'>-      values</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def build_requires_list(context)</div><div class='del'>-      potentially_referenced_list(context.requires) {|fn| [fn + ".rb"] }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def build_include_list(context)</div><div class='del'>-      potentially_referenced_list(context.includes)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Build a list from an array of &lt;i&gt;Htmlxxx&lt;/i&gt; items. Look up each</div><div class='del'>-    # in the AllReferences hash: if we find a corresponding entry,</div><div class='del'>-    # we generate a hyperlink to it, otherwise just output the name.</div><div class='del'>-    # However, some names potentially need massaging. For example,</div><div class='del'>-    # you may require a Ruby file without the .rb extension,</div><div class='del'>-    # but the file names we know about may have it. To deal with</div><div class='del'>-    # this, we pass in a block which performs the massaging,</div><div class='del'>-    # returning an array of alternative names to match</div><div class='del'>-</div><div class='del'>-    def potentially_referenced_list(array)</div><div class='del'>-      res = []</div><div class='del'>-      array.each do |i|</div><div class='del'>-        ref = AllReferences[i.name] </div><div class='del'>-#         if !ref</div><div class='del'>-#           container = @context.parent</div><div class='del'>-#           while !ref &amp;&amp; container</div><div class='del'>-#             name = container.name + "::" + i.name</div><div class='del'>-#             ref = AllReferences[name] </div><div class='del'>-#             container = container.parent</div><div class='del'>-#           end</div><div class='del'>-#         end</div><div class='del'>-</div><div class='del'>-        ref = @context.find_symbol(i.name)</div><div class='del'>-        ref = ref.viewer if ref</div><div class='del'>-</div><div class='del'>-        if !ref &amp;&amp; block_given?</div><div class='del'>-          possibles = yield(i.name)</div><div class='del'>-          while !ref and !possibles.empty?</div><div class='del'>-            ref = AllReferences[possibles.shift]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        h_name = CGI.escapeHTML(i.name)</div><div class='del'>-        if ref and ref.document_self</div><div class='del'>-          path = url(ref.path)</div><div class='del'>-          res &lt;&lt; { "name" =&gt; h_name, "aref" =&gt; path }</div><div class='del'>-        else</div><div class='del'>-          res &lt;&lt; { "name" =&gt; h_name }</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Build an array of arrays of method details. The outer array has up</div><div class='del'>-    # to six entries, public, private, and protected for both class</div><div class='del'>-    # methods, the other for instance methods. The inner arrays contain</div><div class='del'>-    # a hash for each method</div><div class='del'>-</div><div class='del'>-    def build_method_detail_list(section)</div><div class='del'>-      outer = []</div><div class='del'>-</div><div class='del'>-      methods = @methods.sort</div><div class='del'>-      for singleton in [true, false]</div><div class='del'>-        for vis in [ :public, :protected, :private ] </div><div class='del'>-          res = []</div><div class='del'>-          methods.each do |m|</div><div class='del'>-            if m.section == section and</div><div class='del'>-                m.document_self and </div><div class='del'>-                m.visibility == vis and </div><div class='del'>-                m.singleton == singleton</div><div class='del'>-              row = {}</div><div class='del'>-              if m.call_seq</div><div class='del'>-                row["callseq"] = m.call_seq.gsub(/-&gt;/, '&amp;rarr;')</div><div class='del'>-              else</div><div class='del'>-                row["name"]        = CGI.escapeHTML(m.name)</div><div class='del'>-                row["params"]      = m.params</div><div class='del'>-              end</div><div class='del'>-              desc = m.description.strip</div><div class='del'>-              row["m_desc"]      = desc unless desc.empty?</div><div class='del'>-              row["aref"]        = m.aref</div><div class='del'>-              row["visibility"]  = m.visibility.to_s</div><div class='del'>-</div><div class='del'>-              alias_names = []</div><div class='del'>-              m.aliases.each do |other|</div><div class='del'>-                if other.viewer   # won't be if the alias is private</div><div class='del'>-                  alias_names &lt;&lt; {</div><div class='del'>-                    'name' =&gt; other.name,</div><div class='del'>-                    'aref'  =&gt; other.viewer.as_href(path)</div><div class='del'>-                  } </div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              unless alias_names.empty?</div><div class='del'>-                row["aka"] = alias_names</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              if @options.inline_source</div><div class='del'>-                code = m.source_code</div><div class='del'>-                row["sourcecode"] = code if code</div><div class='del'>-              else</div><div class='del'>-                code = m.src_url</div><div class='del'>-                if code</div><div class='del'>-                  row["codeurl"] = code</div><div class='del'>-                  row["imgurl"]  = m.img_url</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-              res &lt;&lt; row</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          if res.size &gt; 0 </div><div class='del'>-            outer &lt;&lt; {</div><div class='del'>-              "type"    =&gt; vis.to_s.capitalize,</div><div class='del'>-              "category"    =&gt; singleton ? "Class" : "Instance",</div><div class='del'>-              "methods" =&gt; res</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      outer</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Build the structured list of classes and modules contained</div><div class='del'>-    # in this context. </div><div class='del'>-</div><div class='del'>-    def build_class_list(level, from, section, infile=nil)</div><div class='del'>-      res = ""</div><div class='del'>-      prefix = "&amp;nbsp;&amp;nbsp;::" * level;</div><div class='del'>-</div><div class='del'>-      from.modules.sort.each do |mod|</div><div class='del'>-        next unless mod.section == section</div><div class='del'>-        next if infile &amp;&amp; !mod.defined_in?(infile)</div><div class='del'>-        if mod.document_self</div><div class='del'>-          res &lt;&lt; </div><div class='del'>-            prefix &lt;&lt;</div><div class='del'>-            "Module " &lt;&lt;</div><div class='del'>-            href(url(mod.viewer.path), "link", mod.full_name) &lt;&lt;</div><div class='del'>-            "&lt;br /&gt;\n" &lt;&lt;</div><div class='del'>-            build_class_list(level + 1, mod, section, infile)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      from.classes.sort.each do |cls|</div><div class='del'>-        next unless cls.section == section</div><div class='del'>-        next if infile &amp;&amp; !cls.defined_in?(infile)</div><div class='del'>-        if cls.document_self</div><div class='del'>-          res      &lt;&lt;</div><div class='del'>-            prefix &lt;&lt; </div><div class='del'>-            "Class " &lt;&lt;</div><div class='del'>-            href(url(cls.viewer.path), "link", cls.full_name) &lt;&lt;</div><div class='del'>-            "&lt;br /&gt;\n" &lt;&lt;</div><div class='del'>-            build_class_list(level + 1, cls, section, infile)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def url(target)</div><div class='del'>-      HTMLGenerator.gen_url(path, target)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def aref_to(target)</div><div class='del'>-      if @options.all_one_file</div><div class='del'>-        "#" + target</div><div class='del'>-      else</div><div class='del'>-        url(target)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def document_self</div><div class='del'>-      @context.document_self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def diagram_reference(diagram)</div><div class='del'>-      res = diagram.gsub(/((?:src|href)=")(.*?)"/) {</div><div class='del'>-        $1 + url($2) + '"'</div><div class='del'>-      }</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Find a symbol in ourselves or our parent</div><div class='del'>-    def find_symbol(symbol, method=nil)</div><div class='del'>-      res = @context.find_symbol(symbol, method)</div><div class='del'>-      if res</div><div class='del'>-        res = res.viewer</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # create table of contents if we contain sections</div><div class='del'>-      </div><div class='del'>-    def add_table_of_sections</div><div class='del'>-      toc = []</div><div class='del'>-      @context.sections.each do |section|</div><div class='del'>-        if section.title</div><div class='del'>-          toc &lt;&lt; {</div><div class='del'>-            'secname' =&gt; section.title,</div><div class='del'>-            'href'    =&gt; section.sequence</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      @values['toc'] = toc unless toc.empty?</div><div class='del'>-    end</div><div class='del'>-</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'>-  # Wrap a ClassModule context</div><div class='del'>-</div><div class='del'>-  class HtmlClass &lt; ContextUser</div><div class='del'>-</div><div class='del'>-    attr_reader :path</div><div class='del'>-</div><div class='del'>-    def initialize(context, html_file, prefix, options)</div><div class='del'>-      super(context, options)</div><div class='del'>-</div><div class='del'>-      @html_file = html_file</div><div class='del'>-      @is_module = context.is_module?</div><div class='del'>-      @values    = {}</div><div class='del'>-</div><div class='del'>-      context.viewer = self</div><div class='del'>-</div><div class='del'>-      if options.all_one_file</div><div class='del'>-        @path = context.full_name</div><div class='del'>-      else</div><div class='del'>-        @path = http_url(context.full_name, prefix)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      collect_methods</div><div class='del'>-</div><div class='del'>-      AllReferences.add(name, self)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return the relative file name to store this class in,</div><div class='del'>-    # which is also its url</div><div class='del'>-    def http_url(full_name, prefix)</div><div class='del'>-      path = full_name.dup</div><div class='del'>-      if path['&lt;&lt;']</div><div class='del'>-        path.gsub!(/&lt;&lt;\s*(\w*)/) { "from-#$1" }</div><div class='del'>-      end</div><div class='del'>-      File.join(prefix, path.split("::")) + ".html"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def name</div><div class='del'>-      @context.full_name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parent_name</div><div class='del'>-      @context.parent.full_name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def index_name</div><div class='del'>-      name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write_on(f)</div><div class='del'>-      value_hash</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::BODY,</div><div class='del'>-                                      RDoc::Page::CLASS_PAGE,</div><div class='del'>-                                      RDoc::Page::METHOD_LIST)</div><div class='del'>-      template.write_html_on(f, @values)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def value_hash</div><div class='del'>-      class_attribute_values</div><div class='del'>-      add_table_of_sections</div><div class='del'>-</div><div class='del'>-      @values["charset"] = @options.charset</div><div class='del'>-      @values["style_url"] = style_url(path, @options.css)</div><div class='del'>-</div><div class='del'>-      d = markup(@context.comment)</div><div class='del'>-      @values["description"] = d unless d.empty?</div><div class='del'>-</div><div class='del'>-      ml = build_method_summary_list</div><div class='del'>-      @values["methods"] = ml unless ml.empty?</div><div class='del'>-</div><div class='del'>-      il = build_include_list(@context)</div><div class='del'>-      @values["includes"] = il unless il.empty?</div><div class='del'>-</div><div class='del'>-      @values["sections"] = @context.sections.map do |section|</div><div class='del'>-</div><div class='del'>-        secdata = {</div><div class='del'>-          "sectitle" =&gt; section.title,</div><div class='del'>-          "secsequence" =&gt; section.sequence,</div><div class='del'>-          "seccomment" =&gt; markup(section.comment)</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        al = build_alias_summary_list(section)</div><div class='del'>-        secdata["aliases"] = al unless al.empty?</div><div class='del'>-        </div><div class='del'>-        co = build_constants_summary_list(section)</div><div class='del'>-        secdata["constants"] = co unless co.empty?</div><div class='del'>-        </div><div class='del'>-        al = build_attribute_list(section)</div><div class='del'>-        secdata["attributes"] = al unless al.empty?</div><div class='del'>-        </div><div class='del'>-        cl = build_class_list(0, @context, section)</div><div class='del'>-        secdata["classlist"] = cl unless cl.empty?</div><div class='del'>-        </div><div class='del'>-        mdl = build_method_detail_list(section)</div><div class='del'>-        secdata["method_list"] = mdl unless mdl.empty?</div><div class='del'>-</div><div class='del'>-        secdata</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @values</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def build_attribute_list(section)</div><div class='del'>-      atts = @context.attributes.sort</div><div class='del'>-      res = []</div><div class='del'>-      atts.each do |att|</div><div class='del'>-        next unless att.section == section</div><div class='del'>-        if att.visibility == :public || att.visibility == :protected || @options.show_all</div><div class='del'>-          entry = {</div><div class='del'>-            "name"   =&gt; CGI.escapeHTML(att.name), </div><div class='del'>-            "rw"     =&gt; att.rw, </div><div class='del'>-            "a_desc" =&gt; markup(att.comment, true)</div><div class='del'>-          }</div><div class='del'>-          unless att.visibility == :public || att.visibility == :protected</div><div class='del'>-            entry["rw"] &lt;&lt; "-"</div><div class='del'>-          end</div><div class='del'>-          res &lt;&lt; entry</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def class_attribute_values</div><div class='del'>-      h_name = CGI.escapeHTML(name)</div><div class='del'>-</div><div class='del'>-      @values["classmod"]  = @is_module ? "Module" : "Class"</div><div class='del'>-      @values["title"]     = "#{@values['classmod']}: #{h_name}"</div><div class='del'>-</div><div class='del'>-      c = @context</div><div class='del'>-      c = c.parent while c and !c.diagram</div><div class='del'>-      if c &amp;&amp; c.diagram</div><div class='del'>-        @values["diagram"] = diagram_reference(c.diagram)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @values["full_name"] = h_name</div><div class='del'>-</div><div class='del'>-      parent_class = @context.superclass</div><div class='del'>-</div><div class='del'>-      if parent_class</div><div class='del'>-	@values["parent"] = CGI.escapeHTML(parent_class)</div><div class='del'>-</div><div class='del'>-	if parent_name</div><div class='del'>-	  lookup = parent_name + "::" + parent_class</div><div class='del'>-	else</div><div class='del'>-	  lookup = parent_class</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	parent_url = AllReferences[lookup] || AllReferences[parent_class]</div><div class='del'>-</div><div class='del'>-	if parent_url and parent_url.document_self</div><div class='del'>-	  @values["par_url"] = aref_to(parent_url.path)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      files = []</div><div class='del'>-      @context.in_files.each do |f|</div><div class='del'>-        res = {}</div><div class='del'>-        full_path = CGI.escapeHTML(f.file_absolute_name)</div><div class='del'>-</div><div class='del'>-        res["full_path"]     = full_path</div><div class='del'>-        res["full_path_url"] = aref_to(f.viewer.path) if f.document_self</div><div class='del'>-</div><div class='del'>-        if @options.webcvs</div><div class='del'>-          res["cvsurl"] = cvs_url( @options.webcvs, full_path )</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        files &lt;&lt; res</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @values['infiles'] = files</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def &lt;=&gt;(other)</div><div class='del'>-      self.name &lt;=&gt; other.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'>-  # Handles the mapping of a file's information to HTML. In reality,</div><div class='del'>-  # a file corresponds to a +TopLevel+ object, containing modules,</div><div class='del'>-  # classes, and top-level methods. In theory it _could_ contain</div><div class='del'>-  # attributes and aliases, but we ignore these for now.</div><div class='del'>-</div><div class='del'>-  class HtmlFile &lt; ContextUser</div><div class='del'>-</div><div class='del'>-    attr_reader :path</div><div class='del'>-    attr_reader :name</div><div class='del'>-</div><div class='del'>-    def initialize(context, options, file_dir)</div><div class='del'>-      super(context, options)</div><div class='del'>-</div><div class='del'>-      @values = {}</div><div class='del'>-</div><div class='del'>-      if options.all_one_file</div><div class='del'>-        @path = filename_to_label</div><div class='del'>-      else</div><div class='del'>-        @path = http_url(file_dir)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @name = @context.file_relative_name</div><div class='del'>-</div><div class='del'>-      collect_methods</div><div class='del'>-      AllReferences.add(name, self)</div><div class='del'>-      context.viewer = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def http_url(file_dir)</div><div class='del'>-      File.join(file_dir, @context.file_relative_name.tr('.', '_')) +</div><div class='del'>-        ".html"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def filename_to_label</div><div class='del'>-      @context.file_relative_name.gsub(/%|\/|\?|\#/) {|s| '%' + ("%x" % s[0]) }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def index_name</div><div class='del'>-      name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parent_name</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def value_hash</div><div class='del'>-      file_attribute_values</div><div class='del'>-      add_table_of_sections</div><div class='del'>-</div><div class='del'>-      @values["charset"]   = @options.charset</div><div class='del'>-      @values["href"]      = path</div><div class='del'>-      @values["style_url"] = style_url(path, @options.css)</div><div class='del'>-</div><div class='del'>-      if @context.comment</div><div class='del'>-        d = markup(@context.comment)</div><div class='del'>-        @values["description"] = d if d.size &gt; 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ml = build_method_summary_list</div><div class='del'>-      @values["methods"] = ml unless ml.empty?</div><div class='del'>-</div><div class='del'>-      il = build_include_list(@context)</div><div class='del'>-      @values["includes"] = il unless il.empty?</div><div class='del'>-</div><div class='del'>-      rl = build_requires_list(@context)</div><div class='del'>-      @values["requires"] = rl unless rl.empty?</div><div class='del'>-</div><div class='del'>-      if @options.promiscuous</div><div class='del'>-        file_context = nil</div><div class='del'>-      else</div><div class='del'>-        file_context = @context</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      @values["sections"] = @context.sections.map do |section|</div><div class='del'>-</div><div class='del'>-        secdata = {</div><div class='del'>-          "sectitle" =&gt; section.title,</div><div class='del'>-          "secsequence" =&gt; section.sequence,</div><div class='del'>-          "seccomment" =&gt; markup(section.comment)</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        cl = build_class_list(0, @context, section, file_context)</div><div class='del'>-        @values["classlist"] = cl unless cl.empty?</div><div class='del'>-</div><div class='del'>-        mdl = build_method_detail_list(section)</div><div class='del'>-        secdata["method_list"] = mdl unless mdl.empty?</div><div class='del'>-</div><div class='del'>-        al = build_alias_summary_list(section)</div><div class='del'>-        secdata["aliases"] = al unless al.empty?</div><div class='del'>-        </div><div class='del'>-        co = build_constants_summary_list(section)</div><div class='del'>-        @values["constants"] = co unless co.empty?</div><div class='del'>-</div><div class='del'>-        secdata</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      @values</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def write_on(f)</div><div class='del'>-      value_hash</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::BODY,</div><div class='del'>-                                  RDoc::Page::FILE_PAGE,</div><div class='del'>-                                  RDoc::Page::METHOD_LIST)</div><div class='del'>-      template.write_html_on(f, @values)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def file_attribute_values</div><div class='del'>-      full_path = @context.file_absolute_name</div><div class='del'>-      short_name = File.basename(full_path)</div><div class='del'>-      </div><div class='del'>-      @values["title"] = CGI.escapeHTML("File: #{short_name}")</div><div class='del'>-</div><div class='del'>-      if @context.diagram</div><div class='del'>-        @values["diagram"] = diagram_reference(@context.diagram)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @values["short_name"]   = CGI.escapeHTML(short_name)</div><div class='del'>-      @values["full_path"]    = CGI.escapeHTML(full_path)</div><div class='del'>-      @values["dtm_modified"] = @context.file_stat.mtime.to_s</div><div class='del'>-</div><div class='del'>-      if @options.webcvs</div><div class='del'>-        @values["cvsurl"] = cvs_url( @options.webcvs, @values["full_path"] )</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def &lt;=&gt;(other)</div><div class='del'>-      self.name &lt;=&gt; other.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'>-  class HtmlMethod</div><div class='del'>-    include MarkUp</div><div class='del'>-</div><div class='del'>-    attr_reader :context</div><div class='del'>-    attr_reader :src_url</div><div class='del'>-    attr_reader :img_url</div><div class='del'>-    attr_reader :source_code</div><div class='del'>-</div><div class='del'>-    @@seq = "M000000"</div><div class='del'>-</div><div class='del'>-    @@all_methods = []</div><div class='del'>-</div><div class='del'>-    def HtmlMethod::reset</div><div class='del'>-      @@all_methods = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(context, html_class, options)</div><div class='del'>-      @context    = context</div><div class='del'>-      @html_class = html_class</div><div class='del'>-      @options    = options</div><div class='del'>-      @@seq       = @@seq.succ</div><div class='del'>-      @seq        = @@seq</div><div class='del'>-      @@all_methods &lt;&lt; self</div><div class='del'>-</div><div class='del'>-      context.viewer = self</div><div class='del'>-</div><div class='del'>-      if (ts = @context.token_stream)</div><div class='del'>-        @source_code = markup_code(ts)</div><div class='del'>-        unless @options.inline_source</div><div class='del'>-          @src_url = create_source_code_file(@source_code)</div><div class='del'>-          @img_url = HTMLGenerator.gen_url(path, 'source.png')</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      AllReferences.add(name, self)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # return a reference to outselves to be used as an href=</div><div class='del'>-    # the form depends on whether we're all in one file</div><div class='del'>-    # or in multiple files</div><div class='del'>-</div><div class='del'>-    def as_href(from_path)</div><div class='del'>-      if @options.all_one_file</div><div class='del'>-        "#" + path</div><div class='del'>-      else</div><div class='del'>-        HTMLGenerator.gen_url(from_path, path)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def name</div><div class='del'>-      @context.name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def section</div><div class='del'>-      @context.section</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def index_name</div><div class='del'>-      "#{@context.name} (#{@html_class.name})"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parent_name</div><div class='del'>-      if @context.parent.parent</div><div class='del'>-        @context.parent.parent.full_name</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 aref</div><div class='del'>-      @seq</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def path</div><div class='del'>-      if @options.all_one_file</div><div class='del'>-	aref</div><div class='del'>-      else</div><div class='del'>-	@html_class.path + "#" + aref</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def description</div><div class='del'>-      markup(@context.comment)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def visibility</div><div class='del'>-      @context.visibility</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def singleton</div><div class='del'>-      @context.singleton</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def call_seq</div><div class='del'>-      cs = @context.call_seq</div><div class='del'>-      if cs</div><div class='del'>-        cs.gsub(/\n/, "&lt;br /&gt;\n")</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 params</div><div class='del'>-      # params coming from a call-seq in 'C' will start with the</div><div class='del'>-      # method name</div><div class='del'>-      p = @context.params</div><div class='del'>-      if p !~ /^\w/</div><div class='del'>-        p = @context.params.gsub(/\s*\#.*/, '')</div><div class='del'>-        p = p.tr("\n", " ").squeeze(" ")</div><div class='del'>-        p = "(" + p + ")" unless p[0] == ?(</div><div class='del'>-        </div><div class='del'>-        if (block = @context.block_params)</div><div class='del'>-         # If this method has explicit block parameters, remove any</div><div class='del'>-         # explicit &amp;block</div><div class='del'>-</div><div class='del'>-         p.sub!(/,?\s*&amp;\w+/, '')</div><div class='del'>-</div><div class='del'>-          block.gsub!(/\s*\#.*/, '')</div><div class='del'>-          block = block.tr("\n", " ").squeeze(" ")</div><div class='del'>-          if block[0] == ?(</div><div class='del'>-            block.sub!(/^\(/, '').sub!(/\)/, '')</div><div class='del'>-          end</div><div class='del'>-          p &lt;&lt; " {|#{block.strip}| ...}"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      CGI.escapeHTML(p)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def create_source_code_file(code_body)</div><div class='del'>-      meth_path = @html_class.path.sub(/\.html$/, '.src')</div><div class='del'>-      File.makedirs(meth_path)</div><div class='del'>-      file_path = File.join(meth_path, @seq) + ".html"</div><div class='del'>-</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::SRC_PAGE)</div><div class='del'>-      File.open(file_path, "w") do |f|</div><div class='del'>-        values = {</div><div class='del'>-          'title'     =&gt; CGI.escapeHTML(index_name),</div><div class='del'>-          'code'      =&gt; code_body,</div><div class='del'>-          'style_url' =&gt; style_url(file_path, @options.css),</div><div class='del'>-          'charset'   =&gt; @options.charset</div><div class='del'>-        }</div><div class='del'>-        template.write_html_on(f, values)</div><div class='del'>-      end</div><div class='del'>-      HTMLGenerator.gen_url(path, file_path)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def HtmlMethod.all_methods</div><div class='del'>-      @@all_methods</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def &lt;=&gt;(other)</div><div class='del'>-      @context &lt;=&gt; other.context</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Given a sequence of source tokens, mark up the source code</div><div class='del'>-    # to make it look purty.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def markup_code(tokens)</div><div class='del'>-      src = ""</div><div class='del'>-      tokens.each do |t|</div><div class='del'>-        next unless t</div><div class='del'>-        #    p t.class</div><div class='del'>-#        style = STYLE_MAP[t.class]</div><div class='del'>-        style = case t</div><div class='del'>-                when RubyToken::TkCONSTANT then "ruby-constant"</div><div class='del'>-                when RubyToken::TkKW       then "ruby-keyword kw"</div><div class='del'>-                when RubyToken::TkIVAR     then "ruby-ivar"</div><div class='del'>-                when RubyToken::TkOp       then "ruby-operator"</div><div class='del'>-                when RubyToken::TkId       then "ruby-identifier"</div><div class='del'>-                when RubyToken::TkNode     then "ruby-node"</div><div class='del'>-                when RubyToken::TkCOMMENT  then "ruby-comment cmt"</div><div class='del'>-                when RubyToken::TkREGEXP   then "ruby-regexp re"</div><div class='del'>-                when RubyToken::TkSTRING   then "ruby-value str"</div><div class='del'>-                when RubyToken::TkVal      then "ruby-value"</div><div class='del'>-                else</div><div class='del'>-                    nil</div><div class='del'>-                end</div><div class='del'>-</div><div class='del'>-        text = CGI.escapeHTML(t.text)</div><div class='del'>-</div><div class='del'>-        if style</div><div class='del'>-          src &lt;&lt; "&lt;span class=\"#{style}\"&gt;#{text}&lt;/span&gt;"</div><div class='del'>-        else</div><div class='del'>-          src &lt;&lt; text</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      add_line_numbers(src) if Options.instance.include_line_numbers</div><div class='del'>-      src</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # we rely on the fact that the first line of a source code</div><div class='del'>-    # listing has </div><div class='del'>-    #    # File xxxxx, line dddd</div><div class='del'>-</div><div class='del'>-    def add_line_numbers(src)</div><div class='del'>-      if src =~ /\A.*, line (\d+)/</div><div class='del'>-        first = $1.to_i - 1</div><div class='del'>-        last  = first + src.count("\n")</div><div class='del'>-        size = last.to_s.length</div><div class='del'>-        real_fmt = "%#{size}d: "</div><div class='del'>-        fmt = " " * (size+2)</div><div class='del'>-        src.gsub!(/^/) do</div><div class='del'>-          res = sprintf(fmt, first) </div><div class='del'>-          first += 1</div><div class='del'>-          fmt = real_fmt</div><div class='del'>-          res</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def document_self</div><div class='del'>-      @context.document_self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def aliases</div><div class='del'>-      @context.aliases</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_symbol(symbol, method=nil)</div><div class='del'>-      res = @context.parent.find_symbol(symbol, method)</div><div class='del'>-      if res</div><div class='del'>-        res = res.viewer</div><div class='del'>-      end</div><div class='del'>-      res</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 HTMLGenerator</div><div class='del'>-</div><div class='del'>-    include MarkUp</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # convert a target url to one that is relative to a given</div><div class='del'>-    # path</div><div class='del'>-    </div><div class='del'>-    def HTMLGenerator.gen_url(path, target)</div><div class='del'>-      from          = File.dirname(path)</div><div class='del'>-      to, to_file   = File.split(target)</div><div class='del'>-      </div><div class='del'>-      from = from.split("/")</div><div class='del'>-      to   = to.split("/")</div><div class='del'>-      </div><div class='del'>-      while from.size &gt; 0 and to.size &gt; 0 and from[0] == to[0]</div><div class='del'>-        from.shift</div><div class='del'>-        to.shift</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      from.fill("..")</div><div class='del'>-      from.concat(to)</div><div class='del'>-      from &lt;&lt; to_file</div><div class='del'>-      File.join(*from)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Generators may need to return specific subclasses depending</div><div class='del'>-    # on the options they are passed. Because of this</div><div class='del'>-    # we create them using a factory</div><div class='del'>-</div><div class='del'>-    def HTMLGenerator.for(options)</div><div class='del'>-      AllReferences::reset</div><div class='del'>-      HtmlMethod::reset</div><div class='del'>-</div><div class='del'>-      if options.all_one_file</div><div class='del'>-        HTMLGeneratorInOne.new(options)</div><div class='del'>-      else</div><div class='del'>-        HTMLGenerator.new(options)</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'>-      protected :new</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set up a new HTML generator. Basically all we do here is load</div><div class='del'>-    # up the correct output temlate</div><div class='del'>-</div><div class='del'>-    def initialize(options) #:not-new:</div><div class='del'>-      @options    = options</div><div class='del'>-      load_html_template</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Build the initial indices and output objects</div><div class='del'>-    # based on an array of TopLevel objects containing</div><div class='del'>-    # the extracted information. </div><div class='del'>-</div><div class='del'>-    def generate(toplevels)</div><div class='del'>-      @toplevels  = toplevels</div><div class='del'>-      @files      = []</div><div class='del'>-      @classes    = []</div><div class='del'>-</div><div class='del'>-      write_style_sheet</div><div class='del'>-      gen_sub_directories()</div><div class='del'>-      build_indices</div><div class='del'>-      generate_html</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Load up the HTML template specified in the options.</div><div class='del'>-    # If the template name contains a slash, use it literally</div><div class='del'>-    #</div><div class='del'>-    def load_html_template</div><div class='del'>-      template = @options.template</div><div class='del'>-      unless template =~ %r{/|\\}</div><div class='del'>-        template = File.join("rdoc/generators/template",</div><div class='del'>-                             @options.generator.key, template)</div><div class='del'>-      end</div><div class='del'>-      require template</div><div class='del'>-      extend RDoc::Page</div><div class='del'>-    rescue LoadError</div><div class='del'>-      $stderr.puts "Could not find HTML template '#{template}'"</div><div class='del'>-      exit 99</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Write out the style sheet used by the main frames</div><div class='del'>-    #</div><div class='del'>-    </div><div class='del'>-    def write_style_sheet</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::STYLE)</div><div class='del'>-      unless @options.css</div><div class='del'>-        File.open(CSS_NAME, "w") do |f|</div><div class='del'>-          values = { "fonts" =&gt; RDoc::Page::FONTS }</div><div class='del'>-          template.write_html_on(f, values)</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'>-    # See the comments at the top for a description of the</div><div class='del'>-    # directory structure</div><div class='del'>-</div><div class='del'>-    def gen_sub_directories</div><div class='del'>-      File.makedirs(FILE_DIR, CLASS_DIR)</div><div class='del'>-    rescue </div><div class='del'>-      $stderr.puts $!.message</div><div class='del'>-      exit 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Generate:</div><div class='del'>-    #</div><div class='del'>-    # * a list of HtmlFile objects for each TopLevel object.</div><div class='del'>-    # * a list of HtmlClass objects for each first level</div><div class='del'>-    #   class or module in the TopLevel objects</div><div class='del'>-    # * a complete list of all hyperlinkable terms (file,</div><div class='del'>-    #   class, module, and method names)</div><div class='del'>-</div><div class='del'>-    def build_indices</div><div class='del'>-</div><div class='del'>-      @toplevels.each do |toplevel|</div><div class='del'>-        @files &lt;&lt; HtmlFile.new(toplevel, @options, FILE_DIR)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      RDoc::TopLevel.all_classes_and_modules.each do |cls|</div><div class='del'>-        build_class_list(cls, @files[0], CLASS_DIR)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def build_class_list(from, html_file, class_dir)</div><div class='del'>-      @classes &lt;&lt; HtmlClass.new(from, html_file, class_dir, @options)</div><div class='del'>-      from.each_classmodule do |mod|</div><div class='del'>-        build_class_list(mod, html_file, class_dir)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Generate all the HTML</div><div class='del'>-    #</div><div class='del'>-    def generate_html</div><div class='del'>-      # the individual descriptions for files and classes</div><div class='del'>-      gen_into(@files)</div><div class='del'>-      gen_into(@classes)</div><div class='del'>-      # and the index files</div><div class='del'>-      gen_file_index</div><div class='del'>-      gen_class_index</div><div class='del'>-      gen_method_index</div><div class='del'>-      gen_main_index</div><div class='del'>-      </div><div class='del'>-      # this method is defined in the template file</div><div class='del'>-      write_extra_pages if defined? write_extra_pages</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_into(list)</div><div class='del'>-      list.each do |item|</div><div class='del'>-        if item.document_self</div><div class='del'>-          op_file = item.path</div><div class='del'>-          File.makedirs(File.dirname(op_file))</div><div class='del'>-          File.open(op_file, "w") { |file| item.write_on(file) }</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'>-    def gen_file_index</div><div class='del'>-      gen_an_index(@files, 'Files', </div><div class='del'>-                   RDoc::Page::FILE_INDEX, </div><div class='del'>-                   "fr_file_index.html")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_class_index</div><div class='del'>-      gen_an_index(@classes, 'Classes',</div><div class='del'>-                   RDoc::Page::CLASS_INDEX,</div><div class='del'>-                   "fr_class_index.html")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_method_index</div><div class='del'>-      gen_an_index(HtmlMethod.all_methods, 'Methods', </div><div class='del'>-                   RDoc::Page::METHOD_INDEX,</div><div class='del'>-                   "fr_method_index.html")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    def gen_an_index(collection, title, template, filename)</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::FR_INDEX_BODY, template)</div><div class='del'>-      res = []</div><div class='del'>-      collection.sort.each do |f|</div><div class='del'>-        if f.document_self</div><div class='del'>-          res &lt;&lt; { "href" =&gt; f.path, "name" =&gt; f.index_name }</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      values = {</div><div class='del'>-        "entries"    =&gt; res,</div><div class='del'>-        'list_title' =&gt; CGI.escapeHTML(title),</div><div class='del'>-        'index_url'  =&gt; main_url,</div><div class='del'>-        'charset'    =&gt; @options.charset,</div><div class='del'>-        'style_url'  =&gt; style_url('', @options.css),</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      File.open(filename, "w") do |f|</div><div class='del'>-        template.write_html_on(f, values)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The main index page is mostly a template frameset, but includes</div><div class='del'>-    # the initial page. If the &lt;tt&gt;--main&lt;/tt&gt; option was given,</div><div class='del'>-    # we use this as our main page, otherwise we use the</div><div class='del'>-    # first file specified on the command line.</div><div class='del'>-</div><div class='del'>-    def gen_main_index</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::INDEX)</div><div class='del'>-      File.open("index.html", "w") do |f|</div><div class='del'>-        values = {</div><div class='del'>-          "initial_page" =&gt; main_url,</div><div class='del'>-          'title'        =&gt; CGI.escapeHTML(@options.title),</div><div class='del'>-          'charset'      =&gt; @options.charset</div><div class='del'>-        }</div><div class='del'>-        if @options.inline_source</div><div class='del'>-          values['inline_source'] = true</div><div class='del'>-        end</div><div class='del'>-        template.write_html_on(f, values)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return the url of the main page</div><div class='del'>-    def main_url</div><div class='del'>-      main_page = @options.main_page</div><div class='del'>-      ref = nil</div><div class='del'>-      if main_page</div><div class='del'>-        ref = AllReferences[main_page]</div><div class='del'>-        if ref</div><div class='del'>-          ref = ref.path</div><div class='del'>-        else</div><div class='del'>-          $stderr.puts "Could not find main page #{main_page}"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      unless ref</div><div class='del'>-        for file in @files</div><div class='del'>-          if file.document_self</div><div class='del'>-            ref = file.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'>-      unless ref</div><div class='del'>-        $stderr.puts "Couldn't find anything to document"</div><div class='del'>-        $stderr.puts "Perhaps you've used :stopdoc: in all classes"</div><div class='del'>-        exit(1)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ref</div><div class='del'>-    end</div><div class='del'>-</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'>-</div><div class='del'>-</div><div class='del'>-  class HTMLGeneratorInOne &lt; HTMLGenerator</div><div class='del'>-</div><div class='del'>-    def initialize(*args)</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Build the initial indices and output objects</div><div class='del'>-    # based on an array of TopLevel objects containing</div><div class='del'>-    # the extracted information. </div><div class='del'>-</div><div class='del'>-    def generate(info)</div><div class='del'>-      @toplevels  = info</div><div class='del'>-      @files      = []</div><div class='del'>-      @classes    = []</div><div class='del'>-      @hyperlinks = {}</div><div class='del'>-</div><div class='del'>-      build_indices</div><div class='del'>-      generate_xml</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Generate:</div><div class='del'>-    #</div><div class='del'>-    # * a list of HtmlFile objects for each TopLevel object.</div><div class='del'>-    # * a list of HtmlClass objects for each first level</div><div class='del'>-    #   class or module in the TopLevel objects</div><div class='del'>-    # * a complete list of all hyperlinkable terms (file,</div><div class='del'>-    #   class, module, and method names)</div><div class='del'>-</div><div class='del'>-    def build_indices</div><div class='del'>-</div><div class='del'>-      @toplevels.each do |toplevel|</div><div class='del'>-        @files &lt;&lt; HtmlFile.new(toplevel, @options, FILE_DIR)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      RDoc::TopLevel.all_classes_and_modules.each do |cls|</div><div class='del'>-        build_class_list(cls, @files[0], CLASS_DIR)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def build_class_list(from, html_file, class_dir)</div><div class='del'>-      @classes &lt;&lt; HtmlClass.new(from, html_file, class_dir, @options)</div><div class='del'>-      from.each_classmodule do |mod|</div><div class='del'>-        build_class_list(mod, html_file, class_dir)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Generate all the HTML. For the one-file case, we generate</div><div class='del'>-    # all the information in to one big hash</div><div class='del'>-    #</div><div class='del'>-    def generate_xml</div><div class='del'>-      values = { </div><div class='del'>-        'charset' =&gt; @options.charset,</div><div class='del'>-        'files'   =&gt; gen_into(@files),</div><div class='del'>-        'classes' =&gt; gen_into(@classes),</div><div class='del'>-        'title'        =&gt; CGI.escapeHTML(@options.title),</div><div class='del'>-      }</div><div class='del'>-      </div><div class='del'>-      # this method is defined in the template file</div><div class='del'>-      write_extra_pages if defined? write_extra_pages</div><div class='del'>-</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::ONE_PAGE)</div><div class='del'>-</div><div class='del'>-      if @options.op_name</div><div class='del'>-        opfile = File.open(@options.op_name, "w")</div><div class='del'>-      else</div><div class='del'>-        opfile = $stdout</div><div class='del'>-      end</div><div class='del'>-      template.write_html_on(opfile, values)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_into(list)</div><div class='del'>-      res = []</div><div class='del'>-      list.each do |item|</div><div class='del'>-        res &lt;&lt; item.value_hash</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_file_index</div><div class='del'>-      gen_an_index(@files, 'Files')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_class_index</div><div class='del'>-      gen_an_index(@classes, 'Classes')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_method_index</div><div class='del'>-      gen_an_index(HtmlMethod.all_methods, 'Methods')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    def gen_an_index(collection, title)</div><div class='del'>-      res = []</div><div class='del'>-      collection.sort.each do |f|</div><div class='del'>-        if f.document_self</div><div class='del'>-          res &lt;&lt; { "href" =&gt; f.path, "name" =&gt; f.index_name }</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      return {</div><div class='del'>-        "entries" =&gt; res,</div><div class='del'>-        'list_title' =&gt; title,</div><div class='del'>-        'index_url'  =&gt; main_url,</div><div class='del'>-      }</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/lib/rdoc/generators/ri_generator.rb b/lib/rdoc/generators/ri_generator.rb<br/>deleted file mode 100644<br/>index c7d0bbd8f0..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/ri_generator.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/ri_generator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,268 +0,0 @@</div><div class='del'>-# We're responsible for generating all the HTML files</div><div class='del'>-# from the object tree defined in code_objects.rb. We</div><div class='del'>-# generate:</div><div class='del'>-#</div><div class='del'>-# [files]   an html file for each input file given. These</div><div class='del'>-#           input files appear as objects of class</div><div class='del'>-#           TopLevel</div><div class='del'>-#</div><div class='del'>-# [classes] an html file for each class or module encountered.</div><div class='del'>-#           These classes are not grouped by file: if a file</div><div class='del'>-#           contains four classes, we'll generate an html</div><div class='del'>-#           file for the file itself, and four html files </div><div class='del'>-#           for the individual classes. </div><div class='del'>-#</div><div class='del'>-# [indices] we generate three indices for files, classes,</div><div class='del'>-#           and methods. These are displayed in a browser</div><div class='del'>-#           like window with three index panes across the</div><div class='del'>-#           top and the selected description below</div><div class='del'>-#</div><div class='del'>-# Method descriptions appear in whatever entity (file, class,</div><div class='del'>-# or module) that contains them.</div><div class='del'>-#</div><div class='del'>-# We generate files in a structure below a specified subdirectory,</div><div class='del'>-# normally +doc+.</div><div class='del'>-#</div><div class='del'>-#  opdir</div><div class='del'>-#     |</div><div class='del'>-#     |___ files</div><div class='del'>-#     |       |__  per file summaries</div><div class='del'>-#     |</div><div class='del'>-#     |___ classes</div><div class='del'>-#             |__ per class/module descriptions</div><div class='del'>-#</div><div class='del'>-# HTML is generated using the Template class.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'ftools'</div><div class='del'>-</div><div class='del'>-require 'rdoc/options'</div><div class='del'>-require 'rdoc/template'</div><div class='del'>-require 'rdoc/markup/simple_markup'</div><div class='del'>-require 'rdoc/markup/simple_markup/to_flow'</div><div class='del'>-require 'cgi'</div><div class='del'>-</div><div class='del'>-require 'rdoc/ri/ri_cache'</div><div class='del'>-require 'rdoc/ri/ri_reader'</div><div class='del'>-require 'rdoc/ri/ri_writer'</div><div class='del'>-require 'rdoc/ri/ri_descriptions'</div><div class='del'>-</div><div class='del'>-module Generators</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class RIGenerator</div><div class='del'>-</div><div class='del'>-    # Generators may need to return specific subclasses depending</div><div class='del'>-    # on the options they are passed. Because of this</div><div class='del'>-    # we create them using a factory</div><div class='del'>-</div><div class='del'>-    def RIGenerator.for(options)</div><div class='del'>-      new(options)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class &lt;&lt;self</div><div class='del'>-      protected :new</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Set up a new HTML generator. Basically all we do here is load</div><div class='del'>-    # up the correct output temlate</div><div class='del'>-</div><div class='del'>-    def initialize(options) #:not-new:</div><div class='del'>-      @options   = options</div><div class='del'>-      @ri_writer = RI::RiWriter.new(".")</div><div class='del'>-      @markup    = SM::SimpleMarkup.new</div><div class='del'>-      @to_flow   = SM::ToFlow.new</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Build the initial indices and output objects</div><div class='del'>-    # based on an array of TopLevel objects containing</div><div class='del'>-    # the extracted information. </div><div class='del'>-</div><div class='del'>-    def generate(toplevels)</div><div class='del'>-      RDoc::TopLevel.all_classes_and_modules.each do |cls|</div><div class='del'>-        process_class(cls)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def process_class(from_class)</div><div class='del'>-      generate_class_info(from_class)</div><div class='del'>-</div><div class='del'>-      # now recure into this classes constituent classess</div><div class='del'>-      from_class.each_classmodule do |mod|</div><div class='del'>-        process_class(mod)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def generate_class_info(cls)</div><div class='del'>-      if cls === RDoc::NormalModule</div><div class='del'>-        cls_desc = RI::ModuleDescription.new</div><div class='del'>-      else</div><div class='del'>-        cls_desc = RI::ClassDescription.new</div><div class='del'>-        cls_desc.superclass  = cls.superclass</div><div class='del'>-      end</div><div class='del'>-      cls_desc.name        = cls.name</div><div class='del'>-      cls_desc.full_name   = cls.full_name</div><div class='del'>-      cls_desc.comment     = markup(cls.comment)</div><div class='del'>-</div><div class='del'>-      cls_desc.attributes =cls.attributes.sort.map do |a|</div><div class='del'>-        RI::Attribute.new(a.name, a.rw, markup(a.comment))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      cls_desc.constants = cls.constants.map do |c|</div><div class='del'>-        RI::Constant.new(c.name, c.value, markup(c.comment))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      cls_desc.includes = cls.includes.map do |i|</div><div class='del'>-        RI::IncludedModule.new(i.name)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class_methods, instance_methods = method_list(cls)</div><div class='del'>-</div><div class='del'>-      cls_desc.class_methods = class_methods.map do |m|</div><div class='del'>-        RI::MethodSummary.new(m.name)</div><div class='del'>-      end</div><div class='del'>-      cls_desc.instance_methods = instance_methods.map do |m|</div><div class='del'>-        RI::MethodSummary.new(m.name)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      update_or_replace(cls_desc)</div><div class='del'>-</div><div class='del'>-      class_methods.each do |m|</div><div class='del'>-        generate_method_info(cls_desc, m)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      instance_methods.each do |m|</div><div class='del'>-        generate_method_info(cls_desc, m)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def generate_method_info(cls_desc, method)</div><div class='del'>-      meth_desc = RI::MethodDescription.new</div><div class='del'>-      meth_desc.name = method.name</div><div class='del'>-      meth_desc.full_name = cls_desc.full_name</div><div class='del'>-      if method.singleton</div><div class='del'>-        meth_desc.full_name += "::"</div><div class='del'>-      else</div><div class='del'>-        meth_desc.full_name += "#"</div><div class='del'>-      end</div><div class='del'>-      meth_desc.full_name &lt;&lt; method.name</div><div class='del'>-</div><div class='del'>-      meth_desc.comment = markup(method.comment)</div><div class='del'>-      meth_desc.params = params_of(method)</div><div class='del'>-      meth_desc.visibility = method.visibility.to_s</div><div class='del'>-      meth_desc.is_singleton = method.singleton</div><div class='del'>-      meth_desc.block_params = method.block_params</div><div class='del'>-</div><div class='del'>-      meth_desc.aliases = method.aliases.map do |a|</div><div class='del'>-        RI::AliasName.new(a.name)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @ri_writer.add_method(cls_desc, meth_desc)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    # return a list of class and instance methods that we'll be</div><div class='del'>-    # documenting</div><div class='del'>-</div><div class='del'>-    def method_list(cls)</div><div class='del'>-      list = cls.method_list</div><div class='del'>-      unless @options.show_all</div><div class='del'>-        list = list.find_all do |m|</div><div class='del'>-          m.visibility == :public || m.visibility == :protected || m.force_documentation</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      c = []</div><div class='del'>-      i = []</div><div class='del'>-      list.sort.each do |m|</div><div class='del'>-        if m.singleton</div><div class='del'>-          c &lt;&lt; m</div><div class='del'>-        else</div><div class='del'>-          i &lt;&lt; m</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return c,i</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def params_of(method)</div><div class='del'>-      if method.call_seq</div><div class='del'>-        method.call_seq</div><div class='del'>-      else</div><div class='del'>-        params = method.params || ""</div><div class='del'>-        </div><div class='del'>-        p = params.gsub(/\s*\#.*/, '')</div><div class='del'>-        p = p.tr("\n", " ").squeeze(" ")</div><div class='del'>-        p = "(" + p + ")" unless p[0] == ?(</div><div class='del'>-        </div><div class='del'>-        if (block = method.block_params)</div><div class='del'>-          block.gsub!(/\s*\#.*/, '')</div><div class='del'>-          block = block.tr("\n", " ").squeeze(" ")</div><div class='del'>-          if block[0] == ?(</div><div class='del'>-            block.sub!(/^\(/, '').sub!(/\)/, '')</div><div class='del'>-          end</div><div class='del'>-          p &lt;&lt; " {|#{block.strip}| ...}"</div><div class='del'>-        end</div><div class='del'>-        p</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def markup(comment)</div><div class='del'>-      return nil if !comment || comment.empty?</div><div class='del'>-</div><div class='del'>-      # Convert leading comment markers to spaces, but only</div><div class='del'>-      # if all non-blank lines have them</div><div class='del'>-      </div><div class='del'>-      if comment =~ /^(?&gt;\s*)[^\#]/</div><div class='del'>-        content = comment</div><div class='del'>-      else</div><div class='del'>-        content = comment.gsub(/^\s*(#+)/)  { $1.tr('#',' ') }</div><div class='del'>-      end</div><div class='del'>-      @markup.convert(content, @to_flow)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # By default we replace existing classes with the</div><div class='del'>-    # same name. If the --merge option was given, we instead</div><div class='del'>-    # merge this definition into an existing class. We add</div><div class='del'>-    # our methods, aliases, etc to that class, but do not</div><div class='del'>-    # change the class's description.</div><div class='del'>-</div><div class='del'>-    def update_or_replace(cls_desc)</div><div class='del'>-      old_cls = nil</div><div class='del'>-</div><div class='del'>-      if @options.merge</div><div class='del'>-        rdr = RI::RiReader.new(RI::RiCache.new(@options.op_dir))</div><div class='del'>-</div><div class='del'>-        namespace = rdr.top_level_namespace</div><div class='del'>-        namespace = rdr.lookup_namespace_in(cls_desc.name, namespace)</div><div class='del'>-        if namespace.empty?</div><div class='del'>-          $stderr.puts "You asked me to merge this source into existing "</div><div class='del'>-          $stderr.puts "documentation. This file references a class or "</div><div class='del'>-          $stderr.puts "module called #{cls_desc.name} which I don't"</div><div class='del'>-          $stderr.puts "have existing documentation for."</div><div class='del'>-          $stderr.puts </div><div class='del'>-          $stderr.puts "Perhaps you need to generate its documentation first"</div><div class='del'>-          exit 1</div><div class='del'>-        else</div><div class='del'>-          old_cls = namespace[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if old_cls.nil?</div><div class='del'>-        # no merge: simply overwrite</div><div class='del'>-        @ri_writer.remove_class(cls_desc)</div><div class='del'>-        @ri_writer.add_class(cls_desc)</div><div class='del'>-      else</div><div class='del'>-        # existing class: merge in</div><div class='del'>-        old_desc = rdr.get_class(old_cls)</div><div class='del'>-</div><div class='del'>-        old_desc.merge_in(cls_desc)</div><div class='del'>-        @ri_writer.add_class(old_desc)</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/lib/rdoc/generators/template/chm/chm.rb b/lib/rdoc/generators/template/chm/chm.rb<br/>deleted file mode 100644<br/>index 4a89c26520..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/template/chm/chm.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/template/chm/chm.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,87 +0,0 @@</div><div class='del'>-module RDoc</div><div class='del'>-module Page</div><div class='del'>-</div><div class='del'>-require "rdoc/generators/template/html/html"</div><div class='del'>-</div><div class='del'>-# This is a nasty little hack, but hhc doesn't support the &lt;?xml</div><div class='del'>-# tag, so...</div><div class='del'>-</div><div class='del'>-BODY.sub!(/&lt;\?xml.*\?&gt;/, '')</div><div class='del'>-SRC_PAGE.sub!(/&lt;\?xml.*\?&gt;/, '')</div><div class='del'>-</div><div class='del'>-HPP_FILE = %{</div><div class='del'>-[OPTIONS]</div><div class='del'>-Auto Index = Yes</div><div class='del'>-Compatibility=1.1 or later</div><div class='del'>-Compiled file=%opname%.chm</div><div class='del'>-Contents file=contents.hhc</div><div class='del'>-Full-text search=Yes</div><div class='del'>-Index file=index.hhk</div><div class='del'>-Language=0x409 English(United States)</div><div class='del'>-Title=%title%</div><div class='del'>-</div><div class='del'>-[FILES]</div><div class='del'>-START:all_html_files</div><div class='del'>-%html_file_name%</div><div class='del'>-END:all_html_files</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-CONTENTS = %{</div><div class='del'>-&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"&gt;</div><div class='del'>-&lt;HTML&gt;</div><div class='del'>-&lt;HEAD&gt;</div><div class='del'>-&lt;meta name="GENERATOR" content="Microsoft&amp;reg; HTML Help Workshop 4.1"&gt;</div><div class='del'>-&lt;!-- Sitemap 1.0 --&gt;</div><div class='del'>-&lt;/HEAD&gt;&lt;BODY&gt;</div><div class='del'>-&lt;OBJECT type="text/site properties"&gt;</div><div class='del'>-	&lt;param name="Foreground" value="0x80"&gt;</div><div class='del'>-	&lt;param name="Window Styles" value="0x800025"&gt;</div><div class='del'>-	&lt;param name="ImageType" value="Folder"&gt;</div><div class='del'>-&lt;/OBJECT&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-START:contents</div><div class='del'>-	&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;</div><div class='del'>-		&lt;param name="Name" value="%c_name%"&gt;</div><div class='del'>-		&lt;param name="Local" value="%ref%"&gt;</div><div class='del'>-		&lt;/OBJECT&gt;</div><div class='del'>-IF:methods</div><div class='del'>-&lt;ul&gt;</div><div class='del'>-START:methods</div><div class='del'>-	&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;</div><div class='del'>-		&lt;param name="Name" value="%name%"&gt;</div><div class='del'>-		&lt;param name="Local" value="%aref%"&gt;</div><div class='del'>-		&lt;/OBJECT&gt;</div><div class='del'>-END:methods</div><div class='del'>-&lt;/ul&gt;</div><div class='del'>-ENDIF:methods</div><div class='del'>-        &lt;/LI&gt;</div><div class='del'>-END:contents</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-&lt;/BODY&gt;&lt;/HTML&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-CHM_INDEX  = %{</div><div class='del'>-&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"&gt;</div><div class='del'>-&lt;HTML&gt;</div><div class='del'>-&lt;HEAD&gt;</div><div class='del'>-&lt;meta name="GENERATOR" content="Microsoft&amp;reg; HTML Help Workshop 4.1"&gt;</div><div class='del'>-&lt;!-- Sitemap 1.0 --&gt;</div><div class='del'>-&lt;/HEAD&gt;&lt;BODY&gt;</div><div class='del'>-&lt;OBJECT type="text/site properties"&gt;</div><div class='del'>-	&lt;param name="Foreground" value="0x80"&gt;</div><div class='del'>-	&lt;param name="Window Styles" value="0x800025"&gt;</div><div class='del'>-	&lt;param name="ImageType" value="Folder"&gt;</div><div class='del'>-&lt;/OBJECT&gt;</div><div class='del'>-&lt;UL&gt;</div><div class='del'>-START:index</div><div class='del'>-	&lt;LI&gt; &lt;OBJECT type="text/sitemap"&gt;</div><div class='del'>-		&lt;param name="Name" value="%name%"&gt;</div><div class='del'>-		&lt;param name="Local" value="%aref%"&gt;</div><div class='del'>-		&lt;/OBJECT&gt;</div><div class='del'>-END:index</div><div class='del'>-&lt;/UL&gt;</div><div class='del'>-&lt;/BODY&gt;&lt;/HTML&gt;</div><div class='del'>-}</div><div class='del'>-end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/generators/template/html/hefss.rb b/lib/rdoc/generators/template/html/hefss.rb<br/>deleted file mode 100644<br/>index e68ca85823..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/template/html/hefss.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/template/html/hefss.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,418 +0,0 @@</div><div class='del'>-module RDoc</div><div class='del'>-module Page</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-FONTS = "Verdana, Arial, Helvetica, sans-serif"</div><div class='del'>-</div><div class='del'>-STYLE = %{</div><div class='del'>-body,p { font-family: Verdana, Arial, Helvetica, sans-serif; </div><div class='del'>-       color: #000040; background: #BBBBBB;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-td { font-family: Verdana, Arial, Helvetica, sans-serif; </div><div class='del'>-       color: #000040;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.attr-rw { font-size: small; color: #444488 }</div><div class='del'>-</div><div class='del'>-.title-row {color:      #eeeeff;</div><div class='del'>-	    background: #BBBBDD;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.big-title-font { color: white;</div><div class='del'>-                  font-family: Verdana, Arial, Helvetica, sans-serif;</div><div class='del'>-                  font-size: large; </div><div class='del'>-                  height: 50px}</div><div class='del'>-</div><div class='del'>-.small-title-font { color: purple;</div><div class='del'>-                    font-family: Verdana, Arial, Helvetica, sans-serif;</div><div class='del'>-                    font-size: small; }</div><div class='del'>-</div><div class='del'>-.aqua { color: purple }</div><div class='del'>-</div><div class='del'>-.method-name, attr-name {</div><div class='del'>-      font-family: monospace; font-weight: bold;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.tablesubtitle {</div><div class='del'>-   width: 100%;</div><div class='del'>-   margin-top: 1ex;</div><div class='del'>-   margin-bottom: .5ex;</div><div class='del'>-   padding: 5px 0px 5px 20px;</div><div class='del'>-   font-size: large;</div><div class='del'>-   color: purple;</div><div class='del'>-   background: #BBBBCC;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.tablesubsubtitle {</div><div class='del'>-   width: 100%;</div><div class='del'>-   margin-top: 1ex;</div><div class='del'>-   margin-bottom: .5ex;</div><div class='del'>-   padding: 5px 0px 5px 20px;</div><div class='del'>-   font-size: medium;</div><div class='del'>-   color: white;</div><div class='del'>-   background: #BBBBCC;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.name-list {</div><div class='del'>-  font-family: monospace;</div><div class='del'>-  margin-left: 40px;</div><div class='del'>-  margin-bottom: 2ex;</div><div class='del'>-  line-height: 140%;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.description {</div><div class='del'>-  margin-left: 40px;</div><div class='del'>-  margin-bottom: 2ex;</div><div class='del'>-  line-height: 140%;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.methodtitle {</div><div class='del'>-  font-size: medium;</div><div class='del'>-  text_decoration: none;</div><div class='del'>-  padding: 3px 3px 3px 20px;</div><div class='del'>-  color: #0000AA;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.column-title {</div><div class='del'>-  font-size: medium;</div><div class='del'>-  font-weight: bold;</div><div class='del'>-  text_decoration: none;</div><div class='del'>-  padding: 3px 3px 3px 20px;</div><div class='del'>-  color: #3333CC;</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-.variable-name {</div><div class='del'>-  font-family: monospace;</div><div class='del'>-  font-size: medium;</div><div class='del'>-  text_decoration: none;</div><div class='del'>-  padding: 3px 3px 3px 20px;</div><div class='del'>-  color: #0000AA;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.row-name {</div><div class='del'>-  font-size: medium;</div><div class='del'>-  font-weight: medium;</div><div class='del'>-  font-family: monospace;</div><div class='del'>-  text_decoration: none;</div><div class='del'>-  padding: 3px 3px 3px 20px;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.paramsig {</div><div class='del'>-   font-size: small;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.srcbut { float: right }</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'>-BODY = %{</div><div class='del'>-&lt;html&gt;&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%"&gt;</div><div class='del'>-  &lt;link rel="stylesheet" href="%style_url%" type="text/css" media="screen" /&gt;</div><div class='del'>-  &lt;script type="text/javascript" language="JavaScript"&gt;</div><div class='del'>-  &lt;!--</div><div class='del'>-  function popCode(url) {</div><div class='del'>-    parent.frames.source.location = url</div><div class='del'>-  }</div><div class='del'>-  //--&gt;</div><div class='del'>-  &lt;/script&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body bgcolor="#BBBBBB"&gt;</div><div class='del'>-</div><div class='del'>-!INCLUDE!  &lt;!-- banner header --&gt;</div><div class='del'>-</div><div class='del'>-IF:diagram</div><div class='del'>-&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;</div><div class='del'>-%diagram%</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-ENDIF:diagram</div><div class='del'>-</div><div class='del'>-IF:description</div><div class='del'>-&lt;div class="description"&gt;%description%&lt;/div&gt;</div><div class='del'>-ENDIF:description</div><div class='del'>-</div><div class='del'>-IF:requires</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Required files&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:requires</div><div class='del'>-HREF:aref:name:</div><div class='del'>-END:requires</div><div class='del'>-ENDIF:requires</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-</div><div class='del'>-IF:methods</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Subroutines and Functions&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:methods</div><div class='del'>-HREF:aref:name:,</div><div class='del'>-END:methods</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:methods</div><div class='del'>-</div><div class='del'>-IF:attributes</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Arguments&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-&lt;table cellspacing="5"&gt;</div><div class='del'>-START:attributes</div><div class='del'>-     &lt;tr valign="top"&gt;</div><div class='del'>-IF:rw</div><div class='del'>-       &lt;td align="center" class="attr-rw"&gt;&amp;nbsp;[%rw%]&amp;nbsp;&lt;/td&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-IFNOT:rw</div><div class='del'>-       &lt;td&gt;&lt;/td&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-       &lt;td class="attr-name"&gt;%name%&lt;/td&gt;</div><div class='del'>-       &lt;td&gt;%a_desc%&lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-END:attributes</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-ENDIF:attributes</div><div class='del'>-</div><div class='del'>-IF:classlist</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Modules&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-%classlist%&lt;br /&gt;</div><div class='del'>-ENDIF:classlist</div><div class='del'>-</div><div class='del'>-  !INCLUDE!  &lt;!-- method descriptions --&gt;</div><div class='del'>-</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-###############################################################################</div><div class='del'>-</div><div class='del'>-FILE_PAGE = &lt;&lt;_FILE_PAGE_</div><div class='del'>-&lt;table width="100%"&gt;</div><div class='del'>- &lt;tr class="title-row"&gt;</div><div class='del'>- &lt;td&gt;&lt;table width="100%"&gt;&lt;tr&gt;</div><div class='del'>-   &lt;td class="big-title-font" colspan="2"&gt;&lt;font size="-3"&gt;&lt;b&gt;File&lt;/b&gt;&lt;br /&gt;&lt;/font&gt;%short_name%&lt;/td&gt;</div><div class='del'>-   &lt;td align="right"&gt;&lt;table cellspacing="0" cellpadding="2"&gt;</div><div class='del'>-         &lt;tr&gt;</div><div class='del'>-           &lt;td  class="small-title-font"&gt;Path:&lt;/td&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;%full_path%</div><div class='del'>-IF:cvsurl</div><div class='del'>-				&amp;nbsp;(&lt;a href="%cvsurl%"&gt;&lt;acronym title="Concurrent Versioning System"&gt;CVS&lt;/acronym&gt;&lt;/a&gt;)</div><div class='del'>-ENDIF:cvsurl</div><div class='del'>-           &lt;/td&gt;</div><div class='del'>-         &lt;/tr&gt;</div><div class='del'>-         &lt;tr&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;Modified:&lt;/td&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;%dtm_modified%&lt;/td&gt;</div><div class='del'>-         &lt;/tr&gt;</div><div class='del'>-        &lt;/table&gt;</div><div class='del'>-    &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;</div><div class='del'>-  &lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-_FILE_PAGE_</div><div class='del'>-</div><div class='del'>-###################################################################</div><div class='del'>-</div><div class='del'>-CLASS_PAGE = %{</div><div class='del'>-&lt;table width="100%" border="0" cellspacing="0"&gt;</div><div class='del'>- &lt;tr class="title-row"&gt;</div><div class='del'>- &lt;td class="big-title-font"&gt;</div><div class='del'>-   &lt;font size="-3"&gt;&lt;b&gt;%classmod%&lt;/b&gt;&lt;br /&gt;&lt;/font&gt;%full_name%</div><div class='del'>- &lt;/td&gt;</div><div class='del'>- &lt;td align="right"&gt;</div><div class='del'>-   &lt;table cellspacing="0" cellpadding="2"&gt;</div><div class='del'>-     &lt;tr valign="top"&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;In:&lt;/td&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;</div><div class='del'>-START:infiles</div><div class='del'>-HREF:full_path_url:full_path:</div><div class='del'>-IF:cvsurl</div><div class='del'>-&amp;nbsp;(&lt;a href="%cvsurl%"&gt;&lt;acronym title="Concurrent Versioning System"&gt;CVS&lt;/acronym&gt;&lt;/a&gt;)</div><div class='del'>-ENDIF:cvsurl</div><div class='del'>-END:infiles</div><div class='del'>-      &lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-IF:parent</div><div class='del'>-     &lt;tr&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;Parent:&lt;/td&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;</div><div class='del'>-IF:par_url</div><div class='del'>-        &lt;a href="%par_url%" class="cyan"&gt;</div><div class='del'>-ENDIF:par_url</div><div class='del'>-%parent%</div><div class='del'>-IF:par_url</div><div class='del'>-         &lt;/a&gt;</div><div class='del'>-ENDIF:par_url</div><div class='del'>-      &lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-ENDIF:parent</div><div class='del'>-   &lt;/table&gt;</div><div class='del'>-  &lt;/td&gt;</div><div class='del'>-  &lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-###################################################################</div><div class='del'>-</div><div class='del'>-METHOD_LIST = %{</div><div class='del'>-IF:includes</div><div class='del'>-&lt;div class="tablesubsubtitle"&gt;Uses&lt;/div&gt;&lt;br /&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:includes</div><div class='del'>-    &lt;span class="method-name"&gt;HREF:aref:name:&lt;/span&gt;</div><div class='del'>-END:includes</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:includes</div><div class='del'>-</div><div class='del'>-IF:method_list</div><div class='del'>-START:method_list</div><div class='del'>-IF:methods</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;%type% %category% methods&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-START:methods</div><div class='del'>-&lt;table width="100%" cellspacing="0" cellpadding="5" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="methodtitle"&gt;</div><div class='del'>-&lt;a name="%aref%"&gt;</div><div class='del'>-&lt;b&gt;%name%&lt;/b&gt;%params% </div><div class='del'>-IF:codeurl</div><div class='del'>-&lt;a href="%codeurl%" target="source" class="srclink"&gt;src&lt;/a&gt;</div><div class='del'>-ENDIF:codeurl</div><div class='del'>-&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-IF:m_desc</div><div class='del'>-&lt;div class="description"&gt;</div><div class='del'>-%m_desc%</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:m_desc</div><div class='del'>-END:methods</div><div class='del'>-ENDIF:methods</div><div class='del'>-END:method_list</div><div class='del'>-ENDIF:method_list</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-########################## Source code ##########################</div><div class='del'>-</div><div class='del'>-SRC_PAGE = %{</div><div class='del'>-&lt;html&gt;</div><div class='del'>-&lt;head&gt;&lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-&lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%"&gt;</div><div class='del'>-&lt;style type="text/css"&gt;</div><div class='del'>-  .kw { color: #3333FF; font-weight: bold }</div><div class='del'>-  .cmt { color: green; font-style: italic }</div><div class='del'>-  .str { color: #662222; font-style: italic }</div><div class='del'>-  .re  { color: #662222; }</div><div class='del'>-.ruby-comment    { color: green; font-style: italic }</div><div class='del'>-.ruby-constant   { color: #4433aa; font-weight: bold; }</div><div class='del'>-.ruby-identifier { color: #222222;  }</div><div class='del'>-.ruby-ivar       { color: #2233dd; }</div><div class='del'>-.ruby-keyword    { color: #3333FF; font-weight: bold }</div><div class='del'>-.ruby-node       { color: #777777; }</div><div class='del'>-.ruby-operator   { color: #111111;  }</div><div class='del'>-.ruby-regexp     { color: #662222; }</div><div class='del'>-.ruby-value      { color: #662222; font-style: italic }</div><div class='del'>-&lt;/style&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body bgcolor="#BBBBBB"&gt;</div><div class='del'>-&lt;pre&gt;%code%&lt;/pre&gt;</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-########################## Index ################################</div><div class='del'>-</div><div class='del'>-FR_INDEX_BODY = %{</div><div class='del'>-!INCLUDE!</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-FILE_INDEX = %{</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=%charset%"&gt;</div><div class='del'>-&lt;style type="text/css"&gt;</div><div class='del'>-&lt;!--</div><div class='del'>-  body {</div><div class='del'>-background-color: #bbbbbb;</div><div class='del'>-     font-family: #{FONTS}; </div><div class='del'>-       font-size: 11px; </div><div class='del'>-      font-style: normal;</div><div class='del'>-     line-height: 14px; </div><div class='del'>-           color: #000040;</div><div class='del'>-  }</div><div class='del'>-div.banner {</div><div class='del'>-  background: #bbbbcc;</div><div class='del'>-  color:      white;</div><div class='del'>-  padding: 1;</div><div class='del'>-  margin: 0;</div><div class='del'>-  font-size: 90%;</div><div class='del'>-  font-weight: bold;</div><div class='del'>-  line-height: 1.1;</div><div class='del'>-  text-align: center;</div><div class='del'>-  width: 100%;</div><div class='del'>-}</div><div class='del'>-  </div><div class='del'>---&gt;</div><div class='del'>-&lt;/style&gt;</div><div class='del'>-&lt;base target="docwin"&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body&gt;</div><div class='del'>-&lt;div class="banner"&gt;%list_title%&lt;/div&gt;</div><div class='del'>-START:entries</div><div class='del'>-&lt;a href="%href%"&gt;%name%&lt;/a&gt;&lt;br /&gt;</div><div class='del'>-END:entries</div><div class='del'>-&lt;/body&gt;&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-CLASS_INDEX = FILE_INDEX</div><div class='del'>-METHOD_INDEX = FILE_INDEX</div><div class='del'>-</div><div class='del'>-INDEX = %{</div><div class='del'>-&lt;html&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%"&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-</div><div class='del'>-&lt;frameset cols="20%,*"&gt;</div><div class='del'>-    &lt;frameset rows="15%,35%,50%"&gt;</div><div class='del'>-        &lt;frame src="fr_file_index.html"   title="Files" name="Files"&gt;</div><div class='del'>-        &lt;frame src="fr_class_index.html"  name="Modules"&gt;</div><div class='del'>-        &lt;frame src="fr_method_index.html" name="Subroutines and Functions"&gt;</div><div class='del'>-    &lt;/frameset&gt;</div><div class='del'>-    &lt;frameset rows="80%,20%"&gt;</div><div class='del'>-      &lt;frame  src="%initial_page%" name="docwin"&gt;</div><div class='del'>-      &lt;frame  src="blank.html" name="source"&gt;</div><div class='del'>-    &lt;/frameset&gt;</div><div class='del'>-    &lt;noframes&gt;</div><div class='del'>-          &lt;body bgcolor="#BBBBBB"&gt;</div><div class='del'>-            Click &lt;a href="html/index.html"&gt;here&lt;/a&gt; for a non-frames</div><div class='del'>-            version of this page.</div><div class='del'>-          &lt;/body&gt;</div><div class='del'>-    &lt;/noframes&gt;</div><div class='del'>-&lt;/frameset&gt;</div><div class='del'>-</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# and a blank page to use as a target</div><div class='del'>-BLANK = %{</div><div class='del'>-&lt;html&gt;&lt;body bgcolor="#BBBBBB"&gt;&lt;/body&gt;&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def write_extra_pages</div><div class='del'>-  template = TemplatePage.new(BLANK)</div><div class='del'>-  File.open("blank.html", "w") { |f| template.write_html_on(f, {}) }</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/lib/rdoc/generators/template/html/html.rb b/lib/rdoc/generators/template/html/html.rb<br/>deleted file mode 100644<br/>index 7f9e599465..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/template/html/html.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/template/html/html.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,711 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# = CSS2 RDoc HTML template</div><div class='del'>-#</div><div class='del'>-# This is a template for RDoc that uses XHTML 1.0 Transitional and dictates a</div><div class='del'>-# bit more of the appearance of the output to cascading stylesheets than the</div><div class='del'>-# default. It was designed for clean inline code display, and uses DHTMl to</div><div class='del'>-# toggle the visbility of each method's source with each click on the '[source]'</div><div class='del'>-# link.</div><div class='del'>-#</div><div class='del'>-# == Authors</div><div class='del'>-#</div><div class='del'>-# * Michael Granger &lt;ged@FaerieMUD.org&gt;</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 2002, 2003 The FaerieMUD Consortium. Some rights reserved.</div><div class='del'>-#</div><div class='del'>-# This work is licensed under the Creative Commons Attribution License. To view</div><div class='del'>-# a copy of this license, visit http://creativecommons.org/licenses/by/1.0/ or</div><div class='del'>-# send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California</div><div class='del'>-# 94305, USA.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-  module Page</div><div class='del'>-</div><div class='del'>-    FONTS = "Verdana,Arial,Helvetica,sans-serif"</div><div class='del'>-</div><div class='del'>-STYLE = %{</div><div class='del'>-body {</div><div class='del'>-    font-family: Verdana,Arial,Helvetica,sans-serif;</div><div class='del'>-    font-size:   90%;</div><div class='del'>-    margin: 0;</div><div class='del'>-    margin-left: 40px;</div><div class='del'>-    padding: 0;</div><div class='del'>-    background: white;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }</div><div class='del'>-h1 { font-size: 150%; }</div><div class='del'>-h2,h3,h4 { margin-top: 1em; }</div><div class='del'>-</div><div class='del'>-a { background: #eef; color: #039; text-decoration: none; }</div><div class='del'>-a:hover { background: #039; color: #eef; }</div><div class='del'>-</div><div class='del'>-/* Override the base stylesheet's Anchor inside a table cell */</div><div class='del'>-td &gt; a {</div><div class='del'>-  background: transparent;</div><div class='del'>-  color: #039;</div><div class='del'>-  text-decoration: none;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* and inside a section title */</div><div class='del'>-.section-title &gt; a {</div><div class='del'>-  background: transparent;</div><div class='del'>-  color: #eee;</div><div class='del'>-  text-decoration: none;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-/* === Structural elements =================================== */</div><div class='del'>-</div><div class='del'>-div#index {</div><div class='del'>-    margin: 0;</div><div class='del'>-    margin-left: -40px;</div><div class='del'>-    padding: 0;</div><div class='del'>-    font-size: 90%;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-div#index a {</div><div class='del'>-    margin-left: 0.7em;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-div#index .section-bar {</div><div class='del'>-   margin-left: 0px;</div><div class='del'>-   padding-left: 0.7em;</div><div class='del'>-   background: #ccc;</div><div class='del'>-   font-size: small;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-div#classHeader, div#fileHeader {</div><div class='del'>-    width: auto;</div><div class='del'>-    color: white;</div><div class='del'>-    padding: 0.5em 1.5em 0.5em 1.5em;</div><div class='del'>-    margin: 0;</div><div class='del'>-    margin-left: -40px;</div><div class='del'>-    border-bottom: 3px solid #006;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-div#classHeader a, div#fileHeader a {</div><div class='del'>-    background: inherit;</div><div class='del'>-    color: white;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-div#classHeader td, div#fileHeader td {</div><div class='del'>-    background: inherit;</div><div class='del'>-    color: white;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-div#fileHeader {</div><div class='del'>-    background: #057;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-div#classHeader {</div><div class='del'>-    background: #048;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-.class-name-in-header {</div><div class='del'>-  font-size:  180%;</div><div class='del'>-  font-weight: bold;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-div#bodyContent {</div><div class='del'>-    padding: 0 1.5em 0 1.5em;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-div#description {</div><div class='del'>-    padding: 0.5em 1.5em;</div><div class='del'>-    background: #efefef;</div><div class='del'>-    border: 1px dotted #999;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-div#description h1,h2,h3,h4,h5,h6 {</div><div class='del'>-    color: #125;;</div><div class='del'>-    background: transparent;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-div#validator-badges {</div><div class='del'>-    text-align: center;</div><div class='del'>-}</div><div class='del'>-div#validator-badges img { border: 0; }</div><div class='del'>-</div><div class='del'>-div#copyright {</div><div class='del'>-    color: #333;</div><div class='del'>-    background: #efefef;</div><div class='del'>-    font: 0.75em sans-serif;</div><div class='del'>-    margin-top: 5em;</div><div class='del'>-    margin-bottom: 0;</div><div class='del'>-    padding: 0.5em 2em;</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'>-table.header-table {</div><div class='del'>-    color: white;</div><div class='del'>-    font-size: small;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.type-note {</div><div class='del'>-    font-size: small;</div><div class='del'>-    color: #DEDEDE;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.xxsection-bar {</div><div class='del'>-    background: #eee;</div><div class='del'>-    color: #333;</div><div class='del'>-    padding: 3px;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.section-bar {</div><div class='del'>-   color: #333;</div><div class='del'>-   border-bottom: 1px solid #999;</div><div class='del'>-    margin-left: -20px;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-.section-title {</div><div class='del'>-    background: #79a;</div><div class='del'>-    color: #eee;</div><div class='del'>-    padding: 3px;</div><div class='del'>-    margin-top: 2em;</div><div class='del'>-    margin-left: -30px;</div><div class='del'>-    border: 1px solid #999;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.top-aligned-row {  vertical-align: top }</div><div class='del'>-.bottom-aligned-row { vertical-align: bottom }</div><div class='del'>-</div><div class='del'>-/* --- Context section classes ----------------------- */</div><div class='del'>-</div><div class='del'>-.context-row { }</div><div class='del'>-.context-item-name { font-family: monospace; font-weight: bold; color: black; }</div><div class='del'>-.context-item-value { font-size: small; color: #448; }</div><div class='del'>-.context-item-desc { color: #333; padding-left: 2em; }</div><div class='del'>-</div><div class='del'>-/* --- Method classes -------------------------- */</div><div class='del'>-.method-detail {</div><div class='del'>-    background: #efefef;</div><div class='del'>-    padding: 0;</div><div class='del'>-    margin-top: 0.5em;</div><div class='del'>-    margin-bottom: 1em;</div><div class='del'>-    border: 1px dotted #ccc;</div><div class='del'>-}</div><div class='del'>-.method-heading {</div><div class='del'>-  color: black;</div><div class='del'>-  background: #ccc;</div><div class='del'>-  border-bottom: 1px solid #666;</div><div class='del'>-  padding: 0.2em 0.5em 0 0.5em;</div><div class='del'>-}</div><div class='del'>-.method-signature { color: black; background: inherit; }</div><div class='del'>-.method-name { font-weight: bold; }</div><div class='del'>-.method-args { font-style: italic; }</div><div class='del'>-.method-description { padding: 0 0.5em 0 0.5em; }</div><div class='del'>-</div><div class='del'>-/* --- Source code sections -------------------- */</div><div class='del'>-</div><div class='del'>-a.source-toggle { font-size: 90%; }</div><div class='del'>-div.method-source-code {</div><div class='del'>-    background: #262626;</div><div class='del'>-    color: #ffdead;</div><div class='del'>-    margin: 1em;</div><div class='del'>-    padding: 0.5em;</div><div class='del'>-    border: 1px dashed #999;</div><div class='del'>-    overflow: hidden;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-div.method-source-code pre { color: #ffdead; overflow: hidden; }</div><div class='del'>-</div><div class='del'>-/* --- Ruby keyword styles --------------------- */</div><div class='del'>-</div><div class='del'>-.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }</div><div class='del'>-</div><div class='del'>-.ruby-constant  { color: #7fffd4; background: transparent; }</div><div class='del'>-.ruby-keyword { color: #00ffff; background: transparent; }</div><div class='del'>-.ruby-ivar    { color: #eedd82; background: transparent; }</div><div class='del'>-.ruby-operator  { color: #00ffee; background: transparent; }</div><div class='del'>-.ruby-identifier { color: #ffdead; background: transparent; }</div><div class='del'>-.ruby-node    { color: #ffa07a; background: transparent; }</div><div class='del'>-.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }</div><div class='del'>-.ruby-regexp  { color: #ffa07a; background: transparent; }</div><div class='del'>-.ruby-value   { color: #7fffd4; background: transparent; }</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### H E A D E R   T E M P L A T E  </div><div class='del'>-#####################################################################</div><div class='del'>-</div><div class='del'>-XHTML_PREAMBLE = %{&lt;?xml version="1.0" encoding="%charset%"?&gt;</div><div class='del'>-&lt;!DOCTYPE html </div><div class='del'>-     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"</div><div class='del'>-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-HEADER = XHTML_PREAMBLE + %{</div><div class='del'>-&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%" /&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Script-Type" content="text/javascript" /&gt;</div><div class='del'>-  &lt;link rel="stylesheet" href="%style_url%" type="text/css" media="screen" /&gt;</div><div class='del'>-  &lt;script type="text/javascript"&gt;</div><div class='del'>-  // &lt;![CDATA[</div><div class='del'>-</div><div class='del'>-  function popupCode( url ) {</div><div class='del'>-    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  function toggleCode( id ) {</div><div class='del'>-    if ( document.getElementById )</div><div class='del'>-      elem = document.getElementById( id );</div><div class='del'>-    else if ( document.all )</div><div class='del'>-      elem = eval( "document.all." + id );</div><div class='del'>-    else</div><div class='del'>-      return false;</div><div class='del'>-</div><div class='del'>-    elemStyle = elem.style;</div><div class='del'>-    </div><div class='del'>-    if ( elemStyle.display != "block" ) {</div><div class='del'>-      elemStyle.display = "block"</div><div class='del'>-    } else {</div><div class='del'>-      elemStyle.display = "none"</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    return true;</div><div class='del'>-  }</div><div class='del'>-  </div><div class='del'>-  // Make codeblocks hidden by default</div><div class='del'>-  document.writeln( "&lt;style type=\\"text/css\\"&gt;div.method-source-code { display: none }&lt;/style&gt;" )</div><div class='del'>-  </div><div class='del'>-  // ]]&gt;</div><div class='del'>-  &lt;/script&gt;</div><div class='del'>-</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### C O N T E X T   C O N T E N T   T E M P L A T E</div><div class='del'>-#####################################################################</div><div class='del'>-</div><div class='del'>-CONTEXT_CONTENT = %{</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### F O O T E R   T E M P L A T E</div><div class='del'>-#####################################################################</div><div class='del'>-FOOTER = %{</div><div class='del'>-&lt;div id="validator-badges"&gt;</div><div class='del'>-  &lt;p&gt;&lt;small&gt;&lt;a href="http://validator.w3.org/check/referer"&gt;[Validate]&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### F I L E   P A G E   H E A D E R   T E M P L A T E</div><div class='del'>-#####################################################################</div><div class='del'>-</div><div class='del'>-FILE_PAGE = %{</div><div class='del'>-  &lt;div id="fileHeader"&gt;</div><div class='del'>-    &lt;h1&gt;%short_name%&lt;/h1&gt;</div><div class='del'>-    &lt;table class="header-table"&gt;</div><div class='del'>-    &lt;tr class="top-aligned-row"&gt;</div><div class='del'>-      &lt;td&gt;&lt;strong&gt;Path:&lt;/strong&gt;&lt;/td&gt;</div><div class='del'>-      &lt;td&gt;%full_path%</div><div class='del'>-IF:cvsurl</div><div class='del'>-        &amp;nbsp;(&lt;a href="%cvsurl%"&gt;&lt;acronym title="Concurrent Versioning System"&gt;CVS&lt;/acronym&gt;&lt;/a&gt;)</div><div class='del'>-ENDIF:cvsurl</div><div class='del'>-      &lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;tr class="top-aligned-row"&gt;</div><div class='del'>-      &lt;td&gt;&lt;strong&gt;Last Update:&lt;/strong&gt;&lt;/td&gt;</div><div class='del'>-      &lt;td&gt;%dtm_modified%&lt;/td&gt;</div><div class='del'>-    &lt;/tr&gt;</div><div class='del'>-    &lt;/table&gt;</div><div class='del'>-  &lt;/div&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### C L A S S   P A G E   H E A D E R   T E M P L A T E</div><div class='del'>-#####################################################################</div><div class='del'>-</div><div class='del'>-CLASS_PAGE = %{</div><div class='del'>-    &lt;div id="classHeader"&gt;</div><div class='del'>-        &lt;table class="header-table"&gt;</div><div class='del'>-        &lt;tr class="top-aligned-row"&gt;</div><div class='del'>-          &lt;td&gt;&lt;strong&gt;%classmod%&lt;/strong&gt;&lt;/td&gt;</div><div class='del'>-          &lt;td class="class-name-in-header"&gt;%full_name%&lt;/td&gt;</div><div class='del'>-        &lt;/tr&gt;</div><div class='del'>-        &lt;tr class="top-aligned-row"&gt;</div><div class='del'>-            &lt;td&gt;&lt;strong&gt;In:&lt;/strong&gt;&lt;/td&gt;</div><div class='del'>-            &lt;td&gt;</div><div class='del'>-START:infiles</div><div class='del'>-IF:full_path_url</div><div class='del'>-                &lt;a href="%full_path_url%"&gt;</div><div class='del'>-ENDIF:full_path_url</div><div class='del'>-                %full_path%</div><div class='del'>-IF:full_path_url</div><div class='del'>-                &lt;/a&gt;</div><div class='del'>-ENDIF:full_path_url</div><div class='del'>-IF:cvsurl</div><div class='del'>-        &amp;nbsp;(&lt;a href="%cvsurl%"&gt;&lt;acronym title="Concurrent Versioning System"&gt;CVS&lt;/acronym&gt;&lt;/a&gt;)</div><div class='del'>-ENDIF:cvsurl</div><div class='del'>-        &lt;br /&gt;</div><div class='del'>-END:infiles</div><div class='del'>-            &lt;/td&gt;</div><div class='del'>-        &lt;/tr&gt;</div><div class='del'>-</div><div class='del'>-IF:parent</div><div class='del'>-        &lt;tr class="top-aligned-row"&gt;</div><div class='del'>-            &lt;td&gt;&lt;strong&gt;Parent:&lt;/strong&gt;&lt;/td&gt;</div><div class='del'>-            &lt;td&gt;</div><div class='del'>-IF:par_url</div><div class='del'>-                &lt;a href="%par_url%"&gt;</div><div class='del'>-ENDIF:par_url</div><div class='del'>-                %parent%</div><div class='del'>-IF:par_url</div><div class='del'>-               &lt;/a&gt;</div><div class='del'>-ENDIF:par_url</div><div class='del'>-            &lt;/td&gt;</div><div class='del'>-        &lt;/tr&gt;</div><div class='del'>-ENDIF:parent</div><div class='del'>-        &lt;/table&gt;</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### M E T H O D   L I S T   T E M P L A T E</div><div class='del'>-#####################################################################</div><div class='del'>-</div><div class='del'>-METHOD_LIST = %{</div><div class='del'>-</div><div class='del'>-  &lt;div id="contextContent"&gt;</div><div class='del'>-IF:diagram</div><div class='del'>-    &lt;div id="diagram"&gt;</div><div class='del'>-      %diagram%</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:diagram</div><div class='del'>-</div><div class='del'>-IF:description</div><div class='del'>-    &lt;div id="description"&gt;</div><div class='del'>-      %description%</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:description</div><div class='del'>-</div><div class='del'>-IF:requires</div><div class='del'>-    &lt;div id="requires-list"&gt;</div><div class='del'>-      &lt;h3 class="section-bar"&gt;Required files&lt;/h3&gt;</div><div class='del'>-</div><div class='del'>-      &lt;div class="name-list"&gt;</div><div class='del'>-START:requires</div><div class='del'>-      HREF:aref:name:&amp;nbsp;&amp;nbsp;</div><div class='del'>-END:requires</div><div class='del'>-      &lt;/div&gt;</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:requires</div><div class='del'>-</div><div class='del'>-IF:toc</div><div class='del'>-    &lt;div id="contents-list"&gt;</div><div class='del'>-      &lt;h3 class="section-bar"&gt;Contents&lt;/h3&gt;</div><div class='del'>-      &lt;ul&gt;</div><div class='del'>-START:toc</div><div class='del'>-      &lt;li&gt;&lt;a href="#%href%"&gt;%secname%&lt;/a&gt;&lt;/li&gt;</div><div class='del'>-END:toc</div><div class='del'>-     &lt;/ul&gt;</div><div class='del'>-ENDIF:toc</div><div class='del'>-   &lt;/div&gt;</div><div class='del'>-</div><div class='del'>-IF:methods</div><div class='del'>-    &lt;div id="method-list"&gt;</div><div class='del'>-      &lt;h3 class="section-bar"&gt;Methods&lt;/h3&gt;</div><div class='del'>-</div><div class='del'>-      &lt;div class="name-list"&gt;</div><div class='del'>-START:methods</div><div class='del'>-      HREF:aref:name:&amp;nbsp;&amp;nbsp;</div><div class='del'>-END:methods</div><div class='del'>-      &lt;/div&gt;</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:methods</div><div class='del'>-</div><div class='del'>-  &lt;/div&gt;</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    &lt;!-- if includes --&gt;</div><div class='del'>-IF:includes</div><div class='del'>-    &lt;div id="includes"&gt;</div><div class='del'>-      &lt;h3 class="section-bar"&gt;Included Modules&lt;/h3&gt;</div><div class='del'>-</div><div class='del'>-      &lt;div id="includes-list"&gt;</div><div class='del'>-START:includes</div><div class='del'>-        &lt;span class="include-name"&gt;HREF:aref:name:&lt;/span&gt;</div><div class='del'>-END:includes</div><div class='del'>-      &lt;/div&gt;</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:includes</div><div class='del'>-</div><div class='del'>-START:sections</div><div class='del'>-    &lt;div id="section"&gt;</div><div class='del'>-IF:sectitle</div><div class='del'>-      &lt;h2 class="section-title"&gt;&lt;a name="%secsequence%"&gt;%sectitle%&lt;/a&gt;&lt;/h2&gt;</div><div class='del'>-IF:seccomment</div><div class='del'>-      &lt;div class="section-comment"&gt;</div><div class='del'>-        %seccomment%</div><div class='del'>-      &lt;/div&gt;      </div><div class='del'>-ENDIF:seccomment</div><div class='del'>-ENDIF:sectitle</div><div class='del'>-</div><div class='del'>-IF:classlist</div><div class='del'>-    &lt;div id="class-list"&gt;</div><div class='del'>-      &lt;h3 class="section-bar"&gt;Classes and Modules&lt;/h3&gt;</div><div class='del'>-</div><div class='del'>-      %classlist%</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:classlist</div><div class='del'>-</div><div class='del'>-IF:constants</div><div class='del'>-    &lt;div id="constants-list"&gt;</div><div class='del'>-      &lt;h3 class="section-bar"&gt;Constants&lt;/h3&gt;</div><div class='del'>-</div><div class='del'>-      &lt;div class="name-list"&gt;</div><div class='del'>-        &lt;table summary="Constants"&gt;</div><div class='del'>-START:constants</div><div class='del'>-        &lt;tr class="top-aligned-row context-row"&gt;</div><div class='del'>-          &lt;td class="context-item-name"&gt;%name%&lt;/td&gt;</div><div class='del'>-          &lt;td&gt;=&lt;/td&gt;</div><div class='del'>-          &lt;td class="context-item-value"&gt;%value%&lt;/td&gt;</div><div class='del'>-IF:desc</div><div class='del'>-          &lt;td width="3em"&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-          &lt;td class="context-item-desc"&gt;%desc%&lt;/td&gt;</div><div class='del'>-ENDIF:desc</div><div class='del'>-        &lt;/tr&gt;</div><div class='del'>-END:constants</div><div class='del'>-        &lt;/table&gt;</div><div class='del'>-      &lt;/div&gt;</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:constants</div><div class='del'>-</div><div class='del'>-IF:aliases</div><div class='del'>-    &lt;div id="aliases-list"&gt;</div><div class='del'>-      &lt;h3 class="section-bar"&gt;External Aliases&lt;/h3&gt;</div><div class='del'>-</div><div class='del'>-      &lt;div class="name-list"&gt;</div><div class='del'>-                        &lt;table summary="aliases"&gt;</div><div class='del'>-START:aliases</div><div class='del'>-        &lt;tr class="top-aligned-row context-row"&gt;</div><div class='del'>-          &lt;td class="context-item-name"&gt;%old_name%&lt;/td&gt;</div><div class='del'>-          &lt;td&gt;-&amp;gt;&lt;/td&gt;</div><div class='del'>-          &lt;td class="context-item-value"&gt;%new_name%&lt;/td&gt;</div><div class='del'>-        &lt;/tr&gt;</div><div class='del'>-IF:desc</div><div class='del'>-      &lt;tr class="top-aligned-row context-row"&gt;</div><div class='del'>-        &lt;td&gt;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-        &lt;td colspan="2" class="context-item-desc"&gt;%desc%&lt;/td&gt;</div><div class='del'>-      &lt;/tr&gt;</div><div class='del'>-ENDIF:desc</div><div class='del'>-END:aliases</div><div class='del'>-                        &lt;/table&gt;</div><div class='del'>-      &lt;/div&gt;</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:aliases</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-IF:attributes</div><div class='del'>-    &lt;div id="attribute-list"&gt;</div><div class='del'>-      &lt;h3 class="section-bar"&gt;Attributes&lt;/h3&gt;</div><div class='del'>-</div><div class='del'>-      &lt;div class="name-list"&gt;</div><div class='del'>-        &lt;table&gt;</div><div class='del'>-START:attributes</div><div class='del'>-        &lt;tr class="top-aligned-row context-row"&gt;</div><div class='del'>-          &lt;td class="context-item-name"&gt;%name%&lt;/td&gt;</div><div class='del'>-IF:rw</div><div class='del'>-          &lt;td class="context-item-value"&gt;&amp;nbsp;[%rw%]&amp;nbsp;&lt;/td&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-IFNOT:rw</div><div class='del'>-          &lt;td class="context-item-value"&gt;&amp;nbsp;&amp;nbsp;&lt;/td&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-          &lt;td class="context-item-desc"&gt;%a_desc%&lt;/td&gt;</div><div class='del'>-        &lt;/tr&gt;</div><div class='del'>-END:attributes</div><div class='del'>-        &lt;/table&gt;</div><div class='del'>-      &lt;/div&gt;</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:attributes</div><div class='del'>-      </div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    &lt;!-- if method_list --&gt;</div><div class='del'>-IF:method_list</div><div class='del'>-    &lt;div id="methods"&gt;</div><div class='del'>-START:method_list</div><div class='del'>-IF:methods</div><div class='del'>-      &lt;h3 class="section-bar"&gt;%type% %category% methods&lt;/h3&gt;</div><div class='del'>-</div><div class='del'>-START:methods</div><div class='del'>-      &lt;div id="method-%aref%" class="method-detail"&gt;</div><div class='del'>-        &lt;a name="%aref%"&gt;&lt;/a&gt;</div><div class='del'>-</div><div class='del'>-        &lt;div class="method-heading"&gt;</div><div class='del'>-IF:codeurl</div><div class='del'>-          &lt;a href="%codeurl%" target="Code" class="method-signature"</div><div class='del'>-            onclick="popupCode('%codeurl%');return false;"&gt;</div><div class='del'>-ENDIF:codeurl</div><div class='del'>-IF:sourcecode</div><div class='del'>-          &lt;a href="#%aref%" class="method-signature"&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-IF:callseq</div><div class='del'>-          &lt;span class="method-name"&gt;%callseq%&lt;/span&gt;</div><div class='del'>-ENDIF:callseq</div><div class='del'>-IFNOT:callseq</div><div class='del'>-          &lt;span class="method-name"&gt;%name%&lt;/span&gt;&lt;span class="method-args"&gt;%params%&lt;/span&gt;</div><div class='del'>-ENDIF:callseq</div><div class='del'>-IF:codeurl</div><div class='del'>-          &lt;/a&gt;</div><div class='del'>-ENDIF:codeurl</div><div class='del'>-IF:sourcecode</div><div class='del'>-          &lt;/a&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-        &lt;/div&gt;</div><div class='del'>-      </div><div class='del'>-        &lt;div class="method-description"&gt;</div><div class='del'>-IF:m_desc</div><div class='del'>-          %m_desc%</div><div class='del'>-ENDIF:m_desc</div><div class='del'>-IF:sourcecode</div><div class='del'>-          &lt;p&gt;&lt;a class="source-toggle" href="#"</div><div class='del'>-            onclick="toggleCode('%aref%-source');return false;"&gt;[Source]&lt;/a&gt;&lt;/p&gt;</div><div class='del'>-          &lt;div class="method-source-code" id="%aref%-source"&gt;</div><div class='del'>-&lt;pre&gt;</div><div class='del'>-%sourcecode%</div><div class='del'>-&lt;/pre&gt;</div><div class='del'>-          &lt;/div&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-        &lt;/div&gt;</div><div class='del'>-      &lt;/div&gt;</div><div class='del'>-</div><div class='del'>-END:methods</div><div class='del'>-ENDIF:methods</div><div class='del'>-END:method_list</div><div class='del'>-</div><div class='del'>-    &lt;/div&gt;</div><div class='del'>-ENDIF:method_list</div><div class='del'>-END:sections</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### B O D Y   T E M P L A T E</div><div class='del'>-#####################################################################</div><div class='del'>-</div><div class='del'>-BODY = HEADER + %{</div><div class='del'>-</div><div class='del'>-!INCLUDE!  &lt;!-- banner header --&gt;</div><div class='del'>-</div><div class='del'>-  &lt;div id="bodyContent"&gt;</div><div class='del'>-</div><div class='del'>-} +  METHOD_LIST + %{</div><div class='del'>-</div><div class='del'>-  &lt;/div&gt;</div><div class='del'>-</div><div class='del'>-} + FOOTER</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### S O U R C E   C O D E   T E M P L A T E</div><div class='del'>-#####################################################################</div><div class='del'>-</div><div class='del'>-SRC_PAGE = XHTML_PREAMBLE + %{</div><div class='del'>-&lt;html&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%" /&gt;</div><div class='del'>-  &lt;link rel="stylesheet" href="%style_url%" type="text/css" media="screen" /&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body class="standalone-code"&gt;</div><div class='del'>-  &lt;pre&gt;%code%&lt;/pre&gt;</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-#####################################################################</div><div class='del'>-### I N D E X   F I L E   T E M P L A T E S</div><div class='del'>-#####################################################################</div><div class='del'>-</div><div class='del'>-FR_INDEX_BODY = %{</div><div class='del'>-!INCLUDE!</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-FILE_INDEX = XHTML_PREAMBLE + %{</div><div class='del'>-&lt;!--</div><div class='del'>-</div><div class='del'>-    %list_title%</div><div class='del'>-</div><div class='del'>-  --&gt;</div><div class='del'>-&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%list_title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%" /&gt;</div><div class='del'>-  &lt;link rel="stylesheet" href="%style_url%" type="text/css" /&gt;</div><div class='del'>-  &lt;base target="docwin" /&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body&gt;</div><div class='del'>-&lt;div id="index"&gt;</div><div class='del'>-  &lt;h1 class="section-bar"&gt;%list_title%&lt;/h1&gt;</div><div class='del'>-  &lt;div id="index-entries"&gt;</div><div class='del'>-START:entries</div><div class='del'>-    &lt;a href="%href%"&gt;%name%&lt;/a&gt;&lt;br /&gt;</div><div class='del'>-END:entries</div><div class='del'>-  &lt;/div&gt;</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-CLASS_INDEX = FILE_INDEX</div><div class='del'>-METHOD_INDEX = FILE_INDEX</div><div class='del'>-</div><div class='del'>-INDEX = %{&lt;?xml version="1.0" encoding="%charset%"?&gt;</div><div class='del'>-&lt;!DOCTYPE html </div><div class='del'>-     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"</div><div class='del'>-     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;</div><div class='del'>-</div><div class='del'>-&lt;!--</div><div class='del'>-</div><div class='del'>-    %title%</div><div class='del'>-</div><div class='del'>-  --&gt;</div><div class='del'>-&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%" /&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;frameset rows="20%, 80%"&gt;</div><div class='del'>-    &lt;frameset cols="25%,35%,45%"&gt;</div><div class='del'>-        &lt;frame src="fr_file_index.html"   title="Files" name="Files" /&gt;</div><div class='del'>-        &lt;frame src="fr_class_index.html"  name="Classes" /&gt;</div><div class='del'>-        &lt;frame src="fr_method_index.html" name="Methods" /&gt;</div><div class='del'>-    &lt;/frameset&gt;</div><div class='del'>-    &lt;frame src="%initial_page%" name="docwin" /&gt;</div><div class='del'>-&lt;/frameset&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  end # module Page</div><div class='del'>-end # class RDoc</div><div class='del'>-</div><div class='del'>-require 'rdoc/generators/template/html/one_page_html'</div><div class='head'>diff --git a/lib/rdoc/generators/template/html/kilmer.rb b/lib/rdoc/generators/template/html/kilmer.rb<br/>deleted file mode 100644<br/>index 55071fc026..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/template/html/kilmer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/template/html/kilmer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,435 +0,0 @@</div><div class='del'>-module RDoc</div><div class='del'>-module Page</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-FONTS = "Verdana, Arial, Helvetica, sans-serif"</div><div class='del'>-</div><div class='del'>-STYLE = %{</div><div class='del'>-body,td,p { font-family: %fonts%; </div><div class='del'>-       color: #000040;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.attr-rw { font-size: xx-small; color: #444488 }</div><div class='del'>-</div><div class='del'>-.title-row { background-color: #CCCCFF;</div><div class='del'>-             color:      #000010;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.big-title-font { </div><div class='del'>-  color: black;</div><div class='del'>-  font-weight: bold;</div><div class='del'>-  font-family: %fonts%; </div><div class='del'>-  font-size: large; </div><div class='del'>-  height: 60px;</div><div class='del'>-  padding: 10px 3px 10px 3px;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.small-title-font { color: black;</div><div class='del'>-                    font-family: %fonts%;</div><div class='del'>-                    font-size:10; }</div><div class='del'>-</div><div class='del'>-.aqua { color: black }</div><div class='del'>-</div><div class='del'>-.method-name, .attr-name {</div><div class='del'>-      font-family: font-family: %fonts%; </div><div class='del'>-      font-weight: bold;</div><div class='del'>-      font-size: small;</div><div class='del'>-      margin-left: 20px;</div><div class='del'>-      color: #000033;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.tablesubtitle, .tablesubsubtitle {</div><div class='del'>-   width: 100%;</div><div class='del'>-   margin-top: 1ex;</div><div class='del'>-   margin-bottom: .5ex;</div><div class='del'>-   padding: 5px 0px 5px 3px;</div><div class='del'>-   font-size: large;</div><div class='del'>-   color: black;</div><div class='del'>-   background-color: #CCCCFF;</div><div class='del'>-   border: thin;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.name-list {</div><div class='del'>-  margin-left: 5px;</div><div class='del'>-  margin-bottom: 2ex;</div><div class='del'>-  line-height: 105%;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.description {</div><div class='del'>-  margin-left: 5px;</div><div class='del'>-  margin-bottom: 2ex;</div><div class='del'>-  line-height: 105%;</div><div class='del'>-  font-size: small;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.methodtitle {</div><div class='del'>-  font-size: small;</div><div class='del'>-  font-weight: bold;</div><div class='del'>-  text-decoration: none;</div><div class='del'>-  color: #000033;</div><div class='del'>-  background-color: white; </div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.srclink {</div><div class='del'>-  font-size: small;</div><div class='del'>-  font-weight: bold;</div><div class='del'>-  text-decoration: none;</div><div class='del'>-  color: #0000DD;</div><div class='del'>-  background-color: white;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.paramsig {</div><div class='del'>-   font-size: small;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.srcbut { float: right }</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'>-BODY = %{</div><div class='del'>-&lt;html&gt;&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%"&gt;</div><div class='del'>-  &lt;link rel="stylesheet" href="%style_url%" type="text/css" media="screen" /&gt;</div><div class='del'>-  &lt;script type="text/javascript" language="JavaScript"&gt;</div><div class='del'>-  &lt;!--</div><div class='del'>-  function popCode(url) {</div><div class='del'>-    parent.frames.source.location = url</div><div class='del'>-  }</div><div class='del'>-  //--&gt;</div><div class='del'>-  &lt;/script&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body bgcolor="white"&gt;</div><div class='del'>-</div><div class='del'>-!INCLUDE!  &lt;!-- banner header --&gt;</div><div class='del'>-</div><div class='del'>-IF:diagram</div><div class='del'>-&lt;table width="100%"&gt;&lt;tr&gt;&lt;td align="center"&gt;</div><div class='del'>-%diagram%</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-ENDIF:diagram</div><div class='del'>-</div><div class='del'>-IF:description</div><div class='del'>-&lt;div class="description"&gt;%description%&lt;/div&gt;</div><div class='del'>-ENDIF:description</div><div class='del'>-</div><div class='del'>-IF:requires</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Required files&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:requires</div><div class='del'>-HREF:aref:name:</div><div class='del'>-END:requires</div><div class='del'>-ENDIF:requires</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-</div><div class='del'>-IF:methods</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Methods&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:methods</div><div class='del'>-HREF:aref:name:,</div><div class='del'>-END:methods</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:methods</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-START:sections</div><div class='del'>-    &lt;div id="section"&gt;</div><div class='del'>-IF:sectitle</div><div class='del'>-      &lt;h2 class="section-title"&gt;&lt;a name="%secsequence%"&gt;%sectitle%&lt;/a&gt;&lt;/h2&gt;</div><div class='del'>-IF:seccomment</div><div class='del'>-      &lt;div class="section-comment"&gt;</div><div class='del'>-        %seccomment%</div><div class='del'>-      &lt;/div&gt;      </div><div class='del'>-ENDIF:seccomment</div><div class='del'>-ENDIF:sectitle</div><div class='del'>-</div><div class='del'>-IF:attributes</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Attributes&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-&lt;table cellspacing="5"&gt;</div><div class='del'>-START:attributes</div><div class='del'>-     &lt;tr valign="top"&gt;</div><div class='del'>-IF:rw</div><div class='del'>-       &lt;td align="center" class="attr-rw"&gt;&amp;nbsp;[%rw%]&amp;nbsp;&lt;/td&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-IFNOT:rw</div><div class='del'>-       &lt;td&gt;&lt;/td&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-       &lt;td class="attr-name"&gt;%name%&lt;/td&gt;</div><div class='del'>-       &lt;td&gt;%a_desc%&lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-END:attributes</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-ENDIF:attributes</div><div class='del'>-</div><div class='del'>-IF:classlist</div><div class='del'>-&lt;table cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Classes and Modules&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-%classlist%&lt;br /&gt;</div><div class='del'>-ENDIF:classlist</div><div class='del'>-</div><div class='del'>-  !INCLUDE!  &lt;!-- method descriptions --&gt;</div><div class='del'>-</div><div class='del'>-END:sections</div><div class='del'>-</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-###############################################################################</div><div class='del'>-</div><div class='del'>-FILE_PAGE = &lt;&lt;_FILE_PAGE_</div><div class='del'>-&lt;table width="100%"&gt;</div><div class='del'>- &lt;tr class="title-row"&gt;</div><div class='del'>- &lt;td&gt;&lt;table width="100%"&gt;&lt;tr&gt;</div><div class='del'>-   &lt;td class="big-title-font" colspan="2"&gt;&lt;font size="-3"&gt;&lt;b&gt;File&lt;/b&gt;&lt;br /&gt;&lt;/font&gt;%short_name%&lt;/td&gt;</div><div class='del'>-   &lt;td align="right"&gt;&lt;table cellspacing="0" cellpadding="2"&gt;</div><div class='del'>-         &lt;tr&gt;</div><div class='del'>-           &lt;td  class="small-title-font"&gt;Path:&lt;/td&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;%full_path%</div><div class='del'>-IF:cvsurl</div><div class='del'>-				&amp;nbsp;(&lt;a href="%cvsurl%"&gt;&lt;acronym title="Concurrent Versioning System"&gt;CVS&lt;/acronym&gt;&lt;/a&gt;)</div><div class='del'>-ENDIF:cvsurl</div><div class='del'>-           &lt;/td&gt;</div><div class='del'>-         &lt;/tr&gt;</div><div class='del'>-         &lt;tr&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;Modified:&lt;/td&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;%dtm_modified%&lt;/td&gt;</div><div class='del'>-         &lt;/tr&gt;</div><div class='del'>-        &lt;/table&gt;</div><div class='del'>-    &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;</div><div class='del'>-  &lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-_FILE_PAGE_</div><div class='del'>-</div><div class='del'>-###################################################################</div><div class='del'>-</div><div class='del'>-CLASS_PAGE = %{</div><div class='del'>-&lt;table width="100%" border="0" cellspacing="0"&gt;</div><div class='del'>- &lt;tr class="title-row"&gt;</div><div class='del'>- &lt;td class="big-title-font"&gt;</div><div class='del'>-   &lt;font size="-3"&gt;&lt;b&gt;%classmod%&lt;/b&gt;&lt;br /&gt;&lt;/font&gt;%full_name%</div><div class='del'>- &lt;/td&gt;</div><div class='del'>- &lt;td align="right"&gt;</div><div class='del'>-   &lt;table cellspacing="0" cellpadding="2"&gt;</div><div class='del'>-     &lt;tr valign="top"&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;In:&lt;/td&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;</div><div class='del'>-START:infiles</div><div class='del'>-HREF:full_path_url:full_path:</div><div class='del'>-IF:cvsurl</div><div class='del'>-&amp;nbsp;(&lt;a href="%cvsurl%"&gt;&lt;acronym title="Concurrent Versioning System"&gt;CVS&lt;/acronym&gt;&lt;/a&gt;)</div><div class='del'>-ENDIF:cvsurl</div><div class='del'>-END:infiles</div><div class='del'>-      &lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-IF:parent</div><div class='del'>-     &lt;tr&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;Parent:&lt;/td&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;</div><div class='del'>-IF:par_url</div><div class='del'>-        &lt;a href="%par_url%" class="cyan"&gt;</div><div class='del'>-ENDIF:par_url</div><div class='del'>-%parent%</div><div class='del'>-IF:par_url</div><div class='del'>-         &lt;/a&gt;</div><div class='del'>-ENDIF:par_url</div><div class='del'>-      &lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-ENDIF:parent</div><div class='del'>-   &lt;/table&gt;</div><div class='del'>-  &lt;/td&gt;</div><div class='del'>-  &lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;&lt;br /&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-###################################################################</div><div class='del'>-</div><div class='del'>-METHOD_LIST = %{</div><div class='del'>-IF:includes</div><div class='del'>-&lt;div class="tablesubsubtitle"&gt;Included modules&lt;/div&gt;&lt;br /&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:includes</div><div class='del'>-    &lt;span class="method-name"&gt;HREF:aref:name:&lt;/span&gt;</div><div class='del'>-END:includes</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:includes</div><div class='del'>-</div><div class='del'>-IF:method_list</div><div class='del'>-START:method_list</div><div class='del'>-IF:methods</div><div class='del'>-&lt;table cellpadding=5 width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;%type% %category% methods&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-START:methods</div><div class='del'>-&lt;table width="100%" cellspacing="0" cellpadding="5" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="methodtitle"&gt;</div><div class='del'>-&lt;a name="%aref%"&gt;</div><div class='del'>-IF:callseq</div><div class='del'>-&lt;b&gt;%callseq%&lt;/b&gt;</div><div class='del'>-ENDIF:callseq</div><div class='del'>-IFNOT:callseq</div><div class='del'>- &lt;b&gt;%name%&lt;/b&gt;%params%</div><div class='del'>-ENDIF:callseq</div><div class='del'>-IF:codeurl</div><div class='del'>-&lt;a href="%codeurl%" target="source" class="srclink"&gt;src&lt;/a&gt;</div><div class='del'>-ENDIF:codeurl</div><div class='del'>-&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-IF:m_desc</div><div class='del'>-&lt;div class="description"&gt;</div><div class='del'>-%m_desc%</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:m_desc</div><div class='del'>-IF:aka</div><div class='del'>-&lt;div class="aka"&gt;</div><div class='del'>-This method is also aliased as</div><div class='del'>-START:aka</div><div class='del'>-&lt;a href="%aref%"&gt;%name%&lt;/a&gt;</div><div class='del'>-END:aka</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:aka</div><div class='del'>-IF:sourcecode</div><div class='del'>-&lt;pre class="source"&gt;</div><div class='del'>-%sourcecode%</div><div class='del'>-&lt;/pre&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-END:methods</div><div class='del'>-ENDIF:methods</div><div class='del'>-END:method_list</div><div class='del'>-ENDIF:method_list</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-########################## Source code ##########################</div><div class='del'>-</div><div class='del'>-SRC_PAGE = %{</div><div class='del'>-&lt;html&gt;</div><div class='del'>-&lt;head&gt;&lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-&lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%"&gt;</div><div class='del'>-&lt;style type="text/css"&gt;</div><div class='del'>-.ruby-comment    { color: green; font-style: italic }</div><div class='del'>-.ruby-constant   { color: #4433aa; font-weight: bold; }</div><div class='del'>-.ruby-identifier { color: #222222;  }</div><div class='del'>-.ruby-ivar       { color: #2233dd; }</div><div class='del'>-.ruby-keyword    { color: #3333FF; font-weight: bold }</div><div class='del'>-.ruby-node       { color: #777777; }</div><div class='del'>-.ruby-operator   { color: #111111;  }</div><div class='del'>-.ruby-regexp     { color: #662222; }</div><div class='del'>-.ruby-value      { color: #662222; font-style: italic }</div><div class='del'>-  .kw { color: #3333FF; font-weight: bold }</div><div class='del'>-  .cmt { color: green; font-style: italic }</div><div class='del'>-  .str { color: #662222; font-style: italic }</div><div class='del'>-  .re  { color: #662222; }</div><div class='del'>-&lt;/style&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body bgcolor="white"&gt;</div><div class='del'>-&lt;pre&gt;%code%&lt;/pre&gt;</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-########################## Index ################################</div><div class='del'>-</div><div class='del'>-FR_INDEX_BODY = %{</div><div class='del'>-!INCLUDE!</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-FILE_INDEX = %{</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=%charset%"&gt;</div><div class='del'>-&lt;style&gt;</div><div class='del'>-&lt;!--</div><div class='del'>-  body {</div><div class='del'>-background-color: #ddddff;</div><div class='del'>-     font-family: #{FONTS}; </div><div class='del'>-       font-size: 11px; </div><div class='del'>-      font-style: normal;</div><div class='del'>-     line-height: 14px; </div><div class='del'>-           color: #000040;</div><div class='del'>-  }</div><div class='del'>-div.banner {</div><div class='del'>-  background: #0000aa;</div><div class='del'>-  color:      white;</div><div class='del'>-  padding: 1;</div><div class='del'>-  margin: 0;</div><div class='del'>-  font-size: 90%;</div><div class='del'>-  font-weight: bold;</div><div class='del'>-  line-height: 1.1;</div><div class='del'>-  text-align: center;</div><div class='del'>-  width: 100%;</div><div class='del'>-}</div><div class='del'>-  </div><div class='del'>---&gt;</div><div class='del'>-&lt;/style&gt;</div><div class='del'>-&lt;base target="docwin"&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body&gt;</div><div class='del'>-&lt;div class="banner"&gt;%list_title%&lt;/div&gt;</div><div class='del'>-START:entries</div><div class='del'>-&lt;a href="%href%"&gt;%name%&lt;/a&gt;&lt;br /&gt;</div><div class='del'>-END:entries</div><div class='del'>-&lt;/body&gt;&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-CLASS_INDEX = FILE_INDEX</div><div class='del'>-METHOD_INDEX = FILE_INDEX</div><div class='del'>-</div><div class='del'>-INDEX = %{</div><div class='del'>-&lt;html&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%"&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-</div><div class='del'>-&lt;frameset cols="20%,*"&gt;</div><div class='del'>-    &lt;frameset rows="15%,35%,50%"&gt;</div><div class='del'>-        &lt;frame src="fr_file_index.html"   title="Files" name="Files"&gt;</div><div class='del'>-        &lt;frame src="fr_class_index.html"  name="Classes"&gt;</div><div class='del'>-        &lt;frame src="fr_method_index.html" name="Methods"&gt;</div><div class='del'>-    &lt;/frameset&gt;</div><div class='del'>-IF:inline_source</div><div class='del'>-      &lt;frame  src="%initial_page%" name="docwin"&gt;</div><div class='del'>-ENDIF:inline_source</div><div class='del'>-IFNOT:inline_source</div><div class='del'>-    &lt;frameset rows="80%,20%"&gt;</div><div class='del'>-      &lt;frame  src="%initial_page%" name="docwin"&gt;</div><div class='del'>-      &lt;frame  src="blank.html" name="source"&gt;</div><div class='del'>-    &lt;/frameset&gt;</div><div class='del'>-ENDIF:inline_source</div><div class='del'>-    &lt;noframes&gt;</div><div class='del'>-          &lt;body bgcolor="white"&gt;</div><div class='del'>-            Click &lt;a href="html/index.html"&gt;here&lt;/a&gt; for a non-frames</div><div class='del'>-            version of this page.</div><div class='del'>-          &lt;/body&gt;</div><div class='del'>-    &lt;/noframes&gt;</div><div class='del'>-&lt;/frameset&gt;</div><div class='del'>-</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-# and a blank page to use as a target</div><div class='del'>-BLANK = %{</div><div class='del'>-&lt;html&gt;&lt;body bgcolor="white"&gt;&lt;/body&gt;&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-def write_extra_pages</div><div class='del'>-  template = TemplatePage.new(BLANK)</div><div class='del'>-  File.open("blank.html", "w") { |f| template.write_html_on(f, {}) }</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/lib/rdoc/generators/template/html/old_html.rb b/lib/rdoc/generators/template/html/old_html.rb<br/>deleted file mode 100644<br/>index ca66302a08..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/template/html/old_html.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/template/html/old_html.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,728 +0,0 @@</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-# This is how you define the HTML that RDoc generates. Simply create</div><div class='del'>-# a file in rdoc/generators/html_templates that creates the</div><div class='del'>-# module RDoc::Page and populate it as described below. Then invoke</div><div class='del'>-# rdoc using the --template &lt;name of your file&gt; option, and</div><div class='del'>-# your template will be used.</div><div class='del'>-#</div><div class='del'>-# The constants defining pages use a simple templating system:</div><div class='del'>-#</div><div class='del'>-# * The templating system is passed a hash. Keys in the hash correspond</div><div class='del'>-#   to tags on this page. The tag %abc% is looked up in the hash,</div><div class='del'>-#   and is replaced by the corresponding hash value.</div><div class='del'>-#</div><div class='del'>-# * Some tags are optional. You can detect this using IF/ENDIF</div><div class='del'>-#</div><div class='del'>-#      IF: title</div><div class='del'>-#      The value of title is %title%</div><div class='del'>-#      ENDIF: title</div><div class='del'>-#</div><div class='del'>-# * Some entries in the hash have values that are arrays, where each</div><div class='del'>-#   entry in the array is itself a hash. These are used to generate</div><div class='del'>-#   lists using the START: construct. For example, given a hash</div><div class='del'>-#   containing</div><div class='del'>-# </div><div class='del'>-#      { 'people' =&gt; [ { 'name' =&gt; 'Fred', 'age' =&gt; '12' },</div><div class='del'>-#                      { 'name' =&gt; 'Mary', 'age' =&gt; '21' } ]</div><div class='del'>-#</div><div class='del'>-#   You could generate a simple table using</div><div class='del'>-#</div><div class='del'>-#      &lt;table&gt;</div><div class='del'>-#      START:people</div><div class='del'>-#        &lt;tr&gt;&lt;td&gt;%name%&lt;td&gt;%age%&lt;/tr&gt;</div><div class='del'>-#      END:people</div><div class='del'>-#      &lt;/table&gt;</div><div class='del'>-#</div><div class='del'>-#   These lists can be nested to an arbitrary depth</div><div class='del'>-#</div><div class='del'>-# * the construct HREF:url:name: generates &lt;a href="%url%"&gt;%name%&lt;/a&gt;</div><div class='del'>-#   if +url+ is defined in the hash, or %name% otherwise.</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-# Your file must contain the following constants</div><div class='del'>-#</div><div class='del'>-# [*FONTS*]  a list of fonts to be used</div><div class='del'>-# [*STYLE*]  a CSS section (without the &lt;style&gt; or comments). This is</div><div class='del'>-#            used to generate a style.css file</div><div class='del'>-#</div><div class='del'>-# [*BODY*] </div><div class='del'>-#   The main body of all non-index RDoc pages. BODY will contain</div><div class='del'>-#   two !INCLUDE!s. The first is used to include a document-type</div><div class='del'>-#   specific header (FILE_PAGE or CLASS_PAGE). The second include</div><div class='del'>-#   is for the method list (METHOD_LIST). THe body is passed:</div><div class='del'>-#</div><div class='del'>-#   %title%::</div><div class='del'>-#       the page's title</div><div class='del'>-#</div><div class='del'>-#   %style_url%::</div><div class='del'>-#       the url of a style sheet for this page</div><div class='del'>-#</div><div class='del'>-#   %diagram%::</div><div class='del'>-#       the optional URL of a diagram for this page</div><div class='del'>-#</div><div class='del'>-#   %description%::</div><div class='del'>-#       a (potentially multi-paragraph) string containing the</div><div class='del'>-#       description for th file/class/module.</div><div class='del'>-#</div><div class='del'>-#   %requires%::</div><div class='del'>-#       an optional list of %aref%/%name% pairs, one for each module</div><div class='del'>-#       required by this file.</div><div class='del'>-#</div><div class='del'>-#   %methods%::</div><div class='del'>-#       an optional list of %aref%/%name%, one for each method</div><div class='del'>-#       documented on this page. This is intended to be an index.</div><div class='del'>-#</div><div class='del'>-#   %attributes%::  </div><div class='del'>-#       An optional list. For each attribute it contains:</div><div class='del'>-#       %name%::   the attribute name</div><div class='del'>-#       %rw%::     r/o, w/o, or r/w</div><div class='del'>-#       %a_desc%:: description of the attribute</div><div class='del'>-#</div><div class='del'>-#   %classlist%:: </div><div class='del'>-#       An optional string containing an already-formatted list of</div><div class='del'>-#       classes and modules documented in this file</div><div class='del'>-#</div><div class='del'>-#   For FILE_PAGE entries, the body will be passed</div><div class='del'>-#</div><div class='del'>-#   %short_name%::  </div><div class='del'>-#       The name of the file</div><div class='del'>-#</div><div class='del'>-#   %full_path%::</div><div class='del'>-#       The full path to the file</div><div class='del'>-#</div><div class='del'>-#   %dtm_modified%::</div><div class='del'>-#       The date/time the file was last changed</div><div class='del'>-#</div><div class='del'>-#   For class and module pages, the body will be passed</div><div class='del'>-#</div><div class='del'>-#   %classmod%::</div><div class='del'>-#       The name of the class or module</div><div class='del'>-#</div><div class='del'>-#   %files%::</div><div class='del'>-#       A list. For each file this class is defined in, it contains:</div><div class='del'>-#       %full_path_url%:: an (optional) URL of the RDoc page</div><div class='del'>-#                         for this file</div><div class='del'>-#       %full_path%::     the name of the file</div><div class='del'>-#</div><div class='del'>-#   %par_url%::</div><div class='del'>-#       The (optional) URL of the RDoc page documenting this class's</div><div class='del'>-#       parent class</div><div class='del'>-#</div><div class='del'>-#   %parent%::</div><div class='del'>-#       The name of this class's parent.</div><div class='del'>-#</div><div class='del'>-#   For both files and classes, the body is passed the following information</div><div class='del'>-#   on includes and methods:</div><div class='del'>-#</div><div class='del'>-#   %includes%::    </div><div class='del'>-#       Optional list of included modules. For each, it receives</div><div class='del'>-#       %aref%:: optional URL to RDoc page for the module</div><div class='del'>-#       %name%:: the name of the module</div><div class='del'>-#</div><div class='del'>-#   %method_list%::</div><div class='del'>-#       Optional list of methods of a particular class and category.</div><div class='del'>-#</div><div class='del'>-#   Each method list entry contains:</div><div class='del'>-#</div><div class='del'>-#   %type%::        public/private/protected</div><div class='del'>-#   %category%::    instance/class</div><div class='del'>-#   %methods%::     a list of method descriptions</div><div class='del'>-#</div><div class='del'>-#   Each method description contains:</div><div class='del'>-#</div><div class='del'>-#   %aref%::        a target aref, used when referencing this method</div><div class='del'>-#                   description. You should code this as &lt;a name="%aref%"&gt;</div><div class='del'>-#   %codeurl%::     the optional URL to the page containing this method's</div><div class='del'>-#                   source code.</div><div class='del'>-#   %name%::        the method's name</div><div class='del'>-#   %params%::      the method's parameters</div><div class='del'>-#   %callseq%::     a full calling sequence</div><div class='del'>-#   %m_desc%::      the (potentially multi-paragraph) description of</div><div class='del'>-#                   this method.</div><div class='del'>-#</div><div class='del'>-# [*CLASS_PAGE*]</div><div class='del'>-#         Header for pages documenting classes and modules. See</div><div class='del'>-#         BODY above for the available parameters.</div><div class='del'>-#</div><div class='del'>-# [*FILE_PAGE*]</div><div class='del'>-#         Header for pages documenting files. See</div><div class='del'>-#         BODY above for the available parameters.</div><div class='del'>-#</div><div class='del'>-# [*METHOD_LIST*]</div><div class='del'>-#         Controls the display of the listing of methods. See BODY for</div><div class='del'>-#         parameters.</div><div class='del'>-#</div><div class='del'>-# [*INDEX*]</div><div class='del'>-#         The top-level index page. For a browser-like environment</div><div class='del'>-#         define a frame set that includes the file, class, and </div><div class='del'>-#         method indices. Passed</div><div class='del'>-#         %title%:: title of page</div><div class='del'>-#         %initial_page% :: url of initial page to display</div><div class='del'>-#</div><div class='del'>-# [*CLASS_INDEX*]</div><div class='del'>-#         Individual files for the three indexes. Passed:</div><div class='del'>-#         %index_url%:: URL of main index page</div><div class='del'>-#         %entries%::   List of</div><div class='del'>-#                       %name%:: name of an index entry</div><div class='del'>-#                       %href%:: url of corresponding page</div><div class='del'>-# [*METHOD_INDEX*]</div><div class='del'>-#         Same as CLASS_INDEX for methods</div><div class='del'>-#</div><div class='del'>-# [*FILE_INDEX*]</div><div class='del'>-#         Same as CLASS_INDEX for methods</div><div class='del'>-#</div><div class='del'>-# [*FR_INDEX_BODY*]</div><div class='del'>-#         A wrapper around CLASS_INDEX, METHOD_INDEX, and FILE_INDEX.</div><div class='del'>-#         If those index strings contain the complete HTML for the</div><div class='del'>-#         output, then FR_INDEX_BODY can simply be !INCLUDE!</div><div class='del'>-#</div><div class='del'>-# [*SRC_PAGE*]</div><div class='del'>-#         Page used to display source code. Passed %title% and %code%,</div><div class='del'>-#         the latter being a multi-line string of code.</div><div class='del'>-</div><div class='del'>-module Page</div><div class='del'>-</div><div class='del'>-FONTS = "Verdana, Arial, Helvetica, sans-serif"</div><div class='del'>-</div><div class='del'>-STYLE = %{</div><div class='del'>-body,td,p { font-family: %fonts%; </div><div class='del'>-       color: #000040;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.attr-rw { font-size: x-small; color: #444488 }</div><div class='del'>-</div><div class='del'>-.title-row { background: #0000aa;</div><div class='del'>-             color:      #eeeeff;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.big-title-font { color: white;</div><div class='del'>-                  font-family: %fonts%;</div><div class='del'>-                  font-size: large; </div><div class='del'>-                  height: 50px}</div><div class='del'>-</div><div class='del'>-.small-title-font { color: aqua;</div><div class='del'>-                    font-family: %fonts%;</div><div class='del'>-                    font-size: xx-small; }</div><div class='del'>-</div><div class='del'>-.aqua { color: aqua }</div><div class='del'>-</div><div class='del'>-.method-name, attr-name {</div><div class='del'>-      font-family: monospace; font-weight: bold;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.tablesubtitle, .tablesubsubtitle {</div><div class='del'>-   width: 100%;</div><div class='del'>-   margin-top: 1ex;</div><div class='del'>-   margin-bottom: .5ex;</div><div class='del'>-   padding: 5px 0px 5px 20px;</div><div class='del'>-   font-size: large;</div><div class='del'>-   color: aqua;</div><div class='del'>-   background: #3333cc;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.name-list {</div><div class='del'>-  font-family: monospace;</div><div class='del'>-  margin-left: 40px;</div><div class='del'>-  margin-bottom: 2ex;</div><div class='del'>-  line-height: 140%;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.description {</div><div class='del'>-  margin-left: 40px;</div><div class='del'>-  margin-top: -2ex;</div><div class='del'>-  margin-bottom: 2ex;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.description p {</div><div class='del'>-  line-height: 140%;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.aka {</div><div class='del'>-  margin-left: 40px;</div><div class='del'>-  margin-bottom: 2ex;</div><div class='del'>-  line-height: 100%;</div><div class='del'>-  font-size:   small;</div><div class='del'>-  color:       #808080;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.methodtitle {</div><div class='del'>-  font-size: medium;</div><div class='del'>-  text-decoration: none;</div><div class='del'>-  color: #0000AA;</div><div class='del'>-  background: white; </div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.paramsig {</div><div class='del'>-   font-size: small;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.srcbut { float: right }</div><div class='del'>-</div><div class='del'>-pre { font-size: 1.2em; }</div><div class='del'>-tt  { font-size: 1.2em; }</div><div class='del'>-</div><div class='del'>-pre.source {</div><div class='del'>-  border-style: groove;</div><div class='del'>-  background-color: #ddddff;</div><div class='del'>-  margin-left:  40px;</div><div class='del'>-  padding: 1em 0em 1em 2em;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.classlist {</div><div class='del'>-  margin-left: 40px;</div><div class='del'>-  margin-bottom: 2ex;</div><div class='del'>-  line-height: 140%;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-li {</div><div class='del'>-  display:    list-item;</div><div class='del'>-  margin-top: .6em;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-.ruby-comment    { color: green; font-style: italic }</div><div class='del'>-.ruby-constant   { color: #4433aa; font-weight: bold; }</div><div class='del'>-.ruby-identifier { color: #222222;  }</div><div class='del'>-.ruby-ivar       { color: #2233dd; }</div><div class='del'>-.ruby-keyword    { color: #3333FF; font-weight: bold }</div><div class='del'>-.ruby-node       { color: #777777; }</div><div class='del'>-.ruby-operator   { color: #111111;  }</div><div class='del'>-.ruby-regexp     { color: #662222; }</div><div class='del'>-.ruby-value      { color: #662222; font-style: italic }</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'>-HEADER = %{</div><div class='del'>-&lt;?xml version="1.0" encoding="utf-8"?&gt;</div><div class='del'>-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"</div><div class='del'>-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</div><div class='del'>-&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%" /&gt;</div><div class='del'>-  &lt;link rel=StyleSheet href="%style_url%" type="text/css" media="screen" /&gt;</div><div class='del'>-  &lt;script type="text/javascript" language="JavaScript"&gt;</div><div class='del'>-  &lt;!--</div><div class='del'>-  function popCode(url) {</div><div class='del'>-    window.open(url, "Code", </div><div class='del'>-          "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")</div><div class='del'>-  }</div><div class='del'>-  //--&gt;</div><div class='del'>-  &lt;/script&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-###################################################################</div><div class='del'>-</div><div class='del'>-METHOD_LIST = %{</div><div class='del'>-IF:includes</div><div class='del'>-&lt;table summary="Included modules" cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Included modules&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:includes</div><div class='del'>-    &lt;span class="method-name"&gt;HREF:aref:name:&lt;/span&gt;</div><div class='del'>-END:includes</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:includes</div><div class='del'>-</div><div class='del'>-IF:method_list</div><div class='del'>-START:method_list</div><div class='del'>-IF:methods</div><div class='del'>-&lt;table summary="Method list" cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;%type% %category% methods&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-START:methods</div><div class='del'>-&lt;table summary="method"  width="100%" cellspacing="0" cellpadding="5" border="0"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="methodtitle"&gt;</div><div class='del'>-&lt;a name="%aref%"&gt;&lt;/a&gt;</div><div class='del'>-IF:codeurl</div><div class='del'>-&lt;a href="%codeurl%" target="Code" class="methodtitle"</div><div class='del'>- onClick="popCode('%codeurl%');return false;"&gt;</div><div class='del'>-ENDIF:codeurl</div><div class='del'>-IF:callseq</div><div class='del'>-&lt;b&gt;%callseq%&lt;/b&gt;</div><div class='del'>-ENDIF:callseq</div><div class='del'>-IFNOT:callseq</div><div class='del'>-&lt;b&gt;%name%&lt;/b&gt;%params%</div><div class='del'>-ENDIF:callseq</div><div class='del'>-IF:codeurl</div><div class='del'>-&lt;/a&gt;</div><div class='del'>-ENDIF:codeurl</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-IF:m_desc</div><div class='del'>-&lt;div class="description"&gt;</div><div class='del'>-%m_desc%</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:m_desc</div><div class='del'>-IF:aka</div><div class='del'>-&lt;div class="aka"&gt;</div><div class='del'>-This method is also aliased as</div><div class='del'>-START:aka</div><div class='del'>-&lt;a href="%aref%"&gt;%name%&lt;/a&gt;</div><div class='del'>-END:aka</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:aka</div><div class='del'>-IF:sourcecode</div><div class='del'>-&lt;pre class="source"&gt;</div><div class='del'>-%sourcecode%</div><div class='del'>-&lt;/pre&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-END:methods</div><div class='del'>-ENDIF:methods</div><div class='del'>-END:method_list</div><div class='del'>-ENDIF:method_list</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-###################################################################</div><div class='del'>-</div><div class='del'>-CONTEXT_CONTENT = %{</div><div class='del'>-IF:diagram</div><div class='del'>-&lt;table summary="Diagram of classes and modules" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td align="center"&gt;</div><div class='del'>-%diagram%</div><div class='del'>-&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</div><div class='del'>-ENDIF:diagram</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-IF:description</div><div class='del'>-&lt;div class="description"&gt;%description%&lt;/div&gt;</div><div class='del'>-ENDIF:description</div><div class='del'>-</div><div class='del'>-IF:requires</div><div class='del'>-&lt;table summary="Requires" cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Required files&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:requires</div><div class='del'>-HREF:aref:name:&amp;nbsp; &amp;nbsp;</div><div class='del'>-END:requires</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:requires</div><div class='del'>-</div><div class='del'>-IF:methods</div><div class='del'>-&lt;table summary="Methods" cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Methods&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:methods</div><div class='del'>-HREF:aref:name:&amp;nbsp; &amp;nbsp;</div><div class='del'>-END:methods</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:methods</div><div class='del'>-</div><div class='del'>-IF:constants</div><div class='del'>-&lt;table summary="Constants" cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Constants&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;table cellpadding="5"&gt;</div><div class='del'>-START:constants</div><div class='del'>-&lt;tr valign="top"&gt;&lt;td&gt;%name%&lt;/td&gt;&lt;td&gt;=&lt;/td&gt;&lt;td&gt;%value%&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-IF:desc</div><div class='del'>-&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;%desc%&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-ENDIF:desc</div><div class='del'>-END:constants</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-ENDIF:constants</div><div class='del'>-</div><div class='del'>-IF:aliases</div><div class='del'>-&lt;table summary="Aliases" cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;External Aliases&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;div class="name-list"&gt;</div><div class='del'>-START:aliases</div><div class='del'>-%old_name% -&gt; %new_name%&lt;br /&gt;</div><div class='del'>-END:aliases</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:aliases</div><div class='del'>-</div><div class='del'>-IF:attributes</div><div class='del'>-&lt;table summary="Attributes" cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Attributes&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;table summary="Attribute details" cellspacing="5"&gt;</div><div class='del'>-START:attributes</div><div class='del'>-     &lt;tr valign="top"&gt;</div><div class='del'>-       &lt;td class="attr-name"&gt;%name%&lt;/td&gt;</div><div class='del'>-IF:rw</div><div class='del'>-       &lt;td align="center" class="attr-rw"&gt;&amp;nbsp;[%rw%]&amp;nbsp;&lt;/td&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-IFNOT:rw</div><div class='del'>-       &lt;td&gt;&lt;/td&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-       &lt;td&gt;%a_desc%&lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-END:attributes</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-ENDIF:attributes</div><div class='del'>-</div><div class='del'>-IF:classlist</div><div class='del'>-&lt;table summary="List of classes" cellpadding="5" width="100%"&gt;</div><div class='del'>-&lt;tr&gt;&lt;td class="tablesubtitle"&gt;Classes and Modules&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-&lt;div class="classlist"&gt;</div><div class='del'>-%classlist%</div><div class='del'>-&lt;/div&gt;</div><div class='del'>-ENDIF:classlist</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-###############################################################################</div><div class='del'>-</div><div class='del'>-BODY = HEADER + %{</div><div class='del'>-&lt;body bgcolor="white"&gt;</div><div class='del'>-!INCLUDE!  &lt;!-- banner header --&gt;</div><div class='del'>-} +</div><div class='del'>-CONTEXT_CONTENT + METHOD_LIST +</div><div class='del'>-%{</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-###############################################################################</div><div class='del'>-</div><div class='del'>-FILE_PAGE = &lt;&lt;_FILE_PAGE_</div><div class='del'>-&lt;table summary="Information on file" width="100%"&gt;</div><div class='del'>- &lt;tr class="title-row"&gt;</div><div class='del'>- &lt;td&gt;&lt;table summary="layout" width="100%"&gt;&lt;tr&gt;</div><div class='del'>-   &lt;td class="big-title-font" colspan="2"&gt;%short_name%&lt;/td&gt;</div><div class='del'>-   &lt;td align="right"&gt;&lt;table summary="layout" cellspacing="0" cellpadding="2"&gt;</div><div class='del'>-         &lt;tr&gt;</div><div class='del'>-           &lt;td  class="small-title-font"&gt;Path:&lt;/td&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;%full_path%</div><div class='del'>-IF:cvsurl</div><div class='del'>-				&amp;nbsp;(&lt;a href="%cvsurl%"&gt;&lt;acronym title="Concurrent Versioning System"&gt;CVS&lt;/acronym&gt;&lt;/a&gt;)</div><div class='del'>-ENDIF:cvsurl</div><div class='del'>-           &lt;/td&gt;</div><div class='del'>-         &lt;/tr&gt;</div><div class='del'>-         &lt;tr&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;Modified:&lt;/td&gt;</div><div class='del'>-           &lt;td class="small-title-font"&gt;%dtm_modified%&lt;/td&gt;</div><div class='del'>-         &lt;/tr&gt;</div><div class='del'>-        &lt;/table&gt;</div><div class='del'>-    &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;</div><div class='del'>-  &lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-_FILE_PAGE_</div><div class='del'>-</div><div class='del'>-###################################################################</div><div class='del'>-</div><div class='del'>-CLASS_PAGE = %{</div><div class='del'>-&lt;table summary="Information on class" width="100%" border="0" cellspacing="0"&gt;</div><div class='del'>- &lt;tr class="title-row"&gt;</div><div class='del'>- &lt;td class="big-title-font"&gt;</div><div class='del'>-   &lt;sup&gt;&lt;font color="aqua"&gt;%classmod%&lt;/font&gt;&lt;/sup&gt; %full_name%</div><div class='del'>- &lt;/td&gt;</div><div class='del'>- &lt;td align="right"&gt;</div><div class='del'>-   &lt;table summary="layout" cellspacing="0" cellpadding="2"&gt;</div><div class='del'>-     &lt;tr valign="top"&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;In:&lt;/td&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;</div><div class='del'>-START:infiles</div><div class='del'>-IF:full_path_url</div><div class='del'>-        &lt;a href="%full_path_url%" class="aqua"&gt;</div><div class='del'>-ENDIF:full_path_url</div><div class='del'>-%full_path%</div><div class='del'>-IF:full_path_url</div><div class='del'>-         &lt;/a&gt;</div><div class='del'>-ENDIF:full_path_url</div><div class='del'>-IF:cvsurl</div><div class='del'>-         &amp;nbsp;(&lt;a href="%cvsurl%"&gt;&lt;acronym title="Concurrent Versioning System"&gt;CVS&lt;/acronym&gt;&lt;/a&gt;)</div><div class='del'>-ENDIF:cvsurl</div><div class='del'>-&lt;br /&gt;</div><div class='del'>-END:infiles</div><div class='del'>-      &lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-IF:parent</div><div class='del'>-     &lt;tr&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;Parent:&lt;/td&gt;</div><div class='del'>-      &lt;td class="small-title-font"&gt;</div><div class='del'>-IF:par_url</div><div class='del'>-        &lt;a href="%par_url%" class="aqua"&gt;</div><div class='del'>-ENDIF:par_url</div><div class='del'>-%parent%</div><div class='del'>-IF:par_url</div><div class='del'>-         &lt;/a&gt;</div><div class='del'>-ENDIF:par_url</div><div class='del'>-      &lt;/td&gt;</div><div class='del'>-     &lt;/tr&gt;</div><div class='del'>-ENDIF:parent</div><div class='del'>-   &lt;/table&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'>-}</div><div class='del'>-</div><div class='del'>-=begin</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-########################## Source code ##########################</div><div class='del'>-</div><div class='del'>-SRC_PAGE = %{</div><div class='del'>-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&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=%charset%"&gt;</div><div class='del'>-&lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-&lt;link rel="stylesheet" href="%style_url%" type="text/css" media="screen" /&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body bgcolor="white"&gt;</div><div class='del'>-&lt;pre&gt;%code%&lt;/pre&gt;</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-########################## Index ################################</div><div class='del'>-</div><div class='del'>-FR_INDEX_BODY = %{</div><div class='del'>-!INCLUDE!</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-FILE_INDEX = %{</div><div class='del'>-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&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=%charset%"&gt;</div><div class='del'>-&lt;title&gt;%list_title%&lt;/title&gt;</div><div class='del'>-&lt;style type="text/css"&gt;</div><div class='del'>-&lt;!--</div><div class='del'>-  body {</div><div class='del'>-background-color: #ddddff;</div><div class='del'>-     font-family: #{FONTS}; </div><div class='del'>-       font-size: 11px; </div><div class='del'>-      font-style: normal;</div><div class='del'>-     line-height: 14px; </div><div class='del'>-           color: #000040;</div><div class='del'>-  }</div><div class='del'>-div.banner {</div><div class='del'>-  background: #0000aa;</div><div class='del'>-  color:      white;</div><div class='del'>-  padding: 1;</div><div class='del'>-  margin: 0;</div><div class='del'>-  font-size: 90%;</div><div class='del'>-  font-weight: bold;</div><div class='del'>-  line-height: 1.1;</div><div class='del'>-  text-align: center;</div><div class='del'>-  width: 100%;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-A.xx { color: white; font-weight: bold; }</div><div class='del'>---&gt;</div><div class='del'>-&lt;/style&gt;</div><div class='del'>-&lt;base target="docwin"&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body&gt;</div><div class='del'>-&lt;div class="banner"&gt;&lt;a href="%index_url%" class="xx"&gt;%list_title%&lt;/a&gt;&lt;/div&gt;</div><div class='del'>-START:entries</div><div class='del'>-&lt;a href="%href%"&gt;%name%&lt;/a&gt;&lt;br /&gt;</div><div class='del'>-END:entries</div><div class='del'>-&lt;/body&gt;&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-CLASS_INDEX = FILE_INDEX</div><div class='del'>-METHOD_INDEX = FILE_INDEX</div><div class='del'>-</div><div class='del'>-INDEX = %{</div><div class='del'>-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"&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=%charset%"&gt;</div><div class='del'>-&lt;title&gt;%title%&lt;/title&gt;&lt;/head&gt;</div><div class='del'>-</div><div class='del'>-&lt;frameset rows="20%, 80%"&gt;</div><div class='del'>-    &lt;frameset cols="25%,35%,45%"&gt;</div><div class='del'>-        &lt;frame src="fr_file_index.html"   title="Files" name="Files"&gt;</div><div class='del'>-        &lt;frame src="fr_class_index.html"  name="Classes"&gt;</div><div class='del'>-        &lt;frame src="fr_method_index.html" name="Methods"&gt;</div><div class='del'>-    &lt;/frameset&gt;</div><div class='del'>-    &lt;frame  src="%initial_page%" name="docwin"&gt;</div><div class='del'>-    &lt;noframes&gt;</div><div class='del'>-          &lt;body bgcolor="white"&gt;</div><div class='del'>-            Sorry, RDoc currently only generates HTML using frames.</div><div class='del'>-          &lt;/body&gt;</div><div class='del'>-    &lt;/noframes&gt;</div><div class='del'>-&lt;/frameset&gt;</div><div class='del'>-</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-######################################################################</div><div class='del'>-#</div><div class='del'>-# The following is used for the -1 option</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-CONTENTS_XML = %{</div><div class='del'>-IF:description</div><div class='del'>-%description%</div><div class='del'>-ENDIF:description</div><div class='del'>-</div><div class='del'>-IF:requires</div><div class='del'>-&lt;h4&gt;Requires:&lt;/h4&gt;</div><div class='del'>-&lt;ul&gt;</div><div class='del'>-START:requires</div><div class='del'>-IF:aref</div><div class='del'>-&lt;li&gt;&lt;a href="%aref%"&gt;%name%&lt;/a&gt;&lt;/li&gt;</div><div class='del'>-ENDIF:aref</div><div class='del'>-IFNOT:aref</div><div class='del'>-&lt;li&gt;%name%&lt;/li&gt;</div><div class='del'>-ENDIF:aref </div><div class='del'>-END:requires</div><div class='del'>-&lt;/ul&gt;</div><div class='del'>-ENDIF:requires</div><div class='del'>-</div><div class='del'>-IF:attributes</div><div class='del'>-&lt;h4&gt;Attributes&lt;/h4&gt;</div><div class='del'>-&lt;table&gt;</div><div class='del'>-START:attributes</div><div class='del'>-&lt;tr&gt;&lt;td&gt;%name%&lt;/td&gt;&lt;td&gt;%rw%&lt;/td&gt;&lt;td&gt;%a_desc%&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-END:attributes</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-ENDIF:attributes</div><div class='del'>-</div><div class='del'>-IF:includes</div><div class='del'>-&lt;h4&gt;Includes&lt;/h4&gt;</div><div class='del'>-&lt;ul&gt;</div><div class='del'>-START:includes</div><div class='del'>-IF:aref</div><div class='del'>-&lt;li&gt;&lt;a href="%aref%"&gt;%name%&lt;/a&gt;&lt;/li&gt;</div><div class='del'>-ENDIF:aref</div><div class='del'>-IFNOT:aref</div><div class='del'>-&lt;li&gt;%name%&lt;/li&gt;</div><div class='del'>-ENDIF:aref </div><div class='del'>-END:includes</div><div class='del'>-&lt;/ul&gt;</div><div class='del'>-ENDIF:includes</div><div class='del'>-</div><div class='del'>-IF:method_list</div><div class='del'>-&lt;h3&gt;Methods&lt;/h3&gt;</div><div class='del'>-START:method_list</div><div class='del'>-IF:methods</div><div class='del'>-START:methods</div><div class='del'>-&lt;h4&gt;%type% %category% method: &lt;a name="%aref%"&gt;%name%%params%&lt;/a&gt;&lt;/h4&gt;</div><div class='del'>-</div><div class='del'>-IF:m_desc</div><div class='del'>-%m_desc%</div><div class='del'>-ENDIF:m_desc</div><div class='del'>-</div><div class='del'>-IF:sourcecode</div><div class='del'>-&lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-%sourcecode%</div><div class='del'>-&lt;/pre&gt;&lt;/blockquote&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-END:methods</div><div class='del'>-ENDIF:methods</div><div class='del'>-END:method_list</div><div class='del'>-ENDIF:method_list</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'rdoc/generators/template/html/one_page_html'</div><div class='head'>diff --git a/lib/rdoc/generators/template/html/one_page_html.rb b/lib/rdoc/generators/template/html/one_page_html.rb<br/>deleted file mode 100644<br/>index 19441f4725..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/template/html/one_page_html.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/template/html/one_page_html.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,122 +0,0 @@</div><div class='del'>-module RDoc</div><div class='del'>-module Page</div><div class='del'>-######################################################################</div><div class='del'>-#</div><div class='del'>-# The following is used for the -1 option</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-CONTENTS_XML = %{</div><div class='del'>-IF:description</div><div class='del'>-%description%</div><div class='del'>-ENDIF:description</div><div class='del'>-</div><div class='del'>-IF:requires</div><div class='del'>-&lt;h4&gt;Requires:&lt;/h4&gt;</div><div class='del'>-&lt;ul&gt;</div><div class='del'>-START:requires</div><div class='del'>-IF:aref</div><div class='del'>-&lt;li&gt;&lt;a href="%aref%"&gt;%name%&lt;/a&gt;&lt;/li&gt;</div><div class='del'>-ENDIF:aref</div><div class='del'>-IFNOT:aref</div><div class='del'>-&lt;li&gt;%name%&lt;/li&gt;</div><div class='del'>-ENDIF:aref </div><div class='del'>-END:requires</div><div class='del'>-&lt;/ul&gt;</div><div class='del'>-ENDIF:requires</div><div class='del'>-</div><div class='del'>-IF:attributes</div><div class='del'>-&lt;h4&gt;Attributes&lt;/h4&gt;</div><div class='del'>-&lt;table&gt;</div><div class='del'>-START:attributes</div><div class='del'>-&lt;tr&gt;&lt;td&gt;%name%&lt;/td&gt;&lt;td&gt;%rw%&lt;/td&gt;&lt;td&gt;%a_desc%&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-END:attributes</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-ENDIF:attributes</div><div class='del'>-</div><div class='del'>-IF:includes</div><div class='del'>-&lt;h4&gt;Includes&lt;/h4&gt;</div><div class='del'>-&lt;ul&gt;</div><div class='del'>-START:includes</div><div class='del'>-IF:aref</div><div class='del'>-&lt;li&gt;&lt;a href="%aref%"&gt;%name%&lt;/a&gt;&lt;/li&gt;</div><div class='del'>-ENDIF:aref</div><div class='del'>-IFNOT:aref</div><div class='del'>-&lt;li&gt;%name%&lt;/li&gt;</div><div class='del'>-ENDIF:aref </div><div class='del'>-END:includes</div><div class='del'>-&lt;/ul&gt;</div><div class='del'>-ENDIF:includes</div><div class='del'>-</div><div class='del'>-IF:method_list</div><div class='del'>-&lt;h3&gt;Methods&lt;/h3&gt;</div><div class='del'>-START:method_list</div><div class='del'>-IF:methods</div><div class='del'>-START:methods</div><div class='del'>-&lt;h4&gt;%type% %category% method: </div><div class='del'>-IF:callseq</div><div class='del'>-&lt;a name="%aref%"&gt;%callseq%&lt;/a&gt;</div><div class='del'>-ENDIF:callseq</div><div class='del'>-IFNOT:callseq</div><div class='del'>-&lt;a name="%aref%"&gt;%name%%params%&lt;/a&gt;&lt;/h4&gt;</div><div class='del'>-ENDIF:callseq</div><div class='del'>-</div><div class='del'>-IF:m_desc</div><div class='del'>-%m_desc%</div><div class='del'>-ENDIF:m_desc</div><div class='del'>-</div><div class='del'>-IF:sourcecode</div><div class='del'>-&lt;blockquote&gt;&lt;pre&gt;</div><div class='del'>-%sourcecode%</div><div class='del'>-&lt;/pre&gt;&lt;/blockquote&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-END:methods</div><div class='del'>-ENDIF:methods</div><div class='del'>-END:method_list</div><div class='del'>-ENDIF:method_list</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-########################################################################</div><div class='del'>-</div><div class='del'>-ONE_PAGE = %{</div><div class='del'>-&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;</div><div class='del'>-&lt;html&gt;</div><div class='del'>-&lt;head&gt;</div><div class='del'>-  &lt;title&gt;%title%&lt;/title&gt;</div><div class='del'>-  &lt;meta http-equiv="Content-Type" content="text/html; charset=%charset%" /&gt;</div><div class='del'>-&lt;/head&gt;</div><div class='del'>-&lt;body&gt;</div><div class='del'>-START:files</div><div class='del'>-&lt;h2&gt;File: %short_name%&lt;/h2&gt;</div><div class='del'>-&lt;table&gt;</div><div class='del'>-  &lt;tr&gt;&lt;td&gt;Path:&lt;/td&gt;&lt;td&gt;%full_path%&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-  &lt;tr&gt;&lt;td&gt;Modified:&lt;/td&gt;&lt;td&gt;%dtm_modified%&lt;/td&gt;&lt;/tr&gt;</div><div class='del'>-&lt;/table&gt;</div><div class='del'>-} + CONTENTS_XML + %{</div><div class='del'>-END:files</div><div class='del'>-</div><div class='del'>-IF:classes</div><div class='del'>-&lt;h2&gt;Classes&lt;/h2&gt;</div><div class='del'>-START:classes</div><div class='del'>-IF:parent</div><div class='del'>-&lt;h3&gt;%classmod% %full_name% &amp;lt; HREF:par_url:parent:&lt;/h3&gt;</div><div class='del'>-ENDIF:parent</div><div class='del'>-IFNOT:parent</div><div class='del'>-&lt;h3&gt;%classmod% %full_name%&lt;/h3&gt;</div><div class='del'>-ENDIF:parent</div><div class='del'>-</div><div class='del'>-IF:infiles</div><div class='del'>-(in files</div><div class='del'>-START:infiles</div><div class='del'>-HREF:full_path_url:full_path:</div><div class='del'>-END:infiles</div><div class='del'>-)</div><div class='del'>-ENDIF:infiles</div><div class='del'>-} + CONTENTS_XML + %{</div><div class='del'>-END:classes</div><div class='del'>-ENDIF:classes</div><div class='del'>-&lt;/body&gt;</div><div class='del'>-&lt;/html&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/generators/template/xml/rdf.rb b/lib/rdoc/generators/template/xml/rdf.rb<br/>deleted file mode 100644<br/>index 1545d81a2f..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/template/xml/rdf.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/template/xml/rdf.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,112 +0,0 @@</div><div class='del'>-module RDoc</div><div class='del'>-module Page</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-CONTENTS_RDF = %{</div><div class='del'>-IF:description</div><div class='del'>-    &lt;description rd:parseType="Literal"&gt;</div><div class='del'>-%description%</div><div class='del'>-    &lt;/description&gt;</div><div class='del'>-ENDIF:description</div><div class='del'>-</div><div class='del'>-IF:requires</div><div class='del'>-START:requires</div><div class='del'>-         &lt;rd:required-file rd:name="%name%" /&gt;</div><div class='del'>-END:requires</div><div class='del'>-ENDIF:requires</div><div class='del'>-</div><div class='del'>-IF:attributes</div><div class='del'>-START:attributes</div><div class='del'>-        &lt;contents&gt;</div><div class='del'>-        &lt;Attribute rd:name="%name%"&gt;</div><div class='del'>-IF:rw</div><div class='del'>-          &lt;attribute-rw&gt;%rw%&lt;/attribute-rw&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-          &lt;description rdf:parseType="Literal"&gt;%a_desc%&lt;/description&gt;</div><div class='del'>-        &lt;/Attribute&gt;</div><div class='del'>-        &lt;/contents&gt;</div><div class='del'>-END:attributes</div><div class='del'>-ENDIF:attributes</div><div class='del'>-</div><div class='del'>-IF:includes</div><div class='del'>-      &lt;IncludedModuleList&gt;</div><div class='del'>-START:includes</div><div class='del'>-        &lt;included-module rd:name="%name%"  /&gt;</div><div class='del'>-END:includes</div><div class='del'>-      &lt;/IncludedModuleList&gt;</div><div class='del'>-ENDIF:includes</div><div class='del'>-</div><div class='del'>-IF:method_list</div><div class='del'>-START:method_list</div><div class='del'>-IF:methods</div><div class='del'>-START:methods</div><div class='del'>-	&lt;contents&gt;</div><div class='del'>-        &lt;Method rd:name="%name%" rd:visibility="%type%"</div><div class='del'>-                rd:category="%category%" rd:id="%aref%"&gt;</div><div class='del'>-          &lt;parameters&gt;%params%&lt;/parameters&gt;</div><div class='del'>-IF:m_desc</div><div class='del'>-          &lt;description rdf:parseType="Literal"&gt;</div><div class='del'>-%m_desc%</div><div class='del'>-          &lt;/description&gt;</div><div class='del'>-ENDIF:m_desc</div><div class='del'>-IF:sourcecode</div><div class='del'>-          &lt;source-code-listing rdf:parseType="Literal"&gt;</div><div class='del'>-%sourcecode%</div><div class='del'>-          &lt;/source-code-listing&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-        &lt;/Method&gt;</div><div class='del'>-       &lt;/contents&gt;</div><div class='del'>-END:methods</div><div class='del'>-ENDIF:methods</div><div class='del'>-END:method_list</div><div class='del'>-ENDIF:method_list</div><div class='del'>-     &lt;!-- end method list --&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-########################################################################</div><div class='del'>-</div><div class='del'>-ONE_PAGE = %{&lt;?xml version="1.0" encoding="utf-8"?&gt;</div><div class='del'>-&lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"</div><div class='del'>-        xmlns="http://pragprog.com/rdoc/rdoc.rdf#"</div><div class='del'>-        xmlns:rd="http://pragprog.com/rdoc/rdoc.rdf#"&gt;</div><div class='del'>-</div><div class='del'>-&lt;!-- RDoc --&gt;</div><div class='del'>-START:files</div><div class='del'>-  &lt;rd:File rd:name="%short_name%" rd:id="%href%"&gt;</div><div class='del'>-      &lt;path&gt;%full_path%&lt;/path&gt;</div><div class='del'>-      &lt;dtm-modified&gt;%dtm_modified%&lt;/dtm-modified&gt;</div><div class='del'>-} + CONTENTS_RDF + %{</div><div class='del'>-  &lt;/rd:File&gt;</div><div class='del'>-END:files</div><div class='del'>-START:classes</div><div class='del'>-  &lt;%classmod% rd:name="%full_name%" rd:id="%full_name%"&gt;</div><div class='del'>-    &lt;classmod-info&gt;</div><div class='del'>-IF:infiles</div><div class='del'>-      &lt;InFiles&gt;</div><div class='del'>-START:infiles</div><div class='del'>-        &lt;infile&gt;</div><div class='del'>-          &lt;File rd:name="%full_path%"</div><div class='del'>-IF:full_path_url</div><div class='del'>-                rdf:about="%full_path_url%"</div><div class='del'>-ENDIF:full_path_url</div><div class='del'>-           /&gt;</div><div class='del'>-         &lt;/infile&gt;</div><div class='del'>-END:infiles</div><div class='del'>-      &lt;/InFiles&gt;</div><div class='del'>-ENDIF:infiles</div><div class='del'>-IF:parent</div><div class='del'>-     &lt;superclass&gt;HREF:par_url:parent:&lt;/superclass&gt;</div><div class='del'>-ENDIF:parent</div><div class='del'>-    &lt;/classmod-info&gt;</div><div class='del'>-} + CONTENTS_RDF + %{</div><div class='del'>-  &lt;/%classmod%&gt;</div><div class='del'>-END:classes</div><div class='del'>-&lt;!-- /RDoc --&gt;</div><div class='del'>-&lt;/rdf:RDF&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/rdoc/generators/template/xml/xml.rb b/lib/rdoc/generators/template/xml/xml.rb<br/>deleted file mode 100644<br/>index 4a0c8c9ac4..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/template/xml/xml.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/template/xml/xml.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,112 +0,0 @@</div><div class='del'>-module RDoc</div><div class='del'>-module Page</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-CONTENTS_XML = %{</div><div class='del'>-IF:description</div><div class='del'>-    &lt;description&gt;</div><div class='del'>-%description%</div><div class='del'>-    &lt;/description&gt;</div><div class='del'>-ENDIF:description</div><div class='del'>-    &lt;contents&gt;</div><div class='del'>-IF:requires</div><div class='del'>-      &lt;required-file-list&gt;</div><div class='del'>-START:requires</div><div class='del'>-         &lt;required-file name="%name%"</div><div class='del'>-IF:aref </div><div class='del'>-                        href="%aref%"</div><div class='del'>-ENDIF:aref</div><div class='del'>-         /&gt;</div><div class='del'>-END:requires</div><div class='del'>-      &lt;/required-file-list&gt;</div><div class='del'>-ENDIF:requires</div><div class='del'>-IF:attributes</div><div class='del'>-      &lt;attribute-list&gt;</div><div class='del'>-START:attributes</div><div class='del'>-        &lt;attribute name="%name%"&gt;</div><div class='del'>-IF:rw</div><div class='del'>-          &lt;attribute-rw&gt;%rw%&lt;/attribute-rw&gt;</div><div class='del'>-ENDIF:rw</div><div class='del'>-          &lt;description&gt;%a_desc%&lt;/description&gt;</div><div class='del'>-        &lt;/attribute&gt;</div><div class='del'>-END:attributes</div><div class='del'>-      &lt;/attribute-list&gt;</div><div class='del'>-ENDIF:attributes</div><div class='del'>-IF:includes</div><div class='del'>-      &lt;included-module-list&gt;</div><div class='del'>-START:includes</div><div class='del'>-        &lt;included-module name="%name%"</div><div class='del'>-IF:aref</div><div class='del'>-                         href="%aref%"</div><div class='del'>-ENDIF:aref</div><div class='del'>-        /&gt;</div><div class='del'>-END:includes</div><div class='del'>-      &lt;/included-module-list&gt;</div><div class='del'>-ENDIF:includes</div><div class='del'>-IF:method_list</div><div class='del'>-      &lt;method-list&gt;</div><div class='del'>-START:method_list</div><div class='del'>-IF:methods</div><div class='del'>-START:methods</div><div class='del'>-        &lt;method name="%name%" type="%type%" category="%category%" id="%aref%"&gt;</div><div class='del'>-          &lt;parameters&gt;%params%&lt;/parameters&gt;</div><div class='del'>-IF:m_desc</div><div class='del'>-          &lt;description&gt;</div><div class='del'>-%m_desc%</div><div class='del'>-          &lt;/description&gt;</div><div class='del'>-ENDIF:m_desc</div><div class='del'>-IF:sourcecode</div><div class='del'>-          &lt;source-code-listing&gt;</div><div class='del'>-%sourcecode%</div><div class='del'>-          &lt;/source-code-listing&gt;</div><div class='del'>-ENDIF:sourcecode</div><div class='del'>-        &lt;/method&gt;</div><div class='del'>-END:methods</div><div class='del'>-ENDIF:methods</div><div class='del'>-END:method_list</div><div class='del'>-      &lt;/method-list&gt;</div><div class='del'>-ENDIF:method_list</div><div class='del'>-     &lt;/contents&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-########################################################################</div><div class='del'>-</div><div class='del'>-ONE_PAGE = %{&lt;?xml version="1.0" encoding="utf-8"?&gt;</div><div class='del'>-&lt;rdoc&gt;</div><div class='del'>-&lt;file-list&gt;</div><div class='del'>-START:files</div><div class='del'>-  &lt;file name="%short_name%" id="%href%"&gt;</div><div class='del'>-    &lt;file-info&gt;</div><div class='del'>-      &lt;path&gt;%full_path%&lt;/path&gt;</div><div class='del'>-      &lt;dtm-modified&gt;%dtm_modified%&lt;/dtm-modified&gt;</div><div class='del'>-    &lt;/file-info&gt;</div><div class='del'>-} + CONTENTS_XML + %{</div><div class='del'>-  &lt;/file&gt;</div><div class='del'>-END:files</div><div class='del'>-&lt;/file-list&gt;</div><div class='del'>-&lt;class-module-list&gt;</div><div class='del'>-START:classes</div><div class='del'>-  &lt;%classmod% name="%full_name%" id="%full_name%"&gt;</div><div class='del'>-    &lt;classmod-info&gt;</div><div class='del'>-IF:infiles</div><div class='del'>-      &lt;infiles&gt;      </div><div class='del'>-START:infiles</div><div class='del'>-        &lt;infile&gt;HREF:full_path_url:full_path:&lt;/infile&gt;</div><div class='del'>-END:infiles</div><div class='del'>-      &lt;/infiles&gt;</div><div class='del'>-ENDIF:infiles</div><div class='del'>-IF:parent</div><div class='del'>-     &lt;superclass&gt;HREF:par_url:parent:&lt;/superclass&gt;</div><div class='del'>-ENDIF:parent</div><div class='del'>-    &lt;/classmod-info&gt;</div><div class='del'>-} + CONTENTS_XML + %{</div><div class='del'>-  &lt;/%classmod%&gt;</div><div class='del'>-END:classes</div><div class='del'>-&lt;/class-module-list&gt;</div><div class='del'>-&lt;/rdoc&gt;</div><div class='del'>-}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/generators/xml_generator.rb b/lib/rdoc/generators/xml_generator.rb<br/>deleted file mode 100644<br/>index 8c1a76d62b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/generators/xml_generator.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/generators/xml_generator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,130 +0,0 @@</div><div class='del'>-</div><div class='del'>-require 'ftools'</div><div class='del'>-</div><div class='del'>-require 'rdoc/options'</div><div class='del'>-require 'rdoc/markup/simple_markup'</div><div class='del'>-require 'rdoc/markup/simple_markup/to_html'</div><div class='del'>-require 'rdoc/generators/html_generator'</div><div class='del'>-</div><div class='del'>-module Generators</div><div class='del'>-</div><div class='del'>-  # Generate XML output as one big file</div><div class='del'>-</div><div class='del'>-  class XMLGenerator &lt; HTMLGenerator</div><div class='del'>-</div><div class='del'>-    # Standard generator factory</div><div class='del'>-    def XMLGenerator.for(options)</div><div class='del'>-      XMLGenerator.new(options)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    def initialize(*args)</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Build the initial indices and output objects</div><div class='del'>-    # based on an array of TopLevel objects containing</div><div class='del'>-    # the extracted information. </div><div class='del'>-</div><div class='del'>-    def generate(info)</div><div class='del'>-      @info       = info</div><div class='del'>-      @files      = []</div><div class='del'>-      @classes    = []</div><div class='del'>-      @hyperlinks = {}</div><div class='del'>-</div><div class='del'>-      build_indices</div><div class='del'>-      generate_xml</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Generate:</div><div class='del'>-    #</div><div class='del'>-    # * a list of HtmlFile objects for each TopLevel object.</div><div class='del'>-    # * a list of HtmlClass objects for each first level</div><div class='del'>-    #   class or module in the TopLevel objects</div><div class='del'>-    # * a complete list of all hyperlinkable terms (file,</div><div class='del'>-    #   class, module, and method names)</div><div class='del'>-</div><div class='del'>-    def build_indices</div><div class='del'>-</div><div class='del'>-      @info.each do |toplevel|</div><div class='del'>-        @files &lt;&lt; HtmlFile.new(toplevel, @options, FILE_DIR)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      RDoc::TopLevel.all_classes_and_modules.each do |cls|</div><div class='del'>-        build_class_list(cls, @files[0], CLASS_DIR)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def build_class_list(from, html_file, class_dir)</div><div class='del'>-      @classes &lt;&lt; HtmlClass.new(from, html_file, class_dir, @options)</div><div class='del'>-      from.each_classmodule do |mod|</div><div class='del'>-        build_class_list(mod, html_file, class_dir)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Generate all the HTML. For the one-file case, we generate</div><div class='del'>-    # all the information in to one big hash</div><div class='del'>-    #</div><div class='del'>-    def generate_xml</div><div class='del'>-      values = { </div><div class='del'>-        'charset' =&gt; @options.charset,</div><div class='del'>-        'files'   =&gt; gen_into(@files),</div><div class='del'>-        'classes' =&gt; gen_into(@classes)</div><div class='del'>-      }</div><div class='del'>-      </div><div class='del'>-      # this method is defined in the template file</div><div class='del'>-      write_extra_pages if defined? write_extra_pages</div><div class='del'>-</div><div class='del'>-      template = TemplatePage.new(RDoc::Page::ONE_PAGE)</div><div class='del'>-</div><div class='del'>-      if @options.op_name</div><div class='del'>-        opfile = File.open(@options.op_name, "w")</div><div class='del'>-      else</div><div class='del'>-        opfile = $stdout</div><div class='del'>-      end</div><div class='del'>-      template.write_html_on(opfile, values)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_into(list)</div><div class='del'>-      res = []</div><div class='del'>-      list.each do |item|</div><div class='del'>-        res &lt;&lt; item.value_hash</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_file_index</div><div class='del'>-      gen_an_index(@files, 'Files')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_class_index</div><div class='del'>-      gen_an_index(@classes, 'Classes')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def gen_method_index</div><div class='del'>-      gen_an_index(HtmlMethod.all_methods, 'Methods')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    def gen_an_index(collection, title)</div><div class='del'>-      res = []</div><div class='del'>-      collection.sort.each do |f|</div><div class='del'>-        if f.document_self</div><div class='del'>-          res &lt;&lt; { "href" =&gt; f.path, "name" =&gt; f.index_name }</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      return {</div><div class='del'>-        "entries" =&gt; res,</div><div class='del'>-        'list_title' =&gt; title,</div><div class='del'>-        'index_url'  =&gt; main_url,</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'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/.document b/lib/rdoc/markup/.document<br/>deleted file mode 100644<br/>index 3cf4f21bd7..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/.document?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/.document</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-simple_markup</div><div class='del'>-simple_markup.rb</div><div class='head'>diff --git a/lib/rdoc/markup/sample/rdoc2latex.rb b/lib/rdoc/markup/sample/rdoc2latex.rb<br/>deleted file mode 100644<br/>index 26563b75da..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/sample/rdoc2latex.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/sample/rdoc2latex.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,16 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-# Illustration of a script to convert an RDoc-style file to a LaTeX</div><div class='del'>-# document</div><div class='del'>-</div><div class='del'>-require 'rdoc/markup/simple_markup'</div><div class='del'>-require 'rdoc/markup/simple_markup/to_latex'</div><div class='del'>-</div><div class='del'>-p = SM::SimpleMarkup.new</div><div class='del'>-h = SM::ToLaTeX.new</div><div class='del'>-</div><div class='del'>-#puts "\\documentclass{report}"</div><div class='del'>-#puts "\\usepackage{tabularx}"</div><div class='del'>-#puts "\\usepackage{parskip}"</div><div class='del'>-#puts "\\begin{document}"</div><div class='del'>-puts p.convert(ARGF.read, h)</div><div class='del'>-#puts "\\end{document}"</div><div class='head'>diff --git a/lib/rdoc/markup/sample/sample.rb b/lib/rdoc/markup/sample/sample.rb<br/>deleted file mode 100644<br/>index a375b54564..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/sample/sample.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/sample/sample.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,42 +0,0 @@</div><div class='del'>-# This program illustrates the basic use of the SimpleMarkup</div><div class='del'>-# class. It extracts the first comment block from the </div><div class='del'>-# simple_markup.rb file and converts it into HTML on</div><div class='del'>-# standard output. Run it using</div><div class='del'>-#</div><div class='del'>-#  % ruby sample.rb</div><div class='del'>-#</div><div class='del'>-# You should be in the sample/ directory when you do this,</div><div class='del'>-# as it hardwires the path to the files it needs to require.</div><div class='del'>-# This isn't necessary in the code you write once you've </div><div class='del'>-# installed the package.</div><div class='del'>-#</div><div class='del'>-# For a better way of formatting code comment blocks (and more)</div><div class='del'>-# see the rdoc package.</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-$:.unshift "../../.."</div><div class='del'>-</div><div class='del'>-require 'rdoc/markup/simple_markup'</div><div class='del'>-require 'rdoc/markup/simple_markup/to_html'</div><div class='del'>-</div><div class='del'>-# Extract the comment block from the source file</div><div class='del'>-</div><div class='del'>-input_string = ""</div><div class='del'>-</div><div class='del'>-File.foreach("../simple_markup.rb") do |line|</div><div class='del'>-  break unless line.gsub!(/^\# ?/, '')</div><div class='del'>-  input_string &lt;&lt; line</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-# Create a markup object</div><div class='del'>-markup = SM::SimpleMarkup.new</div><div class='del'>-</div><div class='del'>-# Attach it to an HTML formatter</div><div class='del'>-h = SM::ToHtml.new</div><div class='del'>-</div><div class='del'>-# And convert out comment block to html. Wrap it a body</div><div class='del'>-# tag pair to let browsers view it</div><div class='del'>-</div><div class='del'>-puts "&lt;html&gt;&lt;body&gt;"</div><div class='del'>-puts markup.convert(input_string, h)</div><div class='del'>-puts "&lt;/body&gt;&lt;/html&gt;"</div><div class='head'>diff --git a/lib/rdoc/markup/simple_markup.rb b/lib/rdoc/markup/simple_markup.rb<br/>deleted file mode 100644<br/>index 8193ca02d4..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/simple_markup.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/simple_markup.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,476 +0,0 @@</div><div class='del'>-# = Introduction</div><div class='del'>-#</div><div class='del'>-# SimpleMarkup parses plain text documents and attempts to decompose</div><div class='del'>-# them into their constituent parts. Some of these parts are high-level:</div><div class='del'>-# paragraphs, chunks of verbatim text, list entries and the like. Other</div><div class='del'>-# parts happen at the character level: a piece of bold text, a word in</div><div class='del'>-# code font. This markup is similar in spirit to that used on WikiWiki</div><div class='del'>-# webs, where folks create web pages using a simple set of formatting</div><div class='del'>-# rules.</div><div class='del'>-#</div><div class='del'>-# SimpleMarkup itself does no output formatting: this is left to a</div><div class='del'>-# different set of classes.</div><div class='del'>-#</div><div class='del'>-# SimpleMarkup is extendable at runtime: you can add new markup</div><div class='del'>-# elements to be recognised in the documents that SimpleMarkup parses.</div><div class='del'>-#</div><div class='del'>-# SimpleMarkup is intended to be the basis for a family of tools which</div><div class='del'>-# share the common requirement that simple, plain-text should be</div><div class='del'>-# rendered in a variety of different output formats and media. It is</div><div class='del'>-# envisaged that SimpleMarkup could be the basis for formating RDoc</div><div class='del'>-# style comment blocks, Wiki entries, and online FAQs.</div><div class='del'>-#</div><div class='del'>-# = Basic Formatting</div><div class='del'>-#</div><div class='del'>-# * SimpleMarkup looks for a document's natural left margin. This is</div><div class='del'>-#   used as the initial margin for the document.</div><div class='del'>-#</div><div class='del'>-# * Consecutive lines starting at this margin are considered to be a</div><div class='del'>-#   paragraph.</div><div class='del'>-#</div><div class='del'>-# * If a paragraph starts with a "*", "-", or with "&lt;digit&gt;.", then it is</div><div class='del'>-#   taken to be the start of a list. The margin in increased to be the</div><div class='del'>-#   first non-space following the list start flag. Subsequent lines</div><div class='del'>-#   should be indented to this new margin until the list ends. For</div><div class='del'>-#   example:</div><div class='del'>-#</div><div class='del'>-#      * this is a list with three paragraphs in</div><div class='del'>-#        the first item. This is the first paragraph.</div><div class='del'>-#</div><div class='del'>-#        And this is the second paragraph.</div><div class='del'>-#</div><div class='del'>-#        1. This is an indented, numbered list.</div><div class='del'>-#        2. This is the second item in that list</div><div class='del'>-#</div><div class='del'>-#        This is the third conventional paragraph in the</div><div class='del'>-#        first list item.</div><div class='del'>-#</div><div class='del'>-#      * This is the second item in the original list</div><div class='del'>-#</div><div class='del'>-# * You can also construct labeled lists, sometimes called description</div><div class='del'>-#   or definition lists. Do this by putting the label in square brackets</div><div class='del'>-#   and indenting the list body:</div><div class='del'>-#</div><div class='del'>-#       [cat]  a small furry mammal</div><div class='del'>-#              that seems to sleep a lot</div><div class='del'>-#</div><div class='del'>-#       [ant]  a little insect that is known</div><div class='del'>-#              to enjoy picnics</div><div class='del'>-#</div><div class='del'>-#   A minor variation on labeled lists uses two colons to separate the</div><div class='del'>-#   label from the list body:</div><div class='del'>-#</div><div class='del'>-#       cat::  a small furry mammal</div><div class='del'>-#              that seems to sleep a lot</div><div class='del'>-#</div><div class='del'>-#       ant::  a little insect that is known</div><div class='del'>-#              to enjoy picnics</div><div class='del'>-#     </div><div class='del'>-#   This latter style guarantees that the list bodies' left margins are</div><div class='del'>-#   aligned: think of them as a two column table.</div><div class='del'>-#</div><div class='del'>-# * Any line that starts to the right of the current margin is treated</div><div class='del'>-#   as verbatim text. This is useful for code listings. The example of a</div><div class='del'>-#   list above is also verbatim text.</div><div class='del'>-#</div><div class='del'>-# * A line starting with an equals sign (=) is treated as a</div><div class='del'>-#   heading. Level one headings have one equals sign, level two headings</div><div class='del'>-#   have two,and so on.</div><div class='del'>-#</div><div class='del'>-# * A line starting with three or more hyphens (at the current indent)</div><div class='del'>-#   generates a horizontal rule. THe more hyphens, the thicker the rule</div><div class='del'>-#   (within reason, and if supported by the output device)</div><div class='del'>-#</div><div class='del'>-# * You can use markup within text (except verbatim) to change the</div><div class='del'>-#   appearance of parts of that text. Out of the box, SimpleMarkup</div><div class='del'>-#   supports word-based and general markup.</div><div class='del'>-#</div><div class='del'>-#   Word-based markup uses flag characters around individual words:</div><div class='del'>-#</div><div class='del'>-#   [\*word*]  displays word in a *bold* font</div><div class='del'>-#   [\_word_]  displays word in an _emphasized_ font</div><div class='del'>-#   [\+word+]  displays word in a +code+ font</div><div class='del'>-#</div><div class='del'>-#   General markup affects text between a start delimiter and and end</div><div class='del'>-#   delimiter. Not surprisingly, these delimiters look like HTML markup.</div><div class='del'>-#</div><div class='del'>-#   [\&lt;b&gt;text...&lt;/b&gt;]    displays word in a *bold* font</div><div class='del'>-#   [\&lt;em&gt;text...&lt;/em&gt;]  displays word in an _emphasized_ font</div><div class='del'>-#   [\&lt;i&gt;text...&lt;/i&gt;]    displays word in an _emphasized_ font</div><div class='del'>-#   [\&lt;tt&gt;text...&lt;/tt&gt;]  displays word in a +code+ font</div><div class='del'>-#</div><div class='del'>-#   Unlike conventional Wiki markup, general markup can cross line</div><div class='del'>-#   boundaries. You can turn off the interpretation of markup by</div><div class='del'>-#   preceding the first character with a backslash, so \\\&lt;b&gt;bold</div><div class='del'>-#   text&lt;/b&gt; and \\\*bold* produce \&lt;b&gt;bold text&lt;/b&gt; and \*bold</div><div class='del'>-#   respectively.</div><div class='del'>-#</div><div class='del'>-# = Using SimpleMarkup</div><div class='del'>-#</div><div class='del'>-# For information on using SimpleMarkup programatically, </div><div class='del'>-# see SM::SimpleMarkup.</div><div class='del'>-#</div><div class='del'>-# Author::   Dave Thomas,  dave@pragmaticprogrammer.com</div><div class='del'>-# Version::  0.0</div><div class='del'>-# License::  Ruby license</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require 'rdoc/markup/simple_markup/fragments'</div><div class='del'>-require 'rdoc/markup/simple_markup/lines.rb'</div><div class='del'>-</div><div class='del'>-module SM  #:nodoc:</div><div class='del'>-</div><div class='del'>-  # == Synopsis</div><div class='del'>-  #</div><div class='del'>-  # This code converts &lt;tt&gt;input_string&lt;/tt&gt;, which is in the format</div><div class='del'>-  # described in markup/simple_markup.rb, to HTML. The conversion</div><div class='del'>-  # takes place in the +convert+ method, so you can use the same</div><div class='del'>-  # SimpleMarkup object to convert multiple input strings.</div><div class='del'>-  #</div><div class='del'>-  #   require 'rdoc/markup/simple_markup'</div><div class='del'>-  #   require 'rdoc/markup/simple_markup/to_html'</div><div class='del'>-  #</div><div class='del'>-  #   p = SM::SimpleMarkup.new</div><div class='del'>-  #   h = SM::ToHtml.new</div><div class='del'>-  #</div><div class='del'>-  #   puts p.convert(input_string, h)</div><div class='del'>-  #</div><div class='del'>-  # You can extend the SimpleMarkup parser to recognise new markup</div><div class='del'>-  # sequences, and to add special processing for text that matches a</div><div class='del'>-  # regular epxression. Here we make WikiWords significant to the parser,</div><div class='del'>-  # and also make the sequences {word} and \&lt;no&gt;text...&lt;/no&gt; signify</div><div class='del'>-  # strike-through text. When then subclass the HTML output class to deal</div><div class='del'>-  # with these:</div><div class='del'>-  #</div><div class='del'>-  #   require 'rdoc/markup/simple_markup'</div><div class='del'>-  #   require 'rdoc/markup/simple_markup/to_html'</div><div class='del'>-  #</div><div class='del'>-  #   class WikiHtml &lt; SM::ToHtml</div><div class='del'>-  #     def handle_special_WIKIWORD(special)</div><div class='del'>-  #       "&lt;font color=red&gt;" + special.text + "&lt;/font&gt;"</div><div class='del'>-  #     end</div><div class='del'>-  #   end</div><div class='del'>-  #</div><div class='del'>-  #   p = SM::SimpleMarkup.new</div><div class='del'>-  #   p.add_word_pair("{", "}", :STRIKE)</div><div class='del'>-  #   p.add_html("no", :STRIKE)</div><div class='del'>-  #</div><div class='del'>-  #   p.add_special(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)</div><div class='del'>-  #</div><div class='del'>-  #   h = WikiHtml.new</div><div class='del'>-  #   h.add_tag(:STRIKE, "&lt;strike&gt;", "&lt;/strike&gt;")</div><div class='del'>-  #</div><div class='del'>-  #   puts "&lt;body&gt;" + p.convert(ARGF.read, h) + "&lt;/body&gt;"</div><div class='del'>-  #</div><div class='del'>-  # == Output Formatters</div><div class='del'>-  #</div><div class='del'>-  # _missing_</div><div class='del'>-  #</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  class SimpleMarkup</div><div class='del'>-</div><div class='del'>-    SPACE = ?\s</div><div class='del'>-</div><div class='del'>-    # List entries look like:</div><div class='del'>-    #  *       text</div><div class='del'>-    #  1.      text</div><div class='del'>-    #  [label] text</div><div class='del'>-    #  label:: text</div><div class='del'>-    #</div><div class='del'>-    # Flag it as a list entry, and</div><div class='del'>-    # work out the indent for subsequent lines</div><div class='del'>-</div><div class='del'>-    SIMPLE_LIST_RE = /^(</div><div class='del'>-                  (  \*          (?# bullet)</div><div class='del'>-                    |-           (?# bullet)</div><div class='del'>-                    |\d+\.       (?# numbered )</div><div class='del'>-                    |[A-Za-z]\.  (?# alphabetically numbered )</div><div class='del'>-                  )</div><div class='del'>-                  \s+</div><div class='del'>-                )\S/x</div><div class='del'>-</div><div class='del'>-    LABEL_LIST_RE = /^(</div><div class='del'>-                        (  \[.*?\]    (?# labeled  )</div><div class='del'>-                          |\S.*::     (?# note     )</div><div class='del'>-                        )(?:\s+|$)</div><div class='del'>-                      )/x</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # take a block of text and use various heuristics to determine</div><div class='del'>-    # it's structure (paragraphs, lists, and so on). Invoke an</div><div class='del'>-    # event handler as we identify significant chunks.</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      @am = AttributeManager.new</div><div class='del'>-      @output = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Add to the sequences used to add formatting to an individual word </div><div class='del'>-    # (such as *bold*). Matching entries will generate attibutes</div><div class='del'>-    # that the output formatters can recognize by their +name+</div><div class='del'>-</div><div class='del'>-    def add_word_pair(start, stop, name)</div><div class='del'>-      @am.add_word_pair(start, stop, name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Add to the sequences recognized as general markup</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def add_html(tag, name)</div><div class='del'>-      @am.add_html(tag, name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Add to other inline sequences. For example, we could add</div><div class='del'>-    # WikiWords using something like:</div><div class='del'>-    #</div><div class='del'>-    #    parser.add_special(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)</div><div class='del'>-    #</div><div class='del'>-    # Each wiki word will be presented to the output formatter </div><div class='del'>-    # via the accept_special method</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def add_special(pattern, name)</div><div class='del'>-      @am.add_special(pattern, name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # We take a string, split it into lines, work out the type of</div><div class='del'>-    # each line, and from there deduce groups of lines (for example</div><div class='del'>-    # all lines in a paragraph). We then invoke the output formatter</div><div class='del'>-    # using a Visitor to display the result</div><div class='del'>-</div><div class='del'>-    def convert(str, op)</div><div class='del'>-      @lines = Lines.new(str.split(/\r?\n/).collect { |aLine| </div><div class='del'>-                           Line.new(aLine) })</div><div class='del'>-      return "" if @lines.empty?</div><div class='del'>-      @lines.normalize</div><div class='del'>-      assign_types_to_lines</div><div class='del'>-      group = group_lines</div><div class='del'>-      # call the output formatter to handle the result</div><div class='del'>-      #      group.to_a.each {|i| p i}</div><div class='del'>-      group.accept(@am, op)</div><div class='del'>-    end</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'>-</div><div class='del'>-    ##</div><div class='del'>-    # Look through the text at line indentation. We flag each line as being</div><div class='del'>-    # Blank, a paragraph, a list element, or verbatim text</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def assign_types_to_lines(margin = 0, level = 0)</div><div class='del'>-</div><div class='del'>-      while line = @lines.next</div><div class='del'>-        if line.isBlank?</div><div class='del'>-          line.stamp(Line::BLANK, level)</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        # if a line contains non-blanks before the margin, then it must belong</div><div class='del'>-        # to an outer level</div><div class='del'>-</div><div class='del'>-        text = line.text</div><div class='del'>-        </div><div class='del'>-        for i in 0...margin</div><div class='del'>-          if text[i] != SPACE</div><div class='del'>-            @lines.unget</div><div class='del'>-            return</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        active_line = text[margin..-1]</div><div class='del'>-</div><div class='del'>-        # Rules (horizontal lines) look like</div><div class='del'>-        #</div><div class='del'>-        #  ---   (three or more hyphens)</div><div class='del'>-        #</div><div class='del'>-        # The more hyphens, the thicker the rule</div><div class='del'>-        #</div><div class='del'>-</div><div class='del'>-        if /^(---+)\s*$/ =~ active_line</div><div class='del'>-          line.stamp(Line::RULE, level, $1.length-2)</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # Then look for list entries. First the ones that have to have</div><div class='del'>-        # text following them (* xxx, - xxx, and dd. xxx)</div><div class='del'>-</div><div class='del'>-        if SIMPLE_LIST_RE =~ active_line</div><div class='del'>-</div><div class='del'>-          offset = margin + $1.length</div><div class='del'>-          prefix = $2</div><div class='del'>-          prefix_length = prefix.length</div><div class='del'>-</div><div class='del'>-          flag = case prefix</div><div class='del'>-                 when "*","-" then ListBase::BULLET</div><div class='del'>-                 when /^\d/   then ListBase::NUMBER</div><div class='del'>-                 when /^[A-Z]/ then ListBase::UPPERALPHA</div><div class='del'>-                 when /^[a-z]/ then ListBase::LOWERALPHA</div><div class='del'>-                 else raise "Invalid List Type: #{self.inspect}"</div><div class='del'>-                 end</div><div class='del'>-</div><div class='del'>-          line.stamp(Line::LIST, level+1, prefix, flag)</div><div class='del'>-          text[margin, prefix_length] = " " * prefix_length</div><div class='del'>-          assign_types_to_lines(offset, level + 1)</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        if LABEL_LIST_RE =~ active_line</div><div class='del'>-          offset = margin + $1.length</div><div class='del'>-          prefix = $2</div><div class='del'>-          prefix_length = prefix.length</div><div class='del'>-</div><div class='del'>-          next if handled_labeled_list(line, level, margin, offset, prefix)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # Headings look like</div><div class='del'>-        # = Main heading</div><div class='del'>-        # == Second level</div><div class='del'>-        # === Third</div><div class='del'>-        #</div><div class='del'>-        # Headings reset the level to 0</div><div class='del'>-</div><div class='del'>-        if active_line[0] == ?= and active_line =~ /^(=+)\s*(.*)/</div><div class='del'>-          prefix_length = $1.length</div><div class='del'>-          prefix_length = 6 if prefix_length &gt; 6</div><div class='del'>-          line.stamp(Line::HEADING, 0, prefix_length)</div><div class='del'>-          line.strip_leading(margin + prefix_length)</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        # If the character's a space, then we have verbatim text,</div><div class='del'>-        # otherwise </div><div class='del'>-</div><div class='del'>-        if active_line[0] == SPACE</div><div class='del'>-          line.strip_leading(margin) if margin &gt; 0</div><div class='del'>-          line.stamp(Line::VERBATIM, level)</div><div class='del'>-        else</div><div class='del'>-          line.stamp(Line::PARAGRAPH, level)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Handle labeled list entries, We have a special case</div><div class='del'>-    # to deal with. Because the labels can be long, they force</div><div class='del'>-    # the remaining block of text over the to right:</div><div class='del'>-    #</div><div class='del'>-    # this is a long label that I wrote:: and here is the</div><div class='del'>-    #                                     block of text with</div><div class='del'>-    #                                     a silly margin</div><div class='del'>-    #</div><div class='del'>-    # So we allow the special case. If the label is followed</div><div class='del'>-    # by nothing, and if the following line is indented, then</div><div class='del'>-    # we take the indent of that line as the new margin</div><div class='del'>-    #</div><div class='del'>-    # this is a long label that I wrote::</div><div class='del'>-    #     here is a more reasonably indented block which</div><div class='del'>-    #     will ab attached to the label.</div><div class='del'>-    #</div><div class='del'>-    </div><div class='del'>-    def handled_labeled_list(line, level, margin, offset, prefix)</div><div class='del'>-      prefix_length = prefix.length</div><div class='del'>-      text = line.text</div><div class='del'>-      flag = nil</div><div class='del'>-      case prefix</div><div class='del'>-      when /^\[/</div><div class='del'>-        flag = ListBase::LABELED</div><div class='del'>-        prefix = prefix[1, prefix.length-2]</div><div class='del'>-      when /:$/</div><div class='del'>-        flag = ListBase::NOTE</div><div class='del'>-        prefix.chop!</div><div class='del'>-      else raise "Invalid List Type: #{self.inspect}"</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      # body is on the next line</div><div class='del'>-      </div><div class='del'>-      if text.length &lt;= offset</div><div class='del'>-        original_line = line</div><div class='del'>-        line = @lines.next</div><div class='del'>-        return(false) unless line</div><div class='del'>-        text = line.text</div><div class='del'>-        </div><div class='del'>-        for i in 0..margin</div><div class='del'>-          if text[i] != SPACE</div><div class='del'>-            @lines.unget</div><div class='del'>-            return false</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        i = margin</div><div class='del'>-        i += 1 while text[i] == SPACE</div><div class='del'>-        if i &gt;= text.length</div><div class='del'>-          @lines.unget</div><div class='del'>-          return false</div><div class='del'>-        else</div><div class='del'>-          offset = i</div><div class='del'>-          prefix_length = 0</div><div class='del'>-          @lines.delete(original_line)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      line.stamp(Line::LIST, level+1, prefix, flag)</div><div class='del'>-      text[margin, prefix_length] = " " * prefix_length</div><div class='del'>-      assign_types_to_lines(offset, level + 1)</div><div class='del'>-      return true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return a block consisting of fragments which are</div><div class='del'>-    # paragraphs, list entries or verbatim text. We merge consecutive</div><div class='del'>-    # lines of the same type and level together. We are also slightly</div><div class='del'>-    # tricky with lists: the lines following a list introduction</div><div class='del'>-    # look like paragraph lines at the next level, and we remap them</div><div class='del'>-    # into list entries instead</div><div class='del'>-</div><div class='del'>-    def group_lines</div><div class='del'>-      @lines.rewind</div><div class='del'>-</div><div class='del'>-      inList = false</div><div class='del'>-      wantedType = wantedLevel = nil</div><div class='del'>-</div><div class='del'>-      block = LineCollection.new</div><div class='del'>-      group = nil</div><div class='del'>-</div><div class='del'>-      while line = @lines.next</div><div class='del'>-        if line.level == wantedLevel and line.type == wantedType</div><div class='del'>-          group.add_text(line.text)</div><div class='del'>-        else</div><div class='del'>-          group = block.fragment_for(line)</div><div class='del'>-          block.add(group)</div><div class='del'>-          if line.type == Line::LIST</div><div class='del'>-            wantedType = Line::PARAGRAPH</div><div class='del'>-          else</div><div class='del'>-            wantedType = line.type</div><div class='del'>-          end</div><div class='del'>-          wantedLevel = line.type == Line::HEADING ? line.param : line.level</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      block.normalize</div><div class='del'>-      block</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ## for debugging, we allow access to our line contents as text</div><div class='del'>-    def content</div><div class='del'>-      @lines.as_text</div><div class='del'>-    end</div><div class='del'>-    public :content</div><div class='del'>-</div><div class='del'>-    ## for debugging, return the list of line types</div><div class='del'>-    def get_line_types</div><div class='del'>-      @lines.line_types</div><div class='del'>-    end</div><div class='del'>-    public :get_line_types</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/simple_markup/fragments.rb b/lib/rdoc/markup/simple_markup/fragments.rb<br/>deleted file mode 100644<br/>index 6ca06382ab..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/simple_markup/fragments.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/simple_markup/fragments.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,328 +0,0 @@</div><div class='del'>-require 'rdoc/markup/simple_markup/lines.rb'</div><div class='del'>-#require 'rdoc/markup/simple_markup/to_flow.rb'</div><div class='del'>-</div><div class='del'>-module SM</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # A Fragment is a chunk of text, subclassed as a paragraph, a list</div><div class='del'>-  # entry, or verbatim text</div><div class='del'>-</div><div class='del'>-  class Fragment</div><div class='del'>-    attr_reader   :level, :param, :txt</div><div class='del'>-    attr_accessor :type</div><div class='del'>-</div><div class='del'>-    def initialize(level, param, type, txt)</div><div class='del'>-      @level = level</div><div class='del'>-      @param = param</div><div class='del'>-      @type  = type</div><div class='del'>-      @txt   = ""</div><div class='del'>-      add_text(txt) if txt</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_text(txt)</div><div class='del'>-      @txt &lt;&lt; " " if @txt.length &gt; 0</div><div class='del'>-      @txt &lt;&lt; txt.tr_s("\n ", "  ").strip</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      "L#@level: #{self.class.name.split('::')[-1]}\n#@txt"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######</div><div class='del'>-    # This is a simple factory system that lets us associate fragement</div><div class='del'>-    # types (a string) with a subclass of fragment</div><div class='del'>-</div><div class='del'>-    TYPE_MAP = {}</div><div class='del'>-</div><div class='del'>-    def Fragment.type_name(name)</div><div class='del'>-      TYPE_MAP[name] = self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Fragment.for(line)</div><div class='del'>-      klass =  TYPE_MAP[line.type] ||</div><div class='del'>-        raise("Unknown line type: '#{line.type.inspect}:' '#{line.text}'")</div><div class='del'>-      return klass.new(line.level, line.param, line.flag, line.text)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # A paragraph is a fragment which gets wrapped to fit. We remove all</div><div class='del'>-  # newlines when we're created, and have them put back on output</div><div class='del'>-</div><div class='del'>-  class Paragraph &lt; Fragment</div><div class='del'>-    type_name Line::PARAGRAPH</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class BlankLine &lt; Paragraph</div><div class='del'>-    type_name Line::BLANK</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Heading &lt; Paragraph</div><div class='del'>-    type_name Line::HEADING</div><div class='del'>-</div><div class='del'>-    def head_level</div><div class='del'>-      @param.to_i</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # A List is a fragment with some kind of label</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  class ListBase &lt; Paragraph</div><div class='del'>-    # List types</div><div class='del'>-    BULLET  = :BULLET</div><div class='del'>-    NUMBER  = :NUMBER</div><div class='del'>-    UPPERALPHA  = :UPPERALPHA</div><div class='del'>-    LOWERALPHA  = :LOWERALPHA</div><div class='del'>-    LABELED = :LABELED</div><div class='del'>-    NOTE    = :NOTE</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class ListItem &lt; ListBase</div><div class='del'>-    type_name Line::LIST</div><div class='del'>-</div><div class='del'>-    #  def label</div><div class='del'>-    #    am = AttributeManager.new(@param)</div><div class='del'>-    #    am.flow</div><div class='del'>-    #  end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class ListStart &lt; ListBase</div><div class='del'>-    def initialize(level, param, type)</div><div class='del'>-      super(level, param, type, nil)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class ListEnd &lt; ListBase</div><div class='del'>-    def initialize(level, type)</div><div class='del'>-      super(level, "", type, nil)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Verbatim code contains lines that don't get wrapped.</div><div class='del'>-</div><div class='del'>-  class Verbatim &lt; Fragment</div><div class='del'>-    type_name  Line::VERBATIM</div><div class='del'>-</div><div class='del'>-    def add_text(txt)</div><div class='del'>-      @txt &lt;&lt; txt.chomp &lt;&lt; "\n"</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'>-  # A horizontal rule</div><div class='del'>-  class Rule &lt; Fragment</div><div class='del'>-    type_name Line::RULE</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Collect groups of lines together. Each group</div><div class='del'>-  # will end up containing a flow of text</div><div class='del'>-</div><div class='del'>-  class LineCollection</div><div class='del'>-    </div><div class='del'>-    def initialize</div><div class='del'>-      @fragments = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add(fragment)</div><div class='del'>-      @fragments &lt;&lt; fragment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def each(&amp;b)</div><div class='del'>-      @fragments.each(&amp;b)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # For testing</div><div class='del'>-    def to_a</div><div class='del'>-      @fragments.map {|fragment| fragment.to_s}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Factory for different fragment types</div><div class='del'>-    def fragment_for(*args)</div><div class='del'>-      Fragment.for(*args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # tidy up at the end</div><div class='del'>-    def normalize</div><div class='del'>-      change_verbatim_blank_lines</div><div class='del'>-      add_list_start_and_ends</div><div class='del'>-      add_list_breaks</div><div class='del'>-      tidy_blank_lines</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      @fragments.join("\n----\n")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept(am, visitor)</div><div class='del'>-</div><div class='del'>-      visitor.start_accepting</div><div class='del'>-</div><div class='del'>-      @fragments.each do |fragment|</div><div class='del'>-        case fragment</div><div class='del'>-        when Verbatim</div><div class='del'>-          visitor.accept_verbatim(am, fragment)</div><div class='del'>-        when Rule</div><div class='del'>-          visitor.accept_rule(am, fragment)</div><div class='del'>-        when ListStart</div><div class='del'>-          visitor.accept_list_start(am, fragment)</div><div class='del'>-        when ListEnd</div><div class='del'>-          visitor.accept_list_end(am, fragment)</div><div class='del'>-        when ListItem</div><div class='del'>-          visitor.accept_list_item(am, fragment)</div><div class='del'>-        when BlankLine</div><div class='del'>-          visitor.accept_blank_line(am, fragment)</div><div class='del'>-        when Heading</div><div class='del'>-          visitor.accept_heading(am, fragment)</div><div class='del'>-        when Paragraph</div><div class='del'>-          visitor.accept_paragraph(am, fragment)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      visitor.end_accepting</div><div class='del'>-    end</div><div class='del'>-    #######</div><div class='del'>-    private</div><div class='del'>-    #######</div><div class='del'>-</div><div class='del'>-    # If you have:</div><div class='del'>-    #</div><div class='del'>-    #    normal paragraph text.</div><div class='del'>-    #</div><div class='del'>-    #       this is code</div><div class='del'>-    #   </div><div class='del'>-    #       and more code</div><div class='del'>-    #</div><div class='del'>-    # You'll end up with the fragments Paragraph, BlankLine, </div><div class='del'>-    # Verbatim, BlankLine, Verbatim, BlankLine, etc</div><div class='del'>-    #</div><div class='del'>-    # The BlankLine in the middle of the verbatim chunk needs to</div><div class='del'>-    # be changed to a real verbatim newline, and the two</div><div class='del'>-    # verbatim blocks merged</div><div class='del'>-    #</div><div class='del'>-    #    </div><div class='del'>-    def change_verbatim_blank_lines</div><div class='del'>-      frag_block = nil</div><div class='del'>-      blank_count = 0</div><div class='del'>-      @fragments.each_with_index do |frag, i|</div><div class='del'>-        if frag_block.nil?</div><div class='del'>-          frag_block = frag if Verbatim === frag</div><div class='del'>-        else</div><div class='del'>-          case frag</div><div class='del'>-          when Verbatim</div><div class='del'>-            blank_count.times { frag_block.add_text("\n") }</div><div class='del'>-            blank_count = 0</div><div class='del'>-            frag_block.add_text(frag.txt)</div><div class='del'>-            @fragments[i] = nil    # remove out current fragment</div><div class='del'>-          when BlankLine</div><div class='del'>-            if frag_block</div><div class='del'>-              blank_count += 1</div><div class='del'>-              @fragments[i] = nil</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            frag_block = nil</div><div class='del'>-            blank_count = 0</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      @fragments.compact!</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # List nesting is implicit given the level of</div><div class='del'>-    # Make it explicit, just to make life a tad</div><div class='del'>-    # easier for the output processors</div><div class='del'>-</div><div class='del'>-    def add_list_start_and_ends</div><div class='del'>-      level = 0</div><div class='del'>-      res = []</div><div class='del'>-      type_stack = []</div><div class='del'>-</div><div class='del'>-      @fragments.each do |fragment|</div><div class='del'>-        # $stderr.puts "#{level} : #{fragment.class.name} : #{fragment.level}"</div><div class='del'>-        new_level = fragment.level</div><div class='del'>-        while (level &lt; new_level)</div><div class='del'>-          level += 1</div><div class='del'>-          type = fragment.type</div><div class='del'>-          res &lt;&lt; ListStart.new(level, fragment.param, type) if type</div><div class='del'>-          type_stack.push type</div><div class='del'>-          # $stderr.puts "Start: #{level}"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        while level &gt; new_level</div><div class='del'>-          type = type_stack.pop</div><div class='del'>-          res &lt;&lt; ListEnd.new(level, type) if type</div><div class='del'>-          level -= 1</div><div class='del'>-          # $stderr.puts "End: #{level}, #{type}"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        res &lt;&lt; fragment</div><div class='del'>-        level = fragment.level</div><div class='del'>-      end</div><div class='del'>-      level.downto(1) do |i|</div><div class='del'>-        type = type_stack.pop</div><div class='del'>-        res &lt;&lt; ListEnd.new(i, type) if type</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @fragments = res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # now insert start/ends between list entries at the</div><div class='del'>-    # same level that have different element types</div><div class='del'>-</div><div class='del'>-    def add_list_breaks</div><div class='del'>-      res = @fragments</div><div class='del'>-</div><div class='del'>-      @fragments = []</div><div class='del'>-      list_stack = []</div><div class='del'>-</div><div class='del'>-      res.each do |fragment|</div><div class='del'>-        case fragment</div><div class='del'>-        when ListStart</div><div class='del'>-          list_stack.push fragment</div><div class='del'>-        when ListEnd</div><div class='del'>-          start = list_stack.pop</div><div class='del'>-          fragment.type = start.type</div><div class='del'>-        when ListItem</div><div class='del'>-          l = list_stack.last</div><div class='del'>-          if fragment.type != l.type</div><div class='del'>-            @fragments &lt;&lt; ListEnd.new(l.level, l.type)</div><div class='del'>-            start = ListStart.new(l.level, fragment.param, fragment.type)</div><div class='del'>-            @fragments &lt;&lt; start</div><div class='del'>-            list_stack.pop</div><div class='del'>-            list_stack.push start</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          ;</div><div class='del'>-        end</div><div class='del'>-        @fragments &lt;&lt; fragment</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Finally tidy up the blank lines:</div><div class='del'>-    # * change Blank/ListEnd into ListEnd/Blank</div><div class='del'>-    # * remove blank lines at the front</div><div class='del'>-</div><div class='del'>-    def tidy_blank_lines</div><div class='del'>-      (@fragments.size - 1).times do |i|</div><div class='del'>-        if @fragments[i].kind_of?(BlankLine) and </div><div class='del'>-            @fragments[i+1].kind_of?(ListEnd)</div><div class='del'>-          @fragments[i], @fragments[i+1] = @fragments[i+1], @fragments[i] </div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # remove leading blanks</div><div class='del'>-      @fragments.each_with_index do |f, i|</div><div class='del'>-        break unless f.kind_of? BlankLine</div><div class='del'>-        @fragments[i] = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @fragments.compact!</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/simple_markup/inline.rb b/lib/rdoc/markup/simple_markup/inline.rb<br/>deleted file mode 100644<br/>index d54fe1e667..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/simple_markup/inline.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/simple_markup/inline.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,340 +0,0 @@</div><div class='del'>-module SM</div><div class='del'>-</div><div class='del'>-  # We manage a set of attributes. Each attribute has a symbol name</div><div class='del'>-  # and a bit value</div><div class='del'>-</div><div class='del'>-  class Attribute</div><div class='del'>-    SPECIAL = 1</div><div class='del'>-</div><div class='del'>-    @@name_to_bitmap = { :_SPECIAL_ =&gt; SPECIAL }</div><div class='del'>-    @@next_bitmap = 2</div><div class='del'>-</div><div class='del'>-    def Attribute.bitmap_for(name)</div><div class='del'>-      bitmap = @@name_to_bitmap[name]</div><div class='del'>-      if !bitmap</div><div class='del'>-        bitmap = @@next_bitmap</div><div class='del'>-        @@next_bitmap &lt;&lt;= 1</div><div class='del'>-        @@name_to_bitmap[name] = bitmap</div><div class='del'>-      end</div><div class='del'>-      bitmap</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Attribute.as_string(bitmap)</div><div class='del'>-      return "none" if bitmap.zero?</div><div class='del'>-      res = []</div><div class='del'>-      @@name_to_bitmap.each do |name, bit|</div><div class='del'>-        res &lt;&lt; name if (bitmap &amp; bit) != 0</div><div class='del'>-      end</div><div class='del'>-      res.join(",")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Attribute.each_name_of(bitmap)</div><div class='del'>-      @@name_to_bitmap.each do |name, bit|</div><div class='del'>-        next if bit == SPECIAL</div><div class='del'>-        yield name.to_s if (bitmap &amp; bit) != 0</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'>-  # An AttrChanger records a change in attributes. It contains</div><div class='del'>-  # a bitmap of the attributes to turn on, and a bitmap of those to</div><div class='del'>-  # turn off</div><div class='del'>-</div><div class='del'>-  AttrChanger = Struct.new(:turn_on, :turn_off)</div><div class='del'>-  class AttrChanger</div><div class='del'>-    def to_s</div><div class='del'>-      "Attr: +#{Attribute.as_string(@turn_on)}/-#{Attribute.as_string(@turn_on)}"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # An array of attributes which parallels the characters in a string</div><div class='del'>-  class AttrSpan</div><div class='del'>-    def initialize(length)</div><div class='del'>-      @attrs = Array.new(length, 0)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def set_attrs(start, length, bits)</div><div class='del'>-      for i in start ... (start+length)</div><div class='del'>-        @attrs[i] |= bits</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def [](n)</div><div class='del'>-      @attrs[n]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Hold details of a special sequence</div><div class='del'>-</div><div class='del'>-  class Special</div><div class='del'>-    attr_reader   :type</div><div class='del'>-    attr_accessor :text</div><div class='del'>-</div><div class='del'>-    def initialize(type, text)</div><div class='del'>-      @type, @text = type, text</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ==(o)</div><div class='del'>-      self.text == o.text &amp;&amp; self.type == o.type</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      "Special: type=#{type}, text=#{text.dump}"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  class AttributeManager</div><div class='del'>-</div><div class='del'>-    NULL = "\000".freeze</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # We work by substituting non-printing characters in to the</div><div class='del'>-    # text. For now I'm assuming that I can substitute</div><div class='del'>-    # a character in the range 0..8 for a 7 bit character</div><div class='del'>-    # without damaging the encoded string, but this might</div><div class='del'>-    # be optimistic</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    A_PROTECT  = 004</div><div class='del'>-    PROTECT_ATTR  = A_PROTECT.chr</div><div class='del'>-</div><div class='del'>-    # This maps delimiters that occur around words (such as</div><div class='del'>-    # *bold* or +tt+) where the start and end delimiters</div><div class='del'>-    # and the same. This lets us optimize the regexp</div><div class='del'>-    MATCHING_WORD_PAIRS = {}</div><div class='del'>-</div><div class='del'>-    # And this is used when the delimiters aren't the same. In this</div><div class='del'>-    # case the hash maps a pattern to the attribute character</div><div class='del'>-    WORD_PAIR_MAP = {}</div><div class='del'>-</div><div class='del'>-    # This maps HTML tags to the corresponding attribute char</div><div class='del'>-    HTML_TAGS = {}</div><div class='del'>-</div><div class='del'>-    # And this maps _special_ sequences to a name. A special sequence</div><div class='del'>-    # is something like a WikiWord</div><div class='del'>-    SPECIAL = {}</div><div class='del'>-</div><div class='del'>-    # Return an attribute object with the given turn_on</div><div class='del'>-    # and turn_off bits set</div><div class='del'>-</div><div class='del'>-    def attribute(turn_on, turn_off)</div><div class='del'>-      AttrChanger.new(turn_on, turn_off)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def change_attribute(current, new)</div><div class='del'>-      diff = current ^ new</div><div class='del'>-      attribute(new &amp; diff, current &amp; diff)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def changed_attribute_by_name(current_set, new_set)</div><div class='del'>-      current = new = 0</div><div class='del'>-      current_set.each {|name| current |= Attribute.bitmap_for(name) }</div><div class='del'>-      new_set.each {|name| new |= Attribute.bitmap_for(name) }</div><div class='del'>-      change_attribute(current, new)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def copy_string(start_pos, end_pos)</div><div class='del'>-      res = @str[start_pos...end_pos]</div><div class='del'>-      res.gsub!(/\000/, '')</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Map attributes like &lt;b&gt;text&lt;/b&gt;to the sequence \001\002&lt;char&gt;\001\003&lt;char&gt;,</div><div class='del'>-    # where &lt;char&gt; is a per-attribute specific character</div><div class='del'>-</div><div class='del'>-    def convert_attrs(str, attrs)</div><div class='del'>-      # first do matching ones</div><div class='del'>-      tags = MATCHING_WORD_PAIRS.keys.join("")</div><div class='del'>-      re = "(^|\\W)([#{tags}])([A-Za-z_]+?)\\2(\\W|\$)"</div><div class='del'>-#      re = "(^|\\W)([#{tags}])(\\S+?)\\2(\\W|\$)"</div><div class='del'>-      1 while str.gsub!(Regexp.new(re)) {</div><div class='del'>-        attr = MATCHING_WORD_PAIRS[$2];</div><div class='del'>-        attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr)</div><div class='del'>-        $1 + NULL*$2.length + $3 + NULL*$2.length + $4</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      # then non-matching</div><div class='del'>-      unless WORD_PAIR_MAP.empty?</div><div class='del'>-        WORD_PAIR_MAP.each do |regexp, attr|</div><div class='del'>-          str.gsub!(regexp) { </div><div class='del'>-            attrs.set_attrs($`.length + $1.length, $2.length, attr)</div><div class='del'>-            NULL*$1.length + $2 + NULL*$3.length</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'>-    def convert_html(str, attrs)</div><div class='del'>-      tags = HTML_TAGS.keys.join("|")</div><div class='del'>-      re = "&lt;(#{tags})&gt;(.*?)&lt;/\\1&gt;"</div><div class='del'>-      1 while str.gsub!(Regexp.new(re, Regexp::IGNORECASE)) {</div><div class='del'>-        attr = HTML_TAGS[$1.downcase]</div><div class='del'>-        html_length = $1.length + 2</div><div class='del'>-        seq = NULL * html_length</div><div class='del'>-        attrs.set_attrs($`.length + html_length, $2.length, attr)</div><div class='del'>-        seq + $2 + seq + NULL</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_specials(str, attrs)</div><div class='del'>-      unless SPECIAL.empty?</div><div class='del'>-        SPECIAL.each do |regexp, attr|</div><div class='del'>-          str.scan(regexp) do</div><div class='del'>-            attrs.set_attrs($`.length, $&amp;.length, attr | Attribute::SPECIAL)</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'>-    # A \ in front of a character that would normally be</div><div class='del'>-    # processed turns off processing. We do this by turning</div><div class='del'>-    # \&lt; into &lt;#{PROTECT}</div><div class='del'>-    </div><div class='del'>-    PROTECTABLE = [ "&lt;" &lt;&lt; "\\" ]  #"</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def mask_protected_sequences</div><div class='del'>-      protect_pattern = Regexp.new("\\\\([#{Regexp.escape(PROTECTABLE.join(''))}])")</div><div class='del'>-      @str.gsub!(protect_pattern, "\\1#{PROTECT_ATTR}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def unmask_protected_sequences</div><div class='del'>-      @str.gsub!(/(.)#{PROTECT_ATTR}/, "\\1\000")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      add_word_pair("*", "*", :BOLD)</div><div class='del'>-      add_word_pair("_", "_", :EM)</div><div class='del'>-      add_word_pair("+", "+", :TT)</div><div class='del'>-      </div><div class='del'>-      add_html("em", :EM)</div><div class='del'>-      add_html("i",  :EM)</div><div class='del'>-      add_html("b",  :BOLD)</div><div class='del'>-      add_html("tt",   :TT)</div><div class='del'>-      add_html("code", :TT)</div><div class='del'>-</div><div class='del'>-      add_special(/&lt;!--(.*?)--&gt;/, :COMMENT)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_word_pair(start, stop, name)</div><div class='del'>-      raise "Word flags may not start '&lt;'" if start[0] == ?&lt;</div><div class='del'>-      bitmap = Attribute.bitmap_for(name)</div><div class='del'>-      if start == stop</div><div class='del'>-        MATCHING_WORD_PAIRS[start] = bitmap</div><div class='del'>-      else</div><div class='del'>-        pattern = Regexp.new("(" + Regexp.escape(start) + ")" +</div><div class='del'>-#                             "([A-Za-z]+)" +</div><div class='del'>-                             "(\\S+)" +</div><div class='del'>-                             "(" + Regexp.escape(stop) +")")</div><div class='del'>-        WORD_PAIR_MAP[pattern] = bitmap</div><div class='del'>-      end</div><div class='del'>-      PROTECTABLE &lt;&lt; start[0,1]</div><div class='del'>-      PROTECTABLE.uniq!</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_html(tag, name)</div><div class='del'>-      HTML_TAGS[tag.downcase] = Attribute.bitmap_for(name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_special(pattern, name)</div><div class='del'>-      SPECIAL[pattern] = Attribute.bitmap_for(name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def flow(str)</div><div class='del'>-      @str = str</div><div class='del'>-</div><div class='del'>-      puts("Before flow, str='#{@str.dump}'") if $DEBUG</div><div class='del'>-      mask_protected_sequences</div><div class='del'>- </div><div class='del'>-      @attrs = AttrSpan.new(@str.length)</div><div class='del'>-</div><div class='del'>-      puts("After protecting, str='#{@str.dump}'") if $DEBUG</div><div class='del'>-      convert_attrs(@str, @attrs)</div><div class='del'>-      convert_html(@str, @attrs)</div><div class='del'>-      convert_specials(str, @attrs)</div><div class='del'>-      unmask_protected_sequences</div><div class='del'>-      puts("After flow, str='#{@str.dump}'") if $DEBUG</div><div class='del'>-      return split_into_flow</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def display_attributes</div><div class='del'>-      puts</div><div class='del'>-      puts @str.tr(NULL, "!")</div><div class='del'>-      bit = 1</div><div class='del'>-      16.times do |bno|</div><div class='del'>-        line = ""</div><div class='del'>-        @str.length.times do |i|</div><div class='del'>-          if (@attrs[i] &amp; bit) == 0</div><div class='del'>-            line &lt;&lt; " "</div><div class='del'>-          else</div><div class='del'>-            if bno.zero?</div><div class='del'>-              line &lt;&lt; "S"</div><div class='del'>-            else</div><div class='del'>-              line &lt;&lt; ("%d" % (bno+1))</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        puts(line) unless line =~ /^ *$/</div><div class='del'>-        bit &lt;&lt;= 1</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def split_into_flow</div><div class='del'>-</div><div class='del'>-      display_attributes if $DEBUG</div><div class='del'>-</div><div class='del'>-      res = []</div><div class='del'>-      current_attr = 0</div><div class='del'>-      str = ""</div><div class='del'>-</div><div class='del'>-      </div><div class='del'>-      str_len = @str.length</div><div class='del'>-</div><div class='del'>-      # skip leading invisible text</div><div class='del'>-      i = 0</div><div class='del'>-      i += 1 while i &lt; str_len and @str[i].zero?</div><div class='del'>-      start_pos = i</div><div class='del'>-</div><div class='del'>-      # then scan the string, chunking it on attribute changes</div><div class='del'>-      while i &lt; str_len</div><div class='del'>-        new_attr = @attrs[i]</div><div class='del'>-        if new_attr != current_attr</div><div class='del'>-          if i &gt; start_pos</div><div class='del'>-            res &lt;&lt; copy_string(start_pos, i)</div><div class='del'>-            start_pos = i</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          res &lt;&lt; change_attribute(current_attr, new_attr)</div><div class='del'>-          current_attr = new_attr</div><div class='del'>-</div><div class='del'>-          if (current_attr &amp; Attribute::SPECIAL) != 0</div><div class='del'>-            i += 1 while i &lt; str_len and (@attrs[i] &amp; Attribute::SPECIAL) != 0</div><div class='del'>-            res &lt;&lt; Special.new(current_attr, copy_string(start_pos, i))</div><div class='del'>-            start_pos = i</div><div class='del'>-            next</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # move on, skipping any invisible characters</div><div class='del'>-        begin</div><div class='del'>-          i += 1</div><div class='del'>-        end while i &lt; str_len and @str[i].zero?</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      # tidy up trailing text</div><div class='del'>-      if start_pos &lt; str_len</div><div class='del'>-        res &lt;&lt; copy_string(start_pos, str_len)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # and reset to all attributes off</div><div class='del'>-      res &lt;&lt; change_attribute(current_attr, 0) if current_attr != 0</div><div class='del'>-</div><div class='del'>-      return res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/simple_markup/lines.rb b/lib/rdoc/markup/simple_markup/lines.rb<br/>deleted file mode 100644<br/>index 4e294f27dc..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/simple_markup/lines.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/simple_markup/lines.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,151 +0,0 @@</div><div class='del'>-##########################################################################</div><div class='del'>-#</div><div class='del'>-# We store the lines we're working on as objects of class Line.</div><div class='del'>-# These contain the text of the line, along with a flag indicating the</div><div class='del'>-# line type, and an indentation level</div><div class='del'>-</div><div class='del'>-module SM</div><div class='del'>-</div><div class='del'>-  class Line</div><div class='del'>-    INFINITY = 9999</div><div class='del'>-</div><div class='del'>-    BLANK     = :BLANK</div><div class='del'>-    HEADING   = :HEADING</div><div class='del'>-    LIST      = :LIST</div><div class='del'>-    RULE      = :RULE</div><div class='del'>-    PARAGRAPH = :PARAGRAPH</div><div class='del'>-    VERBATIM  = :VERBATIM</div><div class='del'>-    </div><div class='del'>-    # line type</div><div class='del'>-    attr_accessor :type</div><div class='del'>-</div><div class='del'>-    # The indentation nesting level</div><div class='del'>-    attr_accessor :level</div><div class='del'>-</div><div class='del'>-    # The contents</div><div class='del'>-    attr_accessor :text</div><div class='del'>-</div><div class='del'>-    # A prefix or parameter. For LIST lines, this is</div><div class='del'>-    # the text that introduced the list item (the label)</div><div class='del'>-    attr_accessor  :param</div><div class='del'>-</div><div class='del'>-    # A flag. For list lines, this is the type of the list</div><div class='del'>-    attr_accessor :flag</div><div class='del'>-</div><div class='del'>-    # the number of leading spaces</div><div class='del'>-    attr_accessor :leading_spaces</div><div class='del'>-</div><div class='del'>-    # true if this line has been deleted from the list of lines</div><div class='del'>-    attr_accessor :deleted</div><div class='del'>-    </div><div class='del'>-</div><div class='del'>-    def initialize(text)</div><div class='del'>-      @text    = text.dup</div><div class='del'>-      @deleted = false</div><div class='del'>-</div><div class='del'>-      # expand tabs</div><div class='del'>-      1 while @text.gsub!(/\t+/) { ' ' * (8*$&amp;.length - $`.length % 8)}  &amp;&amp; $~ #`</div><div class='del'>-</div><div class='del'>-      # Strip trailing whitespace</div><div class='del'>-      @text.sub!(/\s+$/, '')</div><div class='del'>-</div><div class='del'>-      # and look for leading whitespace</div><div class='del'>-      if @text.length &gt; 0</div><div class='del'>-        @text =~ /^(\s*)/</div><div class='del'>-        @leading_spaces = $1.length</div><div class='del'>-      else</div><div class='del'>-        @leading_spaces = INFINITY</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return true if this line is blank</div><div class='del'>-    def isBlank?</div><div class='del'>-      @text.length.zero?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # stamp a line with a type, a level, a prefix, and a flag</div><div class='del'>-    def stamp(type, level, param="", flag=nil)</div><div class='del'>-      @type, @level, @param, @flag = type, level, param, flag</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Strip off the leading margin</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def strip_leading(size)</div><div class='del'>-      if @text.size &gt; size</div><div class='del'>-        @text[0,size] = ""</div><div class='del'>-      else</div><div class='del'>-        @text = ""</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      "#@type#@level: #@text"</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'>-  # A container for all the lines</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  class Lines</div><div class='del'>-    include Enumerable</div><div class='del'>-</div><div class='del'>-    attr_reader :lines   # for debugging</div><div class='del'>-</div><div class='del'>-    def initialize(lines)</div><div class='del'>-      @lines = lines</div><div class='del'>-      rewind</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def empty?</div><div class='del'>-      @lines.size.zero?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def each</div><div class='del'>-      @lines.each do |line|</div><div class='del'>-        yield line unless line.deleted</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-#    def [](index)</div><div class='del'>-#      @lines[index]</div><div class='del'>-#    end</div><div class='del'>-</div><div class='del'>-    def rewind</div><div class='del'>-      @nextline = 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def next</div><div class='del'>-      begin</div><div class='del'>-        res = @lines[@nextline]</div><div class='del'>-        @nextline += 1 if @nextline &lt; @lines.size</div><div class='del'>-      end while res and res.deleted and @nextline &lt; @lines.size</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def unget</div><div class='del'>-      @nextline -= 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def delete(a_line)</div><div class='del'>-      a_line.deleted = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def normalize</div><div class='del'>-      margin = @lines.collect{|l| l.leading_spaces}.min</div><div class='del'>-      margin = 0 if margin == Line::INFINITY</div><div class='del'>-      @lines.each {|line| line.strip_leading(margin) } if margin &gt; 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def as_text</div><div class='del'>-      @lines.map {|l| l.text}.join("\n")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def line_types</div><div class='del'>-      @lines.map {|l| l.type }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/simple_markup/preprocess.rb b/lib/rdoc/markup/simple_markup/preprocess.rb<br/>deleted file mode 100644<br/>index 101c9bdeb1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/simple_markup/preprocess.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/simple_markup/preprocess.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,73 +0,0 @@</div><div class='del'>-module SM</div><div class='del'>-</div><div class='del'>-  ## </div><div class='del'>-  # Handle common directives that can occur in a block of text:</div><div class='del'>-  #</div><div class='del'>-  # : include : filename</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  class PreProcess</div><div class='del'>-</div><div class='del'>-    def initialize(input_file_name, include_path)</div><div class='del'>-      @input_file_name = input_file_name</div><div class='del'>-      @include_path = include_path</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Look for common options in a chunk of text. Options that</div><div class='del'>-    # we don't handle are passed back to our caller</div><div class='del'>-    # as |directive, param| </div><div class='del'>-</div><div class='del'>-    def handle(text)</div><div class='del'>-      text.gsub!(/^([ \t#]*):(\w+):\s*(.+)?\n/) do </div><div class='del'>-        prefix    = $1</div><div class='del'>-        directive = $2.downcase</div><div class='del'>-        param     = $3</div><div class='del'>-</div><div class='del'>-        case directive</div><div class='del'>-        when "include"</div><div class='del'>-          filename = param.split[0]</div><div class='del'>-          include_file(filename, prefix)</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          yield(directive, param)</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'>-    private</div><div class='del'>-    #######</div><div class='del'>-</div><div class='del'>-    # Include a file, indenting it correctly</div><div class='del'>-</div><div class='del'>-    def include_file(name, indent)</div><div class='del'>-      if (full_name = find_include_file(name))</div><div class='del'>-        content = File.open(full_name) {|f| f.read}</div><div class='del'>-        # strip leading '#'s, but only if all lines start with them</div><div class='del'>-        if content =~ /^[^#]/</div><div class='del'>-          content.gsub(/^/, indent)</div><div class='del'>-        else</div><div class='del'>-          content.gsub(/^#?/, indent)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        $stderr.puts "Couldn't find file to include: '#{name}'"</div><div class='del'>-        ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Look for the given file in the directory containing the current</div><div class='del'>-    # file, and then in each of the directories specified in the</div><div class='del'>-    # RDOC_INCLUDE path</div><div class='del'>-</div><div class='del'>-    def find_include_file(name)</div><div class='del'>-      to_search = [ File.dirname(@input_file_name) ].concat @include_path</div><div class='del'>-      to_search.each do |dir|</div><div class='del'>-        full_name = File.join(dir, name)</div><div class='del'>-        stat = File.stat(full_name) rescue next</div><div class='del'>-        return full_name if stat.readable?</div><div class='del'>-      end</div><div class='del'>-      nil</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/lib/rdoc/markup/simple_markup/to_flow.rb b/lib/rdoc/markup/simple_markup/to_flow.rb<br/>deleted file mode 100644<br/>index 048e71abce..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/simple_markup/to_flow.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/simple_markup/to_flow.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,188 +0,0 @@</div><div class='del'>-require 'rdoc/markup/simple_markup/fragments'</div><div class='del'>-require 'rdoc/markup/simple_markup/inline'</div><div class='del'>-require 'cgi'</div><div class='del'>-</div><div class='del'>-module SM</div><div class='del'>-</div><div class='del'>-  module Flow</div><div class='del'>-    P = Struct.new(:body)</div><div class='del'>-    VERB = Struct.new(:body)</div><div class='del'>-    RULE = Struct.new(:width)</div><div class='del'>-    class LIST</div><div class='del'>-      attr_reader :type, :contents</div><div class='del'>-      def initialize(type)</div><div class='del'>-        @type = type</div><div class='del'>-        @contents = []</div><div class='del'>-      end</div><div class='del'>-      def &lt;&lt;(stuff)</div><div class='del'>-        @contents &lt;&lt; stuff</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    LI = Struct.new(:label, :body)</div><div class='del'>-    H = Struct.new(:level, :text)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class ToFlow</div><div class='del'>-    LIST_TYPE_TO_HTML = {</div><div class='del'>-      SM::ListBase::BULLET     =&gt;  [ "&lt;ul&gt;", "&lt;/ul&gt;" ],</div><div class='del'>-      SM::ListBase::NUMBER     =&gt;  [ "&lt;ol&gt;", "&lt;/ol&gt;" ],</div><div class='del'>-      SM::ListBase::UPPERALPHA =&gt;  [ "&lt;ol&gt;", "&lt;/ol&gt;" ],</div><div class='del'>-      SM::ListBase::LOWERALPHA =&gt;  [ "&lt;ol&gt;", "&lt;/ol&gt;" ],</div><div class='del'>-      SM::ListBase::LABELED    =&gt;  [ "&lt;dl&gt;", "&lt;/dl&gt;" ],</div><div class='del'>-      SM::ListBase::NOTE       =&gt;  [ "&lt;table&gt;", "&lt;/table&gt;" ],</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    InlineTag = Struct.new(:bit, :on, :off)</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      init_tags</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Set up the standard mapping of attributes to HTML tags</div><div class='del'>-    #</div><div class='del'>-    def init_tags</div><div class='del'>-      @attr_tags = [</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:BOLD), "&lt;b&gt;", "&lt;/b&gt;"),</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:TT),   "&lt;tt&gt;", "&lt;/tt&gt;"),</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:EM),   "&lt;em&gt;", "&lt;/em&gt;"),</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Add a new set of HTML tags for an attribute. We allow</div><div class='del'>-    # separate start and end tags for flexibility</div><div class='del'>-    #</div><div class='del'>-    def add_tag(name, start, stop)</div><div class='del'>-      @attr_tags &lt;&lt; InlineTag.new(SM::Attribute.bitmap_for(name), start, stop)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Given an HTML tag, decorate it with class information</div><div class='del'>-    # and the like if required. This is a no-op in the base</div><div class='del'>-    # class, but is overridden in HTML output classes that</div><div class='del'>-    # implement style sheets</div><div class='del'>-</div><div class='del'>-    def annotate(tag)</div><div class='del'>-      tag</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ## </div><div class='del'>-    # Here's the client side of the visitor pattern</div><div class='del'>-</div><div class='del'>-    def start_accepting</div><div class='del'>-      @res = []</div><div class='del'>-      @list_stack = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def end_accepting</div><div class='del'>-      @res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_paragraph(am, fragment)</div><div class='del'>-      @res &lt;&lt; Flow::P.new((convert_flow(am.flow(fragment.txt))))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_verbatim(am, fragment)</div><div class='del'>-      @res &lt;&lt; Flow::VERB.new((convert_flow(am.flow(fragment.txt))))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_rule(am, fragment)</div><div class='del'>-      size = fragment.param</div><div class='del'>-      size = 10 if size &gt; 10</div><div class='del'>-      @res &lt;&lt; Flow::RULE.new(size)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_start(am, fragment)</div><div class='del'>-      @list_stack.push(@res)</div><div class='del'>-      list = Flow::LIST.new(fragment.type)</div><div class='del'>-      @res &lt;&lt; list</div><div class='del'>-      @res = list</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_end(am, fragment)</div><div class='del'>-      @res = @list_stack.pop</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_item(am, fragment)</div><div class='del'>-      @res &lt;&lt; Flow::LI.new(fragment.param, convert_flow(am.flow(fragment.txt)))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_blank_line(am, fragment)</div><div class='del'>-      # @res &lt;&lt; annotate("&lt;p /&gt;") &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_heading(am, fragment)</div><div class='del'>-      @res &lt;&lt; Flow::H.new(fragment.head_level, convert_flow(am.flow(fragment.txt)))</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'>-    private</div><div class='del'>-</div><div class='del'>-    #######################################################################</div><div class='del'>-</div><div class='del'>-    def on_tags(res, item)</div><div class='del'>-      attr_mask = item.turn_on</div><div class='del'>-      return if attr_mask.zero?</div><div class='del'>-</div><div class='del'>-      @attr_tags.each do |tag|</div><div class='del'>-        if attr_mask &amp; tag.bit != 0</div><div class='del'>-          res &lt;&lt; annotate(tag.on)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def off_tags(res, item)</div><div class='del'>-      attr_mask = item.turn_off</div><div class='del'>-      return if attr_mask.zero?</div><div class='del'>-</div><div class='del'>-      @attr_tags.reverse_each do |tag|</div><div class='del'>-        if attr_mask &amp; tag.bit != 0</div><div class='del'>-          res &lt;&lt; annotate(tag.off)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_flow(flow)</div><div class='del'>-      res = ""</div><div class='del'>-      flow.each do |item|</div><div class='del'>-        case item</div><div class='del'>-        when String</div><div class='del'>-          res &lt;&lt; convert_string(item)</div><div class='del'>-        when AttrChanger</div><div class='del'>-          off_tags(res, item)</div><div class='del'>-          on_tags(res,  item)</div><div class='del'>-        when Special</div><div class='del'>-          res &lt;&lt; convert_special(item)</div><div class='del'>-        else</div><div class='del'>-          raise "Unknown flow element: #{item.inspect}"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # some of these patterns are taken from SmartyPants...</div><div class='del'>-</div><div class='del'>-    def convert_string(item)</div><div class='del'>-      CGI.escapeHTML(item)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_special(special)</div><div class='del'>-      handled = false</div><div class='del'>-      Attribute.each_name_of(special.type) do |name|</div><div class='del'>-        method_name = "handle_special_#{name}"</div><div class='del'>-        if self.respond_to? method_name</div><div class='del'>-          special.text = send(method_name, special)</div><div class='del'>-          handled = true</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      raise "Unhandled special: #{special}" unless handled</div><div class='del'>-      special.text</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/simple_markup/to_html.rb b/lib/rdoc/markup/simple_markup/to_html.rb<br/>deleted file mode 100644<br/>index 26b5f4ce70..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/simple_markup/to_html.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/simple_markup/to_html.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,289 +0,0 @@</div><div class='del'>-require 'rdoc/markup/simple_markup/fragments'</div><div class='del'>-require 'rdoc/markup/simple_markup/inline'</div><div class='del'>-</div><div class='del'>-require 'cgi'</div><div class='del'>-</div><div class='del'>-module SM</div><div class='del'>-</div><div class='del'>-  class ToHtml</div><div class='del'>-</div><div class='del'>-    LIST_TYPE_TO_HTML = {</div><div class='del'>-      ListBase::BULLET =&gt;  [ "&lt;ul&gt;", "&lt;/ul&gt;" ],</div><div class='del'>-      ListBase::NUMBER =&gt;  [ "&lt;ol&gt;", "&lt;/ol&gt;" ],</div><div class='del'>-      ListBase::UPPERALPHA =&gt;  [ "&lt;ol&gt;", "&lt;/ol&gt;" ],</div><div class='del'>-      ListBase::LOWERALPHA =&gt;  [ "&lt;ol&gt;", "&lt;/ol&gt;" ],</div><div class='del'>-      ListBase::LABELED =&gt; [ "&lt;dl&gt;", "&lt;/dl&gt;" ],</div><div class='del'>-      ListBase::NOTE    =&gt; [ "&lt;table&gt;", "&lt;/table&gt;" ],</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    InlineTag = Struct.new(:bit, :on, :off)</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      init_tags</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Set up the standard mapping of attributes to HTML tags</div><div class='del'>-    #</div><div class='del'>-    def init_tags</div><div class='del'>-      @attr_tags = [</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:BOLD), "&lt;b&gt;", "&lt;/b&gt;"),</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:TT),   "&lt;tt&gt;", "&lt;/tt&gt;"),</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:EM),   "&lt;em&gt;", "&lt;/em&gt;"),</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Add a new set of HTML tags for an attribute. We allow</div><div class='del'>-    # separate start and end tags for flexibility</div><div class='del'>-    #</div><div class='del'>-    def add_tag(name, start, stop)</div><div class='del'>-      @attr_tags &lt;&lt; InlineTag.new(SM::Attribute.bitmap_for(name), start, stop)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Given an HTML tag, decorate it with class information</div><div class='del'>-    # and the like if required. This is a no-op in the base</div><div class='del'>-    # class, but is overridden in HTML output classes that</div><div class='del'>-    # implement style sheets</div><div class='del'>-</div><div class='del'>-    def annotate(tag)</div><div class='del'>-      tag</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ## </div><div class='del'>-    # Here's the client side of the visitor pattern</div><div class='del'>-</div><div class='del'>-    def start_accepting</div><div class='del'>-      @res = ""</div><div class='del'>-      @in_list_entry = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def end_accepting</div><div class='del'>-      @res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_paragraph(am, fragment)</div><div class='del'>-      @res &lt;&lt; annotate("&lt;p&gt;") + "\n"</div><div class='del'>-      @res &lt;&lt; wrap(convert_flow(am.flow(fragment.txt)))</div><div class='del'>-      @res &lt;&lt; annotate("&lt;/p&gt;") + "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_verbatim(am, fragment)</div><div class='del'>-      @res &lt;&lt; annotate("&lt;pre&gt;") + "\n"</div><div class='del'>-      @res &lt;&lt; CGI.escapeHTML(fragment.txt)</div><div class='del'>-      @res &lt;&lt; annotate("&lt;/pre&gt;") &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_rule(am, fragment)</div><div class='del'>-      size = fragment.param</div><div class='del'>-      size = 10 if size &gt; 10</div><div class='del'>-      @res &lt;&lt; "&lt;hr size=\"#{size}\"&gt;&lt;/hr&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_start(am, fragment)</div><div class='del'>-      @res &lt;&lt; html_list_name(fragment.type, true) &lt;&lt;"\n"</div><div class='del'>-      @in_list_entry.push false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_end(am, fragment)</div><div class='del'>-      if tag = @in_list_entry.pop</div><div class='del'>-        @res &lt;&lt; annotate(tag) &lt;&lt; "\n"</div><div class='del'>-      end</div><div class='del'>-      @res &lt;&lt; html_list_name(fragment.type, false) &lt;&lt;"\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_item(am, fragment)</div><div class='del'>-      if tag = @in_list_entry.last</div><div class='del'>-        @res &lt;&lt; annotate(tag) &lt;&lt; "\n"</div><div class='del'>-      end</div><div class='del'>-      @res &lt;&lt; list_item_start(am, fragment)</div><div class='del'>-      @res &lt;&lt; wrap(convert_flow(am.flow(fragment.txt))) &lt;&lt; "\n"</div><div class='del'>-      @in_list_entry[-1] = list_end_for(fragment.type)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_blank_line(am, fragment)</div><div class='del'>-      # @res &lt;&lt; annotate("&lt;p /&gt;") &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_heading(am, fragment)</div><div class='del'>-      @res &lt;&lt; convert_heading(fragment.head_level, am.flow(fragment.txt))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # This is a higher speed (if messier) version of wrap</div><div class='del'>-</div><div class='del'>-    def wrap(txt, line_len = 76)</div><div class='del'>-      res = ""</div><div class='del'>-      sp = 0</div><div class='del'>-      ep = txt.length</div><div class='del'>-      while sp &lt; ep</div><div class='del'>-        # scan back for a space</div><div class='del'>-        p = sp + line_len - 1</div><div class='del'>-        if p &gt;= ep</div><div class='del'>-          p = ep</div><div class='del'>-        else</div><div class='del'>-          while p &gt; sp and txt[p] != ?\s</div><div class='del'>-            p -= 1</div><div class='del'>-          end</div><div class='del'>-          if p &lt;= sp</div><div class='del'>-            p = sp + line_len</div><div class='del'>-            while p &lt; ep and txt[p] != ?\s</div><div class='del'>-              p += 1</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        res &lt;&lt; txt[sp...p] &lt;&lt; "\n"</div><div class='del'>-        sp = p</div><div class='del'>-        sp += 1 while sp &lt; ep and txt[sp] == ?\s</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</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'>-</div><div class='del'>-    def on_tags(res, item)</div><div class='del'>-      attr_mask = item.turn_on</div><div class='del'>-      return if attr_mask.zero?</div><div class='del'>-</div><div class='del'>-      @attr_tags.each do |tag|</div><div class='del'>-        if attr_mask &amp; tag.bit != 0</div><div class='del'>-          res &lt;&lt; annotate(tag.on)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def off_tags(res, item)</div><div class='del'>-      attr_mask = item.turn_off</div><div class='del'>-      return if attr_mask.zero?</div><div class='del'>-</div><div class='del'>-      @attr_tags.reverse_each do |tag|</div><div class='del'>-        if attr_mask &amp; tag.bit != 0</div><div class='del'>-          res &lt;&lt; annotate(tag.off)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_flow(flow)</div><div class='del'>-      res = ""</div><div class='del'>-      flow.each do |item|</div><div class='del'>-        case item</div><div class='del'>-        when String</div><div class='del'>-          res &lt;&lt; convert_string(item)</div><div class='del'>-        when AttrChanger</div><div class='del'>-          off_tags(res, item)</div><div class='del'>-          on_tags(res,  item)</div><div class='del'>-        when Special</div><div class='del'>-          res &lt;&lt; convert_special(item)</div><div class='del'>-        else</div><div class='del'>-          raise "Unknown flow element: #{item.inspect}"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # some of these patterns are taken from SmartyPants...</div><div class='del'>-</div><div class='del'>-    def convert_string(item)</div><div class='del'>-      CGI.escapeHTML(item).</div><div class='del'>-      </div><div class='del'>-      </div><div class='del'>-      # convert -- to em-dash, (-- to en-dash)</div><div class='del'>-        gsub(/---?/, '&amp;#8212;'). #gsub(/--/, '&amp;#8211;').</div><div class='del'>-</div><div class='del'>-      # convert ... to elipsis (and make sure .... becomes .&lt;elipsis&gt;)</div><div class='del'>-        gsub(/\.\.\.\./, '.&amp;#8230;').gsub(/\.\.\./, '&amp;#8230;').</div><div class='del'>-</div><div class='del'>-      # convert single closing quote</div><div class='del'>-        gsub(%r{([^ \t\r\n\[\{\(])\'}) { "#$1&amp;#8217;" }.</div><div class='del'>-        gsub(%r{\'(?=\W|s\b)}) { "&amp;#8217;" }.</div><div class='del'>-</div><div class='del'>-      # convert single opening quote</div><div class='del'>-        gsub(/'/, '&amp;#8216;').</div><div class='del'>-</div><div class='del'>-      # convert double closing quote</div><div class='del'>-        gsub(%r{([^ \t\r\n\[\{\(])\'(?=\W)}) { "#$1&amp;#8221;" }.</div><div class='del'>-</div><div class='del'>-      # convert double opening quote</div><div class='del'>-        gsub(/'/, '&amp;#8220;').</div><div class='del'>-</div><div class='del'>-      # convert copyright</div><div class='del'>-        gsub(/\(c\)/, '&amp;#169;').</div><div class='del'>-</div><div class='del'>-      # convert and registered trademark</div><div class='del'>-        gsub(/\(r\)/, '&amp;#174;')</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_special(special)</div><div class='del'>-      handled = false</div><div class='del'>-      Attribute.each_name_of(special.type) do |name|</div><div class='del'>-        method_name = "handle_special_#{name}"</div><div class='del'>-        if self.respond_to? method_name</div><div class='del'>-          special.text = send(method_name, special)</div><div class='del'>-          handled = true</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      raise "Unhandled special: #{special}" unless handled</div><div class='del'>-      special.text</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_heading(level, flow)</div><div class='del'>-      res =</div><div class='del'>-        annotate("&lt;h#{level}&gt;") + </div><div class='del'>-        convert_flow(flow) + </div><div class='del'>-        annotate("&lt;/h#{level}&gt;\n")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def html_list_name(list_type, is_open_tag)</div><div class='del'>-      tags = LIST_TYPE_TO_HTML[list_type] || raise("Invalid list type: #{list_type.inspect}")</div><div class='del'>-      annotate(tags[ is_open_tag ? 0 : 1])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def list_item_start(am, fragment)</div><div class='del'>-      case fragment.type</div><div class='del'>-      when ListBase::BULLET, ListBase::NUMBER</div><div class='del'>-        annotate("&lt;li&gt;")</div><div class='del'>-</div><div class='del'>-      when ListBase::UPPERALPHA</div><div class='del'>-	annotate("&lt;li type=\"A\"&gt;")</div><div class='del'>-</div><div class='del'>-      when ListBase::LOWERALPHA</div><div class='del'>-	annotate("&lt;li type=\"a\"&gt;")</div><div class='del'>-</div><div class='del'>-      when ListBase::LABELED</div><div class='del'>-        annotate("&lt;dt&gt;") +</div><div class='del'>-          convert_flow(am.flow(fragment.param)) + </div><div class='del'>-          annotate("&lt;/dt&gt;") +</div><div class='del'>-          annotate("&lt;dd&gt;")</div><div class='del'>-</div><div class='del'>-      when ListBase::NOTE</div><div class='del'>-        annotate("&lt;tr&gt;") +</div><div class='del'>-          annotate("&lt;td valign=\"top\"&gt;") +</div><div class='del'>-          convert_flow(am.flow(fragment.param)) + </div><div class='del'>-          annotate("&lt;/td&gt;") +</div><div class='del'>-          annotate("&lt;td&gt;")</div><div class='del'>-      else</div><div class='del'>-        raise "Invalid list type"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def list_end_for(fragment_type)</div><div class='del'>-      case fragment_type</div><div class='del'>-      when ListBase::BULLET, ListBase::NUMBER, ListBase::UPPERALPHA, ListBase::LOWERALPHA</div><div class='del'>-        "&lt;/li&gt;"</div><div class='del'>-      when ListBase::LABELED</div><div class='del'>-        "&lt;/dd&gt;"</div><div class='del'>-      when ListBase::NOTE</div><div class='del'>-        "&lt;/td&gt;&lt;/tr&gt;"</div><div class='del'>-      else</div><div class='del'>-        raise "Invalid list type"</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'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/simple_markup/to_latex.rb b/lib/rdoc/markup/simple_markup/to_latex.rb<br/>deleted file mode 100644<br/>index 6c16278652..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/simple_markup/to_latex.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/simple_markup/to_latex.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,333 +0,0 @@</div><div class='del'>-require 'rdoc/markup/simple_markup/fragments'</div><div class='del'>-require 'rdoc/markup/simple_markup/inline'</div><div class='del'>-</div><div class='del'>-require 'cgi'</div><div class='del'>-</div><div class='del'>-module SM</div><div class='del'>-</div><div class='del'>-  # Convert SimpleMarkup to basic LaTeX report format</div><div class='del'>-</div><div class='del'>-  class ToLaTeX</div><div class='del'>-</div><div class='del'>-    BS = "\020"   # \</div><div class='del'>-    OB = "\021"   # {</div><div class='del'>-    CB = "\022"   # }</div><div class='del'>-    DL = "\023"   # Dollar</div><div class='del'>-</div><div class='del'>-    BACKSLASH   = "#{BS}symbol#{OB}92#{CB}"</div><div class='del'>-    HAT         = "#{BS}symbol#{OB}94#{CB}"</div><div class='del'>-    BACKQUOTE   = "#{BS}symbol#{OB}0#{CB}"</div><div class='del'>-    TILDE       = "#{DL}#{BS}sim#{DL}"</div><div class='del'>-    LESSTHAN    = "#{DL}&lt;#{DL}"</div><div class='del'>-    GREATERTHAN = "#{DL}&gt;#{DL}"</div><div class='del'>-</div><div class='del'>-    def self.l(str)</div><div class='del'>-      str.tr('\\', BS).tr('{', OB).tr('}', CB).tr('$', DL)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def l(arg)</div><div class='del'>-      SM::ToLaTeX.l(arg)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    LIST_TYPE_TO_LATEX = {</div><div class='del'>-      ListBase::BULLET =&gt;  [ l("\\begin{itemize}"), l("\\end{itemize}") ],</div><div class='del'>-      ListBase::NUMBER =&gt;  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\arabic" ],</div><div class='del'>-      ListBase::UPPERALPHA =&gt;  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\Alph" ],</div><div class='del'>-      ListBase::LOWERALPHA =&gt;  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\alph" ],</div><div class='del'>-      ListBase::LABELED =&gt; [ l("\\begin{description}"), l("\\end{description}") ],</div><div class='del'>-      ListBase::NOTE    =&gt; [</div><div class='del'>-        l("\\begin{tabularx}{\\linewidth}{@{} l X @{}}"), </div><div class='del'>-        l("\\end{tabularx}") ],</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    InlineTag = Struct.new(:bit, :on, :off)</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      init_tags</div><div class='del'>-      @list_depth = 0</div><div class='del'>-      @prev_list_types = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Set up the standard mapping of attributes to LaTeX</div><div class='del'>-    #</div><div class='del'>-    def init_tags</div><div class='del'>-      @attr_tags = [</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:BOLD), l("\\textbf{"), l("}")),</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:TT),   l("\\texttt{"), l("}")),</div><div class='del'>-        InlineTag.new(SM::Attribute.bitmap_for(:EM),   l("\\emph{"), l("}")),</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Escape a LaTeX string</div><div class='del'>-    def escape(str)</div><div class='del'>-# $stderr.print "FE: ", str</div><div class='del'>-      s = str.</div><div class='del'>-#        sub(/\s+$/, '').</div><div class='del'>-        gsub(/([_\${}&amp;%#])/, "#{BS}\\1").</div><div class='del'>-        gsub(/\\/, BACKSLASH).</div><div class='del'>-        gsub(/\^/, HAT).</div><div class='del'>-        gsub(/~/,  TILDE).</div><div class='del'>-        gsub(/&lt;/,  LESSTHAN).</div><div class='del'>-        gsub(/&gt;/,  GREATERTHAN).</div><div class='del'>-        gsub(/,,/, ",{},").</div><div class='del'>-        gsub(/\`/,  BACKQUOTE)</div><div class='del'>-# $stderr.print "-&gt; ", s, "\n"</div><div class='del'>-      s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Add a new set of LaTeX tags for an attribute. We allow</div><div class='del'>-    # separate start and end tags for flexibility</div><div class='del'>-    #</div><div class='del'>-    def add_tag(name, start, stop)</div><div class='del'>-      @attr_tags &lt;&lt; InlineTag.new(SM::Attribute.bitmap_for(name), start, stop)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ## </div><div class='del'>-    # Here's the client side of the visitor pattern</div><div class='del'>-</div><div class='del'>-    def start_accepting</div><div class='del'>-      @res = ""</div><div class='del'>-      @in_list_entry = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def end_accepting</div><div class='del'>-      @res.tr(BS, '\\').tr(OB, '{').tr(CB, '}').tr(DL, '$')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_paragraph(am, fragment)</div><div class='del'>-      @res &lt;&lt; wrap(convert_flow(am.flow(fragment.txt)))</div><div class='del'>-      @res &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_verbatim(am, fragment)</div><div class='del'>-      @res &lt;&lt; "\n\\begin{code}\n"</div><div class='del'>-      @res &lt;&lt; fragment.txt.sub(/[\n\s]+\Z/, '')</div><div class='del'>-      @res &lt;&lt; "\n\\end{code}\n\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_rule(am, fragment)</div><div class='del'>-      size = fragment.param</div><div class='del'>-      size = 10 if size &gt; 10</div><div class='del'>-      @res &lt;&lt; "\n\n\\rule{\\linewidth}{#{size}pt}\n\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_start(am, fragment)</div><div class='del'>-      @res &lt;&lt; list_name(fragment.type, true) &lt;&lt;"\n"</div><div class='del'>-      @in_list_entry.push false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_end(am, fragment)</div><div class='del'>-      if tag = @in_list_entry.pop</div><div class='del'>-        @res &lt;&lt; tag &lt;&lt; "\n"</div><div class='del'>-      end</div><div class='del'>-      @res &lt;&lt; list_name(fragment.type, false) &lt;&lt;"\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_item(am, fragment)</div><div class='del'>-      if tag = @in_list_entry.last</div><div class='del'>-        @res &lt;&lt; tag &lt;&lt; "\n"</div><div class='del'>-      end</div><div class='del'>-      @res &lt;&lt; list_item_start(am, fragment)</div><div class='del'>-      @res &lt;&lt; wrap(convert_flow(am.flow(fragment.txt))) &lt;&lt; "\n"</div><div class='del'>-      @in_list_entry[-1] = list_end_for(fragment.type)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_blank_line(am, fragment)</div><div class='del'>-      # @res &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_heading(am, fragment)</div><div class='del'>-      @res &lt;&lt; convert_heading(fragment.head_level, am.flow(fragment.txt))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # This is a higher speed (if messier) version of wrap</div><div class='del'>-</div><div class='del'>-    def wrap(txt, line_len = 76)</div><div class='del'>-      res = ""</div><div class='del'>-      sp = 0</div><div class='del'>-      ep = txt.length</div><div class='del'>-      while sp &lt; ep</div><div class='del'>-        # scan back for a space</div><div class='del'>-        p = sp + line_len - 1</div><div class='del'>-        if p &gt;= ep</div><div class='del'>-          p = ep</div><div class='del'>-        else</div><div class='del'>-          while p &gt; sp and txt[p] != ?\s</div><div class='del'>-            p -= 1</div><div class='del'>-          end</div><div class='del'>-          if p &lt;= sp</div><div class='del'>-            p = sp + line_len</div><div class='del'>-            while p &lt; ep and txt[p] != ?\s</div><div class='del'>-              p += 1</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        res &lt;&lt; txt[sp...p] &lt;&lt; "\n"</div><div class='del'>-        sp = p</div><div class='del'>-        sp += 1 while sp &lt; ep and txt[sp] == ?\s</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</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'>-</div><div class='del'>-    def on_tags(res, item)</div><div class='del'>-      attr_mask = item.turn_on</div><div class='del'>-      return if attr_mask.zero?</div><div class='del'>-</div><div class='del'>-      @attr_tags.each do |tag|</div><div class='del'>-        if attr_mask &amp; tag.bit != 0</div><div class='del'>-          res &lt;&lt; tag.on</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def off_tags(res, item)</div><div class='del'>-      attr_mask = item.turn_off</div><div class='del'>-      return if attr_mask.zero?</div><div class='del'>-</div><div class='del'>-      @attr_tags.reverse_each do |tag|</div><div class='del'>-        if attr_mask &amp; tag.bit != 0</div><div class='del'>-          res &lt;&lt; tag.off</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_flow(flow)</div><div class='del'>-      res = ""</div><div class='del'>-      flow.each do |item|</div><div class='del'>-        case item</div><div class='del'>-        when String</div><div class='del'>-#          $stderr.puts "Converting '#{item}'"</div><div class='del'>-          res &lt;&lt; convert_string(item)</div><div class='del'>-        when AttrChanger</div><div class='del'>-          off_tags(res, item)</div><div class='del'>-          on_tags(res,  item)</div><div class='del'>-        when Special</div><div class='del'>-          res &lt;&lt; convert_special(item)</div><div class='del'>-        else</div><div class='del'>-          raise "Unknown flow element: #{item.inspect}"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # some of these patterns are taken from SmartyPants...</div><div class='del'>-</div><div class='del'>-    def convert_string(item)</div><div class='del'>-</div><div class='del'>-      escape(item).</div><div class='del'>-      </div><div class='del'>-      </div><div class='del'>-      # convert ... to elipsis (and make sure .... becomes .&lt;elipsis&gt;)</div><div class='del'>-        gsub(/\.\.\.\./, '.\ldots{}').gsub(/\.\.\./, '\ldots{}').</div><div class='del'>-</div><div class='del'>-      # convert single closing quote</div><div class='del'>-        gsub(%r{([^ \t\r\n\[\{\(])\'}) { "#$1'" }.</div><div class='del'>-        gsub(%r{\'(?=\W|s\b)}) { "'" }.</div><div class='del'>-</div><div class='del'>-      # convert single opening quote</div><div class='del'>-        gsub(/'/, '`').</div><div class='del'>-</div><div class='del'>-      # convert double closing quote</div><div class='del'>-        gsub(%r{([^ \t\r\n\[\{\(])\"(?=\W)}) { "#$1''" }.</div><div class='del'>-</div><div class='del'>-      # convert double opening quote</div><div class='del'>-        gsub(/"/, "``").</div><div class='del'>-</div><div class='del'>-      # convert copyright</div><div class='del'>-        gsub(/\(c\)/, '\copyright{}')</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_special(special)</div><div class='del'>-      handled = false</div><div class='del'>-      Attribute.each_name_of(special.type) do |name|</div><div class='del'>-        method_name = "handle_special_#{name}"</div><div class='del'>-        if self.respond_to? method_name</div><div class='del'>-          special.text = send(method_name, special)</div><div class='del'>-          handled = true</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      raise "Unhandled special: #{special}" unless handled</div><div class='del'>-      special.text</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert_heading(level, flow)</div><div class='del'>-      res =</div><div class='del'>-        case level</div><div class='del'>-        when 1 then "\\chapter{"</div><div class='del'>-        when 2 then "\\section{"</div><div class='del'>-        when 3 then "\\subsection{"</div><div class='del'>-        when 4 then "\\subsubsection{"</div><div class='del'>-        else  "\\paragraph{"</div><div class='del'>-        end +</div><div class='del'>-        convert_flow(flow) + </div><div class='del'>-        "}\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def list_name(list_type, is_open_tag)</div><div class='del'>-      tags = LIST_TYPE_TO_LATEX[list_type] || raise("Invalid list type: #{list_type.inspect}")</div><div class='del'>-      if tags[2] # enumerate</div><div class='del'>-        if is_open_tag</div><div class='del'>-          @list_depth += 1</div><div class='del'>-          if @prev_list_types[@list_depth] != tags[2]</div><div class='del'>-            case @list_depth</div><div class='del'>-            when 1</div><div class='del'>-              roman = "i"</div><div class='del'>-            when 2</div><div class='del'>-              roman = "ii"</div><div class='del'>-            when 3</div><div class='del'>-              roman = "iii"</div><div class='del'>-            when 4</div><div class='del'>-              roman = "iv"</div><div class='del'>-            else</div><div class='del'>-              raise("Too deep list: level #{@list_depth}")</div><div class='del'>-            end</div><div class='del'>-            @prev_list_types[@list_depth] = tags[2]</div><div class='del'>-            return l("\\renewcommand{\\labelenum#{roman}}{#{tags[2]}{enum#{roman}}}") + "\n" + tags[0]</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          @list_depth -= 1</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      tags[ is_open_tag ? 0 : 1]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def list_item_start(am, fragment)</div><div class='del'>-      case fragment.type</div><div class='del'>-      when ListBase::BULLET, ListBase::NUMBER, ListBase::UPPERALPHA, ListBase::LOWERALPHA</div><div class='del'>-        "\\item "</div><div class='del'>-</div><div class='del'>-      when ListBase::LABELED</div><div class='del'>-        "\\item[" + convert_flow(am.flow(fragment.param)) + "] "</div><div class='del'>-</div><div class='del'>-      when ListBase::NOTE</div><div class='del'>-          convert_flow(am.flow(fragment.param)) + " &amp; "</div><div class='del'>-      else</div><div class='del'>-        raise "Invalid list type"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def list_end_for(fragment_type)</div><div class='del'>-      case fragment_type</div><div class='del'>-      when ListBase::BULLET, ListBase::NUMBER, ListBase::UPPERALPHA, ListBase::LOWERALPHA, ListBase::LABELED</div><div class='del'>-        ""</div><div class='del'>-      when ListBase::NOTE</div><div class='del'>-        "\\\\\n"</div><div class='del'>-      else</div><div class='del'>-        raise "Invalid list type"</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'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/test/AllTests.rb b/lib/rdoc/markup/test/AllTests.rb<br/>deleted file mode 100644<br/>index b9c8c9dfcc..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/test/AllTests.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/test/AllTests.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2 +0,0 @@</div><div class='del'>-require 'TestParse.rb'</div><div class='del'>-require 'TestInline.rb'</div><div class='head'>diff --git a/lib/rdoc/markup/test/TestInline.rb b/lib/rdoc/markup/test/TestInline.rb<br/>deleted file mode 100644<br/>index a067d4c24c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/test/TestInline.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/test/TestInline.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,154 +0,0 @@</div><div class='del'>-require "test/unit"</div><div class='del'>-</div><div class='del'>-$:.unshift "../../.."</div><div class='del'>-</div><div class='del'>-require "rdoc/markup/simple_markup/inline"</div><div class='del'>-</div><div class='del'>-class TestInline &lt; Test::Unit::TestCase</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def setup</div><div class='del'>-    @am = SM::AttributeManager.new</div><div class='del'>-</div><div class='del'>-    @bold_on  = @am.changed_attribute_by_name([], [:BOLD])</div><div class='del'>-    @bold_off = @am.changed_attribute_by_name([:BOLD], [])</div><div class='del'>-    </div><div class='del'>-    @tt_on    = @am.changed_attribute_by_name([], [:TT])</div><div class='del'>-    @tt_off   = @am.changed_attribute_by_name([:TT], [])</div><div class='del'>-    </div><div class='del'>-    @em_on    = @am.changed_attribute_by_name([], [:EM])</div><div class='del'>-    @em_off   = @am.changed_attribute_by_name([:EM], [])</div><div class='del'>-    </div><div class='del'>-    @bold_em_on   = @am.changed_attribute_by_name([], [:BOLD] | [:EM])</div><div class='del'>-    @bold_em_off  = @am.changed_attribute_by_name([:BOLD] | [:EM], [])</div><div class='del'>-    </div><div class='del'>-    @em_then_bold = @am.changed_attribute_by_name([:EM], [:EM] | [:BOLD])</div><div class='del'>-    </div><div class='del'>-    @em_to_bold   = @am.changed_attribute_by_name([:EM], [:BOLD])</div><div class='del'>-    </div><div class='del'>-    @am.add_word_pair("{", "}", :WOMBAT)</div><div class='del'>-    @wombat_on    = @am.changed_attribute_by_name([], [:WOMBAT])</div><div class='del'>-    @wombat_off   = @am.changed_attribute_by_name([:WOMBAT], [])</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def crossref(text)</div><div class='del'>-    [ @am.changed_attribute_by_name([], [:CROSSREF] | [:_SPECIAL_]),</div><div class='del'>-      SM::Special.new(33, text),</div><div class='del'>-      @am.changed_attribute_by_name([:CROSSREF] | [:_SPECIAL_], [])</div><div class='del'>-    ]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_special</div><div class='del'>-    # class names, variable names, file names, or instance variables</div><div class='del'>-    @am.add_special(/(</div><div class='del'>-                       \b([A-Z]\w+(::\w+)*)</div><div class='del'>-                       | \#\w+[!?=]?</div><div class='del'>-                       | \b\w+([_\/\.]+\w+)+[!?=]?</div><div class='del'>-                      )/x, </div><div class='del'>-                    :CROSSREF)</div><div class='del'>-    </div><div class='del'>-    assert_equal(["cat"], @am.flow("cat"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", crossref("#fred"), " dog"].flatten,</div><div class='del'>-                  @am.flow("cat #fred dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal([crossref("#fred"), " dog"].flatten,</div><div class='del'>-                  @am.flow("#fred dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", crossref("#fred")].flatten, @am.flow("cat #fred"))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_basic</div><div class='del'>-    assert_equal(["cat"], @am.flow("cat"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @bold_on, "and", @bold_off, " dog"],</div><div class='del'>-                  @am.flow("cat *and* dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @bold_on, "AND", @bold_off, " dog"],</div><div class='del'>-                  @am.flow("cat *AND* dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @em_on, "And", @em_off, " dog"],</div><div class='del'>-                  @am.flow("cat _And_ dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat *and dog*"], @am.flow("cat *and dog*"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["*cat and* dog"], @am.flow("*cat and* dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat *and ", @bold_on, "dog", @bold_off],</div><div class='del'>-                  @am.flow("cat *and *dog*"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @em_on, "and", @em_off, " dog"],</div><div class='del'>-                  @am.flow("cat _and_ dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat_and_dog"],</div><div class='del'>-                  @am.flow("cat_and_dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @tt_on, "and", @tt_off, " dog"],</div><div class='del'>-                  @am.flow("cat +and+ dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @bold_on, "a_b_c", @bold_off, " dog"],</div><div class='del'>-                  @am.flow("cat *a_b_c* dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat __ dog"],</div><div class='del'>-                  @am.flow("cat __ dog"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @em_on, "_", @em_off, " dog"],</div><div class='del'>-                  @am.flow("cat ___ dog"))</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_combined</div><div class='del'>-    assert_equal(["cat ", @em_on, "and", @em_off, " ", @bold_on, "dog", @bold_off],</div><div class='del'>-                  @am.flow("cat _and_ *dog*"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @em_on, "a__nd", @em_off, " ", @bold_on, "dog", @bold_off], </div><div class='del'>-                  @am.flow("cat _a__nd_ *dog*"))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_html_like</div><div class='del'>-    assert_equal(["cat ", @tt_on, "dog", @tt_off], @am.flow("cat &lt;tt&gt;dog&lt;/Tt&gt;"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @em_on, "and", @em_off, " ", @bold_on, "dog", @bold_off], </div><div class='del'>-                  @am.flow("cat &lt;i&gt;and&lt;/i&gt; &lt;B&gt;dog&lt;/b&gt;"))</div><div class='del'>-    </div><div class='del'>-    assert_equal(["cat ", @em_on, "and ", @em_then_bold, "dog", @bold_em_off], </div><div class='del'>-                  @am.flow("cat &lt;i&gt;and &lt;B&gt;dog&lt;/B&gt;&lt;/I&gt;"))</div><div class='del'>-    </div><div class='del'>-    assert_equal(["cat ", @em_on, "and ", @em_to_bold, "dog", @bold_off], </div><div class='del'>-                  @am.flow("cat &lt;i&gt;and &lt;/i&gt;&lt;b&gt;dog&lt;/b&gt;"))</div><div class='del'>-    </div><div class='del'>-    assert_equal(["cat ", @em_on, "and ", @em_to_bold, "dog", @bold_off], </div><div class='del'>-                  @am.flow("cat &lt;i&gt;and &lt;b&gt;&lt;/i&gt;dog&lt;/b&gt;"))</div><div class='del'>-    </div><div class='del'>-    assert_equal([@tt_on, "cat", @tt_off, " ", @em_on, "and ", @em_to_bold, "dog", @bold_off], </div><div class='del'>-                  @am.flow("&lt;tt&gt;cat&lt;/tt&gt; &lt;i&gt;and &lt;b&gt;&lt;/i&gt;dog&lt;/b&gt;"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @em_on, "and ", @em_then_bold, "dog", @bold_em_off], </div><div class='del'>-                  @am.flow("cat &lt;i&gt;and &lt;b&gt;dog&lt;/b&gt;&lt;/i&gt;"))</div><div class='del'>-    </div><div class='del'>-    assert_equal(["cat ", @bold_em_on, "and", @bold_em_off, " dog"], </div><div class='del'>-                  @am.flow("cat &lt;i&gt;&lt;b&gt;and&lt;/b&gt;&lt;/i&gt; dog"))</div><div class='del'>-    </div><div class='del'>-    </div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_protect</div><div class='del'>-    assert_equal(['cat \\ dog'], @am.flow('cat \\ dog'))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat &lt;tt&gt;dog&lt;/Tt&gt;"], @am.flow("cat \\&lt;tt&gt;dog&lt;/Tt&gt;"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["cat ", @em_on, "and", @em_off, " &lt;B&gt;dog&lt;/b&gt;"], </div><div class='del'>-                  @am.flow("cat &lt;i&gt;and&lt;/i&gt; \\&lt;B&gt;dog&lt;/b&gt;"))</div><div class='del'>-    </div><div class='del'>-    assert_equal(["*word* or &lt;b&gt;text&lt;/b&gt;"], @am.flow("\\*word* or \\&lt;b&gt;text&lt;/b&gt;"))</div><div class='del'>-</div><div class='del'>-    assert_equal(["_cat_", @em_on, "dog", @em_off], </div><div class='del'>-                  @am.flow("\\_cat_&lt;i&gt;dog&lt;/i&gt;"))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_adding</div><div class='del'>-    assert_equal(["cat ", @wombat_on, "and", @wombat_off, " dog" ],</div><div class='del'>-                  @am.flow("cat {and} dog"))</div><div class='del'>-#    assert_equal(["cat {and} dog" ], @am.flow("cat \\{and} dog"))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/markup/test/TestParse.rb b/lib/rdoc/markup/test/TestParse.rb<br/>deleted file mode 100644<br/>index 3ec541ce7a..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/markup/test/TestParse.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/markup/test/TestParse.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,503 +0,0 @@</div><div class='del'>-require 'test/unit'</div><div class='del'>-</div><div class='del'>-$:.unshift "../../.."</div><div class='del'>-</div><div class='del'>-require 'rdoc/markup/simple_markup'</div><div class='del'>-</div><div class='del'>-include SM</div><div class='del'>-</div><div class='del'>-class TestParse &lt; Test::Unit::TestCase</div><div class='del'>-</div><div class='del'>-  class MockOutput</div><div class='del'>-    def start_accepting</div><div class='del'>-      @res = []</div><div class='del'>-      end</div><div class='del'>-    </div><div class='del'>-    def end_accepting</div><div class='del'>-      @res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_paragraph(am, fragment)</div><div class='del'>-      @res &lt;&lt; fragment.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_verbatim(am, fragment)</div><div class='del'>-      @res &lt;&lt; fragment.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_start(am, fragment)</div><div class='del'>-      @res &lt;&lt; fragment.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_end(am, fragment)</div><div class='del'>-      @res &lt;&lt; fragment.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_list_item(am, fragment)</div><div class='del'>-      @res &lt;&lt; fragment.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_blank_line(am, fragment)</div><div class='del'>-      @res &lt;&lt; fragment.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_heading(am, fragment)</div><div class='del'>-      @res &lt;&lt; fragment.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def accept_rule(am, fragment)</div><div class='del'>-      @res &lt;&lt; fragment.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def basic_conv(str)</div><div class='del'>-    sm = SimpleMarkup.new</div><div class='del'>-    mock = MockOutput.new</div><div class='del'>-    sm.convert(str, mock)</div><div class='del'>-    sm.content</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def line_types(str, expected)</div><div class='del'>-    p = SimpleMarkup.new</div><div class='del'>-    mock = MockOutput.new</div><div class='del'>-    p.convert(str, mock)</div><div class='del'>-    assert_equal(expected, p.get_line_types.map{|type| type.to_s[0,1]}.join(''))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def line_groups(str, expected)</div><div class='del'>-    p = SimpleMarkup.new</div><div class='del'>-    mock = MockOutput.new</div><div class='del'>-</div><div class='del'>-    block = p.convert(str, mock)</div><div class='del'>-</div><div class='del'>-    if block != expected</div><div class='del'>-      rows = (0...([expected.size, block.size].max)).collect{|i|</div><div class='del'>-        [expected[i]||"nil", block[i]||"nil"] </div><div class='del'>-      }</div><div class='del'>-      printf "\n\n%35s %35s\n", "Expected", "Got"</div><div class='del'>-      rows.each {|e,g| printf "%35s %35s\n", e.dump, g.dump }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    assert_equal(expected, block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_tabs</div><div class='del'>-    str = "hello\n  dave"</div><div class='del'>-    assert_equal(str, basic_conv(str))</div><div class='del'>-    str = "hello\n\tdave"</div><div class='del'>-    assert_equal("hello\n        dave", basic_conv(str))</div><div class='del'>-    str = "hello\n \tdave"</div><div class='del'>-    assert_equal("hello\n        dave", basic_conv(str))</div><div class='del'>-    str = "hello\n  \tdave"</div><div class='del'>-    assert_equal("hello\n        dave", basic_conv(str))</div><div class='del'>-    str = "hello\n   \tdave"</div><div class='del'>-    assert_equal("hello\n        dave", basic_conv(str))</div><div class='del'>-    str = "hello\n    \tdave"</div><div class='del'>-    assert_equal("hello\n        dave", basic_conv(str))</div><div class='del'>-    str = "hello\n     \tdave"</div><div class='del'>-    assert_equal("hello\n        dave", basic_conv(str))</div><div class='del'>-    str = "hello\n      \tdave"</div><div class='del'>-    assert_equal("hello\n        dave", basic_conv(str))</div><div class='del'>-    str = "hello\n       \tdave"</div><div class='del'>-    assert_equal("hello\n        dave", basic_conv(str))</div><div class='del'>-    str = "hello\n        \tdave"</div><div class='del'>-    assert_equal("hello\n                dave", basic_conv(str))</div><div class='del'>-    str = ".\t\t."</div><div class='del'>-    assert_equal(".               .", basic_conv(str))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_whitespace</div><div class='del'>-    assert_equal("hello", basic_conv("hello"))</div><div class='del'>-    assert_equal("hello", basic_conv(" hello "))</div><div class='del'>-    assert_equal("hello", basic_conv(" \t \t hello\t\t"))</div><div class='del'>-</div><div class='del'>-    assert_equal("1\n 2\n  3", basic_conv("1\n 2\n  3"))</div><div class='del'>-    assert_equal("1\n 2\n  3", basic_conv("  1\n   2\n    3"))</div><div class='del'>-</div><div class='del'>-    assert_equal("1\n 2\n  3\n1\n 2", basic_conv("1\n 2\n  3\n1\n 2"))</div><div class='del'>-    assert_equal("1\n 2\n  3\n1\n 2", basic_conv("  1\n   2\n    3\n  1\n   2"))</div><div class='del'>-</div><div class='del'>-    assert_equal("1\n 2\n\n  3", basic_conv("  1\n   2\n\n    3"))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_types</div><div class='del'>-    str = "now is the time"</div><div class='del'>-    line_types(str, 'P')</div><div class='del'>-</div><div class='del'>-    str = "now is the time\nfor all good men"</div><div class='del'>-    line_types(str, 'PP')</div><div class='del'>-</div><div class='del'>-    str = "now is the time\n  code\nfor all good men"</div><div class='del'>-    line_types(str, 'PVP')</div><div class='del'>-</div><div class='del'>-    str = "now is the time\n  code\n more code\nfor all good men"</div><div class='del'>-    line_types(str, 'PVVP')</div><div class='del'>-</div><div class='del'>-    str = "now is\n---\nthe time"</div><div class='del'>-    line_types(str, 'PRP')</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_types(str, 'PLLP')</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-         l1+</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_types(str, 'PLPLP')</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-         * l1.1</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_types(str, 'PLLLP')</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-         * l1.1</div><div class='del'>-           text</div><div class='del'>-             code</div><div class='del'>-             code</div><div class='del'>-</div><div class='del'>-           text</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_types(str, 'PLLPVVBPLP')</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       1. l1</div><div class='del'>-          * l1.1</div><div class='del'>-       2. l2</div><div class='del'>-       the time}</div><div class='del'>-    line_types(str, 'PLLLP')</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       [cat] l1</div><div class='del'>-             * l1.1</div><div class='del'>-       [dog] l2</div><div class='del'>-       the time}</div><div class='del'>-    line_types(str, 'PLLLP')</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       [cat] l1</div><div class='del'>-             continuation</div><div class='del'>-       [dog] l2</div><div class='del'>-       the time}</div><div class='del'>-    line_types(str, 'PLPLP')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def test_groups</div><div class='del'>-    str = "now is the time"</div><div class='del'>-    line_groups(str, ["L0: Paragraph\nnow is the time"] )</div><div class='del'>-</div><div class='del'>-    str = "now is the time\nfor all good men"</div><div class='del'>-    line_groups(str, ["L0: Paragraph\nnow is the time for all good men"] )</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-      now is the time</div><div class='del'>-        code _line_ here</div><div class='del'>-      for all good men}</div><div class='del'>-</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is the time",</div><div class='del'>-                  "L0: Verbatim\n  code _line_ here\n",</div><div class='del'>-                  "L0: Paragraph\nfor all good men"</div><div class='del'>-                ] )</div><div class='del'>-</div><div class='del'>-    str = "now is the time\n  code\n more code\nfor all good men"</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is the time",</div><div class='del'>-                  "L0: Verbatim\n  code\n more code\n",</div><div class='del'>-                  "L0: Paragraph\nfor all good men"</div><div class='del'>-                ] )</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl1",</div><div class='del'>-                  "L1: ListItem\nl2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-         l1+</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl1 l1+",</div><div class='del'>-                  "L1: ListItem\nl2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-         * l1.1</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl1",</div><div class='del'>-                  "L2: ListStart\n",</div><div class='del'>-                  "L2: ListItem\nl1.1",</div><div class='del'>-                  "L2: ListEnd\n",</div><div class='del'>-                  "L1: ListItem\nl2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-         * l1.1</div><div class='del'>-           text</div><div class='del'>-             code</div><div class='del'>-               code</div><div class='del'>-</div><div class='del'>-           text</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl1",</div><div class='del'>-                  "L2: ListStart\n",</div><div class='del'>-                  "L2: ListItem\nl1.1 text",</div><div class='del'>-                  "L2: Verbatim\n  code\n    code\n",</div><div class='del'>-                  "L2: Paragraph\ntext",</div><div class='del'>-                  "L2: ListEnd\n",</div><div class='del'>-                  "L1: ListItem\nl2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       1. l1</div><div class='del'>-          * l1.1</div><div class='del'>-       2. l2</div><div class='del'>-       the time}</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl1",</div><div class='del'>-                  "L2: ListStart\n",</div><div class='del'>-                  "L2: ListItem\nl1.1",</div><div class='del'>-                  "L2: ListEnd\n",</div><div class='del'>-                  "L1: ListItem\nl2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       [cat] l1</div><div class='del'>-             * l1.1</div><div class='del'>-       [dog] l2</div><div class='del'>-       the time}</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl1",</div><div class='del'>-                  "L2: ListStart\n",</div><div class='del'>-                  "L2: ListItem\nl1.1",</div><div class='del'>-                  "L2: ListEnd\n",</div><div class='del'>-                  "L1: ListItem\nl2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       [cat] l1</div><div class='del'>-             continuation</div><div class='del'>-       [dog] l2</div><div class='del'>-       the time}</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl1 continuation",</div><div class='del'>-                  "L1: ListItem\nl2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</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'>-  def test_verbatim_merge</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-          code</div><div class='del'>-       the time}</div><div class='del'>-</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L0: Verbatim\n   code\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-          code</div><div class='del'>-          code1</div><div class='del'>-       the time}</div><div class='del'>-</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L0: Verbatim\n   code\n   code1\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-          code</div><div class='del'>-</div><div class='del'>-          code1</div><div class='del'>-       the time}</div><div class='del'>-</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L0: Verbatim\n   code\n\n   code1\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-          code</div><div class='del'>-</div><div class='del'>-          code1</div><div class='del'>-</div><div class='del'>-       the time}</div><div class='del'>-</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L0: Verbatim\n   code\n\n   code1\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-          code</div><div class='del'>-</div><div class='del'>-          code1</div><div class='del'>-</div><div class='del'>-          code2</div><div class='del'>-       the time}</div><div class='del'>-</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L0: Verbatim\n   code\n\n   code1\n\n   code2\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Folds multiple blank lines</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-          code</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-          code1</div><div class='del'>-</div><div class='del'>-       the time}</div><div class='del'>-</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L0: Verbatim\n   code\n\n   code1\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</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'>-  def test_list_split</div><div class='del'>-    str = %{\</div><div class='del'>-       now is</div><div class='del'>-       * l1</div><div class='del'>-       1. n1</div><div class='del'>-       2. n2</div><div class='del'>-       * l2</div><div class='del'>-       the time}</div><div class='del'>-    line_groups(str,</div><div class='del'>-                [ "L0: Paragraph\nnow is",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl1",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nn1",</div><div class='del'>-                  "L1: ListItem\nn2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L1: ListStart\n",</div><div class='del'>-                  "L1: ListItem\nl2",</div><div class='del'>-                  "L1: ListEnd\n",</div><div class='del'>-                  "L0: Paragraph\nthe time"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def test_headings</div><div class='del'>-    str = "= heading one"</div><div class='del'>-    line_groups(str, </div><div class='del'>-                [ "L0: Heading\nheading one"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-    str = "=== heading three"</div><div class='del'>-    line_groups(str, </div><div class='del'>-                [ "L0: Heading\nheading three"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-    str = "text\n   === heading three"</div><div class='del'>-    line_groups(str, </div><div class='del'>-                [ "L0: Paragraph\ntext",</div><div class='del'>-                  "L0: Verbatim\n   === heading three\n"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-    str = "text\n   code\n   === heading three"</div><div class='del'>-    line_groups(str, </div><div class='del'>-                [ "L0: Paragraph\ntext",</div><div class='del'>-                  "L0: Verbatim\n   code\n   === heading three\n"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-    str = "text\n   code\n=== heading three"</div><div class='del'>-    line_groups(str, </div><div class='del'>-                [ "L0: Paragraph\ntext",</div><div class='del'>-                  "L0: Verbatim\n   code\n",</div><div class='del'>-                  "L0: Heading\nheading three"</div><div class='del'>-                ])</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  </div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/options.rb b/lib/rdoc/options.rb<br/>deleted file mode 100644<br/>index 7e35abdb0b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/options.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/options.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,586 +0,0 @@</div><div class='del'>-# We handle the parsing of options, and subsequently as a singleton</div><div class='del'>-# object to be queried for option values</div><div class='del'>-</div><div class='del'>-require "rdoc/ri/ri_paths"</div><div class='del'>-</div><div class='del'>-class Options</div><div class='del'>-</div><div class='del'>-  require 'singleton'</div><div class='del'>-  require 'getoptlong'</div><div class='del'>-</div><div class='del'>-  include Singleton</div><div class='del'>-</div><div class='del'>-  # files matching this pattern will be excluded</div><div class='del'>-  attr_accessor :exclude</div><div class='del'>-</div><div class='del'>-  # the name of the output directory</div><div class='del'>-  attr_accessor :op_dir</div><div class='del'>-  </div><div class='del'>-  # the name to use for the output</div><div class='del'>-  attr_reader :op_name</div><div class='del'>-</div><div class='del'>-  # include private and protected methods in the</div><div class='del'>-  # output</div><div class='del'>-  attr_accessor :show_all</div><div class='del'>-  </div><div class='del'>-  # name of the file, class or module to display in</div><div class='del'>-  # the initial index page (if not specified</div><div class='del'>-  # the first file we encounter is used)</div><div class='del'>-  attr_accessor :main_page</div><div class='del'>-</div><div class='del'>-  # merge into classes of the name name when generating ri</div><div class='del'>-  attr_reader :merge</div><div class='del'>-</div><div class='del'>-  # Don't display progress as we process the files</div><div class='del'>-  attr_reader :quiet</div><div class='del'>-</div><div class='del'>-  # description of the output generator (set with the &lt;tt&gt;-fmt&lt;/tt&gt;</div><div class='del'>-  # option</div><div class='del'>-  attr_accessor :generator</div><div class='del'>-</div><div class='del'>-  # and the list of files to be processed</div><div class='del'>-  attr_reader :files</div><div class='del'>-</div><div class='del'>-  # array of directories to search for files to satisfy an :include:</div><div class='del'>-  attr_reader :rdoc_include</div><div class='del'>-</div><div class='del'>-  # title to be used out the output</div><div class='del'>-  #attr_writer :title</div><div class='del'>-</div><div class='del'>-  # template to be used when generating output</div><div class='del'>-  attr_reader :template</div><div class='del'>-</div><div class='del'>-  # should diagrams be drawn</div><div class='del'>-  attr_reader :diagram</div><div class='del'>-</div><div class='del'>-  # should we draw fileboxes in diagrams</div><div class='del'>-  attr_reader :fileboxes</div><div class='del'>-</div><div class='del'>-  # include the '#' at the front of hyperlinked instance method names</div><div class='del'>-  attr_reader :show_hash</div><div class='del'>-</div><div class='del'>-  # image format for diagrams</div><div class='del'>-  attr_reader :image_format</div><div class='del'>-</div><div class='del'>-  # character-set</div><div class='del'>-  attr_reader :charset</div><div class='del'>-</div><div class='del'>-  # should source code be included inline, or displayed in a popup</div><div class='del'>-  attr_reader :inline_source</div><div class='del'>-</div><div class='del'>-  # should the output be placed into a single file</div><div class='del'>-  attr_reader :all_one_file</div><div class='del'>-</div><div class='del'>-  # the number of columns in a tab</div><div class='del'>-  attr_reader :tab_width</div><div class='del'>-</div><div class='del'>-  # include line numbers in the source listings</div><div class='del'>-  attr_reader :include_line_numbers</div><div class='del'>-</div><div class='del'>-  # pattern for additional attr_... style methods</div><div class='del'>-  attr_reader :extra_accessors</div><div class='del'>-  attr_reader :extra_accessor_flags</div><div class='del'>-</div><div class='del'>-  # URL of stylesheet</div><div class='del'>-  attr_reader :css</div><div class='del'>-</div><div class='del'>-  # URL of web cvs frontend</div><div class='del'>-  attr_reader :webcvs</div><div class='del'>-</div><div class='del'>-  # Are we promiscuous about showing module contents across</div><div class='del'>-  # multiple files</div><div class='del'>-  attr_reader :promiscuous</div><div class='del'>-</div><div class='del'>-  # scan newer sources than the flag file if true.</div><div class='del'>-  attr_reader :force_update</div><div class='del'>-</div><div class='del'>-  module OptionList</div><div class='del'>-</div><div class='del'>-    OPTION_LIST = [</div><div class='del'>-      [ "--accessor",      "-A",   "accessorname[,..]",</div><div class='del'>-        "comma separated list of additional class methods\n" +</div><div class='del'>-        "that should be treated like 'attr_reader' and\n" +</div><div class='del'>-        "friends. Option may be repeated. Each accessorname\n" +</div><div class='del'>-        "may have '=text' appended, in which case that text\n" +</div><div class='del'>-        "appears where the r/w/rw appears for normal accessors."],</div><div class='del'>-                                                                   </div><div class='del'>-      [ "--all",           "-a",   nil,</div><div class='del'>-        "include all methods (not just public)\nin the output" ],</div><div class='del'>-</div><div class='del'>-      [ "--charset",       "-c",   "charset",</div><div class='del'>-        "specifies HTML character-set" ],</div><div class='del'>-</div><div class='del'>-      [ "--debug",         "-D",   nil,</div><div class='del'>-        "displays lots on internal stuff" ],</div><div class='del'>-</div><div class='del'>-      [ "--diagram",       "-d",   nil,</div><div class='del'>-        "Generate diagrams showing modules and classes.\n" +</div><div class='del'>-        "You need dot V1.8.6 or later to use the --diagram\n" +</div><div class='del'>-        "option correctly. Dot is available from\n"+</div><div class='del'>-        "http://www.research.att.com/sw/tools/graphviz/" ],</div><div class='del'>-</div><div class='del'>-      [ "--exclude",       "-x",   "pattern",</div><div class='del'>-        "do not process files or directories matching\n" +</div><div class='del'>-        "pattern. Files given explicitly on the command\n" +</div><div class='del'>-        "line will never be excluded." ],</div><div class='del'>-</div><div class='del'>-      [ "--extension",     "-E",   "new=old",</div><div class='del'>-        "Treat files ending with .new as if they ended with\n" +</div><div class='del'>-        ".old. Using '-E cgi=rb' will cause xxx.cgi to be\n" +</div><div class='del'>-        "parsed as a Ruby file"],</div><div class='del'>-</div><div class='del'>-      [ "--fileboxes",     "-F",   nil,</div><div class='del'>-        "classes are put in boxes which represents\n" +</div><div class='del'>-        "files, where these classes reside. Classes\n" +</div><div class='del'>-        "shared between more than one file are\n" +</div><div class='del'>-        "shown with list of files that sharing them.\n" +</div><div class='del'>-        "Silently discarded if --diagram is not given\n" +</div><div class='del'>-        "Experimental." ],</div><div class='del'>-</div><div class='del'>-      [ "--force-update",  "-U",   nil,</div><div class='del'>-        "forces to scan all sources even if newer than\n" +</div><div class='del'>-        "the flag file." ],</div><div class='del'>-</div><div class='del'>-      [ "--fmt",           "-f",   "format name",</div><div class='del'>-        "set the output formatter (see below)" ],</div><div class='del'>-</div><div class='del'>-      [ "--help",          "-h",   nil,</div><div class='del'>-        "you're looking at it" ],</div><div class='del'>-</div><div class='del'>-      [ "--help-output",   "-O",   nil,</div><div class='del'>-        "explain the various output options" ],</div><div class='del'>-</div><div class='del'>-      [ "--image-format",  "-I",   "gif/png/jpg/jpeg",</div><div class='del'>-        "Sets output image format for diagrams. Can\n" +</div><div class='del'>-        "be png, gif, jpeg, jpg. If this option is\n" +</div><div class='del'>-        "omitted, png is used. Requires --diagram." ],</div><div class='del'>-</div><div class='del'>-      [ "--include",       "-i",   "dir[,dir...]",</div><div class='del'>-        "set (or add to) the list of directories\n" +</div><div class='del'>-        "to be searched when satisfying :include:\n" +</div><div class='del'>-        "requests. Can be used more than once." ],</div><div class='del'>-</div><div class='del'>-      [ "--inline-source", "-S",   nil,</div><div class='del'>-        "Show method source code inline, rather\n" +</div><div class='del'>-        "than via a popup link" ],</div><div class='del'>-</div><div class='del'>-      [ "--line-numbers", "-N", nil,</div><div class='del'>-        "Include line numbers in the source code" ],</div><div class='del'>-</div><div class='del'>-      [ "--main",          "-m",   "name",</div><div class='del'>-        "'name' will be the initial page displayed" ],</div><div class='del'>-</div><div class='del'>-      [ "--merge",         "-M",   nil,</div><div class='del'>-        "when creating ri output, merge processed classes\n" +</div><div class='del'>-        "into previously documented classes of the name name"],</div><div class='del'>-</div><div class='del'>-      [ "--one-file",      "-1",   nil,</div><div class='del'>-        "put all the output into a single file" ],</div><div class='del'>-</div><div class='del'>-      [ "--op",            "-o",   "dir",</div><div class='del'>-        "set the output directory" ],</div><div class='del'>-</div><div class='del'>-      [ "--opname",       "-n",    "name",</div><div class='del'>-        "Set the 'name' of the output. Has no\n" +</div><div class='del'>-        "effect for HTML." ],</div><div class='del'>-</div><div class='del'>-      [ "--promiscuous",   "-p",   nil,</div><div class='del'>-        "When documenting a file that contains a module\n" +</div><div class='del'>-        "or class also defined in other files, show\n" +</div><div class='del'>-        "all stuff for that module/class in each files\n" +</div><div class='del'>-        "page. By default, only show stuff defined in\n" +</div><div class='del'>-        "that particular file." ],</div><div class='del'>-</div><div class='del'>-      [ "--quiet",         "-q",   nil,</div><div class='del'>-        "don't show progress as we parse" ],</div><div class='del'>-</div><div class='del'>-      [ "--ri",            "-r",   nil,</div><div class='del'>-       "generate output for use by 'ri.' The files are\n" +</div><div class='del'>-       "stored in the '.rdoc' directory under your home\n"+</div><div class='del'>-       "directory unless overridden by a subsequent\n" +</div><div class='del'>-       "--op parameter, so no special privileges are needed." ],</div><div class='del'>-</div><div class='del'>-      [ "--ri-site",       "-R",   nil,</div><div class='del'>-       "generate output for use by 'ri.' The files are\n" +</div><div class='del'>-       "stored in a site-wide directory, making them accessible\n"+</div><div class='del'>-       "to others, so special privileges are needed." ],</div><div class='del'>-</div><div class='del'>-      [ "--ri-system",     "-Y",   nil,</div><div class='del'>-       "generate output for use by 'ri.' The files are\n" +</div><div class='del'>-       "stored in a system-level directory, making them accessible\n"+</div><div class='del'>-       "to others, so special privileges are needed. This option\n"+</div><div class='del'>-       "is intended to be used during Ruby installations" ],</div><div class='del'>-</div><div class='del'>-      [ "--show-hash",     "-H",   nil,</div><div class='del'>-        "A name of the form #name in a comment\n" +</div><div class='del'>-        "is a possible hyperlink to an instance\n" +</div><div class='del'>-        "method name. When displayed, the '#' is\n" +</div><div class='del'>-        "removed unless this option is specified" ],</div><div class='del'>-</div><div class='del'>-      [ "--style",         "-s",   "stylesheet url",</div><div class='del'>-        "specifies the URL of a separate stylesheet." ],</div><div class='del'>-</div><div class='del'>-      [ "--tab-width",     "-w",   "n",</div><div class='del'>-        "Set the width of tab characters (default 8)"],</div><div class='del'>-</div><div class='del'>-      [ "--template",      "-T",   "template name",</div><div class='del'>-        "Set the template used when generating output" ],</div><div class='del'>-</div><div class='del'>-      [ "--title",         "-t",   "text",</div><div class='del'>-        "Set 'txt' as the title for the output" ],</div><div class='del'>-</div><div class='del'>-      [ "--version",       "-v",   nil,</div><div class='del'>-        "display  RDoc's version" ],</div><div class='del'>-</div><div class='del'>-      [ "--webcvs",        "-W",   "url",</div><div class='del'>-        "Specify a URL for linking to a web frontend\n" +</div><div class='del'>-        "to CVS. If the URL contains a '\%s', the\n" +</div><div class='del'>-        "name of the current file will be substituted;\n" +</div><div class='del'>-        "if the URL doesn't contain a '\%s', the\n" +</div><div class='del'>-        "filename will be appended to it." ],</div><div class='del'>-    ]</div><div class='del'>-</div><div class='del'>-    def OptionList.options</div><div class='del'>-      OPTION_LIST.map do |long, short, arg,|</div><div class='del'>-        [ long, </div><div class='del'>-          short, </div><div class='del'>-          arg ? GetoptLong::REQUIRED_ARGUMENT : GetoptLong::NO_ARGUMENT </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'>-    def OptionList.strip_output(text)</div><div class='del'>-      text =~ /^\s+/</div><div class='del'>-      leading_spaces = $&amp;</div><div class='del'>-      text.gsub!(/^#{leading_spaces}/, '')</div><div class='del'>-      $stdout.puts text</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Show an error and exit</div><div class='del'>-</div><div class='del'>-    def OptionList.error(msg)</div><div class='del'>-      $stderr.puts</div><div class='del'>-      $stderr.puts msg</div><div class='del'>-      $stderr.puts "\nFor help on options, try 'rdoc --help'\n\n"</div><div class='del'>-      exit 1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Show usage and exit</div><div class='del'>-    </div><div class='del'>-    def OptionList.usage(generator_names)</div><div class='del'>-      </div><div class='del'>-      puts</div><div class='del'>-      puts(VERSION_STRING)</div><div class='del'>-      puts</div><div class='del'>-</div><div class='del'>-      name = File.basename($0)</div><div class='del'>-      OptionList.strip_output(&lt;&lt;-EOT)</div><div class='del'>-          Usage:</div><div class='del'>-</div><div class='del'>-            #{name} [options]  [names...]</div><div class='del'>-</div><div class='del'>-          Files are parsed, and the information they contain</div><div class='del'>-          collected, before any output is produced. This allows cross</div><div class='del'>-          references between all files to be resolved. If a name is a</div><div class='del'>-          directory, it is traversed. If no names are specified, all</div><div class='del'>-          Ruby files in the current directory (and subdirectories) are</div><div class='del'>-          processed.</div><div class='del'>-</div><div class='del'>-          Options:</div><div class='del'>-</div><div class='del'>-      EOT</div><div class='del'>-</div><div class='del'>-      OPTION_LIST.each do |long, short, arg, desc|</div><div class='del'>-        opt = sprintf("%20s", "#{long}, #{short}")</div><div class='del'>-        oparg = sprintf("%-7s", arg)</div><div class='del'>-        print "#{opt} #{oparg}"</div><div class='del'>-        desc = desc.split("\n")</div><div class='del'>-        if arg.nil? || arg.length &lt; 7</div><div class='del'>-          puts desc.shift</div><div class='del'>-        else</div><div class='del'>-          puts</div><div class='del'>-        end</div><div class='del'>-        desc.each do |line|</div><div class='del'>-          puts(" "*28 + line)</div><div class='del'>-        end</div><div class='del'>-        puts</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      puts "\nAvailable output formatters: " +</div><div class='del'>-        generator_names.sort.join(', ') + "\n\n"</div><div class='del'>-</div><div class='del'>-      puts "For information on where the output goes, use\n\n"</div><div class='del'>-      puts "   rdoc --help-output\n\n"</div><div class='del'>-</div><div class='del'>-      exit 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def OptionList.help_output</div><div class='del'>-      OptionList.strip_output(&lt;&lt;-EOT)</div><div class='del'>-      How RDoc generates output depends on the output formatter being</div><div class='del'>-      used, and on the options you give.</div><div class='del'>-</div><div class='del'>-      - HTML output is normally produced into a number of separate files</div><div class='del'>-        (one per class, module, and file, along with various indices). </div><div class='del'>-        These files will appear in the directory given by the --op</div><div class='del'>-        option (doc/ by default).</div><div class='del'>-</div><div class='del'>-      - XML output by default is written to standard output. If a</div><div class='del'>-        --opname option is given, the output will instead be written</div><div class='del'>-        to a file with that name in the output directory.</div><div class='del'>-</div><div class='del'>-      - .chm files (Windows help files) are written in the --op directory.</div><div class='del'>-        If an --opname parameter is present, that name is used, otherwise</div><div class='del'>-        the file will be called rdoc.chm.</div><div class='del'>-</div><div class='del'>-      For information on other RDoc options, use "rdoc --help".</div><div class='del'>-      EOT</div><div class='del'>-      exit 0</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Parse command line options. We're passed a hash containing</div><div class='del'>-  # output generators, keyed by the generator name</div><div class='del'>-</div><div class='del'>-  def parse(argv, generators)</div><div class='del'>-    old_argv = ARGV.dup</div><div class='del'>-    begin</div><div class='del'>-      ARGV.replace(argv)</div><div class='del'>-      @op_dir = "doc"</div><div class='del'>-      @op_name = nil</div><div class='del'>-      @show_all = false</div><div class='del'>-      @main_page = nil</div><div class='del'>-      @marge     = false</div><div class='del'>-      @exclude   = []</div><div class='del'>-      @quiet = false</div><div class='del'>-      @generator_name = 'html'</div><div class='del'>-      @generator = generators[@generator_name]</div><div class='del'>-      @rdoc_include = []</div><div class='del'>-      @title = nil</div><div class='del'>-      @template = nil</div><div class='del'>-      @diagram = false</div><div class='del'>-      @fileboxes = false</div><div class='del'>-      @show_hash = false</div><div class='del'>-      @image_format = 'png'</div><div class='del'>-      @inline_source = false</div><div class='del'>-      @all_one_file  = false</div><div class='del'>-      @tab_width = 8</div><div class='del'>-      @include_line_numbers = false</div><div class='del'>-      @extra_accessor_flags = {}</div><div class='del'>-      @promiscuous = false</div><div class='del'>-      @force_update = false</div><div class='del'>-</div><div class='del'>-      @css = nil</div><div class='del'>-      @webcvs = nil</div><div class='del'>-</div><div class='del'>-      @charset = case $KCODE</div><div class='del'>-                 when /^S/i</div><div class='del'>-                   'Shift_JIS'</div><div class='del'>-                 when /^E/i</div><div class='del'>-                   'EUC-JP'</div><div class='del'>-                 else</div><div class='del'>-                   'iso-8859-1'</div><div class='del'>-                 end</div><div class='del'>-</div><div class='del'>-      accessors = []</div><div class='del'>-</div><div class='del'>-      go = GetoptLong.new(*OptionList.options)</div><div class='del'>-      go.quiet = true</div><div class='del'>-</div><div class='del'>-      go.each do |opt, arg|</div><div class='del'>-	case opt</div><div class='del'>-        when "--all"           then @show_all      = true</div><div class='del'>-        when "--charset"       then @charset       = arg</div><div class='del'>-        when "--debug"         then $DEBUG         = true</div><div class='del'>-        when "--exclude"       then @exclude       &lt;&lt; Regexp.new(arg)</div><div class='del'>-        when "--inline-source" then @inline_source = true</div><div class='del'>-        when "--line-numbers"  then @include_line_numbers = true</div><div class='del'>-        when "--main"          then @main_page     = arg</div><div class='del'>-        when "--merge"         then @merge         = true</div><div class='del'>-        when "--one-file"      then @all_one_file  = @inline_source = true</div><div class='del'>-        when "--op"            then @op_dir        = arg</div><div class='del'>-        when "--opname"        then @op_name       = arg</div><div class='del'>-        when "--promiscuous"   then @promiscuous   = true</div><div class='del'>-        when "--quiet"         then @quiet         = true</div><div class='del'>-        when "--show-hash"     then @show_hash     = true</div><div class='del'>-        when "--style"         then @css           = arg</div><div class='del'>-        when "--template"      then @template      = arg</div><div class='del'>-        when "--title"         then @title         = arg</div><div class='del'>-        when "--webcvs"        then @webcvs        = arg</div><div class='del'>-</div><div class='del'>-        when "--accessor" </div><div class='del'>-          arg.split(/,/).each do |accessor|</div><div class='del'>-            if accessor =~ /^(\w+)(=(.*))?$/</div><div class='del'>-              accessors &lt;&lt; $1</div><div class='del'>-              @extra_accessor_flags[$1] = $3</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        when "--diagram"</div><div class='del'>-          check_diagram</div><div class='del'>-          @diagram = true</div><div class='del'>-</div><div class='del'>-        when "--fileboxes"</div><div class='del'>-          @fileboxes = true if @diagram</div><div class='del'>-</div><div class='del'>-	when "--fmt"</div><div class='del'>-          @generator_name = arg.downcase</div><div class='del'>-          setup_generator(generators)</div><div class='del'>-</div><div class='del'>-        when "--help"      </div><div class='del'>-          OptionList.usage(generators.keys)</div><div class='del'>-</div><div class='del'>-        when "--help-output"      </div><div class='del'>-          OptionList.help_output</div><div class='del'>-</div><div class='del'>-        when "--image-format"</div><div class='del'>-          if ['gif', 'png', 'jpeg', 'jpg'].include?(arg)</div><div class='del'>-            @image_format = arg</div><div class='del'>-          else</div><div class='del'>-            raise GetoptLong::InvalidOption.new("unknown image format: #{arg}")</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        when "--include"   </div><div class='del'>-          @rdoc_include.concat arg.split(/\s*,\s*/)</div><div class='del'>-</div><div class='del'>-        when "--ri", "--ri-site", "--ri-system"</div><div class='del'>-          @generator_name = "ri"</div><div class='del'>-          @op_dir = case opt</div><div class='del'>-                    when "--ri" then RI::Paths::HOMEDIR </div><div class='del'>-                    when "--ri-site" then RI::Paths::SITEDIR</div><div class='del'>-                    when "--ri-system" then RI::Paths::SYSDIR</div><div class='del'>-                    else fail opt</div><div class='del'>-                    end</div><div class='del'>-          setup_generator(generators)</div><div class='del'>-</div><div class='del'>-        when "--tab-width"</div><div class='del'>-          begin</div><div class='del'>-            @tab_width     = Integer(arg)</div><div class='del'>-          rescue </div><div class='del'>-            $stderr.puts "Invalid tab width: '#{arg}'"</div><div class='del'>-            exit 1</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        when "--extension"</div><div class='del'>-          new, old = arg.split(/=/, 2)</div><div class='del'>-          OptionList.error("Invalid parameter to '-E'") unless new &amp;&amp; old</div><div class='del'>-          unless RDoc::ParserFactory.alias_extension(old, new)</div><div class='del'>-            OptionList.error("Unknown extension .#{old} to -E")</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        when "--force-update"</div><div class='del'>-          @force_update = true</div><div class='del'>-</div><div class='del'>-	when "--version"</div><div class='del'>-	  puts VERSION_STRING</div><div class='del'>-	  exit</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @files = ARGV.dup</div><div class='del'>-</div><div class='del'>-      @rdoc_include &lt;&lt; "." if @rdoc_include.empty?</div><div class='del'>-</div><div class='del'>-      if @exclude.empty?</div><div class='del'>-        @exclude = nil</div><div class='del'>-      else</div><div class='del'>-        @exclude = Regexp.new(@exclude.join("|"))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      check_files</div><div class='del'>-</div><div class='del'>-      # If no template was specified, use the default</div><div class='del'>-      # template for the output formatter</div><div class='del'>-</div><div class='del'>-      @template ||= @generator_name</div><div class='del'>-</div><div class='del'>-      # Generate a regexp from the accessors</div><div class='del'>-      unless accessors.empty?</div><div class='del'>-        re = '^(' + accessors.map{|a| Regexp.quote(a)}.join('|') + ')$' </div><div class='del'>-        @extra_accessors = Regexp.new(re)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    rescue GetoptLong::InvalidOption, GetoptLong::MissingArgument =&gt; error</div><div class='del'>-      OptionList.error(error.message)</div><div class='del'>-</div><div class='del'>-    ensure</div><div class='del'>-      ARGV.replace(old_argv)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def title</div><div class='del'>-    @title ||= "RDoc Documentation"</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Set the title, but only if not already set. This means that a title set from </div><div class='del'>-  # the command line trumps one set in a source file</div><div class='del'>-</div><div class='del'>-  def title=(string)</div><div class='del'>-    @title ||= string</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'>-  # Set up an output generator for the format in @generator_name</div><div class='del'>-  def setup_generator(generators)</div><div class='del'>-    @generator = generators[@generator_name]</div><div class='del'>-    if !@generator</div><div class='del'>-      OptionList.error("Invalid output formatter")</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    if @generator_name == "xml"</div><div class='del'>-      @all_one_file = true</div><div class='del'>-      @inline_source = true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Check that the right version of 'dot' is available.</div><div class='del'>-  # Unfortuately this doesn't work correctly under Windows NT, </div><div class='del'>-  # so we'll bypass the test under Windows</div><div class='del'>-</div><div class='del'>-  def check_diagram</div><div class='del'>-    return if RUBY_PLATFORM =~ /mswin|cygwin|mingw|bccwin/</div><div class='del'>-</div><div class='del'>-    ok = false</div><div class='del'>-    ver = nil</div><div class='del'>-    IO.popen("dot -V 2&gt;&amp;1") do |io|</div><div class='del'>-      ver = io.read</div><div class='del'>-      if ver =~ /dot.+version(?:\s+gviz)?\s+(\d+)\.(\d+)/</div><div class='del'>-        ok = ($1.to_i &gt; 1) || ($1.to_i == 1 &amp;&amp; $2.to_i &gt;= 8)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    unless ok</div><div class='del'>-      if ver =~ /^dot.+version/</div><div class='del'>-        $stderr.puts "Warning: You may need dot V1.8.6 or later to use\n",</div><div class='del'>-          "the --diagram option correctly. You have:\n\n   ",</div><div class='del'>-          ver,</div><div class='del'>-          "\nDiagrams might have strange background colors.\n\n"</div><div class='del'>-      else</div><div class='del'>-        $stderr.puts "You need the 'dot' program to produce diagrams.",</div><div class='del'>-          "(see http://www.research.att.com/sw/tools/graphviz/)\n\n"</div><div class='del'>-        exit</div><div class='del'>-      end</div><div class='del'>-#      exit</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Check that the files on the command line exist</div><div class='del'>-  </div><div class='del'>-  def check_files</div><div class='del'>-    @files.each do |f|</div><div class='del'>-      stat = File.stat f rescue error("File not found: #{f}")</div><div class='del'>-      error("File '#{f}' not readable") unless stat.readable?</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def error(str)</div><div class='del'>-    $stderr.puts str</div><div class='del'>-    exit(1)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/parsers/parse_c.rb b/lib/rdoc/parsers/parse_c.rb<br/>deleted file mode 100644<br/>index 7eefa29706..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/parsers/parse_c.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/parsers/parse_c.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,773 +0,0 @@</div><div class='del'>-# Classes and modules built in to the interpreter. We need</div><div class='del'>-# these to define superclasses of user objects</div><div class='del'>-</div><div class='del'>-require "rdoc/code_objects"</div><div class='del'>-require "rdoc/parsers/parserfactory"</div><div class='del'>-require "rdoc/options"</div><div class='del'>-require "rdoc/rdoc"</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Ruby's built-in classes.</div><div class='del'>-</div><div class='del'>-  KNOWN_CLASSES = {</div><div class='del'>-    "rb_cObject"           =&gt; "Object",</div><div class='del'>-    "rb_cArray"            =&gt; "Array",</div><div class='del'>-    "rb_cBignum"           =&gt; "Bignum",</div><div class='del'>-    "rb_cClass"            =&gt; "Class",</div><div class='del'>-    "rb_cDir"              =&gt; "Dir",</div><div class='del'>-    "rb_cData"             =&gt; "Data",</div><div class='del'>-    "rb_cFalseClass"       =&gt; "FalseClass",</div><div class='del'>-    "rb_cFile"             =&gt; "File",</div><div class='del'>-    "rb_cFixnum"           =&gt; "Fixnum",</div><div class='del'>-    "rb_cFloat"            =&gt; "Float",</div><div class='del'>-    "rb_cHash"             =&gt; "Hash",</div><div class='del'>-    "rb_cInteger"          =&gt; "Integer",</div><div class='del'>-    "rb_cIO"               =&gt; "IO",</div><div class='del'>-    "rb_cModule"           =&gt; "Module",</div><div class='del'>-    "rb_cNilClass"         =&gt; "NilClass",</div><div class='del'>-    "rb_cNumeric"          =&gt; "Numeric",</div><div class='del'>-    "rb_cProc"             =&gt; "Proc",</div><div class='del'>-    "rb_cRange"            =&gt; "Range",</div><div class='del'>-    "rb_cRegexp"           =&gt; "Regexp",</div><div class='del'>-    "rb_cString"           =&gt; "String",</div><div class='del'>-    "rb_cSymbol"           =&gt; "Symbol",</div><div class='del'>-    "rb_cThread"           =&gt; "Thread",</div><div class='del'>-    "rb_cTime"             =&gt; "Time",</div><div class='del'>-    "rb_cTrueClass"        =&gt; "TrueClass",</div><div class='del'>-    "rb_cStruct"           =&gt; "Struct",</div><div class='del'>-    "rb_eException"        =&gt; "Exception",</div><div class='del'>-    "rb_eStandardError"    =&gt; "StandardError",</div><div class='del'>-    "rb_eSystemExit"       =&gt; "SystemExit",</div><div class='del'>-    "rb_eInterrupt"        =&gt; "Interrupt",</div><div class='del'>-    "rb_eSignal"           =&gt; "Signal",</div><div class='del'>-    "rb_eFatal"            =&gt; "Fatal",</div><div class='del'>-    "rb_eArgError"         =&gt; "ArgError",</div><div class='del'>-    "rb_eEOFError"         =&gt; "EOFError",</div><div class='del'>-    "rb_eIndexError"       =&gt; "IndexError",</div><div class='del'>-    "rb_eRangeError"       =&gt; "RangeError",</div><div class='del'>-    "rb_eIOError"          =&gt; "IOError",</div><div class='del'>-    "rb_eRuntimeError"     =&gt; "RuntimeError",</div><div class='del'>-    "rb_eSecurityError"    =&gt; "SecurityError",</div><div class='del'>-    "rb_eSystemCallError"  =&gt; "SystemCallError",</div><div class='del'>-    "rb_eTypeError"        =&gt; "TypeError",</div><div class='del'>-    "rb_eZeroDivError"     =&gt; "ZeroDivError",</div><div class='del'>-    "rb_eNotImpError"      =&gt; "NotImpError",</div><div class='del'>-    "rb_eNoMemError"       =&gt; "NoMemError",</div><div class='del'>-    "rb_eFloatDomainError" =&gt; "FloatDomainError",</div><div class='del'>-    "rb_eScriptError"      =&gt; "ScriptError",</div><div class='del'>-    "rb_eNameError"        =&gt; "NameError",</div><div class='del'>-    "rb_eSyntaxError"      =&gt; "SyntaxError",</div><div class='del'>-    "rb_eLoadError"        =&gt; "LoadError",</div><div class='del'>-</div><div class='del'>-    "rb_mKernel"           =&gt; "Kernel",</div><div class='del'>-    "rb_mComparable"       =&gt; "Comparable",</div><div class='del'>-    "rb_mEnumerable"       =&gt; "Enumerable",</div><div class='del'>-    "rb_mPrecision"        =&gt; "Precision",</div><div class='del'>-    "rb_mErrno"            =&gt; "Errno",</div><div class='del'>-    "rb_mFileTest"         =&gt; "FileTest",</div><div class='del'>-    "rb_mGC"               =&gt; "GC",</div><div class='del'>-    "rb_mMath"             =&gt; "Math",</div><div class='del'>-    "rb_mProcess"          =&gt; "Process"</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # We attempt to parse C extension files. Basically we look for</div><div class='del'>-  # the standard patterns that you find in extensions: &lt;tt&gt;rb_define_class,</div><div class='del'>-  # rb_define_method&lt;/tt&gt; and so on. We also try to find the corresponding</div><div class='del'>-  # C source for the methods and extract comments, but if we fail</div><div class='del'>-  # we don't worry too much.</div><div class='del'>-  #</div><div class='del'>-  # The comments associated with a Ruby method are extracted from the C</div><div class='del'>-  # comment block associated with the routine that _implements_ that</div><div class='del'>-  # method, that is to say the method whose name is given in the</div><div class='del'>-  # &lt;tt&gt;rb_define_method&lt;/tt&gt; call. For example, you might write:</div><div class='del'>-  #</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'>-  #   static VALUE</div><div class='del'>-  #   rb_ary_flatten(ary)</div><div class='del'>-  #       VALUE ary;</div><div class='del'>-  #   {</div><div class='del'>-  #       ary = rb_obj_dup(ary);</div><div class='del'>-  #       rb_ary_flatten_bang(ary);</div><div class='del'>-  #       return ary;</div><div class='del'>-  #   }</div><div class='del'>-  #</div><div class='del'>-  #   ...</div><div class='del'>-  #</div><div class='del'>-  #   void</div><div class='del'>-  #   Init_Array()</div><div class='del'>-  #   {</div><div class='del'>-  #     ...</div><div class='del'>-  #     rb_define_method(rb_cArray, "flatten", rb_ary_flatten, 0);</div><div class='del'>-  #</div><div class='del'>-  # Here RDoc will determine from the rb_define_method line that there's a</div><div class='del'>-  # method called "flatten" in class Array, and will look for the implementation</div><div class='del'>-  # in the method rb_ary_flatten. It will then use the comment from that</div><div class='del'>-  # method in the HTML output. This method must be in the same source file</div><div class='del'>-  # as the rb_define_method.</div><div class='del'>-  #</div><div class='del'>-  # C classes can be diagrammed (see /tc/dl/ruby/ruby/error.c), and RDoc</div><div class='del'>-  # integrates C and Ruby source into one tree</div><div class='del'>-  #</div><div class='del'>-  # The comment blocks may include special directives:</div><div class='del'>-  #</div><div class='del'>-  # [Document-class: &lt;i&gt;name&lt;/i&gt;]</div><div class='del'>-  #   This comment block is documentation for the given class. Use this</div><div class='del'>-  #   when the &lt;tt&gt;Init_xxx&lt;/tt&gt; method is not named after the class.</div><div class='del'>-  #</div><div class='del'>-  # [Document-method: &lt;i&gt;name&lt;/i&gt;]</div><div class='del'>-  #   This comment documents the named method. Use when RDoc cannot</div><div class='del'>-  #   automatically find the method from it's declaration</div><div class='del'>-  #</div><div class='del'>-  # [call-seq:  &lt;i&gt;text up to an empty line&lt;/i&gt;]</div><div class='del'>-  #   Because C source doesn't give descriptive names to Ruby-level parameters,</div><div class='del'>-  #   you need to document the calling sequence explicitly</div><div class='del'>-  #</div><div class='del'>-  # In addition, RDoc assumes by default that the C method implementing a </div><div class='del'>-  # Ruby function is in the same source file as the rb_define_method call.</div><div class='del'>-  # If this isn't the case, add the comment </div><div class='del'>-  #</div><div class='del'>-  #    rb_define_method(....);  // in: filename</div><div class='del'>-  #</div><div class='del'>-  # As an example, we might have an extension that defines multiple classes</div><div class='del'>-  # in its Init_xxx method. We could document them using</div><div class='del'>-  #</div><div class='del'>-  #  </div><div class='del'>-  #  /*</div><div class='del'>-  #   * Document-class:  MyClass</div><div class='del'>-  #   *</div><div class='del'>-  #   * Encapsulate the writing and reading of the configuration</div><div class='del'>-  #   * file. ...</div><div class='del'>-  #   */</div><div class='del'>-  #  </div><div class='del'>-  #  /*</div><div class='del'>-  #   * Document-method: read_value</div><div class='del'>-  #   *</div><div class='del'>-  #   * call-seq:</div><div class='del'>-  #   *   cfg.read_value(key)            -&gt; value</div><div class='del'>-  #   *   cfg.read_value(key} { |key| }  -&gt; value</div><div class='del'>-  #   *</div><div class='del'>-  #   * Return the value corresponding to +key+ from the configuration.</div><div class='del'>-  #   * In the second form, if the key isn't found, invoke the</div><div class='del'>-  #   * block and return its value.</div><div class='del'>-  #   */</div><div class='del'>-  #</div><div class='del'>-</div><div class='del'>-  class C_Parser</div><div class='del'>-</div><div class='del'>-    attr_accessor :progress</div><div class='del'>-</div><div class='del'>-    extend ParserFactory</div><div class='del'>-    parse_files_matching(/\.(?:([CcHh])\1?|c([+xp])\2|y)\z/)</div><div class='del'>-</div><div class='del'>-    @@known_bodies = {}</div><div class='del'>-</div><div class='del'>-    # prepare to parse a C file</div><div class='del'>-    def initialize(top_level, file_name, body, options, stats)</div><div class='del'>-      @known_classes = KNOWN_CLASSES.dup</div><div class='del'>-      @body = handle_tab_width(handle_ifdefs_in(body))</div><div class='del'>-      @options = options</div><div class='del'>-      @stats   = stats</div><div class='del'>-      @top_level = top_level</div><div class='del'>-      @classes = Hash.new</div><div class='del'>-      @file_dir = File.dirname(file_name)</div><div class='del'>-      @progress = $stderr unless options.quiet</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Extract the classes/modules and methods from a C file</div><div class='del'>-    # and return the corresponding top-level object</div><div class='del'>-    def scan</div><div class='del'>-      remove_commented_out_lines</div><div class='del'>-      do_classes</div><div class='del'>-      do_constants</div><div class='del'>-      do_methods</div><div class='del'>-      do_includes</div><div class='del'>-      do_aliases</div><div class='del'>-      @top_level</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'>-</div><div class='del'>-    def progress(char)</div><div class='del'>-      unless @options.quiet</div><div class='del'>-        @progress.print(char)</div><div class='del'>-        @progress.flush</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def warn(msg)</div><div class='del'>-      $stderr.puts</div><div class='del'>-      $stderr.puts msg</div><div class='del'>-      $stderr.flush</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_private_comments(comment)</div><div class='del'>-       comment.gsub!(/\/?\*--(.*?)\/?\*\+\+/m, '')</div><div class='del'>-       comment.sub!(/\/?\*--.*/m, '')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # removes lines that are commented out that might otherwise get picked up</div><div class='del'>-    # when scanning for classes and methods</div><div class='del'>-</div><div class='del'>-    def remove_commented_out_lines</div><div class='del'>-      @body.gsub!(%r{//.*rb_define_}, '//')</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def handle_class_module(var_name, class_mod, class_name, parent, in_module)</div><div class='del'>-      progress(class_mod[0, 1])</div><div class='del'>-</div><div class='del'>-      parent_name = @known_classes[parent] || parent</div><div class='del'>-</div><div class='del'>-      if in_module</div><div class='del'>-        enclosure = @classes[in_module]</div><div class='del'>-        unless enclosure</div><div class='del'>-          if enclosure = @known_classes[in_module]</div><div class='del'>-            handle_class_module(in_module, (/^rb_m/ =~ in_module ? "module" : "class"),</div><div class='del'>-                                enclosure, nil, nil)</div><div class='del'>-            enclosure = @classes[in_module]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        unless enclosure</div><div class='del'>-          warn("Enclosing class/module '#{in_module}' for " +</div><div class='del'>-                "#{class_mod} #{class_name} not known")</div><div class='del'>-          return</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        enclosure = @top_level</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if class_mod == "class" </div><div class='del'>-        cm = enclosure.add_class(NormalClass, class_name, parent_name)</div><div class='del'>-        @stats.num_classes += 1</div><div class='del'>-      else</div><div class='del'>-        cm = enclosure.add_module(NormalModule, class_name)</div><div class='del'>-        @stats.num_modules += 1</div><div class='del'>-      end</div><div class='del'>-      cm.record_location(enclosure.toplevel)</div><div class='del'>-</div><div class='del'>-      find_class_comment(cm.full_name, cm)</div><div class='del'>-      @classes[var_name] = cm</div><div class='del'>-      @known_classes[var_name] = cm.full_name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Look for class or module documentation above Init_+class_name+(void),</div><div class='del'>-    # in a Document-class +class_name+ (or module) comment or above an</div><div class='del'>-    # rb_define_class (or module).  If a comment is supplied above a matching</div><div class='del'>-    # Init_ and a rb_define_class the Init_ comment is used.</div><div class='del'>-    #</div><div class='del'>-    #   /*</div><div class='del'>-    #    * This is a comment for Foo</div><div class='del'>-    #    */</div><div class='del'>-    #   Init_Foo(void) {</div><div class='del'>-    #       VALUE cFoo = rb_define_class("Foo", rb_cObject);</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    #   /*</div><div class='del'>-    #    * Document-class: Foo</div><div class='del'>-    #    * This is a comment for Foo</div><div class='del'>-    #    */</div><div class='del'>-    #   Init_foo(void) {</div><div class='del'>-    #       VALUE cFoo = rb_define_class("Foo", rb_cObject);</div><div class='del'>-    #   }</div><div class='del'>-    #</div><div class='del'>-    #   /*</div><div class='del'>-    #    * This is a comment for Foo</div><div class='del'>-    #    */</div><div class='del'>-    #   VALUE cFoo = rb_define_class("Foo", rb_cObject);</div><div class='del'>-</div><div class='del'>-    def find_class_comment(class_name, class_meth)</div><div class='del'>-      comment = nil</div><div class='del'>-      if @body =~ %r{((?&gt;/\*.*?\*/\s+))</div><div class='del'>-                     (static\s+)?void\s+Init_#{class_name}\s*(?:_\(\s*)?\(\s*(?:void\s*)?\)}xmi</div><div class='del'>-        comment = $1</div><div class='del'>-      elsif @body =~ %r{Document-(class|module):\s#{class_name}\s*?\n((?&gt;.*?\*/))}m</div><div class='del'>-        comment = $2</div><div class='del'>-      else</div><div class='del'>-        if @body =~ /rb_define_(class|module)/m then</div><div class='del'>-          class_name = class_name.split("::").last</div><div class='del'>-          comments = []</div><div class='del'>-          @body.split(/(\/\*.*?\*\/)\s*?\n/m).each_with_index do |chunk, index|</div><div class='del'>-            comments[index] = chunk</div><div class='del'>-            if chunk =~ /rb_define_(class|module).*?"(#{class_name})"/m then</div><div class='del'>-              comment = comments[index-1]</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'>-      class_meth.comment = mangle_comment(comment) if comment</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ############################################################</div><div class='del'>-</div><div class='del'>-    def do_classes</div><div class='del'>-      @body.scan(/(\w+)\s* = \s*rb_define_module\s*\(\s*"(\w+)"\s*\)/mx) do </div><div class='del'>-        |var_name, class_name|</div><div class='del'>-        handle_class_module(var_name, "module", class_name, nil, nil)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      # The '.' lets us handle SWIG-generated files</div><div class='del'>-      @body.scan(/([\w\.]+)\s* = \s*rb_define_class\s*</div><div class='del'>-                \( </div><div class='del'>-                   \s*"(\w+)",</div><div class='del'>-                   \s*(\w+)\s*</div><div class='del'>-                \)/mx) do </div><div class='del'>-        </div><div class='del'>-        |var_name, class_name, parent|</div><div class='del'>-        handle_class_module(var_name, "class", class_name, parent, nil)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      @body.scan(/(\w+)\s*=\s*boot_defclass\s*\(\s*"(\w+?)",\s*(\w+?)\s*\)/) do</div><div class='del'>-        |var_name, class_name, parent|</div><div class='del'>-        parent = nil if parent == "0"</div><div class='del'>-        handle_class_module(var_name, "class", class_name, parent, nil)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @body.scan(/(\w+)\s* = \s*rb_define_module_under\s*</div><div class='del'>-                \( </div><div class='del'>-                   \s*(\w+),</div><div class='del'>-                   \s*"(\w+)"</div><div class='del'>-                \s*\)/mx) do </div><div class='del'>-        </div><div class='del'>-        |var_name, in_module, class_name|</div><div class='del'>-        handle_class_module(var_name, "module", class_name, nil, in_module)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      @body.scan(/([\w\.]+)\s* = \s*rb_define_class_under\s*</div><div class='del'>-                \( </div><div class='del'>-                   \s*(\w+),</div><div class='del'>-                   \s*"(\w+)",</div><div class='del'>-                   \s*(\w+)\s*</div><div class='del'>-                \s*\)/mx) do </div><div class='del'>-        </div><div class='del'>-        |var_name, in_module, class_name, parent|</div><div class='del'>-        handle_class_module(var_name, "class", class_name, parent, in_module)</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 do_constants</div><div class='del'>-      @body.scan(%r{\Wrb_define_</div><div class='del'>-                     (</div><div class='del'>-                        variable |</div><div class='del'>-                        readonly_variable |</div><div class='del'>-                        const |</div><div class='del'>-                        global_const |</div><div class='del'>-                      )</div><div class='del'>-                 \s*\( </div><div class='del'>-                   (?:\s*(\w+),)?</div><div class='del'>-                   \s*"(\w+)",</div><div class='del'>-                   \s*(.*?)\s*\)\s*;</div><div class='del'>-                   }xm) do</div><div class='del'>-        </div><div class='del'>-        |type, var_name, const_name, definition|</div><div class='del'>-        var_name = "rb_cObject" if !var_name or var_name == "rb_mKernel"</div><div class='del'>-				handle_constants(type, var_name, const_name, definition)</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 do_methods</div><div class='del'>-</div><div class='del'>-      @body.scan(%r{rb_define_</div><div class='del'>-                     (</div><div class='del'>-                        singleton_method |</div><div class='del'>-                        method           |</div><div class='del'>-                        module_function  |</div><div class='del'>-                        private_method</div><div class='del'>-                     )</div><div class='del'>-                     \s*\(\s*([\w\.]+),</div><div class='del'>-                       \s*"([^"]+)",</div><div class='del'>-                       \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,</div><div class='del'>-                       \s*(-?\w+)\s*\)</div><div class='del'>-                     (?:;\s*/[*/]\s+in\s+(\w+?\.[cy]))?</div><div class='del'>-                   }xm) do</div><div class='del'>-        |type, var_name, meth_name, meth_body, param_count, source_file|</div><div class='del'>-       #" </div><div class='del'>-</div><div class='del'>-        # Ignore top-object and weird struct.c dynamic stuff</div><div class='del'>-        next if var_name == "ruby_top_self" </div><div class='del'>-        next if var_name == "nstr"</div><div class='del'>-        next if var_name == "envtbl"</div><div class='del'>-        next if var_name == "argf"   # it'd be nice to handle this one</div><div class='del'>-</div><div class='del'>-        var_name = "rb_cObject" if var_name == "rb_mKernel"</div><div class='del'>-        handle_method(type, var_name, meth_name, </div><div class='del'>-                      meth_body, param_count, source_file)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @body.scan(%r{rb_define_attr\(</div><div class='del'>-                               \s*([\w\.]+),</div><div class='del'>-                               \s*"([^"]+)",</div><div class='del'>-                               \s*(\d+),</div><div class='del'>-                               \s*(\d+)\s*\);</div><div class='del'>-                  }xm) do  #"</div><div class='del'>-        |var_name, attr_name, attr_reader, attr_writer|</div><div class='del'>-        </div><div class='del'>-        #var_name = "rb_cObject" if var_name == "rb_mKernel"</div><div class='del'>-        handle_attr(var_name, attr_name,</div><div class='del'>-                    attr_reader.to_i != 0,</div><div class='del'>-                    attr_writer.to_i != 0)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @body.scan(%r{rb_define_global_function\s*\(</div><div class='del'>-                               \s*"([^"]+)",</div><div class='del'>-                               \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,</div><div class='del'>-                               \s*(-?\w+)\s*\)</div><div class='del'>-                  (?:;\s*/[*/]\s+in\s+(\w+?\.[cy]))?</div><div class='del'>-                  }xm) do  #"</div><div class='del'>-        |meth_name, meth_body, param_count, source_file|</div><div class='del'>-        handle_method("method", "rb_mKernel", meth_name, </div><div class='del'>-                      meth_body, param_count, source_file)</div><div class='del'>-      end</div><div class='del'>-  </div><div class='del'>-      @body.scan(/define_filetest_function\s*\(</div><div class='del'>-                               \s*"([^"]+)",</div><div class='del'>-                               \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,</div><div class='del'>-                               \s*(-?\w+)\s*\)/xm) do  #"</div><div class='del'>-        |meth_name, meth_body, param_count|</div><div class='del'>-        </div><div class='del'>-        handle_method("method", "rb_mFileTest", meth_name, meth_body, param_count)</div><div class='del'>-        handle_method("singleton_method", "rb_cFile", meth_name, meth_body, param_count)</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 do_aliases</div><div class='del'>-      @body.scan(%r{rb_define_alias\s*\(\s*(\w+),\s*"([^"]+)",\s*"([^"]+)"\s*\)}m) do</div><div class='del'>-        |var_name, new_name, old_name|</div><div class='del'>-        @stats.num_methods += 1</div><div class='del'>-        class_name = @known_classes[var_name] || var_name</div><div class='del'>-        class_obj  = find_class(var_name, class_name)</div><div class='del'>-</div><div class='del'>-        class_obj.add_alias(Alias.new("", old_name, new_name, ""))</div><div class='del'>-      end</div><div class='del'>-   end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Adds constant comments.  By providing some_value: at the start ofthe</div><div class='del'>-    # comment you can override the C value of the comment to give a friendly</div><div class='del'>-    # definition.</div><div class='del'>-    #</div><div class='del'>-    #   /* 300: The perfect score in bowling */</div><div class='del'>-    #   rb_define_const(cFoo, "PERFECT", INT2FIX(300);</div><div class='del'>-    #</div><div class='del'>-    # Will override +INT2FIX(300)+ with the value +300+ in the output RDoc.</div><div class='del'>-    # Values may include quotes and escaped colons (\:).</div><div class='del'>-</div><div class='del'>-    def handle_constants(type, var_name, const_name, definition)</div><div class='del'>-      #@stats.num_constants += 1</div><div class='del'>-      class_name = @known_classes[var_name]</div><div class='del'>-      </div><div class='del'>-      return unless class_name</div><div class='del'>-</div><div class='del'>-      class_obj  = find_class(var_name, class_name)</div><div class='del'>-</div><div class='del'>-      unless class_obj</div><div class='del'>-        warn("Enclosing class/module '#{const_name}' for not known")</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      comment = find_const_comment(type, const_name)</div><div class='del'>-</div><div class='del'>-      # In the case of rb_define_const, the definition and comment are in</div><div class='del'>-      # "/* definition: comment */" form.  The literal ':' and '\' characters</div><div class='del'>-      # can be escaped with a backslash.</div><div class='del'>-      if type.downcase == 'const' then</div><div class='del'>-         elements = mangle_comment(comment).split(':')</div><div class='del'>-         if elements.nil? or elements.empty? then</div><div class='del'>-            con = Constant.new(const_name, definition, mangle_comment(comment))</div><div class='del'>-         else</div><div class='del'>-            new_definition = elements[0..-2].join(':')</div><div class='del'>-            if new_definition.empty? then # Default to literal C definition</div><div class='del'>-               new_definition = definition</div><div class='del'>-            else</div><div class='del'>-               new_definition.gsub!("\:", ":")</div><div class='del'>-               new_definition.gsub!("\\", '\\')</div><div class='del'>-            end</div><div class='del'>-            new_definition.sub!(/\A(\s+)/, '')</div><div class='del'>-            new_comment = $1.nil? ? elements.last : "#{$1}#{elements.last.lstrip}"</div><div class='del'>-            con = Constant.new(const_name, new_definition,</div><div class='del'>-                               mangle_comment(new_comment))</div><div class='del'>-         end</div><div class='del'>-      else</div><div class='del'>-         con = Constant.new(const_name, definition, mangle_comment(comment))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class_obj.add_constant(con)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Finds a comment matching +type+ and +const_name+ either above the</div><div class='del'>-    # comment or in the matching Document- section.</div><div class='del'>-</div><div class='del'>-    def find_const_comment(type, const_name)</div><div class='del'>-      if @body =~ %r{((?&gt;^\s*/\*.*?\*/\s+))</div><div class='del'>-                     rb_define_#{type}\((?:\s*(\w+),)?\s*"#{const_name}"\s*,.*?\)\s*;}xmi</div><div class='del'>-        $1</div><div class='del'>-      elsif @body =~ %r{Document-(?:const|global|variable):\s#{const_name}\s*?\n((?&gt;.*?\*/))}m</div><div class='del'>-        $1</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'>-    ###########################################################</div><div class='del'>-</div><div class='del'>-    def handle_attr(var_name, attr_name, reader, writer)</div><div class='del'>-      rw = ''</div><div class='del'>-      if reader </div><div class='del'>-        #@stats.num_methods += 1</div><div class='del'>-        rw &lt;&lt; 'R'</div><div class='del'>-      end</div><div class='del'>-      if writer</div><div class='del'>-        #@stats.num_methods += 1</div><div class='del'>-        rw &lt;&lt; 'W'</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class_name = @known_classes[var_name]</div><div class='del'>-</div><div class='del'>-      return unless class_name</div><div class='del'>-      </div><div class='del'>-      class_obj  = find_class(var_name, class_name)</div><div class='del'>-</div><div class='del'>-      if class_obj</div><div class='del'>-        comment = find_attr_comment(attr_name)</div><div class='del'>-        unless comment.empty?</div><div class='del'>-          comment = mangle_comment(comment)</div><div class='del'>-        end</div><div class='del'>-        att = Attr.new('', attr_name, rw, comment)</div><div class='del'>-        class_obj.add_attribute(att)</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 find_attr_comment(attr_name)</div><div class='del'>-      if @body =~ %r{((?&gt;/\*.*?\*/\s+))</div><div class='del'>-                     rb_define_attr\((?:\s*(\w+),)?\s*"#{attr_name}"\s*,.*?\)\s*;}xmi</div><div class='del'>-        $1</div><div class='del'>-      elsif @body =~ %r{Document-attr:\s#{attr_name}\s*?\n((?&gt;.*?\*/))}m</div><div class='del'>-        $1</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'>-    ###########################################################</div><div class='del'>-</div><div class='del'>-    def handle_method(type, var_name, meth_name, </div><div class='del'>-                      meth_body, param_count, source_file = nil)</div><div class='del'>-      progress(".")</div><div class='del'>-</div><div class='del'>-      @stats.num_methods += 1</div><div class='del'>-      class_name = @known_classes[var_name]</div><div class='del'>-</div><div class='del'>-      return unless class_name</div><div class='del'>-</div><div class='del'>-      class_obj  = find_class(var_name, class_name)</div><div class='del'>-      </div><div class='del'>-      if class_obj</div><div class='del'>-        if meth_name == "initialize"</div><div class='del'>-          meth_name = "new"</div><div class='del'>-          type = "singleton_method"</div><div class='del'>-        end</div><div class='del'>-        meth_obj = AnyMethod.new("", meth_name)</div><div class='del'>-        meth_obj.singleton =</div><div class='del'>-	  %w{singleton_method module_function}.include?(type) </div><div class='del'>-        </div><div class='del'>-        p_count = (Integer(param_count) rescue -1)</div><div class='del'>-        </div><div class='del'>-        if p_count &lt; 0</div><div class='del'>-          meth_obj.params = "(...)"</div><div class='del'>-        elsif p_count == 0</div><div class='del'>-          meth_obj.params = "()"</div><div class='del'>-        else</div><div class='del'>-          meth_obj.params = "(" +</div><div class='del'>-                            (1..p_count).map{|i| "p#{i}"}.join(", ") + </div><div class='del'>-                                                ")"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        if source_file</div><div class='del'>-          file_name = File.join(@file_dir, source_file)</div><div class='del'>-          body = (@@known_bodies[source_file] ||= File.read(file_name))</div><div class='del'>-        else</div><div class='del'>-          body = @body</div><div class='del'>-        end</div><div class='del'>-        if find_body(meth_body, meth_obj, body) and meth_obj.document_self</div><div class='del'>-          class_obj.add_method(meth_obj)</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'>-    # Find the C code corresponding to a Ruby method</div><div class='del'>-    def find_body(meth_name, meth_obj, body, quiet = false)</div><div class='del'>-      case body</div><div class='del'>-      when %r{((?&gt;/\*.*?\*/\s*))(?:static\s+)?VALUE\s+#{meth_name}</div><div class='del'>-              \s*(\(.*?\)).*?^}xm</div><div class='del'>-        comment, params = $1, $2</div><div class='del'>-        body_text = $&amp;</div><div class='del'>-</div><div class='del'>-        remove_private_comments(comment) if comment</div><div class='del'>-</div><div class='del'>-        # see if we can find the whole body</div><div class='del'>-        </div><div class='del'>-        re = Regexp.escape(body_text) + '[^(]*^\{.*?^\}'</div><div class='del'>-        if Regexp.new(re, Regexp::MULTILINE).match(body)</div><div class='del'>-          body_text = $&amp;</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # The comment block may have been overridden with a</div><div class='del'>-        # 'Document-method' block. This happens in the interpreter</div><div class='del'>-        # when multiple methods are vectored through to the same</div><div class='del'>-        # C method but those methods are logically distinct (for</div><div class='del'>-        # example Kernel.hash and Kernel.object_id share the same</div><div class='del'>-        # implementation</div><div class='del'>-</div><div class='del'>-        override_comment = find_override_comment(meth_obj.name)</div><div class='del'>-        comment = override_comment if override_comment</div><div class='del'>-</div><div class='del'>-        find_modifiers(comment, meth_obj) if comment</div><div class='del'>-        </div><div class='del'>-#        meth_obj.params = params</div><div class='del'>-        meth_obj.start_collecting_tokens</div><div class='del'>-        meth_obj.add_token(RubyToken::Token.new(1,1).set_text(body_text))</div><div class='del'>-        meth_obj.comment = mangle_comment(comment)</div><div class='del'>-      when %r{((?&gt;/\*.*?\*/\s*))^\s*\#\s*define\s+#{meth_name}\s+(\w+)}m</div><div class='del'>-        comment = $1</div><div class='del'>-        find_body($2, meth_obj, body, true)</div><div class='del'>-        find_modifiers(comment, meth_obj)</div><div class='del'>-        meth_obj.comment = mangle_comment(comment) + meth_obj.comment</div><div class='del'>-      when %r{^\s*\#\s*define\s+#{meth_name}\s+(\w+)}m</div><div class='del'>-        unless find_body($1, meth_obj, body, true)</div><div class='del'>-          warn "No definition for #{meth_name}" unless quiet</div><div class='del'>-          return false</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-</div><div class='del'>-        # No body, but might still have an override comment</div><div class='del'>-        comment = find_override_comment(meth_obj.name)</div><div class='del'>-</div><div class='del'>-        if comment</div><div class='del'>-          find_modifiers(comment, meth_obj)</div><div class='del'>-          meth_obj.comment = mangle_comment(comment)</div><div class='del'>-        else</div><div class='del'>-          warn "No definition for #{meth_name}" unless quiet</div><div class='del'>-          return false</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # If the comment block contains a section that looks like:</div><div class='del'>-    #</div><div class='del'>-    #    call-seq:</div><div class='del'>-    #        Array.new</div><div class='del'>-    #        Array.new(10)</div><div class='del'>-    #</div><div class='del'>-    # use it for the parameters.</div><div class='del'>-</div><div class='del'>-    def find_modifiers(comment, meth_obj)</div><div class='del'>-      if comment.sub!(/:nodoc:\s*^\s*\*?\s*$/m, '') or</div><div class='del'>-         comment.sub!(/\A\/\*\s*:nodoc:\s*\*\/\Z/, '')</div><div class='del'>-        meth_obj.document_self = false</div><div class='del'>-      end</div><div class='del'>-      if comment.sub!(/call-seq:(.*?)^\s*\*?\s*$/m, '') or</div><div class='del'>-         comment.sub!(/\A\/\*\s*call-seq:(.*?)\*\/\Z/, '')</div><div class='del'>-        seq = $1</div><div class='del'>-        seq.gsub!(/^\s*\*\s*/, '')</div><div class='del'>-        meth_obj.call_seq = seq</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_override_comment(meth_name)</div><div class='del'>-      name = Regexp.escape(meth_name)</div><div class='del'>-      if @body =~ %r{Document-method:\s#{name}\s*?\n((?&gt;.*?\*/))}m</div><div class='del'>-        $1</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Look for includes of the form:</div><div class='del'>-    #</div><div class='del'>-    #     rb_include_module(rb_cArray, rb_mEnumerable);</div><div class='del'>-</div><div class='del'>-    def do_includes</div><div class='del'>-      @body.scan(/rb_include_module\s*\(\s*(\w+?),\s*(\w+?)\s*\)/) do |c,m|</div><div class='del'>-        if cls = @classes[c]</div><div class='del'>-          m = @known_classes[m] || m</div><div class='del'>-          cls.add_include(Include.new(m, ""))</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'>-    # Remove the /*'s and leading asterisks from C comments</div><div class='del'>-    </div><div class='del'>-    def mangle_comment(comment)</div><div class='del'>-      comment.sub!(%r{/\*+}) { " " * $&amp;.length }</div><div class='del'>-      comment.sub!(%r{\*+/}) { " " * $&amp;.length }</div><div class='del'>-      comment.gsub!(/^[ \t]*\*/m) { " " * $&amp;.length }</div><div class='del'>-      comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_class(raw_name, name)</div><div class='del'>-      unless @classes[raw_name]</div><div class='del'>-        if raw_name =~ /^rb_m/ </div><div class='del'>-          @classes[raw_name] = @top_level.add_module(NormalModule, name)</div><div class='del'>-        else</div><div class='del'>-          @classes[raw_name] = @top_level.add_class(NormalClass, name, nil)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      @classes[raw_name]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def handle_tab_width(body)</div><div class='del'>-      if /\t/ =~ body</div><div class='del'>-        tab_width = Options.instance.tab_width</div><div class='del'>-        body.split(/\n/).map do |line|</div><div class='del'>-          1 while line.gsub!(/\t+/) { ' ' * (tab_width*$&amp;.length - $`.length % tab_width)}  &amp;&amp; $~ #`</div><div class='del'>-          line</div><div class='del'>-        end .join("\n")</div><div class='del'>-      else</div><div class='del'>-        body</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Removes #ifdefs that would otherwise confuse us</div><div class='del'>-    </div><div class='del'>-    def handle_ifdefs_in(body)</div><div class='del'>-      body.gsub(/^#ifdef HAVE_PROTOTYPES.*?#else.*?\n(.*?)#endif.*?\n/m) { $1 }</div><div class='del'>-    end</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='head'>diff --git a/lib/rdoc/parsers/parse_f95.rb b/lib/rdoc/parsers/parse_f95.rb<br/>deleted file mode 100644<br/>index f1a1ae4d4b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/parsers/parse_f95.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/parsers/parse_f95.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1841 +0,0 @@</div><div class='del'>-#= parse_f95.rb - Fortran95 Parser</div><div class='del'>-#</div><div class='del'>-#== Overview</div><div class='del'>-#</div><div class='del'>-#"parse_f95.rb" parses Fortran95 files with suffixes "f90", "F90", "f95"</div><div class='del'>-#and "F95". Fortran95 files are expected to be conformed to Fortran95</div><div class='del'>-#standards.</div><div class='del'>-#</div><div class='del'>-#== Rules</div><div class='del'>-#</div><div class='del'>-#Fundamental rules are same as that of the Ruby parser.</div><div class='del'>-#But comment markers are '!' not '#'.</div><div class='del'>-#</div><div class='del'>-#=== Correspondence between RDoc documentation and Fortran95 programs</div><div class='del'>-#</div><div class='del'>-#"parse_f95.rb" parses main programs, modules, subroutines, functions,</div><div class='del'>-#derived-types, public variables, public constants,</div><div class='del'>-#defined operators and defined assignments.</div><div class='del'>-#These components are described in items of RDoc documentation, as follows.</div><div class='del'>-#</div><div class='del'>-#Files :: Files (same as Ruby)</div><div class='del'>-#Classes :: Modules</div><div class='del'>-#Methods :: Subroutines, functions, variables, constants, derived-types, defined operators, defined assignments</div><div class='del'>-#Required files :: Files in which imported modules, external subroutines and external functions are defined.</div><div class='del'>-#Included Modules :: List of imported modules</div><div class='del'>-#Attributes :: List of derived-types, List of imported modules all of whose components are published again</div><div class='del'>-#</div><div class='del'>-#Components listed in 'Methods' (subroutines, functions, ...)</div><div class='del'>-#defined in modules are described in the item of 'Classes'.</div><div class='del'>-#On the other hand, components defined in main programs or</div><div class='del'>-#as external procedures are described in the item of 'Files'.</div><div class='del'>-#</div><div class='del'>-#=== Components parsed by default</div><div class='del'>-#</div><div class='del'>-#By default, documentation on public components (subroutines, functions, </div><div class='del'>-#variables, constants, derived-types, defined operators, </div><div class='del'>-#defined assignments) are generated. </div><div class='del'>-#With "--all" option, documentation on all components</div><div class='del'>-#are generated (almost same as the Ruby parser).</div><div class='del'>-#</div><div class='del'>-#=== Information parsed automatically</div><div class='del'>-#</div><div class='del'>-#The following information is automatically parsed.</div><div class='del'>-#</div><div class='del'>-#* Types of arguments</div><div class='del'>-#* Types of variables and constants</div><div class='del'>-#* Types of variables in the derived types, and initial values</div><div class='del'>-#* NAMELISTs and types of variables in them, and initial values</div><div class='del'>-#</div><div class='del'>-#Aliases by interface statement are described in the item of 'Methods'.</div><div class='del'>-#</div><div class='del'>-#Components which are imported from other modules and published again </div><div class='del'>-#are described in the item of 'Methods'.</div><div class='del'>-#</div><div class='del'>-#=== Format of comment blocks</div><div class='del'>-#</div><div class='del'>-#Comment blocks should be written as follows.</div><div class='del'>-#Comment blocks are considered to be ended when the line without '!'</div><div class='del'>-#appears.</div><div class='del'>-#The indentation is not necessary.</div><div class='del'>-#</div><div class='del'>-#     ! (Top of file)</div><div class='del'>-#     !</div><div class='del'>-#     ! Comment blocks for the files.</div><div class='del'>-#     !</div><div class='del'>-#     !--</div><div class='del'>-#     ! The comment described in the part enclosed by</div><div class='del'>-#     ! "!--" and "!++" is ignored.</div><div class='del'>-#     !++</div><div class='del'>-#     !</div><div class='del'>-#     module hogehoge</div><div class='del'>-#       !</div><div class='del'>-#       ! Comment blocks for the modules (or the programs).</div><div class='del'>-#       !</div><div class='del'>-#</div><div class='del'>-#       private</div><div class='del'>-#</div><div class='del'>-#       logical            :: a     ! a private variable</div><div class='del'>-#       real, public       :: b     ! a public variable</div><div class='del'>-#       integer, parameter :: c = 0 ! a public constant</div><div class='del'>-#</div><div class='del'>-#       public :: c</div><div class='del'>-#       public :: MULTI_ARRAY</div><div class='del'>-#       public :: hoge, foo</div><div class='del'>-#</div><div class='del'>-#       type MULTI_ARRAY</div><div class='del'>-#         !</div><div class='del'>-#         ! Comment blocks for the derived-types.</div><div class='del'>-#         !</div><div class='del'>-#         real, pointer :: var(:) =&gt;null() ! Comments block for the variables.</div><div class='del'>-#         integer       :: num = 0</div><div class='del'>-#       end type MULTI_ARRAY</div><div class='del'>-#</div><div class='del'>-#     contains</div><div class='del'>-#</div><div class='del'>-#       subroutine hoge( in,   &amp;   ! Comment blocks between continuation lines are ignored.</div><div class='del'>-#           &amp;            out )</div><div class='del'>-#         !</div><div class='del'>-#         ! Comment blocks for the subroutines or functions</div><div class='del'>-#         !</div><div class='del'>-#         character(*),intent(in):: in ! Comment blocks for the arguments.</div><div class='del'>-#         character(*),intent(out),allocatable,target  :: in</div><div class='del'>-#                                      ! Comment blocks can be</div><div class='del'>-#                                      ! written under Fortran statements.</div><div class='del'>-#</div><div class='del'>-#         character(32) :: file ! This comment parsed as a variable in below NAMELIST.</div><div class='del'>-#         integer       :: id</div><div class='del'>-#</div><div class='del'>-#         namelist /varinfo_nml/ file, id</div><div class='del'>-#                 !</div><div class='del'>-#                 ! Comment blocks for the NAMELISTs.</div><div class='del'>-#                 ! Information about variables are described above.</div><div class='del'>-#                 !</div><div class='del'>-#</div><div class='del'>-#       ....</div><div class='del'>-#</div><div class='del'>-#       end subroutine hoge</div><div class='del'>-#</div><div class='del'>-#       integer function foo( in )</div><div class='del'>-#         !</div><div class='del'>-#         ! This part is considered as comment block.</div><div class='del'>-#</div><div class='del'>-#         ! Comment blocks under blank lines are ignored.</div><div class='del'>-#         !</div><div class='del'>-#         integer, intent(in):: inA ! This part is considered as comment block.</div><div class='del'>-#</div><div class='del'>-#                                   ! This part is ignored.</div><div class='del'>-#</div><div class='del'>-#       end function foo</div><div class='del'>-#</div><div class='del'>-#       subroutine hide( in,   &amp;</div><div class='del'>-#         &amp;              out )      !:nodoc:</div><div class='del'>-#         !</div><div class='del'>-#         ! If "!:nodoc:" is described at end-of-line in subroutine</div><div class='del'>-#         ! statement as above, the subroutine is ignored.</div><div class='del'>-#         ! This assignment can be used to modules, subroutines,</div><div class='del'>-#         ! functions, variables, constants, derived-types,</div><div class='del'>-#         ! defined operators, defined assignments,</div><div class='del'>-#         ! list of imported modules ("use" statement).</div><div class='del'>-#         !</div><div class='del'>-#</div><div class='del'>-#       ....</div><div class='del'>-#</div><div class='del'>-#       end subroutine hide</div><div class='del'>-#</div><div class='del'>-#     end module hogehoge</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require "rdoc/code_objects"</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-  class Token</div><div class='del'>-</div><div class='del'>-    NO_TEXT = "??".freeze</div><div class='del'>-</div><div class='del'>-    def initialize(line_no, char_no)</div><div class='del'>-      @line_no = line_no</div><div class='del'>-      @char_no = char_no</div><div class='del'>-      @text    = NO_TEXT</div><div class='del'>-    end</div><div class='del'>-    # Because we're used in contexts that expect to return a token,</div><div class='del'>-    # we set the text string and then return ourselves</div><div class='del'>-    def set_text(text)</div><div class='del'>-      @text = text</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :line_no, :char_no, :text</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # See rdoc/parsers/parse_f95.rb</div><div class='del'>-</div><div class='del'>-  class Fortran95parser</div><div class='del'>-</div><div class='del'>-    extend ParserFactory</div><div class='del'>-    parse_files_matching(/\.((f|F)9(0|5)|F)$/)</div><div class='del'>-</div><div class='del'>-    @@external_aliases = []</div><div class='del'>-    @@public_methods   = []</div><div class='del'>-</div><div class='del'>-    # "false":: Comments are below source code</div><div class='del'>-    # "true" :: Comments are upper source code</div><div class='del'>-    COMMENTS_ARE_UPPER  = false</div><div class='del'>-</div><div class='del'>-    # Internal alias message</div><div class='del'>-    INTERNAL_ALIAS_MES = "Alias for"</div><div class='del'>-</div><div class='del'>-    # External alias message</div><div class='del'>-    EXTERNAL_ALIAS_MES = "The entity is"</div><div class='del'>-</div><div class='del'>-    # prepare to parse a Fortran 95 file</div><div class='del'>-    def initialize(top_level, file_name, body, options, stats)</div><div class='del'>-      @body = body</div><div class='del'>-      @stats = stats</div><div class='del'>-      @file_name  = file_name</div><div class='del'>-      @options = options</div><div class='del'>-      @top_level = top_level</div><div class='del'>-      @progress = $stderr unless options.quiet</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # define code constructs</div><div class='del'>-    def scan</div><div class='del'>-</div><div class='del'>-      # remove private comment</div><div class='del'>-      remaining_code = remove_private_comments(@body)</div><div class='del'>-</div><div class='del'>-      # continuation lines are united to one line</div><div class='del'>-      remaining_code = united_to_one_line(remaining_code)</div><div class='del'>-</div><div class='del'>-      # semicolons are replaced to line feed</div><div class='del'>-      remaining_code = semicolon_to_linefeed(remaining_code)</div><div class='del'>-</div><div class='del'>-      # collect comment for file entity</div><div class='del'>-      whole_comment, remaining_code = collect_first_comment(remaining_code)</div><div class='del'>-      @top_level.comment = whole_comment</div><div class='del'>-</div><div class='del'>-      # String "remaining_code" is converted to Array "remaining_lines"</div><div class='del'>-      remaining_lines = remaining_code.split("\n")</div><div class='del'>-</div><div class='del'>-      # "module" or "program" parts are parsed (new)</div><div class='del'>-      #</div><div class='del'>-      level_depth = 0</div><div class='del'>-      block_searching_flag = nil</div><div class='del'>-      block_searching_lines = []</div><div class='del'>-      pre_comment = []</div><div class='del'>-      module_program_trailing = ""</div><div class='del'>-      module_program_name = ""</div><div class='del'>-      other_block_level_depth = 0</div><div class='del'>-      other_block_searching_flag = nil</div><div class='del'>-      remaining_lines.collect!{|line|</div><div class='del'>-        if !block_searching_flag &amp;&amp; !other_block_searching_flag</div><div class='del'>-          if line =~ /^\s*?module\s+(\w+)\s*?(!.*?)?$/i</div><div class='del'>-            block_searching_flag = :module</div><div class='del'>-            block_searching_lines &lt;&lt; line</div><div class='del'>-            module_program_name = $1</div><div class='del'>-            module_program_trailing = find_comments($2)</div><div class='del'>-            next false</div><div class='del'>-          elsif line =~ /^\s*?program\s+(\w+)\s*?(!.*?)?$/i ||</div><div class='del'>-                 line =~ /^\s*?\w/ &amp;&amp; !block_start?(line)</div><div class='del'>-            block_searching_flag = :program</div><div class='del'>-            block_searching_lines &lt;&lt; line</div><div class='del'>-            module_program_name = $1 || ""</div><div class='del'>-            module_program_trailing = find_comments($2)</div><div class='del'>-            next false</div><div class='del'>-</div><div class='del'>-          elsif block_start?(line)</div><div class='del'>-            other_block_searching_flag = true</div><div class='del'>-            next line</div><div class='del'>-</div><div class='del'>-          elsif line =~ /^\s*?!\s?(.*)/</div><div class='del'>-            pre_comment &lt;&lt; line</div><div class='del'>-            next line</div><div class='del'>-          else</div><div class='del'>-            pre_comment = []</div><div class='del'>-            next line</div><div class='del'>-          end</div><div class='del'>-        elsif other_block_searching_flag</div><div class='del'>-          other_block_level_depth += 1 if block_start?(line)</div><div class='del'>-          other_block_level_depth -= 1 if block_end?(line)</div><div class='del'>-          if other_block_level_depth &lt; 0</div><div class='del'>-            other_block_level_depth = 0</div><div class='del'>-            other_block_searching_flag = nil</div><div class='del'>-          end</div><div class='del'>-          next line</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        block_searching_lines &lt;&lt; line</div><div class='del'>-        level_depth += 1 if block_start?(line)</div><div class='del'>-        level_depth -= 1 if block_end?(line)</div><div class='del'>-        if level_depth &gt;= 0</div><div class='del'>-          next false</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # "module_program_code" is formatted.</div><div class='del'>-        # ":nodoc:" flag is checked.</div><div class='del'>-        #</div><div class='del'>-        module_program_code = block_searching_lines.join("\n")</div><div class='del'>-        module_program_code = remove_empty_head_lines(module_program_code)</div><div class='del'>-        if module_program_trailing =~ /^:nodoc:/</div><div class='del'>-          # next loop to search next block</div><div class='del'>-          level_depth = 0</div><div class='del'>-          block_searching_flag = false</div><div class='del'>-          block_searching_lines = []</div><div class='del'>-          pre_comment = []</div><div class='del'>-          next false</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # NormalClass is created, and added to @top_level</div><div class='del'>-        #</div><div class='del'>-        if block_searching_flag == :module</div><div class='del'>-          module_name = module_program_name</div><div class='del'>-          module_code = module_program_code</div><div class='del'>-          module_trailing = module_program_trailing</div><div class='del'>-          progress "m"</div><div class='del'>-          @stats.num_modules += 1</div><div class='del'>-          f9x_module = @top_level.add_module NormalClass, module_name</div><div class='del'>-          f9x_module.record_location @top_level</div><div class='del'>-</div><div class='del'>-          f9x_comment = COMMENTS_ARE_UPPER ? </div><div class='del'>-            find_comments(pre_comment.join("\n"))  + "\n" + module_trailing :</div><div class='del'>-              module_trailing + "\n" + find_comments(module_code.sub(/^.*$\n/i, ''))</div><div class='del'>-          f9x_module.comment = f9x_comment</div><div class='del'>-          parse_program_or_module(f9x_module, module_code)</div><div class='del'>-</div><div class='del'>-          TopLevel.all_files.each do |name, toplevel|</div><div class='del'>-            if toplevel.include_includes?(module_name, @options.ignore_case)</div><div class='del'>-              if !toplevel.include_requires?(@file_name, @options.ignore_case)</div><div class='del'>-                toplevel.add_require(Require.new(@file_name, ""))</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            toplevel.each_classmodule{|m|</div><div class='del'>-              if m.include_includes?(module_name, @options.ignore_case)</div><div class='del'>-                if !m.include_requires?(@file_name, @options.ignore_case)</div><div class='del'>-                  m.add_require(Require.new(@file_name, ""))</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        elsif block_searching_flag == :program</div><div class='del'>-          program_name = module_program_name</div><div class='del'>-          program_code = module_program_code</div><div class='del'>-          program_trailing = module_program_trailing</div><div class='del'>-          progress "p"</div><div class='del'>-          program_comment = COMMENTS_ARE_UPPER ? </div><div class='del'>-            find_comments(pre_comment.join("\n")) + "\n" + program_trailing : </div><div class='del'>-              program_trailing + "\n" + find_comments(program_code.sub(/^.*$\n/i, ''))</div><div class='del'>-          program_comment = "\n\n= &lt;i&gt;Program&lt;/i&gt; &lt;tt&gt;#{program_name}&lt;/tt&gt;\n\n" \</div><div class='del'>-                            + program_comment</div><div class='del'>-          @top_level.comment &lt;&lt; program_comment</div><div class='del'>-          parse_program_or_module(@top_level, program_code, :private)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # next loop to search next block</div><div class='del'>-        level_depth = 0</div><div class='del'>-        block_searching_flag = false</div><div class='del'>-        block_searching_lines = []</div><div class='del'>-        pre_comment = []</div><div class='del'>-        next false</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      remaining_lines.delete_if{ |line|</div><div class='del'>-        line == false</div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-      # External subprograms and functions are parsed</div><div class='del'>-      #</div><div class='del'>-      parse_program_or_module(@top_level, remaining_lines.join("\n"),</div><div class='del'>-                              :public, true)</div><div class='del'>-</div><div class='del'>-      @top_level</div><div class='del'>-    end  # End of scan</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def parse_program_or_module(container, code,</div><div class='del'>-                                visibility=:public, external=nil)</div><div class='del'>-      return unless container</div><div class='del'>-      return unless code</div><div class='del'>-      remaining_lines = code.split("\n")</div><div class='del'>-      remaining_code = "#{code}"</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Parse variables before "contains" in module</div><div class='del'>-      #</div><div class='del'>-      level_depth = 0</div><div class='del'>-      before_contains_lines = []</div><div class='del'>-      before_contains_code = nil</div><div class='del'>-      before_contains_flag = nil</div><div class='del'>-      remaining_lines.each{ |line|</div><div class='del'>-        if !before_contains_flag</div><div class='del'>-          if line =~ /^\s*?module\s+\w+\s*?(!.*?)?$/i</div><div class='del'>-            before_contains_flag = true</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          break if line =~ /^\s*?contains\s*?(!.*?)?$/i</div><div class='del'>-          level_depth += 1 if block_start?(line)</div><div class='del'>-          level_depth -= 1 if block_end?(line)</div><div class='del'>-          break if level_depth &lt; 0</div><div class='del'>-          before_contains_lines &lt;&lt; line</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      before_contains_code = before_contains_lines.join("\n")</div><div class='del'>-      if before_contains_code</div><div class='del'>-        before_contains_code.gsub!(/^\s*?interface\s+.*?\s+end\s+interface.*?$/im, "")</div><div class='del'>-        before_contains_code.gsub!(/^\s*?type[\s\,]+.*?\s+end\s+type.*?$/im, "")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Parse global "use"</div><div class='del'>-      #</div><div class='del'>-      use_check_code = "#{before_contains_code}"</div><div class='del'>-      cascaded_modules_list = []</div><div class='del'>-      while use_check_code =~ /^\s*?use\s+(\w+)(.*?)(!.*?)?$/i</div><div class='del'>-        use_check_code = $~.pre_match</div><div class='del'>-        use_check_code &lt;&lt; $~.post_match</div><div class='del'>-        used_mod_name = $1.strip.chomp</div><div class='del'>-        used_list = $2 || ""</div><div class='del'>-        used_trailing = $3 || ""</div><div class='del'>-        next if used_trailing =~ /!:nodoc:/</div><div class='del'>-        if !container.include_includes?(used_mod_name, @options.ignore_case)</div><div class='del'>-          progress "."</div><div class='del'>-          container.add_include Include.new(used_mod_name, "")</div><div class='del'>-        end</div><div class='del'>-        if ! (used_list =~ /\,\s*?only\s*?:/i )</div><div class='del'>-          cascaded_modules_list &lt;&lt; "\#" + used_mod_name</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Parse public and private, and store information.</div><div class='del'>-      # This information is used when "add_method" and</div><div class='del'>-      # "set_visibility_for" are called.</div><div class='del'>-      #</div><div class='del'>-      visibility_default, visibility_info = </div><div class='del'>-                parse_visibility(remaining_lines.join("\n"), visibility, container)</div><div class='del'>-      @@public_methods.concat visibility_info</div><div class='del'>-      if visibility_default == :public</div><div class='del'>-        if !cascaded_modules_list.empty?</div><div class='del'>-          cascaded_modules = </div><div class='del'>-            Attr.new("Cascaded Modules",</div><div class='del'>-                     "Imported modules all of whose components are published again",</div><div class='del'>-                     "",</div><div class='del'>-                     cascaded_modules_list.join(", "))</div><div class='del'>-          container.add_attribute(cascaded_modules)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Check rename elements</div><div class='del'>-      #</div><div class='del'>-      use_check_code = "#{before_contains_code}"</div><div class='del'>-      while use_check_code =~ /^\s*?use\s+(\w+)\s*?\,(.+)$/i</div><div class='del'>-        use_check_code = $~.pre_match</div><div class='del'>-        use_check_code &lt;&lt; $~.post_match</div><div class='del'>-        used_mod_name = $1.strip.chomp</div><div class='del'>-        used_elements = $2.sub(/\s*?only\s*?:\s*?/i, '')</div><div class='del'>-        used_elements.split(",").each{ |used|</div><div class='del'>-          if /\s*?(\w+)\s*?=&gt;\s*?(\w+)\s*?/ =~ used</div><div class='del'>-            local = $1</div><div class='del'>-            org = $2</div><div class='del'>-            @@public_methods.collect!{ |pub_meth|</div><div class='del'>-              if local == pub_meth["name"] ||</div><div class='del'>-                  local.upcase == pub_meth["name"].upcase &amp;&amp;</div><div class='del'>-                  @options.ignore_case</div><div class='del'>-                pub_meth["name"] = org</div><div class='del'>-                pub_meth["local_name"] = local</div><div class='del'>-              end</div><div class='del'>-              pub_meth</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'>-      #</div><div class='del'>-      # Parse private "use"</div><div class='del'>-      #</div><div class='del'>-      use_check_code = remaining_lines.join("\n")</div><div class='del'>-      while use_check_code =~ /^\s*?use\s+(\w+)(.*?)(!.*?)?$/i</div><div class='del'>-        use_check_code = $~.pre_match</div><div class='del'>-        use_check_code &lt;&lt; $~.post_match</div><div class='del'>-        used_mod_name = $1.strip.chomp</div><div class='del'>-        used_trailing = $3 || ""</div><div class='del'>-        next if used_trailing =~ /!:nodoc:/</div><div class='del'>-        if !container.include_includes?(used_mod_name, @options.ignore_case)</div><div class='del'>-          progress "."</div><div class='del'>-          container.add_include Include.new(used_mod_name, "")</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      container.each_includes{ |inc|</div><div class='del'>-        TopLevel.all_files.each do |name, toplevel|</div><div class='del'>-          indicated_mod = toplevel.find_symbol(inc.name,</div><div class='del'>-                                               nil, @options.ignore_case)</div><div class='del'>-          if indicated_mod</div><div class='del'>-            indicated_name = indicated_mod.parent.file_relative_name</div><div class='del'>-            if !container.include_requires?(indicated_name, @options.ignore_case)</div><div class='del'>-              container.add_require(Require.new(indicated_name, ""))</div><div class='del'>-            end</div><div class='del'>-            break</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'>-      # Parse derived-types definitions</div><div class='del'>-      #</div><div class='del'>-      derived_types_comment = ""</div><div class='del'>-      remaining_code = remaining_lines.join("\n")</div><div class='del'>-      while remaining_code =~ /^\s*?</div><div class='del'>-                                    type[\s\,]+(public|private)?\s*?(::)?\s*?</div><div class='del'>-                                    (\w+)\s*?(!.*?)?$</div><div class='del'>-                                    (.*?)</div><div class='del'>-                                    ^\s*?end\s+type.*?$</div><div class='del'>-                              /imx</div><div class='del'>-        remaining_code = $~.pre_match</div><div class='del'>-        remaining_code &lt;&lt; $~.post_match</div><div class='del'>-        typename = $3.chomp.strip</div><div class='del'>-        type_elements = $5 || ""</div><div class='del'>-        type_code = remove_empty_head_lines($&amp;)</div><div class='del'>-        type_trailing = find_comments($4)</div><div class='del'>-        next if type_trailing =~ /^:nodoc:/</div><div class='del'>-        type_visibility = $1</div><div class='del'>-        type_comment = COMMENTS_ARE_UPPER ? </div><div class='del'>-          find_comments($~.pre_match) + "\n" + type_trailing :</div><div class='del'>-            type_trailing + "\n" + find_comments(type_code.sub(/^.*$\n/i, ''))</div><div class='del'>-        type_element_visibility_public = true</div><div class='del'>-        type_code.split("\n").each{ |line|</div><div class='del'>-          if /^\s*?private\s*?$/ =~ line</div><div class='del'>-            type_element_visibility_public = nil</div><div class='del'>-            break</div><div class='del'>-          end</div><div class='del'>-        } if type_code</div><div class='del'>-</div><div class='del'>-        args_comment = ""</div><div class='del'>-        type_args_info = nil</div><div class='del'>-</div><div class='del'>-        if @options.show_all</div><div class='del'>-          args_comment = find_arguments(nil, type_code, true)</div><div class='del'>-        else</div><div class='del'>-          type_public_args_list = []</div><div class='del'>-          type_args_info = definition_info(type_code)</div><div class='del'>-          type_args_info.each{ |arg|</div><div class='del'>-            arg_is_public = type_element_visibility_public</div><div class='del'>-            arg_is_public = true if arg.include_attr?("public")</div><div class='del'>-            arg_is_public = nil if arg.include_attr?("private")</div><div class='del'>-            type_public_args_list &lt;&lt; arg.varname if arg_is_public</div><div class='del'>-          }</div><div class='del'>-          args_comment = find_arguments(type_public_args_list, type_code)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        type = AnyMethod.new("type #{typename}", typename)</div><div class='del'>-        type.singleton = false</div><div class='del'>-        type.params = ""</div><div class='del'>-        type.comment = "&lt;b&gt;&lt;em&gt; Derived Type &lt;/em&gt;&lt;/b&gt; :: &lt;tt&gt;&lt;/tt&gt;\n"</div><div class='del'>-        type.comment &lt;&lt; args_comment if args_comment</div><div class='del'>-        type.comment &lt;&lt; type_comment if type_comment</div><div class='del'>-        progress "t"</div><div class='del'>-        @stats.num_methods += 1</div><div class='del'>-        container.add_method type</div><div class='del'>-</div><div class='del'>-        set_visibility(container, typename, visibility_default, @@public_methods)</div><div class='del'>-</div><div class='del'>-        if type_visibility</div><div class='del'>-          type_visibility.gsub!(/\s/,'')</div><div class='del'>-          type_visibility.gsub!(/\,/,'')</div><div class='del'>-          type_visibility.gsub!(/:/,'')</div><div class='del'>-          type_visibility.downcase!</div><div class='del'>-          if type_visibility == "public"</div><div class='del'>-            container.set_visibility_for([typename], :public)</div><div class='del'>-          elsif type_visibility == "private"</div><div class='del'>-            container.set_visibility_for([typename], :private)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        check_public_methods(type, container.name)</div><div class='del'>-</div><div class='del'>-        if @options.show_all</div><div class='del'>-          derived_types_comment &lt;&lt; ", " unless derived_types_comment.empty?</div><div class='del'>-          derived_types_comment &lt;&lt; typename</div><div class='del'>-        else</div><div class='del'>-          if type.visibility == :public</div><div class='del'>-          derived_types_comment &lt;&lt; ", " unless derived_types_comment.empty?</div><div class='del'>-          derived_types_comment &lt;&lt; typename</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'>-      if !derived_types_comment.empty?</div><div class='del'>-        derived_types_table = </div><div class='del'>-          Attr.new("Derived Types", "Derived_Types", "", </div><div class='del'>-                   derived_types_comment)</div><div class='del'>-        container.add_attribute(derived_types_table)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # move interface scope</div><div class='del'>-      #</div><div class='del'>-      interface_code = ""</div><div class='del'>-      while remaining_code =~ /^\s*?</div><div class='del'>-                                   interface(</div><div class='del'>-                                              \s+\w+                      |</div><div class='del'>-                                              \s+operator\s*?\(.*?\)       |</div><div class='del'>-                                              \s+assignment\s*?\(\s*?=\s*?\)</div><div class='del'>-                                            )?\s*?$</div><div class='del'>-                                   (.*?)</div><div class='del'>-                                   ^\s*?end\s+interface.*?$</div><div class='del'>-                              /imx</div><div class='del'>-        interface_code &lt;&lt; remove_empty_head_lines($&amp;) + "\n"</div><div class='del'>-        remaining_code = $~.pre_match</div><div class='del'>-        remaining_code &lt;&lt; $~.post_match</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Parse global constants or variables in modules</div><div class='del'>-      #</div><div class='del'>-      const_var_defs = definition_info(before_contains_code)</div><div class='del'>-      const_var_defs.each{|defitem|</div><div class='del'>-        next if defitem.nodoc</div><div class='del'>-        const_or_var_type = "Variable"</div><div class='del'>-        const_or_var_progress = "v"</div><div class='del'>-        if defitem.include_attr?("parameter")</div><div class='del'>-          const_or_var_type = "Constant"</div><div class='del'>-          const_or_var_progress = "c"</div><div class='del'>-        end</div><div class='del'>-        const_or_var = AnyMethod.new(const_or_var_type, defitem.varname)</div><div class='del'>-        const_or_var.singleton = false</div><div class='del'>-        const_or_var.params = ""</div><div class='del'>-        self_comment = find_arguments([defitem.varname], before_contains_code)</div><div class='del'>-        const_or_var.comment = "&lt;b&gt;&lt;em&gt;" + const_or_var_type + "&lt;/em&gt;&lt;/b&gt; :: &lt;tt&gt;&lt;/tt&gt;\n"</div><div class='del'>-        const_or_var.comment &lt;&lt; self_comment if self_comment</div><div class='del'>-        progress const_or_var_progress</div><div class='del'>-        @stats.num_methods += 1</div><div class='del'>-        container.add_method const_or_var</div><div class='del'>-</div><div class='del'>-        set_visibility(container, defitem.varname, visibility_default, @@public_methods)</div><div class='del'>-</div><div class='del'>-        if defitem.include_attr?("public")</div><div class='del'>-          container.set_visibility_for([defitem.varname], :public)</div><div class='del'>-        elsif defitem.include_attr?("private")</div><div class='del'>-          container.set_visibility_for([defitem.varname], :private)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        check_public_methods(const_or_var, container.name)</div><div class='del'>-</div><div class='del'>-      } if const_var_defs</div><div class='del'>-</div><div class='del'>-      remaining_lines = remaining_code.split("\n")</div><div class='del'>-</div><div class='del'>-      # "subroutine" or "function" parts are parsed (new)</div><div class='del'>-      #</div><div class='del'>-      level_depth = 0</div><div class='del'>-      block_searching_flag = nil</div><div class='del'>-      block_searching_lines = []</div><div class='del'>-      pre_comment = []</div><div class='del'>-      procedure_trailing = ""</div><div class='del'>-      procedure_name = ""</div><div class='del'>-      procedure_params = ""</div><div class='del'>-      procedure_prefix = ""</div><div class='del'>-      procedure_result_arg = ""</div><div class='del'>-      procedure_type = ""</div><div class='del'>-      contains_lines = []</div><div class='del'>-      contains_flag = nil</div><div class='del'>-      remaining_lines.collect!{|line|</div><div class='del'>-        if !block_searching_flag</div><div class='del'>-          # subroutine</div><div class='del'>-          if line =~ /^\s*?</div><div class='del'>-                           (recursive|pure|elemental)?\s*?</div><div class='del'>-                           subroutine\s+(\w+)\s*?(\(.*?\))?\s*?(!.*?)?$</div><div class='del'>-                     /ix</div><div class='del'>-            block_searching_flag = :subroutine</div><div class='del'>-            block_searching_lines &lt;&lt; line</div><div class='del'>-</div><div class='del'>-            procedure_name = $2.chomp.strip</div><div class='del'>-            procedure_params = $3 || ""</div><div class='del'>-            procedure_prefix = $1 || ""</div><div class='del'>-            procedure_trailing = $4 || "!"</div><div class='del'>-            next false</div><div class='del'>-</div><div class='del'>-          # function</div><div class='del'>-          elsif line =~ /^\s*?</div><div class='del'>-                         (recursive|pure|elemental)?\s*?</div><div class='del'>-                         (</div><div class='del'>-                             character\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                           | type\s*?\([\w\s]+?\)\s+</div><div class='del'>-                           | integer\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                           | real\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                           | double\s+precision\s+</div><div class='del'>-                           | logical\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                           | complex\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                         )?</div><div class='del'>-                         function\s+(\w+)\s*?</div><div class='del'>-                         (\(.*?\))?(\s+result\((.*?)\))?\s*?(!.*?)?$</div><div class='del'>-                        /ix</div><div class='del'>-            block_searching_flag = :function</div><div class='del'>-            block_searching_lines &lt;&lt; line</div><div class='del'>-</div><div class='del'>-            procedure_prefix = $1 || ""</div><div class='del'>-            procedure_type = $2 ? $2.chomp.strip : nil</div><div class='del'>-            procedure_name = $8.chomp.strip</div><div class='del'>-            procedure_params = $9 || ""</div><div class='del'>-            procedure_result_arg = $11 ? $11.chomp.strip : procedure_name</div><div class='del'>-            procedure_trailing = $12 || "!"</div><div class='del'>-            next false</div><div class='del'>-          elsif line =~ /^\s*?!\s?(.*)/</div><div class='del'>-            pre_comment &lt;&lt; line</div><div class='del'>-            next line</div><div class='del'>-          else</div><div class='del'>-            pre_comment = []</div><div class='del'>-            next line</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        contains_flag = true if line =~ /^\s*?contains\s*?(!.*?)?$/</div><div class='del'>-        block_searching_lines &lt;&lt; line</div><div class='del'>-        contains_lines &lt;&lt; line if contains_flag</div><div class='del'>-</div><div class='del'>-        level_depth += 1 if block_start?(line)</div><div class='del'>-        level_depth -= 1 if block_end?(line)</div><div class='del'>-        if level_depth &gt;= 0</div><div class='del'>-          next false</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # "procedure_code" is formatted.</div><div class='del'>-        # ":nodoc:" flag is checked.</div><div class='del'>-        #</div><div class='del'>-        procedure_code = block_searching_lines.join("\n")</div><div class='del'>-        procedure_code = remove_empty_head_lines(procedure_code)</div><div class='del'>-        if procedure_trailing =~ /^!:nodoc:/</div><div class='del'>-          # next loop to search next block</div><div class='del'>-          level_depth = 0</div><div class='del'>-          block_searching_flag = nil</div><div class='del'>-          block_searching_lines = []</div><div class='del'>-          pre_comment = []</div><div class='del'>-          procedure_trailing = ""</div><div class='del'>-          procedure_name = ""</div><div class='del'>-          procedure_params = ""</div><div class='del'>-          procedure_prefix = ""</div><div class='del'>-          procedure_result_arg = ""</div><div class='del'>-          procedure_type = ""</div><div class='del'>-          contains_lines = []</div><div class='del'>-          contains_flag = nil</div><div class='del'>-          next false</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # AnyMethod is created, and added to container</div><div class='del'>-        #</div><div class='del'>-        subroutine_function = nil</div><div class='del'>-        if block_searching_flag == :subroutine</div><div class='del'>-          subroutine_prefix   = procedure_prefix</div><div class='del'>-          subroutine_name     = procedure_name</div><div class='del'>-          subroutine_params   = procedure_params</div><div class='del'>-          subroutine_trailing = procedure_trailing</div><div class='del'>-          subroutine_code     = procedure_code</div><div class='del'>-</div><div class='del'>-          subroutine_comment = COMMENTS_ARE_UPPER ? </div><div class='del'>-            pre_comment.join("\n") + "\n" + subroutine_trailing : </div><div class='del'>-              subroutine_trailing + "\n" + subroutine_code.sub(/^.*$\n/i, '')</div><div class='del'>-          subroutine = AnyMethod.new("subroutine", subroutine_name)</div><div class='del'>-          parse_subprogram(subroutine, subroutine_params,</div><div class='del'>-                           subroutine_comment, subroutine_code,</div><div class='del'>-                           before_contains_code, nil, subroutine_prefix)</div><div class='del'>-          progress "s"</div><div class='del'>-          @stats.num_methods += 1</div><div class='del'>-          container.add_method subroutine</div><div class='del'>-          subroutine_function = subroutine</div><div class='del'>-</div><div class='del'>-        elsif block_searching_flag == :function</div><div class='del'>-          function_prefix     = procedure_prefix</div><div class='del'>-          function_type       = procedure_type</div><div class='del'>-          function_name       = procedure_name</div><div class='del'>-          function_params_org = procedure_params</div><div class='del'>-          function_result_arg = procedure_result_arg</div><div class='del'>-          function_trailing   = procedure_trailing</div><div class='del'>-          function_code_org   = procedure_code</div><div class='del'>-</div><div class='del'>-          function_comment = COMMENTS_ARE_UPPER ?</div><div class='del'>-            pre_comment.join("\n") + "\n" + function_trailing :</div><div class='del'>-              function_trailing + "\n " + function_code_org.sub(/^.*$\n/i, '')</div><div class='del'>-</div><div class='del'>-          function_code = "#{function_code_org}"</div><div class='del'>-          if function_type</div><div class='del'>-            function_code &lt;&lt; "\n" + function_type + " :: " + function_result_arg</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          function_params =</div><div class='del'>-            function_params_org.sub(/^\(/, "\(#{function_result_arg}, ")</div><div class='del'>-</div><div class='del'>-          function = AnyMethod.new("function", function_name)</div><div class='del'>-          parse_subprogram(function, function_params,</div><div class='del'>-                           function_comment, function_code,</div><div class='del'>-                           before_contains_code, true, function_prefix)</div><div class='del'>-</div><div class='del'>-          # Specific modification due to function</div><div class='del'>-          function.params.sub!(/\(\s*?#{function_result_arg}\s*?,\s*?/, "\( ")</div><div class='del'>-          function.params &lt;&lt; " result(" + function_result_arg + ")"</div><div class='del'>-          function.start_collecting_tokens</div><div class='del'>-          function.add_token Token.new(1,1).set_text(function_code_org)</div><div class='del'>-</div><div class='del'>-          progress "f"</div><div class='del'>-          @stats.num_methods += 1</div><div class='del'>-          container.add_method function</div><div class='del'>-          subroutine_function = function</div><div class='del'>-</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # The visibility of procedure is specified</div><div class='del'>-        #</div><div class='del'>-        set_visibility(container, procedure_name, </div><div class='del'>-                       visibility_default, @@public_methods)</div><div class='del'>-</div><div class='del'>-        # The alias for this procedure from external modules</div><div class='del'>-        #</div><div class='del'>-        check_external_aliases(procedure_name,</div><div class='del'>-                               subroutine_function.params,</div><div class='del'>-                               subroutine_function.comment, subroutine_function) if external</div><div class='del'>-        check_public_methods(subroutine_function, container.name)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-        # contains_lines are parsed as private procedures</div><div class='del'>-        if contains_flag</div><div class='del'>-          parse_program_or_module(container,</div><div class='del'>-                                  contains_lines.join("\n"), :private)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # next loop to search next block</div><div class='del'>-        level_depth = 0</div><div class='del'>-        block_searching_flag = nil</div><div class='del'>-        block_searching_lines = []</div><div class='del'>-        pre_comment = []</div><div class='del'>-        procedure_trailing = ""</div><div class='del'>-        procedure_name = ""</div><div class='del'>-        procedure_params = ""</div><div class='del'>-        procedure_prefix = ""</div><div class='del'>-        procedure_result_arg = ""</div><div class='del'>-        contains_lines = []</div><div class='del'>-        contains_flag = nil</div><div class='del'>-        next false</div><div class='del'>-      } # End of remaining_lines.collect!{|line|</div><div class='del'>-</div><div class='del'>-      # Array remains_lines is converted to String remains_code again</div><div class='del'>-      #</div><div class='del'>-      remaining_code = remaining_lines.join("\n")</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Parse interface</div><div class='del'>-      #</div><div class='del'>-      interface_scope = false</div><div class='del'>-      generic_name = ""</div><div class='del'>-      interface_code.split("\n").each{ |line|</div><div class='del'>-        if /^\s*?</div><div class='del'>-                 interface(</div><div class='del'>-                            \s+\w+|</div><div class='del'>-                            \s+operator\s*?\(.*?\)|</div><div class='del'>-                            \s+assignment\s*?\(\s*?=\s*?\)</div><div class='del'>-                          )?</div><div class='del'>-                 \s*?(!.*?)?$</div><div class='del'>-           /ix =~ line</div><div class='del'>-          generic_name = $1 ? $1.strip.chomp : nil</div><div class='del'>-          interface_trailing = $2 || "!"</div><div class='del'>-          interface_scope = true</div><div class='del'>-          interface_scope = false if interface_trailing =~ /!:nodoc:/</div><div class='del'>-#          if generic_name =~ /operator\s*?\((.*?)\)/i</div><div class='del'>-#            operator_name = $1</div><div class='del'>-#            if operator_name &amp;&amp; !operator_name.empty?</div><div class='del'>-#              generic_name = "#{operator_name}"</div><div class='del'>-#            end</div><div class='del'>-#          end</div><div class='del'>-#          if generic_name =~ /assignment\s*?\((.*?)\)/i</div><div class='del'>-#            assignment_name = $1</div><div class='del'>-#            if assignment_name &amp;&amp; !assignment_name.empty?</div><div class='del'>-#              generic_name = "#{assignment_name}"</div><div class='del'>-#            end</div><div class='del'>-#          end</div><div class='del'>-        end</div><div class='del'>-        if /^\s*?end\s+interface/i =~ line</div><div class='del'>-          interface_scope = false</div><div class='del'>-          generic_name = nil</div><div class='del'>-        end</div><div class='del'>-        # internal alias</div><div class='del'>-        if interface_scope &amp;&amp; /^\s*?module\s+procedure\s+(.*?)(!.*?)?$/i =~ line</div><div class='del'>-          procedures = $1.strip.chomp</div><div class='del'>-          procedures_trailing = $2 || "!"</div><div class='del'>-          next if procedures_trailing =~ /!:nodoc:/</div><div class='del'>-          procedures.split(",").each{ |proc|</div><div class='del'>-            proc.strip!</div><div class='del'>-            proc.chomp!</div><div class='del'>-            next if generic_name == proc || !generic_name</div><div class='del'>-            old_meth = container.find_symbol(proc, nil, @options.ignore_case)</div><div class='del'>-            next if !old_meth</div><div class='del'>-            nolink = old_meth.visibility == :private ? true : nil</div><div class='del'>-            nolink = nil if @options.show_all</div><div class='del'>-            new_meth = </div><div class='del'>-               initialize_external_method(generic_name, proc, </div><div class='del'>-                                          old_meth.params, nil, </div><div class='del'>-                                          old_meth.comment, </div><div class='del'>-                                          old_meth.clone.token_stream[0].text, </div><div class='del'>-                                          true, nolink)</div><div class='del'>-            new_meth.singleton = old_meth.singleton</div><div class='del'>-</div><div class='del'>-            progress "i"</div><div class='del'>-            @stats.num_methods += 1</div><div class='del'>-            container.add_method new_meth</div><div class='del'>-</div><div class='del'>-            set_visibility(container, generic_name, visibility_default, @@public_methods)</div><div class='del'>-</div><div class='del'>-            check_public_methods(new_meth, container.name)</div><div class='del'>-</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # external aliases</div><div class='del'>-        if interface_scope</div><div class='del'>-          # subroutine</div><div class='del'>-          proc = nil</div><div class='del'>-          params = nil</div><div class='del'>-          procedures_trailing = nil</div><div class='del'>-          if line =~ /^\s*?</div><div class='del'>-                           (recursive|pure|elemental)?\s*?</div><div class='del'>-                           subroutine\s+(\w+)\s*?(\(.*?\))?\s*?(!.*?)?$</div><div class='del'>-                     /ix</div><div class='del'>-            proc = $2.chomp.strip</div><div class='del'>-            generic_name = proc unless generic_name</div><div class='del'>-            params = $3 || ""</div><div class='del'>-            procedures_trailing = $4 || "!"</div><div class='del'>-</div><div class='del'>-          # function</div><div class='del'>-          elsif line =~ /^\s*?</div><div class='del'>-                         (recursive|pure|elemental)?\s*?</div><div class='del'>-                         (</div><div class='del'>-                             character\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                           | type\s*?\([\w\s]+?\)\s+</div><div class='del'>-                           | integer\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                           | real\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                           | double\s+precision\s+</div><div class='del'>-                           | logical\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                           | complex\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                         )?</div><div class='del'>-                         function\s+(\w+)\s*?</div><div class='del'>-                         (\(.*?\))?(\s+result\((.*?)\))?\s*?(!.*?)?$</div><div class='del'>-                        /ix</div><div class='del'>-            proc = $8.chomp.strip</div><div class='del'>-            generic_name = proc unless generic_name</div><div class='del'>-            params = $9 || ""</div><div class='del'>-            procedures_trailing = $12 || "!"</div><div class='del'>-          else</div><div class='del'>-            next</div><div class='del'>-          end</div><div class='del'>-          next if procedures_trailing =~ /!:nodoc:/</div><div class='del'>-          indicated_method = nil</div><div class='del'>-          indicated_file   = nil</div><div class='del'>-          TopLevel.all_files.each do |name, toplevel|</div><div class='del'>-            indicated_method = toplevel.find_local_symbol(proc, @options.ignore_case)</div><div class='del'>-            indicated_file = name</div><div class='del'>-            break if indicated_method</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          if indicated_method</div><div class='del'>-            external_method = </div><div class='del'>-              initialize_external_method(generic_name, proc, </div><div class='del'>-                                         indicated_method.params, </div><div class='del'>-                                         indicated_file, </div><div class='del'>-                                         indicated_method.comment)</div><div class='del'>-</div><div class='del'>-            progress "e"</div><div class='del'>-            @stats.num_methods += 1</div><div class='del'>-            container.add_method external_method</div><div class='del'>-            set_visibility(container, generic_name, visibility_default, @@public_methods)</div><div class='del'>-            if !container.include_requires?(indicated_file, @options.ignore_case)</div><div class='del'>-              container.add_require(Require.new(indicated_file, ""))</div><div class='del'>-            end</div><div class='del'>-            check_public_methods(external_method, container.name)</div><div class='del'>-</div><div class='del'>-          else</div><div class='del'>-            @@external_aliases &lt;&lt; {</div><div class='del'>-              "new_name"  =&gt; generic_name,</div><div class='del'>-              "old_name"  =&gt; proc,</div><div class='del'>-              "file_or_module" =&gt; container,</div><div class='del'>-              "visibility" =&gt; find_visibility(container, generic_name, @@public_methods) || visibility_default</div><div class='del'>-            }</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      } if interface_code # End of interface_code.split("\n").each ...</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # Already imported methods are removed from @@public_methods.</div><div class='del'>-      # Remainders are assumed to be imported from other modules.</div><div class='del'>-      #</div><div class='del'>-      @@public_methods.delete_if{ |method| method["entity_is_discovered"]}</div><div class='del'>-</div><div class='del'>-      @@public_methods.each{ |pub_meth|</div><div class='del'>-        next unless pub_meth["file_or_module"].name == container.name</div><div class='del'>-        pub_meth["used_modules"].each{ |used_mod|</div><div class='del'>-          TopLevel.all_classes_and_modules.each{ |modules|</div><div class='del'>-            if modules.name == used_mod ||</div><div class='del'>-                modules.name.upcase == used_mod.upcase &amp;&amp;</div><div class='del'>-                @options.ignore_case</div><div class='del'>-              modules.method_list.each{ |meth|</div><div class='del'>-                if meth.name == pub_meth["name"] ||</div><div class='del'>-                    meth.name.upcase == pub_meth["name"].upcase &amp;&amp;</div><div class='del'>-                    @options.ignore_case</div><div class='del'>-                  new_meth = initialize_public_method(meth,</div><div class='del'>-                                                      modules.name)</div><div class='del'>-                  if pub_meth["local_name"]</div><div class='del'>-                    new_meth.name = pub_meth["local_name"]</div><div class='del'>-                  end</div><div class='del'>-                  progress "e"</div><div class='del'>-                  @stats.num_methods += 1</div><div class='del'>-                  container.add_method new_meth</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'>-</div><div class='del'>-      container</div><div class='del'>-    end  # End of parse_program_or_module</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Parse arguments, comment, code of subroutine and function.</div><div class='del'>-    # Return AnyMethod object.</div><div class='del'>-    #</div><div class='del'>-    def parse_subprogram(subprogram, params, comment, code, </div><div class='del'>-                         before_contains=nil, function=nil, prefix=nil)</div><div class='del'>-      subprogram.singleton = false</div><div class='del'>-      prefix = "" if !prefix</div><div class='del'>-      arguments = params.sub(/\(/, "").sub(/\)/, "").split(",") if params</div><div class='del'>-      args_comment, params_opt = </div><div class='del'>-        find_arguments(arguments, code.sub(/^s*?contains\s*?(!.*?)?$.*/im, ""),</div><div class='del'>-                       nil, nil, true)</div><div class='del'>-      params_opt = "( " + params_opt + " ) " if params_opt</div><div class='del'>-      subprogram.params = params_opt || ""</div><div class='del'>-      namelist_comment = find_namelists(code, before_contains)</div><div class='del'>-</div><div class='del'>-      block_comment = find_comments comment</div><div class='del'>-      if function</div><div class='del'>-        subprogram.comment = "&lt;b&gt;&lt;em&gt; Function &lt;/em&gt;&lt;/b&gt; :: &lt;em&gt;#{prefix}&lt;/em&gt;\n"</div><div class='del'>-      else</div><div class='del'>-        subprogram.comment = "&lt;b&gt;&lt;em&gt; Subroutine &lt;/em&gt;&lt;/b&gt; :: &lt;em&gt;#{prefix}&lt;/em&gt;\n"</div><div class='del'>-      end</div><div class='del'>-      subprogram.comment &lt;&lt; args_comment if args_comment</div><div class='del'>-      subprogram.comment &lt;&lt; block_comment if block_comment</div><div class='del'>-      subprogram.comment &lt;&lt; namelist_comment if namelist_comment</div><div class='del'>-</div><div class='del'>-      # For output source code</div><div class='del'>-      subprogram.start_collecting_tokens</div><div class='del'>-      subprogram.add_token Token.new(1,1).set_text(code)</div><div class='del'>-</div><div class='del'>-      subprogram</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Collect comment for file entity</div><div class='del'>-    #</div><div class='del'>-    def collect_first_comment(body)</div><div class='del'>-      comment = ""</div><div class='del'>-      not_comment = ""</div><div class='del'>-      comment_start = false</div><div class='del'>-      comment_end   = false</div><div class='del'>-      body.split("\n").each{ |line|</div><div class='del'>-        if comment_end</div><div class='del'>-          not_comment &lt;&lt; line</div><div class='del'>-          not_comment &lt;&lt; "\n"</div><div class='del'>-        elsif /^\s*?!\s?(.*)$/i =~ line</div><div class='del'>-          comment_start = true</div><div class='del'>-          comment &lt;&lt; $1</div><div class='del'>-          comment &lt;&lt; "\n"</div><div class='del'>-        elsif /^\s*?$/i =~ line</div><div class='del'>-          comment_end = true if comment_start &amp;&amp; COMMENTS_ARE_UPPER</div><div class='del'>-        else</div><div class='del'>-          comment_end = true</div><div class='del'>-          not_comment &lt;&lt; line</div><div class='del'>-          not_comment &lt;&lt; "\n"</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      return comment, not_comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Return comments of definitions of arguments</div><div class='del'>-    #</div><div class='del'>-    # If "all" argument is true, information of all arguments are returned.</div><div class='del'>-    # If "modified_params" is true, list of arguments are decorated,</div><div class='del'>-    # for example, optional arguments are parenthetic as "[arg]".</div><div class='del'>-    #</div><div class='del'>-    def find_arguments(args, text, all=nil, indent=nil, modified_params=nil)</div><div class='del'>-      return unless args || all</div><div class='del'>-      indent = "" unless indent</div><div class='del'>-      args = ["all"] if all</div><div class='del'>-      params = "" if modified_params</div><div class='del'>-      comma = ""</div><div class='del'>-      return unless text</div><div class='del'>-      args_rdocforms = "\n"</div><div class='del'>-      remaining_lines = "#{text}"</div><div class='del'>-      definitions = definition_info(remaining_lines)</div><div class='del'>-      args.each{ |arg|</div><div class='del'>-        arg.strip!</div><div class='del'>-        arg.chomp!</div><div class='del'>-        definitions.each { |defitem|</div><div class='del'>-          if arg == defitem.varname.strip.chomp || all</div><div class='del'>-            args_rdocforms &lt;&lt; &lt;&lt;-"EOF"</div><div class='del'>-</div><div class='del'>-#{indent}&lt;tt&gt;&lt;b&gt;#{defitem.varname.chomp.strip}#{defitem.arraysuffix}&lt;/b&gt; #{defitem.inivalue}&lt;/tt&gt; :: </div><div class='del'>-#{indent}   &lt;tt&gt;#{defitem.types.chomp.strip}&lt;/tt&gt;</div><div class='del'>-EOF</div><div class='del'>-            if !defitem.comment.chomp.strip.empty?</div><div class='del'>-              comment = ""</div><div class='del'>-              defitem.comment.split("\n").each{ |line|</div><div class='del'>-                comment &lt;&lt; "       " + line + "\n"</div><div class='del'>-              }</div><div class='del'>-              args_rdocforms &lt;&lt; &lt;&lt;-"EOF"</div><div class='del'>-</div><div class='del'>-#{indent}   &lt;tt&gt;&lt;/tt&gt; :: </div><div class='del'>-#{indent}       &lt;tt&gt;&lt;/tt&gt;</div><div class='del'>-#{indent}       #{comment.chomp.strip}</div><div class='del'>-EOF</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if modified_params</div><div class='del'>-              if defitem.include_attr?("optional")</div><div class='del'>-                params &lt;&lt; "#{comma}[#{arg}]"</div><div class='del'>-              else</div><div class='del'>-                params &lt;&lt; "#{comma}#{arg}"</div><div class='del'>-              end</div><div class='del'>-              comma = ", "</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      }</div><div class='del'>-      if modified_params</div><div class='del'>-        return args_rdocforms, params</div><div class='del'>-      else</div><div class='del'>-        return args_rdocforms</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return comments of definitions of namelists</div><div class='del'>-    #</div><div class='del'>-    def find_namelists(text, before_contains=nil)</div><div class='del'>-      return nil if !text</div><div class='del'>-      result = ""</div><div class='del'>-      lines = "#{text}"</div><div class='del'>-      before_contains = "" if !before_contains</div><div class='del'>-      while lines =~ /^\s*?namelist\s+\/\s*?(\w+)\s*?\/([\s\w\,]+)$/i</div><div class='del'>-        lines = $~.post_match</div><div class='del'>-        nml_comment = COMMENTS_ARE_UPPER ? </div><div class='del'>-            find_comments($~.pre_match) : find_comments($~.post_match)</div><div class='del'>-        nml_name = $1</div><div class='del'>-        nml_args = $2.split(",")</div><div class='del'>-        result &lt;&lt; "\n\n=== NAMELIST &lt;tt&gt;&lt;b&gt;" + nml_name + "&lt;/tt&gt;&lt;/b&gt;\n\n"</div><div class='del'>-        result &lt;&lt; nml_comment + "\n" if nml_comment</div><div class='del'>-        if lines.split("\n")[0] =~ /^\//i</div><div class='del'>-          lines = "namelist " + lines</div><div class='del'>-        end</div><div class='del'>-        result &lt;&lt; find_arguments(nml_args, "#{text}" + "\n" + before_contains)</div><div class='del'>-      end</div><div class='del'>-      return result</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Comments just after module or subprogram, or arguments are</div><div class='del'>-    # returned. If "COMMENTS_ARE_UPPER" is true, comments just before</div><div class='del'>-    # modules or subprograms are returned</div><div class='del'>-    #</div><div class='del'>-    def find_comments text</div><div class='del'>-      return "" unless text</div><div class='del'>-      lines = text.split("\n")</div><div class='del'>-      lines.reverse! if COMMENTS_ARE_UPPER</div><div class='del'>-      comment_block = Array.new</div><div class='del'>-      lines.each do |line|</div><div class='del'>-        break if line =~ /^\s*?\w/ || line =~ /^\s*?$/</div><div class='del'>-        if COMMENTS_ARE_UPPER</div><div class='del'>-          comment_block.unshift line.sub(/^\s*?!\s?/,"")</div><div class='del'>-        else</div><div class='del'>-          comment_block.push line.sub(/^\s*?!\s?/,"")</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      nice_lines = comment_block.join("\n").split "\n\s*?\n"</div><div class='del'>-      nice_lines[0] ||= ""</div><div class='del'>-      nice_lines.shift</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def progress(char)</div><div class='del'>-      unless @options.quiet</div><div class='del'>-        @progress.print(char)</div><div class='del'>-        @progress.flush</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Create method for internal alias</div><div class='del'>-    #</div><div class='del'>-    def initialize_public_method(method, parent)</div><div class='del'>-      return if !method || !parent</div><div class='del'>-</div><div class='del'>-      new_meth = AnyMethod.new("External Alias for module", method.name)</div><div class='del'>-      new_meth.singleton    = method.singleton</div><div class='del'>-      new_meth.params       = method.params.clone</div><div class='del'>-      new_meth.comment      = remove_trailing_alias(method.comment.clone)</div><div class='del'>-      new_meth.comment      &lt;&lt; "\n\n#{EXTERNAL_ALIAS_MES} #{parent.strip.chomp}\##{method.name}"</div><div class='del'>-</div><div class='del'>-      return new_meth</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Create method for external alias</div><div class='del'>-    #</div><div class='del'>-    # If argument "internal" is true, file is ignored.</div><div class='del'>-    #</div><div class='del'>-    def initialize_external_method(new, old, params, file, comment, token=nil,</div><div class='del'>-                                   internal=nil, nolink=nil)</div><div class='del'>-      return nil unless new || old</div><div class='del'>-</div><div class='del'>-      if internal</div><div class='del'>-        external_alias_header = "#{INTERNAL_ALIAS_MES} "</div><div class='del'>-        external_alias_text   = external_alias_header + old </div><div class='del'>-      elsif file</div><div class='del'>-        external_alias_header = "#{EXTERNAL_ALIAS_MES} "</div><div class='del'>-        external_alias_text   = external_alias_header + file + "#" + old</div><div class='del'>-      else</div><div class='del'>-        return nil</div><div class='del'>-      end</div><div class='del'>-      external_meth = AnyMethod.new(external_alias_text, new)</div><div class='del'>-      external_meth.singleton    = false</div><div class='del'>-      external_meth.params       = params</div><div class='del'>-      external_comment = remove_trailing_alias(comment) + "\n\n" if comment</div><div class='del'>-      external_meth.comment = external_comment || ""</div><div class='del'>-      if nolink &amp;&amp; token</div><div class='del'>-        external_meth.start_collecting_tokens</div><div class='del'>-        external_meth.add_token Token.new(1,1).set_text(token)</div><div class='del'>-      else</div><div class='del'>-        external_meth.comment &lt;&lt; external_alias_text</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      return external_meth</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'>-    # Parse visibility</div><div class='del'>-    #</div><div class='del'>-    def parse_visibility(code, default, container)</div><div class='del'>-      result = []</div><div class='del'>-      visibility_default = default || :public</div><div class='del'>-</div><div class='del'>-      used_modules = []</div><div class='del'>-      container.includes.each{|i| used_modules &lt;&lt; i.name} if container</div><div class='del'>-</div><div class='del'>-      remaining_code = code.gsub(/^\s*?type[\s\,]+.*?\s+end\s+type.*?$/im, "")</div><div class='del'>-      remaining_code.split("\n").each{ |line|</div><div class='del'>-        if /^\s*?private\s*?$/ =~ line</div><div class='del'>-          visibility_default = :private</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      } if remaining_code</div><div class='del'>-</div><div class='del'>-      remaining_code.split("\n").each{ |line|</div><div class='del'>-        if /^\s*?private\s*?(::)?\s+(.*)\s*?(!.*?)?/i =~ line</div><div class='del'>-          methods = $2.sub(/!.*$/, '')</div><div class='del'>-          methods.split(",").each{ |meth|</div><div class='del'>-            meth.sub!(/!.*$/, '')</div><div class='del'>-            meth.gsub!(/:/, '')</div><div class='del'>-            result &lt;&lt; {</div><div class='del'>-              "name" =&gt; meth.chomp.strip,</div><div class='del'>-              "visibility" =&gt; :private,</div><div class='del'>-              "used_modules" =&gt; used_modules.clone,</div><div class='del'>-              "file_or_module" =&gt; container,</div><div class='del'>-              "entity_is_discovered" =&gt; nil,</div><div class='del'>-              "local_name" =&gt; nil</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        elsif /^\s*?public\s*?(::)?\s+(.*)\s*?(!.*?)?/i =~ line</div><div class='del'>-          methods = $2.sub(/!.*$/, '')</div><div class='del'>-          methods.split(",").each{ |meth|</div><div class='del'>-            meth.sub!(/!.*$/, '')</div><div class='del'>-            meth.gsub!(/:/, '')</div><div class='del'>-            result &lt;&lt; {</div><div class='del'>-              "name" =&gt; meth.chomp.strip,</div><div class='del'>-              "visibility" =&gt; :public,</div><div class='del'>-              "used_modules" =&gt; used_modules.clone,</div><div class='del'>-              "file_or_module" =&gt; container,</div><div class='del'>-              "entity_is_discovered" =&gt; nil,</div><div class='del'>-              "local_name" =&gt; nil</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-      } if remaining_code</div><div class='del'>-</div><div class='del'>-      if container</div><div class='del'>-        result.each{ |vis_info|</div><div class='del'>-          vis_info["parent"] = container.name</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      return visibility_default, result</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Set visibility</div><div class='del'>-    #</div><div class='del'>-    # "subname" element of "visibility_info" is deleted.</div><div class='del'>-    #</div><div class='del'>-    def set_visibility(container, subname, visibility_default, visibility_info)</div><div class='del'>-      return unless container || subname || visibility_default || visibility_info</div><div class='del'>-      not_found = true</div><div class='del'>-      visibility_info.collect!{ |info|</div><div class='del'>-        if info["name"] == subname ||</div><div class='del'>-            @options.ignore_case &amp;&amp; info["name"].upcase == subname.upcase</div><div class='del'>-          if info["file_or_module"].name == container.name</div><div class='del'>-            container.set_visibility_for([subname], info["visibility"])</div><div class='del'>-            info["entity_is_discovered"] = true</div><div class='del'>-            not_found = false</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        info</div><div class='del'>-      }</div><div class='del'>-      if not_found</div><div class='del'>-        return container.set_visibility_for([subname], visibility_default)</div><div class='del'>-      else</div><div class='del'>-        return container</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Find visibility</div><div class='del'>-    #</div><div class='del'>-    def find_visibility(container, subname, visibility_info)</div><div class='del'>-      return nil if !subname || !visibility_info</div><div class='del'>-      visibility_info.each{ |info|</div><div class='del'>-        if info["name"] == subname ||</div><div class='del'>-            @options.ignore_case &amp;&amp; info["name"].upcase == subname.upcase</div><div class='del'>-          if info["parent"] == container.name</div><div class='del'>-            return info["visibility"]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Check external aliases</div><div class='del'>-    #</div><div class='del'>-    def check_external_aliases(subname, params, comment, test=nil)</div><div class='del'>-      @@external_aliases.each{ |alias_item|</div><div class='del'>-        if subname == alias_item["old_name"] ||</div><div class='del'>-                    subname.upcase == alias_item["old_name"].upcase &amp;&amp;</div><div class='del'>-                            @options.ignore_case</div><div class='del'>-</div><div class='del'>-          new_meth = initialize_external_method(alias_item["new_name"], </div><div class='del'>-                                                subname, params, @file_name, </div><div class='del'>-                                                comment)</div><div class='del'>-          new_meth.visibility = alias_item["visibility"]</div><div class='del'>-</div><div class='del'>-          progress "e"</div><div class='del'>-          @stats.num_methods += 1</div><div class='del'>-          alias_item["file_or_module"].add_method(new_meth)</div><div class='del'>-</div><div class='del'>-          if !alias_item["file_or_module"].include_requires?(@file_name, @options.ignore_case)</div><div class='del'>-            alias_item["file_or_module"].add_require(Require.new(@file_name, ""))</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'>-    # Check public_methods</div><div class='del'>-    #</div><div class='del'>-    def check_public_methods(method, parent)</div><div class='del'>-      return if !method || !parent</div><div class='del'>-      @@public_methods.each{ |alias_item|</div><div class='del'>-        parent_is_used_module = nil</div><div class='del'>-        alias_item["used_modules"].each{ |used_module|</div><div class='del'>-          if used_module == parent ||</div><div class='del'>-              used_module.upcase == parent.upcase &amp;&amp;</div><div class='del'>-              @options.ignore_case</div><div class='del'>-            parent_is_used_module = true</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        next if !parent_is_used_module</div><div class='del'>-</div><div class='del'>-        if method.name == alias_item["name"] ||</div><div class='del'>-            method.name.upcase == alias_item["name"].upcase &amp;&amp;</div><div class='del'>-            @options.ignore_case</div><div class='del'>-</div><div class='del'>-          new_meth = initialize_public_method(method, parent)</div><div class='del'>-          if alias_item["local_name"]</div><div class='del'>-            new_meth.name = alias_item["local_name"]</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          progress "e"</div><div class='del'>-          @stats.num_methods += 1</div><div class='del'>-          alias_item["file_or_module"].add_method new_meth</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'>-    # Continuous lines are united.</div><div class='del'>-    #</div><div class='del'>-    # Comments in continuous lines are removed.</div><div class='del'>-    #</div><div class='del'>-    def united_to_one_line(f90src)</div><div class='del'>-      return "" unless f90src</div><div class='del'>-      lines = f90src.split("\n")</div><div class='del'>-      previous_continuing = false</div><div class='del'>-      now_continuing = false</div><div class='del'>-      body = ""</div><div class='del'>-      lines.each{ |line|</div><div class='del'>-        words = line.split("")</div><div class='del'>-        next if words.empty? &amp;&amp; previous_continuing</div><div class='del'>-        commentout = false</div><div class='del'>-        brank_flag = true ; brank_char = ""</div><div class='del'>-        squote = false    ; dquote = false</div><div class='del'>-        ignore = false</div><div class='del'>-        words.collect! { |char|</div><div class='del'>-          if previous_continuing &amp;&amp; brank_flag</div><div class='del'>-            now_continuing = true</div><div class='del'>-            ignore         = true</div><div class='del'>-            case char</div><div class='del'>-            when "!"                       ; break</div><div class='del'>-            when " " ; brank_char &lt;&lt; char  ; next ""</div><div class='del'>-            when "&amp;"</div><div class='del'>-              brank_flag = false</div><div class='del'>-              now_continuing = false</div><div class='del'>-              next ""</div><div class='del'>-            else </div><div class='del'>-              brank_flag     = false</div><div class='del'>-              now_continuing = false</div><div class='del'>-              ignore         = false</div><div class='del'>-              next brank_char + char</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          ignore = false</div><div class='del'>-</div><div class='del'>-          if now_continuing</div><div class='del'>-            next ""</div><div class='del'>-          elsif !(squote) &amp;&amp; !(dquote) &amp;&amp; !(commentout)</div><div class='del'>-            case char</div><div class='del'>-            when "!" ; commentout = true     ; next char</div><div class='del'>-            when "\""; dquote = true         ; next char</div><div class='del'>-            when "\'"; squote = true         ; next char</div><div class='del'>-            when "&amp;" ; now_continuing = true ; next ""</div><div class='del'>-            else next char</div><div class='del'>-            end</div><div class='del'>-          elsif commentout</div><div class='del'>-            next char</div><div class='del'>-          elsif squote</div><div class='del'>-            case char</div><div class='del'>-            when "\'"; squote = false ; next char</div><div class='del'>-            else next char</div><div class='del'>-            end</div><div class='del'>-          elsif dquote</div><div class='del'>-            case char</div><div class='del'>-            when "\""; dquote = false ; next char</div><div class='del'>-            else next char</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        if !ignore &amp;&amp; !previous_continuing || !brank_flag</div><div class='del'>-          if previous_continuing</div><div class='del'>-            body &lt;&lt; words.join("")</div><div class='del'>-          else</div><div class='del'>-            body &lt;&lt; "\n" + words.join("")</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        previous_continuing = now_continuing ? true : nil</div><div class='del'>-        now_continuing = nil</div><div class='del'>-      }</div><div class='del'>-      return body</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Continuous line checker</div><div class='del'>-    #</div><div class='del'>-    def continuous_line?(line)</div><div class='del'>-      continuous = false</div><div class='del'>-      if /&amp;\s*?(!.*)?$/ =~ line</div><div class='del'>-        continuous = true</div><div class='del'>-        if comment_out?($~.pre_match)</div><div class='del'>-          continuous = false</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return continuous</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Comment out checker</div><div class='del'>-    #</div><div class='del'>-    def comment_out?(line)</div><div class='del'>-      return nil unless line</div><div class='del'>-      commentout = false</div><div class='del'>-      squote = false ; dquote = false</div><div class='del'>-      line.split("").each { |char|</div><div class='del'>-        if !(squote) &amp;&amp; !(dquote)</div><div class='del'>-          case char</div><div class='del'>-          when "!" ; commentout = true ; break</div><div class='del'>-          when "\""; dquote = true</div><div class='del'>-          when "\'"; squote = true</div><div class='del'>-          else next</div><div class='del'>-          end</div><div class='del'>-        elsif squote</div><div class='del'>-          case char</div><div class='del'>-          when "\'"; squote = false</div><div class='del'>-          else next</div><div class='del'>-          end</div><div class='del'>-        elsif dquote</div><div class='del'>-          case char</div><div class='del'>-          when "\""; dquote = false</div><div class='del'>-          else next</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      return commentout</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Semicolons are replaced to line feed.</div><div class='del'>-    #</div><div class='del'>-    def semicolon_to_linefeed(text)</div><div class='del'>-      return "" unless text</div><div class='del'>-      lines = text.split("\n")</div><div class='del'>-      lines.collect!{ |line|</div><div class='del'>-        words = line.split("")</div><div class='del'>-        commentout = false</div><div class='del'>-        squote = false ; dquote = false</div><div class='del'>-        words.collect! { |char|</div><div class='del'>-          if !(squote) &amp;&amp; !(dquote) &amp;&amp; !(commentout)</div><div class='del'>-            case char</div><div class='del'>-            when "!" ; commentout = true ; next char</div><div class='del'>-            when "\""; dquote = true     ; next char</div><div class='del'>-            when "\'"; squote = true     ; next char</div><div class='del'>-            when ";" ;                     "\n"</div><div class='del'>-            else next char</div><div class='del'>-            end</div><div class='del'>-          elsif commentout</div><div class='del'>-            next char</div><div class='del'>-          elsif squote</div><div class='del'>-            case char</div><div class='del'>-            when "\'"; squote = false ; next char</div><div class='del'>-            else next char</div><div class='del'>-            end</div><div class='del'>-          elsif dquote</div><div class='del'>-            case char</div><div class='del'>-            when "\""; dquote = false ; next char</div><div class='del'>-            else next char</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        words.join("")</div><div class='del'>-      }</div><div class='del'>-      return lines.join("\n")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Which "line" is start of block (module, program, block data,</div><div class='del'>-    # subroutine, function) statement ?</div><div class='del'>-    #</div><div class='del'>-    def block_start?(line)</div><div class='del'>-      return nil if !line</div><div class='del'>-</div><div class='del'>-      if line =~ /^\s*?module\s+(\w+)\s*?(!.*?)?$/i    ||</div><div class='del'>-          line =~ /^\s*?program\s+(\w+)\s*?(!.*?)?$/i  ||</div><div class='del'>-          line =~ /^\s*?block\s+data(\s+\w+)?\s*?(!.*?)?$/i     ||</div><div class='del'>-          line =~ \</div><div class='del'>-                  /^\s*?</div><div class='del'>-                   (recursive|pure|elemental)?\s*?</div><div class='del'>-                   subroutine\s+(\w+)\s*?(\(.*?\))?\s*?(!.*?)?$</div><div class='del'>-                  /ix ||</div><div class='del'>-          line =~ \</div><div class='del'>-                  /^\s*?</div><div class='del'>-                   (recursive|pure|elemental)?\s*?</div><div class='del'>-                   (</div><div class='del'>-                       character\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                     | type\s*?\([\w\s]+?\)\s+</div><div class='del'>-                     | integer\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                     | real\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                     | double\s+precision\s+</div><div class='del'>-                     | logical\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                     | complex\s*?(\([\w\s\=\(\)\*]+?\))?\s+</div><div class='del'>-                   )?</div><div class='del'>-                   function\s+(\w+)\s*?</div><div class='del'>-                   (\(.*?\))?(\s+result\((.*?)\))?\s*?(!.*?)?$</div><div class='del'>-                  /ix</div><div class='del'>-        return true</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Which "line" is end of block (module, program, block data,</div><div class='del'>-    # subroutine, function) statement ?</div><div class='del'>-    #</div><div class='del'>-    def block_end?(line)</div><div class='del'>-      return nil if !line</div><div class='del'>-</div><div class='del'>-      if line =~ /^\s*?end\s*?(!.*?)?$/i                 ||</div><div class='del'>-          line =~ /^\s*?end\s+module(\s+\w+)?\s*?(!.*?)?$/i       ||</div><div class='del'>-          line =~ /^\s*?end\s+program(\s+\w+)?\s*?(!.*?)?$/i      ||</div><div class='del'>-          line =~ /^\s*?end\s+block\s+data(\s+\w+)?\s*?(!.*?)?$/i  ||</div><div class='del'>-          line =~ /^\s*?end\s+subroutine(\s+\w+)?\s*?(!.*?)?$/i   ||</div><div class='del'>-          line =~ /^\s*?end\s+function(\s+\w+)?\s*?(!.*?)?$/i</div><div class='del'>-        return true</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Remove "Alias for" in end of comments</div><div class='del'>-    #</div><div class='del'>-    def remove_trailing_alias(text)</div><div class='del'>-      return "" if !text</div><div class='del'>-      lines = text.split("\n").reverse</div><div class='del'>-      comment_block = Array.new</div><div class='del'>-      checked = false</div><div class='del'>-      lines.each do |line|</div><div class='del'>-        if !checked </div><div class='del'>-          if /^\s?#{INTERNAL_ALIAS_MES}/ =~ line ||</div><div class='del'>-              /^\s?#{EXTERNAL_ALIAS_MES}/ =~ line</div><div class='del'>-            checked = true</div><div class='del'>-            next</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        comment_block.unshift line</div><div class='del'>-      end</div><div class='del'>-      nice_lines = comment_block.join("\n")</div><div class='del'>-      nice_lines ||= ""</div><div class='del'>-      return nice_lines</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Empty lines in header are removed</div><div class='del'>-    def remove_empty_head_lines(text)</div><div class='del'>-      return "" unless text</div><div class='del'>-      lines = text.split("\n")</div><div class='del'>-      header = true</div><div class='del'>-      lines.delete_if{ |line|</div><div class='del'>-        header = false if /\S/ =~ line</div><div class='del'>-        header &amp;&amp; /^\s*?$/ =~ line</div><div class='del'>-      }</div><div class='del'>-      lines.join("\n")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # header marker "=", "==", ... are removed</div><div class='del'>-    def remove_header_marker(text)</div><div class='del'>-      return text.gsub(/^\s?(=+)/, '&lt;tt&gt;&lt;/tt&gt;\1')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_private_comments(body)</div><div class='del'>-      body.gsub!(/^\s*!--\s*?$.*?^\s*!\+\+\s*?$/m, '')</div><div class='del'>-      return body</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Information of arguments of subroutines and functions in Fortran95</div><div class='del'>-    #</div><div class='del'>-    class Fortran95Definition</div><div class='del'>-</div><div class='del'>-      # Name of variable</div><div class='del'>-      #</div><div class='del'>-      attr_reader   :varname</div><div class='del'>-</div><div class='del'>-      # Types of variable</div><div class='del'>-      #</div><div class='del'>-      attr_reader   :types</div><div class='del'>-</div><div class='del'>-      # Initial Value</div><div class='del'>-      #</div><div class='del'>-      attr_reader   :inivalue</div><div class='del'>-</div><div class='del'>-      # Suffix of array</div><div class='del'>-      #</div><div class='del'>-      attr_reader   :arraysuffix</div><div class='del'>-</div><div class='del'>-      # Comments</div><div class='del'>-      #</div><div class='del'>-      attr_accessor   :comment</div><div class='del'>-</div><div class='del'>-      # Flag of non documentation</div><div class='del'>-      #</div><div class='del'>-      attr_accessor   :nodoc</div><div class='del'>-</div><div class='del'>-      def initialize(varname, types, inivalue, arraysuffix, comment,</div><div class='del'>-                     nodoc=false)</div><div class='del'>-        @varname = varname</div><div class='del'>-        @types = types</div><div class='del'>-        @inivalue = inivalue</div><div class='del'>-        @arraysuffix = arraysuffix</div><div class='del'>-        @comment = comment</div><div class='del'>-        @nodoc = nodoc</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_s</div><div class='del'>-        return &lt;&lt;-EOF</div><div class='del'>-&lt;Fortran95Definition: </div><div class='del'>-  varname=#{@varname}, types=#{types},</div><div class='del'>-  inivalue=#{@inivalue}, arraysuffix=#{@arraysuffix}, nodoc=#{@nodoc}, </div><div class='del'>-  comment=</div><div class='del'>-#{@comment}</div><div class='del'>-&gt;</div><div class='del'>-EOF</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #</div><div class='del'>-      # If attr is included, true is returned</div><div class='del'>-      #</div><div class='del'>-      def include_attr?(attr)</div><div class='del'>-        return if !attr</div><div class='del'>-        @types.split(",").each{ |type|</div><div class='del'>-          return true if type.strip.chomp.upcase == attr.strip.chomp.upcase</div><div class='del'>-        }</div><div class='del'>-        return nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    end # End of Fortran95Definition</div><div class='del'>-</div><div class='del'>-    #</div><div class='del'>-    # Parse string argument "text", and Return Array of</div><div class='del'>-    # Fortran95Definition object</div><div class='del'>-    #</div><div class='del'>-    def definition_info(text)</div><div class='del'>-      return nil unless text</div><div class='del'>-      lines = "#{text}"</div><div class='del'>-      defs = Array.new</div><div class='del'>-      comment = ""</div><div class='del'>-      trailing_comment = ""</div><div class='del'>-      under_comment_valid = false</div><div class='del'>-      lines.split("\n").each{ |line|</div><div class='del'>-        if /^\s*?!\s?(.*)/ =~ line</div><div class='del'>-          if COMMENTS_ARE_UPPER</div><div class='del'>-            comment &lt;&lt; remove_header_marker($1)</div><div class='del'>-            comment &lt;&lt; "\n"</div><div class='del'>-          elsif defs[-1] &amp;&amp; under_comment_valid</div><div class='del'>-            defs[-1].comment &lt;&lt; "\n"</div><div class='del'>-            defs[-1].comment &lt;&lt; remove_header_marker($1)</div><div class='del'>-          end</div><div class='del'>-          next</div><div class='del'>-        elsif /^\s*?$/ =~ line</div><div class='del'>-          comment = ""</div><div class='del'>-          under_comment_valid = false</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-        type = ""</div><div class='del'>-        characters = ""</div><div class='del'>-        if line =~ /^\s*?</div><div class='del'>-                    (</div><div class='del'>-                        character\s*?(\([\w\s\=\(\)\*]+?\))?[\s\,]*</div><div class='del'>-                      | type\s*?\([\w\s]+?\)[\s\,]*</div><div class='del'>-                      | integer\s*?(\([\w\s\=\(\)\*]+?\))?[\s\,]*</div><div class='del'>-                      | real\s*?(\([\w\s\=\(\)\*]+?\))?[\s\,]*</div><div class='del'>-                      | double\s+precision[\s\,]*</div><div class='del'>-                      | logical\s*?(\([\w\s\=\(\)\*]+?\))?[\s\,]*</div><div class='del'>-                      | complex\s*?(\([\w\s\=\(\)\*]+?\))?[\s\,]*</div><div class='del'>-                    )</div><div class='del'>-                    (.*?::)?</div><div class='del'>-                    (.+)$</div><div class='del'>-                   /ix</div><div class='del'>-          characters = $8</div><div class='del'>-          type = $1</div><div class='del'>-          type &lt;&lt; $7.gsub(/::/, '').gsub(/^\s*?\,/, '') if $7</div><div class='del'>-        else</div><div class='del'>-          under_comment_valid = false</div><div class='del'>-          next</div><div class='del'>-        end</div><div class='del'>-        squote = false ; dquote = false ; bracket = 0</div><div class='del'>-        iniflag = false; commentflag = false</div><div class='del'>-        varname = "" ; arraysuffix = "" ; inivalue = ""</div><div class='del'>-        start_pos = defs.size</div><div class='del'>-        characters.split("").each { |char|</div><div class='del'>-          if !(squote) &amp;&amp; !(dquote) &amp;&amp; bracket &lt;= 0 &amp;&amp; !(iniflag) &amp;&amp; !(commentflag)</div><div class='del'>-            case char</div><div class='del'>-            when "!" ; commentflag = true</div><div class='del'>-            when "(" ; bracket += 1       ; arraysuffix = char</div><div class='del'>-            when "\""; dquote = true</div><div class='del'>-            when "\'"; squote = true</div><div class='del'>-            when "=" ; iniflag = true     ; inivalue &lt;&lt; char</div><div class='del'>-            when ","</div><div class='del'>-              defs &lt;&lt; Fortran95Definition.new(varname, type, inivalue, arraysuffix, comment)</div><div class='del'>-              varname = "" ; arraysuffix = "" ; inivalue = ""</div><div class='del'>-              under_comment_valid = true</div><div class='del'>-            when " " ; next</div><div class='del'>-            else     ; varname &lt;&lt; char</div><div class='del'>-            end</div><div class='del'>-          elsif commentflag</div><div class='del'>-            comment &lt;&lt; remove_header_marker(char)</div><div class='del'>-            trailing_comment &lt;&lt; remove_header_marker(char)</div><div class='del'>-          elsif iniflag</div><div class='del'>-            if dquote</div><div class='del'>-              case char</div><div class='del'>-              when "\"" ; dquote = false ; inivalue &lt;&lt; char</div><div class='del'>-              else      ; inivalue &lt;&lt; char</div><div class='del'>-              end</div><div class='del'>-            elsif squote</div><div class='del'>-              case char</div><div class='del'>-              when "\'" ; squote = false ; inivalue &lt;&lt; char</div><div class='del'>-              else      ; inivalue &lt;&lt; char</div><div class='del'>-              end</div><div class='del'>-            elsif bracket &gt; 0</div><div class='del'>-              case char</div><div class='del'>-              when "(" ; bracket += 1 ; inivalue &lt;&lt; char</div><div class='del'>-              when ")" ; bracket -= 1 ; inivalue &lt;&lt; char</div><div class='del'>-              else     ; inivalue &lt;&lt; char</div><div class='del'>-              end</div><div class='del'>-            else</div><div class='del'>-              case char</div><div class='del'>-              when ","</div><div class='del'>-                defs &lt;&lt; Fortran95Definition.new(varname, type, inivalue, arraysuffix, comment)</div><div class='del'>-                varname = "" ; arraysuffix = "" ; inivalue = ""</div><div class='del'>-                iniflag = false</div><div class='del'>-                under_comment_valid = true</div><div class='del'>-              when "(" ; bracket += 1 ; inivalue &lt;&lt; char</div><div class='del'>-              when "\""; dquote = true  ; inivalue &lt;&lt; char</div><div class='del'>-              when "\'"; squote = true  ; inivalue &lt;&lt; char</div><div class='del'>-              when "!" ; commentflag = true</div><div class='del'>-              else     ; inivalue &lt;&lt; char</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          elsif !(squote) &amp;&amp; !(dquote) &amp;&amp; bracket &gt; 0</div><div class='del'>-            case char</div><div class='del'>-            when "(" ; bracket += 1 ; arraysuffix &lt;&lt; char</div><div class='del'>-            when ")" ; bracket -= 1 ; arraysuffix &lt;&lt; char</div><div class='del'>-            else     ; arraysuffix &lt;&lt; char</div><div class='del'>-            end</div><div class='del'>-          elsif squote</div><div class='del'>-            case char</div><div class='del'>-            when "\'"; squote = false ; inivalue &lt;&lt; char</div><div class='del'>-            else     ; inivalue &lt;&lt; char</div><div class='del'>-            end</div><div class='del'>-          elsif dquote</div><div class='del'>-            case char</div><div class='del'>-            when "\""; dquote = false ; inivalue &lt;&lt; char</div><div class='del'>-            else     ; inivalue &lt;&lt; char</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-        defs &lt;&lt; Fortran95Definition.new(varname, type, inivalue, arraysuffix, comment)</div><div class='del'>-        if trailing_comment =~ /^:nodoc:/</div><div class='del'>-          defs[start_pos..-1].collect!{ |defitem|</div><div class='del'>-            defitem.nodoc = true</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        varname = "" ; arraysuffix = "" ; inivalue = ""</div><div class='del'>-        comment = ""</div><div class='del'>-        under_comment_valid = true</div><div class='del'>-        trailing_comment = ""</div><div class='del'>-      }</div><div class='del'>-      return defs</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  end # class Fortran95parser</div><div class='del'>-</div><div class='del'>-end # module RDoc</div><div class='head'>diff --git a/lib/rdoc/parsers/parse_rb.rb b/lib/rdoc/parsers/parse_rb.rb<br/>deleted file mode 100644<br/>index 750c483c15..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/parsers/parse_rb.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/parsers/parse_rb.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2609 +0,0 @@</div><div class='del'>-#!/usr/local/bin/ruby</div><div class='del'>-</div><div class='del'>-# Parse a Ruby source file, building a set of objects</div><div class='del'>-# representing the modules, classes, methods,</div><div class='del'>-# requires, and includes we find (these classes</div><div class='del'>-# are defined in code_objects.rb).</div><div class='del'>-</div><div class='del'>-# This file contains stuff stolen outright from:</div><div class='del'>-#</div><div class='del'>-#   rtags.rb - </div><div class='del'>-#   ruby-lex.rb - ruby lexcal analizer</div><div class='del'>-#   ruby-token.rb - ruby tokens </div><div class='del'>-#   	by Keiju ISHITSUKA (Nippon Rational Inc.)</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require "e2mmap"</div><div class='del'>-require "irb/slex"</div><div class='del'>-</div><div class='del'>-require "rdoc/code_objects"</div><div class='del'>-require "rdoc/tokenstream"</div><div class='del'>-</div><div class='del'>-require "rdoc/markup/simple_markup/preprocess"</div><div class='del'>-</div><div class='del'>-require "rdoc/parsers/parserfactory"</div><div class='del'>-</div><div class='del'>-$TOKEN_DEBUG = $DEBUG</div><div class='del'>-</div><div class='del'>-# Definitions of all tokens involved in the lexical analysis</div><div class='del'>-</div><div class='del'>-module RubyToken</div><div class='del'>-  EXPR_BEG   = :EXPR_BEG</div><div class='del'>-  EXPR_MID   = :EXPR_MID</div><div class='del'>-  EXPR_END   = :EXPR_END</div><div class='del'>-  EXPR_ARG   = :EXPR_ARG</div><div class='del'>-  EXPR_FNAME = :EXPR_FNAME</div><div class='del'>-  EXPR_DOT   = :EXPR_DOT</div><div class='del'>-  EXPR_CLASS = :EXPR_CLASS</div><div class='del'>-  </div><div class='del'>-  class Token</div><div class='del'>-    NO_TEXT = "??".freeze</div><div class='del'>-    attr :text</div><div class='del'>-</div><div class='del'>-    def initialize(line_no, char_no)</div><div class='del'>-      @line_no = line_no</div><div class='del'>-      @char_no = char_no</div><div class='del'>-      @text    = NO_TEXT</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Because we're used in contexts that expect to return a token,</div><div class='del'>-    # we set the text string and then return ourselves</div><div class='del'>-    def set_text(text)</div><div class='del'>-      @text = text</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_reader :line_no, :char_no, :text</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkNode &lt; Token</div><div class='del'>-    attr :node</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkId &lt; Token</div><div class='del'>-    def initialize(line_no, char_no, name)</div><div class='del'>-      super(line_no, char_no)</div><div class='del'>-      @name = name</div><div class='del'>-    end</div><div class='del'>-    attr :name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkKW &lt; TkId</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkVal &lt; Token</div><div class='del'>-    def initialize(line_no, char_no, value = nil)</div><div class='del'>-      super(line_no, char_no)</div><div class='del'>-      set_text(value)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkOp &lt; Token</div><div class='del'>-    def name</div><div class='del'>-      self.class.op_name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkOPASGN &lt; TkOp</div><div class='del'>-    def initialize(line_no, char_no, op)</div><div class='del'>-      super(line_no, char_no)</div><div class='del'>-      op = TkReading2Token[op] unless op.kind_of?(Symbol)</div><div class='del'>-      @op = op</div><div class='del'>-    end</div><div class='del'>-    attr :op</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkUnknownChar &lt; Token</div><div class='del'>-    def initialize(line_no, char_no, id)</div><div class='del'>-      super(line_no, char_no)</div><div class='del'>-      @name = char_no.chr</div><div class='del'>-    end</div><div class='del'>-    attr :name</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class TkError &lt; Token</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def set_token_position(line, char)</div><div class='del'>-    @prev_line_no = line</div><div class='del'>-    @prev_char_no = char</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def Token(token, value = nil)</div><div class='del'>-    tk = nil</div><div class='del'>-    case token</div><div class='del'>-    when String, Symbol</div><div class='del'>-      source = token.kind_of?(String) ? TkReading2Token : TkSymbol2Token</div><div class='del'>-      if (tk = source[token]).nil?</div><div class='del'>-	IRB.fail TkReading2TokenNoKey, token</div><div class='del'>-      end</div><div class='del'>-      tk = Token(tk[0], value) </div><div class='del'>-    else </div><div class='del'>-      tk = if (token.ancestors &amp; [TkId, TkVal, TkOPASGN, TkUnknownChar]).empty?</div><div class='del'>-             token.new(@prev_line_no, @prev_char_no)</div><div class='del'>-           else</div><div class='del'>-             token.new(@prev_line_no, @prev_char_no, value)</div><div class='del'>-           end</div><div class='del'>-    end</div><div class='del'>-    tk</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  TokenDefinitions = [</div><div class='del'>-    [:TkCLASS,      TkKW,  "class",  EXPR_CLASS],</div><div class='del'>-    [:TkMODULE,     TkKW,  "module", EXPR_BEG],</div><div class='del'>-    [:TkDEF,	    TkKW,  "def",    EXPR_FNAME],</div><div class='del'>-    [:TkUNDEF,      TkKW,  "undef",  EXPR_FNAME],</div><div class='del'>-    [:TkBEGIN,      TkKW,  "begin",  EXPR_BEG],</div><div class='del'>-    [:TkRESCUE,     TkKW,  "rescue", EXPR_MID],</div><div class='del'>-    [:TkENSURE,     TkKW,  "ensure", EXPR_BEG],</div><div class='del'>-    [:TkEND,	    TkKW,  "end",    EXPR_END],</div><div class='del'>-    [:TkIF,         TkKW,  "if",     EXPR_BEG, :TkIF_MOD],</div><div class='del'>-    [:TkUNLESS,     TkKW,  "unless", EXPR_BEG, :TkUNLESS_MOD],</div><div class='del'>-    [:TkTHEN,	    TkKW,  "then",   EXPR_BEG],</div><div class='del'>-    [:TkELSIF,      TkKW,  "elsif",  EXPR_BEG],</div><div class='del'>-    [:TkELSE,	    TkKW,  "else",   EXPR_BEG],</div><div class='del'>-    [:TkCASE,	    TkKW,  "case",   EXPR_BEG],</div><div class='del'>-    [:TkWHEN,	    TkKW,  "when",   EXPR_BEG],</div><div class='del'>-    [:TkWHILE,      TkKW,  "while",  EXPR_BEG, :TkWHILE_MOD],</div><div class='del'>-    [:TkUNTIL,      TkKW,  "until",  EXPR_BEG, :TkUNTIL_MOD],</div><div class='del'>-    [:TkFOR,	    TkKW,  "for",    EXPR_BEG],</div><div class='del'>-    [:TkBREAK,      TkKW,  "break",  EXPR_END],</div><div class='del'>-    [:TkNEXT,	    TkKW,  "next",   EXPR_END],</div><div class='del'>-    [:TkREDO,	    TkKW,  "redo",   EXPR_END],</div><div class='del'>-    [:TkRETRY,      TkKW,  "retry",  EXPR_END],</div><div class='del'>-    [:TkIN,	    TkKW,  "in",     EXPR_BEG],</div><div class='del'>-    [:TkDO,	    TkKW,  "do",     EXPR_BEG],</div><div class='del'>-    [:TkRETURN,     TkKW,  "return", EXPR_MID],</div><div class='del'>-    [:TkYIELD,      TkKW,  "yield",  EXPR_END],</div><div class='del'>-    [:TkSUPER,      TkKW,  "super",  EXPR_END],</div><div class='del'>-    [:TkSELF,	    TkKW,  "self",   EXPR_END],</div><div class='del'>-    [:TkNIL, 	    TkKW,  "nil",    EXPR_END],</div><div class='del'>-    [:TkTRUE,	    TkKW,  "true",   EXPR_END],</div><div class='del'>-    [:TkFALSE,      TkKW,  "false",  EXPR_END],</div><div class='del'>-    [:TkAND,	    TkKW,  "and",    EXPR_BEG],</div><div class='del'>-    [:TkOR, 	    TkKW,  "or",     EXPR_BEG],</div><div class='del'>-    [:TkNOT,	    TkKW,  "not",    EXPR_BEG],</div><div class='del'>-    [:TkIF_MOD,     TkKW],</div><div class='del'>-    [:TkUNLESS_MOD, TkKW],</div><div class='del'>-    [:TkWHILE_MOD,  TkKW],</div><div class='del'>-    [:TkUNTIL_MOD,  TkKW],</div><div class='del'>-    [:TkALIAS,      TkKW,  "alias",    EXPR_FNAME],</div><div class='del'>-    [:TkDEFINED,    TkKW,  "defined?", EXPR_END],</div><div class='del'>-    [:TklBEGIN,     TkKW,  "BEGIN",    EXPR_END],</div><div class='del'>-    [:TklEND,	    TkKW,  "END",      EXPR_END],</div><div class='del'>-    [:Tk__LINE__,   TkKW,  "__LINE__", EXPR_END],</div><div class='del'>-    [:Tk__FILE__,   TkKW,  "__FILE__", EXPR_END],</div><div class='del'>-</div><div class='del'>-    [:TkIDENTIFIER, TkId],</div><div class='del'>-    [:TkFID,	    TkId],</div><div class='del'>-    [:TkGVAR,	    TkId],</div><div class='del'>-    [:TkIVAR,	    TkId],</div><div class='del'>-    [:TkCONSTANT,   TkId],</div><div class='del'>-</div><div class='del'>-    [:TkINTEGER,    TkVal],</div><div class='del'>-    [:TkFLOAT,      TkVal],</div><div class='del'>-    [:TkSTRING,     TkVal],</div><div class='del'>-    [:TkXSTRING,    TkVal],</div><div class='del'>-    [:TkREGEXP,     TkVal],</div><div class='del'>-    [:TkCOMMENT,    TkVal],</div><div class='del'>-</div><div class='del'>-    [:TkDSTRING,    TkNode],</div><div class='del'>-    [:TkDXSTRING,   TkNode],</div><div class='del'>-    [:TkDREGEXP,    TkNode],</div><div class='del'>-    [:TkNTH_REF,    TkId],</div><div class='del'>-    [:TkBACK_REF,   TkId],</div><div class='del'>-</div><div class='del'>-    [:TkUPLUS,      TkOp,   "+@"],</div><div class='del'>-    [:TkUMINUS,     TkOp,   "-@"],</div><div class='del'>-    [:TkPOW,	    TkOp,   "**"],</div><div class='del'>-    [:TkCMP,	    TkOp,   "&lt;=&gt;"],</div><div class='del'>-    [:TkEQ,	    TkOp,   "=="],</div><div class='del'>-    [:TkEQQ,	    TkOp,   "==="],</div><div class='del'>-    [:TkNEQ,	    TkOp,   "!="],</div><div class='del'>-    [:TkGEQ,	    TkOp,   "&gt;="],</div><div class='del'>-    [:TkLEQ,	    TkOp,   "&lt;="],</div><div class='del'>-    [:TkANDOP,      TkOp,   "&amp;&amp;"],</div><div class='del'>-    [:TkOROP,	    TkOp,   "||"],</div><div class='del'>-    [:TkMATCH,      TkOp,   "=~"],</div><div class='del'>-    [:TkNMATCH,     TkOp,   "!~"],</div><div class='del'>-    [:TkDOT2,	    TkOp,   ".."],</div><div class='del'>-    [:TkDOT3,	    TkOp,   "..."],</div><div class='del'>-    [:TkAREF,	    TkOp,   "[]"],</div><div class='del'>-    [:TkASET,	    TkOp,   "[]="],</div><div class='del'>-    [:TkLSHFT,      TkOp,   "&lt;&lt;"],</div><div class='del'>-    [:TkRSHFT,      TkOp,   "&gt;&gt;"],</div><div class='del'>-    [:TkCOLON2,     TkOp],</div><div class='del'>-    [:TkCOLON3,     TkOp],</div><div class='del'>-#   [:OPASGN,	    TkOp],               # +=, -=  etc. #</div><div class='del'>-    [:TkASSOC,      TkOp,   "=&gt;"],</div><div class='del'>-    [:TkQUESTION,   TkOp,   "?"],	 #?</div><div class='del'>-    [:TkCOLON,      TkOp,   ":"],        #:</div><div class='del'>-    </div><div class='del'>-    [:TkfLPAREN],         # func( #</div><div class='del'>-    [:TkfLBRACK],         # func[ #</div><div class='del'>-    [:TkfLBRACE],         # func{ #</div><div class='del'>-    [:TkSTAR],            # *arg</div><div class='del'>-    [:TkAMPER],           # &amp;arg #</div><div class='del'>-    [:TkSYMBOL,     TkId],          # :SYMBOL</div><div class='del'>-    [:TkSYMBEG,     TkId], </div><div class='del'>-    [:TkGT,	    TkOp,   "&gt;"],</div><div class='del'>-    [:TkLT,	    TkOp,   "&lt;"],</div><div class='del'>-    [:TkPLUS,	    TkOp,   "+"],</div><div class='del'>-    [:TkMINUS,      TkOp,   "-"],</div><div class='del'>-    [:TkMULT,	    TkOp,   "*"],</div><div class='del'>-    [:TkDIV,	    TkOp,   "/"],</div><div class='del'>-    [:TkMOD,	    TkOp,   "%"],</div><div class='del'>-    [:TkBITOR,      TkOp,   "|"],</div><div class='del'>-    [:TkBITXOR,     TkOp,   "^"],</div><div class='del'>-    [:TkBITAND,     TkOp,   "&amp;"],</div><div class='del'>-    [:TkBITNOT,     TkOp,   "~"],</div><div class='del'>-    [:TkNOTOP,      TkOp,   "!"],</div><div class='del'>-</div><div class='del'>-    [:TkBACKQUOTE,  TkOp,   "`"],</div><div class='del'>-</div><div class='del'>-    [:TkASSIGN,     Token,  "="],</div><div class='del'>-    [:TkDOT,	    Token,  "."],</div><div class='del'>-    [:TkLPAREN,     Token,  "("],  #(exp)</div><div class='del'>-    [:TkLBRACK,     Token,  "["],  #[arry]</div><div class='del'>-    [:TkLBRACE,     Token,  "{"],  #{hash}</div><div class='del'>-    [:TkRPAREN,     Token,  ")"],</div><div class='del'>-    [:TkRBRACK,     Token,  "]"],</div><div class='del'>-    [:TkRBRACE,     Token,  "}"],</div><div class='del'>-    [:TkCOMMA,      Token,  ","],</div><div class='del'>-    [:TkSEMICOLON,  Token,  ";"],</div><div class='del'>-</div><div class='del'>-    [:TkRD_COMMENT],</div><div class='del'>-    [:TkSPACE],</div><div class='del'>-    [:TkNL],</div><div class='del'>-    [:TkEND_OF_SCRIPT],</div><div class='del'>-</div><div class='del'>-    [:TkBACKSLASH,  TkUnknownChar,  "\\"],</div><div class='del'>-    [:TkAT,	    TkUnknownChar,  "@"],</div><div class='del'>-    [:TkDOLLAR,     TkUnknownChar,  "\$"], #"</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  # {reading =&gt; token_class}</div><div class='del'>-  # {reading =&gt; [token_class, *opt]}</div><div class='del'>-  TkReading2Token = {}</div><div class='del'>-  TkSymbol2Token = {}</div><div class='del'>-</div><div class='del'>-  def RubyToken.def_token(token_n, super_token = Token, reading = nil, *opts)</div><div class='del'>-    token_n = token_n.id2name unless token_n.kind_of?(String)</div><div class='del'>-    if RubyToken.const_defined?(token_n)</div><div class='del'>-      IRB.fail AlreadyDefinedToken, token_n</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    token_c =  Class.new super_token</div><div class='del'>-    RubyToken.const_set token_n, token_c</div><div class='del'>-#    token_c.inspect</div><div class='del'>- </div><div class='del'>-    if reading</div><div class='del'>-      if TkReading2Token[reading]</div><div class='del'>-	IRB.fail TkReading2TokenDuplicateError, token_n, reading</div><div class='del'>-      end</div><div class='del'>-      if opts.empty?</div><div class='del'>-	TkReading2Token[reading] = [token_c]</div><div class='del'>-      else</div><div class='del'>-	TkReading2Token[reading] = [token_c].concat(opts)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    TkSymbol2Token[token_n.intern] = token_c</div><div class='del'>-</div><div class='del'>-    if token_c &lt;= TkOp</div><div class='del'>-      token_c.class_eval %{</div><div class='del'>-        def self.op_name; "#{reading}"; end</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  for defs in TokenDefinitions</div><div class='del'>-    def_token(*defs)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  NEWLINE_TOKEN = TkNL.new(0,0)</div><div class='del'>-  NEWLINE_TOKEN.set_text("\n")</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'>-# Lexical analyzer for Ruby source</div><div class='del'>-</div><div class='del'>-class RubyLex</div><div class='del'>-</div><div class='del'>-  ######################################################################</div><div class='del'>-  #</div><div class='del'>-  # Read an input stream character by character. We allow for unlimited</div><div class='del'>-  # ungetting of characters just read.</div><div class='del'>-  #</div><div class='del'>-  # We simplify the implementation greatly by reading the entire input</div><div class='del'>-  # into a buffer initially, and then simply traversing it using</div><div class='del'>-  # pointers.</div><div class='del'>-  #</div><div class='del'>-  # We also have to allow for the &lt;i&gt;here document diversion&lt;/i&gt;. This</div><div class='del'>-  # little gem comes about when the lexer encounters a here</div><div class='del'>-  # document. At this point we effectively need to split the input</div><div class='del'>-  # stream into two parts: one to read the body of the here document,</div><div class='del'>-  # the other to read the rest of the input line where the here</div><div class='del'>-  # document was initially encountered. For example, we might have</div><div class='del'>-  #</div><div class='del'>-  #   do_something(&lt;&lt;-A, &lt;&lt;-B)</div><div class='del'>-  #     stuff</div><div class='del'>-  #     for</div><div class='del'>-  #   A</div><div class='del'>-  #     stuff</div><div class='del'>-  #     for</div><div class='del'>-  #   B</div><div class='del'>-  #</div><div class='del'>-  # When the lexer encounters the &lt;&lt;A, it reads until the end of the</div><div class='del'>-  # line, and keeps it around for later. It then reads the body of the</div><div class='del'>-  # here document.  Once complete, it needs to read the rest of the</div><div class='del'>-  # original line, but then skip the here document body.</div><div class='del'>-  #</div><div class='del'>-  </div><div class='del'>-  class BufferedReader</div><div class='del'>-    </div><div class='del'>-    attr_reader :line_num</div><div class='del'>-    </div><div class='del'>-    def initialize(content)</div><div class='del'>-      if /\t/ =~ content</div><div class='del'>-        tab_width = Options.instance.tab_width</div><div class='del'>-        content = content.split(/\n/).map do |line|</div><div class='del'>-          1 while line.gsub!(/\t+/) { ' ' * (tab_width*$&amp;.length - $`.length % tab_width)}  &amp;&amp; $~ #`</div><div class='del'>-          line</div><div class='del'>-        end .join("\n")</div><div class='del'>-      end</div><div class='del'>-      @content   = content</div><div class='del'>-      @content &lt;&lt; "\n" unless @content[-1,1] == "\n"</div><div class='del'>-      @size      = @content.size</div><div class='del'>-      @offset    = 0</div><div class='del'>-      @hwm       = 0</div><div class='del'>-      @line_num  = 1</div><div class='del'>-      @read_back_offset = 0</div><div class='del'>-      @last_newline = 0</div><div class='del'>-      @newline_pending = false</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def column</div><div class='del'>-      @offset - @last_newline</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def getc</div><div class='del'>-      return nil if @offset &gt;= @size</div><div class='del'>-      ch = @content[@offset, 1]</div><div class='del'>-      </div><div class='del'>-      @offset += 1</div><div class='del'>-      @hwm = @offset if @hwm &lt; @offset</div><div class='del'>-      </div><div class='del'>-      if @newline_pending</div><div class='del'>-        @line_num += 1</div><div class='del'>-        @last_newline = @offset - 1</div><div class='del'>-        @newline_pending = false</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      if ch == "\n"</div><div class='del'>-        @newline_pending = true</div><div class='del'>-      end</div><div class='del'>-      ch</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def getc_already_read</div><div class='del'>-      getc</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def ungetc(ch)</div><div class='del'>-      raise "unget past beginning of file" if @offset &lt;= 0</div><div class='del'>-      @offset -= 1</div><div class='del'>-      if @content[@offset] == ?\n</div><div class='del'>-        @newline_pending = false</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def get_read</div><div class='del'>-      res = @content[@read_back_offset...@offset]</div><div class='del'>-      @read_back_offset = @offset</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def peek(at)</div><div class='del'>-      pos = @offset + at</div><div class='del'>-      if pos &gt;= @size</div><div class='del'>-        nil</div><div class='del'>-      else</div><div class='del'>-        @content[pos, 1]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def peek_equal(str)</div><div class='del'>-      @content[@offset, str.length] == str</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def divert_read_from(reserve)</div><div class='del'>-      @content[@offset, 0] = reserve</div><div class='del'>-      @size      = @content.size</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # end of nested class BufferedReader</div><div class='del'>-</div><div class='del'>-  extend Exception2MessageMapper</div><div class='del'>-  def_exception(:AlreadyDefinedToken, "Already defined token(%s)")</div><div class='del'>-  def_exception(:TkReading2TokenNoKey, "key nothing(key='%s')")</div><div class='del'>-  def_exception(:TkSymbol2TokenNoKey, "key nothing(key='%s')")</div><div class='del'>-  def_exception(:TkReading2TokenDuplicateError, </div><div class='del'>-		"key duplicate(token_n='%s', key='%s')")</div><div class='del'>-  def_exception(:SyntaxError, "%s")</div><div class='del'>-  </div><div class='del'>-  include RubyToken</div><div class='del'>-  include IRB</div><div class='del'>-</div><div class='del'>-  attr_reader :continue</div><div class='del'>-  attr_reader :lex_state</div><div class='del'>-</div><div class='del'>-  def RubyLex.debug?</div><div class='del'>-    false</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def initialize(content)</div><div class='del'>-    lex_init</div><div class='del'>-</div><div class='del'>-    @reader = BufferedReader.new(content)</div><div class='del'>-</div><div class='del'>-    @exp_line_no = @line_no = 1</div><div class='del'>-    @base_char_no = 0</div><div class='del'>-    @indent = 0</div><div class='del'>-</div><div class='del'>-    @ltype = nil</div><div class='del'>-    @quoted = nil</div><div class='del'>-    @lex_state = EXPR_BEG</div><div class='del'>-    @space_seen = false</div><div class='del'>-    </div><div class='del'>-    @continue = false</div><div class='del'>-    @line = ""</div><div class='del'>-</div><div class='del'>-    @skip_space = false</div><div class='del'>-    @read_auto_clean_up = false</div><div class='del'>-    @exception_on_syntax_error = true</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  attr :skip_space, true</div><div class='del'>-  attr :read_auto_clean_up, true</div><div class='del'>-  attr :exception_on_syntax_error, true</div><div class='del'>-</div><div class='del'>-  attr :indent</div><div class='del'>-</div><div class='del'>-  # io functions</div><div class='del'>-  def line_no</div><div class='del'>-    @reader.line_num</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def char_no</div><div class='del'>-    @reader.column</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def get_read</div><div class='del'>-    @reader.get_read</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def getc</div><div class='del'>-    @reader.getc</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def getc_of_rests</div><div class='del'>-    @reader.getc_already_read</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def gets</div><div class='del'>-    c = getc or return</div><div class='del'>-    l = ""</div><div class='del'>-    begin</div><div class='del'>-      l.concat c unless c == "\r"</div><div class='del'>-      break if c == "\n"</div><div class='del'>-    end while c = getc</div><div class='del'>-    l</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  def ungetc(c = nil)</div><div class='del'>-    @reader.ungetc(c)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def peek_equal?(str)</div><div class='del'>-    @reader.peek_equal(str)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def peek(i = 0)</div><div class='del'>-    @reader.peek(i)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def lex</div><div class='del'>-    until (((tk = token).kind_of?(TkNL) || tk.kind_of?(TkEND_OF_SCRIPT)) &amp;&amp;</div><div class='del'>-	     !@continue or</div><div class='del'>-	     tk.nil?)</div><div class='del'>-    end</div><div class='del'>-    line = get_read</div><div class='del'>-</div><div class='del'>-    if line == "" and tk.kind_of?(TkEND_OF_SCRIPT) || tk.nil?</div><div class='del'>-      nil</div><div class='del'>-    else</div><div class='del'>-      line</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def token</div><div class='del'>-    set_token_position(line_no, char_no)</div><div class='del'>-    begin</div><div class='del'>-      begin</div><div class='del'>-	tk = @OP.match(self)</div><div class='del'>-	@space_seen = tk.kind_of?(TkSPACE)</div><div class='del'>-      rescue SyntaxError</div><div class='del'>-	abort if @exception_on_syntax_error</div><div class='del'>-	tk = TkError.new(line_no, char_no)</div><div class='del'>-      end</div><div class='del'>-    end while @skip_space and tk.kind_of?(TkSPACE)</div><div class='del'>-    if @read_auto_clean_up</div><div class='del'>-      get_read</div><div class='del'>-    end</div><div class='del'>-#   throw :eof unless tk</div><div class='del'>-    p tk if $DEBUG</div><div class='del'>-    tk</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  ENINDENT_CLAUSE = [</div><div class='del'>-    "case", "class", "def", "do", "for", "if",</div><div class='del'>-    "module", "unless", "until", "while", "begin" #, "when"</div><div class='del'>-  ]</div><div class='del'>-  DEINDENT_CLAUSE = ["end" #, "when"</div><div class='del'>-  ]</div><div class='del'>-</div><div class='del'>-  PERCENT_LTYPE = {</div><div class='del'>-    "q" =&gt; "\'",</div><div class='del'>-    "Q" =&gt; "\"",</div><div class='del'>-    "x" =&gt; "\`",</div><div class='del'>-    "r" =&gt; "/",</div><div class='del'>-    "w" =&gt; "]"</div><div class='del'>-  }</div><div class='del'>-  </div><div class='del'>-  PERCENT_PAREN = {</div><div class='del'>-    "{" =&gt; "}",</div><div class='del'>-    "[" =&gt; "]",</div><div class='del'>-    "&lt;" =&gt; "&gt;",</div><div class='del'>-    "(" =&gt; ")"</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  Ltype2Token = {</div><div class='del'>-    "\'" =&gt; TkSTRING,</div><div class='del'>-    "\"" =&gt; TkSTRING,</div><div class='del'>-    "\`" =&gt; TkXSTRING,</div><div class='del'>-    "/" =&gt; TkREGEXP,</div><div class='del'>-    "]" =&gt; TkDSTRING</div><div class='del'>-  }</div><div class='del'>-  Ltype2Token.default = TkSTRING</div><div class='del'>-</div><div class='del'>-  DLtype2Token = {</div><div class='del'>-    "\"" =&gt; TkDSTRING,</div><div class='del'>-    "\`" =&gt; TkDXSTRING,</div><div class='del'>-    "/" =&gt; TkDREGEXP,</div><div class='del'>-  }</div><div class='del'>-</div><div class='del'>-  def lex_init()</div><div class='del'>-    @OP = SLex.new</div><div class='del'>-    @OP.def_rules("\0", "\004", "\032") do |chars, io|</div><div class='del'>-      Token(TkEND_OF_SCRIPT).set_text(chars)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules(" ", "\t", "\f", "\r", "\13") do |chars, io|</div><div class='del'>-      @space_seen = TRUE</div><div class='del'>-      while (ch = getc) =~ /[ \t\f\r\13]/</div><div class='del'>-        chars &lt;&lt; ch</div><div class='del'>-      end</div><div class='del'>-      ungetc</div><div class='del'>-      Token(TkSPACE).set_text(chars)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("#") do</div><div class='del'>-      |op, io|</div><div class='del'>-      identify_comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("=begin", proc{@prev_char_no == 0 &amp;&amp; peek(0) =~ /\s/}) do</div><div class='del'>-      |op, io|</div><div class='del'>-      str = op</div><div class='del'>-      @ltype = "="</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-        line = ""</div><div class='del'>-        begin</div><div class='del'>-          ch = getc</div><div class='del'>-          line &lt;&lt; ch</div><div class='del'>-        end until ch == "\n"</div><div class='del'>-        str &lt;&lt; line</div><div class='del'>-      end until line =~ /^=end/</div><div class='del'>-</div><div class='del'>-      ungetc</div><div class='del'>-</div><div class='del'>-      @ltype = nil</div><div class='del'>-</div><div class='del'>-      if str =~ /\A=begin\s+rdoc/i</div><div class='del'>-        str.sub!(/\A=begin.*\n/, '')</div><div class='del'>-        str.sub!(/^=end.*/m, '')</div><div class='del'>-        Token(TkCOMMENT).set_text(str)</div><div class='del'>-      else</div><div class='del'>-        Token(TkRD_COMMENT)#.set_text(str)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("\n") do</div><div class='del'>-      print "\\n\n" if RubyLex.debug?</div><div class='del'>-      case @lex_state</div><div class='del'>-      when EXPR_BEG, EXPR_FNAME, EXPR_DOT</div><div class='del'>-	@continue = TRUE</div><div class='del'>-      else</div><div class='del'>-	@continue = FALSE</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-      end</div><div class='del'>-      Token(TkNL).set_text("\n")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("*", "**",	</div><div class='del'>-		  "!", "!=", "!~",</div><div class='del'>-		  "=", "==", "===", </div><div class='del'>-		  "=~", "&lt;=&gt;",	</div><div class='del'>-		  "&lt;", "&lt;=",</div><div class='del'>-		  "&gt;", "&gt;=", "&gt;&gt;") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token(op).set_text(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("&lt;&lt;") do</div><div class='del'>-      |op, io|</div><div class='del'>-      tk = nil</div><div class='del'>-      if @lex_state != EXPR_END &amp;&amp; @lex_state != EXPR_CLASS &amp;&amp;</div><div class='del'>-	  (@lex_state != EXPR_ARG || @space_seen)</div><div class='del'>-	c = peek(0)</div><div class='del'>-	if /[-\w_\"\'\`]/ =~ c</div><div class='del'>-	  tk = identify_here_document</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if !tk</div><div class='del'>-        @lex_state = EXPR_BEG</div><div class='del'>-        tk = Token(op).set_text(op)</div><div class='del'>-      end</div><div class='del'>-      tk</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("'", '"') do</div><div class='del'>-      |op, io|</div><div class='del'>-      identify_string(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("`") do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_FNAME</div><div class='del'>-	Token(op).set_text(op)</div><div class='del'>-      else</div><div class='del'>-	identify_string(op)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules('?') do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_END</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token(TkQUESTION).set_text(op)</div><div class='del'>-      else</div><div class='del'>-	ch = getc</div><div class='del'>-	if @lex_state == EXPR_ARG &amp;&amp; ch !~ /\s/</div><div class='del'>-	  ungetc</div><div class='del'>-	  @lex_state = EXPR_BEG;</div><div class='del'>-	  Token(TkQUESTION).set_text(op)</div><div class='del'>-	else</div><div class='del'>-          str = op</div><div class='del'>-          str &lt;&lt; ch</div><div class='del'>-	  if (ch == '\\') #'</div><div class='del'>-	    str &lt;&lt; read_escape</div><div class='del'>-	  end</div><div class='del'>-	  @lex_state = EXPR_END</div><div class='del'>-	  Token(TkINTEGER).set_text(str)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("&amp;", "&amp;&amp;", "|", "||") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token(op).set_text(op)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    @OP.def_rules("+=", "-=", "*=", "**=", </div><div class='del'>-		  "&amp;=", "|=", "^=", "&lt;&lt;=", "&gt;&gt;=", "||=", "&amp;&amp;=") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      op =~ /^(.*)=$/</div><div class='del'>-      Token(TkOPASGN, $1).set_text(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("+@", proc{@lex_state == EXPR_FNAME}) do |op, io|</div><div class='del'>-      Token(TkUPLUS).set_text(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("-@", proc{@lex_state == EXPR_FNAME}) do |op, io|</div><div class='del'>-      Token(TkUMINUS).set_text(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("+", "-") do</div><div class='del'>-      |op, io|</div><div class='del'>-      catch(:RET) do</div><div class='del'>-	if @lex_state == EXPR_ARG</div><div class='del'>-	  if @space_seen and peek(0) =~ /[0-9]/</div><div class='del'>-	    throw :RET, identify_number(op)</div><div class='del'>-	  else</div><div class='del'>-	    @lex_state = EXPR_BEG</div><div class='del'>-	  end</div><div class='del'>-	elsif @lex_state != EXPR_END and peek(0) =~ /[0-9]/</div><div class='del'>-	  throw :RET, identify_number(op)</div><div class='del'>-	else</div><div class='del'>-	  @lex_state = EXPR_BEG</div><div class='del'>-	end</div><div class='del'>-	Token(op).set_text(op)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule(".") do</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      if peek(0) =~ /[0-9]/</div><div class='del'>-	ungetc</div><div class='del'>-	identify_number("")</div><div class='del'>-      else</div><div class='del'>-	# for obj.if</div><div class='del'>-	@lex_state = EXPR_DOT</div><div class='del'>-	Token(TkDOT).set_text(".")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("..", "...") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token(op).set_text(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    lex_int2</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def lex_int2</div><div class='del'>-    @OP.def_rules("]", "}", ")") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-      @indent -= 1</div><div class='del'>-      Token(op).set_text(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule(":") do</div><div class='del'>-      if @lex_state == EXPR_END || peek(0) =~ /\s/</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	tk = Token(TkCOLON)</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_FNAME;</div><div class='del'>-	tk = Token(TkSYMBEG)</div><div class='del'>-      end</div><div class='del'>-      tk.set_text(":")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("::") do</div><div class='del'>-#      p @lex_state.id2name, @space_seen</div><div class='del'>-      if @lex_state == EXPR_BEG or @lex_state == EXPR_ARG &amp;&amp; @space_seen</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	tk = Token(TkCOLON3)</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_DOT</div><div class='del'>-	tk = Token(TkCOLON2)</div><div class='del'>-      end</div><div class='del'>-      tk.set_text("::")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("/") do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_BEG || @lex_state == EXPR_MID</div><div class='del'>-	identify_string(op)</div><div class='del'>-      elsif peek(0) == '='</div><div class='del'>-	getc</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token(TkOPASGN, :/).set_text("/=") #")</div><div class='del'>-      elsif @lex_state == EXPR_ARG and @space_seen and peek(0) !~ /\s/</div><div class='del'>-	identify_string(op)</div><div class='del'>-      else </div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-        Token("/").set_text(op)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rules("^") do</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token("^").set_text("^")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #       @OP.def_rules("^=") do</div><div class='del'>-    # 	@lex_state = EXPR_BEG</div><div class='del'>-    # 	Token(TkOPASGN, :^)</div><div class='del'>-    #       end</div><div class='del'>-    </div><div class='del'>-    @OP.def_rules(",", ";") do</div><div class='del'>-      |op, io|</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token(op).set_text(op)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("~") do</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token("~").set_text("~")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("~@", proc{@lex_state = EXPR_FNAME}) do</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      Token("~").set_text("~@")</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    @OP.def_rule("(") do</div><div class='del'>-      @indent += 1</div><div class='del'>-      if @lex_state == EXPR_BEG || @lex_state == EXPR_MID</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	tk = Token(TkfLPAREN)</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	tk = Token(TkLPAREN)</div><div class='del'>-      end</div><div class='del'>-      tk.set_text("(")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("[]", proc{@lex_state == EXPR_FNAME}) do</div><div class='del'>-      Token("[]").set_text("[]")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("[]=", proc{@lex_state == EXPR_FNAME}) do</div><div class='del'>-      Token("[]=").set_text("[]=")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("[") do</div><div class='del'>-      @indent += 1</div><div class='del'>-      if @lex_state == EXPR_FNAME</div><div class='del'>-	t = Token(TkfLBRACK)</div><div class='del'>-      else</div><div class='del'>-	if @lex_state == EXPR_BEG || @lex_state == EXPR_MID</div><div class='del'>-	  t = Token(TkLBRACK)</div><div class='del'>-	elsif @lex_state == EXPR_ARG &amp;&amp; @space_seen</div><div class='del'>-	  t = Token(TkLBRACK)</div><div class='del'>-	else</div><div class='del'>-	  t = Token(TkfLBRACK)</div><div class='del'>-	end</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-      end</div><div class='del'>-      t.set_text("[")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("{") do</div><div class='del'>-      @indent += 1</div><div class='del'>-      if @lex_state != EXPR_END &amp;&amp; @lex_state != EXPR_ARG</div><div class='del'>-	t = Token(TkLBRACE)</div><div class='del'>-      else</div><div class='del'>-	t = Token(TkfLBRACE)</div><div class='del'>-      end</div><div class='del'>-      @lex_state = EXPR_BEG</div><div class='del'>-      t.set_text("{")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule('\\') do   #'</div><div class='del'>-      if getc == "\n" </div><div class='del'>-	@space_seen = true</div><div class='del'>-	@continue = true</div><div class='del'>-	Token(TkSPACE).set_text("\\\n")</div><div class='del'>-      else </div><div class='del'>-	ungetc</div><div class='del'>-	Token("\\").set_text("\\")  #"</div><div class='del'>-      end </div><div class='del'>-    end </div><div class='del'>-</div><div class='del'>-    @OP.def_rule('%') do</div><div class='del'>-      |op, io|</div><div class='del'>-      if @lex_state == EXPR_BEG || @lex_state == EXPR_MID</div><div class='del'>-	identify_quotation('%')</div><div class='del'>-      elsif peek(0) == '='</div><div class='del'>-	getc</div><div class='del'>-	Token(TkOPASGN, "%").set_text("%=")</div><div class='del'>-      elsif @lex_state == EXPR_ARG and @space_seen and peek(0) !~ /\s/</div><div class='del'>-	identify_quotation('%')</div><div class='del'>-      else</div><div class='del'>-	@lex_state = EXPR_BEG</div><div class='del'>-	Token("%").set_text("%")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule('$') do  #'</div><div class='del'>-      identify_gvar</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule('@') do</div><div class='del'>-      if peek(0) =~ /[@\w_]/</div><div class='del'>-	ungetc</div><div class='del'>-	identify_identifier</div><div class='del'>-      else</div><div class='del'>-	Token("@").set_text("@")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #       @OP.def_rule("def", proc{|op, io| /\s/ =~ io.peek(0)}) do </div><div class='del'>-    # 	|op, io|</div><div class='del'>-    # 	@indent += 1</div><div class='del'>-    # 	@lex_state = EXPR_FNAME</div><div class='del'>-    # #	@lex_state = EXPR_END</div><div class='del'>-    # #	until @rests[0] == "\n" or @rests[0] == ";"</div><div class='del'>-    # #	  rests.shift</div><div class='del'>-    # #	end</div><div class='del'>-    #       end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("__END__", proc{@prev_char_no == 0 &amp;&amp; peek(0) =~ /[\r\n]/}) do</div><div class='del'>-      throw :eof</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @OP.def_rule("") do</div><div class='del'>-      |op, io|</div><div class='del'>-      printf "MATCH: start %s: %s\n", op, io.inspect if RubyLex.debug?</div><div class='del'>-      if peek(0) =~ /[0-9]/</div><div class='del'>-	t = identify_number("")</div><div class='del'>-      elsif peek(0) =~ /[\w_]/</div><div class='del'>-	t = identify_identifier</div><div class='del'>-      end</div><div class='del'>-      printf "MATCH: end %s: %s\n", op, io.inspect if RubyLex.debug?</div><div class='del'>-      t</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    p @OP if RubyLex.debug?</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_gvar</div><div class='del'>-    @lex_state = EXPR_END</div><div class='del'>-    str = "$"</div><div class='del'>-</div><div class='del'>-    tk = case ch = getc</div><div class='del'>-         when /[~_*$?!@\/\\;,=:&lt;&gt;".]/   #"</div><div class='del'>-           str &lt;&lt; ch</div><div class='del'>-           Token(TkGVAR, str)</div><div class='del'>-           </div><div class='del'>-         when "-"</div><div class='del'>-           str &lt;&lt; "-" &lt;&lt; getc</div><div class='del'>-           Token(TkGVAR, str)</div><div class='del'>-           </div><div class='del'>-         when "&amp;", "`", "'", "+"</div><div class='del'>-           str &lt;&lt; ch</div><div class='del'>-           Token(TkBACK_REF, str)</div><div class='del'>-           </div><div class='del'>-         when /[1-9]/</div><div class='del'>-           str &lt;&lt; ch</div><div class='del'>-           while (ch = getc) =~ /[0-9]/</div><div class='del'>-             str &lt;&lt; ch</div><div class='del'>-           end</div><div class='del'>-           ungetc</div><div class='del'>-           Token(TkNTH_REF)</div><div class='del'>-         when /\w/</div><div class='del'>-           ungetc</div><div class='del'>-           ungetc</div><div class='del'>-           return identify_identifier</div><div class='del'>-         else </div><div class='del'>-           ungetc</div><div class='del'>-           Token("$")     </div><div class='del'>-         end</div><div class='del'>-    tk.set_text(str)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_identifier</div><div class='del'>-    token = ""</div><div class='del'>-    token.concat getc if peek(0) =~ /[$@]/</div><div class='del'>-    token.concat getc if peek(0) == "@"</div><div class='del'>-</div><div class='del'>-    while (ch = getc) =~ /\w|_/</div><div class='del'>-      print ":", ch, ":" if RubyLex.debug?</div><div class='del'>-      token.concat ch</div><div class='del'>-    end</div><div class='del'>-    ungetc</div><div class='del'>-    </div><div class='del'>-    if ch == "!" or ch == "?"</div><div class='del'>-      token.concat getc</div><div class='del'>-    end</div><div class='del'>-    # fix token</div><div class='del'>-</div><div class='del'>-    # $stderr.puts "identifier - #{token}, state = #@lex_state"</div><div class='del'>-</div><div class='del'>-    case token</div><div class='del'>-    when /^\$/</div><div class='del'>-      return Token(TkGVAR, token).set_text(token)</div><div class='del'>-    when /^\@/</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-      return Token(TkIVAR, token).set_text(token)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    if @lex_state != EXPR_DOT</div><div class='del'>-      print token, "\n" if RubyLex.debug?</div><div class='del'>-</div><div class='del'>-      token_c, *trans = TkReading2Token[token]</div><div class='del'>-      if token_c</div><div class='del'>-	# reserved word?</div><div class='del'>-</div><div class='del'>-	if (@lex_state != EXPR_BEG &amp;&amp;</div><div class='del'>-	    @lex_state != EXPR_FNAME &amp;&amp;</div><div class='del'>-	    trans[1])</div><div class='del'>-	  # modifiers</div><div class='del'>-	  token_c = TkSymbol2Token[trans[1]]</div><div class='del'>-	  @lex_state = trans[0]</div><div class='del'>-	else</div><div class='del'>-	  if @lex_state != EXPR_FNAME</div><div class='del'>-	    if ENINDENT_CLAUSE.include?(token)</div><div class='del'>-	      @indent += 1</div><div class='del'>-	    elsif DEINDENT_CLAUSE.include?(token)</div><div class='del'>-	      @indent -= 1</div><div class='del'>-	    end</div><div class='del'>-	    @lex_state = trans[0]</div><div class='del'>-	  else</div><div class='del'>-	    @lex_state = EXPR_END</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-	return Token(token_c, token).set_text(token)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if @lex_state == EXPR_FNAME</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-      if peek(0) == '='</div><div class='del'>-	token.concat getc</div><div class='del'>-      end</div><div class='del'>-    elsif @lex_state == EXPR_BEG || @lex_state == EXPR_DOT</div><div class='del'>-      @lex_state = EXPR_ARG</div><div class='del'>-    else</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    if token[0, 1] =~ /[A-Z]/</div><div class='del'>-      return Token(TkCONSTANT, token).set_text(token)</div><div class='del'>-    elsif token[token.size - 1, 1] =~ /[!?]/</div><div class='del'>-      return Token(TkFID, token).set_text(token)</div><div class='del'>-    else</div><div class='del'>-      return Token(TkIDENTIFIER, token).set_text(token)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify_here_document</div><div class='del'>-    ch = getc</div><div class='del'>-    if ch == "-"</div><div class='del'>-      ch = getc</div><div class='del'>-      indent = true</div><div class='del'>-    end</div><div class='del'>-    if /['"`]/ =~ ch            # '</div><div class='del'>-      lt = ch</div><div class='del'>-      quoted = ""</div><div class='del'>-      while (c = getc) &amp;&amp; c != lt</div><div class='del'>-	quoted.concat c</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      lt = '"'</div><div class='del'>-      quoted = ch.dup</div><div class='del'>-      while (c = getc) &amp;&amp; c =~ /\w/</div><div class='del'>-	quoted.concat c</div><div class='del'>-      end</div><div class='del'>-      ungetc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ltback, @ltype = @ltype, lt</div><div class='del'>-    reserve = ""</div><div class='del'>-</div><div class='del'>-    while ch = getc</div><div class='del'>-      reserve &lt;&lt; ch</div><div class='del'>-      if ch == "\\"    #"</div><div class='del'>-        ch = getc</div><div class='del'>-	reserve &lt;&lt; ch</div><div class='del'>-      elsif ch == "\n"</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    str = ""</div><div class='del'>-    while (l = gets)</div><div class='del'>-      l.chomp!</div><div class='del'>-      l.strip! if indent</div><div class='del'>-      break if l == quoted</div><div class='del'>-      str &lt;&lt; l.chomp &lt;&lt; "\n"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @reader.divert_read_from(reserve)</div><div class='del'>-</div><div class='del'>-    @ltype = ltback</div><div class='del'>-    @lex_state = EXPR_END</div><div class='del'>-    Token(Ltype2Token[lt], str).set_text(str.dump)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_quotation(initial_char)</div><div class='del'>-    ch = getc</div><div class='del'>-    if lt = PERCENT_LTYPE[ch]</div><div class='del'>-      initial_char += ch</div><div class='del'>-      ch = getc</div><div class='del'>-    elsif ch =~ /\W/</div><div class='del'>-      lt = "\""</div><div class='del'>-    else</div><div class='del'>-      RubyLex.fail SyntaxError, "unknown type of %string ('#{ch}')"</div><div class='del'>-    end</div><div class='del'>-#     if ch !~ /\W/</div><div class='del'>-#       ungetc</div><div class='del'>-#       next</div><div class='del'>-#     end</div><div class='del'>-    #@ltype = lt</div><div class='del'>-    @quoted = ch unless @quoted = PERCENT_PAREN[ch]</div><div class='del'>-    identify_string(lt, @quoted, ch, initial_char)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify_number(start)</div><div class='del'>-    str = start.dup</div><div class='del'>-</div><div class='del'>-    if start == "+" or start == "-" or start == ""</div><div class='del'>-      start = getc</div><div class='del'>-      str &lt;&lt; start</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @lex_state = EXPR_END</div><div class='del'>-</div><div class='del'>-    if start == "0"</div><div class='del'>-      if peek(0) == "x"</div><div class='del'>-        ch = getc</div><div class='del'>-        str &lt;&lt; ch</div><div class='del'>-        match = /[0-9a-f_]/</div><div class='del'>-      else</div><div class='del'>-        match = /[0-7_]/</div><div class='del'>-      end</div><div class='del'>-      while ch = getc</div><div class='del'>-        if ch !~ match</div><div class='del'>-          ungetc</div><div class='del'>-          break</div><div class='del'>-        else</div><div class='del'>-          str &lt;&lt; ch</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return Token(TkINTEGER).set_text(str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    type = TkINTEGER</div><div class='del'>-    allow_point = TRUE</div><div class='del'>-    allow_e = TRUE</div><div class='del'>-    while ch = getc</div><div class='del'>-      case ch</div><div class='del'>-      when /[0-9_]/</div><div class='del'>-        str &lt;&lt; ch</div><div class='del'>-</div><div class='del'>-      when allow_point &amp;&amp; "."</div><div class='del'>-	type = TkFLOAT</div><div class='del'>-	if peek(0) !~ /[0-9]/</div><div class='del'>-	  ungetc</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-        str &lt;&lt; ch</div><div class='del'>-	allow_point = false</div><div class='del'>-</div><div class='del'>-      when allow_e &amp;&amp; "e", allow_e &amp;&amp; "E"</div><div class='del'>-        str &lt;&lt; ch</div><div class='del'>-	type = TkFLOAT</div><div class='del'>-	if peek(0) =~ /[+-]/</div><div class='del'>-	  str &lt;&lt; getc</div><div class='del'>-	end</div><div class='del'>-	allow_e = false</div><div class='del'>-	allow_point = false</div><div class='del'>-      else</div><div class='del'>-	ungetc</div><div class='del'>-	break</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    Token(type).set_text(str)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def identify_string(ltype, quoted = ltype, opener=nil, initial_char = nil)</div><div class='del'>-    @ltype = ltype</div><div class='del'>-    @quoted = quoted</div><div class='del'>-    subtype = nil</div><div class='del'>-</div><div class='del'>-    str = ""</div><div class='del'>-    str &lt;&lt; initial_char if initial_char</div><div class='del'>-    str &lt;&lt; (opener||quoted)</div><div class='del'>-</div><div class='del'>-    nest = 0</div><div class='del'>-    begin</div><div class='del'>-      while ch = getc </div><div class='del'>-	str &lt;&lt; ch</div><div class='del'>-	if @quoted == ch </div><div class='del'>-          if nest == 0</div><div class='del'>-            break</div><div class='del'>-          else</div><div class='del'>-            nest -= 1</div><div class='del'>-          end</div><div class='del'>-        elsif opener == ch</div><div class='del'>-          nest += 1</div><div class='del'>-	elsif @ltype != "'" &amp;&amp; @ltype != "]" and ch == "#"</div><div class='del'>-          ch = getc</div><div class='del'>-          if ch == "{"</div><div class='del'>-            subtype = true</div><div class='del'>-            str &lt;&lt; ch &lt;&lt; skip_inner_expression</div><div class='del'>-          else</div><div class='del'>-            ungetc(ch)</div><div class='del'>-          end</div><div class='del'>-	elsif ch == '\\' #'</div><div class='del'>-	  str &lt;&lt; read_escape</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if @ltype == "/"</div><div class='del'>-	if peek(0) =~ /i|o|n|e|s/</div><div class='del'>-	  str &lt;&lt; getc</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      if subtype</div><div class='del'>-	Token(DLtype2Token[ltype], str)</div><div class='del'>-      else</div><div class='del'>-	Token(Ltype2Token[ltype], str)</div><div class='del'>-      end.set_text(str)</div><div class='del'>-    ensure</div><div class='del'>-      @ltype = nil</div><div class='del'>-      @quoted = nil</div><div class='del'>-      @lex_state = EXPR_END</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def skip_inner_expression</div><div class='del'>-    res = ""</div><div class='del'>-    nest = 0</div><div class='del'>-    while (ch = getc)</div><div class='del'>-      res &lt;&lt; ch</div><div class='del'>-      if ch == '}'</div><div class='del'>-        break if nest.zero?</div><div class='del'>-        nest -= 1</div><div class='del'>-      elsif ch == '{'</div><div class='del'>-        nest += 1</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    res</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def identify_comment</div><div class='del'>-    @ltype = "#"</div><div class='del'>-    comment = "#"</div><div class='del'>-    while ch = getc</div><div class='del'>-      if ch == "\\"</div><div class='del'>-        ch = getc</div><div class='del'>-        if ch == "\n"</div><div class='del'>-          ch = " "</div><div class='del'>-        else</div><div class='del'>-          comment &lt;&lt; "\\" </div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        if ch == "\n"</div><div class='del'>-          @ltype = nil</div><div class='del'>-          ungetc</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      comment &lt;&lt; ch</div><div class='del'>-    end</div><div class='del'>-    return Token(TkCOMMENT).set_text(comment)</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  def read_escape</div><div class='del'>-    res = ""</div><div class='del'>-    case ch = getc</div><div class='del'>-    when /[0-7]/</div><div class='del'>-      ungetc ch</div><div class='del'>-      3.times do</div><div class='del'>-	case ch = getc</div><div class='del'>-	when /[0-7]/</div><div class='del'>-	when nil</div><div class='del'>-	  break</div><div class='del'>-	else</div><div class='del'>-	  ungetc</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-        res &lt;&lt; ch</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-    when "x"</div><div class='del'>-      res &lt;&lt; ch</div><div class='del'>-      2.times do</div><div class='del'>-	case ch = getc</div><div class='del'>-	when /[0-9a-fA-F]/</div><div class='del'>-	when nil</div><div class='del'>-	  break</div><div class='del'>-	else</div><div class='del'>-	  ungetc</div><div class='del'>-	  break</div><div class='del'>-	end</div><div class='del'>-        res &lt;&lt; ch</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when "M"</div><div class='del'>-      res &lt;&lt; ch</div><div class='del'>-      if (ch = getc) != '-'</div><div class='del'>-	ungetc</div><div class='del'>-      else</div><div class='del'>-        res &lt;&lt; ch</div><div class='del'>-	if (ch = getc) == "\\" #"</div><div class='del'>-          res &lt;&lt; ch</div><div class='del'>-	  res &lt;&lt; read_escape</div><div class='del'>-        else</div><div class='del'>-          res &lt;&lt; ch</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    when "C", "c" #, "^"</div><div class='del'>-      res &lt;&lt; ch</div><div class='del'>-      if ch == "C" and (ch = getc) != "-"</div><div class='del'>-	ungetc</div><div class='del'>-      else</div><div class='del'>-        res &lt;&lt; ch</div><div class='del'>-        if (ch = getc) == "\\" #"</div><div class='del'>-          res &lt;&lt; ch</div><div class='del'>-          res &lt;&lt; read_escape</div><div class='del'>-        else</div><div class='del'>-          res &lt;&lt; ch</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    else</div><div class='del'>-      res &lt;&lt; ch</div><div class='del'>-    end</div><div class='del'>-    res</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'>-# Extract code elements from a source file, returning a TopLevel</div><div class='del'>-# object containing the constituent file elements.</div><div class='del'>-#</div><div class='del'>-# This file is based on rtags</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-  GENERAL_MODIFIERS = [ 'nodoc' ].freeze</div><div class='del'>-</div><div class='del'>-  CLASS_MODIFIERS = GENERAL_MODIFIERS</div><div class='del'>-</div><div class='del'>-  ATTR_MODIFIERS  = GENERAL_MODIFIERS</div><div class='del'>-</div><div class='del'>-  CONSTANT_MODIFIERS = GENERAL_MODIFIERS</div><div class='del'>-</div><div class='del'>-  METHOD_MODIFIERS = GENERAL_MODIFIERS + </div><div class='del'>-    [ 'arg', 'args', 'yield', 'yields', 'notnew', 'not-new', 'not_new', 'doc' ]</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class RubyParser</div><div class='del'>-    include RubyToken</div><div class='del'>-    include TokenStream</div><div class='del'>-</div><div class='del'>-    extend ParserFactory</div><div class='del'>-</div><div class='del'>-    parse_files_matching(/\.rbw?$/)</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def initialize(top_level, file_name, content, options, stats)</div><div class='del'>-      @options = options</div><div class='del'>-      @stats   = stats</div><div class='del'>-      @size = 0</div><div class='del'>-      @token_listeners = nil</div><div class='del'>-      @input_file_name = file_name</div><div class='del'>-      @scanner = RubyLex.new(content)</div><div class='del'>-      @scanner.exception_on_syntax_error = false</div><div class='del'>-      @top_level = top_level</div><div class='del'>-      @progress = $stderr unless options.quiet</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def scan</div><div class='del'>-      @tokens = []</div><div class='del'>-      @unget_read = []</div><div class='del'>-      @read = []</div><div class='del'>-      catch(:eof) do</div><div class='del'>-        catch(:enddoc) do</div><div class='del'>-          begin</div><div class='del'>-            parse_toplevel_statements(@top_level)</div><div class='del'>-          rescue Exception =&gt; e</div><div class='del'>-            $stderr.puts "\n\n"</div><div class='del'>-            $stderr.puts "RDoc failure in #@input_file_name at or around " +</div><div class='del'>-                         "line #{@scanner.line_no} column #{@scanner.char_no}"</div><div class='del'>-            $stderr.puts </div><div class='del'>-            $stderr.puts "Before reporting this, could you check that the file"</div><div class='del'>-            $stderr.puts "you're documenting compiles cleanly--RDoc is not a"</div><div class='del'>-            $stderr.puts "full Ruby parser, and gets confused easily if fed"</div><div class='del'>-            $stderr.puts "invalid programs."</div><div class='del'>-            $stderr.puts</div><div class='del'>-            $stderr.puts "The internal error was:\n\n"</div><div class='del'>-            </div><div class='del'>-            e.set_backtrace(e.backtrace[0,4])</div><div class='del'>-            raise</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      @top_level</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private </div><div class='del'>-</div><div class='del'>-    def make_message(msg)</div><div class='del'>-      prefix = "\n" + @input_file_name + ":"</div><div class='del'>-      if @scanner</div><div class='del'>-        prefix &lt;&lt; "#{@scanner.line_no}:#{@scanner.char_no}: "</div><div class='del'>-      end</div><div class='del'>-      return prefix + msg</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def warn(msg)</div><div class='del'>-      return if @options.quiet</div><div class='del'>-      msg = make_message msg</div><div class='del'>-      $stderr.puts msg</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def error(msg)</div><div class='del'>-      msg = make_message msg</div><div class='del'>-      $stderr.puts msg</div><div class='del'>-      exit(1)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def progress(char)</div><div class='del'>-      unless @options.quiet</div><div class='del'>-        @progress.print(char)</div><div class='del'>-	@progress.flush</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_token_listener(obj)</div><div class='del'>-      @token_listeners ||= []</div><div class='del'>-      @token_listeners &lt;&lt; obj</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_token_listener(obj)</div><div class='del'>-      @token_listeners.delete(obj)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_tk</div><div class='del'>-      tk = nil</div><div class='del'>-      if @tokens.empty?</div><div class='del'>-	tk = @scanner.token</div><div class='del'>-	@read.push @scanner.get_read</div><div class='del'>-	puts "get_tk1 =&gt; #{tk.inspect}" if $TOKEN_DEBUG</div><div class='del'>-      else</div><div class='del'>-	@read.push @unget_read.shift</div><div class='del'>-	tk = @tokens.shift</div><div class='del'>-	puts "get_tk2 =&gt; #{tk.inspect}" if $TOKEN_DEBUG</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if tk.kind_of?(TkSYMBEG)</div><div class='del'>-        set_token_position(tk.line_no, tk.char_no)</div><div class='del'>-        tk1 = get_tk</div><div class='del'>-        if tk1.kind_of?(TkId) || tk1.kind_of?(TkOp)</div><div class='del'>-          tk = Token(TkSYMBOL).set_text(":" + tk1.name)</div><div class='del'>-          # remove the identifier we just read (we're about to</div><div class='del'>-          # replace it with a symbol)</div><div class='del'>-          @token_listeners.each do |obj|</div><div class='del'>-            obj.pop_token</div><div class='del'>-          end if @token_listeners</div><div class='del'>-        else</div><div class='del'>-          warn("':' not followed by identifier or operator")</div><div class='del'>-          tk = tk1</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # inform any listeners of our shiny new token</div><div class='del'>-      @token_listeners.each do |obj|</div><div class='del'>-        obj.add_token(tk)</div><div class='del'>-      end if @token_listeners</div><div class='del'>-</div><div class='del'>-      tk</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def peek_tk</div><div class='del'>-      unget_tk(tk = get_tk)</div><div class='del'>-      tk</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def unget_tk(tk)</div><div class='del'>-      @tokens.unshift tk</div><div class='del'>-      @unget_read.unshift @read.pop</div><div class='del'>-</div><div class='del'>-      # Remove this token from any listeners</div><div class='del'>-      @token_listeners.each do |obj|</div><div class='del'>-        obj.pop_token</div><div class='del'>-      end if @token_listeners</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def skip_tkspace(skip_nl = true)</div><div class='del'>-      tokens = []</div><div class='del'>-      while ((tk = get_tk).kind_of?(TkSPACE) ||</div><div class='del'>-	     (skip_nl &amp;&amp; tk.kind_of?(TkNL)))</div><div class='del'>-	tokens.push tk</div><div class='del'>-      end</div><div class='del'>-      unget_tk(tk)</div><div class='del'>-      tokens</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_tkread</div><div class='del'>-      read = @read.join("")</div><div class='del'>-      @read = []</div><div class='del'>-      read</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def peek_read</div><div class='del'>-      @read.join('')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    NORMAL = "::"</div><div class='del'>-    SINGLE = "&lt;&lt;"</div><div class='del'>-</div><div class='del'>-    # Look for the first comment in a file that isn't</div><div class='del'>-    # a shebang line.</div><div class='del'>-</div><div class='del'>-    def collect_first_comment</div><div class='del'>-      skip_tkspace</div><div class='del'>-      res = ''</div><div class='del'>-      first_line = true</div><div class='del'>-</div><div class='del'>-      tk = get_tk</div><div class='del'>-      while tk.kind_of?(TkCOMMENT)</div><div class='del'>-        if first_line &amp;&amp; /\A#!/ =~ tk.text</div><div class='del'>-          skip_tkspace</div><div class='del'>-          tk = get_tk</div><div class='del'>-        elsif first_line &amp;&amp; /\A#\s*-\*-/ =~ tk.text</div><div class='del'>-          first_line = false</div><div class='del'>-          skip_tkspace</div><div class='del'>-          tk = get_tk</div><div class='del'>-        else</div><div class='del'>-          first_line = false</div><div class='del'>-          res &lt;&lt; tk.text &lt;&lt; "\n"</div><div class='del'>-          tk = get_tk</div><div class='del'>-          if tk.kind_of? TkNL</div><div class='del'>-            skip_tkspace(false)</div><div class='del'>-            tk = get_tk</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      unget_tk(tk)</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_toplevel_statements(container)</div><div class='del'>-      comment = collect_first_comment</div><div class='del'>-      look_for_directives_in(container, comment)</div><div class='del'>-      container.comment = comment unless comment.empty?</div><div class='del'>-      parse_statements(container, NORMAL, nil, comment)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def parse_statements(container, single=NORMAL, current_method=nil, comment='')</div><div class='del'>-      nest = 1</div><div class='del'>-      save_visibility = container.visibility</div><div class='del'>-      </div><div class='del'>-#      if container.kind_of?(TopLevel)</div><div class='del'>-#      else</div><div class='del'>-#        comment = ''</div><div class='del'>-#      end</div><div class='del'>-</div><div class='del'>-      non_comment_seen = true</div><div class='del'>-      </div><div class='del'>-      while tk = get_tk</div><div class='del'>-        </div><div class='del'>-        keep_comment = false</div><div class='del'>-        </div><div class='del'>-        non_comment_seen = true unless tk.kind_of?(TkCOMMENT)</div><div class='del'>-        </div><div class='del'>-	case tk</div><div class='del'>-</div><div class='del'>-        when TkNL</div><div class='del'>-          skip_tkspace(true)   # Skip blanks and newlines</div><div class='del'>-          tk = get_tk</div><div class='del'>-          if tk.kind_of?(TkCOMMENT)</div><div class='del'>-            if non_comment_seen</div><div class='del'>-              comment = ''</div><div class='del'>-              non_comment_seen = false</div><div class='del'>-            end</div><div class='del'>-            while tk.kind_of?(TkCOMMENT)</div><div class='del'>-              comment &lt;&lt; tk.text &lt;&lt; "\n"</div><div class='del'>-              tk = get_tk          # this is the newline </div><div class='del'>-              skip_tkspace(false)  # leading spaces</div><div class='del'>-              tk = get_tk</div><div class='del'>-            end</div><div class='del'>-            unless comment.empty?</div><div class='del'>-              look_for_directives_in(container, comment) </div><div class='del'>-              if container.done_documenting</div><div class='del'>-                container.ongoing_visibility = save_visibility</div><div class='del'>-#                return</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            keep_comment = true</div><div class='del'>-          else</div><div class='del'>-            non_comment_seen = true</div><div class='del'>-          end</div><div class='del'>-          unget_tk(tk)</div><div class='del'>-          keep_comment = true</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	when TkCLASS</div><div class='del'>-	  if container.document_children</div><div class='del'>-            parse_class(container, single, tk, comment)</div><div class='del'>-	  else</div><div class='del'>-	    nest += 1</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-	when TkMODULE</div><div class='del'>-	  if container.document_children</div><div class='del'>-            parse_module(container, single, tk, comment)</div><div class='del'>-	  else</div><div class='del'>-	    nest += 1</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-	when TkDEF</div><div class='del'>-	  if container.document_self</div><div class='del'>-	    parse_method(container, single, tk, comment)</div><div class='del'>-	  else</div><div class='del'>-	    nest += 1</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        when TkCONSTANT</div><div class='del'>-          if container.document_self</div><div class='del'>-            parse_constant(container, single, tk, comment)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-	when TkALIAS</div><div class='del'>- 	  if container.document_self</div><div class='del'>-	    parse_alias(container, single, tk, comment)</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-        when TkYIELD</div><div class='del'>-          if current_method.nil?</div><div class='del'>-            warn("Warning: yield outside of method") if container.document_self</div><div class='del'>-          else</div><div class='del'>-            parse_yield(container, single, tk, current_method)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          # Until and While can have a 'do', which shouldn't increas</div><div class='del'>-          # the nesting. We can't solve the general case, but we can</div><div class='del'>-          # handle most occurrences by ignoring a do at the end of a line</div><div class='del'>-</div><div class='del'>-        when  TkUNTIL, TkWHILE</div><div class='del'>-          nest += 1</div><div class='del'>-          puts "FOUND #{tk.class} in #{container.name}, nest = #{nest}, " +</div><div class='del'>-            "line #{tk.line_no}" if $DEBUG</div><div class='del'>-          skip_optional_do_after_expression</div><div class='del'>-</div><div class='del'>-          # 'for' is trickier</div><div class='del'>-        when TkFOR</div><div class='del'>-          nest += 1</div><div class='del'>-          puts "FOUND #{tk.class} in #{container.name}, nest = #{nest}, " +</div><div class='del'>-            "line #{tk.line_no}" if $DEBUG</div><div class='del'>-          skip_for_variable</div><div class='del'>-          skip_optional_do_after_expression</div><div class='del'>-</div><div class='del'>-	when TkCASE, TkDO, TkIF, TkUNLESS, TkBEGIN</div><div class='del'>-	  nest += 1</div><div class='del'>-          puts "Found #{tk.class} in #{container.name}, nest = #{nest}, " +</div><div class='del'>-            "line #{tk.line_no}" if $DEBUG</div><div class='del'>-</div><div class='del'>-	when TkIDENTIFIER</div><div class='del'>-          if nest == 1 and current_method.nil?</div><div class='del'>-            case tk.name</div><div class='del'>-            when "private", "protected", "public",</div><div class='del'>-                 "private_class_method", "public_class_method"</div><div class='del'>-              parse_visibility(container, single, tk)</div><div class='del'>-              keep_comment = true</div><div class='del'>-            when "attr"</div><div class='del'>-              parse_attr(container, single, tk, comment)</div><div class='del'>-            when /^attr_(reader|writer|accessor)$/, @options.extra_accessors</div><div class='del'>-              parse_attr_accessor(container, single, tk, comment)</div><div class='del'>-            when "alias_method"</div><div class='del'>-              if container.document_self</div><div class='del'>-	        parse_alias(container, single, tk, comment)</div><div class='del'>-	      end</div><div class='del'>-            end</div><div class='del'>-	  end</div><div class='del'>-	  </div><div class='del'>-	  case tk.name</div><div class='del'>-	  when "require"</div><div class='del'>-	    parse_require(container, comment)</div><div class='del'>-	  when "include"</div><div class='del'>-	    parse_include(container, comment)</div><div class='del'>-	  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-	when TkEND</div><div class='del'>-          nest -= 1</div><div class='del'>-          puts "Found 'end' in #{container.name}, nest = #{nest}, line #{tk.line_no}" if $DEBUG</div><div class='del'>-          puts "Method = #{current_method.name}" if $DEBUG and current_method</div><div class='del'>-	  if nest == 0</div><div class='del'>-            read_documentation_modifiers(container, CLASS_MODIFIERS)</div><div class='del'>-            container.ongoing_visibility = save_visibility</div><div class='del'>-            return</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-        comment = '' unless keep_comment</div><div class='del'>-	begin</div><div class='del'>-	  get_tkread</div><div class='del'>-	  skip_tkspace(false)</div><div class='del'>-	end while peek_tk == TkNL</div><div class='del'>-</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def parse_class(container, single, tk, comment, &amp;block)</div><div class='del'>-      progress("c")</div><div class='del'>-</div><div class='del'>-      @stats.num_classes += 1</div><div class='del'>-</div><div class='del'>-      container, name_t = get_class_or_module(container)</div><div class='del'>-</div><div class='del'>-      case name_t</div><div class='del'>-      when TkCONSTANT</div><div class='del'>-	name = name_t.name</div><div class='del'>-        superclass = "Object"</div><div class='del'>-</div><div class='del'>-        if peek_tk.kind_of?(TkLT)</div><div class='del'>-          get_tk</div><div class='del'>-          skip_tkspace(true)</div><div class='del'>-          superclass = get_class_specification</div><div class='del'>-          superclass = "&lt;unknown&gt;" if superclass.empty?</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-	if single == SINGLE</div><div class='del'>-	  cls_type = SingleClass</div><div class='del'>-	else</div><div class='del'>-	  cls_type = NormalClass</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-        cls = container.add_class(cls_type, name, superclass)</div><div class='del'>-        read_documentation_modifiers(cls, CLASS_MODIFIERS)</div><div class='del'>-        cls.record_location(@top_level)</div><div class='del'>-	parse_statements(cls)</div><div class='del'>-        cls.comment = comment</div><div class='del'>-</div><div class='del'>-      when TkLSHFT</div><div class='del'>-	case name = get_class_specification</div><div class='del'>-	when "self", container.name</div><div class='del'>-	  parse_statements(container, SINGLE, &amp;block)</div><div class='del'>-	else</div><div class='del'>-          other = TopLevel.find_class_named(name)</div><div class='del'>-          unless other</div><div class='del'>-#            other = @top_level.add_class(NormalClass, name, nil)</div><div class='del'>-#            other.record_location(@top_level)</div><div class='del'>-#            other.comment = comment</div><div class='del'>-            other = NormalClass.new("Dummy", nil)</div><div class='del'>-          end</div><div class='del'>-          read_documentation_modifiers(other, CLASS_MODIFIERS)</div><div class='del'>-          parse_statements(other, SINGLE, &amp;block)</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-	warn("Expected class name or '&lt;&lt;'. Got #{name_t.class}: #{name_t.text.inspect}")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_module(container, single, tk, comment)</div><div class='del'>-      progress("m")</div><div class='del'>-      @stats.num_modules += 1</div><div class='del'>-      container, name_t  = get_class_or_module(container)</div><div class='del'>-#      skip_tkspace</div><div class='del'>-      name = name_t.name</div><div class='del'>-      mod = container.add_module(NormalModule, name)</div><div class='del'>-      mod.record_location(@top_level)</div><div class='del'>-      read_documentation_modifiers(mod, CLASS_MODIFIERS)</div><div class='del'>-      parse_statements(mod)</div><div class='del'>-      mod.comment = comment</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Look for the name of a class of module (optionally with a leading :: or</div><div class='del'>-    # with :: separated named) and return the ultimate name and container</div><div class='del'>-</div><div class='del'>-    def get_class_or_module(container)</div><div class='del'>-      skip_tkspace</div><div class='del'>-      name_t = get_tk</div><div class='del'>-</div><div class='del'>-      # class ::A -&gt; A is in the top level</div><div class='del'>-      if name_t.kind_of?(TkCOLON2)</div><div class='del'>-        name_t = get_tk</div><div class='del'>-        container = @top_level</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-</div><div class='del'>-      while peek_tk.kind_of?(TkCOLON2)</div><div class='del'>-        prev_container = container</div><div class='del'>-        container = container.find_module_named(name_t.name)</div><div class='del'>-        if !container</div><div class='del'>-#          warn("Couldn't find module #{name_t.name}")</div><div class='del'>-          container = prev_container.add_module(NormalModule, name_t.name)</div><div class='del'>-        end</div><div class='del'>-        get_tk</div><div class='del'>-        name_t = get_tk</div><div class='del'>-      end</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      return [container, name_t]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_constant(container, single, tk, comment)</div><div class='del'>-      name = tk.name</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      eq_tk = get_tk</div><div class='del'>-</div><div class='del'>-      unless eq_tk.kind_of?(TkASSIGN)</div><div class='del'>-        unget_tk(eq_tk)</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      nest = 0</div><div class='del'>-      get_tkread</div><div class='del'>-</div><div class='del'>-      tk = get_tk</div><div class='del'>-      if tk.kind_of? TkGT</div><div class='del'>-        unget_tk(tk)</div><div class='del'>-        unget_tk(eq_tk)</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      loop do</div><div class='del'>-        puts("Param: #{tk}, #{@scanner.continue} " +</div><div class='del'>-          "#{@scanner.lex_state} #{nest}")  if $DEBUG</div><div class='del'>-</div><div class='del'>-        case tk</div><div class='del'>-        when TkSEMICOLON</div><div class='del'>-          break</div><div class='del'>-        when TkLPAREN, TkfLPAREN</div><div class='del'>-          nest += 1</div><div class='del'>-        when TkRPAREN</div><div class='del'>-          nest -= 1</div><div class='del'>-        when TkCOMMENT</div><div class='del'>-          if nest &lt;= 0 &amp;&amp; @scanner.lex_state == EXPR_END</div><div class='del'>-            unget_tk(tk)</div><div class='del'>-            break</div><div class='del'>-          end</div><div class='del'>-        when TkNL</div><div class='del'>-          if (@scanner.lex_state == EXPR_END and nest &lt;= 0) || !@scanner.continue</div><div class='del'>-            unget_tk(tk)</div><div class='del'>-            break</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        tk = get_tk</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      res = get_tkread.tr("\n", " ").strip</div><div class='del'>-      res = "" if res == ";"</div><div class='del'>-      con = Constant.new(name, res, comment)</div><div class='del'>-      read_documentation_modifiers(con, CONSTANT_MODIFIERS)</div><div class='del'>-      if con.document_self</div><div class='del'>-	container.add_constant(con)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_method(container, single, tk, comment)</div><div class='del'>-      progress(".")</div><div class='del'>-      @stats.num_methods += 1</div><div class='del'>-      line_no = tk.line_no</div><div class='del'>-      column  = tk.char_no</div><div class='del'>-      </div><div class='del'>-      start_collecting_tokens</div><div class='del'>-      add_token(tk)</div><div class='del'>-      add_token_listener(self)</div><div class='del'>-      </div><div class='del'>-      @scanner.instance_eval{@lex_state = EXPR_FNAME}</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      name_t = get_tk</div><div class='del'>-      back_tk = skip_tkspace</div><div class='del'>-      meth = nil</div><div class='del'>-      added_container = false</div><div class='del'>-</div><div class='del'>-      dot = get_tk</div><div class='del'>-      if dot.kind_of?(TkDOT) or dot.kind_of?(TkCOLON2)</div><div class='del'>-	@scanner.instance_eval{@lex_state = EXPR_FNAME}</div><div class='del'>-	skip_tkspace</div><div class='del'>-	name_t2 = get_tk</div><div class='del'>-	case name_t</div><div class='del'>-	when TkSELF</div><div class='del'>-	  name = name_t2.name</div><div class='del'>-	when TkCONSTANT</div><div class='del'>-          name = name_t2.name</div><div class='del'>-          prev_container = container</div><div class='del'>-          container = container.find_module_named(name_t.name)</div><div class='del'>-          if !container</div><div class='del'>-            added_container = true</div><div class='del'>-            obj = name_t.name.split("::").inject(Object) do |state, item|</div><div class='del'>-              state.const_get(item)</div><div class='del'>-            end rescue nil</div><div class='del'>-</div><div class='del'>-            type = obj.class == Class ? NormalClass : NormalModule</div><div class='del'>-            if not [Class, Module].include?(obj.class)</div><div class='del'>-              warn("Couldn't find #{name_t.name}. Assuming it's a module")</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if type == NormalClass then</div><div class='del'>-              container = prev_container.add_class(type, name_t.name, obj.superclass.name)</div><div class='del'>-            else</div><div class='del'>-              container = prev_container.add_module(type, name_t.name)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-	else</div><div class='del'>-	  # warn("Unexpected token '#{name_t2.inspect}'")</div><div class='del'>-	  # break</div><div class='del'>-          skip_method(container)</div><div class='del'>-          return</div><div class='del'>-	end</div><div class='del'>-	meth =  AnyMethod.new(get_tkread, name)</div><div class='del'>-        meth.singleton = true</div><div class='del'>-      else</div><div class='del'>-	unget_tk dot</div><div class='del'>-	back_tk.reverse_each do</div><div class='del'>-	  |tk|</div><div class='del'>-	  unget_tk tk</div><div class='del'>-	end</div><div class='del'>-	name = name_t.name</div><div class='del'>-</div><div class='del'>-        meth =  AnyMethod.new(get_tkread, name)</div><div class='del'>-        meth.singleton = (single == SINGLE)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      remove_token_listener(self)</div><div class='del'>-</div><div class='del'>-      meth.start_collecting_tokens</div><div class='del'>-      indent = TkSPACE.new(1,1)</div><div class='del'>-      indent.set_text(" " * column)</div><div class='del'>-</div><div class='del'>-      meth.add_tokens([TkCOMMENT.new(line_no,</div><div class='del'>-                                     1,</div><div class='del'>-                                     "# File #{@top_level.file_absolute_name}, line #{line_no}"),</div><div class='del'>-                        NEWLINE_TOKEN,</div><div class='del'>-                        indent])</div><div class='del'>-</div><div class='del'>-      meth.add_tokens(@token_stream)</div><div class='del'>-</div><div class='del'>-      add_token_listener(meth)</div><div class='del'>-</div><div class='del'>-      @scanner.instance_eval{@continue = false}</div><div class='del'>-      parse_method_parameters(meth)</div><div class='del'>-</div><div class='del'>-      if meth.document_self</div><div class='del'>-        container.add_method(meth)</div><div class='del'>-      elsif added_container</div><div class='del'>-        container.document_self = false</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Having now read the method parameters and documentation modifiers, we</div><div class='del'>-      # now know whether we have to rename #initialize to ::new</div><div class='del'>-</div><div class='del'>-      if name == "initialize" &amp;&amp; !meth.singleton</div><div class='del'>-        if meth.dont_rename_initialize</div><div class='del'>-          meth.visibility = :protected</div><div class='del'>-        else</div><div class='del'>-          meth.singleton = true</div><div class='del'>-          meth.name = "new"</div><div class='del'>-          meth.visibility = :public</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      parse_statements(container, single, meth)</div><div class='del'>-      </div><div class='del'>-      remove_token_listener(meth)</div><div class='del'>-</div><div class='del'>-      # Look for a 'call-seq' in the comment, and override the</div><div class='del'>-      # normal parameter stuff</div><div class='del'>-</div><div class='del'>-      if comment.sub!(/:?call-seq:(.*?)^\s*\#?\s*$/m, '')</div><div class='del'>-        seq = $1</div><div class='del'>-        seq.gsub!(/^\s*\#\s*/, '')</div><div class='del'>-        meth.call_seq = seq</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      meth.comment = comment</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def skip_method(container)</div><div class='del'>-      meth =  AnyMethod.new("", "anon")</div><div class='del'>-      parse_method_parameters(meth)</div><div class='del'>-      parse_statements(container, false, meth)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Capture the method's parameters. Along the way,</div><div class='del'>-    # look for a comment containing </div><div class='del'>-    #</div><div class='del'>-    #    # yields: ....</div><div class='del'>-    #</div><div class='del'>-    # and add this as the block_params for the method</div><div class='del'>-</div><div class='del'>-    def parse_method_parameters(method)</div><div class='del'>-      res = parse_method_or_yield_parameters(method)</div><div class='del'>-      res = "(" + res + ")" unless res[0] == ?(</div><div class='del'>-      method.params = res unless method.params</div><div class='del'>-      if method.block_params.nil?</div><div class='del'>-          skip_tkspace(false)</div><div class='del'>-	  read_documentation_modifiers(method, METHOD_MODIFIERS)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_method_or_yield_parameters(method=nil, modifiers=METHOD_MODIFIERS)</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      tk = get_tk</div><div class='del'>-</div><div class='del'>-      # Little hack going on here. In the statement</div><div class='del'>-      #  f = 2*(1+yield)</div><div class='del'>-      # We see the RPAREN as the next token, so we need</div><div class='del'>-      # to exit early. This still won't catch all cases</div><div class='del'>-      # (such as "a = yield + 1"</div><div class='del'>-      end_token = case tk</div><div class='del'>-                  when TkLPAREN, TkfLPAREN</div><div class='del'>-                    TkRPAREN</div><div class='del'>-                  when TkRPAREN</div><div class='del'>-                    return ""</div><div class='del'>-                  else</div><div class='del'>-                    TkNL</div><div class='del'>-                  end</div><div class='del'>-      nest = 0</div><div class='del'>-</div><div class='del'>-      loop do</div><div class='del'>-        puts("Param: #{tk.inspect}, #{@scanner.continue} " +</div><div class='del'>-          "#{@scanner.lex_state} #{nest}")  if $DEBUG</div><div class='del'>-        case tk</div><div class='del'>-        when TkSEMICOLON</div><div class='del'>-          break</div><div class='del'>-        when TkLBRACE</div><div class='del'>-          nest += 1</div><div class='del'>-        when TkRBRACE</div><div class='del'>-          # we might have a.each {|i| yield i }</div><div class='del'>-          unget_tk(tk) if nest.zero?</div><div class='del'>-          nest -= 1</div><div class='del'>-          break if nest &lt;= 0</div><div class='del'>-        when TkLPAREN, TkfLPAREN</div><div class='del'>-          nest += 1</div><div class='del'>-        when end_token</div><div class='del'>-          if end_token == TkRPAREN</div><div class='del'>-            nest -= 1</div><div class='del'>-            break if @scanner.lex_state == EXPR_END and nest &lt;= 0</div><div class='del'>-          else</div><div class='del'>-            break unless @scanner.continue</div><div class='del'>-          end</div><div class='del'>-        when method &amp;&amp; method.block_params.nil? &amp;&amp; TkCOMMENT</div><div class='del'>-	  unget_tk(tk)</div><div class='del'>-	  read_documentation_modifiers(method, modifiers)</div><div class='del'>-        end</div><div class='del'>-        tk = get_tk</div><div class='del'>-      end</div><div class='del'>-      res = get_tkread.tr("\n", " ").strip</div><div class='del'>-      res = "" if res == ";"</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # skip the var [in] part of a 'for' statement</div><div class='del'>-    def skip_for_variable</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      tk = get_tk</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      tk = get_tk</div><div class='del'>-      unget_tk(tk) unless tk.kind_of?(TkIN)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # while, until, and for have an optional </div><div class='del'>-    def skip_optional_do_after_expression</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      tk = get_tk</div><div class='del'>-      case tk</div><div class='del'>-      when TkLPAREN, TkfLPAREN</div><div class='del'>-        end_token = TkRPAREN</div><div class='del'>-      else</div><div class='del'>-        end_token = TkNL</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      nest = 0</div><div class='del'>-      @scanner.instance_eval{@continue = false}</div><div class='del'>-</div><div class='del'>-      loop do</div><div class='del'>-        puts("\nWhile: #{tk}, #{@scanner.continue} " +</div><div class='del'>-          "#{@scanner.lex_state} #{nest}") if $DEBUG</div><div class='del'>-        case tk</div><div class='del'>-        when TkSEMICOLON</div><div class='del'>-          break</div><div class='del'>-        when TkLPAREN, TkfLPAREN</div><div class='del'>-          nest += 1</div><div class='del'>-        when TkDO</div><div class='del'>-          break if nest.zero?</div><div class='del'>-        when end_token</div><div class='del'>-          if end_token == TkRPAREN</div><div class='del'>-            nest -= 1</div><div class='del'>-            break if @scanner.lex_state == EXPR_END and nest.zero?</div><div class='del'>-          else</div><div class='del'>-            break unless @scanner.continue</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        tk = get_tk</div><div class='del'>-      end</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      if peek_tk.kind_of? TkDO</div><div class='del'>-        get_tk</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Return a superclass, which can be either a constant</div><div class='del'>-    # of an expression</div><div class='del'>-</div><div class='del'>-    def get_class_specification</div><div class='del'>-      tk = get_tk</div><div class='del'>-      return "self" if tk.kind_of?(TkSELF)</div><div class='del'>-        </div><div class='del'>-      res = ""</div><div class='del'>-      while tk.kind_of?(TkCOLON2) ||</div><div class='del'>-          tk.kind_of?(TkCOLON3)   ||</div><div class='del'>-          tk.kind_of?(TkCONSTANT)   </div><div class='del'>-        </div><div class='del'>-        res += tk.text</div><div class='del'>-        tk = get_tk</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      unget_tk(tk)</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-</div><div class='del'>-      get_tkread # empty out read buffer</div><div class='del'>-</div><div class='del'>-      tk = get_tk</div><div class='del'>-</div><div class='del'>-      case tk</div><div class='del'>-      when TkNL, TkCOMMENT, TkSEMICOLON</div><div class='del'>-        unget_tk(tk)</div><div class='del'>-        return res</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      res += parse_call_parameters(tk)</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_call_parameters(tk)</div><div class='del'>-</div><div class='del'>-      end_token = case tk</div><div class='del'>-                  when TkLPAREN, TkfLPAREN</div><div class='del'>-                    TkRPAREN</div><div class='del'>-                  when TkRPAREN</div><div class='del'>-                    return ""</div><div class='del'>-                  else</div><div class='del'>-                    TkNL</div><div class='del'>-                  end</div><div class='del'>-      nest = 0</div><div class='del'>-</div><div class='del'>-      loop do</div><div class='del'>-        puts("Call param: #{tk}, #{@scanner.continue} " +</div><div class='del'>-          "#{@scanner.lex_state} #{nest}") if $DEBUG</div><div class='del'>-        case tk</div><div class='del'>-        when TkSEMICOLON</div><div class='del'>-          break</div><div class='del'>-        when TkLPAREN, TkfLPAREN</div><div class='del'>-          nest += 1</div><div class='del'>-        when end_token</div><div class='del'>-          if end_token == TkRPAREN</div><div class='del'>-            nest -= 1</div><div class='del'>-            break if @scanner.lex_state == EXPR_END and nest &lt;= 0</div><div class='del'>-          else</div><div class='del'>-            break unless @scanner.continue</div><div class='del'>-          end</div><div class='del'>-        when TkCOMMENT</div><div class='del'>-	  unget_tk(tk)</div><div class='del'>-	  break</div><div class='del'>-        end</div><div class='del'>-        tk = get_tk</div><div class='del'>-      end</div><div class='del'>-      res = get_tkread.tr("\n", " ").strip</div><div class='del'>-      res = "" if res == ";"</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Parse a constant, which might be qualified by</div><div class='del'>-    # one or more class or module names</div><div class='del'>-</div><div class='del'>-    def get_constant</div><div class='del'>-      res = ""</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      tk = get_tk</div><div class='del'>-</div><div class='del'>-      while tk.kind_of?(TkCOLON2) ||</div><div class='del'>-          tk.kind_of?(TkCOLON3)   ||</div><div class='del'>-          tk.kind_of?(TkCONSTANT)          </div><div class='del'>-        </div><div class='del'>-        res += tk.text</div><div class='del'>-        tk = get_tk</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-#      if res.empty?</div><div class='del'>-#        warn("Unexpected token #{tk} in constant")</div><div class='del'>-#      end </div><div class='del'>-      unget_tk(tk)</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get a constant that may be surrounded by parens</div><div class='del'>-    </div><div class='del'>-    def get_constant_with_optional_parens</div><div class='del'>-      skip_tkspace(false)</div><div class='del'>-      nest = 0</div><div class='del'>-      while (tk = peek_tk).kind_of?(TkLPAREN)  || tk.kind_of?(TkfLPAREN)</div><div class='del'>-        get_tk</div><div class='del'>-        skip_tkspace(true)</div><div class='del'>-        nest += 1</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      name = get_constant</div><div class='del'>-</div><div class='del'>-      while nest &gt; 0</div><div class='del'>-        skip_tkspace(true)</div><div class='del'>-        tk = get_tk</div><div class='del'>-        nest -= 1 if tk.kind_of?(TkRPAREN)</div><div class='del'>-      end</div><div class='del'>-      name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Directives are modifier comments that can appear after class, module,</div><div class='del'>-    # or method names. For example</div><div class='del'>-    #</div><div class='del'>-    #   def fred    # :yields:  a, b</div><div class='del'>-    #</div><div class='del'>-    # or</div><div class='del'>-    #</div><div class='del'>-    #   class SM  # :nodoc:</div><div class='del'>-    #</div><div class='del'>-    # we return the directive name and any parameters as a two element array</div><div class='del'>-    </div><div class='del'>-    def read_directive(allowed)</div><div class='del'>-      tk = get_tk</div><div class='del'>-      puts "directive: #{tk.inspect}" if $DEBUG</div><div class='del'>-      result = nil</div><div class='del'>-      if tk.kind_of?(TkCOMMENT) </div><div class='del'>-        if tk.text =~ /\s*:?(\w+):\s*(.*)/</div><div class='del'>-          directive = $1.downcase</div><div class='del'>-          if allowed.include?(directive)</div><div class='del'>-            result = [directive, $2]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        unget_tk(tk)</div><div class='del'>-      end</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    def read_documentation_modifiers(context, allow)</div><div class='del'>-      dir = read_directive(allow)</div><div class='del'>-</div><div class='del'>-      case dir[0]</div><div class='del'>-</div><div class='del'>-      when "notnew", "not_new", "not-new"</div><div class='del'>-        context.dont_rename_initialize = true</div><div class='del'>-</div><div class='del'>-      when "nodoc"</div><div class='del'>-        context.document_self = false</div><div class='del'>-	if dir[1].downcase == "all"</div><div class='del'>-	  context.document_children = false</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-      when "doc"</div><div class='del'>-        context.document_self = true</div><div class='del'>-        context.force_documentation = true</div><div class='del'>-</div><div class='del'>-      when "yield", "yields"</div><div class='del'>-        unless context.params.nil?</div><div class='del'>-          context.params.sub!(/(,|)\s*&amp;\w+/,'') # remove parameter &amp;proc</div><div class='del'>-        end</div><div class='del'>-	context.block_params = dir[1]</div><div class='del'>-</div><div class='del'>-      when "arg", "args"</div><div class='del'>-        context.params = dir[1]</div><div class='del'>-      end if dir</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    # Look for directives in a normal comment block:</div><div class='del'>-    #</div><div class='del'>-    #   #--       - don't display comment from this point forward</div><div class='del'>-    #  </div><div class='del'>-    #</div><div class='del'>-    # This routine modifies it's parameter</div><div class='del'>-</div><div class='del'>-    def look_for_directives_in(context, comment)</div><div class='del'>-</div><div class='del'>-      preprocess = SM::PreProcess.new(@input_file_name,</div><div class='del'>-                                      @options.rdoc_include)</div><div class='del'>-</div><div class='del'>-      preprocess.handle(comment) do |directive, param|</div><div class='del'>-        case directive</div><div class='del'>-        when "stopdoc"</div><div class='del'>-          context.stop_doc</div><div class='del'>-          ""</div><div class='del'>-        when "startdoc"</div><div class='del'>-          context.start_doc</div><div class='del'>-          context.force_documentation = true</div><div class='del'>-          ""</div><div class='del'>-</div><div class='del'>-        when "enddoc"</div><div class='del'>-          #context.done_documenting = true</div><div class='del'>-          #""</div><div class='del'>-          throw :enddoc</div><div class='del'>-</div><div class='del'>-        when "main"</div><div class='del'>-          options = Options.instance</div><div class='del'>-          options.main_page = param</div><div class='del'>-	  ""</div><div class='del'>-</div><div class='del'>-        when "title"</div><div class='del'>-          options = Options.instance</div><div class='del'>-          options.title = param</div><div class='del'>-          ""</div><div class='del'>-</div><div class='del'>-        when "section"</div><div class='del'>-          context.set_current_section(param, comment)</div><div class='del'>-          comment.replace("") # 1.8 doesn't support #clear</div><div class='del'>-          break </div><div class='del'>-        else</div><div class='del'>-          warn "Unrecognized directive '#{directive}'"</div><div class='del'>-          break</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      remove_private_comments(comment)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_private_comments(comment)</div><div class='del'>-      comment.gsub!(/^#--.*?^#\+\+/m, '')</div><div class='del'>-      comment.sub!(/^#--.*/m, '')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def get_symbol_or_name</div><div class='del'>-      tk = get_tk</div><div class='del'>-      case tk</div><div class='del'>-      when  TkSYMBOL</div><div class='del'>-        tk.text.sub(/^:/, '')</div><div class='del'>-      when TkId, TkOp</div><div class='del'>-        tk.name</div><div class='del'>-      when TkSTRING</div><div class='del'>-        tk.text</div><div class='del'>-      else</div><div class='del'>-        raise "Name or symbol expected (got #{tk})"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def parse_alias(context, single, tk, comment)</div><div class='del'>-      skip_tkspace</div><div class='del'>-      if (peek_tk.kind_of? TkLPAREN)</div><div class='del'>-        get_tk</div><div class='del'>-        skip_tkspace</div><div class='del'>-      end</div><div class='del'>-      new_name = get_symbol_or_name</div><div class='del'>-      @scanner.instance_eval{@lex_state = EXPR_FNAME}</div><div class='del'>-      skip_tkspace</div><div class='del'>-      if (peek_tk.kind_of? TkCOMMA)</div><div class='del'>-        get_tk</div><div class='del'>-        skip_tkspace</div><div class='del'>-      end</div><div class='del'>-      old_name = get_symbol_or_name</div><div class='del'>-</div><div class='del'>-      al = Alias.new(get_tkread, old_name, new_name, comment)</div><div class='del'>-      read_documentation_modifiers(al, ATTR_MODIFIERS)</div><div class='del'>-      if al.document_self</div><div class='del'>-	context.add_alias(al)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_yield_parameters</div><div class='del'>-      parse_method_or_yield_parameters</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  def parse_yield(context, single, tk, method)</div><div class='del'>-    if method.block_params.nil?</div><div class='del'>-      get_tkread</div><div class='del'>-      @scanner.instance_eval{@continue = false}</div><div class='del'>-      method.block_params = parse_yield_parameters</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parse_require(context, comment)</div><div class='del'>-    skip_tkspace_comment</div><div class='del'>-    tk = get_tk</div><div class='del'>-    if tk.kind_of? TkLPAREN</div><div class='del'>-      skip_tkspace_comment</div><div class='del'>-      tk = get_tk</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    name = nil</div><div class='del'>-    case tk</div><div class='del'>-    when TkSTRING</div><div class='del'>-      name = tk.text</div><div class='del'>-#    when TkCONSTANT, TkIDENTIFIER, TkIVAR, TkGVAR</div><div class='del'>-#      name = tk.name</div><div class='del'>-    when TkDSTRING</div><div class='del'>-      warn "Skipping require of dynamic string: #{tk.text}"</div><div class='del'>- #   else</div><div class='del'>- #     warn "'require' used as variable"</div><div class='del'>-    end</div><div class='del'>-    if name</div><div class='del'>-      context.add_require(Require.new(name, comment))</div><div class='del'>-    else</div><div class='del'>-      unget_tk(tk)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def parse_include(context, comment)</div><div class='del'>-    loop do</div><div class='del'>-      skip_tkspace_comment</div><div class='del'>-      name = get_constant_with_optional_parens</div><div class='del'>-      unless name.empty?</div><div class='del'>-        context.add_include(Include.new(name, comment))</div><div class='del'>-      end</div><div class='del'>-      return unless peek_tk.kind_of?(TkCOMMA)</div><div class='del'>-      get_tk</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-    def get_bool</div><div class='del'>-      skip_tkspace</div><div class='del'>-      tk = get_tk</div><div class='del'>-      case tk</div><div class='del'>-      when TkTRUE</div><div class='del'>-        true</div><div class='del'>-      when TkFALSE, TkNIL</div><div class='del'>-        false</div><div class='del'>-      else</div><div class='del'>-        unget_tk tk</div><div class='del'>-        true</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_attr(context, single, tk, comment)</div><div class='del'>-      args = parse_symbol_arg(1)</div><div class='del'>-      if args.size &gt; 0</div><div class='del'>-	name = args[0]</div><div class='del'>-        rw = "R"</div><div class='del'>-        skip_tkspace(false)</div><div class='del'>-        tk = get_tk</div><div class='del'>-        if tk.kind_of? TkCOMMA</div><div class='del'>-          rw = "RW" if get_bool</div><div class='del'>-        else</div><div class='del'>-          unget_tk tk</div><div class='del'>-        end</div><div class='del'>-	att = Attr.new(get_tkread, name, rw, comment)</div><div class='del'>-	read_documentation_modifiers(att, ATTR_MODIFIERS)</div><div class='del'>-	if att.document_self</div><div class='del'>-	  context.add_attribute(att)</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	warn("'attr' ignored - looks like a variable")</div><div class='del'>-      end    </div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_visibility(container, single, tk)</div><div class='del'>-      singleton = (single == SINGLE)</div><div class='del'>-      vis = case tk.name</div><div class='del'>-            when "private"   then :private</div><div class='del'>-            when "protected" then :protected</div><div class='del'>-            when "public"    then :public</div><div class='del'>-            when "private_class_method"</div><div class='del'>-              singleton = true</div><div class='del'>-              :private</div><div class='del'>-            when "public_class_method"</div><div class='del'>-              singleton = true</div><div class='del'>-              :public</div><div class='del'>-            else raise "Invalid visibility: #{tk.name}"</div><div class='del'>-            end</div><div class='del'>-            </div><div class='del'>-      skip_tkspace_comment(false)</div><div class='del'>-      case peek_tk</div><div class='del'>-        # Ryan Davis suggested the extension to ignore modifiers, because he</div><div class='del'>-        # often writes</div><div class='del'>-        #</div><div class='del'>-        #   protected unless $TESTING</div><div class='del'>-        #</div><div class='del'>-      when TkNL, TkUNLESS_MOD, TkIF_MOD</div><div class='del'>-#        error("Missing argument") if singleton        </div><div class='del'>-        container.ongoing_visibility = vis</div><div class='del'>-      else</div><div class='del'>-        args = parse_symbol_arg</div><div class='del'>-        container.set_visibility_for(args, vis, singleton)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_attr_accessor(context, single, tk, comment)</div><div class='del'>-      args = parse_symbol_arg</div><div class='del'>-      read = get_tkread</div><div class='del'>-      rw = "?"</div><div class='del'>-</div><div class='del'>-      # If nodoc is given, don't document any of them</div><div class='del'>-</div><div class='del'>-      tmp = CodeObject.new</div><div class='del'>-      read_documentation_modifiers(tmp, ATTR_MODIFIERS)</div><div class='del'>-      return unless tmp.document_self</div><div class='del'>-</div><div class='del'>-      case tk.name</div><div class='del'>-      when "attr_reader"   then rw = "R"</div><div class='del'>-      when "attr_writer"   then rw = "W"</div><div class='del'>-      when "attr_accessor" then rw = "RW"</div><div class='del'>-      else</div><div class='del'>-        rw = @options.extra_accessor_flags[tk.name]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      for name in args</div><div class='del'>-	att = Attr.new(get_tkread, name, rw, comment)</div><div class='del'>-        context.add_attribute(att)</div><div class='del'>-      end    </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def skip_tkspace_comment(skip_nl = true)</div><div class='del'>-      loop do</div><div class='del'>-        skip_tkspace(skip_nl)</div><div class='del'>-        return unless peek_tk.kind_of? TkCOMMENT</div><div class='del'>-        get_tk</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_symbol_arg(no = nil)</div><div class='del'>-</div><div class='del'>-      args = []</div><div class='del'>-      skip_tkspace_comment</div><div class='del'>-      case tk = get_tk</div><div class='del'>-      when TkLPAREN</div><div class='del'>-	loop do</div><div class='del'>-	  skip_tkspace_comment</div><div class='del'>-	  if tk1 = parse_symbol_in_arg</div><div class='del'>-	    args.push tk1</div><div class='del'>-	    break if no and args.size &gt;= no</div><div class='del'>-	  end</div><div class='del'>-	  </div><div class='del'>-	  skip_tkspace_comment</div><div class='del'>-	  case tk2 = get_tk</div><div class='del'>-	  when TkRPAREN</div><div class='del'>-	    break</div><div class='del'>-	  when TkCOMMA</div><div class='del'>-	  else</div><div class='del'>-           warn("unexpected token: '#{tk2.inspect}'") if $DEBUG</div><div class='del'>-	    break</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      else</div><div class='del'>-	unget_tk tk</div><div class='del'>-	if tk = parse_symbol_in_arg</div><div class='del'>-	  args.push tk</div><div class='del'>-	  return args if no and args.size &gt;= no</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	loop do</div><div class='del'>-#	  skip_tkspace_comment(false)</div><div class='del'>-	  skip_tkspace(false)</div><div class='del'>-</div><div class='del'>-	  tk1 = get_tk</div><div class='del'>-	  unless tk1.kind_of?(TkCOMMA) </div><div class='del'>-	    unget_tk tk1</div><div class='del'>-	    break</div><div class='del'>-	  end</div><div class='del'>-	  </div><div class='del'>-	  skip_tkspace_comment</div><div class='del'>-	  if tk = parse_symbol_in_arg</div><div class='del'>-	    args.push tk</div><div class='del'>-	    break if no and args.size &gt;= no</div><div class='del'>-	  end</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      args</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse_symbol_in_arg</div><div class='del'>-      case tk = get_tk</div><div class='del'>-      when TkSYMBOL</div><div class='del'>-        tk.text.sub(/^:/, '')</div><div class='del'>-      when TkSTRING</div><div class='del'>-	eval @read[-1]</div><div class='del'>-      else</div><div class='del'>-	warn("Expected symbol or string, got #{tk.inspect}") if $DEBUG</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'>-end</div><div class='head'>diff --git a/lib/rdoc/parsers/parse_simple.rb b/lib/rdoc/parsers/parse_simple.rb<br/>deleted file mode 100644<br/>index 3f1a546964..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/parsers/parse_simple.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/parsers/parse_simple.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,41 +0,0 @@</div><div class='del'>-# Parse a non-source file. We basically take the whole thing </div><div class='del'>-# as one big comment. If the first character in the file</div><div class='del'>-# is '#', we strip leading pound signs.</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require "rdoc/code_objects"</div><div class='del'>-require "rdoc/markup/simple_markup/preprocess"</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-  # See rdoc/parsers/parse_c.rb</div><div class='del'>-</div><div class='del'>-  class SimpleParser</div><div class='del'>-    </div><div class='del'>-    # prepare to parse a plain file</div><div class='del'>-    def initialize(top_level, file_name, body, options, stats)</div><div class='del'>-      </div><div class='del'>-      preprocess = SM::PreProcess.new(file_name, options.rdoc_include)</div><div class='del'>-      </div><div class='del'>-      preprocess.handle(body) do |directive, param|</div><div class='del'>-        $stderr.puts "Unrecognized directive '#{directive}' in #{file_name}"</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      @body = body</div><div class='del'>-      @options = options</div><div class='del'>-      @top_level = top_level</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Extract the file contents and attach them to the toplevel as a</div><div class='del'>-    # comment</div><div class='del'>-    </div><div class='del'>-    def scan</div><div class='del'>-      #    @body.gsub(/^(\s\n)+/, '')</div><div class='del'>-      @top_level.comment = remove_private_comments(@body)</div><div class='del'>-      @top_level</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_private_comments(comment)</div><div class='del'>-      comment.gsub(/^--.*?^\+\+/m, '').sub(/^--.*/m, '')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/parsers/parserfactory.rb b/lib/rdoc/parsers/parserfactory.rb<br/>deleted file mode 100644<br/>index 00a82cf4b1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/parsers/parserfactory.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/parsers/parserfactory.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,99 +0,0 @@</div><div class='del'>-require "rdoc/parsers/parse_simple"</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-  # A parser is simple a class that implements</div><div class='del'>-  #</div><div class='del'>-  #   #initialize(file_name, body, options)</div><div class='del'>-  #</div><div class='del'>-  # and</div><div class='del'>-  #</div><div class='del'>-  #   #scan</div><div class='del'>-  #</div><div class='del'>-  # The initialize method takes a file name to be used, the body of the</div><div class='del'>-  # file, and an RDoc::Options object. The scan method is then called</div><div class='del'>-  # to return an appropriately parsed TopLevel code object.</div><div class='del'>-  #</div><div class='del'>-  # The ParseFactory is used to redirect to the correct parser given a filename</div><div class='del'>-  # extension. This magic works because individual parsers have to register </div><div class='del'>-  # themselves with us as they are loaded in. The do this using the following</div><div class='del'>-  # incantation</div><div class='del'>-  #</div><div class='del'>-  #</div><div class='del'>-  #    require "rdoc/parsers/parsefactory"</div><div class='del'>-  #    </div><div class='del'>-  #    module RDoc</div><div class='del'>-  #    </div><div class='del'>-  #      class XyzParser</div><div class='del'>-  #        extend ParseFactory                  &lt;&lt;&lt;&lt;</div><div class='del'>-  #        parse_files_matching /\.xyz$/        &lt;&lt;&lt;&lt;</div><div class='del'>-  #    </div><div class='del'>-  #        def initialize(file_name, body, options)</div><div class='del'>-  #          ...</div><div class='del'>-  #        end</div><div class='del'>-  #    </div><div class='del'>-  #        def scan</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'>-  # Just to make life interesting, if we suspect a plain text file, we</div><div class='del'>-  # also look for a shebang line just in case it's a potential</div><div class='del'>-  # shell script</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  module ParserFactory</div><div class='del'>-</div><div class='del'>-    @@parsers = []</div><div class='del'>-</div><div class='del'>-    Parsers = Struct.new(:regexp, :parser)</div><div class='del'>-</div><div class='del'>-    # Record the fact that a particular class parses files that</div><div class='del'>-    # match a given extension</div><div class='del'>-</div><div class='del'>-    def parse_files_matching(regexp)</div><div class='del'>-      @@parsers.unshift Parsers.new(regexp, self)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return a parser that can handle a particular extension</div><div class='del'>-</div><div class='del'>-    def ParserFactory.can_parse(file_name)</div><div class='del'>-      @@parsers.find {|p| p.regexp.match(file_name) }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Alias an extension to another extension. After this call,</div><div class='del'>-    # files ending "new_ext" will be parsed using the same parser</div><div class='del'>-    # as "old_ext"</div><div class='del'>-</div><div class='del'>-    def ParserFactory.alias_extension(old_ext, new_ext)</div><div class='del'>-      parser = ParserFactory.can_parse("xxx.#{old_ext}")</div><div class='del'>-      return false unless parser</div><div class='del'>-      @@parsers.unshift Parsers.new(Regexp.new("\\.#{new_ext}$"), parser.parser)</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find the correct parser for a particular file name. Return a </div><div class='del'>-    # SimpleParser for ones that we don't know</div><div class='del'>-</div><div class='del'>-    def ParserFactory.parser_for(top_level, file_name, body, options, stats)</div><div class='del'>-      # If no extension, look for shebang</div><div class='del'>-      if file_name !~ /\.\w+$/ &amp;&amp; body =~ %r{\A#!(.+)}</div><div class='del'>-        shebang = $1</div><div class='del'>-        case shebang</div><div class='del'>-        when %r{env\s+ruby}, %r{/ruby}</div><div class='del'>-          file_name = "dummy.rb"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      parser_description = can_parse(file_name)</div><div class='del'>-      if parser_description</div><div class='del'>-        parser = parser_description.parser </div><div class='del'>-      else</div><div class='del'>-        parser = SimpleParser</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      parser.new(top_level, file_name, body, options, stats)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/rdoc.rb b/lib/rdoc/rdoc.rb<br/>deleted file mode 100644<br/>index 91f5611196..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/rdoc.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/rdoc.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,298 +0,0 @@</div><div class='del'>-# See README.</div><div class='del'>-#</div><div class='del'>- </div><div class='del'>-</div><div class='del'>-VERSION_STRING = %{RDoc V1.0.1 - 20041108}</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-require 'rdoc/parsers/parse_rb.rb'</div><div class='del'>-require 'rdoc/parsers/parse_c.rb'</div><div class='del'>-require 'rdoc/parsers/parse_f95.rb'</div><div class='del'>-</div><div class='del'>-require 'rdoc/parsers/parse_simple.rb'</div><div class='del'>-require 'rdoc/options'</div><div class='del'>-</div><div class='del'>-require 'rdoc/diagram'</div><div class='del'>-</div><div class='del'>-require 'find'</div><div class='del'>-require 'ftools'</div><div class='del'>-require 'time'</div><div class='del'>-</div><div class='del'>-# We put rdoc stuff in the RDoc module to avoid namespace</div><div class='del'>-# clutter.</div><div class='del'>-#</div><div class='del'>-# ToDo: This isn't universally true.</div><div class='del'>-#</div><div class='del'>-# :include: README</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-  # Name of the dotfile that contains the description of files to be</div><div class='del'>-  # processed in the current directory</div><div class='del'>-  DOT_DOC_FILENAME = ".document"</div><div class='del'>-</div><div class='del'>-  # Simple stats collector</div><div class='del'>-  class Stats</div><div class='del'>-    attr_accessor :num_files, :num_classes, :num_modules, :num_methods</div><div class='del'>-    def initialize</div><div class='del'>-      @num_files = @num_classes = @num_modules = @num_methods = 0</div><div class='del'>-      @start = Time.now</div><div class='del'>-    end</div><div class='del'>-    def print</div><div class='del'>-      puts "Files:   #@num_files"</div><div class='del'>-      puts "Classes: #@num_classes"</div><div class='del'>-      puts "Modules: #@num_modules"</div><div class='del'>-      puts "Methods: #@num_methods"</div><div class='del'>-      puts "Elapsed: " + sprintf("%0.3fs", Time.now - @start)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Exception thrown by any rdoc error. Only the #message part is</div><div class='del'>-  # of use externally.</div><div class='del'>-</div><div class='del'>-  class RDocError &lt; Exception</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Encapsulate the production of rdoc documentation. Basically</div><div class='del'>-  # you can use this as you would invoke rdoc from the command</div><div class='del'>-  # line:</div><div class='del'>-  #</div><div class='del'>-  #    rdoc = RDoc::RDoc.new</div><div class='del'>-  #    rdoc.document(args)</div><div class='del'>-  #</div><div class='del'>-  # where _args_ is an array of strings, each corresponding to</div><div class='del'>-  # an argument you'd give rdoc on the command line. See rdoc/rdoc.rb </div><div class='del'>-  # for details.</div><div class='del'>-  </div><div class='del'>-  class RDoc</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # This is the list of output generators that we</div><div class='del'>-    # support</div><div class='del'>-    </div><div class='del'>-    Generator = Struct.new(:file_name, :class_name, :key)</div><div class='del'>-    </div><div class='del'>-    GENERATORS = {}</div><div class='del'>-    $:.collect {|d|</div><div class='del'>-      File::expand_path(d)</div><div class='del'>-    }.find_all {|d|</div><div class='del'>-      File::directory?("#{d}/rdoc/generators")</div><div class='del'>-    }.each {|dir|</div><div class='del'>-      Dir::entries("#{dir}/rdoc/generators").each {|gen|</div><div class='del'>-        next unless /(\w+)_generator.rb$/ =~ gen</div><div class='del'>-        type = $1</div><div class='del'>-        unless GENERATORS.has_key? type</div><div class='del'>-          GENERATORS[type] = Generator.new("rdoc/generators/#{gen}",</div><div class='del'>-                                           "#{type.upcase}Generator".intern,</div><div class='del'>-                                           type)</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'>-    private</div><div class='del'>-    #######</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Report an error message and exit</div><div class='del'>-    </div><div class='del'>-    def error(msg)</div><div class='del'>-      raise RDocError.new(msg)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ##</div><div class='del'>-    # Create an output dir if it doesn't exist. If it does</div><div class='del'>-    # exist, but doesn't contain the flag file &lt;tt&gt;created.rid&lt;/tt&gt;</div><div class='del'>-    # then we refuse to use it, as we may clobber some</div><div class='del'>-    # manually generated documentation</div><div class='del'>-    </div><div class='del'>-    def setup_output_dir(op_dir, force)</div><div class='del'>-      flag_file = output_flag_file(op_dir)</div><div class='del'>-      if File.exist?(op_dir)</div><div class='del'>-        unless File.directory?(op_dir)</div><div class='del'>-          error "'#{op_dir}' exists, and is not a directory" </div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          created = File.read(flag_file)</div><div class='del'>-        rescue SystemCallError</div><div class='del'>-          error "\nDirectory #{op_dir} already exists, but it looks like it\n" +</div><div class='del'>-            "isn't an RDoc directory. Because RDoc doesn't want to risk\n" +</div><div class='del'>-            "destroying any of your existing files, you'll need to\n" +</div><div class='del'>-            "specify a different output directory name (using the\n" +</div><div class='del'>-            "--op &lt;dir&gt; option).\n\n"</div><div class='del'>-        else</div><div class='del'>-          last = (Time.parse(created) unless force rescue nil)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        File.makedirs(op_dir)</div><div class='del'>-      end</div><div class='del'>-      last</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Update the flag file in an output directory.</div><div class='del'>-    def update_output_dir(op_dir, time)</div><div class='del'>-      File.open(output_flag_file(op_dir), "w") {|f| f.puts time.rfc2822 }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return the path name of the flag file in an output directory.</div><div class='del'>-    def output_flag_file(op_dir)</div><div class='del'>-      File.join(op_dir, "created.rid")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The .document file contains a list of file and directory name</div><div class='del'>-    # patterns, representing candidates for documentation. It may</div><div class='del'>-    # also contain comments (starting with '#')</div><div class='del'>-    def parse_dot_doc_file(in_dir, filename, options)</div><div class='del'>-      # read and strip comments</div><div class='del'>-      patterns = File.read(filename).gsub(/#.*/, '')</div><div class='del'>-</div><div class='del'>-      result = []</div><div class='del'>-</div><div class='del'>-      patterns.split.each do |patt|</div><div class='del'>-        candidates = Dir.glob(File.join(in_dir, patt))</div><div class='del'>-        result.concat(normalized_file_list(options,  candidates))</div><div class='del'>-      end</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Given a list of files and directories, create a list</div><div class='del'>-    # of all the Ruby files they contain. </div><div class='del'>-    #</div><div class='del'>-    # If +force_doc+ is true, we always add the given files.</div><div class='del'>-    # If false, only add files that we guarantee we can parse</div><div class='del'>-    # It is true when looking at files given on the command line,</div><div class='del'>-    # false when recursing through subdirectories. </div><div class='del'>-    #</div><div class='del'>-    # The effect of this is that if you want a file with a non-</div><div class='del'>-    # standard extension parsed, you must name it explicity.</div><div class='del'>-    #</div><div class='del'>-</div><div class='del'>-    def normalized_file_list(options, relative_files, force_doc = false, exclude_pattern=nil)</div><div class='del'>-      file_list = []</div><div class='del'>-</div><div class='del'>-      relative_files.each do |rel_file_name|</div><div class='del'>-        next if exclude_pattern &amp;&amp; exclude_pattern =~ rel_file_name</div><div class='del'>-        stat = File.stat(rel_file_name)</div><div class='del'>-        case type = stat.ftype</div><div class='del'>-        when "file"</div><div class='del'>-          next if @last_created and stat.mtime &lt; @last_created</div><div class='del'>-          file_list &lt;&lt; rel_file_name.sub(/^\.\//, '') if force_doc || ParserFactory.can_parse(rel_file_name)</div><div class='del'>-        when "directory"</div><div class='del'>-          next if rel_file_name == "CVS" || rel_file_name == ".svn"</div><div class='del'>-          dot_doc = File.join(rel_file_name, DOT_DOC_FILENAME)</div><div class='del'>-          if File.file?(dot_doc)</div><div class='del'>-            file_list.concat(parse_dot_doc_file(rel_file_name, dot_doc, options))</div><div class='del'>-          else</div><div class='del'>-            file_list.concat(list_files_in_directory(rel_file_name, options))</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          raise RDocError.new("I can't deal with a #{type} #{rel_file_name}")</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      file_list</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return a list of the files to be processed in</div><div class='del'>-    # a directory. We know that this directory doesn't have</div><div class='del'>-    # a .document file, so we're looking for real files. However</div><div class='del'>-    # we may well contain subdirectories which must</div><div class='del'>-    # be tested for .document files</div><div class='del'>-    def list_files_in_directory(dir, options)</div><div class='del'>-      normalized_file_list(options, Dir.glob(File.join(dir, "*")), false, options.exclude)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Parse each file on the command line, recursively entering</div><div class='del'>-    # directories</div><div class='del'>-</div><div class='del'>-    def parse_files(options)</div><div class='del'>- </div><div class='del'>-      file_info = []</div><div class='del'>-</div><div class='del'>-      files = options.files</div><div class='del'>-      files = ["."] if files.empty?</div><div class='del'>-</div><div class='del'>-      file_list = normalized_file_list(options, files, true)</div><div class='del'>-</div><div class='del'>-      file_list.each do |fn|</div><div class='del'>-        $stderr.printf("\n%35s: ", File.basename(fn)) unless options.quiet</div><div class='del'>-        </div><div class='del'>-        content = File.open(fn, "r") {|f| f.read}</div><div class='del'>-</div><div class='del'>-        top_level = TopLevel.new(fn)</div><div class='del'>-        parser = ParserFactory.parser_for(top_level, fn, content, options, @stats)</div><div class='del'>-        file_info &lt;&lt; parser.scan</div><div class='del'>-        @stats.num_files += 1</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      file_info</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'>-    ###################################################################</div><div class='del'>-    #</div><div class='del'>-    # Format up one or more files according to the given arguments.</div><div class='del'>-    # For simplicity, _argv_ is an array of strings, equivalent to the</div><div class='del'>-    # strings that would be passed on the command line. (This isn't a</div><div class='del'>-    # coincidence, as we _do_ pass in ARGV when running</div><div class='del'>-    # interactively). For a list of options, see rdoc/rdoc.rb. By</div><div class='del'>-    # default, output will be stored in a directory called +doc+ below</div><div class='del'>-    # the current directory, so make sure you're somewhere writable</div><div class='del'>-    # before invoking.</div><div class='del'>-    #</div><div class='del'>-    # Throws: RDocError on error</div><div class='del'>-</div><div class='del'>-    def document(argv)</div><div class='del'>-</div><div class='del'>-      TopLevel::reset</div><div class='del'>-</div><div class='del'>-      @stats = Stats.new</div><div class='del'>-</div><div class='del'>-      options = Options.instance</div><div class='del'>-      options.parse(argv, GENERATORS)</div><div class='del'>-</div><div class='del'>-      @last_created = nil</div><div class='del'>-      unless options.all_one_file</div><div class='del'>-        @last_created = setup_output_dir(options.op_dir, options.force_update)</div><div class='del'>-      end</div><div class='del'>-      start_time = Time.now</div><div class='del'>-</div><div class='del'>-      file_info = parse_files(options)</div><div class='del'>-</div><div class='del'>-      if file_info.empty?</div><div class='del'>-        $stderr.puts "\nNo newer files." unless options.quiet</div><div class='del'>-      else</div><div class='del'>-        gen = options.generator</div><div class='del'>-</div><div class='del'>-        $stderr.puts "\nGenerating #{gen.key.upcase}..." unless options.quiet</div><div class='del'>-</div><div class='del'>-        require gen.file_name</div><div class='del'>-</div><div class='del'>-        gen_class = Generators.const_get(gen.class_name)</div><div class='del'>-        gen = gen_class.for(options)</div><div class='del'>-</div><div class='del'>-        pwd = Dir.pwd</div><div class='del'>-</div><div class='del'>-        Dir.chdir(options.op_dir)  unless options.all_one_file</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          Diagram.new(file_info, options).draw if options.diagram</div><div class='del'>-          gen.generate(file_info)</div><div class='del'>-          update_output_dir(".", start_time)</div><div class='del'>-        ensure</div><div class='del'>-          Dir.chdir(pwd)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      unless options.quiet</div><div class='del'>-        puts</div><div class='del'>-        @stats.print</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='head'>diff --git a/lib/rdoc/ri/ri_cache.rb b/lib/rdoc/ri/ri_cache.rb<br/>deleted file mode 100644<br/>index 1844ac969e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_cache.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_cache.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,187 +0,0 @@</div><div class='del'>-module RI</div><div class='del'>-</div><div class='del'>-  class ClassEntry</div><div class='del'>-</div><div class='del'>-    attr_reader :name</div><div class='del'>-    attr_reader :path_names</div><div class='del'>-    </div><div class='del'>-    def initialize(path_name, name, in_class)</div><div class='del'>-      @path_names = [ path_name ]</div><div class='del'>-      @name = name</div><div class='del'>-      @in_class = in_class</div><div class='del'>-      @class_methods    = []</div><div class='del'>-      @instance_methods = []</div><div class='del'>-      @inferior_classes = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # We found this class in more tha one place, so add</div><div class='del'>-    # in the name from there.</div><div class='del'>-    def add_path(path)</div><div class='del'>-      @path_names &lt;&lt; path</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # read in our methods and any classes</div><div class='del'>-    # and modules in our namespace. Methods are</div><div class='del'>-    # stored in files called name-c|i.yaml,</div><div class='del'>-    # where the 'name' portion is the external</div><div class='del'>-    # form of the method name and the c|i is a class|instance</div><div class='del'>-    # flag</div><div class='del'>-</div><div class='del'>-    def load_from(dir)</div><div class='del'>-      Dir.foreach(dir) do |name|</div><div class='del'>-        next if name =~ /^\./</div><div class='del'>-</div><div class='del'>-        # convert from external to internal form, and</div><div class='del'>-        # extract the instance/class flag</div><div class='del'>-</div><div class='del'>-        if name =~ /^(.*?)-(c|i).yaml$/</div><div class='del'>-          external_name = $1</div><div class='del'>-          is_class_method = $2 == "c"</div><div class='del'>-          internal_name = RiWriter.external_to_internal(external_name)</div><div class='del'>-          list = is_class_method ? @class_methods : @instance_methods</div><div class='del'>-          path = File.join(dir, name)</div><div class='del'>-          list &lt;&lt; MethodEntry.new(path, internal_name, is_class_method, self)</div><div class='del'>-        else</div><div class='del'>-          full_name = File.join(dir, name)</div><div class='del'>-          if File.directory?(full_name)</div><div class='del'>-            inf_class = @inferior_classes.find {|c| c.name == name }</div><div class='del'>-            if inf_class</div><div class='del'>-              inf_class.add_path(full_name)</div><div class='del'>-            else</div><div class='del'>-              inf_class = ClassEntry.new(full_name, name, self)</div><div class='del'>-              @inferior_classes &lt;&lt; inf_class</div><div class='del'>-            end</div><div class='del'>-            inf_class.load_from(full_name)</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'>-    # Return a list of any classes or modules that we contain</div><div class='del'>-    # that match a given string</div><div class='del'>-</div><div class='del'>-    def contained_modules_matching(name)</div><div class='del'>-      @inferior_classes.find_all {|c| c.name[name]}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def classes_and_modules</div><div class='del'>-      @inferior_classes</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return an exact match to a particular name</div><div class='del'>-    def contained_class_named(name)</div><div class='del'>-      @inferior_classes.find {|c| c.name == name}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return the list of local methods matching name</div><div class='del'>-    # We're split into two because we need distinct behavior</div><div class='del'>-    # when called from the _toplevel_</div><div class='del'>-    def methods_matching(name, is_class_method)</div><div class='del'>-      local_methods_matching(name, is_class_method)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find methods matching 'name' in ourselves and in</div><div class='del'>-    # any classes we contain</div><div class='del'>-    def recursively_find_methods_matching(name, is_class_method)</div><div class='del'>-      res = local_methods_matching(name, is_class_method)</div><div class='del'>-      @inferior_classes.each do |c|</div><div class='del'>-        res.concat(c.recursively_find_methods_matching(name, is_class_method))</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Return our full name</div><div class='del'>-    def full_name</div><div class='del'>-      res = @in_class.full_name</div><div class='del'>-      res &lt;&lt; "::" unless res.empty?</div><div class='del'>-      res &lt;&lt; @name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return a list of all out method names</div><div class='del'>-    def all_method_names</div><div class='del'>-      res = @class_methods.map {|m| m.full_name }</div><div class='del'>-      @instance_methods.each {|m| res &lt;&lt; m.full_name}</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    # Return a list of all our methods matching a given string.</div><div class='del'>-    # Is +is_class_methods+ if 'nil', we don't care if the method</div><div class='del'>-    # is a class method or not, otherwise we only return</div><div class='del'>-    # those methods that match</div><div class='del'>-    def local_methods_matching(name, is_class_method)</div><div class='del'>-</div><div class='del'>-      list = case is_class_method</div><div class='del'>-             when nil then  @class_methods + @instance_methods</div><div class='del'>-             when true then @class_methods</div><div class='del'>-             when false then @instance_methods</div><div class='del'>-             else fail "Unknown is_class_method: #{is_class_method.inspect}"</div><div class='del'>-             end</div><div class='del'>-</div><div class='del'>-      list.find_all {|m| m.name;  m.name[name]}</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # A TopLevelEntry is like a class entry, but when asked to search</div><div class='del'>-  # for methods searches all classes, not just itself</div><div class='del'>-</div><div class='del'>-  class TopLevelEntry &lt; ClassEntry</div><div class='del'>-    def methods_matching(name, is_class_method)</div><div class='del'>-      res = recursively_find_methods_matching(name, is_class_method)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def full_name</div><div class='del'>-      ""</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def module_named(name)</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'>-  class MethodEntry</div><div class='del'>-    attr_reader :name</div><div class='del'>-    attr_reader :path_name</div><div class='del'>-</div><div class='del'>-    def initialize(path_name, name, is_class_method, in_class)</div><div class='del'>-      @path_name = path_name</div><div class='del'>-      @name = name</div><div class='del'>-      @is_class_method = is_class_method</div><div class='del'>-      @in_class = in_class</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def full_name</div><div class='del'>-      res = @in_class.full_name</div><div class='del'>-      unless res.empty?</div><div class='del'>-        if @is_class_method</div><div class='del'>-          res &lt;&lt; "::"</div><div class='del'>-        else</div><div class='del'>-          res &lt;&lt; "#"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      res &lt;&lt; @name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # We represent everything know about all 'ri' files</div><div class='del'>-  # accessible to this program</div><div class='del'>-</div><div class='del'>-  class RiCache</div><div class='del'>-</div><div class='del'>-    attr_reader :toplevel</div><div class='del'>-</div><div class='del'>-    def initialize(dirs)</div><div class='del'>-      # At the top level we have a dummy module holding the</div><div class='del'>-      # overall namespace</div><div class='del'>-      @toplevel = TopLevelEntry.new('', '::', nil)</div><div class='del'>-</div><div class='del'>-      dirs.each do |dir|</div><div class='del'>-        @toplevel.load_from(dir)</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/lib/rdoc/ri/ri_descriptions.rb b/lib/rdoc/ri/ri_descriptions.rb<br/>deleted file mode 100644<br/>index e5ea9f2fbf..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_descriptions.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_descriptions.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,154 +0,0 @@</div><div class='del'>-require 'yaml'</div><div class='del'>-require 'rdoc/markup/simple_markup/fragments'</div><div class='del'>-</div><div class='del'>-# Descriptions are created by RDoc (in ri_generator) and</div><div class='del'>-# written out in serialized form into the documentation</div><div class='del'>-# tree. ri then reads these to generate the documentation</div><div class='del'>-</div><div class='del'>-module RI</div><div class='del'>-  class NamedThing</div><div class='del'>-    attr_reader :name</div><div class='del'>-    def initialize(name)</div><div class='del'>-      @name = name</div><div class='del'>-    end</div><div class='del'>-    def &lt;=&gt;(other)</div><div class='del'>-      @name &lt;=&gt; other.name</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def hash</div><div class='del'>-      @name.hash</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def eql?(other)</div><div class='del'>-      @name.eql?(other)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-#  Alias          = Struct.new(:old_name, :new_name)</div><div class='del'>-</div><div class='del'>-  class AliasName &lt; NamedThing</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Attribute &lt; NamedThing</div><div class='del'>-    attr_reader :rw, :comment</div><div class='del'>-    def initialize(name, rw, comment)</div><div class='del'>-      super(name)</div><div class='del'>-      @rw = rw</div><div class='del'>-      @comment = comment</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Constant &lt; NamedThing</div><div class='del'>-    attr_reader :value, :comment</div><div class='del'>-    def initialize(name, value, comment)</div><div class='del'>-      super(name)</div><div class='del'>-      @value = value</div><div class='del'>-      @comment = comment</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class IncludedModule &lt; NamedThing</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  class MethodSummary &lt; NamedThing</div><div class='del'>-    def initialize(name="")</div><div class='del'>-      super</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 Description</div><div class='del'>-    attr_accessor :name</div><div class='del'>-    attr_accessor :full_name</div><div class='del'>-    attr_accessor :comment</div><div class='del'>-</div><div class='del'>-    def serialize</div><div class='del'>-      self.to_yaml</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Description.deserialize(from)</div><div class='del'>-      YAML.load(from)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def &lt;=&gt;(other)</div><div class='del'>-      @name &lt;=&gt; other.name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  class ModuleDescription &lt; Description</div><div class='del'>-    </div><div class='del'>-    attr_accessor :class_methods</div><div class='del'>-    attr_accessor :instance_methods</div><div class='del'>-    attr_accessor :attributes</div><div class='del'>-    attr_accessor :constants</div><div class='del'>-    attr_accessor :includes</div><div class='del'>-</div><div class='del'>-    # merge in another class desscription into this one</div><div class='del'>-    def merge_in(old)</div><div class='del'>-      merge(@class_methods, old.class_methods)</div><div class='del'>-      merge(@instance_methods, old.instance_methods)</div><div class='del'>-      merge(@attributes, old.attributes)</div><div class='del'>-      merge(@constants, old.constants)</div><div class='del'>-      merge(@includes, old.includes)</div><div class='del'>-      if @comment.nil? || @comment.empty?</div><div class='del'>-        @comment = old.comment</div><div class='del'>-      else</div><div class='del'>-        unless old.comment.nil? or old.comment.empty? then</div><div class='del'>-          @comment &lt;&lt; SM::Flow::RULE.new</div><div class='del'>-          @comment.concat old.comment</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def display_name</div><div class='del'>-      "Module"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # the 'ClassDescription' subclass overrides this</div><div class='del'>-    # to format up the name of a parent</div><div class='del'>-    def superclass_string</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def merge(into, from)</div><div class='del'>-      names = {}</div><div class='del'>-      into.each {|i| names[i.name] = i }</div><div class='del'>-      from.each {|i| names[i.name] = i }</div><div class='del'>-      into.replace(names.keys.sort.map {|n| names[n]})</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  class ClassDescription &lt; ModuleDescription</div><div class='del'>-    attr_accessor :superclass</div><div class='del'>-</div><div class='del'>-    def display_name</div><div class='del'>-      "Class"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def superclass_string</div><div class='del'>-      if @superclass &amp;&amp; @superclass != "Object"</div><div class='del'>-        @superclass</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'>-</div><div class='del'>-</div><div class='del'>-  class MethodDescription &lt; Description</div><div class='del'>-    </div><div class='del'>-    attr_accessor :is_class_method</div><div class='del'>-    attr_accessor :visibility</div><div class='del'>-    attr_accessor :block_params</div><div class='del'>-    attr_accessor :is_singleton</div><div class='del'>-    attr_accessor :aliases</div><div class='del'>-    attr_accessor :is_alias_for</div><div class='del'>-    attr_accessor :params</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/ri/ri_display.rb b/lib/rdoc/ri/ri_display.rb<br/>deleted file mode 100644<br/>index 67962fc2c1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_display.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_display.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,255 +0,0 @@</div><div class='del'>-require 'rdoc/ri/ri_util'</div><div class='del'>-require 'rdoc/ri/ri_formatter'</div><div class='del'>-require 'rdoc/ri/ri_options'</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-# This is a kind of 'flag' module. If you want to write your</div><div class='del'>-# own 'ri' display module (perhaps because you'r writing</div><div class='del'>-# an IDE or somesuch beast), you simply write a class</div><div class='del'>-# which implements the various 'display' methods in 'DefaultDisplay',</div><div class='del'>-# and include the 'RiDisplay' module in that class. </div><div class='del'>-#</div><div class='del'>-# To access your class from the command line, you can do</div><div class='del'>-#</div><div class='del'>-#    ruby -r &lt;your source file&gt;  ../ri ....</div><div class='del'>-#</div><div class='del'>-# If folks _really_ want to do this from the command line,</div><div class='del'>-# I'll build an option in</div><div class='del'>-</div><div class='del'>-module RiDisplay</div><div class='del'>-  @@display_class = nil</div><div class='del'>-</div><div class='del'>-  def RiDisplay.append_features(display_class)</div><div class='del'>-    @@display_class = display_class</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def RiDisplay.new(*args)</div><div class='del'>-    @@display_class.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'>-# A paging display module. Uses the ri_formatter class to do the</div><div class='del'>-# actual presentation</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-class  DefaultDisplay</div><div class='del'>-</div><div class='del'>-  include RiDisplay</div><div class='del'>-</div><div class='del'>-  def initialize(options)</div><div class='del'>-    @options = options</div><div class='del'>-    @formatter = @options.formatter.new(@options, "     ")</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'>-  def display_usage</div><div class='del'>-    page do</div><div class='del'>-      RI::Options::OptionList.usage(short_form=true)</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'>-  def display_method_info(method)</div><div class='del'>-    page do</div><div class='del'>-      @formatter.draw_line(method.full_name)</div><div class='del'>-      display_params(method)</div><div class='del'>-      @formatter.draw_line</div><div class='del'>-      display_flow(method.comment)</div><div class='del'>-      if method.aliases &amp;&amp; !method.aliases.empty?</div><div class='del'>-        @formatter.blankline</div><div class='del'>-        aka = "(also known as "</div><div class='del'>-        aka &lt;&lt; method.aliases.map {|a| a.name }.join(", ") </div><div class='del'>-        aka &lt;&lt; ")"</div><div class='del'>-        @formatter.wrap(aka)</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 display_class_info(klass, ri_reader)</div><div class='del'>-    page do </div><div class='del'>-      superclass = klass.superclass_string</div><div class='del'>-      </div><div class='del'>-      if superclass</div><div class='del'>-        superclass = " &lt; " + superclass</div><div class='del'>-      else</div><div class='del'>-        superclass = ""</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      @formatter.draw_line(klass.display_name + ": " +</div><div class='del'>-                           klass.full_name + superclass)</div><div class='del'>-      </div><div class='del'>-      display_flow(klass.comment)</div><div class='del'>-      @formatter.draw_line </div><div class='del'>-    </div><div class='del'>-      unless klass.includes.empty?</div><div class='del'>-        @formatter.blankline</div><div class='del'>-        @formatter.display_heading("Includes:", 2, "")</div><div class='del'>-        incs = []</div><div class='del'>-        klass.includes.each do |inc|</div><div class='del'>-          inc_desc = ri_reader.find_class_by_name(inc.name)</div><div class='del'>-          if inc_desc</div><div class='del'>-            str = inc.name + "("</div><div class='del'>-            str &lt;&lt; inc_desc.instance_methods.map{|m| m.name}.join(", ")</div><div class='del'>-            str &lt;&lt; ")"</div><div class='del'>-            incs &lt;&lt; str</div><div class='del'>-          else</div><div class='del'>-            incs &lt;&lt; inc.name</div><div class='del'>-          end</div><div class='del'>-      end</div><div class='del'>-        @formatter.wrap(incs.sort.join(', '))</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      unless klass.constants.empty?</div><div class='del'>-        @formatter.blankline</div><div class='del'>-        @formatter.display_heading("Constants:", 2, "")</div><div class='del'>-        len = 0</div><div class='del'>-        klass.constants.each { |c| len = c.name.length if c.name.length &gt; len }</div><div class='del'>-        len += 2</div><div class='del'>-        klass.constants.each do |c|</div><div class='del'>-          @formatter.wrap(c.value, </div><div class='del'>-                          @formatter.indent+((c.name+":").ljust(len)))</div><div class='del'>-        end </div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      unless klass.class_methods.empty?</div><div class='del'>-        @formatter.blankline</div><div class='del'>-        @formatter.display_heading("Class methods:", 2, "")</div><div class='del'>-        @formatter.wrap(klass.class_methods.map{|m| m.name}.sort.join(', '))</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      unless klass.instance_methods.empty?</div><div class='del'>-        @formatter.blankline</div><div class='del'>-        @formatter.display_heading("Instance methods:", 2, "")</div><div class='del'>-        @formatter.wrap(klass.instance_methods.map{|m| m.name}.sort.join(', '))</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      unless klass.attributes.empty?</div><div class='del'>-        @formatter.blankline</div><div class='del'>-        @formatter.wrap("Attributes:", "")</div><div class='del'>-        @formatter.wrap(klass.attributes.map{|a| a.name}.sort.join(', '))</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'>-  # Display a list of method names</div><div class='del'>-  </div><div class='del'>-  def display_method_list(methods)</div><div class='del'>-    page do</div><div class='del'>-      puts "More than one method matched your request. You can refine"</div><div class='del'>-      puts "your search by asking for information on one of:\n\n"</div><div class='del'>-      @formatter.wrap(methods.map {|m| m.full_name} .join(", "))</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 display_class_list(namespaces)</div><div class='del'>-    page do</div><div class='del'>-      puts "More than one class or module matched your request. You can refine"</div><div class='del'>-      puts "your search by asking for information on one of:\n\n"</div><div class='del'>-      @formatter.wrap(namespaces.map {|m| m.full_name}.join(", "))</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 list_known_classes(classes)</div><div class='del'>-    if classes.empty?</div><div class='del'>-      warn_no_database</div><div class='del'>-    else</div><div class='del'>-      page do </div><div class='del'>-        @formatter.draw_line("Known classes and modules")</div><div class='del'>-        @formatter.blankline</div><div class='del'>-        @formatter.wrap(classes.sort.join(", "))</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 list_known_names(names)</div><div class='del'>-    if names.empty?</div><div class='del'>-      warn_no_database</div><div class='del'>-    else</div><div class='del'>-      page do </div><div class='del'>-        names.each {|n| @formatter.raw_print_line(n)}</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'>-  private</div><div class='del'>-</div><div class='del'>-  ######################################################################</div><div class='del'>-</div><div class='del'>-  def page</div><div class='del'>-    return yield unless pager = setup_pager</div><div class='del'>-    begin</div><div class='del'>-      save_stdout = STDOUT.clone</div><div class='del'>-      STDOUT.reopen(pager)</div><div class='del'>-      yield</div><div class='del'>-    ensure</div><div class='del'>-      STDOUT.reopen(save_stdout)</div><div class='del'>-      save_stdout.close</div><div class='del'>-      pager.close</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 setup_pager</div><div class='del'>-    unless @options.use_stdout</div><div class='del'>-      for pager in [ ENV['PAGER'], "less", "more", 'pager' ].compact.uniq</div><div class='del'>-        return IO.popen(pager, "w") rescue nil</div><div class='del'>-      end</div><div class='del'>-      @options.use_stdout = true</div><div class='del'>-      nil</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 display_params(method)</div><div class='del'>-</div><div class='del'>-    params = method.params</div><div class='del'>-</div><div class='del'>-    if params[0,1] == "("</div><div class='del'>-      if method.is_singleton</div><div class='del'>-        params = method.full_name + params</div><div class='del'>-      else</div><div class='del'>-        params = method.name + params</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    params.split(/\n/).each do |p|</div><div class='del'>-      @formatter.wrap(p) </div><div class='del'>-      @formatter.break_to_newline</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  ######################################################################</div><div class='del'>-  </div><div class='del'>-  def display_flow(flow)</div><div class='del'>-    if !flow || flow.empty?</div><div class='del'>-      @formatter.wrap("(no description...)")</div><div class='del'>-    else</div><div class='del'>-      @formatter.display_flow(flow)</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 warn_no_database</div><div class='del'>-    puts "Before using ri, you need to generate documentation"</div><div class='del'>-    puts "using 'rdoc' with the --ri option"</div><div class='del'>-  end</div><div class='del'>-end  # class RiDisplay</div><div class='head'>diff --git a/lib/rdoc/ri/ri_driver.rb b/lib/rdoc/ri/ri_driver.rb<br/>deleted file mode 100644<br/>index a00f20ee3b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_driver.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_driver.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,143 +0,0 @@</div><div class='del'>-require 'rdoc/ri/ri_paths'</div><div class='del'>-require 'rdoc/usage'</div><div class='del'>-require 'rdoc/ri/ri_cache'</div><div class='del'>-require 'rdoc/ri/ri_util'</div><div class='del'>-require 'rdoc/ri/ri_reader'</div><div class='del'>-require 'rdoc/ri/ri_formatter'</div><div class='del'>-require 'rdoc/ri/ri_options'</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-######################################################################</div><div class='del'>-</div><div class='del'>-class  RiDriver</div><div class='del'>-</div><div class='del'>-  def initialize</div><div class='del'>-    @options = RI::Options.instance</div><div class='del'>-</div><div class='del'>-    args = ARGV</div><div class='del'>-    if ENV["RI"]</div><div class='del'>-      args = ENV["RI"].split.concat(ARGV)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @options.parse(args)</div><div class='del'>-</div><div class='del'>-    path = @options.path</div><div class='del'>-    report_missing_documentation @options.raw_path if path.empty?</div><div class='del'>-</div><div class='del'>-    @ri_reader = RI::RiReader.new(RI::RiCache.new(path))</div><div class='del'>-    @display   = @options.displayer</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  # Couldn't find documentation in +path+, so tell the user what to do</div><div class='del'>-</div><div class='del'>-  def report_missing_documentation(path)</div><div class='del'>-    STDERR.puts "No ri documentation found in:"</div><div class='del'>-    path.each do |d|</div><div class='del'>-      STDERR.puts "     #{d}"</div><div class='del'>-    end</div><div class='del'>-    STDERR.puts "\nWas rdoc run to create documentation?\n\n"</div><div class='del'>-    RDoc::usage("Installing Documentation")</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  ######################################################################</div><div class='del'>-  </div><div class='del'>-  # If the list of matching methods contains exactly one entry, or</div><div class='del'>-  # if it contains an entry that exactly matches the requested method,</div><div class='del'>-  # then display that entry, otherwise display the list of</div><div class='del'>-  # matching method names</div><div class='del'>-  </div><div class='del'>-  def report_method_stuff(requested_method_name, methods)</div><div class='del'>-    if methods.size == 1</div><div class='del'>-      method = @ri_reader.get_method(methods[0])</div><div class='del'>-      @display.display_method_info(method)</div><div class='del'>-    else</div><div class='del'>-      entries = methods.find_all {|m| m.name == requested_method_name}</div><div class='del'>-      if entries.size == 1</div><div class='del'>-        method = @ri_reader.get_method(entries[0])</div><div class='del'>-        @display.display_method_info(method)</div><div class='del'>-      else</div><div class='del'>-        @display.display_method_list(methods)</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 report_class_stuff(namespaces)</div><div class='del'>-    if namespaces.size == 1</div><div class='del'>-      klass = @ri_reader.get_class(namespaces[0])</div><div class='del'>-      @display.display_class_info(klass, @ri_reader)</div><div class='del'>-    else </div><div class='del'>-#      entries = namespaces.find_all {|m| m.full_name == requested_class_name}</div><div class='del'>-#      if entries.size == 1</div><div class='del'>-#        klass = @ri_reader.get_class(entries[0])</div><div class='del'>-#        @display.display_class_info(klass, @ri_reader)</div><div class='del'>-#      else</div><div class='del'>-        @display.display_class_list(namespaces)</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'>-  </div><div class='del'>-  def get_info_for(arg)</div><div class='del'>-    desc = NameDescriptor.new(arg)</div><div class='del'>-</div><div class='del'>-    namespaces = @ri_reader.top_level_namespace</div><div class='del'>-    </div><div class='del'>-    for class_name in desc.class_names</div><div class='del'>-      namespaces = @ri_reader.lookup_namespace_in(class_name, namespaces)</div><div class='del'>-      if namespaces.empty?</div><div class='del'>-        raise RiError.new("Nothing known about #{arg}")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # at this point, if we have multiple possible namespaces, but one</div><div class='del'>-    # is an exact match for our requested class, prune down to just it</div><div class='del'>-</div><div class='del'>-    full_class_name = desc.full_class_name</div><div class='del'>-    entries = namespaces.find_all {|m| m.full_name == full_class_name}</div><div class='del'>-    namespaces = entries if entries.size == 1</div><div class='del'>-</div><div class='del'>-    if desc.method_name.nil?</div><div class='del'>-      report_class_stuff(namespaces)</div><div class='del'>-    else</div><div class='del'>-      methods = @ri_reader.find_methods(desc.method_name, </div><div class='del'>-                                        desc.is_class_method,</div><div class='del'>-                                        namespaces)</div><div class='del'>-</div><div class='del'>-      if methods.empty?</div><div class='del'>-        raise RiError.new("Nothing known about #{arg}")</div><div class='del'>-      else</div><div class='del'>-        report_method_stuff(desc.method_name, methods)</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 process_args</div><div class='del'>-    if @options.list_classes</div><div class='del'>-      classes = @ri_reader.full_class_names</div><div class='del'>-      @display.list_known_classes(classes)</div><div class='del'>-    elsif @options.list_names</div><div class='del'>-      names = @ri_reader.all_names</div><div class='del'>-      @display.list_known_names(names)</div><div class='del'>-    else</div><div class='del'>-      if ARGV.size.zero?</div><div class='del'>-        @display.display_usage</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          ARGV.each do |arg|</div><div class='del'>-            get_info_for(arg)</div><div class='del'>-          end</div><div class='del'>-        rescue RiError =&gt; e</div><div class='del'>-          STDERR.puts(e.message)</div><div class='del'>-          exit(1)</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  # class RiDriver</div><div class='head'>diff --git a/lib/rdoc/ri/ri_formatter.rb b/lib/rdoc/ri/ri_formatter.rb<br/>deleted file mode 100644<br/>index 34eb561ca3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_formatter.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_formatter.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,672 +0,0 @@</div><div class='del'>-module RI</div><div class='del'>-  class TextFormatter</div><div class='del'>-</div><div class='del'>-    attr_reader :indent</div><div class='del'>-    </div><div class='del'>-    def initialize(options, indent)</div><div class='del'>-      @options = options</div><div class='del'>-      @width   = options.width</div><div class='del'>-      @indent  = indent</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'>-    def draw_line(label=nil)</div><div class='del'>-      len = @width</div><div class='del'>-      len -= (label.size+1) if label</div><div class='del'>-      print "-"*len</div><div class='del'>-      if label</div><div class='del'>-        print(" ")</div><div class='del'>-        bold_print(label) </div><div class='del'>-      end</div><div class='del'>-      puts</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ######################################################################</div><div class='del'>-    </div><div class='del'>-    def wrap(txt,  prefix=@indent, linelen=@width)</div><div class='del'>-      return unless txt &amp;&amp; !txt.empty?</div><div class='del'>-      work = conv_markup(txt)</div><div class='del'>-      textLen = linelen - prefix.length</div><div class='del'>-      patt = Regexp.new("^(.{0,#{textLen}})[ \n]")</div><div class='del'>-      next_prefix = prefix.tr("^ ", " ")</div><div class='del'>-</div><div class='del'>-      res = []</div><div class='del'>-</div><div class='del'>-      while work.length &gt; textLen</div><div class='del'>-        if work =~ patt</div><div class='del'>-          res &lt;&lt; $1</div><div class='del'>-          work.slice!(0, $&amp;.length)</div><div class='del'>-        else</div><div class='del'>-          res &lt;&lt; work.slice!(0, textLen)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      res &lt;&lt; work if work.length.nonzero?</div><div class='del'>-      puts(prefix + res.join("\n" + next_prefix))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    def blankline</div><div class='del'>-      puts</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    # called when we want to ensure a nbew 'wrap' starts on a newline</div><div class='del'>-    # Only needed for HtmlFormatter, because the rest do their</div><div class='del'>-    # own line breaking</div><div class='del'>-</div><div class='del'>-    def break_to_newline</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    def bold_print(txt)</div><div class='del'>-      print txt</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    def raw_print_line(txt)</div><div class='del'>-      puts txt</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    # convert HTML entities back to ASCII</div><div class='del'>-    def conv_html(txt)</div><div class='del'>-      txt.</div><div class='del'>-          gsub(/&amp;gt;/, '&gt;').</div><div class='del'>-          gsub(/&amp;lt;/, '&lt;').</div><div class='del'>-          gsub(/&amp;quot;/, '"').</div><div class='del'>-          gsub(/&amp;amp;/, '&amp;')</div><div class='del'>-          </div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # convert markup into display form</div><div class='del'>-    def conv_markup(txt)</div><div class='del'>-      txt.</div><div class='del'>-          gsub(%r{&lt;tt&gt;(.*?)&lt;/tt&gt;}) { "+#$1+" } .</div><div class='del'>-          gsub(%r{&lt;code&gt;(.*?)&lt;/code&gt;}) { "+#$1+" } .</div><div class='del'>-          gsub(%r{&lt;b&gt;(.*?)&lt;/b&gt;}) { "*#$1*" } .</div><div class='del'>-          gsub(%r{&lt;em&gt;(.*?)&lt;/em&gt;}) { "_#$1_" }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    def display_list(list)</div><div class='del'>-      case list.type</div><div class='del'>-</div><div class='del'>-      when SM::ListBase::BULLET </div><div class='del'>-        prefixer = proc { |ignored| @indent + "*   " }</div><div class='del'>-</div><div class='del'>-      when SM::ListBase::NUMBER,</div><div class='del'>-      SM::ListBase::UPPERALPHA,</div><div class='del'>-      SM::ListBase::LOWERALPHA</div><div class='del'>-</div><div class='del'>-        start = case list.type</div><div class='del'>-                when SM::ListBase::NUMBER      then 1</div><div class='del'>-                when  SM::ListBase::UPPERALPHA then 'A'</div><div class='del'>-                when SM::ListBase::LOWERALPHA  then 'a'</div><div class='del'>-                end</div><div class='del'>-        prefixer = proc do |ignored|</div><div class='del'>-          res = @indent + "#{start}.".ljust(4)</div><div class='del'>-          start = start.succ</div><div class='del'>-          res</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-      when SM::ListBase::LABELED</div><div class='del'>-        prefixer = proc do |li|</div><div class='del'>-          li.label</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      when SM::ListBase::NOTE</div><div class='del'>-        longest = 0</div><div class='del'>-        list.contents.each do |item|</div><div class='del'>-          if item.kind_of?(SM::Flow::LI) &amp;&amp; item.label.length &gt; longest</div><div class='del'>-            longest = item.label.length</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        prefixer = proc do |li|</div><div class='del'>-          @indent + li.label.ljust(longest+1)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        fail "unknown list type"</div><div class='del'>-</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      list.contents.each do |item|</div><div class='del'>-        if item.kind_of? SM::Flow::LI</div><div class='del'>-          prefix = prefixer.call(item)</div><div class='del'>-          display_flow_item(item, prefix)</div><div class='del'>-        else</div><div class='del'>-          display_flow_item(item)</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 display_flow_item(item, prefix=@indent)</div><div class='del'>-      case item</div><div class='del'>-      when SM::Flow::P, SM::Flow::LI</div><div class='del'>-        wrap(conv_html(item.body), prefix)</div><div class='del'>-        blankline</div><div class='del'>-        </div><div class='del'>-      when SM::Flow::LIST</div><div class='del'>-        display_list(item)</div><div class='del'>-</div><div class='del'>-      when SM::Flow::VERB</div><div class='del'>-        display_verbatim_flow_item(item, @indent)</div><div class='del'>-</div><div class='del'>-      when SM::Flow::H</div><div class='del'>-        display_heading(conv_html(item.text), item.level, @indent)</div><div class='del'>-</div><div class='del'>-      when SM::Flow::RULE</div><div class='del'>-        draw_line</div><div class='del'>-</div><div class='del'>-      else</div><div class='del'>-        fail "Unknown flow element: #{item.class}"</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 display_verbatim_flow_item(item, prefix=@indent)</div><div class='del'>-        item.body.split(/\n/).each do |line|</div><div class='del'>-          print @indent, conv_html(line), "\n"</div><div class='del'>-        end</div><div class='del'>-        blankline</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    def display_heading(text, level, indent)</div><div class='del'>-      text = strip_attributes(text)</div><div class='del'>-      case level</div><div class='del'>-      when 1</div><div class='del'>-        ul = "=" * text.length</div><div class='del'>-        puts</div><div class='del'>-        puts text.upcase</div><div class='del'>-        puts ul</div><div class='del'>-#        puts</div><div class='del'>-        </div><div class='del'>-      when 2</div><div class='del'>-        ul = "-" * text.length</div><div class='del'>-        puts</div><div class='del'>-        puts text</div><div class='del'>-        puts ul</div><div class='del'>-#        puts</div><div class='del'>-      else</div><div class='del'>-        print indent, text, "\n"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def display_flow(flow)</div><div class='del'>-      flow.each do |f|</div><div class='del'>-        display_flow_item(f)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def strip_attributes(txt)</div><div class='del'>-      tokens = txt.split(%r{(&lt;/?(?:b|code|em|i|tt)&gt;)})</div><div class='del'>-      text = [] </div><div class='del'>-      attributes = 0</div><div class='del'>-      tokens.each do |tok|</div><div class='del'>-        case tok</div><div class='del'>-        when %r{^&lt;/(\w+)&gt;$}, %r{^&lt;(\w+)&gt;$}</div><div class='del'>-          ;</div><div class='del'>-        else</div><div class='del'>-          text &lt;&lt; tok</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      text.join</div><div class='del'>-    end</div><div class='del'>-</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'>-  # Handle text with attributes. We're a base class: there are</div><div class='del'>-  # different presentation classes (one, for example, uses overstrikes</div><div class='del'>-  # to handle bold and underlining, while another using ANSI escape</div><div class='del'>-  # sequences</div><div class='del'>-  </div><div class='del'>-  class AttributeFormatter &lt; TextFormatter</div><div class='del'>-    </div><div class='del'>-    BOLD      = 1</div><div class='del'>-    ITALIC    = 2</div><div class='del'>-    CODE      = 4</div><div class='del'>-</div><div class='del'>-    ATTR_MAP = {</div><div class='del'>-      "b"    =&gt; BOLD,</div><div class='del'>-      "code" =&gt; CODE,</div><div class='del'>-      "em"   =&gt; ITALIC,</div><div class='del'>-      "i"    =&gt; ITALIC,</div><div class='del'>-      "tt"   =&gt; CODE</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # TODO: struct?</div><div class='del'>-    class AttrChar</div><div class='del'>-      attr_reader :char</div><div class='del'>-      attr_reader :attr</div><div class='del'>-</div><div class='del'>-      def initialize(char, attr)</div><div class='del'>-        @char = char</div><div class='del'>-        @attr = attr</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    class AttributeString</div><div class='del'>-      attr_reader :txt</div><div class='del'>-</div><div class='del'>-      def initialize</div><div class='del'>-        @txt = []</div><div class='del'>-        @optr = 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def &lt;&lt;(char)</div><div class='del'>-        @txt &lt;&lt; char</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def empty?</div><div class='del'>-        @optr &gt;= @txt.length</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # accept non space, then all following spaces</div><div class='del'>-      def next_word</div><div class='del'>-        start = @optr</div><div class='del'>-        len = @txt.length</div><div class='del'>-</div><div class='del'>-        while @optr &lt; len &amp;&amp; @txt[@optr].char != " "</div><div class='del'>-          @optr += 1</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        while @optr &lt; len &amp;&amp; @txt[@optr].char == " "</div><div class='del'>-          @optr += 1</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        @txt[start...@optr]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######################################################################</div><div class='del'>-    # overrides base class. Looks for &lt;tt&gt;...&lt;/tt&gt; etc sequences</div><div class='del'>-    # and generates an array of AttrChars. This array is then used</div><div class='del'>-    # as the basis for the split</div><div class='del'>-</div><div class='del'>-    def wrap(txt,  prefix=@indent, linelen=@width)</div><div class='del'>-      return unless txt &amp;&amp; !txt.empty?</div><div class='del'>-</div><div class='del'>-      txt = add_attributes_to(txt)</div><div class='del'>-      next_prefix = prefix.tr("^ ", " ")</div><div class='del'>-      linelen -= prefix.size</div><div class='del'>-</div><div class='del'>-      line = []</div><div class='del'>-</div><div class='del'>-      until txt.empty?</div><div class='del'>-        word = txt.next_word</div><div class='del'>-        if word.size + line.size &gt; linelen</div><div class='del'>-          write_attribute_text(prefix, line)</div><div class='del'>-          prefix = next_prefix</div><div class='del'>-          line = []</div><div class='del'>-        end</div><div class='del'>-        line.concat(word)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      write_attribute_text(prefix, line) if line.length &gt; 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    protected</div><div class='del'>-</div><div class='del'>-    # overridden in specific formatters</div><div class='del'>-</div><div class='del'>-    def write_attribute_text(prefix, line)</div><div class='del'>-      print prefix</div><div class='del'>-      line.each do |achar|</div><div class='del'>-        print achar.char</div><div class='del'>-      end</div><div class='del'>-      puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # again, overridden</div><div class='del'>-</div><div class='del'>-    def bold_print(txt)</div><div class='del'>-      print txt</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def add_attributes_to(txt)</div><div class='del'>-      tokens = txt.split(%r{(&lt;/?(?:b|code|em|i|tt)&gt;)})</div><div class='del'>-      text = AttributeString.new</div><div class='del'>-      attributes = 0</div><div class='del'>-      tokens.each do |tok|</div><div class='del'>-        case tok</div><div class='del'>-        when %r{^&lt;/(\w+)&gt;$} then attributes &amp;= ~(ATTR_MAP[$1]||0)</div><div class='del'>-        when %r{^&lt;(\w+)&gt;$}  then attributes  |= (ATTR_MAP[$1]||0)</div><div class='del'>-        else</div><div class='del'>-          tok.split(//).each {|ch| text &lt;&lt; AttrChar.new(ch, attributes)}</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      text</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'>-  </div><div class='del'>-  # This formatter generates overstrike-style formatting, which</div><div class='del'>-  # works with pagers such as man and less.</div><div class='del'>-</div><div class='del'>-  class OverstrikeFormatter &lt; AttributeFormatter</div><div class='del'>-</div><div class='del'>-    BS = "\C-h"</div><div class='del'>-</div><div class='del'>-    def write_attribute_text(prefix, line)</div><div class='del'>-      print prefix</div><div class='del'>-      line.each do |achar|</div><div class='del'>-        attr = achar.attr</div><div class='del'>-        if (attr &amp; (ITALIC+CODE)) != 0</div><div class='del'>-          print "_", BS</div><div class='del'>-        end</div><div class='del'>-        if (attr &amp; BOLD) != 0</div><div class='del'>-          print achar.char, BS</div><div class='del'>-        end</div><div class='del'>-        print achar.char</div><div class='del'>-      end</div><div class='del'>-      puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # draw a string in bold</div><div class='del'>-    def bold_print(text)</div><div class='del'>-      text.split(//).each do |ch|</div><div class='del'>-        print ch, BS, ch</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'>-  # This formatter uses ANSI escape sequences</div><div class='del'>-  # to colorize stuff</div><div class='del'>-  # works with pages such as man and less.</div><div class='del'>-</div><div class='del'>-  class AnsiFormatter &lt; AttributeFormatter</div><div class='del'>-</div><div class='del'>-    def initialize(*args)</div><div class='del'>-      print "\033[0m"</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write_attribute_text(prefix, line)</div><div class='del'>-      print prefix</div><div class='del'>-      curr_attr = 0</div><div class='del'>-      line.each do |achar|</div><div class='del'>-        attr = achar.attr</div><div class='del'>-        if achar.attr != curr_attr</div><div class='del'>-          update_attributes(achar.attr)</div><div class='del'>-          curr_attr = achar.attr</div><div class='del'>-        end</div><div class='del'>-        print achar.char</div><div class='del'>-      end</div><div class='del'>-      update_attributes(0) unless curr_attr.zero?</div><div class='del'>-      puts</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def bold_print(txt)</div><div class='del'>-      print "\033[1m#{txt}\033[m"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    HEADINGS = {</div><div class='del'>-      1 =&gt; [ "\033[1;32m", "\033[m" ] ,</div><div class='del'>-      2 =&gt; ["\033[4;32m", "\033[m" ],</div><div class='del'>-      3 =&gt; ["\033[32m", "\033[m" ]</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    def display_heading(text, level, indent)</div><div class='del'>-      level = 3 if level &gt; 3</div><div class='del'>-      heading = HEADINGS[level]</div><div class='del'>-      print indent</div><div class='del'>-      print heading[0]</div><div class='del'>-      print strip_attributes(text)</div><div class='del'>-      puts heading[1]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    ATTR_MAP = {</div><div class='del'>-      BOLD   =&gt; "1",</div><div class='del'>-      ITALIC =&gt; "33",</div><div class='del'>-      CODE   =&gt; "36"</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    def update_attributes(attr)</div><div class='del'>-      str = "\033["</div><div class='del'>-      for quality in [ BOLD, ITALIC, CODE]</div><div class='del'>-        unless (attr &amp; quality).zero?</div><div class='del'>-          str &lt;&lt; ATTR_MAP[quality]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      print str, "m"</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'>-  # This formatter uses HTML.</div><div class='del'>-</div><div class='del'>-  class HtmlFormatter &lt; AttributeFormatter</div><div class='del'>-</div><div class='del'>-    def initialize(*args)</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write_attribute_text(prefix, line)</div><div class='del'>-      curr_attr = 0</div><div class='del'>-      line.each do |achar|</div><div class='del'>-        attr = achar.attr</div><div class='del'>-        if achar.attr != curr_attr</div><div class='del'>-          update_attributes(curr_attr, achar.attr)</div><div class='del'>-          curr_attr = achar.attr</div><div class='del'>-        end</div><div class='del'>-        print(escape(achar.char))</div><div class='del'>-      end</div><div class='del'>-      update_attributes(curr_attr, 0) unless curr_attr.zero?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def draw_line(label=nil)</div><div class='del'>-      if label != nil</div><div class='del'>-        bold_print(label)</div><div class='del'>-      end</div><div class='del'>-      puts("&lt;hr&gt;")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def bold_print(txt)</div><div class='del'>-      tag("b") { txt }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def blankline()</div><div class='del'>-      puts("&lt;p&gt;")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def break_to_newline</div><div class='del'>-      puts("&lt;br&gt;")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def display_heading(text, level, indent)</div><div class='del'>-      level = 4 if level &gt; 4</div><div class='del'>-      tag("h#{level}") { text }</div><div class='del'>-      puts</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    def display_list(list)</div><div class='del'>-</div><div class='del'>-      case list.type</div><div class='del'>-      when SM::ListBase::BULLET </div><div class='del'>-        list_type = "ul"</div><div class='del'>-        prefixer = proc { |ignored| "&lt;li&gt;" }</div><div class='del'>-</div><div class='del'>-      when SM::ListBase::NUMBER,</div><div class='del'>-      SM::ListBase::UPPERALPHA,</div><div class='del'>-      SM::ListBase::LOWERALPHA</div><div class='del'>-        list_type = "ol"</div><div class='del'>-        prefixer = proc { |ignored| "&lt;li&gt;" }</div><div class='del'>-        </div><div class='del'>-      when SM::ListBase::LABELED</div><div class='del'>-        list_type = "dl"</div><div class='del'>-        prefixer = proc do |li|</div><div class='del'>-          "&lt;dt&gt;&lt;b&gt;" + escape(li.label) + "&lt;/b&gt;&lt;dd&gt;"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      when SM::ListBase::NOTE</div><div class='del'>-        list_type = "table"</div><div class='del'>-        prefixer = proc do |li|</div><div class='del'>-          %{&lt;tr valign="top"&gt;&lt;td&gt;#{li.label.gsub(/ /, '&amp;nbsp;')}&lt;/td&gt;&lt;td&gt;}</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        fail "unknown list type"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      print "&lt;#{list_type}&gt;"</div><div class='del'>-      list.contents.each do |item|</div><div class='del'>-        if item.kind_of? SM::Flow::LI</div><div class='del'>-          prefix = prefixer.call(item)</div><div class='del'>-          print prefix</div><div class='del'>-          display_flow_item(item, prefix)</div><div class='del'>-        else</div><div class='del'>-          display_flow_item(item)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      print "&lt;/#{list_type}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def display_verbatim_flow_item(item, prefix=@indent)</div><div class='del'>-        print("&lt;pre&gt;")</div><div class='del'>-        puts item.body</div><div class='del'>-        puts("&lt;/pre&gt;")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    ATTR_MAP = {</div><div class='del'>-      BOLD   =&gt; "b&gt;",</div><div class='del'>-      ITALIC =&gt; "i&gt;",</div><div class='del'>-      CODE   =&gt; "tt&gt;"</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    def update_attributes(current, wanted)</div><div class='del'>-      str = ""</div><div class='del'>-      # first turn off unwanted ones</div><div class='del'>-      off = current &amp; ~wanted</div><div class='del'>-      for quality in [ BOLD, ITALIC, CODE]</div><div class='del'>-        if (off &amp; quality) &gt; 0</div><div class='del'>-          str &lt;&lt; "&lt;/" + ATTR_MAP[quality]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # now turn on wanted</div><div class='del'>-      for quality in [ BOLD, ITALIC, CODE]</div><div class='del'>-        unless (wanted &amp; quality).zero?</div><div class='del'>-          str &lt;&lt; "&lt;" &lt;&lt; ATTR_MAP[quality]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      print str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def tag(code)</div><div class='del'>-        print("&lt;#{code}&gt;")</div><div class='del'>-        print(yield)</div><div class='del'>-        print("&lt;/#{code}&gt;")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def escape(str)</div><div class='del'>-      str.</div><div class='del'>-          gsub(/&amp;/n, '&amp;amp;').</div><div class='del'>-          gsub(/\"/n, '&amp;quot;').</div><div class='del'>-          gsub(/&gt;/n, '&amp;gt;').</div><div class='del'>-          gsub(/&lt;/n, '&amp;lt;')</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'>-  # This formatter reduces extra lines for a simpler output.</div><div class='del'>-  # It improves way output looks for tools like IRC bots.</div><div class='del'>-</div><div class='del'>-  class SimpleFormatter &lt; TextFormatter</div><div class='del'>-</div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    # No extra blank lines</div><div class='del'>-</div><div class='del'>-    def blankline</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ######################################################################</div><div class='del'>-</div><div class='del'>-    # Display labels only, no lines</div><div class='del'>-</div><div class='del'>-    def draw_line(label=nil)</div><div class='del'>-      unless label.nil? then</div><div class='del'>-        bold_print(label) </div><div class='del'>-        puts</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'>-    # Place heading level indicators inline with heading.</div><div class='del'>-</div><div class='del'>-    def display_heading(text, level, indent)</div><div class='del'>-      text = strip_attributes(text)</div><div class='del'>-      case level</div><div class='del'>-      when 1</div><div class='del'>-        puts "= " + text.upcase</div><div class='del'>-      when 2</div><div class='del'>-        puts "-- " + text</div><div class='del'>-      else</div><div class='del'>-        print indent, text, "\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'>-</div><div class='del'>-  # Finally, fill in the list of known formatters</div><div class='del'>-</div><div class='del'>-  class TextFormatter</div><div class='del'>-</div><div class='del'>-    FORMATTERS = {</div><div class='del'>-      "ansi"   =&gt; AnsiFormatter,</div><div class='del'>-      "bs"     =&gt; OverstrikeFormatter,</div><div class='del'>-      "html"   =&gt; HtmlFormatter,</div><div class='del'>-      "plain"  =&gt; TextFormatter,</div><div class='del'>-      "simple" =&gt; SimpleFormatter,</div><div class='del'>-    }</div><div class='del'>-      </div><div class='del'>-    def TextFormatter.list</div><div class='del'>-      FORMATTERS.keys.sort.join(", ")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def TextFormatter.for(name)</div><div class='del'>-      FORMATTERS[name.downcase]</div><div class='del'>-    end</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'>-</div><div class='head'>diff --git a/lib/rdoc/ri/ri_options.rb b/lib/rdoc/ri/ri_options.rb<br/>deleted file mode 100644<br/>index 179ef96cea..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_options.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_options.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,319 +0,0 @@</div><div class='del'>-# We handle the parsing of options, and subsequently as a singleton</div><div class='del'>-# object to be queried for option values</div><div class='del'>-</div><div class='del'>-module RI</div><div class='del'>-</div><div class='del'>-  require 'rdoc/ri/ri_paths'</div><div class='del'>-  require 'rdoc/ri/ri_display'</div><div class='del'>-</div><div class='del'>-  VERSION_STRING = "ri v1.0.1 - 20041108"</div><div class='del'>-</div><div class='del'>-  class Options</div><div class='del'>-    </div><div class='del'>-    require 'singleton'</div><div class='del'>-    require 'getoptlong'</div><div class='del'>-    </div><div class='del'>-    include Singleton</div><div class='del'>-</div><div class='del'>-    # No not use a pager. Writable, because ri sets it if it</div><div class='del'>-    # can't find a pager</div><div class='del'>-    attr_accessor :use_stdout</div><div class='del'>-</div><div class='del'>-    # should we just display a class list and exit</div><div class='del'>-    attr_reader :list_classes</div><div class='del'>-</div><div class='del'>-    # should we display a list of all names</div><div class='del'>-    attr_reader :list_names</div><div class='del'>-</div><div class='del'>-    # The width of the output line</div><div class='del'>-    attr_reader :width</div><div class='del'>-</div><div class='del'>-    # the formatting we apply to the output</div><div class='del'>-    attr_reader :formatter</div><div class='del'>-</div><div class='del'>-    # the directory we search for original documentation</div><div class='del'>-    attr_reader :doc_dir</div><div class='del'>-</div><div class='del'>-    module OptionList</div><div class='del'>-      </div><div class='del'>-      OPTION_LIST = [</div><div class='del'>-        [ "--help",          "-h",   nil,</div><div class='del'>-          "you're looking at it" ],</div><div class='del'>-</div><div class='del'>-        [ "--classes",      "-c",   nil,</div><div class='del'>-          "Display the names of classes and modules we\n" +</div><div class='del'>-          "know about"],</div><div class='del'>-</div><div class='del'>-        [ "--doc-dir",      "-d",   "&lt;dirname&gt;",</div><div class='del'>-          "A directory to search for documentation. If not\n" +</div><div class='del'>-          "specified, we search the standard rdoc/ri directories.\n" +</div><div class='del'>-          "May be repeated."],</div><div class='del'>-</div><div class='del'>-        [ "--system",       nil,    nil,</div><div class='del'>-          "Include documentation from Ruby's standard library:\n  " +</div><div class='del'>-          RI::Paths::SYSDIR ],</div><div class='del'>-</div><div class='del'>-        [ "--site",         nil,    nil,</div><div class='del'>-          "Include documentation from libraries installed in site_lib:\n  " +</div><div class='del'>-          RI::Paths::SITEDIR ],</div><div class='del'>-</div><div class='del'>-        [ "--home",         nil,    nil,</div><div class='del'>-          "Include documentation stored in ~/.rdoc:\n  " +</div><div class='del'>-          (RI::Paths::HOMEDIR || "No ~/.rdoc found") ],</div><div class='del'>-</div><div class='del'>-        [ "--gems",         nil,    nil,</div><div class='del'>-          "Include documentation from RubyGems:\n" +</div><div class='del'>-          (RI::Paths::GEMDIRS ?</div><div class='del'>-           Gem.path.map { |dir| "  #{dir}/doc/*/ri" }.join("\n") :</div><div class='del'>-           "No Rubygems ri found.") ],</div><div class='del'>-</div><div class='del'>-        [ "--format",       "-f",   "&lt;name&gt;",</div><div class='del'>-          "Format to use when displaying output:\n" +</div><div class='del'>-          "   " + RI::TextFormatter.list + "\n" +</div><div class='del'>-          "Use 'bs' (backspace) with most pager programs.\n" +</div><div class='del'>-          "To use ANSI, either also use the -T option, or\n" +</div><div class='del'>-          "tell your pager to allow control characters\n" +</div><div class='del'>-          "(for example using the -R option to less)"],</div><div class='del'>-</div><div class='del'>-        [ "--list-names",    "-l",   nil,</div><div class='del'>-          "List all the names known to RDoc, one per line"</div><div class='del'>-        ],</div><div class='del'>-</div><div class='del'>-        [ "--no-pager",      "-T",   nil,</div><div class='del'>-          "Send output directly to stdout." </div><div class='del'>-        ],</div><div class='del'>-</div><div class='del'>-        [ "--width",         "-w",   "output width",</div><div class='del'>-        "Set the width of the output" ],</div><div class='del'>-</div><div class='del'>-        [ "--version",       "-v",   nil,</div><div class='del'>-         "Display the version of ri"</div><div class='del'>-        ],</div><div class='del'>-</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      def OptionList.options</div><div class='del'>-        OPTION_LIST.map do |long, short, arg,|</div><div class='del'>-          option = []</div><div class='del'>-          option &lt;&lt; long</div><div class='del'>-          option &lt;&lt; short unless short.nil?</div><div class='del'>-          option &lt;&lt; (arg ? GetoptLong::REQUIRED_ARGUMENT :</div><div class='del'>-                           GetoptLong::NO_ARGUMENT)</div><div class='del'>-          option</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      def OptionList.strip_output(text)</div><div class='del'>-        text =~ /^\s+/</div><div class='del'>-        leading_spaces = $&amp;</div><div class='del'>-        text.gsub!(/^#{leading_spaces}/, '')</div><div class='del'>-        $stdout.puts text</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      </div><div class='del'>-      # Show an error and exit</div><div class='del'>-      </div><div class='del'>-      def OptionList.error(msg)</div><div class='del'>-        $stderr.puts</div><div class='del'>-        $stderr.puts msg</div><div class='del'>-        name = File.basename $PROGRAM_NAME</div><div class='del'>-        $stderr.puts "\nFor help on options, try '#{name} --help'\n\n"</div><div class='del'>-        exit 1</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      # Show usage and exit</div><div class='del'>-      </div><div class='del'>-      def OptionList.usage(short_form=false)</div><div class='del'>-        </div><div class='del'>-        puts</div><div class='del'>-        puts(RI::VERSION_STRING)</div><div class='del'>-        puts</div><div class='del'>-        </div><div class='del'>-        name = File.basename($0)</div><div class='del'>-</div><div class='del'>-        directories = [</div><div class='del'>-          RI::Paths::SYSDIR,</div><div class='del'>-          RI::Paths::SITEDIR,</div><div class='del'>-          RI::Paths::HOMEDIR</div><div class='del'>-        ]</div><div class='del'>-</div><div class='del'>-        if RI::Paths::GEMDIRS then</div><div class='del'>-          Gem.path.each do |dir|</div><div class='del'>-            directories &lt;&lt; "#{dir}/doc/*/ri"</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        directories = directories.join("\n    ")</div><div class='del'>-</div><div class='del'>-        OptionList.strip_output(&lt;&lt;-EOT)</div><div class='del'>-          Usage:</div><div class='del'>-</div><div class='del'>-            #{name} [options]  [names...]</div><div class='del'>-</div><div class='del'>-          Display information on Ruby classes, modules, and methods.</div><div class='del'>-          Give the names of classes or methods to see their documentation.</div><div class='del'>-          Partial names may be given: if the names match more than</div><div class='del'>-          one entity, a list will be shown, otherwise details on</div><div class='del'>-          that entity will be displayed.</div><div class='del'>-</div><div class='del'>-          Nested classes and modules can be specified using the normal</div><div class='del'>-          Name::Name notation, and instance methods can be distinguished</div><div class='del'>-          from class methods using "." (or "#") instead of "::".</div><div class='del'>-</div><div class='del'>-          For example:</div><div class='del'>-</div><div class='del'>-              #{name}  File</div><div class='del'>-              #{name}  File.new</div><div class='del'>-              #{name}  F.n</div><div class='del'>-              #{name}  zip</div><div class='del'>-</div><div class='del'>-          Note that shell quoting may be required for method names</div><div class='del'>-          containing punctuation:</div><div class='del'>-</div><div class='del'>-              #{name} 'Array.[]'</div><div class='del'>-              #{name} compact\\!</div><div class='del'>-</div><div class='del'>-          By default ri searches for documentation in the following</div><div class='del'>-          directories:</div><div class='del'>-</div><div class='del'>-              #{directories}</div><div class='del'>-</div><div class='del'>-          Specifying the --system, --site, --home, --gems or --doc-dir</div><div class='del'>-          options will limit ri to searching only the specified</div><div class='del'>-          directories.</div><div class='del'>-</div><div class='del'>-        EOT</div><div class='del'>-</div><div class='del'>-        if short_form</div><div class='del'>-          puts "For help on options, type '#{name} -h'"</div><div class='del'>-          puts "For a list of classes I know about, type '#{name} -c'"</div><div class='del'>-        else</div><div class='del'>-          puts "Options:\n\n"</div><div class='del'>-          OPTION_LIST.each do|long, short, arg, desc|</div><div class='del'>-            opt = ''</div><div class='del'>-            opt &lt;&lt; (short ? sprintf("%15s", "#{long}, #{short}") :</div><div class='del'>-                            sprintf("%15s", long))</div><div class='del'>-            if arg</div><div class='del'>-              opt &lt;&lt; " " &lt;&lt; arg</div><div class='del'>-            end</div><div class='del'>-            print opt</div><div class='del'>-            desc = desc.split("\n")</div><div class='del'>-            if opt.size &lt; 17</div><div class='del'>-              print " "*(18-opt.size)</div><div class='del'>-              puts desc.shift</div><div class='del'>-            else</div><div class='del'>-              puts</div><div class='del'>-            end</div><div class='del'>-            desc.each do |line|</div><div class='del'>-              puts(" "*18 + line)</div><div class='del'>-            end</div><div class='del'>-            puts</div><div class='del'>-          end</div><div class='del'>-          puts "Options may also be passed in the 'RI' environment variable"</div><div class='del'>-          exit 0</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Show the version and exit</div><div class='del'>-    def show_version</div><div class='del'>-      puts VERSION_STRING</div><div class='del'>-      exit(0)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize</div><div class='del'>-      @use_stdout   = !STDOUT.tty?</div><div class='del'>-      @width        = 72</div><div class='del'>-      @formatter    = RI::TextFormatter.for("plain") </div><div class='del'>-      @list_classes = false</div><div class='del'>-      @list_names   = false</div><div class='del'>-</div><div class='del'>-      # By default all paths are used.  If any of these are true, only those</div><div class='del'>-      # directories are used.</div><div class='del'>-      @use_system = false</div><div class='del'>-      @use_site = false</div><div class='del'>-      @use_home = false</div><div class='del'>-      @use_gems = false</div><div class='del'>-      @doc_dirs = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Parse command line options.</div><div class='del'>-</div><div class='del'>-    def parse(args)</div><div class='del'>-    </div><div class='del'>-      old_argv = ARGV.dup</div><div class='del'>-</div><div class='del'>-      ARGV.replace(args)</div><div class='del'>-</div><div class='del'>-      begin</div><div class='del'>-</div><div class='del'>-        go = GetoptLong.new(*OptionList.options)</div><div class='del'>-        go.quiet = true</div><div class='del'>-</div><div class='del'>-        go.each do |opt, arg|</div><div class='del'>-          case opt</div><div class='del'>-          when "--help"       then OptionList.usage</div><div class='del'>-          when "--version"    then show_version</div><div class='del'>-          when "--list-names" then @list_names = true</div><div class='del'>-          when "--no-pager"   then @use_stdout = true</div><div class='del'>-          when "--classes"    then @list_classes = true</div><div class='del'>-</div><div class='del'>-          when "--system"     then @use_system = true</div><div class='del'>-          when "--site"       then @use_site = true</div><div class='del'>-          when "--home"       then @use_home = true</div><div class='del'>-          when "--gems"       then @use_gems = true</div><div class='del'>-</div><div class='del'>-          when "--doc-dir"</div><div class='del'>-            if File.directory?(arg)</div><div class='del'>-              @doc_dirs &lt;&lt; arg</div><div class='del'>-            else</div><div class='del'>-              $stderr.puts "Invalid directory: #{arg}"</div><div class='del'>-              exit 1</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-          when "--format"</div><div class='del'>-            @formatter = RI::TextFormatter.for(arg)</div><div class='del'>-            unless @formatter</div><div class='del'>-              $stderr.print "Invalid formatter (should be one of "</div><div class='del'>-              $stderr.puts RI::TextFormatter.list + ")"</div><div class='del'>-              exit 1</div><div class='del'>-            end</div><div class='del'>-          when "--width"</div><div class='del'>-            begin</div><div class='del'>-              @width = Integer(arg)</div><div class='del'>-            rescue </div><div class='del'>-              $stderr.puts "Invalid width: '#{arg}'"</div><div class='del'>-              exit 1</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-      rescue GetoptLong::InvalidOption, GetoptLong::MissingArgument =&gt; error</div><div class='del'>-        OptionList.error(error.message)</div><div class='del'>-</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return the selected documentation directories.</div><div class='del'>-</div><div class='del'>-    def path</div><div class='del'>-      RI::Paths.path(@use_system, @use_site, @use_home, @use_gems, *@doc_dirs)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def raw_path</div><div class='del'>-      RI::Paths.raw_path(@use_system, @use_site, @use_home, @use_gems,</div><div class='del'>-                         *@doc_dirs)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return an instance of the displayer (the thing that actually writes</div><div class='del'>-    # the information). This allows us to load in new displayer classes</div><div class='del'>-    # at runtime (for example to help with IDE integration)</div><div class='del'>-    </div><div class='del'>-    def displayer</div><div class='del'>-      ::RiDisplay.new(self)</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='head'>diff --git a/lib/rdoc/ri/ri_paths.rb b/lib/rdoc/ri/ri_paths.rb<br/>deleted file mode 100644<br/>index 9768f12b7d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_paths.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_paths.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,101 +0,0 @@</div><div class='del'>-module RI</div><div class='del'>-</div><div class='del'>-  # Encapsulate all the strangeness to do with finding out</div><div class='del'>-  # where to find RDoc files</div><div class='del'>-  #</div><div class='del'>-  # We basically deal with three directories:</div><div class='del'>-  #</div><div class='del'>-  # 1. The 'system' documentation directory, which holds</div><div class='del'>-  #    the documentation distributed with Ruby, and which</div><div class='del'>-  #    is managed by the Ruby install process</div><div class='del'>-  # 2. The 'site' directory, which contains site-wide</div><div class='del'>-  #    documentation added locally.</div><div class='del'>-  # 3. The 'user' documentation directory, stored under the</div><div class='del'>-  #    user's own home directory.</div><div class='del'>-  #</div><div class='del'>-  # There's contention about all this, but for now:</div><div class='del'>-  #</div><div class='del'>-  # system:: $datadir/ri/&lt;ver&gt;/system/...</div><div class='del'>-  # site::   $datadir/ri/&lt;ver&gt;/site/...</div><div class='del'>-  # user::   ~/.rdoc</div><div class='del'>-</div><div class='del'>-  module Paths</div><div class='del'>-</div><div class='del'>-    #:stopdoc:</div><div class='del'>-    require 'rbconfig'</div><div class='del'>-    </div><div class='del'>-    DOC_DIR  = "doc/rdoc"</div><div class='del'>-</div><div class='del'>-    version = Config::CONFIG['ruby_version']</div><div class='del'>-</div><div class='del'>-    base    = File.join(Config::CONFIG['datadir'], "ri", version)</div><div class='del'>-    SYSDIR  = File.join(base, "system")</div><div class='del'>-    SITEDIR = File.join(base, "site")</div><div class='del'>-    homedir = ENV['HOME'] || ENV['USERPROFILE'] || ENV['HOMEPATH']</div><div class='del'>-</div><div class='del'>-    if homedir</div><div class='del'>-      HOMEDIR = File.join(homedir, ".rdoc")</div><div class='del'>-    else</div><div class='del'>-      HOMEDIR = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # This is the search path for 'ri'</div><div class='del'>-    PATH = [ SYSDIR, SITEDIR, HOMEDIR ].find_all {|p| p &amp;&amp; File.directory?(p)}</div><div class='del'>-</div><div class='del'>-    begin</div><div class='del'>-      require 'rubygems'</div><div class='del'>-</div><div class='del'>-      # HACK dup'd from Gem.latest_partials and friends</div><div class='del'>-      all_paths = []</div><div class='del'>-</div><div class='del'>-      all_paths = Gem.path.map do |dir|</div><div class='del'>-        Dir[File.join(dir, 'doc', '*', 'ri')]</div><div class='del'>-      end.flatten</div><div class='del'>-</div><div class='del'>-      ri_paths = {}</div><div class='del'>-</div><div class='del'>-      all_paths.each do |dir|</div><div class='del'>-        base = File.basename File.dirname(dir)</div><div class='del'>-        if base =~ /(.*)-((\d+\.)*\d+)/ then</div><div class='del'>-          name, version = $1, $2</div><div class='del'>-          ver = Gem::Version.new version</div><div class='del'>-          if ri_paths[name].nil? or ver &gt; ri_paths[name][0] then</div><div class='del'>-            ri_paths[name] = [ver, dir]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      GEMDIRS = ri_paths.map { |k,v| v.last }.sort</div><div class='del'>-      GEMDIRS.each { |dir| RI::Paths::PATH &lt;&lt; dir }</div><div class='del'>-    rescue LoadError</div><div class='del'>-      GEMDIRS = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the selected documentation directories as an Array, or PATH if no</div><div class='del'>-    # overriding directories were given.</div><div class='del'>-</div><div class='del'>-    def self.path(use_system, use_site, use_home, use_gems, *extra_dirs)</div><div class='del'>-      path = raw_path(use_system, use_site, use_home, use_gems, *extra_dirs)</div><div class='del'>-      return path.select { |directory| File.directory? directory }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the selected documentation directories including nonexistent</div><div class='del'>-    # directories.  Used to print out what paths were searched if no ri was</div><div class='del'>-    # found.</div><div class='del'>-</div><div class='del'>-    def self.raw_path(use_system, use_site, use_home, use_gems, *extra_dirs)</div><div class='del'>-      return PATH unless use_system or use_site or use_home or use_gems or</div><div class='del'>-                         not extra_dirs.empty?</div><div class='del'>-</div><div class='del'>-      path = []</div><div class='del'>-      path &lt;&lt; extra_dirs unless extra_dirs.empty?</div><div class='del'>-      path &lt;&lt; RI::Paths::SYSDIR if use_system</div><div class='del'>-      path &lt;&lt; RI::Paths::SITEDIR if use_site</div><div class='del'>-      path &lt;&lt; RI::Paths::HOMEDIR if use_home</div><div class='del'>-      path &lt;&lt; RI::Paths::GEMDIRS if use_gems</div><div class='del'>-</div><div class='del'>-      return path.flatten.compact</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/lib/rdoc/ri/ri_reader.rb b/lib/rdoc/ri/ri_reader.rb<br/>deleted file mode 100644<br/>index fb2c373e38..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_reader.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_reader.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,100 +0,0 @@</div><div class='del'>-require 'rdoc/ri/ri_descriptions'</div><div class='del'>-require 'rdoc/ri/ri_writer'</div><div class='del'>-require 'rdoc/markup/simple_markup/to_flow'</div><div class='del'>-</div><div class='del'>-module RI</div><div class='del'>-  class RiReader</div><div class='del'>-</div><div class='del'>-    def initialize(ri_cache)</div><div class='del'>-      @cache = ri_cache</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def top_level_namespace</div><div class='del'>-      [ @cache.toplevel ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def lookup_namespace_in(target, namespaces)</div><div class='del'>-      result = []</div><div class='del'>-      for n in namespaces</div><div class='del'>-        result.concat(n.contained_modules_matching(target))</div><div class='del'>-      end</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_class_by_name(full_name)</div><div class='del'>-      names = full_name.split(/::/)</div><div class='del'>-      ns = @cache.toplevel</div><div class='del'>-      for name in names</div><div class='del'>-        ns = ns.contained_class_named(name)</div><div class='del'>-        return nil if ns.nil?</div><div class='del'>-      end</div><div class='del'>-      get_class(ns)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_methods(name, is_class_method, namespaces)</div><div class='del'>-      result = []</div><div class='del'>-      namespaces.each do |ns|</div><div class='del'>-        result.concat ns.methods_matching(name, is_class_method)</div><div class='del'>-      end</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return the MethodDescription for a given MethodEntry</div><div class='del'>-    # by deserializing the YAML</div><div class='del'>-    def get_method(method_entry)</div><div class='del'>-      path = method_entry.path_name</div><div class='del'>-      File.open(path) { |f| RI::Description.deserialize(f) }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return a class description</div><div class='del'>-    def get_class(class_entry)</div><div class='del'>-      result = nil</div><div class='del'>-      for path in class_entry.path_names</div><div class='del'>-        path = RiWriter.class_desc_path(path, class_entry)</div><div class='del'>-        desc = File.open(path) {|f| RI::Description.deserialize(f) }</div><div class='del'>-        if result</div><div class='del'>-          result.merge_in(desc)</div><div class='del'>-        else</div><div class='del'>-          result = desc</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      result</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return the names of all classes and modules</div><div class='del'>-    def full_class_names</div><div class='del'>-      res = []</div><div class='del'>-      find_classes_in(res, @cache.toplevel)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # return a list of all classes, modules, and methods</div><div class='del'>-    def all_names</div><div class='del'>-      res = []</div><div class='del'>-      find_names_in(res, @cache.toplevel)</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'>-</div><div class='del'>-    def find_classes_in(res, klass)</div><div class='del'>-      classes = klass.classes_and_modules</div><div class='del'>-      for c in classes</div><div class='del'>-        res &lt;&lt; c.full_name</div><div class='del'>-        find_classes_in(res, c)</div><div class='del'>-      end</div><div class='del'>-      res</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def find_names_in(res, klass)</div><div class='del'>-      classes = klass.classes_and_modules</div><div class='del'>-      for c in classes</div><div class='del'>-        res &lt;&lt; c.full_name</div><div class='del'>-        res.concat c.all_method_names</div><div class='del'>-        find_names_in(res, c)</div><div class='del'>-      end</div><div class='del'>-      res</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/lib/rdoc/ri/ri_util.rb b/lib/rdoc/ri/ri_util.rb<br/>deleted file mode 100644<br/>index 8a01255897..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_util.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_util.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,75 +0,0 @@</div><div class='del'>-######################################################################</div><div class='del'>-</div><div class='del'>-class RiError &lt; Exception; end</div><div class='del'>-#</div><div class='del'>-# Break argument into its constituent class or module names, an</div><div class='del'>-# optional method type, and a method name</div><div class='del'>-</div><div class='del'>-class NameDescriptor</div><div class='del'>-</div><div class='del'>-  attr_reader :class_names</div><div class='del'>-  attr_reader :method_name</div><div class='del'>-</div><div class='del'>-  # true and false have the obvious meaning. nil means we don't care</div><div class='del'>-  attr_reader :is_class_method</div><div class='del'>-</div><div class='del'>-  # arg may be</div><div class='del'>-  # 1. a class or module name (optionally qualified with other class</div><div class='del'>-  #    or module names (Kernel, File::Stat etc)</div><div class='del'>-  # 2. a method name</div><div class='del'>-  # 3. a method name qualified by a optionally fully qualified class</div><div class='del'>-  #    or module name</div><div class='del'>-  #</div><div class='del'>-  # We're fairly casual about delimiters: folks can say Kernel::puts,</div><div class='del'>-  # Kernel.puts, or Kernel\#puts for example. There's one exception:</div><div class='del'>-  # if you say IO::read, we look for a class method, but if you</div><div class='del'>-  # say IO.read, we look for an instance method</div><div class='del'>-</div><div class='del'>-  def initialize(arg)</div><div class='del'>-    @class_names = []</div><div class='del'>-    separator = nil</div><div class='del'>-</div><div class='del'>-    tokens = arg.split(/(\.|::|#)/)</div><div class='del'>-</div><div class='del'>-    # Skip leading '::', '#' or '.', but remember it might</div><div class='del'>-    # be a method name qualifier</div><div class='del'>-    separator = tokens.shift if tokens[0] =~ /^(\.|::|#)/</div><div class='del'>-</div><div class='del'>-    # Skip leading '::', but remember we potentially have an inst</div><div class='del'>-</div><div class='del'>-    # leading stuff must be class names</div><div class='del'>-    </div><div class='del'>-    while tokens[0] =~ /^[A-Z]/</div><div class='del'>-      @class_names &lt;&lt; tokens.shift</div><div class='del'>-      unless tokens.empty?</div><div class='del'>-        separator = tokens.shift</div><div class='del'>-        break unless separator == "::"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Now must have a single token, the method name, or an empty</div><div class='del'>-    # array</div><div class='del'>-    unless tokens.empty?</div><div class='del'>-      @method_name = tokens.shift</div><div class='del'>-      # We may now have a trailing !, ?, or = to roll into</div><div class='del'>-      # the method name</div><div class='del'>-      if !tokens.empty? &amp;&amp; tokens[0] =~ /^[!?=]$/</div><div class='del'>-        @method_name &lt;&lt; tokens.shift</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if @method_name =~ /::|\.|#/ or !tokens.empty?</div><div class='del'>-        raise RiError.new("Bad argument: #{arg}") </div><div class='del'>-      end</div><div class='del'>-      if separator &amp;&amp; separator != '.'</div><div class='del'>-        @is_class_method = separator == "::"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Return the full class name (with '::' between the components)</div><div class='del'>-  # or "" if there's no class name</div><div class='del'>-</div><div class='del'>-  def full_class_name</div><div class='del'>-    @class_names.join("::")</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/ri/ri_writer.rb b/lib/rdoc/ri/ri_writer.rb<br/>deleted file mode 100644<br/>index 78c68e8409..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/ri/ri_writer.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/ri/ri_writer.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-require 'fileutils'</div><div class='del'>-</div><div class='del'>-module RI</div><div class='del'>-  class RiWriter</div><div class='del'>-</div><div class='del'>-    def RiWriter.class_desc_path(dir, class_desc)</div><div class='del'>-      File.join(dir, "cdesc-" + class_desc.name + ".yaml")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    </div><div class='del'>-    # Convert a name from internal form (containing punctuation)</div><div class='del'>-    # to an external form (where punctuation is replaced</div><div class='del'>-    # by %xx)</div><div class='del'>-</div><div class='del'>-    def RiWriter.internal_to_external(name)</div><div class='del'>-      name.gsub(/\W/) { sprintf("%%%02x", $&amp;[0]) }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # And the reverse operation</div><div class='del'>-    def RiWriter.external_to_internal(name)</div><div class='del'>-      name.gsub(/%([0-9a-f]{2,2})/) { $1.to_i(16).chr }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(base_dir)</div><div class='del'>-      @base_dir = base_dir</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def remove_class(class_desc)</div><div class='del'>-      FileUtils.rm_rf(path_to_dir(class_desc.full_name))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_class(class_desc)</div><div class='del'>-      dir = path_to_dir(class_desc.full_name)</div><div class='del'>-      FileUtils.mkdir_p(dir)</div><div class='del'>-      class_file_name = RiWriter.class_desc_path(dir, class_desc)</div><div class='del'>-      File.open(class_file_name, "w") do |f|</div><div class='del'>-        f.write(class_desc.serialize)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add_method(class_desc, method_desc)</div><div class='del'>-      dir = path_to_dir(class_desc.full_name)</div><div class='del'>-      file_name = RiWriter.internal_to_external(method_desc.name)</div><div class='del'>-      meth_file_name = File.join(dir, file_name)</div><div class='del'>-      if method_desc.is_singleton</div><div class='del'>-        meth_file_name += "-c.yaml"</div><div class='del'>-      else</div><div class='del'>-        meth_file_name += "-i.yaml"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      File.open(meth_file_name, "w") do |f|</div><div class='del'>-        f.write(method_desc.serialize)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def path_to_dir(class_name)</div><div class='del'>-      File.join(@base_dir, *class_name.split('::'))</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/template.rb b/lib/rdoc/template.rb<br/>deleted file mode 100644<br/>index 469e10fb4b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/template.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/template.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,234 +0,0 @@</div><div class='del'>-# Cheap-n-cheerful HTML page template system. You create a </div><div class='del'>-# template containing:</div><div class='del'>-#</div><div class='del'>-# * variable names between percent signs (&lt;tt&gt;%fred%&lt;/tt&gt;)</div><div class='del'>-# * blocks of repeating stuff:</div><div class='del'>-#</div><div class='del'>-#     START:key</div><div class='del'>-#       ... stuff</div><div class='del'>-#     END:key</div><div class='del'>-#</div><div class='del'>-# You feed the code a hash. For simple variables, the values</div><div class='del'>-# are resolved directly from the hash. For blocks, the hash entry</div><div class='del'>-# corresponding to +key+ will be an array of hashes. The block will</div><div class='del'>-# be generated once for each entry. Blocks can be nested arbitrarily</div><div class='del'>-# deeply.</div><div class='del'>-#</div><div class='del'>-# The template may also contain</div><div class='del'>-#</div><div class='del'>-#   IF:key</div><div class='del'>-#     ... stuff</div><div class='del'>-#   ENDIF:key</div><div class='del'>-#</div><div class='del'>-# _stuff_ will only be included in the output if the corresponding</div><div class='del'>-# key is set in the value hash.</div><div class='del'>-#</div><div class='del'>-# Usage:  Given a set of templates &lt;tt&gt;T1, T2,&lt;/tt&gt; etc</div><div class='del'>-#</div><div class='del'>-#            values = { "name" =&gt; "Dave", state =&gt; "TX" }</div><div class='del'>-#</div><div class='del'>-#            t = TemplatePage.new(T1, T2, T3)</div><div class='del'>-#            File.open(name, "w") {|f| t.write_html_on(f, values)}</div><div class='del'>-#         or</div><div class='del'>-#            res = ''</div><div class='del'>-#            t.write_html_on(res, values)</div><div class='del'>-#</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-class TemplatePage</div><div class='del'>-</div><div class='del'>-  ##########</div><div class='del'>-  # A context holds a stack of key/value pairs (like a symbol</div><div class='del'>-  # table). When asked to resolve a key, it first searches the top of</div><div class='del'>-  # the stack, then the next level, and so on until it finds a match</div><div class='del'>-  # (or runs out of entries)</div><div class='del'>-</div><div class='del'>-  class Context</div><div class='del'>-    def initialize</div><div class='del'>-      @stack = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def push(hash)</div><div class='del'>-      @stack.push(hash)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def pop</div><div class='del'>-      @stack.pop</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Find a scalar value, throwing an exception if not found. This</div><div class='del'>-    # method is used when substituting the %xxx% constructs</div><div class='del'>-</div><div class='del'>-    def find_scalar(key)</div><div class='del'>-      @stack.reverse_each do |level|</div><div class='del'>-        if val = level[key]</div><div class='del'>-          return val unless val.kind_of? Array</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      raise "Template error: can't find variable '#{key}'"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Lookup any key in the stack of hashes</div><div class='del'>-</div><div class='del'>-    def lookup(key)</div><div class='del'>-      @stack.reverse_each do |level|</div><div class='del'>-        val = level[key]</div><div class='del'>-        return val if val</div><div class='del'>-      end</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #########</div><div class='del'>-  # Simple class to read lines out of a string</div><div class='del'>-</div><div class='del'>-  class LineReader</div><div class='del'>-    # we're initialized with an array of lines</div><div class='del'>-    def initialize(lines)</div><div class='del'>-      @lines = lines</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # read the next line </div><div class='del'>-    def read</div><div class='del'>-      @lines.shift</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return a list of lines up to the line that matches</div><div class='del'>-    # a pattern. That last line is discarded.</div><div class='del'>-    def read_up_to(pattern)</div><div class='del'>-      res = []</div><div class='del'>-      while line = read</div><div class='del'>-        if pattern.match(line)</div><div class='del'>-          return LineReader.new(res) </div><div class='del'>-        else</div><div class='del'>-          res &lt;&lt; line</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      raise "Missing end tag in template: #{pattern.source}"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Return a copy of ourselves that can be modified without</div><div class='del'>-    # affecting us</div><div class='del'>-    def dup</div><div class='del'>-      LineReader.new(@lines.dup)</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'>-  # +templates+ is an array of strings containing the templates.</div><div class='del'>-  # We start at the first, and substitute in subsequent ones</div><div class='del'>-  # where the string &lt;tt&gt;!INCLUDE!&lt;/tt&gt; occurs. For example,</div><div class='del'>-  # we could have the overall page template containing</div><div class='del'>-  #</div><div class='del'>-  #   &lt;html&gt;&lt;body&gt;</div><div class='del'>-  #     &lt;h1&gt;Master&lt;/h1&gt;</div><div class='del'>-  #     !INCLUDE!</div><div class='del'>-  #   &lt;/bost&gt;&lt;/html&gt;</div><div class='del'>-  #</div><div class='del'>-  # and substitute subpages in to it by passing [master, sub_page].</div><div class='del'>-  # This gives us a cheap way of framing pages</div><div class='del'>-</div><div class='del'>-  def initialize(*templates)</div><div class='del'>-    result = "!INCLUDE!"</div><div class='del'>-    templates.each do |content|</div><div class='del'>-      result.sub!(/!INCLUDE!/, content)</div><div class='del'>-    end</div><div class='del'>-    @lines = LineReader.new(result.split($/))</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Render the templates into HTML, storing the result on +op+ </div><div class='del'>-  # using the method &lt;tt&gt;&lt;&lt;&lt;/tt&gt;. The &lt;tt&gt;value_hash&lt;/tt&gt; contains</div><div class='del'>-  # key/value pairs used to drive the substitution (as described above)</div><div class='del'>-</div><div class='del'>-  def write_html_on(op, value_hash)</div><div class='del'>-    @context = Context.new</div><div class='del'>-    op &lt;&lt; substitute_into(@lines, value_hash).tr("\000", '\\')</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-  # Substitute a set of key/value pairs into the given template. </div><div class='del'>-  # Keys with scalar values have them substituted directly into</div><div class='del'>-  # the page. Those with array values invoke &lt;tt&gt;substitute_array&lt;/tt&gt;</div><div class='del'>-  # (below), which examples a block of the template once for each </div><div class='del'>-  # row in the array.</div><div class='del'>-  #</div><div class='del'>-  # This routine also copes with the &lt;tt&gt;IF:&lt;/tt&gt;_key_ directive,</div><div class='del'>-  # removing chunks of the template if the corresponding key</div><div class='del'>-  # does not appear in the hash, and the START: directive, which</div><div class='del'>-  # loops its contents for each value in an array</div><div class='del'>-</div><div class='del'>-  def substitute_into(lines, values)</div><div class='del'>-    @context.push(values)</div><div class='del'>-    skip_to = nil</div><div class='del'>-    result = []</div><div class='del'>-</div><div class='del'>-    while line = lines.read</div><div class='del'>-</div><div class='del'>-      case line</div><div class='del'>-</div><div class='del'>-      when /^IF:(\w+)/</div><div class='del'>-        lines.read_up_to(/^ENDIF:#$1/) unless @context.lookup($1)</div><div class='del'>-</div><div class='del'>-    when /^IFNOT:(\w+)/</div><div class='del'>-        lines.read_up_to(/^ENDIF:#$1/) if @context.lookup($1)</div><div class='del'>-</div><div class='del'>-      when /^ENDIF:/</div><div class='del'>-        ;</div><div class='del'>-</div><div class='del'>-      when /^START:(\w+)/</div><div class='del'>-        tag = $1</div><div class='del'>-        body = lines.read_up_to(/^END:#{tag}/)</div><div class='del'>-        inner_values = @context.lookup(tag)</div><div class='del'>-        raise "unknown tag: #{tag}" unless inner_values</div><div class='del'>-        raise "not array: #{tag}"   unless inner_values.kind_of?(Array)</div><div class='del'>-        inner_values.each do |vals|</div><div class='del'>-          result &lt;&lt; substitute_into(body.dup, vals)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        result &lt;&lt; expand_line(line.dup)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @context.pop</div><div class='del'>-</div><div class='del'>-    result.join("\n")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Given an individual line, we look for %xxx% constructs and </div><div class='del'>-  # HREF:ref:name: constructs, substituting for each.</div><div class='del'>-</div><div class='del'>-  def expand_line(line)</div><div class='del'>-    # Generate a cross reference if a reference is given,</div><div class='del'>-    # otherwise just fill in the name part</div><div class='del'>-</div><div class='del'>-    line.gsub!(/HREF:(\w+?):(\w+?):/) {</div><div class='del'>-      ref = @context.lookup($1)</div><div class='del'>-      name = @context.find_scalar($2)</div><div class='del'>-</div><div class='del'>-      if ref and !ref.kind_of?(Array)</div><div class='del'>-	"&lt;a href=\"#{ref}\"&gt;#{name}&lt;/a&gt;"</div><div class='del'>-      else</div><div class='del'>-	name</div><div class='del'>-      end</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # Substitute in values for %xxx% constructs.  This is made complex</div><div class='del'>-    # because the replacement string may contain characters that are</div><div class='del'>-    # meaningful to the regexp (like \1)</div><div class='del'>-</div><div class='del'>-    line = line.gsub(/%([a-zA-Z]\w*)%/) {</div><div class='del'>-      val = @context.find_scalar($1) </div><div class='del'>-      val.tr('\\', "\000")</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    line</div><div class='del'>-  rescue Exception =&gt; e</div><div class='del'>-    $stderr.puts "Error in template: #{e}"</div><div class='del'>-    $stderr.puts "Original line: #{line}"</div><div class='del'>-    exit</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/rdoc/tokenstream.rb b/lib/rdoc/tokenstream.rb<br/>deleted file mode 100644<br/>index 0a0720d8a9..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/tokenstream.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/tokenstream.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,25 +0,0 @@</div><div class='del'>-# A TokenStream is a list of tokens, gathered during the parse</div><div class='del'>-# of some entity (say a method). Entities populate these streams</div><div class='del'>-# by being registered with the lexer. Any class can collect tokens</div><div class='del'>-# by including TokenStream. From the outside, you use such an object</div><div class='del'>-# by calling the start_collecting_tokens method, followed by calls</div><div class='del'>-# to add_token and pop_token</div><div class='del'>-</div><div class='del'>-module TokenStream</div><div class='del'>-  def token_stream</div><div class='del'>-    @token_stream</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def start_collecting_tokens</div><div class='del'>-    @token_stream = []</div><div class='del'>-  end</div><div class='del'>-  def add_token(tk)</div><div class='del'>-    @token_stream &lt;&lt; tk</div><div class='del'>-  end</div><div class='del'>-  def add_tokens(tks)</div><div class='del'>-    tks.each  {|tk| add_token(tk)}</div><div class='del'>-  end</div><div class='del'>-  def pop_token</div><div class='del'>-    @token_stream.pop</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rdoc/usage.rb b/lib/rdoc/usage.rb<br/>deleted file mode 100644<br/>index def516b3d7..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rdoc/usage.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rdoc/usage.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,210 +0,0 @@</div><div class='del'>-# = Synopsis</div><div class='del'>-#</div><div class='del'>-# This library allows command-line tools to encapsulate their usage</div><div class='del'>-# as a comment at the top of the main file. Calling &lt;tt&gt;RDoc::usage&lt;/tt&gt;</div><div class='del'>-# then displays some or all of that comment, and optionally exits</div><div class='del'>-# the program with an exit status. We always look for the comment</div><div class='del'>-# in the main program file, so it is safe to call this method</div><div class='del'>-# from anywhere in the executing program.</div><div class='del'>-#</div><div class='del'>-# = Usage</div><div class='del'>-#</div><div class='del'>-#   RDoc::usage( [ exit_status ], [ section, ...])</div><div class='del'>-#   RDoc::usage_no_exit( [ section, ...])</div><div class='del'>-#</div><div class='del'>-# where:</div><div class='del'>-#</div><div class='del'>-# exit_status::</div><div class='del'>-#     the integer exit code (default zero). RDoc::usage will exit</div><div class='del'>-#     the calling program with this status.</div><div class='del'>-#</div><div class='del'>-# section::</div><div class='del'>-#     an optional list of section names. If specified, only the</div><div class='del'>-#     sections with the given names as headings will be output.</div><div class='del'>-#     For example, this section is named 'Usage', and the next</div><div class='del'>-#     section is named 'Examples'. The section names are case</div><div class='del'>-#     insensitive.</div><div class='del'>-#</div><div class='del'>-# = Examples</div><div class='del'>-#</div><div class='del'>-#    # Comment block describing usage</div><div class='del'>-#    # with (optional) section headings</div><div class='del'>-#    # . . .</div><div class='del'>-#</div><div class='del'>-#    require 'rdoc/usage'</div><div class='del'>-#</div><div class='del'>-#    # Display all usage and exit with a status of 0</div><div class='del'>-#</div><div class='del'>-#    RDoc::usage</div><div class='del'>-#</div><div class='del'>-#    # Display all usage and exit with a status of 99</div><div class='del'>-#</div><div class='del'>-#    RDoc::usage(99)</div><div class='del'>-#</div><div class='del'>-#    # Display usage in the 'Summary' section only, then</div><div class='del'>-#    # exit with a status of 99</div><div class='del'>-#</div><div class='del'>-#    RDoc::usage(99, 'Summary')</div><div class='del'>-#</div><div class='del'>-#    # Display information in the Author and Copyright</div><div class='del'>-#    # sections, then exit 0.</div><div class='del'>-#    </div><div class='del'>-#    RDoc::usage('Author', 'Copyright')</div><div class='del'>-#</div><div class='del'>-#    # Display information in the Author and Copyright</div><div class='del'>-#    # sections, but don't exit</div><div class='del'>-#  </div><div class='del'>-#    RDoc::usage_no_exit('Author', 'Copyright')</div><div class='del'>-#</div><div class='del'>-# = Author</div><div class='del'>-#</div><div class='del'>-# Dave Thomas, The Pragmatic Programmers, LLC</div><div class='del'>-#</div><div class='del'>-# = Copyright</div><div class='del'>-#</div><div class='del'>-# Copyright (c) 2004 Dave Thomas.</div><div class='del'>-# Licensed under the same terms as Ruby</div><div class='del'>-#</div><div class='del'>-</div><div class='del'>-require 'rdoc/markup/simple_markup'</div><div class='del'>-require 'rdoc/markup/simple_markup/to_flow'</div><div class='del'>-require 'rdoc/ri/ri_formatter'</div><div class='del'>-require 'rdoc/ri/ri_options'</div><div class='del'>-</div><div class='del'>-module RDoc</div><div class='del'>-</div><div class='del'>-  # Display usage information from the comment at the top of</div><div class='del'>-  # the file. String arguments identify specific sections of the</div><div class='del'>-  # comment to display. An optional integer first argument</div><div class='del'>-  # specifies the exit status  (defaults to 0)</div><div class='del'>-</div><div class='del'>-  def RDoc.usage(*args)</div><div class='del'>-    exit_code = 0</div><div class='del'>-</div><div class='del'>-    if args.size &gt; 0</div><div class='del'>-      status = args[0]</div><div class='del'>-      if status.respond_to?(:to_int)</div><div class='del'>-        exit_code = status.to_int</div><div class='del'>-        args.shift</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # display the usage and exit with the given code</div><div class='del'>-    usage_no_exit(*args)</div><div class='del'>-    exit(exit_code)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # Display usage</div><div class='del'>-  def RDoc.usage_no_exit(*args)</div><div class='del'>-    main_program_file = caller[-1].sub(/:\d+$/, '')</div><div class='del'>-    comment = File.open(main_program_file) do |file|</div><div class='del'>-      find_comment(file)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    comment = comment.gsub(/^\s*#/, '')</div><div class='del'>-</div><div class='del'>-    markup = SM::SimpleMarkup.new</div><div class='del'>-    flow_convertor = SM::ToFlow.new</div><div class='del'>-    </div><div class='del'>-    flow = markup.convert(comment, flow_convertor)</div><div class='del'>-</div><div class='del'>-    format = "plain"</div><div class='del'>-</div><div class='del'>-    unless args.empty?</div><div class='del'>-      flow = extract_sections(flow, args)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    options = RI::Options.instance</div><div class='del'>-    if args = ENV["RI"]</div><div class='del'>-      options.parse(args.split)</div><div class='del'>-    end</div><div class='del'>-    formatter = options.formatter.new(options, "")</div><div class='del'>-    formatter.display_flow(flow)</div><div class='del'>-  end</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'>-  # Find the first comment in the file (that isn't a shebang line)</div><div class='del'>-  # If the file doesn't start with a comment, report the fact</div><div class='del'>-  # and return empty string</div><div class='del'>-</div><div class='del'>-  def RDoc.gets(file)</div><div class='del'>-    if (line = file.gets) &amp;&amp; (line =~ /^#!/) # shebang</div><div class='del'>-      throw :exit, find_comment(file)</div><div class='del'>-    else</div><div class='del'>-      line</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  def RDoc.find_comment(file)</div><div class='del'>-    catch(:exit) do</div><div class='del'>-      # skip leading blank lines</div><div class='del'>-      0 while (line = gets(file)) &amp;&amp; (line =~ /^\s*$/)</div><div class='del'>-</div><div class='del'>-      comment = []</div><div class='del'>-      while line &amp;&amp; line =~ /^\s*#/</div><div class='del'>-        comment &lt;&lt; line</div><div class='del'>-        line = gets(file)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      0 while line &amp;&amp; (line = gets(file))</div><div class='del'>-      return no_comment if comment.empty?</div><div class='del'>-      return comment.join</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'>-  # Given an array of flow items and an array of section names, extract those</div><div class='del'>-  # sections from the flow which have headings corresponding to</div><div class='del'>-  # a section name in the list. Return them in the order</div><div class='del'>-  # of names in the +sections+ array.</div><div class='del'>-</div><div class='del'>-  def RDoc.extract_sections(flow, sections)</div><div class='del'>-    result = []</div><div class='del'>-    sections.each do |name|</div><div class='del'>-      name = name.downcase</div><div class='del'>-      copy_upto_level = nil</div><div class='del'>-</div><div class='del'>-      flow.each do |item|</div><div class='del'>-        case item</div><div class='del'>-        when SM::Flow::H</div><div class='del'>-          if copy_upto_level &amp;&amp; item.level &gt;= copy_upto_level</div><div class='del'>-            copy_upto_level = nil</div><div class='del'>-          else</div><div class='del'>-            if item.text.downcase == name</div><div class='del'>-              result &lt;&lt; item</div><div class='del'>-              copy_upto_level = item.level</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          if copy_upto_level</div><div class='del'>-            result &lt;&lt; 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'>-    if result.empty?</div><div class='del'>-      puts "Note to developer: requested section(s) [#{sections.join(', ')}] " +</div><div class='del'>-           "not found"</div><div class='del'>-      result = flow</div><div class='del'>-    end</div><div class='del'>-    result</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  #####</div><div class='del'>-  # Report the fact that no doc comment count be found</div><div class='del'>-  def RDoc.no_comment</div><div class='del'>-    $stderr.puts "No usage information available for this program"</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'>-if $0 == __FILE__</div><div class='del'>-</div><div class='del'>-  RDoc::usage(*ARGV)</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/readbytes.rb b/lib/readbytes.rb<br/>deleted file mode 100644<br/>index ebb5fc0bd4..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/readbytes.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/readbytes.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,41 +0,0 @@</div><div class='del'>-# TruncatedDataError is raised when IO#readbytes fails to read enough data.</div><div class='del'>-</div><div class='del'>-class TruncatedDataError&lt;IOError</div><div class='del'>-  def initialize(mesg, data) # :nodoc:</div><div class='del'>-    @data = data</div><div class='del'>-    super(mesg)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # The read portion of an IO#readbytes attempt.</div><div class='del'>-  attr_reader :data</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class IO</div><div class='del'>-  # Reads exactly +n+ bytes.</div><div class='del'>-  #</div><div class='del'>-  # If the data read is nil an EOFError is raised.</div><div class='del'>-  #</div><div class='del'>-  # If the data read is too short a TruncatedDataError is raised and the read</div><div class='del'>-  # data is obtainable via its #data method.</div><div class='del'>-  def readbytes(n)</div><div class='del'>-    str = read(n)</div><div class='del'>-    if str == nil</div><div class='del'>-      raise EOFError, "End of file reached"</div><div class='del'>-    end</div><div class='del'>-    if str.size &lt; n</div><div class='del'>-      raise TruncatedDataError.new("data truncated", str) </div><div class='del'>-    end</div><div class='del'>-    str</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-if __FILE__ == $0</div><div class='del'>-  begin</div><div class='del'>-    loop do</div><div class='del'>-      print STDIN.readbytes(6)</div><div class='del'>-    end</div><div class='del'>-  rescue TruncatedDataError</div><div class='del'>-    p $!.data</div><div class='del'>-    raise</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/resolv-replace.rb b/lib/resolv-replace.rb<br/>deleted file mode 100644<br/>index 5d15b4577c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/resolv-replace.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/resolv-replace.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-require 'socket'</div><div class='del'>-require 'resolv'</div><div class='del'>-</div><div class='del'>-class &lt;&lt; IPSocket</div><div class='del'>-  alias original_resolv_getaddress getaddress</div><div class='del'>-  def getaddress(host)</div><div class='del'>-    begin</div><div class='del'>-      return Resolv.getaddress(host).to_s</div><div class='del'>-    rescue Resolv::ResolvError</div><div class='del'>-      raise SocketError, "Hostname not known: #{host}"</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class TCPSocket</div><div class='del'>-  alias original_resolv_initialize initialize</div><div class='del'>-  def initialize(host, serv, *rest)</div><div class='del'>-    rest[0] = IPSocket.getaddress(rest[0]) unless rest.empty?</div><div class='del'>-    original_resolv_initialize(IPSocket.getaddress(host), serv, *rest)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class UDPSocket</div><div class='del'>-  alias original_resolv_bind bind</div><div class='del'>-  def bind(host, port)</div><div class='del'>-    original_resolv_bind(IPSocket.getaddress(host), port)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias original_resolv_connect connect</div><div class='del'>-  def connect(host, port)</div><div class='del'>-    original_resolv_connect(IPSocket.getaddress(host), port)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  alias original_resolv_send send</div><div class='del'>-  def send(mesg, flags, *rest)</div><div class='del'>-    if rest.length == 2</div><div class='del'>-      host, port = rest</div><div class='del'>-      begin</div><div class='del'>-        addrs = Resolv.getaddresses(host)</div><div class='del'>-      rescue Resolv::ResolvError</div><div class='del'>-        raise SocketError, "Hostname not known: #{host}"</div><div class='del'>-      end</div><div class='del'>-      err = nil</div><div class='del'>-      addrs[0...-1].each {|addr|</div><div class='del'>-        begin</div><div class='del'>-          return original_resolv_send(mesg, flags, addr, port)</div><div class='del'>-        rescue SystemCallError</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      original_resolv_send(mesg, flags, addrs[-1], port)</div><div class='del'>-    else</div><div class='del'>-      original_resolv_send(mesg, flags, *rest)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-class SOCKSSocket</div><div class='del'>-  alias original_resolv_initialize initialize</div><div class='del'>-  def initialize(host, serv)</div><div class='del'>-    original_resolv_initialize(IPSocket.getaddress(host), port)</div><div class='del'>-  end</div><div class='del'>-end if defined? SOCKSSocket</div><div class='head'>diff --git a/lib/resolv.rb b/lib/resolv.rb<br/>deleted file mode 100644<br/>index a3ed32ed6d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/resolv.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/resolv.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,2210 +0,0 @@</div><div class='del'>-require 'socket'</div><div class='del'>-require 'fcntl'</div><div class='del'>-require 'timeout'</div><div class='del'>-require 'thread'</div><div class='del'>-</div><div class='del'>-# Resolv is a thread-aware DNS resolver library written in Ruby.  Resolv can</div><div class='del'>-# handle multiple DNS requests concurrently without blocking.  The ruby</div><div class='del'>-# interpreter.</div><div class='del'>-#</div><div class='del'>-# See also resolv-replace.rb to replace the libc resolver with # Resolv.</div><div class='del'>-# </div><div class='del'>-# Resolv can look up various DNS resources using the DNS module directly.</div><div class='del'>-# </div><div class='del'>-# Examples:</div><div class='del'>-# </div><div class='del'>-#   p Resolv.getaddress "www.ruby-lang.org"</div><div class='del'>-#   p Resolv.getname "210.251.121.214"</div><div class='del'>-# </div><div class='del'>-#   Resolv::DNS.open do |dns|</div><div class='del'>-#     ress = dns.getresources "www.ruby-lang.org", Resolv::DNS::Resource::IN::A</div><div class='del'>-#     p ress.map { |r| r.address }</div><div class='del'>-#     ress = dns.getresources "ruby-lang.org", Resolv::DNS::Resource::IN::MX</div><div class='del'>-#     p ress.map { |r| [r.exchange.to_s, r.preference] }</div><div class='del'>-#   end</div><div class='del'>-# </div><div class='del'>-# </div><div class='del'>-# == Bugs</div><div class='del'>-# </div><div class='del'>-# * NIS is not supported.</div><div class='del'>-# * /etc/nsswitch.conf is not supported.</div><div class='del'>-</div><div class='del'>-class Resolv</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Looks up the first IP address for +name+.</div><div class='del'>-  </div><div class='del'>-  def self.getaddress(name)</div><div class='del'>-    DefaultResolver.getaddress(name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Looks up all IP address for +name+.</div><div class='del'>-  </div><div class='del'>-  def self.getaddresses(name)</div><div class='del'>-    DefaultResolver.getaddresses(name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Iterates over all IP addresses for +name+.</div><div class='del'>-</div><div class='del'>-  def self.each_address(name, &amp;block)</div><div class='del'>-    DefaultResolver.each_address(name, &amp;block)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Looks up the hostname of +address+.</div><div class='del'>-</div><div class='del'>-  def self.getname(address)</div><div class='del'>-    DefaultResolver.getname(address)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Looks up all hostnames for +address+.</div><div class='del'>-</div><div class='del'>-  def self.getnames(address)</div><div class='del'>-    DefaultResolver.getnames(address)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Iterates over all hostnames for +address+.</div><div class='del'>-</div><div class='del'>-  def self.each_name(address, &amp;proc)</div><div class='del'>-    DefaultResolver.each_name(address, &amp;proc)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Creates a new Resolv using +resolvers+.</div><div class='del'>-</div><div class='del'>-  def initialize(resolvers=[Hosts.new, DNS.new])</div><div class='del'>-    @resolvers = resolvers</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Looks up the first IP address for +name+.</div><div class='del'>-  </div><div class='del'>-  def getaddress(name)</div><div class='del'>-    each_address(name) {|address| return address}</div><div class='del'>-    raise ResolvError.new("no address for #{name}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Looks up all IP address for +name+.</div><div class='del'>-  </div><div class='del'>-  def getaddresses(name)</div><div class='del'>-    ret = []</div><div class='del'>-    each_address(name) {|address| ret &lt;&lt; address}</div><div class='del'>-    return ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Iterates over all IP addresses for +name+.</div><div class='del'>-</div><div class='del'>-  def each_address(name)</div><div class='del'>-    if AddressRegex =~ name</div><div class='del'>-      yield name</div><div class='del'>-      return</div><div class='del'>-    end</div><div class='del'>-    yielded = false</div><div class='del'>-    @resolvers.each {|r|</div><div class='del'>-      r.each_address(name) {|address|</div><div class='del'>-        yield address.to_s</div><div class='del'>-        yielded = true</div><div class='del'>-      }</div><div class='del'>-      return if yielded</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Looks up the hostname of +address+.</div><div class='del'>-</div><div class='del'>-  def getname(address)</div><div class='del'>-    each_name(address) {|name| return name}</div><div class='del'>-    raise ResolvError.new("no name for #{address}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Looks up all hostnames for +address+.</div><div class='del'>-</div><div class='del'>-  def getnames(address)</div><div class='del'>-    ret = []</div><div class='del'>-    each_name(address) {|name| ret &lt;&lt; name}</div><div class='del'>-    return ret</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Iterates over all hostnames for +address+.</div><div class='del'>-</div><div class='del'>-  def each_name(address)</div><div class='del'>-    yielded = false</div><div class='del'>-    @resolvers.each {|r|</div><div class='del'>-      r.each_name(address) {|name|</div><div class='del'>-        yield name.to_s</div><div class='del'>-        yielded = true</div><div class='del'>-      }</div><div class='del'>-      return if yielded</div><div class='del'>-    }</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Indicates a failure to resolve a name or address.</div><div class='del'>-</div><div class='del'>-  class ResolvError &lt; StandardError; end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Indicates a timeout resolving a name or address.</div><div class='del'>-</div><div class='del'>-  class ResolvTimeout &lt; TimeoutError; end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # DNS::Hosts is a hostname resolver that uses the system hosts file.</div><div class='del'>-</div><div class='del'>-  class Hosts</div><div class='del'>-    if /mswin32|mingw|bccwin/ =~ RUBY_PLATFORM</div><div class='del'>-      require 'win32/resolv'</div><div class='del'>-      DefaultFileName = Win32::Resolv.get_hosts_path</div><div class='del'>-    else</div><div class='del'>-      DefaultFileName = '/etc/hosts'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new DNS::Hosts, using +filename+ for its data source.</div><div class='del'>-</div><div class='del'>-    def initialize(filename = DefaultFileName)</div><div class='del'>-      @filename = filename</div><div class='del'>-      @mutex = Mutex.new</div><div class='del'>-      @initialized = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def lazy_initialize # :nodoc:</div><div class='del'>-      @mutex.synchronize {</div><div class='del'>-        unless @initialized</div><div class='del'>-          @name2addr = {}</div><div class='del'>-          @addr2name = {}</div><div class='del'>-          open(@filename) {|f|</div><div class='del'>-            f.each {|line|</div><div class='del'>-              line.sub!(/#.*/, '')</div><div class='del'>-              addr, hostname, *aliases = line.split(/\s+/)</div><div class='del'>-              next unless addr</div><div class='del'>-              addr.untaint</div><div class='del'>-              hostname.untaint</div><div class='del'>-              @addr2name[addr] = [] unless @addr2name.include? addr</div><div class='del'>-              @addr2name[addr] &lt;&lt; hostname</div><div class='del'>-              @addr2name[addr] += aliases</div><div class='del'>-              @name2addr[hostname] = [] unless @name2addr.include? hostname</div><div class='del'>-              @name2addr[hostname] &lt;&lt; addr</div><div class='del'>-              aliases.each {|n|</div><div class='del'>-                n.untaint</div><div class='del'>-                @name2addr[n] = [] unless @name2addr.include? n</div><div class='del'>-                @name2addr[n] &lt;&lt; addr</div><div class='del'>-              }</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-          @name2addr.each {|name, arr| arr.reverse!}</div><div class='del'>-          @initialized = true</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'>-    ##</div><div class='del'>-    # Gets the IP address of +name+ from the hosts file.</div><div class='del'>-</div><div class='del'>-    def getaddress(name)</div><div class='del'>-      each_address(name) {|address| return address}</div><div class='del'>-      raise ResolvError.new("#{@filename} has no name: #{name}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Gets all IP addresses for +name+ from the hosts file.</div><div class='del'>-</div><div class='del'>-    def getaddresses(name)</div><div class='del'>-      ret = []</div><div class='del'>-      each_address(name) {|address| ret &lt;&lt; address}</div><div class='del'>-      return ret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Iterates over all IP addresses for +name+ retrieved from the hosts file.</div><div class='del'>-</div><div class='del'>-    def each_address(name, &amp;proc)</div><div class='del'>-      lazy_initialize</div><div class='del'>-      if @name2addr.include?(name)</div><div class='del'>-        @name2addr[name].each(&amp;proc)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Gets the hostname of +address+ from the hosts file.</div><div class='del'>-</div><div class='del'>-    def getname(address)</div><div class='del'>-      each_name(address) {|name| return name}</div><div class='del'>-      raise ResolvError.new("#{@filename} has no address: #{address}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Gets all hostnames for +address+ from the hosts file.</div><div class='del'>-</div><div class='del'>-    def getnames(address)</div><div class='del'>-      ret = []</div><div class='del'>-      each_name(address) {|name| ret &lt;&lt; name}</div><div class='del'>-      return ret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Iterates over all hostnames for +address+ retrieved from the hosts file.</div><div class='del'>-</div><div class='del'>-    def each_name(address, &amp;proc)</div><div class='del'>-      lazy_initialize</div><div class='del'>-      if @addr2name.include?(address)</div><div class='del'>-        @addr2name[address].each(&amp;proc)</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'>-  # Resolv::DNS is a DNS stub resolver.</div><div class='del'>-  #</div><div class='del'>-  # Information taken from the following places:</div><div class='del'>-  #</div><div class='del'>-  # * STD0013</div><div class='del'>-  # * RFC 1035</div><div class='del'>-  # * ftp://ftp.isi.edu/in-notes/iana/assignments/dns-parameters</div><div class='del'>-  # * etc.</div><div class='del'>-</div><div class='del'>-  class DNS</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Default DNS Port</div><div class='del'>-</div><div class='del'>-    Port = 53</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Default DNS UDP packet size</div><div class='del'>-</div><div class='del'>-    UDPSize = 512</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Group of DNS resolver threads</div><div class='del'>-</div><div class='del'>-    DNSThreadGroup = ThreadGroup.new</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new DNS resolver.  See Resolv::DNS.new for argument details.</div><div class='del'>-    #</div><div class='del'>-    # Yields the created DNS resolver to the block, if given, otherwise</div><div class='del'>-    # returns it.</div><div class='del'>-</div><div class='del'>-    def self.open(*args)</div><div class='del'>-      dns = new(*args)</div><div class='del'>-      return dns unless block_given?</div><div class='del'>-      begin</div><div class='del'>-        yield dns</div><div class='del'>-      ensure</div><div class='del'>-        dns.close</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new DNS resolver.</div><div class='del'>-    #</div><div class='del'>-    # +config_info+ can be:</div><div class='del'>-    # </div><div class='del'>-    # nil:: Uses /etc/resolv.conf.</div><div class='del'>-    # String:: Path to a file using /etc/resolv.conf's format.</div><div class='del'>-    # Hash:: Must contain :nameserver, :search and :ndots keys.</div><div class='del'>-    #</div><div class='del'>-    # Example:</div><div class='del'>-    #</div><div class='del'>-    #   Resolv::DNS.new(:nameserver =&gt; ['210.251.121.21'],</div><div class='del'>-    #                   :search =&gt; ['ruby-lang.org'],</div><div class='del'>-    #                   :ndots =&gt; 1)</div><div class='del'>-</div><div class='del'>-    def initialize(config_info=nil)</div><div class='del'>-      @mutex = Mutex.new</div><div class='del'>-      @config = Config.new(config_info)</div><div class='del'>-      @initialized = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def lazy_initialize # :nodoc:</div><div class='del'>-      @mutex.synchronize {</div><div class='del'>-        unless @initialized</div><div class='del'>-          @config.lazy_initialize</div><div class='del'>-</div><div class='del'>-          if nameserver = @config.single?</div><div class='del'>-            @requester = Requester::ConnectedUDP.new(nameserver)</div><div class='del'>-          else</div><div class='del'>-            @requester = Requester::UnconnectedUDP.new</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          @initialized = true</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'>-    ##</div><div class='del'>-    # Closes the DNS resolver.</div><div class='del'>-</div><div class='del'>-    def close</div><div class='del'>-      @mutex.synchronize {</div><div class='del'>-        if @initialized</div><div class='del'>-          @requester.close if @requester</div><div class='del'>-          @requester = nil</div><div class='del'>-          @initialized = false</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'>-    # Gets the IP address of +name+ from the DNS resolver.</div><div class='del'>-    #</div><div class='del'>-    # +name+ can be a Resolv::DNS::Name or a String.  Retrieved address will</div><div class='del'>-    # be a Resolv::IPv4 or Resolv::IPv6</div><div class='del'>-</div><div class='del'>-    def getaddress(name)</div><div class='del'>-      each_address(name) {|address| return address}</div><div class='del'>-      raise ResolvError.new("DNS result has no information for #{name}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Gets all IP addresses for +name+ from the DNS resolver.</div><div class='del'>-    #</div><div class='del'>-    # +name+ can be a Resolv::DNS::Name or a String.  Retrieved addresses will</div><div class='del'>-    # be a Resolv::IPv4 or Resolv::IPv6</div><div class='del'>-</div><div class='del'>-    def getaddresses(name)</div><div class='del'>-      ret = []</div><div class='del'>-      each_address(name) {|address| ret &lt;&lt; address}</div><div class='del'>-      return ret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Iterates over all IP addresses for +name+ retrieved from the DNS</div><div class='del'>-    # resolver.</div><div class='del'>-    #</div><div class='del'>-    # +name+ can be a Resolv::DNS::Name or a String.  Retrieved addresses will</div><div class='del'>-    # be a Resolv::IPv4 or Resolv::IPv6</div><div class='del'>-</div><div class='del'>-    def each_address(name)</div><div class='del'>-      each_resource(name, Resource::IN::A) {|resource| yield resource.address}</div><div class='del'>-      each_resource(name, Resource::IN::AAAA) {|resource| yield resource.address}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Gets the hostname for +address+ from the DNS resolver.</div><div class='del'>-    #</div><div class='del'>-    # +address+ must be a Resolv::IPv4, Resolv::IPv6 or a String.  Retrieved</div><div class='del'>-    # name will be a Resolv::DNS::Name.</div><div class='del'>-</div><div class='del'>-    def getname(address)</div><div class='del'>-      each_name(address) {|name| return name}</div><div class='del'>-      raise ResolvError.new("DNS result has no information for #{address}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Gets all hostnames for +address+ from the DNS resolver.</div><div class='del'>-    #</div><div class='del'>-    # +address+ must be a Resolv::IPv4, Resolv::IPv6 or a String.  Retrieved</div><div class='del'>-    # names will be Resolv::DNS::Name instances.</div><div class='del'>-</div><div class='del'>-    def getnames(address)</div><div class='del'>-      ret = []</div><div class='del'>-      each_name(address) {|name| ret &lt;&lt; name}</div><div class='del'>-      return ret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Iterates over all hostnames for +address+ retrieved from the DNS</div><div class='del'>-    # resolver.</div><div class='del'>-    #</div><div class='del'>-    # +address+ must be a Resolv::IPv4, Resolv::IPv6 or a String.  Retrieved</div><div class='del'>-    # names will be Resolv::DNS::Name instances.</div><div class='del'>-</div><div class='del'>-    def each_name(address)</div><div class='del'>-      case address</div><div class='del'>-      when Name</div><div class='del'>-        ptr = address</div><div class='del'>-      when IPv4::Regex</div><div class='del'>-        ptr = IPv4.create(address).to_name</div><div class='del'>-      when IPv6::Regex</div><div class='del'>-        ptr = IPv6.create(address).to_name</div><div class='del'>-      else</div><div class='del'>-        raise ResolvError.new("cannot interpret as address: #{address}")</div><div class='del'>-      end</div><div class='del'>-      each_resource(ptr, Resource::IN::PTR) {|resource| yield resource.name}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Look up the +typeclass+ DNS resource of +name+.</div><div class='del'>-    #</div><div class='del'>-    # +name+ must be a Resolv::DNS::Name or a String.</div><div class='del'>-    #</div><div class='del'>-    # +typeclass+ should be one of the following:</div><div class='del'>-    #</div><div class='del'>-    # * Resolv::DNS::Resource::IN::A</div><div class='del'>-    # * Resolv::DNS::Resource::IN::AAAA</div><div class='del'>-    # * Resolv::DNS::Resource::IN::ANY</div><div class='del'>-    # * Resolv::DNS::Resource::IN::CNAME</div><div class='del'>-    # * Resolv::DNS::Resource::IN::HINFO</div><div class='del'>-    # * Resolv::DNS::Resource::IN::MINFO</div><div class='del'>-    # * Resolv::DNS::Resource::IN::MX</div><div class='del'>-    # * Resolv::DNS::Resource::IN::NS</div><div class='del'>-    # * Resolv::DNS::Resource::IN::PTR</div><div class='del'>-    # * Resolv::DNS::Resource::IN::SOA</div><div class='del'>-    # * Resolv::DNS::Resource::IN::TXT</div><div class='del'>-    # * Resolv::DNS::Resource::IN::WKS</div><div class='del'>-    #</div><div class='del'>-    # Returned resource is represented as a Resolv::DNS::Resource instance,</div><div class='del'>-    # i.e. Resolv::DNS::Resource::IN::A.</div><div class='del'>-</div><div class='del'>-    def getresource(name, typeclass)</div><div class='del'>-      each_resource(name, typeclass) {|resource| return resource}</div><div class='del'>-      raise ResolvError.new("DNS result has no information for #{name}")</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Looks up all +typeclass+ DNS resources for +name+.  See #getresource for</div><div class='del'>-    # argument details.</div><div class='del'>-  </div><div class='del'>-    def getresources(name, typeclass)</div><div class='del'>-      ret = []</div><div class='del'>-      each_resource(name, typeclass) {|resource| ret &lt;&lt; resource}</div><div class='del'>-      return ret</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Iterates over all +typeclass+ DNS resources for +name+.  See</div><div class='del'>-    # #getresource for argument details.</div><div class='del'>-  </div><div class='del'>-    def each_resource(name, typeclass, &amp;proc)</div><div class='del'>-      lazy_initialize</div><div class='del'>-      q = Queue.new</div><div class='del'>-      senders = {}</div><div class='del'>-      begin</div><div class='del'>-        @config.resolv(name) {|candidate, tout, nameserver|</div><div class='del'>-          msg = Message.new</div><div class='del'>-          msg.rd = 1</div><div class='del'>-          msg.add_question(candidate, typeclass)</div><div class='del'>-          unless sender = senders[[candidate, nameserver]]</div><div class='del'>-            sender = senders[[candidate, nameserver]] =</div><div class='del'>-              @requester.sender(msg, candidate, q, nameserver)</div><div class='del'>-          end</div><div class='del'>-          sender.send</div><div class='del'>-          reply = reply_name = nil</div><div class='del'>-          timeout(tout, ResolvTimeout) { reply, reply_name = q.pop }</div><div class='del'>-          case reply.rcode</div><div class='del'>-          when RCode::NoError</div><div class='del'>-            extract_resources(reply, reply_name, typeclass, &amp;proc)</div><div class='del'>-            return</div><div class='del'>-          when RCode::NXDomain</div><div class='del'>-            raise Config::NXDomain.new(reply_name.to_s)</div><div class='del'>-          else</div><div class='del'>-            raise Config::OtherResolvError.new(reply_name.to_s)</div><div class='del'>-          end</div><div class='del'>-        }</div><div class='del'>-      ensure</div><div class='del'>-        @requester.delete(q)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def extract_resources(msg, name, typeclass) # :nodoc:</div><div class='del'>-      if typeclass &lt; Resource::ANY</div><div class='del'>-        n0 = Name.create(name)</div><div class='del'>-        msg.each_answer {|n, ttl, data|</div><div class='del'>-          yield data if n0 == n</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      yielded = false</div><div class='del'>-      n0 = Name.create(name)</div><div class='del'>-      msg.each_answer {|n, ttl, data|</div><div class='del'>-        if n0 == n</div><div class='del'>-          case data</div><div class='del'>-          when typeclass</div><div class='del'>-            yield data</div><div class='del'>-            yielded = true</div><div class='del'>-          when Resource::CNAME</div><div class='del'>-            n0 = data.name</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      return if yielded</div><div class='del'>-      msg.each_answer {|n, ttl, data|</div><div class='del'>-        if n0 == n</div><div class='del'>-          case data</div><div class='del'>-          when typeclass</div><div class='del'>-            yield data</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'>-    class Requester # :nodoc:</div><div class='del'>-      def initialize</div><div class='del'>-        @senders = {}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def close</div><div class='del'>-        thread, sock, @thread, @sock = @thread, @sock</div><div class='del'>-        begin</div><div class='del'>-          if thread</div><div class='del'>-            thread.kill</div><div class='del'>-            thread.join</div><div class='del'>-          end</div><div class='del'>-        ensure</div><div class='del'>-          sock.close if sock</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def delete(arg)</div><div class='del'>-        case arg</div><div class='del'>-        when Sender</div><div class='del'>-          @senders.delete_if {|k, s| s == arg }</div><div class='del'>-        when Queue</div><div class='del'>-          @senders.delete_if {|k, s| s.queue == arg }</div><div class='del'>-        else</div><div class='del'>-          raise ArgumentError.new("neither Sender or Queue: #{arg}")</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Sender # :nodoc:</div><div class='del'>-        def initialize(msg, data, sock, queue)</div><div class='del'>-          @msg = msg</div><div class='del'>-          @data = data</div><div class='del'>-          @sock = sock</div><div class='del'>-          @queue = queue</div><div class='del'>-        end</div><div class='del'>-        attr_reader :queue</div><div class='del'>-</div><div class='del'>-        def recv(msg)</div><div class='del'>-          @queue.push([msg, @data])</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class UnconnectedUDP &lt; Requester # :nodoc:</div><div class='del'>-        def initialize</div><div class='del'>-          super()</div><div class='del'>-          @sock = UDPSocket.new</div><div class='del'>-          @sock.fcntl(Fcntl::F_SETFD, 1) if defined? Fcntl::F_SETFD</div><div class='del'>-          @id = {}</div><div class='del'>-          @id.default = -1</div><div class='del'>-          @thread = Thread.new {</div><div class='del'>-            DNSThreadGroup.add Thread.current</div><div class='del'>-            loop {</div><div class='del'>-              reply, from = @sock.recvfrom(UDPSize)</div><div class='del'>-              msg = begin</div><div class='del'>-                Message.decode(reply)</div><div class='del'>-              rescue DecodeError</div><div class='del'>-                STDERR.print("DNS message decoding error: #{reply.inspect}\n")</div><div class='del'>-                next</div><div class='del'>-              end</div><div class='del'>-              if s = @senders[[[from[3],from[1]],msg.id]]</div><div class='del'>-                s.recv msg</div><div class='del'>-              else</div><div class='del'>-                #STDERR.print("non-handled DNS message: #{msg.inspect} from #{from.inspect}\n")</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def sender(msg, data, queue, host, port=Port)</div><div class='del'>-          service = [host, port]</div><div class='del'>-          id = Thread.exclusive {</div><div class='del'>-            @id[service] = (@id[service] + 1) &amp; 0xffff</div><div class='del'>-          }</div><div class='del'>-          request = msg.encode</div><div class='del'>-          request[0,2] = [id].pack('n')</div><div class='del'>-          return @senders[[service, id]] =</div><div class='del'>-            Sender.new(request, data, @sock, host, port, queue)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Sender &lt; Requester::Sender # :nodoc:</div><div class='del'>-          def initialize(msg, data, sock, host, port, queue)</div><div class='del'>-            super(msg, data, sock, queue)</div><div class='del'>-            @host = host</div><div class='del'>-            @port = port</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def send</div><div class='del'>-            @sock.send(@msg, 0, @host, @port)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class ConnectedUDP &lt; Requester # :nodoc:</div><div class='del'>-        def initialize(host, port=Port)</div><div class='del'>-          super()</div><div class='del'>-          @host = host</div><div class='del'>-          @port = port</div><div class='del'>-          @sock = UDPSocket.new(host.index(':') ? Socket::AF_INET6 : Socket::AF_INET)</div><div class='del'>-          @sock.connect(host, port)</div><div class='del'>-          @sock.fcntl(Fcntl::F_SETFD, 1) if defined? Fcntl::F_SETFD</div><div class='del'>-          @id = -1</div><div class='del'>-          @thread = Thread.new {</div><div class='del'>-            DNSThreadGroup.add Thread.current</div><div class='del'>-            loop {</div><div class='del'>-              reply = @sock.recv(UDPSize)</div><div class='del'>-              msg = begin</div><div class='del'>-                Message.decode(reply)</div><div class='del'>-              rescue DecodeError</div><div class='del'>-                STDERR.print("DNS message decoding error: #{reply.inspect}")</div><div class='del'>-                next</div><div class='del'>-              end</div><div class='del'>-              if s = @senders[msg.id]</div><div class='del'>-                s.recv msg</div><div class='del'>-              else</div><div class='del'>-                #STDERR.print("non-handled DNS message: #{msg.inspect}")</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def sender(msg, data, queue, host=@host, port=@port)</div><div class='del'>-          unless host == @host &amp;&amp; port == @port</div><div class='del'>-            raise RequestError.new("host/port don't match: #{host}:#{port}")</div><div class='del'>-          end</div><div class='del'>-          id = Thread.exclusive { @id = (@id + 1) &amp; 0xffff }</div><div class='del'>-          request = msg.encode</div><div class='del'>-          request[0,2] = [id].pack('n')</div><div class='del'>-          return @senders[id] = Sender.new(request, data, @sock, queue)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Sender &lt; Requester::Sender # :nodoc:</div><div class='del'>-          def send</div><div class='del'>-            @sock.send(@msg, 0)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class TCP &lt; Requester # :nodoc:</div><div class='del'>-        def initialize(host, port=Port)</div><div class='del'>-          super()</div><div class='del'>-          @host = host</div><div class='del'>-          @port = port</div><div class='del'>-          @sock = TCPSocket.new</div><div class='del'>-          @sock.connect(host, port)</div><div class='del'>-          @sock.fcntl(Fcntl::F_SETFD, 1) if defined? Fcntl::F_SETFD</div><div class='del'>-          @id = -1</div><div class='del'>-          @senders = {}</div><div class='del'>-          @thread = Thread.new {</div><div class='del'>-            DNSThreadGroup.add Thread.current</div><div class='del'>-            loop {</div><div class='del'>-              len = @sock.read(2).unpack('n')</div><div class='del'>-              reply = @sock.read(len)</div><div class='del'>-              msg = begin</div><div class='del'>-                Message.decode(reply)</div><div class='del'>-              rescue DecodeError</div><div class='del'>-                STDERR.print("DNS message decoding error: #{reply.inspect}")</div><div class='del'>-                next</div><div class='del'>-              end</div><div class='del'>-              if s = @senders[msg.id]</div><div class='del'>-                s.push msg</div><div class='del'>-              else</div><div class='del'>-                #STDERR.print("non-handled DNS message: #{msg.inspect}")</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def sender(msg, data, queue, host=@host, port=@port)</div><div class='del'>-          unless host == @host &amp;&amp; port == @port</div><div class='del'>-            raise RequestError.new("host/port don't match: #{host}:#{port}")</div><div class='del'>-          end</div><div class='del'>-          id = Thread.exclusive { @id = (@id + 1) &amp; 0xffff }</div><div class='del'>-          request = msg.encode</div><div class='del'>-          request[0,2] = [request.length, id].pack('nn')</div><div class='del'>-          return @senders[id] = Sender.new(request, data, @sock, queue)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Sender &lt; Requester::Sender # :nodoc:</div><div class='del'>-          def send</div><div class='del'>-            @sock.print(@msg)</div><div class='del'>-            @sock.flush</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'>-      # Indicates a problem with the DNS request.</div><div class='del'>-</div><div class='del'>-      class RequestError &lt; StandardError</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Config # :nodoc:</div><div class='del'>-      def initialize(config_info=nil)</div><div class='del'>-        @mutex = Mutex.new</div><div class='del'>-        @config_info = config_info</div><div class='del'>-        @initialized = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def Config.parse_resolv_conf(filename)</div><div class='del'>-        nameserver = []</div><div class='del'>-        search = nil</div><div class='del'>-        ndots = 1</div><div class='del'>-        open(filename) {|f|</div><div class='del'>-          f.each {|line|</div><div class='del'>-            line.sub!(/[#;].*/, '')</div><div class='del'>-            keyword, *args = line.split(/\s+/)</div><div class='del'>-            args.each { |arg|</div><div class='del'>-              arg.untaint</div><div class='del'>-            }</div><div class='del'>-            next unless keyword</div><div class='del'>-            case keyword</div><div class='del'>-            when 'nameserver'</div><div class='del'>-              nameserver += args</div><div class='del'>-            when 'domain'</div><div class='del'>-              next if args.empty?</div><div class='del'>-              search = [args[0]]</div><div class='del'>-            when 'search'</div><div class='del'>-              next if args.empty?</div><div class='del'>-              search = args</div><div class='del'>-            when 'options'</div><div class='del'>-              args.each {|arg|</div><div class='del'>-                case arg</div><div class='del'>-                when /\Andots:(\d+)\z/</div><div class='del'>-                  ndots = $1.to_i</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'>-        return { :nameserver =&gt; nameserver, :search =&gt; search, :ndots =&gt; ndots }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def Config.default_config_hash(filename="/etc/resolv.conf")</div><div class='del'>-        if File.exist? filename</div><div class='del'>-          config_hash = Config.parse_resolv_conf(filename)</div><div class='del'>-        else</div><div class='del'>-          if /mswin32|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM</div><div class='del'>-            require 'win32/resolv'</div><div class='del'>-            search, nameserver = Win32::Resolv.get_resolv_info</div><div class='del'>-            config_hash = {}</div><div class='del'>-            config_hash[:nameserver] = nameserver if nameserver</div><div class='del'>-            config_hash[:search] = [search].flatten if search</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        config_hash</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def lazy_initialize</div><div class='del'>-        @mutex.synchronize {</div><div class='del'>-          unless @initialized</div><div class='del'>-            @nameserver = []</div><div class='del'>-            @search = nil</div><div class='del'>-            @ndots = 1</div><div class='del'>-            case @config_info</div><div class='del'>-            when nil</div><div class='del'>-              config_hash = Config.default_config_hash</div><div class='del'>-            when String</div><div class='del'>-              config_hash = Config.parse_resolv_conf(@config_info)</div><div class='del'>-            when Hash</div><div class='del'>-              config_hash = @config_info.dup</div><div class='del'>-              if String === config_hash[:nameserver]</div><div class='del'>-                config_hash[:nameserver] = [config_hash[:nameserver]]</div><div class='del'>-              end</div><div class='del'>-              if String === config_hash[:search]</div><div class='del'>-                config_hash[:search] = [config_hash[:search]]</div><div class='del'>-              end</div><div class='del'>-            else</div><div class='del'>-              raise ArgumentError.new("invalid resolv configuration: #{@config_info.inspect}")</div><div class='del'>-            end</div><div class='del'>-            @nameserver = config_hash[:nameserver] if config_hash.include? :nameserver</div><div class='del'>-            @search = config_hash[:search] if config_hash.include? :search</div><div class='del'>-            @ndots = config_hash[:ndots] if config_hash.include? :ndots</div><div class='del'>-</div><div class='del'>-            @nameserver = ['0.0.0.0'] if @nameserver.empty?</div><div class='del'>-            if @search</div><div class='del'>-              @search = @search.map {|arg| Label.split(arg) }</div><div class='del'>-            else</div><div class='del'>-              hostname = Socket.gethostname</div><div class='del'>-              if /\./ =~ hostname</div><div class='del'>-                @search = [Label.split($')]</div><div class='del'>-              else</div><div class='del'>-                @search = [[]]</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if !@nameserver.kind_of?(Array) ||</div><div class='del'>-               !@nameserver.all? {|ns| String === ns }</div><div class='del'>-              raise ArgumentError.new("invalid nameserver config: #{@nameserver.inspect}")</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if !@search.kind_of?(Array) ||</div><div class='del'>-               !@search.all? {|ls| ls.all? {|l| Label::Str === l } }</div><div class='del'>-              raise ArgumentError.new("invalid search config: #{@search.inspect}")</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            if !@ndots.kind_of?(Integer)</div><div class='del'>-              raise ArgumentError.new("invalid ndots config: #{@ndots.inspect}")</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            @initialized = true</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 single?</div><div class='del'>-        lazy_initialize</div><div class='del'>-        if @nameserver.length == 1</div><div class='del'>-          return @nameserver[0]</div><div class='del'>-        else</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def generate_candidates(name)</div><div class='del'>-        candidates = nil</div><div class='del'>-        name = Name.create(name)</div><div class='del'>-        if name.absolute?</div><div class='del'>-          candidates = [name]</div><div class='del'>-        else</div><div class='del'>-          if @ndots &lt;= name.length - 1</div><div class='del'>-            candidates = [Name.new(name.to_a)]</div><div class='del'>-          else</div><div class='del'>-            candidates = []</div><div class='del'>-          end</div><div class='del'>-          candidates.concat(@search.map {|domain| Name.new(name.to_a + domain)})</div><div class='del'>-        end</div><div class='del'>-        return candidates</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      InitialTimeout = 5</div><div class='del'>-</div><div class='del'>-      def generate_timeouts</div><div class='del'>-        ts = [InitialTimeout]</div><div class='del'>-        ts &lt;&lt; ts[-1] * 2 / @nameserver.length</div><div class='del'>-        ts &lt;&lt; ts[-1] * 2</div><div class='del'>-        ts &lt;&lt; ts[-1] * 2</div><div class='del'>-        return ts</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def resolv(name)</div><div class='del'>-        candidates = generate_candidates(name)</div><div class='del'>-        timeouts = generate_timeouts</div><div class='del'>-        begin</div><div class='del'>-          candidates.each {|candidate|</div><div class='del'>-            begin</div><div class='del'>-              timeouts.each {|tout|</div><div class='del'>-                @nameserver.each {|nameserver|</div><div class='del'>-                  begin</div><div class='del'>-                    yield candidate, tout, nameserver</div><div class='del'>-                  rescue ResolvTimeout</div><div class='del'>-                  end</div><div class='del'>-                }</div><div class='del'>-              }</div><div class='del'>-              raise ResolvError.new("DNS resolv timeout: #{name}")</div><div class='del'>-            rescue NXDomain</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-        rescue ResolvError</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Indicates no such domain was found.</div><div class='del'>-</div><div class='del'>-      class NXDomain &lt; ResolvError</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Indicates some other unhandled resolver error was encountered.</div><div class='del'>-</div><div class='del'>-      class OtherResolvError &lt; ResolvError</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module OpCode # :nodoc:</div><div class='del'>-      Query = 0</div><div class='del'>-      IQuery = 1</div><div class='del'>-      Status = 2</div><div class='del'>-      Notify = 4</div><div class='del'>-      Update = 5</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module RCode # :nodoc:</div><div class='del'>-      NoError = 0</div><div class='del'>-      FormErr = 1</div><div class='del'>-      ServFail = 2</div><div class='del'>-      NXDomain = 3</div><div class='del'>-      NotImp = 4</div><div class='del'>-      Refused = 5</div><div class='del'>-      YXDomain = 6</div><div class='del'>-      YXRRSet = 7</div><div class='del'>-      NXRRSet = 8</div><div class='del'>-      NotAuth = 9</div><div class='del'>-      NotZone = 10</div><div class='del'>-      BADVERS = 16</div><div class='del'>-      BADSIG = 16</div><div class='del'>-      BADKEY = 17</div><div class='del'>-      BADTIME = 18</div><div class='del'>-      BADMODE = 19</div><div class='del'>-      BADNAME = 20</div><div class='del'>-      BADALG = 21</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Indicates that the DNS response was unable to be decoded.</div><div class='del'>-</div><div class='del'>-    class DecodeError &lt; StandardError</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Indicates that the DNS request was unable to be encoded.</div><div class='del'>-</div><div class='del'>-    class EncodeError &lt; StandardError</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module Label # :nodoc:</div><div class='del'>-      def self.split(arg)</div><div class='del'>-        labels = []</div><div class='del'>-        arg.scan(/[^\.]+/) {labels &lt;&lt; Str.new($&amp;)}</div><div class='del'>-        return labels</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Str # :nodoc:</div><div class='del'>-        def initialize(string)</div><div class='del'>-          @string = string</div><div class='del'>-          @downcase = string.downcase</div><div class='del'>-        end</div><div class='del'>-        attr_reader :string, :downcase</div><div class='del'>-</div><div class='del'>-        def to_s</div><div class='del'>-          return @string</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def inspect</div><div class='del'>-          return "#&lt;#{self.class} #{self.to_s}&gt;"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def ==(other)</div><div class='del'>-          return @downcase == other.downcase</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def eql?(other)</div><div class='del'>-          return self == other</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def hash</div><div class='del'>-          return @downcase.hash</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'>-    # A representation of a DNS name.</div><div class='del'>-</div><div class='del'>-    class Name</div><div class='del'>-      </div><div class='del'>-      ##</div><div class='del'>-      # Creates a new DNS name from +arg+.  +arg+ can be:</div><div class='del'>-      #</div><div class='del'>-      # Name:: returns +arg+.</div><div class='del'>-      # String:: Creates a new Name.</div><div class='del'>-</div><div class='del'>-      def self.create(arg)</div><div class='del'>-        case arg</div><div class='del'>-        when Name</div><div class='del'>-          return arg</div><div class='del'>-        when String</div><div class='del'>-          return Name.new(Label.split(arg), /\.\z/ =~ arg ? true : false)</div><div class='del'>-        else</div><div class='del'>-          raise ArgumentError.new("cannot interpret as DNS name: #{arg.inspect}")</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(labels, absolute=true) # :nodoc:</div><div class='del'>-        @labels = labels</div><div class='del'>-        @absolute = absolute</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def inspect # :nodoc:</div><div class='del'>-        "#&lt;#{self.class}: #{self.to_s}#{@absolute ? '.' : ''}&gt;"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # True if this name is absolute.</div><div class='del'>-</div><div class='del'>-      def absolute?</div><div class='del'>-        return @absolute</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def ==(other) # :nodoc:</div><div class='del'>-        return false unless Name === other</div><div class='del'>-        return @labels.join == other.to_a.join &amp;&amp; @absolute == other.absolute?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      alias eql? == # :nodoc:</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Returns true if +other+ is a subdomain.</div><div class='del'>-      #</div><div class='del'>-      # Example:</div><div class='del'>-      #</div><div class='del'>-      #   domain = Resolv::DNS::Name.create("y.z")</div><div class='del'>-      #   p Resolv::DNS::Name.create("w.x.y.z").subdomain_of?(domain) #=&gt; true</div><div class='del'>-      #   p Resolv::DNS::Name.create("x.y.z").subdomain_of?(domain) #=&gt; true</div><div class='del'>-      #   p Resolv::DNS::Name.create("y.z").subdomain_of?(domain) #=&gt; false</div><div class='del'>-      #   p Resolv::DNS::Name.create("z").subdomain_of?(domain) #=&gt; false</div><div class='del'>-      #   p Resolv::DNS::Name.create("x.y.z.").subdomain_of?(domain) #=&gt; false</div><div class='del'>-      #   p Resolv::DNS::Name.create("w.z").subdomain_of?(domain) #=&gt; false</div><div class='del'>-      #</div><div class='del'>-</div><div class='del'>-      def subdomain_of?(other)</div><div class='del'>-        raise ArgumentError, "not a domain name: #{other.inspect}" unless Name === other</div><div class='del'>-        return false if @absolute != other.absolute?</div><div class='del'>-        other_len = other.length</div><div class='del'>-        return false if @labels.length &lt;= other_len</div><div class='del'>-        return @labels[-other_len, other_len] == other.to_a</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def hash # :nodoc:</div><div class='del'>-        return @labels.hash ^ @absolute.hash</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_a # :nodoc:</div><div class='del'>-        return @labels</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def length # :nodoc:</div><div class='del'>-        return @labels.length</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def [](i) # :nodoc:</div><div class='del'>-        return @labels[i]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # returns the domain name as a string.</div><div class='del'>-      #</div><div class='del'>-      # The domain name doesn't have a trailing dot even if the name object is</div><div class='del'>-      # absolute.</div><div class='del'>-      #</div><div class='del'>-      # Example:</div><div class='del'>-      #</div><div class='del'>-      #   p Resolv::DNS::Name.create("x.y.z.").to_s #=&gt; "x.y.z"</div><div class='del'>-      #   p Resolv::DNS::Name.create("x.y.z").to_s #=&gt; "x.y.z"</div><div class='del'>-</div><div class='del'>-      def to_s</div><div class='del'>-        return @labels.join('.')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Message # :nodoc:</div><div class='del'>-      @@identifier = -1</div><div class='del'>-</div><div class='del'>-      def initialize(id = (@@identifier += 1) &amp; 0xffff)</div><div class='del'>-        @id = id</div><div class='del'>-        @qr = 0</div><div class='del'>-        @opcode = 0</div><div class='del'>-        @aa = 0</div><div class='del'>-        @tc = 0</div><div class='del'>-        @rd = 0 # recursion desired</div><div class='del'>-        @ra = 0 # recursion available</div><div class='del'>-        @rcode = 0</div><div class='del'>-        @question = []</div><div class='del'>-        @answer = []</div><div class='del'>-        @authority = []</div><div class='del'>-        @additional = []</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_accessor :id, :qr, :opcode, :aa, :tc, :rd, :ra, :rcode</div><div class='del'>-      attr_reader :question, :answer, :authority, :additional</div><div class='del'>-</div><div class='del'>-      def ==(other)</div><div class='del'>-        return @id == other.id &amp;&amp;</div><div class='del'>-               @qr == other.qr &amp;&amp;</div><div class='del'>-               @opcode == other.opcode &amp;&amp;</div><div class='del'>-               @aa == other.aa &amp;&amp;</div><div class='del'>-               @tc == other.tc &amp;&amp;</div><div class='del'>-               @rd == other.rd &amp;&amp;</div><div class='del'>-               @ra == other.ra &amp;&amp;</div><div class='del'>-               @rcode == other.rcode &amp;&amp;</div><div class='del'>-               @question == other.question &amp;&amp;</div><div class='del'>-               @answer == other.answer &amp;&amp;</div><div class='del'>-               @authority == other.authority &amp;&amp;</div><div class='del'>-               @additional == other.additional</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_question(name, typeclass)</div><div class='del'>-        @question &lt;&lt; [Name.create(name), typeclass]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def each_question</div><div class='del'>-        @question.each {|name, typeclass|</div><div class='del'>-          yield name, typeclass</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_answer(name, ttl, data)</div><div class='del'>-        @answer &lt;&lt; [Name.create(name), ttl, data]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def each_answer</div><div class='del'>-        @answer.each {|name, ttl, data|</div><div class='del'>-          yield name, ttl, data</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_authority(name, ttl, data)</div><div class='del'>-        @authority &lt;&lt; [Name.create(name), ttl, data]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def each_authority</div><div class='del'>-        @authority.each {|name, ttl, data|</div><div class='del'>-          yield name, ttl, data</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_additional(name, ttl, data)</div><div class='del'>-        @additional &lt;&lt; [Name.create(name), ttl, data]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def each_additional</div><div class='del'>-        @additional.each {|name, ttl, data|</div><div class='del'>-          yield name, ttl, data</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def each_resource</div><div class='del'>-        each_answer {|name, ttl, data| yield name, ttl, data}</div><div class='del'>-        each_authority {|name, ttl, data| yield name, ttl, data}</div><div class='del'>-        each_additional {|name, ttl, data| yield name, ttl, data}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encode</div><div class='del'>-        return MessageEncoder.new {|msg|</div><div class='del'>-          msg.put_pack('nnnnnn',</div><div class='del'>-            @id,</div><div class='del'>-            (@qr &amp; 1) &lt;&lt; 15 |</div><div class='del'>-            (@opcode &amp; 15) &lt;&lt; 11 |</div><div class='del'>-            (@aa &amp; 1) &lt;&lt; 10 |</div><div class='del'>-            (@tc &amp; 1) &lt;&lt; 9 |</div><div class='del'>-            (@rd &amp; 1) &lt;&lt; 8 |</div><div class='del'>-            (@ra &amp; 1) &lt;&lt; 7 |</div><div class='del'>-            (@rcode &amp; 15),</div><div class='del'>-            @question.length,</div><div class='del'>-            @answer.length,</div><div class='del'>-            @authority.length,</div><div class='del'>-            @additional.length)</div><div class='del'>-          @question.each {|q|</div><div class='del'>-            name, typeclass = q</div><div class='del'>-            msg.put_name(name)</div><div class='del'>-            msg.put_pack('nn', typeclass::TypeValue, typeclass::ClassValue)</div><div class='del'>-          }</div><div class='del'>-          [@answer, @authority, @additional].each {|rr|</div><div class='del'>-            rr.each {|r|</div><div class='del'>-              name, ttl, data = r</div><div class='del'>-              msg.put_name(name)</div><div class='del'>-              msg.put_pack('nnN', data.class::TypeValue, data.class::ClassValue, ttl)</div><div class='del'>-              msg.put_length16 {data.encode_rdata(msg)}</div><div class='del'>-            }</div><div class='del'>-          }</div><div class='del'>-        }.to_s</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class MessageEncoder # :nodoc:</div><div class='del'>-        def initialize</div><div class='del'>-          @data = ''</div><div class='del'>-          @names = {}</div><div class='del'>-          yield self</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def to_s</div><div class='del'>-          return @data</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def put_bytes(d)</div><div class='del'>-          @data &lt;&lt; d</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def put_pack(template, *d)</div><div class='del'>-          @data &lt;&lt; d.pack(template)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def put_length16</div><div class='del'>-          length_index = @data.length</div><div class='del'>-          @data &lt;&lt; "\0\0"</div><div class='del'>-          data_start = @data.length</div><div class='del'>-          yield</div><div class='del'>-          data_end = @data.length</div><div class='del'>-          @data[length_index, 2] = [data_end - data_start].pack("n")</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def put_string(d)</div><div class='del'>-          self.put_pack("C", d.length)</div><div class='del'>-          @data &lt;&lt; d</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def put_string_list(ds)</div><div class='del'>-          ds.each {|d|</div><div class='del'>-            self.put_string(d)</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def put_name(d)</div><div class='del'>-          put_labels(d.to_a)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def put_labels(d)</div><div class='del'>-          d.each_index {|i|</div><div class='del'>-            domain = d[i..-1]</div><div class='del'>-            if idx = @names[domain]</div><div class='del'>-              self.put_pack("n", 0xc000 | idx)</div><div class='del'>-              return</div><div class='del'>-            else</div><div class='del'>-              @names[domain] = @data.length</div><div class='del'>-              self.put_label(d[i])</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-          @data &lt;&lt; "\0"</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def put_label(d)</div><div class='del'>-          self.put_string(d.to_s)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def Message.decode(m)</div><div class='del'>-        o = Message.new(0)</div><div class='del'>-        MessageDecoder.new(m) {|msg|</div><div class='del'>-          id, flag, qdcount, ancount, nscount, arcount =</div><div class='del'>-            msg.get_unpack('nnnnnn')</div><div class='del'>-          o.id = id</div><div class='del'>-          o.qr = (flag &gt;&gt; 15) &amp; 1</div><div class='del'>-          o.opcode = (flag &gt;&gt; 11) &amp; 15</div><div class='del'>-          o.aa = (flag &gt;&gt; 10) &amp; 1</div><div class='del'>-          o.tc = (flag &gt;&gt; 9) &amp; 1</div><div class='del'>-          o.rd = (flag &gt;&gt; 8) &amp; 1</div><div class='del'>-          o.ra = (flag &gt;&gt; 7) &amp; 1</div><div class='del'>-          o.rcode = flag &amp; 15</div><div class='del'>-          (1..qdcount).each {</div><div class='del'>-            name, typeclass = msg.get_question</div><div class='del'>-            o.add_question(name, typeclass)</div><div class='del'>-          }</div><div class='del'>-          (1..ancount).each {</div><div class='del'>-            name, ttl, data = msg.get_rr</div><div class='del'>-            o.add_answer(name, ttl, data)</div><div class='del'>-          }</div><div class='del'>-          (1..nscount).each {</div><div class='del'>-            name, ttl, data = msg.get_rr</div><div class='del'>-            o.add_authority(name, ttl, data)</div><div class='del'>-          }</div><div class='del'>-          (1..arcount).each {</div><div class='del'>-            name, ttl, data = msg.get_rr</div><div class='del'>-            o.add_additional(name, ttl, data)</div><div class='del'>-          }</div><div class='del'>-        }</div><div class='del'>-        return o</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class MessageDecoder # :nodoc:</div><div class='del'>-        def initialize(data)</div><div class='del'>-          @data = data</div><div class='del'>-          @index = 0</div><div class='del'>-          @limit = data.length</div><div class='del'>-          yield self</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_length16</div><div class='del'>-          len, = self.get_unpack('n')</div><div class='del'>-          save_limit = @limit</div><div class='del'>-          @limit = @index + len</div><div class='del'>-          d = yield(len)</div><div class='del'>-          if @index &lt; @limit</div><div class='del'>-            raise DecodeError.new("junk exists")</div><div class='del'>-          elsif @limit &lt; @index</div><div class='del'>-            raise DecodeError.new("limit exceeded")</div><div class='del'>-          end</div><div class='del'>-          @limit = save_limit</div><div class='del'>-          return d</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_bytes(len = @limit - @index)</div><div class='del'>-          d = @data[@index, len]</div><div class='del'>-          @index += len</div><div class='del'>-          return d</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_unpack(template)</div><div class='del'>-          len = 0</div><div class='del'>-          template.each_byte {|byte|</div><div class='del'>-            case byte</div><div class='del'>-            when ?c, ?C</div><div class='del'>-              len += 1</div><div class='del'>-            when ?n</div><div class='del'>-              len += 2</div><div class='del'>-            when ?N</div><div class='del'>-              len += 4</div><div class='del'>-            else</div><div class='del'>-              raise StandardError.new("unsupported template: '#{byte.chr}' in '#{template}'")</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-          raise DecodeError.new("limit exceeded") if @limit &lt; @index + len</div><div class='del'>-          arr = @data.unpack("@#{@index}#{template}")</div><div class='del'>-          @index += len</div><div class='del'>-          return arr</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_string</div><div class='del'>-          len = @data[@index]</div><div class='del'>-          raise DecodeError.new("limit exceeded") if @limit &lt; @index + 1 + len</div><div class='del'>-          d = @data[@index + 1, len]</div><div class='del'>-          @index += 1 + len</div><div class='del'>-          return d</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_string_list</div><div class='del'>-          strings = []</div><div class='del'>-          while @index &lt; @limit</div><div class='del'>-            strings &lt;&lt; self.get_string</div><div class='del'>-          end</div><div class='del'>-          strings</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_name</div><div class='del'>-          return Name.new(self.get_labels)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_labels(limit=nil)</div><div class='del'>-          limit = @index if !limit || @index &lt; limit</div><div class='del'>-          d = []</div><div class='del'>-          while true</div><div class='del'>-            case @data[@index]</div><div class='del'>-            when 0</div><div class='del'>-              @index += 1</div><div class='del'>-              return d</div><div class='del'>-            when 192..255</div><div class='del'>-              idx = self.get_unpack('n')[0] &amp; 0x3fff</div><div class='del'>-              if limit &lt;= idx</div><div class='del'>-                raise DecodeError.new("non-backward name pointer")</div><div class='del'>-              end</div><div class='del'>-              save_index = @index</div><div class='del'>-              @index = idx</div><div class='del'>-              d += self.get_labels(limit)</div><div class='del'>-              @index = save_index</div><div class='del'>-              return d</div><div class='del'>-            else</div><div class='del'>-              d &lt;&lt; self.get_label</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          return d</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_label</div><div class='del'>-          return Label::Str.new(self.get_string)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_question</div><div class='del'>-          name = self.get_name</div><div class='del'>-          type, klass = self.get_unpack("nn")</div><div class='del'>-          return name, Resource.get_class(type, klass)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def get_rr</div><div class='del'>-          name = self.get_name</div><div class='del'>-          type, klass, ttl = self.get_unpack('nnN')</div><div class='del'>-          typeclass = Resource.get_class(type, klass)</div><div class='del'>-          return name, ttl, self.get_length16 {typeclass.decode_rdata(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'>-    # A DNS query abstract class.</div><div class='del'>-</div><div class='del'>-    class Query</div><div class='del'>-      def encode_rdata(msg) # :nodoc:</div><div class='del'>-        raise EncodeError.new("#{self.class} is query.") </div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-        raise DecodeError.new("#{self.class} is query.") </div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # A DNS resource abstract class.</div><div class='del'>-</div><div class='del'>-    class Resource &lt; Query</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Remaining Time To Live for this Resource.</div><div class='del'>-</div><div class='del'>-      attr_reader :ttl</div><div class='del'>-</div><div class='del'>-      ClassHash = {} # :nodoc:</div><div class='del'>-</div><div class='del'>-      def encode_rdata(msg) # :nodoc:</div><div class='del'>-        raise NotImplementedError.new</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-        raise NotImplementedError.new</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def ==(other) # :nodoc:</div><div class='del'>-        return self.class == other.class &amp;&amp;</div><div class='del'>-          self.instance_variables == other.instance_variables &amp;&amp;</div><div class='del'>-          self.instance_variables.collect {|name| self.instance_eval name} ==</div><div class='del'>-            other.instance_variables.collect {|name| other.instance_eval name}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def eql?(other) # :nodoc:</div><div class='del'>-        return self == other</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def hash # :nodoc:</div><div class='del'>-        h = 0</div><div class='del'>-        self.instance_variables.each {|name|</div><div class='del'>-          h ^= self.instance_eval("#{name}.hash")</div><div class='del'>-        }</div><div class='del'>-        return h</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def self.get_class(type_value, class_value) # :nodoc:</div><div class='del'>-        return ClassHash[[type_value, class_value]] ||</div><div class='del'>-               Generic.create(type_value, class_value)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # A generic resource abstract class.</div><div class='del'>-</div><div class='del'>-      class Generic &lt; Resource</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Creates a new generic resource.</div><div class='del'>-</div><div class='del'>-        def initialize(data)</div><div class='del'>-          @data = data</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Data for this generic resource.</div><div class='del'>-</div><div class='del'>-        attr_reader :data</div><div class='del'>-</div><div class='del'>-        def encode_rdata(msg) # :nodoc:</div><div class='del'>-          msg.put_bytes(data)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-          return self.new(msg.get_bytes)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.create(type_value, class_value) # :nodoc:</div><div class='del'>-          c = Class.new(Generic)</div><div class='del'>-          c.const_set(:TypeValue, type_value)</div><div class='del'>-          c.const_set(:ClassValue, class_value)</div><div class='del'>-          Generic.const_set("Type#{type_value}_Class#{class_value}", c)</div><div class='del'>-          ClassHash[[type_value, class_value]] = c</div><div class='del'>-          return c</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Domain Name resource abstract class.</div><div class='del'>-</div><div class='del'>-      class DomainName &lt; Resource</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Creates a new DomainName from +name+.</div><div class='del'>-</div><div class='del'>-        def initialize(name)</div><div class='del'>-          @name = name</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # The name of this DomainName.</div><div class='del'>-</div><div class='del'>-        attr_reader :name</div><div class='del'>-</div><div class='del'>-        def encode_rdata(msg) # :nodoc:</div><div class='del'>-          msg.put_name(@name)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-          return self.new(msg.get_name)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Standard (class generic) RRs</div><div class='del'>-</div><div class='del'>-      ClassValue = nil # :nodoc:</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # An authoritative name server.</div><div class='del'>-</div><div class='del'>-      class NS &lt; DomainName</div><div class='del'>-        TypeValue = 2 # :nodoc:</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # The canonical name for an alias.</div><div class='del'>-</div><div class='del'>-      class CNAME &lt; DomainName</div><div class='del'>-        TypeValue = 5 # :nodoc:</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Start Of Authority resource.</div><div class='del'>-</div><div class='del'>-      class SOA &lt; Resource</div><div class='del'>-</div><div class='del'>-        TypeValue = 6 # :nodoc:</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Creates a new SOA record.  See the attr documentation for the</div><div class='del'>-        # details of each argument.</div><div class='del'>-</div><div class='del'>-        def initialize(mname, rname, serial, refresh, retry_, expire, minimum)</div><div class='del'>-          @mname = mname</div><div class='del'>-          @rname = rname</div><div class='del'>-          @serial = serial</div><div class='del'>-          @refresh = refresh</div><div class='del'>-          @retry = retry_</div><div class='del'>-          @expire = expire</div><div class='del'>-          @minimum = minimum</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Name of the host where the master zone file for this zone resides.</div><div class='del'>-</div><div class='del'>-        attr_reader :mname</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # The person responsible for this domain name.</div><div class='del'>-</div><div class='del'>-        attr_reader :rname</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # The version number of the zone file.</div><div class='del'>-</div><div class='del'>-        attr_reader :serial</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # How often, in seconds, a secondary name server is to check for</div><div class='del'>-        # updates from the primary name server.</div><div class='del'>-</div><div class='del'>-        attr_reader :refresh</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # How often, in seconds, a secondary name server is to retry after a</div><div class='del'>-        # failure to check for a refresh.</div><div class='del'>-</div><div class='del'>-        attr_reader :retry</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Time in seconds that a secondary name server is to use the data</div><div class='del'>-        # before refreshing from the primary name server.</div><div class='del'>-</div><div class='del'>-        attr_reader :expire</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # The minimum number of seconds to be used for TTL values in RRs.</div><div class='del'>-</div><div class='del'>-        attr_reader :minimum</div><div class='del'>-</div><div class='del'>-        def encode_rdata(msg) # :nodoc:</div><div class='del'>-          msg.put_name(@mname)</div><div class='del'>-          msg.put_name(@rname)</div><div class='del'>-          msg.put_pack('NNNNN', @serial, @refresh, @retry, @expire, @minimum)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-          mname = msg.get_name</div><div class='del'>-          rname = msg.get_name</div><div class='del'>-          serial, refresh, retry_, expire, minimum = msg.get_unpack('NNNNN')</div><div class='del'>-          return self.new(</div><div class='del'>-            mname, rname, serial, refresh, retry_, expire, minimum)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # A Pointer to another DNS name.</div><div class='del'>-</div><div class='del'>-      class PTR &lt; DomainName</div><div class='del'>-        TypeValue = 12 # :nodoc:</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Host Information resource.</div><div class='del'>-</div><div class='del'>-      class HINFO &lt; Resource</div><div class='del'>-</div><div class='del'>-        TypeValue = 13 # :nodoc:</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Creates a new HINFO running +os+ on +cpu+.</div><div class='del'>-</div><div class='del'>-        def initialize(cpu, os)</div><div class='del'>-          @cpu = cpu</div><div class='del'>-          @os = os</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # CPU architecture for this resource.</div><div class='del'>-</div><div class='del'>-        attr_reader :cpu</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Operating system for this resource.</div><div class='del'>-</div><div class='del'>-        attr_reader :os</div><div class='del'>-</div><div class='del'>-        def encode_rdata(msg) # :nodoc:</div><div class='del'>-          msg.put_string(@cpu)</div><div class='del'>-          msg.put_string(@os)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-          cpu = msg.get_string</div><div class='del'>-          os = msg.get_string</div><div class='del'>-          return self.new(cpu, os)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Mailing list or mailbox information.</div><div class='del'>-</div><div class='del'>-      class MINFO &lt; Resource</div><div class='del'>-</div><div class='del'>-        TypeValue = 14 # :nodoc:</div><div class='del'>-</div><div class='del'>-        def initialize(rmailbx, emailbx)</div><div class='del'>-          @rmailbx = rmailbx</div><div class='del'>-          @emailbx = emailbx</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Domain name responsible for this mail list or mailbox.</div><div class='del'>-</div><div class='del'>-        attr_reader :rmailbx</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Mailbox to use for error messages related to the mail list or mailbox.</div><div class='del'>-</div><div class='del'>-        attr_reader :emailbx</div><div class='del'>-</div><div class='del'>-        def encode_rdata(msg) # :nodoc:</div><div class='del'>-          msg.put_name(@rmailbx)</div><div class='del'>-          msg.put_name(@emailbx)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-          rmailbx = msg.get_string</div><div class='del'>-          emailbx = msg.get_string</div><div class='del'>-          return self.new(rmailbx, emailbx)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Mail Exchanger resource.</div><div class='del'>-</div><div class='del'>-      class MX &lt; Resource</div><div class='del'>-</div><div class='del'>-        TypeValue= 15 # :nodoc:</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Creates a new MX record with +preference+, accepting mail at</div><div class='del'>-        # +exchange+.</div><div class='del'>-</div><div class='del'>-        def initialize(preference, exchange)</div><div class='del'>-          @preference = preference</div><div class='del'>-          @exchange = exchange</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # The preference for this MX.</div><div class='del'>-</div><div class='del'>-        attr_reader :preference</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # The host of this MX.</div><div class='del'>-</div><div class='del'>-        attr_reader :exchange</div><div class='del'>-</div><div class='del'>-        def encode_rdata(msg) # :nodoc:</div><div class='del'>-          msg.put_pack('n', @preference)</div><div class='del'>-          msg.put_name(@exchange)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-          preference, = msg.get_unpack('n')</div><div class='del'>-          exchange = msg.get_name</div><div class='del'>-          return self.new(preference, exchange)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # Unstructured text resource.</div><div class='del'>-</div><div class='del'>-      class TXT &lt; Resource</div><div class='del'>-</div><div class='del'>-        TypeValue = 16 # :nodoc:</div><div class='del'>-</div><div class='del'>-        def initialize(first_string, *rest_strings)</div><div class='del'>-          @strings = [first_string, *rest_strings]</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Returns an Array of Strings for this TXT record.</div><div class='del'>-</div><div class='del'>-        attr_reader :strings</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Returns the first string from +strings+.</div><div class='del'>-</div><div class='del'>-        def data</div><div class='del'>-          @strings[0]</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def encode_rdata(msg) # :nodoc:</div><div class='del'>-          msg.put_string_list(@strings)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-          strings = msg.get_string_list</div><div class='del'>-          return self.new(*strings)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # A Query type requesting any RR.</div><div class='del'>-</div><div class='del'>-      class ANY &lt; Query</div><div class='del'>-        TypeValue = 255 # :nodoc:</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ClassInsensitiveTypes = [ # :nodoc:</div><div class='del'>-        NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, ANY</div><div class='del'>-      ]</div><div class='del'>-</div><div class='del'>-      ##</div><div class='del'>-      # module IN contains ARPA Internet specific RRs.</div><div class='del'>-</div><div class='del'>-      module IN</div><div class='del'>-</div><div class='del'>-        ClassValue = 1 # :nodoc:</div><div class='del'>-</div><div class='del'>-        ClassInsensitiveTypes.each {|s|</div><div class='del'>-          c = Class.new(s)</div><div class='del'>-          c.const_set(:TypeValue, s::TypeValue)</div><div class='del'>-          c.const_set(:ClassValue, ClassValue)</div><div class='del'>-          ClassHash[[s::TypeValue, ClassValue]] = c</div><div class='del'>-          self.const_set(s.name.sub(/.*::/, ''), c)</div><div class='del'>-        }</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # IPv4 Address resource</div><div class='del'>-</div><div class='del'>-        class A &lt; Resource</div><div class='del'>-          TypeValue = 1</div><div class='del'>-          ClassValue = IN::ClassValue</div><div class='del'>-          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:</div><div class='del'>-</div><div class='del'>-          ##</div><div class='del'>-          # Creates a new A for +address+.</div><div class='del'>-</div><div class='del'>-          def initialize(address)</div><div class='del'>-            @address = IPv4.create(address)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          ##</div><div class='del'>-          # The Resolv::IPv4 address for this A.</div><div class='del'>-</div><div class='del'>-          attr_reader :address</div><div class='del'>-</div><div class='del'>-          def encode_rdata(msg) # :nodoc:</div><div class='del'>-            msg.put_bytes(@address.address)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-            return self.new(IPv4.new(msg.get_bytes(4)))</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # Well Known Service resource.</div><div class='del'>-</div><div class='del'>-        class WKS &lt; Resource</div><div class='del'>-          TypeValue = 11</div><div class='del'>-          ClassValue = IN::ClassValue</div><div class='del'>-          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:</div><div class='del'>-</div><div class='del'>-          def initialize(address, protocol, bitmap)</div><div class='del'>-            @address = IPv4.create(address)</div><div class='del'>-            @protocol = protocol</div><div class='del'>-            @bitmap = bitmap</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          ##</div><div class='del'>-          # The host these services run on.</div><div class='del'>-</div><div class='del'>-          attr_reader :address</div><div class='del'>-</div><div class='del'>-          ##</div><div class='del'>-          # IP protocol number for these services.</div><div class='del'>-</div><div class='del'>-          attr_reader :protocol</div><div class='del'>-</div><div class='del'>-          ##</div><div class='del'>-          # A bit map of enabled services on this host.</div><div class='del'>-          #</div><div class='del'>-          # If protocol is 6 (TCP) then the 26th bit corresponds to the SMTP</div><div class='del'>-          # service (port 25).  If this bit is set, then an SMTP server should</div><div class='del'>-          # be listening on TCP port 25; if zero, SMTP service is not</div><div class='del'>-          # supported.</div><div class='del'>-</div><div class='del'>-          attr_reader :bitmap</div><div class='del'>-</div><div class='del'>-          def encode_rdata(msg) # :nodoc:</div><div class='del'>-            msg.put_bytes(@address.address)</div><div class='del'>-            msg.put_pack("n", @protocol)</div><div class='del'>-            msg.put_bytes(@bitmap)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-            address = IPv4.new(msg.get_bytes(4))</div><div class='del'>-            protocol, = msg.get_unpack("n")</div><div class='del'>-            bitmap = msg.get_bytes</div><div class='del'>-            return self.new(address, protocol, bitmap)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # An IPv6 address record.</div><div class='del'>-</div><div class='del'>-        class AAAA &lt; Resource</div><div class='del'>-          TypeValue = 28</div><div class='del'>-          ClassValue = IN::ClassValue</div><div class='del'>-          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:</div><div class='del'>-</div><div class='del'>-          ##</div><div class='del'>-          # Creates a new AAAA for +address+.</div><div class='del'>-</div><div class='del'>-          def initialize(address)</div><div class='del'>-            @address = IPv6.create(address)</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          ##</div><div class='del'>-          # The Resolv::IPv6 address for this AAAA.</div><div class='del'>-</div><div class='del'>-          attr_reader :address</div><div class='del'>-</div><div class='del'>-          def encode_rdata(msg) # :nodoc:</div><div class='del'>-            msg.put_bytes(@address.address)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-            return self.new(IPv6.new(msg.get_bytes(16)))</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        ##</div><div class='del'>-        # SRV resource record defined in RFC 2782</div><div class='del'>-        # </div><div class='del'>-        # These records identify the hostname and port that a service is</div><div class='del'>-        # available at.</div><div class='del'>-</div><div class='del'>-        class SRV &lt; Resource</div><div class='del'>-          TypeValue = 33</div><div class='del'>-          ClassValue = IN::ClassValue</div><div class='del'>-          ClassHash[[TypeValue, ClassValue]] = self # :nodoc:</div><div class='del'>-</div><div class='del'>-          # Create a SRV resource record.</div><div class='del'>-          #</div><div class='del'>-          # See the documentation for #priority, #weight, #port and #target</div><div class='del'>-          # for +priority+, +weight+, +port and +target+ respectively.</div><div class='del'>-</div><div class='del'>-          def initialize(priority, weight, port, target)</div><div class='del'>-            @priority = priority.to_int</div><div class='del'>-            @weight = weight.to_int</div><div class='del'>-            @port = port.to_int</div><div class='del'>-            @target = Name.create(target)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          # The priority of this target host.</div><div class='del'>-          #</div><div class='del'>-          # A client MUST attempt to contact the target host with the</div><div class='del'>-          # lowest-numbered priority it can reach; target hosts with the same</div><div class='del'>-          # priority SHOULD be tried in an order defined by the weight field.</div><div class='del'>-          # The range is 0-65535.  Note that it is not widely implemented and</div><div class='del'>-          # should be set to zero.</div><div class='del'>-</div><div class='del'>-          attr_reader :priority</div><div class='del'>-</div><div class='del'>-          # A server selection mechanism.</div><div class='del'>-          #</div><div class='del'>-          # The weight field specifies a relative weight for entries with the</div><div class='del'>-          # same priority. Larger weights SHOULD be given a proportionately</div><div class='del'>-          # higher probability of being selected. The range of this number is</div><div class='del'>-          # 0-65535.  Domain administrators SHOULD use Weight 0 when there</div><div class='del'>-          # isn't any server selection to do, to make the RR easier to read</div><div class='del'>-          # for humans (less noisy). Note that it is not widely implemented</div><div class='del'>-          # and should be set to zero.</div><div class='del'>-</div><div class='del'>-          attr_reader :weight</div><div class='del'>-</div><div class='del'>-          # The port on this target host of this service.</div><div class='del'>-          #</div><div class='del'>-          # The range is 0-65535.</div><div class='del'>-</div><div class='del'>-          attr_reader :port</div><div class='del'>-</div><div class='del'>-          # The domain name of the target host.</div><div class='del'>-          #</div><div class='del'>-          # A target of "." means that the service is decidedly not available</div><div class='del'>-          # at this domain.</div><div class='del'>-</div><div class='del'>-          attr_reader :target</div><div class='del'>-</div><div class='del'>-          def encode_rdata(msg) # :nodoc:</div><div class='del'>-            msg.put_pack("n", @priority)</div><div class='del'>-            msg.put_pack("n", @weight)</div><div class='del'>-            msg.put_pack("n", @port)</div><div class='del'>-            msg.put_name(@target)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def self.decode_rdata(msg) # :nodoc:</div><div class='del'>-            priority, = msg.get_unpack("n")</div><div class='del'>-            weight,   = msg.get_unpack("n")</div><div class='del'>-            port,     = msg.get_unpack("n")</div><div class='del'>-            target    = msg.get_name</div><div class='del'>-            return self.new(priority, weight, port, target)</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'>-  ##</div><div class='del'>-  # A Resolv::DNS IPv4 address.</div><div class='del'>-</div><div class='del'>-  class IPv4</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Regular expression IPv4 addresses must match.</div><div class='del'>-</div><div class='del'>-    Regex = /\A(\d+)\.(\d+)\.(\d+)\.(\d+)\z/</div><div class='del'>-</div><div class='del'>-    def self.create(arg)</div><div class='del'>-      case arg</div><div class='del'>-      when IPv4</div><div class='del'>-        return arg</div><div class='del'>-      when Regex</div><div class='del'>-        if (0..255) === (a = $1.to_i) &amp;&amp;</div><div class='del'>-           (0..255) === (b = $2.to_i) &amp;&amp;</div><div class='del'>-           (0..255) === (c = $3.to_i) &amp;&amp;</div><div class='del'>-           (0..255) === (d = $4.to_i)</div><div class='del'>-          return self.new([a, b, c, d].pack("CCCC"))</div><div class='del'>-        else</div><div class='del'>-          raise ArgumentError.new("IPv4 address with invalid value: " + arg)</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        raise ArgumentError.new("cannot interpret as IPv4 address: #{arg.inspect}")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(address) # :nodoc:</div><div class='del'>-      unless address.kind_of?(String) &amp;&amp; address.length == 4</div><div class='del'>-        raise ArgumentError.new('IPv4 address must be 4 bytes')</div><div class='del'>-      end</div><div class='del'>-      @address = address</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # A String representation of this IPv4 address.</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # The raw IPv4 address as a String.</div><div class='del'>-</div><div class='del'>-    attr_reader :address</div><div class='del'>-</div><div class='del'>-    def to_s # :nodoc:</div><div class='del'>-      return sprintf("%d.%d.%d.%d", *@address.unpack("CCCC"))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect # :nodoc:</div><div class='del'>-      return "#&lt;#{self.class} #{self.to_s}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Turns this IPv4 address into a Resolv::DNS::Name.</div><div class='del'>-</div><div class='del'>-    def to_name</div><div class='del'>-      return DNS::Name.create(</div><div class='del'>-        '%d.%d.%d.%d.in-addr.arpa.' % @address.unpack('CCCC').reverse)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ==(other) # :nodoc:</div><div class='del'>-      return @address == other.address</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def eql?(other) # :nodoc:</div><div class='del'>-      return self == other</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def hash # :nodoc:</div><div class='del'>-      return @address.hash</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # A Resolv::DNS IPv6 address.</div><div class='del'>-</div><div class='del'>-  class IPv6</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # IPv6 address format a:b:c:d:e:f:g:h</div><div class='del'>-    Regex_8Hex = /\A</div><div class='del'>-      (?:[0-9A-Fa-f]{1,4}:){7}</div><div class='del'>-         [0-9A-Fa-f]{1,4}</div><div class='del'>-      \z/x</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Compressed IPv6 address format a::b</div><div class='del'>-</div><div class='del'>-    Regex_CompressedHex = /\A</div><div class='del'>-      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::</div><div class='del'>-      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)</div><div class='del'>-      \z/x</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # IPv4 mapped IPv6 address format a:b:c:d:e:f:w.x.y.z</div><div class='del'>-</div><div class='del'>-    Regex_6Hex4Dec = /\A</div><div class='del'>-      ((?:[0-9A-Fa-f]{1,4}:){6,6})</div><div class='del'>-      (\d+)\.(\d+)\.(\d+)\.(\d+)</div><div class='del'>-      \z/x</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Compressed IPv4 mapped IPv6 address format a::b:w.x.y.z</div><div class='del'>-</div><div class='del'>-    Regex_CompressedHex4Dec = /\A</div><div class='del'>-      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::</div><div class='del'>-      ((?:[0-9A-Fa-f]{1,4}:)*)</div><div class='del'>-      (\d+)\.(\d+)\.(\d+)\.(\d+)</div><div class='del'>-      \z/x</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # A composite IPv6 address Regexp.</div><div class='del'>-</div><div class='del'>-    Regex = /</div><div class='del'>-      (?:#{Regex_8Hex}) |</div><div class='del'>-      (?:#{Regex_CompressedHex}) |</div><div class='del'>-      (?:#{Regex_6Hex4Dec}) |</div><div class='del'>-      (?:#{Regex_CompressedHex4Dec})/x</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new IPv6 address from +arg+ which may be:</div><div class='del'>-    #</div><div class='del'>-    # IPv6:: returns +arg+.</div><div class='del'>-    # String:: +arg+ must match one of the IPv6::Regex* constants</div><div class='del'>-</div><div class='del'>-    def self.create(arg)</div><div class='del'>-      case arg</div><div class='del'>-      when IPv6</div><div class='del'>-        return arg</div><div class='del'>-      when String</div><div class='del'>-        address = ''</div><div class='del'>-        if Regex_8Hex =~ arg</div><div class='del'>-          arg.scan(/[0-9A-Fa-f]+/) {|hex| address &lt;&lt; [hex.hex].pack('n')}</div><div class='del'>-        elsif Regex_CompressedHex =~ arg</div><div class='del'>-          prefix = $1</div><div class='del'>-          suffix = $2</div><div class='del'>-          a1 = ''</div><div class='del'>-          a2 = ''</div><div class='del'>-          prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 &lt;&lt; [hex.hex].pack('n')}</div><div class='del'>-          suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 &lt;&lt; [hex.hex].pack('n')}</div><div class='del'>-          omitlen = 16 - a1.length - a2.length</div><div class='del'>-          address &lt;&lt; a1 &lt;&lt; "\0" * omitlen &lt;&lt; a2</div><div class='del'>-        elsif Regex_6Hex4Dec =~ arg</div><div class='del'>-          prefix, a, b, c, d = $1, $2.to_i, $3.to_i, $4.to_i, $5.to_i</div><div class='del'>-          if (0..255) === a &amp;&amp; (0..255) === b &amp;&amp; (0..255) === c &amp;&amp; (0..255) === d</div><div class='del'>-            prefix.scan(/[0-9A-Fa-f]+/) {|hex| address &lt;&lt; [hex.hex].pack('n')}</div><div class='del'>-            address &lt;&lt; [a, b, c, d].pack('CCCC')</div><div class='del'>-          else</div><div class='del'>-            raise ArgumentError.new("not numeric IPv6 address: " + arg)</div><div class='del'>-          end</div><div class='del'>-        elsif Regex_CompressedHex4Dec =~ arg</div><div class='del'>-          prefix, suffix, a, b, c, d = $1, $2, $3.to_i, $4.to_i, $5.to_i, $6.to_i</div><div class='del'>-          if (0..255) === a &amp;&amp; (0..255) === b &amp;&amp; (0..255) === c &amp;&amp; (0..255) === d</div><div class='del'>-            a1 = ''</div><div class='del'>-            a2 = ''</div><div class='del'>-            prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 &lt;&lt; [hex.hex].pack('n')}</div><div class='del'>-            suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 &lt;&lt; [hex.hex].pack('n')}</div><div class='del'>-            omitlen = 12 - a1.length - a2.length</div><div class='del'>-            address &lt;&lt; a1 &lt;&lt; "\0" * omitlen &lt;&lt; a2 &lt;&lt; [a, b, c, d].pack('CCCC')</div><div class='del'>-          else</div><div class='del'>-            raise ArgumentError.new("not numeric IPv6 address: " + arg)</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          raise ArgumentError.new("not numeric IPv6 address: " + arg)</div><div class='del'>-        end</div><div class='del'>-        return IPv6.new(address)</div><div class='del'>-      else</div><div class='del'>-        raise ArgumentError.new("cannot interpret as IPv6 address: #{arg.inspect}")</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize(address) # :nodoc:</div><div class='del'>-      unless address.kind_of?(String) &amp;&amp; address.length == 16</div><div class='del'>-        raise ArgumentError.new('IPv6 address must be 16 bytes')</div><div class='del'>-      end</div><div class='del'>-      @address = address</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # The raw IPv6 address as a String.</div><div class='del'>-</div><div class='del'>-    attr_reader :address</div><div class='del'>-</div><div class='del'>-    def to_s # :nodoc:</div><div class='del'>-      address = sprintf("%X:%X:%X:%X:%X:%X:%X:%X", *@address.unpack("nnnnnnnn"))</div><div class='del'>-      unless address.sub!(/(^|:)0(:0)+(:|$)/, '::')</div><div class='del'>-        address.sub!(/(^|:)0(:|$)/, '::')</div><div class='del'>-      end</div><div class='del'>-      return address</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect # :nodoc:</div><div class='del'>-      return "#&lt;#{self.class} #{self.to_s}&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Turns this IPv6 address into a Resolv::DNS::Name.</div><div class='del'>-    #--</div><div class='del'>-    # ip6.arpa should be searched too. [RFC3152]</div><div class='del'>-</div><div class='del'>-    def to_name</div><div class='del'>-      return DNS::Name.new(</div><div class='del'>-        @address.unpack("H32")[0].split(//).reverse + ['ip6', 'arpa'])</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ==(other) # :nodoc:</div><div class='del'>-      return @address == other.address</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def eql?(other) # :nodoc:</div><div class='del'>-      return self == other</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def hash # :nodoc:</div><div class='del'>-      return @address.hash</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Default resolver to use for Resolv class methods.</div><div class='del'>-</div><div class='del'>-  DefaultResolver = self.new</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Address Regexp to use for matching IP addresses.</div><div class='del'>-</div><div class='del'>-  AddressRegex = /(?:#{IPv4::Regex})|(?:#{IPv6::Regex})/</div><div class='del'>-</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/rexml/attlistdecl.rb b/lib/rexml/attlistdecl.rb<br/>deleted file mode 100644<br/>index ef4721b5ce..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/attlistdecl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/attlistdecl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,62 +0,0 @@</div><div class='del'>-#vim:ts=2 sw=2 noexpandtab:</div><div class='del'>-require 'rexml/child'</div><div class='del'>-require 'rexml/source'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	# This class needs:</div><div class='del'>-	# * Documentation</div><div class='del'>-	# * Work!  Not all types of attlists are intelligently parsed, so we just</div><div class='del'>-	# spew back out what we get in.  This works, but it would be better if</div><div class='del'>-	# we formatted the output ourselves.</div><div class='del'>-	#</div><div class='del'>-	# AttlistDecls provide *just* enough support to allow namespace</div><div class='del'>-	# declarations.  If you need some sort of generalized support, or have an</div><div class='del'>-	# interesting idea about how to map the hideous, terrible design of DTD</div><div class='del'>-	# AttlistDecls onto an intuitive Ruby interface, let me know.  I'm desperate</div><div class='del'>-	# for anything to make DTDs more palateable.</div><div class='del'>-	class AttlistDecl &lt; Child</div><div class='del'>-		include Enumerable</div><div class='del'>-</div><div class='del'>-		# What is this?  Got me.</div><div class='del'>-		attr_reader :element_name</div><div class='del'>-</div><div class='del'>-		# Create an AttlistDecl, pulling the information from a Source.  Notice</div><div class='del'>-		# that this isn't very convenient; to create an AttlistDecl, you basically</div><div class='del'>-		# have to format it yourself, and then have the initializer parse it.</div><div class='del'>-		# Sorry, but for the forseeable future, DTD support in REXML is pretty</div><div class='del'>-		# weak on convenience.  Have I mentioned how much I hate DTDs?</div><div class='del'>-		def initialize(source)</div><div class='del'>-			super()</div><div class='del'>-			if (source.kind_of? Array)</div><div class='del'>-				@element_name, @pairs, @contents = *source</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-	</div><div class='del'>-		# Access the attlist attribute/value pairs.</div><div class='del'>-		#  value = attlist_decl[ attribute_name ]</div><div class='del'>-		def [](key)</div><div class='del'>-			@pairs[key]</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Whether an attlist declaration includes the given attribute definition</div><div class='del'>-		#  if attlist_decl.include? "xmlns:foobar"</div><div class='del'>-		def include?(key)</div><div class='del'>-			@pairs.keys.include? key</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Iterate over the key/value pairs:</div><div class='del'>-		#  attlist_decl.each { |attribute_name, attribute_value| ... }</div><div class='del'>-		def each(&amp;block)</div><div class='del'>-			@pairs.each(&amp;block)</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Write out exactly what we got in.</div><div class='del'>-		def write out, indent=-1</div><div class='del'>-			out &lt;&lt; @contents</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def node_type</div><div class='del'>-			:attlistdecl</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/attribute.rb b/lib/rexml/attribute.rb<br/>deleted file mode 100644<br/>index 89c1ada36c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/attribute.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/attribute.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,185 +0,0 @@</div><div class='del'>-require "rexml/namespace"</div><div class='del'>-require 'rexml/text'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	# Defines an Element Attribute; IE, a attribute=value pair, as in:</div><div class='del'>-	# &lt;element attribute="value"/&gt;.  Attributes can be in their own</div><div class='del'>-	# namespaces.  General users of REXML will not interact with the</div><div class='del'>-	# Attribute class much.</div><div class='del'>-	class Attribute</div><div class='del'>-		include Node</div><div class='del'>-		include Namespace</div><div class='del'>-</div><div class='del'>-		# The element to which this attribute belongs</div><div class='del'>-		attr_reader :element</div><div class='del'>-		# The normalized value of this attribute.  That is, the attribute with</div><div class='del'>-		# entities intact.</div><div class='del'>-		attr_writer :normalized	</div><div class='del'>-		PATTERN = /\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\2/um</div><div class='del'>-</div><div class='del'>-		# Constructor.</div><div class='del'>-    # FIXME: The parser doesn't catch illegal characters in attributes</div><div class='del'>-    #</div><div class='del'>-    # first:: </div><div class='del'>-    #   Either: an Attribute, which this new attribute will become a</div><div class='del'>-    #   clone of; or a String, which is the name of this attribute</div><div class='del'>-    # second::</div><div class='del'>-    #   If +first+ is an Attribute, then this may be an Element, or nil.</div><div class='del'>-    #   If nil, then the Element parent of this attribute is the parent</div><div class='del'>-    #   of the +first+ Attribute.  If the first argument is a String, </div><div class='del'>-    #   then this must also be a String, and is the content of the attribute.  </div><div class='del'>-    #   If this is the content, it must be fully normalized (contain no</div><div class='del'>-    #   illegal characters).</div><div class='del'>-    # parent::</div><div class='del'>-    #   Ignored unless +first+ is a String; otherwise, may be the Element </div><div class='del'>-    #   parent of this attribute, or nil.</div><div class='del'>-    #</div><div class='del'>-		#</div><div class='del'>-		#  Attribute.new( attribute_to_clone )</div><div class='del'>-		#  Attribute.new( attribute_to_clone, parent_element )</div><div class='del'>-		#  Attribute.new( "attr", "attr_value" )</div><div class='del'>-		#  Attribute.new( "attr", "attr_value", parent_element )</div><div class='del'>-		def initialize( first, second=nil, parent=nil )</div><div class='del'>-			@normalized = @unnormalized = @element = nil</div><div class='del'>-			if first.kind_of? Attribute</div><div class='del'>-				self.name = first.expanded_name</div><div class='del'>-				@unnormalized = first.value</div><div class='del'>-				if second.kind_of? Element</div><div class='del'>-					@element = second</div><div class='del'>-				else</div><div class='del'>-					@element = first.element</div><div class='del'>-				end</div><div class='del'>-			elsif first.kind_of? String</div><div class='del'>-				@element = parent</div><div class='del'>-				self.name = first</div><div class='del'>-				@normalized = second.to_s</div><div class='del'>-			else</div><div class='del'>-				raise "illegal argument #{first.class.name} to Attribute constructor"</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns the namespace of the attribute.</div><div class='del'>-		# </div><div class='del'>-		#  e = Element.new( "elns:myelement" )</div><div class='del'>-		#  e.add_attribute( "nsa:a", "aval" )</div><div class='del'>-		#  e.add_attribute( "b", "bval" )</div><div class='del'>-		#  e.attributes.get_attribute( "a" ).prefix   # -&gt; "nsa"</div><div class='del'>-		#  e.attributes.get_attribute( "b" ).prefix   # -&gt; "elns"</div><div class='del'>-		#  a = Attribute.new( "x", "y" )</div><div class='del'>-		#  a.prefix                                   # -&gt; ""</div><div class='del'>-		def prefix</div><div class='del'>-			pf = super</div><div class='del'>-			if pf == ""</div><div class='del'>-				pf = @element.prefix if @element</div><div class='del'>-			end</div><div class='del'>-			pf</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns the namespace URL, if defined, or nil otherwise</div><div class='del'>-		# </div><div class='del'>-		#  e = Element.new("el")</div><div class='del'>-		#  e.add_attributes({"xmlns:ns", "http://url"})</div><div class='del'>-		#  e.namespace( "ns" )              # -&gt; "http://url"</div><div class='del'>-		def namespace arg=nil</div><div class='del'>-			arg = prefix if arg.nil?</div><div class='del'>-			@element.namespace arg</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns true if other is an Attribute and has the same name and value,</div><div class='del'>-		# false otherwise.</div><div class='del'>-		def ==( other )</div><div class='del'>-			other.kind_of?(Attribute) and other.name==name and other.value==value</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Creates (and returns) a hash from both the name and value</div><div class='del'>-		def hash</div><div class='del'>-			name.hash + value.hash</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns this attribute out as XML source, expanding the name</div><div class='del'>-		#</div><div class='del'>-		#  a = Attribute.new( "x", "y" )</div><div class='del'>-		#  a.to_string     # -&gt; "x='y'"</div><div class='del'>-		#  b = Attribute.new( "ns:x", "y" )</div><div class='del'>-		#  b.to_string     # -&gt; "ns:x='y'"</div><div class='del'>-		def to_string</div><div class='del'>-			if @element and @element.context and @element.context[:attribute_quote] == :quote</div><div class='del'>-				%Q^#@expanded_name="#{to_s().gsub(/"/, '&amp;quote;')}"^</div><div class='del'>-			else</div><div class='del'>-				"#@expanded_name='#{to_s().gsub(/'/, '&amp;apos;')}'"</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns the attribute value, with entities replaced</div><div class='del'>-		def to_s</div><div class='del'>-			return @normalized if @normalized</div><div class='del'>-</div><div class='del'>-			doctype = nil</div><div class='del'>-			if @element</div><div class='del'>-				doc = @element.document</div><div class='del'>-				doctype = doc.doctype if doc</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			@normalized = Text::normalize( @unnormalized, doctype )</div><div class='del'>-			@unnormalized = nil</div><div class='del'>-      @normalized</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns the UNNORMALIZED value of this attribute.  That is, entities</div><div class='del'>-		# have been expanded to their values</div><div class='del'>-		def value</div><div class='del'>-			return @unnormalized if @unnormalized</div><div class='del'>-			doctype = nil</div><div class='del'>-			if @element</div><div class='del'>-				doc = @element.document</div><div class='del'>-				doctype = doc.doctype if doc</div><div class='del'>-			end</div><div class='del'>-			@unnormalized = Text::unnormalize( @normalized, doctype )</div><div class='del'>-			@normalized = nil</div><div class='del'>-      @unnormalized</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns a copy of this attribute</div><div class='del'>-		def clone</div><div class='del'>-			Attribute.new self</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Sets the element of which this object is an attribute.  Normally, this</div><div class='del'>-		# is not directly called.</div><div class='del'>-		#</div><div class='del'>-		# Returns this attribute</div><div class='del'>-		def element=( element )</div><div class='del'>-			@element = element</div><div class='del'>-			self</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Removes this Attribute from the tree, and returns true if successfull</div><div class='del'>-		# </div><div class='del'>-		# This method is usually not called directly.</div><div class='del'>-		def remove</div><div class='del'>-			@element.attributes.delete self.name unless @element.nil?</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Writes this attribute (EG, puts 'key="value"' to the output)</div><div class='del'>-		def write( output, indent=-1 )</div><div class='del'>-			output &lt;&lt; to_string</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    def node_type</div><div class='del'>-      :attribute</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      rv = ""</div><div class='del'>-      write( rv )</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def xpath</div><div class='del'>-      path = @element.xpath</div><div class='del'>-      path += "/@#{self.expanded_name}"</div><div class='del'>-      return path</div><div class='del'>-    end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='del'>-#vim:ts=2 sw=2 noexpandtab:</div><div class='head'>diff --git a/lib/rexml/cdata.rb b/lib/rexml/cdata.rb<br/>deleted file mode 100644<br/>index efcb71160a..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/cdata.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/cdata.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,67 +0,0 @@</div><div class='del'>-require "rexml/text"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	class CData &lt; Text</div><div class='del'>-		START = '&lt;![CDATA['</div><div class='del'>-		STOP = ']]&gt;'</div><div class='del'>-		ILLEGAL = /(\]\]&gt;)/</div><div class='del'>-</div><div class='del'>-		#	Constructor.  CData is data between &lt;![CDATA[ ... ]]&gt;</div><div class='del'>-		#</div><div class='del'>-		# _Examples_</div><div class='del'>-		#  CData.new( source )</div><div class='del'>-		#  CData.new( "Here is some CDATA" )</div><div class='del'>-		#  CData.new( "Some unprocessed data", respect_whitespace_TF, parent_element )</div><div class='del'>-		def initialize( first, whitespace=true, parent=nil )</div><div class='del'>-			super( first, whitespace, parent, true, true, ILLEGAL )</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Make a copy of this object</div><div class='del'>-		# </div><div class='del'>-		# _Examples_</div><div class='del'>-		#  c = CData.new( "Some text" )</div><div class='del'>-		#  d = c.clone</div><div class='del'>-		#  d.to_s        # -&gt; "Some text"</div><div class='del'>-		def clone</div><div class='del'>-			CData.new self</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns the content of this CData object</div><div class='del'>-		#</div><div class='del'>-		# _Examples_</div><div class='del'>-		#  c = CData.new( "Some text" )</div><div class='del'>-		#  c.to_s        # -&gt; "Some text"</div><div class='del'>-		def to_s</div><div class='del'>-			@string</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    def value</div><div class='del'>-      @string</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # == DEPRECATED</div><div class='del'>-    # See the rexml/formatters package</div><div class='del'>-    #</div><div class='del'>-		# Generates XML output of this object</div><div class='del'>-		#</div><div class='del'>-		# output::</div><div class='del'>-		#   Where to write the string.  Defaults to $stdout</div><div class='del'>-		# indent::</div><div class='del'>-    #   The amount to indent this node by</div><div class='del'>-		# transitive::</div><div class='del'>-    #   Ignored</div><div class='del'>-		# ie_hack::</div><div class='del'>-    #   Ignored</div><div class='del'>-		#</div><div class='del'>-		# _Examples_</div><div class='del'>-		#  c = CData.new( " Some text " )</div><div class='del'>-		#  c.write( $stdout )     #-&gt;  &lt;![CDATA[ Some text ]]&gt;</div><div class='del'>-		def write( output=$stdout, indent=-1, transitive=false, ie_hack=false )</div><div class='del'>-      Kernel.warn( "#{self.class.name}.write is deprecated" )</div><div class='del'>-			indent( output, indent )</div><div class='del'>-			output &lt;&lt; START</div><div class='del'>-			output &lt;&lt; @string</div><div class='del'>-			output &lt;&lt; STOP</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/child.rb b/lib/rexml/child.rb<br/>deleted file mode 100644<br/>index 6d3c9df5e6..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/child.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/child.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,96 +0,0 @@</div><div class='del'>-require "rexml/node"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	##</div><div class='del'>-	# A Child object is something contained by a parent, and this class</div><div class='del'>-	# contains methods to support that.  Most user code will not use this</div><div class='del'>-	# class directly.</div><div class='del'>-	class Child</div><div class='del'>-		include Node</div><div class='del'>-		attr_reader :parent		# The Parent of this object</div><div class='del'>-</div><div class='del'>-		# Constructor.  Any inheritors of this class should call super to make</div><div class='del'>-		# sure this method is called.</div><div class='del'>-		# parent::</div><div class='del'>-		#   if supplied, the parent of this child will be set to the</div><div class='del'>-		#   supplied value, and self will be added to the parent</div><div class='del'>-		def initialize( parent = nil )</div><div class='del'>-			@parent = nil  </div><div class='del'>-			# Declare @parent, but don't define it.  The next line sets the </div><div class='del'>-			# parent.</div><div class='del'>-			parent.add( self ) if parent</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Replaces this object with another object.  Basically, calls</div><div class='del'>-		# Parent.replace_child</div><div class='del'>-		#</div><div class='del'>-		# Returns:: self</div><div class='del'>-		def replace_with( child )</div><div class='del'>-			@parent.replace_child( self, child )</div><div class='del'>-			self</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Removes this child from the parent.</div><div class='del'>-		#</div><div class='del'>-		# Returns:: self</div><div class='del'>-		def remove</div><div class='del'>-			unless @parent.nil?</div><div class='del'>-				@parent.delete self</div><div class='del'>-			end</div><div class='del'>-			self</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Sets the parent of this child to the supplied argument.</div><div class='del'>-		#</div><div class='del'>-		# other::</div><div class='del'>-		#   Must be a Parent object.  If this object is the same object as the</div><div class='del'>-		#   existing parent of this child, no action is taken. Otherwise, this</div><div class='del'>-		#   child is removed from the current parent (if one exists), and is added</div><div class='del'>-		#   to the new parent.</div><div class='del'>-		# Returns:: The parent added</div><div class='del'>-		def parent=( other )</div><div class='del'>-			return @parent if @parent == other</div><div class='del'>-			@parent.delete self if defined? @parent and @parent</div><div class='del'>-			@parent = other</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		alias :next_sibling :next_sibling_node</div><div class='del'>-		alias :previous_sibling :previous_sibling_node</div><div class='del'>-</div><div class='del'>-		# Sets the next sibling of this child.  This can be used to insert a child</div><div class='del'>-		# after some other child.</div><div class='del'>-		#  a = Element.new("a")</div><div class='del'>-		#  b = a.add_element("b")</div><div class='del'>-		#  c = Element.new("c")</div><div class='del'>-		#  b.next_sibling = c</div><div class='del'>-		#  # =&gt; &lt;a&gt;&lt;b/&gt;&lt;c/&gt;&lt;/a&gt;</div><div class='del'>-		def next_sibling=( other )</div><div class='del'>-		  parent.insert_after self, other</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Sets the previous sibling of this child.  This can be used to insert a </div><div class='del'>-		# child before some other child.</div><div class='del'>-		#  a = Element.new("a")</div><div class='del'>-		#  b = a.add_element("b")</div><div class='del'>-		#  c = Element.new("c")</div><div class='del'>-		#  b.previous_sibling = c</div><div class='del'>-		#  # =&gt; &lt;a&gt;&lt;b/&gt;&lt;c/&gt;&lt;/a&gt;</div><div class='del'>-		def previous_sibling=(other)</div><div class='del'>-		  parent.insert_before self, other</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns:: the document this child belongs to, or nil if this child</div><div class='del'>-		# belongs to no document</div><div class='del'>-		def document</div><div class='del'>-			return parent.document unless parent.nil?</div><div class='del'>-			nil</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# This doesn't yet handle encodings</div><div class='del'>-		def bytes</div><div class='del'>-			encoding = document.encoding</div><div class='del'>-</div><div class='del'>-			to_s</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/comment.rb b/lib/rexml/comment.rb<br/>deleted file mode 100644<br/>index 2b9b4b89c9..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/comment.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/comment.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,80 +0,0 @@</div><div class='del'>-require "rexml/child"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	##</div><div class='del'>-	# Represents an XML comment; that is, text between \&lt;!-- ... --&gt;</div><div class='del'>-	class Comment &lt; Child</div><div class='del'>-		include Comparable</div><div class='del'>-		START = "&lt;!--"</div><div class='del'>-		STOP = "--&gt;"</div><div class='del'>-</div><div class='del'>-		# The content text</div><div class='del'>-</div><div class='del'>-		attr_accessor :string</div><div class='del'>-</div><div class='del'>-		##</div><div class='del'>-		# Constructor.  The first argument can be one of three types:</div><div class='del'>-		# @param first If String, the contents of this comment are set to the </div><div class='del'>-		# argument.  If Comment, the argument is duplicated.  If</div><div class='del'>-		# Source, the argument is scanned for a comment.</div><div class='del'>-		# @param second If the first argument is a Source, this argument </div><div class='del'>-		# should be nil, not supplied, or a Parent to be set as the parent </div><div class='del'>-		# of this object</div><div class='del'>-		def initialize( first, second = nil )</div><div class='del'>-			#puts "IN COMMENT CONSTRUCTOR; SECOND IS #{second.type}"</div><div class='del'>-			super(second)</div><div class='del'>-			if first.kind_of? String</div><div class='del'>-				@string = first</div><div class='del'>-			elsif first.kind_of? Comment</div><div class='del'>-				@string = first.string</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def clone</div><div class='del'>-			Comment.new self</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    # == DEPRECATED</div><div class='del'>-    # See REXML::Formatters</div><div class='del'>-    #</div><div class='del'>-		# output::</div><div class='del'>-		#	 Where to write the string</div><div class='del'>-		# indent::</div><div class='del'>-		#	 An integer.	If -1, no indenting will be used; otherwise, the</div><div class='del'>-		#	 indentation will be this number of spaces, and children will be</div><div class='del'>-		#	 indented an additional amount.</div><div class='del'>-		# transitive::</div><div class='del'>-		#	 Ignored by this class.	The contents of comments are never modified.</div><div class='del'>-		# ie_hack::</div><div class='del'>-		#	 Needed for conformity to the child API, but not used by this class.</div><div class='del'>-		def write( output, indent=-1, transitive=false, ie_hack=false )</div><div class='del'>-      Kernel.warn("Comment.write is deprecated.  See REXML::Formatters")</div><div class='del'>-			indent( output, indent )</div><div class='del'>-			output &lt;&lt; START</div><div class='del'>-			output &lt;&lt; @string</div><div class='del'>-			output &lt;&lt; STOP</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		alias :to_s :string</div><div class='del'>-</div><div class='del'>-		##</div><div class='del'>-		# Compares this Comment to another; the contents of the comment are used</div><div class='del'>-		# in the comparison.</div><div class='del'>-		def &lt;=&gt;(other)</div><div class='del'>-			other.to_s &lt;=&gt; @string</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		##</div><div class='del'>-		# Compares this Comment to another; the contents of the comment are used</div><div class='del'>-		# in the comparison.</div><div class='del'>-		def ==( other )</div><div class='del'>-			other.kind_of? Comment and</div><div class='del'>-			(other &lt;=&gt; self) == 0</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    def node_type</div><div class='del'>-      :comment</div><div class='del'>-    end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='del'>-#vim:ts=2 sw=2 noexpandtab:</div><div class='head'>diff --git a/lib/rexml/doctype.rb b/lib/rexml/doctype.rb<br/>deleted file mode 100644<br/>index 05cd4ab331..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/doctype.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/doctype.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,271 +0,0 @@</div><div class='del'>-require "rexml/parent"</div><div class='del'>-require "rexml/parseexception"</div><div class='del'>-require "rexml/namespace"</div><div class='del'>-require 'rexml/entity'</div><div class='del'>-require 'rexml/attlistdecl'</div><div class='del'>-require 'rexml/xmltokens'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  # Represents an XML DOCTYPE declaration; that is, the contents of &lt;!DOCTYPE</div><div class='del'>-  # ... &gt;.  DOCTYPES can be used to declare the DTD of a document, as well as</div><div class='del'>-  # being used to declare entities used in the document.</div><div class='del'>-  class DocType &lt; Parent</div><div class='del'>-    include XMLTokens</div><div class='del'>-    START = "&lt;!DOCTYPE"</div><div class='del'>-    STOP = "&gt;"</div><div class='del'>-    SYSTEM = "SYSTEM"</div><div class='del'>-    PUBLIC = "PUBLIC"</div><div class='del'>-    DEFAULT_ENTITIES = { </div><div class='del'>-      'gt'=&gt;EntityConst::GT, </div><div class='del'>-      'lt'=&gt;EntityConst::LT, </div><div class='del'>-      'quot'=&gt;EntityConst::QUOT, </div><div class='del'>-      "apos"=&gt;EntityConst::APOS </div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    # name is the name of the doctype</div><div class='del'>-    # external_id is the referenced DTD, if given</div><div class='del'>-    attr_reader :name, :external_id, :entities, :namespaces</div><div class='del'>-</div><div class='del'>-    # Constructor</div><div class='del'>-    #</div><div class='del'>-    #   dt = DocType.new( 'foo', '-//I/Hate/External/IDs' )</div><div class='del'>-    #   # &lt;!DOCTYPE foo '-//I/Hate/External/IDs'&gt;</div><div class='del'>-    #   dt = DocType.new( doctype_to_clone )</div><div class='del'>-    #   # Incomplete.  Shallow clone of doctype</div><div class='del'>-    #</div><div class='del'>-    # +Note+ that the constructor: </div><div class='del'>-    #</div><div class='del'>-    #  Doctype.new( Source.new( "&lt;!DOCTYPE foo 'bar'&gt;" ) )</div><div class='del'>-    #</div><div class='del'>-    # is _deprecated_.  Do not use it.  It will probably disappear.</div><div class='del'>-    def initialize( first, parent=nil )</div><div class='del'>-      @entities = DEFAULT_ENTITIES</div><div class='del'>-      @long_name = @uri = nil</div><div class='del'>-      if first.kind_of? String</div><div class='del'>-        super()</div><div class='del'>-        @name = first</div><div class='del'>-        @external_id = parent</div><div class='del'>-      elsif first.kind_of? DocType</div><div class='del'>-        super( parent )</div><div class='del'>-        @name = first.name</div><div class='del'>-        @external_id = first.external_id</div><div class='del'>-      elsif first.kind_of? Array</div><div class='del'>-        super( parent )</div><div class='del'>-        @name = first[0]</div><div class='del'>-        @external_id = first[1]</div><div class='del'>-        @long_name = first[2]</div><div class='del'>-        @uri = first[3]</div><div class='del'>-      elsif first.kind_of? Source</div><div class='del'>-        super( parent )</div><div class='del'>-        parser = Parsers::BaseParser.new( first )</div><div class='del'>-        event = parser.pull</div><div class='del'>-        if event[0] == :start_doctype</div><div class='del'>-          @name, @external_id, @long_name, @uri, = event[1..-1]</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        super()</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def node_type</div><div class='del'>-      :doctype</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def attributes_of element</div><div class='del'>-      rv = []</div><div class='del'>-      each do |child|</div><div class='del'>-        child.each do |key,val|</div><div class='del'>-          rv &lt;&lt; Attribute.new(key,val)</div><div class='del'>-        end if child.kind_of? AttlistDecl and child.element_name == element</div><div class='del'>-      end</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def attribute_of element, attribute</div><div class='del'>-      att_decl = find do |child|</div><div class='del'>-        child.kind_of? AttlistDecl and</div><div class='del'>-        child.element_name == element and</div><div class='del'>-        child.include? attribute</div><div class='del'>-      end</div><div class='del'>-      return nil unless att_decl</div><div class='del'>-      att_decl[attribute]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def clone</div><div class='del'>-      DocType.new self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # output::</div><div class='del'>-    #   Where to write the string</div><div class='del'>-    # indent::</div><div class='del'>-    #   An integer.  If -1, no indentation will be used; otherwise, the</div><div class='del'>-    #   indentation will be this number of spaces, and children will be</div><div class='del'>-    #   indented an additional amount.</div><div class='del'>-    # transitive::</div><div class='del'>-    #   Ignored</div><div class='del'>-    # ie_hack::</div><div class='del'>-    #   Ignored</div><div class='del'>-    def write( output, indent=0, transitive=false, ie_hack=false )</div><div class='del'>-      f = REXML::Formatters::Default.new</div><div class='del'>-      indent( output, indent )</div><div class='del'>-      output &lt;&lt; START</div><div class='del'>-      output &lt;&lt; ' '</div><div class='del'>-      output &lt;&lt; @name</div><div class='del'>-      output &lt;&lt; " #@external_id" if @external_id</div><div class='del'>-      output &lt;&lt; " #{@long_name.inspect}" if @long_name</div><div class='del'>-      output &lt;&lt; " #{@uri.inspect}" if @uri</div><div class='del'>-      unless @children.empty?</div><div class='del'>-        next_indent = indent + 1</div><div class='del'>-        output &lt;&lt; ' ['</div><div class='del'>-        child = nil    # speed</div><div class='del'>-        @children.each { |child|</div><div class='del'>-          output &lt;&lt; "\n"</div><div class='del'>-          f.write( child, output )</div><div class='del'>-        }</div><div class='del'>-        output &lt;&lt; "\n]"</div><div class='del'>-      end</div><div class='del'>-      output &lt;&lt; STOP</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def context</div><div class='del'>-      @parent.context</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def entity( name )</div><div class='del'>-      @entities[name].unnormalized if @entities[name]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def add child</div><div class='del'>-      super(child)</div><div class='del'>-      @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES</div><div class='del'>-      @entities[ child.name ] = child if child.kind_of? Entity</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # This method retrieves the public identifier identifying the document's </div><div class='del'>-    # DTD.</div><div class='del'>-    #</div><div class='del'>-    # Method contributed by Henrik Martensson</div><div class='del'>-    def public</div><div class='del'>-      case @external_id</div><div class='del'>-      when "SYSTEM"</div><div class='del'>-        nil</div><div class='del'>-      when "PUBLIC"</div><div class='del'>-        strip_quotes(@long_name)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # This method retrieves the system identifier identifying the document's DTD</div><div class='del'>-    #</div><div class='del'>-    # Method contributed by Henrik Martensson</div><div class='del'>-    def system</div><div class='del'>-      case @external_id</div><div class='del'>-      when "SYSTEM"</div><div class='del'>-        strip_quotes(@long_name)</div><div class='del'>-      when "PUBLIC"</div><div class='del'>-        @uri.kind_of?(String) ? strip_quotes(@uri) : nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # This method returns a list of notations that have been declared in the</div><div class='del'>-    # _internal_ DTD subset. Notations in the external DTD subset are not </div><div class='del'>-    # listed.</div><div class='del'>-    #</div><div class='del'>-    # Method contributed by Henrik Martensson</div><div class='del'>-    def notations</div><div class='del'>-      children().select {|node| node.kind_of?(REXML::NotationDecl)}</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Retrieves a named notation. Only notations declared in the internal</div><div class='del'>-    # DTD subset can be retrieved.</div><div class='del'>-    #</div><div class='del'>-    # Method contributed by Henrik Martensson</div><div class='del'>-    def notation(name)</div><div class='del'>-      notations.find { |notation_decl|</div><div class='del'>-        notation_decl.name == name</div><div class='del'>-      }</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    private</div><div class='del'>-    </div><div class='del'>-    # Method contributed by Henrik Martensson</div><div class='del'>-    def strip_quotes(quoted_string)</div><div class='del'>-      quoted_string =~ /^[\'\"].*[\Â´\"]$/ ?</div><div class='del'>-        quoted_string[1, quoted_string.length-2] :</div><div class='del'>-        quoted_string</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # We don't really handle any of these since we're not a validating</div><div class='del'>-  # parser, so we can be pretty dumb about them.  All we need to be able</div><div class='del'>-  # to do is spew them back out on a write()</div><div class='del'>-</div><div class='del'>-  # This is an abstract class.  You never use this directly; it serves as a</div><div class='del'>-  # parent class for the specific declarations.</div><div class='del'>-  class Declaration &lt; Child</div><div class='del'>-    def initialize src</div><div class='del'>-      super()</div><div class='del'>-      @string = src</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      @string+'&gt;'</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # == DEPRECATED</div><div class='del'>-    # See REXML::Formatters</div><div class='del'>-    #</div><div class='del'>-    def write( output, indent )</div><div class='del'>-      output &lt;&lt; to_s</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  public</div><div class='del'>-  class ElementDecl &lt; Declaration</div><div class='del'>-    def initialize( src )</div><div class='del'>-      super</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class ExternalEntity &lt; Child</div><div class='del'>-    def initialize( src )</div><div class='del'>-      super()</div><div class='del'>-      @entity = src</div><div class='del'>-    end</div><div class='del'>-    def to_s</div><div class='del'>-      @entity</div><div class='del'>-    end</div><div class='del'>-    def write( output, indent )</div><div class='del'>-      output &lt;&lt; @entity</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class NotationDecl &lt; Child</div><div class='del'>-    attr_accessor :public, :system</div><div class='del'>-    def initialize name, middle, pub, sys</div><div class='del'>-      super(nil)</div><div class='del'>-      @name = name</div><div class='del'>-      @middle = middle</div><div class='del'>-      @public = pub</div><div class='del'>-      @system = sys</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      "&lt;!NOTATION #@name #@middle#{</div><div class='del'>-        @public ? ' ' + public.inspect : '' </div><div class='del'>-      }#{</div><div class='del'>-        @system ? ' ' +@system.inspect : ''</div><div class='del'>-      }&gt;"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def write( output, indent=-1 )</div><div class='del'>-      output &lt;&lt; to_s</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # This method retrieves the name of the notation.</div><div class='del'>-    #</div><div class='del'>-    # Method contributed by Henrik Martensson</div><div class='del'>-    def name</div><div class='del'>-      @name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/document.rb b/lib/rexml/document.rb<br/>deleted file mode 100644<br/>index 54aa691ad8..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/document.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/document.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,208 +0,0 @@</div><div class='del'>-require "rexml/element"</div><div class='del'>-require "rexml/xmldecl"</div><div class='del'>-require "rexml/source"</div><div class='del'>-require "rexml/comment"</div><div class='del'>-require "rexml/doctype"</div><div class='del'>-require "rexml/instruction"</div><div class='del'>-require "rexml/rexml"</div><div class='del'>-require "rexml/parseexception"</div><div class='del'>-require "rexml/output"</div><div class='del'>-require "rexml/parsers/baseparser"</div><div class='del'>-require "rexml/parsers/streamparser"</div><div class='del'>-require "rexml/parsers/treeparser"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  # Represents a full XML document, including PIs, a doctype, etc.  A</div><div class='del'>-  # Document has a single child that can be accessed by root().</div><div class='del'>-  # Note that if you want to have an XML declaration written for a document</div><div class='del'>-  # you create, you must add one; REXML documents do not write a default</div><div class='del'>-	# declaration for you.  See |DECLARATION| and |write|.</div><div class='del'>-	class Document &lt; Element</div><div class='del'>-		# A convenient default XML declaration.  If you want an XML declaration,</div><div class='del'>-		# the easiest way to add one is mydoc &lt;&lt; Document::DECLARATION</div><div class='del'>-    # +DEPRECATED+</div><div class='del'>-    # Use: mydoc &lt;&lt; XMLDecl.default</div><div class='del'>-		DECLARATION = XMLDecl.default</div><div class='del'>-</div><div class='del'>-		# Constructor</div><div class='del'>-		# @param source if supplied, must be a Document, String, or IO. </div><div class='del'>-		# Documents have their context and Element attributes cloned.</div><div class='del'>-	  # Strings are expected to be valid XML documents.  IOs are expected</div><div class='del'>-	  # to be sources of valid XML documents.</div><div class='del'>-	  # @param context if supplied, contains the context of the document;</div><div class='del'>-	  # this should be a Hash.</div><div class='del'>-		def initialize( source = nil, context = {} )</div><div class='del'>-			super()</div><div class='del'>-			@context = context</div><div class='del'>-			return if source.nil?</div><div class='del'>-			if source.kind_of? Document</div><div class='del'>-				@context = source.context</div><div class='del'>-				super source</div><div class='del'>-			else</div><div class='del'>-				build(  source )</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    def node_type</div><div class='del'>-      :document</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-		# Should be obvious</div><div class='del'>-		def clone</div><div class='del'>-			Document.new self</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# According to the XML spec, a root node has no expanded name</div><div class='del'>-		def expanded_name</div><div class='del'>-			''</div><div class='del'>-			#d = doc_type</div><div class='del'>-			#d ? d.name : "UNDEFINED"</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		alias :name :expanded_name</div><div class='del'>-</div><div class='del'>-		# We override this, because XMLDecls and DocTypes must go at the start</div><div class='del'>-		# of the document</div><div class='del'>-		def add( child )</div><div class='del'>-			if child.kind_of? XMLDecl</div><div class='del'>-				@children.unshift child</div><div class='del'>-        child.parent = self</div><div class='del'>-			elsif child.kind_of? DocType</div><div class='del'>-        # Find first Element or DocType node and insert the decl right </div><div class='del'>-        # before it.  If there is no such node, just insert the child at the</div><div class='del'>-        # end.  If there is a child and it is an DocType, then replace it.</div><div class='del'>-        insert_before_index = 0</div><div class='del'>-        @children.find { |x| </div><div class='del'>-          insert_before_index += 1</div><div class='del'>-          x.kind_of?(Element) || x.kind_of?(DocType)</div><div class='del'>-        }</div><div class='del'>-        if @children[ insert_before_index ] # Not null = not end of list</div><div class='del'>-          if @children[ insert_before_index ].kind_of DocType</div><div class='del'>-            @children[ insert_before_index ] = child</div><div class='del'>-          else</div><div class='del'>-            @children[ index_before_index-1, 0 ] = child</div><div class='del'>-          end</div><div class='del'>-        else  # Insert at end of list</div><div class='del'>-          @children[insert_before_index] = child</div><div class='del'>-        end</div><div class='del'>-				child.parent = self</div><div class='del'>-			else</div><div class='del'>-				rv = super</div><div class='del'>-				raise "attempted adding second root element to document" if @elements.size &gt; 1</div><div class='del'>-				rv</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-		alias :&lt;&lt; :add</div><div class='del'>-</div><div class='del'>-		def add_element(arg=nil, arg2=nil)</div><div class='del'>-			rv = super</div><div class='del'>-			raise "attempted adding second root element to document" if @elements.size &gt; 1</div><div class='del'>-			rv</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# @return the root Element of the document, or nil if this document</div><div class='del'>-		# has no children.</div><div class='del'>-		def root</div><div class='del'>-      elements[1]</div><div class='del'>-      #self</div><div class='del'>-      #@children.find { |item| item.kind_of? Element }</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# @return the DocType child of the document, if one exists,</div><div class='del'>-		# and nil otherwise.</div><div class='del'>-		def doctype</div><div class='del'>-			@children.find { |item| item.kind_of? DocType }</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# @return the XMLDecl of this document; if no XMLDecl has been</div><div class='del'>-		# set, the default declaration is returned.</div><div class='del'>-		def xml_decl</div><div class='del'>-			rv = @children[0]</div><div class='del'>-      return rv if rv.kind_of? XMLDecl</div><div class='del'>-      rv = @children.unshift(XMLDecl.default)[0]</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# @return the XMLDecl version of this document as a String.</div><div class='del'>-		# If no XMLDecl has been set, returns the default version.</div><div class='del'>-		def version</div><div class='del'>-			xml_decl().version</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# @return the XMLDecl encoding of this document as a String.</div><div class='del'>-		# If no XMLDecl has been set, returns the default encoding.</div><div class='del'>-		def encoding</div><div class='del'>-			xml_decl().encoding</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# @return the XMLDecl standalone value of this document as a String.</div><div class='del'>-		# If no XMLDecl has been set, returns the default setting.</div><div class='del'>-		def stand_alone?</div><div class='del'>-			xml_decl().stand_alone?</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    # Write the XML tree out, optionally with indent.  This writes out the</div><div class='del'>-    # entire XML document, including XML declarations, doctype declarations,</div><div class='del'>-    # and processing instructions (if any are given).</div><div class='del'>-    #</div><div class='del'>-    # A controversial point is whether Document should always write the XML</div><div class='del'>-    # declaration (&lt;?xml version='1.0'?&gt;) whether or not one is given by the</div><div class='del'>-    # user (or source document).  REXML does not write one if one was not</div><div class='del'>-    # specified, because it adds unnecessary bandwidth to applications such</div><div class='del'>-    # as XML-RPC.</div><div class='del'>-    #</div><div class='del'>-    # See also the classes in the rexml/formatters package for the proper way</div><div class='del'>-    # to change the default formatting of XML output</div><div class='del'>-    #</div><div class='del'>-    # _Examples_</div><div class='del'>-    #   Document.new("&lt;a&gt;&lt;b/&gt;&lt;/a&gt;").serialize</div><div class='del'>-    #</div><div class='del'>-    #   output_string = ""</div><div class='del'>-    #   tr = Transitive.new( output_string )</div><div class='del'>-    #   Document.new("&lt;a&gt;&lt;b/&gt;&lt;/a&gt;").serialize( tr )</div><div class='del'>-    #</div><div class='del'>-    # output::</div><div class='del'>-    #	  output an object which supports '&lt;&lt; string'; this is where the</div><div class='del'>-    #   document will be written.</div><div class='del'>-    # indent::</div><div class='del'>-    #   An integer.  If -1, no indenting will be used; otherwise, the</div><div class='del'>-    #   indentation will be twice this number of spaces, and children will be</div><div class='del'>-    #   indented an additional amount.  For a value of 3, every item will be </div><div class='del'>-    #   indented 3 more levels, or 6 more spaces (2 * 3). Defaults to -1</div><div class='del'>-    # trans::</div><div class='del'>-    #   If transitive is true and indent is &gt;= 0, then the output will be</div><div class='del'>-    #   pretty-printed in such a way that the added whitespace does not affect</div><div class='del'>-    #   the absolute *value* of the document -- that is, it leaves the value</div><div class='del'>-    #   and number of Text nodes in the document unchanged.</div><div class='del'>-    # ie_hack::</div><div class='del'>-    #   Internet Explorer is the worst piece of crap to have ever been</div><div class='del'>-    #   written, with the possible exception of Windows itself.  Since IE is</div><div class='del'>-    #   unable to parse proper XML, we have to provide a hack to generate XML</div><div class='del'>-    #   that IE's limited abilities can handle.  This hack inserts a space </div><div class='del'>-    #   before the /&gt; on empty tags.  Defaults to false</div><div class='del'>-		def write( output=$stdout, indent=-1, trans=false, ie_hack=false )</div><div class='del'>-      if xml_decl.encoding != "UTF-8" &amp;&amp; !output.kind_of?(Output)</div><div class='del'>-        output = Output.new( output, xml_decl.encoding )</div><div class='del'>-      end</div><div class='del'>-      formatter = if indent &gt; -1</div><div class='del'>-          if trans</div><div class='del'>-            REXML::Formatters::Transitive.new( indent, ie_hack )</div><div class='del'>-          else</div><div class='del'>-            REXML::Formatters::Pretty.new( indent, ie_hack )</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          REXML::Formatters::Default.new( ie_hack )</div><div class='del'>-        end</div><div class='del'>-      formatter.write( self, output )</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		</div><div class='del'>-		def Document::parse_stream( source, listener )</div><div class='del'>-			Parsers::StreamParser.new( source, listener ).parse</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		private</div><div class='del'>-		def build( source )</div><div class='del'>-      Parsers::TreeParser.new( source, self ).parse</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/dtd/attlistdecl.rb b/lib/rexml/dtd/attlistdecl.rb<br/>deleted file mode 100644<br/>index e176bb0749..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/dtd/attlistdecl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/dtd/attlistdecl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-require "rexml/child"</div><div class='del'>-module REXML</div><div class='del'>-	module DTD</div><div class='del'>-		class AttlistDecl &lt; Child</div><div class='del'>-			START = "&lt;!ATTLIST"</div><div class='del'>-			START_RE = /^\s*#{START}/um</div><div class='del'>-			PATTERN_RE = /\s*(#{START}.*?&gt;)/um</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/dtd/dtd.rb b/lib/rexml/dtd/dtd.rb<br/>deleted file mode 100644<br/>index 4f735d4812..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/dtd/dtd.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/dtd/dtd.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-require "rexml/dtd/elementdecl"</div><div class='del'>-require "rexml/dtd/entitydecl"</div><div class='del'>-require "rexml/comment"</div><div class='del'>-require "rexml/dtd/notationdecl"</div><div class='del'>-require "rexml/dtd/attlistdecl"</div><div class='del'>-require "rexml/parent"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	module DTD</div><div class='del'>-		class Parser</div><div class='del'>-			def Parser.parse( input )</div><div class='del'>-				case input</div><div class='del'>-				when String</div><div class='del'>-					parse_helper input</div><div class='del'>-				when File</div><div class='del'>-					parse_helper input.read</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			# Takes a String and parses it out</div><div class='del'>-			def Parser.parse_helper( input )</div><div class='del'>-				contents = Parent.new</div><div class='del'>-				while input.size &gt; 0</div><div class='del'>-					case input</div><div class='del'>-					when ElementDecl.PATTERN_RE</div><div class='del'>-						match = $&amp;</div><div class='del'>-						source = $'</div><div class='del'>-						contents &lt;&lt; ElementDecl.new( match )</div><div class='del'>-					when AttlistDecl.PATTERN_RE</div><div class='del'>-						matchdata = $~</div><div class='del'>-						source = $'</div><div class='del'>-						contents &lt;&lt; AttlistDecl.new( matchdata )</div><div class='del'>-					when EntityDecl.PATTERN_RE</div><div class='del'>-						matchdata = $~</div><div class='del'>-						source = $'</div><div class='del'>-						contents &lt;&lt; EntityDecl.new( matchdata )</div><div class='del'>-					when Comment.PATTERN_RE</div><div class='del'>-						matchdata = $~</div><div class='del'>-						source = $'</div><div class='del'>-						contents &lt;&lt; Comment.new( matchdata )</div><div class='del'>-					when NotationDecl.PATTERN_RE</div><div class='del'>-						matchdata = $~</div><div class='del'>-						source = $'</div><div class='del'>-						contents &lt;&lt; NotationDecl.new( matchdata )</div><div class='del'>-					end</div><div class='del'>-				end</div><div class='del'>-				contents</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/lib/rexml/dtd/elementdecl.rb b/lib/rexml/dtd/elementdecl.rb<br/>deleted file mode 100644<br/>index c4e620f389..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/dtd/elementdecl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/dtd/elementdecl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-require "rexml/child"</div><div class='del'>-module REXML</div><div class='del'>-	module DTD</div><div class='del'>-		class ElementDecl &lt; Child</div><div class='del'>-			START = "&lt;!ELEMENT"</div><div class='del'>-			START_RE = /^\s*#{START}/um</div><div class='del'>-			PATTERN_RE = /^\s*(#{START}.*?)&gt;/um</div><div class='del'>-			PATTERN_RE = /^\s*#{START}\s+((?:[:\w_][-\.\w_]*:)?[-!\*\.\w_]*)(.*?)&gt;/</div><div class='del'>-			#\s*((((["']).*?\5)|[^\/'"&gt;]*)*?)(\/)?&gt;/um, true)</div><div class='del'>-</div><div class='del'>-			def initialize match</div><div class='del'>-				@name = match[1]</div><div class='del'>-				@rest = match[2]</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/lib/rexml/dtd/entitydecl.rb b/lib/rexml/dtd/entitydecl.rb<br/>deleted file mode 100644<br/>index a5f1520f2b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/dtd/entitydecl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/dtd/entitydecl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-require "rexml/child"</div><div class='del'>-module REXML</div><div class='del'>-	module DTD</div><div class='del'>-		class EntityDecl &lt; Child</div><div class='del'>-			START = "&lt;!ENTITY"</div><div class='del'>-			START_RE = /^\s*#{START}/um</div><div class='del'>-			PUBLIC = /^\s*#{START}\s+(?:%\s+)?(\w+)\s+PUBLIC\s+((["']).*?\3)\s+((["']).*?\5)\s*&gt;/um</div><div class='del'>-			SYSTEM = /^\s*#{START}\s+(?:%\s+)?(\w+)\s+SYSTEM\s+((["']).*?\3)(?:\s+NDATA\s+\w+)?\s*&gt;/um</div><div class='del'>-			PLAIN = /^\s*#{START}\s+(\w+)\s+((["']).*?\3)\s*&gt;/um</div><div class='del'>-			PERCENT = /^\s*#{START}\s+%\s+(\w+)\s+((["']).*?\3)\s*&gt;/um</div><div class='del'>-			# &lt;!ENTITY name SYSTEM "..."&gt;</div><div class='del'>-			# &lt;!ENTITY name "..."&gt;</div><div class='del'>-			def initialize src</div><div class='del'>-				super()</div><div class='del'>-				md = nil</div><div class='del'>-				if src.match( PUBLIC )</div><div class='del'>-					md = src.match( PUBLIC, true )</div><div class='del'>-					@middle = "PUBLIC"</div><div class='del'>-					@content = "#{md[2]} #{md[4]}"</div><div class='del'>-				elsif src.match( SYSTEM )</div><div class='del'>-					md = src.match( SYSTEM, true )</div><div class='del'>-					@middle = "SYSTEM"</div><div class='del'>-					@content = md[2]</div><div class='del'>-				elsif src.match( PLAIN )</div><div class='del'>-					md = src.match( PLAIN, true )</div><div class='del'>-					@middle = ""</div><div class='del'>-					@content = md[2]</div><div class='del'>-				elsif src.match( PERCENT )</div><div class='del'>-					md = src.match( PERCENT, true )</div><div class='del'>-					@middle = ""</div><div class='del'>-					@content = md[2]</div><div class='del'>-				end</div><div class='del'>-				raise ParseException.new("failed Entity match", src) if md.nil?</div><div class='del'>-				@name = md[1]</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def to_s</div><div class='del'>-				rv = "&lt;!ENTITY #@name "</div><div class='del'>-				rv &lt;&lt; "#@middle " if @middle.size &gt; 0</div><div class='del'>-				rv &lt;&lt; @content</div><div class='del'>-				rv</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def write( output, indent )</div><div class='del'>-        indent( output, indent )</div><div class='del'>-				output &lt;&lt; to_s</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def EntityDecl.parse_source source, listener</div><div class='del'>-				md = source.match( PATTERN_RE, true )</div><div class='del'>-				thing = md[0].squeeze(" \t\n\r")</div><div class='del'>-				listener.send inspect.downcase, thing </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/lib/rexml/dtd/notationdecl.rb b/lib/rexml/dtd/notationdecl.rb<br/>deleted file mode 100644<br/>index a47ff8f24b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/dtd/notationdecl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/dtd/notationdecl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,39 +0,0 @@</div><div class='del'>-require "rexml/child"</div><div class='del'>-module REXML</div><div class='del'>-	module DTD</div><div class='del'>-		class NotationDecl &lt; Child</div><div class='del'>-			START = "&lt;!NOTATION"</div><div class='del'>-			START_RE = /^\s*#{START}/um</div><div class='del'>-			PUBLIC = /^\s*#{START}\s+(\w[\w-]*)\s+(PUBLIC)\s+((["']).*?\4)\s*&gt;/um</div><div class='del'>-			SYSTEM = /^\s*#{START}\s+(\w[\w-]*)\s+(SYSTEM)\s+((["']).*?\4)\s*&gt;/um</div><div class='del'>-			def initialize src</div><div class='del'>-				super()</div><div class='del'>-				if src.match( PUBLIC )</div><div class='del'>-					md = src.match( PUBLIC, true )</div><div class='del'>-				elsif src.match( SYSTEM )</div><div class='del'>-					md = src.match( SYSTEM, true )</div><div class='del'>-				else</div><div class='del'>-					raise ParseException.new( "error parsing notation: no matching pattern", src )</div><div class='del'>-				end</div><div class='del'>-				@name = md[1]</div><div class='del'>-				@middle = md[2]</div><div class='del'>-				@rest = md[3]</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def to_s</div><div class='del'>-				"&lt;!NOTATION #@name #@middle #@rest&gt;"</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def write( output, indent )</div><div class='del'>-        indent( output, indent )</div><div class='del'>-				output &lt;&lt; to_s</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def NotationDecl.parse_source source, listener</div><div class='del'>-				md = source.match( PATTERN_RE, true )</div><div class='del'>-				thing = md[0].squeeze(" \t\n\r")</div><div class='del'>-				listener.send inspect.downcase, thing </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/lib/rexml/element.rb b/lib/rexml/element.rb<br/>deleted file mode 100644<br/>index 3db87c6126..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/element.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/element.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,1227 +0,0 @@</div><div class='del'>-require "rexml/parent"</div><div class='del'>-require "rexml/namespace"</div><div class='del'>-require "rexml/attribute"</div><div class='del'>-require "rexml/cdata"</div><div class='del'>-require "rexml/xpath"</div><div class='del'>-require "rexml/parseexception"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  # An implementation note about namespaces:</div><div class='del'>-  # As we parse, when we find namespaces we put them in a hash and assign</div><div class='del'>-  # them a unique ID.  We then convert the namespace prefix for the node</div><div class='del'>-  # to the unique ID.  This makes namespace lookup much faster for the</div><div class='del'>-  # cost of extra memory use.  We save the namespace prefix for the</div><div class='del'>-  # context node and convert it back when we write it.</div><div class='del'>-  @@namespaces = {}</div><div class='del'>-</div><div class='del'>-  # Represents a tagged XML element.  Elements are characterized by</div><div class='del'>-  # having children, attributes, and names, and can themselves be</div><div class='del'>-  # children.</div><div class='del'>-  class Element &lt; Parent</div><div class='del'>-    include Namespace</div><div class='del'>-</div><div class='del'>-    UNDEFINED = "UNDEFINED";		# The default name</div><div class='del'>-</div><div class='del'>-    # Mechanisms for accessing attributes and child elements of this</div><div class='del'>-    # element.</div><div class='del'>-    attr_reader :attributes, :elements</div><div class='del'>-    # The context holds information about the processing environment, such as</div><div class='del'>-    # whitespace handling.</div><div class='del'>-    attr_accessor :context</div><div class='del'>-</div><div class='del'>-    # Constructor</div><div class='del'>-    # arg:: </div><div class='del'>-    # 	if not supplied, will be set to the default value.</div><div class='del'>-    # 	If a String, the name of this object will be set to the argument.</div><div class='del'>-    # 	If an Element, the object will be shallowly cloned; name, </div><div class='del'>-    # 	attributes, and namespaces will be copied.  Children will +not+ be</div><div class='del'>-    # 	copied.</div><div class='del'>-    # parent:: </div><div class='del'>-    # 	if supplied, must be a Parent, and will be used as</div><div class='del'>-    # 	the parent of this object.</div><div class='del'>-    # context::</div><div class='del'>-    # 	If supplied, must be a hash containing context items.  Context items</div><div class='del'>-    # 	include:</div><div class='del'>-    # * &lt;tt&gt;:respect_whitespace&lt;/tt&gt; the value of this is :+all+ or an array of</div><div class='del'>-    #   strings being the names of the elements to respect</div><div class='del'>-    #   whitespace for.  Defaults to :+all+.</div><div class='del'>-    # * &lt;tt&gt;:compress_whitespace&lt;/tt&gt; the value can be :+all+ or an array of</div><div class='del'>-    #   strings being the names of the elements to ignore whitespace on.</div><div class='del'>-    #   Overrides :+respect_whitespace+.</div><div class='del'>-    # * &lt;tt&gt;:ignore_whitespace_nodes&lt;/tt&gt; the value can be :+all+ or an array</div><div class='del'>-    #   of strings being the names of the elements in which to ignore</div><div class='del'>-    #   whitespace-only nodes.  If this is set, Text nodes which contain only</div><div class='del'>-    #   whitespace will not be added to the document tree.</div><div class='del'>-    # * &lt;tt&gt;:raw&lt;/tt&gt; can be :+all+, or an array of strings being the names of</div><div class='del'>-    #   the elements to process in raw mode.  In raw mode, special</div><div class='del'>-    #   characters in text is not converted to or from entities.</div><div class='del'>-    def initialize( arg = UNDEFINED, parent=nil, context=nil )</div><div class='del'>-      super(parent)</div><div class='del'>-</div><div class='del'>-      @elements = Elements.new(self)</div><div class='del'>-      @attributes = Attributes.new(self)</div><div class='del'>-      @context = context</div><div class='del'>-</div><div class='del'>-      if arg.kind_of? String</div><div class='del'>-        self.name = arg</div><div class='del'>-      elsif arg.kind_of? Element</div><div class='del'>-        self.name = arg.expanded_name</div><div class='del'>-        arg.attributes.each_attribute{ |attribute|</div><div class='del'>-          @attributes &lt;&lt; Attribute.new( attribute )</div><div class='del'>-        }</div><div class='del'>-        @context = arg.context</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      rv = "&lt;#@expanded_name"</div><div class='del'>-</div><div class='del'>-      @attributes.each_attribute do |attr|</div><div class='del'>-        rv &lt;&lt; " "</div><div class='del'>-        attr.write( rv, 0 )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      if children.size &gt; 0</div><div class='del'>-        rv &lt;&lt; "&gt; ... &lt;/&gt;"</div><div class='del'>-      else</div><div class='del'>-        rv &lt;&lt; "/&gt;"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Creates a shallow copy of self.</div><div class='del'>-    #   d = Document.new "&lt;a&gt;&lt;b/&gt;&lt;b/&gt;&lt;c&gt;&lt;d/&gt;&lt;/c&gt;&lt;/a&gt;"</div><div class='del'>-    #   new_a = d.root.clone</div><div class='del'>-    #   puts new_a  # =&gt; "&lt;a/&gt;"</div><div class='del'>-    def clone</div><div class='del'>-      self.class.new self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Evaluates to the root node of the document that this element </div><div class='del'>-    # belongs to. If this element doesn't belong to a document, but does</div><div class='del'>-    # belong to another Element, the parent's root will be returned, until the</div><div class='del'>-    # earliest ancestor is found.</div><div class='del'>-    #</div><div class='del'>-    # Note that this is not the same as the document element.</div><div class='del'>-    # In the following example, &lt;a&gt; is the document element, and the root</div><div class='del'>-    # node is the parent node of the document element.  You may ask yourself</div><div class='del'>-    # why the root node is useful: consider the doctype and XML declaration,</div><div class='del'>-    # and any processing instructions before the document element... they</div><div class='del'>-    # are children of the root node, or siblings of the document element.</div><div class='del'>-    # The only time this isn't true is when an Element is created that is</div><div class='del'>-    # not part of any Document.  In this case, the ancestor that has no</div><div class='del'>-    # parent acts as the root node.</div><div class='del'>-    #  d = Document.new '&lt;a&gt;&lt;b&gt;&lt;c/&gt;&lt;/b&gt;&lt;/a&gt;'</div><div class='del'>-    #  a = d[1] ; c = a[1][1]</div><div class='del'>-    #  d.root_node == d   # TRUE</div><div class='del'>-    #  a.root_node        # namely, d</div><div class='del'>-    #  c.root_node        # again, d</div><div class='del'>-    def root_node</div><div class='del'>-      parent.nil? ? self : parent.root_node</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def root</div><div class='del'>-      return elements[1] if self.kind_of? Document</div><div class='del'>-      return self if parent.kind_of? Document or parent.nil?</div><div class='del'>-      return parent.root</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Evaluates to the document to which this element belongs, or nil if this</div><div class='del'>-    # element doesn't belong to a document.</div><div class='del'>-    def document</div><div class='del'>-      rt = root</div><div class='del'>-      rt.parent if rt</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Evaluates to +true+ if whitespace is respected for this element.  This</div><div class='del'>-    # is the case if:</div><div class='del'>-    # 1. Neither :+respect_whitespace+ nor :+compress_whitespace+ has any value</div><div class='del'>-    # 2. The context has :+respect_whitespace+ set to :+all+ or</div><div class='del'>-    #    an array containing the name of this element, and </div><div class='del'>-    #    :+compress_whitespace+ isn't set to :+all+ or an array containing the </div><div class='del'>-    #    name of this element.</div><div class='del'>-    # The evaluation is tested against +expanded_name+, and so is namespace</div><div class='del'>-    # sensitive.</div><div class='del'>-    def whitespace</div><div class='del'>-      @whitespace = nil</div><div class='del'>-      if @context</div><div class='del'>-        if @context[:respect_whitespace]</div><div class='del'>-          @whitespace = (@context[:respect_whitespace] == :all or</div><div class='del'>-                         @context[:respect_whitespace].include? expanded_name)</div><div class='del'>-        end</div><div class='del'>-        @whitespace = false if (@context[:compress_whitespace] and</div><div class='del'>-                                (@context[:compress_whitespace] == :all or</div><div class='del'>-                                 @context[:compress_whitespace].include? expanded_name)</div><div class='del'>-                               )</div><div class='del'>-      end</div><div class='del'>-      @whitespace = true unless @whitespace == false</div><div class='del'>-      @whitespace</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def ignore_whitespace_nodes</div><div class='del'>-      @ignore_whitespace_nodes = false</div><div class='del'>-      if @context</div><div class='del'>-        if @context[:ignore_whitespace_nodes]</div><div class='del'>-          @ignore_whitespace_nodes = </div><div class='del'>-            (@context[:ignore_whitespace_nodes] == :all or</div><div class='del'>-             @context[:ignore_whitespace_nodes].include? expanded_name)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Evaluates to +true+ if raw mode is set for this element.  This</div><div class='del'>-    # is the case if the context has :+raw+ set to :+all+ or</div><div class='del'>-    # an array containing the name of this element.</div><div class='del'>-    #</div><div class='del'>-    # The evaluation is tested against +expanded_name+, and so is namespace</div><div class='del'>-    # sensitive.</div><div class='del'>-    def raw</div><div class='del'>-      @raw = (@context and @context[:raw] and</div><div class='del'>-              (@context[:raw] == :all or</div><div class='del'>-               @context[:raw].include? expanded_name))</div><div class='del'>-               @raw</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #once :whitespace, :raw, :ignore_whitespace_nodes</div><div class='del'>-</div><div class='del'>-    #################################################</div><div class='del'>-    # Namespaces                                    #</div><div class='del'>-    #################################################</div><div class='del'>-</div><div class='del'>-    # Evaluates to an +Array+ containing the prefixes (names) of all defined</div><div class='del'>-    # namespaces at this context node.</div><div class='del'>-    #  doc = Document.new("&lt;a xmlns:x='1' xmlns:y='2'&gt;&lt;b/&gt;&lt;c xmlns:z='3'/&gt;&lt;/a&gt;")</div><div class='del'>-    #  doc.elements['//b'].prefixes # -&gt; ['x', 'y']</div><div class='del'>-    def prefixes</div><div class='del'>-      prefixes = []</div><div class='del'>-      prefixes = parent.prefixes if parent</div><div class='del'>-      prefixes |= attributes.prefixes</div><div class='del'>-      return prefixes</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def namespaces</div><div class='del'>-      namespaces = {}</div><div class='del'>-      namespaces = parent.namespaces if parent</div><div class='del'>-      namespaces = namespaces.merge( attributes.namespaces )</div><div class='del'>-      return namespaces</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Evalutas to the URI for a prefix, or the empty string if no such </div><div class='del'>-    # namespace is declared for this element. Evaluates recursively for</div><div class='del'>-    # ancestors.  Returns the default namespace, if there is one.</div><div class='del'>-    # prefix:: </div><div class='del'>-    #   the prefix to search for.  If not supplied, returns the default</div><div class='del'>-    #   namespace if one exists</div><div class='del'>-    # Returns:: </div><div class='del'>-    #   the namespace URI as a String, or nil if no such namespace</div><div class='del'>-    #   exists.  If the namespace is undefined, returns an empty string</div><div class='del'>-    #  doc = Document.new("&lt;a xmlns='1' xmlns:y='2'&gt;&lt;b/&gt;&lt;c xmlns:z='3'/&gt;&lt;/a&gt;")</div><div class='del'>-    #  b = doc.elements['//b']</div><div class='del'>-    #  b.namespace           # -&gt; '1'</div><div class='del'>-    #  b.namespace("y")      # -&gt; '2'</div><div class='del'>-    def namespace(prefix=nil)</div><div class='del'>-      if prefix.nil?</div><div class='del'>-        prefix = prefix()</div><div class='del'>-      end</div><div class='del'>-      if prefix == ''</div><div class='del'>-        prefix = "xmlns"</div><div class='del'>-      else</div><div class='del'>-        prefix = "xmlns:#{prefix}" unless prefix[0,5] == 'xmlns'</div><div class='del'>-      end</div><div class='del'>-      ns = attributes[ prefix ]</div><div class='del'>-      ns = parent.namespace(prefix) if ns.nil? and parent</div><div class='del'>-      ns = '' if ns.nil? and prefix == 'xmlns'</div><div class='del'>-      return ns</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adds a namespace to this element.</div><div class='del'>-    # prefix:: </div><div class='del'>-    #   the prefix string, or the namespace URI if +uri+ is not</div><div class='del'>-    #   supplied</div><div class='del'>-    # uri::    </div><div class='del'>-    #   the namespace URI.  May be nil, in which +prefix+ is used as</div><div class='del'>-    #   the URI</div><div class='del'>-    # Evaluates to: this Element</div><div class='del'>-    #  a = Element.new("a")</div><div class='del'>-    #  a.add_namespace("xmlns:foo", "bar" )</div><div class='del'>-    #  a.add_namespace("foo", "bar")  # shorthand for previous line</div><div class='del'>-    #  a.add_namespace("twiddle")</div><div class='del'>-    #  puts a   #-&gt; &lt;a xmlns:foo='bar' xmlns='twiddle'/&gt;</div><div class='del'>-    def add_namespace( prefix, uri=nil )</div><div class='del'>-      unless uri</div><div class='del'>-        @attributes["xmlns"] = prefix</div><div class='del'>-      else</div><div class='del'>-        prefix = "xmlns:#{prefix}" unless prefix =~ /^xmlns:/</div><div class='del'>-        @attributes[ prefix ] = uri</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Removes a namespace from this node.  This only works if the namespace is</div><div class='del'>-    # actually declared in this node.  If no argument is passed, deletes the</div><div class='del'>-    # default namespace.</div><div class='del'>-    #</div><div class='del'>-    # Evaluates to: this element</div><div class='del'>-    #  doc = Document.new "&lt;a xmlns:foo='bar' xmlns='twiddle'/&gt;"</div><div class='del'>-    #  doc.root.delete_namespace</div><div class='del'>-    #  puts doc     # -&gt; &lt;a xmlns:foo='bar'/&gt;</div><div class='del'>-    #  doc.root.delete_namespace 'foo'</div><div class='del'>-    #  puts doc     # -&gt; &lt;a/&gt;</div><div class='del'>-    def delete_namespace namespace="xmlns"</div><div class='del'>-      namespace = "xmlns:#{namespace}" unless namespace == 'xmlns'</div><div class='del'>-      attribute = attributes.get_attribute(namespace)</div><div class='del'>-      attribute.remove unless attribute.nil?</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################################################</div><div class='del'>-    # Elements                                      #</div><div class='del'>-    #################################################</div><div class='del'>-</div><div class='del'>-    # Adds a child to this element, optionally setting attributes in</div><div class='del'>-    # the element.</div><div class='del'>-    # element:: </div><div class='del'>-    #   optional.  If Element, the element is added.</div><div class='del'>-    #   Otherwise, a new Element is constructed with the argument (see</div><div class='del'>-    #   Element.initialize).</div><div class='del'>-    # attrs:: </div><div class='del'>-    #   If supplied, must be a Hash containing String name,value </div><div class='del'>-    #   pairs, which will be used to set the attributes of the new Element.</div><div class='del'>-    # Returns:: the Element that was added</div><div class='del'>-    #  el = doc.add_element 'my-tag'</div><div class='del'>-    #  el = doc.add_element 'my-tag', {'attr1'=&gt;'val1', 'attr2'=&gt;'val2'}</div><div class='del'>-    #  el = Element.new 'my-tag'</div><div class='del'>-    #  doc.add_element el</div><div class='del'>-    def add_element element, attrs=nil</div><div class='del'>-      raise "First argument must be either an element name, or an Element object" if element.nil?</div><div class='del'>-      el = @elements.add(element)</div><div class='del'>-      attrs.each do |key, value|</div><div class='del'>-        el.attributes[key]=Attribute.new(key,value,self)</div><div class='del'>-      end	if attrs.kind_of? Hash</div><div class='del'>-      el</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Deletes a child element.</div><div class='del'>-    # element:: </div><div class='del'>-    #   Must be an +Element+, +String+, or +Integer+.  If Element, </div><div class='del'>-    #   the element is removed.  If String, the element is found (via XPath) </div><div class='del'>-    #   and removed.  &lt;em&gt;This means that any parent can remove any</div><div class='del'>-    #   descendant.&lt;em&gt;  If Integer, the Element indexed by that number will be</div><div class='del'>-    #   removed.</div><div class='del'>-    # Returns:: the element that was removed.</div><div class='del'>-    #  doc.delete_element "/a/b/c[@id='4']"</div><div class='del'>-    #  doc.delete_element doc.elements["//k"]</div><div class='del'>-    #  doc.delete_element 1</div><div class='del'>-    def delete_element element</div><div class='del'>-      @elements.delete element</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Evaluates to +true+ if this element has at least one child Element</div><div class='del'>-    #  doc = Document.new "&lt;a&gt;&lt;b/&gt;&lt;c&gt;Text&lt;/c&gt;&lt;/a&gt;"</div><div class='del'>-    #  doc.root.has_elements               # -&gt; true</div><div class='del'>-    #  doc.elements["/a/b"].has_elements   # -&gt; false</div><div class='del'>-    #  doc.elements["/a/c"].has_elements   # -&gt; false</div><div class='del'>-    def has_elements?</div><div class='del'>-      !@elements.empty?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Iterates through the child elements, yielding for each Element that</div><div class='del'>-    # has a particular attribute set.</div><div class='del'>-    # key:: </div><div class='del'>-    #   the name of the attribute to search for</div><div class='del'>-    # value:: </div><div class='del'>-    #   the value of the attribute</div><div class='del'>-    # max:: </div><div class='del'>-    #   (optional) causes this method to return after yielding </div><div class='del'>-    #   for this number of matching children</div><div class='del'>-    # name:: </div><div class='del'>-    #   (optional) if supplied, this is an XPath that filters</div><div class='del'>-    #   the children to check.</div><div class='del'>-    #</div><div class='del'>-    #  doc = Document.new "&lt;a&gt;&lt;b @id='1'/&gt;&lt;c @id='2'/&gt;&lt;d @id='1'/&gt;&lt;e/&gt;&lt;/a&gt;"</div><div class='del'>-    #  # Yields b, c, d</div><div class='del'>-    #  doc.root.each_element_with_attribute( 'id' ) {|e| p e}</div><div class='del'>-    #  # Yields b, d</div><div class='del'>-    #  doc.root.each_element_with_attribute( 'id', '1' ) {|e| p e}</div><div class='del'>-    #  # Yields b</div><div class='del'>-    #  doc.root.each_element_with_attribute( 'id', '1', 1 ) {|e| p e}</div><div class='del'>-    #  # Yields d</div><div class='del'>-    #  doc.root.each_element_with_attribute( 'id', '1', 0, 'd' ) {|e| p e}</div><div class='del'>-    def each_element_with_attribute( key, value=nil, max=0, name=nil, &amp;block ) # :yields: Element</div><div class='del'>-      each_with_something( proc {|child| </div><div class='del'>-        if value.nil?</div><div class='del'>-          child.attributes[key] != nil</div><div class='del'>-        else</div><div class='del'>-          child.attributes[key]==value</div><div class='del'>-        end</div><div class='del'>-      }, max, name, &amp;block )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Iterates through the children, yielding for each Element that</div><div class='del'>-    # has a particular text set.</div><div class='del'>-    # text:: </div><div class='del'>-    #   the text to search for.  If nil, or not supplied, will iterate</div><div class='del'>-    #   over all +Element+ children that contain at least one +Text+ node.</div><div class='del'>-    # max:: </div><div class='del'>-    #   (optional) causes this method to return after yielding</div><div class='del'>-    #   for this number of matching children</div><div class='del'>-    # name:: </div><div class='del'>-    #   (optional) if supplied, this is an XPath that filters</div><div class='del'>-    #   the children to check.</div><div class='del'>-    #</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;&lt;b&gt;b&lt;/b&gt;&lt;c&gt;b&lt;/c&gt;&lt;d&gt;d&lt;/d&gt;&lt;e/&gt;&lt;/a&gt;'</div><div class='del'>-    #  # Yields b, c, d</div><div class='del'>-    #  doc.each_element_with_text {|e|p e}</div><div class='del'>-    #  # Yields b, c</div><div class='del'>-    #  doc.each_element_with_text('b'){|e|p e}</div><div class='del'>-    #  # Yields b</div><div class='del'>-    #  doc.each_element_with_text('b', 1){|e|p e}</div><div class='del'>-    #  # Yields d</div><div class='del'>-    #  doc.each_element_with_text(nil, 0, 'd'){|e|p e}</div><div class='del'>-    def each_element_with_text( text=nil, max=0, name=nil, &amp;block ) # :yields: Element</div><div class='del'>-      each_with_something( proc {|child| </div><div class='del'>-        if text.nil?</div><div class='del'>-          child.has_text?</div><div class='del'>-        else</div><div class='del'>-          child.text == text</div><div class='del'>-        end</div><div class='del'>-      }, max, name, &amp;block )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Synonym for Element.elements.each</div><div class='del'>-    def each_element( xpath=nil, &amp;block ) # :yields: Element</div><div class='del'>-      @elements.each( xpath, &amp;block )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Synonym for Element.to_a</div><div class='del'>-    # This is a little slower than calling elements.each directly.</div><div class='del'>-    # xpath:: any XPath by which to search for elements in the tree</div><div class='del'>-    # Returns:: an array of Elements that match the supplied path</div><div class='del'>-    def get_elements( xpath )</div><div class='del'>-      @elements.to_a( xpath )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the next sibling that is an element, or nil if there is</div><div class='del'>-    # no Element sibling after this one</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;&lt;b/&gt;text&lt;c/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.elements['b'].next_element          #-&gt; &lt;c/&gt;</div><div class='del'>-    #  doc.root.elements['c'].next_element          #-&gt; nil</div><div class='del'>-    def next_element</div><div class='del'>-      element = next_sibling</div><div class='del'>-      element = element.next_sibling until element.nil? or element.kind_of? Element </div><div class='del'>-      return element</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the previous sibling that is an element, or nil if there is</div><div class='del'>-    # no Element sibling prior to this one</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;&lt;b/&gt;text&lt;c/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.elements['c'].previous_element          #-&gt; &lt;b/&gt;</div><div class='del'>-    #  doc.root.elements['b'].previous_element          #-&gt; nil</div><div class='del'>-    def previous_element</div><div class='del'>-      element = previous_sibling</div><div class='del'>-      element = element.previous_sibling until element.nil? or element.kind_of? Element</div><div class='del'>-      return element</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    #################################################</div><div class='del'>-    # Text                                          #</div><div class='del'>-    #################################################</div><div class='del'>-</div><div class='del'>-    # Evaluates to +true+ if this element has at least one Text child</div><div class='del'>-    def has_text?</div><div class='del'>-      not text().nil?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # A convenience method which returns the String value of the _first_</div><div class='del'>-    # child text element, if one exists, and +nil+ otherwise.</div><div class='del'>-    #</div><div class='del'>-    # &lt;em&gt;Note that an element may have multiple Text elements, perhaps</div><div class='del'>-    # separated by other children&lt;/em&gt;.  Be aware that this method only returns</div><div class='del'>-    # the first Text node.</div><div class='del'>-    #</div><div class='del'>-    # This method returns the +value+ of the first text child node, which</div><div class='del'>-    # ignores the +raw+ setting, so always returns normalized text. See</div><div class='del'>-    # the Text::value documentation.</div><div class='del'>-    #</div><div class='del'>-    #  doc = Document.new "&lt;p&gt;some text &lt;b&gt;this is bold!&lt;/b&gt; more text&lt;/p&gt;"</div><div class='del'>-    #  # The element 'p' has two text elements, "some text " and " more text".</div><div class='del'>-    #  doc.root.text              #-&gt; "some text "</div><div class='del'>-    def text( path = nil )</div><div class='del'>-      rv = get_text(path)</div><div class='del'>-      return rv.value unless rv.nil?</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the first child Text node, if any, or +nil+ otherwise.</div><div class='del'>-    # This method returns the actual +Text+ node, rather than the String content.</div><div class='del'>-    #  doc = Document.new "&lt;p&gt;some text &lt;b&gt;this is bold!&lt;/b&gt; more text&lt;/p&gt;"</div><div class='del'>-    #  # The element 'p' has two text elements, "some text " and " more text".</div><div class='del'>-    #  doc.root.get_text.value            #-&gt; "some text "</div><div class='del'>-    def get_text path = nil</div><div class='del'>-      rv = nil</div><div class='del'>-      if path</div><div class='del'>-        element = @elements[ path ]</div><div class='del'>-        rv = element.get_text unless element.nil?</div><div class='del'>-      else</div><div class='del'>-        rv = @children.find { |node| node.kind_of? Text }</div><div class='del'>-      end</div><div class='del'>-      return rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sets the first Text child of this object.  See text() for a</div><div class='del'>-    # discussion about Text children.</div><div class='del'>-    #</div><div class='del'>-    # If a Text child already exists, the child is replaced by this</div><div class='del'>-    # content.  This means that Text content can be deleted by calling</div><div class='del'>-    # this method with a nil argument.  In this case, the next Text</div><div class='del'>-    # child becomes the first Text child.  In no case is the order of</div><div class='del'>-    # any siblings disturbed.</div><div class='del'>-    # text:: </div><div class='del'>-    #   If a String, a new Text child is created and added to</div><div class='del'>-    #   this Element as the first Text child.  If Text, the text is set</div><div class='del'>-    #   as the first Child element.  If nil, then any existing first Text</div><div class='del'>-    #   child is removed.</div><div class='del'>-    # Returns:: this Element.</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;&lt;b/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.text = 'Sean'      #-&gt; '&lt;a&gt;&lt;b/&gt;Sean&lt;/a&gt;'</div><div class='del'>-    #  doc.root.text = 'Elliott'   #-&gt; '&lt;a&gt;&lt;b/&gt;Elliott&lt;/a&gt;'</div><div class='del'>-    #  doc.root.add_element 'c'    #-&gt; '&lt;a&gt;&lt;b/&gt;Elliott&lt;c/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.text = 'Russell'   #-&gt; '&lt;a&gt;&lt;b/&gt;Russell&lt;c/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.text = nil         #-&gt; '&lt;a&gt;&lt;b/&gt;&lt;c/&gt;&lt;/a&gt;'</div><div class='del'>-    def text=( text )</div><div class='del'>-      if text.kind_of? String</div><div class='del'>-        text = Text.new( text, whitespace(), nil, raw() )</div><div class='del'>-      elsif text and !text.kind_of? Text</div><div class='del'>-        text = Text.new( text.to_s, whitespace(), nil, raw() )</div><div class='del'>-      end</div><div class='del'>-      old_text = get_text</div><div class='del'>-      if text.nil?</div><div class='del'>-        old_text.remove unless old_text.nil?</div><div class='del'>-      else</div><div class='del'>-        if old_text.nil?</div><div class='del'>-          self &lt;&lt; text</div><div class='del'>-        else</div><div class='del'>-          old_text.replace_with( text )</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      return self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # A helper method to add a Text child.  Actual Text instances can</div><div class='del'>-    # be added with regular Parent methods, such as add() and &lt;&lt;()</div><div class='del'>-    # text::</div><div class='del'>-    #   if a String, a new Text instance is created and added</div><div class='del'>-    #   to the parent.  If Text, the object is added directly.</div><div class='del'>-    # Returns:: this Element</div><div class='del'>-    #  e = Element.new('a')          #-&gt; &lt;e/&gt;</div><div class='del'>-    #  e.add_text 'foo'              #-&gt; &lt;e&gt;foo&lt;/e&gt;</div><div class='del'>-    #  e.add_text Text.new(' bar')    #-&gt; &lt;e&gt;foo bar&lt;/e&gt;</div><div class='del'>-    # Note that at the end of this example, the branch has &lt;b&gt;3&lt;/b&gt; nodes; the 'e'</div><div class='del'>-    # element and &lt;b&gt;2&lt;/b&gt; Text node children.</div><div class='del'>-    def add_text( text )</div><div class='del'>-      if text.kind_of? String </div><div class='del'>-        if @children[-1].kind_of? Text</div><div class='del'>-          @children[-1] &lt;&lt; text</div><div class='del'>-          return</div><div class='del'>-        end</div><div class='del'>-        text = Text.new( text, whitespace(), nil, raw() )</div><div class='del'>-      end</div><div class='del'>-      self &lt;&lt; text unless text.nil?</div><div class='del'>-      return self</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def node_type</div><div class='del'>-      :element</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def xpath</div><div class='del'>-      path_elements = []</div><div class='del'>-      cur = self</div><div class='del'>-      path_elements &lt;&lt; __to_xpath_helper( self )</div><div class='del'>-      while cur.parent</div><div class='del'>-        cur = cur.parent</div><div class='del'>-        path_elements &lt;&lt; __to_xpath_helper( cur )</div><div class='del'>-      end</div><div class='del'>-      return path_elements.reverse.join( "/" )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################################################</div><div class='del'>-    # Attributes                                    #</div><div class='del'>-    #################################################</div><div class='del'>-</div><div class='del'>-    def attribute( name, namespace=nil )</div><div class='del'>-      prefix = nil</div><div class='del'>-      prefix = namespaces.index(namespace) if namespace</div><div class='del'>-      prefix = nil if prefix == 'xmlns'</div><div class='del'>-      attributes.get_attribute( "#{prefix ? prefix + ':' : ''}#{name}" )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Evaluates to +true+ if this element has any attributes set, false</div><div class='del'>-    # otherwise.</div><div class='del'>-    def has_attributes?</div><div class='del'>-      return !@attributes.empty?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adds an attribute to this element, overwriting any existing attribute</div><div class='del'>-    # by the same name.</div><div class='del'>-    # key::</div><div class='del'>-    #   can be either an Attribute or a String.  If an Attribute,</div><div class='del'>-    #   the attribute is added to the list of Element attributes.  If String,</div><div class='del'>-    #   the argument is used as the name of the new attribute, and the value</div><div class='del'>-    #   parameter must be supplied.</div><div class='del'>-    # value:: </div><div class='del'>-    #   Required if +key+ is a String, and ignored if the first argument is</div><div class='del'>-    #   an Attribute.  This is a String, and is used as the value</div><div class='del'>-    #   of the new Attribute.  This should be the unnormalized value of the</div><div class='del'>-    #   attribute (without entities).</div><div class='del'>-    # Returns:: the Attribute added</div><div class='del'>-    #  e = Element.new 'e'</div><div class='del'>-    #  e.add_attribute( 'a', 'b' )               #-&gt; &lt;e a='b'/&gt;</div><div class='del'>-    #  e.add_attribute( 'x:a', 'c' )             #-&gt; &lt;e a='b' x:a='c'/&gt;</div><div class='del'>-    #  e.add_attribute Attribute.new('b', 'd')   #-&gt; &lt;e a='b' x:a='c' b='d'/&gt;</div><div class='del'>-    def add_attribute( key, value=nil )</div><div class='del'>-      if key.kind_of? Attribute</div><div class='del'>-        @attributes &lt;&lt; key</div><div class='del'>-      else</div><div class='del'>-        @attributes[key] = value</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Add multiple attributes to this element.</div><div class='del'>-    # hash:: is either a hash, or array of arrays</div><div class='del'>-    #  el.add_attributes( {"name1"=&gt;"value1", "name2"=&gt;"value2"} )</div><div class='del'>-    #  el.add_attributes( [ ["name1","value1"], ["name2"=&gt;"value2"] ] )</div><div class='del'>-    def add_attributes hash</div><div class='del'>-      if hash.kind_of? Hash</div><div class='del'>-        hash.each_pair {|key, value| @attributes[key] = value }</div><div class='del'>-      elsif hash.kind_of? Array</div><div class='del'>-        hash.each { |value| @attributes[ value[0] ] = value[1] }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Removes an attribute</div><div class='del'>-    # key::</div><div class='del'>-    #   either an Attribute or a String.  In either case, the</div><div class='del'>-    #   attribute is found by matching the attribute name to the argument,</div><div class='del'>-    #   and then removed.  If no attribute is found, no action is taken.</div><div class='del'>-    # Returns:: </div><div class='del'>-    #   the attribute removed, or nil if this Element did not contain</div><div class='del'>-    #   a matching attribute</div><div class='del'>-    #  e = Element.new('E')</div><div class='del'>-    #  e.add_attribute( 'name', 'Sean' )             #-&gt; &lt;E name='Sean'/&gt;</div><div class='del'>-    #  r = e.add_attribute( 'sur:name', 'Russell' )  #-&gt; &lt;E name='Sean' sur:name='Russell'/&gt;</div><div class='del'>-    #  e.delete_attribute( 'name' )                  #-&gt; &lt;E sur:name='Russell'/&gt;</div><div class='del'>-    #  e.delete_attribute( r )                       #-&gt; &lt;E/&gt;</div><div class='del'>-    def delete_attribute(key)</div><div class='del'>-      attr = @attributes.get_attribute(key)</div><div class='del'>-      attr.remove unless attr.nil?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    #################################################</div><div class='del'>-    # Other Utilities                               #</div><div class='del'>-    #################################################</div><div class='del'>-</div><div class='del'>-    # Get an array of all CData children.  </div><div class='del'>-    # IMMUTABLE</div><div class='del'>-    def cdatas</div><div class='del'>-      find_all { |child| child.kind_of? CData }.freeze</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get an array of all Comment children.</div><div class='del'>-    # IMMUTABLE</div><div class='del'>-    def comments</div><div class='del'>-      find_all { |child| child.kind_of? Comment }.freeze</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get an array of all Instruction children.</div><div class='del'>-    # IMMUTABLE</div><div class='del'>-    def instructions</div><div class='del'>-      find_all { |child| child.kind_of? Instruction }.freeze</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Get an array of all Text children.</div><div class='del'>-    # IMMUTABLE</div><div class='del'>-    def texts</div><div class='del'>-      find_all { |child| child.kind_of? Text }.freeze</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # == DEPRECATED</div><div class='del'>-    # See REXML::Formatters</div><div class='del'>-    #</div><div class='del'>-    # Writes out this element, and recursively, all children.</div><div class='del'>-    # output::</div><div class='del'>-    #	  output an object which supports '&lt;&lt; string'; this is where the</div><div class='del'>-    #   document will be written.</div><div class='del'>-    # indent::</div><div class='del'>-    #   An integer.  If -1, no indenting will be used; otherwise, the</div><div class='del'>-    #   indentation will be this number of spaces, and children will be</div><div class='del'>-    #   indented an additional amount.  Defaults to -1</div><div class='del'>-    # transitive::</div><div class='del'>-    #   If transitive is true and indent is &gt;= 0, then the output will be</div><div class='del'>-    #   pretty-printed in such a way that the added whitespace does not affect</div><div class='del'>-    #   the parse tree of the document</div><div class='del'>-    # ie_hack::</div><div class='del'>-    #   Internet Explorer is the worst piece of crap to have ever been</div><div class='del'>-    #   written, with the possible exception of Windows itself.  Since IE is</div><div class='del'>-    #   unable to parse proper XML, we have to provide a hack to generate XML</div><div class='del'>-    #   that IE's limited abilities can handle.  This hack inserts a space </div><div class='del'>-    #   before the /&gt; on empty tags.  Defaults to false</div><div class='del'>-    #</div><div class='del'>-    #  out = ''</div><div class='del'>-    #  doc.write( out )     #-&gt; doc is written to the string 'out'</div><div class='del'>-    #  doc.write( $stdout ) #-&gt; doc written to the console</div><div class='del'>-    def write(writer=$stdout, indent=-1, transitive=false, ie_hack=false)</div><div class='del'>-      Kernel.warn("#{self.class.name}.write is deprecated.  See REXML::Formatters")</div><div class='del'>-      formatter = if indent &gt; -1</div><div class='del'>-          if transitive</div><div class='del'>-            REXML::Formatters::Transitive.new( indent, ie_hack )</div><div class='del'>-          else</div><div class='del'>-            REXML::Formatters::Pretty.new( indent, ie_hack )</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          REXML::Formatters::Default.new( ie_hack )</div><div class='del'>-        end</div><div class='del'>-      formatter.write( self, output )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    def __to_xpath_helper node</div><div class='del'>-      rv = node.expanded_name.clone</div><div class='del'>-      if node.parent</div><div class='del'>-        results = node.parent.find_all {|n| </div><div class='del'>-          n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name </div><div class='del'>-        }</div><div class='del'>-        if results.length &gt; 1</div><div class='del'>-          idx = results.index( node )</div><div class='del'>-          rv &lt;&lt; "[#{idx+1}]"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # A private helper method</div><div class='del'>-    def each_with_something( test, max=0, name=nil )</div><div class='del'>-      num = 0</div><div class='del'>-      child=nil</div><div class='del'>-      @elements.each( name ){ |child|</div><div class='del'>-        yield child if test.call(child) and num += 1</div><div class='del'>-        return if max&gt;0 and num == max</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'>-  # ELEMENTS                                                             #</div><div class='del'>-  ########################################################################</div><div class='del'>-</div><div class='del'>-  # A class which provides filtering of children for Elements, and</div><div class='del'>-  # XPath search support.  You are expected to only encounter this class as</div><div class='del'>-  # the &lt;tt&gt;element.elements&lt;/tt&gt; object.  Therefore, you are </div><div class='del'>-  # _not_ expected to instantiate this yourself.</div><div class='del'>-  class Elements</div><div class='del'>-    include Enumerable</div><div class='del'>-    # Constructor</div><div class='del'>-    # parent:: the parent Element</div><div class='del'>-    def initialize parent</div><div class='del'>-      @element = parent</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Fetches a child element.  Filters only Element children, regardless of</div><div class='del'>-    # the XPath match.</div><div class='del'>-    # index:: </div><div class='del'>-    #   the search parameter.  This is either an Integer, which</div><div class='del'>-    #   will be used to find the index'th child Element, or an XPath,</div><div class='del'>-    #   which will be used to search for the Element.  &lt;em&gt;Because</div><div class='del'>-    #   of the nature of XPath searches, any element in the connected XML</div><div class='del'>-    #   document can be fetched through any other element.&lt;/em&gt;  &lt;b&gt;The</div><div class='del'>-    #   Integer index is 1-based, not 0-based.&lt;/b&gt;  This means that the first</div><div class='del'>-    #   child element is at index 1, not 0, and the +n+th element is at index</div><div class='del'>-    #   +n+, not &lt;tt&gt;n-1&lt;/tt&gt;.  This is because XPath indexes element children</div><div class='del'>-    #   starting from 1, not 0, and the indexes should be the same.</div><div class='del'>-    # name:: </div><div class='del'>-    #   optional, and only used in the first argument is an</div><div class='del'>-    #   Integer.  In that case, the index'th child Element that has the</div><div class='del'>-    #   supplied name will be returned.  Note again that the indexes start at 1.</div><div class='del'>-    # Returns:: the first matching Element, or nil if no child matched</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;&lt;b/&gt;&lt;c id="1"/&gt;&lt;c id="2"/&gt;&lt;d/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.elements[1]       #-&gt; &lt;b/&gt;</div><div class='del'>-    #  doc.root.elements['c']     #-&gt; &lt;c id="1"/&gt;</div><div class='del'>-    #  doc.root.elements[2,'c']   #-&gt; &lt;c id="2"/&gt;</div><div class='del'>-    def []( index, name=nil)</div><div class='del'>-      if index.kind_of? Integer</div><div class='del'>-        raise "index (#{index}) must be &gt;= 1" if index &lt; 1</div><div class='del'>-        name = literalize(name) if name</div><div class='del'>-        num = 0</div><div class='del'>-        child = nil</div><div class='del'>-        @element.find { |child|</div><div class='del'>-          child.kind_of? Element and</div><div class='del'>-          (name.nil? ? true : child.has_name?( name )) and </div><div class='del'>-          (num += 1) == index</div><div class='del'>-        }</div><div class='del'>-      else</div><div class='del'>-        return XPath::first( @element, index )</div><div class='del'>-        #{ |element| </div><div class='del'>-        #	return element if element.kind_of? Element</div><div class='del'>-        #}</div><div class='del'>-        #return nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sets an element, replacing any previous matching element.  If no</div><div class='del'>-    # existing element is found ,the element is added.</div><div class='del'>-    # index:: Used to find a matching element to replace.  See []().</div><div class='del'>-    # element:: </div><div class='del'>-    #   The element to replace the existing element with</div><div class='del'>-    #   the previous element</div><div class='del'>-    # Returns:: nil if no previous element was found.</div><div class='del'>-    #</div><div class='del'>-    #  doc = Document.new '&lt;a/&gt;'</div><div class='del'>-    #  doc.root.elements[10] = Element.new('b')    #-&gt; &lt;a&gt;&lt;b/&gt;&lt;/a&gt;</div><div class='del'>-    #  doc.root.elements[1]                        #-&gt; &lt;b/&gt;</div><div class='del'>-    #  doc.root.elements[1] = Element.new('c')     #-&gt; &lt;a&gt;&lt;c/&gt;&lt;/a&gt;</div><div class='del'>-    #  doc.root.elements['c'] = Element.new('d')   #-&gt; &lt;a&gt;&lt;d/&gt;&lt;/a&gt;</div><div class='del'>-    def []=( index, element )</div><div class='del'>-      previous = self[index]</div><div class='del'>-      if previous.nil?</div><div class='del'>-        @element.add element</div><div class='del'>-      else</div><div class='del'>-        previous.replace_with element</div><div class='del'>-      end</div><div class='del'>-      return previous</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns +true+ if there are no +Element+ children, +false+ otherwise</div><div class='del'>-    def empty?</div><div class='del'>-      @element.find{ |child| child.kind_of? Element}.nil?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the index of the supplied child (starting at 1), or -1 if </div><div class='del'>-    # the element is not a child</div><div class='del'>-    # element:: an +Element+ child</div><div class='del'>-    def index element</div><div class='del'>-      rv = 0</div><div class='del'>-      found = @element.find do |child| </div><div class='del'>-        child.kind_of? Element and</div><div class='del'>-        (rv += 1) and</div><div class='del'>-        child == element</div><div class='del'>-      end</div><div class='del'>-      return rv if found == element</div><div class='del'>-      return -1</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Deletes a child Element</div><div class='del'>-    # element:: </div><div class='del'>-    #   Either an Element, which is removed directly; an</div><div class='del'>-    #   xpath, where the first matching child is removed; or an Integer,</div><div class='del'>-    #   where the n'th Element is removed.</div><div class='del'>-    # Returns:: the removed child</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;&lt;b/&gt;&lt;c/&gt;&lt;c id="1"/&gt;&lt;/a&gt;'</div><div class='del'>-    #  b = doc.root.elements[1]</div><div class='del'>-    #  doc.root.elements.delete b           #-&gt; &lt;a&gt;&lt;c/&gt;&lt;c id="1"/&gt;&lt;/a&gt;</div><div class='del'>-    #  doc.elements.delete("a/c[@id='1']")  #-&gt; &lt;a&gt;&lt;c/&gt;&lt;/a&gt;</div><div class='del'>-    #  doc.root.elements.delete 1           #-&gt; &lt;a/&gt;</div><div class='del'>-    def delete element</div><div class='del'>-      if element.kind_of? Element</div><div class='del'>-        @element.delete element</div><div class='del'>-      else</div><div class='del'>-        el = self[element]</div><div class='del'>-        el.remove if el</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Removes multiple elements.  Filters for Element children, regardless of</div><div class='del'>-    # XPath matching.</div><div class='del'>-    # xpath:: all elements matching this String path are removed.</div><div class='del'>-    # Returns:: an Array of Elements that have been removed</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;&lt;c/&gt;&lt;c/&gt;&lt;c/&gt;&lt;c/&gt;&lt;/a&gt;'</div><div class='del'>-    #  deleted = doc.elements.delete_all 'a/c' #-&gt; [&lt;c/&gt;, &lt;c/&gt;, &lt;c/&gt;, &lt;c/&gt;]</div><div class='del'>-    def delete_all( xpath )</div><div class='del'>-      rv = []</div><div class='del'>-      XPath::each( @element, xpath) {|element| </div><div class='del'>-        rv &lt;&lt; element if element.kind_of? Element</div><div class='del'>-      }</div><div class='del'>-      rv.each do |element|</div><div class='del'>-        @element.delete element</div><div class='del'>-        element.remove</div><div class='del'>-      end</div><div class='del'>-      return rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adds an element</div><div class='del'>-    # element:: </div><div class='del'>-    #   if supplied, is either an Element, String, or</div><div class='del'>-    #   Source (see Element.initialize).  If not supplied or nil, a</div><div class='del'>-    #   new, default Element will be constructed</div><div class='del'>-    # Returns:: the added Element</div><div class='del'>-    #  a = Element.new('a')</div><div class='del'>-    #  a.elements.add(Element.new('b'))  #-&gt; &lt;a&gt;&lt;b/&gt;&lt;/a&gt;</div><div class='del'>-    #  a.elements.add('c')               #-&gt; &lt;a&gt;&lt;b/&gt;&lt;c/&gt;&lt;/a&gt;</div><div class='del'>-    def add element=nil</div><div class='del'>-      rv = nil</div><div class='del'>-      if element.nil?</div><div class='del'>-        Element.new("", self, @element.context)</div><div class='del'>-      elsif not element.kind_of?(Element)</div><div class='del'>-        Element.new(element, self, @element.context)</div><div class='del'>-      else</div><div class='del'>-        @element &lt;&lt; element</div><div class='del'>-        element.context = @element.context</div><div class='del'>-        element</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias :&lt;&lt; :add</div><div class='del'>-</div><div class='del'>-    # Iterates through all of the child Elements, optionally filtering</div><div class='del'>-    # them by a given XPath</div><div class='del'>-    # xpath:: </div><div class='del'>-    #   optional.  If supplied, this is a String XPath, and is used to </div><div class='del'>-    #   filter the children, so that only matching children are yielded.  Note</div><div class='del'>-    #   that XPaths are automatically filtered for Elements, so that</div><div class='del'>-    #   non-Element children will not be yielded</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;&lt;b/&gt;&lt;c/&gt;&lt;d/&gt;sean&lt;b/&gt;&lt;c/&gt;&lt;d/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.each {|e|p e}       #-&gt; Yields b, c, d, b, c, d elements</div><div class='del'>-    #  doc.root.each('b') {|e|p e}  #-&gt; Yields b, b elements</div><div class='del'>-    #  doc.root.each('child::node()')  {|e|p e}</div><div class='del'>-    #  #-&gt; Yields &lt;b/&gt;, &lt;c/&gt;, &lt;d/&gt;, &lt;b/&gt;, &lt;c/&gt;, &lt;d/&gt;</div><div class='del'>-    #  XPath.each(doc.root, 'child::node()', &amp;block)</div><div class='del'>-    #  #-&gt; Yields &lt;b/&gt;, &lt;c/&gt;, &lt;d/&gt;, sean, &lt;b/&gt;, &lt;c/&gt;, &lt;d/&gt;</div><div class='del'>-    def each( xpath=nil, &amp;block)</div><div class='del'>-      XPath::each( @element, xpath ) {|e| yield e if e.kind_of? Element }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def collect( xpath=nil, &amp;block )</div><div class='del'>-      collection = []</div><div class='del'>-      XPath::each( @element, xpath ) {|e| </div><div class='del'>-        collection &lt;&lt; yield(e)  if e.kind_of?(Element) </div><div class='del'>-      }</div><div class='del'>-      collection</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inject( xpath=nil, initial=nil, &amp;block )</div><div class='del'>-      first = true</div><div class='del'>-      XPath::each( @element, xpath ) {|e|</div><div class='del'>-        if (e.kind_of? Element)</div><div class='del'>-          if (first and initial == nil)</div><div class='del'>-            initial = e</div><div class='del'>-            first = false</div><div class='del'>-          else</div><div class='del'>-            initial = yield( initial, e ) if e.kind_of? Element</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      initial</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the number of +Element+ children of the parent object.</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;sean&lt;b/&gt;elliott&lt;b/&gt;russell&lt;b/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.size            #-&gt; 6, 3 element and 3 text nodes</div><div class='del'>-    #  doc.root.elements.size   #-&gt; 3</div><div class='del'>-    def size</div><div class='del'>-      count = 0</div><div class='del'>-      @element.each {|child| count+=1 if child.kind_of? Element }</div><div class='del'>-      count</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns an Array of Element children.  An XPath may be supplied to</div><div class='del'>-    # filter the children.  Only Element children are returned, even if the</div><div class='del'>-    # supplied XPath matches non-Element children.</div><div class='del'>-    #  doc = Document.new '&lt;a&gt;sean&lt;b/&gt;elliott&lt;c/&gt;&lt;/a&gt;'</div><div class='del'>-    #  doc.root.elements.to_a                  #-&gt; [ &lt;b/&gt;, &lt;c/&gt; ]</div><div class='del'>-    #  doc.root.elements.to_a("child::node()") #-&gt; [ &lt;b/&gt;, &lt;c/&gt; ] </div><div class='del'>-    #  XPath.match(doc.root, "child::node()")  #-&gt; [ sean, &lt;b/&gt;, elliott, &lt;c/&gt; ]</div><div class='del'>-    def to_a( xpath=nil )</div><div class='del'>-      rv = XPath.match( @element, xpath )</div><div class='del'>-      return rv.find_all{|e| e.kind_of? Element} if xpath</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    # Private helper class.  Removes quotes from quoted strings</div><div class='del'>-    def literalize name</div><div class='del'>-      name = name[1..-2] if name[0] == ?' or name[0] == ?"               #'</div><div class='del'>-      name</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ########################################################################</div><div class='del'>-  # ATTRIBUTES                                                           #</div><div class='del'>-  ########################################################################</div><div class='del'>-</div><div class='del'>-  # A class that defines the set of Attributes of an Element and provides </div><div class='del'>-  # operations for accessing elements in that set.</div><div class='del'>-  class Attributes &lt; Hash</div><div class='del'>-    # Constructor</div><div class='del'>-    # element:: the Element of which this is an Attribute</div><div class='del'>-    def initialize element</div><div class='del'>-      @element = element</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Fetches an attribute value.  If you want to get the Attribute itself,</div><div class='del'>-    # use get_attribute()</div><div class='del'>-    # name:: an XPath attribute name.  Namespaces are relevant here.</div><div class='del'>-    # Returns:: </div><div class='del'>-    #   the String value of the matching attribute, or +nil+ if no</div><div class='del'>-    #   matching attribute was found.  This is the unnormalized value</div><div class='del'>-    #   (with entities expanded).</div><div class='del'>-    # </div><div class='del'>-    #  doc = Document.new "&lt;a foo:att='1' bar:att='2' att='&amp;lt;'/&gt;"</div><div class='del'>-    #  doc.root.attributes['att']         #-&gt; '&lt;'</div><div class='del'>-    #  doc.root.attributes['bar:att']     #-&gt; '2'</div><div class='del'>-    def [](name)</div><div class='del'>-      attr = get_attribute(name)</div><div class='del'>-      return attr.value unless attr.nil?</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_a</div><div class='del'>-      values.flatten</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the number of attributes the owning Element contains.</div><div class='del'>-    #  doc = Document "&lt;a x='1' y='2' foo:x='3'/&gt;"</div><div class='del'>-    #  doc.root.attributes.length        #-&gt; 3</div><div class='del'>-    def length</div><div class='del'>-      c = 0</div><div class='del'>-      each_attribute { c+=1 }</div><div class='del'>-      c</div><div class='del'>-    end</div><div class='del'>-    alias :size :length</div><div class='del'>-</div><div class='del'>-    # Iterates over the attributes of an Element.  Yields actual Attribute</div><div class='del'>-    # nodes, not String values.</div><div class='del'>-    # </div><div class='del'>-    #  doc = Document.new '&lt;a x="1" y="2"/&gt;'</div><div class='del'>-    #  doc.root.attributes.each_attribute {|attr|</div><div class='del'>-    #    p attr.expanded_name+" =&gt; "+attr.value</div><div class='del'>-    #  }</div><div class='del'>-    def each_attribute # :yields: attribute</div><div class='del'>-      each_value do |val|</div><div class='del'>-        if val.kind_of? Attribute</div><div class='del'>-          yield val</div><div class='del'>-        else</div><div class='del'>-          val.each_value { |atr| yield atr }</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Iterates over each attribute of an Element, yielding the expanded name</div><div class='del'>-    # and value as a pair of Strings.</div><div class='del'>-    #</div><div class='del'>-    #  doc = Document.new '&lt;a x="1" y="2"/&gt;'</div><div class='del'>-    #  doc.root.attributes.each {|name, value| p name+" =&gt; "+value }</div><div class='del'>-    def each</div><div class='del'>-      each_attribute do |attr|</div><div class='del'>-        yield attr.expanded_name, attr.value</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Fetches an attribute</div><div class='del'>-    # name:: </div><div class='del'>-    #   the name by which to search for the attribute.  Can be a</div><div class='del'>-    #   &lt;tt&gt;prefix:name&lt;/tt&gt; namespace name.</div><div class='del'>-    # Returns:: The first matching attribute, or nil if there was none.  This</div><div class='del'>-    # value is an Attribute node, not the String value of the attribute.</div><div class='del'>-    #  doc = Document.new '&lt;a x:foo="1" foo="2" bar="3"/&gt;'</div><div class='del'>-    #  doc.root.attributes.get_attribute("foo").value    #-&gt; "2"</div><div class='del'>-    #  doc.root.attributes.get_attribute("x:foo").value  #-&gt; "1"</div><div class='del'>-    def get_attribute( name )</div><div class='del'>-      attr = fetch( name, nil )</div><div class='del'>-      if attr.nil?</div><div class='del'>-        return nil if name.nil?</div><div class='del'>-        # Look for prefix</div><div class='del'>-        name =~ Namespace::NAMESPLIT</div><div class='del'>-        prefix, n = $1, $2</div><div class='del'>-        if prefix</div><div class='del'>-          attr = fetch( n, nil )</div><div class='del'>-          # check prefix</div><div class='del'>-          if attr == nil</div><div class='del'>-          elsif attr.kind_of? Attribute</div><div class='del'>-            return attr if prefix == attr.prefix</div><div class='del'>-          else</div><div class='del'>-            attr = attr[ prefix ]</div><div class='del'>-            return attr</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        element_document = @element.document</div><div class='del'>-        if element_document and element_document.doctype</div><div class='del'>-          expn = @element.expanded_name</div><div class='del'>-          expn = element_document.doctype.name if expn.size == 0</div><div class='del'>-          attr_val = element_document.doctype.attribute_of(expn, name)</div><div class='del'>-          return Attribute.new( name, attr_val ) if attr_val</div><div class='del'>-        end</div><div class='del'>-        return nil</div><div class='del'>-      end</div><div class='del'>-      if attr.kind_of? Hash</div><div class='del'>-        attr = attr[ @element.prefix ]</div><div class='del'>-      end</div><div class='del'>-      return attr</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sets an attribute, overwriting any existing attribute value by the</div><div class='del'>-    # same name.  Namespace is significant.</div><div class='del'>-    # name:: the name of the attribute</div><div class='del'>-    # value:: </div><div class='del'>-    #   (optional) If supplied, the value of the attribute.  If</div><div class='del'>-    #   nil, any existing matching attribute is deleted.</div><div class='del'>-    # Returns:: </div><div class='del'>-    #   Owning element</div><div class='del'>-    #  doc = Document.new "&lt;a x:foo='1' foo='3'/&gt;"</div><div class='del'>-    #  doc.root.attributes['y:foo'] = '2'</div><div class='del'>-    #  doc.root.attributes['foo'] = '4'</div><div class='del'>-    #  doc.root.attributes['x:foo'] = nil</div><div class='del'>-    def []=( name, value )</div><div class='del'>-      if value.nil?		# Delete the named attribute</div><div class='del'>-        attr = get_attribute(name)</div><div class='del'>-        delete attr</div><div class='del'>-        return</div><div class='del'>-      end</div><div class='del'>-      element_document = @element.document</div><div class='del'>-      unless value.kind_of? Attribute</div><div class='del'>-        if @element.document and @element.document.doctype</div><div class='del'>-          value = Text::normalize( value, @element.document.doctype )</div><div class='del'>-        else</div><div class='del'>-          value = Text::normalize( value, nil )</div><div class='del'>-        end</div><div class='del'>-        value = Attribute.new(name, value)</div><div class='del'>-      end</div><div class='del'>-      value.element = @element</div><div class='del'>-      old_attr = fetch(value.name, nil)</div><div class='del'>-      if old_attr.nil?</div><div class='del'>-        store(value.name, value)</div><div class='del'>-      elsif old_attr.kind_of? Hash</div><div class='del'>-        old_attr[value.prefix] = value</div><div class='del'>-      elsif old_attr.prefix != value.prefix</div><div class='del'>-        # Check for conflicting namespaces</div><div class='del'>-        raise ParseException.new( </div><div class='del'>-          "Namespace conflict in adding attribute \"#{value.name}\": "+</div><div class='del'>-          "Prefix \"#{old_attr.prefix}\" = "+</div><div class='del'>-          "\"#{@element.namespace(old_attr.prefix)}\" and prefix "+</div><div class='del'>-          "\"#{value.prefix}\" = \"#{@element.namespace(value.prefix)}\"") if </div><div class='del'>-          value.prefix != "xmlns" and old_attr.prefix != "xmlns" and</div><div class='del'>-          @element.namespace( old_attr.prefix ) == </div><div class='del'>-            @element.namespace( value.prefix )</div><div class='del'>-          store value.name, { old_attr.prefix	=&gt; old_attr,</div><div class='del'>-            value.prefix		=&gt; value }</div><div class='del'>-      else</div><div class='del'>-        store value.name, value</div><div class='del'>-      end</div><div class='del'>-      return @element</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns an array of Strings containing all of the prefixes declared </div><div class='del'>-    # by this set of # attributes.  The array does not include the default</div><div class='del'>-    # namespace declaration, if one exists.</div><div class='del'>-    #  doc = Document.new("&lt;a xmlns='foo' xmlns:x='bar' xmlns:y='twee' "+</div><div class='del'>-    #        "z='glorp' p:k='gru'/&gt;")</div><div class='del'>-    #  prefixes = doc.root.attributes.prefixes    #-&gt; ['x', 'y']</div><div class='del'>-    def prefixes</div><div class='del'>-      ns = []</div><div class='del'>-      each_attribute do |attribute|</div><div class='del'>-        ns &lt;&lt; attribute.name if attribute.prefix == 'xmlns'</div><div class='del'>-      end</div><div class='del'>-      if @element.document and @element.document.doctype</div><div class='del'>-        expn = @element.expanded_name</div><div class='del'>-        expn = @element.document.doctype.name if expn.size == 0</div><div class='del'>-        @element.document.doctype.attributes_of(expn).each {</div><div class='del'>-          |attribute|</div><div class='del'>-          ns &lt;&lt; attribute.name if attribute.prefix == 'xmlns'</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      ns</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def namespaces</div><div class='del'>-      namespaces = {}</div><div class='del'>-      each_attribute do |attribute|</div><div class='del'>-        namespaces[attribute.name] = attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns'</div><div class='del'>-      end</div><div class='del'>-      if @element.document and @element.document.doctype</div><div class='del'>-        expn = @element.expanded_name</div><div class='del'>-        expn = @element.document.doctype.name if expn.size == 0</div><div class='del'>-        @element.document.doctype.attributes_of(expn).each {</div><div class='del'>-          |attribute|</div><div class='del'>-          namespaces[attribute.name] = attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns'</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      namespaces</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Removes an attribute</div><div class='del'>-    # attribute:: </div><div class='del'>-    #   either a String, which is the name of the attribute to remove --</div><div class='del'>-    #   namespaces are significant here -- or the attribute to remove.</div><div class='del'>-    # Returns:: the owning element</div><div class='del'>-    #  doc = Document.new "&lt;a y:foo='0' x:foo='1' foo='3' z:foo='4'/&gt;"</div><div class='del'>-    #  doc.root.attributes.delete 'foo'   #-&gt; &lt;a y:foo='0' x:foo='1' z:foo='4'/&gt;"</div><div class='del'>-    #  doc.root.attributes.delete 'x:foo' #-&gt; &lt;a y:foo='0' z:foo='4'/&gt;"</div><div class='del'>-    #  attr = doc.root.attributes.get_attribute('y:foo')</div><div class='del'>-    #  doc.root.attributes.delete attr    #-&gt; &lt;a z:foo='4'/&gt;"</div><div class='del'>-    def delete( attribute )</div><div class='del'>-      name = nil</div><div class='del'>-      prefix = nil</div><div class='del'>-      if attribute.kind_of? Attribute</div><div class='del'>-        name = attribute.name</div><div class='del'>-        prefix = attribute.prefix</div><div class='del'>-      else</div><div class='del'>-        attribute =~ Namespace::NAMESPLIT</div><div class='del'>-        prefix, name = $1, $2</div><div class='del'>-        prefix = '' unless prefix</div><div class='del'>-      end</div><div class='del'>-      old = fetch(name, nil)</div><div class='del'>-      attr = nil</div><div class='del'>-      if old.kind_of? Hash # the supplied attribute is one of many</div><div class='del'>-        attr = old.delete(prefix)</div><div class='del'>-        if old.size == 1</div><div class='del'>-          repl = nil</div><div class='del'>-          old.each_value{|v| repl = v}</div><div class='del'>-          store name, repl</div><div class='del'>-        end</div><div class='del'>-      elsif old.nil?</div><div class='del'>-        return @element</div><div class='del'>-      else # the supplied attribute is a top-level one</div><div class='del'>-        attr = old</div><div class='del'>-        res = super(name)</div><div class='del'>-      end</div><div class='del'>-      @element</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Adds an attribute, overriding any existing attribute by the</div><div class='del'>-    # same name.  Namespaces are significant.</div><div class='del'>-    # attribute:: An Attribute</div><div class='del'>-    def add( attribute )</div><div class='del'>-      self[attribute.name] = attribute</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias :&lt;&lt; :add</div><div class='del'>-</div><div class='del'>-    # Deletes all attributes matching a name.  Namespaces are significant.</div><div class='del'>-    # name:: </div><div class='del'>-    #   A String; all attributes that match this path will be removed</div><div class='del'>-    # Returns:: an Array of the Attributes that were removed</div><div class='del'>-    def delete_all( name )</div><div class='del'>-      rv = []</div><div class='del'>-      each_attribute { |attribute| </div><div class='del'>-        rv &lt;&lt; attribute if attribute.expanded_name == name</div><div class='del'>-      }</div><div class='del'>-      rv.each{ |attr| attr.remove }</div><div class='del'>-      return rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # The +get_attribute_ns+ method retrieves a method by its namespace</div><div class='del'>-    # and name. Thus it is possible to reliably identify an attribute</div><div class='del'>-    # even if an XML processor has changed the prefix.</div><div class='del'>-    # </div><div class='del'>-    # Method contributed by Henrik Martensson</div><div class='del'>-    def get_attribute_ns(namespace, name)</div><div class='del'>-      each_attribute() { |attribute|</div><div class='del'>-        if name == attribute.name &amp;&amp;</div><div class='del'>-          namespace == attribute.namespace()</div><div class='del'>-          return attribute</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      nil</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/encoding.rb b/lib/rexml/encoding.rb<br/>deleted file mode 100644<br/>index a01763be99..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encoding.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encoding.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,71 +0,0 @@</div><div class='del'>-# -*- mode: ruby; ruby-indent-level: 2; indent-tabs-mode: t; tab-width: 2 -*- vim: sw=2 ts=2</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    @encoding_methods = {}</div><div class='del'>-    def self.register(enc, &amp;block)</div><div class='del'>-      @encoding_methods[enc] = block</div><div class='del'>-    end</div><div class='del'>-    def self.apply(obj, enc)</div><div class='del'>-      @encoding_methods[enc][obj]</div><div class='del'>-    end</div><div class='del'>-    def self.encoding_method(enc)</div><div class='del'>-      @encoding_methods[enc]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Native, default format is UTF-8, so it is declared here rather than in</div><div class='del'>-    # an encodings/ definition.</div><div class='del'>-    UTF_8 = 'UTF-8'</div><div class='del'>-    UTF_16 = 'UTF-16'</div><div class='del'>-    UNILE = 'UNILE'</div><div class='del'>-</div><div class='del'>-    # ID ---&gt; Encoding name</div><div class='del'>-    attr_reader :encoding</div><div class='del'>-    def encoding=( enc )</div><div class='del'>-      old_verbosity = $VERBOSE</div><div class='del'>-      begin</div><div class='del'>-        $VERBOSE = false</div><div class='del'>-        enc = enc.nil? ? nil : enc.upcase</div><div class='del'>-        return false if defined? @encoding and enc == @encoding</div><div class='del'>-        if enc and enc != UTF_8</div><div class='del'>-          @encoding = enc</div><div class='del'>-          raise ArgumentError, "Bad encoding name #@encoding" unless @encoding =~ /^[\w-]+$/</div><div class='del'>-          @encoding.untaint </div><div class='del'>-          begin</div><div class='del'>-            require 'rexml/encodings/ICONV.rb'</div><div class='del'>-            Encoding.apply(self, "ICONV")</div><div class='del'>-          rescue LoadError, Exception</div><div class='del'>-            begin</div><div class='del'>-              enc_file = File.join( "rexml", "encodings", "#@encoding.rb" )</div><div class='del'>-              require enc_file</div><div class='del'>-              Encoding.apply(self, @encoding)</div><div class='del'>-            rescue LoadError =&gt; err</div><div class='del'>-              puts err.message</div><div class='del'>-              raise ArgumentError, "No decoder found for encoding #@encoding.  Please install iconv."</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          @encoding = UTF_8</div><div class='del'>-          require 'rexml/encodings/UTF-8.rb'</div><div class='del'>-          Encoding.apply(self, @encoding)</div><div class='del'>-        end</div><div class='del'>-      ensure</div><div class='del'>-        $VERBOSE = old_verbosity</div><div class='del'>-      end</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def check_encoding str</div><div class='del'>-      # We have to recognize UTF-16, LSB UTF-16, and UTF-8</div><div class='del'>-      if str[0] == 0xfe &amp;&amp; str[1] == 0xff</div><div class='del'>-        str[0,2] = ""</div><div class='del'>-        return UTF_16</div><div class='del'>-      elsif str[0] == 0xff &amp;&amp; str[1] == 0xfe</div><div class='del'>-        str[0,2] = ""</div><div class='del'>-        return UNILE</div><div class='del'>-      end</div><div class='del'>-      str =~ /^\s*&lt;\?xml\s+version\s*=\s*(['"]).*?\1\s+encoding\s*=\s*(["'])(.*?)\2/um</div><div class='del'>-      return $3.upcase if $3</div><div class='del'>-      return UTF_8</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/encodings/CP-1252.rb b/lib/rexml/encodings/CP-1252.rb<br/>deleted file mode 100644<br/>index 8675f9ff98..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/CP-1252.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/CP-1252.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,103 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# This class was contributed by Mikko Tiihonen mikko DOT tiihonen AT hut DOT fi</div><div class='del'>-#</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-  	register( "CP-1252" ) do |o|</div><div class='del'>-  		class &lt;&lt; o</div><div class='del'>-  			alias encode encode_cp1252</div><div class='del'>-			alias decode decode_cp1252</div><div class='del'>-  		end</div><div class='del'>-  	end</div><div class='del'>-</div><div class='del'>-    # Convert from UTF-8</div><div class='del'>-    def encode_cp1252(content)</div><div class='del'>-      array_utf8 = content.unpack('U*')</div><div class='del'>-      array_enc = []</div><div class='del'>-      array_utf8.each do |num|</div><div class='del'>-        case num</div><div class='del'>-          # shortcut first bunch basic characters</div><div class='del'>-        when 0..0xFF; array_enc &lt;&lt; num</div><div class='del'>-          # characters added compared to iso-8859-1</div><div class='del'>-        when 0x20AC; array_enc &lt;&lt; 0x80 # 0xe2 0x82 0xac</div><div class='del'>-        when 0x201A; array_enc &lt;&lt; 0x82 # 0xe2 0x82 0x9a</div><div class='del'>-        when 0x0192; array_enc &lt;&lt; 0x83 # 0xc6 0x92</div><div class='del'>-        when 0x201E; array_enc &lt;&lt; 0x84 # 0xe2 0x82 0x9e</div><div class='del'>-        when 0x2026; array_enc &lt;&lt; 0x85 # 0xe2 0x80 0xa6</div><div class='del'>-        when 0x2020; array_enc &lt;&lt; 0x86 # 0xe2 0x80 0xa0</div><div class='del'>-        when 0x2021; array_enc &lt;&lt; 0x87 # 0xe2 0x80 0xa1</div><div class='del'>-        when 0x02C6; array_enc &lt;&lt; 0x88 # 0xcb 0x86</div><div class='del'>-        when 0x2030; array_enc &lt;&lt; 0x89 # 0xe2 0x80 0xb0</div><div class='del'>-        when 0x0160; array_enc &lt;&lt; 0x8A # 0xc5 0xa0</div><div class='del'>-        when 0x2039; array_enc &lt;&lt; 0x8B # 0xe2 0x80 0xb9</div><div class='del'>-        when 0x0152; array_enc &lt;&lt; 0x8C # 0xc5 0x92</div><div class='del'>-        when 0x017D; array_enc &lt;&lt; 0x8E # 0xc5 0xbd</div><div class='del'>-        when 0x2018; array_enc &lt;&lt; 0x91 # 0xe2 0x80 0x98</div><div class='del'>-        when 0x2019; array_enc &lt;&lt; 0x92 # 0xe2 0x80 0x99</div><div class='del'>-        when 0x201C; array_enc &lt;&lt; 0x93 # 0xe2 0x80 0x9c</div><div class='del'>-        when 0x201D; array_enc &lt;&lt; 0x94 # 0xe2 0x80 0x9d</div><div class='del'>-        when 0x2022; array_enc &lt;&lt; 0x95 # 0xe2 0x80 0xa2</div><div class='del'>-        when 0x2013; array_enc &lt;&lt; 0x96 # 0xe2 0x80 0x93</div><div class='del'>-        when 0x2014; array_enc &lt;&lt; 0x97 # 0xe2 0x80 0x94</div><div class='del'>-        when 0x02DC; array_enc &lt;&lt; 0x98 # 0xcb 0x9c</div><div class='del'>-        when 0x2122; array_enc &lt;&lt; 0x99 # 0xe2 0x84 0xa2</div><div class='del'>-        when 0x0161; array_enc &lt;&lt; 0x9A # 0xc5 0xa1</div><div class='del'>-        when 0x203A; array_enc &lt;&lt; 0x9B # 0xe2 0x80 0xba</div><div class='del'>-        when 0x0152; array_enc &lt;&lt; 0x9C # 0xc5 0x93</div><div class='del'>-        when 0x017E; array_enc &lt;&lt; 0x9E # 0xc5 0xbe</div><div class='del'>-        when 0x0178; array_enc &lt;&lt; 0x9F # 0xc5 0xb8</div><div class='del'>-        else</div><div class='del'>-          # all remaining basic characters can be used directly</div><div class='del'>-          if num &lt;= 0xFF</div><div class='del'>-            array_enc &lt;&lt; num</div><div class='del'>-          else</div><div class='del'>-            # Numeric entity (&amp;#nnnn;); shard by  Stefan Scholl</div><div class='del'>-            array_enc.concat "&amp;\##{num};".unpack('C*')</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      array_enc.pack('C*')</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Convert to UTF-8</div><div class='del'>-    def decode_cp1252(str)</div><div class='del'>-      array_latin9 = str.unpack('C*')</div><div class='del'>-      array_enc = []</div><div class='del'>-      array_latin9.each do |num|</div><div class='del'>-        case num</div><div class='del'>-          # characters that added compared to iso-8859-1</div><div class='del'>-        when 0x80; array_enc &lt;&lt; 0x20AC # 0xe2 0x82 0xac</div><div class='del'>-        when 0x82; array_enc &lt;&lt; 0x201A # 0xe2 0x82 0x9a</div><div class='del'>-        when 0x83; array_enc &lt;&lt; 0x0192 # 0xc6 0x92</div><div class='del'>-        when 0x84; array_enc &lt;&lt; 0x201E # 0xe2 0x82 0x9e</div><div class='del'>-        when 0x85; array_enc &lt;&lt; 0x2026 # 0xe2 0x80 0xa6</div><div class='del'>-        when 0x86; array_enc &lt;&lt; 0x2020 # 0xe2 0x80 0xa0</div><div class='del'>-        when 0x87; array_enc &lt;&lt; 0x2021 # 0xe2 0x80 0xa1</div><div class='del'>-        when 0x88; array_enc &lt;&lt; 0x02C6 # 0xcb 0x86</div><div class='del'>-        when 0x89; array_enc &lt;&lt; 0x2030 # 0xe2 0x80 0xb0</div><div class='del'>-        when 0x8A; array_enc &lt;&lt; 0x0160 # 0xc5 0xa0</div><div class='del'>-        when 0x8B; array_enc &lt;&lt; 0x2039 # 0xe2 0x80 0xb9</div><div class='del'>-        when 0x8C; array_enc &lt;&lt; 0x0152 # 0xc5 0x92</div><div class='del'>-        when 0x8E; array_enc &lt;&lt; 0x017D # 0xc5 0xbd</div><div class='del'>-        when 0x91; array_enc &lt;&lt; 0x2018 # 0xe2 0x80 0x98</div><div class='del'>-        when 0x92; array_enc &lt;&lt; 0x2019 # 0xe2 0x80 0x99</div><div class='del'>-        when 0x93; array_enc &lt;&lt; 0x201C # 0xe2 0x80 0x9c</div><div class='del'>-        when 0x94; array_enc &lt;&lt; 0x201D # 0xe2 0x80 0x9d</div><div class='del'>-        when 0x95; array_enc &lt;&lt; 0x2022 # 0xe2 0x80 0xa2</div><div class='del'>-        when 0x96; array_enc &lt;&lt; 0x2013 # 0xe2 0x80 0x93</div><div class='del'>-        when 0x97; array_enc &lt;&lt; 0x2014 # 0xe2 0x80 0x94</div><div class='del'>-        when 0x98; array_enc &lt;&lt; 0x02DC # 0xcb 0x9c</div><div class='del'>-        when 0x99; array_enc &lt;&lt; 0x2122 # 0xe2 0x84 0xa2</div><div class='del'>-        when 0x9A; array_enc &lt;&lt; 0x0161 # 0xc5 0xa1</div><div class='del'>-        when 0x9B; array_enc &lt;&lt; 0x203A # 0xe2 0x80 0xba</div><div class='del'>-        when 0x9C; array_enc &lt;&lt; 0x0152 # 0xc5 0x93</div><div class='del'>-        when 0x9E; array_enc &lt;&lt; 0x017E # 0xc5 0xbe</div><div class='del'>-        when 0x9F; array_enc &lt;&lt; 0x0178 # 0xc5 0xb8</div><div class='del'>-        else</div><div class='del'>-          array_enc &lt;&lt; num</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      array_enc.pack('U*')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/encodings/EUC-JP.rb b/lib/rexml/encodings/EUC-JP.rb<br/>deleted file mode 100644<br/>index db37b6bf0d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/EUC-JP.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/EUC-JP.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,35 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    begin</div><div class='del'>-      require 'uconv'</div><div class='del'>-</div><div class='del'>-      def decode_eucjp(str)</div><div class='del'>-        Uconv::euctou8(str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encode_eucjp content</div><div class='del'>-        Uconv::u8toeuc(content)</div><div class='del'>-      end</div><div class='del'>-    rescue LoadError</div><div class='del'>-      require 'nkf'</div><div class='del'>-</div><div class='del'>-      EUCTOU8 = '-Ewm0'</div><div class='del'>-      U8TOEUC = '-Wem0'</div><div class='del'>-</div><div class='del'>-      def decode_eucjp(str)</div><div class='del'>-        NKF.nkf(EUCTOU8, str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encode_eucjp content</div><div class='del'>-        NKF.nkf(U8TOEUC, content)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    register("EUC-JP") do |obj|</div><div class='del'>-      class &lt;&lt; obj</div><div class='del'>-        alias decode decode_eucjp</div><div class='del'>-        alias encode encode_eucjp</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/lib/rexml/encodings/ICONV.rb b/lib/rexml/encodings/ICONV.rb<br/>deleted file mode 100644<br/>index 172fba7cd1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/ICONV.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/ICONV.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,22 +0,0 @@</div><div class='del'>-require "iconv"</div><div class='del'>-raise LoadError unless defined? Iconv</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    def decode_iconv(str)</div><div class='del'>-      Iconv.conv(UTF_8, @encoding, str)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def encode_iconv(content)</div><div class='del'>-      Iconv.conv(@encoding, UTF_8, content)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    register("ICONV") do |obj|</div><div class='del'>-      Iconv.conv(UTF_8, obj.encoding, nil)</div><div class='del'>-      class &lt;&lt; obj</div><div class='del'>-        alias decode decode_iconv</div><div class='del'>-        alias encode encode_iconv</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/lib/rexml/encodings/ISO-8859-1.rb b/lib/rexml/encodings/ISO-8859-1.rb<br/>deleted file mode 100644<br/>index 2873d13bf0..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/ISO-8859-1.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/ISO-8859-1.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,7 +0,0 @@</div><div class='del'>-require 'rexml/encodings/US-ASCII'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    register("ISO-8859-1", &amp;encoding_method("US-ASCII"))</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/encodings/ISO-8859-15.rb b/lib/rexml/encodings/ISO-8859-15.rb<br/>deleted file mode 100644<br/>index 8dea0d38a4..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/ISO-8859-15.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/ISO-8859-15.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,72 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# This class was contributed by Mikko Tiihonen mikko DOT tiihonen AT hut DOT fi</div><div class='del'>-#</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-  	register("ISO-8859-15") do |o|</div><div class='del'>-  		alias encode to_iso_8859_15</div><div class='del'>-      alias decode from_iso_8859_15</div><div class='del'>-  	end</div><div class='del'>-</div><div class='del'>-    # Convert from UTF-8</div><div class='del'>-    def to_iso_8859_15(content)</div><div class='del'>-      array_utf8 = content.unpack('U*')</div><div class='del'>-      array_enc = []</div><div class='del'>-      array_utf8.each do |num|</div><div class='del'>-        case num</div><div class='del'>-          # shortcut first bunch basic characters</div><div class='del'>-        when 0..0xA3; array_enc &lt;&lt; num</div><div class='del'>-          # characters removed compared to iso-8859-1</div><div class='del'>-        when 0xA4; array_enc &lt;&lt; '&amp;#164;'</div><div class='del'>-        when 0xA6; array_enc &lt;&lt; '&amp;#166;'</div><div class='del'>-        when 0xA8; array_enc &lt;&lt; '&amp;#168;'</div><div class='del'>-        when 0xB4; array_enc &lt;&lt; '&amp;#180;'</div><div class='del'>-        when 0xB8; array_enc &lt;&lt; '&amp;#184;'</div><div class='del'>-        when 0xBC; array_enc &lt;&lt; '&amp;#188;'</div><div class='del'>-        when 0xBD; array_enc &lt;&lt; '&amp;#189;'</div><div class='del'>-        when 0xBE; array_enc &lt;&lt; '&amp;#190;'</div><div class='del'>-          # characters added compared to iso-8859-1</div><div class='del'>-        when 0x20AC; array_enc &lt;&lt; 0xA4 # 0xe2 0x82 0xac</div><div class='del'>-        when 0x0160; array_enc &lt;&lt; 0xA6 # 0xc5 0xa0</div><div class='del'>-        when 0x0161; array_enc &lt;&lt; 0xA8 # 0xc5 0xa1</div><div class='del'>-        when 0x017D; array_enc &lt;&lt; 0xB4 # 0xc5 0xbd</div><div class='del'>-        when 0x017E; array_enc &lt;&lt; 0xB8 # 0xc5 0xbe</div><div class='del'>-        when 0x0152; array_enc &lt;&lt; 0xBC # 0xc5 0x92</div><div class='del'>-        when 0x0153; array_enc &lt;&lt; 0xBD # 0xc5 0x93</div><div class='del'>-        when 0x0178; array_enc &lt;&lt; 0xBE # 0xc5 0xb8</div><div class='del'>-        else</div><div class='del'>-          # all remaining basic characters can be used directly</div><div class='del'>-          if num &lt;= 0xFF</div><div class='del'>-            array_enc &lt;&lt; num</div><div class='del'>-          else</div><div class='del'>-            # Numeric entity (&amp;#nnnn;); shard by  Stefan Scholl</div><div class='del'>-            array_enc.concat "&amp;\##{num};".unpack('C*')</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      array_enc.pack('C*')</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Convert to UTF-8</div><div class='del'>-    def from_iso_8859_15(str)</div><div class='del'>-      array_latin9 = str.unpack('C*')</div><div class='del'>-      array_enc = []</div><div class='del'>-      array_latin9.each do |num|</div><div class='del'>-        case num</div><div class='del'>-          # characters that differ compared to iso-8859-1</div><div class='del'>-        when 0xA4; array_enc &lt;&lt; 0x20AC</div><div class='del'>-        when 0xA6; array_enc &lt;&lt; 0x0160</div><div class='del'>-        when 0xA8; array_enc &lt;&lt; 0x0161</div><div class='del'>-        when 0xB4; array_enc &lt;&lt; 0x017D</div><div class='del'>-        when 0xB8; array_enc &lt;&lt; 0x017E</div><div class='del'>-        when 0xBC; array_enc &lt;&lt; 0x0152</div><div class='del'>-        when 0xBD; array_enc &lt;&lt; 0x0153</div><div class='del'>-        when 0xBE; array_enc &lt;&lt; 0x0178</div><div class='del'>-        else</div><div class='del'>-          array_enc &lt;&lt; num</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      array_enc.pack('U*')</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/encodings/SHIFT-JIS.rb b/lib/rexml/encodings/SHIFT-JIS.rb<br/>deleted file mode 100644<br/>index 9e0f4af20e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/SHIFT-JIS.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/SHIFT-JIS.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,37 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    begin</div><div class='del'>-      require 'uconv'</div><div class='del'>-</div><div class='del'>-      def decode_sjis content</div><div class='del'>-        Uconv::sjistou8(content)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encode_sjis(str)</div><div class='del'>-        Uconv::u8tosjis(str)</div><div class='del'>-      end</div><div class='del'>-    rescue LoadError</div><div class='del'>-      require 'nkf'</div><div class='del'>-</div><div class='del'>-      SJISTOU8 = '-Swm0x'</div><div class='del'>-      U8TOSJIS = '-Wsm0x'</div><div class='del'>-</div><div class='del'>-      def decode_sjis(str)</div><div class='del'>-        NKF.nkf(SJISTOU8, str)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def encode_sjis content</div><div class='del'>-        NKF.nkf(U8TOSJIS, content)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    b = proc do |obj|</div><div class='del'>-      class &lt;&lt; obj</div><div class='del'>-        alias decode decode_sjis</div><div class='del'>-        alias encode encode_sjis</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    register("SHIFT-JIS", &amp;b)</div><div class='del'>-    register("SHIFT_JIS", &amp;b)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/encodings/SHIFT_JIS.rb b/lib/rexml/encodings/SHIFT_JIS.rb<br/>deleted file mode 100644<br/>index e355704a7c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/SHIFT_JIS.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/SHIFT_JIS.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1 +0,0 @@</div><div class='del'>-require 'rexml/encodings/SHIFT-JIS'</div><div class='head'>diff --git a/lib/rexml/encodings/UNILE.rb b/lib/rexml/encodings/UNILE.rb<br/>deleted file mode 100644<br/>index d054140c40..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/UNILE.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/UNILE.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,34 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    def encode_unile content</div><div class='del'>-      array_utf8 = content.unpack("U*")</div><div class='del'>-      array_enc = []</div><div class='del'>-      array_utf8.each do |num|</div><div class='del'>-        if ((num&gt;&gt;16) &gt; 0)</div><div class='del'>-          array_enc &lt;&lt; ??</div><div class='del'>-          array_enc &lt;&lt; 0</div><div class='del'>-        else</div><div class='del'>-          array_enc &lt;&lt; (num &amp; 0xFF)</div><div class='del'>-          array_enc &lt;&lt; (num &gt;&gt; 8)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      array_enc.pack('C*')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def decode_unile(str)</div><div class='del'>-      array_enc=str.unpack('C*')</div><div class='del'>-      array_utf8 = []</div><div class='del'>-      0.step(array_enc.size-1, 2){|i| </div><div class='del'>-        array_utf8 &lt;&lt; (array_enc.at(i) + array_enc.at(i+1)*0x100)</div><div class='del'>-      }</div><div class='del'>-      array_utf8.pack('U*')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    register(UNILE) do |obj|</div><div class='del'>-      class &lt;&lt; obj</div><div class='del'>-        alias decode decode_unile</div><div class='del'>-        alias encode encode_unile</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/lib/rexml/encodings/US-ASCII.rb b/lib/rexml/encodings/US-ASCII.rb<br/>deleted file mode 100644<br/>index fb4c217074..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/US-ASCII.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/US-ASCII.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,30 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    # Convert from UTF-8</div><div class='del'>-    def encode_ascii content</div><div class='del'>-      array_utf8 = content.unpack('U*')</div><div class='del'>-      array_enc = []</div><div class='del'>-      array_utf8.each do |num|</div><div class='del'>-        if num &lt;= 0x7F</div><div class='del'>-          array_enc &lt;&lt; num</div><div class='del'>-        else</div><div class='del'>-          # Numeric entity (&amp;#nnnn;); shard by  Stefan Scholl</div><div class='del'>-          array_enc.concat "&amp;\##{num};".unpack('C*')</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      array_enc.pack('C*')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Convert to UTF-8</div><div class='del'>-    def decode_ascii(str)</div><div class='del'>-      str.unpack('C*').pack('U*')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    register("US-ASCII") do |obj|</div><div class='del'>-      class &lt;&lt; obj</div><div class='del'>-        alias decode decode_ascii</div><div class='del'>-        alias encode encode_ascii</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/lib/rexml/encodings/UTF-16.rb b/lib/rexml/encodings/UTF-16.rb<br/>deleted file mode 100644<br/>index 007c493d9c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/UTF-16.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/UTF-16.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,35 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    def encode_utf16 content</div><div class='del'>-      array_utf8 = content.unpack("U*")</div><div class='del'>-      array_enc = []</div><div class='del'>-      array_utf8.each do |num|</div><div class='del'>-        if ((num&gt;&gt;16) &gt; 0)</div><div class='del'>-          array_enc &lt;&lt; 0</div><div class='del'>-          array_enc &lt;&lt; ??</div><div class='del'>-        else</div><div class='del'>-          array_enc &lt;&lt; (num &gt;&gt; 8)</div><div class='del'>-          array_enc &lt;&lt; (num &amp; 0xFF)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      array_enc.pack('C*')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def decode_utf16(str)</div><div class='del'>-      str = str[2..-1] if /^\376\377/n =~ str</div><div class='del'>-      array_enc=str.unpack('C*')</div><div class='del'>-      array_utf8 = []</div><div class='del'>-      0.step(array_enc.size-1, 2){|i| </div><div class='del'>-        array_utf8 &lt;&lt; (array_enc.at(i+1) + array_enc.at(i)*0x100)</div><div class='del'>-      }</div><div class='del'>-      array_utf8.pack('U*')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    register(UTF_16) do |obj|</div><div class='del'>-      class &lt;&lt; obj</div><div class='del'>-        alias decode decode_utf16</div><div class='del'>-        alias encode encode_utf16</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/lib/rexml/encodings/UTF-8.rb b/lib/rexml/encodings/UTF-8.rb<br/>deleted file mode 100644<br/>index bb08f44100..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/encodings/UTF-8.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/encodings/UTF-8.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Encoding</div><div class='del'>-    def encode_utf8 content</div><div class='del'>-      content</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def decode_utf8(str)</div><div class='del'>-      str</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    register(UTF_8) do |obj|</div><div class='del'>-      class &lt;&lt; obj</div><div class='del'>-        alias decode decode_utf8</div><div class='del'>-        alias encode encode_utf8</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/lib/rexml/entity.rb b/lib/rexml/entity.rb<br/>deleted file mode 100644<br/>index ff2d45f39b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/entity.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/entity.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,165 +0,0 @@</div><div class='del'>-require 'rexml/child'</div><div class='del'>-require 'rexml/source'</div><div class='del'>-require 'rexml/xmltokens'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	# God, I hate DTDs.  I really do.  Why this idiot standard still</div><div class='del'>-	# plagues us is beyond me.</div><div class='del'>-	class Entity &lt; Child</div><div class='del'>-		include XMLTokens</div><div class='del'>-		PUBIDCHAR = "\x20\x0D\x0Aa-zA-Z0-9\\-()+,./:=?;!*@$_%#"</div><div class='del'>-		SYSTEMLITERAL = %Q{((?:"[^"]*")|(?:'[^']*'))}</div><div class='del'>-		PUBIDLITERAL = %Q{("[#{PUBIDCHAR}']*"|'[#{PUBIDCHAR}]*')}</div><div class='del'>-		EXTERNALID = "(?:(?:(SYSTEM)\\s+#{SYSTEMLITERAL})|(?:(PUBLIC)\\s+#{PUBIDLITERAL}\\s+#{SYSTEMLITERAL}))"</div><div class='del'>-		NDATADECL = "\\s+NDATA\\s+#{NAME}"</div><div class='del'>-		PEREFERENCE = "%#{NAME};"</div><div class='del'>-		ENTITYVALUE = %Q{((?:"(?:[^%&amp;"]|#{PEREFERENCE}|#{REFERENCE})*")|(?:'([^%&amp;']|#{PEREFERENCE}|#{REFERENCE})*'))}</div><div class='del'>-		PEDEF = "(?:#{ENTITYVALUE}|#{EXTERNALID})"</div><div class='del'>-		ENTITYDEF = "(?:#{ENTITYVALUE}|(?:#{EXTERNALID}(#{NDATADECL})?))"</div><div class='del'>-		PEDECL = "&lt;!ENTITY\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*&gt;"</div><div class='del'>-		GEDECL = "&lt;!ENTITY\\s+#{NAME}\\s+#{ENTITYDEF}\\s*&gt;"</div><div class='del'>-		ENTITYDECL = /\s*(?:#{GEDECL})|(?:#{PEDECL})/um</div><div class='del'>-</div><div class='del'>-		attr_reader :name, :external, :ref, :ndata, :pubid</div><div class='del'>-</div><div class='del'>-		# Create a new entity.  Simple entities can be constructed by passing a</div><div class='del'>-		# name, value to the constructor; this creates a generic, plain entity</div><div class='del'>-		# reference. For anything more complicated, you have to pass a Source to</div><div class='del'>-		# the constructor with the entity definiton, or use the accessor methods.</div><div class='del'>-		# +WARNING+: There is no validation of entity state except when the entity</div><div class='del'>-		# is read from a stream.  If you start poking around with the accessors,</div><div class='del'>-		# you can easily create a non-conformant Entity.  The best thing to do is</div><div class='del'>-		# dump the stupid DTDs and use XMLSchema instead.</div><div class='del'>-		# </div><div class='del'>-		#  e = Entity.new( 'amp', '&amp;' )</div><div class='del'>-		def initialize stream, value=nil, parent=nil, reference=false</div><div class='del'>-			super(parent)</div><div class='del'>-			@ndata = @pubid = @value = @external = nil</div><div class='del'>-			if stream.kind_of? Array</div><div class='del'>-				@name = stream[1]</div><div class='del'>-				if stream[-1] == '%'</div><div class='del'>-					@reference = true </div><div class='del'>-					stream.pop</div><div class='del'>-				else</div><div class='del'>-					@reference = false</div><div class='del'>-				end</div><div class='del'>-				if stream[2] =~ /SYSTEM|PUBLIC/</div><div class='del'>-					@external = stream[2]</div><div class='del'>-					if @external == 'SYSTEM'</div><div class='del'>-						@ref = stream[3]</div><div class='del'>-						@ndata = stream[4] if stream.size == 5</div><div class='del'>-					else</div><div class='del'>-						@pubid = stream[3]</div><div class='del'>-						@ref = stream[4]</div><div class='del'>-					end</div><div class='del'>-				else</div><div class='del'>-					@value = stream[2]</div><div class='del'>-				end</div><div class='del'>-			else</div><div class='del'>-				@reference = reference</div><div class='del'>-				@external = nil</div><div class='del'>-				@name = stream</div><div class='del'>-				@value = value</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Evaluates whether the given string matchs an entity definition,</div><div class='del'>-		# returning true if so, and false otherwise.</div><div class='del'>-		def Entity::matches? string</div><div class='del'>-			(ENTITYDECL =~ string) == 0</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Evaluates to the unnormalized value of this entity; that is, replacing</div><div class='del'>-		# all entities -- both %ent; and &amp;ent; entities.  This differs from</div><div class='del'>-		# +value()+ in that +value+ only replaces %ent; entities.</div><div class='del'>-		def unnormalized</div><div class='del'>-			v = value()</div><div class='del'>-			return nil if v.nil?</div><div class='del'>-			@unnormalized = Text::unnormalize(v, parent)</div><div class='del'>-			@unnormalized</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		#once :unnormalized</div><div class='del'>-</div><div class='del'>-		# Returns the value of this entity unprocessed -- raw.  This is the</div><div class='del'>-		# normalized value; that is, with all %ent; and &amp;ent; entities intact</div><div class='del'>-		def normalized</div><div class='del'>-			@value</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Write out a fully formed, correct entity definition (assuming the Entity</div><div class='del'>-		# object itself is valid.)</div><div class='del'>-    #</div><div class='del'>-    # out::</div><div class='del'>-    #   An object implementing &lt;TT&gt;&amp;lt;&amp;lt;&lt;TT&gt; to which the entity will be</div><div class='del'>-    #   output</div><div class='del'>-    # indent::</div><div class='del'>-    #   *DEPRECATED* and ignored</div><div class='del'>-		def write out, indent=-1</div><div class='del'>-			out &lt;&lt; '&lt;!ENTITY '</div><div class='del'>-			out &lt;&lt; '% ' if @reference</div><div class='del'>-			out &lt;&lt; @name</div><div class='del'>-			out &lt;&lt; ' '</div><div class='del'>-			if @external</div><div class='del'>-				out &lt;&lt; @external &lt;&lt; ' '</div><div class='del'>-				if @pubid</div><div class='del'>-					q = @pubid.include?('"')?"'":'"'</div><div class='del'>-					out &lt;&lt; q &lt;&lt; @pubid &lt;&lt; q &lt;&lt; ' '</div><div class='del'>-				end</div><div class='del'>-				q = @ref.include?('"')?"'":'"'</div><div class='del'>-				out &lt;&lt; q &lt;&lt; @ref &lt;&lt; q</div><div class='del'>-				out &lt;&lt; ' NDATA ' &lt;&lt; @ndata if @ndata</div><div class='del'>-			else</div><div class='del'>-				q = @value.include?('"')?"'":'"'</div><div class='del'>-				out &lt;&lt; q &lt;&lt; @value &lt;&lt; q</div><div class='del'>-			end</div><div class='del'>-			out &lt;&lt; '&gt;'</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns this entity as a string.  See write().</div><div class='del'>-		def to_s</div><div class='del'>-			rv = ''</div><div class='del'>-			write rv</div><div class='del'>-			rv</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		PEREFERENCE_RE = /#{PEREFERENCE}/um</div><div class='del'>-		# Returns the value of this entity.  At the moment, only internal entities</div><div class='del'>-		# are processed.  If the value contains internal references (IE,</div><div class='del'>-		# %blah;), those are replaced with their values.  IE, if the doctype</div><div class='del'>-		# contains:</div><div class='del'>-		#  &lt;!ENTITY % foo "bar"&gt;</div><div class='del'>-		#  &lt;!ENTITY yada "nanoo %foo; nanoo&gt;</div><div class='del'>-		# then:</div><div class='del'>-		#  doctype.entity('yada').value   #-&gt; "nanoo bar nanoo"</div><div class='del'>-		def value</div><div class='del'>-			if @value</div><div class='del'>-				matches = @value.scan(PEREFERENCE_RE)</div><div class='del'>-				rv = @value.clone</div><div class='del'>-				if @parent</div><div class='del'>-					matches.each do |entity_reference|</div><div class='del'>-						entity_value = @parent.entity( entity_reference[0] )</div><div class='del'>-						rv.gsub!( /%#{entity_reference};/um, entity_value )</div><div class='del'>-					end</div><div class='del'>-				end</div><div class='del'>-				return rv</div><div class='del'>-			end</div><div class='del'>-			nil</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-	# This is a set of entity constants -- the ones defined in the XML</div><div class='del'>-	# specification.  These are +gt+, +lt+, +amp+, +quot+ and +apos+.</div><div class='del'>-	module EntityConst</div><div class='del'>-		# +&gt;+</div><div class='del'>-		GT = Entity.new( 'gt', '&gt;' )</div><div class='del'>-		# +&lt;+</div><div class='del'>-		LT = Entity.new( 'lt', '&lt;' )</div><div class='del'>-		# +&amp;+</div><div class='del'>-		AMP = Entity.new( 'amp', '&amp;' )</div><div class='del'>-		# +"+</div><div class='del'>-		QUOT = Entity.new( 'quot', '"' )</div><div class='del'>-		# +'+</div><div class='del'>-		APOS = Entity.new( 'apos', "'" )</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/formatters/default.rb b/lib/rexml/formatters/default.rb<br/>deleted file mode 100644<br/>index 77381bdf84..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/formatters/default.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/formatters/default.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,109 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Formatters</div><div class='del'>-    class Default</div><div class='del'>-      # Prints out the XML document with no formatting -- except if id_hack is</div><div class='del'>-      # set.</div><div class='del'>-      #</div><div class='del'>-      # ie_hack::</div><div class='del'>-      #   If set to true, then inserts whitespace before the close of an empty</div><div class='del'>-      #   tag, so that IE's bad XML parser doesn't choke.</div><div class='del'>-      def initialize( ie_hack=false )</div><div class='del'>-        @ie_hack = ie_hack</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Writes the node to some output.</div><div class='del'>-      #</div><div class='del'>-      # node::</div><div class='del'>-      #   The node to write</div><div class='del'>-      # output::</div><div class='del'>-      #   A class implementing &lt;TT&gt;&amp;lt;&amp;lt;&lt;/TT&gt;.  Pass in an Output object to</div><div class='del'>-      #   change the output encoding.</div><div class='del'>-      def write( node, output )</div><div class='del'>-        case node</div><div class='del'>-</div><div class='del'>-        when Document </div><div class='del'>-          if node.xml_decl.encoding != "UTF-8" &amp;&amp; !output.kind_of?(Output)</div><div class='del'>-            output = Output.new( output, node.xml_decl.encoding )</div><div class='del'>-          end</div><div class='del'>-          write_document( node, output )</div><div class='del'>-</div><div class='del'>-        when Element</div><div class='del'>-          write_element( node, output )</div><div class='del'>-</div><div class='del'>-        when Declaration, ElementDecl, NotationDecl, ExternalEntity, Entity,</div><div class='del'>-             Attribute, AttlistDecl</div><div class='del'>-          node.write( output,-1 )</div><div class='del'>-</div><div class='del'>-        when Instruction</div><div class='del'>-          write_instruction( node, output )</div><div class='del'>-</div><div class='del'>-        when DocType, XMLDecl</div><div class='del'>-          node.write( output )</div><div class='del'>-</div><div class='del'>-        when Comment</div><div class='del'>-          write_comment( node, output )</div><div class='del'>-</div><div class='del'>-        when CData</div><div class='del'>-          write_cdata( node, output )</div><div class='del'>-</div><div class='del'>-        when Text</div><div class='del'>-          write_text( node, output )</div><div class='del'>-</div><div class='del'>-        else</div><div class='del'>-          raise Exception.new("XML FORMATTING ERROR")</div><div class='del'>-</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      protected</div><div class='del'>-      def write_document( node, output )</div><div class='del'>-        node.children.each { |child| write( child, output ) }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_element( node, output )</div><div class='del'>-        output &lt;&lt; "&lt;#{node.expanded_name}"</div><div class='del'>-</div><div class='del'>-        node.attributes.each_attribute do |attr|</div><div class='del'>-          output &lt;&lt; " "</div><div class='del'>-          attr.write( output )</div><div class='del'>-        end unless node.attributes.empty?</div><div class='del'>-</div><div class='del'>-        if node.children.empty?</div><div class='del'>-          output &lt;&lt; " " if @ie_hack</div><div class='del'>-          output &lt;&lt; "/" </div><div class='del'>-        else</div><div class='del'>-          output &lt;&lt; "&gt;"</div><div class='del'>-          node.children.each { |child|</div><div class='del'>-            write( child, output )</div><div class='del'>-          }</div><div class='del'>-          output &lt;&lt; "&lt;/#{node.expanded_name}"</div><div class='del'>-        end</div><div class='del'>-        output &lt;&lt; "&gt;"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_text( node, output )</div><div class='del'>-        output &lt;&lt; node.to_s()</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_comment( node, output )</div><div class='del'>-        output &lt;&lt; Comment::START</div><div class='del'>-        output &lt;&lt; node.to_s</div><div class='del'>-        output &lt;&lt; Comment::STOP</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_cdata( node, output )</div><div class='del'>-        output &lt;&lt; CData::START</div><div class='del'>-        output &lt;&lt; node.to_s</div><div class='del'>-        output &lt;&lt; CData::STOP</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_instruction( node, output )</div><div class='del'>-        output &lt;&lt; Instruction::START.sub(/\\/u, '')</div><div class='del'>-        output &lt;&lt; node.target</div><div class='del'>-        output &lt;&lt; ' '</div><div class='del'>-        output &lt;&lt; node.content</div><div class='del'>-        output &lt;&lt; Instruction::STOP.sub(/\\/u, '')</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/lib/rexml/formatters/pretty.rb b/lib/rexml/formatters/pretty.rb<br/>deleted file mode 100644<br/>index d21175d34a..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/formatters/pretty.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/formatters/pretty.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,137 +0,0 @@</div><div class='del'>-require 'rexml/formatters/default'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Formatters</div><div class='del'>-    # Pretty-prints an XML document.  This destroys whitespace in text nodes</div><div class='del'>-    # and will insert carriage returns and indentations.</div><div class='del'>-    #</div><div class='del'>-    # TODO: Add an option to print attributes on new lines</div><div class='del'>-    class Pretty &lt; Default</div><div class='del'>-</div><div class='del'>-      # If compact is set to true, then the formatter will attempt to use as</div><div class='del'>-      # little space as possible</div><div class='del'>-      attr_accessor :compact</div><div class='del'>-      # The width of a page.  Used for formatting text</div><div class='del'>-      attr_accessor :width</div><div class='del'>-</div><div class='del'>-      # Create a new pretty printer.</div><div class='del'>-      #</div><div class='del'>-      # output::</div><div class='del'>-      #   An object implementing '&lt;&lt;(String)', to which the output will be written.</div><div class='del'>-      # indentation::</div><div class='del'>-      #   An integer greater than 0.  The indentation of each level will be</div><div class='del'>-      #   this number of spaces.  If this is &lt; 1, the behavior of this object</div><div class='del'>-      #   is undefined.  Defaults to 2.</div><div class='del'>-      # ie_hack::</div><div class='del'>-      #   If true, the printer will insert whitespace before closing empty</div><div class='del'>-      #   tags, thereby allowing Internet Explorer's feeble XML parser to</div><div class='del'>-      #   function. Defaults to false.</div><div class='del'>-      def initialize( indentation=2, ie_hack=false )</div><div class='del'>-        @indentation = indentation</div><div class='del'>-        @level = 0</div><div class='del'>-        @ie_hack = ie_hack</div><div class='del'>-        @width = 80</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      protected</div><div class='del'>-      def write_element(node, output)</div><div class='del'>-        output &lt;&lt; ' '*@level</div><div class='del'>-        output &lt;&lt; "&lt;#{node.expanded_name}"</div><div class='del'>-</div><div class='del'>-        node.attributes.each_attribute do |attr|</div><div class='del'>-          output &lt;&lt; " "</div><div class='del'>-          attr.write( output )</div><div class='del'>-        end unless node.attributes.empty?</div><div class='del'>-</div><div class='del'>-        if node.children.empty?</div><div class='del'>-          if @ie_hack</div><div class='del'>-            output &lt;&lt; " "</div><div class='del'>-          end</div><div class='del'>-          output &lt;&lt; "/" </div><div class='del'>-        else</div><div class='del'>-          output &lt;&lt; "&gt;"</div><div class='del'>-          # If compact and all children are text, and if the formatted output</div><div class='del'>-          # is less than the specified width, then try to print everything on</div><div class='del'>-          # one line</div><div class='del'>-          skip = false</div><div class='del'>-          if compact</div><div class='del'>-            if node.children.inject(true) {|s,c| s &amp; c.kind_of?(Text)}</div><div class='del'>-              string = ""</div><div class='del'>-              old_level = @level</div><div class='del'>-              @level = 0</div><div class='del'>-              node.children.each { |child| write( child, string ) }</div><div class='del'>-              @level = old_level</div><div class='del'>-              if string.length &lt; @width</div><div class='del'>-                output &lt;&lt; string</div><div class='del'>-                skip = true</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          unless skip</div><div class='del'>-            output &lt;&lt; "\n"</div><div class='del'>-            @level += @indentation</div><div class='del'>-            node.children.each { |child|</div><div class='del'>-              next if child.kind_of?(Text) and child.to_s.strip.length == 0</div><div class='del'>-              write( child, output )</div><div class='del'>-              output &lt;&lt; "\n"</div><div class='del'>-            }</div><div class='del'>-            @level -= @indentation</div><div class='del'>-            output &lt;&lt; ' '*@level</div><div class='del'>-          end</div><div class='del'>-          output &lt;&lt; "&lt;/#{node.expanded_name}"</div><div class='del'>-        end</div><div class='del'>-        output &lt;&lt; "&gt;"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_text( node, output )</div><div class='del'>-        s = node.to_s()</div><div class='del'>-        s.gsub!(/\s/,' ')</div><div class='del'>-        s.squeeze!(" ")</div><div class='del'>-        s = wrap(s, 80-@level)</div><div class='del'>-        s = indent_text(s, @level, " ", true)</div><div class='del'>-        output &lt;&lt; (' '*@level + s)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_comment( node, output)</div><div class='del'>-        output &lt;&lt; ' ' * @level</div><div class='del'>-        super</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_cdata( node, output)</div><div class='del'>-        output &lt;&lt; ' ' * @level</div><div class='del'>-        super</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_document( node, output )</div><div class='del'>-        # Ok, this is a bit odd.  All XML documents have an XML declaration,</div><div class='del'>-        # but it may not write itself if the user didn't specifically add it,</div><div class='del'>-        # either through the API or in the input document.  If it doesn't write</div><div class='del'>-        # itself, then we don't need a carriage return... which makes this</div><div class='del'>-        # logic more complex.</div><div class='del'>-        node.children.each { |child|</div><div class='del'>-          next if child == node.children[-1] and child.instance_of?(Text)</div><div class='del'>-          unless child == node.children[0] or child.instance_of?(Text) or</div><div class='del'>-            (child == node.children[1] and !node.children[0].writethis)</div><div class='del'>-            output &lt;&lt; "\n"</div><div class='del'>-          end</div><div class='del'>-          write( child, output )</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def indent_text(string, level=1, style="\t", indentfirstline=true)</div><div class='del'>-        return string if level &lt; 0</div><div class='del'>-        string.gsub(/\n/, "\n#{style*level}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def wrap(string, width)</div><div class='del'>-        # Recursively wrap string at width.</div><div class='del'>-        return string if string.length &lt;= width</div><div class='del'>-        place = string.rindex(' ', width) # Position in string with last ' ' before cutoff</div><div class='del'>-        return string[0,place] + "\n" + wrap(string[place+1..-1], width)</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='del'>-</div><div class='head'>diff --git a/lib/rexml/formatters/transitive.rb b/lib/rexml/formatters/transitive.rb<br/>deleted file mode 100644<br/>index 1d80f21fbb..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/formatters/transitive.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/formatters/transitive.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-require 'rexml/formatters/pretty'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Formatters</div><div class='del'>-    # The Transitive formatter writes an XML document that parses to an</div><div class='del'>-    # identical document as the source document.  This means that no extra</div><div class='del'>-    # whitespace nodes are inserted, and whitespace within text nodes is</div><div class='del'>-    # preserved.  Within these constraints, the document is pretty-printed,</div><div class='del'>-    # with whitespace inserted into the metadata to introduce formatting.</div><div class='del'>-    #</div><div class='del'>-    # Note that this is only useful if the original XML is not already</div><div class='del'>-    # formatted.  Since this formatter does not alter whitespace nodes, the</div><div class='del'>-    # results of formatting already formatted XML will be odd.</div><div class='del'>-    class Transitive &lt; Default</div><div class='del'>-      def initialize( indentation=2 )</div><div class='del'>-        @indentation = indentation</div><div class='del'>-        @level = 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      protected</div><div class='del'>-      def write_element( node, output )</div><div class='del'>-        output &lt;&lt; "&lt;#{node.expanded_name}"</div><div class='del'>-</div><div class='del'>-        node.attributes.each_attribute do |attr|</div><div class='del'>-          output &lt;&lt; " "</div><div class='del'>-          attr.write( output )</div><div class='del'>-        end unless node.attributes.empty?</div><div class='del'>-</div><div class='del'>-        output &lt;&lt; "\n"</div><div class='del'>-        output &lt;&lt; ' '*@level</div><div class='del'>-        if node.children.empty?</div><div class='del'>-          output &lt;&lt; "/" </div><div class='del'>-        else</div><div class='del'>-          output &lt;&lt; "&gt;"</div><div class='del'>-          # If compact and all children are text, and if the formatted output</div><div class='del'>-          # is less than the specified width, then try to print everything on</div><div class='del'>-          # one line</div><div class='del'>-          skip = false</div><div class='del'>-          @level += @indentation</div><div class='del'>-          node.children.each { |child|</div><div class='del'>-            write( child, output )</div><div class='del'>-          }</div><div class='del'>-          @level -= @indentation</div><div class='del'>-          output &lt;&lt; "&lt;/#{node.expanded_name}"</div><div class='del'>-          output &lt;&lt; "\n"</div><div class='del'>-          output &lt;&lt; ' '*@level</div><div class='del'>-        end</div><div class='del'>-        output &lt;&lt; "&gt;"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def write_text( node, output )</div><div class='del'>-        output &lt;&lt; node.to_s()</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/lib/rexml/functions.rb b/lib/rexml/functions.rb<br/>deleted file mode 100644<br/>index fefc9ef940..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/functions.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/functions.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,382 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  # If you add a method, keep in mind two things:</div><div class='del'>-  # (1) the first argument will always be a list of nodes from which to</div><div class='del'>-  # filter.  In the case of context methods (such as position), the function</div><div class='del'>-  # should return an array with a value for each child in the array.</div><div class='del'>-  # (2) all method calls from XML will have "-" replaced with "_".</div><div class='del'>-  # Therefore, in XML, "local-name()" is identical (and actually becomes)</div><div class='del'>-  # "local_name()"</div><div class='del'>-  module Functions</div><div class='del'>-    @@context = nil</div><div class='del'>-    @@namespace_context = {}</div><div class='del'>-    @@variables = {}</div><div class='del'>-</div><div class='del'>-    def Functions::namespace_context=(x) ; @@namespace_context=x ; end</div><div class='del'>-    def Functions::variables=(x) ; @@variables=x ; end</div><div class='del'>-    def Functions::namespace_context ; @@namespace_context ; end</div><div class='del'>-    def Functions::variables ; @@variables ; end</div><div class='del'>-</div><div class='del'>-    def Functions::context=(value); @@context = value; end</div><div class='del'>-</div><div class='del'>-    def Functions::text( )</div><div class='del'>-      if @@context[:node].node_type == :element</div><div class='del'>-        return @@context[:node].find_all{|n| n.node_type == :text}.collect{|n| n.value}</div><div class='del'>-      elsif @@context[:node].node_type == :text</div><div class='del'>-        return @@context[:node].value</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 Functions::last( )</div><div class='del'>-      @@context[:size]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::position( )</div><div class='del'>-      @@context[:index]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::count( node_set )</div><div class='del'>-      node_set.size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Since REXML is non-validating, this method is not implemented as it</div><div class='del'>-    # requires a DTD</div><div class='del'>-    def Functions::id( object )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::local_name( node_set=nil )</div><div class='del'>-      get_namespace( node_set ) do |node|</div><div class='del'>-        return node.local_name </div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::namespace_uri( node_set=nil )</div><div class='del'>-      get_namespace( node_set ) {|node| node.namespace}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::name( node_set=nil )</div><div class='del'>-      get_namespace( node_set ) do |node| </div><div class='del'>-        node.expanded_name</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Helper method.</div><div class='del'>-    def Functions::get_namespace( node_set = nil )</div><div class='del'>-      if node_set == nil</div><div class='del'>-        yield @@context[:node] if defined? @@context[:node].namespace</div><div class='del'>-      else  </div><div class='del'>-        if node_set.respond_to? :each</div><div class='del'>-          node_set.each { |node| yield node if defined? node.namespace }</div><div class='del'>-        elsif node_set.respond_to? :namespace</div><div class='del'>-          yield node_set</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # A node-set is converted to a string by returning the string-value of the</div><div class='del'>-    # node in the node-set that is first in document order. If the node-set is</div><div class='del'>-    # empty, an empty string is returned.</div><div class='del'>-    #</div><div class='del'>-    # A number is converted to a string as follows</div><div class='del'>-    #</div><div class='del'>-    # NaN is converted to the string NaN </div><div class='del'>-    #</div><div class='del'>-    # positive zero is converted to the string 0 </div><div class='del'>-    #</div><div class='del'>-    # negative zero is converted to the string 0 </div><div class='del'>-    #</div><div class='del'>-    # positive infinity is converted to the string Infinity </div><div class='del'>-    #</div><div class='del'>-    # negative infinity is converted to the string -Infinity </div><div class='del'>-    #</div><div class='del'>-    # if the number is an integer, the number is represented in decimal form</div><div class='del'>-    # as a Number with no decimal point and no leading zeros, preceded by a</div><div class='del'>-    # minus sign (-) if the number is negative</div><div class='del'>-    #</div><div class='del'>-    # otherwise, the number is represented in decimal form as a Number</div><div class='del'>-    # including a decimal point with at least one digit before the decimal</div><div class='del'>-    # point and at least one digit after the decimal point, preceded by a</div><div class='del'>-    # minus sign (-) if the number is negative; there must be no leading zeros</div><div class='del'>-    # before the decimal point apart possibly from the one required digit</div><div class='del'>-    # immediately before the decimal point; beyond the one required digit</div><div class='del'>-    # after the decimal point there must be as many, but only as many, more</div><div class='del'>-    # digits as are needed to uniquely distinguish the number from all other</div><div class='del'>-    # IEEE 754 numeric values.</div><div class='del'>-    #</div><div class='del'>-    # The boolean false value is converted to the string false. The boolean</div><div class='del'>-    # true value is converted to the string true.</div><div class='del'>-    #</div><div class='del'>-    # An object of a type other than the four basic types is converted to a</div><div class='del'>-    # string in a way that is dependent on that type.</div><div class='del'>-    def Functions::string( object=nil )</div><div class='del'>-      #object = @context unless object</div><div class='del'>-      if object.instance_of? Array</div><div class='del'>-        string( object[0] )</div><div class='del'>-      elsif defined? object.node_type</div><div class='del'>-        if object.node_type == :attribute</div><div class='del'>-          object.value</div><div class='del'>-        elsif object.node_type == :element || object.node_type == :document</div><div class='del'>-          string_value(object)</div><div class='del'>-        else</div><div class='del'>-          object.to_s</div><div class='del'>-        end</div><div class='del'>-      elsif object.nil?</div><div class='del'>-        return ""</div><div class='del'>-      else</div><div class='del'>-        object.to_s</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::string_value( o )</div><div class='del'>-      rv = ""</div><div class='del'>-      o.children.each { |e|</div><div class='del'>-        if e.node_type == :text</div><div class='del'>-          rv &lt;&lt; e.to_s</div><div class='del'>-        elsif e.node_type == :element</div><div class='del'>-          rv &lt;&lt; string_value( e )</div><div class='del'>-        end</div><div class='del'>-      }</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::concat( *objects )</div><div class='del'>-      objects.join</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Fixed by Mike Stok</div><div class='del'>-    def Functions::starts_with( string, test )</div><div class='del'>-      string(string).index(string(test)) == 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Fixed by Mike Stok</div><div class='del'>-    def Functions::contains( string, test )</div><div class='del'>-      string(string).include?(string(test))</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Kouhei fixed this </div><div class='del'>-    def Functions::substring_before( string, test )</div><div class='del'>-      ruby_string = string(string)</div><div class='del'>-      ruby_index = ruby_string.index(string(test))</div><div class='del'>-      if ruby_index.nil?</div><div class='del'>-        ""</div><div class='del'>-      else</div><div class='del'>-        ruby_string[ 0...ruby_index ]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>- </div><div class='del'>-    # Kouhei fixed this too</div><div class='del'>-    def Functions::substring_after( string, test )</div><div class='del'>-      ruby_string = string(string)</div><div class='del'>-      test_string = string(test)</div><div class='del'>-      return $1 if ruby_string =~ /#{test}(.*)/</div><div class='del'>-      ""</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Take equal portions of Mike Stok and Sean Russell; mix </div><div class='del'>-    # vigorously, and pour into a tall, chilled glass.  Serves 10,000.</div><div class='del'>-    def Functions::substring( string, start, length=nil )</div><div class='del'>-      ruby_string = string(string)</div><div class='del'>-      ruby_length = if length.nil? </div><div class='del'>-                      ruby_string.length.to_f</div><div class='del'>-                    else</div><div class='del'>-                      number(length)</div><div class='del'>-                    end</div><div class='del'>-      ruby_start = number(start)</div><div class='del'>-</div><div class='del'>-      # Handle the special cases</div><div class='del'>-      return '' if (</div><div class='del'>-        ruby_length.nan? or </div><div class='del'>-        ruby_start.nan? or</div><div class='del'>-        ruby_start.infinite?</div><div class='del'>-      )</div><div class='del'>-</div><div class='del'>-      infinite_length = ruby_length.infinite? == 1</div><div class='del'>-      ruby_length = ruby_string.length if infinite_length</div><div class='del'>-        </div><div class='del'>-      # Now, get the bounds.  The XPath bounds are 1..length; the ruby bounds </div><div class='del'>-      # are 0..length.  Therefore, we have to offset the bounds by one.</div><div class='del'>-      ruby_start = ruby_start.round - 1</div><div class='del'>-      ruby_length = ruby_length.round</div><div class='del'>-</div><div class='del'>-      if ruby_start &lt; 0</div><div class='del'>-       ruby_length += ruby_start unless infinite_length</div><div class='del'>-       ruby_start = 0</div><div class='del'>-      end</div><div class='del'>-      return '' if ruby_length &lt;= 0</div><div class='del'>-      ruby_string[ruby_start,ruby_length]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::string_length( string )</div><div class='del'>-      string(string).length</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::normalize_space( string=nil )</div><div class='del'>-      string = string(@@context[:node]) if string.nil?</div><div class='del'>-      if string.kind_of? Array</div><div class='del'>-        string.collect{|x| string.to_s.strip.gsub(/\s+/um, ' ') if string}</div><div class='del'>-      else</div><div class='del'>-        string.to_s.strip.gsub(/\s+/um, ' ')</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # This is entirely Mike Stok's beast</div><div class='del'>-    def Functions::translate( string, tr1, tr2 )</div><div class='del'>-      from = string(tr1)</div><div class='del'>-      to = string(tr2)</div><div class='del'>-</div><div class='del'>-      # the map is our translation table.</div><div class='del'>-      #</div><div class='del'>-      # if a character occurs more than once in the</div><div class='del'>-      # from string then we ignore the second &amp;</div><div class='del'>-      # subsequent mappings</div><div class='del'>-      #</div><div class='del'>-      # if a character maps to nil then we delete it</div><div class='del'>-      # in the output.  This happens if the from</div><div class='del'>-      # string is longer than the to string</div><div class='del'>-      #</div><div class='del'>-      # there's nothing about - or ^ being special in</div><div class='del'>-      # http://www.w3.org/TR/xpath#function-translate</div><div class='del'>-      # so we don't build ranges or negated classes</div><div class='del'>-</div><div class='del'>-      map = Hash.new</div><div class='del'>-      0.upto(from.length - 1) { |pos|</div><div class='del'>-        from_char = from[pos]</div><div class='del'>-        unless map.has_key? from_char</div><div class='del'>-          map[from_char] = </div><div class='del'>-          if pos &lt; to.length</div><div class='del'>-            to[pos]</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'>-</div><div class='del'>-      string(string).unpack('U*').collect { |c|</div><div class='del'>-        if map.has_key? c then map[c] else c end</div><div class='del'>-      }.compact.pack('U*')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::boolean( object=nil )</div><div class='del'>-      if object.kind_of? String</div><div class='del'>-        if object =~ /\d+/u</div><div class='del'>-          return object.to_f != 0</div><div class='del'>-        else</div><div class='del'>-          return object.size &gt; 0</div><div class='del'>-        end</div><div class='del'>-      elsif object.kind_of? Array</div><div class='del'>-        object = object.find{|x| x and true}</div><div class='del'>-      end</div><div class='del'>-      return object ? true : false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::not( object )</div><div class='del'>-      not boolean( object )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::true( )</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::false(  )</div><div class='del'>-      false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # UNTESTED</div><div class='del'>-    def Functions::lang( language )</div><div class='del'>-      lang = false</div><div class='del'>-      node = @@context[:node]</div><div class='del'>-      attr = nil</div><div class='del'>-      until node.nil?</div><div class='del'>-        if node.node_type == :element</div><div class='del'>-          attr = node.attributes["xml:lang"]</div><div class='del'>-          unless attr.nil?</div><div class='del'>-            lang = compare_language(string(language), attr)</div><div class='del'>-            break</div><div class='del'>-          else</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        node = node.parent</div><div class='del'>-      end</div><div class='del'>-      lang</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::compare_language lang1, lang2</div><div class='del'>-      lang2.downcase.index(lang1.downcase) == 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # a string that consists of optional whitespace followed by an optional</div><div class='del'>-    # minus sign followed by a Number followed by whitespace is converted to</div><div class='del'>-    # the IEEE 754 number that is nearest (according to the IEEE 754</div><div class='del'>-    # round-to-nearest rule) to the mathematical value represented by the</div><div class='del'>-    # string; any other string is converted to NaN</div><div class='del'>-    #</div><div class='del'>-    # boolean true is converted to 1; boolean false is converted to 0</div><div class='del'>-    #</div><div class='del'>-    # a node-set is first converted to a string as if by a call to the string</div><div class='del'>-    # function and then converted in the same way as a string argument</div><div class='del'>-    #</div><div class='del'>-    # an object of a type other than the four basic types is converted to a</div><div class='del'>-    # number in a way that is dependent on that type</div><div class='del'>-    def Functions::number( object=nil )</div><div class='del'>-      object = @@context[:node] unless object</div><div class='del'>-      case object</div><div class='del'>-      when true</div><div class='del'>-        Float(1)</div><div class='del'>-      when false</div><div class='del'>-        Float(0)</div><div class='del'>-      when Array</div><div class='del'>-        number(string( object ))</div><div class='del'>-      when Numeric</div><div class='del'>-        object.to_f</div><div class='del'>-      else</div><div class='del'>-        str = string( object )</div><div class='del'>-        # If XPath ever gets scientific notation...</div><div class='del'>-        #if str =~ /^\s*-?(\d*\.?\d+|\d+\.)([Ee]\d*)?\s*$/</div><div class='del'>-        if str =~ /^\s*-?(\d*\.?\d+|\d+\.)\s*$/</div><div class='del'>-          str.to_f</div><div class='del'>-        else</div><div class='del'>-          (0.0 / 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'>-    def Functions::sum( nodes )</div><div class='del'>-      nodes = [nodes] unless nodes.kind_of? Array</div><div class='del'>-      nodes.inject(0) { |r,n| r += number(string(n)) }</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def Functions::floor( number )</div><div class='del'>-      number(number).floor</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::ceiling( number )</div><div class='del'>-      number(number).ceil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::round( number )</div><div class='del'>-      begin</div><div class='del'>-        number(number).round</div><div class='del'>-      rescue FloatDomainError</div><div class='del'>-        number(number)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::processing_instruction( node )</div><div class='del'>-      node.node_type == :processing_instruction</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def Functions::method_missing( id )</div><div class='del'>-      puts "METHOD MISSING #{id.id2name}"</div><div class='del'>-      XPath.match( @@context[:node], id.id2name )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/instruction.rb b/lib/rexml/instruction.rb<br/>deleted file mode 100644<br/>index c16b894b4a..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/instruction.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/instruction.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,70 +0,0 @@</div><div class='del'>-require "rexml/child"</div><div class='del'>-require "rexml/source"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	# Represents an XML Instruction; IE, &lt;? ... ?&gt;</div><div class='del'>-	# TODO: Add parent arg (3rd arg) to constructor</div><div class='del'>-	class Instruction &lt; Child</div><div class='del'>-		START = '&lt;\?'</div><div class='del'>-		STOP = '\?&gt;'</div><div class='del'>-</div><div class='del'>-		# target is the "name" of the Instruction; IE, the "tag" in &lt;?tag ...?&gt;</div><div class='del'>-		# content is everything else.</div><div class='del'>-		attr_accessor :target, :content</div><div class='del'>-</div><div class='del'>-		# Constructs a new Instruction</div><div class='del'>-		# @param target can be one of a number of things.  If String, then </div><div class='del'>-		# the target of this instruction is set to this.  If an Instruction,</div><div class='del'>-		# then the Instruction is shallowly cloned (target and content are</div><div class='del'>-		# copied).  If a Source, then the source is scanned and parsed for</div><div class='del'>-		# an Instruction declaration.</div><div class='del'>-		# @param content Must be either a String, or a Parent.  Can only</div><div class='del'>-		# be a Parent if the target argument is a Source.  Otherwise, this</div><div class='del'>-		# String is set as the content of this instruction.</div><div class='del'>-		def initialize(target, content=nil)</div><div class='del'>-			if target.kind_of? String</div><div class='del'>-				super()</div><div class='del'>-				@target = target</div><div class='del'>-				@content = content</div><div class='del'>-			elsif target.kind_of? Instruction</div><div class='del'>-				super(content)</div><div class='del'>-				@target = target.target</div><div class='del'>-				@content = target.content</div><div class='del'>-			end</div><div class='del'>-			@content.strip! if @content</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def clone</div><div class='del'>-			Instruction.new self</div><div class='del'>-		end</div><div class='del'>-		</div><div class='del'>-    # == DEPRECATED</div><div class='del'>-    # See the rexml/formatters package</div><div class='del'>-    #</div><div class='del'>-		def write writer, indent=-1, transitive=false, ie_hack=false</div><div class='del'>-      Kernel.warn( "#{self.class.name}.write is deprecated" )</div><div class='del'>-			indent(writer, indent)</div><div class='del'>-			writer &lt;&lt; START.sub(/\\/u, '')</div><div class='del'>-			writer &lt;&lt; @target</div><div class='del'>-			writer &lt;&lt; ' '</div><div class='del'>-			writer &lt;&lt; @content</div><div class='del'>-			writer &lt;&lt; STOP.sub(/\\/u, '')</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# @return true if other is an Instruction, and the content and target</div><div class='del'>-		# of the other matches the target and content of this object.</div><div class='del'>-		def ==( other )</div><div class='del'>-			other.kind_of? Instruction and</div><div class='del'>-			other.target == @target and</div><div class='del'>-			other.content == @content</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    def node_type</div><div class='del'>-      :processing_instruction</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      "&lt;?p-i #{target} ...?&gt;"</div><div class='del'>-    end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/light/node.rb b/lib/rexml/light/node.rb<br/>deleted file mode 100644<br/>index 943ec5f1a0..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/light/node.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/light/node.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,196 +0,0 @@</div><div class='del'>-require 'rexml/xmltokens'</div><div class='del'>-require 'rexml/light/node'</div><div class='del'>-</div><div class='del'>-# [ :element, parent, name, attributes, children* ]</div><div class='del'>-	# a = Node.new</div><div class='del'>-	# a &lt;&lt; "B"		# =&gt; &lt;a&gt;B&lt;/a&gt;</div><div class='del'>-	# a.b			# =&gt; &lt;a&gt;B&lt;b/&gt;&lt;/a&gt;</div><div class='del'>-	# a.b[1]			# =&gt; &lt;a&gt;B&lt;b/&gt;&lt;b/&gt;&lt;a&gt;</div><div class='del'>-	# a.b[1]["x"] = "y"	# =&gt; &lt;a&gt;B&lt;b/&gt;&lt;b x="y"/&gt;&lt;/a&gt;</div><div class='del'>-	# a.b[0].c		# =&gt; &lt;a&gt;B&lt;b&gt;&lt;c/&gt;&lt;/b&gt;&lt;b x="y"/&gt;&lt;/a&gt;</div><div class='del'>-	# a.b.c &lt;&lt; "D"		# =&gt; &lt;a&gt;B&lt;b&gt;&lt;c&gt;D&lt;/c&gt;&lt;/b&gt;&lt;b x="y"/&gt;&lt;/a&gt;</div><div class='del'>-module REXML</div><div class='del'>-	module Light</div><div class='del'>-		# Represents a tagged XML element.  Elements are characterized by</div><div class='del'>-		# having children, attributes, and names, and can themselves be</div><div class='del'>-		# children.</div><div class='del'>-		class Node</div><div class='del'>-			NAMESPLIT = /^(?:(#{XMLTokens::NCNAME_STR}):)?(#{XMLTokens::NCNAME_STR})/u</div><div class='del'>-			PARENTS = [ :element, :document, :doctype ]</div><div class='del'>-			# Create a new element.</div><div class='del'>-			def initialize node=nil</div><div class='del'>-				@node = node</div><div class='del'>-				if node.kind_of? String</div><div class='del'>-					node = [ :text, node ]</div><div class='del'>-				elsif node.nil?</div><div class='del'>-					node = [ :document, nil, nil ]</div><div class='del'>-				elsif node[0] == :start_element</div><div class='del'>-					node[0] = :element</div><div class='del'>-				elsif node[0] == :start_doctype</div><div class='del'>-					node[0] = :doctype</div><div class='del'>-				elsif node[0] == :start_document</div><div class='del'>-					node[0] = :document</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def size</div><div class='del'>-				if PARENTS.include? @node[0]</div><div class='del'>-					@node[-1].size</div><div class='del'>-				else</div><div class='del'>-					0</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def each( &amp;block )</div><div class='del'>-				size.times { |x| yield( at(x+4) ) }</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def name</div><div class='del'>-				at(2)</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def name=( name_str, ns=nil )</div><div class='del'>-				pfx = ''</div><div class='del'>-				pfx = "#{prefix(ns)}:" if ns</div><div class='del'>-				_old_put(2, "#{pfx}#{name_str}")</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def parent=( node )</div><div class='del'>-				_old_put(1,node)</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def local_name</div><div class='del'>-				namesplit</div><div class='del'>-				@name</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def local_name=( name_str )</div><div class='del'>-				_old_put( 1, "#@prefix:#{name_str}" )</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def prefix( namespace=nil )</div><div class='del'>-				prefix_of( self, namespace )</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def namespace( prefix=prefix() )</div><div class='del'>-				namespace_of( self, prefix )</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def namespace=( namespace )</div><div class='del'>-				@prefix = prefix( namespace )</div><div class='del'>-				pfx = ''</div><div class='del'>-				pfx = "#@prefix:" if @prefix.size &gt; 0</div><div class='del'>-				_old_put(1, "#{pfx}#@name")</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def []( reference, ns=nil )</div><div class='del'>-				if reference.kind_of? String</div><div class='del'>-					pfx = ''</div><div class='del'>-					pfx = "#{prefix(ns)}:" if ns</div><div class='del'>-					at(3)["#{pfx}#{reference}"]</div><div class='del'>-				elsif reference.kind_of? Range</div><div class='del'>-					_old_get( Range.new(4+reference.begin, reference.end, reference.exclude_end?) )</div><div class='del'>-				else</div><div class='del'>-					_old_get( 4+reference )</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def =~( path )</div><div class='del'>-				XPath.match( self, path )</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			# Doesn't handle namespaces yet</div><div class='del'>-			def []=( reference, ns, value=nil )</div><div class='del'>-				if reference.kind_of? String</div><div class='del'>-					value = ns unless value</div><div class='del'>-					at( 3 )[reference] = value</div><div class='del'>-				elsif reference.kind_of? Range</div><div class='del'>-					_old_put( Range.new(3+reference.begin, reference.end, reference.exclude_end?), ns )</div><div class='del'>-				else</div><div class='del'>-					if value</div><div class='del'>-						_old_put( 4+reference, ns, value )</div><div class='del'>-					else</div><div class='del'>-						_old_put( 4+reference, ns )</div><div class='del'>-					end</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			# Append a child to this element, optionally under a provided namespace.</div><div class='del'>-			# The namespace argument is ignored if the element argument is an Element</div><div class='del'>-			# object.  Otherwise, the element argument is a string, the namespace (if</div><div class='del'>-			# provided) is the namespace the element is created in.</div><div class='del'>-			def &lt;&lt; element</div><div class='del'>-				if node_type() == :text</div><div class='del'>-					at(-1) &lt;&lt; element</div><div class='del'>-				else</div><div class='del'>-					newnode = Node.new( element )</div><div class='del'>-					newnode.parent = self</div><div class='del'>-					self.push( newnode )</div><div class='del'>-				end</div><div class='del'>-				at(-1)</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def node_type</div><div class='del'>-				_old_get(0)</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def text=( foo )</div><div class='del'>-				replace = at(4).kind_of?(String)? 1 : 0</div><div class='del'>-				self._old_put(4,replace, normalizefoo)</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def root</div><div class='del'>-				context = self</div><div class='del'>-				context = context.at(1) while context.at(1)</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def has_name?( name, namespace = '' )</div><div class='del'>-				at(3) == name and namespace() == namespace</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def children</div><div class='del'>-				self</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def parent</div><div class='del'>-				at(1)</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def to_s</div><div class='del'>-</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			private</div><div class='del'>-</div><div class='del'>-			def namesplit</div><div class='del'>-				return if @name.defined?</div><div class='del'>-				at(2) =~ NAMESPLIT</div><div class='del'>-				@prefix = '' || $1</div><div class='del'>-				@name = $2</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def namespace_of( node, prefix=nil )</div><div class='del'>-				if not prefix</div><div class='del'>-					name = at(2)</div><div class='del'>-					name =~ NAMESPLIT</div><div class='del'>-					prefix = $1</div><div class='del'>-				end</div><div class='del'>-				to_find = 'xmlns'</div><div class='del'>-				to_find = "xmlns:#{prefix}" if not prefix.nil?</div><div class='del'>-				ns = at(3)[ to_find ]</div><div class='del'>-				ns ? ns : namespace_of( @node[0], prefix )</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def prefix_of( node, namespace=nil )</div><div class='del'>-				if not namespace</div><div class='del'>-					name = node.name</div><div class='del'>-					name =~ NAMESPLIT</div><div class='del'>-					$1</div><div class='del'>-				else</div><div class='del'>-					ns = at(3).find { |k,v| v == namespace }</div><div class='del'>-					ns ? ns : prefix_of( node.parent, namespace )</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/lib/rexml/namespace.rb b/lib/rexml/namespace.rb<br/>deleted file mode 100644<br/>index 3e8790580b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/namespace.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/namespace.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,47 +0,0 @@</div><div class='del'>-require 'rexml/xmltokens'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	# Adds named attributes to an object.</div><div class='del'>-	module Namespace</div><div class='del'>-		# The name of the object, valid if set</div><div class='del'>-		attr_reader :name, :expanded_name</div><div class='del'>-		# The expanded name of the object, valid if name is set</div><div class='del'>-		attr_accessor :prefix</div><div class='del'>-		include XMLTokens</div><div class='del'>-		NAMESPLIT = /^(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})/u</div><div class='del'>-</div><div class='del'>-		# Sets the name and the expanded name</div><div class='del'>-		def name=( name )</div><div class='del'>-			@expanded_name = name</div><div class='del'>-			name =~ NAMESPLIT</div><div class='del'>-			if $1</div><div class='del'>-				@prefix = $1</div><div class='del'>-			else</div><div class='del'>-				@prefix = ""</div><div class='del'>-				@namespace = ""</div><div class='del'>-			end</div><div class='del'>-			@name = $2</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Compares names optionally WITH namespaces</div><div class='del'>-		def has_name?( other, ns=nil )</div><div class='del'>-			if ns</div><div class='del'>-				return (namespace() == ns and name() == other)</div><div class='del'>-			elsif other.include? ":"</div><div class='del'>-				return fully_expanded_name == other</div><div class='del'>-			else</div><div class='del'>-				return name == other</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		alias :local_name :name</div><div class='del'>-</div><div class='del'>-		# Fully expand the name, even if the prefix wasn't specified in the</div><div class='del'>-		# source file.</div><div class='del'>-		def fully_expanded_name</div><div class='del'>-			ns = prefix</div><div class='del'>-			return "#{ns}:#@name" if ns.size &gt; 0 </div><div class='del'>-			return @name</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/node.rb b/lib/rexml/node.rb<br/>deleted file mode 100644<br/>index d5e8456e53..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/node.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/node.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,75 +0,0 @@</div><div class='del'>-require "rexml/parseexception"</div><div class='del'>-require "rexml/formatters/pretty"</div><div class='del'>-require "rexml/formatters/default"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	# Represents a node in the tree.  Nodes are never encountered except as</div><div class='del'>-	# superclasses of other objects.  Nodes have siblings.</div><div class='del'>-	module Node</div><div class='del'>-		# @return the next sibling (nil if unset)</div><div class='del'>-		def next_sibling_node</div><div class='del'>-			return nil if @parent.nil?</div><div class='del'>-			@parent[ @parent.index(self) + 1 ]</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# @return the previous sibling (nil if unset)</div><div class='del'>-		def previous_sibling_node</div><div class='del'>-			return nil if @parent.nil?</div><div class='del'>-			ind = @parent.index(self)</div><div class='del'>-			return nil if ind == 0</div><div class='del'>-			@parent[ ind - 1 ]</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    # indent::</div><div class='del'>-    #   *DEPRECATED* This parameter is now ignored.  See the formatters in the</div><div class='del'>-    #   REXML::Formatters package for changing the output style.</div><div class='del'>-		def to_s indent=nil</div><div class='del'>-      unless indent.nil?</div><div class='del'>-        Kernel.warn( "#{self.class.name}.to_s(indent) parameter is deprecated" )</div><div class='del'>-        f = REXML::Formatters::Pretty.new( indent )</div><div class='del'>-        f.write( self, rv = "" )</div><div class='del'>-      else</div><div class='del'>-        f = REXML::Formatters::Default.new</div><div class='del'>-        f.write( self, rv = "" )</div><div class='del'>-      end</div><div class='del'>-      return rv</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def indent to, ind</div><div class='del'>- 			if @parent and @parent.context and not @parent.context[:indentstyle].nil? then</div><div class='del'>- 				indentstyle = @parent.context[:indentstyle]</div><div class='del'>- 			else</div><div class='del'>- 				indentstyle = '  '</div><div class='del'>- 			end</div><div class='del'>- 			to &lt;&lt; indentstyle*ind unless ind&lt;1</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def parent?</div><div class='del'>-			false;</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-		# Visit all subnodes of +self+ recursively</div><div class='del'>-		def each_recursive(&amp;block) # :yields: node</div><div class='del'>-			self.elements.each {|node|</div><div class='del'>-				block.call(node)</div><div class='del'>-				node.each_recursive(&amp;block)</div><div class='del'>-			}</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Find (and return) first subnode (recursively) for which the block </div><div class='del'>-    # evaluates to true. Returns +nil+ if none was found.</div><div class='del'>-		def find_first_recursive(&amp;block) # :yields: node</div><div class='del'>-      each_recursive {|node|</div><div class='del'>-        return node if block.call(node)</div><div class='del'>-      }</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the position that +self+ holds in its parent's array, indexed</div><div class='del'>-    # from 1.</div><div class='del'>-    def index_in_parent</div><div class='del'>-      parent.index(self)+1</div><div class='del'>-    end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/output.rb b/lib/rexml/output.rb<br/>deleted file mode 100644<br/>index be4d23d42d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/output.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/output.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,24 +0,0 @@</div><div class='del'>-require 'rexml/encoding'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	class Output</div><div class='del'>-		include Encoding</div><div class='del'>-    </div><div class='del'>-    attr_reader :encoding</div><div class='del'>-</div><div class='del'>-		def initialize real_IO, encd="iso-8859-1"</div><div class='del'>-			@output = real_IO</div><div class='del'>-			self.encoding = encd</div><div class='del'>-</div><div class='del'>-			@to_utf = encd == UTF_8 ? false : true</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def &lt;&lt;( content )</div><div class='del'>-			@output &lt;&lt; (@to_utf ? self.encode(content) : content)</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      "Output[#{encoding}]"</div><div class='del'>-    end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/parent.rb b/lib/rexml/parent.rb<br/>deleted file mode 100644<br/>index a20aaaef6b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parent.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parent.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,166 +0,0 @@</div><div class='del'>-require "rexml/child"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  # A parent has children, and has methods for accessing them.  The Parent</div><div class='del'>-  # class is never encountered except as the superclass for some other</div><div class='del'>-  # object.</div><div class='del'>-  class Parent &lt; Child</div><div class='del'>-    include Enumerable</div><div class='del'>-    </div><div class='del'>-    # Constructor</div><div class='del'>-    # @param parent if supplied, will be set as the parent of this object</div><div class='del'>-    def initialize parent=nil</div><div class='del'>-      super(parent)</div><div class='del'>-      @children = []</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def add( object )</div><div class='del'>-      #puts "PARENT GOTS #{size} CHILDREN"</div><div class='del'>-      object.parent = self</div><div class='del'>-      @children &lt;&lt; object</div><div class='del'>-      #puts "PARENT NOW GOTS #{size} CHILDREN"</div><div class='del'>-      object</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    alias :push :add</div><div class='del'>-    alias :&lt;&lt; :push</div><div class='del'>-    </div><div class='del'>-    def unshift( object )</div><div class='del'>-      object.parent = self</div><div class='del'>-      @children.unshift object</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def delete( object )</div><div class='del'>-      found = false</div><div class='del'>-      @children.delete_if {|c| c.equal?(object) and found = true }</div><div class='del'>-      object.parent = nil if found</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def each(&amp;block)</div><div class='del'>-      @children.each(&amp;block)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def delete_if( &amp;block )</div><div class='del'>-      @children.delete_if(&amp;block)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def delete_at( index )</div><div class='del'>-      @children.delete_at index</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def each_index( &amp;block )</div><div class='del'>-      @children.each_index(&amp;block)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Fetches a child at a given index</div><div class='del'>-    # @param index the Integer index of the child to fetch</div><div class='del'>-    def []( index )</div><div class='del'>-      @children[index]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    alias :each_child :each</div><div class='del'>-    </div><div class='del'>-    </div><div class='del'>-    </div><div class='del'>-    # Set an index entry.  See Array.[]=</div><div class='del'>-    # @param index the index of the element to set</div><div class='del'>-    # @param opt either the object to set, or an Integer length</div><div class='del'>-    # @param child if opt is an Integer, this is the child to set</div><div class='del'>-    # @return the parent (self)</div><div class='del'>-    def []=( *args )</div><div class='del'>-      args[-1].parent = self</div><div class='del'>-      @children[*args[0..-2]] = args[-1]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Inserts an child before another child</div><div class='del'>-    # @param child1 this is either an xpath or an Element.  If an Element,</div><div class='del'>-    # child2 will be inserted before child1 in the child list of the parent.</div><div class='del'>-    # If an xpath, child2 will be inserted before the first child to match</div><div class='del'>-    # the xpath.</div><div class='del'>-    # @param child2 the child to insert</div><div class='del'>-    # @return the parent (self)</div><div class='del'>-    def insert_before( child1, child2 )</div><div class='del'>-      if child1.kind_of? String</div><div class='del'>-        child1 = XPath.first( self, child1 )</div><div class='del'>-        child1.parent.insert_before child1, child2</div><div class='del'>-      else</div><div class='del'>-        ind = index(child1)</div><div class='del'>-        child2.parent.delete(child2) if child2.parent</div><div class='del'>-        @children[ind,0] = child2</div><div class='del'>-        child2.parent = self</div><div class='del'>-      end</div><div class='del'>-      self</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Inserts an child after another child</div><div class='del'>-    # @param child1 this is either an xpath or an Element.  If an Element,</div><div class='del'>-    # child2 will be inserted after child1 in the child list of the parent.</div><div class='del'>-    # If an xpath, child2 will be inserted after the first child to match</div><div class='del'>-    # the xpath.</div><div class='del'>-    # @param child2 the child to insert</div><div class='del'>-    # @return the parent (self)</div><div class='del'>-    def insert_after( child1, child2 )</div><div class='del'>-      if child1.kind_of? String</div><div class='del'>-        child1 = XPath.first( self, child1 )</div><div class='del'>-        child1.parent.insert_after child1, child2</div><div class='del'>-      else</div><div class='del'>-        ind = index(child1)+1</div><div class='del'>-        child2.parent.delete(child2) if child2.parent</div><div class='del'>-        @children[ind,0] = child2</div><div class='del'>-        child2.parent = 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 to_a</div><div class='del'>-      @children.dup</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Fetches the index of a given child</div><div class='del'>-    # @param child the child to get the index of</div><div class='del'>-    # @return the index of the child, or nil if the object is not a child</div><div class='del'>-    # of this parent.</div><div class='del'>-    def index( child )</div><div class='del'>-      count = -1</div><div class='del'>-      @children.find { |i| count += 1 ; i.hash == child.hash }</div><div class='del'>-      count</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # @return the number of children of this parent</div><div class='del'>-    def size</div><div class='del'>-      @children.size</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    alias :length :size</div><div class='del'>-    </div><div class='del'>-    # Replaces one child with another, making sure the nodelist is correct</div><div class='del'>-    # @param to_replace the child to replace (must be a Child)</div><div class='del'>-    # @param replacement the child to insert into the nodelist (must be a </div><div class='del'>-    # Child)</div><div class='del'>-    def replace_child( to_replace, replacement )</div><div class='del'>-      @children.map! {|c| c.equal?( to_replace ) ? replacement : c }</div><div class='del'>-      to_replace.parent = nil</div><div class='del'>-      replacement.parent = self</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    # Deeply clones this object.  This creates a complete duplicate of this</div><div class='del'>-    # Parent, including all descendants.</div><div class='del'>-    def deep_clone</div><div class='del'>-      cl = clone()</div><div class='del'>-      each do |child|</div><div class='del'>-        if child.kind_of? Parent</div><div class='del'>-          cl &lt;&lt; child.deep_clone</div><div class='del'>-        else</div><div class='del'>-          cl &lt;&lt; child.clone</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      cl</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    alias :children :to_a</div><div class='del'>-    </div><div class='del'>-    def parent?</div><div class='del'>-      true</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/parseexception.rb b/lib/rexml/parseexception.rb<br/>deleted file mode 100644<br/>index feb7a7e638..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parseexception.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parseexception.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,51 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  class ParseException &lt; RuntimeError</div><div class='del'>-    attr_accessor :source, :parser, :continued_exception</div><div class='del'>-</div><div class='del'>-    def initialize( message, source=nil, parser=nil, exception=nil )</div><div class='del'>-      super(message)</div><div class='del'>-      @source = source</div><div class='del'>-      @parser = parser</div><div class='del'>-      @continued_exception = exception</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def to_s</div><div class='del'>-      # Quote the original exception, if there was one</div><div class='del'>-      if @continued_exception</div><div class='del'>-        err = @continued_exception.inspect</div><div class='del'>-        err &lt;&lt; "\n"</div><div class='del'>-        err &lt;&lt; @continued_exception.backtrace.join("\n")</div><div class='del'>-        err &lt;&lt; "\n...\n"</div><div class='del'>-      else</div><div class='del'>-        err = ""</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Get the stack trace and error message</div><div class='del'>-      err &lt;&lt; super</div><div class='del'>-</div><div class='del'>-      # Add contextual information</div><div class='del'>-      if @source</div><div class='del'>-        err &lt;&lt; "\nLine: #{line}\n"</div><div class='del'>-        err &lt;&lt; "Position: #{position}\n"</div><div class='del'>-        err &lt;&lt; "Last 80 unconsumed characters:\n"</div><div class='del'>-        err &lt;&lt; @source.buffer[0..80].gsub(/\n/, ' ')</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      err</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def position</div><div class='del'>-      @source.current_line[0] if @source and defined? @source.current_line and</div><div class='del'>-      @source.current_line</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def line</div><div class='del'>-      @source.current_line[2] if @source and defined? @source.current_line and </div><div class='del'>-      @source.current_line</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def context</div><div class='del'>-      @source.current_line</div><div class='del'>-    end</div><div class='del'>-  end  </div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/parsers/baseparser.rb b/lib/rexml/parsers/baseparser.rb<br/>deleted file mode 100644<br/>index fc2354a67f..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parsers/baseparser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/baseparser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,503 +0,0 @@</div><div class='del'>-require 'rexml/parseexception'</div><div class='del'>-require 'rexml/undefinednamespaceexception'</div><div class='del'>-require 'rexml/source'</div><div class='del'>-require 'set'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Parsers</div><div class='del'>-    # = Using the Pull Parser</div><div class='del'>-    # &lt;em&gt;This API is experimental, and subject to change.&lt;/em&gt;</div><div class='del'>-    #  parser = PullParser.new( "&lt;a&gt;text&lt;b att='val'/&gt;txet&lt;/a&gt;" )</div><div class='del'>-    #  while parser.has_next?</div><div class='del'>-    #    res = parser.next</div><div class='del'>-    #    puts res[1]['att'] if res.start_tag? and res[0] == 'b'</div><div class='del'>-    #  end</div><div class='del'>-    # See the PullEvent class for information on the content of the results.</div><div class='del'>-    # The data is identical to the arguments passed for the various events to</div><div class='del'>-    # the StreamListener API.</div><div class='del'>-    #</div><div class='del'>-    # Notice that:</div><div class='del'>-    #  parser = PullParser.new( "&lt;a&gt;BAD DOCUMENT" )</div><div class='del'>-    #  while parser.has_next?</div><div class='del'>-    #    res = parser.next</div><div class='del'>-    #    raise res[1] if res.error?</div><div class='del'>-    #  end</div><div class='del'>-    #</div><div class='del'>-    # Nat Price gave me some good ideas for the API.</div><div class='del'>-    class BaseParser</div><div class='del'>-      NCNAME_STR= '[\w:][\-\w\d.]*'</div><div class='del'>-      NAME_STR= "(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})"</div><div class='del'>-      UNAME_STR= "(?:#{NCNAME_STR}:)?#{NCNAME_STR}"</div><div class='del'>-</div><div class='del'>-      NAMECHAR = '[\-\w\d\.:]'</div><div class='del'>-      NAME = "([\\w:]#{NAMECHAR}*)"</div><div class='del'>-      NMTOKEN = "(?:#{NAMECHAR})+"</div><div class='del'>-      NMTOKENS = "#{NMTOKEN}(\\s+#{NMTOKEN})*"</div><div class='del'>-      REFERENCE = "(?:&amp;#{NAME};|&amp;#\\d+;|&amp;#x[0-9a-fA-F]+;)"</div><div class='del'>-      REFERENCE_RE = /#{REFERENCE}/</div><div class='del'>-</div><div class='del'>-      DOCTYPE_START = /\A\s*&lt;!DOCTYPE\s/um</div><div class='del'>-      DOCTYPE_PATTERN = /\s*&lt;!DOCTYPE\s+(.*?)(\[|&gt;)/um</div><div class='del'>-      ATTRIBUTE_PATTERN = /\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\4/um</div><div class='del'>-      COMMENT_START = /\A&lt;!--/u</div><div class='del'>-      COMMENT_PATTERN = /&lt;!--(.*?)--&gt;/um</div><div class='del'>-      CDATA_START = /\A&lt;!\[CDATA\[/u</div><div class='del'>-      CDATA_END = /^\s*\]\s*&gt;/um</div><div class='del'>-      CDATA_PATTERN = /&lt;!\[CDATA\[(.*?)\]\]&gt;/um</div><div class='del'>-      XMLDECL_START = /\A&lt;\?xml\s/u;</div><div class='del'>-      XMLDECL_PATTERN = /&lt;\?xml\s+(.*?)\?&gt;/um</div><div class='del'>-      INSTRUCTION_START = /\A&lt;\?/u</div><div class='del'>-      INSTRUCTION_PATTERN = /&lt;\?(.*?)(\s+.*?)?\?&gt;/um</div><div class='del'>-      TAG_MATCH = /^&lt;((?&gt;#{NAME_STR}))\s*((?&gt;\s+#{UNAME_STR}\s*=\s*(["']).*?\5)*)\s*(\/)?&gt;/um</div><div class='del'>-      CLOSE_MATCH = /^\s*&lt;\/(#{NAME_STR})\s*&gt;/um</div><div class='del'>-</div><div class='del'>-      VERSION = /\bversion\s*=\s*["'](.*?)['"]/um</div><div class='del'>-      ENCODING = /\bencoding\s*=\s*["'](.*?)['"]/um</div><div class='del'>-      STANDALONE = /\bstandalone\s*=\s["'](.*?)['"]/um</div><div class='del'>-</div><div class='del'>-      ENTITY_START = /^\s*&lt;!ENTITY/</div><div class='del'>-      IDENTITY = /^([!\*\w\-]+)(\s+#{NCNAME_STR})?(\s+["'](.*?)['"])?(\s+['"](.*?)["'])?/u</div><div class='del'>-      ELEMENTDECL_START = /^\s*&lt;!ELEMENT/um</div><div class='del'>-      ELEMENTDECL_PATTERN = /^\s*(&lt;!ELEMENT.*?)&gt;/um</div><div class='del'>-      SYSTEMENTITY = /^\s*(%.*?;)\s*$/um</div><div class='del'>-      ENUMERATION = "\\(\\s*#{NMTOKEN}(?:\\s*\\|\\s*#{NMTOKEN})*\\s*\\)"</div><div class='del'>-      NOTATIONTYPE = "NOTATION\\s+\\(\\s*#{NAME}(?:\\s*\\|\\s*#{NAME})*\\s*\\)"</div><div class='del'>-      ENUMERATEDTYPE = "(?:(?:#{NOTATIONTYPE})|(?:#{ENUMERATION}))"</div><div class='del'>-      ATTTYPE = "(CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS|#{ENUMERATEDTYPE})"</div><div class='del'>-      ATTVALUE = "(?:\"((?:[^&lt;&amp;\"]|#{REFERENCE})*)\")|(?:'((?:[^&lt;&amp;']|#{REFERENCE})*)')"</div><div class='del'>-      DEFAULTDECL = "(#REQUIRED|#IMPLIED|(?:(#FIXED\\s+)?#{ATTVALUE}))"</div><div class='del'>-      ATTDEF = "\\s+#{NAME}\\s+#{ATTTYPE}\\s+#{DEFAULTDECL}"</div><div class='del'>-      ATTDEF_RE = /#{ATTDEF}/</div><div class='del'>-      ATTLISTDECL_START = /^\s*&lt;!ATTLIST/um</div><div class='del'>-      ATTLISTDECL_PATTERN = /^\s*&lt;!ATTLIST\s+#{NAME}(?:#{ATTDEF})*\s*&gt;/um</div><div class='del'>-      NOTATIONDECL_START = /^\s*&lt;!NOTATION/um</div><div class='del'>-      PUBLIC = /^\s*&lt;!NOTATION\s+(\w[\-\w]*)\s+(PUBLIC)\s+(["'])(.*?)\3(?:\s+(["'])(.*?)\5)?\s*&gt;/um</div><div class='del'>-      SYSTEM = /^\s*&lt;!NOTATION\s+(\w[\-\w]*)\s+(SYSTEM)\s+(["'])(.*?)\3\s*&gt;/um</div><div class='del'>-</div><div class='del'>-      TEXT_PATTERN = /\A([^&lt;]*)/um</div><div class='del'>-</div><div class='del'>-      # Entity constants</div><div class='del'>-      PUBIDCHAR = "\x20\x0D\x0Aa-zA-Z0-9\\-()+,./:=?;!*@$_%#"</div><div class='del'>-      SYSTEMLITERAL = %Q{((?:"[^"]*")|(?:'[^']*'))}</div><div class='del'>-      PUBIDLITERAL = %Q{("[#{PUBIDCHAR}']*"|'[#{PUBIDCHAR}]*')}</div><div class='del'>-      EXTERNALID = "(?:(?:(SYSTEM)\\s+#{SYSTEMLITERAL})|(?:(PUBLIC)\\s+#{PUBIDLITERAL}\\s+#{SYSTEMLITERAL}))"</div><div class='del'>-      NDATADECL = "\\s+NDATA\\s+#{NAME}"</div><div class='del'>-      PEREFERENCE = "%#{NAME};"</div><div class='del'>-      ENTITYVALUE = %Q{((?:"(?:[^%&amp;"]|#{PEREFERENCE}|#{REFERENCE})*")|(?:'([^%&amp;']|#{PEREFERENCE}|#{REFERENCE})*'))}</div><div class='del'>-      PEDEF = "(?:#{ENTITYVALUE}|#{EXTERNALID})"</div><div class='del'>-      ENTITYDEF = "(?:#{ENTITYVALUE}|(?:#{EXTERNALID}(#{NDATADECL})?))"</div><div class='del'>-      PEDECL = "&lt;!ENTITY\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*&gt;"</div><div class='del'>-      GEDECL = "&lt;!ENTITY\\s+#{NAME}\\s+#{ENTITYDEF}\\s*&gt;"</div><div class='del'>-      ENTITYDECL = /\s*(?:#{GEDECL})|(?:#{PEDECL})/um</div><div class='del'>-</div><div class='del'>-      EREFERENCE = /&amp;(?!#{NAME};)/</div><div class='del'>-</div><div class='del'>-      DEFAULT_ENTITIES = { </div><div class='del'>-        'gt' =&gt; [/&amp;gt;/, '&amp;gt;', '&gt;', /&gt;/], </div><div class='del'>-        'lt' =&gt; [/&amp;lt;/, '&amp;lt;', '&lt;', /&lt;/], </div><div class='del'>-        'quot' =&gt; [/&amp;quot;/, '&amp;quot;', '"', /"/], </div><div class='del'>-        "apos" =&gt; [/&amp;apos;/, "&amp;apos;", "'", /'/] </div><div class='del'>-      }</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      ######################################################################</div><div class='del'>-      # These are patterns to identify common markup errors, to make the</div><div class='del'>-      # error messages more informative.</div><div class='del'>-      ######################################################################</div><div class='del'>-      MISSING_ATTRIBUTE_QUOTES = /^&lt;#{NAME_STR}\s+#{NAME_STR}\s*=\s*[^"']/um</div><div class='del'>-</div><div class='del'>-      def initialize( source )</div><div class='del'>-        self.stream = source</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_listener( listener )</div><div class='del'>-        if !defined?(@listeners) or !@listeners</div><div class='del'>-          @listeners = []</div><div class='del'>-          instance_eval &lt;&lt;-EOL</div><div class='del'>-            alias :_old_pull :pull</div><div class='del'>-            def pull</div><div class='del'>-              event = _old_pull</div><div class='del'>-              @listeners.each do |listener|</div><div class='del'>-                listener.receive event</div><div class='del'>-              end</div><div class='del'>-              event</div><div class='del'>-            end</div><div class='del'>-          EOL</div><div class='del'>-        end</div><div class='del'>-        @listeners &lt;&lt; listener</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :source</div><div class='del'>-</div><div class='del'>-      def stream=( source )</div><div class='del'>-        @source = SourceFactory.create_from( source )</div><div class='del'>-        @closed = nil</div><div class='del'>-        @document_status = nil</div><div class='del'>-        @tags = []</div><div class='del'>-        @stack = []</div><div class='del'>-        @entities = []</div><div class='del'>-        @nsstack = []</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def position</div><div class='del'>-        if @source.respond_to? :position</div><div class='del'>-          @source.position</div><div class='del'>-        else</div><div class='del'>-          # FIXME</div><div class='del'>-          0</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Returns true if there are no more events</div><div class='del'>-      def empty?</div><div class='del'>-        return (@source.empty? and @stack.empty?)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Returns true if there are more events.  Synonymous with !empty?</div><div class='del'>-      def has_next?</div><div class='del'>-        return !(@source.empty? and @stack.empty?)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Push an event back on the head of the stream.  This method</div><div class='del'>-      # has (theoretically) infinite depth.</div><div class='del'>-      def unshift token</div><div class='del'>-        @stack.unshift(token)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Peek at the +depth+ event in the stack.  The first element on the stack</div><div class='del'>-      # is at depth 0.  If +depth+ is -1, will parse to the end of the input</div><div class='del'>-      # stream and return the last event, which is always :end_document.</div><div class='del'>-      # Be aware that this causes the stream to be parsed up to the +depth+ </div><div class='del'>-      # event, so you can effectively pre-parse the entire document (pull the </div><div class='del'>-      # entire thing into memory) using this method.  </div><div class='del'>-      def peek depth=0</div><div class='del'>-        raise %Q[Illegal argument "#{depth}"] if depth &lt; -1</div><div class='del'>-        temp = []</div><div class='del'>-        if depth == -1</div><div class='del'>-          temp.push(pull()) until empty?</div><div class='del'>-        else</div><div class='del'>-          while @stack.size+temp.size &lt; depth+1</div><div class='del'>-            temp.push(pull())</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        @stack += temp if temp.size &gt; 0</div><div class='del'>-        @stack[depth]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Returns the next event.  This is a +PullEvent+ object.</div><div class='del'>-      def pull</div><div class='del'>-        if @closed</div><div class='del'>-          x, @closed = @closed, nil</div><div class='del'>-          return [ :end_element, x ]</div><div class='del'>-        end</div><div class='del'>-        return [ :end_document ] if empty?</div><div class='del'>-        return @stack.shift if @stack.size &gt; 0</div><div class='del'>-        #STDERR.puts @source.encoding</div><div class='del'>-        @source.read if @source.buffer.size&lt;2</div><div class='del'>-        #STDERR.puts "BUFFER = #{@source.buffer.inspect}"</div><div class='del'>-        if @document_status == nil</div><div class='del'>-          #@source.consume( /^\s*/um )</div><div class='del'>-          word = @source.match( /^((?:\s+)|(?:&lt;[^&gt;]*&gt;))/um )</div><div class='del'>-          word = word[1] unless word.nil?</div><div class='del'>-          #STDERR.puts "WORD = #{word.inspect}"</div><div class='del'>-          case word</div><div class='del'>-          when COMMENT_START</div><div class='del'>-            return [ :comment, @source.match( COMMENT_PATTERN, true )[1] ]</div><div class='del'>-          when XMLDECL_START</div><div class='del'>-            #STDERR.puts "XMLDECL"</div><div class='del'>-            results = @source.match( XMLDECL_PATTERN, true )[1]</div><div class='del'>-            version = VERSION.match( results )</div><div class='del'>-            version = version[1] unless version.nil?</div><div class='del'>-            encoding = ENCODING.match(results)</div><div class='del'>-            encoding = encoding[1] unless encoding.nil?</div><div class='del'>-            @source.encoding = encoding</div><div class='del'>-            standalone = STANDALONE.match(results)</div><div class='del'>-            standalone = standalone[1] unless standalone.nil?</div><div class='del'>-            return [ :xmldecl, version, encoding, standalone ]</div><div class='del'>-          when INSTRUCTION_START</div><div class='del'>-            return [ :processing_instruction, *@source.match(INSTRUCTION_PATTERN, true)[1,2] ]</div><div class='del'>-          when DOCTYPE_START</div><div class='del'>-            md = @source.match( DOCTYPE_PATTERN, true )</div><div class='del'>-            @nsstack.unshift(curr_ns=Set.new)</div><div class='del'>-            identity = md[1]</div><div class='del'>-            close = md[2]</div><div class='del'>-            identity =~ IDENTITY</div><div class='del'>-            name = $1</div><div class='del'>-            raise REXML::ParseException.new("DOCTYPE is missing a name") if name.nil?</div><div class='del'>-            pub_sys = $2.nil? ? nil : $2.strip</div><div class='del'>-            long_name = $4.nil? ? nil : $4.strip</div><div class='del'>-            uri = $6.nil? ? nil : $6.strip</div><div class='del'>-            args = [ :start_doctype, name, pub_sys, long_name, uri ]</div><div class='del'>-            if close == "&gt;"</div><div class='del'>-              @document_status = :after_doctype</div><div class='del'>-              @source.read if @source.buffer.size&lt;2</div><div class='del'>-              md = @source.match(/^\s*/um, true)</div><div class='del'>-              @stack &lt;&lt; [ :end_doctype ]</div><div class='del'>-            else</div><div class='del'>-              @document_status = :in_doctype</div><div class='del'>-            end</div><div class='del'>-            return args</div><div class='del'>-          when /^\s+/</div><div class='del'>-          else</div><div class='del'>-            @document_status = :after_doctype</div><div class='del'>-            @source.read if @source.buffer.size&lt;2</div><div class='del'>-            md = @source.match(/\s*/um, true)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if @document_status == :in_doctype</div><div class='del'>-          md = @source.match(/\s*(.*?&gt;)/um)</div><div class='del'>-          case md[1]</div><div class='del'>-          when SYSTEMENTITY </div><div class='del'>-            match = @source.match( SYSTEMENTITY, true )[1]</div><div class='del'>-            return [ :externalentity, match ]</div><div class='del'>-</div><div class='del'>-          when ELEMENTDECL_START</div><div class='del'>-            return [ :elementdecl, @source.match( ELEMENTDECL_PATTERN, true )[1] ]</div><div class='del'>-</div><div class='del'>-          when ENTITY_START</div><div class='del'>-            match = @source.match( ENTITYDECL, true ).to_a.compact</div><div class='del'>-            match[0] = :entitydecl</div><div class='del'>-            ref = false</div><div class='del'>-            if match[1] == '%'</div><div class='del'>-              ref = true</div><div class='del'>-              match.delete_at 1</div><div class='del'>-            end</div><div class='del'>-            # Now we have to sort out what kind of entity reference this is</div><div class='del'>-            if match[2] == 'SYSTEM'</div><div class='del'>-              # External reference</div><div class='del'>-              match[3] = match[3][1..-2] # PUBID</div><div class='del'>-              match.delete_at(4) if match.size &gt; 4 # Chop out NDATA decl</div><div class='del'>-              # match is [ :entity, name, SYSTEM, pubid(, ndata)? ]</div><div class='del'>-            elsif match[2] == 'PUBLIC'</div><div class='del'>-              # External reference</div><div class='del'>-              match[3] = match[3][1..-2] # PUBID</div><div class='del'>-              match[4] = match[4][1..-2] # HREF</div><div class='del'>-              # match is [ :entity, name, PUBLIC, pubid, href ]</div><div class='del'>-            else</div><div class='del'>-              match[2] = match[2][1..-2]</div><div class='del'>-              match.pop if match.size == 4</div><div class='del'>-              # match is [ :entity, name, value ]</div><div class='del'>-            end</div><div class='del'>-            match &lt;&lt; '%' if ref</div><div class='del'>-            return match</div><div class='del'>-          when ATTLISTDECL_START</div><div class='del'>-            md = @source.match( ATTLISTDECL_PATTERN, true )</div><div class='del'>-            raise REXML::ParseException.new( "Bad ATTLIST declaration!", @source ) if md.nil?</div><div class='del'>-            element = md[1]</div><div class='del'>-            contents = md[0]</div><div class='del'>-</div><div class='del'>-            pairs = {}</div><div class='del'>-            values = md[0].scan( ATTDEF_RE )</div><div class='del'>-            values.each do |attdef|</div><div class='del'>-              unless attdef[3] == "#IMPLIED"</div><div class='del'>-                attdef.compact!</div><div class='del'>-                val = attdef[3]</div><div class='del'>-                val = attdef[4] if val == "#FIXED "</div><div class='del'>-                pairs[attdef[0]] = val</div><div class='del'>-                if attdef[0] =~ /^xmlns:(.*)/</div><div class='del'>-                  @nsstack[0] &lt;&lt; $1</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            return [ :attlistdecl, element, pairs, contents ]</div><div class='del'>-          when NOTATIONDECL_START</div><div class='del'>-            md = nil</div><div class='del'>-            if @source.match( PUBLIC )</div><div class='del'>-              md = @source.match( PUBLIC, true )</div><div class='del'>-              vals = [md[1],md[2],md[4],md[6]]</div><div class='del'>-            elsif @source.match( SYSTEM )</div><div class='del'>-              md = @source.match( SYSTEM, true )</div><div class='del'>-              vals = [md[1],md[2],nil,md[4]]</div><div class='del'>-            else</div><div class='del'>-              raise REXML::ParseException.new( "error parsing notation: no matching pattern", @source )</div><div class='del'>-            end</div><div class='del'>-            return [ :notationdecl, *vals ]</div><div class='del'>-          when CDATA_END</div><div class='del'>-            @document_status = :after_doctype</div><div class='del'>-            @source.match( CDATA_END, true )</div><div class='del'>-            return [ :end_doctype ]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        begin</div><div class='del'>-          if @source.buffer[0] == ?&lt;</div><div class='del'>-            if @source.buffer[1] == ?/</div><div class='del'>-              @nsstack.shift</div><div class='del'>-              last_tag = @tags.pop</div><div class='del'>-              #md = @source.match_to_consume( '&gt;', CLOSE_MATCH)</div><div class='del'>-              md = @source.match( CLOSE_MATCH, true )</div><div class='del'>-              raise REXML::ParseException.new( "Missing end tag for "+</div><div class='del'>-                "'#{last_tag}' (got \"#{md[1]}\")", </div><div class='del'>-                @source) unless last_tag == md[1]</div><div class='del'>-              return [ :end_element, last_tag ]</div><div class='del'>-            elsif @source.buffer[1] == ?!</div><div class='del'>-              md = @source.match(/\A(\s*[^&gt;]*&gt;)/um)</div><div class='del'>-              #STDERR.puts "SOURCE BUFFER = #{source.buffer}, #{source.buffer.size}"</div><div class='del'>-              raise REXML::ParseException.new("Malformed node", @source) unless md</div><div class='del'>-              if md[0][2] == ?-</div><div class='del'>-                md = @source.match( COMMENT_PATTERN, true )</div><div class='del'>-                return [ :comment, md[1] ] if md</div><div class='del'>-              else</div><div class='del'>-                md = @source.match( CDATA_PATTERN, true )</div><div class='del'>-                return [ :cdata, md[1] ] if md</div><div class='del'>-              end</div><div class='del'>-              raise REXML::ParseException.new( "Declarations can only occur "+</div><div class='del'>-                "in the doctype declaration.", @source)</div><div class='del'>-            elsif @source.buffer[1] == ??</div><div class='del'>-              md = @source.match( INSTRUCTION_PATTERN, true )</div><div class='del'>-              return [ :processing_instruction, md[1], md[2] ] if md</div><div class='del'>-              raise REXML::ParseException.new( "Bad instruction declaration",</div><div class='del'>-                @source)</div><div class='del'>-            else</div><div class='del'>-              # Get the next tag</div><div class='del'>-              md = @source.match(TAG_MATCH, true)</div><div class='del'>-              unless md</div><div class='del'>-                # Check for missing attribute quotes</div><div class='del'>-                raise REXML::ParseException.new("missing attribute quote", @source) if @source.match(MISSING_ATTRIBUTE_QUOTES )</div><div class='del'>-                raise REXML::ParseException.new("malformed XML: missing tag start", @source) </div><div class='del'>-              end</div><div class='del'>-              attributes = {}</div><div class='del'>-              prefixes = Set.new</div><div class='del'>-              prefixes &lt;&lt; md[2] if md[2]</div><div class='del'>-              @nsstack.unshift(curr_ns=Set.new)</div><div class='del'>-              if md[4].size &gt; 0</div><div class='del'>-                attrs = md[4].scan( ATTRIBUTE_PATTERN )</div><div class='del'>-                raise REXML::ParseException.new( "error parsing attributes: [#{attrs.join ', '}], excess = \"#$'\"", @source) if $' and $'.strip.size &gt; 0</div><div class='del'>-                attrs.each { |a,b,c,d,e| </div><div class='del'>-                  if b == "xmlns"</div><div class='del'>-                    if c == "xml"</div><div class='del'>-                      if d != "http://www.w3.org/XML/1998/namespace"</div><div class='del'>-                        msg = "The 'xml' prefix must not be bound to any other namespace "+</div><div class='del'>-                        "(http://www.w3.org/TR/REC-xml-names/#ns-decl)"</div><div class='del'>-                        raise REXML::ParseException.new( msg, @source, self )</div><div class='del'>-                      end</div><div class='del'>-                    elsif c == "xmlns"</div><div class='del'>-                      msg = "The 'xmlns' prefix must not be declared "+</div><div class='del'>-                      "(http://www.w3.org/TR/REC-xml-names/#ns-decl)"</div><div class='del'>-                      raise REXML::ParseException.new( msg, @source, self)</div><div class='del'>-                    end</div><div class='del'>-                    curr_ns &lt;&lt; c</div><div class='del'>-                  elsif b</div><div class='del'>-                    prefixes &lt;&lt; b unless b == "xml"</div><div class='del'>-                  end</div><div class='del'>-                  attributes[a] = e </div><div class='del'>-                }</div><div class='del'>-              end</div><div class='del'>-        </div><div class='del'>-              # Verify that all of the prefixes have been defined</div><div class='del'>-              for prefix in prefixes</div><div class='del'>-                unless @nsstack.find{|k| k.member?(prefix)}</div><div class='del'>-                  raise UndefinedNamespaceException.new(prefix,@source,self)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              if md[6]</div><div class='del'>-                @closed = md[1]</div><div class='del'>-                @nsstack.shift</div><div class='del'>-              else</div><div class='del'>-                @tags.push( md[1] )</div><div class='del'>-              end</div><div class='del'>-              return [ :start_element, md[1], attributes ]</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            md = @source.match( TEXT_PATTERN, true )</div><div class='del'>-            if md[0].length == 0</div><div class='del'>-              @source.match( /(\s+)/, true )</div><div class='del'>-            end</div><div class='del'>-            #STDERR.puts "GOT #{md[1].inspect}" unless md[0].length == 0</div><div class='del'>-            #return [ :text, "" ] if md[0].length == 0</div><div class='del'>-            # unnormalized = Text::unnormalize( md[1], self )</div><div class='del'>-            # return PullEvent.new( :text, md[1], unnormalized )</div><div class='del'>-            return [ :text, md[1] ]</div><div class='del'>-          end</div><div class='del'>-        rescue REXML::UndefinedNamespaceException</div><div class='del'>-          raise</div><div class='del'>-        rescue REXML::ParseException</div><div class='del'>-          raise</div><div class='del'>-        rescue Exception, NameError =&gt; error</div><div class='del'>-          raise REXML::ParseException.new( "Exception parsing",</div><div class='del'>-            @source, self, (error ? error : $!) )</div><div class='del'>-        end</div><div class='del'>-        return [ :dummy ]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def entity( reference, entities )</div><div class='del'>-        value = nil</div><div class='del'>-        value = entities[ reference ] if entities</div><div class='del'>-        if not value</div><div class='del'>-          value = DEFAULT_ENTITIES[ reference ]</div><div class='del'>-          value = value[2] if value</div><div class='del'>-        end</div><div class='del'>-        unnormalize( value, entities ) if value</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Escapes all possible entities</div><div class='del'>-      def normalize( input, entities=nil, entity_filter=nil )</div><div class='del'>-        copy = input.clone</div><div class='del'>-        # Doing it like this rather than in a loop improves the speed</div><div class='del'>-        copy.gsub!( EREFERENCE, '&amp;amp;' )</div><div class='del'>-        entities.each do |key, value|</div><div class='del'>-          copy.gsub!( value, "&amp;#{key};" ) unless entity_filter and </div><div class='del'>-                                      entity_filter.include?(entity)</div><div class='del'>-        end if entities</div><div class='del'>-        copy.gsub!( EREFERENCE, '&amp;amp;' )</div><div class='del'>-        DEFAULT_ENTITIES.each do |key, value|</div><div class='del'>-          copy.gsub!( value[3], value[1] )</div><div class='del'>-        end</div><div class='del'>-        copy</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Unescapes all possible entities</div><div class='del'>-      def unnormalize( string, entities=nil, filter=nil )</div><div class='del'>-        rv = string.clone</div><div class='del'>-        rv.gsub!( /\r\n?/, "\n" )</div><div class='del'>-        matches = rv.scan( REFERENCE_RE )</div><div class='del'>-        return rv if matches.size == 0</div><div class='del'>-        rv.gsub!( /&amp;#0*((?:\d+)|(?:x[a-fA-F0-9]+));/ ) {|m|</div><div class='del'>-          m=$1</div><div class='del'>-          m = "0#{m}" if m[0] == ?x</div><div class='del'>-          [Integer(m)].pack('U*')</div><div class='del'>-        }</div><div class='del'>-        matches.collect!{|x|x[0]}.compact!</div><div class='del'>-        if matches.size &gt; 0</div><div class='del'>-          matches.each do |entity_reference|</div><div class='del'>-            unless filter and filter.include?(entity_reference)</div><div class='del'>-              entity_value = entity( entity_reference, entities )</div><div class='del'>-              if entity_value</div><div class='del'>-                re = /&amp;#{entity_reference};/</div><div class='del'>-                rv.gsub!( re, entity_value )</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          matches.each do |entity_reference|</div><div class='del'>-            unless filter and filter.include?(entity_reference)</div><div class='del'>-              er = DEFAULT_ENTITIES[entity_reference]</div><div class='del'>-              rv.gsub!( er[0], er[2] ) if er</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          rv.gsub!( /&amp;amp;/, '&amp;' )</div><div class='del'>-        end</div><div class='del'>-        rv</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'>-=begin</div><div class='del'>-  case event[0]</div><div class='del'>-  when :start_element</div><div class='del'>-  when :text</div><div class='del'>-  when :end_element</div><div class='del'>-  when :processing_instruction</div><div class='del'>-  when :cdata</div><div class='del'>-  when :comment</div><div class='del'>-  when :xmldecl</div><div class='del'>-  when :start_doctype</div><div class='del'>-  when :end_doctype</div><div class='del'>-  when :externalentity</div><div class='del'>-  when :elementdecl</div><div class='del'>-  when :entity</div><div class='del'>-  when :attlistdecl</div><div class='del'>-  when :notationdecl</div><div class='del'>-  when :end_doctype</div><div class='del'>-  end</div><div class='del'>-=end</div><div class='head'>diff --git a/lib/rexml/parsers/lightparser.rb b/lib/rexml/parsers/lightparser.rb<br/>deleted file mode 100644<br/>index 0f35034993..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parsers/lightparser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/lightparser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,60 +0,0 @@</div><div class='del'>-require 'rexml/parsers/streamparser'</div><div class='del'>-require 'rexml/parsers/baseparser'</div><div class='del'>-require 'rexml/light/node'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	module Parsers</div><div class='del'>-		class LightParser</div><div class='del'>-			def initialize stream</div><div class='del'>-				@stream = stream</div><div class='del'>-				@parser = REXML::Parsers::BaseParser.new( stream )</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-      def add_listener( listener )</div><div class='del'>-        @parser.add_listener( listener )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def rewind</div><div class='del'>-        @stream.rewind</div><div class='del'>-        @parser.stream = @stream</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-			def parse</div><div class='del'>-				root = context = [ :document ]</div><div class='del'>-				while true</div><div class='del'>-					event = @parser.pull</div><div class='del'>-					case event[0]</div><div class='del'>-					when :end_document</div><div class='del'>-						break</div><div class='del'>-					when :end_doctype</div><div class='del'>-						context = context[1]</div><div class='del'>-					when :start_element, :start_doctype</div><div class='del'>-						new_node = event</div><div class='del'>-						context &lt;&lt; new_node</div><div class='del'>-						new_node[1,0] = [context]</div><div class='del'>-						context = new_node</div><div class='del'>-					when :end_element, :end_doctype</div><div class='del'>-						context = context[1]</div><div class='del'>-					else</div><div class='del'>-						new_node = event</div><div class='del'>-						context &lt;&lt; new_node</div><div class='del'>-						new_node[1,0] = [context]</div><div class='del'>-					end</div><div class='del'>-				end</div><div class='del'>-				root</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# An element is an array.  The array contains:</div><div class='del'>-		#  0			The parent element</div><div class='del'>-		#  1			The tag name</div><div class='del'>-		#  2			A hash of attributes</div><div class='del'>-		#  3..-1	The child elements</div><div class='del'>-		# An element is an array of size &gt; 3</div><div class='del'>-		# Text is a String</div><div class='del'>-		# PIs are [ :processing_instruction, target, data ]</div><div class='del'>-		# Comments are [ :comment, data ]</div><div class='del'>-		# DocTypes are DocType structs</div><div class='del'>-		# The root is an array with XMLDecls, Text, DocType, Array, Text</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/parsers/pullparser.rb b/lib/rexml/parsers/pullparser.rb<br/>deleted file mode 100644<br/>index 36dc7160c3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parsers/pullparser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/pullparser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,196 +0,0 @@</div><div class='del'>-require 'forwardable'</div><div class='del'>-</div><div class='del'>-require 'rexml/parseexception'</div><div class='del'>-require 'rexml/parsers/baseparser'</div><div class='del'>-require 'rexml/xmltokens'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Parsers</div><div class='del'>-    # = Using the Pull Parser</div><div class='del'>-    # &lt;em&gt;This API is experimental, and subject to change.&lt;/em&gt;</div><div class='del'>-    #  parser = PullParser.new( "&lt;a&gt;text&lt;b att='val'/&gt;txet&lt;/a&gt;" )</div><div class='del'>-    #  while parser.has_next?</div><div class='del'>-    #    res = parser.next</div><div class='del'>-    #    puts res[1]['att'] if res.start_tag? and res[0] == 'b'</div><div class='del'>-    #  end</div><div class='del'>-    # See the PullEvent class for information on the content of the results.</div><div class='del'>-    # The data is identical to the arguments passed for the various events to</div><div class='del'>-    # the StreamListener API.</div><div class='del'>-    #</div><div class='del'>-    # Notice that:</div><div class='del'>-    #  parser = PullParser.new( "&lt;a&gt;BAD DOCUMENT" )</div><div class='del'>-    #  while parser.has_next?</div><div class='del'>-    #    res = parser.next</div><div class='del'>-    #    raise res[1] if res.error?</div><div class='del'>-    #  end</div><div class='del'>-    #</div><div class='del'>-    # Nat Price gave me some good ideas for the API.</div><div class='del'>-    class PullParser</div><div class='del'>-      include XMLTokens</div><div class='del'>-      extend Forwardable</div><div class='del'>-</div><div class='del'>-      def_delegators( :@parser, :has_next? )</div><div class='del'>-      def_delegators( :@parser, :entity )</div><div class='del'>-      def_delegators( :@parser, :empty? )</div><div class='del'>-      def_delegators( :@parser, :source )</div><div class='del'>-</div><div class='del'>-      def initialize stream</div><div class='del'>-        @entities = {}</div><div class='del'>-        @listeners = nil</div><div class='del'>-        @parser = BaseParser.new( stream )</div><div class='del'>-        @my_stack = []</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_listener( listener )</div><div class='del'>-        @listeners = [] unless @listeners</div><div class='del'>-        @listeners &lt;&lt; listener</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def each</div><div class='del'>-        while has_next?</div><div class='del'>-          yield self.pull</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def peek depth=0</div><div class='del'>-        if @my_stack.length &lt;= depth</div><div class='del'>-          (depth - @my_stack.length + 1).times {</div><div class='del'>-            e = PullEvent.new(@parser.pull)</div><div class='del'>-            @my_stack.push(e)</div><div class='del'>-          }</div><div class='del'>-        end</div><div class='del'>-        @my_stack[depth]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def pull</div><div class='del'>-        return @my_stack.shift if @my_stack.length &gt; 0</div><div class='del'>-</div><div class='del'>-        event = @parser.pull</div><div class='del'>-        case event[0]</div><div class='del'>-        when :entitydecl</div><div class='del'>-          @entities[ event[1] ] = </div><div class='del'>-            event[2] unless event[2] =~ /PUBLIC|SYSTEM/</div><div class='del'>-        when :text</div><div class='del'>-          unnormalized = @parser.unnormalize( event[1], @entities )</div><div class='del'>-          event &lt;&lt; unnormalized</div><div class='del'>-        end</div><div class='del'>-        PullEvent.new( event )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def unshift token</div><div class='del'>-        @my_stack.unshift token</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # A parsing event.  The contents of the event are accessed as an +Array?,</div><div class='del'>-    # and the type is given either by the ...? methods, or by accessing the</div><div class='del'>-    # +type+ accessor.  The contents of this object vary from event to event,</div><div class='del'>-    # but are identical to the arguments passed to +StreamListener+s for each</div><div class='del'>-    # event.</div><div class='del'>-    class PullEvent</div><div class='del'>-      # The type of this event.  Will be one of :tag_start, :tag_end, :text,</div><div class='del'>-      # :processing_instruction, :comment, :doctype, :attlistdecl, :entitydecl,</div><div class='del'>-      # :notationdecl, :entity, :cdata, :xmldecl, or :error.</div><div class='del'>-      def initialize(arg)</div><div class='del'>-        @contents = arg</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def []( start, endd=nil)</div><div class='del'>-        if start.kind_of? Range</div><div class='del'>-          @contents.slice( start.begin+1 .. start.end )</div><div class='del'>-        elsif start.kind_of? Numeric</div><div class='del'>-          if endd.nil?</div><div class='del'>-            @contents.slice( start+1 )</div><div class='del'>-          else</div><div class='del'>-            @contents.slice( start+1, endd )</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          raise "Illegal argument #{start.inspect} (#{start.class})"</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def event_type</div><div class='del'>-        @contents[0]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String tag_name, Hash attributes ]</div><div class='del'>-      def start_element?</div><div class='del'>-        @contents[0] == :start_element</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String tag_name ]</div><div class='del'>-      def end_element?</div><div class='del'>-        @contents[0] == :end_element</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String raw_text, String unnormalized_text ]</div><div class='del'>-      def text?</div><div class='del'>-        @contents[0] == :text</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String text ]</div><div class='del'>-      def instruction?</div><div class='del'>-        @contents[0] == :processing_instruction</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String text ]</div><div class='del'>-      def comment?</div><div class='del'>-        @contents[0] == :comment</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String name, String pub_sys, String long_name, String uri ]</div><div class='del'>-      def doctype?</div><div class='del'>-        @contents[0] == :start_doctype</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String text ]</div><div class='del'>-      def attlistdecl?</div><div class='del'>-        @contents[0] == :attlistdecl</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String text ]</div><div class='del'>-      def elementdecl?</div><div class='del'>-        @contents[0] == :elementdecl</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Due to the wonders of DTDs, an entity declaration can be just about</div><div class='del'>-      # anything.  There's no way to normalize it; you'll have to interpret the</div><div class='del'>-      # content yourself.  However, the following is true:</div><div class='del'>-      #</div><div class='del'>-      # * If the entity declaration is an internal entity:</div><div class='del'>-      #   [ String name, String value ]</div><div class='del'>-      # Content: [ String text ]</div><div class='del'>-      def entitydecl?</div><div class='del'>-        @contents[0] == :entitydecl</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String text ]</div><div class='del'>-      def notationdecl?</div><div class='del'>-        @contents[0] == :notationdecl</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String text ]</div><div class='del'>-      def entity?</div><div class='del'>-        @contents[0] == :entity</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String text ]</div><div class='del'>-      def cdata?</div><div class='del'>-        @contents[0] == :cdata</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Content: [ String version, String encoding, String standalone ]</div><div class='del'>-      def xmldecl?</div><div class='del'>-        @contents[0] == :xmldecl</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def error?</div><div class='del'>-        @contents[0] == :error</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def inspect</div><div class='del'>-        @contents[0].to_s + ": " + @contents[1..-1].inspect</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/lib/rexml/parsers/sax2parser.rb b/lib/rexml/parsers/sax2parser.rb<br/>deleted file mode 100644<br/>index e402eb7747..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parsers/sax2parser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/sax2parser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,238 +0,0 @@</div><div class='del'>-require 'rexml/parsers/baseparser'</div><div class='del'>-require 'rexml/parseexception'</div><div class='del'>-require 'rexml/namespace'</div><div class='del'>-require 'rexml/text'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	module Parsers</div><div class='del'>-    # SAX2Parser</div><div class='del'>-		class SAX2Parser</div><div class='del'>-			def initialize source</div><div class='del'>-				@parser = BaseParser.new(source)</div><div class='del'>-				@listeners = []</div><div class='del'>-				@procs = []</div><div class='del'>-				@namespace_stack = []</div><div class='del'>-				@has_listeners = false</div><div class='del'>-				@tag_stack = []</div><div class='del'>-        @entities = {}</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-      def source</div><div class='del'>-        @parser.source</div><div class='del'>-      end</div><div class='del'>-			</div><div class='del'>-      def add_listener( listener )</div><div class='del'>-        @parser.add_listener( listener )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-			# Listen arguments:</div><div class='del'>-			#</div><div class='del'>-			# Symbol, Array, Block</div><div class='del'>-			# 	Listen to Symbol events on Array elements</div><div class='del'>-			# Symbol, Block</div><div class='del'>-			#   Listen to Symbol events</div><div class='del'>-			# Array, Listener</div><div class='del'>-			# 	Listen to all events on Array elements</div><div class='del'>-			# Array, Block</div><div class='del'>-			# 	Listen to :start_element events on Array elements</div><div class='del'>-			# Listener</div><div class='del'>-			# 	Listen to All events</div><div class='del'>-			#</div><div class='del'>-			# Symbol can be one of: :start_element, :end_element,</div><div class='del'>-			# :start_prefix_mapping, :end_prefix_mapping, :characters,</div><div class='del'>-			# :processing_instruction, :doctype, :attlistdecl, :elementdecl,</div><div class='del'>-			# :entitydecl, :notationdecl, :cdata, :xmldecl, :comment</div><div class='del'>-      #</div><div class='del'>-      # There is an additional symbol that can be listened for: :progress.</div><div class='del'>-      # This will be called for every event generated, passing in the current </div><div class='del'>-      # stream position.</div><div class='del'>-			#</div><div class='del'>-			# Array contains regular expressions or strings which will be matched</div><div class='del'>-			# against fully qualified element names.</div><div class='del'>-			#</div><div class='del'>-			# Listener must implement the methods in SAX2Listener</div><div class='del'>-			#</div><div class='del'>-			# Block will be passed the same arguments as a SAX2Listener method would</div><div class='del'>-			# be, where the method name is the same as the matched Symbol.</div><div class='del'>-			# See the SAX2Listener for more information.</div><div class='del'>-			def listen( *args, &amp;blok )</div><div class='del'>-				if args[0].kind_of? Symbol</div><div class='del'>-					if args.size == 2</div><div class='del'>-						args[1].each { |match| @procs &lt;&lt; [args[0], match, blok] }</div><div class='del'>-					else</div><div class='del'>-						add( [args[0], nil, blok] )</div><div class='del'>-					end</div><div class='del'>-				elsif args[0].kind_of? Array</div><div class='del'>-					if args.size == 2</div><div class='del'>-						args[0].each { |match| add( [nil, match, args[1]] ) }</div><div class='del'>-					else</div><div class='del'>-						args[0].each { |match| add( [ :start_element, match, blok ] ) }</div><div class='del'>-					end</div><div class='del'>-				else</div><div class='del'>-					add([nil, nil, args[0]])</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-			</div><div class='del'>-			def deafen( listener=nil, &amp;blok )</div><div class='del'>-				if listener</div><div class='del'>-					@listeners.delete_if {|item| item[-1] == listener }</div><div class='del'>-					@has_listeners = false if @listeners.size == 0</div><div class='del'>-				else</div><div class='del'>-					@procs.delete_if {|item| item[-1] == blok }</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-			</div><div class='del'>-			def parse</div><div class='del'>-				@procs.each { |sym,match,block| block.call if sym == :start_document }</div><div class='del'>-				@listeners.each { |sym,match,block| </div><div class='del'>-					block.start_document if sym == :start_document or sym.nil?</div><div class='del'>-				}</div><div class='del'>-				root = context = []</div><div class='del'>-				while true</div><div class='del'>-					event = @parser.pull</div><div class='del'>-					case event[0]</div><div class='del'>-					when :end_document</div><div class='del'>-						handle( :end_document )</div><div class='del'>-						break</div><div class='del'>-          when :start_doctype</div><div class='del'>-            handle( :doctype, *event[1..-1])</div><div class='del'>-					when :end_doctype</div><div class='del'>-						context = context[1]</div><div class='del'>-					when :start_element</div><div class='del'>-						@tag_stack.push(event[1])</div><div class='del'>-						# find the observers for namespaces</div><div class='del'>-						procs = get_procs( :start_prefix_mapping, event[1] )</div><div class='del'>-						listeners = get_listeners( :start_prefix_mapping, event[1] )</div><div class='del'>-						if procs or listeners</div><div class='del'>-							# break out the namespace declarations</div><div class='del'>-							# The attributes live in event[2]</div><div class='del'>-							event[2].each {|n, v| event[2][n] = @parser.normalize(v)}</div><div class='del'>-							nsdecl = event[2].find_all { |n, value| n =~ /^xmlns(:|$)/ }</div><div class='del'>-							nsdecl.collect! { |n, value| [ n[6..-1], value ] }</div><div class='del'>-							@namespace_stack.push({})</div><div class='del'>-							nsdecl.each do |n,v|</div><div class='del'>-								@namespace_stack[-1][n] = v</div><div class='del'>-								# notify observers of namespaces</div><div class='del'>-								procs.each { |ob| ob.call( n, v ) } if procs</div><div class='del'>-								listeners.each { |ob| ob.start_prefix_mapping(n, v) } if listeners</div><div class='del'>-							end</div><div class='del'>-						end</div><div class='del'>-						event[1] =~ Namespace::NAMESPLIT</div><div class='del'>-						prefix = $1</div><div class='del'>-						local = $2</div><div class='del'>-						uri = get_namespace(prefix)</div><div class='del'>-						# find the observers for start_element</div><div class='del'>-						procs = get_procs( :start_element, event[1] )</div><div class='del'>-						listeners = get_listeners( :start_element, event[1] )</div><div class='del'>-						# notify observers</div><div class='del'>-						procs.each { |ob| ob.call( uri, local, event[1], event[2] ) } if procs</div><div class='del'>-						listeners.each { |ob| </div><div class='del'>-							ob.start_element( uri, local, event[1], event[2] ) </div><div class='del'>-						} if listeners</div><div class='del'>-					when :end_element</div><div class='del'>-						@tag_stack.pop</div><div class='del'>-						event[1] =~ Namespace::NAMESPLIT</div><div class='del'>-						prefix = $1</div><div class='del'>-						local = $2</div><div class='del'>-						uri = get_namespace(prefix)</div><div class='del'>-						# find the observers for start_element</div><div class='del'>-						procs = get_procs( :end_element, event[1] )</div><div class='del'>-						listeners = get_listeners( :end_element, event[1] )</div><div class='del'>-						# notify observers</div><div class='del'>-						procs.each { |ob| ob.call( uri, local, event[1] ) } if procs</div><div class='del'>-						listeners.each { |ob| </div><div class='del'>-							ob.end_element( uri, local, event[1] ) </div><div class='del'>-						} if listeners</div><div class='del'>-</div><div class='del'>-						namespace_mapping = @namespace_stack.pop</div><div class='del'>-						# find the observers for namespaces</div><div class='del'>-						procs = get_procs( :end_prefix_mapping, event[1] )</div><div class='del'>-						listeners = get_listeners( :end_prefix_mapping, event[1] )</div><div class='del'>-						if procs or listeners</div><div class='del'>-							namespace_mapping.each do |prefix, uri|</div><div class='del'>-								# notify observers of namespaces</div><div class='del'>-								procs.each { |ob| ob.call( prefix ) } if procs</div><div class='del'>-								listeners.each { |ob| ob.end_prefix_mapping(prefix) } if listeners</div><div class='del'>-							end</div><div class='del'>-						end</div><div class='del'>-					when :text</div><div class='del'>-            #normalized = @parser.normalize( event[1] )</div><div class='del'>-            #handle( :characters, normalized )</div><div class='del'>-            copy = event[1].clone</div><div class='del'>-            @entities.each { |key, value| copy = copy.gsub("&amp;#{key};", value) }</div><div class='del'>-            copy.gsub!( Text::NUMERICENTITY ) {|m|</div><div class='del'>-              m=$1</div><div class='del'>-              m = "0#{m}" if m[0] == ?x</div><div class='del'>-              [Integer(m)].pack('U*')</div><div class='del'>-            }</div><div class='del'>-            handle( :characters, copy )</div><div class='del'>-          when :entitydecl</div><div class='del'>-            @entities[ event[1] ] = event[2] if event.size == 3</div><div class='del'>-						handle( *event )</div><div class='del'>-					when :processing_instruction, :comment, :attlistdecl, </div><div class='del'>-						:elementdecl, :cdata, :notationdecl, :xmldecl</div><div class='del'>-						handle( *event )</div><div class='del'>-					end</div><div class='del'>-          handle( :progress, @parser.position )</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			private</div><div class='del'>-			def handle( symbol, *arguments )</div><div class='del'>-				tag = @tag_stack[-1]</div><div class='del'>-				procs = get_procs( symbol, tag )</div><div class='del'>-				listeners = get_listeners( symbol, tag )</div><div class='del'>-				# notify observers</div><div class='del'>-				procs.each { |ob| ob.call( *arguments ) } if procs</div><div class='del'>-				listeners.each { |l| </div><div class='del'>-					l.send( symbol.to_s, *arguments ) </div><div class='del'>-				} if listeners</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			# The following methods are duplicates, but it is faster than using</div><div class='del'>-			# a helper</div><div class='del'>-			def get_procs( symbol, name )</div><div class='del'>-				return nil if @procs.size == 0</div><div class='del'>-				@procs.find_all do |sym, match, block|</div><div class='del'>-          #puts sym.inspect+"=="+symbol.inspect+ "\t"+match.inspect+"=="+name.inspect+ "\t"+( (sym.nil? or symbol == sym) and ((name.nil? and match.nil?) or match.nil? or ( (name == match) or (match.kind_of? Regexp and name =~ match)))).to_s</div><div class='del'>-					(</div><div class='del'>-						(sym.nil? or symbol == sym) and </div><div class='del'>-						((name.nil? and match.nil?) or match.nil? or (</div><div class='del'>-							(name == match) or</div><div class='del'>-							(match.kind_of? Regexp and name =~ match)</div><div class='del'>-							)</div><div class='del'>-						)</div><div class='del'>-					)</div><div class='del'>-				end.collect{|x| x[-1]}</div><div class='del'>-			end</div><div class='del'>-			def get_listeners( symbol, name )</div><div class='del'>-				return nil if @listeners.size == 0</div><div class='del'>-				@listeners.find_all do |sym, match, block|</div><div class='del'>-					(</div><div class='del'>-						(sym.nil? or symbol == sym) and </div><div class='del'>-						((name.nil? and match.nil?) or match.nil? or (</div><div class='del'>-							(name == match) or</div><div class='del'>-							(match.kind_of? Regexp and name =~ match)</div><div class='del'>-							)</div><div class='del'>-						)</div><div class='del'>-					)</div><div class='del'>-				end.collect{|x| x[-1]}</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def add( pair )</div><div class='del'>-				if pair[-1].respond_to? :call</div><div class='del'>-					@procs &lt;&lt; pair unless @procs.include? pair</div><div class='del'>-				else</div><div class='del'>-					@listeners &lt;&lt; pair unless @listeners.include? pair</div><div class='del'>-					@has_listeners = true</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-			def get_namespace( prefix ) </div><div class='del'>-        uris = (@namespace_stack.find_all { |ns| not ns[prefix].nil? }) ||</div><div class='del'>-					(@namespace_stack.find { |ns| not ns[nil].nil? })</div><div class='del'>-				uris[-1][prefix] unless uris.nil? or 0 == uris.size</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/lib/rexml/parsers/streamparser.rb b/lib/rexml/parsers/streamparser.rb<br/>deleted file mode 100644<br/>index 256d0f611c..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parsers/streamparser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/streamparser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,46 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Parsers</div><div class='del'>-    class StreamParser</div><div class='del'>-      def initialize source, listener</div><div class='del'>-        @listener = listener</div><div class='del'>-        @parser = BaseParser.new( source )</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def add_listener( listener )</div><div class='del'>-        @parser.add_listener( listener )</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def parse</div><div class='del'>-        # entity string</div><div class='del'>-        while true</div><div class='del'>-          event = @parser.pull</div><div class='del'>-          case event[0]</div><div class='del'>-          when :end_document</div><div class='del'>-            return</div><div class='del'>-          when :start_element</div><div class='del'>-            attrs = event[2].each do |n, v|</div><div class='del'>-              event[2][n] = @parser.unnormalize( v )</div><div class='del'>-            end</div><div class='del'>-            @listener.tag_start( event[1], attrs )</div><div class='del'>-          when :end_element</div><div class='del'>-            @listener.tag_end( event[1] )</div><div class='del'>-          when :text</div><div class='del'>-            normalized = @parser.unnormalize( event[1] )</div><div class='del'>-            @listener.text( normalized )</div><div class='del'>-          when :processing_instruction</div><div class='del'>-            @listener.instruction( *event[1,2] )</div><div class='del'>-          when :start_doctype</div><div class='del'>-            @listener.doctype( *event[1..-1] )</div><div class='del'>-          when :end_doctype</div><div class='del'>-            # FIXME: remove this condition for milestone:3.2</div><div class='del'>-            @listener.doctype_end if @listener.respond_to? :doctype_end</div><div class='del'>-          when :comment, :attlistdecl, :cdata, :xmldecl, :elementdecl</div><div class='del'>-            @listener.send( event[0].to_s, *event[1..-1] )</div><div class='del'>-          when :entitydecl, :notationdecl</div><div class='del'>-            @listener.send( event[0].to_s, event[1..-1] )</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'>-end</div><div class='head'>diff --git a/lib/rexml/parsers/treeparser.rb b/lib/rexml/parsers/treeparser.rb<br/>deleted file mode 100644<br/>index 5c3e142ea7..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parsers/treeparser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/treeparser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,97 +0,0 @@</div><div class='del'>-require 'rexml/validation/validationexception'</div><div class='del'>-require 'rexml/undefinednamespaceexception'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Parsers</div><div class='del'>-    class TreeParser</div><div class='del'>-      def initialize( source, build_context = Document.new )</div><div class='del'>-        @build_context = build_context</div><div class='del'>-        @parser = Parsers::BaseParser.new( source )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_listener( listener )</div><div class='del'>-        @parser.add_listener( listener )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def parse</div><div class='del'>-        tag_stack = []</div><div class='del'>-        in_doctype = false</div><div class='del'>-        entities = nil</div><div class='del'>-        begin</div><div class='del'>-          while true</div><div class='del'>-            event = @parser.pull</div><div class='del'>-            #STDERR.puts "TREEPARSER GOT #{event.inspect}"</div><div class='del'>-            case event[0]</div><div class='del'>-            when :end_document</div><div class='del'>-              unless tag_stack.empty?</div><div class='del'>-                #raise ParseException.new("No close tag for #{tag_stack.inspect}")</div><div class='del'>-                raise ParseException.new("No close tag for #{@build_context.xpath}")</div><div class='del'>-              end</div><div class='del'>-              return</div><div class='del'>-            when :start_element</div><div class='del'>-              tag_stack.push(event[1])</div><div class='del'>-              el = @build_context = @build_context.add_element( event[1], event[2] )</div><div class='del'>-            when :end_element</div><div class='del'>-              tag_stack.pop</div><div class='del'>-              @build_context = @build_context.parent</div><div class='del'>-            when :text</div><div class='del'>-              if not in_doctype</div><div class='del'>-                if @build_context[-1].instance_of? Text</div><div class='del'>-                  @build_context[-1] &lt;&lt; event[1]</div><div class='del'>-                else</div><div class='del'>-                  @build_context.add( </div><div class='del'>-                    Text.new(event[1], @build_context.whitespace, nil, true) </div><div class='del'>-                  ) unless (</div><div class='del'>-                    @build_context.ignore_whitespace_nodes and</div><div class='del'>-                    event[1].strip.size==0</div><div class='del'>-                  )</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            when :comment</div><div class='del'>-              c = Comment.new( event[1] )</div><div class='del'>-              @build_context.add( c )</div><div class='del'>-            when :cdata</div><div class='del'>-              c = CData.new( event[1] )</div><div class='del'>-              @build_context.add( c )</div><div class='del'>-            when :processing_instruction</div><div class='del'>-              @build_context.add( Instruction.new( event[1], event[2] ) )</div><div class='del'>-            when :end_doctype</div><div class='del'>-              in_doctype = false</div><div class='del'>-              entities.each { |k,v| entities[k] = @build_context.entities[k].value }</div><div class='del'>-              @build_context = @build_context.parent</div><div class='del'>-            when :start_doctype</div><div class='del'>-              doctype = DocType.new( event[1..-1], @build_context )</div><div class='del'>-              @build_context = doctype</div><div class='del'>-              entities = {}</div><div class='del'>-              in_doctype = true</div><div class='del'>-            when :attlistdecl</div><div class='del'>-              n = AttlistDecl.new( event[1..-1] )</div><div class='del'>-              @build_context.add( n )</div><div class='del'>-            when :externalentity</div><div class='del'>-              n = ExternalEntity.new( event[1] )</div><div class='del'>-              @build_context.add( n )</div><div class='del'>-            when :elementdecl</div><div class='del'>-              n = ElementDecl.new( event[1] )</div><div class='del'>-              @build_context.add(n)</div><div class='del'>-            when :entitydecl</div><div class='del'>-              entities[ event[1] ] = event[2] unless event[2] =~ /PUBLIC|SYSTEM/</div><div class='del'>-              @build_context.add(Entity.new(event))</div><div class='del'>-            when :notationdecl</div><div class='del'>-              n = NotationDecl.new( *event[1..-1] )</div><div class='del'>-              @build_context.add( n )</div><div class='del'>-            when :xmldecl</div><div class='del'>-              x = XMLDecl.new( event[1], event[2], event[3] )</div><div class='del'>-              @build_context.add( x )</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        rescue REXML::Validation::ValidationException</div><div class='del'>-          raise</div><div class='del'>-        rescue REXML::UndefinedNamespaceException</div><div class='del'>-          raise</div><div class='del'>-        rescue</div><div class='del'>-          raise ParseException.new( $!.message, @parser.source, @parser, $! )</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/lib/rexml/parsers/ultralightparser.rb b/lib/rexml/parsers/ultralightparser.rb<br/>deleted file mode 100644<br/>index adc4af18e2..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parsers/ultralightparser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/ultralightparser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,56 +0,0 @@</div><div class='del'>-require 'rexml/parsers/streamparser'</div><div class='del'>-require 'rexml/parsers/baseparser'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	module Parsers</div><div class='del'>-		class UltraLightParser</div><div class='del'>-			def initialize stream</div><div class='del'>-				@stream = stream</div><div class='del'>-				@parser = REXML::Parsers::BaseParser.new( stream )</div><div class='del'>-			end</div><div class='del'>-</div><div class='del'>-      def add_listener( listener )</div><div class='del'>-        @parser.add_listener( listener )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def rewind</div><div class='del'>-        @stream.rewind</div><div class='del'>-        @parser.stream = @stream</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-			def parse</div><div class='del'>-				root = context = []</div><div class='del'>-				while true</div><div class='del'>-					event = @parser.pull</div><div class='del'>-					case event[0]</div><div class='del'>-					when :end_document</div><div class='del'>-						break</div><div class='del'>-					when :end_doctype</div><div class='del'>-						context = context[1]</div><div class='del'>-					when :start_element, :doctype</div><div class='del'>-						context &lt;&lt; event</div><div class='del'>-						event[1,0] = [context]</div><div class='del'>-						context = event</div><div class='del'>-					when :end_element</div><div class='del'>-						context = context[1]</div><div class='del'>-					else</div><div class='del'>-						context &lt;&lt; event</div><div class='del'>-					end</div><div class='del'>-				end</div><div class='del'>-				root</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# An element is an array.  The array contains:</div><div class='del'>-		#  0			The parent element</div><div class='del'>-		#  1			The tag name</div><div class='del'>-		#  2			A hash of attributes</div><div class='del'>-		#  3..-1	The child elements</div><div class='del'>-		# An element is an array of size &gt; 3</div><div class='del'>-		# Text is a String</div><div class='del'>-		# PIs are [ :processing_instruction, target, data ]</div><div class='del'>-		# Comments are [ :comment, data ]</div><div class='del'>-		# DocTypes are DocType structs</div><div class='del'>-		# The root is an array with XMLDecls, Text, DocType, Array, Text</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/parsers/xpathparser.rb b/lib/rexml/parsers/xpathparser.rb<br/>deleted file mode 100644<br/>index de2530e347..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/parsers/xpathparser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/parsers/xpathparser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,698 +0,0 @@</div><div class='del'>-require 'rexml/namespace'</div><div class='del'>-require 'rexml/xmltokens'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Parsers</div><div class='del'>-    # You don't want to use this class.  Really.  Use XPath, which is a wrapper</div><div class='del'>-    # for this class.  Believe me.  You don't want to poke around in here.</div><div class='del'>-    # There is strange, dark magic at work in this code.  Beware.  Go back!  Go</div><div class='del'>-    # back while you still can!</div><div class='del'>-    class XPathParser</div><div class='del'>-      include XMLTokens</div><div class='del'>-      LITERAL    = /^'([^']*)'|^"([^"]*)"/u</div><div class='del'>-</div><div class='del'>-      def namespaces=( namespaces )</div><div class='del'>-        Functions::namespace_context = namespaces</div><div class='del'>-        @namespaces = namespaces</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def parse path</div><div class='del'>-        path.gsub!(/([\(\[])\s+/, '\1') # Strip ignorable spaces</div><div class='del'>-        path.gsub!( /\s+([\]\)])/, '\1' )</div><div class='del'>-        parsed = []</div><div class='del'>-        path = OrExpr(path, parsed)</div><div class='del'>-        parsed</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def predicate path</div><div class='del'>-        parsed = []</div><div class='del'>-        Predicate( "[#{path}]", parsed )</div><div class='del'>-        parsed</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def abbreviate( path )</div><div class='del'>-        path = path.kind_of?(String) ? parse( path ) : path</div><div class='del'>-        string = ""</div><div class='del'>-        document = false</div><div class='del'>-        while path.size &gt; 0</div><div class='del'>-          op = path.shift</div><div class='del'>-          case op</div><div class='del'>-          when :node</div><div class='del'>-          when :attribute</div><div class='del'>-						string &lt;&lt; "/" if string.size &gt; 0</div><div class='del'>-						string &lt;&lt; "@"</div><div class='del'>-          when :child</div><div class='del'>-						string &lt;&lt; "/" if string.size &gt; 0</div><div class='del'>-          when :descendant_or_self</div><div class='del'>-            string &lt;&lt; "/"</div><div class='del'>-          when :self</div><div class='del'>-            string &lt;&lt; "."</div><div class='del'>-          when :parent</div><div class='del'>-            string &lt;&lt; ".."</div><div class='del'>-          when :any</div><div class='del'>-            string &lt;&lt; "*"</div><div class='del'>-					when :text</div><div class='del'>-						string &lt;&lt; "text()"</div><div class='del'>-          when :following, :following_sibling, </div><div class='del'>-                :ancestor, :ancestor_or_self, :descendant, </div><div class='del'>-                :namespace, :preceding, :preceding_sibling</div><div class='del'>-            string &lt;&lt; "/" unless string.size == 0</div><div class='del'>-            string &lt;&lt; op.to_s.tr("_", "-")</div><div class='del'>-            string &lt;&lt; "::"</div><div class='del'>-          when :qname</div><div class='del'>-            prefix = path.shift</div><div class='del'>-            name = path.shift</div><div class='del'>-            string &lt;&lt; prefix+":" if prefix.size &gt; 0</div><div class='del'>-            string &lt;&lt; name</div><div class='del'>-          when :predicate</div><div class='del'>-            string &lt;&lt; '['</div><div class='del'>-            string &lt;&lt; predicate_to_string( path.shift ) {|x| abbreviate( x ) }</div><div class='del'>-            string &lt;&lt; ']'</div><div class='del'>-          when :document</div><div class='del'>-            document = true</div><div class='del'>-					when :function</div><div class='del'>-						string &lt;&lt; path.shift</div><div class='del'>-						string &lt;&lt; "( "</div><div class='del'>-						string &lt;&lt; predicate_to_string( path.shift[0] ) {|x| abbreviate( x )}</div><div class='del'>-						string &lt;&lt; " )"</div><div class='del'>-					when :literal</div><div class='del'>-						string &lt;&lt; %Q{ "#{path.shift}" }</div><div class='del'>-          else</div><div class='del'>-            string &lt;&lt; "/" unless string.size == 0</div><div class='del'>-            string &lt;&lt; "UNKNOWN("</div><div class='del'>-            string &lt;&lt; op.inspect</div><div class='del'>-            string &lt;&lt; ")"</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-				string = "/"+string if document</div><div class='del'>-        return string</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def expand( path )</div><div class='del'>-        path = path.kind_of?(String) ? parse( path ) : path</div><div class='del'>-        string = ""</div><div class='del'>-        document = false</div><div class='del'>-        while path.size &gt; 0</div><div class='del'>-          op = path.shift</div><div class='del'>-          case op</div><div class='del'>-          when :node</div><div class='del'>-            string &lt;&lt; "node()"</div><div class='del'>-          when :attribute, :child, :following, :following_sibling, </div><div class='del'>-                :ancestor, :ancestor_or_self, :descendant, :descendant_or_self,</div><div class='del'>-                :namespace, :preceding, :preceding_sibling, :self, :parent</div><div class='del'>-            string &lt;&lt; "/" unless string.size == 0</div><div class='del'>-            string &lt;&lt; op.to_s.tr("_", "-")</div><div class='del'>-            string &lt;&lt; "::"</div><div class='del'>-          when :any</div><div class='del'>-            string &lt;&lt; "*"</div><div class='del'>-          when :qname</div><div class='del'>-            prefix = path.shift</div><div class='del'>-            name = path.shift</div><div class='del'>-            string &lt;&lt; prefix+":" if prefix.size &gt; 0</div><div class='del'>-            string &lt;&lt; name</div><div class='del'>-          when :predicate</div><div class='del'>-            string &lt;&lt; '['</div><div class='del'>-            string &lt;&lt; predicate_to_string( path.shift ) { |x| expand(x) }</div><div class='del'>-            string &lt;&lt; ']'</div><div class='del'>-          when :document</div><div class='del'>-            document = true</div><div class='del'>-          else</div><div class='del'>-            string &lt;&lt; "/" unless string.size == 0</div><div class='del'>-            string &lt;&lt; "UNKNOWN("</div><div class='del'>-            string &lt;&lt; op.inspect</div><div class='del'>-            string &lt;&lt; ")"</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        string = "/"+string if document</div><div class='del'>-        return string</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def predicate_to_string( path, &amp;block )</div><div class='del'>-        string = ""</div><div class='del'>-        case path[0]</div><div class='del'>-        when :and, :or, :mult, :plus, :minus, :neq, :eq, :lt, :gt, :lteq, :gteq, :div, :mod, :union</div><div class='del'>-          op = path.shift</div><div class='del'>-          case op</div><div class='del'>-          when :eq</div><div class='del'>-            op = "="</div><div class='del'>-          when :lt</div><div class='del'>-            op = "&lt;"</div><div class='del'>-          when :gt</div><div class='del'>-            op = "&gt;"</div><div class='del'>-          when :lteq</div><div class='del'>-            op = "&lt;="</div><div class='del'>-          when :gteq</div><div class='del'>-            op = "&gt;="</div><div class='del'>-          when :neq</div><div class='del'>-            op = "!="</div><div class='del'>-          when :union</div><div class='del'>-            op = "|"</div><div class='del'>-          end</div><div class='del'>-          left = predicate_to_string( path.shift, &amp;block )</div><div class='del'>-          right = predicate_to_string( path.shift, &amp;block )</div><div class='del'>-          string &lt;&lt; " "</div><div class='del'>-          string &lt;&lt; left</div><div class='del'>-          string &lt;&lt; " "</div><div class='del'>-          string &lt;&lt; op.to_s</div><div class='del'>-          string &lt;&lt; " "</div><div class='del'>-          string &lt;&lt; right</div><div class='del'>-          string &lt;&lt; " "</div><div class='del'>-        when :function</div><div class='del'>-          path.shift</div><div class='del'>-          name = path.shift</div><div class='del'>-          string &lt;&lt; name</div><div class='del'>-          string &lt;&lt; "( "</div><div class='del'>-          string &lt;&lt; predicate_to_string( path.shift, &amp;block )</div><div class='del'>-          string &lt;&lt; " )"</div><div class='del'>-        when :literal</div><div class='del'>-          path.shift</div><div class='del'>-          string &lt;&lt; " "</div><div class='del'>-          string &lt;&lt; path.shift.inspect</div><div class='del'>-          string &lt;&lt; " "</div><div class='del'>-        else</div><div class='del'>-          string &lt;&lt; " "</div><div class='del'>-          string &lt;&lt; yield( path )</div><div class='del'>-          string &lt;&lt; " "</div><div class='del'>-        end</div><div class='del'>-        return string.squeeze(" ")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      #LocationPath</div><div class='del'>-      #  | RelativeLocationPath</div><div class='del'>-      #  | '/' RelativeLocationPath?</div><div class='del'>-      #  | '//' RelativeLocationPath</div><div class='del'>-      def LocationPath path, parsed</div><div class='del'>-        #puts "LocationPath '#{path}'"</div><div class='del'>-        path = path.strip</div><div class='del'>-        if path[0] == ?/</div><div class='del'>-          parsed &lt;&lt; :document</div><div class='del'>-          if path[1] == ?/</div><div class='del'>-            parsed &lt;&lt; :descendant_or_self</div><div class='del'>-            parsed &lt;&lt; :node</div><div class='del'>-            path = path[2..-1]</div><div class='del'>-          else</div><div class='del'>-            path = path[1..-1]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        #puts parsed.inspect</div><div class='del'>-        return RelativeLocationPath( path, parsed ) if path.size &gt; 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #RelativeLocationPath</div><div class='del'>-      #  |                                                    Step</div><div class='del'>-      #    | (AXIS_NAME '::' | '@' | '')                     AxisSpecifier</div><div class='del'>-      #      NodeTest</div><div class='del'>-      #        Predicate</div><div class='del'>-      #    | '.' | '..'                                      AbbreviatedStep</div><div class='del'>-      #  |  RelativeLocationPath '/' Step</div><div class='del'>-      #  | RelativeLocationPath '//' Step</div><div class='del'>-      AXIS = /^(ancestor|ancestor-or-self|attribute|child|descendant|descendant-or-self|following|following-sibling|namespace|parent|preceding|preceding-sibling|self)::/</div><div class='del'>-      def RelativeLocationPath path, parsed</div><div class='del'>-        #puts "RelativeLocationPath #{path}"</div><div class='del'>-        while path.size &gt; 0</div><div class='del'>-          # (axis or @ or &lt;child::&gt;) nodetest predicate  &gt;</div><div class='del'>-          # OR                                          &gt;  / Step</div><div class='del'>-          # (. or ..)                                    &gt;</div><div class='del'>-          if path[0] == ?.</div><div class='del'>-            if path[1] == ?.</div><div class='del'>-              parsed &lt;&lt; :parent</div><div class='del'>-              parsed &lt;&lt; :node</div><div class='del'>-              path = path[2..-1]</div><div class='del'>-            else</div><div class='del'>-              parsed &lt;&lt; :self</div><div class='del'>-              parsed &lt;&lt; :node</div><div class='del'>-              path = path[1..-1]</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            if path[0] == ?@</div><div class='del'>-              #puts "ATTRIBUTE"</div><div class='del'>-              parsed &lt;&lt; :attribute</div><div class='del'>-              path = path[1..-1]</div><div class='del'>-              # Goto Nodetest</div><div class='del'>-            elsif path =~ AXIS</div><div class='del'>-              parsed &lt;&lt; $1.tr('-','_').intern</div><div class='del'>-              path = $'</div><div class='del'>-              # Goto Nodetest</div><div class='del'>-            else</div><div class='del'>-              parsed &lt;&lt; :child</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            #puts "NODETESTING '#{path}'"</div><div class='del'>-            n = []</div><div class='del'>-            path = NodeTest( path, n)</div><div class='del'>-            #puts "NODETEST RETURNED '#{path}'"</div><div class='del'>-</div><div class='del'>-            if path[0] == ?[</div><div class='del'>-              path = Predicate( path, n )</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            parsed.concat(n)</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          if path.size &gt; 0</div><div class='del'>-            if path[0] == ?/</div><div class='del'>-              if path[1] == ?/</div><div class='del'>-                parsed &lt;&lt; :descendant_or_self</div><div class='del'>-                parsed &lt;&lt; :node</div><div class='del'>-                path = path[2..-1]</div><div class='del'>-              else</div><div class='del'>-                path = path[1..-1]</div><div class='del'>-              end</div><div class='del'>-            else</div><div class='del'>-              return path</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        return path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Returns a 1-1 map of the nodeset</div><div class='del'>-      # The contents of the resulting array are either:</div><div class='del'>-      #   true/false, if a positive match</div><div class='del'>-      #   String, if a name match</div><div class='del'>-      #NodeTest</div><div class='del'>-      #  | ('*' | NCNAME ':' '*' | QNAME)                NameTest</div><div class='del'>-      #  | NODE_TYPE '(' ')'                              NodeType</div><div class='del'>-      #  | PI '(' LITERAL ')'                            PI</div><div class='del'>-      #    | '[' expr ']'                                Predicate</div><div class='del'>-      NCNAMETEST= /^(#{NCNAME_STR}):\*/u</div><div class='del'>-      QNAME     = Namespace::NAMESPLIT</div><div class='del'>-      NODE_TYPE  = /^(comment|text|node)\(\s*\)/m</div><div class='del'>-      PI        = /^processing-instruction\(/</div><div class='del'>-      def NodeTest path, parsed</div><div class='del'>-        #puts "NodeTest with #{path}"</div><div class='del'>-        res = nil</div><div class='del'>-        case path</div><div class='del'>-        when /^\*/</div><div class='del'>-          path = $'</div><div class='del'>-          parsed &lt;&lt; :any</div><div class='del'>-        when NODE_TYPE</div><div class='del'>-          type = $1</div><div class='del'>-          path = $'</div><div class='del'>-          parsed &lt;&lt; type.tr('-', '_').intern</div><div class='del'>-        when PI</div><div class='del'>-          path = $'</div><div class='del'>-          literal = nil</div><div class='del'>-          if path !~ /^\s*\)/</div><div class='del'>-            path =~ LITERAL</div><div class='del'>-            literal = $1</div><div class='del'>-            path = $'</div><div class='del'>-            raise ParseException.new("Missing ')' after processing instruction") if path[0] != ?)</div><div class='del'>-            path = path[1..-1]</div><div class='del'>-          end</div><div class='del'>-          parsed &lt;&lt; :processing_instruction</div><div class='del'>-          parsed &lt;&lt; (literal || '')</div><div class='del'>-        when NCNAMETEST</div><div class='del'>-          #puts "NCNAMETEST"</div><div class='del'>-          prefix = $1</div><div class='del'>-          path = $'</div><div class='del'>-          parsed &lt;&lt; :namespace</div><div class='del'>-          parsed &lt;&lt; prefix</div><div class='del'>-        when QNAME</div><div class='del'>-          #puts "QNAME"</div><div class='del'>-          prefix = $1</div><div class='del'>-          name = $2</div><div class='del'>-          path = $'</div><div class='del'>-          prefix = "" unless prefix</div><div class='del'>-          parsed &lt;&lt; :qname</div><div class='del'>-          parsed &lt;&lt; prefix</div><div class='del'>-          parsed &lt;&lt; name</div><div class='del'>-        end</div><div class='del'>-        return path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # Filters the supplied nodeset on the predicate(s)</div><div class='del'>-      def Predicate path, parsed</div><div class='del'>-        #puts "PREDICATE with #{path}"</div><div class='del'>-        return nil unless path[0] == ?[</div><div class='del'>-        predicates = []</div><div class='del'>-        while path[0] == ?[</div><div class='del'>-          path, expr = get_group(path)</div><div class='del'>-          predicates &lt;&lt; expr[1..-2] if expr</div><div class='del'>-        end</div><div class='del'>-        #puts "PREDICATES = #{predicates.inspect}"</div><div class='del'>-        predicates.each{ |expr| </div><div class='del'>-          #puts "ORING #{expr}"</div><div class='del'>-          preds = []</div><div class='del'>-          parsed &lt;&lt; :predicate</div><div class='del'>-          parsed &lt;&lt; preds</div><div class='del'>-          OrExpr(expr, preds) </div><div class='del'>-        }</div><div class='del'>-        #puts "PREDICATES = #{predicates.inspect}"</div><div class='del'>-        path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # The following return arrays of true/false, a 1-1 mapping of the</div><div class='del'>-      # supplied nodeset, except for axe(), which returns a filtered</div><div class='del'>-      # nodeset</div><div class='del'>-</div><div class='del'>-      #| OrExpr S 'or' S AndExpr</div><div class='del'>-      #| AndExpr</div><div class='del'>-      def OrExpr path, parsed</div><div class='del'>-        #puts "OR &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        rest = AndExpr( path, n )</div><div class='del'>-        #puts "OR &lt;&lt;&lt; #{rest}"</div><div class='del'>-        if rest != path</div><div class='del'>-          while rest =~ /^\s*( or )/</div><div class='del'>-            n = [ :or, n, [] ]</div><div class='del'>-            rest = AndExpr( $', n[-1] )</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if parsed.size == 0 and n.size != 0</div><div class='del'>-          parsed.replace(n)</div><div class='del'>-        elsif n.size &gt; 0</div><div class='del'>-          parsed &lt;&lt; n</div><div class='del'>-        end</div><div class='del'>-        rest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| AndExpr S 'and' S EqualityExpr</div><div class='del'>-      #| EqualityExpr</div><div class='del'>-      def AndExpr path, parsed</div><div class='del'>-        #puts "AND &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        rest = EqualityExpr( path, n )</div><div class='del'>-        #puts "AND &lt;&lt;&lt; #{rest}"</div><div class='del'>-        if rest != path</div><div class='del'>-          while rest =~ /^\s*( and )/</div><div class='del'>-            n = [ :and, n, [] ]</div><div class='del'>-            #puts "AND &gt;&gt;&gt; #{rest}"</div><div class='del'>-            rest = EqualityExpr( $', n[-1] )</div><div class='del'>-            #puts "AND &lt;&lt;&lt; #{rest}"</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if parsed.size == 0 and n.size != 0</div><div class='del'>-          parsed.replace(n)</div><div class='del'>-        elsif n.size &gt; 0</div><div class='del'>-          parsed &lt;&lt; n</div><div class='del'>-        end</div><div class='del'>-        rest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| EqualityExpr ('=' | '!=')  RelationalExpr</div><div class='del'>-      #| RelationalExpr</div><div class='del'>-      def EqualityExpr path, parsed</div><div class='del'>-        #puts "EQUALITY &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        rest = RelationalExpr( path, n )</div><div class='del'>-        #puts "EQUALITY &lt;&lt;&lt; #{rest}"</div><div class='del'>-        if rest != path</div><div class='del'>-          while rest =~ /^\s*(!?=)\s*/</div><div class='del'>-            if $1[0] == ?!</div><div class='del'>-              n = [ :neq, n, [] ]</div><div class='del'>-            else</div><div class='del'>-              n = [ :eq, n, [] ]</div><div class='del'>-            end</div><div class='del'>-            rest = RelationalExpr( $', n[-1] )</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if parsed.size == 0 and n.size != 0</div><div class='del'>-          parsed.replace(n)</div><div class='del'>-        elsif n.size &gt; 0</div><div class='del'>-          parsed &lt;&lt; n</div><div class='del'>-        end</div><div class='del'>-        rest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| RelationalExpr ('&lt;' | '&gt;' | '&lt;=' | '&gt;=') AdditiveExpr</div><div class='del'>-      #| AdditiveExpr</div><div class='del'>-      def RelationalExpr path, parsed</div><div class='del'>-        #puts "RELATION &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        rest = AdditiveExpr( path, n )</div><div class='del'>-        #puts "RELATION &lt;&lt;&lt; #{rest}"</div><div class='del'>-        if rest != path</div><div class='del'>-          while rest =~ /^\s*([&lt;&gt;]=?)\s*/</div><div class='del'>-            if $1[0] == ?&lt;</div><div class='del'>-              sym = "lt"</div><div class='del'>-            else</div><div class='del'>-              sym = "gt"</div><div class='del'>-            end</div><div class='del'>-            sym &lt;&lt; "eq" if $1[-1] == ?=</div><div class='del'>-            n = [ sym.intern, n, [] ]</div><div class='del'>-            rest = AdditiveExpr( $', n[-1] )</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if parsed.size == 0 and n.size != 0</div><div class='del'>-          parsed.replace(n)</div><div class='del'>-        elsif n.size &gt; 0</div><div class='del'>-          parsed &lt;&lt; n</div><div class='del'>-        end</div><div class='del'>-        rest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| AdditiveExpr ('+' | S '-') MultiplicativeExpr</div><div class='del'>-      #| MultiplicativeExpr</div><div class='del'>-      def AdditiveExpr path, parsed</div><div class='del'>-        #puts "ADDITIVE &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        rest = MultiplicativeExpr( path, n )</div><div class='del'>-        #puts "ADDITIVE &lt;&lt;&lt; #{rest}"</div><div class='del'>-        if rest != path</div><div class='del'>-          while rest =~ /^\s*(\+| -)\s*/</div><div class='del'>-            if $1[0] == ?+</div><div class='del'>-              n = [ :plus, n, [] ]</div><div class='del'>-            else</div><div class='del'>-              n = [ :minus, n, [] ]</div><div class='del'>-            end</div><div class='del'>-            rest = MultiplicativeExpr( $', n[-1] )</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if parsed.size == 0 and n.size != 0</div><div class='del'>-          parsed.replace(n)</div><div class='del'>-        elsif n.size &gt; 0</div><div class='del'>-          parsed &lt;&lt; n</div><div class='del'>-        end</div><div class='del'>-        rest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| MultiplicativeExpr ('*' | S ('div' | 'mod') S) UnaryExpr</div><div class='del'>-      #| UnaryExpr</div><div class='del'>-      def MultiplicativeExpr path, parsed</div><div class='del'>-        #puts "MULT &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        rest = UnaryExpr( path, n )</div><div class='del'>-        #puts "MULT &lt;&lt;&lt; #{rest}"</div><div class='del'>-        if rest != path</div><div class='del'>-          while rest =~ /^\s*(\*| div | mod )\s*/</div><div class='del'>-            if $1[0] == ?*</div><div class='del'>-              n = [ :mult, n, [] ]</div><div class='del'>-            elsif $1.include?( "div" )</div><div class='del'>-              n = [ :div, n, [] ]</div><div class='del'>-            else</div><div class='del'>-              n = [ :mod, n, [] ]</div><div class='del'>-            end</div><div class='del'>-            rest = UnaryExpr( $', n[-1] )</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if parsed.size == 0 and n.size != 0</div><div class='del'>-          parsed.replace(n)</div><div class='del'>-        elsif n.size &gt; 0</div><div class='del'>-          parsed &lt;&lt; n</div><div class='del'>-        end</div><div class='del'>-        rest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| '-' UnaryExpr</div><div class='del'>-      #| UnionExpr</div><div class='del'>-      def UnaryExpr path, parsed</div><div class='del'>-        path =~ /^(\-*)/</div><div class='del'>-        path = $'</div><div class='del'>-        if $1 and (($1.size % 2) != 0)</div><div class='del'>-          mult = -1</div><div class='del'>-        else</div><div class='del'>-          mult = 1</div><div class='del'>-        end</div><div class='del'>-        parsed &lt;&lt; :neg if mult &lt; 0</div><div class='del'>-</div><div class='del'>-        #puts "UNARY &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        path = UnionExpr( path, n )</div><div class='del'>-        #puts "UNARY &lt;&lt;&lt; #{path}"</div><div class='del'>-        parsed.concat( n )</div><div class='del'>-        path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| UnionExpr '|' PathExpr</div><div class='del'>-      #| PathExpr</div><div class='del'>-      def UnionExpr path, parsed</div><div class='del'>-        #puts "UNION &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        rest = PathExpr( path, n )</div><div class='del'>-        #puts "UNION &lt;&lt;&lt; #{rest}"</div><div class='del'>-        if rest != path</div><div class='del'>-          while rest =~ /^\s*(\|)\s*/</div><div class='del'>-            n = [ :union, n, [] ]</div><div class='del'>-            rest = PathExpr( $', n[-1] )</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        if parsed.size == 0 and n.size != 0</div><div class='del'>-          parsed.replace( n )</div><div class='del'>-        elsif n.size &gt; 0</div><div class='del'>-          parsed &lt;&lt; n</div><div class='del'>-        end</div><div class='del'>-        rest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| LocationPath</div><div class='del'>-      #| FilterExpr ('/' | '//') RelativeLocationPath</div><div class='del'>-      def PathExpr path, parsed</div><div class='del'>-        path =~ /^\s*/</div><div class='del'>-        path = $'</div><div class='del'>-        #puts "PATH &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        rest = FilterExpr( path, n )</div><div class='del'>-        #puts "PATH &lt;&lt;&lt; '#{rest}'"</div><div class='del'>-        if rest != path</div><div class='del'>-          if rest and rest[0] == ?/</div><div class='del'>-            return RelativeLocationPath(rest, n)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        #puts "BEFORE WITH '#{rest}'"</div><div class='del'>-        rest = LocationPath(rest, n) if rest =~ /\A[\/\.\@\[\w_*]/</div><div class='del'>-        parsed.concat(n)</div><div class='del'>-        return rest</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| FilterExpr Predicate</div><div class='del'>-      #| PrimaryExpr</div><div class='del'>-      def FilterExpr path, parsed</div><div class='del'>-        #puts "FILTER &gt;&gt;&gt; #{path}"</div><div class='del'>-        n = []</div><div class='del'>-        path = PrimaryExpr( path, n )</div><div class='del'>-        #puts "FILTER &lt;&lt;&lt; #{path}"</div><div class='del'>-        path = Predicate(path, n) if path and path[0] == ?[</div><div class='del'>-        #puts "FILTER &lt;&lt;&lt; #{path}"</div><div class='del'>-        parsed.concat(n)</div><div class='del'>-        path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| VARIABLE_REFERENCE</div><div class='del'>-      #| '(' expr ')'</div><div class='del'>-      #| LITERAL</div><div class='del'>-      #| NUMBER</div><div class='del'>-      #| FunctionCall</div><div class='del'>-      VARIABLE_REFERENCE  = /^\$(#{NAME_STR})/u</div><div class='del'>-      NUMBER              = /^(\d*\.?\d+)/</div><div class='del'>-      NT        = /^comment|text|processing-instruction|node$/</div><div class='del'>-      def PrimaryExpr path, parsed</div><div class='del'>-        arry = []</div><div class='del'>-        case path</div><div class='del'>-        when VARIABLE_REFERENCE</div><div class='del'>-          varname = $1</div><div class='del'>-          path = $'</div><div class='del'>-          parsed &lt;&lt; :variable</div><div class='del'>-          parsed &lt;&lt; varname</div><div class='del'>-          #arry &lt;&lt; @variables[ varname ]</div><div class='del'>-        when /^(\w[-\w]*)(?:\()/</div><div class='del'>-          #puts "PrimaryExpr :: Function &gt;&gt;&gt; #$1 -- '#$''"</div><div class='del'>-          fname = $1</div><div class='del'>-          tmp = $'</div><div class='del'>-          #puts "#{fname} =~ #{NT.inspect}"</div><div class='del'>-          return path if fname =~ NT</div><div class='del'>-          path = tmp</div><div class='del'>-          parsed &lt;&lt; :function</div><div class='del'>-          parsed &lt;&lt; fname</div><div class='del'>-          path = FunctionCall(path, parsed)</div><div class='del'>-        when NUMBER</div><div class='del'>-          #puts "LITERAL or NUMBER: #$1"</div><div class='del'>-          varname = $1.nil? ? $2 : $1</div><div class='del'>-          path = $'</div><div class='del'>-          parsed &lt;&lt; :literal </div><div class='del'>-          parsed &lt;&lt; (varname.include?('.') ? varname.to_f : varname.to_i)</div><div class='del'>-        when LITERAL</div><div class='del'>-          #puts "LITERAL or NUMBER: #$1"</div><div class='del'>-          varname = $1.nil? ? $2 : $1</div><div class='del'>-          path = $'</div><div class='del'>-          parsed &lt;&lt; :literal </div><div class='del'>-          parsed &lt;&lt; varname</div><div class='del'>-        when /^\(/                                               #/</div><div class='del'>-          path, contents = get_group(path)</div><div class='del'>-          contents = contents[1..-2]</div><div class='del'>-          n = []</div><div class='del'>-          OrExpr( contents, n )</div><div class='del'>-          parsed.concat(n)</div><div class='del'>-        end</div><div class='del'>-        path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      #| FUNCTION_NAME '(' ( expr ( ',' expr )* )? ')'</div><div class='del'>-      def FunctionCall rest, parsed</div><div class='del'>-        path, arguments = parse_args(rest)</div><div class='del'>-        argset = []</div><div class='del'>-        for argument in arguments</div><div class='del'>-          args = []</div><div class='del'>-          OrExpr( argument, args )</div><div class='del'>-          argset &lt;&lt; args</div><div class='del'>-        end</div><div class='del'>-        parsed &lt;&lt; argset</div><div class='del'>-        path</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      # get_group( '[foo]bar' ) -&gt; ['bar', '[foo]']</div><div class='del'>-      def get_group string</div><div class='del'>-        ind = 0</div><div class='del'>-        depth = 0</div><div class='del'>-        st = string[0,1]</div><div class='del'>-        en = (st == "(" ? ")" : "]")</div><div class='del'>-        begin</div><div class='del'>-          case string[ind,1]</div><div class='del'>-          when st</div><div class='del'>-            depth += 1</div><div class='del'>-          when en</div><div class='del'>-            depth -= 1</div><div class='del'>-          end</div><div class='del'>-          ind += 1</div><div class='del'>-        end while depth &gt; 0 and ind &lt; string.length</div><div class='del'>-        return nil unless depth==0</div><div class='del'>-        [string[ind..-1], string[0..ind-1]]</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def parse_args( string )</div><div class='del'>-        arguments = []</div><div class='del'>-        ind = 0</div><div class='del'>-				inquot = false</div><div class='del'>-				inapos = false</div><div class='del'>-        depth = 1</div><div class='del'>-        begin</div><div class='del'>-          case string[ind]</div><div class='del'>-          when ?"</div><div class='del'>-          	inquot = !inquot unless inapos</div><div class='del'>-          when ?'</div><div class='del'>-          	inapos = !inapos unless inquot</div><div class='del'>-          else</div><div class='del'>-          	unless inquot or inapos</div><div class='del'>-          		case string[ind]</div><div class='del'>-							when ?(</div><div class='del'>-								depth += 1</div><div class='del'>-                if depth == 1</div><div class='del'>-                	string = string[1..-1]</div><div class='del'>-                	ind -= 1</div><div class='del'>-                end</div><div class='del'>-							when ?)</div><div class='del'>-								depth -= 1</div><div class='del'>-								if depth == 0</div><div class='del'>-									s = string[0,ind].strip</div><div class='del'>-									arguments &lt;&lt; s unless s == ""</div><div class='del'>-									string = string[ind+1..-1]</div><div class='del'>-								end</div><div class='del'>-							when ?,</div><div class='del'>-								if depth == 1</div><div class='del'>-									s = string[0,ind].strip</div><div class='del'>-									arguments &lt;&lt; s unless s == ""</div><div class='del'>-									string = string[ind+1..-1]</div><div class='del'>-									ind = -1 </div><div class='del'>-								end</div><div class='del'>-							end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          ind += 1</div><div class='del'>-        end while depth &gt; 0 and ind &lt; string.length</div><div class='del'>-        return nil unless depth==0</div><div class='del'>-        [string,arguments]</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/lib/rexml/quickpath.rb b/lib/rexml/quickpath.rb<br/>deleted file mode 100644<br/>index c099db8579..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/quickpath.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/quickpath.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,266 +0,0 @@</div><div class='del'>-require 'rexml/functions'</div><div class='del'>-require 'rexml/xmltokens'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	class QuickPath</div><div class='del'>-		include Functions</div><div class='del'>-		include XMLTokens</div><div class='del'>-</div><div class='del'>-		EMPTY_HASH = {}</div><div class='del'>-</div><div class='del'>-		def QuickPath::first element, path, namespaces=EMPTY_HASH</div><div class='del'>-			match(element, path, namespaces)[0]</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def QuickPath::each element, path, namespaces=EMPTY_HASH, &amp;block</div><div class='del'>-			path = "*" unless path</div><div class='del'>-			match(element, path, namespaces).each( &amp;block )</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def QuickPath::match element, path, namespaces=EMPTY_HASH</div><div class='del'>-			raise "nil is not a valid xpath" unless path</div><div class='del'>-			results = nil</div><div class='del'>-			Functions::namespace_context = namespaces</div><div class='del'>-			case path</div><div class='del'>-			when /^\/([^\/]|$)/u</div><div class='del'>-				# match on root</div><div class='del'>-				path = path[1..-1]</div><div class='del'>-				return [element.root.parent] if path == ''</div><div class='del'>-				results = filter([element.root], path)</div><div class='del'>-			when /^[-\w]*::/u</div><div class='del'>-				results = filter([element], path)</div><div class='del'>-			when /^\*/u</div><div class='del'>-				results = filter(element.to_a, path)</div><div class='del'>-			when /^[\[!\w:]/u</div><div class='del'>-				# match on child</div><div class='del'>-				matches = []</div><div class='del'>-				children = element.to_a</div><div class='del'>-				results = filter(children, path)</div><div class='del'>-			else</div><div class='del'>-				results = filter([element], path)</div><div class='del'>-			end</div><div class='del'>-			return results</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Given an array of nodes it filters the array based on the path. The</div><div class='del'>-		# result is that when this method returns, the array will contain elements</div><div class='del'>-		# which match the path</div><div class='del'>-		def QuickPath::filter elements, path</div><div class='del'>-			return elements if path.nil? or path == '' or elements.size == 0</div><div class='del'>-			case path</div><div class='del'>-			when /^\/\//u											# Descendant</div><div class='del'>-				return axe( elements, "descendant-or-self", $' )</div><div class='del'>-			when /^\/?\b(\w[-\w]*)\b::/u							# Axe</div><div class='del'>-				axe_name = $1</div><div class='del'>-				rest = $'</div><div class='del'>-				return axe( elements, $1, $' )</div><div class='del'>-			when /^\/(?=\b([:!\w][-\.\w]*:)?[-!\*\.\w]*\b([^:(]|$)|\*)/u	# Child</div><div class='del'>-				rest = $'</div><div class='del'>-				results = []</div><div class='del'>-				elements.each do |element|</div><div class='del'>-					results |= filter( element.to_a, rest )</div><div class='del'>-				end</div><div class='del'>-				return results</div><div class='del'>-			when /^\/?(\w[-\w]*)\(/u							# / Function</div><div class='del'>-				return function( elements, $1, $' )</div><div class='del'>-			when Namespace::NAMESPLIT		# Element name</div><div class='del'>-				name = $2</div><div class='del'>-				ns = $1</div><div class='del'>-				rest = $'</div><div class='del'>-				elements.delete_if do |element|</div><div class='del'>-					!(element.kind_of? Element and </div><div class='del'>-						(element.expanded_name == name or</div><div class='del'>-						 (element.name == name and</div><div class='del'>-						  element.namespace == Functions.namespace_context[ns])))</div><div class='del'>-				end</div><div class='del'>-				return filter( elements, rest )</div><div class='del'>-			when /^\/\[/u</div><div class='del'>-				matches = []</div><div class='del'>-				elements.each do |element|</div><div class='del'>-					matches |= predicate( element.to_a, path[1..-1] ) if element.kind_of? Element</div><div class='del'>-				end</div><div class='del'>-				return matches</div><div class='del'>-			when /^\[/u												# Predicate</div><div class='del'>-				return predicate( elements, path )</div><div class='del'>-			when /^\/?\.\.\./u										# Ancestor</div><div class='del'>-				return axe( elements, "ancestor", $' )</div><div class='del'>-			when /^\/?\.\./u											# Parent</div><div class='del'>-				return filter( elements.collect{|e|e.parent}, $' )</div><div class='del'>-			when /^\/?\./u												# Self</div><div class='del'>-				return filter( elements, $' )</div><div class='del'>-			when /^\*/u													# Any</div><div class='del'>-				results = []</div><div class='del'>-				elements.each do |element|</div><div class='del'>-					results |= filter( [element], $' ) if element.kind_of? Element</div><div class='del'>-					#if element.kind_of? Element</div><div class='del'>-					#	children = element.to_a</div><div class='del'>-					#	children.delete_if { |child| !child.kind_of?(Element) }</div><div class='del'>-					#	results |= filter( children, $' )</div><div class='del'>-					#end</div><div class='del'>-				end</div><div class='del'>-				return results</div><div class='del'>-			end</div><div class='del'>-			return []</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def QuickPath::axe( elements, axe_name, rest )</div><div class='del'>-			matches = []</div><div class='del'>-			matches = filter( elements.dup, rest ) if axe_name =~ /-or-self$/u</div><div class='del'>-			case axe_name</div><div class='del'>-			when /^descendant/u</div><div class='del'>-				elements.each do |element|</div><div class='del'>-					matches |= filter( element.to_a, "descendant-or-self::#{rest}" ) if element.kind_of? Element</div><div class='del'>-				end</div><div class='del'>-			when /^ancestor/u</div><div class='del'>-				elements.each do |element|</div><div class='del'>-					while element.parent</div><div class='del'>-						matches &lt;&lt; element.parent</div><div class='del'>-						element = element.parent</div><div class='del'>-					end</div><div class='del'>-				end</div><div class='del'>-				matches = filter( matches, rest )</div><div class='del'>-			when "self"</div><div class='del'>-				matches = filter( elements, rest )</div><div class='del'>-			when "child"</div><div class='del'>-				elements.each do |element|</div><div class='del'>-					matches |= filter( element.to_a, rest ) if element.kind_of? Element</div><div class='del'>-				end</div><div class='del'>-			when "attribute"</div><div class='del'>-				elements.each do |element|</div><div class='del'>-					matches &lt;&lt; element.attributes[ rest ] if element.kind_of? Element</div><div class='del'>-				end</div><div class='del'>-			when "parent"</div><div class='del'>-				matches = filter(elements.collect{|element| element.parent}.uniq, rest)</div><div class='del'>-			when "following-sibling"</div><div class='del'>-				matches = filter(elements.collect{|element| element.next_sibling}.uniq,</div><div class='del'>-					rest)</div><div class='del'>-			when "previous-sibling"</div><div class='del'>-				matches = filter(elements.collect{|element| </div><div class='del'>-					element.previous_sibling}.uniq, rest )</div><div class='del'>-			end</div><div class='del'>-			return matches.uniq</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# A predicate filters a node-set with respect to an axis to produce a</div><div class='del'>-		# new node-set. For each node in the node-set to be filtered, the </div><div class='del'>-		# PredicateExpr is evaluated with that node as the context node, with </div><div class='del'>-		# the number of nodes in the node-set as the context size, and with the </div><div class='del'>-		# proximity position of the node in the node-set with respect to the</div><div class='del'>-		# axis as the context position; if PredicateExpr evaluates to true for</div><div class='del'>-		# that node, the node is included in the new node-set; otherwise, it is</div><div class='del'>-		# not included.</div><div class='del'>-		#</div><div class='del'>-		# A PredicateExpr is evaluated by evaluating the Expr and converting</div><div class='del'>-		# the result to a boolean. If the result is a number, the result will</div><div class='del'>-		# be converted to true if the number is equal to the context position</div><div class='del'>-		# and will be converted to false otherwise; if the result is not a</div><div class='del'>-		# number, then the result will be converted as if by a call to the</div><div class='del'>-		# boolean function. Thus a location path para[3] is equivalent to</div><div class='del'>-		# para[position()=3].</div><div class='del'>-		def QuickPath::predicate( elements, path ) </div><div class='del'>-			ind = 1</div><div class='del'>-			bcount = 1</div><div class='del'>-			while bcount &gt; 0</div><div class='del'>-				bcount += 1 if path[ind] == ?[</div><div class='del'>-				bcount -= 1 if path[ind] == ?]</div><div class='del'>-				ind += 1</div><div class='del'>-			end</div><div class='del'>-			ind -= 1</div><div class='del'>-			predicate = path[1..ind-1]</div><div class='del'>-			rest = path[ind+1..-1]</div><div class='del'>-</div><div class='del'>-			# have to change 'a [=&lt;&gt;] b [=&lt;&gt;] c' into 'a [=&lt;&gt;] b and b [=&lt;&gt;] c'</div><div class='del'>-			predicate.gsub!( /([^\s(and)(or)&lt;&gt;=]+)\s*([&lt;&gt;=])\s*([^\s(and)(or)&lt;&gt;=]+)\s*([&lt;&gt;=])\s*([^\s(and)(or)&lt;&gt;=]+)/u ) { </div><div class='del'>-				"#$1 #$2 #$3 and #$3 #$4 #$5"</div><div class='del'>-			}</div><div class='del'>-			# Let's do some Ruby trickery to avoid some work:</div><div class='del'>-			predicate.gsub!( /&amp;/u, "&amp;&amp;" )</div><div class='del'>-			predicate.gsub!( /=/u, "==" )</div><div class='del'>-			predicate.gsub!( /@(\w[-\w.]*)/u ) {</div><div class='del'>-				"attribute(\"#$1\")" </div><div class='del'>-			}</div><div class='del'>-			predicate.gsub!( /\bmod\b/u, "%" )</div><div class='del'>-			predicate.gsub!( /\b(\w[-\w.]*\()/u ) {</div><div class='del'>-				fname = $1</div><div class='del'>-				fname.gsub( /-/u, "_" )</div><div class='del'>-			}</div><div class='del'>-			</div><div class='del'>-			Functions.pair = [ 0, elements.size ]</div><div class='del'>-			results = []</div><div class='del'>-			elements.each do |element|</div><div class='del'>-				Functions.pair[0] += 1</div><div class='del'>-				Functions.node = element</div><div class='del'>-				res = eval( predicate )</div><div class='del'>-				case res</div><div class='del'>-				when true</div><div class='del'>-					results &lt;&lt; element</div><div class='del'>-				when Fixnum</div><div class='del'>-					results &lt;&lt; element if Functions.pair[0] == res</div><div class='del'>-				when String</div><div class='del'>-					results &lt;&lt; element</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-			return filter( results, rest )</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def QuickPath::attribute( name )</div><div class='del'>-			return Functions.node.attributes[name] if Functions.node.kind_of? Element</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def QuickPath::name()</div><div class='del'>-			return Functions.node.name if Functions.node.kind_of? Element</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def QuickPath::method_missing( id, *args )</div><div class='del'>-			begin</div><div class='del'>-				Functions.send( id.id2name, *args )</div><div class='del'>-			rescue Exception</div><div class='del'>-				raise "METHOD: #{id.id2name}(#{args.join ', '})\n#{$!.message}"</div><div class='del'>-			end</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def QuickPath::function( elements, fname, rest )</div><div class='del'>-			args = parse_args( elements, rest )</div><div class='del'>-			Functions.pair = [0, elements.size]</div><div class='del'>-			results = []</div><div class='del'>-			elements.each do |element|</div><div class='del'>-				Functions.pair[0] += 1</div><div class='del'>-				Functions.node = element</div><div class='del'>-				res = Functions.send( fname, *args )</div><div class='del'>-				case res</div><div class='del'>-				when true</div><div class='del'>-					results &lt;&lt; element</div><div class='del'>-				when Fixnum</div><div class='del'>-					results &lt;&lt; element if Functions.pair[0] == res</div><div class='del'>-				end</div><div class='del'>-			end</div><div class='del'>-			return results</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def QuickPath::parse_args( element, string )</div><div class='del'>-			# /.*?(?:\)|,)/</div><div class='del'>-			arguments = []</div><div class='del'>-			buffer = ""</div><div class='del'>-			while string and string != ""</div><div class='del'>-				c = string[0]</div><div class='del'>-				string.sub!(/^./u, "")</div><div class='del'>-				case c</div><div class='del'>-				when ?,</div><div class='del'>-					# if depth = 1, then we start a new argument</div><div class='del'>-					arguments &lt;&lt; evaluate( buffer )</div><div class='del'>-					#arguments &lt;&lt; evaluate( string[0..count] )</div><div class='del'>-				when ?(</div><div class='del'>-					# start a new method call</div><div class='del'>-					function( element, buffer, string )</div><div class='del'>-					buffer = ""</div><div class='del'>-				when ?)</div><div class='del'>-					# close the method call and return arguments</div><div class='del'>-					return arguments</div><div class='del'>-				else</div><div class='del'>-					buffer &lt;&lt; c</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'>-end</div><div class='head'>diff --git a/lib/rexml/rexml.rb b/lib/rexml/rexml.rb<br/>deleted file mode 100644<br/>index 8af1697e51..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/rexml.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/rexml.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,32 +0,0 @@</div><div class='del'>-# -*- encoding: utf-8 -*-</div><div class='del'>-# REXML is an XML toolkit for Ruby[http://www.ruby-lang.org], in Ruby.</div><div class='del'>-#</div><div class='del'>-# REXML is a _pure_ Ruby, XML 1.0 conforming,</div><div class='del'>-# non-validating[http://www.w3.org/TR/2004/REC-xml-20040204/#sec-conformance]</div><div class='del'>-# toolkit with an intuitive API.  REXML passes 100% of the non-validating Oasis</div><div class='del'>-# tests[http://www.oasis-open.org/committees/xml-conformance/xml-test-suite.shtml],</div><div class='del'>-# and provides tree, stream, SAX2, pull, and lightweight APIs.  REXML also </div><div class='del'>-# includes a full XPath[http://www.w3c.org/tr/xpath] 1.0 implementation. Since </div><div class='del'>-# Ruby 1.8, REXML is included in the standard Ruby distribution.</div><div class='del'>-#</div><div class='del'>-# Main page:: http://www.germane-software.com/software/rexml</div><div class='del'>-# Author:: Sean Russell &lt;serATgermaneHYPHENsoftwareDOTcom&gt;</div><div class='del'>-# Version:: 3.1.7.2</div><div class='del'>-# Date:: 2007/275</div><div class='del'>-# Revision:: $Revision$</div><div class='del'>-# </div><div class='del'>-# This API documentation can be downloaded from the REXML home page, or can</div><div class='del'>-# be accessed online[http://www.germane-software.com/software/rexml_doc]</div><div class='del'>-#</div><div class='del'>-# A tutorial is available in the REXML distribution in docs/tutorial.html,</div><div class='del'>-# or can be accessed </div><div class='del'>-# online[http://www.germane-software.com/software/rexml/docs/tutorial.html]</div><div class='del'>-module REXML</div><div class='del'>-  COPYRIGHT = "Copyright \xC2\xA9 2001-2006 Sean Russell &lt;ser@germane-software.com&gt;"</div><div class='del'>-  VERSION = "3.1.7.2"</div><div class='del'>-  DATE = "2007/275"</div><div class='del'>-  REVISION = "$Revision$".gsub(/\$Revision:|\$/,'').strip</div><div class='del'>-</div><div class='del'>-  Copyright = COPYRIGHT</div><div class='del'>-  Version = VERSION</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/sax2listener.rb b/lib/rexml/sax2listener.rb<br/>deleted file mode 100644<br/>index 8db1389d06..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/sax2listener.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/sax2listener.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,97 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-	# A template for stream parser listeners.</div><div class='del'>-	# Note that the declarations (attlistdecl, elementdecl, etc) are trivially</div><div class='del'>-	# processed; REXML doesn't yet handle doctype entity declarations, so you </div><div class='del'>-	# have to parse them out yourself.</div><div class='del'>-	# === Missing methods from SAX2</div><div class='del'>-	#  ignorable_whitespace</div><div class='del'>-	# === Methods extending SAX2 </div><div class='del'>-	# +WARNING+</div><div class='del'>-	# These methods are certainly going to change, until DTDs are fully</div><div class='del'>-	# supported.  Be aware of this.</div><div class='del'>-	#  start_document</div><div class='del'>-	#  end_document</div><div class='del'>-	#  doctype</div><div class='del'>-	#  elementdecl</div><div class='del'>-	#  attlistdecl</div><div class='del'>-	#  entitydecl</div><div class='del'>-	#  notationdecl</div><div class='del'>-	#  cdata</div><div class='del'>-	#  xmldecl</div><div class='del'>-	#  comment</div><div class='del'>-	module SAX2Listener</div><div class='del'>-		def start_document</div><div class='del'>-		end</div><div class='del'>-		def end_document</div><div class='del'>-		end</div><div class='del'>-		def start_prefix_mapping prefix, uri</div><div class='del'>-		end</div><div class='del'>-		def end_prefix_mapping prefix</div><div class='del'>-		end</div><div class='del'>-		def start_element uri, localname, qname, attributes</div><div class='del'>-		end</div><div class='del'>-		def end_element uri, localname, qname</div><div class='del'>-		end</div><div class='del'>-		def characters text</div><div class='del'>-		end</div><div class='del'>-		def processing_instruction target, data</div><div class='del'>-		end</div><div class='del'>-		# Handles a doctype declaration. Any attributes of the doctype which are</div><div class='del'>-		# not supplied will be nil.  # EG, &lt;!DOCTYPE me PUBLIC "foo" "bar"&gt;</div><div class='del'>-		# @p name the name of the doctype; EG, "me"</div><div class='del'>-		# @p pub_sys "PUBLIC", "SYSTEM", or nil.  EG, "PUBLIC"</div><div class='del'>-		# @p long_name the supplied long name, or nil.  EG, "foo"</div><div class='del'>-		# @p uri the uri of the doctype, or nil.  EG, "bar"</div><div class='del'>-		def doctype name, pub_sys, long_name, uri</div><div class='del'>-		end</div><div class='del'>-		# If a doctype includes an ATTLIST declaration, it will cause this</div><div class='del'>-		# method to be called.  The content is the declaration itself, unparsed.</div><div class='del'>-		# EG, &lt;!ATTLIST el attr CDATA #REQUIRED&gt; will come to this method as "el</div><div class='del'>-		# attr CDATA #REQUIRED".  This is the same for all of the .*decl</div><div class='del'>-		# methods.</div><div class='del'>-		def attlistdecl(element, pairs, contents)</div><div class='del'>-		end</div><div class='del'>-		# &lt;!ELEMENT ...&gt;</div><div class='del'>-		def elementdecl content</div><div class='del'>-		end</div><div class='del'>-		# &lt;!ENTITY ...&gt;</div><div class='del'>-		# The argument passed to this method is an array of the entity</div><div class='del'>-		# declaration.  It can be in a number of formats, but in general it</div><div class='del'>-		# returns (example, result):</div><div class='del'>-		#  &lt;!ENTITY % YN '"Yes"'&gt;  </div><div class='del'>-		#  ["%", "YN", "'\"Yes\"'", "\""]</div><div class='del'>-		#  &lt;!ENTITY % YN 'Yes'&gt;</div><div class='del'>-		#  ["%", "YN", "'Yes'", "s"]</div><div class='del'>-		#  &lt;!ENTITY WhatHeSaid "He said %YN;"&gt;</div><div class='del'>-		#  ["WhatHeSaid", "\"He said %YN;\"", "YN"]</div><div class='del'>-		#  &lt;!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"&gt;</div><div class='del'>-		#  ["open-hatch", "SYSTEM", "\"http://www.textuality.com/boilerplate/OpenHatch.xml\""]</div><div class='del'>-		#  &lt;!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"&gt;</div><div class='del'>-		#  ["open-hatch", "PUBLIC", "\"-//Textuality//TEXT Standard open-hatch boilerplate//EN\"", "\"http://www.textuality.com/boilerplate/OpenHatch.xml\""]</div><div class='del'>-		#  &lt;!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif&gt;</div><div class='del'>-		#  ["hatch-pic", "SYSTEM", "\"../grafix/OpenHatch.gif\"", "\n\t\t\t\t\t\t\tNDATA gif", "gif"]</div><div class='del'>-		def entitydecl name, decl</div><div class='del'>-		end</div><div class='del'>-		# &lt;!NOTATION ...&gt;</div><div class='del'>-		def notationdecl content</div><div class='del'>-		end</div><div class='del'>-		# Called when &lt;![CDATA[ ... ]]&gt; is encountered in a document.</div><div class='del'>-		# @p content "..."</div><div class='del'>-		def cdata content</div><div class='del'>-		end</div><div class='del'>-		# Called when an XML PI is encountered in the document.</div><div class='del'>-		# EG: &lt;?xml version="1.0" encoding="utf"?&gt;</div><div class='del'>-		# @p version the version attribute value.  EG, "1.0"</div><div class='del'>-		# @p encoding the encoding attribute value, or nil.  EG, "utf"</div><div class='del'>-		# @p standalone the standalone attribute value, or nil.  EG, nil</div><div class='del'>-    # @p spaced the declaration is followed by a line break</div><div class='del'>-		def xmldecl version, encoding, standalone</div><div class='del'>-		end</div><div class='del'>-		# Called when a comment is encountered.</div><div class='del'>-		# @p comment The content of the comment</div><div class='del'>-		def comment comment</div><div class='del'>-		end</div><div class='del'>-    def progress position</div><div class='del'>-    end</div><div class='del'>-	end	</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/source.rb b/lib/rexml/source.rb<br/>deleted file mode 100644<br/>index ce7a2c98b0..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/source.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/source.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,251 +0,0 @@</div><div class='del'>-require 'rexml/encoding'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  # Generates Source-s.  USE THIS CLASS.</div><div class='del'>-  class SourceFactory</div><div class='del'>-    # Generates a Source object</div><div class='del'>-    # @param arg Either a String, or an IO</div><div class='del'>-    # @return a Source, or nil if a bad argument was given</div><div class='del'>-    def SourceFactory::create_from(arg)</div><div class='del'>-      if arg.kind_of? String</div><div class='del'>-        Source.new(arg)</div><div class='del'>-      elsif arg.respond_to? :read and</div><div class='del'>-            arg.respond_to? :readline and</div><div class='del'>-            arg.respond_to? :nil? and</div><div class='del'>-            arg.respond_to? :eof?</div><div class='del'>-        IOSource.new(arg)</div><div class='del'>-      elsif arg.kind_of? Source</div><div class='del'>-        arg</div><div class='del'>-      else</div><div class='del'>-        raise "#{arg.class} is not a valid input stream.  It must walk \n"+</div><div class='del'>-          "like either a String, an IO, or a Source."</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # A Source can be searched for patterns, and wraps buffers and other</div><div class='del'>-  # objects and provides consumption of text</div><div class='del'>-  class Source</div><div class='del'>-    include Encoding</div><div class='del'>-    # The current buffer (what we're going to read next)</div><div class='del'>-    attr_reader :buffer</div><div class='del'>-    # The line number of the last consumed text</div><div class='del'>-    attr_reader :line</div><div class='del'>-    attr_reader :encoding</div><div class='del'>-</div><div class='del'>-    # Constructor</div><div class='del'>-    # @param arg must be a String, and should be a valid XML document</div><div class='del'>-    # @param encoding if non-null, sets the encoding of the source to this</div><div class='del'>-    # value, overriding all encoding detection</div><div class='del'>-    def initialize(arg, encoding=nil)</div><div class='del'>-      @orig = @buffer = arg</div><div class='del'>-      if encoding</div><div class='del'>-        self.encoding = encoding</div><div class='del'>-      else</div><div class='del'>-        self.encoding = check_encoding( @buffer )</div><div class='del'>-      end</div><div class='del'>-      @line = 0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Inherited from Encoding</div><div class='del'>-    # Overridden to support optimized en/decoding</div><div class='del'>-    def encoding=(enc)</div><div class='del'>-      return unless super</div><div class='del'>-      @line_break = encode( '&gt;' )</div><div class='del'>-      if enc != UTF_8</div><div class='del'>-        @buffer = decode(@buffer)</div><div class='del'>-        @to_utf = true</div><div class='del'>-      else</div><div class='del'>-        @to_utf = false</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Scans the source for a given pattern.  Note, that this is not your</div><div class='del'>-    # usual scan() method.  For one thing, the pattern argument has some</div><div class='del'>-    # requirements; for another, the source can be consumed.  You can easily</div><div class='del'>-    # confuse this method.  Originally, the patterns were easier</div><div class='del'>-    # to construct and this method more robust, because this method </div><div class='del'>-    # generated search regexes on the fly; however, this was </div><div class='del'>-    # computationally expensive and slowed down the entire REXML package </div><div class='del'>-    # considerably, since this is by far the most commonly called method.</div><div class='del'>-    # @param pattern must be a Regexp, and must be in the form of</div><div class='del'>-    # /^\s*(#{your pattern, with no groups})(.*)/.  The first group</div><div class='del'>-    # will be returned; the second group is used if the consume flag is</div><div class='del'>-    # set.</div><div class='del'>-    # @param consume if true, the pattern returned will be consumed, leaving</div><div class='del'>-    # everything after it in the Source.</div><div class='del'>-    # @return the pattern, if found, or nil if the Source is empty or the</div><div class='del'>-    # pattern is not found.</div><div class='del'>-    def scan(pattern, cons=false)</div><div class='del'>-      return nil if @buffer.nil?</div><div class='del'>-      rv = @buffer.scan(pattern)</div><div class='del'>-      @buffer = $' if cons and rv.size&gt;0</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def read</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def consume( pattern )</div><div class='del'>-      @buffer = $' if pattern.match( @buffer )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def match_to( char, pattern )</div><div class='del'>-      return pattern.match(@buffer)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def match_to_consume( char, pattern )</div><div class='del'>-      md = pattern.match(@buffer)</div><div class='del'>-      @buffer = $'</div><div class='del'>-      return md</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def match(pattern, cons=false)</div><div class='del'>-      md = pattern.match(@buffer)</div><div class='del'>-      @buffer = $' if cons and md</div><div class='del'>-      return md</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # @return true if the Source is exhausted</div><div class='del'>-    def empty?</div><div class='del'>-      @buffer == ""</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def position</div><div class='del'>-      @orig.index( @buffer )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # @return the current line in the source</div><div class='del'>-    def current_line</div><div class='del'>-      lines = @orig.split</div><div class='del'>-      res = lines.grep @buffer[0..30]</div><div class='del'>-      res = res[-1] if res.kind_of? Array</div><div class='del'>-      lines.index( res ) if res</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # A Source that wraps an IO.  See the Source class for method</div><div class='del'>-  # documentation</div><div class='del'>-  class IOSource &lt; Source</div><div class='del'>-    #attr_reader :block_size</div><div class='del'>-</div><div class='del'>-    # block_size has been deprecated</div><div class='del'>-    def initialize(arg, block_size=500, encoding=nil)</div><div class='del'>-      @er_source = @source = arg</div><div class='del'>-      @to_utf = false</div><div class='del'>-</div><div class='del'>-      # Determining the encoding is a deceptively difficult issue to resolve.</div><div class='del'>-      # First, we check the first two bytes for UTF-16.  Then we</div><div class='del'>-      # assume that the encoding is at least ASCII enough for the '&gt;', and</div><div class='del'>-      # we read until we get one of those.  This gives us the XML declaration,</div><div class='del'>-      # if there is one.  If there isn't one, the file MUST be UTF-8, as per</div><div class='del'>-      # the XML spec.  If there is one, we can determine the encoding from</div><div class='del'>-      # it.</div><div class='del'>-      @buffer = ""</div><div class='del'>-      str = @source.read( 2 )</div><div class='del'>-      if encoding</div><div class='del'>-        self.encoding = encoding</div><div class='del'>-      elsif 0xfe == str[0] &amp;&amp; 0xff == str[1]</div><div class='del'>-        @line_break = "\000&gt;"</div><div class='del'>-      elsif 0xff == str[0] &amp;&amp; 0xfe == str[1]</div><div class='del'>-        @line_break = "&gt;\000"</div><div class='del'>-      elsif 0xef == str[0] &amp;&amp; 0xbb == str[1]</div><div class='del'>-        str += @source.read(1)</div><div class='del'>-        str = '' if (0xbf == str[2])</div><div class='del'>-        @line_break = "&gt;"</div><div class='del'>-      else</div><div class='del'>-        @line_break = "&gt;"</div><div class='del'>-      end</div><div class='del'>-      super str+@source.readline( @line_break )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def scan(pattern, cons=false)</div><div class='del'>-      rv = super</div><div class='del'>-      # You'll notice that this next section is very similar to the same</div><div class='del'>-      # section in match(), but just a liiittle different.  This is</div><div class='del'>-      # because it is a touch faster to do it this way with scan()</div><div class='del'>-      # than the way match() does it; enough faster to warrent duplicating</div><div class='del'>-      # some code</div><div class='del'>-      if rv.size == 0</div><div class='del'>-        until @buffer =~ pattern or @source.nil?</div><div class='del'>-          begin</div><div class='del'>-            # READLINE OPT</div><div class='del'>-            #str = @source.read(@block_size)</div><div class='del'>-            str = @source.readline(@line_break)</div><div class='del'>-            str = decode(str) if @to_utf and str</div><div class='del'>-            @buffer &lt;&lt; str</div><div class='del'>-          rescue Iconv::IllegalSequence</div><div class='del'>-            raise</div><div class='del'>-          rescue</div><div class='del'>-            @source = nil</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        rv = super</div><div class='del'>-      end</div><div class='del'>-      rv.taint</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def read</div><div class='del'>-      begin</div><div class='del'>-        str = @source.readline(@line_break)</div><div class='del'>-        str = decode(str) if @to_utf and str </div><div class='del'>-        @buffer &lt;&lt; str</div><div class='del'>-      rescue Exception, NameError</div><div class='del'>-        @source = nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def consume( pattern )</div><div class='del'>-      match( pattern, true )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def match( pattern, cons=false )</div><div class='del'>-      rv = pattern.match(@buffer)</div><div class='del'>-      @buffer = $' if cons and rv</div><div class='del'>-      while !rv and @source</div><div class='del'>-        begin</div><div class='del'>-          str = @source.readline(@line_break)</div><div class='del'>-          str = decode(str) if @to_utf and str</div><div class='del'>-          @buffer &lt;&lt; str</div><div class='del'>-          rv = pattern.match(@buffer)</div><div class='del'>-          @buffer = $' if cons and rv</div><div class='del'>-        rescue</div><div class='del'>-          @source = nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      rv.taint</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def empty?</div><div class='del'>-      super and ( @source.nil? || @source.eof? )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def position</div><div class='del'>-      @er_source.stat.pipe? ? 0 : @er_source.pos</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # @return the current line in the source</div><div class='del'>-    def current_line</div><div class='del'>-      begin</div><div class='del'>-        pos = @er_source.pos        # The byte position in the source</div><div class='del'>-        lineno = @er_source.lineno  # The XML &lt; position in the source</div><div class='del'>-        @er_source.rewind</div><div class='del'>-        line = 0                    # The \r\n position in the source</div><div class='del'>-        begin</div><div class='del'>-          while @er_source.pos &lt; pos</div><div class='del'>-            @er_source.readline</div><div class='del'>-            line += 1</div><div class='del'>-          end</div><div class='del'>-        rescue</div><div class='del'>-        end</div><div class='del'>-      rescue IOError</div><div class='del'>-        pos = -1</div><div class='del'>-        line = -1</div><div class='del'>-      end</div><div class='del'>-      [pos, lineno, line]</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/streamlistener.rb b/lib/rexml/streamlistener.rb<br/>deleted file mode 100644<br/>index 6f401125b5..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/streamlistener.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/streamlistener.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,92 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-	# A template for stream parser listeners.</div><div class='del'>-	# Note that the declarations (attlistdecl, elementdecl, etc) are trivially</div><div class='del'>-	# processed; REXML doesn't yet handle doctype entity declarations, so you </div><div class='del'>-	# have to parse them out yourself.</div><div class='del'>-	module StreamListener</div><div class='del'>-		# Called when a tag is encountered.</div><div class='del'>-		# @p name the tag name</div><div class='del'>-		# @p attrs an array of arrays of attribute/value pairs, suitable for</div><div class='del'>-		# use with assoc or rassoc.  IE, &lt;tag attr1="value1" attr2="value2"&gt;</div><div class='del'>-		# will result in </div><div class='del'>-		# tag_start( "tag", # [["attr1","value1"],["attr2","value2"]])</div><div class='del'>-		def tag_start name, attrs</div><div class='del'>-		end</div><div class='del'>-		# Called when the end tag is reached.  In the case of &lt;tag/&gt;, tag_end</div><div class='del'>-		# will be called immidiately after tag_start</div><div class='del'>-		# @p the name of the tag</div><div class='del'>-		def tag_end name</div><div class='del'>-		end</div><div class='del'>-		# Called when text is encountered in the document</div><div class='del'>-		# @p text the text content.</div><div class='del'>-		def text text</div><div class='del'>-		end</div><div class='del'>-		# Called when an instruction is encountered.  EG: &lt;?xsl sheet='foo'?&gt;</div><div class='del'>-		# @p name the instruction name; in the example, "xsl"</div><div class='del'>-		# @p instruction the rest of the instruction.  In the example,</div><div class='del'>-		# "sheet='foo'"</div><div class='del'>-		def instruction name, instruction</div><div class='del'>-		end</div><div class='del'>-		# Called when a comment is encountered.</div><div class='del'>-		# @p comment The content of the comment</div><div class='del'>-		def comment comment</div><div class='del'>-		end</div><div class='del'>-		# Handles a doctype declaration. Any attributes of the doctype which are</div><div class='del'>-		# not supplied will be nil.  # EG, &lt;!DOCTYPE me PUBLIC "foo" "bar"&gt;</div><div class='del'>-		# @p name the name of the doctype; EG, "me"</div><div class='del'>-		# @p pub_sys "PUBLIC", "SYSTEM", or nil.  EG, "PUBLIC"</div><div class='del'>-		# @p long_name the supplied long name, or nil.  EG, "foo"</div><div class='del'>-		# @p uri the uri of the doctype, or nil.  EG, "bar"</div><div class='del'>-		def doctype name, pub_sys, long_name, uri</div><div class='del'>-		end</div><div class='del'>-		# Called when the doctype is done</div><div class='del'>-		def doctype_end</div><div class='del'>-		end</div><div class='del'>-		# If a doctype includes an ATTLIST declaration, it will cause this</div><div class='del'>-		# method to be called.  The content is the declaration itself, unparsed.</div><div class='del'>-		# EG, &lt;!ATTLIST el attr CDATA #REQUIRED&gt; will come to this method as "el</div><div class='del'>-		# attr CDATA #REQUIRED".  This is the same for all of the .*decl</div><div class='del'>-		# methods.</div><div class='del'>-		def attlistdecl element_name, attributes, raw_content</div><div class='del'>-		end</div><div class='del'>-		# &lt;!ELEMENT ...&gt;</div><div class='del'>-		def elementdecl content</div><div class='del'>-		end</div><div class='del'>-		# &lt;!ENTITY ...&gt;</div><div class='del'>-		# The argument passed to this method is an array of the entity</div><div class='del'>-		# declaration.  It can be in a number of formats, but in general it</div><div class='del'>-		# returns (example, result):</div><div class='del'>-		#  &lt;!ENTITY % YN '"Yes"'&gt;  </div><div class='del'>-		#  ["%", "YN", "'\"Yes\"'", "\""]</div><div class='del'>-		#  &lt;!ENTITY % YN 'Yes'&gt;</div><div class='del'>-		#  ["%", "YN", "'Yes'", "s"]</div><div class='del'>-		#  &lt;!ENTITY WhatHeSaid "He said %YN;"&gt;</div><div class='del'>-		#  ["WhatHeSaid", "\"He said %YN;\"", "YN"]</div><div class='del'>-		#  &lt;!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"&gt;</div><div class='del'>-		#  ["open-hatch", "SYSTEM", "\"http://www.textuality.com/boilerplate/OpenHatch.xml\""]</div><div class='del'>-		#  &lt;!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"&gt;</div><div class='del'>-		#  ["open-hatch", "PUBLIC", "\"-//Textuality//TEXT Standard open-hatch boilerplate//EN\"", "\"http://www.textuality.com/boilerplate/OpenHatch.xml\""]</div><div class='del'>-		#  &lt;!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif&gt;</div><div class='del'>-		#  ["hatch-pic", "SYSTEM", "\"../grafix/OpenHatch.gif\"", "\n\t\t\t\t\t\t\tNDATA gif", "gif"]</div><div class='del'>-		def entitydecl content</div><div class='del'>-		end</div><div class='del'>-		# &lt;!NOTATION ...&gt;</div><div class='del'>-		def notationdecl content</div><div class='del'>-		end</div><div class='del'>-		# Called when %foo; is encountered in a doctype declaration.</div><div class='del'>-		# @p content "foo"</div><div class='del'>-		def entity content</div><div class='del'>-		end</div><div class='del'>-		# Called when &lt;![CDATA[ ... ]]&gt; is encountered in a document.</div><div class='del'>-		# @p content "..."</div><div class='del'>-		def cdata content</div><div class='del'>-		end</div><div class='del'>-		# Called when an XML PI is encountered in the document.</div><div class='del'>-		# EG: &lt;?xml version="1.0" encoding="utf"?&gt;</div><div class='del'>-		# @p version the version attribute value.  EG, "1.0"</div><div class='del'>-		# @p encoding the encoding attribute value, or nil.  EG, "utf"</div><div class='del'>-		# @p standalone the standalone attribute value, or nil.  EG, nil</div><div class='del'>-		def xmldecl version, encoding, standalone</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/syncenumerator.rb b/lib/rexml/syncenumerator.rb<br/>deleted file mode 100644<br/>index 955e006cb2..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/syncenumerator.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/syncenumerator.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,33 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  class SyncEnumerator</div><div class='del'>-    include Enumerable</div><div class='del'>-</div><div class='del'>-    # Creates a new SyncEnumerator which enumerates rows of given</div><div class='del'>-    # Enumerable objects.</div><div class='del'>-    def initialize(*enums)</div><div class='del'>-      @gens = enums</div><div class='del'>-      @biggest = @gens[0]</div><div class='del'>-      @gens.each {|x| @biggest = x if x.size &gt; @biggest.size }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the number of enumerated Enumerable objects, i.e. the size</div><div class='del'>-    # of each row.</div><div class='del'>-    def size</div><div class='del'>-      @gens.size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the number of enumerated Enumerable objects, i.e. the size</div><div class='del'>-    # of each row.</div><div class='del'>-    def length</div><div class='del'>-      @gens.length</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Enumerates rows of the Enumerable objects.</div><div class='del'>-    def each</div><div class='del'>-      @biggest.zip( *@gens ) {|a|</div><div class='del'>-        yield(*a[1..-1])</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='head'>diff --git a/lib/rexml/text.rb b/lib/rexml/text.rb<br/>deleted file mode 100644<br/>index 2bc00429b3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/text.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/text.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,344 +0,0 @@</div><div class='del'>-require 'rexml/entity'</div><div class='del'>-require 'rexml/doctype'</div><div class='del'>-require 'rexml/child'</div><div class='del'>-require 'rexml/doctype'</div><div class='del'>-require 'rexml/parseexception'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  # Represents text nodes in an XML document</div><div class='del'>-  class Text &lt; Child</div><div class='del'>-    include Comparable</div><div class='del'>-    # The order in which the substitutions occur</div><div class='del'>-    SPECIALS = [ /&amp;(?!#?[\w-]+;)/u, /&lt;/u, /&gt;/u, /"/u, /'/u, /\r/u ]</div><div class='del'>-    SUBSTITUTES = ['&amp;amp;', '&amp;lt;', '&amp;gt;', '&amp;quot;', '&amp;apos;', '&amp;#13;']</div><div class='del'>-    # Characters which are substituted in written strings</div><div class='del'>-    SLAICEPS = [ '&lt;', '&gt;', '"', "'", '&amp;' ]</div><div class='del'>-    SETUTITSBUS = [ /&amp;lt;/u, /&amp;gt;/u, /&amp;quot;/u, /&amp;apos;/u, /&amp;amp;/u ]</div><div class='del'>-</div><div class='del'>-    # If +raw+ is true, then REXML leaves the value alone</div><div class='del'>-    attr_accessor :raw</div><div class='del'>-</div><div class='del'>-    ILLEGAL = /(&lt;|&amp;(?!(#{Entity::NAME})|(#0*((?:\d+)|(?:x[a-fA-F0-9]+)));))/um</div><div class='del'>-    NUMERICENTITY = /&amp;#0*((?:\d+)|(?:x[a-fA-F0-9]+));/ </div><div class='del'>-</div><div class='del'>-    # Constructor</div><div class='del'>-    # +arg+ if a String, the content is set to the String.  If a Text,</div><div class='del'>-    # the object is shallowly cloned.  </div><div class='del'>-    #</div><div class='del'>-    # +respect_whitespace+ (boolean, false) if true, whitespace is</div><div class='del'>-    # respected</div><div class='del'>-    #</div><div class='del'>-    # +parent+ (nil) if this is a Parent object, the parent</div><div class='del'>-    # will be set to this.  </div><div class='del'>-    #</div><div class='del'>-    # +raw+ (nil) This argument can be given three values.</div><div class='del'>-    # If true, then the value of used to construct this object is expected to </div><div class='del'>-    # contain no unescaped XML markup, and REXML will not change the text. If </div><div class='del'>-    # this value is false, the string may contain any characters, and REXML will</div><div class='del'>-    # escape any and all defined entities whose values are contained in the</div><div class='del'>-    # text.  If this value is nil (the default), then the raw value of the </div><div class='del'>-    # parent will be used as the raw value for this node.  If there is no raw</div><div class='del'>-    # value for the parent, and no value is supplied, the default is false.</div><div class='del'>-    # Use this field if you have entities defined for some text, and you don't</div><div class='del'>-    # want REXML to escape that text in output.</div><div class='del'>-    #   Text.new( "&lt;&amp;", false, nil, false ) #-&gt; "&amp;lt;&amp;amp;"</div><div class='del'>-    #   Text.new( "&amp;lt;&amp;amp;", false, nil, false ) #-&gt; "&amp;amp;lt;&amp;amp;amp;"</div><div class='del'>-    #   Text.new( "&lt;&amp;", false, nil, true )  #-&gt; Parse exception</div><div class='del'>-    #   Text.new( "&amp;lt;&amp;amp;", false, nil, true )  #-&gt; "&amp;lt;&amp;amp;"</div><div class='del'>-    #   # Assume that the entity "s" is defined to be "sean"</div><div class='del'>-    #   # and that the entity    "r" is defined to be "russell"</div><div class='del'>-    #   Text.new( "sean russell" )          #-&gt; "&amp;s; &amp;r;"</div><div class='del'>-    #   Text.new( "sean russell", false, nil, true ) #-&gt; "sean russell"</div><div class='del'>-    #</div><div class='del'>-    # +entity_filter+ (nil) This can be an array of entities to match in the</div><div class='del'>-    # supplied text.  This argument is only useful if +raw+ is set to false.</div><div class='del'>-    #   Text.new( "sean russell", false, nil, false, ["s"] ) #-&gt; "&amp;s; russell"</div><div class='del'>-    #   Text.new( "sean russell", false, nil, true, ["s"] ) #-&gt; "sean russell"</div><div class='del'>-    # In the last example, the +entity_filter+ argument is ignored.</div><div class='del'>-    #</div><div class='del'>-    # +pattern+ INTERNAL USE ONLY</div><div class='del'>-    def initialize(arg, respect_whitespace=false, parent=nil, raw=nil, </div><div class='del'>-      entity_filter=nil, illegal=ILLEGAL )</div><div class='del'>-</div><div class='del'>-      @raw = false</div><div class='del'>-</div><div class='del'>-      if parent</div><div class='del'>-        super( parent )</div><div class='del'>-        @raw = parent.raw </div><div class='del'>-      else</div><div class='del'>-        @parent = nil</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @raw = raw unless raw.nil?</div><div class='del'>-      @entity_filter = entity_filter</div><div class='del'>-      @normalized = @unnormalized = nil</div><div class='del'>-</div><div class='del'>-      if arg.kind_of? String</div><div class='del'>-        @string = arg.clone</div><div class='del'>-        @string.squeeze!(" \n\t") unless respect_whitespace</div><div class='del'>-      elsif arg.kind_of? Text</div><div class='del'>-        @string = arg.to_s</div><div class='del'>-        @raw = arg.raw</div><div class='del'>-      elsif</div><div class='del'>-        raise "Illegal argument of type #{arg.type} for Text constructor (#{arg})"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @string.gsub!( /\r\n?/, "\n" )</div><div class='del'>-</div><div class='del'>-      # check for illegal characters</div><div class='del'>-      if @raw</div><div class='del'>-        if @string =~ illegal</div><div class='del'>-          raise "Illegal character '#{$1}' in raw string \"#{@string}\""</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def node_type</div><div class='del'>-      :text</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def empty?</div><div class='del'>-      @string.size==0</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def clone</div><div class='del'>-      return Text.new(self)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Appends text to this text node.  The text is appended in the +raw+ mode</div><div class='del'>-    # of this text node.</div><div class='del'>-    def &lt;&lt;( to_append )</div><div class='del'>-      @string &lt;&lt; to_append.gsub( /\r\n?/, "\n" )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # +other+ a String or a Text</div><div class='del'>-    # +returns+ the result of (to_s &lt;=&gt; arg.to_s)</div><div class='del'>-    def &lt;=&gt;( other )</div><div class='del'>-      to_s() &lt;=&gt; other.to_s</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    REFERENCE = /#{Entity::REFERENCE}/</div><div class='del'>-    # Returns the string value of this text node.  This string is always</div><div class='del'>-    # escaped, meaning that it is a valid XML text node string, and all</div><div class='del'>-    # entities that can be escaped, have been inserted.  This method respects</div><div class='del'>-    # the entity filter set in the constructor.</div><div class='del'>-    #   </div><div class='del'>-    #   # Assume that the entity "s" is defined to be "sean", and that the </div><div class='del'>-    #   # entity "r" is defined to be "russell"</div><div class='del'>-    #   t = Text.new( "&lt; &amp; sean russell", false, nil, false, ['s'] ) </div><div class='del'>-    #   t.to_s   #-&gt; "&amp;lt; &amp;amp; &amp;s; russell"</div><div class='del'>-    #   t = Text.new( "&lt; &amp; &amp;s; russell", false, nil, false ) </div><div class='del'>-    #   t.to_s   #-&gt; "&amp;lt; &amp;amp; &amp;s; russell"</div><div class='del'>-    #   u = Text.new( "sean russell", false, nil, true )</div><div class='del'>-    #   u.to_s   #-&gt; "sean russell"</div><div class='del'>-    def to_s</div><div class='del'>-      return @string if @raw</div><div class='del'>-      return @normalized if @normalized</div><div class='del'>-</div><div class='del'>-      doctype = nil</div><div class='del'>-      if @parent</div><div class='del'>-        doc = @parent.document</div><div class='del'>-        doctype = doc.doctype if doc</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @normalized = Text::normalize( @string, doctype, @entity_filter )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      @string.inspect</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Returns the string value of this text.  This is the text without</div><div class='del'>-    # entities, as it might be used programmatically, or printed to the</div><div class='del'>-    # console.  This ignores the 'raw' attribute setting, and any</div><div class='del'>-    # entity_filter.</div><div class='del'>-    #</div><div class='del'>-    #   # Assume that the entity "s" is defined to be "sean", and that the </div><div class='del'>-    #   # entity "r" is defined to be "russell"</div><div class='del'>-    #   t = Text.new( "&lt; &amp; sean russell", false, nil, false, ['s'] ) </div><div class='del'>-    #   t.value   #-&gt; "&lt; &amp; sean russell"</div><div class='del'>-    #   t = Text.new( "&lt; &amp; &amp;s; russell", false, nil, false )</div><div class='del'>-    #   t.value   #-&gt; "&lt; &amp; sean russell"</div><div class='del'>-    #   u = Text.new( "sean russell", false, nil, true )</div><div class='del'>-    #   u.value   #-&gt; "sean russell"</div><div class='del'>-    def value</div><div class='del'>-      @unnormalized if @unnormalized</div><div class='del'>-      doctype = nil</div><div class='del'>-      if @parent</div><div class='del'>-        doc = @parent.document</div><div class='del'>-        doctype = doc.doctype if doc</div><div class='del'>-      end</div><div class='del'>-      @unnormalized = Text::unnormalize( @string, doctype )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Sets the contents of this text node.  This expects the text to be </div><div class='del'>-    # unnormalized.  It returns self.</div><div class='del'>-    #</div><div class='del'>-    #   e = Element.new( "a" )</div><div class='del'>-    #   e.add_text( "foo" )   # &lt;a&gt;foo&lt;/a&gt;</div><div class='del'>-    #   e[0].value = "bar"    # &lt;a&gt;bar&lt;/a&gt;</div><div class='del'>-    #   e[0].value = "&lt;a&gt;"    # &lt;a&gt;&amp;lt;a&amp;gt;&lt;/a&gt;</div><div class='del'>-    def value=( val )</div><div class='del'>-      @string = val.gsub( /\r\n?/, "\n" )</div><div class='del'>-      @unnormalized = nil</div><div class='del'>-      @normalized = nil</div><div class='del'>-      @raw = false</div><div class='del'>-    end</div><div class='del'>- </div><div class='del'>-     def wrap(string, width, addnewline=false)</div><div class='del'>-       # Recursively wrap string at width.</div><div class='del'>-       return string if string.length &lt;= width</div><div class='del'>-       place = string.rindex(' ', width) # Position in string with last ' ' before cutoff</div><div class='del'>-       if addnewline then</div><div class='del'>-         return "\n" + string[0,place] + "\n" + wrap(string[place+1..-1], width)</div><div class='del'>-       else</div><div class='del'>-         return string[0,place] + "\n" + wrap(string[place+1..-1], width)</div><div class='del'>-       end</div><div class='del'>-     end</div><div class='del'>-</div><div class='del'>-    def indent_text(string, level=1, style="\t", indentfirstline=true)</div><div class='del'>-      return string if level &lt; 0</div><div class='del'>-      new_string = ''</div><div class='del'>-      string.each { |line|</div><div class='del'>-        indent_string = style * level</div><div class='del'>-        new_line = (indent_string + line).sub(/[\s]+$/,'')</div><div class='del'>-        new_string &lt;&lt; new_line</div><div class='del'>-      }</div><div class='del'>-      new_string.strip! unless indentfirstline</div><div class='del'>-      return new_string</div><div class='del'>-    end</div><div class='del'>- </div><div class='del'>-    # == DEPRECATED</div><div class='del'>-    # See REXML::Formatters</div><div class='del'>-    #</div><div class='del'>-    def write( writer, indent=-1, transitive=false, ie_hack=false ) </div><div class='del'>-      Kernel.warn("#{self.class.name}.write is deprecated.  See REXML::Formatters")</div><div class='del'>-      formatter = if indent &gt; -1</div><div class='del'>-          REXML::Formatters::Pretty.new( indent )</div><div class='del'>-        else</div><div class='del'>-          REXML::Formatters::Default.new</div><div class='del'>-        end</div><div class='del'>-      formatter.write( self, writer )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # FIXME</div><div class='del'>-    # This probably won't work properly</div><div class='del'>-    def xpath</div><div class='del'>-      path = @parent.xpath</div><div class='del'>-      path += "/text()"</div><div class='del'>-      return path</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Writes out text, substituting special characters beforehand.</div><div class='del'>-    # +out+ A String, IO, or any other object supporting &lt;&lt;( String )</div><div class='del'>-    # +input+ the text to substitute and the write out</div><div class='del'>-    #</div><div class='del'>-    #   z=utf8.unpack("U*")</div><div class='del'>-    #   ascOut=""</div><div class='del'>-    #   z.each{|r|</div><div class='del'>-    #     if r &lt;  0x100</div><div class='del'>-    #       ascOut.concat(r.chr)</div><div class='del'>-    #     else</div><div class='del'>-    #       ascOut.concat(sprintf("&amp;#x%x;", r))</div><div class='del'>-    #     end</div><div class='del'>-    #   }</div><div class='del'>-    #   puts ascOut</div><div class='del'>-    def write_with_substitution out, input</div><div class='del'>-      copy = input.clone</div><div class='del'>-      # Doing it like this rather than in a loop improves the speed</div><div class='del'>-      copy.gsub!( SPECIALS[0], SUBSTITUTES[0] )</div><div class='del'>-      copy.gsub!( SPECIALS[1], SUBSTITUTES[1] )</div><div class='del'>-      copy.gsub!( SPECIALS[2], SUBSTITUTES[2] )</div><div class='del'>-      copy.gsub!( SPECIALS[3], SUBSTITUTES[3] )</div><div class='del'>-      copy.gsub!( SPECIALS[4], SUBSTITUTES[4] )</div><div class='del'>-      copy.gsub!( SPECIALS[5], SUBSTITUTES[5] )</div><div class='del'>-      out &lt;&lt; copy</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Reads text, substituting entities</div><div class='del'>-    def Text::read_with_substitution( input, illegal=nil )</div><div class='del'>-      copy = input.clone</div><div class='del'>-</div><div class='del'>-      if copy =~ illegal</div><div class='del'>-        raise ParseException.new( "malformed text: Illegal character #$&amp; in \"#{copy}\"" )</div><div class='del'>-      end if illegal</div><div class='del'>-      </div><div class='del'>-      copy.gsub!( /\r\n?/, "\n" )</div><div class='del'>-      if copy.include? ?&amp;</div><div class='del'>-        copy.gsub!( SETUTITSBUS[0], SLAICEPS[0] )</div><div class='del'>-        copy.gsub!( SETUTITSBUS[1], SLAICEPS[1] )</div><div class='del'>-        copy.gsub!( SETUTITSBUS[2], SLAICEPS[2] )</div><div class='del'>-        copy.gsub!( SETUTITSBUS[3], SLAICEPS[3] )</div><div class='del'>-        copy.gsub!( SETUTITSBUS[4], SLAICEPS[4] )</div><div class='del'>-        copy.gsub!( /&amp;#0*((?:\d+)|(?:x[a-f0-9]+));/ ) {|m|</div><div class='del'>-          m=$1</div><div class='del'>-          #m='0' if m==''</div><div class='del'>-          m = "0#{m}" if m[0] == ?x</div><div class='del'>-          [Integer(m)].pack('U*')</div><div class='del'>-        }</div><div class='del'>-      end</div><div class='del'>-      copy</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    EREFERENCE = /&amp;(?!#{Entity::NAME};)/</div><div class='del'>-    # Escapes all possible entities</div><div class='del'>-    def Text::normalize( input, doctype=nil, entity_filter=nil )</div><div class='del'>-      copy = input</div><div class='del'>-      # Doing it like this rather than in a loop improves the speed</div><div class='del'>-      #copy = copy.gsub( EREFERENCE, '&amp;amp;' )</div><div class='del'>-      copy = copy.gsub( "&amp;", "&amp;amp;" )</div><div class='del'>-      if doctype</div><div class='del'>-        # Replace all ampersands that aren't part of an entity</div><div class='del'>-        doctype.entities.each_value do |entity|</div><div class='del'>-          copy = copy.gsub( entity.value, </div><div class='del'>-            "&amp;#{entity.name};" ) if entity.value and </div><div class='del'>-              not( entity_filter and entity_filter.include?(entity) )</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        # Replace all ampersands that aren't part of an entity</div><div class='del'>-        DocType::DEFAULT_ENTITIES.each_value do |entity|</div><div class='del'>-          copy = copy.gsub(entity.value, "&amp;#{entity.name};" )</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      copy</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Unescapes all possible entities</div><div class='del'>-    def Text::unnormalize( string, doctype=nil, filter=nil, illegal=nil )</div><div class='del'>-      rv = string.clone</div><div class='del'>-      rv.gsub!( /\r\n?/, "\n" )</div><div class='del'>-      matches = rv.scan( REFERENCE )</div><div class='del'>-      return rv if matches.size == 0</div><div class='del'>-      rv.gsub!( NUMERICENTITY ) {|m|</div><div class='del'>-        m=$1</div><div class='del'>-        m = "0#{m}" if m[0] == ?x</div><div class='del'>-        [Integer(m)].pack('U*')</div><div class='del'>-      }</div><div class='del'>-      matches.collect!{|x|x[0]}.compact!</div><div class='del'>-      if matches.size &gt; 0</div><div class='del'>-        if doctype</div><div class='del'>-          matches.each do |entity_reference|</div><div class='del'>-            unless filter and filter.include?(entity_reference)</div><div class='del'>-              entity_value = doctype.entity( entity_reference )</div><div class='del'>-              re = /&amp;#{entity_reference};/</div><div class='del'>-              rv.gsub!( re, entity_value ) if entity_value</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          matches.each do |entity_reference|</div><div class='del'>-            unless filter and filter.include?(entity_reference)</div><div class='del'>-              entity_value = DocType::DEFAULT_ENTITIES[ entity_reference ]</div><div class='del'>-              re = /&amp;#{entity_reference};/</div><div class='del'>-              rv.gsub!( re, entity_value.value ) if entity_value</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        rv.gsub!( /&amp;amp;/, '&amp;' )</div><div class='del'>-      end</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/undefinednamespaceexception.rb b/lib/rexml/undefinednamespaceexception.rb<br/>deleted file mode 100644<br/>index 8ebfdfd0a9..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/undefinednamespaceexception.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/undefinednamespaceexception.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,8 +0,0 @@</div><div class='del'>-require 'rexml/parseexception'</div><div class='del'>-module REXML</div><div class='del'>-  class UndefinedNamespaceException &lt; ParseException</div><div class='del'>-    def initialize( prefix, source, parser )</div><div class='del'>-      super( "Undefined prefix #{prefix} found" )</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/validation/relaxng.rb b/lib/rexml/validation/relaxng.rb<br/>deleted file mode 100644<br/>index 969f51bc95..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/validation/relaxng.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/validation/relaxng.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,559 +0,0 @@</div><div class='del'>-require "rexml/validation/validation"</div><div class='del'>-require "rexml/parsers/baseparser"</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Validation</div><div class='del'>-    # Implemented:</div><div class='del'>-    # * empty</div><div class='del'>-    # * element</div><div class='del'>-    # * attribute</div><div class='del'>-    # * text</div><div class='del'>-    # * optional</div><div class='del'>-    # * choice</div><div class='del'>-    # * oneOrMore</div><div class='del'>-    # * zeroOrMore</div><div class='del'>-    # * group</div><div class='del'>-    # * value</div><div class='del'>-    # * interleave</div><div class='del'>-    # * mixed</div><div class='del'>-    # * ref</div><div class='del'>-    # * grammar</div><div class='del'>-    # * start</div><div class='del'>-    # * define</div><div class='del'>-    #</div><div class='del'>-    # Not implemented:</div><div class='del'>-    # * data</div><div class='del'>-    # * param</div><div class='del'>-    # * include</div><div class='del'>-    # * externalRef</div><div class='del'>-    # * notAllowed</div><div class='del'>-    # * anyName</div><div class='del'>-    # * nsName</div><div class='del'>-    # * except</div><div class='del'>-    # * name</div><div class='del'>-    class RelaxNG</div><div class='del'>-      include Validator</div><div class='del'>-</div><div class='del'>-      INFINITY = 1.0 / 0.0</div><div class='del'>-      EMPTY = Event.new( nil )</div><div class='del'>-      TEXT = [:start_element, "text"]</div><div class='del'>-      attr_accessor :current</div><div class='del'>-      attr_accessor :count</div><div class='del'>-      attr_reader :references</div><div class='del'>-</div><div class='del'>-      # FIXME: Namespaces</div><div class='del'>-      def initialize source</div><div class='del'>-        parser = REXML::Parsers::BaseParser.new( source )</div><div class='del'>-</div><div class='del'>-        @count = 0</div><div class='del'>-        @references = {}</div><div class='del'>-        @root = @current = Sequence.new(self)</div><div class='del'>-        @root.previous = true</div><div class='del'>-        states = [ @current ]</div><div class='del'>-        begin</div><div class='del'>-          event = parser.pull</div><div class='del'>-          case event[0]</div><div class='del'>-          when :start_element</div><div class='del'>-            case event[1]</div><div class='del'>-            when "empty"</div><div class='del'>-            when "element", "attribute", "text", "value"</div><div class='del'>-              states[-1] &lt;&lt; event</div><div class='del'>-            when "optional"</div><div class='del'>-              states &lt;&lt; Optional.new( self )</div><div class='del'>-              states[-2] &lt;&lt; states[-1]</div><div class='del'>-            when "choice"</div><div class='del'>-              states &lt;&lt; Choice.new( self )</div><div class='del'>-              states[-2] &lt;&lt; states[-1]</div><div class='del'>-            when "oneOrMore"</div><div class='del'>-              states &lt;&lt; OneOrMore.new( self )</div><div class='del'>-              states[-2] &lt;&lt; states[-1]</div><div class='del'>-            when "zeroOrMore"</div><div class='del'>-              states &lt;&lt; ZeroOrMore.new( self )</div><div class='del'>-              states[-2] &lt;&lt; states[-1]</div><div class='del'>-            when "group"</div><div class='del'>-              states &lt;&lt; Sequence.new( self )</div><div class='del'>-              states[-2] &lt;&lt; states[-1]</div><div class='del'>-            when "interleave"</div><div class='del'>-              states &lt;&lt; Interleave.new( self )</div><div class='del'>-              states[-2] &lt;&lt; states[-1]</div><div class='del'>-            when "mixed"</div><div class='del'>-              states &lt;&lt; Interleave.new( self )</div><div class='del'>-              states[-2] &lt;&lt; states[-1]</div><div class='del'>-              states[-1] &lt;&lt; TEXT </div><div class='del'>-            when "define"</div><div class='del'>-              states &lt;&lt; [ event[2]["name"] ]</div><div class='del'>-            when "ref"</div><div class='del'>-              states[-1] &lt;&lt; Ref.new( event[2]["name"] )</div><div class='del'>-            when "anyName"</div><div class='del'>-              states &lt;&lt; AnyName.new( self )</div><div class='del'>-              states[-2] &lt;&lt; states[-1]</div><div class='del'>-            when "nsName"</div><div class='del'>-            when "except"</div><div class='del'>-            when "name"</div><div class='del'>-            when "data"</div><div class='del'>-            when "param"</div><div class='del'>-            when "include"</div><div class='del'>-            when "grammar"</div><div class='del'>-            when "start"</div><div class='del'>-            when "externalRef"</div><div class='del'>-            when "notAllowed"</div><div class='del'>-            end</div><div class='del'>-          when :end_element</div><div class='del'>-            case event[1]</div><div class='del'>-            when "element", "attribute"</div><div class='del'>-              states[-1] &lt;&lt; event</div><div class='del'>-            when "zeroOrMore", "oneOrMore", "choice", "optional", </div><div class='del'>-              "interleave", "group", "mixed"</div><div class='del'>-              states.pop</div><div class='del'>-            when "define"</div><div class='del'>-              ref = states.pop</div><div class='del'>-              @references[ ref.shift ] = ref</div><div class='del'>-            #when "empty"</div><div class='del'>-            end</div><div class='del'>-          when :end_document</div><div class='del'>-            states[-1] &lt;&lt; event</div><div class='del'>-          when :text</div><div class='del'>-            states[-1] &lt;&lt; event</div><div class='del'>-          end</div><div class='del'>-        end while event[0] != :end_document</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def receive event</div><div class='del'>-        validate( event )</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class State</div><div class='del'>-      def initialize( context )</div><div class='del'>-        @previous = []</div><div class='del'>-        @events = []</div><div class='del'>-        @current = 0</div><div class='del'>-        @count = context.count += 1</div><div class='del'>-        @references = context.references</div><div class='del'>-        @value = false</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def reset</div><div class='del'>-        return if @current == 0</div><div class='del'>-        @current = 0</div><div class='del'>-        @events.each {|s| s.reset if s.kind_of? State }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def previous=( previous ) </div><div class='del'>-        @previous &lt;&lt; previous</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def next( event )</div><div class='del'>-        #print "In next with #{event.inspect}.  "</div><div class='del'>-        #puts "Next (#@current) is #{@events[@current]}"</div><div class='del'>-        #p @previous</div><div class='del'>-        return @previous.pop.next( event ) if @events[@current].nil?</div><div class='del'>-        expand_ref_in( @events, @current ) if @events[@current].class == Ref</div><div class='del'>-        if ( @events[@current].kind_of? State )</div><div class='del'>-          @current += 1</div><div class='del'>-          @events[@current-1].previous = self</div><div class='del'>-          return @events[@current-1].next( event )</div><div class='del'>-        end</div><div class='del'>-        #puts "Current isn't a state"</div><div class='del'>-        if ( @events[@current].matches?(event) )</div><div class='del'>-          @current += 1</div><div class='del'>-          if @events[@current].nil?</div><div class='del'>-            #puts "#{inspect[0,5]} 1RETURNING #{@previous.inspect[0,5]}"</div><div class='del'>-            return @previous.pop</div><div class='del'>-          elsif @events[@current].kind_of? State</div><div class='del'>-            @current += 1</div><div class='del'>-            #puts "#{inspect[0,5]} 2RETURNING (#{@current-1}) #{@events[@current-1].inspect[0,5]}; on return, next is #{@events[@current]}"</div><div class='del'>-            @events[@current-1].previous = self</div><div class='del'>-            return @events[@current-1]</div><div class='del'>-          else</div><div class='del'>-            #puts "#{inspect[0,5]} RETURNING self w/ next(#@current) = #{@events[@current]}"</div><div class='del'>-            return self</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_s</div><div class='del'>-        # Abbreviated:</div><div class='del'>-        self.class.name =~ /(?:::)(\w)\w+$/</div><div class='del'>-        # Full:</div><div class='del'>-        #self.class.name =~ /(?:::)(\w+)$/</div><div class='del'>-        "#$1.#@count"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def inspect</div><div class='del'>-        "&lt; #{to_s} #{@events.collect{|e| </div><div class='del'>-          pre = e == @events[@current] ? '#' : ''</div><div class='del'>-          pre + e.inspect unless self == e</div><div class='del'>-        }.join(', ')} &gt;"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def expected</div><div class='del'>-        return [@events[@current]]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def &lt;&lt;( event )</div><div class='del'>-        add_event_to_arry( @events, event )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      protected</div><div class='del'>-      def expand_ref_in( arry, ind )</div><div class='del'>-        new_events = []</div><div class='del'>-        @references[ arry[ind].to_s ].each{ |evt| </div><div class='del'>-          add_event_to_arry(new_events,evt)</div><div class='del'>-        }</div><div class='del'>-        arry[ind,1] = new_events</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_event_to_arry( arry, evt ) </div><div class='del'>-        evt = generate_event( evt )</div><div class='del'>-        if evt.kind_of? String </div><div class='del'>-          arry[-1].event_arg = evt if arry[-1].kind_of? Event and @value</div><div class='del'>-          @value = false</div><div class='del'>-        else</div><div class='del'>-          arry &lt;&lt; evt</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def generate_event( event )</div><div class='del'>-        return event if event.kind_of? State or event.class == Ref</div><div class='del'>-        evt = nil</div><div class='del'>-        arg = nil</div><div class='del'>-        case event[0]</div><div class='del'>-        when :start_element</div><div class='del'>-          case event[1]</div><div class='del'>-          when "element"</div><div class='del'>-            evt = :start_element</div><div class='del'>-            arg = event[2]["name"]</div><div class='del'>-          when "attribute"</div><div class='del'>-            evt = :start_attribute</div><div class='del'>-            arg = event[2]["name"]</div><div class='del'>-          when "text"</div><div class='del'>-            evt = :text</div><div class='del'>-          when "value"</div><div class='del'>-            evt = :text</div><div class='del'>-            @value = true</div><div class='del'>-          end</div><div class='del'>-        when :text</div><div class='del'>-          return event[1]</div><div class='del'>-        when :end_document</div><div class='del'>-          return Event.new( event[0] )</div><div class='del'>-        else # then :end_element</div><div class='del'>-          case event[1]</div><div class='del'>-          when "element"</div><div class='del'>-            evt = :end_element</div><div class='del'>-          when "attribute"</div><div class='del'>-            evt = :end_attribute</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        return Event.new( evt, arg )</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    class Sequence &lt; State</div><div class='del'>-      def matches?(event)</div><div class='del'>-        @events[@current].matches?( event )</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    class Optional &lt; State</div><div class='del'>-      def next( event )</div><div class='del'>-        if @current == 0</div><div class='del'>-          rv = super</div><div class='del'>-          return rv if rv</div><div class='del'>-          @prior = @previous.pop</div><div class='del'>-          return @prior.next( event )</div><div class='del'>-        end</div><div class='del'>-        super</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def matches?(event)</div><div class='del'>-        @events[@current].matches?(event) || </div><div class='del'>-        (@current == 0 and @previous[-1].matches?(event))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def expected</div><div class='del'>-        return [ @prior.expected, @events[0] ].flatten if @current == 0</div><div class='del'>-        return [@events[@current]]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    class ZeroOrMore &lt; Optional</div><div class='del'>-      def next( event )</div><div class='del'>-        expand_ref_in( @events, @current ) if @events[@current].class == Ref</div><div class='del'>-        if ( @events[@current].matches?(event) )</div><div class='del'>-          @current += 1</div><div class='del'>-          if @events[@current].nil?</div><div class='del'>-            @current = 0</div><div class='del'>-            return self</div><div class='del'>-          elsif @events[@current].kind_of? State</div><div class='del'>-            @current += 1</div><div class='del'>-            @events[@current-1].previous = self</div><div class='del'>-            return @events[@current-1]</div><div class='del'>-          else</div><div class='del'>-            return self</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          @prior = @previous.pop</div><div class='del'>-          return @prior.next( event ) if @current == 0</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def expected</div><div class='del'>-        return [ @prior.expected, @events[0] ].flatten if @current == 0</div><div class='del'>-        return [@events[@current]]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    class OneOrMore &lt; State</div><div class='del'>-      def initialize context</div><div class='del'>-        super</div><div class='del'>-        @ord = 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def reset</div><div class='del'>-        super </div><div class='del'>-        @ord = 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def next( event )</div><div class='del'>-        expand_ref_in( @events, @current ) if @events[@current].class == Ref</div><div class='del'>-        if ( @events[@current].matches?(event) )</div><div class='del'>-          @current += 1</div><div class='del'>-          @ord += 1</div><div class='del'>-          if @events[@current].nil?</div><div class='del'>-            @current = 0</div><div class='del'>-            return self</div><div class='del'>-          elsif @events[@current].kind_of? State</div><div class='del'>-            @current += 1</div><div class='del'>-            @events[@current-1].previous = self</div><div class='del'>-            return @events[@current-1]</div><div class='del'>-          else</div><div class='del'>-            return self</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          return @previous.pop.next( event ) if @current == 0 and @ord &gt; 0</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def matches?( event )</div><div class='del'>-        @events[@current].matches?(event) || </div><div class='del'>-        (@current == 0 and @ord &gt; 0 and @previous[-1].matches?(event))</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def expected</div><div class='del'>-        if @current == 0 and @ord &gt; 0</div><div class='del'>-          return [@previous[-1].expected, @events[0]].flatten</div><div class='del'>-        else</div><div class='del'>-          return [@events[@current]]</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 Choice &lt; State</div><div class='del'>-      def initialize context</div><div class='del'>-        super</div><div class='del'>-        @choices = []</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def reset</div><div class='del'>-        super</div><div class='del'>-        @events = []</div><div class='del'>-        @choices.each { |c| c.each { |s| s.reset if s.kind_of? State } }</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def &lt;&lt;( event )</div><div class='del'>-        add_event_to_arry( @choices, event )</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def next( event )</div><div class='del'>-        # Make the choice if we haven't</div><div class='del'>-        if @events.size == 0</div><div class='del'>-          c = 0 ; max = @choices.size</div><div class='del'>-          while c &lt; max</div><div class='del'>-            if @choices[c][0].class == Ref</div><div class='del'>-              expand_ref_in( @choices[c], 0 )</div><div class='del'>-              @choices += @choices[c]</div><div class='del'>-              @choices.delete( @choices[c] )</div><div class='del'>-              max -= 1</div><div class='del'>-            else</div><div class='del'>-              c += 1</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          @events = @choices.find { |evt| evt[0].matches? event }</div><div class='del'>-          # Remove the references</div><div class='del'>-          # Find the events</div><div class='del'>-        end</div><div class='del'>-        #puts "In next with #{event.inspect}."</div><div class='del'>-        #puts "events is #{@events.inspect}"</div><div class='del'>-        unless @events</div><div class='del'>-          @events = []</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        #puts "current = #@current"</div><div class='del'>-        super</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def matches?( event )</div><div class='del'>-        return @events[@current].matches?( event ) if @events.size &gt; 0</div><div class='del'>-        !@choices.find{|evt| evt[0].matches?(event)}.nil?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def expected</div><div class='del'>-        #puts "IN CHOICE EXPECTED"</div><div class='del'>-        #puts "EVENTS = #{@events.inspect}"</div><div class='del'>-        return [@events[@current]] if @events.size &gt; 0</div><div class='del'>-        return @choices.collect do |x| </div><div class='del'>-          if x[0].kind_of? State</div><div class='del'>-            x[0].expected</div><div class='del'>-          else</div><div class='del'>-            x[0]</div><div class='del'>-          end</div><div class='del'>-        end.flatten</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def inspect</div><div class='del'>-        "&lt; #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' or ')} &gt;"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      protected</div><div class='del'>-      def add_event_to_arry( arry, evt ) </div><div class='del'>-        if evt.kind_of? State or evt.class == Ref</div><div class='del'>-          arry &lt;&lt; [evt]</div><div class='del'>-        elsif evt[0] == :text </div><div class='del'>-         if arry[-1] and</div><div class='del'>-            arry[-1][-1].kind_of?( Event ) and </div><div class='del'>-            arry[-1][-1].event_type == :text and @value</div><div class='del'>-</div><div class='del'>-            arry[-1][-1].event_arg = evt[1]</div><div class='del'>-            @value = false</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          arry &lt;&lt; [] if evt[0] == :start_element</div><div class='del'>-          arry[-1] &lt;&lt; generate_event( evt )</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 Interleave &lt; Choice</div><div class='del'>-      def initialize context</div><div class='del'>-        super</div><div class='del'>-        @choice = 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def reset</div><div class='del'>-        @choice = 0</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def next_current( event )</div><div class='del'>-        # Expand references</div><div class='del'>-        c = 0 ; max = @choices.size</div><div class='del'>-        while c &lt; max</div><div class='del'>-          if @choices[c][0].class == Ref</div><div class='del'>-            expand_ref_in( @choices[c], 0 )</div><div class='del'>-            @choices += @choices[c]</div><div class='del'>-            @choices.delete( @choices[c] )</div><div class='del'>-            max -= 1</div><div class='del'>-          else</div><div class='del'>-            c += 1</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        @events = @choices[@choice..-1].find { |evt| evt[0].matches? event }</div><div class='del'>-        @current = 0</div><div class='del'>-        if @events</div><div class='del'>-          # reorder the choices</div><div class='del'>-          old = @choices[@choice]</div><div class='del'>-          idx = @choices.index( @events )</div><div class='del'>-          @choices[@choice] = @events</div><div class='del'>-          @choices[idx] = old</div><div class='del'>-          @choice += 1</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-       #puts "In next with #{event.inspect}."</div><div class='del'>-       #puts "events is #{@events.inspect}"</div><div class='del'>-        @events = [] unless @events</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-      def next( event )</div><div class='del'>-        # Find the next series</div><div class='del'>-        next_current(event) unless @events[@current]</div><div class='del'>-        return nil unless @events[@current]</div><div class='del'>-</div><div class='del'>-        expand_ref_in( @events, @current ) if @events[@current].class == Ref </div><div class='del'>-       #puts "In next with #{event.inspect}."</div><div class='del'>-       #puts "Next (#@current) is #{@events[@current]}"</div><div class='del'>-        if ( @events[@current].kind_of? State )</div><div class='del'>-          @current += 1</div><div class='del'>-          @events[@current-1].previous = self</div><div class='del'>-          return @events[@current-1].next( event )</div><div class='del'>-        end</div><div class='del'>-       #puts "Current isn't a state"</div><div class='del'>-        return @previous.pop.next( event ) if @events[@current].nil?</div><div class='del'>-        if ( @events[@current].matches?(event) )</div><div class='del'>-          @current += 1</div><div class='del'>-          if @events[@current].nil?</div><div class='del'>-           #puts "#{inspect[0,5]} 1RETURNING self" unless @choices[@choice].nil?</div><div class='del'>-            return self unless @choices[@choice].nil?</div><div class='del'>-           #puts "#{inspect[0,5]} 1RETURNING #{@previous[-1].inspect[0,5]}"</div><div class='del'>-            return @previous.pop</div><div class='del'>-          elsif @events[@current].kind_of? State</div><div class='del'>-            @current += 1</div><div class='del'>-           #puts "#{inspect[0,5]} 2RETURNING (#{@current-1}) #{@events[@current-1].inspect[0,5]}; on return, next is #{@events[@current]}"</div><div class='del'>-            @events[@current-1].previous = self</div><div class='del'>-            return @events[@current-1]</div><div class='del'>-          else</div><div class='del'>-           #puts "#{inspect[0,5]} RETURNING self w/ next(#@current) = #{@events[@current]}"</div><div class='del'>-            return self</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def matches?( event )</div><div class='del'>-        return @events[@current].matches?( event ) if @events[@current]</div><div class='del'>-        !@choices[@choice..-1].find{|evt| evt[0].matches?(event)}.nil?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def expected</div><div class='del'>-        #puts "IN CHOICE EXPECTED"</div><div class='del'>-        #puts "EVENTS = #{@events.inspect}"</div><div class='del'>-        return [@events[@current]] if @events[@current]</div><div class='del'>-        return @choices[@choice..-1].collect do |x| </div><div class='del'>-          if x[0].kind_of? State</div><div class='del'>-            x[0].expected</div><div class='del'>-          else</div><div class='del'>-            x[0]</div><div class='del'>-          end</div><div class='del'>-        end.flatten</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def inspect</div><div class='del'>-        "&lt; #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' and ')} &gt;"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Ref</div><div class='del'>-      def initialize value</div><div class='del'>-        @value = value</div><div class='del'>-      end</div><div class='del'>-      def to_s</div><div class='del'>-        @value</div><div class='del'>-      end</div><div class='del'>-      def inspect</div><div class='del'>-        "{#{to_s}}"</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/lib/rexml/validation/validation.rb b/lib/rexml/validation/validation.rb<br/>deleted file mode 100644<br/>index 160ea96b31..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/validation/validation.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/validation/validation.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,155 +0,0 @@</div><div class='del'>-require 'rexml/validation/validationexception'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  module Validation</div><div class='del'>-    module Validator</div><div class='del'>-      NILEVENT = [ nil ]</div><div class='del'>-      def reset</div><div class='del'>-        @current = @root</div><div class='del'>-        @root.reset</div><div class='del'>-        @root.previous = true</div><div class='del'>-        @attr_stack = []</div><div class='del'>-        self</div><div class='del'>-      end</div><div class='del'>-      def dump</div><div class='del'>-        puts @root.inspect</div><div class='del'>-      end</div><div class='del'>-      def validate( event ) </div><div class='del'>-        #puts "Current: #@current"</div><div class='del'>-        #puts "Event: #{event.inspect}"</div><div class='del'>-        @attr_stack = [] unless defined? @attr_stack</div><div class='del'>-        match = @current.next(event)</div><div class='del'>-        raise ValidationException.new( "Validation error.  Expected: "+</div><div class='del'>-          @current.expected.join( " or " )+" from #{@current.inspect} "+</div><div class='del'>-          " but got #{Event.new( event[0], event[1] ).inspect}" ) unless match</div><div class='del'>-        @current = match</div><div class='del'>-</div><div class='del'>-        # Check for attributes</div><div class='del'>-        case event[0]</div><div class='del'>-        when :start_element</div><div class='del'>-          #puts "Checking attributes"</div><div class='del'>-          @attr_stack &lt;&lt; event[2]</div><div class='del'>-          begin</div><div class='del'>-            sattr = [:start_attribute, nil]</div><div class='del'>-            eattr = [:end_attribute]</div><div class='del'>-            text = [:text, nil]</div><div class='del'>-            k,v = event[2].find { |k,v| </div><div class='del'>-              sattr[1] = k</div><div class='del'>-              #puts "Looking for #{sattr.inspect}"</div><div class='del'>-              m = @current.next( sattr )</div><div class='del'>-              #puts "Got #{m.inspect}"</div><div class='del'>-              if m </div><div class='del'>-                # If the state has text children...</div><div class='del'>-                #puts "Looking for #{eattr.inspect}"</div><div class='del'>-                #puts "Expect #{m.expected}"</div><div class='del'>-                if m.matches?( eattr )</div><div class='del'>-                  #puts "Got end"</div><div class='del'>-                  @current = m</div><div class='del'>-                else</div><div class='del'>-                  #puts "Didn't get end"</div><div class='del'>-                  text[1] = v</div><div class='del'>-                  #puts "Looking for #{text.inspect}"</div><div class='del'>-                  m = m.next( text )</div><div class='del'>-                  #puts "Got #{m.inspect}"</div><div class='del'>-                  text[1] = nil</div><div class='del'>-                  return false unless m</div><div class='del'>-                  @current = m if m</div><div class='del'>-                end</div><div class='del'>-                m = @current.next( eattr )</div><div class='del'>-                if m</div><div class='del'>-                  @current = m</div><div class='del'>-                  true</div><div class='del'>-                else</div><div class='del'>-                  false</div><div class='del'>-                end</div><div class='del'>-              else</div><div class='del'>-                false</div><div class='del'>-              end</div><div class='del'>-            }</div><div class='del'>-            event[2].delete(k) if k</div><div class='del'>-          end while k</div><div class='del'>-        when :end_element</div><div class='del'>-          attrs = @attr_stack.pop</div><div class='del'>-          raise ValidationException.new( "Validation error.  Illegal "+</div><div class='del'>-            " attributes: #{attrs.inspect}") if attrs.length &gt; 0</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Event</div><div class='del'>-      def initialize(event_type, event_arg=nil )</div><div class='del'>-        @event_type = event_type</div><div class='del'>-        @event_arg = event_arg</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :event_type</div><div class='del'>-      attr_accessor :event_arg</div><div class='del'>-</div><div class='del'>-      def done?</div><div class='del'>-        @done</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def single?</div><div class='del'>-        return (@event_type != :start_element and @event_type != :start_attribute)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def matches?( event )</div><div class='del'>-        #puts "#@event_type =? #{event[0]} &amp;&amp; #@event_arg =? #{event[1]} "</div><div class='del'>-        return false unless event[0] == @event_type</div><div class='del'>-        case event[0]</div><div class='del'>-        when nil</div><div class='del'>-          return true</div><div class='del'>-        when :start_element</div><div class='del'>-          return true if event[1] == @event_arg</div><div class='del'>-        when :end_element</div><div class='del'>-          return true</div><div class='del'>-        when :start_attribute</div><div class='del'>-          return true if event[1] == @event_arg</div><div class='del'>-        when :end_attribute</div><div class='del'>-          return true</div><div class='del'>-        when :end_document</div><div class='del'>-          return true</div><div class='del'>-        when :text</div><div class='del'>-          return (@event_arg.nil? or @event_arg == event[1])</div><div class='del'>-=begin</div><div class='del'>-        when :processing_instruction</div><div class='del'>-          false</div><div class='del'>-        when :xmldecl</div><div class='del'>-          false</div><div class='del'>-        when :start_doctype</div><div class='del'>-          false</div><div class='del'>-        when :end_doctype</div><div class='del'>-          false</div><div class='del'>-        when :externalentity</div><div class='del'>-          false</div><div class='del'>-        when :elementdecl</div><div class='del'>-          false</div><div class='del'>-        when :entity</div><div class='del'>-          false</div><div class='del'>-        when :attlistdecl</div><div class='del'>-          false</div><div class='del'>-        when :notationdecl</div><div class='del'>-          false</div><div class='del'>-        when :end_doctype</div><div class='del'>-          false</div><div class='del'>-=end</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 ==( other )</div><div class='del'>-        return false unless other.kind_of? Event</div><div class='del'>-        @event_type == other.event_type and @event_arg == other.event_arg</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def to_s</div><div class='del'>-        inspect</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def inspect</div><div class='del'>-        "#{@event_type.inspect}( #@event_arg )"</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/lib/rexml/validation/validationexception.rb b/lib/rexml/validation/validationexception.rb<br/>deleted file mode 100644<br/>index 4723d9e4d3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/validation/validationexception.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/validation/validationexception.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,9 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-  module Validation</div><div class='del'>-    class ValidationException &lt; RuntimeError</div><div class='del'>-      def initialize msg</div><div class='del'>-        super</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/lib/rexml/xmldecl.rb b/lib/rexml/xmldecl.rb<br/>deleted file mode 100644<br/>index 427eb78cf8..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/xmldecl.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/xmldecl.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,119 +0,0 @@</div><div class='del'>-require 'rexml/encoding'</div><div class='del'>-require 'rexml/source'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	# NEEDS DOCUMENTATION</div><div class='del'>-	class XMLDecl &lt; Child</div><div class='del'>-		include Encoding</div><div class='del'>-</div><div class='del'>-		DEFAULT_VERSION = "1.0";</div><div class='del'>-		DEFAULT_ENCODING = "UTF-8";</div><div class='del'>-		DEFAULT_STANDALONE = "no";</div><div class='del'>-		START = '&lt;\?xml';</div><div class='del'>-		STOP = '\?&gt;';</div><div class='del'>-</div><div class='del'>-		attr_accessor :version, :standalone</div><div class='del'>-    attr_reader :writeencoding, :writethis</div><div class='del'>-</div><div class='del'>-		def initialize(version=DEFAULT_VERSION, encoding=nil, standalone=nil)</div><div class='del'>-      @writethis = true</div><div class='del'>-      @writeencoding = !encoding.nil?</div><div class='del'>-			if version.kind_of? XMLDecl</div><div class='del'>-				super()</div><div class='del'>-				@version = version.version</div><div class='del'>-				self.encoding = version.encoding</div><div class='del'>-        @writeencoding = version.writeencoding</div><div class='del'>-				@standalone = version.standalone</div><div class='del'>-			else</div><div class='del'>-				super()</div><div class='del'>-				@version = version</div><div class='del'>-				self.encoding = encoding</div><div class='del'>-				@standalone = standalone</div><div class='del'>-			end</div><div class='del'>-			@version = DEFAULT_VERSION if @version.nil?</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def clone</div><div class='del'>-			XMLDecl.new(self)</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-    # indent::</div><div class='del'>-    #   Ignored.  There must be no whitespace before an XML declaration</div><div class='del'>-    # transitive::</div><div class='del'>-    #   Ignored</div><div class='del'>-    # ie_hack::</div><div class='del'>-    #   Ignored</div><div class='del'>-		def write(writer, indent=-1, transitive=false, ie_hack=false)</div><div class='del'>-      return nil unless @writethis or writer.kind_of? Output</div><div class='del'>-			writer &lt;&lt; START.sub(/\\/u, '')</div><div class='del'>-      if writer.kind_of? Output</div><div class='del'>-        writer &lt;&lt; " #{content writer.encoding}"</div><div class='del'>-      else</div><div class='del'>-        writer &lt;&lt; " #{content encoding}"</div><div class='del'>-      end</div><div class='del'>-			writer &lt;&lt; STOP.sub(/\\/u, '')</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def ==( other )</div><div class='del'>-		  other.kind_of?(XMLDecl) and</div><div class='del'>-		  other.version == @version and</div><div class='del'>-		  other.encoding == self.encoding and</div><div class='del'>-		  other.standalone == @standalone</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def xmldecl version, encoding, standalone</div><div class='del'>-			@version = version</div><div class='del'>-			self.encoding = encoding</div><div class='del'>-			@standalone = standalone</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		def node_type</div><div class='del'>-			:xmldecl</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		alias :stand_alone? :standalone</div><div class='del'>-    alias :old_enc= :encoding=</div><div class='del'>-</div><div class='del'>-    def encoding=( enc )</div><div class='del'>-      if enc.nil?</div><div class='del'>-        self.old_enc = "UTF-8"</div><div class='del'>-        @writeencoding = false</div><div class='del'>-      else</div><div class='del'>-        self.old_enc = enc</div><div class='del'>-        @writeencoding = true</div><div class='del'>-      end</div><div class='del'>-      self.dowrite</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    # Only use this if you do not want the XML declaration to be written;</div><div class='del'>-    # this object is ignored by the XML writer.  Otherwise, instantiate your</div><div class='del'>-    # own XMLDecl and add it to the document.</div><div class='del'>-    #</div><div class='del'>-    # Note that XML 1.1 documents *must* include an XML declaration</div><div class='del'>-    def XMLDecl.default</div><div class='del'>-      rv = XMLDecl.new( "1.0" )</div><div class='del'>-      rv.nowrite</div><div class='del'>-      rv</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def nowrite</div><div class='del'>-      @writethis = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def dowrite</div><div class='del'>-      @writethis = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def inspect</div><div class='del'>-      START.sub(/\\/u, '') + " ... " + STOP.sub(/\\/u, '')</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-		private</div><div class='del'>-		def content(enc)</div><div class='del'>-			rv = "version='#@version'"</div><div class='del'>-			rv &lt;&lt; " encoding='#{enc}'" if @writeencoding || enc !~ /utf-8/i</div><div class='del'>-			rv &lt;&lt; " standalone='#@standalone'" if @standalone</div><div class='del'>-			rv</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/xmltokens.rb b/lib/rexml/xmltokens.rb<br/>deleted file mode 100644<br/>index 6bbe5b07d5..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/xmltokens.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/xmltokens.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,18 +0,0 @@</div><div class='del'>-module REXML</div><div class='del'>-	# Defines a number of tokens used for parsing XML.  Not for general</div><div class='del'>-	# consumption.</div><div class='del'>-	module XMLTokens</div><div class='del'>-		NCNAME_STR= '[\w:][\-\w\d.]*'</div><div class='del'>-		NAME_STR= "(?:#{NCNAME_STR}:)?#{NCNAME_STR}"</div><div class='del'>-</div><div class='del'>-		NAMECHAR = '[\-\w\d\.:]'</div><div class='del'>-		NAME = "([\\w:]#{NAMECHAR}*)"</div><div class='del'>-		NMTOKEN = "(?:#{NAMECHAR})+"</div><div class='del'>-		NMTOKENS = "#{NMTOKEN}(\\s+#{NMTOKEN})*"</div><div class='del'>-		REFERENCE = "(?:&amp;#{NAME};|&amp;#\\d+;|&amp;#x[0-9a-fA-F]+;)"</div><div class='del'>-</div><div class='del'>-		#REFERENCE = "(?:#{ENTITYREF}|#{CHARREF})"</div><div class='del'>-		#ENTITYREF = "&amp;#{NAME};"</div><div class='del'>-		#CHARREF = "&amp;#\\d+;|&amp;#x[0-9a-fA-F]+;"</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/xpath.rb b/lib/rexml/xpath.rb<br/>deleted file mode 100644<br/>index e8813efd3e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/xpath.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/xpath.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,66 +0,0 @@</div><div class='del'>-require 'rexml/functions'</div><div class='del'>-require 'rexml/xpath_parser'</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-	# Wrapper class.  Use this class to access the XPath functions.</div><div class='del'>-	class XPath</div><div class='del'>-		include Functions</div><div class='del'>-		EMPTY_HASH = {}</div><div class='del'>-</div><div class='del'>-		# Finds and returns the first node that matches the supplied xpath.</div><div class='del'>-		# element::</div><div class='del'>-		# 	The context element</div><div class='del'>-		# path::</div><div class='del'>-		# 	The xpath to search for.  If not supplied or nil, returns the first</div><div class='del'>-		# 	node matching '*'.</div><div class='del'>-		# namespaces::</div><div class='del'>-		# 	If supplied, a Hash which defines a namespace mapping.</div><div class='del'>-		#</div><div class='del'>-		#  XPath.first( node )</div><div class='del'>-		#  XPath.first( doc, "//b"} )</div><div class='del'>-		#  XPath.first( node, "a/x:b", { "x"=&gt;"http://doofus" } )</div><div class='del'>-    def XPath::first element, path=nil, namespaces=nil, variables={}</div><div class='del'>-      raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash)</div><div class='del'>-      raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash)</div><div class='del'>-			parser = XPathParser.new</div><div class='del'>-			parser.namespaces = namespaces</div><div class='del'>-			parser.variables = variables</div><div class='del'>-			path = "*" unless path</div><div class='del'>-			element = [element] unless element.kind_of? Array</div><div class='del'>-			parser.parse(path, element).flatten[0]</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Iterates over nodes that match the given path, calling the supplied</div><div class='del'>-		# block with the match.</div><div class='del'>-		# element::</div><div class='del'>-		#   The context element</div><div class='del'>-		# path::</div><div class='del'>-		#   The xpath to search for.  If not supplied or nil, defaults to '*'</div><div class='del'>-		# namespaces::</div><div class='del'>-		# 	If supplied, a Hash which defines a namespace mapping</div><div class='del'>-		#</div><div class='del'>-		#  XPath.each( node ) { |el| ... }</div><div class='del'>-		#  XPath.each( node, '/*[@attr='v']' ) { |el| ... }</div><div class='del'>-		#  XPath.each( node, 'ancestor::x' ) { |el| ... }</div><div class='del'>-		def XPath::each element, path=nil, namespaces=nil, variables={}, &amp;block</div><div class='del'>-      raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash)</div><div class='del'>-      raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash)</div><div class='del'>-			parser = XPathParser.new</div><div class='del'>-			parser.namespaces = namespaces</div><div class='del'>-			parser.variables = variables</div><div class='del'>-			path = "*" unless path</div><div class='del'>-			element = [element] unless element.kind_of? Array</div><div class='del'>-			parser.parse(path, element).each( &amp;block )</div><div class='del'>-		end</div><div class='del'>-</div><div class='del'>-		# Returns an array of nodes matching a given XPath.  </div><div class='del'>-		def XPath::match element, path=nil, namespaces=nil, variables={}</div><div class='del'>-			parser = XPathParser.new</div><div class='del'>-			parser.namespaces = namespaces</div><div class='del'>-			parser.variables = variables</div><div class='del'>-			path = "*" unless path</div><div class='del'>-			element = [element] unless element.kind_of? Array</div><div class='del'>-			parser.parse(path,element)</div><div class='del'>-		end</div><div class='del'>-	end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rexml/xpath_parser.rb b/lib/rexml/xpath_parser.rb<br/>deleted file mode 100644<br/>index eb608fdb34..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rexml/xpath_parser.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rexml/xpath_parser.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,792 +0,0 @@</div><div class='del'>-require 'rexml/namespace'</div><div class='del'>-require 'rexml/xmltokens'</div><div class='del'>-require 'rexml/attribute'</div><div class='del'>-require 'rexml/syncenumerator'</div><div class='del'>-require 'rexml/parsers/xpathparser'</div><div class='del'>-</div><div class='del'>-class Object</div><div class='del'>-  def dclone</div><div class='del'>-    clone</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-class Symbol</div><div class='del'>-  def dclone ; self ; end</div><div class='del'>-end</div><div class='del'>-class Fixnum</div><div class='del'>-  def dclone ; self ; end</div><div class='del'>-end</div><div class='del'>-class Float</div><div class='del'>-  def dclone ; self ; end</div><div class='del'>-end</div><div class='del'>-class Array</div><div class='del'>-  def dclone</div><div class='del'>-    klone = self.clone</div><div class='del'>-    klone.clear</div><div class='del'>-    self.each{|v| klone &lt;&lt; v.dclone}</div><div class='del'>-    klone</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-module REXML</div><div class='del'>-  # You don't want to use this class.  Really.  Use XPath, which is a wrapper</div><div class='del'>-  # for this class.  Believe me.  You don't want to poke around in here.</div><div class='del'>-  # There is strange, dark magic at work in this code.  Beware.  Go back!  Go</div><div class='del'>-  # back while you still can!</div><div class='del'>-  class XPathParser</div><div class='del'>-    include XMLTokens</div><div class='del'>-    LITERAL    = /^'([^']*)'|^"([^"]*)"/u</div><div class='del'>-</div><div class='del'>-    def initialize( )</div><div class='del'>-      @parser = REXML::Parsers::XPathParser.new</div><div class='del'>-      @namespaces = nil</div><div class='del'>-      @variables = {}</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def namespaces=( namespaces={} )</div><div class='del'>-      Functions::namespace_context = namespaces</div><div class='del'>-      @namespaces = namespaces</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def variables=( vars={} )</div><div class='del'>-      Functions::variables = vars</div><div class='del'>-      @variables = vars</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def parse path, nodeset</div><div class='del'>-     #puts "#"*40</div><div class='del'>-     path_stack = @parser.parse( path )</div><div class='del'>-     #puts "PARSE: #{path} =&gt; #{path_stack.inspect}"</div><div class='del'>-     #puts "PARSE: nodeset = #{nodeset.inspect}"</div><div class='del'>-     match( path_stack, nodeset )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def get_first path, nodeset</div><div class='del'>-     #puts "#"*40</div><div class='del'>-     path_stack = @parser.parse( path )</div><div class='del'>-     #puts "PARSE: #{path} =&gt; #{path_stack.inspect}"</div><div class='del'>-     #puts "PARSE: nodeset = #{nodeset.inspect}"</div><div class='del'>-     first( path_stack, nodeset )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def predicate path, nodeset</div><div class='del'>-      path_stack = @parser.parse( path )</div><div class='del'>-      expr( path_stack, nodeset )</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def []=( variable_name, value )</div><div class='del'>-      @variables[ variable_name ] = value</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Performs a depth-first (document order) XPath search, and returns the</div><div class='del'>-    # first match.  This is the fastest, lightest way to return a single result.</div><div class='del'>-    #</div><div class='del'>-    # FIXME: This method is incomplete!</div><div class='del'>-    def first( path_stack, node )</div><div class='del'>-      #puts "#{depth}) Entering match( #{path.inspect}, #{tree.inspect} )"</div><div class='del'>-      return nil if path.size == 0</div><div class='del'>-</div><div class='del'>-      case path[0]</div><div class='del'>-      when :document</div><div class='del'>-        # do nothing </div><div class='del'>-        return first( path[1..-1], node )</div><div class='del'>-      when :child</div><div class='del'>-        for c in node.children</div><div class='del'>-          #puts "#{depth}) CHILD checking #{name(c)}"</div><div class='del'>-          r = first( path[1..-1], c )</div><div class='del'>-          #puts "#{depth}) RETURNING #{r.inspect}" if r</div><div class='del'>-          return r if r</div><div class='del'>-        end</div><div class='del'>-      when :qname</div><div class='del'>-        name = path[2]</div><div class='del'>-        #puts "#{depth}) QNAME #{name(tree)} == #{name} (path =&gt; #{path.size})"</div><div class='del'>-        if node.name == name</div><div class='del'>-          #puts "#{depth}) RETURNING #{tree.inspect}" if path.size == 3</div><div class='del'>-          return node if path.size == 3</div><div class='del'>-          return first( path[3..-1], node )</div><div class='del'>-        else</div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-      when :descendant_or_self</div><div class='del'>-        r = first( path[1..-1], node )</div><div class='del'>-        return r if r</div><div class='del'>-        for c in node.children</div><div class='del'>-          r = first( path, c )</div><div class='del'>-          return r if r</div><div class='del'>-        end</div><div class='del'>-      when :node</div><div class='del'>-        return first( path[1..-1], node )</div><div class='del'>-      when :any</div><div class='del'>-        return first( path[1..-1], node )</div><div class='del'>-      end</div><div class='del'>-      return nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def match( path_stack, nodeset ) </div><div class='del'>-      #puts "MATCH: path_stack = #{path_stack.inspect}"</div><div class='del'>-      #puts "MATCH: nodeset = #{nodeset.inspect}"</div><div class='del'>-      r = expr( path_stack, nodeset )</div><div class='del'>-      #puts "MAIN EXPR =&gt; #{r.inspect}"</div><div class='del'>-      r</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Returns a String namespace for a node, given a prefix</div><div class='del'>-    # The rules are:</div><div class='del'>-    # </div><div class='del'>-    #  1. Use the supplied namespace mapping first.</div><div class='del'>-    #  2. If no mapping was supplied, use the context node to look up the namespace</div><div class='del'>-    def get_namespace( node, prefix )</div><div class='del'>-      if @namespaces</div><div class='del'>-        return @namespaces[prefix] || ''</div><div class='del'>-      else</div><div class='del'>-        return node.namespace( prefix ) if node.node_type == :element</div><div class='del'>-        return ''</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Expr takes a stack of path elements and a set of nodes (either a Parent</div><div class='del'>-    # or an Array and returns an Array of matching nodes</div><div class='del'>-    ALL = [ :attribute, :element, :text, :processing_instruction, :comment ]</div><div class='del'>-    ELEMENTS = [ :element ]</div><div class='del'>-    def expr( path_stack, nodeset, context=nil )</div><div class='del'>-      #puts "#"*15</div><div class='del'>-      #puts "In expr with #{path_stack.inspect}"</div><div class='del'>-      #puts "Returning" if path_stack.length == 0 || nodeset.length == 0</div><div class='del'>-      node_types = ELEMENTS</div><div class='del'>-      return nodeset if path_stack.length == 0 || nodeset.length == 0</div><div class='del'>-      while path_stack.length &gt; 0</div><div class='del'>-        #puts "#"*5</div><div class='del'>-        #puts "Path stack = #{path_stack.inspect}"</div><div class='del'>-        #puts "Nodeset is #{nodeset.inspect}"</div><div class='del'>-        if nodeset.length == 0</div><div class='del'>-          path_stack.clear</div><div class='del'>-          return []</div><div class='del'>-        end</div><div class='del'>-        case (op = path_stack.shift)</div><div class='del'>-        when :document</div><div class='del'>-          nodeset = [ nodeset[0].root_node ]</div><div class='del'>-          #puts ":document, nodeset = #{nodeset.inspect}"</div><div class='del'>-</div><div class='del'>-        when :qname</div><div class='del'>-          #puts "IN QNAME"</div><div class='del'>-          prefix = path_stack.shift</div><div class='del'>-          name = path_stack.shift</div><div class='del'>-          nodeset.delete_if do |node|</div><div class='del'>-            # FIXME: This DOUBLES the time XPath searches take</div><div class='del'>-            ns = get_namespace( node, prefix )</div><div class='del'>-            #puts "NS = #{ns.inspect}"</div><div class='del'>-            #puts "node.node_type == :element =&gt; #{node.node_type == :element}"</div><div class='del'>-            if node.node_type == :element</div><div class='del'>-              #puts "node.name == #{name} =&gt; #{node.name == name}"</div><div class='del'>-              if node.name == name</div><div class='del'>-                #puts "node.namespace == #{ns.inspect} =&gt; #{node.namespace == ns}"</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            !(node.node_type == :element and </div><div class='del'>-              node.name == name and </div><div class='del'>-              node.namespace == ns )</div><div class='del'>-          end</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :any</div><div class='del'>-          #puts "ANY 1: nodeset = #{nodeset.inspect}"</div><div class='del'>-          #puts "ANY 1: node_types = #{node_types.inspect}"</div><div class='del'>-          nodeset.delete_if { |node| !node_types.include?(node.node_type) }</div><div class='del'>-          #puts "ANY 2: nodeset = #{nodeset.inspect}"</div><div class='del'>-</div><div class='del'>-        when :self</div><div class='del'>-          # This space left intentionally blank</div><div class='del'>-</div><div class='del'>-        when :processing_instruction</div><div class='del'>-          target = path_stack.shift</div><div class='del'>-          nodeset.delete_if do |node|</div><div class='del'>-            (node.node_type != :processing_instruction) or </div><div class='del'>-            ( target!='' and ( node.target != target ) )</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-        when :text</div><div class='del'>-          nodeset.delete_if { |node| node.node_type != :text }</div><div class='del'>-</div><div class='del'>-        when :comment</div><div class='del'>-          nodeset.delete_if { |node| node.node_type != :comment }</div><div class='del'>-</div><div class='del'>-        when :node</div><div class='del'>-          # This space left intentionally blank</div><div class='del'>-          node_types = ALL</div><div class='del'>-</div><div class='del'>-        when :child</div><div class='del'>-          new_nodeset = []</div><div class='del'>-          nt = nil</div><div class='del'>-          for node in nodeset</div><div class='del'>-            nt = node.node_type</div><div class='del'>-            new_nodeset += node.children if nt == :element or nt == :document</div><div class='del'>-          end</div><div class='del'>-          nodeset = new_nodeset</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :literal</div><div class='del'>-          return path_stack.shift</div><div class='del'>-        </div><div class='del'>-        when :attribute</div><div class='del'>-          new_nodeset = []</div><div class='del'>-          case path_stack.shift</div><div class='del'>-          when :qname</div><div class='del'>-            prefix = path_stack.shift</div><div class='del'>-            name = path_stack.shift</div><div class='del'>-            for element in nodeset</div><div class='del'>-              if element.node_type == :element</div><div class='del'>-                #puts "Element name = #{element.name}"</div><div class='del'>-                #puts "get_namespace( #{element.inspect}, #{prefix} ) = #{get_namespace(element, prefix)}"</div><div class='del'>-                attrib = element.attribute( name, get_namespace(element, prefix) )</div><div class='del'>-                #puts "attrib = #{attrib.inspect}"</div><div class='del'>-                new_nodeset &lt;&lt; attrib if attrib</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          when :any</div><div class='del'>-            #puts "ANY"</div><div class='del'>-            for element in nodeset</div><div class='del'>-              if element.node_type == :element</div><div class='del'>-                new_nodeset += element.attributes.to_a</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          nodeset = new_nodeset</div><div class='del'>-</div><div class='del'>-        when :parent</div><div class='del'>-          #puts "PARENT 1: nodeset = #{nodeset}"</div><div class='del'>-          nodeset = nodeset.collect{|n| n.parent}.compact</div><div class='del'>-          #nodeset = expr(path_stack.dclone, nodeset.collect{|n| n.parent}.compact)</div><div class='del'>-          #puts "PARENT 2: nodeset = #{nodeset.inspect}"</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :ancestor</div><div class='del'>-          new_nodeset = []</div><div class='del'>-          for node in nodeset</div><div class='del'>-            while node.parent</div><div class='del'>-              node = node.parent</div><div class='del'>-              new_nodeset &lt;&lt; node unless new_nodeset.include? node</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          nodeset = new_nodeset</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :ancestor_or_self</div><div class='del'>-          new_nodeset = []</div><div class='del'>-          for node in nodeset</div><div class='del'>-            if node.node_type == :element</div><div class='del'>-              new_nodeset &lt;&lt; node</div><div class='del'>-              while ( node.parent )</div><div class='del'>-                node = node.parent</div><div class='del'>-                new_nodeset &lt;&lt; node unless new_nodeset.include? node</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          nodeset = new_nodeset</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :predicate</div><div class='del'>-          new_nodeset = []</div><div class='del'>-          subcontext = { :size =&gt; nodeset.size }</div><div class='del'>-          pred = path_stack.shift</div><div class='del'>-          nodeset.each_with_index { |node, index|</div><div class='del'>-            subcontext[ :node ] = node</div><div class='del'>-            #puts "PREDICATE SETTING CONTEXT INDEX TO #{index+1}"</div><div class='del'>-            subcontext[ :index ] = index+1</div><div class='del'>-            pc = pred.dclone</div><div class='del'>-            #puts "#{node.hash}) Recursing with #{pred.inspect} and [#{node.inspect}]"</div><div class='del'>-            result = expr( pc, [node], subcontext )</div><div class='del'>-            result = result[0] if result.kind_of? Array and result.length == 1</div><div class='del'>-            #puts "#{node.hash}) Result = #{result.inspect} (#{result.class.name})"</div><div class='del'>-            if result.kind_of? Numeric</div><div class='del'>-              #puts "Adding node #{node.inspect}" if result == (index+1)</div><div class='del'>-              new_nodeset &lt;&lt; node if result == (index+1)</div><div class='del'>-            elsif result.instance_of? Array</div><div class='del'>-              if result.size &gt; 0 and result.inject(false) {|k,s| s or k}</div><div class='del'>-                #puts "Adding node #{node.inspect}" if result.size &gt; 0</div><div class='del'>-                new_nodeset &lt;&lt; node if result.size &gt; 0</div><div class='del'>-              end</div><div class='del'>-            else</div><div class='del'>-              #puts "Adding node #{node.inspect}" if result</div><div class='del'>-              new_nodeset &lt;&lt; node if result</div><div class='del'>-            end</div><div class='del'>-          }</div><div class='del'>-          #puts "New nodeset = #{new_nodeset.inspect}"</div><div class='del'>-          #puts "Path_stack  = #{path_stack.inspect}"</div><div class='del'>-          nodeset = new_nodeset</div><div class='del'>-=begin</div><div class='del'>-          predicate = path_stack.shift</div><div class='del'>-          ns = nodeset.clone</div><div class='del'>-          result = expr( predicate, ns )</div><div class='del'>-          #puts "Result = #{result.inspect} (#{result.class.name})"</div><div class='del'>-          #puts "nodeset = #{nodeset.inspect}"</div><div class='del'>-          if result.kind_of? Array</div><div class='del'>-            nodeset = result.zip(ns).collect{|m,n| n if m}.compact</div><div class='del'>-          else</div><div class='del'>-            nodeset = result ? nodeset : []</div><div class='del'>-          end</div><div class='del'>-          #puts "Outgoing NS = #{nodeset.inspect}"</div><div class='del'>-=end</div><div class='del'>-</div><div class='del'>-        when :descendant_or_self</div><div class='del'>-          rv = descendant_or_self( path_stack, nodeset )</div><div class='del'>-          path_stack.clear</div><div class='del'>-          nodeset = rv</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :descendant</div><div class='del'>-          results = []</div><div class='del'>-          nt = nil</div><div class='del'>-          for node in nodeset</div><div class='del'>-            nt = node.node_type</div><div class='del'>-            results += expr( path_stack.dclone.unshift( :descendant_or_self ),</div><div class='del'>-              node.children ) if nt == :element or nt == :document</div><div class='del'>-          end</div><div class='del'>-          nodeset = results</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :following_sibling</div><div class='del'>-          #puts "FOLLOWING_SIBLING 1: nodeset = #{nodeset}"</div><div class='del'>-          results = []</div><div class='del'>-          nodeset.each do |node|</div><div class='del'>-            next if node.parent.nil?</div><div class='del'>-            all_siblings = node.parent.children</div><div class='del'>-            current_index = all_siblings.index( node )</div><div class='del'>-            following_siblings = all_siblings[ current_index+1 .. -1 ]</div><div class='del'>-            results += expr( path_stack.dclone, following_siblings )</div><div class='del'>-          end</div><div class='del'>-          #puts "FOLLOWING_SIBLING 2: nodeset = #{nodeset}"</div><div class='del'>-          nodeset = results</div><div class='del'>-</div><div class='del'>-        when :preceding_sibling</div><div class='del'>-          results = []</div><div class='del'>-          nodeset.each do |node|</div><div class='del'>-            next if node.parent.nil?</div><div class='del'>-            all_siblings = node.parent.children</div><div class='del'>-            current_index = all_siblings.index( node )</div><div class='del'>-            preceding_siblings = all_siblings[ 0, current_index ].reverse</div><div class='del'>-            results += preceding_siblings</div><div class='del'>-          end</div><div class='del'>-          nodeset = results</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :preceding</div><div class='del'>-          new_nodeset = []</div><div class='del'>-          for node in nodeset</div><div class='del'>-            new_nodeset += preceding( node )</div><div class='del'>-          end</div><div class='del'>-          #puts "NEW NODESET =&gt; #{new_nodeset.inspect}"</div><div class='del'>-          nodeset = new_nodeset</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :following</div><div class='del'>-          new_nodeset = []</div><div class='del'>-          for node in nodeset</div><div class='del'>-            new_nodeset += following( node )</div><div class='del'>-          end</div><div class='del'>-          nodeset = new_nodeset</div><div class='del'>-          node_types = ELEMENTS</div><div class='del'>-</div><div class='del'>-        when :namespace</div><div class='del'>-          #puts "In :namespace"</div><div class='del'>-          new_nodeset = []</div><div class='del'>-          prefix = path_stack.shift</div><div class='del'>-          for node in nodeset</div><div class='del'>-            if (node.node_type == :element or node.node_type == :attribute)</div><div class='del'>-              if @namespaces</div><div class='del'>-                namespaces = @namespaces</div><div class='del'>-              elsif (node.node_type == :element)</div><div class='del'>-                namespaces = node.namespaces</div><div class='del'>-              else</div><div class='del'>-                namespaces = node.element.namesapces</div><div class='del'>-              end</div><div class='del'>-              #puts "Namespaces = #{namespaces.inspect}"</div><div class='del'>-              #puts "Prefix = #{prefix.inspect}"</div><div class='del'>-              #puts "Node.namespace = #{node.namespace}"</div><div class='del'>-              if (node.namespace == namespaces[prefix])</div><div class='del'>-                new_nodeset &lt;&lt; node</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          nodeset = new_nodeset</div><div class='del'>-</div><div class='del'>-        when :variable</div><div class='del'>-          var_name = path_stack.shift</div><div class='del'>-          return @variables[ var_name ]</div><div class='del'>-</div><div class='del'>-        # :and, :or, :eq, :neq, :lt, :lteq, :gt, :gteq</div><div class='del'>-				# TODO: Special case for :or and :and -- not evaluate the right</div><div class='del'>-				# operand if the left alone determines result (i.e. is true for</div><div class='del'>-				# :or and false for :and).</div><div class='del'>-        when :eq, :neq, :lt, :lteq, :gt, :gteq, :and, :or</div><div class='del'>-          left = expr( path_stack.shift, nodeset.dup, context )</div><div class='del'>-          #puts "LEFT =&gt; #{left.inspect} (#{left.class.name})"</div><div class='del'>-          right = expr( path_stack.shift, nodeset.dup, context )</div><div class='del'>-          #puts "RIGHT =&gt; #{right.inspect} (#{right.class.name})"</div><div class='del'>-          res = equality_relational_compare( left, op, right )</div><div class='del'>-          #puts "RES =&gt; #{res.inspect}"</div><div class='del'>-          return res</div><div class='del'>-</div><div class='del'>-        when :and</div><div class='del'>-          left = expr( path_stack.shift, nodeset.dup, context )</div><div class='del'>-          #puts "LEFT =&gt; #{left.inspect} (#{left.class.name})"</div><div class='del'>-          if left == false || left.nil? || !left.inject(false) {|a,b| a | b}</div><div class='del'>-            return []</div><div class='del'>-          end</div><div class='del'>-          right = expr( path_stack.shift, nodeset.dup, context )</div><div class='del'>-          #puts "RIGHT =&gt; #{right.inspect} (#{right.class.name})"</div><div class='del'>-          res = equality_relational_compare( left, op, right )</div><div class='del'>-          #puts "RES =&gt; #{res.inspect}"</div><div class='del'>-          return res</div><div class='del'>-</div><div class='del'>-        when :div</div><div class='del'>-          left = Functions::number(expr(path_stack.shift, nodeset, context)).to_f</div><div class='del'>-          right = Functions::number(expr(path_stack.shift, nodeset, context)).to_f</div><div class='del'>-          return (left / right)</div><div class='del'>-</div><div class='del'>-        when :mod</div><div class='del'>-          left = Functions::number(expr(path_stack.shift, nodeset, context )).to_f</div><div class='del'>-          right = Functions::number(expr(path_stack.shift, nodeset, context )).to_f</div><div class='del'>-          return (left % right)</div><div class='del'>-</div><div class='del'>-        when :mult</div><div class='del'>-          left = Functions::number(expr(path_stack.shift, nodeset, context )).to_f</div><div class='del'>-          right = Functions::number(expr(path_stack.shift, nodeset, context )).to_f</div><div class='del'>-          return (left * right)</div><div class='del'>-</div><div class='del'>-        when :plus</div><div class='del'>-          left = Functions::number(expr(path_stack.shift, nodeset, context )).to_f</div><div class='del'>-          right = Functions::number(expr(path_stack.shift, nodeset, context )).to_f</div><div class='del'>-          return (left + right)</div><div class='del'>-</div><div class='del'>-        when :minus</div><div class='del'>-          left = Functions::number(expr(path_stack.shift, nodeset, context )).to_f</div><div class='del'>-          right = Functions::number(expr(path_stack.shift, nodeset, context )).to_f</div><div class='del'>-          return (left - right)</div><div class='del'>-</div><div class='del'>-        when :union</div><div class='del'>-          left = expr( path_stack.shift, nodeset, context )</div><div class='del'>-          right = expr( path_stack.shift, nodeset, context )</div><div class='del'>-          return (left | right)</div><div class='del'>-</div><div class='del'>-        when :neg</div><div class='del'>-          res = expr( path_stack, nodeset, context )</div><div class='del'>-          return -(res.to_f)</div><div class='del'>-</div><div class='del'>-        when :not</div><div class='del'>-        when :function</div><div class='del'>-          func_name = path_stack.shift.tr('-','_')</div><div class='del'>-          arguments = path_stack.shift</div><div class='del'>-          #puts "FUNCTION 0: #{func_name}(#{arguments.collect{|a|a.inspect}.join(', ')})" </div><div class='del'>-          subcontext = context ? nil : { :size =&gt; nodeset.size }</div><div class='del'>-</div><div class='del'>-          res = []</div><div class='del'>-          cont = context</div><div class='del'>-          nodeset.each_with_index { |n, i| </div><div class='del'>-            if subcontext</div><div class='del'>-              subcontext[:node]  = n</div><div class='del'>-              subcontext[:index] = i</div><div class='del'>-              cont = subcontext</div><div class='del'>-            end</div><div class='del'>-            arg_clone = arguments.dclone</div><div class='del'>-            args = arg_clone.collect { |arg| </div><div class='del'>-              #puts "FUNCTION 1: Calling expr( #{arg.inspect}, [#{n.inspect}] )"</div><div class='del'>-              expr( arg, [n], cont ) </div><div class='del'>-            }</div><div class='del'>-            #puts "FUNCTION 2: #{func_name}(#{args.collect{|a|a.inspect}.join(', ')})" </div><div class='del'>-            Functions.context = cont</div><div class='del'>-            res &lt;&lt; Functions.send( func_name, *args )</div><div class='del'>-            #puts "FUNCTION 3: #{res[-1].inspect}"</div><div class='del'>-          }</div><div class='del'>-          return res</div><div class='del'>-</div><div class='del'>-        end</div><div class='del'>-      end # while</div><div class='del'>-      #puts "EXPR returning #{nodeset.inspect}"</div><div class='del'>-      return nodeset</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    ##########################################################</div><div class='del'>-    # FIXME</div><div class='del'>-    # The next two methods are BAD MOJO!</div><div class='del'>-    # This is my achilles heel.  If anybody thinks of a better</div><div class='del'>-    # way of doing this, be my guest.  This really sucks, but </div><div class='del'>-    # it is a wonder it works at all.</div><div class='del'>-    # ########################################################</div><div class='del'>-    </div><div class='del'>-    def descendant_or_self( path_stack, nodeset )</div><div class='del'>-      rs = []</div><div class='del'>-      #puts "#"*80</div><div class='del'>-      #puts "PATH_STACK = #{path_stack.inspect}"</div><div class='del'>-      #puts "NODESET = #{nodeset.collect{|n|n.inspect}.inspect}"</div><div class='del'>-      d_o_s( path_stack, nodeset, rs )</div><div class='del'>-      #puts "RS = #{rs.collect{|n|n.inspect}.inspect}"</div><div class='del'>-      document_order(rs.flatten.compact)</div><div class='del'>-      #rs.flatten.compact</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def d_o_s( p, ns, r )</div><div class='del'>-      #puts "IN DOS with #{ns.inspect}; ALREADY HAVE #{r.inspect}"</div><div class='del'>-      nt = nil</div><div class='del'>-      ns.each_index do |i|</div><div class='del'>-        n = ns[i]</div><div class='del'>-        #puts "P =&gt; #{p.inspect}"</div><div class='del'>-        x = expr( p.dclone, [ n ] )</div><div class='del'>-        nt = n.node_type</div><div class='del'>-        d_o_s( p, n.children, x ) if nt == :element or nt == :document and n.children.size &gt; 0</div><div class='del'>-        r.concat(x) if x.size &gt; 0</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    # Reorders an array of nodes so that they are in document order</div><div class='del'>-    # It tries to do this efficiently.</div><div class='del'>-    #</div><div class='del'>-    # FIXME: I need to get rid of this, but the issue is that most of the XPath </div><div class='del'>-    # interpreter functions as a filter, which means that we lose context going</div><div class='del'>-    # in and out of function calls.  If I knew what the index of the nodes was,</div><div class='del'>-    # I wouldn't have to do this.  Maybe add a document IDX for each node?</div><div class='del'>-    # Problems with mutable documents.  Or, rewrite everything.</div><div class='del'>-    def document_order( array_of_nodes )</div><div class='del'>-      new_arry = []</div><div class='del'>-      array_of_nodes.each { |node|</div><div class='del'>-        node_idx = [] </div><div class='del'>-        np = node.node_type == :attribute ? node.element : node</div><div class='del'>-        while np.parent and np.parent.node_type == :element</div><div class='del'>-          node_idx &lt;&lt; np.parent.index( np )</div><div class='del'>-          np = np.parent</div><div class='del'>-        end</div><div class='del'>-        new_arry &lt;&lt; [ node_idx.reverse, node ]</div><div class='del'>-      }</div><div class='del'>-      #puts "new_arry = #{new_arry.inspect}"</div><div class='del'>-      new_arry.sort{ |s1, s2| s1[0] &lt;=&gt; s2[0] }.collect{ |s| s[1] }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-</div><div class='del'>-    def recurse( nodeset, &amp;block )</div><div class='del'>-      for node in nodeset</div><div class='del'>-        yield node</div><div class='del'>-        recurse( node, &amp;block ) if node.node_type == :element</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'>-    # Builds a nodeset of all of the preceding nodes of the supplied node,</div><div class='del'>-    # in reverse document order</div><div class='del'>-    # preceding:: includes every element in the document that precedes this node, </div><div class='del'>-    # except for ancestors</div><div class='del'>-    def preceding( node )</div><div class='del'>-      #puts "IN PRECEDING"</div><div class='del'>-      ancestors = []</div><div class='del'>-      p = node.parent</div><div class='del'>-      while p</div><div class='del'>-        ancestors &lt;&lt; p</div><div class='del'>-        p = p.parent</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      acc = []</div><div class='del'>-      p = preceding_node_of( node )</div><div class='del'>-      #puts "P = #{p.inspect}"</div><div class='del'>-      while p</div><div class='del'>-        if ancestors.include? p</div><div class='del'>-          ancestors.delete(p)</div><div class='del'>-        else</div><div class='del'>-          acc &lt;&lt; p</div><div class='del'>-        end</div><div class='del'>-        p = preceding_node_of( p )</div><div class='del'>-        #puts "P = #{p.inspect}"</div><div class='del'>-      end</div><div class='del'>-      acc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def preceding_node_of( node )</div><div class='del'>-     #puts "NODE: #{node.inspect}"</div><div class='del'>-     #puts "PREVIOUS NODE: #{node.previous_sibling_node.inspect}"</div><div class='del'>-     #puts "PARENT NODE: #{node.parent}"</div><div class='del'>-      psn = node.previous_sibling_node </div><div class='del'>-      if psn.nil?</div><div class='del'>-        if node.parent.nil? or node.parent.class == Document </div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        return node.parent</div><div class='del'>-        #psn = preceding_node_of( node.parent )</div><div class='del'>-      end</div><div class='del'>-      while psn and psn.kind_of? Element and psn.children.size &gt; 0</div><div class='del'>-        psn = psn.children[-1]</div><div class='del'>-      end</div><div class='del'>-      psn</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def following( node )</div><div class='del'>-      #puts "IN PRECEDING"</div><div class='del'>-      acc = []</div><div class='del'>-      p = next_sibling_node( node )</div><div class='del'>-      #puts "P = #{p.inspect}"</div><div class='del'>-      while p</div><div class='del'>-        acc &lt;&lt; p</div><div class='del'>-        p = following_node_of( p )</div><div class='del'>-        #puts "P = #{p.inspect}"</div><div class='del'>-      end</div><div class='del'>-      acc</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def following_node_of( node )</div><div class='del'>-      #puts "NODE: #{node.inspect}"</div><div class='del'>-      #puts "PREVIOUS NODE: #{node.previous_sibling_node.inspect}"</div><div class='del'>-      #puts "PARENT NODE: #{node.parent}"</div><div class='del'>-      if node.kind_of? Element and node.children.size &gt; 0</div><div class='del'>-        return node.children[0]</div><div class='del'>-      end</div><div class='del'>-      return next_sibling_node(node)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def next_sibling_node(node)</div><div class='del'>-      psn = node.next_sibling_node </div><div class='del'>-      while psn.nil?</div><div class='del'>-        if node.parent.nil? or node.parent.class == Document </div><div class='del'>-          return nil</div><div class='del'>-        end</div><div class='del'>-        node = node.parent</div><div class='del'>-        psn = node.next_sibling_node</div><div class='del'>-        #puts "psn = #{psn.inspect}"</div><div class='del'>-      end</div><div class='del'>-      return psn</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def norm b</div><div class='del'>-      case b</div><div class='del'>-      when true, false</div><div class='del'>-        return b</div><div class='del'>-      when 'true', 'false'</div><div class='del'>-        return Functions::boolean( b )</div><div class='del'>-      when /^\d+(\.\d+)?$/</div><div class='del'>-        return Functions::number( b )</div><div class='del'>-      else</div><div class='del'>-        return Functions::string( b )</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def equality_relational_compare( set1, op, set2 )</div><div class='del'>-      #puts "EQ_REL_COMP(#{set1.inspect} #{op.inspect} #{set2.inspect})"</div><div class='del'>-      if set1.kind_of? Array and set2.kind_of? Array</div><div class='del'>-			  #puts "#{set1.size} &amp; #{set2.size}"</div><div class='del'>-        if set1.size == 1 and set2.size == 1</div><div class='del'>-          set1 = set1[0]</div><div class='del'>-          set2 = set2[0]</div><div class='del'>-        elsif set1.size == 0 or set2.size == 0</div><div class='del'>-          nd = set1.size==0 ? set2 : set1</div><div class='del'>-          rv = nd.collect { |il| compare( il, op, nil ) }</div><div class='del'>-          #puts "RV = #{rv.inspect}"</div><div class='del'>-          return rv</div><div class='del'>-        else</div><div class='del'>-          res = []</div><div class='del'>-          enum = SyncEnumerator.new( set1, set2 ).each { |i1, i2|</div><div class='del'>-            #puts "i1 = #{i1.inspect} (#{i1.class.name})"</div><div class='del'>-            #puts "i2 = #{i2.inspect} (#{i2.class.name})"</div><div class='del'>-            i1 = norm( i1 )</div><div class='del'>-            i2 = norm( i2 )</div><div class='del'>-            res &lt;&lt; compare( i1, op, i2 )</div><div class='del'>-          }</div><div class='del'>-          return res</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-		  #puts "EQ_REL_COMP: #{set1.inspect} (#{set1.class.name}), #{op}, #{set2.inspect} (#{set2.class.name})"</div><div class='del'>-      #puts "COMPARING VALUES"</div><div class='del'>-      # If one is nodeset and other is number, compare number to each item</div><div class='del'>-      # in nodeset s.t. number op number(string(item))</div><div class='del'>-      # If one is nodeset and other is string, compare string to each item</div><div class='del'>-      # in nodeset s.t. string op string(item)</div><div class='del'>-      # If one is nodeset and other is boolean, compare boolean to each item</div><div class='del'>-      # in nodeset s.t. boolean op boolean(item)</div><div class='del'>-      if set1.kind_of? Array or set2.kind_of? Array</div><div class='del'>-			  #puts "ISA ARRAY"</div><div class='del'>-        if set1.kind_of? Array</div><div class='del'>-          a = set1</div><div class='del'>-          b = set2</div><div class='del'>-        else</div><div class='del'>-          a = set2</div><div class='del'>-          b = set1</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        case b</div><div class='del'>-        when true, false</div><div class='del'>-          return a.collect {|v| compare( Functions::boolean(v), op, b ) }</div><div class='del'>-        when Numeric</div><div class='del'>-          return a.collect {|v| compare( Functions::number(v), op, b )}</div><div class='del'>-        when /^\d+(\.\d+)?$/</div><div class='del'>-          b = Functions::number( b )</div><div class='del'>-          #puts "B = #{b.inspect}"</div><div class='del'>-          return a.collect {|v| compare( Functions::number(v), op, b )}</div><div class='del'>-        else</div><div class='del'>-				  #puts "Functions::string( #{b}(#{b.class.name}) ) = #{Functions::string(b)}"</div><div class='del'>-          b = Functions::string( b )</div><div class='del'>-          return a.collect { |v| compare( Functions::string(v), op, b ) }</div><div class='del'>-        end</div><div class='del'>-      else</div><div class='del'>-        # If neither is nodeset,</div><div class='del'>-        #   If op is = or !=</div><div class='del'>-        #     If either boolean, convert to boolean</div><div class='del'>-        #     If either number, convert to number</div><div class='del'>-        #     Else, convert to string</div><div class='del'>-        #   Else</div><div class='del'>-        #     Convert both to numbers and compare</div><div class='del'>-        s1 = set1.to_s</div><div class='del'>-        s2 = set2.to_s</div><div class='del'>-        #puts "EQ_REL_COMP: #{set1}=&gt;#{s1}, #{set2}=&gt;#{s2}"</div><div class='del'>-        if s1 == 'true' or s1 == 'false' or s2 == 'true' or s2 == 'false'</div><div class='del'>-          #puts "Functions::boolean(#{set1})=&gt;#{Functions::boolean(set1)}"</div><div class='del'>-          #puts "Functions::boolean(#{set2})=&gt;#{Functions::boolean(set2)}"</div><div class='del'>-          set1 = Functions::boolean( set1 )</div><div class='del'>-          set2 = Functions::boolean( set2 )</div><div class='del'>-        else</div><div class='del'>-          if op == :eq or op == :neq</div><div class='del'>-            if s1 =~ /^\d+(\.\d+)?$/ or s2 =~ /^\d+(\.\d+)?$/</div><div class='del'>-              set1 = Functions::number( s1 )</div><div class='del'>-              set2 = Functions::number( s2 )</div><div class='del'>-            else</div><div class='del'>-              set1 = Functions::string( set1 )</div><div class='del'>-              set2 = Functions::string( set2 )</div><div class='del'>-            end</div><div class='del'>-          else</div><div class='del'>-            set1 = Functions::number( set1 )</div><div class='del'>-            set2 = Functions::number( set2 )</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        #puts "EQ_REL_COMP: #{set1} #{op} #{set2}"</div><div class='del'>-        #puts "&gt;&gt;&gt; #{compare( set1, op, set2 )}"</div><div class='del'>-        return compare( set1, op, set2 )</div><div class='del'>-      end</div><div class='del'>-      return false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def compare a, op, b</div><div class='del'>-      #puts "COMPARE #{a.inspect}(#{a.class.name}) #{op} #{b.inspect}(#{b.class.name})"</div><div class='del'>-      case op</div><div class='del'>-      when :eq</div><div class='del'>-        a == b</div><div class='del'>-      when :neq</div><div class='del'>-        a != b</div><div class='del'>-      when :lt</div><div class='del'>-        a &lt; b</div><div class='del'>-      when :lteq</div><div class='del'>-        a &lt;= b</div><div class='del'>-      when :gt</div><div class='del'>-        a &gt; b</div><div class='del'>-      when :gteq</div><div class='del'>-        a &gt;= b</div><div class='del'>-      when :and</div><div class='del'>-        a and b</div><div class='del'>-      when :or</div><div class='del'>-        a or b</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'>-end</div><div class='head'>diff --git a/lib/rinda/rinda.rb b/lib/rinda/rinda.rb<br/>deleted file mode 100644<br/>index 6c59e68654..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rinda/rinda.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rinda/rinda.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,283 +0,0 @@</div><div class='del'>-require 'drb/drb'</div><div class='del'>-require 'thread'</div><div class='del'>-</div><div class='del'>-##</div><div class='del'>-# A module to implement the Linda distributed computing paradigm in Ruby.</div><div class='del'>-#</div><div class='del'>-# Rinda is part of DRb (dRuby).</div><div class='del'>-#</div><div class='del'>-# == Example(s)</div><div class='del'>-#</div><div class='del'>-# See the sample/drb/ directory in the Ruby distribution, from 1.8.2 onwards.</div><div class='del'>-#</div><div class='del'>-#--</div><div class='del'>-# TODO</div><div class='del'>-# == Introduction to Linda/rinda?</div><div class='del'>-#</div><div class='del'>-# == Why is this library separate from DRb?</div><div class='del'>-</div><div class='del'>-module Rinda</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Rinda error base class</div><div class='del'>-</div><div class='del'>-  class RindaError &lt; RuntimeError; end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Raised when a hash-based tuple has an invalid key.</div><div class='del'>-</div><div class='del'>-  class InvalidHashTupleKey &lt; RindaError; end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Raised when trying to use a canceled tuple.</div><div class='del'>-</div><div class='del'>-  class RequestCanceledError &lt; ThreadError; end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # Raised when trying to use an expired tuple.</div><div class='del'>-</div><div class='del'>-  class RequestExpiredError &lt; ThreadError; end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # A tuple is the elementary object in Rinda programming.</div><div class='del'>-  # Tuples may be matched against templates if the tuple and</div><div class='del'>-  # the template are the same size.</div><div class='del'>-</div><div class='del'>-  class Tuple</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new Tuple from +ary_or_hash+ which must be an Array or Hash.</div><div class='del'>-</div><div class='del'>-    def initialize(ary_or_hash)</div><div class='del'>-      if hash?(ary_or_hash)</div><div class='del'>-        init_with_hash(ary_or_hash)</div><div class='del'>-      else</div><div class='del'>-        init_with_ary(ary_or_hash)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # The number of elements in the tuple.</div><div class='del'>-    </div><div class='del'>-    def size</div><div class='del'>-      @tuple.size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Accessor method for elements of the tuple.</div><div class='del'>-</div><div class='del'>-    def [](k)</div><div class='del'>-      @tuple[k]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Fetches item +k+ from the tuple.</div><div class='del'>-</div><div class='del'>-    def fetch(k)</div><div class='del'>-      @tuple.fetch(k)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Iterate through the tuple, yielding the index or key, and the</div><div class='del'>-    # value, thus ensuring arrays are iterated similarly to hashes.</div><div class='del'>-</div><div class='del'>-    def each # FIXME</div><div class='del'>-      if Hash === @tuple</div><div class='del'>-        @tuple.each { |k, v| yield(k, v) }</div><div class='del'>-      else</div><div class='del'>-        @tuple.each_with_index { |v, k| yield(k, v) }</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Return the tuple itself</div><div class='del'>-    def value</div><div class='del'>-      @tuple</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def hash?(ary_or_hash)</div><div class='del'>-      ary_or_hash.respond_to?(:keys)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Munges +ary+ into a valid Tuple.</div><div class='del'>-</div><div class='del'>-    def init_with_ary(ary)</div><div class='del'>-      @tuple = Array.new(ary.size)</div><div class='del'>-      @tuple.size.times do |i|</div><div class='del'>-        @tuple[i] = ary[i]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Ensures +hash+ is a valid Tuple.</div><div class='del'>-</div><div class='del'>-    def init_with_hash(hash)</div><div class='del'>-      @tuple = Hash.new</div><div class='del'>-      hash.each do |k, v|</div><div class='del'>-        raise InvalidHashTupleKey unless String === k</div><div class='del'>-        @tuple[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'>-  ##</div><div class='del'>-  # Templates are used to match tuples in Rinda.</div><div class='del'>-</div><div class='del'>-  class Template &lt; Tuple</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Matches this template against +tuple+.  The +tuple+ must be the same</div><div class='del'>-    # size as the template.  An element with a +nil+ value in a template acts</div><div class='del'>-    # as a wildcard, matching any value in the corresponding position in the</div><div class='del'>-    # tuple.  Elements of the template match the +tuple+ if the are #== or</div><div class='del'>-    # #===.</div><div class='del'>-    #</div><div class='del'>-    #   Template.new([:foo, 5]).match   Tuple.new([:foo, 5]) # =&gt; true</div><div class='del'>-    #   Template.new([:foo, nil]).match Tuple.new([:foo, 5]) # =&gt; true</div><div class='del'>-    #   Template.new([String]).match    Tuple.new(['hello']) # =&gt; true</div><div class='del'>-    #</div><div class='del'>-    #   Template.new([:foo]).match      Tuple.new([:foo, 5]) # =&gt; false</div><div class='del'>-    #   Template.new([:foo, 6]).match   Tuple.new([:foo, 5]) # =&gt; false</div><div class='del'>-    #   Template.new([:foo, nil]).match Tuple.new([:foo])    # =&gt; false</div><div class='del'>-    #   Template.new([:foo, 6]).match   Tuple.new([:foo])    # =&gt; false</div><div class='del'>-</div><div class='del'>-    def match(tuple)</div><div class='del'>-      return false unless tuple.respond_to?(:size)</div><div class='del'>-      return false unless tuple.respond_to?(:fetch)</div><div class='del'>-      return false unless self.size == tuple.size</div><div class='del'>-      each do |k, v|</div><div class='del'>-        begin</div><div class='del'>-          it = tuple.fetch(k)</div><div class='del'>-        rescue</div><div class='del'>-          return false</div><div class='del'>-        end</div><div class='del'>-        next if v.nil?</div><div class='del'>-        next if v == it</div><div class='del'>-        next if v === it</div><div class='del'>-        return false</div><div class='del'>-      end</div><div class='del'>-      return true</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ##</div><div class='del'>-    # Alias for #match.</div><div class='del'>-</div><div class='del'>-    def ===(tuple)</div><div class='del'>-      match(tuple)</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'>-  # &lt;i&gt;Documentation?&lt;/i&gt;</div><div class='del'>-</div><div class='del'>-  class DRbObjectTemplate</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new DRbObjectTemplate that will match against +uri+ and +ref+.</div><div class='del'>-</div><div class='del'>-    def initialize(uri=nil, ref=nil)</div><div class='del'>-      @drb_uri = uri</div><div class='del'>-      @drb_ref = ref</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ##</div><div class='del'>-    # This DRbObjectTemplate matches +ro+ if the remote object's drburi and</div><div class='del'>-    # drbref are the same.  +nil+ is used as a wildcard.</div><div class='del'>-</div><div class='del'>-    def ===(ro)</div><div class='del'>-      return true if super(ro)</div><div class='del'>-      unless @drb_uri.nil?</div><div class='del'>-        return false unless (@drb_uri === ro.__drburi rescue false)</div><div class='del'>-      end</div><div class='del'>-      unless @drb_ref.nil?</div><div class='del'>-        return false unless (@drb_ref === ro.__drbref rescue false)</div><div class='del'>-      end</div><div class='del'>-      true</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'>-  # TupleSpaceProxy allows a remote Tuplespace to appear as local.</div><div class='del'>-</div><div class='del'>-  class TupleSpaceProxy</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new TupleSpaceProxy to wrap +ts+.</div><div class='del'>-</div><div class='del'>-    def initialize(ts)</div><div class='del'>-      @ts = ts</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ##</div><div class='del'>-    # Adds +tuple+ to the proxied TupleSpace.  See TupleSpace#write.</div><div class='del'>-</div><div class='del'>-    def write(tuple, sec=nil)</div><div class='del'>-      @ts.write(tuple, sec)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ##</div><div class='del'>-    # Takes +tuple+ from the proxied TupleSpace.  See TupleSpace#take.</div><div class='del'>-</div><div class='del'>-    def take(tuple, sec=nil, &amp;block)</div><div class='del'>-      port = []</div><div class='del'>-      @ts.move(DRbObject.new(port), tuple, sec, &amp;block)</div><div class='del'>-      port[0]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ##</div><div class='del'>-    # Reads +tuple+ from the proxied TupleSpace.  See TupleSpace#read.</div><div class='del'>-</div><div class='del'>-    def read(tuple, sec=nil, &amp;block)</div><div class='del'>-      @ts.read(tuple, sec, &amp;block)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ##</div><div class='del'>-    # Reads all tuples matching +tuple+ from the proxied TupleSpace.  See</div><div class='del'>-    # TupleSpace#read_all.</div><div class='del'>-</div><div class='del'>-    def read_all(tuple)</div><div class='del'>-      @ts.read_all(tuple)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ##</div><div class='del'>-    # Registers for notifications of event +ev+ on the proxied TupleSpace.</div><div class='del'>-    # See TupleSpace#notify</div><div class='del'>-</div><div class='del'>-    def notify(ev, tuple, sec=nil)</div><div class='del'>-      @ts.notify(ev, tuple, sec)</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'>-  # An SimpleRenewer allows a TupleSpace to check if a TupleEntry is still</div><div class='del'>-  # alive.</div><div class='del'>-</div><div class='del'>-  class SimpleRenewer</div><div class='del'>-</div><div class='del'>-    include DRbUndumped</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new SimpleRenewer that keeps an object alive for another +sec+</div><div class='del'>-    # seconds.</div><div class='del'>-</div><div class='del'>-    def initialize(sec=180)</div><div class='del'>-      @sec = sec</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Called by the TupleSpace to check if the object is still alive.</div><div class='del'>-</div><div class='del'>-    def renew</div><div class='del'>-      @sec</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='head'>diff --git a/lib/rinda/ring.rb b/lib/rinda/ring.rb<br/>deleted file mode 100644<br/>index 1fad92dbc7..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rinda/ring.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rinda/ring.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,271 +0,0 @@</div><div class='del'>-#</div><div class='del'>-# Note: Rinda::Ring API is unstable.</div><div class='del'>-#</div><div class='del'>-require 'drb/drb'</div><div class='del'>-require 'rinda/rinda'</div><div class='del'>-require 'thread'</div><div class='del'>-</div><div class='del'>-module Rinda</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # The default port Ring discovery will use.</div><div class='del'>-</div><div class='del'>-  Ring_PORT = 7647</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # A RingServer allows a Rinda::TupleSpace to be located via UDP broadcasts.</div><div class='del'>-  # Service location uses the following steps:</div><div class='del'>-  #</div><div class='del'>-  # 1. A RingServer begins listening on the broadcast UDP address.</div><div class='del'>-  # 2. A RingFinger sends a UDP packet containing the DRb URI where it will</div><div class='del'>-  #    listen for a reply.</div><div class='del'>-  # 3. The RingServer receives the UDP packet and connects back to the</div><div class='del'>-  #    provided DRb URI with the DRb service.</div><div class='del'>-</div><div class='del'>-  class RingServer</div><div class='del'>-</div><div class='del'>-    include DRbUndumped</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Advertises +ts+ on the UDP broadcast address at +port+.</div><div class='del'>-</div><div class='del'>-    def initialize(ts, port=Ring_PORT)</div><div class='del'>-      @ts = ts</div><div class='del'>-      @soc = UDPSocket.open</div><div class='del'>-      @soc.bind('', port)</div><div class='del'>-      @w_service = write_service</div><div class='del'>-      @r_service = reply_service</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a thread that picks up UDP packets and passes them to do_write</div><div class='del'>-    # for decoding.</div><div class='del'>-</div><div class='del'>-    def write_service</div><div class='del'>-      Thread.new do</div><div class='del'>-	loop do</div><div class='del'>-	  msg = @soc.recv(1024)</div><div class='del'>-	  do_write(msg)</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'>-    # Extracts the response URI from +msg+ and adds it to TupleSpace where it</div><div class='del'>-    # will be picked up by +reply_service+ for notification.</div><div class='del'>-</div><div class='del'>-    def do_write(msg)</div><div class='del'>-      Thread.new do</div><div class='del'>-	begin</div><div class='del'>-	  tuple, sec = Marshal.load(msg)</div><div class='del'>-	  @ts.write(tuple, sec)</div><div class='del'>-	rescue</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'>-    # Creates a thread that notifies waiting clients from the TupleSpace.</div><div class='del'>-</div><div class='del'>-    def reply_service</div><div class='del'>-      Thread.new do</div><div class='del'>-	loop do</div><div class='del'>-	  do_reply</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'>-    # Pulls lookup tuples out of the TupleSpace and sends their DRb object the</div><div class='del'>-    # address of the local TupleSpace.</div><div class='del'>-</div><div class='del'>-    def do_reply</div><div class='del'>-      tuple = @ts.take([:lookup_ring, nil])</div><div class='del'>-      Thread.new { tuple[1].call(@ts) rescue nil}</div><div class='del'>-    rescue</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'>-  # RingFinger is used by RingServer clients to discover the RingServer's</div><div class='del'>-  # TupleSpace.  Typically, all a client needs to do is call</div><div class='del'>-  # RingFinger.primary to retrieve the remote TupleSpace, which it can then</div><div class='del'>-  # begin using.</div><div class='del'>-</div><div class='del'>-  class RingFinger</div><div class='del'>-</div><div class='del'>-    @@broadcast_list = ['&lt;broadcast&gt;', 'localhost']</div><div class='del'>-</div><div class='del'>-    @@finger = nil</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a singleton RingFinger and looks for a RingServer.  Returns the</div><div class='del'>-    # created RingFinger.</div><div class='del'>-</div><div class='del'>-    def self.finger</div><div class='del'>-      unless @@finger </div><div class='del'>-	@@finger = self.new</div><div class='del'>-	@@finger.lookup_ring_any</div><div class='del'>-      end</div><div class='del'>-      @@finger</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Returns the first advertised TupleSpace.</div><div class='del'>-</div><div class='del'>-    def self.primary</div><div class='del'>-      finger.primary</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Contains all discovered TupleSpaces except for the primary.</div><div class='del'>-</div><div class='del'>-    def self.to_a</div><div class='del'>-      finger.to_a</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # The list of addresses where RingFinger will send query packets.</div><div class='del'>-</div><div class='del'>-    attr_accessor :broadcast_list</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # The port that RingFinger will send query packets to.</div><div class='del'>-</div><div class='del'>-    attr_accessor :port</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Contain the first advertised TupleSpace after lookup_ring_any is called.</div><div class='del'>-</div><div class='del'>-    attr_accessor :primary</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new RingFinger that will look for RingServers at +port+ on</div><div class='del'>-    # the addresses in +broadcast_list+.</div><div class='del'>-</div><div class='del'>-    def initialize(broadcast_list=@@broadcast_list, port=Ring_PORT)</div><div class='del'>-      @broadcast_list = broadcast_list || ['localhost']</div><div class='del'>-      @port = port</div><div class='del'>-      @primary = nil</div><div class='del'>-      @rings = []</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Contains all discovered TupleSpaces except for the primary.</div><div class='del'>-</div><div class='del'>-    def to_a</div><div class='del'>-      @rings</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Iterates over all discovered TupleSpaces starting with the primary.</div><div class='del'>-</div><div class='del'>-    def each</div><div class='del'>-      lookup_ring_any unless @primary</div><div class='del'>-      return unless @primary</div><div class='del'>-      yield(@primary)</div><div class='del'>-      @rings.each { |x| yield(x) }</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Looks up RingServers waiting +timeout+ seconds.  RingServers will be</div><div class='del'>-    # given +block+ as a callback, which will be called with the remote</div><div class='del'>-    # TupleSpace.</div><div class='del'>-</div><div class='del'>-    def lookup_ring(timeout=5, &amp;block)</div><div class='del'>-      return lookup_ring_any(timeout) unless block_given?</div><div class='del'>-</div><div class='del'>-      msg = Marshal.dump([[:lookup_ring, DRbObject.new(block)], timeout])</div><div class='del'>-      @broadcast_list.each do |it|</div><div class='del'>-	soc = UDPSocket.open</div><div class='del'>-	begin</div><div class='del'>-	  soc.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)</div><div class='del'>-	  soc.send(msg, 0, it, @port)</div><div class='del'>-	rescue</div><div class='del'>-	  nil</div><div class='del'>-	ensure</div><div class='del'>-	  soc.close</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      sleep(timeout)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Returns the first found remote TupleSpace.  Any further recovered</div><div class='del'>-    # TupleSpaces can be found by calling +to_a+.</div><div class='del'>-</div><div class='del'>-    def lookup_ring_any(timeout=5)</div><div class='del'>-      queue = Queue.new</div><div class='del'>-</div><div class='del'>-      th = Thread.new do</div><div class='del'>-	self.lookup_ring(timeout) do |ts|</div><div class='del'>-	  queue.push(ts)</div><div class='del'>-	end</div><div class='del'>-	queue.push(nil)</div><div class='del'>-	while it = queue.pop</div><div class='del'>-	  @rings.push(it)</div><div class='del'>-	end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      @primary = queue.pop</div><div class='del'>-      raise('RingNotFound') if @primary.nil?</div><div class='del'>-      @primary</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'>-  # RingProvider uses a RingServer advertised TupleSpace as a name service.</div><div class='del'>-  # TupleSpace clients can register themselves with the remote TupleSpace and</div><div class='del'>-  # look up other provided services via the remote TupleSpace.</div><div class='del'>-  #</div><div class='del'>-  # Services are registered with a tuple of the format [:name, klass,</div><div class='del'>-  # DRbObject, description].</div><div class='del'>-</div><div class='del'>-  class RingProvider</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a RingProvider that will provide a +klass+ service running on</div><div class='del'>-    # +front+, with a +description+.  +renewer+ is optional.</div><div class='del'>-</div><div class='del'>-    def initialize(klass, front, desc, renewer = nil)</div><div class='del'>-      @tuple = [:name, klass, front, desc]</div><div class='del'>-      @renewer = renewer || Rinda::SimpleRenewer.new</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Advertises this service on the primary remote TupleSpace.</div><div class='del'>-</div><div class='del'>-    def provide</div><div class='del'>-      ts = Rinda::RingFinger.primary</div><div class='del'>-      ts.write(@tuple, @renewer)</div><div class='del'>-    end</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'>-if __FILE__ == $0</div><div class='del'>-  DRb.start_service</div><div class='del'>-  case ARGV.shift</div><div class='del'>-  when 's'</div><div class='del'>-    require 'rinda/tuplespace'</div><div class='del'>-    ts = Rinda::TupleSpace.new</div><div class='del'>-    place = Rinda::RingServer.new(ts)</div><div class='del'>-    $stdin.gets</div><div class='del'>-  when 'w'</div><div class='del'>-    finger = Rinda::RingFinger.new(nil)</div><div class='del'>-    finger.lookup_ring do |ts|</div><div class='del'>-      p ts</div><div class='del'>-      ts.write([:hello, :world])</div><div class='del'>-    end</div><div class='del'>-  when 'r'</div><div class='del'>-    finger = Rinda::RingFinger.new(nil)</div><div class='del'>-    finger.lookup_ring do |ts|</div><div class='del'>-      p ts</div><div class='del'>-      p ts.take([nil, nil])</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='head'>diff --git a/lib/rinda/tuplespace.rb b/lib/rinda/tuplespace.rb<br/>deleted file mode 100644<br/>index b0409dde3b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rinda/tuplespace.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rinda/tuplespace.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,642 +0,0 @@</div><div class='del'>-require 'monitor'</div><div class='del'>-require 'thread'</div><div class='del'>-require 'drb/drb'</div><div class='del'>-require 'rinda/rinda'</div><div class='del'>-require 'enumerator'</div><div class='del'>-require 'forwardable'</div><div class='del'>-</div><div class='del'>-module Rinda</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # A TupleEntry is a Tuple (i.e. a possible entry in some Tuplespace)</div><div class='del'>-  # together with expiry and cancellation data.</div><div class='del'>-</div><div class='del'>-  class TupleEntry</div><div class='del'>-</div><div class='del'>-    include DRbUndumped</div><div class='del'>-</div><div class='del'>-    attr_accessor :expires</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a TupleEntry based on +ary+ with an optional renewer or expiry</div><div class='del'>-    # time +sec+.</div><div class='del'>-    #</div><div class='del'>-    # A renewer must implement the +renew+ method which returns a Numeric,</div><div class='del'>-    # nil, or true to indicate when the tuple has expired.</div><div class='del'>-</div><div class='del'>-    def initialize(ary, sec=nil)</div><div class='del'>-      @cancel = false</div><div class='del'>-      @expires = nil</div><div class='del'>-      @tuple = make_tuple(ary)</div><div class='del'>-      @renewer = nil</div><div class='del'>-      renew(sec)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Marks this TupleEntry as canceled.</div><div class='del'>-</div><div class='del'>-    def cancel</div><div class='del'>-      @cancel = true</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # A TupleEntry is dead when it is canceled or expired.</div><div class='del'>-</div><div class='del'>-    def alive?</div><div class='del'>-      !canceled? &amp;&amp; !expired?</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Return the object which makes up the tuple itself: the Array</div><div class='del'>-    # or Hash.</div><div class='del'>-</div><div class='del'>-    def value; @tuple.value; end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Returns the canceled status.</div><div class='del'>-</div><div class='del'>-    def canceled?; @cancel; end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Has this tuple expired? (true/false).</div><div class='del'>-    #</div><div class='del'>-    # A tuple has expired when its expiry timer based on the +sec+ argument to</div><div class='del'>-    # #initialize runs out.</div><div class='del'>-</div><div class='del'>-    def expired?</div><div class='del'>-      return true unless @expires</div><div class='del'>-      return false if @expires &gt; Time.now</div><div class='del'>-      return true if @renewer.nil?</div><div class='del'>-      renew(@renewer)</div><div class='del'>-      return true unless @expires</div><div class='del'>-      return @expires &lt; Time.now</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Reset the expiry time according to +sec_or_renewer+.  </div><div class='del'>-    #</div><div class='del'>-    # +nil+::    it is set to expire in the far future.</div><div class='del'>-    # +false+::  it has expired.</div><div class='del'>-    # Numeric::  it will expire in that many seconds.</div><div class='del'>-    #</div><div class='del'>-    # Otherwise the argument refers to some kind of renewer object</div><div class='del'>-    # which will reset its expiry time. </div><div class='del'>-</div><div class='del'>-    def renew(sec_or_renewer)</div><div class='del'>-      sec, @renewer = get_renewer(sec_or_renewer)</div><div class='del'>-      @expires = make_expires(sec)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Returns an expiry Time based on +sec+ which can be one of:</div><div class='del'>-    # Numeric:: +sec+ seconds into the future</div><div class='del'>-    # +true+::  the expiry time is the start of 1970 (i.e. expired)</div><div class='del'>-    # +nil+::   it is  Tue Jan 19 03:14:07 GMT Standard Time 2038 (i.e. when</div><div class='del'>-    #           UNIX clocks will die)</div><div class='del'>-</div><div class='del'>-    def make_expires(sec=nil)</div><div class='del'>-      case sec</div><div class='del'>-      when Numeric</div><div class='del'>-        Time.now + sec</div><div class='del'>-      when true</div><div class='del'>-        Time.at(1)</div><div class='del'>-      when nil</div><div class='del'>-        Time.at(2**31-1)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Retrieves +key+ from the tuple.</div><div class='del'>-</div><div class='del'>-    def [](key)</div><div class='del'>-      @tuple[key]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Fetches +key+ from the tuple.</div><div class='del'>-</div><div class='del'>-    def fetch(key)</div><div class='del'>-      @tuple.fetch(key)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # The size of the tuple.</div><div class='del'>-</div><div class='del'>-    def size</div><div class='del'>-      @tuple.size</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a Rinda::Tuple for +ary+.</div><div class='del'>-</div><div class='del'>-    def make_tuple(ary)</div><div class='del'>-      Rinda::Tuple.new(ary)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Returns a valid argument to make_expires and the renewer or nil.</div><div class='del'>-    #</div><div class='del'>-    # Given +true+, +nil+, or Numeric, returns that value and +nil+ (no actual</div><div class='del'>-    # renewer).  Otherwise it returns an expiry value from calling +it.renew+</div><div class='del'>-    # and the renewer.</div><div class='del'>-</div><div class='del'>-    def get_renewer(it)</div><div class='del'>-      case it</div><div class='del'>-      when Numeric, true, nil</div><div class='del'>-        return it, nil</div><div class='del'>-      else</div><div class='del'>-        begin</div><div class='del'>-          return it.renew, it</div><div class='del'>-        rescue Exception</div><div class='del'>-          return it, nil</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'>-  # A TemplateEntry is a Template together with expiry and cancellation data.</div><div class='del'>-</div><div class='del'>-  class TemplateEntry &lt; TupleEntry</div><div class='del'>-    ##</div><div class='del'>-    # Matches this TemplateEntry against +tuple+.  See Template#match for</div><div class='del'>-    # details on how a Template matches a Tuple.</div><div class='del'>-</div><div class='del'>-    def match(tuple)</div><div class='del'>-      @tuple.match(tuple)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    alias === match</div><div class='del'>-</div><div class='del'>-    def make_tuple(ary) # :nodoc:</div><div class='del'>-      Rinda::Template.new(ary)</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'>-  # &lt;i&gt;Documentation?&lt;/i&gt;</div><div class='del'>-</div><div class='del'>-  class WaitTemplateEntry &lt; TemplateEntry</div><div class='del'>-</div><div class='del'>-    attr_reader :found</div><div class='del'>-</div><div class='del'>-    def initialize(place, ary, expires=nil)</div><div class='del'>-      super(ary, expires)</div><div class='del'>-      @place = place</div><div class='del'>-      @cond = place.new_cond</div><div class='del'>-      @found = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def cancel</div><div class='del'>-      super</div><div class='del'>-      signal</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def wait</div><div class='del'>-      @cond.wait</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def read(tuple)</div><div class='del'>-      @found = tuple</div><div class='del'>-      signal</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def signal</div><div class='del'>-      @place.synchronize do</div><div class='del'>-        @cond.signal</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'>-  # A NotifyTemplateEntry is returned by TupleSpace#notify and is notified of</div><div class='del'>-  # TupleSpace changes.  You may receive either your subscribed event or the</div><div class='del'>-  # 'close' event when iterating over notifications.</div><div class='del'>-  #</div><div class='del'>-  # See TupleSpace#notify_event for valid notification types.</div><div class='del'>-  #</div><div class='del'>-  # == Example</div><div class='del'>-  #</div><div class='del'>-  #   ts = Rinda::TupleSpace.new</div><div class='del'>-  #   observer = ts.notify 'write', [nil]</div><div class='del'>-  #   </div><div class='del'>-  #   Thread.start do</div><div class='del'>-  #     observer.each { |t| p t }</div><div class='del'>-  #   end</div><div class='del'>-  #   </div><div class='del'>-  #   3.times { |i| ts.write [i] }</div><div class='del'>-  #</div><div class='del'>-  # Outputs:</div><div class='del'>-  #</div><div class='del'>-  #   ['write', [0]]</div><div class='del'>-  #   ['write', [1]]</div><div class='del'>-  #   ['write', [2]]</div><div class='del'>-</div><div class='del'>-  class NotifyTemplateEntry &lt; TemplateEntry</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new NotifyTemplateEntry that watches +place+ for +event+s that</div><div class='del'>-    # match +tuple+.</div><div class='del'>-</div><div class='del'>-    def initialize(place, event, tuple, expires=nil)</div><div class='del'>-      ary = [event, Rinda::Template.new(tuple)]</div><div class='del'>-      super(ary, expires)</div><div class='del'>-      @queue = Queue.new</div><div class='del'>-      @done = false</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Called by TupleSpace to notify this NotifyTemplateEntry of a new event.</div><div class='del'>-</div><div class='del'>-    def notify(ev)</div><div class='del'>-      @queue.push(ev)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Retrieves a notification.  Raises RequestExpiredError when this</div><div class='del'>-    # NotifyTemplateEntry expires.</div><div class='del'>-</div><div class='del'>-    def pop</div><div class='del'>-      raise RequestExpiredError if @done</div><div class='del'>-      it = @queue.pop</div><div class='del'>-      @done = true if it[0] == 'close'</div><div class='del'>-      return it</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Yields event/tuple pairs until this NotifyTemplateEntry expires.</div><div class='del'>-</div><div class='del'>-    def each # :yields: event, tuple</div><div class='del'>-      while !@done</div><div class='del'>-        it = pop</div><div class='del'>-        yield(it)</div><div class='del'>-      end</div><div class='del'>-    rescue </div><div class='del'>-    ensure</div><div class='del'>-      cancel</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'>-  # TupleBag is an unordered collection of tuples. It is the basis</div><div class='del'>-  # of Tuplespace.</div><div class='del'>-</div><div class='del'>-  class TupleBag</div><div class='del'>-    class TupleBin</div><div class='del'>-      extend Forwardable</div><div class='del'>-      def_delegators '@bin', :find_all, :delete_if, :each, :empty?</div><div class='del'>-</div><div class='del'>-      def initialize</div><div class='del'>-        @bin = []</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def add(tuple)</div><div class='del'>-        @bin.push(tuple)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def delete(tuple)</div><div class='del'>-        idx = @bin.rindex(tuple)</div><div class='del'>-        @bin.delete_at(idx) if idx</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def find(&amp;blk)</div><div class='del'>-        @bin.reverse_each do |x|</div><div class='del'>-          return x if yield(x)</div><div class='del'>-        end</div><div class='del'>-        nil</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initialize # :nodoc:</div><div class='del'>-      @hash = {}</div><div class='del'>-      @enum = Enumerable::Enumerator.new(self, :each_entry)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # +true+ if the TupleBag to see if it has any expired entries.</div><div class='del'>-</div><div class='del'>-    def has_expires?</div><div class='del'>-      @enum.find do |tuple|</div><div class='del'>-        tuple.expires</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Add +tuple+ to the TupleBag.</div><div class='del'>-</div><div class='del'>-    def push(tuple)</div><div class='del'>-      key = bin_key(tuple)</div><div class='del'>-      @hash[key] ||= TupleBin.new</div><div class='del'>-      @hash[key].add(tuple)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Removes +tuple+ from the TupleBag.</div><div class='del'>-</div><div class='del'>-    def delete(tuple)</div><div class='del'>-      key = bin_key(tuple)</div><div class='del'>-      bin = @hash[key]</div><div class='del'>-      return nil unless bin</div><div class='del'>-      bin.delete(tuple)</div><div class='del'>-      @hash.delete(key) if bin.empty?</div><div class='del'>-      tuple</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Finds all live tuples that match +template+.</div><div class='del'>-    def find_all(template)</div><div class='del'>-      bin_for_find(template).find_all do |tuple|</div><div class='del'>-        tuple.alive? &amp;&amp; template.match(tuple)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Finds a live tuple that matches +template+.</div><div class='del'>-</div><div class='del'>-    def find(template)</div><div class='del'>-      bin_for_find(template).find do |tuple|</div><div class='del'>-        tuple.alive? &amp;&amp; template.match(tuple)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Finds all tuples in the TupleBag which when treated as templates, match</div><div class='del'>-    # +tuple+ and are alive.</div><div class='del'>-</div><div class='del'>-    def find_all_template(tuple)</div><div class='del'>-      @enum.find_all do |template|</div><div class='del'>-        template.alive? &amp;&amp; template.match(tuple)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Delete tuples which dead tuples from the TupleBag, returning the deleted</div><div class='del'>-    # tuples.</div><div class='del'>-</div><div class='del'>-    def delete_unless_alive</div><div class='del'>-      deleted = []</div><div class='del'>-      @hash.each do |key, bin|</div><div class='del'>-        bin.delete_if do |tuple|</div><div class='del'>-          if tuple.alive?</div><div class='del'>-            false</div><div class='del'>-          else</div><div class='del'>-            deleted.push(tuple)</div><div class='del'>-            true</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      deleted</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    def each_entry(&amp;blk)</div><div class='del'>-      @hash.each do |k, v|</div><div class='del'>-        v.each(&amp;blk)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def bin_key(tuple)</div><div class='del'>-      head = tuple[0]</div><div class='del'>-      if head.class == Symbol</div><div class='del'>-        return head</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 bin_for_find(template)</div><div class='del'>-      key = bin_key(template)</div><div class='del'>-      key ? @hash.fetch(key, []) : @enum</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  ##</div><div class='del'>-  # The Tuplespace manages access to the tuples it contains,</div><div class='del'>-  # ensuring mutual exclusion requirements are met.</div><div class='del'>-  #</div><div class='del'>-  # The +sec+ option for the write, take, move, read and notify methods may</div><div class='del'>-  # either be a number of seconds or a Renewer object.</div><div class='del'>-</div><div class='del'>-  class TupleSpace</div><div class='del'>-</div><div class='del'>-    include DRbUndumped</div><div class='del'>-    include MonitorMixin</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a new TupleSpace.  +period+ is used to control how often to look</div><div class='del'>-    # for dead tuples after modifications to the TupleSpace.</div><div class='del'>-    #</div><div class='del'>-    # If no dead tuples are found +period+ seconds after the last</div><div class='del'>-    # modification, the TupleSpace will stop looking for dead tuples.</div><div class='del'>-</div><div class='del'>-    def initialize(period=60)</div><div class='del'>-      super()</div><div class='del'>-      @bag = TupleBag.new</div><div class='del'>-      @read_waiter = TupleBag.new</div><div class='del'>-      @take_waiter = TupleBag.new</div><div class='del'>-      @notify_waiter = TupleBag.new</div><div class='del'>-      @period = period</div><div class='del'>-      @keeper = nil</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Adds +tuple+</div><div class='del'>-</div><div class='del'>-    def write(tuple, sec=nil)</div><div class='del'>-      entry = create_entry(tuple, sec)</div><div class='del'>-      synchronize do</div><div class='del'>-        if entry.expired?</div><div class='del'>-          @read_waiter.find_all_template(entry).each do |template|</div><div class='del'>-            template.read(tuple)</div><div class='del'>-          end</div><div class='del'>-          notify_event('write', entry.value)</div><div class='del'>-          notify_event('delete', entry.value)</div><div class='del'>-        else</div><div class='del'>-          @bag.push(entry)</div><div class='del'>-          start_keeper if entry.expires</div><div class='del'>-          @read_waiter.find_all_template(entry).each do |template|</div><div class='del'>-            template.read(tuple)</div><div class='del'>-          end</div><div class='del'>-          @take_waiter.find_all_template(entry).each do |template|</div><div class='del'>-            template.signal</div><div class='del'>-          end</div><div class='del'>-          notify_event('write', entry.value)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      entry</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Removes +tuple+</div><div class='del'>-</div><div class='del'>-    def take(tuple, sec=nil, &amp;block)</div><div class='del'>-      move(nil, tuple, sec, &amp;block)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Moves +tuple+ to +port+.</div><div class='del'>-</div><div class='del'>-    def move(port, tuple, sec=nil)</div><div class='del'>-      template = WaitTemplateEntry.new(self, tuple, sec)</div><div class='del'>-      yield(template) if block_given?</div><div class='del'>-      synchronize do</div><div class='del'>-        entry = @bag.find(template)</div><div class='del'>-        if entry</div><div class='del'>-          port.push(entry.value) if port</div><div class='del'>-          @bag.delete(entry)</div><div class='del'>-          notify_event('take', entry.value)</div><div class='del'>-          return entry.value</div><div class='del'>-        end</div><div class='del'>-        raise RequestExpiredError if template.expired?</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          @take_waiter.push(template)</div><div class='del'>-          start_keeper if template.expires</div><div class='del'>-          while true</div><div class='del'>-            raise RequestCanceledError if template.canceled?</div><div class='del'>-            raise RequestExpiredError if template.expired?</div><div class='del'>-            entry = @bag.find(template)</div><div class='del'>-            if entry</div><div class='del'>-              port.push(entry.value) if port</div><div class='del'>-              @bag.delete(entry)</div><div class='del'>-              notify_event('take', entry.value)</div><div class='del'>-              return entry.value</div><div class='del'>-            end</div><div class='del'>-            template.wait</div><div class='del'>-          end</div><div class='del'>-        ensure</div><div class='del'>-          @take_waiter.delete(template)</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'>-    # Reads +tuple+, but does not remove it.</div><div class='del'>-</div><div class='del'>-    def read(tuple, sec=nil)</div><div class='del'>-      template = WaitTemplateEntry.new(self, tuple, sec)</div><div class='del'>-      yield(template) if block_given?</div><div class='del'>-      synchronize do</div><div class='del'>-        entry = @bag.find(template)</div><div class='del'>-        return entry.value if entry</div><div class='del'>-        raise RequestExpiredError if template.expired?</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          @read_waiter.push(template)</div><div class='del'>-          start_keeper if template.expires</div><div class='del'>-          template.wait</div><div class='del'>-          raise RequestCanceledError if template.canceled?</div><div class='del'>-          raise RequestExpiredError if template.expired?</div><div class='del'>-          return template.found</div><div class='del'>-        ensure</div><div class='del'>-          @read_waiter.delete(template)</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'>-    # Returns all tuples matching +tuple+.  Does not remove the found tuples.</div><div class='del'>-</div><div class='del'>-    def read_all(tuple)</div><div class='del'>-      template = WaitTemplateEntry.new(self, tuple, nil)</div><div class='del'>-      synchronize do</div><div class='del'>-        entry = @bag.find_all(template)</div><div class='del'>-        entry.collect do |e|</div><div class='del'>-          e.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'>-    # Registers for notifications of +event+.  Returns a NotifyTemplateEntry.</div><div class='del'>-    # See NotifyTemplateEntry for examples of how to listen for notifications.</div><div class='del'>-    #</div><div class='del'>-    # +event+ can be:</div><div class='del'>-    # 'write'::  A tuple was added</div><div class='del'>-    # 'take'::   A tuple was taken or moved</div><div class='del'>-    # 'delete':: A tuple was lost after being overwritten or expiring</div><div class='del'>-    #</div><div class='del'>-    # The TupleSpace will also notify you of the 'close' event when the</div><div class='del'>-    # NotifyTemplateEntry has expired.</div><div class='del'>-</div><div class='del'>-    def notify(event, tuple, sec=nil)</div><div class='del'>-      template = NotifyTemplateEntry.new(self, event, tuple, sec)</div><div class='del'>-      synchronize do</div><div class='del'>-        @notify_waiter.push(template)</div><div class='del'>-      end</div><div class='del'>-      template</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-</div><div class='del'>-    def create_entry(tuple, sec)</div><div class='del'>-      TupleEntry.new(tuple, sec)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Removes dead tuples.</div><div class='del'>-</div><div class='del'>-    def keep_clean</div><div class='del'>-      synchronize do</div><div class='del'>-        @read_waiter.delete_unless_alive.each do |e|</div><div class='del'>-          e.signal</div><div class='del'>-        end</div><div class='del'>-        @take_waiter.delete_unless_alive.each do |e|</div><div class='del'>-          e.signal</div><div class='del'>-        end</div><div class='del'>-        @notify_waiter.delete_unless_alive.each do |e|</div><div class='del'>-          e.notify(['close'])</div><div class='del'>-        end</div><div class='del'>-        @bag.delete_unless_alive.each do |e|</div><div class='del'>-          notify_event('delete', e.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'>-    # Notifies all registered listeners for +event+ of a status change of</div><div class='del'>-    # +tuple+.</div><div class='del'>-</div><div class='del'>-    def notify_event(event, tuple)</div><div class='del'>-      ev = [event, tuple]</div><div class='del'>-      @notify_waiter.find_all_template(ev).each do |template|</div><div class='del'>-        template.notify(ev)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ##</div><div class='del'>-    # Creates a thread that scans the tuplespace for expired tuples.</div><div class='del'>-</div><div class='del'>-    def start_keeper</div><div class='del'>-      return if @keeper &amp;&amp; @keeper.alive?</div><div class='del'>-      @keeper = Thread.new do</div><div class='del'>-        while true</div><div class='del'>-          sleep(@period)</div><div class='del'>-          synchronize do</div><div class='del'>-            break unless need_keeper?</div><div class='del'>-            keep_clean</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'>-    # Checks the tuplespace to see if it needs cleaning.</div><div class='del'>-</div><div class='del'>-    def need_keeper?</div><div class='del'>-      return true if @bag.has_expires?</div><div class='del'>-      return true if @read_waiter.has_expires?</div><div class='del'>-      return true if @take_waiter.has_expires?</div><div class='del'>-      return true if @notify_waiter.has_expires?</div><div class='del'>-    end</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='head'>diff --git a/lib/rss.rb b/lib/rss.rb<br/>deleted file mode 100644<br/>index a1d0f76ba1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,19 +0,0 @@</div><div class='del'>-# Copyright (c) 2003-2007 Kouhei Sutou.  You can redistribute it and/or</div><div class='del'>-# modify it under the same terms as Ruby.</div><div class='del'>-#</div><div class='del'>-# Author:: Kouhei Sutou &lt;kou@cozmixng.org&gt;</div><div class='del'>-# Tutorial:: http://www.cozmixng.org/~rwiki/?cmd=view;name=RSS+Parser%3A%3ATutorial.en</div><div class='del'>-</div><div class='del'>-require 'rss/1.0'</div><div class='del'>-require 'rss/2.0'</div><div class='del'>-require 'rss/atom'</div><div class='del'>-require 'rss/content'</div><div class='del'>-require 'rss/dublincore'</div><div class='del'>-require 'rss/image'</div><div class='del'>-require 'rss/itunes'</div><div class='del'>-require 'rss/slash'</div><div class='del'>-require 'rss/syndication'</div><div class='del'>-require 'rss/taxonomy'</div><div class='del'>-require 'rss/trackback'</div><div class='del'>-</div><div class='del'>-require "rss/maker"</div><div class='head'>diff --git a/lib/rss/0.9.rb b/lib/rss/0.9.rb<br/>deleted file mode 100644<br/>index 7b24e7596d..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/0.9.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/0.9.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,428 +0,0 @@</div><div class='del'>-require "rss/parser"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-</div><div class='del'>-  module RSS09</div><div class='del'>-    NSPOOL = {}</div><div class='del'>-    ELEMENTS = []</div><div class='del'>-</div><div class='del'>-    def self.append_features(klass)</div><div class='del'>-      super</div><div class='del'>-      </div><div class='del'>-      klass.install_must_call_validator('', "")</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Rss &lt; Element</div><div class='del'>-</div><div class='del'>-    include RSS09</div><div class='del'>-    include RootElementMixin</div><div class='del'>-</div><div class='del'>-    %w(channel).each do |name|</div><div class='del'>-      install_have_child_element(name, "", nil)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    attr_writer :feed_version</div><div class='del'>-    alias_method(:rss_version, :feed_version)</div><div class='del'>-    alias_method(:rss_version=, :feed_version=)</div><div class='del'>-</div><div class='del'>-    def initialize(feed_version, version=nil, encoding=nil, standalone=nil)</div><div class='del'>-      super</div><div class='del'>-      @feed_type = "rss"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def items</div><div class='del'>-      if @channel</div><div class='del'>-        @channel.items</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 image</div><div class='del'>-      if @channel</div><div class='del'>-        @channel.image</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 textinput</div><div class='del'>-      if @channel</div><div class='del'>-        @channel.textInput</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 setup_maker_elements(maker)</div><div class='del'>-      super</div><div class='del'>-      items.each do |item|</div><div class='del'>-        item.setup_maker(maker.items)</div><div class='del'>-      end</div><div class='del'>-      image.setup_maker(maker) if image</div><div class='del'>-      textinput.setup_maker(maker) if textinput</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    private</div><div class='del'>-    def _attrs</div><div class='del'>-      [</div><div class='del'>-        ["version", true, "feed_version"],</div><div class='del'>-      ]</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Channel &lt; Element</div><div class='del'>-</div><div class='del'>-      include RSS09</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ["title", nil, :text],</div><div class='del'>-        ["link", nil, :text],</div><div class='del'>-        ["description", nil, :text],</div><div class='del'>-        ["language", nil, :text],</div><div class='del'>-        ["copyright", "?", :text],</div><div class='del'>-        ["managingEditor", "?", :text],</div><div class='del'>-        ["webMaster", "?", :text],</div><div class='del'>-        ["rating", "?", :text],</div><div class='del'>-        ["pubDate", "?", :date, :rfc822],</div><div class='del'>-        ["lastBuildDate", "?", :date, :rfc822],</div><div class='del'>-        ["docs", "?", :text],</div><div class='del'>-        ["cloud", "?", :have_attribute],</div><div class='del'>-        ["skipDays", "?", :have_child],</div><div class='del'>-        ["skipHours", "?", :have_child],</div><div class='del'>-        ["image", nil, :have_child],</div><div class='del'>-        ["item", "*", :have_children],</div><div class='del'>-        ["textInput", "?", :have_child],</div><div class='del'>-      ].each do |name, occurs, type, *args|</div><div class='del'>-        __send__("install_#{type}_element", name, "", occurs, name, *args)</div><div class='del'>-      end</div><div class='del'>-      alias date pubDate</div><div class='del'>-      alias date= pubDate=</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(maker)</div><div class='del'>-        maker.channel</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_elements(channel)</div><div class='del'>-        super</div><div class='del'>-        [</div><div class='del'>-          [skipDays, "day"],</div><div class='del'>-          [skipHours, "hour"],</div><div class='del'>-        ].each do |skip, key|</div><div class='del'>-          if skip</div><div class='del'>-            skip.__send__("#{key}s").each do |val|</div><div class='del'>-              target_skips = channel.__send__("skip#{key.capitalize}s")</div><div class='del'>-              new_target = target_skips.__send__("new_#{key}")</div><div class='del'>-              new_target.content = val.content</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 not_need_to_call_setup_maker_variables</div><div class='del'>-        %w(image textInput)</div><div class='del'>-      end</div><div class='del'>-    </div><div class='del'>-      class SkipDays &lt; Element</div><div class='del'>-        include RSS09</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-          ["day", "*"]</div><div class='del'>-        ].each do |name, occurs|</div><div class='del'>-          install_have_children_element(name, "", occurs)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Day &lt; Element</div><div class='del'>-          include RSS09</div><div class='del'>-</div><div class='del'>-          content_setup</div><div class='del'>-</div><div class='del'>-          def initialize(*args)</div><div class='del'>-            if Utils.element_initialize_arguments?(args)</div><div class='del'>-              super</div><div class='del'>-            else</div><div class='del'>-              super()</div><div class='del'>-              self.content = args[0]</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'>-      end</div><div class='del'>-      </div><div class='del'>-      class SkipHours &lt; Element</div><div class='del'>-        include RSS09</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-          ["hour", "*"]</div><div class='del'>-        ].each do |name, occurs|</div><div class='del'>-          install_have_children_element(name, "", occurs)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Hour &lt; Element</div><div class='del'>-          include RSS09</div><div class='del'>-</div><div class='del'>-          content_setup(:integer)</div><div class='del'>-</div><div class='del'>-          def initialize(*args)</div><div class='del'>-            if Utils.element_initialize_arguments?(args)</div><div class='del'>-              super</div><div class='del'>-            else</div><div class='del'>-              super()</div><div class='del'>-              self.content = args[0]</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'>-      class Image &lt; Element</div><div class='del'>-</div><div class='del'>-        include RSS09</div><div class='del'>-        </div><div class='del'>-        %w(url title link).each do |name|</div><div class='del'>-          install_text_element(name, "", nil)</div><div class='del'>-        end</div><div class='del'>-        [</div><div class='del'>-          ["width", :integer],</div><div class='del'>-          ["height", :integer],</div><div class='del'>-          ["description"],</div><div class='del'>-        ].each do |name, type|</div><div class='del'>-          install_text_element(name, "", "?", name, type)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def initialize(*args)</div><div class='del'>-          if Utils.element_initialize_arguments?(args)</div><div class='del'>-            super</div><div class='del'>-          else</div><div class='del'>-            super()</div><div class='del'>-            self.url = args[0]</div><div class='del'>-            self.title = args[1]</div><div class='del'>-            self.link = args[2]</div><div class='del'>-            self.width = args[3]</div><div class='del'>-            self.height = args[4]</div><div class='del'>-            self.description = args[5]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def maker_target(maker)</div><div class='del'>-          maker.image</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Cloud &lt; Element</div><div class='del'>-</div><div class='del'>-        include RSS09</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-          ["domain", "", true],</div><div class='del'>-          ["port", "", true, :integer],</div><div class='del'>-          ["path", "", true],</div><div class='del'>-          ["registerProcedure", "", true],</div><div class='del'>-          ["protocol", "", true],</div><div class='del'>-        ].each do |name, uri, required, type|</div><div class='del'>-          install_get_attribute(name, uri, required, type)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def initialize(*args)</div><div class='del'>-          if Utils.element_initialize_arguments?(args)</div><div class='del'>-            super</div><div class='del'>-          else</div><div class='del'>-            super()</div><div class='del'>-            self.domain = args[0]</div><div class='del'>-            self.port = args[1]</div><div class='del'>-            self.path = args[2]</div><div class='del'>-            self.registerProcedure = args[3]</div><div class='del'>-            self.protocol = args[4]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      class Item &lt; Element</div><div class='del'>-        </div><div class='del'>-        include RSS09</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-          ["title", '?', :text],</div><div class='del'>-          ["link", '?', :text],</div><div class='del'>-          ["description", '?', :text],</div><div class='del'>-          ["category", '*', :have_children, "categories"],</div><div class='del'>-          ["source", '?', :have_child],</div><div class='del'>-          ["enclosure", '?', :have_child],</div><div class='del'>-        ].each do |tag, occurs, type, *args|</div><div class='del'>-          __send__("install_#{type}_element", tag, "", occurs, tag, *args)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def maker_target(items)</div><div class='del'>-          if items.respond_to?("items")</div><div class='del'>-            # For backward compatibility</div><div class='del'>-            items = items.items</div><div class='del'>-          end</div><div class='del'>-          items.new_item</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def setup_maker_element(item)</div><div class='del'>-          super</div><div class='del'>-          @enclosure.setup_maker(item) if @enclosure</div><div class='del'>-          @source.setup_maker(item) if @source</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class Source &lt; Element</div><div class='del'>-</div><div class='del'>-          include RSS09</div><div class='del'>-</div><div class='del'>-          [</div><div class='del'>-            ["url", "", true]</div><div class='del'>-          ].each do |name, uri, required|</div><div class='del'>-            install_get_attribute(name, uri, required)</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          content_setup</div><div class='del'>-</div><div class='del'>-          def initialize(*args)</div><div class='del'>-            if Utils.element_initialize_arguments?(args)</div><div class='del'>-              super</div><div class='del'>-            else</div><div class='del'>-              super()</div><div class='del'>-              self.url = args[0]</div><div class='del'>-              self.content = args[1]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def maker_target(item)</div><div class='del'>-            item.source</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def setup_maker_attributes(source)</div><div class='del'>-            source.url = url</div><div class='del'>-            source.content = content</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Enclosure &lt; Element</div><div class='del'>-</div><div class='del'>-          include RSS09</div><div class='del'>-</div><div class='del'>-          [</div><div class='del'>-            ["url", "", true],</div><div class='del'>-            ["length", "", true, :integer],</div><div class='del'>-            ["type", "", true],</div><div class='del'>-          ].each do |name, uri, required, type|</div><div class='del'>-            install_get_attribute(name, uri, required, type)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def initialize(*args)</div><div class='del'>-            if Utils.element_initialize_arguments?(args)</div><div class='del'>-              super</div><div class='del'>-            else</div><div class='del'>-              super()</div><div class='del'>-              self.url = args[0]</div><div class='del'>-              self.length = args[1]</div><div class='del'>-              self.type = args[2]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def maker_target(item)</div><div class='del'>-            item.enclosure</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def setup_maker_attributes(enclosure)</div><div class='del'>-            enclosure.url = url</div><div class='del'>-            enclosure.length = length</div><div class='del'>-            enclosure.type = type</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Category &lt; Element</div><div class='del'>-</div><div class='del'>-          include RSS09</div><div class='del'>-          </div><div class='del'>-          [</div><div class='del'>-            ["domain", "", false]</div><div class='del'>-          ].each do |name, uri, required|</div><div class='del'>-            install_get_attribute(name, uri, required)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          content_setup</div><div class='del'>-</div><div class='del'>-          def initialize(*args)</div><div class='del'>-            if Utils.element_initialize_arguments?(args)</div><div class='del'>-              super</div><div class='del'>-            else</div><div class='del'>-              super()</div><div class='del'>-              self.domain = args[0]</div><div class='del'>-              self.content = args[1]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def maker_target(item)</div><div class='del'>-            item.new_category</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def setup_maker_attributes(category)</div><div class='del'>-            category.domain = domain</div><div class='del'>-            category.content = content</div><div class='del'>-          end</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'>-      class TextInput &lt; Element</div><div class='del'>-</div><div class='del'>-        include RSS09</div><div class='del'>-</div><div class='del'>-        %w(title description name link).each do |name|</div><div class='del'>-          install_text_element(name, "", nil)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def initialize(*args)</div><div class='del'>-          if Utils.element_initialize_arguments?(args)</div><div class='del'>-            super</div><div class='del'>-          else</div><div class='del'>-            super()</div><div class='del'>-            self.title = args[0]</div><div class='del'>-            self.description = args[1]</div><div class='del'>-            self.name = args[2]</div><div class='del'>-            self.link = args[3]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def maker_target(maker)</div><div class='del'>-          maker.textinput</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'>-  end</div><div class='del'>-</div><div class='del'>-  RSS09::ELEMENTS.each do |name|</div><div class='del'>-    BaseListener.install_get_text_element("", name, name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ListenerMixin</div><div class='del'>-    private</div><div class='del'>-    def initial_start_rss(tag_name, prefix, attrs, ns)</div><div class='del'>-      check_ns(tag_name, prefix, ns, "")</div><div class='del'>-      </div><div class='del'>-      @rss = Rss.new(attrs['version'], @version, @encoding, @standalone)</div><div class='del'>-      @rss.do_validate = @do_validate</div><div class='del'>-      @rss.xml_stylesheets = @xml_stylesheets</div><div class='del'>-      @last_element = @rss</div><div class='del'>-      pr = Proc.new do |text, tags|</div><div class='del'>-        @rss.validate_for_stream(tags, @ignore_unknown_element) if @do_validate</div><div class='del'>-      end</div><div class='del'>-      @proc_stack.push(pr)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/1.0.rb b/lib/rss/1.0.rb<br/>deleted file mode 100644<br/>index f04e61c5eb..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/1.0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/1.0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,452 +0,0 @@</div><div class='del'>-require "rss/parser"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-</div><div class='del'>-  module RSS10</div><div class='del'>-    NSPOOL = {}</div><div class='del'>-    ELEMENTS = []</div><div class='del'>-</div><div class='del'>-    def self.append_features(klass)</div><div class='del'>-      super</div><div class='del'>-      </div><div class='del'>-      klass.install_must_call_validator('', ::RSS::URI)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class RDF &lt; Element</div><div class='del'>-</div><div class='del'>-    include RSS10</div><div class='del'>-    include RootElementMixin</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-</div><div class='del'>-      def required_uri</div><div class='del'>-        URI</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    @tag_name = 'RDF'</div><div class='del'>-</div><div class='del'>-    PREFIX = 'rdf'</div><div class='del'>-    URI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"</div><div class='del'>-</div><div class='del'>-    install_ns('', ::RSS::URI)</div><div class='del'>-    install_ns(PREFIX, URI)</div><div class='del'>-</div><div class='del'>-    [</div><div class='del'>-      ["channel", nil],</div><div class='del'>-      ["image", "?"],</div><div class='del'>-      ["item", "+", :children],</div><div class='del'>-      ["textinput", "?"],</div><div class='del'>-    ].each do |tag, occurs, type|</div><div class='del'>-      type ||= :child</div><div class='del'>-      __send__("install_have_#{type}_element", tag, ::RSS::URI, occurs)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    alias_method(:rss_version, :feed_version)</div><div class='del'>-    def initialize(version=nil, encoding=nil, standalone=nil)</div><div class='del'>-      super('1.0', version, encoding, standalone)</div><div class='del'>-      @feed_type = "rss"</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def full_name</div><div class='del'>-      tag_name_with_prefix(PREFIX)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Li &lt; Element</div><div class='del'>-</div><div class='del'>-      include RSS10</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_uri</div><div class='del'>-          URI</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      [</div><div class='del'>-        ["resource", [URI, ""], true]</div><div class='del'>-      ].each do |name, uri, required|</div><div class='del'>-        install_get_attribute(name, uri, required)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.resource = args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(PREFIX)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Seq &lt; Element</div><div class='del'>-</div><div class='del'>-      include RSS10</div><div class='del'>-</div><div class='del'>-      Li = ::RSS::RDF::Li</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_uri</div><div class='del'>-          URI</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @tag_name = 'Seq'</div><div class='del'>-      </div><div class='del'>-      install_have_children_element("li", URI, "*")</div><div class='del'>-      install_must_call_validator('rdf', ::RSS::RDF::URI)</div><div class='del'>-      </div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          @li = args[0] if args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(PREFIX)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def setup_maker(target)</div><div class='del'>-        lis.each do |li|</div><div class='del'>-          target &lt;&lt; li.resource</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Bag &lt; Element</div><div class='del'>-</div><div class='del'>-      include RSS10</div><div class='del'>-</div><div class='del'>-      Li = ::RSS::RDF::Li</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_uri</div><div class='del'>-          URI</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      @tag_name = 'Bag'</div><div class='del'>-      </div><div class='del'>-      install_have_children_element("li", URI, "*")</div><div class='del'>-      install_must_call_validator('rdf', URI)</div><div class='del'>-      </div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          @li = args[0] if args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(PREFIX)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def setup_maker(target)</div><div class='del'>-        lis.each do |li|</div><div class='del'>-          target &lt;&lt; li.resource</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Channel &lt; Element</div><div class='del'>-</div><div class='del'>-      include RSS10</div><div class='del'>-      </div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-</div><div class='del'>-        def required_uri</div><div class='del'>-          ::RSS::URI</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'>-        ["about", URI, true]</div><div class='del'>-      ].each do |name, uri, required|</div><div class='del'>-        install_get_attribute(name, uri, required, nil, nil,</div><div class='del'>-                              "#{PREFIX}:#{name}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ['title', nil, :text],</div><div class='del'>-        ['link', nil, :text],</div><div class='del'>-        ['description', nil, :text],</div><div class='del'>-        ['image', '?', :have_child],</div><div class='del'>-        ['items', nil, :have_child],</div><div class='del'>-        ['textinput', '?', :have_child],</div><div class='del'>-      ].each do |tag, occurs, type|</div><div class='del'>-        __send__("install_#{type}_element", tag, ::RSS::URI, occurs)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.about = args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(maker)</div><div class='del'>-        maker.channel</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def setup_maker_attributes(channel)</div><div class='del'>-        channel.about = about</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Image &lt; Element</div><div class='del'>-        </div><div class='del'>-        include RSS10</div><div class='del'>-</div><div class='del'>-        class &lt;&lt; self</div><div class='del'>-          </div><div class='del'>-          def required_uri</div><div class='del'>-            ::RSS::URI</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'>-          ["resource", URI, true]</div><div class='del'>-        ].each do |name, uri, required|</div><div class='del'>-          install_get_attribute(name, uri, required, nil, nil,</div><div class='del'>-                                "#{PREFIX}:#{name}")</div><div class='del'>-        end</div><div class='del'>-      </div><div class='del'>-        def initialize(*args)</div><div class='del'>-          if Utils.element_initialize_arguments?(args)</div><div class='del'>-            super</div><div class='del'>-          else</div><div class='del'>-            super()</div><div class='del'>-            self.resource = args[0]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Textinput &lt; Element</div><div class='del'>-        </div><div class='del'>-        include RSS10</div><div class='del'>-</div><div class='del'>-        class &lt;&lt; self</div><div class='del'>-          </div><div class='del'>-          def required_uri</div><div class='del'>-            ::RSS::URI</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'>-          ["resource", URI, true]</div><div class='del'>-        ].each do |name, uri, required|</div><div class='del'>-          install_get_attribute(name, uri, required, nil, nil,</div><div class='del'>-                                "#{PREFIX}:#{name}")</div><div class='del'>-        end</div><div class='del'>-      </div><div class='del'>-        def initialize(*args)</div><div class='del'>-          if Utils.element_initialize_arguments?(args)</div><div class='del'>-            super</div><div class='del'>-          else</div><div class='del'>-            super()</div><div class='del'>-            self.resource = args[0]</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      class Items &lt; Element</div><div class='del'>-</div><div class='del'>-        include RSS10</div><div class='del'>-</div><div class='del'>-        Seq = ::RSS::RDF::Seq</div><div class='del'>-</div><div class='del'>-        class &lt;&lt; self</div><div class='del'>-          </div><div class='del'>-          def required_uri</div><div class='del'>-            ::RSS::URI</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        install_have_child_element("Seq", URI, nil)</div><div class='del'>-        install_must_call_validator('rdf', URI)</div><div class='del'>-        </div><div class='del'>-        def initialize(*args)</div><div class='del'>-          if Utils.element_initialize_arguments?(args)</div><div class='del'>-            super</div><div class='del'>-          else</div><div class='del'>-            super()</div><div class='del'>-            self.Seq = args[0]</div><div class='del'>-          end</div><div class='del'>-          self.Seq ||= Seq.new</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def resources</div><div class='del'>-          if @Seq</div><div class='del'>-            @Seq.lis.collect do |li|</div><div class='del'>-              li.resource</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'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Image &lt; Element</div><div class='del'>-</div><div class='del'>-      include RSS10</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        </div><div class='del'>-        def required_uri</div><div class='del'>-          ::RSS::URI</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'>-        ["about", URI, true]</div><div class='del'>-      ].each do |name, uri, required|</div><div class='del'>-        install_get_attribute(name, uri, required, nil, nil,</div><div class='del'>-                              "#{PREFIX}:#{name}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      %w(title url link).each do |name|</div><div class='del'>-        install_text_element(name, ::RSS::URI, nil)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.about = args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(maker)</div><div class='del'>-        maker.image</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Item &lt; Element</div><div class='del'>-</div><div class='del'>-      include RSS10</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-</div><div class='del'>-        def required_uri</div><div class='del'>-          ::RSS::URI</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'>-        ["about", URI, true]</div><div class='del'>-      ].each do |name, uri, required|</div><div class='del'>-        install_get_attribute(name, uri, required, nil, nil,</div><div class='del'>-                              "#{PREFIX}:#{name}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ["title", nil],</div><div class='del'>-        ["link", nil],</div><div class='del'>-        ["description", "?"],</div><div class='del'>-      ].each do |tag, occurs|</div><div class='del'>-        install_text_element(tag, ::RSS::URI, occurs)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.about = args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(items)</div><div class='del'>-        if items.respond_to?("items")</div><div class='del'>-          # For backward compatibility</div><div class='del'>-          items = items.items</div><div class='del'>-        end</div><div class='del'>-        items.new_item</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Textinput &lt; Element</div><div class='del'>-</div><div class='del'>-      include RSS10</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-</div><div class='del'>-        def required_uri</div><div class='del'>-          ::RSS::URI</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'>-        ["about", URI, true]</div><div class='del'>-      ].each do |name, uri, required|</div><div class='del'>-        install_get_attribute(name, uri, required, nil, nil,</div><div class='del'>-                              "#{PREFIX}:#{name}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      %w(title description name link).each do |name|</div><div class='del'>-        install_text_element(name, ::RSS::URI, nil)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.about = args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(maker)</div><div class='del'>-        maker.textinput</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'>-  RSS10::ELEMENTS.each do |name|</div><div class='del'>-    BaseListener.install_get_text_element(URI, name, name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ListenerMixin</div><div class='del'>-    private</div><div class='del'>-    def initial_start_RDF(tag_name, prefix, attrs, ns)</div><div class='del'>-      check_ns(tag_name, prefix, ns, RDF::URI)</div><div class='del'>-</div><div class='del'>-      @rss = RDF.new(@version, @encoding, @standalone)</div><div class='del'>-      @rss.do_validate = @do_validate</div><div class='del'>-      @rss.xml_stylesheets = @xml_stylesheets</div><div class='del'>-      @last_element = @rss</div><div class='del'>-      pr = Proc.new do |text, tags|</div><div class='del'>-        @rss.validate_for_stream(tags, @ignore_unknown_element) if @do_validate</div><div class='del'>-      end</div><div class='del'>-      @proc_stack.push(pr)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/2.0.rb b/lib/rss/2.0.rb<br/>deleted file mode 100644<br/>index 3798da4eb7..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/2.0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/2.0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,111 +0,0 @@</div><div class='del'>-require "rss/0.9"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-</div><div class='del'>-  class Rss</div><div class='del'>-</div><div class='del'>-    class Channel</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ["generator"],</div><div class='del'>-        ["ttl", :integer],</div><div class='del'>-      ].each do |name, type|</div><div class='del'>-        install_text_element(name, "", "?", name, type)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        %w(category categories),</div><div class='del'>-      ].each do |name, plural_name|</div><div class='del'>-        install_have_children_element(name, "", "*", name, plural_name)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ["image", "?"],</div><div class='del'>-        ["language", "?"],</div><div class='del'>-      ].each do |name, occurs|</div><div class='del'>-        install_model(name, "", occurs)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      Category = Item::Category</div><div class='del'>-</div><div class='del'>-      class Item</div><div class='del'>-      </div><div class='del'>-        [</div><div class='del'>-          ["comments", "?"],</div><div class='del'>-          ["author", "?"],</div><div class='del'>-        ].each do |name, occurs|</div><div class='del'>-          install_text_element(name, "", occurs)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-          ["pubDate", '?'],</div><div class='del'>-        ].each do |name, occurs|</div><div class='del'>-          install_date_element(name, "", occurs, name, 'rfc822')</div><div class='del'>-        end</div><div class='del'>-        alias date pubDate</div><div class='del'>-        alias date= pubDate=</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-          ["guid", '?'],</div><div class='del'>-        ].each do |name, occurs|</div><div class='del'>-          install_have_child_element(name, "", occurs)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        alias _setup_maker_element setup_maker_element</div><div class='del'>-        def setup_maker_element(item)</div><div class='del'>-          _setup_maker_element(item)</div><div class='del'>-          @guid.setup_maker(item) if @guid</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class Guid &lt; Element</div><div class='del'>-          </div><div class='del'>-          include RSS09</div><div class='del'>-</div><div class='del'>-          [</div><div class='del'>-            ["isPermaLink", "", false, :boolean]</div><div class='del'>-          ].each do |name, uri, required, type|</div><div class='del'>-            install_get_attribute(name, uri, required, type)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          content_setup</div><div class='del'>-</div><div class='del'>-          def initialize(*args)</div><div class='del'>-            if Utils.element_initialize_arguments?(args)</div><div class='del'>-              super</div><div class='del'>-            else</div><div class='del'>-              super()</div><div class='del'>-              self.isPermaLink = args[0]</div><div class='del'>-              self.content = args[1]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          alias_method :_PermaLink?, :PermaLink?</div><div class='del'>-          private :_PermaLink?</div><div class='del'>-          def PermaLink?</div><div class='del'>-            perma = _PermaLink?</div><div class='del'>-            perma or perma.nil?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def maker_target(item)</div><div class='del'>-            item.guid</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def setup_maker_attributes(guid)</div><div class='del'>-            guid.isPermaLink = isPermaLink</div><div class='del'>-            guid.content = content</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'>-    end</div><div class='del'>-</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  RSS09::ELEMENTS.each do |name|</div><div class='del'>-    BaseListener.install_get_text_element("", name, name)</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/atom.rb b/lib/rss/atom.rb<br/>deleted file mode 100644<br/>index 7cba934feb..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/atom.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/atom.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,749 +0,0 @@</div><div class='del'>-require 'base64'</div><div class='del'>-require 'rss/parser'</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  module Atom</div><div class='del'>-    URI = "http://www.w3.org/2005/Atom"</div><div class='del'>-    XHTML_URI = "http://www.w3.org/1999/xhtml"</div><div class='del'>-</div><div class='del'>-    module CommonModel</div><div class='del'>-      NSPOOL = {}</div><div class='del'>-      ELEMENTS = []</div><div class='del'>-</div><div class='del'>-      def self.append_features(klass)</div><div class='del'>-        super</div><div class='del'>-        klass.install_must_call_validator("atom", URI)</div><div class='del'>-        [</div><div class='del'>-         ["lang", :xml],</div><div class='del'>-         ["base", :xml],</div><div class='del'>-        ].each do |name, uri, required|</div><div class='del'>-          klass.install_get_attribute(name, uri, required, [nil, :inherit])</div><div class='del'>-        end</div><div class='del'>-        klass.class_eval do</div><div class='del'>-          class &lt;&lt; self</div><div class='del'>-            def required_uri</div><div class='del'>-              URI</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            def need_parent?</div><div class='del'>-              true</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 ContentModel</div><div class='del'>-      module ClassMethods</div><div class='del'>-        def content_type</div><div class='del'>-          @content_type ||= nil</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 append_features(klass)</div><div class='del'>-          super</div><div class='del'>-          klass.extend(ClassMethods)</div><div class='del'>-          klass.content_setup(klass.content_type, klass.tag_name)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def maker_target(target)</div><div class='del'>-        target</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def setup_maker_element_writer</div><div class='del'>-        "#{self.class.name.split(/::/).last.downcase}="</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_element(target)</div><div class='del'>-        target.__send__(setup_maker_element_writer, content)</div><div class='del'>-        super</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module URIContentModel</div><div class='del'>-      class  &lt;&lt; self</div><div class='del'>-        def append_features(klass)</div><div class='del'>-          super</div><div class='del'>-          klass.class_eval do</div><div class='del'>-            @content_type = [nil, :uri]</div><div class='del'>-            include(ContentModel)</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 TextConstruct</div><div class='del'>-      def self.append_features(klass)</div><div class='del'>-        super</div><div class='del'>-        klass.class_eval do</div><div class='del'>-          [</div><div class='del'>-           ["type", ""],</div><div class='del'>-          ].each do |name, uri, required|</div><div class='del'>-            install_get_attribute(name, uri, required, :text_type)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          content_setup</div><div class='del'>-          add_need_initialize_variable("xhtml")</div><div class='del'>-</div><div class='del'>-          class &lt;&lt; self</div><div class='del'>-            def xml_getter</div><div class='del'>-              "xhtml"</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            def xml_setter</div><div class='del'>-              "xhtml="</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'>-      attr_writer :xhtml</div><div class='del'>-      def xhtml</div><div class='del'>-        return @xhtml if @xhtml.nil?</div><div class='del'>-        if @xhtml.is_a?(XML::Element) and</div><div class='del'>-            [@xhtml.name, @xhtml.uri] == ["div", XHTML_URI]</div><div class='del'>-          return @xhtml</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        children = @xhtml</div><div class='del'>-        children = [children] unless children.is_a?(Array)</div><div class='del'>-        XML::Element.new("div", nil, XHTML_URI,</div><div class='del'>-                         {"xmlns" =&gt; XHTML_URI}, children)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def have_xml_content?</div><div class='del'>-        @type == "xhtml"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def atom_validate(ignore_unknown_element, tags, uri)</div><div class='del'>-        if have_xml_content?</div><div class='del'>-          if @xhtml.nil?</div><div class='del'>-            raise MissingTagError.new("div", tag_name)</div><div class='del'>-          end</div><div class='del'>-          unless [@xhtml.name, @xhtml.uri] == ["div", XHTML_URI]</div><div class='del'>-            raise NotExpectedTagError.new(@xhtml.name, @xhtml.uri, tag_name)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(target)</div><div class='del'>-        target.__send__(self.class.name.split(/::/).last.downcase) {|x| x}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_attributes(target)</div><div class='del'>-        target.type = type</div><div class='del'>-        target.content = content</div><div class='del'>-        target.xml_content = @xhtml</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module PersonConstruct</div><div class='del'>-      def self.append_features(klass)</div><div class='del'>-        super</div><div class='del'>-        klass.class_eval do</div><div class='del'>-          [</div><div class='del'>-           ["name", nil],</div><div class='del'>-           ["uri", "?"],</div><div class='del'>-           ["email", "?"],</div><div class='del'>-          ].each do |tag, occurs|</div><div class='del'>-            install_have_attribute_element(tag, URI, occurs, nil, :content)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def maker_target(target)</div><div class='del'>-        target.__send__("new_#{self.class.name.split(/::/).last.downcase}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Name &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include ContentModel</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Uri &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include URIContentModel</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Email &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include ContentModel</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module DateConstruct</div><div class='del'>-      def self.append_features(klass)</div><div class='del'>-        super</div><div class='del'>-        klass.class_eval do</div><div class='del'>-          @content_type = :w3cdtf</div><div class='del'>-          include(ContentModel)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def atom_validate(ignore_unknown_element, tags, uri)</div><div class='del'>-        raise NotAvailableValueError.new(tag_name, "") if content.nil?</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module DuplicateLinkChecker</div><div class='del'>-      def validate_duplicate_links(links)</div><div class='del'>-        link_infos = {}</div><div class='del'>-        links.each do |link|</div><div class='del'>-          rel = link.rel || "alternate"</div><div class='del'>-          next unless rel == "alternate"</div><div class='del'>-          key = [link.hreflang, link.type]</div><div class='del'>-          if link_infos.has_key?(key)</div><div class='del'>-            raise TooMuchTagError.new("link", tag_name)</div><div class='del'>-          end</div><div class='del'>-          link_infos[key] = true</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Feed &lt; RSS::Element</div><div class='del'>-      include RootElementMixin</div><div class='del'>-      include CommonModel</div><div class='del'>-      include DuplicateLinkChecker</div><div class='del'>-</div><div class='del'>-      install_ns('', URI)</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-       ["author", "*", :children],</div><div class='del'>-       ["category", "*", :children, "categories"],</div><div class='del'>-       ["contributor", "*", :children],</div><div class='del'>-       ["generator", "?"],</div><div class='del'>-       ["icon", "?", nil, :content],</div><div class='del'>-       ["id", nil, nil, :content],</div><div class='del'>-       ["link", "*", :children],</div><div class='del'>-       ["logo", "?"],</div><div class='del'>-       ["rights", "?"],</div><div class='del'>-       ["subtitle", "?", nil, :content],</div><div class='del'>-       ["title", nil, nil, :content],</div><div class='del'>-       ["updated", nil, nil, :content],</div><div class='del'>-       ["entry", "*", :children, "entries"],</div><div class='del'>-      ].each do |tag, occurs, type, *args|</div><div class='del'>-        type ||= :child</div><div class='del'>-        __send__("install_have_#{type}_element",</div><div class='del'>-                 tag, URI, occurs, tag, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(version=nil, encoding=nil, standalone=nil)</div><div class='del'>-        super("1.0", version, encoding, standalone)</div><div class='del'>-        @feed_type = "atom"</div><div class='del'>-        @feed_subtype = "feed"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      alias_method :items, :entries</div><div class='del'>-</div><div class='del'>-      def have_author?</div><div class='del'>-        authors.any? {|author| !author.to_s.empty?} or</div><div class='del'>-          entries.any? {|entry| entry.have_author?(false)}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def atom_validate(ignore_unknown_element, tags, uri)</div><div class='del'>-        unless have_author?</div><div class='del'>-          raise MissingTagError.new("author", tag_name)</div><div class='del'>-        end</div><div class='del'>-        validate_duplicate_links(links)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def have_required_elements?</div><div class='del'>-        super and have_author?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def maker_target(maker)</div><div class='del'>-        maker.channel</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_element(channel)</div><div class='del'>-        prev_dc_dates = channel.dc_dates.to_a.dup</div><div class='del'>-        super</div><div class='del'>-        channel.about = id.content if id</div><div class='del'>-        channel.dc_dates.replace(prev_dc_dates)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_elements(channel)</div><div class='del'>-        super</div><div class='del'>-        items = channel.maker.items</div><div class='del'>-        entries.each do |entry|</div><div class='del'>-          entry.setup_maker(items)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Author &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include PersonConstruct</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Category &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-         ["term", "", true],</div><div class='del'>-         ["scheme", "", false, [nil, :uri]],</div><div class='del'>-         ["label", ""],</div><div class='del'>-        ].each do |name, uri, required, type|</div><div class='del'>-          install_get_attribute(name, uri, required, type)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def maker_target(target)</div><div class='del'>-          target.new_category</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Contributor &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include PersonConstruct</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Generator &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include ContentModel</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-         ["uri", "", false, [nil, :uri]],</div><div class='del'>-         ["version", ""],</div><div class='del'>-        ].each do |name, uri, required, type|</div><div class='del'>-          install_get_attribute(name, uri, required, type)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def setup_maker_attributes(target)</div><div class='del'>-          target.generator do |generator|</div><div class='del'>-            generator.uri = uri if uri</div><div class='del'>-            generator.version = version if version</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Icon &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include URIContentModel</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Id &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include URIContentModel</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Link &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-         ["href", "", true, [nil, :uri]],</div><div class='del'>-         ["rel", ""],</div><div class='del'>-         ["type", ""],</div><div class='del'>-         ["hreflang", ""],</div><div class='del'>-         ["title", ""],</div><div class='del'>-         ["length", ""],</div><div class='del'>-        ].each do |name, uri, required, type|</div><div class='del'>-          install_get_attribute(name, uri, required, type)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def maker_target(target)</div><div class='del'>-          target.new_link</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Logo &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include URIContentModel</div><div class='del'>-</div><div class='del'>-        def maker_target(target)</div><div class='del'>-          target.maker.image</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def setup_maker_element_writer</div><div class='del'>-          "url="</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Rights &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include TextConstruct</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Subtitle &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include TextConstruct</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Title &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include TextConstruct</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Updated &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include DateConstruct</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Entry &lt; RSS::Element</div><div class='del'>-        include CommonModel</div><div class='del'>-        include DuplicateLinkChecker</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-         ["author", "*", :children],</div><div class='del'>-         ["category", "*", :children, "categories"],</div><div class='del'>-         ["content", "?", :child],</div><div class='del'>-         ["contributor", "*", :children],</div><div class='del'>-         ["id", nil, nil, :content],</div><div class='del'>-         ["link", "*", :children],</div><div class='del'>-         ["published", "?", :child, :content],</div><div class='del'>-         ["rights", "?", :child],</div><div class='del'>-         ["source", "?"],</div><div class='del'>-         ["summary", "?", :child],</div><div class='del'>-         ["title", nil],</div><div class='del'>-         ["updated", nil, :child, :content],</div><div class='del'>-        ].each do |tag, occurs, type, *args|</div><div class='del'>-          type ||= :attribute</div><div class='del'>-          __send__("install_have_#{type}_element",</div><div class='del'>-                   tag, URI, occurs, tag, *args)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def have_author?(check_parent=true)</div><div class='del'>-          authors.any? {|author| !author.to_s.empty?} or</div><div class='del'>-            (check_parent and @parent and @parent.have_author?) or</div><div class='del'>-            (source and source.have_author?)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def atom_validate(ignore_unknown_element, tags, uri)</div><div class='del'>-          unless have_author?</div><div class='del'>-            raise MissingTagError.new("author", tag_name)</div><div class='del'>-          end</div><div class='del'>-          validate_duplicate_links(links)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def have_required_elements?</div><div class='del'>-          super and have_author?</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def maker_target(items)</div><div class='del'>-          if items.respond_to?("items")</div><div class='del'>-            # For backward compatibility</div><div class='del'>-            items = items.items</div><div class='del'>-          end</div><div class='del'>-          items.new_item</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        Author = Feed::Author</div><div class='del'>-        Category = Feed::Category</div><div class='del'>-</div><div class='del'>-        class Content &lt; RSS::Element</div><div class='del'>-          include CommonModel</div><div class='del'>-</div><div class='del'>-          class &lt;&lt; self</div><div class='del'>-            def xml_setter</div><div class='del'>-              "xml="</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            def xml_getter</div><div class='del'>-              "xml"</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          [</div><div class='del'>-           ["type", ""],</div><div class='del'>-           ["src", "", false, [nil, :uri]],</div><div class='del'>-          ].each do |name, uri, required, type|</div><div class='del'>-            install_get_attribute(name, uri, required, type)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          content_setup</div><div class='del'>-          add_need_initialize_variable("xml")</div><div class='del'>-</div><div class='del'>-          attr_writer :xml</div><div class='del'>-          def have_xml_content?</div><div class='del'>-            inline_xhtml? or inline_other_xml?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def xml</div><div class='del'>-            return @xml unless inline_xhtml?</div><div class='del'>-            return @xml if @xml.nil?</div><div class='del'>-            if @xml.is_a?(XML::Element) and</div><div class='del'>-                [@xml.name, @xml.uri] == ["div", XHTML_URI]</div><div class='del'>-              return @xml</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            children = @xml</div><div class='del'>-            children = [children] unless children.is_a?(Array)</div><div class='del'>-            XML::Element.new("div", nil, XHTML_URI,</div><div class='del'>-                             {"xmlns" =&gt; XHTML_URI}, children)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def xhtml</div><div class='del'>-            if inline_xhtml?</div><div class='del'>-              xml</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 atom_validate(ignore_unknown_element, tags, uri)</div><div class='del'>-            if out_of_line?</div><div class='del'>-              raise MissingAttributeError.new(tag_name, "type") if @type.nil?</div><div class='del'>-              unless (content.nil? or content.empty?)</div><div class='del'>-                raise NotAvailableValueError.new(tag_name, content)</div><div class='del'>-              end</div><div class='del'>-            elsif inline_xhtml?</div><div class='del'>-              if @xml.nil?</div><div class='del'>-                raise MissingTagError.new("div", tag_name)</div><div class='del'>-              end</div><div class='del'>-              unless @xml.name == "div" and @xml.uri == XHTML_URI</div><div class='del'>-                raise NotExpectedTagError.new(@xml.name, @xml.uri, tag_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 inline_text?</div><div class='del'>-            !out_of_line? and [nil, "text", "html"].include?(@type)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def inline_html?</div><div class='del'>-            return false if out_of_line?</div><div class='del'>-            @type == "html" or mime_split == ["text", "html"]</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def inline_xhtml?</div><div class='del'>-            !out_of_line? and @type == "xhtml"</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def inline_other?</div><div class='del'>-            return false if out_of_line?</div><div class='del'>-            media_type, subtype = mime_split</div><div class='del'>-            return false if media_type.nil? or subtype.nil?</div><div class='del'>-            true</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def inline_other_text?</div><div class='del'>-            return false unless inline_other?</div><div class='del'>-            return false if inline_other_xml?</div><div class='del'>-</div><div class='del'>-            media_type, subtype = mime_split</div><div class='del'>-            return true if "text" == media_type.downcase</div><div class='del'>-            false</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def inline_other_xml?</div><div class='del'>-            return false unless inline_other?</div><div class='del'>-</div><div class='del'>-            media_type, subtype = mime_split</div><div class='del'>-            normalized_mime_type = "#{media_type}/#{subtype}".downcase</div><div class='del'>-            if /(?:\+xml|^xml)$/ =~ subtype or</div><div class='del'>-                %w(text/xml-external-parsed-entity</div><div class='del'>-                   application/xml-external-parsed-entity</div><div class='del'>-                   application/xml-dtd).find {|x| x == normalized_mime_type}</div><div class='del'>-              return true</div><div class='del'>-            end</div><div class='del'>-            false</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def inline_other_base64?</div><div class='del'>-            inline_other? and !inline_other_text? and !inline_other_xml?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def out_of_line?</div><div class='del'>-            not @src.nil?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def mime_split</div><div class='del'>-            media_type = subtype = nil</div><div class='del'>-            if /\A\s*([a-z]+)\/([a-z\+]+)\s*(?:;.*)?\z/i =~ @type.to_s</div><div class='del'>-              media_type = $1.downcase</div><div class='del'>-              subtype = $2.downcase</div><div class='del'>-            end</div><div class='del'>-            [media_type, subtype]</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def need_base64_encode?</div><div class='del'>-            inline_other_base64?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def empty_content?</div><div class='del'>-            out_of_line? or super</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        Contributor = Feed::Contributor</div><div class='del'>-        Id = Feed::Id</div><div class='del'>-        Link = Feed::Link</div><div class='del'>-</div><div class='del'>-        class Published &lt; RSS::Element</div><div class='del'>-          include CommonModel</div><div class='del'>-          include DateConstruct</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        Rights = Feed::Rights</div><div class='del'>-</div><div class='del'>-        class Source &lt; RSS::Element</div><div class='del'>-          include CommonModel</div><div class='del'>-</div><div class='del'>-          [</div><div class='del'>-           ["author", "*", :children],</div><div class='del'>-           ["category", "*", :children, "categories"],</div><div class='del'>-           ["contributor", "*", :children],</div><div class='del'>-           ["generator", "?"],</div><div class='del'>-           ["icon", "?"],</div><div class='del'>-           ["id", "?", nil, :content],</div><div class='del'>-           ["link", "*", :children],</div><div class='del'>-           ["logo", "?"],</div><div class='del'>-           ["rights", "?"],</div><div class='del'>-           ["subtitle", "?"],</div><div class='del'>-           ["title", "?"],</div><div class='del'>-           ["updated", "?", nil, :content],</div><div class='del'>-          ].each do |tag, occurs, type, *args|</div><div class='del'>-            type ||= :attribute</div><div class='del'>-            __send__("install_have_#{type}_element",</div><div class='del'>-                     tag, URI, occurs, tag, *args)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def have_author?</div><div class='del'>-            !author.to_s.empty?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          Author = Feed::Author</div><div class='del'>-          Category = Feed::Category</div><div class='del'>-          Contributor = Feed::Contributor</div><div class='del'>-          Generator = Feed::Generator</div><div class='del'>-          Icon = Feed::Icon</div><div class='del'>-          Id = Feed::Id</div><div class='del'>-          Link = Feed::Link</div><div class='del'>-          Logo = Feed::Logo</div><div class='del'>-          Rights = Feed::Rights</div><div class='del'>-          Subtitle = Feed::Subtitle</div><div class='del'>-          Title = Feed::Title</div><div class='del'>-          Updated = Feed::Updated</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Summary &lt; RSS::Element</div><div class='del'>-          include CommonModel</div><div class='del'>-          include TextConstruct</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        Title = Feed::Title</div><div class='del'>-        Updated = Feed::Updated</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Entry &lt; RSS::Element</div><div class='del'>-      include RootElementMixin</div><div class='del'>-      include CommonModel</div><div class='del'>-      include DuplicateLinkChecker</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-       ["author", "*", :children],</div><div class='del'>-       ["category", "*", :children, "categories"],</div><div class='del'>-       ["content", "?"],</div><div class='del'>-       ["contributor", "*", :children],</div><div class='del'>-       ["id", nil, nil, :content],</div><div class='del'>-       ["link", "*", :children],</div><div class='del'>-       ["published", "?", :child, :content],</div><div class='del'>-       ["rights", "?"],</div><div class='del'>-       ["source", "?"],</div><div class='del'>-       ["summary", "?"],</div><div class='del'>-       ["title", nil],</div><div class='del'>-       ["updated", nil, nil, :content],</div><div class='del'>-      ].each do |tag, occurs, type, *args|</div><div class='del'>-        type ||= :attribute</div><div class='del'>-        __send__("install_have_#{type}_element",</div><div class='del'>-                 tag, URI, occurs, tag, *args)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(version=nil, encoding=nil, standalone=nil)</div><div class='del'>-        super("1.0", version, encoding, standalone)</div><div class='del'>-        @feed_type = "atom"</div><div class='del'>-        @feed_subtype = "entry"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def items</div><div class='del'>-        [self]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker(maker)</div><div class='del'>-        maker = maker.maker if maker.respond_to?("maker")</div><div class='del'>-        super(maker)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def have_author?</div><div class='del'>-        authors.any? {|author| !author.to_s.empty?} or</div><div class='del'>-          (source and source.have_author?)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def atom_validate(ignore_unknown_element, tags, uri)</div><div class='del'>-        unless have_author?</div><div class='del'>-          raise MissingTagError.new("author", tag_name)</div><div class='del'>-        end</div><div class='del'>-        validate_duplicate_links(links)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def have_required_elements?</div><div class='del'>-        super and have_author?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def maker_target(maker)</div><div class='del'>-        maker.items.new_item</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      Author = Feed::Entry::Author</div><div class='del'>-      Category = Feed::Entry::Category</div><div class='del'>-      Content = Feed::Entry::Content</div><div class='del'>-      Contributor = Feed::Entry::Contributor</div><div class='del'>-      Id = Feed::Entry::Id</div><div class='del'>-      Link = Feed::Entry::Link</div><div class='del'>-      Published = Feed::Entry::Published</div><div class='del'>-      Rights = Feed::Entry::Rights</div><div class='del'>-      Source = Feed::Entry::Source</div><div class='del'>-      Summary = Feed::Entry::Summary</div><div class='del'>-      Title = Feed::Entry::Title</div><div class='del'>-      Updated = Feed::Entry::Updated</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  Atom::CommonModel::ELEMENTS.each do |name|</div><div class='del'>-    BaseListener.install_get_text_element(Atom::URI, name, "#{name}=")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ListenerMixin</div><div class='del'>-    private</div><div class='del'>-    def initial_start_feed(tag_name, prefix, attrs, ns)</div><div class='del'>-      check_ns(tag_name, prefix, ns, Atom::URI)</div><div class='del'>-</div><div class='del'>-      @rss = Atom::Feed.new(@version, @encoding, @standalone)</div><div class='del'>-      @rss.do_validate = @do_validate</div><div class='del'>-      @rss.xml_stylesheets = @xml_stylesheets</div><div class='del'>-      @rss.lang = attrs["xml:lang"]</div><div class='del'>-      @rss.base = attrs["xml:base"]</div><div class='del'>-      @last_element = @rss</div><div class='del'>-      pr = Proc.new do |text, tags|</div><div class='del'>-        @rss.validate_for_stream(tags) if @do_validate</div><div class='del'>-      end</div><div class='del'>-      @proc_stack.push(pr)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def initial_start_entry(tag_name, prefix, attrs, ns)</div><div class='del'>-      check_ns(tag_name, prefix, ns, Atom::URI)</div><div class='del'>-</div><div class='del'>-      @rss = Atom::Entry.new(@version, @encoding, @standalone)</div><div class='del'>-      @rss.do_validate = @do_validate</div><div class='del'>-      @rss.xml_stylesheets = @xml_stylesheets</div><div class='del'>-      @rss.lang = attrs["xml:lang"]</div><div class='del'>-      @rss.base = attrs["xml:base"]</div><div class='del'>-      @last_element = @rss</div><div class='del'>-      pr = Proc.new do |text, tags|</div><div class='del'>-        @rss.validate_for_stream(tags) if @do_validate</div><div class='del'>-      end</div><div class='del'>-      @proc_stack.push(pr)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/content.rb b/lib/rss/content.rb<br/>deleted file mode 100644<br/>index b12ee918aa..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/content.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/content.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,31 +0,0 @@</div><div class='del'>-require "rss/rss"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  CONTENT_PREFIX = 'content'</div><div class='del'>-  CONTENT_URI = "http://purl.org/rss/1.0/modules/content/"</div><div class='del'>-</div><div class='del'>-  module ContentModel</div><div class='del'>-    extend BaseModel</div><div class='del'>-</div><div class='del'>-    ELEMENTS = ["#{CONTENT_PREFIX}_encoded"]</div><div class='del'>-</div><div class='del'>-    def self.append_features(klass)</div><div class='del'>-      super</div><div class='del'>-</div><div class='del'>-      klass.install_must_call_validator(CONTENT_PREFIX, CONTENT_URI)</div><div class='del'>-      ELEMENTS.each do |full_name|</div><div class='del'>-        name = full_name[(CONTENT_PREFIX.size + 1)..-1]</div><div class='del'>-        klass.install_text_element(name, CONTENT_URI, "?", full_name)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  prefix_size = CONTENT_PREFIX.size + 1</div><div class='del'>-  ContentModel::ELEMENTS.each do |full_name|</div><div class='del'>-    name = full_name[prefix_size..-1]</div><div class='del'>-    BaseListener.install_get_text_element(CONTENT_URI, name, full_name)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'rss/content/1.0'</div><div class='del'>-require 'rss/content/2.0'</div><div class='head'>diff --git a/lib/rss/content/1.0.rb b/lib/rss/content/1.0.rb<br/>deleted file mode 100644<br/>index e7c0c19685..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/content/1.0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/content/1.0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,10 +0,0 @@</div><div class='del'>-require 'rss/1.0'</div><div class='del'>-require 'rss/content'</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  RDF.install_ns(CONTENT_PREFIX, CONTENT_URI)</div><div class='del'>-</div><div class='del'>-  class RDF</div><div class='del'>-    class Item; include ContentModel; end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/content/2.0.rb b/lib/rss/content/2.0.rb<br/>deleted file mode 100644<br/>index 8671b5b1a6..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/content/2.0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/content/2.0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,12 +0,0 @@</div><div class='del'>-require "rss/2.0"</div><div class='del'>-require "rss/content"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  Rss.install_ns(CONTENT_PREFIX, CONTENT_URI)</div><div class='del'>-</div><div class='del'>-  class Rss</div><div class='del'>-    class Channel</div><div class='del'>-      class Item; include ContentModel; end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/converter.rb b/lib/rss/converter.rb<br/>deleted file mode 100644<br/>index 415a319188..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/converter.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/converter.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,162 +0,0 @@</div><div class='del'>-require "rss/utils"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-</div><div class='del'>-  class Converter</div><div class='del'>-    </div><div class='del'>-    include Utils</div><div class='del'>-</div><div class='del'>-    def initialize(to_enc, from_enc=nil)</div><div class='del'>-      normalized_to_enc = to_enc.downcase.gsub(/-/, '_')</div><div class='del'>-      from_enc ||= 'utf-8'</div><div class='del'>-      normalized_from_enc = from_enc.downcase.gsub(/-/, '_')</div><div class='del'>-      if normalized_to_enc == normalized_from_enc</div><div class='del'>-        def_same_enc()</div><div class='del'>-      else</div><div class='del'>-        def_diff_enc = "def_to_#{normalized_to_enc}_from_#{normalized_from_enc}"</div><div class='del'>-        if respond_to?(def_diff_enc)</div><div class='del'>-          __send__(def_diff_enc)</div><div class='del'>-        else</div><div class='del'>-          def_else_enc(to_enc, from_enc)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def convert(value)</div><div class='del'>-      value</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def def_convert(depth=0)</div><div class='del'>-      instance_eval(&lt;&lt;-EOC, *get_file_and_line_from_caller(depth))</div><div class='del'>-      def convert(value)</div><div class='del'>-        if value.kind_of?(String)</div><div class='del'>-          #{yield('value')}</div><div class='del'>-        else</div><div class='del'>-          value</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      EOC</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def def_iconv_convert(to_enc, from_enc, depth=0)</div><div class='del'>-      begin</div><div class='del'>-        require "iconv"</div><div class='del'>-        @iconv = Iconv.new(to_enc, from_enc)</div><div class='del'>-        def_convert(depth+1) do |value|</div><div class='del'>-          &lt;&lt;-EOC</div><div class='del'>-          begin</div><div class='del'>-            @iconv.iconv(#{value})</div><div class='del'>-          rescue Iconv::Failure</div><div class='del'>-            raise ConversionError.new(#{value}, "#{to_enc}", "#{from_enc}")</div><div class='del'>-          end</div><div class='del'>-          EOC</div><div class='del'>-        end</div><div class='del'>-      rescue LoadError, ArgumentError, SystemCallError</div><div class='del'>-        raise UnknownConversionMethodError.new(to_enc, from_enc)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_else_enc(to_enc, from_enc)</div><div class='del'>-      def_iconv_convert(to_enc, from_enc, 0)</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_same_enc()</div><div class='del'>-      def_convert do |value|</div><div class='del'>-        value</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def def_uconv_convert_if_can(meth, to_enc, from_enc, nkf_arg)</div><div class='del'>-      begin</div><div class='del'>-        require "uconv"</div><div class='del'>-        def_convert(1) do |value|</div><div class='del'>-          &lt;&lt;-EOC</div><div class='del'>-          begin</div><div class='del'>-            Uconv.#{meth}(#{value})</div><div class='del'>-          rescue Uconv::Error</div><div class='del'>-            raise ConversionError.new(#{value}, "#{to_enc}", "#{from_enc}")</div><div class='del'>-          end</div><div class='del'>-          EOC</div><div class='del'>-        end</div><div class='del'>-      rescue LoadError</div><div class='del'>-        require 'nkf'</div><div class='del'>-        if NKF.const_defined?(:UTF8)</div><div class='del'>-          def_convert(1) do |value|</div><div class='del'>-            "NKF.nkf(#{nkf_arg.dump}, #{value})"</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          def_iconv_convert(to_enc, from_enc, 1)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def def_to_euc_jp_from_utf_8</div><div class='del'>-      def_uconv_convert_if_can('u8toeuc', 'EUC-JP', 'UTF-8', '-We')</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_to_utf_8_from_euc_jp</div><div class='del'>-      def_uconv_convert_if_can('euctou8', 'UTF-8', 'EUC-JP', '-Ew')</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_to_shift_jis_from_utf_8</div><div class='del'>-      def_uconv_convert_if_can('u8tosjis', 'Shift_JIS', 'UTF-8', '-Ws')</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_to_utf_8_from_shift_jis</div><div class='del'>-      def_uconv_convert_if_can('sjistou8', 'UTF-8', 'Shift_JIS', '-Sw')</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_to_euc_jp_from_shift_jis</div><div class='del'>-      require "nkf"</div><div class='del'>-      def_convert do |value|</div><div class='del'>-        "NKF.nkf('-Se', #{value})"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_to_shift_jis_from_euc_jp</div><div class='del'>-      require "nkf"</div><div class='del'>-      def_convert do |value|</div><div class='del'>-        "NKF.nkf('-Es', #{value})"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_to_euc_jp_from_iso_2022_jp</div><div class='del'>-      require "nkf"</div><div class='del'>-      def_convert do |value|</div><div class='del'>-        "NKF.nkf('-Je', #{value})"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_to_iso_2022_jp_from_euc_jp</div><div class='del'>-      require "nkf"</div><div class='del'>-      def_convert do |value|</div><div class='del'>-        "NKF.nkf('-Ej', #{value})"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def def_to_utf_8_from_iso_8859_1</div><div class='del'>-      def_convert do |value|</div><div class='del'>-        "#{value}.unpack('C*').pack('U*')"</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    def def_to_iso_8859_1_from_utf_8</div><div class='del'>-      def_convert do |value|</div><div class='del'>-        &lt;&lt;-EOC</div><div class='del'>-        array_utf8 = #{value}.unpack('U*')</div><div class='del'>-        array_enc = []</div><div class='del'>-        array_utf8.each do |num|</div><div class='del'>-          if num &lt;= 0xFF</div><div class='del'>-            array_enc &lt;&lt; num</div><div class='del'>-          else</div><div class='del'>-            array_enc.concat "&amp;\#\#{num};".unpack('C*')</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        array_enc.pack('C*')</div><div class='del'>-        EOC</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'>-end</div><div class='head'>diff --git a/lib/rss/dublincore.rb b/lib/rss/dublincore.rb<br/>deleted file mode 100644<br/>index 7ba239f8f1..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/dublincore.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/dublincore.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,161 +0,0 @@</div><div class='del'>-require "rss/rss"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  DC_PREFIX = 'dc'</div><div class='del'>-  DC_URI = "http://purl.org/dc/elements/1.1/"</div><div class='del'>-</div><div class='del'>-  module BaseDublinCoreModel</div><div class='del'>-    def append_features(klass)</div><div class='del'>-      super</div><div class='del'>-</div><div class='del'>-      return if klass.instance_of?(Module)</div><div class='del'>-      DublinCoreModel::ELEMENT_NAME_INFOS.each do |name, plural_name|</div><div class='del'>-        plural = plural_name || "#{name}s"</div><div class='del'>-        full_name = "#{DC_PREFIX}_#{name}"</div><div class='del'>-        full_plural_name = "#{DC_PREFIX}_#{plural}"</div><div class='del'>-        klass_name = "DublinCore#{Utils.to_class_name(name)}"</div><div class='del'>-        klass.install_must_call_validator(DC_PREFIX, DC_URI)</div><div class='del'>-        klass.install_have_children_element(name, DC_URI, "*",</div><div class='del'>-                                            full_name, full_plural_name)</div><div class='del'>-        klass.module_eval(&lt;&lt;-EOC, *get_file_and_line_from_caller(0))</div><div class='del'>-          remove_method :#{full_name}</div><div class='del'>-          remove_method :#{full_name}=</div><div class='del'>-          remove_method :set_#{full_name}</div><div class='del'>-</div><div class='del'>-          def #{full_name}</div><div class='del'>-            @#{full_name}.first and @#{full_name}.first.value</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          def #{full_name}=(new_value)</div><div class='del'>-            @#{full_name}[0] = Utils.new_with_value_if_need(#{klass_name}, new_value)</div><div class='del'>-          end</div><div class='del'>-          alias set_#{full_name} #{full_name}=</div><div class='del'>-        EOC</div><div class='del'>-      end</div><div class='del'>-      klass.module_eval(&lt;&lt;-EOC, *get_file_and_line_from_caller(0))</div><div class='del'>-        if method_defined?(:date)</div><div class='del'>-          alias date_without_#{DC_PREFIX}_date= date=</div><div class='del'>-</div><div class='del'>-          def date=(value)</div><div class='del'>-            self.date_without_#{DC_PREFIX}_date = value</div><div class='del'>-            self.#{DC_PREFIX}_date = value</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          alias date #{DC_PREFIX}_date</div><div class='del'>-          alias date= #{DC_PREFIX}_date=</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        # For backward compatibility</div><div class='del'>-        alias #{DC_PREFIX}_rightses #{DC_PREFIX}_rights_list</div><div class='del'>-      EOC</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  module DublinCoreModel</div><div class='del'>-</div><div class='del'>-    extend BaseModel</div><div class='del'>-    extend BaseDublinCoreModel</div><div class='del'>-</div><div class='del'>-    TEXT_ELEMENTS = {</div><div class='del'>-      "title" =&gt; nil,</div><div class='del'>-      "description" =&gt; nil,</div><div class='del'>-      "creator" =&gt; nil,</div><div class='del'>-      "subject" =&gt; nil,</div><div class='del'>-      "publisher" =&gt; nil,</div><div class='del'>-      "contributor" =&gt; nil,</div><div class='del'>-      "type" =&gt; nil,</div><div class='del'>-      "format" =&gt; nil,</div><div class='del'>-      "identifier" =&gt; nil,</div><div class='del'>-      "source" =&gt; nil,</div><div class='del'>-      "language" =&gt; nil,</div><div class='del'>-      "relation" =&gt; nil,</div><div class='del'>-      "coverage" =&gt; nil,</div><div class='del'>-      "rights" =&gt; "rights_list"</div><div class='del'>-    }</div><div class='del'>-</div><div class='del'>-    DATE_ELEMENTS = {</div><div class='del'>-      "date" =&gt; "w3cdtf",</div><div class='del'>-    }</div><div class='del'>-    </div><div class='del'>-    ELEMENT_NAME_INFOS = DublinCoreModel::TEXT_ELEMENTS.to_a</div><div class='del'>-    DublinCoreModel::DATE_ELEMENTS.each do |name, |</div><div class='del'>-      ELEMENT_NAME_INFOS &lt;&lt; [name, nil]</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    ELEMENTS = TEXT_ELEMENTS.keys + DATE_ELEMENTS.keys</div><div class='del'>-</div><div class='del'>-    ELEMENTS.each do |name, plural_name|</div><div class='del'>-      module_eval(&lt;&lt;-EOC, *get_file_and_line_from_caller(0))</div><div class='del'>-        class DublinCore#{Utils.to_class_name(name)} &lt; Element</div><div class='del'>-          include RSS10</div><div class='del'>-          </div><div class='del'>-          content_setup</div><div class='del'>-</div><div class='del'>-          class &lt;&lt; self</div><div class='del'>-            def required_prefix</div><div class='del'>-              DC_PREFIX</div><div class='del'>-            end</div><div class='del'>-        </div><div class='del'>-            def required_uri</div><div class='del'>-              DC_URI</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          @tag_name = #{name.dump}</div><div class='del'>-</div><div class='del'>-          alias_method(:value, :content)</div><div class='del'>-          alias_method(:value=, :content=)</div><div class='del'>-          </div><div class='del'>-          def initialize(*args)</div><div class='del'>-            if Utils.element_initialize_arguments?(args)</div><div class='del'>-              super</div><div class='del'>-            else</div><div class='del'>-              super()</div><div class='del'>-              self.content = args[0]</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-      </div><div class='del'>-          def full_name</div><div class='del'>-            tag_name_with_prefix(DC_PREFIX)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def maker_target(target)</div><div class='del'>-            target.new_#{name}</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def setup_maker_attributes(#{name})</div><div class='del'>-            #{name}.content = content</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      EOC</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    DATE_ELEMENTS.each do |name, type|</div><div class='del'>-      tag_name = "#{DC_PREFIX}:#{name}"</div><div class='del'>-      module_eval(&lt;&lt;-EOC, *get_file_and_line_from_caller(0))</div><div class='del'>-        class DublinCore#{Utils.to_class_name(name)} &lt; Element</div><div class='del'>-          remove_method(:content=)</div><div class='del'>-          remove_method(:value=)</div><div class='del'>-</div><div class='del'>-          date_writer("content", #{type.dump}, #{tag_name.dump})</div><div class='del'>-</div><div class='del'>-          alias_method(:value=, :content=)</div><div class='del'>-        end</div><div class='del'>-      EOC</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  # For backward compatibility</div><div class='del'>-  DublincoreModel = DublinCoreModel</div><div class='del'>-</div><div class='del'>-  DublinCoreModel::ELEMENTS.each do |name|</div><div class='del'>-    class_name = Utils.to_class_name(name)</div><div class='del'>-    BaseListener.install_class_name(DC_URI, name, "DublinCore#{class_name}")</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  DublinCoreModel::ELEMENTS.collect! {|name| "#{DC_PREFIX}_#{name}"}</div><div class='del'>-end</div><div class='del'>-</div><div class='del'>-require 'rss/dublincore/1.0'</div><div class='del'>-require 'rss/dublincore/2.0'</div><div class='del'>-require 'rss/dublincore/atom'</div><div class='head'>diff --git a/lib/rss/dublincore/1.0.rb b/lib/rss/dublincore/1.0.rb<br/>deleted file mode 100644<br/>index e193c6d2c2..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/dublincore/1.0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/dublincore/1.0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-require "rss/1.0"</div><div class='del'>-require "rss/dublincore"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  RDF.install_ns(DC_PREFIX, DC_URI)</div><div class='del'>-</div><div class='del'>-  class RDF</div><div class='del'>-    class Channel; include DublinCoreModel; end</div><div class='del'>-    class Image; include DublinCoreModel; end</div><div class='del'>-    class Item; include DublinCoreModel; end</div><div class='del'>-    class Textinput; include DublinCoreModel; end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/dublincore/2.0.rb b/lib/rss/dublincore/2.0.rb<br/>deleted file mode 100644<br/>index 82ed1888c5..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/dublincore/2.0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/dublincore/2.0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,13 +0,0 @@</div><div class='del'>-require "rss/2.0"</div><div class='del'>-require "rss/dublincore"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  Rss.install_ns(DC_PREFIX, DC_URI)</div><div class='del'>-</div><div class='del'>-  class Rss</div><div class='del'>-    class Channel</div><div class='del'>-      include DublinCoreModel</div><div class='del'>-      class Item; include DublinCoreModel; end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/dublincore/atom.rb b/lib/rss/dublincore/atom.rb<br/>deleted file mode 100644<br/>index e78df4821b..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/dublincore/atom.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/dublincore/atom.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,17 +0,0 @@</div><div class='del'>-require "rss/atom"</div><div class='del'>-require "rss/dublincore"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  module Atom</div><div class='del'>-    Feed.install_ns(DC_PREFIX, DC_URI)</div><div class='del'>-</div><div class='del'>-    class Feed</div><div class='del'>-      include DublinCoreModel</div><div class='del'>-      class Entry; include DublinCoreModel; end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class Entry</div><div class='del'>-      include DublinCoreModel</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/image.rb b/lib/rss/image.rb<br/>deleted file mode 100644<br/>index c4714aea12..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/image.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/image.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,193 +0,0 @@</div><div class='del'>-require 'rss/1.0'</div><div class='del'>-require 'rss/dublincore'</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-</div><div class='del'>-  IMAGE_PREFIX = 'image'</div><div class='del'>-  IMAGE_URI = 'http://purl.org/rss/1.0/modules/image/'</div><div class='del'>-</div><div class='del'>-  RDF.install_ns(IMAGE_PREFIX, IMAGE_URI)</div><div class='del'>-</div><div class='del'>-  IMAGE_ELEMENTS = []</div><div class='del'>-</div><div class='del'>-  %w(item favicon).each do |name|</div><div class='del'>-    class_name = Utils.to_class_name(name)</div><div class='del'>-    BaseListener.install_class_name(IMAGE_URI, name, "Image#{class_name}")</div><div class='del'>-    IMAGE_ELEMENTS &lt;&lt; "#{IMAGE_PREFIX}_#{name}"</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  module ImageModelUtils</div><div class='del'>-    def validate_one_tag_name(ignore_unknown_element, name, tags)</div><div class='del'>-      if !ignore_unknown_element</div><div class='del'>-        invalid = tags.find {|tag| tag != name}</div><div class='del'>-        raise UnknownTagError.new(invalid, IMAGE_URI) if invalid</div><div class='del'>-      end</div><div class='del'>-      raise TooMuchTagError.new(name, tag_name) if tags.size &gt; 1</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  module ImageItemModel</div><div class='del'>-    include ImageModelUtils</div><div class='del'>-    extend BaseModel</div><div class='del'>-</div><div class='del'>-    def self.append_features(klass)</div><div class='del'>-      super</div><div class='del'>-</div><div class='del'>-      klass.install_have_child_element("item", IMAGE_URI, "?",</div><div class='del'>-                                       "#{IMAGE_PREFIX}_item")</div><div class='del'>-      klass.install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class ImageItem &lt; Element</div><div class='del'>-      include RSS10</div><div class='del'>-      include DublinCoreModel</div><div class='del'>-</div><div class='del'>-      @tag_name = "item"</div><div class='del'>-      </div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_prefix</div><div class='del'>-          IMAGE_PREFIX</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        def required_uri</div><div class='del'>-          IMAGE_URI</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ["about", ::RSS::RDF::URI, true],</div><div class='del'>-        ["resource", ::RSS::RDF::URI, false],</div><div class='del'>-      ].each do |name, uri, required|</div><div class='del'>-        install_get_attribute(name, uri, required, nil, nil,</div><div class='del'>-                              "#{::RSS::RDF::PREFIX}:#{name}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      %w(width height).each do |tag|</div><div class='del'>-        full_name = "#{IMAGE_PREFIX}_#{tag}"</div><div class='del'>-        disp_name = "#{IMAGE_PREFIX}:#{tag}"</div><div class='del'>-        install_text_element(tag, IMAGE_URI, "?",</div><div class='del'>-                             full_name, :integer, disp_name)</div><div class='del'>-        BaseListener.install_get_text_element(IMAGE_URI, tag, full_name)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      alias width= image_width=</div><div class='del'>-      alias width image_width</div><div class='del'>-      alias height= image_height=</div><div class='del'>-      alias height image_height</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.about = args[0]</div><div class='del'>-          self.resource = args[1]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(IMAGE_PREFIX)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(target)</div><div class='del'>-        target.image_item</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_attributes(item)</div><div class='del'>-        item.about = self.about</div><div class='del'>-        item.resource = self.resource</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-  </div><div class='del'>-  module ImageFaviconModel</div><div class='del'>-    include ImageModelUtils</div><div class='del'>-    extend BaseModel</div><div class='del'>-    </div><div class='del'>-    def self.append_features(klass)</div><div class='del'>-      super</div><div class='del'>-</div><div class='del'>-      unless klass.class == Module</div><div class='del'>-        klass.install_have_child_element("favicon", IMAGE_URI, "?",</div><div class='del'>-                                         "#{IMAGE_PREFIX}_favicon")</div><div class='del'>-        klass.install_must_call_validator(IMAGE_PREFIX, IMAGE_URI)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class ImageFavicon &lt; Element</div><div class='del'>-      include RSS10</div><div class='del'>-      include DublinCoreModel</div><div class='del'>-</div><div class='del'>-      @tag_name = "favicon"</div><div class='del'>-      </div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_prefix</div><div class='del'>-          IMAGE_PREFIX</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        def required_uri</div><div class='del'>-          IMAGE_URI</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ["about", ::RSS::RDF::URI, true, ::RSS::RDF::PREFIX],</div><div class='del'>-        ["size", IMAGE_URI, true, IMAGE_PREFIX],</div><div class='del'>-      ].each do |name, uri, required, prefix|</div><div class='del'>-        install_get_attribute(name, uri, required, nil, nil,</div><div class='del'>-                              "#{prefix}:#{name}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      AVAILABLE_SIZES = %w(small medium large)</div><div class='del'>-      alias_method :set_size, :size=</div><div class='del'>-      private :set_size</div><div class='del'>-      def size=(new_value)</div><div class='del'>-        if @do_validate and !new_value.nil?</div><div class='del'>-          new_value = new_value.strip</div><div class='del'>-          unless AVAILABLE_SIZES.include?(new_value)</div><div class='del'>-            attr_name = "#{IMAGE_PREFIX}:size"</div><div class='del'>-            raise NotAvailableValueError.new(full_name, new_value, attr_name)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        set_size(new_value)</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      alias image_size= size=</div><div class='del'>-      alias image_size size</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.about = args[0]</div><div class='del'>-          self.size = args[1]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(IMAGE_PREFIX)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(target)</div><div class='del'>-        target.image_favicon</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_attributes(favicon)</div><div class='del'>-        favicon.about = self.about</div><div class='del'>-        favicon.size = self.size</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'>-  class RDF</div><div class='del'>-    class Channel; include ImageFaviconModel; end</div><div class='del'>-    class Item; include ImageItemModel; end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/itunes.rb b/lib/rss/itunes.rb<br/>deleted file mode 100644<br/>index f95ca7aa2e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/itunes.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/itunes.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,410 +0,0 @@</div><div class='del'>-require 'rss/2.0'</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  ITUNES_PREFIX = 'itunes'</div><div class='del'>-  ITUNES_URI = 'http://www.itunes.com/dtds/podcast-1.0.dtd'</div><div class='del'>-</div><div class='del'>-  Rss.install_ns(ITUNES_PREFIX, ITUNES_URI)</div><div class='del'>-</div><div class='del'>-  module ITunesModelUtils</div><div class='del'>-    include Utils</div><div class='del'>-</div><div class='del'>-    def def_class_accessor(klass, name, type, *args)</div><div class='del'>-        normalized_name = name.gsub(/-/, "_")</div><div class='del'>-      full_name = "#{ITUNES_PREFIX}_#{normalized_name}"</div><div class='del'>-      klass_name = "ITunes#{Utils.to_class_name(normalized_name)}"</div><div class='del'>-</div><div class='del'>-      case type</div><div class='del'>-      when :element, :attribute</div><div class='del'>-        klass::ELEMENTS &lt;&lt; full_name</div><div class='del'>-        def_element_class_accessor(klass, name, full_name, klass_name, *args)</div><div class='del'>-      when :elements</div><div class='del'>-        klass::ELEMENTS &lt;&lt; full_name</div><div class='del'>-        def_elements_class_accessor(klass, name, full_name, klass_name, *args)</div><div class='del'>-      else</div><div class='del'>-        klass.install_must_call_validator(ITUNES_PREFIX, ITUNES_URI)</div><div class='del'>-        klass.install_text_element(normalized_name, ITUNES_URI, "?",</div><div class='del'>-                                   full_name, type, name)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def def_element_class_accessor(klass, name, full_name, klass_name,</div><div class='del'>-                                   recommended_attribute_name=nil)</div><div class='del'>-      klass.install_have_child_element(name, ITUNES_PREFIX, "?", full_name)</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    def def_elements_class_accessor(klass, name, full_name, klass_name,</div><div class='del'>-                                    plural_name, recommended_attribute_name=nil)</div><div class='del'>-      full_plural_name = "#{ITUNES_PREFIX}_#{plural_name}"</div><div class='del'>-      klass.install_have_children_element(name, ITUNES_PREFIX, "*",</div><div class='del'>-                                          full_name, full_plural_name)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ITunesBaseModel</div><div class='del'>-    extend ITunesModelUtils</div><div class='del'>-</div><div class='del'>-    ELEMENTS = []</div><div class='del'>-</div><div class='del'>-    ELEMENT_INFOS = [["author"],</div><div class='del'>-                     ["block", :yes_other],</div><div class='del'>-                     ["explicit", :yes_clean_other],</div><div class='del'>-                     ["keywords", :csv],</div><div class='del'>-                     ["subtitle"],</div><div class='del'>-                     ["summary"]]</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ITunesChannelModel</div><div class='del'>-    extend BaseModel</div><div class='del'>-    extend ITunesModelUtils</div><div class='del'>-    include ITunesBaseModel</div><div class='del'>-</div><div class='del'>-    ELEMENTS = []</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      def append_features(klass)</div><div class='del'>-        super</div><div class='del'>-</div><div class='del'>-        return if klass.instance_of?(Module)</div><div class='del'>-        ELEMENT_INFOS.each do |name, type, *additional_infos|</div><div class='del'>-          def_class_accessor(klass, name, type, *additional_infos)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ELEMENT_INFOS = [</div><div class='del'>-                     ["category", :elements, "categories", "text"],</div><div class='del'>-                     ["image", :attribute, "href"],</div><div class='del'>-                     ["owner", :element],</div><div class='del'>-                     ["new-feed-url"],</div><div class='del'>-                    ] + ITunesBaseModel::ELEMENT_INFOS</div><div class='del'>-</div><div class='del'>-    class ITunesCategory &lt; Element</div><div class='del'>-      include RSS09</div><div class='del'>-</div><div class='del'>-      @tag_name = "category"</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_prefix</div><div class='del'>-          ITUNES_PREFIX</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_uri</div><div class='del'>-          ITUNES_URI</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ["text", "", true]</div><div class='del'>-      ].each do |name, uri, required|</div><div class='del'>-        install_get_attribute(name, uri, required)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      ITunesCategory = self</div><div class='del'>-      install_have_children_element("category", ITUNES_URI, "*",</div><div class='del'>-                                    "#{ITUNES_PREFIX}_category",</div><div class='del'>-                                    "#{ITUNES_PREFIX}_categories")</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.text = args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(ITUNES_PREFIX)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(categories)</div><div class='del'>-        if text or !itunes_categories.empty?</div><div class='del'>-          categories.new_category</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 setup_maker_attributes(category)</div><div class='del'>-        category.text = text if text</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_elements(category)</div><div class='del'>-        super(category)</div><div class='del'>-        itunes_categories.each do |sub_category|</div><div class='del'>-          sub_category.setup_maker(category)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class ITunesImage &lt; Element</div><div class='del'>-      include RSS09</div><div class='del'>-</div><div class='del'>-      @tag_name = "image"</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_prefix</div><div class='del'>-          ITUNES_PREFIX</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_uri</div><div class='del'>-          ITUNES_URI</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-        ["href", "", true]</div><div class='del'>-      ].each do |name, uri, required|</div><div class='del'>-        install_get_attribute(name, uri, required)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.href = args[0]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(ITUNES_PREFIX)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(target)</div><div class='del'>-        if href</div><div class='del'>-          target.itunes_image {|image| image}</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 setup_maker_attributes(image)</div><div class='del'>-        image.href = href</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class ITunesOwner &lt; Element</div><div class='del'>-      include RSS09</div><div class='del'>-</div><div class='del'>-      @tag_name = "owner"</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_prefix</div><div class='del'>-          ITUNES_PREFIX</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_uri</div><div class='del'>-          ITUNES_URI</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      install_must_call_validator(ITUNES_PREFIX, ITUNES_URI)</div><div class='del'>-      [</div><div class='del'>-        ["name"],</div><div class='del'>-        ["email"],</div><div class='del'>-      ].each do |name,|</div><div class='del'>-        ITunesBaseModel::ELEMENT_INFOS &lt;&lt; name</div><div class='del'>-        install_text_element(name, ITUNES_URI, nil, "#{ITUNES_PREFIX}_#{name}")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          self.itunes_name = args[0]</div><div class='del'>-          self.itunes_email = args[1]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(ITUNES_PREFIX)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def maker_target(target)</div><div class='del'>-        target.itunes_owner</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_maker_element(owner)</div><div class='del'>-        super(owner)</div><div class='del'>-        owner.itunes_name = itunes_name</div><div class='del'>-        owner.itunes_email = itunes_email</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  module ITunesItemModel</div><div class='del'>-    extend BaseModel</div><div class='del'>-    extend ITunesModelUtils</div><div class='del'>-    include ITunesBaseModel</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      def append_features(klass)</div><div class='del'>-        super</div><div class='del'>-</div><div class='del'>-        return if klass.instance_of?(Module)</div><div class='del'>-        ELEMENT_INFOS.each do |name, type|</div><div class='del'>-          def_class_accessor(klass, name, type)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    ELEMENT_INFOS = ITunesBaseModel::ELEMENT_INFOS +</div><div class='del'>-      [["duration", :element, "content"]]</div><div class='del'>-</div><div class='del'>-    class ITunesDuration &lt; Element</div><div class='del'>-      include RSS09</div><div class='del'>-</div><div class='del'>-      @tag_name = "duration"</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def required_prefix</div><div class='del'>-          ITUNES_PREFIX</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_uri</div><div class='del'>-          ITUNES_URI</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def parse(duration, do_validate=true)</div><div class='del'>-          if do_validate and /\A(?:</div><div class='del'>-                                  \d?\d:[0-5]\d:[0-5]\d|</div><div class='del'>-                                  [0-5]?\d:[0-5]\d</div><div class='del'>-                                )\z/x !~ duration</div><div class='del'>-            raise ArgumentError,</div><div class='del'>-                    "must be one of HH:MM:SS, H:MM:SS, MM::SS, M:SS: " +</div><div class='del'>-                    duration.inspect</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          components = duration.split(':')</div><div class='del'>-          components[3..-1] = nil if components.size &gt; 3</div><div class='del'>-</div><div class='del'>-          components.unshift("00") until components.size == 3</div><div class='del'>-</div><div class='del'>-          components.collect do |component|</div><div class='del'>-            component.to_i</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def construct(hour, minute, second)</div><div class='del'>-          components = [minute, second]</div><div class='del'>-          if components.include?(nil)</div><div class='del'>-            nil</div><div class='del'>-          else</div><div class='del'>-            components.unshift(hour) if hour and hour &gt; 0</div><div class='del'>-            components.collect do |component|</div><div class='del'>-              "%02d" % component</div><div class='del'>-            end.join(":")</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      content_setup</div><div class='del'>-      alias_method(:value, :content)</div><div class='del'>-      remove_method(:content=)</div><div class='del'>-</div><div class='del'>-      attr_reader :hour, :minute, :second</div><div class='del'>-      def initialize(*args)</div><div class='del'>-        if Utils.element_initialize_arguments?(args)</div><div class='del'>-          super</div><div class='del'>-        else</div><div class='del'>-          super()</div><div class='del'>-          args = args[0] if args.size == 1 and args[0].is_a?(Array)</div><div class='del'>-          if args.size == 1</div><div class='del'>-            self.content = args[0]</div><div class='del'>-          elsif args.size &gt; 3</div><div class='del'>-            raise ArgumentError,</div><div class='del'>-                    "must be (do_validate, params), (content), " +</div><div class='del'>-                    "(minute, second), ([minute, second]), "  +</div><div class='del'>-                    "(hour, minute, second) or ([hour, minute, second]): " +</div><div class='del'>-                    args.inspect</div><div class='del'>-          else</div><div class='del'>-            @second, @minute, @hour = args.reverse</div><div class='del'>-            update_content</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def content=(value)</div><div class='del'>-        if value.nil?</div><div class='del'>-          @content = nil</div><div class='del'>-        elsif value.is_a?(self.class)</div><div class='del'>-          self.content = value.content</div><div class='del'>-        else</div><div class='del'>-          begin</div><div class='del'>-            @hour, @minute, @second = self.class.parse(value, @do_validate)</div><div class='del'>-          rescue ArgumentError</div><div class='del'>-            raise NotAvailableValueError.new(tag_name, value)</div><div class='del'>-          end</div><div class='del'>-          @content = value</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      alias_method(:value=, :content=)</div><div class='del'>-</div><div class='del'>-      def hour=(hour)</div><div class='del'>-        @hour = @do_validate ? Integer(hour) : hour.to_i</div><div class='del'>-        update_content</div><div class='del'>-        hour</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def minute=(minute)</div><div class='del'>-        @minute = @do_validate ? Integer(minute) : minute.to_i</div><div class='del'>-        update_content</div><div class='del'>-        minute</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def second=(second)</div><div class='del'>-        @second = @do_validate ? Integer(second) : second.to_i</div><div class='del'>-        update_content</div><div class='del'>-        second</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def full_name</div><div class='del'>-        tag_name_with_prefix(ITUNES_PREFIX)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def update_content</div><div class='del'>-        @content = self.class.construct(hour, minute, second)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def maker_target(target)</div><div class='del'>-        if @content</div><div class='del'>-          target.itunes_duration {|duration| duration}</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 setup_maker_element(duration)</div><div class='del'>-        super(duration)</div><div class='del'>-        duration.content = @content</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  class Rss</div><div class='del'>-    class Channel</div><div class='del'>-      include ITunesChannelModel</div><div class='del'>-      class Item; include ITunesItemModel; end</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-</div><div class='del'>-  element_infos =</div><div class='del'>-    ITunesChannelModel::ELEMENT_INFOS + ITunesItemModel::ELEMENT_INFOS</div><div class='del'>-  element_infos.each do |name, type|</div><div class='del'>-    case type</div><div class='del'>-    when :element, :elements, :attribute</div><div class='del'>-      class_name = Utils.to_class_name(name)</div><div class='del'>-      BaseListener.install_class_name(ITUNES_URI, name, "ITunes#{class_name}")</div><div class='del'>-    else</div><div class='del'>-      accessor_base = "#{ITUNES_PREFIX}_#{name.gsub(/-/, '_')}"</div><div class='del'>-      BaseListener.install_get_text_element(ITUNES_URI, name, accessor_base)</div><div class='del'>-    end</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/maker.rb b/lib/rss/maker.rb<br/>deleted file mode 100644<br/>index bcba1aaff3..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/maker.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,44 +0,0 @@</div><div class='del'>-require "rss/rss"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  module Maker</div><div class='del'>-    MAKERS = {}</div><div class='del'>-</div><div class='del'>-    class &lt;&lt; self</div><div class='del'>-      def make(version, &amp;block)</div><div class='del'>-        m = maker(version)</div><div class='del'>-        raise UnsupportedMakerVersionError.new(version) if m.nil?</div><div class='del'>-        m[:maker].make(m[:version], &amp;block)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def maker(version)</div><div class='del'>-        MAKERS[version]</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def add_maker(version, normalized_version, maker)</div><div class='del'>-        MAKERS[version] = {:maker =&gt; maker, :version =&gt; normalized_version}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def versions</div><div class='del'>-        MAKERS.keys.uniq.sort</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def makers</div><div class='del'>-        MAKERS.values.collect {|info| info[:maker]}.uniq</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'>-require "rss/maker/1.0"</div><div class='del'>-require "rss/maker/2.0"</div><div class='del'>-require "rss/maker/feed"</div><div class='del'>-require "rss/maker/entry"</div><div class='del'>-require "rss/maker/content"</div><div class='del'>-require "rss/maker/dublincore"</div><div class='del'>-require "rss/maker/slash"</div><div class='del'>-require "rss/maker/syndication"</div><div class='del'>-require "rss/maker/taxonomy"</div><div class='del'>-require "rss/maker/trackback"</div><div class='del'>-require "rss/maker/image"</div><div class='del'>-require "rss/maker/itunes"</div><div class='head'>diff --git a/lib/rss/maker/0.9.rb b/lib/rss/maker/0.9.rb<br/>deleted file mode 100644<br/>index 72b14dc977..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/maker/0.9.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/0.9.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,467 +0,0 @@</div><div class='del'>-require "rss/0.9"</div><div class='del'>-</div><div class='del'>-require "rss/maker/base"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  module Maker</div><div class='del'>-    </div><div class='del'>-    class RSS09 &lt; RSSBase</div><div class='del'>-      </div><div class='del'>-      def initialize(feed_version="0.92")</div><div class='del'>-        super</div><div class='del'>-        @feed_type = "rss"</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      private</div><div class='del'>-      def make_feed</div><div class='del'>-        Rss.new(@feed_version, @version, @encoding, @standalone)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_elements(rss)</div><div class='del'>-        setup_channel(rss)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Channel &lt; ChannelBase</div><div class='del'>-        def to_feed(rss)</div><div class='del'>-          channel = Rss::Channel.new</div><div class='del'>-          set = setup_values(channel)</div><div class='del'>-          _not_set_required_variables = not_set_required_variables</div><div class='del'>-          if _not_set_required_variables.empty?</div><div class='del'>-            rss.channel = channel</div><div class='del'>-            set_parent(channel, rss)</div><div class='del'>-            setup_items(rss)</div><div class='del'>-            setup_image(rss)</div><div class='del'>-            setup_textinput(rss)</div><div class='del'>-            setup_other_elements(rss, channel)</div><div class='del'>-            rss</div><div class='del'>-          else</div><div class='del'>-            raise NotSetError.new("maker.channel", _not_set_required_variables)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        private</div><div class='del'>-        def setup_items(rss)</div><div class='del'>-          @maker.items.to_feed(rss)</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        def setup_image(rss)</div><div class='del'>-          @maker.image.to_feed(rss)</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        def setup_textinput(rss)</div><div class='del'>-          @maker.textinput.to_feed(rss)</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        def variables</div><div class='del'>-          super + ["pubDate"]</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_variable_names</div><div class='del'>-          %w(link language)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def not_set_required_variables</div><div class='del'>-          vars = super</div><div class='del'>-          vars &lt;&lt; "description" unless description {|d| d.have_required_values?}</div><div class='del'>-          vars &lt;&lt; "title" unless title {|t| t.have_required_values?}</div><div class='del'>-          vars</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class SkipDays &lt; SkipDaysBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            unless @days.empty?</div><div class='del'>-              skipDays = Rss::Channel::SkipDays.new</div><div class='del'>-              channel.skipDays = skipDays</div><div class='del'>-              set_parent(skipDays, channel)</div><div class='del'>-              @days.each do |day|</div><div class='del'>-                day.to_feed(rss, skipDays.days)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          class Day &lt; DayBase</div><div class='del'>-            def to_feed(rss, days)</div><div class='del'>-              day = Rss::Channel::SkipDays::Day.new</div><div class='del'>-              set = setup_values(day)</div><div class='del'>-              if set</div><div class='del'>-                days &lt;&lt; day</div><div class='del'>-                set_parent(day, days)</div><div class='del'>-                setup_other_elements(rss, day)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(content)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class SkipHours &lt; SkipHoursBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            unless @hours.empty?</div><div class='del'>-              skipHours = Rss::Channel::SkipHours.new</div><div class='del'>-              channel.skipHours = skipHours</div><div class='del'>-              set_parent(skipHours, channel)</div><div class='del'>-              @hours.each do |hour|</div><div class='del'>-                hour.to_feed(rss, skipHours.hours)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          class Hour &lt; HourBase</div><div class='del'>-            def to_feed(rss, hours)</div><div class='del'>-              hour = Rss::Channel::SkipHours::Hour.new</div><div class='del'>-              set = setup_values(hour)</div><div class='del'>-              if set</div><div class='del'>-                hours &lt;&lt; hour</div><div class='del'>-                set_parent(hour, hours)</div><div class='del'>-                setup_other_elements(rss, hour)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(content)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class Cloud &lt; CloudBase</div><div class='del'>-          def to_feed(*args)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Categories &lt; CategoriesBase</div><div class='del'>-          def to_feed(*args)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Category &lt; CategoryBase</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Links &lt; LinksBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            return if @links.empty?</div><div class='del'>-            @links.first.to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Link &lt; LinkBase</div><div class='del'>-            def to_feed(rss, channel)</div><div class='del'>-              if have_required_values?</div><div class='del'>-                channel.link = href</div><div class='del'>-              else</div><div class='del'>-                raise NotSetError.new("maker.channel.link",</div><div class='del'>-                                      not_set_required_variables)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(href)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Authors &lt; AuthorsBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Author &lt; AuthorBase</div><div class='del'>-            def to_feed(rss, channel)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Contributors &lt; ContributorsBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Contributor &lt; ContributorBase</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Generator &lt; GeneratorBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Copyright &lt; CopyrightBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            channel.copyright = content if have_required_values?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            %w(content)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Description &lt; DescriptionBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            channel.description = content if have_required_values?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            %w(content)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Title &lt; TitleBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            channel.title = content if have_required_values?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            %w(content)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Image &lt; ImageBase</div><div class='del'>-        def to_feed(rss)</div><div class='del'>-          image = Rss::Channel::Image.new</div><div class='del'>-          set = setup_values(image)</div><div class='del'>-          if set</div><div class='del'>-            image.link = link</div><div class='del'>-            rss.channel.image = image</div><div class='del'>-            set_parent(image, rss.channel)</div><div class='del'>-            setup_other_elements(rss, image)</div><div class='del'>-          elsif required_element?</div><div class='del'>-            raise NotSetError.new("maker.image", not_set_required_variables)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def required_variable_names</div><div class='del'>-          %w(url title link)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_element?</div><div class='del'>-          true</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      class Items &lt; ItemsBase</div><div class='del'>-        def to_feed(rss)</div><div class='del'>-          if rss.channel</div><div class='del'>-            normalize.each do |item|</div><div class='del'>-              item.to_feed(rss)</div><div class='del'>-            end</div><div class='del'>-            setup_other_elements(rss, rss.items)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class Item &lt; ItemBase</div><div class='del'>-          def to_feed(rss)</div><div class='del'>-            item = Rss::Channel::Item.new</div><div class='del'>-            set = setup_values(item)</div><div class='del'>-            _not_set_required_variables = not_set_required_variables</div><div class='del'>-            if _not_set_required_variables.empty?</div><div class='del'>-              rss.items &lt;&lt; item</div><div class='del'>-              set_parent(item, rss.channel)</div><div class='del'>-              setup_other_elements(rss, item)</div><div class='del'>-            elsif variable_is_set?</div><div class='del'>-              raise NotSetError.new("maker.items", _not_set_required_variables)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            []</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def not_set_required_variables</div><div class='del'>-            vars = super</div><div class='del'>-            if @maker.feed_version == "0.91"</div><div class='del'>-              vars &lt;&lt; "title" unless title {|t| t.have_required_values?}</div><div class='del'>-              vars &lt;&lt; "link" unless link {|l| l.have_required_values?}</div><div class='del'>-            end</div><div class='del'>-            vars</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Guid &lt; GuidBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Enclosure &lt; EnclosureBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Source &lt; SourceBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Authors &lt; AuthorsBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Author &lt; AuthorBase</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Categories &lt; CategoriesBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Category &lt; CategoryBase</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Contributors &lt; ContributorsBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Contributor &lt; ContributorBase</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Generator &lt; GeneratorBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Icon &lt; IconBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Links &lt; LinksBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Link &lt; LinkBase</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Logo &lt; LogoBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Rights &lt; RightsBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Subtitle &lt; SubtitleBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Title &lt; TitleBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Categories &lt; CategoriesBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Category &lt; CategoryBase</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Authors &lt; AuthorsBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Author &lt; AuthorBase</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Links &lt; LinksBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              return if @links.empty?</div><div class='del'>-              @links.first.to_feed(rss, item)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Link &lt; LinkBase</div><div class='del'>-              def to_feed(rss, item)</div><div class='del'>-                if have_required_values?</div><div class='del'>-                  item.link = href</div><div class='del'>-                else</div><div class='del'>-                  raise NotSetError.new("maker.link",</div><div class='del'>-                                        not_set_required_variables)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              private</div><div class='del'>-              def required_variable_names</div><div class='del'>-                %w(href)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Contributors &lt; ContributorsBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Contributor &lt; ContributorBase</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Rights &lt; RightsBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Description &lt; DescriptionBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              item.description = content if have_required_values?</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(content)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Content &lt; ContentBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Title &lt; TitleBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              item.title = content if have_required_values?</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(content)</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 Textinput &lt; TextinputBase</div><div class='del'>-        def to_feed(rss)</div><div class='del'>-          textInput = Rss::Channel::TextInput.new</div><div class='del'>-          set = setup_values(textInput)</div><div class='del'>-          if set</div><div class='del'>-            rss.channel.textInput = textInput</div><div class='del'>-            set_parent(textInput, rss.channel)</div><div class='del'>-            setup_other_elements(rss, textInput)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def required_variable_names</div><div class='del'>-          %w(title description name link)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    add_maker("0.9", "0.92", RSS09)</div><div class='del'>-    add_maker("0.91", "0.91", RSS09)</div><div class='del'>-    add_maker("0.92", "0.92", RSS09)</div><div class='del'>-    add_maker("rss0.91", "0.91", RSS09)</div><div class='del'>-    add_maker("rss0.92", "0.92", RSS09)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/maker/1.0.rb b/lib/rss/maker/1.0.rb<br/>deleted file mode 100644<br/>index a1e2594f70..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/maker/1.0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/1.0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,434 +0,0 @@</div><div class='del'>-require "rss/1.0"</div><div class='del'>-</div><div class='del'>-require "rss/maker/base"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  module Maker</div><div class='del'>-</div><div class='del'>-    class RSS10 &lt; RSSBase</div><div class='del'>-</div><div class='del'>-      def initialize(feed_version="1.0")</div><div class='del'>-        super</div><div class='del'>-        @feed_type = "rss"</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def make_feed</div><div class='del'>-        RDF.new(@version, @encoding, @standalone)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_elements(rss)</div><div class='del'>-        setup_channel(rss)</div><div class='del'>-        setup_image(rss)</div><div class='del'>-        setup_items(rss)</div><div class='del'>-        setup_textinput(rss)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Channel &lt; ChannelBase</div><div class='del'>-</div><div class='del'>-        def to_feed(rss)</div><div class='del'>-          set_default_values do</div><div class='del'>-            _not_set_required_variables = not_set_required_variables</div><div class='del'>-            if _not_set_required_variables.empty?</div><div class='del'>-              channel = RDF::Channel.new(@about)</div><div class='del'>-              set = setup_values(channel)</div><div class='del'>-              channel.dc_dates.clear</div><div class='del'>-              rss.channel = channel</div><div class='del'>-              set_parent(channel, rss)</div><div class='del'>-              setup_items(rss)</div><div class='del'>-              setup_image(rss)</div><div class='del'>-              setup_textinput(rss)</div><div class='del'>-              setup_other_elements(rss, channel)</div><div class='del'>-            else</div><div class='del'>-              raise NotSetError.new("maker.channel", _not_set_required_variables)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def setup_items(rss)</div><div class='del'>-          items = RDF::Channel::Items.new</div><div class='del'>-          seq = items.Seq</div><div class='del'>-          set_parent(items, seq)</div><div class='del'>-          target_items = @maker.items.normalize</div><div class='del'>-          raise NotSetError.new("maker", ["items"]) if target_items.empty?</div><div class='del'>-          target_items.each do |item|</div><div class='del'>-            li = RDF::Channel::Items::Seq::Li.new(item.link)</div><div class='del'>-            seq.lis &lt;&lt; li</div><div class='del'>-            set_parent(li, seq)</div><div class='del'>-          end</div><div class='del'>-          rss.channel.items = items</div><div class='del'>-          set_parent(rss.channel, items)</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        def setup_image(rss)</div><div class='del'>-          if @maker.image.have_required_values?</div><div class='del'>-            image = RDF::Channel::Image.new(@maker.image.url)</div><div class='del'>-            rss.channel.image = image</div><div class='del'>-            set_parent(image, rss.channel)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def setup_textinput(rss)</div><div class='del'>-          if @maker.textinput.have_required_values?</div><div class='del'>-            textinput = RDF::Channel::Textinput.new(@maker.textinput.link)</div><div class='del'>-            rss.channel.textinput = textinput</div><div class='del'>-            set_parent(textinput, rss.channel)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_variable_names</div><div class='del'>-          %w(about link)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def not_set_required_variables</div><div class='del'>-          vars = super</div><div class='del'>-          vars &lt;&lt; "description" unless description {|d| d.have_required_values?}</div><div class='del'>-          vars &lt;&lt; "title" unless title {|t| t.have_required_values?}</div><div class='del'>-          vars</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class SkipDays &lt; SkipDaysBase</div><div class='del'>-          def to_feed(*args)</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          class Day &lt; DayBase</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class SkipHours &lt; SkipHoursBase</div><div class='del'>-          def to_feed(*args)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Hour &lt; HourBase</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class Cloud &lt; CloudBase</div><div class='del'>-          def to_feed(*args)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Categories &lt; CategoriesBase</div><div class='del'>-          def to_feed(*args)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Category &lt; CategoryBase</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Links &lt; LinksBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            return if @links.empty?</div><div class='del'>-            @links.first.to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Link &lt; LinkBase</div><div class='del'>-            def to_feed(rss, channel)</div><div class='del'>-              if have_required_values?</div><div class='del'>-                channel.link = href</div><div class='del'>-              else</div><div class='del'>-                raise NotSetError.new("maker.channel.link",</div><div class='del'>-                                      not_set_required_variables)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(href)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Authors &lt; AuthorsBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Author &lt; AuthorBase</div><div class='del'>-            def to_feed(rss, channel)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Contributors &lt; ContributorsBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Contributor &lt; ContributorBase</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Generator &lt; GeneratorBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Copyright &lt; CopyrightBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Description &lt; DescriptionBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            channel.description = content if have_required_values?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            %w(content)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Title &lt; TitleBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            channel.title = content if have_required_values?</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            %w(content)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Image &lt; ImageBase</div><div class='del'>-        def to_feed(rss)</div><div class='del'>-          if @url</div><div class='del'>-            image = RDF::Image.new(@url)</div><div class='del'>-            set = setup_values(image)</div><div class='del'>-            if set</div><div class='del'>-              rss.image = image</div><div class='del'>-              set_parent(image, rss)</div><div class='del'>-              setup_other_elements(rss, image)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def have_required_values?</div><div class='del'>-          super and @maker.channel.have_required_values?</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def variables</div><div class='del'>-          super + ["link"]</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_variable_names</div><div class='del'>-          %w(url title link)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Items &lt; ItemsBase</div><div class='del'>-        def to_feed(rss)</div><div class='del'>-          if rss.channel</div><div class='del'>-            normalize.each do |item|</div><div class='del'>-              item.to_feed(rss)</div><div class='del'>-            end</div><div class='del'>-            setup_other_elements(rss, rss.items)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Item &lt; ItemBase</div><div class='del'>-          def to_feed(rss)</div><div class='del'>-            set_default_values do</div><div class='del'>-              item = RDF::Item.new(link)</div><div class='del'>-              set = setup_values(item)</div><div class='del'>-              if set</div><div class='del'>-                item.dc_dates.clear</div><div class='del'>-                rss.items &lt;&lt; item</div><div class='del'>-                set_parent(item, rss)</div><div class='del'>-                setup_other_elements(rss, item)</div><div class='del'>-              elsif !have_required_values?</div><div class='del'>-                raise NotSetError.new("maker.item", not_set_required_variables)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            %w(link)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def variables</div><div class='del'>-            super + %w(link)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def not_set_required_variables</div><div class='del'>-            set_default_values do</div><div class='del'>-              vars = super</div><div class='del'>-              vars &lt;&lt; "title" unless title {|t| t.have_required_values?}</div><div class='del'>-              vars</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Guid &lt; GuidBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Enclosure &lt; EnclosureBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Source &lt; SourceBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Authors &lt; AuthorsBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Author &lt; AuthorBase</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Categories &lt; CategoriesBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Category &lt; CategoryBase</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Contributors &lt; ContributorsBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Contributor &lt; ContributorBase</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Generator &lt; GeneratorBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Icon &lt; IconBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Links &lt; LinksBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Link &lt; LinkBase</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Logo &lt; LogoBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Rights &lt; RightsBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Subtitle &lt; SubtitleBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Title &lt; TitleBase</div><div class='del'>-              def to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Categories &lt; CategoriesBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Category &lt; CategoryBase</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Authors &lt; AuthorsBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Author &lt; AuthorBase</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Links &lt; LinksBase</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Link &lt; LinkBase</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Contributors &lt; ContributorsBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Contributor &lt; ContributorBase</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Rights &lt; RightsBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Description &lt; DescriptionBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              item.description = content if have_required_values?</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(content)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Content &lt; ContentBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Title &lt; TitleBase</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              item.title = content if have_required_values?</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(content)</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 Textinput &lt; TextinputBase</div><div class='del'>-        def to_feed(rss)</div><div class='del'>-          if @link</div><div class='del'>-            textinput = RDF::Textinput.new(@link)</div><div class='del'>-            set = setup_values(textinput)</div><div class='del'>-            if set</div><div class='del'>-              rss.textinput = textinput</div><div class='del'>-              set_parent(textinput, rss)</div><div class='del'>-              setup_other_elements(rss, textinput)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def have_required_values?</div><div class='del'>-          super and @maker.channel.have_required_values?</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def required_variable_names</div><div class='del'>-          %w(title description name link)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    add_maker("1.0", "1.0", RSS10)</div><div class='del'>-    add_maker("rss1.0", "1.0", RSS10)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/maker/2.0.rb b/lib/rss/maker/2.0.rb<br/>deleted file mode 100644<br/>index 67d68126ac..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/maker/2.0.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/2.0.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,223 +0,0 @@</div><div class='del'>-require "rss/2.0"</div><div class='del'>-</div><div class='del'>-require "rss/maker/0.9"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  module Maker</div><div class='del'>-    </div><div class='del'>-    class RSS20 &lt; RSS09</div><div class='del'>-      </div><div class='del'>-      def initialize(feed_version="2.0")</div><div class='del'>-        super</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class Channel &lt; RSS09::Channel</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def required_variable_names</div><div class='del'>-          %w(link)</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class SkipDays &lt; RSS09::Channel::SkipDays</div><div class='del'>-          class Day &lt; RSS09::Channel::SkipDays::Day</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class SkipHours &lt; RSS09::Channel::SkipHours</div><div class='del'>-          class Hour &lt; RSS09::Channel::SkipHours::Hour</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        class Cloud &lt; RSS09::Channel::Cloud</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            cloud = Rss::Channel::Cloud.new</div><div class='del'>-            set = setup_values(cloud)</div><div class='del'>-            if set</div><div class='del'>-              channel.cloud = cloud</div><div class='del'>-              set_parent(cloud, channel)</div><div class='del'>-              setup_other_elements(rss, cloud)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            %w(domain port path registerProcedure protocol)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Categories &lt; RSS09::Channel::Categories</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            @categories.each do |category|</div><div class='del'>-              category.to_feed(rss, channel)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-          </div><div class='del'>-          class Category &lt; RSS09::Channel::Categories::Category</div><div class='del'>-            def to_feed(rss, channel)</div><div class='del'>-              category = Rss::Channel::Category.new</div><div class='del'>-              set = setup_values(category)</div><div class='del'>-              if set</div><div class='del'>-                channel.categories &lt;&lt; category</div><div class='del'>-                set_parent(category, channel)</div><div class='del'>-                setup_other_elements(rss, category)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(content)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        class Generator &lt; GeneratorBase</div><div class='del'>-          def to_feed(rss, channel)</div><div class='del'>-            channel.generator = content</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            %w(content)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      class Image &lt; RSS09::Image</div><div class='del'>-        private</div><div class='del'>-        def required_element?</div><div class='del'>-          false</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      class Items &lt; RSS09::Items</div><div class='del'>-        class Item &lt; RSS09::Items::Item</div><div class='del'>-          private</div><div class='del'>-          def required_variable_names</div><div class='del'>-            []</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def not_set_required_variables</div><div class='del'>-            vars = super</div><div class='del'>-            if !title {|t| t.have_required_values?} and</div><div class='del'>-                !description {|d| d.have_required_values?}</div><div class='del'>-              vars &lt;&lt; "title or description"</div><div class='del'>-            end</div><div class='del'>-            vars</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def variables</div><div class='del'>-            super + ["pubDate"]</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Guid &lt; RSS09::Items::Item::Guid</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              guid = Rss::Channel::Item::Guid.new</div><div class='del'>-              set = setup_values(guid)</div><div class='del'>-              if set</div><div class='del'>-                item.guid = guid</div><div class='del'>-                set_parent(guid, item)</div><div class='del'>-                setup_other_elements(rss, guid)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(content)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Enclosure &lt; RSS09::Items::Item::Enclosure</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              enclosure = Rss::Channel::Item::Enclosure.new</div><div class='del'>-              set = setup_values(enclosure)</div><div class='del'>-              if set</div><div class='del'>-                item.enclosure = enclosure</div><div class='del'>-                set_parent(enclosure, item)</div><div class='del'>-                setup_other_elements(rss, enclosure)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(url length type)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Source &lt; RSS09::Items::Item::Source</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              source = Rss::Channel::Item::Source.new</div><div class='del'>-              set = setup_values(source)</div><div class='del'>-              if set</div><div class='del'>-                item.source = source</div><div class='del'>-                set_parent(source, item)</div><div class='del'>-                setup_other_elements(rss, source)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            private</div><div class='del'>-            def required_variable_names</div><div class='del'>-              %w(url content)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Links &lt; RSS09::Items::Item::Source::Links</div><div class='del'>-              def to_feed(rss, source)</div><div class='del'>-                return if @links.empty?</div><div class='del'>-                @links.first.to_feed(rss, source)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              class Link &lt; RSS09::Items::Item::Source::Links::Link</div><div class='del'>-                def to_feed(rss, source)</div><div class='del'>-                  source.url = href</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 Categories &lt; RSS09::Items::Item::Categories</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              @categories.each do |category|</div><div class='del'>-                category.to_feed(rss, item)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          </div><div class='del'>-            class Category &lt; RSS09::Items::Item::Categories::Category</div><div class='del'>-              def to_feed(rss, item)</div><div class='del'>-                category = Rss::Channel::Item::Category.new</div><div class='del'>-                set = setup_values(category)</div><div class='del'>-                if set</div><div class='del'>-                  item.categories &lt;&lt; category</div><div class='del'>-                  set_parent(category, item)</div><div class='del'>-                  setup_other_elements(rss)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              private</div><div class='del'>-              def required_variable_names</div><div class='del'>-                %w(content)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          class Authors &lt; RSS09::Items::Item::Authors</div><div class='del'>-            def to_feed(rss, item)</div><div class='del'>-              return if @authors.empty?</div><div class='del'>-              @authors.first.to_feed(rss, item)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            class Author &lt; RSS09::Items::Item::Authors::Author</div><div class='del'>-              def to_feed(rss, item)</div><div class='del'>-                item.author = name</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 Textinput &lt; RSS09::Textinput</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    add_maker("2.0", "2.0", RSS20)</div><div class='del'>-    add_maker("rss2.0", "2.0", RSS20)</div><div class='del'>-  end</div><div class='del'>-end</div><div class='head'>diff --git a/lib/rss/maker/atom.rb b/lib/rss/maker/atom.rb<br/>deleted file mode 100644<br/>index fd3198cd9e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/maker/atom.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/atom.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,172 +0,0 @@</div><div class='del'>-require "rss/atom"</div><div class='del'>-</div><div class='del'>-require "rss/maker/base"</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  module Maker</div><div class='del'>-    module AtomPersons</div><div class='del'>-      module_function</div><div class='del'>-      def def_atom_persons(klass, name, maker_name, plural=nil)</div><div class='del'>-        plural ||= "#{name}s"</div><div class='del'>-        klass_name = Utils.to_class_name(name)</div><div class='del'>-        plural_klass_name = Utils.to_class_name(plural)</div><div class='del'>-</div><div class='del'>-        klass.class_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-          class #{plural_klass_name} &lt; #{plural_klass_name}Base</div><div class='del'>-            class #{klass_name} &lt; #{klass_name}Base</div><div class='del'>-              def to_feed(feed, current)</div><div class='del'>-                #{name} = feed.class::#{klass_name}.new</div><div class='del'>-                set = setup_values(#{name})</div><div class='del'>-                unless set</div><div class='del'>-                  raise NotSetError.new(#{maker_name.dump},</div><div class='del'>-                                        not_set_required_variables)</div><div class='del'>-                end</div><div class='del'>-                current.#{plural} &lt;&lt; #{name}</div><div class='del'>-                set_parent(#{name}, current)</div><div class='del'>-                setup_other_elements(#{name})</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              private</div><div class='del'>-              def required_variable_names</div><div class='del'>-                %w(name)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-EOC</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module AtomTextConstruct</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def def_atom_text_construct(klass, name, maker_name, klass_name=nil,</div><div class='del'>-                                    atom_klass_name=nil)</div><div class='del'>-          klass_name ||= Utils.to_class_name(name)</div><div class='del'>-          atom_klass_name ||= Utils.to_class_name(name)</div><div class='del'>-</div><div class='del'>-          klass.class_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-            class #{klass_name} &lt; #{klass_name}Base</div><div class='del'>-              include #{self.name}</div><div class='del'>-              def to_feed(feed, current)</div><div class='del'>-                #{name} = current.class::#{atom_klass_name}.new</div><div class='del'>-                if setup_values(#{name})</div><div class='del'>-                  current.#{name} = #{name}</div><div class='del'>-                  set_parent(#{name}, current)</div><div class='del'>-                  setup_other_elements(feed)</div><div class='del'>-                elsif variable_is_set?</div><div class='del'>-                  raise NotSetError.new(#{maker_name.dump},</div><div class='del'>-                                        not_set_required_variables)</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          EOC</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def required_variable_names</div><div class='del'>-        if type == "xhtml"</div><div class='del'>-          %w(xml_content)</div><div class='del'>-        else</div><div class='del'>-          %w(content)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def variables</div><div class='del'>-        if type == "xhtml"</div><div class='del'>-          super + %w(xhtml)</div><div class='del'>-        else</div><div class='del'>-          super</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module AtomCategory</div><div class='del'>-      def to_feed(feed, current)</div><div class='del'>-        category = feed.class::Category.new</div><div class='del'>-        set = setup_values(category)</div><div class='del'>-        if set</div><div class='del'>-          current.categories &lt;&lt; category</div><div class='del'>-          set_parent(category, current)</div><div class='del'>-          setup_other_elements(feed)</div><div class='del'>-        else</div><div class='del'>-          raise NotSetError.new(self.class.not_set_name,</div><div class='del'>-                                not_set_required_variables)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def required_variable_names</div><div class='del'>-        %w(term)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def variables</div><div class='del'>-        super + ["term", "scheme"]</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module AtomLink</div><div class='del'>-      def to_feed(feed, current)</div><div class='del'>-        link = feed.class::Link.new</div><div class='del'>-        set = setup_values(link)</div><div class='del'>-        if set</div><div class='del'>-          current.links &lt;&lt; link</div><div class='del'>-          set_parent(link, current)</div><div class='del'>-          setup_other_elements(feed)</div><div class='del'>-        else</div><div class='del'>-          raise NotSetError.new(self.class.not_set_name,</div><div class='del'>-                                not_set_required_variables)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def required_variable_names</div><div class='del'>-        %w(href)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module AtomGenerator</div><div class='del'>-      def to_feed(feed, current)</div><div class='del'>-        generator = current.class::Generator.new</div><div class='del'>-        if setup_values(generator)</div><div class='del'>-          current.generator = generator</div><div class='del'>-          set_parent(generator, current)</div><div class='del'>-          setup_other_elements(feed)</div><div class='del'>-        elsif variable_is_set?</div><div class='del'>-          raise NotSetError.new(self.class.not_set_name,</div><div class='del'>-                                not_set_required_variables)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def required_variable_names</div><div class='del'>-        %w(content)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module AtomLogo</div><div class='del'>-      def to_feed(feed, current)</div><div class='del'>-        logo = current.class::Logo.new</div><div class='del'>-        class &lt;&lt; logo</div><div class='del'>-          alias_method(:uri=, :content=)</div><div class='del'>-        end</div><div class='del'>-        set = setup_values(logo)</div><div class='del'>-        class &lt;&lt; logo</div><div class='del'>-          remove_method(:uri=)</div><div class='del'>-        end</div><div class='del'>-        if set</div><div class='del'>-          current.logo = logo</div><div class='del'>-          set_parent(logo, current)</div><div class='del'>-          setup_other_elements(feed)</div><div class='del'>-        elsif variable_is_set?</div><div class='del'>-          raise NotSetError.new(self.class.not_set_name,</div><div class='del'>-                                not_set_required_variables)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def required_variable_names</div><div class='del'>-        %w(uri)</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/lib/rss/maker/base.rb b/lib/rss/maker/base.rb<br/>deleted file mode 100644<br/>index 56bf04657e..0000000000<br/>--- a/<a href='/ruby.git/tree/lib/rss/maker/base.rb?h=v0_50&amp;id=82a63f3daa7472ce6c03bd7b68ea73fde1046754'>lib/rss/maker/base.rb</a><br/>+++ /dev/null</div><div class='hunk'>@@ -1,868 +0,0 @@</div><div class='del'>-require 'forwardable'</div><div class='del'>-</div><div class='del'>-require 'rss/rss'</div><div class='del'>-</div><div class='del'>-module RSS</div><div class='del'>-  module Maker</div><div class='del'>-    class Base</div><div class='del'>-      extend Utils::InheritedReader</div><div class='del'>-</div><div class='del'>-      OTHER_ELEMENTS = []</div><div class='del'>-      NEED_INITIALIZE_VARIABLES = []</div><div class='del'>-</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def other_elements</div><div class='del'>-          inherited_array_reader("OTHER_ELEMENTS")</div><div class='del'>-        end</div><div class='del'>-        def need_initialize_variables</div><div class='del'>-          inherited_array_reader("NEED_INITIALIZE_VARIABLES")</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def inherited_base</div><div class='del'>-          ::RSS::Maker::Base</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def inherited(subclass)</div><div class='del'>-          subclass.const_set("OTHER_ELEMENTS", [])</div><div class='del'>-          subclass.const_set("NEED_INITIALIZE_VARIABLES", [])</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def add_other_element(variable_name)</div><div class='del'>-          self::OTHER_ELEMENTS &lt;&lt; variable_name</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def add_need_initialize_variable(variable_name, init_value="nil")</div><div class='del'>-          self::NEED_INITIALIZE_VARIABLES &lt;&lt; [variable_name, init_value]</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def def_array_element(name, plural=nil, klass_name=nil)</div><div class='del'>-          include Enumerable</div><div class='del'>-          extend Forwardable</div><div class='del'>-</div><div class='del'>-          plural ||= "#{name}s"</div><div class='del'>-          klass_name ||= Utils.to_class_name(name)</div><div class='del'>-          def_delegators("@#{plural}", :&lt;&lt;, :[], :[]=, :first, :last)</div><div class='del'>-          def_delegators("@#{plural}", :push, :pop, :shift, :unshift)</div><div class='del'>-          def_delegators("@#{plural}", :each, :size, :empty?, :clear)</div><div class='del'>-</div><div class='del'>-          add_need_initialize_variable(plural, "[]")</div><div class='del'>-</div><div class='del'>-          module_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-            def new_#{name}</div><div class='del'>-              #{name} = self.class::#{klass_name}.new(@maker)</div><div class='del'>-              @#{plural} &lt;&lt; #{name}</div><div class='del'>-              if block_given?</div><div class='del'>-                yield #{name}</div><div class='del'>-              else</div><div class='del'>-                #{name}</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-            alias new_child new_#{name}</div><div class='del'>-</div><div class='del'>-            def to_feed(*args)</div><div class='del'>-              @#{plural}.each do |#{name}|</div><div class='del'>-                #{name}.to_feed(*args)</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            def replace(elements)</div><div class='del'>-              @#{plural}.replace(elements.to_a)</div><div class='del'>-            end</div><div class='del'>-          EOC</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def def_classed_element_without_accessor(name, class_name=nil)</div><div class='del'>-          class_name ||= Utils.to_class_name(name)</div><div class='del'>-          add_other_element(name)</div><div class='del'>-          add_need_initialize_variable(name, "make_#{name}")</div><div class='del'>-          module_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-            private</div><div class='del'>-            def setup_#{name}(feed, current)</div><div class='del'>-              @#{name}.to_feed(feed, current)</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            def make_#{name}</div><div class='del'>-              self.class::#{class_name}.new(@maker)</div><div class='del'>-            end</div><div class='del'>-          EOC</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def def_classed_element(name, class_name=nil, attribute_name=nil)</div><div class='del'>-          def_classed_element_without_accessor(name, class_name)</div><div class='del'>-          if attribute_name</div><div class='del'>-            module_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-              def #{name}</div><div class='del'>-                if block_given?</div><div class='del'>-                  yield(@#{name})</div><div class='del'>-                else</div><div class='del'>-                  @#{name}.#{attribute_name}</div><div class='del'>-                end</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              def #{name}=(new_value)</div><div class='del'>-                @#{name}.#{attribute_name} = new_value</div><div class='del'>-              end</div><div class='del'>-            EOC</div><div class='del'>-          else</div><div class='del'>-            attr_reader name</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def def_classed_elements(name, attribute, plural_class_name=nil,</div><div class='del'>-                                 plural_name=nil, new_name=nil)</div><div class='del'>-          plural_name ||= "#{name}s"</div><div class='del'>-          new_name ||= name</div><div class='del'>-          def_classed_element(plural_name, plural_class_name)</div><div class='del'>-          local_variable_name = "_#{name}"</div><div class='del'>-          new_value_variable_name = "new_value"</div><div class='del'>-          additional_setup_code = nil</div><div class='del'>-          if block_given?</div><div class='del'>-            additional_setup_code = yield(local_variable_name,</div><div class='del'>-                                          new_value_variable_name)</div><div class='del'>-          end</div><div class='del'>-          module_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-            def #{name}</div><div class='del'>-              #{local_variable_name} = #{plural_name}.first</div><div class='del'>-              #{local_variable_name} ? #{local_variable_name}.#{attribute} : nil</div><div class='del'>-            end</div><div class='del'>-</div><div class='del'>-            def #{name}=(#{new_value_variable_name})</div><div class='del'>-              #{local_variable_name} =</div><div class='del'>-                #{plural_name}.first || #{plural_name}.new_#{new_name}</div><div class='del'>-              #{additional_setup_code}</div><div class='del'>-              #{local_variable_name}.#{attribute} = #{new_value_variable_name}</div><div class='del'>-            end</div><div class='del'>-          EOC</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def def_other_element(name)</div><div class='del'>-          attr_accessor name</div><div class='del'>-          def_other_element_without_accessor(name)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def def_other_element_without_accessor(name)</div><div class='del'>-          add_need_initialize_variable(name)</div><div class='del'>-          add_other_element(name)</div><div class='del'>-          module_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-            def setup_#{name}(feed, current)</div><div class='del'>-              if !@#{name}.nil? and current.respond_to?(:#{name}=)</div><div class='del'>-                current.#{name} = @#{name}</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          EOC</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def def_csv_element(name, type=nil)</div><div class='del'>-          def_other_element_without_accessor(name)</div><div class='del'>-          attr_reader(name)</div><div class='del'>-          converter = ""</div><div class='del'>-          if type == :integer</div><div class='del'>-            converter = "{|v| Integer(v)}"</div><div class='del'>-          end</div><div class='del'>-          module_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-            def #{name}=(value)</div><div class='del'>-              @#{name} = Utils::CSV.parse(value)#{converter}</div><div class='del'>-            end</div><div class='del'>-          EOC</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      attr_reader :maker</div><div class='del'>-      def initialize(maker)</div><div class='del'>-        @maker = maker</div><div class='del'>-        @default_values_are_set = false</div><div class='del'>-        initialize_variables</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def have_required_values?</div><div class='del'>-        not_set_required_variables.empty?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def variable_is_set?</div><div class='del'>-        variables.any? {|var| not __send__(var).nil?}</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def initialize_variables</div><div class='del'>-        self.class.need_initialize_variables.each do |variable_name, init_value|</div><div class='del'>-          instance_eval("@#{variable_name} = #{init_value}", __FILE__, __LINE__)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_other_elements(feed, current=nil)</div><div class='del'>-        current ||= current_element(feed)</div><div class='del'>-        self.class.other_elements.each do |element|</div><div class='del'>-          __send__("setup_#{element}", feed, current)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def current_element(feed)</div><div class='del'>-        feed</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def set_default_values(&amp;block)</div><div class='del'>-        return yield if @default_values_are_set</div><div class='del'>-</div><div class='del'>-        begin</div><div class='del'>-          @default_values_are_set = true</div><div class='del'>-          _set_default_values(&amp;block)</div><div class='del'>-        ensure</div><div class='del'>-          @default_values_are_set = false</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def _set_default_values(&amp;block)</div><div class='del'>-        yield</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def setup_values(target)</div><div class='del'>-        set = false</div><div class='del'>-        if have_required_values?</div><div class='del'>-          variables.each do |var|</div><div class='del'>-            setter = "#{var}="</div><div class='del'>-            if target.respond_to?(setter)</div><div class='del'>-              value = __send__(var)</div><div class='del'>-              if value</div><div class='del'>-                target.__send__(setter, value)</div><div class='del'>-                set = true</div><div class='del'>-              end</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-        set</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def set_parent(target, parent)</div><div class='del'>-        target.parent = parent if target.class.need_parent?</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def variables</div><div class='del'>-        self.class.need_initialize_variables.find_all do |name, init|</div><div class='del'>-          "nil" == init</div><div class='del'>-        end.collect do |name, init|</div><div class='del'>-          name</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def not_set_required_variables</div><div class='del'>-        required_variable_names.find_all do |var|</div><div class='del'>-          __send__(var).nil?</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def required_variables_are_set?</div><div class='del'>-        required_variable_names.each do |var|</div><div class='del'>-          return false if __send__(var).nil?</div><div class='del'>-        end</div><div class='del'>-        true</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module AtomPersonConstructBase</div><div class='del'>-      def self.append_features(klass)</div><div class='del'>-        super</div><div class='del'>-</div><div class='del'>-        klass.class_eval(&lt;&lt;-EOC, __FILE__, __LINE__ + 1)</div><div class='del'>-          %w(name uri email).each do |element|</div><div class='del'>-            attr_accessor element</div><div class='del'>-            add_need_initialize_variable(element)</div><div class='del'>-          end</div><div class='del'>-        EOC</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module AtomTextConstructBase</div><div class='del'>-      module EnsureXMLContent</div><div class='del'>-        class &lt;&lt; self</div><div class='del'>-          def included(base)</div><div class='del'>-            super</div><div class='del'>-            base.class_eval do</div><div class='del'>-              %w(type content xml_content).each do |element|</div><div class='del'>-                attr_reader element</div><div class='del'>-                attr_writer element if element != "xml_content"</div><div class='del'>-                add_need_initialize_variable(element)</div><div class='del'>-              end</div><div class='del'>-</div><div class='del'>-              alias_method(:xhtml, :xml_content)</div><div class='del'>-            end</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def ensure_xml_content(content)</div><div class='del'>-          xhtml_uri = ::RSS::Atom::XHTML_URI</div><div class='del'>-          unless content.is_a?(RSS::XML::Element) and</div><div class='del'>-              ["div", xhtml_uri] == [content.name, content.uri]</div><div class='del'>-            children = content</div><div class='del'>-            children = [children] unless content.is_a?(Array)</div><div class='del'>-            children = set_xhtml_uri_as_default_uri(children)</div><div class='del'>-            content = RSS::XML::Element.new("div", nil, xhtml_uri,</div><div class='del'>-                                            {"xmlns" =&gt; xhtml_uri},</div><div class='del'>-                                            children)</div><div class='del'>-          end</div><div class='del'>-          content</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def xml_content=(content)</div><div class='del'>-          @xml_content = ensure_xml_content(content)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def xhtml=(content)</div><div class='del'>-          self.xml_content = content</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def set_xhtml_uri_as_default_uri(children)</div><div class='del'>-          children.collect do |child|</div><div class='del'>-            if child.is_a?(RSS::XML::Element) and</div><div class='del'>-                child.prefix.nil? and child.uri.nil?</div><div class='del'>-              RSS::XML::Element.new(child.name, nil, ::RSS::Atom::XHTML_URI,</div><div class='del'>-                                    child.attributes.dup,</div><div class='del'>-                                    set_xhtml_uri_as_default_uri(child.children))</div><div class='del'>-            else</div><div class='del'>-              child</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 self.append_features(klass)</div><div class='del'>-        super</div><div class='del'>-</div><div class='del'>-        klass.class_eval do</div><div class='del'>-          include EnsureXMLContent</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    module SetupDefaultDate</div><div class='del'>-      private</div><div class='del'>-      def _set_default_values(&amp;block)</div><div class='del'>-        keep = {</div><div class='del'>-          :date =&gt; date,</div><div class='del'>-          :dc_dates =&gt; dc_dates.to_a.dup,</div><div class='del'>-        }</div><div class='del'>-        _date = date</div><div class='del'>-        if _date and !dc_dates.any? {|dc_date| dc_date.value == _date}</div><div class='del'>-          dc_date = self.class::DublinCoreDates::DublinCoreDate.new(self)</div><div class='del'>-          dc_date.value = _date.dup</div><div class='del'>-          dc_dates.unshift(dc_date)</div><div class='del'>-        end</div><div class='del'>-        self.date ||= self.dc_date</div><div class='del'>-        super(&amp;block)</div><div class='del'>-      ensure</div><div class='del'>-        date = keep[:date]</div><div class='del'>-        dc_dates.replace(keep[:dc_dates])</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class RSSBase &lt; Base</div><div class='del'>-      class &lt;&lt; self</div><div class='del'>-        def make(version, &amp;block)</div><div class='del'>-          new(version).make(&amp;block)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      %w(xml_stylesheets channel image items textinput).each do |element|</div><div class='del'>-        attr_reader element</div><div class='del'>-        add_need_initialize_variable(element, "make_#{element}")</div><div class='del'>-        module_eval(&lt;&lt;-EOC, __FILE__, __LINE__)</div><div class='del'>-          private</div><div class='del'>-          def setup_#{element}(feed)</div><div class='del'>-            @#{element}.to_feed(feed)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          def make_#{element}</div><div class='del'>-            self.class::#{Utils.to_class_name(element)}.new(self)</div><div class='del'>-          end</div><div class='del'>-        EOC</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      attr_reader :feed_version</div><div class='del'>-      alias_method(:rss_version, :feed_version)</div><div class='del'>-      attr_accessor :version, :encoding, :standalone</div><div class='del'>-</div><div class='del'>-      def initialize(feed_version)</div><div class='del'>-        super(self)</div><div class='del'>-        @feed_type = nil</div><div class='del'>-        @feed_subtype = nil</div><div class='del'>-        @feed_version = feed_version</div><div class='del'>-        @version = "1.0"</div><div class='del'>-        @encoding = "UTF-8"</div><div class='del'>-        @standalone = nil</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def make</div><div class='del'>-        if block_given?</div><div class='del'>-          yield(self)</div><div class='del'>-          to_feed</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 to_feed</div><div class='del'>-        feed = make_feed</div><div class='del'>-        setup_xml_stylesheets(feed)</div><div class='del'>-        setup_elements(feed)</div><div class='del'>-        setup_other_elements(feed)</div><div class='del'>-        if feed.valid?</div><div class='del'>-          feed</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'>-      private</div><div class='del'>-      remove_method :make_xml_stylesheets</div><div class='del'>-      def make_xml_stylesheets</div><div class='del'>-        XMLStyleSheets.new(self)</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-</div><div class='del'>-    class XMLStyleSheets &lt; Base</div><div class='del'>-      def_array_element("xml_stylesheet", nil, "XMLStyleSheet")</div><div class='del'>-</div><div class='del'>-      class XMLStyleSheet &lt; Base</div><div class='del'>-</div><div class='del'>-        ::RSS::XMLStyleSheet::ATTRIBUTES.each do |attribute|</div><div class='del'>-          attr_accessor attribute</div><div class='del'>-          add_need_initialize_variable(attribute)</div><div class='del'>-        end</div><div class='del'>-        </div><div class='del'>-        def to_feed(feed)</div><div class='del'>-          xss = ::RSS::XMLStyleSheet.new</div><div class='del'>-          guess_type_if_need(xss)</div><div class='del'>-          set = setup_values(xss)</div><div class='del'>-          if set</div><div class='del'>-            feed.xml_stylesheets &lt;&lt; xss</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        private</div><div class='del'>-        def guess_type_if_need(xss)</div><div class='del'>-          if @type.nil?</div><div class='del'>-            xss.href = @href</div><div class='del'>-            @type = xss.type</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def required_variable_names</div><div class='del'>-          %w(href type)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    class ChannelBase &lt; Base</div><div class='del'>-      include SetupDefaultDate</div><div class='del'>-</div><div class='del'>-      %w(cloud categories skipDays skipHours).each do |name|</div><div class='del'>-        def_classed_element(name)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      %w(generator copyright description title).each do |name|</div><div class='del'>-        def_classed_element(name, nil, "content")</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      [</div><div class='del'>-       ["link", "href", Proc.new {|target,| "#{target}.href = 'self'"}],</div><div class='del'>-       ["author", "name"],</div><div class='del'>-       ["contributor", "name"],</div><div class='del'>-      ].each do |name, attribute, additional_setup_maker|</div><div class='del'>-        def_classed_elements(name, attribute, &amp;additional_setup_maker)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      %w(id about language</div><div class='del'>-         managingEditor webMaster rating docs date</div><div class='del'>-         lastBuildDate ttl).each do |element|</div><div class='del'>-        attr_accessor element</div><div class='del'>-        add_need_initialize_variable(element)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def pubDate</div><div class='del'>-        date</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def pubDate=(date)</div><div class='del'>-        self.date = date</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def updated</div><div class='del'>-        date</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def updated=(date)</div><div class='del'>-        self.date = date</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      alias_method(:rights, :copyright)</div><div class='del'>-      alias_method(:rights=, :copyright=)</div><div class='del'>-</div><div class='del'>-      alias_method(:subtitle, :description)</div><div class='del'>-      alias_method(:subtitle=, :description=)</div><div class='del'>-</div><div class='del'>-      def icon</div><div class='del'>-        image_favicon.about</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def icon=(url)</div><div class='del'>-        image_favicon.about = url</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def logo</div><div class='del'>-        maker.image.url</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def logo=(url)</div><div class='del'>-        maker.image.url = url</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class SkipDaysBase &lt; Base</div><div class='del'>-        def_array_element("day")</div><div class='del'>-</div><div class='del'>-        class DayBase &lt; Base</div><div class='del'>-          %w(content).each do |element|</div><div class='del'>-            attr_accessor element</div><div class='del'>-            add_need_initialize_variable(element)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      class SkipHoursBase &lt; Base</div><div class='del'>-        def_array_element("hour")</div><div class='del'>-</div><div class='del'>-        class HourBase &lt; Base</div><div class='del'>-          %w(content).each do |element|</div><div class='del'>-            attr_accessor element</div><div class='del'>-            add_need_initialize_variable(element)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      class CloudBase &lt; Base</div><div class='del'>-        %w(domain port path registerProcedure protocol).each do |element|</div><div class='del'>-          attr_accessor element</div><div class='del'>-          add_need_initialize_variable(element)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class CategoriesBase &lt; Base</div><div class='del'>-        def_array_element("category", "categories")</div><div class='del'>-</div><div class='del'>-        class CategoryBase &lt; Base</div><div class='del'>-          %w(domain content label).each do |element|</div><div class='del'>-            attr_accessor element</div><div class='del'>-            add_need_initialize_variable(element)</div><div class='del'>-          end</div><div class='del'>-</div><div class='del'>-          alias_method(:term, :domain)</div><div class='del'>-          alias_method(:term=, :domain=)</div><div class='del'>-          alias_method(:scheme, :content)</div><div class='del'>-          alias_method(:scheme=, :content=)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class LinksBase &lt; Base</div><div class='del'>-        def_array_element("link")</div><div class='del'>-</div><div class='del'>-        class LinkBase &lt; Base</div><div class='del'>-          %w(href rel type hreflang title length).each do |element|</div><div class='del'>-            attr_accessor element</div><div class='del'>-            add_need_initialize_variable(element)</div><div class='del'>-          end</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class AuthorsBase &lt; Base</div><div class='del'>-        def_array_element("author")</div><div class='del'>-</div><div class='del'>-        class AuthorBase &lt; Base</div><div class='del'>-          include AtomPersonConstructBase</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class ContributorsBase &lt; Base</div><div class='del'>-        def_array_element("contributor")</div><div class='del'>-</div><div class='del'>-        class ContributorBase &lt; Base</div><div class='del'>-          include AtomPersonConstructBase</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class GeneratorBase &lt; Base</div><div class='del'>-        %w(uri version content).each do |element|</div><div class='del'>-          attr_accessor element</div><div class='del'>-          add_need_initialize_variable(element)</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class CopyrightBase &lt; Base</div><div class='del'>-        include AtomTextConstructBase</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class DescriptionBase &lt; Base</div><div class='del'>-        include AtomTextConstructBase</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class TitleBase &lt; Base</div><div class='del'>-        include AtomTextConstructBase</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    class ImageBase &lt; Base</div><div class='del'>-      %w(title url width height description).each do |element|</div><div class='del'>-        attr_accessor element</div><div class='del'>-        add_need_initialize_variable(element)</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      def link</div><div class='del'>-        @maker.channel.link</div><div class='del'>-      end</div><div class='del'>-    end</div><div class='del'>-    </div><div class='del'>-    class ItemsBase &lt; Base</div><div class='del'>-      def_array_element("item")</div><div class='del'>-</div><div class='del'>-      attr_accessor :do_sort, :max_size</div><div class='del'>-      </div><div class='del'>-      def initialize(maker)</div><div class='del'>-        super</div><div class='del'>-        @do_sort = false</div><div class='del'>-        @max_size = -1</div><div class='del'>-      end</div><div class='del'>-      </div><div class='del'>-      def normalize</div><div class='del'>-        if @max_size &gt;= 0</div><div class='del'>-          sort_if_need[0...@max_size]</div><div class='del'>-        else</div><div class='del'>-          sort_if_need[0..@max_size]</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      private</div><div class='del'>-      def sort_if_need</div><div class='del'>-        if @do_sort.respond_to?(:call)</div><div class='del'>-          @items.sort do |x, y|</div><div class='del'>-            @do_sort.call(x, y)</div><div class='del'>-          end</div><div class='del'>-        elsif @do_sort</div><div class='del'>-          @items.sort do |x, y|</div><div class='del'>-            y &lt;=&gt; x</div><div class='del'>-          end</div><div class='del'>-        else</div><div class='del'>-          @items</div><div class='del'>-        end</div><div class='del'>-      end</div><div class='del'>-</div><div class='del'>-      class ItemBase &lt; Base</div><div class='del'>-        include SetupDefaultDate</div><div class='del'>-</div><div class='del'>-        %w(guid enclosure source categories content).each do |name|</div><div class='del'>-          def_classed_element(name)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        %w(rights description title).each do |name|</div><div class='del'>-          def_classed_element(name, nil, "content")</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        [</div><div class='del'>-         ["author", "name"],</div><div class='del'>-         ["link", "href", Proc.new {|target,| "#{target}.href = 'alternate'"}],</div><div class='del'>-         ["contributor", "name"],</div><div class='del'>-        ].each do |name, attribute|</div><div class='del'>-          def_classed_elements(name, attribute)</div><div class='del'>-	end</div><div class='del'>-</div><div class='del'>-        %w(date comments id published).each do |element|</div><div class='del'>-          attr_accessor element</div><div class='del'>-          add_need_initialize_variable(element)</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def pubDate</div><div class='del'>-          date</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def pubDate=(date)</div><div class='del'>-          self.date = date</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def updated</div><div class='del'>-          date</div><div class='del'>-        end</div><div class='del'>-</div><div class='del'>-        def updated=(date)</div><div class='del'>-          self.date = date